diff --git a/.config/suppress.json b/.config/suppress.json
new file mode 100644
index 00000000000..9be220b291e
--- /dev/null
+++ b/.config/suppress.json
@@ -0,0 +1,17 @@
+{
+  "tool": "Credential Scanner",
+  "suppressions": [
+    {
+      "file": "\\test\\tools\\Modules\\WebListener\\ClientCert.pfx",
+      "_justification": "Test certificate with private key"
+    },
+    {
+      "file": "\\test\\tools\\Modules\\WebListener\\ServerCert.pfx",
+      "_justification": "Test certificate with private key"
+    },
+    {
+      "file": "\\test\\powershell\\Modules\\Microsoft.PowerShell.Security\\certificateCommon.psm1",
+      "_justification": "Test certificate with private key and inline suppression isn't working"
+    }
+  ]
+}
diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json
new file mode 100644
index 00000000000..786ef4331a2
--- /dev/null
+++ b/.config/tsaoptions.json
@@ -0,0 +1,12 @@
+{
+    "codebaseName": "TFSMSAzure_PowerShell",
+    "instanceUrl": "https://msazure.visualstudio.com",
+    "projectName": "One",
+    "areaPath": "One\\MGMT\\Compute\\Powershell\\Powershell\\PowerShell Core\\pwsh",
+    "notificationAliases": [
+        "adityap@microsoft.com",
+        "dongbow@microsoft.com",
+        "pmeinecke@microsoft.com",
+        "tplunk@microsoft.com"
+    ]
+}
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index af18c5ffe6f..c849a9f78e5 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -3,13 +3,14 @@
 # Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
 #-------------------------------------------------------------------------------------------------------------
 
-FROM mcr.microsoft.com/powershell/test-deps:ubuntu-18.04
+FROM mcr.microsoft.com/powershell/test-deps:ubuntu-20.04@sha256:d1609c57d2426b9cfffa3a3ab7bda5ebc4448700f8ba8ef377692c4a70e64b8c
 
 # Avoid warnings by switching to noninteractive
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Configure apt and install packages
 RUN apt-get update \
+    && apt-get -y upgrade \
     && apt-get -y install --no-install-recommends apt-utils 2>&1 \
     #
     # Verify git, process tools, lsb-release (common in install instructions for CLIs) installed
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index c7b3de62eef..eded2d1bdec 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,16 +1,23 @@
 // See https://aka.ms/vscode-remote/devcontainer.json for format details.
 {
-	"name": ".NET Core 6.0, including pwsh (Ubuntu 18.04)",
-	"dockerFile": "Dockerfile",
+  "name": ".NET Core 6.0, including pwsh (Ubuntu 18.04)",
+  "dockerFile": "Dockerfile",
 
-	// Uncomment the next line to run commands after the container is created.
-	"postCreateCommand": "cd src/powershell-unix && dotnet restore",
+  "workspaceMount": "source=${localWorkspaceFolder},target=/PowerShell,type=bind",
+  "workspaceFolder": "/PowerShell",
 
-	"extensions": [
-		"ms-azure-devops.azure-pipelines",
-		"ms-dotnettools.csharp",
-		"ms-vscode.powershell",
-		"DavidAnson.vscode-markdownlint",
-		"vitaliymaz.vscode-svg-previewer"
-	]
+  // Uncomment the next line to run commands after the container is created.
+  "postCreateCommand": "cd src/powershell-unix && dotnet restore",
+
+  "customizations": {
+    "vscode": {
+      "extensions": [
+        "ms-azure-devops.azure-pipelines",
+        "ms-dotnettools.csharp",
+        "ms-vscode.powershell",
+        "DavidAnson.vscode-markdownlint",
+        "vitaliymaz.vscode-svg-previewer"
+      ]
+    }
+  }
 }
diff --git a/.devcontainer/fedora30/Dockerfile b/.devcontainer/fedora30/Dockerfile
deleted file mode 100644
index ae8d15ebd54..00000000000
--- a/.devcontainer/fedora30/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-#-------------------------------------------------------------------------------------------------------------
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
-#-------------------------------------------------------------------------------------------------------------
-
-FROM mcr.microsoft.com/powershell:preview-fedora-30
-
-# Configure apt and install packages
-RUN dnf install -y git procps wget findutils \
-    && dnf clean all
diff --git a/.devcontainer/fedora30/devcontainer.json b/.devcontainer/fedora30/devcontainer.json
deleted file mode 100644
index d9ef8ef5312..00000000000
--- a/.devcontainer/fedora30/devcontainer.json
+++ /dev/null
@@ -1,16 +0,0 @@
-// See https://aka.ms/vscode-remote/devcontainer.json for format details.
-{
-	"name": "Fedora 30",
-	"dockerFile": "Dockerfile",
-
-	// Uncomment the next line to run commands after the container is created.
-	"postCreateCommand": "pwsh -c 'import-module ./build.psm1;start-psbootstrap'",
-
-	"extensions": [
-		"ms-azure-devops.azure-pipelines",
-		"ms-dotnettools.csharp",
-		"ms-vscode.powershell",
-		"DavidAnson.vscode-markdownlint",
-		"vitaliymaz.vscode-svg-previewer"
-	]
-}
diff --git a/.editorconfig b/.editorconfig
index 74496fb9a7c..57d2f6c6c3e 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,6 +1,6 @@
 # EditorConfig is awesome: https://EditorConfig.org
 # .NET coding convention settings for EditorConfig
-# https://docs.microsoft.com/visualstudio/ide/editorconfig-code-style-settings-reference
+# https://learn.microsoft.com/visualstudio/ide/editorconfig-code-style-settings-reference
 #
 # This file comes from dotnet repositories:
 # https://github.com/dotnet/runtime/blob/master/.editorconfig
@@ -21,6 +21,7 @@ indent_size = 4
 
 # Shell scripts
 [*.sh]
+end_of_line = lf
 indent_size = 4
 
 # Xml project files
@@ -43,6 +44,9 @@ indent_size = 2
 [*.{props,targets,config,nuspec}]
 indent_size = 2
 
+[*.tsv]
+indent_style = tab
+
 # Dotnet code style settings:
 [*.cs]
 # Sort using and Import directives with System.* appearing first
@@ -99,6 +103,8 @@ dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case
 # Suggest more modern language features when available
 dotnet_style_object_initializer = true:suggestion
 dotnet_style_collection_initializer = true:suggestion
+# Background Info: https://github.com/dotnet/runtime/pull/100250
+dotnet_style_prefer_collection_expression = when_types_exactly_match
 dotnet_style_coalesce_expression = true:suggestion
 dotnet_style_null_propagation = true:suggestion
 dotnet_style_explicit_tuple_names = true:suggestion
@@ -113,6 +119,17 @@ csharp_prefer_simple_default_expression = true:suggestion
 
 dotnet_code_quality_unused_parameters = non_public:suggestion
 
+# Dotnet diagnostic settings:
+[*.cs]
+
+# CA1859: Use concrete types when possible for improved performance
+# https://learn.microsoft.com/en-gb/dotnet/fundamentals/code-analysis/quality-rules/ca1859
+dotnet_diagnostic.CA1859.severity = suggestion
+
+# Disable SA1600 (ElementsMustBeDocumented) for test directory only
+[test/**/*.cs]
+dotnet_diagnostic.SA1600.severity = none
+
 # CSharp code style settings:
 [*.cs]
 
diff --git a/.gitattributes b/.gitattributes
index 10790ce3949..c9033dc798a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,5 +2,6 @@ CHANGELOG.md merge=union
 * text=auto
 *.png binary
 *.rtf binary
+*.sh text eol=lf
 testablescript.ps1 text eol=lf
 TestFileCatalog.txt text eol=lf
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 26e01101693..14569b81924 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -3,75 +3,66 @@
 # Areas are not limited to the filters defined in this file
 # First, let's start with areas with no filters or paths
 
+# Default
+* @PowerShell/powershell-maintainers
+
 # Area: Performance
 # @adityapatwardhan 
 
-# Area: Portability
-# @JamesWTruher
-
 # Area: Security
-# @TravisEz13 @PaulHigin
-src/System.Management.Automation/security/wldpNativeMethods.cs @TravisEz13 @PaulHigin
-
-# Area: Documentation
-.github/    @joeyaiello @TravisEz13
+src/System.Management.Automation/security/wldpNativeMethods.cs @TravisEz13 @seeminglyscience
 
-# Area: Test
-# @JamesWTruher @TravisEz13 @adityapatwardhan
-
-# Area: Cmdlets Core
-# @JamesWTruher @SteveL-MSFT @anmenaga
+# Area: CI Build
+.github/workflows    @PowerShell/powershell-maintainers @jshigetomi
+.github/actions      @PowerShell/powershell-maintainers @jshigetomi 
 
 # Now, areas that should have paths or filters, although we might not have them defined
 # According to the docs, order here must be by precedence of the filter, with later rules overwritting
 # but the feature seems to make taking a union of all the matching rules.
 
 # Area: Cmdlets Management
-src/Microsoft.PowerShell.Commands.Management/      @daxian-dbw @adityapatwardhan
+# src/Microsoft.PowerShell.Commands.Management/      @daxian-dbw @adityapatwardhan
 
 # Area: Utility Cmdlets
-src/Microsoft.PowerShell.Commands.Utility/         @JamesWTruher @PaulHigin
+# src/Microsoft.PowerShell.Commands.Utility/         
 
 # Area: Console
-src/Microsoft.PowerShell.ConsoleHost/              @daxian-dbw @anmenaga @TylerLeonhardt
-
-# Area: Demos
-demos/                                             @joeyaiello @SteveL-MSFT @HemantMahawar
+# src/Microsoft.PowerShell.ConsoleHost/              @daxian-dbw
 
 # Area: DSC
-src/System.Management.Automation/DscSupport        @TravisEz13 @SteveL-MSFT
+# src/System.Management.Automation/DscSupport        @TravisEz13 @SteveL-MSFT
 
 # Area: Engine
 # src/System.Management.Automation/engine            @daxian-dbw
 
 # Area: Debugging
 # Must be below engine to override
-src/System.Management.Automation/engine/debugger/  @PaulHigin
+# src/System.Management.Automation/engine/debugger/  
 
 # Area: Help
-src/System.Management.Automation/help              @adityapatwardhan
+src/System.Management.Automation/help              @adityapatwardhan @daxian-dbw
 
 # Area: Intellisense
 # @daxian-dbw
 
 # Area: Language
-src/System.Management.Automation/engine/parser     @daxian-dbw
+src/System.Management.Automation/engine/parser     @daxian-dbw @seeminglyscience
 
 # Area: Providers
-src/System.Management.Automation/namespaces        @anmenaga
+# src/System.Management.Automation/namespaces        
 
 # Area: Remoting
-src/System.Management.Automation/engine/remoting    @PaulHigin
+src/System.Management.Automation/engine/remoting    @daxian-dbw @TravisEz13
 
 # Areas: Build
 # Must be last
-*.config   @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-*.props    @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-*.yml      @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-*.csproj   @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-build.*    @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-tools/     @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
-docker/    @daxian-dbw @TravisEz13 @adityapatwardhan @anmenaga @PaulHigin
+*.config   @PowerShell/powershell-maintainers @jshigetomi
+*.props    @PowerShell/powershell-maintainers @jshigetomi
+*.yml      @PowerShell/powershell-maintainers @jshigetomi
+*.csproj   @PowerShell/powershell-maintainers @jshigetomi
+build.*    @PowerShell/powershell-maintainers @jshigetomi
+tools/     @PowerShell/powershell-maintainers @jshigetomi
+# docker/    @PowerShell/powershell-maintainers @jshigetomi
 
 # Area: Compliance
 tools/terms    @TravisEz13
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index d6d78e52fb7..35eab8c9b5b 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,47 +1,24 @@
 # Contributing to PowerShell
 
-We welcome and appreciate contributions from the community.
-There are many ways to become involved with PowerShell:
-including filing issues,
-joining in design conversations,
-writing and improving documentation,
-and contributing to the code.
-Please read the rest of this document to ensure a smooth contribution process.
-
-## Intro to Git and GitHub
-
-* Make sure you have a [GitHub account](https://github.com/signup/free).
-* Learning Git:
-    * GitHub Help: [Good Resources for Learning Git and GitHub][good-git-resources]
-    * [Git Basics](../docs/git/basics.md): install and getting started
-* [GitHub Flow Guide](https://guides.github.com/introduction/flow/):
-  step-by-step instructions of GitHub Flow
-
-## Quick Start Checklist
+We welcome and appreciate contributions from the community!
 
-* Review the [Contributor License Agreement][CLA] requirement.
-* Get familiar with the [PowerShell repository](../docs/git).
+There are many ways to become involved with PowerShell including:
 
-## Contributing to Issues
+- [Contributing to Documentation](#contributing-to-documentation)
+- [Contributing to Issues](#contributing-to-issues)
+- [Contributing to Code](#contributing-to-code)
 
-* Review [Issue Management][issue-management].
-* Check if the issue you are going to file already exists in our [GitHub issues][open-issue].
-* If you can't find your issue already,
-  [open a new issue](https://github.com/PowerShell/PowerShell/issues/new/choose),
-  making sure to follow the directions as best you can.
-* If the issue is marked as [`Up-for-Grabs`][up-for-grabs],
-  the PowerShell Maintainers are looking for help with the issue.
-* Issues marked as [`First-Time-Issue`][first-time-issue],
-  are identified as being easy and a great way to learn about this project and making
-  contributions.
+Please read the rest of this document to ensure a smooth contribution process.
 
 ## Contributing to Documentation
 
-### Contributing to documentation related to PowerShell
+Contributing to the docs is an excellent way to get started with the process of making open source contributions with minimal technical skill required.
 
-Please see the [Contributor Guide in `MicrosoftDocs/PowerShell-Docs`](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/CONTRIBUTING.md).
+Please see the [Contributor Guide in `MicrosoftDocs/PowerShell-Docs`](https://aka.ms/PSDocsContributor).
 
-#### Quick steps if you're changing an existing cmdlet
+Learn how to [Contribute to Docs like a Microsoft Insider](https://www.youtube.com/watch?v=ZQODV8krq1Q) (by @sdwheeler)
+
+### Updating Documentation for an existing cmdlet
 
 If you made a change to an existing cmdlet and would like to update the documentation using PlatyPS,
 here are the quick steps:
@@ -52,70 +29,68 @@ if you don't have it -
 `Install-Module PlatyPS`.
 1. Clone the
 [`MicrosoftDocs/PowerShell-Docs`](https://github.com/MicrosoftDocs/PowerShell-Docs)
-repo if you don't already have it.
+repository if you don't already have it.
 1. Start your local build of PowerShell
 (with the change to the cmdlet you made).
-1. Find the cmdlet's markdown file in PowerShell Docs - usually under
+1. Find the cmdlet's Markdown file in PowerShell Docs - usually under
 `PowerShell-Docs/reference/<latest powershell version>/<module cmdlet is a part of>/<your changed cmdlet>.md`
 (Ex. `PowerShell-Docs/reference/7/Microsoft.PowerShell.Utility/Select-String.md`)
 1. Run
-`Update-MarkdownHelp -Path <path to cmdlet markdown file>`
+`Update-MarkdownHelp -Path <path to cmdlet Markdown file>`
 which will update the documentation for you.
 1. Make any additional changes needed for the cmdlet to be properly documented.
-1. Send a Pull Request to the PowerShell Docs repo with the changes that
+1. Send a Pull Request to the PowerShell Docs repository with the changes that
 `PlatyPS`
 made.
 1. Link your Docs PR to your original change PR.
 
-### Contributing to documentation related to maintaining or contributing to the PowerShell project
+### Style notes for documentation related to maintaining or contributing to the PowerShell project
 
 * When writing Markdown documentation, use [semantic linefeeds][].
   In most cases, it means "one clause/idea per line".
-* Otherwise, these issues should be treated like any other issue in this repo.
+* Otherwise, these issues should be treated like any other issue in this repository.
 
-#### Spellchecking documentation
+### Spell checking documentation
 
 Documentation is spellchecked. We use the
-[markdown-spellcheck](https://github.com/lukeapage/node-markdown-spellcheck) command line tool,
-which can be run in interactive mode to correct typos or add words to the ignore list
-(`.spelling` at the repository root).
+[textlint](https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule) command-line tool,
+which can be run in interactive mode to correct typos.
 
-To run the spellchecker, follow these steps:
+To run the spell checker, follow these steps:
 
 * install [Node.js](https://nodejs.org/en/) (v10 or up)
-* install [markdown-spellcheck](https://github.com/lukeapage/node-markdown-spellcheck) by
-  `npm install -g markdown-spellcheck` (v0.11.0 or up)
-* run `mdspell "**/*.md" --ignore-numbers --ignore-acronyms --en-us`
-* if the `.spelling` file is updated, commit and push it
+* install [textlint](https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule) by
+  `npm install -g textlint textlint-rule-terminology`
+* run `textlint --rule terminology <changedFileName>`,
+  adding `--fix` will accept all the recommendations.
+
+If you need to add a term or disable checking part of a file see the [configuration sections of the rule](https://github.com/sapegin/textlint-rule-terminology).
 
-#### Checking links in documentation
+### Checking links in documentation
 
 Documentation is link-checked. We make use of the
-markdown-link-check command line tool,
+`markdown-link-check` command-line tool,
 which can be run to see if any links are dead.
 
 To run the link-checker, follow these steps:
 
 * install [Node.js](https://nodejs.org/en/) (v10 or up)
-* install markdown-link-check by
+* install `markdown-link-check` by
   `npm install -g markdown-link-check@3.8.5`
 * run `find . \*.md -exec markdown-link-check {} \;`
 
-## Contributing to Code
-
-### Code Editor
-
-You should use the multi-platform [Visual Studio Code (VS Code)][use-vscode-editor].
-
-### Building and testing
-
-#### Building PowerShell
-
-Please see [Building PowerShell](../README.md#building-the-repository).
-
-#### Testing PowerShell
+## Contributing to Issues
 
-Please see PowerShell [Testing Guidelines - Running Tests Outside of CI][running-tests-outside-of-ci] on how to test your build locally.
+1. Review [Issue Management][issue-management].
+1. Check if the issue you are going to file already exists in our [GitHub issues][open-issue].
+1. If you can't find your issue already,
+  [open a new issue](https://github.com/PowerShell/PowerShell/issues/new/choose),
+  making sure to follow the directions as best you can.
+1. If the issue is marked as [`Up-for-Grabs`][up-for-grabs],
+  the PowerShell Maintainers are looking for help with the issue.
+1. Issues marked as [`First-Time-Issue`][first-time-issue],
+  are identified as being easy and a great way to learn about this project and making
+  contributions.
 
 ### Finding or creating an issue
 
@@ -136,6 +111,59 @@ Additional references:
 * GitHub's guide on [Contributing to Open Source](https://guides.github.com/activities/contributing-to-open-source/#pull-request)
 * GitHub's guide on [Understanding the GitHub Flow](https://guides.github.com/introduction/flow/)
 
+## Contributing to Code
+
+### Quick Start Checklist
+
+* Review the [Contributor License Agreement][CLA] requirement.
+* Get familiar with the [PowerShell Repository Git Concepts](../docs/git/README.md).
+* Start a [GitHub Codespace](#Dev Container) and start exploring the repository.
+* Consider if what you want to do might be implementable as a [PowerShell Binary Module](https://learn.microsoft.com/powershell/scripting/developer/module/how-to-write-a-powershell-binary-module?view=powershell-7.5).
+  The PowerShell repository has a rigorous acceptance process due to its huge popularity and emphasis on stability and long term support, and with a binary module you can contribute to the community much more quickly.
+* Pick an existing issue to work on! For instance, clarifying a confusing or unclear error message is a great starting point.
+
+### Intro to Git and GitHub
+
+1. Sign up for a [GitHub account](https://github.com/signup/free).
+1. Learning Git and GitHub:
+    - [Git Basics](../docs/git/basics.md): install and getting started
+    - [Good Resources for Learning Git and GitHub][good-git-resources]
+1. The PowerShell repository uses GitHub Flow as the primary branching strategy. [Learn about GitHub Flow](https://guides.github.com/introduction/flow/)
+
+### Code Editing
+
+PowerShell is primarily written in [C#](https://learn.microsoft.com/dotnet/csharp/tour-of-csharp/overview). While you can use any C# development environment you prefer, [Visual Studio Code][use-vscode-editor] is recommended.
+
+### Dev Container
+
+There is a PowerShell [Dev Container](https://code.visualstudio.com/docs/devcontainers/containers) which enables you get up and running quickly with a prepared Visual Studio Code environment with all the required prerequisites already installed.
+
+[GitHub Codespaces](https://github.com/features/codespaces) is the fastest way to get started.
+Codespaces allows you to start a Github-hosted devcontainer from anywhere and contribute from your browser or via Visual Studio Code remoting.
+All GitHub users get 15 hours per month of a 4-core codespace for free.
+
+To start a codespace for the PowerShell repository:
+
+1. Go to https://github.com/PowerShell/PowerShell
+1. Click the green button on the right and choose to create a codespace
+
+   ![alt text](Images/Codespaces.png)
+1. Alternatively, just hit the comma `,` key on your keyboard which should instantly start a codespace as well.
+
+Once the codespace starts, you can press `ctrl+shift+b` (`cmd+shift+b` on Mac) to run the default build task. If you would like to interactivey test your changes, you can press `F5` to start debugging, add breakpoints, etc.
+
+[Learn more about how to get started with C# in Visual Studio Code](https://code.visualstudio.com/docs/csharp/get-started)
+
+### Building and Testing
+
+#### Building PowerShell
+
+[Building PowerShell](../README.md#Building-Powershell) has instructions for various platforms.
+
+#### Testing PowerShell
+
+Please see PowerShell [Testing Guidelines - Running Tests Outside of CI][running-tests-outside-of-ci] on how to test your build locally.
+
 ### Lifecycle of a pull request
 
 #### Before submitting
@@ -160,7 +188,7 @@ Additional references:
   In such case, it's better to split the PR to multiple smaller ones.
   For large features, try to approach it in an incremental way, so that each PR won't be too big.
 * If you're contributing in a way that changes the user or developer experience, you are expected to document those changes.
-  See [Contributing to documentation related to PowerShell](#contributing-to-documentation-related-to-powershell).
+  See [Contributing to documentation related to PowerShell](#contributing-to-documentation).
 * Add a meaningful title of the PR describing what change you want to check in.
   Don't simply put: "Fix issue #5".
   Also don't directly use the issue title as the PR title.
@@ -168,21 +196,21 @@ Additional references:
   A better example is: "Add Ensure parameter to New-Item cmdlet", with "Fix #5" in the PR's body.
 * When you create a pull request,
   include a summary about your changes in the PR description.
-  The description is used to create change logs,
+  The description is used to create changelogs,
   so try to have the first sentence explain the benefit to end users.
   If the changes are related to an existing GitHub issue,
   please reference the issue in the PR description (e.g. ```Fix #11```).
   See [this][closing-via-message] for more details.
 
 * Please use the present tense and imperative mood when describing your changes:
-    * Instead of "Adding support for Windows Server 2012 R2", write "Add support for Windows Server 2012 R2".
-    * Instead of "Fixed for server connection issue", write "Fix server connection issue".
+  * Instead of "Adding support for Windows Server 2012 R2", write "Add support for Windows Server 2012 R2".
+  * Instead of "Fixed for server connection issue", write "Fix server connection issue".
 
-  This form is akin to giving commands to the code base
+  This form is akin to giving commands to the codebase
   and is recommended by the Git SCM developers.
   It is also used in the [Git commit messages](#common-engineering-practices).
 * If the change is related to a specific resource, please prefix the description with the resource name:
-    * Instead of "New parameter 'ConnectionCredential' in New-SqlConnection",
+  * Instead of "New parameter 'ConnectionCredential' in New-SqlConnection",
   write "New-SqlConnection: add parameter 'ConnectionCredential'".
 * If your change warrants an update to user-facing documentation,
   a Maintainer will add the `Documentation Needed` label to your PR and add an issue to the [PowerShell-Docs repository][PowerShell-Docs],
@@ -190,10 +218,10 @@ Additional references:
   As an example, this requirement includes any changes to cmdlets (including cmdlet parameters) and features which have associated about_* topics.
   While not required, we appreciate any contributors who add this label and create the issue themselves.
   Even better, all contributors are free to contribute the documentation themselves.
-  (See [Contributing to documentation related to PowerShell](#contributing-to-documentation-related-to-powershell) for more info.)
+  (See [Contributing to documentation related to PowerShell](#contributing-to-documentation) for more info.)
 * If your change adds a new source file, ensure the appropriate copyright and license headers is on top.
   It is standard practice to have both a copyright and license notice for each source file.
-    * For `.h`, `.cpp`, and `.cs` files use the copyright header with empty line after it:
+  * For `.cs` files use the copyright header with empty line after it:
 
     ```c#
         // Copyright (c) Microsoft Corporation.
@@ -201,7 +229,7 @@ Additional references:
         <Add empty line here>
     ```
 
-    * For `.ps1` and `.psm1` files use the copyright header with empty line after it:
+  * For `.ps1` and `.psm1` files use the copyright header with empty line after it:
 
     ```powershell
         # Copyright (c) Microsoft Corporation.
@@ -233,21 +261,13 @@ Additional references:
 * After submitting your pull request,
   our [CI system (Azure DevOps Pipelines)][ci-system]
   will run a suite of tests and automatically update the status of the pull request.
-* Our CI contains automated spellchecking and link checking for markdown files. If there is any false-positive,
-  [run the spellchecker command line tool in interactive mode](#spellchecking-documentation)
+* Our CI contains automated spell checking and link checking for Markdown files. If there is any false-positive,
+  [run the spell checker command-line tool in interactive mode](#spell-checking-documentation)
   to add words to the `.spelling` file.
-* Our packaging test may not pass and ask you to update `files.wxs` file if you add/remove/update nuget package references or add/remove assert files.
-
-  You could update the file manually in accordance with messages in the test log file. Or you can use automatically generated file. To get the file you should build the msi package locally:
 
-  ```powershell
-  Import-Module .\build.psm1
-  Start-PSBuild -Clean -CrossGen -PSModuleRestore -Runtime win7-x64 -Configuration Release -ReleaseTag <release tag>
-  Import-Module .\tools\packaging
-  Start-PSPackage -Type msi -ReleaseTag <release tag> -WindowsRuntime 'win7-x64' -SkipReleaseChecks
-  ```
-
-  Last command will report where new file is located.
+  You could update the `.spelling` file manually in accordance with messages in the test log file, or
+  [run the spell checker command-line tool in interactive mode](#spell-checking-documentation)
+  to add the false-positive words directly.
 
 #### Pull Request - Workflow
 
@@ -265,7 +285,7 @@ Additional references:
 
 #### Pull Request - Roles and Responsibilities
 
-1. The PR *author* is responsible for moving the PR forward to get it Approved.
+1. The PR *author* is responsible for moving the PR forward to get it approved.
    This includes addressing feedback within a timely period and indicating feedback has been addressed by adding a comment and mentioning the specific *reviewers*.
    When updating your pull request, please **create new commits** and **don't rewrite the commits history**.
    This way it's very easy for the reviewers to see diff between iterations.
@@ -278,7 +298,7 @@ Additional references:
    - `Approve` if you believe your feedback has been addressed or the code is fine as-is, it is customary (although not required) to leave a simple "Looks good to me" (or "LGTM") as the comment for approval.
    - `Comment` if you are making suggestions that the *author* does not have to accept.
    Early in the review, it is acceptable to provide feedback on coding formatting based on the published [Coding Guidelines][coding-guidelines], however,
-   after the PR has been approved, it is generally _not_ recommended to focus on formatting issues unless they go against the [Coding Guidelines][coding-guidelines].
+   after the PR has been approved, it is generally *not* recommended to focus on formatting issues unless they go against the [Coding Guidelines][coding-guidelines].
    Non-critical late feedback (after PR has been approved) can be submitted as a new issue or new pull request from the *reviewer*.
 1. *Assignees* who are always *Maintainers* ensure that proper review has occurred and if they believe one approval is not sufficient, the *maintainer* is responsible to add more reviewers.
    An *assignee* may also be a reviewer, but the roles are distinct.
@@ -297,9 +317,9 @@ In these cases:
    - If the *reviewer*'s comments are very minor, merge the change, fix the code immediately, and create a new PR with the fixes addressing the minor comments.
    - If the changes required to merge the pull request are significant but needed, *assignee* creates a new branch with the changes and open an issue to merge the code into the dev branch.
    Mention the original pull request ID in the description of the new issue and close the abandoned pull request.
-   - If the changes in an abandoned pull request are no longer needed (e.g. due to refactoring of the code base or a design change), *assignee* will simply close the pull request.
+   - If the changes in an abandoned pull request are no longer needed (e.g. due to refactoring of the codebase or a design change), *assignee* will simply close the pull request.
 
-## Making Breaking Changes
+### Making Breaking Changes
 
 When you make code changes,
 please pay attention to these that can affect the [Public Contract][breaking-changes-contract].
@@ -308,12 +328,12 @@ Before making changes to the code,
 first review the [breaking changes contract][breaking-changes-contract]
 and follow the guidelines to keep PowerShell backward compatible.
 
-## Making Design Changes
+### Making Design Changes
 
 To add new features such as cmdlets or making design changes,
 please follow the [PowerShell Request for Comments (RFC)][rfc-process] process.
 
-## Common Engineering Practices
+### Common Engineering Practices
 
 Other than the guidelines for [coding][coding-guidelines],
 the [RFC process][rfc-process] for design,
@@ -365,7 +385,7 @@ is also appropriate, as is using Markdown syntax.
   Before you invest a large amount of time,
   file an issue and start a discussion with the community.
 
-## Contributor License Agreement (CLA)
+### Contributor License Agreement (CLA)
 
 To speed up the acceptance of any contribution to any PowerShell repositories,
 you should sign the Microsoft [Contributor License Agreement (CLA)](https://cla.microsoft.com/) ahead of time.
@@ -379,11 +399,17 @@ When your pull request is created, it is checked by the CLA bot.
 If you have signed the CLA, the status check will be set to `passing`.  Otherwise, it will stay at `pending`.
 Once you sign a CLA, all your existing and future pull requests will have the status check automatically set at `passing`.
 
-[testing-guidelines]: ../docs/testing-guidelines/testing-guidelines.md
+## Code of Conduct Enforcement
+
+Reports of abuse will be reviewed by the [PowerShell Committee][ps-committee] and if it has been determined that violations of the
+[Code of Conduct](../CODE_OF_CONDUCT.md) has occurred, then a temporary ban may be imposed.
+The duration of the temporary ban will depend on the impact and/or severity of the infraction.
+This can vary from 1 day, a few days, a week, and up to 30 days.
+Repeat offenses may result in a permanent ban from the PowerShell org.
+
 [running-tests-outside-of-ci]: ../docs/testing-guidelines/testing-guidelines.md#running-tests-outside-of-ci
 [issue-management]: ../docs/maintainers/issue-management.md
 [vuln-reporting]: ./SECURITY.md
-[governance]: ../docs/community/governance.md
 [using-prs]: https://help.github.com/articles/using-pull-requests/
 [fork-a-repo]: https://help.github.com/articles/fork-a-repo/
 [closing-via-message]: https://help.github.com/articles/closing-issues-via-commit-messages/
@@ -395,10 +421,11 @@ Once you sign a CLA, all your existing and future pull requests will have the st
 [up-for-grabs]: https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs
 [semantic linefeeds]: https://rhodesmill.org/brandon/2012/one-sentence-per-line/
 [PowerShell-Docs]: https://github.com/powershell/powershell-docs/
-[use-vscode-editor]: https://docs.microsoft.com/dotnet/core/tutorials/with-visual-studio-code
+[use-vscode-editor]: https://learn.microsoft.com/dotnet/core/tutorials/with-visual-studio-code
 [repository-maintainer]: ../docs/community/governance.md#repository-maintainers
-[area-expert]: ../docs/community/governance.md#area-experts
+[area-expert]: ../.github/CODEOWNERS
 [first-time-issue]: https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AFirst-Time-Issue
 [coding-guidelines]: ../docs/dev-process/coding-guidelines.md
 [breaking-changes-contract]: ../docs/dev-process/breaking-change-contract.md
 [rfc-process]: https://github.com/PowerShell/PowerShell-RFC
+[ps-committee]: ../docs/community/governance.md#powershell-committee
diff --git a/.github/ISSUE_TEMPLATE/Bug_Report.md b/.github/ISSUE_TEMPLATE/Bug_Report.md
deleted file mode 100644
index b8c8dabe08a..00000000000
--- a/.github/ISSUE_TEMPLATE/Bug_Report.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-name: Bug report 🐛
-about: Report errors or unexpected behavior 🤔
-title: "My bug report"
-labels: Needs-Triage
-assignees: ''
-
----
-<!--
-
-For Windows PowerShell 5.1 issues, suggestions, or feature requests please use the following link instead:
-Windows PowerShell [UserVoice](https://windowsserver.uservoice.com/forums/301869-powershell)
-
-This repository is **ONLY** for PowerShell Core 6 and PowerShell 7+ issues.
-
-- Make sure you are able to repro it on the [latest released version](https://github.com/PowerShell/PowerShell/releases)
-- Search the existing issues.
-- Refer to the [FAQ](https://github.com/PowerShell/PowerShell/blob/master/docs/FAQ.md).
-- Refer to the [known issues](https://docs.microsoft.com/powershell/scripting/whats-new/known-issues-ps6).
-
--->
-
-## Steps to reproduce
-
-```powershell
-
-```
-
-## Expected behavior
-
-```none
-
-```
-
-## Actual behavior
-
-```none
-
-```
-
-## Environment data
-
-<!-- provide the output of $PSVersionTable -->
-
-```none
-
-```
diff --git a/.github/ISSUE_TEMPLATE/Bug_Report.yaml b/.github/ISSUE_TEMPLATE/Bug_Report.yaml
new file mode 100644
index 00000000000..03fcf444e88
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Bug_Report.yaml
@@ -0,0 +1,75 @@
+name: Bug report 🐛
+description: Report errors or unexpected behavior 🤔
+labels: Needs-Triage
+body:
+- type: markdown
+  attributes:
+    value: >
+      For Windows PowerShell 5.1 issues, suggestions, or feature requests please use the
+      [Feedback Hub app](https://support.microsoft.com/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332)
+
+      This repository is **ONLY** for PowerShell Core 6 and PowerShell 7+ issues.
+- type: checkboxes
+  attributes:
+    label: Prerequisites
+    options:
+    - label: Write a descriptive title.
+      required: true
+    - label: Make sure you are able to repro it on the [latest released version](https://github.com/PowerShell/PowerShell/releases)
+      required: true
+    - label: Search the existing issues.
+      required: true
+    - label: Refer to the [FAQ](https://github.com/PowerShell/PowerShell/blob/master/docs/FAQ.md).
+      required: true
+    - label: Refer to [Differences between Windows PowerShell 5.1 and PowerShell](https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell).
+      required: true
+- type: textarea
+  attributes:
+    label: Steps to reproduce
+    description: >
+      List of steps, sample code, failing test or link to a project that reproduces the behavior.
+      Make sure you place a stack trace inside a code (```) block to avoid linking unrelated issues.
+    placeholder: >
+      I am experiencing a problem with X.
+      I think Y should be happening but Z is actually happening.
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Expected behavior
+    render: console
+    placeholder: |
+      PS> 2 + 2
+      4
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Actual behavior
+    render: console
+    placeholder: |
+      PS> 2 + 2
+      5
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Error details
+    description: Paste verbatim output from `Get-Error` if PowerShell return an error.
+    render: console
+    placeholder: PS> Get-Error
+- type: textarea
+  attributes:
+    label: Environment data
+    description: Paste verbatim output from `$PSVersionTable` below.
+    render: powershell
+    placeholder: PS> $PSVersionTable
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Visuals
+    description: >
+      Please upload images or animations that can be used to reproduce issues in the area below.
+      Try the [Steps Recorder](https://support.microsoft.com/en-us/windows/record-steps-to-reproduce-a-problem-46582a9b-620f-2e36-00c9-04e25d784e47)
+      on Windows or [Screenshot](https://support.apple.com/en-us/HT208721) on macOS.
diff --git a/.github/ISSUE_TEMPLATE/Distribution_Request.md b/.github/ISSUE_TEMPLATE/Distribution_Request.md
deleted file mode 100644
index b104df6a1be..00000000000
--- a/.github/ISSUE_TEMPLATE/Distribution_Request.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-name: Distribution Support Request
-about: Requests support for a new distribution
-title: "Distribution Support Request"
-labels: Distribution-Request, Needs-Triage
-assignees: ''
-
----
-
-## Details of the Distribution
-
-- Name of the Distribution:
-- Version of the Distribution:
-- Package Types
-    - [ ] Deb
-    - [ ] RPM
-    - [ ] Tar.gz
-    - Snap - Please file issue in https://github.com/powershell/powershell-snap.  This issues type is unrelated to snap packages with a distribution neutral.
-- Processor Architecture (One per request):
-- The following is a requirement for supporting a distribution **without exception.**
-    - [ ] The version and architecture of the Distribution is [supported by .NET Core](https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0-supported-os.md#linux).
-- The following are requirements for supporting a distribution.
-  Please write a justification for any exception where these criteria are not met and
-  the PowerShell committee will review the request.
-    - [ ] The version of the Distribution is supported for at least one year.
-    - [ ] The version of the Distribution is not an [interim release](https://ubuntu.com/about/release-cycle) or equivalent.
-
-## Progress
-
-- [ ] An issues has been filed to create a Docker image in https://github.com/powershell/powershell-docker
-
-### For PowerShell Team **ONLY**
-
-- [ ] Docker image created
-- [ ] Docker image published
-- [ ] Distribution tested
-- [ ] Update `packages.microsoft.com` deployment
-- [ ] [Lifecycle](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/reference/docs-conceptual/PowerShell-Support-Lifecycle.md) updated
-- [ ] Documentation Updated
diff --git a/.github/ISSUE_TEMPLATE/Feature_Request.md b/.github/ISSUE_TEMPLATE/Feature_Request.md
deleted file mode 100644
index 4ae10eb6e40..00000000000
--- a/.github/ISSUE_TEMPLATE/Feature_Request.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-name: Feature Request/Idea 🚀
-about: Suggest a new feature or improvement (this does not mean you have to implement it)
-title: "Feature Request"
-labels: Issue-Enhancement, Needs-Triage
-assignees: ''
-
----
-
-## Summary of the new feature/enhancement
-
-<!-- 
-A clear and concise description of what the problem is that the new feature would solve.
-Try formulating it in user story style (if applicable):
-'As a user I want X so that Y.' with X being the being the action and Y being the value of the action.
--->
-
-## Proposed technical implementation details (optional)
-
-<!-- 
-A clear and concise description of what you want to happen.
-Consider providing an example PowerShell experience with expected result.
--->
diff --git a/.github/ISSUE_TEMPLATE/Feature_Request.yaml b/.github/ISSUE_TEMPLATE/Feature_Request.yaml
new file mode 100644
index 00000000000..c8e4cec3c4d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Feature_Request.yaml
@@ -0,0 +1,20 @@
+name: Feature Request / Idea 🚀
+description: Suggest a new feature or improvement (this does not mean you have to implement it)
+labels: [Issue-Enhancement, Needs-Triage]
+body:
+- type: textarea
+  attributes:
+    label: Summary of the new feature / enhancement
+    description: >
+      A clear and concise description of what the problem is that the
+      new feature would solve. Try formulating it in user story style
+      (if applicable).
+    placeholder: "'As a user I want X so that Y...' with X being the being the action and Y being the value of the action."
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Proposed technical implementation details (optional)
+    placeholder: >
+      A clear and concise description of what you want to happen.
+      Consider providing an example PowerShell experience with expected result.
diff --git a/.github/ISSUE_TEMPLATE/Microsoft_Update_Issue.yaml b/.github/ISSUE_TEMPLATE/Microsoft_Update_Issue.yaml
new file mode 100644
index 00000000000..ce3de7ae848
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Microsoft_Update_Issue.yaml
@@ -0,0 +1,87 @@
+name: Microsoft Update issue report 🐛
+description: Report issue installing a PowerShell 7 Update or fresh install through Microsoft Update 🤔
+labels: Needs-Triage
+assignees:
+  - TravisEz13
+body:
+- type: markdown
+  attributes:
+    value: >
+      For Windows PowerShell 5.1 issues, suggestions, or feature requests please use the
+      [Feedback Hub app](https://support.microsoft.com/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332)
+
+      This repository is **ONLY** for PowerShell Core 6 and PowerShell 7+ issues.
+- type: checkboxes
+  attributes:
+    label: Prerequisites
+    options:
+    - label: Write a descriptive title.
+      required: true
+    - label: Make sure you are able to repro it on the [latest released version](https://github.com/PowerShell/PowerShell/releases)
+      required: true
+    - label: Search the existing issues.
+      required: true
+    - label: Refer to the [FAQ](https://github.com/PowerShell/PowerShell/blob/master/docs/FAQ.md).
+      required: true
+    - label: Refer to [Differences between Windows PowerShell 5.1 and PowerShell](https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell).
+      required: true
+- type: textarea
+  attributes:
+    label: Steps to reproduce
+    description: >
+      List of steps, sample code, failing test or link to a project that reproduces the behavior.
+      Make sure you place a stack trace inside a code (```) block to avoid linking unrelated issues.
+    placeholder: >
+      I am experiencing a problem with X.
+      I think Y should be happening but Z is actually happening.
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Expected behavior
+    render: console
+    placeholder: |
+      PS> 2 + 2
+      4
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Actual behavior
+    render: console
+    placeholder: |
+      PS> 2 + 2
+      5
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Environment data
+    description: Paste verbatim output from `$PSVersionTable` below.
+    render: powershell
+    placeholder: PS> $PSVersionTable
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: OS Data
+    description: Paste verbatim output from `(Get-CimInstance Win32_OperatingSystem) | Select-Object -Property Version, Caption` below.
+    render: powershell
+    placeholder: PS> (Get-CimInstance Win32_OperatingSystem) | Select-Object -Property Version, Caption
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Windows update log
+    description: Please run `Get-WindowsUpdateLog` and upload the resulting file to this issue.
+    render: markdown
+    placeholder: PS> Get-WindowsUpdateLog
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Visuals
+    description: >
+      Please upload images or animations that can be used to reproduce issues in the area below.
+      Try the [Steps Recorder](https://support.microsoft.com/en-us/windows/record-steps-to-reproduce-a-problem-46582a9b-620f-2e36-00c9-04e25d784e47)
+      on Windows or [Screenshot](https://support.apple.com/en-us/HT208721) on macOS.
diff --git a/.github/ISSUE_TEMPLATE/Release_Process.md b/.github/ISSUE_TEMPLATE/Release_Process.md
deleted file mode 100644
index 0f93a4bbb70..00000000000
--- a/.github/ISSUE_TEMPLATE/Release_Process.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-name: Release Process
-about: Maintainers Only - Release Process
-title: "Release Process for v6.x.x"
-labels: Issue-Meta, Needs-Triage
-assignees: ''
-
----
-
-<!--
-This template is for maintainers to create an issues to track the release process.
-Please **only** use this template if you are a maintainer.
--->
-
-## Checklist
-
-- [ ] Verify that `PowerShell-Native` has been updated/released as needed.
-- [ ] Check for `PowerShellGet` and `PackageManagement` release plans.
-- [ ] Start process to sync Azure DevOps artifacts feed such as modules and NuGet packages.
-- [ ] Create a private branch named `release/v6.x.x` in Azure DevOps repository.
-   All release related changes should happen in this branch.
-- [ ] Prepare packages
-    - [ ] Kick off coordinated build.
-- [ ] Kick off Release pipeline.
-    - *These tasks are orchestrated by the release pipeline, but here as status to the community.*
-    - [ ] Prepare packages
-        - [ ] Sign the RPM package.
-        - [ ] Install and verify the packages.
-        - [ ] Trigger the docker staging builds (signing must be done).
-    - [ ] Create the release tag and push the tag to `PowerShell/PowerShell` repository.
-    - [ ] Run tests on all supported Linux distributions and publish results.
-    - [ ] Update documentation, and scripts.
-        - [ ] Update [CHANGELOG.md](../../CHANGELOG.md) with the finalized change log draft.
-        - [ ] Stage a PR to master to update other documents and
-              scripts to use the new package names, links, and `metadata.json`.
-    - [ ] For preview releases,
-      merge the release branch to GitHub `master` with a merge commit.
-    - [ ] For non-preview releases,
-      make sure all changes are either already in master or have a PR open.
-    - [ ] Delete the release branch.
-    - [ ] Trigger the Docker image release.
-    - [ ] Retain builds.
-    - [ ] Update https://github.com/dotnet/dotnet-docker/tree/master/3.0/sdk with new version and SHA hashes for global tool.
diff --git a/.github/ISSUE_TEMPLATE/Release_Process.yaml b/.github/ISSUE_TEMPLATE/Release_Process.yaml
new file mode 100644
index 00000000000..7e8d6282db1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Release_Process.yaml
@@ -0,0 +1,41 @@
+name: Release Process
+description: Maintainers Only - Release Process
+title: "Release Process for v7.x.x"
+labels: [Issue-Meta, Needs-Triage]
+body:
+- type: markdown
+  attributes:
+    value: >
+      This template is for maintainers to create an issues to track the release process.
+      Please **only** use this template if you are a maintainer.
+- type: textarea
+  attributes:
+    label: Checklist
+    value: |
+      - [ ] Verify that [`PowerShell-Native`](https://github.com/PowerShell/PowerShell-Native) has been updated / released as needed.
+      - [ ] Check for `PowerShellGet` and `PackageManagement` release plans.
+      - [ ] Start process to sync Azure DevOps artifacts feed such as modules and NuGet packages.
+      - [ ] Create a private branch named `release/v6.x.x` in Azure DevOps repository.
+        All release related changes should happen in this branch.
+      - [ ] Prepare packages
+          - [ ] Kick off coordinated build.
+      - [ ] Kick off Release pipeline.
+          - *These tasks are orchestrated by the release pipeline, but here as status to the community.*
+          - [ ] Prepare packages
+              - [ ] Sign the RPM package.
+              - [ ] Install and verify the packages.
+              - [ ] Trigger the docker staging builds (signing must be done).
+          - [ ] Create the release tag and push the tag to `PowerShell/PowerShell` repository.
+          - [ ] Run tests on all supported Linux distributions and publish results.
+          - [ ] Update documentation, and scripts.
+              - [ ] Update [CHANGELOG.md](../../CHANGELOG.md) with the finalized change log draft.
+              - [ ] Stage a PR to master to update other documents and
+                    scripts to use the new package names, links, and `metadata.json`.
+          - [ ] For preview releases,
+            merge the release branch to GitHub `master` with a merge commit.
+          - [ ] For non-preview releases,
+            make sure all changes are either already in master or have a PR open.
+          - [ ] Delete the release branch.
+          - [ ] Trigger the Docker image release.
+          - [ ] Retain builds.
+          - [ ] Update https://github.com/dotnet/dotnet-docker/tree/master/3.0/sdk with new version and SHA hashes for global tool. NOTE: this link is broken!
diff --git a/.github/ISSUE_TEMPLATE/WG_member_request.yaml b/.github/ISSUE_TEMPLATE/WG_member_request.yaml
new file mode 100644
index 00000000000..1d7f0e9ba53
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/WG_member_request.yaml
@@ -0,0 +1,66 @@
+name: Working Group Member Request
+description: Request membership to serve on a PowerShell Working Group
+title: Working Group Member Request
+labels: [WG-NeedsReview, WG-Cmdlets, WG-Engine, WG-Interactive-Console, WG-Remoting, Needs-Triage]
+body:
+- type: markdown
+  attributes:
+    value: |
+      ## Thank you for your interest in joining a PowerShell Working Group. 
+
+      ### Please complete the following public form to request membership to a PowerShell Working Group. 
+      
+      > [!NOTE]
+      > Not all Working Groups are accepting new members at this time.
+- type : dropdown
+  id : request_type
+  validations:
+    required: true
+  attributes:
+    label: Name of Working Group you are requesting to join? 
+    description: >-
+      Please select the name of the working group you are requesting to join. (Select one)
+    options:
+      - "Cmdlets and Modules"
+      - "Engine"
+      - "Interactive UX"
+      - "Remoting"
+- type: dropdown  
+  id: time
+  validations:
+    required: true
+  attributes:
+    label: Can you provide at least 1 hour per week to the Working Group? Note that time commitments will vary per Working Group and decided by its members.
+    description: >-
+      Please select Yes or No.     
+    options:
+      - "Yes"
+      - "No"
+- type: markdown  
+  attributes:
+    value: |
+      ## ⚠️ This form is public. Do not provide any private or proprietary information. ⚠️   
+- type: textarea
+  attributes:
+    label: Why do you want to join this working group?
+    description: Please provide a brief description of why you want to join this working group.
+    placeholder: >
+      I want to join this working group because...
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: What skills do you bring to this working group?
+    description: Please provide a brief description of what skills you bring to this working group.
+    placeholder: >
+      I bring the following skills to this working group...
+  validations:
+    required: true
+- type: textarea
+  attributes:
+    label: Public links to articles, code, or other resources that demonstrate your skills.
+    description: Please provide public links to articles, code, or other resources that demonstrate your skills.
+    placeholder: >
+      I have the following public links to articles, code, or other resources that demonstrate my skills...
+  validations:
+    required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 4e050986fa5..973921cb24a 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,11 +1,11 @@
 blank_issues_enabled: false
 contact_links:
   - name: Windows PowerShell
-    url: https://windowsserver.uservoice.com/forums/301869-powershell
+    url: https://support.microsoft.com/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332
     about: Windows PowerShell issues or suggestions.
   - name: Support
     url: https://github.com/PowerShell/PowerShell/blob/master/.github/SUPPORT.md
     about: PowerShell Support Questions/Help
   - name: Documentation Issue
-    url: https://github.com/MicrosoftDocs/PowerShell-Docs
+    url: https://github.com/MicrosoftDocs/PowerShell-Docs/issues/new/choose
     about: Please open issues on documentation for PowerShell here.
diff --git a/.github/Images/Codespaces.png b/.github/Images/Codespaces.png
new file mode 100644
index 00000000000..f37792f5c9f
Binary files /dev/null and b/.github/Images/Codespaces.png differ
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index b64343410f7..27089847987 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -11,35 +11,21 @@
 ## PR Checklist
 
 - [ ] [PR has a meaningful title](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission)
-    - Use the present tense and imperative mood when describing your changes
+  - Use the present tense and imperative mood when describing your changes
 - [ ] [Summarized changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission)
 - [ ] [Make sure all `.h`, `.cpp`, `.cs`, `.ps1` and `.psm1` files have the correct copyright header](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission)
-- [ ] This PR is ready to merge and is not [Work in Progress](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---work-in-progress).
-    - If the PR is work in progress, please add the prefix `WIP:` or `[ WIP ]` to the beginning of the title (the `WIP` bot will keep its status check at `Pending` while the prefix is present) and remove the prefix when the PR is ready.
+- [ ] This PR is ready to merge. If this PR is a work in progress, please open this as a [Draft Pull Request and mark it as Ready to Review when it is ready to merge](https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests).
 - **[Breaking changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#making-breaking-changes)**
-    - [ ] None
-    - **OR**
-    - [ ] [Experimental feature(s) needed](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/reference/6/Microsoft.PowerShell.Core/About/about_Experimental_Features.md)
-        - [ ] Experimental feature name(s): <!-- Experimental feature name(s) here -->
+  - [ ] None
+  - **OR**
+  - [ ] [Experimental feature(s) needed](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/reference/7.5/Microsoft.PowerShell.Core/About/about_Experimental_Features.md)
+    - [ ] Experimental feature name(s): <!-- Experimental feature name(s) here -->
 - **User-facing changes**
-    - [ ] Not Applicable
-    - **OR**
-    - [ ] [Documentation needed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission)
-        - [ ] Issue filed: <!-- Number/link of that issue here -->
+  - [ ] Not Applicable
+  - **OR**
+  - [ ] [Documentation needed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission)
+    - [ ] Issue filed: <!-- Number/link of that issue here -->
 - **Testing - New and feature**
-    - [ ] N/A or can only be tested interactively
-    - **OR**
-    - [ ] [Make sure you've added a new test if existing tests do not effectively test the code changed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#before-submitting)
-- **Tooling**
-    - [ ] I have considered the user experience from a tooling perspective and don't believe tooling will be impacted.
-    - **OR**
-    - [ ] I have considered the user experience from a tooling perspective and opened an issue in the relevant tool repository. This may include:
-        - [ ] Impact on [PowerShell Editor Services](https://github.com/PowerShell/PowerShellEditorServices) which is used in the [PowerShell extension](https://github.com/PowerShell/vscode-powershell) for VSCode
-        (which runs in a different PS Host).
-            - [ ] Issue filed: <!-- Number/link of that issue here -->
-        - [ ] Impact on Completions (both in the console and in editors) - one of PowerShell's most powerful features.
-            - [ ] Issue filed: <!-- Number/link of that issue here -->
-        - [ ] Impact on [PSScriptAnalyzer](https://github.com/PowerShell/PSScriptAnalyzer) (which provides linting & formatting in the editor extensions).
-            - [ ] Issue filed: <!-- Number/link of that issue here -->
-        - [ ] Impact on [EditorSyntax](https://github.com/PowerShell/EditorSyntax) (which provides syntax highlighting with in VSCode, GitHub, and many other editors).
-            - [ ] Issue filed: <!-- Number/link of that issue here -->
+  - [ ] N/A or can only be tested interactively
+  - **OR**
+  - [ ] [Make sure you've added a new test if existing tests do not effectively test the code changed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#before-submitting)
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index 10633f0d6d1..797f7003851 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -1,12 +1,39 @@
-# Security Vulnerabilities
+<!-- BEGIN MICROSOFT SECURITY.MD V0.0.9 BLOCK -->
 
-Security issues are treated very seriously and will, by default,
-takes precedence over other considerations including usability, performance,
-etc...  Best effort will be used to mitigate side effects of a security
-change, but PowerShell must be secure by default.
+## Security
 
-## Reporting a security vulnerability
+Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) and [PowerShell](https://github.com/PowerShell).
 
-If you believe that there is a security vulnerability in PowerShell,
-it **must** be reported to [secure@microsoft.com](https://technet.microsoft.com/security/ff852094.aspx) to allow for [Coordinated Vulnerability Disclosure](https://technet.microsoft.com/security/dn467923).
-**Only** file an issue, if [secure@microsoft.com](https://www.microsoft.com/en-us/msrc/faqs-report-an-issue?rtc=1) has confirmed filing an issue is appropriate.
+If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
+
+## Reporting Security Issues
+
+**Please do not report security vulnerabilities through public GitHub issues.**
+
+Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
+
+You should receive a response within 24 hours. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 
+
+Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
+
+  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
+  * Full paths of source file(s) related to the manifestation of the issue
+  * The location of the affected source code (tag/branch/commit or direct URL)
+  * Any special configuration required to reproduce the issue
+  * Step-by-step instructions to reproduce the issue
+  * Proof-of-concept or exploit code (if possible)
+  * Impact of the issue, including how an attacker might exploit the issue
+
+This information will help us triage your report more quickly.
+
+If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
+
+## Preferred Languages
+
+We prefer all communications to be in English.
+
+## Policy
+
+Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
+
+<!-- END MICROSOFT SECURITY.MD BLOCK -->
diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md
index a34d36186ed..6acedb28d27 100644
--- a/.github/SUPPORT.md
+++ b/.github/SUPPORT.md
@@ -5,9 +5,9 @@ If you do not see your problem captured, please file a [new issue][] and follow
 Also make sure to see the [Official Support Policy][].
 If you know how to fix the issue, feel free to send a pull request our way. (The [Contribution Guides][] apply to that pull request, you may want to give it a read!)
 
-[Official Support Policy]: https://docs.microsoft.com/powershell/scripting/powershell-support-lifecycle
+[Official Support Policy]: https://learn.microsoft.com/powershell/scripting/powershell-support-lifecycle
 [FAQ]: https://github.com/PowerShell/PowerShell/tree/master/docs/FAQ.md
 [Contribution Guides]: https://github.com/PowerShell/PowerShell/tree/master/.github/CONTRIBUTING.md
-[known issues]: https://docs.microsoft.com/powershell/scripting/whats-new/known-issues-ps6
+[known issues]: https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell
 [GitHub issues]: https://github.com/PowerShell/PowerShell/issues
 [new issue]: https://github.com/PowerShell/PowerShell/issues/new/choose
diff --git a/.github/action-filters.yml b/.github/action-filters.yml
new file mode 100644
index 00000000000..9a61bc1947b
--- /dev/null
+++ b/.github/action-filters.yml
@@ -0,0 +1,23 @@
+github: &github
+  - .github/actions/**
+  - .github/workflows/**-ci.yml
+tools: &tools
+  - tools/buildCommon/**
+  - tools/ci.psm1
+props: &props
+  - '**.props'
+tests: &tests
+  - test/powershell/**
+  - test/tools/**
+  - test/xUnit/**
+mainSource: &mainSource
+  - src/**
+buildModule: &buildModule
+  - build.psm1
+source:
+  - *github
+  - *tools
+  - *props
+  - *buildModule
+  - *mainSource
+  - *tests
diff --git a/.github/actions/build/ci/action.yml b/.github/actions/build/ci/action.yml
new file mode 100644
index 00000000000..65331fb3185
--- /dev/null
+++ b/.github/actions/build/ci/action.yml
@@ -0,0 +1,40 @@
+name: CI Build
+description: 'Builds PowerShell'
+runs:
+  using: composite
+  steps:
+  - name: Capture Environment
+    if: success() || failure()
+    run: |-
+      Import-Module .\tools\ci.psm1
+      Show-Environment
+    shell: pwsh
+  - name: Set Build Name for Non-PR
+    if: github.event_name != 'PullRequest'
+    run: Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
+    shell: pwsh
+  - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
+    with:
+      global-json-file: ./global.json
+  - name: Bootstrap
+    if: success()
+    run: |-
+      Write-Verbose -Verbose "Running Bootstrap..."
+      Import-Module .\tools\ci.psm1
+      Invoke-CIInstall -SkipUser
+      Write-Verbose -Verbose "Start Sync-PSTags"
+      Sync-PSTags -AddRemoteIfMissing
+      Write-Verbose -Verbose "End Sync-PSTags"
+    shell: pwsh
+  - name: Build
+    if: success()
+    run: |-
+      Write-Verbose -Verbose "Running Build..."
+      Import-Module .\tools\ci.psm1
+      Invoke-CIBuild
+    shell: pwsh
+  - name: Upload build artifact
+    uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+    with:
+      name: build
+      path: ${{ runner.workspace }}/build
diff --git a/.github/actions/infrastructure/get-changed-files/README.md b/.github/actions/infrastructure/get-changed-files/README.md
new file mode 100644
index 00000000000..277b28c0674
--- /dev/null
+++ b/.github/actions/infrastructure/get-changed-files/README.md
@@ -0,0 +1,122 @@
+# Get Changed Files Action
+
+A reusable composite action that retrieves the list of files changed in a pull request or push event.
+
+## Features
+
+- Supports both `pull_request` and `push` events
+- Optional filtering by file pattern
+- Returns files as JSON array for easy consumption
+- Filters out deleted files (only returns added, modified, or renamed files)
+- Handles up to 100 changed files per request
+
+## Usage
+
+### Basic Usage (Pull Requests Only)
+
+```yaml
+- name: Get changed files
+  id: changed-files
+  uses: "./.github/actions/infrastructure/get-changed-files"
+
+- name: Process files
+  run: |
+    echo "Changed files: ${{ steps.changed-files.outputs.files }}"
+    echo "Count: ${{ steps.changed-files.outputs.count }}"
+```
+
+### With Filtering
+
+```yaml
+# Get only markdown files
+- name: Get changed markdown files
+  id: changed-md
+  uses: "./.github/actions/infrastructure/get-changed-files"
+  with:
+    filter: '*.md'
+
+# Get only GitHub workflow/action files
+- name: Get changed GitHub files
+  id: changed-github
+  uses: "./.github/actions/infrastructure/get-changed-files"
+  with:
+    filter: '.github/'
+```
+
+### Support Both PR and Push Events
+
+```yaml
+- name: Get changed files
+  id: changed-files
+  uses: "./.github/actions/infrastructure/get-changed-files"
+  with:
+    event-types: 'pull_request,push'
+```
+
+## Inputs
+
+| Name | Description | Required | Default |
+|------|-------------|----------|---------|
+| `filter` | Optional filter pattern (e.g., `*.md` for markdown files, `.github/` for GitHub files) | No | `''` |
+| `event-types` | Comma-separated list of event types to support (`pull_request`, `push`) | No | `pull_request` |
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| `files` | JSON array of changed file paths |
+| `count` | Number of changed files |
+
+## Filter Patterns
+
+The action supports simple filter patterns:
+
+- **Extension matching**: Use `*.ext` to match files with a specific extension
+  - Example: `*.md` matches all markdown files
+  - Example: `*.yml` matches all YAML files
+
+- **Path prefix matching**: Use a path prefix to match files in a directory
+  - Example: `.github/` matches all files in the `.github` directory
+  - Example: `tools/` matches all files in the `tools` directory
+
+## Example: Processing Changed Files
+
+```yaml
+- name: Get changed files
+  id: changed-files
+  uses: "./.github/actions/infrastructure/get-changed-files"
+
+- name: Process each file
+  shell: pwsh
+  env:
+    CHANGED_FILES: ${{ steps.changed-files.outputs.files }}
+  run: |
+    $changedFilesJson = $env:CHANGED_FILES
+    $changedFiles = $changedFilesJson | ConvertFrom-Json
+    
+    foreach ($file in $changedFiles) {
+      Write-Host "Processing: $file"
+      # Your processing logic here
+    }
+```
+
+## Limitations
+
+- Simple filter patterns only (no complex glob or regex patterns)
+
+## Pagination
+
+The action automatically handles pagination to fetch **all** changed files in a PR, regardless of how many files were changed:
+
+- Fetches files in batches of 100 per page
+- Continues fetching until all files are retrieved
+- Logs a note when pagination occurs, showing the total file count
+- **No file limit** - all changed files will be processed, even in very large PRs
+
+This ensures that critical workflows (such as merge conflict checking, link validation, etc.) don't miss files due to pagination limits.
+
+## Related Actions
+
+- **markdownlinks**: Uses this pattern to get changed markdown files
+- **merge-conflict-checker**: Uses this pattern to get changed files for conflict detection
+- **path-filters**: Similar functionality but with more complex filtering logic
diff --git a/.github/actions/infrastructure/get-changed-files/action.yml b/.github/actions/infrastructure/get-changed-files/action.yml
new file mode 100644
index 00000000000..56605fed8c9
--- /dev/null
+++ b/.github/actions/infrastructure/get-changed-files/action.yml
@@ -0,0 +1,130 @@
+name: 'Get Changed Files'
+description: 'Gets the list of files changed in a pull request or push event'
+inputs:
+  filter:
+    description: 'Optional filter pattern (e.g., "*.md" for markdown files, ".github/" for GitHub files)'
+    required: false
+    default: ''
+  event-types:
+    description: 'Comma-separated list of event types to support (pull_request, push)'
+    required: false
+    default: 'pull_request'
+outputs:
+  files:
+    description: 'JSON array of changed file paths'
+    value: ${{ steps.get-files.outputs.files }}
+  files_path:
+    description: 'Path to temp file containing the JSON array of changed file paths'
+    value: ${{ steps.get-files.outputs.files_path }}
+  count:
+    description: 'Number of changed files'
+    value: ${{ steps.get-files.outputs.count }}
+runs:
+  using: 'composite'
+  steps:
+    - name: Get changed files
+      id: get-files
+      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
+      with:
+        script: |
+          const eventTypes = '${{ inputs.event-types }}'.split(',').map(t => t.trim());
+          const filter = '${{ inputs.filter }}';
+          let changedFiles = [];
+
+          if (eventTypes.includes('pull_request') && context.eventName === 'pull_request') {
+            console.log(`Getting files changed in PR #${context.payload.pull_request.number}`);
+
+            // Fetch all files changed in the PR with pagination
+            let allFiles = [];
+            let page = 1;
+            let fetchedCount;
+
+            do {
+              const { data: files } = await github.rest.pulls.listFiles({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                pull_number: context.payload.pull_request.number,
+                per_page: 100,
+                page: page
+              });
+
+              allFiles = allFiles.concat(files);
+              fetchedCount = files.length;
+              page++;
+            } while (fetchedCount === 100);
+
+            if (allFiles.length >= 100) {
+              console.log(`Note: This PR has ${allFiles.length} changed files. All files fetched using pagination.`);
+            }
+
+            changedFiles = allFiles
+              .filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed')
+              .map(file => file.filename);
+
+          } else if (eventTypes.includes('push') && context.eventName === 'push') {
+            console.log(`Getting files changed in push to ${context.ref}`);
+
+            const { data: comparison } = await github.rest.repos.compareCommits({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              base: context.payload.before,
+              head: context.payload.after,
+            });
+
+            changedFiles = comparison.files
+              .filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed')
+              .map(file => file.filename);
+
+          } else {
+            core.setFailed(`Unsupported event type: ${context.eventName}. Supported types: ${eventTypes.join(', ')}`);
+            return;
+          }
+
+          // Apply filter if provided
+          if (filter) {
+            const filterLower = filter.toLowerCase();
+            const beforeFilter = changedFiles.length;
+            changedFiles = changedFiles.filter(file => {
+              const fileLower = file.toLowerCase();
+              // Support simple patterns like "*.md" or ".github/"
+              if (filterLower.startsWith('*.')) {
+                const ext = filterLower.substring(1);
+                return fileLower.endsWith(ext);
+              } else {
+                return fileLower.startsWith(filterLower);
+              }
+            });
+            console.log(`Filter '${filter}' applied: ${beforeFilter} → ${changedFiles.length} files`);
+          }
+
+          // Calculate simple hash for verification
+          const crypto = require('crypto');
+          const filesJson = JSON.stringify(changedFiles.sort());
+          const hash = crypto.createHash('sha256').update(filesJson).digest('hex').substring(0, 8);
+
+          // Log changed files in a collapsible group
+          core.startGroup(`Changed Files (${changedFiles.length} total, hash: ${hash})`);
+          if (changedFiles.length > 0) {
+            changedFiles.forEach(file => console.log(`  - ${file}`));
+          } else {
+            console.log('  (no files changed)');
+          }
+          core.endGroup();
+
+          console.log(`Found ${changedFiles.length} changed files`);
+
+          // Write files to a temp file to avoid exceeding ARG_MAX for large PRs
+          const fs = require('fs');
+          const path = require('path');
+          const tempDir = process.env.RUNNER_TEMP || '/tmp';
+          const tempFile = path.join(tempDir, 'changed-files.json');
+          fs.writeFileSync(tempFile, JSON.stringify(changedFiles));
+          console.log(`File list written to ${tempFile}`);
+
+          core.setOutput('files', JSON.stringify(changedFiles));
+          core.setOutput('files_path', tempFile);
+          core.setOutput('count', changedFiles.length);
+
+branding:
+  icon: 'file-text'
+  color: 'blue'
diff --git a/.github/actions/infrastructure/markdownlinks/Parse-MarkdownLink.ps1 b/.github/actions/infrastructure/markdownlinks/Parse-MarkdownLink.ps1
new file mode 100644
index 00000000000..a56d696eb6e
--- /dev/null
+++ b/.github/actions/infrastructure/markdownlinks/Parse-MarkdownLink.ps1
@@ -0,0 +1,182 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+#requires -version 7
+# Markdig is always available in PowerShell 7
+<#
+.SYNOPSIS
+    Parse CHANGELOG files using Markdig to extract links.
+
+.DESCRIPTION
+    This script uses Markdig.Markdown.Parse to parse all markdown files in the CHANGELOG directory
+    and extract different types of links (inline links, reference links, etc.).
+
+.PARAMETER ChangelogPath
+    Path to the CHANGELOG directory. Defaults to ./CHANGELOG
+
+.PARAMETER LinkType
+    Filter by link type: All, Inline, Reference, AutoLink. Defaults to All.
+
+.EXAMPLE
+    .\Parse-MarkdownLink.ps1
+
+.EXAMPLE
+    .\Parse-MarkdownLink.ps1 -LinkType Reference
+#>
+
+param(
+    [string]$ChangelogPath = "./CHANGELOG",
+    [ValidateSet("All", "Inline", "Reference", "AutoLink")]
+    [string]$LinkType = "All"
+)
+
+Write-Verbose "Using built-in Markdig functionality to parse markdown files"
+
+function Get-LinksFromMarkdownAst {
+    param(
+        [Parameter(Mandatory)]
+        [object]$Node,
+        [Parameter(Mandatory)]
+        [string]$FileName,
+        [System.Collections.ArrayList]$Links
+    )
+
+    if ($null -eq $Links) {
+        return
+    }
+
+    # Check if current node is a link
+    if ($Node -is [Markdig.Syntax.Inlines.LinkInline]) {
+        $linkInfo = [PSCustomObject]@{
+            Path = $FileName
+            Line = $Node.Line + 1  # Convert to 1-based line numbering
+            Column = $Node.Column + 1  # Convert to 1-based column numbering
+            Url = $Node.Url ?? ""
+            Text = $Node.FirstChild?.ToString() ?? ""
+            Type = "Inline"
+            IsImage = $Node.IsImage
+        }
+        [void]$Links.Add($linkInfo)
+    }
+    elseif ($Node -is [Markdig.Syntax.Inlines.AutolinkInline]) {
+        $linkInfo = [PSCustomObject]@{
+            Path = $FileName
+            Line = $Node.Line + 1
+            Column = $Node.Column + 1
+            Url = $Node.Url ?? ""
+            Text = $Node.Url ?? ""
+            Type = "AutoLink"
+            IsImage = $false
+        }
+        [void]$Links.Add($linkInfo)
+    }
+    elseif ($Node -is [Markdig.Syntax.LinkReferenceDefinitionGroup]) {
+        foreach ($refDef in $Node) {
+            $linkInfo = [PSCustomObject]@{
+                Path = $FileName
+                Line = $refDef.Line + 1
+                Column = $refDef.Column + 1
+                Url = $refDef.Url ?? ""
+                Text = $refDef.Label ?? ""
+                Type = "Reference"
+                IsImage = $false
+            }
+            [void]$Links.Add($linkInfo)
+        }
+    }
+    elseif ($Node -is [Markdig.Syntax.LinkReferenceDefinition]) {
+        $linkInfo = [PSCustomObject]@{
+            Path = $FileName
+            Line = $Node.Line + 1
+            Column = $Node.Column + 1
+            Url = $Node.Url ?? ""
+            Text = $Node.Label ?? ""
+            Type = "Reference"
+            IsImage = $false
+        }
+        [void]$Links.Add($linkInfo)
+    }
+
+    # For MarkdownDocument (root), iterate through all blocks
+    if ($Node -is [Markdig.Syntax.MarkdownDocument]) {
+        foreach ($block in $Node) {
+            Get-LinksFromMarkdownAst -Node $block -FileName $FileName -Links $Links
+        }
+    }
+    # For block containers, iterate through children
+    elseif ($Node -is [Markdig.Syntax.ContainerBlock]) {
+        foreach ($child in $Node) {
+            Get-LinksFromMarkdownAst -Node $child -FileName $FileName -Links $Links
+        }
+    }
+    # For leaf blocks with inlines, process the inline content
+    elseif ($Node -is [Markdig.Syntax.LeafBlock] -and $Node.Inline) {
+        Get-LinksFromMarkdownAst -Node $Node.Inline -FileName $FileName -Links $Links
+    }
+    # For inline containers, process all child inlines
+    elseif ($Node -is [Markdig.Syntax.Inlines.ContainerInline]) {
+        $child = $Node.FirstChild
+        while ($child) {
+            Get-LinksFromMarkdownAst -Node $child -FileName $FileName -Links $Links
+            $child = $child.NextSibling
+        }
+    }
+    # For other inline elements that might have children
+    elseif ($Node.PSObject.Properties.Name -contains "FirstChild" -and $Node.FirstChild) {
+        $child = $Node.FirstChild
+        while ($child) {
+            Get-LinksFromMarkdownAst -Node $child -FileName $FileName -Links $Links
+            $child = $child.NextSibling
+        }
+    }
+}
+
+function Parse-ChangelogFiles {
+    param(
+        [string]$Path
+    )
+
+    if (-not (Test-Path $Path)) {
+        Write-Error "CHANGELOG directory not found: $Path"
+        return
+    }
+
+    $markdownFiles = Get-ChildItem -Path $Path -Filter "*.md" -File
+
+    if ($markdownFiles.Count -eq 0) {
+        Write-Warning "No markdown files found in $Path"
+        return
+    }
+
+    $allLinks = [System.Collections.ArrayList]::new()
+
+    foreach ($file in $markdownFiles) {
+        Write-Verbose "Processing file: $($file.Name)"
+
+        try {
+            $content = Get-Content -Path $file.FullName -Raw -Encoding UTF8
+
+            # Parse the markdown content using Markdig
+            $document = [Markdig.Markdown]::Parse($content, [Markdig.MarkdownPipelineBuilder]::new())
+
+            # Extract links from the AST
+            Get-LinksFromMarkdownAst -Node $document -FileName $file.FullName -Links $allLinks
+
+        } catch {
+            Write-Warning "Error processing file $($file.Name): $($_.Exception.Message)"
+        }
+    }   
+    
+    # Filter by link type if specified
+    if ($LinkType -ne "All") {
+        $allLinks = $allLinks | Where-Object { $_.Type -eq $LinkType }
+    }
+
+    return $allLinks
+}
+
+# Main execution
+$links = Parse-ChangelogFiles -Path $ChangelogPath
+
+# Output PowerShell objects
+$links
diff --git a/.github/actions/infrastructure/markdownlinks/README.md b/.github/actions/infrastructure/markdownlinks/README.md
new file mode 100644
index 00000000000..e566ec2bcc3
--- /dev/null
+++ b/.github/actions/infrastructure/markdownlinks/README.md
@@ -0,0 +1,177 @@
+# Verify Markdown Links Action
+
+A GitHub composite action that verifies all links in markdown files using PowerShell and Markdig.
+
+## Features
+
+- ✅ Parses markdown files using Markdig (built into PowerShell 7)
+- ✅ Extracts all link types: inline links, reference links, and autolinks
+- ✅ Verifies HTTP/HTTPS links with configurable timeouts and retries
+- ✅ Validates local file references
+- ✅ Supports excluding specific URL patterns
+- ✅ Provides detailed error reporting with file locations
+- ✅ Outputs metrics for CI/CD integration
+
+## Usage
+
+### Basic Usage
+
+```yaml
+- name: Verify Markdown Links
+  uses: ./.github/actions/infrastructure/markdownlinks
+  with:
+    path: './CHANGELOG'
+```
+
+### Advanced Usage
+
+```yaml
+- name: Verify Markdown Links
+  uses: ./.github/actions/infrastructure/markdownlinks
+  with:
+    path: './docs'
+    fail-on-error: 'true'
+    timeout: 30
+    max-retries: 2
+    exclude-patterns: '*.example.com/*,*://localhost/*'
+```
+
+### With Outputs
+
+```yaml
+- name: Verify Markdown Links
+  id: verify-links
+  uses: ./.github/actions/infrastructure/markdownlinks
+  with:
+    path: './CHANGELOG'
+    fail-on-error: 'false'
+
+- name: Display Results
+  run: |
+    echo "Total links: ${{ steps.verify-links.outputs.total-links }}"
+    echo "Passed: ${{ steps.verify-links.outputs.passed-links }}"
+    echo "Failed: ${{ steps.verify-links.outputs.failed-links }}"
+    echo "Skipped: ${{ steps.verify-links.outputs.skipped-links }}"
+```
+
+## Inputs
+
+| Input | Description | Required | Default |
+|-------|-------------|----------|---------|
+| `path` | Path to the directory containing markdown files to verify | No | `./CHANGELOG` |
+| `exclude-patterns` | Comma-separated list of URL patterns to exclude from verification | No | `''` |
+| `fail-on-error` | Whether to fail the action if any links are broken | No | `true` |
+| `timeout` | Timeout in seconds for HTTP requests | No | `30` |
+| `max-retries` | Maximum number of retries for failed requests | No | `2` |
+
+## Outputs
+
+| Output | Description |
+|--------|-------------|
+| `total-links` | Total number of unique links checked |
+| `passed-links` | Number of links that passed verification |
+| `failed-links` | Number of links that failed verification |
+| `skipped-links` | Number of links that were skipped |
+
+## Excluded Link Types
+
+The action automatically skips the following link types:
+
+- **Anchor links** (`#section-name`) - Would require full markdown parsing
+- **Email links** (`mailto:user@example.com`) - Cannot be verified without sending email
+
+## GitHub Workflow Test
+
+This section provides a workflow example and instructions for testing the link verification action.
+
+### Testing the Workflow
+
+To test that the workflow properly detects broken links:
+
+1. Make change to this file (e.g., this README.md file already contains one in the [Broken Link Test](#broken-link-test) section)
+1. The workflow will run and should fail, reporting the broken link(s)
+1. Revert your change to this file
+1. Push again to verify the workflow passes
+
+### Example Workflow Configuration
+
+```yaml
+name: Verify Links
+
+on:
+  push:
+    branches: [ main ]
+    paths:
+      - '**/*.md'
+  pull_request:
+    branches: [ main ]
+    paths:
+      - '**/*.md'
+  schedule:
+    # Run weekly to catch external link rot
+    - cron: '0 0 * * 0'
+
+jobs:
+  verify-links:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Verify CHANGELOG Links
+        uses: ./.github/actions/infrastructure/markdownlinks
+        with:
+          path: './CHANGELOG'
+          fail-on-error: 'true'
+
+      - name: Verify Documentation Links
+        uses: ./.github/actions/infrastructure/markdownlinks
+        with:
+          path: './docs'
+          fail-on-error: 'false'
+          exclude-patterns: '*.internal.example.com/*'
+```
+
+## How It Works
+
+1. **Parse Markdown**: Uses `Parse-MarkdownLink.ps1` to extract all links from markdown files using Markdig
+2. **Deduplicate**: Groups links by URL to avoid checking the same link multiple times
+3. **Verify Links**:
+   - HTTP/HTTPS links: Makes HEAD/GET requests with configurable timeout and retries
+   - Local file references: Checks if the file exists relative to the markdown file
+   - Excluded patterns: Skips links matching the exclude patterns
+4. **Report Results**: Displays detailed results with file locations for failed links
+5. **Set Outputs**: Provides metrics for downstream steps
+
+## Error Output Example
+
+```
+✗ FAILED: https://example.com/broken-link - HTTP 404
+    Found in: /path/to/file.md:42:15
+    Found in: /path/to/other.md:100:20
+
+Link Verification Summary
+============================================================
+Total URLs checked: 150
+Passed: 145
+Failed: 2
+Skipped: 3
+
+Failed Links:
+  • https://example.com/broken-link
+    Error: HTTP 404
+    Occurrences: 2
+```
+
+## Requirements
+
+- PowerShell 7+ (includes Markdig)
+- Runs on: `ubuntu-latest`, `windows-latest`, `macos-latest`
+
+## Broken Link Test
+
+- [Broken Link](https://github.com/PowerShell/PowerShell/wiki/NonExistentPage404)
+
+## License
+
+Same as the PowerShell repository.
diff --git a/.github/actions/infrastructure/markdownlinks/Verify-MarkdownLinks.ps1 b/.github/actions/infrastructure/markdownlinks/Verify-MarkdownLinks.ps1
new file mode 100644
index 00000000000..f50ab1590b9
--- /dev/null
+++ b/.github/actions/infrastructure/markdownlinks/Verify-MarkdownLinks.ps1
@@ -0,0 +1,317 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+#Requires -Version 7.0
+
+<#
+.SYNOPSIS
+    Verify all links in markdown files.
+
+.DESCRIPTION
+    This script parses markdown files to extract links and verifies their accessibility.
+    It supports HTTP/HTTPS links and local file references.
+
+.PARAMETER Path
+    Path to the directory containing markdown files. Defaults to current directory.
+
+.PARAMETER File
+    Array of specific markdown files to verify. If provided, Path parameter is ignored.
+
+.PARAMETER TimeoutSec
+    Timeout in seconds for HTTP requests. Defaults to 30.
+
+.PARAMETER MaximumRetryCount
+    Maximum number of retries for failed requests. Defaults to 2.
+
+.PARAMETER RetryIntervalSec
+    Interval in seconds between retry attempts. Defaults to 2.
+
+.EXAMPLE
+    .\Verify-MarkdownLinks.ps1 -Path ./CHANGELOG
+
+.EXAMPLE
+    .\Verify-MarkdownLinks.ps1 -Path ./docs -FailOnError
+
+.EXAMPLE
+    .\Verify-MarkdownLinks.ps1 -File @('CHANGELOG/7.5.md', 'README.md')
+#>
+
+param(
+    [Parameter(ParameterSetName = 'ByPath', Mandatory)]
+    [string]$Path = "Q:\src\git\powershell\docs\git",
+    [Parameter(ParameterSetName = 'ByFile', Mandatory)]
+    [string[]]$File = @(),
+    [int]$TimeoutSec = 30,
+    [int]$MaximumRetryCount = 2,
+    [int]$RetryIntervalSec = 2
+)
+
+$ErrorActionPreference = 'Stop'
+
+# Get the script directory
+$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
+
+# Determine what to process: specific files or directory
+if ($File.Count -gt 0) {
+    Write-Host "Extracting links from $($File.Count) specified markdown file(s)" -ForegroundColor Cyan
+
+    # Process each file individually
+    $allLinks = @()
+    $parseScriptPath = Join-Path $scriptDir "Parse-MarkdownLink.ps1"
+
+    foreach ($filePath in $File) {
+        if (Test-Path $filePath) {
+            Write-Verbose "Processing: $filePath"
+            $fileLinks = & $parseScriptPath -ChangelogPath $filePath
+            $allLinks += $fileLinks
+        }
+        else {
+            Write-Warning "File not found: $filePath"
+        }
+    }
+}
+else {
+    Write-Host "Extracting links from markdown files in: $Path" -ForegroundColor Cyan
+
+    # Get all links from markdown files using the Parse-ChangelogLinks script
+    $parseScriptPath = Join-Path $scriptDir "Parse-MarkdownLink.ps1"
+    $allLinks = & $parseScriptPath -ChangelogPath $Path
+}
+
+if ($allLinks.Count -eq 0) {
+    Write-Host "No links found in markdown files." -ForegroundColor Yellow
+    exit 0
+}
+
+Write-Host "Found $($allLinks.Count) links to verify" -ForegroundColor Green
+
+# Group links by URL to avoid duplicate checks
+$uniqueLinks = $allLinks | Group-Object -Property Url
+
+Write-Host "Unique URLs to verify: $($uniqueLinks.Count)" -ForegroundColor Cyan
+
+$results = @{
+    Total = $uniqueLinks.Count
+    Passed = 0
+    Failed = 0
+    Skipped = 0
+    Errors = [System.Collections.ArrayList]::new()
+}
+
+function Test-HttpLink {
+    param(
+        [string]$Url
+    )
+
+    try {
+        # Try HEAD request first (faster, doesn't download content)
+        $response = Invoke-WebRequest -Uri $Url `
+            -Method Head `
+            -TimeoutSec $TimeoutSec `
+            -MaximumRetryCount $MaximumRetryCount `
+            -RetryIntervalSec $RetryIntervalSec `
+            -UserAgent "Mozilla/5.0 (compatible; GitHubActions/1.0; +https://github.com/PowerShell/PowerShell)" `
+            -SkipHttpErrorCheck
+
+        # If HEAD fails with 404 or 405, retry with GET (some servers don't support HEAD)
+        if ($response.StatusCode -eq 404 -or $response.StatusCode -eq 405) {
+            Write-Verbose "HEAD request failed with $($response.StatusCode), retrying with GET for: $Url"
+            $response = Invoke-WebRequest -Uri $Url `
+                -Method Get `
+                -TimeoutSec $TimeoutSec `
+                -MaximumRetryCount $MaximumRetryCount `
+                -RetryIntervalSec $RetryIntervalSec `
+                -UserAgent "Mozilla/5.0 (compatible; GitHubActions/1.0; +https://github.com)" `
+                -SkipHttpErrorCheck
+        }
+
+        if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 400) {
+            return @{ Success = $true; StatusCode = $response.StatusCode }
+        }
+        else {
+            return @{ Success = $false; StatusCode = $response.StatusCode; Error = "HTTP $($response.StatusCode)" }
+        }
+    }
+    catch {
+        return @{ Success = $false; StatusCode = 0; Error = $_.Exception.Message }
+    }
+}
+
+function Test-LocalLink {
+    param(
+        [string]$Url,
+        [string]$BasePath
+    )
+
+    # Strip query parameters (e.g., ?sanitize=true) and anchors (e.g., #section)
+    $cleanUrl = $Url -replace '\?.*$', '' -replace '#.*$', ''
+
+    # Handle relative paths
+    $targetPath = Join-Path $BasePath $cleanUrl
+
+    if (Test-Path $targetPath) {
+        return @{ Success = $true }
+    }
+    else {
+        return @{ Success = $false; Error = "File not found: $targetPath" }
+    }
+}
+
+# Verify each unique link
+$progressCount = 0
+foreach ($linkGroup in $uniqueLinks) {
+    $progressCount++
+    $url = $linkGroup.Name
+    $occurrences = $linkGroup.Group
+    Write-Verbose -Verbose "[$progressCount/$($uniqueLinks.Count)] Checking: $url"
+
+    # Determine link type and verify
+        $verifyResult = $null
+        if ($url -match '^https?://') {
+            $verifyResult = Test-HttpLink -Url $url
+        }
+        elseif ($url -match '^#') {
+            Write-Verbose -Verbose "Skipping anchor link: $url"
+            $results.Skipped++
+            continue
+        }
+        elseif ($url -match '^mailto:') {
+            Write-Verbose -Verbose "Skipping mailto link: $url"
+            $results.Skipped++
+            continue
+        }
+        else {
+            $basePath = Split-Path -Parent $occurrences[0].Path
+            $verifyResult = Test-LocalLink -Url $url -BasePath $basePath
+        }
+        if ($verifyResult.Success) {
+            Write-Host "✓ OK: $url" -ForegroundColor Green
+            $results.Passed++
+        }
+        else {
+            $errorMsg = if ($verifyResult.StatusCode) {
+                "HTTP $($verifyResult.StatusCode)"
+            }
+            else {
+                $verifyResult.Error
+            }
+
+            # Determine if this status code should be ignored or treated as failure
+            # Ignore: 401 (Unauthorized), 403 (Forbidden), 429 (Too Many Requests - already retried)
+            # Fail: 404 (Not Found), 410 (Gone), 406 (Not Acceptable) - these indicate broken links
+            $shouldIgnore = $false
+            $ignoreReason = ""
+
+            switch ($verifyResult.StatusCode) {
+                401 {
+                    $shouldIgnore = $true
+                    $ignoreReason = "authentication required"
+                }
+                403 {
+                    $shouldIgnore = $true
+                    $ignoreReason = "access forbidden"
+                }
+                429 {
+                    $shouldIgnore = $true
+                    $ignoreReason = "rate limited (already retried)"
+                }
+            }
+
+            if ($shouldIgnore) {
+                Write-Host "⊘ IGNORED: $url - $errorMsg ($ignoreReason)" -ForegroundColor Yellow
+                Write-Verbose -Verbose "Ignored error details for $url - Status: $($verifyResult.StatusCode) - $ignoreReason"
+                foreach ($occurrence in $occurrences) {
+                    Write-Verbose -Verbose "    Found in: $($occurrence.Path):$($occurrence.Line):$($occurrence.Column)"
+                }
+                $results.Skipped++
+            }
+            else {
+                Write-Host "✗ FAILED: $url - $errorMsg" -ForegroundColor Red
+                foreach ($occurrence in $occurrences) {
+                    Write-Host "    Found in: $($occurrence.Path):$($occurrence.Line):$($occurrence.Column)" -ForegroundColor DarkGray
+                }
+                $results.Failed++
+                [void]$results.Errors.Add(@{
+                    Url = $url
+                    Error = $errorMsg
+                    Occurrences = $occurrences
+                })
+            }
+        }
+    }
+
+# Print summary
+Write-Host "`n" + ("=" * 60) -ForegroundColor Cyan
+Write-Host "Link Verification Summary" -ForegroundColor Cyan
+Write-Host ("=" * 60) -ForegroundColor Cyan
+Write-Host "Total URLs checked: $($results.Total)" -ForegroundColor White
+Write-Host "Passed: $($results.Passed)" -ForegroundColor Green
+Write-Host "Failed: $($results.Failed)" -ForegroundColor $(if ($results.Failed -gt 0) { "Red" } else { "Green" })
+Write-Host "Skipped: $($results.Skipped)" -ForegroundColor Gray
+
+if ($results.Failed -gt 0) {
+    Write-Host "`nFailed Links:" -ForegroundColor Red
+    foreach ($failedLink in $results.Errors) {
+        Write-Host "  • $($failedLink.Url)" -ForegroundColor Red
+        Write-Host "    Error: $($failedLink.Error)" -ForegroundColor DarkGray
+        Write-Host "    Occurrences: $($failedLink.Occurrences.Count)" -ForegroundColor DarkGray
+    }
+
+    Write-Host "`n❌ Link verification failed!" -ForegroundColor Red
+    exit 1
+}
+else {
+    Write-Host "`n✅ All links verified successfully!" -ForegroundColor Green
+}
+
+# Write to GitHub Actions step summary if running in a workflow
+if ($env:GITHUB_STEP_SUMMARY) {
+    $summaryContent = @"
+
+# Markdown Link Verification Results
+
+## Summary
+- **Total URLs checked:** $($results.Total)
+- **Passed:** ✅ $($results.Passed)
+- **Failed:** $(if ($results.Failed -gt 0) { "❌" } else { "✅" }) $($results.Failed)
+- **Skipped:** $($results.Skipped)
+
+"@
+
+    if ($results.Failed -gt 0) {
+        $summaryContent += @"
+
+## Failed Links
+
+| URL | Error | Occurrences |
+|-----|-------|-------------|
+
+"@
+        foreach ($failedLink in $results.Errors) {
+            $summaryContent += "| $($failedLink.Url) | $($failedLink.Error) | $($failedLink.Occurrences.Count) |`n"
+        }
+
+        $summaryContent += @"
+
+<details>
+<summary>Click to see all failed link locations</summary>
+
+"@
+        foreach ($failedLink in $results.Errors) {
+            $summaryContent += "`n### $($failedLink.Url)`n"
+            $summaryContent += "**Error:** $($failedLink.Error)`n`n"
+            foreach ($occurrence in $failedLink.Occurrences) {
+                $summaryContent += "- `$($occurrence.Path):$($occurrence.Line):$($occurrence.Column)`n"
+            }
+        }
+        $summaryContent += "`n</details>`n"
+    }
+    else {
+        $summaryContent += "`n## ✅ All links verified successfully!`n"
+    }
+
+    Write-Verbose -Verbose "Writing `n $summaryContent `n to ${env:GITHUB_STEP_SUMMARY}"
+    $summaryContent | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append
+    Write-Verbose -Verbose "Summary written to GitHub Actions step summary"
+}
+
diff --git a/.github/actions/infrastructure/markdownlinks/action.yml b/.github/actions/infrastructure/markdownlinks/action.yml
new file mode 100644
index 00000000000..a97bacfca47
--- /dev/null
+++ b/.github/actions/infrastructure/markdownlinks/action.yml
@@ -0,0 +1,114 @@
+name: 'Verify Markdown Links'
+description: 'Verify all links in markdown files using PowerShell and Markdig'
+author: 'PowerShell Team'
+
+inputs:
+  timeout-sec:
+    description: 'Timeout in seconds for HTTP requests'
+    required: false
+    default: '30'
+  maximum-retry-count:
+    description: 'Maximum number of retries for failed requests'
+    required: false
+    default: '2'
+
+outputs:
+  total-links:
+    description: 'Total number of unique links checked'
+    value: ${{ steps.verify.outputs.total }}
+  passed-links:
+    description: 'Number of links that passed verification'
+    value: ${{ steps.verify.outputs.passed }}
+  failed-links:
+    description: 'Number of links that failed verification'
+    value: ${{ steps.verify.outputs.failed }}
+  skipped-links:
+    description: 'Number of links that were skipped'
+    value: ${{ steps.verify.outputs.skipped }}
+
+runs:
+  using: 'composite'
+  steps:
+    - name: Get changed markdown files
+      id: changed-files
+      uses: "./.github/actions/infrastructure/get-changed-files"
+      with:
+        filter: '*.md'
+        event-types: 'pull_request,push'
+
+    - name: Verify markdown links
+      id: verify
+      shell: pwsh
+      env:
+        CHANGED_FILES_PATH: ${{ steps.changed-files.outputs.files_path }}
+      run: |
+        Write-Host "Starting markdown link verification..." -ForegroundColor Cyan
+
+        # Read changed markdown files from temp file to avoid ARG_MAX limits with large PRs
+        $changedFilesPath = $env:CHANGED_FILES_PATH
+        if ($changedFilesPath -and (Test-Path $changedFilesPath)) {
+          $changedFiles = @(Get-Content $changedFilesPath -Raw | ConvertFrom-Json)
+        } else {
+          $changedFiles = @()
+        }
+
+        if ($changedFiles.Count -eq 0) {
+          Write-Host "No markdown files changed, skipping verification" -ForegroundColor Yellow
+          "total=0" >> $env:GITHUB_OUTPUT
+          "passed=0" >> $env:GITHUB_OUTPUT
+          "failed=0" >> $env:GITHUB_OUTPUT
+          "skipped=0" >> $env:GITHUB_OUTPUT
+          exit 0
+        }
+
+        Write-Host "Changed markdown files: $($changedFiles.Count)" -ForegroundColor Cyan
+        $changedFiles | ForEach-Object { Write-Host "  - $_" -ForegroundColor Gray }
+
+        # Build parameters for each file
+        $params = @{
+          File = $changedFiles
+          TimeoutSec = [int]'${{ inputs.timeout-sec }}'
+          MaximumRetryCount = [int]'${{ inputs.maximum-retry-count }}'
+        }
+
+        # Run the verification script
+        $scriptPath = Join-Path '${{ github.action_path }}' 'Verify-MarkdownLinks.ps1'
+
+        # Capture output and parse results
+        $output = & $scriptPath @params 2>&1 | Tee-Object -Variable capturedOutput
+
+        # Try to extract metrics from output
+        $totalLinks = 0
+        $passedLinks = 0
+        $failedLinks = 0
+        $skippedLinks = 0
+
+        foreach ($line in $capturedOutput) {
+          if ($line -match 'Total URLs checked: (\d+)') {
+            $totalLinks = $Matches[1]
+          }
+          elseif ($line -match 'Passed: (\d+)') {
+            $passedLinks = $Matches[1]
+          }
+          elseif ($line -match 'Failed: (\d+)') {
+            $failedLinks = $Matches[1]
+          }
+          elseif ($line -match 'Skipped: (\d+)') {
+            $skippedLinks = $Matches[1]
+          }
+        }
+
+        # Set outputs
+        "total=$totalLinks" >> $env:GITHUB_OUTPUT
+        "passed=$passedLinks" >> $env:GITHUB_OUTPUT
+        "failed=$failedLinks" >> $env:GITHUB_OUTPUT
+        "skipped=$skippedLinks" >> $env:GITHUB_OUTPUT
+
+        Write-Host "Action completed" -ForegroundColor Cyan
+
+        # Exit with the same code as the verification script
+        exit $LASTEXITCODE
+
+branding:
+  icon: 'link'
+  color: 'blue'
diff --git a/.github/actions/infrastructure/merge-conflict-checker/README.md b/.github/actions/infrastructure/merge-conflict-checker/README.md
new file mode 100644
index 00000000000..b53d6f99964
--- /dev/null
+++ b/.github/actions/infrastructure/merge-conflict-checker/README.md
@@ -0,0 +1,86 @@
+# Merge Conflict Checker
+
+This composite GitHub Action checks for Git merge conflict markers in files changed in pull requests.
+
+## Purpose
+
+Automatically detects leftover merge conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) in pull request files to prevent them from being merged into the codebase.
+
+## Usage
+
+### In a Workflow
+
+```yaml
+- name: Check for merge conflict markers
+  uses: "./.github/actions/infrastructure/merge-conflict-checker"
+```
+
+### Complete Example
+
+```yaml
+jobs:
+  merge_conflict_check:
+    name: Check for Merge Conflict Markers
+    runs-on: ubuntu-latest
+    if: github.event_name == 'pull_request'
+    permissions:
+      pull-requests: read
+      contents: read
+    steps:
+      - name: checkout
+        uses: actions/checkout@v5
+
+      - name: Check for merge conflict markers
+        uses: "./.github/actions/infrastructure/merge-conflict-checker"
+```
+
+## How It Works
+
+1. **File Detection**: Uses GitHub's API to get the list of files changed in the pull request
+2. **Marker Scanning**: Reads each changed file and searches for the following markers:
+   - `<<<<<<<` (conflict start marker)
+   - `=======` (conflict separator)
+   - `>>>>>>>` (conflict end marker)
+3. **Result Reporting**: 
+   - If markers are found, the action fails and lists all affected files
+   - If no markers are found, the action succeeds
+
+## Outputs
+
+- `files-checked`: Number of files that were checked
+- `conflicts-found`: Number of files containing merge conflict markers
+
+## Behavior
+
+- **Event Support**: Only works with `pull_request` events
+- **File Handling**:
+  - Checks only files that were added, modified, or renamed
+  - Skips deleted files
+  - **Filters out `*.cs` files** (C# files are excluded from merge conflict checking)
+  - Skips binary/unreadable files
+  - Skips directories
+- **Empty File List**: Gracefully handles cases where no files need checking (e.g., PRs that only delete files)
+
+## Example Output
+
+When conflict markers are detected:
+
+```
+❌ Merge conflict markers detected in the following files:
+  - src/example.cs
+    Markers found: <<<<<<<, =======, >>>>>>>
+  - README.md
+    Markers found: <<<<<<<, =======, >>>>>>>
+
+Please resolve these conflicts before merging.
+```
+
+When no markers are found:
+
+```
+✅ No merge conflict markers found
+```
+
+## Integration
+
+This action is integrated into the `linux-ci.yml` workflow and runs automatically on all pull requests to ensure code quality before merging.
diff --git a/.github/actions/infrastructure/merge-conflict-checker/action.yml b/.github/actions/infrastructure/merge-conflict-checker/action.yml
new file mode 100644
index 00000000000..af76641628e
--- /dev/null
+++ b/.github/actions/infrastructure/merge-conflict-checker/action.yml
@@ -0,0 +1,40 @@
+name: 'Check for Merge Conflict Markers'
+description: 'Checks for Git merge conflict markers in changed files for pull requests'
+author: 'PowerShell Team'
+
+outputs:
+  files-checked:
+    description: 'Number of files checked for merge conflict markers'
+    value: ${{ steps.check.outputs.files-checked }}
+  conflicts-found:
+    description: 'Number of files with merge conflict markers'
+    value: ${{ steps.check.outputs.conflicts-found }}
+
+runs:
+  using: 'composite'
+  steps:
+    - name: Get changed files
+      id: changed-files
+      uses: "./.github/actions/infrastructure/get-changed-files"
+
+    - name: Check for merge conflict markers
+      id: check
+      shell: pwsh
+      env:
+        CHANGED_FILES_PATH: ${{ steps.changed-files.outputs.files_path }}
+      run: |
+        # Read changed files from temp file to avoid ARG_MAX limits with large PRs
+        $changedFilesPath = $env:CHANGED_FILES_PATH
+        if ($changedFilesPath -and (Test-Path $changedFilesPath)) {
+          $changedFiles = @(Get-Content $changedFilesPath -Raw | ConvertFrom-Json)
+        } else {
+          $changedFiles = @()
+        }
+
+        # Import ci.psm1 and run the check
+        Import-Module "$env:GITHUB_WORKSPACE/tools/ci.psm1" -Force
+        Test-MergeConflictMarker -File $changedFiles -WorkspacePath $env:GITHUB_WORKSPACE
+
+branding:
+  icon: 'alert-triangle'
+  color: 'red'
diff --git a/.github/actions/infrastructure/path-filters/action.yml b/.github/actions/infrastructure/path-filters/action.yml
new file mode 100644
index 00000000000..b50384f698d
--- /dev/null
+++ b/.github/actions/infrastructure/path-filters/action.yml
@@ -0,0 +1,144 @@
+name: Path Filters
+description: 'Path Filters'
+inputs:
+  GITHUB_TOKEN:
+    description: 'GitHub token'
+    required: true
+outputs:
+  source:
+    description: 'Source code changes (composite of all changes)'
+    value: ${{ steps.filter.outputs.source }}
+  githubChanged:
+    description: 'GitHub workflow changes'
+    value: ${{ steps.filter.outputs.githubChanged }}
+  toolsChanged:
+    description: 'Tools changes'
+    value: ${{ steps.filter.outputs.toolsChanged }}
+  propsChanged:
+    description: 'Props changes'
+    value: ${{ steps.filter.outputs.propsChanged }}
+  testsChanged:
+    description: 'Tests changes'
+    value: ${{ steps.filter.outputs.testsChanged }}
+  mainSourceChanged:
+    description: 'Main source code changes (any changes in src/)'
+    value: ${{ steps.filter.outputs.mainSourceChanged }}
+  buildModuleChanged:
+    description: 'Build module changes'
+    value: ${{ steps.filter.outputs.buildModuleChanged }}
+  packagingChanged:
+    description: 'Packaging related changes'
+    value: ${{ steps.filter.outputs.packagingChanged }}
+runs:
+  using: composite
+  steps:
+    - name: Get changed files
+      id: get-files
+      if: github.event_name == 'pull_request'
+      uses: "./.github/actions/infrastructure/get-changed-files"
+
+    - name: Check if GitHubWorkflowChanges is present
+      id: filter
+      uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+      env:
+        FILES_PATH: ${{ steps.get-files.outputs.files_path }}
+      with:
+        github-token: ${{ inputs.GITHUB_TOKEN }}
+        script: |
+          console.log(`Event Name: ${context.eventName}`);
+
+          // Just say everything changed if this is not a PR
+          if (context.eventName !== 'pull_request') {
+            console.log('Not a pull request, setting all outputs to true');
+            core.setOutput('toolsChanged', true);
+            core.setOutput('githubChanged', true);
+            core.setOutput('propsChanged', true);
+            core.setOutput('testsChanged', true);
+            core.setOutput('mainSourceChanged', true);
+            core.setOutput('buildModuleChanged', true);
+            core.setOutput('source', true);
+            return;
+          }
+
+          // Read files from temp file to avoid ARG_MAX limits with large PRs
+          const fs = require('fs');
+          const filesPath = process.env.FILES_PATH;
+          let files = [];
+          if (filesPath && fs.existsSync(filesPath)) {
+            files = JSON.parse(fs.readFileSync(filesPath, 'utf8'));
+          } else {
+            console.log('Warning: files_path not found, no files to analyze');
+          }
+
+          // Calculate hash for verification (matches get-changed-files action)
+          const crypto = require('crypto');
+          const filesJson = JSON.stringify(files.sort());
+          const hash = crypto.createHash('sha256').update(filesJson).digest('hex').substring(0, 8);
+          console.log(`Received ${files.length} files (hash: ${hash})`);
+
+          // Analyze changes with detailed logging
+          core.startGroup('Path Filter Analysis');
+
+          const actionsChanged = files.some(file => file.startsWith('.github/actions'));
+          console.log(`✓ Actions changed: ${actionsChanged}`);
+
+          const workflowsChanged = files.some(file => file.startsWith('.github/workflows'));
+          console.log(`✓ Workflows changed: ${workflowsChanged}`);
+
+          const githubChanged = actionsChanged || workflowsChanged;
+          console.log(`→ GitHub changed (actions OR workflows): ${githubChanged}`);
+
+          const toolsCiPsm1Changed = files.some(file => file === 'tools/ci.psm1');
+          console.log(`✓ tools/ci.psm1 changed: ${toolsCiPsm1Changed}`);
+
+          const toolsBuildCommonChanged = files.some(file => file.startsWith('tools/buildCommon/'));
+          console.log(`✓ tools/buildCommon/ changed: ${toolsBuildCommonChanged}`);
+
+          const toolsChanged = toolsCiPsm1Changed || toolsBuildCommonChanged;
+          console.log(`→ Tools changed: ${toolsChanged}`);
+
+          const propsChanged = files.some(file => file.endsWith('.props'));
+          console.log(`✓ Props files changed: ${propsChanged}`);
+
+          const testsChanged = files.some(file => file.startsWith('test/powershell/') || file.startsWith('test/tools/') || file.startsWith('test/xUnit/'));
+          console.log(`✓ Tests changed: ${testsChanged}`);
+
+          const mainSourceChanged = files.some(file => file.startsWith('src/'));
+          console.log(`✓ Main source (src/) changed: ${mainSourceChanged}`);
+
+          const buildModuleChanged = files.some(file => file === 'build.psm1');
+          console.log(`✓ build.psm1 changed: ${buildModuleChanged}`);
+
+          const globalConfigChanged = files.some(file => file === '.globalconfig' || file === 'nuget.config' || file === 'global.json');
+          console.log(`✓ Global config changed: ${globalConfigChanged}`);
+
+          const packagingChanged = files.some(file =>
+            file === '.github/workflows/windows-ci.yml' ||
+            file === '.github/workflows/linux-ci.yml' ||
+            file.startsWith('assets/wix/') ||
+            file === 'PowerShell.Common.props' ||
+            file.match(/^src\/.*\.csproj$/) ||
+            file.startsWith('test/packaging/windows/') ||
+            file.startsWith('test/packaging/linux/') ||
+            file.startsWith('tools/packaging/') ||
+            file.startsWith('tools/wix/')
+          ) ||
+            buildModuleChanged ||
+            globalConfigChanged ||
+            toolsCiPsm1Changed;
+          console.log(`→ Packaging changed: ${packagingChanged}`);
+
+          const source = mainSourceChanged || toolsChanged || githubChanged || propsChanged || testsChanged || globalConfigChanged;
+          console.log(`→ Source (composite): ${source}`);
+
+          core.endGroup();
+
+          core.setOutput('toolsChanged', toolsChanged);
+          core.setOutput('githubChanged', githubChanged);
+          core.setOutput('propsChanged', propsChanged);
+          core.setOutput('testsChanged', testsChanged);
+          core.setOutput('mainSourceChanged', mainSourceChanged);
+          core.setOutput('buildModuleChanged', buildModuleChanged);
+          core.setOutput('globalConfigChanged', globalConfigChanged);
+          core.setOutput('packagingChanged', packagingChanged);
+          core.setOutput('source', source);
diff --git a/.github/actions/test/linux-packaging/action.yml b/.github/actions/test/linux-packaging/action.yml
new file mode 100644
index 00000000000..ce37a38c8b7
--- /dev/null
+++ b/.github/actions/test/linux-packaging/action.yml
@@ -0,0 +1,69 @@
+name: linux_packaging
+description: 'Linux packaging for PowerShell'
+
+runs:
+  using: composite
+  steps:
+  - name: Capture Environment
+    if: success() || failure()
+    run: |-
+      Import-Module ./tools/ci.psm1
+      Show-Environment
+    shell: pwsh
+
+  - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
+    with:
+      global-json-file: ./global.json
+
+  - name: Bootstrap
+    run: |-
+      Import-Module ./build.psm1
+      Start-PSBootstrap -Scenario Package
+      Import-Module ./tools/ci.psm1
+      Invoke-CIInstall -SkipUser
+    shell: pwsh
+
+  - name: Build and Package
+    run: |-
+      Import-Module ./tools/ci.psm1
+      $releaseTag = Get-ReleaseTag
+      Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+      Invoke-CIFinish
+    shell: pwsh
+
+  - name: Install Pester
+    run: |-
+      Import-Module ./tools/ci.psm1
+      Install-CIPester
+    shell: pwsh
+
+  - name: Validate Package Names
+    run: |-
+      # Run Pester tests to validate package names
+      Import-Module Pester -Force
+      $testResults = Invoke-Pester -Path ./test/packaging/linux/package-validation.tests.ps1 -PassThru
+      if ($testResults.FailedCount -gt 0) {
+          throw "Package validation tests failed"
+      }
+    shell: pwsh
+
+  - name: Upload deb packages
+    uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+    with:
+      name: packages-deb
+      path: ${{ runner.workspace }}/packages/*.deb
+      if-no-files-found: ignore
+
+  - name: Upload rpm packages
+    uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+    with:
+      name: packages-rpm
+      path: ${{ runner.workspace }}/packages/*.rpm
+      if-no-files-found: ignore
+
+  - name: Upload tar.gz packages
+    uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+    with:
+      name: packages-tar
+      path: ${{ runner.workspace }}/packages/*.tar.gz
+      if-no-files-found: ignore
diff --git a/.github/actions/test/nix/action.yml b/.github/actions/test/nix/action.yml
new file mode 100644
index 00000000000..ab30e0d9ce6
--- /dev/null
+++ b/.github/actions/test/nix/action.yml
@@ -0,0 +1,158 @@
+name: nix_test
+description: 'Test PowerShell on non-Windows platforms'
+
+inputs:
+  purpose:
+    required: false
+    default: ''
+    type: string
+  tagSet:
+    required: false
+    default: CI
+    type: string
+  ctrfFolder:
+    required: false
+    default: ctrf
+    type: string
+  GITHUB_TOKEN:
+    description: 'GitHub token for API authentication'
+    required: true
+
+runs:
+  using: composite
+  steps:
+  - name: Capture Environment
+    if: success() || failure()
+    run: |-
+      Import-Module ./tools/ci.psm1
+      Show-Environment
+    shell: pwsh
+
+  - name: Download Build Artifacts
+    uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+    with:
+      path: "${{ github.workspace }}"
+
+  - name: Capture Artifacts Directory
+    continue-on-error: true
+    run: |-
+      Import-Module ./build.psm1
+      Write-LogGroupStart -Title 'Artifacts Directory'
+      Get-ChildItem "${{ github.workspace }}/build/*" -Recurse
+      Write-LogGroupEnd -Title 'Artifacts Directory'
+    shell: pwsh
+
+  - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
+    with:
+      global-json-file: ./global.json
+
+  - name: Set Package Name by Platform
+    id: set_package_name
+    shell: pwsh
+    run: |-
+      Import-Module ./.github/workflows/GHWorkflowHelper/GHWorkflowHelper.psm1
+      $platform = $env:RUNNER_OS
+      Write-Host "Runner platform: $platform"
+      if ($platform -eq 'Linux') {
+        $packageName = 'DSC-*-x86_64-linux.tar.gz'
+      } elseif ($platform -eq 'macOS') {
+        $packageName = 'DSC-*-x86_64-apple-darwin.tar.gz'
+      } else {
+        throw "Unsupported platform: $platform"
+      }
+
+      Set-GWVariable -Name "DSC_PACKAGE_NAME" -Value $packageName
+
+  - name: Get Latest DSC Package Version
+    shell: pwsh
+    run: |-
+      Import-Module ./.github/workflows/GHWorkflowHelper/GHWorkflowHelper.psm1
+      $headers = @{
+        Authorization = "Bearer ${{ inputs.GITHUB_TOKEN }}"
+      }
+      $releases = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/Dsc/releases" -Headers $headers
+      $latestRelease = $releases | Where-Object { $v = $_.name.trim("v"); $semVer = [System.Management.Automation.SemanticVersion]::new($v); if ($semVer.Major -eq 3 -and $semVer.Minor -ge 2) { $_ } } | Select-Object -First 1
+      $latestVersion = $latestRelease.tag_name.TrimStart("v")
+      Write-Host "Latest DSC Version: $latestVersion"
+
+      $packageName = "$env:DSC_PACKAGE_NAME"
+
+      Write-Host "Package Name: $packageName"
+
+      $downloadUrl = $latestRelease.assets | Where-Object { $_.name -like "*$packageName*" } | Select-Object -First 1 | Select-Object -ExpandProperty browser_download_url
+      Write-Host "Download URL: $downloadUrl"
+
+      $tempPath = Get-GWTempPath
+
+      Invoke-RestMethod -Uri $downloadUrl -OutFile "$tempPath/DSC.tar.gz" -Verbose -Headers $headers
+      New-Item -ItemType Directory -Path "$tempPath/DSC" -Force -Verbose
+      tar xvf "$tempPath/DSC.tar.gz" -C "$tempPath/DSC"
+      $dscRoot = "$tempPath/DSC"
+      Write-Host "DSC Root: $dscRoot"
+      Set-GWVariable -Name "DSC_ROOT" -Value $dscRoot
+
+  - name: Bootstrap
+    shell: pwsh
+    run: |-
+      Import-Module ./build.psm1
+      Write-LogGroupStart -Title 'Bootstrap'
+      Import-Module ./tools/ci.psm1
+      Invoke-CIInstall -SkipUser
+      Write-LogGroupEnd -Title 'Bootstrap'
+
+  - name: Extract Files
+    uses: actions/github-script@e69ef5462fd455e02edcaf4dd7708eda96b9eda0 # v7.0.0
+    env:
+      DESTINATION_FOLDER: "${{ github.workspace }}/bins"
+      ARCHIVE_FILE_PATTERNS: "${{ github.workspace }}/build/build.zip"
+    with:
+      script: |-
+        const fs = require('fs').promises
+        const path = require('path')
+        const target = path.resolve(process.env.DESTINATION_FOLDER)
+        const patterns = process.env.ARCHIVE_FILE_PATTERNS
+        const globber = await glob.create(patterns)
+        await io.mkdirP(path.dirname(target))
+        for await (const file of globber.globGenerator()) {
+          if ((await fs.lstat(file)).isDirectory()) continue
+          await exec.exec(`7z x ${file} -o${target} -aoa`)
+        }
+
+  - name: Fix permissions
+    continue-on-error: true
+    run: |-
+      find "${{ github.workspace }}/bins" -type d -exec chmod +rwx {} \;
+      find "${{ github.workspace }}/bins" -type f -exec chmod +rw {} \;
+    shell: bash
+
+  - name: Capture Extracted Build ZIP
+    continue-on-error: true
+    run: |-
+      Import-Module ./build.psm1
+      Write-LogGroupStart -Title 'Extracted Build ZIP'
+      Get-ChildItem "${{ github.workspace }}/bins/*" -Recurse -ErrorAction SilentlyContinue
+      Write-LogGroupEnd -Title 'Extracted Build ZIP'
+    shell: pwsh
+
+  - name: Test
+    if: success()
+    run: |-
+      Import-Module ./tools/ci.psm1
+      Restore-PSOptions -PSOptionsPath '${{ github.workspace }}/build/psoptions.json'
+      $options = (Get-PSOptions)
+      $rootPath = '${{ github.workspace }}/bins'
+      $originalRootPath = Split-Path -path $options.Output
+      $path = Join-Path -path $rootPath -ChildPath (split-path -leaf -path $originalRootPath)
+      $pwshPath = Join-Path -path $path -ChildPath 'pwsh'
+      chmod a+x $pwshPath
+      $options.Output = $pwshPath
+      Set-PSOptions $options
+      Invoke-CITest -Purpose '${{ inputs.purpose }}' -TagSet '${{ inputs.tagSet }}' -TitlePrefix '${{ inputs.buildName }}' -OutputFormat NUnitXml
+    shell: pwsh
+
+  - name: Convert, Publish, and Upload Pester Test Results
+    uses: "./.github/actions/test/process-pester-results"
+    with:
+      name: "${{ inputs.purpose }}-${{ inputs.tagSet }}"
+      testResultsFolder: "${{ runner.workspace }}/testResults"
+      ctrfFolder: "${{ inputs.ctrfFolder }}"
diff --git a/.github/actions/test/process-pester-results/action.yml b/.github/actions/test/process-pester-results/action.yml
new file mode 100644
index 00000000000..44f2037626f
--- /dev/null
+++ b/.github/actions/test/process-pester-results/action.yml
@@ -0,0 +1,27 @@
+name: process-pester-test-results
+description: 'Process Pester test results'
+
+inputs:
+  name:
+    required: true
+    default: ''
+    type: string
+  testResultsFolder:
+    required: false
+    default: "${{ runner.workspace }}/testResults"
+    type: string
+
+runs:
+  using: composite
+  steps:
+  - name: Log Summary
+    run: |-
+      & "$env:GITHUB_ACTION_PATH/process-pester-results.ps1" -Name '${{ inputs.name }}' -TestResultsFolder '${{ inputs.testResultsFolder }}'
+    shell: pwsh
+
+  - name: Upload testResults artifact
+    if: always()
+    uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+    with:
+      name: junit-pester-${{ inputs.name }}
+      path: ${{ runner.workspace }}/testResults
diff --git a/.github/actions/test/process-pester-results/process-pester-results.ps1 b/.github/actions/test/process-pester-results/process-pester-results.ps1
new file mode 100644
index 00000000000..5804bec9a94
--- /dev/null
+++ b/.github/actions/test/process-pester-results/process-pester-results.ps1
@@ -0,0 +1,124 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+param(
+    [parameter(Mandatory)]
+    [string]$Name,
+    [parameter(Mandatory)]
+    [string]$TestResultsFolder
+)
+
+Import-Module "$PSScriptRoot/../../../../build.psm1"
+
+if (-not $env:GITHUB_STEP_SUMMARY) {
+    Write-Error "GITHUB_STEP_SUMMARY is not set. Ensure this workflow is running in a GitHub Actions environment."
+    exit 1
+}
+
+$testCaseCount = 0
+$testErrorCount = 0
+$testFailureCount = 0
+$testNotRunCount = 0
+$testInconclusiveCount = 0
+$testIgnoredCount = 0
+$testSkippedCount = 0
+$testInvalidCount = 0
+
+# Process test results and generate annotations for failures
+Get-ChildItem -Path "${TestResultsFolder}/*.xml" -Recurse | ForEach-Object {
+    $results = [xml] (get-content $_.FullName)
+
+    $testCaseCount += [int]$results.'test-results'.total
+    $testErrorCount += [int]$results.'test-results'.errors
+    $testFailureCount += [int]$results.'test-results'.failures
+    $testNotRunCount += [int]$results.'test-results'.'not-run'
+    $testInconclusiveCount += [int]$results.'test-results'.inconclusive
+    $testIgnoredCount += [int]$results.'test-results'.ignored
+    $testSkippedCount += [int]$results.'test-results'.skipped
+    $testInvalidCount += [int]$results.'test-results'.invalid
+
+    # Generate GitHub Actions annotations for test failures
+    # Select failed test cases
+    if ("System.Xml.XmlDocumentXPathExtensions" -as [Type]) {
+        $failures = [System.Xml.XmlDocumentXPathExtensions]::SelectNodes($results.'test-results', './/test-case[@result = "Failure"]')
+    }
+    else {
+        $failures = $results.SelectNodes('.//test-case[@result = "Failure"]')
+    }
+
+    foreach ($testfail in $failures) {
+        $description = $testfail.description
+        $testName = $testfail.name
+        $message = $testfail.failure.message
+        $stack_trace = $testfail.failure.'stack-trace'
+
+        # Parse stack trace to get file and line info
+        $fileInfo = Get-PesterFailureFileInfo -StackTraceString $stack_trace
+
+        if ($fileInfo.File) {
+            # Convert absolute path to relative path for GitHub Actions
+            $filePath = $fileInfo.File
+
+            # GitHub Actions expects paths relative to the workspace root
+            if ($env:GITHUB_WORKSPACE) {
+                $workspacePath = $env:GITHUB_WORKSPACE
+                if ($filePath.StartsWith($workspacePath)) {
+                    $filePath = $filePath.Substring($workspacePath.Length).TrimStart('/', '\')
+                    # Normalize to forward slashes for consistency
+                    $filePath = $filePath -replace '\\', '/'
+                }
+            }
+
+            # Create annotation title
+            $annotationTitle = "Test Failure: $description / $testName"
+
+            # Build the annotation message
+            $annotationMessage = $message -replace "`n", "%0A" -replace "`r"
+
+            # Build and output the workflow command
+            $workflowCommand = "::error file=$filePath"
+            if ($fileInfo.Line) {
+                $workflowCommand += ",line=$($fileInfo.Line)"
+            }
+            $workflowCommand += ",title=$annotationTitle::$annotationMessage"
+
+            Write-Host $workflowCommand
+
+            # Output a link to the test run
+            if ($env:GITHUB_SERVER_URL -and $env:GITHUB_REPOSITORY -and $env:GITHUB_RUN_ID) {
+                $logUrl = "$($env:GITHUB_SERVER_URL)/$($env:GITHUB_REPOSITORY)/actions/runs/$($env:GITHUB_RUN_ID)"
+                Write-Host "Test logs: $logUrl"
+            }
+        }
+    }
+}
+
+@"
+
+# Summary of $Name
+
+- Total Tests: $testCaseCount
+- Total Errors: $testErrorCount
+- Total Failures: $testFailureCount
+- Total Not Run: $testNotRunCount
+- Total Inconclusive: $testInconclusiveCount
+- Total Ignored: $testIgnoredCount
+- Total Skipped: $testSkippedCount
+- Total Invalid: $testInvalidCount
+
+"@ | Out-File -FilePath $ENV:GITHUB_STEP_SUMMARY -Append
+
+Write-Log "Summary written to $ENV:GITHUB_STEP_SUMMARY"
+
+Write-LogGroupStart -Title 'Test Results'
+Get-Content $ENV:GITHUB_STEP_SUMMARY
+Write-LogGroupEnd -Title 'Test Results'
+
+if ($testErrorCount -gt 0 -or $testFailureCount -gt 0) {
+    Write-Error "There were $testErrorCount/$testFailureCount errors/failures in the test results."
+    exit 1
+}
+if ($testCaseCount -eq 0) {
+    Write-Error "No test cases were run."
+    exit 1
+}
diff --git a/.github/actions/test/windows/action.yml b/.github/actions/test/windows/action.yml
new file mode 100644
index 00000000000..ddc5da4d664
--- /dev/null
+++ b/.github/actions/test/windows/action.yml
@@ -0,0 +1,107 @@
+name: windows_test
+description: 'Test PowerShell on Windows'
+
+inputs:
+  purpose:
+    required: false
+    default: ''
+    type: string
+  tagSet:
+    required: false
+    default: CI
+    type: string
+  ctrfFolder:
+    required: false
+    default: ctrf
+    type: string
+  GITHUB_TOKEN:
+    description: 'GitHub token for API authentication'
+    required: true
+
+runs:
+  using: composite
+  steps:
+  - name: Capture Environment
+    if: success() || failure()
+    run: |-
+      Import-Module ./tools/ci.psm1
+      Show-Environment
+    shell: pwsh
+
+  - name: Download Build Artifacts
+    uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+    with:
+      path: "${{ github.workspace }}"
+
+  - name: Capture Artifacts Directory
+    continue-on-error: true
+    run: |-
+      Import-Module ./build.psm1
+      Write-LogGroupStart -Title 'Artifacts Directory'
+      Get-ChildItem "${{ github.workspace }}/build/*" -Recurse
+      Write-LogGroupEnd -Title 'Artifacts Directory'
+    shell: pwsh
+
+  - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
+    with:
+      global-json-file: .\global.json
+
+  - name: Get Latest DSC Package Version
+    shell: pwsh
+    run: |-
+      Import-Module .\.github\workflows\GHWorkflowHelper\GHWorkflowHelper.psm1
+      $headers = @{
+        Authorization = "Bearer ${{ inputs.GITHUB_TOKEN }}"
+      }
+      $releases = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/Dsc/releases" -Headers $headers
+      $latestRelease = $releases | Where-Object { $v = $_.name.trim("v"); $semVer = [System.Management.Automation.SemanticVersion]::new($v); if ($semVer.Major -eq 3 -and $semVer.Minor -ge 2) { $_ } } | Select-Object -First 1
+      $latestVersion = $latestRelease.tag_name.TrimStart("v")
+      Write-Host "Latest DSC Version: $latestVersion"
+
+      $downloadUrl = $latestRelease.assets | Where-Object { $_.name -like "DSC-*-x86_64-pc-windows-msvc.zip" } | Select-Object -First 1 | Select-Object -ExpandProperty browser_download_url
+      Write-Host "Download URL: $downloadUrl"
+      $tempPath = Get-GWTempPath
+      Invoke-RestMethod -Uri $downloadUrl -OutFile "$tempPath\DSC.zip" -Headers $headers
+
+      $null = New-Item -ItemType Directory -Path "$tempPath\DSC" -Force
+      Expand-Archive -Path "$tempPath\DSC.zip" -DestinationPath "$tempPath\DSC" -Force
+      $dscRoot = "$tempPath\DSC"
+      Write-Host "DSC Root: $dscRoot"
+      Set-GWVariable -Name "DSC_ROOT" -Value $dscRoot
+
+  - name: Bootstrap
+    shell: powershell
+    run: |-
+      Import-Module ./build.psm1
+      Write-LogGroupStart -Title 'Bootstrap'
+      Write-Host "Old Path:"
+      Write-Host $env:Path
+      $dotnetPath = Join-Path $env:SystemDrive 'Program Files\dotnet'
+      $paths = $env:Path -split ";" | Where-Object { -not $_.StartsWith($dotnetPath) }
+      $env:Path = $paths -join ";"
+      Write-Host "New Path:"
+      Write-Host $env:Path
+      # Bootstrap
+      Import-Module .\tools\ci.psm1
+      Invoke-CIInstall
+      Write-LogGroupEnd -Title 'Bootstrap'
+
+  - name: Test
+    if: success()
+    run: |-
+      Import-Module .\build.psm1 -force
+      Import-Module .\tools\ci.psm1
+      Restore-PSOptions -PSOptionsPath '${{ github.workspace }}\build\psoptions.json'
+      $options = (Get-PSOptions)
+      $path = split-path -path $options.Output
+      $rootPath = split-Path -path $path
+      Expand-Archive -Path '${{ github.workspace }}\build\build.zip' -DestinationPath $rootPath -Force
+      Invoke-CITest -Purpose '${{ inputs.purpose }}' -TagSet '${{ inputs.tagSet }}' -OutputFormat NUnitXml
+    shell: pwsh
+
+  - name: Convert, Publish, and Upload Pester Test Results
+    uses: "./.github/actions/test/process-pester-results"
+    with:
+      name: "${{ inputs.purpose }}-${{ inputs.tagSet }}"
+      testResultsFolder: ${{ runner.workspace }}\testResults
+      ctrfFolder: "${{ inputs.ctrfFolder }}"
diff --git a/.github/agents/SplitADOPipelines.agent.md b/.github/agents/SplitADOPipelines.agent.md
new file mode 100644
index 00000000000..9454670061f
--- /dev/null
+++ b/.github/agents/SplitADOPipelines.agent.md
@@ -0,0 +1,180 @@
+---
+name: SplitADOPipelines
+description: This agent will implement and restructure the repository's existing ADO pipelines into Official and NonOfficial pipelines.
+tools: ['vscode', 'execute', 'read', 'agent', 'edit', 'search', 'todo']
+---
+
+This agent will implement and restructure the repository's existing ADO pipelines into Official and NonOfficial pipelines. 
+
+A repository will have under the .pipelines directory a series of yaml files that define the ADO pipelines for the repository.
+
+First confirm if the pipelines are using a toggle switch for Official and NonOfficial. This will look something like this
+
+```yaml
+parameters:
+  - name: templateFile
+    value: ${{ iif ( parameters.OfficialBuild, 'v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates', 'v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates' ) }}
+```
+
+Followed by:
+
+```yaml
+extends:
+  template: ${{ variables.templateFile }}
+```
+
+This is an indicator that this work needs to be done. This toggle switch is no longer allowed and the templates need to be hard coded.
+
+## Template Reference Convention (MUST follow)
+
+All `- template:` references to files **inside this repo** must use the **absolute** form anchored at the repo root, with the `@self` suffix:
+
+```yaml
+- template: /.pipelines/templates/<path>/<file>.yml@self
+```
+
+Do **not** use relative paths such as `templates/...`, `../templates/...`, or bare filenames. Rationale:
+
+- Absolute paths resolve identically regardless of where the referring file lives, so moving a pipeline file between directories (for example, into `.pipelines/NonOfficial/`) does not silently break includes.
+- Relative paths are resolved by Azure DevOps against the directory of the referring file, which has caused real outages in this repo when a relative include was composed into a nonexistent nested path like `.pipelines/templates/stages/.pipelines/templates/...`.
+- The majority of existing includes already use the absolute form; keeping new work consistent reduces review burden.
+
+The only acceptable non-absolute references are to external repositories resolved via the `resources.repositories` block, for example `v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates`.
+
+## Refactoring Steps
+
+### Step 1: Extract Shared Templates
+
+For each pipeline file that uses the toggle switch pattern (e.g., `PowerShell-Packages-Official.yml`):
+
+1. Create the `.pipelines/templates/variables` and `.pipelines/templates/stages` directories if they don't exist
+2. Extract the **variables section** into `.pipelines/templates/variables/PowerShell-Packages-Variables.yml`
+3. Extract the **stages section** into `.pipelines/templates/stages/PowerShell-Packages-Stages.yml`
+
+**IMPORTANT**: Only extract the `variables:` and `stages:` sections. All other sections (parameters, resources, extends, etc.) remain in the pipeline files.
+
+### Step 2: Create Official Pipeline (In-Place Refactoring)
+
+The original toggle-based file becomes the Official pipeline:
+
+1. **Keep the file in its original location** (e.g., `.pipelines/PowerShell-Packages-Official.yml` stays where it is)
+2. Remove the toggle switch parameter (`templateFile` parameter)
+3. Hard-code the Official template reference:
+   ```yaml
+   extends:
+     template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates
+   ```
+4. Replace the `variables:` section with a template reference:
+   ```yaml
+   variables:
+     - template: /.pipelines/templates/variables/PowerShell-Packages-Variables.yml@self
+   ```
+5. Replace the `stages:` section with a template reference:
+   ```yaml
+   stages:
+     - template: /.pipelines/templates/stages/PowerShell-Packages-Stages.yml@self
+   ```
+
+### Step 3: Create NonOfficial Pipeline
+
+1. Create `.pipelines/NonOfficial` directory if it doesn't exist
+2. Create the NonOfficial pipeline file (e.g., `.pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml`)
+3. Copy the structure from the refactored Official pipeline
+4. Hard-code the NonOfficial template reference:
+   ```yaml
+   extends:
+     template: v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates
+   ```
+5. Reference the same shared templates:
+   ```yaml
+   variables:
+     - template: /.pipelines/templates/variables/PowerShell-Packages-Variables.yml@self
+   
+   stages:
+     - template: /.pipelines/templates/stages/PowerShell-Packages-Stages.yml@self
+   ```
+
+**Note**: Always use **absolute** template paths of the form `/.pipelines/templates/...@self`. Do not use relative paths like `templates/...` or `../templates/...`. Absolute paths are anchored at the repo root and resolve consistently from any referring file, preventing breakage when files are moved between directories.
+
+### Step 4: Link NonOfficial Pipelines to NonOfficial Dependencies
+
+After creating NonOfficial pipelines, ensure they consume artifacts from other **NonOfficial** pipelines, not Official ones.
+
+1. **Check the `resources:` section** in each NonOfficial pipeline for `pipelines:` dependencies
+2. **Identify Official pipeline references** that need to be changed to NonOfficial
+3. **Update the `source:` field** to point to the NonOfficial version
+
+**Example Problem:** NonOfficial pipeline pointing to Official dependency
+```yaml
+resources:
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated Binaries-Official'  # ❌ Wrong - Official!
+```
+
+**Solution:** Update to NonOfficial dependency
+```yaml
+resources:
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated Binaries-NonOfficial'  # ✅ Correct - NonOfficial!
+```
+
+**IMPORTANT**: The `source:` field must match the **exact ADO pipeline definition name** as it appears in Azure DevOps, not necessarily the file name.
+
+### Step 5: Configure Release Environment Parameters (NonAzure Only)
+
+**This step only applies if the pipeline uses `category: NonAzure` in the release configuration.**
+
+If you detect this pattern in the original pipeline:
+
+```yaml
+extends:
+  template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates  # or NonOfficial
+  parameters:
+    release:
+      category: NonAzure
+```
+
+Then you must configure the `ob_release_environment` parameter when referencing the stages template.
+
+#### Official Pipeline Configuration
+
+In the Official pipeline (e.g., `.pipelines/PowerShell-Packages-Official.yml`):
+
+```yaml
+stages:
+  - template: /.pipelines/templates/stages/PowerShell-Packages-Stages.yml@self
+    parameters:
+      ob_release_environment: Production
+```
+
+#### NonOfficial Pipeline Configuration
+
+In the NonOfficial pipeline (e.g., `.pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml`):
+
+```yaml
+stages:
+  - template: /.pipelines/templates/stages/PowerShell-Packages-Stages.yml@self
+    parameters:
+      ob_release_environment: Test
+```
+
+#### Update Stages Template to Accept Parameter
+
+The extracted stages template (e.g., `.pipelines/templates/stages/PowerShell-Packages-Stages.yml`) must declare the parameter at the top:
+
+```yaml
+parameters:
+  - name: ob_release_environment
+    type: string
+
+stages:
+  # ... rest of stages configuration using ${{ parameters.ob_release_environment }}
+```
+
+**IMPORTANT**: 
+- Only configure this for pipelines with `category: NonAzure`
+- Official pipelines always use `ob_release_environment: Production`
+- NonOfficial pipelines always use `ob_release_environment: Test`
+- The stages template must accept this parameter and use it in the appropriate stage configurations
diff --git a/.github/chatmodes/cherry-pick-commits.chatmode.md b/.github/chatmodes/cherry-pick-commits.chatmode.md
new file mode 100644
index 00000000000..826ab11d56c
--- /dev/null
+++ b/.github/chatmodes/cherry-pick-commits.chatmode.md
@@ -0,0 +1,78 @@
+# Cherry-Pick Commits Between Branches
+
+Cherry-pick recent commits from a source branch to a target branch without switching branches.
+
+## Instructions for Copilot
+
+1. **Confirm branches with the user**
+   - Ask the user to confirm the source and target branches
+   - If different branches are needed, update the configuration
+
+2. **Identify unique commits**
+   - Run: `git log <target-branch>..<source-branch> --oneline --reverse`
+   - **IMPORTANT**: The commit count may be misleading if branches diverged from different base commits
+   - Compare the LAST few commits from each branch to identify actual missing commits:
+     - `git log <source-branch> --oneline -10`
+     - `git log <target-branch> --oneline -10`
+   - Look for commits with the same message but different SHAs (rebased commits)
+   - Show the user ONLY the truly missing commits (usually just the most recent ones)
+
+3. **Confirm with user before proceeding**
+   - If the commit count seems unusually high (e.g., 400+), STOP and verify semantically
+   - Ask: "I found X commits to cherry-pick. Shall I proceed?"
+   - If there are many commits, warn that this may take time
+
+4. **Execute the cherry-pick**
+   - Ensure the target branch is checked out first
+   - Run: `git cherry-pick <sha1>` for single commits
+   - Or: `git cherry-pick <sha1> <sha2> <sha3>` for multiple commits
+   - Apply commits in chronological order (oldest first)
+
+5. **Handle any issues**
+   - If conflicts occur, pause and ask user for guidance
+   - If empty commits occur, automatically skip with `git cherry-pick --skip`
+
+6. **Verify and report results**
+   - Run: `git log <target-branch> -<number-of-commits> --oneline`
+   - Show the user the newly applied commits
+   - Confirm the branch is now ahead by X commits
+
+## Key Git Commands
+
+```bash
+# Find unique commits (may show full divergence if branches were rebased)
+git log <target>..<source> --oneline --reverse
+
+# Compare recent commits on each branch (more reliable for rebased branches)
+git log <source-branch> --oneline -10
+git log <target-branch> --oneline -10
+
+# Cherry-pick specific commits (when target is checked out)
+git cherry-pick <sha1>
+git cherry-pick <sha1> <sha2> <sha3>
+
+# Skip empty commits
+git cherry-pick --skip
+
+# Verify result
+git log <target-branch> -<count> --oneline
+```
+
+## Common Scenarios
+
+- **Empty commits**: Automatically skip with `git cherry-pick --skip`
+- **Conflicts**: Stop, show files with conflicts, ask user to resolve
+- **Many commits**: Warn user and confirm before proceeding
+- **Already applied**: These will result in empty commits that should be skipped
+- **Diverged branches**: If branches diverged (rebased), `git log` may show the entire history difference
+  - The actual missing commits are usually only the most recent ones
+  - Compare commit messages from recent history on both branches
+  - Cherry-pick only commits that are semantically missing
+
+## Workflow Style
+
+Use an interactive, step-by-step approach:
+- Show output from each command
+- Ask for confirmation before major actions
+- Provide clear status updates
+- Handle errors gracefully with user guidance
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 38a493b7f36..45d2e8fe928 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,53 +1,32 @@
 version: 2
 
 updates:
-  - package-ecosystem: "nuget"
+  - package-ecosystem: "github-actions"
     directory: "/"
     schedule:
       interval: "daily"
     labels:
       - "CL-BuildPackaging"
-    ignore:
-      - dependency-name: "System.*"
-      - dependency-name: "Microsoft.Win32.Registry.AccessControl"
-      - dependency-name: "Microsoft.Windows.Compatibility"
 
-  - package-ecosystem: "nuget"
-    directory: "/tools/packaging/projects/reference/Microsoft.PowerShell.Commands.Utility"
-    schedule:
-      interval: "daily"
-    labels:
-      - "CL-BuildPackaging"
-    ignore:
-      - dependency-name: "System.*"
-      - dependency-name: "Microsoft.Win32.Registry.AccessControl"
-      - dependency-name: "Microsoft.Windows.Compatibility"
-
-  - package-ecosystem: "nuget"
-    directory: "/tools/packaging/projects/reference/System.Management.Automation"
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    target-branch: "release/*"
     schedule:
       interval: "daily"
     labels:
       - "CL-BuildPackaging"
-    ignore:
-      - dependency-name: "System.*"
-      - dependency-name: "Microsoft.Win32.Registry.AccessControl"
-      - dependency-name: "Microsoft.Windows.Compatibility"
 
-  - package-ecosystem: "nuget"
-    directory: "/test/tools/Modules"
+  - package-ecosystem: "docker"
+    directory: /
     schedule:
-      interval: "daily"
+      interval: daily
     labels:
       - "CL-BuildPackaging"
-    ignore:
-      - dependency-name: "System.*"
-      - dependency-name: "Microsoft.Win32.Registry.AccessControl"
-      - dependency-name: "Microsoft.Windows.Compatibility"
 
-  - package-ecosystem: "nuget"
-    directory: "/src/Modules"
+  - package-ecosystem: "docker"
+    directory: "/"
+    target-branch: "release/*"
     schedule:
-      interval: "daily"
+      interval: daily
     labels:
       - "CL-BuildPackaging"
diff --git a/.github/instructions/build-and-packaging-steps.instructions.md b/.github/instructions/build-and-packaging-steps.instructions.md
new file mode 100644
index 00000000000..934b1539593
--- /dev/null
+++ b/.github/instructions/build-and-packaging-steps.instructions.md
@@ -0,0 +1,127 @@
+---
+applyTo:
+  - ".github/actions/**/*.yml"
+  - ".github/workflows/**/*.yml"
+---
+
+# Build and Packaging Steps Pattern
+
+## Important Rule
+
+**Build and packaging must run in the same step OR you must save and restore PSOptions between steps.**
+
+## Why This Matters
+
+When `Start-PSBuild` runs, it creates PSOptions that contain build configuration details (runtime, configuration, output path, etc.). The packaging functions like `Start-PSPackage` and `Invoke-CIFinish` rely on these PSOptions to know where the build output is located and how it was built.
+
+GitHub Actions steps run in separate PowerShell sessions. This means PSOptions from one step are not available in the next step.
+
+## Pattern 1: Combined Build and Package (Recommended)
+
+Run build and packaging in the same step to keep PSOptions in memory:
+
+```yaml
+- name: Build and Package
+  run: |-
+    Import-Module ./tools/ci.psm1
+    $releaseTag = Get-ReleaseTag
+    Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+    Invoke-CIFinish
+  shell: pwsh
+```
+
+**Benefits:**
+- Simpler code
+- No need for intermediate files
+- PSOptions automatically available to packaging
+
+## Pattern 2: Separate Steps with Save/Restore
+
+If you must separate build and packaging into different steps:
+
+```yaml
+- name: Build PowerShell
+  run: |-
+    Import-Module ./tools/ci.psm1
+    $releaseTag = Get-ReleaseTag
+    Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+    Save-PSOptions -PSOptionsPath "${{ runner.workspace }}/psoptions.json"
+  shell: pwsh
+
+- name: Create Packages
+  run: |-
+    Import-Module ./tools/ci.psm1
+    Restore-PSOptions -PSOptionsPath "${{ runner.workspace }}/psoptions.json"
+    Invoke-CIFinish
+  shell: pwsh
+```
+
+**When to use:**
+- When you need to run other steps between build and packaging
+- When build and packaging require different permissions or environments
+
+## Common Mistakes
+
+### ❌ Incorrect: Separate steps without save/restore
+
+```yaml
+- name: Build PowerShell
+  run: |-
+    Start-PSBuild -Configuration 'Release'
+  shell: pwsh
+
+- name: Create Packages
+  run: |-
+    Invoke-CIFinish  # ❌ FAILS: PSOptions not available
+  shell: pwsh
+```
+
+### ❌ Incorrect: Using artifacts without PSOptions
+
+```yaml
+- name: Download Build Artifacts
+  uses: actions/download-artifact@v4
+  with:
+    name: build
+
+- name: Create Packages
+  run: |-
+    Invoke-CIFinish  # ❌ FAILS: PSOptions not restored
+  shell: pwsh
+```
+
+## Related Functions
+
+- `Start-PSBuild` - Builds PowerShell and sets PSOptions
+- `Save-PSOptions` - Saves PSOptions to a JSON file
+- `Restore-PSOptions` - Loads PSOptions from a JSON file
+- `Get-PSOptions` - Gets current PSOptions
+- `Set-PSOptions` - Sets PSOptions
+- `Start-PSPackage` - Creates packages (requires PSOptions)
+- `Invoke-CIFinish` - Calls packaging (requires PSOptions on Linux/macOS)
+
+## Examples
+
+### Linux Packaging Action
+
+```yaml
+- name: Build and Package
+  run: |-
+    Import-Module ./tools/ci.psm1
+    $releaseTag = Get-ReleaseTag
+    Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+    Invoke-CIFinish
+  shell: pwsh
+```
+
+### Windows Packaging Workflow
+
+```yaml
+- name: Build and Package
+  run: |
+    Import-Module .\tools\ci.psm1
+    Invoke-CIFinish -Runtime ${{ matrix.runtimePrefix }}-${{ matrix.architecture }} -channel ${{ matrix.channel }}
+  shell: pwsh
+```
+
+Note: `Invoke-CIFinish` for Windows includes both build and packaging in its logic when `Stage` contains 'Build'.
diff --git a/.github/instructions/build-checkout-prerequisites.instructions.md b/.github/instructions/build-checkout-prerequisites.instructions.md
new file mode 100644
index 00000000000..717aa6faa36
--- /dev/null
+++ b/.github/instructions/build-checkout-prerequisites.instructions.md
@@ -0,0 +1,148 @@
+---
+applyTo:
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+---
+
+# Build and Checkout Prerequisites for PowerShell CI
+
+This document describes the checkout and build prerequisites used in PowerShell's CI workflows. It is intended for GitHub Copilot sessions working with the build system.
+
+## Overview
+
+The PowerShell repository uses a standardized build process across Linux, Windows, and macOS CI workflows. Understanding the checkout configuration and the `Sync-PSTags` operation is crucial for working with the build system.
+
+## Checkout Configuration
+
+### Fetch Depth
+
+All CI workflows that build or test PowerShell use `fetch-depth: 1000` in the checkout step:
+
+```yaml
+- name: checkout
+  uses: actions/checkout@v5
+  with:
+    fetch-depth: 1000
+```
+
+**Why 1000 commits?**
+- The build system needs access to Git history to determine version information
+- `Sync-PSTags` requires sufficient history to fetch and work with tags
+- 1000 commits provides a reasonable balance between clone speed and having enough history for version calculation
+- Shallow clones (fetch-depth: 1) would break versioning logic
+
+**Exceptions:**
+- The `changes` job uses default fetch depth (no explicit `fetch-depth`) since it only needs to detect file changes
+- The `analyze` job (CodeQL) uses `fetch-depth: '0'` (full history) for comprehensive security analysis
+- Linux packaging uses `fetch-depth: 0` to ensure all tags are available for package version metadata
+
+### Workflows Using fetch-depth: 1000
+
+- **Linux CI** (`.github/workflows/linux-ci.yml`): All build and test jobs
+- **Windows CI** (`.github/workflows/windows-ci.yml`): All build and test jobs  
+- **macOS CI** (`.github/workflows/macos-ci.yml`): All build and test jobs
+
+## Sync-PSTags Operation
+
+### What is Sync-PSTags?
+
+`Sync-PSTags` is a PowerShell function defined in `build.psm1` that ensures Git tags from the upstream PowerShell repository are synchronized to the local clone.
+
+### Location
+
+- **Function Definition**: `build.psm1` (line 36-76)
+- **Called From**: 
+  - `.github/actions/build/ci/action.yml` (Bootstrap step, line 24)
+  - `tools/ci.psm1` (Invoke-CIInstall function, line 146)
+
+### How It Works
+
+```powershell
+Sync-PSTags -AddRemoteIfMissing
+```
+
+The function:
+1. Searches for a Git remote pointing to the official PowerShell repository:
+   - `https://github.com/PowerShell/PowerShell`
+   - `git@github.com:PowerShell/PowerShell`
+
+2. If no upstream remote exists and `-AddRemoteIfMissing` is specified:
+   - Adds a remote named `upstream` pointing to `https://github.com/PowerShell/PowerShell.git`
+
+3. Fetches all tags from the upstream remote:
+   ```bash
+   git fetch --tags --quiet upstream
+   ```
+
+4. Sets `$script:tagsUpToDate = $true` to indicate tags are synchronized
+
+### Why Sync-PSTags is Required
+
+Tags are critical for:
+- **Version Calculation**: `Get-PSVersion` uses `git describe --abbrev=0` to find the latest tag
+- **Build Numbering**: CI builds use tag-based versioning for artifacts
+- **Changelog Generation**: Release notes are generated based on tags
+- **Package Metadata**: Package versions are derived from Git tags
+
+Without synchronized tags:
+- Version detection would fail or return incorrect versions
+- Builds might have inconsistent version numbers
+- The build process would error when trying to determine the version
+
+### Bootstrap Step in CI Action
+
+The `.github/actions/build/ci/action.yml` includes this in the Bootstrap step:
+
+```yaml
+- name: Bootstrap
+  if: success()
+  run: |-
+    Write-Verbose -Verbose "Running Bootstrap..."
+    Import-Module .\tools\ci.psm1
+    Invoke-CIInstall -SkipUser
+    Write-Verbose -Verbose "Start Sync-PSTags"
+    Sync-PSTags -AddRemoteIfMissing
+    Write-Verbose -Verbose "End Sync-PSTags"
+  shell: pwsh
+```
+
+**Note**: `Sync-PSTags` is called twice:
+1. Once by `Invoke-CIInstall` (in `tools/ci.psm1`)
+2. Explicitly again in the Bootstrap step
+
+This redundancy ensures tags are available even if the first call encounters issues.
+
+## Best Practices for Copilot Sessions
+
+When working with the PowerShell CI system:
+
+1. **Always use `fetch-depth: 1000` or greater** when checking out code for build or test operations
+2. **Understand that `Sync-PSTags` requires network access** to fetch tags from the upstream repository
+3. **Don't modify the fetch-depth without understanding the impact** on version calculation
+4. **If adding new CI workflows**, follow the existing pattern:
+   - Use `fetch-depth: 1000` for build/test jobs
+   - Call `Sync-PSTags -AddRemoteIfMissing` during bootstrap
+   - Ensure the upstream remote is properly configured
+
+5. **For local development**, developers should:
+   - Have the upstream remote configured
+   - Run `Sync-PSTags -AddRemoteIfMissing` before building
+   - Or use `Start-PSBuild` which handles this automatically
+
+## Related Files
+
+- `.github/actions/build/ci/action.yml` - Main CI build action
+- `.github/workflows/linux-ci.yml` - Linux CI workflow
+- `.github/workflows/windows-ci.yml` - Windows CI workflow
+- `.github/workflows/macos-ci.yml` - macOS CI workflow
+- `build.psm1` - Contains Sync-PSTags function definition
+- `tools/ci.psm1` - CI-specific build functions that call Sync-PSTags
+
+## Summary
+
+The PowerShell CI system depends on:
+1. **Adequate Git history** (fetch-depth: 1000) for version calculation
+2. **Synchronized Git tags** via `Sync-PSTags` for accurate versioning
+3. **Upstream remote access** to fetch official repository tags
+
+These prerequisites ensure consistent, accurate build versioning across all CI platforms.
diff --git a/.github/instructions/build-configuration-guide.instructions.md b/.github/instructions/build-configuration-guide.instructions.md
new file mode 100644
index 00000000000..d0384f4f307
--- /dev/null
+++ b/.github/instructions/build-configuration-guide.instructions.md
@@ -0,0 +1,150 @@
+---
+applyTo:
+  - "build.psm1"
+  - "tools/ci.psm1"
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+  - ".pipelines/**/*.yml"
+---
+
+# Build Configuration Guide
+
+## Choosing the Right Configuration
+
+### For Testing
+
+**Use: Default (Debug)**
+
+```yaml
+- name: Build for Testing
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Start-PSBuild
+```
+
+**Why Debug:**
+- Includes debugging symbols
+- Better error messages
+- Faster build times
+- Suitable for xUnit and Pester tests
+
+**Do NOT use:**
+- `-Configuration 'Release'` (unnecessary for tests)
+- `-ReleaseTag` (not needed for tests)
+- `-CI` (unless you specifically need Pester module)
+
+### For Release/Packaging
+
+**Use: Release with version tag and public NuGet feeds**
+
+```yaml
+- name: Build for Release
+  shell: pwsh
+  run: |
+    Import-Module ./build.psm1
+    Import-Module ./tools/ci.psm1
+    Switch-PSNugetConfig -Source Public
+    $releaseTag = Get-ReleaseTag
+    Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+```
+
+**Why Release:**
+- Optimized binaries
+- No debug symbols (smaller size)
+- Production-ready
+
+**Why Switch-PSNugetConfig -Source Public:**
+- Switches NuGet package sources to public feeds (nuget.org and public Azure DevOps feeds)
+- Required for CI/CD environments that don't have access to private feeds
+- Uses publicly available packages instead of Microsoft internal feeds
+
+### For Code Coverage
+
+**Use: CodeCoverage configuration**
+
+```yaml
+- name: Build with Coverage
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Start-PSBuild -Configuration 'CodeCoverage'
+```
+
+## Platform Considerations
+
+### All Platforms
+
+Same commands work across Linux, Windows, and macOS:
+
+```yaml
+strategy:
+  matrix:
+    os: [ubuntu-latest, windows-latest, macos-latest]
+runs-on: ${{ matrix.os }}
+steps:
+  - name: Build PowerShell
+    shell: pwsh
+    run: |
+      Import-Module ./tools/ci.psm1
+      Start-PSBuild
+```
+
+### Output Locations
+
+**Linux/macOS:**
+```
+src/powershell-unix/bin/Debug/<netversion>/<runtime>/publish/
+```
+
+**Windows:**
+```
+src/powershell-win-core/bin/Debug/<netversion>/<runtime>/publish/
+```
+
+## Best Practices
+
+1. Use default configuration for testing
+2. Avoid redundant parameters
+3. Match configuration to purpose
+4. Use `-CI` only when needed
+5. Always specify `-ReleaseTag` for release or packaging builds
+6. Use `Switch-PSNugetConfig -Source Public` in CI/CD for release builds
+
+## NuGet Feed Configuration
+
+### Switch-PSNugetConfig
+
+The `Switch-PSNugetConfig` function in `build.psm1` manages NuGet package source configuration.
+
+**Available Sources:**
+
+- **Public**: Uses public feeds (nuget.org and public Azure DevOps feeds)
+  - Required for: CI/CD environments, public builds, packaging
+  - Does not require authentication
+
+- **Private**: Uses internal PowerShell team feeds
+  - Required for: Internal development with preview packages
+  - Requires authentication credentials
+
+- **NuGetOnly**: Uses only nuget.org
+  - Required for: Minimal dependency scenarios
+
+**Usage:**
+
+```powershell
+# Switch to public feeds (most common for CI/CD)
+Switch-PSNugetConfig -Source Public
+
+# Switch to private feeds with authentication
+Switch-PSNugetConfig -Source Private -UserName $userName -ClearTextPAT $pat
+
+# Switch to nuget.org only
+Switch-PSNugetConfig -Source NuGetOnly
+```
+
+**When to Use:**
+
+- **Always use `-Source Public`** before building in CI/CD workflows
+- Use before any build that will create packages for distribution
+- Use in forks or environments without access to Microsoft internal feeds
diff --git a/.github/instructions/code-review-branch-strategy.instructions.md b/.github/instructions/code-review-branch-strategy.instructions.md
new file mode 100644
index 00000000000..191a677b912
--- /dev/null
+++ b/.github/instructions/code-review-branch-strategy.instructions.md
@@ -0,0 +1,230 @@
+---
+applyTo: "**/*"
+---
+
+# Code Review Branch Strategy Guide
+
+This guide helps GitHub Copilot provide appropriate feedback when reviewing code changes, particularly distinguishing between issues that should be fixed in the current branch versus the default branch.
+
+## Purpose
+
+When reviewing pull requests, especially those targeting release branches, it's important to identify whether an issue should be fixed in:
+- **The current PR/branch** - Release-specific fixes or backports
+- **The default branch first** - General bugs that exist in the main codebase
+
+## Branch Types and Fix Strategy
+
+### Release Branches (e.g., `release/v7.5`, `release/v7.4`)
+
+**Purpose:** Contain release-specific changes and critical backports
+
+**Should contain:**
+- Release-specific configuration changes
+- Critical bug fixes that are backported from the default branch
+- Release packaging/versioning adjustments
+
+**Should NOT contain:**
+- New general bug fixes that haven't been fixed in the default branch
+- Refactoring or improvements that apply to the main codebase
+- Workarounds for issues that exist in the default branch
+
+### Default/Main Branch (e.g., `master`, `main`)
+
+**Purpose:** Primary development branch for all ongoing work
+
+**Should contain:**
+- All general bug fixes
+- New features and improvements
+- Refactoring and code quality improvements
+- Fixes that will later be backported to release branches
+
+## Identifying Issues That Belong in the Default Branch
+
+When reviewing a PR targeting a release branch, look for these indicators that suggest the fix should be in the default branch first:
+
+### 1. The Root Cause Exists in Default Branch
+
+If the underlying issue exists in the default branch's code, it should be fixed there first.
+
+**Example:**
+```yaml
+# PR changes this in release/v7.5:
+- $metadata = Get-Content "$repoRoot/tools/metadata.json" -Raw | ConvertFrom-Json
++ $metadata = Get-Content "$(Build.SourcesDirectory)/PowerShell/tools/metadata.json" -Raw | ConvertFrom-Json
+```
+
+**Analysis:** If `$repoRoot` is undefined because the template doesn't include its dependencies in BOTH the release branch AND the default branch, the fix should address the root cause in the default branch first.
+
+### 2. The Fix is a Workaround Rather Than a Proper Solution
+
+If the change introduces a workaround (hardcoded paths, special cases) rather than fixing the underlying design issue, it likely belongs in the default branch as a proper fix.
+
+**Example:**
+- Using hardcoded paths instead of fixing variable initialization
+- Adding special cases instead of fixing the logic
+- Duplicating code instead of fixing shared dependencies
+
+### 3. The Issue Affects General Functionality
+
+If the issue affects general functionality not specific to a release, it should be fixed in the default branch.
+
+**Example:**
+- Template dependencies that affect all pipelines
+- Shared utility functions
+- Common configuration issues
+
+## Providing Code Review Feedback
+
+### For Issues in the Current Branch
+
+When an issue is specific to the current branch or is a legitimate fix for the branch being targeted, **use the default code review feedback format** without any special branch-strategy commentary.
+
+### For Issues That Belong in the Default Branch
+
+1. **Provide the code review feedback**
+2. **Explain why it should be fixed in the default branch**
+3. **Provide an issue template** in markdown format
+
+**Example:**
+
+```markdown
+The `channelSelection.yml` template relies on `$repoRoot` being set by `SetVersionVariables.yml`, but doesn't declare this dependency. This issue exists in both the release branch and the default branch.
+
+**This should be fixed in the default branch first**, then backported if needed. The proper fix is to ensure template dependencies are correctly declared, rather than using hardcoded paths as a workaround.
+
+---
+
+**Suggested Issue for Default Branch:**
+
+### Issue Title
+`channelSelection.yml` template missing dependency on `SetVersionVariables.yml`
+
+### Description
+The `channelSelection.yml` template uses the `$repoRoot` variable but doesn't ensure it's set beforehand by including `SetVersionVariables.yml`.
+
+**Current State:**
+- `channelSelection.yml` expects `$repoRoot` to be available
+- Not all pipelines that use `channelSelection.yml` include `SetVersionVariables.yml` first
+- This creates an implicit dependency that's not enforced
+
+**Expected State:**
+Either:
+1. `channelSelection.yml` should include `SetVersionVariables.yml` as a dependency, OR
+2. `channelSelection.yml` should be refactored to not depend on `$repoRoot`, OR
+3. Pipelines using `channelSelection.yml` should explicitly include `SetVersionVariables.yml` first
+
+**Files Affected:**
+- `.pipelines/templates/channelSelection.yml`
+- `.pipelines/templates/package-create-msix.yml`
+- `.pipelines/templates/release-SetTagAndChangelog.yml`
+
+**Priority:** Medium
+**Labels:** `Issue-Bug`, `Area-Build`, `Area-Pipeline`
+```
+
+## Issue Template Format
+
+When creating an issue template for the default branch, use this structure:
+
+```markdown
+### Issue Title
+[Clear, concise description of the problem]
+
+### Description
+[Detailed explanation of the issue]
+
+**Current State:**
+- [What's happening now]
+- [Why it's problematic]
+
+**Expected State:**
+- [What should happen]
+- [Proposed solution(s)]
+
+**Files Affected:**
+- [List of files]
+
+**Priority:** [Low/Medium/High/Critical]
+**Labels:** [Suggested labels like `Issue-Bug`, `Area-*`]
+
+**Additional Context:**
+[Any additional information, links to related issues, etc.]
+```
+
+## Common Scenarios
+
+### Scenario 1: Template Dependency Issues
+
+**Indicators:**
+- Missing template includes
+- Undefined variables from other templates
+- Assumptions about pipeline execution order
+
+**Action:** Suggest fixing template dependencies in the default branch.
+
+### Scenario 2: Hardcoded Values
+
+**Indicators:**
+- Hardcoded paths replacing variables
+- Environment-specific values in shared code
+- Magic strings or numbers
+
+**Action:** Suggest proper variable/parameter usage in the default branch.
+
+### Scenario 3: Logic Errors
+
+**Indicators:**
+- Incorrect conditional logic
+- Missing error handling
+- Race conditions
+
+**Action:** Suggest fixing the logic in the default branch unless it's release-specific.
+
+### Scenario 4: Legitimate Release Branch Fixes
+
+**Indicators:**
+- Version-specific configuration
+- Release packaging changes
+- Backport of already-fixed default branch issue
+
+**Action:** Provide normal code review feedback for the current PR.
+
+## Best Practices
+
+1. **Always check if the issue exists in the default branch** before suggesting a release-branch-only fix
+2. **Prefer fixing root causes over workarounds**
+3. **Provide clear rationale** for why a fix belongs in the default branch
+4. **Include actionable issue templates** so users can easily create issues
+5. **Be helpful, not blocking** - provide the feedback even if you can't enforce where it's fixed
+
+## Examples of Good vs. Bad Approaches
+
+### ❌ Bad: Workaround in Release Branch Only
+
+```yaml
+# In release/v7.5 only
+- pwsh: |
+    $metadata = Get-Content "$(Build.SourcesDirectory)/PowerShell/tools/metadata.json" -Raw
+```
+
+**Why bad:** Hardcodes path to work around missing `$repoRoot`, doesn't fix the default branch.
+
+### ✅ Good: Fix in Default Branch, Then Backport
+
+```yaml
+# In default branch first
+- template: SetVersionVariables.yml@self  # Ensures $repoRoot is set
+- template: channelSelection.yml@self     # Now can use $repoRoot
+```
+
+**Why good:** Fixes the root cause by ensuring dependencies are declared, then backport to release if needed.
+
+## When in Doubt
+
+If you're unsure whether an issue should be fixed in the current branch or the default branch, ask yourself:
+
+1. Does this issue exist in the default branch?
+2. Is this a workaround or a proper fix?
+3. Will other branches/releases benefit from this fix?
+
+If the answer to any of these is "yes," suggest fixing it in the default branch first.
diff --git a/.github/instructions/instruction-file-format.instructions.md b/.github/instructions/instruction-file-format.instructions.md
new file mode 100644
index 00000000000..7c4e0bdd13d
--- /dev/null
+++ b/.github/instructions/instruction-file-format.instructions.md
@@ -0,0 +1,220 @@
+---
+applyTo:
+  - ".github/instructions/**/*.instructions.md"
+---
+
+# Instruction File Format Guide
+
+This document describes the format and guidelines for creating custom instruction files for GitHub Copilot in the PowerShell repository.
+
+## File Naming Convention
+
+All instruction files must use the `.instructions.md` suffix:
+- ✅ Correct: `build-checkout-prerequisites.instructions.md`
+- ✅ Correct: `start-psbuild-basics.instructions.md`
+- ❌ Incorrect: `build-guide.md`
+- ❌ Incorrect: `instructions.md`
+
+## Required Frontmatter
+
+Every instruction file must start with YAML frontmatter containing an `applyTo` section:
+
+```yaml
+---
+applyTo:
+  - "path/to/files/**/*.ext"
+  - "specific-file.ext"
+---
+```
+
+### applyTo Patterns
+
+Specify which files or directories these instructions apply to:
+
+**For workflow files:**
+```yaml
+applyTo:
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+```
+
+**For build scripts:**
+```yaml
+applyTo:
+  - "build.psm1"
+  - "tools/ci.psm1"
+```
+
+**For multiple contexts:**
+```yaml
+applyTo:
+  - "build.psm1"
+  - "tools/**/*.psm1"
+  - ".github/**/*.yml"
+```
+
+## Content Structure
+
+### 1. Clear Title
+
+Use a descriptive H1 heading after the frontmatter:
+
+```markdown
+# Build Configuration Guide
+```
+
+### 2. Purpose or Overview
+
+Start with a brief explanation of what the instructions cover:
+
+```markdown
+## Purpose
+
+This guide explains how to configure PowerShell builds for different scenarios.
+```
+
+### 3. Actionable Content
+
+Provide clear, actionable guidance:
+
+**✅ Good - Specific and actionable:**
+```markdown
+## Default Usage
+
+Use `Start-PSBuild` with no parameters for testing:
+
+```powershell
+Import-Module ./tools/ci.psm1
+Start-PSBuild
+```
+```
+
+**❌ Bad - Vague and unclear:**
+```markdown
+## Usage
+
+You can use Start-PSBuild to build stuff.
+```
+
+### 4. Code Examples
+
+Include working code examples with proper syntax highlighting:
+
+```markdown
+```yaml
+- name: Build PowerShell
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Start-PSBuild
+```
+```
+
+### 5. Context and Rationale
+
+Explain why things are done a certain way:
+
+```markdown
+**Why fetch-depth: 1000?**
+- The build system needs Git history for version calculation
+- Shallow clones would break versioning logic
+```
+
+## Best Practices
+
+### Be Concise
+
+- Focus on essential information
+- Remove redundant explanations
+- Use bullet points for lists
+
+### Be Specific
+
+- Provide exact commands and parameters
+- Include file paths and line numbers when relevant
+- Show concrete examples, not abstract concepts
+
+### Avoid Duplication
+
+- Don't repeat information from other instruction files
+- Reference other files when appropriate
+- Keep each file focused on one topic
+
+### Use Proper Formatting
+
+**Headers:**
+- Use H1 (`#`) for the main title
+- Use H2 (`##`) for major sections
+- Use H3 (`###`) for subsections
+
+**Code blocks:**
+- Always specify the language: ` ```yaml `, ` ```powershell `, ` ```bash `
+- Keep examples short and focused
+- Test examples before including them
+
+**Lists:**
+- Use `-` for unordered lists
+- Use `1.` for ordered lists
+- Keep list items concise
+
+## Example Structure
+
+```markdown
+---
+applyTo:
+  - "relevant/files/**/*.ext"
+---
+
+# Title of Instructions
+
+Brief description of what these instructions cover.
+
+## Section 1
+
+Content with examples.
+
+```language
+code example
+```
+
+## Section 2
+
+More specific guidance.
+
+### Subsection
+
+Detailed information when needed.
+
+## Best Practices
+
+- Actionable tip 1
+- Actionable tip 2
+```
+
+## Maintaining Instructions
+
+### When to Create a New File
+
+Create a new instruction file when:
+- Covering a distinct topic not addressed elsewhere
+- The content is substantial enough to warrant its own file
+- The `applyTo` scope is different from existing files
+
+### When to Update an Existing File
+
+Update an existing file when:
+- Information is outdated
+- New best practices emerge
+- Examples need correction
+
+### When to Merge or Delete
+
+Merge or delete files when:
+- Content is duplicated across multiple files
+- A file is too small to be useful standalone
+- Information is no longer relevant
+
+## Reference
+
+For more details, see:
+- [GitHub Copilot Custom Instructions Documentation](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)
diff --git a/.github/instructions/log-grouping-guidelines.instructions.md b/.github/instructions/log-grouping-guidelines.instructions.md
new file mode 100644
index 00000000000..ff845db4e4b
--- /dev/null
+++ b/.github/instructions/log-grouping-guidelines.instructions.md
@@ -0,0 +1,181 @@
+---
+applyTo:
+  - "build.psm1"
+  - "tools/ci.psm1"
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+---
+
+# Log Grouping Guidelines for GitHub Actions
+
+## Purpose
+
+Guidelines for using `Write-LogGroupStart` and `Write-LogGroupEnd` to create collapsible log sections in GitHub Actions CI/CD runs.
+
+## Key Principles
+
+### 1. Groups Cannot Be Nested
+
+GitHub Actions does not support nested groups. Only use one level of grouping.
+
+**❌ Don't:**
+```powershell
+Write-LogGroupStart -Title "Outer Group"
+Write-LogGroupStart -Title "Inner Group"
+# ... operations ...
+Write-LogGroupEnd -Title "Inner Group"
+Write-LogGroupEnd -Title "Outer Group"
+```
+
+**✅ Do:**
+```powershell
+Write-LogGroupStart -Title "Operation A"
+# ... operations ...
+Write-LogGroupEnd -Title "Operation A"
+
+Write-LogGroupStart -Title "Operation B"
+# ... operations ...
+Write-LogGroupEnd -Title "Operation B"
+```
+
+### 2. Groups Should Be Substantial
+
+Only create groups for operations that generate substantial output (5+ lines). Small groups add clutter without benefit.
+
+**❌ Don't:**
+```powershell
+Write-LogGroupStart -Title "Generate Resource Files"
+Write-Log -message "Run ResGen"
+Start-ResGen
+Write-LogGroupEnd -Title "Generate Resource Files"
+```
+
+**✅ Do:**
+```powershell
+Write-Log -message "Run ResGen (generating C# bindings for resx files)"
+Start-ResGen
+```
+
+### 3. Groups Should Represent Independent Operations
+
+Each group should be a logically independent operation that users might want to expand/collapse separately.
+
+**✅ Good examples:**
+- Install Native Dependencies
+- Install .NET SDK
+- Build PowerShell
+- Restore NuGet Packages
+
+**❌ Bad examples:**
+- Individual project restores (too granular)
+- Small code generation steps (too small)
+- Sub-steps of a larger operation (would require nesting)
+
+### 4. One Group Per Iteration Is Excessive
+
+Avoid putting log groups inside loops where each iteration creates a separate group.  This would probably cause nesting.
+
+**❌ Don't:**
+```powershell
+$projects | ForEach-Object {
+    Write-LogGroupStart -Title "Restore Project: $_"
+    dotnet restore $_
+    Write-LogGroupEnd -Title "Restore Project: $_"
+}
+```
+
+**✅ Do:**
+```powershell
+Write-LogGroupStart -Title "Restore All Projects"
+$projects | ForEach-Object {
+    Write-Log -message "Restoring $_"
+    dotnet restore $_
+}
+Write-LogGroupEnd -Title "Restore All Projects"
+```
+
+## Usage Pattern
+
+```powershell
+Write-LogGroupStart -Title "Descriptive Operation Name"
+try {
+    # ... operation code ...
+    Write-Log -message "Status updates"
+}
+finally {
+    # Ensure group is always closed
+}
+Write-LogGroupEnd -Title "Descriptive Operation Name"
+```
+
+## When to Use Log Groups
+
+Use log groups for:
+- Major build phases (bootstrap, restore, build, test, package)
+- Installation operations (dependencies, SDKs, tools)
+- Operations that produce 5+ lines of output
+- Operations where users might want to collapse verbose output
+
+Don't use log groups for:
+- Single-line operations
+- Code that's already inside another group
+- Loop iterations with minimal output per iteration
+- Diagnostic or debug output that should always be visible
+
+## Examples from build.psm1
+
+### Good Usage
+
+```powershell
+function Start-PSBootstrap {
+    # Multiple independent operations, each with substantial output
+    Write-LogGroupStart -Title "Install Native Dependencies"
+    # ... apt-get/yum/brew install commands ...
+    Write-LogGroupEnd -Title "Install Native Dependencies"
+
+    Write-LogGroupStart -Title "Install .NET SDK"
+    # ... dotnet installation ...
+    Write-LogGroupEnd -Title "Install .NET SDK"
+}
+```
+
+### Avoid
+
+```powershell
+# Too small - just 2-3 lines
+Write-LogGroupStart -Title "Generate Resource Files (ResGen)"
+Write-Log -message "Run ResGen"
+Start-ResGen
+Write-LogGroupEnd -Title "Generate Resource Files (ResGen)"
+```
+
+## GitHub Actions Syntax
+
+These functions emit GitHub Actions workflow commands:
+- `Write-LogGroupStart` → `::group::Title`
+- `Write-LogGroupEnd` → `::endgroup::`
+
+In the GitHub Actions UI, this renders as collapsible sections with the specified title.
+
+## Testing
+
+Test log grouping locally:
+```powershell
+$env:GITHUB_ACTIONS = 'true'
+Import-Module ./build.psm1
+Write-LogGroupStart -Title "Test"
+Write-Log -Message "Content"
+Write-LogGroupEnd -Title "Test"
+```
+
+Output should show:
+```
+::group::Test
+Content
+::endgroup::
+```
+
+## References
+
+- [GitHub Actions: Grouping log lines](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#grouping-log-lines)
+- `build.psm1`: `Write-LogGroupStart` and `Write-LogGroupEnd` function definitions
diff --git a/.github/instructions/onebranch-condition-syntax.instructions.md b/.github/instructions/onebranch-condition-syntax.instructions.md
new file mode 100644
index 00000000000..19bf331d9c3
--- /dev/null
+++ b/.github/instructions/onebranch-condition-syntax.instructions.md
@@ -0,0 +1,223 @@
+---
+applyTo: ".pipelines/**/*.{yml,yaml}"
+---
+
+# OneBranch Pipeline Condition Syntax
+
+## Overview
+Azure Pipelines (OneBranch) uses specific syntax for referencing variables and parameters in condition expressions. Using the wrong syntax will cause conditions to fail silently or behave unexpectedly.
+
+## Variable Reference Patterns
+
+### In Condition Expressions
+
+**✅ Correct Pattern:**
+```yaml
+condition: eq(variables['VariableName'], 'value')
+condition: or(eq(variables['VAR1'], 'true'), eq(variables['VAR2'], 'true'))
+condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+```
+
+**❌ Incorrect Patterns:**
+```yaml
+# Don't use $(VAR) string expansion in conditions
+condition: eq('$(VariableName)', 'value')
+
+# Don't use direct variable references
+condition: eq($VariableName, 'value')
+```
+
+### In Script Content (pwsh, bash, etc.)
+
+**✅ Correct Pattern:**
+```yaml
+- pwsh: |
+    $value = '$(VariableName)'
+    Write-Host "Value: $(VariableName)"
+```
+
+### In Input Fields
+
+**✅ Correct Pattern:**
+```yaml
+inputs:
+  serviceEndpoint: '$(ServiceEndpoint)'
+  sbConfigPath: '$(SBConfigPath)'
+```
+
+## Parameter References
+
+### Template Parameters (Compile-Time)
+
+**✅ Correct Pattern:**
+```yaml
+parameters:
+  - name: OfficialBuild
+    type: boolean
+    default: false
+
+steps:
+  - task: SomeTask@1
+    condition: eq('${{ parameters.OfficialBuild }}', 'true')
+```
+
+Note: Parameters use `${{ parameters.Name }}` because they're evaluated at template compile-time.
+
+### Runtime Variables (Execution-Time)
+
+**✅ Correct Pattern:**
+```yaml
+steps:
+  - pwsh: |
+      Write-Host "##vso[task.setvariable variable=MyVar]somevalue"
+    displayName: Set Variable
+
+  - task: SomeTask@1
+    condition: eq(variables['MyVar'], 'somevalue')
+```
+
+## Common Scenarios
+
+### Scenario 1: Check if Variable Equals Value
+
+```yaml
+- task: DoSomething@1
+  condition: eq(variables['PREVIEW'], 'true')
+```
+
+### Scenario 2: Multiple Variable Conditions (OR)
+
+```yaml
+- task: DoSomething@1
+  condition: or(eq(variables['STABLE'], 'true'), eq(variables['LTS'], 'true'))
+```
+
+### Scenario 3: Multiple Variable Conditions (AND)
+
+```yaml
+- task: DoSomething@1
+  condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+```
+
+### Scenario 4: Complex Conditions
+
+```yaml
+- task: DoSomething@1
+  condition: and(
+    succeededOrFailed(),
+    ne(variables['UseAzDevOpsFeed'], ''),
+    eq(variables['Build.SourceBranch'], 'refs/heads/master')
+  )
+```
+
+### Scenario 5: Built-in Variables
+
+```yaml
+- task: CodeQL3000Init@0
+  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
+
+- step: finalize
+  condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues')
+```
+
+### Scenario 6: Parameter vs Variable
+
+```yaml
+parameters:
+  - name: OfficialBuild
+    type: boolean
+
+steps:
+  # Parameter condition (compile-time)
+  - task: SignFiles@1
+    condition: eq('${{ parameters.OfficialBuild }}', 'true')
+
+  # Variable condition (runtime)
+  - task: PublishArtifact@1
+    condition: eq(variables['PUBLISH_ENABLED'], 'true')
+```
+
+## Why This Matters
+
+**String Expansion `$(VAR)` in Conditions:**
+- When you use `'$(VAR)'` in a condition, Azure Pipelines attempts to expand it as a string
+- If the variable is undefined or empty, it becomes an empty string `''`
+- The condition `eq('', 'true')` will always be false
+- This makes debugging difficult because there's no error message
+
+**Variables Array Syntax `variables['VAR']`:**
+- This is the proper way to reference runtime variables in conditions
+- Azure Pipelines correctly evaluates the variable's value
+- Undefined variables are handled properly by the condition evaluator
+- This is the standard pattern used throughout Azure Pipelines
+
+## Reference Examples
+
+Working examples can be found in:
+- `.pipelines/templates/linux.yml` - Build.SourceBranch conditions
+- `.pipelines/templates/windows-hosted-build.yml` - Architecture conditions
+- `.pipelines/templates/compliance/apiscan.yml` - CODEQL_ENABLED conditions
+- `.pipelines/templates/insert-nuget-config-azfeed.yml` - Complex AND/OR conditions
+
+## Quick Reference Table
+
+| Context | Syntax | Example |
+|---------|--------|---------|
+| Condition expression | `variables['Name']` | `condition: eq(variables['PREVIEW'], 'true')` |
+| Script content | `$(Name)` | `pwsh: Write-Host "$(PREVIEW)"` |
+| Task input | `$(Name)` | `inputs: path: '$(Build.SourcesDirectory)'` |
+| Template parameter | `${{ parameters.Name }}` | `condition: eq('${{ parameters.Official }}', 'true')` |
+
+## Troubleshooting
+
+### Condition Always False
+If your condition is always evaluating to false:
+1. Check if you're using `'$(VAR)'` instead of `variables['VAR']`
+2. Verify the variable is actually set (add a debug step to print the variable)
+3. Check the variable value is exactly what you expect (case-sensitive)
+
+### Variable Not Found
+If you get errors about variables not being found:
+1. Ensure the variable is set before the condition is evaluated
+2. Check that the variable name is spelled correctly
+3. Verify the variable is in scope (job vs. stage vs. pipeline level)
+
+## Best Practices
+
+1. **Always use `variables['Name']` in conditions** - This is the correct Azure Pipelines pattern
+2. **Use `$(Name)` for string expansion** in scripts and inputs
+3. **Use `${{ parameters.Name }}` for template parameters** (compile-time)
+4. **Add debug steps** to verify variable values when troubleshooting conditions
+5. **Follow existing patterns** in the repository - grep for `condition:` to see examples
+
+## Common Mistakes
+
+❌ **Mistake 1: String expansion in condition**
+```yaml
+condition: eq('$(PREVIEW)', 'true')  # WRONG
+```
+
+✅ **Fix:**
+```yaml
+condition: eq(variables['PREVIEW'], 'true')  # CORRECT
+```
+
+❌ **Mistake 2: Missing quotes around parameter**
+```yaml
+condition: eq(${{ parameters.Official }}, true)  # WRONG
+```
+
+✅ **Fix:**
+```yaml
+condition: eq('${{ parameters.Official }}', 'true')  # CORRECT
+```
+
+❌ **Mistake 3: Mixing syntax**
+```yaml
+condition: or(eq('$(STABLE)', 'true'), eq(variables['LTS'], 'true'))  # INCONSISTENT
+```
+
+✅ **Fix:**
+```yaml
+condition: or(eq(variables['STABLE'], 'true'), eq(variables['LTS'], 'true'))  # CORRECT
+```
diff --git a/.github/instructions/onebranch-restore-phase-pattern.instructions.md b/.github/instructions/onebranch-restore-phase-pattern.instructions.md
new file mode 100644
index 00000000000..0945bb47c0b
--- /dev/null
+++ b/.github/instructions/onebranch-restore-phase-pattern.instructions.md
@@ -0,0 +1,83 @@
+---
+applyTo: ".pipelines/**/*.{yml,yaml}"
+---
+
+# OneBranch Restore Phase Pattern
+
+## Overview
+When steps need to run in the OneBranch restore phase (before the main build phase), the `ob_restore_phase` environment variable must be set in the `env:` block of **each individual step**.
+
+## Pattern
+
+### ✅ Correct (Working Pattern)
+```yaml
+parameters:
+- name: "ob_restore_phase"
+  type: boolean
+  default: true  # or false if you don't want restore phase
+
+steps:
+- powershell: |
+    # script content
+  displayName: 'Step Name'
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
+```
+
+The key is to:
+1. Define `ob_restore_phase` as a **boolean** parameter
+2. Set `ob_restore_phase: ${{ parameters.ob_restore_phase }}` directly in each step's `env:` block
+3. Pass `true` to run in restore phase, `false` to run in normal build phase
+
+### ❌ Incorrect (Does Not Work)
+```yaml
+steps:
+- powershell: |
+    # script content
+  displayName: 'Step Name'
+  ${{ if eq(parameters.useRestorePhase, 'yes') }}:
+    env:
+      ob_restore_phase: true
+```
+
+Using conditionals at the same indentation level as `env:` causes only the first step to execute in restore phase.
+
+## Parameters
+
+Templates using this pattern should accept an `ob_restore_phase` boolean parameter:
+
+```yaml
+parameters:
+- name: "ob_restore_phase"
+  type: boolean
+  default: true  # Set to true to run in restore phase by default
+```
+
+## Reference Examples
+
+Working examples of this pattern can be found in:
+- `.pipelines/templates/insert-nuget-config-azfeed.yml` - Demonstrates the correct pattern
+- `.pipelines/templates/SetVersionVariables.yml` - Updated to use this pattern
+
+## Why This Matters
+
+The restore phase in OneBranch pipelines runs before signing and other build operations. Steps that need to:
+- Set environment variables for the entire build
+- Configure authentication
+- Prepare the repository structure
+
+Must run in the restore phase to be available when subsequent stages execute.
+
+## Common Use Cases
+
+- Setting `REPOROOT` variable
+- Configuring NuGet feeds with authentication
+- Setting version variables
+- Repository preparation and validation
+
+## Troubleshooting
+
+If only the first step in your template is running in restore phase:
+1. Check that `env:` block exists for **each step**
+2. Verify the conditional `${{ if ... }}:` is **inside** the `env:` block
+3. Confirm indentation is correct (conditional is indented under `env:`)
diff --git a/.github/instructions/onebranch-signing-configuration.instructions.md b/.github/instructions/onebranch-signing-configuration.instructions.md
new file mode 100644
index 00000000000..747fcaffdd6
--- /dev/null
+++ b/.github/instructions/onebranch-signing-configuration.instructions.md
@@ -0,0 +1,195 @@
+---
+applyTo:
+  - ".pipelines/**/*.yml"
+  - ".pipelines/**/*.yaml"
+---
+
+# OneBranch Signing Configuration
+
+This guide explains how to configure OneBranch signing variables in Azure Pipeline jobs, particularly when signing is not required.
+
+## Purpose
+
+OneBranch pipelines include signing infrastructure by default. For build-only jobs where signing happens in a separate stage, you should disable signing setup to improve performance and avoid unnecessary overhead.
+
+## Disable Signing for Build-Only Jobs
+
+When a job does not perform signing (e.g., it only builds artifacts that will be signed in a later stage), disable both signing setup and code sign validation:
+
+```yaml
+variables:
+  - name: ob_signing_setup_enabled
+    value: false  # Disable signing setup - this is a build-only stage
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false  # Skip signing validation in build-only stage
+```
+
+### Why Disable These Variables?
+
+**`ob_signing_setup_enabled: false`**
+- Prevents OneBranch from setting up the signing infrastructure
+- Reduces job startup time
+- Avoids unnecessary credential validation
+- Only disable when the job will NOT sign any artifacts
+
+**`ob_sdl_codeSignValidation_enabled: false`**
+- Skips validation that checks if files are properly signed
+- Appropriate for build stages where artifacts are unsigned
+- Must be enabled in signing/release stages to validate signatures
+
+## Common Patterns
+
+### Build-Only Job (No Signing)
+
+```yaml
+jobs:
+- job: build_artifacts
+  variables:
+    - name: ob_signing_setup_enabled
+      value: false
+    - name: ob_sdl_codeSignValidation_enabled
+      value: false
+  steps:
+    - checkout: self
+    - pwsh: |
+        # Build unsigned artifacts
+        Start-PSBuild
+```
+
+### Signing Job
+
+```yaml
+jobs:
+- job: sign_artifacts
+  variables:
+    - name: ob_signing_setup_enabled
+      value: true
+    - name: ob_sdl_codeSignValidation_enabled
+      value: true
+  steps:
+    - checkout: self
+      env:
+        ob_restore_phase: true  # Steps before first signing operation
+    - pwsh: |
+        # Prepare artifacts for signing
+      env:
+        ob_restore_phase: true  # Steps before first signing operation
+    - task: onebranch.pipeline.signing@1
+      displayName: 'Sign artifacts'
+      # Signing step runs in build phase (no ob_restore_phase)
+    - pwsh: |
+        # Post-signing validation
+      # Post-signing steps run in build phase (no ob_restore_phase)
+```
+
+## Restore Phase Usage with Signing
+
+**The restore phase (`ob_restore_phase: true`) should only be used in jobs that perform signing operations.** It separates preparation steps from the actual signing and build steps.
+
+### When to Use Restore Phase
+
+Use `ob_restore_phase: true` **only** in jobs where `ob_signing_setup_enabled: true`:
+
+```yaml
+jobs:
+- job: sign_artifacts
+  variables:
+    - name: ob_signing_setup_enabled
+      value: true  # Signing enabled
+  steps:
+    # Steps BEFORE first signing operation: use restore phase
+    - checkout: self
+      env:
+        ob_restore_phase: true
+    - template: prepare-for-signing.yml
+      parameters:
+        ob_restore_phase: true
+
+    # SIGNING STEP: runs in build phase (no ob_restore_phase)
+    - task: onebranch.pipeline.signing@1
+      displayName: 'Sign artifacts'
+
+    # Steps AFTER signing: run in build phase (no ob_restore_phase)
+    - pwsh: |
+        # Validation or packaging
+```
+
+### When NOT to Use Restore Phase
+
+**Do not use restore phase in build-only jobs** where `ob_signing_setup_enabled: false`:
+
+```yaml
+jobs:
+- job: build_artifacts
+  variables:
+    - name: ob_signing_setup_enabled
+      value: false  # No signing
+    - name: ob_sdl_codeSignValidation_enabled
+      value: false
+  steps:
+    - checkout: self
+      # NO ob_restore_phase - not needed without signing
+    - pwsh: |
+        Start-PSBuild
+```
+
+**Why?** The restore phase is part of OneBranch's signing infrastructure. Using it without signing enabled adds unnecessary overhead without benefit.
+
+## Related Variables
+
+Other OneBranch signing-related variables:
+
+- `ob_sdl_binskim_enabled`: Controls BinSkim security analysis (can be false in build-only, true in signing stages)
+
+## Best Practices
+
+1. **Separate build and signing stages**: Build artifacts in one job, sign in another
+2. **Disable signing in build stages**: Improves performance and clarifies intent
+3. **Only use restore phase with signing**: The restore phase should only be used in jobs where signing is enabled (`ob_signing_setup_enabled: true`)
+4. **Restore phase before first signing step**: All steps before the first signing operation should use `ob_restore_phase: true`
+5. **Always validate after signing**: Enable validation in signing stages to catch issues
+6. **Document the reason**: Add comments explaining why signing is disabled or why restore phase is used
+
+## Example: Split Build and Sign Pipeline
+
+```yaml
+stages:
+  - stage: Build
+    jobs:
+    - job: build_windows
+      variables:
+        - name: ob_signing_setup_enabled
+          value: false  # Build-only, no signing
+        - name: ob_sdl_codeSignValidation_enabled
+          value: false  # Artifacts are unsigned
+      steps:
+        - template: templates/build-unsigned.yml
+
+  - stage: Sign
+    dependsOn: Build
+    jobs:
+    - job: sign_windows
+      variables:
+        - name: ob_signing_setup_enabled
+          value: true   # Enable signing infrastructure
+        - name: ob_sdl_codeSignValidation_enabled
+          value: true   # Validate signatures
+      steps:
+        - template: templates/sign-artifacts.yml
+```
+
+## Troubleshooting
+
+**Job fails with signing-related errors but signing is disabled:**
+- Verify `ob_signing_setup_enabled: false` is set in variables
+- Check that no template is overriding the setting
+- Ensure `ob_sdl_codeSignValidation_enabled: false` is also set
+
+**Signed artifacts fail validation:**
+- Confirm `ob_sdl_codeSignValidation_enabled: true` in signing job
+- Verify signing actually occurred
+- Check certificate configuration
+
+## Reference
+
+- PowerShell signing templates: `.pipelines/templates/packaging/windows/sign.yml`
diff --git a/.github/instructions/pester-set-itresult-pattern.instructions.md b/.github/instructions/pester-set-itresult-pattern.instructions.md
new file mode 100644
index 00000000000..33a73ca081d
--- /dev/null
+++ b/.github/instructions/pester-set-itresult-pattern.instructions.md
@@ -0,0 +1,198 @@
+---
+applyTo:
+  - "**/*.Tests.ps1"
+---
+
+# Pester Set-ItResult Pattern for Pending and Skipped Tests
+
+## Purpose
+
+This instruction explains when and how to use `Set-ItResult` in Pester tests to mark tests as Pending or Skipped dynamically within test execution.
+
+## When to Use Set-ItResult
+
+Use `Set-ItResult` when you need to conditionally mark a test as Pending or Skipped based on runtime conditions that can't be determined at test definition time.
+
+### Pending vs Skipped
+
+**Pending**: Use for tests that should be enabled but temporarily can't run due to:
+- Intermittent external service failures (network, APIs)
+- Known bugs being fixed
+- Missing features being implemented
+- Environmental issues that are being resolved
+
+**Skipped**: Use for tests that aren't applicable to the current environment:
+- Platform-specific tests running on wrong platform
+- Tests requiring specific hardware/configuration not present
+- Tests requiring elevated permissions when not available
+- Feature-specific tests when feature is disabled
+
+## Pattern
+
+### Basic Usage
+
+```powershell
+It "Test description" {
+    if ($shouldBePending) {
+        Set-ItResult -Pending -Because "Explanation of why test is pending"
+        return
+    }
+    
+    if ($shouldBeSkipped) {
+        Set-ItResult -Skipped -Because "Explanation of why test is skipped"
+        return
+    }
+    
+    # Test code here
+}
+```
+
+### Important: Always Return After Set-ItResult
+
+After calling `Set-ItResult`, you **must** return from the test to prevent further execution:
+
+```powershell
+It "Test that checks environment" {
+    if ($env:SKIP_TESTS -eq 'true') {
+        Set-ItResult -Skipped -Because "SKIP_TESTS environment variable is set"
+        return  # This is required!
+    }
+    
+    # Test assertions
+    $result | Should -Be $expected
+}
+```
+
+**Why?** Without `return`, the test continues executing and may fail with errors unrelated to the pending/skipped condition.
+
+## Examples from the Codebase
+
+### Example 1: Pending for Intermittent Network Issues
+
+```powershell
+It "Validate Update-Help for module" {
+    if ($markAsPending) {
+        Set-ItResult -Pending -Because "Update-Help from the web has intermittent connectivity issues. See issues #2807 and #6541."
+        return
+    }
+    
+    Update-Help -Module $moduleName -Force
+    # validation code...
+}
+```
+
+### Example 2: Skipped for Missing Environment
+
+```powershell
+It "Test requires CI environment" {
+    if (-not $env:CI) {
+        Set-ItResult -Skipped -Because "Test requires CI environment to safely install Pester"
+        return
+    }
+    
+    Install-CIPester -ErrorAction Stop
+}
+```
+
+### Example 3: Pending for Platform-Specific Issue
+
+```powershell
+It "Clear-Host works correctly" {
+    if ($IsARM64) {
+        Set-ItResult -Pending -Because "ARM64 runs in non-interactively mode and Clear-Host does not work."
+        return
+    }
+    
+    & { Clear-Host; 'hi' } | Should -BeExactly 'hi'
+}
+```
+
+### Example 4: Skipped for Missing Feature
+
+```powershell
+It "Test ACR authentication" {
+    if ($env:ACRTESTS -ne 'true') {
+        Set-ItResult -Skipped -Because "The tests require the ACRTESTS environment variable to be set to 'true' for ACR authentication."
+        return
+    }
+    
+    $psgetModuleInfo = Find-PSResource -Name $ACRTestModule -Repository $ACRRepositoryName
+    # test assertions...
+}
+```
+
+## Alternative: Static -Skip and -Pending Parameters
+
+For conditions that can be determined at test definition time, use the static parameters instead:
+
+```powershell
+# Static skip - condition known at definition time
+It "Windows-only test" -Skip:(-not $IsWindows) {
+    # test code
+}
+
+# Static pending - always pending
+It "Test for feature being implemented" -Pending {
+    # test code that will fail until feature is done
+}
+```
+
+**Use Set-ItResult when**:
+- Condition depends on runtime state
+- Condition is determined inside a helper function
+- Need to check multiple conditions sequentially
+
+**Use static parameters when**:
+- Condition is known at test definition
+- Condition doesn't change during test run
+- Want Pester to show the condition in test discovery
+
+## Best Practices
+
+1. **Always include -Because parameter** with a clear explanation
+2. **Always return after Set-ItResult** to prevent further execution
+3. **Reference issues or documentation** when relevant (e.g., "See issue #1234")
+4. **Be specific in the reason** - explain what's wrong and what's needed
+5. **Use Pending sparingly** - it indicates a problem that should be fixed
+6. **Prefer Skipped over Pending** when test truly isn't applicable
+
+## Common Mistakes
+
+### ❌ Mistake 1: Forgetting to Return
+
+```powershell
+It "Test" {
+    if ($condition) {
+        Set-ItResult -Pending -Because "Reason"
+        # Missing return - test code will still execute!
+    }
+    $value | Should -Be $expected  # This runs and fails
+}
+```
+
+### ❌ Mistake 2: Vague Reason
+
+```powershell
+Set-ItResult -Pending -Because "Doesn't work"  # Too vague
+```
+
+### ✅ Correct:
+
+```powershell
+It "Test" {
+    if ($condition) {
+        Set-ItResult -Pending -Because "Update-Help has intermittent network timeouts. See issue #2807."
+        return
+    }
+    $value | Should -Be $expected
+}
+```
+
+## See Also
+
+- [Pester Documentation: Set-ItResult](https://pester.dev/docs/commands/Set-ItResult)
+- [Pester Documentation: It](https://pester.dev/docs/commands/It)
+- Examples in the codebase:
+  - `test/powershell/Host/ConsoleHost.Tests.ps1`
+  - `test/infrastructure/ciModule.Tests.ps1`
+  - `tools/packaging/releaseTests/sbom.tests.ps1`
diff --git a/.github/instructions/pester-test-status-and-working-meaning.instructions.md b/.github/instructions/pester-test-status-and-working-meaning.instructions.md
new file mode 100644
index 00000000000..d2b28a05f18
--- /dev/null
+++ b/.github/instructions/pester-test-status-and-working-meaning.instructions.md
@@ -0,0 +1,299 @@
+---
+applyTo: "**/*.Tests.ps1"
+---
+
+# Pester Test Status Meanings and Working Tests
+
+## Purpose
+
+This guide clarifies Pester test outcomes and what it means for a test to be "working" - which requires both **passing** AND **actually validating functionality**.
+
+## Test Statuses in Pester
+
+### Passed ✓
+**Status Code**: `Passed` 
+**Exit Result**: Test ran successfully, all assertions passed
+
+**What it means**:
+- Test executed without errors
+- All `Should` statements evaluated to true
+- Test setup and teardown completed without issues
+- Test is **validating** the intended functionality
+
+**What it does NOT mean**:
+- The feature is working (assertions could be wrong)
+- The test is meaningful (could be testing wrong thing)
+- The test exercises all code paths
+
+### Failed ✗
+**Status Code**: `Failed`
+**Exit Result**: Test ran but assertions failed
+
+**What it means**:
+- Test executed but an assertion returned false
+- Expected value did not match actual value
+- Test detected a problem with the functionality
+
+**Examples**:
+```
+Expected $true but got $false
+Expected 5 items but got 3
+Expected no error but got: Cannot find parameter
+```
+
+### Error ⚠
+**Status Code**: `Error`
+**Exit Result**: Test crashed with an exception
+
+**What it means**:
+- Test failed to complete
+- An exception was thrown during test execution
+- Could be in test setup, test body, or test cleanup
+- Often indicates environmental issue, not code functional issue
+
+**Examples**:
+```
+Cannot bind argument to parameter 'Path' because it is null
+File not found: C:\expected\config.json
+Access denied writing to registry
+```
+
+### Pending ⏳
+**Status Code**: `Pending`
+**Exit Result**: Test ran but never completed assertions
+
+**What it means**:
+- Test was explicitly marked as not ready to run
+- `Set-ItResult -Pending` was called
+- Used to indicate: known bugs, missing features, environmental issues
+
+**When to use Pending**:
+- Test for feature in development
+- Test disabled due to known bug (issue #1234)
+- Test disabled due to intermittent failures being fixed
+- Platform-specific issues being resolved
+
+**⚠️ WARNING**: Pending tests are NOT validating functionality. They hide problems.
+
+### Skipped ⊘
+**Status Code**: `Skipped`  
+**Exit Result**: Test did not run (detected at start)
+
+**What it means**:
+- Test was intentionally not executed
+- `-Skip` parameter or `It -Skip:$condition` was used
+- Environment doesn't support this test
+
+**When to use Skip**:
+- Test not applicable to current platform (Windows-only test on Linux)
+- Test requires feature that's not available (admin privileges)
+- Test requires specific configuration not present
+
+**Difference from Pending**:
+- **Skip**: "This test shouldn't run here" (known upfront)
+- **Pending**: "This test should eventually run but can't now"
+
+### Ignored ✛
+**Status Code**: `Ignored`
+**Exit Result**: Test marked as not applicable
+
+**What it means**:
+- Test has `[Ignore("reason")]` attribute
+- Test is permanently disabled in this location
+- Not the same as Skipped (which is conditional)
+
+**When to use Ignore**:
+- Test for deprecated feature
+- Test for bug that won't be fixed
+- Test moved to different test file
+
+---
+
+## What Does "Working" Actually Mean?
+
+A test is **working** when it meets BOTH criteria:
+
+### 1. **Test Status is PASSED** ✓
+```powershell
+It "Test name" {
+    # Test executes
+    # All assertions pass
+    # Returns Passed status
+}
+```
+
+### 2. **Test Actually Validates Functionality**
+```powershell
+# ✓ GOOD: Tests actual functionality
+It "Get-Item returns files from directory" -Tags @('Unit') {
+    $testDir = New-Item -ItemType Directory -Force
+    New-Item -Path $testDir -Name "file.txt" -ItemType File | Out-Null
+    
+    $result = Get-Item -Path "$testDir\file.txt"
+    
+    $result.Name | Should -Be "file.txt"
+    $result | Should -Exist
+    
+    Remove-Item $testDir -Recurse -Force
+}
+
+# ✗ BAD: Returns Passed but doesn't validate functionality
+It "Get-Item returns files from directory" -Tags @('Unit') {
+    $result = Get-Item -Path somepath  # May not exist, may not actually test
+    $result | Should -Not -BeNullOrEmpty  # Too vague
+}
+
+# ✗ BAD: Test marked Pending - validation is hidden
+It "Get-Item returns files from directory" -Tags @('Unit') {
+    Set-ItResult -Pending -Because "File system not working"
+    return
+    # No validation happens at all
+}
+```
+
+---
+
+## The Problem with Pending Tests
+
+### Why Pending Tests Hide Problems
+
+```powershell
+# BAD: Test marked Pending - looks like "working" status but validation is skipped
+It "Download help from web" {
+    Set-ItResult -Pending -Because "Web connectivity issues"
+    return
+    
+    # This code never runs:
+    Update-Help -Module PackageManagement -Force -ErrorAction Stop
+    Get-Help Get-Package | Should -Not -BeNullOrEmpty
+}
+```
+
+**Result**:
+- ✗ Feature is broken (Update-Help fails)
+- ✓ Test shows "Pending" (looks acceptable)
+- ✗ Problem is hidden and never fixed
+
+### The Right Approach
+
+**Option A: Fix the root cause**
+```powershell
+It "Download help from web" {
+    # Use local assets that are guaranteed to work
+    Update-Help -Module PackageManagement -SourcePath ./assets -Force -ErrorAction Stop
+    
+    Get-Help Get-Package | Should -Not -BeNullOrEmpty
+}
+```
+
+**Option B: Gracefully skip when unavailable**
+```powershell
+It "Download help from web" -Skip:$(-not $hasInternet) {
+    Update-Help -Module PackageManagement -Force -ErrorAction Stop
+    Get-Help Get-Package | Should -Not -BeNullOrEmpty
+}
+```
+
+**Option C: Add retry logic for intermittent issues**
+```powershell
+It "Download help from web" {
+    $maxRetries = 3
+    $attempt = 0
+    
+    while ($attempt -lt $maxRetries) {
+        try {
+            Update-Help -Module PackageManagement -Force -ErrorAction Stop
+            break
+        }
+        catch {
+            $attempt++
+            if ($attempt -ge $maxRetries) { throw }
+            Start-Sleep -Seconds 2
+        }
+    }
+    
+    Get-Help Get-Package | Should -Not -BeNullOrEmpty
+}
+```
+
+---
+
+## Test Status Summary Table
+
+| Status | Passed? | Validates? | Counts as "Working"? | Use When |
+|--------|---------|------------|----------------------|----------|
+| **Passed** | ✓ | ✓ | **YES** | Feature is working and test proves it |
+| **Failed** | ✗ | ✓ | NO | Feature is broken or test has wrong expectation |
+| **Error** | ✗ | ✗ | NO | Test infrastructure broken, can't validate |
+| **Pending** | - | ✗ | **NO** ⚠️ | Temporary - test should eventually pass |
+| **Skipped** | - | ✗ | NO | Test not applicable to this environment |
+| **Ignored** | - | ✗ | NO | Test permanently disabled |
+
+---
+
+## Recommended Patterns
+
+### Pattern 1: Resilient Test with Fallback
+```powershell
+It "Feature works with web or local source" {
+    $useLocal = $false
+    
+    try {
+        Update-Help -Module Package -Force -ErrorAction Stop
+    }
+    catch {
+        $useLocal = $true
+        Update-Help -Module Package -SourcePath ./assets -Force -ErrorAction Stop
+    }
+    
+    # Validate functionality regardless of source
+    Get-Help Get-Package | Should -Not -BeNullOrEmpty
+}
+```
+
+### Pattern 2: Conditional Skip with Clear Reason
+```powershell
+Describe "Update-Help from Web" -Skip $(-not (Test-InternetConnectivity)) {
+    It "Downloads help successfully" {
+        Update-Help -Module PackageManagement -Force -ErrorAction Stop
+        Get-Help Get-Package | Should -Not -BeNullOrEmpty
+    }
+}
+```
+
+### Pattern 3: Separate Suites by Dependency
+```powershell
+Describe "Help Content Tests - Web" {
+    # Tests that require internet - can be skipped if unavailable
+    It "Downloads from web" { ... }
+}
+
+Describe "Help Content Tests - Local" {
+    # Tests with local assets - should always pass
+    It "Loads from local assets" {
+        Update-Help -Module Package -SourcePath ./assets -Force
+        Get-Help Get-Package | Should -Not -BeNullOrEmpty
+    }
+}
+```
+
+---
+
+## Checklist: Is Your Test "Working"?
+
+- [ ] Test status is **Passed** (not Pending, not Skipped, not Failed)
+- [ ] Test actually **executes** the feature being tested
+- [ ] Test has **specific assertions** (not just `Should -Not -BeNullOrEmpty`)
+- [ ] Test includes **cleanup** (removes temp files, restores state)
+- [ ] Test can run **multiple times** without side effects
+- [ ] Test failure **indicates a real problem** (not flaky assertions)
+- [ ] Test success **proves the feature works** (not just "didn't crash")
+
+If any of these is false, your test may be passing but not "working" properly.
+
+---
+
+## See Also
+
+- [Pester Documentation](https://pester.dev/)
+- [Set-ItResult Documentation](https://pester.dev/docs/commands/Set-ItResult)
diff --git a/.github/instructions/powershell-automatic-variables.instructions.md b/.github/instructions/powershell-automatic-variables.instructions.md
new file mode 100644
index 00000000000..5015847f41f
--- /dev/null
+++ b/.github/instructions/powershell-automatic-variables.instructions.md
@@ -0,0 +1,159 @@
+---
+applyTo:
+  - "**/*.ps1"
+  - "**/*.psm1"
+---
+
+# PowerShell Automatic Variables - Naming Guidelines
+
+## Purpose
+
+This instruction provides guidelines for avoiding conflicts with PowerShell's automatic variables when writing PowerShell scripts and modules.
+
+## What Are Automatic Variables?
+
+PowerShell has built-in automatic variables that are created and maintained by PowerShell itself. Assigning values to these variables can cause unexpected behavior and side effects.
+
+## Common Automatic Variables to Avoid
+
+### Critical Variables (Never Use)
+
+- **`$matches`** - Contains the results of regular expression matches. Overwriting this can break regex operations.
+- **`$_`** - Represents the current object in the pipeline. Only use within pipeline blocks.
+- **`$PSItem`** - Alias for `$_`. Same rules apply.
+- **`$args`** - Contains an array of undeclared parameters. Don't use as a regular variable.
+- **`$input`** - Contains an enumerator of all input passed to a function. Don't reassign.
+- **`$LastExitCode`** - Exit code of the last native command. Don't overwrite unless intentional.
+- **`$?`** - Success status of the last command. Don't use as a variable name.
+- **`$$`** - Last token in the last line received by the session. Don't use.
+- **`$^`** - First token in the last line received by the session. Don't use.
+
+### Context Variables (Use with Caution)
+
+- **`$Error`** - Array of error objects. Don't replace, but can modify (e.g., `$Error.Clear()`).
+- **`$PSBoundParameters`** - Parameters passed to the current function. Read-only.
+- **`$MyInvocation`** - Information about the current command. Read-only.
+- **`$PSCmdlet`** - Cmdlet object for advanced functions. Read-only.
+
+### Other Common Automatic Variables
+
+- `$true`, `$false`, `$null` - Boolean and null constants
+- `$HOME`, `$PSHome`, `$PWD` - Path-related variables
+- `$PID` - Process ID of the current PowerShell session
+- `$Host` - Host application object
+- `$PSVersionTable` - PowerShell version information
+
+For a complete list, see: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables
+
+## Best Practices
+
+### ❌ Bad - Using Automatic Variable Names
+
+```powershell
+# Bad: $matches is an automatic variable used for regex capture groups
+$matches = Select-String -Path $file -Pattern $pattern
+
+# Bad: $args is an automatic variable for undeclared parameters
+$args = Get-ChildItem
+
+# Bad: $input is an automatic variable for pipeline input
+$input = Read-Host "Enter value"
+```
+
+### ✅ Good - Using Descriptive Alternative Names
+
+```powershell
+# Good: Use descriptive names that avoid conflicts
+$matchedLines = Select-String -Path $file -Pattern $pattern
+
+# Good: Use specific names for arguments
+$arguments = Get-ChildItem
+
+# Good: Use specific names for user input
+$userInput = Read-Host "Enter value"
+```
+
+## Naming Alternatives
+
+When you encounter a situation where you might use an automatic variable name, use these alternatives:
+
+| Avoid | Use Instead |
+|-------|-------------|
+| `$matches` | `$matchedLines`, `$matchResults`, `$regexMatches` |
+| `$args` | `$arguments`, `$parameters`, `$commandArgs` |
+| `$input` | `$userInput`, `$inputValue`, `$inputData` |
+| `$_` (outside pipeline) | Use a named parameter or explicit variable |
+| `$Error` (reassignment) | Don't reassign; use `$Error.Clear()` if needed |
+
+## How to Check
+
+### PSScriptAnalyzer Rule
+
+PSScriptAnalyzer has a built-in rule that detects assignments to automatic variables:
+
+```powershell
+# This will trigger PSAvoidAssignmentToAutomaticVariable
+$matches = Get-Something
+```
+
+**Rule ID**: PSAvoidAssignmentToAutomaticVariable
+
+### Manual Review
+
+When writing PowerShell code, always:
+1. Avoid variable names that match PowerShell keywords or automatic variables
+2. Use descriptive, specific names that clearly indicate the variable's purpose
+3. Run PSScriptAnalyzer on your code before committing
+4. Review code for variable naming during PR reviews
+
+## Examples from the Codebase
+
+### Example 1: Regex Matching
+
+```powershell
+# ❌ Bad - Overwrites automatic $matches variable
+$matches = [regex]::Matches($content, $pattern)
+
+# ✅ Good - Uses descriptive name
+$regexMatches = [regex]::Matches($content, $pattern)
+```
+
+### Example 2: Select-String Results
+
+```powershell
+# ❌ Bad - Conflicts with automatic $matches
+$matches = Select-String -Path $file -Pattern $pattern
+
+# ✅ Good - Clear and specific
+$matchedLines = Select-String -Path $file -Pattern $pattern
+```
+
+### Example 3: Collecting Arguments
+
+```powershell
+# ❌ Bad - Conflicts with automatic $args
+function Process-Items {
+    $args = $MyItems
+    # ... process items
+}
+
+# ✅ Good - Descriptive parameter name
+function Process-Items {
+    [CmdletBinding()]
+    param(
+        [Parameter(ValueFromRemainingArguments)]
+        [string[]]$Items
+    )
+    # ... process items
+}
+```
+
+## References
+
+- [PowerShell Automatic Variables Documentation](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables)
+- [PSScriptAnalyzer Rules](https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/README.md)
+- [PowerShell Best Practices](https://learn.microsoft.com/powershell/scripting/developer/cmdlet/strongly-encouraged-development-guidelines)
+
+## Summary
+
+**Key Takeaway**: Always use descriptive, specific variable names that clearly indicate their purpose and avoid conflicts with PowerShell's automatic variables. When in doubt, choose a longer, more descriptive name over a short one that might conflict.
diff --git a/.github/instructions/powershell-module-organization.instructions.md b/.github/instructions/powershell-module-organization.instructions.md
new file mode 100644
index 00000000000..9cdba06c364
--- /dev/null
+++ b/.github/instructions/powershell-module-organization.instructions.md
@@ -0,0 +1,201 @@
+---
+applyTo:
+  - "tools/ci.psm1"
+  - "build.psm1"
+  - "tools/packaging/**/*.psm1"
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+---
+
+# Guidelines for PowerShell Code Organization
+
+## When to Move Code from YAML to PowerShell Modules
+
+PowerShell code in GitHub Actions YAML files should be kept minimal. Move code to a module when:
+
+### Size Threshold
+- **More than ~30 lines** of PowerShell in a YAML file step
+- **Any use of .NET types** like `[regex]`, `[System.IO.Path]`, etc.
+- **Complex logic** requiring multiple nested loops or conditionals
+- **Reusable functionality** that might be needed elsewhere
+
+### Indicators to Move Code
+1. Using .NET type accelerators (`[regex]`, `[PSCustomObject]`, etc.)
+2. Complex string manipulation or parsing
+3. File system operations beyond basic reads/writes
+4. Logic that would benefit from unit testing
+5. Code that's difficult to read/maintain in YAML format
+
+## Which Module to Use
+
+### ci.psm1 (`tools/ci.psm1`)
+**Purpose**: CI/CD-specific operations and workflows
+
+**Use for**:
+- Build orchestration (invoking builds, tests, packaging)
+- CI environment setup and configuration
+- Test execution and result processing
+- Artifact handling and publishing
+- CI-specific validations and checks
+- Environment variable management for CI
+
+**Examples**:
+- `Invoke-CIBuild` - Orchestrates build process
+- `Invoke-CITest` - Runs Pester tests
+- `Test-MergeConflictMarker` - Validates files for conflicts
+- `Set-BuildVariable` - Manages CI variables
+
+**When NOT to use**:
+- Core build operations (use build.psm1)
+- Package creation logic (use packaging.psm1)
+- Platform-specific build steps
+
+### build.psm1 (`build.psm1`)
+**Purpose**: Core build operations and utilities
+
+**Use for**:
+- Compiling source code
+- Resource generation
+- Build configuration management
+- Core build utilities (New-PSOptions, Get-PSOutput, etc.)
+- Bootstrap operations
+- Cross-platform build helpers
+
+**Examples**:
+- `Start-PSBuild` - Main build function
+- `Start-PSBootstrap` - Bootstrap dependencies
+- `New-PSOptions` - Create build configuration
+- `Start-ResGen` - Generate resources
+
+**When NOT to use**:
+- CI workflow orchestration (use ci.psm1)
+- Package creation (use packaging.psm1)
+- Test execution
+
+### packaging.psm1 (`tools/packaging/packaging.psm1`)
+**Purpose**: Package creation and distribution
+
+**Use for**:
+- Creating distribution packages (MSI, RPM, DEB, etc.)
+- Package-specific metadata generation
+- Package signing operations
+- Platform-specific packaging logic
+
+**Examples**:
+- `Start-PSPackage` - Create packages
+- `New-MSIXPackage` - Create Windows MSIX
+- `New-DotnetSdkContainerFxdPackage` - Create container packages
+
+**When NOT to use**:
+- Building binaries (use build.psm1)
+- Running tests (use ci.psm1)
+- General utilities
+
+## Best Practices
+
+### Keep YAML Minimal
+```yaml
+# ❌ Bad - too much logic in YAML
+- name: Check files
+  shell: pwsh
+  run: |
+    $files = Get-ChildItem -Recurse
+    foreach ($file in $files) {
+      $content = Get-Content $file -Raw
+      if ($content -match $pattern) {
+        # ... complex processing ...
+      }
+    }
+
+# ✅ Good - call function from module
+- name: Check files
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Test-SomeCondition -Path ${{ github.workspace }}
+```
+
+### Document Functions
+Always include comment-based help for functions:
+```powershell
+function Test-MyFunction
+{
+    <#
+    .SYNOPSIS
+        Brief description
+    .DESCRIPTION
+        Detailed description
+    .PARAMETER ParameterName
+        Parameter description
+    .EXAMPLE
+        Test-MyFunction -ParameterName Value
+    #>
+    [CmdletBinding()]
+    param(
+        [Parameter(Mandatory)]
+        [string] $ParameterName
+    )
+    # Implementation
+}
+```
+
+### Error Handling
+Use proper error handling in modules:
+```powershell
+try {
+    # Operation
+}
+catch {
+    Write-Error "Detailed error message: $_"
+    throw
+}
+```
+
+### Verbose Output
+Use `Write-Verbose` for debugging information:
+```powershell
+Write-Verbose "Processing file: $filePath"
+```
+
+## Module Dependencies
+
+- **ci.psm1** imports both `build.psm1` and `packaging.psm1`
+- **build.psm1** is standalone (minimal dependencies)
+- **packaging.psm1** imports `build.psm1`
+
+When adding new functions, consider these import relationships to avoid circular dependencies.
+
+## Testing Modules
+
+Functions in modules should be testable:
+```powershell
+# Test locally
+Import-Module ./tools/ci.psm1 -Force
+Test-MyFunction -Parameter Value
+
+# Can be unit tested with Pester
+Describe "Test-MyFunction" {
+    It "Should return expected result" {
+        # Test implementation
+    }
+}
+```
+
+## Migration Checklist
+
+When moving code from YAML to a module:
+
+1. ✅ Determine which module is appropriate (ci, build, or packaging)
+2. ✅ Create function with proper parameter validation
+3. ✅ Add comment-based help documentation
+4. ✅ Use `[CmdletBinding()]` for advanced function features
+5. ✅ Include error handling
+6. ✅ Add verbose output for debugging
+7. ✅ Test the function independently
+8. ✅ Update YAML to call the new function
+9. ✅ Verify the workflow still works end-to-end
+
+## References
+
+- PowerShell Advanced Functions: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced
+- Comment-Based Help: https://learn.microsoft.com/powershell/scripting/developer/help/writing-help-for-windows-powershell-scripts-and-functions
diff --git a/.github/instructions/powershell-parameter-naming.instructions.md b/.github/instructions/powershell-parameter-naming.instructions.md
new file mode 100644
index 00000000000..155fd1a85c3
--- /dev/null
+++ b/.github/instructions/powershell-parameter-naming.instructions.md
@@ -0,0 +1,69 @@
+---
+applyTo: '**/*.ps1, **/*.psm1'
+description: Naming conventions for PowerShell parameters
+---
+
+# PowerShell Parameter Naming Conventions
+
+## Purpose
+
+This instruction defines the naming conventions for parameters in PowerShell scripts and modules. Consistent parameter naming improves code readability, maintainability, and usability for users of PowerShell cmdlets and functions.
+
+## Parameter Naming Rules
+
+### General Conventions
+- **Singular Nouns**: Use singular nouns for parameter names even if the parameter is expected to handle multiple values (e.g., `File` instead of `Files`).
+- **Use PascalCase**: Parameter names must use PascalCase (e.g., `ParameterName`).
+- **Descriptive Names**: Parameter names should be descriptive and convey their purpose clearly (e.g., `FilePath`, `UserName`).
+- **Avoid Abbreviations**: Avoid using abbreviations unless they are widely recognized (e.g., `ID` for Identifier).
+- **Avoid Reserved Words**: Do not use PowerShell reserved words as parameter names (e.g., `if`, `else`, `function`).
+
+### Units and Precision
+- **Include Units in Parameter Names**: When a parameter represents a value with units, include the unit in the parameter name for clarity:
+  - `TimeoutSec` instead of `Timeout`
+  - `RetryIntervalSec` instead of `RetryInterval`
+  - `MaxSizeBytes` instead of `MaxSize`
+- **Use Full Words for Clarity**: Spell out common terms to match PowerShell conventions:
+  - `MaximumRetryCount` instead of `MaxRetries`
+  - `MinimumLength` instead of `MinLength`
+
+### Alignment with Built-in Cmdlets
+- **Follow Existing PowerShell Conventions**: When your parameter serves a similar purpose to a built-in cmdlet parameter, use the same or similar naming:
+  - Match `Invoke-WebRequest` parameters when making HTTP requests: `TimeoutSec`, `MaximumRetryCount`, `RetryIntervalSec`
+  - Follow common parameter patterns like `Path`, `Force`, `Recurse`, `WhatIf`, `Confirm`
+- **Consistency Within Scripts**: If multiple parameters relate to the same concept, use consistent naming patterns (e.g., `TimeoutSec`, `RetryIntervalSec` both use `Sec` suffix).
+
+## Examples
+
+### Good Parameter Names
+```powershell
+param(
+    [string[]]$File,                    # Singular, even though it accepts arrays
+    [int]$TimeoutSec = 30,              # Unit included
+    [int]$MaximumRetryCount = 2,        # Full word "Maximum"
+    [int]$RetryIntervalSec = 2,         # Consistent with TimeoutSec
+    [string]$Path,                      # Standard PowerShell convention
+    [switch]$Force                      # Common PowerShell parameter
+)
+```
+
+### Names to Avoid
+```powershell
+param(
+    [string[]]$Files,                   # Should be singular: File
+    [int]$Timeout = 30,                 # Missing unit: TimeoutSec
+    [int]$MaxRetries = 2,               # Should be: MaximumRetryCount
+    [int]$RetryInterval = 2,            # Missing unit: RetryIntervalSec
+    [string]$FileLoc,                   # Avoid abbreviations: FilePath
+    [int]$Max                           # Ambiguous: MaximumWhat?
+)
+```
+
+## Exceptions
+- **Common Terms**: Some common terms may be used in plural form if they are widely accepted in the context (e.g., `Credentials`, `Permissions`).
+- **Legacy Code**: Existing code that does not follow these conventions may be exempted to avoid breaking changes, but new code should adhere to these guidelines.
+- **Well Established Naming Patterns**: If a naming pattern is well established in the PowerShell community, it may be used even if it does not strictly adhere to these guidelines.
+
+## References
+- [PowerShell Cmdlet Design Guidelines](https://learn.microsoft.com/powershell/scripting/developer/cmdlet/strongly-encouraged-development-guidelines)
+- [About Parameters - PowerShell Documentation](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_parameters)
diff --git a/.github/instructions/publishing-pester-result.instructions.md b/.github/instructions/publishing-pester-result.instructions.md
new file mode 100644
index 00000000000..49010e65a99
--- /dev/null
+++ b/.github/instructions/publishing-pester-result.instructions.md
@@ -0,0 +1,272 @@
+---
+applyTo: ".github/**/*.{yml,yaml}"
+---
+
+# Publishing Pester Test Results Instructions
+
+This document describes how the PowerShell repository uses GitHub Actions to publish Pester test results.
+
+## Overview
+
+The PowerShell repository uses a custom composite GitHub Action located at `.github/actions/test/process-pester-results` to process and publish Pester test results in CI/CD workflows.
+This action aggregates test results from NUnitXml formatted files, creates a summary in the GitHub Actions job summary, and uploads the results as artifacts.
+
+## How It Works
+
+### Action Location and Structure
+
+**Path**: `.github/actions/test/process-pester-results/`
+
+The action consists of two main files:
+
+1. **action.yml** - The composite action definition
+1. **process-pester-results.ps1** - PowerShell script that processes test results
+
+### Action Inputs
+
+The action accepts the following inputs:
+
+- **name** (required): A descriptive name for the test run (e.g., "UnelevatedPesterTests-CI")
+    - Used for naming the uploaded artifact and in the summary
+    - Format: `junit-pester-{name}`
+
+- **testResultsFolder** (optional): Path to the folder containing test result XML files
+    - Default: `${{ runner.workspace }}/testResults`
+    - The script searches for all `*.xml` files in this folder recursively
+
+### Action Workflow
+
+The action performs the following steps:
+
+1. **Process Test Results**
+    - Runs `process-pester-results.ps1` with the provided name and test results folder
+    - Parses all NUnitXml formatted test result files (`*.xml`)
+    - Aggregates test statistics across all files:
+        - Total test cases
+        - Errors
+        - Failures
+        - Not run tests
+        - Inconclusive tests
+        - Ignored tests
+        - Skipped tests
+        - Invalid tests
+
+1. **Generate Summary**
+    - Creates a markdown summary using the `$GITHUB_STEP_SUMMARY` environment variable
+    - Uses `Write-Log` and `Write-LogGroupStart`/`Write-LogGroupEnd` functions from `build.psm1`
+    - Outputs a formatted summary with all test statistics
+    - Example format:
+
+    ```markdown
+    # Summary of {Name}
+
+    - Total Tests: X
+    - Total Errors: X
+    - Total Failures: X
+    - Total Not Run: X
+    - Total Inconclusive: X
+    - Total Ignored: X
+    - Total Skipped: X
+    - Total Invalid: X
+    ```
+
+1. **Upload Artifacts**
+    - Uses `actions/upload-artifact@v4` to upload test results
+    - Artifact name: `junit-pester-{name}`
+    - Always runs (even if previous steps fail) via `if: always()`
+    - Uploads the entire test results folder
+
+1. **Exit Status**
+    - Fails the job (exit 1) if:
+        - Any test errors occurred (`$testErrorCount -gt 0`)
+        - Any test failures occurred (`$testFailureCount -gt 0`)
+        - No test cases were run (`$testCaseCount -eq 0`)
+
+## Usage in Test Actions
+
+The `process-pester-results` action is called by two platform-specific composite test actions:
+
+### Linux/macOS Tests: `.github/actions/test/nix`
+
+Used in:
+
+- `.github/workflows/linux-ci.yml`
+- `.github/workflows/macos-ci.yml`
+
+Example usage (lines 99-104 in `nix/action.yml`):
+
+```yaml
+- name: Convert, Publish, and Upload Pester Test Results
+  uses: "./.github/actions/test/process-pester-results"
+  with:
+    name: "${{ inputs.purpose }}-${{ inputs.tagSet }}"
+    testResultsFolder: "${{ runner.workspace }}/testResults"
+```
+
+### Windows Tests: `.github/actions/test/windows`
+
+Used in:
+
+- `.github/workflows/windows-ci.yml`
+
+Example usage (line 78-83 in `windows/action.yml`):
+
+```yaml
+- name: Convert, Publish, and Upload Pester Test Results
+  uses: "./.github/actions/test/process-pester-results"
+  with:
+    name: "${{ inputs.purpose }}-${{ inputs.tagSet }}"
+    testResultsFolder: ${{ runner.workspace }}\testResults
+```
+
+## Workflow Integration
+
+The process-pester-results action is integrated into the CI workflows through a multi-level hierarchy:
+
+### Level 1: Main CI Workflows
+
+- `linux-ci.yml`
+- `macos-ci.yml`
+- `windows-ci.yml`
+
+### Level 2: Test Jobs
+
+Each workflow contains multiple test jobs with different purposes and tag sets:
+
+- `UnelevatedPesterTests` with tagSet `CI`
+- `ElevatedPesterTests` with tagSet `CI`
+- `UnelevatedPesterTests` with tagSet `Others`
+- `ElevatedPesterTests` with tagSet `Others`
+
+### Level 3: Platform Test Actions
+
+Test jobs use platform-specific actions:
+
+- `nix` for Linux and macOS
+- `windows` for Windows
+
+### Level 4: Process Results Action
+
+Platform actions call `process-pester-results` to publish results
+
+## Test Execution Flow
+
+1. **Build Phase**: Source code is built (e.g., in `ci_build` job)
+1. **Test Preparation**:
+    - Build artifacts are downloaded
+    - PowerShell is bootstrapped
+    - Test binaries are extracted
+1. **Test Execution**:
+    - `Invoke-CITest` is called with:
+        - `-Purpose`: Test purpose (e.g., "UnelevatedPesterTests")
+        - `-TagSet`: Test category (e.g., "CI", "Others")
+        - `-OutputFormat NUnitXml`: Results format
+    - Results are written to `${{ runner.workspace }}/testResults`
+1. **Results Processing**:
+    - `process-pester-results` action runs
+    - Results are aggregated and summarized
+    - Artifacts are uploaded
+    - Job fails if any tests failed or errored
+
+## Key Dependencies
+
+### PowerShell Modules
+
+- **build.psm1**: Provides utility functions
+    - `Write-Log`: Logging function with GitHub Actions support
+    - `Write-LogGroupStart`: Creates collapsible log groups
+    - `Write-LogGroupEnd`: Closes collapsible log groups
+
+### GitHub Actions Features
+
+- **GITHUB_STEP_SUMMARY**: Environment variable for job summary
+- **actions/upload-artifact@v4**: For uploading test results
+- **Composite Actions**: For reusable workflow steps
+
+### Test Result Format
+
+- **NUnitXml**: XML format for test results
+- Expected XML structure with `test-results` root element containing:
+    - `total`: Total number of tests
+    - `errors`: Number of errors
+    - `failures`: Number of failures
+    - `not-run`: Number of tests not run
+    - `inconclusive`: Number of inconclusive tests
+    - `ignored`: Number of ignored tests
+    - `skipped`: Number of skipped tests
+    - `invalid`: Number of invalid tests
+
+## Best Practices
+
+1. **Naming Convention**: Use descriptive names that include both purpose and tagSet:
+    - Format: `{purpose}-{tagSet}`
+    - Example: `UnelevatedPesterTests-CI`
+
+1. **Test Results Location**:
+    - Default location: `${{ runner.workspace }}/testResults`
+    - Use platform-appropriate path separators (Windows: `\`, Unix: `/`)
+
+1. **Always Upload**: The artifact upload step uses `if: always()` to ensure results are uploaded even when tests fail
+
+1. **Error Handling**: The action will fail the job if:
+    - Tests have errors or failures (intentional fail-fast behavior)
+    - No tests were executed (potential configuration issue)
+    - `GITHUB_STEP_SUMMARY` is not set (environment issue)
+
+## Customizing for Your Repository
+
+To use this pattern in another repository:
+
+1. **Copy the Action Files**:
+    - Copy `.github/actions/test/process-pester-results/` directory
+    - Ensure the PowerShell script has proper permissions
+
+1. **Adjust Dependencies**:
+    - Modify or remove the `Import-Module "$PSScriptRoot/../../../../build.psm1"` line
+    - Implement equivalent `Write-Log` and `Write-LogGroup*` functions if needed
+
+1. **Customize Summary Format**:
+    - Modify the here-string in `process-pester-results.ps1` to change summary format
+    - Add additional metrics or formatting as needed
+
+1. **Call from Your Workflows**:
+
+    ```yaml
+    - name: Process Test Results
+      uses: "./.github/actions/test/process-pester-results"
+      with:
+        name: "my-test-run"
+        testResultsFolder: "path/to/results"
+    ```
+
+## Related Documentation
+
+- [GitHub Actions: Creating composite actions](https://docs.github.com/en/actions/creating-actions/creating-a-composite-action)
+- [GitHub Actions: Job summaries](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary)
+- [GitHub Actions: Uploading artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts)
+- [Pester: PowerShell testing framework](https://pester.dev/)
+- [NUnit XML Format](https://docs.nunit.org/articles/nunit/technical-notes/usage/Test-Result-XML-Format.html)
+
+## Troubleshooting
+
+### No Test Results Found
+
+- Verify `testResultsFolder` path is correct
+- Ensure tests are generating NUnitXml formatted output
+- Check that `*.xml` files exist in the specified folder
+
+### Action Fails with "GITHUB_STEP_SUMMARY is not set"
+
+- Ensure the action runs within a GitHub Actions environment
+- Cannot be run locally without mocking this environment variable
+
+### All Tests Pass but Job Fails
+
+- Check if any tests are marked as errors (different from failures)
+- Verify that at least some tests executed (`$testCaseCount -eq 0`)
+
+### Artifact Upload Fails
+
+- Check artifact name for invalid characters
+- Ensure the test results folder exists
+- Verify actions/upload-artifact version compatibility
diff --git a/.github/instructions/script-module-file-format.instructions.md b/.github/instructions/script-module-file-format.instructions.md
new file mode 100644
index 00000000000..922e0d4aa31
--- /dev/null
+++ b/.github/instructions/script-module-file-format.instructions.md
@@ -0,0 +1,27 @@
+---
+applyTo:
+  - "**/*.ps1"
+  - "**/*.psm1"
+---
+
+# Script and Module File Format
+
+These instructions define required file-level formatting for PowerShell scripts and module files in this repository.
+
+## Copyright Header
+
+If a change adds a new `.ps1` file or `.psm1` file or touches an existing one, the file should start with the copyright and license header and have an empty line after it, as shown in the example below:
+
+```powershell
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+```
+
+Do not place blank lines, comments, or code before this header.
+
+## Requirements
+
+- Add the copyright header when creating a new `.ps1` or `.psm1` file.
+- Preserve the header when editing an existing `.ps1` or `.psm1` file.
+- If an existing `.ps1` or `.psm1` file is missing the header, only modify that file to add the header if a change touches that file. Do not make a change to add the header if the file is not being modified.
diff --git a/.github/instructions/start-native-execution.instructions.md b/.github/instructions/start-native-execution.instructions.md
new file mode 100644
index 00000000000..347e496b3bf
--- /dev/null
+++ b/.github/instructions/start-native-execution.instructions.md
@@ -0,0 +1,149 @@
+---
+applyTo:
+  - "**/*.ps1"
+  - "**/*.psm1"
+---
+
+# Using Start-NativeExecution for Native Command Execution
+
+## Purpose
+
+`Start-NativeExecution` is the standard function for executing native commands (external executables) in PowerShell scripts within this repository. It provides consistent error handling and better diagnostics when native commands fail.
+
+## When to Use
+
+Use `Start-NativeExecution` whenever you need to:
+- Execute external commands (e.g., `git`, `dotnet`, `pkgbuild`, `productbuild`, `fpm`, `rpmbuild`)
+- Ensure proper exit code checking
+- Get better error messages with caller information
+- Handle verbose output on error
+
+## Basic Usage
+
+```powershell
+Start-NativeExecution {
+    git clone https://github.com/PowerShell/PowerShell.git
+}
+```
+
+## With Parameters
+
+Use backticks for line continuation within the script block:
+
+```powershell
+Start-NativeExecution {
+    pkgbuild --root $pkgRoot `
+        --identifier $pkgIdentifier `
+        --version $Version `
+        --scripts $scriptsDir `
+        $outputPath
+}
+```
+
+## Common Parameters
+
+### -VerboseOutputOnError
+
+Captures command output and displays it only if the command fails:
+
+```powershell
+Start-NativeExecution -VerboseOutputOnError {
+    dotnet build --configuration Release
+}
+```
+
+### -IgnoreExitcode
+
+Allows the command to fail without throwing an exception:
+
+```powershell
+Start-NativeExecution -IgnoreExitcode {
+    git diff --exit-code  # Returns 1 if differences exist
+}
+```
+
+## Availability
+
+The function is defined in `tools/buildCommon/startNativeExecution.ps1` and is available in:
+- `build.psm1` (dot-sourced automatically)
+- `tools/packaging/packaging.psm1` (dot-sourced automatically)
+- Test modules that include `HelpersCommon.psm1`
+
+To use in other scripts, dot-source the function:
+
+```powershell
+. "$PSScriptRoot/../buildCommon/startNativeExecution.ps1"
+```
+
+## Error Handling
+
+When a native command fails (non-zero exit code), `Start-NativeExecution`:
+1. Captures the exit code
+2. Identifies the calling location (file and line number)
+3. Throws a descriptive error with full context
+
+Example error message:
+```
+Execution of {git clone ...} by /path/to/script.ps1: line 42 failed with exit code 1
+```
+
+## Examples from the Codebase
+
+### Git Operations
+```powershell
+Start-NativeExecution {
+    git fetch --tags --quiet upstream
+}
+```
+
+### Build Operations
+```powershell
+Start-NativeExecution -VerboseOutputOnError {
+    dotnet publish --configuration Release
+}
+```
+
+### Packaging Operations
+```powershell
+Start-NativeExecution -VerboseOutputOnError {
+    pkgbuild --root $pkgRoot --identifier $pkgId --version $version $outputPath
+}
+```
+
+### Permission Changes
+```powershell
+Start-NativeExecution {
+    find $staging -type d | xargs chmod 755
+    find $staging -type f | xargs chmod 644
+}
+```
+
+## Anti-Patterns
+
+**Don't do this:**
+```powershell
+& somecommand $args
+if ($LASTEXITCODE -ne 0) {
+    throw "Command failed"
+}
+```
+
+**Do this instead:**
+```powershell
+Start-NativeExecution {
+    somecommand $args
+}
+```
+
+## Best Practices
+
+1. **Always use Start-NativeExecution** for native commands to ensure consistent error handling
+2. **Use -VerboseOutputOnError** for commands with useful diagnostic output
+3. **Use backticks for readability** when commands have multiple arguments
+4. **Don't capture output unnecessarily** - let the function handle it
+5. **Use -IgnoreExitcode sparingly** - only when non-zero exit codes are expected and acceptable
+
+## Related Documentation
+
+- Source: `tools/buildCommon/startNativeExecution.ps1`
+- Blog post: https://mnaoumov.wordpress.com/2015/01/11/execution-of-external-commands-in-powershell-done-right/
diff --git a/.github/instructions/start-psbuild-basics.instructions.md b/.github/instructions/start-psbuild-basics.instructions.md
new file mode 100644
index 00000000000..18a0026eb2d
--- /dev/null
+++ b/.github/instructions/start-psbuild-basics.instructions.md
@@ -0,0 +1,100 @@
+---
+applyTo:
+  - "build.psm1"
+  - "tools/ci.psm1"
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+---
+
+# Start-PSBuild Basics
+
+## Purpose
+
+`Start-PSBuild` builds PowerShell from source. It's defined in `build.psm1` and used in CI/CD workflows.
+
+## Default Usage
+
+For most scenarios, use with no parameters:
+
+```powershell
+Import-Module ./tools/ci.psm1
+Start-PSBuild
+```
+
+**Default behavior:**
+- Configuration: `Debug`
+- PSModuleRestore: Enabled
+- Runtime: Auto-detected for platform
+
+## Common Configurations
+
+### Debug Build (Default)
+
+```powershell
+Start-PSBuild
+```
+
+Use for:
+- Testing (xUnit, Pester)
+- Development
+- Debugging
+
+### Release Build
+
+```powershell
+Start-PSBuild -Configuration 'Release'
+```
+
+Use for:
+- Production packages
+- Distribution
+- Performance testing
+
+### Code Coverage Build
+
+```powershell
+Start-PSBuild -Configuration 'CodeCoverage'
+```
+
+Use for:
+- Code coverage analysis
+- Test coverage reports
+
+## Common Parameters
+
+### -Configuration
+
+Values: `Debug`, `Release`, `CodeCoverage`, `StaticAnalysis`
+
+Default: `Debug`
+
+### -CI
+
+Restores Pester module for CI environments.
+
+```powershell
+Start-PSBuild -CI
+```
+
+### -PSModuleRestore
+
+Now enabled by default. Use `-NoPSModuleRestore` to skip.
+
+### -ReleaseTag
+
+Specifies version tag for release builds:
+
+```powershell
+$releaseTag = Get-ReleaseTag
+Start-PSBuild -Configuration 'Release' -ReleaseTag $releaseTag
+```
+
+## Workflow Example
+
+```yaml
+- name: Build PowerShell
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Start-PSBuild
+```
diff --git a/.github/instructions/troubleshooting-builds.instructions.md b/.github/instructions/troubleshooting-builds.instructions.md
new file mode 100644
index 00000000000..e9b60cb8c80
--- /dev/null
+++ b/.github/instructions/troubleshooting-builds.instructions.md
@@ -0,0 +1,100 @@
+---
+applyTo:
+  - "build.psm1"
+  - "tools/ci.psm1"
+  - ".github/**/*.yml"
+  - ".github/**/*.yaml"
+---
+
+# Troubleshooting Build Issues
+
+## Git Describe Error
+
+**Error:**
+```
+error MSB3073: The command "git describe --abbrev=60 --long" exited with code 128.
+```
+
+**Cause:** Insufficient git history (shallow clone)
+
+**Solution:** Add `fetch-depth: 1000` to checkout step
+
+```yaml
+- name: Checkout
+  uses: actions/checkout@v4
+  with:
+    fetch-depth: 1000
+```
+
+## Version Information Incorrect
+
+**Symptom:** Build produces wrong version numbers
+
+**Cause:** Git tags not synchronized
+
+**Solution:** Run `Sync-PSTags -AddRemoteIfMissing`:
+
+```yaml
+- name: Bootstrap
+  shell: pwsh
+  run: |
+    Import-Module ./tools/ci.psm1
+    Invoke-CIInstall -SkipUser
+    Sync-PSTags -AddRemoteIfMissing
+```
+
+## PowerShell Binary Not Built
+
+**Error:**
+```
+Exception: CoreCLR pwsh.exe was not built
+```
+
+**Causes:**
+1. Build failed (check logs)
+2. Wrong configuration used
+3. Build output location incorrect
+
+**Solutions:**
+1. Check build logs for errors
+2. Verify correct configuration for use case
+3. Use default parameters: `Start-PSBuild`
+
+## Module Restore Issues
+
+**Symptom:** Slow build or module restore failures
+
+**Causes:**
+- Network issues
+- Module cache problems
+- Package source unavailable
+
+**Solutions:**
+1. Retry the build
+2. Check network connectivity
+3. Use `-NoPSModuleRestore` if modules not needed
+4. Clear package cache if persistent
+
+## .NET SDK Not Found
+
+**Symptom:** Build can't find .NET SDK
+
+**Solution:** Ensure .NET setup step runs first:
+
+```yaml
+- name: Setup .NET
+  uses: actions/setup-dotnet@v4
+  with:
+    global-json-file: ./global.json
+```
+
+## Bootstrap Failures
+
+**Symptom:** Invoke-CIInstall fails
+
+**Causes:**
+- Missing dependencies
+- Network issues
+- Platform-specific requirements not met
+
+**Solution:** Check prerequisites for your platform in build system docs
diff --git a/.github/policies/IssueManagement.CloseResolutions.yml b/.github/policies/IssueManagement.CloseResolutions.yml
new file mode 100644
index 00000000000..23ab9422e1a
--- /dev/null
+++ b/.github/policies/IssueManagement.CloseResolutions.yml
@@ -0,0 +1,137 @@
+id: CloseResolutionTags
+name: GitOps.PullRequestIssueManagement
+description: Closing issues with Resolution* 
+owner:
+resource: repository
+disabled: false
+where:
+configuration:
+  resourceManagementConfiguration:
+    scheduledSearches:
+    - description: Close if marked as Resolution-Declined after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-Declined
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as declined and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-By Design after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-By Design
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as by-design and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-Won't Fix after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-Won't Fix
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as won't fix and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-No Activity after seven day of no activity, no reply 
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isOpen
+      - isIssue
+      - hasLabel:
+          label: Resolution-No Activity
+      - noActivitySince:
+          days: 7
+      actions:
+      - closeIssue
+    
+    - description: Close if marked as Resolution-Duplicate after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 3
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-Duplicate
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as duplicate and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-External after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 3
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-External
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as external and has not had any activity for **1 day**. It has been be closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-Answered after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-Answered
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as answered and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Close if marked as Resolution-Fixed after one day of no activity
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isIssue
+      - isOpen
+      - hasLabel:
+          label: Resolution-Fixed
+      - noActivitySince:
+          days: 1
+      actions:
+      - addReply:
+          reply: This issue has been marked as fixed and has not had any activity for **1 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+onFailure:
+onSuccess:
diff --git a/.github/policies/IssueManagement.ResolveStale.yml b/.github/policies/IssueManagement.ResolveStale.yml
new file mode 100644
index 00000000000..fd254715ea9
--- /dev/null
+++ b/.github/policies/IssueManagement.ResolveStale.yml
@@ -0,0 +1,109 @@
+id: IssueManagement.ResolveStale
+name: GitOps.PullRequestIssueManagement
+description: Other issue management rules for closing stale and waiting on author requests
+owner:
+resource: repository
+disabled: false
+where:
+configuration:
+  resourceManagementConfiguration:
+    scheduledSearches:
+    - description: Close if marked as Waiting on Author and no activity in 7 days
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isOpen
+      - isIssue
+      - hasLabel:
+          label: Waiting on Author
+      - noActivitySince:
+          days: 7
+      actions:
+      - addReply:
+          reply: This issue has been marked as "Waiting on Author" and has not had any activity for **7 day**. It has been closed for housekeeping purposes.
+      - closeIssue
+    
+    - description: Label as Resolution-No Activity if not labeled with KeepOpen and no activity in 6 months
+      frequencies:
+      - hourly:
+          hour: 24
+      filters:
+      - isIssue
+      - isOpen
+      - isNotLabeledWith:
+          label: KeepOpen
+      - isNotLabeledWith:
+          label: In-PR
+      - isNotLabeledWith:
+          label: Needs-Triage
+      - isNotLabeledWith:
+          label: Resolution-No Activity
+      - isNotLabeledWith:
+          label: Issue-Meta
+      - isNotLabeledWith:
+          label: Review - Needed
+      - isNotLabeledWith:
+          label: Review - Committee
+      - isNotLabeledWith:
+          label: Review - Maintainer
+      - isNotLabeledWith:
+          label: WG-NeedsReview
+     # Up for grabs labeled issues will get closed after a 6 months of no activity unless KeepOpen label is included
+      - noActivitySince:
+          days: 180
+      actions:
+      - addLabel:
+          label: Resolution-No Activity
+      - addReply:
+          reply: "This issue has not had any activity in 6 months, if there is no further activity in 7 days, the issue will be closed automatically.\n\nActivity in this case refers only to comments on the issue. If the issue is closed and you are the author, you can re-open the issue using the button below. Please add more information to be considered during retriage. If you are not the author but the issue is impacting you after it has been closed, please submit a new issue with updated details and a link to this issue and the original."
+    eventResponderTasks:
+    - description: Remove no resolution label if anyone comments while in 7 day window
+      if:
+      - payloadType: Issue_Comment
+      - hasLabel:
+          label: Resolution-No Activity
+      - isOpen
+      then:
+      - removeLabel:
+          label: Resolution-No Activity
+    
+    - description: If new issue comment is author then remove waiting on author
+      if:
+      - payloadType: Issue_Comment
+      - isActivitySender:
+          issueAuthor: True
+      - hasLabel:
+          label: Waiting on Author
+      then:
+      - removeLabel:
+          label: Waiting on Author
+    
+    - description: Remove Stale label if issue comment 
+      if:
+      - payloadType: Issue_Comment
+      - hasLabel:
+          label: Stale
+      then:
+      - removeLabel:
+          label: Stale
+    
+    - description: Remove Needs-Triage label if issue is closed
+      if:
+      - payloadType: Issues
+      - isAction:
+          action: Closed
+      then:
+      - removeLabel:
+          label: Needs-Triage
+    
+    - description: Remove Keep Open label if closed by someone 
+      if:
+      - payloadType: Issues
+      - isAction:
+          action: Closed
+      then:
+      - removeLabel:
+          label: KeepOpen
+onFailure:
+onSuccess:
diff --git a/.github/policies/PRManagement.yml b/.github/policies/PRManagement.yml
new file mode 100644
index 00000000000..9deaf0262bb
--- /dev/null
+++ b/.github/policies/PRManagement.yml
@@ -0,0 +1,226 @@
+id: PRManagement
+name: GitOps.PullRequestIssueManagement
+description: Collection of PR bot triaging behaviors
+owner:
+resource: repository
+disabled: false
+where:
+configuration:
+  resourceManagementConfiguration:
+    scheduledSearches:
+    - description: If Stale label and waiting on author and no activity since 10 days then close the PR
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isPullRequest
+      - isOpen
+      - hasLabel:
+          label: Waiting on Author
+      - hasLabel:
+          label: Stale
+      - noActivitySince:
+          days: 10
+      actions:
+      - closeIssue
+
+    - description: If PR has Waiting on Author label and no activity in 15 days label as stale.
+      frequencies:
+      - hourly:
+          hour: 3
+      filters:
+      - isPullRequest
+      - isOpen
+      - hasLabel:
+          label: Waiting on Author
+      - noActivitySince:
+          days: 15
+      - isNotLabeledWith:
+          label: Stale
+      actions:
+      - addLabel:
+          label: Stale
+      - addReply:
+          reply: This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **15 days**. It will be closed if no further activity occurs **within 10 days of this comment**.
+    
+    - description: Label Review - Needed if PR is opened an no activity in 7 days but no other labels on it
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isPullRequest
+      - isOpen
+      - isNotLabeledWith:
+          label: Waiting on Author
+      - noActivitySince:
+          days: 7
+      - isNotLabeledWith:
+          label: Stale
+      - isNotLabeledWith:
+          label: Review - Needed
+      - isNotLabeledWith:
+          label: Review - Committee
+      - isNotDraftPullRequest
+      actions:
+      - addLabel:
+          label: Review - Needed
+      - addReply:
+          reply: >-
+            This pull request has been automatically marked as Review Needed because it has been there has not been any activity for **7 days**.
+
+            Maintainer, please provide feedback and/or mark it as `Waiting on Author`
+    
+    - description: Add waiting on Author label if is draft PR, if no activity label
+      frequencies:
+      - hourly:
+          hour: 12
+      filters:
+      - isOpen
+      - isDraftPullRequest
+      - isNotLabeledWith:
+          label: Review - Committee
+      - isNotLabeledWith:
+          label: Waiting on Author
+      - isNotLabeledWith:
+          label: Stale
+      - noActivitySince:
+          days: 3
+      actions:
+      - addLabel:
+          label: Waiting on Author
+    eventResponderTasks:
+    
+    - description: If PR has AutoMerge Label then enable Automerge to squash
+      if:
+      - payloadType: Pull_Request
+      - hasLabel:
+          label: AutoMerge
+      then:
+      - enableAutoMerge:
+          mergeMethod: Squash
+    
+    - description: If PR has label AutoMerge Removed then disable Automerge
+      if:
+      - payloadType: Pull_Request
+      - labelRemoved:
+          label: AutoMerge
+      then:
+      - disableAutoMerge
+    
+    - description: If PR review requests changes then add label waiting on Author and remove review needed
+      if: 
+      - payloadType: Pull_Request_Review
+      - isAction:
+          action: Submitted
+      - isReviewState:
+          reviewState: Changes_requested
+      then:
+      - addLabel:
+          label: Waiting on Author
+      - removeLabel:
+          label: Review - Needed
+    
+    - description: Remove Waiting on author if has label and activity from author
+      if:
+      - payloadType: Pull_Request
+      - isActivitySender:
+          issueAuthor: True
+      - not:
+          isAction:
+            action: Closed
+      - hasLabel:
+          label: Waiting on Author
+      - not:
+          titleContains:
+            pattern: "(WIP|Work in progress|\U0001F6A7)"
+            isRegex: True
+      then:
+      - removeLabel:
+          label: Waiting on Author
+    
+    - description: remove waiting on author if review by author and has waiting on author
+      if:
+      - payloadType: Pull_Request_Review
+      - isActivitySender:
+          issueAuthor: True
+      - hasLabel:
+          label: Waiting on Author
+      then:
+      - removeLabel:
+          label: Waiting on Author
+    
+    - description: Remove Stale label if PR has activity from author which is not closure
+      if:
+      - payloadType: Pull_Request
+      - not:
+          isAction:
+            action: Closed
+      - hasLabel:
+          label: Stale
+      - isActivitySender:
+          issueAuthor: True
+      then:
+      - removeLabel:
+          label: Stale
+    
+    - description: Remove Stale label if PR is reviewed
+      if:
+      - payloadType: Pull_Request_Review
+      - hasLabel:
+          label: Stale
+      then:
+      - removeLabel:
+          label: Stale
+    
+    - description: Remove Review Needed if PR is created or done any action by Admins and iSazonov
+      if:
+      - payloadType: Pull_Request
+      - hasLabel:
+          label: Review - Needed
+      - or:
+        - isAction:
+            action: Null
+        - isAction:
+            action: Closed
+        - isAction:
+            action: Reopened
+        - isAction:
+            action: Assigned
+        - isAction:
+            action: Unassigned
+        - isAction:
+            action: Unlabeled
+      - or:
+        - activitySenderHasPermission:
+            permission: Admin
+        - isActivitySender:
+            user: iSazonov
+            issueAuthor: False
+      then:
+      - removeLabel:
+          label: Review - Needed
+    
+    - description: Remove Review - Needed if issue comment is by admin or iSazonov
+      if:
+      - payloadType: Issue_Comment
+      - hasLabel:
+          label: Review - Needed
+      - or:
+        - activitySenderHasPermission:
+            permission: Admin
+        - isActivitySender:
+            user: iSazonov
+            issueAuthor: False
+      then:
+      - removeLabel:
+          label: Review - Needed
+    
+    - description: If inPRLabel then label in PR
+      if:
+      - payloadType: Pull_Request
+      then:
+      - inPrLabel:
+          label: In-PR
+    
+onFailure:
+onSuccess:
diff --git a/.github/policies/labelAdded.approvedLowRisk.yml b/.github/policies/labelAdded.approvedLowRisk.yml
new file mode 100644
index 00000000000..bdeea5265a0
--- /dev/null
+++ b/.github/policies/labelAdded.approvedLowRisk.yml
@@ -0,0 +1,48 @@
+id: labelAdded.approvedLowRisk
+name: GitOps.PullRequestIssueManagement
+description: Remove Approved-LowRisk if applied by an unauthorized user
+owner:
+resource: repository
+disabled: false
+where:
+configuration:
+  resourceManagementConfiguration:
+    eventResponderTasks:
+      - description: Remove Approved-LowRisk if label was added by someone not authorized
+        if:
+          - payloadType: Pull_Request
+          - isOpen
+          - labelAdded:
+              label: Approved-LowRisk
+          # Unauthorized = NOT admin AND NOT in explicit allowlist
+          - not:
+              or:
+                - activitySenderHasPermission:
+                    permission: Admin
+
+                # Allowlist (enabled)
+                - isActivitySender:
+                    user: iSazonov
+                    issueAuthor: False
+                - isActivitySender:
+                    user: daxian-dbw
+                    issueAuthor: False
+
+                # Allowlist (commented out for now)
+                # - isActivitySender:
+                #     user: TravisEz13
+                #     issueAuthor: False
+                # - isActivitySender:
+                #     user: adityapatwardhan
+                #     issueAuthor: False
+                # - isActivitySender:
+                #     user: jshigetomi
+                #     issueAuthor: False
+        then:
+          - removeLabel:
+              label: Approved-LowRisk
+          - addReply:
+              reply: >-
+                The `Approved-LowRisk` label is restricted to authorized maintainers and was removed.
+onFailure:
+onSuccess:
diff --git a/.github/policies/labelAdded.clBuildPackaging.addBackportConsider.yml b/.github/policies/labelAdded.clBuildPackaging.addBackportConsider.yml
new file mode 100644
index 00000000000..78edc18cb1a
--- /dev/null
+++ b/.github/policies/labelAdded.clBuildPackaging.addBackportConsider.yml
@@ -0,0 +1,56 @@
+id: labelAdded.clBuildPackaging.addBackportConsider
+name: GitOps.PullRequestIssueManagement
+description: Add backport consideration labels when CL-BuildPackaging is added to an open PR targeting master
+owner:
+resource: repository
+disabled: false
+where:
+configuration:
+  resourceManagementConfiguration:
+    eventResponderTasks:
+      - description: Add BackPort-7.4.x-Consider when CL-BuildPackaging is added to open PR targeting master
+        if:
+          - payloadType: Pull_Request
+          - isOpen
+          - labelAdded:
+              label: CL-BuildPackaging
+          - targetsBranch:
+              branch: master
+          - not:
+              hasLabel:
+                label: BackPort-7.4.x-Consider
+        then:
+          - addLabel:
+              label: BackPort-7.4.x-Consider
+
+      - description: Add BackPort-7.5.x-Consider when CL-BuildPackaging is added to open PR targeting master
+        if:
+          - payloadType: Pull_Request
+          - isOpen
+          - labelAdded:
+              label: CL-BuildPackaging
+          - targetsBranch:
+              branch: master
+          - not:
+              hasLabel:
+                label: BackPort-7.5.x-Consider
+        then:
+          - addLabel:
+              label: BackPort-7.5.x-Consider
+
+      - description: Add BackPort-7.6.x-Consider when CL-BuildPackaging is added to open PR targeting master
+        if:
+          - payloadType: Pull_Request
+          - isOpen
+          - labelAdded:
+              label: CL-BuildPackaging
+          - targetsBranch:
+              branch: master
+          - not:
+              hasLabel:
+                label: BackPort-7.6.x-Consider
+        then:
+          - addLabel:
+              label: BackPort-7.6.x-Consider
+onFailure:
+onSuccess:
diff --git a/.github/prompts/backport-pr-to-release-branch.prompt.md b/.github/prompts/backport-pr-to-release-branch.prompt.md
new file mode 100644
index 00000000000..32bff10bd5e
--- /dev/null
+++ b/.github/prompts/backport-pr-to-release-branch.prompt.md
@@ -0,0 +1,567 @@
+---
+description: Guide for backporting changes to PowerShell release branches
+---
+
+# Backport a Change to a PowerShell Release Branch
+
+## 1 — Goal
+
+Create a backport PR that applies changes from a merged PR to a release branch (e.g., `release/v7.4`, `release/v7.5`). The backport must follow the repository's established format and include proper references to the original PR.
+
+## 2 — Prerequisites for the model
+
+- You have full repository access
+- You can run git commands
+- You can read PR information from the repository
+- Ask clarifying questions if the target release branch or original PR number is unclear
+
+## 3 — Required user inputs
+
+If the user hasn't specified a PR number, help them find one:
+
+### Finding PRs that need backporting
+
+1. Ask the user which release version they want to backport to (e.g., `7.4`, `7.5`)
+2. Search for PRs with the appropriate label using GitHub CLI:
+
+```powershell
+$Owner = "PowerShell"
+$Repo = "PowerShell"
+$version = "7.4"  # or user-specified version
+$considerLabel = "Backport-$version.x-Consider"
+
+$prsJson = gh pr list --repo "$Owner/$Repo" --label $considerLabel --state merged --json number,title,url,labels,mergedAt --limit 100 2>&1
+$prs = $prsJson | ConvertFrom-Json
+# Sort PRs from oldest merged to newest merged
+$prs = $prs | Sort-Object mergedAt
+```
+
+3. Present the list of PRs to the user with:
+   - PR number
+   - PR title
+   - Merged date
+   - URL
+
+4. Ask the user: "Which PR would you like to backport?" (provide the PR number)
+
+### After selecting a PR
+
+Once the user selects a PR (or if they provided one initially), confirm:
+- **Original PR number**: The PR number that was merged to the main branch (e.g., 26193)
+- **Target release**: The release number (e.g., `7.4`, `7.5`, `7.5.1`)
+
+Example: "Backport PR 26193 to release/v7.4"
+
+## 4 — Implementation steps (must be completed in order)
+
+### Step 1: Verify the original PR exists and is merged
+
+1. Fetch the original PR information using the PR number
+2. Confirm the PR state is `MERGED`
+3. Extract the following information:
+   - Merge commit SHA
+   - Original PR title
+   - Original PR author
+   - Original CL label (if present, typically starts with `CL-`)
+
+If the PR is not merged, stop and inform the user.
+
+4. Check if backport already exists or has been attempted:
+   ```powershell
+   gh pr list --repo PowerShell/PowerShell --search "in:title [release/v7.4] <original-title>" --state all
+   ```
+
+   If a backport PR already exists, inform the user and ask if they want to continue.
+
+5. Check backport labels to understand status:
+   - `Backport-7.4.x-Migrated`: Indicates previous backport attempt (may have failed or had issues)
+   - `Backport-7.4.x-Done`: Already backported successfully
+   - `Backport-7.4.x-Approved`: Ready for backporting
+   - `Backport-7.4.x-Consider`: Under consideration for backporting
+
+   If status is "Done", inform the user that backport may already be complete.
+
+### Step 2: Create the backport branch
+
+1. Identify the correct remote to fetch from:
+   ```bash
+   git remote -v
+   ```
+
+   Look for the remote that points to `https://github.com/PowerShell/PowerShell` (typically named `upstream` or `origin`). Use this remote name in subsequent commands.
+
+2. Ensure you have the latest changes from the target release branch:
+   ```bash
+   git fetch <remote-name> <target-release-branch>
+   ```
+
+   Example: `git fetch upstream release/v7.4`
+
+3. Create a new branch from the target release branch:
+   ```bash
+   git checkout -b backport-<pr-number> <remote-name>/<target-release-branch>
+   ```
+
+   Example: `git checkout -b backport-26193 upstream/release/v7.4`
+
+### Step 3: Cherry-pick the merge commit
+
+1. Cherry-pick the merge commit from the original PR:
+   ```bash
+   git cherry-pick <merge-commit-sha>
+   ```
+
+2. If conflicts occur:
+   - Inform the user about the conflicts
+   - List the conflicting files
+   - Fetch the original PR diff to understand the changes:
+     ```bash
+     gh pr diff <pr-number> --repo PowerShell/PowerShell | Out-File pr-diff.txt
+     ```
+   - Review the diff to understand what the PR changed
+   - Figure out why there is a conflict and resolve it
+   - Create a summary of the conflict resolution:
+     * Which files had conflicts
+     * Nature of each conflict (parameter changes, code removal, etc.)
+     * How you resolved it
+     * Whether any manual adjustments were needed beyond accepting one side
+   - Ask the user to review your conflict resolution summary before continuing
+   - After conflicts are resolved, continue with:
+     ```bash
+     git add <resolved-files>
+     git cherry-pick --continue
+     ```
+
+### Step 4: Push the backport branch
+
+Push to your fork (typically the remote that you have write access to):
+
+```bash
+git push <your-fork-remote> backport-<pr-number>
+```
+
+Example: `git push origin backport-26193`
+
+Note: If you're pushing to the official PowerShell repository and have permissions, you may push to `upstream` or the appropriate remote.
+
+### Step 5: Create the backport PR
+
+Create a new PR with the following format:
+
+**Title:**
+```
+[<target-release-branch>] <original-pr-title>
+```
+
+Example: `[release/v7.4] GitHub Workflow cleanup`
+
+**Body:**
+```
+Backport of #<original-pr-number> to <target-release-branch>
+
+<!--
+DO NOT MODIFY THIS COMMENT. IT IS AUTO-GENERATED.
+$$$originalprnumber:<original-pr-number>$$$
+-->
+
+Triggered by @<current-user> on behalf of @<original-author>
+
+Original CL Label: <original-cl-label>
+
+/cc @PowerShell/powershell-maintainers
+
+## Impact
+
+Choose either tooling or Customer impact.
+### Tooling Impact
+
+- [ ] Required tooling change
+- [ ] Optional tooling change (include reasoning)
+
+### Customer Impact
+
+- [ ] Customer reported
+- [ ] Found internally
+
+[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.]
+
+## Regression
+
+- [ ] Yes
+- [ ] No
+
+[If yes, specify when the regression was introduced. Provide the PR or commit if known.]
+
+## Testing
+
+[How was the fix verified? How was the issue missed previously? What tests were added?]
+
+## Risk
+
+- [ ] High
+- [ ] Medium
+- [ ] Low
+
+[High/Medium/Low. Justify the indication by mentioning how risks were measured and addressed.]
+```
+
+**Base branch:** `<target-release-branch>` (e.g., `release/v7.4`)
+
+**Head branch:** `backport-<pr-number>` (e.g., `backport-26193`)
+
+#### Guidelines for Filling Out the PR Body
+
+**For Impact Section**:
+- If the original PR changed build/tooling/packaging, select "Tooling Impact"
+- If it fixes a user-facing bug or changes user-visible behavior, select "Customer Impact"
+- Copy relevant context from the original PR description
+- Be specific about what changed and why
+
+**For Regression Section**:
+- Mark "Yes" only if the original PR fixed a regression
+- Include when the regression was introduced if known
+
+**For Testing Section**:
+- Reference the original PR's testing approach
+- Note any additional backport-specific testing needed
+- Mention if manual testing was done to verify the backport
+
+**For Risk Assessment**:
+- **High**: Changes core functionality, packaging, build systems, or security-related code
+- **Medium**: Changes non-critical features, adds new functionality, or modifies existing behavior
+- **Low**: Documentation, test-only changes, minor refactoring, or fixes with narrow scope
+- Justify your assessment based on the scope of changes and potential impact
+- **For CI/CD changes**: When backporting CI/CD infrastructure changes (workflows, build scripts, packaging), note in your justification that not taking these changes may create technical debt and make it difficult to apply future CI/CD changes that build on top of them. This doesn't change the risk level itself, but provides important context for why the change should be taken despite potentially higher risk
+
+**If there were merge conflicts**:
+Add a note in the PR description after the Risk section describing what conflicts occurred and how they were resolved.
+
+### Step 6: Add the CL label to the backport PR
+
+After creating the backport PR, add the same changelog label (CL-*) from the original PR to the backport PR:
+
+```bash
+gh pr edit <backport-pr-number> --repo PowerShell/PowerShell --add-label "<original-cl-label>"
+```
+
+Example: `gh pr edit 26389 --repo PowerShell/PowerShell --add-label "CL-BuildPackaging"`
+
+This ensures the backport is properly categorized in the changelog for the release branch.
+
+### Step 7: Update the original PR's backport labels
+
+After successfully creating the backport PR, update the original PR to reflect that it has been backported:
+
+```bash
+gh pr edit <original-pr-number> --repo PowerShell/PowerShell --add-label "Backport-<version>.x-Migrated" --remove-label "Backport-<version>.x-Consider"
+```
+
+Example: `gh pr edit 26193 --repo PowerShell/PowerShell --add-label "Backport-7.5.x-Migrated" --remove-label "Backport-7.5.x-Consider"`
+
+Notes:
+- If the original PR had `Backport-<version>.x-Approved` instead of `Consider`, remove that label
+- This step helps track which PRs have been successfully backported
+- The `Migrated` label indicates the backport PR has been created (not necessarily merged)
+- The `Done` label should only be added once the backport PR is merged
+
+### Step 8: Clean up temporary files
+
+After successful PR creation and labeling, clean up any temporary files created during the process:
+
+```powershell
+Remove-Item pr*.diff -ErrorAction SilentlyContinue
+```
+
+## 5 — Definition of Done (self-check list)
+
+- [ ] Original PR is verified as merged
+- [ ] Checked for existing backport PRs
+- [ ] Reviewed backport labels to understand status
+- [ ] Backport branch created from correct release branch
+- [ ] Merge commit cherry-picked successfully (or conflicts resolved)
+- [ ] If conflicts occurred, provided resolution summary to user
+- [ ] Branch pushed to origin
+- [ ] PR created with correct title format: `[<release-branch>] <original-title>`
+- [ ] CL label added to backport PR (matching original PR's CL label)
+- [ ] Original PR labels updated (added Migrated, removed Consider/Approved)
+- [ ] Temporary files cleaned up (pr*.diff)
+- [ ] PR body includes:
+  - [ ] Backport reference: `Backport of (PR-number) to <release-branch>`
+  - [ ] Auto-generated comment with original PR number
+  - [ ] Triggered by and original author attribution
+  - [ ] Original CL label (if available)
+  - [ ] CC to PowerShell maintainers
+  - [ ] Impact section filled out
+  - [ ] Regression section filled out
+  - [ ] Testing section filled out
+  - [ ] Risk section filled out
+- [ ] Base branch set to target release branch
+- [ ] No unrelated changes included
+
+## 6 — Branch naming convention
+
+**Format:** `backport/release/<version>/pr/<pr-number>`
+
+Examples:
+- `backport/release/v7.5/pr/26193`
+- `backport/release/v7.4.1/pr/26334`
+
+Note: Automated bot uses format `backport/release/v<version>/<pr-number>-<commit-hash>`, but manual backports should use the format `backport/release/<version>/pr/<pr-number>` as shown above.
+
+## 7 — Example backport PR
+
+Reference PR 26334 as the canonical example of a correct backport:
+
+**Original PR**: PR 26193 "GitHub Workflow cleanup"
+
+**Backport PR**: PR 26334 "[release/v7.4] GitHub Workflow cleanup"
+- **Title**: `[release/v7.4] GitHub Workflow cleanup`
+- **Body**: Started with backport reference to original PR and release branch
+- **Branch**: `backport/release/v7.4/26193-4aff02475` (bot-created)
+- **Base**: `release/v7.4`
+- **Includes**: Auto-generated metadata, impact assessment, regression info, testing details, and risk level
+
+## 8 — Backport label system (for context)
+
+Backport labels follow pattern: `Backport-<version>.x-<state>`
+
+**Triage states:**
+- `Consider` - Under review for backporting
+- `Approved` - Approved and ready to be backported
+- `Done` - Backport completed
+
+**Examples:** `Backport-7.4.x-Approved`, `Backport-7.5.x-Consider`, `Backport-7.3.x-Done`
+
+Note: The PowerShell repository has an automated bot (pwshBot) that creates backport PRs automatically when a merged PR has a backport approval label. Manual backports follow the same format.
+
+## Manual Backport Using PowerShell Tools
+
+For situations where automated backports fail or manual intervention is needed, use the `Invoke-PRBackport` function from `tools/releaseTools.psm1`.
+
+### Prerequisites
+
+1. **GitHub CLI**: Install from https://cli.github.com/
+   - Required version: 2.17 or later
+   - Authenticate with `gh auth login`
+
+2. **Upstream Remote**: Configure a Git remote named `upstream` pointing to `PowerShell/PowerShell`:
+   ```powershell
+   git remote add upstream https://github.com/PowerShell/PowerShell.git
+   ```
+
+### Using Invoke-PRBackport
+
+```powershell
+# Import the release tools module
+Import-Module ./tools/releaseTools.psm1
+
+# Backport a single PR
+Invoke-PRBackport -PrNumber 26193 -Target release/v7.4.1
+
+# Backport with custom branch postfix
+Invoke-PRBackport -PrNumber 26193 -Target release/v7.4.1 -BranchPostFix "retry"
+
+# Overwrite existing local branch if it exists
+Invoke-PRBackport -PrNumber 26193 -Target release/v7.4.1 -Overwrite
+```
+
+### Parameters
+
+- **PrNumber** (Required): The PR number to backport
+- **Target** (Required): Target release branch (must match pattern `release/v\d+\.\d+(\.\d+)?`)
+- **Overwrite**: Switch to overwrite local branch if it already exists
+- **BranchPostFix**: Add a postfix to the branch name (e.g., for retry attempts)
+- **UpstreamRemote**: Name of the upstream remote (default: `upstream`)
+
+### How It Works
+
+1. Verifies the PR is merged
+2. Fetches the target release branch from upstream
+3. Creates a new branch: `backport-<pr-number>[-<postfix>]`
+4. Cherry-picks the merge commit
+5. If conflicts occur, prompts you to resolve them
+6. Creates the backport PR using GitHub CLI
+
+## Handling Merge Conflicts
+
+When cherry-picking fails due to conflicts:
+
+1. The script will pause and prompt you to fix conflicts
+2. Resolve conflicts in your editor:
+   ```powershell
+   # Check which files have conflicts
+   git status
+
+   # Edit files to resolve conflicts
+   # After resolving, stage the changes
+   git add <resolved-files>
+
+   # Continue the cherry-pick
+   git cherry-pick --continue
+   ```
+3. Type 'Yes<enter>' when prompted to continue the script
+4. The script will create the PR
+
+### Understanding Conflict Patterns
+
+When resolving conflicts during backports, follow this approach:
+
+1. **Analyze the diff first**: Before resolving conflicts, fetch and review the original PR's diff to understand what changed:
+   ```powershell
+   gh pr diff <pr-number> --repo PowerShell/PowerShell | Out-File pr-diff.txt
+   ```
+
+2. **Identify conflict types**:
+   - **Parameter additions**: New parameters added to functions (e.g., ValidateSet values)
+   - **Code removal**: Features removed in main but still exist in release branch
+   - **Code additions**: New code blocks that don't exist in release branch
+   - **Refactoring conflicts**: Code structure changes between branches
+
+3. **Resolution priorities**:
+   - Preserve the intent of the backported change
+   - Keep release branch-specific code that doesn't conflict with the fix
+   - When in doubt, favor the incoming change from the backport
+   - Document significant manual changes in the PR description
+
+4. **Verification**:
+   - After resolving conflicts, verify the file compiles/runs
+   - Check that the resolved code matches the original PR's intent
+   - Look for orphaned code that references removed functions
+
+5. **Create a conflict resolution summary**:
+   - List which files had conflicts
+   - Briefly explain the nature of each conflict
+   - Describe how you resolved it
+   - Ask user to review the resolution before continuing
+
+### Context-Aware Conflict Resolution
+
+**Key Principle**: The release branch may have different code than main. Your goal is to apply the *change* from the PR, not necessarily make the code identical to main.
+
+**Common Scenarios**:
+1. **Function parameters differ**: If the release branch has fewer parameters than main, and the backport adds functionality unrelated to new parameters, keep the release branch parameters unless the new parameters are part of the fix
+2. **Dependencies removed in main**: If main removed a dependency but the release branch still has it, and the backport is unrelated to that dependency, keep the release branch code
+3. **New features in main**: If main has new features not in the release, focus on backporting only the specific fix, not the new features
+
+## Bulk Backporting Approved PRs
+
+To backport all PRs labeled as approved for a specific version:
+
+```powershell
+Import-Module ./tools/releaseTools.psm1
+
+# Backport all approved PRs for version 7.2.12
+Invoke-PRBackportApproved -Version 7.2.12
+```
+
+This function:
+1. Queries all merged PRs with the `Backport-<version>.x-Approved` label
+2. Attempts to backport each PR in order of merge date
+3. Creates individual backport PRs for each
+
+## Viewing Backport Reports
+
+Get a list of PRs that need backporting:
+
+```powershell
+Import-Module ./tools/releaseTools.psm1
+
+# List all approved backports for 7.4
+Get-PRBackportReport -Version 7.4 -TriageState Approved
+
+# Open all approved backports in browser
+Get-PRBackportReport -Version 7.4 -TriageState Approved -Web
+
+# Check which backports are done
+Get-PRBackportReport -Version 7.4 -TriageState Done
+```
+
+## Branch Naming Conventions
+
+### Automated Bot Branches
+Format: `backport/release/v<version>/<pr-number>-<short-commit-hash>`
+
+Example: `backport/release/v7.4/26193-4aff02475`
+
+### Manual Backport Branches
+Format: `backport-<pr-number>[-<postfix>]`
+
+Examples:
+- `backport-26193`
+- `backport-26193-retry`
+
+## PR Title and Description Format
+
+### Title
+Format: `[release/v<version>] <original-title>`
+
+Example: `[release/v7.4] GitHub Workflow cleanup`
+
+### Description
+The backport PR description includes:
+- Reference to original PR number
+- Target release branch
+- Auto-generated comment with original PR metadata
+- Maintainer information
+- Original CL label
+- CC to PowerShell maintainers team
+
+Example description structure:
+```text
+Backport of (original-pr-number) to release/v<version>
+
+<!--
+DO NOT MODIFY THIS COMMENT. IT IS AUTO-GENERATED.
+$$$originalprnumber:<original-pr-number>$$$
+-->
+
+Triggered by @<maintainer> on behalf of @<original-author>
+
+Original CL Label: <original-label>
+
+/cc @PowerShell/powershell-maintainers
+```
+
+## Best Practices
+
+1. **Verify PR is merged**: Only backport merged PRs
+2. **Test backports**: Ensure backported changes work in the target release context
+3. **Check for conflicts early**: Large PRs are more likely to have conflicts
+4. **Use appropriate labels**: Apply correct version and triage state labels
+5. **Document special cases**: If manual changes were needed, note them in the PR description
+6. **Follow up on CI failures**: Backports should pass all CI checks before merging
+
+## Troubleshooting
+
+### "PR is not merged" Error
+**Cause**: Attempting to backport a PR that hasn't been merged yet
+**Solution**: Wait for the PR to be merged to the main branch first
+
+### "Please create an upstream remote" Error
+**Cause**: No upstream remote configured
+**Solution**:
+```powershell
+git remote add upstream https://github.com/PowerShell/PowerShell.git
+git fetch upstream
+```
+
+### "GitHub CLI is not installed" Error
+**Cause**: gh CLI not found in PATH
+**Solution**: Install from https://cli.github.com/ and restart terminal
+
+### Cherry-pick Conflicts
+**Cause**: Changes conflict with the target branch
+**Solution**: Manually resolve conflicts, stage files, and continue cherry-pick
+
+### "Commit does not exist" Error
+**Cause**: Local Git doesn't have the commit
+**Solution**:
+```powershell
+git fetch upstream
+```
+
+## Related Resources
+
+- **Release Process**: See `docs/maintainers/releasing.md`
+- **Release Tools**: See `tools/releaseTools.psm1`
+- **Issue Management**: See `docs/maintainers/issue-management.md`
diff --git a/.github/prquantifier.yaml b/.github/prquantifier.yaml
new file mode 100644
index 00000000000..ea891ba4988
--- /dev/null
+++ b/.github/prquantifier.yaml
@@ -0,0 +1,11 @@
+# https://github.com/microsoft/PullRequestQuantifier/blob/main/docs/prquantifier-yaml.md
+Excluded:
+# defaults
+- '*.csproj'
+- prquantifier.yaml
+- package-lock.json
+- '*.md'
+- '*.sln'
+# autogenerated files
+- tools/cgmanifest.json
+- assets/wix/files.wxs
diff --git a/.github/skills/analyze-pester-failures/SKILL.md b/.github/skills/analyze-pester-failures/SKILL.md
new file mode 100644
index 00000000000..ec1b0fe82ec
--- /dev/null
+++ b/.github/skills/analyze-pester-failures/SKILL.md
@@ -0,0 +1,524 @@
+---
+name: analyze-pester-failures
+description: Troubleshooting guide for analyzing and investigating Pester test failures in PowerShell CI jobs. Help agents understand why tests are failing, interpret test output, navigate test result artifacts, and provide actionable recommendations for fixing test issues.
+---
+
+# Analyze Pester Test Failures
+
+Investigate and troubleshoot Pester test failures in GitHub Actions workflows. Understand what tests are failing, why they're failing, and provide recommendations for test fixes.
+
+| Skill | When to Use |
+|-------|-----------|
+| analyze-pester-failures | When investigating why Pester tests are failing in a CI job. Use when a test job shows failures and you need to understand what test failed, why it failed, what the error message means, and what might need to be fixed. Also use when asked: "why did this test fail?", "what's the test error?", "test is broken", "test failure analysis", "debug test failure", or given test failure logs and stack traces. |
+
+## When to Use This Skill
+
+Use this skill when you need to:
+
+- Understand why a specific Pester test is failing  
+- Interpret test failure messages and error output
+- Analyze test result data from CI workflow runs (XML, logs, stack traces)
+- Identify the root cause of test failures (test logic, assertion failure, exception, timeout, skip/ignore reason)
+- Provide recommendations for fixing failing tests
+- Compare expected vs. actual test behavior
+- Debug test environment issues (missing dependencies, configuration problems)
+- Understand test skip/ignored/inconclusive status reasons
+
+**Do not use this skill for:**
+- General PowerShell debugging unrelated to tests
+- Test infrastructure/CI setup issues (except as they affect test failure interpretation)
+- Performance analysis or benchmarking (that's a different investigation)
+
+## Quick Start
+
+### ⚠️ CRITICAL: The Workflow Must Be Followed IN ORDER
+
+This skill describes a **sequential 6-step analysis workflow**. Skipping steps or jumping around leads to **incomplete analysis and incorrect conclusions**.
+
+**The Problem**: It's easy to skip to Step 4 or 5 without doing Steps 1-2, resulting in missing data and bad conclusions.
+
+**The Solution**: Use the automated analysis script to enforce the workflow:
+
+```powershell
+# Automatically runs Steps 1-6 in order, preventing skipping
+./.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1 -PR <PR_NUMBER>
+
+# Example:
+./.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1 -PR 26800
+```
+
+This script:
+1. ✓ Fetches PR status automatically
+2. ✓ Downloads artifacts (can't skip, depends on Step 1)
+3. ✓ Extracts failures (can't skip, depends on Step 2)
+4. ✓ Analyzes error messages
+5. ✓ Documents context
+6. ✓ Generates recommendations
+
+**Only use the manual commands below if you fully understand the workflow.**
+
+### Manual Workflow (for reference)
+
+```powershell
+# Step 1: Identify the failing job
+gh pr view <PR_NUMBER> --json 'statusCheckRollup' | ConvertFrom-Json | Where-Object { $_.conclusion -eq 'FAILURE' }
+
+# Step 2: Download artifacts (extract RUN_ID from Step 1)
+gh run download <RUN_ID> --dir ./artifacts
+gh run view <RUN_ID> --log > test-logs.txt
+
+# Step 3-6: Extract, analyze, and interpret
+# (See Analysis Workflow section below)
+```
+
+## Common Test Failure Analysis Approaches
+
+### 1. **Interpreting Assertion Failures**
+The most common test failure is when an assertion doesn't match expectations.
+
+**Example:**
+```
+Expected $true but got $false at /path/to/test.ps1:42
+Assertion failed: Should -Be "expected" but was "actual"  
+```
+
+**How to analyze:**
+- Read the assertion message: what was expected vs. what was actual?
+- Check the test logic: is the expectation correct?
+- Look for mock/stub issues: are dependencies configured correctly?
+- Check parameter values: what inputs were passed to the function under test?
+
+### 2. **Exception Failures**
+Tests fail when PowerShell throws an exception instead of successful completion.
+
+**Example:**
+```
+Command: Write-Host $null
+Error: Cannot bind argument to parameter 'Object' because it is null.
+```
+
+**How to analyze:**
+- Read the exception message: what operation failed?
+- Check the stack trace: where in the test or tested code did it throw?
+- Verify preconditions: does the test setup provide required values/mocks?
+- Look for environmental issues: missing modules, permissions, file system state?
+
+### 3. **Timeout Failures**
+A test takes longer than the allowed timeout to complete.
+
+**Example:**
+```
+Test 'Should complete in reasonable time' timed out after 30 seconds
+```
+
+**How to analyze:**
+- Is the timeout appropriate for this test type? (network tests need more time)
+- Is there an infinite loop in the test or tested code?
+- Are there resource contention issues on the CI runner?
+- Does the test hang waiting for something (file lock, network, process)?
+
+### 4. **Skip/Ignored Reason Analysis**
+Tests marked as skipped or ignored provide clues about test environment.
+
+**Example:**
+```
+Test marked [Skip("Only runs on Windows")] - running on Linux
+Test marked [Ignore("Known issue #12345")]
+```
+
+**How to analyze:**
+- Read the skip/ignore reason: is it still valid?
+- Check if environment has changed: platform, module versions, etc.
+- Verify issue status: is the known issue still open? Has it been fixed?
+- Determine if skip should be removed or if test needs environment changes
+
+### 5. **Flaky/Intermittent Failures**
+Tests that sometimes pass, sometimes fail indicate race conditions or environment sensitivity.
+
+**Example:**
+- Test passes locally but fails on CI
+- Test passes first run of suite, fails on second run
+- Test passes on Windows but fails on Linux
+
+**How to analyze:**
+- Look for timeout races: is timing involved in the test?
+- Check for test isolation issues: does one test affect another?
+- Verify environment differences: CI vs. local paths, permissions, versions
+- Look for external dependencies: network calls, file I/O, process interactions
+
+## Key Artifacts and Locations
+
+| Item | Purpose | Location |
+|------|---------|----------|
+| Test result XML | Pester output with test cases, failures, errors | Workflow artifacts: `junit-pester-*.xml` |
+| Job logs | Full job output including test execution and errors | GitHub Actions run logs or `gh run download` |
+| Stack traces | Error location information from failed assertions | Within job logs and XML failure messages |
+| Test files | The actual Pester test code (`.ps1` files) | `test/` directory in repository |
+
+## Analysis Workflow
+
+### ⚠️ Important: These Steps MUST Be Followed In Order
+
+Each step depends on the previous one. Skipping or re-ordering steps causes incomplete analysis:
+
+- **Step 1** (identify jobs) → You get the RUN_ID needed for Step 2
+- **Step 2** (download) → You get the artifacts needed for Step 3  
+- **Step 3** (extract) → You discover what failures exist for Step 4
+- **Step 4** (read messages) → You understand the errors to analyze in Step 5
+- **Step 5** (context) → You gather information to make recommendations in Step 6
+- **Step 6** (interpret) → You use all above to recommend fixes
+
+**Real Problem We Had**:
+- ❌ Jumped to Step 3 without Step 1-2
+- ❌ Used random test data from context instead of downloading PR artifacts
+- ❌ Skipped Steps 5-6 entirely
+- ❌ Made recommendations without full context
+
+**Result**: Wrong analysis and recommendations that didn't actually fix the problem.
+
+### Recommended: Use the Automated Script
+
+```powershell
+./.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1 -PR <PR_NUMBER>
+```
+
+This enforces the workflow and prevents skipping.
+
+### Step 2: Get Test Results
+
+Fetch the test result artifacts and job logs:
+
+```powershell
+# Download artifacts including test XML results
+gh run download <RUN_ID> --dir ./artifacts
+
+# Get job logs
+gh run view <RUN_ID> --log > test-logs.txt
+
+# Inspect test XML
+$xml = [xml](Get-Content ./artifacts/junit-pester-*.xml)
+$xml.'test-results' | Select-Object total, failures, errors, ignored, inconclusive
+```
+
+### Step 3: Extract Specific Failures
+
+Find the failing test cases in the XML:
+
+```powershell
+# Get all failed test cases
+$xml = [xml](Get-Content ./artifacts/junit-pester-*.xml)
+$failures = $xml.SelectNodes('.//test-case[@result = "Failure"]')
+
+# For each failure, display key info
+$failures | ForEach-Object {
+    [PSCustomObject]@{
+        Name = $_.name
+        Description = $_.description
+        Message = $_.failure.message
+        StackTrace = $_.failure.'stack-trace'
+    }
+}
+```
+
+### Step 4: Read the Error Message
+
+The error message tells you what went wrong:
+
+**Assertion failures:**
+```
+Expected $true but got $false
+Expected "value1" but got "value2"
+Expression should have failed with exception, but didn't
+```
+
+**Exceptions:**
+```
+Cannot find a parameter with name 'Name'
+Property 'Property' does not exist on 'Object'
+Cannot bind argument to parameter because it is null
+```
+
+**Timeouts:**
+```
+Test timed out after 30 seconds
+Test is taking too long to complete
+```
+
+### Step 5: Understand the Context
+
+Look at the test file to understand what was being tested:
+
+```powershell
+# Find the test file mentioned in the stack trace
+# Example: /path/to/test/Feature.Tests.ps1:42
+
+# Read the test code around that line
+code <test-file-path>:<line-number>
+
+# Understand:  
+# - What assertion is on that line?
+# - What is the test trying to verify?
+# - What are the setup/mock/before conditions?
+# - Are there recent changes to the function being tested?
+```
+
+### Step 6: Interpret the Failure
+
+Determine the root cause category:
+
+**Test issue (needs code fix):**
+- Assertion logic is wrong
+- Test expectations don't match actual behavior
+- Test setup is incomplete
+- Mock/stub configuration missing
+
+**Environmental issue (needs environment change):**
+- Test assumes a specific file or registry entry exists
+- Test requires Windows/Linux specifically
+- Test requires specific PowerShell version
+- Test requires specific module version
+- Timing-sensitive test affected by CI load
+
+**Data issue (needs input data change):**
+- Test data no longer valid
+- External API changed format
+- Configuration file has changed structure
+
+**Flakiness (needs test hardening):**
+- Race condition in test
+- Timing assumptions too tight
+- Resource contention on CI runner
+- Non-deterministic behavior in tested code
+
+## Common Test Failure Patterns
+
+| Pattern | What It Means | Example | Next Step |
+|---------|---------------|---------|-----------|
+| `Expected $true but got $false` | Assertion on boolean result failed | Test expects function returns true, but it returns false | Check function logic for bug or test logic for wrong expectation |
+| `Cannot find path` | File or directory doesn't exist | Test tries to read config file that's not present | Verify file path, check test setup, ensure CI environment has file |
+| `Cannot bind argument to parameter 'X'` | Required parameter value is null or wrong type | Function called with $null where object expected | Check test mock setup, verify parameter types |
+| `Test timed out after X seconds` | Test exceeded time limit | Network call or loop takes too long | Increase timeout for slow test, find infinite loop, mock network calls |
+| `Expression should have failed but didn't` | Exception wasn't thrown when expected | Test expects error but function succeeds | Check if function behavior changed, update test expectation |
+| `Could not find parameter 'X'` | Function doesn't have parameter | Test calls function with parameter that doesn't exist | Check PowerShell version, verify function signature, update test |
+| `This platform is not supported` | Test skipped on current OS | Windows-only test running on Linux | Add platform check, update test environment, or mark as platform-specific |
+| `Test marked [Ignore]` | Test explicitly disabled | Test has `[Ignore("reason")]` attribute | Check if reason still valid, remove if issue fixed |
+
+## Interpreting Test Results
+
+### Test Result Counts
+
+Pester test outcomes are categorized as:
+
+| Count | Meaning | Notes |
+|-------|---------|-------|
+| `total` | Total number of test cases executed | Should match: passed + failed + errors + skipped + ignored |
+| `failures` | Test assertions that failed | `Expected X but got Y` type failures |
+| `errors` | Tests that threw exceptions | Unhandled PowerShell exceptions during test |
+| `skipped` | Tests explicitly skipped (marked with `-Skip`) | Test code recognizes condition and skips |
+| `ignored` | Tests marked as ignored (marked with `-Ignore`) | Test disabled intentionally, usually notes reason |
+| `inconclusive` | Tests with unclear result | Rare; usually means test framework issue |
+| `passed` | Tests with passing assertions | `total - failures - errors - skipped - ignored` |
+
+### Stack Trace Interpretation
+
+A stack trace shows where the failure occurred:
+
+```
+at /home/runner/work/PowerShell/test/Feature.Tests.ps1:42
+
+Means:
+- File: /home/runner/work/PowerShell/test/Feature.Tests.ps1
+- Line: 42
+- Look at that line to see which assertion failed
+```
+
+### Understanding Skipped Tests
+
+When XML shows `result="Ignored"` or `result="Skipped"`:
+
+```xml
+<test-case name="Test Name" result="Ignored">
+  <reason>Only runs on Windows</reason>
+</test-case>
+```
+
+The reason explains why test didn't run. Not a failure, but important for understanding test coverage.
+
+## Providing Test Failure Analysis
+
+### Investigation Questions
+
+After gathering test output, ask yourself:
+
+1. **Is the test code correct?**
+   - Does the test assertion match the expected behavior?
+   - Are test expectations still valid?
+   - Has the function being tested changed?
+
+2. **Is the test setup correct?**
+   - Are mocks/stubs configured properly?
+   - Does the test environment have required files/configuration?
+   - Are preconditions (database, files, services) met?
+
+3. **Is this a code bug or test issue?**
+   - Does the tested function have a logic error?
+   - Or does the test have incorrect expectations?
+
+4. **Is this environment-specific?**
+   - Only fails on Windows/Linux?
+   - Only fails on CI but passes locally?
+   - Timing-dependent or resource-dependent?
+
+5. **Is this a known/expected failure?**
+   - Is there already an issue tracking this failure?
+   - Is the test marked as flaky or expected to fail?
+   - Does the skip/ignore reason still apply?
+
+### Recommendation Framework
+
+Based on your analysis:
+
+| Finding | Recommendation |
+|---------|-----------------|
+| Test logic is wrong | "Test assertion on line X is incorrect. Test expects Y but function correctly returns Z. Update test expectation." |
+| Tested code has bug | "Function at file.ps1#L42 has logic error. When X happens, returns Y instead of Z. Fix the condition." |
+| Missing test setup | "Test setup incomplete. Mock for dependency Y is not configured. Add `Mock Get-Y -MockWith { ... }`" |
+| Environment issue | "Test is Windows-specific but running on Linux. Either add platform check or skip on non-Windows." |
+| Flaky test | "Test is timing-sensitive (sleep 1 second). Increase timeout or use better synchronization." |
+| Test should be skipped | "Test is marked Ignored for good reason. Keep it disabled until issue #12345 is fixed." |
+
+### Tone and Structure
+
+Provide analysis as:
+
+1. **Summary** (1 sentence): What test is failing and general category  
+2. **Failure Details** (2-3 sentences): What the test output says  
+3. **Root Cause** (1-2 sentences): Why it's failing (test bug vs. code bug vs. environment)
+4. **Recommendation** (actionable): What should be done to fix it  
+5. **Context** (optional): Link to related code, issues, or recent changes
+
+## Examples
+
+### Example 1: Assertion Failure Due to Code Bug
+
+**Test Output:**
+```
+Expected 5 but got 3 at /path/to/Test.ps1:42
+```
+
+**Investigation:**
+1. Look at line 42: `$result | Should -Be 5`
+2. Check the test: It expects function to return 5 items
+3. Check the function: It returns `$items | Where-Object {$_.Status -eq "Active"}` but the filter is wrong
+4. Root cause: Function has logic error, not test error
+
+**Recommendation:**
+```
+Test failure is due to a code bug:
+
+The test Set-Configuration should return 5 items but returns 3.
+
+Looking at the tested function at [module.ps1#L42](module.ps1#L42):
+  $activeItems = $items | Where-Object {$_.Status -eq "Active"}
+
+The issue is the filter condition. It's currently filtering by "Active" status,
+but should include "Pending" status as well. 
+
+Fix: Change line 42 to:
+  $activeItems = $items | Where-Object {$_.Status -ne "Disabled"}
+
+Then re-run the test to verify it now returns 5 items as expected.
+```
+
+### Example 2: Test Setup Issue
+
+**Test Output:**
+```
+Cannot find path '/expected/config.json' because it does not exist at /path/to/Test.ps1:15
+```
+
+**Investigation:**
+1. Line 15 tries to read a config file
+2. The test setup doesn't create this file
+3. Works locally but fails on CI because CI doesn't have the same file
+
+**Recommendation:**
+```
+Test setup is incomplete:
+
+The test Initialize-Config fails because it expects /expected/config.json but the test doesn't create this file.
+
+The test needs to ensure the config file exists. Currently line 12-14 doesn't set up the file:
+
+  # Before:
+  # (no setup of config file)
+
+  # After:
+  @{ setting1 = "value1"; setting2 = "value2" } | ConvertTo-Json | 
+    Out-File $testConfigPath
+
+Alternatively, the test function should accept a parameter for the config path and use a temporary file:
+  param([string]$ConfigPath = (New-TemporaryFile))
+
+Re-run the test to verify the config file is properly available.
+```
+
+### Example 3: Platform-Specific Test Failure
+
+**Test Output:**
+```
+Test 'should read Windows Registry' failed on Linux runner
+Cannot find path 'HKEY_LOCAL_MACHINE:\...'
+```
+
+**Investigation:**
+1. Test assumes Windows Registry exists (Windows-only)
+2. Running on Linux runner doesn't have Registry
+3. Test should skip on non-Windows platforms
+
+**Recommendation:**
+```
+Test is platform-specific but running on wrong platform:
+
+The test "should read Windows Registry" assumes Windows Registry exists but is running on Linux.
+
+Add a platform check to skip this test on non-Windows systems:
+
+  It "should read Windows Registry" -Skip:$(-not $IsWindows) {
+    # test code here
+  }
+
+Or group Windows-only tests in a separate Describe block with platform check:
+
+  Describe "Windows Registry Tests" -Skip:$(-not $IsWindows) {
+    # all Windows-specific tests here
+  }
+
+This allows the test to be skipped on Linux/Mac while still running on Windows CI.
+```
+
+## References
+
+- [Pester Testing Framework](https://pester.dev/) — Official documentation, best practices for test writing
+- [Test Files](../../../test/) — PowerShell test suite in repository
+- [GitHub Actions Documentation](https://docs.github.com/en/actions) — Understanding workflow runs and logs
+- [PowerShell Documentation](https://learn.microsoft.com/en-us/powershell/) — Language reference for understanding test code
+
+## Tips
+
+1. **Read the error message first:** The error message is usually the most direct clue to the problem
+2. **Check test vs. code blame:** Is the test wrong or is the code wrong? Look at both sides
+3. **Verify test isolation:** Does one test failure affect others? Check for shared state or test ordering dependencies
+4. **Test locally first:** Try running the failing test locally to reproduce and understand it better
+5. **Check for environmental assumptions:** Windows-specific paths, module versions, file locations may differ on CI
+6. **Look for skip/ignore patterns:** If a test is consistently ignored, check if the reason is still valid
+7. **Compare passing vs. failing:** If test passes locally but fails on CI, the difference is usually environment-related
+8. **Check recent changes:** Did a recent PR change the tested code or test itself?
+9. **Understand Pester output format:** Different Pester versions, different `-ErrorAction`, `-WarningAction` produce different test results
+10. **Don't assume CI is wrong:** Failures on CI often reveal real issues that local testing missed (network, file permissions, parallelization, etc.)
+
+## Additional Links
+
+- [PowerShell Repository](https://github.com/PowerShell/PowerShell)
+- [GitHub Actions Documentation](https://docs.github.com/en/actions)
+- [Pester Testing Framework](https://github.com/Pester/Pester)
diff --git a/.github/skills/analyze-pester-failures/references/stack-trace-parsing.md b/.github/skills/analyze-pester-failures/references/stack-trace-parsing.md
new file mode 100644
index 00000000000..707f45560a9
--- /dev/null
+++ b/.github/skills/analyze-pester-failures/references/stack-trace-parsing.md
@@ -0,0 +1,163 @@
+# Understanding Pester Test Failures
+
+This reference explains how to interpret Pester test output and understand failure messages.
+
+## Supported Formats
+
+### Pester 4 Format
+```
+at line: 123 in C:\path\to\file.ps1
+```
+
+**Regex Pattern:**
+```powershell
+if ($StackTraceString -match 'at line:\s*(\d+)\s+in\s+(.+?)(?:\r|\n|$)') {
+    $result.Line = $matches[1]
+    $result.File = $matches[2].Trim()
+    return $result
+}
+```
+
+### Pester 5 Format (Common)
+```
+at 1 | Should -Be 2, C:\path\to\file.ps1:123
+at 1 | Should -Be 2, /home/runner/work/PowerShell/PowerShell/test/file.ps1:123
+```
+
+**Regex Pattern:**
+```powershell
+if ($StackTraceString -match ',\s*((?:[A-Za-z]:)?[\/\\].+?\.ps[m]?1):(\d+)') {
+    $result.File = $matches[1].Trim()
+    $result.Line = $matches[2]
+    return $result
+}
+```
+
+### Alternative Format
+```
+at C:\path\to\file.ps1:123
+at /path/to/file.ps1:123
+```
+
+**Regex Pattern:**
+```powershell
+if ($StackTraceString -match 'at\s+((?:[A-Za-z]:)?[\/\\][^,]+?\.ps[m]?1):(\d+)(?:\r|\n|$)') {
+    $result.File = $matches[1].Trim()
+    $result.Line = $matches[2]
+    return $result
+}
+```
+
+## Troubleshooting Parsing Failures
+
+### Issue: Line Number Extracted But File Path Is Null
+
+**Cause:** Stack trace matches line-with-path pattern but file extraction doesn't work
+
+**Solution:**
+1. Check if file path exists as expected in filesystem
+2. Verify regex doesn't have too-greedy bounds (check use of `.+?` vs `.+`)
+3. Test regex against actual stack trace string:
+   ```powershell
+   $trace = "at line: 42 in C:\path\to\test.ps1"
+   if ($trace -match 'at line:\s*(\d+)\s+in\s+(.+?)(?:\r|\n|$)') {
+       Write-Host "File: $($matches[2])"  # Should be "C:\path\to\test.ps1"
+   }
+   ```
+
+### Issue: Special Characters in File Path Break Regex
+
+**Cause:** Characters like parens `()`, brackets `[]`, pipes `|` have special meaning in regex
+
+**Solution:**
+1. Escape special chars in regex: `[Regex]::Escape($path)`
+2. Use character class `[\/\\]` instead of alternation for path separators
+3. Test with files containing problematic names:
+   ```powershell
+   $traces = @(
+       "at line: 1 in C:\path\(with)\parens\test.ps1",
+       "at /home/user/[brackets]/test.ps1:5",
+       "at C:\path\with spaces\test.ps1:10"
+   )
+   # Test each against all patterns
+   ```
+
+### Issue: Regex Matches But Extracts Wrong Values
+
+**Symptom:** $matches[1] is file instead of line, or vice versa
+
+**Debug Steps:**
+1. Print all captured groups: `$matches.Values | Format-Table -AutoSize`
+2. Verify group order in regex matches expectations
+3. Test with sample Pester output:
+   ```powershell
+   $sampleTrace = @"
+   at 1 | Should -Be 2, /home/runner/work/PowerShell/test/file.ps1:42
+   "@
+   
+   if ($sampleTrace -match ',\s*((?:[A-Za-z]:)?[\/\\].+?\.ps[m]?1):(\d+)') {
+       Write-Host "Match 1: $($matches[1])"  # Should be file path
+       Write-Host "Match 2: $($matches[2])"  # Should be line number
+   }
+   ```
+
+## Testing the Parser
+
+Use this PowerShell script to validate `Get-PesterFailureFileInfo`:
+
+```powershell
+# Import the function
+. ./build.psm1
+
+$testCases = @(
+    @{
+        Input = "at line: 42 in C:\path\to\test.ps1"
+        Expected = @{ File = "C:\path\to\test.ps1"; Line = "42" }
+    },
+    @{
+        Input = "at /home/runner/work/test.ps1:123"
+        Expected = @{ File = "/home/runner/work/test.ps1"; Line = "123" }
+    },
+    @{
+        Input = "at 1 | Should -Be 2, /path/to/file.ps1:99"
+        Expected = @{ File = "/path/to/file.ps1"; Line = "99" }
+    }
+)
+
+foreach ($test in $testCases) {
+    $result = Get-PesterFailureFileInfo -StackTraceString $test.Input
+    
+    $fileMatch = $result.File -eq $test.Expected.File
+    $lineMatch = $result.Line -eq $test.Expected.Line
+    $status = if ($fileMatch -and $lineMatch) { "✓ PASS" } else { "✗ FAIL" }
+    
+    Write-Host "$status : $($test.Input)"
+    if (-not $fileMatch) { Write-Host "  Expected file: $($test.Expected.File), got: $($result.File)" }
+    if (-not $lineMatch) { Write-Host "  Expected line: $($test.Expected.Line), got: $($result.Line)" }
+}
+```
+
+## Adding Support for New Formats
+
+When Pester changes its output format:
+
+1. **Capture sample output** from failing tests
+2. **Identify the pattern** (e.g., "file path always after comma followed by colon")
+3. **Write regex** to match pattern without over-matching
+4. **Add to `Get-PesterFailureFileInfo`** before existing patterns (order matters for fallback)
+5. **Test with samples** containing special characters, long paths, and edge cases
+
+Example: Adding a new format at the top of the function:
+
+```powershell
+# Try pattern: "at <description>, <path>:<line>" (Pester 5.1 hypothetical)
+if ($StackTraceString -match 'at .+?, ((?:[A-Za-z]:)?[\/\\].+?\.ps[m]?1):(\d+)') {
+    $result.File = $matches[1].Trim()
+    $result.Line = $matches[2]
+    return $result
+}
+
+# Try existing patterns...
+```
+
+Place new patterns **first** so they take precedence over fallback patterns.
diff --git a/.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1 b/.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1
new file mode 100644
index 00000000000..12486596071
--- /dev/null
+++ b/.github/skills/analyze-pester-failures/scripts/analyze-pr-test-failures.ps1
@@ -0,0 +1,456 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+<#
+.SYNOPSIS
+    Automated Pester test failure analysis workflow for GitHub PRs.
+
+.DESCRIPTION
+    This script automates the complete analysis workflow defined in the analyze-pester-failures
+    skill. It performs all steps in order:
+    1. Identify failing test jobs in the PR
+    2. Download test artifacts and logs
+    3. Extract specific test failures
+    4. Parse error messages
+    5. Search logs for error markers and generate recommendations
+
+    By automating the workflow, this ensures analysis steps are followed in order
+    and nothing is skipped.
+
+.PARAMETER PR
+    The GitHub PR number to analyze (e.g., 26800)
+
+.PARAMETER Owner
+    Repository owner (default: PowerShell)
+
+.PARAMETER Repo
+    Repository name (default: PowerShell)
+
+.PARAMETER OutputDir
+    Directory to store analysis results (default: ./pester-analysis-PR<number>)
+
+.PARAMETER Interactive
+    Prompt for recommendations after analysis (default: non-interactive)
+
+.PARAMETER ForceDownload
+    Force re-download of artifacts and logs, even if they already exist
+
+.EXAMPLE
+    .\.github\skills\analyze-pester-failures\scripts\analyze-pr-test-failures.ps1 -PR 26800
+    Analyzes PR #26800 and saves results to ./pester-analysis-PR26800
+
+.EXAMPLE
+    .\.github\skills\analyze-pester-failures\scripts\analyze-pr-test-failures.ps1 -PR 26800 -Interactive
+    Interactive mode: shows failures and prompts for next steps
+
+.EXAMPLE
+    .\.github\skills\analyze-pester-failures\scripts\analyze-pr-test-failures.ps1 -PR 26800 -ForceDownload
+    Re-download all logs and artifacts, skipping the cache
+
+.NOTES
+    Requires: GitHub CLI (gh) configured and authenticated
+    This script enforces the workflow defined in .github/skills/analyze-pester-failures/SKILL.md
+#>
+
+param(
+    [Parameter(Mandatory)]
+    [int]$PR,
+
+    [string]$Owner = 'PowerShell',
+    [string]$Repo = 'PowerShell',
+    [string]$OutputDir,
+    [switch]$Interactive,
+    [switch]$ForceDownload
+)
+
+$ErrorActionPreference = 'Stop'
+
+if (-not $OutputDir) {
+    $OutputDir = "./pester-analysis-PR$PR"
+}
+
+# Colors for output
+$colors = @{
+    Step    = [ConsoleColor]::Cyan
+    Success = [ConsoleColor]::Green
+    Warning = [ConsoleColor]::Yellow
+    Error   = [ConsoleColor]::Red
+    Info    = [ConsoleColor]::Gray
+}
+
+function Write-Step {
+    param([string]$text, [int]$number)
+    Write-Host "`n[$number/6] $text" -ForegroundColor $colors.Step -BackgroundColor Black
+}
+
+function Write-Result {
+    param([string]$text, [ValidateSet('Success','Warning','Error','Info')]$type = 'Info')
+    Write-Host $text -ForegroundColor $colors[$type]
+}
+
+Write-Host "`n=== Pester Test Failure Analysis ===" -ForegroundColor $colors.Step
+Write-Host "PR: $Owner/$Repo#$PR" -ForegroundColor $colors.Info
+Write-Host "Output Directory: $OutputDir" -ForegroundColor $colors.Info
+
+# Ensure output directory exists
+if (-not (Test-Path $OutputDir)) {
+    New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
+}
+
+# STEP 1: Identify the Failing Test Job
+Write-Step "Identify failing test jobs" 1
+
+Write-Result "Fetching PR status checks..." Info
+$prResponse = gh pr view $PR --repo "$Owner/$Repo" --json 'statusCheckRollup' | ConvertFrom-Json
+$allChecks = $prResponse.statusCheckRollup
+
+$failedJobs = $allChecks | Where-Object { $_.conclusion -eq 'FAILURE' }
+
+if (-not $failedJobs) {
+    Write-Result "✓ No failed jobs found" Success
+    Write-Host "  Total checks: $($allChecks.Count)"
+    $allChecks | Where-Object { $_ } | ForEach-Object {
+        Write-Host "  - $($_.name): $($_.conclusion)" -ForegroundColor $colors.Info
+    }
+    exit 0
+}
+
+Write-Result "✓ Found $($failedJobs.Count) failing job(s)" Warning
+
+$failedJobs | Where-Object { $_.conclusion -eq 'FAILURE' } | ForEach-Object {
+    Write-Host "  ✗ $($_.name) - $($_.conclusion)" -ForegroundColor $colors.Error
+    if ($_.detailsUrl) {
+        Write-Host "    URL: $($_.detailsUrl)" -ForegroundColor $colors.Info
+    }
+}
+
+if ($Interactive) {
+    Write-Host "`nPress Enter to continue to Step 2..."
+    Read-Host | Out-Null
+}
+
+# STEP 2: Get Test Results
+Write-Step "Download test artifacts and logs" 2
+
+# Extract unique run IDs from failing jobs
+$uniqueRuns = @()
+foreach ($failedJob in $failedJobs) {
+    if ($failedJob.detailsUrl -match 'runs/(\d+)') {
+        $runId = $matches[1]
+        if ($runId -notin $uniqueRuns) {
+            $uniqueRuns += $runId
+        }
+    }
+}
+
+if ($uniqueRuns.Count -eq 0) {
+    Write-Result "✗ Could not extract run IDs from failing jobs" Error
+    exit 1
+}
+
+Write-Result "Found $($uniqueRuns.Count) run(s): $($uniqueRuns -join ', ')" Info
+
+$artifactDir = Join-Path $OutputDir artifacts
+
+# Check if artifacts already exist
+$existingArtifacts = Get-ChildItem $artifactDir -Recurse -File -ErrorAction SilentlyContinue
+
+if ($existingArtifacts -and -not $ForceDownload) {
+    Write-Result "✓ Artifacts already downloaded" Success
+    $existingArtifacts | ForEach-Object {
+        Write-Host "  - $($_.FullName)" -ForegroundColor $colors.Info
+    }
+} else {
+    Write-Result "Downloading artifacts from run $($uniqueRuns[0])..." Info
+    gh run download $uniqueRuns[0] --dir $artifactDir --repo "$Owner/$Repo" 2>&1 | Out-Null
+
+    if (Test-Path $artifactDir) {
+        Write-Result "✓ Artifacts downloaded" Success
+        Get-ChildItem $artifactDir -Recurse -File | ForEach-Object {
+            Write-Host "  - $($_.FullName)" -ForegroundColor $colors.Info
+        }
+    } else {
+        Write-Result "✗ Failed to download artifacts" Error
+        exit 1
+    }
+}
+
+# Download individual job logs for failing jobs
+Write-Result "Downloading individual job logs..." Info
+
+$logsDir = Join-Path $OutputDir "logs"
+if (-not (Test-Path $logsDir)) {
+    New-Item -ItemType Directory -Path $logsDir -Force | Out-Null
+}
+
+# Check if logs already exist
+$existingLogs = Get-ChildItem $logsDir -Filter "*.txt" -ErrorAction SilentlyContinue
+
+if ($existingLogs -and -not $ForceDownload) {
+    Write-Result "✓ Job logs already downloaded" Success
+    $existingLogs | ForEach-Object {
+        Write-Host "  - $($_.Name)" -ForegroundColor $colors.Info
+    }
+} else {
+    # Process each run and get its jobs
+    $failedJobIds = @()
+    foreach ($runId in $uniqueRuns) {
+        $runJobs = gh run view $runId --repo "$Owner/$Repo" --json jobs | ConvertFrom-Json
+
+        foreach ($failedJob in $failedJobs) {
+            # Check if this failed job belongs to this run
+            if ($failedJob.detailsUrl -match "runs/$runId/") {
+                $jobMatch = $runJobs.jobs | Where-Object { $_.name -eq $failedJob.name } | Select-Object -First 1
+                if ($jobMatch) {
+                    $failedJobIds += @{
+                        name  = $failedJob.name
+                        id    = $jobMatch.databaseId
+                        runId = $runId
+                    }
+                }
+            }
+        }
+    }
+
+    # Download logs for all failed jobs
+    foreach ($jobInfo in $failedJobIds) {
+        $logFile = Join-Path $logsDir ("log-{0}.txt" -f ($jobInfo.name -replace '[^a-zA-Z0-9-]', '_'))
+        Write-Result "  Downloading: $($jobInfo.name) (Run $($jobInfo.runId))" Info
+        gh run view $jobInfo.runId --log --job $jobInfo.id --repo "$Owner/$Repo" > $logFile 2>&1
+    }
+
+    Write-Result "✓ Job logs downloaded" Success
+    Get-ChildItem $logsDir -Filter "*.txt" | ForEach-Object {
+        Write-Host "  - $($_.Name)" -ForegroundColor $colors.Info
+    }
+}
+
+if ($Interactive) {
+    Write-Host "`nPress Enter to continue to Step 3..."
+    Read-Host | Out-Null
+}
+
+# STEP 3: Extract Specific Failures
+Write-Step "Extract test failures from XML" 3
+
+$xmlFiles = Get-ChildItem $artifactDir -Filter "*.xml" -Recurse
+if (-not $xmlFiles) {
+    Write-Result "✗ No test result XML files found" Error
+    exit 1
+}
+
+Write-Result "✓ Found $($xmlFiles.Count) test result file(s)" Success
+
+$allFailures = @()
+
+foreach ($xmlFile in $xmlFiles) {
+    Write-Result "`nParsing: $($xmlFile.Name)" Info
+
+    try {
+        [xml]$xml = Get-Content $xmlFile
+        $testResults = $xml.'test-results'
+
+        Write-Host "  Total: $($testResults.total)" -ForegroundColor $colors.Info
+        Write-Host "  Passed: $($testResults.passed)" -ForegroundColor $colors.Success
+        if ($testResults.failures -gt 0) {
+            Write-Host "  Failed: $($testResults.failures)" -ForegroundColor $colors.Error
+        }
+        if ($testResults.errors -gt 0) {
+            Write-Host "  Errors: $($testResults.errors)" -ForegroundColor $colors.Error
+        }
+        if ($testResults.skipped -gt 0) {
+            Write-Host "  Skipped: $($testResults.skipped)" -ForegroundColor $colors.Warning
+        }
+        if ($testResults.ignored -gt 0) {
+            Write-Host "  Ignored: $($testResults.ignored)" -ForegroundColor $colors.Warning
+        }
+
+        # Extract failures
+        $failures = $xml.SelectNodes('.//test-case[@result = "Failure"]')
+
+        foreach ($failure in $failures) {
+            $allFailures += @{
+                Name       = $failure.name
+                File       = $xmlFile.Name
+                Message    = $failure.failure.message
+                StackTrace = $failure.failure.'stack-trace'
+            }
+        }
+    } catch {
+        Write-Result "✗ Error parsing XML: $_" Error
+    }
+}
+
+Write-Result "`n✓ Extracted $($allFailures.Count) failures total" Success
+
+# Save failures to JSON for later analysis
+$allFailures | ConvertTo-Json -Depth 10 | Out-File (Join-Path $OutputDir "failures.json")
+
+if ($Interactive) {
+    Write-Host "`nPress Enter to continue to Step 4..."
+    Read-Host | Out-Null
+}
+
+# STEP 4: Read Error Messages
+Write-Step "Analyze error messages" 4
+
+$failuresByType = @{}
+
+foreach ($failure in $allFailures) {
+    $message = $failure.Message -split "`n" | Select-Object -First 1
+
+    # Categorize failure
+    $type = 'Other'
+    if ($message -match 'Expected .* but got') { $type = 'Assertion' }
+    elseif ($message -match 'Cannot (find|bind)') { $type = 'Exception' }
+    elseif ($message -match 'timed out') { $type = 'Timeout' }
+
+    if (-not $failuresByType[$type]) {
+        $failuresByType[$type] = @()
+    }
+    $failuresByType[$type] += $failure
+}
+
+Write-Result "Failure breakdown:" Info
+$failuresByType.GetEnumerator() | ForEach-Object {
+    Write-Host "  $($_.Key): $($_.Value.Count)" -ForegroundColor $colors.Warning
+}
+
+Write-Result "`nTop failure messages:" Info
+$allFailures | Group-Object Message | Sort-Object Count -Descending | Select-Object -First 3 | ForEach-Object {
+    Write-Host "  [$($_.Count)x] $($_.Name -split "`n" | Select-Object -First 1)" -ForegroundColor $colors.Info
+}
+
+# Save analysis
+$analysis = @{
+    FailuresByType = @{}
+    TopMessages    = @()
+}
+
+$failuresByType.GetEnumerator() | ForEach-Object {
+    $analysis.FailuresByType[$_.Key] = $_.Value.Count
+}
+
+$allFailures | Group-Object Message | Sort-Object Count -Descending | Select-Object -First 5 | ForEach-Object {
+    $analysis.TopMessages += @{
+        Count   = $_.Count
+        Message = ($_.Name -split "`n" | Select-Object -First 1)
+    }
+}
+
+$analysis | ConvertTo-Json | Out-File (Join-Path $OutputDir "analysis.json")
+
+if ($Interactive) {
+    Write-Host "`nPress Enter to continue to Step 5..."
+    Read-Host | Out-Null
+}
+
+# STEP 5: Search Logs for Error Markers
+Write-Step "Search logs for error markers" 5
+
+$logsDir = Join-Path $OutputDir "logs"
+if (-not (Test-Path $logsDir)) {
+    Write-Result "⚠ Logs directory not found" Warning
+} else {
+    $logFiles = Get-ChildItem $logsDir -Filter "*.txt" -ErrorAction SilentlyContinue
+    if (-not $logFiles) {
+        Write-Result "⚠ No log files found in logs directory" Warning
+    } else {
+        Write-Result "Searching $($logFiles.Count) job log(s) for error markers ([-])" Info
+        Write-Result "Format: [JobName] [LineNumber] Content" Info
+        Write-Host ""
+
+        $allErrorLines = @()
+
+        foreach ($logFile in $logFiles) {
+            $jobName = $logFile.BaseName -replace '^log-', ''
+            $logLines = @(Get-Content $logFile)
+
+            for ($i = 0; $i -lt $logLines.Count; $i++) {
+                $line = $logLines[$i]
+                if ($line -match '\s\[-\]\s') {
+                    $allErrorLines += @{
+                        JobName    = $jobName
+                        LineNumber = $i + 1
+                        Content    = $line
+                    }
+                }
+            }
+        }
+
+        if ($allErrorLines.Count -gt 0) {
+            Write-Result "✓ Found $($allErrorLines.Count) error marker line(s)" Warning
+
+            $allErrorLines | ForEach-Object {
+                Write-Host "  [$($_.JobName)] [$($_.LineNumber)] $($_.Content)" -ForegroundColor $colors.Error
+            }
+
+            # Save to file
+            $allErrorLines | ConvertTo-Json | Out-File (Join-Path $OutputDir "error-markers.json")
+            Write-Result "✓ Error markers saved to error-markers.json" Success
+        } else {
+            Write-Result "✓ No error markers found in logs" Success
+        }
+    }
+}
+
+if ($Interactive) {
+    Write-Host "`nPress Enter to continue to Step 6..."
+    Read-Host | Out-Null
+}
+
+# STEP 6: Generate Recommendations
+Write-Step "Generate recommendations" 6
+
+$recommendations = @()
+
+# Analyze patterns
+if ($failuresByType['Assertion']) {
+    $recommendations += "Multiple assertion failures detected. These indicate test expectations don't match actual behavior."
+}
+
+if ($failuresByType['Exception']) {
+    $recommendations += "Exception errors found. Check test setup and prerequisites - may indicate missing files, modules, or permissions."
+}
+
+if ($failuresByType['Timeout']) {
+    $recommendations += "Timeout failures suggest slow or hanging operations. Consider network issues or resource constraints on CI."
+}
+
+# Check for patterns in failure messages
+$failureMessages = $allFailures.Message -join "`n"
+if ($failureMessages -match 'PackageManagement') {
+    $recommendations += "PackageManagement module issues detected. Verify module availability and help repository access."
+}
+
+if ($failureMessages -match 'Update-Help') {
+    $recommendations += "Update-Help failures detected. Check network connectivity to help repository and help installation paths."
+}
+
+Write-Result "`n📋 Recommendations:" Info
+if ($recommendations) {
+    $recommendations | ForEach-Object { Write-Host "  • $_" -ForegroundColor $colors.Info }
+} else {
+    Write-Host "  • Review failures in detail" -ForegroundColor $colors.Info
+    Write-Host "  • Check if test changes are needed" -ForegroundColor $colors.Info
+    Write-Host "  • Consider environment-specific issues" -ForegroundColor $colors.Info
+}
+
+$recommendations | Out-File (Join-Path $OutputDir "recommendations.txt")
+
+# Summary
+Write-Host "`n=== Analysis Complete ===" -ForegroundColor $colors.Step
+Write-Host "Results saved to: $OutputDir" -ForegroundColor $colors.Info
+Write-Host "  - failures.json (detailed failure data)" -ForegroundColor $colors.Info
+Write-Host "  - analysis.json (summary analysis)" -ForegroundColor $colors.Info
+Write-Host "  - recommendations.txt (suggested fixes)" -ForegroundColor $colors.Info
+Write-Host "  - error-markers.json (error markers from logs)" -ForegroundColor $colors.Info
+Write-Host "  - logs/ (individual job log files)" -ForegroundColor $colors.Info
+Write-Host "  - artifacts/ (downloaded test artifacts)" -ForegroundColor $colors.Info
+
+Write-Host "`nNext steps:" -ForegroundColor $colors.Step
+Write-Host "1. Review recommendations.txt for analysis" -ForegroundColor $colors.Info
+Write-Host "2. Examine failures.json for detailed error messages" -ForegroundColor $colors.Info
+Write-Host "3. Check error-markers.json for specific test failures in logs" -ForegroundColor $colors.Info
+Write-Host "4. Review individual job logs in logs/ directory for contextual details" -ForegroundColor $colors.Info
+Write-Host "`n"
diff --git a/.github/workflows/GHWorkflowHelper/GHWorkflowHelper.psm1 b/.github/workflows/GHWorkflowHelper/GHWorkflowHelper.psm1
new file mode 100644
index 00000000000..f0524ce6f23
--- /dev/null
+++ b/.github/workflows/GHWorkflowHelper/GHWorkflowHelper.psm1
@@ -0,0 +1,27 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+function Set-GWVariable {
+    param(
+        [Parameter(Mandatory = $true)]
+        [string]$Name,
+        [Parameter(Mandatory = $true)]
+        [string]$Value
+    )
+
+    Write-Verbose "Setting CI variable $Name to $Value" -Verbose
+
+    if ($env:GITHUB_ENV) {
+        "$Name=$Value" | Out-File $env:GITHUB_ENV -Append
+    }
+}
+
+function Get-GWTempPath {
+    $temp = [System.IO.Path]::GetTempPath()
+    if ($env:RUNNER_TEMP) {
+        $temp = $env:RUNNER_TEMP
+    }
+
+    Write-Verbose "Get CI Temp path: $temp" -Verbose
+    return $temp
+}
diff --git a/.github/workflows/analyze-reusable.yml b/.github/workflows/analyze-reusable.yml
new file mode 100644
index 00000000000..3ef564eba90
--- /dev/null
+++ b/.github/workflows/analyze-reusable.yml
@@ -0,0 +1,77 @@
+name: CodeQL Analysis (Reusable)
+
+on:
+  workflow_call:
+    inputs:
+      runner_os:
+        description: 'Runner OS for CodeQL analysis'
+        type: string
+        required: false
+        default: ubuntu-latest
+
+permissions:
+  actions: read  # for github/codeql-action/init to get workflow details
+  contents: read  # for actions/checkout to fetch code
+  security-events: write  # for github/codeql-action/analyze to upload SARIF results
+
+env:
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ${{ inputs.runner_os }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        # Override automatic language detection by changing the below list
+        # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
+        language: ['csharp']
+        # Learn more...
+        # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+      with:
+        fetch-depth: '0'
+
+    - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
+      with:
+        global-json-file: ./global.json
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3.29.5
+      with:
+        languages: ${{ matrix.language }}
+        # If you wish to specify custom queries, you can do so here or in a config file.
+        # By default, queries listed here will override any specified in a config file.
+        # Prefix the list here with "+" to use these queries and those in the config file.
+        # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+    - run: |
+        Import-Module .\tools\ci.psm1
+        Show-Environment
+      name: Capture Environment
+      shell: pwsh
+
+    - run: |
+        Import-Module .\tools\ci.psm1
+        Invoke-CIInstall -SkipUser
+      name: Bootstrap
+      shell: pwsh
+
+    - run: |
+        Import-Module .\tools\ci.psm1
+        Invoke-CIBuild -Configuration 'StaticAnalysis'
+      name: Build
+      shell: pwsh
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3.29.5
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index a3719e2d90f..00000000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-name: "CodeQL"
-
-on:
-  push:
-    branches: [master]
-  pull_request:
-    # The branches below must be a subset of the branches above
-    branches: [master]
-
-defaults:
-  run:
-    shell: pwsh
-
-env:
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
-
-jobs:
-  analyze:
-    name: Analyze
-    runs-on: ubuntu-16.04
-
-    strategy:
-      fail-fast: false
-      matrix:
-        # Override automatic language detection by changing the below list
-        # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
-        language: ['csharp']
-        # Learn more...
-        # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
-
-    steps:
-    - name: Checkout repository
-      uses: actions/checkout@v2
-      with:
-        fetch-depth: '0'
-
-    # Initializes the CodeQL tools for scanning.
-    - name: Initialize CodeQL
-      uses: github/codeql-action/init@v1
-      with:
-        languages: ${{ matrix.language }}
-        # If you wish to specify custom queries, you can do so here or in a config file.
-        # By default, queries listed here will override any specified in a config file.
-        # Prefix the list here with "+" to use these queries and those in the config file.
-        # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
-    - run: |
-        Get-ChildItem -Path env:
-      name: Capture Environment
-
-    - run: |
-        Import-Module .\tools\ci.psm1
-        Invoke-CIInstall -SkipUser
-      name: Bootstrap
-
-    - run: |
-        Import-Module .\tools\ci.psm1
-        Invoke-CIBuild
-      name: Build
-
-    - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
new file mode 100644
index 00000000000..d78e745a4a9
--- /dev/null
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -0,0 +1,64 @@
+name: "Copilot Setup Steps"
+
+# Allow testing of the setup steps from your repository's "Actions" tab.
+on:
+  workflow_dispatch:
+
+  pull_request:
+    branches:
+      - master
+    paths:
+      - ".github/workflows/copilot-setup-steps.yml"
+
+permissions:
+  contents: read
+
+jobs:
+  # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
+  # See https://docs.github.com/en/copilot/customizing-copilot/customizing-the-development-environment-for-copilot-coding-agent
+  copilot-setup-steps:
+    runs-on: ubuntu-latest
+
+    permissions:
+      contents: read
+
+    # You can define any steps you want, and they will run before the agent starts.
+    # If you do not check out your code, Copilot will do this for you.
+    steps:
+      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+
+      - name: Bootstrap
+        if: success()
+        run: |-
+          $title = 'Import Build.psm1'
+          Write-Host "::group::$title"
+          Import-Module ./build.psm1 -Verbose -ErrorAction Stop
+          Write-LogGroupEnd -Title $title
+
+          $title = 'Switch to public feed'
+          Write-LogGroupStart -Title $title
+          Switch-PSNugetConfig -Source Public
+          Write-LogGroupEnd -Title $title
+
+          $title = 'Bootstrap'
+          Write-LogGroupStart -Title $title
+          Start-PSBootstrap -Scenario DotNet
+          Write-LogGroupEnd -Title $title
+
+          $title = 'Install .NET Tools'
+          Write-LogGroupStart -Title $title
+          Start-PSBootstrap -Scenario Tools
+          Write-LogGroupEnd -Title $title
+
+          $title = 'Sync Tags'
+          Write-LogGroupStart -Title $title
+          Sync-PSTags -AddRemoteIfMissing
+          Write-LogGroupEnd -Title $title
+
+          $title = 'Setup .NET environment variables'
+          Write-LogGroupStart -Title $title
+          Find-DotNet -SetDotnetRoot
+          Write-LogGroupEnd -Title $title
+        shell: pwsh
diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml
deleted file mode 100644
index 1535fced837..00000000000
--- a/.github/workflows/daily.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT license.
-
-name: PowerShell Daily
-on:
-    workflow_dispatch:
-    schedule:
-    # At 13:00 UTC every day.
-    - cron:  '0 13 * * *'
-
-defaults:
-  run:
-    shell: pwsh
-
-env:
-  DOTNET_CLI_TELEMETRY_OPTOUT: 1
-  POWERSHELL_TELEMETRY_OPTOUT: 1
-
-jobs:
-  update-dotnet-preview:
-    name: Update .NET preview
-    timeout-minutes: 15
-    runs-on: windows-latest
-    if: github.repository == 'PowerShell/PowerShell'
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-      - name: Sync tags
-        run: |
-          git fetch --prune --unshallow --tags
-      - name: Execute Update .NET script
-        run: |
-          $currentVersion = (Get-Content .\global.json | ConvertFrom-Json).sdk.version
-          Write-Verbose "OLD_VERSION=$currentVersion" -Verbose
-          "OLD_VERSION=$currentVersion" | Out-File $env:GITHUB_ENV -Append
-
-          ./tools/UpdateDotnetRuntime.ps1 -UpdateMSIPackaging
-          $newVersion = (Get-Content .\global.json | ConvertFrom-Json).sdk.version
-          Write-Verbose "NEW_VERSION=$newVersion" -Verbose
-          "NEW_VERSION=$newVersion" | Out-File $env:GITHUB_ENV -Append
-
-          if ($currentVersion -ne $newVersion) {
-            Write-Verbose "CREATE_PR=true" -Verbose
-            "CREATE_PR=true" | Out-File $env:GITHUB_ENV -Append
-          }
-      - name: Create Pull Request
-        uses: peter-evans/create-pull-request@v2
-        id: cpr
-        if: env.CREATE_PR == 'true'
-        with:
-          commit-message: "Update .NET SDK version from `${{ env.OLD_VERSION }}` to `${{ env.NEW_VERSION }}`"
-          title: "Update .NET SDK version from `${{ env.OLD_VERSION }}` to `${{ env.NEW_VERSION }}`"
-          base: master
-          branch: dotnet_update
-
-
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
new file mode 100644
index 00000000000..84f0b03fa32
--- /dev/null
+++ b/.github/workflows/dependency-review.yml
@@ -0,0 +1,22 @@
+# Dependency Review Action
+#
+# This Action will scan dependency manifest files that change as part of a Pull Request,
+# surfacing known-vulnerable versions of the packages declared or updated in the PR.
+# Once installed, if the workflow run is marked as required,
+# PRs introducing known-vulnerable packages will be blocked from merging.
+#
+# Source repository: https://github.com/actions/dependency-review-action
+name: 'Dependency Review'
+on: [pull_request]
+
+permissions:
+  contents: read
+
+jobs:
+  dependency-review:
+    runs-on: ubuntu-latest
+    steps:
+      - name: 'Checkout Repository'
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+      - name: 'Dependency Review'
+        uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml
new file mode 100644
index 00000000000..27ceac59bbd
--- /dev/null
+++ b/.github/workflows/labels.yml
@@ -0,0 +1,31 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+name: Verify PR Labels
+
+on:
+  pull_request:
+    types: [opened, reopened, edited, labeled, unlabeled, synchronize]
+
+permissions:
+  contents: read
+  pull-requests: read
+
+jobs:
+  verify-labels:
+    if: github.repository_owner == 'PowerShell'
+    runs-on: ubuntu-latest
+
+    steps:
+    - name: Check out the repository
+      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+    - name: Verify PR has label starting with 'cl-'
+      id: verify-labels
+      uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+      with:
+        script: |
+          const labels = context.payload.pull_request.labels.map(label => label.name.toLowerCase());
+          if (!labels.some(label => label.startsWith('cl-'))) {
+            core.setFailed("Every PR must have at least one label starting with 'cl-'.");
+          }
diff --git a/.github/workflows/linux-ci.yml b/.github/workflows/linux-ci.yml
new file mode 100644
index 00000000000..3277b8a0c17
--- /dev/null
+++ b/.github/workflows/linux-ci.yml
@@ -0,0 +1,264 @@
+name: Linux-CI
+
+run-name: "${{ github.ref_name }} - ${{ github.run_number }}"
+
+on:
+  workflow_dispatch:
+
+  push:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+    paths:
+      - "**"
+      - "*"
+      - ".globalconfig"
+      - "!.github/ISSUE_TEMPLATE/**"
+      - "!.dependabot/config.yml"
+      - "!.pipelines/**"
+      - "!test/perf/**"
+  pull_request:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+      - "*-feature"
+# Path filters for PRs need to go into the changes job
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+  cancel-in-progress: ${{ contains(github.ref, 'merge')}}
+
+env:
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  FORCE_FEATURE: 'False'
+  FORCE_PACKAGE: 'False'
+  NUGET_KEY: none
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+  system_debug: 'false'
+jobs:
+  changes:
+    if: startsWith(github.repository_owner, 'azure') || github.repository_owner == 'PowerShell'
+    name: Change Detection
+    runs-on: ubuntu-latest
+    # Required permissions
+    permissions:
+      pull-requests: read
+      contents: read
+
+    # Set job outputs to values from filter step
+    outputs:
+      source: ${{ steps.filter.outputs.source }}
+      buildModuleChanged: ${{ steps.filter.outputs.buildModuleChanged }}
+      packagingChanged: ${{ steps.filter.outputs.packagingChanged }}
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+
+      - name: Change Detection
+        id: filter
+        uses: "./.github/actions/infrastructure/path-filters"
+        with:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+  merge_conflict_check:
+    name: Check for Merge Conflict Markers
+    runs-on: ubuntu-latest
+    if: github.event_name == 'pull_request' && (startsWith(github.repository_owner, 'azure') || github.repository_owner == 'PowerShell')
+    permissions:
+      pull-requests: read
+      contents: read
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+      - name: Check for merge conflict markers
+        uses: "./.github/actions/infrastructure/merge-conflict-checker"
+
+  ci_build:
+    name: Build PowerShell
+    runs-on: ubuntu-latest
+    needs: changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+
+      - name: Build
+        uses: "./.github/actions/build/ci"
+  linux_test_unelevated_ci:
+    name: Linux Unelevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Linux Unelevated CI
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  linux_test_elevated_ci:
+    name: Linux Elevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Linux Elevated CI
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  linux_test_unelevated_others:
+    name: Linux Unelevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Linux Unelevated Others
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  linux_test_elevated_others:
+    name: Linux Elevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Linux Elevated Others
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  xunit_tests:
+    name: xUnit Tests
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    uses: ./.github/workflows/xunit-tests.yml
+    with:
+      runner_os: ubuntu-latest
+      test_results_artifact_name: testResults-xunit
+
+  infrastructure_tests:
+    name: Infrastructure Tests
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1
+
+      - name: Install Pester
+        shell: pwsh
+        run: |
+          Import-Module ./tools/ci.psm1
+          Install-CIPester
+
+      - name: Run Infrastructure Tests
+        shell: pwsh
+        run: |
+          $testResultsFolder = Join-Path $PWD "testResults"
+          New-Item -ItemType Directory -Path $testResultsFolder -Force | Out-Null
+
+          $config = New-PesterConfiguration
+          $config.Run.Path = './test/infrastructure/'
+          $config.Run.PassThru = $true
+          $config.TestResult.Enabled = $true
+          $config.TestResult.OutputFormat = 'NUnitXml'
+          $config.TestResult.OutputPath = "$testResultsFolder/InfrastructureTests.xml"
+          $config.Output.Verbosity = 'Detailed'
+
+          $result = Invoke-Pester -Configuration $config
+
+          if ($result.FailedCount -gt 0 -or $result.Result -eq 'Failed') {
+            throw "Infrastructure tests failed"
+          }
+
+      - name: Publish Test Results
+        uses: "./.github/actions/test/process-pester-results"
+        if: always()
+        with:
+          name: "InfrastructureTests"
+          testResultsFolder: "${{ github.workspace }}/testResults"
+
+  ## Temporarily disable the CodeQL analysis on Linux as it doesn't work for .NET SDK 10-rc.2.
+  # analyze:
+  #   name: CodeQL Analysis
+  #   needs: changes
+  #   if: ${{ needs.changes.outputs.source == 'true' }}
+  #   uses: ./.github/workflows/analyze-reusable.yml
+  #   permissions:
+  #     actions: read
+  #     contents: read
+  #     security-events: write
+  #   with:
+  #     runner_os: ubuntu-latest
+
+  ready_to_merge:
+    name: Linux ready to merge
+    needs:
+      - xunit_tests
+      - linux_test_elevated_ci
+      - linux_test_elevated_others
+      - linux_test_unelevated_ci
+      - linux_test_unelevated_others
+      - linux_packaging
+      - merge_conflict_check
+      - infrastructure_tests
+      # - analyze
+    if: always()
+    uses: PowerShell/compliance/.github/workflows/ready-to-merge.yml@c8b3ad5819ad7078f3e375519b4f8c6232d1cbdf # v1.0.0
+    with:
+      needs_context: ${{ toJson(needs) }}
+  linux_packaging:
+    name: Linux Packaging
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.packagingChanged == 'true' }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 0
+      - name: Linux Packaging
+        uses: "./.github/actions/test/linux-packaging"
diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml
new file mode 100644
index 00000000000..f89ce8caa83
--- /dev/null
+++ b/.github/workflows/macos-ci.yml
@@ -0,0 +1,250 @@
+name: macOS-CI
+
+run-name: "${{ github.ref_name }} - ${{ github.run_number }}"
+
+on:
+  push:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+    paths:
+      - "**"
+      - "*"
+      - ".globalconfig"
+      - "!.github/ISSUE_TEMPLATE/**"
+      - "!.dependabot/config.yml"
+      - "!.pipelines/**"
+      - "!test/perf/**"
+  pull_request:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+      - "*-feature"
+# Path filters for PRs need to go into the changes job
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+  cancel-in-progress: ${{ contains(github.ref, 'merge')}}
+
+env:
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  FORCE_FEATURE: 'False'
+  FORCE_PACKAGE: 'False'
+  HOMEBREW_NO_ANALYTICS: 1
+  NUGET_KEY: none
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+  system_debug: 'false'
+
+jobs:
+  changes:
+    name: Change Detection
+    runs-on: ubuntu-latest
+    if: startsWith(github.repository_owner, 'azure') || github.repository_owner == 'PowerShell'
+    # Required permissions
+    permissions:
+      pull-requests: read
+      contents: read
+
+    # Set job outputs to values from filter step
+    outputs:
+      source: ${{ steps.filter.outputs.source }}
+      buildModuleChanged: ${{ steps.filter.outputs.buildModuleChanged }}
+      packagingChanged: ${{ steps.filter.outputs.packagingChanged }}
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+      - name: Change Detection
+        id: filter
+        uses: "./.github/actions/infrastructure/path-filters"
+        with:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+  ci_build:
+    name: Build PowerShell
+    runs-on: macos-15-large
+    needs: changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Build
+        uses: "./.github/actions/build/ci"
+  macos_test_unelevated_ci:
+    name: macos Unelevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: macos-15-large
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: macOS Unelevated CI
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  macos_test_elevated_ci:
+    name: macOS Elevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: macos-15-large
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: macOS Elevated CI
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  macos_test_unelevated_others:
+    name: macOS Unelevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: macos-15-large
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: macOS Unelevated Others
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  macos_test_elevated_others:
+    name: macOS Elevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: macos-15-large
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: macOS Elevated Others
+        uses: "./.github/actions/test/nix"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  xunit_tests:
+    name: xUnit Tests
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    uses: ./.github/workflows/xunit-tests.yml
+    with:
+      runner_os: macos-15-large
+      test_results_artifact_name: testResults-xunit
+  PackageMac-macos_packaging:
+    name: macOS packaging and testing
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.packagingChanged == 'true' }}
+    runs-on:
+      - macos-15-large
+    steps:
+    - name: checkout
+      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+      with:
+        fetch-depth: 1000
+    - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
+      with:
+        global-json-file: ./global.json
+    - name: Bootstrap packaging
+      if: success()
+      run: |-
+        import-module ./build.psm1
+        start-psbootstrap -Scenario package
+      shell: pwsh
+    - name: Build PowerShell and Create macOS package
+      if: success()
+      run: |-
+        import-module ./build.psm1
+        import-module ./tools/ci.psm1
+        import-module ./tools/packaging/packaging.psm1
+        Switch-PSNugetConfig -Source Public
+        Sync-PSTags -AddRemoteIfMissing
+        $releaseTag = Get-ReleaseTag
+        Start-PSBuild -Configuration Release -PSModuleRestore -ReleaseTag $releaseTag
+        $macOSRuntime = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'osx-arm64' } else { 'osx-x64' }
+        Start-PSPackage -Type osxpkg -ReleaseTag $releaseTag -MacOSRuntime $macOSRuntime -SkipReleaseChecks
+      shell: pwsh
+
+    - name: Install Pester
+      if: success()
+      run: |-
+        Import-Module ./tools/ci.psm1
+        Install-CIPester
+      shell: pwsh
+
+    - name: Test package contents
+      if: success()
+      run: |-
+        $env:PACKAGE_FOLDER = Get-Location
+        $testResultsPath = Join-Path $env:RUNNER_WORKSPACE "testResults"
+        if (-not (Test-Path $testResultsPath)) {
+          New-Item -ItemType Directory -Path $testResultsPath -Force | Out-Null
+        }
+        Import-Module Pester
+        $pesterConfig = New-PesterConfiguration
+        $pesterConfig.Run.Path = './test/packaging/macos/package-validation.tests.ps1'
+        $pesterConfig.Run.PassThru = $true
+        $pesterConfig.Output.Verbosity = 'Detailed'
+        $pesterConfig.TestResult.Enabled = $true
+        $pesterConfig.TestResult.OutputFormat = 'NUnitXml'
+        $pesterConfig.TestResult.OutputPath = Join-Path $testResultsPath "macOSPackage.xml"
+        $result = Invoke-Pester -Configuration $pesterConfig
+        if ($result.FailedCount -gt 0) {
+          throw "Package validation failed with $($result.FailedCount) failed test(s)"
+        }
+      shell: pwsh
+    - name: Publish and Upload Pester Test Results
+      if: always()
+      uses: "./.github/actions/test/process-pester-results"
+      with:
+        name: "macOSPackage"
+        testResultsFolder: "${{ runner.workspace }}/testResults"
+    - name: Upload package artifact
+      if: always()
+      uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+      with:
+        name: macos-package
+        path: "*.pkg"
+  ready_to_merge:
+    name: macos ready to merge
+    needs:
+      - xunit_tests
+      - PackageMac-macos_packaging
+      - macos_test_elevated_ci
+      - macos_test_elevated_others
+      - macos_test_unelevated_ci
+      - macos_test_unelevated_others
+    if: always()
+    uses: PowerShell/compliance/.github/workflows/ready-to-merge.yml@c8b3ad5819ad7078f3e375519b4f8c6232d1cbdf # v1.0.0
+    with:
+      needs_context: ${{ toJson(needs) }}
diff --git a/.github/workflows/markdown-link/config.json b/.github/workflows/markdown-link/config.json
new file mode 100644
index 00000000000..87d65922a91
--- /dev/null
+++ b/.github/workflows/markdown-link/config.json
@@ -0,0 +1,7 @@
+{
+  "timeout": "40s",
+  "retryOn429": true,
+  "retryCount": 5,
+  "fallbackRetryDelay": "30s",
+  "aliveStatusCodes": [504, 503, 403, 200]
+}
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
new file mode 100644
index 00000000000..935c8ff93bb
--- /dev/null
+++ b/.github/workflows/scorecards.yml
@@ -0,0 +1,72 @@
+# This workflow uses actions that are not certified by GitHub. They are provided
+# by a third-party and are governed by separate terms of service, privacy
+# policy, and support documentation.
+
+name: Scorecard supply-chain security
+on:
+  # For Branch-Protection check. Only the default branch is supported. See
+  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
+  branch_protection_rule:
+  # To guarantee Maintained check is occasionally updated. See
+  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
+  schedule:
+    - cron: '20 7 * * 2'
+  push:
+    branches: ["master"]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+  analysis:
+    name: Scorecard analysis
+    if: github.repository_owner == 'PowerShell'
+    runs-on: ubuntu-latest
+    permissions:
+      # Needed to upload the results to code-scanning dashboard.
+      security-events: write
+      # Needed to publish results and get a badge (see publish_results below).
+      id-token: write
+      contents: read
+      actions: read
+
+    steps:
+      - name: "Checkout code"
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+
+      - name: "Run analysis"
+        uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
+        with:
+          results_file: results.sarif
+          results_format: sarif
+          # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+          # - you want to enable the Branch-Protection check on a *public* repository, or
+          # - you are installing Scorecards on a *private* repository
+          # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
+          # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+          # Public repositories:
+          #   - Publish results to OpenSSF REST API for easy access by consumers
+          #   - Allows the repository to include the Scorecard badge.
+          #   - See https://github.com/ossf/scorecard-action#publishing-results.
+          # For private repositories:
+          #   - `publish_results` will always be set to `false`, regardless
+          #     of the value entered here.
+          publish_results: true
+
+      # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+      # format to the repository Actions tab.
+      - name: "Upload artifact"
+        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+        with:
+          name: SARIF file
+          path: results.sarif
+          retention-days: 5
+
+      # Upload the results to GitHub's code scanning dashboard.
+      - name: "Upload to code-scanning"
+        uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3.29.5
+        with:
+          sarif_file: results.sarif
diff --git a/.github/workflows/verify-markdown-links.yml b/.github/workflows/verify-markdown-links.yml
new file mode 100644
index 00000000000..19da648a959
--- /dev/null
+++ b/.github/workflows/verify-markdown-links.yml
@@ -0,0 +1,32 @@
+name: Verify Markdown Links
+
+on:
+  push:
+    branches: [ main, master ]
+    paths:
+      - '**/*.md'
+      - '.github/workflows/verify-markdown-links.yml'
+      - '.github/actions/infrastructure/markdownlinks/**'
+  pull_request:
+    branches: [ main, master ]
+    paths:
+      - '**/*.md'
+  schedule:
+    # Run weekly on Sundays at midnight UTC to catch external link rot
+    - cron: '0 0 * * 0'
+  workflow_dispatch:
+
+jobs:
+  verify-markdown-links:
+    name: Verify Markdown Links
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+      - name: Verify markdown links
+        id: verify
+        uses: ./.github/actions/infrastructure/markdownlinks
+        with:
+          timeout-sec: 30
+          maximum-retry-count: 2
diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml
new file mode 100644
index 00000000000..42347d2e12f
--- /dev/null
+++ b/.github/workflows/windows-ci.yml
@@ -0,0 +1,196 @@
+name: Windows-CI
+on:
+  workflow_dispatch:
+  push:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+    paths:
+      - "**"
+      - "*"
+      - ".globalconfig"
+      - "!.vsts-ci/misc-analysis.yml"
+      - "!.github/ISSUE_TEMPLATE/**"
+      - "!.dependabot/config.yml"
+      - "!test/perf/**"
+      - "!.pipelines/**"
+  pull_request:
+    branches:
+      - master
+      - release/**
+      - github-mirror
+      - "servicing-*"
+      - "*-feature"
+
+# Path filters for PRs need to go into the changes job
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+  cancel-in-progress: ${{ contains(github.ref, 'merge')}}
+
+permissions:
+  contents: read
+
+run-name: "${{ github.ref_name }} - ${{ github.run_number }}"
+
+env:
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  GIT_CONFIG_PARAMETERS: "'core.autocrlf=false'"
+  NugetSecurityAnalysisWarningLevel: none
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+  SYSTEM_ARTIFACTSDIRECTORY: ${{ github.workspace }}/artifacts
+  BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts
+jobs:
+  changes:
+    name: Change Detection
+    runs-on: ubuntu-latest
+    if: startsWith(github.repository_owner, 'azure') || github.repository_owner == 'PowerShell'
+    # Required permissions
+    permissions:
+      pull-requests: read
+      contents: read
+
+    # Set job outputs to values from filter step
+    outputs:
+      source: ${{ steps.filter.outputs.source }}
+      buildModuleChanged: ${{ steps.filter.outputs.buildModuleChanged }}
+      packagingChanged: ${{ steps.filter.outputs.packagingChanged }}
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+      - name: Change Detection
+        id: filter
+        uses: "./.github/actions/infrastructure/path-filters"
+        with:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+  ci_build:
+    name: Build PowerShell
+    needs: changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: windows-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Build
+        uses: "./.github/actions/build/ci"
+  windows_test_unelevated_ci:
+    name: Windows Unelevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: windows-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Windows Unelevated CI
+        uses: "./.github/actions/test/windows"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  windows_test_elevated_ci:
+    name: Windows Elevated CI
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: windows-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Windows Elevated CI
+        uses: "./.github/actions/test/windows"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: CI
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  windows_test_unelevated_others:
+    name: Windows Unelevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: windows-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Windows Unelevated Others
+        uses: "./.github/actions/test/windows"
+        with:
+          purpose: UnelevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  windows_test_elevated_others:
+    name: Windows Elevated Others
+    needs:
+      - ci_build
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    runs-on: windows-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+      - name: Windows Elevated Others
+        uses: "./.github/actions/test/windows"
+        with:
+          purpose: ElevatedPesterTests
+          tagSet: Others
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+  xunit_tests:
+    name: xUnit Tests
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    uses: ./.github/workflows/xunit-tests.yml
+    with:
+      runner_os: windows-latest
+      test_results_artifact_name: testResults-xunit
+  analyze:
+    name: CodeQL Analysis
+    needs: changes
+    if: ${{ needs.changes.outputs.source == 'true' || needs.changes.outputs.buildModuleChanged == 'true' }}
+    uses: ./.github/workflows/analyze-reusable.yml
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+    with:
+      runner_os: windows-latest
+  windows_packaging:
+    name: Windows Packaging
+    needs:
+      - changes
+    if: ${{ needs.changes.outputs.packagingChanged == 'true' }}
+    uses: ./.github/workflows/windows-packaging-reusable.yml
+  ready_to_merge:
+    name: windows ready to merge
+    needs:
+      - xunit_tests
+      - windows_test_elevated_ci
+      - windows_test_elevated_others
+      - windows_test_unelevated_ci
+      - windows_test_unelevated_others
+      - analyze
+      - windows_packaging
+    if: always()
+    uses: PowerShell/compliance/.github/workflows/ready-to-merge.yml@c8b3ad5819ad7078f3e375519b4f8c6232d1cbdf # v1.0.0
+    with:
+      needs_context: ${{ toJson(needs) }}
diff --git a/.github/workflows/windows-packaging-reusable.yml b/.github/workflows/windows-packaging-reusable.yml
new file mode 100644
index 00000000000..8d0255d4443
--- /dev/null
+++ b/.github/workflows/windows-packaging-reusable.yml
@@ -0,0 +1,92 @@
+name: Windows Packaging (Reusable)
+
+on:
+  workflow_call:
+
+env:
+  GIT_CONFIG_PARAMETERS: "'core.autocrlf=false'"
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+  SYSTEM_ARTIFACTSDIRECTORY: ${{ github.workspace }}/artifacts
+  BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts
+
+permissions:
+  contents: read
+
+jobs:
+  package:
+    name: ${{ matrix.architecture }} - ${{ matrix.channel }}
+    runs-on: windows-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - architecture: x64
+            channel: preview
+            runtimePrefix: win7
+          - architecture: x86
+            channel: stable
+            runtimePrefix: win7
+          - architecture: x86
+            channel: preview
+            runtimePrefix: win7
+          - architecture: arm64
+            channel: preview
+            runtimePrefix: win
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+
+      - name: Capture Environment
+        if: success() || failure()
+        run: |
+          Import-Module .\tools\ci.psm1
+          Show-Environment
+        shell: pwsh
+
+      - name: Capture PowerShell Version Table
+        if: success() || failure()
+        run: |
+          $PSVersionTable
+        shell: pwsh
+
+      - name: Switch to Public Feeds
+        if: success()
+        run: |
+          Import-Module .\tools\ci.psm1
+          Switch-PSNugetConfig -Source Public
+        shell: pwsh
+
+      - name: Setup .NET
+        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
+        with:
+          global-json-file: ./global.json
+
+      - name: Bootstrap
+        if: success()
+        run: |
+          Import-Module .\tools\ci.psm1
+          Invoke-CIInstall -SkipUser
+        shell: pwsh
+
+      - name: Build and Package
+        run: |
+          Import-Module .\tools\ci.psm1
+          New-CodeCoverageAndTestPackage
+          Invoke-CIFinish -Runtime ${{ matrix.runtimePrefix }}-${{ matrix.architecture }} -channel ${{ matrix.channel }}
+        shell: pwsh
+
+      - name: Upload Build Artifacts
+        if: always()
+        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+        with:
+          name: windows-packaging-${{ matrix.architecture }}-${{ matrix.channel }}
+          path: |
+            ${{ github.workspace }}/artifacts/**/*
+            !${{ github.workspace }}/artifacts/**/*.pdb
diff --git a/.github/workflows/xunit-tests.yml b/.github/workflows/xunit-tests.yml
new file mode 100644
index 00000000000..c643917edd0
--- /dev/null
+++ b/.github/workflows/xunit-tests.yml
@@ -0,0 +1,56 @@
+name: xUnit Tests (Reusable)
+
+on:
+  workflow_call:
+    inputs:
+      runner_os:
+        description: 'Runner OS for xUnit tests'
+        type: string
+        required: false
+        default: ubuntu-latest
+      test_results_artifact_name:
+        description: 'Artifact name for xUnit test results directory'
+        type: string
+        required: false
+        default: testResults-xunit
+
+permissions:
+  contents: read
+
+jobs:
+  xunit:
+    name: Run xUnit Tests
+    runs-on: ${{ inputs.runner_os }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          fetch-depth: 1000
+
+      - name: Setup .NET
+        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
+        with:
+          global-json-file: ./global.json
+
+      - name: Bootstrap
+        shell: pwsh
+        run: |
+          Import-Module ./tools/ci.psm1
+          Invoke-CIInstall -SkipUser
+          Sync-PSTags -AddRemoteIfMissing
+
+      - name: Build PowerShell and run xUnit tests
+        shell: pwsh
+        run: |
+          Import-Module ./tools/ci.psm1
+          Start-PSBuild
+          Write-Host "Running full xUnit test suite (no skipping)..."
+          Invoke-CIxUnit
+          Write-Host "Completed xUnit test run."
+
+      - name: Upload xUnit results
+        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+        if: always()
+        with:
+          name: ${{ inputs.test_results_artifact_name }}
+          path: ${{ github.workspace }}/xUnitTestResults.xml
diff --git a/.gitignore b/.gitignore
index fb19bcffa77..48556cf1b8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ project.lock.json
 # dotnet cli install/uninstall scripts
 dotnet-install.ps1
 dotnet-install.sh
+dotnet-install.sh.*
 dotnet-uninstall-pkgs.sh
 dotnet-uninstall-debian-packages.sh
 
@@ -82,6 +83,9 @@ TestsResults*.xml
 ParallelXUnitResults.xml
 xUnitResults.xml
 
+# Attack Surface Analyzer results
+asa-results/
+
 # Resharper settings
 PowerShell.sln.DotSettings.user
 *.msp
@@ -89,3 +93,34 @@ StyleCop.Cache
 
 # Ignore SelfSignedCertificate autogenerated files
 test/tools/Modules/SelfSignedCertificate/
+
+# BenchmarkDotNet artifacts
+test/perf/BenchmarkDotNet.Artifacts/
+
+# Test generated module
+test/tools/Modules/Microsoft.PowerShell.NamedPipeConnection/
+
+# Test generated startup profile
+StartupProfileData-NonInteractive
+
+# Ignore logfiles
+logfile/*
+
+# Ignore nuget.config because it is dynamically generated
+nuget.config
+
+# Ignore MSBuild Binary Logs
+msbuild.binlog
+
+# Ignore gzip files in the manpage folder
+assets/manpage/*.gz
+
+# Ignore files and folders generated by some gh cli extensions
+tmp/*
+.env.local
+
+# Pester test failure analysis results (generated by analyze-pr-test-failures.ps1)
+**/pester-analysis-*/
+
+# Ignore CTRF report files
+crtf/*
diff --git a/.globalconfig b/.globalconfig
index e5cb35160fb..e0dd4ccb9e5 100644
--- a/.globalconfig
+++ b/.globalconfig
@@ -1,1554 +1,2293 @@
 is_global = true
 
 # CA1000: Do not declare static members on generic types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1000
 dotnet_diagnostic.CA1000.severity = warning
-dotnet_code_quality.ca1000.api_surface = all
+dotnet_code_quality.CA1000.api_surface = all
 
 # CA1001: Types that own disposable fields should be disposable
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1001
 dotnet_diagnostic.CA1001.severity = silent
 
 # CA1002: Do not expose generic lists
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1002
 dotnet_diagnostic.CA1002.severity = none
 
 # CA1003: Use generic event handler instances
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1003
 dotnet_diagnostic.CA1003.severity = warning
-dotnet_code_quality.ca1003.api_surface = private, internal
+dotnet_code_quality.CA1003.api_surface = private, internal
 
 # CA1005: Avoid excessive parameters on generic types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1005
 dotnet_diagnostic.CA1005.severity = none
 
 # CA1008: Enums should have zero value
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1008
 dotnet_diagnostic.CA1008.severity = none
+dotnet_code_quality.CA1008.api_surface = public
 
 # CA1010: Generic interface should also be implemented
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1010
 dotnet_diagnostic.CA1010.severity = silent
+dotnet_code_quality.CA1010.api_surface = public
 
 # CA1012: Abstract types should not have public constructors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1012
 dotnet_diagnostic.CA1012.severity = warning
-dotnet_code_quality.ca1012.api_surface = all
+dotnet_code_quality.CA1012.api_surface = all
 
 # CA1014: Mark assemblies with CLSCompliant
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1014
 dotnet_diagnostic.CA1014.severity = none
 
 # CA1016: Mark assemblies with assembly version
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1016
 dotnet_diagnostic.CA1016.severity = warning
 
 # CA1017: Mark assemblies with ComVisible
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1017
 dotnet_diagnostic.CA1017.severity = none
 
 # CA1018: Mark attributes with AttributeUsageAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1018
 dotnet_diagnostic.CA1018.severity = warning
 
 # CA1019: Define accessors for attribute arguments
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1019
 dotnet_diagnostic.CA1019.severity = none
 
 # CA1021: Avoid out parameters
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1021
 dotnet_diagnostic.CA1021.severity = none
 
 # CA1024: Use properties where appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1024
 dotnet_diagnostic.CA1024.severity = none
+dotnet_code_quality.CA1024.api_surface = public
 
 # CA1027: Mark enums with FlagsAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1027
 dotnet_diagnostic.CA1027.severity = none
+dotnet_code_quality.CA1027.api_surface = public
 
 # CA1028: Enum Storage should be Int32
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1028
 dotnet_diagnostic.CA1028.severity = none
+dotnet_code_quality.CA1028.api_surface = public
 
 # CA1030: Use events where appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1030
 dotnet_diagnostic.CA1030.severity = none
+dotnet_code_quality.CA1030.api_surface = public
 
 # CA1031: Do not catch general exception types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1031
 dotnet_diagnostic.CA1031.severity = none
 
 # CA1032: Implement standard exception constructors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1032
 dotnet_diagnostic.CA1032.severity = none
 
 # CA1033: Interface methods should be callable by child types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1033
 dotnet_diagnostic.CA1033.severity = none
 
 # CA1034: Nested types should not be visible
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1034
 dotnet_diagnostic.CA1034.severity = none
 
 # CA1036: Override methods on comparable types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1036
 dotnet_diagnostic.CA1036.severity = silent
+dotnet_code_quality.CA1036.api_surface = public
 
 # CA1040: Avoid empty interfaces
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1040
 dotnet_diagnostic.CA1040.severity = none
+dotnet_code_quality.CA1040.api_surface = public
 
 # CA1041: Provide ObsoleteAttribute message
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1041
 dotnet_diagnostic.CA1041.severity = warning
+dotnet_code_quality.CA1041.api_surface = public
 
 # CA1043: Use Integral Or String Argument For Indexers
-dotnet_diagnostic.CA1043.severity = none
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1043
+dotnet_diagnostic.CA1043.severity = warning
+dotnet_code_quality.CA1043.api_surface = all
 
 # CA1044: Properties should not be write only
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1044
 dotnet_diagnostic.CA1044.severity = none
+dotnet_code_quality.CA1044.api_surface = public
 
 # CA1045: Do not pass types by reference
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1045
 dotnet_diagnostic.CA1045.severity = none
 
 # CA1046: Do not overload equality operator on reference types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1046
 dotnet_diagnostic.CA1046.severity = none
 
 # CA1047: Do not declare protected member in sealed type
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1047
 dotnet_diagnostic.CA1047.severity = warning
 
 # CA1050: Declare types in namespaces
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1050
 dotnet_diagnostic.CA1050.severity = warning
 
 # CA1051: Do not declare visible instance fields
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1051
 dotnet_diagnostic.CA1051.severity = silent
+dotnet_code_quality.CA1051.api_surface = public
 
 # CA1052: Static holder types should be Static or NotInheritable
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1052
 dotnet_diagnostic.CA1052.severity = warning
-dotnet_code_quality.ca1052.api_surface = private, internal
+dotnet_code_quality.CA1052.api_surface = all
 
 # CA1054: URI-like parameters should not be strings
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1054
 dotnet_diagnostic.CA1054.severity = none
+dotnet_code_quality.CA1054.api_surface = public
 
 # CA1055: URI-like return values should not be strings
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1055
 dotnet_diagnostic.CA1055.severity = none
+dotnet_code_quality.CA1055.api_surface = public
 
 # CA1056: URI-like properties should not be strings
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1056
 dotnet_diagnostic.CA1056.severity = none
+dotnet_code_quality.CA1056.api_surface = public
 
 # CA1058: Types should not extend certain base types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1058
 dotnet_diagnostic.CA1058.severity = none
+dotnet_code_quality.CA1058.api_surface = public
 
 # CA1060: Move pinvokes to native methods class
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1060
 dotnet_diagnostic.CA1060.severity = none
 
 # CA1061: Do not hide base class methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1061
 dotnet_diagnostic.CA1061.severity = warning
 
 # CA1062: Validate arguments of public methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1062
 dotnet_diagnostic.CA1062.severity = none
 
 # CA1063: Implement IDisposable Correctly
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1063
 dotnet_diagnostic.CA1063.severity = none
+dotnet_code_quality.CA1063.api_surface = public
 
 # CA1064: Exceptions should be public
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1064
 dotnet_diagnostic.CA1064.severity = none
 
 # CA1065: Do not raise exceptions in unexpected locations
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1065
 dotnet_diagnostic.CA1065.severity = warning
 
 # CA1066: Implement IEquatable when overriding Object.Equals
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1066
 dotnet_diagnostic.CA1066.severity = none
 
 # CA1067: Override Object.Equals(object) when implementing IEquatable<T>
-dotnet_diagnostic.CA1067.severity = suggestion
+# # https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1067
+dotnet_diagnostic.CA1067.severity = warning
 
 # CA1068: CancellationToken parameters must come last
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1068
 dotnet_diagnostic.CA1068.severity = warning
 
 # CA1069: Enums values should not be duplicated
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1069
 dotnet_diagnostic.CA1069.severity = suggestion
 
 # CA1070: Do not declare event fields as virtual
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1070
 dotnet_diagnostic.CA1070.severity = warning
 
 # CA1200: Avoid using cref tags with a prefix
-dotnet_diagnostic.CA1200.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1200
+dotnet_diagnostic.CA1200.severity = warning
 
 # CA1303: Do not pass literals as localized parameters
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1303
 dotnet_diagnostic.CA1303.severity = none
 
 # CA1304: Specify CultureInfo
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1304
 dotnet_diagnostic.CA1304.severity = silent
 
 # CA1305: Specify IFormatProvider
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1305
 dotnet_diagnostic.CA1305.severity = silent
 
 # CA1307: Specify StringComparison for clarity
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1307
 dotnet_diagnostic.CA1307.severity = none
 
 # CA1308: Normalize strings to uppercase
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1308
 dotnet_diagnostic.CA1308.severity = none
 
 # CA1309: Use ordinal string comparison
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1309
 dotnet_diagnostic.CA1309.severity = silent
 
 # CA1310: Specify StringComparison for correctness
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310
 dotnet_diagnostic.CA1310.severity = silent
 
 # CA1401: P/Invokes should not be visible
-dotnet_diagnostic.CA1401.severity = suggestion
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1401
+dotnet_diagnostic.CA1401.severity = warning
 
 # CA1416: Validate platform compatibility
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1416
 dotnet_diagnostic.CA1416.severity = warning
 
 # CA1417: Do not use 'OutAttribute' on string parameters for P/Invokes
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1417
 dotnet_diagnostic.CA1417.severity = warning
 
+# CA1418: Use valid platform string
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1418
+dotnet_diagnostic.CA1418.severity = warning
+
 # CA1501: Avoid excessive inheritance
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1501
 dotnet_diagnostic.CA1501.severity = none
 
 # CA1502: Avoid excessive complexity
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1502
 dotnet_diagnostic.CA1502.severity = none
 
 # CA1505: Avoid unmaintainable code
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1505
 dotnet_diagnostic.CA1505.severity = none
 
 # CA1506: Avoid excessive class coupling
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1506
 dotnet_diagnostic.CA1506.severity = none
 
 # CA1507: Use nameof to express symbol names
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1507
 dotnet_diagnostic.CA1507.severity = suggestion
 
 # CA1508: Avoid dead conditional code
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1508
 dotnet_diagnostic.CA1508.severity = none
 
 # CA1509: Invalid entry in code metrics rule specification file
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1509
 dotnet_diagnostic.CA1509.severity = none
 
 # CA1700: Do not name enum values 'Reserved'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1700
 dotnet_diagnostic.CA1700.severity = none
 
 # CA1707: Identifiers should not contain underscores
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1707
 dotnet_diagnostic.CA1707.severity = silent
 
 # CA1708: Identifiers should differ by more than case
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1708
 dotnet_diagnostic.CA1708.severity = silent
+dotnet_code_quality.CA1708.api_surface = public
 
 # CA1710: Identifiers should have correct suffix
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1710
 dotnet_diagnostic.CA1710.severity = silent
+dotnet_code_quality.CA1710.api_surface = public
 
 # CA1711: Identifiers should not have incorrect suffix
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1711
 dotnet_diagnostic.CA1711.severity = silent
+dotnet_code_quality.CA1711.api_surface = public
 
 # CA1712: Do not prefix enum values with type name
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1712
 dotnet_diagnostic.CA1712.severity = silent
 
 # CA1713: Events should not have 'Before' or 'After' prefix
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1713
 dotnet_diagnostic.CA1713.severity = none
 
 # CA1715: Identifiers should have correct prefix
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1715
 dotnet_diagnostic.CA1715.severity = silent
+dotnet_code_quality.CA1715.api_surface = public
 
 # CA1716: Identifiers should not match keywords
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1716
 dotnet_diagnostic.CA1716.severity = silent
+dotnet_code_quality.CA1716.api_surface = public
 
 # CA1720: Identifier contains type name
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1720
 dotnet_diagnostic.CA1720.severity = silent
+dotnet_code_quality.CA1720.api_surface = public
 
 # CA1721: Property names should not match get methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1721
 dotnet_diagnostic.CA1721.severity = none
+dotnet_code_quality.CA1721.api_surface = public
 
 # CA1724: Type names should not match namespaces
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1724
 dotnet_diagnostic.CA1724.severity = none
 
 # CA1725: Parameter names should match base declaration
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1725
 dotnet_diagnostic.CA1725.severity = silent
+dotnet_code_quality.CA1725.api_surface = public
 
 # CA1801: Review unused parameters
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1801
 dotnet_diagnostic.CA1801.severity = none
+dotnet_code_quality.CA1801.api_surface = all
 
 # CA1802: Use literals where appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1802
 dotnet_diagnostic.CA1802.severity = none
+dotnet_code_quality.CA1802.api_surface = public
 
 # CA1805: Do not initialize unnecessarily
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1805
 dotnet_diagnostic.CA1805.severity = suggestion
 
 # CA1806: Do not ignore method results
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1806
 dotnet_diagnostic.CA1806.severity = suggestion
 
 # CA1810: Initialize reference type static fields inline
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1810
 dotnet_diagnostic.CA1810.severity = none
 
 # CA1812: Avoid uninstantiated internal classes
-dotnet_diagnostic.CA1812.severity = none
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1812
+dotnet_diagnostic.CA1812.severity = warning
 
 # CA1813: Avoid unsealed attributes
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1813
 dotnet_diagnostic.CA1813.severity = none
 
 # CA1814: Prefer jagged arrays over multidimensional
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1814
 dotnet_diagnostic.CA1814.severity = none
 
 # CA1815: Override equals and operator equals on value types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1815
 dotnet_diagnostic.CA1815.severity = none
+dotnet_code_quality.CA1815.api_surface = public
 
 # CA1816: Dispose methods should call SuppressFinalize
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1816
 dotnet_diagnostic.CA1816.severity = warning
 
 # CA1819: Properties should not return arrays
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1819
 dotnet_diagnostic.CA1819.severity = none
+dotnet_code_quality.CA1819.api_surface = public
 
 # CA1820: Test for empty strings using string length
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1820
 dotnet_diagnostic.CA1820.severity = none
 
 # CA1821: Remove empty Finalizers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1821
 dotnet_diagnostic.CA1821.severity = warning
 
 # CA1822: Mark members as static
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1822
 dotnet_diagnostic.CA1822.severity = warning
-dotnet_code_quality.ca1822.api_surface = private
+dotnet_code_quality.CA1822.api_surface = private
 
 # CA1823: Avoid unused private fields
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1823
 dotnet_diagnostic.CA1823.severity = none
 
 # CA1824: Mark assemblies with NeutralResourcesLanguageAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1824
 dotnet_diagnostic.CA1824.severity = warning
 
 # CA1825: Avoid zero-length array allocations
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1825
 dotnet_diagnostic.CA1825.severity = warning
 
 # CA1826: Do not use Enumerable methods on indexable collections
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1826
 dotnet_diagnostic.CA1826.severity = warning
 
 # CA1827: Do not use Count() or LongCount() when Any() can be used
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1827
 dotnet_diagnostic.CA1827.severity = warning
 
 # CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1828
 dotnet_diagnostic.CA1828.severity = warning
 
 # CA1829: Use Length/Count property instead of Count() when available
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1829
 dotnet_diagnostic.CA1829.severity = warning
 
 # CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1830
 dotnet_diagnostic.CA1830.severity = warning
 
 # CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1831
 dotnet_diagnostic.CA1831.severity = warning
 
 # CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1832
 dotnet_diagnostic.CA1832.severity = warning
 
 # CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1833
 dotnet_diagnostic.CA1833.severity = warning
 
 # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1834
 dotnet_diagnostic.CA1834.severity = warning
 
 # CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1835
 dotnet_diagnostic.CA1835.severity = suggestion
 
 # CA1836: Prefer IsEmpty over Count
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1836
 dotnet_diagnostic.CA1836.severity = warning
 
 # CA1837: Use 'Environment.ProcessId'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1837
 dotnet_diagnostic.CA1837.severity = warning
 
 # CA1838: Avoid 'StringBuilder' parameters for P/Invokes
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1838
 dotnet_diagnostic.CA1838.severity = silent
 
+# CA1839: Use 'Environment.ProcessPath'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1839
+dotnet_diagnostic.CA1839.severity = warning
+
+# CA1840: Use 'Environment.CurrentManagedThreadId'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1840
+dotnet_diagnostic.CA1840.severity = warning
+
+# CA1841: Prefer Dictionary.Contains methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1841
+dotnet_diagnostic.CA1841.severity = warning
+
+# CA1842: Do not use 'WhenAll' with a single task
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1842
+dotnet_diagnostic.CA1842.severity = warning
+
+# CA1843: Do not use 'WaitAll' with a single task
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1843
+dotnet_diagnostic.CA1843.severity = warning
+
+# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1844
+dotnet_diagnostic.CA1844.severity = warning
+
+# CA1845: Use span-based 'string.Concat'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1845
+dotnet_diagnostic.CA1845.severity = warning
+
+# CA1846: Prefer 'AsSpan' over 'Substring'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1846
+dotnet_diagnostic.CA1846.severity = warning
+
+# CA1847: Use char literal for a single character lookup
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1847
+dotnet_diagnostic.CA1847.severity = warning
+
+# CA1852: Seal internal types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1852
+dotnet_diagnostic.CA1852.severity = warning
+
+# CA1853: Unnecessary call to 'Dictionary.ContainsKey(key)'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1853
+dotnet_diagnostic.CA1853.severity = warning
+
+# CA1858: Use 'StartsWith' instead of 'IndexOf'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1858
+dotnet_diagnostic.CA1858.severity = warning
+
+# CA1860: Avoid using 'Enumerable.Any()' extension method
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1860
+dotnet_diagnostic.CA1860.severity = warning
+
+# CA1865: Use char overload
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1865
+dotnet_diagnostic.CA1865.severity = warning
+
+# CA1866: Use char overload
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1866
+dotnet_diagnostic.CA1866.severity = warning
+
+# CA1867: Use char overload
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1867
+dotnet_diagnostic.CA1867.severity = warning
+
+# CA1868: Unnecessary call to 'Contains' for sets
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1868
+dotnet_diagnostic.CA1868.severity = warning
+
 # CA2000: Dispose objects before losing scope
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2000
 dotnet_diagnostic.CA2000.severity = none
 
 # CA2002: Do not lock on objects with weak identity
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2002
 dotnet_diagnostic.CA2002.severity = none
 
 # CA2007: Consider calling ConfigureAwait on the awaited task
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2007
 dotnet_diagnostic.CA2007.severity = none
 
 # CA2008: Do not create tasks without passing a TaskScheduler
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2008
 dotnet_diagnostic.CA2008.severity = none
 
 # CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2009
 dotnet_diagnostic.CA2009.severity = warning
 
 # CA2011: Avoid infinite recursion
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2011
 dotnet_diagnostic.CA2011.severity = warning
 
 # CA2012: Use ValueTasks correctly
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2012
 dotnet_diagnostic.CA2012.severity = warning
 
 # CA2013: Do not use ReferenceEquals with value types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2013
 dotnet_diagnostic.CA2013.severity = warning
 
 # CA2014: Do not use stackalloc in loops
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2014
 dotnet_diagnostic.CA2014.severity = warning
 
 # CA2015: Do not define finalizers for types derived from MemoryManager<T>
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2015
 dotnet_diagnostic.CA2015.severity = warning
 
 # CA2016: Forward the 'CancellationToken' parameter to methods that take one
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2016
 dotnet_diagnostic.CA2016.severity = suggestion
 
+# CA2021: Do not call Enumerable.Cast<T> or Enumerable.OfType<T> with incompatible types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2021
+dotnet_diagnostic.CA2021.severity = warning
+
+# CA2022: Avoid inexact read with 'Stream.Read'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2022
+dotnet_diagnostic.CA2022.severity = warning
+
 # CA2100: Review SQL queries for security vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2100
 dotnet_diagnostic.CA2100.severity = none
 
 # CA2101: Specify marshaling for P/Invoke string arguments
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2101
 dotnet_diagnostic.CA2101.severity = suggestion
 
 # CA2109: Review visible event handlers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2109
 dotnet_diagnostic.CA2109.severity = none
 
 # CA2119: Seal methods that satisfy private interfaces
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2119
 dotnet_diagnostic.CA2119.severity = none
 
 # CA2153: Do Not Catch Corrupted State Exceptions
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2153
 dotnet_diagnostic.CA2153.severity = none
 
 # CA2200: Rethrow to preserve stack details
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2200
 dotnet_diagnostic.CA2200.severity = warning
 
 # CA2201: Do not raise reserved exception types
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2201
 dotnet_diagnostic.CA2201.severity = silent
 
 # CA2207: Initialize value type static fields inline
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2207
 dotnet_diagnostic.CA2207.severity = warning
 
 # CA2208: Instantiate argument exceptions correctly
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2208
 dotnet_diagnostic.CA2208.severity = suggestion
+dotnet_code_quality.CA2208.api_surface = all
 
 # CA2211: Non-constant fields should not be visible
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2211
 dotnet_diagnostic.CA2211.severity = warning
 
 # CA2213: Disposable fields should be disposed
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2213
 dotnet_diagnostic.CA2213.severity = none
 
 # CA2214: Do not call overridable methods in constructors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2214
 dotnet_diagnostic.CA2214.severity = none
 
 # CA2215: Dispose methods should call base class dispose
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2215
 dotnet_diagnostic.CA2215.severity = silent
 
 # CA2216: Disposable types should declare finalizer
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2216
 dotnet_diagnostic.CA2216.severity = warning
 
 # CA2217: Do not mark enums with FlagsAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2217
 dotnet_diagnostic.CA2217.severity = none
+dotnet_code_quality.CA2217.api_surface = public
 
 # CA2218: Override GetHashCode on overriding Equals
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2218
 dotnet_diagnostic.CA2218.severity = suggestion
 
 # CA2219: Do not raise exceptions in finally clauses
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2219
 dotnet_diagnostic.CA2219.severity = suggestion
 
 # CA2224: Override Equals on overloading operator equals
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2224
 dotnet_diagnostic.CA2224.severity = suggestion
 
 # CA2225: Operator overloads have named alternates
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2225
 dotnet_diagnostic.CA2225.severity = none
+dotnet_code_quality.CA2225.api_surface = public
 
 # CA2226: Operators should have symmetrical overloads
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2226
 dotnet_diagnostic.CA2226.severity = none
+dotnet_code_quality.CA2226.api_surface = public
 
 # CA2227: Collection properties should be read only
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2227
 dotnet_diagnostic.CA2227.severity = none
 
 # CA2229: Implement serialization constructors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2229
 dotnet_diagnostic.CA2229.severity = silent
 
 # CA2231: Overload operator equals on overriding value type Equals
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2231
 dotnet_diagnostic.CA2231.severity = suggestion
+dotnet_code_quality.CA2231.api_surface = public
 
 # CA2234: Pass system uri objects instead of strings
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2234
 dotnet_diagnostic.CA2234.severity = none
+dotnet_code_quality.CA2234.api_surface = public
 
 # CA2235: Mark all non-serializable fields
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2235
 dotnet_diagnostic.CA2235.severity = none
 
 # CA2237: Mark ISerializable types with serializable
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2237
 dotnet_diagnostic.CA2237.severity = none
 
 # CA2241: Provide correct arguments to formatting methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2241
 dotnet_diagnostic.CA2241.severity = suggestion
 
 # CA2242: Test for NaN correctly
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2242
 dotnet_diagnostic.CA2242.severity = suggestion
 
 # CA2243: Attribute string literals should parse correctly
-dotnet_diagnostic.CA2243.severity = none
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2243
+dotnet_diagnostic.CA2243.severity = warning
 
 # CA2244: Do not duplicate indexed element initializations
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2244
 dotnet_diagnostic.CA2244.severity = suggestion
 
 # CA2245: Do not assign a property to itself
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2245
 dotnet_diagnostic.CA2245.severity = suggestion
 
 # CA2246: Assigning symbol and its member in the same statement
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2246
 dotnet_diagnostic.CA2246.severity = suggestion
 
 # CA2247: Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2247
 dotnet_diagnostic.CA2247.severity = warning
 
 # CA2248: Provide correct 'enum' argument to 'Enum.HasFlag'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2248
 dotnet_diagnostic.CA2248.severity = suggestion
 
 # CA2249: Consider using 'string.Contains' instead of 'string.IndexOf'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2249
 dotnet_diagnostic.CA2249.severity = warning
 
+# CA2250: Use 'ThrowIfCancellationRequested'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2250
+dotnet_diagnostic.CA2250.severity = warning
+
+# CA2251: Use 'string.Equals'
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2251
+dotnet_diagnostic.CA2251.severity = warning
+
+# CA2252: This API requires opting into preview features
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2252
+dotnet_diagnostic.CA2251.severity = none
+
 # CA2300: Do not use insecure deserializer BinaryFormatter
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2300
 dotnet_diagnostic.CA2300.severity = none
 
 # CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2301
 dotnet_diagnostic.CA2301.severity = none
 
 # CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2302
 dotnet_diagnostic.CA2302.severity = none
 
 # CA2305: Do not use insecure deserializer LosFormatter
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2305
 dotnet_diagnostic.CA2305.severity = none
 
 # CA2310: Do not use insecure deserializer NetDataContractSerializer
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2310
 dotnet_diagnostic.CA2310.severity = none
 
 # CA2311: Do not deserialize without first setting NetDataContractSerializer.Binder
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2311
 dotnet_diagnostic.CA2311.severity = none
 
 # CA2312: Ensure NetDataContractSerializer.Binder is set before deserializing
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2312
 dotnet_diagnostic.CA2312.severity = none
 
 # CA2315: Do not use insecure deserializer ObjectStateFormatter
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2315
 dotnet_diagnostic.CA2315.severity = none
 
 # CA2321: Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2321
 dotnet_diagnostic.CA2321.severity = none
 
 # CA2322: Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2322
 dotnet_diagnostic.CA2322.severity = none
 
 # CA2326: Do not use TypeNameHandling values other than None
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2326
 dotnet_diagnostic.CA2326.severity = none
 
 # CA2327: Do not use insecure JsonSerializerSettings
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2327
 dotnet_diagnostic.CA2327.severity = none
 
 # CA2328: Ensure that JsonSerializerSettings are secure
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2328
 dotnet_diagnostic.CA2328.severity = none
 
 # CA2329: Do not deserialize with JsonSerializer using an insecure configuration
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2329
 dotnet_diagnostic.CA2329.severity = none
 
 # CA2330: Ensure that JsonSerializer has a secure configuration when deserializing
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2330
 dotnet_diagnostic.CA2330.severity = none
 
 # CA2350: Do not use DataTable.ReadXml() with untrusted data
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2350
 dotnet_diagnostic.CA2350.severity = none
 
 # CA2351: Do not use DataSet.ReadXml() with untrusted data
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2351
 dotnet_diagnostic.CA2351.severity = none
 
 # CA2352: Unsafe DataSet or DataTable in serializable type can be vulnerable to remote code execution attacks
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2352
 dotnet_diagnostic.CA2352.severity = none
 
 # CA2353: Unsafe DataSet or DataTable in serializable type
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2353
 dotnet_diagnostic.CA2353.severity = none
 
 # CA2354: Unsafe DataSet or DataTable in deserialized object graph can be vulnerable to remote code execution attacks
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2354
 dotnet_diagnostic.CA2354.severity = none
 
 # CA2355: Unsafe DataSet or DataTable type found in deserializable object graph
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2355
 dotnet_diagnostic.CA2355.severity = none
 
 # CA2356: Unsafe DataSet or DataTable type in web deserializable object graph
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2356
 dotnet_diagnostic.CA2356.severity = none
 
 # CA2361: Ensure autogenerated class containing DataSet.ReadXml() is not used with untrusted data
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2361
 dotnet_diagnostic.CA2361.severity = none
 
 # CA2362: Unsafe DataSet or DataTable in autogenerated serializable type can be vulnerable to remote code execution attacks
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2362
 dotnet_diagnostic.CA2362.severity = none
 
 # CA3001: Review code for SQL injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3001
 dotnet_diagnostic.CA3001.severity = none
 
 # CA3002: Review code for XSS vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3002
 dotnet_diagnostic.CA3002.severity = none
 
 # CA3003: Review code for file path injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3003
 dotnet_diagnostic.CA3003.severity = none
 
 # CA3004: Review code for information disclosure vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3004
 dotnet_diagnostic.CA3004.severity = none
 
 # CA3005: Review code for LDAP injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3005
 dotnet_diagnostic.CA3005.severity = none
 
 # CA3006: Review code for process command injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3006
 dotnet_diagnostic.CA3006.severity = none
 
 # CA3007: Review code for open redirect vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3007
 dotnet_diagnostic.CA3007.severity = none
 
 # CA3008: Review code for XPath injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3008
 dotnet_diagnostic.CA3008.severity = none
 
 # CA3009: Review code for XML injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3009
 dotnet_diagnostic.CA3009.severity = none
 
 # CA3010: Review code for XAML injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3010
 dotnet_diagnostic.CA3010.severity = none
 
 # CA3011: Review code for DLL injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3011
 dotnet_diagnostic.CA3011.severity = none
 
 # CA3012: Review code for regex injection vulnerabilities
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3012
 dotnet_diagnostic.CA3012.severity = none
 
 # CA3061: Do Not Add Schema By URL
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3061
 dotnet_diagnostic.CA3061.severity = silent
 
 # CA3075: Insecure DTD processing in XML
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3075
 dotnet_diagnostic.CA3075.severity = silent
 
 # CA3076: Insecure XSLT script processing.
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3076
 dotnet_diagnostic.CA3076.severity = silent
 
 # CA3077: Insecure Processing in API Design, XmlDocument and XmlTextReader
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3077
 dotnet_diagnostic.CA3077.severity = silent
 
 # CA3147: Mark Verb Handlers With Validate Antiforgery Token
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca3147
 dotnet_diagnostic.CA3147.severity = silent
 
 # CA5350: Do Not Use Weak Cryptographic Algorithms
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5350
 dotnet_diagnostic.CA5350.severity = silent
 
 # CA5351: Do Not Use Broken Cryptographic Algorithms
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5351
 dotnet_diagnostic.CA5351.severity = silent
 
 # CA5358: Review cipher mode usage with cryptography experts
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5358
 dotnet_diagnostic.CA5358.severity = none
 
 # CA5359: Do Not Disable Certificate Validation
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5359
 dotnet_diagnostic.CA5359.severity = silent
 
 # CA5360: Do Not Call Dangerous Methods In Deserialization
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5360
 dotnet_diagnostic.CA5360.severity = silent
 
 # CA5361: Do Not Disable SChannel Use of Strong Crypto
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5361
 dotnet_diagnostic.CA5361.severity = none
 
 # CA5362: Potential reference cycle in deserialized object graph
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5362
 dotnet_diagnostic.CA5362.severity = none
 
 # CA5363: Do Not Disable Request Validation
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5363
 dotnet_diagnostic.CA5363.severity = silent
 
 # CA5364: Do Not Use Deprecated Security Protocols
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5364
 dotnet_diagnostic.CA5364.severity = silent
 
 # CA5365: Do Not Disable HTTP Header Checking
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5365
 dotnet_diagnostic.CA5365.severity = silent
 
 # CA5366: Use XmlReader For DataSet Read Xml
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5366
 dotnet_diagnostic.CA5366.severity = silent
 
 # CA5367: Do Not Serialize Types With Pointer Fields
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5367
 dotnet_diagnostic.CA5367.severity = none
 
 # CA5368: Set ViewStateUserKey For Classes Derived From Page
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5368
 dotnet_diagnostic.CA5368.severity = silent
 
 # CA5369: Use XmlReader For Deserialize
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5369
 dotnet_diagnostic.CA5369.severity = silent
 
 # CA5370: Use XmlReader For Validating Reader
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5370
 dotnet_diagnostic.CA5370.severity = silent
 
 # CA5371: Use XmlReader For Schema Read
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5371
 dotnet_diagnostic.CA5371.severity = silent
 
 # CA5372: Use XmlReader For XPathDocument
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5372
 dotnet_diagnostic.CA5372.severity = silent
 
 # CA5373: Do not use obsolete key derivation function
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5373
 dotnet_diagnostic.CA5373.severity = silent
 
 # CA5374: Do Not Use XslTransform
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5374
 dotnet_diagnostic.CA5374.severity = silent
 
 # CA5375: Do Not Use Account Shared Access Signature
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5375
 dotnet_diagnostic.CA5375.severity = none
 
 # CA5376: Use SharedAccessProtocol HttpsOnly
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5376
 dotnet_diagnostic.CA5376.severity = none
 
 # CA5377: Use Container Level Access Policy
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5377
 dotnet_diagnostic.CA5377.severity = none
 
 # CA5378: Do not disable ServicePointManagerSecurityProtocols
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5378
 dotnet_diagnostic.CA5378.severity = none
 
 # CA5379: Do Not Use Weak Key Derivation Function Algorithm
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5379
 dotnet_diagnostic.CA5379.severity = silent
 
 # CA5380: Do Not Add Certificates To Root Store
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5380
 dotnet_diagnostic.CA5380.severity = none
 
 # CA5381: Ensure Certificates Are Not Added To Root Store
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5381
 dotnet_diagnostic.CA5381.severity = none
 
 # CA5382: Use Secure Cookies In ASP.Net Core
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5382
 dotnet_diagnostic.CA5382.severity = none
 
 # CA5383: Ensure Use Secure Cookies In ASP.Net Core
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5383
 dotnet_diagnostic.CA5383.severity = none
 
 # CA5384: Do Not Use Digital Signature Algorithm (DSA)
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5384
 dotnet_diagnostic.CA5384.severity = silent
 
 # CA5385: Use Rivest–Shamir–Adleman (RSA) Algorithm With Sufficient Key Size
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5385
 dotnet_diagnostic.CA5385.severity = silent
 
 # CA5386: Avoid hardcoding SecurityProtocolType value
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5386
 dotnet_diagnostic.CA5386.severity = none
 
 # CA5387: Do Not Use Weak Key Derivation Function With Insufficient Iteration Count
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5387
 dotnet_diagnostic.CA5387.severity = none
 
 # CA5388: Ensure Sufficient Iteration Count When Using Weak Key Derivation Function
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5388
 dotnet_diagnostic.CA5388.severity = none
 
 # CA5389: Do Not Add Archive Item's Path To The Target File System Path
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5389
 dotnet_diagnostic.CA5389.severity = none
 
 # CA5390: Do not hard-code encryption key
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5390
 dotnet_diagnostic.CA5390.severity = none
 
 # CA5391: Use antiforgery tokens in ASP.NET Core MVC controllers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5391
 dotnet_diagnostic.CA5391.severity = none
 
 # CA5392: Use DefaultDllImportSearchPaths attribute for P/Invokes
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5392
 dotnet_diagnostic.CA5392.severity = none
 
 # CA5393: Do not use unsafe DllImportSearchPath value
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5393
 dotnet_diagnostic.CA5393.severity = none
 
 # CA5394: Do not use insecure randomness
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5394
 dotnet_diagnostic.CA5394.severity = none
 
 # CA5395: Miss HttpVerb attribute for action methods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5395
 dotnet_diagnostic.CA5395.severity = none
 
 # CA5396: Set HttpOnly to true for HttpCookie
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5396
 dotnet_diagnostic.CA5396.severity = none
 
 # CA5397: Do not use deprecated SslProtocols values
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5397
 dotnet_diagnostic.CA5397.severity = silent
 
 # CA5398: Avoid hardcoded SslProtocols values
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5398
 dotnet_diagnostic.CA5398.severity = none
 
 # CA5399: HttpClients should enable certificate revocation list checks
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5399
 dotnet_diagnostic.CA5399.severity = none
 
 # CA5400: Ensure HttpClient certificate revocation list check is not disabled
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5400
 dotnet_diagnostic.CA5400.severity = none
 
 # CA5401: Do not use CreateEncryptor with non-default IV
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5401
 dotnet_diagnostic.CA5401.severity = none
 
-# CA5402: Use CreateEncryptor with the default IV 
+# CA5402: Use CreateEncryptor with the default IV
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5402
 dotnet_diagnostic.CA5402.severity = none
 
 # CA5403: Do not hard-code certificate
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca5403
 dotnet_diagnostic.CA5403.severity = none
 
 # IL3000: Avoid using accessing Assembly file path when publishing as a single-file
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/il3000
 dotnet_diagnostic.IL3000.severity = warning
 
 # IL3001: Avoid using accessing Assembly file path when publishing as a single-file
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/il3001
 dotnet_diagnostic.IL3001.severity = warning
 
+# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/il3002
+dotnet_diagnostic.IL3002.severity = warning
+
+# DOC100: PlaceTextInParagraphs
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC100.md
+dotnet_diagnostic.DOC100.severity = none
+
+# DOC101: UseChildBlocksConsistently
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC101.md
+dotnet_diagnostic.DOC101.severity = none
+
+# DOC102: UseChildBlocksConsistentlyAcrossElementsOfTheSameKind
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC102.md
+dotnet_diagnostic.DOC102.severity = none
+
+# DOC103: UseUnicodeCharacters
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC103.md
+dotnet_diagnostic.DOC103.severity = none
+
+# DOC104: UseSeeLangword
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC104.md
+dotnet_diagnostic.DOC104.severity = suggestion
+
+# DOC105: UseParamref
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC105.md
+dotnet_diagnostic.DOC105.severity = none
+
+# DOC106: UseTypeparamref
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC106.md
+dotnet_diagnostic.DOC106.severity = none
+
+# DOC107: UseSeeCref
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC107.md
+dotnet_diagnostic.DOC107.severity = none
+
+# DOC108: AvoidEmptyParagraphs
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC108.md
+dotnet_diagnostic.DOC108.severity = none
+
+# DOC200: UseXmlDocumentationSyntax
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC200.md
+dotnet_diagnostic.DOC200.severity = none
+
+# DOC201: ItemShouldHaveDescription
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC201.md
+dotnet_diagnostic.DOC201.severity = none
+
+# DOC202: UseSectionElementsCorrectly
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC202.md
+dotnet_diagnostic.DOC202.severity = none
+
+# DOC203: UseBlockElementsCorrectly
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC203.md
+dotnet_diagnostic.DOC203.severity = none
+
+# DOC204: UseInlineElementsCorrectly
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC204.md
+dotnet_diagnostic.DOC204.severity = none
+
+# DOC207: UseSeeLangwordCorrectly
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC207.md
+dotnet_diagnostic.DOC207.severity = none
+
+# DOC209: UseSeeHrefCorrectly
+# https://github.com/DotNetAnalyzers/DocumentationAnalyzers/blob/master/docs/DOC209.md
+dotnet_diagnostic.DOC209.severity = none
+
 # IDE0001: SimplifyNames
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0001
 dotnet_diagnostic.IDE0001.severity = silent
 
 # IDE0002: SimplifyMemberAccess
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0002
 dotnet_diagnostic.IDE0002.severity = silent
 
 # IDE0003: RemoveQualification
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0003
 dotnet_diagnostic.IDE0003.severity = silent
 
 # IDE0004: RemoveUnnecessaryCast
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0004
 dotnet_diagnostic.IDE0004.severity = silent
 
 # IDE0005: RemoveUnnecessaryImports
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0005
 dotnet_diagnostic.IDE0005.severity = silent
 
 # IDE0006: IntellisenseBuildFailed
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0006
 dotnet_diagnostic.IDE0006.severity = silent
 
 # IDE0007: UseImplicitType
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0007
 dotnet_diagnostic.IDE0007.severity = silent
 
 # IDE0008: UseExplicitType
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0008
 dotnet_diagnostic.IDE0008.severity = silent
 
 # IDE0009: AddQualification
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0009
 dotnet_diagnostic.IDE0009.severity = silent
 
 # IDE0010: PopulateSwitchStatement
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0010
 dotnet_diagnostic.IDE0010.severity = silent
 
 # IDE0011: AddBraces
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0011
 dotnet_diagnostic.IDE0011.severity = silent
 
 # IDE0016: UseThrowExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0016
 dotnet_diagnostic.IDE0016.severity = silent
 
 # IDE0017: UseObjectInitializer
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0017
 dotnet_diagnostic.IDE0017.severity = silent
 
 # IDE0018: InlineDeclaration
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0018
 dotnet_diagnostic.IDE0018.severity = silent
 
 # IDE0019: InlineAsTypeCheck
-dotnet_diagnostic.IDE0019.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0019
+dotnet_diagnostic.IDE0019.severity = warning
 
 # IDE0020: InlineIsTypeCheck
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0020
 dotnet_diagnostic.IDE0020.severity = silent
 
 # IDE0021: UseExpressionBodyForConstructors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0021
 dotnet_diagnostic.IDE0021.severity = silent
 
 # IDE0022: UseExpressionBodyForMethods
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0022
 dotnet_diagnostic.IDE0022.severity = silent
 
 # IDE0023: UseExpressionBodyForConversionOperators
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0023
 dotnet_diagnostic.IDE0023.severity = silent
 
 # IDE0024: UseExpressionBodyForOperators
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0024
 dotnet_diagnostic.IDE0024.severity = silent
 
 # IDE0025: UseExpressionBodyForProperties
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0025
 dotnet_diagnostic.IDE0025.severity = silent
 
 # IDE0026: UseExpressionBodyForIndexers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0026
 dotnet_diagnostic.IDE0026.severity = silent
 
 # IDE0027: UseExpressionBodyForAccessors
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0027
 dotnet_diagnostic.IDE0027.severity = silent
 
 # IDE0028: UseCollectionInitializer
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0028
 dotnet_diagnostic.IDE0028.severity = silent
 
 # IDE0029: UseCoalesceExpression
-dotnet_diagnostic.IDE0029.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0029
+dotnet_diagnostic.IDE0029.severity = warning
 
 # IDE0030: UseCoalesceExpressionForNullable
-dotnet_diagnostic.IDE0030.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0030
+dotnet_diagnostic.IDE0030.severity = warning
 
 # IDE0031: UseNullPropagation
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0031
 dotnet_diagnostic.IDE0031.severity = warning
 
 # IDE0032: UseAutoProperty
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0032
 dotnet_diagnostic.IDE0032.severity = silent
 
 # IDE0033: UseExplicitTupleName
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0033
 dotnet_diagnostic.IDE0033.severity = silent
 
 # IDE0034: UseDefaultLiteral
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0034
 dotnet_diagnostic.IDE0034.severity = silent
 
 # IDE0035: RemoveUnreachableCode
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0035
 dotnet_diagnostic.IDE0035.severity = silent
 
 # IDE0036: OrderModifiers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0036
 dotnet_diagnostic.IDE0036.severity = warning
 
 # IDE0037: UseInferredMemberName
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0037
 dotnet_diagnostic.IDE0037.severity = silent
 
 # IDE0038: InlineIsTypeWithoutNameCheck
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0038
 dotnet_diagnostic.IDE0038.severity = silent
 
 # IDE0039: UseLocalFunction
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0039
 dotnet_diagnostic.IDE0039.severity = silent
 
 # IDE0040: AddAccessibilityModifiers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040
 dotnet_diagnostic.IDE0040.severity = warning
 
 # IDE0041: UseIsNullCheck
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0041
 dotnet_diagnostic.IDE0041.severity = warning
 
 # IDE0042: UseDeconstruction
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0042
 dotnet_diagnostic.IDE0042.severity = silent
 
 # IDE0043: ValidateFormatString
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0043
 dotnet_diagnostic.IDE0043.severity = silent
 
 # IDE0044: MakeFieldReadonly
-dotnet_diagnostic.IDE0044.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0044
+dotnet_diagnostic.IDE0044.severity = warning
 
 # IDE0045: UseConditionalExpressionForAssignment
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0045
 dotnet_diagnostic.IDE0045.severity = silent
 
 # IDE0046: UseConditionalExpressionForReturn
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0046
 dotnet_diagnostic.IDE0046.severity = silent
 
 # IDE0047: RemoveUnnecessaryParentheses
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0047
 dotnet_diagnostic.IDE0047.severity = silent
 
 # IDE0048: AddRequiredParentheses
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0048
 dotnet_diagnostic.IDE0048.severity = suggestion
 
 # IDE0049: PreferBuiltInOrFrameworkType
-dotnet_diagnostic.IDE0049.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0049
+dotnet_diagnostic.IDE0049.severity = suggestion
 
 # IDE0050: ConvertAnonymousTypeToTuple
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0050
 dotnet_diagnostic.IDE0050.severity = silent
 
 # IDE0051: RemoveUnusedMembers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0051
 dotnet_diagnostic.IDE0051.severity = silent
 
 # IDE0052: RemoveUnreadMembers
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0052
 dotnet_diagnostic.IDE0052.severity = silent
 
 # IDE0053: UseExpressionBodyForLambdaExpressions
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0053
 dotnet_diagnostic.IDE0053.severity = silent
 
 # IDE0054: UseCompoundAssignment
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0054
 dotnet_diagnostic.IDE0054.severity = warning
 
 # IDE0055: Formatting
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0055
 dotnet_diagnostic.IDE0055.severity = silent
 
 # IDE0056: UseIndexOperator
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0056
 dotnet_diagnostic.IDE0056.severity = silent
 
 # IDE0057: UseRangeOperator
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0057
 dotnet_diagnostic.IDE0057.severity = silent
 
 # IDE0058: ExpressionValueIsUnused
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0058
 dotnet_diagnostic.IDE0058.severity = silent
 
 # IDE0059: ValueAssignedIsUnused
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0059
 dotnet_diagnostic.IDE0059.severity = silent
 
 # IDE0060: UnusedParameter
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0060
 dotnet_diagnostic.IDE0060.severity = silent
 
 # IDE0061: UseExpressionBodyForLocalFunctions
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0061
 dotnet_diagnostic.IDE0061.severity = silent
 
 # IDE0062: MakeLocalFunctionStatic
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0062
 dotnet_diagnostic.IDE0062.severity = warning
 
 # IDE0063: UseSimpleUsingStatement
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0063
 dotnet_diagnostic.IDE0063.severity = silent
 
 # IDE0064: MakeStructFieldsWritable
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0064
 dotnet_diagnostic.IDE0064.severity = warning
 
 # IDE0065: MoveMisplacedUsingDirectives
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0065
 dotnet_diagnostic.IDE0065.severity = silent
 
 # IDE0066: ConvertSwitchStatementToExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0066
 dotnet_diagnostic.IDE0066.severity = silent
 
-# IDE0067: DisposeObjectsBeforeLosingScope
-dotnet_diagnostic.IDE0067.severity = silent
-
-# IDE0068: UseRecommendedDisposePattern
-dotnet_diagnostic.IDE0068.severity = silent
-
-# IDE0069: DisposableFieldsShouldBeDisposed
-dotnet_diagnostic.IDE0069.severity = silent
-
 # IDE0070: UseSystemHashCode
-dotnet_diagnostic.IDE0070.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0070
+dotnet_diagnostic.IDE0070.severity = warning
 
 # IDE0071: SimplifyInterpolation
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0071
 dotnet_diagnostic.IDE0071.severity = silent
 
 # IDE0072: PopulateSwitchExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0072
 dotnet_diagnostic.IDE0072.severity = silent
 
 # IDE0073: FileHeaderMismatch
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0073
 dotnet_diagnostic.IDE0073.severity = suggestion
 
 # IDE0074: UseCoalesceCompoundAssignment
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0074
 dotnet_diagnostic.IDE0074.severity = warning
 
 # IDE0075: SimplifyConditionalExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0075
 dotnet_diagnostic.IDE0075.severity = warning
 
 # IDE0076: InvalidSuppressMessageAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0076
 dotnet_diagnostic.IDE0076.severity = warning
 
 # IDE0077: LegacyFormatSuppressMessageAttribute
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0077
 dotnet_diagnostic.IDE0077.severity = warning
 
 # IDE0078: UsePatternCombinators
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0078
 dotnet_diagnostic.IDE0078.severity = silent
 
 # IDE0079: RemoveUnnecessarySuppression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0079
 dotnet_diagnostic.IDE0079.severity = silent
 
 # IDE0080: RemoveConfusingSuppressionForIsExpression
-dotnet_diagnostic.IDE0080.severity = silent
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0080
+dotnet_diagnostic.IDE0080.severity = warning
 
 # IDE0081: RemoveUnnecessaryByVal
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0081
 dotnet_diagnostic.IDE0081.severity = silent
 
 # IDE0082: ConvertTypeOfToNameOf
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0082
 dotnet_diagnostic.IDE0082.severity = warning
 
 # IDE0083: UseNotPattern
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0083
 dotnet_diagnostic.IDE0083.severity = silent
 
 # IDE0084: UseIsNotExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0084
 dotnet_diagnostic.IDE0084.severity = silent
 
+# IDE0090: UseNew
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0090
+dotnet_diagnostic.IDE0090.severity = suggestion
+
+# IDE0100: RemoveRedundantEquality
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0100
+dotnet_diagnostic.IDE0100.severity = warning
+
+# IDE0110: RemoveUnnecessaryDiscard
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0110
+dotnet_diagnostic.IDE0110.severity = suggestion
+
+# IDE0120: SimplifyLINQExpression
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0120
+dotnet_diagnostic.IDE0120.severity = warning
+
+# IDE0130: NamespaceDoesNotMatchFolderStructure
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0130
+dotnet_diagnostic.IDE0130.severity = silent
+
 # IDE1001: AnalyzerChanged
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1001
 dotnet_diagnostic.IDE1001.severity = silent
 
 # IDE1002: AnalyzerDependencyConflict
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1002
 dotnet_diagnostic.IDE1002.severity = silent
 
 # IDE1003: MissingAnalyzerReference
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1003
 dotnet_diagnostic.IDE1003.severity = silent
 
 # IDE1004: ErrorReadingRuleset
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1004
 dotnet_diagnostic.IDE1004.severity = silent
 
 # IDE1005: InvokeDelegateWithConditionalAccess
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1005
 dotnet_diagnostic.IDE1005.severity = warning
 
 # IDE1006: NamingRule
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1006
 dotnet_diagnostic.IDE1006.severity = silent
 
 # IDE1007: UnboundIdentifier
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1007
 dotnet_diagnostic.IDE1007.severity = silent
 
 # IDE1008: UnboundConstructor
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide1008
 dotnet_diagnostic.IDE1008.severity = silent
 
+# IDE2000: MultipleBlankLines
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide2000
+dotnet_diagnostic.IDE2000.severity = warning
+
+# IDE2001: EmbeddedStatementsMustBeOnTheirOwnLine
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide2001
+dotnet_diagnostic.IDE2001.severity = warning
+
+# IDE2002: ConsecutiveBracesMustNotHaveBlankLinesBetweenThem
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide2002
+dotnet_diagnostic.IDE2002.severity = warning
+
+# IDE2003: ConsecutiveStatementPlacement
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide2003
+dotnet_diagnostic.IDE2003.severity = warning
+
+# IDE2004: BlankLineNotAllowedAfterConstructorInitializerColon
+# https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide2004
+dotnet_diagnostic.IDE2004.severity = warning
+
 # SA0001: XML comment analysis disabled
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA0001.md
 dotnet_diagnostic.SA0001.severity = none
 
 # SA0002: Invalid settings file
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA0002.md
 dotnet_diagnostic.SA0002.severity = none
 
 # SA1000: Keywords should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1000.md
 dotnet_diagnostic.SA1000.severity = warning
 
 # SA1001: Commas should be spaced correctly
-dotnet_diagnostic.SA1001.severity = none
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1001.md
+dotnet_diagnostic.SA1001.severity = warning
 
 # SA1002: Semicolons should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1002.md
 dotnet_diagnostic.SA1002.severity = warning
 
 # SA1003: Symbols should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1003.md
 dotnet_diagnostic.SA1003.severity = warning
 
 # SA1004: Documentation lines should begin with single space
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1004.md
 dotnet_diagnostic.SA1004.severity = none
 
 # SA1005: Single line comments should begin with single space
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1005.md
 dotnet_diagnostic.SA1005.severity = none
 
 # SA1006: Preprocessor keywords should not be preceded by space
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1006.md
 dotnet_diagnostic.SA1006.severity = warning
 
 # SA1007: Operator keyword should be followed by space
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1007.md
 dotnet_diagnostic.SA1007.severity = warning
 
 # SA1008: Opening parenthesis should be spaced correctly
-dotnet_diagnostic.SA1008.severity = none
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1008.md
+dotnet_diagnostic.SA1008.severity = warning
 
 # SA1009: Closing parenthesis should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1009.md
 dotnet_diagnostic.SA1009.severity = none
 
 # SA1010: Opening square brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1010.md
 dotnet_diagnostic.SA1010.severity = none
 
 # SA1011: Closing square brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1011.md
 dotnet_diagnostic.SA1011.severity = none
 
 # SA1012: Opening braces should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1012.md
 dotnet_diagnostic.SA1012.severity = none
 
 # SA1013: Closing braces should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1013.md
 dotnet_diagnostic.SA1013.severity = none
 
 # SA1014: Opening generic brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1014.md
 dotnet_diagnostic.SA1014.severity = none
 
 # SA1015: Closing generic brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1015.md
 dotnet_diagnostic.SA1015.severity = none
 
 # SA1016: Opening attribute brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1016.md
 dotnet_diagnostic.SA1016.severity = none
 
 # SA1017: Closing attribute brackets should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1017.md
 dotnet_diagnostic.SA1017.severity = none
 
 # SA1018: Nullable type symbols should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1018.md
 dotnet_diagnostic.SA1018.severity = none
 
 # SA1019: Member access symbols should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1019.md
 dotnet_diagnostic.SA1019.severity = none
 
 # SA1020: Increment decrement symbols should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1020.md
 dotnet_diagnostic.SA1020.severity = none
 
 # SA1021: Negative signs should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1021.md
 dotnet_diagnostic.SA1021.severity = none
 
 # SA1022: Positive signs should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1022.md
 dotnet_diagnostic.SA1022.severity = none
 
 # SA1023: Dereference and access of symbols should be spaced correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1023.md
 dotnet_diagnostic.SA1023.severity = none
 
 # SA1024: Colons Should Be Spaced Correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1024.md
 dotnet_diagnostic.SA1024.severity = none
 
 # SA1025: Code should not contain multiple whitespace in a row
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1025.md
 dotnet_diagnostic.SA1025.severity = none
 
 # SA1026: Code should not contain space after new or stackalloc keyword in implicitly typed array allocation
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1026.md
 dotnet_diagnostic.SA1026.severity = none
 
 # SA1027: Use tabs correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1027.md
 dotnet_diagnostic.SA1027.severity = none
 
 # SA1028: Code should not contain trailing whitespace
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1028.md
 dotnet_diagnostic.SA1028.severity = none
 
 # SA1100: Do not prefix calls with base unless local implementation exists
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1100.md
 dotnet_diagnostic.SA1100.severity = none
 
 # SA1101: Prefix local calls with this
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1101.md
 dotnet_diagnostic.SA1101.severity = none
 
 # SA1102: Query clause should follow previous clause
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1102.md
 dotnet_diagnostic.SA1102.severity = none
 
 # SA1103: Query clauses should be on separate lines or all on one line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1103.md
 dotnet_diagnostic.SA1103.severity = none
 
 # SA1104: Query clause should begin on new line when previous clause spans multiple lines
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1104.md
 dotnet_diagnostic.SA1104.severity = none
 
 # SA1105: Query clauses spanning multiple lines should begin on own line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1105.md
 dotnet_diagnostic.SA1105.severity = none
 
 # SA1106: Code should not contain empty statements
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1106.md
 dotnet_diagnostic.SA1106.severity = warning
 
 # SA1107: Code should not contain multiple statements on one line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1107.md
 dotnet_diagnostic.SA1107.severity = none
 
 # SA1108: Block statements should not contain embedded comments
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1108.md
 dotnet_diagnostic.SA1108.severity = none
 
 # SA1110: Opening parenthesis or bracket should be on declaration line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1110.md
 dotnet_diagnostic.SA1110.severity = none
 
 # SA1111: Closing parenthesis should be on line of last parameter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1111.md
 dotnet_diagnostic.SA1111.severity = none
 
 # SA1112: Closing parenthesis should be on line of opening parenthesis
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1112.md
 dotnet_diagnostic.SA1112.severity = none
 
 # SA1113: Comma should be on the same line as previous parameter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1113.md
 dotnet_diagnostic.SA1113.severity = none
 
 # SA1114: Parameter list should follow declaration
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1114.md
 dotnet_diagnostic.SA1114.severity = none
 
 # SA1115: Parameter should follow comma
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1115.md
 dotnet_diagnostic.SA1115.severity = none
 
 # SA1116: Split parameters should start on line after declaration
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1116.md
 dotnet_diagnostic.SA1116.severity = none
 
 # SA1117: Parameters should be on same line or separate lines
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1117.md
 dotnet_diagnostic.SA1117.severity = none
 
 # SA1118: Parameter should not span multiple lines
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1118.md
 dotnet_diagnostic.SA1118.severity = none
 
 # SA1119: Statement should not use unnecessary parenthesis
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1119.md
 dotnet_diagnostic.SA1119.severity = none
 
 # SA1120: Comments should contain text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1120.md
 dotnet_diagnostic.SA1120.severity = none
 
 # SA1121: Use built-in type alias
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1121.md
 dotnet_diagnostic.SA1121.severity = none
 
 # SA1122: Use string.Empty for empty strings
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1122.md
 dotnet_diagnostic.SA1122.severity = warning
 
 # SA1123: Do not place regions within elements
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1123.md
 dotnet_diagnostic.SA1123.severity = none
 
 # SA1124: Do not use regions
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1124.md
 dotnet_diagnostic.SA1124.severity = none
 
 # SA1125: Use shorthand for nullable types
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1125.md
 dotnet_diagnostic.SA1125.severity = none
 
 # SA1127: Generic type constraints should be on their own line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1127.md
 dotnet_diagnostic.SA1127.severity = none
 
 # SA1128: Put constructor initializers on their own line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1128.md
 dotnet_diagnostic.SA1128.severity = none
 
 # SA1129: Do not use default value type constructor
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1129.md
 dotnet_diagnostic.SA1129.severity = none
 
 # SA1130: Use lambda syntax
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1130.md
 dotnet_diagnostic.SA1130.severity = none
 
 # SA1131: Use readable conditions
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1131.md
 dotnet_diagnostic.SA1131.severity = warning
 
 # SA1132: Do not combine fields
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1132.md
 dotnet_diagnostic.SA1132.severity = none
 
 # SA1133: Do not combine attributes
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1133.md
 dotnet_diagnostic.SA1133.severity = none
 
 # SA1134: Attributes should not share line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1134.md
 dotnet_diagnostic.SA1134.severity = none
 
 # SA1135: Using directives should be qualified
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1135.md
 dotnet_diagnostic.SA1135.severity = none
 
 # SA1136: Enum values should be on separate lines
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1136.md
 dotnet_diagnostic.SA1136.severity = none
 
 # SA1137: Elements should have the same indentation
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1137.md
 dotnet_diagnostic.SA1137.severity = none
 
 # SA1139: Use literal suffix notation instead of casting
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1139.md
 dotnet_diagnostic.SA1139.severity = none
 
 # SA1141: Use tuple syntax
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1141.md
 dotnet_diagnostic.SA1141.severity = none
 
 # SA1142: Refer to tuple fields by name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1142.md
 dotnet_diagnostic.SA1142.severity = none
 
 # SA1200: Using directives should be placed correctly
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1200.md
 dotnet_diagnostic.SA1200.severity = none
 
 # SA1201: Elements should appear in the correct order
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1201.md
 dotnet_diagnostic.SA1201.severity = none
 
 # SA1202: Elements should be ordered by access
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1202.md
 dotnet_diagnostic.SA1202.severity = none
 
 # SA1203: Constants should appear before fields
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1203.md
 dotnet_diagnostic.SA1203.severity = none
 
 # SA1204: Static elements should appear before instance elements
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1204.md
 dotnet_diagnostic.SA1204.severity = none
 
 # SA1205: Partial elements should declare access
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1205.md
 dotnet_diagnostic.SA1205.severity = warning
 
 # SA1206: Declaration keywords should follow order
-dotnet_diagnostic.SA1206.severity = none
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1206.md
+dotnet_diagnostic.SA1206.severity = warning
 
 # SA1207: Protected should come before internal
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1207.md
 dotnet_diagnostic.SA1207.severity = none
 
 # SA1208: System using directives should be placed before other using directives
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1208.md
 dotnet_diagnostic.SA1208.severity = none
 
 # SA1209: Using alias directives should be placed after other using directives
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1209.md
 dotnet_diagnostic.SA1209.severity = none
 
 # SA1210: Using directives should be ordered alphabetically by namespace
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1210.md
 dotnet_diagnostic.SA1210.severity = none
 
 # SA1211: Using alias directives should be ordered alphabetically by alias name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1211.md
 dotnet_diagnostic.SA1211.severity = none
 
 # SA1212: Property accessors should follow order
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1212.md
 dotnet_diagnostic.SA1212.severity = warning
 
 # SA1213: Event accessors should follow order
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1213.md
 dotnet_diagnostic.SA1213.severity = warning
 
 # SA1214: Readonly fields should appear before non-readonly fields
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1214.md
 dotnet_diagnostic.SA1214.severity = none
 
 # SA1216: Using static directives should be placed at the correct location
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1216.md
 dotnet_diagnostic.SA1216.severity = warning
 
 # SA1217: Using static directives should be ordered alphabetically
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1217.md
 dotnet_diagnostic.SA1217.severity = warning
 
 # SA1300: Element should begin with upper-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1300.md
 dotnet_diagnostic.SA1300.severity = none
 
 # SA1302: Interface names should begin with I
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1302.md
 dotnet_diagnostic.SA1302.severity = none
 
 # SA1303: Const field names should begin with upper-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1303.md
 dotnet_diagnostic.SA1303.severity = none
 
 # SA1304: Non-private readonly fields should begin with upper-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1304.md
 dotnet_diagnostic.SA1304.severity = none
 
 # SA1305: Field names should not use Hungarian notation
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1305.md
 dotnet_diagnostic.SA1305.severity = none
 
 # SA1306: Field names should begin with lower-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1306.md
 dotnet_diagnostic.SA1306.severity = none
 
 # SA1307: Accessible fields should begin with upper-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1307.md
 dotnet_diagnostic.SA1307.severity = none
 
 # SA1308: Variable names should not be prefixed
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1308.md
 dotnet_diagnostic.SA1308.severity = none
 
 # SA1309: Field names should not begin with underscore
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1309.md
 dotnet_diagnostic.SA1309.severity = none
 
 # SA1310: Field names should not contain underscore
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1310.md
 dotnet_diagnostic.SA1310.severity = none
 
 # SA1311: Static readonly fields should begin with upper-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1311.md
 dotnet_diagnostic.SA1311.severity = none
 
 # SA1312: Variable names should begin with lower-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1312.md
 dotnet_diagnostic.SA1312.severity = none
 
 # SA1313: Parameter names should begin with lower-case letter
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1313.md
 dotnet_diagnostic.SA1313.severity = none
 
 # SA1314: Type parameter names should begin with T
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1314.md
 dotnet_diagnostic.SA1314.severity = warning
 
 # SA1316: Tuple element names should use correct casing
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1316.md
 dotnet_diagnostic.SA1316.severity = none
 
 # SA1400: Access modifier should be declared
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1400.md
 dotnet_diagnostic.SA1400.severity = none
 
 # SA1401: Fields should be private
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1401.md
 dotnet_diagnostic.SA1401.severity = none
 
 # SA1402: File may only contain a single type
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1402.md
 dotnet_diagnostic.SA1402.severity = none
 
 # SA1403: File may only contain a single namespace
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1403.md
 dotnet_diagnostic.SA1403.severity = none
 
 # SA1404: Code analysis suppression should have justification
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1404.md
 dotnet_diagnostic.SA1404.severity = none
 
 # SA1405: Debug.Assert should provide message text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1405.md
 dotnet_diagnostic.SA1405.severity = none
 
 # SA1406: Debug.Fail should provide message text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1406.md
 dotnet_diagnostic.SA1406.severity = none
 
 # SA1407: Arithmetic expressions should declare precedence
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1407.md
 dotnet_diagnostic.SA1407.severity = none
 
 # SA1408: Conditional expressions should declare precedence
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1408.md
 dotnet_diagnostic.SA1408.severity = none
 
 # SA1410: Remove delegate parenthesis when possible
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1410.md
 dotnet_diagnostic.SA1410.severity = none
 
 # SA1411: Attribute constructor should not use unnecessary parenthesis
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1411.md
 dotnet_diagnostic.SA1411.severity = none
 
 # SA1412: Store files as UTF-8 with byte order mark
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1412.md
 dotnet_diagnostic.SA1412.severity = none
 
 # SA1413: Use trailing comma in multi-line initializers
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1413.md
 dotnet_diagnostic.SA1413.severity = none
 
 # SA1414: Tuple types in signatures should have element names
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1414.md
 dotnet_diagnostic.SA1414.severity = none
 
 # SA1500: Braces for multi-line statements should not share line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1500.md
 dotnet_diagnostic.SA1500.severity = none
 
 # SA1501: Statement should not be on a single line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1501.md
 dotnet_diagnostic.SA1501.severity = none
 
 # SA1502: Element should not be on a single line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1502.md
 dotnet_diagnostic.SA1502.severity = none
 
 # SA1503: Braces should not be omitted
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1503.md
 dotnet_diagnostic.SA1503.severity = none
 
 # SA1504: All accessors should be single-line or multi-line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1504.md
 dotnet_diagnostic.SA1504.severity = warning
 
 # SA1505: Opening braces should not be followed by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1505.md
 dotnet_diagnostic.SA1505.severity = none
 
 # SA1506: Element documentation headers should not be followed by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1506.md
 dotnet_diagnostic.SA1506.severity = none
 
 # SA1507: Code should not contain multiple blank lines in a row
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1507.md
 dotnet_diagnostic.SA1507.severity = warning
 
 # SA1508: Closing braces should not be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1508.md
 dotnet_diagnostic.SA1508.severity = none
 
 # SA1509: Opening braces should not be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1509.md
 dotnet_diagnostic.SA1509.severity = none
 
 # SA1510: Chained statement blocks should not be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1510.md
 dotnet_diagnostic.SA1510.severity = none
 
 # SA1511: While-do footer should not be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1511.md
 dotnet_diagnostic.SA1511.severity = none
 
 # SA1512: Single-line comments should not be followed by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1512.md
 dotnet_diagnostic.SA1512.severity = none
 
 # SA1513: Closing brace should be followed by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1513.md
 dotnet_diagnostic.SA1513.severity = none
 
 # SA1514: Element documentation header should be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1514.md
 dotnet_diagnostic.SA1514.severity = none
 
 # SA1515: Single-line comment should be preceded by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1515.md
 dotnet_diagnostic.SA1515.severity = none
 
 # SA1516: Elements should be separated by blank line
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1516.md
 dotnet_diagnostic.SA1516.severity = warning
 
 # SA1517: Code should not contain blank lines at start of file
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1517.md
 dotnet_diagnostic.SA1517.severity = warning
 
 # SA1518: Use line endings correctly at end of file
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1518.md
 dotnet_diagnostic.SA1518.severity = warning
 
 # SA1519: Braces should not be omitted from multi-line child statement
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1519.md
 dotnet_diagnostic.SA1519.severity = none
 
 # SA1520: Use braces consistently
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1520.md
 dotnet_diagnostic.SA1520.severity = none
 
 # SA1600: Elements should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1600.md
 dotnet_diagnostic.SA1600.severity = none
 
 # SA1601: Partial elements should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1601.md
 dotnet_diagnostic.SA1601.severity = none
 
 # SA1602: Enumeration items should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1602.md
 dotnet_diagnostic.SA1602.severity = none
 
 # SA1604: Element documentation should have summary
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1604.md
 dotnet_diagnostic.SA1604.severity = none
 
 # SA1605: Partial element documentation should have summary
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1605.md
 dotnet_diagnostic.SA1605.severity = none
 
 # SA1606: Element documentation should have summary text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1606.md
 dotnet_diagnostic.SA1606.severity = none
 
 # SA1607: Partial element documentation should have summary text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1607.md
 dotnet_diagnostic.SA1607.severity = none
 
 # SA1608: Element documentation should not have default summary
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1608.md
 dotnet_diagnostic.SA1608.severity = none
 
 # SA1609: Property documentation should have value
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1609.md
 dotnet_diagnostic.SA1609.severity = none
 
 # SA1610: Property documentation should have value text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1610.md
 dotnet_diagnostic.SA1610.severity = none
 
 # SA1611: Element parameters should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1611.md
 dotnet_diagnostic.SA1611.severity = none
 
 # SA1612: Element parameter documentation should match element parameters
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1612.md
 dotnet_diagnostic.SA1612.severity = none
 
 # SA1613: Element parameter documentation should declare parameter name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1613.md
 dotnet_diagnostic.SA1613.severity = none
 
 # SA1614: Element parameter documentation should have text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1614.md
 dotnet_diagnostic.SA1614.severity = none
 
 # SA1615: Element return value should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1615.md
 dotnet_diagnostic.SA1615.severity = none
 
 # SA1616: Element return value documentation should have text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1616.md
 dotnet_diagnostic.SA1616.severity = none
 
 # SA1617: Void return value should not be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1617.md
 dotnet_diagnostic.SA1617.severity = none
 
 # SA1618: Generic type parameters should be documented
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1618.md
 dotnet_diagnostic.SA1618.severity = none
 
 # SA1619: Generic type parameters should be documented partial class
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1619.md
 dotnet_diagnostic.SA1619.severity = none
 
 # SA1620: Generic type parameter documentation should match type parameters
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1620.md
 dotnet_diagnostic.SA1620.severity = none
 
 # SA1621: Generic type parameter documentation should declare parameter name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1621.md
 dotnet_diagnostic.SA1621.severity = none
 
 # SA1622: Generic type parameter documentation should have text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1622.md
 dotnet_diagnostic.SA1622.severity = none
 
 # SA1623: Property summary documentation should match accessors
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1623.md
 dotnet_diagnostic.SA1623.severity = none
 
 # SA1624: Property summary documentation should omit accessor with restricted access
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1624.md
 dotnet_diagnostic.SA1624.severity = none
 
 # SA1625: Element documentation should not be copied and pasted
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1625.md
 dotnet_diagnostic.SA1625.severity = none
 
 # SA1626: Single-line comments should not use documentation style slashes
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1626.md
 dotnet_diagnostic.SA1626.severity = none
 
 # SA1627: Documentation text should not be empty
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1627.md
 dotnet_diagnostic.SA1627.severity = none
 
 # SA1629: Documentation text should end with a period
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1629.md
 dotnet_diagnostic.SA1629.severity = none
 
 # SA1633: File should have header
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1633.md
 dotnet_diagnostic.SA1633.severity = none
 
 # SA1634: File header should show copyright
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1634.md
 dotnet_diagnostic.SA1634.severity = none
 
 # SA1635: File header should have copyright text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1635.md
 dotnet_diagnostic.SA1635.severity = none
 
 # SA1636: File header copyright text should match
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1636.md
 dotnet_diagnostic.SA1636.severity = none
 
 # SA1637: File header should contain file name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1637.md
 dotnet_diagnostic.SA1637.severity = none
 
 # SA1638: File header file name documentation should match file name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1638.md
 dotnet_diagnostic.SA1638.severity = none
 
 # SA1639: File header should have summary
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1639.md
 dotnet_diagnostic.SA1639.severity = none
 
 # SA1640: File header should have valid company text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1640.md
 dotnet_diagnostic.SA1640.severity = none
 
 # SA1641: File header company name text should match
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1641.md
 dotnet_diagnostic.SA1641.severity = none
 
 # SA1642: Constructor summary documentation should begin with standard text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1642.md
 dotnet_diagnostic.SA1642.severity = none
 
 # SA1643: Destructor summary documentation should begin with standard text
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1643.md
 dotnet_diagnostic.SA1643.severity = warning
 
 # SA1648: inheritdoc should be used with inheriting class
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1648.md
 dotnet_diagnostic.SA1648.severity = none
 
 # SA1649: File name should match first type name
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1649.md
 dotnet_diagnostic.SA1649.severity = none
 
 # SA1651: Do not use placeholder elements
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1651.md
 dotnet_diagnostic.SA1651.severity = none
 
 # SX1101: Do not prefix local calls with 'this.'
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SX1101.md
 dotnet_diagnostic.SX1101.severity = none
 
 # SX1309: Field names should begin with underscore
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SX1309.md
 dotnet_diagnostic.SX1309.severity = none
 
 # SX1309S: Static field names should begin with underscore
+# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SX1309S.md
 dotnet_diagnostic.SX1309S.severity = none
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 00000000000..0bc786ac445
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1 @@
+Andy Jordan <andy.jordan@microsoft.com> <andrew@schwartzmeyer.com>
diff --git a/.markdownlintignore b/.markdownlintignore
new file mode 100644
index 00000000000..1d3c5b1ac92
--- /dev/null
+++ b/.markdownlintignore
@@ -0,0 +1 @@
+.github/SECURITY.md
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/RolloutSpec.json b/.pipelines/EV2Specs/ServiceGroupRoot/RolloutSpec.json
new file mode 100644
index 00000000000..9ed971068cc
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/RolloutSpec.json
@@ -0,0 +1,28 @@
+{
+  "$schema": "https://ev2schema.azure.net/schemas/2020-01-01/rolloutSpecification.json",
+  "contentVersion": "1.0.0.0",
+  "rolloutMetadata": {
+    "serviceModelPath": "ServiceModel.json",
+    "ScopeBindingsPath": "ScopeBindings.json",
+    "name": "OneBranch-Demo-Container-Deployment",
+    "rolloutType": "Major",
+    "buildSource": {
+      "parameters": {
+        "versionFile": "buildver.txt"
+      }
+    },
+    "Notification": {
+      "Email": {
+        "To": "default"
+      }
+    }
+  },
+  "orchestratedSteps": [
+    {
+      "name": "UploadLinuxContainer",
+      "targetType": "ServiceResource",
+      "targetName": "LinuxContainerUpload",
+      "actions": ["Shell/Run"]
+    }
+  ]
+}
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/ScopeBindings.json b/.pipelines/EV2Specs/ServiceGroupRoot/ScopeBindings.json
new file mode 100644
index 00000000000..c3a98555867
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/ScopeBindings.json
@@ -0,0 +1,23 @@
+{
+  "$schema": "https://ev2schema.azure.net/schemas/2020-01-01/scopeBindings.json",
+  "contentVersion": "0.0.0.1",
+  "scopeBindings": [
+    {
+      "scopeTagName": "Global",
+      "bindings": [
+        {
+          "find": "__SUBSCRIPTION_ID__",
+          "replaceWith": "$azureSubscriptionId()"
+        },
+        {
+          "find": "__RESOURCE_GROUP__",
+          "replaceWith": "$azureResourceGroup()"
+        },
+        {
+          "find": "__BUILD_VERSION__",
+          "replaceWith": "$buildVersion()"
+        }
+      ]
+    }
+  ]
+}
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/ServiceModel.json b/.pipelines/EV2Specs/ServiceGroupRoot/ServiceModel.json
new file mode 100644
index 00000000000..ce974fe69e5
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/ServiceModel.json
@@ -0,0 +1,51 @@
+{
+  "$schema": "https://ev2schema.azure.net/schemas/2020-01-01/serviceModel.json",
+  "contentVersion": "1.0.0.0",
+  "serviceMetadata": {
+    "serviceGroup": "OneBranch-PowerShellDocker",
+    "environment": "Test"
+  },
+  "serviceResourceGroupDefinitions": [
+    {
+      "name": "OneBranch-PowerShellDocker-RGDef",
+      "serviceResourceDefinitions": [
+        {
+          "name": "OneBranch-PowerShellDocker.Shell-SRDef",
+          "composedOf": {
+            "extension": {
+              "shell": [
+                {
+                  "type": "Run",
+                  "properties": {
+                    "imageName": "adm-azurelinux-30-l",
+                    "imageVersion": "v2"
+                  }
+                }
+              ]
+            }
+          }
+        }
+      ]
+    }
+  ],
+  "serviceResourceGroups": [
+    {
+      "azureResourceGroupName": "default",
+      "location": "West US 3",
+      "instanceOf": "OneBranch-PowerShellDocker-RGDef",
+      "azureSubscriptionId": "default",
+        "scopeTags": [
+          {
+            "name": "Global"
+          }
+        ],
+      "serviceResources": [
+        {
+          "Name": "LinuxContainerUpload",
+          "InstanceOf": "OneBranch-PowerShellDocker.Shell-SRDef",
+          "RolloutParametersPath": "UploadLinux.Rollout.json"
+        }
+      ]
+    }
+  ]
+}
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/Shell/Run/Run.ps1 b/.pipelines/EV2Specs/ServiceGroupRoot/Shell/Run/Run.ps1
new file mode 100644
index 00000000000..6797ff94575
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/Shell/Run/Run.ps1
@@ -0,0 +1,397 @@
+<#
+This function gets info from pmc's derived list of all repositories and from mapping.json (which contains info on just the repositories powershell publishes packages to, their package formats, etc)
+to create a list of repositories PowerShell cares about along with repository Ids, repository full Urls and associated package that will be published to it.
+#>
+function Get-MappedRepositoryIds {
+    param(
+        [Parameter(Mandatory)]
+        [hashtable]
+        $Mapping,
+
+        [Parameter(Mandatory)]
+        $RepoList,
+
+        # LTS is not consider a package in this context.
+        # LTS is just another package name.
+        [Parameter(Mandatory)]
+        [ValidateSet('stable', 'preview')]
+        $Channel
+    )
+
+    $mappedReposUsedByPwsh = @()
+    foreach ($package in $Mapping.Packages)
+    {
+        Write-Verbose "package: $package"
+        $packageChannel = $package.channel
+        if (!$packageChannel) {
+            $packageChannel = 'all'
+        }
+
+        Write-Verbose "package channel: $packageChannel"
+        if ($packageChannel -eq 'all' -or $packageChannel -eq $Channel)
+        {
+            $repoIds = [System.Collections.Generic.List[string]]::new()
+            $packageFormat = $package.PackageFormat
+            Write-Verbose "package format: $packageFormat" -Verbose
+            $extension = [System.io.path]::GetExtension($packageFormat)
+            $packageType = $extension -replace '^\.'
+
+            if ($package.distribution.count -gt 1) {
+                throw "Package $($package | out-string) has more than one Distribution."
+            }
+
+            foreach ($distribution in $package.distribution)
+            {
+                $urlGlob = $package.url
+                switch ($packageType)
+                {
+                    'deb' {
+                        $urlGlob = $urlGlob + '-apt'
+                    }
+                    'rpm' {
+                        $urlGlob = $urlGlob + '-yum'
+                    }
+                    default {
+                        throw "Unknown package type: $packageType"
+                    }
+                }
+
+                Write-Verbose "---Finding repo id for: $urlGlob---" -Verbose
+                $repos = $RepoList | Where-Object { $_.name -eq $urlGlob }
+
+                if ($repos.id) {
+                    Write-Verbose "Found repo id: $($repos.id)" -Verbose
+                    $repoIds.AddRange(([string[]]$repos.id))
+                }
+                else {
+                    throw "Could not find repo for $urlGlob"
+                }
+
+                if ($repoIds.Count -gt 0) {
+                    $mappedReposUsedByPwsh += ($package + @{ "RepoId" = $repoIds.ToArray() })
+                }
+            }
+        }
+    }
+
+    Write-Verbose -Verbose "mapped repos length: $($mappedReposUsedByPwsh.Length)"
+    return $mappedReposUsedByPwsh
+}
+
+<#
+This function creates package objects for the packages to be published,
+with the package name (ie package name format resolve with channel based PackageName and pwsh version), repoId, distribution and package path.
+#>
+function Get-PackageObjects() {
+    param(
+        [Parameter(Mandatory)]
+        [psobject[]]
+        $RepoObjects,
+
+        [Parameter(Mandatory)]
+        [string]
+        $ReleaseVersion,
+
+        [Parameter(Mandatory)]
+        [string[]]
+        $PackageName
+    )
+
+    $packages = @()
+
+    foreach ($pkg in $RepoObjects)
+    {
+        if ($pkg.RepoId.count -gt 1) {
+            throw "Package $($pkg.name) has more than one repo id."
+        }
+
+        if ($pkg.Distribution.count -gt 1) {
+            throw "Package $($pkg.name) has more than one Distribution."
+        }
+
+        $pkgRepo = $pkg.RepoId | Select-Object -First 1
+        $pkgDistribution = $pkg.Distribution | Select-Object -First 1
+
+        foreach ($name in $PackageName) {
+            $pkgName = $pkg.PackageFormat.Replace('PACKAGE_NAME', $name).Replace('POWERSHELL_RELEASE', $ReleaseVersion)
+
+            if ($pkgName.EndsWith('.rpm')) {
+                $pkgName = $pkgName.Replace($ReleaseVersion, $ReleaseVersion.Replace('-', '_'))
+            }
+
+            $packagePath = "$pwshPackagesFolder/$pkgName"
+            $packagePathExists = Test-Path -Path $packagePath
+            if (!$packagePathExists)
+            {
+                throw "package path $packagePath does not exist"
+            }
+
+            Write-Verbose "Creating package info object for package '$pkgName' for repo '$pkgRepo'"
+            $packages += @{
+                PackagePath = $packagePath
+                PackageName = $pkgName
+                RepoId = $pkgRepo
+                Distribution = $pkgDistribution
+            }
+
+            Write-Verbose -Verbose "package info obj: Name: $pkgName RepoId: $pkgRepo Distribution: $pkgDistribution PackagePath: $packagePath"
+        }
+    }
+
+    Write-Verbose -Verbose "count of packages objects: $($packages.Length)"
+    return $packages
+}
+
+<#
+This function stages, uploads and publishes the powershell packages to their associated repositories in PMC.
+#>
+function Publish-PackageToPMC() {
+    param(
+        [Parameter(Mandatory)]
+        [pscustomobject[]]
+        $PackageObject,
+
+        [Parameter(Mandatory)]
+        [string]
+        $ConfigPath,
+
+        [Parameter(Mandatory)]
+        [bool]
+        $SkipPublish
+    )
+
+    # Don't fail outright when an error occurs, but instead pool them until
+    # after attempting to publish every package. That way we can choose to
+    # proceed for a partial failure.
+    $errorMessage = [System.Collections.Generic.List[string]]::new()
+    foreach ($finalPackage in $PackageObject)
+    {
+        Write-Verbose "---Staging package: $($finalPackage.PackageName)---" -Verbose
+        $packagePath = $finalPackage.PackagePath
+        $pkgRepo = $finalPackage.RepoId
+
+        $extension = [System.io.path]::GetExtension($packagePath)
+        $packageType = $extension -replace '^\.'
+        Write-Verbose "packageType: $packageType" -Verbose
+
+        $packageListJson = pmc --config $ConfigPath package $packageType list --file $packagePath
+        $list = $packageListJson | ConvertFrom-Json
+
+        $packageId = @()
+        if ($list.count -ne 0)
+        {
+            Write-Verbose "Package '$packagePath' already exists, skipping upload" -Verbose
+            $packageId = $list.results.id | Select-Object -First 1
+        }
+        else {
+            # PMC UPLOAD COMMAND
+            Write-Verbose -Verbose "Uploading package, config: '$ConfigPath' package: '$packagePath'"
+            $uploadResult = $null
+            try {
+                $uploadResult = pmc --config $ConfigPath package upload $packagePath --type $packageType
+            }
+            catch {
+                $errorMessage.Add("Uploading package $($finalPackage.PackageName) to $pkgRepo failed. See errors above for details.")
+                continue
+            }
+
+            $packageId = ($uploadResult | ConvertFrom-Json).id
+        }
+
+        Write-Verbose "Got package ID: '$packageId'" -Verbose
+        $distribution = $finalPackage.Distribution | select-object -First 1
+        Write-Verbose "distribution: $distribution" -Verbose
+
+        if (!$SkipPublish)
+        {
+            Write-Verbose "---Publishing package: $($finalPackage.PackageName) to $pkgRepo---" -Verbose
+
+            if (($packageType -ne 'rpm') -and ($packageType -ne 'deb'))
+            {
+                throw "Unsupported package type: $packageType"
+                return 1
+            }
+            else {
+                # PMC UPDATE COMMAND
+                $rawUpdateResponse = $null
+                try {
+                    if ($packageType -eq 'rpm') {
+                        $rawUpdateResponse = pmc --config $ConfigPath repo package update $pkgRepo --add-packages $packageId
+                    } elseif ($packageType -eq 'deb') {
+                        $rawUpdateResponse = pmc --config $ConfigPath repo package update $pkgRepo $distribution --add-packages $packageId
+                    }
+                }
+                catch {
+                    $errorMessage.Add("Invoking update for package $($finalPackage.PackageName) to $pkgRepo failed. See errors above for details.")
+                    continue
+                }
+
+                $state = ($rawUpdateResponse | ConvertFrom-Json).state
+                Write-Verbose -Verbose "update response state: $state"
+                if ($state -ne 'completed') {
+                    $errorMessage.Add("Publishing package $($finalPackage.PackageName) to $pkgRepo failed: $rawUpdateResponse")
+                    continue
+                }
+            }
+
+            # PMC PUBLISH COMMAND
+            # The CLI outputs messages and JSON in the same stream, so we must sift through it for now
+            # This is planned to be fixed with a switch in a later release
+            Write-Verbose -Verbose ([pscustomobject]($package + @{
+                PackageId = $packageId
+            }))
+
+            # At this point, the changes are staged and will eventually be publish.
+            # Running publish, causes them to go live "immediately"
+            $rawPublishResponse = $null
+            try {
+                $rawPublishResponse = pmc --config $ConfigPath repo publish $pkgRepo
+            }
+            catch {
+                $errorMessage.Add("Invoking final publish for package $($finalPackage.PackageName) to $pkgRepo failed. See errors above for details.")
+                continue
+            }
+
+            $publishState = ($rawPublishResponse | ConvertFrom-Json).state
+            Write-Verbose -Verbose "publish response state: $publishState"
+            if ($publishState -ne 'completed') {
+                $errorMessage.Add("Final publishing of package $($finalPackage.PackageName) to $pkgRepo failed: $rawPublishResponse")
+                continue
+            }
+        } else {
+            Write-Verbose -Verbose "Skipping Uploading package --config-file '$ConfigPath' package add '$packagePath' --repoID '$pkgRepo'"
+        }
+    }
+
+    if ($errorMessage) {
+        throw $errorMessage -join [Environment]::NewLine
+    }
+}
+
+if ($null -eq $env:MAPPING_FILE)
+{
+    Write-Verbose -Verbose "MAPPING_FILE variable didn't get passed correctly"
+    return 1
+}
+
+if ($null -eq $env:PWSH_PACKAGES_TARGZIP)
+{
+    Write-Verbose -Verbose "PWSH_PACKAGES_TARGZIP variable didn't get passed correctly"
+    return 1
+}
+
+if ($null -eq $env:PMC_METADATA)
+{
+    Write-Verbose -Verbose "PMC_METADATA variable didn't get passed correctly"
+    return 1
+}
+
+try {
+    Write-Verbose -Verbose "Downloading files"
+    Invoke-WebRequest -Uri $env:MAPPING_FILE -OutFile mapping.json
+    Invoke-WebRequest -Uri $env:PWSH_PACKAGES_TARGZIP -OutFile packages.tar.gz
+    Invoke-WebRequest -Uri $env:PMC_METADATA -OutFile pmcMetadata.json
+
+    # create variables to those paths and test them
+    $mappingFilePath = Join-Path "/package/unarchive/" -ChildPath "mapping.json"
+    $mappingFilePathExists = Test-Path $mappingFilePath
+    if (!$mappingFilePathExists)
+    {
+        Write-Verbose -Verbose "mapping.json expected at $mappingFilePath does not exist"
+        return 1
+    }
+
+    $packagesTarPath = Join-Path -Path "/package/unarchive/" -ChildPath "packages.tar.gz"
+    $packagesTarPathExists = Test-Path $packagesTarPath
+    if (!$packagesTarPathExists)
+    {
+        Write-Verbose -Verbose "packages.tar.gz expected at $packagesTarPath does not exist"
+        return 1
+    }
+
+    # Extract files from 'packages.tar.gz'
+    Write-Verbose -Verbose "---Extracting files from packages.tar.gz---"
+    $pwshPackagesFolder = Join-Path -Path "/package/unarchive/" -ChildPath "packages"
+    New-Item -Path $pwshPackagesFolder -ItemType Directory
+    tar -xzvf $packagesTarPath -C $pwshPackagesFolder --force-local
+    Get-ChildItem $pwshPackagesFolder -Recurse
+
+    $metadataFilePath = Join-Path -Path "/package/unarchive/" -ChildPath "pmcMetadata.json"
+    $metadataFilePathExists = Test-Path $metadataFilePath
+    if (!$metadataFilePathExists)
+    {
+        Write-Verbose -Verbose "pmcMetadata.json expected at $metadataFilePath does not exist"
+        return 1
+    }
+
+    # files in the extracted Run dir
+    $configPath = Join-Path '/package/unarchive/Run' -ChildPath 'settings.toml'
+    $configPathExists = Test-Path -Path $configPath
+    if (!$configPathExists)
+    {
+        Write-Verbose -Verbose "settings.toml expected at $configPath does not exist"
+        return 1
+    }
+
+    $pythonDlFolder = Join-Path '/package/unarchive/Run' -ChildPath 'python_dl'
+    $pyPathExists = Test-Path -Path $pythonDlFolder
+    if (!$pyPathExists)
+    {
+        Write-Verbose -Verbose "python_dl expected at $pythonDlFolder does not exist"
+        return 1
+    }
+
+    Write-Verbose -Verbose "Installing pmc-cli"
+    pip install --upgrade pip
+    pip --version --verbose
+    pip install /package/unarchive/Run/python_dl/*.whl
+
+    # Get metadata
+    $channel = ""
+    $packageNames = @()
+    $metadataContent = Get-Content -Path $metadataFilePath | ConvertFrom-Json
+    $releaseVersion = $metadataContent.ReleaseTag.TrimStart('v')
+    $skipPublish = $metadataContent.SkipPublish
+    $lts = $metadataContent.LTS
+
+    # Check if this is a rebuild version (e.g., 7.4.13-rebuild.5)
+    $isRebuild = $releaseVersion -match '-rebuild\.'
+
+    if ($releaseVersion.Contains('-')) {
+        $channel = 'preview'
+        $packageNames = @('powershell-preview')
+    }
+    else {
+        $channel = 'stable'
+        $packageNames = @('powershell')
+    }
+
+    # Only add LTS package if not a rebuild branch
+    if ($lts -and -not $isRebuild) {
+        $packageNames += @('powershell-lts')
+    }
+
+    Write-Verbose -Verbose "---Getting repository list---"
+    $rawResponse = pmc --config $configPath repo list --limit 800
+    $response = $rawResponse | ConvertFrom-Json
+    $limit = $($response.limit)
+    $count = $($response.count)
+    Write-Verbose -Verbose "'pmc repo list' limit is: $limit and count is: $count"
+    $repoList = $response.results
+
+    Write-Verbose -Verbose "---Getting package info---"
+
+
+    Write-Verbose "Reading mapping file from '$mappingFilePath'" -Verbose
+    $mapping = Get-Content -Raw -LiteralPath $mappingFilePath | ConvertFrom-Json -AsHashtable
+    $mappedReposUsedByPwsh = Get-MappedRepositoryIds -Mapping $mapping -RepoList $repoList -Channel $channel
+    $packageObjects = Get-PackageObjects -RepoObjects $mappedReposUsedByPwsh -PackageName $packageNames -ReleaseVersion $releaseVersion
+    Write-Verbose -Verbose "skip publish $skipPublish"
+    Publish-PackageToPMC -PackageObject $packageObjects -ConfigPath $configPath -SkipPublish $skipPublish
+}
+catch {
+    Write-Error -ErrorAction Stop $_.Exception.Message
+    return 1
+}
+
+return 0
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/UploadLinux.Rollout.json b/.pipelines/EV2Specs/ServiceGroupRoot/UploadLinux.Rollout.json
new file mode 100644
index 00000000000..d7c75c2e216
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/UploadLinux.Rollout.json
@@ -0,0 +1,54 @@
+{
+  "$schema": "https://ev2schema.azure.net/schemas/2020-01-01/rolloutParameters.json",
+  "contentVersion": "1.0.0.0",
+  "shellExtensions": [
+    {
+      "name": "Run",
+      "type": "Run",
+      "properties": {
+        "maxExecutionTime": "PT2H"
+      },
+      "package": {
+        "reference": {
+          "path": "Shell/Run.tar"
+        }
+      },
+      "launch": {
+        "command": [
+          "/bin/bash",
+          "-c",
+          "pwsh ./Run/Run.ps1"
+        ],
+        "environmentVariables": [
+          {
+            "name": "MAPPING_FILE",
+            "reference":
+            {
+                "path": "Parameters\\mapping.json"
+            }
+          },
+          {
+            "name": "PWSH_PACKAGES_TARGZIP",
+            "reference":
+            {
+                "path": "Parameters\\packages.tar.gz"
+            }
+          },
+          {
+            "name": "PMC_METADATA",
+            "reference":
+            {
+                "path": "Parameters\\pmcMetadata.json"
+            }
+          }
+        ],
+        "identity": {
+          "type": "userAssigned",
+          "userAssignedIdentities": [
+            "default"
+          ]
+        }
+      }
+    }
+  ]
+}
diff --git a/.pipelines/EV2Specs/ServiceGroupRoot/buildVer.txt b/.pipelines/EV2Specs/ServiceGroupRoot/buildVer.txt
new file mode 100644
index 00000000000..7dea76edb3d
--- /dev/null
+++ b/.pipelines/EV2Specs/ServiceGroupRoot/buildVer.txt
@@ -0,0 +1 @@
+1.0.1
diff --git a/.pipelines/MSIXBundle-vPack-Official.yml b/.pipelines/MSIXBundle-vPack-Official.yml
new file mode 100644
index 00000000000..2461d3cd310
--- /dev/null
+++ b/.pipelines/MSIXBundle-vPack-Official.yml
@@ -0,0 +1,414 @@
+trigger: none
+pr: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+- name: 'createVPack'
+  displayName: 'Create and Submit VPack'
+  type: boolean
+  default: true
+- name: 'ReleaseTagVar'
+  type: string
+  displayName: 'Release Tag Var:'
+  default: 'fromBranch'
+- name: 'debug'
+  displayName: 'Enable debug output'
+  type: boolean
+  default: false
+- name: netiso
+  displayName: "Network Isolation Policy"
+  type: string
+  values:
+    - KS4
+    - R1
+    - Netlock
+  default: "R1"
+
+name: msixbundle_vPack_$(Build.SourceBranchName)_Prod.True_Create.${{ parameters.createVPack }}_$(date:yyyyMMdd).$(rev:rr)
+
+variables:
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  - name: system.debug
+    value: ${{ parameters.debug }}
+  - name: BuildSolution
+    value: $(Build.SourcesDirectory)\dirs.proj
+  - name: BuildConfiguration
+    value: Release
+  - name: WindowsContainerImage
+    value: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest'
+  - name: Codeql.Enabled
+    value: false  #  pipeline is not building artifacts; it repackages existing artifacts into a vpack
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 1
+  - name: POWERSHELL_TELEMETRY_OPTOUT
+    value: 1
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: ReleaseTagVar
+    value: ${{ parameters.ReleaseTagVar }}
+  - name: netiso
+    value: ${{ parameters.netiso }}
+  - group: certificate_logical_to_actual # used within signing task
+  - group: MSIXSigningProfile
+  - group: msixTools
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+extends:
+  template: v2/Microsoft.Official.yml@onebranchTemplates
+  parameters:
+    platform:
+      name: 'windows_undocked' # windows undocked
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: ${{ variables.netiso }}
+    cloudvault:
+      enabled: false
+    globalSdl:
+      useCustomPolicy: true # for signing code
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      compiled:
+        enabled: false
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config/tsaoptions.json
+
+    stages:
+    - stage: Build_MSIX_Package
+      displayName: 'Build and create MSIX packages'
+      dependsOn: []
+      jobs:
+      - job: Build
+        pool:
+          type: windows
+
+        strategy:
+          matrix:
+            x64:
+              Architecture: x64
+            arm64:
+              Architecture: arm64
+
+        variables:
+          ArtifactPlatform: 'windows'
+          ob_outputDirectory: '$(BUILD.SOURCESDIRECTORY)\out'
+          ob_artifactBaseName: drop_build_$(Architecture)
+
+        steps:
+        - checkout: self
+          displayName: Checkout source code - during restore
+          clean: true
+          path: s  ## $(Build.SourcesDirectory) is at '$(Pipeline.Workspace)\s', so we need to check out repo to the 's' folder.
+          env:
+            ob_restore_phase: true
+
+        # The env variable 'ReleaseTagVar' will be updated in this step.
+        - template: /.pipelines/templates/SetVersionVariables.yml@self
+          parameters:
+            ReleaseTagVar: $(ReleaseTagVar)
+            CreateJson: yes
+
+        - pwsh: |
+            $releaseTag = '$(ReleaseTagVar)'
+            if ($releaseTag -match '-') {
+                throw "Never release msixbundle vpack for a preview build. Current version: $releaseTag"
+            }
+
+            # Check if release tag matches the expected format v#.#.#
+            $matched = $releaseTag -match '^v\d+\.(\d+)\.\d+$'
+            if (-not $matched) {
+                throw "Release tag must be in the format v#.#.#, such as 'v7.4.3'. Current version: $releaseTag"
+            }
+          displayName: Stop any preview release
+          env:
+            ob_restore_phase: true
+
+        ### START BUILD ###
+
+        # Clone the checked out PowerShell repo to '/PowerShell' and set the variable 'PowerShellRoot'.
+        - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+        - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+          parameters:
+            repoRoot: $(PowerShellRoot)
+
+        # Add CodeQL Init task right before your 'Build' step.
+        - task: CodeQL3000Init@0
+          env:
+            ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+          inputs:
+            Enabled: true
+            # AnalyzeInPipeline: false = upload results
+            # AnalyzeInPipeline: true = do not upload results
+            AnalyzeInPipeline: false
+            Language: csharp
+
+        - template: /.pipelines/templates/install-dotnet.yml@self
+
+        - pwsh: |
+            $runtime = switch ($env:Architecture)
+              {
+                "x64" { "win7-x64" }
+                "arm64" { "win-arm64" }
+              }
+
+            $vstsCommandString = "vso[task.setvariable variable=Runtime]$runtime"
+            Write-Host ("sending " + $vstsCommandString)
+            Write-Host "##$vstsCommandString"
+
+            Write-Verbose -Message "Building PowerShell with Runtime: $runtime for '$env:BuildConfiguration' configuration"
+            Import-Module -Name $(PowerShellRoot)/build.psm1 -Force
+            $buildWithSymbolsPath = New-Item -ItemType Directory -Path $(Pipeline.Workspace)/Symbols_$(Architecture) -Force
+
+            Start-PSBootstrap -Scenario Package
+            $null = New-Item -ItemType Directory -Path $buildWithSymbolsPath -Force -Verbose
+
+            Start-PSBuild -Runtime $runtime -Configuration Release -Output $buildWithSymbolsPath -Clean -PSModuleRestore -ReleaseTag $(ReleaseTagVar)
+
+            $refFolderPath = Join-Path $buildWithSymbolsPath 'ref'
+            Write-Verbose -Verbose "refFolderPath: $refFolderPath"
+            $outputPath = Join-Path '$(ob_outputDirectory)' 'psoptions'
+            $null = New-Item -ItemType Directory -Path $outputPath -Force
+            $psOptPath = "$outputPath/psoptions.json"
+            Save-PSOptions -PSOptionsPath $psOptPath
+
+            Write-Verbose -Verbose "Verifying pdbs exist in build folder"
+            $pdbs = Get-ChildItem -Path $buildWithSymbolsPath -Recurse -Filter *.pdb
+            if ($pdbs.Count -eq 0) {
+              throw "No pdbs found in build folder"
+            }
+            else {
+              Write-Verbose -Verbose "Found $($pdbs.Count) pdbs in build folder"
+              $pdbs | ForEach-Object {
+                Write-Verbose -Verbose "Pdb: $($_.FullName)"
+              }
+
+              $pdbs | Compress-Archive -DestinationPath '$(ob_outputDirectory)\symbols-$(Architecture).zip' -Update
+            }
+
+            Write-Verbose -Verbose "Completed building PowerShell for '$env:BuildConfiguration' configuration"
+          displayName: 'Build Windows Universal - $(Architecture)-$(BuildConfiguration) Symbols folder'
+          env:
+            ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+        # Add CodeQL Finalize task right after your 'Build' step.
+        - task: CodeQL3000Finalize@0
+          env:
+            ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+        - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+          displayName: 'Component Detection'
+          inputs:
+            sourceScanPath: '$(PowerShellRoot)\src'
+            ob_restore_phase: true
+
+        # The signed files will be put in '$(ob_outputDirectory)\Signed-$(Runtime)' after this step.
+        - template: /.pipelines/templates/obp-file-signing.yml@self
+          parameters:
+            binPath: '$(Pipeline.Workspace)/Symbols_$(Architecture)'
+            OfficialBuild: true
+
+        ### END OF BUILD ###
+
+        - pwsh: |
+            Get-ChildItem -Path '$(ob_outputDirectory)\Signed-$(Runtime)' -Recurse | Out-String -Width 9999
+          displayName: Capture signed files
+          condition: succeededOrFailed()
+
+        - pwsh: |
+            Get-ChildItem -Path env: | Out-String -Width 9999
+          displayName: Capture Environment
+          condition: succeededOrFailed()
+
+        ### START Packaging ###
+
+        - template: /.pipelines/templates/shouldSign.yml@self
+          parameters:
+            ob_restore_phase: false
+
+        - pwsh: |
+            Write-Verbose -Verbose "runtime = '$(Runtime)'"
+            Write-Verbose -Verbose "RepoRoot = '$(PowerShellRoot)'"
+
+            $runtime = '$(Runtime)'
+            $repoRoot = '$(PowerShellRoot)'
+            Import-Module "$repoRoot\build.psm1"
+            Import-Module "$repoRoot\tools\packaging"
+
+            Find-Dotnet
+
+            $signedFilesPath = '$(ob_outputDirectory)\Signed-$(Runtime)'
+            $psoptionsFilePath = '$(ob_outputDirectory)\psoptions\psoptions.json'
+
+            Write-Verbose -Verbose "signedFilesPath: $signedFilesPath"
+            Write-Verbose -Verbose "psoptionsFilePath: $psoptionsFilePath"
+
+            Write-Verbose -Message "checking pwsh exists in $signedFilesPath" -Verbose
+            if (-not (Test-Path $signedFilesPath\pwsh.exe)) {
+                throw "pwsh.exe not found in $signedFilesPath"
+            }
+
+            Write-Verbose -Message "Restoring PSOptions from $psoptionsFilePath" -Verbose
+
+            Restore-PSOptions -PSOptionsPath "$psoptionsFilePath"
+            Get-PSOptions | Write-Verbose -Verbose
+
+            $metadata = Get-Content "$repoRoot\tools\metadata.json" -Raw | ConvertFrom-Json
+            Write-Verbose -Verbose "metadata:"
+            $metadata | Out-String | Write-Verbose -Verbose
+
+            $publishLTS = $metadata.LTSRelease.PublishToChannels
+            $publishStable = $metadata.StableRelease.PublishToChannels
+
+            Write-Verbose -Verbose "Publish LTS: $publishLTS"
+            Write-Verbose -Verbose "Publish Stable: $publishStable"
+
+            if (-not $publishLTS -and -not $publishStable) {
+                throw "metadata.json indicates no channels to publish to."
+            }
+
+            ## Generated packages are placed in the current directory by default.
+            Set-Location $repoRoot
+            Start-PSPackage -Type msix -SkipReleaseChecks -WindowsRuntime $runtime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath -LTS:$publishLTS
+
+            if ($publishLTS -and $publishStable) {
+                $enabledChannels = "LTS,Stable"
+                Write-Verbose -Verbose "Publish to both LTS and Stable channels. Building additional Stable MSIX."
+                Start-PSPackage -Type msix -SkipReleaseChecks -WindowsRuntime $runtime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath
+            }
+
+            $msixPkgNameFilter = "PowerShell*.msix"
+            $msixPkgFile = Get-ChildItem -Path $repoRoot -Filter $msixPkgNameFilter -Recurse -File | ForEach-Object FullName
+            Write-Verbose -Verbose "Unsigned msix package(s): $msixPkgFile"
+
+            $pkgDir = '$(ob_outputDirectory)\pkgs'
+            $null = New-Item -ItemType Directory -Path $pkgDir -Force
+            Copy-Item -Path $msixPkgFile -Destination $pkgDir -Force -Verbose
+
+            if (-not $enabledChannels) {
+                $enabledChannels = $publishLTS ? 'LTS' : ($publishStable ? 'Stable' : 'None')
+            }
+
+            ## Create an output variable for the enabled channels so that downstream stages can use it.
+            $vstsCommandString = "vso[task.setvariable variable=EnabledChannels;isOutput=true]$enabledChannels"
+            Write-Host ("sending " + $vstsCommandString)
+            Write-Host "##$vstsCommandString"
+          name: BuildMSIXPackage
+          displayName: 'Build MSIX Package (Unsigned)'
+
+        ### END OF Packaging ###
+
+        - pwsh: |
+            Get-ChildItem -Path '$(ob_outputDirectory)\pkgs' -Recurse
+          displayName: 'List Unsigned Package'
+
+        - pwsh: |
+            $signedFilesPath = '$(ob_outputDirectory)\Signed-$(Runtime)'
+            Remove-Item -Path $signedFilesPath -Recurse -Force -Verbose
+          displayName: 'Remove Signed-$(Runtime) folder'
+
+    - stage: Pack_MSIXBundle_And_Sign
+      displayName: 'Pack and sign MSIXBundle'
+      dependsOn: [Build_MSIX_Package]
+
+      variables:
+        EnabledChannels: $[ stageDependencies.Build_MSIX_Package.Build.outputs['x64.BuildMSIXPackage.EnabledChannels'] ]
+
+      jobs:
+      - template: /.pipelines/templates/create-msixbundle-vpack.yml@self
+        parameters:
+          Channel: 'LTS'
+          createVPack: ${{ parameters.createVPack }}
+
+      - template: /.pipelines/templates/create-msixbundle-vpack.yml@self
+        parameters:
+          Channel: 'Stable'
+          createVPack: ${{ parameters.createVPack }}
+
+    - stage: Publish_Symbols
+      displayName: 'Publish Symbols'
+      dependsOn: [Pack_MSIXBundle_And_Sign]
+      jobs:
+      - job: PublishSymbols
+        pool:
+          type: windows
+        variables:
+          ob_outputDirectory: '$(BUILD.SOURCESDIRECTORY)\out'
+
+        steps:
+        - checkout: self
+          displayName: Checkout source code - during restore
+          clean: true
+          path: s  ## $(Build.SourcesDirectory) is at '$(Pipeline.Workspace)\s', so we need to check out repo to the 's' folder.
+          env:
+            ob_restore_phase: true
+
+        - pwsh: |
+            Get-ChildItem Env: | Out-String -Width 9999
+          displayName: 'Capture Environment Variables'
+
+        - task: DownloadPipelineArtifact@2
+          inputs:
+            artifactName: drop_build_x64
+            itemPattern: |
+              **/symbols-*.zip
+            targetPath: '$(Build.ArtifactStagingDirectory)\downloads'
+          displayName: Download symbols for x64
+
+        - task: DownloadPipelineArtifact@2
+          inputs:
+            artifactName: drop_build_arm64
+            itemPattern: |
+              **/symbols-*.zip
+            targetPath: '$(Build.ArtifactStagingDirectory)\downloads'
+          displayName: Download symbols for arm64
+
+        - pwsh: |
+            $downloadDir = '$(Build.ArtifactStagingDirectory)\downloads'
+            Write-Verbose -Verbose "Enumerating $downloadDir"
+            $downloadedArtifacts = Get-ChildItem -Path $downloadDir -Recurse -Filter 'symbols-*.zip'
+            $downloadedArtifacts | Out-String -Width 9999
+
+            $expandedRoot = New-Item -Path "$(Pipeline.Workspace)\expanded" -ItemType Directory -Verbose
+            $downloadedArtifacts | ForEach-Object {
+                $expandDir = Join-Path $expandedRoot $_.BaseName
+                Write-Verbose -Verbose "Expanding $($_.FullName) to $expandDir"
+                $null = New-Item -Path $expandDir -ItemType Directory -Verbose
+                Expand-Archive -Path $_.FullName -DestinationPath $expandDir -Force
+            }
+
+            Write-Verbose -Verbose "Enumerating $expandedRoot"
+            Get-ChildItem -Path $expandedRoot -Recurse | Out-String -Width 9999
+            $vstsCommandString = "vso[task.setvariable variable=SymbolsPath]$expandedRoot"
+            Write-Verbose -Message "$vstsCommandString" -Verbose
+            Write-Host -Object "##$vstsCommandString"
+          displayName: Expand and capture symbols folders
+
+        - task: PublishSymbols@2
+          condition: and(succeeded(), ${{ parameters.createVPack }})
+          inputs:
+            symbolsFolder: '$(SymbolsPath)'
+            searchPattern: '**/*.pdb'
+            indexSources: false
+            publishSymbols: true
+            symbolServerType: TeamServices
+            detailedLog: true
diff --git a/.pipelines/NonOfficial/PowerShell-Coordinated_Packages-NonOfficial.yml b/.pipelines/NonOfficial/PowerShell-Coordinated_Packages-NonOfficial.yml
new file mode 100644
index 00000000000..69506750c34
--- /dev/null
+++ b/.pipelines/NonOfficial/PowerShell-Coordinated_Packages-NonOfficial.yml
@@ -0,0 +1,98 @@
+trigger: none
+
+parameters:
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Debugging - Skip Signing
+    type: string
+    default: 'NO'
+  - name: RUN_TEST_AND_RELEASE
+    displayName: Debugging - Run Test and Release Artifacts Stage
+    type: boolean
+    default: true
+  - name: RUN_WINDOWS
+    displayName: Debugging - Enable Windows Stage
+    type: boolean
+    default: true
+  - name: ENABLE_MSBUILD_BINLOGS
+    displayName: Debugging - Enable MSBuild Binary Logs
+    type: boolean
+    default: false
+  - name: FORCE_CODEQL
+    displayName: Debugging - Enable CodeQL and set cadence to 1 hour
+    type: boolean
+    default: false
+
+name: bins-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)
+
+resources:
+  repositories:
+  - repository: ComplianceRepo
+    type: github
+    endpoint: ComplianceGHRepo
+    name: PowerShell/compliance
+    ref: master
+  - repository: onebranchTemplates
+    type: git
+    name: OneBranch.Pipelines/GovernedTemplates
+    ref: refs/heads/main
+
+variables:
+  - template: /.pipelines/templates/variables/PowerShell-Coordinated_Packages-Variables.yml@self
+    parameters:
+      InternalSDKBlobURL: ${{ parameters.InternalSDKBlobURL }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      SKIP_SIGNING: ${{ parameters.SKIP_SIGNING }}
+      ENABLE_MSBUILD_BINLOGS: ${{ parameters.ENABLE_MSBUILD_BINLOGS }}
+      FORCE_CODEQL: ${{ parameters.FORCE_CODEQL }}
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates
+  parameters:
+    customTags: 'ES365AIMigrationTooling'
+    featureFlags:
+      LinuxHostVersion:
+          Network: KS3
+      WindowsHostVersion:
+          Version: 2022
+          Network: KS3
+      incrementalSDLBinaryAnalysis: true
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armorty as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      codeql:
+        compiled:
+          enabled: $(CODEQL_ENABLED)
+        tsaEnabled: true # This enables TSA bug filing only for CodeQL 3000
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      cg:
+        enabled: true
+        ignoreDirectories: '.devcontainer,demos,docker,docs,src,test,tools/packaging'
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config\tsaoptions.json
+
+    stages:
+    - template: /.pipelines/templates/stages/PowerShell-Coordinated_Packages-Stages.yml@self
+      parameters:
+        RUN_WINDOWS: ${{ parameters.RUN_WINDOWS }}
+        RUN_TEST_AND_RELEASE: ${{ parameters.RUN_TEST_AND_RELEASE }}
+        OfficialBuild: false
diff --git a/.pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml b/.pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml
new file mode 100644
index 00000000000..0993cd69546
--- /dev/null
+++ b/.pipelines/NonOfficial/PowerShell-Packages-NonOfficial.yml
@@ -0,0 +1,97 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: ForceAzureBlobDelete
+    displayName: Delete Azure Blob
+    type: string
+    values:
+    - true
+    - false
+    default: false
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+  - name: disableNetworkIsolation
+    type: boolean
+    default: false
+
+name: pkgs-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)
+
+variables:
+  - template: /.pipelines/templates/variables/PowerShell-Packages-Variables.yml@self
+    parameters:
+      debug: ${{ parameters.debug }}
+      ForceAzureBlobDelete: ${{ parameters.ForceAzureBlobDelete }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      disableNetworkIsolation: ${{ parameters.disableNetworkIsolation }}
+
+resources:
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated_Packages-NonOfficial'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates
+  parameters:
+    cloudvault:
+      enabled: false
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: KS3
+      LinuxHostVersion:
+        Network: KS3
+      linuxEsrpSigning: true
+      incrementalSDLBinaryAnalysis: true
+      disableNetworkIsolation: ${{ variables.disableNetworkIsolation }}
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armorty as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      compiled:
+        enabled: false
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      cg:
+        enabled: true
+        ignoreDirectories: '.devcontainer,demos,docker,docs,src,test,tools/packaging'
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config\tsaoptions.json
+    stages:
+    - template: /.pipelines/templates/stages/PowerShell-Packages-Stages.yml@self
+      parameters:
+        OfficialBuild: false
diff --git a/.pipelines/NonOfficial/PowerShell-Release-Azure-NonOfficial.yml b/.pipelines/NonOfficial/PowerShell-Release-Azure-NonOfficial.yml
new file mode 100644
index 00000000000..b0bb4d79b39
--- /dev/null
+++ b/.pipelines/NonOfficial/PowerShell-Release-Azure-NonOfficial.yml
@@ -0,0 +1,82 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: skipPublish
+    displayName: Skip PMC Publish
+    type: boolean
+    default: false
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+
+name: ev2-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)
+
+variables:
+  - template: /.pipelines/templates/variables/PowerShell-Release-Azure-Variables.yml@self
+    parameters:
+      debug: ${{ parameters.debug }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated_Packages-NonOfficial'
+
+    - pipeline: PSPackagesOfficial
+      source: 'PowerShell-Packages-NonOfficial'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates
+  parameters:
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: Netlock
+      linuxEsrpSigning: true
+      incrementalSDLBinaryAnalysis: true
+    cloudvault:
+      enabled: false
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      tsa:
+        enabled: true
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        break: false # always break the build on binskim issues in addition to TSA upload
+        exactToolVersion: 4.4.2
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      tsaOptionsFile: $(Build.SourcesDirectory)\.config\tsaoptions.json
+    stages:
+      - template: /.pipelines/templates/release-prep-for-ev2.yml@self
+        parameters:
+          skipPublish: ${{ parameters.skipPublish }}
+
+      # NonOfficial: run the publish stage to verify templateContext artifact download,
+      # but skip the actual Ev2 push to PMC.
+      - template: /.pipelines/templates/release-publish-pmc.yml@self
+        parameters:
+          releaseEnvironment: Test
+          stagePrefix: Test
+          skipEv2Push: true
diff --git a/.pipelines/NonOfficial/PowerShell-Release-NonOfficial.yml b/.pipelines/NonOfficial/PowerShell-Release-NonOfficial.yml
new file mode 100644
index 00000000000..ebfc599e42a
--- /dev/null
+++ b/.pipelines/NonOfficial/PowerShell-Release-NonOfficial.yml
@@ -0,0 +1,106 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+  - name: SkipPublish
+    displayName: Skip Publishing to Nuget
+    type: boolean
+    default: false
+  - name: SkipPSInfraInstallers
+    displayName: Skip Copying Archives and Installers to PSInfrastructure Public Location
+    type: boolean
+    default: false
+  - name: skipMSIXPublish
+    displayName: Skip MSIX Publish
+    type: boolean
+    default: false
+
+name: release-$(BUILD.SOURCEBRANCHNAME)-nonofficial-$(Build.BuildId)
+
+variables:
+  - template: /.pipelines/templates/variables/PowerShell-Release-Variables.yml@self
+    parameters:
+      debug: ${{ parameters.debug }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+    - repository: PSInternalTools
+      type: git
+      name: PowerShellCore/Internal-PowerShellTeam-Tools
+      ref: refs/heads/master
+
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated_Packages-NonOfficial'
+
+    # NOTE: The alias name "PSPackagesOfficial" is intentionally reused here even
+    # for the NonOfficial pipeline source. Downstream shared templates (for example,
+    # release-validate-sdk.yml and release-upload-buildinfo.yml) reference artifacts
+    # using `download: PSPackagesOfficial`, so changing this alias would break them.
+    - pipeline: PSPackagesOfficial
+      source: 'PowerShell-Packages-NonOfficial'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@onebranchTemplates
+  parameters:
+    release:
+      category: NonAzure
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: KS3
+      incrementalSDLBinaryAnalysis: true
+    cloudvault:
+      enabled: false
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      tsa:
+        enabled: true
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        break: false # always break the build on binskim issues in addition to TSA upload
+        exactToolVersion: 4.4.2
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      # suppression:
+      #   suppressionFile: $(Build.SourcesDirectory)\.gdn\global.gdnsuppress
+      tsaOptionsFile: .config\tsaoptions.json
+
+    stages:
+    - template: /.pipelines/templates/stages/PowerShell-Release-Stages.yml@self
+      parameters:
+        releaseEnvironment: Test
+        SkipPublish: ${{ parameters.SkipPublish }}
+        SkipPSInfraInstallers: ${{ parameters.SkipPSInfraInstallers }}
+        skipMSIXPublish: ${{ parameters.skipMSIXPublish }}
diff --git a/.pipelines/NonOfficial/PowerShell-vPack-NonOfficial.yml b/.pipelines/NonOfficial/PowerShell-vPack-NonOfficial.yml
new file mode 100644
index 00000000000..071db02cff8
--- /dev/null
+++ b/.pipelines/NonOfficial/PowerShell-vPack-NonOfficial.yml
@@ -0,0 +1,88 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+- name: 'createVPack'
+  displayName: 'Create and Submit VPack'
+  type: boolean
+  default: true
+- name: vPackName
+  type: string
+  displayName: 'VPack Name:'
+  default: 'PowerShell.BuildTool'
+  values:
+    - PowerShell.BuildTool
+    - PowerShell
+    - PowerShellDoNotUse
+- name: 'ReleaseTagVar'
+  type: string
+  displayName: 'Release Tag Var:'
+  default: 'fromBranch'
+- name: 'debug'
+  displayName: 'Enable debug output'
+  type: boolean
+  default: false
+- name: netiso
+  displayName: "Network Isolation Policy"
+  type: string
+  values:
+    - KS4
+    - R1
+    - Netlock
+  default: "R1"
+
+name: vPack_$(Build.SourceBranchName)_NonOfficial_Create.${{ parameters.createVPack }}_Name.${{ parameters.vPackName}}_$(date:yyyyMMdd).$(rev:rr)
+
+variables:
+  - template: /.pipelines/templates/variables/PowerShell-vPack-Variables.yml@self
+    parameters:
+      debug: ${{ parameters.debug }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      netiso: ${{ parameters.netiso }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+extends:
+  template: v2/Microsoft.NonOfficial.yml@onebranchTemplates
+  parameters:
+    platform:
+      name: 'windows_undocked' # windows undocked
+
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: ${{ variables.netiso }}
+
+    cloudvault:
+      enabled: false
+
+    globalSdl:
+      useCustomPolicy: true # for signing code
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      compiled:
+        enabled: false
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config/tsaoptions.json
+    stages:
+    - template: /.pipelines/templates/stages/PowerShell-vPack-Stages.yml@self
+      parameters:
+        createVPack: ${{ parameters.createVPack }}
+        vPackName: ${{ parameters.vPackName }}
diff --git a/.pipelines/PowerShell-Coordinated_Packages-Official.yml b/.pipelines/PowerShell-Coordinated_Packages-Official.yml
new file mode 100644
index 00000000000..82f129a0a5e
--- /dev/null
+++ b/.pipelines/PowerShell-Coordinated_Packages-Official.yml
@@ -0,0 +1,98 @@
+trigger: none
+
+parameters:
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Debugging - Skip Signing
+    type: string
+    default: 'NO'
+  - name: RUN_TEST_AND_RELEASE
+    displayName: Debugging - Run Test and Release Artifacts Stage
+    type: boolean
+    default: true
+  - name: RUN_WINDOWS
+    displayName: Debugging - Enable Windows Stage
+    type: boolean
+    default: true
+  - name: ENABLE_MSBUILD_BINLOGS
+    displayName: Debugging - Enable MSBuild Binary Logs
+    type: boolean
+    default: false
+  - name: FORCE_CODEQL
+    displayName: Debugging - Enable CodeQL and set cadence to 1 hour
+    type: boolean
+    default: false
+
+name: bins-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)
+
+resources:
+  repositories:
+  - repository: ComplianceRepo
+    type: github
+    endpoint: ComplianceGHRepo
+    name: PowerShell/compliance
+    ref: master
+  - repository: onebranchTemplates
+    type: git
+    name: OneBranch.Pipelines/GovernedTemplates
+    ref: refs/heads/main
+
+variables:
+  - template: templates/variables/PowerShell-Coordinated_Packages-Variables.yml
+    parameters:
+      InternalSDKBlobURL: ${{ parameters.InternalSDKBlobURL }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      SKIP_SIGNING: ${{ parameters.SKIP_SIGNING }}
+      ENABLE_MSBUILD_BINLOGS: ${{ parameters.ENABLE_MSBUILD_BINLOGS }}
+      FORCE_CODEQL: ${{ parameters.FORCE_CODEQL }}
+
+extends:
+  template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates
+  parameters:
+    customTags: 'ES365AIMigrationTooling'
+    featureFlags:
+      LinuxHostVersion:
+          Network: KS3
+      WindowsHostVersion:
+          Version: 2022
+          Network: KS3
+      incrementalSDLBinaryAnalysis: true
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armorty as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      codeql:
+        compiled:
+          enabled: $(CODEQL_ENABLED)
+        tsaEnabled: true # This enables TSA bug filing only for CodeQL 3000
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      cg:
+        enabled: true
+        ignoreDirectories: '.devcontainer,demos,docker,docs,src,test,tools/packaging'
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config\tsaoptions.json
+
+    stages:
+    - template: templates/stages/PowerShell-Coordinated_Packages-Stages.yml
+      parameters:
+        RUN_WINDOWS: ${{ parameters.RUN_WINDOWS }}
+        RUN_TEST_AND_RELEASE: ${{ parameters.RUN_TEST_AND_RELEASE }}
+        OfficialBuild: true
diff --git a/.pipelines/PowerShell-Packages-Official.yml b/.pipelines/PowerShell-Packages-Official.yml
new file mode 100644
index 00000000000..8afce29ede7
--- /dev/null
+++ b/.pipelines/PowerShell-Packages-Official.yml
@@ -0,0 +1,97 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: ForceAzureBlobDelete
+    displayName: Delete Azure Blob
+    type: string
+    values:
+    - true
+    - false
+    default: false
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+  - name: disableNetworkIsolation
+    type: boolean
+    default: false
+
+name: pkgs-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)
+
+variables:
+  - template: templates/variables/PowerShell-Packages-Variables.yml
+    parameters:
+      debug: ${{ parameters.debug }}
+      ForceAzureBlobDelete: ${{ parameters.ForceAzureBlobDelete }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      disableNetworkIsolation: ${{ parameters.disableNetworkIsolation }}
+
+resources:
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated Binaries-Official'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+extends:
+  template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates
+  parameters:
+    cloudvault:
+      enabled: false
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: KS3
+      LinuxHostVersion:
+        Network: KS3
+      linuxEsrpSigning: true
+      incrementalSDLBinaryAnalysis: true
+      disableNetworkIsolation: ${{ variables.disableNetworkIsolation }}
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armorty as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      compiled:
+        enabled: false
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      cg:
+        enabled: true
+        ignoreDirectories: '.devcontainer,demos,docker,docs,src,test,tools/packaging'
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config\tsaoptions.json
+    stages:
+    - template: templates/stages/PowerShell-Packages-Stages.yml
+      parameters:
+        OfficialBuild: true
diff --git a/.pipelines/PowerShell-Release-Official-Azure.yml b/.pipelines/PowerShell-Release-Official-Azure.yml
new file mode 100644
index 00000000000..b5f57438925
--- /dev/null
+++ b/.pipelines/PowerShell-Release-Official-Azure.yml
@@ -0,0 +1,76 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: skipPublish
+    displayName: Skip PMC Publish
+    type: boolean
+    default: false
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+
+name: ev2-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)
+
+variables:
+  - template: templates/variables/PowerShell-Release-Azure-Variables.yml
+    parameters:
+      debug: ${{ parameters.debug }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated Binaries-Official'
+
+    - pipeline: PSPackagesOfficial
+      source: 'PowerShell-Packages-Official'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+extends:
+  template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates
+  parameters:
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: Netlock
+      linuxEsrpSigning: true
+      incrementalSDLBinaryAnalysis: true
+    cloudvault:
+      enabled: false
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      tsa:
+        enabled: true
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        break: false # always break the build on binskim issues in addition to TSA upload
+        exactToolVersion: 4.4.2
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      tsaOptionsFile: $(Build.SourcesDirectory)\.config\tsaoptions.json
+    stages:
+      - template: /.pipelines/templates/release-prep-for-ev2.yml@self
+        parameters:
+          skipPublish: ${{ parameters.skipPublish }}
+
+      - template: /.pipelines/templates/release-publish-pmc.yml@self
diff --git a/.pipelines/PowerShell-Release-Official.yml b/.pipelines/PowerShell-Release-Official.yml
new file mode 100644
index 00000000000..3528e6b1471
--- /dev/null
+++ b/.pipelines/PowerShell-Release-Official.yml
@@ -0,0 +1,102 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+  - name: 'debug'
+    displayName: 'Enable debug output'
+    type: boolean
+    default: false
+  - name: InternalSDKBlobURL
+    displayName: URL to the blob having internal .NET SDK
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    displayName: Release Tag
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    displayName: Skip Signing
+    type: string
+    default: 'NO'
+  - name: SkipPublish
+    displayName: Skip Publishing to Nuget
+    type: boolean
+    default: false
+  - name: SkipPSInfraInstallers
+    displayName: Skip Copying Archives and Installers to PSInfrastructure Public Location
+    type: boolean
+    default: false
+  - name: skipMSIXPublish
+    displayName: Skip MSIX Publish
+    type: boolean
+    default: false
+
+name: release-$(BUILD.SOURCEBRANCHNAME)-prod-$(Build.BuildId)
+
+variables:
+  - template: templates/variables/PowerShell-Release-Variables.yml
+    parameters:
+      debug: ${{ parameters.debug }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+    - repository: PSInternalTools
+      type: git
+      name: PowerShellCore/Internal-PowerShellTeam-Tools
+      ref: refs/heads/master
+
+  pipelines:
+    - pipeline: CoOrdinatedBuildPipeline
+      source: 'PowerShell-Coordinated Binaries-Official'
+
+    - pipeline: PSPackagesOfficial
+      source: 'PowerShell-Packages-Official'
+      trigger:
+        branches:
+          include:
+            - master
+            - releases/*
+
+extends:
+  template: v2/OneBranch.Official.CrossPlat.yml@onebranchTemplates
+  parameters:
+    release:
+      category: NonAzure
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: KS3
+      incrementalSDLBinaryAnalysis: true
+    cloudvault:
+      enabled: false
+    globalSdl:
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      tsa:
+        enabled: true
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        break: false # always break the build on binskim issues in addition to TSA upload
+        exactToolVersion: 4.4.2
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      # suppression:
+      #   suppressionFile: $(Build.SourcesDirectory)\.gdn\global.gdnsuppress
+      tsaOptionsFile: .config\tsaoptions.json
+
+    stages:
+    - template: templates/stages/PowerShell-Release-Stages.yml
+      parameters:
+        releaseEnvironment: Production
+        SkipPublish: ${{ parameters.SkipPublish }}
+        SkipPSInfraInstallers: ${{ parameters.SkipPSInfraInstallers }}
+        skipMSIXPublish: ${{ parameters.skipMSIXPublish }}
diff --git a/.pipelines/PowerShell-vPack-Official.yml b/.pipelines/PowerShell-vPack-Official.yml
new file mode 100644
index 00000000000..13087fbbf65
--- /dev/null
+++ b/.pipelines/PowerShell-vPack-Official.yml
@@ -0,0 +1,88 @@
+trigger: none
+
+parameters: # parameters are shown up in ADO UI in a build queue time
+- name: 'createVPack'
+  displayName: 'Create and Submit VPack'
+  type: boolean
+  default: true
+- name: vPackName
+  type: string
+  displayName: 'VPack Name:'
+  default: 'PowerShell.BuildTool'
+  values:
+    - PowerShell.BuildTool
+    - PowerShell
+    - PowerShellDoNotUse
+- name: 'ReleaseTagVar'
+  type: string
+  displayName: 'Release Tag Var:'
+  default: 'fromBranch'
+- name: 'debug'
+  displayName: 'Enable debug output'
+  type: boolean
+  default: false
+- name: netiso
+  displayName: "Network Isolation Policy"
+  type: string
+  values:
+    - KS4
+    - R1
+    - Netlock
+  default: "R1"
+
+name: vPack_$(Build.SourceBranchName)_Prod_Create.${{ parameters.createVPack }}_Name.${{ parameters.vPackName}}_$(date:yyyyMMdd).$(rev:rr)
+
+variables:
+  - template: templates/variables/PowerShell-vPack-Variables.yml
+    parameters:
+      debug: ${{ parameters.debug }}
+      ReleaseTagVar: ${{ parameters.ReleaseTagVar }}
+      netiso: ${{ parameters.netiso }}
+
+resources:
+  repositories:
+    - repository: onebranchTemplates
+      type: git
+      name: OneBranch.Pipelines/GovernedTemplates
+      ref: refs/heads/main
+
+extends:
+  template: v2/Microsoft.Official.yml@onebranchTemplates
+  parameters:
+    platform:
+      name: 'windows_undocked' # windows undocked
+
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+        Network: ${{ variables.netiso }}
+
+    cloudvault:
+      enabled: false
+
+    globalSdl:
+      useCustomPolicy: true # for signing code
+      disableLegacyManifest: true
+      # disabled Armory as we dont have any ARM templates to scan. It fails on some sample ARM templates.
+      armory:
+        enabled: false
+      sbom:
+        enabled: true
+      compiled:
+        enabled: false
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        enabled: false
+        exactToolVersion: 4.4.2
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: false
+      tsaOptionsFile: .config/tsaoptions.json
+    stages:
+    - template: templates/stages/PowerShell-vPack-Stages.yml
+      parameters:
+        createVPack: ${{ parameters.createVPack }}
+        vPackName: ${{ parameters.vPackName }}
diff --git a/.pipelines/apiscan-gen-notice.yml b/.pipelines/apiscan-gen-notice.yml
new file mode 100644
index 00000000000..df5ebaac091
--- /dev/null
+++ b/.pipelines/apiscan-gen-notice.yml
@@ -0,0 +1,111 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+name: apiscan-genNotice-$(BUILD.SOURCEBRANCHNAME)-$(Build.BuildId)
+trigger: none
+
+parameters:
+  - name: FORCE_CODEQL
+    displayName: Debugging - Enable CodeQL and set cadence to 1 hour
+    type: boolean
+    default: false
+
+variables:
+  # PAT permissions NOTE: Declare a SymbolServerPAT variable in this group with a 'microsoft' organizanization scoped PAT with 'Symbols' Read permission.
+  # A PAT in the wrong org will give a single Error 203. No PAT will give a single Error 401, and individual pdbs may be missing even if permissions are correct.
+  - group: symbols
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  # Defines the variables AzureFileCopySubscription, StorageAccount, StorageAccountKey, StorageResourceGroup, StorageSubscriptionName
+  - group: 'Azure Blob variable group'
+  # Defines the variables CgPat, CgOrganization, and CgProject
+  - group: 'ComponentGovernance'
+  - group: 'PoolNames'
+  - name: LinuxContainerImage
+    value: mcr.microsoft.com/onebranch/azurelinux/build:3.0
+  - name: WindowsContainerImage
+    value: onebranch.azurecr.io/windows/ltsc2022/vse2022:latest
+  - ${{ if eq(parameters['FORCE_CODEQL'],'true') }}:
+    # Cadence is hours before CodeQL will allow a re-upload of the database
+    - name: CodeQL.Cadence
+      value: 0
+  - name: CODEQL_ENABLED
+    ${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(parameters['FORCE_CODEQL'],'true')) }}:
+      value: true
+    ${{ else }}:
+      value: false
+  - name: Codeql.TSAEnabled
+    value: $(CODEQL_ENABLED)
+  # AnalyzeInPipeline: false = upload results
+  # AnalyzeInPipeline: true = do not upload results
+  - name: Codeql.AnalyzeInPipeline
+    ${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(parameters['FORCE_CODEQL'],'true')) }}:
+      value: false
+    ${{ else }}:
+      value: true
+
+resources:
+  repositories:
+  - repository: templates
+    type: git
+    name: OneBranch.Pipelines/GovernedTemplates
+    ref: refs/heads/main
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@templates
+  parameters:
+    featureFlags:
+      WindowsHostVersion:
+        Version: 2022
+    globalSdl:
+      codeql:
+        compiled:
+          enabled: $(CODEQL_ENABLED)
+        tsaEnabled: $(CODEQL_ENABLED) # This enables TSA bug filing only for CodeQL 3000
+      armory:
+        enabled: false
+      sbom:
+        enabled: false
+      cg:
+        enabled: true
+        ignoreDirectories: '.devcontainer,demos,docker,docs,src,test,tools/packaging'
+      tsa:
+        enabled: true  # onebranch publish all SDL results to TSA. If TSA is disabled all SDL tools will forced into 'break' build mode.
+      credscan:
+        enabled: true
+        scanFolder:  $(Build.SourcesDirectory)
+        suppressionsFile: $(Build.SourcesDirectory)\.config\suppress.json
+      binskim:
+        break: true  # always break the build on binskim issues in addition to TSA upload
+      policheck:
+        break: true  # always break the build on policheck issues. You can disable it by setting to 'false'
+      # APIScan requires a non-Ready-To-Run build
+      apiscan:
+        enabled: true
+        softwareName: "PowerShell" # Default is repo name
+        versionNumber: "7.6" # Default is build number
+        isLargeApp: false # Default: false.
+        symbolsFolder: $(SymbolsServerUrl);$(ob_outputDirectory)
+#softwareFolder - relative path to a folder to be scanned. Default value is root of artifacts folder
+      tsaOptionsFile: .config\tsaoptions.json
+      psscriptanalyzer:
+          enabled: true
+          policyName: Microsoft
+          break: false
+
+    stages:
+      - stage: APIScan
+        displayName: 'ApiScan'
+        dependsOn: []
+        jobs:
+          - template: /.pipelines/templates/compliance/apiscan.yml@self
+            parameters:
+              parentJobs: []
+      - stage: notice
+        displayName: Generate Notice File
+        dependsOn: []
+        jobs:
+          - template: /.pipelines/templates/compliance/generateNotice.yml@self
+            parameters:
+              parentJobs: []
diff --git a/.pipelines/store/PDP/PDP-Media/en-US/.gitkeep b/.pipelines/store/PDP/PDP-Media/en-US/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/.pipelines/store/PDP/PDP/en-US/PDP.xml b/.pipelines/store/PDP/PDP/en-US/PDP.xml
new file mode 100644
index 00000000000..ce36a3677f7
--- /dev/null
+++ b/.pipelines/store/PDP/PDP/en-US/PDP.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
+  <AppStoreName _locID="PowerShell-Private">
+    <!-- This is optional.  AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
+    <!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
+    <!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
+    <!-- _locComment_text="{MaxLength=200} App AppStoreName" -->
+    <!-- Dev Home -->
+  </AppStoreName>
+  <Keywords>
+    <!-- Valid length: 30 character limit, up to 7 elements -->
+    <Keyword _locID="App_keyword1">
+      <!-- _locComment_text="{MaxLength=30} App keyword 1" -->Shell</Keyword>
+    <Keyword _locID="App_keyword2">
+      <!-- _locComment_text="{MaxLength=30} App keyword 2" -->PowerShell</Keyword>
+    <Keyword _locID="App_keyword3">
+      <!-- _locComment_text="{MaxLength=30} App keyword 3" -->Terminal</Keyword>
+    <Keyword _locID="App_keyword4">
+      <!-- _locComment_text="{MaxLength=30} App keyword 4" -->Command Line</Keyword>
+    <Keyword _locID="App_keyword5">
+      <!-- _locComment_text="{MaxLength=30} App keyword 5" -->Automation</Keyword>
+    <Keyword _locID="App_keyword6">
+      <!-- _locComment_text="{MaxLength=30} App keyword 6" -->Task Automation</Keyword>
+    <Keyword _locID="App_keyword7">
+      <!-- _locComment_text="{MaxLength=30} App keyword 7" -->Scripting</Keyword>
+  </Keywords>
+  <Description _locID="App_Description">
+      <!-- _locComment_text="{MaxLength=10000} {Locked=Windows} App Description" -->PowerShell is a task-based command-line shell and scripting language built on .NET.  PowerShell helps system administrators and power-users rapidly automate task that manage operating systems (Linux, macOS, and Windows) and processes.
+
+PowerShell commands let you manage computers from the command line.  PowerShell providers let you access data stores, such as the registry and certificate store, as easily as you access the file system.  PowerShell includes a rich expression parser and a fully developed scripting language.
+
+PowerShell is Open Source.  See https://github.com/powershell/powershell </Description>
+  <ShortDescription _locID="App_ShortDescription">
+    <!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
+    <!-- _locComment_text="{MaxLength=500} App ShortDescription" -->
+  </ShortDescription>
+  <ShortTitle _locID="App_ShortTitle">
+    <!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
+    <!-- _locComment_text="{MaxLength=50} App ShortTitle" -->
+  </ShortTitle>
+  <SortTitle _locID="App_SortTitle">
+    <!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
+    <!-- _locComment_text="{MaxLength=255} App SortTitle" -->
+  </SortTitle>
+  <VoiceTitle _locID="App_VoiceTitle">
+    <!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
+    <!-- _locComment_text="{MaxLength=255} App VoiceTitle" -->
+  </VoiceTitle>
+  <DevStudio _locID="App_DevStudio">
+    <!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
+    <!-- _locComment_text="{MaxLength=255} App DevStudio" -->
+  </DevStudio>
+  <ReleaseNotes _locID="App_ReleaseNotes">
+    <!-- _locComment_text="{MaxLength=1500} {Locked=__VERSION_NUMBER__} App Release Note" -->Please see our GitHub releases page for additional details.</ReleaseNotes>
+  <ScreenshotCaptions>
+    <!-- Valid length: 200 character limit, up to 9 elements per platform -->
+    <!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
+  </ScreenshotCaptions>
+  <AdditionalAssets>
+    <!-- Valid elements:-->
+    <!--   HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
+    <!--   ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
+    <!--   SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
+    <!--   DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
+    <!--   ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
+    <!--   BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
+    <!-- There is no content for any of these elements, just a single attribute called FileName. -->
+  </AdditionalAssets>
+  <Trailers>
+  </Trailers>
+  <AppFeatures>
+    <!-- Valid length: 200 character limit, up to 20 elements -->
+    <AppFeature _locID="App_feature1">
+      <!-- _locComment_text="{MaxLength=200} App Feature 1" -->Interactive Shell</AppFeature>
+    <AppFeature _locID="App_feature2">
+      <!-- _locComment_text="{MaxLength=200} App Feature 2" -->Scripting Language</AppFeature>
+    <AppFeature _locID="App_feature3">
+      <!-- _locComment_text="{MaxLength=200} App Feature 3" -->Remote Management</AppFeature>
+    <AppFeature _locID="App_feature4">
+      <!-- _locComment_text="{MaxLength=200} App Feature 4" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature5">
+      <!-- _locComment_text="{MaxLength=200} App Feature 5" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature6">
+      <!-- _locComment_text="{MaxLength=200} App Feature 6" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature7">
+      <!-- _locComment_text="{MaxLength=200} App Feature 7" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature8">
+      <!-- _locComment_text="{MaxLength=200} App Feature 8" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature9">
+      <!-- _locComment_text="{MaxLength=200} App Feature 9" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature10">
+      <!-- _locComment_text="{MaxLength=200} App Feature 10" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature11">
+      <!-- _locComment_text="{MaxLength=200} App Feature 11" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature12">
+      <!-- _locComment_text="{MaxLength=200} App Feature 12" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature13">
+      <!-- _locComment_text="{MaxLength=200} App Feature 13" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature14">
+      <!-- _locComment_text="{MaxLength=200} App Feature 14" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature15">
+      <!-- _locComment_text="{MaxLength=200} App Feature 15" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature16">
+      <!-- _locComment_text="{MaxLength=200} App Feature 16" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature17">
+      <!-- _locComment_text="{MaxLength=200} App Feature 17" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature18">
+      <!-- _locComment_text="{MaxLength=200} App Feature 18" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature19">
+      <!-- _locComment_text="{MaxLength=200} App Feature 19" -->
+    </AppFeature>
+    <AppFeature _locID="App_feature20">
+      <!-- _locComment_text="{MaxLength=200} App Feature 20" -->
+    </AppFeature>
+  </AppFeatures>
+  <RecommendedHardware>
+    <!-- Valid length: 200 character limit, up to 11 elements -->
+    <Recommendation _locID="App_RecommendedHW1">
+      <!-- _locComment_text="{MaxLength=200} App Recommended Hardware 1" -->
+    </Recommendation>
+  </RecommendedHardware>
+  <MinimumHardware>
+    <!-- Valid length: 200 character limit, up to 11 elements -->
+  </MinimumHardware>
+  <CopyrightAndTrademark _locID="App_CopyrightandTrademark">
+    <!-- _locComment_text="{MaxLength=200} Copyright and Trademark" -->Microsoft Corporation</CopyrightAndTrademark>
+  <AdditionalLicenseTerms _locID="App_AdditionalLicenseTerms">
+    <!-- _locComment_text="{MaxLength=10000} Additional License Terms" -->
+  </AdditionalLicenseTerms>
+  <WebsiteURL _locID="App_WebsiteURL">
+    <!-- _locComment_text="{MaxLength=2048} WebsiteURL" -->https://github.com/PowerShell/PowerShell</WebsiteURL>
+  <SupportContactInfo _locID="App_SupportContactInfo">
+    <!-- _locComment_text="{MaxLength=2048} Support Contact Info" -->https://github.com/PowerShell/PowerShell/issues</SupportContactInfo>
+  <PrivacyPolicyURL _locID="App_PrivacyURL">
+    <!-- _locComment_text="{MaxLength=2048} Privacy Policy URL" -->https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
+</ProductDescription>
diff --git a/.pipelines/store/SBConfig.json b/.pipelines/store/SBConfig.json
new file mode 100644
index 00000000000..a52d60b045f
--- /dev/null
+++ b/.pipelines/store/SBConfig.json
@@ -0,0 +1,69 @@
+{
+  "helpUri": "https:\\\\aka.ms\\StoreBroker_Config",
+  "schemaVersion": 2,
+  "packageParameters": {
+    "PDPRootPath": "",
+    "Release": "",
+    "PDPInclude": [
+      "PDP.xml"
+    ],
+    "PDPExclude": [],
+    "LanguageExclude": [
+      "default",
+      "qps-ploc",
+      "qps-ploca",
+      "qps-plocm"
+    ],
+    "MediaRootPath": "",
+    "MediaFallbackLanguage": "en-US",
+    "PackagePath": [],
+    "OutPath": "",
+    "OutName": "",
+    "DisableAutoPackageNameFormatting": false
+  },
+  "appSubmission": {
+    "productId": "",
+    "targetPublishMode": "Immediate",
+    "targetPublishDate": null,
+    "visibility": "NotSet",
+    "pricing": {
+      "priceId": "NotAvailable",
+      "trialPeriod": "NoFreeTrial",
+      "marketSpecificPricings": {},
+      "sales": []
+    },
+    "allowTargetFutureDeviceFamilies": {
+      "Xbox": false,
+      "Team": false,
+      "Holographic": false,
+      "Desktop": false,
+      "Mobile": false
+    },
+    "allowMicrosoftDecideAppAvailabilityToFutureDeviceFamilies": false,
+    "enterpriseLicensing": "None",
+    "applicationCategory": "NotSet",
+    "hardwarePreferences": [],
+    "hasExternalInAppProducts": false,
+    "meetAccessibilityGuidelines": false,
+    "canInstallOnRemovableMedia": false,
+    "automaticBackupEnabled": false,
+    "isGameDvrEnabled": false,
+    "gamingOptions": [
+      {
+        "genres": [],
+        "isLocalMultiplayer": false,
+        "isLocalCooperative": false,
+        "isOnlineMultiplayer": false,
+        "isOnlineCooperative": false,
+        "localMultiplayerMinPlayers": 0,
+        "localMultiplayerMaxPlayers": 0,
+        "localCooperativeMinPlayers": 0,
+        "localCooperativeMaxPlayers": 0,
+        "isBroadcastingPrivilegeGranted": false,
+        "isCrossPlayEnabled": false,
+        "kinectDataForExternal": "Disabled"
+      }
+    ],
+    "notesForCertification": ""
+  }
+}
diff --git a/.pipelines/templates/SetVersionVariables.yml b/.pipelines/templates/SetVersionVariables.yml
new file mode 100644
index 00000000000..30ed1704022
--- /dev/null
+++ b/.pipelines/templates/SetVersionVariables.yml
@@ -0,0 +1,48 @@
+parameters:
+- name: ReleaseTagVar
+  default: v6.2.0
+- name: ReleaseTagVarName
+  default: ReleaseTagVar
+- name: CreateJson
+  default: 'no'
+- name: ob_restore_phase
+  type: boolean
+  default: true
+
+steps:
+- template: set-reporoot.yml@self
+  parameters:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
+
+- powershell: |
+    $createJson = ("${{ parameters.CreateJson }}" -ne "no")
+
+    $REPOROOT = $env:REPOROOT
+
+    if (-not (Test-Path $REPOROOT/tools/releaseBuild/setReleaseTag.ps1)) {
+      if (Test-Path "$REPOROOT/PowerShell/tools/releaseBuild/setReleaseTag.ps1") {
+        $REPOROOT = "$REPOROOT/PowerShell"
+      } else {
+        throw "Could not find setReleaseTag.ps1 in $REPOROOT/tools/releaseBuild or $REPOROOT/PowerShell/tools/releaseBuild"
+      }
+    }
+
+    $releaseTag = & "$REPOROOT/tools/releaseBuild/setReleaseTag.ps1" -ReleaseTag ${{ parameters.ReleaseTagVar }} -Variable "${{ parameters.ReleaseTagVarName }}" -CreateJson:$createJson
+    $version = $releaseTag.Substring(1)
+    $vstsCommandString = "vso[task.setvariable variable=Version]$version"
+    Write-Host ("sending " + $vstsCommandString)
+    Write-Host "##$vstsCommandString"
+    $azureVersion = $releaseTag.ToLowerInvariant() -replace '\.', '-'
+    $vstsCommandString = "vso[task.setvariable variable=AzureVersion]$azureVersion"
+    Write-Host ("sending " + $vstsCommandString)
+    Write-Host "##$vstsCommandString"
+  displayName: 'Set ${{ parameters.ReleaseTagVarName }} and other version Variables'
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
+
+- powershell: |
+    Get-ChildItem -Path Env: | Out-String -Width 150
+  displayName: Capture environment
+  condition: succeededOrFailed()
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
diff --git a/.pipelines/templates/approvalJob.yml b/.pipelines/templates/approvalJob.yml
new file mode 100644
index 00000000000..ac3b8bc2ab2
--- /dev/null
+++ b/.pipelines/templates/approvalJob.yml
@@ -0,0 +1,36 @@
+parameters:
+  - name: displayName
+    type: string
+  - name: instructions
+    type: string
+  - name: jobName
+    type: string
+    default: approval
+  - name: timeoutInMinutes
+    type: number
+    # 2 days
+    default: 2880
+  - name: onTimeout
+    type: string
+    default: 'reject'
+    values:
+        - resume
+        - reject
+  - name: dependsOnJob
+    type: string
+    default: ''
+
+jobs:
+  - job: ${{ parameters.jobName }}
+    dependsOn: ${{ parameters.dependsOnJob }}
+    displayName: ${{ parameters.displayName }}
+    pool:
+      type: agentless
+    timeoutInMinutes: 4320 # job times out in 3 days
+    steps:
+    - task: ManualValidation@0
+      displayName: ${{ parameters.displayName }}
+      timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+      inputs:
+        instructions: ${{ parameters.instructions }}
+        onTimeout: ${{ parameters.onTimeout }}
diff --git a/.pipelines/templates/channelSelection.yml b/.pipelines/templates/channelSelection.yml
new file mode 100644
index 00000000000..d6ddb53256e
--- /dev/null
+++ b/.pipelines/templates/channelSelection.yml
@@ -0,0 +1,49 @@
+steps:
+- pwsh: |
+    # Determine LTS, Preview, or Stable
+    $metadata = Get-Content "$(Build.SourcesDirectory)/PowerShell/tools/metadata.json" -Raw | ConvertFrom-Json
+
+    $LTS = $metadata.LTSRelease.PublishToChannels
+    $Stable = $metadata.StableRelease.PublishToChannels
+    $isPreview = '$(OutputReleaseTag.releaseTag)' -match '-'
+    $releaseTag = '$(OutputReleaseTag.releaseTag)'
+
+    # Rebuild branches should be treated as preview builds
+    # NOTE: The following regex is duplicated from rebuild-branch-check.yml.
+    # This duplication is necessary because channelSelection.yml does not call rebuild-branch-check.yml,
+    # and is used in contexts where that check may not have run.
+    # If you update this regex, also update it in rebuild-branch-check.yml to keep them in sync.
+    $isRebuildBranch = '$(Build.SourceBranch)' -match 'refs/heads/rebuild/.*-rebuild\.'
+
+    # If this is a rebuild branch, force preview mode and ignore LTS metadata
+    if ($isRebuildBranch) {
+        $IsLTS = $false
+        $IsStable = $false
+        $IsPreview = $true
+        Write-Verbose -Message "Rebuild branch detected, forcing Preview channel" -Verbose
+    }
+    else {
+        $IsLTS = [bool]$LTS
+        $IsStable = [bool]$Stable
+        $IsPreview = [bool]$isPreview
+    }
+
+    $channelVars = @{
+        IsLTS     = $IsLTS
+        IsStable  = $IsStable
+        IsPreview = $IsPreview
+    }
+
+    $trueCount = ($channelVars.Values | Where-Object { $_ }) | Measure-Object | Select-Object -ExpandProperty Count
+    if ($trueCount -gt 1) {
+        Write-Error "Only one of IsLTS, IsStable, or IsPreview can be true. Current values: IsLTS=$IsLTS, IsStable=$IsStable, IsPreview=$IsPreview"
+        exit 1
+    }
+
+    foreach ($name in $channelVars.Keys) {
+        $value = if ($channelVars[$name]) { 'true' } else { 'false' }
+        Write-Verbose -Message "Setting $name variable: $value" -Verbose
+        Write-Host "##vso[task.setvariable variable=$name;isOutput=true]$value"
+    }
+  name: ChannelSelection
+  displayName: Select Preview, Stable, or LTS Channel
diff --git a/.pipelines/templates/checkAzureContainer.yml b/.pipelines/templates/checkAzureContainer.yml
new file mode 100644
index 00000000000..3e383d2c572
--- /dev/null
+++ b/.pipelines/templates/checkAzureContainer.yml
@@ -0,0 +1,86 @@
+jobs:
+- job: DeleteBlob
+  variables:
+  - group: Azure Blob variable group
+  - group: AzureBlobServiceConnection
+  - name: ob_artifactBaseName
+    value: BuildInfoJson
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT/BuildJson'
+  - name: ob_sdl_sbom_enabled
+    value: false
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+
+  displayName: Delete blob is exists
+  pool:
+    type: windows
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: yes
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(PowerShellRoot)
+
+  - pwsh: |
+      if (-not (Test-Path -Path $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json)) {
+        Get-ChildItem -Path $(Build.SourcesDirectory) -Recurse
+        throw 'tsaoptions.json not found'
+      }
+    displayName: 'Check tsaoptions.json'
+
+  - pwsh: |
+      if (-not (Test-Path -Path $(Build.SourcesDirectory)\PowerShell\.config\suppress.json)) {
+        Get-ChildItem -Path $(Build.SourcesDirectory) -Recurse
+        throw 'suppress.json not found'
+      }
+    displayName: 'Check suppress.json'
+
+  - task: AzurePowerShell@5
+    displayName: Check if blob exists and delete if specified
+    inputs:
+      azureSubscription: az-blob-cicd-infra
+      scriptType: inlineScript
+      azurePowerShellVersion: LatestVersion
+      pwsh: true
+      inline: |
+        $containersToDelete = @('$(AzureVersion)', '$(AzureVersion)-private', '$(AzureVersion)-nuget', '$(AzureVersion)-gc')
+
+        $containersToDelete | ForEach-Object {
+          $containerName = $_
+          try {
+              $container = Get-AzStorageContainer -Container $containerName -Context (New-AzStorageContext -StorageAccountName '$(StorageAccount)') -ErrorAction Stop
+              if ($container -ne $null -and '$(ForceAzureBlobDelete)' -eq 'false') {
+                  throw "Azure blob container $containerName already exists. To overwrite, use ForceAzureBlobDelete parameter"
+              }
+              elseif ($container -ne $null -and '$(ForceAzureBlobDelete)' -eq 'true') {
+                  Write-Verbose -Verbose "Removing container $containerName due to ForceAzureBlobDelete parameter"
+                  Remove-AzStorageContainer -Name $containerName -Context (New-AzStorageContext -StorageAccountName '$(StorageAccount)') -Force
+              }
+          }
+          catch {
+              if ($_.FullyQualifiedErrorId -eq 'ResourceNotFoundException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageContainerCommand') {
+                  Write-Verbose -Verbose "Container $containerName does not exists."
+              }
+              else {
+                  throw $_
+              }
+          }
+        }
+  - template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.pipelines/templates/cloneToOfficialPath.yml b/.pipelines/templates/cloneToOfficialPath.yml
new file mode 100644
index 00000000000..b060c713683
--- /dev/null
+++ b/.pipelines/templates/cloneToOfficialPath.yml
@@ -0,0 +1,31 @@
+parameters:
+- name: nativePathRoot
+  default: ''
+- name: ob_restore_phase
+  type: boolean
+  default: true
+
+steps:
+- powershell: |
+    $dirSeparatorChar = [system.io.path]::DirectorySeparatorChar
+    $nativePath = "${{parameters.nativePathRoot }}${dirSeparatorChar}PowerShell"
+    Write-Host "##vso[task.setvariable variable=PowerShellRoot]$nativePath"
+    if ((Test-Path "$nativePath")) {
+      Remove-Item -Path "$nativePath" -Force -Recurse -Verbose -ErrorAction ignore
+    }
+    else {
+      Write-Verbose -Verbose -Message "No cleanup required."
+    }
+    # REPOROOT must be set by the pipeline - this is where the repository was checked out
+    $sourceDir = $env:REPOROOT
+    if (-not $sourceDir) { throw "REPOROOT environment variable is not set. This step depends on REPOROOT being configured in the pipeline." }
+
+    $buildModulePath = Join-Path $sourceDir "build.psm1"
+    if (-not (Test-Path $buildModulePath)) { throw "build.psm1 not found at: $buildModulePath. REPOROOT must point to the PowerShell repository root." }
+
+    Write-Verbose -Verbose -Message "Cloning from: $sourceDir to $nativePath"
+    git clone --quiet $sourceDir $nativePath
+  displayName: Clone PowerShell Repo to /PowerShell
+  errorActionPreference: silentlycontinue
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
diff --git a/.pipelines/templates/compliance/apiscan.yml b/.pipelines/templates/compliance/apiscan.yml
new file mode 100644
index 00000000000..b5a15699026
--- /dev/null
+++ b/.pipelines/templates/compliance/apiscan.yml
@@ -0,0 +1,170 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+jobs:
+  - job: APIScan
+    variables:
+      - name: NugetSecurityAnalysisWarningLevel
+        value: none
+      - name: ReleaseTagVar
+        value: fromBranch
+      # Defines the variables APIScanClient, APIScanTenant and APIScanSecret
+      - group: PS-PS-APIScan
+      - name: branchCounterKey
+        value: $[format('{0:yyyyMMdd}-{1}', pipeline.startTime,variables['Build.SourceBranch'])]
+      - name: branchCounter
+        value: $[counter(variables['branchCounterKey'], 1)]
+      - group: DotNetPrivateBuildAccess
+      - group: ReleasePipelineSecrets
+      - group: mscodehub-feed-read-general
+      - group: mscodehub-feed-read-akv
+      - name: ob_outputDirectory
+        value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+      - name: repoRoot
+        value: '$(Build.SourcesDirectory)\PowerShell'
+      - name: ob_sdl_tsa_configFile
+        value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+      - name: ob_sdl_credscan_suppressionsFile
+        value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+      - name: Codeql.SourceRoot
+        value: $(repoRoot)
+
+    pool:
+        type: windows
+
+    # APIScan can take a long time
+    timeoutInMinutes: 180
+
+    steps:
+    - checkout: self
+      clean: true
+      fetchTags: true
+      fetchDepth: 1000
+      displayName: Checkout PowerShell
+      retryCountOnTaskFailure: 1
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - template: ../SetVersionVariables.yml
+      parameters:
+        ReleaseTagVar: $(ReleaseTagVar)
+        CreateJson: no
+
+    - template: ../insert-nuget-config-azfeed.yml
+      parameters:
+        repoRoot: '$(repoRoot)'
+
+    - task: UseDotNet@2
+      displayName: 'Use .NET Core sdk'
+      inputs:
+        useGlobalJson: true
+        packageType: 'sdk'
+        workingDirectory: $(Build.SourcesDirectory)"
+
+    - pwsh: |
+        Import-Module .\build.psm1 -force
+        Find-DotNet
+        dotnet tool install dotnet-symbol --tool-path $(Agent.ToolsDirectory)\tools\dotnet-symbol
+        $symbolToolPath = Get-ChildItem -Path $(Agent.ToolsDirectory)\tools\dotnet-symbol\dotnet-symbol.exe | Select-Object -First 1 -ExpandProperty FullName
+        Write-Host "##vso[task.setvariable variable=symbolToolPath]$symbolToolPath"
+      displayName: Install dotnet-symbol
+      workingDirectory: '$(repoRoot)'
+      retryCountOnTaskFailure: 2
+
+    - task: CodeQL3000Init@0 # Add CodeQL Init task right before your 'Build' step.
+      displayName: 🔏 CodeQL 3000 Init
+      condition: eq(variables['CODEQL_ENABLED'], 'true')
+      inputs:
+        Language: csharp
+
+    - pwsh: |
+        Import-Module .\build.psm1 -force
+        Find-DotNet
+        Start-PSBuild -Configuration StaticAnalysis -PSModuleRestore -Clean -Runtime fxdependent-win-desktop
+
+        $OutputFolder = Split-Path (Get-PSOutput)
+
+        Write-Verbose -Verbose -Message "Deleting ref folder from output folder"
+        if (Test-Path $OutputFolder/ref) {
+          Remove-Item -Recurse -Force $OutputFolder/ref
+        }
+
+        $Destination = '$(ob_outputDirectory)'
+        if (-not (Test-Path $Destination)) {
+          Write-Verbose -Verbose -Message "Creating destination folder '$Destination'"
+          $null = mkdir $Destination
+        }
+
+        Copy-Item -Path "$OutputFolder\*" -Destination $Destination -Recurse -Verbose
+      workingDirectory: '$(repoRoot)'
+      displayName: 'Build PowerShell Source'
+
+    - pwsh: |
+        # Only keep windows runtimes
+        Write-Verbose -Verbose -Message "Deleting non-win-x64 runtimes ..."
+        Get-ChildItem -Path '$(ob_outputDirectory)\runtimes\*' | Where-Object {$_.FullName -notmatch '.*\\runtimes\\win'} | Foreach-Object {
+          Write-Verbose -Verbose -Message "Deleting $($_.FullName)"
+          Remove-Item -Path $_.FullName -Recurse -Force
+        }
+
+        # Remove win-x86/arm/arm64 runtimes due to issues with those runtimes
+        Write-Verbose -Verbose -Message "Temporarily deleting win-x86/arm/arm64 runtimes ..."
+        Get-ChildItem -Path '$(ob_outputDirectory)\runtimes\*' | Where-Object {$_.FullName -match '.*\\runtimes\\win-(x86|arm)'} | Foreach-Object {
+          Write-Verbose -Verbose -Message "Deleting $($_.FullName)"
+          Remove-Item -Path $_.FullName -Recurse -Force
+        }
+
+        Write-Host
+        Write-Verbose -Verbose -Message "Show content in 'runtimes' folder:"
+        Get-ChildItem -Path '$(ob_outputDirectory)\runtimes'
+        Write-Host
+      workingDirectory: '$(repoRoot)'
+      displayName: 'Remove unused runtimes'
+
+    - task: CodeQL3000Finalize@0 # Add CodeQL Finalize task right after your 'Build' step.
+      displayName: 🔏 CodeQL 3000 Finalize
+      condition: eq(variables['CODEQL_ENABLED'], 'true')
+
+    - pwsh: |
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      workingDirectory: '$(repoRoot)'
+      displayName: Capture Environment
+      condition: succeededOrFailed()
+
+    # Explicitly download symbols for the drop since the SDL image doesn't have http://SymWeb access and APIScan cannot handle https yet.
+    - pwsh: |
+        Import-Module .\build.psm1 -force
+        Find-DotNet
+        $pat = '$(SymbolServerPAT)'
+        if ($pat -like '*PAT*' -or $pat -eq '')
+        {
+          throw 'No PAT defined'
+        }
+        $url = 'https://microsoft.artifacts.visualstudio.com/defaultcollection/_apis/symbol/symsrv'
+        $(symbolToolPath) --authenticated-server-path $(SymbolServerPAT) $url --symbols -d "$env:ob_outputDirectory\*" --recurse-subdirectories
+      displayName: 'Download Symbols for binaries'
+      retryCountOnTaskFailure: 2
+      workingDirectory: '$(repoRoot)'
+
+    - pwsh: |
+        Get-ChildItem '$(ob_outputDirectory)' -File -Recurse |
+        Foreach-Object {
+          [pscustomobject]@{
+            Path = $_.FullName
+            Version = $_.VersionInfo.FileVersion
+            Md5Hash = (Get-FileHash -Algorithm MD5 -Path $_.FullName).Hash
+            Sha512Hash = (Get-FileHash -Algorithm SHA512 -Path $_.FullName).Hash
+          }
+        } | Export-Csv -Path '$(Build.SourcesDirectory)/ReleaseFileHash.csv'
+      workingDirectory: '$(repoRoot)'
+      displayName: 'Create release file hash artifact'
+
+    - pwsh: |
+        Copy-Item -Path '$(Build.SourcesDirectory)/ReleaseFileHash.csv' -Destination '$(ob_outputDirectory)' -Verbose
+      displayName: 'Publish Build File Hash artifact'
+
+    - pwsh: |
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: Capture Environment
+      condition: succeededOrFailed()
+      workingDirectory: '$(repoRoot)'
diff --git a/.pipelines/templates/compliance/generateNotice.yml b/.pipelines/templates/compliance/generateNotice.yml
new file mode 100644
index 00000000000..aec44b9b8f6
--- /dev/null
+++ b/.pipelines/templates/compliance/generateNotice.yml
@@ -0,0 +1,112 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+parameters:
+  - name: parentJobs
+    type: jobList
+
+jobs:
+- job: generateNotice
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT/notice'
+  - name: ob_sdl_apiscan_enabled
+    value: false
+  - name: repoRoot
+    value: '$(Build.SourcesDirectory)\PowerShell'
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+
+  displayName: Generate Notice
+  dependsOn:
+    ${{ parameters.parentJobs }}
+  pool:
+    type: windows
+
+  timeoutInMinutes: 15
+
+  steps:
+  - checkout: self
+    clean: true
+
+  - pwsh: |
+      [string]$Branch=$env:BUILD_SOURCEBRANCH
+      $branchOnly = $Branch -replace '^refs/heads/';
+      $branchOnly = $branchOnly -replace '[_\-]'
+
+      if ($branchOnly -eq 'master') {
+        $container = 'tpn'
+      } else {
+        $branchOnly = $branchOnly -replace '[\./]', '-'
+        $container = "tpn-$branchOnly"
+      }
+
+      $vstsCommandString = "vso[task.setvariable variable=tpnContainer]$container"
+      Write-Verbose -Message $vstsCommandString -Verbose
+      Write-Host -Object "##$vstsCommandString"
+    displayName: Set ContainerName
+
+  - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+    displayName: 'Component Detection'
+    inputs:
+      sourceScanPath: '$(repoRoot)\tools\cgmanifest\tpn'
+
+  - task: msospo.ospo-extension.8d7f9abb-6896-461d-9e25-4f74ed65ddb2.notice@0
+    displayName: 'NOTICE File Generator'
+    inputs:
+      outputfile: '$(ob_outputDirectory)\ThirdPartyNotices.txt'
+      # output format can be html or text
+      outputformat: text
+      # this isn't working
+      # additionaldata: $(Build.SourcesDirectory)\assets\additionalAttributions.txt
+
+  - pwsh: |
+      Get-Content -Raw -Path $(repoRoot)\assets\additionalAttributions.txt | Out-File '$(ob_outputDirectory)\ThirdPartyNotices.txt' -Encoding utf8NoBOM -Force -Append
+      Get-Content -Raw -Path $(repoRoot)\assets\additionalAttributions.txt
+    displayName: Append Additional Attributions
+    continueOnError: true
+
+  - pwsh: |
+      Get-Content -Raw -Path '$(ob_outputDirectory)\ThirdPartyNotices.txt'
+    displayName: Capture Notice
+    continueOnError: true
+
+  - task: AzurePowerShell@5
+    displayName: Upload Notice
+    inputs:
+      azureSubscription: az-blob-cicd-infra
+      scriptType: inlineScript
+      azurePowerShellVersion: LatestVersion
+      workingDirectory: '$(repoRoot)'
+      pwsh: true
+      inline: |
+        try {
+          $downloadsDirectory = '$(Build.ArtifactStagingDirectory)/downloads'
+          $uploadedDirectory = '$(Build.ArtifactStagingDirectory)/uploaded'
+          $storageAccountName = "pscoretestdata"
+          $containerName = '$(tpnContainer)'
+          $blobName = 'ThirdPartyNotices.txt'
+          $noticePath = "$(ob_outputDirectory)\$blobName"
+
+          Write-Verbose -Verbose "creating context ($storageAccountName) ..."
+          $context = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount
+
+          Write-Verbose -Verbose "checking if container ($containerName) exists ..."
+          $containerExists = Get-AzStorageContainer -Name $containerName -Context $context -ErrorAction SilentlyContinue
+          if (-not $containerExists) {
+            Write-Verbose -Verbose "Creating container ..."
+            $null = New-AzStorageContainer -Name $containerName -Context $context
+            Write-Verbose -Verbose "Blob container $containerName created successfully."
+          }
+
+          Write-Verbose -Verbose "Setting blob ($blobName) content ($noticePath) ..."
+          $null = Set-AzStorageBlobContent -File $noticePath -Container $containerName -Blob $blobName -Context $context -confirm:$false -force
+          Write-Verbose -Verbose "Done"
+        } catch {
+          Get-Error
+          throw
+        }
diff --git a/.pipelines/templates/create-msixbundle-vpack.yml b/.pipelines/templates/create-msixbundle-vpack.yml
new file mode 100644
index 00000000000..df46523675f
--- /dev/null
+++ b/.pipelines/templates/create-msixbundle-vpack.yml
@@ -0,0 +1,178 @@
+parameters:
+  - name: Channel
+    type: string
+  - name: createVPack
+    type: boolean
+
+jobs:
+- job: Bundle_${{ parameters.Channel }}
+  condition: contains(variables['EnabledChannels'], '${{ parameters.Channel }}')
+  pool:
+    type: windows
+
+  variables:
+    ArtifactPlatform: 'windows'
+    Channel: ${{ parameters.Channel }}
+    ob_outputDirectory: '$(BUILD.SOURCESDIRECTORY)\out'
+    ob_artifactBaseName: 'drop_pack_$(Channel)'
+    ob_createvpack_enabled: ${{ parameters.createVPack }}
+    ob_createvpack_packagename: 'PowerShell7-$(Channel).Store.app'
+    ob_createvpack_owneralias: 'dongbow'
+    ob_createvpack_description: 'VPack for the PowerShell 7 Store Application ($(Channel))'
+    ob_createvpack_targetDestinationDirectory: '$(Destination)'  ## The value is from the 'CreateVpack' task, used when pulling the generated VPack.
+    ob_createvpack_propsFile: false
+    ob_createvpack_provData: true
+    ob_createvpack_metadata: '$(Build.SourceVersion)'
+    ob_createvpack_versionAs: string
+    ob_createvpack_version: '$(Version)'
+    ob_createvpack_verbose: true
+
+  steps:
+  - checkout: self
+    displayName: Checkout source code - during restore
+    clean: true
+    path: s  ## $(Build.SourcesDirectory) is at '$(Pipeline.Workspace)\s', so we need to check out repo to the 's' folder.
+    env:
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: /.pipelines/templates/shouldSign.yml@self
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      artifactName: drop_build_x64
+      itemPattern: |
+        **/*.msix
+      targetPath: '$(Build.ArtifactStagingDirectory)\downloads'
+    displayName: Download msix for x64
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      artifactName: drop_build_arm64
+      itemPattern: |
+        **/*.msix
+      targetPath: '$(Build.ArtifactStagingDirectory)\downloads'
+    displayName: Download msix for arm64
+
+  # Finds the makeappx tool on the machine.
+  - pwsh: |
+      Write-Verbose -Verbose 'PowerShell Version: $(Version)'
+      $cmd = Get-Command makeappx.exe -ErrorAction Ignore
+      if ($cmd) {
+          Write-Verbose -Verbose 'makeappx available in PATH'
+          $exePath = $cmd.Source
+      } else {
+          $makeappx = Get-ChildItem -Recurse 'C:\Program Files (x86)\Windows Kits\10\makeappx.exe' |
+              Where-Object { $_.DirectoryName -match 'x64' } |
+              Select-Object -Last 1
+          $exePath = $makeappx.FullName
+          Write-Verbose -Verbose "makeappx was found: $exePath"
+      }
+      $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    displayName: Find makeappx tool
+    retryCountOnTaskFailure: 1
+
+  - pwsh: |
+      $sourceDir = '$(Pipeline.Workspace)\releasePipeline\msix'
+      $null = New-Item -Path $sourceDir -ItemType Directory -Force
+
+      $channel = '$(Channel)'
+      if ($channel -eq 'LTS') {
+          Write-Verbose -Verbose "LTS channel. Remove Stable MSIX packages"
+          $stablePkgs = Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)\downloads\*.msix" -Recurse |
+              Where-Object { $_.FullName -notlike '*-LTS-*.msix' } | ForEach-Object FullName
+
+          if ($stablePkgs) {
+              Remove-Item -Path $stablePkgs -Force -Verbose -ErrorAction Stop
+          } else {
+              Write-Verbose -Verbose "No Stable MSIX package was found."
+          }
+      }
+      else {
+          Write-Verbose -Verbose "Stable channel. Remove LTS MSIX packages"
+          $ltsPkgs = Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)\downloads\*.msix" -Recurse |
+              Where-Object { $_.FullName -like '*-LTS-*.msix' } | ForEach-Object FullName
+
+          if ($ltsPkgs) {
+              Remove-Item -Path $ltsPkgs -Force -Verbose -ErrorAction Stop
+          } else {
+              Write-Verbose -Verbose "No LTS MSIX package was found."
+          }
+      }
+
+      $msixFiles = Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)\downloads\*.msix" -Recurse
+      foreach ($msixFile in $msixFiles) {
+          $null = Copy-Item -Path $msixFile.FullName -Destination $sourceDir -Force -Verbose
+      }
+
+      $file = Get-ChildItem $sourceDir | Select-Object -First 1
+      $prefix = ($file.BaseName -split "-win")[0]
+      $pkgName = "$prefix.msixbundle"
+      Write-Verbose -Verbose "Creating $pkgName"
+
+      $makeappx = '$(MakeAppxPath)'
+      $outputDir = "$sourceDir\output"
+      New-Item $outputDir -Type Directory -Force > $null
+      & $makeappx bundle /d $sourceDir /p "$outputDir\$pkgName"
+      if ($LASTEXITCODE -ne 0) {
+          throw "makeappx bundle failed with exit code $LASTEXITCODE"
+      }
+
+      Get-ChildItem -Path $sourceDir -Recurse | Out-String -Width 200
+      $vstsCommandString = "vso[task.setvariable variable=BundleDir]$outputDir"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    displayName: Create MsixBundle
+    retryCountOnTaskFailure: 1
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign MsixBundle
+    inputs:
+      command: 'sign'
+      signing_profile: $(MSIXProfile)
+      files_to_sign: '**/*.msixbundle'
+      search_root: '$(BundleDir)'
+
+  - pwsh: |
+      $signedBundle = Get-ChildItem -Path $(BundleDir) -Filter "*.msixbundle" -File
+      Write-Verbose -Verbose "Signed bundle: $signedBundle"
+
+      $signature = Get-AuthenticodeSignature -FilePath $signedBundle.FullName
+      if ($signature.Status -ne 'Valid') {
+          throw "The bundle file doesn't have a valid signature. Signature status: $($signature.Status)"
+      }
+
+      if (-not (Test-Path '$(ob_outputDirectory)' -PathType Container)) {
+          $null = New-Item '$(ob_outputDirectory)' -ItemType Directory -ErrorAction Stop
+      }
+
+      $channel = '$(Channel)'
+      $targetFileName = if ($channel -eq 'LTS') {
+          'Microsoft.PowerShell-LTS_8wekyb3d8bbwe.msixbundle'
+      } else {
+          'Microsoft.PowerShell_8wekyb3d8bbwe.msixbundle'
+      }
+      $targetPath = Join-Path '$(ob_outputDirectory)' $targetFileName
+      Copy-Item -Verbose -Path $signedBundle.FullName -Destination $targetPath
+
+      Write-Verbose -Verbose "Uploaded Bundle:"
+      Get-ChildItem -Path $(ob_outputDirectory) | Out-String -Width 200 -Stream | Write-Verbose -Verbose
+    displayName: 'Stage msixbundle for VPack'
+
+  - pwsh: |
+      Write-Verbose "VPack enabled: $(ob_createvpack_enabled)" -Verbose
+      Write-Verbose "VPack Name: $(ob_createvpack_packagename)" -Verbose
+      Write-Verbose "VPack Version: $(ob_createvpack_version)" -Verbose
+
+      $vpackFiles = Get-ChildItem -Path '$(ob_outputDirectory)\*' -Recurse
+      if($vpackFiles.Count -eq 0) {
+          throw "No files found in $(ob_outputDirectory)"
+      }
+      $vpackFiles | Out-String -Width 200
+    displayName: Debug Output Directory and Version
diff --git a/.pipelines/templates/insert-nuget-config-azfeed.yml b/.pipelines/templates/insert-nuget-config-azfeed.yml
new file mode 100644
index 00000000000..20057440c00
--- /dev/null
+++ b/.pipelines/templates/insert-nuget-config-azfeed.yml
@@ -0,0 +1,53 @@
+parameters:
+- name: "repoRoot"
+  default: $(REPOROOT)
+- name: "ob_restore_phase"
+  type: boolean
+  default: true
+
+steps:
+- task: NuGetAuthenticate@1
+  displayName: Install Azure Artifacts Credential Provider
+  inputs:
+    forceReinstallCredentialProvider: true
+
+- pwsh: |
+    try {
+      $configPath = "${env:NugetConfigDir}/nuget.config"
+      Import-Module ${{ parameters.repoRoot }}/build.psm1 -Force
+
+      Write-Verbose -Verbose "Running: Switch-PSNugetConfig -Source Private -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'"
+      Switch-PSNugetConfig -Source Private -UserName '$(AzDevopsFeedUserNameKVPAT)' -ClearTextPAT '$(powershellPackageReadPat)'
+
+      if(-not (Test-Path $configPath))
+      {
+          throw "nuget.config is not created"
+      }
+    }
+    catch {
+      Get-Error
+      throw
+    }
+  displayName: 'Switch to production Azure DevOps feed for all nuget.configs'
+  condition: and(succeededOrFailed(), ne(variables['UseAzDevOpsFeed'], ''))
+  env:
+    NugetConfigDir: ${{ parameters.repoRoot }}/src/Modules
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
+
+- pwsh: |
+    Get-ChildItem ${{ parameters.repoRoot }}/nuget.config -Recurse | Foreach-Object {
+      Write-Verbose -Verbose "--- START $($_.fullname) ---"
+      get-content $_.fullname  | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      Write-Verbose -Verbose "--- END $($_.fullname) ---"
+    }
+  displayName: 'Capture all nuget.config files'
+  condition: and(succeededOrFailed(), ne(variables['UseAzDevOpsFeed'], ''))
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
+
+- pwsh: |
+    Get-ChildItem -Path env:VSS* | Out-String -width 9999 -Stream | write-Verbose -Verbose
+  displayName: Capture VSS* Environment
+  condition: and(succeededOrFailed(), ne(variables['UseAzDevOpsFeed'], ''))
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
diff --git a/.pipelines/templates/install-dotnet.yml b/.pipelines/templates/install-dotnet.yml
new file mode 100644
index 00000000000..464e13d1047
--- /dev/null
+++ b/.pipelines/templates/install-dotnet.yml
@@ -0,0 +1,24 @@
+parameters:
+- name: ob_restore_phase
+  type: boolean
+  default: true
+
+steps:
+  - pwsh: |
+      if (-not (Test-Path '$(RepoRoot)')) {
+        $psRoot = '$(Build.SourcesDirectory)/PowerShell'
+        Set-Location $psRoot -Verbose
+      }
+
+      $version = Get-Content ./global.json | ConvertFrom-Json | Select-Object -ExpandProperty sdk | Select-Object -ExpandProperty version
+
+      Write-Verbose -Verbose "Installing .NET SDK with version $version"
+
+      Import-Module ./build.psm1 -Force
+      Install-Dotnet -Version $version -Verbose
+
+    displayName: 'Install dotnet SDK'
+    workingDirectory: $(RepoRoot)
+    env:
+      ob_restore_phase: ${{ parameters.ob_restore_phase }}
+
diff --git a/.pipelines/templates/linux-package-build.yml b/.pipelines/templates/linux-package-build.yml
new file mode 100644
index 00000000000..06700ed31ec
--- /dev/null
+++ b/.pipelines/templates/linux-package-build.yml
@@ -0,0 +1,218 @@
+parameters:
+  unsignedDrop: 'drop_linux_build_linux_x64'
+  signedDrop: 'drop_linux_sign_linux_x64'
+  packageType: deb
+  jobName: 'deb'
+
+jobs:
+- job: ${{ parameters.jobName }}
+  displayName: Package linux ${{ parameters.packageType }}
+  condition: succeeded()
+  pool:
+    type: linux
+
+  variables:
+    - name: nugetMultiFeedWarnLevel
+      value: none
+    - name: NugetSecurityAnalysisWarningLevel
+      value: none
+    - name: skipNugetSecurityAnalysis
+      value: true
+    - group: DotNetPrivateBuildAccess
+    - group: certificate_logical_to_actual
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_binskim_enabled
+      value: true
+    - name: PackageType
+      value: ${{ parameters.packageType }}
+    - name: signedDrop
+      value: ${{ parameters.signedDrop }}
+    - name: unsignedDrop
+      value: ${{ parameters.unsignedDrop }}
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)/PowerShell/.config/tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)/PowerShell/.config/suppress.json
+    # PGP signing profile selection: Mariner (Azure Linux) packages ship through
+    # a different distribution channel and must be signed with the Mariner release
+    # key; all other Linux packages use the standard PowerShell Linux key. Both
+    # key codes come from the `certificate_logical_to_actual` variable group.
+    - ${{ if startsWith(parameters.jobName, 'mariner') }}:
+      - name: SigningProfile
+        value: $(pgp_release_cert_id)
+    - ${{ else }}:
+      - name: SigningProfile
+        value: $(pgp_linux_cert_id)
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture environment
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - template: SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: shouldSign.yml
+
+  - template: cloneToOfficialPath.yml
+    parameters:
+      nativePathRoot: '$(Agent.TempDirectory)'
+
+  - template: rebuild-branch-check.yml@self
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: ${{ parameters.unsignedDrop }}
+    displayName: 'Download unsigned artifacts'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: ${{ parameters.signedDrop }}
+    displayName: 'Download signed artifacts'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - pwsh: |
+      Write-Verbose -Verbose "Unsigned artifacts"
+      Get-ChildItem "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/${{ parameters.unsignedDrop }}" -Recurse
+
+      Write-Verbose -Verbose "Signed artifacts"
+      Get-ChildItem "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/${{ parameters.signedDrop }}" -Recurse
+    displayName: 'Capture Downloaded Artifacts'
+    # Diagnostics is not critical it passes every time it runs
+    continueOnError: true
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      $packageType = '$(PackageType)'
+      Write-Verbose -Verbose "packageType = $packageType"
+
+      $signedDrop = '$(signedDrop)'
+      Write-Verbose -Verbose "signedDrop = $signedDrop"
+
+      $unsignedDrop = '$(unsignedDrop)'
+      Write-Verbose -Verbose "unsignedDrop = $unsignedDrop"
+
+      Write-Verbose -Message "Init..." -Verbose
+
+      $repoRoot = "$env:REPOROOT"
+      Import-Module "$repoRoot/build.psm1"
+      Import-Module "$repoRoot/tools/packaging"
+
+      Start-PSBootstrap -Scenario Both
+
+      $psOptionsPath = "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/${unsignedDrop}/psoptions/psoptions.json"
+
+      if (-not (Test-Path $psOptionsPath)) {
+        throw "psOptionsPath file not found at $psOptionsPath"
+      }
+
+      Restore-PSOptions $psOptionsPath
+      Write-Verbose -Message "Restoring PSOptions from $psoptionsFilePath" -Verbose
+      Get-PSOptions | Write-Verbose -Verbose
+
+      $signedFolder, $pkgFilter = switch ($packageType) {
+        'tar-arm' { 'Signed-linux-arm', 'powershell*.tar.gz' }
+        'tar-arm64' { 'Signed-linux-arm64', 'powershell*.tar.gz' }
+        'tar-alpine' { 'Signed-linux-musl-x64', 'powershell*.tar.gz' }
+        'fxdependent' { 'Signed-fxdependent', 'powershell*.tar.gz' }
+        'tar' { 'Signed-linux-x64', 'powershell*.tar.gz' }
+        'tar-alpine-fxdependent' { 'Signed-fxdependent-noopt-linux-musl-x64', 'powershell*.tar.gz' }
+        'deb' { 'Signed-linux-x64', 'powershell*.deb' }
+        'deb-arm64' { 'Signed-linux-arm64', 'powershell*.deb' }
+        'rpm-fxdependent' { 'Signed-fxdependent-linux-x64', 'powershell*.rpm' }
+        'rpm-fxdependent-arm64' { 'Signed-fxdependent-linux-arm64', 'powershell*.rpm' }
+        'rpm' { 'Signed-linux-x64', 'powershell*.rpm' }
+        'min-size-x64' { 'Signed-linux-x64', 'powershell*.tar.gz' }
+        'min-size-arm64' { 'Signed-linux-arm64', 'powershell*.tar.gz' }
+      }
+
+      $signedFilesPath = "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/${signedDrop}/${signedFolder}"
+      Write-Verbose -Verbose "signedFilesPath: $signedFilesPath"
+
+      Write-Verbose -Message "checking pwsh exists in $signedFilesPath" -Verbose
+      if (-not (Test-Path "$signedFilesPath/pwsh")) {
+        throw "pwsh not found in $signedFilesPath"
+      }
+
+      $metadata = Get-Content "$repoRoot/tools/metadata.json" -Raw | ConvertFrom-Json
+
+      Write-Verbose -Verbose "metadata:"
+      $metadata | Out-String | Write-Verbose -Verbose
+
+      # Use the rebuild branch check from the template
+      $isRebuildBranch = '$(RebuildBranchCheck.IsRebuildBranch)' -eq 'true'
+
+      # Don't build LTS packages for rebuild branches
+      $LTS = $metadata.LTSRelease.Package -and -not $isRebuildBranch
+
+      if ($isRebuildBranch) {
+        Write-Verbose -Message "Rebuild branch detected, skipping LTS package build" -Verbose
+      }
+
+      Write-Verbose -Verbose "LTS: $LTS"
+
+      if (-not (Test-Path $(ob_outputDirectory))) {
+        New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
+      }
+
+      $packageType = '$(PackageType)'
+      Write-Verbose -Verbose "packageType = $packageType"
+
+      Start-PSPackage -Type $packageType -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath
+
+      if ($LTS -and ($packageType -like 'deb*' -or $packageType -like 'rpm*')) {
+        Write-Verbose -Message "LTS Release: $LTS" -Verbose
+        Start-PSPackage -Type $packageType -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath -LTS
+      }
+
+      $vstsCommandString = "vso[task.setvariable variable=PackageFilter]$pkgFilter"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    displayName: 'Package ${{ parameters.packageType}}'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign deb and rpm packages
+    inputs:
+      command: 'sign'
+      signing_profile: '$(SigningProfile)'
+      files_to_sign: '**/*.rpm;**/*.deb'
+      search_root: '$(Pipeline.Workspace)'
+
+  - pwsh: |
+      $pkgFilter = '$(PackageFilter)'
+      Write-Verbose -Verbose "pkgFilter: $pkgFilter"
+
+      $pkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $pkgFilter -Recurse -File | Select-Object -ExpandProperty FullName
+      Write-Verbose -Verbose "pkgPath: $pkgPath"
+      Copy-Item -Path $pkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+
+      if ($pkgPath -like '*.tar.gz') {
+          $entry = & tar -tzvf $pkgPath | Where-Object { $_ -match '\spwsh$' } | Select-Object -First 1
+          if ($entry -notmatch '^-..x') {
+              throw "pwsh is not executable in $pkgPath : $entry"
+          }
+      }
+    displayName: 'Copy artifacts to output directory'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+  - pwsh: |
+      Get-ChildItem -Path $(ob_outputDirectory) -Recurse
+    displayName: 'List artifacts'
diff --git a/.pipelines/templates/linux.yml b/.pipelines/templates/linux.yml
new file mode 100644
index 00000000000..97b594830b3
--- /dev/null
+++ b/.pipelines/templates/linux.yml
@@ -0,0 +1,197 @@
+parameters:
+  Runtime: 'linux-x64'
+  BuildConfiguration: 'release'
+  JobName: 'build_linux'
+
+jobs:
+- job: build_${{ parameters.JobName }}
+  displayName: Build_Linux_${{ parameters.Runtime }}_${{ parameters.BuildConfiguration }}
+  condition: succeeded()
+  pool:
+    type: linux
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - group: DotNetPrivateBuildAccess
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: true
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: BUILDCONFIGURATION
+    value: ${{ parameters.BuildConfiguration }}
+  - name: Runtime
+    value: ${{ parameters.Runtime }}
+  - name: ob_sdl_sbom_packageName
+    value: 'Microsoft.Powershell.Linux.${{ parameters.Runtime }}'
+  # We add this manually, so we need it disabled the OneBranch auto-injected one.
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(PowerShellRoot)
+
+  - task: CodeQL3000Init@0 # Add CodeQL Init task right before your 'Build' step.
+    condition: eq(variables['CODEQL_ENABLED'], 'true')
+    env:
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+    inputs:
+      Enabled: true
+      # AnalyzeInPipeline: false = upload results
+      # AnalyzeInPipeline: true = do not upload results
+      AnalyzeInPipeline: false
+      Language: csharp
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      $runtime = $env:RUNTIME
+
+      $params = @{}
+      if ($env:BUILDCONFIGURATION -eq 'minSize') {
+        Write-Verbose -Message "Building for minimal size"
+        $params['ForMinimalSize'] = $true
+      }
+
+      Write-Verbose -Message "Building PowerShell with Runtime: $runtime"
+      Import-Module -Name $(PowerShellRoot)/build.psm1 -Force
+      $buildWithSymbolsPath = New-Item -ItemType Directory -Path $(Pipeline.Workspace)/Symbols_$(Runtime) -Force
+
+      $null = New-Item -ItemType Directory -Path $buildWithSymbolsPath -Force -Verbose
+
+      $ReleaseTagParam = @{}
+
+      if ($env:RELEASETAGVAR) {
+        $ReleaseTagParam['ReleaseTag'] = $env:RELEASETAGVAR
+      }
+
+      Start-PSBuild -Runtime $runtime -Configuration Release -Output $buildWithSymbolsPath @params -Clean -PSModuleRestore @ReleaseTagParam
+
+      $outputPath = Join-Path '$(ob_outputDirectory)' 'psoptions'
+      $null = New-Item -ItemType Directory -Path $outputPath -Force
+      $psOptPath = "$outputPath/psoptions.json"
+      Save-PSOptions -PSOptionsPath $psOptPath
+
+      Write-Verbose -Verbose "Verifying pdbs exist in build folder"
+      $pdbs = Get-ChildItem -Path $buildWithSymbolsPath -Recurse -Filter *.pdb
+      if ($pdbs.Count -eq 0) {
+        Write-Error -Message "No pdbs found in build folder"
+      }
+      else {
+        Write-Verbose -Verbose "Found $($pdbs.Count) pdbs in build folder"
+        $pdbs | ForEach-Object {
+          Write-Verbose -Verbose "Pdb: $($_.FullName)"
+        }
+      }
+
+      Write-Verbose -Verbose "Completed building PowerShell for '$env:BUILDCONFIGURATION' configuration"
+    displayName: 'Build Linux - $(Runtime)'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+  - task: CodeQL3000Finalize@0 # Add CodeQL Finalize task right after your 'Build' step.
+    condition: eq(variables['CODEQL_ENABLED'], 'true')
+    env:
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+  - pwsh: |
+      $platform = 'linux'
+      $vstsCommandString = "vso[task.setvariable variable=ArtifactPlatform]$platform"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    displayName: Set artifact platform
+
+  - pwsh: |
+      $pathForUpload = New-Item -ItemType Directory -Path '$(ob_outputDirectory)/Unsigned-$(Runtime)' -Force
+      Write-Verbose -Verbose -Message "pathForUpload: $pathForUpload"
+      Copy-Item -Path '$(Pipeline.Workspace)/Symbols_$(Runtime)/*' -Destination $pathForUpload -Recurse -Force -Verbose
+    displayName: Copy unsigned files for upload
+
+  - template: /.pipelines/templates/step/finalize.yml@self
+
+- job: sign_${{ parameters.JobName }}
+  displayName: Sign_Linux_${{ parameters.Runtime }}_${{ parameters.BuildConfiguration }}
+  condition: succeeded()
+  dependsOn: build_${{ parameters.JobName }}
+  pool:
+    type: windows
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - group: DotNetPrivateBuildAccess
+  - group: certificate_logical_to_actual
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: BuildConfiguration
+    value: ${{ parameters.BuildConfiguration }}
+  - name: Runtime
+    value: ${{ parameters.Runtime }}
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      artifact: drop_linux_build_${{ parameters.JobName }}
+      path: $(Pipeline.Workspace)/drop_linux_build
+    displayName: Download build
+
+  - pwsh: |
+      Get-ChildItem -Path $(Pipeline.Workspace)/drop_linux_build -Recurse
+    displayName: Capture downloaded files
+
+  - pwsh: |
+      $pwshPath = Get-ChildItem -Path $(Pipeline.Workspace)/drop_linux_build -File -Recurse | Where-Object { $_.Name -eq 'pwsh' }
+      $rootPath = Split-Path -Path $pwshPath.FullName -Parent
+      Write-Verbose -Verbose "Setting vso[task.setvariable variable=DropRootPath]$rootPath"
+      Write-Host "##vso[task.setvariable variable=DropRootPath]$rootPath"
+    displayName: Set drop root path
+
+  - template: /.pipelines/templates/obp-file-signing.yml@self
+    parameters:
+      binPath: $(DropRootPath)
+      OfficialBuild: $(ps_official_build)
+
+  - template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.pipelines/templates/mac-package-build.yml b/.pipelines/templates/mac-package-build.yml
new file mode 100644
index 00000000000..89dab90aa04
--- /dev/null
+++ b/.pipelines/templates/mac-package-build.yml
@@ -0,0 +1,296 @@
+parameters:
+  parentJob: ''
+  buildArchitecture: x64
+
+jobs:
+- job: package_macOS_${{ parameters.buildArchitecture }}
+  displayName: Package macOS ${{ parameters.buildArchitecture }}
+  condition: succeeded()
+  pool:
+    type: linux
+    isCustom: true
+    name: Azure Pipelines
+    vmImage: 'macOS-latest'
+
+  variables:
+    - name: HOMEBREW_NO_ANALYTICS
+      value: 1
+    - name: nugetMultiFeedWarnLevel
+      value: none
+    - name: NugetSecurityAnalysisWarningLevel
+      value: none
+    - name: skipNugetSecurityAnalysis
+      value: true
+    - group: DotNetPrivateBuildAccess
+    - group: certificate_logical_to_actual
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_binskim_enabled
+      value: true
+    - name: ob_sdl_credscan_suppressionsfileforartifacts
+      value: $(Build.SourcesDirectory)/PowerShell/.config/suppress.json
+    - name: BuildArch
+      value: ${{ parameters.buildArchitecture }}
+
+  steps:
+  - checkout: self
+    clean: true
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture environment
+
+  - pwsh: |
+      # create folder
+      sudo mkdir "$(Agent.TempDirectory)/PowerShell"
+
+      # make the current user the owner
+      sudo chown $env:USER "$(Agent.TempDirectory)/PowerShell"
+    displayName: 'Create $(Agent.TempDirectory)/PowerShell'
+
+  - template: SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: shouldSign.yml
+
+  - template: cloneToOfficialPath.yml
+    parameters:
+      nativePathRoot: '$(Agent.TempDirectory)'
+
+  - template: rebuild-branch-check.yml@self
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: macosBinResults-${{ parameters.buildArchitecture }}
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_macos_sign_${{ parameters.buildArchitecture }}
+
+  - pwsh: |
+      Write-Verbose -Verbose "unsigned artifacts"
+      Get-ChildItem "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/macosBinResults-${{ parameters.buildArchitecture }}" -Recurse
+
+      Write-Verbose -Verbose "unsigned artifacts"
+      Get-ChildItem "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/drop_macos_sign_${{ parameters.buildArchitecture }}" -Recurse
+    displayName: 'Capture Downloaded Artifacts'
+    # Diagnostics is not critical it passes every time it runs
+    continueOnError: true
+
+  - pwsh: |
+      $signedDir = "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/drop_macos_sign_${{ parameters.buildArchitecture }}/Signed-${{ parameters.buildArchitecture }}"
+      Get-ChildItem $signedDir -Recurse -Include 'pwsh', '*.dylib' | ForEach-Object {
+        codesign --verify --deep --strict --verbose=4 $_.FullName
+        if ($LASTEXITCODE -ne 0) { throw "codesign verification failed for $($_.FullName)" }
+      }
+    displayName: 'Verify Apple codesign on signed binaries'
+
+  - pwsh: |
+      # Add -SkipReleaseChecks as a mitigation to unblock release.
+      # macos-10.15 does not allow creating a folder under root. Hence, moving the folder.
+
+      $buildArch = '${{ parameters.buildArchitecture }}'
+
+      Write-Verbose -Message "Init..." -Verbose
+      $repoRoot = $env:REPOROOT
+      Set-Location $repoRoot
+      Import-Module "$repoRoot/build.psm1"
+      Import-Module "$repoRoot/tools/packaging"
+
+      $unsignedFilesPath = "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/macosBinResults-$buildArch"
+      $signedFilesPath = "$(Pipeline.Workspace)/CoOrdinatedBuildPipeline/drop_macos_sign_$buildArch/Signed-$buildArch"
+
+      Write-Verbose -Message "checking pwsh exists in $signedFilesPath" -Verbose
+      if (-not (Test-Path $signedFilesPath/pwsh)) {
+        throw "pwsh not found in $signedFilesPath"
+      }
+
+      $psoptionsPath = Get-ChildItem -Path $unsignedFilesPath -Filter 'psoptions.json' -Recurse -File | Select-Object -ExpandProperty FullName
+      Write-Verbose -Message "Restoring PSOptions from $psoptionsPath" -Verbose
+
+      Restore-PSOptions -PSOptionsPath "$psoptionsPath"
+      Get-PSOptions | Write-Verbose -Verbose
+
+      if (-not (Test-Path "$repoRoot/tools/metadata.json")) {
+        throw "metadata.json not found in $repoRoot/tools"
+      }
+
+      $metadata = Get-Content "$repoRoot/tools/metadata.json" -Raw | ConvertFrom-Json
+
+      Write-Verbose -Verbose "metadata:"
+      $metadata | Out-String | Write-Verbose -Verbose
+
+      # Use the rebuild branch check from the template
+      $isRebuildBranch = '$(RebuildBranchCheck.IsRebuildBranch)' -eq 'true'
+
+      # Don't build LTS packages for rebuild branches
+      $LTS = $metadata.LTSRelease.Package -and -not $isRebuildBranch
+
+      if ($isRebuildBranch) {
+        Write-Verbose -Message "Rebuild branch detected, skipping LTS package build" -Verbose
+      }
+
+      Write-Verbose -Verbose "LTS: $LTS"
+
+      if ($LTS) {
+        Write-Verbose -Message "LTS Release: $LTS" -Verbose
+      }
+
+      Start-PSBootstrap -Scenario Package
+
+      $macosRuntime = "osx-$buildArch"
+
+      Start-PSPackage -Type osxpkg -SkipReleaseChecks -MacOSRuntime $macosRuntime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath
+
+      if ($LTS) {
+        Start-PSPackage -Type osxpkg -SkipReleaseChecks -MacOSRuntime $macosRuntime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath -LTS
+      }
+
+      $pkgNameFilter = "powershell-*$macosRuntime.pkg"
+      Write-Verbose -Verbose "Looking for pkg packages with filter: $pkgNameFilter in '$(Pipeline.Workspace)' to upload..."
+      $pkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $pkgNameFilter -Recurse -File
+
+      foreach($p in $pkgPath) {
+        $file = $p.FullName
+        Write-Verbose -verbose "Uploading $file to macos-pkgs"
+        Write-Host "##vso[artifact.upload containerfolder=macos-pkgs;artifactname=macos-pkgs]$file"
+      }
+
+      Start-PSPackage -Type tar -SkipReleaseChecks -MacOSRuntime $macosRuntime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath -LTS:$LTS
+      $tarPkgNameFilter = "powershell-*$macosRuntime.tar.gz"
+      Write-Verbose -Verbose "Looking for tar packages with filter: $tarPkgNameFilter in '$(Pipeline.Workspace)' to upload..."
+      $tarPkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $tarPkgNameFilter -Recurse -File
+
+      foreach($t in $tarPkgPath) {
+        $file = $t.FullName
+        $entry = & tar -tzvf $file | Where-Object { $_ -match '\spwsh$' } | Select-Object -First 1
+        if ($entry -notmatch '^-..x') {
+            throw "pwsh is not executable in $file : $entry"
+        }
+        Write-Verbose -verbose "Uploading $file to macos-pkgs"
+        Write-Host "##vso[artifact.upload containerfolder=macos-pkgs;artifactname=macos-pkgs]$file"
+      }
+
+      $packageInfo = Get-MacOSPackageIdentifierInfo -Version '$(Version)' -LTS:$LTS
+      Write-Verbose -Verbose "BundleId: $($packageInfo.PackageIdentifier)"
+      Write-Host "##vso[task.setvariable variable=BundleId;isOutput=true]$($packageInfo.PackageIdentifier)"
+
+    displayName: 'Package ${{ parameters.buildArchitecture}}'
+    name: packageStep
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+- job: sign_package_macOS_${{ parameters.buildArchitecture }}
+  displayName: Sign Package macOS ${{ parameters.buildArchitecture }}
+  dependsOn: package_macOS_${{ parameters.buildArchitecture }}
+  condition: succeeded()
+  pool:
+    type: windows
+
+  variables:
+  - group: certificate_logical_to_actual
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_binskim_enabled
+    value: true
+  - name: ob_sdl_credscan_suppressionsfileforartifacts
+    value: $(Build.SourcesDirectory)/PowerShell/.config/suppress.json
+  - name: BuildArch
+    value: ${{ parameters.buildArchitecture }}
+  - name: BundleId
+    value: $[ dependencies.package_macOS_${{ parameters.buildArchitecture }}.outputs['packageStep.BundleId'] ]
+
+  steps:
+  - download: current
+    artifact: macos-pkgs
+
+  - pwsh: |
+      $buildArch = '${{ parameters.buildArchitecture }}'
+      $macosRuntime = "osx-$buildArch"
+      $pkgNameFilter = "powershell-*$macosRuntime.pkg"
+      $pkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $pkgNameFilter -Recurse -File
+
+      if ($pkgPath.Count -eq 0) {
+        throw "No package found for $macosRuntime"
+      }
+
+      foreach($p in $pkgPath) {
+        $file = $p.FullName
+        $fileName = $p.BaseName
+        Write-Verbose -verbose "Compressing $file"
+        $zipFile = "$(Pipeline.Workspace)\${fileName}.zip"
+        Write-Verbose -Verbose "Zip file: $zipFile"
+        Compress-Archive -Path $file -Destination $zipFile
+      }
+
+      Write-Verbose -Verbose "Compressed files:"
+      Get-ChildItem -Path $(Pipeline.Workspace) -Filter "*.zip" -File | Write-Verbose -Verbose
+    displayName: Compress package files for signing
+
+  - task: onebranch.pipeline.signing@1
+    displayName: 'OneBranch CodeSigning Package'
+    inputs:
+      command: 'sign'
+      files_to_sign: '**/*-osx-*.zip'
+      search_root: '$(Pipeline.Workspace)'
+      inline_operation: |
+        [
+          {
+            "KeyCode": "$(apple_cert_id)",
+            "OperationCode": "MacAppDeveloperSign",
+            "ToolName": "sign",
+            "ToolVersion": "1.0",
+            "Parameters": {
+              "Hardening": "--options=runtime"
+            }
+          }
+        ]
+
+  - task: onebranch.pipeline.signing@1
+    displayName: 'OneBranch Notarize Package'
+    inputs:
+      command: 'sign'
+      files_to_sign: '**/*-osx-*.zip'
+      search_root: '$(Pipeline.Workspace)'
+      inline_operation: |
+        [
+          {
+            "KeyCode": "$(apple_cert_id)",
+            "OperationCode": "MacAppNotarize",
+            "ToolName": "sign",
+            "ToolVersion": "1.0",
+            "Parameters": {
+              "BundleId": "$(BundleId)"
+            }
+          }
+        ]
+    timeoutInMinutes: 120
+
+  - pwsh: |
+      $signedPkg = Get-ChildItem -Path $(Pipeline.Workspace) -Filter "*osx*.zip" -File
+
+      if (-not (Test-Path $(ob_outputDirectory))) {
+        $null = New-Item -Path $(ob_outputDirectory) -ItemType Directory
+      }
+
+      $expandDir = "$(Pipeline.Workspace)/pkgExpand"
+      $null = New-Item -Path $expandDir -ItemType Directory -Force
+
+      $signedPkg | ForEach-Object {
+        Write-Verbose -Verbose "Signed package zip: $_"
+        Expand-Archive -Path $_ -DestinationPath $expandDir -Verbose
+      }
+
+      # ESRP's signing pipeline nests the PKG inside a '<hash>.zip.unzipped' subfolder
+      $pkgFile = Get-ChildItem -Path $expandDir -Filter '*.pkg' -Recurse -File
+      if (-not $pkgFile) {
+        throw "Package not found in: $signedPkg"
+      }
+
+      $pkgFile | ForEach-Object {
+        Move-Item -Path $_ -Destination $(ob_outputDirectory) -Verbose
+      }
+
+      Write-Verbose -Verbose "Expanded pkg file:"
+      Get-ChildItem -Path $(ob_outputDirectory) | Write-Verbose -Verbose
+    displayName: Expand signed file
diff --git a/.pipelines/templates/mac.yml b/.pipelines/templates/mac.yml
new file mode 100644
index 00000000000..2231d668b48
--- /dev/null
+++ b/.pipelines/templates/mac.yml
@@ -0,0 +1,206 @@
+parameters:
+  buildArchitecture: 'x64'
+jobs:
+- job: build_macOS_${{ parameters.buildArchitecture }}
+  displayName: Build macOS ${{ parameters.buildArchitecture }}
+  condition: succeeded()
+  pool:
+    type: linux
+    isCustom: true
+    name: Azure Pipelines
+    vmImage: 'macOS-latest'
+
+  variables:
+  - name: HOMEBREW_NO_ANALYTICS
+    value: 1
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - group: DotNetPrivateBuildAccess
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: PowerShellRoot
+    value: $(Build.SourcesDirectory)
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+  - pwsh: |
+      # create folder
+      sudo mkdir "$(Agent.TempDirectory)/PowerShell"
+      # make the current user the owner
+      sudo chown $env:USER "$(Agent.TempDirectory)/PowerShell"
+    displayName: 'Create $(Agent.TempDirectory)/PowerShell'
+
+    ## We cross compile for arm64, so the arch is always x64
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      Import-Module $(PowerShellRoot)/build.psm1 -Force
+      Start-PSBootstrap -Scenario Package
+    displayName: 'Bootstrap VM'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(PowerShellRoot)
+  - pwsh: |
+      $env:AzDevOpsFeedPAT2 = '$(powershellPackageReadPat)'
+      # Add -SkipReleaseChecks as a mitigation to unblock release.
+      # macos-10.15 does not allow creating a folder under root. Hence, moving the folder.
+
+      Import-Module ./build.psm1 -Force
+
+      $ReleaseTagParam = @{}
+
+      if ($env:RELEASETAGVAR) {
+        $ReleaseTagParam['ReleaseTag'] = $env:RELEASETAGVAR
+      }
+
+      Start-PSBuild -Runtime 'osx-${{ parameters.buildArchitecture }}' -Configuration Release -PSModuleRestore -Clean -Output $(OB_OUTPUTDIRECTORY) @ReleaseTagParam
+      $artifactName = "macosBinResults-${{ parameters.buildArchitecture }}"
+
+      $psOptPath = "$(OB_OUTPUTDIRECTORY)/psoptions.json"
+      Save-PSOptions -PSOptionsPath $psOptPath
+
+      $entitlements = "$(PowerShellRoot)/assets/macos-entitlements.plist"
+      $pwshBin = "$(OB_OUTPUTDIRECTORY)/pwsh"
+      Write-Verbose -Verbose "Applying entitlements to $pwshBin"
+      codesign --sign - --force --options runtime --entitlements $entitlements $pwshBin
+      if ($LASTEXITCODE -ne 0) {
+        throw "codesign failed with exit code $LASTEXITCODE"
+      }
+
+      # Since we are using custom pool for macOS, we need to use artifact.upload to publish the artifacts
+      Write-Host "##vso[artifact.upload containerfolder=$artifactName;artifactname=$artifactName]$(OB_OUTPUTDIRECTORY)"
+
+      $env:AzDevOpsFeedPAT2 = $null
+    displayName: 'Build'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+  - template: /.pipelines/templates/step/finalize.yml@self
+
+- job: sign_${{ parameters.buildArchitecture }}
+  displayName: Sign_macOS_${{ parameters.buildArchitecture }}
+  condition: succeeded()
+  dependsOn: build_macOS_${{ parameters.buildArchitecture }}
+  pool:
+    type: windows
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - group: DotNetPrivateBuildAccess
+  - group: certificate_logical_to_actual
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: true
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: BuildArchitecture
+    value: ${{ parameters.buildArchitecture }}
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+  - name: ob_sdl_sbom_packageName
+    value: 'Microsoft.Powershell.MacOS.${{parameters.buildArchitecture}}'
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      artifact: 'macosBinResults-$(BuildArchitecture)'
+      path: '$(Pipeline.Workspace)\Symbols'
+    displayName: Download build
+
+  - pwsh: |
+        Get-ChildItem "$(Pipeline.Workspace)\*" -Recurse
+    displayName: 'Capture Downloaded Artifacts'
+    # Diagnostics is not critical it passes every time it runs
+    continueOnError: true
+
+  - pwsh: |
+      $runtime = '$(BuildArchitecture)'
+      Write-Host "sending.. vso[task.setvariable variable=Runtime]$runtime"
+      Write-Host "##vso[task.setvariable variable=Runtime]$runtime"
+
+      $rootPath = "$(Pipeline.Workspace)\Symbols"
+      Write-Verbose -Verbose "Setting vso[task.setvariable variable=DropRootPath]$rootPath"
+      Write-Host "##vso[task.setvariable variable=DropRootPath]$rootPath"
+    displayName: Expand symbols zip
+
+  - template: /.pipelines/templates/obp-file-signing.yml@self
+    parameters:
+      binPath: $(DropRootPath)
+      OfficialBuild: $(ps_official_build)
+
+  # Apple-sign the Mach-O binaries inside the signed output.
+  - pwsh: |
+      $signedDir = "$(ob_outputDirectory)/Signed-$(Runtime)"
+      $zipFile = "$(Pipeline.Workspace)/macho-$(BuildArchitecture).zip"
+      Compress-Archive -Path "$signedDir/*" -DestinationPath $zipFile -Force
+    displayName: Compress signed folder for Apple signing
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Apple CodeSign Mach-O binaries
+    inputs:
+      command: 'sign'
+      files_to_sign: 'macho-$(BuildArchitecture).zip'
+      search_root: '$(Pipeline.Workspace)'
+      inline_operation: |
+        [
+          {
+            "KeyCode": "$(apple_cert_id)",
+            "OperationCode": "MacAppDeveloperSign",
+            "ToolName": "sign",
+            "ToolVersion": "1.0",
+            "Parameters": {
+              "Hardening": "--options=runtime"
+            }
+          }
+        ]
+
+  - pwsh: |
+      $signedDir = "$(ob_outputDirectory)/Signed-$(Runtime)"
+      $zipFile = "$(Pipeline.Workspace)/macho-$(BuildArchitecture).zip"
+      Expand-Archive -Path $zipFile -DestinationPath $signedDir -Force -Verbose
+    displayName: Expand Apple-signed Mach-O binaries into signed output
+
+  - pwsh: |
+      $signedDir = "$(ob_outputDirectory)/Signed-$(Runtime)"
+      $expected = 'Developer ID Application: Microsoft Corporation'
+      $missing = @()
+      Get-ChildItem $signedDir -Recurse -Include 'pwsh', '*.dylib' | ForEach-Object {
+        $bytes = [System.IO.File]::ReadAllBytes($_.FullName)
+        $text = [System.Text.Encoding]::Latin1.GetString($bytes)
+        if (-not $text.Contains($expected)) {
+          $missing += $_.FullName
+          Write-Host "##[error]Missing '$expected' signature in $($_.FullName)"
+        } else {
+          Write-Host "OK: $($_.FullName)"
+        }
+      }
+      if ($missing.Count -gt 0) {
+        throw "ESRP did not apply a Developer ID signature to $($missing.Count) file(s): $($missing -join ', ')"
+      }
+    displayName: 'Verify Developer ID signature on Mach-O binaries'
+
+  - template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.pipelines/templates/nupkg.yml b/.pipelines/templates/nupkg.yml
new file mode 100644
index 00000000000..043c0b1f75c
--- /dev/null
+++ b/.pipelines/templates/nupkg.yml
@@ -0,0 +1,299 @@
+jobs:
+- job: build_nupkg
+  displayName: Package NuPkgs
+  condition: succeeded()
+  pool:
+    type: windows
+
+  variables:
+    - name: nugetMultiFeedWarnLevel
+      value: none
+    - name: NugetSecurityAnalysisWarningLevel
+      value: none
+    - name: skipNugetSecurityAnalysis
+      value: true
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)\ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_binskim_enabled
+      value: true
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - group: mscodehub-feed-read-general
+    - group: mscodehub-feed-read-akv
+    - group: DotNetPrivateBuildAccess
+    - group: certificate_logical_to_actual
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture environment
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - template: SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: shouldSign.yml
+
+  - template: cloneToOfficialPath.yml
+    parameters:
+      nativePathRoot: '$(Agent.TempDirectory)'
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_fxdependent_release
+    displayName: 'Download drop_windows_build_windows_fxdependent_release'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_fxdependentWinDesktop_release
+    displayName: 'Download drop_windows_build_windows_fxdependentWinDesktop_release'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_linux_sign_linux_fxd
+    displayName: 'Download drop_linux_sign_linux_fxd'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_linux_sign_linux_fxd_x64_alpine
+    displayName: 'Download drop_linux_sign_linux_fxd_x64_alpine'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - pwsh: |
+      Write-Verbose -Verbose "drop_windows_build_windows_fxdependent_release"
+      Get-ChildItem -Path $(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependent_release -Recurse | Out-String | Write-Verbose -Verbose
+
+      Write-Verbose -Verbose "drop_windows_build_windows_fxdependentWinDesktop_release"
+      Get-ChildItem -Path $(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependentWinDesktop_release -Recurse | Out-String | Write-Verbose -Verbose
+
+      Write-Verbose -Verbose "drop_linux_sign_linux_fxd"
+      Get-ChildItem -Path $(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd -Recurse | Out-String | Write-Verbose -Verbose
+
+      Write-Verbose -Verbose "drop_linux_sign_linux_fxd_x64_alpine"
+      Get-ChildItem -Path $(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd_x64_alpine -Recurse | Out-String | Write-Verbose -Verbose
+    displayName: 'Capture download artifacts'
+    env:
+      ob_restore_phase: true # This ensures this done in restore phase to workaround signing issue
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(PowerShellRoot)
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      Set-Location -Path '$(PowerShellRoot)'
+      Import-Module "$(PowerShellRoot)/build.psm1" -Force
+
+      $sharedModules = @('Microsoft.PowerShell.Commands.Management',
+                        'Microsoft.PowerShell.Commands.Utility',
+                        'Microsoft.PowerShell.ConsoleHost',
+                        'Microsoft.PowerShell.Security',
+                        'System.Management.Automation'
+                        )
+
+      $winOnlyModules = @('Microsoft.Management.Infrastructure.CimCmdlets',
+                          'Microsoft.PowerShell.Commands.Diagnostics',
+                          'Microsoft.PowerShell.CoreCLR.Eventing',
+                          'Microsoft.WSMan.Management',
+                          'Microsoft.WSMan.Runtime'
+                          )
+
+      $refAssemblyFolder = Join-Path '$(System.ArtifactsDirectory)' 'RefAssembly'
+      $null = New-Item -Path $refAssemblyFolder -Force -Verbose -Type Directory
+
+      Start-PSBuild -Clean -Runtime linux-x64 -Configuration Release -ReleaseTag $(ReleaseTagVar)
+
+      $sharedModules | Foreach-Object {
+        $refFile = Get-ChildItem -Path "$(PowerShellRoot)\src\$_\obj\Release\net11.0\refint\$_.dll"
+        Write-Verbose -Verbose "RefAssembly: $refFile"
+        Copy-Item -Path $refFile -Destination "$refAssemblyFolder\$_.dll" -Verbose
+        $refDoc = "$(PowerShellRoot)\src\$_\bin\Release\net11.0\$_.xml"
+        if (-not (Test-Path $refDoc)) {
+          Write-Warning "$refDoc not found"
+          Get-ChildItem -Path "$(PowerShellRoot)\src\$_\bin\Release\net11.0\" | Out-String | Write-Verbose -Verbose
+        }
+        else {
+          Copy-Item -Path $refDoc -Destination "$refAssemblyFolder\$_.xml" -Verbose
+        }
+      }
+
+      Start-PSBuild -Clean -Runtime win7-x64 -Configuration Release -ReleaseTag $(ReleaseTagVar)
+
+      $winOnlyModules | Foreach-Object {
+        $refFile = Get-ChildItem -Path "$(PowerShellRoot)\src\$_\obj\Release\net11.0\refint\*.dll"
+        Write-Verbose -Verbose 'RefAssembly: $refFile'
+        Copy-Item -Path $refFile -Destination "$refAssemblyFolder\$_.dll" -Verbose
+        $refDoc = "$(PowerShellRoot)\src\$_\bin\Release\net11.0\$_.xml"
+        if (-not (Test-Path $refDoc)) {
+          Write-Warning "$refDoc not found"
+          Get-ChildItem -Path "$(PowerShellRoot)\src\$_\bin\Release\net11.0" | Out-String | Write-Verbose -Verbose
+        }
+        else {
+          Copy-Item -Path $refDoc -Destination "$refAssemblyFolder\$_.xml" -Verbose
+        }
+      }
+
+      Get-ChildItem $refAssemblyFolder -Recurse | Out-String | Write-Verbose -Verbose
+
+      # Set RefAssemblyPath path variable
+      $vstsCommandString = "vso[task.setvariable variable=RefAssemblyPath]${refAssemblyFolder}"
+      Write-Host "sending " + $vstsCommandString
+      Write-Host "##$vstsCommandString"
+    displayName: Build reference assemblies
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign ref assemblies
+    inputs:
+      command: 'sign'
+      signing_profile: external_distribution
+      files_to_sign: '**\*.dll'
+      search_root: '$(System.ArtifactsDirectory)\RefAssembly'
+
+  - pwsh: |
+      $files = @(
+        "Microsoft.Management.Infrastructure.CimCmdlets.dll"
+        "Microsoft.PowerShell.Commands.Diagnostics.dll"
+        "Microsoft.PowerShell.Commands.Management.dll"
+        "Microsoft.PowerShell.Commands.Utility.dll"
+        "Microsoft.PowerShell.ConsoleHost.dll"
+        "Microsoft.PowerShell.CoreCLR.Eventing.dll"
+        "Microsoft.PowerShell.Security.dll"
+        "Microsoft.PowerShell.SDK.dll"
+        "Microsoft.WSMan.Management.dll"
+        "Microsoft.WSMan.Runtime.dll"
+        "System.Management.Automation.dll"
+      )
+
+      Import-Module -Name '$(PowerShellRoot)\build.psm1'
+      Import-Module -Name '$(PowerShellRoot)\tools\packaging'
+      Find-DotNet
+
+      Write-Verbose -Verbose "Version == $(Version)"
+
+      $winFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependent_release\Signed-fxdependent"
+      Write-Verbose -Verbose "winFxdPath == $winFxdPath"
+
+      $linuxFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd\Signed-fxdependent"
+      Write-Verbose -Verbose "linuxFxdPath == $linuxFxdPath"
+
+      $nupkgOutputPath = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'nupkg'
+      New-Item -Path $nupkgOutputPath -ItemType Directory -Force
+
+      $files | Foreach-Object {
+        $FileBaseName = [System.IO.Path]::GetFileNameWithoutExtension($_)
+        $FilePackagePath = Join-Path -Path $nupkgOutputPath -ChildPath $FileBaseName
+        Write-Verbose -Verbose "FileName to package: $_"
+        Write-Verbose -Verbose "FilePackage path: $FilePackagePath"
+        New-ILNugetPackageSource -File $_ -PackagePath $FilePackagePath -PackageVersion '$(Version)' -WinFxdBinPath $winFxdPath -LinuxFxdBinPath $linuxFxdPath -RefAssemblyPath $(RefAssemblyPath)
+        New-ILNugetPackageFromSource -FileName $_ -PackageVersion '$(Version)' -PackagePath $FilePackagePath
+      }
+    displayName: 'Create NuGet Package for single file'
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign nupkg files
+    inputs:
+      command: 'sign'
+      cp_code: '$(nuget_cert_id)'
+      files_to_sign: '**\*.nupkg'
+      search_root: '$(Pipeline.Workspace)\nupkg'
+
+  ### Create global tools
+
+  - pwsh: |
+      $winFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependent_release\Signed-fxdependent"
+      $winDesktopFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependentWinDesktop_release\Signed-fxdependent-win-desktop"
+      $linuxFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd\Signed-fxdependent"
+      $alpineFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd_x64_alpine\Signed-fxdependent-noopt-linux-musl-x64"
+
+      Import-Module -Name '$(PowerShellRoot)\build.psm1'
+      Import-Module -Name '$(PowerShellRoot)\tools\packaging'
+
+      Start-PrepForGlobalToolNupkg -LinuxBinPath $linuxFxdPath -WindowsBinPath $winFxdPath -WindowsDesktopBinPath $winDesktopFxdPath -AlpineBinPath $alpineFxdPath
+    displayName: 'Prepare for global tool packages'
+
+  - pwsh: |
+      Import-Module -Name '$(PowerShellRoot)\build.psm1'
+      Import-Module -Name '$(PowerShellRoot)\tools\packaging'
+      Find-DotNet
+
+      $gblToolOutputPath = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'globaltools'
+      New-Item -Path $gblToolOutputPath -ItemType Directory -Force
+
+      $winFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependent_release\Signed-fxdependent"
+      $winDesktopFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependentWinDesktop_release\Signed-fxdependent-win-desktop"
+      $linuxFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd\Signed-fxdependent"
+      $alpineFxdPath = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_linux_sign_linux_fxd_x64_alpine\Signed-fxdependent-noopt-linux-musl-x64"
+
+      # Build global tools which do not have the shims exe generated in build.
+      $packageTypes = @('Unified', 'PowerShell.Linux.Alpine', 'PowerShell.Linux.x64', 'PowerShell.Linux.arm32', 'PowerShell.Linux.arm64')
+
+      $packageTypes | Foreach-Object {
+        $PackageType = $_
+        Write-Verbose -Verbose "PackageType: $PackageType"
+
+        New-GlobalToolNupkgSource -PackageType $PackageType -PackageVersion '$(Version)' -LinuxBinPath $linuxFxdPath -WindowsBinPath $winFxdPath -WindowsDesktopBinPath $winDesktopFxdPath -AlpineBinPath $alpineFxdPath -SkipCGManifest
+
+        Write-Verbose -Verbose "GlobalToolNuspecSourcePath = $global:GlobalToolNuSpecSourcePath"
+        Write-Verbose -Verbose "GlobalToolPkgName = $global:GlobalToolPkgName"
+
+        Write-Verbose -Verbose "Starting global tool package creation for $PackageType"
+        New-GlobalToolNupkgFromSource -PackageNuSpecPath "$global:GlobalToolNuSpecSourcePath" -PackageName "$global:GlobalToolPkgName" -DestinationPath $gblToolOutputPath
+        Write-Verbose -Verbose "Global tool package created for $PackageType"
+        $global:GlobalToolNuSpecSourcePath = $null
+        $global:GlobalToolPkgName = $null
+      }
+    displayName: 'Create global tools'
+
+  - pwsh: |
+      $gblToolOutputPath = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'globaltools'
+      Get-ChildItem -Path $gblToolOutputPath
+    displayName: Capture global tools
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign nupkg files
+    inputs:
+      command: 'sign'
+      cp_code: '$(nuget_cert_id)'
+      files_to_sign: '**\*.nupkg'
+      search_root: '$(Pipeline.Workspace)\globaltools'
+
+  - pwsh: |
+      if (-not (Test-Path '$(ob_outputDirectory)')) {
+        New-Item -ItemType Directory -Path '$(ob_outputDirectory)' -Force
+      }
+
+      Write-Verbose -Verbose "Copying nupkgs to output directory"
+      $nupkgOutputPath = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'nupkg'
+      Get-ChildItem -Path $nupkgOutputPath -Filter *.nupkg -Recurse | Copy-Item -Destination '$(ob_outputDirectory)' -Force -Verbose
+
+      # Copy Windows.x86 global tool from build to output directory
+      $winX64GlobalTool = "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_fxdependent_release\globaltool\powershell*.nupkg"
+      Write-Verbose -Verbose "Finding Windows.x64 global tool at $winX64GlobalTool"
+      $globalToolPath = Get-Item $winX64GlobalTool
+      Copy-Item -Path $globalToolPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+
+      Write-Verbose -Verbose "Copying global tools to output directory"
+      $gblToolOutputPath = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'globaltools'
+      Get-ChildItem -Path $gblToolOutputPath -Filter *.nupkg -Recurse | Copy-Item -Destination '$(ob_outputDirectory)' -Force -Verbose
+    displayName: Copy artifacts to output directory
+
+  - pwsh: |
+      $nupkgOutputPath = '$(ob_outputDirectory)'
+      Get-ChildItem -Path $nupkgOutputPath | Out-String | Write-Verbose -Verbose
+    displayName: List artifacts
diff --git a/.pipelines/templates/obp-file-signing.yml b/.pipelines/templates/obp-file-signing.yml
new file mode 100644
index 00000000000..cbe44ad0018
--- /dev/null
+++ b/.pipelines/templates/obp-file-signing.yml
@@ -0,0 +1,175 @@
+parameters:
+  binPath: '$(ob_outputDirectory)'
+  globalTool: 'false'
+  SigningProfile: 'external_distribution'
+  OfficialBuild: true
+  vPackScenario: false
+
+steps:
+- pwsh: |
+    $fullSymbolsFolder = '${{ parameters.binPath }}'
+    Write-Verbose -Verbose "fullSymbolsFolder == $fullSymbolsFolder"
+    Get-ChildItem -Recurse $fullSymbolsFolder | Select-Object -ExpandProperty FullName | Write-Verbose -Verbose
+    $filesToSignDirectory = "$(Pipeline.Workspace)/toBeSigned"
+    if ((Test-Path -Path $filesToSignDirectory))  {
+      Remove-Item -Path $filesToSignDirectory -Recurse -Force
+    }
+    $null = New-Item -ItemType Directory -Path $filesToSignDirectory -Force
+
+    $itemsToCopyWithRecurse = @(
+      "$($fullSymbolsFolder)/*.ps1"
+      "$($fullSymbolsFolder)/Microsoft.PowerShell*.dll"
+    )
+    $itemsToCopy = @{
+      "$($fullSymbolsFolder)/*.ps1" = ""
+      "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Host/Microsoft.PowerShell.Host.psd1" = "Modules/Microsoft.PowerShell.Host"
+      "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1" = "Modules/Microsoft.PowerShell.Management"
+      "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1" = "Modules/Microsoft.PowerShell.Security"
+      "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1" = "Modules/Microsoft.PowerShell.Utility"
+      "$($fullSymbolsFolder)/pwsh.dll" = ""
+      "$($fullSymbolsFolder)/System.Management.Automation.dll" = ""
+    }
+    ## Windows only modules
+    if('$(ArtifactPlatform)' -eq 'windows') {
+      $itemsToCopy += @{
+        "$($fullSymbolsFolder)/pwsh.exe" = ""
+        "$($fullSymbolsFolder)/Microsoft.Management.Infrastructure.CimCmdlets.dll" = ""
+        "$($fullSymbolsFolder)/Microsoft.WSMan.*.dll" = ""
+        "$($fullSymbolsFolder)/Modules/CimCmdlets/CimCmdlets.psd1" = "Modules/CimCmdlets"
+        "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Diagnostics/Diagnostics.format.ps1xml" = "Modules/Microsoft.PowerShell.Diagnostics"
+        "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Diagnostics/Event.format.ps1xml" = "Modules/Microsoft.PowerShell.Diagnostics"
+        "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Diagnostics/GetEvent.types.ps1xml" = "Modules/Microsoft.PowerShell.Diagnostics"
+        "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Security/Security.types.ps1xml" = "Modules/Microsoft.PowerShell.Security"
+        "$($fullSymbolsFolder)/Modules/Microsoft.PowerShell.Diagnostics/Microsoft.PowerShell.Diagnostics.psd1" = "Modules/Microsoft.PowerShell.Diagnostics"
+        "$($fullSymbolsFolder)/Modules/Microsoft.WSMan.Management/Microsoft.WSMan.Management.psd1" = "Modules/Microsoft.WSMan.Management"
+        "$($fullSymbolsFolder)/Modules/Microsoft.WSMan.Management/WSMan.format.ps1xml" = "Modules/Microsoft.WSMan.Management"
+        "$($fullSymbolsFolder)/Modules/PSDiagnostics/PSDiagnostics.ps?1" = "Modules/PSDiagnostics"
+      }
+    }
+
+    $itemsToExclude = @(
+      # This package is retrieved from https://www.github.com/powershell/MarkdownRender
+      "$($fullSymbolsFolder)/Microsoft.PowerShell.MarkdownRender.dll"
+    )
+
+    if('$(ArtifactPlatform)' -eq 'linux' -or '$(ArtifactPlatform)' -eq 'macos') {
+      $itemsToExclude += "$($fullSymbolsFolder)/pwsh"
+    }
+
+    Write-Verbose -verbose "recursively copying $($itemsToCopyWithRecurse | out-string) to $filesToSignDirectory"
+    Copy-Item -Path $itemsToCopyWithRecurse -Destination $filesToSignDirectory -Recurse -verbose -exclude $itemsToExclude
+    Write-Verbose -verbose "recursive copy done."
+
+    foreach($pattern in $itemsToCopy.Keys) {
+      $destinationFolder = Join-Path $filesToSignDirectory -ChildPath $itemsToCopy.$pattern
+      $null = New-Item -ItemType Directory -Path $destinationFolder -Force
+      Write-Verbose -verbose "copying $pattern to $destinationFolder"
+
+      if (-not (Test-Path -Path $pattern)) {
+        Write-Verbose -verbose "No files found for pattern $pattern"
+        continue
+      }
+
+      Copy-Item -Path $pattern -Destination $destinationFolder -Recurse -verbose
+    }
+
+    Write-Verbose -verbose "copying done."
+    Write-Verbose -verbose "Files to be signed at: $filesToSignDirectory"
+
+    Get-ChildItem -Recurse -File $filesToSignDirectory | Select-Object -Property FullName
+  displayName: 'Prepare files to be signed'
+
+- task: onebranch.pipeline.signing@1
+  displayName: Sign 1st party files
+  inputs:
+    command: 'sign'
+    signing_profile: ${{ parameters.SigningProfile }}
+    files_to_sign: '**\*.psd1;**\*.psm1;**\*.ps1xml;**\*.ps1;**\*.dll;**\*.exe;**\pwsh'
+    search_root: $(Pipeline.Workspace)/toBeSigned
+
+- pwsh : |
+    Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+  displayName: Capture environment
+
+- pwsh: |
+    Import-Module $(PowerShellRoot)/build.psm1 -Force
+    Import-Module $(PowerShellRoot)/tools/packaging -Force
+
+    $BuildPath = (Get-Item '${{ parameters.binPath }}').FullName
+    Write-Verbose -Verbose -Message "BuildPath: $BuildPath"
+
+    $officialBuild = [System.Convert]::ToBoolean('${{ parameters.OfficialBuild }}')
+    ## copy all files to be signed to build folder
+    Update-PSSignedBuildFolder -BuildPath $BuildPath -SignedFilesPath '$(Pipeline.Workspace)/toBeSigned' -OfficialBuild $officialBuild
+
+    $dlls = Get-ChildItem $BuildPath/*.dll, $BuildPath/*.exe -Recurse
+    $signatures = $dlls | Get-AuthenticodeSignature
+    $officialIssuerPattern = '^CN=(Microsoft Code Signing PCA|Microsoft Root Certificate Authority|Microsoft Corporation).*'
+    $testCert = '^CN=(Microsoft|TestAzureEngBuildCodeSign).*'
+    $missingSignatures = $signatures | Where-Object { $_.status -eq 'notsigned' -or $_.SignerCertificate.Issuer -notmatch $testCert -or $_.SignerCertificate.Issuer -notmatch $officialIssuerPattern} | select-object -ExpandProperty Path
+
+    Write-Verbose -verbose "to be signed:`r`n $($missingSignatures | Out-String)"
+
+    $filesToSignDirectory = "$(Pipeline.Workspace)/thirdPartyToBeSigned"
+    if (Test-Path $filesToSignDirectory) {
+      Remove-Item -Path $filesToSignDirectory -Recurse -Force
+    }
+    $null = New-Item -ItemType Directory -Path $filesToSignDirectory -Force -Verbose
+
+    $missingSignatures | ForEach-Object {
+      $pathWithoutLeaf = Split-Path $_
+      $relativePath = $pathWithoutLeaf.replace($BuildPath,'')
+      Write-Verbose -Verbose -Message "relativePath: $relativePath"
+      $targetDirectory = Join-Path -Path $filesToSignDirectory -ChildPath $relativePath
+      Write-Verbose -Verbose -Message "targetDirectory: $targetDirectory"
+      if(!(Test-Path $targetDirectory))
+      {
+        $null = New-Item -ItemType Directory -Path $targetDirectory -Force -Verbose
+      }
+      Copy-Item -Path $_ -Destination $targetDirectory
+    }
+  displayName: Create ThirdParty Signing Folder
+
+- task: onebranch.pipeline.signing@1
+  displayName: Sign 3rd Party files
+  inputs:
+    command: 'sign'
+    signing_profile: $(msft_3rd_party_cert_id)
+    files_to_sign: '**\*.dll;**\*.exe'
+    search_root: $(Pipeline.Workspace)/thirdPartyToBeSigned
+
+- pwsh: |
+    Get-ChildItem '$(Pipeline.Workspace)/thirdPartyToBeSigned/*'
+  displayName: Capture ThirdParty Signed files
+
+- pwsh: |
+    $officialBuild = [System.Convert]::ToBoolean('${{ parameters.OfficialBuild }}')
+    $vPackScenario = [System.Convert]::ToBoolean('${{ parameters.vPackScenario }}')
+    Import-Module '$(PowerShellRoot)/build.psm1' -Force
+    Import-Module '$(PowerShellRoot)/tools/packaging' -Force
+    $isGlobalTool = '${{ parameters.globalTool }}' -eq 'true'
+
+    if ($vPackScenario) {
+      Write-Verbose -Verbose -Message "vPackScenario is true, copying to $(ob_outputDirectory)"
+      $pathForUpload = New-Item -ItemType Directory -Path '$(ob_outputDirectory)' -Force
+      Write-Verbose -Verbose -Message "pathForUpload: $pathForUpload"
+      Copy-Item -Path '${{ parameters.binPath }}\*' -Destination $pathForUpload -Recurse -Force -Verbose
+      Write-Verbose -Verbose -Message "Files copied to $pathForUpload"
+    }
+    elseif (-not $isGlobalTool) {
+      $pathForUpload = New-Item -ItemType Directory -Path '$(ob_outputDirectory)/Signed-$(Runtime)' -Force
+      Write-Verbose -Verbose -Message "pathForUpload: $pathForUpload"
+      Copy-Item -Path '${{ parameters.binPath }}\*' -Destination $pathForUpload -Recurse -Force -Verbose
+      Write-Verbose -Verbose -Message "Files copied to $pathForUpload"
+    }
+    else {
+      $pathForUpload = '${{ parameters.binPath }}'
+    }
+
+    Write-Verbose "Copying third party signed files to the build folder"
+    $thirdPartySignedFilesPath = (Get-Item '$(Pipeline.Workspace)/thirdPartyToBeSigned').FullName
+    Update-PSSignedBuildFolder -BuildPath $pathForUpload -SignedFilesPath $thirdPartySignedFilesPath -OfficialBuild $officialBuild
+
+  displayName: 'Copy signed files for upload'
+
+- template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.pipelines/templates/package-create-msix.yml b/.pipelines/templates/package-create-msix.yml
new file mode 100644
index 00000000000..97d2f4fc46a
--- /dev/null
+++ b/.pipelines/templates/package-create-msix.yml
@@ -0,0 +1,154 @@
+parameters:
+  - name: OfficialBuild
+    type: boolean
+    default: false
+
+jobs:
+- job: CreateMSIXBundle
+  displayName: Create .msixbundle file
+  pool:
+    type: windows
+
+  variables:
+    - group: msixTools
+    - group: 'Azure Blob variable group'
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+
+  steps:
+    - checkout: self
+      clean: true
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - template: release-SetReleaseTagandContainerName.yml@self
+
+    - task: DownloadPipelineArtifact@2
+      inputs:
+        buildType: 'current'
+        artifact: drop_windows_package_arm64
+        itemPattern: |
+          **/*.msix
+        targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+      displayName: Download windows arm64 packages
+
+    - task: DownloadPipelineArtifact@2
+      inputs:
+        buildType: 'current'
+        artifact: drop_windows_package_x64
+        itemPattern: |
+          **/*.msix
+        targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+      displayName: Download windows x64 packages
+
+    - task: DownloadPipelineArtifact@2
+      inputs:
+        buildType: 'current'
+        artifact: drop_windows_package_x86
+        itemPattern: |
+          **/*.msix
+        targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+      displayName: Download windows x86 packages
+
+    # Finds the makeappx tool on the machine with image: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest'
+    - pwsh: |
+        $cmd = Get-Command makeappx.exe -ErrorAction Ignore
+        if ($cmd) {
+            Write-Verbose -Verbose 'makeappx available in PATH'
+            $exePath = $cmd.Source
+        } else {
+            $toolsDir = '$(Pipeline.Workspace)\releasePipeline\tools'
+            New-Item $toolsDir -Type Directory -Force > $null
+            $makeappx = Get-ChildItem -Recurse 'C:\Program Files (x86)\Windows Kits\10\makeappx.exe' |
+              Where-Object { $_.DirectoryName -match 'x64' } |
+              Select-Object -Last 1
+            $exePath = $makeappx.FullName
+            Write-Verbose -Verbose 'makeappx was found:'
+        }
+        $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath"
+        Write-Host "sending " + $vstsCommandString
+        Write-Host "##$vstsCommandString"
+      displayName: Find makeappx tool
+      retryCountOnTaskFailure: 1
+
+    - pwsh: |
+        $sourceDir = '$(Pipeline.Workspace)\releasePipeline\msix'
+        $null = New-Item -Path $sourceDir -ItemType Directory -Force
+
+        $msixFiles = Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)/downloads/*.msix" -Recurse
+        foreach ($msixFile in $msixFiles) {
+            $null = Copy-Item -Path $msixFile.FullName -Destination $sourceDir -Force -Verbose
+        }
+
+        $makeappx = '$(MakeAppxPath)'
+        $outputDir = "$sourceDir\output"
+        New-Item $outputDir -Type Directory -Force > $null
+
+        # Separate LTS and Stable/Preview MSIX files by filename convention
+        $ltsMsix = @(Get-ChildItem $sourceDir -Filter '*.msix' | Where-Object { $_.BaseName -match '-LTS-' })
+        $stableMsix = @(Get-ChildItem $sourceDir -Filter '*.msix' | Where-Object { $_.BaseName -notmatch '-LTS-' })
+
+        Write-Verbose -Verbose "Stable/Preview MSIX files: $($stableMsix.Name -join ', ')"
+        Write-Verbose -Verbose "LTS MSIX files: $($ltsMsix.Name -join ', ')"
+
+        # Create Stable/Preview bundle
+        if ($stableMsix.Count -gt 0) {
+            $stableDir = "$sourceDir\stable"
+            New-Item $stableDir -Type Directory -Force > $null
+            $stableMsix | Copy-Item -Destination $stableDir -Force
+            $file = $stableMsix | Select-Object -First 1
+            $prefix = ($file.BaseName -split "-win")[0]
+            $stableBundleName = "$prefix.msixbundle"
+            Write-Verbose -Verbose "Creating Stable/Preview bundle: $stableBundleName"
+            & $makeappx bundle /d $stableDir /p "$outputDir\$stableBundleName"
+        }
+
+        # Create LTS bundle
+        if ($ltsMsix.Count -gt 0) {
+            $ltsDir = "$sourceDir\lts"
+            New-Item $ltsDir -Type Directory -Force > $null
+            $ltsMsix | Copy-Item -Destination $ltsDir -Force
+            $file = $ltsMsix | Select-Object -First 1
+            $prefix = ($file.BaseName -split "-win")[0]
+            $ltsBundleName = "$prefix.msixbundle"
+            Write-Verbose -Verbose "Creating LTS bundle: $ltsBundleName"
+            & $makeappx bundle /d $ltsDir /p "$outputDir\$ltsBundleName"
+        }
+
+        Write-Verbose -Verbose "Created bundles:"
+        Get-ChildItem -Path $outputDir -Recurse
+
+        $vstsCommandString = "vso[task.setvariable variable=BundleDir]$outputDir"
+        Write-Host "sending " + $vstsCommandString
+        Write-Host "##$vstsCommandString"
+      displayName: Create MsixBundle
+      retryCountOnTaskFailure: 1
+
+    - task: onebranch.pipeline.signing@1
+      displayName: Sign MsixBundle
+      condition: eq('${{ parameters.OfficialBuild }}', 'true')
+      inputs:
+        command: 'sign'
+        signing_profile: $(MSIXProfile)
+        files_to_sign: '**/*.msixbundle'
+        search_root: '$(BundleDir)'
+
+    - pwsh: |
+        $signedBundles = @(Get-ChildItem -Path $(BundleDir) -Filter "*.msixbundle" -File)
+        Write-Verbose -Verbose "Signed bundles: $($signedBundles.Name -join ', ')"
+
+        if (-not (Test-Path $(ob_outputDirectory))) {
+          New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
+        }
+
+        foreach ($bundle in $signedBundles) {
+          Copy-Item -Path $bundle.FullName -Destination "$(ob_outputDirectory)" -Verbose
+        }
+
+        Write-Verbose -Verbose "Uploaded Bundles:"
+        Get-ChildItem -Path $(ob_outputDirectory) | Write-Verbose -Verbose
+      displayName: Upload msixbundle to Artifacts
diff --git a/.pipelines/templates/package-store-package.yml b/.pipelines/templates/package-store-package.yml
new file mode 100644
index 00000000000..4ee2098332e
--- /dev/null
+++ b/.pipelines/templates/package-store-package.yml
@@ -0,0 +1,259 @@
+jobs:
+- job: CreateStorePackage
+  displayName: Create StoreBroker Package
+  pool:
+    type: windows
+
+  variables:
+    - group: 'Azure Blob variable group'
+    - group: 'Store Publish Variables'
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_signing_setup_enabled
+      value: false
+    - name: ob_sdl_codeSignValidation_enabled
+      value: false
+
+  steps:
+    - checkout: self
+      clean: true
+
+    - template: release-SetReleaseTagandContainerName.yml@self
+
+    - task: DownloadPipelineArtifact@2
+      inputs:
+        buildType: 'current'
+        artifact: drop_msixbundle_CreateMSIXBundle
+        itemPattern: |
+          **/*.msixbundle
+        targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+      displayName: Download signed msixbundle
+
+    - pwsh: |
+        $bundleDir = '$(Build.ArtifactStagingDirectory)/downloads'
+        $bundle = Get-ChildItem -Path $bundleDir -Filter '*.msixbundle' -Recurse | Select-Object -First 1
+        if (-not $bundle) {
+          Write-Error "No .msixbundle file found in $bundleDir"
+          exit 1
+        }
+        Write-Verbose -Verbose "Found bundle: $($bundle.FullName)"
+        $vstsCommandString = "vso[task.setvariable variable=BundleDir]$($bundle.DirectoryName)"
+        Write-Host "##$vstsCommandString"
+      displayName: Locate msixbundle
+
+    - template: channelSelection.yml@self
+
+    - pwsh: |
+        $IsLTS = '$(ChannelSelection.IsLTS)' -eq 'true'
+        $IsStable = '$(ChannelSelection.IsStable)' -eq 'true'
+        $IsPreview = '$(ChannelSelection.IsPreview)' -eq 'true'
+
+        Write-Verbose -Verbose "Channel Selection - LTS: $IsLTS, Stable: $IsStable, Preview: $IsPreview"
+
+        # Define app configurations for each channel
+        $channelConfigs = @{
+          'LTS' = @{
+            AppStoreName = 'PowerShell-LTS'
+            ProductId = '$(productId-LTS)'
+            AppId = '$(AppID-LTS)'
+            ServiceEndpoint = "StoreAppPublish-Stable"
+          }
+          'Stable' = @{
+            AppStoreName = 'PowerShell'
+            ProductId = '$(productId-Stable)'
+            AppId = '$(AppID-Stable)'
+            ServiceEndpoint = "StoreAppPublish-Stable"
+          }
+          'Preview' = @{
+            AppStoreName = 'PowerShell (Preview)'
+            ProductId = '$(productId-Preview)'
+            AppId = '$(AppID-Preview)'
+            ServiceEndpoint = "StoreAppPublish-Preview"
+          }
+        }
+
+        $currentChannel = if ($IsLTS) { 'LTS' }
+          elseif ($IsStable) { 'Stable' }
+          elseif ($IsPreview) { 'Preview' }
+          else { $null }
+
+        if (-not $currentChannel) {
+          Write-Host "##[warning]No release channel selected (LTS/Stable/Preview all false). Skipping Store package creation."
+          Write-Host "##vso[task.setvariable variable=SkipStorePublish]true"
+          # Set channel flags so any downstream conditioned tasks evaluate to skip.
+          Write-Host "##vso[task.setvariable variable=LTS]false"
+          Write-Host "##vso[task.setvariable variable=STABLE]false"
+          Write-Host "##vso[task.setvariable variable=PREVIEW]false"
+          # Ensure the output directory exists so downstream artifact publishing does not fail.
+          $outputDirectory = "$(ob_outputDirectory)"
+          if (-not (Test-Path -LiteralPath $outputDirectory)) {
+            New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null
+          }
+          return
+        }
+
+        Write-Host "##vso[task.setvariable variable=SkipStorePublish]false"
+
+        $config = $channelConfigs[$currentChannel]
+        Write-Verbose -Verbose "Selected channel: $currentChannel"
+        Write-Verbose -Verbose "App Store Name: $($config.AppStoreName)"
+        Write-Verbose -Verbose "Product ID: $($config.ProductId)"
+
+        # Update PDP.xml file
+        $pdpPath = '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDP/PDP/en-US/PDP.xml'
+        if (Test-Path $pdpPath) {
+          Write-Verbose -Verbose "Updating PDP file: $pdpPath"
+
+          [xml]$pdpXml = Get-Content $pdpPath -Raw
+
+          # Create namespace manager for XML with default namespace
+          $nsManager = New-Object System.Xml.XmlNamespaceManager($pdpXml.NameTable)
+          $nsManager.AddNamespace("pd", "http://schemas.microsoft.com/appx/2012/ProductDescription")
+
+          $appStoreNameElement = $pdpXml.SelectSingleNode("//pd:AppStoreName", $nsManager)
+          if ($appStoreNameElement) {
+            $appStoreNameElement.SetAttribute("_locID", $config.AppStoreName)
+            Write-Verbose -Verbose "Updated AppStoreName _locID to: $($config.AppStoreName)"
+          } else {
+            Write-Warning "AppStoreName element not found in PDP file"
+          }
+
+          $pdpXml.Save($pdpPath)
+          Write-Verbose -Verbose "PDP file updated successfully"
+          Get-Content -Path $pdpPath | Write-Verbose -Verbose
+        } else {
+          Write-Error "PDP file not found: $pdpPath"
+          exit 1
+        }
+
+        # Update SBConfig.json file
+        $sbConfigPath = '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/SBConfig.json'
+        if (Test-Path $sbConfigPath) {
+          Write-Verbose -Verbose "Updating SBConfig file: $sbConfigPath"
+
+          $sbConfigJson = Get-Content $sbConfigPath -Raw | ConvertFrom-Json
+
+          $sbConfigJson.appSubmission.productId = $config.ProductId
+          Write-Verbose -Verbose "Updated productId to: $($config.ProductId)"
+
+          $sbConfigJson | ConvertTo-Json -Depth 100 | Set-Content $sbConfigPath -Encoding UTF8
+          Write-Verbose -Verbose "SBConfig file updated successfully"
+          Get-Content -Path $sbConfigPath | Write-Verbose -Verbose
+        } else {
+          Write-Error "SBConfig file not found: $sbConfigPath"
+          exit 1
+        }
+
+        Write-Host "##vso[task.setvariable variable=ServiceConnection]$($config.ServiceEndpoint)"
+        Write-Host "##vso[task.setvariable variable=SBConfigPath]$($sbConfigPath)"
+
+        # Select the correct bundle based on channel
+        $bundleFiles = @(Get-ChildItem -Path '$(BundleDir)' -Filter '*.msixbundle')
+        Write-Verbose -Verbose "Available bundles: $($bundleFiles.Name -join ', ')"
+
+        if ($IsLTS) {
+          $bundleFile = $bundleFiles | Where-Object { $_.Name -match '-LTS-' }
+        } else {
+          # Catches Stable or Preview
+          $bundleFile = $bundleFiles | Where-Object { $_.Name -notmatch '-LTS-' }
+        }
+
+        if (-not $bundleFile) {
+          Write-Error "No matching bundle found for channel '$currentChannel'. Available bundles: $($bundleFiles.Name -join ', ')"
+          exit 1
+        }
+
+        # Copy the selected bundle to a dedicated directory for store packaging
+        $storeBundleDir = '$(Pipeline.Workspace)\releasePipeline\msix\store-bundle'
+        New-Item $storeBundleDir -Type Directory -Force > $null
+        Copy-Item -Path $bundleFile.FullName -Destination $storeBundleDir -Force -Verbose
+        Write-Host "##vso[task.setvariable variable=StoreBundleDir]$storeBundleDir"
+        Write-Verbose -Verbose "Selected bundle for store packaging: $($bundleFile.Name)"
+
+        # These variables are used in the next tasks to determine which ServiceEndpoint to use
+        $ltsValue = $IsLTS.ToString().ToLower()
+        $stableValue = $IsStable.ToString().ToLower()
+        $previewValue = $IsPreview.ToString().ToLower()
+
+        Write-Verbose -Verbose "About to set variables:"
+        Write-Verbose -Verbose "  LTS=$ltsValue"
+        Write-Verbose -Verbose "  STABLE=$stableValue"
+        Write-Verbose -Verbose "  PREVIEW=$previewValue"
+
+        Write-Host "##vso[task.setvariable variable=LTS]$ltsValue"
+        Write-Host "##vso[task.setvariable variable=STABLE]$stableValue"
+        Write-Host "##vso[task.setvariable variable=PREVIEW]$previewValue"
+
+        Write-Verbose -Verbose "Variables set successfully"
+      name: UpdateConfigs
+      displayName: Update PDPs and SBConfig.json
+
+    - pwsh: |
+        Write-Verbose -Verbose "Checking variables after UpdateConfigs:"
+        Write-Verbose -Verbose "LTS=$(LTS)"
+        Write-Verbose -Verbose "STABLE=$(STABLE)"
+        Write-Verbose -Verbose "PREVIEW=$(PREVIEW)"
+      displayName: Debug - Check Variables
+
+    - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3
+      displayName: 'Create StoreBroker Package (Preview)'
+      condition: eq(variables['PREVIEW'], 'true')
+      inputs:
+        serviceEndpoint: 'StoreAppPublish-Preview'
+        sbConfigPath: '$(SBConfigPath)'
+        sourceFolder: '$(StoreBundleDir)'
+        contents: '*.msixBundle'
+        outSBName: 'PowerShellStorePackage'
+        pdpPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDP/PDP'
+        pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDP/PDP-Media'
+
+    - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3
+      displayName: 'Create StoreBroker Package (Stable/LTS)'
+      condition: or(eq(variables['STABLE'], 'true'), eq(variables['LTS'], 'true'))
+      inputs:
+        serviceEndpoint: 'StoreAppPublish-Stable'
+        sbConfigPath: '$(SBConfigPath)'
+        sourceFolder: '$(StoreBundleDir)'
+        contents: '*.msixBundle'
+        outSBName: 'PowerShellStorePackage'
+        pdpPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDP/PDP'
+        pdpMediaPath: '$(System.DefaultWorkingDirectory)/PowerShell/.pipelines/store/PDP/PDP-Media'
+
+    - pwsh: |
+        $outputDirectory = "$(ob_outputDirectory)"
+        if (-not (Test-Path -LiteralPath $outputDirectory)) {
+          New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null
+        }
+
+        Get-Item -Path "$(System.DefaultWorkingDirectory)/SBLog.txt" -ErrorAction SilentlyContinue |
+          Copy-Item -Destination $outputDirectory -Verbose
+      displayName: Upload Store Failure Log
+      condition: failed()
+
+    - pwsh: |
+        $outputDirectory = "$(ob_outputDirectory)"
+        if (-not (Test-Path -LiteralPath $outputDirectory)) {
+          New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null
+        }
+
+        $submissionPackageDir = "$(System.DefaultWorkingDirectory)/SBOutDir"
+        $jsonFile = "$submissionPackageDir/PowerShellStorePackage.json"
+        $zipFile = "$submissionPackageDir/PowerShellStorePackage.zip"
+
+        if ((Test-Path $jsonFile) -and (Test-Path $zipFile)) {
+          Write-Verbose -Verbose "Uploading StoreBroker Package files:"
+          Write-Verbose -Verbose "JSON File: $jsonFile"
+          Write-Verbose -Verbose "ZIP File: $zipFile"
+
+          Copy-Item -Path $submissionPackageDir -Destination $outputDirectory -Verbose -Recurse
+        }
+        else {
+          Write-Error "Required files not found in $submissionPackageDir"
+          exit 1
+        }
+      displayName: 'Upload StoreBroker Package'
+      condition: and(succeeded(), ne(variables['SkipStorePublish'], 'true'))
diff --git a/.pipelines/templates/packaging/windows/package.yml b/.pipelines/templates/packaging/windows/package.yml
new file mode 100644
index 00000000000..7aea3d5c456
--- /dev/null
+++ b/.pipelines/templates/packaging/windows/package.yml
@@ -0,0 +1,229 @@
+parameters:
+  runtime: x64
+
+jobs:
+- job: build_win_${{ parameters.runtime }}
+  displayName: Build Windows Packages ${{ parameters.runtime }}
+  condition: succeeded()
+  pool:
+    type: windows
+
+  variables:
+    - name: ob_sdl_codeSignValidation_enabled
+      value: false  # Skip signing validation in build-only stage
+    - name: ob_signing_setup_enabled
+      value: false  # Disable signing setup - this is a build-only stage, signing happens in separate stage
+    - name: ob_artifactBaseName
+      value: drop_windows_package_${{ parameters.runtime }}
+    - name: nugetMultiFeedWarnLevel
+      value: none
+    - name: NugetSecurityAnalysisWarningLevel
+      value: none
+    - name: skipNugetSecurityAnalysis
+      value: true
+    - group: DotNetPrivateBuildAccess
+    - group: certificate_logical_to_actual
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)\ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_binskim_enabled
+      value: false  # Disable for build-only, enable in signing stage
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: Runtime
+      value: ${{ parameters.runtime }}
+    - group: msixTools
+
+  steps:
+  - checkout: self
+    clean: true
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture environment
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+      ob_restore_phase: false
+
+  - template: /.pipelines/templates/shouldSign.yml@self
+    parameters:
+      ob_restore_phase: false
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+    parameters:
+      nativePathRoot: '$(Agent.TempDirectory)'
+      ob_restore_phase: false
+
+  - template: /.pipelines/templates/rebuild-branch-check.yml@self
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_${{ parameters.runtime }}_release
+    displayName: Download signed artifacts
+    condition: ${{ not(contains(parameters.runtime, 'minsize')) }}
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_${{ parameters.runtime }}
+    displayName: Download minsize signed artifacts
+    condition: ${{ contains(parameters.runtime, 'minsize') }}
+
+  - pwsh: |
+      Write-Verbose -Verbose "signed artifacts"
+      Get-ChildItem "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline" -Recurse
+    displayName: 'Capture Downloaded Artifacts'
+    # Diagnostics is not critical it passes every time it runs
+    continueOnError: true
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+    parameters:
+      ob_restore_phase: false
+
+  - pwsh: |
+      $runtime = '$(Runtime)'
+      Write-Verbose -Verbose "runtime = '$(Runtime)'"
+
+      $signedFolder = switch ($runtime) {
+        'x64' { 'Signed-win7-x64' }
+        'x86' { 'Signed-win7-x86' }
+        'arm64' { 'Signed-win-arm64' }
+        'fxdependent' { 'Signed-fxdependent' }
+        'fxdependentWinDesktop' { 'Signed-fxdependent-win-desktop' }
+        'x64_minsize' { 'Signed-win7-x64' }
+        'arm64_minsize' { 'Signed-win-arm64' }
+      }
+
+      Write-Verbose -Message "Init..." -Verbose
+
+      $repoRoot = "$env:REPOROOT"
+      Import-Module "$repoRoot\build.psm1"
+      Import-Module "$repoRoot\tools\packaging"
+
+      Start-PSBootstrap -Scenario Both
+
+      Find-Dotnet
+
+      $signedFilesPath, $psoptionsFilePath = if ($runtime.Contains('minsize')) {
+          "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_${runtime}\$signedFolder"
+          "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_${runtime}\psoptions\psoptions.json"
+        }
+        else {
+          "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_${runtime}_release\$signedFolder"
+          "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline\drop_windows_build_windows_${runtime}_release\psoptions\psoptions.json"
+        }
+
+      Write-Verbose -Verbose "signedFilesPath: $signedFilesPath"
+      Write-Verbose -Verbose "psoptionsFilePath: $psoptionsFilePath"
+
+      Write-Verbose -Message "checking pwsh exists in $signedFilesPath" -Verbose
+      if (-not (Test-Path $signedFilesPath\pwsh.exe)) {
+        throw "pwsh.exe not found in $signedFilesPath"
+      }
+
+      Write-Verbose -Message "Restoring PSOptions from $psoptionsFilePath" -Verbose
+
+      Restore-PSOptions -PSOptionsPath "$psoptionsFilePath"
+      Get-PSOptions | Write-Verbose -Verbose
+
+      $metadata = Get-Content "$repoRoot/tools/metadata.json" -Raw | ConvertFrom-Json
+
+      Write-Verbose -Verbose "metadata:"
+      $metadata | Out-String | Write-Verbose -Verbose
+
+      # Use the rebuild branch check from the template
+      $isRebuildBranch = '$(RebuildBranchCheck.IsRebuildBranch)' -eq 'true'
+
+      # Don't build LTS packages for rebuild branches
+      $LTS = $metadata.LTSRelease.Package -and -not $isRebuildBranch
+      $Stable = [bool]$metadata.StableRelease.Package
+
+      if ($isRebuildBranch) {
+        Write-Verbose -Message "Rebuild branch detected, skipping LTS package build" -Verbose
+      }
+
+      Write-Verbose -Verbose "LTS: $LTS"
+      Write-Verbose -Verbose "Stable: $Stable"
+
+      if ($LTS) {
+        Write-Verbose -Message "LTS Release: $LTS"
+      }
+
+      Start-PSBootstrap -Scenario Package
+
+      $WindowsRuntime = switch ($runtime) {
+        'x64' { 'win7-x64' }
+        'x86' { 'win7-x86' }
+        'arm64' { 'win-arm64' }
+        'fxdependent' { 'win7-x64' }
+        'fxdependentWinDesktop' { 'win7-x64' }
+        'x64_minsize' { 'win7-x64' }
+        'arm64_minsize' { 'win-arm64' }
+      }
+
+      $packageTypes = switch ($runtime) {
+        'x64' { @('zip', 'msix') }
+        'x86' { @('zip', 'msix') }
+        'arm64' { @('zip', 'msix') }
+        'fxdependent' { 'fxdependent' }
+        'fxdependentWinDesktop' { 'fxdependent-win-desktop' }
+        'x64_minsize' { 'min-size-x64' }
+        'arm64_minsize' { 'min-size-arm64' }
+      }
+
+      if (-not (Test-Path $(ob_outputDirectory))) {
+        New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
+      }
+
+      Set-Location $repoRoot
+
+      Start-PSPackage -Type $packageTypes -SkipReleaseChecks -WindowsRuntime $WindowsRuntime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath -LTS:$LTS
+
+      # When both LTS and Stable are requested, also build the Stable MSIX
+      if ($packageTypes -contains 'msix' -and $LTS -and $Stable) {
+        Write-Verbose -Verbose "Both LTS and Stable packages requested. Building additional Stable MSIX."
+        Start-PSPackage -Type msix -SkipReleaseChecks -WindowsRuntime $WindowsRuntime -ReleaseTag $(ReleaseTagVar) -PackageBinPath $signedFilesPath
+      }
+
+    displayName: 'Build Packages (Unsigned)'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+  # Copy unsigned packages to output directory
+  - pwsh: |
+      $runtime = '$(Runtime)'
+      Write-Verbose -Verbose "runtime = '$(Runtime)'"
+
+      $packageTypes = switch ($runtime) {
+        'x64' { @('zip', 'msix') }
+        'x86' { @('zip', 'msix') }
+        'arm64' { @('zip', 'msix') }
+        'fxdependent' { 'fxdependent' }
+        'fxdependentWinDesktop' { 'fxdependent-win-desktop' }
+        'x64_minsize' { 'min-size-x64' }
+        'arm64_minsize' { 'min-size-arm64' }
+      }
+
+      if (-not (Test-Path $(ob_outputDirectory))) {
+        New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
+      }
+
+      if ($packageTypes -contains 'zip' -or $packageTypes -like 'fxdependent*' -or $packageTypes -like 'min-size*') {
+        $zipPkgNameFilter = "powershell-*.zip"
+        $zipPkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $zipPkgNameFilter -Recurse -File | Select-Object -ExpandProperty FullName
+        Write-Verbose -Verbose "unsigned zipPkgPath: $zipPkgPath"
+        Copy-Item -Path $zipPkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+      }
+
+      if ($packageTypes -contains 'msix') {
+        $msixPkgNameFilter = "PowerShell*.msix"
+        $msixPkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $msixPkgNameFilter -Recurse -File | Select-Object -ExpandProperty FullName
+        Write-Verbose -Verbose "unsigned msixPkgPath: $msixPkgPath"
+        Copy-Item -Path $msixPkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+      }
+    displayName: Copy unsigned packages to output directory
+
+  - pwsh: |
+      Get-ChildItem -Path $(ob_outputDirectory) -Recurse
+    displayName: 'List unsigned artifacts'
diff --git a/.pipelines/templates/packaging/windows/sign.yml b/.pipelines/templates/packaging/windows/sign.yml
new file mode 100644
index 00000000000..8481f93c964
--- /dev/null
+++ b/.pipelines/templates/packaging/windows/sign.yml
@@ -0,0 +1,118 @@
+parameters:
+  runtime: x64
+
+jobs:
+- job: sign_win_${{ parameters.runtime }}
+  displayName: Sign Windows Packages ${{ parameters.runtime }}
+  condition: succeeded()
+  pool:
+    type: windows
+
+  variables:
+    - name: runCodesignValidationInjection
+      value: false
+    - name: ob_artifactBaseName
+      value: drop_windows_package_package_win_${{ parameters.runtime }}
+    - name: nugetMultiFeedWarnLevel
+      value: none
+    - name: NugetSecurityAnalysisWarningLevel
+      value: none
+    - name: skipNugetSecurityAnalysis
+      value: true
+    - group: DotNetPrivateBuildAccess
+    - group: certificate_logical_to_actual
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)\ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_binskim_enabled
+      value: true
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: Runtime
+      value: ${{ parameters.runtime }}
+    - group: msixTools
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: /.pipelines/templates/shouldSign.yml@self
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+    parameters:
+      nativePathRoot: '$(Agent.TempDirectory)'
+
+  # Download unsigned packages from the build stage
+  - download: current
+    artifact: drop_windows_package_${{ parameters.runtime }}
+    displayName: Download unsigned packages
+    env:
+      ob_restore_phase: true
+
+  - pwsh: |
+      Write-Verbose -Verbose "Downloaded unsigned artifacts:"
+      Get-ChildItem "$(Pipeline.Workspace)\drop_windows_package_${{ parameters.runtime }}" -Recurse
+    displayName: 'Capture Downloaded Unsigned Artifacts'
+    continueOnError: true
+    env:
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  # Import build.psm1 and bootstrap packaging dependencies
+  - pwsh: |
+      $repoRoot = "$env:REPOROOT"
+      Import-Module "$repoRoot\build.psm1"
+      Import-Module "$repoRoot\tools\packaging"
+      Write-Verbose -Verbose "Modules imported successfully"
+    displayName: 'Import modules'
+    env:
+      ob_restore_phase: true
+
+  # Copy all signed packages to output directory
+  - pwsh: |
+      $runtime = '$(Runtime)'
+      Write-Verbose -Verbose "runtime = '$(Runtime)'"
+
+      $packageTypes = switch ($runtime) {
+        'x64' { @('zip', 'msix') }
+        'x86' { @('zip', 'msix') }
+        'arm64' { @('zip', 'msix') }
+        'fxdependent' { 'fxdependent' }
+        'fxdependentWinDesktop' { 'fxdependent-win-desktop' }
+        'x64_minsize' { 'min-size-x64' }
+        'arm64_minsize' { 'min-size-arm64' }
+      }
+
+      if (-not (Test-Path $(ob_outputDirectory))) {
+        New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
+      }
+
+      if ($packageTypes -contains 'zip' -or $packageTypes -like 'fxdependent*' -or $packageTypes -like 'min-size*') {
+        $zipPkgNameFilter = "powershell-*.zip"
+        $zipPkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $zipPkgNameFilter -Recurse -File | Select-Object -ExpandProperty FullName
+        Write-Verbose -Verbose "signed zipPkgPath: $zipPkgPath"
+        Copy-Item -Path $zipPkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+      }
+
+      if ($packageTypes -contains 'msix') {
+        $msixPkgNameFilter = "PowerShell*.msix"
+        $msixPkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $msixPkgNameFilter -Recurse -File | Select-Object -ExpandProperty FullName
+        Write-Verbose -Verbose "signed msixPkgPath: $msixPkgPath"
+        Copy-Item -Path $msixPkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
+      }
+    displayName: Copy signed packages to output directory
+
+  - pwsh: |
+      Get-ChildItem -Path $(ob_outputDirectory) -Recurse
+    displayName: 'List signed artifacts'
+    env:
+      ob_restore_phase: true
diff --git a/.pipelines/templates/rebuild-branch-check.yml b/.pipelines/templates/rebuild-branch-check.yml
new file mode 100644
index 00000000000..a4b546a0dc6
--- /dev/null
+++ b/.pipelines/templates/rebuild-branch-check.yml
@@ -0,0 +1,17 @@
+# This template checks if the current branch is a rebuild branch
+# and sets an output variable IsRebuildBranch that can be used by other templates
+steps:
+- pwsh: |
+    # Check if this is a rebuild branch (e.g., rebuild/v7.4.13-rebuild.5)
+    $isRebuildBranch = '$(Build.SourceBranch)' -match 'refs/heads/rebuild/.*-rebuild\.'
+
+    $value = if ($isRebuildBranch) { 'true' } else { 'false' }
+    Write-Verbose -Message "IsRebuildBranch: $value" -Verbose
+
+    if ($isRebuildBranch) {
+        Write-Verbose -Message "Rebuild branch detected: $(Build.SourceBranch)" -Verbose
+    }
+
+    Write-Host "##vso[task.setvariable variable=IsRebuildBranch;isOutput=true]$value"
+  name: RebuildBranchCheck
+  displayName: Check if Rebuild Branch
diff --git a/.pipelines/templates/release-MSIX-Publish.yml b/.pipelines/templates/release-MSIX-Publish.yml
new file mode 100644
index 00000000000..a68755725ce
--- /dev/null
+++ b/.pipelines/templates/release-MSIX-Publish.yml
@@ -0,0 +1,142 @@
+parameters:
+  - name: skipMSIXPublish
+    type: boolean
+
+jobs:
+- job: Store_Publish_MSIX
+  displayName: Publish MSIX to the Microsoft Store
+  pool:
+    type: release
+    os: windows
+  templateContext:
+    inputs:
+      - input: pipelineArtifact
+        pipeline: PSPackagesOfficial
+        artifactName: drop_store_package_CreateStorePackage
+  variables:
+    - group: 'Store Publish Variables'
+    - name: LTS
+      value: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['ChannelSelection.IsLTS'] ]
+    - name: STABLE
+      value: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['ChannelSelection.IsStable'] ]
+    - name: PREVIEW
+      value: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['ChannelSelection.IsPreview'] ]
+    - template: ./variables/release-shared.yml@self
+      parameters:
+        RELEASETAG: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['OutputReleaseTag.releaseTag'] ]
+  steps:
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        Write-Verbose -Verbose "Release Tag: $(ReleaseTag)"
+        Get-ChildItem $(Pipeline.Workspace) -Recurse | Select-Object -ExpandProperty FullName
+    displayName: 'Capture ReleaseTag and Downloaded Packages'
+
+  - task: PowerShell@2
+    condition: or(eq(variables['LTS'], 'true'), eq(variables['STABLE'], 'true'), eq(variables['PREVIEW'], 'true'))
+    inputs:
+      targetType: inline
+      script: |
+        if ("$(ReleaseTag)" -eq '') {
+          Write-Error "ReleaseTag is not set. Cannot proceed with publishing to the Store."
+          exit 1
+        }
+        $middleURL = ''
+        $tagString = "$(ReleaseTag)"
+        if ($tagString -match '-preview') {
+          $middleURL = "preview"
+        }
+        elseif ($tagString -match '(\d+\.\d+)') {
+          $middleURL = $matches[1]
+        }
+
+        $endURL = $tagString -replace '^v','' -replace '\.',''
+        $message = "Changelog: https://github.com/PowerShell/PowerShell/blob/master/CHANGELOG/$middleURL.md#$endURL"
+        Write-Verbose -Verbose "Release Notes for the Store:"
+        Write-Verbose -Verbose "$message"
+        $jsonPath = "$(Pipeline.Workspace)\SBOutDir\PowerShellStorePackage.json"
+        $json = Get-Content $jsonPath -Raw | ConvertFrom-Json
+
+        $json.listings.'en-us'.baseListing.releaseNotes = $message
+
+        # Add PowerShell version to the top of the description
+        $description = $json.listings.'en-us'.baseListing.description
+        $version = "$(ReleaseTag)"
+        $updatedDescription = "Version: $version`n`n$description"
+        $json.listings.'en-us'.baseListing.description = $updatedDescription
+        Write-Verbose -Verbose "Updated description: $updatedDescription"
+
+        $json | ConvertTo-Json -Depth 100 | Set-Content $jsonPath -Encoding UTF8
+    displayName: 'Add Changelog Link and Version Number to SBJSON'
+
+  - task: PowerShell@2
+    condition: or(eq(variables['LTS'], 'true'), eq(variables['STABLE'], 'true'), eq(variables['PREVIEW'], 'true'))
+    inputs:
+      targetType: inline
+      script: |
+        # Convert ADO variables to PowerShell boolean variables
+        $IsLTS = '$(LTS)' -eq 'true'
+        $IsStable = '$(STABLE)' -eq 'true'
+        $IsPreview = '$(PREVIEW)' -eq 'true'
+
+        Write-Verbose -Verbose "Channel Selection - LTS: $(LTS), Stable: $(STABLE), Preview: $(PREVIEW)"
+
+        $currentChannel = if ($IsLTS) { 'LTS' }
+          elseif ($IsStable) { 'Stable' }
+          elseif ($IsPreview) { 'Preview' }
+          else { $null }
+
+        if (-not $currentChannel) {
+          Write-Host "##[warning]No release channel selected (LTS/Stable/Preview all false). Skipping Store publish."
+          return
+        }
+
+        # Assign AppID for Store-Publish Task
+        $appID = $null
+        if ($IsLTS) {
+          $appID = '$(AppID-LTS)'
+        }
+        elseif ($IsStable) {
+          $appID = '$(AppID-Stable)'
+        }
+        else {
+          $appID = '$(AppID-Preview)'
+        }
+
+        Write-Host "##vso[task.setvariable variable=AppID]$appID"
+        Write-Verbose -Verbose "Selected channel: $currentChannel"
+        Write-Verbose -Verbose "Conditional tasks will handle the publishing based on channel variables"
+    displayName: 'Validate Channel Selection'
+
+  - task: MS-RDX-MRO.windows-store-publish.publish-task.store-publish@3
+    displayName: 'Publish StoreBroker Package (Stable/LTS)'
+    condition: and(not(${{ parameters.skipMSIXPublish }}), or(eq(variables['STABLE'], 'true'), eq(variables['LTS'], 'true')))
+    inputs:
+      serviceEndpoint: 'StoreAppPublish-Stable'
+      appId: '$(AppID)'
+      inputMethod: JsonAndZip
+      jsonPath: '$(Pipeline.Workspace)\SBOutDir\PowerShellStorePackage.json'
+      zipPath: '$(Pipeline.Workspace)\SBOutDir\PowerShellStorePackage.zip'
+      force: true
+      deletePackages: true
+      numberOfPackagesToKeep: 2
+      jsonZipUpdateMetadata: true
+      targetPublishMode: 'Immediate'
+      skipPolling: true
+
+  - task: MS-RDX-MRO.windows-store-publish.publish-task.store-publish@3
+    displayName: 'Publish StoreBroker Package (Preview)'
+    condition: and(not(${{ parameters.skipMSIXPublish }}), eq(variables['PREVIEW'], 'true'))
+    inputs:
+      serviceEndpoint: 'StoreAppPublish-Preview'
+      appId: '$(AppID)'
+      inputMethod: JsonAndZip
+      jsonPath: '$(Pipeline.Workspace)\SBOutDir\PowerShellStorePackage.json'
+      zipPath: '$(Pipeline.Workspace)\SBOutDir\PowerShellStorePackage.zip'
+      force: true
+      deletePackages: true
+      numberOfPackagesToKeep: 2
+      jsonZipUpdateMetadata: true
+      targetPublishMode: 'Immediate'
+      skipPolling: true
diff --git a/.pipelines/templates/release-MakeBlobPublic.yml b/.pipelines/templates/release-MakeBlobPublic.yml
new file mode 100644
index 00000000000..758298202a1
--- /dev/null
+++ b/.pipelines/templates/release-MakeBlobPublic.yml
@@ -0,0 +1,177 @@
+parameters:
+  - name: SkipPSInfraInstallers
+    displayName: Skip Copying Archives and Installers to PSInfrastructure Public Location
+    type: boolean
+    default: false
+
+jobs:
+- template: /.pipelines/templates/approvalJob.yml@self
+  parameters:
+    displayName: Approve Copy release packages to PSInfra storage
+    jobName: CopyReleaseBlobApproval
+    instructions: |
+      Approval for Copy release packages to PSInfra storage
+
+- job: PSInfraReleaseBlobPublic
+  displayName: Copy release to PSInfra storage
+  dependsOn: CopyReleaseBlobApproval
+  condition: and(succeeded(), ne('${{ parameters.SkipPSInfraInstallers }}', true))
+  pool:
+    name: PowerShell1ES
+    type: windows
+    isCustom: true
+    demands:
+    - ImageOverride -equals PSMMS2019-Secure
+
+
+  variables:
+  - group: 'PSInfraStorage'
+  - group: 'Azure Blob variable group'
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+
+  steps:
+    - checkout: self
+      clean: true
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - template: /.pipelines/templates/SetVersionVariables.yml@self
+      parameters:
+        ReleaseTagVar: $(ReleaseTagVar)
+        CreateJson: no
+
+    - pwsh: |
+        Get-ChildItem Env:
+      displayName: 'Capture Environment Variables'
+
+    - task: AzurePowerShell@5
+      displayName: Copy blobs to PSInfra storage
+      inputs:
+        azureSubscription: az-blob-cicd-infra
+        scriptType: inlineScript
+        azurePowerShellVersion: LatestVersion
+        pwsh: true
+        inline: |
+          $sourceStorageAccountName = '$(StorageAccount)'
+          $destinationStorageAccountName = '$(PSInfraStorageAccount)'
+          $destinationContainerName = '$web'
+          $destinationPrefix = 'install/$(ReleaseTagVar)'
+
+          $sourceContext = New-AzStorageContext -StorageAccountName $sourceStorageAccountName
+          Write-Verbose -Verbose "Source context: $($sourceContext.BlobEndPoint)"
+
+          $destinationContext = New-AzStorageContext -StorageAccountName $destinationStorageAccountName
+          Write-Verbose -Verbose "Destination context: $($destinationContext.BlobEndPoint)"
+
+          foreach ($sourceContainerName in '$(AzureVersion)', '$(AzureVersion)-gc') {
+            $blobs = Get-AzStorageBlob -Context $sourceContext -Container $sourceContainerName
+
+            Write-Verbose -Verbose "Blobs found in $sourceContainerName"
+            $blobs.Name | Write-Verbose -Verbose
+
+            Write-Verbose -Verbose "Copying blobs from $sourceContainerName to $destinationContainerName/$destinationPrefix"
+
+            foreach ($blob in $blobs) {
+              $sourceBlobName = $blob.Name
+              Write-Verbose -Verbose "sourceBlobName = $sourceBlobName"
+
+              $destinationBlobName = "$destinationPrefix/$sourceBlobName"
+              Write-Verbose -Verbose "destinationBlobName = $destinationBlobName"
+              $existingBlob = Get-AzStorageBlob -Blob $destinationBlobName -Container $destinationContainerName -Context $destinationContext -ErrorAction Ignore
+              if ($existingBlob) {
+                Write-Verbose -Verbose "Blob $destinationBlobName already exists in '$destinationStorageAccountName/$destinationContainerName', removing before copy."
+                $existingBlob | Remove-AzStorageBlob -ErrorAction Stop -Verbose
+              }
+
+              Copy-AzStorageBlob -SourceContext $sourceContext -DestinationContext $destinationContext -SrcContainer $sourceContainerName -SrcBlob $sourceBlobName -DestContainer $destinationContainerName -DestBlob $destinationBlobName -Force -Verbose -Confirm:$false
+            }
+          }
+
+
+- template: /.pipelines/templates/approvalJob.yml@self
+  parameters:
+    displayName: Approve Copy Global tool packages to PSInfra storage
+    jobName: CopyBlobApproval
+    instructions: |
+      Approval for Copy global tool packages to PSInfra storage
+
+- job: PSInfraBlobPublic
+  displayName: Copy global tools to PSInfra storage
+  dependsOn: CopyBlobApproval
+  pool:
+    name: PowerShell1ES
+    type: windows
+    isCustom: true
+    demands:
+    - ImageOverride -equals PSMMS2019-Secure
+
+  variables:
+    - group: 'PSInfraStorage'
+    - group: 'Azure Blob variable group'
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+
+  steps:
+    - checkout: self
+      clean: true
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - template: /.pipelines/templates/SetVersionVariables.yml@self
+      parameters:
+        ReleaseTagVar: $(ReleaseTagVar)
+        CreateJson: no
+
+    - pwsh: |
+        Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: 'Capture Environment Variables'
+
+    - task: AzurePowerShell@5
+      displayName: Copy blobs to PSInfra storage
+      inputs:
+        azureSubscription: az-blob-cicd-infra
+        scriptType: inlineScript
+        azurePowerShellVersion: LatestVersion
+        pwsh: true
+        inline: |
+          $sourceStorageAccountName = '$(StorageAccount)'
+          $sourceContainerName = '$(AzureVersion)-nuget'
+          $prefix = 'globaltool'
+
+          $destinationStorageAccountName = '$(PSInfraStorageAccount)'
+          $destinationContainerName = '$web'
+          $destinationPrefix = 'tool/$(Version)'
+
+          $sourceContext = New-AzStorageContext -StorageAccountName $sourceStorageAccountName
+          Write-Verbose -Verbose "Source context: $($sourceContext.BlobEndPoint)"
+
+          $destinationContext = New-AzStorageContext -StorageAccountName $destinationStorageAccountName
+          Write-Verbose -Verbose "Destination context: $($destinationContext.BlobEndPoint)"
+
+          $blobs = Get-AzStorageBlob -Context $sourceContext -Container $sourceContainerName -Prefix $prefix
+
+          Write-Verbose -Verbose "Blobs found in $sourceContainerName"
+          $blobs.Name | Write-Verbose -Verbose
+
+          Write-Verbose -Verbose "Copying blobs from $sourceContainerName to $destinationContainerName/$destinationPrefix"
+
+          foreach ($blob in $blobs) {
+            $sourceBlobName = $blob.Name
+            Write-Verbose -Verbose "sourceBlobName = $sourceBlobName"
+
+            $destinationBlobName = $sourceBlobName -replace "$prefix", $destinationPrefix
+            Write-Verbose -Verbose "destinationBlobName = $destinationBlobName"
+
+            Copy-AzStorageBlob -SourceContext $sourceContext -DestinationContext $destinationContext -SrcContainer $sourceContainerName -SrcBlob $sourceBlobName -DestContainer $destinationContainerName -DestBlob $destinationBlobName -Force -Verbose -Confirm:$false
+          }
diff --git a/.pipelines/templates/release-Nuget.yml b/.pipelines/templates/release-Nuget.yml
new file mode 100644
index 00000000000..c6ffb67e6a4
--- /dev/null
+++ b/.pipelines/templates/release-Nuget.yml
@@ -0,0 +1,59 @@
+parameters:
+  - name: skipPublish
+    type: boolean
+
+jobs:
+- job: NuGetPublish
+  displayName: Publish to NuGet
+  condition: succeeded()
+  pool:
+    type: release
+    os: windows
+  templateContext:
+    inputs:
+      - input: pipelineArtifact
+        pipeline: PSPackagesOfficial
+        artifactName: drop_upload_upload_packages
+  variables:
+  - template: ./variables/release-shared.yml@self
+    parameters:
+      VERSION: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['OutputVersion.Version'] ]
+
+  steps:
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        Write-Verbose -Verbose "Version: $(Version)"
+        Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: 'Capture Environment Variables'
+
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        #Exclude all global tool packages. Their names start with 'PowerShell.'
+        $null = New-Item -ItemType Directory -Path "$(Pipeline.Workspace)/release"
+        Copy-Item "$(Pipeline.Workspace)/NuGetPackages/*.nupkg" -Destination "$(Pipeline.Workspace)/release" -Exclude "PowerShell.*.nupkg" -Force -Verbose
+
+        $releaseVersion = '$(Version)'
+        $globalToolPath = "$(Pipeline.Workspace)/NuGetPackages/PowerShell.$releaseVersion.nupkg"
+
+        if ($releaseVersion -notlike '*-*') {
+            # Copy the global tool package for stable releases
+            Copy-Item $globalToolPath -Destination "$(Pipeline.Workspace)/release"
+        }
+
+        Write-Verbose -Verbose "The .nupkgs below will be pushed:"
+        Get-ChildItem "$(Pipeline.Workspace)/release" -recurse
+    displayName: Download and capture nupkgs
+    condition: and(ne('${{ parameters.skipPublish }}', 'true'), succeeded())
+
+  - task: NuGetCommand@2
+    displayName: 'NuGet push'
+    condition: and(ne('${{ parameters.skipPublish }}', 'true'), succeeded())
+    inputs:
+      command: push
+      packagesToPush: '$(Pipeline.Workspace)/release/*.nupkg'
+      nuGetFeedType: external
+      publishFeedCredentials: PowerShellNuGetOrgPush
diff --git a/.pipelines/templates/release-SetReleaseTagandContainerName.yml b/.pipelines/templates/release-SetReleaseTagandContainerName.yml
new file mode 100644
index 00000000000..d40551353d2
--- /dev/null
+++ b/.pipelines/templates/release-SetReleaseTagandContainerName.yml
@@ -0,0 +1,36 @@
+parameters:
+- name: restorePhase
+  default: false
+
+steps:
+- pwsh: |
+    $variable = 'releaseTag'
+    $branch = $ENV:BUILD_SOURCEBRANCH
+    if($branch -notmatch  '^.*((release/|rebuild/.*rebuild))')
+    {
+        throw "Branch name is not in release format: '$branch'"
+    }
+
+    $releaseTag = $Branch -replace '^.*((release|rebuild)/)'
+    $vstsCommandString = "vso[task.setvariable variable=$Variable;isOutput=true]$releaseTag"
+    Write-Verbose -Message "setting $Variable to $releaseTag" -Verbose
+    Write-Host -Object "##$vstsCommandString"
+  name: OutputReleaseTag
+  displayName: Set Release Tag
+  env:
+    ob_restore_phase: ${{ parameters.restorePhase }}
+
+- pwsh: |
+    $azureVersion = '$(OutputReleaseTag.ReleaseTag)'.ToLowerInvariant() -replace '\.', '-'
+    $vstsCommandString = "vso[task.setvariable variable=AzureVersion;isOutput=true]$azureVersion"
+    Write-Host "sending " + $vstsCommandString
+    Write-Host "##$vstsCommandString"
+
+    $version = '$(OutputReleaseTag.ReleaseTag)'.ToLowerInvariant().Substring(1)
+    $vstsCommandString = "vso[task.setvariable variable=Version;isOutput=true]$version"
+    Write-Host ("sending " + $vstsCommandString)
+    Write-Host "##$vstsCommandString"
+  name: OutputVersion
+  displayName: Set container name
+  env:
+    ob_restore_phase: ${{ parameters.restorePhase }}
diff --git a/.pipelines/templates/release-SetTagAndChangelog.yml b/.pipelines/templates/release-SetTagAndChangelog.yml
new file mode 100644
index 00000000000..b33e652b3c7
--- /dev/null
+++ b/.pipelines/templates/release-SetTagAndChangelog.yml
@@ -0,0 +1,51 @@
+jobs:
+- job: setTagAndChangelog
+  displayName: Set Tag and Upload Changelog
+  condition: succeeded()
+  pool:
+    type: windows
+  variables:
+  - group: 'mscodehub-code-read-akv'
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  steps:
+  - template: release-SetReleaseTagandContainerName.yml@self
+
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true
+
+  - pwsh: |
+      Write-Verbose -Verbose "Release Tag: $(OutputReleaseTag.releaseTag)"
+      $releaseVersion = '$(OutputReleaseTag.releaseTag)' -replace '^v',''
+      Write-Verbose -Verbose "Release Version: $releaseVersion"
+      $semanticVersion = [System.Management.Automation.SemanticVersion]$releaseVersion
+
+      $isPreview = $semanticVersion.PreReleaseLabel -ne $null
+
+      $fileName = if ($isPreview) {
+        "preview.md"
+      }
+      else {
+        $semanticVersion.Major.ToString() + "." + $semanticVersion.Minor.ToString() + ".md"
+      }
+
+      $filePath = "$(Build.SourcesDirectory)/PowerShell/CHANGELOG/$fileName"
+      Write-Verbose -Verbose "Selected Log file: $filePath"
+
+      if (-not (Test-Path -Path $filePath)) {
+        Write-Error "Changelog file not found: $filePath"
+        exit 1
+      }
+      
+      Write-Verbose -Verbose "Creating output directory for CHANGELOG: $(ob_outputDirectory)/CHANGELOG"
+      New-Item -Path $(ob_outputDirectory)/CHANGELOG -ItemType Directory -Force
+      Copy-Item -Path $filePath -Destination $(ob_outputDirectory)/CHANGELOG
+    displayName: Upload Changelog
+
+  - template: channelSelection.yml@self
diff --git a/.pipelines/templates/release-github.yml b/.pipelines/templates/release-github.yml
new file mode 100644
index 00000000000..424367fbf21
--- /dev/null
+++ b/.pipelines/templates/release-github.yml
@@ -0,0 +1,173 @@
+parameters:
+  - name: skipPublish
+    type: boolean
+
+jobs:
+- job: GithubReleaseDraft
+  displayName: Create GitHub Release Draft
+  condition: succeeded()
+  pool:
+    type: release
+    os: windows
+  templateContext:
+    inputs:
+      - input: pipelineArtifact
+        artifactName: drop_setReleaseTagAndChangelog_SetTagAndChangelog
+      - input: pipelineArtifact
+        pipeline: PSPackagesOfficial
+        artifactName: drop_upload_upload_packages
+  variables:
+    - template: ./variables/release-shared.yml@self
+      parameters:
+        RELEASETAG: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['OutputReleaseTag.releaseTag'] ]
+
+  steps:
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        Write-Verbose -Verbose "Release Tag: $(ReleaseTag)"
+        Get-ChildItem Env: | Out-String -Stream | Write-Verbose -Verbose
+    displayName: 'Capture Environment Variables'
+
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        $Path = "$(Pipeline.Workspace)/GitHubPackages"
+
+        # The .exe packages are for Windows Update only and should not be uploaded to GitHub release.
+        $exefiles = Get-ChildItem -Path $Path -Filter *.exe
+        if ($exefiles) {
+            Write-Verbose -Verbose "Remove .exe packages:"
+            $exefiles | Remove-Item -Force -Verbose
+        }
+
+        # The .msi packages should not be uploaded to GitHub release.
+        $msifiles = Get-ChildItem -Path $Path -Filter *.msi
+        if ($msifiles) {
+            Write-Verbose -Verbose "Remove .msi packages:"
+            $msifiles | Remove-Item -Force -Verbose
+        }
+
+        $OutputPath = Join-Path $Path 'hashes.sha256'
+        $packages  = Get-ChildItem -Path $Path -Include * -Recurse -File
+        $checksums = $packages |
+            ForEach-Object {
+                Write-Verbose -Verbose "Generating checksum file for $($_.FullName)"
+                $packageName = $_.Name
+                $hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash.ToLower()
+                # the '*' before the packagename signifies it is a binary
+                "$hash *$packageName"
+            }
+        $checksums | Out-File -FilePath $OutputPath -Force
+        $fileContent = Get-Content -Path $OutputPath -Raw | Out-String
+        Write-Verbose -Verbose -Message $fileContent
+    displayName: Add sha256 hashes
+  
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        Get-ChildItem $(Pipeline.Workspace) -recurse | Select-Object -ExpandProperty FullName
+    displayName: List all files in the workspace
+
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        $releaseVersion = '$(ReleaseTag)' -replace '^v',''
+        Write-Verbose -Verbose "Available modules: "
+        Get-Module | Write-Verbose -Verbose
+
+        $filePath = Get-ChildItem -Path "$(Pipeline.Workspace)/CHANGELOG" -Filter '*.md' | Select-Object -First 1 -ExpandProperty FullName
+  
+        if (-not (Test-Path $filePath)) {
+          throw "$filePath not found"
+        }
+  
+        $changelog = Get-Content -Path $filePath
+  
+        $headingPattern = "^## \[\d+\.\d+\.\d+"
+        $headingStartLines = @($changelog | Select-String -Pattern $headingPattern | Select-Object -ExpandProperty LineNumber)
+
+        if ($headingStartLines.Count -eq 0) {
+            throw "No release heading matching '$headingPattern' found in $filePath"
+        }
+
+        $startLine = $headingStartLines[0]
+        if ($headingStartLines.Count -ge 2) {
+            $endLine = $headingStartLines[1] - 1
+        } else {
+            # Only one release heading present; take through end of file.
+            $endLine = $changelog.Count
+        }
+
+        $clContent = $changelog | Select-Object -Skip ($startLine-1) -First ($endLine - $startLine + 1) | Out-String
+
+        $StringBuilder = [System.Text.StringBuilder]::new($clContent, $clContent.Length + 2kb)
+        $StringBuilder.AppendLine().AppendLine() > $null
+        $StringBuilder.AppendLine("### SHA256 Hashes of the release artifacts").AppendLine() > $null
+        Get-ChildItem -Path "$(Pipeline.Workspace)/GitHubPackages/" -File | ForEach-Object {
+            $PackageName = $_.Name
+            $SHA256 = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
+            $StringBuilder.AppendLine("- $PackageName").AppendLine("  - $SHA256") > $null
+        }
+
+        $clContent = $StringBuilder.ToString()
+  
+        Write-Verbose -Verbose "Selected content: `n$clContent"
+
+        $releaseNotesFilePath = "$(Pipeline.Workspace)/release-notes.md"
+        $clContent | Out-File -FilePath $releaseNotesFilePath -Encoding utf8
+  
+        Write-Host "##vso[task.setvariable variable=ReleaseNotesFilePath;]$releaseNotesFilePath"
+  
+        #if name has prelease then make prerelease true as a variable
+        if ($releaseVersion -like '*-*') {
+            Write-Host "##vso[task.setvariable variable=IsPreRelease;]true"
+        } else {
+            Write-Host "##vso[task.setvariable variable=IsPreRelease;]false"
+        }
+    displayName: Set variables for GitHub release task
+
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        Write-Host "ReleaseNotes content:"
+        Get-Content "$(Pipeline.Workspace)/release-notes.md" -Raw | Out-String -width 9999 | Write-Host
+    displayName: Verify Release Notes
+
+  - task: PowerShell@2
+    inputs:
+      targetType: inline
+      script: |
+        $middleURL = ''
+        $tagString = "$(ReleaseTag)"
+        Write-Verbose -Verbose "Use the following command to push the tag:"
+        if ($tagString -match '-preview') {
+          $middleURL = "preview"
+        }
+        elseif ($tagString -match '(\d+\.\d+)') {
+          $middleURL = $matches[1]
+        }
+        $endURL = $tagString -replace '^v|\.', ''
+        $message = "https://github.com/PowerShell/PowerShell/blob/master/CHANGELOG/$middleURL.md#$endURL"
+        Write-Verbose -Verbose "git tag -a $(ReleaseTag) $env:BUILD_SOURCEVERSION -m $message"
+    displayName: Git Push Tag Command
+
+  - task: GitHubRelease@1
+    inputs:
+      gitHubConnection: GitHubReleasePAT
+      repositoryName: PowerShell/PowerShell
+      target: master
+      assets: '$(Pipeline.Workspace)/GitHubPackages/*'
+      tagSource: 'userSpecifiedTag'
+      tag: '$(ReleaseTag)'
+      title: "$(ReleaseTag) Release of PowerShell"
+      isDraft: true
+      addChangeLog: false
+      action: 'create'
+      releaseNotesFilePath: '$(ReleaseNotesFilePath)'
+      isPrerelease: '$(IsPreRelease)'
diff --git a/.pipelines/templates/release-prep-for-ev2.yml b/.pipelines/templates/release-prep-for-ev2.yml
new file mode 100644
index 00000000000..ec6ea5ec1e9
--- /dev/null
+++ b/.pipelines/templates/release-prep-for-ev2.yml
@@ -0,0 +1,220 @@
+parameters:
+- name: skipPublish
+  type: boolean
+  default: false
+
+stages:
+- stage: PrepForEV2
+  displayName: 'Copy and prep all files needed for EV2 stage'
+  jobs:
+  - job: CopyEV2FilesToArtifact
+    displayName: 'Copy EV2 Files to Artifact'
+    pool:
+      type: linux
+    templateContext:
+      inputs:
+        - input: pipelineArtifact
+          pipeline: PSPackagesOfficial
+          artifactName: drop_linux_package_deb
+        - input: pipelineArtifact
+          pipeline: PSPackagesOfficial
+          artifactName: drop_linux_package_deb_arm64
+        - input: pipelineArtifact
+          pipeline: PSPackagesOfficial
+          artifactName: drop_linux_package_rpm
+        - input: pipelineArtifact
+          pipeline: PSPackagesOfficial
+          artifactName: drop_linux_package_mariner_x64
+        - input: pipelineArtifact
+          pipeline: PSPackagesOfficial
+          artifactName: drop_linux_package_mariner_arm64
+    variables:
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: repoRoot
+      value: '$(Build.SourcesDirectory)/PowerShell'
+    - name: ev2ServiceGroupRootFolder
+      value: '$(Build.SourcesDirectory)/PowerShell/.pipelines/EV2Specs/ServiceGroupRoot'
+    - name: ev2ParametersFolder
+      value: '$(Build.SourcesDirectory)/PowerShell/.pipelines/EV2Specs/ServiceGroupRoot/Parameters'
+    - group: 'mscodehub-code-read-akv'
+    - group: 'packages.microsoft.com'
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)/PowerShell/.config/suppress.json
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)/PowerShell/.config/tsaoptions.json
+    steps:
+    - checkout: self ## the global setting on lfs didn't work
+      lfs: false
+      env:
+        ob_restore_phase: true
+
+    - template: release-SetReleaseTagandContainerName.yml
+      parameters:
+        restorePhase: true
+
+    - pwsh: |
+        $packageVersion = '$(OutputReleaseTag.ReleaseTag)'.ToLowerInvariant() -replace '^v',''
+        $vstsCommandString = "vso[task.setvariable variable=packageVersion]$packageVersion"
+        Write-Host "sending " + $vstsCommandString
+        Write-Host "##$vstsCommandString"
+      displayName: Set Package version
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        Get-ChildItem Env: | Out-String -Stream | write-Verbose -Verbose
+      displayName: 'Capture Environment Variables'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        Get-ChildItem '$(Build.SourcesDirectory)'
+      displayName: 'Capture BuildDirectory'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        Get-ChildItem '$(Pipeline.Workspace)' -Recurse | Out-String -Stream | write-Verbose -Verbose
+      displayName: 'Capture Workspace'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        New-Item -Path '$(ev2ParametersFolder)' -ItemType Directory
+      displayName: 'Create Parameters folder under EV2Specs folder'
+      env:
+        ob_restore_phase: true
+
+    - task: PipAuthenticate@1
+      inputs:
+        artifactFeeds: 'PowerShellCore/PowerShellCore_PublicPackages'
+      displayName: 'Pip Authenticate'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        python3 -m pip install --upgrade pip
+        pip --version --verbose
+
+        Write-Verbose -Verbose "Download pmc-cli to folder without installing it"
+        $pythonDlFolderPath = Join-Path '$(ev2ServiceGroupRootFolder)/Shell/Run' -ChildPath "python_dl"
+        pip download -d $pythonDlFolderPath pmc-cli --platform=manylinux_2_17_x86_64 --only-binary=:all: --verbose
+      displayName: 'Download pmc-cli package'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        Write-Verbose -Verbose "Copy ESRP signed .deb and .rpm packages"
+        # templateContext.inputs places the PSPackagesOfficial pipelineArtifact files
+        # directly under $(Pipeline.Workspace), not in per-artifact subfolders.
+        $downloadedPipelineFolder = '$(Pipeline.Workspace)'
+        $srcFilesFolder = Join-Path -Path '$(Pipeline.Workspace)' -ChildPath 'SourceFiles'
+        New-Item -Path $srcFilesFolder -ItemType Directory
+        $packagesFolder = Join-Path -Path $srcFilesFolder -ChildPath 'packages'
+        New-Item -Path $packagesFolder -ItemType Directory
+
+        $packageFiles = Get-ChildItem -Path $downloadedPipelineFolder -File | Where-Object { $_.Extension -in '.deb', '.rpm' }
+        foreach ($file in $packageFiles)
+        {
+          Write-Verbose -Verbose "copying file: $($file.FullName)"
+          Copy-Item -Path $($file.FullName) -Destination $packagesFolder -Verbose
+        }
+
+        $packagesTarGzDestination = Join-Path -Path '$(ev2ParametersFolder)' -ChildPath 'packages.tar.gz'
+        tar -czvf $packagesTarGzDestination -C $packagesFolder .
+      displayName: 'Copy signed .deb and .rpm packages to .tar.gz to pass as a file var to shell extension'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        $pathToPMCMetadataFile = Join-Path -Path '$(ev2ParametersFolder)' -ChildPath 'pmcMetadata.json'
+
+        $metadata = Get-Content -Path "$(repoRoot)/tools/metadata.json" -Raw | ConvertFrom-Json
+        $metadataHash = @{}
+        $skipPublishValue = '${{ parameters.skipPublish }}'
+        $metadataHash["ReleaseTag"] = '$(OutputReleaseTag.ReleaseTag)'
+        $metadataHash["LTS"] = $metadata.LTSRelease.PublishToChannels
+        $metadataHash["ForProduction"] = $true
+        $metadataHash["SkipPublish"] = [System.Convert]::ToBoolean($skipPublishValue)
+
+        $metadataHash | ConvertTo-Json | Out-File $pathToPMCMetadataFile
+
+        $mappingFilePath = Join-Path -Path '$(repoRoot)/tools/packages.microsoft.com' -ChildPath 'mapping.json'
+        $mappingFilePathExists = Test-Path $mappingFilePath
+        $mappingFileEV2Path = Join-Path -Path '$(ev2ParametersFolder)' -ChildPath "mapping.json"
+        Write-Verbose -Verbose "Copy mapping.json file at: $mappingFilePath which exists: $mappingFilePathExists to: $mappingFileEV2Path"
+        Copy-Item -Path $mappingFilePath -Destination $mappingFileEV2Path
+      displayName: 'Create pmcScriptMetadata.json and mapping.json file'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        $pathToJsonFile = Join-Path -Path '$(ev2ServiceGroupRootFolder)' -ChildPath 'RolloutSpec.json'
+        $content = Get-Content -Path $pathToJsonFile | ConvertFrom-Json
+        $content.RolloutMetadata.Notification.Email.To = '$(PmcEV2SupportEmail)'
+        Remove-Item -Path $pathToJsonFile
+        $content | ConvertTo-Json -Depth 4 | Out-File $pathToJsonFile
+      displayName: 'Replace values in RolloutSpecPath.json'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        $pathToJsonFile = Join-Path -Path '$(ev2ServiceGroupRootFolder)' -ChildPath 'UploadLinux.Rollout.json'
+        $content = Get-Content -Path $pathToJsonFile | ConvertFrom-Json
+
+        $identityString = "/subscriptions/$(PmcSubscription)/resourcegroups/$(PmcResourceGroup)/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$(PmcMIName)"
+        $content.shellExtensions.launch.identity.userAssignedIdentities[0] = $identityString
+
+        Remove-Item -Path $pathToJsonFile
+        $content | ConvertTo-Json -Depth 6 | Out-File $pathToJsonFile
+      displayName: 'Replace values in UploadLinux.Rollout.json file'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        $pathToJsonFile = Join-Path -Path '$(ev2ServiceGroupRootFolder)' -ChildPath 'ServiceModel.json'
+        $content = Get-Content -Path $pathToJsonFile | ConvertFrom-Json
+        $content.ServiceResourceGroups[0].AzureResourceGroupName = '$(PmcResourceGroup)'
+        $content.ServiceResourceGroups[0].AzureSubscriptionId = '$(PmcSubscription)'
+
+        Remove-Item -Path $pathToJsonFile
+        $content | ConvertTo-Json -Depth 9 | Out-File $pathToJsonFile
+      displayName: 'Replace values in ServiceModel.json'
+      env:
+        ob_restore_phase: true
+
+    - pwsh: |
+        $settingFilePath = Join-Path '$(ev2ServiceGroupRootFolder)/Shell/Run' -ChildPath 'settings.toml'
+        New-Item -Path $settingFilePath -ItemType File
+        $pmcMIClientID = '$(PmcMIClientID)'
+        $pmcEndpoint = '$(PmcEndpointUrl)'
+
+        Add-Content -Path $settingFilePath -Value "[default]"
+        Add-Content -Path $settingFilePath -Value "base_url = `"$pmcEndpoint`""
+        Add-Content -Path $settingFilePath -Value "auth_type = `"msi`""
+        Add-Content -Path $settingFilePath -Value "client_id = `"$pmcMIClientID`""
+      displayName: 'Create settings.toml file with MI clientId populated'
+      env:
+        ob_restore_phase: true
+
+    - task: onebranch.pipeline.signing@1
+      inputs:
+        command: 'sign'
+        signing_profile: external_distribution
+        files_to_sign: '*.ps1'
+        search_root: '$(repoRoot)/.pipelines/EV2Specs/ServiceGroupRoot/Shell/Run'
+      displayName: Sign Run.ps1
+
+    - pwsh: |
+        # folder to tar must have: Run.ps1, settings.toml, python_dl
+        $srcPath = Join-Path '$(ev2ServiceGroupRootFolder)' -ChildPath 'Shell'
+        $pathToRunTarFile = Join-Path $srcPath -ChildPath "Run.tar"
+        tar -cvf $pathToRunTarFile -C $srcPath ./Run
+      displayName: 'Create archive for the shell extension'
+
+    - task: CopyFiles@2
+      inputs:
+        SourceFolder: '$(repoRoot)/.pipelines'
+        Contents: 'EV2Specs/**'
+        TargetFolder: $(ob_outputDirectory)
diff --git a/.pipelines/templates/release-publish-pmc.yml b/.pipelines/templates/release-publish-pmc.yml
new file mode 100644
index 00000000000..dc7fc8534e3
--- /dev/null
+++ b/.pipelines/templates/release-publish-pmc.yml
@@ -0,0 +1,56 @@
+parameters:
+- name: releaseEnvironment
+  type: string
+  default: Production
+  values:
+    - Production
+    - PPE
+    - Test
+- name: approvalServiceEnvironment
+  type: string
+  default: Production
+  values:
+    - Production
+    - PPE
+    - Test
+# OneBranch requires the stage name to be prefixed with the release environment.
+# Official uses 'Prod' for Production; NonProd validators require '<env>' (e.g. 'Test', 'PPE').
+- name: stagePrefix
+  type: string
+  default: Prod
+# When true, the Ev2 push step is skipped. Useful for NonOfficial dry-runs that
+# only want to validate artifact download via templateContext.inputs.
+- name: skipEv2Push
+  type: boolean
+  default: false
+
+stages:
+- stage: ${{ parameters.stagePrefix }}_Release
+  displayName: 'Deploy packages to PMC with EV2'
+  dependsOn:
+  - PrepForEV2
+  variables:
+    - name: ob_release_environment
+      value: ${{ parameters.releaseEnvironment }}
+    - name: repoRoot
+      value: $(Build.SourcesDirectory)
+  jobs:
+  - job: ${{ parameters.stagePrefix }}_ReleaseJob
+    displayName: Publish to PMC
+    pool:
+      type: release
+    templateContext:
+      inputs:
+        - input: pipelineArtifact
+          artifactName: drop_PrepForEV2_CopyEv2FilesToArtifact
+
+    steps:
+    - ${{ if not(parameters.skipEv2Push) }}:
+      - task: vsrm-ev2.vss-services-ev2.adm-release-task.ExpressV2Internal@1
+        displayName: 'Ev2: Push to PMC'
+        inputs:
+          UseServerMonitorTask: true
+          EndpointProviderType: ApprovalService
+          ApprovalServiceEnvironment: ${{ parameters.approvalServiceEnvironment }}
+          ServiceRootPath: '$(Pipeline.Workspace)/EV2Specs/ServiceGroupRoot'
+          RolloutSpecPath: '$(Pipeline.Workspace)/EV2Specs/ServiceGroupRoot/RolloutSpec.json'
diff --git a/.pipelines/templates/release-symbols.yml b/.pipelines/templates/release-symbols.yml
new file mode 100644
index 00000000000..a628f4d7127
--- /dev/null
+++ b/.pipelines/templates/release-symbols.yml
@@ -0,0 +1,89 @@
+parameters:
+  - name: skipPublish
+    default: false
+    type: boolean
+
+jobs:
+- job: PublishSymbols
+  displayName: Publish Symbols
+  condition: succeeded()
+  pool:
+    type: windows
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: release-SetReleaseTagandContainerName.yml
+
+  - pwsh: |
+      Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: 'Capture Environment Variables'
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_x64_release
+    patterns: 'symbols.zip'
+    displayName: Download winx64
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_x86_release
+    patterns: 'symbols.zip'
+    displayName: Download winx86
+
+  - download: CoOrdinatedBuildPipeline
+    artifact: drop_windows_build_windows_arm64_release
+    patterns: 'symbols.zip'
+    displayName: Download winx64
+
+  - pwsh: |
+      Write-Verbose -Verbose "Enumerating $(Pipeline.Workspace)\CoOrdinatedBuildPipeline"
+      $downloadedArtifacts = Get-ChildItem -Path "$(Pipeline.Workspace)\CoOrdinatedBuildPipeline" -Recurse -Filter 'symbols.zip'
+      $downloadedArtifacts
+      $expandedRoot = New-Item -Path "$(Pipeline.Workspace)/expanded" -ItemType Directory -Verbose
+      $symbolsRoot = New-Item -Path "$(Pipeline.Workspace)/symbols" -ItemType Directory -Verbose
+
+      $downloadedArtifacts | ForEach-Object {
+        $folderName = (Get-Item (Split-Path $_.FullName)).Name
+        Write-Verbose -Verbose "Expanding $($_.FullName) to $expandedRoot/$folderName/$($_.BaseName)"
+        $destFolder = New-Item -Path "$expandedRoot/$folderName/$($_.BaseName)/" -ItemType Directory -Verbose
+        Expand-Archive -Path $_.FullName -DestinationPath $destFolder -Force
+
+        $symbolsToPublish = New-Item -Path "$symbolsRoot/$folderName/$($_.BaseName)" -ItemType Directory -Verbose
+
+        Get-ChildItem -Path $destFolder -Recurse -Filter '*.pdb' | ForEach-Object {
+          Copy-Item -Path $_.FullName -Destination $symbolsToPublish -Verbose
+        }
+      }
+
+      Write-Verbose -Verbose "Enumerating $symbolsRoot"
+      Get-ChildItem -Path $symbolsRoot -Recurse
+      $vstsCommandString = "vso[task.setvariable variable=SymbolsPath]$symbolsRoot"
+      Write-Verbose -Message "$vstsCommandString" -Verbose
+      Write-Host -Object "##$vstsCommandString"
+    displayName: Expand and capture symbols folders
+
+  - task: PublishSymbols@2
+    inputs:
+      symbolsFolder: '$(SymbolsPath)'
+      searchPattern: '**/*.pdb'
+      indexSources: false
+      publishSymbols: true
+      symbolServerType: teamServices
+      detailedLog: true
diff --git a/.pipelines/templates/release-upload-buildinfo.yml b/.pipelines/templates/release-upload-buildinfo.yml
new file mode 100644
index 00000000000..9e3d6a6accb
--- /dev/null
+++ b/.pipelines/templates/release-upload-buildinfo.yml
@@ -0,0 +1,164 @@
+parameters:
+  - name: skipPublish
+    default: false
+    type: boolean
+
+jobs:
+- job: BuildInfoPublish
+  displayName: Publish BuildInfo
+  condition: succeeded()
+  pool:
+    name: PowerShell1ES
+    type: windows
+    isCustom: true
+    demands:
+    - ImageOverride -equals PSMMS2019-Secure
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - group: 'Azure Blob variable group'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: release-SetReleaseTagandContainerName.yml
+
+  - pwsh: |
+      Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: 'Capture Environment Variables'
+
+  - download: PSPackagesOfficial
+    artifact: BuildInfoJson
+    displayName: Download build info artifact
+
+  - pwsh: |
+      $toolsDirectory = '$(Build.SourcesDirectory)/tools'
+      Import-Module "$toolsDirectory/ci.psm1"
+      $jsonFile = Get-Item "$ENV:PIPELINE_WORKSPACE/PSPackagesOfficial/BuildInfoJson/*.json"
+      $fileName = Split-Path $jsonFile -Leaf
+      # The build itself has already determined if it is preview or stable/LTS,
+      # we just need to check via the file name
+      $isPreview = $fileName -eq "preview.json"
+      $isStable = $fileName -eq "stable.json"
+
+      $dateTime = [datetime]::UtcNow
+      $dateTime = [datetime]::new($dateTime.Ticks - ($dateTime.Ticks % [timespan]::TicksPerSecond), $dateTime.Kind)
+
+      $metadata = Get-Content -LiteralPath "$toolsDirectory/metadata.json" -ErrorAction Stop | ConvertFrom-Json
+      # Note: version tags in metadata.json (e.g. StableReleaseTag) may not reflect the current release being
+      # published, so they must not be used to gate channel decisions. Use the explicit publish flags instead.
+      $stableRelease = $metadata.StableRelease.PublishToChannels
+      $ltsRelease = $metadata.LTSRelease.PublishToChannels
+
+      Write-Verbose -Verbose "Writing $jsonFile contents:"
+      $buildInfoJsonContent = Get-Content $jsonFile -Encoding UTF8NoBom -Raw
+      Write-Verbose -Verbose $buildInfoJsonContent
+
+      $buildInfo =  $buildInfoJsonContent | ConvertFrom-Json
+      $buildInfo.ReleaseDate = $dateTime
+      $currentReleaseTag = $buildInfo.ReleaseTag -Replace 'v',''
+
+      $targetFile = "$ENV:PIPELINE_WORKSPACE/$fileName"
+      ConvertTo-Json -InputObject $buildInfo | Out-File $targetFile -Encoding ascii
+
+      if ($isPreview) {
+        Set-BuildVariable -Name UploadPreview -Value YES
+      } else {
+        Set-BuildVariable -Name UploadPreview -Value NO
+      }
+
+      Set-BuildVariable -Name PreviewBuildInfoFile -Value $targetFile
+
+      ## Create 'lts.json' if marked as a LTS release.
+      if ($isStable) {
+        if ($ltsRelease) {
+          $ltsFile = "$ENV:PIPELINE_WORKSPACE/lts.json"
+          Copy-Item -Path $targetFile -Destination $ltsFile -Force
+          Set-BuildVariable -Name LTSBuildInfoFile -Value $ltsFile
+          Set-BuildVariable -Name UploadLTS -Value YES
+        } else {
+          Set-BuildVariable -Name UploadLTS -Value NO
+        }
+
+        ## Gate stable.json upload on the metadata publish flag.
+        if ($stableRelease) {
+          Set-BuildVariable -Name StableBuildInfoFile -Value $targetFile
+          Set-BuildVariable -Name UploadStable -Value YES
+        } else {
+          Set-BuildVariable -Name UploadStable -Value NO
+        }
+
+        ## Always publish the version-specific {Major}-{Minor}.json for non-preview builds.
+        [System.Management.Automation.SemanticVersion] $currentVersion = $currentReleaseTag
+        $versionFile = "$ENV:PIPELINE_WORKSPACE/$($currentVersion.Major)-$($currentVersion.Minor).json"
+        Copy-Item -Path $targetFile -Destination $versionFile -Force
+        Set-BuildVariable -Name VersionSpecificBuildInfoFile -Value $versionFile
+        Set-BuildVariable -Name UploadVersionSpecific -Value YES
+
+      } else {
+        Set-BuildVariable -Name UploadStable -Value NO
+        Set-BuildVariable -Name UploadVersionSpecific -Value NO
+      }
+    displayName: Create json files
+
+  - task: AzurePowerShell@5
+    displayName: Upload buildjson to blob
+    inputs:
+      azureSubscription: az-blob-cicd-infra
+      scriptType: inlineScript
+      azurePowerShellVersion: LatestVersion
+      pwsh: true
+      inline: |
+        $containerName = '$web'
+        $storageAccount = '$(PSInfraStorageAccount)'
+        $prefix = "buildinfo"
+
+        $storageContext = New-AzStorageContext -StorageAccountName $storageAccount -UseConnectedAccount
+
+        #preview
+        if ($env:UploadPreview -eq 'YES') {
+          $jsonFile = "$env:PreviewBuildInfoFile"
+          $blobName = Get-Item $jsonFile | Split-Path -Leaf
+          Write-Verbose -Verbose "Uploading $jsonFile to $containerName/$prefix/$blobName"
+          Set-AzStorageBlobContent -File $jsonFile -Container $containerName -Blob "$prefix/$blobName" -Context $storageContext -Force
+        }
+
+        #LTS
+        if ($env:UploadLTS -eq 'YES') {
+          $jsonFile = "$env:LTSBuildInfoFile"
+          $blobName = Get-Item $jsonFile | Split-Path -Leaf
+          Write-Verbose -Verbose "Uploading $jsonFile to $containerName/$prefix/$blobName"
+          Set-AzStorageBlobContent -File $jsonFile -Container $containerName -Blob "$prefix/$blobName" -Context $storageContext -Force
+        }
+
+        #stable
+        if ($env:UploadStable -eq 'YES') {
+          $jsonFile = "$env:StableBuildInfoFile"
+          $blobName = Get-Item $jsonFile | Split-Path -Leaf
+          Write-Verbose -Verbose "Uploading $jsonFile to $containerName/$prefix/$blobName"
+          Set-AzStorageBlobContent -File $jsonFile -Container $containerName -Blob "$prefix/$blobName" -Context $storageContext -Force
+        }
+
+        #version-specific
+        if ($env:UploadVersionSpecific -eq 'YES') {
+          $jsonFile = "$env:VersionSpecificBuildInfoFile"
+          $blobName = Get-Item $jsonFile | Split-Path -Leaf
+          Write-Verbose -Verbose "Uploading $jsonFile to $containerName/$prefix/$blobName"
+          Set-AzStorageBlobContent -File $jsonFile -Container $containerName -Blob "$prefix/$blobName" -Context $storageContext -Force
+        }
+    condition: and(succeeded(), or(eq(variables['UploadPreview'], 'YES'), eq(variables['UploadLTS'], 'YES'), eq(variables['UploadStable'], 'YES'), eq(variables['UploadVersionSpecific'], 'YES')))
diff --git a/.pipelines/templates/release-validate-fxdpackages.yml b/.pipelines/templates/release-validate-fxdpackages.yml
new file mode 100644
index 00000000000..3f4f9a3bb6c
--- /dev/null
+++ b/.pipelines/templates/release-validate-fxdpackages.yml
@@ -0,0 +1,118 @@
+parameters:
+  - name: jobName
+    type: string
+    default: ""
+  - name: displayName
+    type: string
+    default: ""
+  - name: jobtype
+    type: string
+    default: ""
+  - name: artifactName
+    type: string
+    default: ""
+  - name: packageNamePattern
+    type: string
+    default: ""
+  - name: arm64
+    type: string
+    default: "no"
+  - name: enableCredScan
+    type: boolean
+    default: true
+
+jobs:
+- job: ${{ parameters.jobName }}
+  displayName: ${{ parameters.displayName }}
+  variables:
+  - group: DotNetPrivateBuildAccess
+  - name: artifactName
+    value: ${{ parameters.artifactName }}
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_enabled
+    value: ${{ parameters.enableCredScan }}
+
+  pool:
+    type: ${{ parameters.jobtype }}
+    ${{ if eq(parameters.arm64, 'yes') }}:
+      hostArchitecture: arm64
+
+  steps:
+    - checkout: self
+      clean: true
+
+    - template: release-SetReleaseTagandContainerName.yml@self
+
+    - download: PSPackagesOfficial
+      artifact: "${{ parameters.artifactName }}"
+      displayName: Download fxd artifact
+
+    - pwsh: |
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: Capture environment
+
+    - pwsh: |
+        $artifactName = '$(artifactName)'
+        Get-ChildItem "$(Pipeline.Workspace)/PSPackagesOfficial/$artifactName" -Recurse
+      displayName: 'Capture Downloaded Artifacts'
+
+    - template: /.pipelines/templates/install-dotnet.yml@self
+
+    - pwsh: |
+        $artifactName = '$(artifactName)'
+        $rootPath = "$(Pipeline.Workspace)/PSPackagesOfficial/$artifactName"
+
+        $destPath = New-Item "$rootPath/fxd" -ItemType Directory
+        $packageNameFilter = '${{ parameters.packageNamePattern }}'
+
+        if ($packageNameFilter.EndsWith('tar.gz')) {
+            $package = @(Get-ChildItem -Path "$rootPath/*.tar.gz")
+            Write-Verbose -Verbose "Package: $package"
+            if ($package.Count -ne 1) {
+                throw 'Only 1 package was expected.'
+            }
+            tar -xvf $package.FullName -C $destPath
+        }
+        else {
+            $package = @(Get-ChildItem -Path "$rootPath/*.zip")
+            Write-Verbose -Verbose "Package: $package"
+            if ($package.Count -ne 1) {
+                throw 'Only 1 package was expected.'
+            }
+            Expand-Archive -Path $package.FullName -Destination "$destPath" -Verbose
+        }
+      displayName: Expand fxd package
+
+    - pwsh: |
+        $repoRoot = "$(Build.SourcesDirectory)/PowerShell"
+        $artifactName = '$(artifactName)'
+        $rootPath = "$(Pipeline.Workspace)/PSPackagesOfficial/$artifactName"
+
+        $env:DOTNET_NOLOGO=1
+        Import-Module "$repoRoot/build.psm1" -Force
+        Find-Dotnet -SetDotnetRoot
+        Write-Verbose -Verbose "DOTNET_ROOT: $env:DOTNET_ROOT"
+        Write-Verbose -Verbose "Check dotnet install"
+        dotnet --info
+        Write-Verbose -Verbose "Start test"
+        $packageNameFilter = '${{ parameters.packageNamePattern }}'
+        $pwshExeName = if ($packageNameFilter.EndsWith('tar.gz')) { 'pwsh' } else { 'pwsh.exe' }
+        $pwshPath = Join-Path "$rootPath/fxd" $pwshExeName
+
+        if ($IsLinux) {
+          chmod u+x $pwshPath
+        }
+
+        $pwshDllPath = Join-Path "$rootPath/fxd" 'pwsh.dll'
+
+        $actualOutput = & dotnet $pwshDllPath -c 'Start-ThreadJob -ScriptBlock { "1" } | Wait-Job | Receive-Job'
+        Write-Verbose -Verbose "Actual output: $actualOutput"
+        if ($actualOutput -ne 1) {
+            throw "Actual output is not as expected"
+        }
+      displayName: Test package
diff --git a/.pipelines/templates/release-validate-globaltools.yml b/.pipelines/templates/release-validate-globaltools.yml
new file mode 100644
index 00000000000..8c2031d5cc9
--- /dev/null
+++ b/.pipelines/templates/release-validate-globaltools.yml
@@ -0,0 +1,127 @@
+parameters:
+  jobName: ""
+  displayName: ""
+  jobtype: "windows"
+  globalToolExeName: 'pwsh.exe'
+  globalToolPackageName: 'PowerShell.Windows.x64'
+
+
+jobs:
+- job: ${{ parameters.jobName }}
+  displayName: ${{ parameters.displayName }}
+  pool:
+    type: ${{ parameters.jobtype }}
+  variables:
+    - group: DotNetPrivateBuildAccess
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+
+  steps:
+    - checkout: self
+      clean: true
+
+    - template: release-SetReleaseTagandContainerName.yml@self
+
+    - download: PSPackagesOfficial
+      artifact: drop_nupkg_build_nupkg
+      displayName: Download nupkgs
+
+    - pwsh: |
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: Capture environment
+
+    - pwsh: |
+        Get-ChildItem "$(Pipeline.Workspace)/PSPackagesOfficial/drop_nupkg_build_nupkg" -Recurse
+      displayName: 'Capture Downloaded Artifacts'
+
+    - template: /.pipelines/templates/install-dotnet.yml@self
+
+    - pwsh: |
+        $repoRoot = "$(Build.SourcesDirectory)/PowerShell"
+
+        Import-Module "$repoRoot/build.psm1" -Force -Verbose
+        Start-PSBootstrap -Scenario Dotnet
+
+        $toolPath = New-Item -ItemType Directory "$(System.DefaultWorkingDirectory)/toolPath" | Select-Object -ExpandProperty FullName
+
+        Write-Verbose -Verbose "dotnet tool list -g"
+        dotnet tool list -g
+
+        $packageName = '${{ parameters.globalToolPackageName }}'
+        Write-Verbose -Verbose "Installing $packageName"
+
+        dotnet tool install --add-source "$ENV:PIPELINE_WORKSPACE/PSPackagesOfficial/drop_nupkg_build_nupkg" --tool-path $toolPath --version '$(OutputVersion.Version)' $packageName
+
+        Get-ChildItem -Path $toolPath
+
+      displayName: Install global tool
+      env:
+        __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+    - pwsh: |
+        $toolPath = "$(System.DefaultWorkingDirectory)/toolPath/${{ parameters.globalToolExeName }}"
+
+        if (-not (Test-Path $toolPath))
+        {
+            throw "Tool is not installed at $toolPath"
+        }
+        else
+        {
+            Write-Verbose -Verbose "Tool found at: $toolPath"
+        }
+      displayName: Validate tool is installed
+
+    - pwsh: |
+        $repoRoot = "$(Build.SourcesDirectory)/PowerShell"
+
+        Import-Module "$repoRoot/build.psm1" -Force -Verbose
+        Start-PSBootstrap -Scenario Dotnet
+
+        $exeName = if ($IsWindows) { "pwsh.exe" } else { "pwsh" }
+
+        $toolPath = "$(System.DefaultWorkingDirectory)/toolPath/${{ parameters.globalToolExeName }}"
+
+        $source = (get-command -Type Application -Name dotnet | Select-Object -First 1 -ExpandProperty source)
+        $target = (Get-ChildItem $source).target
+
+        # If we find a symbolic link for dotnet, then we need to split the filename off the target.
+        if ($target) {
+          Write-Verbose -Verbose "Splitting target: $target"
+          $target = Split-Path $target
+        }
+
+        Write-Verbose -Verbose "target is set as $target"
+
+        $env:DOTNET_ROOT = (resolve-path -Path (Join-Path (split-path $source) $target)).ProviderPath
+
+        Write-Verbose -Verbose "DOTNET_ROOT: $env:DOTNET_ROOT"
+        Get-ChildItem $env:DOTNET_ROOT
+
+        $versionFound = & $toolPath -c '$PSVersionTable.PSVersion.ToString()'
+
+        if ( '$(OutputVersion.Version)' -ne $versionFound)
+        {
+            throw "Expected version of global tool not found. Installed version is $versionFound"
+        }
+        else
+        {
+            write-verbose -verbose "Found expected version: $versionFound"
+        }
+
+        $dateYear = & $toolPath -c '(Get-Date).Year'
+
+        if ( $dateYear -ne [DateTime]::Now.Year)
+        {
+            throw "Get-Date returned incorrect year: $dateYear"
+        }
+        else
+        {
+            write-verbose -verbose "Got expected year: $dateYear"
+        }
+      displayName: Basic validation
+      env:
+        __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
diff --git a/.pipelines/templates/release-validate-packagenames.yml b/.pipelines/templates/release-validate-packagenames.yml
new file mode 100644
index 00000000000..5953366ffd7
--- /dev/null
+++ b/.pipelines/templates/release-validate-packagenames.yml
@@ -0,0 +1,184 @@
+jobs:
+- job: validatePackageNames
+  displayName: Validate Package Names
+  pool:
+    type: windows
+  variables:
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - group: 'Azure Blob variable group'
+
+  steps:
+  - checkout: self
+    clean: true
+
+  - template: release-SetReleaseTagandContainerName.yml
+
+  - pwsh: |
+       Get-ChildItem ENV: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture environment
+
+  - pwsh: |
+      $name = "{0}_{1:x}" -f '$(OutputReleaseTag.releaseTag)', (Get-Date).Ticks
+      Write-Host $name
+      Write-Host "##vso[build.updatebuildnumber]$name"
+    displayName: Set Release Name
+
+  - task: AzurePowerShell@5
+    displayName: Upload packages to blob
+    inputs:
+      azureSubscription: az-blob-cicd-infra
+      scriptType: inlineScript
+      azurePowerShellVersion: LatestVersion
+      pwsh: true
+      inline: |
+        $storageAccount = Get-AzStorageAccount -ResourceGroupName '$(StorageResourceGroup)' -Name '$(StorageAccount)'
+        $ctx = $storageAccount.Context
+        $container = '$(OutputVersion.AzureVersion)'
+
+        $destinationPath = '$(System.ArtifactsDirectory)'
+        $blobList = Get-AzStorageBlob -Container $container -Context $ctx
+        foreach ($blob in $blobList) {
+          $blobName = $blob.Name
+          $destinationFile = Join-Path -Path $destinationPath -ChildPath $blobName
+          Get-AzStorageBlobContent -Container $container -Blob $blobName -Destination $destinationFile -Context $ctx -Force
+          Write-Output "Downloaded $blobName to $destinationFile"
+        }
+
+  - pwsh: |
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name
+    displayName: Capture Artifact Listing
+
+  - pwsh: |
+      $message = @()
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -filter *.rpm | ForEach-Object {
+          if($_.Name -notmatch 'powershell\-(preview-|lts-)?\d+\.\d+\.\d+(_[a-z]*\.\d+)?-1.(rh|cm).(x86_64|aarch64)\.rpm')
+          {
+              $messageInstance = "$($_.Name) is not a valid package name"
+              $message += $messageInstance
+              Write-Warning $messageInstance
+          }
+      }
+      if($message.count -gt 0){throw ($message | out-string)}
+    displayName: Validate RPM package names
+
+  - pwsh: |
+      $message = @()
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -filter *.tar.gz | ForEach-Object {
+          if($_.Name -notmatch 'powershell-(lts-)?\d+\.\d+\.\d+\-([a-z]*.\d+\-)?(linux|osx|linux-musl)+\-(x64\-fxdependent|x64|arm32|arm64|x64\-musl-noopt\-fxdependent)\.(tar\.gz)')
+          {
+              $messageInstance = "$($_.Name) is not a valid package name"
+              $message += $messageInstance
+              Write-Warning $messageInstance
+          }
+      }
+      if($message.count -gt 0){throw ($message | out-string)}
+    displayName: Validate Tar.Gz Package Names
+
+  - pwsh: |
+      $message = @()
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -filter *.pkg | ForEach-Object {
+          if($_.Name -notmatch 'powershell-(lts-)?\d+\.\d+\.\d+\-([a-z]*.\d+\-)?osx\-(x64|arm64)\.pkg')
+          {
+              $messageInstance = "$($_.Name) is not a valid package name"
+              $message += $messageInstance
+              Write-Warning $messageInstance
+          }
+      }
+      if($message.count -gt 0){throw ($message | out-string)}
+    displayName: Validate PKG Package Names
+
+  - pwsh: |
+      $message = @()
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -include *.zip | ForEach-Object {
+          if($_.Name -notmatch 'PowerShell-\d+\.\d+\.\d+\-([a-z]*.\d+\-)?win\-(fxdependent|x64|arm64|x86|fxdependentWinDesktop)\.(zip){1}')
+          {
+              $messageInstance = "$($_.Name) is not a valid package name"
+              $message += $messageInstance
+              Write-Warning $messageInstance
+          }
+      }
+
+      if($message.count -gt 0){throw ($message | out-string)}
+    displayName: Validate Zip Package Names
+
+  - pwsh: |
+      $message = @()
+      Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -filter *.deb | ForEach-Object {
+          if($_.Name -notmatch 'powershell(-preview|-lts)?_\d+\.\d+\.\d+([\-~][a-z]*.\d+)?-\d\.deb_(amd64|arm64)\.deb')
+          {
+              $messageInstance = "$($_.Name) is not a valid package name"
+              $message += $messageInstance
+              Write-Warning $messageInstance
+          }
+      }
+      if($message.count -gt 0){throw ($message | out-string)}
+    displayName: Validate Deb Package Names
+
+# Move to 1ES SBOM validation tool
+# - job: validateBOM
+#   displayName: Validate Package Names
+#   pool:
+#     type: windows
+#   variables:
+#     - name: ob_outputDirectory
+#       value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+#     - name: ob_sdl_credscan_suppressionsFile
+#       value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+#     - name: ob_sdl_tsa_configFile
+#       value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+#     - group: 'Azure Blob variable group'
+
+#   steps:
+#   - checkout: self
+#     clean: true
+
+#   - pwsh: |
+#       Get-ChildItem ENV: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+#     displayName: Capture environment
+
+#   - template: release-SetReleaseTagAndContainerName.yml
+
+#   - pwsh: |
+#       $name = "{0}_{1:x}" -f '$(releaseTag)', (Get-Date).Ticks
+#       Write-Host $name
+#       Write-Host "##vso[build.updatebuildnumber]$name"
+#     displayName: Set Release Name
+
+#   - task: DownloadPipelineArtifact@2
+#     inputs:
+#       source: specific
+#       project: PowerShellCore
+#       pipeline: '696'
+#       preferTriggeringPipeline: true
+#       runVersion: latestFromBranch
+#       runBranch: '$(Build.SourceBranch)'
+#       artifact: finalResults
+#       path: $(System.ArtifactsDirectory)
+
+
+#   - pwsh: |
+#       Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name
+#     displayName: Capture Artifact Listing
+
+#   - pwsh: |
+#       Install-module Pester -Scope CurrentUser -Force -MaximumVersion 4.99
+#     displayName: Install Pester
+#     condition: succeededOrFailed()
+
+#   - pwsh: |
+#       Import-module './build.psm1'
+#       Import-module './tools/packaging'
+#       $env:PACKAGE_FOLDER = '$(System.ArtifactsDirectory)'
+#       $path = Join-Path -Path $pwd -ChildPath './packageReleaseTests.xml'
+#       $results = invoke-pester -Script './tools/packaging/releaseTests' -OutputFile $path -OutputFormat NUnitXml -PassThru
+#       Write-Host "##vso[results.publish type=NUnit;mergeResults=true;runTitle=Package Release Tests;publishRunAttachments=true;resultFiles=$path;]"
+#       if($results.TotalCount -eq 0 -or $results.FailedCount -gt 0)
+#       {
+#         throw "Package Release Tests failed"
+#       }
+#     displayName: Run packaging release tests
diff --git a/.pipelines/templates/release-validate-sdk.yml b/.pipelines/templates/release-validate-sdk.yml
new file mode 100644
index 00000000000..3b0442f65d6
--- /dev/null
+++ b/.pipelines/templates/release-validate-sdk.yml
@@ -0,0 +1,98 @@
+parameters:
+  jobName: ""
+  displayName: ""
+  poolName: "windows"
+  imageName: 'none'
+
+jobs:
+- job: ${{ parameters.jobName }}
+  displayName: ${{ parameters.displayName }}
+  pool:
+    type: linux
+    isCustom: true
+    ${{ if eq( parameters.poolName, 'Azure Pipelines') }}:
+      name: ${{ parameters.poolName }}
+      vmImage: ${{ parameters.imageName }}
+    ${{ else }}:
+      name: ${{ parameters.poolName }}
+      demands:
+        - ImageOverride -equals ${{ parameters.imageName }}
+
+  variables:
+  - group: mscodehub-feed-read-general
+  - group: mscodehub-feed-read-akv
+  - group: DotNetPrivateBuildAccess
+
+  steps:
+    - checkout: self
+      clean: true
+      lfs: false
+
+    - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+      parameters:
+        repoRoot: "$(Build.SourcesDirectory)"
+
+    - template: release-SetReleaseTagandContainerName.yml@self
+
+    - download: PSPackagesOfficial
+      artifact: drop_nupkg_build_nupkg
+      displayName: Download nupkgs
+
+    - pwsh: |
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: Capture environment
+
+    - pwsh: |
+        Get-ChildItem "$(Pipeline.Workspace)/PSPackagesOfficial/drop_nupkg_build_nupkg" -Recurse
+      displayName: 'Capture Downloaded Artifacts'
+
+    - template: /.pipelines/templates/install-dotnet.yml@self
+
+    - pwsh: |
+        $repoRoot = "$(Build.SourcesDirectory)"
+
+        Import-Module "$repoRoot/build.psm1" -Force -Verbose
+        Start-PSBootstrap -Scenario Dotnet
+
+        $env:DOTNET_NOLOGO=1
+
+        $localLocation = "$(Pipeline.Workspace)/PSPackagesOfficial/drop_nupkg_build_nupkg"
+        $xmlElement = @"
+          <add key=`"local`" value=`"$localLocation`" />
+          <add key="dotnet" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v2" />
+        </packageSources>
+        "@
+
+        $releaseVersion = '$(OutputVersion.Version)'
+
+        Write-Verbose -Message "Release Version: $releaseVersion" -Verbose
+
+        Set-Location -Path $repoRoot/test/hosting
+
+        Get-ChildItem
+
+        ## register the packages download directory in the nuget file
+        $nugetPath = './NuGet.Config'
+        if(!(test-path $nugetPath)) {
+          $nugetPath = "$repoRoot/nuget.config"
+        }
+        Write-Verbose -Verbose "nugetPath: $nugetPath"
+        $nugetConfigContent = Get-Content $nugetPath -Raw
+        $updateNugetContent = $nugetConfigContent.Replace("</packageSources>", $xmlElement)
+
+        $updateNugetContent | Out-File $nugetPath -Encoding ascii
+
+        Get-Content $nugetPath
+
+        dotnet --info
+        dotnet restore
+        dotnet test /property:RELEASE_VERSION=$releaseVersion --test-adapter-path:. "--logger:xunit;LogFilePath=$(System.DefaultWorkingDirectory)/test-hosting.xml"
+      displayName: Restore and execute tests
+      env:
+        __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+
+    - task: PublishTestResults@2
+      displayName: 'Publish Test Results **\test-hosting.xml'
+      inputs:
+        testResultsFormat: XUnit
+        testResultsFiles: '**\test-hosting.xml'
diff --git a/.pipelines/templates/set-reporoot.yml b/.pipelines/templates/set-reporoot.yml
new file mode 100644
index 00000000000..af7983afaa1
--- /dev/null
+++ b/.pipelines/templates/set-reporoot.yml
@@ -0,0 +1,35 @@
+parameters:
+- name: ob_restore_phase
+  type: boolean
+  default: true
+
+steps:
+- pwsh: |
+    $path = "./build.psm1"
+    if($env:REPOROOT){
+      Write-Verbose "reporoot already set to ${env:REPOROOT}" -Verbose
+      exit 0
+    }
+    if(Test-Path -Path $path)
+    {
+      Write-Verbose "reporoot detected at: ." -Verbose
+      $repoRoot = '.'
+    }
+    else{
+      $path = "./PowerShell/build.psm1"
+      if(Test-Path -Path $path)
+      {
+        Write-Verbose "reporoot detected at: ./PowerShell" -Verbose
+        $repoRoot = './PowerShell'
+      }
+    }
+    if($repoRoot) {
+      $vstsCommandString = "vso[task.setvariable variable=repoRoot]$repoRoot"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    } else {
+      Write-Verbose -Verbose "repo not found"
+    }
+  displayName: 'Set repo Root'
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
diff --git a/.pipelines/templates/shouldSign.yml b/.pipelines/templates/shouldSign.yml
new file mode 100644
index 00000000000..f3701acbc97
--- /dev/null
+++ b/.pipelines/templates/shouldSign.yml
@@ -0,0 +1,30 @@
+parameters:
+- name: ob_restore_phase
+  type: boolean
+  default: true
+
+steps:
+- powershell: |
+    $shouldSign = $true
+    $authenticodeCert = '$(authenticode_cert_id)'
+    $msixCert = '$(authenticode_cert_id)'
+    if($env:IS_DAILY -eq 'true')
+    {
+      $authenticodeCert = '$(authenticode_test_cert_id)'
+    }
+    if($env:SKIP_SIGNING -eq 'Yes')
+    {
+      $shouldSign = $false
+    }
+    $vstsCommandString = "vso[task.setvariable variable=SHOULD_SIGN]$($shouldSign.ToString().ToLowerInvariant())"
+    Write-Host "sending " + $vstsCommandString
+    Write-Host "##$vstsCommandString"
+    $vstsCommandString = "vso[task.setvariable variable=MSIX_CERT]$($msixCert)"
+    Write-Host "sending " + $vstsCommandString
+    Write-Host "##$vstsCommandString"
+    $vstsCommandString = "vso[task.setvariable variable=AUTHENTICODE_CERT]$($authenticodeCert)"
+    Write-Host "sending " + $vstsCommandString
+    Write-Host "##$vstsCommandString"
+  displayName: 'Set SHOULD_SIGN Variable'
+  env:
+    ob_restore_phase: ${{ parameters.ob_restore_phase }}
diff --git a/.pipelines/templates/stages/PowerShell-Coordinated_Packages-Stages.yml b/.pipelines/templates/stages/PowerShell-Coordinated_Packages-Stages.yml
new file mode 100644
index 00000000000..bf0e5441269
--- /dev/null
+++ b/.pipelines/templates/stages/PowerShell-Coordinated_Packages-Stages.yml
@@ -0,0 +1,213 @@
+parameters:
+  - name: RUN_WINDOWS
+    type: boolean
+    default: true
+  - name: RUN_TEST_AND_RELEASE
+    type: boolean
+    default: true
+  - name: OfficialBuild
+    type: boolean
+
+stages:
+- stage: prep
+  jobs:
+  - job: SetVars
+    displayName: Set Variables
+    pool:
+      type: linux
+
+    variables:
+      - name: ob_outputDirectory
+        value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT/BuildJson'
+      - name: ob_sdl_codeSignValidation_enabled
+        value: false
+      - name: ob_sdl_codeql_compiled_enabled
+        value: false
+      - name: ob_sdl_credscan_suppressionsFile
+        value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+      - name: ob_sdl_tsa_configFile
+        value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+      - name: ob_signing_setup_enabled
+        value: false
+      - name: ob_sdl_sbom_enabled
+        value: false
+
+    steps:
+    - checkout: self
+      clean: true
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - pwsh: |
+        Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+      displayName: Capture environment variables
+      env:
+        ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+    - template: /.pipelines/templates/SetVersionVariables.yml@self
+      parameters:
+        ReleaseTagVar: $(ReleaseTagVar)
+        CreateJson: yes
+
+- stage: macos
+  displayName: macOS - build and sign
+  dependsOn: ['prep']
+  variables:
+    - name: ps_official_build
+      value: ${{ parameters.OfficialBuild }}
+  jobs:
+  - template: /.pipelines/templates/mac.yml@self
+    parameters:
+      buildArchitecture: x64
+  - template: /.pipelines/templates/mac.yml@self
+    parameters:
+      buildArchitecture: arm64
+
+- stage: linux
+  displayName: linux - build and sign
+  dependsOn: ['prep']
+  variables:
+    - name: ps_official_build
+      value: ${{ parameters.OfficialBuild }}
+  jobs:
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-x64'
+      JobName: 'linux_x64'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-x64'
+      JobName: 'linux_x64_minSize'
+      BuildConfiguration: 'minSize'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-arm64'
+      JobName: 'linux_arm64_minSize'
+      BuildConfiguration: 'minSize'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-arm'
+      JobName: 'linux_arm'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-arm64'
+      JobName: 'linux_arm64'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'fxdependent-linux-x64'
+      JobName: 'linux_fxd_x64_mariner'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'fxdependent-linux-arm64'
+      JobName: 'linux_fxd_arm64_mariner'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'fxdependent-noopt-linux-musl-x64'
+      JobName: 'linux_fxd_x64_alpine'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'fxdependent'
+      JobName: 'linux_fxd'
+
+  - template: /.pipelines/templates/linux.yml@self
+    parameters:
+      Runtime: 'linux-musl-x64'
+      JobName: 'linux_x64_alpine'
+
+- stage: windows
+  displayName: windows - build and sign
+  dependsOn: ['prep']
+  condition: and(succeeded(),eq('${{ parameters.RUN_WINDOWS }}','true'))
+  variables:
+    - name: ps_official_build
+      value: ${{ parameters.OfficialBuild }}
+  jobs:
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: x64
+      BuildConfiguration: release
+      JobName: build_windows_x64_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: x64
+      BuildConfiguration: minSize
+      JobName: build_windows_x64_minSize_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: arm64
+      BuildConfiguration: minSize
+      JobName: build_windows_arm64_minSize_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: x86
+      JobName: build_windows_x86_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: arm64
+      JobName: build_windows_arm64_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: fxdependent
+      JobName: build_windows_fxdependent_release
+  - template: /.pipelines/templates/windows-hosted-build.yml@self
+    parameters:
+      Architecture: fxdependentWinDesktop
+      JobName: build_windows_fxdependentWinDesktop_release
+
+- stage: test_and_release_artifacts
+  displayName: Test and Release Artifacts
+  dependsOn: ['prep']
+  condition: and(succeeded(),eq('${{ parameters.RUN_TEST_AND_RELEASE }}','true'))
+  jobs:
+  - template: /.pipelines/templates/testartifacts.yml@self
+
+  - job: release_json
+    displayName: Create and Upload release.json
+    pool:
+      type: windows
+    variables:
+    - name: ob_outputDirectory
+      value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+    - name: ob_sdl_tsa_configFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+    - name: ob_sdl_credscan_suppressionsFile
+      value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+    steps:
+    - checkout: self
+      clean: true
+    - template: /.pipelines/templates/SetVersionVariables.yml@self
+      parameters:
+        ReleaseTagVar: $(ReleaseTagVar)
+    - template: /.pipelines/templates/rebuild-branch-check.yml@self
+    - powershell: |
+        $metadata = Get-Content '$(Build.SourcesDirectory)/PowerShell/tools/metadata.json' -Raw | ConvertFrom-Json
+
+        # Use the rebuild branch check from the template
+        $isRebuildBranch = '$(RebuildBranchCheck.IsRebuildBranch)' -eq 'true'
+
+        # Don't mark as LTS release for rebuild branches
+        $LTS = $metadata.LTSRelease.Package -and -not $isRebuildBranch
+
+        if ($isRebuildBranch) {
+          Write-Verbose -Message "Rebuild branch detected, not marking as LTS release" -Verbose
+        }
+
+        @{ ReleaseVersion = "$(Version)"; LTSRelease = $LTS } | ConvertTo-Json | Out-File "$(Build.StagingDirectory)\release.json"
+        Get-Content "$(Build.StagingDirectory)\release.json"
+
+        if (-not (Test-Path "$(ob_outputDirectory)\metadata")) {
+          New-Item -ItemType Directory -Path "$(ob_outputDirectory)\metadata"
+        }
+
+        Copy-Item -Path "$(Build.StagingDirectory)\release.json" -Destination "$(ob_outputDirectory)\metadata" -Force
+      displayName: Create and upload release.json file to build artifact
+      retryCountOnTaskFailure: 2
+    - template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.pipelines/templates/stages/PowerShell-Packages-Stages.yml b/.pipelines/templates/stages/PowerShell-Packages-Stages.yml
new file mode 100644
index 00000000000..507fd42cc95
--- /dev/null
+++ b/.pipelines/templates/stages/PowerShell-Packages-Stages.yml
@@ -0,0 +1,212 @@
+parameters:
+  - name: OfficialBuild
+    type: boolean
+
+stages:
+- stage: prep
+  displayName: 'Prep BuildInfo+Az'
+  jobs:
+  - template: /.pipelines/templates/checkAzureContainer.yml@self
+
+- stage: mac_package
+  displayName: 'macOS Pkg+Sign'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/mac-package-build.yml@self
+    parameters:
+      buildArchitecture: x64
+
+  - template: /.pipelines/templates/mac-package-build.yml@self
+    parameters:
+      buildArchitecture: arm64
+
+- stage: windows_package_build
+  displayName: 'Win Pkg (unsigned)'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: x64
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: arm64
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: x86
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: fxdependent
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: fxdependentWinDesktop
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: x64_minsize
+
+  - template: /.pipelines/templates/packaging/windows/package.yml@self
+    parameters:
+      runtime: arm64_minsize
+
+- stage: windows_package_sign
+  displayName: 'Win Pkg Sign'
+  dependsOn: [windows_package_build]
+  jobs:
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: x64
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: arm64
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: x86
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: fxdependent
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: fxdependentWinDesktop
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: x64_minsize
+
+  - template: /.pipelines/templates/packaging/windows/sign.yml@self
+    parameters:
+      runtime: arm64_minsize
+
+- stage: linux_package
+  displayName: 'Linux Pkg+Sign'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_x64'
+      signedDrop: 'drop_linux_sign_linux_x64'
+      packageType: deb
+      jobName: deb
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_arm64'
+      signedDrop: 'drop_linux_sign_linux_arm64'
+      packageType: deb-arm64
+      jobName: deb_arm64
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_fxd_x64_mariner'
+      signedDrop: 'drop_linux_sign_linux_fxd_x64_mariner'
+      packageType: rpm-fxdependent  #mariner-x64
+      jobName: mariner_x64
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_fxd_arm64_mariner'
+      signedDrop: 'drop_linux_sign_linux_fxd_arm64_mariner'
+      packageType: rpm-fxdependent-arm64 #mariner-arm64
+      jobName: mariner_arm64
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_x64'
+      signedDrop: 'drop_linux_sign_linux_x64'
+      packageType: rpm
+      jobName: rpm
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_arm'
+      signedDrop: 'drop_linux_sign_linux_arm'
+      packageType: tar-arm
+      jobName: tar_arm
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_arm64'
+      signedDrop: 'drop_linux_sign_linux_arm64'
+      packageType: tar-arm64
+      jobName: tar_arm64
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_x64_alpine'
+      signedDrop: 'drop_linux_sign_linux_x64_alpine'
+      packageType: tar-alpine
+      jobName: tar_alpine
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_fxd'
+      signedDrop: 'drop_linux_sign_linux_fxd'
+      packageType: fxdependent
+      jobName: fxdependent
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_x64'
+      signedDrop: 'drop_linux_sign_linux_x64'
+      packageType: tar
+      jobName: tar
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_fxd_x64_alpine'
+      signedDrop: 'drop_linux_sign_linux_fxd_x64_alpine'
+      packageType: tar-alpine-fxdependent
+      jobName: tar_alpine_fxd
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_x64_minSize'
+      signedDrop: 'drop_linux_sign_linux_x64_minSize'
+      packageType: min-size-x64
+      jobName: minSize_x64
+
+  - template: /.pipelines/templates/linux-package-build.yml@self
+    parameters:
+      unsignedDrop: 'drop_linux_build_linux_arm64_minSize'
+      signedDrop: 'drop_linux_sign_linux_arm64_minSize'
+      packageType: min-size-arm64
+      jobName: minSize_arm64
+
+- stage: nupkg
+  displayName: 'NuGet Pkg+Sign'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/nupkg.yml@self
+
+- stage: msixbundle
+  displayName: 'MSIX Bundle+Sign'
+  dependsOn: [windows_package_build]  # Only depends on unsigned packages
+  jobs:
+  - template: /.pipelines/templates/package-create-msix.yml@self
+    parameters:
+      OfficialBuild: ${{ parameters.OfficialBuild }}
+
+- stage: store_package
+  displayName: 'Store Package'
+  dependsOn: [msixbundle]
+  jobs:
+  - template: /.pipelines/templates/package-store-package.yml@self
+
+- stage: upload
+  displayName: 'Upload'
+  dependsOn: [prep, mac_package, windows_package_sign, linux_package, nupkg, msixbundle]  # prep needed for BuildInfo JSON
+  jobs:
+  - template: /.pipelines/templates/uploadToAzure.yml@self
+
+- stage: validatePackages
+  displayName: 'Validate Packages'
+  dependsOn: [upload]
+  jobs:
+  - template: /.pipelines/templates/release-validate-packagenames.yml@self
diff --git a/.pipelines/templates/stages/PowerShell-Release-Stages.yml b/.pipelines/templates/stages/PowerShell-Release-Stages.yml
new file mode 100644
index 00000000000..d55463c4b07
--- /dev/null
+++ b/.pipelines/templates/stages/PowerShell-Release-Stages.yml
@@ -0,0 +1,329 @@
+parameters:
+  - name: releaseEnvironment
+    type: string
+  - name: SkipPublish
+    type: boolean
+  - name: SkipPSInfraInstallers
+    type: boolean
+  - name: skipMSIXPublish
+    type: boolean
+
+stages:
+- stage: setReleaseTagAndChangelog
+  displayName: 'Set Release Tag and Upload Changelog'
+  jobs:
+  - template: /.pipelines/templates/release-SetTagAndChangelog.yml@self
+
+- stage: validateSdk
+  displayName: 'Validate SDK'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/release-validate-sdk.yml@self
+    parameters:
+      jobName: "windowsSDK"
+      displayName: "Windows SDK Validation"
+      imageName: PSMMS2019-Secure
+      poolName: $(windowsPool)
+
+  - template: /.pipelines/templates/release-validate-sdk.yml@self
+    parameters:
+      jobName: "MacOSSDK"
+      displayName: "MacOS SDK Validation"
+      imageName: macOS-latest
+      poolName: Azure Pipelines
+
+  - template: /.pipelines/templates/release-validate-sdk.yml@self
+    parameters:
+      jobName: "LinuxSDK"
+      displayName: "Linux SDK Validation"
+      imageName: PSMMSUbuntu22.04-Secure
+      poolName: $(ubuntuPool)
+
+- stage: gbltool
+  displayName: 'Validate Global tools'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/release-validate-globaltools.yml@self
+    parameters:
+      jobName: "WindowsGlobalTools"
+      displayName: "Windows Global Tools Validation"
+      jobtype: windows
+
+  - template: /.pipelines/templates/release-validate-globaltools.yml@self
+    parameters:
+      jobName: "LinuxGlobalTools"
+      displayName: "Linux Global Tools Validation"
+      jobtype: linux
+      globalToolExeName: 'pwsh'
+      globalToolPackageName: 'PowerShell.Linux.x64'
+
+- stage: fxdpackages
+  displayName: 'Validate FXD Packages'
+  dependsOn: []
+  jobs:
+  - template: /.pipelines/templates/release-validate-fxdpackages.yml@self
+    parameters:
+      jobName: 'winfxd'
+      displayName: 'Validate Win Fxd Packages'
+      jobtype: 'windows'
+      artifactName: 'drop_windows_package_package_win_fxdependent'
+      packageNamePattern: '**/*win-fxdependent.zip'
+
+  - template: /.pipelines/templates/release-validate-fxdpackages.yml@self
+    parameters:
+      jobName: 'winfxdDesktop'
+      displayName: 'Validate WinDesktop Fxd Packages'
+      jobtype: 'windows'
+      artifactName: 'drop_windows_package_package_win_fxdependentWinDesktop'
+      packageNamePattern: '**/*win-fxdependentwinDesktop.zip'
+
+  - template: /.pipelines/templates/release-validate-fxdpackages.yml@self
+    parameters:
+      jobName: 'linuxfxd'
+      displayName: 'Validate Linux Fxd Packages'
+      jobtype: 'linux'
+      artifactName: 'drop_linux_package_fxdependent'
+      packageNamePattern: '**/*linux-x64-fxdependent.tar.gz'
+
+  - template: /.pipelines/templates/release-validate-fxdpackages.yml@self
+    parameters:
+      jobName: 'linuxArm64fxd'
+      displayName: 'Validate Linux ARM64 Fxd Packages'
+      jobtype: 'linux'
+      artifactName: 'drop_linux_package_fxdependent'
+      # this is really an architecture independent package
+      packageNamePattern: '**/*linux-x64-fxdependent.tar.gz'
+      arm64: 'yes'
+      enableCredScan: false
+
+- stage: ManualValidation
+  dependsOn: []
+  displayName: Manual Validation
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Validate OSX Packages
+      jobName: ValidateOsxPkg
+      instructions: |
+        Validate tar.gz package on osx-arm64
+
+- stage: ReleaseAutomation
+  dependsOn: []
+  displayName: 'Release Automation'
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Start Release Automation
+      jobName: StartRA
+      instructions: |
+        Kick off Release automation build at: https://dev.azure.com/powershell-rel/Release-Automation/_build?definitionId=10&_a=summary
+
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Triage results
+      jobName: TriageRA
+      dependsOnJob: StartRA
+      instructions: |
+        Triage ReleaseAutomation results
+
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Signoff Tests
+      dependsOnJob: TriageRA
+      jobName: SignoffTests
+      instructions: |
+        Signoff ReleaseAutomation results
+
+- stage: UpdateChangeLog
+  displayName: Update the changelog
+  dependsOn:
+    - ManualValidation
+    - ReleaseAutomation
+    - fxdpackages
+    - gbltool
+    - validateSdk
+
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Make sure the changelog is updated
+      jobName: MergeChangeLog
+      instructions: |
+        Update and merge the changelog for the release.
+        This step is required for creating GitHub draft release.
+
+- stage: PublishGitHubRelease
+  displayName: Publish GitHub
+  dependsOn:
+    - setReleaseTagAndChangelog
+    - UpdateChangeLog
+  variables:
+    ob_release_environment: ${{ parameters.releaseEnvironment }}
+  jobs:
+  - template: /.pipelines/templates/release-github.yml@self
+    parameters:
+      skipPublish: ${{ parameters.SkipPublish }}
+
+- stage: PushGitTagAndMakeDraftPublic
+  displayName: Push Git Tag and Make Draft Public
+  dependsOn: PublishGitHubRelease
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Push Git Tag
+      jobName: PushGitTag
+      instructions: |
+        Push the git tag to upstream
+
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Make Draft Public
+      dependsOnJob: PushGitTag
+      jobName: DraftPublic
+      instructions: |
+        Make the GitHub Release Draft Public
+
+- stage: PublishNugetRelease
+  displayName: Publish Nuget Release
+  dependsOn:
+    - setReleaseTagAndChangelog
+    - PushGitTagAndMakeDraftPublic
+    - UpdateChangeLog
+  variables:
+    ob_release_environment: ${{ parameters.releaseEnvironment }}
+  jobs:
+  - template: /.pipelines/templates/release-Nuget.yml@self
+    parameters:
+      skipPublish: ${{ parameters.SkipPublish }}
+
+- stage: BlobPublic
+  displayName: Make Blob Public
+  dependsOn:
+    - UpdateChangeLog
+    - PushGitTagAndMakeDraftPublic
+  jobs:
+  - template: /.pipelines/templates/release-MakeBlobPublic.yml@self
+    parameters:
+      SkipPSInfraInstallers: ${{ parameters.SkipPSInfraInstallers }}
+
+- stage: PublishPMC
+  displayName: Publish PMC
+  dependsOn: PushGitTagAndMakeDraftPublic
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Publish to PMC
+      jobName: ReleaseToPMC
+      instructions: |
+        Run PowerShell-Release-Official-Azure.yml pipeline to publish to PMC
+
+- stage: UpdateDotnetDocker
+  dependsOn: PushGitTagAndMakeDraftPublic
+  displayName: Update DotNet SDK Docker images
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Update .NET SDK docker images
+      jobName: DotnetDocker
+      instructions: |
+        Create PR for updating dotnet-docker images to use latest PowerShell version.
+        1. Fork and clone https://github.com/dotnet/dotnet-docker.git
+        2. git checkout upstream/nightly -b updatePS
+        3. dotnet run --project .\eng\update-dependencies\ specific <dotnetversion> --product-version powershell=<powershellversion> --compute-shas
+        4. create PR targeting nightly branch
+
+- stage: UpdateWinGet
+  dependsOn: PushGitTagAndMakeDraftPublic
+  displayName: Add manifest entry to winget
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Add manifest entry to winget
+      jobName: UpdateWinGet
+      instructions: |
+        This is typically done by the community 1-2 days after the release.
+
+- stage: PublishMsix
+  dependsOn:
+    - setReleaseTagAndChangelog
+    - PushGitTagAndMakeDraftPublic
+  displayName: Publish MSIX to store
+  variables:
+    ob_release_environment: ${{ parameters.releaseEnvironment }}
+  jobs:
+  - template: /.pipelines/templates/release-MSIX-Publish.yml@self
+    parameters:
+      skipMSIXPublish: ${{ parameters.skipMSIXPublish }}
+
+- stage: PublishVPack
+  dependsOn: PushGitTagAndMakeDraftPublic
+  displayName: Release vPack
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Start 2 vPack Release pipelines
+      jobName: PublishVPack
+      instructions: |
+        1. Kick off PowerShell-vPack-Official pipeline
+        2. Kick off PowerShell-MSIXBundle-VPack pipeline
+
+# Need to verify if the Az PS / CLI team still uses this. Skipping for this release.
+# - stage: ReleaseDeps
+#   dependsOn: GitHubTasks
+#   displayName: Update pwsh.deps.json links
+#   jobs:
+#   - template: templates/release-UpdateDepsJson.yml
+
+- stage: UploadBuildInfoJson
+  dependsOn: PushGitTagAndMakeDraftPublic
+  displayName: Upload BuildInfo.json
+  jobs:
+  - template: /.pipelines/templates/release-upload-buildinfo.yml@self
+
+- stage: ReleaseSymbols
+  dependsOn: PushGitTagAndMakeDraftPublic
+  displayName: Release Symbols
+  jobs:
+  - template: /.pipelines/templates/release-symbols.yml@self
+
+- stage: ChangesToMaster
+  displayName: Ensure changes are in GH master
+  dependsOn:
+    - PublishPMC
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Make sure changes are in master
+      jobName: MergeToMaster
+      instructions: |
+        Make sure that changes README.md and metadata.json are merged into master on GitHub.
+
+- stage: ReleaseToMU
+  displayName: Release to MU
+  dependsOn: PushGitTagAndMakeDraftPublic # This only needs the blob to be available
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Release to MU
+      instructions: |
+        Notify the PM team to start the process of releasing to MU.
+
+- stage: ReleaseClose
+  displayName: Finish Release
+  dependsOn:
+    - ReleaseToMU
+    - ReleaseSymbols
+  jobs:
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Retain Build
+      jobName: RetainBuild
+      instructions: |
+        Retain the build
+
+  - template: /.pipelines/templates/approvalJob.yml@self
+    parameters:
+      displayName: Delete release branch
+      jobName: DeleteBranch
+      instructions: |
+        Delete release branch
diff --git a/.pipelines/templates/stages/PowerShell-vPack-Stages.yml b/.pipelines/templates/stages/PowerShell-vPack-Stages.yml
new file mode 100644
index 00000000000..01a83a5b161
--- /dev/null
+++ b/.pipelines/templates/stages/PowerShell-vPack-Stages.yml
@@ -0,0 +1,236 @@
+parameters:
+  - name: createVPack
+    type: boolean
+  - name: vPackName
+    type: string
+
+stages:
+- stage: BuildStage
+  jobs:
+  - job: BuildJob
+    pool:
+      type: windows
+
+    strategy:
+      matrix:
+        x86:
+          architecture: x86
+
+        x64:
+          architecture: x64
+
+        arm64:
+          architecture: arm64
+
+    variables:
+      ArtifactPlatform: 'windows'
+      ob_artifactBaseName: drop_build_$(architecture)
+      ob_outputDirectory: '$(BUILD.SOURCESDIRECTORY)\out'
+      ob_createvpack_enabled: ${{ parameters.createVPack }}
+      ob_createvpack_owneralias: tplunk
+      ob_createvpack_versionAs: parts
+      ob_createvpack_propsFile: true
+      ob_createvpack_verbose: true
+      ob_createvpack_packagename: '${{ parameters.vPackName }}.$(architecture)'
+      ob_createvpack_description: PowerShell $(architecture) $(version)
+      # I think the variables reload after we transition back to the host so this works. 🤷‍♂️
+      ob_createvpack_majorVer: $(pwshMajorVersion)
+      ob_createvpack_minorVer: $(pwshMinorVersion)
+      ob_createvpack_patchVer: $(pwshPatchVersion)
+      ${{ if ne(variables['pwshPrereleaseVersion'], '') }}:
+        ob_createvpack_prereleaseVer: $(pwshPrereleaseVersion)
+      ${{ else }}:
+        ob_createvpack_prereleaseVer: $(Build.SourceVersion)
+
+    steps:
+      - checkout: self
+        displayName: Checkout source code - during restore
+        clean: true
+        path: s
+        env:
+          ob_restore_phase: true
+
+      - template: /.pipelines/templates/SetVersionVariables.yml@self
+        parameters:
+          ReleaseTagVar: $(ReleaseTagVar)
+          CreateJson: yes
+
+      - pwsh: |
+          $version = '$(Version)'
+          Write-Verbose -Verbose "Version: $version"
+          if(!$version) {
+              throw "Version is not set."
+          }
+
+          $mainVersionParts = $version -split '-'
+
+          Write-Verbose -Verbose "mainVersionParts: $($mainVersionParts[0]) ; $($mainVersionParts[1])"
+          $versionParts =  $mainVersionParts[0] -split '[.]';
+          $major = $versionParts[0]
+          $minor = $versionParts[1]
+          $patch = $versionParts[2]
+
+          $previewPart = $mainVersionParts[1]
+          Write-Verbose -Verbose "previewPart: $previewPart"
+
+          Write-Host "major: $major; minor: $minor; patch: $patch;"
+
+          $vstsCommandString = "vso[task.setvariable variable=pwshMajorVersion]$major"
+          Write-Host ("sending " + $vstsCommandString)
+          Write-Host "##$vstsCommandString"
+
+          $vstsCommandString = "vso[task.setvariable variable=pwshMinorVersion]$minor"
+          Write-Host ("sending " + $vstsCommandString)
+          Write-Host "##$vstsCommandString"
+
+          $vstsCommandString = "vso[task.setvariable variable=pwshPatchVersion]$patch"
+          Write-Host ("sending " + $vstsCommandString)
+          Write-Host "##$vstsCommandString"
+          if($previewPart) {
+            $vstsCommandString = "vso[task.setvariable variable=pwshPrereleaseVersion]$previewPart"
+          } else {
+            Write-Verbose -Verbose "No prerelease part found in version string."
+          }
+        displayName: Set ob_createvpack_*Ver
+        env:
+          ob_restore_phase: true
+
+      # Validate pwsh*Version variables
+      - pwsh: |
+            $variables = @("pwshMajorVersion", "pwshMinorVersion", "pwshPatchVersion")
+            foreach ($var in $variables) {
+                 if (-not (get-item "Env:\$var" -ErrorAction SilentlyContinue).value) {
+                     throw "Required variable '`$env:$var' is not set."
+                 }
+            }
+        displayName: Validate pwsh*Version variables
+        env:
+          ob_restore_phase: true
+
+      - pwsh: |
+          if($env:RELEASETAGVAR -match '-') {
+              throw "Don't release a preview build without coordinating with Windows Engineering Build Tools Team"
+          }
+        displayName: Stop any preview release
+        env:
+          ob_restore_phase: true
+
+      - task: UseDotNet@2
+        displayName: 'Use .NET Core sdk'
+        inputs:
+          packageType: sdk
+          version: 3.1.x
+          installationPath: $(Agent.ToolsDirectory)/dotnet
+
+      ### BUILD ###
+
+      - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+        parameters:
+          repoRoot: $(repoRoot)
+
+      - task: CodeQL3000Init@0 # Add CodeQL Init task right before your 'Build' step.
+        env:
+          ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+        inputs:
+          Enabled: true
+          AnalyzeInPipeline: false # Do not upload results
+          Language: csharp
+
+      - task: UseDotNet@2
+        displayName: 'Install .NET based on global.json'
+        inputs:
+          useGlobalJson: true
+          workingDirectory: $(repoRoot)
+        env:
+          ob_restore_phase: true
+
+      - pwsh: |
+          # Need to set PowerShellRoot variable for obp-file-signing template
+          $vstsCommandString = "vso[task.setvariable variable=PowerShellRoot]$(repoRoot)"
+          Write-Host ("sending " + $vstsCommandString)
+          Write-Host "##$vstsCommandString"
+
+          $Architecture = '$(Architecture)'
+          $runtime = switch ($Architecture)
+            {
+              "x64" { "win7-x64" }
+              "x86" { "win7-x86" }
+              "arm64" { "win-arm64" }
+            }
+
+          $params = @{}
+          if ($env:BuildConfiguration -eq 'minSize') {
+            $params['ForMinimalSize'] = $true
+          }
+
+          $vstsCommandString = "vso[task.setvariable variable=Runtime]$runtime"
+          Write-Host ("sending " + $vstsCommandString)
+          Write-Host "##$vstsCommandString"
+
+          Write-Verbose -Message "Building PowerShell with Runtime: $runtime for '$env:BuildConfiguration' configuration"
+          Import-Module -Name $(repoRoot)/build.psm1 -Force
+          $buildWithSymbolsPath = New-Item -ItemType Directory -Path "$(Pipeline.Workspace)/Symbols_$Architecture" -Force
+
+          Start-PSBootstrap -Scenario Package
+          $null = New-Item -ItemType Directory -Path $buildWithSymbolsPath -Force -Verbose
+
+          $ReleaseTagParam = @{}
+
+          if ($env:RELEASETAGVAR) {
+            $ReleaseTagParam['ReleaseTag'] = $env:RELEASETAGVAR
+          }
+
+          Start-PSBuild -Runtime $runtime -Configuration Release -Output $buildWithSymbolsPath -Clean -PSModuleRestore @params @ReleaseTagParam
+
+          $refFolderPath = Join-Path $buildWithSymbolsPath 'ref'
+          Write-Verbose -Verbose "refFolderPath: $refFolderPath"
+          $outputPath = Join-Path '$(ob_outputDirectory)' 'psoptions'
+          $null = New-Item -ItemType Directory -Path $outputPath -Force
+          $psOptPath = "$outputPath/psoptions.json"
+          Save-PSOptions -PSOptionsPath $psOptPath
+
+          Write-Verbose -Verbose "Completed building PowerShell for '$env:BuildConfiguration' configuration"
+        displayName: Build Windows Universal - $(Architecture) -$(BuildConfiguration) Symbols folder
+        env:
+          __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+          ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+      - task: CodeQL3000Finalize@0 # Add CodeQL Finalize task right after your 'Build' step.
+        env:
+          ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+      - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+        displayName: 'Component Detection'
+        inputs:
+          sourceScanPath: '$(repoRoot)\src'
+          ob_restore_phase: true
+
+      - template: /.pipelines/templates/obp-file-signing.yml@self
+        parameters:
+          binPath: '$(Pipeline.Workspace)/Symbols_$(Architecture)'
+          SigningProfile: $(windows_build_tools_cert_id)
+          OfficialBuild: false
+          vPackScenario: true
+
+      ### END OF BUILD ###
+
+      - pwsh: |
+          Get-ChildItem env:/ob_createvpack_*Ver
+          Get-ChildItem -Path "$(Pipeline.Workspace)\Symbols_$(Architecture)\*" -Recurse
+          Get-Content "$(Pipeline.Workspace)\PowerShell\preview.json" -ErrorAction SilentlyContinue | Write-Host
+        displayName: Debug Output Directory and Version
+        condition: succeededOrFailed()
+
+      - pwsh: |
+          Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+        displayName: Capture Environment
+        condition: succeededOrFailed()
+
+      - pwsh: |
+          $vpackFiles = Get-ChildItem -Path "$(Pipeline.Workspace)\Symbols_$(Architecture)\*" -Recurse
+          if($vpackFiles.Count -eq 0) {
+              throw "No files found in $(Pipeline.Workspace)\Symbols_$(Architecture)"
+          }
+          $vpackFiles
+        displayName: Debug Output Directory and Version
+        condition: succeededOrFailed()
diff --git a/.pipelines/templates/step/finalize.yml b/.pipelines/templates/step/finalize.yml
new file mode 100644
index 00000000000..78e0341c829
--- /dev/null
+++ b/.pipelines/templates/step/finalize.yml
@@ -0,0 +1,6 @@
+# This was used before migrating to OneBranch to deal with one of the SDL taks from failing with a warning instead of an error.
+steps:
+- pwsh: |
+    throw "Jobs with an Issue will not work for release. Please fix the issue and try again."
+  displayName: Check for SucceededWithIssues
+  condition: eq(variables['Agent.JobStatus'],'SucceededWithIssues')
diff --git a/.pipelines/templates/testartifacts.yml b/.pipelines/templates/testartifacts.yml
new file mode 100644
index 00000000000..3a6bec4a859
--- /dev/null
+++ b/.pipelines/templates/testartifacts.yml
@@ -0,0 +1,134 @@
+jobs:
+- job: build_testartifacts_win
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - group: DotNetPrivateBuildAccess
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_codeSignValidation_excludes
+    value: '-|**\*.ps1;-|**\*.psm1;-|**\*.ps1xml;-|**\*.psd1;-|**\*.exe;-|**\*.dll;-|**\*.cdxml'
+
+  displayName: Build windows test artifacts
+  condition: succeeded()
+  pool:
+    type: windows
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(RepoRoot)
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      New-Item -Path '$(ob_outputDirectory)' -ItemType Directory -Force
+      Import-Module $(Build.SourcesDirectory)/PowerShell/build.psm1
+      function BuildTestPackage([string] $runtime)
+      {
+        Write-Verbose -Verbose "Starting to build package for $runtime"
+        New-TestPackage -Destination $(System.ArtifactsDirectory) -Runtime $runtime
+        if (-not (Test-Path $(System.ArtifactsDirectory)/TestPackage.zip))
+        {
+          throw "Test Package was not found at: $(System.ArtifactsDirectory)"
+        }
+        switch ($runtime)
+        {
+          win7-x64 { $packageName = "TestPackage-win-x64.zip" }
+          win7-x86 { $packageName = "TestPackage-win-x86.zip" }
+          win-arm64 { $packageName = "TestPackage-win-arm64.zip" }
+        }
+        Rename-Item $(System.ArtifactsDirectory)/TestPackage.zip $packageName
+        ## Write-Host "##vso[artifact.upload containerfolder=testArtifacts;artifactname=testArtifacts]$(System.ArtifactsDirectory)/$packageName"
+
+        Copy-Item -Path $(System.ArtifactsDirectory)/$packageName -Destination $(ob_outputDirectory) -Force -Verbose
+      }
+      BuildTestPackage -runtime win7-x64
+      BuildTestPackage -runtime win7-x86
+      BuildTestPackage -runtime win-arm64
+    displayName: Build test package and upload
+    retryCountOnTaskFailure: 1
+    env:
+      ob_restore_phase: true
+
+  - pwsh: |
+      Write-Host "This doesn't do anything but make the build phase run."
+    displayName: Dummy build task
+
+
+- job: build_testartifacts_nonwin
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - group: DotNetPrivateBuildAccess
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  displayName: Build non-windows test artifacts
+  condition: succeeded()
+  pool:
+    type: linux
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(Build.SourcesDirectory)/PowerShell
+      ob_restore_phase: true
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      New-Item -Path '$(ob_outputDirectory)' -ItemType Directory -Force
+      Import-Module $(Build.SourcesDirectory)/PowerShell/build.psm1
+      function BuildTestPackage([string] $runtime)
+      {
+        Write-Verbose -Verbose "Starting to build package for $runtime"
+        New-TestPackage -Destination $(System.ArtifactsDirectory) -Runtime $runtime
+        if (-not (Test-Path $(System.ArtifactsDirectory)/TestPackage.zip))
+        {
+          throw "Test Package was not found at: $(System.ArtifactsDirectory)"
+        }
+        switch ($runtime)
+        {
+          linux-x64 { $packageName = "TestPackage-linux-x64.zip" }
+          linux-arm { $packageName = "TestPackage-linux-arm.zip" }
+          linux-arm64 { $packageName = "TestPackage-linux-arm64.zip" }
+          osx-x64 { $packageName = "TestPackage-macOS.zip" }
+          linux-musl-x64 { $packageName = "TestPackage-alpine-x64.zip"}
+        }
+        Rename-Item $(System.ArtifactsDirectory)/TestPackage.zip $packageName
+        Copy-Item -Path $(System.ArtifactsDirectory)/$packageName -Destination $(ob_outputDirectory) -Force -Verbose
+      }
+      BuildTestPackage -runtime linux-x64
+      BuildTestPackage -runtime linux-arm
+      BuildTestPackage -runtime linux-arm64
+      BuildTestPackage -runtime osx-x64
+      BuildTestPackage -runtime linux-musl-x64
+    displayName: Build test package and upload
+    retryCountOnTaskFailure: 1
+    env:
+      ob_restore_phase: true
+
+  - pwsh: |
+      Write-Host "This doesn't do anything but make the build phase run."
+    displayName: Dummy build task
diff --git a/.pipelines/templates/uploadToAzure.yml b/.pipelines/templates/uploadToAzure.yml
new file mode 100644
index 00000000000..45ed7c1fd3f
--- /dev/null
+++ b/.pipelines/templates/uploadToAzure.yml
@@ -0,0 +1,449 @@
+jobs:
+- job: upload_packages
+  displayName: Upload packages
+  condition: succeeded()
+  pool:
+    type: windows
+  variables:
+  - name: ob_sdl_sbom_enabled
+    value: true
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+  - group: 'Azure Blob variable group'
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+      CreateJson: no
+
+  - template: /.pipelines/templates/release-SetReleaseTagandContainerName.yml@self
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - pwsh: |
+      Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: 'Capture Environment Variables'
+
+  - pwsh: |
+      New-Item -Path '$(Build.ArtifactStagingDirectory)/downloads' -ItemType Directory -Force
+    displayName: Create downloads directory
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_deb
+      itemPattern: '**/*.deb'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download deb package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_deb_arm64
+      itemPattern: '**/*.deb'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download deb arm64 package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_fxdependent
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux fxd package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_mariner_arm64
+      itemPattern: '**/*.rpm'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux mariner arm64 package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_mariner_x64
+      itemPattern: '**/*.rpm'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux mariner x64 package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_minSize_x64
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux minSize x64 package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_minSize_arm64
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux minSize arm64 package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_rpm
+      itemPattern: '**/*.rpm'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux rpm package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_tar
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux tar package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_tar_alpine
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux alpine tar package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_tar_alpine_fxd
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux alpine fxd tar package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_tar_arm
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux arm32 tar package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_linux_package_tar_arm64
+      itemPattern: '**/*.tar.gz'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download linux arm64 tar package
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_nupkg_build_nupkg
+      itemPattern: '**/*.nupkg'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download nupkgs
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_arm64
+      itemPattern: |
+        **/*.msix
+        **/*.zip
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows arm64 packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_fxdependent
+      itemPattern: '**/*.zip'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows fxdependent packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_fxdependentWinDesktop
+      itemPattern: '**/*.zip'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows fxdependentWinDesktop packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_x64_minsize
+      itemPattern: '**/*.zip'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows x64 minsize packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_arm64_minsize
+      itemPattern: '**/*.zip'
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows arm64 minsize packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_x64
+      itemPattern: |
+        **/*.msix
+        **/*.zip
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows x64 packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_windows_package_package_win_x86
+      itemPattern: |
+        **/*.msix
+        **/*.zip
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download windows x86 packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: macos-pkgs
+      itemPattern: |
+        **/*.tar.gz
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download macos tar packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_mac_package_sign_package_macos_arm64
+      itemPattern: |
+        **/*.pkg
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download macos arm packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_mac_package_sign_package_macos_x64
+      itemPattern: |
+        **/*.pkg
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download macos x64 packages
+
+  - task: DownloadPipelineArtifact@2
+    inputs:
+      buildType: 'current'
+      artifact: drop_msixbundle_CreateMSIXBundle
+      itemPattern: |
+        **/*.msixbundle
+      targetPath: '$(Build.ArtifactStagingDirectory)/downloads'
+    displayName: Download MSIXBundle
+
+  - pwsh: |
+      Get-ChildItem '$(Build.ArtifactStagingDirectory)/downloads' | Select-Object -ExpandProperty FullName
+    displayName: 'Capture downloads'
+
+  - pwsh: |
+      Write-Verbose -Verbose "Copying Github Release files in $(Build.ArtifactStagingDirectory)/downloads to use in Release Pipeline"
+
+      Write-Verbose -Verbose "Creating output directory for GitHub Release files: $(ob_outputDirectory)/GitHubPackages"
+      New-Item -Path $(ob_outputDirectory)/GitHubPackages -ItemType Directory -Force
+      Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)/downloads/*" -Recurse |
+        Where-Object { $_.Extension -notin '.msix', '.nupkg' -and $_.Name -notmatch '-gc'} |
+        Copy-Item -Destination $(ob_outputDirectory)/GitHubPackages -Recurse -Verbose
+
+      Write-Verbose -Verbose "Creating output directory for NuGet packages: $(ob_outputDirectory)/NuGetPackages"
+      New-Item -Path $(ob_outputDirectory)/NuGetPackages -ItemType Directory -Force
+      Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)/downloads/*" -Recurse |
+        Where-Object { $_.Extension -eq '.nupkg' } |
+        Copy-Item -Destination $(ob_outputDirectory)/NuGetPackages -Recurse -Verbose
+    displayName: Copy downloads to Artifacts
+
+  - pwsh: |
+      # Create output directory for packages which have been uploaded to blob storage
+      New-Item -Path $(Build.ArtifactStagingDirectory)/uploaded -ItemType Directory -Force
+    displayName: Create output directory for packages
+
+  - task: AzurePowerShell@5
+    displayName: Upload packages to blob
+    inputs:
+      azureSubscription: az-blob-cicd-infra
+      scriptType: inlineScript
+      azurePowerShellVersion: LatestVersion
+      pwsh: true
+      inline: |
+        $downloadsDirectory = '$(Build.ArtifactStagingDirectory)/downloads'
+        $uploadedDirectory = '$(Build.ArtifactStagingDirectory)/uploaded'
+        $storageAccountName = "pscoretestdata"
+        $containerName = $env:AZUREVERSION
+
+        Write-Verbose -Verbose "Uploading packages to blob storage account: $storageAccountName container: $containerName"
+
+        $context = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount
+
+        # Create the blob container if it doesn't exist
+        $containerExists = Get-AzStorageContainer -Name $containerName -Context $context -ErrorAction SilentlyContinue
+        if (-not $containerExists) {
+            $null = New-AzStorageContainer -Name $containerName -Context $context
+            Write-Host "Blob container $containerName created successfully."
+        }
+
+        $gcPackages = Get-ChildItem -Path $downloadsDirectory -Filter "powershell*gc.*"
+        Write-Verbose -Verbose "gc files to upload."
+        $gcPackages | Write-Verbose -Verbose
+        $gcContainerName = "$containerName-gc"
+        # Create the blob container if it doesn't exist
+        $containerExists = Get-AzStorageContainer -Name $gcContainerName -Context $context -ErrorAction SilentlyContinue
+        if (-not $containerExists) {
+            $null = New-AzStorageContainer -Name $gcContainerName -Context $context
+            Write-Host "Blob container $gcContainerName created successfully."
+        }
+
+        $gcPackages | ForEach-Object {
+            $blobName = "${_.Name}"
+            Write-Verbose -Verbose "Uploading $($_.FullName) to $gcContainerName/$blobName"
+            $null = Set-AzStorageBlobContent -File $_.FullName -Container $gcContainerName -Blob $blobName -Context $context
+            # Move to folder to we wont upload again
+            Move-Item -Path $_.FullName -Destination $uploadedDirectory -Force -Verbose
+        }
+
+        $nupkgFiles = Get-ChildItem -Path $downloadsDirectory -Filter "*.nupkg" | Where-Object { $_.Name -notlike "powershell*.nupkg" }
+
+        # create a SHA512 checksum file for each nupkg files
+
+        $checksums = $nupkgFiles |
+          ForEach-Object {
+              Write-Verbose -Verbose "Generating checksum file for $($_.FullName)"
+              $packageName = $_.Name
+              $hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash.ToLower()
+              # the '*' before the packagename signifies it is a binary
+              "$hash *$packageName"
+          }
+
+        $checksums | Out-File -FilePath "$downloadsDirectory\SHA512SUMS" -Force
+        $fileContent = Get-Content -Path "$downloadsDirectory\SHA512SUMS" -Raw | Out-String
+        Write-Verbose -Verbose -Message $fileContent
+
+        Write-Verbose -Verbose "nupkg files to upload."
+        $nupkgFiles += (Get-Item "$downloadsDirectory\SHA512SUMS")
+        $nupkgFiles | Write-Verbose -Verbose
+        $nugetContainerName = "$containerName-nuget"
+        # Create the blob container if it doesn't exist
+        $containerExists = Get-AzStorageContainer -Name $nugetContainerName -Context $context -ErrorAction SilentlyContinue
+        if (-not $containerExists) {
+            $null = New-AzStorageContainer -Name $nugetContainerName -Context $context
+            Write-Host "Blob container $nugetContainerName created successfully."
+        }
+
+        $nupkgFiles | ForEach-Object {
+            $blobName = $_.Name
+            Write-Verbose -Verbose "Uploading $($_.FullName) to $nugetContainerName/$blobName"
+            $null = Set-AzStorageBlobContent -File $_.FullName -Container $nugetContainerName -Blob $blobName -Context $context
+            # Move to folder to we wont upload again
+            Move-Item -Path $_.FullName -Destination $uploadedDirectory -Force -Verbose
+        }
+
+        $globaltoolFiles = Get-ChildItem -Path $downloadsDirectory -Filter "powershell*.nupkg"
+        # create a SHA512 checksum file for each nupkg files
+
+        $checksums = $globaltoolFiles |
+          ForEach-Object {
+              Write-Verbose -Verbose "Generating checksum file for $($_.FullName)"
+              $packageName = $_.Name
+              $hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash.ToLower()
+              # the '*' before the packagename signifies it is a binary
+              "$hash *$packageName"
+          }
+
+        New-Item -Path "$downloadsDirectory\globaltool" -ItemType Directory -Force
+        $checksums | Out-File -FilePath "$downloadsDirectory\globaltool\SHA512SUMS" -Force
+        $fileContent = Get-Content -Path "$downloadsDirectory\globaltool\SHA512SUMS" -Raw | Out-String
+        Write-Verbose -Verbose -Message $fileContent
+
+        Write-Verbose -Verbose "globaltool files to upload."
+        $globaltoolFiles += Get-Item ("$downloadsDirectory\globaltool\SHA512SUMS")
+        $globaltoolFiles | Write-Verbose -Verbose
+        $globaltoolContainerName = "$containerName-nuget"
+        $globaltoolFiles | ForEach-Object {
+            $blobName = "globaltool/" + $_.Name
+            $globaltoolContainerName = "$containerName-nuget"
+            Write-Verbose -Verbose "Uploading $($_.FullName) to $globaltoolContainerName/$blobName"
+            $null = Set-AzStorageBlobContent -File $_.FullName -Container $globaltoolContainerName -Blob $blobName -Context $context
+            # Move to folder to we wont upload again
+            Move-Item -Path $_.FullName -Destination $uploadedDirectory -Force
+        }
+
+        # To use -Include parameter, we need to use \* to get all files
+        $privateFiles = Get-ChildItem -Path $downloadsDirectory\* -Include @("*.msix", "*.exe")
+        Write-Verbose -Verbose "private files to upload."
+        $privateFiles | Write-Verbose -Verbose
+        $privateContainerName = "$containerName-private"
+        # Create the blob container if it doesn't exist
+        $containerExists = Get-AzStorageContainer -Name $privateContainerName -Context $context -ErrorAction SilentlyContinue
+        if (-not $containerExists) {
+            $null = New-AzStorageContainer -Name $privateContainerName -Context $context
+            Write-Host "Blob container $privateContainerName created successfully."
+        }
+
+        $privateFiles | ForEach-Object {
+            $blobName = $_.Name
+            Write-Verbose -Verbose "Uploading $($_.FullName) to $privateContainerName/$blobName"
+            $null = Set-AzStorageBlobContent -File $_.FullName -Container $privateContainerName -Blob $blobName -Context $context
+            # Move to folder to we wont upload again
+            Move-Item -Path $_.FullName -Destination $uploadedDirectory -Force -Verbose
+        }
+
+        # To use -Include parameter, we need to use \* to get all files
+        $files = Get-ChildItem -Path $downloadsDirectory\* -Include @("*.deb", "*.tar.gz", "*.rpm", "*.zip", "*.pkg")
+        Write-Verbose -Verbose "files to upload."
+        $files | Write-Verbose -Verbose
+
+        $files | ForEach-Object {
+          $blobName = $_.Name
+          Write-Verbose -Verbose "Uploading $($_.FullName) to $containerName/$blobName"
+          $null = Set-AzStorageBlobContent -File $_.FullName -Container $containerName -Blob $blobName -Context $context
+          Write-Host "File $blobName uploaded to $containerName container."
+          Move-Item -Path $_.FullName -Destination $uploadedDirectory -Force -Verbose
+        }
+
+        $msixbundleFiles = Get-ChildItem -Path $downloadsDirectory -Filter "*.msixbundle"
+
+        $containerName = '$(OutputVersion.AzureVersion)-private'
+        $storageAccount = '$(StorageAccount)'
+
+        $storageContext = New-AzStorageContext -StorageAccountName $storageAccount -UseConnectedAccount
+
+        if ($msixbundleFiles) {
+          $bundleFile = $msixbundleFiles[0].FullName
+          $blobName = $msixbundleFiles[0].Name
+
+          $existing = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $storageContext -ErrorAction Ignore
+          if ($existing) {
+              Write-Verbose -Verbose "MSIX bundle already exists at '$storageAccount/$containerName/$blobName', removing first."
+              $existing | Remove-AzStorageBlob -ErrorAction Stop -Verbose
+          }
+
+          Write-Verbose -Verbose "Uploading $bundleFile to $containerName/$blobName"
+          Set-AzStorageBlobContent -File $bundleFile -Container $containerName -Blob $blobName -Context $storageContext -Force
+        } else {
+            throw "MSIXBundle not found in $downloadsDirectory"
+        }
diff --git a/.pipelines/templates/variables/PowerShell-Coordinated_Packages-Variables.yml b/.pipelines/templates/variables/PowerShell-Coordinated_Packages-Variables.yml
new file mode 100644
index 00000000000..dd67d509a8a
--- /dev/null
+++ b/.pipelines/templates/variables/PowerShell-Coordinated_Packages-Variables.yml
@@ -0,0 +1,67 @@
+parameters:
+  - name: InternalSDKBlobURL
+    type: string
+    default: ' '
+  - name: ReleaseTagVar
+    type: string
+    default: 'fromBranch'
+  - name: SKIP_SIGNING
+    type: string
+    default: 'NO'
+  - name: ENABLE_MSBUILD_BINLOGS
+    type: boolean
+    default: false
+  - name: FORCE_CODEQL
+    type: boolean
+    default: false
+
+variables:
+  - name: PS_RELEASE_BUILD
+    value: 1
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 1
+  - name: POWERSHELL_TELEMETRY_OPTOUT
+    value: 1
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: skipNugetSecurityAnalysis
+    value: true
+  - name: branchCounterKey
+    value: $[format('{0:yyyyMMdd}-{1}', pipeline.startTime,variables['Build.SourceBranch'])]
+  - name: branchCounter
+    value: $[counter(variables['branchCounterKey'], 1)]
+  - name: BUILDSECMON_OPT_IN
+    value: true
+  - name: __DOTNET_RUNTIME_FEED
+    value: ${{ parameters.InternalSDKBlobURL }}
+  - name: LinuxContainerImage
+    value: mcr.microsoft.com/onebranch/azurelinux/build:3.0
+  - name: WindowsContainerImage
+    value: onebranch.azurecr.io/windows/ltsc2022/vse2022:latest
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  - name: ReleaseTagVar
+    value: ${{ parameters.ReleaseTagVar }}
+  - name: SKIP_SIGNING
+    value: ${{ parameters.SKIP_SIGNING }}
+  - group: mscodehub-feed-read-general
+  - group: mscodehub-feed-read-akv
+  - name: ENABLE_MSBUILD_BINLOGS
+    value: ${{ parameters.ENABLE_MSBUILD_BINLOGS }}
+  - ${{ if eq(parameters['FORCE_CODEQL'],'true') }}:
+    # Cadence is hours before CodeQL will allow a re-upload of the database
+    - name: CodeQL.Cadence
+      value: 1
+  - name: CODEQL_ENABLED
+    ${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(parameters['FORCE_CODEQL'],'true')) }}:
+      value: true
+    ${{ else }}:
+      value: false
+  # Fix for BinSkim ICU package error in Linux containers
+  - name: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT
+    value: true
+  # Disable BinSkim at job level to override NonOfficial template defaults
+  - name: ob_sdl_binskim_enabled
+    value: false
diff --git a/.pipelines/templates/variables/PowerShell-Packages-Variables.yml b/.pipelines/templates/variables/PowerShell-Packages-Variables.yml
new file mode 100644
index 00000000000..7d1818909b5
--- /dev/null
+++ b/.pipelines/templates/variables/PowerShell-Packages-Variables.yml
@@ -0,0 +1,50 @@
+parameters:
+  - name: debug
+    type: boolean
+    default: false
+  - name: ForceAzureBlobDelete
+    type: string
+    default: 'false'
+  - name: ReleaseTagVar
+    type: string
+    default: 'fromBranch'
+  - name: disableNetworkIsolation
+    type: boolean
+    default: false
+
+variables:
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)] # needed for onebranch.pipeline.version task
+  - name: system.debug
+    value: ${{ parameters.debug }}
+  - name: ENABLE_PRS_DELAYSIGN
+    value: 1
+  - name: ROOT
+    value: $(Build.SourcesDirectory)
+  - name: ForceAzureBlobDelete
+    value: ${{ parameters.ForceAzureBlobDelete }}
+  - name: NUGET_XMLDOC_MODE
+    value: none
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: skipNugetSecurityAnalysis
+    value: true
+  - name: ReleaseTagVar
+    value: ${{ parameters.ReleaseTagVar }}
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: WindowsContainerImage
+    value: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' # Docker image which is used to build the project
+  - name: LinuxContainerImage
+    value: mcr.microsoft.com/onebranch/azurelinux/build:3.0
+  - group: mscodehub-feed-read-general
+  - group: mscodehub-feed-read-akv
+  - name: branchCounterKey
+    value: $[format('{0:yyyyMMdd}-{1}', pipeline.startTime,variables['Build.SourceBranch'])]
+  - name: branchCounter
+    value: $[counter(variables['branchCounterKey'], 1)]
+  - group: MSIXSigningProfile
+  - name: disableNetworkIsolation
+    value: ${{ parameters.disableNetworkIsolation }}
diff --git a/.pipelines/templates/variables/PowerShell-Release-Azure-Variables.yml b/.pipelines/templates/variables/PowerShell-Release-Azure-Variables.yml
new file mode 100644
index 00000000000..3b47e5eff2b
--- /dev/null
+++ b/.pipelines/templates/variables/PowerShell-Release-Azure-Variables.yml
@@ -0,0 +1,35 @@
+parameters:
+  - name: debug
+    type: boolean
+    default: false
+
+variables:
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  - name: system.debug
+    value: ${{ parameters.debug }}
+  - name: ENABLE_PRS_DELAYSIGN
+    value: 1
+  - name: ROOT
+    value: $(Build.SourcesDirectory)
+  - name: REPOROOT
+    value: $(Build.SourcesDirectory)
+  - name: OUTPUTROOT
+    value: $(REPOROOT)\out
+  - name: NUGET_XMLDOC_MODE
+    value: none
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: skipNugetSecurityAnalysis
+    value: true
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\.config\tsaoptions.json
+  - name: WindowsContainerImage
+    value: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest'
+  - name: LinuxContainerImage
+    value: mcr.microsoft.com/onebranch/azurelinux/build:3.0
+  - group: PoolNames
diff --git a/.pipelines/templates/variables/PowerShell-Release-Variables.yml b/.pipelines/templates/variables/PowerShell-Release-Variables.yml
new file mode 100644
index 00000000000..930c559eafe
--- /dev/null
+++ b/.pipelines/templates/variables/PowerShell-Release-Variables.yml
@@ -0,0 +1,41 @@
+parameters:
+  - name: debug
+    type: boolean
+    default: false
+  - name: ReleaseTagVar
+    type: string
+    default: 'fromBranch'
+
+variables:
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  - name: system.debug
+    value: ${{ parameters.debug }}
+  - name: ENABLE_PRS_DELAYSIGN
+    value: 1
+  - name: ROOT
+    value: $(Build.SourcesDirectory)
+  - name: REPOROOT
+    value: $(Build.SourcesDirectory)
+  - name: OUTPUTROOT
+    value: $(REPOROOT)\out
+  - name: NUGET_XMLDOC_MODE
+    value: none
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: skipNugetSecurityAnalysis
+    value: true
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: WindowsContainerImage
+    value: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest'
+  - name: LinuxContainerImage
+    value: mcr.microsoft.com/onebranch/azurelinux/build:3.0
+  - name: ReleaseTagVar
+    value: ${{ parameters.ReleaseTagVar }}
+  - group: PoolNames
+  # Fix for BinSkim ICU package error in Linux containers
+  - name: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT
+    value: true
diff --git a/.pipelines/templates/variables/PowerShell-vPack-Variables.yml b/.pipelines/templates/variables/PowerShell-vPack-Variables.yml
new file mode 100644
index 00000000000..7f00a5e0e2a
--- /dev/null
+++ b/.pipelines/templates/variables/PowerShell-vPack-Variables.yml
@@ -0,0 +1,39 @@
+parameters:
+  - name: debug
+    type: boolean
+    default: false
+  - name: ReleaseTagVar
+    type: string
+    default: 'fromBranch'
+  - name: netiso
+    type: string
+    default: 'R1'
+
+variables:
+  - name: CDP_DEFINITION_BUILD_COUNT
+    value: $[counter('', 0)]
+  - name: system.debug
+    value: ${{ parameters.debug }}
+  - name: BuildSolution
+    value: $(Build.SourcesDirectory)\dirs.proj
+  - name: BuildConfiguration
+    value: Release
+  - name: WindowsContainerImage
+    value: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest'
+  - name: Codeql.Enabled
+    value: false  #  pipeline is not building artifacts; it repackages existing artifacts into a vpack
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 1
+  - name: POWERSHELL_TELEMETRY_OPTOUT
+    value: 1
+  - name: nugetMultiFeedWarnLevel
+    value: none
+  - name: ReleaseTagVar
+    value: ${{ parameters.ReleaseTagVar }}
+  - group: Azure Blob variable group
+  - group: certificate_logical_to_actual # used within signing task
+  - group: DotNetPrivateBuildAccess
+  - name: netiso
+    value: ${{ parameters.netiso }}
+# We shouldn't be using PATs anymore
+#  - group: mscodehub-feed-read-general
diff --git a/.pipelines/templates/variables/release-shared.yml b/.pipelines/templates/variables/release-shared.yml
new file mode 100644
index 00000000000..70d3dd2df97
--- /dev/null
+++ b/.pipelines/templates/variables/release-shared.yml
@@ -0,0 +1,40 @@
+parameters:
+  - name: REPOROOT
+    type: string
+    default: $(Build.SourcesDirectory)\PowerShell
+  - name: SBOM
+    type: boolean
+    default: false
+  - name: RELEASETAG
+    type: string
+    default: 'Not Initialized'
+  - name: VERSION
+    type: string
+    default: 'Not Initialized'
+
+variables:
+  - name: ob_signing_setup_enabled            
+    value: false
+  - name: ob_sdl_sbom_enabled
+    value: ${{ parameters.SBOM }}
+  - name: DOTNET_NOLOGO
+    value: 1
+  - group: 'mscodehub-code-read-akv'
+  - group: 'Azure Blob variable group'
+  - group: 'GitHubTokens'
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: false
+  - name: ob_sdl_tsa_configFile
+    value: ${{ parameters.REPOROOT }}\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: ${{ parameters.REPOROOT }}\.config\suppress.json
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+  - name: ReleaseTag
+    value: ${{ parameters.RELEASETAG }}
+  - name: Version
+    value: ${{ parameters.VERSION }}
diff --git a/.pipelines/templates/windows-hosted-build.yml b/.pipelines/templates/windows-hosted-build.yml
new file mode 100644
index 00000000000..afc3a4b62a5
--- /dev/null
+++ b/.pipelines/templates/windows-hosted-build.yml
@@ -0,0 +1,321 @@
+parameters:
+  Architecture: 'x64'
+  BuildConfiguration: 'release'
+  JobName: 'build_windows'
+
+jobs:
+- job: build_windows_${{ parameters.Architecture }}_${{ parameters.BuildConfiguration }}
+  displayName: Build_Windows_${{ parameters.Architecture }}_${{ parameters.BuildConfiguration }}
+  condition: succeeded()
+  pool:
+    type: windows
+  variables:
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+  - name: DOTNET_NOLOGO
+    value: 1
+  - group: DotNetPrivateBuildAccess
+  - group: certificate_logical_to_actual
+  - name: ob_outputDirectory
+    value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
+  - name: ob_sdl_codeSignValidation_enabled
+    value: false
+  - name: ob_sdl_binskim_enabled
+    value: true
+  - name: ob_sdl_tsa_configFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\tsaoptions.json
+  - name: ob_sdl_credscan_suppressionsFile
+    value: $(Build.SourcesDirectory)\PowerShell\.config\suppress.json
+  - name: Architecture
+    value: ${{ parameters.Architecture }}
+  - name: BuildConfiguration
+    value: ${{ parameters.BuildConfiguration }}
+  - name: ob_sdl_sbom_packageName
+    value: 'Microsoft.Powershell.Windows.${{ parameters.Architecture }}'
+  # We add this manually, so we need it disabled the OneBranch auto-injected one.
+  - name: ob_sdl_codeql_compiled_enabled
+    value: false
+
+  steps:
+  - checkout: self
+    clean: true
+    env:
+      ob_restore_phase: true # This ensures checkout is done at the beginning of the restore phase
+
+  - template: /.pipelines/templates/SetVersionVariables.yml@self
+    parameters:
+      ReleaseTagVar: $(ReleaseTagVar)
+
+  - template: /.pipelines/templates/cloneToOfficialPath.yml@self
+
+  - template: /.pipelines/templates/insert-nuget-config-azfeed.yml@self
+    parameters:
+      repoRoot: $(PowerShellRoot)
+
+  - task: CodeQL3000Init@0 # Add CodeQL Init task right before your 'Build' step.
+    condition: eq(variables['CODEQL_ENABLED'], 'true')
+    env:
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+    inputs:
+      Enabled: true
+      # AnalyzeInPipeline: false = upload results
+      # AnalyzeInPipeline: true = do not upload results
+      AnalyzeInPipeline: false
+      Language: csharp
+
+  - template: /.pipelines/templates/install-dotnet.yml@self
+
+  - pwsh: |
+      $runtime = switch ($env:Architecture)
+        {
+          "x64" { "win7-x64" }
+          "x86" { "win7-x86" }
+          "arm64" { "win-arm64" }
+          "fxdependent" { "fxdependent" }
+          "fxdependentWinDesktop" { "fxdependent-win-desktop" }
+        }
+
+      $params = @{}
+      if ($env:BuildConfiguration -eq 'minSize') {
+        $params['ForMinimalSize'] = $true
+      }
+
+      $vstsCommandString = "vso[task.setvariable variable=Runtime]$runtime"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+
+      Write-Verbose -Message "Building PowerShell with Runtime: $runtime for '$env:BuildConfiguration' configuration"
+      Import-Module -Name $(PowerShellRoot)/build.psm1 -Force
+      $buildWithSymbolsPath = New-Item -ItemType Directory -Path $(Pipeline.Workspace)/Symbols_$(Architecture) -Force
+
+      Start-PSBootstrap -Scenario Package
+      $null = New-Item -ItemType Directory -Path $buildWithSymbolsPath -Force -Verbose
+
+      $ReleaseTagParam = @{}
+
+      if ($env:RELEASETAGVAR) {
+        $ReleaseTagParam['ReleaseTag'] = $env:RELEASETAGVAR
+      }
+
+      Start-PSBuild -Runtime $runtime -Configuration Release -Output $buildWithSymbolsPath -Clean -PSModuleRestore @params @ReleaseTagParam
+
+      $refFolderPath = Join-Path $buildWithSymbolsPath 'ref'
+      Write-Verbose -Verbose "refFolderPath: $refFolderPath"
+      $outputPath = Join-Path '$(ob_outputDirectory)' 'psoptions'
+      $null = New-Item -ItemType Directory -Path $outputPath -Force
+      $psOptPath = "$outputPath/psoptions.json"
+      Save-PSOptions -PSOptionsPath $psOptPath
+
+      Write-Verbose -Verbose "Verifying pdbs exist in build folder"
+      $pdbs = Get-ChildItem -Path $buildWithSymbolsPath -Recurse -Filter *.pdb
+      if ($pdbs.Count -eq 0) {
+        Write-Error -Message "No pdbs found in build folder"
+      }
+      else {
+        Write-Verbose -Verbose "Found $($pdbs.Count) pdbs in build folder"
+        $pdbs | ForEach-Object {
+          Write-Verbose -Verbose "Pdb: $($_.FullName)"
+        }
+
+        $pdbs | Compress-Archive -DestinationPath "$(ob_outputDirectory)/symbols.zip" -Update
+      }
+
+      Write-Verbose -Verbose "Completed building PowerShell for '$env:BuildConfiguration' configuration"
+    displayName: 'Build Windows Universal - $(Architecture)-$(BuildConfiguration) Symbols folder'
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+  - pwsh: |
+      $runtime = switch ($env:Architecture)
+        {
+          "x64" { "win7-x64" }
+          "x86" { "win7-x86" }
+          "arm64" { "win-arm64" }
+          "fxdependent" { "fxdependent" }
+          "fxdependentWinDesktop" { "fxdependent-win-desktop" }
+        }
+
+      Import-Module -Name $(PowerShellRoot)/build.psm1 -Force
+      Find-Dotnet
+
+      ## Build global tool
+      Write-Verbose -Message "Building PowerShell global tool for Windows.x64" -Verbose
+      $globalToolCsProjDir = Join-Path $(PowerShellRoot) 'src' 'GlobalTools' 'PowerShell.Windows.x64'
+      Push-Location -Path $globalToolCsProjDir -Verbose
+
+      $globalToolArtifactPath = Join-Path $(Build.SourcesDirectory) 'GlobalTool'
+      $vstsCommandString = "vso[task.setvariable variable=GlobalToolArtifactPath]${globalToolArtifactPath}"
+      Write-Host "sending " + $vstsCommandString
+      Write-Host "##$vstsCommandString"
+
+      if ($env:RELEASETAGVAR) {
+        $ReleaseTagToUse = $env:RELEASETAGVAR -Replace '^v'
+      }
+
+      Write-Verbose -Verbose "Building PowerShell global tool for Windows.x64 with cmdline: dotnet publish --no-self-contained --artifacts-path $globalToolArtifactPath /property:PackageVersion=$(Version) --configuration 'Release' /property:ReleaseTag=$ReleaseTagToUse"
+      dotnet publish --no-self-contained --artifacts-path $globalToolArtifactPath /property:PackageVersion=$(Version) --configuration 'Release' /property:ReleaseTag=$ReleaseTagToUse
+      $globalToolBuildModulePath = Join-Path $globalToolArtifactPath 'publish' 'PowerShell.Windows.x64' 'release'
+      Pop-Location
+      # do this to ensure everything gets signed.
+      Restore-PSModuleToBuild -PublishPath $globalToolBuildModulePath
+
+      $buildWithSymbolsPath = Get-Item -Path "$(Pipeline.Workspace)/Symbols_$(Architecture)"
+      $refFolderPath = Join-Path $buildWithSymbolsPath 'ref'
+      Write-Verbose -Verbose "refFolderPath: $refFolderPath"
+
+      # Copy reference assemblies
+      Copy-Item -Path $refFolderPath -Destination $globalToolBuildModulePath -Recurse -Force
+
+      Write-Verbose -Verbose "clean unnecessary files in obj directory"
+      $objDir = Join-Path $globalToolArtifactPath 'obj' 'PowerShell.Windows.x64' 'release'
+
+      $filesToKeep = @("apphost.exe", "PowerShell.Windows.x64.pdb", "PowerShell.Windows.x64.dll", "project.assets.json")
+
+      # only four files are needed in obj folder for global tool packaging
+      Get-ChildItem -Path $objDir -File -Recurse |
+        Where-Object { -not $_.PSIsContainer } |
+        Where-Object { $_.name -notin $filesToKeep } |
+        Remove-Item -Verbose
+    displayName: 'Build Winx64 Global tool'
+    condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+    env:
+      __DOTNET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY)
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+  - task: CodeQL3000Finalize@0 # Add CodeQL Finalize task right after your 'Build' step.
+    condition: eq(variables['CODEQL_ENABLED'], 'true')
+    env:
+      ob_restore_phase: true # Set ob_restore_phase to run this step before '🔒 Setup Signing' step.
+
+  - pwsh: |
+      $platform = 'windows'
+      $vstsCommandString = "vso[task.setvariable variable=ArtifactPlatform]$platform"
+      Write-Host ("sending " + $vstsCommandString)
+      Write-Host "##$vstsCommandString"
+    displayName: Set artifact platform
+
+  - template: /.pipelines/templates/obp-file-signing.yml@self
+    parameters:
+      binPath: '$(Pipeline.Workspace)/Symbols_$(Architecture)'
+      OfficialBuild: $(ps_official_build)
+
+  ## first we sign all the files in the bin folder
+  - ${{ if eq(variables['Architecture'], 'fxdependent') }}:
+    - template: /.pipelines/templates/obp-file-signing.yml@self
+      parameters:
+        binPath: '$(GlobalToolArtifactPath)/publish/PowerShell.Windows.x64/release'
+        globalTool: 'true'
+        OfficialBuild: $(ps_official_build)
+
+  - pwsh: |
+      Get-ChildItem '$(GlobalToolArtifactPath)/obj/PowerShell.Windows.x64/release'
+    displayName: Capture obj files
+    condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+
+  ## Now we sign couple of file from the obj folder which are needed for the global tool packaging
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign obj files
+    inputs:
+      command: 'sign'
+      signing_profile: external_distribution
+      files_to_sign: '**\*.dll;**\*.exe'
+      search_root: '$(GlobalToolArtifactPath)/obj/PowerShell.Windows.x64/release'
+    condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+
+  - pwsh: |
+      <#  The way the packaging works is a bit tricky as when it is built, we cannot add the modules that come from gallery.
+          We have to use dotnet pack to build the nupkg and then expand it as a zip.
+          After expanding we restore the signed files for the modules from the gallery.
+          We also delete pdbs, content and contentFiles folder which are not necessary.
+          After that, we repack using Compress-Archive and rename it back to a nupkg.
+        #>
+
+      Import-Module -Name $(PowerShellRoot)/build.psm1 -Force
+      Find-Dotnet
+
+      $packagingStrings = Import-PowerShellDataFile "$(PowerShellRoot)\tools\packaging\packaging.strings.psd1"
+
+      $outputPath = Join-Path '$(ob_outputDirectory)' 'globaltool'
+      $null = New-Item -ItemType Directory -Path $outputPath -Force
+      $globalToolCsProjDir = Join-Path $(PowerShellRoot) 'src' 'GlobalTools' 'PowerShell.Windows.x64'
+      Push-Location -Path $globalToolCsProjDir -Verbose
+
+      if ($env:RELASETAGVAR) {
+        $ReleaseTagToUse = $env:RELASETAGVAR -Replace '^v'
+      }
+
+      Write-Verbose -Verbose "Packing PowerShell global tool for Windows.x64 with cmdline: dotnet pack --output $outputPath --no-build --artifacts-path '$(GlobalToolArtifactPath)' /property:PackageVersion=$(Version) /property:PackageIcon=Powershell_64.png /property:Version=$(Version) /property:ReleaseTag=$ReleaseTagToUse"
+
+      dotnet pack --output $outputPath --no-build --artifacts-path '$(GlobalToolArtifactPath)' /property:PackageVersion=$(Version) /property:PackageIcon=Powershell_64.png /property:Version=$(Version) /property:ReleaseTag=$ReleaseTagToUse
+
+      Write-Verbose -Verbose "Deleting content and contentFiles folders from the nupkg"
+
+      $nupkgs = Get-ChildItem -Path $outputPath -Filter powershell*.nupkg
+
+      $nupkgName = $nupkgs.Name
+      $newName = $nupkgName -replace '(\.nupkg)$', '.zip'
+      Rename-Item -Path $nupkgs.FullName -NewName $newName
+
+      $zipPath = Get-ChildItem -Path $outputPath -Filter powershell*.zip
+
+      # Expand zip and remove content and contentFiles folders
+      Expand-Archive -Path $zipPath -DestinationPath "$outputPath\temp" -Force
+
+      $modulesToCopy = @(
+        'PowerShellGet'
+        'PackageManagement'
+        'Microsoft.PowerShell.PSResourceGet'
+        'Microsoft.PowerShell.Archive'
+        'PSReadLine'
+        'Microsoft.PowerShell.ThreadJob'
+      )
+
+      $sourceModulePath = Join-Path '$(GlobalToolArtifactPath)' 'publish' 'PowerShell.Windows.x64' 'release' 'Modules'
+      $destModulesPath = Join-Path "$outputPath" 'temp' 'tools' 'net11.0' 'any' 'modules'
+
+      $modulesToCopy | ForEach-Object {
+        $modulePath = Join-Path $sourceModulePath $_
+        Copy-Item -Path $modulePath -Destination $destModulesPath -Recurse -Force
+      }
+
+      # Copy ref assemblies
+      Copy-Item '$(Pipeline.Workspace)/Symbols_$(Architecture)/ref' "$outputPath\temp\tools\net11.0\any\ref" -Recurse -Force
+
+      $contentPath = Join-Path "$outputPath\temp" 'content'
+      $contentFilesPath = Join-Path "$outputPath\temp" 'contentFiles'
+
+      Remove-Item -Path $contentPath,$contentFilesPath -Recurse -Force
+
+      # remove PDBs to reduce the size of the nupkg
+      Remove-Item -Path "$outputPath\temp\tools\net11.0\any\*.pdb" -Recurse -Force
+
+      # create powershell.config.json
+      $config = [ordered]@{}
+      $config.Add("Microsoft.PowerShell:ExecutionPolicy", "RemoteSigned")
+      $config.Add("WindowsPowerShellCompatibilityModuleDenyList", @("PSScheduledJob", "BestPractices", "UpdateServices"))
+
+      $configPublishPath = Join-Path "$outputPath" 'temp' 'tools' 'net11.0' 'any' "powershell.config.json"
+      Set-Content -Path $configPublishPath -Value ($config | ConvertTo-Json) -Force -ErrorAction Stop
+
+      Compress-Archive -Path "$outputPath\temp\*" -DestinationPath "$outputPath\$nupkgName" -Force
+
+      Remove-Item -Path "$outputPath\temp" -Recurse -Force
+      Remove-Item -Path $zipPath -Force
+
+      if (-not (Test-Path "$outputPath\powershell.windows.x64.*.nupkg")) {
+        throw "Global tool package not found at $outputPath"
+      }
+    displayName: 'Pack Windows.x64 global tool'
+    condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+
+  - task: onebranch.pipeline.signing@1
+    displayName: Sign nupkg files
+    inputs:
+      command: 'sign'
+      cp_code: '$(nuget_cert_id)'
+      files_to_sign: '**\*.nupkg'
+      search_root: '$(ob_outputDirectory)\globaltool'
+    condition: and(succeeded(), eq(variables['Architecture'], 'fxdependent'))
+
+  - template: /.pipelines/templates/step/finalize.yml@self
diff --git a/.poshchan/settings.json b/.poshchan/settings.json
deleted file mode 100644
index 21ad0f08b48..00000000000
--- a/.poshchan/settings.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-    "version": "0.1",
-    "azdevops": {
-        "build_targets": {
-            "static": "PowerShell-CI-static-analysis",
-            "windows": "PowerShell-CI-Windows",
-            "macos": "PowerShell-CI-macOS",
-            "linux": "PowerShell-CI-Linux",
-            "ssh": "PowerShell-CI-SSH",
-            "all": [
-                "PowerShell-CI-static-analysis",
-                "PowerShell-CI-Windows",
-                "PowerShell-CI-macOS",
-                "PowerShell-CI-Linux",
-                "PowerShell-CI-SSH"
-            ]
-        },
-        "authorized_users": [
-            "adityapatwardhan",
-            "anmenaga",
-            "bergmeister",
-            "daxian-dbw",
-            "iSazonov",
-            "JamesWTruher",
-            "KirkMunro",
-            "PaulHigin",
-            "rjmholt",
-            "SteveL-MSFT",
-            "TravisEz13",
-            "TylerLeonhardt",
-            "vexx32"
-        ]
-    },
-    "failures": {
-        "authorized_users": [
-            "adityapatwardhan",
-            "anmenaga",
-            "bergmeister",
-            "daxian-dbw",
-            "IISResetMe",
-            "iSazonov",
-            "JamesWTruher",
-            "KirkMunro",
-            "kwkam",
-            "PaulHigin",
-            "powercode",
-            "rjmholt",
-            "rkeithhill",
-            "SteveL-MSFT",
-            "TravisEz13",
-            "TylerLeonhardt",
-            "vexx32"
-        ]
-    },
-    "reminders": {
-        "authorized_users": "*"
-    }
-}
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000000..222861c3415
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,4 @@
+{
+  "tabWidth": 2,
+  "useTabs": false
+}
diff --git a/.spelling b/.spelling
index 42a757b509d..cc711f0aa5a 100644
--- a/.spelling
+++ b/.spelling
@@ -8,13 +8,18 @@
 0xfeeddeadbeef
 100ms
 1redone
+1.final
 2.x
 2ae5d07
 32-bit
+4.final
 64-bit
+AAATechGuy
 about_
 about_debuggers
 about_jobs
+about_Telemetry
+about_PSDesiredStateConfiguration
 acl
 adamdriscoll
 add-localgroupmember
@@ -27,6 +32,8 @@ adityapatwardhan
 ADOPTERS.md
 aetos382
 aiello
+Aishat452
+al-cheb
 alepauly
 alexandair
 alexjordan6
@@ -45,6 +52,7 @@ alpha.9
 alternatestream
 alvarodelvalle
 amd64
+ananya26-vishnoi
 andschwa
 anmenaga
 api
@@ -53,23 +61,29 @@ APIScan
 appimage
 applocker
 appveyor
+appx
+ArchitectureSensitiveAttribute
 args
 argumentlist
 arm32
 arm64
 asp.net
+ast.cs
 assemblyloadcontext
 AssemblyInfo
 assessibility
+AtariDreams
 authenticode
 authenticodesignature
 azdevops
 AzFileCopy
+AzureFileCopy
 azurerm.netcore.preview
 azurerm.profile.netcore.preview
 azurerm.resources.netcore.preview
 backgrounded
 backgrounding
+backport
 beatcracker
 bergmeister
 beta.1
@@ -81,40 +95,57 @@ beta.6
 beta.7
 beta.8
 beta.9
+beta.406
+beta.507
 beta2
 bgelens
 Bhaal22
+BinaryFormatter
 bjh7242
+bnot
 bool
 bpayette
 brcrista
 breakpoint
 brianbunke
 britishben
+brotli
 brucepay
 bugfix
 build.json
 build.psm1
 bulid
+buildInfoJson
 callmejoebob
+CarloToso
 catchable
 cdxml
 celsius
 CentOS
+CimDscParser
+codeql-action
+CGManifest
+cgmanifest.json
+cgmanifest
 changelog
 changelog.md
 changelogs
 changeset
 changesets
 channel9
+charltonstanley
 charset
 checkbox
 checksum
 chibi
 childitem
+ChuckieChen945
 ChrisLGardner
+chrullrich
 cimsession
 cimsupport
+ci.psm1
+cgmanifest
 classlib
 clear-itemproperty
 cloudydino
@@ -132,10 +163,14 @@ CodeFormatter
 codeowner
 codepage
 commanddiscovery
+CommandInvocationIntrinsics
 commandsearch
 CommandSearcher
 comobject
+Compiler.cs
 composability
+computerinfo
+ComRuntimeHelpers.cs
 config
 connect-pssession
 consolehost
@@ -163,6 +198,8 @@ CorePsAssemblyLoadContext.cs
 coveralls.exe
 coveralls.io.
 coveralls.net
+CreateFile
+CreateFileW
 credssp
 cron
 crontab
@@ -176,9 +213,11 @@ ctrl
 CurrentCulture
 CustomShellCommands.cs
 DamirAinullin
+DarylGraves
 darquewarrior
 darwinjs
 DateTime
+DateTime.UnixEpoch
 daxian-dbw
 dayofweek
 dchristian3188
@@ -214,23 +253,28 @@ displaydataquery
 Distribution_Request.md
 distro
 distros
+dkaszews
 dll
+DllImport
 dlls
 dlwyatt
 dockerbasedbuild
 dockerfile
 dockerfiles
-docs.microsoft.com
+learn.microsoft.com
 doctordns
 don'ts
 dongbo
 dotcover
 dotnet
 dotnetcore
+dotnetmetadata.json
 DotnetRutimeMetadata.json
+DotnetRuntimeMetadata.json
 dottedscopes
 downlevel
 dropdown
+dwtaber
 e.g.
 ebook
 ebooks
@@ -254,6 +298,7 @@ ergo3114
 errorrecord
 etl
 eugenesmlv
+EventLogLogProvider
 excludeversion
 exe
 executables
@@ -265,25 +310,32 @@ export-clixml
 export-csv
 export-formatdata
 export-modulemember
+fabricbot.json
 failurecode
 failurecount
+farmerau
 fbehrens
 felixfbecker
 ffeldhaus
 ffi
+fflaten
+File.OpenHandle
 filecatalog
 filename
 filesystem
 filesystemprovider
+files.wxs
 filterhashtable
 find-dscresource
 find-packageprovider
 find-rolecapability
+findMissingNotices.ps1
 firefox
 folderName
 foreach
 formatfileloading
 formatviewbinding
+FormatWideCommand
 Francisco-Gamino
 frontload
 fullclr
@@ -292,6 +344,7 @@ functionprovider
 FunctionTable
 fxdependent
 gabrielsroka
+GAC_Arm64
 gamified
 gc.regions.xml
 Generic.SortedList
@@ -332,32 +385,40 @@ get-typedata
 get-uiculture
 get-winevent
 get-wsmaninstance
+Get-WSManSupport
 GetExceptionForHR
 getparentprocess
 gettype
 Geweldig
+GigaScratch
 gitcommitid
 github
 githug
 gitter
 glachancecmaisonneuve
+global.json
 globbing
 GoogleTest
+gregsdennis
 GUIs
 gzip
 hackathons
+HashData
 HashSet
 hashtable
 hashtables
+hayhay27
 helloworld.ps1
 helpproviderwithcache
 helpproviderwithfullcache
 helpsystem
 hemant
 hemantmahawar
+Higinbotham
 himura2la
 hololens
 homebrew
+hostifaces
 hostname
 hotfix
 httpbin.org
@@ -365,6 +426,7 @@ httpbin's
 https
 hubuk
 hvitved
+i3arnon
 i.e.
 ico
 idera
@@ -382,7 +444,10 @@ includeide
 includeusername
 informationrecord
 initializers
+InitialSessionState.cs
+InlineAsTypeCheck
 install-packageprovider
+IntelliSense
 interactivetesting
 interop
 interoperation
@@ -391,6 +456,7 @@ invoke-cimmethod
 Invoke-DSCResource
 invoke-restmethod
 invoke-wsmanaction
+InvokeRestMethodCommand.Common
 iot
 isazonov
 iscore
@@ -410,19 +476,24 @@ joandrsn
 joeltankam
 joeyaiello
 jokajak
+JohnLBevan
+josea
 joshuacooper
 journalctl
 jpsnover
 json
 jsonconfigfileaccessor
+JsonSchema.Net
 judgement
 jumplist
 jwmoss
 kanjibates
 kasper3
 katacoda
+Kellen-Stuart
 kevinmarquette
 kevinoid
+KevRitchie
 keyfileparameter
 keyhandler
 khansen00
@@ -443,7 +514,9 @@ launch.json
 ldspits
 lee303
 Leonhardt
+Libera.Chat
 libicu
+LibraryImport
 libpsl
 libpsl-native
 libunwind8
@@ -459,18 +532,25 @@ lukexjeremy
 lupino3
 lynda.com
 lzybkr
+m1k0net
 M1kep
 mababio
 macos
 macports
 maertendmsft
 mahawar
+mailmap
 Markdig.Signed
+markdown.yml
+manifest.spdx.json
 markekraus
 marktiedemann
 Marusyk
 MarvTheRobot
+mattifestation
+matt9ucci
 mcbobke
+mcr.microsoft.com
 md
 meir017
 memberresolution
@@ -479,14 +559,19 @@ messageanalyzer
 metadata
 metadata.json
 miaromero
+michaeltlombardi
 microsoft
 Microsoft.ApplicationInsights
 Microsoft.CodeAnalysis.CSharp
+Microsoft.CodeAnalysis.NetAnalyzers
 microsoft.com
+Microsoft.Management
 microsoft.management.infrastructure.cimcmdlets
 microsoft.management.infrastructure.native
+Microsoft.Management.Infrastructure.Runtime.Win
 microsoft.net.test.sdk
 microsoft.powershell.archive
+Microsoft.PowerShell.Commands
 microsoft.powershell.commands.diagnostics
 microsoft.powershell.commands.management
 microsoft.powershell.commands.utility
@@ -501,14 +586,19 @@ microsoft.powershell.markdownrender
 microsoft.powershell.psreadline
 microsoft.powershell.security
 microsoft.powershell.utility
+Microsoft.Security.Extensions
+Microsoft.WSMan
 microsoft.wsman.management
 microsoft.wsman.runtime
 mikeTWC1984
 mirichmo
 mjanko5
 mkdir
+mkht
 mklement0
+ModuleCmdletBase.cs
 MohiTheFish
+Molkree
 move-itemproperty
 ms-psrp
 msbuild
@@ -524,11 +614,15 @@ mwrock
 myget
 namedpipe
 nameof
+NameObscurerTelemetryInitializer
 namespace
 nano
 nanoserver
+NativeCommandProcessor.cs
+NativeCultureResolver
 nativeexecution
 net5.0
+net10.0
 netcoreapp5.0
 netip.ps1.
 netstandard.dll
@@ -554,7 +648,10 @@ new-winevent
 new-wsmaninstance
 new-wsmansessionoption
 NextTurn
+ngharo
+Newtonsoft.Json
 NJsonSchema
+nohwnd
 NoMoreFood
 non-22
 non-cim
@@ -586,6 +683,7 @@ openssh
 openssl
 opensuse
 oss
+OutputType
 p1
 packagemanagement
 PackageVersion
@@ -593,8 +691,11 @@ parameshbabu
 parameterbinderbase
 parameterbindercontroller
 parameterbinding
+ParenExpression
 ParseError.ToString
+Path.Join
 pathresolution
+PathResolvedToMultiple
 patochun
 patwardhan
 paulhigin
@@ -603,7 +704,11 @@ payette
 perf
 perfview
 perfview.exe
+peter-evans
 petseral
+PingPathCommand.cs
+pinvoke
+pinvokes
 plaintext
 pluggable
 pluralsight
@@ -624,12 +729,15 @@ powershellgallery
 powershellget
 powershellmagazine.com
 powershellninja
+powershellpr0mpt
 powershellproperties
 ppadmavilasom
 pre-build
 pre-compiled
+pre-defined
 pre-generated
 pre-installed
+pre-parse
 pre-release
 pre-releases
 pre-requisites
@@ -637,6 +745,7 @@ prepend
 preprocessor
 preview.1
 preview.2
+preview.2.22153.17
 preview.3
 preview.4
 preview.5
@@ -645,18 +754,26 @@ preview.5.20278.13
 preview.5.20269.29
 preview.5.20268.9
 preview.5.20272.6
+preview.5.22307.18
 preview.6
 preview.6.20318.15
+preview.6.21355.2
 preview.7
 preview.7.20356.2
 preview.7.20358.6
 preview.7.20364.3
 preview.7.20366.2
 preview.7.20366.15
+preview.7.22377.5
 preview.4.20258.7
 preview.4.20229.10
+preview.4.22252.9
+preview.8
 preview1-24530-04
+preview1.22217.1
 preview7
+ProcessorArchitecture
+ProductCode
 productversion
 program.cs
 prototyyppi
@@ -675,8 +792,10 @@ PSGalleryModules
 psm1
 psobject
 psobjects
+psoptions.json
 psproxyjobs
 psreadline
+psresourceget
 psrp.windows
 psscriptanalyzer
 pssessionconfiguration
@@ -690,13 +809,19 @@ pvs-studio
 pwd
 pwrshplughin.dll
 pwsh
+pwsh.deps.json
 qmfrederik
 raghav710
+Random.Shared
 RandomNoun7
+RandomNumberGenerator.Fill
 raspbian
 rc
 rc.1
+rc.1.21455.2
+rc.1.21458.32
 rc.2
+rc.2.22477.20
 rc.3
 rc2-24027
 rc3-24011
@@ -706,11 +831,13 @@ readme.md
 readonly
 ReadyToRun
 rebase
+rebase.yml
 rebasing
 receive-pssession
 recurse
 reddit
 redhat
+redirections
 redistributable
 redistributables
 register-argumentcompleter
@@ -721,6 +848,8 @@ register-packagesource
 register-psrepository
 registryprovider
 relationlink
+releaseTools.psm1
+RemoteSessionNamedPipe
 remotesigned
 remoting
 remove-ciminstance
@@ -758,13 +887,17 @@ rkitover
 robo210
 ronn
 rpalo
+rpolley
+runas
 runspace
 runspaceinit
 runspaces
 runtime
 runtimes
+Ryan-Hutchison-USAF
 SA1026CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation
 Saancreed
+SafeRegistryHandle
 sample-dotnet1
 sample-dotnet2
 sarithsutha
@@ -778,6 +911,7 @@ scriptblock
 securestring
 seemethere
 select-xml
+SemanticChecks
 semver
 serverless
 sessionid
@@ -800,6 +934,7 @@ set-wsmaninstance
 set-wsmanquickconfig
 sethvs
 setversionvariables
+sha256
 ShaydeNofziger
 shellexecute
 shouldbeerrorid
@@ -808,6 +943,7 @@ Shriram0908
 silijon
 simonwahlin
 singleline
+sles15
 smes
 snapcraft
 snapin
@@ -825,6 +961,7 @@ start-codecoveragerun
 start-pspester
 stdin
 stevel-msft
+StevenLiekens
 stevend811
 stknohg
 strawgate
@@ -834,6 +971,7 @@ string.split
 stringbuilder
 stuntguy3000
 StyleCop
+subfolder
 submodule
 submodules
 sudo
@@ -851,6 +989,7 @@ System.IO.Packaging
 System.InvalidOperationException
 system.manage
 system.management.automation
+System.Management.Automation.utils
 systemd
 SytzeAndr
 tabcompletion
@@ -861,6 +1000,7 @@ TargetFramework
 test-modulemanifest
 test-pssessionconfigurationfile
 test-scriptfileinfo
+tar.gz
 test.ps1
 test.txt.
 Tests.ps1
@@ -868,6 +1008,7 @@ test1.txt
 test2.txt
 testcase
 testdrive
+TestPathCommand.cs
 tests.zip
 tgz
 theflyingcorpse
@@ -894,7 +1035,10 @@ toolset
 tracesource
 travisez13
 travisty
+trossr32
 truher
+TSAUpload
+turbedi
 TValue
 tylerleonhardt
 typecataloggen
@@ -903,9 +1047,11 @@ typegen
 typematch
 t_
 ubuntu
+ubuntu22.04
 uint
 un-versioned
 unicode
+UnixSocket
 unregister-event
 unregister-packagesource
 unregister-psrepository
@@ -913,12 +1059,15 @@ unregister-pssessionconfiguration
 unregistering
 untracked
 unvalidated
+UpdateDotnetRuntime.ps1
 update-formatdata
 update-modulemanifest
 update-scriptfileinfo
 update-typedata
 uri
+urizen-source
 urls
+UseMU
 userdata
 uservoice
 utf-8
@@ -933,6 +1082,7 @@ v0.4.0
 v0.5.0
 v0.6.0
 v141
+v2
 v3
 v4
 v5
@@ -955,11 +1105,23 @@ v6.2.4
 v7.0.0
 v7.0.3
 v7.0.4
+v7.0.9
 v7.1.0
+v7.1.6
+v7.1.7
+v7.2.2
+v7.2.6
+v7.3.0
+v7.4.0
+v7.0.12
+v7.0.13
 validatenotnullorempty
+ValidateSet
+varunsh-coder
 versioned
 versioning
 vexx32
+Virtualization
 visualstudio
 vmsilvamolina
 vorobev
@@ -971,6 +1133,8 @@ walkthrough
 webcmdlets
 weblistener
 webrequest
+webrequestpscmdlet.common.cs
+webresponseobject.common
 weltner
 wesholton84
 wget
@@ -981,11 +1145,16 @@ wildcards
 win32
 win32-openssh
 win7
+win8
 windos
+windows.json
 windowspsmodulepath
 windowsversion
 winrm
 wix
+wmentha
+WNetGetConnection
+WNetAddConnection2
 worrenb
 wpr
 wprui.exe
@@ -1008,8 +1177,10 @@ yecril71pl
 yml
 youtube
 Youssef1313
+Yulv-git
 zackjknight
 ComInterop
+ryneandal
 runtime#33060
 vexx32
 perf
@@ -1038,6 +1209,7 @@ unvalidated
 Geweldig
 mjanko5
 v7.0.0
+v7.0.10
 renehernandez
 ece-jacob-scott
 st0le
@@ -1055,6 +1227,126 @@ authenticode
 env
 MarianoAlipi
 Microsoft.PowerShell.Native
+davidBar-On
+parameterized
+misconfigured
+hez2010
+ZhiZe-ZG
+SecureStringHelper.FromPlainTextString
+ProcessBaseCommand.AllProcesses
+Parser.cs
+MultipleServiceCommandBase.AllServices
+JustinGrote
+Newtonsoft.Json
+minSize
+WGs
+wg-definitions
+thejasonhelmick
+winps
+componentization
+CimCmdlets
+Microsoft.PowerShell.Host
+PSDiagnostics
+nightlies
+wg
+Visio
+triaged
+lifecycle
+v2.0.5
+mutex
+gukoff
+dinhngtu
+globbed
+octos4murai
+PSCommand
+System.Management.Automation.ICommandRuntime
+AppDomain.CreateDomain
+AppDomain.Unload
+ProcessModule.FileName
+Environment.ProcessPath
+PSUtils.GetMainModule
+schuelermine
+SupportsShouldProcess
+Start-PSBootstrap
+DotnetMetadataRuntime.json
+deps.json
+Jaykul
+eltociear
+consolehost.proto
+IDisposable
+ConvertToJsonCommand
+CommandPathSearch
+UseCoalesceExpression
+UseSystemHashCode
+UseCoalesceExpressionForNullable
+substring
+RemoveAll
+MakeFieldReadonly
+Microsoft.Management.UI.Internal
+StringComparison
+osx-arm64
+crossgen2
+MartinGC94
+BrannenGH
+SergeyZalyadeev
+KiwiThePoodle
+Thomas-Yu
+cgmanifest.json
+mcr.microsoft.com
+global.json
+tar.gz
+psoptions.json
+manifest.spdx.json
+buildinfo
+SKUs
+vmImage
+InternalCommands.cs
+CommonCommandParameters.cs
+preview.6.22352.1
+v2.2.6
+ResultsComparer
+pre-defined
+System.Runtime.CompilerServices.Unsafe
+TabExpansion
+PSv2
+System.Data.SqlClient
+Microsoft.CSharp
+v7.2.10
+7.2.x
+v7.3.3
+http
+webcmdlet
+argumentexception.throwifnullorempty
+bitconverter.tostring
+convert.tohexstring
+requires.notnullorempty
+argumentoutofrangeexception.throwifnegativeorzero
+callerargumentexpression
+requires.notnull
+argumentnullexception
+throwifnull
+process.cs
+setrequestcontent
+streamhelper.cs
+invokerestmethodcommand.common.cs
+gethttpmethod
+httpmethod
+removenulls
+notnull
+argumentnullexception.throwifnull
+disable_telemetry
+langversion
+microsoft.extensions.objectpool
+microsoft.codeanalysis.analyzers
+benchmarkdotnet
+winforms
+MicrosoftDocs
+about_Scripts
+debugging-from-commandline
+about_Object_Creation
+about_Functions_Advanced
+Microsoft.PowerShell.SDK
+NuGet.org.
  - CHANGELOG.md
 aavdberg
 asrosent
@@ -1094,6 +1386,7 @@ weltkante
 kilasuit
 tnieto88
 Orca88
+OrderBy
 centreboard
 romero126
 Greg-Smulko
@@ -1123,7 +1416,9 @@ Francisco-Gamino
 adamdriscoll
 analytics
 deserialized
+string.Join
 string.Split
+StringSplitOptions.TrimEntries
 Dictionary.TryAdd
 Environment.NewLine
 ParseError.ToString
@@ -1146,6 +1441,35 @@ SetVersionVariables
 yml
 DateTime
 DeploymentScripts
+GetValues
+GetNames
+SessionStateStrings
+Enum.HasFlags
+ConsoleInfoErrorStrings.resx
+ContentHelper.Common.cs
+FusionAssemblyIdentity
+GlobalAssemblyCache
+StringManipulationHelper
+testexe.exe
+echocmdline
+MemoryExtensions.IndexOfAny
+PSv2CompletionCompleter
+RemoteRunspacePoolInternal.cs
+PSVersionInfo
+WildcardPattern
+UTF8Encoding
+PowerShell.Core.Instrumentation.man
+Encoding.Default
+WinTrust
+System.Runtime.CompilerServices.Unsafe
+azCopy
+APISets
+ApiScan
+System.Data.SqlClient
+minimatch
+2.final
+SessionStateInternal
+Microsoft.PowerShell.SDK
 Markdig.Signed
  - docs/debugging/README.md
 corehost
@@ -1197,7 +1521,9 @@ ini
 package.json
 jcotton42
 RPMs
- - CHANGELOG/preview.md
+PSDesiredStateConfiguration
+dotnet5
+ - CHANGELOG/7.2.md
 Gimly
 jborean93
 mkswd
@@ -1291,9 +1617,141 @@ powershell.config.json
 romero126
 boolean
 rtm.20526.5
-
+dbaileyut
+un-localized
+awakecoding
+bcwood
+ThrowTerminatingError
+DoesNotReturn
+GetValueOrDefault
+PSLanguageMode
+adamsitnik
+msixbundle
+PowerShell-Native#70
+AppxManifest.xml
+preview.9
+preview.10
+ArmaanMcleod
+entrypoint
+lselden
+SethFalco
+CodeQL
+slowy07
+rc.2.21505.57
+ThirdPartyNotices
+ThirdPartyNotices.txt
+cgmanifest.json
+buildinfo
+tar.gz
+psoptions.json
+manifest.spdx.json
+vPack
+kondratyev-nv
+v7.2.0
+v7.2.3
+cgmanifest.json
+pwsh.exe
+6.0.100-rtm.21527.11
+6.0.100-rc.2.21505.57
+ThirdPartyNotices.txt
+rtm.21527.11
+SKUs
+vmImage
+Ubuntu22.04
  - CHANGELOG/7.0.md
 codesign
 release-BuildJson
 yml
+dotnet5
+buildinfo
+SKUs
+CGManifest
+vmImage
+ci.psm1
+centos-7
+PSDesiredStateConfiguration
+NoLanguage
+createdump
+vPack
+PkgES
+ - test/perf/benchmarks/README.md
+benchmarked
+BenchmarkDotNet
+ - docs/community/working-group-definitions.md
+gaelcolas
+jdhitsolutions
+jhoneill
+kilasuit
+michaeltlombardi
+SeeminglyScience
+TobiasPSP
+ - CHANGELOG/7.3.md
+ayousuf23
+AzCopy.exe
+hammy3502
+PowerShellExecutionHelper.cs
+ClientRemotePowerShell
+DOTNET_ROOT
+SkipExperimentalFeatureGeneration
+AzCopy
+Start-PSBootStrap
+precheck
+SKUs
+powershell.config.json
+Microsoft.PowerShell.GlobalTool.Shim.csproj
+InvokeCommand
+UseDotNet
+vmImage
+NoLanguage
+GetValueOrDefault
+kondratyev-nv
+penimc_cor3.dll
+PkgES
+v7.2.0
+preview.9
+pwsh.exe
+XunitXml.TestLogger
+rtm.21527.11
+ThirdPartyNotices.txt
+buildinfo
+tar.gz
+rc.2.21505.57
+psoptions.json
+manifest.spdx.json
+AzureFileCopy
+vPack
+dotnet5
+buildinfo
+SKUs
+CGManifest
+vmImage
+ci.psm1
+jcotton42
 centos-7
+Security.types.ps1xml
+optout
+ - ADOPTERS.md
+MicrosoftPowerBIMgmt
+ - tools/clearlyDefined/readme.md
+ClearlyDefined
+ - CHANGELOG/preview.md
+stevenebutler
+spaette
+syntax-tm
+URIs
+typeDataXmlLoader.cs
+GetResponseObject
+ContentHelper
+BasicHtmlWebResponseObject
+WebRequestSession.cs
+dkattan
+preview.3.23178.7
+PoolNames
+techguy16
+sdwheeler
+MicrosoftDocs
+about_Scripts
+about_Object_Creation
+about_Functions_Advanced
+Microsoft.PowerShell.SDK
+NuGet.org.
diff --git a/.vsts-ci/install-ps.yml b/.vsts-ci/install-ps.yml
index 72f42551162..7190e228578 100644
--- a/.vsts-ci/install-ps.yml
+++ b/.vsts-ci/install-ps.yml
@@ -9,13 +9,8 @@ trigger:
     - feature*
   paths:
     include:
-    - /tools/install-powershell.sh
-    - /tools/installpsh-amazonlinux.sh
-    - /tools/installpsh-debian.sh
-    - /tools/installpsh-osx.sh
-    - /tools/installpsh-redhat.sh
-    - /tools/installpsh-suse.sh
-    - /tools/install-powershell.ps1
+    - /tools/install-powershell.*
+    - /tools/installpsh-*.sh
     - /.vsts-ci/install-ps.yml
 pr:
   branches:
@@ -26,11 +21,7 @@ pr:
   paths:
     include:
     - /tools/install-powershell.sh
-    - /tools/installpsh-amazonlinux.sh
-    - /tools/installpsh-debian.sh
-    - /tools/installpsh-osx.sh
-    - /tools/installpsh-redhat.sh
-    - /tools/installpsh-suse.sh
+    - /tools/installpsh-*.sh
     - /tools/install-powershell.ps1
     - /.vsts-ci/install-ps.yml
 
@@ -48,7 +39,19 @@ phases:
     jobName: InstallPowerShellUbuntu
     pool: ubuntu-latest
     verification: |
-      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"6.2.0")
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
+      {
+        throw "powershell was not upgraded: $($PSVersionTable.PSVersion)"
+      }
+
+- template: templates/install-ps-phase.yml
+  parameters:
+    scriptName: sudo ./tools/install-powershell.sh
+    jobName: InstallPowerShellMariner2
+    pool: ubuntu-latest
+    container: mcr.microsoft.com/powershell/test-deps:mariner-2.0
+    verification: |
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
       {
         throw "powershell was not upgraded: $($PSVersionTable.PSVersion)"
       }
@@ -60,7 +63,7 @@ phases:
     pool: ubuntu-latest
     container: pshorg/powershellcommunity-test-deps:amazonlinux-2.0
     verification: |
-      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"6.2.0")
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
       {
         throw "powershell was not upgraded: $($PSVersionTable.PSVersion)"
       }
@@ -72,7 +75,7 @@ phases:
     pool: ubuntu-latest
     container: pshorg/powershellcommunity-test-deps:amazonlinux-2.0
     verification: |
-      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"6.2.0")
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
       {
         throw "powershell was not upgraded: $($PSVersionTable.PSVersion)"
       }
@@ -105,7 +108,7 @@ phases:
     jobName: InstallPowerShellMacOS
     pool: macOS-latest
     verification: |
-      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"6.2.0")
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
       {
         # The script does not upgrade on  mac os https://github.com/PowerShell/PowerShell/issues/9322
         Write-Warning "powershell was not upgraded: $($PSVersionTable.PSVersion)"
@@ -124,7 +127,7 @@ phases:
     pool: ubuntu-latest
     verification: |
       Write-Verbose $PSVersionTable.PSVersion -verbose
-      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.0.0")
+      if ([Version]"$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor).$($PSVersionTable.PSVersion.Patch)" -lt [version]"7.3.0")
       {
         throw "powershell was not upgraded: $($PSVersionTable.PSVersion)"
       }
diff --git a/.vsts-ci/linux-daily.yml b/.vsts-ci/linux-daily.yml
index 6ab1832dfd9..10effadd1e3 100644
--- a/.vsts-ci/linux-daily.yml
+++ b/.vsts-ci/linux-daily.yml
@@ -18,23 +18,14 @@ pr:
   branches:
     include:
     - master
-    - release*
-    - feature*
   paths:
     include:
-    - '*'
-    exclude:
-    - tools/releaseBuild/*
-    - tools/releaseBuild/azureDevOps/templates/*
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
+    - .vsts-ci/linux-daily.yml
 
 variables:
   DOTNET_CLI_TELEMETRY_OPTOUT: 1
   POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
+  DOTNET_NOLOGO: 1
   __SuppressAnsiEscapeSequences: 1
 
 resources:
@@ -47,7 +38,7 @@ stages:
   jobs:
   - template: templates/ci-build.yml
     parameters:
-      pool: ubuntu-16.04
+      pool: ubuntu-20.04
       jobName: linux_build
       displayName: linux Build
 
@@ -55,13 +46,14 @@ stages:
   displayName: Test for Linux
   jobs:
   - job: linux_test
+    timeoutInMinutes: 90
     pool:
-      vmImage: ubuntu-16.04
+      vmImage: ubuntu-20.04
     displayName: Linux Test
 
     steps:
     - pwsh: |
-        Get-ChildItem -Path env:
+        Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
       displayName: Capture Environment
       condition: succeededOrFailed()
 
@@ -149,7 +141,7 @@ stages:
   - job: CodeCovTestPackage
     displayName: CodeCoverage and Test Packages
     pool:
-      vmImage: ubuntu-16.04
+      vmImage: ubuntu-20.04
     steps:
     - pwsh: |
         Import-Module .\tools\ci.psm1
diff --git a/.vsts-ci/linux-internal.yml b/.vsts-ci/linux-internal.yml
new file mode 100644
index 00000000000..b90ab0d9eb4
--- /dev/null
+++ b/.vsts-ci/linux-internal.yml
@@ -0,0 +1,115 @@
+# Pipeline to run Linux CI internally
+name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
+trigger:
+  # Batch merge builds together while a merge build is running
+  batch: true
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .dependabot/config.yml
+    - .pipelines/*
+    - test/perf/*
+pr:
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .dependabot/config.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .vsts-ci/misc-analysis.yml
+    - .vsts-ci/windows.yml
+    - .vsts-ci/windows/*
+    - tools/cgmanifest/*
+    - LICENSE.txt
+    - test/common/markdown/*
+    - test/perf/*
+    - tools/releaseBuild/*
+    - tools/install*
+    - tools/releaseBuild/azureDevOps/templates/*
+    - README.md
+    - .spelling
+    - .pipelines/*
+
+variables:
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
+
+resources:
+  repositories:
+    - repository: Docker
+      type: github
+      endpoint: PowerShell
+      name: PowerShell/PowerShell-Docker
+      ref: master
+
+stages:
+- stage: BuildLinuxStage
+  displayName: Build for Linux
+  jobs:
+  - template: templates/ci-build.yml
+    parameters:
+      pool: ubuntu-20.04
+      jobName: linux_build
+      displayName: linux Build
+
+- stage: TestUbuntu
+  displayName: Test for Ubuntu
+  dependsOn: [BuildLinuxStage]
+  jobs:
+  - template: templates/nix-test.yml
+    parameters:
+      name: Ubuntu
+      pool: ubuntu-20.04
+      purpose: UnelevatedPesterTests
+      tagSet: CI
+
+  - template: templates/nix-test.yml
+    parameters:
+      name: Ubuntu
+      pool: ubuntu-20.04
+      purpose: ElevatedPesterTests
+      tagSet: CI
+
+  - template: templates/nix-test.yml
+    parameters:
+      name: Ubuntu
+      pool: ubuntu-20.04
+      purpose: UnelevatedPesterTests
+      tagSet: Others
+
+  - template: templates/nix-test.yml
+    parameters:
+      name: Ubuntu
+      pool: ubuntu-20.04
+      purpose: ElevatedPesterTests
+      tagSet: Others
+
+  - template: templates/verify-xunit.yml
+    parameters:
+      pool: ubuntu-20.04
+
+- stage: PackageLinux
+  displayName: Package Linux
+  dependsOn: ["BuildLinuxStage"]
+  jobs:
+  - template: linux/templates/packaging.yml
+    parameters:
+      pool: ubuntu-20.04
diff --git a/.vsts-ci/linux.yml b/.vsts-ci/linux.yml
index be7de6d8fc5..5d9dc663e1c 100644
--- a/.vsts-ci/linux.yml
+++ b/.vsts-ci/linux.yml
@@ -1,3 +1,12 @@
+parameters:
+  - name: ContainerPattern
+    displayName: |
+      Pattern to match JobName of the container.
+      Update this to force a container.
+      `.` will match everything
+    type: string
+    default: .
+
 name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
 trigger:
   # Batch merge builds together while a merge build is running
@@ -11,9 +20,12 @@ trigger:
     include:
     - '*'
     exclude:
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .dependabot/config.yml
+    - .pipelines/*
+    - test/perf/*
 pr:
   branches:
     include:
@@ -22,83 +34,46 @@ pr:
     - feature*
   paths:
     include:
-    - '*'
-    exclude:
-    - test/common/markdown/*
-    - tools/releaseBuild/*
-    - tools/releaseBuild/azureDevOps/templates/*
-    - .vsts-ci/misc-analysis.yml
-    - .github/ISSUE_TEMPLATE/*
-    - .dependabot/config.yml
-    - .vsts-ci/windows.yml
-    - .vsts-ci/windows/*
+    - .vsts-ci/linux.yml
+    - .vsts-ci/linux/templates/packaging.yml
+    - assets/manpage/*
+    - build.psm1
+    - global.json
+    - nuget.config
+    - PowerShell.Common.props
+    - src/*.csproj
+    - tools/ci.psm1
+    - tools/packaging/*
 
 variables:
   DOTNET_CLI_TELEMETRY_OPTOUT: 1
   POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
+  DOTNET_NOLOGO: 1
   __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
 
 resources:
-- repo: self
-  clean: true
+  repositories:
+    - repository: Docker
+      type: github
+      endpoint: PowerShell
+      name: PowerShell/PowerShell-Docker
+      ref: master
 
 stages:
-- stage: BuildLinux
+- stage: BuildLinuxStage
   displayName: Build for Linux
   jobs:
   - template: templates/ci-build.yml
     parameters:
-      pool: ubuntu-16.04
+      pool: ubuntu-latest
       jobName: linux_build
       displayName: linux Build
 
-- stage: TestLinux
-  displayName: Test for Linux
+- stage: PackageLinux
+  displayName: Package Linux
+  dependsOn: ["BuildLinuxStage"]
   jobs:
-  - template: templates/nix-test.yml
+  - template: linux/templates/packaging.yml
     parameters:
-      name: Linux
-      pool: ubuntu-16.04
-      purpose: UnelevatedPesterTests
-      tagSet: CI
-
-  - template: templates/nix-test.yml
-    parameters:
-      name: Linux
-      pool: ubuntu-16.04
-      purpose: ElevatedPesterTests
-      tagSet: CI
-
-  - template: templates/nix-test.yml
-    parameters:
-      name: Linux
-      pool: ubuntu-16.04
-      purpose: UnelevatedPesterTests
-      tagSet: Others
-
-  - template: templates/nix-test.yml
-    parameters:
-      name: Linux
-      pool: ubuntu-16.04
-      purpose: ElevatedPesterTests
-      tagSet: Others
-
-  - template: templates/verify-xunit.yml
-    parameters:
-      pool: ubuntu-16.04
-
-- stage: CodeCovTestPackage
-  displayName: CodeCoverage and Test Packages
-  dependsOn: [] # by specifying an empty array, this stage doesn't depend on the stage before it
-  jobs:
-  - job: CodeCovTestPackage
-    displayName: CodeCoverage and Test Packages
-    pool:
-      vmImage: ubuntu-16.04
-    steps:
-    - pwsh: |
-        Import-Module .\tools\ci.psm1
-        New-CodeCoverageAndTestPackage
-      displayName: CodeCoverage and Test Package
+      pool: ubuntu-latest
diff --git a/.vsts-ci/linux/templates/packaging.yml b/.vsts-ci/linux/templates/packaging.yml
new file mode 100644
index 00000000000..8f77b8e24a0
--- /dev/null
+++ b/.vsts-ci/linux/templates/packaging.yml
@@ -0,0 +1,99 @@
+parameters:
+  pool: 'ubuntu-20.04'
+  parentJobs: []
+  name: 'Linux'
+
+jobs:
+- job: ${{ parameters.name }}_packaging
+  dependsOn:
+    ${{ parameters.parentJobs }}
+  pool:
+    vmImage: ${{ parameters.pool }}
+
+  displayName: ${{ parameters.name }} packaging
+
+  steps:
+  - task: UseDotNet@2
+    displayName: 'Use .NET Core sdk'
+    inputs:
+      useGlobalJson: true
+      packageType: 'sdk'
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture Environment
+    condition: succeededOrFailed()
+
+  - task: DownloadBuildArtifacts@0
+    displayName: 'Download build artifacts'
+    inputs:
+      downloadType: specific
+      itemPattern: |
+        build/**/*
+      downloadPath: '$(System.ArtifactsDirectory)'
+
+  - pwsh: |
+      Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
+    displayName: 'Capture Artifacts Directory'
+    continueOnError: true
+
+  - pwsh: |
+      Import-Module .\build.psm1
+      Start-PSBootstrap -Scenario Package
+    displayName: Bootstrap
+
+  - pwsh: |
+      Import-Module ./build.psm1
+    displayName: 'Capture Artifacts Directory'
+    continueOnError: true
+
+  - task: ExtractFiles@1
+    displayName: 'Extract Build ZIP'
+    inputs:
+      archiveFilePatterns: '$(System.ArtifactsDirectory)/build/build.zip'
+      destinationFolder: '$(System.ArtifactsDirectory)/bins'
+
+  - bash: |
+      find "$(System.ArtifactsDirectory)/bins" -type d -exec chmod +rwx {} \;
+      find "$(System.ArtifactsDirectory)/bins" -type f -exec chmod +rw {} \;
+    displayName: 'Fix permissions'
+    continueOnError: true
+
+  - pwsh: |
+      Get-ChildItem "$(System.ArtifactsDirectory)\bins\*" -Recurse -ErrorAction SilentlyContinue
+    displayName: 'Capture Extracted Build ZIP'
+    continueOnError: true
+
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
+      $options = (Get-PSOptions)
+      $rootPath = '$(System.ArtifactsDirectory)\bins'
+      $originalRootPath = Split-Path -path $options.Output
+      $path = Join-Path -path $rootPath -ChildPath (split-path -leaf -path $originalRootPath)
+      $pwshPath = Join-Path -path $path -ChildPath 'pwsh'
+      chmod a+x $pwshPath
+      $options.Output = $pwshPath
+      Set-PSOptions $options
+      Invoke-CIFinish
+    displayName: Packaging Tests
+    condition: succeeded()
+
+  - pwsh: |
+      Get-ChildItem "${env:BUILD_ARTIFACTSTAGINGDIRECTORY}\*.deb" -Recurse | ForEach-Object {
+        $packagePath = $_.FullName
+        Write-Host "Uploading $packagePath"
+        Write-Host "##vso[artifact.upload containerfolder=deb;artifactname=deb]$packagePath"
+      }
+      Get-ChildItem "${env:BUILD_ARTIFACTSTAGINGDIRECTORY}\*.rpm" -Recurse | ForEach-Object {
+        $packagePath = $_.FullName
+        Write-Host "Uploading $packagePath"
+        Write-Host "##vso[artifact.upload containerfolder=rpm;artifactname=rpm]$packagePath"
+      }
+      Get-ChildItem "${env:BUILD_ARTIFACTSTAGINGDIRECTORY}\*.tar.gz" -Recurse | ForEach-Object {
+        $packagePath = $_.FullName
+        Write-Host "Uploading $packagePath"
+        Write-Host "##vso[artifact.upload containerfolder=rpm;artifactname=rpm]$packagePath"
+      }
+    displayName: Upload packages
+    retryCountOnTaskFailure: 2
diff --git a/.vsts-ci/mac.yml b/.vsts-ci/mac.yml
index 5f487275bf2..678ded65259 100644
--- a/.vsts-ci/mac.yml
+++ b/.vsts-ci/mac.yml
@@ -11,10 +11,13 @@ trigger:
     include:
     - '*'
     exclude:
-    - /tools/releaseBuild/**/*
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
+    - tools/releaseBuild/**/*
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .dependabot/config.yml
+    - .pipelines/*
+    - test/perf/*
 pr:
   branches:
     include:
@@ -25,23 +28,31 @@ pr:
     include:
     - '*'
     exclude:
-    - test/common/markdown/*
-    - .vsts-ci/misc-analysis.yml
-    - .github/ISSUE_TEMPLATE/*
     - .dependabot/config.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .vsts-ci/misc-analysis.yml
+    - .vsts-ci/windows.yml
+    - .vsts-ci/windows/*
+    - tools/cgmanifest/*
+    - LICENSE.txt
+    - test/common/markdown/*
+    - test/perf/*
+    - tools/packaging/*
     - tools/releaseBuild/*
     - tools/releaseBuild/azureDevOps/templates/*
-    - /.vsts-ci/windows.yml
-    - /.vsts-ci/windows/*
+    - README.md
+    - .spelling
+    - .pipelines/*
 
 variables:
   DOTNET_CLI_TELEMETRY_OPTOUT: 1
   POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
+  DOTNET_NOLOGO: 1
   # Turn off Homebrew analytics
   HOMEBREW_NO_ANALYTICS: 1
   __SuppressAnsiEscapeSequences: 1
+  nugetMultiFeedWarnLevel: none
 
 resources:
 - repo: self
@@ -84,20 +95,20 @@ stages:
     parameters:
       pool: macOS-latest
 
-- stage: CodeCovTestPackage
-  displayName: CodeCoverage and Test Packages
-  dependsOn: [] # by specifying an empty array, this stage doesn't depend on the stage before it
+- stage: PackageMac
+  dependsOn: ['BuildMac']
+  displayName: Package macOS (bootstrap only)
   jobs:
-  - job: CodeCovTestPackage
-    displayName: CodeCoverage and Test Packages
-    pool:
-      vmImage: macOS-latest
-    steps:
-    - pwsh: |
-        # Remove old .NET SDKs
-        if (Test-Path -Path $HOME/.dotnet) {
-            Remove-Item $HOME/.dotnet -Recurse -Force
-        }
-        Import-Module .\tools\ci.psm1
-        New-CodeCoverageAndTestPackage
-      displayName: CodeCoverage and Test Package
+    - job: macos_packaging
+      pool:
+        vmImage: macOS-latest
+
+      displayName: macOS packaging (bootstrap only)
+      steps:
+        - checkout: self
+          clean: true
+        - pwsh: |
+            import-module ./build.psm1
+            start-psbootstrap -Scenario package
+          displayName: Bootstrap packaging
+          condition: succeededOrFailed()
diff --git a/.vsts-ci/misc-analysis.yml b/.vsts-ci/misc-analysis.yml
deleted file mode 100644
index 8c81c604270..00000000000
--- a/.vsts-ci/misc-analysis.yml
+++ /dev/null
@@ -1,109 +0,0 @@
-name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
-trigger:
-  # Batch merge builds together while a merge build is running
-  batch: true
-  branches:
-    include:
-    - master
-    - release*
-    - feature*
-
-pr:
-  branches:
-    include:
-    - master
-    - release*
-    - feature*
-
-resources:
-  repositories:
-  - repository: ComplianceRepo
-    type: github
-    endpoint: PowerShell
-    name: PowerShell/compliance
-    ref: master
-
-variables:
-  - name: repoFolder
-    value: PowerShell
-
-jobs:
-- job: CI_Compliance
-  displayName: CI Compliance
-
-  pool:
-    vmImage: windows-latest
-
-  variables:
-    - name: repoPath
-      value: $(Agent.BuildDirectory)\$(repoFolder)
-
-  steps:
-  - checkout: self
-    clean: true
-    path: $(repoFolder)
-
-  - checkout: ComplianceRepo
-
-  - template: ci-compliance.yml@ComplianceRepo
-
-- job: Linux_CI
-  displayName: Markdown and Common Tests
-
-  pool:
-    vmImage: ubuntu-16.04
-
-  variables:
-    - name: repoPath
-      value: $(Agent.BuildDirectory)/$(repoFolder)
-
-  steps:
-  - checkout: self
-    clean: true
-    path: $(repoFolder)
-
-  - checkout: ComplianceRepo
-
-  - powershell: |
-      Get-ChildItem -Path env:
-    displayName: Capture Environment
-    condition: succeededOrFailed()
-
-  - powershell: |
-      Install-module Pester -Scope CurrentUser -Force -MaximumVersion 4.99
-    displayName: Install Pester
-    condition: succeededOrFailed()
-
-  - bash: |
-      curl -o- --progress-bar -L https://yarnpkg.com/install.sh | bash
-    displayName: Bootstrap Yarn
-    condition: succeededOrFailed()
-
-  - bash: |
-      sudo yarn global add markdown-spellcheck@0.11.0
-    displayName: Install mdspell
-    condition: succeededOrFailed()
-
-  - bash: |
-      mdspell '**/*.md' '!**/Pester/**/*.md' --ignore-numbers --ignore-acronyms --report --en-us;
-    displayName: Test Spelling in Markdown
-    condition: succeededOrFailed()
-    workingDirectory: '$(repoPath)'
-
-  - ${{ if not(contains(variables['SYSTEM.COLLECTIONURI'],'mscodehub')) }}:
-    - pwsh: |
-        Import-module ./build.psm1
-        $path = Join-Path -Path $pwd -ChildPath './commonTestResults.xml'
-        $results = invoke-pester -Script ./test/common -OutputFile $path -OutputFormat NUnitXml -PassThru
-        Write-Host "##vso[results.publish type=NUnit;mergeResults=true;runTitle=Common Tests;publishRunAttachments=true;resultFiles=$path;]"
-        if($results.TotalCount -eq 0 -or $results.FailedCount -gt 0)
-        {
-          throw "Markdown tests failed"
-        }
-      displayName: Run Common Tests
-      condition: succeededOrFailed()
-      workingDirectory: '$(repoPath)'
-
-  - template: dailyBuildCompliance.yml@ComplianceRepo
-    parameters:
-      sourceScanPath: '$(repoPath)'
diff --git a/.vsts-ci/misc-analysis/generateMarkdownMatrix.yml b/.vsts-ci/misc-analysis/generateMarkdownMatrix.yml
new file mode 100644
index 00000000000..56a43accd55
--- /dev/null
+++ b/.vsts-ci/misc-analysis/generateMarkdownMatrix.yml
@@ -0,0 +1,46 @@
+parameters:
+  - name: jobName
+  - name: taskName
+
+jobs:
+- job: ${{ parameters.jobName }}
+  displayName: Generate Markdown Matrix
+
+  pool:
+    vmImage: ubuntu-20.04
+
+  variables:
+    - name: repoPath
+      value: $(Agent.BuildDirectory)/$(repoFolder)
+
+  steps:
+  - checkout: self
+    clean: true
+    path: $(repoFolder)
+
+  - powershell: |
+      $matrix = @{}
+      $matrix += @{
+        'root' = @{
+          markdown_folder = "$(repoPath)"
+          markdown_recurse = $false
+        }
+      }
+      Get-ChildItem -path '$(repoPath)' -Directory | Foreach-Object {
+        $folder = $_
+        $matrix += @{
+          $_.Name = @{
+            markdown_folder = $_.fullName
+            markdown_recurse = $true
+          }
+        }
+      }
+
+      $matrixJson = $matrix | ConvertTo-Json -Compress
+      $variableName = "matrix"
+      $command = "vso[task.setvariable variable=$variableName;isoutput=true]$($matrixJson)"
+      Write-Verbose "sending command: '$command'"
+      Write-Host "##$command"
+    displayName: Create Matrix
+    condition: succeededOrFailed()
+    name: ${{ parameters.taskName }}
diff --git a/.vsts-ci/psresourceget-acr.yml b/.vsts-ci/psresourceget-acr.yml
new file mode 100644
index 00000000000..225e2699533
--- /dev/null
+++ b/.vsts-ci/psresourceget-acr.yml
@@ -0,0 +1,155 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
+trigger:
+  # Batch merge builds together while a merge build is running
+  batch: true
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .dependabot/config.yml
+    - test/perf/*
+    - .pipelines/*
+pr:
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .dependabot/config.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .vsts-ci/misc-analysis.yml
+    - tools/cgmanifest/*
+    - LICENSE.txt
+    - test/common/markdown/*
+    - test/perf/*
+    - tools/packaging/*
+    - tools/releaseBuild/*
+    - tools/releaseBuild/azureDevOps/templates/*
+    - README.md
+    - .spelling
+    - .pipelines/*
+
+variables:
+  GIT_CONFIG_PARAMETERS: "'core.autocrlf=false'"
+  DOTNET_CLI_TELEMETRY_OPTOUT: 1
+  POWERSHELL_TELEMETRY_OPTOUT: 1
+  DOTNET_NOLOGO: 1
+  __SuppressAnsiEscapeSequences: 1
+  NugetSecurityAnalysisWarningLevel: none
+  nugetMultiFeedWarnLevel: none
+
+resources:
+- repo: self
+  clean: true
+
+stages:
+- stage: BuildWin
+  displayName: Build for Windows
+  jobs:
+  - template: templates/ci-build.yml
+
+- stage: TestWin
+  displayName: Test PSResourceGetACR
+  jobs:
+  - job: win_test_ACR
+    displayName: PSResourceGet ACR Tests
+    pool:
+      vmImage: 'windows-latest'
+
+    steps:
+    - pwsh: |
+        Get-ChildItem -Path env:
+      displayName: Capture Environment
+      condition: succeededOrFailed()
+
+    - task: DownloadBuildArtifacts@0
+      displayName: 'Download Build Artifacts'
+      inputs:
+        downloadType: specific
+        itemPattern: |
+          build/**/*
+        downloadPath: '$(System.ArtifactsDirectory)'
+
+    - pwsh: |
+        Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
+      displayName: 'Capture Artifacts Directory'
+      continueOnError: true
+
+    - pwsh: |
+        # Remove "Program Files\dotnet" from the env variable PATH, so old SDKs won't affect us.
+        Write-Host "Old Path:"
+        Write-Host $env:Path
+
+        $dotnetPath = Join-Path $env:SystemDrive 'Program Files\dotnet'
+        $paths = $env:Path -split ";" | Where-Object { -not $_.StartsWith($dotnetPath) }
+        $env:Path = $paths -join ";"
+
+        Write-Host "New Path:"
+        Write-Host $env:Path
+
+        # Bootstrap
+        Import-Module .\tools\ci.psm1
+        Invoke-CIInstall
+      displayName: Bootstrap
+
+    - pwsh: |
+        Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber
+        Install-Module -Name 'Microsoft.PowerShell.SecretStore' -force -SkipPublisherCheck -AllowClobber
+        $vaultPassword = ConvertTo-SecureString $("a!!"+ (Get-Random -Maximum ([int]::MaxValue))) -AsPlainText -Force
+        Set-SecretStoreConfiguration -Authentication None -Interaction None -Confirm:$false -Password $vaultPassword
+        Register-SecretVault -Name SecretStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
+      displayName: 'Install Secret store'
+
+    - task: AzurePowerShell@5
+      inputs:
+        azureSubscription: PSResourceGetACR
+        azurePowerShellVersion: LatestVersion
+        ScriptType: InlineScript
+        pwsh: true
+        inline: |
+          Write-Verbose -Verbose "Getting Azure Container Registry"
+          Get-AzContainerRegistry -ResourceGroupName 'PSResourceGet' -Name 'psresourcegettest' | Select-Object -Property *
+          Write-Verbose -Verbose "Setting up secret for Azure Container Registry"
+          $azt = Get-AzAccessToken
+          $tenantId = $azt.TenantID
+          Set-Secret -Name $tenantId -Secret $azt.Token -Verbose
+          $vstsCommandString = "vso[task.setvariable variable=TenantId]$tenantId"
+          Write-Host "sending " + $vstsCommandString
+          Write-Host "##$vstsCommandString"
+      displayName: 'Setup Azure Container Registry secret'
+
+    - pwsh: |
+        Import-Module .\build.psm1 -force
+        Import-Module .\tools\ci.psm1
+        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
+        $options = (Get-PSOptions)
+        $path = split-path -path $options.Output
+        $rootPath = split-Path -path $path
+        Expand-Archive -Path '$(System.ArtifactsDirectory)\build\build.zip' -DestinationPath $rootPath -Force
+
+        $pwshExe = Get-ChildItem -Path $rootPath -Recurse -Filter pwsh.exe | Select-Object -First 1
+
+        $outputFilePath = "$(Build.SourcesDirectory)\test\powershell\Modules\Microsoft.PowerShell.PSResourceGet\ACRTests.xml"
+        $cmdline = "`$env:ACRTESTS = 'true'; Invoke-Pester -Path '$(Build.SourcesDirectory)\test\powershell\Modules\Microsoft.PowerShell.PSResourceGet\Microsoft.PowerShell.PSResourceGet.Tests.ps1' -TestName 'PSResourceGet - ACR tests' -OutputFile $outputFilePath -OutputFormat NUnitXml"
+        Write-Verbose -Verbose "Running $cmdline"
+
+        & $pwshExe -Command $cmdline
+
+        Publish-TestResults -Title "PSResourceGet - ACR tests" -Path $outputFilePath -Type NUnit
+      displayName: 'PSResourceGet ACR functional tests using AzAuth'
diff --git a/.vsts-ci/sshremoting-tests.yml b/.vsts-ci/sshremoting-tests.yml
index 016f3bfddca..72c5710016b 100644
--- a/.vsts-ci/sshremoting-tests.yml
+++ b/.vsts-ci/sshremoting-tests.yml
@@ -23,23 +23,34 @@ pr:
     - '/test/SSHRemoting/*'
 
 variables:
-  DOTNET_CLI_TELEMETRY_OPTOUT: 1
-  POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
-  __SuppressAnsiEscapeSequences: 1
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 1
+  - name: POWERSHELL_TELEMETRY_OPTOUT
+    value: 1
+  - name: DOTNET_NOLOGO
+    value: 1
+  - name:  __SuppressAnsiEscapeSequences
+    value: 1
+  - name: NugetSecurityAnalysisWarningLevel
+    value: none
+# Prevents auto-injection of nuget-security-analysis@0
+  - name: skipNugetSecurityAnalysis
+    value: true
+
 
 resources:
 - repo: self
   clean: true
 jobs:
 - job: SSHRemotingTests
+  pool:
+    vmImage: ubuntu-20.04
   container: mcr.microsoft.com/powershell/test-deps:ubuntu-18.04
   displayName: SSH Remoting Tests
 
   steps:
   - pwsh: |
-      Get-ChildItem -Path env:
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
     displayName: Capture Environment
     condition: succeededOrFailed()
 
diff --git a/.vsts-ci/templates/ci-build.yml b/.vsts-ci/templates/ci-build.yml
index 9dc43bc8ebf..5ec458c3c5a 100644
--- a/.vsts-ci/templates/ci-build.yml
+++ b/.vsts-ci/templates/ci-build.yml
@@ -1,47 +1,84 @@
 parameters:
-  pool: 'vs2017-win2016'
-  jobName: 'win_build'
-  displayName: Windows Build
+  - name: pool
+    default: 'windows-latest'
+  - name: imageName
+    default: 'PSWindows11-ARM64'
+  - name: jobName
+    default: 'win_build'
+  - name: displayName
+    default: Windows Build
+  - name: PoolType
+    default: AzDoHosted
+    type: string
+    values:
+      - AzDoHosted
+      - 1esHosted
 
 jobs:
 - job: ${{ parameters.jobName }}
   pool:
-    vmImage: ${{ parameters.pool }}
+    ${{ if eq( parameters.PoolType, 'AzDoHosted') }}:
+      vmImage: ${{ parameters.pool }}
+    ${{ else }}:
+      name: ${{ parameters.pool }}
+      demands:
+      - ImageOverride -equals ${{ parameters.imageName }}
 
   displayName: ${{ parameters.displayName }}
 
   steps:
   - powershell: |
-      Get-ChildItem -Path env:
+      [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
+      $pwsh = Get-Command pwsh -ErrorAction SilentlyContinue -CommandType Application
+
+      if ($null -eq $pwsh) {
+        $powerShellPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'powershell'
+        Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1
+        ./install-powershell.ps1 -Destination $powerShellPath
+        $vstsCommandString = "vso[task.setvariable variable=PATH]$powerShellPath;$env:PATH"
+        Write-Host "sending " + $vstsCommandString
+        Write-Host "##$vstsCommandString"
+      }
+
+    displayName: Install PowerShell
+
+  - checkout: self
+    fetchDepth: 1000
+
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
     displayName: Capture Environment
     condition: succeededOrFailed()
 
-  - powershell:  Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
+  - pwsh:  Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
     displayName: Set Build Name for Non-PR
     condition: ne(variables['Build.Reason'], 'PullRequest')
 
-  - template: /tools/releaseBuild/azureDevOps/templates/insert-nuget-config-azfeed.yml
+  - ${{ if ne(variables['UseAzDevOpsFeed'], '') }}:
+    - template: /tools/releaseBuild/azureDevOps/templates/insert-nuget-config-azfeed.yml
 
-  - pwsh: |
-      if (Test-Path -Path $HOME/.dotnet) {
-          Remove-Item $HOME/.dotnet -Recurse -Force
-      }
-    displayName: Remove Old .NET SDKs
-    condition: succeededOrFailed()
+  - task: UseDotNet@2
+    displayName: 'Use .NET Core sdk'
+    inputs:
+      useGlobalJson: true
+      packageType: 'sdk'
 
   - pwsh: |
       Import-Module .\tools\ci.psm1
       Invoke-CIInstall -SkipUser
+      Write-Verbose -Verbose "Start Sync-PSTags"
+      Sync-PSTags -AddRemoteIfMissing
+      Write-Verbose -Verbose "End Sync-PSTags"
     displayName: Bootstrap
     condition: succeeded()
 
-  - powershell: |
+  - pwsh: |
       Import-Module .\tools\ci.psm1
       Invoke-CIBuild
     displayName: Build
     condition: succeeded()
 
-  - powershell: |
+  - pwsh: |
       Import-Module .\tools\ci.psm1
       Restore-PSOptions
       Invoke-CIxUnit -SkipFailing
diff --git a/.vsts-ci/templates/credscan.yml b/.vsts-ci/templates/credscan.yml
index f6ed5b8fd23..60094ff3d77 100644
--- a/.vsts-ci/templates/credscan.yml
+++ b/.vsts-ci/templates/credscan.yml
@@ -1,12 +1,12 @@
 parameters:
-  pool: 'Hosted VS2017'
+  pool: 'windows-latest'
   jobName: 'credscan'
   displayName: Secret Scan
 
 jobs:
 - job: ${{ parameters.jobName }}
   pool:
-    name: ${{ parameters.pool }}
+    vmImage: ${{ parameters.pool }}
 
   displayName: ${{ parameters.displayName }}
 
diff --git a/.vsts-ci/templates/install-ps-phase.yml b/.vsts-ci/templates/install-ps-phase.yml
index f521cda0444..4e650273264 100644
--- a/.vsts-ci/templates/install-ps-phase.yml
+++ b/.vsts-ci/templates/install-ps-phase.yml
@@ -22,7 +22,7 @@ jobs:
 
   steps:
   - pwsh: |
-      Get-ChildItem -Path env:
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
     displayName: Capture Environment
     condition: succeededOrFailed()
 
diff --git a/.vsts-ci/templates/nanoserver.yml b/.vsts-ci/templates/nanoserver.yml
deleted file mode 100644
index c989d01c2f8..00000000000
--- a/.vsts-ci/templates/nanoserver.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-parameters:
-  vmImage: 'windows-2019'
-  jobName: 'Nanoserver_Tests'
-  continueOnError: false
-
-jobs:
-
-- job: ${{ parameters.jobName }}
-  variables:
-    scriptName: ${{ parameters.scriptName }}
-
-  pool:
-    vmImage: ${{ parameters.vmImage }}
-
-  displayName: ${{ parameters.jobName }}
-
-  steps:
-  - script: |
-      set
-    displayName: Capture Environment
-    condition: succeededOrFailed()
-
-  - task: DownloadBuildArtifacts@0
-    displayName: 'Download Build Artifacts'
-    inputs:
-      downloadType: specific
-      itemPattern: |
-        build/**/*
-      downloadPath: '$(System.ArtifactsDirectory)'
-
-  - pwsh: |
-      Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
-    displayName: 'Capture Artifacts Directory'
-    continueOnError: true
-
-  - pwsh: |
-      Install-module Pester -Scope CurrentUser -Force -MaximumVersion 4.99
-    displayName: 'Install Pester'
-    continueOnError: true
-
-  - pwsh: |
-      Import-Module .\tools\ci.psm1
-      Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-      $options = (Get-PSOptions)
-      $path = split-path -path $options.Output
-      Write-Verbose "Path: '$path'" -Verbose
-      $rootPath = split-Path -path $path
-      Expand-Archive -Path '$(System.ArtifactsDirectory)\build\build.zip' -DestinationPath $rootPath -Force
-      Invoke-Pester -Path ./test/nanoserver -OutputFormat NUnitXml -OutputFile ./test-nanoserver.xml
-    displayName: Test
-    condition: succeeded()
-
-  - task: PublishTestResults@2
-    condition: succeededOrFailed()
-    displayName: Publish Nanoserver Test Results **\test*.xml
-    inputs:
-      testRunner: NUnit
-      testResultsFiles: '**\test*.xml'
-      testRunTitle: nanoserver
-      mergeTestResults: true
-      failTaskOnFailedTests: true
diff --git a/.vsts-ci/templates/nix-test.yml b/.vsts-ci/templates/nix-test.yml
index 6a1b6e6f9de..214ae14b2c6 100644
--- a/.vsts-ci/templates/nix-test.yml
+++ b/.vsts-ci/templates/nix-test.yml
@@ -1,78 +1,25 @@
 parameters:
   pool: 'macOS-latest'
-  parentJobs: []
   purpose: ''
   tagSet: 'CI'
   name: 'mac'
 
 jobs:
 - job: ${{ parameters.name }}_test_${{ parameters.purpose }}_${{ parameters.tagSet }}
-  dependsOn:
-    ${{ parameters.parentJobs }}
+
   pool:
     vmImage: ${{ parameters.pool }}
 
   displayName: ${{ parameters.name }} Test - ${{ parameters.purpose }} - ${{ parameters.tagSet }}
 
   steps:
-  - pwsh: |
-      Get-ChildItem -Path env:
-    displayName: Capture Environment
-    condition: succeededOrFailed()
-
-  - task: DownloadBuildArtifacts@0
-    displayName: 'Download build artifacts'
-    inputs:
-      downloadType: specific
-      itemPattern: |
-        build/**/*
-      downloadPath: '$(System.ArtifactsDirectory)'
-
-  - pwsh: |
-      Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
-    displayName: 'Capture Artifacts Directory'
-    continueOnError: true
-
-  - pwsh: |
-      if (Test-Path -Path $HOME/.dotnet) {
-          Remove-Item $HOME/.dotnet -Recurse -Force
-      }
-    displayName: Remove Old .NET SDKs
-    condition: succeededOrFailed()
-
-  - pwsh: |
-      Import-Module .\tools\ci.psm1
-      Invoke-CIInstall -SkipUser
-    displayName: Bootstrap
-
-  - task: ExtractFiles@1
-    displayName: 'Extract Build ZIP'
-    inputs:
-      archiveFilePatterns: '$(System.ArtifactsDirectory)/build/build.zip'
-      destinationFolder: '$(System.ArtifactsDirectory)/bins'
-
-  - bash: |
-      find "$(System.ArtifactsDirectory)/bins" -type d -exec chmod +rwx {} \;
-      find "$(System.ArtifactsDirectory)/bins" -type f -exec chmod +rw {} \;
-    displayName: 'Fix permissions'
-    continueOnError: true
-
-  - pwsh: |
-      Get-ChildItem "$(System.ArtifactsDirectory)\bins\*" -Recurse -ErrorAction SilentlyContinue
-    displayName: 'Capture Extracted Build ZIP'
-    continueOnError: true
-
-  - pwsh: |
-      Import-Module .\tools\ci.psm1
-      Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-      $options = (Get-PSOptions)
-      $rootPath = '$(System.ArtifactsDirectory)\bins'
-      $originalRootPath = Split-Path -path $options.Output
-      $path = Join-Path -path $rootPath -ChildPath (split-path -leaf -path $originalRootPath)
-      $pwshPath = Join-Path -path $path -ChildPath 'pwsh'
-      chmod a+x $pwshPath
-      $options.Output = $pwshPath
-      Set-PSOptions $options
-      Invoke-CITest -Purpose '${{ parameters.purpose }}' -TagSet '${{ parameters.tagSet }}'
-    displayName: Test
-    condition: succeeded()
+    - task: UseDotNet@2
+      displayName: 'Use .NET Core sdk'
+      inputs:
+        useGlobalJson: true
+        packageType: 'sdk'
+
+    - template: ./test/nix-test-steps.yml
+      parameters:
+        purpose: ${{ parameters.purpose }}
+        tagSet: ${{ parameters.tagSet }}
diff --git a/.vsts-ci/templates/test/nix-container-test.yml b/.vsts-ci/templates/test/nix-container-test.yml
new file mode 100644
index 00000000000..37c60a4c53b
--- /dev/null
+++ b/.vsts-ci/templates/test/nix-container-test.yml
@@ -0,0 +1,36 @@
+parameters:
+  pool: 'macOS-latest'
+  purpose: ''
+  tagSet: 'CI'
+  name: 'mac'
+
+jobs:
+- job: ${{ parameters.name }}_test_${{ parameters.purpose }}_${{ parameters.tagSet }}
+
+  dependsOn:
+    - getContainerJob
+
+  variables:
+    __INCONTAINER: 1
+    getContainerJob: $[ dependencies.getContainerJob.outputs['getContainerTask.containerName'] ]
+    containerBuildName: $[ dependencies.getContainerJob.outputs['getContainerTask.containerBuildName'] ]
+
+  container: $[ variables.getContainerJob ]
+
+  pool:
+    vmImage: ${{ parameters.pool }}
+
+  displayName: ${{ parameters.name }} Test - ${{ parameters.purpose }} - ${{ parameters.tagSet }}
+
+  steps:
+    - task: UseDotNet@2
+      displayName: 'Use .NET Core sdk'
+      inputs:
+        useGlobalJson: true
+        packageType: 'sdk'
+
+    - template: ./nix-test-steps.yml
+      parameters:
+        purpose: ${{ parameters.purpose }}
+        tagSet: ${{ parameters.tagSet }}
+        buildName: $(containerBuildName)
diff --git a/.vsts-ci/templates/test/nix-test-steps.yml b/.vsts-ci/templates/test/nix-test-steps.yml
new file mode 100644
index 00000000000..f15d59ea73a
--- /dev/null
+++ b/.vsts-ci/templates/test/nix-test-steps.yml
@@ -0,0 +1,60 @@
+parameters:
+  purpose: ''
+  tagSet: 'CI'
+  buildName: 'Ubuntu'
+
+steps:
+  - pwsh: |
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
+    displayName: Capture Environment
+    condition: succeededOrFailed()
+
+  - task: DownloadBuildArtifacts@0
+    displayName: 'Download build artifacts'
+    inputs:
+      downloadType: specific
+      itemPattern: |
+        build/**/*
+      downloadPath: '$(System.ArtifactsDirectory)'
+
+  - pwsh: |
+      Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
+    displayName: 'Capture Artifacts Directory'
+    continueOnError: true
+
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      Invoke-CIInstall -SkipUser
+    displayName: Bootstrap
+
+  - task: ExtractFiles@1
+    displayName: 'Extract Build ZIP'
+    inputs:
+      archiveFilePatterns: '$(System.ArtifactsDirectory)/build/build.zip'
+      destinationFolder: '$(System.ArtifactsDirectory)/bins'
+
+  - bash: |
+      find "$(System.ArtifactsDirectory)/bins" -type d -exec chmod +rwx {} \;
+      find "$(System.ArtifactsDirectory)/bins" -type f -exec chmod +rw {} \;
+    displayName: 'Fix permissions'
+    continueOnError: true
+
+  - pwsh: |
+      Get-ChildItem "$(System.ArtifactsDirectory)\bins\*" -Recurse -ErrorAction SilentlyContinue
+    displayName: 'Capture Extracted Build ZIP'
+    continueOnError: true
+
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
+      $options = (Get-PSOptions)
+      $rootPath = '$(System.ArtifactsDirectory)\bins'
+      $originalRootPath = Split-Path -path $options.Output
+      $path = Join-Path -path $rootPath -ChildPath (split-path -leaf -path $originalRootPath)
+      $pwshPath = Join-Path -path $path -ChildPath 'pwsh'
+      chmod a+x $pwshPath
+      $options.Output = $pwshPath
+      Set-PSOptions $options
+      Invoke-CITest -Purpose '${{ parameters.purpose }}' -TagSet '${{ parameters.tagSet }}' -TitlePrefix '${{ parameters.buildName }}'
+    displayName: Test
+    condition: succeeded()
diff --git a/.vsts-ci/templates/verify-xunit.yml b/.vsts-ci/templates/verify-xunit.yml
index 9e09584d5c3..b43cb9339f9 100644
--- a/.vsts-ci/templates/verify-xunit.yml
+++ b/.vsts-ci/templates/verify-xunit.yml
@@ -1,6 +1,6 @@
 parameters:
   parentJobs: []
-  pool: 'vs2017-win2016'
+  pool: 'windows-latest'
   jobName: 'xunit_verify'
 
 jobs:
@@ -19,12 +19,12 @@ jobs:
         xunit/**/*
       downloadPath: '$(System.ArtifactsDirectory)'
 
-  - powershell: |
+  - pwsh: |
       dir "$(System.ArtifactsDirectory)\*" -Recurse
     displayName: 'Capture artifacts directory'
     continueOnError: true
 
-  - powershell: |
+  - pwsh: |
       Import-Module .\tools\ci.psm1
       $xUnitTestResultsFile = "$(System.ArtifactsDirectory)\xunit\xUnitTestResults.xml"
 
diff --git a/.vsts-ci/templates/windows-test.yml b/.vsts-ci/templates/windows-test.yml
deleted file mode 100644
index b021e45f000..00000000000
--- a/.vsts-ci/templates/windows-test.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-parameters:
-  pool: 'Hosted VS2017'
-  parentJobs: []
-  purpose: ''
-  tagSet: 'CI'
-
-jobs:
-- job: win_test_${{ parameters.purpose }}_${{ parameters.tagSet }}
-  dependsOn:
-    ${{ parameters.parentJobs }}
-  pool:
-    name: ${{ parameters.pool }}
-
-  displayName: Windows Test - ${{ parameters.purpose }} - ${{ parameters.tagSet }}
-
-  steps:
-  - pwsh: |
-      Get-ChildItem -Path env:
-    displayName: Capture Environment
-    condition: succeededOrFailed()
-
-  - task: DownloadBuildArtifacts@0
-    displayName: 'Download Build Artifacts'
-    inputs:
-      downloadType: specific
-      itemPattern: |
-        build/**/*
-      downloadPath: '$(System.ArtifactsDirectory)'
-
-  - pwsh: |
-      Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
-    displayName: 'Capture Artifacts Directory'
-    continueOnError: true
-
-  # must be run frow Windows PowerShell
-  - powershell: |
-      # Remove "Program Files\dotnet" from the env variable PATH, so old SDKs won't affect us.
-      Write-Host "Old Path:"
-      Write-Host $env:Path
-
-      $dotnetPath = Join-Path $env:SystemDrive 'Program Files\dotnet'
-      $paths = $env:Path -split ";" | Where-Object { -not $_.StartsWith($dotnetPath) }
-      $env:Path = $paths -join ";"
-
-      Write-Host "New Path:"
-      Write-Host $env:Path
-
-      # Bootstrap
-      Import-Module .\tools\ci.psm1
-      Invoke-CIInstall
-    displayName: Bootstrap
-
-  - pwsh: |
-      Import-Module .\tools\ci.psm1
-      Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-      $options = (Get-PSOptions)
-      $path = split-path -path $options.Output
-      $rootPath = split-Path -path $path
-      Expand-Archive -Path '$(System.ArtifactsDirectory)\build\build.zip' -DestinationPath $rootPath -Force
-      Invoke-CITest -Purpose '${{ parameters.purpose }}' -TagSet '${{ parameters.tagSet }}'
-    displayName: Test
-    condition: succeeded()
diff --git a/.vsts-ci/windows-arm64.yml b/.vsts-ci/windows-arm64.yml
new file mode 100644
index 00000000000..1c4bc2ee8af
--- /dev/null
+++ b/.vsts-ci/windows-arm64.yml
@@ -0,0 +1,94 @@
+name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
+trigger:
+  # Batch merge builds together while a merge build is running
+  batch: true
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .dependabot/config.yml
+    - test/perf/*
+pr:
+  branches:
+    include:
+    - master
+    - release*
+    - feature*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - .dependabot/config.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .vsts-ci/misc-analysis.yml
+    - tools/cgmanifest/*
+    - LICENSE.txt
+    - test/common/markdown/*
+    - test/perf/*
+    - tools/packaging/*
+    - tools/releaseBuild/*
+    - tools/releaseBuild/azureDevOps/templates/*
+    - README.md
+    - .spelling
+
+variables:
+  - name: GIT_CONFIG_PARAMETERS
+    value: "'core.autocrlf=false'"
+  - name: DOTNET_CLI_TELEMETRY_OPTOUT
+    value: 1
+  - name: POWERSHELL_TELEMETRY_OPTOUT
+    value: 1
+  - name: DOTNET_NOLOGO
+    value: 1
+  - name: __SuppressAnsiEscapeSequences
+    value: 1
+  - group: PoolNames
+
+resources:
+- repo: self
+  clean: true
+
+stages:
+- stage: BuildWin
+  displayName: Build for Windows
+  jobs:
+  - template: templates/ci-build.yml
+    parameters:
+      pool: $(armPool)
+      PoolType: 1esHosted
+
+- stage: TestWin
+  displayName: Test for Windows
+  jobs:
+  - template: templates/windows-test.yml
+    parameters:
+      purpose: UnelevatedPesterTests
+      tagSet: CI
+      pool: $(armPool)
+
+  - template: templates/windows-test.yml
+    parameters:
+      purpose: ElevatedPesterTests
+      tagSet: CI
+      pool: $(armPool)
+
+  - template: templates/windows-test.yml
+    parameters:
+      purpose: UnelevatedPesterTests
+      tagSet: Others
+      pool: $(armPool)
+
+  - template: templates/windows-test.yml
+    parameters:
+      purpose: ElevatedPesterTests
+      tagSet: Others
+      pool: $(armPool)
+
+  - template: templates/verify-xunit.yml
diff --git a/.vsts-ci/windows-daily.yml b/.vsts-ci/windows-daily.yml
deleted file mode 100644
index f15d0926d1d..00000000000
--- a/.vsts-ci/windows-daily.yml
+++ /dev/null
@@ -1,178 +0,0 @@
-name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
-trigger:
-  # Batch merge builds together while a merge build is running
-  batch: true
-  branches:
-    include:
-    - master
-    - release*
-    - feature*
-  paths:
-    include:
-    - '*'
-    exclude:
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
-pr:
-  branches:
-    include:
-    - master
-    - release*
-    - feature*
-  paths:
-    include:
-    - '*'
-    exclude:
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
-
-variables:
-  GIT_CONFIG_PARAMETERS: "'core.autocrlf=false'"
-  DOTNET_CLI_TELEMETRY_OPTOUT: 1
-  POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
-  __SuppressAnsiEscapeSequences: 1
-
-resources:
-- repo: self
-  clean: true
-
-stages:
-- stage: BuildWin
-  displayName: Build for Windows
-  jobs:
-  - template: templates/ci-build.yml
-
-- stage: TestWin
-  displayName: Test for Windows
-  variables:
-  - group: CLR-CAP
-  jobs:
-  - job: win_test
-    pool:
-      vmImage: vs2017-win2016
-    displayName: Windows Test
-    timeoutInMinutes: 90
-
-    steps:
-    - pwsh: |
-        Get-ChildItem -Path env:
-      displayName: 'Capture Environment'
-      condition: succeededOrFailed()
-
-    - task: DownloadBuildArtifacts@0
-      displayName: 'Download Build Artifacts'
-      inputs:
-        downloadType: specific
-        itemPattern: |
-          build/**/*
-          xunit/**/*
-        downloadPath: '$(System.ArtifactsDirectory)'
-
-    - pwsh: |
-        Get-ChildItem "$(System.ArtifactsDirectory)\*" -Recurse
-      displayName: 'Capture Artifacts Directory'
-      continueOnError: true
-
-    - pwsh: |
-        $capRootDir = Join-Path ([System.IO.Path]::GetTempPath()) "CAP"
-        $capUtilDir = Join-Path $capRootDir "Utils"
-
-        if (Test-Path $capRootDir) { Remove-Item $capRootDir -Recurse -Force }
-        New-Item $capUtilDir -ItemType Directory > $null
-
-        $capZipFile = Join-Path $capRootDir "cap.zip"
-        Invoke-WebRequest -Uri https://pscoretestdata.blob.core.windows.net/dotnet-cap/windows.zip -OutFile $capZipFile
-        Unblock-File -Path $capZipFile
-        Expand-Archive -Path $capZipFile -DestinationPath $capUtilDir -Force
-
-        Write-Host "=== Capture CAP Util Directory ==="
-        Get-ChildItem $capUtilDir -Recurse
-
-        Write-Host "##vso[task.setvariable variable=CapRootDir]$capRootDir"
-        Write-Host "##vso[task.setvariable variable=CapUtilDir]$capUtilDir"
-      displayName: 'Download CAP package'
-      condition: succeededOrFailed()
-
-    # must be run frow Windows PowerShell
-    - powershell: |
-        # Remove "Program Files\dotnet" from the env variable PATH, so old SDKs won't affect us.
-        Write-Host "Old Path:"
-        Write-Host $env:Path
-
-        $dotnetPath = Join-Path $env:SystemDrive 'Program Files\dotnet'
-        $paths = $env:Path -split ";" | Where-Object { -not $_.StartsWith($dotnetPath) }
-        $env:Path = $paths -join ";"
-
-        Write-Host "New Path:"
-        Write-Host $env:Path
-
-        Import-Module .\tools\ci.psm1
-        Invoke-CIInstall
-      displayName: Bootstrap
-      condition: succeededOrFailed()
-
-    - pwsh: |
-        Import-Module .\build.psm1
-        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-        $path = Split-Path -Parent (Get-PSOutput -Options (Get-PSOptions))
-        $rootPath = Split-Path -Path $path
-        Expand-Archive -Path '$(System.ArtifactsDirectory)\build\build.zip' -DestinationPath $rootPath -Force
-      displayName: 'Unzip Build'
-      condition: succeeded()
-
-    - pwsh: |
-        Import-Module $(CapUtilDir)\CAPService.psm1
-        $dataDir = Start-TraceCollection -RootDir $(CapRootDir)
-        Write-Host "##vso[task.setvariable variable=CapDataDir]$dataDir"
-      displayName: 'Start CLR Trace Collection'
-      condition: succeeded()
-
-    - pwsh: |
-        Import-Module .\tools\ci.psm1
-        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-        Invoke-CITest -Purpose UnelevatedPesterTests -TagSet CI
-      displayName: Test - UnelevatedPesterTests - CI
-      condition: succeeded()
-
-    - pwsh: |
-        Import-Module .\tools\ci.psm1
-        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-        Invoke-CITest -Purpose ElevatedPesterTests -TagSet CI
-      displayName: Test - ElevatedPesterTests - CI
-      condition: succeededOrFailed()
-
-    - pwsh: |
-        Import-Module .\tools\ci.psm1
-        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-        Invoke-CITest -Purpose UnelevatedPesterTests -TagSet Others
-      displayName: Test - UnelevatedPesterTests - Others
-      condition: succeededOrFailed()
-
-    - pwsh: |
-        Import-Module .\tools\ci.psm1
-        Restore-PSOptions -PSOptionsPath '$(System.ArtifactsDirectory)\build\psoptions.json'
-        Invoke-CITest -Purpose ElevatedPesterTests -TagSet Others
-      displayName: Test - ElevatedPesterTests - Others
-      condition: succeededOrFailed()
-
-    - pwsh: |
-        Import-Module .\build.psm1
-        $xUnitTestResultsFile = '$(System.ArtifactsDirectory)\xunit\xUnitTestResults.xml'
-        Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile
-      displayName: Verify xUnit Test Results
-      condition: succeededOrFailed()
-
-    - pwsh: |
-        $capDataDir = '$(CapDataDir)'
-        $capModuleFile = '$(CapUtilDir)\CAPService.psm1'
-
-        if ((Test-Path $capModuleFile) -and (Test-Path $capDataDir)) {
-            Import-Module $capModuleFile
-            Stop-TraceCollection -DataDir $capDataDir -RepoRoot $pwd -IngressToken '$(CapIngressToken)'
-        }
-      displayName: 'Upload CLR Trace'
-      condition: always()
diff --git a/.vsts-ci/windows.yml b/.vsts-ci/windows.yml
index bdaa015832e..4171d09643d 100644
--- a/.vsts-ci/windows.yml
+++ b/.vsts-ci/windows.yml
@@ -11,9 +11,12 @@ trigger:
     include:
     - '*'
     exclude:
-    - /.vsts-ci/misc-analysis.yml
-    - /.github/ISSUE_TEMPLATE/*
-    - /.dependabot/config.yml
+    - .vsts-ci/misc-analysis.yml
+    - .github/ISSUE_TEMPLATE/*
+    - .github/workflows/*
+    - .dependabot/config.yml
+    - test/perf/*
+    - .pipelines/*
 pr:
   branches:
     include:
@@ -22,22 +25,27 @@ pr:
     - feature*
   paths:
     include:
-    - '*'
+    - .vsts-ci/templates/*
+    - .vsts-ci/windows.yml
+    - '*.props'
+    - build.psm1
+    - src/*
+    - test/*
+    - tools/buildCommon/*
+    - tools/ci.psm1
+    - tools/WindowsCI.psm1
     exclude:
-    - .vsts-ci/misc-analysis.yml
-    - .github/ISSUE_TEMPLATE/*
-    - .dependabot/config.yml
-    - tools/releaseBuild/*
-    - tools/releaseBuild/azureDevOps/templates/*
     - test/common/markdown/*
+    - test/perf/*
 
 variables:
   GIT_CONFIG_PARAMETERS: "'core.autocrlf=false'"
   DOTNET_CLI_TELEMETRY_OPTOUT: 1
   POWERSHELL_TELEMETRY_OPTOUT: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
+  DOTNET_NOLOGO: 1
   __SuppressAnsiEscapeSequences: 1
+  NugetSecurityAnalysisWarningLevel: none
+  nugetMultiFeedWarnLevel: none
 
 resources:
 - repo: self
diff --git a/.vsts-ci/windows/templates/windows-packaging.yml b/.vsts-ci/windows/templates/windows-packaging.yml
index 19d2be32618..d23b745c30f 100644
--- a/.vsts-ci/windows/templates/windows-packaging.yml
+++ b/.vsts-ci/windows/templates/windows-packaging.yml
@@ -1,35 +1,111 @@
 parameters:
-  pool: 'Hosted VS2017'
-  jobName: 'win_packaging'
-  architecture: 'x64'
-  channel: 'preview'
-  parentJobs: []
+  - name: pool
+    default: 'windows-latest'
+  - name: jobName
+    default: 'win_packaging'
+  - name: runtimePrefix
+    default: 'win7'
+  - name: architecture
+    default: 'x64'
+  - name: channel
+    default: 'preview'
 
 jobs:
 - job: ${{ parameters.jobName }}_${{ parameters.channel }}_${{ parameters.architecture }}
-  dependsOn:
-      ${{ parameters.parentJobs }}
+
+  variables:
+    - name: repoFolder
+      value: PowerShell
+    - name: repoPath
+      value: $(Agent.BuildDirectory)\$(repoFolder)
+    - name: complianceRepoFolder
+      value: compliance
+    - name: complianceRepoPath
+      value: $(Agent.BuildDirectory)\$(complianceRepoFolder)
+
   pool:
-    name: ${{ parameters.pool }}
+    vmImage: ${{ parameters.pool }}
 
   displayName: Windows Packaging - ${{ parameters.architecture }} - ${{ parameters.channel }}
 
   steps:
+  - checkout: self
+    clean: true
+    path: $(repoFolder)
+
+  - checkout: ComplianceRepo
+    clean: true
+    path: $(complianceRepoFolder)
+
   - powershell: |
-      Get-ChildItem -Path env:
+      Get-ChildItem -Path env: | Out-String -width 9999 -Stream | write-Verbose -Verbose
     displayName: Capture environment
     condition: succeededOrFailed()
 
-  - template: /tools/releaseBuild/azureDevOps/templates/insert-nuget-config-azfeed.yml
+  - pwsh: |
+      $PSVersionTable
+    displayName: Capture PowerShell Version Table
+    condition: succeededOrFailed()
+
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      Switch-PSNugetConfig -Source Public
+    displayName: Switch to public feeds
+    condition: succeeded()
+    workingDirectory: $(repoPath)
+
+  - task: UseDotNet@2
+    displayName: 'Use .NET Core sdk'
+    inputs:
+      useGlobalJson: true
+      packageType: 'sdk'
+      workingDirectory: $(repoPath)
 
   - pwsh: |
       Import-Module .\tools\ci.psm1
       Invoke-CIInstall -SkipUser
     displayName: Bootstrap
     condition: succeeded()
+    workingDirectory: $(repoPath)
+
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      New-CodeCoverageAndTestPackage
+      Invoke-CIFinish -Runtime ${{ parameters.runtimePrefix }}-${{ parameters.architecture }} -channel ${{ parameters.channel }} -Stage Build
+    displayName: Build
+    workingDirectory: $(repoPath)
+
+  - template: Sbom.yml@ComplianceRepo
+    parameters:
+      BuildDropPath: '$(System.ArtifactsDirectory)/mainBuild'
+      Build_Repository_Uri: $(build.repository.uri)
+      displayName: SBOM
+      sourceScanPath: '$(repoPath)\tools'
+      signSBOM: false
+
+  # This is needed as SBOM task removed the installed .NET and installs .NET 3.1
+  - pwsh: |
+      Import-Module .\tools\ci.psm1
+      Invoke-CIInstall -SkipUser
+    displayName: Bootstrap
+    condition: succeeded()
+    workingDirectory: $(repoPath)
+
+  - pwsh: |
+      $manifestFolder = Join-Path -Path '$(System.ArtifactsDirectory)/mainBuild' -ChildPath '_manifest'
+
+      if (-not (Test-Path $manifestFolder)) {
+        throw "_manifest folder does not exist under $(System.ArtifactsDirectory)/mainBuild"
+      }
+
+      $null = New-Item -Path "$manifestFolder/spdx_2.2/bsi.json" -Verbose -Force
+      $null = New-Item -Path "$manifestFolder/spdx_2.2/manifest.cat" -Verbose -Force
+
+    displayName: Create fake SBOM manifest signed files
 
   - pwsh: |
       Import-Module .\tools\ci.psm1
       New-CodeCoverageAndTestPackage
-      Invoke-CIFinish -Runtime win7-${{ parameters.architecture }} -channel ${{ parameters.channel }}
-    displayName: Build and Test Package
+      Invoke-CIFinish -Runtime ${{ parameters.runtimePrefix }}-${{ parameters.architecture }} -channel ${{ parameters.channel }} -Stage Package
+    displayName: Package and Test
+    workingDirectory: $(repoPath)
diff --git a/.vsts-ci/windows/windows-packaging.yml b/.vsts-ci/windows/windows-packaging.yml
index f471196d963..6b73ca05723 100644
--- a/.vsts-ci/windows/windows-packaging.yml
+++ b/.vsts-ci/windows/windows-packaging.yml
@@ -27,32 +27,18 @@ pr:
     - release*
     - feature*
   paths:
-    # file extension filters are not supported when this was written.
-    # This really should be /src/**/*.csproj
     include:
-    - .vsts-ci/windows/*
+    - .vsts-ci/windows/*.yml
     - assets/wix/*
     - build.psm1
     - global.json
     - nuget.config
     - PowerShell.Common.props
-    - src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj
-    - src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj
-    - src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj
-    - src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj
-    - src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj
-    - src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj
-    - src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj
-    - src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj
-    - src/Microsoft.PowerShell.MarkdownRender/Microsoft.PowerShell.MarkdownRender.csproj
-    - src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj
-    - src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj
-    - src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj
-    - src/Microsoft.WSMan.Runtime/Microsoft.WSMan.Runtime.csproj
-    - src/Modules/PSGalleryModules.csproj
-    - src/powershell-win-core/powershell-win-core.csproj
+    - src/*.csproj
+    - test/packaging/windows/*
     - tools/ci.psm1
     - tools/packaging/*
+    - tools/wix/*
 
 variables:
   - name: GIT_CONFIG_PARAMETERS
@@ -61,16 +47,24 @@ variables:
     value: 1
   - name: POWERSHELL_TELEMETRY_OPTOUT
     value: 1
-  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
-  - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
+  - name: DOTNET_NOLOGO
     value: 1
   - name: __SuppressAnsiEscapeSequences
     value: 1
   - group: fakeNugetKey
+  - name: SBOMGenerator_Formats
+    value: spdx:2.2
+  - name: nugetMultiFeedWarnLevel
+    value: none
 
 resources:
-- repo: self
-  clean: true
+  repositories:
+    - repository: ComplianceRepo
+      type: github
+      endpoint: PowerShell
+      name: PowerShell/compliance
+      ref: master
+
 stages:
 - stage: PackagingWin
   displayName: Packaging for Windows
@@ -86,3 +80,8 @@ stages:
     parameters:
       channel: preview
       architecture: x86
+  - template: templates/windows-packaging.yml
+    parameters:
+      channel: preview
+      architecture: arm64
+      runtimePrefix: win
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 110f56d16e6..d7d1bdd82ce 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -10,28 +10,28 @@ Example entry:
 ```
 -->
 
-This is a list of adopters of using PowerShell in production or in their products (in alphabetical order):
+This is a list of adopters using PowerShell in production or in their products (in alphabetical order):
 
-* [Azure Cloud Shell](https://shell.azure.com/) provides a batteries-included browser-based PowerShell environment used by Azure administrators to manage their environment.
+* [Azure Cloud Shell](https://shell.azure.com/) provides a battery-included browser-based PowerShell environment used by Azure administrators to manage their environment.
   It includes up-to-date PowerShell modules for `Azure`, `AzureAD`, `Exchange`, `Teams`, and many more.
-  More information about Azure Cloud Shell is available at [Azure Cloud Shell Overview.](https://docs.microsoft.com/azure/cloud-shell/overview)
-* [Azure Functions - PowerShell](https://github.com/Azure/azure-functions-powershell-worker) is a serverless compute service to execute PowerShell scripts in the cloud without worrying about managing resources.
-  In addition, Azure Functions provides client tools such as [`Az.Functions`](https://www.powershellgallery.com/packages/Az.Functions), a cross-platform PowerShell module to manage function apps and service plans in the cloud.
-  For more information about Functions, please visit [functions overview](https://docs.microsoft.com/azure/azure-functions/functions-overview).
-* [PowerShell Universal](https://ironmansoftware.com/powershell-universal) is a cross-platform web framework for PowerShell. 
-  It provides the ability to create robust, interactive websites, REST APIs, and Electron-based desktop apps with PowerShell script. 
-  More information about PowerShell Universal Dashboard is available at the [PowerShell Universal Dashboard Docs](https://docs.universaldashboard.io).
-* [System Frontier](https://systemfrontier.com/solutions/powershell/) provides dynamically generated web GUIs and REST APIs for PowerShell and other scripting languages.  
-  Enable non-admins like help desk and tier 1 support teams to execute secure web based tools on any platform `without admin rights`.  
-  Configure flexible RBAC permissions from an intuitive interface, without a complex learning curve.  
+  More information about Azure Cloud Shell is available at [Azure Cloud Shell Overview.](https://learn.microsoft.com/azure/cloud-shell/overview)
+* [Azure Functions - PowerShell](https://github.com/Azure/azure-functions-powershell-worker) is a serverless compute service to execute PowerShell scripts on the cloud without worrying about managing resources.
+  In addition, Azure Functions provides client tools such as [`Az.Functions`](https://www.powershellgallery.com/packages/Az.Functions), a cross-platform PowerShell module for managing function apps and service plans in the cloud.
+  For more information about Functions, please visit [functions overview](https://learn.microsoft.com/azure/azure-functions/functions-overview).
+* [PowerShell Universal](https://devolutions.net/powershell-universal) is a unified platform for PowerShell automation. It provides script execution, scheduling, APIs and interactive web-based dashboards. 
+* [System Frontier](https://systemfrontier.com/solutions/powershell/) provides dynamically generated web GUIs and REST APIs for PowerShell and other scripting languages.
+  Enable non-admins like help desk and tier 1 support teams to execute secure web based tools on any platform `without admin rights`.
+  Configure flexible RBAC permissions from an intuitive interface, without a complex learning curve.
   Script output along with all actions are audited. Manage up to 5,000 nodes for free with the [Community Edition](https://systemfrontier.com/solutions/community-edition/).
 * [Amazon AWS](https://aws.com) supports PowerShell in a wide variety of its products including [AWS tools for PowerShell](https://github.com/aws/aws-tools-for-powershell),
   [AWS Lambda Support For PowerShell](https://github.com/aws/aws-lambda-dotnet/tree/master/PowerShell) and [AWS PowerShell Tools for `CodeBuild`](https://docs.aws.amazon.com/powershell/latest/reference/items/CodeBuild_cmdlets.html)
   as well as supporting PowerShell Core in both Windows and Linux EC2 Images.
-* [Azure Resource Manager Deployment Scripts](https://docs.microsoft.com/azure/azure-resource-manager/templates/deployment-script-template) Complete the "last mile" of your Azure Resource Manager (ARM) template deployments with a Deployment Script, which enables you to run an arbitrary PowerShell script in the context of a deployment.
-  Designed to let you complete tasks that should be part of a deployment, but are not possible in an ARM template today — for example, creating a Key Vault certificate or querying an external API for a new CIDR block. 
-* [Azure Pipelines Hosted Agents](https://docs.microsoft.com/azure/devops/pipelines/agents/hosted?view=azure-devops) Windows, Ubuntu, and MacOS Agents used by Azure Pipelines customers have PowerShell pre-installed so that customers can make use of it for all their CI/CD needs.
-* [GitHub Actions Virtual Environments for Hosted Runners](https://help.github.com/actions/reference/virtual-environments-for-github-hosted-runners) Windows, Ubuntu, and macOS virtual environments used by customers of GitHub Actions include PowerShell out of the box.
+* [Azure Resource Manager Deployment Scripts](https://learn.microsoft.com/azure/azure-resource-manager/templates/deployment-script-template) Complete the "last mile" of your Azure Resource Manager (ARM) template deployments with a Deployment Script, which enables you to run an arbitrary PowerShell script in the context of a deployment.
+  It is designed to let you complete tasks that should be part of a deployment, but are not possible in an ARM template today — for example, creating a Key Vault certificate or querying an external API for a new CIDR block.
+* [Azure Pipelines Hosted Agents](https://learn.microsoft.com/azure/devops/pipelines/agents/hosted?view=azure-devops) Windows, Ubuntu, and macOS Agents used by Azure Pipelines customers have PowerShell pre-installed so that customers can make use of it for all their CI/CD needs.
+* [GitHub Actions Virtual Environments for Hosted Runners](https://help.github.com/actions/reference/virtual-environments-for-github-hosted-runners) Windows, Ubuntu, and macOS virtual environments are used by customers of GitHub Actions include PowerShell out of the box.
 * [GitHub Actions Python builds](https://github.com/actions/python-versions) GitHub Actions uses PowerShell to automate building Python from source for its runners.
 * [Microsoft HoloLens](https://www.microsoft.com/hololens) makes extensive use of PowerShell 7+ throughout the development cycle to automate tasks such as firmware assembly and automated testing.
-* [Windows 10 IoT Core](https://docs.microsoft.com/windows/iot-core/windows-iot-core) is a small form factor Windows edition for IoT devices and now you can easily include the [PowerShell package](https://github.com/ms-iot/iot-adk-addonkit/blob/master/Tools/IoTCoreImaging/Docs/Import-PSCoreRelease.md#Import-PSCoreRelease) in your imaging process.
+* [Power BI](https://powerbi.microsoft.com/) provides PowerShell users a set of cmdlets in [MicrosoftPowerBIMgmt](https://learn.microsoft.com/powershell/power-bi) module to manage and automate the Power BI service.
+  This is in addition to Power BI leveraging PowerShell, internally for various engineering systems and infrastructure for its service.
+* [Windows 10 IoT Core](https://learn.microsoft.com/windows/iot-core/windows-iot-core) is a small form factor Windows edition for IoT devices and now you can easily include the [PowerShell package](https://github.com/ms-iot/iot-adk-addonkit/blob/master/Tools/IoTCoreImaging/Docs/Import-PSCoreRelease.md#Import-PSCoreRelease) in your imaging process.
diff --git a/Analyzers.props b/Analyzers.props
index 14b63bff789..6f906496c73 100644
--- a/Analyzers.props
+++ b/Analyzers.props
@@ -1,5 +1,6 @@
 <Project>
   <ItemGroup>
-    <PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.312" PrivateAssets="all" />
+    <PackageReference Include="DotNetAnalyzers.DocumentationAnalyzers" Version="1.0.0-beta.59" PrivateAssets="all" />
+    <PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
   </ItemGroup>
 </Project>
diff --git a/CHANGELOG/6.0.md b/CHANGELOG/6.0.md
index b5993b5be30..52db53afabf 100644
--- a/CHANGELOG/6.0.md
+++ b/CHANGELOG/6.0.md
@@ -104,7 +104,7 @@
 work is required for Microsoft to continue to sign and release packages from the project as official Microsoft packages.
 
 - Remove `PerformWSManPluginReportCompletion`, which was not used, from `pwrshplugin.dll` (#5498) (Thanks @bergmeister!)
-- Remove exclusion for hang and add context exception for remaining instances (#5595)
+- Remove exclusion for unresponsive condition and add context exception for remaining instances (#5595)
 - Replace `strlen` with `strnlen` in native code (#5510)
 
 ## [6.0.0-rc] - 2017-11-16
@@ -766,9 +766,8 @@ For more information on this, we invite you to read [this blog post explaining P
 ### Move to .NET Core 2.0 (.NET Standard 2.0 support)
 
 PowerShell Core has moved to using .NET Core 2.0 so that we can leverage all the benefits of .NET Standard 2.0. (#3556)
-To learn more about .NET Standard 2.0, there's some great starter content [on Youtube](https://www.youtube.com/playlist?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY),
-on [the .NET blog](https://devblogs.microsoft.com/dotnet/introducing-net-standard/),
-and [on GitHub](https://github.com/dotnet/standard/blob/master/docs/faq.md).
+To learn more about .NET Standard 2.0, there's some great starter content [on Youtube](https://www.youtube.com/playlist?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY)
+and on [the .NET blog](https://devblogs.microsoft.com/dotnet/introducing-net-standard/).
 We'll also have more content soon in our [repository documentation](https://github.com/PowerShell/PowerShell/tree/master/docs) (which will eventually make its way to [official documentation](https://github.com/powershell/powershell-docs)).
 In a nutshell, .NET Standard 2.0 allows us to have universal, portable modules between Windows PowerShell (which uses the full .NET Framework) and PowerShell Core (which uses .NET Core).
 Many modules and cmdlets that didn't work in the past may now work on .NET Core, so import your favorite modules and tell us what does and doesn't work in our GitHub Issues!
@@ -781,7 +780,7 @@ Many modules and cmdlets that didn't work in the past may now work on .NET Core,
 
 If you want to opt-out of this telemetry, simply delete `$PSHome\DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY`.
 Even before the first run of Powershell, deleting this file will bypass all telemetry.
-In the future, we plan on also enabling a configuration value for whatever is approved as part of [RFC0015](https://github.com/PowerShell/PowerShell-RFC/blob/master/X-Rejected/RFC0015-PowerShell-StartupConfig.md).
+In the future, we plan on also enabling a configuration value for whatever is approved as part of [RFC0015](https://github.com/PowerShell/PowerShell-RFC/blob/master/Archive/Rejected/RFC0015-PowerShell-StartupConfig.md).
 We also plan on exposing this telemetry data (as well as whatever insights we leverage from the telemetry) in [our community dashboard](https://devblogs.microsoft.com/powershell/powershell-open-source-community-dashboard/).
 
 If you have any questions or comments about our telemetry, please file an issue.
diff --git a/CHANGELOG/6.1.md b/CHANGELOG/6.1.md
index f8e12f47001..59cf2842d78 100644
--- a/CHANGELOG/6.1.md
+++ b/CHANGELOG/6.1.md
@@ -428,7 +428,7 @@
 - Fix crash when terminal is reset (#6777)
 - Fix a module-loading regression that caused an infinite loop (#6843)
 - Further improve `PSMethod` to `Delegate` conversion (#6851)
-- Blacklist `System.Windows.Forms` from loading to prevent a crash (#6822)
+- Block list `System.Windows.Forms` from loading to prevent a crash (#6822)
 - Fix `Format-Table` where rows were being trimmed unnecessarily if there's only one row of headers (#6772)
 - Fix `SetDate` function in `libpsl-native` to avoid corrupting memory during `P/Invoke` (#6881)
 - Fix tab completions for hash table (#6839) (Thanks @iSazonov!)
diff --git a/CHANGELOG/6.2.md b/CHANGELOG/6.2.md
index 06ad8f41482..bf54f978eba 100644
--- a/CHANGELOG/6.2.md
+++ b/CHANGELOG/6.2.md
@@ -844,7 +844,7 @@
 
 ### Documentation and Help Content
 
-- Replace ambiguous `hang` term (#7902, #7931) (Thanks @iSazonov!)
+- Replace ambiguous term (#7902, #7931) (Thanks @iSazonov!)
 - Updating incorrect example of `PowerShell.Create()` (#7926) (Thanks @1RedOne!)
 - Update `governance.md` (#7927) (Thanks @tommymaynard!)
 - Add `cURL` to the Bash users list in `README.md` (#7948) (Thanks @vmsilvamolina!)
diff --git a/CHANGELOG/7.0.md b/CHANGELOG/7.0.md
index af21d0bd957..e054b34cfc9 100644
--- a/CHANGELOG/7.0.md
+++ b/CHANGELOG/7.0.md
@@ -1,5 +1,241 @@
 # 7.0 Changelog
 
+## [7.0.13] - 2022-10-20
+
+### Engine Updates and Fixes
+
+- Stop sending telemetry about `ApplicationType` (#18265)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 3.1.424 (#18272)</p>
+
+</summary>
+
+<ul>
+<li>Update Wix file for new assemblies (Internal 22873)</li>
+<li>Update the <code>cgmanifest.json</code> for <code>v7.0.13</code> (#18318)</li>
+<li>Update <code>Newtonsoft.Json</code> version for 7.0.13 release (#18259)</li>
+<li>Fix <code>build.psm1</code> to not specify both version and quality for <code>dotnet-install</code> (#18267)</li>
+<li>Update list of PowerShell team members in release tools(#18266)</li>
+<li>Move <code>cgmanifest</code> generation to daily (#18268)</li>
+<li>Disable static analysis CI on 7.0 (#18269)</li>
+</ul>
+
+</details>
+
+[7.0.13]: https://github.com/PowerShell/PowerShell/compare/v7.0.12...v7.0.13
+
+
+## [7.0.12] - 2022-08-11
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Export-PSSession` to not throw error when a rooted path is specified for `-OutputModule` (#17671)
+
+### Tests
+
+- Enable more tests to be run in a container. (#17294)
+- Switch to using GitHub action to verify markdown links for PRs (#17281)
+- Add `win-x86` test package to the build (#15517)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump .NET 3.1 SDK to <code>3.1.28</code></p>
+</summary>
+
+<ul>
+<li>Update wix file</li>
+<li>Add a finalize template which causes jobs with issues to fail (#17314)</li>
+<li>Make sure we execute tests on LTS package for older LTS releases (#17326)</li>
+<li>Update <code>AzureFileCopy</code> task and fix the syntax for specifying <code>pool</code> (#17013)</li>
+</ul>
+
+</details>
+
+[7.0.12]: https://github.com/PowerShell/PowerShell/compare/v7.0.11...v7.0.12
+
+## [7.0.11] - 2022-05-13
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 3.1.419</p>
+
+</summary>
+
+<ul>
+<li>Add explicit job name for approval tasks in Snap stage (#16579)</li>
+<li>Update to use <code>mcr.microsoft.com</code> (#17272)</li>
+<li>Update <code>global.json</code> and wix</li>
+<li>Put Secure supply chain analysis at correct place (#17273)</li>
+<li>Partial back-port of: Update a few tests to make them more stable in CI (#16944) (Internal 20648)</li>
+<li>Replace <code>.</code> in notices container name (#17292)</li>
+<li>Add an approval for releasing build-info json (#16351)</li>
+<li>Release build info json when it is preview (#16335)</li>
+<li>Add a major-minor build info JSON file (#16301)</li>
+<li>Update release instructions with link to new build (#17256)</li>
+<li>Add condition to generate release file in local dev build only (#17255)</li>
+<li>Removed old not-used-anymore docker-based tests for PS release packages (#16224)</li>
+<li>Publish global tool package for stable releases (#15961)</li>
+<li>Update to use <code>windows-latest</code> as the build agent image (#16831)</li>
+<li>Don't upload <code>dep</code> or <code>tar.gz</code> for <code>RPM</code> build because there are none. (#17224)</li>
+<li>Update to <code>vPack</code> task version 12 (#17225)</li>
+<li>Make RPM license recognized (#17223)</li>
+<li>Ensure <code>psoptions.json</code> and <code>manifest.spdx.json</code> files always exist in packages (#17226)</li>
+</ul>
+
+</details>
+
+[7.0.11]: https://github.com/PowerShell/PowerShell/compare/v7.0.10...v7.0.11
+
+## [7.0.10] - 2022-04-26
+
+### Engine Updates and Fixes
+
+- Fix for partial PowerShell module search paths, that can be resolved to CWD locations
+- Do not include node names when sending telemetry. (#16981) to v7.0.10 (Internal 20186,Internal 20261)
+
+### Tests
+
+- Re-enable `PowerShellGet` tests targeting PowerShell gallery (#17062)
+- Skip failing scriptblock tests (#17093)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 3.1.418</p>
+
+</summary>
+
+<ul>
+<li>Fixed package names verification to support multi-digit versions (Internal 20363)</li>
+<li>Fix build failure in `generate checksum file for packages` step - v7.0.10 (Internal 20275)</li>
+<li>Updated files.wxs for 7.0.10 (Internal 20208)</li>
+<li>Updated to .NET 3.1.24 / SDK 3.1.418 (Internal 20133)</li>
+<li>Disable broken macOS CI job, which is unused (Internal 20189)</li>
+<li>Update Ubuntu images to use Ubuntu 20.04 (#15906)</li>
+<li>Update dotnet-install script download link (Internal 19949)</li>
+<li>Create checksum file for global tools (Internal 19934)</li>
+<li>Make sure global tool packages are published in stable build (Internal 19623)</li>
+</ul>
+
+</details>
+
+[7.0.10]: https://github.com/PowerShell/PowerShell/compare/v7.0.9...v7.0.10
+
+## [7.0.9] - 2022-03-16
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 3.1.417</p>
+
+</summary>
+
+<ul>
+<li>Fix the NuGet SDK package creation (Internal 19569)</li>
+<li>Fix NuGet package compliance issues (#13045)</li>
+<li>Fix issues in release build (#16332)</li>
+<li>Enable ARM64 packaging for macOS (#15768)</li>
+<li>Update feed and analyzer dependency (#16327)</li>
+<li>Only upload stable <code>buildinfo</code> for stable releases (#16251)</li>
+<li>Opt-in to build security monitoring (#16911)</li>
+<li>Update experimental feature json files (#16838) (Thanks @!)</li>
+<li>Ensure alpine and arm SKUs have the PowerShell configuration file with experimental features enabled (#16823)</li>
+<li>Remove WiX install (#16834)</li>
+<li>Add Linux package dependencies for packaging (#16807)</li>
+<li>Switch to our custom images for build and release (#16801)</li>
+<li>Remove all references to <code>cmake</code> for the builds in this repo (#16578)</li>
+<li>Register NuGet source when generating <code>CGManifest</code> (#16570)</li>
+<li>Update Images used for release (#16580)</li>
+<li>Add Software Bill of Materials to the main packages (#16202, #16641, #16711)</li>
+<li>Add GitHub Workflow to keep notices up to date (#16284)</li>
+<li>Update the <code>vmImage</code> and PowerShell root directory for macOS builds (#16611)</li>
+<li>Update macOS build image and root folder for build (#16609)</li>
+<li>Add checkout to build json stage to get <code>ci.psm1</code> (#16399)</li>
+<li>Move mapping file into product repo and add Debian 11  (#16316)</li>
+</ul>
+
+</details>
+
+[7.0.9]: https://github.com/PowerShell/PowerShell/compare/v7.0.8...v7.0.9
+
+## [7.0.8] - 2021-10-14
+
+### Engine Updates and Fixes
+
+- Handle error from unauthorized access when removing `AppLocker` test files (#15881)
+- Handle error when the telemetry mutex cannot be created (#15574) (Thanks @gukoff!)
+- Configure `ApplicationInsights` to not send cloud role name (Internal 17099)
+- Disallow `Add-Type` in NoLanguage mode on a locked down machine (Internal 17521)
+
+### Tools
+
+- Add `.stylecop` to `filetypexml` and format it (#16025)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump .NET SDK to 3.1.414</p>
+</summary>
+
+<ul>
+<li>Update the nuget.config file used for building NuGet packages (Internal 17547)</li>
+<li>Sign the .NET <code>createdump</code> executable (#16229)</li>
+<li>Upgrade <code>set-value</code> package for markdown test (#16196)</li>
+<li>Move vPack build to 1ES Pool (#16169)</li>
+<li>Update to .NET SDK 3.1.414 (Internal 17532)</li>
+<li>Fix the macOS build by updating the pool image name (#16010)</li>
+<li>Move from PkgES hosted agents to 1ES hosted agents (#16023)</li>
+<li>Use Alpine 3.12 for building PowerShell for Alpine Linux (#16008)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix example nuget.config (#14349)
+
+[7.0.8]: https://github.com/PowerShell/PowerShell/compare/v7.0.7...v7.0.8
+
+## [7.0.7] - 2021-08-12
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Bump .NET SDK to 3.1.412
+</summary>
+
+<ul>
+<li>Remove cat file from <code>PSDesiredStateConfiguration</code> module (Internal 16722)</li>
+<li>Update .NET SDK to <code>3.1.412</code> (Internal 16717)</li>
+</ul>
+
+</details>
+
+[7.0.7]: https://github.com/PowerShell/PowerShell/compare/v7.0.6...v7.0.7
+
 ## [7.0.6] - 2021-03-11
 
 ### General Cmdlet Updates and Fixes
@@ -130,6 +366,8 @@ Bump .NET SDK to version <code>3.1.405</code>
 
 </details>
 
+[7.0.3]: https://github.com/PowerShell/PowerShell/compare/v7.0.2...v7.0.3
+
 ## [7.0.2] - 2020-06-11
 
 ### Engine Updates and Fixes
@@ -308,7 +546,7 @@ Move to .NET Core 3.1.202 SDK and update packages.
 - Skip null data in output data received handler to fix a `NullReferenceException` (#11448) (Thanks @iSazonov!)
 - Add `ssh` parameter sets for the parameter `-JobName` in `Invoke-Command` (#11444)
 - Adding `PowerShell Editor Services` and `PSScriptAnalyzer` to tracked modules (#11514)
-- Fix key exchange hang with `SecureString` for the `OutOfProc` transports (#11380, #11406)
+- Fix condition when key exchange stops responding with `SecureString` for the `OutOfProc` transports (#11380, #11406)
 - Add setting to disable the implicit `WinPS` module loading (#11332)
 
 ### General Cmdlet Updates and Fixes
@@ -1168,7 +1406,6 @@ Move to .NET Core 3.1.202 SDK and update packages.
 - Update docs for `6.2.0-rc.1` release (#9022)
 - Update release template (#8996)
 
-
 [7.0.3]: https://github.com/PowerShell/PowerShell/compare/v7.0.2...v7.0.3
 [7.0.2]: https://github.com/PowerShell/PowerShell/compare/v7.0.1...v7.0.2
 [7.0.1]: https://github.com/PowerShell/PowerShell/compare/v7.0.0...v7.0.1
diff --git a/CHANGELOG/7.1.md b/CHANGELOG/7.1.md
index 86b7a478c30..eba1998e29c 100644
--- a/CHANGELOG/7.1.md
+++ b/CHANGELOG/7.1.md
@@ -1,5 +1,140 @@
 # 7.1 Changelog
 
+## [7.1.7] - 2022-04-26
+
+### Engine Updates and Fixes
+
+- Fix for partial PowerShell module search paths, that can be resolved to CWD locations
+- Do not include node names when sending telemetry. (#16981) to v7.1.7 (Internal 20187,Internal 20260)
+
+### Tests
+
+- Re-enable `PowerShellGet` tests targeting PowerShell gallery (#17062)
+- Skip failing scriptblock tests (#17093)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 5.0.407</p>
+
+</summary>
+
+<ul>
+<li>Fix build failure in `generate checksum file for packages` step - v7.1.7 (Internal 20274)</li>
+<li>Updated files.wxs for 7.1.7 (Internal 20210)</li>
+<li>Updated to .NET 5.0.16 / SDK 5.0.407 (Internal 20131)</li>
+<li>Update Ubuntu images to use Ubuntu 20.04 (#15906)</li>
+<li>Update dotnet-install script download link (Internal 19950)</li>
+<li>Create checksum file for global tools (#17056) (Internal 19928)</li>
+<li>Make sure global tool packages are published in stable build (Internal 19624)</li>
+</ul>
+
+</details>
+
+[7.1.7]: https://github.com/PowerShell/PowerShell/compare/v7.1.6...v7.1.7
+
+## [7.1.6] - 2022-03-16
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 5.0.406</p>
+
+</summary>
+
+<ul>
+<li>Update the mapping file (#16316, Internal 19528)</li>
+<li>Remove code that handles dotnet5 feed (Internal 19525)</li>
+<li>Fix issues in release build (#16332)</li>
+<li>Enable ARM64 packaging for macOS (#15768)</li>
+<li>Update feed and analyzer dependency (#16327)</li>
+<li>Only upload stable <code>buildinfo</code> for stable releases (#16251)</li>
+<li>Opt-in to build security monitoring (#16911)</li>
+<li>Update experimental feature json files (#16838)</li>
+<li>Ensure alpine and arm SKUs have the PowerShell configuration file with experimental features enabled (#16823)</li>
+<li>Remove WiX install (#16834)</li>
+<li>Add Linux package dependencies for packaging (#16807)</li>
+<li>Switch to our custom images for build and release (#16801)</li>
+<li>Remove all references to <code>cmake</code> for the builds in this repo (#16578)</li>
+<li>Register NuGet source when generating <code>CGManifest</code> (#16570)</li>
+<li>Update images used for release (#16580)</li>
+<li>Add GitHub Workflow to keep notices up to date (#16284)</li>
+<li>Update the <code>vmImage</code> and PowerShell root directory for macOS builds (#16611)</li>
+<li>Add Software Bill of Materials to the main packages (#16202, #16641, #16711)</li>
+<li>Update macOS build image and root folder for build (#16609)</li>
+<li>Add diagnostics used to take corrective action when releasing <code>buildInfo</code> JSON file (#16404)</li>
+<li>Add checkout to build json stage to get <code>ci.psm1</code> (#16399)</li>
+</ul>
+
+</details>
+
+[7.1.6]: https://github.com/PowerShell/PowerShell/compare/v7.1.5...v7.1.6
+
+## [7.1.5] - 2021-10-14
+
+### Engine Updates and Fixes
+
+- Handle error from unauthorized access when removing `AppLocker` test files (#15881)
+- Test more thoroughly whether a command is `Out-Default` for transcription scenarios (#15653)
+- Handle error when the telemetry mutex cannot be created (#15574) (Thanks @gukoff!)
+- Configure `ApplicationInsights` to not send cloud role name (Internal 17100)
+- Disallow `Add-Type` in NoLanguage mode on a locked down machine (Internal 17522)
+
+### Tools
+
+- Add `.stylecop` to `filetypexml` and format it (#16025)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump .NET SDK to 5.0.402</p>
+</summary>
+
+<ul>
+<li>Upgrade <code>set-value</code> package for markdown test (#16196)</li>
+<li>Sign the .NET <code>createdump</code> executable (#16229)</li>
+<li>Move vPack build to 1ES Pool (#16169)</li>
+<li>Update to .NET SDK 5.0.402 (Internal 17537)</li>
+<li>Move from PkgES hosted agents to 1ES hosted agents (#16023)</li>
+<li>Fix the macOS build by updating the pool image name (#16010)</li>
+<li>Use Alpine 3.12 for building PowerShell for Alpine Linux (#16008)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix example nuget.config (#14349)
+
+[7.1.5]: https://github.com/PowerShell/PowerShell/compare/v7.1.4...v7.1.5
+
+## [7.1.4] - 2021-08-12
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Bump .NET SDK to version 5.0.400
+</summary>
+
+<ul>
+<li>Remove the cat file from <code>PSDesiredStateConfiguration</code> module (Internal 16723)</li>
+<li>Update .NET SDK version and other packages (Internal 16715)</li>
+</ul>
+
+</details>
+
+[7.1.4]: https://github.com/PowerShell/PowerShell/compare/v7.1.3...v7.1.4
+
 ## [7.1.3] - 2021-03-11
 
 ### Engine Updates and Fixes
diff --git a/CHANGELOG/7.2.md b/CHANGELOG/7.2.md
new file mode 100644
index 00000000000..c9bde27a841
--- /dev/null
+++ b/CHANGELOG/7.2.md
@@ -0,0 +1,1863 @@
+# 7.2 Changelog
+
+## [7.2.23] - 2024-08-20
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 6.0.425</p>
+
+</summary>
+
+<ul>
+<li>Add feature flags for removing network isolation</li>
+<li>Bump PackageManagement to 1.4.8.1 (#24162)</li>
+<li>Bump .NET to 6.0.425 (#24161)</li>
+<li>Skip build steps that do not have exe packages (#23945) (#24156)</li>
+<li>Use correct signing certificates for RPM and DEBs (#21522) (#24154)</li>
+<li>Fix exe signing with third party signing for WiX engine (#23878) (#24155)</li>
+<li>Fix error in the vPack release, debug script that blocked release (#23904)</li>
+<li>Add vPack release (#23898)</li>
+<li>Fix nuget publish download path</li>
+<li>Use correct signing certificates for RPM and DEBs (#21522)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update docs sample nuget.config (#24109) (#24157)
+
+[7.2.23]: https://github.com/PowerShell/PowerShell/compare/v7.2.22...v7.2.23
+
+## [7.2.22] - 2024-07-18
+
+### Engine Updates and Fixes
+
+- Resolve paths correctly when importing files or files referenced in the module manifest (Internal 31777 31788)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 6.0.424</p>
+
+</summary>
+
+<ul>
+<li>Enumerate over all signed zip packages</li>
+<li>Update TPN for release v7.2.22 (Internal 31807)</li>
+<li>Update CG Manifest for 7.2.22 (Internal 31804)</li>
+<li>Add macos signing for package files (#24015) (#24058)</li>
+<li>Update .NET version to 6.0.424 (#24033)</li>
+</ul>
+
+</details>
+
+[7.2.22]: https://github.com/PowerShell/PowerShell/compare/v7.2.21...v7.2.22
+
+## [7.2.21] - 2024-06-18
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Release 7.2.20 broadly (was previously just released to the .NET SDK containers.)</p><p>Release 7.2.20 broadly</p>
+
+</summary>
+
+<ul>
+<li>Fixes for change to new Engineering System.</li>
+<li>Create <code>powershell.config.json</code> for <code>PowerShell.Windows.x64</code> global tool (#23941) (#23942)</li>
+</ul>
+
+</details>
+
+[7.2.21]: https://github.com/PowerShell/PowerShell/compare/v7.2.19...v7.2.21
+
+## [7.2.20] - 2024-06-06
+
+Limited release for dotnet SDK container images.
+
+<summary>
+
+<p>Update .NET 6 to 6.0.31 and how global tool is generated</p>
+
+</summary>
+
+<ul>
+<li>Fixes for change to new Engineering System.</li>
+<li>Create <code>powershell.config.json</code> for <code>PowerShell.Windows.x64</code> global tool (#23941) (#23942)</li>
+<li>Update change log for v7.2.20</li>
+<li>Update installation on Wix module (#23808)</li>
+<li>Updates to package and release pipelines (#23800)</li>
+<li>Use feed with Microsoft Wix toolset (#21651)</li>
+<li>update wix package install (#21537)</li>
+<li>Use PSScriptRoot to find path to Wix module (#21611)</li>
+<li>Create the Windows.x64 global tool with shim for signing (#21559)</li>
+<li>Add branch counter variables for daily package builds (#21523)</li>
+<li>Official PowerShell Package pipeline (#21504)</li>
+<li>Add a PAT for fetching PMC cli (#21503)</li>
+<li>[StepSecurity] Apply security best practices (#21480)</li>
+<li>Fix build failure due to missing reference in <code>GlobalToolShim.cs</code> (#21388)</li>
+<li>Fix argument passing in <code>GlobalToolShim</code> (#21333)</li>
+<li>Update .NET 6 to 6.0.31 (Internal 31302)</li>
+<li>Re-apply the OneBranch changes to packaging.psm1&quot;</li>
+</ul>
+
+</details>
+
+[7.2.20]: https://github.com/PowerShell/PowerShell/compare/v7.2.19...v7.2.20
+
+## [7.2.19] - 2024-04-11
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET 6.0.29</p>
+
+</summary>
+
+<ul>
+<li>Allow artifacts produced by partially successful builds to be consumed by release pipeline</li>
+<li>Update SDK, dependencies and <code>cgmanifest</code> for <code>7.2.19</code></li>
+<li>Revert changes to <code>packaging.psm1</code></li>
+<li>Verify environment variable for OneBranch before we try to copy (#21441)</li>
+<li>Multiple fixes in official build pipeline (#21408)</li>
+<li>Add <code>dotenv</code> install as latest version does not work with current Ruby version (#21239)</li>
+<li>PowerShell co-ordinated build OneBranch pipeline (#21364)</li>
+<li>Remove <code>surrogateFile</code> setting of <code>APIScan</code> (#21238)</li>
+</ul>
+
+</details>
+
+[7.2.19]: https://github.com/PowerShell/PowerShell/compare/v7.2.18...v7.2.19
+
+## [7.2.18] - 2024-01-11
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 6.0.418</p>
+
+</summary>
+
+<ul>
+<li>Update <code>ThirdPartyNotices.txt</code> for v7.2.18 (Internal 29173)</li>
+<li>Update <code>cgmanifest.json</code> for v7.2.18 release (Internal 29161)</li>
+<li>Update .NET SDK to 6.0.418 (Internal 29141)</li>
+<li>Back port 3 build changes to <code>apiscan.yml</code> (#21036)</li>
+<li>Set the <code>ollForwardOnNoCandidateFx</code> in <code>runtimeconfig.json</code> to roll forward only on minor and patch versions (#20689)</li>
+<li>Remove the <code>ref</code> folder before running compliance (#20373)</li>
+<li>Fix the tab completion tests (#20867)</li>
+</ul>
+
+</details>
+
+[7.2.18]: https://github.com/PowerShell/PowerShell/compare/v7.2.17...v7.2.18
+
+## [7.2.17] - 2023-11-16
+
+### General Cmdlet Updates and Fixes
+
+- Redact Auth header content from ErrorRecord (Internal 28411)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET to version 6.0.417</p>
+
+</summary>
+
+<ul>
+<li>Bump to .NET 6.0.417 (Internal 28486)</li>
+<li>Copy azure blob with PowerShell global tool to private blob and move to CDN during release (Internal 28450)</li>
+</ul>
+
+</details>
+
+[7.2.17]: https://github.com/PowerShell/PowerShell/compare/v7.2.16...v7.2.17
+
+## [7.2.16] - 2023-10-26
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET 6 to version 6.0.416</p>
+
+</summary>
+
+<ul>
+<li>Fix release pipeline yaml</li>
+<li>Fix issues with merging backports in packaging (Internal 28158)</li>
+<li>Update .NET 6 and TPN (Internal 28149)</li>
+<li>Add runtime and packaging type info for mariner2 arm64 (#19450) (#20564)</li>
+<li>Add mariner arm64 to PMC release (#20176) (#20567)</li>
+<li>Remove <code>HostArchitecture</code> dynamic parameter for <code>osxpkg</code> (#19917) (#20565)</li>
+<li>Use <code>fxdependent-win-desktop</code> runtime for compliance runs (#20326) (#20568)</li>
+<li>Add SBOM for release pipeline (#20519) (#20570)</li>
+<li>Increase timeout when publishing packages to <code>pacakages.microsoft.com</code> (#20470) (#20569)</li>
+<li>Add mariner arm64 package build to release build (#19946) (#20566)</li>
+</ul>
+
+</details>
+
+[7.2.16]: https://github.com/PowerShell/PowerShell/compare/v7.2.15...v7.2.16
+
+## [7.2.15] - 2023-10-10
+
+### Security Fixes
+
+- Block getting help from network locations in restricted remoting sessions (Internal 27699)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Build infrastructure maintenance</p>
+
+</summary>
+
+<ul>
+<li>Release build: Change the names of the PATs (#20315)</li>
+<li>Switch to GitHub Action for linting markdown (#20309)</li>
+<li>Put the calls to <code>Set-AzDoProjectInfo</code> and Set-AzDoAuthToken` in the right order (#20312)</li>
+</ul>
+
+</details>
+
+[7.2.15]: https://github.com/PowerShell/PowerShell/compare/v7.2.14...v7.2.15
+
+## [7.2.14] - 2023-09-18
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK version to 6.0.414</p>
+
+</summary>
+
+<ul>
+<li>Update to use .NET SDK 6.0.414 (Internal 27575)</li>
+<li>Enable <code>vPack</code> provenance data (#20242)</li>
+<li>Start using new packages.microsoft.com CLI (#20241)</li>
+<li>Remove spelling CI in favor of GitHub Action (#20239)</li>
+<li>Make PR creation tool use <code>--web</code> because it is more reliable (#20238)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds (#20237)</li>
+<li>Don't publish notice on failure because it prevents retry (#20236)</li>
+<li>Publish rpm package for rhel9 (#20234)</li>
+<li>Add <code>ProductCode</code> in registry for MSI install (#20233)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update man page to match current help for pwsh (#20240)
+- Update the link for getting started in `README.md` (#20235)
+
+[7.2.14]: https://github.com/PowerShell/PowerShell/compare/v7.2.13...v7.2.14
+
+## [7.2.13] - 2023-07-13
+
+### Tests
+
+- Increase the timeout to make subsystem tests more reliable (#19937)
+- Increase the timeout when waiting for the event log (#19936)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK version to 6.0.412</p>
+
+</summary>
+
+<ul>
+<li>Update Notice file (#19956)</li>
+<li>Update cgmanifest (#19938)</li>
+<li>Bump to 6.0.412 SDK (#19933)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds (#19935)</li>
+</ul>
+
+</details>
+
+[7.2.13]: https://github.com/PowerShell/PowerShell/compare/v7.2.12...v7.2.13
+
+## [7.2.12] - 2023-06-27
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET version to 6.0.411</p>
+
+</summary>
+
+<ul>
+<li>Disable SBOM signing for CI and add extra files for packaging tests (#19729)</li>
+<li>Update ThirdPartyNotices (Internal 26349)</li>
+<li>Update the cgmanifest</li>
+<li>Add PoolNames variable group to compliance pipeline (#19408)</li>
+<li>Add tool to trigger license information gathering for NuGet modules (#18827)</li>
+<li>Update to .NET 6.0.410 (#19798)</li>
+<li>Always regenerate files wxs fragment (#19803)</li>
+<li>Add prompt to fix conflict during backport (#19583)</li>
+<li>Add backport function to release tools (#19568)</li>
+<li>Do not remove <code>penimc_cor3.dll</code> from build (#18438)</li>
+<li>Remove unnecessary native dependencies from the package (#18213)</li>
+<li>Delete symbols on Linux as well (#19735)</li>
+<li>Bump <code>Microsoft.PowerShell.MarkdownRender</code> (#19751)</li>
+<li>Backport compliance changes  (#19719)</li>
+<li>Delete charset regular expression test (#19585)</li>
+<li>Fix issue with merge of 19068 (#19586)</li>
+<li>Update the team member list in <code>releaseTools.psm1</code> (#19574)</li>
+<li>Verify that packages have license data (#19543) (#19575)</li>
+<li>Update experimental-feature.json (#19581)</li>
+<li>Fix the regular expression used for package name check in <code>vPack</code> build (#19573)</li>
+<li>Make the vPack PAT library more obvious (#19572)</li>
+<li>Add an explicit manual stage for changelog update (#19551) (#19567)</li>
+</ul>
+
+</details>
+
+[7.2.12]: https://github.com/PowerShell/PowerShell/compare/v7.2.11...v7.2.12
+
+## [7.2.11] - 2023-04-12
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET version to 6.0.16</p>
+
+</summary>
+
+<ul>
+<li>Update ThirdPartyNotices.txt</li>
+<li>Update cgmanifest.json</li>
+<li>Fix the template that creates nuget package</li>
+<li>Update the wix file</li>
+<li>Update .NET SDK to 6.0.408</li>
+<li>Fix the build script and signing template</li>
+<li>Fix stage dependencies and typo in release build (#19353)</li>
+<li>Fix issues in release build and release pipeline (#19338)</li>
+<li>Restructure the package build to simplify signing and packaging stages (#19321)</li>
+<li>Skip VT100 tests on Windows Server 2012R2 as console does not support it (#19413)</li>
+<li>Improve package management acceptance tests by not going to the gallery (#19412)</li>
+<li>Test fixes for stabilizing tests (#19068)</li>
+<li>Add stage for symbols job in Release build (#18937)</li>
+<li>Use reference assemblies generated by dotnet (#19302)</li>
+<li>Add URL for all distributions (#19159)</li>
+<li>Update release pipeline to use Approvals and automate some manual tasks (#17837)</li>
+</ul>
+
+</details>
+
+[7.2.11]: https://github.com/PowerShell/PowerShell/compare/v7.2.10...v7.2.11
+
+## [7.2.10] - 2023-02-23
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET version to 6.0.14</p>
+
+</summary>
+
+<ul>
+<li>Fixed package names verification to support multi-digit versions (#17220)</li>
+<li>Add pipeline secrets (from #17837) (Internal 24413)</li>
+<li>Update to azCopy 10 (#18509)</li>
+<li>Update third party notices for v7.2.10 (Internal 24346)</li>
+<li>Update cgmanifest for v7.2.10 (Internal 24333)</li>
+<li>Pull latest patches for 7.2.10 dependencies (Internal 24325)</li>
+<li>Update SDK to 6.0.406 for v7.2.10 (Internal 24324)</li>
+<li>Add test for framework dependent package in release pipeline (#18506) (#19114)</li>
+<li>Mark 7.2.x releases as latest LTS but not latest stable (#19069)</li>
+</ul>
+
+</details>
+
+[7.2.10]: https://github.com/PowerShell/PowerShell/compare/v7.2.9...v7.2.10
+
+## [7.2.9] - 2023-01-24
+
+### Engine Updates and Fixes
+
+- Fix for JEA session leaking functions (Internal 23821 & 23819)
+
+### General Cmdlet Updates and Fixes
+
+- Correct incorrect cmdlet name in script (#18919)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET version to 6.0.13</p>
+
+</summary>
+
+<ul>
+<li>Create test artifacts for windows arm64 (#18932)</li>
+<li>Update dependencies for .NET release (Internal 23816)</li>
+<li>Don't install based on build-id for RPM (#18921)</li>
+<li>Apply expected file permissions to linux files after authenticode signing (#18922)</li>
+<li>Add authenticode signing for assemblies on linux builds (#18920)</li>
+</ul>
+
+</details>
+
+[7.2.9]: https://github.com/PowerShell/PowerShell/compare/v7.2.8...v7.2.9
+
+## [7.2.8] - 2022-12-13
+
+### Engine Updates and Fixes
+
+- Remove TabExpansion for PSv2 from remote session configuration (Internal 23294)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 6.0.403</p>
+
+</summary>
+
+<ul>
+<li>Update CGManifest and ThirdPartyNotices</li>
+<li>Update Microsoft.CSharp from 4.3.0 to 4.7.0</li>
+<li>Update to latest SDK (#18610)</li>
+<li>Allow two-digit revisions in vPack package validation pattern (#18569)</li>
+<li>Update outdated dependencies (#18576)</li>
+<li>Work around args parsing issue (#18606)</li>
+<li>Bump System.Data.SqlClient from 4.8.4 to 4.8.5 (#18515)</li>
+</ul>
+
+</details>
+
+[7.2.8]: https://github.com/PowerShell/PowerShell/compare/v7.2.7...v7.2.8
+
+## [7.2.7] - 2022-10-20
+
+### Engine Updates and Fixes
+
+- On Unix, explicitly terminate the native process during cleanup only if it's not running in background (#18280)
+- Stop sending telemetry about `ApplicationType` (#18168)
+
+### General Cmdlet Updates and Fixes
+
+- Remove the 1-second minimum delay in `Invoke-WebRequest` for downloading small files, and prevent file-download-error suppression (#18170)
+- Enable searching for assemblies in GAC_Arm64 on Windows (#18169)
+- Fix error formatting to use color defined in `$PSStyle.Formatting` (#18287)
+
+### Tests
+
+- Use Ubuntu 20.04 for SSH remoting test (#18289)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to version 6.0.402 (#18188)(#18290)</p>
+
+</summary>
+
+<ul>
+<li>Update cgmanifest (#18319)</li>
+<li>Fix <code>build.psm1</code> to find the required .NET SDK version when a higher version is installed (#17299) (#18282)</li>
+<li>Update MSI exit message (#18173)</li>
+<li>Remove XML files for min-size package (#18274)</li>
+<li>Update list of PS team members in release tools (#18171)</li>
+<li>Make the link to minimal package blob public during release (#18174)</li>
+<li>Add XML reference documents to NuPkg files for SDK (#18172)</li>
+<li>Update to use version 2.21.0 of Application Insights (#18271)</li>
+</ul>
+
+</details>
+
+[7.2.7]: https://github.com/PowerShell/PowerShell/compare/v7.2.6...v7.2.7
+
+## [7.2.6] - 2022-08-11
+
+### Engine Updates and Fixes
+
+- Fix `ForEach-Object -Parallel` when passing in script block variable (#16564)
+
+### General Cmdlet Updates and Fixes
+
+- Make `Out-String` and `Out-File` keep string input unchanged (#17455)
+- Update regular expression used to remove ANSI escape sequences to be more specific to decoration and hyperlinks (#16811)
+- Fix legacy `ErrorView` types to use `$host.PrivateData` colors (#17705)
+- Fix `Export-PSSession` to not throw error when a rooted path is specified for `-OutputModule` (#17671)
+
+### Tests
+
+- Disable RPM SBOM test. (#17532)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump .NET SDK to 6.0.8 (Internal 22065)</p>
+<p>We thank the following contributors!</p>
+<p>@tamasvajk</p>
+</summary>
+
+<ul>
+<li>Update Wix manifest</li>
+<li>Add AppX capabilities in MSIX manifest so that PS7 can call the AppX APIs (#17416)</li>
+<li>Use <code>Quality</code> only with <code>Channel</code> in <code>dotnet-install</code> (#17847)</li>
+<li>Fix <code>build.psm1</code> to not specify both version and quality for <code>dotnet-install</code> (#17589) (Thanks @tamasvajk!)</li>
+<li>Install .NET 3.1 as it is required by the vPack task</li>
+</ul>
+
+</details>
+
+[7.2.6]: https://github.com/PowerShell/PowerShell/compare/v7.2.5...v7.2.6
+
+## [7.2.5] - 2022-06-21
+
+### Engine Updates and Fixes
+
+- Fix native library loading for osx-arm64 (#17495) (Thanks @awakecoding!)
+
+### Tests
+
+- Make Assembly Load Native test work on a FX Dependent Linux Install (#17496)
+- Enable more tests to be run in a container. (#17294)
+- Switch to using GitHub Action to verify Markdown links for PRs (#17281)
+- Try to stabilize a few tests that fail intermittently (#17426)
+- TLS test fix back-port (#17424)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 6.0.301 (Internal 21218)</p>
+
+</summary>
+
+<ul>
+<li>Update Wix file (Internal 21242)</li>
+<li>Conditionally add output argument</li>
+<li>Rename mariner package to cm (#17506)</li>
+<li>Backport test fixes for 7.2 (#17494)</li>
+<li>Update dotnet-runtime version (#17472)</li>
+<li>Update to use <code>windows-latest</code> as the build agent image (#17418)</li>
+<li>Publish preview versions of mariner to preview repository (#17464)</li>
+<li>Move <code>cgmanifest</code> generation to daily (#17258)</li>
+<li>Fix mariner mappings (#17413)</li>
+<li>Make sure we execute tests on LTS package for older LTS releases (#17430)</li>
+<li>Add a finalize template which causes jobs with issues to fail (#17428)</li>
+<li>Make mariner packages Framework dependent (#17425)</li>
+<li>Base work for adding mariner amd64 package (#17417)</li>
+</ul>
+
+</details>
+
+[7.2.5]: https://github.com/PowerShell/PowerShell/compare/v7.2.4...v7.2.5
+
+## [7.2.4] - 2022-05-17
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 6.0.203</p>
+
+</summary>
+
+<ul>
+<li>Add mapping for Ubuntu22.04 Jammy (#17317)</li>
+<li>Update to use <code>mcr.microsoft.com</code> (#17272)</li>
+<li>Update third party notices</li>
+<li>Update global.json and wix</li>
+<li>Put Secure supply chain analysis at correct place (#17273)</li>
+<li>Fix web cmdlets so that an empty <code>Get</code> does not include a <code>content-length</code> header (#16587)</li>
+<li>Update package fallback list for Ubuntu (from those updated for Ubuntu <code>22.04</code>) (<code>deb</code>) (#17217)</li>
+<li>Add <code>sha256</code> digests to RPM packages (#17215)</li>
+<li>Allow multiple installations of dotnet. (#17216)</li>
+</ul>
+
+</details>
+
+[7.2.4]: https://github.com/PowerShell/PowerShell/compare/v7.2.3...v7.2.4
+
+## [7.2.3] - 2022-04-26
+
+### Engine Updates and Fixes
+
+- Fix for partial PowerShell module search paths, that can be resolved to CWD locations (Internal 20126)
+- Do not include node names when sending telemetry. (#16981) to v7.2.3 (Internal 20188)
+
+### Tests
+
+- Re-enable `PowerShellGet` tests targeting PowerShell gallery (#17062)
+- Skip failing scriptblock tests (#17093)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 6.0.202</p>
+
+</summary>
+
+<ul>
+<li>Making NameObscurerTelemetryInitializer internal - v7.2.3 (Internal 20239)</li>
+<li>Updated files.wxs for 7.2.3 (Internal 20211)</li>
+<li>Updated ThirdPartyNotices for 7.2.3 (Internal 20199)</li>
+<li>Work around issue with notice generation</li>
+<li>Replace <code>.</code> in notices container name</li>
+<li>Updated cgmanifest.json by findMissingNotices.ps1 in v7.2.3 (Internal 20190)</li>
+<li>v7.2.3 - Updated packages using dotnet-outdated global tool (Internal 20170)</li>
+<li>Updated to .NET 6.0.4 / SDK 6.0.202 (Internal 20128)</li>
+<li>Update dotnet-install script download link (Internal 19951)</li>
+<li>Create checksum file for global tools (#17056) (Internal 19935)</li>
+<li>Make sure global tool packages are published in stable build (Internal 19625)</li>
+<li>Fix release pipeline (Internal 19617)</li>
+</ul>
+
+</details>
+
+[7.2.3]: https://github.com/PowerShell/PowerShell/compare/v7.2.2...v7.2.3
+
+## [7.2.2] - 2022-03-16
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 6.0.201</p>
+
+</summary>
+
+<ul>
+<li>Update WiX file (Internal 19460)</li>
+<li>Update .NET SDK version to 6.0.201 (Internal 19457)</li>
+<li>Update experimental feature JSON files (#16838)</li>
+<li>Ensure Alpine and ARM SKUs have <code>powershell.config.json</code> file with experimental features enabled (#16823)</li>
+<li>Update the <code>vmImage</code> and PowerShell root directory for macOS builds (#16611)</li>
+<li>Update macOS build image and root folder for build (#16609)</li>
+<li>Remove WiX install (#16834)</li>
+<li>Opt-in to build security monitoring (#16911)</li>
+<li>Add SBOM manifest for release packages (#16641, #16711)</li>
+<li>Add Linux package dependencies for packaging (#16807)</li>
+<li>Switch to our custom images for build and release (#16801, #16580)</li>
+<li>Remove all references to <code>cmake</code> for the builds in this repository (#16578)</li>
+<li>Register NuGet source when generating <code>CGManifest</code> (#16570)</li>
+</ul>
+
+</details>
+
+[7.2.2]: https://github.com/PowerShell/PowerShell/compare/v7.2.1...v7.2.2
+
+## [7.2.1] - 2021-12-14
+
+### General Cmdlet Updates and Fixes
+
+- Remove declaration of experimental features in Utility module manifest as they are stable (#16460)
+- Bring back pwsh.exe for framework dependent packages to support Start-Job (#16535)
+- Change default for `$PSStyle.OutputRendering` to `Ansi` (Internal 18394)
+- Update `HelpInfoUri` for 7.2 release (#16456)
+- Fix typo for "privacy" in MSI installer (#16407)
+
+### Tests
+
+- Set clean state before testing `UseMU` in the MSI (#16543)
+
+### Build and Packaging Improvements
+
+<details>
+
+<ul>
+<li>Add explicit job name for approval tasks in Snap stage (#16579)</li>
+<li>Fixing the build by removing duplicate TSAUpload entries (Internal 18399)</li>
+<li>Port CGManifest fixes (Internal 18402)</li>
+<li>Update CGManifest (Internal 18403)</li>
+<li>Updated package dependencies for 7.2.1 (Internal 18388)</li>
+<li>Use different containers for different branches (#16434)</li>
+<li>Use notice task to generate license assuming CGManifest contains all components (#16340)</li>
+<li>Create compliance build (#16286)</li>
+<li>Update release instructions with link to new build (#16419)</li>
+<li>Add diagnostics used to take corrective action when releasing buildInfoJson (#16404)</li>
+<li>vPack release should use buildInfoJson new to 7.2 (#16402)</li>
+<li>Add checkout to build json stage to get <code>ci.psm1</code> (#16399)</li>
+<li>Update the usage of metadata.json for getting LTS information (#16381)</li>
+<li>Move mapping file into product repository and add Debian 11 (#16316)</li>
+</ul>
+
+</details>
+
+[7.2.1]: https://github.com/PowerShell/PowerShell/compare/v7.2.0...v7.2.1
+
+## [7.2.0] - 2021-11-08
+
+### General Cmdlet Updates and Fixes
+
+- Handle exception when trying to resolve a possible link path (#16310)
+
+### Tests
+
+- Fix global tool and SDK tests in release pipeline (#16342)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@kondratyev-nv</p>
+
+</summary>
+
+<ul>
+<li>Add an approval for releasing build-info json (#16351)</li>
+<li>Release build info json when it is preview (#16335)</li>
+<li>Update <code>metadata.json</code> for v7.2.0 release</li>
+<li>Update to the latest notices file and update <code>cgmanifest.json</code> (#16339)(#16325)</li>
+<li>Fix issues in release build by updating usage of <code>powershell.exe</code> with <code>pwsh.exe</code> (#16332)</li>
+<li>Update feed and analyzer dependency (#16327)</li>
+<li>Update to .NET 6 GA build <code>6.0.100-rtm.21527.11</code> (#16309)</li>
+<li>Add a major-minor build info JSON file (#16301)</li>
+<li>Fix Windows build ZIP packaging (#16299) (Thanks @kondratyev-nv!)</li>
+<li>Clean up <code>crossgen</code> related build scripts also generate native symbols for <code>R2R</code> images (#16297)</li>
+<li>Fix issues reported by code signing verification tool (#16291)</li>
+</ul>
+
+</details>
+
+[7.2.0]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-rc.1...v7.2.0
+
+## [7.2.0-rc.1] - 2021-10-21
+
+### General Cmdlet Updates and Fixes
+
+- Disallow COM calls for AppLocker system lockdown (#16268)
+- Configure `Microsoft.ApplicationInsights` to not send cloud role name (#16246)
+- Disallow `Add-Type` in NoLanguage mode on a locked down machine (#16245)
+- Make property names for color VT100 sequences consistent with documentation (#16212)
+- Make moving a directory into itself with `Move-Item` an error (#16198)
+- Change `FileSystemInfo.Target` from a `CodeProperty` to an `AliasProperty` that points to `FileSystemInfo.LinkTarget` (#16165)
+
+### Tests
+
+- Removed deprecated docker-based tests for PowerShell release packages (#16224)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump .NET SDK to 6.0.100-rc.2</p>
+</summary>
+
+<ul>
+<li>Update .NET 6 to version 6.0.100-rc.2.21505.57 (#16249)</li>
+<li>Fix RPM packaging (Internal 17704)</li>
+<li>Update <code>ThirdPartyNotices.txt</code> (#16283)</li>
+<li>Update pipeline yaml file to use <code>ubuntu-latest</code> image (#16279)</li>
+<li>Add script to generate <code>cgmanifest.json</code> (#16278)</li>
+<li>Update version of <code>Microsoft.PowerShell.Native</code> and <code>Microsoft.PowerShell.MarkdownRender</code> packages (#16277)</li>
+<li>Add <code>cgmanifest.json</code> for generating correct third party notice file (#16266)</li>
+<li>Only upload stable <code>buildinfo</code> for stable releases (#16251)</li>
+<li>Don't upload <code>.dep</code> or <code>.tar.gz</code> for RPM because there are none (#16230)</li>
+<li>Ensure RPM license is recognized (#16189)</li>
+<li>Add condition to only generate release files in local dev build only (#16259)</li>
+<li>Ensure <code>psoptions.json</code> and <code>manifest.spdx.json</code> files always exist in packages (#16258)</li>
+<li>Fix CI script and split out ARM runs (#16252)</li>
+<li>Update vPack task version to 12 (#16250)</li>
+<li>Sign third party executables (#16229)</li>
+<li>Add Software Bill of Materials to the main packages (#16202)</li>
+<li>Upgrade <code>set-value</code> package for Markdown test (#16196)</li>
+<li>Fix Microsoft update spelling issue (#16178)</li>
+<li>Move vPack build to 1ES Pool (#16169)</li>
+</ul>
+
+</details>
+
+[7.2.0-rc.1]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.10...v7.2.0-rc.1
+
+## [7.2.0-preview.10] - 2021-09-28
+
+### Engine Updates and Fixes
+
+- Remove duplicate remote server mediator code (#16027)
+
+### General Cmdlet Updates and Fixes
+
+- Use `PlainText` when writing to a host that doesn't support VT (#16092)
+- Remove support for `AppExecLinks` to retrieve target (#16044)
+- Move `GetOuputString()` and `GetFormatStyleString()` to `PSHostUserInterface` as public API (#16075)
+- Add `isOutputRedirected` parameter to `GetFormatStyleString()` method (#14397)
+- Fix `ConvertTo-SecureString` with key regression due to .NET breaking change (#16068)
+- Fix regression in `Move-Item` to only fallback to `CopyAndDelete` in specific cases (#16029)
+- Set `$?` correctly for command expression with redirection (#16046)
+- Use `CurrentCulture` when handling conversions to `DateTime` in `Add-History` (#16005) (Thanks @vexx32!)
+- Fix `NullReferenceException` in `Format-Wide` (#15990) (Thanks @DarylGraves!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze!</p>
+
+</summary>
+
+<ul>
+<li>Improve <code>CommandInvocationIntrinsics</code> API documentation and style (#14369)</li>
+<li>Use <code>bool?.GetValueOrDefault()</code> in <code>FormatWideCommand</code> (#15988) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Fix typo in build.psm1 (#16038) (Thanks @eltociear!)
+- Add `.stylecop` to `filetypexml` and format it (#16025)
+- Enable sending Teams notification when workflow fails (#15982)
+
+### Tests
+
+- Enable two previously disabled `Get-Process` tests (#15845) (Thanks @iSazonov!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Details
+</summary>
+
+<ul>
+<li>Add SHA256 hashes to release (#16147)</li>
+<li>Update <code>Microsoft.CodeAnalysis.CSharp</code> version (#16138)</li>
+<li>Change path for Component Governance for build to the path we actually use to build (#16137)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#16070) (#16045) (#16036) (#16021) (#15985)</li>
+<li>Update .NET to <code>6.0.100-rc.1.21458.32</code> (#16066)</li>
+<li>Update minimum required OS version for macOS (#16088)</li>
+<li>Ensure locale is set correctly on Ubuntu 20.04 in CI (#16067) (#16073)</li>
+<li>Update .NET SDK version from <code>6.0.100-preview.6.21355.2</code> to <code>6.0.100-rc.1.21455.2</code> (#16041) (#16028) (#15648)</li>
+<li>Fix the GitHub Action for updating .NET daily builds (#16042)</li>
+<li>Move from PkgES hosted agents to 1ES hosted agents (#16023)</li>
+<li>Update Ubuntu images to use Ubuntu 20.04 (#15906)</li>
+<li>Fix the macOS build by updating the pool image name (#16010)</li>
+<li>Use Alpine 3.12 for building PowerShell for Alpine Linux (#16008)</li>
+<li>Ignore error from <code>Find-Package</code> (#15999)</li>
+<li>Find packages separately for each source in <code>UpdateDotnetRuntime.ps1</code> script (#15998)</li>
+<li>Update metadata to start using .NET 6 RC1 builds (#15981)</li>
+</ul>
+
+</details>
+
+[7.2.0-preview.10]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.9...v7.2.0-preview.10
+
+## [7.2.0-preview.9] - 2021-08-23
+
+### Breaking Changes
+
+- Change the default value of `$PSStyle.OutputRendering` to `OutputRendering.Host` and remove `OutputRendering.Automatic` (#15882)
+- Fix `CA1052` for public API to make classes static when they only have static methods (#15775) (Thanks @xtqqczze!)
+- Update `pwsh.exe -File` to only accept `.ps1` script files on Windows (#15859)
+
+### Engine Updates and Fixes
+
+- Update .NET adapter to handle interface static members properly (#15908)
+- Catch and handle unauthorized access exception when removing AppLocker test files (#15881)
+
+### General Cmdlet Updates and Fixes
+
+- Add `-PassThru` parameter to `Set-Clipboard` (#13713) (Thanks @ThomasNieto!)
+- Add `-Encoding` parameter for `Tee-Object` (#12135) (Thanks @Peter-Schneider!)
+- Update `ConvertTo-Csv` and `Export-Csv` to handle `IDictionary` objects (#11029) (Thanks @vexx32!)
+- Update the parameters `-Exception` and `-ErrorRecord` for `Write-Error` to be position 0 (#13813) (Thanks @ThomasNieto!)
+- Don't use `ArgumentList` when creating COM object with `New-Object` as it's not applicable to the COM parameter set (#15915)
+- Fix `$PSStyle` list output to correctly show `TableHeader` (#15928)
+- Remove the `PSImplicitRemotingBatching` experimental feature (#15863)
+- Fix issue with `Get-Process -Module` failing to stop when it's piped to `Select-Object` (#15682) (Thanks @ArmaanMcleod!)
+- Make the experimental features `PSUnixFileStat`, `PSCultureInvariantReplaceOperator`, `PSNotApplyErrorActionToStderr`, `PSAnsiRendering`, `PSAnsiProgressFeatureName` stable (#15864)
+- Enhance `Remove-Item` to work with OneDrive (#15571) (Thanks @iSazonov!)
+- Make global tool entrypoint class static (#15880)
+- Update `ServerRemoteHost` version to be same as `PSVersion` (#15809)
+- Make the initialization of `HttpKnownHeaderNames` thread safe (#15519) (Thanks @iSazonov!)
+- `ConvertTo-Csv`: Quote fields with quotes and newlines when using `-UseQuotes AsNeeded` (#15765) (Thanks @lselden!)
+- Forwarding progress stream changes from `Foreach-Object -Parallel` runspaces (#14271) (Thanks @powercode!)
+- Add validation to `$PSStyle` to reject printable text when setting a property that only expects ANSI escape sequence (#15825)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Avoid unneeded array allocation in module code (#14329) (Thanks @xtqqczze!)</li>
+<li>Enable and fix analysis rules <code>CA1052</code>, <code>CA1067</code>, and <code>IDE0049</code> (#15840) (Thanks @xtqqczze!)</li>
+<li>Avoid unnecessary allocation in formatting code (#15832) (Thanks @xtqqczze!)</li>
+<li>Specify the analyzed API surface for all code quality rules (#15778) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Enable `/rebase` to automatically rebase a PR (#15808)
+- Update `.editorconfig` to not replace tabs with spaces in `.tsv` files (#15815) (Thanks @SethFalco!)
+- Update PowerShell team members in the changelog generation script (#15817)
+
+### Tests
+
+- Add more tests to validate the current command error handling behaviors (#15919)
+- Make `Measure-Object` property test independent of the file system (#15879)
+- Add more information when a `syslog` parsing error occurs (#15857)
+- Harden logic when looking for `syslog` entries to be sure that we select based on the process ID (#15841)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Disable implicit namespace imports for test projects (#15895)</li>
+<li>Update language version to 10 and fix related issues (#15886)</li>
+<li>Update <code>CodeQL</code> workflow to use Ubuntu 18.04 (#15868)</li>
+<li>Bump the version of various packages (#15944, #15934, #15935, #15891, #15812, #15822) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `README` and `metadata files` for release `v7.2.0-preview.8` (#15819)
+- Update changelogs for 7.0.7 and 7.1.4 (#15921)
+- Fix spelling in XML docs (#15939) (Thanks @slowy07!)
+- Update PowerShell Committee members (#15837)
+
+[7.2.0-preview.9]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.8...v7.2.0-preview.9
+
+## [7.2.0-preview.8] - 2021-07-22
+
+### Engine Updates and Fixes
+
+- Add a Windows mode to `$PSNativeCommandArgumentPassing` that allows some commands to use legacy argument passing (#15408)
+- Use `nameof` to get parameter names when creating `ArgumentNullException` (#15604) (Thanks @gukoff!)
+- Test if a command is 'Out-Default' more thoroughly for transcribing scenarios (#15653)
+- Add `Microsoft.PowerShell.Crescendo` to telemetry allow list (#15372)
+
+### General Cmdlet Updates and Fixes
+
+- Use `$PSStyle.Formatting.FormatAccent` for `Format-List` and `$PSStyle.Formatting.TableHeader` for `Format-Table` output (#14406)
+- Highlight using error color the exception `Message` and underline in `PositionMessage` for `Get-Error` (#15786)
+- Implement a completion for View parameter of format cmdlets (#14513) (Thanks @iSazonov!)
+- Add support to colorize `FileInfo` filenames (#14403)
+- Don't serialize to JSON ETS properties for `DateTime` and `string` types (#15665)
+- Fix `HyperVSocketEndPoint.ServiceId` setter (#15704) (Thanks @xtqqczze!)
+- Add `DetailedView` to `$ErrorView` (#15609)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@iSazonov, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Remove <code>consolehost.proto</code> file (#15741) (Thanks @iSazonov!)</li>
+<li>Implement <code>IDisposable</code> for <code>ConvertToJsonCommand</code> (#15787) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDisposable</code> implementation for <code>CommandPathSearch</code> (#15793) (Thanks @xtqqczze!)</li>
+<li>Delete IDE dispose analyzer rules (#15798) (Thanks @xtqqczze!)</li>
+<li>Seal private classes (#15725) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0029: <code>UseCoalesceExpression</code> (#15770) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0070: <code>UseSystemHashCode</code> (#15715) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0030: <code>UseCoalesceExpressionForNullable</code> (#14289) (Thanks @xtqqczze!)</li>
+<li>Fix CA1846 and CA1845 for using <code>AsSpan</code> instead of <code>Substring</code> (#15738)</li>
+<li>Use <code>List&lt;T&gt;.RemoveAll</code> to avoid creating temporary list (#15686) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0044: <code>MakeFieldReadonly</code> (#13880) (Thanks @xtqqczze!)</li>
+<li>Disable IDE0130 (#15728) (Thanks @xtqqczze!)</li>
+<li>Make classes sealed (#15675) (Thanks @xtqqczze!)</li>
+<li>Enable CA1043: Use integral or string argument for indexers (#14467) (Thanks @xtqqczze!)</li>
+<li>Enable CA1812 (#15674) (Thanks @xtqqczze!)</li>
+<li>Replace <code>Single</code> with <code>First</code> when we know the element count is 1 (#15676) (Thanks @xtqqczze!)</li>
+<li>Skip analyzers for <code>Microsoft.Management.UI.Internal</code> (#15677) (Thanks @xtqqczze!)</li>
+<li>Fix CA2243: Attribute string literals should parse correctly (#15622) (Thanks @xtqqczze!)</li>
+<li>Enable CA1401 (#15621) (Thanks @xtqqczze!)</li>
+<li>Fix CA1309: Use ordinal <code>StringComparison</code> in Certificate Provider (#14352) (Thanks @xtqqczze!)</li>
+<li>Fix CA1839: Use <code>Environment.ProcessPath</code> (#15650) (Thanks @xtqqczze!)</li>
+<li>Add new analyzer rules (#15620) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add `SkipRoslynAnalyzers` parameter to `Start-PSBuild` (#15640) (Thanks @xtqqczze!)
+- Create issue template for issues updating PowerShell through Windows update. (#15700)
+- Add `DocumentationAnalyzers` to build (#14336) (Thanks @xtqqczze!)
+- Convert GitHub issue templates to modern forms (#15645)
+
+### Tests
+
+- Add more tests for `ConvertFrom-Json` (#15706) (Thanks @strawgate!)
+- Update `glob-parent` and `hosted-git-info` test dependencies (#15643)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Update .NET to version <code>v6.0.0-preview.6</code>
+</summary>
+
+<ul>
+<li>Add new package name for <code>osx-arm64</code> (#15813)</li>
+<li>Prefer version when available for dotnet-install (#15810)</li>
+<li>Make warning about MU being required dynamic (#15776)</li>
+<li>Add <code>Start-PSBootstrap</code> before running tests (#15804)</li>
+<li>Update to .NET 6 Preview 6 and use <code>crossgen2</code> (#15763)</li>
+<li>Enable ARM64 packaging for macOS (#15768)</li>
+<li>Make Microsoft Update opt-out/in check boxes work (#15784)</li>
+<li>Add Microsoft Update opt out to MSI install (#15727)</li>
+<li>Bump <code>NJsonSchema</code> from <code>10.4.4</code> to <code>10.4.5</code> (#15769)</li>
+<li>Fix computation of SHA512 checksum (#15736)</li>
+<li>Update the script to use quality parameter for <code>dotnet-install</code> (#15731)</li>
+<li>Generate SHA512 checksum file for all packages (#15678)</li>
+<li>Enable signing daily release build with lifetime certificate (#15642)</li>
+<li>Update metadata and README for 7.2.0-preview.7 (#15593)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix broken RFC links (#15807)
+- Add to bug report template getting details from `Get-Error` (#15737)
+- Update issue templates to link to new docs (#15711)
+- Add @jborean93 to Remoting Working Group (#15683)
+
+[7.2.0-preview.8]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.7...v7.2.0-preview.8
+
+## [7.2.0-preview.7] - 2021-06-17
+
+### Breaking Changes
+
+- Remove PSDesiredStateConfiguration v2.0.5 module and published it to the PowerShell Gallery (#15536)
+
+### Engine Updates and Fixes
+
+- Fix splatting being treated as positional parameter in completions (#14623) (Thanks @MartinGC94!)
+- Prevent PowerShell from crashing when a telemetry mutex can't be created (#15574) (Thanks @gukoff!)
+- Ignore all exceptions when disposing an instance of a subsystem implementation (#15511)
+- Wait for SSH exit when closing remote connection (#14635) (Thanks @dinhngtu!)
+
+### Performance
+
+- Retrieve `ProductVersion` using informational version attribute in `AmsiUtils.Init()` (#15527) (Thanks @Fs00!)
+
+### General Cmdlet Updates and Fixes
+
+- Fix retrieving dynamic parameters from provider even if globbed path returns no results (#15525)
+- Revert "Enhance Remove-Item to work with OneDrive (#15260)" due to long path issue (#15546)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@octos4murai, @iSazonov, @Fs00</p>
+
+</summary>
+
+<ul>
+<li>Correct parameter name passed to exception in <code>PSCommand</code> constructor (#15580) (Thanks @octos4murai!)</li>
+<li>Enable nullable: <code>System.Management.Automation.ICommandRuntime</code> (#15566) (Thanks @iSazonov!)</li>
+<li>Clean up code regarding <code>AppDomain.CreateDomain</code> and <code>AppDomain.Unload</code> (#15554)</li>
+<li>Replace <code>ProcessModule.FileName</code> with <code>Environment.ProcessPath</code> and remove <code>PSUtils.GetMainModule</code> (#15012) (Thanks @Fs00!)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Fix `Start-Benchmarking` to put `TargetPSVersion` and `TargetFramework` in separate parameter sets (#15508)
+- Add `win-x86` test package to the build (#15517)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@schuelermine</p>
+
+</summary>
+
+<ul>
+<li>Update README.md and metadata.json for version 7.2.0-preview.6 (#15464)</li>
+<li>Make sure GA revision increases from RC and Preview releases (#15558)</li>
+<li>Remove <code>SupportsShouldProcess</code> from <code>Start-PSBootstrap</code> in build.psm1 (#15491) (Thanks @schuelermine!)</li>
+<li>Update <code>DotnetMetadataRuntime.json</code> next channel to take daily build from .NET preview 5 (#15518)</li>
+<li>Fix <code>deps.json</code> update in the release pipeline (#15486)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Add new members to Engine and Cmdlet Working Groups document (#15560)
+- Update the `mdspell` command to exclude the folder that should be ignored (#15576)
+- Replace 'User Voice' with 'Feedback Hub' in `README.md` (#15557)
+- Update Virtual User Group chat links (#15505) (Thanks @Jaykul!)
+- Fix typo in `FileSystemProvider.cs` (#15445) (Thanks @eltociear!)
+- Add `PipelineStoppedException` notes to PowerShell API (#15324)
+- Updated governance on Working Groups (WGs) (#14603)
+- Correct and improve XML documentation comments on `PSCommand` (#15568) (Thanks @octos4murai!)
+
+[7.2.0-preview.7]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.6...v7.2.0-preview.7
+
+## [7.2.0-preview.6] - 2021-05-27
+
+### Experimental Features
+
+- [Breaking Change] Update prediction interface to provide additional feedback to a predictor plugin (#15421)
+
+### Performance
+
+- Avoid collecting logs in buffer if a pipeline execution event is not going to be logged (#15350)
+- Avoid allocation in `LanguagePrimitives.UpdateTypeConvertFromTypeTable` (#15168) (Thanks @xtqqczze!)
+- Replace `Directory.GetDirectories` with `Directory.EnumerateDirectories` to avoid array allocations (#15167) (Thanks @xtqqczze!)
+- Use `List.ConvertAll` instead of `LINQ` (#15140) (Thanks @xtqqczze!)
+
+### General Cmdlet Updates and Fixes
+
+- Use `AllocConsole` before initializing CLR to ensure codepage is correct for WinRM remoting (PowerShell/PowerShell-Native#70) (Thanks @jborean93!)
+- Add completions for `#requires` statements (#14596) (Thanks @MartinGC94!)
+- Add completions for comment-based help keywords (#15337) (Thanks @MartinGC94!)
+- Move cross platform DSC code to a PowerShell engine subsystem (#15127)
+- Fix `Minimal` progress view to handle activity that is longer than console width (#15264)
+- Handle exception if ConsoleHost tries to set cursor out of bounds because screen buffer changed (#15380)
+- Fix `NullReferenceException` in DSC `ClearCache()` (#15373)
+- Update `ControlSequenceLength` to handle colon as a virtual terminal parameter separator (#14942)
+- Update the summary comment for `StopTranscriptCmdlet.cs` (#15349) (Thanks @dbaileyut!)
+- Remove the unusable alias `d` for the `-Directory` parameter from `Get-ChildItem` (#15171) (Thanks @kvprasoon!)
+- Fix tab completion for un-localized `about` topics (#15265) (Thanks @MartinGC94!)
+- Remove the unneeded SSH stdio handle workaround (#15308)
+- Add `LoadAssemblyFromNativeMemory` API to load assemblies from memory in a native PowerShell host (#14652) (Thanks @awakecoding!)
+- Re-implement `Remove-Item` OneDrive support (#15260) (Thanks @iSazonov!)
+- Kill native processes in pipeline when pipeline is disposed on Unix (#15287)
+- Default to MTA on Windows platforms where STA is not supported (#15106)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @powercode, @bcwood</p>
+
+</summary>
+
+<ul>
+<li>Enable <code>nullable</code> in some classes (#14185, #14177, #14159, #14191, #14162, #14150, #14156, #14161, #14155, #14163, #14181, #14157, #14151) (Thanks @powercode!)</li>
+<li>Annotate <code>ThrowTerminatingError</code> with <code>DoesNotReturn</code> attribute (#15352) (Thanks @powercode!)</li>
+<li>Use <code>GetValueOrDefault()</code> for nullable <code>PSLanguageMode</code> (#13849) (Thanks @bcwood!)</li>
+<li>Enable <code>SA1008</code>: Opening parenthesis should be spaced correctly (#14242) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add `winget` release script (#15050)
+
+### Tests
+
+- Enable cross-runtime benchmarking to compare different .NET runtimes (#15387) (Thanks @adamsitnik!)
+- Add the performance benchmark project for PowerShell performance testing (#15242)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Update .NET to version <code>v6.0.0-preview.4</code>
+</summary>
+
+<ul>
+<li>Suppress prompting when uploading the <code>msixbundle</code> package to blob (#15227)</li>
+<li>Update to .NET preview 4 SDK (#15452)</li>
+<li>Update <code>AppxManifest.xml</code> with newer OS version to allow PowerShell installed from Windows Store to make system-level changes (#15375)</li>
+<li>Ensure the build works when <code>PSDesiredStateConfiguration</code> module is pulled in from PSGallery (#15355)</li>
+<li>Make sure daily release tag does not change when retrying failures (#15286)</li>
+<li>Improve messages and behavior when there's a problem in finding zip files (#15284)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Add documentation comments section to coding guidelines (#14316) (Thanks @xtqqczze!)
+
+[7.2.0-preview.6]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.5...v7.2.0-preview.6
+
+## [7.2.0-preview.5] - 2021-04-14
+
+### Breaking Changes
+
+- Make PowerShell Linux deb and RPM packages universal (#15109)
+- Enforce AppLocker Deny configuration before Execution Policy Bypass configuration (#15035)
+- Disallow mixed dash and slash in command-line parameter prefix (#15142) (Thanks @davidBar-On!)
+
+### Experimental Features
+
+- `PSNativeCommandArgumentPassing`: Use `ArgumentList` for native executable invocation (breaking change) (#14692)
+
+### Engine Updates and Fixes
+
+- Add `IArgumentCompleterFactory` for parameterized `ArgumentCompleters` (#12605) (Thanks @powercode!)
+
+### General Cmdlet Updates and Fixes
+
+- Fix SSH remoting connection never finishing with misconfigured endpoint (#15175)
+- Respect `TERM` and `NO_COLOR` environment variables for `$PSStyle` rendering (#14969)
+- Use `ProgressView.Classic` when Virtual Terminal is not supported (#15048)
+- Fix `Get-Counter` issue with `-Computer` parameter (#15166) (Thanks @krishnayalavarthi!)
+- Fix redundant iteration while splitting lines (#14851) (Thanks @hez2010!)
+- Enhance `Remove-Item -Recurse` to work with OneDrive (#14902) (Thanks @iSazonov!)
+- Change minimum depth to 0 for `ConvertTo-Json` (#14830) (Thanks @kvprasoon!)
+- Allow `Set-Clipboard` to accept empty string (#14579)
+- Turn on and off `DECCKM` to modify keyboard mode for Unix native commands to work correctly (#14943)
+- Fall back to `CopyAndDelete()` when `MoveTo()` fails due to an `IOException` (#15077)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @iSazonov, @ZhiZe-ZG</p>
+
+</summary>
+
+<ul>
+<li>Update .NET to <code>6.0.0-preview.3</code> (#15221)</li>
+<li>Add space before comma to hosting test to fix error reported by <code>SA1001</code> (#15224)</li>
+<li>Add <code>SecureStringHelper.FromPlainTextString</code> helper method for efficient secure string creation (#14124) (Thanks @xtqqczze!)</li>
+<li>Use static lambda keyword (#15154) (Thanks @iSazonov!)</li>
+<li>Remove unnecessary <code>Array</code> -&gt; <code>List</code> -&gt; <code>Array</code> conversion in <code>ProcessBaseCommand.AllProcesses</code> (#15052) (Thanks @xtqqczze!)</li>
+<li>Standardize grammar comments in Parser.cs (#15114) (Thanks @ZhiZe-ZG!)</li>
+<li>Enable <code>SA1001</code>: Commas should be spaced correctly (#14171) (Thanks @xtqqczze!)</li>
+<li>Refactor <code>MultipleServiceCommandBase.AllServices</code> (#15053) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Use Unix line endings for shell scripts (#15180) (Thanks @xtqqczze!)
+
+### Tests
+
+- Add the missing tag in Host Utilities tests (#14983)
+- Update `copy-props` version in `package.json` (#15124)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@JustinGrote</p>
+
+</summary>
+
+<ul>
+<li>Fix <code>yarn-lock</code> for <code>copy-props</code> (#15225)</li>
+<li>Make package validation regular expression accept universal Linux packages (#15226)</li>
+<li>Bump NJsonSchema from 10.4.0 to 10.4.1 (#15190)</li>
+<li>Make MSI and EXE signing always copy to fix daily build (#15191)</li>
+<li>Sign internals of EXE package so that it works correctly when signed (#15132)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 16.9.1 to 16.9.4 (#15141)</li>
+<li>Update daily release tag format to  work with new Microsoft Update work (#15164)</li>
+<li>Feature: Add Ubuntu 20.04 Support to install-powershell.sh (#15095) (Thanks @JustinGrote!)</li>
+<li>Treat rebuild branches like release branches (#15099)</li>
+<li>Update WiX to 3.11.2 (#15097)</li>
+<li>Bump NJsonSchema from 10.3.11 to 10.4.0 (#15092)</li>
+<li>Allow patching of preview releases (#15074)</li>
+<li>Bump Newtonsoft.Json from 12.0.3 to 13.0.1 (#15084, #15085)</li>
+<li>Update the <code>minSize</code> build package filter to be explicit (#15055)</li>
+<li>Bump NJsonSchema from 10.3.10 to 10.3.11 (#14965)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Merge `7.2.0-preview.4` changes to master (#15056)
+- Update `README` and `metadata.json` (#15046)
+- Fix broken links for `dotnet` CLI (#14937)
+
+[7.2.0-preview.5]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.4...v7.2.0-preview.5
+
+## [7.2.0-preview.4] - 2021-03-16
+
+### Breaking Changes
+
+- Fix `Get-Date -UFormat` `%G` and `%g` behavior (#14555) (Thanks @brianary!)
+
+### Engine Updates and Fixes
+
+- Update engine script signature validation to match `Get-AuthenticodeSignature` logic (#14849)
+- Avoid array allocations from `GetDirectories` and `GetFiles` (#14327) (Thanks @xtqqczze!)
+
+### General Cmdlet Updates and Fixes
+
+- Add `UseOSCIndicator` setting to enable progress indicator in terminal (#14927)
+- Re-enable VT mode on Windows after running command in `ConsoleHost` (#14413)
+- Fix `Move-Item` for `FileSystemProvider` to use copy-delete instead of move for DFS paths (#14913)
+- Fix `PromptForCredential()` to add `targetName` as domain (#14504)
+- Update `Concise` `ErrorView` to not show line information for errors from script module functions (#14912)
+- Remove the 32,767 character limit on the environment block for `Start-Process` (#14111) (Thanks @hbuckle!)
+- Don't write possible secrets to verbose stream for web cmdlets (#14788)
+
+### Tools
+
+- Update `dependabot` configuration to V2 format (#14882)
+- Add tooling issue slots in PR template (#14697)
+
+### Tests
+
+- Move misplaced test file to tests directory (#14908) (Thanks @MarianoAlipi!)
+- Refactor MSI CI (#14753)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+Update .NET to version <code>6.0.100-preview.2.21155.3</code>
+</summary>
+
+<ul>
+<li>Update .NET to version <code>6.0.100-preview.2.21155.3</code> (#15007)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> to <code>7.2.0-preview.1</code> (#15030)</li>
+<li>Create MSIX Bundle package in release pipeline (#14982)</li>
+<li>Build self-contained minimal size package for Guest Config team (#14976)</li>
+<li>Bump XunitXml.TestLogger from 3.0.62 to 3.0.66 (#14993) (Thanks @dependabot[bot]!)</li>
+<li>Enable building PowerShell for Apple M1 runtime (#14923)</li>
+<li>Fix the variable name in the condition for miscellaneous analysis CI (#14975)</li>
+<li>Fix the variable usage in CI yaml (#14974)</li>
+<li>Disable running Markdown link verification in release build CI (#14971)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 3.9.0-3.final to 3.9.0 (#14934) (Thanks @dependabot[bot]!)</li>
+<li>Declare which variable group is used for checking the blob in the release build (#14970)</li>
+<li>Update metadata and script to enable consuming .NET daily builds (#14940)</li>
+<li>Bump NJsonSchema from 10.3.9 to 10.3.10 (#14933) (Thanks @dependabot[bot]!)</li>
+<li>Use template that disables component governance for CI (#14938)</li>
+<li>Add suppress for nuget multi-feed warning (#14893)</li>
+<li>Bump NJsonSchema from 10.3.8 to 10.3.9 (#14926) (Thanks @dependabot[bot]!)</li>
+<li>Add exe wrapper to release (#14881)</li>
+<li>Bump Microsoft.ApplicationInsights from 2.16.0 to 2.17.0 (#14847)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 16.8.3 to 16.9.1 (#14895) (Thanks @dependabot[bot]!)</li>
+<li>Bump NJsonSchema from 10.3.7 to 10.3.8 (#14896) (Thanks @dependabot[bot]!)</li>
+<li>Disable codesign validation where the file type is not supported (#14885)</li>
+<li>Fixing broken Experimental Feature list in <code>powershell.config.json</code> (#14858)</li>
+<li>Bump NJsonSchema from 10.3.6 to 10.3.7 (#14855)</li>
+<li>Add exe wrapper for Microsoft Update scenarios (#14737)</li>
+<li>Install wget on <code>CentOS</code> 7 docker image (#14857)</li>
+<li>Fix install-dotnet download (#14856)</li>
+<li>Fix Bootstrap step in Windows daily test runs (#14820)</li>
+<li>Bump NJsonSchema from 10.3.5 to 10.3.6 (#14818)</li>
+<li>Bump <code>NJsonSchema</code> from <code>10.3.4</code> to <code>10.3.5</code> (#14807)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `README.md` and `metadata.json` for upcoming releases (#14755)
+- Merge 7.1.3 and 7.0.6 changelog to master (#15009)
+- Update `README` and `metadata.json` for releases (#14997)
+- Update ChangeLog for `v7.1.2` release (#14783)
+- Update ChangeLog for `v7.0.5` release (#14782) (Internal 14479)
+
+[7.2.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.3...v7.2.0-preview.4
+
+## [7.2.0-preview.3] - 2021-02-11
+
+### Breaking Changes
+
+- Fix `Get-Date -UFormat %u` behavior to comply with ISO 8601 (#14549) (Thanks @brianary!)
+
+### Engine Updates and Fixes
+
+- Together with `PSDesiredStateConfiguration` `v3` module allows `Get-DscResource`, `Invoke-DscResource` and DSC configuration compilation on all platforms, supported by PowerShell (using class-based DSC resources).
+
+### Performance
+
+- Avoid array allocations from `Directory.GetDirectories` and `Directory.GetFiles`. (#14326) (Thanks @xtqqczze!)
+- Avoid `string.ToLowerInvariant()` from `GetEnvironmentVariableAsBool()` to avoid loading libicu at startup (#14323) (Thanks @iSazonov!)
+- Get PowerShell version in `PSVersionInfo` using assembly attribute instead of `FileVersionInfo` (#14332) (Thanks @Fs00!)
+
+### General Cmdlet Updates and Fixes
+
+- Suppress `Write-Progress` in `ConsoleHost` if output is redirected and fix tests (#14716)
+- Experimental feature `PSAnsiProgress`: Add minimal progress bar using ANSI rendering (#14414)
+- Fix web cmdlets to properly construct URI from body when using `-NoProxy` (#14673)
+- Update the `ICommandPredictor` to provide more feedback and also make feedback easier to be correlated (#14649)
+- Reset color after writing `Verbose`, `Debug`, and `Warning` messages (#14698)
+- Fix using variable for nested `ForEach-Object -Parallel` calls (#14548)
+- When formatting, if collection is modified, don't fail the entire pipeline (#14438)
+- Improve completion of parameters for attributes (#14525) (Thanks @MartinGC94!)
+- Write proper error messages for `Get-Command ' '` (#13564) (Thanks @jakekerr!)
+- Fix typo in the resource string `ProxyURINotSupplied` (#14526) (Thanks @romero126!)
+- Add support to `$PSStyle` for strikethrough and hyperlinks (#14461)
+- Fix `$PSStyle` blink codes (#14447) (Thanks @iSazonov!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @powercode</p>
+
+</summary>
+
+<ul>
+<li>Fix coding style issues: RCS1215, IDE0090, SA1504, SA1119, RCS1139, IDE0032 (#14356, #14341, #14241, #14204, #14442, #14443) (Thanks @xtqqczze!)</li>
+<li>Enable coding style checks: CA2249, CA1052, IDE0076, IDE0077, SA1205, SA1003, SA1314, SA1216, SA1217, SA1213 (#14395, #14483, #14494, #14495, #14441, #14476, #14470, #14471, #14472) (Thanks @xtqqczze!)</li>
+<li>Enable nullable in PowerShell codebase (#14160, #14172, #14088, #14154, #14166, #14184, #14178) (Thanks @powercode!)</li>
+<li>Use <code>string.Split(char)</code> instead of <code>string.Split(string)</code> (#14465) (Thanks @xtqqczze!)</li>
+<li>Use <code>string.Contains(char)</code> overload (#14368) (Thanks @xtqqczze!)</li>
+<li>Refactor complex <code>if</code> statements (#14398) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Update script to use .NET 6 build resources (#14705)
+- Fix the daily GitHub Action (#14711) (Thanks @imba-tjd!)
+- GitHub Actions: fix deprecated `::set-env` (#14629) (Thanks @imba-tjd!)
+- Update Markdown test tools (#14325) (Thanks @RDIL!)
+- Upgrade `StyleCopAnalyzers` to `v1.2.0-beta.312` (#14354) (Thanks @xtqqczze!)
+
+### Tests
+
+- Remove packaging from daily Windows build (#14749)
+- Update link to the Manning book (#14750)
+- A separate Windows packaging CI (#14670)
+- Update `ini` component version in test `package.json` (#14454)
+- Disable `libmi` dependent tests for macOS. (#14446)
+
+### Build and Packaging Improvements
+
+<details>
+
+<ul>
+<li>Fix the NuGet feed name and URL for .NET 6</li>
+<li>Fix third party signing for files in sub-folders (#14751)</li>
+<li>Make build script variable an <code>ArrayList</code> to enable <code>Add()</code> method (#14748)</li>
+<li>Remove old .NET SDKs to make <code>dotnet restore</code> work with the latest SDK in CI pipeline (#14746)</li>
+<li>Remove outdated Linux dependencies (#14688)</li>
+<li>Bump .NET SDK version to 6.0.0-preview.1 (#14719)</li>
+<li>Bump <code>NJsonSchema</code> to 10.3.4 (#14714)</li>
+<li>Update daily GitHub action to allow manual trigger (#14718)</li>
+<li>Bump <code>XunitXml.TestLogger</code> to 3.0.62 (#14702)</li>
+<li>Make universal deb package based on the deb package specification (#14681)</li>
+<li>Add manual release automation steps and improve changelog script (#14445)</li>
+<li>Fix release build to upload global tool packages to artifacts (#14620)</li>
+<li>Port changes from the PowerShell v7.0.4 release (#14637)</li>
+<li>Port changes from the PowerShell v7.1.1 release (#14621)</li>
+<li>Updated README and <code>metadata.json</code> (#14401, #14606, #14612)</li>
+<li>Do not push nupkg artifacts to MyGet (#14613)</li>
+<li>Use one feed in each <code>nuget.config</code> in official builds (#14363)</li>
+<li>Fix path signed RPMs are uploaded from in release build (#14424)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update distribution support request template to point to .NET 5.0 support document (#14578)
+- Remove security GitHub issue template (#14453)
+- Add intent for using the Discussions feature in repository (#14399)
+- Fix Universal Dashboard to refer to PowerShell Universal (#14437)
+- Update document link because of HTTP 301 redirect (#14431) (Thanks @xtqqczze!)
+
+[7.2.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.2...v7.2.0-preview.3
+
+## [7.2.0-preview.2] - 2020-12-15
+
+### Breaking Changes
+
+- Improve detection of mutable value types (#12495) (Thanks @vexx32!)
+- Ensure `-PipelineVariable` is set for all output from script cmdlets (#12766) (Thanks @vexx32!)
+
+### Experimental Features
+
+- `PSAnsiRendering`: Enable ANSI formatting via `$PSStyle` and support suppressing ANSI output (#13758)
+
+### Performance
+
+- Optimize `IEnumerable` variant of replace operator (#14221) (Thanks @iSazonov!)
+- Refactor multiply operation for better performance in two `Microsoft.PowerShell.Commands.Utility` methods (#14148) (Thanks @xtqqczze!)
+- Use `Environment.TickCount64` instead of `Datetime.Now` as the random seed for AppLocker test file content (#14283) (Thanks @iSazonov!)
+- Avoid unnecessary array allocations when searching in GAC (#14291) (Thanks @xtqqczze!)
+- Use `OrdinalIgnoreCase` in `CommandLineParser` (#14303) (Thanks @iSazonov!)
+- Use `StringComparison.Ordinal` instead of `StringComparison.CurrentCulture` (#14298) (Thanks @iSazonov!)
+- Avoid creating instances of the generated delegate helper class in `-replace` implementation (#14128)
+
+### General Cmdlet Updates and Fixes
+
+- Write better error message if config file is broken (#13496) (Thanks @iSazonov!)
+- Make AppLocker Enforce mode take precedence over UMCI Audit mode (#14353)
+- Add `-SkipLimitCheck` switch to `Import-PowerShellDataFile` (#13672)
+- Restrict `New-Object` in NoLanguage mode under lock down (#14140) (Thanks @krishnayalavarthi!)
+- The `-Stream` parameter now works with directories (#13941) (Thanks @kyanha!)
+- Avoid an exception if file system does not support reparse points (#13634) (Thanks @iSazonov!)
+- Enable `CA1012`: Abstract types should not have public constructors (#13940) (Thanks @xtqqczze!)
+- Enable `SA1212`: Property accessors should follow order (#14051) (Thanks @xtqqczze!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @matthewjdegarmo, @powercode, @Gimly</p>
+
+</summary>
+
+<ul>
+<li>Enable <code>SA1007</code>: Operator keyword should be followed by space (#14130) (Thanks @xtqqczze!)</li>
+<li>Expand <code>where</code> alias to <code>Where-Object</code> in <code>Reset-PWSHSystemPath.ps1</code> (#14113) (Thanks @matthewjdegarmo!)</li>
+<li>Fix whitespace issues (#14092) (Thanks @xtqqczze!)</li>
+<li>Add <code>StyleCop.Analyzers</code> package (#13963) (Thanks @xtqqczze!)</li>
+<li>Enable <code>IDE0041</code>: <code>UseIsNullCheck</code> (#14041) (Thanks @xtqqczze!)</li>
+<li>Enable <code>IDE0082</code>: <code>ConvertTypeOfToNameOf</code> (#14042) (Thanks @xtqqczze!)</li>
+<li>Remove unnecessary usings part 4 (#14023) (Thanks @xtqqczze!)</li>
+<li>Fix <code>PriorityAttribute</code> name (#14094) (Thanks @xtqqczze!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Interpreter.IBoxableInstruction</code> (#14165) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Provider.IDynamicPropertyProvider</code> (#14167) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Language.IScriptExtent</code> (#14179) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Language.ICustomAstVisitor2</code> (#14192) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.LanguagePrimitives.IConversionData</code> (#14187) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Automation.Remoting.Client.IWSManNativeApiFacade</code> (#14186) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Language.ISupportsAssignment</code> (#14180) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.ICommandRuntime2</code> (#14183) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.IOutputProcessingState</code> (#14175) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.IJobDebugger</code> (#14174) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Interpreter.IInstructionProvider</code> (#14173) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.IHasSessionStateEntryVisibility</code> (#14169) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Tracing.IEtwEventCorrelator</code> (#14168) (Thanks @powercode!)</li>
+<li>Fix syntax error in Windows packaging script (#14377)</li>
+<li>Remove redundant local assignment in <code>AclCommands</code> (#14358) (Thanks @xtqqczze!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Language.IAstPostVisitHandler</code> (#14164) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.IModuleAssemblyInitializer</code> (#14158) (Thanks @powercode!)</li>
+<li>Use <code>Microsoft.PowerShell.MarkdownRender</code> package from <code>nuget.org</code> (#14090)</li>
+<li>Replace <code>GetFiles</code> in <code>TestModuleManifestCommand</code> (#14317) (Thanks @xtqqczze!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Provider.IContentWriter</code> (#14152) (Thanks @powercode!)</li>
+<li>Simplify getting Encoding in <code>TranscriptionOption.FlushContentToDisk</code> (#13910) (Thanks @Gimly!)</li>
+<li>Mark applicable structs as <code>readonly</code> and use <code>in</code>-modifier (#13919) (Thanks @xtqqczze!)</li>
+<li>Enable nullable: <code>System.Management.Automation.IArgumentCompleter</code> (#14182) (Thanks @powercode!)</li>
+<li>Enable <code>CA1822</code>: Mark <code>private</code> members as <code>static</code> (#13897) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 6 (#14338) (Thanks @xtqqczze!)</li>
+<li>Avoid array allocations from <code>GetDirectories</code>/<code>GetFiles</code>. (#14328) (Thanks @xtqqczze!)</li>
+<li>Avoid array allocations from <code>GetDirectories</code>/<code>GetFiles</code>. (#14330) (Thanks @xtqqczze!)</li>
+<li>Fix <code>RCS1188</code>: Remove redundant auto-property initialization part 2 (#14262) (Thanks @xtqqczze!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Host.IHostSupportsInteractiveSession</code> (#14170) (Thanks @powercode!)</li>
+<li>Enable nullable: <code>System.Management.Automation.Provider.IPropertyCmdletProvider</code> (#14176) (Thanks @powercode!)</li>
+<li>Fix <code>IDE0090</code>: Simplify new expression part 5 (#14301) (Thanks @xtqqczze!)</li>
+<li>Enable <code>IDE0075</code>: <code>SimplifyConditionalExpression</code> (#14078) (Thanks @xtqqczze!)</li>
+<li>Remove unnecessary usings part 9 (#14288) (Thanks @xtqqczze!)</li>
+<li>Fix StyleCop and MarkdownLint CI failures (#14297) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1000</code>: Keywords should be spaced correctly (#13973) (Thanks @xtqqczze!)</li>
+<li>Fix <code>RCS1188</code>: Remove redundant auto-property initialization part 1 (#14261) (Thanks @xtqqczze!)</li>
+<li>Mark <code>private</code> members as <code>static</code> part 10 (#14235) (Thanks @xtqqczze!)</li>
+<li>Mark <code>private</code> members as <code>static</code> part 9 (#14234) (Thanks @xtqqczze!)</li>
+<li>Fix <code>SA1642</code> for <code>Microsoft.Management.Infrastructure.CimCmdlets</code> (#14239) (Thanks @xtqqczze!)</li>
+<li>Use <code>AsSpan</code>/<code>AsMemory</code> slice constructor (#14265) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.6 (#14260) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.5 (#14259) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.3 (#14257) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.2 (#14256) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 2 (#14200) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1643</code>: Destructor summary documentation should begin with standard text (#14236) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify new expression part 4.4 (#14258) (Thanks @xtqqczze!)</li>
+<li>Use xml documentation child blocks correctly (#14249) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.1 (#14255) (Thanks @xtqqczze!)</li>
+<li>Use consistent spacing in xml documentation tags (#14231) (Thanks @xtqqczze!)</li>
+<li>Enable <code>IDE0074</code>: Use coalesce compound assignment (#13396) (Thanks @xtqqczze!)</li>
+<li>Remove unnecessary finalizers (#14248) (Thanks @xtqqczze!)</li>
+<li>Mark local variable as <code>const</code> (#13217) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0032</code>: <code>UseAutoProperty</code> part 2 (#14244) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0032</code>: <code>UseAutoProperty</code> part 1 (#14243) (Thanks @xtqqczze!)</li>
+<li>Mark <code>private</code> members as <code>static</code> part 8 (#14233) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 6 (#14229) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 5 (#14228) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 4 (#14227) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 3 (#14226) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 2 (#14225) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 1 (#14224) (Thanks @xtqqczze!)</li>
+<li>Use <code>see</code> keyword in documentation (#14220) (Thanks @xtqqczze!)</li>
+<li>Enable <code>CA2211</code>: Non-constant fields should not be visible (#14073) (Thanks @xtqqczze!)</li>
+<li>Enable <code>CA1816</code>: <code>Dispose</code> methods should call <code>SuppressFinalize</code> (#14074) (Thanks @xtqqczze!)</li>
+<li>Remove incorrectly implemented finalizer (#14246) (Thanks @xtqqczze!)</li>
+<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 7 (#14230) (Thanks @xtqqczze!)</li>
+<li>Fix <code>SA1122</code>: Use <code>string.Empty</code> for empty strings (#14218) (Thanks @xtqqczze!)</li>
+<li>Fix various xml documentation issues (#14223) (Thanks @xtqqczze!)</li>
+<li>Remove unnecessary <code>using</code>s part 8 (#14072) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1006</code>: Preprocessor keywords should not be preceded by space (#14052) (Thanks @xtqqczze!)</li>
+<li>Fix <code>SA1642</code> for <code>Microsoft.PowerShell.Commands.Utility</code> (#14142) (Thanks @xtqqczze!)</li>
+<li>Enable <code>CA2216</code>: Disposable types should declare finalizer (#14089) (Thanks @xtqqczze!)</li>
+<li>Wrap and name <code>LoadBinaryModule</code> arguments (#14193) (Thanks @xtqqczze!)</li>
+<li>Wrap and name <code>GetListOfFilesFromData</code> arguments (#14194) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1002</code>: Semicolons should be spaced correctly (#14197) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 3 (#14201) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1106</code>: Code should not contain empty statements (#13964) (Thanks @xtqqczze!)</li>
+<li>Code performance fixes follow-up (#14207) (Thanks @xtqqczze!)</li>
+<li>Remove uninformative comments (#14199) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 1 (#14027) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1517</code>: Code should not contain blank lines at start of file (#14131) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1131</code>: Use readable conditions (#14132) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1507</code>: Code should not contain multiple blank lines in a row (#14136) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1516</code> Elements should be separated by blank line (#14137) (Thanks @xtqqczze!)</li>
+<li>Enable <code>IDE0031</code>: Null check can be simplified (#13548) (Thanks @xtqqczze!)</li>
+<li>Enable <code>CA1065</code>: Do not raise exceptions in unexpected locations (#14117) (Thanks @xtqqczze!)</li>
+<li>Enable <code>CA1000</code>: Do not declare <code>static</code> members on generic types (#14097) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Fixing formatting in `Reset-PWSHSystemPath.ps1` (#13689) (Thanks @dgoldman-msft!)
+
+### Tests
+
+- Reinstate `Test-Connection` tests (#13324)
+- Update Markdown test packages with security fixes (#14145)
+
+### Build and Packaging Improvements
+
+<details>
+
+<ul>
+<li>Fix a typo in the <code>Get-ChangeLog</code> function (#14129)</li>
+<li>Update <code>README</code> and <code>metadata.json</code> for <code>7.2.0-preview.1</code> release (#14104)</li>
+<li>Bump <code>NJsonSchema</code> from <code>10.2.2</code> to <code>10.3.1</code> (#14040)</li>
+<li>Move windows package signing to use ESRP (#14060)</li>
+<li>Use one feed in each <code>nuget.config</code> in official builds (#14363)</li>
+<li>Fix path signed RPMs are uploaded from in release build (#14424)</li>
+<li>Add <code>Microsoft.PowerShell.MarkdownRender</code> to the package reference list (#14386)</li>
+<li>Fix issue with unsigned build (#14367)</li>
+<li>Move macOS and nuget to ESRP signing (#14324)</li>
+<li>Fix nuget packaging to scrub <code>NullableAttribute</code> (#14344)</li>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> from 16.8.0 to 16.8.3 (#14310)</li>
+<li>Bump <code>Markdig.Signed</code> from 0.22.0 to 0.22.1 (#14305)</li>
+<li>Bump <code>Microsoft.ApplicationInsights</code> from 2.15.0 to 2.16.0 (#14031)</li>
+<li>Move Linux to ESRP signing (#14210)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix example `nuget.config` (#14349)
+- Fix a broken link in Code Guidelines doc (#14314) (Thanks @iSazonov!)
+
+[7.2.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.1...v7.2.0-preview.2
+
+## [7.2.0-preview.1] - 2020-11-17
+
+### Engine Updates and Fixes
+
+- Change the default fallback encoding for `GetEncoding` in `Start-Transcript` to be `UTF8` without a BOM (#13732) (Thanks @Gimly!)
+
+### General Cmdlet Updates and Fixes
+
+- Update `pwsh -?` output to match docs (#13748)
+- Fix `NullReferenceException` in `Test-Json` (#12942) (Thanks @iSazonov!)
+- Make `Dispose` in `TranscriptionOption` idempotent (#13839) (Thanks @krishnayalavarthi!)
+- Add additional Microsoft PowerShell modules to the tracked modules list (#12183)
+- Relax further `SSL` verification checks for `WSMan` on non-Windows hosts with verification available (#13786) (Thanks @jborean93!)
+- Add the `OutputTypeAttribute` to `Get-ExperimentalFeature` (#13738) (Thanks @ThomasNieto!)
+- Fix blocking wait when starting file associated with a Windows application (#13750)
+- Emit warning if `ConvertTo-Json` exceeds `-Depth` value (#13692)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @mkswd, @ThomasNieto, @PatLeong, @paul-cheung, @georgettica</p>
+
+</summary>
+
+<ul>
+<li>Fix RCS1049: Simplify boolean comparison (#13994) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0062: Make local function static (#14044) (Thanks @xtqqczze!)</li>
+<li>Enable CA2207: Initialize value type static fields inline (#14068) (Thanks @xtqqczze!)</li>
+<li>Enable CA1837: Use <code>ProcessId</code> and <code>CurrentManagedThreadId</code> from <code>System.Environment</code> (#14063) (Thanks @xtqqczze and @PatLeong!)</li>
+<li>Remove unnecessary using directives (#14014, #14017, #14021, #14050, #14065, #14066, #13863, #13860, #13861, #13814) (Thanks @xtqqczze and @ThomasNieto!)</li>
+<li>Remove unnecessary usage of LINQ <code>Count</code> method (#13545) (Thanks @xtqqczze!)</li>
+<li>Fix SA1518: The code must not contain extra blank lines at the end of the file (#13574) (Thanks @xtqqczze!)</li>
+<li>Enable CA1829: Use the <code>Length</code> or <code>Count</code> property instead of <code>Count()</code> (#13925) (Thanks @xtqqczze!)</li>
+<li>Enable CA1827: Do not use <code>Count()</code> or <code>LongCount()</code> when <code>Any()</code> can be used (#13923) (Thanks @xtqqczze!)</li>
+<li>Enable or fix nullable usage in a few files (#13793, #13805, #13808, #14018, #13804) (Thanks @mkswd and @georgettica!)</li>
+<li>Enable IDE0040: Add accessibility modifiers (#13962, #13874) (Thanks @xtqqczze!)</li>
+<li>Make applicable private Guid fields readonly (#14000) (Thanks @xtqqczze!)</li>
+<li>Fix CA1003: Use generic event handler instances (#13937) (Thanks @xtqqczze!)</li>
+<li>Simplify delegate creation (#13578) (Thanks @xtqqczze!)</li>
+<li>Fix RCS1033: Remove redundant boolean literal (#13454) (Thanks @xtqqczze!)</li>
+<li>Fix RCS1221: Use pattern matching instead of combination of <code>as</code> operator and null check (#13333) (Thanks @xtqqczze!)</li>
+<li>Use <code>is not</code> syntax (#13338) (Thanks @xtqqczze!)</li>
+<li>Replace magic number with constant in PDH (#13536) (Thanks @xtqqczze!)</li>
+<li>Fix accessor order (#13538) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0054: Use compound assignment (#13546) (Thanks @xtqqczze!)</li>
+<li>Fix RCS1098: Constant values should be on right side of comparisons (#13833) (Thanks @xtqqczze!)</li>
+<li>Enable CA1068: <code>CancellationToken</code> parameters must come last (#13867) (Thanks @xtqqczze!)</li>
+<li>Enable CA10XX rules with suggestion severity (#13870, #13928, #13924) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0064: Make Struct fields writable (#13945) (Thanks @xtqqczze!)</li>
+<li>Run <code>dotnet-format</code> to improve formatting of source code (#13503) (Thanks @xtqqczze!)</li>
+<li>Enable CA1825: Avoid zero-length array allocations (#13961) (Thanks @xtqqczze!)</li>
+<li>Add IDE analyzer rule IDs to comments (#13960) (Thanks @xtqqczze!)</li>
+<li>Enable CA1830: Prefer strongly-typed <code>Append</code> and <code>Insert</code> method overloads on <code>StringBuilder</code> (#13926) (Thanks @xtqqczze!)</li>
+<li>Enforce code style in build (#13957) (Thanks @xtqqczze!)</li>
+<li>Enable CA1836: Prefer <code>IsEmpty</code> over <code>Count</code> when available (#13877) (Thanks @xtqqczze!)</li>
+<li>Enable CA1834: Consider using <code>StringBuilder.Append(char)</code> when applicable (#13878) (Thanks @xtqqczze!)</li>
+<li>Fix IDE0044: Make field readonly (#13884, #13885, #13888, #13892, #13889, #13886, #13890, #13891, #13887, #13893, #13969, #13967, #13968, #13970, #13971, #13966, #14012) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0048: Add required parentheses (#13896) (Thanks @xtqqczze!)</li>
+<li>Enable IDE1005: Invoke delegate with conditional access (#13911) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0036: Enable the check on the order of modifiers (#13958, #13881) (Thanks @xtqqczze!)</li>
+<li>Use span-based <code>String.Concat</code> instead of <code>String.Substring</code> (#13500) (Thanks @xtqqczze!)</li>
+<li>Enable CA1050: Declare types in namespace (#13872) (Thanks @xtqqczze!)</li>
+<li>Fix minor keyword typo in C# code comment (#13811) (Thanks @paul-cheung!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Enable `CodeQL` Security scanning (#13894)
+- Add global `AnalyzerConfig` with default configuration (#13835) (Thanks @xtqqczze!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@mkswd, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> to <code>16.8.0</code> (#14020)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> to <code>3.8.0</code> (#14075)</li>
+<li>Remove workarounds for .NET 5 RTM builds (#14038)</li>
+<li>Migrate 3rd party signing to ESRP (#14010)</li>
+<li>Fixes to release pipeline for GA release (#14034)</li>
+<li>Don't do a shallow checkout (#13992)</li>
+<li>Add validation and dependencies for Ubuntu 20.04 distribution to packaging script (#13993)</li>
+<li>Add .NET install workaround for RTM (#13991)</li>
+<li>Move to ESRP signing for Windows files (#13988)</li>
+<li>Update <code>PSReadLine</code> version to <code>2.1.0</code> (#13975)</li>
+<li>Bump .NET to version <code>5.0.100-rtm.20526.5</code> (#13920)</li>
+<li>Update script to use .NET RTM feeds (#13927)</li>
+<li>Add checkout step to release build templates (#13840)</li>
+<li>Turn on <code>/features:strict</code> for all projects (#13383) (Thanks @xtqqczze!)</li>
+<li>Bump <code>NJsonSchema</code> to <code>10.2.2</code> (#13722, #13751)</li>
+<li>Add flag to make Linux script publish to production repository (#13714)</li>
+<li>Bump <code>Markdig.Signed</code> to <code>0.22.0</code> (#13741)</li>
+<li>Use new release script for Linux packages (#13705)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix links to LTS versions for Windows (#14070)
+- Fix `crontab` formatting in example doc (#13712) (Thanks @dgoldman-msft!)
+
+[7.2.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.1.0...v7.2.0-preview.1
diff --git a/CHANGELOG/7.3.md b/CHANGELOG/7.3.md
new file mode 100644
index 00000000000..25da137b1c2
--- /dev/null
+++ b/CHANGELOG/7.3.md
@@ -0,0 +1,1307 @@
+# 7.3 Changelog
+
+## [7.3.12] - 2024-04-11
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET 7.0.18</p>
+
+</summary>
+
+<ul>
+<li>Update SDK, dependencies and <code>cgmanifest</code> for <code>7.3.12</code></li>
+<li>Revert changes to <code>packaging.psm1</code></li>
+<li>Verify environment variable for OneBranch before we try to copy (#21441)</li>
+<li>Multiple fixes in official build pipeline (#21408)</li>
+<li>PowerShell co-ordinated build OneBranch pipeline (#21364)</li>
+<li>Add <code>dotenv</code> install as latest version does not work with current Ruby version (#21239)</li>
+<li>Remove <code>surrogateFile</code> setting of <code>APIScan</code> (#21238)</li>
+</ul>
+
+</details>
+
+[7.3.12]: https://github.com/PowerShell/PowerShell/compare/v7.3.11...v7.3.12
+
+## [7.3.11] - 2024-01-11
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 7.0.405</p>
+
+</summary>
+
+<ul>
+<li>Update <code>cgmanifest.json</code> for v7.3.11 release (Internal 29160)</li>
+<li>Update .NET SDK to 7.0.405 (Internal 29140)</li>
+<li>Back port 3 build changes to <code>apiscan.yml</code> (#21035)</li>
+<li>Set the <code>ollForwardOnNoCandidateFx</code> in <code>runtimeconfig.json</code> to roll forward only on minor and patch versions (#20689)</li>
+<li>Remove the <code>ref</code> folder before running compliance (#20373)</li>
+<li>Fix the tab completion tests (#20867)</li>
+</ul>
+
+</details>
+
+[7.3.11]: https://github.com/PowerShell/PowerShell/compare/v7.3.10...v7.3.11
+
+## [7.3.10] - 2023-11-16
+
+### General Cmdlet Updates and Fixes
+
+- Redact Auth header content from ErrorRecord (Internal 28410)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET to 7.0.404</p>
+
+</summary>
+
+<ul>
+<li>Add internal .NET SDK URL parameter to release pipeline (Internal 28505)</li>
+<li>Fix release build by making the internal SDK parameter optional (#20658) (Internal 28440)</li>
+<li>Make internal .NET SDK URL as a parameter for release builld (#20655) (Internal 28428)</li>
+<li>Update the Notices file and cgmanifest (Internal 28500)</li>
+<li>Update .NET to 7.0.404 (Internal 28485)</li>
+<li>Copy azure blob with PowerShell global tool to private blob and move to CDN during release (Internal 28448)</li>
+</ul>
+
+</details>
+
+[7.3.10]: https://github.com/PowerShell/PowerShell/compare/v7.3.9...v7.3.10
+
+## [7.3.9] - 2023-10-26
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET 7 to version 7.0.403</p>
+
+</summary>
+
+<ul>
+<li>Use correct agent pool for downloading from Azure blob</li>
+<li>Remove a timeout value from ADO pipeline stage to resolve a syntax issue</li>
+<li>Update .NET 7 and manifests (Internal 28148)</li>
+<li>Add SBOM for release pipeline (#20519) (#20573)</li>
+<li>Increase timeout when publishing packages to <code>pacakages.microsoft.com</code> (#20470) (#20572)</li>
+<li>Use <code>fxdependent-win-desktop</code> runtime for compliance runs (#20326) (#20571)</li>
+</ul>
+
+</details>
+
+[7.3.9]: https://github.com/PowerShell/PowerShell/compare/v7.3.8...v7.3.9
+
+## [7.3.8] - 2023-10-10
+
+### Security Fixes
+
+- Block getting help from network locations in restricted remoting sessions (Internal 27698)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Build infrastructure maintenance</p>
+
+</summary>
+
+<ul>
+<li>Release build: Change the names of the PATs (#20316)</li>
+<li>Add mapping for mariner arm64 stable (#20310)</li>
+<li>Switch to GitHub Action for linting markdown (#20308)</li>
+<li>Put the calls to <code>Set-AzDoProjectInfo</code> and Set-AzDoAuthToken` in the right order (#20311)</li>
+</ul>
+
+</details>
+
+[7.3.8]: https://github.com/PowerShell/PowerShell/compare/v7.3.7...v7.3.8
+
+## [7.3.7] - 2023-09-18
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK version to 7.0.401</p>
+
+</summary>
+
+<ul>
+<li>Update 'ThirdPartyNotices.txt' (Internal 27602)</li>
+<li>Update to use .NET SDK 7.0.401 (Internal 27591)</li>
+<li>Remove <code>HostArchitecture</code> dynamic parameter for <code>osxpkg</code> (#19917)</li>
+<li>Remove spelling CI in favor of GitHub Action (#20248)</li>
+<li>Enable vPack provenance data (#20253)</li>
+<li>Start using new packages.microsoft.com cli (#20252)</li>
+<li>Add mariner arm64 to PMC release (#20251)</li>
+<li>Add mariner arm64 package build to release build (#20250)</li>
+<li>Make PR creation tool use <code>--web</code> because it is more reliable (#20247)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds (#20246)</li>
+<li>Publish rpm package for rhel9 (#20245)</li>
+<li>Add runtime and packaging type info for mariner2 arm64 (#20244)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update man page to match current help for pwsh (#20249)
+
+[7.3.7]: https://github.com/PowerShell/PowerShell/compare/v7.3.6...v7.3.7
+
+## [7.3.6] - 2023-07-13
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 7.0.306 </p>
+
+</summary>
+
+<ul>
+<li>Update Notices file</li>
+<li>Don't publish notice on failure because it prevents retry</li>
+<li>Bump .NET to 7.0.306 (#19945)</li>
+<li>Remove the property disabling optimization (#19952)</li>
+<li>Add ProductCode in registry for MSI install (#19951)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds (#19953)</li>
+<li>Change <code>System.Security.AccessControl</code> preview version to stable version (#19931)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update the link for getting started in `README.md` (#19947)
+
+[7.3.6]: https://github.com/PowerShell/PowerShell/compare/v7.3.5...v7.3.6
+
+## [7.3.5] - 2023-06-27
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to use .NET 7.0.305</p>
+
+</summary>
+
+<ul>
+<li>Update the ThirdPartyNotice (Internal 26372)</li>
+<li>Add PoolNames variable group to compliance pipeline (#19408)</li>
+<li>Update cgmanifest.json</li>
+<li>Update to .NET 7.0.304 (#19807)</li>
+<li>Disable SBOM signing for CI and add extra files for packaging tests (#19729)</li>
+<li>Increase timeout to make subsystem tests more reliable (#18380)</li>
+<li>Increase the timeout when waiting for the event log (#19264)</li>
+<li>Implement <code>IDisposable</code> in <code>NamedPipeClient</code> (#18341) (Thanks @xtqqczze!)</li>
+<li>Always regenerate files wxs fragment (#19196)</li>
+<li>Bump <code>Microsoft.PowerShell.MarkdownRender</code> (#19751)</li>
+<li>Delete symbols on Linux as well (#19735)</li>
+<li>Add prompt to fix conflict during backport (#19583)</li>
+<li>Add backport function to release tools (#19568)</li>
+<li>Add an explicit manual stage for changelog update (#19551)</li>
+<li>Update the team member list in <code>releaseTools.psm1</code> (#19544)</li>
+<li>Verify that packages have license data (#19543)</li>
+<li>Fix the regex used for package name check in <code>vPack</code> build (#19511)</li>
+<li>Make the vPack PAT library more obvious (#19505)</li>
+<li>Update the metadata.json to mark 7.3 releases as latest for stable channel (#19565)</li>
+</ul>
+
+</details>
+
+[7.3.5]: https://github.com/PowerShell/PowerShell/compare/v7.3.4...v7.3.5
+
+## [7.3.4] - 2023-04-12
+
+### Engine Updates and Fixes
+
+- Add instrumentation to `AmsiUtil` and make the `init` variable readonly (#18727)
+- Fix support for `NanoServer` due to the lack of AMSI (#18882)
+- Adding missing guard for telemetry optout to avoid `NullReferenceException` when importing modules (#18949) (Thanks @powercode!)
+- Fix `VtSubstring` helper method to correctly check chars copied (#19240)
+- Fix `ConciseView` to handle custom `ParserError` error records (#19239)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to use .NET 7.0.5</p>
+
+</summary>
+
+<ul>
+<li>Update ThirdPartyNotices.txt</li>
+<li>Update cgmanifest.json</li>
+<li>Fix the template that creates nuget package</li>
+<li>Update the wix file</li>
+<li>Update to .NET SDK 7.0.203</li>
+<li>Skip VT100 tests on Windows Server 2012R2 as console does not support it (#19413)</li>
+<li>Improve package management acceptance tests by not going to the gallery (#19412)</li>
+<li>Fix stage dependencies and typo in release build (#19353)</li>
+<li>Fix issues in release build and release pipeline (#19338)</li>
+<li>Restructure the package build to simplify signing and packaging stages (#19321)</li>
+<li>Test fixes for stabilizing tests (#19068)</li>
+<li>Add stage for symbols job in Release build (#18937)</li>
+<li>Use reference assemblies generated by dotnet (#19302)</li>
+<li>Add URL for all distributions (#19159)</li>
+</ul>
+
+</details>
+
+[7.3.4]: https://github.com/PowerShell/PowerShell/compare/v7.3.3...v7.3.4
+
+## [7.3.3] - 2023-02-23
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to use .NET 7.0.3</p>
+
+</summary>
+
+<ul>
+<li>Update third party notices for v7.3.3 (Internal 24353)</li>
+<li>Add tool to trigger license information gathering for NuGet modules (#18827)</li>
+<li>Update global.json to 7.0.200 for v7.3.3 (Internal 24334)</li>
+<li>Update cgmanifest for v7.3.3 (Internal 24338)</li>
+</ul>
+
+</details>
+
+[7.3.3]: https://github.com/PowerShell/PowerShell/compare/v7.3.2...v7.3.3
+
+## [7.3.2] - 2023-01-24
+
+### Engine Updates and Fixes
+
+- Fix `SuspiciousContentChecker.Match` to detect a predefined string when the text starts with it (#18916)
+- Fix for JEA session leaking functions (Internal 23820)
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Start-Job` to check the existence of working directory using the PowerShell way (#18917)
+- Fix `Switch-Process` error to include the command that is not found (#18650)
+
+### Tests
+
+- Allow system lock down test debug hook to work with new `WLDP` API (fixes system lock down tests) (#18962)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to use .NET 7.0.2</p>
+
+</summary>
+
+<ul>
+<li>Update dependencies for .NET release (Internal 23818)</li>
+<li>Remove unnecessary reference to <code>System.Runtime.CompilerServices.Unsafe</code> (#18918)</li>
+<li>Add bootstrap after SBOM task to re-install .NET (#18891)</li>
+</ul>
+
+</details>
+
+[7.3.2]: https://github.com/PowerShell/PowerShell/compare/v7.3.1...v7.3.2
+
+## [7.3.1] - 2022-12-13
+
+### Engine Updates and Fixes
+
+- Remove TabExpansion for PSv2 from remote session configuration (Internal 23331)
+- Add `sqlcmd` to list to use legacy argument passing (#18645 #18646)
+- Change `exec` from alias to function to handle arbitrary args (#18644)
+- Fix `Switch-Process` to copy the current env to the new process (#18632)
+- Fix issue when completing the first command in a script with an empty array expression (#18355)
+- Fix `Switch-Process` to set `termios` appropriate for child process (#18572)
+- Fix native access violation (#18571)
+
+### Tests
+
+- Backport CI fixed from #18508 (#18626)
+- Mark charset test as pending (#18609)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+
+</summary>
+
+<ul>
+<li>Update packages (Internal 23330)</li>
+<li>Apply expected file permissions to linux files after authenticode signing (#18647)</li>
+<li>Bump <code>System.Data.SqlClient</code> (#18573)</li>
+<li>Don't install based on build-id for RPM (#18570)</li>
+<li>Work around args parsing issue (#18607)</li>
+<li>Fix package download in <code>vPack</code> job</li>
+</ul>
+
+</details>
+
+[7.3.1]: https://github.com/PowerShell/PowerShell/compare/v7.3.0...v7.3.1
+
+## [7.3.0] - 2022-11-08
+
+### General Cmdlet Updates and Fixes
+
+- Correct calling cmdlet `New-PSSessionOption` in script for `Restart-Computer` (#18374)
+
+### Tests
+
+- Add test for framework dependent package in release pipeline (Internal 23139)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to use internal .NET 7 GA build (Internal 23096)</p>
+
+</summary>
+
+<ul>
+<li>Fix issues with building test artifacts (Internal 23116)</li>
+<li>Use <code>AzFileCopy</code> task instead of <code>AzCopy.exe</code></li>
+<li>Remove <code>AzCopy</code> installation from msixbundle step</li>
+<li>Add TSAUpload for APIScan (#18446)</li>
+<li>Add authenticode signing for assemblies on Linux builds (#18440)</li>
+<li>Do not remove <code>penimc_cor3.dll</code> from build (#18438)</li>
+<li>Allow two-digit revisions in vPack package validation pattern (#18392)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> from <code>7.3.0-rc.1</code> to <code>7.3.0</code> (#18413)</li>
+</ul>
+
+</details>
+
+[7.3.0]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-rc.1...v7.3.0
+
+## [7.3.0-rc.1] - 2022-10-26
+
+### Breaking Change
+
+- Update to use `ComputeCore.dll` for PowerShell Direct (#18194)
+
+### Engine Updates and Fixes
+
+- On Unix, explicitly terminate the native process during cleanup only if it's not running in background (#18215)
+
+### General Cmdlet Updates and Fixes
+
+- Remove the `ProcessorArchitecture` portion from the full name as it's obsolete (#18320)
+
+### Tests
+
+- Add missing `-Tag 'CI'` to describe blocks. (#18317)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump to .NET 7 to <code>7.0.100-rc.2.22477.20</code> (#18328)(#18286)</p>
+</summary>
+
+<ul>
+<li>Update ThirdPartyNotices (Internal 22987)</li>
+<li>Remove API sets (#18304) (#18376)</li>
+<li>Do not cleanup <code>pwsh.deps.json</code> for framework dependent packages (#18300)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> from <code>7.3.0-preview.1</code> to <code>7.3.0-rc.1</code> (#18217)</li>
+<li>Remove unnecessary native dependencies from the package (#18213)</li>
+<li>Make the link to minimal package blob public during release (#18158)</li>
+<li>Create tasks to collect and publish hashes for build files. (#18276)(#18277)</li>
+<li>Add branch counter to compliance build (#18214)</li>
+<li>Move APIScan to compliance build (#18191)</li>
+<li>Update MSI exit message (#18137)</li>
+<li>Remove XML files for min-size package (#18189)</li>
+</ul>
+
+</details>
+
+[7.3.0-rc.1]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.8...v7.3.0-rc.1
+
+## [7.3.0-preview.8] - 2022-09-20
+
+### General Cmdlet Updates and Fixes
+
+- Filter out compiler generated types for `Add-Type -PassThru` (#18095)
+- Fix error formatting to use color defined in `$PSStyle.Formatting` (#17987)
+- Handle `PSObject` argument specially in method invocation logging (#18060)
+- Revert the experimental feature `PSStrictModeAssignment` (#18040)
+- Make experimental feature `PSAMSIMethodInvocationLogging` stable (#18041)
+- Make experimental feature `PSAnsiRenderingFileInfo` stable (#18042)
+- Make experimental feature `PSCleanBlock` stable (#18043)
+- Make experimental feature `PSNativeCommandArgumentPassing` stable (#18044)
+- Make experimental feature `PSExec` stable (#18045)
+- Make experimental feature `PSRemotingSSHTransportErrorHandling` stable (#18046)
+- Add the `ConfigurationFile` option to the PowerShell help content (#18093)
+
+### Build and Packaging Improvements
+
+<summary>
+<p>Bump .NET SDK to version `7.0.100-rc.1`</p>
+</summary>
+
+<details>
+<ul>
+<li>Update ThirdPartyNotices.txt for 7.3.0-preview.8 (Internal 22553)</li>
+<li>Update cgmanifest.json for 7.3.0-preview.8 (Internal 22551)</li>
+<li>Re-enable building with Ready-to-Run (#18107)</li>
+<li>Make sure <code>Security.types.ps1xml</code> gets signed in release build (#17930)</li>
+<li>Update <code>DotnetRuntimeMetadata.json</code> for .NET 7 RC1 build (#18106)</li>
+<li>Add XML reference documents to NuPkg files for SDK (#18017)</li>
+<li>Make Register MU timeout (#17995)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.2.0 to 17.3.0 (#17924)</li>
+<li>Update list of PS team members in release tools (#17928)</li>
+<li>Update to use version 2.21.0 of Application Insights (#17927)</li>
+<li>Complete ongoing <code>Write-Progress</code> in test (#17922)</li>
+</ul>
+</details>
+
+[7.3.0-preview.8]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.7...v7.3.0-preview.8
+
+## [7.3.0-preview.7] - 2022-08-09
+
+### Breaking Changes
+
+- Move the type data definition of `System.Security.AccessControl.ObjectSecurity` to the `Microsoft.PowerShell.Security` module (#16355) (Thanks @iSazonov!)
+
+### Engine Updates and Fixes
+
+- Enable searching for assemblies in `GAC_Arm64` on Windows (#17816)
+- Fix parser exception in using statements with empty aliases (#16745) (Thanks @MartinGC94!)
+- Do not always collapse space between parameter and value for native arguments. (#17708)
+- Remove `PSNativePSPathResolution` experimental feature (#17670)
+
+### General Cmdlet Updates and Fixes
+
+- Fix for deserializing imported ordered dictionary (#15545) (Thanks @davidBar-On!)
+- Make generated implicit remoting modules backward compatible with PowerShell 5.1 (#17227) (Thanks @Tadas!)
+- Re-enable IDE0031: Use Null propagation (#17811) (Thanks @fflaten!)
+- Allow commands to still be executed even if the current working directory no longer exists (#17579)
+- Stop referencing `Microsoft.PowerShell.Security` when the core snapin is used (#17771)
+- Add support for HTTPS with `Set-AuthenticodeSignature -TimeStampServer` (#16134) (Thanks @Ryan-Hutchison-USAF!)
+- Add type accelerator `ordered` for `OrderedDictionary` (#17804) (Thanks @fflaten!)
+- Fix the definition of the `PDH_COUNTER_INFO` struct (#17779)
+- Adding Virtualization Based Security feature names to Get-ComputerInfo (#16415) (Thanks @mattifestation!)
+- Fix `FileSystemProvider` to work with volume and pipe paths (#15873)
+- Remove pre-parse for array-based JSON (#15684) (Thanks @strawgate!)
+- Improve type inference for `$_` (#17716) (Thanks @MartinGC94!)
+- Prevent braces from being removed when completing variables (#17751) (Thanks @MartinGC94!)
+- Fix type inference for `ICollection` (#17752) (Thanks @MartinGC94!)
+- Fix `Test-Json` not handling non-object types at root (#17741) (Thanks @dkaszews!)
+- Change `Get-ChildItem` to treat trailing slash in path as indicating a directory when used with `-Recurse` (#17704)
+- Add `find.exe` to legacy argument binding behavior for Windows (#17715)
+- Add completion for index expressions for dictionaries (#17619) (Thanks @MartinGC94!)
+- Fix enum-ranges for `ValidateRange` in proxy commands (#17572) (Thanks @fflaten!)
+- Fix type completion for attribute tokens (#17484) (Thanks @MartinGC94!)
+- Add `-noprofileloadtime` switch to `pwsh` (#17535) (Thanks @rkeithhill!)
+- Fix legacy `ErrorView` types to use `$host.PrivateData` colors (#17705)
+- Improve dynamic parameter tab completion (#17661) (Thanks @MartinGC94!)
+- Avoid binding positional parameters when completing parameter in front of value (#17693) (Thanks @MartinGC94!)
+- Render decimal numbers in a table using current culture (#17650)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@fflaten, @Molkree, @eltociear</p>
+
+</summary>
+
+<ul>
+<li>Fix other path constructions using <code>Path.Join</code> (#17825)</li>
+<li>Use null propagation (#17787)(#17789)(#17790)(#17791)(#17792)(#17795) (Thanks @fflaten!)</li>
+<li>Re-enable compound assignment preference (#17784) (Thanks @Molkree!)</li>
+<li>Use null-coalescing assignment (#17719)(#17720)(#17721)(#17722)(#17723)(#17724)(#17725)(#17726)(#17727)(#17728)(#17729) (Thanks @Molkree!)</li>
+<li>Disable the warning <code>IDE0031</code> to take .NET 7 Preview 7 (#17770)</li>
+<li>Fix typo in <ode>ModuleCmdletBase.cs</code> (#17714) (Thanks @eltociear!)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Re-enable tests because the corresponding dotnet issues were fixed (#17839)
+- Add test for `LanguageMode` using remoting (#17803) (Thanks @fflaten!)
+- Fix test perf by stopping ongoing `write-progress` (#17749) (Thanks @fflaten!)
+- Re-enable the test `TestLoadNativeInMemoryAssembly` (#17738)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@varunsh-coder, @dkaszews, @Molkree, @ChuckieChen945</p>
+
+</summary>
+
+<ul>
+<li>Update release pipeline to use Approvals and automate some manual tasks (#17837)</li>
+<li>Add GitHub token permissions for workflows (#17781) (Thanks @varunsh-coder!)</li>
+<li>Bump actions/github-script from 3 to 6 (#17842)</li>
+<li>Bump cirrus-actions/rebase from 1.6 to 1.7 (#17843)</li>
+<li>Remove unneeded verbose message in build (#17840)</li>
+<li>Detect default runtime using dotnet --info in build.psm1 (#17818) (Thanks @dkaszews!)</li>
+<li>Bump <code>actions/checkout</code> from 2 to 3 (#17828)</li>
+<li>Bump <code>actions/download-artifact</code> from 2 to 3 (#17829)</li>
+<li>Bump <code>github/codeql-action</code> from 1 to 2 (#17830)</li>
+<li>Bump <code>peter-evans/create-pull-request</code> from 3 to 4 (#17831)</li>
+<li>Bump <code>actions/upload-artifact</code> from 2 to 3 (#17832)</li>
+<li>Enable Dependabot for GitHub Actions (#17775) (Thanks @Molkree!)</li>
+<li>Update .NET SDK version from <code>7.0.100-preview.6.22352.1</code> to <code>7.0.100-preview.7.22377.5</code> (#17776)</li>
+<li>Fix a bug in <code>install-powershell.ps1</code> (#17794) (Thanks @ChuckieChen945!)</li>
+<li>Bump xunit from 2.4.1 to 2.4.2 (#17817)</li>
+<li>Update how to update homebrew (#17798)</li>
+<li>Don't run link check on forks (#17797)</li>
+<li>Update dotnetmetadata.json to start consuming .NET 7 preview 7 builds (#17736)</li>
+<li>Bump PackageManagement from 1.4.7 to 1.4.8.1 (#17709)</li>
+<li>Exclude ARM images from running in CI (#17713)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update the comment about why R2R is disabled (#17850)
+- Update changelog and `.spelling` for `7.3.0-preview.6` release (#17835)
+- Updated `ADOPTERS.md` for Power BI (#17766)
+- Update README.md with the current Fedora version (#15717) (Thanks @ananya26-vishnoi!)
+- Update `README` and `metadata.json` for next release (#17676) (Thanks @SeeminglyScience!)
+
+[7.3.0-preview.7]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.6...v7.3.0-preview.7
+
+## [7.3.0-preview.6] - 2022-07-18
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Export-PSSession` to not throw error when a rooted path is specified for `-OutputModule` (#17671)
+- Change `ConvertFrom-Json -AsHashtable` to use ordered hashtable (#17405)
+- Remove potential ANSI escape sequences in strings before using in `Out-GridView` (#17664)
+- Add the `-Milliseconds` parameter to `New-TimeSpan` (#17621) (Thanks @NoMoreFood!)
+- Update `Set-AuthenticodeSignature` to use `SHA256` as the default (#17560) (Thanks @jborean93!)
+- Fix tab completion regression when completing `ValidateSet` values (#17628) (Thanks @MartinGC94!)
+- Show optional parameters as such when displaying method definition and overloads (#13799) (Thanks @eugenesmlv!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@sethvs, @MartinGC94, @eltociear</p>
+
+</summary>
+
+<ul>
+<li>Fix comment in InternalCommands.cs (#17669) (Thanks @sethvs!)</li>
+<li>Use discards for unused variables (#17620) (Thanks @MartinGC94!)</li>
+<li>Fix typo in CommonCommandParameters.cs (#17524) (Thanks @eltociear!)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Fix SDK tests for release build (#17678)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@tamasvajk</p>
+
+</summary>
+
+<ul>
+<li>Create test artifacts for Windows ARM64 (#17675)</li>
+<li>Update to the latest NOTICES file (#17607)</li>
+<li>Update .NET SDK version from <code>7.0.100-preview.5.22307.18</code> to <code>7.0.100-preview.6.22352.1</code> (#17634)</li>
+<li>Set the compound assignment preference to false (#17632)</li>
+<li>Update DotnetMetadata.json to start consuming .NET 7 Preview 6 builds (#17630)</li>
+<li>Install .NET 3.1 as it is required by the vPack task (#17600)</li>
+<li>Update to use PSReadLine <code>v2.2.6</code> (#17595)</li>
+<li>Fix <code>build.psm1</code> to not specify both version and quality for <code>dotnet-install</code> (#17589) (Thanks @tamasvajk!)</li>
+<li>Bump Newtonsoft.Json in /test/perf/dotnet-tools/Reporting (#17592)</li>
+<li>Bump Newtonsoft.Json in /test/perf/dotnet-tools/ResultsComparer (#17566)</li>
+<li>Disable RPM SBOM test. (#17532)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Remove `katacoda.com` from doc as it now returns 404 (#17625)
+- Update changelog for `v7.2.5` and `v7.3.0-preview.5` (#17565)
+- Update `README.md` and `metadata.json` for upcoming releases (#17526)
+
+[7.3.0-preview.6]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.5...v7.3.0-preview.6
+
+## [7.3.0-preview.5] - 2022-06-21
+
+### Engine Updates and Fixes
+
+- Improve type inference and completions (#16963) (Thanks @MartinGC94!)
+- Make `Out-String` and `Out-File` keep string input unchanged (#17455)
+- Make `AnsiRegex` able to capture Hyperlink ANSI sequences (#17442)
+- Add the `-ConfigurationFile` command-line parameter to `pwsh` to support local session configuration (#17447)
+- Fix native library loading for `osx-arm64` (#17365) (Thanks @awakecoding!)
+- Fix formatting to act appropriately when the style of table header or list label is empty string (#17463)
+
+### General Cmdlet Updates and Fixes
+
+- Fix various completion issues inside the `param` block (#17489) (Thanks @MartinGC94!)
+- Add Amended switch to `Get-CimClass` cmdlet (#17477) (Thanks @iSazonov!)
+- Improve completion on operators (#17486) (Thanks @MartinGC94!)
+- Improve array element completion for command arguments (#17078) (Thanks @matt9ucci!)
+- Use AST extent for `PSScriptRoot` path completion (#17376)
+- Add type inference support for generic methods with type parameters (#16951) (Thanks @MartinGC94!)
+- Write out OSC indicator only if the `stdout` is not redirected (#17419)
+- Remove the assert and use a relatively larger capacity to cover possible increase of .NET reference assemblies (#17423)
+- Increase reference assembly count to 161 (#17420)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@Yulv-git, @eltociear</p>
+
+</summary>
+
+<ul>
+<li>Fix some typos in source code (#17481) (Thanks @Yulv-git!)</li>
+<li>Fix typo in `AsyncResult.cs` (#17396) (Thanks @eltociear!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Update script to pin to .NET 7 preview 5 version (#17448)
+- Start-PSPester: argument completer for `-Path` (#17334) (Thanks @powercode!)
+- Add reminder workflows (#17387)
+- Move to configuring the fabric bot via JSON (#17411)
+- Update Documentation Issue Template URL (#17410) (Thanks @michaeltlombardi!)
+- Update script to automatically take new preview prerelease builds (#17375)
+
+### Tests
+
+- Make Assembly Load Native test work on a FX Dependent Linux Install (#17380)
+- Update `Get-Error` test to not depend on DNS APIs (#17471)
+
+### Build and Packaging Improvements
+
+<details>
+
+<ul>
+<li>Update .NET SDK version from <code>7.0.100-preview.4.22252.9</code> to <code>7.0.100-preview.5.22307.18</code> (#17402)</li>
+<li>Downgrade the <code>Microsoft.CodeAnalysis.NetAnalyzers</code> package to <code>7.0.0-preview1.22217.1</code> (#17515)</li>
+<li>Rename mariner package to cm (#17505)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#17476)</li>
+<li>Bump <code>NJsonSchema</code> from 10.7.1 to 10.7.2 (#17475)</li>
+<li>Publish preview versions of mariner to preview repo (#17451)</li>
+<li>Update to the latest NOTICES file (#17421)</li>
+<li>Do not publish package for Mariner 1.0 (#17415)</li>
+<li>Add <code>AppX</code> capabilities in MSIX manifest so that PS7 can call the <code>AppX</code> APIs (#17416)</li>
+<li>Update to the latest NOTICES file (#17401)</li>
+<li>Fix mariner mappings (#17413)</li>
+<li>Update the cgmanifest (#17393)</li>
+<li>Bump `NJsonSchema` from `10.7.0` to `10.7.1` (#17381)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update to the latest NOTICES file (#17493) (Thanks @github-actions[bot]!)
+- Update the cgmanifest (#17478) (Thanks @github-actions[bot]!)
+- Correct spelling in Comments and tests (#17480) (Thanks @Yulv-git!)
+- Fix spelling errors introduced in changelog (#17414)
+- Update changelog for v7.3.0-preview.4 release (#17412)
+- Update readme and metadata for 7.3.0-preview.4 release (#17378)
+
+[7.3.0-preview.5]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.4...v7.3.0-preview.5
+
+## [7.3.0-preview.4] - 2022-05-23
+
+### Engine Updates and Fixes
+
+<ul>
+<li>Remove the use of <code>BinaryFormatter</code> in PSRP serialization (#17133) (Thanks @jborean93!)</li>
+<li>Update telemetry collection removing unused data and adding some new data (#17304)</li>
+<li>Fix the word wrapping in formatting to handle escape sequences properly (#17316)</li>
+<li>Fix the error message in Hashtable-to-object conversion (#17329)</li>
+<li>Add support for new WDAC API (#17247)</li>
+<li>On Windows, reset cursor visibility back to previous state when rendering progress (#16782)</li>
+<li>Fix the list view to not leak VT decorations (#17262)</li>
+<li>Fix formatting truncation to handle strings with VT sequences (#17251)</li>
+<li>Fix line breakpoints for <code>return</code> statements without a value (#17179)</li>
+<li>Fix for partial PowerShell module search paths, that can be resolved to CWD locations (#17231) (Internal 20126)</li>
+<li>Change logic in the testing helper module for determining whether <code>PSHOME</code> is writable (#17218)</li>
+<li>Make a variable assignment in a <code>ParenExpression</code> to return the variable value (#17174)</li>
+<li>Use new Windows signature APIs from <code>Microsoft.Security.Extensions</code> package (#17159)</li>
+<li>Do not include node names when sending telemetry. (#16981)</li>
+<li>Support forward slashes in network share (UNC path) completion (#17111) (#17117) (Thanks @sba923!)</li>
+<li>Do not generate clean block in proxy function when the feature is disabled (#17112)</li>
+<li>Ignore failure attempting to set console window title (#16948)</li>
+<li>Update regex used to remove ANSI escape sequences to be more specific to decoration and CSI sequences (#16811)</li>
+<li>Improve member auto completion (#16504) (Thanks @MartinGC94!)</li>
+<li>Prioritize <code>ValidateSet</code> completions over Enums for parameters (#15257) (Thanks @MartinGC94!)</li>
+<li>Add Custom Remote Connections Feature (#17011)</li>
+</ul>
+
+### General Cmdlet Updates and Fixes
+
+<ul>
+<li>Add check for <code>ScriptBlock</code> wrapped in <code>PSObject</code> to <code>$using</code> used in <code>ForEach-Object -Parallel</code> (#17234) (Thanks @ryneandal!)</li>
+<li>Fix <code>ForEach</code> method to set property on a scalar object (#17213)</li>
+<li>Fix <code>Sort-Object -Stable -Unique</code> to actually do stable sorting (#17189) (Thanks @m1k0net!)</li>
+<li>Add <code>OutputType</code> attribute to various commands (#16962) (Thanks @MartinGC94!)</li>
+<li>Make <code>Stop-Service</code> only request needed privileges when not setting SDDL. (#16663) (Thanks @kvprasoon!)</li>
+</ul>
+
+### Code Cleanup
+
+<ul>
+<li>Remove <code>EventLogLogProvider</code> and its related legacy code (#17027)</li>
+<li>Fix typos in names of method (#17003) (Thanks @al-cheb!)</li>
+<li>SemanticChecks: Avoid repeated type resolution of <code>[ordered]</code> (#17328) (Thanks IISResetMe!)</li>
+<li>Redo the change that was reverted by #15853 (#17357)</li>
+<li>Correct spelling of <code>pseudo</code> in <code>Compiler.cs</code> (#17285) (Thanks @eltociear!)</li>
+<li>Make<code>NameObscurerTelemetryInitializer</code> internal (#17214)</li>
+<li>Make <code>NameObscurerTelemetryInitializer</code> internal (#17167)</li>
+<li>Correct Typo in the resource string <code>PathResolvedToMultiple</code> (#17098) (Thanks @charltonstanley!)</li>
+<li>Fix typo in <code>ComRuntimeHelpers.cs</code> (#17104) (Thanks @eltociear!)</li>
+</ul>
+
+### Documentation and Help Content
+
+<ul>
+<li>Update link to PowerShell remoting in depth video (#17166)</li>
+</ul>
+
+### Tests
+
+<ul>
+<li>Add <code>-because</code> to the failing test to aid in debugging (#17030)</li>
+<li>Simplify Enum generator for the <code>-bnot</code> operator test (#17014)</li>
+<li>Improve unique naming for tests (#17043)</li>
+<li>Use a random string for the missing help topic to improve the chances that the help topic really won't be found. (#17042)</li>
+</ul>
+
+### Build and Packaging Improvements
+
+<ul>
+<li>Update <code>README.md</code> and <code>metadata.json</code> for v7.3.0-preview.3 release (#17029)</li>
+<li>Do not pull dotnet updates from internal feed (#17007)</li>
+<li>Simplify <code>Get-WSManSupport</code> based on current .NET Distro Support (#17356)</li>
+<li>Update to the latest NOTICES file (#17372, #17332, #17311, #17275)</li>
+<li>Run on every PR and let the action skip (#17366)</li>
+<li>Make sure verbose message is not null (#17363)</li>
+<li>Release changelogs (#17364)</li>
+<li>Update build versions (#17318)</li>
+<li>Add Daily Link Check GitHub Workflow (#17351)</li>
+<li>Update the cgmanifest (#17361, #17344, #17324, #17302, #17268)</li>
+<li>Bump <code>NJsonSchema</code> from <code>10.6.10</code> to <code>10.7.0</code> (#17350)</li>
+<li>Disable broken macOS CI job, which is unused (#17221)</li>
+<li>Have rebase workflow Post a message when it starts (#17341)</li>
+<li>Update <code>DotnetRuntimeMetadata.json</code> for .NET 7 Preview 4 (#17336)</li>
+<li>Update Ubuntu 22 to be detected as not supported WSMan (#17338)</li>
+<li>Bump xunit.runner.visualstudio from 2.4.3 to 2.4.5 (#17274)</li>
+<li>Make sure we execute tests on LTS package for older LTS releases (#17326)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.1.0 to 17.2.0 (#17320)</li>
+<li>Add fedora to the OS's that can't run WSMan (#17325)</li>
+<li>Add sles15 support to <code>install-powershell.sh</code> (#16984)</li>
+<li>Start rotating through all images (#17315)</li>
+<li>Update .NET SDK version from <code>7.0.100-preview.2.22153.17</code> to <code>7.0.100-preview.4.22252.9</code> (#17061)</li>
+<li>Disable release security analysis for SSH CI (#17303)</li>
+<li>Add a finalize template which causes jobs with issues to fail (#17314)</li>
+<li>Add mapping for ubuntu22.04 jammy (#17317)</li>
+<li>Enable more tests to be run in a container. (#17294)</li>
+<li>Fix <code>build.psm1</code> to find the required .NET SDK version when a higher version is installed (#17299)</li>
+<li>Improve how Linux container CI builds are identified (#17295)</li>
+<li>Only inject NuGet security analysis if we are using secure <code>nuget.config</code> (#17293)</li>
+<li>Reduce unneeded verbose message from <code>build.psm1</code> (#17291)</li>
+<li>Switch to using GitHub action to verify Markdown links for PRs (#17281)</li>
+<li>Put Secure supply chain analysis at correct place (#17273)</li>
+<li>Fix build id variable name when selecting CI container (#17279)</li>
+<li>Add rotation between the two mariner images (#17277)</li>
+<li>Update to use <code>mcr.microsoft.com</code> (#17272)</li>
+<li>Update engine working group members (#17271)</li>
+<li>Bump PSReadLine from 2.2.2 to 2.2.5 in /src/Modules (#17252)</li>
+<li>Update timeout for daily (#17263)</li>
+<li>Bump NJsonSchema from 10.6.9 to 10.6.10 (#16902)</li>
+<li>Update the <code>cgmanifest</code> (#17260)</li>
+<li>Fix Generate checksum file for packages build failure - v7.1.7 (#17219) (Internal 20274)</li>
+<li>Move <code>cgmanifest</code> generation to daily (#17258)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#17245)</li>
+<li>Update to the latest notice file (#17238)</li>
+<li>Add container to Linux CI (#17233)</li>
+<li>Mark <code>Microsoft.Management.Infrastructure.Runtime.Win</code> as a developer dependency to hide in notice file (#17230)</li>
+<li>Fixing dotnet SDK version parsing in <code>build.psm1</code> (#17198) (Thanks @powercode!)</li>
+<li>Fixed package names verification to support multi-digit versions (#17220)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 4.2.0-1.final to 4.2.0-4.final (#17210)</li>
+<li>Add backport action (#17212)</li>
+<li>Updated changelogs for v7.0.9 / v7.0.10 / v7.1.6 / v7.1.7 / v7.2.2 / v7.2.3  (#17207)</li>
+<li>Updated metadata.json and README.md for v7.2.3 and v7.0.10 (#17158)</li>
+<li>Update package fallback list for ubuntu (from those updated for ubuntu 22.04) (deb) (#17180)</li>
+<li>Update <code>wix</code> to include security extensions package (#17171)</li>
+<li>Update rebase.yml (#17170)</li>
+<li>Adds sha256 digests to RPM packages (#16896) (Thanks @ngharo!)</li>
+<li>Make mariner packages Framework dependent (#17151)</li>
+<li>Update to the latest notice file (#17169)</li>
+<li>Update to the latest notice file (#17146)</li>
+<li>Replace <code>.</code> in notices container name (#17154)</li>
+<li>Allow multiple installations of dotnet. (#17141)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#17105)</li>
+<li>Update to the latest notice file (#16437)</li>
+<li>Skip failing scriptblock tests (#17093)</li>
+<li>Update dotnet-install script download link (#17086)</li>
+<li>Fix the version of the <code>Microsoft.CodeAnalysis.NetAnalyzers</code> package (#17075)</li>
+<li>Update <code>dotnetmetadata.json</code> to accept .NET 7 preview 3 builds (#17063)</li>
+<li>Re-enable <code>PowerShellGet</code> tests targeting PowerShell gallery (#17062)</li>
+<li>Add mariner 1.0 amd64 package (#17057)</li>
+<li>Create checksum file for global tools (#17056)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#17065)</li>
+<li>Use new cask format (#17064)</li>
+</ul>
+
+[7.3.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.3...v7.3.0-preview.4
+
+## [7.3.0-preview.3] - 2022-03-21
+
+### Engine Updates and Fixes
+
+- Fix the parsing code for .NET method generic arguments (#16937)
+- Allow the `PSGetMemberBinder` to get value of `ByRef` property (#16956)
+- Allow a collection that contains `Automation.Null` elements to be piped to pipeline (#16957)
+
+### General Cmdlet Updates and Fixes
+
+- Add the module `CompatPowerShellGet` to the allow-list of telemetry modules (#16935)
+- Fix `Enter-PSHostProcess` and `Get-PSHostProcessInfo` cmdlets by handling processes that have exited (#16946)
+- Improve Hashtable completion in multiple scenarios (#16498) (Thanks @MartinGC94!)
+
+### Code Cleanup
+
+- Fix a typo in `CommandHelpProvider.cs` (#16949) (Thanks @eltociear!)
+
+### Tests
+
+- Update a few tests to make them more stable in CI (#16944)
+- Roll back Windows images used in testing to Windows Server 2019 (#16958)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Update .NET SDK to 7.0.0-preview.2</p>
+</summary>
+
+<ul>
+<li>Update .NET to 7.0.0-preview.2 build (#16930)</li>
+<li>Update <code>AzureFileCopy</code> task and fix the syntax for specifying <code>pool</code> (#17013)</li>
+</ul>
+
+</details>
+
+[7.3.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.2...v7.3.0-preview.3
+
+## [7.3.0-preview.2] - 2022-02-24
+
+### Engine Updates and Fixes
+
+- Fix the `clean` block for generated proxy function (#16827)
+- Add support to allow invoking method with generic type arguments (#12412 and #16822) (Thanks @vexx32!)
+- Report error when PowerShell built-in modules are missing (#16628)
+
+### General Cmdlet Updates and Fixes
+
+- Prevent command completion if the word to complete is a single dash (#16781) (Thanks @ayousuf23!)
+- Use `FindFirstFileW` instead of `FindFirstFileExW` to correctly handle Unicode filenames on FAT32 (#16840) (Thanks @iSazonov!)
+- Add completion for loop labels after Break/Continue (#16438) (Thanks @MartinGC94!)
+- Support OpenSSH options for `PSRP` over SSH commands (#12802) (Thanks @BrannenGH!)
+- Adds a `.ResolvedTarget` Property to `File-System` Items to Reflect a Symlink's Target as `FileSystemInfo` (#16490) (Thanks @hammy3502!)
+- Use `NotifyEndApplication` to re-enable VT mode (#16612)
+- Add new parameter to `Start-Sleep`: `[-Duration] <timespan>` (#16185) (Thanks @IISResetMe!)
+- Add lock and null check to remoting internals (#16542) (#16683) (Thanks @SergeyZalyadeev!)
+- Make `Measure-Object` ignore missing properties unless running in strict mode (#16589) (Thanks @KiwiThePoodle!)
+- Add `-StrictMode` to `Invoke-Command` to allow specifying strict mode when invoking command locally (#16545) (Thanks @Thomas-Yu!)
+- Fix `$PSNativeCommandArgPassing` = `Windows` to handle empty args correctly (#16639)
+- Reduce the amount of startup banner text (#16516) (Thanks @rkeithhill!)
+- Add `exec` cmdlet for bash compatibility (#16462)
+- Add AMSI method invocation logging as experimental feature (#16496)
+- Fix web cmdlets so that an empty `Get` does not include a `content-length` header (#16587)
+- Update `HelpInfoUri` for 7.3 release (#16646)
+- Fix parsing `SemanticVersion` build label from version string (#16608)
+- Fix `ForEach-Object -Parallel` when passing in script block variable (#16564)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @iSazonov, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Fix typo in PowerShellExecutionHelper.cs (#16776) (Thanks @eltociear!)</li>
+<li>Use more efficient platform detection API (#16760) (Thanks @iSazonov!)</li>
+<li>Seal <code>ClientRemotePowerShell</code> (#15802) (Thanks @xtqqczze!)</li>
+<li>Fix the DSC overview URL in a Markdown file and some small cleanup changes (#16629)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Fix automation to update experimental JSON files in GitHub action (#16837)
+
+### Tests
+
+- Update `markdownlint` to the latest version (#16825)
+- Bump the package `path-parse` from `1.0.6` to `1.0.7` (#16820)
+- Remove assert that is incorrect and affecting our tests (#16588)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@dahlia</p>
+
+</summary>
+
+<ul>
+<li>Update NuGet Testing to not re-install dotnet,
+when not needed and dynamically determine the DOTNET_ROOT (Internal 19268, 19269, 19272, 19273, and 19274)</li>
+<li>Remove SkipExperimentalFeatureGeneration when building alpine (Internal 19248)</li>
+<li>Revert .NET 7 changes, Update to the latest .NET 6 and Update WXS file due to blocking issue in .NET 7 Preview 1 </li>
+<li>Install and Find AzCopy</li>
+<li>Use Start-PSBootStrap for installing .NET during nuget packaging</li>
+<li>Fix pool syntax for deployments (Internal 19189)</li>
+<li>Bump NJsonSchema from 10.5.2 to 10.6.9 (#16888)</li>
+<li>Update projects and scripts to use .NET 7 preview 1 prerelease builds (#16856)</li>
+<li>Add warning messages when package precheck fails (#16867)</li>
+<li>Refactor Global Tool packaging to include SBOM generation (#16860)</li>
+<li>Update to use <code>windows-latest</code> as the build agent image (#16831)</li>
+<li>Ensure alpine and arm SKUs have <code>powershell.config.json</code> file with experimental features enabled (#16823)</li>
+<li>Update experimental feature json files (#16838) (Thanks @github-actions[bot]!)</li>
+<li>Remove WiX install (#16834)</li>
+<li>Add experimental json update automation (#16833)</li>
+<li>Update .NET SDK to 6.0.101 and fix <code>Microsoft.PowerShell.GlobalTool.Shim.csproj</code> (#16821)</li>
+<li>Add SBOM manifest to nuget packages (#16711)</li>
+<li>Improve logic for updating .NET in CI (#16808)</li>
+<li>Add Linux package dependencies for packaging (#16807)</li>
+<li>Switch to our custom images for build and release (#16801)</li>
+<li>Remove all references to <code>cmake</code> for the builds in this repo (#16578)</li>
+<li>Fix build for new <code>InvokeCommand</code> attributes (#16800)</li>
+<li>Let macOS installer run without Rosetta on Apple Silicon (#16742) (Thanks @dahlia!)</li>
+<li>Update the expect .NET SDK quality to GA for installing dotnet (#16784)</li>
+<li>Change nuget release yaml to use <code>UseDotNet</code> task (#16701)</li>
+<li>Bump Microsoft.ApplicationInsights from 2.19.0 to 2.20.0 (#16642)</li>
+<li>Register NuGet source when generating <code>CGManifest</code> (#16570)</li>
+<li>Update Images used for release (#16580)</li>
+<li>Update SBOM generation (#16641)</li>
+<li>Bring changes from 7.3.0-preview.1 (#16640)</li>
+<li>Update the <code>vmImage</code> and PowerShell root directory for macOS builds (#16611)</li>
+<li>Update macOS build image and root folder for build (#16609)</li>
+<li>Disabled Yarn cache in <code>markdown.yml</code> (#16599)</li>
+<li>Update cgmanifest (#16600)</li>
+<li>Fix broken links in Markdown (#16598)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Add newly joined members to their respective Working Groups (#16849)
+- Update Engine Working Group members (#16780)
+- Replace the broken link about pull request (#16771)
+- Update changelog to remove a broken URL (#16735)
+- Updated `README.md` and `metadata.json` for `v7.3.0-preview.1` release (#16627)
+- Updating changelog for `7.2.1` (#16616)
+- Updated `README.md` and `metadata.json` for `7.2.1` release (#16586)
+
+[7.3.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.1...v7.3.0-preview.2
+
+## [7.3.0-preview.1] - 2021-12-16
+
+### Breaking Changes
+
+- Add `clean` block to script block as a peer to `begin`, `process`, and `end` to allow easy resource cleanup (#15177)
+- Change default for `$PSStyle.OutputRendering` to `Ansi` (Internal 18449)
+
+### Engine Updates and Fixes
+
+- Remove duplicate remote server mediator code (#16027)
+- Fix `PSVersion` parameter version checks and error messages for PowerShell 7 remoting (#16228)
+- Use the same temporary home directory when `HOME` env variable is not set (#16263)
+- Fix parser to generate error when array has more than 32 dimensions (#16276)
+
+### Performance
+
+- Avoid validation for built-in file extension and color VT sequences (#16320) (Thanks @iSazonov!)
+
+### General Cmdlet Updates and Fixes
+
+- Update `README.md` and `metadata.json` for next preview release (#16107)
+- Use `PlainText` when writing to a host that doesn't support VT (#16092)
+- Remove support for `AppExeCLinks` to retrieve target (#16044)
+- Move `GetOuputString()` and `GetFormatStyleString()` to `PSHostUserInterface` as public API (#16075)
+- Fix `ConvertTo-SecureString` with key regression due to .NET breaking change (#16068)
+- Fix regression in `Move-Item` to only fallback to `copy and delete` in specific cases (#16029)
+- Set `$?` correctly for command expression with redirections (#16046)
+- Use `CurrentCulture` when handling conversions to `DateTime` in `Add-History` (#16005) (Thanks @vexx32!)
+- Fix link header parsing to handle unquoted `rel` types (#15973) (Thanks @StevenLiekens!)
+- Fix a casting error when using `$PSNativeCommandUsesErrorActionPreference` (#15993)
+- Format-Wide: Fix `NullReferenceException` (#15990) (Thanks @DarylGraves!)
+- Make the native command error handling optionally honor `ErrorActionPreference` (#15897)
+- Remove declaration of experimental features in Utility module manifest as they are stable (#16460)
+- Fix race condition between `DisconnectAsync` and `Dispose` (#16536) (Thanks @i3arnon!)
+- Fix the `Max_PATH` condition check to handle long path correctly (#16487) (Thanks @Shriram0908!)
+- Update `HelpInfoUri` for 7.2 release (#16456)
+- Fix tab completion within the script block specified for the `ValidateScriptAttribute`. (#14550) (Thanks @MartinGC94!)
+- Update `README.md` to specify gathered telemetry (#16379)
+- Fix typo for "privacy" in MSI installer (#16407)
+- Remove unneeded call to `File.ResolveLinkTarget` from `IsWindowsApplication` (#16371) (Thanks @iSazonov!)
+- Add `-HttpVersion` parameter to web cmdlets (#15853) (Thanks @hayhay27!)
+- Add support to web cmdlets for open-ended input tags (#16193) (Thanks @farmerau!)
+- Add more tests to `Tee-Object -Encoding` (#14539) (Thanks @rpolley!)
+- Don't throw exception when trying to resolve a possible link path (#16310)
+- Fix `ConvertTo-Json -Depth` to allow 100 at maximum (#16197) (Thanks @KevRitchie!)
+- Fix for SSH remoting when banner is enabled on SSHD endpoint (#16205)
+- Disallow all COM for AppLocker system lock down (#16268)
+- Configure `ApplicationInsights` to not send cloud role name (#16246)
+- Disallow `Add-Type` in NoLanguage mode on a locked down machine (#16245)
+- Specify the executable path as `TargetObect` for non-zero exit code `ErrorRecord` (#16108) (Thanks @rkeithhill!)
+- Don't allow `Move-Item` with FileSystemProvider to move a directory into itself (#16198)
+- Make property names for the color VT sequences consistent with documentations (#16212)
+- Fix `PipelineVariable` to set variable in the right scope (#16199)
+- Invoke-Command: improve handling of variables with $using: expression (#16113) (Thanks @dwtaber!)
+- Change `Target` from a `CodeProperty` to be an `AliasProperty` that points to `FileSystemInfo.LinkTarget` (#16165)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @eltociear, @iSazonov</p>
+
+</summary>
+
+<ul>
+<li>Improve <code>CommandInvocationIntrinsics</code> API documentation and style (#14369)</li>
+<li>Use <code>bool?.GetValueOrDefault()</code> in <code>FormatWideCommand</code> (#15988) (Thanks @xtqqczze!)</li>
+<li>Remove 4 assertions which cause debug build test runs to fail (#15963)</li>
+<li>Fix typo in `Job.cs` (#16454) (Thanks @eltociear!)</li>
+<li>Remove unnecessary call to `ToArray` (#16307) (Thanks @iSazonov!)</li>
+<li>Remove the unused `FollowSymLink` function (#16231)</li>
+<li>Fix typo in `TypeTable.cs` (#16220) (Thanks @eltociear!)</li>
+<li>Fixes #16176 - replace snippet tag with code tag in comments (#16177)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Fix typo in build.psm1 (#16038) (Thanks @eltociear!)
+- Add `.stylecop` to `filetypexml` and format it (#16025)
+- Enable sending Teams notification when workflow fails (#15982)
+- Use `Convert-Path` for unknown drive in `Build.psm1` (#16416) (Thanks @matt9ucci!)
+
+### Tests
+
+- Add benchmark to test compiler performance (#16083)
+- Enable two previously disabled `Get-Process` tests (#15845) (Thanks @iSazonov!)
+- Set clean state before testing `UseMU` in the MSI (#16543)
+- Fix global tool and SDK tests in release pipeline (#16342)
+- Remove the outdated test (#16269)
+- Removed old not-used-anymore docker-based tests for PS release packages (#16224)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@github-actions[bot], @kondratyev-nv</p>
+
+</summary>
+
+<ul>
+<li>fix issue with hash file getting created before we have finished get-childitem (#16170)</li>
+<li>Add sha256 hashes to release (#16147)</li>
+<li>Change path for Component Governance for build to the path we actually use to build (#16137)</li>
+<li>Update <code>Microsoft.CodeAnalysis.CSharp</code> version (#16138)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#16070)</li>
+<li>Update .NET to <code>6.0.100-rc.1.21458.32</code> (#16066)</li>
+<li>Update minimum required OS version for macOS (#16088)</li>
+<li>Set locale correctly on Linux CI (#16073)</li>
+<li>Ensure locale is set correctly on Ubuntu 20.04 in CI (#16067)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#16045)</li>
+<li>Update .NET SDK version from `6.0.100-rc.1.21430.44` to `6.0.100-rc.1.21455.2` (#16041) (Thanks @github-actions[bot]!)</li>
+<li>Fix the GitHub Action for updating .NET daily builds (#16042)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 4.0.0-3.final to 4.0.0-4.21430.4 (#16036)</li>
+<li>Bump .NET to `6.0.100-rc.1.21430.44` (#16028)</li>
+<li>Move from <code>PkgES</code> hosted agents to 1ES hosted agents (#16023)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#16021)</li>
+<li>Update Ubuntu images to use Ubuntu 20.04 (#15906)</li>
+<li>Fix the mac build by updating the pool image name (#16010)</li>
+<li>Use Alpine 3.12 for building PowerShell for alpine (#16008)</li>
+<li>Update .NET SDK version from `6.0.100-preview.6.21355.2` to `6.0.100-rc.1.21426.1` (#15648) (Thanks @github-actions[bot]!)</li>
+<li>Ignore error from <code>Find-Package</code> (#15999)</li>
+<li>Find packages separately for each source in <code>UpdateDotnetRuntime.ps1</code> script (#15998)</li>
+<li>Update metadata to start using .NET 6 RC1 builds (#15981)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#15985)</li>
+<li>Merge the v7.2.0-preview.9 release branch back to GitHub master (#15983)</li>
+<li>Publish global tool package for stable releases (#15961)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> to newer version (#15962)</li>
+<li>Disabled Yarn cache in <code>markdown.yml</code> (#16599)</li>
+<li>Update cgmanifest (#16600)</li>
+<li>Fix broken links in Markdown (#16598)</li>
+<li>Add explicit job name for approval tasks in Snap stage (#16579)</li>
+<li>Bring back <code>pwsh.exe</code> for framework dependent packages to support Start-Job (#16535)</li>
+<li>Fix NuGet package generation in release build (#16509)</li>
+<li>Add `Microsoft.PowerShell.Commands.SetStrictModeCommand.ArgumentToPSVersionTransformationAttribute` to list of patterns to remove for generated ref assembly (#16489)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from `4.0.0-6.final` to `4.0.1` (#16423)</li>
+<li>use different containers for different branches (#16434)</li>
+<li>Add import so we can use common GitHub workflow function. (#16433)</li>
+<li>Remove prerelease .NET 6 build sources (#16418)</li>
+<li>Update release instructions with link to new build (#16419)</li>
+<li>Bump <code>Microsoft.ApplicationInsights</code> from <code>2.18.0</code> to <code>2.19.0</code> (#16413)</li>
+<li>Update <code>metadata.json</code> to make 7.2.0 the latest LTS (#16417)</li>
+<li>Make static CI a matrix (#16397)</li>
+<li>Update <code>metadata.json</code> in preparation on <code>7.3.0-preview.1</code> release (#16406)</li>
+<li>Update cgmanifest (#16405)</li>
+<li>Add diagnostics used to take corrective action when releasing `buildInfoJson` (#16404)</li>
+<li>`vPack` release should use `buildInfoJson` new to 7.2 (#16402)</li>
+<li>Update the usage of metadata.json for getting LTS information (#16381)</li>
+<li>Add checkout to build json stage to get `ci.psm1` (#16399)</li>
+<li>Update CgManifest.json for 6.0.0 .NET packages (#16398)</li>
+<li>Add current folder to the beginning of the module import (#16353)</li>
+<li>Increment RC MSI build number by 100 (#16354)</li>
+<li>Bump <code>XunitXml.TestLogger</code> from 3.0.66 to 3.0.70 (#16356)</li>
+<li>Move PR Quantifier config to subfolder (#16352)</li>
+<li>Release build info json when it is preview (#16335)</li>
+<li>Add an approval for releasing build-info json (#16351)</li>
+<li>Generate manifest with latest public version of the packages (#16337)</li>
+<li>Update to the latest notices file (#16339) (Thanks @github-actions[bot]!)</li>
+<li>Use notice task to generate license assuming cgmanifest contains all components (#16340)</li>
+<li>Refactor cgmanifest generator to include all components (#16326)</li>
+<li>Fix issues in release build (#16332)</li>
+<li>Update feed and analyzer dependency (#16327)</li>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> from 16.11.0 to 17.0.0 (#16312)</li>
+<li>Update license and cgmanifest (#16325) (Thanks @github-actions[bot]!)</li>
+<li>Fix condition in cgmanifest logic (#16324)</li>
+<li>Add GitHub Workflow to keep notices up to date (#16284)</li>
+<li>Update to latest .NET 6 GA build <code> 6.0.100-rtm.21527.11</code> (#16309)</li>
+<li>Create compliance build (#16286)</li>
+<li>Move mapping file into product repo and add Debian 11  (#16316)</li>
+<li>Add a major-minor build info JSON file (#16301)</li>
+<li>Clean up <code>crossgen</code> related build scripts also generate native symbols for <code>R2R</code> images (#16297)</li>
+<li>Fix Windows build ZIP packaging (#16299) (Thanks @kondratyev-nv!)</li>
+<li>Revert &quot;Update to use .NET 6 GA build (#16296)&quot; (#16308)</li>
+<li>Add <code>wget</code> as a dependency for Bootstrap script (#16303) (Thanks @kondratyev-nv!)</li>
+<li>Fix issues reported by code signing verification tool (#16291)</li>
+<li>Update to use .NET 6 GA build (#16296)</li>
+<li>Revert &quot;add GH workflow to keep the cgmanifest up to date.&quot; (#16294)</li>
+<li>Update ChangeLog for 7.2.0-rc.1 and also fix RPM packaging (#16290)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#16271)</li>
+<li>add GH workflow to keep the cgmanifest up to date.</li>
+<li>Update <code>ThirdPartyNotices.txt</code> (#16283)</li>
+<li>Update `testartifacts.yml` to use <code>ubuntu-latest</code> image (#16279)</li>
+<li>Update version of <code>Microsoft.PowerShell.Native</code> and <code>Microsoft.PowerShell.MarkdownRender</code> packages (#16277)</li>
+<li>Add script to generate <code>cgmanifest.json</code> (#16278)</li>
+<li>Add <code>cgmanifest.json</code> for generating correct third party notice file (#16266)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers from `6.0.0-rtm.21504.2` to `6.0.0-rtm.21516.1` (#16264)</li>
+<li>Only upload stable <code>buildinfo</code> for stable releases (#16251)</li>
+<li>Make RPM license recognized (#16189)</li>
+<li>Don't upload dep or tar.gz for RPM because there are none. (#16230)</li>
+<li>Add condition to generate release files in local dev build only (#16259)</li>
+<li>Update .NET 6 to version 6.0.100-rc.2.21505.57 (#16249)</li>
+<li>change order of try-catch-finally and split out arm runs (#16252)</li>
+<li>Ensure <code>psoptions.json</code> and <code>manifest.spdx.json</code> files always exist in packages (#16258)</li>
+<li>Update to vPack task version to 12 (#16250)</li>
+<li>Remove unneeded `NuGetConfigFile` resource string (#16232)</li>
+<li>Add Software Bill of Materials to the main packages (#16202)</li>
+<li>Sign third party exes (#16229)</li>
+<li>Upgrade <code>set-value</code> package for Markdown test (#16196)</li>
+<li>Use Ubuntu 20.04 for SSH remoting test (#16225)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#16194)</li>
+<li>Bump `Microsoft.CodeAnalysis.NetAnalyzers` from `6.0.0-rc2.21458.5` to `6.0.0-rtm.21480.8` (#16183)</li>
+<li>Move vPack build to 1ES Pool (#16169)</li>
+<li>Fix Microsoft update spelling issue. (#16178)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update Windows PowerShell issues link (#16105) (Thanks @andschwa!)
+- Remove Joey from Committee and WG membership (#16119)
+- Update more docs for `net6.0` TFM (#16102) (Thanks @xtqqczze!)
+- Change `snippet` tag to `code` tag in XML comments (#16106)
+- Update build documentation to reflect .NET 6 (#15751) (Thanks @Kellen-Stuart!)
+- Update `README.md` about the changelogs (#16471) (Thanks @powershellpr0mpt!)
+- Update changelog for 7.2.0 (#16401)
+- Update `metadata.json` and `README.md` for 7.2.0 release (#16395)
+- Update `README.md` and `metadata.json` files for `v7.2.0-rc.1` release (#16285)
+- Update the changelogs for `v7.0.8` and `v7.1.5` releases (#16248)
+
+[7.3.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.10...v7.3.0-preview.1
diff --git a/CHANGELOG/7.4.md b/CHANGELOG/7.4.md
new file mode 100644
index 00000000000..a503e7ceb6c
--- /dev/null
+++ b/CHANGELOG/7.4.md
@@ -0,0 +1,1769 @@
+# 7.4 Changelog
+
+## [7.4.18]
+
+### Engine Updates and Fixes
+
+- Merged PR 40624: Validate CAB path before expansion
+
+### Tests
+
+- Update CI workflow to also target servicing-* branches (#27649)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 8.0.423</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27690)</li>
+<li>Avoid calling credential provider for public feed for Wix (#27664)</li>
+<li>Separate NuGet publish into its own stage after pushing the git tag (#27648)</li>
+</ul>
+
+</details>
+
+[7.4.18]: https://github.com/PowerShell/PowerShell/compare/v7.4.17...v7.4.18
+
+## [7.4.17]
+
+### Code Cleanup
+
+<details>
+
+<ul>
+<li>Remove the unused <code>Publish-NugetToMyGet</code> command from packaging module (#27574)</li>
+</ul>
+
+</details>
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 8.0.422</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27580)</li>
+<li>Skip Store Publish when No Channel Selected (#27571)</li>
+<li>Verify Apple codesign immediately after ESRP signing (#27540)</li>
+<li>Remove unused step that clones <code>Internal-PowerShellTeam-Tools</code> repo in PMC publish pipeline (#27497)</li>
+</ul>
+
+</details>
+
+[7.4.17]: https://github.com/PowerShell/PowerShell/compare/v7.4.16...v7.4.17
+
+## [7.4.16]
+
+### Engine Updates and Fixes
+
+- Fix checks for local user config file paths (#27454)
+
+### General Cmdlet Updates and Fixes
+
+- Update PowerShell telemetry to respect the diagnostics and feedback setting on Windows (#27430)
+- Fix Out-GridView by replacing use of obsolete BinaryFormatter with custom implementation (#27426)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 8.0.421</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27475)</li>
+<li>Add the <code>windowsTargetName</code> for .NET 8 (#27473)</li>
+<li>Update the MSIXBundle-VPack pipeline to create VPack for both LTS and Stable channel packages (#27470)</li>
+<li>Exclude .exe packages from publishing to GitHub (#27458)</li>
+<li>Update <code>Microsoft.PowerShell.Native</code> to the latest GA version (#27448)</li>
+<li>Externalize <code>findMissingNotices</code> target framework selection with ordered Windows fallback (#27427)</li>
+<li>Correct Variable Template Reference in NonOfficial Pipeline Templates (#27428)</li>
+<li>Fix *nix permissions and use certificate_logical_to_actual (#27452)</li>
+<li>Remove package verification from the notice pipeline (#27429)</li>
+<li>Add <code>appLicensing</code> capability to Appx manifest (#27449)</li>
+<li>Add macOS binary code signing and package notarization (#27431)</li>
+<li>Download PMC Packages through <code>TemplateContext</code> (#27330)</li>
+<li>PMC release: Use slash instead of back-slash for Linux container (#27322)</li>
+</ul>
+
+</details>
+
+[7.4.16]: https://github.com/PowerShell/PowerShell/compare/v7.4.15...v7.4.16
+
+## [7.4.15]
+
+### General Cmdlet Updates and Fixes
+
+- Delay update notification for one week to ensure all packages become available (#27229)
+- Close pipe client handles after creating the child ssh process (#27139)
+
+### Tests
+
+- Fix the `PSNativeCommandArgumentPassing` test (#27146)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.420</p>
+
+</summary>
+
+<ul>
+<li>Fix the container image for vPack, MSIX vPack and Package pipelines (#27018)</li>
+<li>Update branch for release (#27279)</li>
+<li>Fix package pipeline by adding in PDP-Media directory (#27255)</li>
+<li>Pin ready-to-merge.yml reusable workflow to commit SHA (#27247)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tags (#27244)</li>
+<li>Build, package, and create VPack for the PowerShell-LTS store package within the same <code>msixbundle-vpack</code> pipeline (#27242)</li>
+<li>Change the display name of PowerShell-LTS package to PowerShell LTS (#27232)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tokens (#27231)</li>
+<li>Redo windows image fix to use latest image (#27230)</li>
+<li>Separate Store Package Creation, Skip Polling for Store Publish, Clean up PDP-Media (#27228)</li>
+<li>Add comment-based help documentation to build.psm1 functions (#27227)</li>
+<li>Fix a preview detection test for the packaging script (#27226)</li>
+<li>Update the PhoneProductId to be the official LTS id used by Store (#27169)</li>
+<li>Select New MSIX Package Name (#27173)</li>
+<li>Publish <code>.msixbundle</code> package as a VPack (#27187)</li>
+<li>Bump <code>github/codeql-action</code> from 4.32.4 to 4.35.1 (#27143) (#27171) (#27175)</li>
+<li><code>release-upload-buildinfo</code>: replace version-comparison channel gating with metadata flags (#27147)</li>
+<li>Create infrastructure to create two msixs and msixbundles for LTS and Stable (#27145)</li>
+<li>Move <code>_GetDependencies</code> MSBuild target from dynamic generation in <code>build.psm1</code> into <code>Microsoft.PowerShell.SDK.csproj</code> (#27144)</li>
+<li>Bump <code>actions/dependency-review-action</code> from 4.8.3 to 4.9.0 (#27142)</li>
+<li>Bump <code>actions/upload-artifact</code> from 6 to 7 (#27141)</li>
+<li>Separate Official and NonOfficial templates for ADO pipelines (#27140)</li>
+<li>Mirror .NET/runtime ICU version range in PowerShell (#27138)</li>
+</ul>
+
+</details>
+
+[7.4.15]: https://github.com/PowerShell/PowerShell/compare/v7.4.14...v7.4.15
+
+## [7.4.14]
+
+### General Cmdlet Updates and Fixes
+
+- Fix `PSMethodInvocationConstraints.GetHashCode` method (#26959)
+
+### Tools
+
+- Add merge conflict marker detection to `linux-ci` workflow and refactor existing actions to use reusable `get-changed-files` action (#26362)
+- Add reusable `get-changed-files` action and refactor existing actions (#26361)
+- Refactor analyze job to reusable workflow and enable on Windows CI (#26342)
+
+### Tests
+
+- Skip the flaky `Update-Help` test for the `PackageManagement` module (#26871)
+- Fix `$PSDefaultParameterValues` leak causing tests to skip unexpectedly (#26869)
+- Add GitHub Actions annotations for Pester test failures (#26800)
+- Mark flaky `Update-Help` web tests as pending to unblock CI (#26805)
+- Update the `Update-Help` tests to use `-Force` to remove read-only files (#26786)
+- Fix merge conflict checker for empty file lists and filter `*.cs` files (#26387)
+- Add markdown link verification for PRs (#26340)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.419</p>
+
+</summary>
+
+<ul>
+<li>Update MaxVisitCount and MaxHashtableKeyCount if visitor safe value context indicates SkipLimitCheck is true (Internal 38882)</li>
+<li>Hardcode Official templates (#26962)</li>
+<li>Split TPN manifest and Component Governance manifest (#26961)</li>
+<li>Correct the package name for .deb and .rpm packages (#26960)</li>
+<li>Bring over all changes for MSIX packaging template (#26933)</li>
+<li>.NET Resolution and Store Publishing Updates  (#26930)</li>
+<li>Update Application Insights package version to 2.23.0 (#26883)</li>
+<li>Update metadata.json to update the Latest attribute with a better name (#26872)</li>
+<li>Update <code>Get-ChangeLog</code> to handle backport PRs correctly (#26870)</li>
+<li>Remove unused runCodesignValidationInjection variable from pipeline templates (#26868)</li>
+<li>Refactor: Centralize xUnit tests into reusable workflow and remove legacy verification (#26864)</li>
+<li>Fix buildinfo.json uploading for preview, LTS, and stable releases (#26863)</li>
+<li>Fix macOS preview package identifier detection to use version string (#26774)</li>
+<li>Update the macOS package name for preview releases to match the previous pattern (#26435)</li>
+<li>Fix condition syntax for StoreBroker package tasks in MSIX pipeline (#26434)</li>
+<li>Fix template path for rebuild branch check in package.yml (#26433)</li>
+<li>Add rebuild branch support with conditional MSIX signing (#26418)</li>
+<li>Move package validation to package pipeline (#26417)</li>
+<li>Backport Store publishing improvements (#26401)</li>
+<li>Fix path to metadata.json in channel selection script (#26399)</li>
+<li>Optimize/split Windows package signing (#26413)</li>
+<li>Improve ADO package build and validation across platforms (#26405)</li>
+<li>Separate Store Automation Service Endpoints, Resolve AppID (#26396)</li>
+<li>Fix the task name to not use the pre-release task (#26395)</li>
+<li>Remove usage of fpm for DEB package generation (#26382)</li>
+<li>Replace fpm with native macOS packaging tools (pkgbuild/productbuild) (#26344)</li>
+<li>Replace fpm with native rpmbuild for RPM package generation (#26337)</li>
+<li>Add log grouping to build.psm1 for collapsible GitHub Actions logs (#26363)</li>
+<li>Convert Azure DevOps Linux Packaging pipeline to GitHub Actions workflow (#26336)</li>
+<li>Integrate Windows packaging into windows-ci workflow using reusable workflow (#26335)</li>
+<li>Add network isolation policy parameter to vPack pipeline (#26339)</li>
+<li>GitHub Workflow cleanup (#26334)</li>
+<li>Add build to vPack Pipeline (#25980)</li>
+<li>Update vPack name (#26222)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update Third Party Notices (#26892)
+
+[7.4.14]: https://github.com/PowerShell/PowerShell/compare/v7.4.13...v7.4.14
+
+## [7.4.13]
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.415</p>
+
+</summary>
+
+<ul>
+<li>[release/v7.4] Update StableRelease to not be the latest (#26042)</li>
+<li>[release/v7.4] Update Ev2 Shell Extension Image to AzureLinux 3 for PMC Release (#26033)</li>
+<li>[release/v7.4] Add 7.4.12 Changelog (#26018)</li>
+<li>[release/v7.4] Fix variable reference for release environment in pipeline (#26014)</li>
+<li>Backport Release Pipeline Changes (Internal 37169)</li>
+<li>[release/v7.4] Update branch for release (#26194)</li>
+<li>[release/v7.4] Mark the 3 consistently failing tests as pending to unblock PRs (#26197)</li>
+<li>[release/v7.4] Remove UseDotnet task and use the dotnet-install script (#26170)</li>
+<li>[release/v7.4] Automate Store Publishing (#26163)</li>
+<li>[release/v7.4] add CodeQL suppresion for NativeCommandProcessor (#26174)</li>
+<li>[release/v7.4] add CodeQL suppressions for UpdatableHelp and NativeCommandProcessor methods (#26172)</li>
+<li>[release/v7.4] Suppress false positive PSScriptAnalyzer warnings in tests and build scripts (#26058)</li>
+<li>[release/v7.4] Ensure that socket timeouts are set only during the token validation (#26080)</li>
+</ul>
+
+</details>
+
+[7.4.13]: https://github.com/PowerShell/PowerShell/compare/v7.4.12...v7.4.13
+
+## [7.4.12]
+
+### Tools
+
+- Add CodeQL suppressions (#25973)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.413</p>
+
+</summary>
+
+<ul>
+<li>Add LinuxHost Network configuration to PowerShell Packages pipeline (#26003)</li>
+<li>Update container images to use mcr.microsoft.com for Linux and Azure Linux (#25987)</li>
+<li>Update SDK to 8.0.413 (#25993)</li>
+<li>Make logical template name consistent between pipelines (#25992)</li>
+<li>Remove AsyncSDL from Pipelines Toggle Official/NonOfficial Runs (#25965)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update third-party library versions to `8.0.19` for `ObjectPool`, Windows Compatibility, and `System.Drawing.Common` (#26001)
+
+[7.4.12]: https://github.com/PowerShell/PowerShell/compare/v7.4.11...v7.4.12
+
+## [7.4.11] - 2025-06-17
+
+### Engine Updates and Fixes
+
+- Move .NET method invocation logging to after the needed type conversion is done for method arguments (#25568)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.411</p>
+
+</summary>
+
+<ul>
+<li>Correct Capitalization Referencing Templates (#25672)</li>
+<li>Manually update SqlClient in TestService</li>
+<li>Update cgmanifest</li>
+<li>Update package references</li>
+<li>Update .NET SDK to latest version</li>
+<li>Change linux packaging tests to ubuntu latest (#25640)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update Third Party Notices (#25524, #25659)
+
+[7.4.11]: https://github.com/PowerShell/PowerShell/compare/v7.4.10...v7.4.11
+
+
+## [7.4.10]
+
+### Engine Updates and Fixes
+
+- Fallback to AppLocker after `WldpCanExecuteFile` (#25229)
+
+### Code Cleanup
+
+<details>
+
+<ul>
+<li> Remove obsolete template from Windows Packaging CI (#25405)</li>
+<li> Cleanup old release pipelines (#25404)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Do not run labels workflow in the internal repository (#25411)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.408</p>
+
+</summary>
+
+<ul>
+<li> Update branch for release (#25518)</li>
+<li> Move MSIXBundle to Packages and Release to GitHub (#25516)</li>
+<li> Add CodeQL suppressions for PowerShell intended behavior (#25376)</li>
+<li> Enhance path filters action to set outputs for all changes when not a PR (#25378)</li>
+<li> Fix Merge Errors from #25401 and Internal 33077  (#25478)</li>
+<li> Fix MSIX artifact upload, vPack template, changelog hashes, git tag command (#25476)</li>
+<li> Fix Conditional Parameter to Skip NuGet Publish (#25475)</li>
+<li> Use new variables template for vPack (#25474)</li>
+<li> Add Windows Store Signing to MSIX bundle (#25472)</li>
+<li> Update test result processing to use NUnitXml format and enhance logging for better clarity (#25471)</li>
+<li> Fix the expected path of .NET after using UseDotnet 2 task to install (#25470)</li>
+<li> Update Microsoft.PowerShell.PSResourceGet to 1.1.0 (#25469)</li>
+<li> Combine GitHub and Nuget Release Stage (#25473)</li>
+<li> Make GitHub Workflows work in the internal mirror (#25409)</li>
+<li> Add default .NET install path for SDK validation (#25339)</li>
+<li> Update APIScan to use new symbols server (#25400)</li>
+<li> Use GitHubReleaseTask (#25401)</li>
+<li> Migrate MacOS Signing to OneBranch (#25412)</li>
+<li> Remove call to NuGet (#25410)</li>
+<li> Restore a script needed for build from the old release pipeline cleanup (#25201) (#25408)</li>
+<li> Switch to ubuntu-latest for CI (#25406)</li>
+<li> Update GitHub Actions to work in private GitHub repository (#25403)</li>
+<li> Simplify PR Template (#25407)</li>
+<li> Disable SBOM generation on set variables job in release build (#25341)</li>
+<li> Update package pipeline windows image version (#25192)</li>
+</ul>
+
+</details>
+
+[7.4.10]: https://github.com/PowerShell/PowerShell/compare/v7.4.9...v7.4.10
+
+## [7.4.9]
+
+### Notes
+
+_This release is internal only. It is not available for download._
+
+### Tools
+
+- Check GH token availability for `Get-Changelog` (#25156)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.407</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#25101)</li>
+<li>Only build Linux for packaging changes (#25161)</li>
+<li>Skip additional packages when generating component manifest (#25160)</li>
+<li>Remove Az module installs and AzureRM uninstalls in pipeline (#25157)</li>
+<li>Add GitHub Actions workflow to verify PR labels (#25158)</li>
+<li>Update security extensions (#25099)</li>
+<li>Make Component Manifest Updater use neutral target in addition to RID target (#25100)</li>
+</ul>
+
+</details>
+
+[7.4.9]: https://github.com/PowerShell/PowerShell/compare/v7.4.8...v7.4.9
+
+## [7.4.8]
+
+### Notes
+
+_This release is internal only. It is not available for download._
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.406</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release  (#25085) (#24884)</li>
+<li>Add UseDotnet task for installing dotnet (#25080)</li>
+<li>Add Justin Chung as PowerShell team member in <code>releaseTools.psm1</code> (#25074)</li>
+<li>Fix V-Pack download package name (#25078)</li>
+<li>Fix MSIX stage in release pipeline (#25079)</li>
+<li>Give the pipeline runs meaningful names (#25081)</li>
+<li>Make sure the vPack pipeline does not produce an empty package (#25082)</li>
+<li>Update CODEOWNERS (#25083)</li>
+<li>Add setup dotnet action to the build composite action (#25084)</li>
+<li>Remove AzDO credscan as it is now in GitHub (#25077)</li>
+<li>Use workload identity service connection to download makeappx tool from storage account (#25075)</li>
+<li>Update .NET SDK (#24993)</li>
+<li>Fix GitHub Action filter overmatching (#24957)</li>
+<li>Fix release branch filters (#24960)</li>
+<li>Convert powershell/PowerShell-CI-macos to GitHub Actions (#24955)</li>
+<li>Convert powershell/PowerShell-CI-linux to GitHub Actions (#24945)</li>
+<li>Convert powershell/PowerShell-Windows-CI to GitHub Actions (#24932)</li>
+<li>PMC parse state correctly from update command's response (#24860)</li>
+<li>Add EV2 support for publishing PowerShell packages to PMC (#24857)</li>
+</ul>
+
+</details>
+
+[7.4.8]: https://github.com/PowerShell/PowerShell/compare/v7.4.7...v7.4.8
+
+## [7.4.7]
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 8.0.405</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release  - Transitive - true - minor (#24546)</li>
+<li>Fix backport mistake in #24429 (#24545)</li>
+<li>Fix seed max value for Container Linux CI (#24510) (#24543)</li>
+<li>Add a way to use only NuGet feed sources (#24528) (#24542)</li>
+<li>Bump Microsoft.PowerShell.PSResourceGet to 1.0.6 (#24419)</li>
+<li>Update path due to pool change (Internal 33083)</li>
+<li>Update pool for &quot;Publish BuildInfo&quot; job (Internal 33082)</li>
+<li>Add missing backports and new fixes (Internal 33077)</li>
+<li>Port copy blob changes (Internal 33055)</li>
+<li>Update firewall to monitor (Internal 33048)</li>
+<li>Fix typo in release-MakeBlobPublic.yml (Internal 33046)</li>
+<li>Update change log for 7.4.6 (Internal 33040)</li>
+<li>Update changelog for v7.4.6 release (Internal 32983)</li>
+<li>Fix backport issues with release pipeline (#24835)</li>
+<li>Remove duplicated parameter (#24832)</li>
+<li>Make the <code>AssemblyVersion</code> not change for servicing releases 7.4.7 and onward (#24821)</li>
+<li>Add *.props and sort path filters for windows CI  (#24822) (#24823)</li>
+<li>Take the newest windows signature nuget packages (#24818)</li>
+<li>Use work load identity service connection to download makeappx tool from storage account (#24817) (#24820)</li>
+<li>Update path filters for Windows CI (#24809) (#24819)</li>
+<li>Fixed release pipeline errors and switched to KS3 (#24751) (#24816)</li>
+<li>Update branch for release  - Transitive - true - minor (#24806)</li>
+<li>Add ability to capture MSBuild Binary logs when restore fails (#24128) (#24799)</li>
+<li>Download package from package build for generating vpack (#24481) (#24801)</li>
+<li>Add a parameter that skips verify packages step (#24763) (#24803)</li>
+<li>Fix Changelog content grab during GitHub Release (#24788) (#24804)</li>
+<li>Add tool package download in publish nuget stage (#24790) (#24805)</li>
+<li>Add CodeQL scanning to APIScan build (#24303) (#24800)</li>
+<li>Deploy Box Update (#24632) (#24802)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update notices file (#24810)
+
+[7.4.7]: https://github.com/PowerShell/PowerShell/compare/v7.4.6...v7.4.7
+
+## [7.4.6] - 2024-10-22
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 8.0.403</p>
+
+</summary>
+
+<ul>
+<li>Copy to static site instead of making blob public (#24269) (#24473)</li>
+<li>Add ability to capture MSBuild Binary logs when restore fails (#24128)</li>
+<li>Keep the roff file when gzipping it. (#24450)</li>
+<li>Update <code>PowerShell-Coordinated_Packages-Official.yml</code> (#24449)</li>
+<li>Update and add new NuGet package sources for different environments. (#24440)</li>
+<li>Add PMC mapping for Debian 12 (bookworm) (#24413)</li>
+<li>Fixes to Azure Public feed usage (#24429)</li>
+<li>Delete <code>assets/AppImageThirdPartyNotices.txt</code> (#24256)</li>
+<li>Delete <code>demos</code> directory (#24258)</li>
+<li>Add specific path for issues in tsaconfig (#24244)</li>
+<li>Checkin generated manpage (#24423)</li>
+<li>Add updated libicu dependency for Debian packages (#24301)</li>
+<li>Add mapping to azurelinux repo (#24290)</li>
+<li>Update vpack pipeline (#24281)</li>
+<li>Add <code>BaseUrl</code> to <code>buildinfo</code> JSON file (#24376)</li>
+<li>Delete the msix blob if it's already there (#24353)</li>
+<li>Make some release tests run in a hosted pools (#24270)</li>
+<li>Create new pipeline for compliance (#24252)</li>
+<li>Use Managed Identity for <code>APIScan</code> authentication (#24243)</li>
+<li>Check <code>Create and Submit</code> in vPack build by default (#24181)</li>
+<li>Capture environment better (#24148)</li>
+<li>Refactor Nuget package source creation to use <code>New-NugetPackageSource</code> function (#24104)</li>
+<li>Make Microsoft feeds the default (#24426)</li>
+<li>Bump to .NET 8.0.403 and update dependencies (#24405)</li>
+</ul>
+
+</details>
+
+[7.4.6]: https://github.com/PowerShell/PowerShell/compare/v7.4.5...v7.4.6
+
+## [7.4.5] - 2024-08-20
+
+### General Cmdlet Updates and Fixes
+
+- Fix WebCmdlets when `-Body` is specified but `ContentType` is not (#24145)
+
+### Tests
+
+- Rewrite the mac syslog tests to make them less flaky (#24152)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 8.0.400</p>
+
+</summary>
+
+<ul>
+<li>Add feature flags for removing network isolation (Internal 32126)</li>
+<li>Update <code>ThirdPartyNotices.txt</code> for v7.4.5 (#24160)</li>
+<li>Update <code>cgmanifest.json</code> for v7.4.5 (#24159)</li>
+<li>Update .NET SDK to 8.0.400 (#24151)</li>
+<li>Cleanup unused csproj (#24146)</li>
+<li>Remember installation options and used them to initialize options for the next installation (#24143)</li>
+<li>Fix failures in GitHub action <code>markdown-link-check</code> (#24142)</li>
+<li>Use correct signing certificates for RPM and DEBs (#21522)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update docs sample nuget.config (#24147)
+- Fix up broken links in Markdown files (#24144)
+
+[7.4.5]: https://github.com/PowerShell/PowerShell/compare/v7.4.4...v7.4.5
+
+## [7.4.4] - 2024-07-18
+
+### Engine Updates and Fixes
+
+- Resolve paths correctly when importing files or files referenced in the module manifest (Internal 31780)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET to 8.0.303</p>
+
+</summary>
+
+<ul>
+<li>Enumerate over all signed zip packages in macos signing</li>
+<li>Update TPN for the v7.4.4 release (Internal 31793)</li>
+<li>Add update cgmanifest (Internal 31789)</li>
+<li>Add macos signing for package files (#24015) (#24059)</li>
+<li>Update .NET SDK to 8.0.303 (#24038)</li>
+</ul>
+
+</details>
+
+[7.4.4]: https://github.com/PowerShell/PowerShell/compare/v7.4.3...v7.4.4
+
+## [7.4.3] - 2024-06-18
+
+### General Cmdlet Updates and Fixes
+
+- Fix the error when using `Start-Process -Credential` without the admin privilege (#21393) (Thanks @jborean93!)
+- Fix `Test-Path -IsValid` to check for invalid path and filename characters (#21358)
+
+### Engine Updates and Fixes
+
+- Fix generating `OutputType` when running in Constrained Language Mode (#21605)
+- Expand `~` to `$home` on Windows with tab completion (#21529)
+- Make sure both stdout and stderr can be redirected from a native executable (#20997)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET 8.0.6</p>
+<p>We thank the following contributors!</p>
+<p>@ForNeVeR!</p>
+
+</summary>
+
+<ul>
+<li>Fixes for change to new Engineering System.</li>
+<li>Fix argument passing in <code>GlobalToolShim</code> (#21333) (Thanks @ForNeVeR!)</li>
+<li>Create <code>powershell.config.json</code> for <code>PowerShell.Windows.x64</code> global tool (#23941)</li>
+<li>Remove markdown link check on release branches (#23937)</li>
+<li>Update to .NET 8.0.6 (#23936)</li>
+<li>Fix error in the vPack release, debug script that blocked release (#23904)</li>
+<li>Add branch counter variables for daily package builds (#21523)</li>
+<li>Updates to package and release pipelines (#23800)</li>
+<li>Fix exe signing with third party signing for WiX engine (#23878)</li>
+<li>Use PSScriptRoot to find path to Wix module (#21611)</li>
+<li>[StepSecurity] Apply security best practices (#21480)</li>
+<li>Fix build failure due to missing reference in <code>GlobalToolShim.cs</code> (#21388)</li>
+<li>Update installation on Wix module (#23808)</li>
+<li>Use feed with Microsoft Wix toolset (#21651)</li>
+<li>Create the Windows.x64 global tool with shim for signing (#21559)</li>
+<li>Generate MSI for <code>win-arm64</code> installer (#20516)</li>
+<li>update wix package install (#21537)</li>
+<li>Add a PAT for fetching PMC cli (#21503)</li>
+<li>Official PowerShell Package pipeline (#21504)</li>
+</ul>
+
+</details>
+
+[7.4.3]: https://github.com/PowerShell/PowerShell/compare/v7.4.2...v7.4.3
+
+## [7.4.2] - 2024-04-11
+
+### General Cmdlet Updates and Fixes
+
+- Revert "Adjust PUT method behavior to POST one for default content type in WebCmdlets" (#21049)
+- Fix regression with `Get-Content` when `-Tail 0` and `-Wait` are both used (#20734) (Thanks @CarloToso!)
+- Fix `Get-Error` serialization of array values (#21085) (Thanks @jborean93!)
+- Fix a regression in `Format-Table` when header label is empty (#21156)
+
+### Engine Updates and Fixes
+
+- Revert the PR #17856 (Do not preserve temporary results when no need to do so) (#21368)
+- Make sure the assembly/library resolvers are registered at early stage (#21361)
+- Handle the case that `Runspace.DefaultRunspace` is `null` when logging for WDAC Audit (#21344)
+- Fix PowerShell class to support deriving from an abstract class with abstract properties (#21331)
+- Fix the regression when doing type inference for `$_` (#21223) (Thanks @MartinGC94!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET 8.0.4</p>
+
+</summary>
+
+<ul>
+<li>Revert analyzer package back to stable</li>
+<li>Update SDK, deps and <code>cgmanifest</code> for <code>7.4.2</code></li>
+<li>Revert changes to <code>packaging.psm1</code></li>
+<li>Update <code>PSResourceGet</code> version from <code>1.0.2</code> to <code>1.0.4.1</code> (#21439)</li>
+<li>Verify environment variable for OneBranch before we try to copy (#21441)</li>
+<li>Remove <code>surrogateFile</code> setting of <code>APIScan</code> (#21238)</li>
+<li>Add <code>dotenv</code> install as latest version does not work with current Ruby version (#21239)</li>
+<li>Multiple fixes in official build pipeline (#21408)</li>
+<li>Add back 2 transitive dependency packages (#21415)</li>
+<li>Update <code>PSReadLine</code> to <code>v2.3.5</code> for the next <code>v7.4.x</code> servicing release (#21414)</li>
+<li>PowerShell co-ordinated build OneBranch pipeline (#21364)</li>
+</ul>
+
+</details>
+
+[7.4.2]: https://github.com/PowerShell/PowerShell/compare/v7.4.1...v7.4.2
+
+## [7.4.1] - 2024-01-11
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Group-Object` output using interpolated strings (#20745) (Thanks @mawosoft!)
+- Fix `Start-Process -PassThru` to make sure the `ExitCode` property is accessible for the returned `Process` object (#20749) (#20866) (Thanks @CodeCyclone!)
+- Fix rendering of DisplayRoot for network PSDrive (#20793) (#20863)
+
+### Engine Updates and Fixes
+
+- Ensure filename is not null when logging WDAC ETW events (#20910) (Thanks @jborean93!)
+- Fix four regressions introduced by WDAC audit logging feature (#20913)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+Bump .NET 8 to version 8.0.101
+
+</summary>
+
+<ul>
+<li>Update .NET SDK and dependencies for v7.4.1 (Internal 29142)</li>
+<li>Update cgmanifest for v7.4.1 (#20874)</li>
+<li>Update package dependencies for v7.4.1 (#20871)</li>
+<li>Set the <code>rollForwardOnNoCandidateFx</code> in <code>runtimeconfig.json</code> to roll forward only on minor and patch versions (#20689) (#20865)</li>
+<li>Remove RHEL7 publishing to packages.microsoft.com as it's no longer supported (#20849) (#20864)</li>
+<li>Fix the tab completion tests (#20867)</li>
+</ul>
+
+</details>
+
+[7.4.1]: https://github.com/PowerShell/PowerShell/compare/v7.4.0...v7.4.1
+
+## [7.4.0] - 2023-11-16
+
+### General Cmdlet Updates and Fixes
+
+- Added a missing `ConfigureAwait(false)` call to webcmdlets so they don't block (#20622)
+- Fix `Group-Object` so output uses current culture (#20623)
+- Block getting help from network locations in restricted remoting sessions (#20615)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET 8 to 8.0.0 RTM build</p>
+
+</summary>
+
+<ul>
+<li>Add internal .NET SDK URL parameter to release pipeline (Internal 28474)</li>
+<li>Update the CGManifest file for v7.4.0 release (Internal 28457)</li>
+<li>Fix repository root for the nuget.config (Internal 28456)</li>
+<li>Add internal nuget feed to compliance build (Internal 28449)</li>
+<li>Copy azure blob with PowerShell global tool to private blob and move to CDN during release (Internal 28438)</li>
+<li>Fix release build by making the internal SDK parameter optional (#20658) (Internal 28440)</li>
+<li>Make internal .NET SDK URL as a parameter for release builld (#20655) (Internal 28428)</li>
+<li>Update <code>PSResourceGet</code> version for <code>1.0.1</code> release (#20652) (Internal 28427)</li>
+<li>Bump .NET 8 to 8.0.0 RTM build (Internal 28360)</li>
+<li>Remove Auth header content from ErrorRecord (Internal 28409)</li>
+<li>Fix setting of variable to consume internal SDK source (Internal 28354)</li>
+<li>Bump Microsoft.Management.Infrastructure to v3.0.0 (Internal 28352)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> to <code>v7.4.0</code> (#20617) (#20624)</li>
+</ul>
+
+</details>
+
+[7.4.0]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-rc.1...v7.4.0
+
+## [7.4.0-rc.1] - 2023-10-24
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Test-Connection` due to .NET 8 changes (#20369) (#20531)
+- Add telemetry to check for specific tags when importing a module (#20371) (#20540)
+- Fix `Copy-Item` progress to only show completed when all files are copied (#20517) (#20544)
+- Fix `unixmode` to handle `setuid` and `sticky` when file is not an executable (#20366) (#20537)
+- Fix UNC path completion regression (#20419) (#20541)
+- Fix implicit remoting proxy cmdlets to act on common parameters (#20367) (#20530)
+- Fix `Get-Service` non-terminating error message to include category (#20276) (#20529)
+- Fixing regression in DSC (#20268) (#20528)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+
+</summary>
+
+<ul>
+<li>Update ThirdPartyNotices.txt file (Internal 28110)</li>
+<li>Update CGManifest for release</li>
+<li>Fix package version for .NET nuget packages (#20551) (#20552)</li>
+<li>Only registry App Path for release package (#20478) (#20549)</li>
+<li>Bump PSReadLine from 2.2.6 to 2.3.4 (#20305) (#20533)</li>
+<li>Bump Microsoft.Management.Infrastructure (#20511) (#20512) (#20433) (#20434) (#20534) (#20535) (#20545) (#20547)</li>
+<li>Bump to .NET 8 RC2 (#20510) (#20543)</li>
+
+<li>Add SBOM for release pipeline (#20519) (#20548)</li>
+<li>Bump version of <code>Microsoft.PowerShell.PSResourceGet</code> to <code>v1.0.0</code> (#20485) (#20538)</li>
+<li>Bump xunit.runner.visualstudio from 2.5.1 to 2.5.3 (#20486) (#20542)</li>
+<li>Bump JsonSchema.Net from 5.2.5 to 5.2.6 (#20421) (#20532)</li>
+<li>Fix alpine tar package name and do not crossgen alpine fxdependent package (#20459) (#20536)</li>
+<li>Increase timeout when publishing packages to <code>packages.microsoft.com</code> (#20470) (#20539)</li>
+<li>Block any preview vPack release (#20243) (#20526)</li>
+<li>Add surrogate file for compliance scanning (#20423)</li>
+</ul>
+
+</details>
+
+[7.4.0-rc.1]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.6...v7.4.0-rc.1
+
+## [7.4.0-preview.6] - 2023-09-28
+
+### General Cmdlet Updates and Fixes
+
+- Set approved experimental features to stable for 7.4 release (#20362)
+- Revert changes to continue using `BinaryFormatter` for `Out-GridView` (#20360)
+- Remove the comment trigger from feedback provider (#20346)
+
+### Tests
+
+- Continued improvement to tests for release automation (#20259)
+- Skip the test on x86 as `InstallDate` is not visible on `Wow64` (#20255)
+- Harden some problematic release tests (#20254)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Move to .NET 8.0.100-rc.1.23463.5</p>
+
+</summary>
+
+<ul>
+<li>Update the regex for package name validation (Internal 27783, 27795)</li>
+<li>Update ThirdPartyNotices.txt (Internal 27772)</li>
+<li>Remove the <code>ref</code> folder before running compliance (#20375)</li>
+<li>Updates RIDs used to generate component Inventory (#20372)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> from 4.7.0 to 4.8.0-2.final (#20368)</li>
+<li>Fix the release build by moving to the official .NET 8-rc.1 release build version (#20365)</li>
+<li>Update the experimental feature JSON files (#20363)</li>
+<li>Bump <code>XunitXml.TestLogger</code> from 3.1.11 to 3.1.17 (#20364)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to 0.9.0-rc1 (#20361)</li>
+<li>Update .NET SDK to version 8.0.100-rc.1.23455.8 (#20358)</li>
+<li>Use <code>fxdependent-win-desktop</code> runtime for compliance runs (#20359)</li>
+<li>Add mapping for mariner arm64 stable (#20348)</li>
+<li>Bump <code>xunit.runner.visualstudio</code> from <code>2.5.0</code> to <code>2.5.1</code> (#20357)</li>
+<li>Bump <code>JsonSchema.Net</code> from 5.2.1 to 5.2.5 (#20356)</li>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> from 17.7.1 to 17.7.2 (#20355)</li>
+<li>Bump Markdig.Signed from 0.32.0 to 0.33.0 (#20354)</li>
+<li>Bump JsonSchema.Net from 5.1.3 to 5.2.1 (#20353)</li>
+<li>Bump actions/checkout from 3 to 4 (#20352)</li>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> from 17.7.0 to 17.7.1 (#20351)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> from 4.7.0-2.final to 4.7.0 (#20350)</li>
+<li>Release build: Change the names of the PATs (#20349)</li>
+<li>Put the calls to <code>Set-AzDoProjectInfo</code> and Set-AzDoAuthToken` in the right order (#20347)</li>
+<li>Bump Microsoft.Management.Infrastructure (continued) (#20262)</li>
+<li>Bump <code>Microsoft.Management.Infrastructure</code> to 3.0.0-preview.2 (#20261)</li>
+<li>Enable <code>vPack</code> provenance data (#20260)</li>
+<li>Start using new packages.microsoft.com cli (#20258)</li>
+<li>Add mariner arm64 to PMC release (#20257)</li>
+<li>Fix typo <code>donet</code> to <code>dotnet</code> in build scripts and pipelines (#20256)</li>
+</ul>
+
+</details>
+
+[7.4.0-preview.6]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.5...v7.4.0-preview.6
+
+## [7.4.0-preview.5] - 2023-08-21
+
+### Breaking Changes
+
+- Change how relative paths in `Resolve-Path` are handled when using the `RelativeBasePath` parameter (#19755) (Thanks @MartinGC94!)
+
+### Engine Updates and Fixes
+
+- Fix dynamic parameter completion (#19510) (Thanks @MartinGC94!)
+- Use `OrdinalIgnoreCase` to lookup script breakpoints (#20046) (Thanks @fflaten!)
+- Guard against `null` or blank path components when adding to module path (#19922) (Thanks @stevenebutler!)
+- Fix deadlock when piping to shell associated file extension (#19940)
+- Fix completion regression for filesystem paths with custom `PSDrive` names (#19921) (Thanks @MartinGC94!)
+- Add completion for variables assigned by the `Data` statement (#19831) (Thanks @MartinGC94!)
+- Fix a null reference crash in completion code (#19916) (Thanks @MartinGC94!)
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Out-GridView` by implementing `Clone()` method to replace old use of binary format serialization (#20050)
+- Support Unix domain socket in WebCmdlets (#19343) (Thanks @CarloToso!)
+- Wait-Process: add `-Any` and `-PassThru` parameters (#19423) (Thanks @dwtaber!)
+- Added the switch parameter `-CaseInsensitive` to `Select-Object` and `Get-Unique` cmdlets (#19683) (Thanks @ArmaanMcleod!)
+- `Restore-Computer` and `Stop-Computer` should fail with error when not running via `sudo` on Unix (#19824)
+- Add Help proxy function for non-Windows platforms (#19972)
+- Remove input text from the error message resulted by `SecureString` and `PSCredential` conversion failure (#19977) (Thanks @ArmaanMcleod!)
+- Add `Microsoft.PowerShell.PSResourceGet` to the telemetry module list (#19926)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @Molkree, @MartinGC94</p>
+
+</summary>
+
+<ul>
+<li>Fix use of <code>ThrowIf</code> where the arguments were reversed (#20052)</li>
+<li>Fix typo in <code>Logging.Tests.ps1</code> (#20048) (Thanks @eltociear!)</li>
+<li>Apply the <code>InlineAsTypeCheck</code> in the engine code - 2nd pass (#19694) (Thanks @Molkree!)</li>
+<li>Apply the <code>InlineAsTypeCheck</code> rule in the engine code - 1st pass (#19692) (Thanks @Molkree!)</li>
+<li>Remove unused string completion code (#19879) (Thanks @MartinGC94!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Give the `assignPRs` workflow write permissions (#20021)
+
+### Tests
+
+- Additional test hardening for tests which fail in release pass. (#20093)
+- Don't use a completion which has a space in it (#20064)
+- Fixes for release tests (#20028)
+- Remove spelling CI in favor of GitHub Action (#19973)
+- Hide expected error for negative test on windows for script extension (#19929)
+- Add more debugging to try to determine why these test fail in release build. (#19829)
+
+### Build and Packaging Improvements
+
+<ul>
+<li>Update ThirdPartyNotices for 7.4.0-preview.5</li>
+<li>Update <code>PSResourceGet</code> to <code>0.5.24-beta24</code> (#20118)</li>
+<li>Fix build after the change to remove win-arm32 (#20102)</li>
+<li>Add comment about pinned packages (#20096)</li>
+<li>Bump to .NET 8 Preview 7 (#20092)</li>
+<li>Remove <code>Win-Arm32</code> from release build. (#20095)</li>
+<li>Add alpine framework dependent package (#19995)</li>
+<li>Bump JsonSchema.Net from 4.1.8 to 5.1.3 (#20089)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.6.3 to 17.7.0 (#20088)</li>
+<li>Move build to .NET 8 preview 6 (#19991)</li>
+<li>Bump <code>Microsoft.Management.Infrastructure</code> from <code>2.0.0</code> to <code>3.0.0-preview.1</code> (#20081)</li>
+<li>Bump <code>Markdig.Signed</code> from <code>0.31.0</code> to <code>0.32.0</code> (#20076)</li>
+<li>Auto assign PR Maintainer (#20020)</li>
+<li>Delete rule that was supposed to round-robin assign a maintainer (#20019)</li>
+<li>Update the cgmanifest (#20012)</li>
+<li>Update the cgmanifest (#20008)</li>
+<li>Bump JsonSchema.Net from 4.1.7 to 4.1.8 (#20006)</li>
+<li>Bump JsonSchema.Net from 4.1.6 to 4.1.7 (#20000)</li>
+<li>Add mariner arm64 package build to release build (#19946)</li>
+<li>Check for pre-release packages when it's a stable release (#19939)</li>
+<li>Make PR creation tool use <code>--web</code> because it is more reliable (#19944)</li>
+<li>Update to the latest NOTICES file (#19971)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds for release pipeline (#19963)</li>
+<li>Update variable used to bypass the blocking check for multiple NuGet feeds (#19967)</li>
+<li>Update README.md and metadata.json for release v7.2.13 and v7.3.6 (#19964)</li>
+<li>Don't publish notice on failure because it prevent retry (#19955)</li>
+<li>Change variable used to bypass nuget security scanning (#19954)</li>
+<li>Update the cgmanifest (#19924)</li>
+<li>Publish rpm package for rhel9 (#19750)</li>
+<li>Bump XunitXml.TestLogger from 3.0.78 to 3.1.11 (#19900)</li>
+<li>Bump JsonSchema.Net from 4.1.5 to 4.1.6 (#19885)</li>
+<li>Bump xunit from 2.4.2 to 2.5.0 (#19902)</li>
+<li>Remove <code>HostArchitecture</code> dynamic parameter for <code>osxpkg</code> (#19917)</li>
+<li>FabricBot: Onboarding to GitOps.ResourceManagement because of FabricBot decommissioning (#19905)</li>
+<li>Change variable used to bypass nuget security scanning (#19907)</li>
+<li>Checkout history for markdown lint check (#19908)</li>
+<li>Switch to GitHub Action for linting markdown (#19899)</li>
+<li>Bump xunit.runner.visualstudio from 2.4.5 to 2.5.0 (#19901)</li>
+<li>Add runtime and packaging type info for mariner2 arm64 (#19450)</li>
+<li>Update to the latest NOTICES file (#19856)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `README.md` and `metadata.json` for `7.4.0-preview.4` release (#19872)
+- Fix grammatical issue in `ADOPTERS.md` (#20037) (Thanks @nikohoffren!)
+- Replace docs.microsoft.com URLs in code with FWLinks (#19996)
+- Change `docs.microsoft.com` to `learn.microsoft.com` (#19994)
+- Update man page to match current help for pwsh (#19993)
+- Merge `7.3.5`, `7.3.6`, `7.2.12` and `7.2.13` changelogs (#19968)
+- Fix ///-comments that violate the docs schema (#19957)
+- Update the link for getting started in `README.md` (#19932)
+- Migrate user docs to the PowerShell-Docs repository (#19871)
+
+[7.4.0-preview.5]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.4...v7.4.0-preview.5
+
+## [7.4.0-preview.4] - 2023-06-29
+
+### Breaking Changes
+
+- `Test-Json`: Use `JsonSchema.Net` (`System.Text.Json`) instead of `NJsonSchema` (`Newtonsoft.Json`) (#18141) (Thanks @gregsdennis!)
+- `Test-Connection`: Increase output detail when performing a TCP test (#11452) (Thanks @jackdcasey!)
+
+### Engine Updates and Fixes
+
+- Fix native executables not redirecting to file (#19842)
+- Add a new experimental feature to control native argument passing style on Windows (#18706)
+- Fix `TabExpansion2` variable leak when completing variables (#18763) (Thanks @MartinGC94!)
+- Enable completion of variables across ScriptBlock scopes (#19819) (Thanks @MartinGC94!)
+- Fix completion of the `foreach` statement variable (#19814) (Thanks @MartinGC94!)
+- Fix variable type inference precedence (#18691) (Thanks @MartinGC94!)
+- Fix member completion for PowerShell Enum class (#19740) (Thanks @MartinGC94!)
+- Fix parsing for array literals in index expressions in method calls (#19224) (Thanks @MartinGC94!)
+- Fix incorrect string to type conversion (#19560) (Thanks @MartinGC94!)
+- Fix slow execution when many breakpoints are used (#14953) (Thanks @nohwnd!)
+- Add a public API for getting locations of `PSModulePath` elements (#19422)
+- Add WDAC Audit logging (#19641)
+- Improve path completion (#19489) (Thanks @MartinGC94!)
+- Fix an indexing out of bound error in `CompleteInput` for empty script input (#19501) (Thanks @MartinGC94!)
+- Improve variable completion performance (#19595) (Thanks @MartinGC94!)
+- Allow partial culture matching in `Update-Help` (#18037) (Thanks @dkaszews!)
+- Fix the check when reading input in `NativeCommandProcessor` (#19614)
+- Add support of respecting `$PSStyle.OutputRendering` on the remote host (#19601)
+- Support byte stream piping between native commands and file redirection (#17857)
+
+### General Cmdlet Updates and Fixes
+
+- Disallow negative values for `Get-Content` cmdlet parameters `-Head` and `-Tail` (#19715) (Thanks @CarloToso!)
+- Make `Update-Help` throw proper error when current culture is not associated with a language (#19765) (Thanks @josea!)
+- Do not require activity when creating a completed progress record (#18474) (Thanks @MartinGC94!)
+- WebCmdlets: Add alias for `-TimeoutSec` to `-ConnectionTimeoutSeconds` and add `-OperationTimeoutSeconds` (#19558) (Thanks @stevenebutler!)
+- Avoid checking screen scraping on non-Windows platforms before launching native app (#19812)
+- Add reference to PSResourceGet (#19597)
+- Add `FileNameStar` to `MultipartFileContent` in WebCmdlets (#19467) (Thanks @CarloToso!)
+- Add `ParameterSetName` for the `-Detailed` parameter of `Test-Connection` (#19727)
+- Remove the property disabling optimization (#19701)
+- Filter completion for enum parameter against `ValidateRange` attributes (#17750) (Thanks @fflaten!)
+- Small cleanup `Invoke-RestMethod` (#19490) (Thanks @CarloToso!)
+- Fix wildcard globbing in root of device paths (#19442) (Thanks @MartinGC94!)
+- Add specific error message that creating Junctions requires absolute path (#19409)
+- Fix array type parsing in generic types (#19205) (Thanks @MartinGC94!)
+- Improve the verbose message of WebCmdlets to show correct HTTP version (#19616) (Thanks @CarloToso!)
+- Fix HTTP status from 409 to 429 for WebCmdlets to get retry interval from Retry-After header. (#19622) (Thanks @mkht!)
+- Remove minor versions from `PSCompatibleVersions` (#18635) (Thanks @xtqqczze!)
+- Update `JsonSchema.Net` version to 4.1.0 (#19610) (Thanks @gregsdennis!)
+- Allow combining of `-Skip` and `-SkipLast` parameters in `Select-Object` cmdlet. (#18849) (Thanks @ArmaanMcleod!)
+- Fix constructing `PSModulePath` if a sub-path has trailing separator (#13147)
+- Add `Get-SecureRandom` cmdlet (#19587)
+- Fix `New-Item` to re-create `Junction` when `-Force` is specified (#18311) (Thanks @GigaScratch!)
+- Improve Hashtable key completion for type constrained variable assignments, nested Hashtables and more (#17660) (Thanks @MartinGC94!)
+- `Set-Clipboard -AsOSC52` for remote usage (#18222) (Thanks @dkaszews!)
+- Refactor `MUIFileSearcher.AddFiles` in the help related code (#18825) (Thanks @xtqqczze!)
+- Set `SetLastError` to `true` for symbolic and hard link native APIs (#19566)
+- Fix `Get-AuthenticodeSignature -Content` to not roundtrip the bytes to a Unicode string and then back to bytes (#18774) (Thanks @jborean93!)
+- WebCmdlets: Rename `-TimeoutSec` to `-ConnectionTimeoutSeconds` (with alias) and add `-OperationTimeoutSeconds` (#19558) (Thanks @stevenebutler!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @ArmaanMcleod, @turbedi, @CarloToso, @Molkree, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Fix typo in <code>NativeCommandProcessor.cs</code> (#19846) (Thanks @eltociear!)</li>
+<li>Rename file from <code>PingPathCommand.cs</code> to <code>TestPathCommand.cs</code> (#19782) (Thanks @ArmaanMcleod!)</li>
+<li>Make use of the new <code>Random.Shared</code> property (#18417) (Thanks @turbedi!)</li>
+<li>six files (#19695) (Thanks @CarloToso!)</li>
+<li>Apply IDE0019: <code>InlineAsTypeCheck</code> in Microsoft.PowerShell.Commands (#19688)(#19690)(#19687)(#19689) (Thanks @Molkree!)</li>
+<li>Remove <code>PSv2CompletionCompleter</code> as part of the PowerShell v2 code cleanup (#18337) (Thanks @xtqqczze!)</li>
+<li>Enable more nullable annotations in WebCmdlets (#19359) (Thanks @CarloToso!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add Git mailmap for Andy Jordan (#19469)
+- Add backport function to release tools (#19568)
+
+### Tests
+
+- Improve reliability of the `Ctrl+c` tests for WebCmdlets (#19532) (Thanks @stevenebutler!)
+- Fix logic for `Import-CliXml` test (#19805)
+- Add some debugging to the transcript test for `SilentlyContinue` (#19770)
+- Re-enable `Get-ComputerInfo` pending tests (#19746)
+- Update syslog parser to handle modern formats. (#19737)
+- Pass `-UserScope` as required by `RunUpdateHelpTests` (#13400) (Thanks @yecril71pl!)
+- Change how `isPreview` is determined for default cmdlets tests (#19650)
+- Skip file signature tests on 2012R2 where PKI cmdlet do not work (#19643)
+- Change logic for testing missing or extra cmdlets. (#19635)
+- Fix incorrect test cases in `ExecutionPolicy.Tests.ps1` (#19485) (Thanks @xtqqczze!)
+- Fixing structure typo in test setup (#17458) (Thanks @powercode!)
+- Fix test failures on Windows for time zone and remoting (#19466)
+- Harden 'All approved Cmdlets present' test (#19530)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Updated to .NET 8 Preview 4
+<p>We thank the following contributors!</p>
+<p>@krishnayalavarthi</p>
+
+</summary>
+
+<ul>
+<li>Update to the latest NOTICES file (#19537)(#19820)(#19784)(#19720)(#19644)(#19620)(#19605)(#19546)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.5.0 to 17.6.3 (#19867)(#19762)(#19733)(#19668)(#19613)</li>
+<li>Update the cgmanifest (#19847)(#19800)(#19792)(#19776)(#19763)(#19697)(#19631)</li>
+<li>Bump StyleCop.Analyzers from 1.2.0-beta.406 to 1.2.0-beta.507 (#19837)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 4.6.0-1.final to 4.7.0-2.final (#19838)(#19667)</li>
+<li>Update to .NET 8 Preview 4 (#19696)</li>
+<li>Update experimental-feature JSON files (#19828)</li>
+<li>Bump JsonSchema.Net from 4.1.1 to 4.1.5 (#19790)(#19768)(#19788)</li>
+<li>Update group to assign PRs in <code>fabricbot.json</code> (#19759)</li>
+<li>Add retry on failure for all upload tasks in Azure Pipelines (#19761)</li>
+<li>Bump Microsoft.PowerShell.MarkdownRender from 7.2.0 to 7.2.1 (#19751)(#19752)</li>
+<li>Delete symbols on Linux as well (#19735)</li>
+<li>Update <code>windows.json</code> packaging BOM (#19728)</li>
+<li>Disable SBOM signing for CI and add extra files for packaging tests (#19729)</li>
+<li>Update experimental-feature JSON files (#19698(#19588))</li>
+<li>Add ProductCode in registry for MSI install (#19590)</li>
+<li>Runas format changed (#15434) (Thanks @krishnayalavarthi!)</li>
+<li>For Preview releases, add <code>pwsh-preview.exe</code> alias to MSIX package (#19602)</li>
+<li>Add prompt to fix conflict during backport (#19583)</li>
+<li>Add comment in wix detailing use of <code>UseMU</code> (#19371)</li>
+<li>Verify that packages have license data (#19543)</li>
+<li>Add an explicit manual stage for changelog update (#19551)</li>
+<li>Update the team member list in <code>releaseTools.psm1</code> (#19544)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `metadata.json` and `README.md` for upcoming releases (#19863)(#19542)
+- Update message to use the actual parameter name (#19851)
+- Update `CONTRIBUTING.md` to include Code of Conduct enforcement (#19810)
+- Update `working-group-definitions.md` (#19809)(#19561)
+- Update `working-group.md` to add section about reporting working group members (#19758)
+- Correct capitalization in readme (#19666) (Thanks @Aishat452!)
+- Updated the public dashboard link (#19634)
+- Fix a typo in `serialization.cs` (#19598) (Thanks @eltociear!)
+
+[7.4.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.3...v7.4.0-preview.4
+
+## [7.4.0-preview.3] - 2023-04-20
+
+### Breaking Changes
+
+- Remove code related to `#requires -pssnapin` (#19320)
+
+### Engine Updates and Fixes
+
+- Change the arrow used in feedback suggestion to a more common Unicode character (#19534)
+- Support trigger registration in feedback provider (#19525)
+- Update the `ICommandPredictor` interface to reduce boilerplate code from predictor implementation (#19414)
+- Fix a crash in the type inference code (#19400) (Thanks @MartinGC94!)
+
+### Performance
+
+- Speed up `Resolve-Path` relative path resolution (#19171) (Thanks @MartinGC94!)
+
+### General Cmdlet Updates and Fixes
+
+- Infer external application output as strings (#19193) (Thanks @MartinGC94!)
+- Fix a race condition in `Add-Type` (#19471)
+- Detect insecure `https-to-http` redirect only if both URIs are absolute (#19468) (Thanks @CarloToso!)
+- Support `Ctrl+c` when connection hangs while reading data in WebCmdlets (#19330) (Thanks @stevenebutler!)
+- Enable type conversion of `AutomationNull` to `$null` for assignment (#19415)
+- Add the parameter `-Environment` to `Start-Process` (#19374)
+- Add the parameter `-RelativeBasePath` to `Resolve-Path` (#19358) (Thanks @MartinGC94!)
+- Exclude redundant parameter aliases from completion results (#19382) (Thanks @MartinGC94!)
+- Allow using a folder path in WebCmdlets' `-OutFile` parameter (#19007) (Thanks @CarloToso!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @CarloToso</p>
+
+</summary>
+
+<ul>
+<li>Fix typo in <code>typeDataXmlLoader.cs</code> (#19319) (Thanks @eltociear!)</li>
+<li>Fix typo in <code>Compiler.cs</code> (#19491) (Thanks @eltociear!)</li>
+<li>Inline the <code>GetResponseObject</code> method (#19380) (Thanks @CarloToso!)</li>
+<li>Simplify <code>ContentHelper</code> methods (#19367) (Thanks @CarloToso!)</li>
+<li>Initialize regex lazily in <code>BasicHtmlWebResponseObject</code> (#19361) (Thanks @CarloToso!)</li>
+<li>Fix codefactor issue in if-statement (part 5) (#19286) (Thanks @CarloToso!)</li>
+<li>Add nullable annotations in <code>WebRequestSession.cs</code> (#19291) (Thanks @CarloToso!)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Harden the default command test (#19416)
+- Skip VT100 tests on Windows Server 2012R2 as console does not support it (#19413)
+- Improve package management acceptance tests by not going to the gallery (#19412)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@dkattan</p>
+
+</summary>
+
+<ul>
+<li>Fixing MSI checkbox (#19325)</li>
+<li>Update the experimental feature JSON files (#19297)</li>
+<li>Update the cgmanifest (#19459, #19465)</li>
+<li>Update .NET SDK version to <code>8.0.100-preview.3.23178.7</code> (#19381)</li>
+<li>Force updating the transitive dependency on <code>Microsoft.CSharp</code> (#19514)</li>
+<li>Update <code>DotnetRuntimeMetadata.json</code> to consume the .NET 8.0.0-preview.3 release (#19529)</li>
+<li>Move PSGallery sync to a pool (#19523)</li>
+<li>Fix the regex used for package name check in vPack build (#19511)</li>
+<li>Make the vPack PAT library more obvious (#19505)</li>
+<li>Change <code>Microsoft.CodeAnalysis.CSharp</code> back to 4.5.0 (#19464) (Thanks @dkattan!)</li>
+<li>Update to the latest NOTICES file (#19332)</li>
+<li>Add <code>PoolNames</code> variable group to compliance pipeline (#19408)</li>
+<li>Fix stage dependencies and typo in release build (#19353)</li>
+<li>Fix issues in release build and release pipeline (#19338)</li>
+</ul>
+
+</details>
+
+[7.4.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.2...v7.4.0-preview.3
+
+## [7.4.0-preview.2] - 2023-03-14
+
+### Breaking Changes
+
+- Update some PowerShell APIs to throw `ArgumentException` instead of `ArgumentNullException` when the argument is an empty string (#19215) (Thanks @xtqqczze!)
+- Add the parameter `-ProgressAction` to the common parameters (#18887)
+
+### Engine Updates and Fixes
+
+- Fix `PlainText` output to correctly remove the `Reset` VT sequence without number (#19283)
+- Fix `ConciseView` to handle custom `ParserError` error records (#19239)
+- Fix `VtSubstring` helper method to correctly check characters copied (#19240)
+- Update the `FeedbackProvider` interface to return structured data (#19133)
+- Make the exception error in PowerShell able to associate with the right history entry (#19095)
+- Fix for JEA session leaking functions (#19024)
+- Add WDAC events and system lockdown notification (#18893)
+- Fix support for nanoserver due to lack of AMSI (#18882)
+
+### Performance
+
+- Use interpolated strings (#19002)(#19003)(#18977)(#18980)(#18996)(#18979)(#18997)(#18978)(#18983)(#18992)(#18993)(#18985)(#18988) (Thanks @CarloToso!)
+
+### General Cmdlet Updates and Fixes
+
+- Fix completion for `PSCustomObject` variable properties (#18682) (Thanks @MartinGC94!)
+- Improve type inference for `Get-Random` (#18972) (Thanks @MartinGC94!)
+- Make `-Encoding` parameter able to take `ANSI` encoding in PowerShell (#19298) (Thanks @CarloToso!)
+- Telemetry improvements for tracking experimental feature opt out (#18762)
+- Support HTTP persistent connections in Web Cmdlets (#19249) (Thanks @stevenebutler!)
+- Fix using XML `-Body` in webcmdlets without an encoding (#19281) (Thanks @CarloToso!)
+- Add the `Statement` property to `$MyInvocation` (#19027) (Thanks @IISResetMe!)
+- Fix `Start-Process` `-Wait` with `-Credential` (#19096) (Thanks @jborean93!)
+- Adjust `PUT` method behavior to `POST` one for default content type in WebCmdlets (#19152) (Thanks @CarloToso!)
+- Improve verbose message in web cmdlets when content length is unknown (#19252) (Thanks @CarloToso!)
+- Preserve `WebSession.MaximumRedirection` from changes (#19190) (Thanks @CarloToso!)
+- Take into account `ContentType` from Headers in WebCmdlets (#19227) (Thanks @CarloToso!)
+- Use C# 11 UTF-8 string literals (#19243) (Thanks @turbedi!)
+- Add property assignment completion for enums (#19178) (Thanks @MartinGC94!)
+- Fix class member completion for classes with base types (#19179) (Thanks @MartinGC94!)
+- Add `-Path` and `-LiteralPath` parameters to `Test-Json` cmdlet (#19042) (Thanks @ArmaanMcleod!)
+- Allow to preserve the original HTTP method by adding `-PreserveHttpMethodOnRedirect` to Web cmdlets (#18894) (Thanks @CarloToso!)
+- Webcmdlets display an error on HTTPS to http redirect (#18595) (Thanks @CarloToso!)
+- Build the relative URI for links from the response in `Invoke-WebRequest` (#19092) (Thanks @CarloToso!)
+- Fix redirection for `-CustomMethod` `POST` in WebCmdlets (#19111) (Thanks @CarloToso!)
+- Dispose previous response in Webcmdlets (#19117) (Thanks @CarloToso!)
+- Improve `Invoke-WebRequest` XML and JSON errors format (#18837) (Thanks @CarloToso!)
+- Fix error formatting to remove the unneeded leading newline for concise view (#19080)
+- Add `-NoHeader` parameter to `ConvertTo-Csv` and `Export-Csv` cmdlets (#19108) (Thanks @ArmaanMcleod!)
+- Fix `Start-Process -Credential -Wait` to work on Windows (#19082)
+- Add `ValidateNotNullOrEmpty` to `OutFile` and `InFile` parameters of WebCmdlets (#19044) (Thanks @CarloToso!)
+- Correct spelling of "custom" in event (#19059) (Thanks @spaette!)
+- Ignore expected error for file systems not supporting alternate streams (#19065)
+- Adding missing guard for telemetry opt out to avoid `NullReferenceException` when importing modules (#18949) (Thanks @powercode!)
+- Fix progress calculation divide by zero in Copy-Item (#19038)
+- Add progress to `Copy-Item` (#18735)
+- WebCmdlets parse XML declaration to get encoding value, if present. (#18748) (Thanks @CarloToso!)
+- `HttpKnownHeaderNames` update headers list (#18947) (Thanks @CarloToso!)
+- Fix bug with managing redirection and `KeepAuthorization` in Web cmdlets (#18902) (Thanks @CarloToso!)
+- Fix `Get-Error` to work with strict mode (#18895)
+- Add `AllowInsecureRedirect` switch to Web cmdlets (#18546) (Thanks @CarloToso!)
+- `Invoke-RestMethod` `-FollowRelLink` fix links containing commas (#18829) (Thanks @CarloToso!)
+- Prioritize the default parameter set when completing positional arguments (#18755) (Thanks @MartinGC94!)
+- Add `-CommandWithArgs` parameter to pwsh (#18726)
+- Enable creating composite subsystem implementation in modules (#18888)
+- Fix `Format-Table -RepeatHeader` for property derived tables (#18870)
+- Add `StatusCode` to `HttpResponseException` (#18842) (Thanks @CarloToso!)
+- Fix type inference for all scope variables (#18758) (Thanks @MartinGC94!)
+- Add completion for Using keywords (#16514) (Thanks @MartinGC94!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@CarloToso, @iSazonov, @xtqqczze, @turbedi, @syntax-tm, @eltociear, @ArmaanMcleod</p>
+
+</summary>
+
+<ul>
+<li>Small cleanup in the WebCmdlet code (#19299) (Thanks @CarloToso!)</li>
+<li>Remove unused GUID detection code from console host (#18871) (Thanks @iSazonov!)</li>
+<li>Fix <code>CodeFactor</code> issues in the code base - part 4 (#19270) (Thanks @CarloToso!)</li>
+<li>Fix codefactor if part 3 (#19269) (Thanks @CarloToso!)</li>
+<li>Fix codefactor if part 2 (#19267) (Thanks @CarloToso!)</li>
+<li>Fix codefactor if part 1 (#19266) (Thanks @CarloToso!)</li>
+<li>Remove comment and simplify condition in WebCmdlets (#19251) (Thanks @CarloToso!)</li>
+<li>Small style changes (#19241) (Thanks @CarloToso!)</li>
+<li>Use <code>ArgumentException.ThrowIfNullOrEmpty</code> as appropriate [part 1] (#19215) (Thanks @xtqqczze!)</li>
+<li>Use <code>using</code> variable to reduce the nested level (#19229) (Thanks @CarloToso!)</li>
+<li>Use <code>ArgumentException.ThrowIfNullOrEmpty()</code> in more places (#19213) (Thanks @CarloToso!)</li>
+<li>Replace <code>BitConverter.ToString</code> with <code>Convert.ToHexString</code> where appropriate (#19216) (Thanks @turbedi!)</li>
+<li>Replace <code>Requires.NotNullOrEmpty(string)</code> with <code>ArgumentException.ThrowIfNullOrEmpty</code> (#19197) (Thanks @xtqqczze!)</li>
+<li>Use <code>ArgumentOutOfRangeException.ThrowIfNegativeOrZero</code> when applicable (#19201) (Thanks @xtqqczze!)</li>
+<li>Use <code>CallerArgumentExpression</code> on <code>Requires.NotNull</code> (#19200) (Thanks @xtqqczze!)</li>
+<li>Revert a few change to not use 'ArgumentNullException.ThrowIfNull' (#19151)</li>
+<li>Corrected some minor spelling mistakes (#19176) (Thanks @syntax-tm!)</li>
+<li>Fix a typo in <code>InitialSessionState.cs</code> (#19177) (Thanks @eltociear!)</li>
+<li>Fix a typo in <code>pwsh</code> help content (#19153)</li>
+<li>Revert comment changes in <code>WebRequestPSCmdlet.Common.cs</code> (#19136) (Thanks @CarloToso!)</li>
+<li>Small cleanup webcmdlets (#19128) (Thanks @CarloToso!)</li>
+<li>Merge partials in <code>WebRequestPSCmdlet.Common.cs</code> (#19126) (Thanks @CarloToso!)</li>
+<li>Cleanup WebCmdlets comments (#19124) (Thanks @CarloToso!)</li>
+<li>Added minor readability and refactoring fixes to <code>Process.cs</code> (#19123) (Thanks @ArmaanMcleod!)</li>
+<li>Small changes in Webcmdlets (#19109) (Thanks @CarloToso!)</li>
+<li>Rework <code>SetRequestContent</code> in WebCmdlets (#18964) (Thanks @CarloToso!)</li>
+<li>Small cleanup WebCmdlets (#19030) (Thanks @CarloToso!)</li>
+<li>Update additional interpolated string changes (#19029)</li>
+<li>Revert some of the interpolated string changes (#19018)</li>
+<li>Cleanup <code>StreamHelper.cs</code>, <code>WebRequestPSCmdlet.Common.cs</code> and <code>InvokeRestMethodCommand.Common.cs</code> (#18950) (Thanks @CarloToso!)</li>
+<li>Small cleanup common code of webcmdlets (#18946) (Thanks @CarloToso!)</li>
+<li>Simplification of <code>GetHttpMethod</code> and <code>HttpMethod</code> in WebCmdlets (#18846) (Thanks @CarloToso!)</li>
+<li>Fix typo in <code>ModuleCmdletBase.cs</code> (#18933) (Thanks @eltociear!)</li>
+<li>Fix regression in <code>RemoveNulls</code> (#18881) (Thanks @iSazonov!)</li>
+<li>Replace all <code>NotNull</code> with <code>ArgumentNullException.ThrowIfNull</code> (#18820) (Thanks @CarloToso!)</li>
+<li>Cleanup <code>InvokeRestMethodCommand.Common.cs</code> (#18861) (Thanks @CarloToso!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add a Mariner install script (#19294)
+- Add tool to trigger license information gathering for NuGet modules (#18827)
+
+### Tests
+
+- Update and enable the test for the type of `$input` (#18968) (Thanks @MartinGC94!)
+- Increase the timeout for creating the `WebListener` (#19268)
+- Increase the timeout when waiting for the event log (#19264)
+- Add Windows ARM64 CI (#19040)
+- Change test so output does not include newline (#19026)
+- Allow system lock down test debug hook to work with new WLDP API (#18962)
+- Add tests for `Allowinsecureredirect` parameter in Web cmdlets (#18939) (Thanks @CarloToso!)
+- Enable `get-help` pattern tests on Unix (#18855) (Thanks @xtqqczze!)
+- Create test to check if WebCmdlets decompress brotli-encoded data (#18905) (Thanks @CarloToso!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@bergmeister, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Restructure the package build to simplify signing and packaging stages (#19321)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> from <code>4.4.0</code> to <code>4.6.0-2.23152.6</code> (#19306)(#19233)</li>
+<li>Test fixes for stabilizing tests (#19068)</li>
+<li>Bump <code>Newtonsoft.Json</code> from <code>13.0.2</code> to <code>13.0.3</code> (#19290)(#19289)</li>
+<li>Fix mariner sudo detection (#19304)</li>
+<li>Add stage for symbols job in Release build (#18937)</li>
+<li>Bump .NET to Preview 2 version (#19305)</li>
+<li>Move workflows that create PRs to private repo (#19276)</li>
+<li>Use reference assemblies generated by dotnet (#19302)</li>
+<li>Update the cgmanifest (#18814)(#19165)(#19296)</li>
+<li>Always regenerate files WXS fragment (#19196)</li>
+<li>MSI installer: Add checkbox and MSI property DISABLE_TELEMETRY to optionally disable telemetry. (#10725) (Thanks @bergmeister!)</li>
+<li>Add <code>-Force</code> to <code>Move-Item</code> to fix the GitHub workflow (#19262)</li>
+<li>Update and remove outdated docs to fix the URL link checks (#19261)</li>
+<li>Bump <code>Markdig.Signed</code> from <code>0.30.4</code> to <code>0.31.0</code> (#19232)</li>
+<li>Add pattern to replace for reference API generation (#19214)</li>
+<li>Split test artifact build into windows and non-windows (#19199)</li>
+<li>Set <code>LangVersion</code> compiler option to <code>11.0</code> (#18877) (Thanks @xtqqczze!)</li>
+<li>Update to .NET 8 preview 1 build (#19194)</li>
+<li>Simplify Windows Packaging CI Trigger YAML (#19160)</li>
+<li>Bump <code>Microsoft.NET.Test.Sdk</code> from <code>17.4.0</code> to <code>17.5.0</code> (#18823)(#19191)</li>
+<li>Add URL for all distributions (#19159)</li>
+<li>Bump <code>Microsoft.Extensions.ObjectPool</code> from <code>7.0.1</code> to <code>7.0.3</code> (#18925)(#19155)</li>
+<li>Add verification of R2R at packaging (#19129)</li>
+<li>Allow cross compiling windows (#19119)</li>
+<li>Update CodeQL build agent (#19113)</li>
+<li>Bump <code>XunitXml.TestLogger</code> from <code>3.0.70</code> to <code>3.0.78</code> (#19066)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.Analyzers</code> from <code>3.3.3</code> to <code>3.3.4</code> (#18975)</li>
+<li>Bump <code>BenchmarkDotNet</code> to <code>0.13.3</code> (#18878) (Thanks @xtqqczze!)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> from <code>7.4.0-preview.1</code> to <code>7.4.0-preview.2</code> (#18910)</li>
+<li>Add checks for Windows 8.1 and Server 2012 in the MSI installer (#18904)</li>
+<li>Update build to include <code>WinForms</code> / <code>WPF</code> in all Windows builds (#18859)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update to the latest NOTICES file (#19169)(#19309)(#19086)(#19077)
+- Update supported distros in readme (#18667) (Thanks @techguy16!)
+- Remove the 'Code Coverage Status' badge (#19265)
+- Pull in changelogs for `v7.2.10` and `v7.3.3` releases (#19219)
+- Update tools `metadata` and `README` (#18831)(#19204)(#19014)
+- Update a broken link in the `README.md` (#19187)
+- Fix typos in comments (#19064) (Thanks @spaette!)
+- Add `7.2` and `7.3` changelogs (#19025)
+- typos (#19058) (Thanks @spaette!)
+- Fix typo in `dotnet-tools/README.md` (#19021) (Thanks @spaette!)
+- Fix up all comments to be in the proper order with proper spacing (#18619)
+- Changelog for `v7.4.0-preview.1` release (#18835)
+
+[7.4.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.4.0-preview.1...v7.4.0-preview.2
+
+## [7.4.0-preview.1] - 2022-12-20
+
+### Engine Updates and Fixes
+
+- Add Instrumentation to `AmsiUtil` and make the init variable readonly (#18727)
+- Fix typo in `OutOfProcTransportManager.cs` (#18766) (Thanks @eltociear!)
+- Allow non-default encodings to be used in user's script/code (#18605)
+- Add `Dim` and `DimOff` to `$PSStyle` (#18653)
+- Change `exec` from alias to function to handle arbitrary arguments (#18567)
+- The command prefix should also be in the error color for `NormalView` (#18555)
+- Skip cloud files marked as "not on disk" during command discovery (#18152)
+- Replace `UTF8Encoding(false)` with `Encoding.Default` (#18356) (Thanks @xtqqczze!)
+- Fix `Switch-Process` to set `termios` appropriate for child process (#18467)
+- On Unix, only explicitly terminate the native process if not in background (#18215)
+- Treat `[NullString]::Value` as the string type when resolving methods (#18080)
+- Improve pseudo binding for dynamic parameters (#18030) (Thanks @MartinGC94!)
+- Make experimental feature `PSAnsiRenderingFileInfo` stable (#18042)
+- Update to use version `2.21.0` of Application Insights. (#17903)
+- Do not preserve temporary results when no need to do so (#17856)
+
+### Performance
+
+- Remove some static constants from `Utils.Separators` (#18154) (Thanks @iSazonov!)
+- Avoid using regular expression when unnecessary in `ScriptWriter` (#18348)
+- Use source generator for `PSVersionInfo` to improve startup time (#15603) (Thanks @iSazonov!)
+- Skip evaluating suggestions at startup (#18232)
+- Avoid using `Regex` when not necessary (#18210)
+
+### General Cmdlet Updates and Fixes
+
+- Update to use `ComputeCore.dll` for PowerShell Direct (#18194)
+- Replace `ArgumentNullException(nameof())` with `ArgumentNullException.ThrowIfNull()` (#18792)(#18784) (Thanks @CarloToso!)
+- Remove `TabExpansion` from remote session configuration (#18795) (Internal 23331)
+- WebCmdlets get Retry-After from headers if status code is 429 (#18717) (Thanks @CarloToso!)
+- Implement `SupportsShouldProcess` in `Stop-Transcript` (#18731) (Thanks @JohnLBevan!)
+- Fix `New-Item -ItemType Hardlink` to resolve target to absolute path and not allow link to itself (#18634)
+- Add output types to Format commands (#18746) (Thanks @MartinGC94!)
+- Fix the process `CommandLine` on Linux (#18710) (Thanks @jborean93!)
+- Fix `SuspiciousContentChecker.Match` to detect a predefined string when the text starts with it (#18693)
+- Switch `$PSNativeCommandUseErrorActionPreference` to `$true` when feature is enabled (#18695)
+- Fix `Start-Job` to check the existence of working directory using the PowerShell way (#18675)
+- Webcmdlets add 308 to redirect codes and small cleanup (#18536) (Thanks @CarloToso!)
+- Ensure `HelpInfo.Category` is consistently a string (#18254)
+- Remove `gcloud` from the legacy list because it's resolved to a .ps1 script (#18575)
+- Add `gcloud` and `sqlcmd` to list to use legacy argument passing (#18559)
+- Fix native access violation (#18545) (#18547) (Thanks @chrullrich!)
+- Fix issue when completing the first command in a script with an empty array expression (#18355) (Thanks @MartinGC94!)
+- Improve type inference of hashtable keys (#17907) (Thanks @MartinGC94!)
+- Fix `Switch-Process` to copy the current env to the new process (#18452)
+- Fix `Switch-Process` error to include the command that is not found (#18443)
+- Update `Out-Printer` to remove all decorating ANSI escape sequences from PowerShell formatting (#18425)
+- Web cmdlets set default charset encoding to `UTF8` (#18219) (Thanks @CarloToso!)
+- Fix incorrect cmdlet name in the script used by `Restart-Computer` (#18374) (Thanks @urizen-source!)
+- Add the function `cd~` (#18308) (Thanks @GigaScratch!)
+- Fix type inference error for empty return statements (#18351) (Thanks @MartinGC94!)
+- Fix the exception reporting in `ConvertFrom-StringData` (#18336) (Thanks @GigaScratch!)
+- Implement `IDisposable` in `NamedPipeClient` (#18341) (Thanks @xtqqczze!)
+- Replace command-error suggestion with new implementation based on subsystem plugin (#18252)
+- Remove the `ProcessorArchitecture` portion from the full name as it's obsolete (#18320)
+- Make the fuzzy searching flexible by passing in the fuzzy matcher (#18270)
+- Add `-FuzzyMinimumDistance` parameter to `Get-Command` (#18261)
+- Improve startup time by triggering initialization of additional types on background thread (#18195)
+- Fix decompression in web cmdlets (#17955) (Thanks @iSazonov!)
+- Add `CustomTableHeaderLabel` formatting to differentiate table header labels that are not property names (#17346)
+- Remove the extra new line form List formatting (#18185)
+- Minor update to the `FileInfo` table formatting on Unix to make it more concise (#18183)
+- Fix Parent property on processes with complex name (#17545) (Thanks @jborean93!)
+- Make PowerShell class not affiliate with `Runspace` when declaring the `NoRunspaceAffinity` attribute (#18138)
+- Complete the progress bar rendering in `Invoke-WebRequest` when downloading is complete or cancelled (#18130)
+- Display download progress in human readable format for `Invoke-WebRequest` (#14611) (Thanks @bergmeister!)
+- Update `WriteConsole` to not use `stackalloc` for buffer with too large size (#18084)
+- Filter out compiler generated types for `Add-Type -PassThru` (#18095)
+- Fixing `CA2014` warnings and removing the warning suppression (#17982) (Thanks @creative-cloud!)
+- Make experimental feature `PSNativeCommandArgumentPassing` stable (#18044)
+- Make experimental feature `PSAMSIMethodInvocationLogging` stable (#18041)
+- Handle `PSObject` argument specially in method invocation logging (#18060)
+- Fix typos in `EventResource.resx` (#18063) (Thanks @eltociear!)
+- Make experimental feature `PSRemotingSSHTransportErrorHandling` stable (#18046)
+- Make experimental feature `PSExec` stable (#18045)
+- Make experimental feature `PSCleanBlock` stable (#18043)
+- Fix error formatting to use color defined in `$PSStyle.Formatting` (#17987)
+- Remove unneeded use of `chmod 777` (#17974)
+- Support mapping foreground/background `ConsoleColor` values to VT escape sequences (#17938)
+- Make `pwsh` server modes implicitly not show banner (#17921)
+- Add output type attributes for `Get-WinEvent` (#17948) (Thanks @MartinGC94!)
+- Remove 1 second minimum delay in `Invoke-WebRequest` for small files, and prevent file-download-error suppression. (#17896) (Thanks @AAATechGuy!)
+- Add completion for values in comparisons when comparing Enums (#17654) (Thanks @MartinGC94!)
+- Fix positional argument completion (#17796) (Thanks @MartinGC94!)
+- Fix member completion in attribute argument (#17902) (Thanks @MartinGC94!)
+- Throw when too many parameter sets are defined (#17881) (Thanks @fflaten!)
+- Limit searching of `charset` attribute in `meta` tag for HTML to first 1024 characters in webcmdlets (#17813)
+- Fix `Update-Help` failing silently with implicit non-US culture. (#17780) (Thanks @dkaszews!)
+- Add the `ValidateNotNullOrWhiteSpace` attribute (#17191) (Thanks @wmentha!)
+- Improve enumeration of inferred types in pipeline (#17799) (Thanks @MartinGC94!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@MartinGC94, @CarloToso, @iSazonov, @xtqqczze, @turbedi, @trossr32, @eltociear, @AtariDreams, @jborean93</p>
+
+</summary>
+
+<ul>
+<li>Add TSAUpload for APIScan (#18446)</li>
+<li>Use Pattern matching in <code>ast.cs</code> (#18794) (Thanks @MartinGC94!)</li>
+<li>Cleanup <code>webrequestpscmdlet.common.cs</code> (#18596) (Thanks @CarloToso!)</li>
+<li>Unify <code>CreateFile</code> <code>pinvoke</code> in SMA (#18751) (Thanks @iSazonov!)</li>
+<li>Cleanup <code>webresponseobject.common</code> (#18785) (Thanks @CarloToso!)</li>
+<li><code>InvokeRestMethodCommand.Common</code> cleanup and merge partials (#18736) (Thanks @CarloToso!)</li>
+<li>Replace <code>GetDirectories</code> in <code>CimDscParser</code> (#14319) (Thanks @xtqqczze!)</li>
+<li>WebResponseObject.Common merge partials atomic commits (#18703) (Thanks @CarloToso!)</li>
+<li>Enable pending test for <code>Start-Process</code> (#18724) (Thanks @iSazonov!)</li>
+<li>Remove one CreateFileW (#18732) (Thanks @iSazonov!)</li>
+<li>Replace <code>DllImport</code> with <code>LibraryImport</code> for WNetAddConnection2 (#18721) (Thanks @iSazonov!)</li>
+<li>Use File.OpenHandle() instead CreateFileW pinvoke (#18722) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport for WNetGetConnection (#18690) (Thanks @iSazonov!)</li>
+<li>Replace <code>DllImport</code> with <code>LibraryImport</code> - 1 (#18603) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in SMA 3 (#18564) (Thanks @iSazonov!)</li>
+<li>Replace <code>DllImport</code> with <code>LibraryImport</code> in SMA - 7 (#18594) (Thanks @iSazonov!)</li>
+<li>Use static <code>DateTime.UnixEpoch</code> and <code>RandomNumberGenerator.Fill()</code> (#18621) (Thanks @turbedi!)</li>
+<li>Rewrite Get-FileHash to use static HashData methods (#18471) (Thanks @turbedi!)</li>
+<li>Replace DllImport with LibraryImport in SMA 8 (#18599) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in SMA 4 (#18579) (Thanks @iSazonov!)</li>
+<li>Remove NativeCultureResolver as dead code (#18582) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in SMA 6 (#18581) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in SMA 2 (#18543) (Thanks @iSazonov!)</li>
+<li>Use standard SBCS detection (#18593) (Thanks @iSazonov!)</li>
+<li>Remove unused pinvokes in RemoteSessionNamedPipe (#18583) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in SMA 5 (#18580) (Thanks @iSazonov!)</li>
+<li>Remove SafeRegistryHandle (#18597) (Thanks @iSazonov!)</li>
+<li>Remove <code>ArchitectureSensitiveAttribute</code> from the code base (#18598) (Thanks @iSazonov!)</li>
+<li>Build COM adapter only on Windows (#18590)</li>
+<li>Include timer instantiation for legacy telemetry in conditional compiler statements in Get-Help (#18475) (Thanks @trossr32!)</li>
+<li>Convert <code>DllImport</code> to <code>LibraryImport</code> for recycle bin, clipboard, and computerinfo cmdlets (#18526)</li>
+<li>Replace DllImport with LibraryImport in SMA 1 (#18520) (Thanks @iSazonov!)</li>
+<li>Replace DllImport with LibraryImport in engine (#18496)</li>
+<li>Fix typo in InitialSessionState.cs (#18435) (Thanks @eltociear!)</li>
+<li>Remove remaining unused strings from resx files (#18448)</li>
+<li>Use new LINQ Order() methods instead of OrderBy(static x =&gt; x) (#18395) (Thanks @turbedi!)</li>
+<li>Make use of StringSplitOptions.TrimEntries when possible (#18412) (Thanks @turbedi!)</li>
+<li>Replace some <code>string.Join(string)</code> calls with <code>string.Join(char)</code> (#18411) (Thanks @turbedi!)</li>
+<li>Remove unused strings from FileSystem and Registry providers (#18403)</li>
+<li>Use generic <code>GetValues&lt;T&gt;</code>, <code>GetNames&lt;T&gt;</code> enum methods (#18391) (Thanks @xtqqczze!)</li>
+<li>Remove unused resource strings from <code>SessionStateStrings</code> (#18394)</li>
+<li>Remove unused resource strings in <code>System.Management.Automation</code> (#18388)</li>
+<li>Use <code>Enum.HasFlags</code> part 1 (#18386) (Thanks @xtqqczze!)</li>
+<li>Remove unused strings from parser (#18383)</li>
+<li>Remove unused strings from Utility module (#18370)</li>
+<li>Remove unused console strings (#18369)</li>
+<li>Remove unused strings from <code>ConsoleInfoErrorStrings.resx</code> (#18367)</li>
+<li>Code cleanup in <code>ContentHelper.Common.cs</code> (#18288) (Thanks @CarloToso!)</li>
+<li>Remove <code>FusionAssemblyIdentity</code> and <code>GlobalAssemblyCache</code> as they are not used (#18334) (Thanks @iSazonov!)</li>
+<li>Remove some static initializations in <code>StringManipulationHelper</code> (#18243) (Thanks @xtqqczze!)</li>
+<li>Use <code>MemoryExtensions.IndexOfAny</code> in <code>PSv2CompletionCompleter</code> (#18245) (Thanks @xtqqczze!)</li>
+<li>Use <code>MemoryExtensions.IndexOfAny</code> in <code>WildcardPattern</code> (#18242) (Thanks @xtqqczze!)</li>
+<li>Small cleanup of the stub code (#18301) (Thanks @CarloToso!)</li>
+<li>Fix typo in <code>RemoteRunspacePoolInternal.cs</code> (#18263) (Thanks @eltociear!)</li>
+<li>Some more code cleanup related to the use of <code>PSVersionInfo</code> (#18231)</li>
+<li>Use <code>MemoryExtensions.IndexOfAny</code> in <code>SessionStateInternal</code> (#18244) (Thanks @xtqqczze!)</li>
+<li>Use overload APIs that take <code>char</code> instead of <code>string</code> when it's possible (#18179) (Thanks @iSazonov!)</li>
+<li>Replace <code>UTF8Encoding(false)</code> with <code>Encoding.Default</code> (#18144) (Thanks @xtqqczze!)</li>
+<li>Remove unused variables (#18058) (Thanks @AtariDreams!)</li>
+<li>Fix typo in PowerShell.Core.Instrumentation.man (#17963) (Thanks @eltociear!)</li>
+<li>Migrate <code>WinTrust</code> functions to a common location (#17598) (Thanks @jborean93!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add a function to get the PR Back-port report (#18299)
+- Add a workaround in automatic rebase workflow to continue on error (#18176)
+- Update list of PowerShell team members in release tools (#17909)
+- Don't block if we fail to create the comment (#17869)
+
+### Tests
+
+- Add `testexe.exe -echocmdline` to output raw command-line received by the process on Windows (#18591)
+- Mark charset test as pending (#18511)
+- Skip output rendering tests on Windows Server 2012 R2 (#18382)
+- Increase timeout to make subsystem tests more reliable (#18380)
+- Add missing -Tag 'CI' to describe blocks. (#18316)
+- Use short path instead of multiple quotes in `Get-Item` test relying on node (#18250)
+- Replace the CIM class used for `-Amended` parameter test (#17884) (Thanks @sethvs!)
+- Stop ongoing progress-bar in `Write-Progress` test (#17880) (Thanks @fflaten!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+
+</summary>
+
+<ul>
+<li>Fix reference assembly generation logic for <code>Microsoft.PowerShell.Commands.Utility</code> (#18818)</li>
+<li>Update the cgmanifest (#18676)(#18521)(#18415)(#18408)(#18197)(#18111)(#18051)(#17913)(#17867)(#17934)(#18088)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> to the latest preview version <code>v7.4.0-preview.1</code> (#18805)</li>
+<li>Remove unnecessary reference to <code>System.Runtime.CompilerServices.Unsafe</code> (#18806)</li>
+<li>Update the release tag in <code>metadata.json</code> for next preview (#18799)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18750)</li>
+<li>Bump .NET SDK to version <code>7.0.101</code> (#18786)</li>
+<li>Bump <code>cirrus-actions/rebase</code> from 1.7 to 1.8 (#18788)</li>
+<li>Bump <code>decode-uri-component</code> from 0.2.0 to 0.2.2 (#18712)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 4.4.0-4.final to 4.4.0 (#18562)</li>
+<li>Bump Newtonsoft.Json from 13.0.1 to 13.0.2 (#18657)</li>
+<li>Apply expected file permissions to Linux files after Authenticode signing (#18643)</li>
+<li>Remove extra quotes after agent moves to pwsh 7.3 (#18577)</li>
+<li>Don't install based on build-id for RPM (#18560)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.3.2 to 17.4.0 (#18487)</li>
+<li>Bump <code>minimatch</code> from 3.0.4 to 3.1.2 (#18514)</li>
+<li>Avoid depending on the pre-generated experimental feature list in private and CI builds (#18484)</li>
+<li>Update <code>release-MsixBundle.yml</code> to add retries (#18465)</li>
+<li>Bump System.Data.SqlClient from 4.8.4 to 4.8.5 in /src/Microsoft.PowerShell.SDK (#18515)</li>
+<li>Bump to use internal .NET 7 GA build (#18508)</li>
+<li>Insert the pre-release nuget feed before building test artifacts (#18507)</li>
+<li>Add test for framework dependent package in release pipeline (#18506) (Internal 23139)</li>
+<li>Update to azCopy 10 (#18509)</li>
+<li>Fix issues with uploading changelog to GitHub release draft (#18504)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18442)</li>
+<li>Add authenticode signing for assemblies on linux builds (#18440)</li>
+<li>Do not remove <code>penimc_cor3.dll</code> from build (#18438)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> from 7.3.0-rc.1 to 7.3.0 (#18405)</li>
+<li>Allow two-digit revisions in <code>vPack</code> package validation pattern (#18392)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#18363)</li>
+<li>Bump to .NET 7 RC2 official version (#18328)</li>
+<li>Bump to .NET 7 to version <code>7.0.100-rc.2.22477.20</code> (#18286)</li>
+<li>Replace win7 runtime with win8 and remove APISets (#18304)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18312)</li>
+<li>Recurse the file listing. (#18277)</li>
+<li>Create tasks to collect and publish hashes for build files. (#18276)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18262)</li>
+<li>Remove ETW trace collection and uploading for CLR CAP (#18253)</li>
+<li>Do not cleanup <code>pwsh.deps.json</code> for framework dependent packages (#18226)</li>
+<li>Add branch counter to APIScan build (#18214)</li>
+<li>Remove unnecessary native dependencies from the package (#18213)</li>
+<li>Remove XML files for min-size package (#18189)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18216)</li>
+<li>Bump <code>Microsoft.PowerShell.Native</code> from <code>7.3.0-preview.1</code> to <code>7.3.0-rc.1</code> (#18217)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18201)</li>
+<li>Move ApiScan to compliance build (#18191)</li>
+<li>Fix the verbose message when using <code>dotnet-install.sh</code> (#18184)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.3.1 to 17.3.2 (#18163)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#18164)</li>
+<li>Make the link to minimal package blob public during release (#18158)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#18147)</li>
+<li>Update MSI exit message (#18137)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp from 4.4.0-1.final to 4.4.0-2.final (#18132)</li>
+<li>Re-enable building with Ready-to-Run (#18105)</li>
+<li>Update <code>DotnetRuntimeMetadata.json</code> for .NET 7 RC1 build (#18091)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#18096)</li>
+<li>Add schema for cgmanifest.json (#18036)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> from 4.3.0-3.final to 4.3.0 (#18012)</li>
+<li>Add XML reference documents to NuPkg files for SDK (#17997)</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.3.0 to 17.3.1 (#18000)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.NetAnalyzers</code> (#17988)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#17983)</li>
+<li>Bump Microsoft.CodeAnalysis.NetAnalyzers (#17945)</li>
+<li>Make sure <code>Security.types.ps1xml</code> gets signed in release build (#17916)</li>
+<li>Make Register Microsoft Update timeout (#17910)</li>
+<li>Merge changes from v7.0.12 v7.2.6 and v7.3.0-preview.7</li>
+<li>Bump Microsoft.NET.Test.Sdk from 17.2.0 to 17.3.0 (#17871)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update readme and metadata for releases (#18780)(#18493)(#18393)(#18332)(#18128)(#17870)
+- Remove 'please' and 'Core' from README.md per MS style guide (#18578) (Thanks @Rick-Anderson!)
+- Change unsupported XML documentation tag (#18608)
+- Change public API mention of `monad` to PowerShell (#18491)
+- Update security reporting policy to recommend security portal for more streamlined reporting (#18437)
+- Changelog for v7.3.0 (#18505) (Internal 23161)
+- Replace `msh` in public API comment based documentation with PowerShell equivalent (#18483)
+- Add missing XML doc elements for methods in `RunspaceFactory` (#18450)
+- Changelog for `v7.3.0-rc.1` (#18400)
+- Update changelogs for `v7.2.7` and `v7.0.13` (#18342)
+- Update the changelog for v7.3.0-preview.8 (#18136)
+- Add the `ConfigurationFile` option to the PowerShell help content (#18093)
+- Update help content about the PowerShell flag `-NonInteractive` (#17952)
+
+[7.4.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.3.0-preview.8...v7.4.0-preview.1
diff --git a/CHANGELOG/7.5.md b/CHANGELOG/7.5.md
new file mode 100644
index 00000000000..95577e024e6
--- /dev/null
+++ b/CHANGELOG/7.5.md
@@ -0,0 +1,1061 @@
+# 7.5 Changelog
+
+## [7.5.9]
+
+### Engine Updates and Fixes
+
+- Merged PR 40624: Validate CAB path before expansion
+
+### Tests
+
+- Update CI workflow to also target servicing-* branches (#27651)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.316</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27682)</li>
+<li>Avoid calling credential provider for public feed for Wix (#27665)</li>
+<li>Separate NuGet publish into its own stage after pushing the git tag (#27650)</li>
+</ul>
+
+</details>
+
+[7.5.9]: https://github.com/PowerShell/PowerShell/compare/v7.5.8...v7.5.9
+
+## [7.5.8]
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.315</p>
+
+</summary>
+
+<ul>
+<li>Remove the unused <code>Publish-NugetToMyGet</code> command from packaging module (#27575)</li>
+</ul>
+
+</details>
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.315</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27581)</li>
+<li>Skip Store Publish when No Channel Selected (#27572)</li>
+<li>Verify Apple codesign immediately after ESRP signing (#27541)</li>
+<li>Remove unused step that clones <code>Internal-PowerShellTeam-Tools</code> repo in PMC publish pipeline (#27498)</li>
+</ul>
+
+</details>
+
+[7.5.8]: https://github.com/PowerShell/PowerShell/compare/v7.5.7...v7.5.8
+
+## [7.5.7]
+
+### Engine Updates and Fixes
+
+- Fix checks for local user config file paths (#27479)
+
+### General Cmdlet Updates and Fixes
+
+- Update PowerShell telemetry to respect the diagnostics and feedback setting on Windows (#27472)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.314</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27480)</li>
+<li>Fix *nix permissions and use <code>certificate_logical_to_actual</code> (#27468)</li>
+<li>Add the <code>windowsTargetName</code> for .NET 9 (#27474)</li>
+<li>Add macOS binary code signing and package notarization (#27467)</li>
+<li>Add <code>appLicensing</code> capability to Appx manifest (#27466)</li>
+<li>Update <code>Microsoft.PowerShell.Native</code> to the latest GA version (#27465)</li>
+<li>Update the MSIXBundle-VPack pipeline to create VPack for both LTS and Stable channel packages (#27464)</li>
+<li>Remove package verification from the notice pipeline (#27463)</li>
+<li>Correct Variable Template Reference in NonOfficial Pipeline Templates (#27462)</li>
+<li>Externalize <code>findMissingNotices</code> target framework selection with ordered Windows fallback (#27461)</li>
+<li>Exclude .exe packages from publishing to GitHub (#27460)</li>
+<li>Download PMC Packages through <code>TemplateContext</code> (#27335)</li>
+<li>Flip Stable PublishToChannel false for v7.5.X (#27333)</li>
+<li>PMC release: Use slash instead of back-slash for Linux container (#27318)</li>
+</ul>
+
+</details>
+
+[7.5.7]: https://github.com/PowerShell/PowerShell/compare/v7.5.6...v7.5.7
+
+## [7.5.6]
+
+### General Cmdlet Updates and Fixes
+
+- Delay update notification for one week to ensure all packages become available (#27220)
+
+### Tests
+
+- Fix the `PSNativeCommandArgumentPassing` test (#27166)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.313</p>
+
+</summary>
+
+<ul>
+<li>Update branch for the v7.5.6 release (#27268)</li>
+<li>Fix package pipeline by adding in <code>PDP-Media</code> directory (#27256)</li>
+<li>Pin <code>ready-to-merge.yml</code> reusable workflow to commit SHA (#27246)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tags (#27239)</li>
+<li>Build, package, and create VPack for the PowerShell-LTS store package within the same <code>msixbundle-vpack</code> pipeline (#27240)</li>
+<li>Add comment-based help documentation to <code>build.psm1</code> functions (#27221)</li>
+<li>Separate store package creation, skip polling for store publish, clean up <code>PDP-Media</code> (#27225)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tokens (#27224)</li>
+<li>Change the display name of "PowerShell-LTS" package to "PowerShell LTS" (#27223)</li>
+<li>Redo windows image fix to use latest image (#27222)</li>
+<li>Bump <code>github/codeql-action</code> from 4.32.4 to 4.35.1 (#27159) (#27170) (#27174)</li>
+<li>Select new MSIX package name (#27172)</li>
+<li>Update the <code>PhoneProductId</code> to be the official LTS id used by Store (#27168)</li>
+<li>release-upload-buildinfo: replace version-comparison channel gating with metadata flags (#27167)</li>
+<li>Create infrastructure to create two msixs and msixbundles for LTS and Stable (#27165)</li>
+<li>Move <code>_GetDependencies</code> MSBuild target from dynamic generation in <code>build.psm1</code> into <code>Microsoft.PowerShell.SDK.csproj</code> (#27164)</li>
+<li>Create Linux LTS deb/rpm packages for LTS releases (#27163)</li>
+<li>Fix the container image for vPack, MSIX vPack and Package pipelines (#27161)</li>
+<li>Create LTS pkg and non-LTS pkg for macOS for LTS releases (#27162)</li>
+<li>Bump actions/dependency-review-action from 4.8.3 to 4.9.0 (#27158)</li>
+<li>Bump actions/upload-artifact from 6 to 7 (#27157)</li>
+<li>Separate "Official" and "NonOfficial" templates for ADO pipelines (#27155)</li>
+</ul>
+
+</details>
+
+[7.5.6]: https://github.com/PowerShell/PowerShell/compare/v7.5.5...v7.5.6
+
+## [7.5.5]
+
+### Engine Updates and Fixes
+
+- Fix up `SSHConnectionInfo` ssh PATH checks (#26165) (Thanks @jborean93!)
+
+### General Cmdlet Updates and Fixes
+
+- Close pipe client handles after creating the child ssh process (#26822)
+- Fix the progress preference variable in script cmdlets (#26791) (Thanks @cmkb3!)
+
+### Tools
+
+- Add merge conflict marker detection to `linux-ci` workflow and refactor existing actions to use reusable `get-changed-files` action (#26812)
+- Add reusable `get-changed-files` action and refactor existing actions (#26811)
+- Create GitHub Copilot setup workflow (#26807)
+- Refactor analyze job to reusable workflow and enable on Windows CI (#26799)
+
+### Tests
+
+- Mark flaky `Update-Help` web tests as pending to unblock CI (#26837)
+- Add GitHub Actions annotations for Pester test failures (#26836)
+- Fix `$PSDefaultParameterValues` leak causing tests to skip unexpectedly (#26823)
+- Fix merge conflict checker for empty file lists and filter `*.cs` files (#26813)
+- Update the `Update-Help` tests to use `-Force` to remove read-only files (#26788)
+- Add markdown link verification for PRs (#26407)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Update to .NET SDK 9.0.312</p>
+<p>We thank the following contributors!</p>
+<p>@kasperk81, @RichardSlater</p>
+
+</summary>
+
+<ul>
+<li>Revert change to module name ThreadJob (#26997)</li>
+<li>Update branch for release (#26990)</li>
+<li>Fix <code>ConvertFrom-ClearlyDefinedCoordinates</code> to handle API object coordinates (#26987)</li>
+<li>Update CGManifests (#26981)</li>
+<li>Hardcode Official templates (#26968)</li>
+<li>Split TPN manifest and Component Governance manifest (#26967)</li>
+<li>Fix a preview detection test for the packaging script (#26966)</li>
+<li>Correct the package name for .deb and .rpm packages (#26964)</li>
+<li>Bring Release Changes from v7.6.0-preview.6 (#26963)</li>
+<li>Merge the v7.6.0-preview.5 release branch back to master (#26958)</li>
+<li>Fix macOS preview package identifier detection to use version string (#26835)</li>
+<li>Update metadata.json to update the Latest attribute with a better name (#26826)</li>
+<li>Remove unused runCodesignValidationInjection variable from pipeline templates (#26825)</li>
+<li>Update <code>Get-ChangeLog</code> to handle backport PRs correctly (#26824)</li>
+<li>Mirror .NET/runtime ICU version range in PowerShell (#26821) (Thanks @kasperk81!)</li>
+<li>Update the macos package name for preview releases to match the previous pattern (#26820)</li>
+<li>Fix condition syntax for StoreBroker package tasks in MSIX pipeline (#26819)</li>
+<li>Fix template path for rebuild branch check in package.yml (#26818)</li>
+<li>Add rebuild branch support with conditional MSIX signing (#26817)</li>
+<li>Move package validation to package pipeline (#26816)</li>
+<li>Optimize/split windows package signing (#26815)</li>
+<li>Improve ADO package build and validation across platforms (#26814)</li>
+<li>Add log grouping to build.psm1 for collapsible GitHub Actions logs (#26810)</li>
+<li>Remove usage of fpm for DEB package generation (#26809)</li>
+<li>Replace fpm with native macOS packaging tools (pkgbuild/productbuild) (#26801)</li>
+<li>Fix build to only enable ready-to-run for the Release configuration (#26798)</li>
+<li>Fix R2R for fxdependent packaging  (#26797)</li>
+<li>Refactor: Centralize xUnit tests into reusable workflow and remove legacy verification (#26794)</li>
+<li>Replace <code>fpm</code> with native <code>rpmbuild</code> for RPM package generation (#26793)</li>
+<li>Add <code>libicu76</code> dependency to support Debian 13 (#26792) (Thanks @RichardSlater!)</li>
+<li>Specify .NET search by build type (#26408)</li>
+<li>Fix buildinfo.json uploading for preview, LTS, and stable releases (#26773)</li>
+<li>Fix path to <code>metadata.json</code> in channel selection script (#26400)</li>
+<li>Separate store automation service endpoints and resolve <code>AppID</code> (#26266)</li>
+<li>Update a few packages to use the right version corresponding to .NET 9 (#26671)</li>
+<li>Add network isolation policy parameter to vPack pipeline (#26393)</li>
+<li>Convert Azure DevOps Linux Packaging pipeline to GitHub Actions workflow (#26391)</li>
+<li>Integrate Windows packaging into windows-ci workflow using reusable workflow (#26390)</li>
+<li>GitHub Workflow cleanup (#26389)</li>
+<li>Update vPack name (#26221)</li>
+</ul>
+
+</details>
+
+[7.5.5]: https://github.com/PowerShell/PowerShell/compare/v7.5.4...v7.5.5
+
+## [7.5.4]
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.306</p>
+
+</summary>
+
+<ul>
+<li>[release/v7.5] Update Ev2 Shell Extension Image to AzureLinux 3 for PMC Release (#26032)</li>
+<li>[release/v7.5] Fix variable reference for release environment in pipeline (#26013)</li>
+<li>[release/v7.5] Add v7.5.3 Changelog (#26015)</li>
+<li>[release/v7.5] Add LinuxHost Network configuration to PowerShell Packages pipeline (#26002)</li>
+<li>Backport Release Pipeline Changes (Internal 37168)</li>
+<li>[release/v7.5] Update branch for release (#26195)</li>
+<li>[release/v7.5] Mark the 3 consistently failing tests as pending to unblock PRs (#26196)</li>
+<li>[release/v7.5] add CodeQL suppresion for NativeCommandProcessor (#26173)</li>
+<li>[release/v7.5] add CodeQL suppressions for UpdatableHelp and NativeCommandProcessor methods (#26171)</li>
+<li>[release/v7.5] Remove UseDotnet task and use the dotnet-install script (#26169)</li>
+<li>[release/v7.5] Automate Store Publishing (#26164)</li>
+<li>[release/v7.5] Ensure that socket timeouts are set only during the token validation (#26079)</li>
+<li>[release/v7.5] Suppress false positive PSScriptAnalyzer warnings in tests and build scripts (#26059)</li>
+</ul>
+
+</details>
+
+[7.5.4]: https://github.com/PowerShell/PowerShell/compare/v7.5.3...v7.5.4
+
+
+## [7.5.3]
+
+### General Cmdlet Updates and Fixes
+
+- Fix `Out-GridView` by replacing the use of obsolete `BinaryFormatter` with custom implementation. (#25559)
+- Remove `OnDeserialized` and `Serializable` attributes from `Microsoft.Management.UI.Internal` project (#25831)
+- Make the interface `IDeepCloneable` internal (#25830)
+
+### Tools
+
+- Add CodeQL suppressions (#25972)
+
+### Tests
+
+- Fix updatable help test for new content (#25944)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.304</p>
+
+</summary>
+
+<ul>
+<li>Make logical template name consistent between pipelines (#25991)</li>
+<li>Update container images to use mcr.microsoft.com for Linux and Azure Linux (#25986)</li>
+<li>Add build to vPack Pipeline (#25975)</li>
+<li>Remove AsyncSDL from Pipelines Toggle Official/NonOfficial Runs (#25964)</li>
+<li>Update branch for release (#25942)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix typo in CHANGELOG for script filename suggestion (#25963)
+
+[7.5.3]: https://github.com/PowerShell/PowerShell/compare/v7.5.2...v7.5.3
+
+## [7.5.2] - 2025-06-24
+
+### Engine Updates and Fixes
+
+- Move .NET method invocation logging to after the needed type conversion is done for method arguments (#25357)
+
+### General Cmdlet Updates and Fixes
+
+- Set standard handles explicitly when starting a process with `-NoNewWindow` (#25324)
+- Make inherited protected internal instance members accessible in class scope. (#25547) (Thanks @mawosoft!)
+- Remove the old fuzzy suggestion and fix the local script filename suggestion (#25330)
+- Fix `PSMethodInvocationConstraints.GetHashCode` method (#25306) (Thanks @crazyjncsu!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.301</p>
+
+</summary>
+
+<ul>
+<li>Correct Capitalization Referencing Templates (#25673)</li>
+<li>Publish <code>.msixbundle</code> package as a VPack (#25621)</li>
+<li>Update ThirdPartyNotices for v7.5.2 (#25658)</li>
+<li>Manually update SqlClient in TestService</li>
+<li>Update cgmanifest</li>
+<li>Update package references</li>
+<li>Update .NET SDK to latest version</li>
+<li>Change linux packaging tests to ubuntu latest (#25639)</li>
+<li>Fix MSIX artifact upload, vPack template, changelog hashes, git tag command (#25633)</li>
+<li>Move MSIXBundle to Packages and Release to GitHub (#25517)</li>
+<li>Use new variables template for vPack (#25435)</li>
+</ul>
+
+</details>
+
+[7.5.2]: https://github.com/PowerShell/PowerShell/compare/v7.5.1...v7.5.2
+
+## [7.5.1]
+
+### Engine Updates and Fixes
+
+- Fallback to AppLocker after `WldpCanExecuteFile` (#25305)
+
+### Code Cleanup
+
+<details>
+
+<ul>
+<li>Cleanup old release pipelines (#25236)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Do not run labels workflow in the internal repository (#25343)
+- Update `CODEOWNERS` (#25321)
+- Check GitHub token availability for `Get-Changelog` (#25328)
+- Update PowerShell team members in `releaseTools.psm1` (#25302)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 9.0.203</p>
+
+</summary>
+
+<ul>
+<li>Finish 7.5.0 release (#24855)</li>
+<li>Add CodeQL suppressions for PowerShell intended behavior (#25375)</li>
+<li>Update to .NET SDK 9.0.203 (#25373)</li>
+<li>Switch to ubuntu-lastest for CI (#25374)</li>
+<li>Add default .NET install path for SDK validation (#25338)</li>
+<li>Combine GitHub and Nuget Release Stage (#25371)</li>
+<li>Add Windows Store Signing to MSIX bundle (#25370)</li>
+<li>Update test result processing to use NUnitXml format and enhance logging for better clarity (#25344)</li>
+<li>Fix MSIX stage in release pipeline (#25345)</li>
+<li>Make GitHub Workflows work in the internal mirror (#25342)</li>
+<li>Update security extensions (#25322)</li>
+<li>Disable SBOM generation on set variables job in release build (#25340)</li>
+<li>Update GitHub Actions to work in private GitHub repo (#25332)</li>
+<li>Revert &quot;Cleanup old release pipelines (#25201)&quot; (#25335)</li>
+<li>Remove call to NuGet (#25334)</li>
+<li>Simplify PR Template (#25333)</li>
+<li>Update package pipeline windows image version (#25331)</li>
+<li>Skip additional packages when generating component manifest (#25329)</li>
+<li>Only build Linux for packaging changes (#25326)</li>
+<li>Make Component Manifest Updater use neutral target in addition to RID target (#25325)</li>
+<li>Remove Az module installs and AzureRM uninstalls in pipeline (#25327)</li>
+<li>Make sure the vPack pipeline does not produce an empty package (#25320)</li>
+<li>Add *.props and sort path filters for windows CI (#25316)</li>
+<li>Fix V-Pack download package name (#25314)</li>
+<li>Update path filters for Windows CI (#25312)</li>
+<li>Give the pipeline runs meaningful names (#25309)</li>
+<li>Migrate MacOS Signing to OneBranch (#25304)</li>
+<li>Add UseDotnet task for installing dotnet (#25281)</li>
+<li>Remove obsolete template from Windows Packaging CI (#25237)</li>
+<li>Add setup dotnet action to the build composite action (#25235)</li>
+<li>Add GitHub Actions workflow to verify PR labels (#25159)</li>
+<li>Update branch for release  - Transitive - true - minor (#24994)</li>
+<li>Fix GitHub Action filter overmatching (#24958)</li>
+<li>Fix release branch filters (#24959)</li>
+<li>Convert powershell/PowerShell-CI-macos to GitHub Actions (#24954)</li>
+<li>Convert powershell/PowerShell-CI-linux to GitHub Actions (#24946)</li>
+<li>Convert powershell/PowerShell-Windows-CI to GitHub Actions (#24931)</li>
+<li>PMC parse state correctly from update command's response (#24859)</li>
+<li>Add EV2 support for publishing PowerShell packages to PMC (#24856)</li>
+</ul>
+
+</details>
+
+[7.5.1]: https://github.com/PowerShell/PowerShell/compare/v7.5.0...v7.5.1
+
+## [7.5.0]
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update .NET SDK to 9.0.102</p>
+
+</summary>
+
+<ul>
+<li>Add tool package download in publish nuget stage (#24790) (#24792)</li>
+<li>Fix Changelog content grab during GitHub Release (#24788) (#24791)</li>
+<li>Mark build as latest stable (#24789)</li>
+<li>[release/v7.5] Update branch for release  - Transitive - true - minor (#24786)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to <code>1.1.0</code> (#24767) (#24785)</li>
+<li>Make the <code>AssemblyVersion</code> not change for servicing releases (#24667) (#24783)</li>
+<li>Deploy Box Update (#24632) (#24779)</li>
+<li>Update machine pool for copy blob and upload buildinfo stage (#24587) (#24776)</li>
+<li>Update nuget publish to use Deploy Box (#24596) (#24597)</li>
+<li>Added Deploy Box Product Pathway to GitHub Release and NuGet Release Pipelines (#24583) (#24595)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `HelpInfoUri` for 7.5 (#24610) (#24777)
+
+[7.5.0]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-rc.1...v7.5.0
+
+## [7.5.0-rc.1] - 2024-11-14
+
+**NOTE:** Due to technical issues, release of packages to packages.microsoft.com ~and release to NuGet.org~ is delayed.
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET 9.0.100</p>
+
+</summary>
+
+<ul>
+<li>Update ThirdPartyNotices file (#24582) (#24536)</li>
+<li>Bump to .NET 9.0.100 (#24576) (#24535)</li>
+<li>Add a way to use only NuGet feed sources (#24528) (#24530)</li>
+<li>Update PSResourceGet to v1.1.0-RC2 (#24512) (#24525)</li>
+<li>Add PMC mapping for debian 12 (bookworm) (#24413) (#24518)</li>
+<li>Bump .NET to 9.0.100-rc.2.24474.11 (#24509) (#24522)</li>
+<li>Keep the roff file when gzipping it. (#24450) (#24520)</li>
+<li>Checkin generated manpage (#24423) (#24519)</li>
+<li>Update PSReadLine to 2.3.6 (#24380) (#24517)</li>
+<li>Download package from package build for generating vpack (#24481) (#24521)</li>
+<li>Delete the msix blob if it's already there (#24353) (#24516)</li>
+<li>Add CodeQL scanning to APIScan build (#24303) (#24515)</li>
+<li>Update vpack pipeline (#24281) (#24514)</li>
+<li>Fix seed max value for Container Linux CI (#24510) (#24511)</li>
+<li>Bring preview.5 release fixes to release/v7.5 (#24379) (#24368)</li>
+<li>Add <code>BaseUrl</code> to <code>buildinfo</code> json file (#24376) (#24377)</li>
+</ul>
+
+</details>
+
+[7.5.0-rc.1]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-preview.5...v7.5.0-rc.1
+
+## [7.5.0-preview.5] - 2024-10-01
+
+### Breaking Changes
+
+- Treat large `Enum` values as numbers in `ConvertTo-Json` (#20999) (#24304)
+
+### Engine Updates and Fixes
+
+- Fix how processor architecture is validated in `Import-Module` (#24265) (#24317)
+
+### Experimental Features
+
+### General Cmdlet Updates and Fixes
+
+- Add `-Force` parameter to `Resolve-Path` and `Convert-Path` cmdlets to support wildcard hidden files (#20981) (#24344)
+- Add telemetry to track the use of features (#24247) (#24331)
+- Treat large `Enum` values as numbers in `ConvertTo-Json` (#20999) (#24304)
+- Make features `PSCommandNotFoundSuggestion`, `PSCommandWithArgs`, and `PSModuleAutoLoadSkipOfflineFiles` stable (#24246) (#24310)
+- Handle global tool when prepending `$PSHome` to `PATH` (#24228) (#24307)
+
+### Tests
+
+- Fix cleanup in `PSResourceGet` test (#24339) (#24345)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump .NET SDK to 9.0.100-rc.1.24452.12</p>
+
+</summary>
+
+<ul>
+<li>Fixed Test Scenario for <code>Compress-PSResource</code> (Internal 32696)</li>
+<li>Add back local NuGet source for test packages (Internal 32693)</li>
+<li>Fix typo in <code>release-MakeBlobPublic.yml</code> (Internal 32689)</li>
+<li>Copy to static site instead of making blob public (#24269) (#24343)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to <code>1.1.0-preview2</code> (#24300) (#24337)</li>
+<li>Remove the MD5 branch in the strong name signing token calculation (#24288) (#24321)</li>
+<li>Update experimental-feature json files (#24271) (#24319)</li>
+<li>Add updated <code>libicu</code> dependency for Debian packages (#24301) (#24324)</li>
+<li>Add mapping to <code>AzureLinux</code> repo (#24290) (#24322)</li>
+<li>Update and add new NuGet package sources for different environments. (#24264) (#24316)</li>
+<li>Bump .NET 9 to <code>9.0.100-rc.1.24452.12</code> (#24273) (#24320)</li>
+<li>Make some release tests run in a hosted pools (#24270) (#24318)</li>
+<li>Do not build the exe for Global tool shim project (#24263) (#24315)</li>
+<li>Delete <code>assets/AppImageThirdPartyNotices.txt</code> (#24256) (#24313)</li>
+<li>Create new pipeline for compliance (#24252) (#24312)</li>
+<li>Add specific path for issues in tsaconfig (#24244) (#24309)</li>
+<li>Use Managed Identity for APIScan authentication (#24243) (#24308)</li>
+<li>Add Windows signing for <code>pwsh.exe</code> (#24219) (#24306)</li>
+<li>Check <code>Create and Submit</code> in vPack build by default (#24181) (#24305)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Delete demos directory (#24258) (#24314)
+
+[7.5.0-preview.5]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-preview.4...v7.5.0-preview.5
+
+## [7.5.0-preview.4] - 2024-08-28
+
+### Engine Updates and Fixes
+
+- RecommendedAction: Explicitly start and stop ANSI Error Color (#24065) (Thanks @JustinGrote!)
+- Improve .NET overload definition of generic methods (#21326) (Thanks @jborean93!)
+- Optimize the `+=` operation for a collection when it's an object array (#23901) (Thanks @jborean93!)
+- Allow redirecting to a variable as experimental feature `PSRedirectToVariable` (#20381)
+
+### General Cmdlet Updates and Fixes
+
+- Change type of `LineNumber` to `ulong` in `Select-String` (#24075) (Thanks @Snowman-25!)
+- Fix `Invoke-RestMethod` to allow `-PassThru` and `-Outfile` work together (#24086) (Thanks @jshigetomi!)
+- Fix Hyper-V Remoting when the module is imported via implicit remoting (#24032) (Thanks @jborean93!)
+- Add `ConvertTo-CliXml` and `ConvertFrom-CliXml` cmdlets (#21063) (Thanks @ArmaanMcleod!)
+- Add `OutFile` property in `WebResponseObject` (#24047) (Thanks @jshigetomi!)
+- Show filename in `Invoke-WebRequest -OutFile -Verbose` (#24041) (Thanks @jshigetomi!)
+- `Set-Acl`: Do not fail on untranslatable SID (#21096) (Thanks @jborean93!)
+- Fix the extent of the parser error when a number constant is invalid (#24024)
+- Fix `Move-Item` to throw error when moving into itself (#24004)
+- Fix up .NET method invocation with `Optional` argument (#21387) (Thanks @jborean93!)
+- Fix progress calculation on `Remove-Item` (#23869) (Thanks @jborean93!)
+- Fix WebCmdlets when `-Body` is specified but `ContentType` is not (#23952) (Thanks @CarloToso!)
+- Enable `-NoRestart` to work with `Register-PSSessionConfiguration` (#23891)
+- Add `IgnoreComments` and `AllowTrailingCommas` options to `Test-Json` cmdlet (#23817) (Thanks @ArmaanMcleod!)
+- Get-Help may report parameters with `ValueFromRemainingArguments` attribute as pipeline-able (#23871)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @eltociear</p>
+
+</summary>
+
+<ul>
+<li>Minor cleanup on local variable names within a method (#24105)</li>
+<li>Remove explicit <code>IDE1005</code> suppressions (#21217) (Thanks @xtqqczze!)</li>
+<li>Fix a typo in <code>WebRequestSession.cs</code> (#23963) (Thanks @eltociear!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- devcontainers: mount workspace in /PowerShell (#23857) (Thanks @rzippo!)
+
+### Tests
+
+- Add debugging to the MTU size test (#21463)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@bosesubham2011</p>
+
+</summary>
+
+<ul>
+<li>Update third party notices (Internal 32128)</li>
+<li>Update cgmanifest (#24163)</li>
+<li>Fixes to Azure Public feed usage (#24149)</li>
+<li>Add support for back porting PRs from GitHub or the Private Azure Repos (#20670)</li>
+<li>Move to <code>9.0.0-preview.6.24327.7</code> (#24133)</li>
+<li>update path (#24134)</li>
+<li>Update to the latest NOTICES file (#24131)</li>
+<li>Fix semver issue with updating cgmanifest (#24132)</li>
+<li>Add ability to capture MSBuild Binary logs when restore fails (#24128)</li>
+<li>add ability to skip windows stage (#24116)</li>
+<li>chore: Refactor Nuget package source creation to use New-NugetPackageSource function (#24104)</li>
+<li>Make Microsoft feeds the default (#24098)</li>
+<li>Cleanup unused csproj (#23951)</li>
+<li>Add script to update SDK version during release (#24034)</li>
+<li>Enumerate over all signed zip packages (#24063)</li>
+<li>Update metadata.json for PowerShell July releases (#24082)</li>
+<li>Add macos signing for package files (#24015)</li>
+<li>Update <code>install-powershell.sh</code> to support azure-linux (#23955) (Thanks @bosesubham2011!)</li>
+<li>Skip build steps that do not have exe packages (#23945)</li>
+<li>Update metadata.json for PowerShell June releases (#23973)</li>
+<li>Create <code>powershell.config.json</code> for <code>PowerShell.Windows.x64</code> global tool (#23941)</li>
+<li>Fix error in the vPack release, debug script that blocked release (#23904)</li>
+<li>Add vPack release (#23898)</li>
+<li>Fix exe signing with third party signing for WiX engine (#23878)</li>
+<li>Update wix installation in CI (#23870)</li>
+<li>Add checkout to fix TSA config paths (#23865)</li>
+<li>Merge the <code>v7.5.0-preview.3</code> release branch to GitHub master branch</li>
+<li>Update <code>metadata.json</code> for the <code>v7.5.0-preview.3</code> release (#23862)</li>
+<li>Bump <code>PSResourceGet</code> to <code>1.1.0-preview1</code> (#24129)</li>
+<li>Bump <code>github/codeql-action</code> from 3.25.8 to 3.26.0 (#23953) (#23999) (#24053) (#24069) (#24095) (#24118)</li>
+<li>Bump <code>actions/upload-artifact</code> from 4.3.3 to 4.3.6 (#24019) (#24113) (#24119)</li>
+<li>Bump <code>agrc/create-reminder-action</code> from 1.1.13 to 1.1.15 (#24029) (#24043)</li>
+<li>Bump <code>agrc/reminder-action</code> from 1.0.12 to 1.0.14 (#24028) (#24042)</li>
+<li>Bump <code>super-linter/super-linter</code> from 5.7.2 to 6.8.0 (#23809) (#23856) (#23894) (#24030) (#24103)</li>
+<li>Bump <code>ossf/scorecard-action</code> from 2.3.1 to 2.4.0 (#23802) (#24096)</li>
+<li>Bump <code>actions/dependency-review-action</code> from 4.3.2 to 4.3.4 (#23897) (#24046)</li>
+<li>Bump <code>actions/checkout</code> from 4.1.5 to 4.1.7 (#23813) (#23947)</li>
+<li>Bump <code>github/codeql-action</code> from 3.25.4 to 3.25.8 (#23801) (#23893)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update docs sample nuget.config (#24109)
+- Update Code of Conduct and Security Policy (#23811)
+- Update working-group-definitions.md for the Security WG (#23884)
+- Fix up broken links in Markdown files (#23863)
+- Update Engine Working Group Members (#23803) (Thanks @kilasuit!)
+- Remove outdated and contradictory information from `README` (#23812)
+
+[7.5.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-preview.3...v7.5.0-preview.4
+
+## [7.5.0-preview.3] - 2024-05-16
+
+### Breaking Changes
+
+- Remember installation options and used them to initialize options for the next installation (#20420) (Thanks @reduckted!)
+- `ConvertTo-Json`: Serialize `BigInteger` as a number (#21000) (Thanks @jborean93!)
+
+### Engine Updates and Fixes
+
+- Fix generating `OutputType` when running in Constrained Language Mode (#21605)
+- Revert the PR #17856 (Do not preserve temporary results when no need to do so) (#21368)
+- Make sure the assembly/library resolvers are registered at early stage (#21361)
+- Fix PowerShell class to support deriving from an abstract class with abstract properties (#21331)
+- Fix error formatting for pipeline enumeration exceptions (#20211)
+
+### General Cmdlet Updates and Fixes
+
+- Added progress bar for `Remove-Item` cmdlet (#20778) (Thanks @ArmaanMcleod!)
+- Expand `~` to `$home` on Windows with tab completion (#21529)
+- Separate DSC configuration parser check for ARM processor (#21395) (Thanks @dkontyko!)
+- Fix `[semver]` type to pass `semver.org` tests (#21401)
+- Don't complete when declaring parameter name and class member (#21182) (Thanks @MartinGC94!)
+- Add `RecommendedAction` to `ConciseView` of the error reporting (#20826) (Thanks @JustinGrote!)
+- Fix the error when using `Start-Process -Credential` without the admin privilege (#21393) (Thanks @jborean93!)
+- Fix `Test-Path -IsValid` to check for invalid path and filename characters (#21358)
+- Fix build failure due to missing reference in `GlobalToolShim.cs` (#21388)
+- Fix argument passing in `GlobalToolShim` (#21333) (Thanks @ForNeVeR!)
+- Make sure both stdout and stderr can be redirected from a native executable (#20997)
+- Handle the case that `Runspace.DefaultRunspace == null` when logging for WDAC Audit (#21344)
+- Fix a typo in `releaseTools.psm1` (#21306) (Thanks @eltociear!)
+- `Get-Process`: Remove admin requirement for `-IncludeUserName` (#21302) (Thanks @jborean93!)
+- Fall back to type inference when hashtable key-value cannot be retrieved from safe expression (#21184) (Thanks @MartinGC94!)
+- Fix the regression when doing type inference for `$_` (#21223) (Thanks @MartinGC94!)
+- Revert "Adjust PUT method behavior to POST one for default content type in WebCmdlets" (#21049)
+- Fix a regression in `Format-Table` when header label is empty (#21156)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Enable <code>CA1868</code>: Unnecessary call to 'Contains' for sets (#21165) (Thanks @xtqqczze!)</li>
+<li>Remove <code>JetBrains.Annotations</code> attributes (#21246) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Update `metadata.json` and `README.md` (#21454)
+- Skip test on Windows Server 2012 R2 for `no-nl` (#21265)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Bump to .NET 9.0.0-preview.3</p>
+<p>We thank the following contributors!</p>
+<p>@alerickson, @tgauth, @step-security-bot, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Fix PMC publish and the file path for msixbundle</li>
+<li>Fix release version and stage issues in build and packaging</li>
+<li>Add release tag if the environment variable is set</li>
+<li>Update installation on Wix module (#23808)</li>
+<li>Updates to package and release pipelines (#23800)</li>
+<li>Update <code>PSResourceGet</code> to 1.0.5 (#23796)</li>
+<li>Bump <code>actions/upload-artifact</code> from 4.3.2 to 4.3.3 (#21520)</li>
+<li>Bump <code>actions/dependency-review-action</code> from 4.2.5 to 4.3.2 (#21560)</li>
+<li>Bump <code>actions/checkout</code> from 4.1.2 to 4.1.5 (#21613)</li>
+<li>Bump <code>github/codeql-action</code> from 3.25.1 to 3.25.4 (#22071)</li>
+<li>Use feed with Microsoft Wix toolset (#21651) (Thanks @tgauth!)</li>
+<li>Bump to .NET 9 preview 3 (#21782)</li>
+<li>Use <code>PSScriptRoot</code> to find path to Wix module (#21611)</li>
+<li>Create the <code>Windows.x64</code> global tool with shim for signing (#21559)</li>
+<li>Update Wix package install (#21537) (Thanks @tgauth!)</li>
+<li>Add branch counter variables for daily package builds (#21523)</li>
+<li>Use correct signing certificates for RPM and DEBs (#21522)</li>
+<li>Revert to version available on <code>Nuget</code> for <code>Microsoft.CodeAnalysis.Analyzers</code> (#21515)</li>
+<li>Official PowerShell Package pipeline (#21504)</li>
+<li>Add a PAT for fetching PMC cli (#21503)</li>
+<li>Bump <code>ossf/scorecard-action</code> from 2.0.6 to 2.3.1 (#21485)</li>
+<li>Apply security best practices (#21480) (Thanks @step-security-bot!)</li>
+<li>Bump <code>Microsoft.CodeAnalysis.Analyzers</code> (#21449)</li>
+<li>Fix package build to not check some files for a signature. (#21458)</li>
+<li>Update PSResourceGet version from 1.0.2 to 1.0.4.1 (#21439) (Thanks @alerickson!)</li>
+<li>Verify environment variable for OneBranch before we try to copy (#21441)</li>
+<li>Add back two transitive dependency packages (#21415)</li>
+<li>Multiple fixes in official build pipeline (#21408)</li>
+<li>Update <code>PSReadLine</code> to <code>v2.3.5</code> (#21414)</li>
+<li>PowerShell co-ordinated build OneBranch pipeline (#21364)</li>
+<li>Add file description to <code>pwsh.exe</code> (#21352)</li>
+<li>Suppress MacOS package manager output (#21244) (Thanks @xtqqczze!)</li>
+<li>Update <code>metadata.json</code> and <code>README.md</code> (#21264)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update the doc about how to build PowerShell (#21334) (Thanks @ForNeVeR!)
+- Update the member lists for the Engine and Interactive-UX working groups (#20991) (Thanks @kilasuit!)
+- Update CHANGELOG for `v7.2.19`, `v7.3.12` and `v7.4.2` (#21462)
+- Fix grammar in `FAQ.md` (#21468) (Thanks @CodingGod987!)
+- Fix typo in `SessionStateCmdletAPIs.cs` (#21413) (Thanks @eltociear!)
+- Fix typo in a test (#21337) (Thanks @testwill!)
+- Fix typo in `ast.cs` (#21350) (Thanks @eltociear!)
+- Adding Working Group membership template (#21153)
+
+[7.5.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-preview.2...v7.5.0-preview.3
+
+## [7.5.0-preview.2] - 2024-02-22
+
+### Engine Updates and Fixes
+
+- Fix `using assembly` to use `Path.Combine` when constructing assembly paths (#21169)
+- Validate the value for `using namespace` during semantic checks to prevent declaring invalid namespaces (#21162)
+
+### General Cmdlet Updates and Fixes
+
+- Add `WinGetCommandNotFound` and `CompletionPredictor` modules to track usage (#21040)
+- `ConvertFrom-Json`: Add `-DateKind` parameter (#20925) (Thanks @jborean93!)
+- Add tilde expansion for windows native executables (#20402) (Thanks @domsleee!)
+- Add `DirectoryInfo` to the `OutputType` for `New-Item` (#21126) (Thanks @MartinGC94!)
+- Fix `Get-Error` serialization of array values (#21085) (Thanks @jborean93!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear</p>
+
+</summary>
+
+<ul>
+<li>Fix a typo in <code>CoreAdapter.cs</code> (#21179) (Thanks @eltociear!)</li>
+<li>Remove <code>PSScheduledJob</code> module source code (#21189)</li>
+</ul>
+
+</details>
+
+### Tests
+
+- Rewrite the mac syslog tests to make them less flaky (#21174)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+<p>Bump to .NET 9 Preview 1</p>
+<p>We thank the following contributors!</p>
+<p>@gregsdennis</p>
+
+</summary>
+
+<ul>
+<li>Bump to .NET 9 Preview 1 (#21229)</li>
+<li>Add dotnet-runtime-9.0 as a dependency for the Mariner package</li>
+<li>Add dotenv install as latest version does not work with current Ruby version (#21239)</li>
+<li>Remove <code>surrogateFile</code> setting of APIScan (#21238)</li>
+<li>Update experimental-feature json files (#21213)</li>
+<li>Update to the latest NOTICES file (#21236)(#21177)</li>
+<li>Update the cgmanifest (#21237)(#21093)</li>
+<li>Update the cgmanifest (#21178)</li>
+<li>Bump XunitXml.TestLogger from 3.1.17 to 3.1.20 (#21207)</li>
+<li>Update versions of PSResourceGet (#21190)</li>
+<li>Generate MSI for <code>win-arm64</code> installer (#20516)</li>
+<li>Bump JsonSchema.Net to v5.5.1 (#21120) (Thanks @gregsdennis!)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update `README.md` and `metadata.json` for v7.5.0-preview.1 release (#21094)
+- Fix incorrect examples in XML docs in `PowerShell.cs` (#21173)
+- Update WG members (#21091)
+- Update changelog for v7.4.1 (#21098)
+
+[7.5.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-preview.1...v7.5.0-preview.2
+
+## [7.5.0-preview.1] - 2024-01-18
+
+### Breaking Changes
+
+- Fix `-OlderThan` and `-NewerThan` parameters for `Test-Path` when using `PathType` and date range (#20942) (Thanks @ArmaanMcleod!)
+- Previously `-OlderThan` would be ignored if specified together
+- Change `New-FileCatalog -CatalogVersion` default to 2 (#20428) (Thanks @ThomasNieto!)
+
+### General Cmdlet Updates and Fixes
+
+- Fix completion crash for the SCCM provider (#20815, #20919, #20915) (Thanks @MartinGC94!)
+- Fix regression in `Get-Content` when `-Tail 0` and `-Wait` are used together (#20734) (Thanks @CarloToso!)
+- Add `Aliases` to the properties shown up when formatting the help content of the parameter returned by `Get-Help` (#20994)
+- Add implicit localization fallback to `Import-LocalizedData` (#19896) (Thanks @chrisdent-de!)
+- Change `Test-FileCatalog` to use `File.OpenRead` to better handle the case where the file is being used (#20939) (Thanks @dxk3355!)
+- Added `-Module` completion for `Save-Help` and `Update-Help` commands (#20678) (Thanks @ArmaanMcleod!)
+- Add argument completer to `-Verb` for `Start-Process` (#20415) (Thanks @ArmaanMcleod!)
+- Add argument completer to `-Scope` for `*-Variable`, `*-Alias` & `*-PSDrive` commands (#20451) (Thanks @ArmaanMcleod!)
+- Add argument completer to `-Verb` for `Get-Verb` and `Get-Command` (#20286) (Thanks @ArmaanMcleod!)
+- Fixing incorrect formatting string in `CommandSearcher` trace logging (#20928) (Thanks @powercode!)
+- Ensure the filename is not null when logging WDAC ETW events (#20910) (Thanks @jborean93!)
+- Fix four regressions introduced by the WDAC logging feature (#20913)
+- Leave the input, output, and error handles unset when they are not redirected (#20853)
+- Fix `Start-Process -PassThru` to make sure the `ExitCode` property is accessible for the returned `Process` object (#20749) (Thanks @CodeCyclone!)
+- Fix `Group-Object` output using interpolated strings (#20745) (Thanks @mawosoft!)
+- Fix rendering of `DisplayRoot` for network `PSDrive` (#20793)
+- Fix `Invoke-WebRequest` to report correct size when `-Resume` is specified (#20207) (Thanks @LNKLEO!)
+- Add `PSAdapter` and `ConsoleGuiTools` to module load telemetry allow list (#20641)
+- Fix Web Cmdlets to allow `WinForm` apps to work correctly (#20606)
+- Block getting help from network locations in restricted remoting sessions (#20593)
+- Fix `Group-Object` to use current culture for its output (#20608)
+- Add argument completer to `-Version` for `Set-StrictMode` (#20554) (Thanks @ArmaanMcleod!)
+- Fix `Copy-Item` progress to only show completed when all files are copied (#20517)
+- Fix UNC path completion regression (#20419) (Thanks @MartinGC94!)
+- Add telemetry to check for specific tags when importing a module (#20371)
+- Report error if invalid `-ExecutionPolicy` is passed to `pwsh` (#20460)
+- Add `HelpUri` to `Remove-Service` (#20476)
+- Fix `unixmode` to handle `setuid` and `sticky` when file is not an executable (#20366)
+- Fix `Test-Connection` due to .NET 8 changes (#20369)
+- Fix implicit remoting proxy cmdlets to act on common parameters (#20367)
+- Set experimental features to stable for 7.4 release (#20285)
+- Revert changes to continue using `BinaryFormatter` for `Out-GridView` (#20300)
+- Fix `Get-Service` non-terminating error message to include category (#20276)
+- Prevent `Export-CSV` from flushing with every input (#20282) (Thanks @Chris--A!)
+- Fix a regression in DSC (#20268)
+- Include the module version in error messages when module is not found (#20144) (Thanks @ArmaanMcleod!)
+- Add `-Empty` and `-InputObject` parameters to `New-Guid` (#20014) (Thanks @CarloToso!)
+- Remove the comment trigger from feedback provider (#20136)
+- Prevent fallback to file completion when tab completing type names (#20084) (Thanks @MartinGC94!)
+- Add the alias `r` to the parameter `-Recurse` for the `Get-ChildItem` command (#20100) (Thanks @kilasuit!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @ImportTaste, @ThomasNieto, @0o001</p>
+
+</summary>
+
+<ul>
+<li>Fix typos in the code base (#20147, #20492, #20632, #21015, #20838) (Thanks @eltociear!)</li>
+<li>Add the missing alias <code>LP</code> to <code>-LiteralPath</code> for some cmdlets (#20820) (Thanks @ImportTaste!)</li>
+<li>Remove parenthesis for empty attribute parameters (#20087) (Thanks @ThomasNieto!)</li>
+<li>Add space around keyword according to the <code>CodeFactor</code> rule (#20090) (Thanks @ThomasNieto!)</li>
+<li>Remove blank lines as instructed by <code>CodeFactor</code> rules (#20086) (Thanks @ThomasNieto!)</li>
+<li>Remove trailing whitespace (#20085) (Thanks @ThomasNieto!)</li>
+<li>Fix typo in error message (#20145) (Thanks @0o001!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Make sure feedback link in the bot's comment is clickable (#20878) (Thanks @floh96!)
+- Fix bot so anyone who comments will remove the "Resolution-No Activity" label (#20788)
+- Fix bot configuration to prevent multiple comments about "no activity" (#20758)
+- Add bot logic for closing GitHub issues after 6 months of "no activity" (#20525)
+- Refactor bot for easier use and updating (#20805)
+- Configure bot to add survey comment for closed issues (#20397)
+
+### Tests
+
+- Suppress error output from `Set-Location` tests (#20499)
+- Fix typo in `FileCatalog.Tests.ps1` (#20329) (Thanks @eltociear!)
+- Continue to improve tests for release automation (#20182)
+- Skip the test on x86 as `InstallDate` is not visible on `Wow64` (#20165)
+- Harden some problematic release tests (#20155)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@alerickson, @Zhoneym, @0o001</p>
+
+</summary>
+
+<ul>
+<li>Bump .NET SDK to 8.0.101 (#21084)</li>
+<li>Update the cgmanifest (#20083, #20436, #20523, #20560, #20627, #20764, #20906, #20933, #20955, #21047)</li>
+<li>Update to the latest NOTICES file (#20074, #20161, #20385, #20453, #20576, #20590, #20880, #20905)</li>
+<li>Bump StyleCop.Analyzers from 1.2.0-beta.507 to 1.2.0-beta.556 (#20953)</li>
+<li>Bump xUnit to 2.6.6 (#21071)</li>
+<li>Bump JsonSchema.Net to 5.5.0 (#21027)</li>
+<li>Fix failures in GitHub action <code>markdown-link-check</code> (#20996)</li>
+<li>Bump xunit.runner.visualstudio to 2.5.6 (#20966)</li>
+<li>Bump github/codeql-action from 2 to 3 (#20927)</li>
+<li>Bump Markdig.Signed to 0.34.0 (#20926)</li>
+<li>Bump Microsoft.ApplicationInsights from 2.21.0 to 2.22.0 (#20888)</li>
+<li>Bump Microsoft.NET.Test.Sdk to 17.8.0 (#20660)</li>
+<li>Update <code>apiscan.yml</code> to have access to the <code>AzDevOpsArtifacts</code> variable group (#20671)</li>
+<li>Set the <code>ollForwardOnNoCandidateFx</code> in <code>runtimeconfig.json</code> to roll forward only on minor and patch versions (#20689)</li>
+<li>Sign the global tool shim executable (#20794)</li>
+<li>Bump actions/github-script from 6 to 7 (#20682)</li>
+<li>Remove RHEL7 publishing to packages.microsoft.com as it's no longer supported (#20849)</li>
+<li>Bump Microsoft.CodeAnalysis.CSharp to 4.8.0 (#20751)</li>
+<li>Add internal nuget feed to compliance build (#20669)</li>
+<li>Copy azure blob with PowerShell global tool to private blob and move to CDN during release (#20659)</li>
+<li>Fix release build by making the internal SDK parameter optional (#20658)</li>
+<li>Update PSResourceGet version to 1.0.1 (#20652)</li>
+<li>Make internal .NET SDK URL as a parameter for release builld (#20655)</li>
+<li>Fix setting of variable to consume internal SDK source (#20644)</li>
+<li>Bump Microsoft.Management.Infrastructure to v3.0.0 (#20642)</li>
+<li>Bump Microsoft.PowerShell.Native to v7.4.0 (#20617)</li>
+<li>Bump Microsoft.Security.Extensions from 1.2.0 to 1.3.0 (#20556)</li>
+<li>Fix package version for .NET nuget packages (#20551)</li>
+<li>Add SBOM for release pipeline (#20519)</li>
+<li>Block any preview vPack release (#20243)</li>
+<li>Only registry App Path for release package (#20478)</li>
+<li>Increase timeout when publishing packages to <code>pacakages.microsoft.com</code> (#20470)</li>
+<li>Fix alpine tar package name and do not crossgen alpine fxdependent package (#20459)</li>
+<li>Bump PSReadLine from 2.2.6 to 2.3.4 (#20305)</li>
+<li>Remove the <code>ref</code> folder before running compliance (#20373)</li>
+<li>Updates RIDs used to generate component Inventory (#20370)</li>
+<li>Bump XunitXml.TestLogger from 3.1.11 to 3.1.17 (#20293)</li>
+<li>Update experimental-feature json files (#20335)</li>
+<li>Use <code>fxdependent-win-desktop</code> runtime for compliance runs (#20326)</li>
+<li>Release build: Change the names of the PATs (#20307)</li>
+<li>Add mapping for mariner arm64 stable (#20213)</li>
+<li>Put the calls to <code>Set-AzDoProjectInfo</code> and <code>Set-AzDoAuthToken</code> in the right order (#20306)</li>
+<li>Enable vPack provenance data (#20220)</li>
+<li>Bump actions/checkout from 3 to 4 (#20205)</li>
+<li>Start using new <code>packages.microsoft.com</code> cli (#20140, #20141)</li>
+<li>Add mariner arm64 to PMC release (#20176)</li>
+<li>Fix typo <code>donet</code> to <code>dotnet</code> in build scripts and pipelines (#20122) (Thanks @0o001!)</li>
+<li>Install the pmc cli</li>
+<li>Add skip publish parameter</li>
+<li>Add verbose to clone</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Include information about upgrading in readme (#20993)
+- Expand "iff" to "if-and-only-if" in XML doc content (#20852)
+- Update LTS links in README.md to point to the v7.4 packages (#20839) (Thanks @kilasuit!)
+- Update `README.md` to improve readability (#20553) (Thanks @AnkitaSikdar005!)
+- Fix link in `docs/community/governance.md` (#20515) (Thanks @suravshresth!)
+- Update `ADOPTERS.md` (#20555) (Thanks @AnkitaSikdar005!)
+- Fix a typo in `ADOPTERS.md` (#20504, #20520) (Thanks @shruti-sen2004!)
+- Correct grammatical errors in `README.md` (#20509) (Thanks @alienishi!)
+- Add 7.3 changelog URL to readme (#20473) (Thanks @Saibamen!)
+- Clarify some comments and documentation (#20462) (Thanks @darkstar!)
+
+[7.5.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.4.1...v7.5.0-preview.1
diff --git a/CHANGELOG/7.6.md b/CHANGELOG/7.6.md
new file mode 100644
index 00000000000..ee6be496e8e
--- /dev/null
+++ b/CHANGELOG/7.6.md
@@ -0,0 +1,943 @@
+# 7.6 Changelog
+
+## [7.6.4]
+
+### Engine Updates and Fixes
+
+- Merged PR 40624: Validate CAB path before expansion
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 10.0.302</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27685)</li>
+<li>Avoid calling credential provider for public feed for Wix (#27666)</li>
+<li>Separate NuGet publish into its own stage after pushing the git tag (#27652)</li>
+<li>PMC: Download deb_arm artifact to ensure package is available for PMC publish flow (#27653)</li>
+</ul>
+
+</details>
+
+[7.6.4]: https://github.com/PowerShell/PowerShell/compare/v7.6.3...v7.6.4
+
+## [7.6.3]
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 10.0.301</p>
+
+</summary>
+
+<ul>
+<li>Remove the unused <code>Publish-NugetToMyGet</code> command from packaging module (#27576)</li>
+<li>Verify Apple codesign immediately after ESRP signing (#27542)</li>
+<li>Remove unused step to clone Internal-PowerShellTeam-Tools repo in PMC publish pipeline (#27496)</li>
+</ul>
+
+</details>
+
+[7.6.3]: https://github.com/PowerShell/PowerShell/compare/v7.6.2...v7.6.3
+
+## [7.6.2]
+
+### Engine Updates and Fixes
+
+- Enable usage in AppContainers (#27423)
+- Fix checks for local user config file paths (#27432)
+
+### General Cmdlet Updates and Fixes
+
+- Update PowerShell telemetry to respect the diagnostics and feedback setting on Windows (#27438)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 10.0.300</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#27446)</li>
+<li>Fix *nix permissions and use <code>certificate_logical_to_actual</code> (#27439)</li>
+<li>Specify linux-arm64 runtime if package type is deb-arm64 in packaging.psm1 (#27440)</li>
+<li>Remove mariner2.0 from PMC mapping (#27422)</li>
+<li>Remove package verification from the notice pipeline (#27425)</li>
+<li>Update the MSIXBundle-VPack pipeline to create VPack for both LTS and Stable channel packages (#27435)</li>
+<li>Update <code>Microsoft.PowerShell.Native</code> to the latest GA version (#27436)</li>
+<li>Create PowerShell package for arm debian distribution (#27433)</li>
+<li>Add macOS binary code signing and package notarization (#27434)</li>
+<li>Externalize <code>findMissingNotices</code> target framework selection with ordered Windows fallback (#27424)</li>
+<li>Add <code>appLicensing</code> capability to Appx manifest (#27437)</li>
+<li>Download PMC Packages through <code>TemplateContext</code> (#27331)</li>
+<li>PMC release: Use slash instead of back-slash for Linux container (#27319)</li>
+<li>Correct Variable Template Reference in NonOfficial Pipeline Templates (#27317)</li>
+</ul>
+
+</details>
+
+[7.6.2]: https://github.com/PowerShell/PowerShell/compare/v7.6.1...v7.6.2
+
+## [7.6.1]
+
+### General Cmdlet Updates and Fixes
+
+- Delay update notification for one week to ensure all packages become available (#27215)
+
+### Tests
+
+- Fix the `PSNativeCommandArgumentPassing` test (#27179)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 10.0.202</p>
+
+</summary>
+
+<ul>
+<li>Fix PMC Repo URL for RHEL10 (#27061) (#27062)</li>
+<li>Update branch for release (#27287)</li>
+<li>Fix package pipeline by adding in PDP-Media directory (#27257)</li>
+<li>Pin ready-to-merge.yml reusable workflow to commit SHA (#27245)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tags (#27236)</li>
+<li>Build, package, and create VPack for the PowerShell-LTS store package within the same <code>msixbundle-vpack</code> pipeline (#27237)</li>
+<li>Change the display name of PowerShell-LTS package to PowerShell LTS (#27219)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions tokens (#27218)</li>
+<li>Redo windows image fix to use latest image (#27217)</li>
+<li>Add comment-based help documentation to build.psm1 functions (#27216)</li>
+<li>Separate Store Package Creation, Skip Polling for Store Publish, Clean up PDP-Media (#27214)</li>
+<li>Bump github/codeql-action from 4.34.1 to 4.35.1 (#27184)</li>
+<li>Bump github/codeql-action from 4.32.6 to 4.34.1 (#27182)</li>
+<li>Select New MSIX Package Name (#27183)</li>
+<li>Update the PhoneProductId to be the official LTS id used by Store (#27181)</li>
+<li>release-upload-buildinfo: replace version-comparison channel gating with metadata flags (#27180)</li>
+<li>Move <code>_GetDependencies</code> MSBuild target from dynamic generation in <code>build.psm1</code> into <code>Microsoft.PowerShell.SDK.csproj</code> (#27177)</li>
+<li>Separate Official and NonOfficial templates for ADO pipelines (#27176)</li>
+</ul>
+
+</details>
+
+[7.6.1]: https://github.com/PowerShell/PowerShell/compare/v7.6.0...v7.6.1
+
+## [7.6.0]
+
+### General Cmdlet Updates and Fixes
+
+- Update PowerShell Profile DSC resource manifests to allow `null` for content (#26973)
+
+### Tests
+
+- Add GitHub Actions annotations for Pester test failures (#26969)
+- Fix `Import-Module.Tests.ps1` to handle Arm32 platform (#26888)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Update to .NET SDK 10.0.201</p>
+
+</summary>
+
+<ul>
+<li>Update v7.6 release branch to use .NET SDK 10.0.201 (#27041)</li>
+<li>Create LTS package and non-LTS package for macOS for LTS releases (#27040)</li>
+<li>Fix the container image for package pipelines (#27020)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> version to 1.2.0 (#27007)</li>
+<li>Update LTS and Stable release settings in metadata (#27006)</li>
+<li>Update branch for release (#26989)</li>
+<li>Fix <code>ConvertFrom-ClearlyDefinedCoordinates</code> to handle API object coordinates (#26986)</li>
+<li>Update NuGet package versions in <code>cgmanifest.json</code> to actually match the branch (#26982)</li>
+<li>Bump actions/upload-artifact from 6 to 7 (#26979)</li>
+<li>Split TPN manifest and Component Governance manifest (#26978)</li>
+<li>Bump github/codeql-action from 4.32.4 to 4.32.6 (#26975)</li>
+<li>Bump actions/dependency-review-action from 4.8.3 to 4.9.0 (#26974)</li>
+<li>Hardcode Official templates (#26972)</li>
+<li>Fix a preview detection test for the packaging script (#26971)</li>
+<li>Add PMC packages for debian13 and rhel10 (#26917)</li>
+<li>Add version in description and pass store task on failure (#26889)</li>
+<li>Exclude .exe packages from publishing to GitHub (#26887)</li>
+<li>Correct the package name for .deb and .rpm packages (#26884)</li>
+</ul>
+
+</details>
+
+[7.6.0]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-rc.1...v7.6.0
+
+## [7.6.0-rc.1] - 2026-02-19
+
+### Tests
+
+- Fix `$PSDefaultParameterValues` leak causing tests to skip unexpectedly (#26705)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Expand to see details.</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release (#26779)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> version to 1.2.0-rc3 (#26767)</li>
+<li>Update <code>Microsoft.PowerShell.Native</code> package version (#26748)</li>
+<li>Move PowerShell build to depend on .NET SDK 10.0.102 (#26717)</li>
+<li>Fix <code>buildinfo.json</code> uploading for preview, LTS, and stable releases (#26715)</li>
+<li>Fix macOS preview package identifier detection to use version string (#26709)</li>
+<li>Update <code>metadata.json</code> to update the Latest attribute with a better name (#26708)</li>
+<li>Remove unused <code>runCodesignValidationInjection</code> variable from pipeline templates (#26707)</li>
+<li>Update <code>Get-ChangeLog</code> to handle backport PRs correctly (#26706)</li>
+<li>Bring release changes from the <code>v7.6.0-preview.6</code> release (#26626)</li>
+<li>Fix the DSC test by skipping <code>AfterAll</code> cleanup if the initial setup in <code>BeforeAll</code> failed (#26622)</li>
+</ul>
+
+</details>
+
+[7.6.0-rc.1]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.6...v7.6.0-rc.1
+
+## [7.6.0-preview.6] - 2025-12-11
+
+### Engine Updates and Fixes
+
+- Properly Expand Aliases to their actual ResolvedCommand (#26571) (Thanks @kilasuit!)
+
+### General Cmdlet Updates and Fixes
+
+- Update `Microsoft.PowerShell.PSResourceGet` to `v1.2.0-preview5` (#26590)
+- Make the experimental feature `PSFeedbackProvider` stable (#26502)
+- Fix a regression in the API `CompletionCompleters.CompleteFilename()` that causes null reference exception (#26487)
+- Add Delimiter parameter to `Get-Clipboard` (#26572) (Thanks @MartinGC94!)
+- Close pipe client handles after creating the child ssh process (#26564)
+- Make some experimental features stable (#26490)
+- DSC v3 resource for PowerShell Profile (#26447)
+
+### Tools
+
+- Add merge conflict marker detection to linux-ci workflow and refactor existing actions to use reusable get-changed-files action (#26530)
+- Add reusable get-changed-files action and refactor existing actions (#26529)
+- Refactor analyze job to reusable workflow and enable on Windows CI (#26494)
+
+### Tests
+
+- Fix merge conflict checker for empty file lists and filter *.cs files (#26556)
+- Add markdown link verification for PRs (#26445)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Expand to see details.</p>
+
+</summary>
+
+<ul>
+<li>Fix template path for rebuild branch check in package.yml (#26560)</li>
+<li>Update the macos package name for preview releases to match the previous pattern (#26576)</li>
+<li>Add rebuild branch support with conditional MSIX signing (#26573)</li>
+<li>Update the WCF packages to the latest version that is compatible with v4.10.3 (#26503)</li>
+<li>Improve ADO package build and validation across platforms (#26532)</li>
+<li>Mirror .NET/runtime ICU version range in PowerShell (#26563) (Thanks @kasperk81!)</li>
+<li>Update the macos package name for preview releases to match the previous pattern (#26562)</li>
+<li>Fix condition syntax for StoreBroker package tasks in MSIX pipeline (#26561)</li>
+<li>Move package validation to package pipeline (#26558)</li>
+<li>Optimize/split windows package signing (#26557)</li>
+<li>Remove usage of fpm for DEB package generation (#26504)</li>
+<li>Add log grouping to build.psm1 for collapsible GitHub Actions logs (#26524)</li>
+<li>Replace fpm with native macOS packaging tools (pkgbuild/productbuild) (#26501)</li>
+<li>Replace fpm with native rpmbuild for RPM package generation (#26441)</li>
+<li>Fix GitHub API rate limit errors in test actions (#26492)</li>
+<li>Convert Azure DevOps Linux Packaging pipeline to GitHub Actions workflow (#26493)</li>
+<li>Refactor: Centralize xUnit tests into reusable workflow and remove legacy verification (#26488)</li>
+<li>Fix build to only enable ready-to-run for the Release configuration (#26481)</li>
+<li>Integrate Windows packaging into windows-ci workflow using reusable workflow (#26468)</li>
+<li>Update outdated package references (#26471)</li>
+<li>GitHub Workflow cleanup (#26439)</li>
+<li>Update PSResourceGet package version to preview4 (#26438)</li>
+<li>Update PSReadLine to v2.4.5 (#26446)</li>
+<li>Add network isolation policy parameter to vPack pipeline (#26444)</li>
+<li>Fix a couple more lint errors</li>
+<li>Fix lint errors in preview.md</li>
+<li>Make MSIX publish stage dependent on SetReleaseTagandContainerName stage</li>
+</ul>
+
+</details>
+
+[7.6.0-preview.6]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.5...v7.6.0-preview.6
+
+## [7.6.0-preview.5] - 2025-09-30
+
+### Engine Updates and Fixes
+
+- Allow opt-out of the named-pipe listener using the environment variable `POWERSHELL_DIAGNOSTICS_OPTOUT` (#26086)
+- Ensure that socket timeouts are set only during the token validation (#26066)
+- Fix race condition in `RemoteHyperVSocket` (#26057)
+- Fix `stderr` output of console host to respect `NO_COLOR` (#24391)
+- Update PSRP protocol to deprecate session key exchange between newer client and server (#25774)
+- Fix the `ssh` PATH check in `SSHConnectionInfo` when the default Runspace is not available (#25780) (Thanks @jborean93!)
+- Adding hex format for native command exit codes (#21067) (Thanks @sba923!)
+- Fix infinite loop crash in variable type inference (#25696) (Thanks @MartinGC94!)
+- Add `PSForEach` and `PSWhere` as aliases for the PowerShell intrinsic methods `Where` and `Foreach` (#25511) (Thanks @powercode!)
+
+### General Cmdlet Updates and Fixes
+
+- Remove `IsScreenReaderActive()` check from `ConsoleHost` (#26118)
+- Fix `ConvertFrom-Json` to ignore comments inside array literals (#14553) (#26050) (Thanks @MatejKafka!)
+- Fix `-Debug` to not trigger the `ShouldProcess` prompt (#26081)
+- Add the parameter `Register-ArgumentCompleter -NativeFallback` to support registering a cover-all completer for native commands (#25230)
+- Change the default feedback provider timeout from 300ms to 1000ms (#25910)
+- Update PATH environment variable for package manager executable on Windows (#25847)
+- Fix `Write-Host` to respect `OutputRendering = PlainText` (#21188)
+- Improve the `$using` expression support in `Invoke-Command` (#24025) (Thanks @jborean93!)
+- Use parameter `HelpMessage` for tool tip in parameter completion (#25108) (Thanks @jborean93!)
+- Revert "Never load a module targeting the PSReadLine module's `SessionState`" (#25792)
+- Fix debug tracing error with magic extents (#25726) (Thanks @jborean93!)
+- Add `MethodInvocation` trace for overload tracing (#21320) (Thanks @jborean93!)
+- Improve verbose and debug logging level messaging in web cmdlets (#25510) (Thanks @JustinGrote!)
+- Fix quoting in completion if the path includes a double quote character (#25631) (Thanks @MartinGC94!)
+- Fix the common parameter `-ProgressAction` for advanced functions (#24591) (Thanks @cmkb3!)
+- Use absolute path in `FileSystemProvider.CreateDirectory` (#24615) (Thanks @Tadas!)
+- Make inherited protected internal instance members accessible in PowerShell class scope (#25245) (Thanks @mawosoft!)
+- Treat `-Target` as literal in `New-Item` (#25186) (Thanks @GameMicrowave!)
+- Remove duplicate modules from completion results (#25538) (Thanks @MartinGC94!)
+- Add completion for variables assigned in `ArrayLiteralAst` and `ParenExpressionAst` (#25303) (Thanks @MartinGC94!)
+- Add support for thousands separators in `[bigint]` casting (#25396) (Thanks @AbishekPonmudi!)
+- Add internal methods to check Preferences (#25514) (Thanks @iSazonov!)
+- Improve debug logging of Web cmdlet request and response (#25479) (Thanks @JustinGrote!)
+- Revert "Allow empty prefix string in 'Import-Module -Prefix' to override default prefix in manifest (#20409)" (#25462) (Thanks @MartinGC94!)
+- Fix the `NullReferenceException` when writing progress records to console from multiple threads (#25440) (Thanks @kborowinski!)
+- Update `Get-Service` to ignore common errors when retrieving non-critical properties for a service (#24245) (Thanks @jborean93!)
+- Add single/double quote support for `Join-String` Argument Completer (#25283) (Thanks @ArmaanMcleod!)
+- Fix tab completion for env/function variables (#25346) (Thanks @jborean93!)
+- Fix `Out-GridView` by replacing use of obsolete `BinaryFormatter` with custom implementation (#25497) (Thanks @mawosoft!)
+- Remove the use of Windows PowerShell ETW provider ID from codebase and update the `PSDiagnostics` module to work for PowerShell 7 (#25590)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @mawosoft, @ArmaanMcleod</p>
+
+</summary>
+
+<ul>
+<li>Enable CA2021: Do not call Enumerable.Cast<T> or Enumerable.OfType<T> with incompatible types (#25813) (Thanks @xtqqczze!)</li>
+<li>Remove some unused <code>ConsoleControl</code> structs (#26063) (Thanks @xtqqczze!)</li>
+<li>Remove unused <code>FileStreamBackReader.NativeMethods</code> type (#26062) (Thanks @xtqqczze!)</li>
+<li>Ensure data-serialization files end with one newline (#26039) (Thanks @xtqqczze!)</li>
+<li>Remove unnecessary <code>CS0618</code> suppressions from Variant APIs (#26006) (Thanks @xtqqczze!)</li>
+<li>Ensure <code>.cs</code> files end with exactly one newline (#25968) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA2105</code> rule suppression (#25938) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA1703</code> rule suppression (#25955) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA2240</code> rule suppression (#25957) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA1701</code> rule suppression (#25948) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA2233</code> rule suppression (#25951) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA1026</code> rule suppression (#25934) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA1059</code> rule suppression (#25940) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA2118</code> rule suppression (#25924) (Thanks @xtqqczze!)</li>
+<li>Remove redundant <code>System.Runtime.Versioning</code> attributes (#25926) (Thanks @xtqqczze!)</li>
+<li>Seal internal types in <code>Microsoft.PowerShell.Commands.Utility</code> (#25892) (Thanks @xtqqczze!)</li>
+<li>Seal internal types in <code>Microsoft.PowerShell.Commands.Management</code> (#25849) (Thanks @xtqqczze!)</li>
+<li>Make the interface <code>IDeepCloneable</code> internal to minimize confusion (#25552)</li>
+<li>Remove <code>OnDeserialized</code> and <code>Serializable</code> attributes from <code>Microsoft.Management.UI.Internal</code> project (#25548)</li>
+<li>Refactor Tooltip/ListItemText mapping to use <code>CompletionDisplayInfoMapper</code> delegate (#25395) (Thanks @ArmaanMcleod!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Add Codeql Suppressions (#25943, #26132)
+- Update CODEOWNERS to add Justin as a maintainer (#25386)
+- Do not run labels workflow in the internal repository (#25279)
+
+### Tests
+
+- Mark the 3 consistently failing tests as pending to unblock PRs (#26091)
+- Make some tests less noisy on failure (#26035) (Thanks @xtqqczze!)
+- Suppress false positive `PSScriptAnalyzer` warnings in tests and build scripts (#25864)
+- Fix updatable help test for new content (#25819)
+- Add more tests for `PSForEach` and `PSWhere` methods (#25519)
+- Fix the isolated module test that was disabled previously (#25420)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@alerickson, @senerh, @RichardSlater, @xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Update package references for the master branch (#26124)</li>
+<li>Remove <code>ThreadJob</code> module and update <code>PSReadLine</code> to 2.4.4-beta4 (#26120)</li>
+<li>Automate Store Publishing (#25725)</li>
+<li>Add global config change detection to action (#26082)</li>
+<li>Update outdated package references (#26069)</li>
+<li>Ensure that the workflows are triggered on <code>.globalconfig</code> and other files at the root of the repo (#26034)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to 1.2.0-preview3 (#26056) (Thanks @alerickson!)</li>
+<li>Update metadata for Stable to v7.5.3 and LTS to v7.4.12 (#26054) (Thanks @senerh!)</li>
+<li>Bump github/codeql-action from 3.30.2 to 3.30.3 (#26036)</li>
+<li>Update version for the package <code>Microsoft.PowerShell.Native</code> (#26041)</li>
+<li>Fix the APIScan pipeline (#26016)</li>
+<li>Move PowerShell build to use .NET SDK 10.0.100-rc.1 (#26027)</li>
+<li>fix(apt-package): add libicu76 dependency to support Debian 13 (#25866) (Thanks @RichardSlater!)</li>
+<li>Bump github/codeql-action from 3.30.1 to 3.30.2 (#26029)</li>
+<li>Update Ev2 Shell Extension Image to AzureLinux 3 for PMC Release (#26025)</li>
+<li>Bump github/codeql-action from 3.30.0 to 3.30.1 (#26008)</li>
+<li>Bump actions/github-script from 7 to 8 (#25983)</li>
+<li>Fix variable reference for release environment in pipeline (#26012)</li>
+<li>Add LinuxHost Network configuration to PowerShell Packages pipeline (#26000)</li>
+<li>Make logical template name consistent between pipelines (#25990)</li>
+<li>Update container images to use mcr.microsoft.com for Linux and Azure GǪ (#25981)</li>
+<li>Bump github/codeql-action from 3.29.11 to 3.30.0 (#25966)</li>
+<li>Bump actions/setup-dotnet from 4 to 5 (#25978)</li>
+<li>Add build to vPack Pipeline (#25915)</li>
+<li>Replace <code>DOTNET_SKIP_FIRST_TIME_EXPERIENCE</code> with <code>DOTNET_NOLOGO</code> (#25946) (Thanks @xtqqczze!)</li>
+<li>Bump actions/dependency-review-action from 4.7.2 to 4.7.3 (#25930)</li>
+<li>Bump github/codeql-action from 3.29.10 to 3.29.11 (#25889)</li>
+<li>Remove AsyncSDL from Pipelines Toggle Official/NonOfficial Runs (#25885)</li>
+<li>Specify .NET Search by Build Type (#25837)</li>
+<li>Update PowerShell to use .NET SDK v10-preview.7 (#25876)</li>
+<li>Bump actions/dependency-review-action from 4.7.1 to 4.7.2 (#25882)</li>
+<li>Bump github/codeql-action from 3.29.9 to 3.29.10 (#25881)</li>
+<li>Change the macos runner image to macos 15 large (#25867)</li>
+<li>Bump actions/checkout from 4 to 5 (#25853)</li>
+<li>Bump github/codeql-action from 3.29.7 to 3.29.9 (#25857)</li>
+<li>Update to .NET 10 Preview 6 (#25828)</li>
+<li>Bump agrc/create-reminder-action from 1.1.20 to 1.1.22 (#25808)</li>
+<li>Bump agrc/reminder-action from 1.0.17 to 1.0.18 (#25807)</li>
+<li>Bump github/codeql-action from 3.28.19 to 3.29.5 (#25797)</li>
+<li>Bump super-linter/super-linter from 7.4.0 to 8.0.0 (#25770)</li>
+<li>Update metadata for v7.5.2 and v7.4.11 releases (#25687)</li>
+<li>Correct Capitalization Referencing Templates (#25669)</li>
+<li>Change linux packaging tests to ubuntu latest (#25634)</li>
+<li>Bump github/codeql-action from 3.28.18 to 3.28.19 (#25636)</li>
+<li>Move to .NET 10 preview 4 and update package references (#25602)</li>
+<li>Revert &quot;Add windows signing for pwsh.exe&quot; (#25586)</li>
+<li>Bump ossf/scorecard-action from 2.4.1 to 2.4.2 (#25628)</li>
+<li>Publish <code>.msixbundle</code> package as a VPack (#25612)</li>
+<li>Bump agrc/reminder-action from 1.0.16 to 1.0.17 (#25573)</li>
+<li>Bump agrc/create-reminder-action from 1.1.18 to 1.1.20 (#25572)</li>
+<li>Bump github/codeql-action from 3.28.17 to 3.28.18 (#25580)</li>
+<li>Bump super-linter/super-linter from 7.3.0 to 7.4.0 (#25563)</li>
+<li>Bump actions/dependency-review-action from 4.7.0 to 4.7.1 (#25562)</li>
+<li>Update metadata.json with 7.4.10 (#25554)</li>
+<li>Bump github/codeql-action from 3.28.16 to 3.28.17 (#25508)</li>
+<li>Bump actions/dependency-review-action from 4.6.0 to 4.7.0 (#25529)</li>
+<li>Move MSIXBundle to Packages and Release to GitHub (#25512)</li>
+<li>Update outdated package references (#25506)</li>
+<li>Bump github/codeql-action from 3.28.15 to 3.28.16 (#25429)</li>
+<li>Fix Conditional Parameter to Skip NuGet Publish (#25468)</li>
+<li>Update metadata.json (#25438)</li>
+<li>Fix MSIX artifact upload, vPack template, changelog hashes, git tag command (#25437)</li>
+<li>Use new variables template for vPack (#25434)</li>
+<li>Bump <code>agrc/create-reminder-action</code> from 1.1.17 to 1.1.18 (#25416)</li>
+<li>Add PSScriptAnalyzer (#25423)</li>
+<li>Update outdated package references (#25392)</li>
+<li>Use GitHubReleaseTask instead of custom script (#25398)</li>
+<li>Update APIScan to use new symbols server (#25388)</li>
+<li>Retry ClearlyDefined operations (#25385)</li>
+<li>Update to .NET 10.0.100-preview.3 (#25358)</li>
+<li>Enhance path filters action to set outputs for all changes when not a PR (#25367)</li>
+<li>Combine GitHub and Nuget Release Stage (#25318)</li>
+<li>Add Windows Store Signing to MSIX bundle (#25296)</li>
+<li>Bump skitionek/notify-microsoft-teams from 190d4d92146df11f854709774a4dae6eaf5e2aa3 to e7a2493ac87dad8aa7a62f079f295e54ff511d88 (#25366)</li>
+<li>Add CodeQL suppressions for PowerShell intended behavior (#25359)</li>
+<li>Migrate MacOS Signing to OneBranch (#25295)</li>
+<li>Bump github/codeql-action from 3.28.13 to 3.28.15 (#25290)</li>
+<li>Update test result processing to use NUnitXml format and enhance logging for better clarity (#25288)</li>
+<li>Fix R2R for fxdependent packaging (#26131)</li>
+<li>Remove <code>UseDotnet</code> task and use the <code>dotnet-install</code> script (#26093)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Fix a typo in the 7.4 changelog (#26038) (Thanks @VbhvGupta!)
+- Add 7.4.12 changelog (#26011)
+- Add v7.5.3 changelog (#25994)
+- Fix typo in changelog for script filename suggestion (#25962)
+- Update changelog for v7.5.2 (#25668)
+- Update changelog for v7.4.11 (#25667)
+- Update build documentation with instruction of dev terminal (#25587)
+- Update links and contribution guide in documentation (#25532) (Thanks @JustinGrote!)
+- Add 7.4.10 changelog (#25520)
+- Add 7.5.1 changelog (#25382)
+
+[7.6.0-preview.5]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.4...v7.6.0-preview.5
+
+## [7.6.0-preview.4]
+
+### Breaking Changes
+
+- Fix `WildcardPattern.Escape` to escape lone backticks correctly (#25211) (Thanks @ArmaanMcleod!)
+- Convert `-ChildPath` parameter to `string[]` for `Join-Path` cmdlet (#24677) (Thanks @ArmaanMcleod!)
+
+PowerShell 7.6-preview.4 includes the following updated modules:
+
+- **Microsoft.PowerShell.ThreadJob** v2.2.0
+- **ThreadJob** v2.1.0
+The **ThreadJob** module was renamed to **Microsoft.PowerShell.ThreadJob**. There is no difference
+in the functionality of the module. To ensure backward compatibility for scripts that use the old
+name, the **ThreadJob** v2.1.0 module is a proxy module that points to the
+**Microsoft.PowerShell.ThreadJob** v2.2.0.
+
+### Engine Updates and Fixes
+
+- Add `PipelineStopToken` to `Cmdlet` which will be signaled when the pipeline is stopping (#24620) (Thanks @jborean93!)
+- Fallback to AppLocker after `WldpCanExecuteFile` (#24912)
+- Move .NET method invocation logging to after the needed type conversion is done for method arguments (#25022)
+- Fix share completion with provider and spaces (#19440) (Thanks @MartinGC94!)
+
+### General Cmdlet Updates and Fixes
+
+- Exclude `-OutVariable` assignments within the same `CommandAst` when inferring variables (#25224) (Thanks @MartinGC94!)
+- Fix infinite loop in variable type inference (#25206) (Thanks @MartinGC94!)
+- Update `Microsoft.PowerShell.PSResourceGet` version in `PSGalleryModules.csproj` (#25135)
+- Add tooltips for hashtable key completions (#17864) (Thanks @MartinGC94!)
+- Fix type inference of parameters in classic functions (#25172) (Thanks @MartinGC94!)
+- Improve assignment type inference (#21143) (Thanks @MartinGC94!)
+- Fix `TypeName.GetReflectionType()` to work when the `TypeName` instance represents a generic type definition within a `GenericTypeName` (#24985)
+- Remove the old fuzzy suggestion and fix the local script filename suggestion (#25177)
+- Improve variable type inference (#19830) (Thanks @MartinGC94!)
+- Fix parameter completion when script requirements fail (#17687) (Thanks @MartinGC94!)
+- Improve the completion for attribute arguments (#25129) (Thanks @MartinGC94!)
+- Fix completion that relies on pseudobinding in script blocks (#25122) (Thanks @MartinGC94!)
+- Don't complete duplicate command names (#21113) (Thanks @MartinGC94!)
+- Make `SystemPolicy` public APIs visible but non-op on Unix platforms so that they can be included in `PowerShellStandard.Library` (#25051)
+- Set standard handles explicitly when starting a process with `-NoNewWindow` (#25061)
+- Fix tooltip for variable expansion and include desc (#25112) (Thanks @jborean93!)
+- Add type inference for functions without OutputType attribute and anonymous functions (#21127) (Thanks @MartinGC94!)
+- Add completion for variables assigned by command redirection (#25104) (Thanks @MartinGC94!)
+- Handle type inference for redirected commands (#21131) (Thanks @MartinGC94!)
+- Allow empty prefix string in `Import-Module -Prefix` to override default prefix in manifest (#20409) (Thanks @MartinGC94!)
+- Update variable/property assignment completion so it can fallback to type inference (#21134) (Thanks @MartinGC94!)
+- Use `Get-Help` approach to find `about_*.help.txt` files with correct locale for completions (#24194) (Thanks @MartinGC94!)
+- Use script filepath when completing relative paths for using statements (#20017) (Thanks @MartinGC94!)
+- Fix completion of variables assigned inside Do loops (#25076) (Thanks @MartinGC94!)
+- Fix completion of provider paths when a path returns itself instead of its children (#24755) (Thanks @MartinGC94!)
+- Enable completion of scoped variables without specifying scope (#20340) (Thanks @MartinGC94!)
+- Fix issue with incomplete results when completing paths with wildcards in non-filesystem providers (#24757) (Thanks @MartinGC94!)
+- Allow DSC parsing through OS architecture translation layers (#24852) (Thanks @bdeb1337!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@ArmaanMcleod, @pressRtowin</p>
+
+</summary>
+
+<ul>
+<li>Refactor and add comments to <code>CompletionRequiresQuotes</code> to clarify implementation (#25223) (Thanks @ArmaanMcleod!)</li>
+<li>Add <code>QuoteCompletionText</code> method to CompletionHelpers class (#25180) (Thanks @ArmaanMcleod!)</li>
+<li>Remove CompletionHelpers <code>escape</code> parameter from <code>CompletionRequiresQuotes</code> (#25178) (Thanks @ArmaanMcleod!)</li>
+<li>Refactor CompletionHelpers <code>HandleDoubleAndSingleQuote</code> to have less nesting logic (#25179) (Thanks @ArmaanMcleod!)</li>
+<li>Make the use of Oxford commas consistent (#25139)(#25140)(Thanks @pressRtowin!)</li>
+<li>Move common completion methods to CompletionHelpers class (#25138) (Thanks @ArmaanMcleod!)</li>
+<li>Return <code>Array.Empty</code> instead of collection <code>[]</code> (#25137) (Thanks @ArmaanMcleod!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Check GH token availability for Get-Changelog (#25133)
+
+### Tests
+
+- Add XUnit test for `HandleDoubleAndSingleQuote` in CompletionHelpers class (#25181) (Thanks @ArmaanMcleod!)
+
+### Build and Packaging Improvements
+
+<details>
+
+<ul>
+<li>Switch to ubuntu-lastest for CI (#25247)</li>
+<li>Update outdated package references (#25026)(#25232)</li>
+<li>Bump <code>Microsoft.PowerShell.ThreadJob</code> and <code>ThreadJob</code> modules (#25232)</li>
+<li>Bump github/codeql-action from 3.27.9 to 3.28.13 (#25218)(#25231)</li>
+<li>Update .NET SDK to <code>10.0.100-preview.2</code> (#25154)(#25225)</li>
+<li>Remove obsolete template from Windows Packaging CI (#25226)</li>
+<li>Bump actions/upload-artifact from 4.5.0 to 4.6.2 (#25220)</li>
+<li>Bump agrc/reminder-action from 1.0.15 to 1.0.16 (#25222)</li>
+<li>Bump actions/checkout from 2 to 4 (#25221)</li>
+<li>Add <code>NoWarn NU1605</code> to System.ServiceModel.* (#25219)</li>
+<li>Bump actions/github-script from 6 to 7 (#25217)</li>
+<li>Bump ossf/scorecard-action from 2.4.0 to 2.4.1 (#25216)</li>
+<li>Bump super-linter/super-linter from 7.2.1 to 7.3.0 (#25215)</li>
+<li>Bump agrc/create-reminder-action from 1.1.16 to 1.1.17 (#25214)</li>
+<li>Remove dependabot updates that don't work (#25213)</li>
+<li>Update GitHub Actions to work in private GitHub repo (#25197)</li>
+<li>Cleanup old release pipelines (#25201)</li>
+<li>Update package pipeline windows image version (#25191)</li>
+<li>Skip additional packages when generating component manifest (#25102)</li>
+<li>Only build Linux for packaging changes (#25103)</li>
+<li>Remove Az module installs and AzureRM uninstalls in pipeline (#25118)</li>
+<li>Add GitHub Actions workflow to verify PR labels (#25145)</li>
+<li>Add back-port workflow using dotnet/arcade (#25106)</li>
+<li>Make Component Manifest Updater use neutral target in addition to RID target (#25094)</li>
+<li>Make sure the vPack pipeline does not produce an empty package (#24988)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Add 7.4.9 changelog (#25169)
+- Create changelog for 7.4.8 (#25089)
+
+[7.6.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.3...v7.6.0-preview.4
+
+## [7.6.0-preview.3]
+
+### Breaking Changes
+
+- Remove trailing space from event source name (#24192) (Thanks @MartinGC94!)
+
+### General Cmdlet Updates and Fixes
+
+- Add completion single/double quote support for `-Noun` parameter for `Get-Command` (#24977) (Thanks @ArmaanMcleod!)
+- Stringify `ErrorRecord` with empty exception message to empty string (#24949) (Thanks @MatejKafka!)
+- Add completion single/double quote support for `-PSEdition` parameter for `Get-Module` (#24971) (Thanks @ArmaanMcleod!)
+- Error when `New-Item -Force` is passed an invalid directory name (#24936) (Thanks @kborowinski!)
+- Allow `Start-Transcript`to use `$Transcript` which is a `PSObject` wrapped string to specify the transcript path (#24963) (Thanks @kborowinski!)
+- Add quote handling in `Verb`, `StrictModeVersion`, `Scope` & `PropertyType` Argument Completers with single helper method (#24839) (Thanks @ArmaanMcleod!)
+- Improve `Start-Process -Wait` polling efficiency (#24711) (Thanks @jborean93!)
+- Convert `InvalidCommandNameCharacters` in `AnalysisCache` to `SearchValues<char>` for more efficient char searching (#24880) (Thanks @ArmaanMcleod!)
+- Convert `s_charactersRequiringQuotes` in Completion Completers to `SearchValues<char>` for more efficient char searching (#24879) (Thanks @ArmaanMcleod!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @fMichaleczek, @ArmaanMcleod</p>
+
+</summary>
+
+<ul>
+<li>Fix <code>RunspacePool</code>, <code>RunspacePoolInternal</code> and <code>RemoteRunspacePoolInternal</code> <code>IDisposable</code> implementation (#24720) (Thanks @xtqqczze!)</li>
+<li>Remove redundant <code>Attribute</code> suffix (#24940) (Thanks @xtqqczze!)</li>
+<li>Fix formatting of the XML comment for <code>SteppablePipeline.Clean()</code> (#24941)</li>
+<li>Use <code>Environment.ProcessId</code> in <code>SpecialVariables.PID</code> (#24926) (Thanks @fMichaleczek!)</li>
+<li>Replace char[] array in <code>CompletionRequiresQuotes</code> with cached SearchValues<char> (#24907) (Thanks @ArmaanMcleod!)</li>
+<li>Update <code>IndexOfAny</code> calls with invalid path/filename to <code>SearchValues&lt;char&gt;</code> for more efficient char searching (#24896) (Thanks @ArmaanMcleod!)</li>
+<li>Seal internal types in <code>PlatformInvokes</code> (#24826) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Update CODEOWNERS (#24989)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze, @KyZy7</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release  - Transitive - false - none (#24995)</li>
+<li>Add setup dotnet action to the build composite action (#24996)</li>
+<li>Give the pipeline runs meaningful names (#24987)</li>
+<li>Fix V-Pack download package name (#24866)</li>
+<li>Set <code>LangVersion</code> compiler option to <code>13.0</code> in Test.Common.props (#24621) (Thanks @xtqqczze!)</li>
+<li>Fix release branch filters (#24933)</li>
+<li>Fix GitHub Action filter overmatching (#24929)</li>
+<li>Add UseDotnet task for installing dotnet (#24905)</li>
+<li>Convert powershell/PowerShell-CI-macos to GitHub Actions (#24914)</li>
+<li>Convert powershell/PowerShell-CI-linux to GitHub Actions (#24913)</li>
+<li>Convert powershell/PowerShell-Windows-CI to GitHub Actions (#24899)</li>
+<li>Fix MSIX stage in release pipeline (#24900)</li>
+<li>Update .NET SDK (#24906)</li>
+<li>Update metadata.json (#24862)</li>
+<li>PMC parse state correctly from update command's response (#24850)</li>
+<li>Add EV2 support for publishing PowerShell packages to PMC (#24841)</li>
+<li>Remove AzDO credscan as it is now in GitHub (#24842)</li>
+<li>Add *.props and sort path filters for windows CI  (#24822)</li>
+<li>Use work load identity service connection to download makeappx tool from storage account (#24817)</li>
+<li>Update path filters for Windows CI (#24809)</li>
+<li>Update outdated package references (#24758)</li>
+<li>Update metadata.json (#24787) (Thanks @KyZy7!)</li>
+<li>Add tool package download in publish nuget stage (#24790)</li>
+<li>Fix Changelog content grab during GitHub Release (#24788)</li>
+<li>Update metadata.json (#24764)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to <code>1.1.0</code> (#24767)</li>
+<li>Add a parameter that skips verify packages step (#24763)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Add 7.4.7 Changelog (#24844)
+- Create changelog for v7.5.0 (#24808)
+- Update Changelog for v7.6.0-preview.2 (#24775)
+
+[7.6.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.2...v7.6.0-preview.3
+
+## [7.6.0-preview.2] - 2025-01-14
+
+### General Cmdlet Updates and Fixes
+
+- Add the `AIShell` module to telemetry collection list (#24747)
+- Add helper in `EnumSingleTypeConverter` to get enum names as array (#17785) (Thanks @fflaten!)
+- Return correct FileName property for `Get-Item` when listing alternate data streams (#18019) (Thanks @kilasuit!)
+- Add `-ExcludeModule` parameter to `Get-Command` (#18955) (Thanks @MartinGC94!)
+- Update Named and Statement block type inference to not consider AssignmentStatements and Increment/decrement operators as part of their output (#21137) (Thanks @MartinGC94!)
+- Update `DnsNameList` for `X509Certificate2` to use `X509SubjectAlternativeNameExtension.EnumerateDnsNames` Method (#24714) (Thanks @ArmaanMcleod!)
+- Add completion of modules by their shortname (#20330) (Thanks @MartinGC94!)
+- Fix `Get-ItemProperty` to report non-terminating error for cast exception (#21115) (Thanks @ArmaanMcleod!)
+- Add `-PropertyType` argument completer for `New-ItemProperty` (#21117) (Thanks @ArmaanMcleod!)
+- Fix a bug in how `Write-Host` handles `XmlNode` object (#24669) (Thanks @brendandburns!)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@xtqqczze</p>
+
+</summary>
+
+<ul>
+<li>Seal <code>ClientRemoteSessionDSHandlerImpl</code> (#21218) (Thanks @xtqqczze!)</li>
+<li>Seal internal type <code>ClientRemoteSessionDSHandlerImpl</code> (#24705) (Thanks @xtqqczze!)</li>
+<li>Seal classes in <code>RemotingProtocol2</code> (#21164) (Thanks @xtqqczze!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Added Justin Chung as PowerShell team memeber on releaseTools.psm1 (#24672)
+
+### Tests
+
+- Skip CIM ETS member test on older Windows platforms (#24681)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>Updated SDK to 9.0.101</p>
+
+</summary>
+
+<ul>
+<li>Update branch for release  - Transitive - false - none (#24754)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to <code>1.1.0</code> (#24767)</li>
+<li>Add a parameter that skips verify packages step (#24763)</li>
+<li>Make the <code>AssemblyVersion</code> not change for servicing releases (#24667)</li>
+<li>Fixed release pipeline errors and switched to KS3 (#24751)</li>
+<li>Update outdated package references (#24580)</li>
+<li>Bump actions/upload-artifact from 4.4.3 to 4.5.0 (#24689)</li>
+<li>Update .NET feed with new domain as <code>azureedge</code> is retiring (#24703)</li>
+<li>Bump super-linter/super-linter from 7.2.0 to 7.2.1 (#24678)</li>
+<li>Bump github/codeql-action from 3.27.7 to 3.27.9 (#24674)</li>
+<li>Bump actions/dependency-review-action from 4.4.0 to 4.5.0 (#24607)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Update cmdlets WG members (#24275) (Thanks @kilasuit!)
+
+[7.6.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-preview.1...v7.6.0-preview.2
+
+## [7.6.0-preview.1] - 2024-12-16
+
+### Breaking Changes
+
+- Treat large Enum values as numbers in `ConvertTo-Json` (#20999) (Thanks @jborean93!)
+
+### General Cmdlet Updates and Fixes
+
+- Add proper error for running `Get-PSSession -ComputerName` on Unix (#21009) (Thanks @jborean93!)
+- Resolve symbolic link target relative to the symbolic link instead of the working directory (#15235) (#20943) (Thanks @MatejKafka!)
+- Fix up buffer management getting network roots (#24600) (Thanks @jborean93!)
+- Support `PSObject` wrapped values in `ArgumentToEncodingTransformationAttribute` (#24555) (Thanks @jborean93!)
+- Update PSReadLine to 2.3.6 (#24380)
+- Add telemetry to track the use of features (#24247)
+- Handle global tool specially when prepending `PSHome` to `PATH` (#24228)
+- Fix how processor architecture is validated in `Import-Module` (#24265)
+- Make features `PSCommandNotFoundSuggestion`, `PSCommandWithArgs`, and `PSModuleAutoLoadSkipOfflineFiles` stable (#24246)
+- Write type data to the pipeline instead of collecting it (#24236) (Thanks @MartinGC94!)
+- Add support to `Get-Error` to handle BoundParameters (#20640)
+- Fix `Get-FormatData` to not cast a type incorrectly (#21157)
+- Delay progress bar in `Copy-Item` and `Remove-Item` cmdlets (#24013) (Thanks @TheSpyGod!)
+- Add `-Force` parameter to `Resolve-Path` and `Convert-Path` cmdlets to support wildcard hidden files (#20981) (Thanks @ArmaanMcleod!)
+- Use host exe to determine `$PSHOME` location when `SMA.dll` location is not found (#24072)
+- Fix `Test-ModuleManifest` so it can use a UNC path (#24115)
+
+### Code Cleanup
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@eltociear, @JayBazuzi</p>
+
+</summary>
+
+<ul>
+<li>Fix typos in <code>ShowModuleControl.xaml.cs</code> (#24248) (Thanks @eltociear!)</li>
+<li>Fix a typo in the build doc (#24172) (Thanks @JayBazuzi!)</li>
+</ul>
+
+</details>
+
+### Tools
+
+- Fix devcontainer extensions key (#24359) (Thanks @ThomasNieto!)
+- Support new backport branch format (#24378)
+- Update markdownLink.yml to not run on release branches (#24323)
+- Remove old code that downloads msix for win-arm64 (#24175)
+
+### Tests
+
+- Fix cleanup in PSResourceGet test (#24339)
+
+### Build and Packaging Improvements
+
+<details>
+
+<summary>
+
+<p>We thank the following contributors!</p>
+<p>@MartinGC94, @jborean93, @xtqqczze, @alerickson, @iSazonov, @rzippo</p>
+
+</summary>
+
+<ul>
+<li>Deploy Box update (#24632)</li>
+<li>Remove Regex use (#24235) (Thanks @MartinGC94!)</li>
+<li>Improve cim ETS member inference completion (#24235) (Thanks @MartinGC94!)</li>
+<li>Emit ProgressRecord in CLIXML minishell output (#21373) (Thanks @jborean93!)</li>
+<li>Assign the value returned by the <code>MaybeAdd</code> method</li> (#24652)
+<li>Add support for interface static abstract props (#21061) (Thanks @jborean93!)</li>
+<li>Change call to optional add in the binder expression (#24451) (Thanks @jborean93!)</li>
+<li>Turn off AMSI member invocation on nix release builds (#24451) (Thanks @jborean93!)</li>
+<li>Bump github/codeql-action from 3.27.0 to 3.27.6 (#24639)</li>
+<li>Update src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs (#24239) (Thanks @jborean93!)</li>
+<li>Apply suggestions from code review (#24239) (Thanks @jborean93!)</li>
+<li>Add remote runspace check for PushRunspace (#24239) (Thanks @jborean93!)</li>
+<li>Set LangVersion compiler option to 13.0 (#24619) (Thanks @xtqqczze!)</li>
+<li>Set <code>LangVersion</code> compiler option to <code>13.0</code> (#24617) (Thanks @xtqqczze!)</li>
+<li>Update metadata.json for PowerShell 7.5 RC1 release (#24589)</li>
+<li>Update nuget publish to use Deploy Box (#24596)</li>
+<li>Added Deploy Box Product Pathway to GitHub Release and NuGet Release Pipelines (#24583)</li>
+<li>Update machine pool for copy blob and upload buildinfo stage (#24587)</li>
+<li>Bump .NET 9 and dependencies (#24573)</li>
+<li>Bump actions/dependency-review-action from 4.3.4 to 4.4.0 (#24503)</li>
+<li>Bump actions/checkout from 4.2.1 to 4.2.2 (#24488)</li>
+<li>Bump agrc/reminder-action from 1.0.14 to 1.0.15 (#24384)</li>
+<li>Bump actions/upload-artifact from 4.4.0 to 4.4.3 (#24410)</li>
+<li>Update branch for release (#24534)</li>
+<li>Revert &quot;Update package references (#24414)&quot; (#24532)</li>
+<li>Add a way to use only NuGet feed sources (#24528)</li>
+<li>Update PSResourceGet to v1.1.0-RC2 (#24512) (Thanks @alerickson!)</li>
+<li>Bump .NET to 9.0.100-rc.2.24474.11 (#24509)</li>
+<li>Fix seed max value for Container Linux CI (#24510)</li>
+<li>Update metadata.json for 7.2.24 and 7.4.6 releases (#24484)</li>
+<li>Download package from package build for generating vpack (#24481)</li>
+<li>Keep the roff file when gzipping it. (#24450)</li>
+<li>Delete the msix blob if it's already there (#24353)</li>
+<li>Add PMC mapping for debian 12 (bookworm) (#24413)</li>
+<li>Checkin generated manpage (#24423)</li>
+<li>Add CodeQL scanning to APIScan build (#24303)</li>
+<li>Update package references (#24414)</li>
+<li>Update vpack pipeline (#24281)</li>
+<li>Bring changes from v7.5.0-preview.5 Release Branch to Master (#24369)</li>
+<li>Bump agrc/create-reminder-action from 1.1.15 to 1.1.16 (#24375)</li>
+<li>Add <code>BaseUrl</code> to <code>buildinfo</code> json file (#24376)</li>
+<li>Update metadata.json (#24352)</li>
+<li>Copy to static site instead of making blob public (#24269)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> to <code>1.1.0-preview2</code> (#24300) (Thanks @alerickson!)</li>
+<li>add updated libicu dependency for debian packages (#24301)</li>
+<li>add mapping to azurelinux repo (#24290)</li>
+<li>Remove the MD5 branch in the strong name signing token calculation (#24288)</li>
+<li>Bump .NET 9 to <code>9.0.100-rc.1.24452.12</code> (#24273)</li>
+<li>Ensure the official build files CodeQL issues (#24278)</li>
+<li>Update experimental-feature json files (#24271)</li>
+<li>Make some release tests run in a hosted pools (#24270)</li>
+<li>Do not build the exe for Global tool shim project (#24263)</li>
+<li>Update and add new NuGet package sources for different environments. (#24264)</li>
+<li>Bump skitionek/notify-microsoft-teams (#24261)</li>
+<li>Create new pipeline for compliance  (#24252)</li>
+<li>Capture environment better (#24148)</li>
+<li>Add specific path for issues in tsaconfig (#24244)</li>
+<li>Use Managed Identity for APIScan authentication (#24243)</li>
+<li>Add windows signing for pwsh.exe (#24219)</li>
+<li>Bump super-linter/super-linter from 7.0.0 to 7.1.0 (#24223)</li>
+<li>Update the URLs used in nuget.config files (#24203)</li>
+<li>Check <code>Create and Submit</code> in vPack build by default (#24181)</li>
+<li>Replace <code>PSVersion</code> source generator with incremental one (#23815) (Thanks @iSazonov!)</li>
+<li>Save man files in <code>/usr/share/man</code> instead of <code>/usr/local/share/man</code> (#23855) (Thanks @rzippo!)</li>
+<li>Bump super-linter/super-linter from 6.8.0 to 7.0.0 (#24169)</li>
+</ul>
+
+</details>
+
+### Documentation and Help Content
+
+- Updated Third Party Notices (#24666)
+- Update `HelpInfoUri` for 7.5 (#24610)
+- Update changelog for v7.4.6 release (#24496)
+- Update to the latest NOTICES file (#24259)
+- Update the changelog `preview.md` (#24213)
+- Update changelog readme with 7.4 (#24182) (Thanks @ThomasNieto!)
+- Fix Markdown linting error (#24204)
+- Updated changelog for v7.2.23 (#24196) (Internal 32131)
+- Update changelog and `metadata.json` for v7.4.5 release (#24183)
+- Bring 7.2 changelogs back to master (#24158)
+
+[7.6.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.5.0-rc.1...v7.6.0-preview.1
diff --git a/CHANGELOG/README.md b/CHANGELOG/README.md
index 83efcb0fed5..2b022e75735 100644
--- a/CHANGELOG/README.md
+++ b/CHANGELOG/README.md
@@ -1,8 +1,13 @@
 # Changelogs
 
-* [Current preview changelog](preview.md)
-* [7.1 changelog](7.1.md)
-* [7.0 changelog](7.0.md)
-* [6.2 changelog](6.2.md)
-* [6.1 changelog](6.1.md)
-* [6.0 changelog](6.0.md)
+- [Current preview changelog](preview.md)
+- [7.6 changelog](7.6.md)
+- [7.5 changelog](7.5.md)
+- [7.4 changelog](7.4.md)
+- [7.3 changelog](7.3.md)
+- [7.2 changelog](7.2.md)
+- [7.1 changelog](7.1.md)
+- [7.0 changelog](7.0.md)
+- [6.2 changelog](6.2.md)
+- [6.1 changelog](6.1.md)
+- [6.0 changelog](6.0.md)
diff --git a/CHANGELOG/preview.md b/CHANGELOG/preview.md
index a4ad0c67431..d5b6ee1fc15 100644
--- a/CHANGELOG/preview.md
+++ b/CHANGELOG/preview.md
@@ -1,118 +1,70 @@
-# Current preview release
+# Preview Changelog
 
-## [7.2.0-preview.4] - 2021-03-16
+## [7.7.0-preview.3]
 
-### Breaking Changes
-
-- Fix `Get-Date -UFormat` `%G` and `%g` behavior (#14555) (Thanks @brianary!)
-
-### Engine Updates and Fixes
+### General Cmdlet Updates and Fixes
 
-- Update engine script signature validation to match `Get-AuthenticodeSignature` logic (#14849)
-- Avoid array allocations from `GetDirectories` and `GetFiles` (#14327) (Thanks @xtqqczze!)
+- Change `New-Guid` to generate UUID v7 by default (#27033) (Thanks @SufficientDaikon!)
+- Fix progress bar rendering with double-width unicode characters (#26185) (Thanks @yotsuda!)
 
-### General Cmdlet Updates and Fixes
+### Code Cleanup
 
-- Add `UseOSCIndicator` setting to enable progress indicator in terminal (#14927)
-- Re-enable VT mode on Windows after running command in `ConsoleHost` (#14413)
-- Fix `Move-Item` for `FileSystemProvider` to use copy-delete instead of move for DFS paths (#14913)
-- Fix `PromptForCredential()` to add `targetName` as domain (#14504)
-- Update `Concise` `ErrorView` to not show line information for errors from script module functions (#14912)
-- Remove the 32,767 character limit on the environment block for `Start-Process` (#14111) (Thanks @hbuckle!)
-- Don't write possible secrets to verbose stream for web cmdlets (#14788)
+- Remove the unused `Publish-NugetToMyGet` command from packaging module (#27403)
 
 ### Tools
 
-- Update `dependabot` configuration to V2 format (#14882)
-- Add tooling issue slots in PR template (#14697)
+- Remove `-Daily` from `install-powershell.ps1` since it no longer exists (#25124)
 
 ### Tests
 
-- Move misplaced test file to tests directory (#14908) (Thanks @MarianoAlipi!)
-- Refactor MSI CI (#14753)
+- Update CI workflow to also target servicing-* branches (#27612)
 
 ### Build and Packaging Improvements
 
 <details>
 
 <summary>
-Update .NET to version <code>6.0.100-preview.2.21155.3</code>
+
+<p>Update to .NET SDK 11.0.100-preview.6</p>
+
 </summary>
 
 <ul>
-<li>Update .NET to version <code>6.0.100-preview.2.21155.3</code> (#15007)</li>
-<li>Bump <code>Microsoft.PowerShell.Native</code> to <code>7.2.0-preview.1</code> (#15030)</li>
-<li>Create MSIX Bundle package in release pipeline (#14982)</li>
-<li>Build self-contained minimal size package for Guest Config team (#14976)</li>
-<li>Bump XunitXml.TestLogger from 3.0.62 to 3.0.66 (#14993) (Thanks @dependabot[bot]!)</li>
-<li>Enable building PowerShell for Apple M1 runtime (#14923)</li>
-<li>Fix the variable name in the condition for miscellaneous analysis CI (#14975)</li>
-<li>Fix the variable usage in CI yaml (#14974)</li>
-<li>Disable running markdown link verification in release build CI (#14971)</li>
-<li>Bump Microsoft.CodeAnalysis.CSharp from 3.9.0-3.final to 3.9.0 (#14934) (Thanks @dependabot[bot]!)</li>
-<li>Declare which variable group is used for checking the blob in the release build (#14970)</li>
-<li>Update metadata and script to enable consuming .NET daily builds (#14940)</li>
-<li>Bump NJsonSchema from 10.3.9 to 10.3.10 (#14933) (Thanks @dependabot[bot]!)</li>
-<li>Use template that disables component governance for CI (#14938)</li>
-<li>Add suppress for nuget multi-feed warning (#14893)</li>
-<li>Bump NJsonSchema from 10.3.8 to 10.3.9 (#14926) (Thanks @dependabot[bot]!)</li>
-<li>Add exe wrapper to release (#14881)</li>
-<li>Bump Microsoft.ApplicationInsights from 2.16.0 to 2.17.0 (#14847)</li>
-<li>Bump Microsoft.NET.Test.Sdk from 16.8.3 to 16.9.1 (#14895) (Thanks @dependabot[bot]!)</li>
-<li>Bump NJsonSchema from 10.3.7 to 10.3.8 (#14896) (Thanks @dependabot[bot]!)</li>
-<li>Disable codesign validation where the file type is not supported (#14885)</li>
-<li>Fixing broken Experimental Feature list in <code>powershell.config.json</code> (#14858)</li>
-<li>Bump NJsonSchema from 10.3.6 to 10.3.7 (#14855)</li>
-<li>Add exe wrapper for Microsoft Update scenarios (#14737)</li>
-<li>Install wget on <code>CentOS</code> 7 docker image (#14857)</li>
-<li>Fix install-dotnet download (#14856)</li>
-<li>Fix Bootstrap step in Windows daily test runs (#14820)</li>
-<li>Bump NJsonSchema from 10.3.5 to 10.3.6 (#14818)</li>
-<li>Bump <code>NJsonSchema</code> from <code>10.3.4</code> to <code>10.3.5</code> (#14807)</li>
+<li>Update <code>metadata.json</code> for v7.7.0-preview.2 release (#27537)</li>
+<li>[master] Update branch for release (#27683)</li>
+<li>Avoid calling credential provider for public feed for Wix (#27663)</li>
+<li>Produce min-size package for arm64 architecture (#27646)</li>
+<li>Separate NuGet publish into its own stage after pushing the git tag (#27611)</li>
+<li>PMC: Download deb_arm artifact to ensure package is available for PMC publish flow (#27635)</li>
+<li>[master] Update branch for release (#27582)</li>
+<li>Add PMC mappings for debian12 arm64 and debian13 arm64 (#27491)</li>
+<li>Skip Store Publish when No Channel Selected (#27334)</li>
 </ul>
 
 </details>
 
 ### Documentation and Help Content
 
-- Update `README.md` and `metadata.json` for upcoming releases (#14755)
-- Merge 7.1.3 and 7.0.6 Change log to master (#15009)
-- Update `README` and `metadata.json` for releases (#14997)
-- Update ChangeLog for `v7.1.2` release (#14783)
-- Update ChangeLog for `v7.0.5` release (#14782) (Internal 14479)
-
-[7.2.0-preview.4]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.3...v7.2.0-preview.4
+- Add links to changelogs for versions 7.5 and 7.6 (#27080) (Thanks @behradbhrmi!)
+- Update metadata.json for servicing releases (#27609)
+- Bring Changelogs to Master Branch v7.4.17, v7.5.8, v7.6.3 (#27608)
+- Update PowerShell Universal information. (#27550) (Thanks @adamdriscoll!)
 
-## [7.2.0-preview.3] - 2021-02-11
-
-### Breaking Changes
+[7.7.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.7.0-preview.2...v7.7.0-preview.3
 
-- Fix `Get-Date -UFormat %u` behavior to comply with ISO 8601 (#14549) (Thanks @brianary!)
+## [7.7.0-preview.2]
 
 ### Engine Updates and Fixes
 
-- Together with `PSDesiredStateConfiguration` `v3` module allows `Get-DscResource`, `Invoke-DscResource` and DSC configuration compilation on all platforms, supported by PowerShell (using class-based DSC resources).
-
-### Performance
-
-- Avoid array allocations from `Directory.GetDirectories` and `Directory.GetFiles`. (#14326) (Thanks @xtqqczze!)
-- Avoid `string.ToLowerInvariant()` from `GetEnvironmentVariableAsBool()` to avoid loading libicu at startup (#14323) (Thanks @iSazonov!)
-- Get PowerShell version in `PSVersionInfo` using assembly attribute instead of `FileVersionInfo` (#14332) (Thanks @Fs00!)
+- Update `MaxVisitCount` and `MaxHashtableKeyCount` if `VisitorSafeValueContext` indicates `SkipLimitCheck` is true (#27306)
+- Enable usage in AppContainers (#27266)
 
 ### General Cmdlet Updates and Fixes
 
-- Suppress `Write-Progress` in `ConsoleHost` if output is redirected and fix tests (#14716)
-- Experimental feature `PSAnsiProgress`: Add minimal progress bar using ANSI rendering (#14414)
-- Fix web cmdlets to properly construct URI from body when using `-NoProxy` (#14673)
-- Update the `ICommandPredictor` to provide more feedback and also make feedback easier to be correlated (#14649)
-- Reset color after writing `Verbose`, `Debug`, and `Warning` messages (#14698)
-- Fix using variable for nested `ForEach-Object -Parallel` calls (#14548)
-- When formatting, if collection is modified, don't fail the entire pipeline (#14438)
-- Improve completion of parameters for attributes (#14525) (Thanks @MartinGC94!)
-- Write proper error messages for `Get-Command ' '` (#13564) (Thanks @jakekerr!)
-- Fix typo in the resource string `ProxyURINotSupplied` (#14526) (Thanks @romero126!)
-- Add support to `$PSStyle` for strikethrough and hyperlinks (#14461)
-- Fix `$PSStyle` blink codes (#14447) (Thanks @iSazonov!)
+- Handle empty-string and null-value results returned from custom argument completer more properly (#27398)
+- Add missing resource strings for `Get-WinEvent` (#27397) (Thanks @MartinGC94!)
+- Improve `Get-WinEvent -ListLog` exception handling (#27395) (Thanks @MartinGC94!)
+- Update PowerShell telemetry to respect the diagnostics and feedback setting on Windows (#27328)
 
 ### Code Cleanup
 
@@ -121,273 +73,124 @@ Update .NET to version <code>6.0.100-preview.2.21155.3</code>
 <summary>
 
 <p>We thank the following contributors!</p>
-<p>@xtqqczze, @powercode</p>
+<p>@xtqqczze</p>
 
 </summary>
 
 <ul>
-<li>Fix coding style issues: RCS1215, IDE0090, SA1504, SA1119, RCS1139, IDE0032 (#14356, #14341, #14241, #14204, #14442, #14443) (Thanks @xtqqczze!)</li>
-<li>Enable coding style checks: CA2249, CA1052, IDE0076, IDE0077, SA1205, SA1003, SA1314, SA1216, SA1217, SA1213 (#14395, #14483, #14494, #14495, #14441, #14476, #14470, #14471, #14472) (Thanks @xtqqczze!)</li>
-<li>Enable nullable in PowerShell codebase (#14160, #14172, #14088, #14154, #14166, #14184, #14178) (Thanks @powercode!)</li>
-<li>Use <code>string.Split(char)</code> instead of <code>string.Split(string)</code> (#14465) (Thanks @xtqqczze!)</li>
-<li>Use <code>string.Contains(char)</code> overload (#14368) (Thanks @xtqqczze!)</li>
-<li>Refactor complex <code>if</code> statements (#14398) (Thanks @xtqqczze!)</li>
+<li>Remove eager initialization of <code>_startupScripts</code> to enable lazy thread-safe initialization (#25767) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0049</code> in <code>System.Management.Automation</code> [Part 4] (#27380) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0049</code> in <code>System.Management.Automation</code> [Part 3] (#27379) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0049</code> in <code>System.Management.Automation</code> [Part 2] (#27378) (Thanks @xtqqczze!)</li>
 </ul>
 
 </details>
 
 ### Tools
 
-- Update script to use .NET 6 build resources (#14705)
-- Fix the daily GitHub action (#14711) (Thanks @imba-tjd!)
-- GitHub Actions: fix deprecated `::set-env` (#14629) (Thanks @imba-tjd!)
-- Update markdown test tools (#14325) (Thanks @RDIL!)
-- Upgrade `StyleCopAnalyzers` to `v1.2.0-beta.312` (#14354) (Thanks @xtqqczze!)
-
-### Tests
-
-- Remove packaging from daily Windows build (#14749)
-- Update link to the Manning book (#14750)
-- A separate Windows packaging CI (#14670)
-- Update `ini` component version in test `package.json` (#14454)
-- Disable `libmi` dependent tests for macOS. (#14446)
+- Add an instruction file to ensure the Copyright header is present at the start of script and module files (#27408)
 
 ### Build and Packaging Improvements
 
 <details>
 
-<ul>
-<li>Fix the NuGet feed name and URL for .NET 6</li>
-<li>Fix third party signing for files in sub-folders (#14751)</li>
-<li>Make build script variable an <code>ArrayList</code> to enable <code>Add()</code> method (#14748)</li>
-<li>Remove old .NET SDKs to make <code>dotnet restore</code> work with the latest SDK in CI pipeline (#14746)</li>
-<li>Remove outdated Linux dependencies (#14688)</li>
-<li>Bump .NET SDK version to 6.0.0-preview.1 (#14719)</li>
-<li>Bump <code>NJsonSchema</code> to 10.3.4 (#14714)</li>
-<li>Update daily GitHub action to allow manual trigger (#14718)</li>
-<li>Bump <code>XunitXml.TestLogger</code> to 3.0.62 (#14702)</li>
-<li>Make universal deb package based on the deb package specification (#14681)</li>
-<li>Add manual release automation steps and improve changelog script (#14445)</li>
-<li>Fix release build to upload global tool packages to artifacts (#14620)</li>
-<li>Port changes from the PowerShell v7.0.4 release (#14637)</li>
-<li>Port changes from the PowerShell v7.1.1 release (#14621)</li>
-<li>Updated README and <code>metadata.json</code> (#14401, #14606, #14612)</li>
-<li>Do not push nupkg artifacts to MyGet (#14613)</li>
-<li>Use one feed in each <code>nuget.config</code> in official builds (#14363)</li>
-<li>Fix path signed RPMs are uploaded from in release build (#14424)</li>
-</ul>
-
-</details>
-
-### Documentation and Help Content
-
-- Update distribution support request template to point to .NET 5.0 support document (#14578)
-- Remove security GitHub issue template (#14453)
-- Add intent for using the Discussions feature in repo (#14399)
-- Fix Universal Dashboard to refer to PowerShell Universal (#14437)
-- Update document link because of HTTP 301 redirect (#14431) (Thanks @xtqqczze!)
-
-[7.2.0-preview.3]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.2...v7.2.0-preview.3
-
-## [7.2.0-preview.2] - 2020-12-15
-
-### Breaking Changes
-
-- Improve detection of mutable value types (#12495) (Thanks @vexx32!)
-- Ensure `-PipelineVariable` is set for all output from script cmdlets (#12766) (Thanks @vexx32!)
-
-### Experimental Features
-
-- `PSAnsiRendering`: Enable ANSI formatting via `$PSStyle` and support suppressing ANSI output (#13758)
-
-### Performance
-
-- Optimize `IEnumerable` variant of replace operator (#14221) (Thanks @iSazonov!)
-- Refactor multiply operation for better performance in two `Microsoft.PowerShell.Commands.Utility` methods (#14148) (Thanks @xtqqczze!)
-- Use `Environment.TickCount64` instead of `Datetime.Now` as the random seed for AppLocker test file content (#14283) (Thanks @iSazonov!)
-- Avoid unnecessary array allocations when searching in GAC (#14291) (Thanks @xtqqczze!)
-- Use `OrdinalIgnoreCase` in `CommandLineParser` (#14303) (Thanks @iSazonov!)
-- Use `StringComparison.Ordinal` instead of `StringComparison.CurrentCulture` (#14298) (Thanks @iSazonov!)
-- Avoid creating instances of the generated delegate helper class in `-replace` implementation (#14128)
-
-### General Cmdlet Updates and Fixes
-
-- Write better error message if config file is broken (#13496) (Thanks @iSazonov!)
-- Make AppLocker Enforce mode take precedence over UMCI Audit mode (#14353)
-- Add `-SkipLimitCheck` switch to `Import-PowerShellDataFile` (#13672)
-- Restrict `New-Object` in NoLanguage mode under lock down (#14140) (Thanks @krishnayalavarthi!)
-- The `-Stream` parameter now works with directories (#13941) (Thanks @kyanha!)
-- Avoid an exception if file system does not support reparse points (#13634) (Thanks @iSazonov!)
-- Enable `CA1012`: Abstract types should not have public constructors (#13940) (Thanks @xtqqczze!)
-- Enable `SA1212`: Property accessors should follow order (#14051) (Thanks @xtqqczze!)
-
-### Code Cleanup
-
-<details>
-
 <summary>
 
-<p>We thank the following contributors!</p>
-<p>@xtqqczze, @matthewjdegarmo, @powercode, @Gimly</p>
+<p>Update to .NET SDK 11.0.100-preview.4</p>
 
 </summary>
 
 <ul>
-<li>Enable <code>SA1007</code>: Operator keyword should be followed by space (#14130) (Thanks @xtqqczze!)</li>
-<li>Expand <code>where</code> alias to <code>Where-Object</code> in <code>Reset-PWSHSystemPath.ps1</code> (#14113) (Thanks @matthewjdegarmo!)</li>
-<li>Fix whitespace issues (#14092) (Thanks @xtqqczze!)</li>
-<li>Add <code>StyleCop.Analyzers</code> package (#13963) (Thanks @xtqqczze!)</li>
-<li>Enable <code>IDE0041</code>: <code>UseIsNullCheck</code> (#14041) (Thanks @xtqqczze!)</li>
-<li>Enable <code>IDE0082</code>: <code>ConvertTypeOfToNameOf</code> (#14042) (Thanks @xtqqczze!)</li>
-<li>Remove unnecessary usings part 4 (#14023) (Thanks @xtqqczze!)</li>
-<li>Fix <code>PriorityAttribute</code> name (#14094) (Thanks @xtqqczze!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Interpreter.IBoxableInstruction</code> (#14165) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Provider.IDynamicPropertyProvider</code> (#14167) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Language.IScriptExtent</code> (#14179) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Language.ICustomAstVisitor2</code> (#14192) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.LanguagePrimitives.IConversionData</code> (#14187) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Automation.Remoting.Client.IWSManNativeApiFacade</code> (#14186) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Language.ISupportsAssignment</code> (#14180) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.ICommandRuntime2</code> (#14183) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.IOutputProcessingState</code> (#14175) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.IJobDebugger</code> (#14174) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Interpreter.IInstructionProvider</code> (#14173) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.IHasSessionStateEntryVisibility</code> (#14169) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Tracing.IEtwEventCorrelator</code> (#14168) (Thanks @powercode!)</li>
-<li>Fix syntax error in Windows packaging script (#14377)</li>
-<li>Remove redundant local assignment in <code>AclCommands</code> (#14358) (Thanks @xtqqczze!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Language.IAstPostVisitHandler</code> (#14164) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.IModuleAssemblyInitializer</code> (#14158) (Thanks @powercode!)</li>
-<li>Use <code>Microsoft.PowerShell.MarkdownRender</code> package from <code>nuget.org</code> (#14090)</li>
-<li>Replace <code>GetFiles</code> in <code>TestModuleManifestCommand</code> (#14317) (Thanks @xtqqczze!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Provider.IContentWriter</code> (#14152) (Thanks @powercode!)</li>
-<li>Simplify getting Encoding in <code>TranscriptionOption.FlushContentToDisk</code> (#13910) (Thanks @Gimly!)</li>
-<li>Mark applicable structs as <code>readonly</code> and use <code>in</code>-modifier (#13919) (Thanks @xtqqczze!)</li>
-<li>Enable nullable: <code>System.Management.Automation.IArgumentCompleter</code> (#14182) (Thanks @powercode!)</li>
-<li>Enable <code>CA1822</code>: Mark <code>private</code> members as <code>static</code> (#13897) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 6 (#14338) (Thanks @xtqqczze!)</li>
-<li>Avoid array allocations from <code>GetDirectories</code>/<code>GetFiles</code>. (#14328) (Thanks @xtqqczze!)</li>
-<li>Avoid array allocations from <code>GetDirectories</code>/<code>GetFiles</code>. (#14330) (Thanks @xtqqczze!)</li>
-<li>Fix <code>RCS1188</code>: Remove redundant auto-property initialization part 2 (#14262) (Thanks @xtqqczze!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Host.IHostSupportsInteractiveSession</code> (#14170) (Thanks @powercode!)</li>
-<li>Enable nullable: <code>System.Management.Automation.Provider.IPropertyCmdletProvider</code> (#14176) (Thanks @powercode!)</li>
-<li>Fix <code>IDE0090</code>: Simplify new expression part 5 (#14301) (Thanks @xtqqczze!)</li>
-<li>Enable <code>IDE0075</code>: <code>SimplifyConditionalExpression</code> (#14078) (Thanks @xtqqczze!)</li>
-<li>Remove unnecessary usings part 9 (#14288) (Thanks @xtqqczze!)</li>
-<li>Fix StyleCop and MarkdownLint CI failures (#14297) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1000</code>: Keywords should be spaced correctly (#13973) (Thanks @xtqqczze!)</li>
-<li>Fix <code>RCS1188</code>: Remove redundant auto-property initialization part 1 (#14261) (Thanks @xtqqczze!)</li>
-<li>Mark <code>private</code> members as <code>static</code> part 10 (#14235) (Thanks @xtqqczze!)</li>
-<li>Mark <code>private</code> members as <code>static</code> part 9 (#14234) (Thanks @xtqqczze!)</li>
-<li>Fix <code>SA1642</code> for <code>Microsoft.Management.Infrastructure.CimCmdlets</code> (#14239) (Thanks @xtqqczze!)</li>
-<li>Use <code>AsSpan</code>/<code>AsMemory</code> slice constructor (#14265) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.6 (#14260) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.5 (#14259) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.3 (#14257) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.2 (#14256) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 2 (#14200) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1643</code>: Destructor summary documentation should begin with standard text (#14236) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify new expression part 4.4 (#14258) (Thanks @xtqqczze!)</li>
-<li>Use xml documentation child blocks correctly (#14249) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 4.1 (#14255) (Thanks @xtqqczze!)</li>
-<li>Use consistent spacing in xml documentation tags (#14231) (Thanks @xtqqczze!)</li>
-<li>Enable <code>IDE0074</code>: Use coalesce compound assignment (#13396) (Thanks @xtqqczze!)</li>
-<li>Remove unnecessary finalizers (#14248) (Thanks @xtqqczze!)</li>
-<li>Mark local variable as <code>const</code> (#13217) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0032</code>: <code>UseAutoProperty</code> part 2 (#14244) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0032</code>: <code>UseAutoProperty</code> part 1 (#14243) (Thanks @xtqqczze!)</li>
-<li>Mark <code>private</code> members as <code>static</code> part 8 (#14233) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 6 (#14229) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 5 (#14228) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 4 (#14227) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 3 (#14226) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 2 (#14225) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 1 (#14224) (Thanks @xtqqczze!)</li>
-<li>Use <code>see</code> keyword in documentation (#14220) (Thanks @xtqqczze!)</li>
-<li>Enable <code>CA2211</code>: Non-constant fields should not be visible (#14073) (Thanks @xtqqczze!)</li>
-<li>Enable <code>CA1816</code>: <code>Dispose</code> methods should call <code>SuppressFinalize</code> (#14074) (Thanks @xtqqczze!)</li>
-<li>Remove incorrectly implemented finalizer (#14246) (Thanks @xtqqczze!)</li>
-<li>Fix <code>CA1822</code>: Mark members as <code>static</code> part 7 (#14230) (Thanks @xtqqczze!)</li>
-<li>Fix <code>SA1122</code>: Use <code>string.Empty</code> for empty strings (#14218) (Thanks @xtqqczze!)</li>
-<li>Fix various xml documentation issues (#14223) (Thanks @xtqqczze!)</li>
-<li>Remove unnecessary <code>using</code>s part 8 (#14072) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1006</code>: Preprocessor keywords should not be preceded by space (#14052) (Thanks @xtqqczze!)</li>
-<li>Fix <code>SA1642</code> for <code>Microsoft.PowerShell.Commands.Utility</code> (#14142) (Thanks @xtqqczze!)</li>
-<li>Enable <code>CA2216</code>: Disposable types should declare finalizer (#14089) (Thanks @xtqqczze!)</li>
-<li>Wrap and name <code>LoadBinaryModule</code> arguments (#14193) (Thanks @xtqqczze!)</li>
-<li>Wrap and name <code>GetListOfFilesFromData</code> arguments (#14194) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1002</code>: Semicolons should be spaced correctly (#14197) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 3 (#14201) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1106</code>: Code should not contain empty statements (#13964) (Thanks @xtqqczze!)</li>
-<li>Code performance fixes follow-up (#14207) (Thanks @xtqqczze!)</li>
-<li>Remove uninformative comments (#14199) (Thanks @xtqqczze!)</li>
-<li>Fix <code>IDE0090</code>: Simplify <code>new</code> expression part 1 (#14027) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1517</code>: Code should not contain blank lines at start of file (#14131) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1131</code>: Use readable conditions (#14132) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1507</code>: Code should not contain multiple blank lines in a row (#14136) (Thanks @xtqqczze!)</li>
-<li>Enable <code>SA1516</code> Elements should be separated by blank line (#14137) (Thanks @xtqqczze!)</li>
-<li>Enable <code>IDE0031</code>: Null check can be simplified (#13548) (Thanks @xtqqczze!)</li>
-<li>Enable <code>CA1065</code>: Do not raise exceptions in unexpected locations (#14117) (Thanks @xtqqczze!)</li>
-<li>Enable <code>CA1000</code>: Do not declare <code>static</code> members on generic types (#14097) (Thanks @xtqqczze!)</li>
+<li>Update branch to use the .NET 11 SDK 11.0.100-preview.4 (#27504)</li>
+<li>Update <code>metadata.json</code> for the servicing releases (#27488)</li>
+<li>Update CHANGELOG for v7.4.16, v7.5.7, and v7.6.2 releases (#27494)</li>
+<li>Remove unused step that clones <code>Internal-PowerShellTeam-Tools</code> repo in PMC publish pipeline (#27495)</li>
+<li>Update Microsoft.PowerShell.PSResourceGet version to 1.3.0-preview1 (#27487)</li>
+<li>Verify Apple codesign immediately after ESRP signing (#27486) (Thanks @andyleejordan!)</li>
+<li>Add <code>appLicensing</code> capability to Appx manifest to allow it to run without acquiring a Store license (#27412)</li>
+<li>Bump actions/dependency-review-action from 4.9.0 to 5.0.0 (#27411)</li>
+<li>Bump github/codeql-action from 4.35.3 to 4.35.4 (#27404)</li>
+<li>Specify <code>linux-arm64</code> runtime if package type is <code>deb-arm64</code> in <code>packaging.psm1</code> (#27401)</li>
+<li>Bump github/codeql-action from 4.35.1 to 4.35.3 (#27394)</li>
+<li>Update <code>Microsoft.PowerShell.Native</code> to the latest GA version (#27400)</li>
+<li>Update the <code>MSIXBundle-VPack</code> pipeline to create VPack for both LTS and Stable channel packages (#27384)</li>
+<li>Create PowerShell package for arm debian distribution (#26925)</li>
+<li>Merge release/v7.7.0-preview.1 into master (#27374)</li>
+<li>Update <code>metadata.json</code> for the new servicing and preview releases (#27307)</li>
+<li>Fix changelog grab failure when only one header exists. (#27371)</li>
+<li>Remove mariner2.0 from PMC mapping (#27068)</li>
+<li>Download PMC Packages through <code>TemplateContext</code> (#27326)</li>
+<li>Correct Variable Template Reference in NonOfficial Pipeline Templates (#27275)</li>
+<li>PMC release: Use slash instead of back-slash for Linux container (#27315)</li>
 </ul>
 
 </details>
 
-### Tools
-
-- Fixing formatting in `Reset-PWSHSystemPath.ps1` (#13689) (Thanks @dgoldman-msft!)
-
-### Tests
-
-- Reinstate `Test-Connection` tests (#13324)
-- Update markdown test packages with security fixes (#14145)
-
-### Build and Packaging Improvements
+### Documentation and Help Content
 
-<details>
+- Update `README.md` to call out `PowerShell.Core.Instrumentation` needs to be in sync between `PowerShell` and `PowerShell-Native` repos (#27399)
+- Update changelog for the v7.5.6 release (#27320)
+- Update CHANGELOG for v7.4.15 (#27314)
+- Update Changelog for release v7.6.1 (#27304)
 
-<ul>
-<li>Fix a typo in the <code>Get-ChangeLog</code> function (#14129)</li>
-<li>Update <code>README</code> and <code>metadata.json</code> for <code>7.2.0-preview.1</code> release (#14104)</li>
-<li>Bump <code>NJsonSchema</code> from <code>10.2.2</code> to <code>10.3.1</code> (#14040)</li>
-<li>Move windows package signing to use ESRP (#14060)</li>
-<li>Use one feed in each <code>nuget.config</code> in official builds (#14363)</li>
-<li>Fix path signed RPMs are uploaded from in release build (#14424)</li>
-<li>Add <code>Microsoft.PowerShell.MarkdownRender</code> to the package reference list (#14386)</li>
-<li>Fix issue with unsigned build (#14367)</li>
-<li>Move macOS and nuget to ESRP signing (#14324)</li>
-<li>Fix nuget packaging to scrub <code>NullableAttribute</code> (#14344)</li>
-<li>Bump <code>Microsoft.NET.Test.Sdk</code> from 16.8.0 to 16.8.3 (#14310)</li>
-<li>Bump <code>Markdig.Signed</code> from 0.22.0 to 0.22.1 (#14305)</li>
-<li>Bump <code>Microsoft.ApplicationInsights</code> from 2.15.0 to 2.16.0 (#14031)</li>
-<li>Move Linux to ESRP signing (#14210)</li>
-</ul>
+[7.7.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.7.0-preview.1...v7.7.0-preview.2
 
-</details>
+## [7.7.0-preview.1]
 
-### Documentation and Help Content
-
-- Fix example `nuget.config` (#14349)
-- Fix a broken link in Code Guidelines doc (#14314) (Thanks @iSazonov!)
-
-[7.2.0-preview.2]: https://github.com/PowerShell/PowerShell/compare/v7.2.0-preview.1...v7.2.0-preview.2
+### Breaking Changes
 
-## [7.2.0-preview.1] - 2020-11-17
+- Add `ValidateNotNullOrEmpty` attribute to the `-Property` of `Format-Table/List/Custom` (#26552)
+- Fix to use accurate message for validating a string argument is not null and not an empty string (#26668)
+- Correct handling of explicit `-[Operator]:$false` parameter values in `Where-Object` (#26485) (Thanks @yotsuda!)
 
 ### Engine Updates and Fixes
 
-- Change the default fallback encoding for `GetEncoding` in `Start-Transcript` to be `UTF8` without a BOM (#13732) (Thanks @Gimly!)
+- Update `MaxVisitCount` and `MaxHashtableKeyCount` if `VisitorSafeValueContext` indicates `SkipLimitCheck` is true
+(#27308)
+- Enable usage in AppContainers (#27305)
+- Delay update notification for one week to ensure all packages become available (#27095)
+- Fix up default value for parameters with the `in` modifier (#26785) (Thanks @jborean93!)
+- Fix `WSManInstance` COM interface with `ResourceURI` (#26692) (Thanks @jborean93!)
+- Refactor the module path construction code to make it more robust and easier to maintain (#26565)
+- Fix checks for local user config file paths (#26269)
 
 ### General Cmdlet Updates and Fixes
 
-- Update `pwsh -?` output to match docs (#13748)
-- Fix `NullReferenceException` in `Test-Json` (#12942) (Thanks @iSazonov!)
-- Make `Dispose` in `TranscriptionOption` idempotent (#13839) (Thanks @krishnayalavarthi!)
-- Add additional Microsoft PowerShell modules to the tracked modules list (#12183)
-- Relax further `SSL` verification checks for `WSMan` on non-Windows hosts with verification available (#13786) (Thanks @jborean93!)
-- Add the `OutputTypeAttribute` to `Get-ExperimentalFeature` (#13738) (Thanks @ThomasNieto!)
-- Fix blocking wait when starting file associated with a Windows application (#13750)
-- Emit warning if `ConvertTo-Json` exceeds `-Depth` value (#13692)
+- Add verbose message to `Get-Service` when properties cannot be returned (#27109) (Thanks @reabr!)
+- Fix `Remove-Item` confirmation message to use provider path instead (#27123) (Thanks @scuzqy!)
+- PSStyle: validate background index against `BackgroundColorMap` (#27106) (Thanks @cuiweixie!)
+- Update PowerShell Profile DSC resource manifests to allow null for content (#26929)
+- Add `SubjectAlternativeName` property to the `Signature` object returned from `Get-AuthenticodeSignature` (#26252)
+- Mark `-NoTypeInformation` as obsolete no-op and evaluate `-IncludeTypeInformation` on by value on Csv cmdlets (#26719) (Thanks @yotsuda!)
+- Support `TargetObject` position in `ParserErrors` (#26649) (Thanks @jborean93!)
+- Fix the CLR internal error and null ref exception when running `show-command` with PowerShell API (#26669)
+- Fix `Test-Json` false positive errors when using `oneOf` or `anyOf` in schema (#26618) (Thanks @yotsuda!)
+- Add `ToRegex` method to `WildcardPattern` class (#26515) (Thanks @yotsuda!)
+- Add `-ExcludeProperty` parameter to `Format-*` cmdlets (#26514) (Thanks @yotsuda!)
+- Fix NOTES section formatting in comment-based help (#26512) (Thanks @yotsuda!)
+- Disable AMSI content logging in release (#26235) (Thanks @xtqqczze!)
+- Add tab completion for `$PSBoundParameters.Keys` switch cases and access patterns (#26483) (Thanks @yotsuda!)
+- Fix formatting to properly handle the `Reset` VT sequences that appear in the middle of a string (#26424)
+- Add `-Extension` parameter to `Join-Path` cmdlet (#26482) (Thanks @yotsuda!)
+- Make `Export-Csv` `-Append` and `-NoHeader` mutually exclusive (#26472) (Thanks @yotsuda!)
+- Respect `-Qualifier/-NoQualifier/-Leaf/-IsAbsolute:$false` in `Split-Path` (#26474) (Thanks @yotsuda!)
+- Respect `-UseWindowsPowerShell:$false` in `New-PSSession` (#26469) (Thanks @yotsuda!)
+- Respect `-Repeat/-MtuSize/-Traceroute:$false` in `Test-Connection` (#26479) (Thanks @yotsuda!)
+- Fix `Invoke-RestMethod` to support read-only files in multipart form data (#26454) (Thanks @yotsuda!)
+- Respect `-ListAvailable:$false` in `Get-TimeZone` (#26463) (Thanks @yotsuda!)
+- Respect `-Shuffle:$false` in `Get-SecureRandom` (#26460) (Thanks @yotsuda!)
+- Respect `-Shuffle:$false` in `Get-Random` (#26457) (Thanks @yotsuda!)
+- DSC v3 resource for Powershell Profile (#26157)
+- Make the experimental feature `PSFeedbackProvider` stable (#26343)
+- Make some experimental features stable (#26348)
+- Add `PSApplicationOutputEncoding` variable (#21219) (Thanks @jborean93!)
+- Dynamically evaluate width of `LastWriteTime` for formatting output on Unix (#24624) (Thanks @MathiasMagnus!)
+- Handle null reference exception in CsvCommands.cs: `ConvertPSObjectToCSV` (#26144) (Thanks @mikkas456!)
+- Improve `ValidateLength` error message consistency and refactor validation tests (#25806) (Thanks @jorgeasaurus!)
+- Correct handling of explicit `-Since:$false` parameter value in `Get-Uptime` (#26141) (Thanks @logiclrd!)
+- Add property and event for debug attach (#25788) (Thanks @jborean93!)
+- Fix memory leak in `GetFileShares` (#25896) (Thanks @xtqqczze!)
+- Correct handling of explicit `-Empty:$false` parameter value in `New-Guid` (#26140) (Thanks @logiclrd!)
 
 ### Code Cleanup
 
@@ -396,57 +199,81 @@ Update .NET to version <code>6.0.100-preview.2.21155.3</code>
 <summary>
 
 <p>We thank the following contributors!</p>
-<p>@xtqqczze, @mkswd, @ThomasNieto, @PatLeong, @paul-cheung, @georgettica</p>
+<p>@xtqqczze, @yotsuda, @ThioJoe, @rwp0, @amritanand-py</p>
 
 </summary>
 
 <ul>
-<li>Fix RCS1049: Simplify boolean comparison (#13994) (Thanks @xtqqczze!)</li>
-<li>Enable IDE0062: Make local function static (#14044) (Thanks @xtqqczze!)</li>
-<li>Enable CA2207: Initialize value type static fields inline (#14068) (Thanks @xtqqczze!)</li>
-<li>Enable CA1837: Use <code>ProcessId</code> and <code>CurrentManagedThreadId</code> from <code>System.Environment</code> (#14063) (Thanks @xtqqczze and @PatLeong!)</li>
-<li>Remove unnecessary using directives (#14014, #14017, #14021, #14050, #14065, #14066, #13863, #13860, #13861, #13814) (Thanks @xtqqczze and @ThomasNieto!)</li>
-<li>Remove unnecessary usage of LINQ <code>Count</code> method (#13545) (Thanks @xtqqczze!)</li>
-<li>Fix SA1518: The code must not contain extra blank lines at the end of the file (#13574) (Thanks @xtqqczze!)</li>
-<li>Enable CA1829: Use the <code>Length</code> or <code>Count</code> property instead of <code>Count()</code> (#13925) (Thanks @xtqqczze!)</li>
-<li>Enable CA1827: Do not use <code>Count()</code> or <code>LongCount()</code> when <code>Any()</code> can be used (#13923) (Thanks @xtqqczze!)</li>
-<li>Enable or fix nullable usage in a few files (#13793, #13805, #13808, #14018, #13804) (Thanks @mkswd and @georgettica!)</li>
-<li>Enable IDE0040: Add accessibility modifiers (#13962, #13874) (Thanks @xtqqczze!)</li>
-<li>Make applicable private Guid fields readonly (#14000) (Thanks @xtqqczze!)</li>
-<li>Fix CA1003: Use generic event handler instances (#13937) (Thanks @xtqqczze!)</li>
-<li>Simplify delegate creation (#13578) (Thanks @xtqqczze!)</li>
-<li>Fix RCS1033: Remove redundant boolean literal (#13454) (Thanks @xtqqczze!)</li>
-<li>Fix RCS1221: Use pattern matching instead of combination of <code>as</code> operator and null check (#13333) (Thanks @xtqqczze!)</li>
-<li>Use <code>is not</code> syntax (#13338) (Thanks @xtqqczze!)</li>
-<li>Replace magic number with constant in PDH (#13536) (Thanks @xtqqczze!)</li>
-<li>Fix accessor order (#13538) (Thanks @xtqqczze!)</li>
-<li>Enable IDE0054: Use compound assignment (#13546) (Thanks @xtqqczze!)</li>
-<li>Fix RCS1098: Constant values should be on right side of comparisons (#13833) (Thanks @xtqqczze!)</li>
-<li>Enable CA1068: <code>CancellationToken</code> parameters must come last (#13867) (Thanks @xtqqczze!)</li>
-<li>Enable CA10XX rules with suggestion severity (#13870, #13928, #13924) (Thanks @xtqqczze!)</li>
-<li>Enable IDE0064: Make Struct fields writable (#13945) (Thanks @xtqqczze!)</li>
-<li>Run <code>dotnet-format</code> to improve formatting of source code (#13503) (Thanks @xtqqczze!)</li>
-<li>Enable CA1825: Avoid zero-length array allocations (#13961) (Thanks @xtqqczze!)</li>
-<li>Add IDE analyzer rule IDs to comments (#13960) (Thanks @xtqqczze!)</li>
-<li>Enable CA1830: Prefer strongly-typed <code>Append</code> and <code>Insert</code> method overloads on <code>StringBuilder</code> (#13926) (Thanks @xtqqczze!)</li>
-<li>Enforce code style in build (#13957) (Thanks @xtqqczze!)</li>
-<li>Enable CA1836: Prefer <code>IsEmpty</code> over <code>Count</code> when available (#13877) (Thanks @xtqqczze!)</li>
-<li>Enable CA1834: Consider using <code>StringBuilder.Append(char)</code> when applicable (#13878) (Thanks @xtqqczze!)</li>
-<li>Fix IDE0044: Make field readonly (#13884, #13885, #13888, #13892, #13889, #13886, #13890, #13891, #13887, #13893, #13969, #13967, #13968, #13970, #13971, #13966, #14012) (Thanks @xtqqczze!)</li>
-<li>Enable IDE0048: Add required parentheses (#13896) (Thanks @xtqqczze!)</li>
-<li>Enable IDE1005: Invoke delegate with conditional access (#13911) (Thanks @xtqqczze!)</li>
-<li>Enable IDE0036: Enable the check on the order of modifiers (#13958, #13881) (Thanks @xtqqczze!)</li>
-<li>Use span-based <code>String.Concat</code> instead of <code>String.Substring</code> (#13500) (Thanks @xtqqczze!)</li>
-<li>Enable CA1050: Declare types in namespace (#13872) (Thanks @xtqqczze!)</li>
-<li>Fix minor keyword typo in C# code comment (#13811) (Thanks @paul-cheung!)</li>
+<li>Fix <code>IDisposable</code> implementation in sealed classes (#26215) (Thanks @xtqqczze!)</li>
+<li>Enable CA1852: Seal internal types (#25890) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete <code>CA2006</code> rule suppression (#25939) (Thanks @xtqqczze!)</li>
+<li>Use consistent indentation in the file <code>HelpersCommon.psm1</code> (#26608)</li>
+<li>Centralize <code>ExcludeProperty</code> filter application in <code>ViewGenerator</code> base class (#26574) (Thanks @yotsuda!)</li>
+<li>Refactor <code>IsComputerNameValid</code> character validation (#26274) (Thanks @xtqqczze!)</li>
+<li>Remove obsolete test/docker/networktest directory (#26388)</li>
+<li>Avoid regex for exact word matching in <code>DscClassCache</code> (#26306) (Thanks @xtqqczze!)</li>
+<li>Enable analyzers: Use char overload (#26301) (Thanks @xtqqczze!)</li>
+<li>Enable CA1200: Avoid using cref tags with a prefix (#26298) (Thanks @xtqqczze!)</li>
+<li>Remove unused timeout variable from <code>RemoteHyperVTests</code> class (#26297) (Thanks @xtqqczze!)</li>
+<li>Enable CA2022: Avoid inexact read with <code>Stream.Read</code> (#25814) (Thanks @xtqqczze!)</li>
+<li>Fix a few simple typos in comments and string outputs (#25805) (Thanks @ThioJoe!)</li>
+<li>Remove unused Azure Devops windows CI workflows (#26245)</li>
+<li>Fix CA1837: Use <code>Environment.ProcessId</code> (#26242) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0080: RemoveConfusingSuppressionForIsExpression (#26206) (Thanks @xtqqczze!)</li>
+<li>Remove redundant <code>CharSet</code> from <code>StructLayout</code> attributes. Part 1 (#26216) (Thanks @xtqqczze!)</li>
+<li>Fix IDE0083: UseNotPattern (#26213) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0049</code> for <code>string</code> in <code>System.Management.Automation</code> (#25921) (Thanks @xtqqczze!)</li>
+<li>Fix <code>IDE0049</code> for <code>object</code> in <code>System.Management.Automation</code>. Part 1 (#25923) (Thanks @xtqqczze!)</li>
+<li>Replace stackallocs with collection expressions (#25803) (Thanks @xtqqczze!)</li>
+<li>Capitalize Windows in <code>PSNativeWindowsTildeExpansion</code> experimental feature description (#25266) (Thanks @rwp0!)</li>
+<li>Fix <code>SA1028</code>: Code should not contain trailing whitespace. Part 1. (#26203) (Thanks @xtqqczze!)</li>
+<li>Fix IDE0083: UseNotPattern (#26209) (Thanks @xtqqczze!)</li>
+<li>Fix CA1852: Seal internal types. Part 1 (#26205) (Thanks @xtqqczze!)</li>
+<li>Enable IDE0019: InlineAsTypeCheck (#25920) (Thanks @xtqqczze!)</li>
+<li>Fix mismatched indentation in <code>.config/suppress.json</code> (#26192) (Thanks @xtqqczze!)</li>
+<li>Replace custom method with <code>File.ReadAllText()</code> in ScriptAnalysis.cs (#26060) (Thanks @amritanand-py!)</li>
+<li>Avoid possible multiple enumerations in <code>ImportModuleCommand.IsPs1xmlFileHelper_IsPresentInEntries</code> (#26104) (Thanks @xtqqczze!)</li>
+<li>Enable <code>SA1206</code>: Declaration keywords should follow order (#24973) (Thanks @xtqqczze!)</li>
+<li>Disable IDE0049: PreferBuiltInOrFrameworkType (#26094) (Thanks @xtqqczze!)</li>
+<li>Enable CA1853: Unnecessary call to <code>Dictionary.ContainsKey(key)</code> (#26106) (Thanks @xtqqczze!)</li>
+<li>Enable CA1860: Avoid using <code>Enumerable.Any()</code> extension method (#26109) (Thanks @xtqqczze!)</li>
+<li>Enable CA1858: Use <code>StartsWith</code> instead of <code>IndexOf</code> (#26107) (Thanks @xtqqczze!)</li>
+<li>Add <code>CodeQL</code> suppressions for <code>NativeCommandProcessor</code> (#26729)</li>
 </ul>
 
 </details>
 
 ### Tools
 
-- Enable `CodeQL` Security scanning (#13894)
-- Add global `AnalyzerConfig` with default configuration (#13835) (Thanks @xtqqczze!)
+- Add GitOps policy to auto-label backport candidates when CL-BuildPackaging is added (#26881)
+- Add Pester CI Analysis Skill (#26806)
+- Delete unused winget release script (#26683)
+- Improve error message from `Start-NativeExecution` (#26500) (Thanks @logiclrd!)
+- Add default CODEOWNERS entry for maintainers (#26660)
+- Add Attack Surface Analyzer Script (#26379)
+- Add merge conflict marker detection to linux-ci workflow and refactor existing actions to use reusable get-changed-files action (#26350)
+- Add reusable get-changed-files action and refactor existing actions (#26355)
+- Refactor analyze job to reusable workflow and enable on Windows CI (#26322)
+- Create github copilot setup workflow (#26285)
+- Update dependabot.yml to monitor release/* branches (#26251)
+
+### Tests
+
+- Fix the `PSNativeCommandArgumentPassing` test (#27057)
+- Fix `Import-Module.Tests.ps1` to handle Arm32 platform (#26862)
+- Add comprehensive PowerShell class tests for `ConvertTo-Json` (#26769) (Thanks @yotsuda!)
+- Add comprehensive `PSCustomObject` tests for `ConvertTo-Json` (#26743) (Thanks @yotsuda!)
+- Add GitHub Actions annotations for Pester test failures (#26789)
+- Add comprehensive depth and multilevel composition tests for `ConvertTo-Json` (#26744) (Thanks @yotsuda!)
+- Add comprehensive array and dictionary tests for `ConvertTo-Json` (#26742) (Thanks @yotsuda!)
+- Add comprehensive scalar type tests for `ConvertTo-Json` (#26736) (Thanks @yotsuda!)
+- Fix the fuzzy test (#26402)
+- Add Fuzz Tests (#26384)
+- Fix merge conflict checker for empty file lists and filter *.cs files (#26365)
+- Fix linux_packaging job being skipped when only packaging files change (#26315)
+- Use `[initialsessionstate]` type accelerator (#25912) (Thanks @xtqqczze!)
+- Add markdown link verification for PRs (#26219)
+- Check for `GetWindowPlacement` success (#26122) (Thanks @xtqqczze!)
 
 ### Build and Packaging Improvements
 
@@ -455,36 +282,106 @@ Update .NET to version <code>6.0.100-preview.2.21155.3</code>
 <summary>
 
 <p>We thank the following contributors!</p>
-<p>@mkswd, @xtqqczze</p>
+<p>@powercode, @kasperk81, @xtqqczze</p>
 
 </summary>
 
 <ul>
-<li>Bump <code>Microsoft.NET.Test.Sdk</code> to <code>16.8.0</code> (#14020)</li>
-<li>Bump <code>Microsoft.CodeAnalysis.CSharp</code> to <code>3.8.0</code> (#14075)</li>
-<li>Remove workarounds for .NET 5 RTM builds (#14038)</li>
-<li>Migrate 3rd party signing to ESRP (#14010)</li>
-<li>Fixes to release pipeline for GA release (#14034)</li>
-<li>Don't do a shallow checkout (#13992)</li>
-<li>Add validation and dependencies for Ubuntu 20.04 distribution to packaging script (#13993)</li>
-<li>Add .NET install workaround for RTM (#13991)</li>
-<li>Move to ESRP signing for Windows files (#13988)</li>
-<li>Update <code>PSReadLine</code> version to <code>2.1.0</code> (#13975)</li>
-<li>Bump .NET to version <code>5.0.100-rtm.20526.5</code> (#13920)</li>
-<li>Update script to use .NET RTM feeds (#13927)</li>
-<li>Add checkout step to release build templates (#13840)</li>
-<li>Turn on <code>/features:strict</code> for all projects (#13383) (Thanks @xtqqczze!)</li>
-<li>Bump <code>NJsonSchema</code> to <code>10.2.2</code> (#13722, #13751)</li>
-<li>Add flag to make Linux script publish to production repo (#13714)</li>
-<li>Bump <code>Markdig.Signed</code> to <code>0.22.0</code> (#13741)</li>
-<li>Use new release script for Linux packages (#13705)</li>
+<li>Update branch for release (#27291)</li>
+<li>Remove package verification from the notice pipeline (#27289)</li>
+<li>Remove MSI from publishing pipeline (#27213)</li>
+<li>Externalize <code>findMissingNotices</code> target framework selection with ordered Windows fallback (#27269)</li>
+<li>Fix the package pipeline by adding in PDP-Media directory (#27254)</li>
+<li>Bump actions/checkout from 4 to 6.0.2 (#27206)</li>
+<li>Build, package, and create VPack for the PowerShell-LTS store package within the same <code>msixbundle-vpack</code> pipeline (#150) (#27209)</li>
+<li>Pin ready-to-merge.yml reusable workflow to commit SHA (#27204)</li>
+<li>Change the display name of <code>PowerShell-LTS</code> MSIX package to &quot;PowerShell LTS&quot; (#27203)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions (#27201)</li>
+<li>[StepSecurity] ci: Harden GitHub Actions (#27202)</li>
+<li>Redo windows image fix to use latest image (#27198)</li>
+<li>Separate Store Package Creation, Skip Polling for Store Publish, Clean up PDP-Media (#27024)</li>
+<li>Revert &quot;Fetch latest ICU release version dynamically&quot; (#27127)</li>
+<li>Update package references and move to .NET SDK 11.0-preview.2 (#27117)</li>
+<li>Add comment-based help documentation to <code>build.psm1</code> functions (#27122) (Thanks @powercode!)</li>
+<li>Bump github/codeql-action from 3.30.3 to 4.35.1 (#27120)</li>
+<li>Select New MSIX Package Name (#27096)</li>
+<li>Separate Official and NonOfficial templates for ADO pipelines (#26897)</li>
+<li>Update the <code>PhoneProductId</code> to be the official LTS id used by Store (#27077)</li>
+<li>release-upload-buildinfo: replace version-comparison channel gating with metadata flags (#27074)</li>
+<li>Update build to create two msix's and msixbundles for LTS and Stable (#27056)</li>
+<li>Update <code>metadata.json</code> for the v7.6.0 release (#27054)</li>
+<li>Move <code>_GetDependencies</code> MSBuild target from dynamic generation in <code>build.psm1</code> into <code>Microsoft.PowerShell.SDK.csproj</code> (#27052)</li>
+<li>Fix PMC repo URL for RHEL10  (#27059)</li>
+<li>Create Linux LTS deb/rpm packages for LTS releases (#27049)</li>
+<li>Create LTS pkg and non-LTS pkg for macOS for LTS releases (#27039)</li>
+<li>Fix the container image for vPack, MSIX vPack and Package pipelines (#27015)</li>
+<li>Update <code>Microsoft.PowerShell.PSResourceGet</code> version to 1.2.0 (#27003)</li>
+<li>Fix ConvertFrom-ClearlyDefinedCoordinates to handle API object coordinates (#26893)</li>
+<li>Bump actions/upload-artifact from 4 to 7 (#26914)</li>
+<li>Bump actions/dependency-review-action from 4.7.3 to 4.9.0 (#26938)</li>
+
+<li>Hardcode Official templates (#26928)</li>
+<li>Add PMC packages for debian13 and rhel10 (#26912)</li>
+<li>Split TPN manifest and Component Governance manifest (#26891)</li>
+<li>Add version in description and pass store task on failure (#26885)</li>
+<li>Correct the package name for .deb and .rpm packages (#26877)</li>
+<li>Fix a preview detection test for the packaging script (#26882)</li>
+<li>Exclude .exe packages from publishing to GitHub (#26859)</li>
+<li>Update metadata.json for v7.6.0-rc.1 (#26856)</li>
+<li>Fetch latest ICU release version dynamically (#26827) (Thanks @kasperk81!)</li>
+<li>Update <code>LangVersion</code> to <code>preview</code> (#26214) (Thanks @xtqqczze!)</li>
+<li>Update to .NET 11 SDK and update dependencies (#26783)</li>
+<li>Update outdated package references (#26771)</li>
+<li>Create es-metadata (#26759)</li>
+<li>Add policy to restrict the <code>Approved-LowRisk</code> label (#26728)</li>
+<li>Move PowerShell build to depend on .NET SDK 10.0.102 (#26697)</li>
+<li>Update metadata.json to update the Latest attribute with a better name (#26380)</li>
+<li>Update outdated package references (#26656)</li>
+<li>Bring release changes from the v7.6.0-preview.6 release branch (#26627)</li>
+<li>Update build to use .NET SDK 10.0.100 (#26448)</li>
+<li>Update the macos package name for preview releases to match the previous pattern (#26429)</li>
+<li>Fix condition syntax for StoreBroker package tasks in MSIX pipeline (#26427)</li>
+<li>Fix template path for rebuild branch check in package.yml (#26425)</li>
+<li>Update the WCF packages to the latest version that is compatible with v4.10.3 (#26406)</li>
+<li>Add rebuild branch support with conditional MSIX signing (#26415)</li>
+<li>Optimize/split windows package signing (#26403)</li>
+<li>Improve ADO package build and validation across platforms (#26398)</li>
+<li>Update outdated test package references (#26368)</li>
+<li>Delete this way of collecting feedback (#26364)</li>
+<li>Update the <code>Microsoft.PowerShell.Native</code> package version (#26347)</li>
+<li>Add log grouping to build.psm1 for collapsible GitHub Actions logs (#26326)</li>
+<li>Bump actions/setup-dotnet from 4 to 5 (#26327)</li>
+<li>Update SDK to 10.0.100-rc.2.25502.107 (#26305)</li>
+<li>Replace <code>fpm</code> with <code>dpkg-deb</code> for DEB package generation (#26281)</li>
+<li>Replace fpm with native macOS packaging tools (pkgbuild/productbuild) (#26268)</li>
+<li>Separate Store Automation Service Endpoints, Resolve AppID (#26210)</li>
+<li>Update concurrency groups to prevent merge runs and pull request runs from canceling each other (#26257)</li>
+<li>Update release tags to version 7.5.4 and 7.4.13 (#26258)</li>
+<li>Update outdated package references (#26148)</li>
+<li>Refactor: Centralize xUnit tests into reusable workflow and remove legacy verification (#26243)</li>
+<li>Convert Azure DevOps Linux Packaging pipeline to GitHub Actions workflow (#26225)</li>
+<li>Update vPack name (#26090)</li>
+<li>Update <code>metadata.json</code> for v7.6.0-preview.5 release (#26158)</li>
+<li>Bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#26128)</li>
 </ul>
 
 </details>
 
 ### Documentation and Help Content
 
-- Fix links to LTS versions for Windows (#14070)
-- Fix `crontab` formatting in example doc (#13712) (Thanks @dgoldman-msft!)
-
-[7.2.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.1.0...v7.2.0-preview.1
+- Check in `7.6.md` after v7.6.0 release (#27063)
+- Update changelog for release v7.5.5 (#27014)
+- Add 7.4.14 changelog (#26998)
+- Update `SECURITY.md` to remove email reporting option (#26653)
+- Update changelog for the release v7.6.0-preview.6 (#26597)
+- Explain the parameter `-UseNuGetOrg` in build documentation (#26507) (Thanks @logiclrd!)
+- Update backport prompt (#26392)
+- Add a backport prompt for copilot (#26383)
+- Update `linux.md` documentation to reflect current CI build configuration (#26255)
+- Add GitHub Copilot instruction files for PowerShell CI build system (#26253)
+- Add documentation for publishing Pester test results in GitHub Actions (#26254)
+- Remove Gitter from README (#26200) (Thanks @xtqqczze!)
+- Remove nightly build status section from README.md (#26227) (Thanks @xtqqczze!)
+- Update changelog for v7.5.4 and v7.4.13 (#26202)
+
+[7.7.0-preview.1]: https://github.com/PowerShell/PowerShell/compare/v7.6.0-rc.1...v7.7.0-preview.1
diff --git a/CHANGELOG/v7.7/dependencychanges.json b/CHANGELOG/v7.7/dependencychanges.json
new file mode 100644
index 00000000000..b1360988cd2
--- /dev/null
+++ b/CHANGELOG/v7.7/dependencychanges.json
@@ -0,0 +1,54 @@
+[
+  {
+    "ChangeType": "NonSecurity",
+    "Branch": "master",
+    "PackageId": ".NET SDK",
+    "FromVersion": "11.0.100-preview.2.26159.112",
+    "ToVersion": "11.0.100-preview.3.26207.106",
+    "VulnerabilityId": [],
+    "Severity": [],
+    "VulnerableRanges": [],
+    "AdvisoryUrls": [],
+    "Justification": "Updated .NET SDK. Building with the latest SDK is required.",
+    "TimestampUtc": "2026-04-17T17:16:15.7099916Z"
+  },
+  {
+    "ChangeType": "NonSecurity",
+    "Branch": "master",
+    "PackageId": ".NET SDK",
+    "FromVersion": "11.0.100-preview.3.26207.106",
+    "ToVersion": "11.0.100-preview.4.26230.115",
+    "VulnerabilityId": [],
+    "Severity": [],
+    "VulnerableRanges": [],
+    "AdvisoryUrls": [],
+    "Justification": "Updated .NET SDK. Building with the latest SDK is required.",
+    "TimestampUtc": "2026-05-22T18:15:20.6826051Z"
+  },
+  {
+    "ChangeType": "NonSecurity",
+    "Branch": "master",
+    "PackageId": ".NET SDK",
+    "FromVersion": "11.0.100-preview.4.26230.115",
+    "ToVersion": "11.0.100-preview.5.26302.115",
+    "VulnerabilityId": [],
+    "Severity": [],
+    "VulnerableRanges": [],
+    "AdvisoryUrls": [],
+    "Justification": "Updated .NET SDK. Building with the latest SDK is required.",
+    "TimestampUtc": "2026-06-09T19:43:07.2603946Z"
+  },
+  {
+    "ChangeType": "NonSecurity",
+    "Branch": "master",
+    "PackageId": ".NET SDK",
+    "FromVersion": "11.0.100-preview.5.26302.115",
+    "ToVersion": "11.0.100-preview.6.26359.118",
+    "VulnerabilityId": [],
+    "Severity": [],
+    "VulnerableRanges": [],
+    "AdvisoryUrls": [],
+    "Justification": "Updated .NET SDK. Building with the latest SDK is required.",
+    "TimestampUtc": "2026-07-14T22:06:54.5097290Z"
+  }
+]
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 90768d1293e..686e5e7a090 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,8 +1,10 @@
-# Code of Conduct
+# Microsoft Open Source Code of Conduct
 
-This project has adopted the [Microsoft Open Source Code of Conduct][conduct-code].
-For more information see the [Code of Conduct FAQ][conduct-FAQ] or contact [opencode@microsoft.com][conduct-email] with any additional questions or comments.
+This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
 
-[conduct-code]: https://opensource.microsoft.com/codeofconduct/
-[conduct-FAQ]: https://opensource.microsoft.com/codeofconduct/faq/
-[conduct-email]: mailto:opencode@microsoft.com
+Resources:
+
+- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
+- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
+- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
+- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)
diff --git a/DotnetRuntimeMetadata.json b/DotnetRuntimeMetadata.json
index c1f96b55956..6cdee4d1ed1 100644
--- a/DotnetRuntimeMetadata.json
+++ b/DotnetRuntimeMetadata.json
@@ -1,11 +1,15 @@
 {
   "sdk": {
-    "channel": "release/6.0.1xx-preview2",
-    "packageVersionPattern": "6.0.0-preview.2",
-    "sdkImageVersion": "6.0.100",
-    "nextChannel": "6.0.1xx-preview2/daily"
+    "channel": "9.0.1xx-preview6",
+    "quality": "daily",
+    "qualityFallback": "preview",
+    "packageVersionPattern": "9.0.0-preview.6",
+    "sdkImageVersion": "11.0.100-preview.6.26359.118",
+    "nextChannel": "9.0.0-preview.7",
+    "azureFeed": "",
+    "sdkImageOverride": ""
   },
-  "internalfeed" : {
-    "url": null
+  "internalfeed": {
+    "url": ""
   }
 }
diff --git a/Localize/LocProject.json b/Localize/LocProject.json
new file mode 100644
index 00000000000..453d67c3f5a
--- /dev/null
+++ b/Localize/LocProject.json
@@ -0,0 +1,759 @@
+{
+  "Projects": [
+    {
+      "LanguageSet": "VS_Main_Languages",
+      "LocItems": [
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Authenticode.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\AuthorizationManagerBase.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\AutomationExceptions.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CatalogStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CimInstanceTypeAdapterResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CmdletizationCoreResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CommandBaseStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ConsoleInfoErrorStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CoreClrStubResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Credential.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CredentialAttributeStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\CredUI.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\DebuggerStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\DescriptionsStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\DiscoveryExceptions.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\EnumExpressionEvaluatorStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ErrorCategoryStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ErrorPackage.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\EtwLoggingStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\EventingResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\EventResource.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ExperimentalFeatureStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ExtendedTypeSystem.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\FileSystemProviderStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\FormatAndOut_format_xxx.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\FormatAndOut_MshParameter.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\FormatAndOut_out_xxx.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\FormatAndOutXmlLoadingStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\GetErrorText.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\HelpDisplayStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\HelpErrors.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\HistoryStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\HostInterfaceExceptionsStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\InternalCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\InternalHostStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\InternalHostUserInterfaceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Logging.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Metadata.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\MiniShellErrors.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Modules.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\MshHostRawUserInterfaceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\MshSignature.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\MshSnapInCmdletResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\MshSnapinInfo.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\NativeCP.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ParameterBinderStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ParserStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PathUtilsStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PipelineStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PowerShellStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ProgressRecordStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ProviderBaseSecurity.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\ProxyCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PSCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PSConfigurationStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PSDataBufferStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PSListModifierStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\PSStyleStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\RegistryProviderStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\RemotingErrorIdStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\RunspaceInit.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\RunspacePoolStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\RunspaceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\SecuritySupportStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\Serialization.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\SessionStateProviderBaseStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\SessionStateStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\StringDecoratedStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\SubsystemStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\SuggestionStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\TabCompletionStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\TransactionStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\TypesXmlStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\VerbDescriptionStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\System.Management.Automation\\resources\\WildcardPatternStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\System.Management.Automation\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.Infrastructure.CimCmdlets\\resources\\CimCmdletStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.Infrastructure.CimCmdlets\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.GraphicalHostResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.HelpWindowResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.InvariantResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.ShowCommandResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.UICultureResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.Management.UI.Internal\\resources\\public.XamlLocalizableResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.Management.UI.Internal\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Diagnostics\\resources\\GetEventResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Diagnostics\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ClearRecycleBinResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ClipboardResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\CmdletizationResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ComputerInfoResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ComputerResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\HotFixResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\NavigationResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ProcessCommandHelpResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ProcessResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\ServiceResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\TestConnectionResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\TestPathResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Management\\resources\\TimeZoneResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Management\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\AddMember.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\AddTypeStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\AliasCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\ConvertFromStringData.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\ConvertHTMLStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\ConvertMarkdownStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\CsvCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\Debugger.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\EventingStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\FormatAndOut_out_gridview.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\GetFormatDataStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\GetMember.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\GetRandomCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\GetUptimeStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\HostStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\HttpCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\ImplicitRemotingStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\ImportLocalizedDataStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\MatchStringStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\MeasureObjectStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\NewObjectStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\OutPrinterDisplayStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\SelectObjectStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\SendMailMessageStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\SortObjectStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\StartSleepStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\TestJsonCmdletStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\TraceCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\UnblockFileStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\UpdateDataStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\UpdateListStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\UtilityCommonStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\VariableCommandStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\WebCmdletStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\WriteErrorStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\WriteProgressResourceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Commands.Utility\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\CommandLineParameterParserStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ConsoleControlStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ConsoleHostRawUserInterfaceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ConsoleHostStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ConsoleHostUserInterfaceSecurityResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ConsoleHostUserInterfaceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ManagedEntranceStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\ProgressNodeStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\TranscriptStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.ConsoleHost\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.CoreCLR.Eventing\\resources\\DotNetEventingStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.CoreCLR.Eventing\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\CertificateCommands.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\CertificateProviderStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\CmsCommands.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\ExecutionPolicyCommands.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\SecureStringCommands.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\SignatureCommands.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.PowerShell.Security\\resources\\UtilsStrings.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.PowerShell.Security\\resources\\"
+        },
+        {
+          "SourceFile": "src\\Microsoft.WSMan.Management\\resources\\WsManResources.resx",
+          "CopyOption": "LangIDOnPathAndName",
+          "OutputPath": "src\\Microsoft.WSMan.Management\\resources\\"
+        }
+      ]
+    }
+  ]
+}
diff --git a/PowerShell.Common.props b/PowerShell.Common.props
index 38cd13e007d..82c0cd9cdfe 100644
--- a/PowerShell.Common.props
+++ b/PowerShell.Common.props
@@ -49,13 +49,20 @@
       <ReleaseTagSemVersionPrereleaseNamePart>$([System.Text.RegularExpressions.Regex]::Match($(ReleaseTag), $(RegexReleaseTag)).Groups[6].Value)</ReleaseTagSemVersionPrereleaseNamePart>
       <!-- Increment revision 100 for rc releases -->
       <RCIncrementValue>100</RCIncrementValue>
+      <!-- Increment revision 500 for GA releases -->
+      <GAIncrementValue>500</GAIncrementValue>
       <ReleaseTagSemVersionPart Condition = "'$(ReleaseTagSemVersionPrereleaseNamePart)' == 'rc'">$([MSBuild]::Add($(ReleaseTagSemVersionPart), $(RCIncrementValue)))</ReleaseTagSemVersionPart>
       <!-- Create the internal version -->
       <PSCoreBuildVersion>$(ReleaseTag)</PSCoreBuildVersion>
       <!-- Create the version if we have a pre-release -->
       <PSCoreFileVersion Condition = "'$(ReleaseTagSemVersionPart)' != ''">$(ReleaseTagVersionPart).$(ReleaseTagSemVersionPart)</PSCoreFileVersion>
       <!-- Create the version if we have a release build -->
-      <PSCoreFileVersion Condition = "'$(PSCoreFileVersion)' == ''">$(ReleaseTagVersionPart)</PSCoreFileVersion>
+      <PSCoreFileVersion Condition = "'$(PSCoreFileVersion)' == ''">$(ReleaseTagVersionPart).$(GAIncrementValue)</PSCoreFileVersion>
+      <!-- Set 'FileVersion' and 'AssemblyVersion' explicitly:
+           - make 'FileVersion' the same as 'PSCoreFileVersion'
+           - make 'AssemblyVersion' be the 'PSCoreFileVersion' with the 'Build' field set to 0, so the assembly version doesn't change for servicing releases -->
+      <FileVersion>$(PSCoreFileVersion)</FileVersion>
+      <AssemblyVersion>$([System.Version]::Parse($(PSCoreFileVersion)).Major).$([System.Version]::Parse($(PSCoreFileVersion)).Minor).0.$([System.Version]::Parse($(PSCoreFileVersion)).Revision)</AssemblyVersion>
     </PropertyGroup>
 
     <PropertyGroup>
@@ -82,7 +89,7 @@
       -->
 
       <!--
-            Here we define explicitly 'Version' to set 'FileVersion' and 'AssemblyVersion' by 'GetAssemblyVersion' target in 'Microsoft.NET.GenerateAssemblyInfo.targets'.
+            Here we define explicitly 'Version' to set 'FileVersion' and 'AssemblyVersion' when they are not explicitly set.
             Here we define explicitly 'InformationalVersion' because by default it is defined as 'Version' by 'GetAssemblyVersion' target in 'Microsoft.NET.GenerateAssemblyInfo.targets'.
       -->
       <Version>$(PSCoreFileVersion)</Version>
@@ -102,6 +109,9 @@
 
     </PropertyGroup>
 
+    <!-- Remove existing generated files by source generators because new source code will soon be generated when the build starts -->
+    <RemoveDir Directories="gen\SourceGenerated" Condition="Exists('gen\SourceGenerated')" />
+
     <!-- Output For Debugging
       <WriteLinesToFile File="targetfile1.txt"
         Lines="ReleaseTag=$(ReleaseTag);
@@ -132,16 +142,18 @@
     <Product>PowerShell</Product>
     <Company>Microsoft Corporation</Company>
     <Copyright>(c) Microsoft Corporation.</Copyright>
+    <AssemblyTitle>PowerShell 7</AssemblyTitle>
 
-    <TargetFramework>net6.0</TargetFramework>
-    <LangVersion>9.0</LangVersion>
-    <PublishReadyToRun Condition=" '$(Configuration)' != 'Debug' ">true</PublishReadyToRun>
+    <TargetFramework>net11.0</TargetFramework>
+    <LangVersion>preview</LangVersion>
 
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
     <NeutralLanguage>en-US</NeutralLanguage>
+    <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
+    <DisableImplicitNamespaceImports_DotNet>true</DisableImplicitNamespaceImports_DotNet>
 
     <DelaySign>true</DelaySign>
     <AssemblyOriginatorKeyFile>../signing/visualstudiopublic.snk</AssemblyOriginatorKeyFile>
@@ -151,7 +163,7 @@
 
   <PropertyGroup>
     <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-    <IsWindows Condition="'$(IsWindows)' =='true' or ( '$(IsWindows)' == '' and '$(OS)' == 'Windows_NT')">true</IsWindows>
+    <IsWindows Condition="'$(IsWindows)' == 'true' or ('$(IsWindows)' == '' and '$(OS)' == 'Windows_NT')">true</IsWindows>
   </PropertyGroup>
 
   <!-- Define non-windows, all configuration properties -->
@@ -164,33 +176,54 @@
     <DebugType>portable</DebugType>
   </PropertyGroup>
 
+  <!-- Define properties for Framework dependent deployments in Packages
+        https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#apphostdotnetsearch
+        For FxDependent, we want to search for the apphost in the Environment or global location,
+        as this was not causing any issues.
+        For FxDependentDeployment, we want to search ONLY in global location.
+        For SelfContained, we want to search in the app local location.
+  -->
+  <PropertyGroup Condition=" '$(AppDeployment)' == 'FxDependent' ">
+    <!-- Specify both to keep existing behavior because we have not had complaints about this scenario -->
+    <AppHostDotNetSearch>EnvironmentVariable;Global</AppHostDotNetSearch>
+    <PublishReadyToRun>false</PublishReadyToRun>
+    <PublishReadyToRunEmitSymbols>false</PublishReadyToRunEmitSymbols>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(AppDeployment)' == 'FxDependentDeployment' ">
+    <!-- If we specify Environment too, it searches that first, no matter what order we specify-->
+    <AppHostDotNetSearch>Global</AppHostDotNetSearch>
+  </PropertyGroup>
+
+  <!-- Enable ready-to-run only for Release configuration -->
+  <PropertyGroup Condition=" '$(AppDeployment)' == 'FxDependentDeployment' And '$(Configuration)' == 'Release' ">
+    <PublishReadyToRun>true</PublishReadyToRun>
+    <PublishReadyToRunEmitSymbols>true</PublishReadyToRunEmitSymbols>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(AppDeployment)' == 'SelfContained' ">
+    <AppHostDotNetSearch>AppLocal</AppHostDotNetSearch>
+  </PropertyGroup>
+
+  <!-- Enable ready-to-run only for Release configuration except for the min-size build -->
+  <PropertyGroup Condition=" '$(AppDeployment)' == 'SelfContained' And '$(Configuration)' == 'Release' And '$(ForMinimalSize)' != 'True' ">
+    <PublishReadyToRun>true</PublishReadyToRun>
+    <PublishReadyToRunEmitSymbols>true</PublishReadyToRunEmitSymbols>
+  </PropertyGroup>
+
   <!-- Define all OS, release configuration properties -->
   <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
     <Optimize>true</Optimize>
+    <DebugType>portable</DebugType>
   </PropertyGroup>
 
-  <!-- Define windows, release configuration properties -->
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release' And '$(IsWindows)' == 'true' ">
+  <!-- Define all OS, release configuration properties -->
+  <PropertyGroup Condition=" '$(Configuration)' == 'StaticAnalysis' ">
     <Optimize>true</Optimize>
     <!-- This is required to be full for compliance tools !-->
     <DebugType>full</DebugType>
   </PropertyGroup>
 
-  <!-- Define non-windows, release configuration properties -->
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release' And '$(IsWindows)' != 'true' ">
-    <!-- Set-Date fails with optimize enabled in NonWindowsSetDate
-         Debugging the issues resolves the problem
-     -->
-    <Optimize>false</Optimize>
-    <DebugType>portable</DebugType>
-  </PropertyGroup>
-
-  <!-- Define all OS, CodeCoverage configuration properties -->
-  <PropertyGroup Condition=" '$(Configuration)' == 'CodeCoverage' ">
-    <!-- This is required to be portable to Coverlet tool !-->
-    <DebugType>portable</DebugType>
-  </PropertyGroup>
-
   <PropertyGroup>
     <Features>strict</Features>
   </PropertyGroup>
diff --git a/PowerShell.sln b/PowerShell.sln
index 224d27ab3fc..4938316281d 100644
--- a/PowerShell.sln
+++ b/PowerShell.sln
@@ -31,6 +31,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "powershell-unix", "src\powe
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "xUnit.tests", "test\xUnit\xUnit.tests.csproj", "{08704934-9764-48CE-86DB-BCF0A1CF7899}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PSVersionInfoGenerator", "src\System.Management.Automation\SourceGenerators\PSVersionInfoGenerator\PSVersionInfoGenerator.csproj", "{B22424E8-0516-4FC3-A9CB-D84D15EF0589}"
+EndProject
 # Configuration mapping comment
 # All global configurations must be mapped to project configurations
 #
diff --git a/README.md b/README.md
index b469018e5d0..a7b31c475f8 100644
--- a/README.md
+++ b/README.md
@@ -1,155 +1,50 @@
 # ![logo][] PowerShell
 
 Welcome to the PowerShell GitHub Community!
-PowerShell Core is a cross-platform (Windows, Linux, and macOS) automation and configuration tool/framework that works well with your existing tools and is optimized
+[PowerShell](https://learn.microsoft.com/powershell/scripting/overview) is a cross-platform (Windows, Linux, and macOS) automation and configuration tool/framework that works well with your existing tools and is optimized
 for dealing with structured data (e.g. JSON, CSV, XML, etc.), REST APIs, and object models.
-It includes a command-line shell, an associated scripting language and a framework for processing cmdlets.
+It includes a command-line shell, an associated scripting language, and a framework for processing cmdlets.
 
-[logo]: https://raw.githubusercontent.com/PowerShell/PowerShell/master/assets/ps_black_64.svg?sanitize=true
+[logo]: assets/ps_black_64.svg?sanitize=true
 
-## Windows PowerShell vs. PowerShell Core
+## Windows PowerShell vs. PowerShell 7+
 
-Although this repository started as a fork of the Windows PowerShell code base, changes made in this repository do not make their way back to Windows PowerShell 5.1 automatically.
-This also means that [issues tracked here][issues] are only for PowerShell Core 6 and higher.
-Windows PowerShell specific issues should be opened on [UserVoice][].
+Although this repository started as a fork of the Windows PowerShell codebase, changes made in this repository are not ported back to Windows PowerShell 5.1.
+This also means that [issues tracked here][issues] are only for PowerShell 7.x and higher.
+Windows PowerShell specific issues should be reported with the [Feedback Hub app][feedback-hub], by choosing "Apps > PowerShell" in the category.
 
 [issues]: https://github.com/PowerShell/PowerShell/issues
-[UserVoice]: https://windowsserver.uservoice.com/forums/301869-powershell
+[feedback-hub]: https://support.microsoft.com/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332
 
 ## New to PowerShell?
 
-If you are new to PowerShell and would like to learn more, we recommend reviewing the [getting started][] documentation.
+If you are new to PowerShell and want to learn more, we recommend reviewing the [getting started][] documentation.
 
-[getting started]: https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell
+[getting started]: https://learn.microsoft.com/powershell/scripting/learn/more-powershell-learning
 
 ## Get PowerShell
 
-You can download and install a PowerShell package for any of the following platforms.
-
-| Supported Platform                         | Download (LTS)          | Downloads (stable)      | Downloads (preview)   | How to Install                |
-| -------------------------------------------| ------------------------| ------------------------| ----------------------| ------------------------------|
-| [Windows (x64)][corefx-win]                | [.msi][lts-windows-64]  | [.msi][rl-windows-64]   | [.msi][pv-windows-64] | [Instructions][in-windows]    |
-| [Windows (x86)][corefx-win]                | [.msi][lts-windows-86]  | [.msi][rl-windows-86]   | [.msi][pv-windows-86] | [Instructions][in-windows]    |
-| [Ubuntu 20.04][corefx-linux]               |                         | [.deb][rl-ubuntu20]     | [.deb][pv-ubuntu20]   | [Instructions][in-ubuntu20]   |
-| [Ubuntu 18.04][corefx-linux]               | [.deb][lts-ubuntu18]    | [.deb][rl-ubuntu18]     | [.deb][pv-ubuntu18]   | [Instructions][in-ubuntu18]   |
-| [Ubuntu 16.04][corefx-linux]               | [.deb][lts-ubuntu16]    | [.deb][rl-ubuntu16]     | [.deb][pv-ubuntu16]   | [Instructions][in-ubuntu16]   |
-| [Debian 9][corefx-linux]                   | [.deb][lts-debian9]     | [.deb][rl-debian9]      | [.deb][pv-debian9]    | [Instructions][in-deb9]       |
-| [Debian 10][corefx-linux]                  | [.deb][lts-debian10]    | [.deb][rl-debian10]     | [.deb][pv-debian10]   | [Instructions][in-deb9]       |
-| [Debian 11][corefx-linux]                  |                         | [.deb][rl-debian11]     | [.deb][pv-debian11]   |                               |
-| [CentOS 7][corefx-linux]                   | [.rpm][lts-centos]      | [.rpm][rl-centos]       | [.rpm][pv-centos]     | [Instructions][in-centos]     |
-| [CentOS 8][corefx-linux]                   | [.rpm][lts-centos8]     | [.rpm][rl-centos8]      | [.rpm][pv-centos8]    |                               |
-| [Red Hat Enterprise Linux 7][corefx-linux] | [.rpm][lts-centos]      | [.rpm][rl-centos]       | [.rpm][pv-centos]     | [Instructions][in-rhel7]      |
-| [openSUSE 42.3][corefx-linux]              | [.rpm][lts-centos]      | [.rpm][rl-centos]       | [.rpm][pv-centos]     | [Instructions][in-opensuse]   |
-| [Fedora 30][corefx-linux]                  | [.rpm][lts-centos]      | [.rpm][rl-centos]       | [.rpm][pv-centos]     | [Instructions][in-fedora]     |
-| [macOS 10.13+][corefx-macos]               | [.pkg][lts-macos]       | [.pkg][rl-macos]        | [.pkg][pv-macos]      | [Instructions][in-macos]      |
-| Docker                                     |                         |                         |                       | [Instructions][in-docker]     |
-
-You can download and install a PowerShell package for any of the following platforms, **which are supported by the community.**
-
-| Platform                 | Downloads (stable)      | Downloads (preview)           | How to Install                |
-| -------------------------| ------------------------| ----------------------------- | ------------------------------|
-| Arch Linux               |                         |                               | [Instructions][in-archlinux]  |
-| Kali Linux               | [.deb][rl-ubuntu16]     | [.deb][pv-ubuntu16]           | [Instructions][in-kali]       |
-| Many Linux distributions | [Snapcraft][rl-snap]    | [Snapcraft][pv-snap]          |                               |
-
-You can also download the PowerShell binary archives for Windows, macOS and Linux.
-
-| Platform       | Downloads (stable)                                  | Downloads (preview)                             | How to Install                                 |
-| ---------------| --------------------------------------------------- | ------------------------------------------------| -----------------------------------------------|
-| Windows        | [32-bit][rl-winx86-zip]/[64-bit][rl-winx64-zip]     | [32-bit][pv-winx86-zip]/[64-bit][pv-winx64-zip] | [Instructions][in-windows-zip]                 |
-| macOS          | [64-bit][rl-macos-tar]                              | [64-bit][pv-macos-tar]                          | [Instructions][in-tar-macos]                   |
-| Linux          | [64-bit][rl-linux-tar]                              | [64-bit][pv-linux-tar]                          | [Instructions][in-tar-linux]                   |
-| Windows (Arm)  | [64-bit][rl-winarm64] (preview)                     | [64-bit][pv-winarm64]                           | [Instructions][in-arm]                         |
-| Raspbian (Arm) | [32-bit][rl-arm32]/[64-bit][rl-arm64]               | [32-bit][pv-arm32]/[64-bit][pv-arm64]           | [Instructions][in-raspbian]                    |
-
-[lts-windows-86]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/PowerShell-7.0.6-win-x86.msi
-[lts-windows-64]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/PowerShell-7.0.6-win-x64.msi
-[lts-ubuntu18]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts_7.0.6-1.ubuntu.18.04_amd64.deb
-[lts-ubuntu16]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts_7.0.6-1.ubuntu.16.04_amd64.deb
-[lts-debian9]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts_7.0.6-1.debian.9_amd64.deb
-[lts-debian10]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts_7.0.6-1.debian.10_amd64.deb
-[lts-centos]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts-7.0.6-1.rhel.7.x86_64.rpm
-[lts-centos8]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts-7.0.6-1.centos.8.x86_64.rpm
-[lts-macos]: https://github.com/PowerShell/PowerShell/releases/download/v7.0.6/powershell-lts-7.0.6-osx-x64.pkg
-
-[rl-windows-64]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/PowerShell-7.1.3-win-x64.msi
-[rl-windows-86]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/PowerShell-7.1.3-win-x86.msi
-[rl-ubuntu20]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.ubuntu.20.04_amd64.deb
-[rl-ubuntu18]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.ubuntu.18.04_amd64.deb
-[rl-ubuntu16]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.ubuntu.16.04_amd64.deb
-[rl-debian9]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.debian.9_amd64.deb
-[rl-debian10]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.debian.10_amd64.deb
-[rl-debian11]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.debian.11_amd64.deb
-[rl-centos]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-1.rhel.7.x86_64.rpm
-[rl-centos8]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-1.centos.8.x86_64.rpm
-[rl-macos]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-osx-x64.pkg
-[rl-winarm64]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/PowerShell-7.1.3-win-arm64.zip
-[rl-winx86-zip]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/PowerShell-7.1.3-win-x86.zip
-[rl-winx64-zip]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/PowerShell-7.1.3-win-x64.zip
-[rl-macos-tar]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-osx-x64.tar.gz
-[rl-linux-tar]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-linux-x64.tar.gz
-[rl-arm32]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-linux-arm32.tar.gz
-[rl-arm64]: https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-linux-arm64.tar.gz
-[rl-snap]: https://snapcraft.io/powershell
-
-[pv-windows-64]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/PowerShell-7.2.0-preview.4-win-x64.msi
-[pv-windows-86]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/PowerShell-7.2.0-preview.4-win-x86.msi
-[pv-ubuntu20]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.ubuntu.20.04_amd64.deb
-[pv-ubuntu18]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.ubuntu.18.04_amd64.deb
-[pv-ubuntu16]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.ubuntu.16.04_amd64.deb
-[pv-debian9]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.debian.9_amd64.deb
-[pv-debian10]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.debian.10_amd64.deb
-[pv-debian11]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview_7.2.0-preview.4-1.debian.11_amd64.deb
-[pv-centos]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview-7.2.0_preview.4-1.rhel.7.x86_64.rpm
-[pv-centos8]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-preview-7.2.0_preview.4-1.centos.8.x86_64.rpm
-[pv-macos]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-7.2.0-preview.4-osx-x64.pkg
-[pv-winarm64]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/PowerShell-7.2.0-preview.4-win-arm64.zip
-[pv-winx86-zip]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/PowerShell-7.2.0-preview.4-win-x86.zip
-[pv-winx64-zip]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/PowerShell-7.2.0-preview.4-win-x64.zip
-[pv-macos-tar]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-7.2.0-preview.4-osx-x64.tar.gz
-[pv-linux-tar]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-7.2.0-preview.4-linux-x64.tar.gz
-[pv-arm32]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-7.2.0-preview.4-linux-arm32.tar.gz
-[pv-arm64]: https://github.com/PowerShell/PowerShell/releases/download/v7.2.0-preview.4/powershell-7.2.0-preview.4-linux-arm64.tar.gz
-[pv-snap]: https://snapcraft.io/powershell-preview
-
-[in-windows]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-windows
-[in-ubuntu16]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#ubuntu-1604
-[in-ubuntu18]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#ubuntu-1804
-[in-ubuntu20]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#ubuntu-2004
-[in-deb9]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#debian-9
-[in-deb10]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#debian-10
-[in-centos]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#centos-7
-[in-rhel7]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#red-hat-enterprise-linux-rhel-7
-[in-opensuse]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#opensuse
-[in-fedora]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#fedora
-[in-archlinux]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#arch-linux
-[in-macos]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos
-[in-docker]: https://github.com/PowerShell/PowerShell-Docker
-[in-kali]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#kali
-[in-windows-zip]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-windows#zip
-[in-tar-linux]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#binary-archives
-[in-tar-macos]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos#binary-archives
-[in-raspbian]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#raspbian
-[in-arm]: https://docs.microsoft.com/powershell/scripting/install/powershell-core-on-arm
-[corefx-win]:https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md#windows
-[corefx-linux]:https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md#linux
-[corefx-macos]:https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md#macos
-
-To install a specific version, visit [releases](https://github.com/PowerShell/PowerShell/releases).
+PowerShell is supported on Windows, macOS, and a variety of Linux platforms. For
+more information, see [Installing PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell).
+
+## Upgrading PowerShell
+
+For best results when upgrading, you should use the same install method you used when you first
+installed PowerShell. The update method is different for each platform and install method.
 
 ## Community Dashboard
 
-[Dashboard](https://aka.ms/psgithubbi) with visualizations for community contributions and project status using PowerShell, Azure, and PowerBI.
+[Dashboard](https://aka.ms/PSPublicDashboard) with visualizations for community contributions and project status using PowerShell, Azure, and PowerBI.
 
 For more information on how and why we built this dashboard, check out this [blog post](https://devblogs.microsoft.com/powershell/powershell-open-source-community-dashboard/).
 
 ## Discussions
 
-[GitHub Discussions](https://docs.github.com/en/free-pro-team@latest/discussions/quickstart) is a feature to enable fluid and open discussions within the community
+[GitHub Discussions](https://docs.github.com/discussions/quickstart) is a feature to enable free and open discussions within the community
 for topics that are not related to code, unlike issues.
 
-This is an experiment we are trying in our repositories to see if it helps move discussions out of issues so that issues remain actionable by the team or members of the community.
-There should be no expectation that PowerShell team members are regular participants in the discussions.
+This is an experiment we are trying in our repositories, to see if it helps move discussions out of issues so that issues remain actionable by the team or members of the community.
+There should be no expectation that PowerShell team members are regular participants in these discussions.
 Individual PowerShell team members may choose to participate in discussions, but the expectation is that community members help drive discussions so that team members
 can focus on issues.
 
@@ -159,73 +54,49 @@ Create or join a [discussion](https://github.com/PowerShell/PowerShell/discussio
 
 Want to chat with other members of the PowerShell community?
 
-We have a Gitter Room which you can join below.
+There are dozens of topic-specific channels on our community-driven PowerShell Virtual User Group, which you can join on:
 
-[![Join the chat](https://img.shields.io/static/v1.svg?label=chat&message=on%20gitter&color=informational&logo=gitter)](https://gitter.im/PowerShell/PowerShell?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+* [Discord](https://discord.gg/PowerShell)
+* [IRC](https://web.libera.chat/#powershell) on Libera.Chat
+* [Slack](https://aka.ms/psslack)
 
-There is also the community-driven PowerShell Virtual User Group, which you can join on:
+## Developing and Contributing
 
-* [Slack](https://aka.ms/psslack)
-* [Discord](https://aka.ms/psdiscord)
+Want to contribute to PowerShell? Please start with the [Contribution Guide][] to learn how to develop and contribute.
 
-## Add-ons and libraries
+If you are developing .NET Core C# applications targeting PowerShell Core, [check out our FAQ][] to learn more about the PowerShell SDK NuGet package.
 
-[Awesome PowerShell](https://github.com/janikvonrotz/awesome-powershell) has a great curated list of add-ons and resources.
+Also, make sure to check out our [PowerShell-RFC repository](https://github.com/powershell/powershell-rfc) for request-for-comments (RFC) documents to submit and give comments on proposed and future designs.
+
+[Contribution Guide]: .github/CONTRIBUTING.md
+[check out our FAQ]: docs/FAQ.md#where-do-i-get-the-powershell-core-sdk-package
 
-## Building the Repository
+## Building PowerShell
 
 | Linux                    | Windows                    | macOS                   |
 |--------------------------|----------------------------|------------------------|
 | [Instructions][bd-linux] | [Instructions][bd-windows] | [Instructions][bd-macOS] |
 
-If you have any problems building, please consult the developer [FAQ][].
-
-### Build status of nightly builds
-
-| Azure CI (Windows)                       | Azure CI (Linux)                               | Azure CI (macOS)                               | Code Coverage Status     | CodeFactor Grade         |
-|:-----------------------------------------|:-----------------------------------------------|:-----------------------------------------------|:-------------------------|:-------------------------|
-| [![windows-nightly-image][]][windows-nightly-site] | [![linux-nightly-image][]][linux-nightly-site] | [![macOS-nightly-image][]][macos-nightly-site] | [![cc-image][]][cc-site] | [![cf-image][]][cf-site] |
-
-[bd-linux]: https://github.com/PowerShell/PowerShell/tree/master/docs/building/linux.md
-[bd-windows]: https://github.com/PowerShell/PowerShell/tree/master/docs/building/windows-core.md
-[bd-macOS]: https://github.com/PowerShell/PowerShell/tree/master/docs/building/macos.md
+If you have any problems building PowerShell, please start by consulting the developer [FAQ].
 
-[FAQ]: https://github.com/PowerShell/PowerShell/tree/master/docs/FAQ.md
-
-[windows-nightly-site]: https://powershell.visualstudio.com/PowerShell/_build?definitionId=32
-[linux-nightly-site]: https://powershell.visualstudio.com/PowerShell/_build?definitionId=23
-[macos-nightly-site]: https://powershell.visualstudio.com/PowerShell/_build?definitionId=24
-[windows-nightly-image]: https://powershell.visualstudio.com/PowerShell/_apis/build/status/PowerShell-CI-Windows-daily
-[linux-nightly-image]: https://powershell.visualstudio.com/PowerShell/_apis/build/status/PowerShell-CI-linux-daily?branchName=master
-[macOS-nightly-image]: https://powershell.visualstudio.com/PowerShell/_apis/build/status/PowerShell-CI-macos-daily?branchName=master
-[cc-site]: https://codecov.io/gh/PowerShell/PowerShell
-[cc-image]: https://codecov.io/gh/PowerShell/PowerShell/branch/master/graph/badge.svg
-[cf-site]: https://www.codefactor.io/repository/github/powershell/powershell
-[cf-image]: https://www.codefactor.io/repository/github/powershell/powershell/badge
+[bd-linux]: docs/building/linux.md
+[bd-windows]: docs/building/windows-core.md
+[bd-macOS]: docs/building/macos.md
+[FAQ]: docs/FAQ.md
 
 ## Downloading the Source Code
 
-You can just clone the repository:
+You can clone the repository:
 
 ```sh
 git clone https://github.com/PowerShell/PowerShell.git
 ```
 
-See [working with the PowerShell repository](https://github.com/PowerShell/PowerShell/tree/master/docs/git) for more information.
-
-## Developing and Contributing
-
-Please see the [Contribution Guide][] for how to develop and contribute.
-If you are developing .NET Core C# applications targeting PowerShell Core, please [check out our FAQ][] to learn more about the PowerShell SDK NuGet package.
-
-Also, make sure to check out our [PowerShell-RFC repository](https://github.com/powershell/powershell-rfc) for request-for-comments (RFC) documents to submit and give comments on proposed and future designs.
-
-[Contribution Guide]: https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md
-[check out our FAQ]: https://github.com/PowerShell/PowerShell/tree/master/docs/FAQ.md#where-do-i-get-the-powershell-core-sdk-package
+For more information, see [working with the PowerShell repository](https://github.com/PowerShell/PowerShell/tree/master/docs/git).
 
 ## Support
 
-For support, please see the [Support Section][].
+For support, see the [Support Section][].
 
 [Support Section]: https://github.com/PowerShell/PowerShell/tree/master/.github/SUPPORT.md
 
@@ -235,31 +106,30 @@ PowerShell is licensed under the [MIT license][].
 
 [MIT license]: https://github.com/PowerShell/PowerShell/tree/master/LICENSE.txt
 
-### Windows Docker Files and Images
+### Docker Containers
 
-License: By requesting and using the Container OS Image for Windows containers, you acknowledge, understand, and consent to the Supplemental License Terms available on Docker Hub:
+> [!Important]
+> The PowerShell container images are now [maintained by the .NET team](https://github.com/PowerShell/Announcements/issues/75). The containers at `mcr.microsoft.com/powershell` are currently not maintained.
 
-- [Windows Server Core](https://hub.docker.com/r/microsoft/windowsservercore/)
-- [Nano Server](https://hub.docker.com/r/microsoft/nanoserver/)
+License: By requesting and using the Container OS Image for Windows containers, you acknowledge, understand, and consent to the Supplemental License Terms available on [Microsoft Artifact Registry][mcr].
+
+[mcr]: https://mcr.microsoft.com/en-us/product/powershell/tags
 
 ### Telemetry
 
-By default, PowerShell collects the OS description and the version of PowerShell (equivalent to `$PSVersionTable.OS` and `$PSVersionTable.GitCommitId`) using [Application Insights](https://azure.microsoft.com/services/application-insights/).
-To opt-out of sending telemetry, create an environment variable called `POWERSHELL_TELEMETRY_OPTOUT` set to a value of `1` before starting PowerShell from the installed location.
-The telemetry we collect falls under the [Microsoft Privacy Statement](https://privacy.microsoft.com/privacystatement/).
+Please visit our [about_Telemetry](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_telemetry)
+topic to read details about telemetry gathered by PowerShell.
 
 ## Governance
 
-The governance policy for the PowerShell project is described [here][].
+The governance policy for the PowerShell project is described the [PowerShell Governance][gov] document.
+
+[gov]: https://github.com/PowerShell/PowerShell/blob/master/docs/community/governance.md
 
-[here]: https://github.com/PowerShell/PowerShell/blob/master/docs/community/governance.md
+## [Code of Conduct](CODE_OF_CONDUCT.md)
 
-## [Code of Conduct][conduct-md]
+Please see our [Code of Conduct](CODE_OF_CONDUCT.md) before participating in this project.
 
-This project has adopted the [Microsoft Open Source Code of Conduct][conduct-code].
-For more information see the [Code of Conduct FAQ][conduct-FAQ] or contact [opencode@microsoft.com][conduct-email] with any additional questions or comments.
+## [Security Policy](.github/SECURITY.md)
 
-[conduct-code]: https://opensource.microsoft.com/codeofconduct/
-[conduct-FAQ]: https://opensource.microsoft.com/codeofconduct/faq/
-[conduct-email]: mailto:opencode@microsoft.com
-[conduct-md]: https://github.com/PowerShell/PowerShell/tree/master/CODE_OF_CONDUCT.md
+For any security issues, please see our [Security Policy](.github/SECURITY.md).
diff --git a/Settings.StyleCop b/Settings.StyleCop
index 7fa179ee02e..e10c02bdd12 100644
--- a/Settings.StyleCop
+++ b/Settings.StyleCop
@@ -162,6 +162,7 @@
           <Value>op</Value>
           <Value>my</Value>
           <Value>sb</Value>
+          <Value>vt</Value>
         </CollectionProperty>
       </AnalyzerSettings>
     </Analyzer>
diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt
index 06747f655ca..4d033a0f682 100644
--- a/ThirdPartyNotices.txt
+++ b/ThirdPartyNotices.txt
@@ -15,251 +15,429 @@ USA
 Notwithstanding any other terms, you may reverse engineer this software to the extent
 required to debug changes to any libraries licensed under the GNU Lesser General Public License.
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+Markdig.Signed 0.45.0 - BSD-2-Clause
+
+
+
+Copyright (c) <year> <owner> . All rights reserved.
 
-Microsoft.CodeAnalysis.Common 3.3.1 - Apache-2.0
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
-Apache License
+   1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 
-Version 2.0, January 2004
+   2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 
-http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-   1. Definitions.
+---------------------------------------------------------
 
-      
+---------------------------------------------------------
 
-      "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+Humanizer.Core 2.14.1 - MIT
 
-      
 
-      "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+Copyright .NET Foundation and Contributors
+Copyright (c) .NET Foundation and Contributors
 
-      
+MIT License
 
-      "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+Copyright (c) <year> <copyright holders>
 
-      
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-      "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-      
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+---------------------------------------------------------
 
-      
+---------------------------------------------------------
 
-      "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+Json.More.Net 2.1.1 - MIT
 
-      
 
-      "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+Copyright (c) .NET Foundation and Contributors
 
-      
+MIT License
 
-      "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+Copyright (c) .NET Foundation and Contributors
 
-      
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-      "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
-      
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
 
-      "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
 
-   2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+---------------------------------------------------------
 
-   3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+---------------------------------------------------------
 
-   4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+JsonPointer.Net 5.3.1 - MIT
 
-      (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
 
-      (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+Copyright (c) .NET Foundation and Contributors
 
-      (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+MIT License
 
-      (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+Copyright (c) .NET Foundation and Contributors
 
-      You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-   5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
-   6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
 
-   7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
 
-   8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+---------------------------------------------------------
 
-   9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+---------------------------------------------------------
 
-APPENDIX: How to apply the Apache License to your work.
+JsonSchema.Net 7.4.0 - MIT
 
-To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
 
-Copyright [yyyy] [name of copyright owner]
+Copyright (c) .NET Foundation and Contributors
 
-Licensed under the Apache License, Version 2.0 (the "License");
+MIT License
 
-you may not use this file except in compliance with the License.
+Copyright (c) .NET Foundation and Contributors
 
-You may obtain a copy of the License at
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-http://www.apache.org/licenses/LICENSE-2.0
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
-Unless required by applicable law or agreed to in writing, software
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
 
-distributed under the License is distributed on an "AS IS" BASIS,
 
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+---------------------------------------------------------
 
-See the License for the specific language governing permissions and
+---------------------------------------------------------
 
-limitations under the License.
+Microsoft.ApplicationInsights 2.23.0 - MIT
 
--------------------------------------------------------------------
 
--------------------------------------------------------------------
+(c) Microsoft Corporation
 
-Microsoft.CodeAnalysis.CSharp 3.3.1 - Apache-2.0
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
-Copyright (c) Microsoft Corporation.
-9Copyright (c) Microsoft Corporation.
-ACopyright (c) Microsoft Corporation.
-BCopyright (c) Microsoft Corporation.
-CCopyright (c) Microsoft Corporation.
-DCopyright (c) Microsoft Corporation.
-OCopyright (c) Microsoft Corporation.
-Copyright (c) Microsoft Corporation. Alle Rechte
+MIT License
 
-Apache License
+Copyright (c) <year> <copyright holders>
 
-Version 2.0, January 2004
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-   1. Definitions.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      
+---------------------------------------------------------
 
-      "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+---------------------------------------------------------
 
-      
+Microsoft.Bcl.AsyncInterfaces 10.0.3 - MIT
 
-      "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
 
-      
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-      "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+MIT License
 
-      
+Copyright (c) <year> <copyright holders>
 
-      "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-      
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-      "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      
+---------------------------------------------------------
 
-      "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+---------------------------------------------------------
 
-      
+Microsoft.CodeAnalysis.Common 5.0.0 - MIT
 
-      "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
 
-      
+(c) Microsoft Corporation
+Copyright (c) .NET Foundation and Contributors
 
-      "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+MIT License
 
-      
+Copyright (c) <year> <copyright holders>
 
-      "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-      
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-      "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-   2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+---------------------------------------------------------
 
-   3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+---------------------------------------------------------
 
-   4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+Microsoft.CodeAnalysis.CSharp 5.0.0 - MIT
 
-      (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
 
-      (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+(c) Microsoft Corporation
+Copyright (c) Microsoft Corporation
+ACopyright (c) Microsoft Corporation
+CCopyright (c) Microsoft Corporation
+DCopyright (c) Microsoft Corporation
+OCopyright (c) Microsoft Corporation
+Copyright (c) .NET Foundation and Contributors
 
-      (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+MIT License
 
-      (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+Copyright (c) <year> <copyright holders>
 
-      You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-   5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-   6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-   7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+---------------------------------------------------------
 
-   8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+---------------------------------------------------------
 
-   9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+Microsoft.Extensions.ObjectPool 10.0.3 - MIT
 
-APPENDIX: How to apply the Apache License to your work.
 
-To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+Copyright Jorn Zaefferer
+(c) Microsoft Corporation
+Copyright (c) Andrew Arnott
+Copyright (c) 2015, Google Inc.
+Copyright (c) 2019 David Fowler
+Copyright (c) HTML5 Boilerplate
+Copyright 2019 The gRPC Authors
+Copyright (c) 2016 Richard Morris
+Copyright (c) 1998 John D. Polstra
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 2013 - 2018 AngleSharp
+Copyright (c) 2000-2013 Julian Seward
+Copyright (c) 2011-2021 Twitter, Inc.
+Copyright (c) 2014-2018 Michael Daines
+Copyright (c) 1996-1998 John D. Polstra
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) .NET Foundation Contributors
+Copyright (c) 2011-2021 The Bootstrap Authors
+Copyright (c) 2019-2023 The Bootstrap Authors
+Copyright (c) .NET Foundation and Contributors
+Copyright (c) 2019-2020 West Wind Technologies
+Copyright (c) 2007 John Birrell (jb@freebsd.org)
+Copyright (c) 2011 Alex MacCaw (info@eribium.org)
+Copyright (c) Nicolas Gallagher and Jonathan Neal
+Copyright (c) 2010-2019 Google LLC. http://angular.io/license
+Copyright (c) 2011 Nicolas Gallagher (nicolas@nicolasgallagher.com)
+Copyright (c) 1989, 1993 The Regents of the University of California
+Copyright (c) 1990, 1993 The Regents of the University of California
+Copyright OpenJS Foundation and other contributors, https://openjsf.org
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
 
-Copyright [yyyy] [name of copyright owner]
+MIT License
 
-Licensed under the Apache License, Version 2.0 (the "License");
+Copyright (c) <year> <copyright holders>
 
-you may not use this file except in compliance with the License.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-You may obtain a copy of the License at
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-http://www.apache.org/licenses/LICENSE-2.0
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-Unless required by applicable law or agreed to in writing, software
+---------------------------------------------------------
 
-distributed under the License is distributed on an "AS IS" BASIS,
+---------------------------------------------------------
 
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+Microsoft.PowerShell.MarkdownRender 7.2.1 - MIT
 
-See the License for the specific language governing permissions and
 
-limitations under the License.
+(c) Microsoft Corporation
+(c) Microsoft Corporation. PowerShell's Markdown Rendering project PowerShell Markdown Renderer
 
--------------------------------------------------------------------
+MIT License
 
--------------------------------------------------------------------
+Copyright (c) <year> <copyright holders>
 
-Markdig.Signed 0.17.1 - BSD-2-Clause
-(c) 2008 VeriSign, Inc.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Copyright (c) <year> <owner> . All rights reserved.
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-   1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+---------------------------------------------------------
 
-   2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+---------------------------------------------------------
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Microsoft.Security.Extensions 1.4.0 - MIT
 
--------------------------------------------------------------------
 
--------------------------------------------------------------------
+(c) Microsoft Corporation
+Copyright (c) Microsoft Corporation
+
+MIT License
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------------------------
 
-Microsoft.ApplicationInsights 2.11.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
+---------------------------------------------------------
+
+Microsoft.Win32.Registry.AccessControl 10.0.3 - MIT
+
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
 MIT License
 
@@ -271,66 +449,88 @@ The above copyright notice and this permission notice shall be included in all c
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-Microsoft.NETCore.Platforms 3.0.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Microsoft.Win32.SystemEvents 10.0.3 - MIT
+
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+Microsoft.Windows.Compatibility 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-Microsoft.PowerShell.Native 7.0.0-preview.2 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) by P.J. Plauger
+(c) Microsoft Corporation
 
 MIT License
 
@@ -342,220 +542,325 @@ The above copyright notice and this permission notice shall be included in all c
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-Microsoft.Win32.Registry 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
-Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Newtonsoft.Json 13.0.4 - MIT
+
+
+Copyright James Newton-King 2008
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
-Copyright (c) 2013-2017, Alfred Klomp
-Copyright (c) 2015-2017, Wojciech Mula
-Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
-Copyright (c) 2004-2006 Intel Corporation
-Copyright (c) 2016-2017, Matthieu Darbois
-Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) James Newton-King 2008
+Copyright James Newton-King 2008 Json.NET
 
 The MIT License (MIT)
 
-Copyright (c) .NET Foundation and Contributors
-
-All rights reserved.
+Copyright (c) 2007 James Newton-King
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-Microsoft.Win32.Registry.AccessControl 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+runtime.android-arm.runtime.native.System.IO.Ports 10.0.3 - MIT
+
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.android-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-Microsoft.Win32.SystemEvents 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.android-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-Microsoft.Windows.Compatibility 3.0.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.android-x86.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-Namotion.Reflection 1.0.7 - MIT
-(c) 2008 VeriSign, Inc.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
 MIT License
 
@@ -567,47 +872,69 @@ The above copyright notice and this permission notice shall be included in all c
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-Newtonsoft.Json 12.0.2 - MIT
-(c) 2008 VeriSign, Inc.
-Copyright James Newton-King 2008
-Copyright (c) 2007 James Newton-King
-Copyright (c) James Newton-King 2008
+runtime.linux-arm.runtime.native.System.IO.Ports 10.0.3 - MIT
 
-The MIT License (MIT)
 
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
--------------------------------------------------------------------
-
--------------------------------------------------------------------
-
-NJsonSchema 10.0.27 - MIT
-(c) 2008 VeriSign, Inc.
-Copyright Rico Suter, 2018
-Copyright (c) Rico Suter, 2018
-Copyright Rico Suter, 2018 4JSON Schema
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
 MIT License
 
@@ -619,442 +946,691 @@ The above copyright notice and this permission notice shall be included in all c
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-runtime.linux-arm.runtime.native.System.IO.Ports 4.6.0-rc2.19462.14 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+runtime.linux-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
+
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-bionic-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-runtime.linux-arm64.runtime.native.System.IO.Ports 4.6.0-rc2.19462.14 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-bionic-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-runtime.linux-x64.runtime.native.System.IO.Ports 4.6.0-rc2.19462.14 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-musl-arm.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-runtime.native.System.Data.SqlClient.sni 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-musl-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-runtime.native.System.IO.Ports 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-musl-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-runtime.osx-x64.runtime.native.System.IO.Ports 4.6.0-rc2.19462.14 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.linux-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.CodeDom 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.maccatalyst-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Collections.Immutable 1.5.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 1991-2017 Unicode, Inc.
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.maccatalyst-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.ComponentModel.Composition 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
+
+MIT License
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+runtime.native.System.Data.SqlClient.sni 4.4.0 - MIT
+
+
+(c) 2022 GitHub, Inc.
+(c) Microsoft Corporation
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 1991-2017 Unicode, Inc.
+Portions (c) International Organization
+Copyright (c) 2004-2006 Intel Corporation
 Copyright (c) .NET Foundation Contributors
 Copyright (c) .NET Foundation and Contributors
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
 Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers
 
 The MIT License (MIT)
 
@@ -1081,734 +1657,1071 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+runtime.native.System.IO.Ports 10.0.3 - MIT
 
-System.ComponentModel.Composition.Registration 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.osx-arm64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Configuration.ConfigurationManager 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+runtime.osx-x64.runtime.native.System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Data.DataSetExtensions 4.5.0 - MIT
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.CodeDom 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Data.Odbc 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.ComponentModel.Composition 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Data.OleDb 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.ComponentModel.Composition.Registration 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Data.SqlClient 4.7.0 - MIT
-2008 SQL Server 2012
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Configuration.ConfigurationManager 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Diagnostics.EventLog 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Data.Odbc 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Diagnostics.PerformanceCounter 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Data.OleDb 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.DirectoryServices 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Data.SqlClient 4.9.0 - MIT
+
+
+(c) Microsoft Corporation
+
+MIT License
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+System.Diagnostics.EventLog 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.DirectoryServices.AccountManagement 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Diagnostics.PerformanceCounter 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.DirectoryServices.Protocols 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.DirectoryServices 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Drawing.Common 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.DirectoryServices.AccountManagement 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.IO.FileSystem.AccessControl 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.DirectoryServices.Protocols 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.IO.Packaging 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Drawing.Common 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.IO.Pipes.AccessControl 4.5.1 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 1991-2017 Unicode, Inc.
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
-Copyright (c) 2004-2006 Intel Corporation
-Copyright (c) .NET Foundation Contributors
+(c) Microsoft Corporation
+Copyright (c) Sven Groot (Ookii.org) 2009
 Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
 
 The MIT License (MIT)
 
@@ -1834,487 +2747,756 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.IO.Packaging 10.0.3 - MIT
 
-System.IO.Ports 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.IO.Ports 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Management 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Management 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Memory 4.5.3 - MIT
-(c) 2008 VeriSign, Inc.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 1991-2017 Unicode, Inc.
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Net.Http.WinHttpHandler 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Net.Http.WinHttpHandler 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
-
-The MIT License (MIT)
-
-Copyright (c) .NET Foundation and Contributors
-
-All rights reserved.
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+MIT License
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+Copyright (c) <year> <copyright holders>
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
--------------------------------------------------------------------
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-System.Private.ServiceModel 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+---------------------------------------------------------
 
-The MIT License (MIT)
+System.Reflection.Context 10.0.3 - MIT
 
-Copyright (c) .NET Foundation and Contributors
 
-All rights reserved.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+MIT License
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+Copyright (c) <year> <copyright holders>
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
--------------------------------------------------------------------
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+System.Runtime.Caching 10.0.3 - MIT
 
-System.Reflection.Context 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Security.Cryptography.Pkcs 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Reflection.DispatchProxy 4.5.0 - MIT
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Security.Cryptography.ProtectedData 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Reflection.Emit 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Security.Cryptography.Xml 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Reflection.Emit.ILGeneration 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Security.Permissions 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.Reflection.Emit.Lightweight 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.ServiceModel.Http 10.0.652802 - MIT
 
--------------------------------------------------------------------
 
-System.Reflection.Metadata 1.6.0 - MIT
+(c) Microsoft Corporation
+Copyright (c) .NET Foundation and Contributors
+Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) Provided
 
 The MIT License (MIT)
 
@@ -2341,32 +3523,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
-System.Runtime.Caching 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
-Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
-Copyright (c) 2013-2017, Alfred Klomp
-Copyright (c) 2015-2017, Wojciech Mula
-Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
-Copyright (c) 2004-2006 Intel Corporation
-Copyright (c) 2016-2017, Matthieu Darbois
-Copyright (c) .NET Foundation Contributors
+System.ServiceModel.NetFramingBase 10.0.652802 - MIT
+
+
+(c) Microsoft Corporation
 Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) Provided
 
 The MIT License (MIT)
 
@@ -2393,15 +3559,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+System.ServiceModel.NetTcp 10.0.652802 - MIT
 
-System.ServiceModel.Duplex 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
+
+(c) Microsoft Corporation
 Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) Provided
 
 The MIT License (MIT)
 
@@ -2428,15 +3595,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+System.ServiceModel.Primitives 10.0.652802 - MIT
 
-System.ServiceModel.Http 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
+
+(c) Microsoft Corporation
 Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) Provided
 
 The MIT License (MIT)
 
@@ -2463,85 +3631,238 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+System.ServiceModel.Syndication 10.0.3 - MIT
+
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
+
+MIT License
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+System.ServiceProcess.ServiceController 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.ServiceModel.NetTcp 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Speech 10.0.3 - MIT
 
--------------------------------------------------------------------
 
-System.ServiceModel.Primitives 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
+Copyright (c) 2011, Google Inc.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
+Copyright (c) 2007 James Newton-King
+Copyright (c) 1991-2024 Unicode, Inc.
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
+Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
+Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
+Copyright (c) .NET Foundation Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
 
-All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+---------------------------------------------------------
 
+---------------------------------------------------------
 
--------------------------------------------------------------------
+System.Web.Services.Description 8.1.2 - MIT
 
--------------------------------------------------------------------
 
-System.ServiceModel.Security 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
+(c) Microsoft Corporation
 Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright (c) 2000-2014 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) Provided
 
 The MIT License (MIT)
 
@@ -2568,38 +3889,96 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
--------------------------------------------------------------------
+---------------------------------------------------------
 
--------------------------------------------------------------------
+---------------------------------------------------------
+
+System.Windows.Extensions 10.0.3 - MIT
 
-System.Threading.AccessControl 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
+
+Copyright (c) 2021
+Copyright (c) Six Labors
+(c) Microsoft Corporation
+Copyright (c) 2022 FormatJS
+Copyright (c) Andrew Arnott
+Copyright 2019 LLVM Project
+Copyright (c) 1998 Microsoft
+Copyright 2018 Daniel Lemire
+Copyright (c) .NET Foundation
 Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
+Copyright (c) 2020 Dan Shechter
+(c) 1997-2005 Sean Eron Anderson
+Copyright (c) 2015 Andrew Gallant
+Copyright (c) 2022, Wojciech Mula
+Copyright (c) 2017 Yoshifumi Kawai
+Copyright (c) 2022, Geoff Langdale
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2012-2021 Yann Collet
+Copyright (c) Microsoft Corporation
 Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
+Copyright (c) 1991-2024 Unicode, Inc.
 Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2018 Nemanja Mijailovic
+Copyright 2012 the V8 project authors
+Copyright (c) 1999 Lucent Technologies
+Copyright (c) 2008-2016, Wojciech Mula
+Copyright (c) 2011-2020 Microsoft Corp
 Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2015-2018, Wojciech Mula
 Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
+Copyright (c) 2015 The Chromium Authors
+Copyright (c) 2018 Alexander Chermyanin
+Copyright (c) The Internet Society 1997
 Copyright (c) 2004-2006 Intel Corporation
+Copyright (c) 2011-2015 Intel Corporation
+Copyright (c) 2013-2017, Milosz Krajewski
 Copyright (c) 2016-2017, Matthieu Darbois
+Copyright (c) The Internet Society (2003)
 Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
+(c) 1995-2024 Jean-loup Gailly and Mark Adler
+Copyright (c) 2020 Mara Bos <m-ou.se@m-ou.se>
+Copyright (c) 2012 - present, Victor Zverovich
+Copyright (c) 2006 Jb Evain (jbevain@gmail.com)
+Copyright (c) 2008-2020 Advanced Micro Devices, Inc.
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
 Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
 Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors
+Copyright (c) 2014 Ryan Juckett http://www.ryanjuckett.com
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Portions (c) International Organization for Standardization 1986
+Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang) Disclaimers
+Copyright (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip
+Copyright (c) 1980, 1986, 1993 The Regents of the University of California
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the University of California
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & Digital Equipment Corporation, Maynard, Mass
 
-The MIT License (MIT)
+MIT License
 
-Copyright (c) .NET Foundation and Contributors
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---------------------------------------------------------
 
-All rights reserved.
+
+-------------------------------------------------------------------
+
+-------------------------------------------------------------------
+
+Additional  -
+
+-------------------------------------------------
+Microsoft.PowerShell.Archive
+-------------------------------------------------
+
+Copyright (c) 2016 Microsoft Corporation.
+
+The MIT License (MIT)
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -2608,47 +3987,75 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
 
+-------------------------------------------------
+Microsoft.Management.Infrastructure.Runtime.Unix
+Microsoft.Management.Infrastructure
+-------------------------------------------------
 
--------------------------------------------------------------------
+Copyright (c) Microsoft Corporation
 
--------------------------------------------------------------------
+All rights reserved.
 
-System.Threading.Tasks.Extensions 4.5.3 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 1991-2017 Unicode, Inc.
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
-Copyright (c) 2004-2006 Intel Corporation
-Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+MIT License
 
-The MIT License (MIT)
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-Copyright (c) .NET Foundation and Contributors
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------
+•	NuGet.Common
+•	NuGet.Configuration
+•	NuGet.DependencyResolver.Core
+•	NuGet.Frameworks
+•	NuGet.LibraryModel
+•	NuGet.Packaging
+•	NuGet.Packaging.Core
+•	NuGet.Packaging.Core.Types
+•	NuGet.ProjectModel
+•	NuGet.Protocol.Core.Types
+•	NuGet.Protocol.Core.v3
+•	NuGet.Repositories
+•	NuGet.RuntimeModel
+•	NuGet.Versioning
+----------------------------------------------------------
+
+Copyright (c) .NET Foundation. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+these files except in compliance with the License. You may obtain a copy of the
+License at
+
+https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed
+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
+specific language governing permissions and limitations under the License.
+
+-------------------------------------------------
+PackageManagement
+-------------------------------------------------
 
+Copyright (c) Microsoft Corporation
 All rights reserved.
 
+MIT License
+
 Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
+of this software and associated documentation files (the Software), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
@@ -2657,7 +4064,7 @@ furnished to do so, subject to the following conditions:
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@@ -2665,40 +4072,16 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
+-------------------------------------------------
+PowerShellGet
+-------------------------------------------------
 
--------------------------------------------------------------------
-
--------------------------------------------------------------------
+Copyright (c) Microsoft Corporation
 
-System.Windows.Extensions 4.6.0 - MIT
-(c) 2008 VeriSign, Inc.
-(c) Microsoft Corporation.
-Copyright (c) .NET Foundation.
-Copyright (c) 2011, Google Inc.
-(c) 1997-2005 Sean Eron Anderson.
-Copyright (c) 2007 James Newton-King
-Copyright (c) 1991-2017 Unicode, Inc.
-Copyright (c) 2013-2017, Alfred Klomp
-Copyright (c) 2015-2017, Wojciech Mula
-Copyright (c) 2005-2007, Nick Galbreath
-Portions (c) International Organization
-Copyright (c) 2015 The Chromium Authors.
-Copyright (c) 2004-2006 Intel Corporation
-Copyright (c) 2016-2017, Matthieu Darbois
-Copyright (c) .NET Foundation Contributors
-Copyright (c) .NET Foundation and Contributors
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-Copyright (c) YEAR W3C(r) (MIT, ERCIM, Keio, Beihang). Disclaimers THIS WORK IS PROVIDED AS
+All rights reserved.
 
 The MIT License (MIT)
 
-Copyright (c) .NET Foundation and Contributors
-
-All rights reserved.
-
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
@@ -2717,18 +4100,11 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
-
--------------------------------------------------------------------
-
--------------------------------------------------------------------
-
-Additional  - 
-
 ---------------------------------------------
 File:  PSReadLine
 ---------------------------------------------
 
-https://github.com/lzybkr/PSReadLine
+https://github.com/PowerShell/PSReadLine
 
 Copyright (c) 2013, Jason Shirk
 
@@ -2756,35 +4132,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-----------------------------------------------
-File:  Hashtables from ConvertFrom-json
-----------------------------------------------
-
-https://stackoverflow.com/questions/22002748/hashtables-from-convertfrom-json-have-different-type-from-powershells-built-in-h
-
-Copyright (c) 2015 Dave Wyatt.  All rights reserved.
-
-All rights reserved.
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
 -------------------------------------------------
-PackageManagement
+ThreadJob
 -------------------------------------------------
 
-Copyright (c) Microsoft Corporation
-All rights reserved.
+Copyright (c) 2018 Paul Higinbotham
 
 MIT License
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the Software), to deal
+of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
@@ -2793,7 +4150,7 @@ furnished to do so, subject to the following conditions:
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@@ -2801,34 +4158,3 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
---------------------------------------------------------
-•	NuGet.Common
-•	NuGet.Configuration
-•	NuGet.DependencyResolver.Core
-•	NuGet.Frameworks
-•	NuGet.LibraryModel
-•	NuGet.Packaging
-•	NuGet.Packaging.Core
-•	NuGet.Packaging.Core.Types
-•	NuGet.ProjectModel
-•	NuGet.Protocol.Core.Types
-•	NuGet.Protocol.Core.v3
-•	NuGet.Repositories
-•	NuGet.RuntimeModel
-•	NuGet.Versioning
-----------------------------------------------------------
-
-Copyright (c) .NET Foundation. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-these files except in compliance with the License. You may obtain a copy of the
-License at
-
-https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software distributed
-under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, either express or implied. See the License for the
-specific language governing permissions and limitations under the License.
-
--------------------------------------------------------------------
diff --git a/assets/AppImageThirdPartyNotices.txt b/assets/AppImageThirdPartyNotices.txt
deleted file mode 100644
index d492e7c3b53..00000000000
--- a/assets/AppImageThirdPartyNotices.txt
+++ /dev/null
@@ -1,506 +0,0 @@
-------------------------------------------- START OF THIRD PARTY NOTICE -----------------------------------------
-
- This file is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Microsoft product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
-
-
-
-
-Copyright (c) 1991-2016 Unicode, Inc. All rights reserved.
-Distributed under the Terms of Use in http://www.unicode.org/copyright.html
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Unicode data files and any associated documentation
-(the "Data Files") or Unicode software and any associated documentation
-(the "Software") to deal in the Data Files or Software
-without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, and/or sell copies of
-the Data Files or Software, and to permit persons to whom the Data Files
-or Software are furnished to do so, provided that either
-(a) this copyright and permission notice appear with all copies
-of the Data Files or Software, or
-(b) this copyright and permission notice appear in associated
-Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
-NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale,
-use or other dealings in these Data Files or Software without prior
-written authorization of the copyright holder.
-
----------------------
-
-Third-Party Software Licenses
-
-This section contains third-party software notices and/or additional
-terms for licensed third-party software components included within ICU
-libraries.
-
-1. ICU License - ICU 1.8.1 to ICU 57.1
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1995-2016 International Business Machines Corporation and others
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
-SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
-RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
-CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-All trademarks and registered trademarks mentioned herein are the
-property of their respective owners.
-
-2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
-
- #     The Google Chrome software developed by Google is licensed under
- # the BSD license. Other software included in this distribution is
- # provided under other licenses, as set forth below.
- #
- #  The BSD License
- #  https://opensource.org/licenses/bsd-license.php
- #  Copyright (C) 2006-2008, Google Inc.
- #
- #  All rights reserved.
- #
- #  Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are met:
- #
- #  Redistributions of source code must retain the above copyright notice,
- # this list of conditions and the following disclaimer.
- #  Redistributions in binary form must reproduce the above
- # copyright notice, this list of conditions and the following
- # disclaimer in the documentation and/or other materials provided with
- # the distribution.
- #  Neither the name of  Google Inc. nor the names of its
- # contributors may be used to endorse or promote products derived from
- # this software without specific prior written permission.
- #
- #
- #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- #
- #
- #  The word list in cjdict.txt are generated by combining three word lists
- # listed below with further processing for compound word breaking. The
- # frequency is generated with an iterative training against Google web
- # corpora.
- #
- #  * Libtabe (Chinese)
- #    - https://sourceforge.net/project/?group_id=1519
- #    - Its license terms and conditions are shown below.
- #
- #  * IPADIC (Japanese)
- #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
- #    - Its license terms and conditions are shown below.
- #
- #  ---------COPYING.libtabe ---- BEGIN--------------------
- #
- #  /*
- #   * Copyrighy (c) 1999 TaBE Project.
- #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
- #   * All rights reserved.
- #   *
- #   * Redistribution and use in source and binary forms, with or without
- #   * modification, are permitted provided that the following conditions
- #   * are met:
- #   *
- #   * . Redistributions of source code must retain the above copyright
- #   *   notice, this list of conditions and the following disclaimer.
- #   * . Redistributions in binary form must reproduce the above copyright
- #   *   notice, this list of conditions and the following disclaimer in
- #   *   the documentation and/or other materials provided with the
- #   *   distribution.
- #   * . Neither the name of the TaBE Project nor the names of its
- #   *   contributors may be used to endorse or promote products derived
- #   *   from this software without specific prior written permission.
- #   *
- #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- #   * OF THE POSSIBILITY OF SUCH DAMAGE.
- #   */
- #
- #  /*
- #   * Copyright (c) 1999 Computer Systems and Communication Lab,
- #   *                    Institute of Information Science, Academia
- #       *                    Sinica. All rights reserved.
- #   *
- #   * Redistribution and use in source and binary forms, with or without
- #   * modification, are permitted provided that the following conditions
- #   * are met:
- #   *
- #   * . Redistributions of source code must retain the above copyright
- #   *   notice, this list of conditions and the following disclaimer.
- #   * . Redistributions in binary form must reproduce the above copyright
- #   *   notice, this list of conditions and the following disclaimer in
- #   *   the documentation and/or other materials provided with the
- #   *   distribution.
- #   * . Neither the name of the Computer Systems and Communication Lab
- #   *   nor the names of its contributors may be used to endorse or
- #   *   promote products derived from this software without specific
- #   *   prior written permission.
- #   *
- #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- #   * OF THE POSSIBILITY OF SUCH DAMAGE.
- #   */
- #
- #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
- #      University of Illinois
- #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
- #
- #  ---------------COPYING.libtabe-----END--------------------------------
- #
- #
- #  ---------------COPYING.ipadic-----BEGIN-------------------------------
- #
- #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
- #  and Technology.  All Rights Reserved.
- #
- #  Use, reproduction, and distribution of this software is permitted.
- #  Any copy of this software, whether in its original form or modified,
- #  must include both the above copyright notice and the following
- #  paragraphs.
- #
- #  Nara Institute of Science and Technology (NAIST),
- #  the copyright holders, disclaims all warranties with regard to this
- #  software, including all implied warranties of merchantability and
- #  fitness, in no event shall NAIST be liable for
- #  any special, indirect or consequential damages or any damages
- #  whatsoever resulting from loss of use, data or profits, whether in an
- #  action of contract, negligence or other tortuous action, arising out
- #  of or in connection with the use or performance of this software.
- #
- #  A large portion of the dictionary entries
- #  originate from ICOT Free Software.  The following conditions for ICOT
- #  Free Software applies to the current dictionary as well.
- #
- #  Each User may also freely distribute the Program, whether in its
- #  original form or modified, to any third party or parties, PROVIDED
- #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
- #  on, or be attached to, the Program, which is distributed substantially
- #  in the same form as set out herein and that such intended
- #  distribution, if actually made, will neither violate or otherwise
- #  contravene any of the laws and regulations of the countries having
- #  jurisdiction over the User or the intended distribution itself.
- #
- #  NO WARRANTY
- #
- #  The program was produced on an experimental basis in the course of the
- #  research and development conducted during the project and is provided
- #  to users as so produced on an experimental basis.  Accordingly, the
- #  program is provided without any warranty whatsoever, whether express,
- #  implied, statutory or otherwise.  The term "warranty" used herein
- #  includes, but is not limited to, any warranty of the quality,
- #  performance, merchantability and fitness for a particular purpose of
- #  the program and the nonexistence of any infringement or violation of
- #  any right of any third party.
- #
- #  Each user of the program will agree and understand, and be deemed to
- #  have agreed and understood, that there is no warranty whatsoever for
- #  the program and, accordingly, the entire risk arising from or
- #  otherwise connected with the program is assumed by the user.
- #
- #  Therefore, neither ICOT, the copyright holder, or any other
- #  organization that participated in or was otherwise related to the
- #  development of the program and their respective officials, directors,
- #  officers and other employees shall be held liable for any and all
- #  damages, including, without limitation, general, special, incidental
- #  and consequential damages, arising out of or otherwise in connection
- #  with the use or inability to use the program or any product, material
- #  or result produced or otherwise obtained by using the program,
- #  regardless of whether they have been advised of, or otherwise had
- #  knowledge of, the possibility of such damages at any time during the
- #  project or thereafter.  Each user will be deemed to have agreed to the
- #  foregoing by his or her commencement of use of the program.  The term
- #  "use" as used herein includes, but is not limited to, the use,
- #  modification, copying and distribution of the program and the
- #  production of secondary products from the program.
- #
- #  In the case where the program, whether in its original form or
- #  modified, was distributed or delivered to or received by a user from
- #  any person, organization or entity other than ICOT, unless it makes or
- #  grants independently of ICOT any specific warranty to the user in
- #  writing, such person, organization or entity, will also be exempted
- #  from and not be held liable to the user for any such damages as noted
- #  above as far as the program is concerned.
- #
- #  ---------------COPYING.ipadic-----END----------------------------------
-
-3. Lao Word Break Dictionary Data (laodict.txt)
-
- #  Copyright (c) 2013 International Business Machines Corporation
- #  and others. All Rights Reserved.
- #
- # Project: https://code.google.com/p/lao-dictionary/
- # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
- # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
- #              (copied below)
- #
- #  This file is derived from the above dictionary, with slight
- #  modifications.
- #  ----------------------------------------------------------------------
- #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
- #  All rights reserved.
- #
- #  Redistribution and use in source and binary forms, with or without
- #  modification,
- #  are permitted provided that the following conditions are met:
- #
- #
- # Redistributions of source code must retain the above copyright notice, this
- #  list of conditions and the following disclaimer. Redistributions in
- #  binary form must reproduce the above copyright notice, this list of
- #  conditions and the following disclaimer in the documentation and/or
- #  other materials provided with the distribution.
- #
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- # OF THE POSSIBILITY OF SUCH DAMAGE.
- #  --------------------------------------------------------------------------
-
-4. Burmese Word Break Dictionary Data (burmesedict.txt)
-
- #  Copyright (c) 2014 International Business Machines Corporation
- #  and others. All Rights Reserved.
- #
- #  This list is part of a project hosted at:
- #    github.com/kanyawtech/myanmar-karen-word-lists
- #
- #  --------------------------------------------------------------------------
- #  Copyright (c) 2013, LeRoy Benjamin Sharon
- #  All rights reserved.
- #
- #  Redistribution and use in source and binary forms, with or without
- #  modification, are permitted provided that the following conditions
- #  are met: Redistributions of source code must retain the above
- #  copyright notice, this list of conditions and the following
- #  disclaimer.  Redistributions in binary form must reproduce the
- #  above copyright notice, this list of conditions and the following
- #  disclaimer in the documentation and/or other materials provided
- #  with the distribution.
- #
- #    Neither the name Myanmar Karen Word Lists, nor the names of its
- #    contributors may be used to endorse or promote products derived
- #    from this software without specific prior written permission.
- #
- #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
- #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- #  SUCH DAMAGE.
- #  --------------------------------------------------------------------------
-
-5. Time Zone Database
-
-  ICU uses the public domain data and code derived from Time Zone
-Database for its time zone support. The ownership of the TZ database
-is explained in BCP 175: Procedure for Maintaining the Time Zone
-Database section 7.
-
- # 7.  Database Ownership
- #
- #    The TZ database itself is not an IETF Contribution or an IETF
- #    document.  Rather it is a pre-existing and regularly updated work
- #    that is in the public domain, and is intended to remain in the
- #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
- #    not apply to the TZ Database or contributions that individuals make
- #    to it.  Should any claims be made and substantiated against the TZ
- #    Database, the organization that is providing the IANA
- #    Considerations defined in this RFC, under the memorandum of
- #    understanding with the IETF, currently ICANN, may act in accordance
- #    with all competent court orders.  No ownership claims will be made
- #    by ICANN or the IETF Trust on the database or the code.  Any person
- #    making a contribution to the database or code waives all rights to
- #    future claims in that contribution or in the TZ Database.
-
-
-8. liblzma
-
-XZ Utils Licensing
-==================
-
-    Different licenses apply to different files in this package. Here
-    is a rough summary of which licenses apply to which parts of this
-    package (but check the individual files to be sure!):
-
-      - liblzma is in the public domain.
-
-      - xz, xzdec, and lzmadec command line tools are in the public
-        domain unless GNU getopt_long had to be compiled and linked
-        in from the lib directory. The getopt_long code is under
-        GNU LGPLv2.1+.
-
-      - The scripts to grep, diff, and view compressed files have been
-        adapted from gzip. These scripts and their documentation are
-        under GNU GPLv2+.
-
-      - All the documentation in the doc directory and most of the
-        XZ Utils specific documentation files in other directories
-        are in the public domain.
-
-      - Translated messages are in the public domain.
-
-      - The build system contains public domain files, and files that
-        are under GNU GPLv2+ or GNU GPLv3+. None of these files end up
-        in the binaries being built.
-
-      - Test files and test code in the tests directory, and debugging
-        utilities in the debug directory are in the public domain.
-
-      - The extra directory may contain public domain files, and files
-        that are under various free software licenses.
-
-    You can do whatever you want with the files that have been put into
-    the public domain. If you find public domain legally problematic,
-    take the previous sentence as a license grant. If you still find
-    the lack of copyright legally problematic, you have too many
-    lawyers.
-
-    As usual, this software is provided "as is", without any warranty.
-
-    If you copy significant amounts of public domain code from XZ Utils
-    into your project, acknowledging this somewhere in your software is
-    polite (especially if it is proprietary, non-free software), but
-    naturally it is not legally required. Here is an example of a good
-    notice to put into "about box" or into documentation:
-
-        This software includes code from XZ Utils <https://tukaani.org/xz/>.
-
-    The following license texts are included in the following files:
-      - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1
-      - COPYING.GPLv2: GNU General Public License version 2
-      - COPYING.GPLv3: GNU General Public License version 3
-
-    Note that the toolchain (compiler, linker etc.) may add some code
-    pieces that are copyrighted. Thus, it is possible that e.g. liblzma
-    binary wouldn't actually be in the public domain in its entirety
-    even though it contains no copyrighted code from the XZ Utils source
-    package.
-
-    If you have questions, don't hesitate to ask the author(s) for more
-    information.
-
-
-BSD License
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-9. libunwind
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Provided for Informational Purposes Only
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-
-
------------------------------------------------ END OF THIRD PARTY NOTICE ------------------------------------------
diff --git a/assets/AppxManifest.xml b/assets/AppxManifest.xml
index 83df8c31b41..9faaec64995 100644
--- a/assets/AppxManifest.xml
+++ b/assets/AppxManifest.xml
@@ -20,11 +20,24 @@
   </Properties>
 
   <Dependencies>
-    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.17763.0" />
+    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.18362.0" />
   </Dependencies>
 
   <Resources>
-    <Resource Language="en-us"/>
+    <Resource Language="en-US"/>
+    <Resource Language="cs"/>
+    <Resource Language="de"/>
+    <Resource Language="es"/>
+    <Resource Language="fr"/>
+    <Resource Language="it"/>
+    <Resource Language="ja"/>
+    <Resource Language="ko"/>
+    <Resource Language="pl"/>
+    <Resource Language="pt-BR"/>
+    <Resource Language="ru"/>
+    <Resource Language="tr"/>
+    <Resource Language="zh-Hans"/>
+    <Resource Language="zh-Hant"/>
   </Resources>
 
   <Applications>
@@ -43,7 +56,11 @@
 
   <Capabilities>
     <Capability Name="internetClient" />
+    <rescap:Capability Name="appLicensing" />
     <rescap:Capability Name="runFullTrust" />
     <rescap:Capability Name="unvirtualizedResources" />
+    <rescap:Capability Name="packageManagement" />
+    <rescap:Capability Name="packageQuery" />
   </Capabilities>
+  <mp:PhoneIdentity PhoneProductId="$PHONEPRODUCTID$" PhonePublisherId="95d94207-0c7c-47ed-82db-d75c81153c35" />
 </Package>
diff --git a/assets/additionalAttributions.txt b/assets/additionalAttributions.txt
index d244bad6877..6676ca99cf5 100644
--- a/assets/additionalAttributions.txt
+++ b/assets/additionalAttributions.txt
@@ -1,46 +1,42 @@
-## Used to generate a new TPN
-## Copy this into the additional attributions fields
-## Copy everything below here, but do not include this line
 
----------------------------------------------
-File:  PSReadLine
----------------------------------------------
+-------------------------------------------------------------------
 
-https://github.com/lzybkr/PSReadLine
+-------------------------------------------------------------------
 
-Copyright (c) 2013, Jason Shirk
+Additional  -
 
-All rights reserved.
+-------------------------------------------------
+Microsoft.PowerShell.Archive
+-------------------------------------------------
 
-BSD License
+Copyright (c) 2016 Microsoft Corporation.
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+The MIT License (MIT)
 
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
-----------------------------------------------
-File:  Hashtables from ConvertFrom-json
-----------------------------------------------
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
 
-https://stackoverflow.com/questions/22002748/hashtables-from-convertfrom-json-have-different-type-from-powershells-built-in-h
+-------------------------------------------------
+Microsoft.Management.Infrastructure.Runtime.Unix
+Microsoft.Management.Infrastructure
+-------------------------------------------------
 
-Copyright (c) 2015 Dave Wyatt.  All rights reserved.
+Copyright (c) Microsoft Corporation
 
 All rights reserved.
 
@@ -52,6 +48,36 @@ The above copyright notice and this permission notice shall be included in all c
 
 THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
+--------------------------------------------------------
+•	NuGet.Common
+•	NuGet.Configuration
+•	NuGet.DependencyResolver.Core
+•	NuGet.Frameworks
+•	NuGet.LibraryModel
+•	NuGet.Packaging
+•	NuGet.Packaging.Core
+•	NuGet.Packaging.Core.Types
+•	NuGet.ProjectModel
+•	NuGet.Protocol.Core.Types
+•	NuGet.Protocol.Core.v3
+•	NuGet.Repositories
+•	NuGet.RuntimeModel
+•	NuGet.Versioning
+----------------------------------------------------------
+
+Copyright (c) .NET Foundation. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+these files except in compliance with the License. You may obtain a copy of the
+License at
+
+https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed
+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
+specific language governing permissions and limitations under the License.
+
 -------------------------------------------------
 PackageManagement
 -------------------------------------------------
@@ -79,32 +105,88 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
---------------------------------------------------------
-•	NuGet.Common
-•	NuGet.Configuration
-•	NuGet.DependencyResolver.Core
-•	NuGet.Frameworks
-•	NuGet.LibraryModel
-•	NuGet.Packaging
-•	NuGet.Packaging.Core
-•	NuGet.Packaging.Core.Types
-•	NuGet.ProjectModel
-•	NuGet.Protocol.Core.Types
-•	NuGet.Protocol.Core.v3
-•	NuGet.Repositories
-•	NuGet.RuntimeModel
-•	NuGet.Versioning
-----------------------------------------------------------
+-------------------------------------------------
+PowerShellGet
+-------------------------------------------------
 
-Copyright (c) .NET Foundation. All rights reserved.
+Copyright (c) Microsoft Corporation
 
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-these files except in compliance with the License. You may obtain a copy of the
-License at
+All rights reserved.
 
-https://www.apache.org/licenses/LICENSE-2.0
+The MIT License (MIT)
 
-Unless required by applicable law or agreed to in writing, software distributed
-under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, either express or implied. See the License for the
-specific language governing permissions and limitations under the License.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---------------------------------------------
+File:  PSReadLine
+---------------------------------------------
+
+https://github.com/PowerShell/PSReadLine
+
+Copyright (c) 2013, Jason Shirk
+
+All rights reserved.
+
+BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------
+ThreadJob
+-------------------------------------------------
+
+Copyright (c) 2018 Paul Higinbotham
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/assets/macos-entitlements.plist b/assets/macos-entitlements.plist
new file mode 100644
index 00000000000..9d534f4f4bf
--- /dev/null
+++ b/assets/macos-entitlements.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>com.apple.security.cs.allow-jit</key>
+    <true/>
+    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
+    <true/>
+    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
+    <true/>
+    <key>com.apple.security.cs.disable-library-validation</key>
+    <true/>
+</dict>
+</plist>
diff --git a/assets/manpage/pwsh.1 b/assets/manpage/pwsh.1
new file mode 100644
index 00000000000..14c191241a9
--- /dev/null
+++ b/assets/manpage/pwsh.1
@@ -0,0 +1,10 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "PWSH" "1" "October 2023" "" ""
+.
+.SH "NAME"
+\fBpwsh\fR \- PowerShell command\-line shell and \.NET REPL
+.
+.SH "SYNOPSIS"
+\fBpwsh\fR [\fB\-Login\fR] [ [\fB\-File\fR] \fIfilePath\fR [args] ] [\fB\-Command\fR { \- | \fIscript\-block\fR [\fB\-args\fR \fIarg\-array\fR] | \fIstring\fR [\fICommandParameters\fR] } ] [\fB\-ConfigurationFile\fR \fIfilePath\fR] [\fB\-ConfigurationName\fR \fIstring\fR] [\fB\-CustomPipeName\fR \fIstring\fR] [\fB\-EncodedArguments\fR \fIBase64EncodedArguments\fR] [\fB\-EncodedCommand\fR \fIBase64EncodedCommand\fR] [\fB\-ExecutionPolicy\fR \fIExecutionPolicy\fR] [\fB\-Help\fR] [\fB\-InputFormat\fR {Text | XML}] [\fB\-Interactive\fR] [\fB\-MTA\fR] [\fB\-NoExit\fR] [\fB\-NoLogo\fR] [\fB\-NonInteractive\fR] [\fB\-NoProfile\fR] [\fB\-NoProfileLoadTime\fR] [\fB\-OutputFormat\fR {Text | XML}] [\fB\-SettingsFile\fR \fIfilePath\fR] [\fB\-SSHServerMode\fR] [\fB\-STA\fR] [\fB\-Version\fR] [\fB\-WindowStyle\fR
diff --git a/assets/manpage/pwsh.1.ronn b/assets/manpage/pwsh.1.ronn
new file mode 100644
index 00000000000..98320cc60c8
--- /dev/null
+++ b/assets/manpage/pwsh.1.ronn
@@ -0,0 +1,230 @@
+pwsh(1) -- PowerShell command-line shell and .NET REPL
+=================================================
+
+## SYNOPSIS
+
+`pwsh` [`-Login`] [ [`-File`] <filePath> [args] ]
+[`-Command` { - | <script-block> [`-args` <arg-array>] | <string>
+[<CommandParameters>] } ] [`-ConfigurationFile` <filePath>]
+[`-ConfigurationName` <string>] [`-CustomPipeName` <string>]
+[`-EncodedArguments` <Base64EncodedArguments>]
+[`-EncodedCommand` <Base64EncodedCommand>]
+[`-ExecutionPolicy` <ExecutionPolicy>] [`-Help`] [`-InputFormat` {Text | XML}]
+[`-Interactive`] [`-MTA`] [`-NoExit`] [`-NoLogo`] [`-NonInteractive`]
+[`-NoProfile`] [`-NoProfileLoadTime`] [`-OutputFormat` {Text | XML}]
+[`-SettingsFile` <filePath>] [`-SSHServerMode`] [`-STA`] [`-Version`]
+[`-WindowStyle` <style>] [`-WorkingDirectory` <directoryPath>]
+
+## DESCRIPTION
+
+PowerShell is an automation and configuration management platform.
+It consists of a cross-platform (Windows, Linux and macOS)
+command-line shell and associated scripting language.
+
+## OPTIONS
+
+All parameters are case-insensitive.
+
+`pwsh` accepts both `-` and `--` prefixed arguments.
+
+Some parameters have abbreviated forms
+
+* `-File` | `-f`:
+  Runs the specified script in the local scope ("dot-sourced"), so that the
+  functions and variables that the script creates are available in the current
+  session. Enter the script file path and any parameters. File must be the last
+  parameter in the command, because all characters typed after the File
+  parameter name are interpreted as the script file path followed by the script
+  parameters.
+
+* `-Command` | `-c`:
+  Executes the specified commands (and any parameters) as though they were
+  typed at the PowerShell command prompt, and then exits, unless NoExit is
+  specified. The value of Command can be `-`, a string, or a script block. If
+  the value of Command is `-`, the command text is read from standard input. If
+  the value of Command is a script block, the script block must be enclosed in
+  braces (`{}`). You can specify a script block only when running PowerShell in
+  PowerShell. The results of the script block are returned to the parent shell
+  as deserialized XML objects, not live objects. If the value of Command is a
+  string, Command must be the last parameter in the command, because any
+  characters typed after the command are interpreted as the command arguments.
+
+  To write a string that runs a PowerShell command, use the format:
+  `& {<command>}` where the quotation marks indicate a string and the invoke
+  operator (`&`) causes the command to be executed.
+
+* `-ConfigurationName` | `-config`:
+  Specifies a configuration endpoint in which PowerShell is run. This can be
+  any endpoint registered on the local machine including the default PowerShell
+  remoting endpoints or a custom endpoint having specific user role
+  capabilities.
+
+  Example: `pwsh -ConfigurationName AdminRoles`
+
+* `-CustomPipeName`:
+  Specifies the name to use for an additional IPC server (named pipe) used for
+  debugging and other cross-process communication. This offers a predictable
+  mechanism for connecting to other PowerShell instances. Typically used with
+  the **CustomPipeName** parameter on `Enter-PSHostProcess`.
+
+  This parameter was introduced in PowerShell 6.2.
+
+  For example:
+
+  ```powershell
+  # PowerShell instance 1
+  pwsh -CustomPipeName mydebugpipe
+  # PowerShell instance 2
+  Enter-PSHostProcess -CustomPipeName mydebugpipe
+  ```
+
+* `-EncodedArguments` | `-encodeda` | `-ea`:
+  Accepts a base-64-encoded string version of command arguments.
+  Use this parameter to submit command arguments to PowerShell that
+  require complex quotation marks or curly braces.
+
+* `-EncodedCommand` | `-e` | `-ec`:
+  Accepts a base-64-encoded string version of a command.
+  Use this parameter to submit commands to PowerShell that
+  require complex quotation marks or curly braces.
+
+* `-ExecutionPolicy` | `-ex` | `-ep`:
+  This parameter only applies to Windows computers. On non-Windows platforms,
+  the parameter and the value provided are ignored.
+
+* `-InputFormat` | `-inp` | `-if`:
+  Describes the format of data sent to PowerShell.
+  Valid values are "Text" (text strings) or "XML" (serialized CLIXML format).
+
+* `-Interactive` | `-i`:
+  Present an interactive prompt to the user. Inverse for NonInteractive
+  parameter.
+
+* `-Login` | `-l`:
+  On Linux and macOS, starts PowerShell as a login shell, using `/bin/sh` to
+  execute login profiles such as `/etc/profile` and `~/.profile`.
+
+  This parameter must come first to start PowerShell as a login shell. This
+  parameter is ignored if it is passed in another position.
+
+  To set up `pwsh` as the login shell:
+
+  - Verify that the full absolute path to `pwsh` is listed under `/etc/shells`
+    - This path is usually something like `/opt/microsoft/powershell/7/pwsh` on
+      Linux or `/usr/local/bin/pwsh` on macOS
+    - If `pwsh` isn't present in `/etc/shells`, use an editor to append the path
+      to `pwsh` on the last line. This requires elevated privileges to edit.
+  - Use the `chsh` utility to set your current user's shell to `pwsh`:
+
+    ```sh
+    chsh -s /usr/bin/pwsh
+    ```
+
+* -MTA
+  This parameter is only supported on Windows. Using this parameter on non-Windows
+  platforms results in an error.
+
+* `-NoExit` | `-noe`:
+  Doesn't exit after running startup commands.
+
+  Example: `pwsh -NoExit -Command Get-Date`
+
+* `-NoLogo` | `-nol`:
+  Hides the copyright banner at startup.
+
+* `-NonInteractive` | `-noni`:
+  Does not present an interactive prompt to the user.
+
+* `-NoProfile` | `-nop`:
+  Doesn't load the PowerShell profile.
+
+* `-OutputFormat` | `-o` | `-of``:
+  Determines how output from PowerShell is formatted. Valid values are "Text"
+  (text strings) or "XML" (serialized CLIXML format).
+
+  Example: `pwsh -o XML -c Get-Date`
+
+  When called within a PowerShell session, you get deserialized objects as
+  output rather plain strings. When called from other shells, the output is
+  string data formatted as CLIXML text.
+
+* `-SettingsFile` | `-settings`:
+  Overrides the system-wide `powershell.config.json` settings file for the
+  session. By default, system-wide settings are read from the
+  `powershell.config.json` in the `$PSHOME` directory.
+
+  Note that these settings aren't used by the endpoint specified by the
+  `-ConfigurationName` argument.
+
+  Example: `pwsh -SettingsFile c:\myproject\powershell.config.json`
+
+* `-SSHServerMode` | `-sshs`:
+  Used in `sshd_config` for running PowerShell as an SSH subsystem. It isn't
+  intended or supported for any other use.
+
+* -STA
+  This parameter is only supported on Windows. Using this parameter on
+  non-Windows platforms results in an error.
+
+* `-Version` | `-v`:
+  Displays the version of PowerShell. Additional parameters are ignored.
+
+* `-WindowStyle` | `-w`
+  Sets the window style for the session. Valid values are Normal, Minimized,
+  Maximized, and Hidden. This parameter only applies to Windows. Using this
+  parameter on non-Windows platforms results in an error.
+
+* `-WorkingDirectory` | `-wd` | `-wo`
+  Sets the initial working directory by executing at startup. Any valid
+  PowerShell file path is supported.
+
+  To start PowerShell in your home directory, use: `pwsh -WorkingDirectory ~`
+
+* `-Help`, `-h`, `-?`, `/?`:
+  Shows this message.
+
+## FILES
+
+* `~/.config/powershell/Microsoft.PowerShell_profile.ps1`
+  User profile.
+
+* `~/.local/share/powershell/Modules`
+  User modules.
+
+* `~/.local/share/powershell/PSReadLine/ConsoleHost_history.txt`
+  User PSReadLine history file.
+
+## ENVIRONMENT
+
+These are environment variables used by PowerShell.
+
+* `$PSModulePath`:
+  A colon (`:`) separated load path for PowerShell modules.
+
+## AUTOMATIC VARIABLES
+
+These are automatically defined PowerShell-language variables.
+
+* `$PSHOME`:
+  This is the location of all the system PowerShell binaries, modules, configuration, etc.
+
+* `$PROFILE`:
+  Location for user configuration file.
+
+* `$HOST`:
+  Contains an object that represents the program that is hosting PowerShell (similar to `Get-Host`).
+
+* `$LASTEXITCODE`:
+  Contains the exit code of the last native process that ran in PowerShell (not cmdlets, as those are in-process).
+
+* `$PWD`:
+  Contains an object that represents the current working location (similar to `Get-Location`).
+
+## SEE ALSO
+
+* https://microsoft.com/powershell
+* https://github.com/PowerShell/PowerShell
+
+## COPYRIGHT
+
+Copyright (c) Microsoft Corporation.
diff --git a/assets/pwsh.1.ronn b/assets/pwsh.1.ronn
deleted file mode 100644
index bcc38f7b8b0..00000000000
--- a/assets/pwsh.1.ronn
+++ /dev/null
@@ -1,122 +0,0 @@
-pwsh(1) -- PowerShell command-line shell and .NET REPL
-=================================================
-
-## SYNOPSIS
-
-`pwsh` [`-NoLogo`] [`-NoExit`] [`-NoProfile`] [`-NonInteractive`]
-[`-InputFormat` {Text | XML}] [`-OutputFormat` {Text | XML}]
-[`-EncodedCommand` <Base64EncodedCommand>]
-[`-File` <filePath> <args>] [`-ExecutionPolicy` <ExecutionPolicy>]
-[`-Command` { `-` | <script-block> [`-args` <arg-array>] | <string> [<CommandParameters>] } ]
-
-## DESCRIPTION
-
-PowerShell is an automation and configuration management platform.
-It consists of a cross-platform (Windows, Linux and macOS)
-command-line shell and associated scripting language.
-
-## OPTIONS
-
-PowerShell accepts both `-` and `--` prefixed arguments.
-
-* `-NoLogo`:
-  Hides the copyright banner at startup.
-
-* `-NoExit`:
-  Does not exit after running startup commands.
-
-* `-NoProfile`:
-  Does not load the PowerShell profile.
-
-* `-NonInteractive`:
-  Does not present an interactive prompt to the user.
-
-* `-InputFormat`:
-  Describes the format of data sent to PowerShell.
-  Valid values are "Text" (text strings) or "XML" (serialized CLIXML format).
-
-* `-OutputFormat`:
-  Determines how output from PowerShell is formatted.
-  Valid values are "Text" (text strings) or "XML" (serialized CLIXML format).
-
-* `-EncodedCommand`:
-  Accepts a base-64-encoded string version of a command.
-  Use this parameter to submit commands to PowerShell that
-  require complex quotation marks or curly braces.
-
-* `-File`:
-  Runs the specified script in the local scope ("dot-sourced"),
-  so that the functions and variables that the script creates are available in the current session.
-  Enter the script file path and any parameters.
-  File must be the last parameter in the command,
-  because all characters typed after the File parameter name are
-  interpreted as the script file path followed by the script parameters.
-
-* `-ExecutionPolicy`:
-  Sets the default execution policy for the current session and saves it in the
-  $env:PSExecutionPolicyPreference environment variable.
-  This parameter does not change the PowerShell execution policy that is set in the registry.
-
-* `-Command`:
-  Executes the specified commands (and any parameters) as though they were typed at the PowerShell command prompt,
-  and then exits, unless NoExit is specified.
-  The value of Command can be `-`, a string or a script block.
-  If the value of Command is `-`, the command text is read from standard input.
-  If the value of Command is a script block, the script block must be enclosed in braces (`{}`).
-  You can specify a script block only when running PowerShell in PowerShell.
-  The results of the script block are returned to the parent shell as deserialized XML objects, not live objects.
-  If the value of Command is a string, Command must be the last parameter in the command,
-  because any characters typed after the command are interpreted as the command arguments.
-
-  To write a string that runs a PowerShell command,
-  use the format: `& {<command>}` where the quotation marks indicate a string and the
-  invoke operator (`&`) causes the command to be executed.
-
-* `-Help`, `-?`, `/?`:
-  Shows this message.
-
-## FILES
-
-* `~/.config/powershell/Microsoft.PowerShell_profile.ps1`
-  User profile.
-
-* `~/.local/share/powershell/Modules`
-  User modules.
-
-* `~/.local/share/powershell/PSReadLine/ConsoleHost_history.txt`
-  User PSReadLine history file.
-
-## ENVIRONMENT
-
-These are environment variables used by PowerShell.
-
-* `$PSModulePath`:
-  A colon (`:`) separated load path for PowerShell modules.
-
-## AUTOMATIC VARIABLES
-
-These are automatically defined PowerShell-language variables.
-
-* `$PSHOME`:
-  This is the location of all the system PowerShell binaries, modules, configuration, etc.
-
-* `$PROFILE`:
-  Location for user configuration file.
-
-* `$HOST`:
-  Contains an object that represents the program that is hosting PowerShell (similar to `Get-Host`).
-
-* `$LASTEXITCODE`:
-  Contains the exit code of the last native process that ran in PowerShell (not cmdlets, as those are in-process).
-
-* `$PWD`:
-  Contains an object that represents the current working location (similar to `Get-Location`).
-
-## SEE ALSO
-
-* https://microsoft.com/powershell
-* https://github.com/PowerShell/PowerShell
-
-## COPYRIGHT
-
-Copyright (c) Microsoft Corporation.
diff --git a/assets/wix/ExeLicense.rtf b/assets/wix/ExeLicense.rtf
deleted file mode 100644
index 09b0b1402a5..00000000000
--- a/assets/wix/ExeLicense.rtf
+++ /dev/null
@@ -1,206 +0,0 @@
-{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
-{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
-{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
-{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
-{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
-{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1032\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f1033\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
-{\f1035\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f1036\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f1037\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
-{\f1038\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f1039\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f1040\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
-{\f1372\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f1373\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f1375\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f1376\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}
-{\f1379\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f1380\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f1402\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f1403\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
-{\f1405\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f1406\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f1407\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f1408\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}
-{\f1409\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f1410\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
-{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
-{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
-{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
-{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
-{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
-{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}
-{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);}
-{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
-{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
-{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
-{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
-{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
-{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
-{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
-{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
-{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
-{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
-{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
-{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
-{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
-{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
-{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
-\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;\chyperlink\ctint255\cshade255\red5\green99\blue193;\red96\green94\blue92;\red225\green223\blue221;}
-{\*\defchp \f31506\fs24 }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 
-\af0\afs24\alang1025 \ltrch\fcs0 \f31506\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \sunhideused \spriority1 Default Paragraph Font;}{\*
-\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv 
-\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs24\alang1025 \ltrch\fcs0 \f31506\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*
-\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf19 \sbasedon10 \sunhideused \styrsid11998831 Hyperlink;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \cf20\chshdng0\chcfpat0\chcbpat21 \sbasedon10 \ssemihidden \sunhideused \styrsid11998831 
-Unresolved Mention;}{\s17\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon0 \snext17 \ssemihidden \sunhideused \styrsid11998831 Normal (Web);}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid203718\rsid534261\rsid10121125\rsid11155465
-\rsid11998831\rsid15422468\rsid15613908}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Travis Plunk}{\operator Travis Plunk}
-{\creatim\yr2021\mo2\dy19\hr9\min23}{\revtim\yr2021\mo2\dy19\hr12\min33}{\version4}{\edmins5}{\nofpages1}{\nofwords75}{\nofchars430}{\nofcharsws504}{\vern6021}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
-\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect 
-\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
-\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
-\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
-\asianbrkrule\rsidroot11998831\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
-{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang 
-{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang 
-{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
-\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15422468 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \f31506\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 
-\ltrch\fcs0 \insrsid15422468\charrsid15422468 This application is licensed under the\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11155465 HYPERLINK "https://aka.ms/PowerShellLicense"}{\rtlch\fcs1 \af0 \ltrch\fcs0 
-\insrsid11155465\charrsid15422468 {\*\datafield 
-00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5a000000680074007400700073003a002f002f0061006b0061002e006d0073002f0050006f007700650072005300680065006c006c004c006900630065006e00730065000000795881f43b1d7f48af2c825dc4852763
-0000000085ab000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs15\ul\cf19\insrsid15422468\charrsid15422468 MIT License}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15422468\charrsid15422468 
-.
-\par You may review the\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11155465 HYPERLINK "https://aka.ms/PowerShellThirdPartyNotices"}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11155465\charrsid15422468 {\*\datafield 
-00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f0061006b0061002e006d0073002f0050006f007700650072005300680065006c006c0054006800690072006400500061007200740079004e006f007400690063006500
-73000000795881f43b1d7f48af2c825dc48527630000000085ab000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs15\ul\cf19\insrsid15422468\charrsid15422468 ThirdPartyNotices}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 
-\ltrch\fcs0 \insrsid15422468\charrsid15422468 .
-\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15422468\charrsid15422468 This application collects telemetry under the\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 
-\af0 \ltrch\fcs0 \insrsid534261 HYPERLINK "https://aka.ms/PrivacyPolicy"}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid534261 {\*\datafield 
-00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b52000000680074007400700073003a002f002f0061006b0061002e006d0073002f00500072006900760061006300790050006f006c006900630079000000795881f43b1d7f48af2c825dc48527630000000085ab0000}
-}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs15\ul\cf19\insrsid15422468\charrsid15422468 Microsoft Privacy Statement}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15422468\charrsid15422468 
-. To opt out, see\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11155465 HYPERLINK "https://aka.ms/PowerShellTelemetryOptOut" \\o "Original URL:https://github.com/PowerShell/PowerS
-hell/blob/master/README.md#telemetryClick to follow link."}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11155465\charrsid15422468 {\*\datafield 
-10d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6a000000680074007400700073003a002f002f0061006b0061002e006d0073002f0050006f007700650072005300680065006c006c00540065006c0065006d0065007400720079004f00700074004f00750074000000
-795881f43b1d7f48af2c825dc48527630000000085ab000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs15\ul\cf19\insrsid15422468\charrsid15422468 here}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 
-\insrsid15422468\charrsid15422468 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid11998831 
-\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
-9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
-5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
-b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
-0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
-a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
-c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
-0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
-a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
-6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
-4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
-4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100b6f4679893070000c9200000160000007468656d652f7468656d652f
-7468656d65312e786d6cec59cd8b1bc915bf07f23f347d97f5d5ad8fc1f2a24fcfda33b6b164873dd648a5eef2547789aad28cc56208de532e81c026e49085bd
-ed21842cecc22eb9e48f31d8249b3f22afaa5bdd5552c99e191c3061463074977eefd5afde7bf5de53d5ddcf5e26d4bbc05c1096f6fcfa9d9aefe174ce16248d
-7afeb3d9a4d2f13d2151ba4094a5b8e76fb0f03fbbf7eb5fdd454732c609f6403e1547a8e7c752ae8eaa5531876124eeb0154ee1bb25e30992f0caa3ea82a34b
-d09bd06aa3566b55134452df4b51026a1f2f97648ebd9952e9dfdb2a1f53784da5500373caa74a35b6243476715e5708b11143cabd0b447b3eccb3609733fc52
-fa1e4542c2173dbfa6fffceabdbb5574940b517940d6909be8bf5c2e17589c37f49c3c3a2b260d823068f50bfd1a40e53e6edc1eb7c6ad429f06a0f91c569a71
-b175b61bc320c71aa0ecd1a17bd41e35eb16ded0dfdce3dc0fd5c7c26b50a63fd8c34f2643b0a285d7a00c1feee1c3417730b2f56b50866fede1dbb5fe28685b
-fa3528a6243ddf43d7c25673b85d6d0159327aec8477c360d26ee4ca4b144443115d6a8a254be5a1584bd00bc6270050408a24493db959e1259a43140f112567
-9c7827248a21f056286502866b8ddaa4d684ffea13e827ed5174849121ad780113b137a4f87862cec94af6fc07a0d537206f7ffef9cdeb1fdfbcfee9cd575fbd
-79fdf77c6eadca923b466964cafdf2dd1ffef3cd6fbd7ffff0ed2f5fff319b7a172f4cfcbbbffdeedd3ffef93ef5b0e2d2146ffff4fdbb1fbf7ffbe7dfffebaf
-5f3bb4f7393a33e1339260e13dc297de5396c0021dfcf119bf9ec42c46c494e8a791402952b338f48f656ca11f6d10450edc00db767cce21d5b880f7d72f2cc2
-d398af2571687c182716f094313a60dc6985876a2ec3ccb3751ab927e76b13f714a10bd7dc43945a5e1eaf579063894be530c616cd2714a5124538c5d253dfb1
-738c1dabfb8210cbaea764ce99604be97d41bc01224e93ccc899154da5d03149c02f1b1741f0b7659bd3e7de8051d7aa47f8c246c2de40d4417e86a965c6fb68
-2d51e252394309350d7e8264ec2239ddf0b9891b0b099e8e3065de78818570c93ce6b05ec3e90f21cdb8dd7e4a37898de4929cbb749e20c64ce4889d0f6394ac
-5cd829496313fbb938871045de13265df05366ef10f50e7e40e941773f27d872f787b3c133c8b026a53240d4376beef0e57dccacf89d6ee8126157aae9f3c44a
-b17d4e9cd131584756689f604cd1255a60ec3dfbdcc160c05696cd4bd20f62c82ac7d815580f901dabea3dc5027a25d5dcece7c91322ac909de2881de073bad9
-493c1b9426881fd2fc08bc6eda7c0ca52e7105c0633a3f37818f08f480102f4ea33c16a0c308ee835a9fc4c82a60ea5db8e375c32dff5d658fc1be7c61d1b8c2
-be04197c6d1948eca6cc7b6d3343d49aa00c9819822ec3956e41c4727f29a28aab165b3be596f6a62ddd00dd91d5f42424fd6007b4d3fb84ffbbde073a8cb77f
-f9c6b10f3e4ebfe3566c25ab6b763a8792c9f14e7f7308b7dbd50c195f904fbfa919a175fa04431dd9cf58b73dcd6d4fe3ffdff73487f6f36d2773a8dfb8ed64
-7ce8306e3b99fc70e5e3743265f3027d8d3af0c80e7af4b14f72f0d46749289dca0dc527421ffc08f83db398c0a092d3279eb838055cc5f0a8ca1c4c60e1228e
-b48cc799fc0d91f134462b381daafb4a492472d591f0564cc0a1911e76ea5678ba4e4ed9223becacd7d5c16656590592e5782d2cc6e1a04a66e856bb3cc02bd4
-6bb6913e68dd1250b2d721614c6693683a48b4b783ca48fa58178ce620a157f65158741d2c3a4afdd6557b2c805ae115f8c1edc1cff49e1f06200242701e07cd
-f942f92973f5d6bbda991fd3d3878c69450034d8db08283ddd555c0f2e4fad2e0bb52b78da2261849b4d425b46377822869fc17974aad1abd0b8aeafbba54b2d
-7aca147a3e08ad9246bbf33e1637f535c8ede6069a9a9982a6de65cf6f35430899395af5fc251c1ac363b282d811ea3717a211dcbccc25cf36fc4d32cb8a0b39
-4222ce0cae934e960d122231f728497abe5a7ee1069aea1ca2b9d51b90103e59725d482b9f1a3970baed64bc5ce2b934dd6e8c284b67af90e1b35ce1fc568bdf
-1cac24d91adc3d8d1797de195df3a708422c6cd795011744c0dd413db3e682c0655891c8caf8db294c79da356fa3740c65e388ae62945714339967709dca0b3a
-faadb081f196af190c6a98242f8467912ab0a651ad6a5a548d8cc3c1aafb6121653923699635d3ca2aaa6abab39835c3b60cecd8f26645de60b53531e434b3c2
-67a97b37e576b7b96ea74f28aa0418bcb09fa3ea5ea12018d4cac92c6a8af17e1a56393b1fb56bc776811fa07695226164fdd656ed8edd8a1ae19c0e066f54f9
-416e376a6168b9ed2bb5a5f5adb979b1cdce5e40f2184197bba6526857c2c92e47d0104d754f92a50dd8222f65be35e0c95b73d2f3bfac85fd60d80887955a27
-1c57826650ab74c27eb3d20fc3667d1cd66ba341e31514161927f530bbb19fc00506dde4f7f67a7cefee3ed9ded1dc99b3a4caf4dd7c5513d777f7f5c6e1bb7b
-8f40d2f9b2d598749bdd41abd26df627956034e854bac3d6a0326a0ddba3c9681876ba9357be77a1c141bf390c5ae34ea5551f0e2b41aba6e877ba9576d068f4
-8376bf330efaaff23606569ea58fdc16605ecdebde7f010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d65
-2f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d36
-3f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e
-3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d985
-0528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000000000
-0000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000
-000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019020000
-7468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100b6f4679893070000c92000001600000000000000
-000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000
-000000000000000000009d0a00007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000980b00000000}
-{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
-617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
-6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
-656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
-{\*\latentstyles\lsdstimax376\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
-\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;
-\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;
-\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;
-\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;
-\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
-\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
-\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
-\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
-\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
-\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
-\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
-\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
-\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
-\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
-\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
-\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
-\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
-\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
-\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Link;}}{\*\datastore }}
\ No newline at end of file
diff --git a/assets/wix/Product.wxs b/assets/wix/Product.wxs
deleted file mode 100644
index b4a69fa8e25..00000000000
--- a/assets/wix/Product.wxs
+++ /dev/null
@@ -1,393 +0,0 @@
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-  <!-- MSI installs on Win7 and above -->
-  <?define MinOSVersionSupported = "VersionNT >= 601" ?>
-  <!-- The URL for add/remove programs -->
-  <!-- TBD:Point to the actual release -->
-  <?define InfoURL="https://github.com/PowerShell/PowerShell" ?>
-  <?define ProductSimpleVersionWithNameAndOptionalArchitecture = "$(var.ProductName) $(var.SimpleProductVersion) ($(sys.BUILDARCH))"?>
-  <?if $(var.IsPreview)=True?>
-    <?define PwshPath = "[VersionFolder]preview"?>
-    <?define IconPath = "assets\Powershell_av_colors.ico"?>
-  <?else?>
-    <?define PwshPath = "[VersionFolder]"?>
-    <?define IconPath = "assets\Powershell_black.ico"?>
-  <?endif?>
-  <!-- UpgradeCode GUID MUST REMAIN SAME THROUGHOUT ALL VERSIONS, otherwise, updates won't occur. -->
-  <?if $(sys.BUILDARCH)=x64?>
-    <?define ExplorerContextMenuDialogText = "&$(var.ProductName) $(var.SimpleProductVersion)"?>
-    <?define UpgradeCodePreview = "39243d76-adaf-42b1-94fb-16ecf83237c8"?>
-    <?define UpgradeCodeRelease = "31ab5147-9a97-4452-8443-d9709f0516e1"?>
-    <?if $(var.IsPreview)=True?>
-      <?define UpgradeCode = $(var.UpgradeCodePreview)?>
-    <?else?>
-      <?define UpgradeCode = $(var.UpgradeCodeRelease)?>
-    <?endif?>
-  <?else?>
-    <?define ExplorerContextMenuDialogText = "&$(var.ProductName) $(var.SimpleProductVersion) ($(sys.BUILDARCH))"?>
-    <?define UpgradeCodePreview = "86abcfbd-1ccc-4a88-b8b2-0facfde29094"?>
-    <?define UpgradeCodeRelease = "1d00683b-0f84-4db8-a64f-2f98ad42fe06"?>
-    <?if $(var.IsPreview)=True?>
-      <?define UpgradeCode = $(var.UpgradeCodePreview)?>
-    <?else?>
-      <?define UpgradeCode = $(var.UpgradeCodeRelease)?>
-    <?endif?>
-  <?endif?>
-  <!-- Explorer context submenu entries. The ampersand denotes the keyboard shortcut. -->
-  <?define ExplorerContextSubMenuDialogText = "Open &here"?>
-  <?define ExplorerContextSubMenuElevatedDialogText = "Open here as &Administrator"?>
-  <!-- ps1 context submenu entries. -->
-  <?define PowerShellFileContextSubMenuDialogText = "Run with $(var.ProductName) $(var.SimpleProductVersion)"?>
-  <Product
-    Id="*"
-    Name="PowerShell $(var.SimpleProductVersion)-$(sys.BUILDARCH)"
-    Language="1033"
-    Version="$(var.ProductVersion)"
-    Manufacturer="Microsoft Corporation"
-    UpgradeCode="$(var.UpgradeCode)">
-    <!-- Properties About The Package -->
-    <Package Id="*" Keywords="Installer" Platform="$(sys.BUILDARCH)" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Description="PowerShell package" Comments="PowerShell for every system" />
-    <!-- Add PowerShell icon for executable -->
-    <Icon Id="PowerShellExe.ico" SourceFile="$(var.IconPath)" />
-    <!-- Add PowerShell icon in Add/Remove Programs -->
-    <Property Id="ARPPRODUCTICON" Value="PowerShellExe.ico" />
-    <!-- Set properties for add/remove programs -->
-    <Property Id="ARPHELPLINK" Value="$(var.InfoURL)" />
-    <!-- custom images -->
-    <WixVariable Id="WixUIBannerBmp" Value="assets\wix\WixUIBannerBmp.png" />
-    <WixVariable Id="WixUIDialogBmp" Value="assets\wix\WixUIDialogBmp.png" />
-    <WixVariable Id="WixUIExclamationIco" Value="assets\wix\WixUIInfoIco.png" />
-    <WixVariable Id="WixUIInfoIco" Value="assets\ps_black_32x32.ico" />
-    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Open $(var.ProductName)" />
-    <!-- Default value of Checkbox of starting PowerShell after installation -->
-    <Property Id="WixShellExecTarget" Value="[VersionFolder]pwsh.exe"/>
-    <!-- This changes the default setting from "reinstall if the file is a newer version" to "reinstall if the file is a different version" -->
-    <Property Id="REINSTALLMODE" Value="dmus"/>
-    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
-
-    <SetProperty Id="RegisterManifest"
-                 Before="RegisterManifest"
-                 Sequence="execute"
-                 Value="&quot;[VersionFolder]pwsh.exe&quot; -NoProfile -ExecutionPolicy Bypass -File &quot;[VersionFolder]RegisterManifest.ps1&quot;" />
-    <CustomAction Id="RegisterManifest"
-                  BinaryKey="WixCA"
-                  DllEntry="CAQuietExec"
-                  Execute="deferred"
-                  Return="ignore"
-                  Impersonate="no" />
-    <SetProperty Id="EnablePSRemoting"
-                 Before="EnablePSRemoting"
-                 Sequence="execute"
-                 Value="&quot;[VersionFolder]pwsh.exe&quot; -NoProfile -ExecutionPolicy Bypass -Command &quot;Enable-PSRemoting&quot;" />
-    <CustomAction Id="EnablePSRemoting"
-                  BinaryKey="WixCA"
-                  DllEntry="CAQuietExec"
-                  Execute="deferred"
-                  Return="ignore"
-                  Impersonate="no" />
-    <InstallExecuteSequence>
-      <!-- Do not remove shortcuts on upgrade to preserve user shortcuts pinned to Taskbar, see https://stackoverflow.com/a/33402698/1810304 -->
-      <RemoveShortcuts>Installed AND NOT UPGRADINGPRODUCTCODE</RemoveShortcuts>
-      <Custom Action="RegisterManifest" After="InstallFiles">
-        <![CDATA[NOT Installed AND (REGISTER_MANIFEST=1)]]>
-      </Custom>
-      <Custom Action="EnablePSRemoting" After="InstallFiles">
-        <![CDATA[NOT Installed AND (ENABLE_PSREMOTING=1)]]>
-      </Custom>
-    </InstallExecuteSequence>
-    <UI>
-      <Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="yes" Text="!(loc.ExitDialogBitmap)" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogTitle)" TabSkip="yes" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogDescription)" TabSkip="yes" />
-        <!-- divider between check boxes and button row -->
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" TabSkip="yes"  />
-        <!-- Button row -->
-        <!-- Checkbox to allow starting PowerShell after the installation (in UI mode only) -->
-        <Control Id="LaunchCheckBox" Type="CheckBox" X="10" Y="243" Width="170" Height="17" Property="LAUNCHAPPONEXIT" Hidden="yes" CheckBoxValue="1" Text="Launch $(var.ProductName)" >
-          <Condition Action="show">NOT Installed</Condition>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.WixUIFinish)" />
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUICancel)" />
-      </Dialog>
-      <InstallUISequence>
-          <Show Dialog="MyExitDialog" OnExit="success" />
-      </InstallUISequence>
-      <AdminUISequence>
-          <Show Dialog="MyExitDialog" OnExit="success" />
-      </AdminUISequence>
-      <Publish Dialog="MyExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
-    </UI>
-    <UI>
-      <Publish Dialog="MyExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">LAUNCHAPPONEXIT=1</Publish>
-    </UI>
-    <!-- Prerequisites -->
-    <Condition Message="Supported only on Windows 7 and above">
-      <![CDATA[ Installed OR $(var.MinOSVersionSupported) ]]>
-    </Condition>
-    <!-- Information About When Older Versions Are Trying To Be Installed-->
-    <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of $(var.ProductName) is already installed." />
-    <!-- Embed Cabinet Files in Product-->
-    <MediaTemplate EmbedCab="yes" />
-    <!-- In Your Wix Setup Project, Add A Reference To WixUIExtension.dll -->
-    <UIRef Id="CustomWixUI_InstallDir" />
-    <!-- Features are mandatory.  Need At Least One. -->
-    <Feature Id="ProductFeature" Title="PowerShell" Level="1">
-      <ComponentGroupRef Id="ApplicationFiles"/>
-      <ComponentRef Id="ApplicationProgramsMenuShortcut"/>
-      <ComponentRef Id="RegistryEntries"/>
-      <ComponentRef Id="SharedRegistryEntries"/>
-      <ComponentRef Id="SetPath"/>
-      <ComponentRef Id="Telemetry"/>
-      <ComponentRef Id="ExplorerContextMenu"/>
-      <ComponentRef Id="PowerShellFileContextMenu"/>
-    </Feature>
-    <!-- We need to show EULA, and provide option to customize download location -->
-    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
-    <!-- Need to get the Windows product name from the registry -->
-    <Property Id="WINDOWS_PRODUCT_NAME">
-      <RegistrySearch Id="ProductName" Root="HKLM" Type="raw" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Name="ProductName" />
-    </Property>
-    <!-- Prerequisite check for Windows Universal C runtime -->
-    <Property Id="UNIVERSAL_C_RUNTIME_INSTALLED" Secure="yes">
-      <DirectorySearch Id="WindowsDirectory" Path="[WindowsFolder]">
-        <DirectorySearch Id="System32" Path="System32">
-          <FileSearch Id="ucrtbase" Name="ucrtbase.dll"/>
-        </DirectorySearch>
-      </DirectorySearch>
-    </Property>
-    <Condition Message="$(var.ProductName) requires the Universal C Runtime to be installed to enable remoting over WinRM. You can find a download link to it here: https://aka.ms/pscore6-prereq">
-      <![CDATA[Installed OR UNIVERSAL_C_RUNTIME_INSTALLED]]>
-    </Condition>
-    <!-- Prerequisite check for Windows Management Framework -->
-    <Property Id="PWRSHPLUGIN_VERSION" Secure="yes">
-      <DirectorySearchRef Id="System32" Parent="WindowsDirectory" Path="System32">
-        <FileSearch Id="pwrshplugin" Name="pwrshplugin.dll" MinVersion="6.3.9600.16383"/>
-      </DirectorySearchRef>
-    </Property>
-    <Condition Message="$(var.ProductName) requires the Windows Management Framework 4.0 or newer to be installed to enable remoting over WinRM. You can find download links here: https://aka.ms/pscore6-prereq">
-      <![CDATA[Installed OR PWRSHPLUGIN_VERSION ]]>
-    </Condition>
-    <Directory Id="TARGETDIR" Name="SourceDir">
-      <Directory Id="$(var.ProductProgFilesDir)">
-        <Directory Id="INSTALLFOLDER" Name="PowerShell">
-          <Directory Id="VersionFolder" Name="$(var.SimpleProductVersion)">
-            <Component Id="Telemetry" Guid="{80520f20-471d-4d08-adc8-bab637627b39}" KeyPath="yes">
-              <!-- Should retain component GUID since this is a shared, non-file, non-registry resource. -->
-              <Environment Id="PowerShellDistributionChannel" Action="create" Name="POWERSHELL_DISTRIBUTION_CHANNEL" Permanent="no" System="yes" Value="MSI:[WINDOWS_PRODUCT_NAME]"/>
-            </Component>
-            <Component Id="RegistryEntries">
-              <!-- create key for easy detection of a particular version of a powershell core package
-                    The upgrade code is used in the key because it will change when we allow SxS       -->
-              <RegistryKey Root="HKLM" Key="Software\Microsoft\PowerShellCore\InstalledVersions\$(var.UpgradeCode)" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
-                  <RegistryValue Type="string" Value="$(var.ProductSemanticVersion)" Name="SemanticVersion" KeyPath="yes"/>
-                  <RegistryValue Type="string" Value="[VersionFolder]" Name="InstallLocation" />
-              </RegistryKey>
-            </Component>
-            <Component Id="SharedRegistryEntries">
-              <!-- register ourselves in application registry so can be started using just Win+R `pwsh.exe` -->
-              <RegistryKey Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\pwsh.exe" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
-                  <!-- As a shared path, the last one to install will overwrite any previous value. It also needs to be in its own component to properly ref-count and be removed when appropriate. -->
-                  <RegistryValue Type="string" Value="[VersionFolder]pwsh.exe" KeyPath="yes"/>
-              </RegistryKey>
-            </Component>
-            <!-- add ourselves to %PATH% so pwsh.exe can be started from Windows PowerShell or cmd.exe -->
-            <Component Id="SetPath">
-              <Condition>ADD_PATH=1</Condition>
-              <Environment Id="PATH" Action="set" Name="PATH" Part="last" Permanent="no" System="yes" Value="$(var.PwshPath)"/>
-              <!-- Can't use a shared component GUID here either since the path we add to PATH varies on the actual directory path. Use a key that represents this same path. -->
-              <RegistryKey Root="HKLM" Key="Software\Microsoft\PowerShellCore\InstalledVersions\$(var.UpgradeCode)">
-                <RegistryValue Type="string" Name="InstallDir" Value="[VersionFolder]" KeyPath="yes"/>
-              </RegistryKey>
-            </Component>
-            <!-- Explorer context menu with 2 submenus to open PowerShell normally or as an Administator.
-                 See https://blogs.msdn.microsoft.com/andrew_richards/2017/03/01/enhancing-the-open-command-prompt-here-shift-right-click-context-menu-experience/ for details -->
-            <Component Id="ExplorerContextMenu">
-              <Condition>ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL</Condition>
-              <!-- When clicking on background in Explorer -->
-              <RegistryKey Root="HKCR" Key="Directory\Background\shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Name="ExtendedSubCommandsKey" Value="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)" KeyPath="yes"/>
-              </RegistryKey>
-              <!-- When clicking on Drive in Explorer -->
-              <RegistryKey Root="HKCR" Key="Drive\shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Name="ExtendedSubCommandsKey" Value="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)"/>
-              </RegistryKey>
-              <!-- When clicking on Desktop background in Explorer -->
-              <RegistryKey Root="HKCR" Key="DesktopBackground\shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Name="ExtendedSubCommandsKey" Value="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)"/>
-              </RegistryKey>
-              <!-- When clicking on folder in Explorer -->
-              <RegistryKey Root="HKCR" Key="Directory\shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Name="ExtendedSubCommandsKey" Value="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)"/>
-              </RegistryKey>
-              <!-- When being in a Library folder in Explorer -->
-              <RegistryKey Root="HKCR" Key="LibraryFolder\background\shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Name="ExtendedSubCommandsKey" Value="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)"/>
-              </RegistryKey>
-              <!-- Sub menus to open PowerShell at the current location either as a normal shell or as Administrator -->
-              <RegistryKey Root="HKCR" Key="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)\shell\openpwsh">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextSubMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-              </RegistryKey>
-              <RegistryKey Root="HKCR" Key="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)\shell\openpwsh\command">
-                <RegistryValue Type="string" Value="[VersionFolder]pwsh.exe -NoExit -RemoveWorkingDirectoryTrailingCharacter -WorkingDirectory &quot;%V!&quot; -Command &quot;$host.UI.RawUI.WindowTitle = '$(var.ProductName) $(var.SimpleProductVersion) ($(sys.BUILDARCH))'&quot;"/>
-              </RegistryKey>
-              <RegistryKey Root="HKCR" Key="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)\shell\runas">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.ExplorerContextSubMenuElevatedDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe"/>
-                <RegistryValue Type="string" Value="" Name="HasLUAShield"/>
-              </RegistryKey>
-              <RegistryKey Root="HKCR" Key="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)\shell\runas\command">
-                <RegistryValue Type="string" Value="[VersionFolder]pwsh.exe -NoExit -RemoveWorkingDirectoryTrailingCharacter -WorkingDirectory &quot;%V!&quot; -Command &quot;$host.UI.RawUI.WindowTitle = '$(var.ProductName) $(var.SimpleProductVersion) ($(sys.BUILDARCH))'&quot;"/>
-              </RegistryKey>
-              <RemoveRegistryKey Id="RemoveOldOpenKey" Root="HKCR" Key="Directory\ContextMenus\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)\shell\open" Action="removeOnInstall"/>
-            </Component>
-            <Component Id="PowerShellFileContextMenu">
-              <Condition>ADD_FILE_CONTEXT_MENU_RUNPOWERSHELL</Condition>
-              <!-- When right-clicking ps1 file -->
-              <RegistryKey Root="HKCR" Key="Microsoft.PowerShellScript.1\Shell\$(var.ProductName)$(var.SimpleProductVersion)$(sys.BUILDARCH)">
-                <RegistryValue Type="string" Name="MUIVerb" Value="$(var.PowerShellFileContextSubMenuDialogText)"/>
-                <RegistryValue Type="string" Name="Icon" Value="[VersionFolder]pwsh.exe" KeyPath="yes"/>
-                <RegistryKey Key="Command">
-                  <RegistryValue Type="string" Value="[VersionFolder]pwsh.exe -Command &quot;$host.UI.RawUI.WindowTitle = '$(var.ProductName) $(var.SimpleProductVersion) ($(sys.BUILDARCH))'; if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; &amp; '%1'&quot;"/>
-                </RegistryKey>
-              </RegistryKey>
-            </Component>
-          </Directory>
-        </Directory>
-      </Directory>
-      <Directory Id="ProgramMenuFolder">
-        <Directory Id="ApplicationProgramsFolder" Name="$(var.ProductName)">
-          <Component Id="ApplicationProgramsMenuShortcut">
-            <Shortcut Id="PowerShell_ProgramsMenuShortcut"
-                      Name="$(var.ProductSimpleVersionWithNameAndOptionalArchitecture)"
-                      Description="$(var.ProductSimpleVersionWithNameAndOptionalArchitecture)"
-                      Target="[VersionFolder]pwsh.exe"
-                      Arguments="-WorkingDirectory ~" />
-            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
-            <!-- HKMU is HKLM when installing perMachine and HKCU when installing perUser-->
-            <RegistryValue Root="HKMU" Key="Software\Microsoft\PowerShellCore\ProgramsMenuShortcut\$(var.SimpleProductVersion)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
-          </Component>
-        </Directory>
-      </Directory>
-    </Directory>
-  </Product>
-
-<!-- Explorer Context Menu Dialog -->
-<Fragment>
- <UI>
-    <Property Id="REGISTER_MANIFEST" Value="1" />
-    <Property Id="ADD_PATH" Value="1" />
-    <Dialog Id="ExplorerContextMenuDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
-      <!-- Banner -->
-      <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="yes" Text="!(loc.InstallDirDlgBannerBitmap)"/>
-      <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Optional Actions" TabSkip="yes" />
-      <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="Initialization and Customization" TabSkip="yes" />
-      <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" TabSkip="yes" />
-      <!-- If the checkboxes are defined first, then they are first in the tab order and can be ticked and unticked using the spacebar -->
-      <Control Id="AddToPathCheckBox" Type="CheckBox" X="20" Y="60" Width="290" Height="17" Property="ADD_PATH" CheckBoxValue="0" Text="Add $(var.ProductName) to Path Environment Variable"/>
-      <Control Id="RegisterManifestCheckBox" Type="CheckBox" X="20" Y="80" Width="290" Height="17" Property="REGISTER_MANIFEST" CheckBoxValue="0" Text="Register Windows Event Logging Manifest"/>
-      <Control Id="EnablePSRemotingCheckBox" Type="CheckBox" X="20" Y="100" Width="290" Height="17" Property="ENABLE_PSREMOTING" CheckBoxValue="0" Text="Enable $(var.ProductName) remoting"/>
-      <Control Id="ContextMenuOpenPowerShell" Type="CheckBox" X="20" Y="120" Width="290" Height="17" Property="ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL" CheckBoxValue="0" Text="Add '$(var.ExplorerContextSubMenuDialogText)' context menus to Explorer"/>
-      <Control Id="ContextMenuRunPowerShell" Type="CheckBox" X="20" Y="140" Width="290" Height="17" Property="ADD_FILE_CONTEXT_MENU_RUNPOWERSHELL" CheckBoxValue="0" Text="Add '$(var.PowerShellFileContextSubMenuDialogText)' context menu for PowerShell files"/>
-      <Control Id="LicenseLink" Type="Hyperlink" X="20" Y="190" Width="214" Height="17">
-        <Text><![CDATA[<a href="https://github.com/PowerShell/PowerShell/blob/master/LICENSE.txt">The application is distributed under the MIT license.</a>]]></Text>
-      </Control>
-      <Control Id="TpnLink" Type="Hyperlink" X="20" Y="210" Width="290" Height="17">
-        <Text><![CDATA[<a href="https://github.com/PowerShell/PowerShell/blob/master/ThirdPartyNotices.txt">Please review the ThirdPartyNotices.txt</a>]]></Text>
-      </Control>
-      <!-- divider and bottom buttons -->
-      <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" TabSkip="yes"/>
-      <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)"/>
-      <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Cancel="yes" Default="yes" Text="!(loc.WixUINext)"/>
-      <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
-        <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-      </Control>
-    </Dialog>
-  </UI>
-</Fragment>
-
-<!-- Customized version of WixUI_InstallDir, which is necessary to add custom dialogs. https://github.com/wixtoolset/wix3/blob/master/src/ext/UIExtension/wixlib/WixUI_InstallDir.wxs -->
-<Fragment>
-  <UI Id="CustomWixUI_InstallDir">
-      <!--
-      First-time install dialog sequence:
-      - WixUI_WelcomeDlg
-      - WixUI_InstallDirDlg
-      - ExplorerContextMenuDialog
-      - WixUI_VerifyReadyDlg
-      - WixUI_DiskCostDlg
-      Maintenance dialog sequence:
-      - WixUI_MaintenanceWelcomeDlg
-      - WixUI_MaintenanceTypeDlg
-      - WixUI_InstallDirDlg
-      - WixUI_VerifyReadyDlg
-      Patch dialog sequence:
-      - WixUI_WelcomeDlg
-      - WixUI_VerifyReadyDlg
-      -->
-
-      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
-      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
-      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
-
-      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
-      <Property Id="WixUI_Mode" Value="InstallDir" />
-
-      <DialogRef Id="BrowseDlg" />
-      <DialogRef Id="DiskCostDlg" />
-      <DialogRef Id="ErrorDlg" />
-      <DialogRef Id="FatalError" />
-      <DialogRef Id="FilesInUse" />
-      <DialogRef Id="MsiRMFilesInUse" />
-      <DialogRef Id="PrepareDlg" />
-      <DialogRef Id="ProgressDlg" />
-      <DialogRef Id="ResumeDlg" />
-      <DialogRef Id="UserExit" />
-      <DialogRef Id="ExplorerContextMenuDialog" />
-
-
-      <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
-      <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
-
-      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">NOT Installed</Publish>
-      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
-
-      <Publish Dialog="ExplorerContextMenuDialog" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
-      <Publish Dialog="ExplorerContextMenuDialog" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-
-      <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
-      <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
-      <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
-      <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
-      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
-      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="ExplorerContextMenuDialog" Order="5">1</Publish>
-      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
-      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
-
-      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="ExplorerContextMenuDialog" Order="1">NOT Installed</Publish>
-      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
-      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
-
-      <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-
-      <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-      <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
-
-      <Property Id="ARPNOMODIFY" Value="1" />
-    </UI>
-    <UIRef Id="WixUI_Common" />
-  </Fragment>
-
-</Wix>
diff --git a/assets/wix/WixUIBannerBmp.png b/assets/wix/WixUIBannerBmp.png
deleted file mode 100644
index 2a1922c1d7c..00000000000
Binary files a/assets/wix/WixUIBannerBmp.png and /dev/null differ
diff --git a/assets/wix/WixUIDialogBmp.png b/assets/wix/WixUIDialogBmp.png
deleted file mode 100644
index 57cf3734c17..00000000000
Binary files a/assets/wix/WixUIDialogBmp.png and /dev/null differ
diff --git a/assets/wix/WixUIInfoIco.png b/assets/wix/WixUIInfoIco.png
deleted file mode 100644
index cb705d5f33f..00000000000
Binary files a/assets/wix/WixUIInfoIco.png and /dev/null differ
diff --git a/assets/wix/bundle.wxs b/assets/wix/bundle.wxs
deleted file mode 100644
index dc577cb36b0..00000000000
--- a/assets/wix/bundle.wxs
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
-  <!-- UpgradeCode GUID MUST REMAIN SAME THROUGHOUT ALL VERSIONS, otherwise, updates won't occur. -->
-  <?if $(sys.BUILDARCH)=x64?>
-    <?define UpgradeCodePreview = "3C90221B-D500-43C6-A4A6-0BE6C2C1B317"?>
-    <?define UpgradeCodeRelease = "7A804CBB-648E-4276-9A58-081862DB1B99"?>
-    <?if $(var.IsPreview)=True?>
-      <?define UpgradeCode = $(var.UpgradeCodePreview)?>
-    <?else?>
-      <?define UpgradeCode = $(var.UpgradeCodeRelease)?>
-    <?endif?>
-  <?else?>
-    <?define UpgradeCodePreview = "4A699A9C-E904-4024-BCD2-44E098A8C6BD"?>
-    <?define UpgradeCodeRelease = "ED46CB02-64B3-43FD-A63E-6CF269D8C21C"?>
-    <?if $(var.IsPreview)=True?>
-      <?define UpgradeCode = $(var.UpgradeCodePreview)?>
-    <?else?>
-      <?define UpgradeCode = $(var.UpgradeCodeRelease)?>
-    <?endif?>
-  <?endif?>
-
-  <Bundle Name="PowerShell $(var.WindowsVersion)-$(sys.BUILDARCH)" Version="$(var.WindowsVersion)" Manufacturer="Microsoft Corporation" UpgradeCode="$(var.UpgradeCode)">
-    <!-- See https://wixtoolset.org/documentation/manual/v3/bundle/wixstdba/ for a list of WiX standard bootstrapper types. -->
-    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
-      <bal:WixStandardBootstrapperApplication LicenseFile="assets\wix\ExeLicense.rtf" LogoFile="assets\ps_black_32x32.ico" />
-    </BootstrapperApplicationRef>
-    <Chain>
-      <MsiPackage SourceFile="$(var.TargetPath)" Compressed="yes" />
-    </Chain>
-  </Bundle>
-</Wix>
diff --git a/assets/wix/files.wxs b/assets/wix/files.wxs
deleted file mode 100644
index 9db382b921c..00000000000
--- a/assets/wix/files.wxs
+++ /dev/null
@@ -1,4063 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-  <Fragment>
-    <DirectoryRef Id="VersionFolder">
-      <Component Id="cmpCBE3857586454EB3B634B118E8EBD1D1">
-        <File Id="filCBE3857586454EB3B634B118E8EBD1D1" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Win32.SystemEvents.dll" />
-      </Component>
-      <Component Id="cmp22EA8B65E9784BB197A5CC42FBFF1788">
-        <File Id="fil22EA8B65E9784BB197A5CC42FBFF1788" KeyPath="yes" Source="$(var.ProductSourcePath)\System.CodeDom.dll" />
-      </Component>
-      <Component Id="cmp9F22B503FD4D4F0286514A511718FD7A">
-        <File Id="fil9F22B503FD4D4F0286514A511718FD7A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.Composition.dll" />
-      </Component>
-      <Component Id="cmp109FF222E78D452BA35ECFBCC4D82F90">
-        <File Id="fil109FF222E78D452BA35ECFBCC4D82F90" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Configuration.ConfigurationManager.dll" />
-      </Component>
-      <Component Id="cmp8814D879AFBA49C8B04509733BCBA556">
-        <File Id="fil8814D879AFBA49C8B04509733BCBA556" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.DataSetExtensions.dll" />
-      </Component>
-      <Component Id="cmpC519DEF229CC44BCBBAF204F0C0EBBC6">
-        <File Id="filC519DEF229CC44BCBBAF204F0C0EBBC6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.Odbc.dll" />
-      </Component>
-      <Component Id="cmp9370476A1A344B97860E4F31A5EA7865">
-        <File Id="fil9370476A1A344B97860E4F31A5EA7865" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.PerformanceCounter.dll" />
-      </Component>
-      <Component Id="cmpD0A5CF777C2D47DA966672B6B07D31A5">
-        <File Id="filD0A5CF777C2D47DA966672B6B07D31A5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.DirectoryServices.AccountManagement.dll" />
-      </Component>
-      <Component Id="cmpE67BDD4BD52046578E30F0B2181877BA">
-        <File Id="filE67BDD4BD52046578E30F0B2181877BA" KeyPath="yes" Source="$(var.ProductSourcePath)\System.DirectoryServices.dll" />
-      </Component>
-      <Component Id="cmpD552ACBBE2F4464EB20C6203358DA51A">
-        <File Id="filD552ACBBE2F4464EB20C6203358DA51A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.DirectoryServices.Protocols.dll" />
-      </Component>
-      <Component Id="cmp71DF4DC4E289477C94DD068527756E12">
-        <File Id="fil71DF4DC4E289477C94DD068527756E12" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Drawing.Common.dll" />
-      </Component>
-      <Component Id="cmp381447C118FA43D99F842934D6F0E6FB">
-        <File Id="fil381447C118FA43D99F842934D6F0E6FB" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Ports.dll" />
-      </Component>
-      <Component Id="cmpC9B33CF1478E4A73A8C48853FEDBF014">
-        <File Id="filC9B33CF1478E4A73A8C48853FEDBF014" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Management.dll" />
-      </Component>
-      <Component Id="cmp9B8B3C498C954C47B35F15527E72C6D2">
-        <File Id="fil9B8B3C498C954C47B35F15527E72C6D2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Caching.dll" />
-      </Component>
-      <Component Id="cmp2CACC20993A24B6183A07B0723E20662">
-        <File Id="fil2CACC20993A24B6183A07B0723E20662" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Intrinsics.dll" />
-      </Component>
-      <Component Id="cmp4477FC97930D452DA018C8F6A3D7D168">
-        <File Id="fil4477FC97930D452DA018C8F6A3D7D168" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.ProtectedData.dll" />
-      </Component>
-      <Component Id="cmp30C10EC477714A76B2A8D0A957D1D6F3">
-        <File Id="fil30C10EC477714A76B2A8D0A957D1D6F3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Xml.dll" />
-      </Component>
-      <Component Id="cmp31176C5A3BDB4A9F95171A4780D7D4D2">
-        <File Id="fil31176C5A3BDB4A9F95171A4780D7D4D2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Syndication.dll" />
-      </Component>
-      <Component Id="cmp3CC027D3F160412C9F0044EBED3115DD">
-        <File Id="filFD2EF6BC74AF459D1BB52CA1E8C6E33B" KeyPath="yes" Source="$(var.ProductSourcePath)\NJsonSchema.dll" />
-      </Component>
-      <Component Id="cmp3B130879A26D2E954251BB81E8948069">
-        <File Id="filAACDEEE28FEA076C73D082A0AD21B8E0" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.CSharp.dll" />
-      </Component>
-      <Component Id="cmp02ABBE4A3EDBEBFD05DC17A009A2B79D">
-        <File Id="fil2BA45911B05AC451EDD9E4944DE3DCE5" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Management.dll" />
-      </Component>
-      <Component Id="cmpAA10498DF244C013CB5043C62E3AA83A">
-        <File Id="filC0D64E45D894A18B2EF5B8542E08102F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Web.dll" />
-      </Component>
-      <Component Id="cmp0068EDEA68F0D5BF766CE0305A9082BA">
-        <File Id="filA48A655199585DFA5D785038D3C734C8" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.Contracts.dll" />
-      </Component>
-      <Component Id="cmpC998327F5549F21F104E42B906FD60C4">
-        <File Id="fil2AB41B473A72FD55578EECEEFF2533DB" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-time-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp36DE82D9AD5932124FEC1B067B0D011D">
-        <File Id="filDED6864E01EE07C9FB9CA2749C56C94F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Web.dll" />
-      </Component>
-      <Component Id="cmp8D31C0EED6D178C8313F057D6EE90970">
-        <File Id="fil1E2CEF14CCAFA3945E18883DD2470572" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.FileVersionInfo.dll" />
-      </Component>
-      <Component Id="cmpEC0174D67CBA8D49D44387CCDC8E7986">
-        <File Id="fil1CEA5D053C438E2B271B665BD41E4C22" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-wow64-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp02D5012CE68A72B4EB57A85BF4E40843">
-        <File Id="filD5DB09D96F86A527D7CEAB0EAFF51B86" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Security.dll" />
-      </Component>
-      <Component Id="cmpF0032BD367B4868B9D0B806AFE081A3D">
-        <File Id="filDA24B4648C7D71A519B6936C515B657D" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-filesystem-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp0AC970BEC366F9ADB96BD5FA34459C23">
-        <File Id="fil3F2F86E92BC30154B4AFAD3F8F43CD83" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.XPath.XDocument.dll" />
-      </Component>
-      <Component Id="cmp268C3104F2C2E1772E901BF932388BA0">
-        <File Id="fil6E79FE3E34AFB4FAA0ADA134D6F5DC0C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.Linq.dll" />
-      </Component>
-      <Component Id="cmp5C3D90690414B641947FDA684E9BE9A9">
-        <File Id="fil82738BB60141FBA68938CB6B5539803D" KeyPath="yes" Source="$(var.ProductSourcePath)\pwsh.exe" />
-      </Component>
-      <Component Id="cmp2F126B84C7D50DC3F8F8E273DD6CE7DC">
-        <File Id="fil8F88BBAEC0F5B596BEAA3853DAEFDFBB" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.WebSockets.Client.dll" />
-      </Component>
-      <Component Id="cmp492FB39320E285A540ADEADE18A5F96E">
-        <File Id="fil4E40359806A4B4741A94233918CCB490" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-threadpool-legacy-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp0C53A9DAF0450D9AD0734770DD18662A">
-        <File Id="fil6653C29C95DDA011D027F382392D8800" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.dll" />
-      </Component>
-      <Component Id="cmpE4D79A97914A11003CA89DB008133BA0">
-        <File Id="filAD118C9A1A6EB4F0ED1729FDC0DDCF43" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Dynamic.Runtime.dll" />
-      </Component>
-      <Component Id="cmpAA3881D6DE91B932AEE8F4C42EF99218">
-        <File Id="fil972CDC4EC86640223727DB00108CF777" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Serialization.Xml.dll" />
-      </Component>
-      <Component Id="cmpBF238203E0B83E373D6EC1297801D549">
-        <File Id="filB18AC8F62602F930B244F0816DBD9A96" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Principal.dll" />
-      </Component>
-      <Component Id="cmpE760EF3FAD245C208A2174DBD78FB079">
-        <File Id="filCEBB50D1A1D5622AF54A784AE3F49282" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.dll" />
-      </Component>
-      <Component Id="cmp4A6D0CCDE897F87246D521912A7F91D2">
-        <File Id="fil1614F25F9864C401059EC49A915E3044" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.ThreadPool.dll" />
-      </Component>
-      <Component Id="cmpFD79004A272CDB8F6FE78139E9D5A8BC">
-        <File Id="filA190C4E58F28CB90BF968BCF1D52FE92" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.dll" />
-      </Component>
-      <Component Id="cmp9EF36C5215C8ACA61D304C3A476AB978">
-        <File Id="filDA8784E3D59162BD357A22CD143DF2D8" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Compression.FileSystem.dll" />
-      </Component>
-      <Component Id="cmp9EF36C5215C8ACA61D304C3A476AB979">
-        <File Id="filDA8784E3D59162BD357A22CD143DF2D9" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Compression.Brotli.dll" />
-      </Component>
-      <Component Id="cmp6C6F29B464717486F94FE5416BFFE029">
-        <File Id="fil57FAF01CE0638DCB4B3473056CE1B49B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Metadata.dll" />
-      </Component>
-      <Component Id="cmpFF8748C4903DCFC623FFDA416F2AE314">
-        <File Id="filC0DEC4F5D91C81FCF4777186AD29D611" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-ro-typeresolution-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpCC81CFD99DC82F17A1EA3D8763C0B35B">
-        <File Id="fil9CA808BFA526CF7688EED5105251D4C2" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-string-obsolete-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp52FBB26F92105AD3AD35C220A657AD2A">
-        <File Id="fil4368B0042787DED34FE6630A87B55358" KeyPath="yes" Source="$(var.ProductSourcePath)\mscordbi.dll" />
-      </Component>
-      <Component Id="cmp717F2424B3CF81CE7C4CF659DB544785">
-        <File Id="filF7F095921CD48A7EB311C4E636C4B4BE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Management.Automation.xml" />
-      </Component>
-      <Component Id="cmpE76D27D7B5D2ABAF88E777361EB91660">
-        <File Id="fil47B903568DF7E9B8A73851F7E4A2FEAB" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Eventing-Legacy-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp3BBD9887A33167372318718FF8D1AEDB">
-        <File Id="fil3A265404B89A7B66638CD6249A872235" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-utility-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp3233756873AD35E45D8AFF0DECB12A10">
-        <File Id="fil8FA95BFDD5FD05813DE64D663DAEF2C7" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Cng.dll" />
-      </Component>
-      <Component Id="cmpC34CACA6E967ECA4F9CCF56570BD8185">
-        <File Id="fil86BFC3F494414BCAD87DBEFCB224C6EE" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-private-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmpFD7E03A554A320F567F49F8211D93A59">
-        <File Id="fil88C312289A4A16E91764CC7A693178D5" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-console-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp580A12A38C2531DBD6B76F4A159A7A84">
-        <File Id="fil79E4FCD27530036F78FCF8EF09B2AF45" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.EventBasedAsync.dll" />
-      </Component>
-      <Component Id="cmp65A9F72C0AE530B5080F50972BD208B0">
-        <File Id="fil0EBDC3A5667954155B167DBA3D2F3E0A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-registry-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpCC2EA506ACC015C30257216EB54EF45C">
-        <File Id="filF929D1F6273B2D99D06A623E318B63D0" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.DiagnosticSource.dll" />
-      </Component>
-      <Component Id="cmp23FD946C6681D6747F1B638ECBE8C8BC">
-        <File Id="fil575A7B8E291C10417BD21C83494AAC1C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.EventLog.dll" />
-      </Component>
-      <Component Id="cmp4B935A8190C2D7D1F0E0DB9E5AAD7F30">
-        <File Id="fil17D752C2CF130AAC7BD4470E8E59E0FE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Permissions.dll" />
-      </Component>
-      <Component Id="cmp2B60F4AC2E8D95A558C3E121A6252D37">
-        <File Id="fil8E8E3BF1C97D92DFEB4FC97D778F238F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.CompilerServices.VisualC.dll" />
-      </Component>
-      <Component Id="cmp5977DC14DE00AD6E597A2FEBB8C3B58B">
-        <File Id="filEE7925E7A712381B024DAE39831F7AEB" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.dll" />
-      </Component>
-      <Component Id="cmp689C7CE34E0246D8B56D370E898354CE">
-        <File Id="fil41BA8405669095002402115395C528D6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-private-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp634E012FEF6122735D91DE4B1BCC1116">
-        <File Id="filA6CD4693B91587C49C03C169292C4467" KeyPath="yes" Source="$(var.ProductSourcePath)\netstandard.dll" />
-      </Component>
-      <Component Id="cmpDB015975B1AF141A6CDDA12B31DA2B74">
-        <File Id="filAB89FE6AB1DADD58D58CAEF1DB5535C1" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Management.Infrastructure.Native.dll" />
-      </Component>
-      <Component Id="cmp78C94EF3D79D1B59DE4388AA2667668E">
-        <File Id="fil3B354385633C6093E72CB08E11614534" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-string-obsolete-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp2C924B87CA7B55E4B688163D0424BF1B">
-        <File Id="filCE0E4D674C0174C77D9D65543C16D1E7" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.VisualBasic.dll" />
-      </Component>
-      <Component Id="cmp0D69AF816E19455A8CF5034C61317EA3">
-        <File Id="fil8C7C4F9B663882D6E458709F9E960D1C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.UnmanagedMemoryStream.dll" />
-      </Component>
-      <Component Id="cmp0D69AF816E19455A8CF5034C61317EA4">
-        <File Id="fil8C7C4F9B663882D6E458709F9E960D1D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Memory.dll" />
-      </Component>
-      <Component Id="cmp9517BE666A9E7C23D64C30BB87042294">
-        <File Id="fil8143B5E64F2386C860822E87526A6629" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-winsvc-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp20E61B6FB720A911BF811B96C3D45849">
-        <File Id="filDDFDBF4A80E8D78988F324D618FE8AD0" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Http.dll" />
-      </Component>
-      <Component Id="cmpD28050E830C7622BACAB507E9B96785E">
-        <File Id="filFCA0110393F714783961BE30134AC9CD" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processenvironment-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpBECA40B2C3C12E0305699CA1817C9F5D">
-        <File Id="filEA9F344FCC5D9139BD56D1D572D8F1A2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.FileSystem.AccessControl.dll" />
-      </Component>
-      <Component Id="cmp90EDB840A03FF0E0AB30DBA7DDD1BCE1">
-        <File Id="fil2A715AB455F52B769E9CDB44D6673311" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Utility.xml" />
-      </Component>
-      <Component Id="cmp433305CEF42F648A101FB57F72AE371A">
-        <File Id="fil629A79C359986D653B8CBFC19696CE20" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.XPath.dll" />
-      </Component>
-      <Component Id="cmp37330FDB9A02F3FB463D113D31EDCA86">
-        <File Id="fil28CC4368AD2429118839DE4A8F8B748B" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processsecurity-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp28A6204649AC15DA0210CE3067308BDE">
-        <File Id="filAD7A1E9276AC1F8C21308870DF4A5F32" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-normalization-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpA4C6AF97A7B02D8D55E1E09AB7F74558">
-        <File Id="fil4D7DC681B9B221FD8DDDD6FF9C31CF22" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.XmlDocument.dll" />
-      </Component>
-      <Component Id="cmp06E8C21C125E29603C631488D5EBC1CA">
-        <File Id="fil33FE96846639CB621C7B04A56ED64E24" KeyPath="yes" Source="$(var.ProductSourcePath)\hostfxr.dll" />
-      </Component>
-      <Component Id="cmp18FD8ABAE1B131CE3834F0E2BB07E5B8">
-        <File Id="fil4107C2714D75DB3C2AFC183E124E17DB" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Management.Infrastructure.Native.Unmanaged.dll" />
-      </Component>
-      <Component Id="cmp8552B147D2AAFD164533C72368BFB61C">
-        <File Id="fil04EEAADB490702694BCFB90B84B878D7" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-robuffer-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp33AA41435A9FDD75B7D5FA6869C6F441">
-        <File Id="fil4E4BF6DF7AC1C464DBEB5F6246C5C280" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Configuration.dll" />
-      </Component>
-      <Component Id="cmpF51764A0306591EAE22DAC7C60CD94C3">
-        <File Id="fil1BC881DF9ACC129CBAC5E043ADB7E9EB" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Resources.Writer.dll" />
-      </Component>
-      <Component Id="cmpCF291BFA1FC042E050794DC43CC97162">
-        <File Id="filDD45641EFE4035109C19BB11116B801F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.CompilerServices.Unsafe.dll" />
-      </Component>
-      <Component Id="cmp9D2C3D8592740F45A1025E694A190D9C">
-        <File Id="filC8752C98C22FEFDF0E0D6E4F392D5DA8" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Console.dll" />
-      </Component>
-      <Component Id="cmp3CF2B598C782E6BBFA0572EBC7EE5EE5">
-        <File Id="fil486D64F7541D6C5902F19E6DD79F8236" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Sockets.dll" />
-      </Component>
-      <Component Id="cmpA9E19364F0E8E65EEF3BEE2267DE1F9D">
-        <File Id="fil06BD50C76AC75A5A6A9942E866DAA5BA" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Http.dll" />
-      </Component>
-      <Component Id="cmpEC913527EE251703E92C268807513DB0">
-        <File Id="fil2B7CA630F00452E989801FA9B511BDED" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Web.HttpUtility.dll" />
-      </Component>
-      <Component Id="cmpD8208C4E8508687BF4672F2A0EB64E67">
-        <File Id="fil11DF240B71EE5A0C345D4F95DBC046AF" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.Encoding.Extensions.dll" />
-      </Component>
-      <Component Id="cmp16E86C327EA784631EE474C8518A5FA5">
-        <File Id="fil1CEBD571C75DF062242D58847A8778C5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.NetworkInformation.dll" />
-      </Component>
-      <Component Id="cmp4CB166B799668590C946561BBF2EFDE1">
-        <File Id="fil0190F42D9CCACA0269421EFE6529CC5B" KeyPath="yes" Source="$(var.ProductSourcePath)\mi.dll" />
-      </Component>
-      <Component Id="cmp07CBFC92249F39E209D5A16F80B9B54B">
-        <File Id="filCDE53CA156BB4F7FECF572E36EDD5814" KeyPath="yes" Source="$(var.ProductSourcePath)\ucrtbase.dll" />
-      </Component>
-      <Component Id="cmpB9AA376C913A011DB4FCF8058BBA8243">
-        <File Id="filCF52386189A53C286BDEF8C9B52CA4F2" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-errorhandling-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp91FC3112769800144B79BEECAD84D60A">
-        <File Id="fil3EFD21D71624904B663676389EC4AC6C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-file-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpC3FFE4945C208FFF74B59235DE2524CF">
-        <File Id="fil4218FAC2CC51817C686AF14AAC6FEDA3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Principal.Windows.dll" />
-      </Component>
-      <Component Id="cmp15AFF93E2D617D9DE5CDC199C300E4DD">
-        <File Id="filD9E55D71A3E7EAD811149113EBD9C56E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.dll" />
-      </Component>
-      <Component Id="cmp104BF385BB4C3CF9750E85D0E8920B23">
-        <File Id="fil94BDC941965711885C978AB8E58338EA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-xstate-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp35BE916168DCD7CEDDC7D8A2C72F6FED">
-        <File Id="filCAF39F57D1C313F734A8643F40DD7E0D" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-heap-obsolete-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpB3D5B3B0C9FE6C6A76115D09B1099682">
-        <File Id="filB0A2D715ECAE6A71E58D5620117DC4B4" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Claims.dll" />
-      </Component>
-      <Component Id="cmp9568B438265B4B9537FB278425E51F9D">
-        <File Id="fil46D59ACE8329EFA5955268D7C878A914" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Primitives.dll" />
-      </Component>
-      <Component Id="cmp96F5D79C2A39A3FCE2832C9F0DA1FFB9">
-        <File Id="filCF906F4CAD0CC2DA920E25665319E672" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.Primitives.dll" />
-      </Component>
-      <Component Id="cmp7F0E91316B501D5C0C5FDC147C91981E">
-        <File Id="filB2058AD00ED3F7C051D3F6A4705F37C6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.FileSystem.DriveInfo.dll" />
-      </Component>
-      <Component Id="cmp49EA2B6077C3CFE16C87CE6C69B211FB">
-        <File Id="filDB9405064AEB93B55BA7A5608BBBFA97" KeyPath="yes" Source="$(var.ProductSourcePath)\Install-PowerShellRemoting.ps1" />
-      </Component>
-      <Component Id="cmpFD2810C7EB4AE4047C456491CE5AABA5">
-        <File Id="fil85181A3D9E2FA46E2948D559AA2C0ECD" KeyPath="yes" Source="$(var.ProductSourcePath)\hostpolicy.dll" />
-      </Component>
-      <Component Id="cmpCB73A07CE8A738AA1591F9E7C13B0DC6">
-        <File Id="fil419AACC589CA54F69185792E235354ED" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-threadpool-private-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpF719432933DD98076D8DC76F7CDF5873">
-        <File Id="fil2A29CF5D42227D76E482BA9FC9AEE510" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-sddl-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp1941A7354E2716358AAAFF73CC82FD5A">
-        <File Id="fil0B541F0B5771BB99EA46800B713FB631" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.CodeAnalysis.CSharp.dll" />
-      </Component>
-      <Component Id="cmp669738F33BAC5E1BAE50F3215C98E413">
-        <File Id="fil69ED3368328D82BAE4229C02269E944B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.X509Certificates.dll" />
-      </Component>
-      <Component Id="cmp7C918B64BCE3FB35E1CC46F248EC19CA">
-        <File Id="filD3045063A7DB4CF6E0089E8141CC5C0E" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.WSMan.Management.xml" />
-      </Component>
-      <Component Id="cmpFE8DC0C226472F454DB6C4215FD68B98">
-        <File Id="fil79BB00B9DC2F4220E44C1104D43A895C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Primitives.dll" />
-      </Component>
-      <Component Id="cmp5FAAF1291504DF59081EF8F6E96FD8CE">
-        <File Id="fil34A3165883DC63493497C5C2ED6AFFDD" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Numerics.dll" />
-      </Component>
-      <Component Id="cmpE055F2004E1479FA6B4D7510DFCC9F1D">
-        <File Id="filC99F3C9FD82C6494BDC2C4C6A73E7D4A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-errorhandling-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp77CC2EF6D97E13B55707EED8DC63EEC8">
-        <File Id="filD0870435A5B134071E218EAC8EF1DD5A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-cryptoapi-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpF942FF1161AC1F9C83A3D6676E8E9A4B">
-        <File Id="filCEE0CD23A96F9B24F21D225BAC09CAE5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.FileSystem.Watcher.dll" />
-      </Component>
-      <Component Id="cmpDE30E0D93EFD2C6AB2915E8BB0944FDF">
-        <File Id="fil2475EC8834F26D4D54E7CA80434AC63D" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Eventing-Consumer-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmpFB4ABE0562394C67AF3F84DAD5DCD1EA">
-        <File Id="filAFE9772FFD6C2C5C1F50DE7B3CB0519F" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-com-private-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpD49FA4B84FFCC31FC3E727D1D4F8B90F">
-        <File Id="fil8F95D4B84EA33F6FFA0C620A0ED329C9" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.TraceSource.dll" />
-      </Component>
-      <Component Id="cmpC26581911B1D95692FE9CD4E52E093D0">
-        <File Id="fil117E4F1D5E7AE673F138A78B00980769" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-registry-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmpC6593A8DA78C5D231EFBE229F2AA7F6D">
-        <File Id="filB3374458847DF286A86840FFDF3D56C8" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-console-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmp670F6F3CA4A21026C71203A94EF9F57A">
-        <File Id="fil958FE11B0C532F00B66AD150DBCCF679" KeyPath="yes" Source="$(var.ProductSourcePath)\pwsh.deps.json" />
-      </Component>
-      <Component Id="cmpF83B856F8ECFE51256947060F4FCA385">
-        <File Id="fil5F63D1773F4E4192FA72D2088592F792" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Emit.Lightweight.dll" />
-      </Component>
-      <Component Id="cmp1000361436DD46A7A215CE64CCB3070F">
-        <File Id="fil9806E0C3A4E47BAB9084220B46D38E6D" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-delayload-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp3C4A26443C1FF5DCF10620805BA1810E">
-        <File Id="fil1219FE1887E2A8387C8AD89E97035F5E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.Encoding.CodePages.dll" />
-      </Component>
-      <Component Id="cmp46562550D9D7CE53CAB162E828DE0283">
-        <File Id="filF9CC0FF66E3FDFE703063A59EA0FC7E8" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Linq.Expressions.dll" />
-      </Component>
-      <Component Id="cmp0DD31480ADEA8E2FE03F202EAC7410DA">
-        <File Id="filCA5AF6E212D338ED8190A2CF8C30A64B" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-process-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp8D3944B62C435DB200C2997753F11B4C">
-        <File Id="filC38FA53191DC840B249A5E70B7111474" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Timer.dll" />
-      </Component>
-      <Component Id="cmpCA53F2E8DB1BC17C1D52DF65193093F5">
-        <File Id="filD3BDE3BC7427EB2FEC69536ACFE61BD8" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.InteropServices.dll" />
-      </Component>
-      <Component Id="cmpA2AE100BE9A48176C32A44F8EAFED87F">
-        <File Id="fil51942620832D103D1578529E4E3ADE4A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Pipes.dll" />
-      </Component>
-      <Component Id="cmpA2AE100BE9A48176C32A44F8EAFED880">
-        <File Id="fil51942620832D103D1578529E4E3ADE4B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Pipes.AccessControl.dll" />
-      </Component>
-      <Component Id="cmp67AFE3748590F117178E5617E219F1F8">
-        <File Id="fil97A434048B02E6A1D47A7B2662623A9A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processthreads-l1-1-2.dll" />
-      </Component>
-      <Component Id="cmp734102C1EBBE0D4417B67AA90D416EC4">
-        <File Id="fil2A4D34AE8559DDC2E9857799701C48A5" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-StringAnsi-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp04AC57A0E3245015D9DFB332698F3E26">
-        <File Id="filD484411B6AE3B42F2DABD1739690E702" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.HttpListener.dll" />
-      </Component>
-      <Component Id="cmp1E29A0D7860190642C2D8504982890F9">
-        <File Id="filDAAF9305BBAD857AA9CAB6751F36659B" KeyPath="yes" Source="$(var.ProductSourcePath)\clrjit.dll" />
-      </Component>
-      <Component Id="cmp2FB548B56B09B010468883CA4073600D">
-        <File Id="fil14F804504728E51F98C2B6CA5AE34FFE" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-Kernel32-Private-L1-1-2.dll" />
-      </Component>
-      <Component Id="cmp4D3236B49B126CF9FFC5234678B3B302">
-        <File Id="fil45A37A6A6BF9B8DC936724BC40BAEDC5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.RegularExpressions.dll" />
-      </Component>
-      <Component Id="cmp175D272DFC7FF99BFB93DD4C19681023">
-        <File Id="fil1CEFF33EF14BA698805AFE523DC65241" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Diagnostics.xml" />
-      </Component>
-      <Component Id="cmpBCA9F625A04F14271B3727E3DB3182CB">
-        <File Id="fil0405983B2561B7D7E53E5931351D7607" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-heap-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpAEA2387D6556C1CBCD2E10B2E71FFAA1">
-        <File Id="fil18F650B6DD78EE81D1D242C20EBB9E41" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-shlwapi-legacy-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp2F8D30568317F98B5965066D6D186037">
-        <File Id="filAD97565F90A4823BF51772C3ABA6F33E" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Management.Infrastructure.CimCmdlets.dll" />
-      </Component>
-      <Component Id="cmp61361B29279CEB7B0434A889BB3C3B71">
-        <File Id="fil4FC5465AEEF8F0898CDF111AD69ED032" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Serialization.dll" />
-      </Component>
-      <Component Id="cmpFCCFD9A69F8311B86AF6ECFD358911D6">
-        <File Id="fil8D0430F98B9E86EC58E5995FE146202D" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.ConsoleHost.xml" />
-      </Component>
-      <Component Id="cmp4C42AE293DE5ECC32068657DD0E1E109">
-        <File Id="fil7F290AA9461B201CC430D62AB361BB5C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Compression.dll" />
-      </Component>
-      <Component Id="cmpB33F1D8B38414D02BC417B7221BB2C92">
-        <File Id="fil67677DBEFAD32470E776301630C99956" KeyPath="yes" Source="$(var.ProductSourcePath)\dbgshim.dll" />
-      </Component>
-      <Component Id="cmpD53ED8782D7CC7C913ECB3436A2FD7D7">
-        <File Id="fil2F2D79333159F787952C64D7D01486A7" KeyPath="yes" Source="$(var.ProductSourcePath)\pwrshplugin.dll" />
-      </Component>
-      <Component Id="cmpEA2A37C87C5D278D1C97725C0BE5E814">
-        <File Id="fil8D602F2046030D2832416FAD3B277F52" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-localization-obsolete-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmp1A9CC77C3CEB765A85E2A5D41237626C">
-        <File Id="fil0264B1880EB060B54A0B4E576FED9907" KeyPath="yes" Source="$(var.ProductSourcePath)\PowerShell.Core.Instrumentation.dll" />
-      </Component>
-      <Component Id="cmpD5D62965C267D4B4347E027709E5DE28">
-        <File Id="fil56F0C57BF3C1E452E50D850EA72DB17E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Tasks.Parallel.dll" />
-      </Component>
-      <Component Id="cmp41178538CA436F109303D32F58555D03">
-        <File Id="filEF2D2043BE8423EA447CA7D3288FF668" KeyPath="yes" Source="$(var.ProductSourcePath)\WindowsBase.dll" />
-      </Component>
-      <Component Id="cmpD81F583B13E6C2D6E4F2CE880505FA06">
-        <File Id="fil9C3E2E66F5E96B81360EE355B34B5884" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.Xml.dll" />
-      </Component>
-      <Component Id="cmpB9583E9956348FD3CA8882B90B6EA5C2">
-        <File Id="filA8C9ECE90BF9CF199B34C376E6607F6F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Collections.NonGeneric.dll" />
-      </Component>
-      <Component Id="cmp2D91B1A06F475760CF19519E4C2CC84A">
-        <File Id="fil31CEFACA9FA241943FA590181557B5A3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Collections.Concurrent.dll" />
-      </Component>
-      <Component Id="cmpD46F8000F402AC1F58F8C5457CD90ADE">
-        <File Id="filD0097CAAB507B9429F41B235DDE07069" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-Kernel32-Private-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmpE66ABF016916C709133CA0DB9366469F">
-        <File Id="filFA000A944FE548C097C84147D0CA21CF" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processthreads-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmpECCD26D8C540FA35F5C633B318EB742E">
-        <File Id="fil38A8C3ECF0FC07CA43DDD606D658FD52" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Overlapped.dll" />
-      </Component>
-      <Component Id="cmp644DFED4A59040568D091F0EA5F691E6">
-        <File Id="fil69EA4231E04E7B76EE0676A3C7EB4F91" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Pkcs.dll" />
-      </Component>
-      <Component Id="cmpCC989C2FC3319628C5A0897A9CDB4C7D">
-        <File Id="fil2FBB26045517B5A73BF6024C55539694" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processthreads-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpC9085D713FC071587C61ACFE51384BDD">
-        <File Id="fil66F905C6F4A541A57FCD88B5185585C3" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-Kernel32-Private-L1-1-1.dll" />
-      </Component>
-      <Component Id="cmpB942FEF3BC11F835DF30CDDD845486AD">
-        <File Id="filDC4E31FB49CF8CF0C75DD0029CF396A7" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.Encodings.Web.dll" />
-      </Component>
-      <Component Id="cmp7C30328B9DC0AAABC18A5CA8E7F7488D">
-        <File Id="filEF46D5E9B250310D2B78E5F3BBD71219" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.Serialization.dll" />
-      </Component>
-      <Component Id="cmp13A6DAF93DDD3EAC212153536C80BF67">
-        <File Id="fil8745DBE452D67BEADF7DF9BCF43A1ADA" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Handles.dll" />
-      </Component>
-      <Component Id="cmp9DE0F8A88DAD103A050B1F26D893BEF9">
-        <File Id="filA695C5FF4F377748DD2A18FE1A7A865C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.WebProxy.dll" />
-      </Component>
-      <Component Id="cmpB22A40932F4E4471B6D5B34DC9FA758A">
-        <File Id="filE74DA95F2E0931B08334D078634AC674" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.SqlClient.dll" />
-      </Component>
-      <Component Id="cmpD195B2A584856051C325572DBB7E0FA9">
-        <File Id="fil321DC142C4188439C758A94A2713C521" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.SDK.dll" />
-      </Component>
-      <Component Id="cmp1043F63E626C53139A6B800DE19F1D31">
-        <File Id="fil0EB434BCEE047250C3BD80952FC61DA0" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ObjectModel.dll" />
-      </Component>
-      <Component Id="cmp5EFA00ED72CAE35E2305583E29C7C0E7">
-        <File Id="fil7B391D35320BDE264190F5B0E15027A3" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-comm-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp40742AC331A13D877BE3085F0E2E5017">
-        <File Id="fil3BED8CDA46F8260F0D9D103D1DE598EC" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-convert-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp5E5EC336758293C396FB70037EAECB51">
-        <File Id="fil822A044DA3EDC8B87F6455195D0EA67D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.CoreLib.dll" />
-      </Component>
-      <Component Id="cmp283684B3318BCD5A91BF7209D7334305">
-        <File Id="fil784BD86176B1BFD7016FD9FC7DA3EEA1" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.WebHeaderCollection.dll" />
-      </Component>
-      <Component Id="cmpA49D505499A05C526F7BB28E03781BAD">
-        <File Id="fil3A149DC49629023F9881E06A3A232A56" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-private-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp0A0A39DD78246C9E3C90FA18EC033480">
-        <File Id="filCE4963B76A7BA5A844237E14E9F61ABD" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-xstate-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmp3C23CFE2F3E20CB67AB209A01D404991">
-        <File Id="fil730B988B1A97362AAB610BEDF1E1A5F0" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-file-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmpD34C8CD8BF5F802DCE6D79BD031400F6">
-        <File Id="fil27A678473205AA4BD5E8DE285BB16AED" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.InteropServices.RuntimeInformation.dll" />
-      </Component>
-      <Component Id="cmp4696307ABC78C14C575582B4755098FB">
-        <File Id="filD15642D7F0118001F83F8C5B6AE3541A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.TypeConverter.dll" />
-      </Component>
-      <Component Id="cmpC0838E8C57D468419FA312FCDC692C2D">
-        <File Id="filE92700424FB4BB41804808AC33421D6D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Mail.dll" />
-      </Component>
-      <Component Id="cmp53AF51D171028D3271F1D0D78B95C0B4">
-        <File Id="fil71F21DF83265410E2E6A3D219D850DB0" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-debug-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp638B7DC05FC5B4ABB321BFEAF36D6C2F">
-        <File Id="filB2EC26320BDBF8A5059651D849DDF4FB" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-debug-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp79CAE24B87836EB856F795A0F0C0277A">
-        <File Id="fil12A170221FD22352E7324E6890C04CA6" KeyPath="yes" Source="$(var.ProductSourcePath)\pwsh.dll" />
-      </Component>
-      <Component Id="cmpC46C08E02A4A83F863F812A3EC12B002">
-        <File Id="fil56D0EBA7160415FFEC9BB4068E6F0D6D" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.CoreCLR.Eventing.xml" />
-      </Component>
-      <Component Id="cmp9782F919130CAF5E0CF02FE60CC64205">
-        <File Id="filF9EB1A5DED2C9516E95538829345103D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Tasks.Extensions.dll" />
-      </Component>
-      <Component Id="cmp6E73647D495A1EA3BE6C1A2F86D804FC">
-        <File Id="filB478492CAABC7EE17FECCFF0AB30DB70" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Linq.Parallel.dll" />
-      </Component>
-      <Component Id="cmp1E51AA1C97285F18C1F3502915AC2142">
-        <File Id="filB885B41EC08A61B003A7E2B0A8C03AA7" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-processenvironment-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmp8C0438E44E39800EA412C6D1DF647015">
-        <File Id="filAD9895244BE9130C2D45E8E9926AC9F6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.XDocument.dll" />
-      </Component>
-      <Component Id="cmp2460170ED7A1590E536AC4DFA2A090C4">
-        <File Id="fil4E3587A7E196B2C031760DA9F753FFB6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-stdio-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpDA3111DDBA4FDD64BF4EFCD32783E9D7">
-        <File Id="fil2F3F18223A914D352BB0E9063DB48132" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-file-l2-1-1.dll" />
-      </Component>
-      <Component Id="cmpDDAD601E3283C9A170131D9676843483">
-        <File Id="filCC01AF1DE2FE65E4DF7CCE5C6CDB096B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.SecureString.dll" />
-      </Component>
-      <Component Id="cmp4AF23AD5CF83E8C3CA23CE6DBF09DAB7">
-        <File Id="filB255F4E595D82780CB1FEB55B1183B07" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-localization-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmp05645B419F5DAB7E6BC89BD9531A9755">
-        <File Id="fil14AE20B0568E9371BA26F1190ABAD834" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Win32.Registry.AccessControl.dll" />
-      </Component>
-      <Component Id="cmp2C1C15AF6A853A37210F9952FF8276EB">
-        <File Id="filA85B43C96E1908D618FCB8D63A8D4889" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-file-l1-2-1.dll" />
-      </Component>
-      <Component Id="cmp45F95FD91411CA915989BD31546E10D1">
-        <File Id="fil2ACD94A1805C0347571BB794FF4D90C3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.Annotations.dll" />
-      </Component>
-      <Component Id="cmpDA00EC2351C7C8CD19772559BAEB6DD6">
-        <File Id="fil47622DFE076EB13E5887DF8226C496B0" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-localization-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmp0F8AC22D198FF9516030549234B252F8">
-        <File Id="fil1735E18A9DFF6425B5557342574D789F" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Security.dll" />
-      </Component>
-      <Component Id="cmp8C0CE0CEB2C635A3548CCA5419C133CD">
-        <File Id="filEB3C9141B41E1E7840F985911810C808" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-url-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp2894FC5AF337A8727F082F5A0E568CC0">
-        <File Id="filD43C17E491FD12424F3AE1157D0F5D5C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-datetime-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp8D09BA10F62939C1D17CD5C08719F9BF">
-        <File Id="filB0D5E1DC5CEE7556AEC1C22E2BBD60AF" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.DataContractSerialization.dll" />
-      </Component>
-      <Component Id="cmp0B5700EBDA661492378A8D2BE4B0CCC2">
-        <File Id="fil023ABEEC5E80CFA3C9D1E2BCB0071B8A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.FileSystem.Primitives.dll" />
-      </Component>
-      <Component Id="cmpE69980AC1BF483BDE6C2D72667346B7D">
-        <File Id="filE124E67C0439BFE80E13D0ED101FDA33" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.WSMan.Runtime.dll" />
-      </Component>
-      <Component Id="cmp2D1EF1D94DDCAFF77A9EEC75A59A633C">
-        <File Id="filB59D86B52FD974C485326ABCC080C99C" KeyPath="yes" Source="$(var.ProductSourcePath)\mscorlib.dll" />
-      </Component>
-      <Component Id="cmpDA936E7EF0404307D9CAAA7A365EDC24">
-        <File Id="fil9BA469F99DEACB9C3889D424BCF527BE" KeyPath="yes" Source="$(var.ProductSourcePath)\RegisterManifest.ps1" />
-      </Component>
-      <Component Id="cmp9DB38F210B5251337BFF171CF8092C02">
-        <File Id="fil90EA9C9E54ACBA3E61BD34100F6F87C2" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-datetime-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp5DE1EE232F232719DFB8EC9DF88FDE03">
-        <File Id="fil2135FED9A28927554E9E89521120FA3D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Primitives.dll" />
-      </Component>
-      <Component Id="cmp2C835739E602911F79B064D2F0CB241A">
-        <File Id="fil549A117D31563F4FCC465AFCCC72288B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Compression.ZipFile.dll" />
-      </Component>
-      <Component Id="cmpC57663058794D67CD71E9334A7DBFB11">
-        <File Id="fil498537DD5C38285E4B3A1C50B2B0E23A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.dll" />
-      </Component>
-      <Component Id="cmp5084DA048CE4466B2B33CC19E8E160C0">
-        <File Id="fil22B3F0CDB4C28A54A92A1BB0E052A83E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Linq.Queryable.dll" />
-      </Component>
-      <Component Id="cmpA1069497315F9B59DAC010E401DDE5F8">
-        <File Id="fil69DB03AA03FFEAF820E08A0697ECAEB6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Resources.ResourceManager.dll" />
-      </Component>
-      <Component Id="cmp79B0C6718C0A7BFE6B6810F6DAD41E81">
-        <File Id="filF60A905BFBF12DDCE7C1AA276A2F050F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Resources.Reader.dll" />
-      </Component>
-      <Component Id="cmp7A2455D41F5640E0038318F3C93E6183">
-        <File Id="fil965530F52B393BAA6F9F5DAC76DF62D5" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-math-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp017F1FE334055D7A9ED621D69CE55DD4">
-        <File Id="fil7108E4467B9B1B6950FDA3885B294F4B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Collections.dll" />
-      </Component>
-      <Component Id="cmpC962D0075A7DCFD1C87041AF911A97C4">
-        <File Id="filFB91171A35689958EF80BFA34AF822C9" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-localization-l1-2-1.dll" />
-      </Component>
-      <Component Id="cmpAF7B98CB7B1CC0D4106B4C84AA309583">
-        <File Id="filAE3B54B12338F68C0A696BD16AEB3EFD" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Emit.ILGeneration.dll" />
-      </Component>
-      <Component Id="cmpEE2EE1FE3AAC419D5923F7AA11FC0428">
-        <File Id="filE81524048CBD2CA1A82F7B890435F3C0" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-file-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmpAC7C31925201F03A444F9E7FF233A2E2">
-        <File Id="fil8E1A9C9244DC7CD633105FABAEA43302" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.Common.dll" />
-      </Component>
-      <Component Id="cmpC89F4A0C4FCF5246E06A4731AA00C0DB">
-        <File Id="fil45FD220795A0E966BB78B221ED9848E6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.NameResolution.dll" />
-      </Component>
-      <Component Id="cmpDB3B9CEC7C9F97F45B27DA073C1B9741">
-        <File Id="fil2B7ECADE2F11AF121935A7485EA61D16" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-psapi-obsolete-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp6FFA891A2BA5D635134A4BDD472C137A">
-        <File Id="fil942517CC055709BF43D443442DC3337A" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-devices-config-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp52295A769FD374E0181E6FC42AF3B629">
-        <File Id="filF314A6F1C7F0B5A9BDF8EBA66F395B62" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.dll" />
-      </Component>
-      <Component Id="cmpE6A39823164370DE762EB2160B7C052F">
-        <File Id="filB4F6AB38C1BB290BE6CD067A4231F065" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-namedpipe-l1-2-1.dll" />
-      </Component>
-      <Component Id="cmpE63E1F7A32DC1B4394F26FCF12FE68BE">
-        <File Id="filBF797950BA7A109F4D24350C3F9EF978" KeyPath="yes" Source="$(var.ProductSourcePath)\mscordaccore.dll" />
-      </Component>
-      <Component Id="cmp9D918AAA3F478AEEA32C3F8AC939B4C5">
-        <File Id="fil993C3BC6BCC32603B42D8903725344C4" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-timezone-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp8D76B2CDD3B11893BF22B139DE325E42">
-        <File Id="filA0913F87390C8D0069330A6F07D3CD22" KeyPath="yes" Source="$(var.ProductSourcePath)\miutils.dll" />
-      </Component>
-      <Component Id="cmp7C933AD570F24DA97B5E88CC962819C7">
-        <File Id="fil40B349A51CC10B9C7D751F3AFEA8AC51" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.Uri.dll" />
-      </Component>
-      <Component Id="cmpAB17E329B5A2939CE67126E57D959964">
-        <File Id="filDF008A3E70B34A0A8071BD0227F14486" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceProcess.ServiceController.dll" />
-      </Component>
-      <Component Id="cmp2675882C487AD9F183386887CB760379">
-        <File Id="fil282182EB5469C22A84F84C33E28FD5DF" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Diagnostics.dll" />
-      </Component>
-      <Component Id="cmp469F96AA1B86FD69DF010ED2B43C0490">
-        <File Id="fil3C7CC203A51D616153BDF16BBF8E904A" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Management.Infrastructure.CimCmdlets.xml" />
-      </Component>
-      <Component Id="cmp64AEE1A0E20B562B674944DA4AA8A81C">
-        <File Id="filD4C59D08B7FDB77F0FF476FC7251672F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Loader.dll" />
-      </Component>
-      <Component Id="cmpC4CE8B3AFBDD05F2D1CA184EC6F2F6AD">
-        <File Id="fil10D7C023F8D11F6CB451AECF1B6361C6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-rtlsupport-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp38EACDEC714E7574DA1D1B71A64D7F98">
-        <File Id="filE44A87AFA7A89AA321A26AE3C4D3F6BE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Security.dll" />
-      </Component>
-      <Component Id="cmp96749B04C9D0B48A5CC24A8429A55B11">
-        <File Id="filD4AA6CA55D6D4270C643FA5E44452C0A" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-devices-config-L1-1-1.dll" />
-      </Component>
-      <Component Id="cmp720268936DAFEB403249538726C7A0D9">
-        <File Id="fil06D99936E89D84A6875BB5B946D12F3D" KeyPath="yes" Source="$(var.ProductSourcePath)\coreclr.dll" />
-      </Component>
-      <Component Id="cmpA0F24CD99B1551D92627563E93CC69C0">
-        <File Id="fil8C9F81981EE0D89E23A0F34229C279F4" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.ConsoleHost.dll" />
-      </Component>
-      <Component Id="cmpC65F6EE65E7395F8683053ECF4C5597A">
-        <File Id="fil1E7F567FCFFB88F7850FCB18077243D1" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-handle-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpBA74BDCF772CB3A06B99296F5AF3F5D1">
-        <File Id="fil25A7360F158740ECFA5A76B00D3B130A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.ReaderWriter.dll" />
-      </Component>
-      <Component Id="cmpEE95B532571A9267B39D72710F1E5E4D">
-        <File Id="fil587EF12652D717A227318BAFEF2C20C9" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Tasks.dll" />
-      </Component>
-      <Component Id="cmpDF8E0D57CF8B265448B5CBF3B36CD151">
-        <File Id="fil32639B6171C8A2A5B3DED0A63B9CD2E0" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.Tracing.dll" />
-      </Component>
-      <Component Id="cmpB165A04A8913ADEDA1A4E52C10B29E96">
-        <File Id="filDE9022D6A3719B943A70B71C95351627" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Packaging.dll" />
-      </Component>
-      <Component Id="cmp1B314F22E3B6E2BAC952D8DF075723FF">
-        <File Id="filC4ED9946819AA2CFF20DFF4A7030F02E" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-synch-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpF7F591858894BF922DA7F68B3CB3B370">
-        <File Id="fil1D3638AA0768BA11AD4E17A37A61EA4B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.AppContext.dll" />
-      </Component>
-      <Component Id="cmp35D7682643503FA3EFF9B04CDB83867B">
-        <File Id="fil7C8B595703B044953E072CC7C56C0B4C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-string-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpEFC858F94DD206B5A4996C7D3095341A">
-        <File Id="fil87757235BB45DE1A731E7798684D2E4F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Buffers.dll" />
-      </Component>
-      <Component Id="cmp9F363F3906D6771691F96605FC6C958D">
-        <File Id="fil0E651F3A87FD0E2F6688E74D89C36221" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Csp.dll" />
-      </Component>
-      <Component Id="cmp826F9B36D96BE5650A67E9C5D2D918DD">
-        <File Id="filFC261040E8CB88F7BDFE2B3ED0D56276" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-core-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp195E63B53BC91EA56A2D52AF3EF028FA">
-        <File Id="fil95B305E194567AA74D17C54ED97C54E6" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.CodeAnalysis.dll" />
-      </Component>
-      <Component Id="cmpF81DCE7B330D9CF5B70501D76A1D5543">
-        <File Id="fil61D6EA9C8839BA487DBAEBB150E858C4" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-core-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp18616D3BE360362E7108A71442D95DA8">
-        <File Id="fil8D7B22962C80211E17C7EFBB3ADC9987" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.TextWriterTraceListener.dll" />
-      </Component>
-      <Component Id="cmp57452FCE70ED7D869F91A25A8FE9767C">
-        <File Id="fil2E5768AEC52298AF7D3B0608A3D38408" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-string-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpBFAA43F2923CBC760EE2FFC7616F91B0">
-        <File Id="fil85D0126E8D869B35972E3303A0699695" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.SDK.xml" />
-      </Component>
-      <Component Id="cmp1D7850EEB288BF7DF2D7BFFD10B380EE">
-        <File Id="fil8D0D17F213D36AF39126304D49489F04" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Eventing-Provider-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp901434E222CA7B72B0DDFFCB9C9D4958">
-        <File Id="fil445A43545AFA497B51CB7DBD86EE0E6D" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp699BF8B9FD723FDDF914160D33D620DE">
-        <File Id="filA5156FD8F4095AA825A77141F2B1B1D3" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-threadpool-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmpD33D82ABF51BB671F2DB4ACA9B7BD11C">
-        <File Id="filAB14F1D53B1F41BD9DEB0DCE1D118BD1" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-memory-l1-1-3.dll" />
-      </Component>
-      <Component Id="cmp43AFEE697DBFCD5C8A53EC540E8582F4">
-        <File Id="fil5528B0A0650E07288BCE1AEDA5B8FE9A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.Encoding.dll" />
-      </Component>
-      <Component Id="cmp0845AF852A390748CB4C6618A133CA9B">
-        <File Id="fil15F532C1B116CCEE581D1FAC8BF0B46A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-sysinfo-l1-2-1.dll" />
-      </Component>
-      <Component Id="cmp8DB8D2B11EE3C64E01A5AA5792113C7D">
-        <File Id="fil3744CB2259DFBA16ADAD1586637D401D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Transactions.dll" />
-      </Component>
-      <Component Id="cmp1940FD2AD1FA5AC8438D6551BB1950BD">
-        <File Id="fil181F0D57BC1E805B843101072761DD12" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Tasks.Dataflow.dll" />
-      </Component>
-      <Component Id="cmp0CA8C4585AF8DAC840FAD7021CDCE5C0">
-        <File Id="filC3859173B54186B4707FE8C31BDABACD" KeyPath="yes" Source="$(var.ProductSourcePath)\Newtonsoft.Json.dll" />
-      </Component>
-      <Component Id="cmp3AFA8B48759D983BCC7FCAB0F8C00049">
-        <File Id="fil24DF95946328B11A367703E6E2134625" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.MemoryMappedFiles.dll" />
-      </Component>
-      <Component Id="cmp778C0CA0C6DB9B22F55E500E3DD4CE67">
-        <File Id="fil173D6CBCA65AD2FE8D51CA5F2CEEFDA8" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-shlwapi-obsolete-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpFB9E5DA3F7ED32C900C5711426C700B0">
-        <File Id="filFDCC96E6DBB1FAAC7D993E592AF8BD4F" KeyPath="yes" Source="$(var.ProductSourcePath)\pwsh.xml" />
-      </Component>
-      <Component Id="cmp57FB26AB5D4FC65F8AC6DCA5CA4EAB50">
-        <File Id="filF557E03D1EC6FAAA6CFD9DB353CDBFD8" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.CoreCLR.Eventing.dll" />
-      </Component>
-      <Component Id="cmp95793F2DBCB53FC6574271778B460A23">
-        <File Id="filF407C994BA57C53C0434A4BD455829AA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-interlocked-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp702A2FEFD38FFCF605ED1C313EC71458">
-        <File Id="filFA6AE5F94234309C16C0496F3A330393" KeyPath="yes" Source="$(var.ProductSourcePath)\ext-ms-win-ntuser-keyboard-l1-2-1.dll" />
-      </Component>
-      <Component Id="cmp2FAC51A60BB0A9076A393D722CF1B290">
-        <File Id="fil71E85B4B2F588B1A89FE7939A5394758" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.OpenSsl.dll" />
-      </Component>
-      <Component Id="cmp097CB187E2BDE58F7392C2C072809466">
-        <File Id="fil4817A7A6DFA799361C5FC812556EC2B5" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-sysinfo-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmp13DAFD4716AE6C1A7628B61627C60A19">
-        <File Id="filF58C27616A41D775DBA54725748881B2" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-cpwl-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp1BEF581DBB396BA29E4B59C883BB8649">
-        <File Id="fil331920D9CDAF039A65492B7D28C99A00" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Win32.Registry.dll" />
-      </Component>
-      <Component Id="cmp40B149871A5BA98DC82EE7856A4CD736">
-        <File Id="filB47670A8BEFCC6BD5C6860E576241ACD" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-realtime-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpEA4FB4C2137ACB359A57F047FB3F064D">
-        <File Id="fil43C692DBF517066D6041E48921372DE0" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Security-LsaPolicy-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmpEB4CED5CB081B9AAF87D6CAD0FC28F95">
-        <File Id="fil38FD2547858C006A3B9722F56948F33A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-registration-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpDF8E2441E58692CD330DCA991DB9BC92">
-        <File Id="filE0422AB1C6EFDB95AC9F4FF283407DDE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Globalization.dll" />
-      </Component>
-      <Component Id="cmp8A908B31F517E0EFE0E38C4CB806CAA7">
-        <File Id="fil7CBA14DEF37BFCDC82E3A5FA8D0D14A5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.ServiceModel.dll" />
-      </Component>
-      <Component Id="cmp5561B29D282E093AFF80AAD64EED626F">
-        <File Id="fil2A4B1904E66B125FCA1E9470E6158B2C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-memory-l1-1-2.dll" />
-      </Component>
-      <Component Id="cmpA146B98771DAB537AE20DD014A4466A9">
-        <File Id="filFA8437354A0E516CF1366BBEB33D2632" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Collections.Specialized.dll" />
-      </Component>
-      <Component Id="cmp3D6E19CC426EF726E2F956E58F78DDF2">
-        <File Id="fil09CE56902D994FB6AAF734FBBCBDE100" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Security.xml" />
-      </Component>
-      <Component Id="cmpCEA7A07A4FBA646463AB6AD07587507B">
-        <File Id="fil6D19007DF36A8E64971B04A16E864607" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp1EC7D70A01B5B94D053A703D9A242572">
-        <File Id="fil670FD94C4B7FB313C116A91BE9265A7E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ValueTuple.dll" />
-      </Component>
-      <Component Id="cmpEC5CF579D39FC75DC38E051E55A5CAD5">
-        <File Id="fil4A7C610F14DCD44CC1B18DAE9300D97C" KeyPath="yes" Source="$(var.ProductSourcePath)\powershell.config.json" />
-      </Component>
-      <Component Id="cmp0B896DBA6AFF2FD27FCD0E0968E23992">
-        <File Id="fil8FF727772B90722FC5C21D64E7B579DA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-psapi-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpC6A24F97E0D6739A51FE9CC80148F511">
-        <File Id="filCC7CF83D67F2AC3B2593CED11CBA374C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-memory-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp9544B34C5A30F75D0F45F5718A1795F0">
-        <File Id="filD4CAA59C10BE6BD526C91A9B35BCD9E3" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-sysinfo-l1-2-2.dll" />
-      </Component>
-      <Component Id="cmpBDF0DC73F4F799A46B1DE220E58C1920">
-        <File Id="filD691AB2F5A0AE38E8F794ED19D6AFCD8" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-error-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp8EC2515ECF0A11A1228D21FE3D995FB0">
-        <File Id="filCDBBEF49681DE6AE3FEC59336EB7DA77" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.dll" />
-      </Component>
-      <Component Id="cmp6B614FF53759D8CAD6F32B6314151A6B">
-        <File Id="filD0BA76209561FB70CB92B59F43B11B3C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.ServicePoint.dll" />
-      </Component>
-      <Component Id="cmpE9303C0491BAC84D57D1F1E13FD324DC">
-        <File Id="fil9B128DA6E4DB2911AEFB30545CB0438E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.XmlSerializer.dll" />
-      </Component>
-      <Component Id="cmp9747A8C42FC4ABE5FA0C3B30FC11C16A">
-        <File Id="fil23549CCACA46A1CB986E42DCD7FA18E1" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.WSMan.Runtime.xml" />
-      </Component>
-      <Component Id="cmpB063BE196D23C33165CC5637F6E2379E">
-        <File Id="filEF6993469CB62233BADF206F868F21DA" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Extensions.dll" />
-      </Component>
-      <Component Id="cmpC634BE3C2B885CE5986B811D0B7642DA">
-        <File Id="filEFC44DB753E2153353126E915136241F" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-io-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp436662C08195044E5CFF8872E2AC66B6">
-        <File Id="fil8404A0EC5BDF81765E68C2CB4C4795DC" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Globalization.Extensions.dll" />
-      </Component>
-      <Component Id="cmpC1252325D4A857CE4815CB4887232E08">
-        <File Id="fil5204510E4CC5699C03039D5A4348FC96" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-io-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp80516C165B610FEA7ABAD8867D4C1177">
-        <File Id="fil352FF9155508CDDCEC0D258256BB6A76" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-com-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpAC0BB9176567509DFA5D438A69EF0C71">
-        <File Id="filD77FF9BFB2A3D35F44D3DA506442CCD1" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Extensions.dll" />
-      </Component>
-      <Component Id="cmp15F65BD31868E4E4686961153E4082C1">
-        <File Id="fil6C46F21CCA0950989860DD2FE76C8107" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.dll" />
-      </Component>
-      <Component Id="cmp7CFC0926206345463E941DC960BE9832">
-        <File Id="filCF7C5A4FDF9D9A75336211CE2007BB87" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-util-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpB0131B8F2F785C0DB1D557A5E3E0ABE5">
-        <File Id="fil3942A5D5F553D55351CF2DEF0C4F7A07" KeyPath="yes" Source="$(var.ProductSourcePath)\System.dll" />
-      </Component>
-      <Component Id="cmp0BFDFC86C64711DBC2FD08597D1378E2">
-        <File Id="fil8087A5D23E90890B580017D767328250" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Encoding.dll" />
-      </Component>
-      <Component Id="cmp21715E66168ACE3CEA6DE5D415CE7FDF">
-        <File Id="fil79FA20BA1A433CD500A0BFBEAB857C7B" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-error-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpF25DC4B00595182390A170310D95EA1D">
-        <File Id="filB6C7E2AE9E04C508E56B2BB2A29727B2" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Base-Util-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmpB666825D77A8B064DA727325776EAE74">
-        <File Id="fil4462D6F7EC9D2E9E75BB0546B45A2375" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-sysinfo-l1-2-3.dll" />
-      </Component>
-      <Component Id="cmpA75C2EC5A5EA46DE98DFE2962FEDECC0">
-        <File Id="fil29566AAF2D7442428E3A0D322F522F41" KeyPath="yes" Source="$(var.ProductSourcePath)\LICENSE.txt" />
-      </Component>
-      <Component Id="cmp0C712C23BAC746AABB5659096ED329EA">
-        <File Id="fil0C712C23BAC746AABB5659096ED329EA" KeyPath="yes" Source="$(var.ProductSourcePath)\ThirdPartyNotices.txt" />
-      </Component>
-      <Component Id="cmp2BFC761F21E7234B46E57BA4DD2D9992">
-        <File Id="fil9CD147A434F516BF71154AB7CC8D7D3E" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-memory-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmpAB383E4D8CF6F11984650BD4E72F4510">
-        <File Id="fil428D61C546B7B580479069D1E90D9046" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-management-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp292CCC20E7FD700B54FBD52A473A57D8">
-        <File Id="fil8E4E9B9A80766525D7B35D0C6841BE66" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.IsolatedStorage.dll" />
-      </Component>
-      <Component Id="cmp6D0CF71D0549216C4A22884F5FBF18BE">
-        <File Id="filCF028E6A9E6B4D521C9513AA0A96890A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.AccessControl.dll" />
-      </Component>
-      <Component Id="cmp1AF8D943CB5BB73A094F79D704EC212F">
-        <File Id="fil401197C1C42AB6070B1A3CED5A49D985" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.NetTcp.dll" />
-      </Component>
-      <Component Id="cmp72B6F40E64433679004948C683A17F74">
-        <File Id="fil789FA5301B1A1B6AD1D15C5AEF3C536A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-namedpipe-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp3B31D67E3C0F6CC8FD23D9CC07CC9D9D">
-        <File Id="fil7A9B2070D4F4502E26C54F7E6BC8CAA9" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Management.xml" />
-      </Component>
-      <Component Id="cmp3CCDC632173A23176E6D04C24350D195">
-        <File Id="filF800F635DD6E8F1F4877700265D94C1E" KeyPath="yes" Source="$(var.ProductSourcePath)\mscorrc.dll" />
-      </Component>
-      <Component Id="cmp1C282D02791A944B172B9CBEAD1FAB88">
-        <File Id="fil67DF0B0525C8833BE4FADDAA0783BC1A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-stringloader-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpE126C38FBB91AEC118DA44D096195A02">
-        <File Id="filD9DE576D032ACEB4BB75BFFBD4F7D34D" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp0B385D84913472F263B64812AF8A786E">
-        <File Id="fil53AD163CF2730C014879D6A913795249" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.AccessControl.dll" />
-      </Component>
-      <Component Id="cmp95827D8E0B4E4131783143CFFE240926">
-        <File Id="filE20C2DFDBC51E019662EA2A9AAD77135" KeyPath="yes" Source="$(var.ProductSourcePath)\clretwrc.dll" />
-      </Component>
-      <Component Id="cmp01B060B21C4DE4D6793761203C0B0D67">
-        <File Id="filCBC393F83FC607F3774A644243A26F53" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.TypeExtensions.dll" />
-      </Component>
-      <Component Id="cmpD44A732D25686A0CA69B36B72D4FA8B6">
-        <File Id="filF78F9883195BCF3491DD443970734976" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-String-L2-1-0.dll" />
-      </Component>
-      <Component Id="cmp5673E8FDA66481CD8AA936694C059FFD">
-        <File Id="fil9601165F4D910747EDA9CFB061B93084" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Management.Infrastructure.dll" />
-      </Component>
-      <Component Id="cmpCAE9BC7900246A998C9FFB85E2017DA4">
-        <File Id="fil4B41B4DB6C486B0BB2D7B28E454FDBD7" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmpE0FBBD56CE6FE2E1CDD3041D3447C578">
-        <File Id="fil16990855CE60DBD3513D01B3EBE990A7" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Globalization.Calendars.dll" />
-      </Component>
-      <Component Id="cmpFF61B94B438F85A8FC779E3C7A5FECA2">
-        <File Id="fil2456FAA4B07736AA1CDEFAAB987B2D44" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Requests.dll" />
-      </Component>
-      <Component Id="cmp6D6C7959EEEBF107E24588B13122FAD4">
-        <File Id="fil0CEB05A1DF1CE4C0B5FE52145D28C729" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.WebSockets.dll" />
-      </Component>
-      <Component Id="cmpFA0639424F4DE02F7CC505E2DBF58230">
-        <File Id="fil060EFA10EA8DB46C4BA851ED560344A2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Emit.dll" />
-      </Component>
-      <Component Id="cmp07C4F6061FD5D7A3AA81BFC762A789BA">
-        <File Id="fil4B39580789107EECD88ECC38A94A7798" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.FileSystem.dll" />
-      </Component>
-      <Component Id="cmp188E47B9BA2A9807918F7C62545C6B4C">
-        <File Id="fil611845BC5A72BF7811B17582159D8065" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Serialization.Json.dll" />
-      </Component>
-      <Component Id="cmp69C84168BA11BF2BEF4D8171EF6DC789">
-        <File Id="fil104AAF1FA248694A93D7B5439050DF2F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.Cryptography.Algorithms.dll" />
-      </Component>
-      <Component Id="cmp7B944B473907CA6C3BB932806E46E5B3">
-        <File Id="fil88B1525460606FC3AD7DB765E65038DA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-stringloader-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp9E59176D953343E959C4D4C6FB3A0B2E">
-        <File Id="fil5759D4832040C0A8424C5A01EC42CD81" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Thread.dll" />
-      </Component>
-      <Component Id="cmp796D96057D21272C6888BA16E71621A6">
-        <File Id="filADAE7F30016FA9252914A19ABDA8E9D7" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-provider-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp09FC5AE7AC1DEE9FA331E11474827936">
-        <File Id="fil2BAFC9A7B3A28E4CE855665823BA8E7C" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Numerics.Vectors.dll" />
-      </Component>
-      <Component Id="cmpF780CC7E5C204F6E10B5B47620F46811">
-        <File Id="fil5A34C0D4D001F3E1B087252ECF88EB20" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceProcess.dll" />
-      </Component>
-      <Component Id="cmpF42179572F192988F9C4D8E216D01887">
-        <File Id="fil5AD9188C7AC3EAC0FF3CF91A667D17B1" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-conio-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp95717E1DE28928903EF839289814A639">
-        <File Id="fil83271044F4FA903831D1660B2C26E908" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-runtime-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpBFA0597694F7DEC5642F4DDFBB45F896">
-        <File Id="fil4044E303D81BB2A62CF5AAD12A0C7DE6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-shutdown-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp18535DF89416A031A513808AB8CE4B56">
-        <File Id="fil52AE8E8AD62EEA8CBD86A1D9C7DA54FE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Management.Automation.dll" />
-      </Component>
-      <Component Id="cmpEA952E7A6079391C2EB0EFF5245DCDBC">
-        <File Id="filB9F3BB8ECB2441EFD813D0178EB5F884" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-string-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpF47CAA3A846D0FD72C81B4A04768665C">
-        <File Id="fil77F3F4CFCFCA39C1B1B083A36C2E5BC5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Linq.dll" />
-      </Component>
-      <Component Id="cmpBE223BF60ADD50DD211D379C90DFF2F5">
-        <File Id="fil9BFF09C886536D52626CFAE4FE64DCFC" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-version-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp52B77FCAF50F9D0DDA11553DDFE24918">
-        <File Id="fil348C7A16CC8CDFA0576850571545CB5F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.Process.dll" />
-      </Component>
-      <Component Id="cmp928BA3636D092BE0BB40E8A621B2A71A">
-        <File Id="filC442337B68D974DD03563122C38013F3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Numerics.dll" />
-      </Component>
-      <Component Id="cmp7E56AF43A9C9F3BD725032B4F4E23B34">
-        <File Id="fil42480739C6CDCA0667E1F6F06A719BB0" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xml.dll" />
-      </Component>
-      <Component Id="cmp0F07FB10C2781EF64985C0231E9D1880">
-        <File Id="fil6E0BB58744826C3FCC0A488B5EB8168C" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Eventing-Controller-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp6CC2AE24D70256108843A35BBE543ABD">
-        <File Id="filFE8BE7F83A33AD0F85B656639641E1E4" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.Tools.dll" />
-      </Component>
-      <Component Id="cmp97AD5D1CAADB8D87FAEFC54F0C4B1589">
-        <File Id="fil767FF6EB7B7A5812137BC8FEC3EEA1E6" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Collections.Immutable.dll" />
-      </Component>
-      <Component Id="cmp2BDEF32CC13DBA589FB48B87BFCCFD88">
-        <File Id="fil33B7DF26FF9BB42AB22D9ED46814204F" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-multibyte-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp7B96661EFE30D6FCD749BFA049D70D35">
-        <File Id="fil7DABC93B7AB8B576F1F17928631C50E8" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-synch-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmp983EFF7B0E21D7CBA5007E969992B47D">
-        <File Id="filF0726AE341018A3F393282EEDE1F95AD" KeyPath="yes" Source="$(var.ProductSourcePath)\pwsh.runtimeconfig.json" />
-      </Component>
-      <Component Id="cmp5729F92BFE2487ED81F16B9F76F5A0D8">
-        <File Id="fil1D814BE2F3A0D26425F9BD2DC3AC69E6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-profile-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpE0B9175AA901E035434C262FA5BFDE24">
-        <File Id="fil030614BC7CA05C9D87D0D0D46E290265" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-locale-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp8930D9CAAE48EEA1DDF7B05ECA4C1E8D">
-        <File Id="fil788EA3360C765EEDAC59EB3311975703" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-EventLog-Legacy-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp8BB683B8EFA12D81B0093983B9A86989">
-        <File Id="fil2162FC84D19CF4E7A6A4079F585FC50C" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-shutdown-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp8C02558B25F6B22C6A6E900C20C10FF9">
-        <File Id="fil21851B0F37E9D23DE498C9E82740E072" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.Debug.dll" />
-      </Component>
-      <Component Id="cmp4A011DF9C2CA4BB2CDC862EF06663926">
-        <File Id="fil1A228651DBBF0F08F248160821399CC7" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-kernel32-legacy-l1-1-2.dll" />
-      </Component>
-      <Component Id="cmp88A6FB261DFD24D9E25F2AF63C232B4F">
-        <File Id="filB2F5F6A1E83826930D17A3EAD3B7443E" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.Commands.Utility.dll" />
-      </Component>
-      <Component Id="cmpFC754EAE0337C1473B750A7AEBA4062C">
-        <File Id="fil11DCE0E2B85A6D286CB3D936E8BBB90C" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.Win32.Primitives.dll" />
-      </Component>
-      <Component Id="cmpF0C4435AA0B6F2F56D0D000A43EE1277">
-        <File Id="fil0521BA12454B6AAC63D5931273EE9785" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-fibers-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp541CF763DAFF56DCA1D812BD1465C83D">
-        <File Id="fil349B3C482CDAA7C903AEC8CB6CFD582F" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-heap-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp155A485C71B7DE54A5EF8B9B663B01CC">
-        <File Id="filCD4FBC2BA645383317FA103756778D25" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Serialization.Primitives.dll" />
-      </Component>
-      <Component Id="cmp0112845AD6F6887B3A1094D1202C3188">
-        <File Id="fil73B2F8B7D12AB572B98376CFFE6503C2" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-sysinfo-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp0336F0CDFF2D0715CD342BF0D0EAF38E">
-        <File Id="filF44FB384837000B3C4362F42E0A4C7A5" KeyPath="yes" Source="$(var.ProductSourcePath)\ext-ms-win-advapi32-encryptedfile-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp6A634BAE51EBC7D342FE45DD4F83CBB5">
-        <File Id="filE572B009FD3EF37539E7CBFC7BA73529" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Transactions.Local.dll" />
-      </Component>
-      <Component Id="cmpC2BD980E9AD88FA8C1CD0ADB81E5D8B3">
-        <File Id="filDCD250A35B067A2AF51E0C96652F7696" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-service-management-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmp8E3882C311D8863C7AAC79BF98EBF1E4">
-        <File Id="filB5B7CD321FA93443E6FA20F9AC1627E6" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-base-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp43AFF4A88319BF3E995AD16A510F82A8">
-        <File Id="filBC85F1EEB02AC7D670B4E26525BA5A9A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Drawing.Primitives.dll" />
-      </Component>
-      <Component Id="cmpEF39CD6043D82DB539B242B149364D0E">
-        <File Id="fil45A05CAE6D52C6A2FA430CCF6B31E71A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-fibers-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmpD791ACEC788E2D11F1C4AC2E8E1C4BC5">
-        <File Id="filB6680C03C25992D849279EDD10C5B49D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Drawing.dll" />
-      </Component>
-      <Component Id="cmp04302602790BC8ABBF6E4333C261968E">
-        <File Id="fil2A463A3495C46D3B2A742C25CF3AFDAD" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Runtime.Serialization.Formatters.dll" />
-      </Component>
-      <Component Id="cmpBBA71095399E6775AC36EA3A6E0C0ECA">
-        <File Id="fil9E8439688484588795B96132D7235A2A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Ping.dll" />
-      </Component>
-      <Component Id="cmp0CAD5AEF7D14F323B8CBB2756603D25D">
-        <File Id="fil49149C15B1E5D28C5D9E3CFA008C9C85" KeyPath="yes" Source="$(var.ProductSourcePath)\sni.dll" />
-      </Component>
-      <Component Id="cmp5AE7EE76C29D2CA65ABB585EE15C18AB">
-        <File Id="fil18D0B086D9D4136CC9868030E53D9D46" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ServiceModel.Duplex.dll" />
-      </Component>
-      <Component Id="cmp0906BA39F4872AC5CE33EA9778CF24E5">
-        <File Id="fil457A2C4D576519687E4A29E57F04DA6E" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.ApplicationInsights.dll" />
-      </Component>
-      <Component Id="cmp96E2F9A08067109988A4087BCE3B74D4">
-        <File Id="fil44FDA9956B03240403424FD98F0FD93E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.StackTrace.dll" />
-      </Component>
-      <Component Id="cmp82A5E06C6CFE9382D9175B993EB1EBAD">
-        <File Id="filD4E50BDA9352D0C9A75480CDDC4B2C1A" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-libraryloader-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp10B674B9EE153B7FA9E743D45CF5639E">
-        <File Id="fil0C388FE4B66E0936ACDB5F4021030EA7" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Security.dll" />
-      </Component>
-      <Component Id="cmpA73318A1FACCEA81EF1EFA5F78374D59">
-        <File Id="fil376F144635A392696506C12392682282" KeyPath="yes" Source="$(var.ProductSourcePath)\API-MS-Win-Core-PrivateProfile-L1-1-0.dll" />
-      </Component>
-      <Component Id="cmp25CBD6073CD07C77389077CC7BE7A048">
-        <File Id="fil72CCE92E32D1D9E2EAB034C81B2438E3" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-kernel32-legacy-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp1CCCE9201A646726052C421D989AA9C0">
-        <File Id="fil0F3ED14FA9E91C793FE501367368E1C5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.DispatchProxy.dll" />
-      </Component>
-      <Component Id="cmp6D952234CE10B4FEBDF02EBBC1C03E1E">
-        <File Id="filFCBD722AF058E27102503E0ECA9CD4CA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-lsalookup-l2-1-1.dll" />
-      </Component>
-      <Component Id="cmp7C73A78033C737A6EA4AAC81D6943407">
-        <File Id="fil5545AC480C6918BF535EAE9C4F6051E3" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Core.dll" />
-      </Component>
-      <Component Id="cmp99B544AF658E943EE6140147819FCBC1">
-        <File Id="fil59E629256DD2B13293508775BE21887A" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.WebClient.dll" />
-      </Component>
-      <Component Id="cmp81D64ED83BF0404F92003FCE096996C1">
-        <File Id="fil91FBD24EE9047B501078E138C0A5CC02" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-crt-environment-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmpBA27F493BA63114999D9C645A559ACBE">
-        <File Id="fil45F1A936427A7AA64349B26335C8BA54" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.DataAnnotations.dll" />
-      </Component>
-      <Component Id="cmp405FE4AEFE314F91B7F8089861BBB353">
-        <File Id="fil5B0454C486E63568724251FA8D860174" KeyPath="yes" Source="$(var.ProductSourcePath)\PowerShell.Core.Instrumentation.man" />
-      </Component>
-      <Component Id="cmpA0853678FFF217EE041189B7EA010175">
-        <File Id="fil1BB407F2602F39F014CC24248CF1FC3F" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-psapi-ansi-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp61E08B784DA94759BE764CB429E64262">
-        <File Id="fil4ECECEC1E31F5937E1F8E4FDECA6DD33" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Private.Xml.Linq.dll" />
-      </Component>
-      <Component Id="cmp2355D3B8000E494433D3A278D46BF391">
-        <File Id="fil127A3B771DC95AE976865BDF6237393B" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Primitives.dll" />
-      </Component>
-      <Component Id="cmp2A9C9BC07379929ECE9B4C6C3F0A87C9">
-        <File Id="filD9DEC4D9F82509757BBB653591352619" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-security-lsalookup-l2-1-0.dll" />
-      </Component>
-      <Component Id="cmpDD17B4F6040D47BCF57B5DA3B31574AA">
-        <File Id="fil193558DC9C4564112C7FBCC4EA170BE6" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.WSMan.Management.dll" />
-      </Component>
-      <Component Id="cmp2B7D32EFF6CCECD440A55172A3756706">
-        <File Id="filBAEB22C184CF2D6E951E054DCEC0369D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Http.WinHttpHandler.dll" />
-      </Component>
-      <Component Id="cmp30357FCEAC7B88BDCF0B20D55C22F61F">
-        <File Id="fil50B555A3393035E22F0A1704CE341C65" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-kernel32-legacy-l1-1-0.dll" />
-      </Component>
-      <Component Id="cmp557A49B03E72CD07149A6CD0595C9245">
-        <File Id="fil12F0D932C25DAFEF4BDC6DA500EF1258" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-privateprofile-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmp51F2F26684B5C4D0FFFFFBD72174D1BC">
-        <File Id="fil3EEF1D08102F0A83F48EFBB44396FCBA" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-libraryloader-l1-1-1.dll" />
-      </Component>
-      <Component Id="cmpf2a3c81eb19246b6be74af07e70a06f0">
-        <File Id="fil90f9e9f09d6744f68331100e6d7da03d" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.MarkdownRender.dll" />
-      </Component>
-      <Directory Id="dir23E9C47466D341314C603F5C7118348B" Name="ref">
-        <Component Id="cmp50D8B0DCCF114B58987590FF8212ACB9">
-          <File Id="filAAF1E2DE95144FAD97B91D1E8EA8ADC6" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Data.DataSetExtensions.dll" />
-        </Component>
-        <Component Id="cmpC39C65F1709E407B9D6AD3AF64F710D3">
-          <File Id="fil5B95B12153C345EB92A94CF3720FAB6F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Globalization.Calendars.dll" />
-        </Component>
-        <Component Id="cmp2C63290BD1A34304BAF371F4146D9EFD">
-          <File Id="filA3ACD874E26B4A7B9CB32F5150850DBC" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Requests.dll" />
-        </Component>
-        <Component Id="cmpB81F9831702F461193926ACEB88635B8">
-          <File Id="fil67A84AF357304A35B9825BF1734BC287" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Globalization.Extensions.dll" />
-        </Component>
-        <Component Id="cmp75BA8D5A370A41AFB5B312ADBCFC8466">
-          <File Id="filA1FE836C04764798B3CA549E88C10195" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Mail.dll" />
-        </Component>
-        <Component Id="cmp9E5E2B7A0A50466DA17E86A8BC605EAD">
-          <File Id="fil3A9FA6B36D064B24BAC5F737BF5F24A0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Overlapped.dll" />
-        </Component>
-        <Component Id="cmp1E565ED0658F41CBBCED8CE01CEA393B">
-          <File Id="fil0F81D5604BFE4EBEB991F0813B04B583" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Linq.Expressions.dll" />
-        </Component>
-        <Component Id="cmp0FF4FD31FAA449A68421AEA56CC6EAD2">
-          <File Id="fil90E4BB3309C148B690966B86C337F135" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.FileSystem.Primitives.dll" />
-        </Component>
-        <Component Id="cmp2D649D39265A44F0A396DFE26339EEE2">
-          <File Id="fil0F329FBE65394EE3BC691FEE5C84A1B6" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.XDocument.dll" />
-        </Component>
-        <Component Id="cmp551BA982BBBE41AABC33D357C88B6DDB">
-          <File Id="filDECE1E5AA0C2401A856C78109EAD4B2C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Thread.dll" />
-        </Component>
-        <Component Id="cmpF854E22435594DC0988EA3C80415C694">
-          <File Id="fil2960960418444268A17A16284FEE2F08" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Resources.Reader.dll" />
-        </Component>
-        <Component Id="cmp4EFB1023F3354195901830FF1D06621F">
-          <File Id="fil2F2B529C82304BD5B8EAC3758B3F3D34" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.WebClient.dll" />
-        </Component>
-        <Component Id="cmpD27D69C40A9044A582CB686A5C377A3B">
-          <File Id="fil435AA0A6E1F74522AA940E844A67C0FC" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.StackTrace.dll" />
-        </Component>
-        <Component Id="cmp0C1C196D3FCD4391B1500790CA24CA63">
-          <File Id="fil2E9061A574354178AA30625BE3397508" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.Compression.FileSystem.dll" />
-        </Component>
-        <Component Id="cmpBD2AB3C201774F75BCEF11521F4EE20B">
-          <File Id="fil62C8E50999F349219CED64C3D4283017" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\mscorlib.dll" />
-        </Component>
-        <Component Id="cmp7072E489DB5848D0A0172D5AE7C4005D">
-          <File Id="fil56A2B628AE604D8E8CF3220FFD92B9DD" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Timer.dll" />
-        </Component>
-        <Component Id="cmp111E3800AD0E47D6B3963A1CF69A54A1">
-          <File Id="filD18933964C624114AF0CDF8158524011" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.FileSystem.dll" />
-        </Component>
-        <Component Id="cmp43253EC95CF641B284B90F5FD7D72A24">
-          <File Id="fil11129AE10FD94CEBB421A10953E43E57" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Tasks.Dataflow.dll" />
-        </Component>
-        <Component Id="cmp7B36FD4E9C074746BF6FA0D133CAD7C3">
-          <File Id="filD161276E6EDC4952AF110CEBC5771F39" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Cryptography.Csp.dll" />
-        </Component>
-        <Component Id="cmpEC4AD7C97D9745EEBA02976CD3D2CFB7">
-          <File Id="fil73C4A974980F409292060897E8B9038E" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.Serialization.dll" />
-        </Component>
-        <Component Id="cmp612D5B07ED474137AECB8B4E5C2812A0">
-          <File Id="filF976051F2A864DE9A25A18373BDC0E0E" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Emit.Lightweight.dll" />
-        </Component>
-        <Component Id="cmpBB987FD48B6244849EA3724F38E7875D">
-          <File Id="fil5E1EA3CB67CC4082896905C1B3F5BD4F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.EventBasedAsync.dll" />
-        </Component>
-        <Component Id="cmpF58A52A81A004F40B840D01F5EDB4717">
-          <File Id="filBB5B57D7DA764CCCBA39DE2136EDE980" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.TextWriterTraceListener.dll" />
-        </Component>
-        <Component Id="cmpC2C8C956634E468EB098585A5ED6D380">
-          <File Id="fil322F12248E614B47B9DB91D1864974C1" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.dll" />
-        </Component>
-        <Component Id="cmp1476916A8C2741F7A2FDC7779FC67E68">
-          <File Id="filF05C8CA290D64AB892A6A0B3B0AB522F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\netstandard.dll" />
-        </Component>
-        <Component Id="cmp233ECE5484784D0C833558389DA72398">
-          <File Id="filDB7C91DF3CB74AD6B9E8417C6A468C35" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Web.dll" />
-        </Component>
-        <Component Id="cmp4891B5387F1A4769AD551054026FF74E">
-          <File Id="filA20634489AB749EBA2D0BB9CBF9E5F64" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.MemoryMappedFiles.dll" />
-        </Component>
-        <Component Id="cmpBAF7CCE6AC1E418085F0CC0C5488D502">
-          <File Id="filABF039E43AC24301B431D48BCBE4EF0D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Memory.dll" />
-        </Component>
-        <Component Id="cmpAD541342EB0647338627400FE6CB8508">
-          <File Id="fil5E3E227D81814CD692C301EE7B8B0B7F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Metadata.dll" />
-        </Component>
-        <Component Id="cmp37A3973C6E3F4331AC25286E1C2F9207">
-          <File Id="fil3550914C2A564BE8B922D3BDB27128B6" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.WebSockets.dll" />
-        </Component>
-        <Component Id="cmp8262ADA8DA384CA1AAFFE49AAC28FE23">
-          <File Id="filA99AA905EF384657B6E59AFA09A559DE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.XPath.XDocument.dll" />
-        </Component>
-        <Component Id="cmpDE1A8106796647BFB81B41F7A7BCC461">
-          <File Id="fil66D71577158442CFB052DE9D59981AE2" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.InteropServices.dll" />
-        </Component>
-        <Component Id="cmpE2615B7D815340DB9451ED89E820D2DD">
-          <File Id="filD90264E764214A8BB481BFA9E098D916" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.IsolatedStorage.dll" />
-        </Component>
-        <Component Id="cmp90BBF1FB2A3846AD936F5FA2F53225C8">
-          <File Id="fil90170AB6EEB5497BAAF4D3A1D0B73663" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Collections.Concurrent.dll" />
-        </Component>
-        <Component Id="cmp12205693535B4196B685F9D6E84E8F5C">
-          <File Id="filE26FD54E485247AD97767D01B9E32C96" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.ThreadPool.dll" />
-        </Component>
-        <Component Id="cmpB70950CD781C4D3B91A54B81FDCA28CA">
-          <File Id="filC5F81D8B85804C4391CF7E5702EB363F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.WebSockets.Client.dll" />
-        </Component>
-        <Component Id="cmpB6D9B9D6E54149D595E135AF4302766D">
-          <File Id="fil6DC26539F3504DAE9FB74A34C38D308C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.HttpListener.dll" />
-        </Component>
-        <Component Id="cmp19FDB1A96CF147E7A0A057A3C89B6315">
-          <File Id="fil75C5D7BC3A984F26AC7157B855EB9603" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.NameResolution.dll" />
-        </Component>
-        <Component Id="cmpBA1851B42D2D4718AB6B448A34C9DB93">
-          <File Id="filBE3E1D2EF9FA458AB9C643B54B134E21" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Loader.dll" />
-        </Component>
-        <Component Id="cmpCB60D0CAEF244650B4D95168C4835B2C">
-          <File Id="filD19D55827D3F4794857F358E960632EE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Numerics.Vectors.dll" />
-        </Component>
-        <Component Id="cmpF70880D72C6A4D88A92A6237D51E73D5">
-          <File Id="fil21D2D0F0D1FD4C879063230A1F206801" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Tasks.Extensions.dll" />
-        </Component>
-        <Component Id="cmpEBB31E1BD9EC4BF7BF877C31A74367A1">
-          <File Id="filB35F541E6AC8438F9525063F11D33F51" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Intrinsics.dll" />
-        </Component>
-        <Component Id="cmpFC9B32128AB24F01B236268F668AF44D">
-          <File Id="fil39705813112743ABA76E93DB0A39474B" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.dll" />
-        </Component>
-        <Component Id="cmp016383844C2749B8B8BA88148B0D34E3">
-          <File Id="fil3441201ED0DA49EAB63D869529C6DC74" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.XmlSerializer.dll" />
-        </Component>
-        <Component Id="cmp3652DA9A1B9F44BD86C895E8B35D670B">
-          <File Id="filE1ADF9A3739D4E938C390FF51B12355D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Serialization.Xml.dll" />
-        </Component>
-        <Component Id="cmpD446D16C3C544DD580C5A175328A9C5F">
-          <File Id="fil2D8B0176017D41208BB27FD65E35DA1C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.Tracing.dll" />
-        </Component>
-        <Component Id="cmpB2DC1821DBE648078AEA75AC0AB62408">
-          <File Id="filA7C18F70F1814A08A63620BC16B1C4DC" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.FileSystem.DriveInfo.dll" />
-        </Component>
-        <Component Id="cmp9C1983722FB842AEAAE7FE004439F7F5">
-          <File Id="fil3E3F9C4BC1D5493798264C5592B2D26B" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Principal.dll" />
-        </Component>
-        <Component Id="cmp4E2407942D9B49AF9CFB1E159F8F864A">
-          <File Id="filDDA0D564B2B44FC0BBBB786E200B98BB" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Collections.Specialized.dll" />
-        </Component>
-        <Component Id="cmpD8ED70D9A4584615B3A83470DE333E9E">
-          <File Id="filC6EA480B6D424002B9E1E81AB86ABEDC" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Cryptography.Primitives.dll" />
-        </Component>
-        <Component Id="cmp61D720ECB2D1498F932BC2F9A24FEDA4">
-          <File Id="fil94492298605A431A9884E970C0C961D9" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.Pipes.dll" />
-        </Component>
-        <Component Id="cmpD48387EA81574DDCA1F27FB6CBFCF4E9">
-          <File Id="fil63F818ACAE4D4B449760DFC3219D0A8F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.TraceSource.dll" />
-        </Component>
-        <Component Id="cmpAFA6C69CA9EA4CAFA8DEECB1B97E165A">
-          <File Id="filFE7DD225EEB94D28BE794EA2A81E9C62" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.ReaderWriter.dll" />
-        </Component>
-        <Component Id="cmpF1FACB9142CA4F5984AB663240DAEF94">
-          <File Id="fil63B4FDD90E7E458D98579E056A2058AF" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Transactions.dll" />
-        </Component>
-        <Component Id="cmpF444C2E797DD4F2B9074BA942771B475">
-          <File Id="fil5519FB8DAC944FB8B846BDE75613F42C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Primitives.dll" />
-        </Component>
-        <Component Id="cmpB9B1D6F0C54646C2912B83FCC87BDF99">
-          <File Id="fil37706030F316444DAC6F8B90630B7F79" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\Microsoft.Win32.Primitives.dll" />
-        </Component>
-        <Component Id="cmp70A49D733F0748A2A9CDA23EF14A8E32">
-          <File Id="filE7E910A7BC674010A37E0236DCE0312D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Emit.ILGeneration.dll" />
-        </Component>
-        <Component Id="cmpAA20CBA102AA429297F8680518E566F2">
-          <File Id="fil580733538D86457795B762F4F5EDF632" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.XPath.dll" />
-        </Component>
-        <Component Id="cmp682C1D896464431E922B02854391014A">
-          <File Id="fil51BE8A98042B4363BA644C7402509F08" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Primitives.dll" />
-        </Component>
-        <Component Id="cmp928C7033AEB24E9FBB04A0600B41CC19">
-          <File Id="filFC0E26D518DF45D5A753A1FB2F7A74F4" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.Contracts.dll" />
-        </Component>
-        <Component Id="cmpB45A44325EBF44659A9285BE741DBD02">
-          <File Id="fil8F597D20DB90451EBB8E80ED5BB6234E" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\Microsoft.CSharp.dll" />
-        </Component>
-        <Component Id="cmp59E8C9E998F8477DB7FD7684FFA56E9D">
-          <File Id="fil3C02E21E28314CAEAFB43A616FE20B51" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.FileVersionInfo.dll" />
-        </Component>
-        <Component Id="cmp828B1A3149BD4377B8F3ED6BA88A03B2">
-          <File Id="fil8727863F240B4A16B86E4354EDF157D5" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Handles.dll" />
-        </Component>
-        <Component Id="cmpBD7F27AEDD7B4C868A189BF7A9D2F76E">
-          <File Id="fil8CD4B54EEFF74578A9403B08B4556906" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Collections.dll" />
-        </Component>
-        <Component Id="cmpE1A479A4292F4843ACD13A30409DC1B4">
-          <File Id="filD2A50464432245328BF30F0182F16C0D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Collections.Immutable.dll" />
-        </Component>
-        <Component Id="cmpFBD6DDB300E2448794894A328197EA49">
-          <File Id="fil12F1AAD34EC445B6A196D7A6434B99E1" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Claims.dll" />
-        </Component>
-        <Component Id="cmp1C2F0536321D4DF78136F020EDCFBDCA">
-          <File Id="filF34EE9FFF1924251BE68281FFF6C7245" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Extensions.dll" />
-        </Component>
-        <Component Id="cmpAD8B27087C534166B2A469D42E2E10F6">
-          <File Id="filCFD5B934991E4B879E73EA5A8D105872" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ServiceModel.Web.dll" />
-        </Component>
-        <Component Id="cmp4CE47908A06B411898906646E8F5D997">
-          <File Id="fil6272F9ED3CB945469357F633C541B0F8" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.SecureString.dll" />
-        </Component>
-        <Component Id="cmp5ED96F4D11164EF7A37C61987E366993">
-          <File Id="fil2E15DA5A68294B569E8B6560BAB2FA84" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ValueTuple.dll" />
-        </Component>
-        <Component Id="cmp1EB25F8A7ED845C48C73EA0DECD88196">
-          <File Id="fil6439C061715643998BC89AECBA6951AD" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.WebHeaderCollection.dll" />
-        </Component>
-        <Component Id="cmpECBFF52A229A444DA41CA375FE3847B9">
-          <File Id="filC26F92EC7E254C4EAECD22E3DEE7D6DD" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Windows.dll" />
-        </Component>
-        <Component Id="cmp433A7AD786C845AAB8F169592E6AF3A2">
-          <File Id="filE21D5805B7E24FF8A130B7EA1E97F342" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.NetworkInformation.dll" />
-        </Component>
-        <Component Id="cmpCAE58D6AA79D479E8A008C3CA7082AED">
-          <File Id="fil3A2EA8387B5C453081704EF2509F5236" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.DataAnnotations.dll" />
-        </Component>
-        <Component Id="cmp91032B54DCA541E4AAA67482A67F6EA1">
-          <File Id="fil1C24F9C489344FB883F4F1F5399D13E3" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ObjectModel.dll" />
-        </Component>
-        <Component Id="cmpD6DF002B60F64314BF1F9EC76DDA65FB">
-          <File Id="fil806F9FD6AEE54A0B930DBF3B24178A7A" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Security.dll" />
-        </Component>
-        <Component Id="cmp0D2ECC4BB8FA48039B8BAB4044ACF4BB">
-          <File Id="filAD31EF2E825E4307ABB39E00D01F5817" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Globalization.dll" />
-        </Component>
-        <Component Id="cmp0B3E8FBB0744475C9566FEC3B696CD52">
-          <File Id="fil75B7BE18DFE4470C9E9FEE6883FE8BF3" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.CompilerServices.VisualC.dll" />
-        </Component>
-        <Component Id="cmp9A0352BDEEBB4081A4339A98E8FBA2C7">
-          <File Id="fil4659BA2DEF0948AD9A70E22A2BB7ACEE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Web.HttpUtility.dll" />
-        </Component>
-        <Component Id="cmpF0260DEEA2154C918C8BA72038B59316">
-          <File Id="fil8B684344252C4FB7A4FB968289E416AF" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.ServicePoint.dll" />
-        </Component>
-        <Component Id="cmp644C124FFBD849E49B74C36E41D5B81D">
-          <File Id="filD652F3CFAF12443A8AE33538ACBBB758" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.dll" />
-        </Component>
-        <Component Id="cmpD575288323624B33B0B73797494FBD07">
-          <File Id="fil4FF5A97368B045F8B0DCCBB3B80E7659" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.dll" />
-        </Component>
-        <Component Id="cmp67D4312BC35F4F8E89B7A8A79554A02D">
-          <File Id="filC71212E829FD4392BA2CE45B94C69ABA" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Data.dll" />
-        </Component>
-        <Component Id="cmp14568E9EAE004C4081CD534DDA6DA1B1">
-          <File Id="fil20DBEAFFC93D401A82FC1D35F46A8C53" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.Primitives.dll" />
-        </Component>
-        <Component Id="cmp53FCBFE9E6BB44E7BBD2AD363D9EBB30">
-          <File Id="fil42D5B83A2A70481BB4E0CB223BF9520F" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Drawing.Primitives.dll" />
-        </Component>
-        <Component Id="cmp7F11E28876D8470895DD1027B0C7A9EA">
-          <File Id="filF31EE43A593C42A3B56DFB0488D59F28" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.RegularExpressions.dll" />
-        </Component>
-        <Component Id="cmp9C431323C71147B880B02F6BB3E5FB9D">
-          <File Id="fil8EE32E139EC0417F9B6CA489543C8715" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Console.dll" />
-        </Component>
-        <Component Id="cmp8BD0C766EA49444D8015B7620BAC6056">
-          <File Id="fil1BEA4790FFF14255B81415D6CE172D23" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.WebProxy.dll" />
-        </Component>
-        <Component Id="cmp2A0964BABCAA4EBDBD6D71136A5149E5">
-          <File Id="filC3E5917C6F444402AA1084158B982858" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Dynamic.Runtime.dll" />
-        </Component>
-        <Component Id="cmp6E2A46AC5AA64C90BA26ED9B0BBCA089">
-          <File Id="filE225A70396EF49B991511FC2B320B8D0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.dll" />
-        </Component>
-        <Component Id="cmp2A73B2422D1B41B08A686E3AB7BC2C2D">
-          <File Id="fil174082302B194FB9B103E74B65C56919" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.TypeConverter.dll" />
-        </Component>
-        <Component Id="cmp698BE1E5771743BDBADE807EE8223C73">
-          <File Id="filF5A23BE42BBF4F11BEF0FD7F031023DF" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Cryptography.Algorithms.dll" />
-        </Component>
-        <Component Id="cmp2E822223EF204D618173FCF0B53218B3">
-          <File Id="filB1C50376EA32485A91EEB04BC32829F9" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Numerics.dll" />
-        </Component>
-        <Component Id="cmp8DE74DE69BDA4ECD937014D5724C850B">
-          <File Id="filB22372564740497488A345B169B3A863" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.UnmanagedMemoryStream.dll" />
-        </Component>
-        <Component Id="cmp48D75BFE4CDB427BBE9EB9E0599F52A3">
-          <File Id="fil4CDCF9525A124F21BC0929D48236B8AD" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Resources.Writer.dll" />
-        </Component>
-        <Component Id="cmp133CB7F5F7E9456B8AF9E0E8509A5A02">
-          <File Id="fil9B05F0CB27404F109FF1DC38960B5732" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Cryptography.X509Certificates.dll" />
-        </Component>
-        <Component Id="cmpA41A8DA7519444B28D5F8D9A5153DD82">
-          <File Id="filBF7F4CB715594535B3B4EB5437F43520" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Linq.Parallel.dll" />
-        </Component>
-        <Component Id="cmpBF0A1677B1A04B18BC51C7050C6CD9F3">
-          <File Id="filDE79C30DE7BC47C98BCC486061482017" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.DispatchProxy.dll" />
-        </Component>
-        <Component Id="cmp1422C6D338D842A3ABA9811A3B96AA9B">
-          <File Id="filD7F31AED87D947349A603E947E30C4D7" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.Encoding.Extensions.dll" />
-        </Component>
-        <Component Id="cmpE806F42E0910453F8644246B23FED261">
-          <File Id="fil6D1B407E5B784321ACB621BFB83EF165" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ComponentModel.Annotations.dll" />
-        </Component>
-        <Component Id="cmp50C75C361B184C74858974F110E2E8E5">
-          <File Id="filCFB50035886048EB9CECE0E83A1941F5" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Serialization.Json.dll" />
-        </Component>
-        <Component Id="cmpCCC18669FA4D47A4AC543E9275AB020C">
-          <File Id="fil5127475ACBDA49B7BE5DBD752D9778E8" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Sockets.dll" />
-        </Component>
-        <Component Id="cmpB0A109E6A2134C7A8CC4B105BE2F933C">
-          <File Id="filF3D183B90C7B416492ACC30A791A21EA" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Linq.Queryable.dll" />
-        </Component>
-        <Component Id="cmpD74109F0D83C45968797E72AA44AB540">
-          <File Id="fil202DBAC38AD94DC5A73848DF6575C077" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\WindowsBase.dll" />
-        </Component>
-        <Component Id="cmp4A14126FB9654A9CB378FC03F82AF26F">
-          <File Id="fil8A4C2014546B4050BE0B09DED3A33058" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Linq.dll" />
-        </Component>
-        <Component Id="cmp575F17D126B84F4793BCFD5A52E970DC">
-          <File Id="fil4058D751FDCB4857BC4A5355AD25A056" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.Compression.ZipFile.dll" />
-        </Component>
-        <Component Id="cmpE7A3015C602E4891943901F657E0FA56">
-          <File Id="fil237B0F55D8DF4847B889F48DF9BDFDEB" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.AppContext.dll" />
-        </Component>
-        <Component Id="cmpF487A4C3F0264A6D9303F034D6021327">
-          <File Id="fil7D2154A0B39940619A135BA3835188D6" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Collections.NonGeneric.dll" />
-        </Component>
-        <Component Id="cmp09993CA631724E32BCDE9D37D0F693D3">
-          <File Id="fil9CE1BE57D0DA411CA2726D513ECA18E0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.Compression.Brotli.dll" />
-        </Component>
-        <Component Id="cmp9BC232E29E2647A8A7B003BB6F40D8FF">
-          <File Id="filCE84BE70E3B6476A9B02D3EB438B0E70" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.dll" />
-        </Component>
-        <Component Id="cmp089F0E921B0A41C49465A20BFABA43C2">
-          <File Id="fil4CBD42790719440E9E1DC2C8CBC5B228" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.Json.dll" />
-        </Component>
-        <Component Id="cmp90E46A72DAEF4A44849866FC7C294720">
-          <File Id="fil9E810D537C264C179980E8D74245868C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Transactions.Local.dll" />
-        </Component>
-        <Component Id="cmp2A9C7A0AE82B451A968FFD3BDFA98AF1">
-          <File Id="fil8C23F5DA89E94A428D013B0DFA3DD7A8" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.Tools.dll" />
-        </Component>
-        <Component Id="cmp15F391293DD145FF863C946C5B4AD3ED">
-          <File Id="filF83E953FB055497988C7BF0D3058DDAE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Buffers.dll" />
-        </Component>
-        <Component Id="cmpFB0B6282250448CFB2E57A73CE839DB0">
-          <File Id="fil20B4F4792AEB42259104A321899E6942" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Serialization.Formatters.dll" />
-        </Component>
-        <Component Id="cmpD94AD86BA2FF485CBBB7F31982A71920">
-          <File Id="filCA7131E7794B42EFBF1716DDDCFCB2C9" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Core.dll" />
-        </Component>
-        <Component Id="cmp3FB7AC4A79F6475CB336E596278CC5FE">
-          <File Id="filB03648CEF0124FF8B49FC6A3CF9286CE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Serialization.Primitives.dll" />
-        </Component>
-        <Component Id="cmp95F30B1E8A5E4DD2B018E39CEC673174">
-          <File Id="filFBEC3F3F072841E496E33BA503DF543C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\Microsoft.VisualBasic.Core.dll" />
-        </Component>
-        <Component Id="cmp365244FBCB8B485EACE853AD63A74B25">
-          <File Id="filF7BFD2F568554930B86E3C89F0EBC2E0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.dll" />
-        </Component>
-        <Component Id="cmpD15F774C68E44CB0AA939A0D21B1B3A2">
-          <File Id="fil042991DBD8494F19AC54DB496EDC3F91" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.XmlDocument.dll" />
-        </Component>
-        <Component Id="cmp13C4E682375C45B9942960245FAFD251">
-          <File Id="fil9FE4F438DB9C437C86DFA86CB028C358" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.dll" />
-        </Component>
-        <Component Id="cmp70F072FB2F714F909A9272D0F6B96664">
-          <File Id="filAE05B91AABF848F6A2964849F82E0010" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Configuration.dll" />
-        </Component>
-        <Component Id="cmpFAC4ADBC484C44528D4B40EB4B649088">
-          <File Id="fil41C0D6C91BE142DABFB84271B4273C4D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Data.Common.dll" />
-        </Component>
-        <Component Id="cmp685C3DD9CC0F43CAB418B63A834B966D">
-          <File Id="fil88F8F4E303A744778DB03808602C0E3B" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Xml.Linq.dll" />
-        </Component>
-        <Component Id="cmpC6A164F9BEC5416D80513C1ADC404A10">
-          <File Id="fil0240D3A978424FA79480726E1E8AF3E9" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.ServiceProcess.dll" />
-        </Component>
-        <Component Id="cmp99753882760240589EA4679C6EA0B829">
-          <File Id="fil4FB27F38F3BC4D638FA29B5639AC895A" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Numerics.dll" />
-        </Component>
-        <Component Id="cmp8490EDAA5CBE43C4908761C12B7082F3">
-          <File Id="fil4494E0608CB7406FBA4BCFF91E06485E" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.Encoding.dll" />
-        </Component>
-        <Component Id="cmp282D15F724FF462BA8DD96C984CF7A92">
-          <File Id="fil4122490A62DC4E71AADF3FFA9E54CFCE" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Ping.dll" />
-        </Component>
-        <Component Id="cmp5C521E049A6A4AFBB757B0A6EAA719A1">
-          <File Id="fil5BE8E3168F104F9F956C7CB8FCF31902" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\Microsoft.VisualBasic.dll" />
-        </Component>
-        <Component Id="cmp6E47302FE24348BDBED003ACA133F7DB">
-          <File Id="fil1B879010BBE0469B81D9F0D3F2CC443C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.Serialization.dll" />
-        </Component>
-        <Component Id="cmp63589D2DF7554D2188C43D463450582D">
-          <File Id="fil4B28CB9F9576414CADFDD4CF4122E3A2" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Http.dll" />
-        </Component>
-        <Component Id="cmp7C95FAD00FBA4F0398673010B419DA0F">
-          <File Id="filB6B0BF18E38B4543AC664EBAE5935585" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.Process.dll" />
-        </Component>
-        <Component Id="cmp2BC70FF4642F47279F1367945C8B071C">
-          <File Id="filDF8F6058EBBB46D78F963F0ED5320A62" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.TypeExtensions.dll" />
-        </Component>
-        <Component Id="cmp80C113A1052C4E8DACF059A155C376D7">
-          <File Id="filB517B31F68274025933382B3C5850204" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.InteropServices.RuntimeInformation.dll" />
-        </Component>
-        <Component Id="cmp153033BD7D674B17BC7B2D1507CA9E96">
-          <File Id="filBEFACED16AB94948B29FF889752772D0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.Debug.dll" />
-        </Component>
-        <Component Id="cmp1A23FA3412994BDD81D86A4D4DCCACD1">
-          <File Id="fil62F29F3BEDDD41758BA43123A39C12E5" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Resources.ResourceManager.dll" />
-        </Component>
-        <Component Id="cmp5A55FE85D2D447B6B6117D4ADD1508A4">
-          <File Id="fil331AFC3AD3764FAD94507C8283B96A96" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Tasks.dll" />
-        </Component>
-        <Component Id="cmp714283D80B4C458DB6A852460C8E6377">
-          <File Id="fil8D56FFB29A0B4D25BB6D7725B1BD5F28" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.Compression.dll" />
-        </Component>
-        <Component Id="cmpE5EC845627BC46699E592CC41DC12093">
-          <File Id="fil494EFFD8362845579DDFEBA92D10F427" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Emit.dll" />
-        </Component>
-        <Component Id="cmp3138552E309449D4A811B8C1D35D7C85">
-          <File Id="fil02515D3088B443FD851C21919A61CDAF" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Tasks.Parallel.dll" />
-        </Component>
-        <Component Id="cmpBE386D12CF4C4227B93279D1CD3B0C6E">
-          <File Id="filEDD6E0FC3B514FCD90E5A29C4B8380AD" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.dll" />
-        </Component>
-        <Component Id="cmpD7D2E5ADBF034474BADC416A03BBE368">
-          <File Id="fil440C76C03A22475098B96B9B1E24CB51" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Security.Cryptography.Encoding.dll" />
-        </Component>
-        <Component Id="cmp1719A38F3C30484BBA189D718AF00D3C">
-          <File Id="filBA4CCA1AC90C47F18852B422C9B58880" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Reflection.Extensions.dll" />
-        </Component>
-        <Component Id="cmp770700CA06564FB187D1CD2A79AA3DA8">
-          <File Id="fil88BCFE5237EE44A6AF259F91B9DF39C0" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.IO.FileSystem.Watcher.dll" />
-        </Component>
-        <Component Id="cmpEA40E9164309426C88C4388FDCA9559D">
-          <File Id="fil205C9BE7027A408B985D96F5EEF11594" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Threading.Channels.dll" />
-        </Component>
-        <Component Id="cmp859A3876902946E7B5B4965F90664C5D">
-          <File Id="fil2E0E3963F95C47F3BEA7D5A5848D6F28" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Diagnostics.DiagnosticSource.dll" />
-        </Component>
-        <Component Id="cmp25A144CC34E545378735B06794A02F90">
-          <File Id="filFCE4A935DE1D4DD08E9A1D32A07E0266" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Drawing.dll" />
-        </Component>
-        <Component Id="cmp19ADFEFDD03047828CF493B5B5CE7B6E">
-          <File Id="filCE65C019A32144BB9E9CCA3D5E634E32" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Http.Json.dll" />
-        </Component>
-        <Component Id="cmp72C41225E0B4457C8CB5F4C5FE6E3187" Guid="{ee32f38f-14ee-4a85-914f-d02522cc3635}">
-          <File Id="fil04B0F83A7AED430A86A7E6E3E99AB45D" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Formats.Asn1.dll" />
-        </Component>
-        <Component Id="cmp49588B1BA09F4BBCA352B162F387AAF1">
-          <File Id="fil77BEE4F2A1A44842B4135984E1D71538" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Net.Quic.dll" />
-        </Component>
-        <Component Id="cmpEE26930D65E346FDAE1B3E07F5DBEF77">
-          <File Id="filBC93A3F22F78439F8D4173E4C64ACFDC" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.Encodings.Web.dll" />
-        </Component>
-        <Component Id="cmp834F3E0C83664E92B0D115A39A8FAACB">
-          <File Id="fil6A09131961874B31AC3EBEC863CC12C4" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Runtime.CompilerServices.Unsafe.dll" />
-        </Component>
-        <Component Id="cmp68158D010ECB439582D041355BFACCBB">
-          <File Id="filB8694A0190CA422E9462870B514B813C" KeyPath="yes" Source="$(var.ProductSourcePath)\ref\System.Text.Encoding.CodePages.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dirC72EEAF9434D4AD066E0F4D20D8E816C" Name="en-US">
-        <Component Id="cmpDC2EF4541FA5A2E63F36A8CD6C5FA51B">
-          <File Id="fil66F0F6FD1F8BC9AEE1ABDC8C805F396C" KeyPath="yes" Source="$(var.ProductSourcePath)\en-US\default.help.txt" />
-        </Component>
-      </Directory>
-      <Directory Id="dirA620CA71E6FF4F50B6D7BB0761D17036" Name="preview">
-        <Component Id="cmpA620CA71E6FF4F50B6D7BB0761D17036">
-          <File Id="filA620CA71E6FF4F50B6D7BB0761D17036" KeyPath="yes" Source="$(var.ProductSourcePath)\preview\pwsh-preview.cmd" />
-        </Component>
-      </Directory>
-      <Directory Id="dir9956A485678594F33C936BA160AD06C4" Name="Modules">
-        <Directory Id="dir47C9B30879BAE4DA41C8786181D82A02" Name="Microsoft.PowerShell.Utility">
-          <Component Id="cmp2DF9FE0BD560EB7DC8489A259330C2C6">
-            <File Id="fil70CD54BF55F5335B82B2BED64BDB246D" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Utility\Microsoft.PowerShell.Utility.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dirAB5880051B03D55D6C333CF1F67C7F76" Name="PSDesiredStateConfiguration">
-          <Component Id="cmp9723892C7119DFDFD3A6FAE8027B053F">
-            <File Id="fil52D468AAC368F8F9427B5AB0D5DF94F3" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1" />
-          </Component>
-          <Directory Name="Configuration" Id="dir709A20AD6F5242A1805E8C5D775F584C">
-            <Directory Name="BaseRegistration" Id="dir46B77C0AFD5642C9A8A00107796F3AF0">
-              <Directory Name="en-US" Id="dirDC3198AB09D84802BC00C697A113698B">
-                <Component Id="cmp2CA89A2376A848BE849FBD5ECFD6738B">
-                  <File Id="filB354FF41265E43498774FB1E8F86A3EE" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\en-US\MSFT_MetaConfigurationExtensionClasses.Schema.mfl" />
-                </Component>
-                <Component Id="cmp0E915393766B4DC6A9A83EBA0C218BF4">
-                  <File Id="fil426E09F768D94A1DA8B4B91B68926493" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\en-US\MSFT_DSCMetaConfiguration.mfl" />
-                </Component>
-                <Component Id="cmp5DF3BF3BEEE34C329E690E094A3CAFA2">
-                  <File Id="filCEE0C3D2C1134C59921EE338A9F10BCA" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\en-US\BaseResource.Schema.mfl" />
-                </Component>
-              </Directory>
-              <Component Id="cmp19F1175335B14CA5AC6F7ABA06E4DD34">
-                <File Id="fil0BF7A56B763E4CAA8195E7E886484FCD" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\MSFT_DSCMetaConfiguration.mof" />
-              </Component>
-              <Component Id="cmpF8DA47047FBD4A7B8F876059F4EDB73D">
-                <File Id="fil86FCEEBF9FE145D9BAA7D19769959F70" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\BaseResource.schema.mof" />
-              </Component>
-              <Component Id="cmp44977EB99C0647F4941AA2711A81651F">
-                <File Id="fil5909011A884C453C92EBDB5550791B6C" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\Configuration\BaseRegistration\MSFT_MetaConfigurationExtensionClasses.schema.mof" />
-              </Component>
-            </Directory>
-          </Directory>
-          <Component Id="cmp3AF5C6350FE04033B037554EA5060135">
-            <File Id="fil58E456DF33A141DFA4B165479510EA95" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psd1" />
-          </Component>
-          <Directory Name="helpers" Id="dir4774426A44B041E1A377AE889D3FFB19">
-            <Component Id="cmp0125D538DA2E4396BC1D595250B69263">
-              <File Id="fil98D6A2CAE08A408BB0215CD1DD6C7A0F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\helpers\DscResourceInfo.psm1" />
-            </Component>
-          </Directory>
-          <Directory Name="en-US" Id="dir28499A54B1694A25BB7EFA06CAE3272E">
-            <Component Id="cmpAC685A1C6E354E228EB6A1DD95FF03D5">
-              <File Id="filD2DD9066D1A148EBB7AD542DAC529862" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\en-US\about_PSDesiredStateConfiguration.md" />
-            </Component>
-          </Directory>
-          <Component Id="cmp67C4A6FC5E48487BB31DE411CF38B0B2">
-            <File Id="fil747B2801746E4FFCB93000BBA1089F15" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.cat" />
-          </Component>
-        </Directory>
-        <Directory Id="dirECE37E3EC3637A365744D075BD8132E9" Name="Microsoft.PowerShell.Management">
-          <Component Id="cmp6DAFD01CAA3A4C67185922F445EDE495">
-            <File Id="fil92C4A6B2083E49B1909D17BC06E7526F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Management\Microsoft.PowerShell.Management.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dir308F699462177A4A4EB081FCF3943B79" Name="Microsoft.PowerShell.Host">
-          <Component Id="cmp4AF592F1EDC8794BF4A3CCC2DCB717DB">
-            <File Id="filEAF341A02385E812D9DBA1954B461140" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Host\Microsoft.PowerShell.Host.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dir13107C3357D29AD16DC8ABBEF9C683BE" Name="Microsoft.WSMan.Management">
-          <Component Id="cmpA65CEF99B64C1E95632B68EDFBF3739E">
-            <File Id="fil4A969CF18FEA89C236DDE9BA748A9679" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.WSMan.Management\WSMan.format.ps1xml" />
-          </Component>
-          <Component Id="cmp4E2AF72E6ECEABCE2937EF70ABE28E3E">
-            <File Id="filEF1B1AD4BCE9EF6D08D4884F294216A4" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.WSMan.Management\Microsoft.WSMan.Management.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dirA79CCA5D413E4146FF519185BC266FCA" Name="CimCmdlets">
-          <Component Id="cmp28589E9CE30CFECFD2D4F254C0D9FA3B">
-            <File Id="filFEDED501C12D4772D0EF1806E5F36729" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\CimCmdlets\CimCmdlets.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dir972F7D2C0F3B28314172B665FFBF282C" Name="Microsoft.PowerShell.Diagnostics">
-          <Component Id="cmp482A2116B9027938C4908B0F03D30EBC">
-            <File Id="filDCAC2CAD93C0D3826D91203C2A56E277" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Diagnostics\Microsoft.PowerShell.Diagnostics.psd1" />
-          </Component>
-          <Component Id="cmp21D1955A825F85473DD543FBD1962B53">
-            <File Id="filCB09C7BA1AAB249133110B1D175E84B4" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Diagnostics\Event.format.ps1xml" />
-          </Component>
-          <Component Id="cmp9451F72F30580C1268817EBEF06429CE">
-            <File Id="filFACC1D9BF0615158D574E2A7E7BD415F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Diagnostics\Diagnostics.format.ps1xml" />
-          </Component>
-          <Component Id="cmp8C5204B533E790983072FC17EF32FB20">
-            <File Id="fil548B01A4E1E387F293E3641536CDCC6C" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Diagnostics\GetEvent.types.ps1xml" />
-          </Component>
-        </Directory>
-        <Directory Id="dir814D10C6FCD49781C626235B1DB22D76" Name="Microsoft.PowerShell.Security">
-          <Component Id="cmpDEDA23DDAB66342DB2C554F6B963C617">
-            <File Id="fil5B71C67EDDC69A7238518F8E66D68DE7" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Security\Microsoft.PowerShell.Security.psd1" />
-          </Component>
-        </Directory>
-        <Directory Id="dirDD3349AACE61FF0B4AEC004BF05FF2F9" Name="PSDiagnostics">
-          <Component Id="cmpF79A92F228AF5EA2BA60CC33BE9DC6A0">
-            <File Id="fil43CFD83FF7920726B99C4E4131244E49" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDiagnostics\PSDiagnostics.psm1" />
-          </Component>
-          <Component Id="cmp603C5B38651EE30C8E23FD7C8A4B828D">
-            <File Id="fil9EE564F904ED2FAFAB47A1188006EB6F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSDiagnostics\PSDiagnostics.psd1" />
-          </Component>
-        </Directory>
-        <Directory Name="PackageManagement" Id="dir0029FE7DDE1F47CF801DAD706A3A47F5">
-          <Directory Name="DSCResources" Id="dir02254C0ADC034F44B87B754FAEB409FC">
-            <Component Id="cmpDDD9F623B3DC4A6DB15A013734FFFACB">
-              <File Id="fil28C672F884A14B9D8ACFB6534423CA51" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\PackageManagementDscUtilities.psm1" />
-            </Component>
-            <Directory Name="MSFT_PackageManagementSource" Id="dir467F7C8961D842AEBB4188D2F3004198">
-              <Component Id="cmp8C23BECAFDBB4039A255DE6246A30726">
-                <File Id="filB3CEF74508FF4DEDADF38F9046799EFB" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagementSource\MSFT_PackageManagementSource.schema.mfl" />
-              </Component>
-              <Component Id="cmp09A46C31077C4BDCB8606FB4DD6CAE01">
-                <File Id="fil3127E5CBC6F84A86A649AEEC7F05EE4F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagementSource\MSFT_PackageManagementSource.psm1" />
-              </Component>
-              <Component Id="cmpC2EEED1CA2094DB1B760297F2374216A">
-                <File Id="fil37B3029A78E54465A61BA0C824E126C1" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagementSource\MSFT_PackageManagementSource.schema.mof" />
-              </Component>
-              <Component Id="cmp8B763D3852654517B3E25C9CA5247D5F">
-                <File Id="fil2A5CA06AAE2742C7BA2FFD976497B5A8" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagementSource\MSFT_PackageManagementSource.strings.psd1" />
-              </Component>
-            </Directory>
-            <Directory Name="MSFT_PackageManagement" Id="dirBFCFB87C5E0E43C5BE7FD2C052C5946A">
-              <Component Id="cmpF297CB46D5944DC38C68B376140BDF5C">
-                <File Id="filFB1C81A053634DCFB01E3A3F7E9FE84F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagement\MSFT_PackageManagement.strings.psd1" />
-              </Component>
-              <Component Id="cmpA5CB9D3B3C794D2E9750BFF7C9709C83">
-                <File Id="fil27BF11C40A504DDB9CDAE9E293F5EAD8" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagement\MSFT_PackageManagement.schema.mfl" />
-              </Component>
-              <Component Id="cmp98E30699A7504181B61707E99DCC0EC1">
-                <File Id="fil5C51CE77EF584ECDB345C613EB0EA4FE" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagement\MSFT_PackageManagement.psm1" />
-              </Component>
-              <Component Id="cmp61560691133844F886A1E72130659721">
-                <File Id="filD07C8A856BDA4E95B820CD3E134FC345" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\MSFT_PackageManagement\MSFT_PackageManagement.schema.mof" />
-              </Component>
-            </Directory>
-            <Component Id="cmpA83063651AF54638A78187CA67953118">
-              <File Id="fil94E5AE8C0F25406EA6F009B9B3D96210" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\DSCResources\PackageManagementDscUtilities.strings.psd1" />
-            </Component>
-          </Directory>
-          <Directory Name="coreclr" Id="dir95255D69241447C5A82808FD961E1DD0">
-            <Directory Name="netstandard2.0" Id="dir7412D53B0487498E8197451AA63B9953">
-              <Component Id="cmp819F1885245B46C0982FFDD7301BFC21">
-                <File Id="filCDCEC7CC51DD44BBA28FF3DD0ED04289" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PackageManagement.ArchiverProviders.dll" />
-              </Component>
-              <Component Id="cmpE0A78C8CA25E4D20AAB3E64A1AA55E07">
-                <File Id="fil8010D5F9E942488DA55A4119A9EAC82E" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PackageManagement.dll" />
-              </Component>
-              <Component Id="cmp0F685BFF00054470A02D82A5237DD4D2">
-                <File Id="fil7C866EE64B72463AB55EB563E1CE635F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PackageManagement.MetaProvider.PowerShell.dll" />
-              </Component>
-              <Component Id="cmp51F4B23B87C6428B81ABAA8E8C913B99">
-                <File Id="filFE28EDE13153410F8BA2EC9AA0E7155D" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PackageManagement.NuGetProvider.dll" />
-              </Component>
-              <Component Id="cmpE4A3A9C6EBE34E9AAF4EB02937545542">
-                <File Id="fil7EBFC52E021D46CA9CCC2B6D6FE59AA4" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PackageManagement.CoreProviders.dll" />
-              </Component>
-              <Component Id="cmp5297F3A0CC784D5FB179A2C5128882BA">
-                <File Id="filFC19A06D3A82476CA6B5CD6717D53C39" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\coreclr\netstandard2.0\Microsoft.PowerShell.PackageManagement.dll" />
-              </Component>
-            </Directory>
-          </Directory>
-          <Component Id="cmpD59302B61FD5436C873FB46D8EFB3443">
-            <File Id="fil85695C6137244D53B45EE49EAA52F1DE" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\PackageManagement.psm1" />
-          </Component>
-          <Component Id="cmpB42E81A3AE804C20B209D05172709994">
-            <File Id="filE0C6483CEA5945A098C3CEF8559284AA" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\PackageManagement.Resources.psd1" />
-          </Component>
-          <Component Id="cmpE9DB812405C44652B6BEF707AFDC345E">
-            <File Id="filCB8CBEA7AF6C424587BA5E2C759CE938" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\PackageManagement.format.ps1xml" />
-          </Component>
-          <Component Id="cmp988678E2987C440F828A11DC2BDC7BFB">
-            <File Id="filF99521F7316946708234601020C64E48" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\PackageProviderFunctions.psm1" />
-          </Component>
-          <Component Id="cmpE48B7EDF48A04D1C82A32EDBCD2E8E07">
-            <File Id="filD267FC3422004444A1D7A446CC13ABAE" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PackageManagement\PackageManagement.psd1" />
-          </Component>
-        </Directory>
-        <Directory Name="Microsoft.PowerShell.Archive" Id="dirD041DEE4F67848958E0D4AF104E4088C">
-          <Component Id="cmp27E5DBB49A7A4962BD6C74C79276DAA5">
-            <File Id="filEA21BF9352E34E788C266766FFC378AF" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1" />
-          </Component>
-          <Component Id="cmpBCEF6DF1461C426BB07539392C7299E1">
-            <File Id="filC0BB3E4303834CAFAE3F29BFB257D295" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.cat" />
-          </Component>
-          <Component Id="cmpF26771D0C4AC49DDB2A5231B9DD191E8">
-            <File Id="fil6A81711F3FD24E2D8998F0442448287E" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psd1" />
-          </Component>
-          <Directory Name="en-US" Id="dirE0F5BE4076F149AC80E2FD3536CD3209">
-            <Component Id="cmp2B41C7F93EAA4322B3FAED6F2BE95724">
-              <File Id="fil8468B83DABAC4E9BA4C03800CC4E1B2B" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\Microsoft.PowerShell.Archive\en-US\ArchiveResources.psd1" />
-            </Component>
-          </Directory>
-        </Directory>
-        <Directory Name="PSReadLine" Id="dir863FE8E11F754A92B789BDA7F952862C">
-          <Directory Name="en-US" Id="dir3D05031A285040E2A7B1C358D1A874D2">
-          </Directory>
-          <Component Id="cmp3F09B23AC8E74CEB9C09BD3BDF48DE0B">
-            <File Id="filE98EB0CE020843F8BA6D6E8F5B70D5CC" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\PSReadLine.format.ps1xml" />
-          </Component>
-          <Component Id="cmp2A7508B89C784581B8FEF2BB5C810CB7">
-            <File Id="fil4930DC9C503B46D8B5637613BF78B2F4" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\SamplePSReadLineProfile.ps1" />
-          </Component>
-          <Component Id="cmp06639B424B054D12A42F24F28FB682E7">
-            <File Id="filF70B3CBE4BF84DA48A3992FF8F746D32" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\License.txt" />
-          </Component>
-          <Component Id="cmpC0C47C3075164964B8F8428CE44F7144">
-            <File Id="filBC3A7BF349C546FD80B2A929F15051F9" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\PSReadLine.psd1" />
-          </Component>
-          <Component Id="cmp6DDBFA3A9FED42B3AFDCDD4BE0416533">
-            <File Id="filEB1F1117AECD4C089F330399C4959215" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\Changes.txt" />
-          </Component>
-          <Component Id="cmp84599819161549BC82898469571ADE7B">
-            <File Id="filA7411D27CC484521901DADFEA1195B65" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\PSReadLine.psm1" />
-          </Component>
-          <Component Id="cmpC0582B8F392548248FA3DE3080069F68">
-            <File Id="fil1A3F0A1371A643AFAA4F896D9D5CBF70" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\Microsoft.PowerShell.PSReadLine2.dll" />
-          </Component>
-          <Component Id="cmp6EEA835AD77246C8A01C0F3B8BB0568E">
-            <File Id="fil0A748F74DB0245539BF6ECEBFDB3C884" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PSReadLine\PSReadLine.cat" />
-          </Component>
-        </Directory>
-        <Directory Name="PowerShellGet" Id="dir49159A33EB06456C9C2C971815311A6A">
-          <Directory Name="en-US" Id="dirF5EBE6CBD04149359D3582351CB4438D">
-            <Component Id="cmpB9EF9DAB25064D92A757E7D390CC8922">
-              <File Id="fil73C66DF77084428991DB9DD8EA95DDC1" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\en-US\PSGet.Resource.psd1" />
-            </Component>
-          </Directory>
-          <Component Id="cmp092D1859608844F78D3211718ED31171">
-            <File Id="fil8A2664FF321C439BB1A1506FF6BE5F38" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\PSModule.psm1" />
-          </Component>
-          <Component Id="cmpDCFC0B0822274CA2A1C954DF2E407911">
-            <File Id="fil2C5A4868882E4332A979CBADD4B4E482" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\PSGet.Format.ps1xml" />
-          </Component>
-          <Component Id="cmpE773C5B7686C496DAD2111AF1950D73E">
-            <File Id="fil3EBFBD44F6EE484FBF91647B3AEBDFF0" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\PowerShellGet.psd1" />
-          </Component>
-          <Component Id="cmpA3A50C81E1704ABF9022F6ECE265165E">
-            <File Id="fil08AD7407549745D196FA8B37C8D2507F" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\PSGet.Resource.psd1" />
-          </Component>
-          <Directory Name="DSCResources" Id="dirAB16AE2D3D8B4288AE7576FDEC086E52">
-            <Directory Name="MSFT_PSRepository" Id="dirDD4171A90E3249BAAE0CBA188ACFAEA9">
-              <Component Id="cmp0744A0E2DA694EFB97172A770E654F92">
-                <File Id="fil5E23072824794507A868A3ADE2251A34" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSRepository\MSFT_PSRepository.schema.mof" />
-              </Component>
-              <Directory Name="en-US" Id="dirB2E345CF157E4ED9BB8BE952ACA7FDA9">
-                <Component Id="cmpFD06F9A229864F5790E63806319F83AD">
-                  <File Id="fil1B0B56F52A114FE897D27BC7B3E41B61" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSRepository\en-US\MSFT_PSRepository.strings.psd1" />
-                </Component>
-              </Directory>
-              <Component Id="cmp15C7696A8C674672B37E17B47362007E">
-                <File Id="filD7D5538EF209465DB611148B5295E27A" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSRepository\MSFT_PSRepository.psm1" />
-              </Component>
-              <Component Id="cmp7EEE0A4DF02E458C910EF847AA089810">
-                <File Id="fil3157374F72BA470EB2449E8012F0DDCD" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSRepository\MSFT_PSRepository.schema.mfl" />
-              </Component>
-            </Directory>
-            <Directory Name="MSFT_PSModule" Id="dir906ECD1469A442A3850AD971ED7DE6C7">
-              <Directory Name="en-US" Id="dir1742395372DB42ED87FA324564C49BB8">
-                <Component Id="cmp8695A6F4923144AA8718508338703A94">
-                  <File Id="fil9C8A5A606E624058B2BC34A01AF49B98" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSModule\en-US\MSFT_PSModule.strings.psd1" />
-                </Component>
-              </Directory>
-              <Component Id="cmpF9D44A0B8AAB46608F02CD2753D456A6">
-                <File Id="filFA4EB3EE779C43D89B40D79F92FEC863" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSModule\MSFT_PSModule.psm1" />
-              </Component>
-              <Component Id="cmpC1D0D334836C4821B04087DDFE167637">
-                <File Id="filD15EE857653646F69F360A79F2539A88" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSModule\MSFT_PSModule.schema.mof" />
-              </Component>
-              <Component Id="cmp8A4E5A03C2644F199C7395C8EA350F65">
-                <File Id="filE4A5DC4582CF4743927A38A9261DCA18" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\DSCResources\MSFT_PSModule\MSFT_PSModule.schema.mfl" />
-              </Component>
-            </Directory>
-          </Directory>
-          <Directory Name="Modules" Id="dir4CE087A20269471C9857E1035913C22C">
-            <Directory Name="PowerShellGet.ResourceHelper" Id="dirD20C27FB9850453FAADC804153DB8FD8">
-              <Directory Name="en-US" Id="dir2FB3A08F38A54A418CDB46CAD7DE2832">
-                <Component Id="cmp34E774DA28624BD1A89866B9D80788C2">
-                  <File Id="fil60A79BEC83424ECB98D30D53A6C70FF8" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\Modules\PowerShellGet.ResourceHelper\en-US\PowerShellGet.ResourceHelper.strings.psd1" />
-                </Component>
-              </Directory>
-              <Component Id="cmp75D079D2DE8545BB962554C7EFE6A37C">
-                <File Id="filCD484316E58C40C79D581E4D00B41C09" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\Modules\PowerShellGet.ResourceHelper\PowerShellGet.ResourceHelper.psm1" />
-              </Component>
-            </Directory>
-            <Directory Name="PowerShellGet.LocalizationHelper" Id="dirD76614DCAA9244BB8D1AD7A18F117390">
-              <Component Id="cmp5109AF6E6AEF499CA12097B6ADD80E7D">
-                <File Id="fil19722ABB729B4FEB96D98CD9BEE711EA" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\PowerShellGet\Modules\PowerShellGet.LocalizationHelper\PowerShellGet.LocalizationHelper.psm1" />
-              </Component>
-            </Directory>
-          </Directory>
-        </Directory>
-        <Directory Name="ThreadJob" Id="dir507D08FD3D324A449516FEFAFCC90874">
-          <Component Id="cmpD84D3B43B60040C8BF73D30F89F14AA5">
-            <File Id="fil210136B9F56F455E885569F7E5566199" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\ThreadJob\ThreadJob.psd1" />
-          </Component>
-          <Component Id="cmpCC4657AEF2A7400D984E1CE6418EF589">
-            <File Id="fil6B026F6D5210498B99E5F14386F4F90B" KeyPath="yes" Source="$(var.ProductSourcePath)\Modules\ThreadJob\Microsoft.PowerShell.ThreadJob.dll" />
-          </Component>
-        </Directory>
-      </Directory>
-      <Directory Id="dir20D076755BAF7EA1D1A980368C4F81A2" Name="assets">
-        <Component Id="cmp15F28BD2B7F14BA1896108C2807DF79A" Guid="{e9025be2-4eb2-440e-b111-93e94609b77d}">
-          <File Id="filD2672837165147059E63E9FC517FBBE3" KeyPath="yes" Source="$(var.ProductSourcePath)\assets\Powershell_black.ico" />
-        </Component>
-        <Component Id="cmpA27244FF28CB4A09917A26F8C2FCB073" Guid="{c8056835-5256-459f-ac60-0b9b7136d60e}">
-          <File Id="fil960B0466FC4841AEA3AAC9513A8A8EB9" KeyPath="yes" Source="$(var.ProductSourcePath)\assets\Powershell_av_colors.ico" />
-        </Component>
-        <Component Id="cmp97FEAD2979114A7591659F2D1B1DDC26" Guid="{0c09f186-9051-4237-a999-30da9c2ccf5a}">
-          <File Id="filA9E9D3CE6F65484CB2B046C87234F8FC" KeyPath="yes" Source="$(var.ProductSourcePath)\assets\Powershell_avatar.ico" />
-        </Component>
-        <Component Id="cmpF12EA5F78013432C8B0FA4A74FCF0512" Guid="{21706ea9-da58-43dd-88b0-9f8277635fac}">
-          <File Id="fil704CD46590FD480293723441F88C8570" KeyPath="yes" Source="$(var.ProductSourcePath)\assets\ps_black_32x32.ico" />
-        </Component>
-      </Directory>
-      <Directory Id="dirC93D10F1DE914404E3248A7E28901CDC" Name="cs">
-        <Component Id="cmp8CAF71174AEF09BEBBC46FBC901FF5DD">
-          <File Id="fil3169ED0305E61C348D259FF7FD737CF6" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp1C0D095085408CA5B6AE3C1FCDDC2080">
-          <File Id="fil1411A1AAE919B104B50C9201EF1B6B38" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpB613EB418AA14112BFFE06A1A9730300">
-          <File Id="fil0AB05ADD2824432E86ABB44BCED5F7C7" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmpC383E1BDB1B24C2C9B966D56CD0B0B6C">
-          <File Id="fil93C960640204483AB0A3E82021098F09" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpB0A0314309E042FFB372C46FCD3F7FE1">
-          <File Id="filFBAB2A3A1639486692C684ADC647E99B" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp0A8A1076B5AE48F08B8ACC94ADFF47D5">
-          <File Id="filDD813E2712CB43EA9EE31DC8E4AC8B35" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmpCCD483BF49F440E4BCFE636AFA003952">
-          <File Id="fil989B9F28DA934A208AC0A17C1677C158" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp11B000987A334C608FFE4B05A75E9911">
-          <File Id="fil20A07FA4FAEE4A4883F760F2EAC5EBC5" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpE40EC088023743D686B67244829E7C80">
-          <File Id="filC809D924A75346E3A966D8E76D29BA32" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp52B5DCF67F6541FCA4E5EC9AFAFDA243">
-          <File Id="filB7DA766A77CE415286807071A77BD011" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp3B69477C65444471BFEA22BB68C3E7BF">
-          <File Id="fil1826D070CF954554BA7F8D0F25EB7D2B" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp1F81BFEC090444E7970ABB24AEEA3025">
-          <File Id="fil048BD1E565AE4710986210B225356315" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp7B112D436F7A426CB85E9C0DFC3C84BB">
-          <File Id="fil2CED30DFA1E64755AAE303486A54B65D" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpEC979AEEB8104AC38CC49A276A8E2BBA">
-          <File Id="filF78DB9411EC64A1A908982C98ECD5EB8" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp8A9BD4D7BCD84712BFE690F6873BF7EB">
-          <File Id="filABF6F7CE2EE94DDE8B03BCF41C60BBFC" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpBD96D1F1B1274971B8285118A4BBCF20">
-          <File Id="fil13727361ACC54579B9DB3BD3A928AB79" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmpF429A622BF26430592ECE6BFD1EBE61A">
-          <File Id="filAA4340033EBD4532875FF4D3DF2FFB92" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp38D8A48C68FB4CB399A0A7677FA428E4">
-          <File Id="fil471D3319BAA941DC858853CF3D27B6EE" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-        <Component Id="cmp57D197B18F1F4A6AAB704B28CF61B535">
-          <File Id="fil71B3802CB88348AC888B9902212CADA2" KeyPath="yes" Source="$(var.ProductSourcePath)\cs\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dirEA0127D6607E68B508B9DB9CE315A2CE" Name="de">
-        <Component Id="cmpF2941A91B17EEA22CD6DAB34693D9AC0">
-          <File Id="fil2178442EC4F9ACE23B92A2FBDC696A04" KeyPath="yes" Source="$(var.ProductSourcePath)\de\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp0E8354647101C56EF81E9BDB164B586E">
-          <File Id="fil47A3772B9113EA8666F027298BC3EF98" KeyPath="yes" Source="$(var.ProductSourcePath)\de\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpDCAA22865EF8486AB7526E046A51DBF6">
-          <File Id="filE2BB7A8A821C49648EFFE3EA5E37C3DD" KeyPath="yes" Source="$(var.ProductSourcePath)\de\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpE672F066E28F4FF5B321F862BCC1FDC1">
-          <File Id="fil35A17016D9BE44CA91205A902498CC83" KeyPath="yes" Source="$(var.ProductSourcePath)\de\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpDFFD2A0952764E5497B251723E548DAC">
-          <File Id="filBC629939897F40E3B05B98EA87F29DA5" KeyPath="yes" Source="$(var.ProductSourcePath)\de\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmpA26B371BF2DD4B57B2921A355CA4949F">
-          <File Id="fil4304F4A9EF96420F9BAF7FCADA618D00" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp7BA2717148D54825B44FFF294F0841B5">
-          <File Id="filBF09B9173D9345D28BDA89EF6154DC9C" KeyPath="yes" Source="$(var.ProductSourcePath)\de\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp5ECFFAA41BD543BE90669D4D1C276ED7">
-          <File Id="fil436B2F1954F84DDFA5183B56C8C778B5" KeyPath="yes" Source="$(var.ProductSourcePath)\de\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp69F9907759284AC68BE83207CE37B618">
-          <File Id="fil38887DAC50B44D0DB658953C345A972B" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpDE367F1AE006450482BBBCF1761131DA">
-          <File Id="filA08A64D96DBD496E8850AFFC3CA49FB6" KeyPath="yes" Source="$(var.ProductSourcePath)\de\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp40434DB1393A479299F4758D94282C47">
-          <File Id="fil7559CF94E14B4EC59AF1B4FFAC63D3AE" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpB5589E1EF9AF4ECCAE59F3330072CECD">
-          <File Id="filB71F3CB3EBDD40A3974CA4A287756D4F" KeyPath="yes" Source="$(var.ProductSourcePath)\de\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmpAFE9F438F120421D8CB6D25DE926A915">
-          <File Id="fil64BEA667A6504C6CB96BF7039B9F9066" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp314AE8812E0E4183BC9E211D1EB5151F">
-          <File Id="fil9BAF851D0824459F81592413EF3FD591" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmpE4DC02E957BC4B098FC855C9F5A72A9A">
-          <File Id="fil99C3A3EC640E40B8981F0A9C30A81CEB" KeyPath="yes" Source="$(var.ProductSourcePath)\de\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmp79FFF94E23E14C96AB959B15243E5317">
-          <File Id="fil19E5236DBA464080BD5E924DCE383A61" KeyPath="yes" Source="$(var.ProductSourcePath)\de\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp775BF8C154D047B5AE4779F4AD2727BE">
-          <File Id="fil23AC7B50D781445EA590C5DCC94D5CCA" KeyPath="yes" Source="$(var.ProductSourcePath)\de\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp9C5650D758FC401F8C785A0F979A9505">
-          <File Id="fil3E305757451F4E52845ABC2FE7F6AA2E" KeyPath="yes" Source="$(var.ProductSourcePath)\de\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpB40EE0CC916B4928987F62F5909AE709">
-          <File Id="filA21E2DDEAEAE4E0D94346C5671D9D29F" KeyPath="yes" Source="$(var.ProductSourcePath)\de\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir5B65D7353FBDCD17AB60A674B3FDF93B" Name="es">
-        <Component Id="cmpBEB5F3CF75675537751F0D0B32125BF1">
-          <File Id="fil51D32B754EC53F17637FE1C6C050E861" KeyPath="yes" Source="$(var.ProductSourcePath)\es\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmpFB3B0ED1FFF7496CAF70B2F12EBC5CAE">
-          <File Id="filE823DFCBDDC210A2E54DD02B718A238E" KeyPath="yes" Source="$(var.ProductSourcePath)\es\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmp726DCF2BD14F471AAE8C088A527A1B21">
-          <File Id="fil1D6A49CA0C54467C8536FAE4F45A76FA" KeyPath="yes" Source="$(var.ProductSourcePath)\es\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp3C199F9401234C618CA9E342954801FA">
-          <File Id="fil539FE0A6AE224FB5983C9885159B8542" KeyPath="yes" Source="$(var.ProductSourcePath)\es\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpAC7473E411B04BD38D966F888160A772">
-          <File Id="fil4F67D1347ADB4201A36F2098650BFD90" KeyPath="yes" Source="$(var.ProductSourcePath)\es\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmpD3BFE61FA5424231B1912FC72C904FCC">
-          <File Id="filF018233F2DB740A38BA3564166E14DE0" KeyPath="yes" Source="$(var.ProductSourcePath)\es\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmp95E2064A783C4CBCAB4BBA630B589903">
-          <File Id="filD335EF4390AC456C9911635586CAEB5E" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpB2668BA64CA2477791BC6286CD24A50E">
-          <File Id="filFC5DE6A6764848E18CC54DD8463C8E02" KeyPath="yes" Source="$(var.ProductSourcePath)\es\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp3A12CAB5CFF44777893EC81472674E55">
-          <File Id="fil5A886F34F542459AA2602E85805E6142" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp7B06939B5D81479AA324E21D5D9C0879">
-          <File Id="fil3D64D4813BBF4C3DAB761AB37C754CCF" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp3C5A08D4F0E14CA1B02EB9CBE830E147">
-          <File Id="fil82D98FA5578B46959B908B8BB85EC405" KeyPath="yes" Source="$(var.ProductSourcePath)\es\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp8CA196E3B53A432895C18B112D7E2E46">
-          <File Id="fil09D6CD5DAE68476FA94B5D457CA112BC" KeyPath="yes" Source="$(var.ProductSourcePath)\es\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp7090499F84C1462687231F42C81E5EAA">
-          <File Id="fil1FB00DE2BAD4435BB45BEA851C6E1EFD" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpC5C658163889470E968344A03675C655">
-          <File Id="filC60A5FC2842841B6A8917453A32778A4" KeyPath="yes" Source="$(var.ProductSourcePath)\es\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp3ACDC079A6554BAE8B66A77989143900">
-          <File Id="fil08E65AA77119415EB2AD68870DFE502A" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp508F55959B024045ABD82D2137FD6FD2">
-          <File Id="fil7AC0A95F15534BD7A793ED754CCD2F6D" KeyPath="yes" Source="$(var.ProductSourcePath)\es\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpC6C53A5B540B4A3C9624A0D14D5A9790">
-          <File Id="filD7C99F368BE74A6EBA3C9FFCE01BBA22" KeyPath="yes" Source="$(var.ProductSourcePath)\es\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp2868115863264407B40346B27ABE3E4D">
-          <File Id="fil96E3FCAB7E034BC785D15D4B400605BE" KeyPath="yes" Source="$(var.ProductSourcePath)\es\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpB944176DE7924A268269903DC0B5D510">
-          <File Id="filBA47C41DFB3849228624C99949FB61FC" KeyPath="yes" Source="$(var.ProductSourcePath)\es\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir23063512FA8C884E1B4F08FDF0A44516" Name="fr">
-        <Component Id="cmp1DEB513A065956086898BCDACC5887B6">
-          <File Id="filA4820C5E1C54EF0522B56C5228E56E4B" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmpBAF5257E7B0B1D023F465B43792BC250">
-          <File Id="fil428E14D54AFC722EBD7358A6DD1B2945" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmp5C9DD1C2D13D443FBC9C74883439DD56">
-          <File Id="fil0C7621E6E77E48E2B15E953A05B4CD8F" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp5003BCC6CBC84D72AC58292B4C19AAE1">
-          <File Id="filF466E265F96F468E8C9561539C0BF2CC" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpB9CDE3CDF79F4656A9392DBD4466974D">
-          <File Id="filDFE075F1A352411183A20648266A2823" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpDF6EA43F33704C83AE346A0C8CF419EA">
-          <File Id="filD5E54DFC0B4C47EBA185AD7A0D8C760F" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmpCFD6D8A892A540AFB0DF04CE50092506">
-          <File Id="filBC4FEBB18E5F4D0C885F616EF71327FE" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmpAC7A48270F074FF688102DFEBC6A1C30">
-          <File Id="filF436C74590564BB69F3E0F518B55196F" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpEE81EEBADABB4C4780B0AD39910F3D59">
-          <File Id="fil54D23EAE94234339ABC5D631C1627E57" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmpC041B8FD21674290BF801846B7F9EDCA">
-          <File Id="filA9736169BF1C4FAE890C2A56EB6BAB72" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmpA0220895EFDD4945B631AD15B0D710A1">
-          <File Id="fil690C4DD730A74430AFDD008FBB66B288" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp5C4EF2FA6E3D4F54840EDEA401372F84">
-          <File Id="filE8E1DFEA313945A480F870CAC4086507" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp357B1BB2DA1242478313F8BA1011617B">
-          <File Id="fil3997C8EE31D344EF88B7B77AB0D78269" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpBBD6269085BF40E2A83C3462DBD71230">
-          <File Id="filE0F9E20255514F959C28FDBD2CE10182" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp2432BC382728406FA98A6EAC2A038F11">
-          <File Id="filA944C0098D33494E88134607839CBF25" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp96C4EA9D377044E3B5002E37D322B840">
-          <File Id="fil9DFE71D7BB8546CDA5099CB1302C0316" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmpCC41F040CB1B4D0487DD193036A9DD1A">
-          <File Id="fil585A4D2483DA4D1A957F3FE782B5AA94" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp5359C8369744482FBB5D56CDF3FA0DB0">
-          <File Id="fil611BE1F701F342309F78C3450897211A" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp7B5948A1A366409F99B871F0E772B945">
-          <File Id="filCCA6A5EE7ED9459C93A8C05B0A93880F" KeyPath="yes" Source="$(var.ProductSourcePath)\fr\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir42B03840AE19D1498CC524F2B6C0389D" Name="it">
-        <Component Id="cmp3EC91B8BF4282E77113321E5D1ED27B2">
-          <File Id="filE037EA8B9CB8C5B2CC63D285AF0F7EA0" KeyPath="yes" Source="$(var.ProductSourcePath)\it\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp6E798DAF34F45B4588AEA3E3F33A3FAE">
-          <File Id="fil0D6224D3C3B04FD37AF5B74948564B18" KeyPath="yes" Source="$(var.ProductSourcePath)\it\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpAF881D0D194F4D6984F92E8386E67445">
-          <File Id="fil5713066BAE5B47D598EFF68C7F060759" KeyPath="yes" Source="$(var.ProductSourcePath)\it\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp563F908E483C4F27A77016BDAD2EDB3D">
-          <File Id="filFA74F5BCB71843AFA98AFDF95B8B1964" KeyPath="yes" Source="$(var.ProductSourcePath)\it\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmpE21D33B37D174B1C839677DD631FF425">
-          <File Id="filB05CF8D0575F4374B648FC8E0D76319F" KeyPath="yes" Source="$(var.ProductSourcePath)\it\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp4845622039D44CB09C42A4EAD5997AE6">
-          <File Id="filD0C458C44AD84ADBA0F098AA7CA91091" KeyPath="yes" Source="$(var.ProductSourcePath)\it\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp0F27C4A051AD48F69B9697CD53EBC180">
-          <File Id="fil4FACC4E5B6DC47F7B7B361062AFCED40" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp5976983B67E94E95BFA840B7673FA1AC">
-          <File Id="fil7993310AB99141EE89664F4F6B8E18AF" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp65F87164EFD14FE1B37CFB0417F77239">
-          <File Id="fil9CDC6B7B96AD4AD9AEB9FC4B5EEBF3CF" KeyPath="yes" Source="$(var.ProductSourcePath)\it\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp342ED1B2D685498099843E1748D943B8">
-          <File Id="fil7C6089EC42DB4F8FAE723C064808A2FD" KeyPath="yes" Source="$(var.ProductSourcePath)\it\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp3406217305CB474DBEF9DDC38A89BAEA">
-          <File Id="fil33F7B7015F68430A8D4EBAD6A2C5DA53" KeyPath="yes" Source="$(var.ProductSourcePath)\it\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp8CB3C72C95F340B59F8585E420E0EE34">
-          <File Id="filB90EF5F875FA4BFA84F8D88A68F0F27F" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp0C9189E094504D17AADC90A0590C4098">
-          <File Id="filF9596E4348A24CF1AE4AFD3A26B4DCA6" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp681BDE25AB4A4AE2A46F3CC8549EC421">
-          <File Id="fil3A1C205A1C2E4141A7CC6942978EE175" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp36F8A55206284D31A0E4E2EF656BED80">
-          <File Id="filE9E1E565D7114151B3FF382DD13CE35B" KeyPath="yes" Source="$(var.ProductSourcePath)\it\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmp9DD64722ECDD4316A049FE9403EDF13B">
-          <File Id="filBFAAD8ECA2C6439489EBB7D177A9D5AF" KeyPath="yes" Source="$(var.ProductSourcePath)\it\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpEB0B8586AAC24EACA2867506D39669C5">
-          <File Id="filA7C9B844150543CEBAD12476244BB7A7" KeyPath="yes" Source="$(var.ProductSourcePath)\it\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp11087C190382415AB1DC1DFBD78DF348">
-          <File Id="fil8A3F292DDC9145BDAB8BA3930F89D91C" KeyPath="yes" Source="$(var.ProductSourcePath)\it\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-        <Component Id="cmp28349C4ACD6D42D3967853E0A1D7DC4E">
-          <File Id="filDF0828378FCA4CAC8F7DA90DC4F802CC" KeyPath="yes" Source="$(var.ProductSourcePath)\it\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir086D21BE309BE4C7081FC60E3524890F" Name="ja">
-        <Component Id="cmp867E4E51FE7BC09AAD5D59FD76716FBC">
-          <File Id="fil19525C54C67E8D48BCC702E14B52EA49" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmpD7A394A1A96413EC3644F59D3099C0F5">
-          <File Id="filA9FBE1ED9CA363903BE686498346C3E5" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpA0A01F4E746F4F3C90E0AE3895336E24">
-          <File Id="filC8FEC95D1719493BB526BB2027BF0290" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmp943B0951A6954B4D91327122857170FE">
-          <File Id="fil467C5EE0F0AA400A90C9B86AE5FDACC1" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp20B997FC18D14E5B953B53E0750D2EC3">
-          <File Id="fil044F3D27D85E464A8C40B87F13ED6657" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp605390BBEE6745A49D873E6086739DFC">
-          <File Id="filDA0506B7B2F54345AAE73FAE0A985FE7" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp5E942D66FE754A7F85A9C52D90532B09">
-          <File Id="filA89C810E0B724AE8BEA50C938DCA2829" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpAC7D6ED9EB5F4C898B45BEC98795B5E5">
-          <File Id="filC742924352354D7DB5152C8D4048081A" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp8FBEE0AB1C3F4EE1B620BA7D90AD197A">
-          <File Id="fil409B64AC2D13499985947E01621A00BA" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp78644E05B1844431B7B7D0DDCE98EE1B">
-          <File Id="fil05421C31F349414CA1EECA53596071AD" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp09AE0992771647D5A12A95BF64C14842">
-          <File Id="fil79DED54854EF41FCBEB597D8C7E5F7B7" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp2808FB4A38C7470FAD14A0B1FE7D8614">
-          <File Id="filAB4D5AEB904B409C8E48B2CA5AF67029" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp6EB4F2886A6D44ED86EF8BA6EC0C76A0">
-          <File Id="fil29AACBEC10624DE9A97D2C786DEC61D2" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp0989D491D80945AEBE2D0B14EF2C53D7">
-          <File Id="fil3C5D0F12CF794B80BE74EB7FFB832879" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp3B0221BF9E5B40A6A25133725C97C0BE">
-          <File Id="fil6C0896F644744F77B25E11184498EB2F" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp5B81A85A71214050BAA934A0600B72FC">
-          <File Id="fil38E70CD30FAF44FEA153AE1B87FF1EC8" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp58AA8F924CF74562A2D8A789B5EE8B97">
-          <File Id="fil52EC995D889B4FBE915C01DC2A471ACD" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp1F2C85D1488B417F9F8FD96EA4A4D8B4">
-          <File Id="fil5D77B1DBC7AA4E38BBBE39B05DDEFC83" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp26335B5D1FE94E87A6B6EBD56A22C2B9">
-          <File Id="filD585A7E89ACF4E4CB9DB8EAD4ACB7092" KeyPath="yes" Source="$(var.ProductSourcePath)\ja\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir43D6CAD5F3ED1060009918D06D84FB18" Name="ko">
-        <Component Id="cmpAA026CCA623F0E8FB5BAE9F201C5B89D">
-          <File Id="filDA3E9F706B7BCF498078BD9DD0DB9864" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp341C4F1E70E4484001218F1B20F62FCF">
-          <File Id="fil6F4BFC01E8ECA4EFAC9A7F6390929204" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmp52513C1A98FF4241AC3588CCB18C5A1F">
-          <File Id="filFAB6F287025B410E91AA80EFAEA22523" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmpE8A3FFFA6AB24BB3BF2EA9E1BE13F9D9">
-          <File Id="filB377027AECE14EA3A9833D28D0D7639A" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmpAC45507C7BE945598DBAD02373D0D82D">
-          <File Id="fil82E7A370C87C47389626EABC39B4FE65" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp05846E0102F147C8A80B984C00EA709E">
-          <File Id="filF0C0B0888B024FFB80F97DC357CFD455" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmpD837DBF784904FA4B057CE3BDCCACC45">
-          <File Id="fil0F31B78FD0F84690BC2052BABEF61984" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp7B40B1D0FB9B4E7FA37BB4FF04CD3A9F">
-          <File Id="filF922FAEDBFE4456DB6A5F8CB8BE48552" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmpB8FA7AEE0A824184B543ED2231870C79">
-          <File Id="filE89CD795EADF44CCA7BFA3DAA2279237" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp006DBAC58EB04099A3B6DD1A69981814">
-          <File Id="fil6F0413CA12AC48F6BC971CC69BA0CE25" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpDFB169026CE14CE78D686C69F2B2F6AB">
-          <File Id="fil1966A617CD6641DB8334B9563346CF14" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp3986112FD28649AAB697E73E48295FA5">
-          <File Id="filC3D3EE0C477C4251B006CBAA1284D4B9" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp1B309D09A58349A09BC60B35FCD982FF">
-          <File Id="fil6171DA92512D435C84098F269968112A" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp10D63BDD63C74483BB3F7AE952A15F90">
-          <File Id="fil6873EEFCBA664FB681C65CD63DDE56E9" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp23882208476248C7AB4620CE9798AE41">
-          <File Id="fil496B193F0AEF40978A196B2C5443E9FB" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpB1D9C50704A94049BEC21D82B629422A">
-          <File Id="filB036252805CE4C3AAC54DC7F16C6B220" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpA3B2086013B5455D9D98B260493EC0B2">
-          <File Id="fil9C0242A8164442C7AA07334144570B81" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp0DA1B3EF85234C7BBA6DE35BBD1B45D2">
-          <File Id="fil16AE972D64574C00841BBF9D7156A73B" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpF4093A1E8AB94B43AB0F852EB647CE7F">
-          <File Id="filCE28F42A54C24F5DA508904E60E23BBD" KeyPath="yes" Source="$(var.ProductSourcePath)\ko\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dirE8201C74A7184D11233BAD63C6DB37BD" Name="pl">
-        <Component Id="cmpA656A18FE14D3C8EB02C31AE474054E3">
-          <File Id="filEC35707E0244457E3057C898F49AE300" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp070651CCF2761B3EF1985884AEB8AC64">
-          <File Id="fil1F11C15015FC10565D94EA9CE331FBEC" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpFA35A2719CE343E1B41665922CC26AF4">
-          <File Id="fil0B81CBCB81DC4ABFA8C12CC31749D516" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp92FE1425A5C3437488DFF937ED362536">
-          <File Id="fil41AB5A11FC08470B82F980A5B2558F0C" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp9C02816788B44B1CB100811D19BA3ADE">
-          <File Id="fil33DD875593B946CEAB8E09843A23F545" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmpD18D7B06C3604A4D90ABBA00DA2742D1">
-          <File Id="filEBC7E02A53A54713ACD151975FE6C838" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp1469F199504F43C5914855EE7222694E">
-          <File Id="filD9D48868DDF7449AA705472951264359" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmpFF0C05BA6D6341B19AC50624149E4968">
-          <File Id="filBC59250A23674D2398B20C44D10A2C65" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpA86EE53E9AA84A57B04BFD111DED040F">
-          <File Id="filB079399C1BF54BFD8470C15B9FC2AA43" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmpA79EE6F8324F4882B557E5E422DB3B08">
-          <File Id="fil5305745EC4D54958B61F8E0B1FE6C750" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp0609FD4FBFAA42BB98ACEC3DAD272250">
-          <File Id="fil0B607D4C4E0F409E8E8A2F9E116FE127" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpD8729C86F9C147E49F6E5CE1257D90F8">
-          <File Id="filF961BBA251E146859A0526B313F5022D" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp2292153B8973431495971341E8F576A3">
-          <File Id="fil43D55960BEA64CC48C7FB96CDE16924B" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmpE57BDA25049143CEB30225B89C33DF7E">
-          <File Id="fil0E8018FE1C3E4DB981B1A1093E8228A1" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpBA83057401A44CF2A357203F266DAD18">
-          <File Id="fil3DE1B50640DB45DC98E0A0E0BEE2372E" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmpC2EF4DEECCAB41CDBEF1F7898B11D2C1">
-          <File Id="fil18789833D491457D80A09068794524B9" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp74681822D78E49DB9E42A990DFDFB3A9">
-          <File Id="fil2CCD2A9DF61947289A4F0C567DDE7C66" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpC3357D2F892347769141A20222683855">
-          <File Id="filA32D91A3FA5C47708122CAE55B69BC79" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp705598FEC8EA43D7A9B239787BA5DB09">
-          <File Id="filD8ECB20D015F4477ABD58505B48D02D1" KeyPath="yes" Source="$(var.ProductSourcePath)\pl\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir47ED939BFA870848E0764E862CD6B4D7" Name="pt-BR">
-        <Component Id="cmp3D20E940BDBF41630242C63011A80CE5">
-          <File Id="filB2E147AAA953C1BC337C762F24CE7CC2" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp7C2E3035EE02569D9F11970586140F28">
-          <File Id="filEC4AFB0ACAD3BAFA5ECE2CBE5F2C1C58" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmp1E40E7911F29449487A42C55FFF9679B">
-          <File Id="fil33ACE7EE2A0D45E59367431E1053D62F" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp25C8E163A5CF4460A30E08E77377C186">
-          <File Id="fil7B99860821534BA8A7B91A62B650EDBF" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp0892A230934B409C978C37CC1F723F72">
-          <File Id="fil53E9CBED5699468C857FACDF597D6FDC" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp03BBEB6A73524059AE3127C2459B0E8C">
-          <File Id="filD49DE475AB724B46A4B11FDE56B88C65" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp64227EAAFB4341F28C1C336EF2115CF0">
-          <File Id="fil7E20EE1E7BC04A679A939820A2E48A77" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpAFC98D1BEA00465EAB4FE98048BCB524">
-          <File Id="filDAD0FCD417A2427486B929EF338159FD" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpFB67E13817E74DE589F3FB2C725A027C">
-          <File Id="filA9BDFCA8A90C45E5BD4F0647E4996F26" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpD90C20974091429AB92010686A5797C6">
-          <File Id="filBD9EE830BE6245D28202E7F65F6BFA74" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmp2A02E0C767614AFBB44ACD74ADE6602C">
-          <File Id="filE4CE680BAAAD475A93390E7B32E3BAA3" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpFA2B7ADD05AB424DA22270C1FB2A018A">
-          <File Id="filC48486CB9B09491CAAAE40AD26BA41BA" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpDE45B1443480407E82C1D3B1B73144FE">
-          <File Id="filF49C83EB31A84155B067106E12C4AC80" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmpE4F5B1CD375345E8A41B1DC59FA03733">
-          <File Id="fil98F365B526D748F4B08D66B608AD33ED" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp57A297132232472BA9AF7B8A5B16CF8F">
-          <File Id="filFA58D6AB968C4C4B8AF2D23B14A6F5DF" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp765A784AADA742928B4E6376ABB7EF28">
-          <File Id="fil40F2C0C2659E4D7AA2940FE1FDBB84F2" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp6A48FC0DE86C41C297EC418A0E49CA2C">
-          <File Id="fil6A34E5CD258B46FB9C72FCCCAC04FAD8" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp213F9BA38ED149468C656788A7ED847D">
-          <File Id="filA2E878605EC84DE480F48C8EB37DF399" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpFAA0CCBA17FE4E8FAE5FE4B5F679DF52">
-          <File Id="fil6A42B845F64A4B2490AFFA079E0FB086" KeyPath="yes" Source="$(var.ProductSourcePath)\pt-BR\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir37B8DFAE26D5F8E9948851F7D19F9E20" Name="ru">
-        <Component Id="cmpFDCD51BD80926ABECCE27D0D66A47C8F">
-          <File Id="fil17D60D330E84C683ACC6FDD873870F59" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp85FE3DB247B4FB3E04D8E4CED6D66853">
-          <File Id="fil3ACB034F8F8170A71A19D07949C58BC1" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmp50F3BA81002D443DBD8AA4A4A494A37D">
-          <File Id="filAC5D7FB8A37146D7A1981C51320E59C7" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpF615667140B44D6BB380D215D17FF982">
-          <File Id="fil924EACCA69F34047A88904BCE66E0998" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpACAC7E20898E4F51999C09E9980FAB46">
-          <File Id="fil582E575BAF4D4B63AFA503216FFDEAAD" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp53B914C6F5CE4FFE8CFCFB9F2408BA9E">
-          <File Id="filAA49858E7660451997035FCCEF910F1F" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp222A8A32083347E68BA8B2258B6E3C82">
-          <File Id="fil1C2BB8669F50418D8D17952531B8FC81" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp6E116504475844D7810236B408748E80">
-          <File Id="fil75454E3399184063A8EA502A9B559EEE" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp48D158C7B6A54EE7A5983261703DFE01">
-          <File Id="filBEBD91E993A446609A929096668854C7" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmpEDAFC1B93B524FFB8B55290B8FBBE372">
-          <File Id="filEDC7CBAF9FDC467B87F2BE273DED448C" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmpA9B28198505F41D1967A688AB23EC28A">
-          <File Id="fil7E5726918B614D4F8CD7D4BB06FB73AA" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp045539C3A5384CE28015F348A4F09D39">
-          <File Id="fil62C230D5D4F44570BCDF1344B045D1D4" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp65F4B635858F4F88B69E04F030391A0A">
-          <File Id="filCF582C587D5C41E49F4F436F36FAA795" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmp69440F288C96457FBD519A2DB86C8376">
-          <File Id="filB29FF30EF8E948D5B5F06CF8B20CA2F3" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpB805F2C3F3834D14BB5F30A53C118AA8">
-          <File Id="filA6744BB703024021A5C99D1B9360DF5A" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmpEF934403BB624B1681CEE8EC4F647ED0">
-          <File Id="filAA4557C6575640E2BC6F089C751CD3CE" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp38EEEBD629164D8FA34DBE11D92B5712">
-          <File Id="filB86A9EBC57E24EAB81491383FECACC9D" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp4CCDE73A2A9E4D7B90065639D9433178">
-          <File Id="fil8BB0777493324586A165234D6263F483" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpA6FA5B27C61E482D8BBC5F1806D3B223">
-          <File Id="filD4732A3ABFD342B890F75CCB5DE1CAE8" KeyPath="yes" Source="$(var.ProductSourcePath)\ru\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dirA7E9CC01273A7FED89FC8D3A368E00CC" Name="tr">
-        <Component Id="cmp286FCD0B19BF06446A7274672A2491CA">
-          <File Id="filD7DA32C466BD1DFBEF461910E7C1094A" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp137236E8DF48EE210ABFCB127CC1E46C">
-          <File Id="filA09D06D77F9E063E8032EABA2EB33925" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpBA1EE6DA3429452BA3A1F3428C9CC942">
-          <File Id="filE06612BA82FD47ADA6D00D5F1FACFB4D" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmpC9064EF7E4D0429FB3B3B22852DE09E9">
-          <File Id="fil121C4CE23ECE48B59C5072EAF8A3F6F3" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpEDD4BBB46F0F405F9D03F23AD540F006">
-          <File Id="fil1FE1C3361BF046EF8A785E591E5EF2A1" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp5CB558FECF2F40699DC54E212C849E5E">
-          <File Id="fil2A1CF27FA4D340E58C51575447A7F722" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp2F888F24537C4A59B8DE0D9600ED5F86">
-          <File Id="fil18B820710838483B809CFD53F651AAF1" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp3F0494AB0EA8424C8C45C8421364B695">
-          <File Id="fil195144FDB0F44371B4CBAAFC58FB6B7D" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp982D240D3FB34B909262D8C6D345C0B4">
-          <File Id="filAF46668AC7E04184B354411D8F7B6DC2" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp92D157C1F70440D8B756ECA2D5DAA438">
-          <File Id="fil80A7025DE5184DDD9911F4771752C0A1" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp98C7914B7566416399FC4044406DC8FD">
-          <File Id="fil7872D0EAF26A4E1DB08304B6802F9426" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmpB6F9506FF8354967BAA44CA355DC3744">
-          <File Id="fil5EEC1A86F3C84DB6894678314757ED39" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpAD21451B9D2D4041A4A45B5A4042ED72">
-          <File Id="filED8E692954384CACB54A497ED3155707" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp6EB2D4D29151472CA5986604550925E8">
-          <File Id="fil8FCBC313E9C24D128F5CE4E81484D58F" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpD7B579B9623C48F9B3F856BFA2CC9DDA">
-          <File Id="fil97A017EF2E9F472B96DBA2961F25DCD2" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmp1B4A1C6FA53649D4B212D2BA8799DEF6">
-          <File Id="filB95D60D8F683465E8DD6CA641DA7E209" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmp363CFDFE64D94C5693BAB14FCD5FE78C">
-          <File Id="filAC8859D674A6466E95EFBD086FE04670" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpA34D56794B9144A2BE67E7CDABCF5B4E">
-          <File Id="filD97E04BF3E874B7092250BC1C1C4C574" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-        <Component Id="cmp10773057C33543FA93222022DEC0847D">
-          <File Id="filD2D3E621E5C54C5EBF044078C9073C2B" KeyPath="yes" Source="$(var.ProductSourcePath)\tr\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dir47E993970F74AA9F393D23500827D12C" Name="zh-Hans">
-        <Component Id="cmp34C4A21743AC68583599BF2B139F39F2">
-          <File Id="fil2C2935F62D28B01377F140E574AB1BD0" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp2AB68868B57E7E15FCD69157375E39D1">
-          <File Id="fil4B1471C0FFA523DE31FEDB764D49795B" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpBCFD31F785CB4246B79A3208D566B2F2">
-          <File Id="fil995643DD8403497898F00FF51ABCD82E" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmpBA0B694FCB414A309DED50D5F7EDD3CB">
-          <File Id="fil840EEBCB20A043499D46376150316158" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmp3E8122E901C340EC8105AAA703A53028">
-          <File Id="filAFD338DBD665426CB0A6395AFF24C579" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpA3101B8D27104CE69ECC6B171DAD8029">
-          <File Id="filAB21063EB5DF4014B162BAB5255B457C" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmpB0ECA461CD6F469DA406C017FDF59388">
-          <File Id="fil796831B9BF57443A9B5A823C2EAEE907" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpAAAC7B2B254F458298E4204BDE6B2299">
-          <File Id="filEB2C409764CB4050A8A212AF5F9712C6" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp5707C260CC90438390E14836697DFC16">
-          <File Id="fil1E33B8517B0F4E329B2822E47E91289B" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmp413F9654B54945B1A1EAF7A47CFFF045">
-          <File Id="fil3781F5CF647941559A68F54A655EA628" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmpE6DE2ABACF3E47ADB4734AF8F4831528">
-          <File Id="fil3016C8E889A74E3989592D0CA80187C7" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpF9F3FA55774C412A83157FA1E64D44E2">
-          <File Id="filCDF1398F05C749D988C8DDB1D59B390F" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp3418E005ECC646A8AD5C0467397185E8">
-          <File Id="filB83835A7C9A74D68A7DE4A70973ACAE6" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmp19DB395024234D64B015F638FCDA8C5A">
-          <File Id="filC4066D0930BB44DA90D9746B3A754C70" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp54EE3E452F8341E69DE045A2DB941DEE">
-          <File Id="fil34A074B1CB3F43BE8D59684A10629730" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmp99F588E14200498095845D1AB84D70D8">
-          <File Id="filE6D9DE82E9F14311883923365253CDA3" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmp119D48233B3B479FBD8222BA060D65EB">
-          <File Id="fil27FFF1152C894EC28873C4D4209E9736" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpEC0DB2C3A9C14F4E9FC6883357345CB5">
-          <File Id="filF0E3BC887EA741E9B90122B8701D6769" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-        <Component Id="cmp33364765C98D4BE09BD26DC1E6B95B86">
-          <File Id="filB57C4C58936D4A7587CEA358B1AF57C2" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hans\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Id="dirB1FFB91EED6FD71EA866548CEA3A5298" Name="zh-Hant">
-        <Component Id="cmpBC28FE8B65954B00AECA9C534639596D">
-          <File Id="filC145F3B67ECB39B9A2B9B5142F9F3637" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll" />
-        </Component>
-        <Component Id="cmp16789176DD8EDBC99C26E1230DB2BDDF">
-          <File Id="fil3779A5AC06BDD2A3AB680DBA83FEAFD1" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\Microsoft.CodeAnalysis.resources.dll" />
-        </Component>
-        <Component Id="cmpBC7156375AC544C890A2F93727161B79">
-          <File Id="fil97D2016B80C449F5AD0428BD93BA9590" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Windows.Forms.Design.resources.dll" />
-        </Component>
-        <Component Id="cmp88E7CBE227AA402FACE236425367D365">
-          <File Id="filCCAE3425B3B348F5BDACAA11D8FC4FC8" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\PresentationCore.resources.dll" />
-        </Component>
-        <Component Id="cmpB08DEC89033A41A1B3BA276C39DB53C7">
-          <File Id="filF9AEFC14A81A4FD8824D35CA4E85529C" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\WindowsFormsIntegration.resources.dll" />
-        </Component>
-        <Component Id="cmp44E870C6783F49808E78EEAB3CCCAEB9">
-          <File Id="fil7DDA4E521FC8476C9008E74B97695436" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\WindowsBase.resources.dll" />
-        </Component>
-        <Component Id="cmp49BBAD244F0046C7ACB8CE4356300EE1">
-          <File Id="filF3350AD504834695995E911442E6500F" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Windows.Input.Manipulations.resources.dll" />
-        </Component>
-        <Component Id="cmp1E21C2E7CAF54358AE80B36CE715AAD3">
-          <File Id="filD5D5E4691E234267B3DAF61C223D1A1C" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Windows.Controls.Ribbon.resources.dll" />
-        </Component>
-        <Component Id="cmpAC2613BBBA934B3C9D8C6DB1B27AA153">
-          <File Id="fil0982E42C020D4C548E9F205FF883BD74" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\UIAutomationClient.resources.dll" />
-        </Component>
-        <Component Id="cmpB0757B4B80DB48F2BD94AB74A9CE3487">
-          <File Id="fil7AD133AC602C432382EC06A15E1C8AE3" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\ReachFramework.resources.dll" />
-        </Component>
-        <Component Id="cmp905E602506DA4B39ADA617E8AE43E12B">
-          <File Id="filF6B6953F3B48420A91784CBC9506231D" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\UIAutomationTypes.resources.dll" />
-        </Component>
-        <Component Id="cmpCF69FB22CA5B47A7BBC959539C7EC653">
-          <File Id="fil7BC9E04304284780B2E57F664596D3C7" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\UIAutomationProvider.resources.dll" />
-        </Component>
-        <Component Id="cmpC556E2BCBE01491FAE1A9A0D5D8C49DF">
-          <File Id="fil3CFA16717FFE458EAC315AA58FD98543" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\PresentationFramework.resources.dll" />
-        </Component>
-        <Component Id="cmpE7A74EB67E6547BA97B4595A81B07469">
-          <File Id="filD9B3C477DCDE4CB59D9092283A4E854A" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\UIAutomationClientSideProviders.resources.dll" />
-        </Component>
-        <Component Id="cmpC09D113904964EE3BD16432420700754">
-          <File Id="filD739DEEC73A24C9DAE56F523AEC1A1A7" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\PresentationUI.resources.dll" />
-        </Component>
-        <Component Id="cmp244BB402C6594640A3E77A079235EFDB">
-          <File Id="filD2C72D4A630C47F0870A50352C3FB222" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Xaml.resources.dll" />
-        </Component>
-        <Component Id="cmp7E10BA8A64E1482BAD717A0A3DC0746E">
-          <File Id="filFCB0DDA7C4D44FB8B90A6C9A289CAEAB" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Windows.Forms.resources.dll" />
-        </Component>
-        <Component Id="cmpD8CDC1F864664A33B6221A40F2BE8406">
-          <File Id="fil7F22DE0DD33D49449CA061A6F1456C91" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\System.Windows.Forms.Primitives.resources.dll" />
-        </Component>
-        <Component Id="cmpB9B22A80E70F414B8778B852E29D6492">
-          <File Id="fil46C0F341CAB64BD390BEA73E1FE0F552" KeyPath="yes" Source="$(var.ProductSourcePath)\zh-Hant\Microsoft.VisualBasic.Forms.resources.dll" />
-        </Component>
-      </Directory>
-      <Directory Name="Schemas" Id="dir1DB5B24CC3494785974A51F28F128069">
-        <Directory Name="PSMaml" Id="dirAC38B2C7629B42DC836E01F976A10EC9">
-          <Component Id="cmp8A3254D57ABF4F828B08648187233EE4">
-            <File Id="filC274E1B405F141C6B1E98D2A38CDA614" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structureTable.xsd" />
-          </Component>
-          <Component Id="cmpC29B22A77B6341C88E4D6CD2876F3BCF">
-            <File Id="fil4D15DE0E39D94890BEB95FD3550014DC" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedConstructor.xsd" />
-          </Component>
-          <Component Id="cmpCBC6AAA9CB644B3C8FFE80E2339C8C62">
-            <File Id="fil8205757B0EE7409E9F2C0879E905AA12" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\troubleshooting.xsd" />
-          </Component>
-          <Component Id="cmp5BFA44F5B74B46108EBB2F57D9A07C5A">
-            <File Id="fil3C12E0C648694CE7A68148C305E72CC2" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml.rld" />
-          </Component>
-          <Component Id="cmp938E195A5A3343D0B7092FC1A81A88CF">
-            <File Id="fil805A9624406A407FBBD7B6D821BFEDE0" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedEnumeration.xsd" />
-          </Component>
-          <Component Id="cmp919C208B21E5491AB8084E7EB6EFF1BF">
-            <File Id="fil9989D74C2D5745D3AE7D41BEF0D59489" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structureGlossary.xsd" />
-          </Component>
-          <Component Id="cmp61A4B0CCC6F94329ADEAA1D04510D5FB">
-            <File Id="filD4DD8651A5694AD692416B468865F2A7" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\task.xsd" />
-          </Component>
-          <Component Id="cmp74112210347249D1ADA863B0C1A12EC0">
-            <File Id="fil860A33A409F64823ABC723171525376B" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerXaml.xsd" />
-          </Component>
-          <Component Id="cmp7C1B3589F57247588C2F554AE79034DF">
-            <File Id="fil7E06AD46B4BD4E6E8D5EA5D7912BBCDA" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\inlineUi.xsd" />
-          </Component>
-          <Component Id="cmp8779DE02612345D2B990111B5F741951">
-            <File Id="fil5B539D2DE8E64D859F9E1D4973BFF0EE" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\command.xsd" />
-          </Component>
-          <Component Id="cmp596F984C35BF43248CFC5AE259623CD6">
-            <File Id="fil2404A1E28D9B4C0A8794532CC56712C2" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structureProcedure.xsd" />
-          </Component>
-          <Component Id="cmpD7D9163B701E43CDAA5B680BFEC734C0">
-            <File Id="fil6E7765E030E240BE93B458F8440F7DA5" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedEvent.xsd" />
-          </Component>
-          <Component Id="cmp3F3D5158AF2540C68C6C7B419E336405">
-            <File Id="fil56780AAEF3144E5CB8BF5A5BEBA01394" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\ITPro.xsd" />
-          </Component>
-          <Component Id="cmp2AA555A528ED455E9BE4CD671131EAC8">
-            <File Id="filE637E051D8064836B59CA5CF140D73F6" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedInterface.xsd" />
-          </Component>
-          <Component Id="cmp738AF9ECCDB14F12A8136DEDD1F619F8">
-            <File Id="filE42EF85A50ED4AEE9C124AD7A7A5C344" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml.tbr" />
-          </Component>
-          <Component Id="cmp9DD54CCB1A1940C9A686F56231B0D7A0">
-            <File Id="fil2E3C95BFFE6242C2B90F6D6C7EACBB49" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structureList.xsd" />
-          </Component>
-          <Component Id="cmp5B64C3BEB8614B7D8ABF9F98776BA799">
-            <File Id="filC1E9B3107EE8429CA77E51F155D0F3BA" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\ManagedDeveloper.xsd" />
-          </Component>
-          <Component Id="cmp8943E1C081C443608960F88006055670">
-            <File Id="fil9FD69766B5E74F16AACD660DBCD43233" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedNamespace.xsd" />
-          </Component>
-          <Component Id="cmp1CB45D745B7947098A2E8CFF89692106">
-            <File Id="fil13D93E8612384E9AA2005A15E10DEB67" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml.xsx" />
-          </Component>
-          <Component Id="cmp341278D0E5674EB7A0AA8D692B09C2DA">
-            <File Id="filD4B3CCF00D1A4B25BE32CF91962DE059" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedClass.xsd" />
-          </Component>
-          <Component Id="cmp80D2B2F1503D480482AB6356D8239F1A">
-            <File Id="fil12C301468DB142BC8067894C80959B30" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedProperty.xsd" />
-          </Component>
-          <Component Id="cmp702A1A95334640599D929176921C3AA5">
-            <File Id="fil2A4F2E1346C941A5BC38BD9426E3F852" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developer.xsd" />
-          </Component>
-          <Component Id="cmpE69FC94442424AEAB7BF8D668BE67881">
-            <File Id="fil3F35876A557F4BEEBAB108F61C91F764" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedStructure.xsd" />
-          </Component>
-          <Component Id="cmpDBEB4CA15AED41EAAB3B9999FFB49688">
-            <File Id="fil9D97966701C24163A7D90C8394476CAD" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml_HTML_Style.xsl" />
-          </Component>
-          <Component Id="cmpA9398651278B48A98281D4B1B99C0E02">
-            <File Id="fil0B05ED043FB24495BE051DD21F56FB52" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerReference.xsd" />
-          </Component>
-          <Component Id="cmp71BD297E5534459C9FF0BD2BD5044E8A">
-            <File Id="fil991CE890846F408FA113549291C9DCF4" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structureTaskExecution.xsd" />
-          </Component>
-          <Component Id="cmp2748DD46812C4D7AA23B87131BCA7D28">
-            <File Id="fil91A7915D85C24E2BB70395DD80E42ED6" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedMethod.xsd" />
-          </Component>
-          <Component Id="cmpBEF1E51AC0E14994B91C0398A0BF9904">
-            <File Id="fil3C90204E8C9147F98C49D34850FEE58D" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\block.xsd" />
-          </Component>
-          <Component Id="cmpF30399B31BE94323965E5F370AE61D27">
-            <File Id="filE03A51D8D46F4D8A9AEC5815497A0BC2" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerCommand.xsd" />
-          </Component>
-          <Component Id="cmpEA734D5F73C1432E90C366FDB61BE1DA">
-            <File Id="filE4B08FCC14714829A72F0F55E680C908" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\conditionSet.xsd" />
-          </Component>
-          <Component Id="cmp8623E722E9D44FC996DCC6AD0AFDA57B">
-            <File Id="filB2B6D6E8E84E4B3A926259A91E55588C" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManaged.xsd" />
-          </Component>
-          <Component Id="cmpD1B75039FF9C4808A85D5BFDD347E301">
-            <File Id="fil368BD4AF04104CFE8CA19F76AAE3AAA9" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\endUser.xsd" />
-          </Component>
-          <Component Id="cmpB2D8BB205E49421986D61C5F50AFF4CD">
-            <File Id="filFA9501B2158944C6A5BCAD2C9521C1E3" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\structure.xsd" />
-          </Component>
-          <Component Id="cmp3E7AA76F03A7499C96340C43F8A7F52B">
-            <File Id="fil4A26DD9AD44443698C4B87960324EDD8" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\inlineCommon.xsd" />
-          </Component>
-          <Component Id="cmp72416C747AFD4A86B9FB7D14C5C4C914">
-            <File Id="filE7BA7800561B4B928AD62A395BD2FFCB" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerStructure.xsd" />
-          </Component>
-          <Component Id="cmp2B3F4044A01F4D9AB1DBBAD2FD04317A">
-            <File Id="fil157FF59A021947BC879674A664C521F1" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\base.xsd" />
-          </Component>
-          <Component Id="cmp16CCB478028E417BB140252B720E8AEA">
-            <File Id="filB2125658255843DC84D36632BFF950CB" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\blockSoftware.xsd" />
-          </Component>
-          <Component Id="cmp91FE8D0C1EC44675AC81705C6A5B66A6">
-            <File Id="fil7827126276014CC4951F85425AF95D32" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\inline.xsd" />
-          </Component>
-          <Component Id="cmpC1DC107C17E8409BBFC2CF1849675BEF">
-            <File Id="fil1BBF438827BA4085917473803F8E9F1D" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\ManagedDeveloperStructure.xsd" />
-          </Component>
-          <Component Id="cmpF6921505E7C9477683A779DA28A0D73F">
-            <File Id="filE78A05F333B34FF08F307F915DD3E0FF" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedField.xsd" />
-          </Component>
-          <Component Id="cmpF7D3AB1CDBDA478E9DD4EE01D13F0D64">
-            <File Id="fil037817225EF0430AAA19406EE1BDF4FD" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\hierarchy.xsd" />
-          </Component>
-          <Component Id="cmp6637048AC3FB4E08B5EC5524D1049C0E">
-            <File Id="filA57B719741C540239EFC2E4C5D157C43" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml.xsd" />
-          </Component>
-          <Component Id="cmp6942D13F8BCA457199ADF6D24C622535">
-            <File Id="filACDC2A0DD658402F9B2627D4ADBECD1E" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedOperator.xsd" />
-          </Component>
-          <Component Id="cmpA755C122F0E54D55BBC227136068C3EF">
-            <File Id="filBA2B08F4DE894AF981E1D7AE7088DE28" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\blockCommon.xsd" />
-          </Component>
-          <Component Id="cmpDF9A1285EC8A4A64BF8D7813045B2F82">
-            <File Id="filCB10AEE906E94392B8F4BA8BC8A92C76" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\baseConditional.xsd" />
-          </Component>
-          <Component Id="cmp5375DD3BDBDE473D93DC0220CFD32C56">
-            <File Id="filE71D69AD08A34DE5B568BA0812C79426" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerCommand.rld" />
-          </Component>
-          <Component Id="cmp971F90C668FF411D81C0AC713071B122">
-            <File Id="fil927FBB0545374DFDBAB3A34F74126060" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedOverload.xsd" />
-          </Component>
-          <Component Id="cmp1BDAEA2C73954218ADCCF9940268D075">
-            <File Id="filECA32721B75342A281FAEFD9AE4FA38A" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerDscResource.xsd" />
-          </Component>
-          <Component Id="cmpCF148C092F4048CD811CE8815D3E8E5A">
-            <File Id="filE183C7868A3846A2AE66479AD8C5E7A2" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\ProviderHelp.xsd" />
-          </Component>
-          <Component Id="cmp02F7C2D6E9BF46F386EF83D4CF166EC6">
-            <File Id="filB182BA7BB4CA46A58BB934DD7DF6164D" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\inlineSoftware.xsd" />
-          </Component>
-          <Component Id="cmpED253ABCC1354C58A65CD4D41F7ABB3A">
-            <File Id="fil782EBC76048B42D5AFD0CED85A34B83E" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\developerManagedDelegate.xsd" />
-          </Component>
-          <Component Id="cmp074868368CB24A33962BC4DB7B809C4F">
-            <File Id="filFB62ECFB331547629CF9BBE87C30F498" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\Maml_HTML.xsl" />
-          </Component>
-          <Component Id="cmpFF8643F8CC97462CAC20815F6071203B">
-            <File Id="fil07B5A3B273A4434D86FB441E3F008BE6" KeyPath="yes" Source="$(var.ProductSourcePath)\Schemas\PSMaml\shellExecute.xsd" />
-          </Component>
-        </Directory>
-      </Directory>
-      <Component Id="cmp0FC1F6198C66492495785315CDEE0B66">
-        <File Id="filA01E19FE75D94F77916D48F48E9FC310" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Text.Json.dll" />
-      </Component>
-      <Component Id="cmp41E9A7E0470540228A69F13F8585089E">
-        <File Id="fil4F7CB5570E86407C94595812662A4F42" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.VisualBasic.Core.dll" />
-      </Component>
-      <Component Id="cmp8E8AE88416D44A4CA39F23E9C825A899">
-        <File Id="fil4954FEF58A894EA7B701DFCA7D11AF08" KeyPath="yes" Source="$(var.ProductSourcePath)\Namotion.Reflection.dll" />
-      </Component>
-      <Component Id="cmpE5F62B056F174A3E8843DFE8B70E3AA9">
-        <File Id="fil6B276B69CAC64F19A2A3E2A72086EF15" KeyPath="yes" Source="$(var.ProductSourcePath)\Markdig.Signed.dll" />
-      </Component>
-      <Component Id="cmp30126C60BD784974B74EA45AE9B04032">
-        <File Id="fil7352ABFC8A154701BFE3B47CFA66B8F4" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Threading.Channels.dll" />
-      </Component>
-      <Component Id="cmp9EC1507780D247E095EA92A7715B4BAC">
-        <File Id="filFA98F788E7724D41A2A88F2C0298E691" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Printing.dll" />
-      </Component>
-      <Component Id="cmpF2634E50875D4698921081E3C6B1D5DC">
-        <File Id="fil5A54754B01054DB590032470CE5F1EBD" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationCore.dll" />
-      </Component>
-      <Component Id="cmpBFAC308E2D8645278D61C126C0FC2C61">
-        <File Id="fil2954DD50127543F991A9F0A539E80FA4" KeyPath="yes" Source="$(var.ProductSourcePath)\PenImc_cor3.dll" />
-      </Component>
-      <Component Id="cmp8F0E2CF1B76B4D5185CB6A8DB9236F93">
-        <File Id="fil91831C8BEFBB49AE8A4FDE50300CA3E8" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework-SystemXml.dll" />
-      </Component>
-      <Component Id="cmp14EA1CB2EC4E4B1DB7F7968B5B3D8E16">
-        <File Id="fil8D13874C748C4ACB99643E4231292B9A" KeyPath="yes" Source="$(var.ProductSourcePath)\UIAutomationClient.dll" />
-      </Component>
-      <Component Id="cmpF543DDEF59CB4ACB85CBC9A106BD853D">
-        <File Id="fil04C719C78D784FA39EED16CCDDD0866D" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Presentation.dll" />
-      </Component>
-      <Component Id="cmp3002312C17174D51B6DAFF6EFE5854E3">
-        <File Id="fil47AD8271AF0A41DB8080E5FDE0722194" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.AeroLite.dll" />
-      </Component>
-      <Component Id="cmp011004AE1CF04BEBBAD8B831F844C045">
-        <File Id="filE938890D95C3422687388791780FC0FB" KeyPath="yes" Source="$(var.ProductSourcePath)\wpfgfx_cor3.dll" />
-      </Component>
-      <Component Id="cmpA1BA99196E3645448F2061091FD85C4A">
-        <File Id="fil00E8D1182FCD4D8ABF9C8E36D328A0C8" KeyPath="yes" Source="$(var.ProductSourcePath)\ReachFramework.dll" />
-      </Component>
-      <Component Id="cmpF98969464485476CB2FC4A4A20F1AC9E">
-        <File Id="filBA6005125A874D98B24AFD595FEFB801" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Input.Manipulations.dll" />
-      </Component>
-      <Component Id="cmp5B5FA4F5288D4C7B97F0D41B0EBAF12A">
-        <File Id="filF435B099CD6C485D8510AC59A9A46CC0" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework-SystemXmlLinq.dll" />
-      </Component>
-      <Component Id="cmp2F1EA86BD90A469DB868B466999D71C0">
-        <File Id="fil302B451482DA4BCDAE47715B8C52F1D4" KeyPath="yes" Source="$(var.ProductSourcePath)\UIAutomationProvider.dll" />
-      </Component>
-      <Component Id="cmpA0542E4F67194E91BAB2FE91697CAEA3">
-        <File Id="fil30CDC682940D4F378EE8C0D2B79547C8" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.dll" />
-      </Component>
-      <Component Id="cmp4880742338E943CDBCA481376873C8DC">
-        <File Id="filB2DCD00AE7374F1BA9FC29CA4CD05FEA" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationUI.dll" />
-      </Component>
-      <Component Id="cmpC388B16EC4464F8F8C819D1A9D99824D">
-        <File Id="filCB073D6A0F0E4D55BB5F96787544B0C9" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Design.dll" />
-      </Component>
-      <Component Id="cmpA1FA9A81833844D18D133D4FEE5D6B5A">
-        <File Id="fil6DF9189EDD0A4201A112FD259BB77000" KeyPath="yes" Source="$(var.ProductSourcePath)\D3DCompiler_47_cor3.dll" />
-      </Component>
-      <Component Id="cmp95D1BC4C00E64F78A2C5B40075E493B0">
-        <File Id="fil6E648BBF4FD94F3381E7A8D45F4B6EAD" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Extensions.dll" />
-      </Component>
-      <Component Id="cmp2D61DA909BC442A8BACD501B38408E52">
-        <File Id="fil74C0DE38531A4D518393143977720D90" KeyPath="yes" Source="$(var.ProductSourcePath)\DirectWriteForwarder.dll" />
-      </Component>
-      <Component Id="cmp6AEAD5F33F7F4AA9BF1AB6BB9708636B">
-        <File Id="fil0F31ECA347FF4424B83616242A1F5B01" KeyPath="yes" Source="$(var.ProductSourcePath)\vcruntime140_cor3.dll" />
-      </Component>
-      <Component Id="cmpA15A8CCD78F940AF99F2C5CA1CFAD3FE">
-        <File Id="fil14E030448EA74800A0D7B3CB2A11F053" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework-SystemData.dll" />
-      </Component>
-      <Component Id="cmpDF56DFBA73884C26B4C07A15936B2076">
-        <File Id="filF1FB18E54CEC4001A19835BE6C5E0B5B" KeyPath="yes" Source="$(var.ProductSourcePath)\Accessibility.dll" />
-      </Component>
-      <Component Id="cmp12382F83133C400283C98B48381BCF7A">
-        <File Id="filF21F70CF7F81496091523DC8A3333A99" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Controls.Ribbon.dll" />
-      </Component>
-      <Component Id="cmp316AABD96F1A4600B99538AA71521C76">
-        <File Id="filFBDF9BBA37A24397BF3007D912CDC9FF" KeyPath="yes" Source="$(var.ProductSourcePath)\UIAutomationTypes.dll" />
-      </Component>
-      <Component Id="cmpC1523F3EAD484C3DB1DD835494115EFB">
-        <File Id="fil05090597873A4AB3988F3BB595723CFB" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.Aero2.dll" />
-      </Component>
-      <Component Id="cmpA4CDD4483F404076AAE7073E39F81864">
-        <File Id="fil74C2C62E6E6A49D89F07B0DFE31F8D61" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.Royale.dll" />
-      </Component>
-      <Component Id="cmpF1A62553B9D547E08E23692770D7D794">
-        <File Id="filF88DC52827724306942C0823589D68AB" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Xaml.dll" />
-      </Component>
-      <Component Id="cmp843475DEC861425782658C079229E7FE">
-        <File Id="fil000420A1263645A49F163FBF3C249FA6" KeyPath="yes" Source="$(var.ProductSourcePath)\UIAutomationClientSideProviders.dll" />
-      </Component>
-      <Component Id="cmpA98828498CE3461BABE23DDD9990F57C">
-        <File Id="filB48E67430B8E4B349B5BC4B51BEB5D2F" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Resources.Extensions.dll" />
-      </Component>
-      <Component Id="cmpDEE7C0BADEA14B9A9AFFD4C9BF4E7702">
-        <File Id="fil7FC6D1A357CD4A848EF0790AACD69574" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework-SystemDrawing.dll" />
-      </Component>
-      <Component Id="cmp10ABC7FB464B42FCA1EDEC7015AFEDCF">
-        <File Id="filA44718AABA60461D9DE636D5B4A75045" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework-SystemCore.dll" />
-      </Component>
-      <Component Id="cmp930F2D2320B94F6397ECD91862AF7A90">
-        <File Id="fil0B2E8182CDEC485F8364AB82F5EA2D35" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.Luna.dll" />
-      </Component>
-      <Component Id="cmp5C8827EF42BE4C098EF08EBD4011DA47">
-        <File Id="fil15D3E880E8AD4F9A970422D79FADDBAF" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationNative_cor3.dll" />
-      </Component>
-      <Component Id="cmp6C0567CC32E4457A8F2D03C6E7F5897E">
-        <File Id="filB46C0C9BDA404C51ACB0F93E5ADACDE5" KeyPath="yes" Source="$(var.ProductSourcePath)\WindowsFormsIntegration.dll" />
-      </Component>
-      <Component Id="cmp18A181D71C894FBE96F4A3563213DC57">
-        <File Id="fil65D656B3F93A4957855012A0CE59E930" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.Classic.dll" />
-      </Component>
-      <Component Id="cmp1C666476BE6044B4B8C74450F1F32E67">
-        <File Id="fil74AD14031F3C42D098C289C6D3E210F2" KeyPath="yes" Source="$(var.ProductSourcePath)\PresentationFramework.Aero.dll" />
-      </Component>
-      <Component Id="cmp0CC3F419123C4E9487ABEE124AE45D34">
-        <File Id="fil55B3AECB8A204EB7AE5252B17DF5CC79" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Drawing.Design.dll" />
-      </Component>
-      <Component Id="cmp21FDC39039A64652845AE15C255678EF">
-        <File Id="filDC78C8779F7C42D6A67080A3B4E451C4" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Forms.Design.dll" />
-      </Component>
-      <Component Id="cmpCE991A76187F47148F1854BC02E3524E">
-        <File Id="fil199A45B24AFE4650B2EB5A3C3E7EC0BE" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Forms.dll" />
-      </Component>
-      <Component Id="cmpAD1A205D445C43588868B205091DD390">
-        <File Id="filFC6F2DCBA0D549999D96D3624406804E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Reflection.Context.dll" />
-      </Component>
-      <Component Id="cmpD7A187ADE66347E5A7550B96BA10D493">
-        <File Id="filEEF618E0250F4B8CBFE951C2A7E5C018" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Data.OleDb.dll" />
-      </Component>
-      <Component Id="cmp827B25EEC28D4699BB29042B273C8CBF">
-        <File Id="filEF6B07EDBC8F43AE8DF88CFDF798FC22" KeyPath="yes" Source="$(var.ProductSourcePath)\System.ComponentModel.Composition.Registration.dll" />
-      </Component>
-      <Component Id="cmpECBD8DFB18AD451AB3D81803DECC13BF">
-        <File Id="fil639FFF2D706848E18758EE576F1B527D" KeyPath="yes" Source="$(var.ProductSourcePath)\PowerShellCoreExecutionPolicy.adml" />
-      </Component>
-      <Component Id="cmp01B3850D6E55468AA84B758FDE8CA59E">
-        <File Id="filFE64839ED9F24059906D693E9D52015A" KeyPath="yes" Source="$(var.ProductSourcePath)\PowerShellCoreExecutionPolicy.admx" />
-      </Component>
-      <Component Id="cmpF6FDA6202E9D4CEF9F21A23D32571BFC">
-        <File Id="fil9120D0A4381F4B34B80AB37D2EFBCF7D" KeyPath="yes" Source="$(var.ProductSourcePath)\InstallPSCorePolicyDefinitions.ps1" />
-      </Component>
-      <Component Id="cmp73A4CC8E2C9E4594A3D8258C9E00D7E6">
-        <File Id="fil8DBDCAE679714880A535D26FFE95A8F9" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.GraphicalHost.dll.config" />
-      </Component>
-      <Component Id="cmpAC984FA3A67247BC996F60290C87D0A1">
-        <File Id="fil1B9348FB24ED43DBAF5D977C7342C2B6" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.GraphicalHost.dll" />
-      </Component>
-      <Component Id="cmp2E32A6E773F543F0A150B972F8D3E23A">
-        <File Id="fil66411B8941CA492E93BF262EA72C6BE6" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.PowerShell.GraphicalHost.xml" />
-      </Component>
-      <Component Id="cmp874F51885AE34AD9AA37DC46A44B3194">
-        <File Id="fil16005153CF144E458123E5989CCB3A0E" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Forms.Primitives.dll" />
-      </Component>
-      <Component Id="cmp798A4EE6784541FE9B13582E52C5A818">
-        <File Id="fil8A6290BE106E416CB35FB2BEA982C3B8" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.VisualBasic.Forms.dll" />
-      </Component>
-      <Component Id="cmpBB705B2570064C99A71B6FA65CDF9DC8">
-        <File Id="fil0F66F2502CDC47FF8C8626941746DF84" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Windows.Forms.Design.Editors.dll" />
-      </Component>
-      <Component Id="cmpE9599A00802144DF98F5792E029C8875">
-        <File Id="fil3CBDB7C74B704FDBAF2D2E6B3FC182BA" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Http.Json.dll" />
-      </Component>
-      <Component Id="cmp0989343D60B74AF082291F612F0E6FA6">
-        <File Id="filECDFEB9313BF4BF68CEE13A6EA1DB388" KeyPath="yes" Source="$(var.ProductSourcePath)\createdump.exe" />
-      </Component>
-      <Component Id="cmp0BD7D15E0377407FA4C43BFE89F0C12E">
-        <File Id="fil6EF5C2AED8674A32B0F3CCEE9CBEED71" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Formats.Asn1.dll" />
-      </Component>
-      <Component Id="cmpC0FFB3F4FB30438082D2DC0F4E4BF12D">
-        <File Id="fil8FEEEB3B27DF40148EB85CE6AE1A420B" KeyPath="yes" Source="$(var.ProductSourcePath)\Microsoft.DiaSymReader.Native.$(var.FileArchitecture).dll" />
-      </Component>
-      <Component Id="cmp1EBDE676D79B4B0DB859B3F601D78513">
-        <File Id="fil589A10D0D26C4D7F8479F40D11824D63" KeyPath="yes" Source="$(var.ProductSourcePath)\api-ms-win-core-console-l1-2-0.dll" />
-      </Component>
-      <Component Id="cmpB92B70CEFC2F438386F97264FB436CDD">
-        <File Id="fil824D1A506096432888ABC2FDFAFABEE5" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Diagnostics.EventLog.Messages.dll" />
-      </Component>
-      <Component Id="cmp8635213A03B04AAE8E1BFB7EA85E0DB2">
-        <File Id="filAD781A5A752E456D9E59E0C5CDF68CAF" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Net.Quic.dll" />
-      </Component>
-      <Component Id="cmp2BB002B115C247FFB3353C80CAAC10B3">
-        <File Id="filF1771BA6F8A140FFB77E7558D035A0F2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.IO.Compression.Native.dll" />
-      </Component>
-      <Component Id="cmp3547A55EA9D04784B4CF2FC717447E16">
-        <File Id="fil463DDA419769417A8D5A34C433E194F2" KeyPath="yes" Source="$(var.ProductSourcePath)\System.Speech.dll" />
-      </Component>
-      <Component Id="cmp5FDF8631A090425A90B27344B4C2A62A">
-        <File Id="fil97828F3C973A46BDB0EF08D17F630D73" KeyPath="yes" Source="$(var.ProductSourcePath)\mscordaccore_$(var.FileArchitecture)_$(var.FileArchitecture)_6.0.21.15406.dll" />
-      </Component>
-    </DirectoryRef>
-  </Fragment>
-  <Fragment>
-    <ComponentGroup Id="ApplicationFiles">
-      <ComponentRef Id="cmpCBE3857586454EB3B634B118E8EBD1D1" />
-      <ComponentRef Id="cmp22EA8B65E9784BB197A5CC42FBFF1788" />
-      <ComponentRef Id="cmp9F22B503FD4D4F0286514A511718FD7A" />
-      <ComponentRef Id="cmp109FF222E78D452BA35ECFBCC4D82F90" />
-      <ComponentRef Id="cmp8814D879AFBA49C8B04509733BCBA556" />
-      <ComponentRef Id="cmpC519DEF229CC44BCBBAF204F0C0EBBC6" />
-      <ComponentRef Id="cmp9370476A1A344B97860E4F31A5EA7865" />
-      <ComponentRef Id="cmpD0A5CF777C2D47DA966672B6B07D31A5" />
-      <ComponentRef Id="cmpE67BDD4BD52046578E30F0B2181877BA" />
-      <ComponentRef Id="cmpD552ACBBE2F4464EB20C6203358DA51A" />
-      <ComponentRef Id="cmp71DF4DC4E289477C94DD068527756E12" />
-      <ComponentRef Id="cmp381447C118FA43D99F842934D6F0E6FB" />
-      <ComponentRef Id="cmpC9B33CF1478E4A73A8C48853FEDBF014" />
-      <ComponentRef Id="cmp9B8B3C498C954C47B35F15527E72C6D2" />
-      <ComponentRef Id="cmp2CACC20993A24B6183A07B0723E20662" />
-      <ComponentRef Id="cmp4477FC97930D452DA018C8F6A3D7D168" />
-      <ComponentRef Id="cmp30C10EC477714A76B2A8D0A957D1D6F3" />
-      <ComponentRef Id="cmp31176C5A3BDB4A9F95171A4780D7D4D2" />
-      <ComponentRef Id="cmp3CC027D3F160412C9F0044EBED3115DD" />
-      <ComponentRef Id="cmp3B130879A26D2E954251BB81E8948069" />
-      <ComponentRef Id="cmp02ABBE4A3EDBEBFD05DC17A009A2B79D" />
-      <ComponentRef Id="cmpAA10498DF244C013CB5043C62E3AA83A" />
-      <ComponentRef Id="cmp0068EDEA68F0D5BF766CE0305A9082BA" />
-      <ComponentRef Id="cmpC998327F5549F21F104E42B906FD60C4" />
-      <ComponentRef Id="cmp36DE82D9AD5932124FEC1B067B0D011D" />
-      <ComponentRef Id="cmp8D31C0EED6D178C8313F057D6EE90970" />
-      <ComponentRef Id="cmpEC0174D67CBA8D49D44387CCDC8E7986" />
-      <ComponentRef Id="cmp02D5012CE68A72B4EB57A85BF4E40843" />
-      <ComponentRef Id="cmpF0032BD367B4868B9D0B806AFE081A3D" />
-      <ComponentRef Id="cmp0AC970BEC366F9ADB96BD5FA34459C23" />
-      <ComponentRef Id="cmp268C3104F2C2E1772E901BF932388BA0" />
-      <ComponentRef Id="cmp5C3D90690414B641947FDA684E9BE9A9" />
-      <ComponentRef Id="cmp2F126B84C7D50DC3F8F8E273DD6CE7DC" />
-      <ComponentRef Id="cmp492FB39320E285A540ADEADE18A5F96E" />
-      <ComponentRef Id="cmp0C53A9DAF0450D9AD0734770DD18662A" />
-      <ComponentRef Id="cmpE4D79A97914A11003CA89DB008133BA0" />
-      <ComponentRef Id="cmpAA3881D6DE91B932AEE8F4C42EF99218" />
-      <ComponentRef Id="cmpBF238203E0B83E373D6EC1297801D549" />
-      <ComponentRef Id="cmpE760EF3FAD245C208A2174DBD78FB079" />
-      <ComponentRef Id="cmp4A6D0CCDE897F87246D521912A7F91D2" />
-      <ComponentRef Id="cmpFD79004A272CDB8F6FE78139E9D5A8BC" />
-      <ComponentRef Id="cmp9EF36C5215C8ACA61D304C3A476AB978" />
-      <ComponentRef Id="cmp9EF36C5215C8ACA61D304C3A476AB979" />
-      <ComponentRef Id="cmp6C6F29B464717486F94FE5416BFFE029" />
-      <ComponentRef Id="cmpFF8748C4903DCFC623FFDA416F2AE314" />
-      <ComponentRef Id="cmpCC81CFD99DC82F17A1EA3D8763C0B35B" />
-      <ComponentRef Id="cmp52FBB26F92105AD3AD35C220A657AD2A" />
-      <ComponentRef Id="cmp717F2424B3CF81CE7C4CF659DB544785" />
-      <ComponentRef Id="cmpE76D27D7B5D2ABAF88E777361EB91660" />
-      <ComponentRef Id="cmp3BBD9887A33167372318718FF8D1AEDB" />
-      <ComponentRef Id="cmp3233756873AD35E45D8AFF0DECB12A10" />
-      <ComponentRef Id="cmpC34CACA6E967ECA4F9CCF56570BD8185" />
-      <ComponentRef Id="cmpFD7E03A554A320F567F49F8211D93A59" />
-      <ComponentRef Id="cmp580A12A38C2531DBD6B76F4A159A7A84" />
-      <ComponentRef Id="cmp65A9F72C0AE530B5080F50972BD208B0" />
-      <ComponentRef Id="cmpCC2EA506ACC015C30257216EB54EF45C" />
-      <ComponentRef Id="cmp23FD946C6681D6747F1B638ECBE8C8BC" />
-      <ComponentRef Id="cmp4B935A8190C2D7D1F0E0DB9E5AAD7F30" />
-      <ComponentRef Id="cmp2B60F4AC2E8D95A558C3E121A6252D37" />
-      <ComponentRef Id="cmp5977DC14DE00AD6E597A2FEBB8C3B58B" />
-      <ComponentRef Id="cmp689C7CE34E0246D8B56D370E898354CE" />
-      <ComponentRef Id="cmp634E012FEF6122735D91DE4B1BCC1116" />
-      <ComponentRef Id="cmpDB015975B1AF141A6CDDA12B31DA2B74" />
-      <ComponentRef Id="cmp78C94EF3D79D1B59DE4388AA2667668E" />
-      <ComponentRef Id="cmp2C924B87CA7B55E4B688163D0424BF1B" />
-      <ComponentRef Id="cmp0D69AF816E19455A8CF5034C61317EA3" />
-      <ComponentRef Id="cmp0D69AF816E19455A8CF5034C61317EA4" />
-      <ComponentRef Id="cmp9517BE666A9E7C23D64C30BB87042294" />
-      <ComponentRef Id="cmp20E61B6FB720A911BF811B96C3D45849" />
-      <ComponentRef Id="cmpD28050E830C7622BACAB507E9B96785E" />
-      <ComponentRef Id="cmpBECA40B2C3C12E0305699CA1817C9F5D" />
-      <ComponentRef Id="cmp90EDB840A03FF0E0AB30DBA7DDD1BCE1" />
-      <ComponentRef Id="cmp433305CEF42F648A101FB57F72AE371A" />
-      <ComponentRef Id="cmp37330FDB9A02F3FB463D113D31EDCA86" />
-      <ComponentRef Id="cmp28A6204649AC15DA0210CE3067308BDE" />
-      <ComponentRef Id="cmpA4C6AF97A7B02D8D55E1E09AB7F74558" />
-      <ComponentRef Id="cmp06E8C21C125E29603C631488D5EBC1CA" />
-      <ComponentRef Id="cmp18FD8ABAE1B131CE3834F0E2BB07E5B8" />
-      <ComponentRef Id="cmp8552B147D2AAFD164533C72368BFB61C" />
-      <ComponentRef Id="cmp33AA41435A9FDD75B7D5FA6869C6F441" />
-      <ComponentRef Id="cmpF51764A0306591EAE22DAC7C60CD94C3" />
-      <ComponentRef Id="cmpCF291BFA1FC042E050794DC43CC97162" />
-      <ComponentRef Id="cmp9D2C3D8592740F45A1025E694A190D9C" />
-      <ComponentRef Id="cmp3CF2B598C782E6BBFA0572EBC7EE5EE5" />
-      <ComponentRef Id="cmpA9E19364F0E8E65EEF3BEE2267DE1F9D" />
-      <ComponentRef Id="cmpEC913527EE251703E92C268807513DB0" />
-      <ComponentRef Id="cmpD8208C4E8508687BF4672F2A0EB64E67" />
-      <ComponentRef Id="cmp16E86C327EA784631EE474C8518A5FA5" />
-      <ComponentRef Id="cmp4CB166B799668590C946561BBF2EFDE1" />
-      <ComponentRef Id="cmp07CBFC92249F39E209D5A16F80B9B54B" />
-      <ComponentRef Id="cmpB9AA376C913A011DB4FCF8058BBA8243" />
-      <ComponentRef Id="cmp91FC3112769800144B79BEECAD84D60A" />
-      <ComponentRef Id="cmpC3FFE4945C208FFF74B59235DE2524CF" />
-      <ComponentRef Id="cmp15AFF93E2D617D9DE5CDC199C300E4DD" />
-      <ComponentRef Id="cmp104BF385BB4C3CF9750E85D0E8920B23" />
-      <ComponentRef Id="cmp35BE916168DCD7CEDDC7D8A2C72F6FED" />
-      <ComponentRef Id="cmpB3D5B3B0C9FE6C6A76115D09B1099682" />
-      <ComponentRef Id="cmp9568B438265B4B9537FB278425E51F9D" />
-      <ComponentRef Id="cmp96F5D79C2A39A3FCE2832C9F0DA1FFB9" />
-      <ComponentRef Id="cmp7F0E91316B501D5C0C5FDC147C91981E" />
-      <ComponentRef Id="cmp49EA2B6077C3CFE16C87CE6C69B211FB" />
-      <ComponentRef Id="cmpFD2810C7EB4AE4047C456491CE5AABA5" />
-      <ComponentRef Id="cmpCB73A07CE8A738AA1591F9E7C13B0DC6" />
-      <ComponentRef Id="cmpF719432933DD98076D8DC76F7CDF5873" />
-      <ComponentRef Id="cmp1941A7354E2716358AAAFF73CC82FD5A" />
-      <ComponentRef Id="cmp669738F33BAC5E1BAE50F3215C98E413" />
-      <ComponentRef Id="cmp7C918B64BCE3FB35E1CC46F248EC19CA" />
-      <ComponentRef Id="cmpFE8DC0C226472F454DB6C4215FD68B98" />
-      <ComponentRef Id="cmp5FAAF1291504DF59081EF8F6E96FD8CE" />
-      <ComponentRef Id="cmpE055F2004E1479FA6B4D7510DFCC9F1D" />
-      <ComponentRef Id="cmp77CC2EF6D97E13B55707EED8DC63EEC8" />
-      <ComponentRef Id="cmpF942FF1161AC1F9C83A3D6676E8E9A4B" />
-      <ComponentRef Id="cmpDE30E0D93EFD2C6AB2915E8BB0944FDF" />
-      <ComponentRef Id="cmpFB4ABE0562394C67AF3F84DAD5DCD1EA" />
-      <ComponentRef Id="cmpD49FA4B84FFCC31FC3E727D1D4F8B90F" />
-      <ComponentRef Id="cmpC26581911B1D95692FE9CD4E52E093D0" />
-      <ComponentRef Id="cmpC6593A8DA78C5D231EFBE229F2AA7F6D" />
-      <ComponentRef Id="cmp670F6F3CA4A21026C71203A94EF9F57A" />
-      <ComponentRef Id="cmpF83B856F8ECFE51256947060F4FCA385" />
-      <ComponentRef Id="cmp1000361436DD46A7A215CE64CCB3070F" />
-      <ComponentRef Id="cmp3C4A26443C1FF5DCF10620805BA1810E" />
-      <ComponentRef Id="cmp46562550D9D7CE53CAB162E828DE0283" />
-      <ComponentRef Id="cmp0DD31480ADEA8E2FE03F202EAC7410DA" />
-      <ComponentRef Id="cmp8D3944B62C435DB200C2997753F11B4C" />
-      <ComponentRef Id="cmpCA53F2E8DB1BC17C1D52DF65193093F5" />
-      <ComponentRef Id="cmpA2AE100BE9A48176C32A44F8EAFED87F" />
-      <ComponentRef Id="cmpA2AE100BE9A48176C32A44F8EAFED880" />
-      <ComponentRef Id="cmp67AFE3748590F117178E5617E219F1F8" />
-      <ComponentRef Id="cmp734102C1EBBE0D4417B67AA90D416EC4" />
-      <ComponentRef Id="cmp04AC57A0E3245015D9DFB332698F3E26" />
-      <ComponentRef Id="cmp1E29A0D7860190642C2D8504982890F9" />
-      <ComponentRef Id="cmp2FB548B56B09B010468883CA4073600D" />
-      <ComponentRef Id="cmp4D3236B49B126CF9FFC5234678B3B302" />
-      <ComponentRef Id="cmp175D272DFC7FF99BFB93DD4C19681023" />
-      <ComponentRef Id="cmpBCA9F625A04F14271B3727E3DB3182CB" />
-      <ComponentRef Id="cmpAEA2387D6556C1CBCD2E10B2E71FFAA1" />
-      <ComponentRef Id="cmp2F8D30568317F98B5965066D6D186037" />
-      <ComponentRef Id="cmp61361B29279CEB7B0434A889BB3C3B71" />
-      <ComponentRef Id="cmpFCCFD9A69F8311B86AF6ECFD358911D6" />
-      <ComponentRef Id="cmp4C42AE293DE5ECC32068657DD0E1E109" />
-      <ComponentRef Id="cmpB33F1D8B38414D02BC417B7221BB2C92" />
-      <ComponentRef Id="cmpD53ED8782D7CC7C913ECB3436A2FD7D7" />
-      <ComponentRef Id="cmpEA2A37C87C5D278D1C97725C0BE5E814" />
-      <ComponentRef Id="cmp1A9CC77C3CEB765A85E2A5D41237626C" />
-      <ComponentRef Id="cmpD5D62965C267D4B4347E027709E5DE28" />
-      <ComponentRef Id="cmp41178538CA436F109303D32F58555D03" />
-      <ComponentRef Id="cmpD81F583B13E6C2D6E4F2CE880505FA06" />
-      <ComponentRef Id="cmpB9583E9956348FD3CA8882B90B6EA5C2" />
-      <ComponentRef Id="cmp2D91B1A06F475760CF19519E4C2CC84A" />
-      <ComponentRef Id="cmpD46F8000F402AC1F58F8C5457CD90ADE" />
-      <ComponentRef Id="cmpE66ABF016916C709133CA0DB9366469F" />
-      <ComponentRef Id="cmpECCD26D8C540FA35F5C633B318EB742E" />
-      <ComponentRef Id="cmp644DFED4A59040568D091F0EA5F691E6" />
-      <ComponentRef Id="cmpCC989C2FC3319628C5A0897A9CDB4C7D" />
-      <ComponentRef Id="cmpC9085D713FC071587C61ACFE51384BDD" />
-      <ComponentRef Id="cmpB942FEF3BC11F835DF30CDDD845486AD" />
-      <ComponentRef Id="cmp7C30328B9DC0AAABC18A5CA8E7F7488D" />
-      <ComponentRef Id="cmp13A6DAF93DDD3EAC212153536C80BF67" />
-      <ComponentRef Id="cmp9DE0F8A88DAD103A050B1F26D893BEF9" />
-      <ComponentRef Id="cmpB22A40932F4E4471B6D5B34DC9FA758A" />
-      <ComponentRef Id="cmpD195B2A584856051C325572DBB7E0FA9" />
-      <ComponentRef Id="cmp1043F63E626C53139A6B800DE19F1D31" />
-      <ComponentRef Id="cmp5EFA00ED72CAE35E2305583E29C7C0E7" />
-      <ComponentRef Id="cmp40742AC331A13D877BE3085F0E2E5017" />
-      <ComponentRef Id="cmp5E5EC336758293C396FB70037EAECB51" />
-      <ComponentRef Id="cmp283684B3318BCD5A91BF7209D7334305" />
-      <ComponentRef Id="cmpA49D505499A05C526F7BB28E03781BAD" />
-      <ComponentRef Id="cmp0A0A39DD78246C9E3C90FA18EC033480" />
-      <ComponentRef Id="cmp3C23CFE2F3E20CB67AB209A01D404991" />
-      <ComponentRef Id="cmpD34C8CD8BF5F802DCE6D79BD031400F6" />
-      <ComponentRef Id="cmp4696307ABC78C14C575582B4755098FB" />
-      <ComponentRef Id="cmpC0838E8C57D468419FA312FCDC692C2D" />
-      <ComponentRef Id="cmp53AF51D171028D3271F1D0D78B95C0B4" />
-      <ComponentRef Id="cmp638B7DC05FC5B4ABB321BFEAF36D6C2F" />
-      <ComponentRef Id="cmp79CAE24B87836EB856F795A0F0C0277A" />
-      <ComponentRef Id="cmpC46C08E02A4A83F863F812A3EC12B002" />
-      <ComponentRef Id="cmp9782F919130CAF5E0CF02FE60CC64205" />
-      <ComponentRef Id="cmp6E73647D495A1EA3BE6C1A2F86D804FC" />
-      <ComponentRef Id="cmp1E51AA1C97285F18C1F3502915AC2142" />
-      <ComponentRef Id="cmp8C0438E44E39800EA412C6D1DF647015" />
-      <ComponentRef Id="cmp2460170ED7A1590E536AC4DFA2A090C4" />
-      <ComponentRef Id="cmpDA3111DDBA4FDD64BF4EFCD32783E9D7" />
-      <ComponentRef Id="cmpDDAD601E3283C9A170131D9676843483" />
-      <ComponentRef Id="cmp4AF23AD5CF83E8C3CA23CE6DBF09DAB7" />
-      <ComponentRef Id="cmp05645B419F5DAB7E6BC89BD9531A9755" />
-      <ComponentRef Id="cmp2C1C15AF6A853A37210F9952FF8276EB" />
-      <ComponentRef Id="cmp45F95FD91411CA915989BD31546E10D1" />
-      <ComponentRef Id="cmpDA00EC2351C7C8CD19772559BAEB6DD6" />
-      <ComponentRef Id="cmp0F8AC22D198FF9516030549234B252F8" />
-      <ComponentRef Id="cmp8C0CE0CEB2C635A3548CCA5419C133CD" />
-      <ComponentRef Id="cmp2894FC5AF337A8727F082F5A0E568CC0" />
-      <ComponentRef Id="cmp8D09BA10F62939C1D17CD5C08719F9BF" />
-      <ComponentRef Id="cmp0B5700EBDA661492378A8D2BE4B0CCC2" />
-      <ComponentRef Id="cmpE69980AC1BF483BDE6C2D72667346B7D" />
-      <ComponentRef Id="cmp2D1EF1D94DDCAFF77A9EEC75A59A633C" />
-      <ComponentRef Id="cmpDA936E7EF0404307D9CAAA7A365EDC24" />
-      <ComponentRef Id="cmp9DB38F210B5251337BFF171CF8092C02" />
-      <ComponentRef Id="cmp5DE1EE232F232719DFB8EC9DF88FDE03" />
-      <ComponentRef Id="cmp2C835739E602911F79B064D2F0CB241A" />
-      <ComponentRef Id="cmpC57663058794D67CD71E9334A7DBFB11" />
-      <ComponentRef Id="cmp5084DA048CE4466B2B33CC19E8E160C0" />
-      <ComponentRef Id="cmpA1069497315F9B59DAC010E401DDE5F8" />
-      <ComponentRef Id="cmp79B0C6718C0A7BFE6B6810F6DAD41E81" />
-      <ComponentRef Id="cmp7A2455D41F5640E0038318F3C93E6183" />
-      <ComponentRef Id="cmp017F1FE334055D7A9ED621D69CE55DD4" />
-      <ComponentRef Id="cmpC962D0075A7DCFD1C87041AF911A97C4" />
-      <ComponentRef Id="cmpAF7B98CB7B1CC0D4106B4C84AA309583" />
-      <ComponentRef Id="cmpEE2EE1FE3AAC419D5923F7AA11FC0428" />
-      <ComponentRef Id="cmpAC7C31925201F03A444F9E7FF233A2E2" />
-      <ComponentRef Id="cmpC89F4A0C4FCF5246E06A4731AA00C0DB" />
-      <ComponentRef Id="cmpDB3B9CEC7C9F97F45B27DA073C1B9741" />
-      <ComponentRef Id="cmp6FFA891A2BA5D635134A4BDD472C137A" />
-      <ComponentRef Id="cmp52295A769FD374E0181E6FC42AF3B629" />
-      <ComponentRef Id="cmpE6A39823164370DE762EB2160B7C052F" />
-      <ComponentRef Id="cmpE63E1F7A32DC1B4394F26FCF12FE68BE" />
-      <ComponentRef Id="cmp9D918AAA3F478AEEA32C3F8AC939B4C5" />
-      <ComponentRef Id="cmp8D76B2CDD3B11893BF22B139DE325E42" />
-      <ComponentRef Id="cmp7C933AD570F24DA97B5E88CC962819C7" />
-      <ComponentRef Id="cmpAB17E329B5A2939CE67126E57D959964" />
-      <ComponentRef Id="cmp2675882C487AD9F183386887CB760379" />
-      <ComponentRef Id="cmp469F96AA1B86FD69DF010ED2B43C0490" />
-      <ComponentRef Id="cmp64AEE1A0E20B562B674944DA4AA8A81C" />
-      <ComponentRef Id="cmpC4CE8B3AFBDD05F2D1CA184EC6F2F6AD" />
-      <ComponentRef Id="cmp38EACDEC714E7574DA1D1B71A64D7F98" />
-      <ComponentRef Id="cmp96749B04C9D0B48A5CC24A8429A55B11" />
-      <ComponentRef Id="cmp720268936DAFEB403249538726C7A0D9" />
-      <ComponentRef Id="cmpA0F24CD99B1551D92627563E93CC69C0" />
-      <ComponentRef Id="cmpC65F6EE65E7395F8683053ECF4C5597A" />
-      <ComponentRef Id="cmpBA74BDCF772CB3A06B99296F5AF3F5D1" />
-      <ComponentRef Id="cmpEE95B532571A9267B39D72710F1E5E4D" />
-      <ComponentRef Id="cmpDF8E0D57CF8B265448B5CBF3B36CD151" />
-      <ComponentRef Id="cmpB165A04A8913ADEDA1A4E52C10B29E96" />
-      <ComponentRef Id="cmp1B314F22E3B6E2BAC952D8DF075723FF" />
-      <ComponentRef Id="cmpF7F591858894BF922DA7F68B3CB3B370" />
-      <ComponentRef Id="cmp35D7682643503FA3EFF9B04CDB83867B" />
-      <ComponentRef Id="cmpEFC858F94DD206B5A4996C7D3095341A" />
-      <ComponentRef Id="cmp9F363F3906D6771691F96605FC6C958D" />
-      <ComponentRef Id="cmp826F9B36D96BE5650A67E9C5D2D918DD" />
-      <ComponentRef Id="cmp195E63B53BC91EA56A2D52AF3EF028FA" />
-      <ComponentRef Id="cmpF81DCE7B330D9CF5B70501D76A1D5543" />
-      <ComponentRef Id="cmp18616D3BE360362E7108A71442D95DA8" />
-      <ComponentRef Id="cmp57452FCE70ED7D869F91A25A8FE9767C" />
-      <ComponentRef Id="cmpBFAA43F2923CBC760EE2FFC7616F91B0" />
-      <ComponentRef Id="cmp1D7850EEB288BF7DF2D7BFFD10B380EE" />
-      <ComponentRef Id="cmp901434E222CA7B72B0DDFFCB9C9D4958" />
-      <ComponentRef Id="cmp699BF8B9FD723FDDF914160D33D620DE" />
-      <ComponentRef Id="cmpD33D82ABF51BB671F2DB4ACA9B7BD11C" />
-      <ComponentRef Id="cmp43AFEE697DBFCD5C8A53EC540E8582F4" />
-      <ComponentRef Id="cmp0845AF852A390748CB4C6618A133CA9B" />
-      <ComponentRef Id="cmp8DB8D2B11EE3C64E01A5AA5792113C7D" />
-      <ComponentRef Id="cmp1940FD2AD1FA5AC8438D6551BB1950BD" />
-      <ComponentRef Id="cmp0CA8C4585AF8DAC840FAD7021CDCE5C0" />
-      <ComponentRef Id="cmp3AFA8B48759D983BCC7FCAB0F8C00049" />
-      <ComponentRef Id="cmp778C0CA0C6DB9B22F55E500E3DD4CE67" />
-      <ComponentRef Id="cmpFB9E5DA3F7ED32C900C5711426C700B0" />
-      <ComponentRef Id="cmp57FB26AB5D4FC65F8AC6DCA5CA4EAB50" />
-      <ComponentRef Id="cmp95793F2DBCB53FC6574271778B460A23" />
-      <ComponentRef Id="cmp702A2FEFD38FFCF605ED1C313EC71458" />
-      <ComponentRef Id="cmp2FAC51A60BB0A9076A393D722CF1B290" />
-      <ComponentRef Id="cmp097CB187E2BDE58F7392C2C072809466" />
-      <ComponentRef Id="cmp13DAFD4716AE6C1A7628B61627C60A19" />
-      <ComponentRef Id="cmp1BEF581DBB396BA29E4B59C883BB8649" />
-      <ComponentRef Id="cmp40B149871A5BA98DC82EE7856A4CD736" />
-      <ComponentRef Id="cmpEA4FB4C2137ACB359A57F047FB3F064D" />
-      <ComponentRef Id="cmpEB4CED5CB081B9AAF87D6CAD0FC28F95" />
-      <ComponentRef Id="cmpDF8E2441E58692CD330DCA991DB9BC92" />
-      <ComponentRef Id="cmp8A908B31F517E0EFE0E38C4CB806CAA7" />
-      <ComponentRef Id="cmp5561B29D282E093AFF80AAD64EED626F" />
-      <ComponentRef Id="cmpA146B98771DAB537AE20DD014A4466A9" />
-      <ComponentRef Id="cmp3D6E19CC426EF726E2F956E58F78DDF2" />
-      <ComponentRef Id="cmpCEA7A07A4FBA646463AB6AD07587507B" />
-      <ComponentRef Id="cmp1EC7D70A01B5B94D053A703D9A242572" />
-      <ComponentRef Id="cmpEC5CF579D39FC75DC38E051E55A5CAD5" />
-      <ComponentRef Id="cmp0B896DBA6AFF2FD27FCD0E0968E23992" />
-      <ComponentRef Id="cmpC6A24F97E0D6739A51FE9CC80148F511" />
-      <ComponentRef Id="cmp9544B34C5A30F75D0F45F5718A1795F0" />
-      <ComponentRef Id="cmpBDF0DC73F4F799A46B1DE220E58C1920" />
-      <ComponentRef Id="cmp8EC2515ECF0A11A1228D21FE3D995FB0" />
-      <ComponentRef Id="cmp6B614FF53759D8CAD6F32B6314151A6B" />
-      <ComponentRef Id="cmpE9303C0491BAC84D57D1F1E13FD324DC" />
-      <ComponentRef Id="cmp9747A8C42FC4ABE5FA0C3B30FC11C16A" />
-      <ComponentRef Id="cmpB063BE196D23C33165CC5637F6E2379E" />
-      <ComponentRef Id="cmpC634BE3C2B885CE5986B811D0B7642DA" />
-      <ComponentRef Id="cmp436662C08195044E5CFF8872E2AC66B6" />
-      <ComponentRef Id="cmpC1252325D4A857CE4815CB4887232E08" />
-      <ComponentRef Id="cmp80516C165B610FEA7ABAD8867D4C1177" />
-      <ComponentRef Id="cmpAC0BB9176567509DFA5D438A69EF0C71" />
-      <ComponentRef Id="cmp15F65BD31868E4E4686961153E4082C1" />
-      <ComponentRef Id="cmp7CFC0926206345463E941DC960BE9832" />
-      <ComponentRef Id="cmpB0131B8F2F785C0DB1D557A5E3E0ABE5" />
-      <ComponentRef Id="cmp0BFDFC86C64711DBC2FD08597D1378E2" />
-      <ComponentRef Id="cmp21715E66168ACE3CEA6DE5D415CE7FDF" />
-      <ComponentRef Id="cmpF25DC4B00595182390A170310D95EA1D" />
-      <ComponentRef Id="cmpB666825D77A8B064DA727325776EAE74" />
-      <ComponentRef Id="cmpA75C2EC5A5EA46DE98DFE2962FEDECC0" />
-      <ComponentRef Id="cmp0C712C23BAC746AABB5659096ED329EA" />
-      <ComponentRef Id="cmp2BFC761F21E7234B46E57BA4DD2D9992" />
-      <ComponentRef Id="cmpAB383E4D8CF6F11984650BD4E72F4510" />
-      <ComponentRef Id="cmp292CCC20E7FD700B54FBD52A473A57D8" />
-      <ComponentRef Id="cmp6D0CF71D0549216C4A22884F5FBF18BE" />
-      <ComponentRef Id="cmp1AF8D943CB5BB73A094F79D704EC212F" />
-      <ComponentRef Id="cmp72B6F40E64433679004948C683A17F74" />
-      <ComponentRef Id="cmp3B31D67E3C0F6CC8FD23D9CC07CC9D9D" />
-      <ComponentRef Id="cmp3CCDC632173A23176E6D04C24350D195" />
-      <ComponentRef Id="cmp1C282D02791A944B172B9CBEAD1FAB88" />
-      <ComponentRef Id="cmpE126C38FBB91AEC118DA44D096195A02" />
-      <ComponentRef Id="cmp0B385D84913472F263B64812AF8A786E" />
-      <ComponentRef Id="cmp95827D8E0B4E4131783143CFFE240926" />
-      <ComponentRef Id="cmp01B060B21C4DE4D6793761203C0B0D67" />
-      <ComponentRef Id="cmpD44A732D25686A0CA69B36B72D4FA8B6" />
-      <ComponentRef Id="cmp5673E8FDA66481CD8AA936694C059FFD" />
-      <ComponentRef Id="cmpCAE9BC7900246A998C9FFB85E2017DA4" />
-      <ComponentRef Id="cmpE0FBBD56CE6FE2E1CDD3041D3447C578" />
-      <ComponentRef Id="cmpFF61B94B438F85A8FC779E3C7A5FECA2" />
-      <ComponentRef Id="cmp6D6C7959EEEBF107E24588B13122FAD4" />
-      <ComponentRef Id="cmpFA0639424F4DE02F7CC505E2DBF58230" />
-      <ComponentRef Id="cmp07C4F6061FD5D7A3AA81BFC762A789BA" />
-      <ComponentRef Id="cmp188E47B9BA2A9807918F7C62545C6B4C" />
-      <ComponentRef Id="cmp69C84168BA11BF2BEF4D8171EF6DC789" />
-      <ComponentRef Id="cmp7B944B473907CA6C3BB932806E46E5B3" />
-      <ComponentRef Id="cmp9E59176D953343E959C4D4C6FB3A0B2E" />
-      <ComponentRef Id="cmp796D96057D21272C6888BA16E71621A6" />
-      <ComponentRef Id="cmp09FC5AE7AC1DEE9FA331E11474827936" />
-      <ComponentRef Id="cmpF780CC7E5C204F6E10B5B47620F46811" />
-      <ComponentRef Id="cmpF42179572F192988F9C4D8E216D01887" />
-      <ComponentRef Id="cmp95717E1DE28928903EF839289814A639" />
-      <ComponentRef Id="cmpBFA0597694F7DEC5642F4DDFBB45F896" />
-      <ComponentRef Id="cmp18535DF89416A031A513808AB8CE4B56" />
-      <ComponentRef Id="cmpEA952E7A6079391C2EB0EFF5245DCDBC" />
-      <ComponentRef Id="cmpF47CAA3A846D0FD72C81B4A04768665C" />
-      <ComponentRef Id="cmpBE223BF60ADD50DD211D379C90DFF2F5" />
-      <ComponentRef Id="cmp52B77FCAF50F9D0DDA11553DDFE24918" />
-      <ComponentRef Id="cmp928BA3636D092BE0BB40E8A621B2A71A" />
-      <ComponentRef Id="cmp7E56AF43A9C9F3BD725032B4F4E23B34" />
-      <ComponentRef Id="cmp0F07FB10C2781EF64985C0231E9D1880" />
-      <ComponentRef Id="cmp6CC2AE24D70256108843A35BBE543ABD" />
-      <ComponentRef Id="cmp97AD5D1CAADB8D87FAEFC54F0C4B1589" />
-      <ComponentRef Id="cmp2BDEF32CC13DBA589FB48B87BFCCFD88" />
-      <ComponentRef Id="cmp7B96661EFE30D6FCD749BFA049D70D35" />
-      <ComponentRef Id="cmp983EFF7B0E21D7CBA5007E969992B47D" />
-      <ComponentRef Id="cmp5729F92BFE2487ED81F16B9F76F5A0D8" />
-      <ComponentRef Id="cmpE0B9175AA901E035434C262FA5BFDE24" />
-      <ComponentRef Id="cmp8930D9CAAE48EEA1DDF7B05ECA4C1E8D" />
-      <ComponentRef Id="cmp8BB683B8EFA12D81B0093983B9A86989" />
-      <ComponentRef Id="cmp8C02558B25F6B22C6A6E900C20C10FF9" />
-      <ComponentRef Id="cmp4A011DF9C2CA4BB2CDC862EF06663926" />
-      <ComponentRef Id="cmp88A6FB261DFD24D9E25F2AF63C232B4F" />
-      <ComponentRef Id="cmpFC754EAE0337C1473B750A7AEBA4062C" />
-      <ComponentRef Id="cmpF0C4435AA0B6F2F56D0D000A43EE1277" />
-      <ComponentRef Id="cmp541CF763DAFF56DCA1D812BD1465C83D" />
-      <ComponentRef Id="cmp155A485C71B7DE54A5EF8B9B663B01CC" />
-      <ComponentRef Id="cmp0112845AD6F6887B3A1094D1202C3188" />
-      <ComponentRef Id="cmp0336F0CDFF2D0715CD342BF0D0EAF38E" />
-      <ComponentRef Id="cmp6A634BAE51EBC7D342FE45DD4F83CBB5" />
-      <ComponentRef Id="cmpC2BD980E9AD88FA8C1CD0ADB81E5D8B3" />
-      <ComponentRef Id="cmp8E3882C311D8863C7AAC79BF98EBF1E4" />
-      <ComponentRef Id="cmp43AFF4A88319BF3E995AD16A510F82A8" />
-      <ComponentRef Id="cmpEF39CD6043D82DB539B242B149364D0E" />
-      <ComponentRef Id="cmpD791ACEC788E2D11F1C4AC2E8E1C4BC5" />
-      <ComponentRef Id="cmp04302602790BC8ABBF6E4333C261968E" />
-      <ComponentRef Id="cmpBBA71095399E6775AC36EA3A6E0C0ECA" />
-      <ComponentRef Id="cmp0CAD5AEF7D14F323B8CBB2756603D25D" />
-      <ComponentRef Id="cmp5AE7EE76C29D2CA65ABB585EE15C18AB" />
-      <ComponentRef Id="cmp0906BA39F4872AC5CE33EA9778CF24E5" />
-      <ComponentRef Id="cmp96E2F9A08067109988A4087BCE3B74D4" />
-      <ComponentRef Id="cmp82A5E06C6CFE9382D9175B993EB1EBAD" />
-      <ComponentRef Id="cmp10B674B9EE153B7FA9E743D45CF5639E" />
-      <ComponentRef Id="cmpA73318A1FACCEA81EF1EFA5F78374D59" />
-      <ComponentRef Id="cmp25CBD6073CD07C77389077CC7BE7A048" />
-      <ComponentRef Id="cmp1CCCE9201A646726052C421D989AA9C0" />
-      <ComponentRef Id="cmp6D952234CE10B4FEBDF02EBBC1C03E1E" />
-      <ComponentRef Id="cmp7C73A78033C737A6EA4AAC81D6943407" />
-      <ComponentRef Id="cmp99B544AF658E943EE6140147819FCBC1" />
-      <ComponentRef Id="cmp81D64ED83BF0404F92003FCE096996C1" />
-      <ComponentRef Id="cmpBA27F493BA63114999D9C645A559ACBE" />
-      <ComponentRef Id="cmp405FE4AEFE314F91B7F8089861BBB353" />
-      <ComponentRef Id="cmpA0853678FFF217EE041189B7EA010175" />
-      <ComponentRef Id="cmp61E08B784DA94759BE764CB429E64262" />
-      <ComponentRef Id="cmp2355D3B8000E494433D3A278D46BF391" />
-      <ComponentRef Id="cmp2A9C9BC07379929ECE9B4C6C3F0A87C9" />
-      <ComponentRef Id="cmpDD17B4F6040D47BCF57B5DA3B31574AA" />
-      <ComponentRef Id="cmp2B7D32EFF6CCECD440A55172A3756706" />
-      <ComponentRef Id="cmp30357FCEAC7B88BDCF0B20D55C22F61F" />
-      <ComponentRef Id="cmp557A49B03E72CD07149A6CD0595C9245" />
-      <ComponentRef Id="cmp51F2F26684B5C4D0FFFFFBD72174D1BC" />
-      <ComponentRef Id="cmpf2a3c81eb19246b6be74af07e70a06f0" />
-      <ComponentRef Id="cmp50D8B0DCCF114B58987590FF8212ACB9" />
-      <ComponentRef Id="cmpC39C65F1709E407B9D6AD3AF64F710D3" />
-      <ComponentRef Id="cmp2C63290BD1A34304BAF371F4146D9EFD" />
-      <ComponentRef Id="cmpB81F9831702F461193926ACEB88635B8" />
-      <ComponentRef Id="cmp75BA8D5A370A41AFB5B312ADBCFC8466" />
-      <ComponentRef Id="cmp9E5E2B7A0A50466DA17E86A8BC605EAD" />
-      <ComponentRef Id="cmp1E565ED0658F41CBBCED8CE01CEA393B" />
-      <ComponentRef Id="cmp0FF4FD31FAA449A68421AEA56CC6EAD2" />
-      <ComponentRef Id="cmp2D649D39265A44F0A396DFE26339EEE2" />
-      <ComponentRef Id="cmp551BA982BBBE41AABC33D357C88B6DDB" />
-      <ComponentRef Id="cmpF854E22435594DC0988EA3C80415C694" />
-      <ComponentRef Id="cmp4EFB1023F3354195901830FF1D06621F" />
-      <ComponentRef Id="cmpD27D69C40A9044A582CB686A5C377A3B" />
-      <ComponentRef Id="cmp0C1C196D3FCD4391B1500790CA24CA63" />
-      <ComponentRef Id="cmpBD2AB3C201774F75BCEF11521F4EE20B" />
-      <ComponentRef Id="cmp7072E489DB5848D0A0172D5AE7C4005D" />
-      <ComponentRef Id="cmp111E3800AD0E47D6B3963A1CF69A54A1" />
-      <ComponentRef Id="cmp43253EC95CF641B284B90F5FD7D72A24" />
-      <ComponentRef Id="cmp7B36FD4E9C074746BF6FA0D133CAD7C3" />
-      <ComponentRef Id="cmpEC4AD7C97D9745EEBA02976CD3D2CFB7" />
-      <ComponentRef Id="cmp612D5B07ED474137AECB8B4E5C2812A0" />
-      <ComponentRef Id="cmpBB987FD48B6244849EA3724F38E7875D" />
-      <ComponentRef Id="cmpF58A52A81A004F40B840D01F5EDB4717" />
-      <ComponentRef Id="cmpC2C8C956634E468EB098585A5ED6D380" />
-      <ComponentRef Id="cmp1476916A8C2741F7A2FDC7779FC67E68" />
-      <ComponentRef Id="cmp233ECE5484784D0C833558389DA72398" />
-      <ComponentRef Id="cmp4891B5387F1A4769AD551054026FF74E" />
-      <ComponentRef Id="cmpBAF7CCE6AC1E418085F0CC0C5488D502" />
-      <ComponentRef Id="cmpAD541342EB0647338627400FE6CB8508" />
-      <ComponentRef Id="cmp37A3973C6E3F4331AC25286E1C2F9207" />
-      <ComponentRef Id="cmp8262ADA8DA384CA1AAFFE49AAC28FE23" />
-      <ComponentRef Id="cmpDE1A8106796647BFB81B41F7A7BCC461" />
-      <ComponentRef Id="cmpE2615B7D815340DB9451ED89E820D2DD" />
-      <ComponentRef Id="cmp90BBF1FB2A3846AD936F5FA2F53225C8" />
-      <ComponentRef Id="cmp12205693535B4196B685F9D6E84E8F5C" />
-      <ComponentRef Id="cmpB70950CD781C4D3B91A54B81FDCA28CA" />
-      <ComponentRef Id="cmpB6D9B9D6E54149D595E135AF4302766D" />
-      <ComponentRef Id="cmp19FDB1A96CF147E7A0A057A3C89B6315" />
-      <ComponentRef Id="cmpBA1851B42D2D4718AB6B448A34C9DB93" />
-      <ComponentRef Id="cmpCB60D0CAEF244650B4D95168C4835B2C" />
-      <ComponentRef Id="cmpF70880D72C6A4D88A92A6237D51E73D5" />
-      <ComponentRef Id="cmpEBB31E1BD9EC4BF7BF877C31A74367A1" />
-      <ComponentRef Id="cmpFC9B32128AB24F01B236268F668AF44D" />
-      <ComponentRef Id="cmp016383844C2749B8B8BA88148B0D34E3" />
-      <ComponentRef Id="cmp3652DA9A1B9F44BD86C895E8B35D670B" />
-      <ComponentRef Id="cmpD446D16C3C544DD580C5A175328A9C5F" />
-      <ComponentRef Id="cmpB2DC1821DBE648078AEA75AC0AB62408" />
-      <ComponentRef Id="cmp9C1983722FB842AEAAE7FE004439F7F5" />
-      <ComponentRef Id="cmp4E2407942D9B49AF9CFB1E159F8F864A" />
-      <ComponentRef Id="cmpD8ED70D9A4584615B3A83470DE333E9E" />
-      <ComponentRef Id="cmp61D720ECB2D1498F932BC2F9A24FEDA4" />
-      <ComponentRef Id="cmpD48387EA81574DDCA1F27FB6CBFCF4E9" />
-      <ComponentRef Id="cmpAFA6C69CA9EA4CAFA8DEECB1B97E165A" />
-      <ComponentRef Id="cmpF1FACB9142CA4F5984AB663240DAEF94" />
-      <ComponentRef Id="cmpF444C2E797DD4F2B9074BA942771B475" />
-      <ComponentRef Id="cmpB9B1D6F0C54646C2912B83FCC87BDF99" />
-      <ComponentRef Id="cmp70A49D733F0748A2A9CDA23EF14A8E32" />
-      <ComponentRef Id="cmpAA20CBA102AA429297F8680518E566F2" />
-      <ComponentRef Id="cmp682C1D896464431E922B02854391014A" />
-      <ComponentRef Id="cmp928C7033AEB24E9FBB04A0600B41CC19" />
-      <ComponentRef Id="cmpB45A44325EBF44659A9285BE741DBD02" />
-      <ComponentRef Id="cmp59E8C9E998F8477DB7FD7684FFA56E9D" />
-      <ComponentRef Id="cmp828B1A3149BD4377B8F3ED6BA88A03B2" />
-      <ComponentRef Id="cmpBD7F27AEDD7B4C868A189BF7A9D2F76E" />
-      <ComponentRef Id="cmpE1A479A4292F4843ACD13A30409DC1B4" />
-      <ComponentRef Id="cmpFBD6DDB300E2448794894A328197EA49" />
-      <ComponentRef Id="cmp1C2F0536321D4DF78136F020EDCFBDCA" />
-      <ComponentRef Id="cmpAD8B27087C534166B2A469D42E2E10F6" />
-      <ComponentRef Id="cmp4CE47908A06B411898906646E8F5D997" />
-      <ComponentRef Id="cmp5ED96F4D11164EF7A37C61987E366993" />
-      <ComponentRef Id="cmp1EB25F8A7ED845C48C73EA0DECD88196" />
-      <ComponentRef Id="cmpECBFF52A229A444DA41CA375FE3847B9" />
-      <ComponentRef Id="cmp433A7AD786C845AAB8F169592E6AF3A2" />
-      <ComponentRef Id="cmpCAE58D6AA79D479E8A008C3CA7082AED" />
-      <ComponentRef Id="cmp91032B54DCA541E4AAA67482A67F6EA1" />
-      <ComponentRef Id="cmpD6DF002B60F64314BF1F9EC76DDA65FB" />
-      <ComponentRef Id="cmp0D2ECC4BB8FA48039B8BAB4044ACF4BB" />
-      <ComponentRef Id="cmp0B3E8FBB0744475C9566FEC3B696CD52" />
-      <ComponentRef Id="cmp9A0352BDEEBB4081A4339A98E8FBA2C7" />
-      <ComponentRef Id="cmpF0260DEEA2154C918C8BA72038B59316" />
-      <ComponentRef Id="cmp644C124FFBD849E49B74C36E41D5B81D" />
-      <ComponentRef Id="cmpD575288323624B33B0B73797494FBD07" />
-      <ComponentRef Id="cmp67D4312BC35F4F8E89B7A8A79554A02D" />
-      <ComponentRef Id="cmp14568E9EAE004C4081CD534DDA6DA1B1" />
-      <ComponentRef Id="cmp53FCBFE9E6BB44E7BBD2AD363D9EBB30" />
-      <ComponentRef Id="cmp7F11E28876D8470895DD1027B0C7A9EA" />
-      <ComponentRef Id="cmp9C431323C71147B880B02F6BB3E5FB9D" />
-      <ComponentRef Id="cmp8BD0C766EA49444D8015B7620BAC6056" />
-      <ComponentRef Id="cmp2A0964BABCAA4EBDBD6D71136A5149E5" />
-      <ComponentRef Id="cmp6E2A46AC5AA64C90BA26ED9B0BBCA089" />
-      <ComponentRef Id="cmp2A73B2422D1B41B08A686E3AB7BC2C2D" />
-      <ComponentRef Id="cmp698BE1E5771743BDBADE807EE8223C73" />
-      <ComponentRef Id="cmp2E822223EF204D618173FCF0B53218B3" />
-      <ComponentRef Id="cmp8DE74DE69BDA4ECD937014D5724C850B" />
-      <ComponentRef Id="cmp48D75BFE4CDB427BBE9EB9E0599F52A3" />
-      <ComponentRef Id="cmp133CB7F5F7E9456B8AF9E0E8509A5A02" />
-      <ComponentRef Id="cmpA41A8DA7519444B28D5F8D9A5153DD82" />
-      <ComponentRef Id="cmpBF0A1677B1A04B18BC51C7050C6CD9F3" />
-      <ComponentRef Id="cmp1422C6D338D842A3ABA9811A3B96AA9B" />
-      <ComponentRef Id="cmpE806F42E0910453F8644246B23FED261" />
-      <ComponentRef Id="cmp50C75C361B184C74858974F110E2E8E5" />
-      <ComponentRef Id="cmpCCC18669FA4D47A4AC543E9275AB020C" />
-      <ComponentRef Id="cmpB0A109E6A2134C7A8CC4B105BE2F933C" />
-      <ComponentRef Id="cmpD74109F0D83C45968797E72AA44AB540" />
-      <ComponentRef Id="cmp4A14126FB9654A9CB378FC03F82AF26F" />
-      <ComponentRef Id="cmp575F17D126B84F4793BCFD5A52E970DC" />
-      <ComponentRef Id="cmpE7A3015C602E4891943901F657E0FA56" />
-      <ComponentRef Id="cmpF487A4C3F0264A6D9303F034D6021327" />
-      <ComponentRef Id="cmp09993CA631724E32BCDE9D37D0F693D3" />
-      <ComponentRef Id="cmp9BC232E29E2647A8A7B003BB6F40D8FF" />
-      <ComponentRef Id="cmp089F0E921B0A41C49465A20BFABA43C2" />
-      <ComponentRef Id="cmp90E46A72DAEF4A44849866FC7C294720" />
-      <ComponentRef Id="cmp2A9C7A0AE82B451A968FFD3BDFA98AF1" />
-      <ComponentRef Id="cmp15F391293DD145FF863C946C5B4AD3ED" />
-      <ComponentRef Id="cmpFB0B6282250448CFB2E57A73CE839DB0" />
-      <ComponentRef Id="cmpD94AD86BA2FF485CBBB7F31982A71920" />
-      <ComponentRef Id="cmp3FB7AC4A79F6475CB336E596278CC5FE" />
-      <ComponentRef Id="cmp95F30B1E8A5E4DD2B018E39CEC673174" />
-      <ComponentRef Id="cmp365244FBCB8B485EACE853AD63A74B25" />
-      <ComponentRef Id="cmpD15F774C68E44CB0AA939A0D21B1B3A2" />
-      <ComponentRef Id="cmp13C4E682375C45B9942960245FAFD251" />
-      <ComponentRef Id="cmp70F072FB2F714F909A9272D0F6B96664" />
-      <ComponentRef Id="cmpFAC4ADBC484C44528D4B40EB4B649088" />
-      <ComponentRef Id="cmp685C3DD9CC0F43CAB418B63A834B966D" />
-      <ComponentRef Id="cmpC6A164F9BEC5416D80513C1ADC404A10" />
-      <ComponentRef Id="cmp99753882760240589EA4679C6EA0B829" />
-      <ComponentRef Id="cmp8490EDAA5CBE43C4908761C12B7082F3" />
-      <ComponentRef Id="cmp282D15F724FF462BA8DD96C984CF7A92" />
-      <ComponentRef Id="cmp5C521E049A6A4AFBB757B0A6EAA719A1" />
-      <ComponentRef Id="cmp6E47302FE24348BDBED003ACA133F7DB" />
-      <ComponentRef Id="cmp63589D2DF7554D2188C43D463450582D" />
-      <ComponentRef Id="cmp7C95FAD00FBA4F0398673010B419DA0F" />
-      <ComponentRef Id="cmp2BC70FF4642F47279F1367945C8B071C" />
-      <ComponentRef Id="cmp80C113A1052C4E8DACF059A155C376D7" />
-      <ComponentRef Id="cmp153033BD7D674B17BC7B2D1507CA9E96" />
-      <ComponentRef Id="cmp1A23FA3412994BDD81D86A4D4DCCACD1" />
-      <ComponentRef Id="cmp5A55FE85D2D447B6B6117D4ADD1508A4" />
-      <ComponentRef Id="cmp714283D80B4C458DB6A852460C8E6377" />
-      <ComponentRef Id="cmpE5EC845627BC46699E592CC41DC12093" />
-      <ComponentRef Id="cmp3138552E309449D4A811B8C1D35D7C85" />
-      <ComponentRef Id="cmpBE386D12CF4C4227B93279D1CD3B0C6E" />
-      <ComponentRef Id="cmpD7D2E5ADBF034474BADC416A03BBE368" />
-      <ComponentRef Id="cmp1719A38F3C30484BBA189D718AF00D3C" />
-      <ComponentRef Id="cmp770700CA06564FB187D1CD2A79AA3DA8" />
-      <ComponentRef Id="cmpEA40E9164309426C88C4388FDCA9559D" />
-      <ComponentRef Id="cmp859A3876902946E7B5B4965F90664C5D" />
-      <ComponentRef Id="cmp25A144CC34E545378735B06794A02F90" />
-      <ComponentRef Id="cmp19ADFEFDD03047828CF493B5B5CE7B6E" />
-      <ComponentRef Id="cmpDC2EF4541FA5A2E63F36A8CD6C5FA51B" />
-      <ComponentRef Id="cmpA620CA71E6FF4F50B6D7BB0761D17036" />
-      <ComponentRef Id="cmp2DF9FE0BD560EB7DC8489A259330C2C6" />
-      <ComponentRef Id="cmp9723892C7119DFDFD3A6FAE8027B053F" />
-      <ComponentRef Id="cmp2CA89A2376A848BE849FBD5ECFD6738B" />
-      <ComponentRef Id="cmp0E915393766B4DC6A9A83EBA0C218BF4" />
-      <ComponentRef Id="cmp5DF3BF3BEEE34C329E690E094A3CAFA2" />
-      <ComponentRef Id="cmp19F1175335B14CA5AC6F7ABA06E4DD34" />
-      <ComponentRef Id="cmpF8DA47047FBD4A7B8F876059F4EDB73D" />
-      <ComponentRef Id="cmp44977EB99C0647F4941AA2711A81651F" />
-      <ComponentRef Id="cmp3AF5C6350FE04033B037554EA5060135" />
-      <ComponentRef Id="cmp0125D538DA2E4396BC1D595250B69263" />
-      <ComponentRef Id="cmpAC685A1C6E354E228EB6A1DD95FF03D5" />
-      <ComponentRef Id="cmp67C4A6FC5E48487BB31DE411CF38B0B2" />
-      <ComponentRef Id="cmp6DAFD01CAA3A4C67185922F445EDE495" />
-      <ComponentRef Id="cmp4AF592F1EDC8794BF4A3CCC2DCB717DB" />
-      <ComponentRef Id="cmpA65CEF99B64C1E95632B68EDFBF3739E" />
-      <ComponentRef Id="cmp4E2AF72E6ECEABCE2937EF70ABE28E3E" />
-      <ComponentRef Id="cmp28589E9CE30CFECFD2D4F254C0D9FA3B" />
-      <ComponentRef Id="cmp482A2116B9027938C4908B0F03D30EBC" />
-      <ComponentRef Id="cmp21D1955A825F85473DD543FBD1962B53" />
-      <ComponentRef Id="cmp9451F72F30580C1268817EBEF06429CE" />
-      <ComponentRef Id="cmp8C5204B533E790983072FC17EF32FB20" />
-      <ComponentRef Id="cmpDEDA23DDAB66342DB2C554F6B963C617" />
-      <ComponentRef Id="cmpF79A92F228AF5EA2BA60CC33BE9DC6A0" />
-      <ComponentRef Id="cmp603C5B38651EE30C8E23FD7C8A4B828D" />
-      <ComponentRef Id="cmpDDD9F623B3DC4A6DB15A013734FFFACB" />
-      <ComponentRef Id="cmp8C23BECAFDBB4039A255DE6246A30726" />
-      <ComponentRef Id="cmp09A46C31077C4BDCB8606FB4DD6CAE01" />
-      <ComponentRef Id="cmpC2EEED1CA2094DB1B760297F2374216A" />
-      <ComponentRef Id="cmp8B763D3852654517B3E25C9CA5247D5F" />
-      <ComponentRef Id="cmpF297CB46D5944DC38C68B376140BDF5C" />
-      <ComponentRef Id="cmpA5CB9D3B3C794D2E9750BFF7C9709C83" />
-      <ComponentRef Id="cmp98E30699A7504181B61707E99DCC0EC1" />
-      <ComponentRef Id="cmp61560691133844F886A1E72130659721" />
-      <ComponentRef Id="cmpA83063651AF54638A78187CA67953118" />
-      <ComponentRef Id="cmp819F1885245B46C0982FFDD7301BFC21" />
-      <ComponentRef Id="cmpE0A78C8CA25E4D20AAB3E64A1AA55E07" />
-      <ComponentRef Id="cmp0F685BFF00054470A02D82A5237DD4D2" />
-      <ComponentRef Id="cmp51F4B23B87C6428B81ABAA8E8C913B99" />
-      <ComponentRef Id="cmpE4A3A9C6EBE34E9AAF4EB02937545542" />
-      <ComponentRef Id="cmp5297F3A0CC784D5FB179A2C5128882BA" />
-      <ComponentRef Id="cmpD59302B61FD5436C873FB46D8EFB3443" />
-      <ComponentRef Id="cmpB42E81A3AE804C20B209D05172709994" />
-      <ComponentRef Id="cmpE9DB812405C44652B6BEF707AFDC345E" />
-      <ComponentRef Id="cmp988678E2987C440F828A11DC2BDC7BFB" />
-      <ComponentRef Id="cmpE48B7EDF48A04D1C82A32EDBCD2E8E07" />
-      <ComponentRef Id="cmp27E5DBB49A7A4962BD6C74C79276DAA5" />
-      <ComponentRef Id="cmpBCEF6DF1461C426BB07539392C7299E1" />
-      <ComponentRef Id="cmpF26771D0C4AC49DDB2A5231B9DD191E8" />
-      <ComponentRef Id="cmp2B41C7F93EAA4322B3FAED6F2BE95724" />
-      <ComponentRef Id="cmp3F09B23AC8E74CEB9C09BD3BDF48DE0B" />
-      <ComponentRef Id="cmp2A7508B89C784581B8FEF2BB5C810CB7" />
-      <ComponentRef Id="cmp06639B424B054D12A42F24F28FB682E7" />
-      <ComponentRef Id="cmpC0C47C3075164964B8F8428CE44F7144" />
-      <ComponentRef Id="cmp6DDBFA3A9FED42B3AFDCDD4BE0416533" />
-      <ComponentRef Id="cmp84599819161549BC82898469571ADE7B" />
-      <ComponentRef Id="cmpC0582B8F392548248FA3DE3080069F68" />
-      <ComponentRef Id="cmp6EEA835AD77246C8A01C0F3B8BB0568E" />
-      <ComponentRef Id="cmpB9EF9DAB25064D92A757E7D390CC8922" />
-      <ComponentRef Id="cmp092D1859608844F78D3211718ED31171" />
-      <ComponentRef Id="cmpDCFC0B0822274CA2A1C954DF2E407911" />
-      <ComponentRef Id="cmpE773C5B7686C496DAD2111AF1950D73E" />
-      <ComponentRef Id="cmpA3A50C81E1704ABF9022F6ECE265165E" />
-      <ComponentRef Id="cmp0744A0E2DA694EFB97172A770E654F92" />
-      <ComponentRef Id="cmpFD06F9A229864F5790E63806319F83AD" />
-      <ComponentRef Id="cmp15C7696A8C674672B37E17B47362007E" />
-      <ComponentRef Id="cmp7EEE0A4DF02E458C910EF847AA089810" />
-      <ComponentRef Id="cmp8695A6F4923144AA8718508338703A94" />
-      <ComponentRef Id="cmpF9D44A0B8AAB46608F02CD2753D456A6" />
-      <ComponentRef Id="cmpC1D0D334836C4821B04087DDFE167637" />
-      <ComponentRef Id="cmp8A4E5A03C2644F199C7395C8EA350F65" />
-      <ComponentRef Id="cmp34E774DA28624BD1A89866B9D80788C2" />
-      <ComponentRef Id="cmp75D079D2DE8545BB962554C7EFE6A37C" />
-      <ComponentRef Id="cmp5109AF6E6AEF499CA12097B6ADD80E7D" />
-      <ComponentRef Id="cmpD84D3B43B60040C8BF73D30F89F14AA5" />
-      <ComponentRef Id="cmpCC4657AEF2A7400D984E1CE6418EF589" />
-      <ComponentRef Id="cmp15F28BD2B7F14BA1896108C2807DF79A" />
-      <ComponentRef Id="cmpA27244FF28CB4A09917A26F8C2FCB073" />
-      <ComponentRef Id="cmp97FEAD2979114A7591659F2D1B1DDC26" />
-      <ComponentRef Id="cmpF12EA5F78013432C8B0FA4A74FCF0512" />
-      <ComponentRef Id="cmp8CAF71174AEF09BEBBC46FBC901FF5DD" />
-      <ComponentRef Id="cmp1C0D095085408CA5B6AE3C1FCDDC2080" />
-      <ComponentRef Id="cmpB613EB418AA14112BFFE06A1A9730300" />
-      <ComponentRef Id="cmpC383E1BDB1B24C2C9B966D56CD0B0B6C" />
-      <ComponentRef Id="cmpB0A0314309E042FFB372C46FCD3F7FE1" />
-      <ComponentRef Id="cmp0A8A1076B5AE48F08B8ACC94ADFF47D5" />
-      <ComponentRef Id="cmpCCD483BF49F440E4BCFE636AFA003952" />
-      <ComponentRef Id="cmp11B000987A334C608FFE4B05A75E9911" />
-      <ComponentRef Id="cmpE40EC088023743D686B67244829E7C80" />
-      <ComponentRef Id="cmp52B5DCF67F6541FCA4E5EC9AFAFDA243" />
-      <ComponentRef Id="cmp3B69477C65444471BFEA22BB68C3E7BF" />
-      <ComponentRef Id="cmp1F81BFEC090444E7970ABB24AEEA3025" />
-      <ComponentRef Id="cmp7B112D436F7A426CB85E9C0DFC3C84BB" />
-      <ComponentRef Id="cmpEC979AEEB8104AC38CC49A276A8E2BBA" />
-      <ComponentRef Id="cmp8A9BD4D7BCD84712BFE690F6873BF7EB" />
-      <ComponentRef Id="cmpBD96D1F1B1274971B8285118A4BBCF20" />
-      <ComponentRef Id="cmpF429A622BF26430592ECE6BFD1EBE61A" />
-      <ComponentRef Id="cmp38D8A48C68FB4CB399A0A7677FA428E4" />
-      <ComponentRef Id="cmp57D197B18F1F4A6AAB704B28CF61B535" />
-      <ComponentRef Id="cmpF2941A91B17EEA22CD6DAB34693D9AC0" />
-      <ComponentRef Id="cmp0E8354647101C56EF81E9BDB164B586E" />
-      <ComponentRef Id="cmpDCAA22865EF8486AB7526E046A51DBF6" />
-      <ComponentRef Id="cmpE672F066E28F4FF5B321F862BCC1FDC1" />
-      <ComponentRef Id="cmpDFFD2A0952764E5497B251723E548DAC" />
-      <ComponentRef Id="cmpA26B371BF2DD4B57B2921A355CA4949F" />
-      <ComponentRef Id="cmp7BA2717148D54825B44FFF294F0841B5" />
-      <ComponentRef Id="cmp5ECFFAA41BD543BE90669D4D1C276ED7" />
-      <ComponentRef Id="cmp69F9907759284AC68BE83207CE37B618" />
-      <ComponentRef Id="cmpDE367F1AE006450482BBBCF1761131DA" />
-      <ComponentRef Id="cmp40434DB1393A479299F4758D94282C47" />
-      <ComponentRef Id="cmpB5589E1EF9AF4ECCAE59F3330072CECD" />
-      <ComponentRef Id="cmpAFE9F438F120421D8CB6D25DE926A915" />
-      <ComponentRef Id="cmp314AE8812E0E4183BC9E211D1EB5151F" />
-      <ComponentRef Id="cmpE4DC02E957BC4B098FC855C9F5A72A9A" />
-      <ComponentRef Id="cmp79FFF94E23E14C96AB959B15243E5317" />
-      <ComponentRef Id="cmp775BF8C154D047B5AE4779F4AD2727BE" />
-      <ComponentRef Id="cmp9C5650D758FC401F8C785A0F979A9505" />
-      <ComponentRef Id="cmpB40EE0CC916B4928987F62F5909AE709" />
-      <ComponentRef Id="cmpBEB5F3CF75675537751F0D0B32125BF1" />
-      <ComponentRef Id="cmpFB3B0ED1FFF7496CAF70B2F12EBC5CAE" />
-      <ComponentRef Id="cmp726DCF2BD14F471AAE8C088A527A1B21" />
-      <ComponentRef Id="cmp3C199F9401234C618CA9E342954801FA" />
-      <ComponentRef Id="cmpAC7473E411B04BD38D966F888160A772" />
-      <ComponentRef Id="cmpD3BFE61FA5424231B1912FC72C904FCC" />
-      <ComponentRef Id="cmp95E2064A783C4CBCAB4BBA630B589903" />
-      <ComponentRef Id="cmpB2668BA64CA2477791BC6286CD24A50E" />
-      <ComponentRef Id="cmp3A12CAB5CFF44777893EC81472674E55" />
-      <ComponentRef Id="cmp7B06939B5D81479AA324E21D5D9C0879" />
-      <ComponentRef Id="cmp3C5A08D4F0E14CA1B02EB9CBE830E147" />
-      <ComponentRef Id="cmp8CA196E3B53A432895C18B112D7E2E46" />
-      <ComponentRef Id="cmp7090499F84C1462687231F42C81E5EAA" />
-      <ComponentRef Id="cmpC5C658163889470E968344A03675C655" />
-      <ComponentRef Id="cmp3ACDC079A6554BAE8B66A77989143900" />
-      <ComponentRef Id="cmp508F55959B024045ABD82D2137FD6FD2" />
-      <ComponentRef Id="cmpC6C53A5B540B4A3C9624A0D14D5A9790" />
-      <ComponentRef Id="cmp2868115863264407B40346B27ABE3E4D" />
-      <ComponentRef Id="cmpB944176DE7924A268269903DC0B5D510" />
-      <ComponentRef Id="cmp1DEB513A065956086898BCDACC5887B6" />
-      <ComponentRef Id="cmpBAF5257E7B0B1D023F465B43792BC250" />
-      <ComponentRef Id="cmp5C9DD1C2D13D443FBC9C74883439DD56" />
-      <ComponentRef Id="cmp5003BCC6CBC84D72AC58292B4C19AAE1" />
-      <ComponentRef Id="cmpB9CDE3CDF79F4656A9392DBD4466974D" />
-      <ComponentRef Id="cmpDF6EA43F33704C83AE346A0C8CF419EA" />
-      <ComponentRef Id="cmpCFD6D8A892A540AFB0DF04CE50092506" />
-      <ComponentRef Id="cmpAC7A48270F074FF688102DFEBC6A1C30" />
-      <ComponentRef Id="cmpEE81EEBADABB4C4780B0AD39910F3D59" />
-      <ComponentRef Id="cmpC041B8FD21674290BF801846B7F9EDCA" />
-      <ComponentRef Id="cmpA0220895EFDD4945B631AD15B0D710A1" />
-      <ComponentRef Id="cmp5C4EF2FA6E3D4F54840EDEA401372F84" />
-      <ComponentRef Id="cmp357B1BB2DA1242478313F8BA1011617B" />
-      <ComponentRef Id="cmpBBD6269085BF40E2A83C3462DBD71230" />
-      <ComponentRef Id="cmp2432BC382728406FA98A6EAC2A038F11" />
-      <ComponentRef Id="cmp96C4EA9D377044E3B5002E37D322B840" />
-      <ComponentRef Id="cmpCC41F040CB1B4D0487DD193036A9DD1A" />
-      <ComponentRef Id="cmp5359C8369744482FBB5D56CDF3FA0DB0" />
-      <ComponentRef Id="cmp7B5948A1A366409F99B871F0E772B945" />
-      <ComponentRef Id="cmp3EC91B8BF4282E77113321E5D1ED27B2" />
-      <ComponentRef Id="cmp6E798DAF34F45B4588AEA3E3F33A3FAE" />
-      <ComponentRef Id="cmpAF881D0D194F4D6984F92E8386E67445" />
-      <ComponentRef Id="cmp563F908E483C4F27A77016BDAD2EDB3D" />
-      <ComponentRef Id="cmpE21D33B37D174B1C839677DD631FF425" />
-      <ComponentRef Id="cmp4845622039D44CB09C42A4EAD5997AE6" />
-      <ComponentRef Id="cmp0F27C4A051AD48F69B9697CD53EBC180" />
-      <ComponentRef Id="cmp5976983B67E94E95BFA840B7673FA1AC" />
-      <ComponentRef Id="cmp65F87164EFD14FE1B37CFB0417F77239" />
-      <ComponentRef Id="cmp342ED1B2D685498099843E1748D943B8" />
-      <ComponentRef Id="cmp3406217305CB474DBEF9DDC38A89BAEA" />
-      <ComponentRef Id="cmp8CB3C72C95F340B59F8585E420E0EE34" />
-      <ComponentRef Id="cmp0C9189E094504D17AADC90A0590C4098" />
-      <ComponentRef Id="cmp681BDE25AB4A4AE2A46F3CC8549EC421" />
-      <ComponentRef Id="cmp36F8A55206284D31A0E4E2EF656BED80" />
-      <ComponentRef Id="cmp9DD64722ECDD4316A049FE9403EDF13B" />
-      <ComponentRef Id="cmpEB0B8586AAC24EACA2867506D39669C5" />
-      <ComponentRef Id="cmp11087C190382415AB1DC1DFBD78DF348" />
-      <ComponentRef Id="cmp28349C4ACD6D42D3967853E0A1D7DC4E" />
-      <ComponentRef Id="cmp867E4E51FE7BC09AAD5D59FD76716FBC" />
-      <ComponentRef Id="cmpD7A394A1A96413EC3644F59D3099C0F5" />
-      <ComponentRef Id="cmpA0A01F4E746F4F3C90E0AE3895336E24" />
-      <ComponentRef Id="cmp943B0951A6954B4D91327122857170FE" />
-      <ComponentRef Id="cmp20B997FC18D14E5B953B53E0750D2EC3" />
-      <ComponentRef Id="cmp605390BBEE6745A49D873E6086739DFC" />
-      <ComponentRef Id="cmp5E942D66FE754A7F85A9C52D90532B09" />
-      <ComponentRef Id="cmpAC7D6ED9EB5F4C898B45BEC98795B5E5" />
-      <ComponentRef Id="cmp8FBEE0AB1C3F4EE1B620BA7D90AD197A" />
-      <ComponentRef Id="cmp78644E05B1844431B7B7D0DDCE98EE1B" />
-      <ComponentRef Id="cmp09AE0992771647D5A12A95BF64C14842" />
-      <ComponentRef Id="cmp2808FB4A38C7470FAD14A0B1FE7D8614" />
-      <ComponentRef Id="cmp6EB4F2886A6D44ED86EF8BA6EC0C76A0" />
-      <ComponentRef Id="cmp0989D491D80945AEBE2D0B14EF2C53D7" />
-      <ComponentRef Id="cmp3B0221BF9E5B40A6A25133725C97C0BE" />
-      <ComponentRef Id="cmp5B81A85A71214050BAA934A0600B72FC" />
-      <ComponentRef Id="cmp58AA8F924CF74562A2D8A789B5EE8B97" />
-      <ComponentRef Id="cmp1F2C85D1488B417F9F8FD96EA4A4D8B4" />
-      <ComponentRef Id="cmp26335B5D1FE94E87A6B6EBD56A22C2B9" />
-      <ComponentRef Id="cmpAA026CCA623F0E8FB5BAE9F201C5B89D" />
-      <ComponentRef Id="cmp341C4F1E70E4484001218F1B20F62FCF" />
-      <ComponentRef Id="cmp52513C1A98FF4241AC3588CCB18C5A1F" />
-      <ComponentRef Id="cmpE8A3FFFA6AB24BB3BF2EA9E1BE13F9D9" />
-      <ComponentRef Id="cmpAC45507C7BE945598DBAD02373D0D82D" />
-      <ComponentRef Id="cmp05846E0102F147C8A80B984C00EA709E" />
-      <ComponentRef Id="cmpD837DBF784904FA4B057CE3BDCCACC45" />
-      <ComponentRef Id="cmp7B40B1D0FB9B4E7FA37BB4FF04CD3A9F" />
-      <ComponentRef Id="cmpB8FA7AEE0A824184B543ED2231870C79" />
-      <ComponentRef Id="cmp006DBAC58EB04099A3B6DD1A69981814" />
-      <ComponentRef Id="cmpDFB169026CE14CE78D686C69F2B2F6AB" />
-      <ComponentRef Id="cmp3986112FD28649AAB697E73E48295FA5" />
-      <ComponentRef Id="cmp1B309D09A58349A09BC60B35FCD982FF" />
-      <ComponentRef Id="cmp10D63BDD63C74483BB3F7AE952A15F90" />
-      <ComponentRef Id="cmp23882208476248C7AB4620CE9798AE41" />
-      <ComponentRef Id="cmpB1D9C50704A94049BEC21D82B629422A" />
-      <ComponentRef Id="cmpA3B2086013B5455D9D98B260493EC0B2" />
-      <ComponentRef Id="cmp0DA1B3EF85234C7BBA6DE35BBD1B45D2" />
-      <ComponentRef Id="cmpF4093A1E8AB94B43AB0F852EB647CE7F" />
-      <ComponentRef Id="cmpA656A18FE14D3C8EB02C31AE474054E3" />
-      <ComponentRef Id="cmp070651CCF2761B3EF1985884AEB8AC64" />
-      <ComponentRef Id="cmpFA35A2719CE343E1B41665922CC26AF4" />
-      <ComponentRef Id="cmp92FE1425A5C3437488DFF937ED362536" />
-      <ComponentRef Id="cmp9C02816788B44B1CB100811D19BA3ADE" />
-      <ComponentRef Id="cmpD18D7B06C3604A4D90ABBA00DA2742D1" />
-      <ComponentRef Id="cmp1469F199504F43C5914855EE7222694E" />
-      <ComponentRef Id="cmpFF0C05BA6D6341B19AC50624149E4968" />
-      <ComponentRef Id="cmpA86EE53E9AA84A57B04BFD111DED040F" />
-      <ComponentRef Id="cmpA79EE6F8324F4882B557E5E422DB3B08" />
-      <ComponentRef Id="cmp0609FD4FBFAA42BB98ACEC3DAD272250" />
-      <ComponentRef Id="cmpD8729C86F9C147E49F6E5CE1257D90F8" />
-      <ComponentRef Id="cmp2292153B8973431495971341E8F576A3" />
-      <ComponentRef Id="cmpE57BDA25049143CEB30225B89C33DF7E" />
-      <ComponentRef Id="cmpBA83057401A44CF2A357203F266DAD18" />
-      <ComponentRef Id="cmpC2EF4DEECCAB41CDBEF1F7898B11D2C1" />
-      <ComponentRef Id="cmp74681822D78E49DB9E42A990DFDFB3A9" />
-      <ComponentRef Id="cmpC3357D2F892347769141A20222683855" />
-      <ComponentRef Id="cmp705598FEC8EA43D7A9B239787BA5DB09" />
-      <ComponentRef Id="cmp3D20E940BDBF41630242C63011A80CE5" />
-      <ComponentRef Id="cmp7C2E3035EE02569D9F11970586140F28" />
-      <ComponentRef Id="cmp1E40E7911F29449487A42C55FFF9679B" />
-      <ComponentRef Id="cmp25C8E163A5CF4460A30E08E77377C186" />
-      <ComponentRef Id="cmp0892A230934B409C978C37CC1F723F72" />
-      <ComponentRef Id="cmp03BBEB6A73524059AE3127C2459B0E8C" />
-      <ComponentRef Id="cmp64227EAAFB4341F28C1C336EF2115CF0" />
-      <ComponentRef Id="cmpAFC98D1BEA00465EAB4FE98048BCB524" />
-      <ComponentRef Id="cmpFB67E13817E74DE589F3FB2C725A027C" />
-      <ComponentRef Id="cmpD90C20974091429AB92010686A5797C6" />
-      <ComponentRef Id="cmp2A02E0C767614AFBB44ACD74ADE6602C" />
-      <ComponentRef Id="cmpFA2B7ADD05AB424DA22270C1FB2A018A" />
-      <ComponentRef Id="cmpDE45B1443480407E82C1D3B1B73144FE" />
-      <ComponentRef Id="cmpE4F5B1CD375345E8A41B1DC59FA03733" />
-      <ComponentRef Id="cmp57A297132232472BA9AF7B8A5B16CF8F" />
-      <ComponentRef Id="cmp765A784AADA742928B4E6376ABB7EF28" />
-      <ComponentRef Id="cmp6A48FC0DE86C41C297EC418A0E49CA2C" />
-      <ComponentRef Id="cmp213F9BA38ED149468C656788A7ED847D" />
-      <ComponentRef Id="cmpFAA0CCBA17FE4E8FAE5FE4B5F679DF52" />
-      <ComponentRef Id="cmpFDCD51BD80926ABECCE27D0D66A47C8F" />
-      <ComponentRef Id="cmp85FE3DB247B4FB3E04D8E4CED6D66853" />
-      <ComponentRef Id="cmp50F3BA81002D443DBD8AA4A4A494A37D" />
-      <ComponentRef Id="cmpF615667140B44D6BB380D215D17FF982" />
-      <ComponentRef Id="cmpACAC7E20898E4F51999C09E9980FAB46" />
-      <ComponentRef Id="cmp53B914C6F5CE4FFE8CFCFB9F2408BA9E" />
-      <ComponentRef Id="cmp222A8A32083347E68BA8B2258B6E3C82" />
-      <ComponentRef Id="cmp6E116504475844D7810236B408748E80" />
-      <ComponentRef Id="cmp48D158C7B6A54EE7A5983261703DFE01" />
-      <ComponentRef Id="cmpEDAFC1B93B524FFB8B55290B8FBBE372" />
-      <ComponentRef Id="cmpA9B28198505F41D1967A688AB23EC28A" />
-      <ComponentRef Id="cmp045539C3A5384CE28015F348A4F09D39" />
-      <ComponentRef Id="cmp65F4B635858F4F88B69E04F030391A0A" />
-      <ComponentRef Id="cmp69440F288C96457FBD519A2DB86C8376" />
-      <ComponentRef Id="cmpB805F2C3F3834D14BB5F30A53C118AA8" />
-      <ComponentRef Id="cmpEF934403BB624B1681CEE8EC4F647ED0" />
-      <ComponentRef Id="cmp38EEEBD629164D8FA34DBE11D92B5712" />
-      <ComponentRef Id="cmp4CCDE73A2A9E4D7B90065639D9433178" />
-      <ComponentRef Id="cmpA6FA5B27C61E482D8BBC5F1806D3B223" />
-      <ComponentRef Id="cmp286FCD0B19BF06446A7274672A2491CA" />
-      <ComponentRef Id="cmp137236E8DF48EE210ABFCB127CC1E46C" />
-      <ComponentRef Id="cmpBA1EE6DA3429452BA3A1F3428C9CC942" />
-      <ComponentRef Id="cmpC9064EF7E4D0429FB3B3B22852DE09E9" />
-      <ComponentRef Id="cmpEDD4BBB46F0F405F9D03F23AD540F006" />
-      <ComponentRef Id="cmp5CB558FECF2F40699DC54E212C849E5E" />
-      <ComponentRef Id="cmp2F888F24537C4A59B8DE0D9600ED5F86" />
-      <ComponentRef Id="cmp3F0494AB0EA8424C8C45C8421364B695" />
-      <ComponentRef Id="cmp982D240D3FB34B909262D8C6D345C0B4" />
-      <ComponentRef Id="cmp92D157C1F70440D8B756ECA2D5DAA438" />
-      <ComponentRef Id="cmp98C7914B7566416399FC4044406DC8FD" />
-      <ComponentRef Id="cmpB6F9506FF8354967BAA44CA355DC3744" />
-      <ComponentRef Id="cmpAD21451B9D2D4041A4A45B5A4042ED72" />
-      <ComponentRef Id="cmp6EB2D4D29151472CA5986604550925E8" />
-      <ComponentRef Id="cmpD7B579B9623C48F9B3F856BFA2CC9DDA" />
-      <ComponentRef Id="cmp1B4A1C6FA53649D4B212D2BA8799DEF6" />
-      <ComponentRef Id="cmp363CFDFE64D94C5693BAB14FCD5FE78C" />
-      <ComponentRef Id="cmpA34D56794B9144A2BE67E7CDABCF5B4E" />
-      <ComponentRef Id="cmp10773057C33543FA93222022DEC0847D" />
-      <ComponentRef Id="cmp34C4A21743AC68583599BF2B139F39F2" />
-      <ComponentRef Id="cmp2AB68868B57E7E15FCD69157375E39D1" />
-      <ComponentRef Id="cmpBCFD31F785CB4246B79A3208D566B2F2" />
-      <ComponentRef Id="cmpBA0B694FCB414A309DED50D5F7EDD3CB" />
-      <ComponentRef Id="cmp3E8122E901C340EC8105AAA703A53028" />
-      <ComponentRef Id="cmpA3101B8D27104CE69ECC6B171DAD8029" />
-      <ComponentRef Id="cmpB0ECA461CD6F469DA406C017FDF59388" />
-      <ComponentRef Id="cmpAAAC7B2B254F458298E4204BDE6B2299" />
-      <ComponentRef Id="cmp5707C260CC90438390E14836697DFC16" />
-      <ComponentRef Id="cmp413F9654B54945B1A1EAF7A47CFFF045" />
-      <ComponentRef Id="cmpE6DE2ABACF3E47ADB4734AF8F4831528" />
-      <ComponentRef Id="cmpF9F3FA55774C412A83157FA1E64D44E2" />
-      <ComponentRef Id="cmp3418E005ECC646A8AD5C0467397185E8" />
-      <ComponentRef Id="cmp19DB395024234D64B015F638FCDA8C5A" />
-      <ComponentRef Id="cmp54EE3E452F8341E69DE045A2DB941DEE" />
-      <ComponentRef Id="cmp99F588E14200498095845D1AB84D70D8" />
-      <ComponentRef Id="cmp119D48233B3B479FBD8222BA060D65EB" />
-      <ComponentRef Id="cmpEC0DB2C3A9C14F4E9FC6883357345CB5" />
-      <ComponentRef Id="cmp33364765C98D4BE09BD26DC1E6B95B86" />
-      <ComponentRef Id="cmpBC28FE8B65954B00AECA9C534639596D" />
-      <ComponentRef Id="cmp16789176DD8EDBC99C26E1230DB2BDDF" />
-      <ComponentRef Id="cmpBC7156375AC544C890A2F93727161B79" />
-      <ComponentRef Id="cmp88E7CBE227AA402FACE236425367D365" />
-      <ComponentRef Id="cmpB08DEC89033A41A1B3BA276C39DB53C7" />
-      <ComponentRef Id="cmp44E870C6783F49808E78EEAB3CCCAEB9" />
-      <ComponentRef Id="cmp49BBAD244F0046C7ACB8CE4356300EE1" />
-      <ComponentRef Id="cmp1E21C2E7CAF54358AE80B36CE715AAD3" />
-      <ComponentRef Id="cmpAC2613BBBA934B3C9D8C6DB1B27AA153" />
-      <ComponentRef Id="cmpB0757B4B80DB48F2BD94AB74A9CE3487" />
-      <ComponentRef Id="cmp905E602506DA4B39ADA617E8AE43E12B" />
-      <ComponentRef Id="cmpCF69FB22CA5B47A7BBC959539C7EC653" />
-      <ComponentRef Id="cmpC556E2BCBE01491FAE1A9A0D5D8C49DF" />
-      <ComponentRef Id="cmpE7A74EB67E6547BA97B4595A81B07469" />
-      <ComponentRef Id="cmpC09D113904964EE3BD16432420700754" />
-      <ComponentRef Id="cmp244BB402C6594640A3E77A079235EFDB" />
-      <ComponentRef Id="cmp7E10BA8A64E1482BAD717A0A3DC0746E" />
-      <ComponentRef Id="cmpD8CDC1F864664A33B6221A40F2BE8406" />
-      <ComponentRef Id="cmpB9B22A80E70F414B8778B852E29D6492" />
-      <ComponentRef Id="cmp8A3254D57ABF4F828B08648187233EE4" />
-      <ComponentRef Id="cmpC29B22A77B6341C88E4D6CD2876F3BCF" />
-      <ComponentRef Id="cmpCBC6AAA9CB644B3C8FFE80E2339C8C62" />
-      <ComponentRef Id="cmp5BFA44F5B74B46108EBB2F57D9A07C5A" />
-      <ComponentRef Id="cmp938E195A5A3343D0B7092FC1A81A88CF" />
-      <ComponentRef Id="cmp919C208B21E5491AB8084E7EB6EFF1BF" />
-      <ComponentRef Id="cmp61A4B0CCC6F94329ADEAA1D04510D5FB" />
-      <ComponentRef Id="cmp74112210347249D1ADA863B0C1A12EC0" />
-      <ComponentRef Id="cmp7C1B3589F57247588C2F554AE79034DF" />
-      <ComponentRef Id="cmp8779DE02612345D2B990111B5F741951" />
-      <ComponentRef Id="cmp596F984C35BF43248CFC5AE259623CD6" />
-      <ComponentRef Id="cmpD7D9163B701E43CDAA5B680BFEC734C0" />
-      <ComponentRef Id="cmp3F3D5158AF2540C68C6C7B419E336405" />
-      <ComponentRef Id="cmp2AA555A528ED455E9BE4CD671131EAC8" />
-      <ComponentRef Id="cmp738AF9ECCDB14F12A8136DEDD1F619F8" />
-      <ComponentRef Id="cmp9DD54CCB1A1940C9A686F56231B0D7A0" />
-      <ComponentRef Id="cmp5B64C3BEB8614B7D8ABF9F98776BA799" />
-      <ComponentRef Id="cmp8943E1C081C443608960F88006055670" />
-      <ComponentRef Id="cmp1CB45D745B7947098A2E8CFF89692106" />
-      <ComponentRef Id="cmp341278D0E5674EB7A0AA8D692B09C2DA" />
-      <ComponentRef Id="cmp80D2B2F1503D480482AB6356D8239F1A" />
-      <ComponentRef Id="cmp702A1A95334640599D929176921C3AA5" />
-      <ComponentRef Id="cmpE69FC94442424AEAB7BF8D668BE67881" />
-      <ComponentRef Id="cmpDBEB4CA15AED41EAAB3B9999FFB49688" />
-      <ComponentRef Id="cmpA9398651278B48A98281D4B1B99C0E02" />
-      <ComponentRef Id="cmp71BD297E5534459C9FF0BD2BD5044E8A" />
-      <ComponentRef Id="cmp2748DD46812C4D7AA23B87131BCA7D28" />
-      <ComponentRef Id="cmpBEF1E51AC0E14994B91C0398A0BF9904" />
-      <ComponentRef Id="cmpF30399B31BE94323965E5F370AE61D27" />
-      <ComponentRef Id="cmpEA734D5F73C1432E90C366FDB61BE1DA" />
-      <ComponentRef Id="cmp8623E722E9D44FC996DCC6AD0AFDA57B" />
-      <ComponentRef Id="cmpD1B75039FF9C4808A85D5BFDD347E301" />
-      <ComponentRef Id="cmpB2D8BB205E49421986D61C5F50AFF4CD" />
-      <ComponentRef Id="cmp3E7AA76F03A7499C96340C43F8A7F52B" />
-      <ComponentRef Id="cmp72416C747AFD4A86B9FB7D14C5C4C914" />
-      <ComponentRef Id="cmp2B3F4044A01F4D9AB1DBBAD2FD04317A" />
-      <ComponentRef Id="cmp16CCB478028E417BB140252B720E8AEA" />
-      <ComponentRef Id="cmp91FE8D0C1EC44675AC81705C6A5B66A6" />
-      <ComponentRef Id="cmpC1DC107C17E8409BBFC2CF1849675BEF" />
-      <ComponentRef Id="cmpF6921505E7C9477683A779DA28A0D73F" />
-      <ComponentRef Id="cmpF7D3AB1CDBDA478E9DD4EE01D13F0D64" />
-      <ComponentRef Id="cmp6637048AC3FB4E08B5EC5524D1049C0E" />
-      <ComponentRef Id="cmp6942D13F8BCA457199ADF6D24C622535" />
-      <ComponentRef Id="cmpA755C122F0E54D55BBC227136068C3EF" />
-      <ComponentRef Id="cmpDF9A1285EC8A4A64BF8D7813045B2F82" />
-      <ComponentRef Id="cmp5375DD3BDBDE473D93DC0220CFD32C56" />
-      <ComponentRef Id="cmp971F90C668FF411D81C0AC713071B122" />
-      <ComponentRef Id="cmp1BDAEA2C73954218ADCCF9940268D075" />
-      <ComponentRef Id="cmpCF148C092F4048CD811CE8815D3E8E5A" />
-      <ComponentRef Id="cmp02F7C2D6E9BF46F386EF83D4CF166EC6" />
-      <ComponentRef Id="cmpED253ABCC1354C58A65CD4D41F7ABB3A" />
-      <ComponentRef Id="cmp074868368CB24A33962BC4DB7B809C4F" />
-      <ComponentRef Id="cmpFF8643F8CC97462CAC20815F6071203B" />
-      <ComponentRef Id="cmp0FC1F6198C66492495785315CDEE0B66" />
-      <ComponentRef Id="cmp41E9A7E0470540228A69F13F8585089E" />
-      <ComponentRef Id="cmp8E8AE88416D44A4CA39F23E9C825A899" />
-      <ComponentRef Id="cmpE5F62B056F174A3E8843DFE8B70E3AA9" />
-      <ComponentRef Id="cmp30126C60BD784974B74EA45AE9B04032" />
-      <ComponentRef Id="cmp9EC1507780D247E095EA92A7715B4BAC" />
-      <ComponentRef Id="cmpF2634E50875D4698921081E3C6B1D5DC" />
-      <ComponentRef Id="cmpBFAC308E2D8645278D61C126C0FC2C61" />
-      <ComponentRef Id="cmp8F0E2CF1B76B4D5185CB6A8DB9236F93" />
-      <ComponentRef Id="cmp14EA1CB2EC4E4B1DB7F7968B5B3D8E16" />
-      <ComponentRef Id="cmpF543DDEF59CB4ACB85CBC9A106BD853D" />
-      <ComponentRef Id="cmp3002312C17174D51B6DAFF6EFE5854E3" />
-      <ComponentRef Id="cmp011004AE1CF04BEBBAD8B831F844C045" />
-      <ComponentRef Id="cmpA1BA99196E3645448F2061091FD85C4A" />
-      <ComponentRef Id="cmpF98969464485476CB2FC4A4A20F1AC9E" />
-      <ComponentRef Id="cmp5B5FA4F5288D4C7B97F0D41B0EBAF12A" />
-      <ComponentRef Id="cmp2F1EA86BD90A469DB868B466999D71C0" />
-      <ComponentRef Id="cmpA0542E4F67194E91BAB2FE91697CAEA3" />
-      <ComponentRef Id="cmp4880742338E943CDBCA481376873C8DC" />
-      <ComponentRef Id="cmpC388B16EC4464F8F8C819D1A9D99824D" />
-      <ComponentRef Id="cmpA1FA9A81833844D18D133D4FEE5D6B5A" />
-      <ComponentRef Id="cmp95D1BC4C00E64F78A2C5B40075E493B0" />
-      <ComponentRef Id="cmp2D61DA909BC442A8BACD501B38408E52" />
-      <ComponentRef Id="cmp6AEAD5F33F7F4AA9BF1AB6BB9708636B" />
-      <ComponentRef Id="cmpA15A8CCD78F940AF99F2C5CA1CFAD3FE" />
-      <ComponentRef Id="cmpDF56DFBA73884C26B4C07A15936B2076" />
-      <ComponentRef Id="cmp12382F83133C400283C98B48381BCF7A" />
-      <ComponentRef Id="cmp316AABD96F1A4600B99538AA71521C76" />
-      <ComponentRef Id="cmpC1523F3EAD484C3DB1DD835494115EFB" />
-      <ComponentRef Id="cmpA4CDD4483F404076AAE7073E39F81864" />
-      <ComponentRef Id="cmpF1A62553B9D547E08E23692770D7D794" />
-      <ComponentRef Id="cmp843475DEC861425782658C079229E7FE" />
-      <ComponentRef Id="cmpA98828498CE3461BABE23DDD9990F57C" />
-      <ComponentRef Id="cmpDEE7C0BADEA14B9A9AFFD4C9BF4E7702" />
-      <ComponentRef Id="cmp10ABC7FB464B42FCA1EDEC7015AFEDCF" />
-      <ComponentRef Id="cmp930F2D2320B94F6397ECD91862AF7A90" />
-      <ComponentRef Id="cmp5C8827EF42BE4C098EF08EBD4011DA47" />
-      <ComponentRef Id="cmp6C0567CC32E4457A8F2D03C6E7F5897E" />
-      <ComponentRef Id="cmp18A181D71C894FBE96F4A3563213DC57" />
-      <ComponentRef Id="cmp1C666476BE6044B4B8C74450F1F32E67" />
-      <ComponentRef Id="cmp0CC3F419123C4E9487ABEE124AE45D34" />
-      <ComponentRef Id="cmp21FDC39039A64652845AE15C255678EF" />
-      <ComponentRef Id="cmpCE991A76187F47148F1854BC02E3524E" />
-      <ComponentRef Id="cmpAD1A205D445C43588868B205091DD390" />
-      <ComponentRef Id="cmpD7A187ADE66347E5A7550B96BA10D493" />
-      <ComponentRef Id="cmp827B25EEC28D4699BB29042B273C8CBF" />
-      <ComponentRef Id="cmpECBD8DFB18AD451AB3D81803DECC13BF" />
-      <ComponentRef Id="cmp01B3850D6E55468AA84B758FDE8CA59E" />
-      <ComponentRef Id="cmpF6FDA6202E9D4CEF9F21A23D32571BFC" />
-      <ComponentRef Id="cmp73A4CC8E2C9E4594A3D8258C9E00D7E6" />
-      <ComponentRef Id="cmpAC984FA3A67247BC996F60290C87D0A1" />
-      <ComponentRef Id="cmp2E32A6E773F543F0A150B972F8D3E23A" />
-      <ComponentRef Id="cmp874F51885AE34AD9AA37DC46A44B3194" />
-      <ComponentRef Id="cmp798A4EE6784541FE9B13582E52C5A818" />
-      <ComponentRef Id="cmpBB705B2570064C99A71B6FA65CDF9DC8" />
-      <ComponentRef Id="cmpE9599A00802144DF98F5792E029C8875" />
-      <ComponentRef Id="cmp0989343D60B74AF082291F612F0E6FA6" />
-      <ComponentRef Id="cmp72C41225E0B4457C8CB5F4C5FE6E3187" />
-      <ComponentRef Id="cmp0BD7D15E0377407FA4C43BFE89F0C12E" />
-      <ComponentRef Id="cmpC0FFB3F4FB30438082D2DC0F4E4BF12D" />
-      <ComponentRef Id="cmp1EBDE676D79B4B0DB859B3F601D78513" />
-      <ComponentRef Id="cmpB92B70CEFC2F438386F97264FB436CDD" />
-      <ComponentRef Id="cmp49588B1BA09F4BBCA352B162F387AAF1" />
-      <ComponentRef Id="cmpEE26930D65E346FDAE1B3E07F5DBEF77" />
-      <ComponentRef Id="cmp8635213A03B04AAE8E1BFB7EA85E0DB2" />
-      <ComponentRef Id="cmp834F3E0C83664E92B0D115A39A8FAACB" />
-      <ComponentRef Id="cmp2BB002B115C247FFB3353C80CAAC10B3" />
-      <ComponentRef Id="cmp68158D010ECB439582D041355BFACCBB" />
-      <ComponentRef Id="cmp3547A55EA9D04784B4CF2FC717447E16" />
-      <ComponentRef Id="cmp5FDF8631A090425A90B27344B4C2A62A" />
-    </ComponentGroup>
-  </Fragment>
-</Wix>
diff --git a/assets/wix/patch-template.wxs b/assets/wix/patch-template.wxs
deleted file mode 100644
index bde47a93f4e..00000000000
--- a/assets/wix/patch-template.wxs
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-    <Patch 
-        AllowRemoval="yes"
-        Manufacturer="Microsoft Powershell" 
-        MoreInfoURL="https://github.com/powershell/powershell"
-        DisplayName="Sample Patch" 
-        Description="Small Update Patch" 
-        Classification="Update"
-        >
- 
-        <Media Id="5000" Cabinet="RTM.cab">
-            <PatchBaseline Id="RTM"/>
-        </Media>
- 
-        <PatchFamilyRef Id="SamplePatchFamily"/>
-    </Patch>
- 
-    <Fragment>    
-        <PatchFamily Id='SamplePatchFamily' Version='6.1.1' Supersede='yes'>
-            <PropertyRef Id="ProductVersion"/>
-        </PatchFamily>
-    </Fragment>
-</Wix>
diff --git a/build.psm1 b/build.psm1
index 690b8684f68..d4d1f002fe3 100644
--- a/build.psm1
+++ b/build.psm1
@@ -2,18 +2,27 @@
 # Licensed under the MIT License.
 
 param(
-    # Skips a check that prevents building PowerShell on unsupported Linux distributions
+    # Skips a check that prevents building PowerShell on unsupported Linux distributions.
     [parameter(Mandatory = $false)][switch]$SkipLinuxDistroCheck = $false
 )
 
+. "$PSScriptRoot\tools\buildCommon\startNativeExecution.ps1"
+
+# CI runs with PowerShell 5.0, so don't use features like ?: && ||
 Set-StrictMode -Version 3.0
 
-# On Unix paths is separated by colon
+# On Unix paths is separated by colon.
 # On Windows paths is separated by semicolon
 $script:TestModulePathSeparator = [System.IO.Path]::PathSeparator
 $script:Options = $null
 
-$dotnetCLIChannel = $(Get-Content $PSScriptRoot/DotnetRuntimeMetadata.json | ConvertFrom-Json).Sdk.Channel
+$dotnetMetadata = Get-Content $PSScriptRoot/DotnetRuntimeMetadata.json | ConvertFrom-Json
+$dotnetCLIChannel = $dotnetMetadata.Sdk.Channel
+$dotnetCLIQuality = $dotnetMetadata.Sdk.Quality
+# __DOTNET_RUNTIME_FEED and __DOTNET_RUNTIME_FEED_KEY are private variables used in release builds
+$dotnetAzureFeed = if ([string]::IsNullOrWhiteSpace($env:__DOTNET_RUNTIME_FEED)) { $dotnetMetadata.Sdk.azureFeed } else { $env:__DOTNET_RUNTIME_FEED }
+$dotnetAzureFeedSecret = $env:__DOTNET_RUNTIME_FEED_KEY
+$dotnetSDKVersionOveride = $dotnetMetadata.Sdk.sdkImageOverride
 $dotnetCLIRequiredVersion = $(Get-Content $PSScriptRoot/global.json | ConvertFrom-Json).Sdk.Version
 
 # Track if tags have been sync'ed
@@ -26,19 +35,36 @@ $tagsUpToDate = $false
 # This function is used during the setup phase in tools/ci.psm1
 function Sync-PSTags
 {
+    <#
+    .SYNOPSIS
+        Syncs git tags from the PowerShell/PowerShell upstream remote.
+    .DESCRIPTION
+        Ensures that tags from the PowerShell/PowerShell upstream remote have been fetched.
+        Functions like Get-PSCommitId and Get-PSLatestTag require tags to be current.
+        This is called during the setup phase in tools/ci.psm1.
+    .PARAMETER AddRemoteIfMissing
+        If specified, adds the upstream remote automatically when it is not present.
+    #>
     param(
         [Switch]
         $AddRemoteIfMissing
     )
 
-    $PowerShellRemoteUrl = "https://github.com/PowerShell/PowerShell.git"
+    $powerShellRemoteUrls = @(
+        'https://github.com/PowerShell/PowerShell'
+        'git@github.com:PowerShell/PowerShell'
+    )
+    $defaultRemoteUrl = "$($powerShellRemoteUrls[0]).git"
+
     $upstreamRemoteDefaultName = 'upstream'
     $remotes = Start-NativeExecution {git --git-dir="$PSScriptRoot/.git" remote}
     $upstreamRemote = $null
     foreach($remote in $remotes)
     {
         $url = Start-NativeExecution {git --git-dir="$PSScriptRoot/.git" remote get-url $remote}
-        if($url -eq $PowerShellRemoteUrl)
+        if ($url.EndsWith('.git')) { $url = $url.Substring(0, $url.Length - 4) }
+
+        if($url -in $powerShellRemoteUrls)
         {
             $upstreamRemote = $remote
             break
@@ -47,12 +73,12 @@ function Sync-PSTags
 
     if(!$upstreamRemote -and $AddRemoteIfMissing.IsPresent -and $remotes -notcontains $upstreamRemoteDefaultName)
     {
-        $null = Start-NativeExecution {git --git-dir="$PSScriptRoot/.git" remote add $upstreamRemoteDefaultName $PowerShellRemoteUrl}
+        $null = Start-NativeExecution {git --git-dir="$PSScriptRoot/.git" remote add $upstreamRemoteDefaultName $defaultRemoteUrl}
         $upstreamRemote = $upstreamRemoteDefaultName
     }
     elseif(!$upstreamRemote)
     {
-        Write-Error "Please add a remote to PowerShell\PowerShell.  Example:  git remote add $upstreamRemoteDefaultName $PowerShellRemoteUrl" -ErrorAction Stop
+        Write-Error "Please add a remote to PowerShell\PowerShell.  Example:  git remote add $upstreamRemoteDefaultName $defaultRemoteUrl" -ErrorAction Stop
     }
 
     $null = Start-NativeExecution {git --git-dir="$PSScriptRoot/.git" fetch --tags --quiet $upstreamRemote}
@@ -62,6 +88,15 @@ function Sync-PSTags
 # Gets the latest tag for the current branch
 function Get-PSLatestTag
 {
+    <#
+    .SYNOPSIS
+        Gets the latest git tag reachable from the current HEAD.
+    .DESCRIPTION
+        Returns the most recent annotated git tag. Run Sync-PSTags first to ensure tags
+        are up to date; otherwise a warning is emitted.
+    .OUTPUTS
+        System.String. The latest tag string, e.g. 'v7.5.0'.
+    #>
     [CmdletBinding()]
     param()
     # This function won't always return the correct value unless tags have been sync'ed
@@ -76,6 +111,17 @@ function Get-PSLatestTag
 
 function Get-PSVersion
 {
+    <#
+    .SYNOPSIS
+        Returns the PowerShell version string for the current commit.
+    .DESCRIPTION
+        Derives the version from the latest git tag, optionally omitting the commit-ID suffix.
+    .PARAMETER OmitCommitId
+        When specified, returns only the bare version (e.g. '7.5.0') from the latest tag,
+        without the commit-count and hash suffix appended by git describe.
+    .OUTPUTS
+        System.String. A version string such as '7.5.0' or '7.5.0-15-gabcdef1234'.
+    #>
     [CmdletBinding()]
     param(
         [switch]
@@ -93,6 +139,16 @@ function Get-PSVersion
 
 function Get-PSCommitId
 {
+    <#
+    .SYNOPSIS
+        Returns the PowerShell commit-ID string produced by git describe.
+    .DESCRIPTION
+        Returns the full git describe string including the tag, number of commits since
+        the tag, and the abbreviated commit hash (e.g. 'v7.5.0-15-gabcdef1234567890').
+        Run Sync-PSTags first; otherwise a warning is emitted.
+    .OUTPUTS
+        System.String. A git describe string such as 'v7.5.0-15-gabcdef1234567890'.
+    #>
     [CmdletBinding()]
     param()
     # This function won't always return the correct value unless tags have been sync'ed
@@ -107,6 +163,19 @@ function Get-PSCommitId
 
 function Get-EnvironmentInformation
 {
+    <#
+    .SYNOPSIS
+        Collects information about the current operating environment.
+    .DESCRIPTION
+        Returns a PSCustomObject containing OS-identity flags, architecture, admin status,
+        NuGet package root paths, and Linux distribution details. The object is used
+        throughout the build module to make platform-conditional decisions.
+    .OUTPUTS
+        System.Management.Automation.PSCustomObject. An object with properties such as
+        IsWindows, IsLinux, IsMacOS, IsAdmin, OSArchitecture, and distribution-specific flags
+        (IsUbuntu, IsDebian, IsRedHatFamily, etc.).
+    #>
+    param()
     $environment = @{'IsWindows' = [System.Environment]::OSVersion.Platform -eq [System.PlatformID]::Win32NT}
     # PowerShell will likely not be built on pre-1709 nanoserver
     if ('System.Management.Automation.Platform' -as [type]) {
@@ -122,7 +191,8 @@ function Get-EnvironmentInformation
     if ($environment.IsWindows)
     {
         $environment += @{'IsAdmin' = (New-Object Security.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)}
-        $environment += @{'nugetPackagesRoot' = "${env:USERPROFILE}\.nuget\packages"}
+        $environment += @{'nugetPackagesRoot' = "${env:USERPROFILE}\.nuget\packages", "${env:NUGET_PACKAGES}"}
+        $environment += @{ 'OSArchitecture' = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture }
     }
     else
     {
@@ -133,12 +203,17 @@ function Get-EnvironmentInformation
         $environment += @{'UsingHomebrew' = [bool](Get-Command brew -ErrorAction ignore)}
         $environment += @{'UsingMacports' = [bool](Get-Command port -ErrorAction ignore)}
 
+        $environment += @{
+            'OSArchitecture' = if ((uname -v) -match 'ARM64') { 'arm64' } else { 'x64' }
+        }
+
         if (-not($environment.UsingHomebrew -or $environment.UsingMacports)) {
             throw "Neither Homebrew nor MacPorts is installed on this system, visit https://brew.sh/ or https://www.macports.org/ to continue"
         }
     }
 
     if ($environment.IsLinux) {
+        $environment += @{ 'OSArchitecture' = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture }
         $LinuxInfo = Get-Content /etc/os-release -Raw | ConvertFrom-StringData
         $lsb_release = Get-Command lsb_release -Type Application -ErrorAction Ignore | Select-Object -First 1
         if ($lsb_release) {
@@ -157,6 +232,8 @@ function Get-EnvironmentInformation
         $environment += @{'IsUbuntu16' = $environment.IsUbuntu -and $LinuxInfo.VERSION_ID -match '16.04'}
         $environment += @{'IsUbuntu18' = $environment.IsUbuntu -and $LinuxInfo.VERSION_ID -match '18.04'}
         $environment += @{'IsUbuntu20' = $environment.IsUbuntu -and $LinuxInfo.VERSION_ID -match '20.04'}
+        $environment += @{'IsUbuntu22' = $environment.IsUbuntu -and $LinuxInfo.VERSION_ID -match '22.04'}
+        $environment += @{'IsUbuntu24' = $environment.IsUbuntu -and $LinuxInfo.VERSION_ID -match '24.04'}
         $environment += @{'IsCentOS' = $LinuxInfo.ID -match 'centos' -and $LinuxInfo.VERSION_ID -match '7'}
         $environment += @{'IsFedora' = $LinuxInfo.ID -match 'fedora' -and $LinuxInfo.VERSION_ID -ge 24}
         $environment += @{'IsOpenSUSE' = $LinuxInfo.ID -match 'opensuse'}
@@ -169,6 +246,7 @@ function Get-EnvironmentInformation
         $environment += @{'IsRedHatFamily' = $environment.IsCentOS -or $environment.IsFedora -or $environment.IsRedHat}
         $environment += @{'IsSUSEFamily' = $environment.IsSLES -or $environment.IsOpenSUSE}
         $environment += @{'IsAlpine' = $LinuxInfo.ID -match 'alpine'}
+        $environment += @{'IsMariner' = $LinuxInfo.ID -match 'mariner' -or $LinuxInfo.ID -match 'azurelinux'}
 
         # Workaround for temporary LD_LIBRARY_PATH hack for Fedora 24
         # https://github.com/PowerShell/PowerShell/issues/2511
@@ -182,7 +260,8 @@ function Get-EnvironmentInformation
             $environment.IsUbuntu -or
             $environment.IsRedHatFamily -or
             $environment.IsSUSEFamily -or
-            $environment.IsAlpine)
+            $environment.IsAlpine -or
+            $environment.IsMariner)
         ) {
             if ($SkipLinuxDistroCheck) {
                 Write-Warning "The current OS : $($LinuxInfo.ID) is not supported for building PowerShell."
@@ -252,7 +331,59 @@ function Test-IsReleaseCandidate
     return $false
 }
 
+$optimizedFddRegex = 'fxdependent-(linux|win|win7|osx)-(x64|x86|arm64|arm)'
+
 function Start-PSBuild {
+    <#
+    .SYNOPSIS
+        Builds PowerShell from source using dotnet publish.
+    .DESCRIPTION
+        Compiles the PowerShell source tree for the specified runtime and configuration.
+        Optionally restores NuGet packages, regenerates resources, generates the type catalog,
+        and restores Gallery modules. Saves build options so subsequent commands can reuse them.
+    .PARAMETER StopDevPowerShell
+        Stops any running dev pwsh process before building to prevent file-in-use errors.
+    .PARAMETER Restore
+        Forces NuGet package restore even when packages already exist.
+    .PARAMETER Output
+        Path to the output directory. Defaults to the standard build location.
+    .PARAMETER ResGen
+        Regenerates C# bindings for resx resource files before building.
+    .PARAMETER TypeGen
+        Regenerates the CorePsTypeCatalog.cs type-catalog file before building.
+    .PARAMETER Clean
+        Runs 'git clean -fdX' to remove untracked and ignored files before building.
+    .PARAMETER PSModuleRestore
+        Restores PowerShell Gallery modules to the build output directory (legacy parameter set).
+    .PARAMETER NoPSModuleRestore
+        Skips restoring PowerShell Gallery modules to the build output directory.
+    .PARAMETER CI
+        Indicates a CI build; restores the Pester module to the output directory.
+    .PARAMETER ForMinimalSize
+        Produces a build optimized for minimal binary size (linux-x64, win7-x64, or osx-x64 only).
+    .PARAMETER ForceProduceLocalizedResources
+        Forces the build to produce satellite assemblies for all cultures, even when not required.
+    .PARAMETER SkipExperimentalFeatureGeneration
+        Skips the step that runs the built pwsh to produce the experimental-features list.
+    .PARAMETER SMAOnly
+        Rebuilds only System.Management.Automation.dll for rapid engine iteration.
+    .PARAMETER UseNuGetOrg
+        Uses nuget.org instead of the private PowerShell feed for package restore.
+    .PARAMETER Runtime
+        The .NET runtime identifier (RID) to target, e.g. 'win7-x64' or 'linux-x64'.
+    .PARAMETER Configuration
+        The build configuration: Debug, Release, CodeCoverage, or StaticAnalysis.
+    .PARAMETER ReleaseTag
+        A git tag in 'vX.Y.Z[-preview.N|-rc.N]' format to embed as the release version.
+    .PARAMETER Detailed
+        Passes '--verbosity d' to dotnet for detailed build output.
+    .PARAMETER InteractiveAuth
+        Passes '--interactive' to dotnet restore for interactive feed authentication.
+    .PARAMETER SkipRoslynAnalyzers
+        Skips Roslyn analyzer execution during the build.
+    .PARAMETER PSOptionsPath
+        When supplied, saves the resolved build options to this JSON file path.
+    #>
     [CmdletBinding(DefaultParameterSetName="Default")]
     param(
         # When specified this switch will stops running dev powershell
@@ -272,6 +403,7 @@ function Start-PSBuild {
         [switch]$NoPSModuleRestore,
         [switch]$CI,
         [switch]$ForMinimalSize,
+        [switch]$ForceProduceLocalizedResources,
 
         # Skips the step where the pwsh that's been built is used to create a configuration
         # Useful when changing parsing/compilation, since bugs there can mean we can't get past this step
@@ -281,11 +413,17 @@ function Start-PSBuild {
         # it's useful for development, to do a quick changes in the engine
         [switch]$SMAOnly,
 
+        # Use nuget.org instead of the PowerShell specific feed
+        [switch]$UseNuGetOrg,
+
         # These runtimes must match those in project.json
         # We do not use ValidateScript since we want tab completion
         # If this parameter is not provided it will get determined automatically.
-        [ValidateSet("alpine-x64",
+        [ValidateSet("linux-musl-x64",
                      "fxdependent",
+                     "fxdependent-noopt-linux-musl-x64",
+                     "fxdependent-linux-x64",
+                     "fxdependent-linux-arm64",
                      "fxdependent-win-desktop",
                      "linux-arm",
                      "linux-arm64",
@@ -298,16 +436,16 @@ function Start-PSBuild {
                      "win7-x86")]
         [string]$Runtime,
 
-        [ValidateSet('Debug', 'Release', 'CodeCoverage', '')] # We might need "Checked" as well
+        [ValidateSet('Debug', 'Release', 'CodeCoverage', 'StaticAnalysis', '')] # We might need "Checked" as well
         [string]$Configuration,
 
-        [switch]$CrossGen,
-
         [ValidatePattern("^v\d+\.\d+\.\d+(-\w+(\.\d{1,2})?)?$")]
         [ValidateNotNullOrEmpty()]
         [string]$ReleaseTag,
         [switch]$Detailed,
-        [switch]$InteractiveAuth
+        [switch]$InteractiveAuth,
+        [switch]$SkipRoslynAnalyzers,
+        [string]$PSOptionsPath
     )
 
     if ($ReleaseTag -and $ReleaseTag -notmatch "^v\d+\.\d+\.\d+(-(preview|rc)(\.\d{1,2})?)?$") {
@@ -319,8 +457,8 @@ function Start-PSBuild {
         $PSModuleRestore = $true
     }
 
-    if ($Runtime -eq "linux-arm" -and $environment.IsLinux -and -not $environment.IsUbuntu) {
-        throw "Cross compiling for linux-arm is only supported on Ubuntu environment"
+    if ($Runtime -eq "linux-arm" -and $environment.IsLinux -and -not $environment.IsUbuntu -and -not $environment.IsMariner) {
+        throw "Cross compiling for linux-arm is only supported on AzureLinux/Ubuntu environment"
     }
 
     if ("win-arm","win-arm64" -contains $Runtime -and -not $environment.IsWindows) {
@@ -328,13 +466,15 @@ function Start-PSBuild {
     }
 
     if ($ForMinimalSize) {
-        if ($CrossGen) {
-            throw "Build for the minimal size requires the minimal disk footprint, so `CrossGen` is not allowed"
+        if ($Runtime -and "linux-x64", "linux-arm64", "win7-x64", "win-arm64", "osx-x64", "osx-arm64" -notcontains $Runtime) {
+            throw "Build for the minimal size is enabled only for following runtimes: 'linux-x64', 'linux-arm64', 'win7-x64', 'win-arm64', 'osx-x64', 'osx-arm64'"
         }
+    }
 
-        if ($Runtime -and "linux-x64", "win7-x64", "osx-x64" -notcontains $Runtime) {
-            throw "Build for the minimal size is enabled only for following runtimes: 'linux-x64', 'win7-x64', 'osx-x64'"
-        }
+    if ($UseNuGetOrg) {
+        Switch-PSNugetConfig -Source Public
+    } else {
+        Write-Verbose -Message "Using default feeds which are Microsoft, use `-UseNuGetOrg` to switch to Public feeds" -Verbose
     }
 
     function Stop-DevPowerShell {
@@ -349,7 +489,7 @@ function Start-PSBuild {
     }
 
     if ($Clean) {
-        Write-Log -message "Cleaning your working directory. You can also do it with 'git clean -fdX --exclude .vs/PowerShell/v16/Server/sqlite3'"
+        Write-LogGroupStart -Title "Cleaning your working directory"
         Push-Location $PSScriptRoot
         try {
             # Excluded sqlite3 folder is due to this Roslyn issue: https://github.com/dotnet/roslyn/issues/23060
@@ -357,6 +497,7 @@ function Start-PSBuild {
             # Excluded nuget.config as this is required for release build.
             git clean -fdX --exclude .vs/PowerShell/v16/Server/sqlite3 --exclude src/Modules/nuget.config  --exclude nuget.config
         } finally {
+            Write-LogGroupEnd -Title "Cleaning your working directory"
             Pop-Location
         }
     }
@@ -377,7 +518,8 @@ function Start-PSBuild {
     }
 
     # Verify if the dotnet in-use is the required version
-    $dotnetCLIInstalledVersion = Start-NativeExecution -sb { dotnet --version } -IgnoreExitcode
+    $dotnetCLIInstalledVersion = Find-RequiredSDK $dotnetCLIRequiredVersion
+
     If ($dotnetCLIInstalledVersion -ne $dotnetCLIRequiredVersion) {
         Write-Warning @"
 The currently installed .NET Command Line Tools is not the required version.
@@ -399,7 +541,6 @@ Fix steps:
 
     # set output options
     $OptionsArguments = @{
-        CrossGen=$CrossGen
         Output=$Output
         Runtime=$Runtime
         Configuration=$Configuration
@@ -408,31 +549,85 @@ Fix steps:
         PSModuleRestore=$PSModuleRestore
         ForMinimalSize=$ForMinimalSize
     }
+
     $script:Options = New-PSOptions @OptionsArguments
 
     if ($StopDevPowerShell) {
         Stop-DevPowerShell
     }
 
-    # setup arguments
-    # adding ErrorOnDuplicatePublishOutputFiles=false due to .NET SDk issue: https://github.com/dotnet/sdk/issues/15748
-    $Arguments = @("publish","--no-restore","/property:GenerateFullPaths=true", "/property:ErrorOnDuplicatePublishOutputFiles=false")
+    # Setup arguments
+    # Added ErrorOnDuplicatePublishOutputFiles=false due to .NET SDK issue: https://github.com/dotnet/sdk/issues/15748
+    # Removed the option "--no-restore" due to .NET SDK issue: https://github.com/dotnet/sdk/issues/18999
+    $Arguments = @("publish", "/property:GenerateFullPaths=true", "/property:ErrorOnDuplicatePublishOutputFiles=false")
+
+    # Today, we only support localization for MSIX packages. For Linux and macOS packages, fxdependent and min-size packages,
+    # as well as .zip packages, we only support the default en-US culture.
+    # Therefore, we only produce satellite assemblies for win7-x64, win7-x86, and win-arm64 by default (excluding min-size build),
+    # unless the caller wants to force produce localized resources.
+    if (!$ForceProduceLocalizedResources -and ($Options.Runtime -notmatch '^(win7-x64|win7-x86|win-arm64)$' -or $ForMinimalSize)) {
+        # Disable satellite assemblies for other cultures.
+        $Arguments += "/property:SatelliteResourceLanguages=en"
+    }
+
     if ($Output -or $SMAOnly) {
         $Arguments += "--output", (Split-Path $Options.Output)
     }
 
+    # Add --self-contained due to "warning NETSDK1179: One of '--self-contained' or '--no-self-contained' options are required when '--runtime' is used."
+    if ($Options.Runtime -like 'fxdependent*') {
+        $Arguments += "--no-self-contained"
+        # The UseAppHost = true property creates ".exe" for the fxdependent packages.
+        # We need this in the package as Start-Job needs it.
+        $Arguments += "/property:UseAppHost=true"
+    }
+    else {
+        $Arguments += "--self-contained"
+    }
+
+    if ($Options.Runtime -like 'win*') {
+        # Starting in .NET 8, the .NET SDK won't recognize version-specific RIDs by default, such as win7-x64,
+        # see https://learn.microsoft.com/dotnet/core/compatibility/sdk/8.0/rid-graph for details.
+        # It will cause huge amount of changes in our build infrastructure because our building and packaging
+        # scripts have the 'win7-xx' assumption regarding the target runtime.
+        #
+        # As a workaround, we use the old full RID graph during the build so that we can continue to use the
+        # 'win7-x64' and 'win7-x86' RIDs.
+        $Arguments += "/property:UseRidGraph=true"
+    }
+
     if ($Options.Runtime -like 'win*' -or ($Options.Runtime -like 'fxdependent*' -and $environment.IsWindows)) {
         $Arguments += "/property:IsWindows=true"
+        if(!$environment.IsWindows) {
+            $Arguments += "/property:EnableWindowsTargeting=true"
+        }
     }
     else {
         $Arguments += "/property:IsWindows=false"
     }
 
-    # Framework Dependent builds do not support ReadyToRun as it needs a specific runtime to optimize for.
-    # The property is set in Powershell.Common.props file.
-    # We override the property through the build command line.
-    if($Options.Runtime -like 'fxdependent*' -or $ForMinimalSize) {
-        $Arguments += "/property:PublishReadyToRun=false"
+    # We pass in the AppDeployment property to indicate which type of deployment we are doing.
+    # This allows the PowerShell.Common.props to set the correct properties for the build.
+    $AppDeployment = if($Options.Runtime -like 'fxdependent*' -and $Options.Runtime -notmatch $optimizedFddRegex) {
+        # Global and zip files
+        "FxDependent"
+    }
+    elseif($Options.Runtime -like 'fxdependent*' -and $Options.Runtime -match $optimizedFddRegex) {
+        # These are Optimized and must come from the correct version of the runtime.
+        # Global
+        "FxDependentDeployment"
+    }
+    else {
+        # The majority of our packages
+        # AppLocal
+        "SelfContained"
+    }
+
+    $Arguments += "/property:AppDeployment=$AppDeployment"
+
+    if ($ForMinimalSize) {
+        # Skip Ready-to-Run compilation in 'PowerShell.Common.props' to keep binary size smaller
+        $Arguments += "/property:ForMinimalSize=True"
     }
 
     $Arguments += "--configuration", $Options.Configuration
@@ -446,6 +641,9 @@ Fix steps:
     if (-not $SMAOnly -and $Options.Runtime -notlike 'fxdependent*') {
         # libraries should not have runtime
         $Arguments += "--runtime", $Options.Runtime
+    } elseif ($Options.Runtime -match $optimizedFddRegex) {
+        $runtime = $Options.Runtime -replace 'fxdependent-', ''
+        $Arguments += "--runtime", $runtime
     }
 
     if ($ReleaseTag) {
@@ -453,8 +651,14 @@ Fix steps:
         $Arguments += "/property:ReleaseTag=$ReleaseTagToUse"
     }
 
+    if ($SkipRoslynAnalyzers) {
+        $Arguments += "/property:RunAnalyzersDuringBuild=false"
+    }
+
     # handle Restore
+    Write-LogGroupStart -Title "Restore NuGet Packages"
     Restore-PSPackage -Options $Options -Force:$Restore -InteractiveAuth:$InteractiveAuth
+    Write-LogGroupEnd -Title "Restore NuGet Packages"
 
     # handle ResGen
     # Heuristic to run ResGen on the fresh machine
@@ -465,7 +669,12 @@ Fix steps:
 
     # Handle TypeGen
     # .inc file name must be different for Windows and Linux to allow build on Windows and WSL.
-    $incFileName = "powershell_$($Options.Runtime).inc"
+    $runtime = $Options.Runtime
+    if ($Options.Runtime -match $optimizedFddRegex) {
+        $runtime = $Options.Runtime -replace 'fxdependent-', ''
+    }
+
+    $incFileName = "powershell_$runtime.inc"
     if ($TypeGen -or -not (Test-Path "$PSScriptRoot/src/TypeCatalogGen/$incFileName")) {
         Write-Log -message "Run TypeGen (generating CorePsTypeCatalog.cs)"
         Start-TypeGen -IncFileName $incFileName
@@ -479,13 +688,15 @@ Fix steps:
         $publishPath = $Options.Output
     }
 
+    Write-LogGroupStart -Title "Build PowerShell"
     try {
         # Relative paths do not work well if cwd is not changed to project
         Push-Location $Options.Top
 
-        if ($Options.Runtime -notlike 'fxdependent*') {
+        if ($Options.Runtime -notlike 'fxdependent*' -or $Options.Runtime -match $optimizedFddRegex) {
+            Write-Verbose "Building without shim" -Verbose
             $sdkToUse = 'Microsoft.NET.Sdk'
-            if ($Options.Runtime -like 'win7-*' -and !$ForMinimalSize) {
+            if (($Options.Runtime -like 'win7-*' -or $Options.Runtime -eq 'win-arm64') -and !$ForMinimalSize) {
                 ## WPF/WinForm and the PowerShell GraphicalHost assemblies are included
                 ## when 'Microsoft.NET.Sdk.WindowsDesktop' is used.
                 $sdkToUse = 'Microsoft.NET.Sdk.WindowsDesktop'
@@ -496,16 +707,11 @@ Fix steps:
             Write-Log -message "Run dotnet $Arguments from $PWD"
             Start-NativeExecution { dotnet $Arguments }
             Write-Log -message "PowerShell output: $($Options.Output)"
-
-            if ($CrossGen) {
-                # fxdependent package cannot be CrossGen'ed
-                Start-CrossGen -PublishPath $publishPath -Runtime $script:Options.Runtime
-                Write-Log -message "pwsh.exe with ngen binaries is available at: $($Options.Output)"
-            }
         } else {
+            Write-Verbose "Building with shim" -Verbose
             $globalToolSrcFolder = Resolve-Path (Join-Path $Options.Top "../Microsoft.PowerShell.GlobalTool.Shim") | Select-Object -ExpandProperty Path
 
-            if ($Options.Runtime -eq 'fxdependent') {
+            if ($Options.Runtime -eq 'fxdependent' -or $Options.Runtime -eq 'fxdependent-noopt-linux-musl-x64') {
                 $Arguments += "/property:SDKToUse=Microsoft.NET.Sdk"
             } elseif ($Options.Runtime -eq 'fxdependent-win-desktop') {
                 $Arguments += "/property:SDKToUse=Microsoft.NET.Sdk.WindowsDesktop"
@@ -517,7 +723,16 @@ Fix steps:
 
             try {
                 Push-Location $globalToolSrcFolder
-                $Arguments += "--output", $publishPath
+
+                if ($Options.Runtime -like 'fxdependent*') {
+                    if ($Arguments -contains '/property:UseAppHost=true') {
+                        $Arguments = @($Arguments | Where-Object { $_ -notlike '/property:UseAppHost=true' })
+                    }
+                }
+
+                if ($Arguments -notcontains '--output') {
+                    $Arguments += "--output", $publishPath
+                }
                 Write-Log -message "Run dotnet $Arguments from $PWD to build global tool entry point"
                 Start-NativeExecution { dotnet $Arguments }
             }
@@ -528,6 +743,7 @@ Fix steps:
     } finally {
         Pop-Location
     }
+    Write-LogGroupEnd -Title "Build PowerShell"
 
     # No extra post-building task will run if '-SMAOnly' is specified, because its purpose is for a quick update of S.M.A.dll after full build.
     if ($SMAOnly) {
@@ -535,6 +751,7 @@ Fix steps:
     }
 
     # publish reference assemblies
+    Write-LogGroupStart -Title "Publish Reference Assemblies"
     try {
         Push-Location "$PSScriptRoot/src/TypeCatalogGen"
         $refAssemblies = Get-Content -Path $incFileName | Where-Object { $_ -like "*microsoft.netcore.app*" } | ForEach-Object { $_.TrimEnd(';') }
@@ -548,6 +765,7 @@ Fix steps:
     } finally {
         Pop-Location
     }
+    Write-LogGroupEnd -Title "Publish Reference Assemblies"
 
     if ($ReleaseTag) {
         $psVersion = $ReleaseTag
@@ -590,59 +808,213 @@ Fix steps:
     # download modules from powershell gallery.
     #   - PowerShellGet, PackageManagement, Microsoft.PowerShell.Archive
     if ($PSModuleRestore) {
+        Write-LogGroupStart -Title "Restore PowerShell Modules"
         Restore-PSModuleToBuild -PublishPath $publishPath
+        Write-LogGroupEnd -Title "Restore PowerShell Modules"
     }
 
     # publish powershell.config.json
-    $config = @{}
-    if ($environment.IsWindows) {
-        $config = @{ "Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned";
-                     "WindowsPowerShellCompatibilityModuleDenyList" = @("PSScheduledJob","BestPractices","UpdateServices") }
+    Write-LogGroupStart -Title "Generate PowerShell Configuration"
+    $config = [ordered]@{}
+
+    if ($Options.Runtime -like "*win*") {
+        # Execution Policy and WinCompat feature are only supported on Windows.
+        $config.Add("Microsoft.PowerShell:ExecutionPolicy", "RemoteSigned")
+        $config.Add("WindowsPowerShellCompatibilityModuleDenyList", @("PSScheduledJob", "BestPractices", "UpdateServices"))
     }
 
-    # When building preview, we want the configuration to enable all experiemental features by default
-    # ARM is cross compiled, so we can't run pwsh to enumerate Experimental Features
     if (-not $SkipExperimentalFeatureGeneration -and
         (Test-IsPreview $psVersion) -and
-        -not (Test-IsReleaseCandidate $psVersion) -and
-        -not $Runtime.Contains("arm") -and
-        -not ($Runtime -like 'fxdependent*')) {
-
-        $json = & $publishPath\pwsh -noprofile -command {
-            # Special case for DSC code in PS;
-            # this experimental feature requires new DSC module that is not inbox,
-            # so we don't want default DSC use case be broken
-            [System.Collections.ArrayList] $expFeatures = Get-ExperimentalFeature | Where-Object Name -NE PS7DscSupport | ForEach-Object -MemberName Name
-
-            $expFeatures | Out-String | Write-Verbose -Verbose
-
-            # Make sure ExperimentalFeatures from modules in PSHome are added
-            # https://github.com/PowerShell/PowerShell/issues/10550
-            @("PSDesiredStateConfiguration.InvokeDscResource") | ForEach-Object {
-                if (!$expFeatures.Contains($_)) {
-                    $null = $expFeatures.Add($_)
-                }
+        -not (Test-IsReleaseCandidate $psVersion)
+    ) {
+        if ((Test-ShouldGenerateExperimentalFeatures -Runtime $Options.Runtime)) {
+            Write-Verbose "Build experimental feature list by running 'Get-ExperimentalFeature'" -Verbose
+            $json = & $publishPath\pwsh -noprofile -command {
+                $expFeatures = Get-ExperimentalFeature | ForEach-Object -MemberName Name
+                ConvertTo-Json $expFeatures
+            }
+        } else {
+            Write-Verbose "Build experimental feature list by using the pre-generated JSON files" -Verbose
+            $ExperimentalFeatureJsonFilePath = if ($Options.Runtime -like "*win*") {
+                "$PSScriptRoot/experimental-feature-windows.json"
+            } else {
+                "$PSScriptRoot/experimental-feature-linux.json"
+            }
+
+            if (-not (Test-Path $ExperimentalFeatureJsonFilePath)) {
+                throw "ExperimentalFeatureJsonFilePath: $ExperimentalFeatureJsonFilePath does not exist"
             }
 
-            ConvertTo-Json $expFeatures
+            $json = Get-Content -Raw $ExperimentalFeatureJsonFilePath
         }
 
-        $config += @{ ExperimentalFeatures = ([string[]] ($json | ConvertFrom-Json)) }
+        $config.Add('ExperimentalFeatures', [string[]]($json | ConvertFrom-Json));
+
+    } else {
+        Write-Warning -Message "Experimental features are not enabled in powershell.config.json file"
     }
 
     if ($config.Count -gt 0) {
         $configPublishPath = Join-Path -Path $publishPath -ChildPath "powershell.config.json"
         Set-Content -Path $configPublishPath -Value ($config | ConvertTo-Json) -Force -ErrorAction Stop
+    } else {
+        Write-Warning "No powershell.config.json generated for $publishPath"
     }
+    Write-LogGroupEnd -Title "Generate PowerShell Configuration"
 
     # Restore the Pester module
     if ($CI) {
+        Write-LogGroupStart -Title "Restore Pester Module"
         Restore-PSPester -Destination (Join-Path $publishPath "Modules")
+        Write-LogGroupEnd -Title "Restore Pester Module"
+    }
+
+    Clear-NativeDependencies -PublishFolder $publishPath
+
+    if ($PSOptionsPath) {
+        $resolvedPSOptionsPath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($PSOptionsPath)
+        $parent = Split-Path -Path $resolvedPSOptionsPath
+        if (!(Test-Path $parent)) {
+            $null = New-Item -ItemType Directory -Path $parent
+        }
+        Save-PSOptions -PSOptionsPath $PSOptionsPath -Options $Options
     }
 }
 
+function Switch-PSNugetConfig {
+    <#
+    .SYNOPSIS
+        Switches the NuGet configuration between public, private, and NuGet.org-only sources.
+    .DESCRIPTION
+        Regenerates nuget.config files in the repository root, src/Modules, and test/tools/Modules
+        to point to the specified feed source. Optionally stores authenticated credentials.
+    .PARAMETER Source
+        The feed set to activate: 'Public' (nuget.org + dotnet feed), 'Private' (PowerShell ADO
+        feed), or 'NuGetOnly' (nuget.org only).
+    .PARAMETER UserName
+        Username for authenticated private feed access.
+    .PARAMETER ClearTextPAT
+        Personal access token in clear text for authenticated private feed access.
+    #>
+    param(
+        [Parameter(Mandatory = $true, ParameterSetName = 'user')]
+        [Parameter(Mandatory = $true, ParameterSetName = 'nouser')]
+        [ValidateSet('Public', 'Private', 'NuGetOnly')]
+        [string] $Source,
+
+        [Parameter(Mandatory = $true, ParameterSetName = 'user')]
+        [string] $UserName,
+
+        [Parameter(Mandatory = $true, ParameterSetName = 'user')]
+        [string] $ClearTextPAT
+    )
+
+    Clear-PipelineNugetAuthentication
+
+    $extraParams = @()
+    if ($UserName) {
+        $extraParams = @{
+            UserName     = $UserName
+            ClearTextPAT = $ClearTextPAT
+        }
+    }
+
+    $dotnetSdk = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v2'; Name = 'dotnet' }
+    $gallery = [NugetPackageSource] @{Url = 'https://www.powershellgallery.com/api/v2/'; Name = 'psgallery' }
+    $nugetorg = [NugetPackageSource] @{Url = 'https://api.nuget.org/v3/index.json'; Name = 'nuget.org' }
+    if ( $Source -eq 'Public') {
+        New-NugetConfigFile -NugetPackageSource $nugetorg, $dotnetSdk   -Destination "$PSScriptRoot/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $gallery                -Destination "$PSScriptRoot/src/Modules/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $gallery                -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
+    } elseif ( $Source -eq 'NuGetOnly') {
+        New-NugetConfigFile -NugetPackageSource $nugetorg   -Destination "$PSScriptRoot/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $gallery                -Destination "$PSScriptRoot/src/Modules/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $gallery                -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
+    } elseif ( $Source -eq 'Private') {
+        $powerShellPackages = [NugetPackageSource] @{Url = 'https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json'; Name = 'powershell' }
+
+        New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/src/Modules/" @extraParams
+        New-NugetConfigFile -NugetPackageSource $powerShellPackages -Destination "$PSScriptRoot/test/tools/Modules/" @extraParams
+    } else {
+        throw "Unknown source: $Source"
+    }
+
+    if ($UserName -or $ClearTextPAT) {
+        Set-PipelineNugetAuthentication
+    }
+}
+
+function Test-ShouldGenerateExperimentalFeatures
+{
+    <#
+    .SYNOPSIS
+        Determines whether experimental-feature JSON files should be generated on this host.
+    .DESCRIPTION
+        Returns $true only when the current runtime identifier matches the host OS and
+        architecture, the build is not a release build (PS_RELEASE_BUILD not set), and the
+        runtime is not fxdependent.
+    .PARAMETER Runtime
+        The .NET runtime identifier (RID) being targeted by the build.
+    .OUTPUTS
+        System.Boolean. $true if the experimental-feature list should be generated.
+    #>
+    param(
+        [Parameter(Mandatory)]
+        $Runtime
+    )
+
+    if ($env:PS_RELEASE_BUILD) {
+        return $false
+    }
+
+    if ($Runtime -like 'fxdependent*') {
+        return $false
+    }
+
+    $runtimePattern = 'unknown-'
+    if ($environment.IsWindows) {
+        $runtimePattern = '^win.*-'
+    }
+
+    if ($environment.IsMacOS) {
+        $runtimePattern = '^osx.*-'
+    }
+
+    if ($environment.IsLinux) {
+        $runtimePattern = '^linux.*-'
+    }
+
+    $runtimePattern += $environment.OSArchitecture.ToString()
+    Write-Verbose "runtime pattern check: $Runtime -match $runtimePattern" -Verbose
+    if ($Runtime -match $runtimePattern) {
+        Write-Verbose "Generating experimental feature list" -Verbose
+        return $true
+    }
+
+    Write-Verbose "Skipping generating experimental feature list" -Verbose
+    return $false
+}
+
 function Restore-PSPackage
 {
+    <#
+    .SYNOPSIS
+        Restores NuGet packages for the PowerShell project directories.
+    .DESCRIPTION
+        Runs 'dotnet restore' on the main PowerShell project directories with up to five
+        retries on transient failures. Honors the target runtime identifier and build verbosity.
+    .PARAMETER ProjectDirs
+        Explicit list of project directories to restore. Defaults to the standard PS project set.
+    .PARAMETER Options
+        PSOptions object specifying runtime and configuration. Defaults to Get-PSOptions.
+    .PARAMETER Force
+        Forces restore even when project.assets.json already exists.
+    .PARAMETER InteractiveAuth
+        Passes '--interactive' to dotnet restore for interactive feed authentication.
+    .PARAMETER PSModule
+        Restores in PSModule mode, omitting the runtime argument.
+    #>
     [CmdletBinding()]
     param(
         [ValidateNotNullOrEmpty()]
@@ -662,7 +1034,7 @@ function Restore-PSPackage
 
     if (-not $ProjectDirs)
     {
-        $ProjectDirs = @($Options.Top, "$PSScriptRoot/src/TypeCatalogGen", "$PSScriptRoot/src/ResGen", "$PSScriptRoot/src/Modules")
+        $ProjectDirs = @($Options.Top, "$PSScriptRoot/src/TypeCatalogGen", "$PSScriptRoot/src/ResGen", "$PSScriptRoot/src/Modules", "$PSScriptRoot/tools/wix")
 
         if ($Options.Runtime -like 'fxdependent*') {
             $ProjectDirs += "$PSScriptRoot/src/Microsoft.PowerShell.GlobalTool.Shim"
@@ -676,7 +1048,7 @@ function Restore-PSPackage
         }
         else {
             $sdkToUse = 'Microsoft.NET.Sdk'
-            if ($Options.Runtime -like 'win7-*' -and !$Options.ForMinimalSize) {
+            if (($Options.Runtime -like 'win7-*' -or $Options.Runtime -eq 'win-arm64') -and !$Options.ForMinimalSize) {
                 $sdkToUse = 'Microsoft.NET.Sdk.WindowsDesktop'
             }
         }
@@ -696,10 +1068,19 @@ function Restore-PSPackage
             $RestoreArguments += "quiet"
         }
 
+        if ($Options.Runtime -like 'win*') {
+            $RestoreArguments += "/property:EnableWindowsTargeting=True"
+            $RestoreArguments += "/property:UseRidGraph=True"
+        }
+
         if ($InteractiveAuth) {
             $RestoreArguments += "--interactive"
         }
 
+        if ($env:ENABLE_MSBUILD_BINLOGS -eq 'true') {
+            $RestoreArguments += '-bl'
+        }
+
         $ProjectDirs | ForEach-Object {
             $project = $_
             Write-Log -message "Run dotnet restore $project $RestoreArguments"
@@ -717,6 +1098,23 @@ function Restore-PSPackage
                     $retryCount++
                     if($retryCount -ge $maxTries)
                     {
+                        if ($env:ENABLE_MSBUILD_BINLOGS -eq 'true') {
+                            if ( Test-Path ./msbuild.binlog ) {
+                                if (!(Test-Path $env:OB_OUTPUTDIRECTORY -PathType Container)) {
+                                    $null = New-Item -path $env:OB_OUTPUTDIRECTORY -ItemType Directory -Force -Verbose
+                                }
+
+                                $projectName = Split-Path -Leaf -Path $project
+                                $binlogFileName = "${projectName}.msbuild.binlog"
+                                if ($IsMacOS) {
+                                    $resolvedPath = (Resolve-Path -Path ./msbuild.binlog).ProviderPath
+                                    Write-Host "##vso[artifact.upload containerfolder=$binLogFileName;artifactname=$binLogFileName]$resolvedPath"
+                                } else {
+                                    Copy-Item -Path ./msbuild.binlog -Destination "$env:OB_OUTPUTDIRECTORY/${projectName}.msbuild.binlog" -Verbose
+                                }
+                            }
+                        }
+
                         throw
                     }
                     continue
@@ -731,6 +1129,16 @@ function Restore-PSPackage
 
 function Restore-PSModuleToBuild
 {
+    <#
+    .SYNOPSIS
+        Copies PowerShell Gallery modules from the NuGet cache into the build output Modules folder.
+    .DESCRIPTION
+        Resolves Gallery module packages referenced in PSGalleryModules.csproj and copies
+        them to the Modules subdirectory of the specified publish path. Also removes
+        .nupkg.metadata files left behind by the restore.
+    .PARAMETER PublishPath
+        The PowerShell build output directory whose Modules sub-folder receives the modules.
+    #>
     param(
         [Parameter(Mandatory)]
         [string]
@@ -747,6 +1155,14 @@ function Restore-PSModuleToBuild
 
 function Restore-PSPester
 {
+    <#
+    .SYNOPSIS
+        Downloads and saves the Pester module (v4.x) from the PowerShell Gallery.
+    .DESCRIPTION
+        Uses Save-Module to install Pester up to version 4.99 into the target directory.
+    .PARAMETER Destination
+        Directory to save Pester into. Defaults to the Modules folder of the current build output.
+    #>
     param(
         [ValidateNotNullOrEmpty()]
         [string] $Destination = ([IO.Path]::Combine((Split-Path (Get-PSOptions -DefaultToNew).Output), "Modules"))
@@ -755,6 +1171,15 @@ function Restore-PSPester
 }
 
 function Compress-TestContent {
+    <#
+    .SYNOPSIS
+        Compresses the test directory into a zip archive for distribution.
+    .DESCRIPTION
+        Publishes PSTestTools and then zips the entire test/ directory to the given
+        destination path using System.IO.Compression.ZipFile.
+    .PARAMETER Destination
+        The path of the output zip file to create.
+    #>
     [CmdletBinding()]
     param(
         $Destination
@@ -769,19 +1194,46 @@ function Compress-TestContent {
 }
 
 function New-PSOptions {
+    <#
+    .SYNOPSIS
+        Creates a new PSOptions hashtable describing a PowerShell build configuration.
+    .DESCRIPTION
+        Computes the output path, project directory, and framework for a PowerShell build
+        based on the supplied runtime and configuration. The resulting hashtable is consumed
+        by Start-PSBuild, Restore-PSPackage, and related functions.
+    .PARAMETER Configuration
+        The build configuration: Debug (default), Release, CodeCoverage, or StaticAnalysis.
+    .PARAMETER Framework
+        The target .NET framework moniker. Defaults to 'net11.0'.
+    .PARAMETER Runtime
+        The .NET runtime identifier (RID). Detected automatically via 'dotnet --info' if omitted.
+    .PARAMETER Output
+        Optional path to the output directory. The executable name is appended automatically.
+    .PARAMETER SMAOnly
+        Targets only the System.Management.Automation project rather than the full host.
+    .PARAMETER PSModuleRestore
+        Indicates whether Start-PSBuild should restore PowerShell Gallery modules.
+    .PARAMETER ForMinimalSize
+        Produces a build targeting minimal binary size.
+    .OUTPUTS
+        System.Collections.Hashtable. A hashtable with build option properties.
+    #>
     [CmdletBinding()]
     param(
-        [ValidateSet("Debug", "Release", "CodeCoverage", '')]
+        [ValidateSet('Debug', 'Release', 'CodeCoverage', 'StaticAnalysis', '')]
         [string]$Configuration,
 
-        [ValidateSet("net6.0")]
-        [string]$Framework = "net6.0",
+        [ValidateSet("net11.0")]
+        [string]$Framework = "net11.0",
 
         # These are duplicated from Start-PSBuild
         # We do not use ValidateScript since we want tab completion
         [ValidateSet("",
-                     "alpine-x64",
+                     "linux-musl-x64",
                      "fxdependent",
+                     "fxdependent-noopt-linux-musl-x64",
+                     "fxdependent-linux-x64",
+                     "fxdependent-linux-arm64",
                      "fxdependent-win-desktop",
                      "linux-arm",
                      "linux-arm64",
@@ -794,8 +1246,6 @@ function New-PSOptions {
                      "win7-x86")]
         [string]$Runtime,
 
-        [switch]$CrossGen,
-
         # Accept a path to the output directory
         # If not null or empty, name of the executable will be appended to
         # this path, otherwise, to the default path, and then the full path
@@ -820,26 +1270,26 @@ function New-PSOptions {
     Write-Verbose "Using framework '$Framework'"
 
     if (-not $Runtime) {
-        if ($environment.IsLinux) {
-            $Runtime = "linux-x64"
-        } elseif ($environment.IsMacOS) {
-            if ($PSVersionTable.OS.Contains('ARM64')) {
-                $Runtime = "osx-arm64"
+        $Platform, $Architecture = dotnet --info |
+            Select-String '^\s*OS Platform:\s+(\w+)$', '^\s*Architecture:\s+(\w+)$' |
+            Select-Object -First 2 |
+            ForEach-Object { $_.Matches.Groups[1].Value }
+
+        switch ($Platform) {
+            'Windows' {
+                # For x86 and x64 architectures, we use win7-x64 and win7-x86 RIDs.
+                # For arm and arm64 architectures, we use win-arm and win-arm64 RIDs.
+                $Platform = if ($Architecture[0] -eq 'x') { 'win7' } else { 'win' }
+                $Runtime = "${Platform}-${Architecture}"
             }
-            else {
-                $Runtime = "osx-x64"
-            }
-        } else {
-            $RID = dotnet --info | ForEach-Object {
-                if ($_ -match "RID") {
-                    $_ -split "\s+" | Select-Object -Last 1
-                }
+
+            'Linux' {
+                $Runtime = "linux-${Architecture}"
             }
 
-            # We plan to release packages targetting win7-x64 and win7-x86 RIDs,
-            # which supports all supported windows platforms.
-            # So we, will change the RID to win7-<arch>
-            $Runtime = $RID -replace "win\d+", "win7"
+            'Darwin' {
+                $Runtime = "osx-${Architecture}"
+            }
         }
 
         if (-not $Runtime) {
@@ -868,9 +1318,14 @@ function New-PSOptions {
 
     # Build the Output path
     if (!$Output) {
-        if ($Runtime -like 'fxdependent*') {
+        if ($Runtime -like 'fxdependent*' -and ($Runtime -like 'fxdependent*linux*' -or $Runtime -like 'fxdependent*alpine*')) {
+            $outputRuntime = $Runtime -replace 'fxdependent-', ''
+            $Output = [IO.Path]::Combine($Top, "bin", $Configuration, $Framework, $outputRuntime, "publish", $Executable)
+        }
+        elseif ($Runtime -like 'fxdependent*') {
             $Output = [IO.Path]::Combine($Top, "bin", $Configuration, $Framework, "publish", $Executable)
-        } else {
+        }
+        else {
             $Output = [IO.Path]::Combine($Top, "bin", $Configuration, $Framework, $Runtime, "publish", $Executable)
         }
     } else {
@@ -901,7 +1356,6 @@ function New-PSOptions {
                 -RootInfo ([PSCustomObject]$RootInfo) `
                 -Top $Top `
                 -Runtime $Runtime `
-                -Crossgen $Crossgen.IsPresent `
                 -Configuration $Configuration `
                 -PSModuleRestore $PSModuleRestore.IsPresent `
                 -Framework $Framework `
@@ -911,6 +1365,17 @@ function New-PSOptions {
 
 # Get the Options of the last build
 function Get-PSOptions {
+    <#
+    .SYNOPSIS
+        Returns the PSOptions from the most recent Start-PSBuild call.
+    .DESCRIPTION
+        Retrieves the script-level $script:Options object. If no build has been run and
+        -DefaultToNew is specified, returns a fresh object from New-PSOptions.
+    .PARAMETER DefaultToNew
+        When specified, returns default options from New-PSOptions if no build has occurred.
+    .OUTPUTS
+        System.Collections.Hashtable. The current PSOptions hashtable, or $null.
+    #>
     param(
         [Parameter(HelpMessage='Defaults to New-PSOption if a build has not occurred.')]
         [switch]
@@ -926,6 +1391,15 @@ function Get-PSOptions {
 }
 
 function Set-PSOptions {
+    <#
+    .SYNOPSIS
+        Stores the supplied PSOptions as the active build options.
+    .DESCRIPTION
+        Writes the options hashtable to the script-scoped $script:Options variable,
+        making it available to subsequent Get-PSOptions calls.
+    .PARAMETER Options
+        The PSOptions hashtable to store.
+    #>
     param(
         [PSObject]
         $Options
@@ -935,6 +1409,17 @@ function Set-PSOptions {
 }
 
 function Get-PSOutput {
+    <#
+    .SYNOPSIS
+        Returns the path to the PowerShell executable produced by the build.
+    .DESCRIPTION
+        Looks up the Output path from the supplied options hashtable, the cached
+        script-level options, or a fresh New-PSOptions call, in that order of precedence.
+    .PARAMETER Options
+        An explicit options hashtable. If omitted, the most recent build options are used.
+    .OUTPUTS
+        System.String. The full path to the built pwsh or pwsh.exe executable.
+    #>
     [CmdletBinding()]param(
         [hashtable]$Options
     )
@@ -948,6 +1433,21 @@ function Get-PSOutput {
 }
 
 function Get-PesterTag {
+    <#
+    .SYNOPSIS
+        Scans the Pester test tree and returns a summary of all tags in use.
+    .DESCRIPTION
+        Parses every *.tests.ps1 file under the specified base directory using the
+        PowerShell AST, validates that each Describe block has exactly one priority tag
+        (CI, Feature, or Scenario), and returns a summary object with tag counts and
+        any validation warnings.
+    .PARAMETER testbase
+        Root directory to search for test files.
+        Defaults to '$PSScriptRoot/test/powershell'.
+    .OUTPUTS
+        PSCustomObject (DescribeTagsInUse). Properties are tag names mapped to usage
+        counts, plus 'Result' (Pass/Fail) and 'Warnings' (string[]).
+    #>
     param ( [Parameter(Position=0)][string]$testbase = "$PSScriptRoot/test/powershell" )
     $alltags = @{}
     $warnings = @()
@@ -1010,21 +1510,80 @@ function Get-PesterTag {
     $o
 }
 
+# Function to build and publish the Microsoft.PowerShell.NamedPipeConnection module for
+# testing PowerShell remote custom connections.
+function Publish-CustomConnectionTestModule
+{
+    <#
+    .SYNOPSIS
+        Builds and publishes the Microsoft.PowerShell.NamedPipeConnection test module.
+    .DESCRIPTION
+        Invokes the module's own build.ps1 script, copies the output to
+        test/tools/Modules, and then runs a clean build to remove intermediate artifacts.
+    #>
+    Write-LogGroupStart -Title "Publish-CustomConnectionTestModule"
+    $sourcePath = "${PSScriptRoot}/test/tools/NamedPipeConnection"
+    $outPath = "${PSScriptRoot}/test/tools/NamedPipeConnection/out/Microsoft.PowerShell.NamedPipeConnection"
+    $publishPath = "${PSScriptRoot}/test/tools/Modules"
+
+    Find-DotNet
+
+    Push-Location -Path $sourcePath
+    try {
+        # Build the Microsoft.PowerShell.NamedPipeConnect module
+        ./build.ps1 -Clean -Build
+
+        if (! (Test-Path -Path $outPath)) {
+            throw "Publish-CustomConnectionTestModule: Build failed. Output path does not exist: $outPath"
+        }
+
+        # Publish the Microsoft.PowerShell.NamedPipeConnection module
+        Copy-Item -Path $outPath -Destination $publishPath -Recurse -Force
+
+        # Clean up build artifacts
+        ./build.ps1 -Clean
+    }
+    finally {
+        Pop-Location
+    }
+
+    Write-LogGroupEnd -Title "Publish-CustomConnectionTestModule"
+}
+
 function Publish-PSTestTools {
+    <#
+    .SYNOPSIS
+        Builds and publishes all test tool projects to their bin directories.
+    .DESCRIPTION
+        Runs 'dotnet publish' for each test tool project (TestAlc, TestExe, UnixSocket,
+        WebListener, and on Windows TestService), copies Gallery test modules, and
+        publishes the NamedPipeConnection module. The tool bin directories are added to PATH
+        so that tests can locate the executables.
+    .PARAMETER runtime
+        The .NET runtime identifier (RID) used when publishing executables.
+        Defaults to the runtime from the current build options.
+    #>
     [CmdletBinding()]
     param(
         [string]
         $runtime
     )
 
+    Write-LogGroupStart -Title "Publish-PSTestTools"
     Find-Dotnet
 
     $tools = @(
-        @{Path="${PSScriptRoot}/test/tools/TestExe";Output="testexe"}
-        @{Path="${PSScriptRoot}/test/tools/WebListener";Output="WebListener"}
-        @{Path="${PSScriptRoot}/test/tools/TestService";Output="TestService"}
+        @{ Path="${PSScriptRoot}/test/tools/TestAlc";     Output="library" }
+        @{ Path="${PSScriptRoot}/test/tools/TestExe";     Output="exe" }
+        @{ Path="${PSScriptRoot}/test/tools/UnixSocket";  Output="exe" }
+        @{ Path="${PSScriptRoot}/test/tools/WebListener"; Output="exe" }
     )
 
+    # This is a windows service, so it only works on windows
+    if ($environment.IsWindows) {
+        $tools += @{ Path = "${PSScriptRoot}/test/tools/TestService"; Output = "exe" }
+    }
+
     $Options = Get-PSOptions -DefaultToNew
 
     # Publish tools so it can be run by tests
@@ -1043,10 +1602,30 @@ function Publish-PSTestTools {
                 Remove-Item -Path $objPath -Recurse -Force
             }
 
+            if ($tool.Output -eq 'library') {
+                ## Handle building and publishing assemblies.
+                dotnet publish --configuration $Options.Configuration --framework $Options.Framework
+                continue
+            }
+
+            ## Handle building and publishing executables.
             if (-not $runtime) {
-                dotnet publish --output bin --configuration $Options.Configuration --framework $Options.Framework --runtime $Options.Runtime
-            } else {
-                dotnet publish --output bin --configuration $Options.Configuration --framework $Options.Framework --runtime $runtime
+                $runtime = $Options.Runtime
+            }
+
+            # We are using non-version/distro specific RIDs for test tools, so we need to fix the runtime
+            # value here if it starts with 'win7'.
+            $runtime = $runtime -replace '^win7-', 'win-'
+
+            Write-Verbose -Verbose -Message "Starting dotnet publish for $toolPath with runtime $runtime"
+
+            dotnet publish --output bin --configuration $Options.Configuration --framework $Options.Framework --runtime $runtime --self-contained | Out-String | Write-Verbose -Verbose
+
+            $dll = $null
+            $dll = Get-ChildItem -Path bin -Recurse -Filter "*.dll"
+
+            if (-not $dll) {
+                throw "Failed to find exe in $toolPath"
             }
 
             if ( -not $env:PATH.Contains($toolPath) ) {
@@ -1059,9 +1638,23 @@ function Publish-PSTestTools {
 
     # `dotnet restore` on test project is not called if product projects have been restored unless -Force is specified.
     Copy-PSGalleryModules -Destination "${PSScriptRoot}/test/tools/Modules" -CsProjPath "$PSScriptRoot/test/tools/Modules/PSGalleryTestModules.csproj" -Force
+
+    # Publish the Microsoft.PowerShell.NamedPipeConnection module
+    Publish-CustomConnectionTestModule
+    Write-LogGroupEnd -Title "Publish-PSTestTools"
 }
 
 function Get-ExperimentalFeatureTests {
+    <#
+    .SYNOPSIS
+        Returns a mapping of experimental feature names to their associated test files.
+    .DESCRIPTION
+        Reads test/tools/TestMetadata.json and extracts the ExperimentalFeatures section,
+        returning a hashtable where keys are feature names and values are arrays of test paths.
+    .OUTPUTS
+        System.Collections.Hashtable. Keys are experimental feature names; values are
+        arrays of test file paths.
+    #>
     $testMetadataFile = Join-Path $PSScriptRoot "test/tools/TestMetadata.json"
     $metadata = Get-Content -Path $testMetadataFile -Raw | ConvertFrom-Json | ForEach-Object -MemberName ExperimentalFeatures
     $features = $metadata | Get-Member -MemberType NoteProperty | ForEach-Object -MemberName Name
@@ -1074,9 +1667,61 @@ function Get-ExperimentalFeatureTests {
 }
 
 function Start-PSPester {
+    <#
+    .SYNOPSIS
+        Runs the Pester test suite against the built PowerShell.
+    .DESCRIPTION
+        Launches the built pwsh process with the Pester module and runs the specified
+        test paths. Automatically adjusts tag exclusions based on the current elevation
+        level, and emits NUnit XML results that are optionally published to Azure DevOps
+        or GitHub Actions.
+    .PARAMETER Path
+        One or more test file or directory paths to run. Defaults to test/powershell.
+    .PARAMETER OutputFormat
+        The Pester output format. Defaults to 'NUnitXml'.
+    .PARAMETER OutputFile
+        Path for the XML results file. Defaults to 'pester-tests.xml'.
+    .PARAMETER ExcludeTag
+        Tags to exclude from the run. Defaults to 'Slow'; adjusted for elevation level.
+    .PARAMETER Tag
+        Tags to include in the run. Defaults to 'CI' and 'Feature'.
+    .PARAMETER ThrowOnFailure
+        Throws an exception after the run if any tests failed.
+    .PARAMETER BinDir
+        Directory containing the built pwsh executable. Defaults to the current build output.
+    .PARAMETER powershell
+        Full path to the pwsh executable used for running tests.
+    .PARAMETER Pester
+        Path to the Pester module directory.
+    .PARAMETER Unelevate
+        Runs tests in an unelevated child process on Windows.
+    .PARAMETER Quiet
+        Suppresses most Pester output.
+    .PARAMETER Terse
+        Shows compact pass/fail indicators instead of full output lines.
+    .PARAMETER PassThru
+        Returns the Pester result object to the caller.
+    .PARAMETER Sudo
+        Runs tests under sudo on Unix (PassThru parameter set).
+    .PARAMETER IncludeFailingTest
+        Includes tests from tools/failingTests.
+    .PARAMETER IncludeCommonTests
+        Includes tests from test/common.
+    .PARAMETER ExperimentalFeatureName
+        Enables the named experimental feature for this test run via a temporary config file.
+    .PARAMETER Title
+        Title for the published test results. Defaults to 'PowerShell 7 Tests'.
+    .PARAMETER Wait
+        Waits for a debugger to attach before starting Pester (Debug builds only).
+    .PARAMETER SkipTestToolBuild
+        Skips rebuilding test tool executables before running tests.
+    .PARAMETER UseNuGetOrg
+        Switches NuGet config to public feeds before running tests.
+    #>
     [CmdletBinding(DefaultParameterSetName='default')]
     param(
         [Parameter(Position=0)]
+        [ArgumentCompleter({param($c,$p,$word) Get-ChildItem -Recurse -File -LiteralPath $PSScriptRoot/Test/PowerShell -filter *.tests.ps1 | Where-Object FullName -like "*$word*" })]
         [string[]]$Path = @("$PSScriptRoot/test/powershell"),
         [string]$OutputFormat = "NUnitXml",
         [string]$OutputFile = "pester-tests.xml",
@@ -1102,9 +1747,14 @@ function Start-PSPester {
         [Parameter(ParameterSetName='Wait', Mandatory=$true,
             HelpMessage='Wait for the debugger to attach to PowerShell before Pester starts.  Debug builds only!')]
         [switch]$Wait,
-        [switch]$SkipTestToolBuild
+        [switch]$SkipTestToolBuild,
+        [switch]$UseNuGetOrg
     )
 
+    if ($UseNuGetOrg) {
+        Switch-PSNugetConfig -Source Public
+    }
+
     if (-not (Get-Module -ListAvailable -Name $Pester -ErrorAction SilentlyContinue | Where-Object { $_.Version -ge "4.2" } ))
     {
         Restore-PSPester
@@ -1117,7 +1767,7 @@ function Start-PSPester {
 
     if($IncludeCommonTests.IsPresent)
     {
-        $path = += "$PSScriptRoot/test/common"
+        $path += "$PSScriptRoot/test/common"
     }
 
     # we need to do few checks and if user didn't provide $ExcludeTag explicitly, we should alternate the default
@@ -1167,9 +1817,12 @@ function Start-PSPester {
         # if we are building for Alpine, we must include the runtime as linux-x64
         # will not build runnable test tools
         if ( $environment.IsLinux -and $environment.IsAlpine ) {
-            $publishArgs['runtime'] = 'alpine-x64'
+            $publishArgs['runtime'] = 'linux-musl-x64'
         }
         Publish-PSTestTools @publishArgs | ForEach-Object {Write-Host $_}
+
+        # Publish the Microsoft.PowerShell.NamedPipeConnection module for testing custom remote connections.
+        Publish-CustomConnectionTestModule | ForEach-Object { Write-Host $_ }
     }
 
     # All concatenated commands/arguments are suffixed with the delimiter (space)
@@ -1194,7 +1847,13 @@ function Start-PSPester {
 
     if ($Unelevate)
     {
-        $outputBufferFilePath = [System.IO.Path]::GetTempFileName()
+        if ($environment.IsWindows) {
+            $outputBufferFilePath = [System.IO.Path]::GetTempFileName()
+        }
+        else {
+            # Azure DevOps agents do not have Temp folder setup on Ubuntu 20.04, hence using HOME directory
+            $outputBufferFilePath = (Join-Path $env:HOME $([System.IO.Path]::GetRandomFileName()))
+        }
     }
 
     $command += "Invoke-Pester "
@@ -1221,7 +1880,7 @@ function Start-PSPester {
         $command += " *> $outputBufferFilePath; '__UNELEVATED_TESTS_THE_END__' >> $outputBufferFilePath"
     }
 
-    Write-Verbose $command
+    Write-Verbose $command -Verbose
 
     $script:nonewline = $true
     $script:inerror = $false
@@ -1276,7 +1935,14 @@ function Start-PSPester {
 
     $PSFlags = @("-noprofile")
     if (-not [string]::IsNullOrEmpty($ExperimentalFeatureName)) {
-        $configFile = [System.IO.Path]::GetTempFileName()
+
+        if ($environment.IsWindows) {
+            $configFile = [System.IO.Path]::GetTempFileName()
+        }
+        else {
+            $configFile = (Join-Path $env:HOME $([System.IO.Path]::GetRandomFileName()))
+        }
+
         $configFile = [System.IO.Path]::ChangeExtension($configFile, ".json")
 
         ## Create the config.json file to enable the given experimental feature.
@@ -1355,7 +2021,13 @@ function Start-PSPester {
         {
             if ($PassThru.IsPresent)
             {
-                $passThruFile = [System.IO.Path]::GetTempFileName()
+                if ($environment.IsWindows) {
+                    $passThruFile = [System.IO.Path]::GetTempFileName()
+                }
+                else {
+                    $passThruFile = Join-Path $env:HOME $([System.IO.Path]::GetRandomFileName())
+                }
+
                 try
                 {
                     $command += "| Export-Clixml -Path '$passThruFile' -Force"
@@ -1411,6 +2083,20 @@ function Start-PSPester {
 
 function Publish-TestResults
 {
+    <#
+    .SYNOPSIS
+        Publishes test result files to Azure DevOps or GitHub Actions.
+    .DESCRIPTION
+        In an Azure DevOps build (TF_BUILD), uploads the result file via a ##vso command
+        and attaches it as a build artifact. In GitHub Actions, copies the file to the
+        testResults directory under $env:RUNNER_WORKSPACE. Does nothing outside of CI environments.
+    .PARAMETER Title
+        The run title shown in the CI testing tab.
+    .PARAMETER Path
+        Path to the NUnit or XUnit result file to publish.
+    .PARAMETER Type
+        The result file format: 'NUnit' (default) or 'XUnit'.
+    #>
     param(
         [Parameter(Mandatory)]
         [string]
@@ -1440,7 +2126,7 @@ function Publish-TestResults
         # NUnit allowed values are: Passed, Failed, Inconclusive or Ignored (the spec says Skipped but it doesn' work with Azure DevOps)
         # https://github.com/nunit/docs/wiki/Test-Result-XML-Format
         # Azure DevOps Reporting is so messed up for NUnit V2 and doesn't follow their own spec
-        # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/publish-test-results?view=azure-devops&tabs=yaml
+        # https://learn.microsoft.com/azure/devops/pipelines/tasks/test/publish-test-results?view=azure-devops&tabs=yaml
         # So, we will map skipped to the actual value in the NUnit spec and they will ignore all results for tests which were not executed
         Get-Content $Path | ForEach-Object {
             $_ -replace 'result="Ignored"', 'result="Skipped"'
@@ -1448,7 +2134,7 @@ function Publish-TestResults
 
         # If we attempt to upload a result file which has no test cases in it, then vsts will produce a warning
         # so check to be sure we actually have a result file that contains test cases to upload.
-        # If the the "test-case" count is greater than 0, then we have results.
+        # If the "test-case" count is greater than 0, then we have results.
         # Regardless, we want to upload this as an artifact, so this logic doesn't pertain to that.
         if ( @(([xml](Get-Content $Path)).SelectNodes(".//test-case")).Count -gt 0 -or $Type -eq 'XUnit' ) {
             Write-Host "##vso[results.publish type=$Type;mergeResults=true;runTitle=$Title;publishRunAttachments=true;resultFiles=$tempFilePath;failTaskOnFailedTests=true]"
@@ -1456,25 +2142,64 @@ function Publish-TestResults
 
         $resolvedPath = (Resolve-Path -Path $Path).ProviderPath
         Write-Host "##vso[artifact.upload containerfolder=testResults;artifactname=testResults]$resolvedPath"
+    } elseif ($env:GITHUB_WORKFLOW -and $env:RUNNER_WORKSPACE) {
+        # In GitHub Actions
+        $destinationPath = Join-Path -Path $env:RUNNER_WORKSPACE -ChildPath 'testResults'
+
+        # Create the folder if it does not exist
+        if (!(Test-Path -Path $destinationPath)) {
+            $null = New-Item -ItemType Directory -Path $destinationPath -Force
+        }
+
+        Copy-Item -Path $Path -Destination $destinationPath -Force -Verbose
     }
 }
 
 function script:Start-UnelevatedProcess
 {
+    <#
+    .SYNOPSIS
+        Starts a process at an unelevated trust level on Windows.
+    .DESCRIPTION
+        Uses runas.exe /trustlevel:0x20000 to launch a process without elevation.
+        Only supported on Windows and non-arm64 architectures.
+    .PARAMETER process
+        The path to the executable to start.
+    .PARAMETER arguments
+        Arguments to pass to the executable.
+    #>
     param(
         [string]$process,
         [string[]]$arguments
     )
+
     if (-not $environment.IsWindows)
     {
         throw "Start-UnelevatedProcess is currently not supported on non-Windows platforms"
     }
 
+    if ($environment.OSArchitecture -eq 'arm64')
+    {
+        throw "Start-UnelevatedProcess is currently not supported on arm64 platforms"
+    }
+
     runas.exe /trustlevel:0x20000 "$process $arguments"
 }
 
 function Show-PSPesterError
 {
+    <#
+    .SYNOPSIS
+        Outputs a formatted error block for a single Pester test failure.
+    .DESCRIPTION
+        Accepts either an XmlElement from a NUnit result file or a PSCustomObject from
+        a Pester PassThru result, and writes a structured description/name/message/stack-trace
+        block to the log output.
+    .PARAMETER testFailure
+        An XML test-case element from a Pester NUnit result file (xml parameter set).
+    .PARAMETER testFailureObject
+        A Pester test-result PSCustomObject from a PassThru run (object parameter set).
+    #>
     [CmdletBinding(DefaultParameterSetName='xml')]
     param (
         [Parameter(ParameterSetName='xml',Mandatory)]
@@ -1488,31 +2213,119 @@ function Show-PSPesterError
         $description = $testFailure.description
         $name = $testFailure.name
         $message = $testFailure.failure.message
-        $StackTrace = $testFailure.failure."stack-trace"
+        $stack_trace = $testFailure.failure."stack-trace"
     }
     elseif ($PSCmdlet.ParameterSetName -eq 'object')
     {
         $description = $testFailureObject.Describe + '/' + $testFailureObject.Context
         $name = $testFailureObject.Name
         $message = $testFailureObject.FailureMessage
-        $StackTrace = $testFailureObject.StackTrace
+        $stack_trace = $testFailureObject.StackTrace
     }
     else
     {
         throw 'Unknown Show-PSPester parameter set'
     }
 
-    Write-Log -isError -message ("Description: " + $description)
-    Write-Log -isError -message ("Name:        " + $name)
-    Write-Log -isError -message "message:"
-    Write-Log -isError -message $message
-    Write-Log -isError -message "stack-trace:"
-    Write-Log -isError -message $StackTrace
+    # Empty line at the end is intentional formatting
+    Write-Log -isError -message @"
+Description: $description
+Name:        $name
+message:
+$message
+stack-trace:
+$stack_trace
+
+"@
+
+}
+
+function Get-PesterFailureFileInfo
+{
+    <#
+    .SYNOPSIS
+        Parses a Pester stack-trace string and returns the source file path and line number.
+    .DESCRIPTION
+        Tries several common stack-trace formats produced by Pester 4 and Pester 5 (on
+        both Windows and Unix) and returns a hashtable with File and Line keys.
+        Returns $null values for both keys when no pattern matches.
+    .PARAMETER StackTraceString
+        The raw stack trace text from a Pester test failure.
+    .OUTPUTS
+        System.Collections.Hashtable. A hashtable with 'File' (string) and 'Line' (string).
+    #>
+    [CmdletBinding()]
+    param (
+        [Parameter(Mandatory)]
+        [string]$StackTraceString
+    )
+
+    # Parse stack trace to extract file path and line number
+    # Common patterns:
+    # "at line: 123 in C:\path\to\file.ps1" (Pester 4)
+    # "at C:\path\to\file.ps1:123"
+    # "at <ScriptBlock>, C:\path\to\file.ps1: line 123"
+    # "at 1 | Should -Be 2, /path/to/file.ps1:123" (Pester 5)
+    # "at 1 | Should -Be 2, C:\path\to\file.ps1:123" (Pester 5 Windows)
+
+    $result = @{
+        File = $null
+        Line = $null
+    }
+
+    if ([string]::IsNullOrWhiteSpace($StackTraceString)) {
+        return $result
+    }
+
+    # Try pattern: "at line: 123 in <path>" (Pester 4)
+    if ($StackTraceString -match 'at line:\s*(\d+)\s+in\s+(.+?)(?:\r|\n|$)') {
+        $result.Line = $matches[1]
+        $result.File = $matches[2].Trim()
+        return $result
+    }
+
+    # Try pattern: ", <path>:123" (Pester 5 format)
+    # This handles both Unix paths (/path/file.ps1:123) and Windows paths (C:\path\file.ps1:123)
+    if ($StackTraceString -match ',\s*((?:[A-Za-z]:)?[\/\\].+?\.ps[m]?1):(\d+)') {
+        $result.File = $matches[1].Trim()
+        $result.Line = $matches[2]
+        return $result
+    }
+
+    # Try pattern: "at <path>:123" (without comma)
+    # Handle both absolute Unix and Windows paths
+    if ($StackTraceString -match 'at\s+((?:[A-Za-z]:)?[\/\\][^,]+?\.ps[m]?1):(\d+)(?:\r|\n|$)') {
+        $result.File = $matches[1].Trim()
+        $result.Line = $matches[2]
+        return $result
+    }
+
+    # Try pattern: "<path>: line 123"
+    if ($StackTraceString -match '((?:[A-Za-z]:)?[\/\\][^,]+?\.ps[m]?1):\s*line\s+(\d+)(?:\r|\n|$)') {
+        $result.File = $matches[1].Trim()
+        $result.Line = $matches[2]
+        return $result
+    }
+
+    # Try to extract just the file path if no line number found
+    if ($StackTraceString -match '(?:at\s+|in\s+)?((?:[A-Za-z]:)?[\/\\].+?\.ps[m]?1)') {
+        $result.File = $matches[1].Trim()
+    }
 
+    return $result
 }
 
 function Test-XUnitTestResults
 {
+    <#
+    .SYNOPSIS
+        Validates an xUnit XML result file and throws if any tests failed.
+    .DESCRIPTION
+        Parses the specified xUnit result file, logs description, name, message, and
+        stack trace for each failed test, then throws an exception summarizing the count.
+    .PARAMETER TestResultsFile
+        Path to the xUnit XML result file to validate.
+    #>
     param(
         [Parameter(Mandatory)]
         [ValidateNotNullOrEmpty()]
@@ -1545,15 +2358,19 @@ function Test-XUnitTestResults
         $description = $failure.type
         $name = $failure.method
         $message = $failure.failure.message
-        $StackTrace = $failure.failure.'stack-trace'
+        $stack_trace = $failure.failure.'stack-trace'
+
+        # Empty line at the end is intentional formatting
+        Write-Log -isError -message         @"
+        Description: $description
+        Name:        $name
+        message:
+        $message
+        stack-trace:
+        $stack_trace
+
+"@
 
-        Write-Log -isError -message ("Description: " + $description)
-        Write-Log -isError -message ("Name:        " + $name)
-        Write-Log -isError -message "message:"
-        Write-Log -isError -message $message
-        Write-Log -isError -message "stack-trace:"
-        Write-Log -isError -message $StackTrace
-        Write-Log -isError -message " "
     }
 
     throw "$($results.assemblies.assembly.failed) tests failed"
@@ -1564,6 +2381,23 @@ function Test-XUnitTestResults
 # Throw if a test failed
 function Test-PSPesterResults
 {
+    <#
+    .SYNOPSIS
+        Validates Pester test results and throws if any tests failed.
+    .DESCRIPTION
+        In file mode, reads a NUnit XML result file and logs each failure before throwing.
+        In object mode, inspects a Pester PassThru result object. Optionally permits
+        empty result sets.
+    .PARAMETER TestResultsFile
+        Path to the NUnit XML result file. Defaults to 'pester-tests.xml'.
+    .PARAMETER TestArea
+        Label for the test area, used in error messages. Defaults to 'test/powershell'.
+    .PARAMETER ResultObject
+        A Pester PassThru result object to inspect instead of parsing a file.
+    .PARAMETER CanHaveNoResult
+        When specified with ResultObject, suppresses the 'NO TESTS RUN' exception for
+        zero-count results.
+    #>
     [CmdletBinding(DefaultParameterSetName='file')]
     param(
         [Parameter(ParameterSetName='file')]
@@ -1589,7 +2423,8 @@ function Test-PSPesterResults
         $x = [xml](Get-Content -Raw $testResultsFile)
         if ([int]$x.'test-results'.failures -gt 0)
         {
-            Write-Log -isError -message "TEST FAILURES"
+            Write-LogGroupStart -Title 'TEST FAILURES'
+
             # switch between methods, SelectNode is not available on dotnet core
             if ( "System.Xml.XmlDocumentXPathExtensions" -as [Type] )
             {
@@ -1603,22 +2438,34 @@ function Test-PSPesterResults
             {
                 Show-PSPesterError -testFailure $testfail
             }
+
+            Write-LogGroupEnd -Title 'TEST FAILURES'
             throw "$($x.'test-results'.failures) tests in $TestArea failed"
         }
     }
     elseif ($PSCmdlet.ParameterSetName -eq 'PesterPassThruObject')
     {
-        if ($ResultObject.TotalCount -le 0 -and -not $CanHaveNoResult)
+        if (-not $CanHaveNoResult)
         {
-            throw 'NO TESTS RUN'
+            $noTotalCountMember = if ($null -eq (Get-Member -InputObject $ResultObject -Name 'TotalCount')) { $true } else { $false }
+            if ($noTotalCountMember)
+            {
+                Write-Verbose -Verbose -Message "`$ResultObject has no 'TotalCount' property"
+                Write-Verbose -Verbose "$($ResultObject | Out-String)"
+            }
+            if ($noTotalCountMember -or $ResultObject.TotalCount -le 0)
+            {
+                throw 'NO TESTS RUN'
+            }
         }
         elseif ($ResultObject.FailedCount -gt 0)
         {
-            Write-Log -isError -message 'TEST FAILURES'
+            Write-LogGroupStart -Title 'TEST FAILURES'
 
             $ResultObject.TestResult | Where-Object {$_.Passed -eq $false} | ForEach-Object {
                 Show-PSPesterError -testFailureObject $_
             }
+            Write-LogGroupEnd -Title 'TEST FAILURES'
 
             throw "$($ResultObject.FailedCount) tests in $TestArea failed"
         }
@@ -1626,8 +2473,24 @@ function Test-PSPesterResults
 }
 
 function Start-PSxUnit {
+    <#
+    .SYNOPSIS
+        Runs the xUnit tests for the PowerShell engine.
+    .DESCRIPTION
+        Executes 'dotnet test' in the test/xUnit directory against the built PowerShell
+        binaries. On Unix, copies native libraries and required dependencies into the test
+        output directory. Publishes results to CI when not in debug-logging mode.
+    .PARAMETER xUnitTestResultsFile
+        Path for the xUnit XML result file. Defaults to 'xUnitResults.xml'.
+    .PARAMETER DebugLogging
+        Enables detailed console test output instead of writing an XML result file.
+    .PARAMETER Filter
+        An xUnit filter expression to restrict which tests are run.
+    #>
     [CmdletBinding()]param(
-        [string] $xUnitTestResultsFile = "xUnitResults.xml"
+        [string] $xUnitTestResultsFile = "xUnitResults.xml",
+        [switch] $DebugLogging,
+        [string] $Filter
     )
 
     # Add .NET CLI tools to PATH
@@ -1638,9 +2501,15 @@ function Start-PSxUnit {
         throw "PowerShell must be built before running tests!"
     }
 
+    $originalDOTNET_ROOT = $env:DOTNET_ROOT
+
     try {
         Push-Location $PSScriptRoot/test/xUnit
 
+        # Add workaround to unblock xUnit testing see issue: https://github.com/dotnet/sdk/issues/26462
+        $dotnetPath = if ($environment.IsWindows) { "$env:LocalAppData\Microsoft\dotnet" } else { "$env:HOME/.dotnet" }
+        $env:DOTNET_ROOT = $dotnetPath
+
         # Path manipulation to obtain test project output directory
 
         if(-not $environment.IsWindows)
@@ -1679,73 +2548,140 @@ function Start-PSxUnit {
 
         # We run the xUnit tests sequentially to avoid race conditions caused by manipulating the config.json file.
         # xUnit tests run in parallel by default. To make them run sequentially, we need to define the 'xunit.runner.json' file.
-        dotnet test --configuration $Options.configuration --test-adapter-path:. "--logger:xunit;LogFilePath=$xUnitTestResultsFile"
+        $extraParams = @()
+        if($Filter) {
+            $extraParams += @(
+                '--filter'
+                $Filter
+            )
+        }
+
+        if($DebugLogging) {
+            $extraParams += @(
+                "--logger:console;verbosity=detailed"
+            )
+        } else {
+            $extraParams += @(
+                "--logger:xunit;LogFilePath=$xUnitTestResultsFile"
+            )
+        }
+        dotnet test @extraParams --configuration $Options.configuration --test-adapter-path:.
 
-        Publish-TestResults -Path $xUnitTestResultsFile -Type 'XUnit' -Title 'Xunit Sequential'
+        if(!$DebugLogging){
+            Publish-TestResults -Path $xUnitTestResultsFile -Type 'XUnit' -Title 'Xunit Sequential'
+        }
     }
     finally {
+        $env:DOTNET_ROOT = $originalDOTNET_ROOT
         Pop-Location
     }
 }
 
 function Install-Dotnet {
+    <#
+    .SYNOPSIS
+        Installs the .NET SDK using the official install script.
+    .DESCRIPTION
+        Downloads and runs dotnet-install.sh (Linux/macOS) or dotnet-install.ps1 (Windows)
+        to install the specified SDK version into the user-local dotnet installation directory.
+    .PARAMETER Channel
+        The release channel to install from when no explicit version is given.
+    .PARAMETER Version
+        The exact SDK version to install. Defaults to the version required by this repository.
+    .PARAMETER Quality
+        The quality level (e.g. 'GA', 'preview') used when installing by channel.
+    .PARAMETER RemovePreviousVersion
+        Attempts to uninstall previously installed dotnet packages before installing.
+    .PARAMETER NoSudo
+        Omits sudo from install commands, useful inside containers running as root.
+    .PARAMETER InstallDir
+        Custom installation directory for the .NET SDK.
+    .PARAMETER AzureFeed
+        Override URL for the Azure CDN feed used to download the SDK.
+    .PARAMETER FeedCredential
+        Credential token for accessing a private Azure feed.
+    #>
     [CmdletBinding()]
     param(
         [string]$Channel = $dotnetCLIChannel,
         [string]$Version = $dotnetCLIRequiredVersion,
+        [string]$Quality = $dotnetCLIQuality,
+        [switch]$RemovePreviousVersion,
         [switch]$NoSudo,
         [string]$InstallDir,
         [string]$AzureFeed,
         [string]$FeedCredential
     )
 
+    Write-LogGroupStart -Title "Install .NET SDK $Version"
+    Write-Verbose -Verbose "In install-dotnet"
+
     # This allows sudo install to be optional; needed when running in containers / as root
     # Note that when it is null, Invoke-Expression (but not &) must be used to interpolate properly
     $sudo = if (!$NoSudo) { "sudo" }
 
-    $installObtainUrl = "https://dotnet.microsoft.com/download/dotnet-core/scripts/v1"
+    $installObtainUrl = "https://builds.dotnet.microsoft.com/dotnet/scripts/v1"
+    #$installObtainUrl = "https://dotnet.microsoft.com/download/dotnet/scripts/v1"
     $uninstallObtainUrl = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain"
 
     # Install for Linux and OS X
     if ($environment.IsLinux -or $environment.IsMacOS) {
         $wget = Get-Command -Name wget -CommandType Application -TotalCount 1 -ErrorAction Stop
 
-        # Uninstall all previous dotnet packages
-        $uninstallScript = if ($environment.IsLinux -and $environment.IsUbuntu) {
-            "dotnet-uninstall-debian-packages.sh"
-        } elseif ($environment.IsMacOS) {
-            "dotnet-uninstall-pkgs.sh"
-        }
+        # Attempt to uninstall previous dotnet packages if requested
+        if ($RemovePreviousVersion) {
+            $uninstallScript = if ($environment.IsLinux -and $environment.IsUbuntu) {
+                "dotnet-uninstall-debian-packages.sh"
+            } elseif ($environment.IsMacOS) {
+                "dotnet-uninstall-pkgs.sh"
+            }
 
-        if ($uninstallScript) {
-            Start-NativeExecution {
-                & $wget $uninstallObtainUrl/uninstall/$uninstallScript
-                Invoke-Expression "$sudo bash ./$uninstallScript"
+            if ($uninstallScript) {
+                Start-NativeExecution {
+                    & $wget $uninstallObtainUrl/uninstall/$uninstallScript
+                    Invoke-Expression "$sudo bash ./$uninstallScript"
+                }
+            } else {
+                Write-Warning "This script only removes prior versions of dotnet for Ubuntu and OS X"
             }
-        } else {
-            Write-Warning "This script only removes prior versions of dotnet for Ubuntu and OS X"
         }
 
+        Write-Verbose -Verbose "Invoking install script"
+
         # Install new dotnet 1.1.0 preview packages
         $installScript = "dotnet-install.sh"
-        Start-NativeExecution {
-            Write-Verbose -Message "downloading install script from $installObtainUrl/$installScript ..." -Verbose
+
+        Write-Verbose -Message "downloading install script from $installObtainUrl/$installScript ..." -Verbose
             & $wget $installObtainUrl/$installScript
 
             if ((Get-ChildItem "./$installScript").Length -eq 0) {
                 throw "./$installScript was 0 length"
             }
 
-            $bashArgs = @("./$installScript", '-c', $Channel, '-v', $Version)
+            if ($Version) {
+                $bashArgs = @("./$installScript", '-v', $Version)
+            }
+            elseif ($Channel) {
+                $bashArgs = @("./$installScript", '-c', $Channel, '-q', $Quality)
+            }
 
             if ($InstallDir) {
                 $bashArgs += @('-i', $InstallDir)
             }
 
             if ($AzureFeed) {
-                $bashArgs += @('-AzureFeed', $AzureFeed, '-FeedCredential', $FeedCredential)
+                $bashArgs += @('-AzureFeed', $AzureFeed)
             }
 
+            if ($FeedCredential) {
+                $bashArgs += @('-FeedCredential', $FeedCredential)
+            }
+
+            $bashArgs += @('-skipnonversionedfiles')
+
+            $bashArgs -join ' ' | Write-Verbose -Verbose
+
+        Start-NativeExecution {
             bash @bashArgs
         }
     } elseif ($environment.IsWindows) {
@@ -1753,9 +2689,12 @@ function Install-Dotnet {
         $installScript = "dotnet-install.ps1"
         Invoke-WebRequest -Uri $installObtainUrl/$installScript -OutFile $installScript
         if (-not $environment.IsCoreCLR) {
-            $installArgs = @{
-                Channel = $Channel
-                Version = $Version
+            $installArgs = @{}
+            if ($Version) {
+                $installArgs += @{ Version = $Version }
+            } elseif ($Channel) {
+                $installArgs += @{ Quality = $Quality }
+                $installArgs += @{ Channel = $Channel }
             }
 
             if ($InstallDir) {
@@ -1763,72 +2702,135 @@ function Install-Dotnet {
             }
 
             if ($AzureFeed) {
-                $installArgs += @{
-                    AzureFeed       = $AzureFeed
-                    $FeedCredential = $FeedCredential
-                }
+                $installArgs += @{AzureFeed = $AzureFeed}
             }
 
+            if ($FeedCredential) {
+                $installArgs += @{FeedCredential = $FeedCredential}
+            }
+
+            $installArgs += @{ SkipNonVersionedFiles = $true }
+
+            $installArgs | Out-String | Write-Verbose -Verbose
             & ./$installScript @installArgs
         }
         else {
             # dotnet-install.ps1 uses APIs that are not supported in .NET Core, so we run it with Windows PowerShell
             $fullPSPath = Join-Path -Path $env:windir -ChildPath "System32\WindowsPowerShell\v1.0\powershell.exe"
-            $fullDotnetInstallPath = Join-Path -Path $PWD.Path -ChildPath $installScript
-            Start-NativeExecution {
-                $psArgs = @('-NoLogo', '-NoProfile', '-File', $fullDotnetInstallPath, '-Channel', $Channel, '-Version', $Version)
+            $fullDotnetInstallPath = Join-Path -Path (Convert-Path -Path $PWD.Path) -ChildPath $installScript
 
-                if ($InstallDir) {
-                    $psArgs += @('-InstallDir', $InstallDir)
-                }
+            if ($Version) {
+                $psArgs = @('-NoLogo', '-NoProfile', '-File', $fullDotnetInstallPath, '-Version', $Version)
+            }
+            elseif ($Channel) {
+                $psArgs = @('-NoLogo', '-NoProfile', '-File', $fullDotnetInstallPath, '-Channel', $Channel, '-Quality', $Quality)
+            }
 
-                if ($AzureFeed) {
-                    $psArgs += @('-AzureFeed', $AzureFeed, '-FeedCredential', $FeedCredential)
-                }
+            if ($InstallDir) {
+                $psArgs += @('-InstallDir', $InstallDir)
+            }
+
+            if ($AzureFeed) {
+                $psArgs += @('-AzureFeed', $AzureFeed)
+            }
+
+            if ($FeedCredential) {
+                $psArgs += @('-FeedCredential', $FeedCredential)
+            }
 
+            $psArgs += @('-SkipNonVersionedFiles')
+
+            # Removing the verbose message to not expose the secret
+            # $psArgs -join ' ' | Write-Verbose -Verbose
+
+            Start-NativeExecution {
                 & $fullPSPath @psArgs
             }
         }
     }
+    Write-LogGroupEnd -Title "Install .NET SDK $Version"
 }
 
 function Get-RedHatPackageManager {
-    if ($environment.IsCentOS) {
+    <#
+    .SYNOPSIS
+        Returns the install command prefix for the available Red Hat-family package manager.
+    .DESCRIPTION
+        Detects whether yum, dnf, or tdnf is installed and returns the corresponding
+        install command string for use in bootstrapping scripts.
+    .OUTPUTS
+        System.String. A package-manager install command such as 'dnf install -y -q'.
+    #>
+    if ($environment.IsCentOS -or (Get-Command -Name yum -CommandType Application -ErrorAction SilentlyContinue)) {
         "yum install -y -q"
-    } elseif ($environment.IsFedora) {
+    } elseif ($environment.IsFedora -or (Get-Command -Name dnf -CommandType Application -ErrorAction SilentlyContinue)) {
         "dnf install -y -q"
+    } elseif ($environment.IsMariner -or (Get-Command -Name Test-DscConfiguration -CommandType Application -ErrorAction SilentlyContinue)) {
+        "tdnf install -y -q"
     } else {
         throw "Error determining package manager for this distribution."
     }
 }
 
 function Start-PSBootstrap {
-    [CmdletBinding(
-        SupportsShouldProcess=$true,
-        ConfirmImpact="High")]
+    <#
+    .SYNOPSIS
+        Installs build dependencies for PowerShell.
+    .DESCRIPTION
+        Depending on the selected scenario, installs native OS packages, the required
+        .NET SDK, Windows packaging tools (WiX), and/or .NET global tools (dotnet-format).
+        Supports Linux, macOS, and Windows.
+    .PARAMETER Channel
+        The .NET SDK release channel to use when installing by channel.
+    .PARAMETER Version
+        The exact .NET SDK version to install. Defaults to the required version.
+    .PARAMETER NoSudo
+        Omits sudo from native-package install commands, useful inside containers.
+    .PARAMETER BuildLinuxArm
+        Installs Linux ARM cross-compilation dependencies (Ubuntu/AzureLinux only).
+    .PARAMETER Force
+        Forces .NET SDK reinstallation even if the correct version is already present.
+    .PARAMETER Scenario
+        What to install: 'Package' (packaging tools), 'DotNet' (.NET SDK),
+        'Both' (Package + DotNet), 'Tools' (.NET global tools), or 'All' (everything).
+    #>
+    [CmdletBinding()]
     param(
         [string]$Channel = $dotnetCLIChannel,
         # we currently pin dotnet-cli version, and will
         # update it when more stable version comes out.
         [string]$Version = $dotnetCLIRequiredVersion,
-        [switch]$Package,
         [switch]$NoSudo,
         [switch]$BuildLinuxArm,
-        [switch]$Force
+        [switch]$Force,
+        [Parameter(Mandatory = $true)]
+        # Package: Install dependencies for packaging tools (rpmbuild, dpkg-deb, pkgbuild, WiX)
+        # DotNet: Install the .NET SDK
+        # Both: Package and DotNet scenarios
+        # Tools: Install .NET global tools (e.g., dotnet-format)
+        # All: Install all dependencies (packaging, .NET SDK, and tools)
+        [ValidateSet("Package", "DotNet", "Both", "Tools", "All")]
+        [string]$Scenario = "Package"
     )
 
     Write-Log -message "Installing PowerShell build dependencies"
 
     Push-Location $PSScriptRoot/tools
 
+    if ($dotnetSDKVersionOveride) {
+        $Version = $dotnetSDKVersionOveride
+    }
+
     try {
         if ($environment.IsLinux -or $environment.IsMacOS) {
+            Write-LogGroupStart -Title "Install Native Dependencies"
             # This allows sudo install to be optional; needed when running in containers / as root
             # Note that when it is null, Invoke-Expression (but not &) must be used to interpolate properly
             $sudo = if (!$NoSudo) { "sudo" }
 
-            if ($BuildLinuxArm -and $environment.IsLinux -and -not $environment.IsUbuntu) {
-                Write-Error "Cross compiling for linux-arm is only supported on Ubuntu environment"
+            if ($BuildLinuxArm -and $environment.IsLinux -and -not $environment.IsUbuntu -and -not $environment.IsMariner) {
+                Write-Error "Cross compiling for linux-arm is only supported on AzureLinux/Ubuntu environment"
+                Write-LogGroupEnd -Title "Install Native Dependencies"
                 return
             }
 
@@ -1836,19 +2838,16 @@ function Start-PSBootstrap {
             $Deps = @()
             if ($environment.IsLinux -and $environment.IsUbuntu) {
                 # Build tools
-                $Deps += "curl", "g++", "cmake", "make"
-
-                if ($BuildLinuxArm) {
-                    $Deps += "gcc-arm-linux-gnueabihf", "g++-arm-linux-gnueabihf"
-                }
+                $Deps += "curl", "wget"
 
                 # .NET Core required runtime libraries
-                $Deps += "libunwind8"
                 if ($environment.IsUbuntu16) { $Deps += "libicu55" }
                 elseif ($environment.IsUbuntu18) { $Deps += "libicu60"}
 
                 # Packaging tools
-                if ($Package) { $Deps += "ruby-dev", "groff", "libffi-dev" }
+                # Note: ruby-dev, libffi-dev, g++, and make are no longer needed for DEB packaging
+                # DEB packages now use native dpkg-deb (pre-installed)
+                if ($Scenario -eq 'Both' -or $Scenario -eq 'Package') { $Deps += "groff", "rpm" }
 
                 # Install dependencies
                 # change the fontend from apt-get to noninteractive
@@ -1864,15 +2863,17 @@ function Start-PSBootstrap {
                     # change the apt frontend back to the original
                     $env:DEBIAN_FRONTEND=$originalDebianFrontEnd
                 }
-            } elseif ($environment.IsLinux -and $environment.IsRedHatFamily) {
+            } elseif ($environment.IsLinux -and ($environment.IsRedHatFamily -or $environment.IsMariner)) {
                 # Build tools
-                $Deps += "which", "curl", "gcc-c++", "cmake", "make"
+                $Deps += "which", "curl", "wget"
 
                 # .NET Core required runtime libraries
-                $Deps += "libicu", "libunwind"
+                $Deps += "libicu", "openssl-libs"
 
                 # Packaging tools
-                if ($Package) { $Deps += "ruby-devel", "rpm-build", "groff", 'libffi-devel' }
+                # Note: ruby-devel and libffi-devel are no longer needed
+                # RPM packages use rpmbuild, DEB packages use dpkg-deb
+                if ($Scenario -eq 'Both' -or $Scenario -eq 'Package') { $Deps += "rpm-build", "groff" }
 
                 $PackageManager = Get-RedHatPackageManager
 
@@ -1890,10 +2891,11 @@ function Start-PSBootstrap {
                 }
             } elseif ($environment.IsLinux -and $environment.IsSUSEFamily) {
                 # Build tools
-                $Deps += "gcc", "cmake", "make"
+                $Deps += "wget"
 
                 # Packaging tools
-                if ($Package) { $Deps += "ruby-devel", "rpmbuild", "groff", 'libffi-devel' }
+                # Note: ruby-devel and libffi-devel are no longer needed for packaging
+                if ($Scenario -eq 'Both' -or $Scenario -eq 'Package') { $Deps += "rpmbuild", "groff" }
 
                 $PackageManager = "zypper --non-interactive install"
                 $baseCommand = "$sudo $PackageManager"
@@ -1910,76 +2912,108 @@ function Start-PSBootstrap {
                 }
             } elseif ($environment.IsMacOS) {
                 if ($environment.UsingHomebrew) {
-                    $PackageManager = "brew"
+                    $baseCommand = "brew install --quiet"
                 } elseif ($environment.UsingMacports) {
-                    $PackageManager = "$sudo port"
+                    $baseCommand = "$sudo port -q install"
                 }
 
-                # Build tools
-                $Deps += "cmake"
+                # wget for downloading dotnet
+                $Deps += "wget"
 
                 # .NET Core required runtime libraries
                 $Deps += "openssl"
 
                 # Install dependencies
                 # ignore exitcode, because they may be already installed
-                Start-NativeExecution ([ScriptBlock]::Create("$PackageManager install $Deps")) -IgnoreExitcode
+                Start-NativeExecution ([ScriptBlock]::Create("$baseCommand $Deps")) -IgnoreExitcode
             } elseif ($environment.IsLinux -and $environment.IsAlpine) {
-                $Deps += 'libunwind', 'libcurl', 'bash', 'cmake', 'clang', 'build-base', 'git', 'curl'
+                $Deps += 'libunwind', 'libcurl', 'bash', 'build-base', 'git', 'curl', 'wget'
 
                 Start-NativeExecution {
                     Invoke-Expression "apk add $Deps"
                 }
             }
 
-            # Install [fpm](https://github.com/jordansissel/fpm) and [ronn](https://github.com/rtomayko/ronn)
-            if ($Package) {
-                try {
-                    # We cannot guess if the user wants to run gem install as root on linux and windows,
-                    # but macOs usually requires sudo
-                    $gemsudo = ''
-                    if($environment.IsMacOS -or $env:TF_BUILD) {
-                        $gemsudo = $sudo
+            if ($Scenario -in 'All', 'Both', 'Package') {
+                # For RPM-based systems, ensure rpmbuild is available
+                if ($environment.IsLinux -and ($environment.IsRedHatFamily -or $environment.IsSUSEFamily -or $environment.IsMariner)) {
+                    Write-Verbose -Verbose "Checking for rpmbuild..."
+                    if (!(Get-Command rpmbuild -ErrorAction SilentlyContinue)) {
+                        Write-Warning "rpmbuild not found. Installing rpm-build package..."
+                        Start-NativeExecution -sb ([ScriptBlock]::Create("$sudo $PackageManager install -y rpm-build")) -IgnoreExitcode
+                    }
+                }
+
+                # For Debian-based systems and Mariner, ensure dpkg-deb is available
+                if ($environment.IsLinux -and ($environment.IsDebianFamily -or $environment.IsMariner)) {
+                    Write-Verbose -Verbose "Checking for dpkg-deb..."
+                    if (!(Get-Command dpkg-deb -ErrorAction SilentlyContinue)) {
+                        Write-Warning "dpkg-deb not found. Installing dpkg package..."
+                        if ($environment.IsMariner) {
+                            # For Mariner (Azure Linux), install the extended repo first to access dpkg.
+                            Write-Verbose -verbose "BEGIN: /etc/os-release content:"
+                            Get-Content /etc/os-release | Write-Verbose -verbose
+                            Write-Verbose -verbose "END: /etc/os-release content"
+
+                            Write-Verbose -Verbose "Installing azurelinux-repos-extended for Mariner..."
+
+                            Start-NativeExecution -sb ([ScriptBlock]::Create("$sudo $PackageManager azurelinux-repos-extended")) -IgnoreExitcode -Verbose
+                            Start-NativeExecution -sb ([ScriptBlock]::Create("$sudo $PackageManager dpkg")) -IgnoreExitcode -Verbose
+                        } else {
+                            Start-NativeExecution -sb ([ScriptBlock]::Create("$sudo apt-get install -y dpkg")) -IgnoreExitcode
+                        }
                     }
-                    Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install ffi -v 1.12.0 --no-document"))
-                    Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install fpm -v 1.11.0 --no-document"))
-                    Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install ronn -v 0.7.3 --no-document"))
-                } catch {
-                    Write-Warning "Installation of fpm and ronn gems failed! Must resolve manually."
                 }
             }
+            Write-LogGroupEnd -Title "Install Native Dependencies"
         }
 
-        # Try to locate dotnet-SDK before installing it
-        Find-Dotnet
+        if ($Scenario -in 'All', 'Both', 'DotNet') {
+            Write-LogGroupStart -Title "Install .NET SDK"
 
-        # Install dotnet-SDK
-        $dotNetExists = precheck 'dotnet' $null
-        $dotNetVersion = [string]::Empty
-        if($dotNetExists) {
-            $dotNetVersion = Start-NativeExecution -sb { dotnet --version } -IgnoreExitcode
-        }
+            Write-Verbose -Verbose "Calling Find-Dotnet from Start-PSBootstrap"
+
+            # Try to locate dotnet-SDK before installing it
+            Find-Dotnet
 
-        if(!$dotNetExists -or $dotNetVersion -ne $dotnetCLIRequiredVersion -or $Force.IsPresent) {
-            if($Force.IsPresent) {
-                Write-Log -message "Installing dotnet due to -Force."
+            Write-Verbose -Verbose "Back from calling Find-Dotnet from Start-PSBootstrap"
+
+            # Install dotnet-SDK
+            $dotNetExists = precheck 'dotnet' $null
+            $dotNetVersion = [string]::Empty
+            if($dotNetExists) {
+                $dotNetVersion = Find-RequiredSDK $dotnetCLIRequiredVersion
             }
-            elseif(!$dotNetExists) {
-                Write-Log -message "dotnet not present.  Installing dotnet."
+
+            if(!$dotNetExists -or $dotNetVersion -ne $dotnetCLIRequiredVersion -or $Force.IsPresent) {
+                if($Force.IsPresent) {
+                    Write-Log -message "Installing dotnet due to -Force."
+                }
+                elseif(!$dotNetExists) {
+                    Write-Log -message "dotnet not present.  Installing dotnet."
+                }
+                else {
+                    Write-Log -message "dotnet out of date ($dotNetVersion).  Updating dotnet."
+                }
+
+                $DotnetArguments = @{ Channel=$Channel; Version=$Version; NoSudo=$NoSudo }
+
+                if ($dotnetAzureFeed) {
+                    $null = $DotnetArguments.Add("AzureFeed", $dotnetAzureFeed)
+                    $null = $DotnetArguments.Add("FeedCredential", $dotnetAzureFeedSecret)
+                }
+
+                Install-Dotnet @DotnetArguments
             }
             else {
-                Write-Log -message "dotnet out of date ($dotNetVersion).  Updating dotnet."
+                Write-Log -message "dotnet is already installed.  Skipping installation."
             }
-
-            $DotnetArguments = @{ Channel=$Channel; Version=$Version; NoSudo=$NoSudo }
-            Install-Dotnet @DotnetArguments
-        }
-        else {
-            Write-Log -message "dotnet is already installed.  Skipping installation."
+            Write-LogGroupEnd -Title "Install .NET SDK"
         }
 
         # Install Windows dependencies if `-Package` or `-BuildWindowsNative` is specified
         if ($environment.IsWindows) {
+            Write-LogGroupStart -Title "Install Windows Dependencies"
             ## The VSCode build task requires 'pwsh.exe' to be found in Path
             if (-not (Get-Command -Name pwsh.exe -CommandType Application -ErrorAction Ignore))
             {
@@ -1987,19 +3021,104 @@ function Start-PSBootstrap {
                 $psInstallFile = [System.IO.Path]::Combine($PSScriptRoot, "tools", "install-powershell.ps1")
                 & $psInstallFile -AddToPath
             }
+            Write-LogGroupEnd -Title "Install Windows Dependencies"
+        }
+
+        # Ensure dotnet is available
+        Find-Dotnet
+
+        if (-not $env:TF_BUILD) {
+            if ($Scenario -in 'All', 'Tools') {
+                Write-LogGroupStart -Title "Install .NET Global Tools"
+                Write-Log -message "Installing .NET global tools"
+
+                # Install dotnet-format
+                Write-Verbose -Verbose "Installing dotnet-format global tool"
+                Start-NativeExecution {
+                    dotnet tool install --global dotnet-format
+                }
+                Write-LogGroupEnd -Title "Install .NET Global Tools"
+            }
+        }
+
+        if ($env:TF_BUILD) {
+            Write-LogGroupStart -Title "Capture NuGet Sources"
+            Write-Verbose -Verbose "--- Start - Capturing nuget sources"
+            dotnet nuget list source --format detailed
+            Write-Verbose -Verbose "--- End   - Capturing nuget sources"
+            Write-LogGroupEnd -Title "Capture NuGet Sources"
         }
     } finally {
         Pop-Location
     }
 }
 
+## If the required SDK version is found, return it.
+## Otherwise, return the latest installed SDK version that can be found.
+function Find-RequiredSDK {
+    <#
+    .SYNOPSIS
+        Returns the installed .NET SDK version that best satisfies the required version.
+    .DESCRIPTION
+        Lists installed SDKs with 'dotnet --list-sdks'. Returns the required version
+        string if it is installed; otherwise returns the newest installed SDK version.
+    .PARAMETER requiredSdkVersion
+        The exact .NET SDK version string to search for.
+    .OUTPUTS
+        System.String. The matched or newest installed SDK version string.
+    #>
+    param(
+        [Parameter(Mandatory, Position = 0)]
+        [string] $requiredSdkVersion
+    )
+
+    $output = Start-NativeExecution -sb { dotnet --list-sdks } -IgnoreExitcode 2> $null
+
+    $installedSdkVersions = $output | ForEach-Object {
+        # this splits strings like
+        # '6.0.202 [C:\Program Files\dotnet\sdk]'
+        # '7.0.100-preview.2.22153.17 [C:\Users\johndoe\AppData\Local\Microsoft\dotnet\sdk]'
+        # into version and path parts.
+        ($_ -split '\s',2)[0]
+    }
+
+    if ($installedSdkVersions -contains $requiredSdkVersion) {
+        $requiredSdkVersion
+    }
+    else {
+        $installedSdkVersions | Sort-Object -Descending | Select-Object -First 1
+    }
+}
+
 function Start-DevPowerShell {
+    <#
+    .SYNOPSIS
+        Launches a PowerShell session using the locally built pwsh.
+    .DESCRIPTION
+        Starts a new pwsh process from the build output directory, optionally setting
+        the DEVPATH environment variable, redirecting PSModulePath to the built Modules
+        directory, and loading or suppressing the user profile.
+    .PARAMETER ArgumentList
+        Additional arguments passed to the pwsh process.
+    .PARAMETER LoadProfile
+        When specified, the user profile is loaded (by default -noprofile is prepended).
+    .PARAMETER Configuration
+        Build configuration whose output directory to use (ConfigurationParamSet).
+    .PARAMETER BinDir
+        Explicit path to the directory containing the pwsh binary (BinDirParamSet).
+    .PARAMETER NoNewWindow
+        Runs pwsh in the current console window instead of a new one.
+    .PARAMETER Command
+        A command string passed to pwsh via -command.
+    .PARAMETER KeepPSModulePath
+        Preserves the existing PSModulePath instead of redirecting it to the build output.
+    #>
     [CmdletBinding(DefaultParameterSetName='ConfigurationParamSet')]
     param(
         [string[]]$ArgumentList = @(),
         [switch]$LoadProfile,
         [Parameter(ParameterSetName='ConfigurationParamSet')]
-        [ValidateSet("Debug", "Release", "CodeCoverage", '')] # should match New-PSOptions -Configuration values
+        [ValidateSet('Debug', 'Release', 'CodeCoverage', 'StaticAnalysis', '')] # should match New-PSOptions -Configuration values
         [string]$Configuration,
         [Parameter(ParameterSetName='BinDirParamSet')]
         [string]$BinDir,
@@ -2038,7 +3157,7 @@ function Start-DevPowerShell {
 
         # splatting for the win
         $startProcessArgs = @{
-            FilePath = "$BinDir\pwsh"
+            FilePath = Join-Path $BinDir 'pwsh'
         }
 
         if ($ArgumentList) {
@@ -2061,6 +3180,16 @@ function Start-DevPowerShell {
 
 function Start-TypeGen
 {
+    <#
+    .SYNOPSIS
+        Generates the CorePsTypeCatalog type-catalog file.
+    .DESCRIPTION
+        Invokes the TypeCatalogGen .NET tool to produce CorePsTypeCatalog.cs, which maps
+        .NET types to their containing assemblies. The output .inc file name varies by
+        runtime to allow simultaneous builds on Windows and WSL.
+    .PARAMETER IncFileName
+        Name of the .inc file listing dependent assemblies. Defaults to 'powershell.inc'.
+    #>
     [CmdletBinding()]
     param
     (
@@ -2071,38 +3200,17 @@ function Start-TypeGen
     # Add .NET CLI tools to PATH
     Find-Dotnet
 
-    # This custom target depends on 'ResolveAssemblyReferencesDesignTime', whose definition can be found in the sdk folder.
-    # To find the available properties of '_ReferencesFromRAR' when switching to a new dotnet sdk, follow the steps below:
-    #   1. create a dummy project using the new dotnet sdk.
-    #   2. build the dummy project with this command:
-    #      dotnet msbuild .\dummy.csproj /t:ResolveAssemblyReferencesDesignTime /fileLogger /noconsolelogger /v:diag
-    #   3. search '_ReferencesFromRAR' in the produced 'msbuild.log' file. You will find the properties there.
-    $GetDependenciesTargetPath = "$PSScriptRoot/src/Microsoft.PowerShell.SDK/obj/Microsoft.PowerShell.SDK.csproj.TypeCatalog.targets"
-    $GetDependenciesTargetValue = @'
-<Project>
-    <Target Name="_GetDependencies"
-            DependsOnTargets="ResolveAssemblyReferencesDesignTime">
-        <ItemGroup>
-            <_RefAssemblyPath Include="%(_ReferencesFromRAR.OriginalItemSpec)%3B" Condition=" '%(_ReferencesFromRAR.NuGetPackageId)' != 'Microsoft.Management.Infrastructure' "/>
-        </ItemGroup>
-        <WriteLinesToFile File="$(_DependencyFile)" Lines="@(_RefAssemblyPath)" Overwrite="true" />
-    </Target>
-</Project>
-'@
-    New-Item -ItemType Directory -Path (Split-Path -Path $GetDependenciesTargetPath -Parent) -Force > $null
-    Set-Content -Path $GetDependenciesTargetPath -Value $GetDependenciesTargetValue -Force -Encoding Ascii
-
     Push-Location "$PSScriptRoot/src/Microsoft.PowerShell.SDK"
     try {
         $ps_inc_file = "$PSScriptRoot/src/TypeCatalogGen/$IncFileName"
-        dotnet msbuild .\Microsoft.PowerShell.SDK.csproj /t:_GetDependencies "/property:DesignTimeBuild=true;_DependencyFile=$ps_inc_file" /nologo
+        Start-NativeExecution { dotnet msbuild .\Microsoft.PowerShell.SDK.csproj /t:_GetDependencies "/property:DesignTimeBuild=true;_DependencyFile=$ps_inc_file" /nologo }
     } finally {
         Pop-Location
     }
 
     Push-Location "$PSScriptRoot/src/TypeCatalogGen"
     try {
-        dotnet run ../System.Management.Automation/CoreCLR/CorePsTypeCatalog.cs $IncFileName
+        Start-NativeExecution { dotnet run -- ../System.Management.Automation/CoreCLR/CorePsTypeCatalog.cs $IncFileName }
     } finally {
         Pop-Location
     }
@@ -2110,6 +3218,13 @@ function Start-TypeGen
 
 function Start-ResGen
 {
+    <#
+    .SYNOPSIS
+        Regenerates C# resource bindings from resx files.
+    .DESCRIPTION
+        Runs the ResGen .NET tool in src/ResGen to produce strongly-typed resource classes
+        for all resx files in the PowerShell project.
+    #>
     [CmdletBinding()]
     param()
 
@@ -2124,31 +3239,138 @@ function Start-ResGen
     }
 }
 
-function Find-Dotnet() {
+function Add-PSEnvironmentPath {
+    <#
+    .SYNOPSIS
+        Adds a path to the process PATH and persists to GitHub Actions workflow if running in GitHub Actions
+    .PARAMETER Path
+        Path to add to PATH
+    .PARAMETER Prepend
+        If specified, prepends the path instead of appending
+    #>
+    param (
+        [Parameter(Mandatory)]
+        [string]$Path,
+
+        [switch]$Prepend
+    )
+
+    # Set in current process
+    if ($Prepend) {
+        $env:PATH = $Path + [IO.Path]::PathSeparator + $env:PATH
+    } else {
+        $env:PATH += [IO.Path]::PathSeparator + $Path
+    }
+
+    # Persist to GitHub Actions workflow if running in GitHub Actions
+    if ($env:GITHUB_ACTIONS -eq 'true') {
+        Write-Verbose -Verbose "Adding $Path to GITHUB_PATH"
+        Add-Content -Path $env:GITHUB_PATH -Value $Path
+    }
+}
+
+function Set-PSEnvironmentVariable {
+    <#
+    .SYNOPSIS
+        Sets an environment variable in the process and persists to GitHub Actions workflow if running in GitHub Actions
+    .PARAMETER Name
+        The name of the environment variable
+    .PARAMETER Value
+        The value of the environment variable
+    #>
+    param (
+        [Parameter(Mandatory)]
+        [string]$Name,
+
+        [Parameter(Mandatory)]
+        [string]$Value
+    )
+
+    # Set in current process
+    Set-Item -Path "env:$Name" -Value $Value
+
+    # Persist to GitHub Actions workflow if running in GitHub Actions
+    if ($env:GITHUB_ACTIONS -eq 'true') {
+        Write-Verbose -Verbose "Setting $Name in GITHUB_ENV"
+        Add-Content -Path $env:GITHUB_ENV -Value "$Name=$Value"
+    }
+}
+
+function Find-Dotnet {
+    <#
+    .SYNOPSIS
+        Ensures the required .NET SDK is available on PATH.
+    .DESCRIPTION
+        Checks whether the dotnet currently on PATH can locate the required SDK version.
+        If not, prepends the user-local dotnet installation directory to PATH.
+        Optionally sets DOTNET_ROOT and adds the global tools directory to PATH.
+    .PARAMETER SetDotnetRoot
+        When specified, sets the DOTNET_ROOT environment variable and adds the
+        .NET global tools path to PATH.
+    #>
+    param (
+        [switch] $SetDotnetRoot
+    )
+
+    Write-Verbose "In Find-DotNet"
+
     $originalPath = $env:PATH
     $dotnetPath = if ($environment.IsWindows) { "$env:LocalAppData\Microsoft\dotnet" } else { "$env:HOME/.dotnet" }
 
+    $chosenDotNetVersion = if($dotnetSDKVersionOveride) {
+        $dotnetSDKVersionOveride
+    }
+    else {
+        $dotnetCLIRequiredVersion
+    }
+
     # If there dotnet is already in the PATH, check to see if that version of dotnet can find the required SDK
     # This is "typically" the globally installed dotnet
     if (precheck dotnet) {
         # Must run from within repo to ensure global.json can specify the required SDK version
         Push-Location $PSScriptRoot
-        $dotnetCLIInstalledVersion = Start-NativeExecution -sb { dotnet --version } -IgnoreExitcode 2> $null
+        $dotnetCLIInstalledVersion = Find-RequiredSDK $chosenDotNetVersion
         Pop-Location
-        if ($dotnetCLIInstalledVersion -ne $dotnetCLIRequiredVersion) {
+
+        Write-Verbose -Message "Find-DotNet: dotnetCLIInstalledVersion = $dotnetCLIInstalledVersion; chosenDotNetVersion = $chosenDotNetVersion"
+
+        if ($dotnetCLIInstalledVersion -ne $chosenDotNetVersion) {
             Write-Warning "The 'dotnet' in the current path can't find SDK version ${dotnetCLIRequiredVersion}, prepending $dotnetPath to PATH."
             # Globally installed dotnet doesn't have the required SDK version, prepend the user local dotnet location
-            $env:PATH = $dotnetPath + [IO.Path]::PathSeparator + $env:PATH
+            Add-PSEnvironmentPath -Path $dotnetPath -Prepend
+
+            if ($SetDotnetRoot) {
+                Write-Verbose -Verbose "Setting DOTNET_ROOT to $dotnetPath"
+                Set-PSEnvironmentVariable -Name 'DOTNET_ROOT' -Value $dotnetPath
+            }
+        } elseif ($SetDotnetRoot) {
+            Write-Verbose -Verbose "Expected dotnet version found, setting DOTNET_ROOT to $dotnetPath"
+            Set-PSEnvironmentVariable -Name 'DOTNET_ROOT' -Value $dotnetPath
         }
     }
     else {
         Write-Warning "Could not find 'dotnet', appending $dotnetPath to PATH."
-        $env:PATH += [IO.Path]::PathSeparator + $dotnetPath
+        Add-PSEnvironmentPath -Path $dotnetPath
+
+        if ($SetDotnetRoot) {
+            Write-Verbose -Verbose "Setting DOTNET_ROOT to $dotnetPath"
+            Set-PSEnvironmentVariable -Name 'DOTNET_ROOT' -Value $dotnetPath
+        }
     }
 
     if (-not (precheck 'dotnet' "Still could not find 'dotnet', restoring PATH.")) {
+        # Give up, restore original PATH.  There is nothing to persist since we didn't make a change.
         $env:PATH = $originalPath
     }
+    elseif ($SetDotnetRoot) {
+        # If we found dotnet, also add the global tools path to PATH
+        # Add .NET global tools to PATH when setting up the environment
+        $dotnetToolsPath = Join-Path $dotnetPath "tools"
+        if (Test-Path $dotnetToolsPath) {
+            Write-Verbose -Verbose "Adding .NET tools path to PATH: $dotnetToolsPath"
+            Add-PSEnvironmentPath -Path $dotnetToolsPath
+        }
+    }
 }
 
 <#
@@ -2182,6 +3404,14 @@ function Convert-TxtResourceToXml
 }
 
 function script:Use-MSBuild {
+    <#
+    .SYNOPSIS
+        Ensures that the msbuild command is available in the current scope.
+    .DESCRIPTION
+        If msbuild is not found in PATH, creates a script-scoped alias pointing to the
+        .NET Framework 4 MSBuild at its standard Windows location. Throws if neither
+        location provides a usable msbuild.
+    #>
     # TODO: we probably should require a particular version of msbuild, if we are taking this dependency
     # msbuild v14 and msbuild v4 behaviors are different for XAML generation
     $frameworkMsBuildLocation = "${env:SystemRoot}\Microsoft.Net\Framework\v4.0.30319\msbuild"
@@ -2201,6 +3431,18 @@ function script:Use-MSBuild {
 
 function script:Write-Log
 {
+    <#
+    .SYNOPSIS
+        Writes a colored message to the host, with optional error annotation.
+    .DESCRIPTION
+        In GitHub Actions, error messages are emitted as workflow error annotations
+        using the '::error::' command. Normal messages are written in green; errors
+        in red. Console colors are reset after each call.
+    .PARAMETER message
+        The text to write.
+    .PARAMETER isError
+        When specified, writes the message as an error (red / GitHub Actions annotation).
+    #>
     param
     (
         [Parameter(Position=0, Mandatory)]
@@ -2211,7 +3453,13 @@ function script:Write-Log
     )
     if ($isError)
     {
-        Write-Host -Foreground Red $message
+        if ($env:GITHUB_WORKFLOW) {
+            # https://github.com/actions/toolkit/issues/193#issuecomment-605394935
+            $escapedMessage = $message -replace "`n", "%0A" -replace "`r"
+            Write-Host "::error::${escapedMessage}"
+        } else {
+            Write-Host -Foreground Red $message
+        }
     }
     else
     {
@@ -2220,304 +3468,126 @@ function script:Write-Log
     #reset colors for older package to at return to default after error message on a compilation error
     [console]::ResetColor()
 }
-function script:precheck([string]$command, [string]$missedMessage) {
-    $c = Get-Command $command -ErrorAction Ignore
-    if (-not $c) {
-        if (-not [string]::IsNullOrEmpty($missedMessage))
-        {
-            Write-Warning $missedMessage
-        }
-        return $false
-    } else {
-        return $true
-    }
-}
 
-# this function wraps native command Execution
-# for more information, read https://mnaoumov.wordpress.com/2015/01/11/execution-of-external-commands-in-powershell-done-right/
-function script:Start-NativeExecution
-{
-    param(
-        [scriptblock]$sb,
-        [switch]$IgnoreExitcode,
-        [switch]$VerboseOutputOnError
-    )
-    $backupEAP = $ErrorActionPreference
-    $ErrorActionPreference = "Continue"
-    try {
-        if($VerboseOutputOnError.IsPresent)
-        {
-            $output = & $sb 2>&1
-        }
-        else
-        {
-            & $sb
-        }
-
-        # note, if $sb doesn't have a native invocation, $LASTEXITCODE will
-        # point to the obsolete value
-        if ($LASTEXITCODE -ne 0 -and -not $IgnoreExitcode) {
-            if($VerboseOutputOnError.IsPresent -and $output)
-            {
-                $output | Out-String | Write-Verbose -Verbose
-            }
-
-            # Get caller location for easier debugging
-            $caller = Get-PSCallStack -ErrorAction SilentlyContinue
-            if($caller)
-            {
-                $callerLocationParts = $caller[1].Location -split ":\s*line\s*"
-                $callerFile = $callerLocationParts[0]
-                $callerLine = $callerLocationParts[1]
-
-                $errorMessage = "Execution of {$sb} by ${callerFile}: line $callerLine failed with exit code $LASTEXITCODE"
-                throw $errorMessage
-            }
-            throw "Execution of {$sb} failed with exit code $LASTEXITCODE"
-        }
-    } finally {
-        $ErrorActionPreference = $backupEAP
-    }
-}
-
-function Start-CrossGen {
-    [CmdletBinding()]
-    param(
-        [Parameter(Mandatory= $true)]
+function script:Write-LogGroup {
+    <#
+    .SYNOPSIS
+        Emits a titled group of log messages wrapped in log-group markers.
+    .DESCRIPTION
+        Calls Write-LogGroupStart, writes each message line via Write-Log, then calls
+        Write-LogGroupEnd. In GitHub Actions this creates a collapsible group; on other
+        hosts it adds BEGIN/END banners.
+    .PARAMETER Message
+        One or more message lines to write inside the group.
+    .PARAMETER Title
+        The title displayed for the log group.
+    #>
+    param
+    (
+        [Parameter(Position = 0, Mandatory)]
         [ValidateNotNullOrEmpty()]
-        [String]
-        $PublishPath,
-
-        [Parameter(Mandatory=$true)]
-        [ValidateSet("alpine-x64",
-                     "linux-arm",
-                     "linux-arm64",
-                     "linux-x64",
-                     "osx-arm64",
-                     "osx-x64",
-                     "win-arm",
-                     "win-arm64",
-                     "win7-x64",
-                     "win7-x86")]
-        [string]
-        $Runtime
+        [string[]] $Message,
+        [Parameter(Mandatory)]
+        [string] $Title
     )
 
-    function New-CrossGenAssembly {
-        param (
-            [Parameter(Mandatory= $true)]
-            [ValidateNotNullOrEmpty()]
-            [String]
-            $AssemblyPath,
-            [Parameter(Mandatory= $true)]
-            [ValidateNotNullOrEmpty()]
-            [String]
-            $CrossgenPath
-        )
-
-        $outputAssembly = $AssemblyPath.Replace(".dll", ".ni.dll")
-        $platformAssembliesPath = Split-Path $AssemblyPath -Parent
-        $crossgenFolder = Split-Path $CrossgenPath
-        $niAssemblyName = Split-Path $outputAssembly -Leaf
 
-        try {
-            Push-Location $crossgenFolder
+    Write-LogGroupStart -Title $Title
 
-            # Generate the ngen assembly
-            Write-Verbose "Generating assembly $niAssemblyName"
-            Start-NativeExecution {
-                & $CrossgenPath /ReadyToRun /MissingDependenciesOK /in $AssemblyPath /out $outputAssembly /Platform_Assemblies_Paths $platformAssembliesPath
-            } | Write-Verbose
-        } finally {
-            Pop-Location
-        }
+    foreach ($line in $Message) {
+        Write-Log -Message $line
     }
 
-    function New-CrossGenSymbol {
-        param (
-            [Parameter(Mandatory= $true)]
-            [ValidateNotNullOrEmpty()]
-            [String]
-            $AssemblyPath,
-            [Parameter(Mandatory= $true)]
-            [ValidateNotNullOrEmpty()]
-            [String]
-            $CrossgenPath
-        )
-
-
-        $platformAssembliesPath = Split-Path $AssemblyPath -Parent
-        $crossgenFolder = Split-Path $CrossgenPath
-
-        try {
-            Push-Location $crossgenFolder
-
-            $symbolsPath = [System.IO.Path]::ChangeExtension($assemblyPath, ".pdb")
-
-            $createSymbolOptionName = $null
-            if($Environment.IsWindows)
-            {
-                $createSymbolOptionName = '-CreatePDB'
-
-            }
-            elseif ($Environment.IsLinux)
-            {
-                $createSymbolOptionName = '-CreatePerfMap'
-            }
+    Write-LogGroupEnd -Title $Title
+}
 
-            if($createSymbolOptionName)
-            {
-                Start-NativeExecution {
-                    & $CrossgenPath -readytorun -platform_assemblies_paths $platformAssembliesPath $createSymbolOptionName $platformAssembliesPath $AssemblyPath
-                } | Write-Verbose
-            }
+$script:logGroupColor = [System.ConsoleColor]::Cyan
 
-            # Rename the corresponding ni.dll assembly to be the same as the IL assembly
-            $niSymbolsPath = [System.IO.Path]::ChangeExtension($symbolsPath, "ni.pdb")
-            Rename-Item $niSymbolsPath $symbolsPath -Force -ErrorAction Stop
-        } finally {
-            Pop-Location
-        }
-    }
+function script:Write-LogGroupStart {
+    <#
+    .SYNOPSIS
+        Opens a collapsible log group section.
+    .DESCRIPTION
+        In GitHub Actions emits '::group::<Title>'. On other hosts writes a colored
+        begin banner using the script-level log group color.
+    .PARAMETER Title
+        The label for the group.
+    #>
+    param
+    (
+        [Parameter(Mandatory)]
+        [string] $Title
+    )
 
-    if (-not (Test-Path $PublishPath)) {
-        throw "Path '$PublishPath' does not exist."
+    if ($env:GITHUB_WORKFLOW) {
+        Write-Host "::group::${Title}"
     }
-
-    # Get the path to crossgen
-    $crossGenExe = if ($environment.IsWindows) { "crossgen.exe" } else { "crossgen" }
-    $generateSymbols = $false
-
-    # The crossgen tool is only published for these particular runtimes
-    $crossGenRuntime = if ($environment.IsWindows) {
-        if ($Runtime -match "-x86") {
-            "win-x86"
-        } elseif ($Runtime -match "-x64") {
-            "win-x64"
-            $generateSymbols = $true
-        } elseif (!($env:PROCESSOR_ARCHITECTURE -match "arm")) {
-            throw "crossgen for 'win-arm' and 'win-arm64' must be run on that platform"
-        }
-    } elseif ($Runtime -eq "linux-arm") {
-        throw "crossgen is not available for 'linux-arm'"
-    } elseif ($Runtime -eq "linux-x64") {
-        $Runtime
-        # We should set $generateSymbols = $true, but the code needs to be adjusted for different extension on Linux
-    } else {
-        $Runtime
+    else {
+        Write-Host -ForegroundColor $script:logGroupColor "=== BEGIN: $Title ==="
     }
+}
 
-    if (-not $crossGenRuntime) {
-        throw "crossgen is not available for this platform"
-    }
-
-    $dotnetRuntimeVersion = $script:Options.Framework -replace 'net'
-
-    # Get the CrossGen.exe for the correct runtime with the latest version
-    $crossGenPath = Get-ChildItem $script:Environment.nugetPackagesRoot $crossGenExe -Recurse | `
-                        Where-Object { $_.FullName -match $crossGenRuntime } | `
-                        Where-Object { $_.FullName -match $dotnetRuntimeVersion } | `
-                        Where-Object { (Split-Path $_.FullName -Parent).EndsWith('tools') } | `
-                        Sort-Object -Property FullName -Descending | `
-                        Select-Object -First 1 | `
-                        ForEach-Object { $_.FullName }
-    if (-not $crossGenPath) {
-        throw "Unable to find latest version of crossgen.exe. 'Please run Start-PSBuild -Clean' first, and then try again."
-    }
-    Write-Verbose "Matched CrossGen.exe: $crossGenPath" -Verbose
-
-    # Crossgen.exe requires the following assemblies:
-    # mscorlib.dll
-    # System.Private.CoreLib.dll
-    # clrjit.dll on Windows or libclrjit.so/dylib on Linux/OS X
-    $crossGenRequiredAssemblies = @("mscorlib.dll", "System.Private.CoreLib.dll")
-
-    $crossGenRequiredAssemblies += if ($environment.IsWindows) {
-        "clrjit.dll"
-    } elseif ($environment.IsLinux) {
-        "libclrjit.so"
-    } elseif ($environment.IsMacOS) {
-        "libclrjit.dylib"
-    }
-
-    # Make sure that all dependencies required by crossgen are at the directory.
-    $crossGenFolder = Split-Path $crossGenPath
-    foreach ($assemblyName in $crossGenRequiredAssemblies) {
-        if (-not (Test-Path "$crossGenFolder\$assemblyName")) {
-            Copy-Item -Path "$PublishPath\$assemblyName" -Destination $crossGenFolder -Force -ErrorAction Stop
-        }
-    }
-
-    # Common assemblies used by Add-Type or assemblies with high JIT and no pdbs to crossgen
-    $commonAssembliesForAddType = @(
-        "Microsoft.CodeAnalysis.CSharp.dll"
-        "Microsoft.CodeAnalysis.dll"
-        "System.Linq.Expressions.dll"
-        "Microsoft.CSharp.dll"
-        "System.Runtime.Extensions.dll"
-        "System.Linq.dll"
-        "System.Collections.Concurrent.dll"
-        "System.Collections.dll"
-        "Newtonsoft.Json.dll"
-        "System.IO.FileSystem.dll"
-        "System.Diagnostics.Process.dll"
-        "System.Threading.Tasks.Parallel.dll"
-        "System.Security.AccessControl.dll"
-        "System.Text.Encoding.CodePages.dll"
-        "System.Private.Uri.dll"
-        "System.Threading.dll"
-        "System.Security.Principal.Windows.dll"
-        "System.Console.dll"
-        "Microsoft.Win32.Registry.dll"
-        "System.IO.Pipes.dll"
-        "System.Diagnostics.FileVersionInfo.dll"
-        "System.Collections.Specialized.dll"
-        "Microsoft.ApplicationInsights.dll"
+function script:Write-LogGroupEnd {
+    <#
+    .SYNOPSIS
+        Closes a collapsible log group section.
+    .DESCRIPTION
+        In GitHub Actions emits '::endgroup::'. On other hosts writes a colored
+        end banner using the script-level log group color.
+    .PARAMETER Title
+        The group label (used only in non-GitHub-Actions output).
+    #>
+    param
+    (
+        [Parameter(Mandatory)]
+        [string] $Title
     )
 
-    $fullAssemblyList = $commonAssembliesForAddType
-
-    foreach ($assemblyName in $fullAssemblyList) {
-        $assemblyPath = Join-Path $PublishPath $assemblyName
-        New-CrossGenAssembly -CrossgenPath $crossGenPath -AssemblyPath $assemblyPath
+    if ($env:GITHUB_WORKFLOW) {
+        Write-Host "::endgroup::"
     }
+    else {
+        Write-Host -ForegroundColor $script:logGroupColor "==== END: $Title ===="
+    }
+}
 
-    #
-    # With the latest dotnet.exe, the default load context is only able to load TPAs, and TPA
-    # only contains IL assembly names. In order to make the default load context able to load
-    # the NI PS assemblies, we need to replace the IL PS assemblies with the corresponding NI
-    # PS assemblies, but with the same IL assembly names.
-    #
-    Write-Verbose "PowerShell Ngen assemblies have been generated. Deploying ..." -Verbose
-    foreach ($assemblyName in $fullAssemblyList) {
-
-        # Remove the IL assembly and its symbols.
-        $assemblyPath = Join-Path $PublishPath $assemblyName
-        $symbolsPath = [System.IO.Path]::ChangeExtension($assemblyPath, ".pdb")
-
-        Remove-Item $assemblyPath -Force -ErrorAction Stop
-
-        # Rename the corresponding ni.dll assembly to be the same as the IL assembly
-        $niAssemblyPath = [System.IO.Path]::ChangeExtension($assemblyPath, "ni.dll")
-        Rename-Item $niAssemblyPath $assemblyPath -Force -ErrorAction Stop
-
-        # No symbols are available for Microsoft.CodeAnalysis.CSharp.dll, Microsoft.CodeAnalysis.dll,
-        # Microsoft.CodeAnalysis.VisualBasic.dll, and Microsoft.CSharp.dll.
-        if ($commonAssembliesForAddType -notcontains $assemblyName) {
-            Remove-Item $symbolsPath -Force -ErrorAction Stop
-
-            if($generateSymbols)
-            {
-                Write-Verbose "Generating Symbols for $assemblyPath"
-                New-CrossGenSymbol -CrossgenPath $crossGenPath -AssemblyPath $assemblyPath
-            }
+function script:precheck([string]$command, [string]$missedMessage) {
+    <#
+    .SYNOPSIS
+        Tests whether a command exists on PATH and optionally emits a warning if missing.
+    .DESCRIPTION
+        Uses Get-Command to locate the specified command. Returns $true if found,
+        $false otherwise. If the command is absent and a message is provided,
+        Write-Warning is called with that message.
+    .PARAMETER command
+        The command name to look for.
+    .PARAMETER missedMessage
+        Warning text to emit when the command is not found. Pass $null to suppress it.
+    .OUTPUTS
+        System.Boolean. $true when the command is found; $false otherwise.
+    #>
+    $c = Get-Command $command -ErrorAction Ignore
+    if (-not $c) {
+        if (-not [string]::IsNullOrEmpty($missedMessage))
+        {
+            Write-Warning $missedMessage
         }
+        return $false
+    } else {
+        return $true
     }
 }
 
 # Cleans the PowerShell repo - everything but the root folder
 function Clear-PSRepo
 {
+    <#
+    .SYNOPSIS
+        Cleans all subdirectories of the PowerShell repository using 'git clean -fdX'.
+    .DESCRIPTION
+        Iterates over every top-level directory under the repository root and removes all
+        files that are not tracked by git, including ignored files.
+    #>
     [CmdletBinding()]
     param()
 
@@ -2530,6 +3600,20 @@ function Clear-PSRepo
 # Install PowerShell modules such as PackageManagement, PowerShellGet
 function Copy-PSGalleryModules
 {
+    <#
+    .SYNOPSIS
+        Copies PowerShell Gallery modules from the NuGet cache to a Modules directory.
+    .DESCRIPTION
+        Reads the PackageReference items in the specified csproj file, resolves each
+        package from the NuGet global cache, and copies it to the destination directory.
+        Package nupkg and metadata files are excluded from the copy.
+    .PARAMETER CsProjPath
+        Path to the csproj file whose PackageReference items describe Gallery modules.
+    .PARAMETER Destination
+        Destination Modules directory. Must end with 'Modules'.
+    .PARAMETER Force
+        Forces NuGet package restore even if packages are already present.
+    #>
     [CmdletBinding()]
     param(
         [Parameter(Mandatory=$true)]
@@ -2589,6 +3673,22 @@ function Copy-PSGalleryModules
 
 function Merge-TestLogs
 {
+    <#
+    .SYNOPSIS
+        Merges xUnit and NUnit test log files into a single xUnit XML file.
+    .DESCRIPTION
+        Converts NUnit Pester logs to xUnit assembly format and appends them, along with
+        any additional xUnit logs, to the primary xUnit log. The merged result is saved
+        to the specified output path.
+    .PARAMETER XUnitLogPath
+        Path to the primary xUnit XML log file.
+    .PARAMETER NUnitLogPath
+        One or more NUnit (Pester) XML log file paths to merge in.
+    .PARAMETER AdditionalXUnitLogPath
+        Optional additional xUnit XML log files to append.
+    .PARAMETER OutputLogPath
+        Path for the merged xUnit output file.
+    #>
     [CmdletBinding()]
     param (
         [Parameter(Mandatory = $true)]
@@ -2630,6 +3730,23 @@ function Merge-TestLogs
 }
 
 function ConvertFrom-PesterLog {
+    <#
+    .SYNOPSIS
+        Converts Pester NUnit XML log files to xUnit assembly format.
+    .DESCRIPTION
+        Accepts one or more NUnit log files produced by Pester, or existing xUnit logs,
+        and converts them to an in-memory xUnit assembly object model. If multiple logs
+        are provided and -MultipleLog is not set, they are combined into a single
+        assemblies object.
+    .PARAMETER Logfile
+        Path(s) to the NUnit or xUnit log file(s) to convert. Accepts pipeline input.
+    .PARAMETER IncludeEmpty
+        When specified, includes test assemblies that contain zero test cases.
+    .PARAMETER MultipleLog
+        When specified, returns one assemblies object per log file instead of combining.
+    .OUTPUTS
+        assemblies. One or more xUnit assemblies objects containing converted test data.
+    #>
     [CmdletBinding()]
     param (
         [Parameter(ValueFromPipeline = $true, Mandatory = $true, Position = 0)]
@@ -2637,21 +3754,6 @@ function ConvertFrom-PesterLog {
         [Parameter()][switch]$IncludeEmpty,
         [Parameter()][switch]$MultipleLog
     )
-    <#
-Convert our test logs to
-xunit schema - top level assemblies
-Pester conversion
-foreach $r in "test-results"."test-suite".results."test-suite"
-assembly
-    name = $r.Description
-    config-file = log file (this is the only way we can determine between admin/nonadmin log)
-    test-framework = Pester
-    environment = top-level "test-results.environment.platform
-    run-date = date (doesn't exist in pester except for beginning)
-    run-time = time
-    time =
-#>
-
     BEGIN {
         # CLASSES
         class assemblies {
@@ -2881,7 +3983,6 @@ assembly
                 # only create an assembly group if we have tests
                 if ( $tCases.count -eq 0 -and ! $includeEmpty ) { continue }
                 $tGroup = $tCases | Group-Object result
-                $total = $tCases.Count
                 $asm = [testassembly]::new()
                 $asm.environment = $environment
                 $asm."run-date" = $rundate
@@ -2999,6 +4100,17 @@ assembly
 
 # Save PSOptions to be restored by Restore-PSOptions
 function Save-PSOptions {
+    <#
+    .SYNOPSIS
+        Persists the current PSOptions to a JSON file.
+    .DESCRIPTION
+        Serializes the current build options (or the supplied Options object) to JSON
+        and writes them to the specified path. Defaults to psoptions.json in the repo root.
+    .PARAMETER PSOptionsPath
+        Path to the JSON file to write. Defaults to '$PSScriptRoot/psoptions.json'.
+    .PARAMETER Options
+        PSOptions object to save. Defaults to the current build options.
+    #>
     param(
         [ValidateScript({$parent = Split-Path $_;if($parent){Test-Path $parent}else{return $true}})]
         [ValidateNotNullOrEmpty()]
@@ -3016,6 +4128,17 @@ function Save-PSOptions {
 # Restore PSOptions
 # Optionally remove the PSOptions file
 function Restore-PSOptions {
+    <#
+    .SYNOPSIS
+        Loads saved PSOptions from a JSON file and makes them the active build options.
+    .DESCRIPTION
+        Reads the JSON file produced by Save-PSOptions, reconstructs a PSOptions
+        hashtable, and stores it via Set-PSOptions. Optionally deletes the file afterward.
+    .PARAMETER PSOptionsPath
+        Path to the JSON file to read. Defaults to '$PSScriptRoot/psoptions.json'.
+    .PARAMETER Remove
+        When specified, deletes the JSON file after loading.
+    #>
     param(
         [ValidateScript({Test-Path $_})]
         [string]
@@ -3037,7 +4160,6 @@ function Restore-PSOptions {
                     -RootInfo $options.RootInfo `
                     -Top $options.Top `
                     -Runtime $options.Runtime `
-                    -Crossgen $options.Crossgen `
                     -Configuration $options.Configuration `
                     -PSModuleRestore $options.PSModuleRestore `
                     -Framework $options.Framework `
@@ -3049,6 +4171,31 @@ function Restore-PSOptions {
 
 function New-PSOptionsObject
 {
+    <#
+    .SYNOPSIS
+        Constructs the PSOptions hashtable from individual build-option components.
+    .DESCRIPTION
+        Assembles the hashtable consumed by Start-PSBuild, Restore-PSPackage, and related
+        commands. Prefer New-PSOptions, which auto-computes fields such as the output path.
+    .PARAMETER RootInfo
+        PSCustomObject with repo root path validation metadata.
+    .PARAMETER Top
+        Path to the top-level project directory (pwsh source directory).
+    .PARAMETER Runtime
+        The .NET runtime identifier (RID) for the build.
+    .PARAMETER Configuration
+        The build configuration: Debug, Release, CodeCoverage, or StaticAnalysis.
+    .PARAMETER PSModuleRestore
+        Whether Gallery modules should be restored to the build output.
+    .PARAMETER Framework
+        The target .NET framework moniker, e.g. 'net11.0'.
+    .PARAMETER Output
+        Full path to the output pwsh executable.
+    .PARAMETER ForMinimalSize
+        Whether this is a minimal-size build.
+    .OUTPUTS
+        System.Collections.Hashtable. A PSOptions hashtable.
+    #>
     param(
         [PSCustomObject]
         $RootInfo,
@@ -3061,10 +4208,6 @@ function New-PSOptionsObject
         [String]
         $Runtime,
 
-        [Parameter(Mandatory)]
-        [Bool]
-        $CrossGen,
-
         [Parameter(Mandatory)]
         [String]
         $Configuration,
@@ -3093,7 +4236,6 @@ function New-PSOptionsObject
         Framework = $Framework
         Runtime = $Runtime
         Output = $Output
-        CrossGen = $CrossGen
         PSModuleRestore = $PSModuleRestore
         ForMinimalSize = $ForMinimalSize
     }
@@ -3224,6 +4366,17 @@ $script:RESX_TEMPLATE = @'
 '@
 
 function Get-UniquePackageFolderName {
+    <#
+    .SYNOPSIS
+        Returns a unique temporary folder path for a test package under the specified root.
+    .DESCRIPTION
+        Tries the path '<Root>/TestPackage' first, then appends a random numeric suffix
+        until an unused path is found. Throws if a unique name cannot be found in 10 tries.
+    .PARAMETER Root
+        The parent directory under which the unique folder name is generated.
+    .OUTPUTS
+        System.String. A path under Root that does not yet exist.
+    #>
     param(
         [Parameter(Mandatory)] $Root
     )
@@ -3250,6 +4403,18 @@ function Get-UniquePackageFolderName {
 
 function New-TestPackage
 {
+    <#
+    .SYNOPSIS
+        Creates a zip archive containing all test content and test tools.
+    .DESCRIPTION
+        Builds and publishes test tools, copies the test directory, assets directory,
+        and resx resource directories into a temporary staging folder, then zips the
+        staging folder to TestPackage.zip in the specified destination directory.
+    .PARAMETER Destination
+        Directory where the TestPackage.zip file is created.
+    .PARAMETER Runtime
+        The .NET runtime identifier (RID) used when publishing test tool executables.
+    #>
     [CmdletBinding()]
     param(
         [Parameter(Mandatory = $true)]
@@ -3320,36 +4485,393 @@ function New-TestPackage
     [System.IO.Compression.ZipFile]::CreateFromDirectory($packageRoot, $packagePath)
 }
 
-function New-NugetConfigFile
-{
+class NugetPackageSource {
+    [string] $Url
+    [string] $Name
+}
+
+function New-NugetPackageSource {
+    <#
+    .SYNOPSIS
+        Creates a NugetPackageSource object with the given URL and name.
+    .PARAMETER Url
+        The NuGet feed URL.
+    .PARAMETER Name
+        The feed name used as the key in nuget.config.
+    .OUTPUTS
+        NugetPackageSource. An object with Url and Name properties.
+    #>
     param(
-        [Parameter(Mandatory=$true)] [string] $NugetFeedUrl,
-        [Parameter(Mandatory=$true)] [string] $FeedName,
-        [Parameter(Mandatory=$true)] [string] $UserName,
-        [Parameter(Mandatory=$true)] [string] $ClearTextPAT,
-        [Parameter(Mandatory=$true)] [string] $Destination
+        [Parameter(Mandatory = $true)] [string]$Url,
+        [Parameter(Mandatory = $true)] [string] $Name
     )
 
-    $nugetConfigTemplate = @'
+    return [NugetPackageSource] @{Url = $Url; Name = $Name }
+}
+
+$script:NuGetEndpointCredentials = [System.Collections.Generic.Dictionary[String,System.Object]]::new()
+function New-NugetConfigFile {
+    <#
+    .SYNOPSIS
+        Generates a nuget.config file at the specified destination.
+    .DESCRIPTION
+        Creates a nuget.config XML file with the supplied package sources and optional
+        credentials. The generated file is marked as skip-worktree in git to prevent
+        accidental commits of feed credentials.
+    .PARAMETER NugetPackageSource
+        One or more NugetPackageSource objects defining the feeds to include.
+    .PARAMETER Destination
+        Directory where nuget.config is written.
+    .PARAMETER UserName
+        Username for authenticated feed access.
+    .PARAMETER ClearTextPAT
+        Personal access token in clear text for authenticated feed access.
+    #>
+    param(
+        [Parameter(Mandatory = $true, ParameterSetName ='user')]
+        [Parameter(Mandatory = $true, ParameterSetName ='nouser')]
+        [NugetPackageSource[]] $NugetPackageSource,
+
+        [Parameter(Mandatory = $true)] [string] $Destination,
+
+        [Parameter(Mandatory = $true, ParameterSetName = 'user')]
+        [string] $UserName,
+
+        [Parameter(Mandatory = $true, ParameterSetName = 'user')]
+        [string] $ClearTextPAT
+    )
+
+    $nugetConfigHeaderTemplate = @'
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <packageSources>
     <clear />
+'@
+
+    $nugetPackageSourceTemplate = @'
     <add key="[FEEDNAME]" value="[FEED]" />
+'@
+    $nugetPackageSourceFooterTemplate = @'
   </packageSources>
   <disabledPackageSources>
     <clear />
   </disabledPackageSources>
+'@
+    $nugetCredentialsTemplate = @'
   <packageSourceCredentials>
     <[FEEDNAME]>
       <add key="Username" value="[USERNAME]" />
       <add key="ClearTextPassword" value="[PASSWORD]" />
     </[FEEDNAME]>
   </packageSourceCredentials>
+'@
+    $nugetConfigFooterTemplate = @'
 </configuration>
 '@
+    $content = $nugetConfigHeaderTemplate
+    $feedNamePostfix = ''
+    if ($UserName) {
+        $feedNamePostfix += '-' + $UserName.Replace('@', '-').Replace('.', '-')
+    }
+
+    [NugetPackageSource]$source = $null
+    $newLine = [Environment]::NewLine
+    foreach ($source in $NugetPackageSource) {
+        $content += $newLine + $nugetPackageSourceTemplate.Replace('[FEED]', $source.Url).Replace('[FEEDNAME]', $source.Name + $feedNamePostfix)
+    }
 
-    $content = $nugetConfigTemplate.Replace('[FEED]', $NugetFeedUrl).Replace('[FEEDNAME]', $FeedName).Replace('[USERNAME]', $UserName).Replace('[PASSWORD]', $ClearTextPAT)
+    $content += $newLine + $nugetPackageSourceFooterTemplate
+
+    if ($UserName -or $ClearTextPAT) {
+        foreach ($source in $NugetPackageSource) {
+            if (!$script:NuGetEndpointCredentials.ContainsKey($source.Url)) {
+                $script:NuGetEndpointCredentials.Add($source.Url, @{
+                        endpoint = $source.Url
+                        username = $UserName
+                        password = $ClearTextPAT
+                    })
+            }
+        }
+    }
+
+    $content += $newLine + $nugetConfigFooterTemplate
 
     Set-Content -Path (Join-Path $Destination 'nuget.config') -Value $content -Force
+
+    # Set the nuget.config file to be skipped by git
+    push-location $Destination
+    try {
+        git update-index --skip-worktree (Join-Path $Destination 'nuget.config')
+    } finally {
+        pop-location
+    }
+}
+
+function Clear-PipelineNugetAuthentication {
+    <#
+    .SYNOPSIS
+        Clears cached NuGet feed credentials used by the pipeline.
+    .DESCRIPTION
+        Removes all entries from the script-scoped NuGetEndpointCredentials dictionary.
+    #>
+    $script:NuGetEndpointCredentials.Clear()
+}
+
+function Set-PipelineNugetAuthentication {
+    <#
+    .SYNOPSIS
+        Publishes cached NuGet feed credentials to the Azure DevOps pipeline.
+    .DESCRIPTION
+        Serializes the script-scoped NuGetEndpointCredentials dictionary to JSON and sets
+        the VSS_NUGET_EXTERNAL_FEED_ENDPOINTS pipeline variable so that subsequent NuGet
+        operations authenticate automatically.
+    #>
+    $endpointcredentials = @()
+
+    foreach ($key in $script:NuGetEndpointCredentials.Keys) {
+        $endpointcredentials += $script:NuGetEndpointCredentials[$key]
+    }
+
+    $json = @{
+        endpointCredentials = $endpointcredentials
+    } | convertto-json -Compress
+    Set-PipelineVariable -Name 'VSS_NUGET_EXTERNAL_FEED_ENDPOINTS' -Value $json
+}
+
+function Set-CorrectLocale
+{
+    <#
+    .SYNOPSIS
+        Configures the Linux locale to en_US.UTF-8 for consistent build behavior.
+    .DESCRIPTION
+        On Ubuntu 20+ systems, generates the en_US.UTF-8 locale and sets LC_ALL and LANG
+        environment variables. Skips execution on non-Linux platforms and Ubuntu versions
+        earlier than 20.
+    #>
+    Write-LogGroupStart -Title "Set-CorrectLocale"
+
+    if (-not $IsLinux)
+    {
+        Write-LogGroupEnd -Title "Set-CorrectLocale"
+        return
+    }
+
+    $environment = Get-EnvironmentInformation
+    if ($environment.IsUbuntu16 -or $environment.IsUbuntu18) {
+        Write-Verbose -Message "Don't set locale before Ubuntu 20" -Verbose
+        Write-LogGroupEnd -Title "Set-CorrectLocale"
+        Write-Locale
+        return
+    }
+
+    if ($environment.IsUbuntu) {
+        Write-Log -Message "Setting locale to en_US.UTF-8"
+        $env:LC_ALL = 'en_US.UTF-8'
+        $env:LANG = 'en_US.UTF-8'
+        sudo locale-gen $env:LANG
+        if ($environment.IsUbuntu20) {
+            Write-Log -Message "Updating locale for Ubuntu 20"
+            sudo update-locale
+        } else {
+            Write-Log -Message "Updating locale for Ubuntu 22 and newer"
+            sudo update-locale LANG=$env:LANG LC_ALL=$env:LC_ALL
+        }
+    }
+
+    Write-LogGroupEnd -Title "Set-CorrectLocale"
+    Write-Locale
+
+}
+
+function Write-Locale {
+    <#
+    .SYNOPSIS
+        Writes the current system locale settings to the log output.
+    .DESCRIPTION
+        Runs the 'locale' command on Linux or macOS and writes the output inside a
+        collapsible log group. Does nothing on Windows.
+    #>
+    if (-not $IsLinux -and -not $IsMacOS) {
+        Write-Verbose -Message "only supported on Linux and macOS" -Verbose
+        return
+    }
+
+    # Output the locale to log it
+    $localOutput = & locale
+    Write-LogGroup -Title "Capture Locale" -Message $localOutput
+}
+
+function Install-AzCopy {
+    <#
+    .SYNOPSIS
+        Downloads and installs AzCopy v10 on Windows.
+    .DESCRIPTION
+        Downloads the AzCopy v10 zip archive from the official Microsoft URL and extracts
+        it to the Agent tools directory. Skips installation if AzCopy is already present.
+    #>
+    $testPath = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe"
+    if (Test-Path $testPath) {
+        Write-Verbose "AzCopy already installed" -Verbose
+        return
+    }
+
+    $destination = "$env:TEMP\azcopy10.zip"
+    $downloadLocation = (Invoke-WebRequest -Uri https://aka.ms/downloadazcopy-v10-windows -MaximumRedirection 0 -ErrorAction SilentlyContinue -SkipHttpErrorCheck).headers.location | Select-Object -First 1
+
+    Invoke-WebRequest -Uri $downloadLocation -OutFile $destination -Verbose
+    Expand-archive -Path $destination -Destinationpath '$(Agent.ToolsDirectory)\azcopy10'
+}
+
+function Find-AzCopy {
+    <#
+    .SYNOPSIS
+        Locates the AzCopy executable on the system.
+    .DESCRIPTION
+        Searches several well-known installation paths for AzCopy.exe and falls back to
+        Get-Command if none of the paths contain the executable.
+    .OUTPUTS
+        System.String. The full path to the AzCopy executable.
+    #>
+    $searchPaths = @('$(Agent.ToolsDirectory)\azcopy10\AzCopy.exe', "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe", "C:\azcopy10\AzCopy.exe")
+
+    foreach ($filter in $searchPaths) {
+        $azCopy = Get-ChildItem -Path $filter -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName -First 1
+        if ($azCopy) {
+            return $azCopy
+        }
+    }
+
+    $azCopy = Get-Command -Name azCopy -ErrorAction Stop | Select-Object -First 1
+    return $azCopy.Path
+}
+
+function Clear-NativeDependencies
+{
+    <#
+    .SYNOPSIS
+        Removes unnecessary native dependency files from the publish output.
+    .DESCRIPTION
+        Strips architecture-specific DiaSym reader DLLs that are not needed for the
+        target runtime from both the publish folder and the pwsh.deps.json manifest.
+        Skips fxdependent runtimes where no cleanup is needed.
+    .PARAMETER PublishFolder
+        Path to the publish output directory containing pwsh.deps.json.
+    #>
+    param(
+        [Parameter(Mandatory=$true)] [string] $PublishFolder
+    )
+
+    $diasymFileNamePattern = 'microsoft.diasymreader.native.{0}.dll'
+
+    switch -regex ($($script:Options.Runtime)) {
+        '.*-x64' {
+            $diasymFileName = $diasymFileNamePattern -f 'amd64'
+        }
+        '.*-x86' {
+            $diasymFileName = $diasymFileNamePattern -f 'x86'
+        }
+        '.*-arm' {
+            $diasymFileName = $diasymFileNamePattern -f 'arm'
+        }
+        '.*-arm64' {
+            $diasymFileName = $diasymFileNamePattern -f 'arm64'
+        }
+        'fxdependent.*' {
+            Write-Verbose -Message "$($script:Options.Runtime) is a fxdependent runtime, no cleanup needed in pwsh.deps.json" -Verbose
+            return
+        }
+        Default {
+            throw "Unknown runtime $($script:Options.Runtime)"
+        }
+    }
+
+    $filesToDeleteCore = @($diasymFileName)
+
+    ## Currently we do not need to remove any files from WinDesktop runtime.
+    $filesToDeleteWinDesktop = @()
+
+    $deps = Get-Content "$PublishFolder/pwsh.deps.json" -Raw | ConvertFrom-Json -Depth 20
+    $targetRuntime = ".NETCoreApp,Version=v11.0/$($script:Options.Runtime)"
+
+    $runtimePackNetCore = $deps.targets.${targetRuntime}.PSObject.Properties.Name -like 'runtimepack.Microsoft.NETCore.App.Runtime*'
+    $runtimePackWinDesktop = $deps.targets.${targetRuntime}.PSObject.Properties.Name -like 'runtimepack.Microsoft.WindowsDesktop.App.Runtime*'
+
+    if ($runtimePackNetCore)
+    {
+        $filesToDeleteCore | ForEach-Object {
+            Write-Verbose "Removing $_ from pwsh.deps.json" -Verbose
+            $deps.targets.${targetRuntime}.${runtimePackNetCore}.native.PSObject.Properties.Remove($_)
+            if (Test-Path $PublishFolder/$_) {
+                Remove-Item -Path $PublishFolder/$_ -Force -Verbose
+            }
+        }
+    }
+
+    if ($runtimePackWinDesktop)
+    {
+        $filesToDeleteWinDesktop | ForEach-Object {
+            Write-Verbose "Removing $_ from pwsh.deps.json" -Verbose
+            $deps.targets.${targetRuntime}.${runtimePackWinDesktop}.native.PSObject.Properties.Remove($_)
+            if (Test-Path $PublishFolder/$_) {
+                Remove-Item -Path $PublishFolder/$_ -Force -Verbose
+            }
+        }
+    }
+
+    $deps | ConvertTo-Json -Depth 20 | Set-Content "$PublishFolder/pwsh.deps.json" -Force
+}
+
+
+function Update-DotNetSdkVersion {
+<#
+    .SYNOPSIS
+        Updates the .NET SDK version in global.json and DotnetRuntimeMetadata.json.
+    .DESCRIPTION
+        Queries the official .NET SDK feed for the latest version in the current channel
+        and writes the new version to global.json and DotnetRuntimeMetadata.json.
+    #>
+    param()
+    $globalJsonPath = "$PSScriptRoot/global.json"
+    $globalJson = get-content $globalJsonPath | convertfrom-json
+    $oldVersion = $globalJson.sdk.version
+    $versionParts = $oldVersion -split '\.'
+    $channel = $versionParts[0], $versionParts[1] -join '.'
+    Write-Verbose "channel: $channel" -Verbose
+    $azure_feed = 'https://builds.dotnet.microsoft.com/dotnet'
+    $version_file_url = "$azure_feed/Sdk/$channel/latest.version"
+    $version = Invoke-RestMethod $version_file_url
+    Write-Verbose "updating from: $oldVersion to: $version" -Verbose
+    $globalJson.sdk.version = $version
+    $globalJson | convertto-json | out-file $globalJsonPath
+    $dotnetRuntimeMetaPath = "$psscriptroot\DotnetRuntimeMetadata.json"
+    $dotnetRuntimeMeta = get-content $dotnetRuntimeMetaPath | convertfrom-json
+    $dotnetRuntimeMeta.sdk.sdkImageVersion = $version
+    $dotnetRuntimeMeta | ConvertTo-Json | Out-File $dotnetRuntimeMetaPath
+}
+
+function Set-PipelineVariable {
+    <#
+    .SYNOPSIS
+        Sets an Azure DevOps pipeline variable and the corresponding environment variable.
+    .DESCRIPTION
+        Emits a ##vso[task.setvariable] logging command so that subsequent pipeline steps
+        can access the variable, and also sets it in the current process environment.
+    .PARAMETER Name
+        The pipeline variable name.
+    .PARAMETER Value
+        The value to assign.
+    #>
+    param(
+        [parameter(Mandatory)]
+        [string] $Name,
+        [parameter(Mandatory)]
+        [string] $Value
+    )
+
+    $vstsCommandString = "vso[task.setvariable variable=$Name]$Value"
+    Write-Verbose -Verbose -Message ("sending " + $vstsCommandString)
+    Write-Host "##$vstsCommandString"
+
+    # also set in the current session
+    Set-Item -Path "env:$Name" -Value $Value
 }
diff --git a/demos/Apache/Apache/Apache.psm1 b/demos/Apache/Apache/Apache.psm1
deleted file mode 100644
index 5f980f26bae..00000000000
--- a/demos/Apache/Apache/Apache.psm1
+++ /dev/null
@@ -1,236 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#Region utility functions
-
-$global:sudocmd = "sudo"
-
-Function GetApacheCmd{
-    if (Test-Path "/usr/sbin/apache2ctl"){
-        $cmd = "/usr/sbin/apache2ctl"
-    }elseif(Test-Path "/usr/sbin/httpd"){
-        $cmd = "/usr/sbin/httpd"
-    }else{
-        Write-Error "Unable to find httpd or apache2ctl program. Unable to continue"
-        exit -1
-    }
-    $cmd
-}
-
-Function GetApacheVHostDir{
-    if (Test-Path "/etc/httpd/conf.d"){
-        Return "/etc/httpd/conf.d/"
-    }
-    if (Test-Path "/etc/apache2/sites-enabled"){
-        Return "/etc/apache2/sites-enabled"
-    }
-}
-
-Function CleanInputString([string]$inputStr){
-    $outputStr = $inputStr.Trim().Replace('`n','').Replace('\n','')
-    $outputStr
-}
-
-#EndRegion utility functions
-
-#Region Class specifications
-
-Class ApacheModule{
-        [string]$ModuleName
-
-        ApacheModule([string]$aModule){
-            $this.ModuleName = $aModule
-        }
-}
-
-Class ApacheVirtualHost{
-        [string]$ServerName
-        [string]$DocumentRoot
-        [string]$VirtualHostIPAddress = "*"
-        [string[]]$ServerAliases
-        [int]$VirtualHostPort = "80"
-        [string]$ServerAdmin
-        [string]$CustomLogPath
-        [string]$ErrorLogPath
-        [string]$ConfigurationFile
-
-        #region class constructors
-        ApacheVirtualHost([string]$ServerName, [string]$ConfFile, [string]$VirtualHostIPAddress,[int]$VirtualHostPort){
-            $this.ServerName = $ServerName
-            $this.ConfigurationFile = $ConfFile
-            $this.VirtualHostIPAddress = $VirtualHostIPAddress
-            $this.VirtualHostPort = $VirtualHostPort
-        }
-
-        #Full specification
-        ApacheVirtualHost([string]$ServerName, [string]$DocumentRoot, [string[]]$ServerAliases, [string]$ServerAdmin, [string]$CustomLogPath, [string]$ErrorLogPath, [string]$VirtualHostIPAddress, [int]$VirtualHostPort, [string]$ConfigurationFile){
-            $this.ServerName = $ServerName
-            $this.DocumentRoot = $DocumentRoot
-            $this.ServerAliases = $ServerAliases
-            $this.ServerAdmin = $ServerAdmin
-            $this.CustomLogPath = $CustomLogPath
-            $this.ErrorLogPath = $ErrorLogPath
-            $this.VirtualHostIPAddress = $VirtualHostIPAddress
-            $this.VirtualHostPort = $VirtualHostPort
-            $this.ConfigurationFile = $ConfigurationFile
-        }
-
-        #Default Port and IP
-        #endregion
-
-        #region class methods
-        Save($ConfigurationFile){
-            if (!(Test-Path $this.DocumentRoot)){ New-Item -Type Directory $this.DocumentRoot }
-
-            $VHostsDirectory = GetApacheVHostDir
-            if (!(Test-Path $VHostsDirectory)){
-                Write-Error "Specified virtual hosts directory does not exist: $VHostsDirectory"
-                exit 1
-            }
-            $VHostIPAddress = $this.VirtualHostIPAddress
-            [string]$VhostPort = $this.VirtualHostPort
-            $VHostDef = "<VirtualHost " + "$VHostIPAddress" + ":" + $VHostPort + " >`n"
-            $vHostDef += "DocumentRoot " + $this.DocumentRoot + "`n"
-            ForEach ($Alias in $this.ServerAliases){
-                if ($Alias.trim() -ne ""){
-                    $vHostDef += "ServerAlias " + $Alias + "`n"
-                }
-            }
-            $vHostDef += "ServerName " + $this.ServerName +"`n"
-            if ($this.ServerAdmin.Length -gt 1){$vHostDef += "ServerAdmin " + $this.ServerAdmin +"`n"}
-            if ($this.CustomLogPath -like "*/*"){$vHostDef += "CustomLog " + $this.CustomLogPath +"`n"}
-            if ($this.ErrorLogPath -like "*/*"){$vHostDef += "ErrorLog " + $this.ErrorLogpath +"`n"}
-            $vHostDef += "</VirtualHost>"
-            $filName = $ConfigurationFile
-            $VhostDef | Out-File "/tmp/${filName}" -Force -Encoding:ascii
-            & $global:sudocmd "mv" "/tmp/${filName}" "${VhostsDirectory}/${filName}"
-            Write-Information "Restarting Apache HTTP Server"
-            Restart-ApacheHTTPServer
-        }
-
-        #endregion
-}
-
-#EndRegion Class Specifications
-
-Function New-ApacheVHost {
-    [CmdletBinding()]
-    param(
-        [parameter (Mandatory = $true)][string]$ServerName,
-        [parameter (Mandatory = $true)][string]$DocumentRoot,
-        [string]$VirtualHostIPAddress,
-        [string[]]$ServerAliases,
-        [int]$VirtualHostPort,
-        [string]$ServerAdmin,
-        [string]$CustomLogPath,
-        [string]$ErrorLogPath
-        )
-
-        $NewConfFile = $VHostsDirectory + "/" + $ServerName + ".conf"
-        if(!($VirtualHostIPAddress)){$VirtualHostIPAddress = "*"}
-        if(!($VirtualHostPort)){$VirtualHostPort = "80"}
-        $newVHost = [ApacheVirtualHost]::new("$ServerName","$DocumentRoot","$ServerAliases","$ServerAdmin","$CustomLogPath","$ErrorLogPath","$VirtualHostIPAddress",$VirtualHostPort,"$NewConfFile")
-        $newVHost.Save("$ServerName.conf")
-}
-
-Function GetVHostProps([string]$ConfFile,[string]$ServerName,[string]$Listener){
-    $confContents = Get-Content $ConfFile
-    [boolean]$Match = $false
-    $DocumentRoot = ""
-    $CustomLogPath = ""
-    $ErrorLogPath = ""
-    $ServerAdmin = ""
-    ForEach ($confline in $confContents){
-        if ($confLine -like "<VirtualHost*${Listener}*"){
-            $Match = $true
-        }
-        if($Match){
-            Switch -wildcard  ($confline) {
-                "*DocumentRoot*"{$DocumentRoot = $confline.split()[1].trim()}
-                "*CustomLog*"{$CustomLogPath = $confline.split()[1].trim()}
-                "*ErrorLog*"{$ErrorLogPath = $confline.split()[1].trim()}
-                "*ServerAdmin*"{$ServerAdmin = $confline.split()[1].trim()}
-               #Todo: Server aliases
-            }
-            if($confline -like "*</VirtualHost>*"){
-                $Match = $false
-            }
-        }
-    }
-    @{"DocumentRoot" = "$DocumentRoot"; "CustomLogPath" = "$CustomLogPath"; "ErrorLogPath" = "$ErrorLogPath"; "ServerAdmin" = $ServerAdmin}
-
-}
-
-Function Get-ApacheVHost{
-    $cmd = GetApacheCmd
-
-    $Vhosts = @()
-    $res = & $global:sudocmd $cmd -t -D DUMP_VHOSTS
-
-    ForEach ($line in $res){
-        $ServerName = $null
-        if ($line -like "*:*.conf*"){
-            $RMatch = $line -match "(?<Listen>.*:[0-9]*)(?<ServerName>.*)\((?<ConfFile>.*)\)"
-            $ListenAddress = $Matches.Listen.trim()
-            $ServerName = $Matches.ServerName.trim()
-            $ConfFile = $Matches.ConfFile.trim().split(":")[0].Replace('(','')
-        }else{
-            if ($line.trim().split()[0] -like "*:*"){
-                $ListenAddress = $line.trim().split()[0]
-            }elseif($line -like "*.conf*"){
-                if ($line -like "*default*"){
-                    $ServerName = "_Default"
-                    $ConfFile = $line.trim().split()[3].split(":")[0].Replace('(','')
-                }elseif($line -like "*namevhost*"){
-                    $ServerName = $line.trim().split()[3]
-                    $ConfFile = $line.trim().split()[4].split(":")[0].Replace('(','')
-                }
-            }
-        }
-
-        if ($null -ne $ServerName){
-            $vHost = [ApacheVirtualHost]::New($ServerName, $ConfFile, $ListenAddress.Split(":")[0],$ListenAddress.Split(":")[1])
-            $ExtProps = GetVHostProps $ConfFile $ServerName $ListenAddress
-            $vHost.DocumentRoot = $ExtProps.DocumentRoot
-            #Custom log requires additional handling. NYI
-            #$vHost.CustomLogPath = $ExtProps.CustomLogPath
-            $vHost.ErrorLogPath = $ExtProps.ErrorLogPath
-            $vHost.ServerAdmin = $ExtProps.ServerAdmin
-            $Vhosts += $vHost
-            }
-        }
-
-    Return $Vhosts
-    }
-
-Function Restart-ApacheHTTPServer{
-  [CmdletBinding()]
-  Param(
-   [switch]$Graceful
-   )
-
-    if ($null -eq $Graceful){$Graceful = $false}
-    $cmd = GetApacheCmd
-        if ($Graceful){
-                & $global:sudocmd $cmd  -k graceful
-        }else{
-                & $global:sudocmd $cmd  -k restart
-        }
-
-}
-
-Function Get-ApacheModule{
-    $cmd = GetApacheCmd
-
-        $ApacheModules = @()
-
-        $Results = & $global:sudocmd $cmd -M |grep -v Loaded
-
-        Foreach ($mod in $Results){
-        $modInst = [ApacheModule]::new($mod.trim())
-        $ApacheModules += ($modInst)
-        }
-
-    $ApacheModules
-
-}
diff --git a/demos/Apache/apache-demo.ps1 b/demos/Apache/apache-demo.ps1
deleted file mode 100644
index 299ce0cc0de..00000000000
--- a/demos/Apache/apache-demo.ps1
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-Import-Module $PSScriptRoot/Apache/Apache.psm1
-
-#list Apache Modules
-Write-Host -Foreground Blue "Get installed Apache Modules like *proxy* and Sort by name"
-Get-ApacheModule | Where-Object {$_.ModuleName -like "*proxy*"} | Sort-Object ModuleName | Out-Host
-
-#Graceful restart of Apache
-Write-Host -Foreground Blue "Restart Apache Server gracefully"
-Restart-ApacheHTTPServer -Graceful | Out-Host
-
-#Enumerate current virtual hosts (web sites)
-Write-Host -Foreground Blue "Enumerate configured Apache Virtual Hosts"
-Get-ApacheVHost |Out-Host
-
-#Add a new virtual host
-Write-Host -Foreground Yellow "Create a new Apache Virtual Host"
-New-ApacheVHost -ServerName "mytestserver" -DocumentRoot /var/www/html/mytestserver -VirtualHostIPAddress * -VirtualHostPort 8090 | Out-Host
-
-#Enumerate new set of virtual hosts
-Write-Host -Foreground Blue "Enumerate Apache Virtual Hosts Again"
-Get-ApacheVHost |Out-Host
-
-#Cleanup
-Write-Host -Foreground Blue "Remove demo virtual host"
-if (Test-Path "/etc/httpd/conf.d"){
-    & sudo rm "/etc/httpd/conf.d/mytestserver.conf"
-}
-if (Test-Path "/etc/apache2/sites-enabled"){
-    & sudo rm "/etc/apache2/sites-enabled/mytestserver.conf"
-}
diff --git a/demos/Apache/readme.md b/demos/Apache/readme.md
deleted file mode 100644
index 30e36b3811a..00000000000
--- a/demos/Apache/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-## Apache Management Demo
-
-This demo shows management of Apache HTTP Server with PowerShell cmdlets implemented in a script module.
-
-- **Get-ApacheVHost**: Enumerate configured Apache Virtual Host (website) instances as objects.
-- **Get-ApacheModule**: Enumerate loaded Apache modules
-- **Restart-ApacheHTTPserver**: Restart the Apache web server
-- **New-ApacheVHost**: Create a new Apache Virtual Host (website) based on supplied parameters
-
-
-## Prerequisites ##
-- Install PowerShell
-- Install Apache packages
-	- `sudo apt-get install apache2`
-	- `sudo yum install httpd`
-
-
-Note: Management of Apache requires privileges. The user must have authorization to elevate with sudo. You will be prompted for a sudo password when running the demo.
\ No newline at end of file
diff --git a/demos/Azure/Azure-Demo.ps1 b/demos/Azure/Azure-Demo.ps1
deleted file mode 100644
index 22b316686a7..00000000000
--- a/demos/Azure/Azure-Demo.ps1
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-### The techniques used in this demo are documented at
-### https://azure.microsoft.com/documentation/articles/powershell-azure-resource-manager/
-
-### Import AzureRM.Profile.NetCore.Preview and AzureRM.Resources.NetCore.Preview modules.
-### AzureRM.NetCore.Preview is a wrapper module that pulls in these modules
-###
-### Because of issue https://github.com/PowerShell/PowerShell/issues/1618,
-### currently you will not be able to use "Install-Module AzureRM.NetCore.Preview" from
-### PowerShellGallery. You can use the following workaround until the issue is fixed:
-###
-### Install-Package -Name AzureRM.NetCore.Preview -Source https://www.powershellgallery.com/api/v2 -ProviderName NuGet -ExcludeVersion -Destination <Folder you want this to be installed>
-###
-### Ensure $env:PSModulePath is updated with the location you used to install.
-Import-Module AzureRM.NetCore.Preview
-
-### Supply your Azure Credentials
-Login-AzureRmAccount
-
-### Specify a name for Azure Resource Group
-$resourceGroupName = "PSAzDemo" + (New-Guid | ForEach-Object guid) -replace "-",""
-$resourceGroupName
-
-### Create a new Azure Resource Group
-New-AzureRmResourceGroup -Name $resourceGroupName -Location "West US"
-
-### Deploy an Ubuntu 14.04 VM using Resource Manager cmdlets
-### Template is available at
-### http://armviz.io/#/?load=https:%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-vm-simple-linux%2Fazuredeploy.json
-$dnsLabelPrefix = $resourceGroupName | ForEach-Object tolower
-$dnsLabelPrefix
-
-#[SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Demo/doc secret.")]
-$password = ConvertTo-SecureString -String "PowerShellRocks!" -AsPlainText -Force
-New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile ./Compute-Linux.json -adminUserName psuser -adminPassword $password -dnsLabelPrefix $dnsLabelPrefix
-
-### Monitor the status of the deployment
-Get-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName
-
-### Discover the resources we created by the previous deployment
-Find-AzureRmResource -ResourceGroupName $resourceGroupName | Select-Object Name,ResourceType,Location
-
-### Get the state of the VM we created
-### Notice: The VM is in running state
-Get-AzureRmResource -ResourceName MyUbuntuVM -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName $resourceGroupName -ODataQuery '$expand=instanceView' | ForEach-Object properties | ForEach-Object instanceview | ForEach-Object statuses
-
-### Discover the operations we can perform on the compute resource
-### Notice: Operations like "Power Off Virtual Machine", "Start Virtual Machine", "Create Snapshot", "Delete Snapshot", "Delete Virtual Machine"
-Get-AzureRmProviderOperation -OperationSearchString Microsoft.Compute/* | Select-Object OperationName,Operation
-
-### Power Off the Virtual Machine we created
-Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Compute/virtualMachines -ResourceName MyUbuntuVM -Action poweroff
-
-### Check the VM state again. It should be stopped now.
-Get-AzureRmResource -ResourceName MyUbuntuVM -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName $resourceGroupName -ODataQuery '$expand=instanceView' | ForEach-Object properties | ForEach-Object instanceview | ForEach-Object statuses
-
-### As you know, you may still be incurring charges even if the VM is in stopped state
-### Deallocate the resource to avoid this charge
-Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Compute/virtualMachines -ResourceName MyUbuntuVM -Action deallocate
-
-### The following command removes the Virtual Machine
-Remove-AzureRmResource -ResourceName MyUbuntuVM -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName $resourceGroupName
-
-### Look at the resources that still exists
-Find-AzureRmResource -ResourceGroupName $resourceGroupName | Select-Object Name,ResourceType,Location
-
-### Remove the resource group and its resources
-Remove-AzureRmResourceGroup -Name $resourceGroupName
diff --git a/demos/Azure/Compute-Linux.json b/demos/Azure/Compute-Linux.json
deleted file mode 100644
index a0e9e27b85e..00000000000
--- a/demos/Azure/Compute-Linux.json
+++ /dev/null
@@ -1,200 +0,0 @@
-{
-  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
-  "contentVersion": "1.0.0.0",
-  "parameters": {
-    "adminUsername": {
-      "type": "string",
-      "metadata": {
-        "description": "User name for the Virtual Machine."
-      }
-    },
-    "adminPassword": {
-      "type": "securestring",
-      "metadata": {
-        "description": "Password for the Virtual Machine."
-      }
-    },
-    "dnsLabelPrefix": {
-      "type": "string",
-      "metadata": {
-        "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
-      }
-    },
-    "ubuntuOSVersion": {
-      "type": "string",
-      "defaultValue": "14.04.2-LTS",
-      "allowedValues": [
-        "12.04.5-LTS",
-        "14.04.2-LTS",
-        "15.10",
-        "16.04.0-LTS"
-      ],
-      "metadata": {
-        "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version. Allowed values: 12.04.5-LTS, 14.04.2-LTS, 15.10, 16.04.0-LTS."
-      }
-    }
-  },
-  "variables": {
-    "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
-    "dataDisk1VhdName": "datadisk1",
-    "imagePublisher": "Canonical",
-    "imageOffer": "UbuntuServer",
-    "OSDiskName": "osdiskforlinuxsimple",
-    "nicName": "myVMNic",
-    "addressPrefix": "10.0.0.0/16",
-    "subnetName": "Subnet",
-    "subnetPrefix": "10.0.0.0/24",
-    "storageAccountType": "Standard_LRS",
-    "publicIPAddressName": "myPublicIP",
-    "publicIPAddressType": "Dynamic",
-    "vmStorageAccountContainerName": "vhds",
-    "vmName": "MyUbuntuVM",
-    "vmSize": "Standard_D1",
-    "virtualNetworkName": "MyVNET",
-    "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
-    "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
-    "apiVersion": "2015-06-15"
-  },
-  "resources": [
-    {
-      "type": "Microsoft.Storage/storageAccounts",
-      "name": "[variables('storageAccountName')]",
-      "apiVersion": "2016-01-01",
-      "location": "[resourceGroup().location]",
-      "sku": {
-        "name": "[variables('storageAccountType')]"
-      },
-      "kind": "Storage",
-      "properties": {}
-    },
-    {
-      "apiVersion": "[variables('apiVersion')]",
-      "type": "Microsoft.Network/publicIPAddresses",
-      "name": "[variables('publicIPAddressName')]",
-      "location": "[resourceGroup().location]",
-      "properties": {
-        "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
-        "dnsSettings": {
-          "domainNameLabel": "[parameters('dnsLabelPrefix')]"
-        }
-      }
-    },
-    {
-      "apiVersion": "[variables('apiVersion')]",
-      "type": "Microsoft.Network/virtualNetworks",
-      "name": "[variables('virtualNetworkName')]",
-      "location": "[resourceGroup().location]",
-      "properties": {
-        "addressSpace": {
-          "addressPrefixes": [
-            "[variables('addressPrefix')]"
-          ]
-        },
-        "subnets": [
-          {
-            "name": "[variables('subnetName')]",
-            "properties": {
-              "addressPrefix": "[variables('subnetPrefix')]"
-            }
-          }
-        ]
-      }
-    },
-    {
-      "apiVersion": "[variables('apiVersion')]",
-      "type": "Microsoft.Network/networkInterfaces",
-      "name": "[variables('nicName')]",
-      "location": "[resourceGroup().location]",
-      "dependsOn": [
-        "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
-        "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
-      ],
-      "properties": {
-        "ipConfigurations": [
-          {
-            "name": "ipconfig1",
-            "properties": {
-              "privateIPAllocationMethod": "Dynamic",
-              "publicIPAddress": {
-                "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
-              },
-              "subnet": {
-                "id": "[variables('subnetRef')]"
-              }
-            }
-          }
-        ]
-      }
-    },
-    {
-      "apiVersion": "[variables('apiVersion')]",
-      "type": "Microsoft.Compute/virtualMachines",
-      "name": "[variables('vmName')]",
-      "location": "[resourceGroup().location]",
-      "dependsOn": [
-        "[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
-        "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
-      ],
-      "properties": {
-        "hardwareProfile": {
-          "vmSize": "[variables('vmSize')]"
-        },
-        "osProfile": {
-          "computerName": "[variables('vmName')]",
-          "adminUsername": "[parameters('adminUsername')]",
-          "adminPassword": "[parameters('adminPassword')]"
-        },
-        "storageProfile": {
-          "imageReference": {
-            "publisher": "[variables('imagePublisher')]",
-            "offer": "[variables('imageOffer')]",
-            "sku": "[parameters('ubuntuOSVersion')]",
-            "version": "latest"
-          },
-          "osDisk": {
-            "name": "osdisk",
-            "vhd": {
-              "uri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), variables('apiVersion')).primaryEndpoints.blob, variables('vmStorageAccountContainerName'),'/',variables('OSDiskName'),'.vhd')]"
-            },
-            "caching": "ReadWrite",
-            "createOption": "FromImage"
-          },
-          "dataDisks": [
-            {
-              "name": "datadisk1",
-              "diskSizeGB": "100",
-              "lun": 0,
-              "vhd": {
-                "uri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), variables('apiVersion')).primaryEndpoints.blob, variables('vmStorageAccountContainerName'),'/',variables('dataDisk1VhdName'),'.vhd')]"
-              },
-              "createOption": "Empty"
-            }
-          ]
-        },
-        "networkProfile": {
-          "networkInterfaces": [
-            {
-              "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
-            }
-          ]
-        },
-        "diagnosticsProfile": {
-          "bootDiagnostics": {
-            "enabled": "true",
-            "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), variables('apiVersion')).primaryEndpoints.blob)]"
-          }
-        }
-      }
-    }
-  ],
-  "outputs": {
-    "hostname": {
-      "type": "string",
-      "value": "[concat(parameters('dnsLabelPrefix'), '.', resourceGroup().location, '.cloudapp.azure.com')]"
-    },
-    "sshCommand": {
-      "type": "string",
-      "value": "[concat('ssh ', parameters('adminUsername'), '@', parameters('dnsLabelPrefix'), '.', resourceGroup().location, '.cloudapp.azure.com')]"
-    }
-  }
-}
diff --git a/demos/Azure/README.md b/demos/Azure/README.md
deleted file mode 100644
index d2c8155f6f4..00000000000
--- a/demos/Azure/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## Demo: Managing Azure using PowerShell
-
-This demo (Azure-Demo.ps1) shows management of Azure Compute resource using Azure Resource Management (ARM) cmdlets.
-
-## Prerequisites ##
-- Install the latest PowerShell Core.
-- Install AzureRM.NetCore.Preview, AzureRM.Profile.NetCore.Preview and AzureRM.Resources.NetCore.Preview modules to a local directory.
-   - The instructions for downloading these modules are in Azure-Demo.ps1 file.
-   - You have to use the command "Install-Package -Name AzureRM.NetCore.Preview -Source https://www.powershellgallery.com/api/v2 -ProviderName NuGet -ExcludeVersion -Destination <Local Directory>"
-
-  
diff --git a/demos/DSC/dsc-demo.ps1 b/demos/DSC/dsc-demo.ps1
deleted file mode 100644
index 3abd642a3b4..00000000000
--- a/demos/DSC/dsc-demo.ps1
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#Get Distro type and set distro-specific variables
-$OSname = Get-Content "/etc/os-release" |Select-String -Pattern "^Name="
-$OSName = $OSName.tostring().split("=")[1].Replace('"','')
-if ($OSName -like "Ubuntu*"){
-    $distro = "Ubuntu"
-    $ApachePackages = @("apache2","php5","libapache2-mod-php5")
-    $ServiceName = "apache2"
-    $VHostDir = "/etc/apache2/sites-enabled"
-    $PackageManager = "apt"
-}elseif (($OSName -like "CentOS*") -or ($OSName -like "Red Hat*") -or ($OSname -like "Oracle*")){
-    $distro = "Fedora"
-    $ApachePackages = @("httpd","mod_ssl","php","php-mysql")
-    $ServiceName = "httpd"
-    $VHostDir = "/etc/httpd/conf.d"
-    $PackageManager = "yum"
-}else{
-    Write-Error "Unknown Linux operating system. Cannot continue."
-}
-
-#Get Service Controller
-if ((Test-Path "/bin/systemctl") -or (Test-Path "/usr/bin/systemctl")){
-    $ServiceCtl = "SystemD"
-}else{
-    $ServiceCtl = "init"
-}
-
-#Get FQDN
-$hostname = & hostname --fqdn
-
-Write-Host -ForegroundColor Blue "Compile a DSC MOF for the Apache Server configuration"
-Configuration ApacheServer{
-    Node localhost{
-
-        ForEach ($Package in $ApachePackages){
-            nxPackage $Package{
-                Ensure = "Present"
-                Name = $Package
-                PackageManager = $PackageManager
-            }
-        }
-
-        nxFile vHostDirectory{
-            DestinationPath = $VhostDir
-            Type = "Directory"
-            Ensure = "Present"
-            Owner = "root"
-            Mode = "744"
-        }
-
-        #Ensure default content does not exist
-        nxFile DefVHost{
-            DestinationPath = "${VhostDir}/000-default.conf"
-            Ensure = "Absent"
-        }
-
-        nxFile Welcome.conf{
-            DestinationPath = "${VhostDir}/welcome.conf"
-            Ensure = "Absent"
-        }
-
-        nxFile UserDir.conf{
-            DestinationPath = "${VhostDir}/userdir.conf"
-            Ensure = "Absent"
-        }
-
-        #Ensure website is defined
-        nxFile DefaultSiteDir{
-            DestinationPath = "/var/www/html/defaultsite"
-            Type = "Directory"
-            Owner = "root"
-            Mode = "744"
-            Ensure = "Present"
-        }
-
-        nxFile DefaultSite.conf{
-            Destinationpath = "${VhostDir}/defaultsite.conf"
-            Owner = "root"
-            Mode = "744"
-            Ensure = "Present"
-            Contents = @"
-<VirtualHost *:80>
-DocumentRoot /var/www/html/defaultsite
-ServerName $hostname
-</VirtualHost>
-
-"@
-            DependsOn = "[nxFile]DefaultSiteDir"
-        }
-
-        nxFile TestPhp{
-            DestinationPath = "/var/www/html/defaultsite/test.php"
-            Ensure = "Present"
-            Owner = "root"
-            Mode = "744"
-            Contents = @'
-<?php phpinfo(); ?>
-
-'@
-        }
-
-        #Configure Apache Service
-        nxService ApacheService{
-            Name = "$ServiceName"
-            Enabled = $true
-            State = "running"
-            Controller = $ServiceCtl
-            DependsOn = "[nxFile]DefaultSite.conf"
-        }
-
-    }
-}
-
-ApacheServer -OutputPath "/tmp"
-
-Pause
-Write-Host -ForegroundColor Blue "Apply the configuration locally"
-& sudo /opt/microsoft/dsc/Scripts/StartDscConfiguration.py -configurationmof /tmp/localhost.mof | Out-Host
-
-Pause
-Write-Host -ForegroundColor Blue "Get the current configuration"
-& sudo /opt/microsoft/dsc/Scripts/GetDscConfiguration.py | Out-Host
diff --git a/demos/DSC/readme.md b/demos/DSC/readme.md
deleted file mode 100644
index 0ce83fb3efa..00000000000
--- a/demos/DSC/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# DSC MOF Compilation Demo
-
-[PowerShell Desired State Configuration](https://docs.microsoft.com/powershell/scripting/dsc/overview/overview) is a declarative configuration platform for Windows and Linux.
-DSC configurations can be authored in PowerShell and compiled into the resultant MOF document.
-
-This demo shows use of PowerShell to author a DSC configuration to set the configuration of an Apache web server. PowerShell scripting is used to assess distribution and version-specific properties,
-such as the service controller and repo manager tools, for use in the configuration.
-
-## Prerequisites
-
-- PowerShell >= 6.0.0-alpha.8 [https://github.com/PowerShell/PowerShell/releases](https://github.com/PowerShell/PowerShell/releases)
-- OMI: >= 1.1.0  [https://www.github.com/microsoft/omi/releases](https://www.github.com/microsoft/omi/releases)
-- Desired State Configuration for Linux >= 1.1.1-278 [https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases](https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases)
-
-> Note: applying the DSC configuration requires privileges. The user must have sudo authorization capabilities. You will be prompted for a sudo password when running the demo.
diff --git a/demos/Docker-PowerShell/Docker-PowerShell.ps1 b/demos/Docker-PowerShell/Docker-PowerShell.ps1
deleted file mode 100644
index 18eb844fd32..00000000000
--- a/demos/Docker-PowerShell/Docker-PowerShell.ps1
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-# This is a short example of the Docker-PowerShell module. The same cmdlets may be used to manage both local & remote machines, including both Windows & Linux hosts
-# The only difference between them is the example container image is pulled & run.
-
-# Import the Docker module
-#    It's available at https://github.com/Microsoft/Docker-PowerShell
-Import-Module Docker
-
-# Pull the 'hello-world' image from Docker Hub
-Pull-ContainerImage hello-world # Linux
-# Pull-ContainerImage patricklang/hello-world # Windows
-
-# Now run it
-Run-ContainerImage hello-world # Linux
-# Run-ContainerImage patricklang/hello-world # Windows
-
-# Make some room on the screen
-cls
-
-# List all containers that have exited
-Get-Container | Where-Object State -EQ "exited"
-
-# That found the right one, so go ahead and remove it
-Get-Container | Where-Object State -EQ "exited" | Remove-Container
-
-# Now remove the container image
-Remove-ContainerImage hello-world
-
-# And list the container images left on the container host
-Get-ContainerImage
diff --git a/demos/README.md b/demos/README.md
deleted file mode 100644
index 53882c047c6..00000000000
--- a/demos/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-This folder contains demos primarily targeted for Linux systems.
-Each demo showcases how to use PowerShell to be more productive by
-leveraging objects and how it can integrate with existing Linux 
-scripts and/or commands.
diff --git a/demos/SystemD/SystemD/SystemD.psm1 b/demos/SystemD/SystemD/SystemD.psm1
deleted file mode 100644
index d1bf0d8e890..00000000000
--- a/demos/SystemD/SystemD/SystemD.psm1
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-Function Get-SystemDJournal {
-    [CmdletBinding()]
-    param (
-        [Alias("args")][string]$journalctlParameters
-       )
-        $sudocmd = "sudo"
-        $cmd = "journalctl"
-        $Result = & $sudocmd $cmd $journalctlParameters -o json --no-pager
-        Try
-        {
-                  $JSONResult = $Result|ConvertFrom-Json
-                  $JSONResult
-        }
-        Catch
-        {
-                $Result
-        }
-}
diff --git a/demos/SystemD/journalctl-demo.ps1 b/demos/SystemD/journalctl-demo.ps1
deleted file mode 100644
index 2597bdc3b66..00000000000
--- a/demos/SystemD/journalctl-demo.ps1
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-Import-Module $PSScriptRoot/SystemD/SystemD.psm1
-
-#list recent journal events
-Write-Host -Foreground Blue "Get recent SystemD journal messages"
-Get-SystemDJournal -args "-xe" |Out-Host
-
-#Drill into SystemD unit messages
-Write-Host -Foreground Blue "Get recent SystemD journal messages for services and return Unit, Message"
-Get-SystemDJournal -args "-xe" | Where-Object {$_._SYSTEMD_UNIT -like "*.service"} | Format-Table _SYSTEMD_UNIT, MESSAGE | Select-Object -First 10 | Out-Host
diff --git a/demos/SystemD/readme.md b/demos/SystemD/readme.md
deleted file mode 100644
index 87580efbae3..00000000000
--- a/demos/SystemD/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## SystemD: journalctl demo
-
-This demo shows use of a PowerShell script module to wrap a native tool (journalctl) so that the output is structured for filtering and presentation control. `journalctl` is expressed as a cmdlet: Get-SystemDJournal, and the JSON output of journalctl is converted to a PowerShell object. 
-
-## Prerequisites ##
-- Requires a SystemD-based operating system (Red Hat or CentOS 7, Ubuntu 16.04)
-- Install PowerShell
-
-
-Note: Accessing the SystemD journal requires privileges. The user must have authorization to elevate with sudo. You will be prompted for a sudo password when running the demo.
\ No newline at end of file
diff --git a/demos/WindowsPowerShellModules/README.md b/demos/WindowsPowerShellModules/README.md
deleted file mode 100644
index 3cf63bd947e..00000000000
--- a/demos/WindowsPowerShellModules/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Using Windows PowerShell modules with PowerShell Core
-
-## Windows PowerShell vs PowerShell Core
-
-Existing Windows PowerShell users are familiar with the large number of modules available, however, they are not necessarily compatible with PowerShell Core.
-More information regarding compatibility is in a [blog post](https://devblogs.microsoft.com/powershell/powershell-6-0-roadmap-coreclr-backwards-compatibility-and-more/).
-
-Windows PowerShell 5.1 is based on .Net Framework 4.6.1, while PowerShell Core is based on .Net Core 2.x.
-Although both adhere to .Net Standard 2.0 and can be compatible, some modules may be using APIs or cmdlets not supported on CoreCLR or using APIs from Windows PowerShell that have been deprecated and removed from PowerShell Core (for example, PSSnapins).
-
-## Importing a Windows PowerShell module
-
-Since compatibility cannot be ensured, PowerShell Core, by default, does not look in the Windows PowerShell module path to find those modules.
-However, advanced users can explicitly enable PowerShell Core to include the Windows PowerShell module path and attempt to import those modules.
-
-First, install the [WindowsPSModulePath](https://www.powershellgallery.com/packages/WindowsPSModulePath) module from the PowerShellGallery:
-
-```powershell
-Install-Module WindowsPSModulePath -Scope CurrentUser
-```
-
-Then run `Add-WindowsPSModulePath` cmdlet to add the Windows PowerShell module path to your PowerShell Core module path:
-
-```powershell
-Add-WindowsPSModulePath
-```
-
-Note that this is only effective in the current PowerShell session.
-If you want to persist this, you can add `Add-WindowsPSModulePath` to your profile:
-
-```powershell
-"Add-WindowsPSModulePath" >> $profile
-```
-
-Once the module path has been updated, you can list available modules:
-
-```powershell
-Get-Module -ListAvailable
-```
-
-Note that PowerShell Core is not aware which Windows PowerShell modules will work and which will not so all are listed.
-We plan to improve this experience in the future.
-You can now import a Windows PowerShell module or just execute a known cmdlet and allow auto-module loading to take care of importing the module:
-
-```powershell
-Get-VM
-# this will automatically load the Hyper-V module
-```
-
-Most of the cmdlets based on CDXML will work just fine, as well as some C# based cmdlets that happen to be .NET Standard 2.0 compatible (for example, Hyper-V module) but the Active Directory module, for example, won't work.
-
-## How you can help
-
-Provide comments on Windows PowerShell modules that work or don't work in our [tracking issue](https://github.com/PowerShell/PowerShell/issues/4062).
diff --git a/demos/crontab/CronTab/CronTab.ps1xml b/demos/crontab/CronTab/CronTab.ps1xml
deleted file mode 100644
index 4246b1f62af..00000000000
--- a/demos/crontab/CronTab/CronTab.ps1xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-
-<Configuration>
-  <ViewDefinitions>
-	<View>
-	<Name>Default</Name>
-	<ViewSelectedBy>
-		<TypeName>CronJob</TypeName>
-	</ViewSelectedBy>
-	<TableControl>
-		<TableHeaders>
-			<TableColumnHeader>
-				<Label>Minute</Label>
-				<Width>10</Width>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-			<TableColumnHeader>
-				<Label>Hour</Label>
-				<Width>10</Width>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-			<TableColumnHeader>
-				<Label>DayOfMonth</Label>
-				<Width>10</Width>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-			<TableColumnHeader>
-				<Label>Month</Label>
-				<Width>10</Width>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-			<TableColumnHeader>
-				<Label>DayOfWeek</Label>
-				<Width>10</Width>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-			<TableColumnHeader>
-				<Label>Command</Label>
-				<Alignment>Left</Alignment>
-			</TableColumnHeader>
-		</TableHeaders>
-		<TableRowEntries>
-		<TableRowEntry>
-			<TableColumnItems>
-			<TableColumnItem>
-			<PropertyName>Minute</PropertyName>
-			</TableColumnItem>
-			<TableColumnItem>
-				<PropertyName>Hour</PropertyName>
-			</TableColumnItem>
-			<TableColumnItem>
-				<PropertyName>DayOfMonth</PropertyName>
-			</TableColumnItem>
-			<TableColumnItem>
-				<PropertyName>Month</PropertyName>
-			</TableColumnItem>
-			<TableColumnItem>
-				<PropertyName>DayOfWeek</PropertyName>
-			</TableColumnItem>
-			<TableColumnItem>
-				<PropertyName>Command</PropertyName>
-			</TableColumnItem>
-			</TableColumnItems>
-		</TableRowEntry>
-		</TableRowEntries>
-	</TableControl>
-	</View>
-  </ViewDefinitions>
-</Configuration>
\ No newline at end of file
diff --git a/demos/crontab/CronTab/CronTab.psd1 b/demos/crontab/CronTab/CronTab.psd1
deleted file mode 100755
index aabc48e572e..00000000000
--- a/demos/crontab/CronTab/CronTab.psd1
+++ /dev/null
@@ -1,61 +0,0 @@
-@{
-
-# Script module or binary module file associated with this manifest.
-RootModule = 'CronTab.psm1'
-
-# Version number of this module.
-ModuleVersion = '0.1.0.0'
-
-# Supported PSEditions
-CompatiblePSEditions = @('Core')
-
-# ID used to uniquely identify this module
-GUID = '508bb97f-de2e-482e-aae2-01caec0be8c7'
-
-# Author of this module
-Author = 'PowerShell'
-
-# Company or vendor of this module
-CompanyName = 'Microsoft Corporation'
-
-# Copyright statement for this module
-Copyright = 'Copyright (c) Microsoft Corporation.'
-
-# Description of the functionality provided by this module
-Description = 'Sample module for managing CronTab'
-
-# Format files (.ps1xml) to be loaded when importing this module
-FormatsToProcess = 'CronTab.ps1xml'
-
-# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
-FunctionsToExport = 'New-CronJob','Remove-CronJob','Get-CronJob','Get-CronTabUser'
-
-# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
-PrivateData = @{
-
-    PSData = @{
-
-        # Tags applied to this module. These help with module discovery in online galleries.
-        # Tags = @()
-
-        # A URL to the license for this module.
-        # LicenseUri = ''
-
-        # A URL to the main website for this project.
-        # ProjectUri = ''
-
-        # A URL to an icon representing this module.
-        # IconUri = ''
-
-        # ReleaseNotes of this module
-        # ReleaseNotes = ''
-
-    } # End of PSData hashtable
-
-} # End of PrivateData hashtable
-
-# HelpInfo URI of this module
-# HelpInfoURI = ''
-
-}
-
diff --git a/demos/crontab/CronTab/CronTab.psm1 b/demos/crontab/CronTab/CronTab.psm1
deleted file mode 100644
index 4cb88e586b9..00000000000
--- a/demos/crontab/CronTab/CronTab.psm1
+++ /dev/null
@@ -1,264 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-using namespace System.Collections.Generic
-using namespace System.Management.Automation
-
-$crontabcmd = "/usr/bin/crontab"
-
-class CronJob {
-    [string] $Minute
-    [string] $Hour
-    [string] $DayOfMonth
-    [string] $Month
-    [string] $DayOfWeek
-    [string] $Command
-
-    [string] ToString()
-    {
-        return "{0} {1} {2} {3} {4} {5}" -f
-            $this.Minute, $this.Hour, $this.DayOfMonth, $this.Month, $this.DayOfWeek, $this.Command
-    }
-}
-
-# Internal helper functions
-
-function Get-CronTab ([String] $user) {
-    $crontab = Invoke-CronTab -user $user -arguments "-l" -noThrow
-    if ($crontab -is [ErrorRecord]) {
-        if ($crontab.Exception.Message.StartsWith("no crontab for ")) {
-            $crontab = @()
-        }
-        else {
-            throw $crontab.Exception
-        }
-    }
-    [string[]] $crontab
-}
-
-function ConvertTo-CronJob ([String] $crontab) {
-    $split = $crontab -split " ", 6
-    $cronjob = [CronJob]@{
-        Minute = $split[0];
-        Hour = $split[1];
-        DayOfMonth= $split[2];
-        Month =$split[3];
-        DayOfWeek = $split[4];
-        Command = $split[5]
-    }
-    $cronjob
-}
-
-function Invoke-CronTab ([String] $user, [String[]] $arguments, [Switch] $noThrow) {
-    If ($user -ne [String]::Empty) {
-        $arguments = Write-Output "-u" $UserName $arguments
-    }
-
-    Write-Verbose "Running: $crontabcmd $arguments"
-    $output = & $crontabcmd @arguments 2>&1
-    if ($LASTEXITCODE -ne 0 -and -not $noThrow) {
-        $e = New-Object System.InvalidOperationException -ArgumentList $output.Exception.Message
-        throw $e
-    } else {
-        $output
-    }
-}
-
-function Import-CronTab ([String] $user, [String[]] $crontab) {
-    $temp = New-TemporaryFile
-    [String]::Join([Environment]::NewLine,$crontab) | Set-Content $temp.FullName
-    Invoke-CronTab -user $user $temp.FullName
-    Remove-Item $temp
-}
-
-# Public functions
-
-function Remove-CronJob {
-<#
-.SYNOPSIS
-  Removes the exactly matching cron job from the cron table
-
-.DESCRIPTION
-  Removes the exactly matching cron job from the cron table
-
-.EXAMPLE
-  Get-CronJob | Where-Object {%_.Command -like 'foo *'} | Remove-CronJob
-
-.RETURNVALUE
-  None
-
-.PARAMETER UserName
-  Optional parameter to specify a specific user's cron table
-
-.PARAMETER Job
-  Cron job object returned from Get-CronJob
-
-.PARAMETER Force
-  Don't prompt when removing the cron job
-#>
-    [CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact="High")]
-    param (
-        [ArgumentCompleter( { $wordToComplete = $args[2]; Get-CronTabUser | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object } )]
-        [Alias("u")]
-        [Parameter(Mandatory=$false)]
-        [String]
-        $UserName,
-
-        [Alias("j")]
-        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
-        [CronJob]
-        $Job,
-
-        [Switch]
-        $Force
-    )
-    process {
-
-        [string[]] $crontab = Get-CronTab -user $UserName
-        $newcrontab = [List[string]]::new()
-        $found = $false
-
-        $JobAsString = $Job.ToString()
-        foreach ($line in $crontab) {
-            if ($JobAsString -ceq $line) {
-                $found = $true
-            } else {
-                $newcrontab.Add($line)
-            }
-        }
-
-        if (-not $found) {
-            $e = New-Object System.Exception -ArgumentList "Job not found"
-            throw $e
-        }
-        if ($Force -or $PSCmdlet.ShouldProcess($Job.Command,"Remove")) {
-            Import-CronTab -user $UserName -crontab $newcrontab
-        }
-    }
-}
-
-function New-CronJob {
-<#
-.SYNOPSIS
-  Create a new cron job
-.DESCRIPTION
-  Create a new job in the cron table.  Date and time parameters can be specified
-  as ranges such as 10-30, as a list: 5,6,7, or combined 1-5,10-15.  An asterisk
-  means 'first through last' (the entire allowed range).  Step values can be used
-  with ranges or with an asterisk.  Every 2 hours can be specified as either
-  0-23/2 or */2.
-.EXAMPLE
-  New-CronJob -Minute 10-30 -Hour 10-20/2 -DayOfMonth */2 -Command "/bin/bash -c 'echo hello' > ~/hello"
-
-.RETURNVALUE
-  If successful, an object representing the cron job is returned
-
-.PARAMETER UserName
-  Optional parameter to specify a specific user's cron table
-
-.PARAMETER Minute
-  Valid values are 0 to 59.  If not specified, defaults to *.
-
-.PARAMETER Hour
-  Valid values are 0-23.  If not specified, defaults to *.
-
-.PARAMETER DayOfMonth
-  Valid values are 1-31.  If not specified, defaults to *.
-
-.PARAMETER Month
-  Valid values are 1-12.  If not specified, defaults to *.
-
-.PARAMETER DayOfWeek
-  Valid values are 0-7.  0 and 7 are both Sunday.  If not specified, defaults to *.
-
-.PARAMETER Command
-  Command to execute at the scheduled time and day.
-#>
-    [CmdletBinding()]
-    param (
-        [ArgumentCompleter( { $wordToComplete = $args[2]; Get-CronTabUser | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object } )]
-        [Alias("u")]
-        [Parameter(Mandatory=$false)]
-        [String]
-        $UserName,
-
-        [Alias("mi")][Parameter(Position=1)][String[]] $Minute = "*",
-        [Alias("h")][Parameter(Position=2)][String[]] $Hour = "*",
-        [Alias("dm")][Parameter(Position=3)][String[]] $DayOfMonth = "*",
-        [Alias("mo")][Parameter(Position=4)][String[]] $Month = "*",
-        [Alias("dw")][Parameter(Position=5)][String[]] $DayOfWeek = "*",
-        [Alias("c")][Parameter(Mandatory=$true,Position=6)][String] $Command
-    )
-    process {
-        # TODO: validate parameters, note that different versions of crontab support different capabilities
-        $line = "{0} {1} {2} {3} {4} {5}" -f [String]::Join(",",$Minute), [String]::Join(",",$Hour),
-            [String]::Join(",",$DayOfMonth), [String]::Join(",",$Month), [String]::Join(",",$DayOfWeek), $Command
-        [string[]] $crontab = Get-CronTab -user $UserName
-        $crontab += $line
-        Import-CronTab -User $UserName -crontab $crontab
-        ConvertTo-CronJob -crontab $line
-    }
-}
-
-function Get-CronJob {
-<#
-.SYNOPSIS
-  Returns the current cron jobs from the cron table
-
-.DESCRIPTION
-  Returns the current cron jobs from the cron table
-
-.EXAMPLE
-  Get-CronJob -UserName Steve
-
-.RETURNVALUE
-  CronJob objects
-  
-.PARAMETER UserName
-  Optional parameter to specify a specific user's cron table
-#>
-    [CmdletBinding()]
-    [OutputType([CronJob])]
-    param (
-        [Alias("u")][Parameter(Mandatory=$false)][String] $UserName
-    )
-    process {
-        $crontab = Get-CronTab -user $UserName
-        ForEach ($line in $crontab) {
-            if ($line.Trim().Length -gt 0)
-            {
-                ConvertTo-CronJob -crontab $line
-            }
-        }
-    }
-}
-
-function Get-CronTabUser {
-<#
-.SYNOPSIS
-  Returns the users allowed to use crontab
-#>
-    [CmdletBinding()]
-    [OutputType([String])]
-    param()
-
-    $allow = '/etc/cron.allow'
-    if (Test-Path $allow)
-    {
-        Get-Content $allow
-    }
-    else
-    {
-        $users = Get-Content /etc/passwd | ForEach-Object { ($_ -split ':')[0] }
-        $deny = '/etc/cron.deny'
-        if (Test-Path $deny)
-        {
-            $denyUsers = Get-Content $deny
-            $users | Where-Object { $denyUsers -notcontains $_ }
-        }
-        else
-        {
-            $users
-        }
-    }
-}
diff --git a/demos/crontab/README.md b/demos/crontab/README.md
deleted file mode 100644
index bdfb16dbb06..00000000000
--- a/demos/crontab/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## CronTab demo
-
-This demo shows examining, creating, and removing cron jobs via crontab.
-
-Output of Get-CronJob is a strongly typed object with properties like DayOfWeek or Command.
-Remove-CronJob prompts before removing the job unless you specify -Force.
-
-Tab completion of -UserName is supported, e.g.
-
-Get-CronJob -u <TAB>
-
-NYI: no way to run crontab with sudo if necessary
-NYI: ignoring shell variables or comments
-NYI: New-CronJob -Description "..." (save in comments"
-NYI: @reboot,@daily,@hourly,etc
diff --git a/demos/crontab/crontab.ps1 b/demos/crontab/crontab.ps1
deleted file mode 100644
index 3d0ee0741ea..00000000000
--- a/demos/crontab/crontab.ps1
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-Import-Module $PSScriptRoot/CronTab/CronTab.psd1
-
-Write-Host -Foreground Yellow "Get the existing cron jobs"
-Get-CronJob | Out-Host
-
-Write-Host -Foreground Yellow "New cron job to clean out tmp every day at 1am"
-New-CronJob -Command 'rm -rf /tmp/*; #demo' -Hour 1 | Out-Host
-
-Write-Host -Foreground Yellow "Add some more jobs"
-New-CronJob -Command 'python -c ~/scripts/backup_users; #demo' -Hour 2 -DayOfWeek 1-5 | Out-Host
-New-CronJob -Command 'powershell -c "cd ~/src/PowerShell; ipmo ./build.psm1; Start-PSBuild"; #demo' -Hour 2 -DayOfWeek * | Out-Host
-
-Write-Host -Foreground Yellow "Show in bash that the new cron job exists"
-crontab -l
-
-Write-Host -Foreground Yellow "Get jobs that run every day"
-Get-CronJob | Where-Object { $_.DayOfWeek -eq '*' -or $_.DayOfWeek -eq '1-7' } | Out-Host
-
-Write-Host -Foreground Yellow "Remove one cron job, with prompting to confirm"
-Get-CronJob | Where-Object { $_.Command -match '^powershell.*' } | Remove-CronJob | Out-Host
-
-Write-Host -Foreground Yellow "And the other job remains"
-Get-CronJob | Out-Host
-
-Write-Host -Foreground Yellow "Remove remaining demo jobs without prompting"
-Get-CronJob | Where-Object { $_.Command -match '#demo'} | Remove-CronJob -Force
-
-Write-Host -Foreground Yellow "Show in bash that cron should be clean"
-crontab -l
diff --git a/demos/dsc.ps1 b/demos/dsc.ps1
deleted file mode 100644
index c59be643edc..00000000000
--- a/demos/dsc.ps1
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-# DSC MOF Compilation
-# DSC Configuration() script that:
-# Defines base configuration users, groups, settings
-# Uses PS function to set package configuration (ensure=Present) for an array of packages
-# Probes for the existence of a package (Apache or MySQL) and conditionally configures the workload. I.e., if Apache is installed, configure Apache settings
-
-# Demo execution:
-# Show the .ps1
-# Run the .ps1 to generate a MOF
-# Apply the MOF locally with Start-DSCConfiguration
-# Show the newly configured state
diff --git a/demos/powershellget/PowerShellGet.ps1 b/demos/powershellget/PowerShellGet.ps1
deleted file mode 100644
index e93216851da..00000000000
--- a/demos/powershellget/PowerShellGet.ps1
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#region find, install, update, uninstall the PowerShell scripts from an online repository.
-# Value: equivalent of pypi
-
-# List of PowerShellGet commands
-Get-Command -Module PowerShellGet
-
-# Discover PowerShell Scripts
-Find-Script
-Find-Script -Name Start-Demo
-
-# Save scripts to a specified location
-Save-Script Start-Demo -Repository PSGallery -Path /tmp
-Get-ChildItem -Path /tmp/Start-Demo.ps1
-
-# Install a script to the common scripts location
-Find-Script -Name Start-Demo -Repository PSGallery  | Install-Script
-Get-InstalledScript
-
-# Install another script to show the update functionality
-Install-Script Fabrikam-Script -RequiredVersion 1.0
-Get-InstalledScript
-Get-InstalledScript Fabrikam-Script | Format-List *
-
-# Update the installed scripts
-Update-Script -WhatIf
-Update-Script
-Get-InstalledScript
-
-# Uninstall a script file
-Uninstall-Script Fabrikam-Script -Verbose
-
-#endregion
-
-#region Using PowerShellGet find and install modules
-
-# Value: equivalent of pypi
-# Look for all the modules we'll be demoing today
-Find-Module -Tag 'PowerShellCore_Demo'
-
-# Save module to specified location
-Save-Module -Tag 'PowerShellCore_Demo' -Path /tmp
-
-# Pipe this to Install-Module to install them
-Find-Module -Tag 'PowerShellCore_Demo' | Install-Module -Verbose
-Get-InstalledModule
-
-# Update all installed modules
-Update-Module
-
-#endregion
-
-#region Using PowerShellGet with tags
-
-# Look for all the scripts we'll be demoing today
-Find-Script -Tag 'PowerShellCore_Demo'
-
-# Pipe this to Install-Script to install them
-Find-Script -Tag 'PowerShellCore_Demo' | Install-Script -Verbose
-Get-InstalledScript
-
-#endregion
-
-#region Working with PowerShellGet repositories
-
-# List available PS repositories
-Get-PSRepository
-
-# Register a new private feed
-Register-PSRepository -Name "myPrivateGallery" –SourceLocation "https://www.myget.org/F/powershellgetdemo/api/v2" -InstallationPolicy Trusted
-
-# Change the trust level for a repositories
-Set-PSRepository -Name "myPrivateGallery" -InstallationPolicy "Untrusted"
-
-# Remove a private feed
-Unregister-PSRepository -Name "myPrivateGallery"
-
-#endregion
diff --git a/demos/powershellget/README.md b/demos/powershellget/README.md
deleted file mode 100644
index f225610169b..00000000000
--- a/demos/powershellget/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## PowerShellGet demo
-
-PowerShellGet is a PowerShell module with the commands for discovering, installing, updating and publishing the PowerShell artifacts like Modules, DSC Resources, Role Capabilities and Scripts.
-
-This demo shows discovering, installing, updating, uninstalling the PowerShell scripts from an online repository.
diff --git a/demos/python/README.md b/demos/python/README.md
deleted file mode 100644
index d2d1486e2fe..00000000000
--- a/demos/python/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# PowerShell/Python Interoperation Demo
-
-The `demo_script.ps1` file in this directory walks through a
-demonstration of basic interoperation between PowerShell and Python
-including how to use JSON to exchange structured objects between
-Python and PowerShell.
-
-The other files in this directory are referenced by `demo_script.ps1`.
diff --git a/demos/python/class1.ps1 b/demos/python/class1.ps1
deleted file mode 100644
index b74c0c8d5d6..00000000000
--- a/demos/python/class1.ps1
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#
-# Wrap Python script in such a way to make it easy to
-# consume from PowerShell
-#
-# The variable $PSScriptRoot points to the directory
-# from which the script was executed. This allows
-# picking up the Python script from the same directory
-#
-
-& $PSScriptRoot/class1.py | ConvertFrom-Json
-
diff --git a/demos/python/class1.py b/demos/python/class1.py
deleted file mode 100755
index ad923449455..00000000000
--- a/demos/python/class1.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/python3
-
-import json
-
-# Define a class with a method that returns JSON
-class returnsjson:
-    def __init__(self):
-        the_object = self
-    def method1(self):
-        return json.dumps(['foo',
-                            {
-                                'bar': ('baz', None, 1.0, 2),
-                                'buz': ('foo1', 'foo2', 'foo3')
-                            },
-                            'alpha',
-                            1,2,3])
-
-c = returnsjson()
-print(c.method1())
diff --git a/demos/python/demo_script.ps1 b/demos/python/demo_script.ps1
deleted file mode 100644
index af2067642a1..00000000000
--- a/demos/python/demo_script.ps1
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#
-# Demo simple interoperation between PowerShell and Python
-
-# Basic execution of a Python script fragment
-python -c "print('Hi!')"
-
-# Capture output in a variable
-$data = python -c "print('Hi!')"
-
-# And show the data
-$data
-
-# Use in expressions
-5 + (python -c "print(2 + 3)") + 7
-
-# Create a Python script using a PowerShell here-string, no extension
-@"
-#!/usr/bin/python3
-print('Hi!')
-"@ | Out-File -Encoding ascii hi
-
-# Make it executable
-chmod +x hi
-
-# Run it - shows that PowerShell really is a shell
-./hi
-
-# A more complex script that outputs JSON
-cat class1.py
-
-# Run the script
-./class1.py
-
-# Capture the data as structured objects (arrays and hashtables)
-$data = ./class1.py | ConvertFrom-Json
-
-# look at the first element of the returned array
-$data[0]
-
-# Look at the second
-$data[1]
-
-# Get a specific element from the data
-$data[1].buz[1]
-
-# Finally wrap it all up so it looks like a simple PowerShell command
-cat class1.ps1
-
-# And run it, treating the output as structured data.
-(./class1)[1].buz[1]
-
-# Finally a PowerShell script with in-line Python
-cat inline_python.ps1
-
-# and run it
-./inline_python
-
-####################################
-# cleanup
-rm hi
diff --git a/demos/python/inline_python.ps1 b/demos/python/inline_python.ps1
deleted file mode 100644
index 71b65215f74..00000000000
--- a/demos/python/inline_python.ps1
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#
-# An example showing inline Python code in a PowerShell script
-#
-
-"Hello from PowerShell!"
-
-# Inline Python code in a "here string" which allows for a multi-line script
-python3 -c @"
-print('    Hello from Python!')
-print('    Python and PowerShell get along great!')
-"@
-
-# Back to PowerShell...
-"Back to PowerShell."
-"Bye now!"
-
diff --git a/demos/rest/README.md b/demos/rest/README.md
deleted file mode 100644
index 03bb103889e..00000000000
--- a/demos/rest/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## REST demo
-
-This demo shows how to interact with the GitHub API using the Invoke-WebRequest cmdlet.
-
-rest.ps1:
-Invoke-WebRequest and ConvertFrom-Json cmdlets are used to get the issues of a repo.
-The issues are processed as objects to find the most commented on issues.
diff --git a/demos/rest/rest.ps1 b/demos/rest/rest.ps1
deleted file mode 100644
index f40b49b6538..00000000000
--- a/demos/rest/rest.ps1
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-#-----------------
-
-function Get-Issue
-{
-    param([string]$UserName,
-          [string]$Repo,
-          [ValidateRange(1,100)][int]$PerPage = 100)
-
-    $body = @{
-        per_page = $PerPage
-    }
-
-    $uri = "https://api.github.com/repos/$UserName/$Repo/issues"
-    while ($uri)
-    {
-        $response = Invoke-WebRequest -Uri $uri -Body $body
-        $response.Content | ConvertFrom-Json | Write-Output
-
-        $uri = $null
-        foreach ($link in $response.Headers.Link -split ',')
-        {
-            if ($link -match '\s*<(.*)>;\s+rel="next"')
-            {
-                $uri = $Matches[1]
-            }
-        }
-    }
-}
-
-$issues = Get-Issue -UserName lzybkr -Repo PSReadline
-
-$issues.Count
-
-$issues | Sort-Object -Descending comments | Select-Object -First 15 | ft number,comments,title
-
-foreach ($issue in $issues)
-{
-    if ($issue.labels.name -contains 'bug' -and $issue.labels.name -contains 'vi mode')
-    {
-        "{0} is a vi mode bug" -f $issue.url
-    }
-}
diff --git a/docker/tests/README.md b/docker/tests/README.md
deleted file mode 100644
index 716a7d6f62e..00000000000
--- a/docker/tests/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Docker tests
-
-## Windows and Linux containers
-
-The tests must be run separately on the Windows and Linux docker daemons. You can use the Linux docker daemon on Windows, but that will only test Linux containers not Windows Containers.
-
-## To building and basic behavior of the containers
-
-```PowerShell
-Invoke-Pester
-```
-
-Note: be sure to do this using both the Windows and Linux docker daemon.
-
-## To test the productions containers
-
-```PowerShell
-Invoke-Pester -Tag Behavior
-```
-
-## To test only building the containers
-
-```PowerShell
-Invoke-Pester -Tag Build
-```
diff --git a/docker/tests/Templates/centos7/Dockerfile b/docker/tests/Templates/centos7/Dockerfile
deleted file mode 100644
index dddf2439445..00000000000
--- a/docker/tests/Templates/centos7/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-FROM centos:7
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN yum install -y \
-        curl \
-        glibc-locale-source \
-        git
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME \
-    && yum install -y $PACKAGENAME
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh$PREVIEWSUFFIX -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/debian.9/Dockerfile b/docker/tests/Templates/debian.9/Dockerfile
deleted file mode 100644
index f2de0f8d61f..00000000000
--- a/docker/tests/Templates/debian.9/Dockerfile
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM debian:stretch
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        curl \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME
-RUN dpkg -i $PACKAGENAME || :
-RUN apt-get install -y -f --no-install-recommends
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh$PREVIEWSUFFIX -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fedora28/Dockerfile b/docker/tests/Templates/fedora28/Dockerfile
deleted file mode 100644
index 9c9f958f54d..00000000000
--- a/docker/tests/Templates/fedora28/Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM fedora:28
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN dnf install -y \
-        curl \
-        glibc-locale-source \
-        git \
-        compat-openssl10 \
-    && dnf upgrade-minimal -y --security \
-    && dnf clean all
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME
-RUN dnf install -y $PACKAGENAME
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh$PREVIEWSUFFIX -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-centos7/Dockerfile b/docker/tests/Templates/fxdependent-centos7/Dockerfile
deleted file mode 100644
index 10cde0cd125..00000000000
--- a/docker/tests/Templates/fxdependent-centos7/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM centos:7
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN yum install -y \
-        glibc-locale-source \
-        git
-
-# Install dotnet-runtime
-RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
-RUN yum install -y \
-        dotnet-runtime-2.1
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell
-RUN tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-debian.9/Dockerfile b/docker/tests/Templates/fxdependent-debian.9/Dockerfile
deleted file mode 100644
index 2d7beff913b..00000000000
--- a/docker/tests/Templates/fxdependent-debian.9/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM microsoft/dotnet:2.1.7-runtime-stretch-slim
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell
-RUN tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-dotnetsdk-latest/Dockerfile b/docker/tests/Templates/fxdependent-dotnetsdk-latest/Dockerfile
deleted file mode 100644
index cf56e4ec074..00000000000
--- a/docker/tests/Templates/fxdependent-dotnetsdk-latest/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM microsoft/dotnet:3.0.100-preview-sdk
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell \
-    && tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-fedora28/Dockerfile b/docker/tests/Templates/fxdependent-fedora28/Dockerfile
deleted file mode 100644
index 6acb7452446..00000000000
--- a/docker/tests/Templates/fxdependent-fedora28/Dockerfile
+++ /dev/null
@@ -1,38 +0,0 @@
-FROM fedora:28
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN dnf install -y \
-        glibc-locale-source \
-        git \
-        compat-openssl10 \
-    && dnf upgrade-minimal -y --security \
-    && dnf clean all
-
-# Install dotnet-runtime
-RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc
-ADD https://packages.microsoft.com/config/fedora/27/prod.repo .
-RUN mv prod.repo /etc/yum.repos.d/microsoft-prod.repo
-RUN dnf install -y \
-        dotnet-runtime-2.1 \
-    && dnf upgrade-minimal -y --security \
-    && dnf clean all
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell \
-    && tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-opensuse42.3/Dockerfile b/docker/tests/Templates/fxdependent-opensuse42.3/Dockerfile
deleted file mode 100644
index 74b4bc98256..00000000000
--- a/docker/tests/Templates/fxdependent-opensuse42.3/Dockerfile
+++ /dev/null
@@ -1,41 +0,0 @@
-FROM opensuse:42.3
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN zypper --non-interactive update --skip-interactive \
-    && zypper --non-interactive install \
-        glibc-locale \
-        glibc-i18ndata \
-        tar \
-        libunwind \
-        libicu \
-        openssl \
-        git
-
-# Install dotnet-runtime
-ADD https://packages.microsoft.com/keys/microsoft.asc .
-RUN rpmkeys --import microsoft.asc
-ADD https://packages.microsoft.com/config/opensuse/42.2/prod.repo .
-RUN mv prod.repo /etc/zypp/repos.d/microsoft-prod.repo
-RUN zypper --non-interactive update --skip-interactive \
-    && zypper --non-interactive install \
-        dotnet-runtime-2.1
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell
-RUN tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-ubuntu16.04/Dockerfile b/docker/tests/Templates/fxdependent-ubuntu16.04/Dockerfile
deleted file mode 100644
index aa976ddb19e..00000000000
--- a/docker/tests/Templates/fxdependent-ubuntu16.04/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-FROM ubuntu:xenial
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Install dotnet-runtime
-ADD https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb .
-RUN dpkg -i packages-microsoft-prod.deb
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        dotnet-runtime-2.1 \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell \
-    && tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/fxdependent-ubuntu18.04/Dockerfile b/docker/tests/Templates/fxdependent-ubuntu18.04/Dockerfile
deleted file mode 100644
index adc9219a07d..00000000000
--- a/docker/tests/Templates/fxdependent-ubuntu18.04/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM microsoft/dotnet:2.1.7-runtime-bionic
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-# Install PowerShell package
-ADD $PACKAGELOCATION/$PACKAGENAME .
-RUN mkdir -p /opt/microsoft/powershell \
-    && tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Download and run tests
-RUN $TESTDOWNLOADCOMMAND
-RUN dotnet /opt/microsoft/powershell/pwsh.dll -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/opensuse42.3/Dockerfile b/docker/tests/Templates/opensuse42.3/Dockerfile
deleted file mode 100644
index d401e611382..00000000000
--- a/docker/tests/Templates/opensuse42.3/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-FROM opensuse:42.3
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-ARG POWERSHELL_LINKFILE=/usr/bin/pwsh
-
-# Install dependencies
-RUN zypper --non-interactive update --skip-interactive \
-    && zypper --non-interactive install \
-        glibc-locale \
-        glibc-i18ndata \
-        tar \
-        curl \
-        libunwind \
-        libicu \
-        openssl \
-        git
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME
-
-# Create the target folder where powershell will be placed
-RUN mkdir -p /opt/microsoft/powershell
-# Expand powershell to the target folder
-RUN tar zxf $PACKAGENAME -C /opt/microsoft/powershell
-
-# Create the symbolic link that points to powershell
-RUN ln -s /opt/microsoft/powershell/pwsh $POWERSHELL_LINKFILE
-
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/ubuntu16.04/Dockerfile b/docker/tests/Templates/ubuntu16.04/Dockerfile
deleted file mode 100644
index 7439eda5a7d..00000000000
--- a/docker/tests/Templates/ubuntu16.04/Dockerfile
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM ubuntu:xenial
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        curl \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME
-RUN dpkg -i $PACKAGENAME || :
-RUN apt-get install -y -f --no-install-recommends
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh$PREVIEWSUFFIX -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/Templates/ubuntu18.04/Dockerfile b/docker/tests/Templates/ubuntu18.04/Dockerfile
deleted file mode 100644
index 6c7a960130d..00000000000
--- a/docker/tests/Templates/ubuntu18.04/Dockerfile
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM ubuntu:bionic
-
-ARG PACKAGENAME
-ARG PACKAGELOCATION
-ARG PREVIEWSUFFIX=
-ARG TESTLIST=/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module
-ARG TESTDOWNLOADCOMMAND="git clone --recursive https://github.com/PowerShell/PowerShell.git"
-
-# Install dependencies
-RUN apt-get update \
-    && apt-get install -y --no-install-recommends \
-        apt-utils \
-        ca-certificates \
-        curl \
-        apt-transport-https \
-        locales \
-        git \
-    && apt-get clean
-
-# Setup the locale
-ENV LANG en_US.UTF-8
-ENV LC_ALL $LANG
-RUN locale-gen $LANG && update-locale
-
-RUN curl -L -o $PACKAGENAME $PACKAGELOCATION/$PACKAGENAME
-RUN dpkg -i $PACKAGENAME || :
-RUN apt-get install -y -f --no-install-recommends
-RUN $TESTDOWNLOADCOMMAND
-RUN pwsh$PREVIEWSUFFIX -c "Import-Module /PowerShell/build.psm1;\$dir='/usr/local/share/powershell/Modules';\$null=New-Item -Type Directory -Path \$dir -ErrorAction SilentlyContinue;Restore-PSPester -Destination \$dir;exit (Invoke-Pester $TESTLIST -PassThru).FailedCount"
diff --git a/docker/tests/containerTestCommon.psm1 b/docker/tests/containerTestCommon.psm1
deleted file mode 100644
index c6b540abd77..00000000000
--- a/docker/tests/containerTestCommon.psm1
+++ /dev/null
@@ -1,370 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-$script:forcePull = $true
-# Get docker Engine OS
-function Get-DockerEngineOs
-{
-    docker info --format '{{ .OperatingSystem }}'
-}
-
-# Call Docker with appropriate result checksfunction Invoke-Docker
-function Invoke-Docker
-{
-    param(
-        [Parameter(Mandatory=$true)]
-        [string[]]
-        $Command,
-        [ValidateSet("error","warning",'ignore')]
-        $FailureAction = 'error',
-
-        [Parameter(Mandatory=$true)]
-        [string[]]
-        $Params,
-
-        [switch]
-        $PassThru,
-        [switch]
-        $SuppressHostOutput
-    )
-
-    $ErrorActionPreference = 'Continue'
-
-    # Log how we are running docker for troubleshooting issues
-    Write-Verbose "Running docker $command $params" -Verbose
-    if($SuppressHostOutput.IsPresent)
-    {
-        $result = docker $command $params 2>&1
-    }
-    else
-    {
-        &'docker' $command $params 2>&1 | Tee-Object -Variable result -ErrorAction SilentlyContinue | Out-String -Stream -ErrorAction SilentlyContinue | Write-Host -ErrorAction SilentlyContinue
-    }
-
-    $dockerExitCode = $LASTEXITCODE
-    if($PassThru.IsPresent)
-    {
-        Write-Verbose "passing through docker result$($result.length)..." -Verbose
-        return $result
-    }
-    elseif($dockerExitCode -ne 0 -and $FailureAction -eq 'error')
-    {
-        Write-Error "docker $command failed with: $result" -ErrorAction Stop
-        return $false
-    }
-    elseif($dockerExitCode -ne 0 -and $FailureAction -eq 'warning')
-    {
-        Write-Warning "docker $command failed with: $result"
-        return $false
-    }
-    elseif($dockerExitCode -ne 0)
-    {
-        return $false
-    }
-
-    return $true
-}
-
-# Return a list of Linux Container Test Cases
-function Get-LinuxContainer
-{
-    foreach($os in 'centos7','ubuntu16.04')
-    {
-        Write-Output @{
-            Name = $os
-            Path = "$PSScriptRoot/../release/$os"
-        }
-    }
-}
-
-# Return a list of Windows Container Test Cases
-function Get-WindowsContainer
-{
-    foreach($os in 'windowsservercore','nanoserver')
-    {
-        Write-Output @{
-            Name = $os
-            Path = "$PSScriptRoot/../release/$os"
-        }
-    }
-}
-
-$script:repoName = 'microsoft/powershell'
-function Get-RepoName
-{
-    return $script:repoName
-}
-
-function Set-RepoName
-{
-    param([string]$RepoName)
-
-    $script:repoName = $RepoName
-    $script:forcePull = $false
-}
-
-function Test-SkipWindows
-{
-    [bool] $canRunWindows = (Get-DockerEngineOs) -like 'Windows*'
-    return ($IsLinux -or $IsMacOS -or !$canRunWindows)
-}
-
-function Test-SkipLinux
-{
-    $os = Get-DockerEngineOs
-
-    switch -wildcard ($os)
-    {
-        '*Linux*' {
-            return $false
-        }
-        '*Mac' {
-            return $false
-        }
-        # Docker for Windows means we are running the linux kernel
-        'Docker for Windows' {
-            return $false
-        }
-        'Windows*' {
-            return $true
-        }
-        default {
-            throw "Unknown docker os '$os'"
-        }
-    }
-}
-
-function Get-TestContext
-{
-    param(
-        [ValidateSet('Linux','Windows','macOS')]
-        [string]$Type
-    )
-
-    $resultFileName = 'results.xml'
-    $logFileName = 'results.log'
-    $containerTestDrive = '/test'
-
-    # Return a windows context if the Context in Windows *AND*
-    # the current system is windows, otherwise Join-path will fail.
-    if($Type -eq 'Windows' -and $IsWindows)
-    {
-        $ContainerTestDrive = 'C:\test'
-    }
-    $resolvedTestDrive = (Resolve-Path "Testdrive:\").providerPath
-
-    return @{
-        ResolvedTestDrive = $resolvedTestDrive
-        ResolvedXmlPath = Join-Path $resolvedTestDrive -ChildPath $resultFileName
-        ResolvedLogPath = Join-Path $resolvedTestDrive -ChildPath $logFileName
-        ContainerTestDrive = $ContainerTestDrive
-        ContainerXmlPath = Join-Path $containerTestDrive -ChildPath $resultFileName
-        ContainerLogPath = Join-Path $containerTestDrive -ChildPath $logFileName
-        Type = $Type
-        ForcePull = $script:forcePull
-    }
-}
-
-function Get-ContainerPowerShellVersion
-{
-    param(
-        [HashTable] $TestContext,
-        [string] $RepoName,
-        [string] $Name
-    )
-
-    $imageTag = "${script:repoName}:${Name}"
-
-    if($TestContext.ForcePull)
-    {
-        $null=Invoke-Docker -Command 'image', 'pull' -Params $imageTag -SuppressHostOutput
-    }
-
-    $runParams = @()
-    $localVolumeName = $testContext.resolvedTestDrive
-    $runParams += '--rm'
-    if($TestContext.Type -ne 'Windows' -and $IsWindows)
-    {
-        # use a container volume on windows because host volumes are not automatic
-        $volumeName = "test-volume-" + (Get-Random -Minimum 100 -Maximum 999)
-
-        # using alpine because it's tiny
-        $null=Invoke-Docker -Command create -Params '-v', '/test', '--name', $volumeName, 'alpine' -SuppressHostOutput
-        $runParams += '--volumes-from'
-        $runParams += $volumeName
-    }
-    else {
-        $runParams += '-v'
-        $runParams += "${localVolumeName}:$($testContext.containerTestDrive)"
-    }
-
-    $runParams += $imageTag
-    $runParams += 'pwsh'
-    $runParams += '-c'
-    $runParams += ('$PSVersionTable.PSVersion.ToString() | out-string | out-file -encoding ascii -FilePath '+$testContext.containerLogPath)
-
-    $null = Invoke-Docker -Command run -Params $runParams -SuppressHostOutput
-    if($TestContext.Type -ne 'Windows' -and $IsWindows)
-    {
-        $null = Invoke-Docker -Command cp -Params "${volumeName}:$($testContext.containerLogPath)", $TestContext.ResolvedLogPath
-        $null = Invoke-Docker -Command container, rm -Params $volumeName, '--force' -SuppressHostOutput
-    }
-    return (Get-Content -Encoding Ascii $testContext.resolvedLogPath)[0]
-}
-
-# Function defines a config mapping for testing Preview packages.
-# The list of supported OS for each release can be found here:
-# https://github.com/PowerShell/PowerShell-Docs/blob/staging/reference/docs-conceptual/PowerShell-Core-Support.md#supported-platforms
-function Get-DefaultPreviewConfigForPackageValidation
-{
-    # format: <DockerfileFolderName>=<PartOfPackageFilename>
-    @{  'centos7'='rhel.7';
-        'debian.9'='debian.9';
-        'fedora28'='rhel.7';
-        'opensuse42.3'='linux-x64.tar.gz';
-        'ubuntu16.04'='ubuntu.16.04';
-        'ubuntu18.04'='ubuntu.18.04';
-        'fxdependent-centos7'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-debian.9'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-fedora28'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-opensuse42.3'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-ubuntu16.04'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-ubuntu18.04'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-dotnetsdk-latest'='linux-x64-fxd-dotnetsdk.tar.gz'
-    }
-}
-
-# Function defines a config mapping for testing Stable packages.
-# The list of supported OS for each release can be found here:
-# https://github.com/PowerShell/PowerShell-Docs/blob/staging/reference/docs-conceptual/PowerShell-Core-Support.md#supported-platforms
-function Get-DefaultStableConfigForPackageValidation
-{
-    # format: <DockerfileFolderName>=<PartOfPackageFilename>
-    @{  'centos7'='rhel.7';
-        'debian.9'='debian.9';
-        'opensuse42.3'='linux-x64.tar.gz';
-        'ubuntu16.04'='ubuntu.16.04';
-        'fxdependent-centos7'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-debian.9'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-opensuse42.3'='linux-x64-fxdependent.tar.gz';
-        'fxdependent-ubuntu16.04'='linux-x64-fxdependent.tar.gz'
-    }
-}
-
-# Returns a list of files in a specified Azure container.
-function Get-PackageNamesOnAzureBlob
-{
-    param(
-        [string]
-        $ContainerUrl,
-
-        # $SAS (shared access signature) param should include beginning '?' and trailing '&'
-        [string]
-        $SAS
-    )
-
-
-    $response = Invoke-RestMethod -Method Get -Uri $($ContainerUrl + $SAS + 'restype=container&comp=list')
-
-    $xmlResponce = [xml]$response.Substring($response.IndexOf('<EnumerationResults')) # remove some bad chars in the beginning that break XML parsing
-    ($xmlResponce.EnumerationResults.Blobs.Blob).Name
-}
-
-# This function is used for basic validation of PS packages during a release;
-# During the process Docker files are filled out and executed with Docker build;
-# During the build PS packages are downloaded onto Docker containers, installed and selected Pester tests from PowerShell Github repo are executed.
-# This function must be run on a Docker host machine in 'Linux containers' mode, such as Windows 10 server with Hyper-V role installed.
-function Test-PSPackage
-{
-    param(
-        [string]
-        [Parameter(Mandatory=$true)]
-        $PSPackageLocation, # e.g. Azure container storage url
-        [string]
-        $SAS,# $SAS (shared access signature) param should include beginning '?' and trailing '&'
-        [Hashtable]
-        $Config, # hashtable that maps packages to dockerfiles; for example see Get-DefaultConfigForPackageValidation
-        [string]
-        $TestList = "/PowerShell/test/powershell/Modules/PackageManagement/PackageManagement.Tests.ps1,/PowerShell/test/powershell/engine/Module",
-        [string]
-        $TestDownloadCommand = "git clone --recursive https://github.com/PowerShell/PowerShell.git",
-        [switch]
-        $Preview = $false
-    )
-
-    $PSPackageLocation = $PSPackageLocation.TrimEnd('/','\') # code below assumes there is no trailing separator in PSPackageLocation url
-    $RootFolder = Join-Path $PSScriptRoot 'Templates'
-
-
-    $packageList = Get-PackageNamesOnAzureBlob -ContainerUrl $PSPackageLocation -SAS $SAS
-    if (!$Config)
-    {
-        if ($Preview)
-        {
-            $Config = Get-DefaultPreviewConfigForPackageValidation
-        }
-        else
-        {
-            $Config = Get-DefaultStableConfigForPackageValidation
-        }
-    }
-
-    # pre-process $Config: verify build directories and packages exist
-    $map = @{}
-    foreach($kp in $Config.GetEnumerator())
-    {
-        $buildDir = Join-Path $RootFolder $kp.Key
-        $packageName = $packageList | Where-Object {$_ -like $('*'+$kp.Value+'*')}
-
-        if (-not (Test-Path $buildDir))
-        {
-            Write-Error "Directory does Not exist - $buildDir; Check `$Config parameter and '$RootFolder' folder"
-        }
-        elseif (-not ($packageName))
-        {
-            Write-Error "Can not find package that matches filter *$($kp.Value)*; Check `$Config parameter and '$PSPackageLocation'"
-        }
-        else
-        {
-            $map.Add($buildDir, $packageName)
-        }
-    }
-
-    Write-Verbose "Using configuration:" -Verbose
-    Write-Verbose ($map | Format-List | Out-String) -Verbose
-
-    $results = @{}
-    $returnValue = $true
-
-    # run builds sequentially, but don't block for errors so that configs after failed one can run
-    foreach($kp in $map.GetEnumerator())
-    {
-        $dockerDirPath = $kp.Key
-        $packageFileName = $kp.Value
-
-        $buildArgs = @()
-
-        $buildArgs += "--build-arg","PACKAGENAME=$packageFileName"
-        $buildArgs += "--build-arg","PACKAGELOCATION=$PSPackageLocation"
-        if ($Preview)
-        {
-            $buildArgs += "--build-arg","PREVIEWSUFFIX=-preview"
-        }
-        $buildArgs += "--build-arg","TESTLIST=$TestList"
-        $buildArgs += "--build-arg","TESTDOWNLOADCOMMAND=$TestDownloadCommand"
-        $buildArgs += "--no-cache"
-        $buildArgs += $dockerDirPath
-
-        $dockerResult = Invoke-Docker -Command 'build' -Params $buildArgs -FailureAction warning
-
-        $confName = Split-Path -Leaf $dockerDirPath
-        $results.Add($confName, $dockerResult)
-        if (-not $dockerResult) {$returnValue = $false}
-    }
-
-    # in the end print results for all configurations
-    Write-Verbose "Package validation results:" -Verbose
-    $results
-
-    return $returnValue
-}
diff --git a/docs/DOCSMIGRATION.md b/docs/DOCSMIGRATION.md
index 43c1b23dfe4..9b2003be5a6 100644
--- a/docs/DOCSMIGRATION.md
+++ b/docs/DOCSMIGRATION.md
@@ -1,20 +1,38 @@
 # Documentation Migration
 
-The docs folder in this repo contains a lot of documentation about the PowerShell source code and build environment.
-It also has contained documentation about installing and using PowerShell.
-That documentation belongs in the [PowerShell/PowerShell-Docs](https://github.com/PowerShell/PowerShell-Docs) repo.
+The docs folder in this repository contains documentation about the PowerShell source code and build
+environment.
 
-We are in the process of migrating the user-focused articles to the docs repo.
-This file records which files have been migrated.
+User-focused documentation has been moved to the [MicrosoftDocs/PowerShell-Docs][01] repository.
 
-## 2018-05-18
+The files from the `learning-powershell` folder have been removed from this repository. This list
+provides links to suitable replacements.
 
-The following files have been moved to the PowerShell/PowerShell-Docs repo.
+- **create-powershell-scripts.md**
+  - [about_Scripts][06]
+- **debugging-from-commandline.md**
+  - [about_Debuggers][04]
+- **powershell-beginners-guide.md**
+  - [PowerShell 101][09]
+- **README.md**
+  - [Install PowerShell on Windows, Linux, and macOS][07]
+  - [Using Visual Studio Code (VS Code)][11]
+  - [Pester Guides][02]
+  - [Writing Pester Tests Guidelines][03]
+  - [PowerShell learning resources][08]
+- **working-with-powershell-objects.md**
+  - [about_Object_Creation][05]
+  - [Crescendo overview][10]
 
-| Original file location         | New location in PowerShell/PowerShell-Docs                                 |
-|--------------------------------|----------------------------------------------------------------------------|
-| `docs/installation/linux.md`   | `reference/docs-conceptual/setup/Installing-PowerShell-Core-on-Linux.md`   |
-| `docs/installation/macos.md`   | `reference/docs-conceptual/setup/Installing-PowerShell-Core-on-macOS.md`   |
-| `docs/installation/windows.md` | `reference/docs-conceptual/setup/Installing-PowerShell-Core-on-Windows.md` |
-| `docs/BREAKINGCHANGES.md`      | `reference/docs-conceptual/whats-new/breaking-changes-ps6.md`              |
-| `docs/KNOWNISSUES.md`          | `reference/docs-conceptual/whats-new/known-issues-ps6.md`                  |
+<!-- link references -->
+[01]: https://github.com/MicrosoftDocs/PowerShell-Docs
+[02]: https://github.com/pester/Pester
+[03]: https://github.com/PowerShell/PowerShell/blob/master/docs/testing-guidelines/WritingPesterTests.md
+[04]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_debuggers
+[05]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_object_creation
+[06]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_scripts
+[07]: https://learn.microsoft.com/powershell/scripting/install/installing-powershell
+[08]: https://learn.microsoft.com/powershell/scripting/learn/more-powershell-learning
+[09]: https://learn.microsoft.com/powershell/scripting/learn/ps101/00-introduction
+[10]: https://learn.microsoft.com/powershell/utility-modules/crescendo/overview?view=ps-modules
+[11]: https://learn.microsoft.com/powershell/scripting/dev-cross-plat/vscode/using-vscode
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 2de12360485..3263cf456c8 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -2,89 +2,86 @@
 
 ## Where can I learn PowerShell's syntax?
 
-[SS64.com](https://ss64.com/ps/syntax.html) is a good resource.
-[Microsoft Docs](https://docs.microsoft.com/powershell/scripting/overview) is another excellent resource.
+- [What is PowerShell?][12]
+- [Discover PowerShell][09]
+- [PowerShell 101][11]
+- [PowerShell learning resources][10]
 
-## What are the best practices and style?
+## What are the best practices and styles?
 
-The [PoshCode][] unofficial guide is our reference.
-
-[PoshCode]: https://github.com/PoshCode/PowerShellPracticeAndStyle
+The [PoshCode][03] unofficial guide is our reference.
 
 ## What are PowerShell's scoping rules?
 
 - Variables are created in your current scope unless explicitly indicated.
 - Variables are visible in a child scope unless explicitly indicated.
-- Variables created in a child scope are not visible to a parent unless
-  explicitly indicated.
+- Variables created in a child scope are not visible to a parent unless explicitly indicated.
 - Variables may be placed explicitly in a scope.
 
 ### Things that create a scope
 
-- [functions](https://ss64.com/ps/syntax-functions.html)
-- [call operator](https://ss64.com/ps/call.html) (`& { }`)
-- [script invocations](https://ss64.com/ps/syntax-run.html)
+- [about_Functions_Advanced][04]
+- [about Operators - Call operator][06] (`& { }`)
+- [about Scopes][08]
 
 ### Things that operate in the current scope
 
-- [source operator](https://ss64.com/ps/source.html) (`. { }`)
-- [statements](https://ss64.com/ps/statements.html) (`if .. else`, `for`, `switch`, etc.)
+- [about Operators - Dot source operator][07] (`. { }`)
+- [about Language Keywords][05] (`if .. else`, `for`, `switch`, etc.)
 
 ## Why didn't an error throw an exception?
 
-Error handling in PowerShell is a bit weird, as not all errors result in catchable exceptions by default.
-Setting `$ErrorActionPreference = 'Stop'` will likely do what you want;
-that is, cause non-terminating errors instead to terminate.
-Read [An Introduction To Error Handling in PowerShell][error] for more information.
-
-[error]: https://gist.github.com/TravisEz13/9bb811c63b88501f3beec803040a9996
+Error handling in PowerShell is unique, as not all errors result in catchable exceptions by default.
+Setting `$ErrorActionPreference = 'Stop'` will likely do what you want; that is, cause
+non-terminating errors instead of terminating. Read the [GitHub issue][02] for more information.
 
 ## Where do I get the PowerShell Core SDK package?
 
-The SDK NuGet package `Microsoft.PowerShell.SDK` is provided for developers to write .NET Core C# code targeting PowerShell Core.
-PowerShell NuGet packages for releases starting from v6.0.0-alpha.9 will be published to the [powershell-core][] myget feed.
+The SDK NuGet package **Microsoft.PowerShell.SDK** is provided for developers to write C# code
+targeting PowerShell. PowerShell NuGet packages are published to [Microsoft.PowerShell.SDK][13] on
+NuGet.org.
 
-To use the `Microsoft.PowerShell.SDK` NuGet package, declare `PackageReference` tags in your `.csproj` file as follows:
+To use the `Microsoft.PowerShell.SDK` NuGet package, declare `PackageReference` tags in your
+`.csproj` file as follows:
 
 ```xml
 <ItemGroup>
-  <PackageReference Include="Microsoft.PowerShell.SDK" Version="6.0.0-beta.9" />
-  <PackageReference Include="Microsoft.PowerShell.Commands.Diagnostics" Version="6.0.0-beta.9" />
-  <PackageReference Include="Microsoft.WSMan.Management" Version="6.0.0-beta.9"/>
+  <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.3.5" />
+  <PackageReference Include="Microsoft.PowerShell.Commands.Diagnostics" Version="7.3.5" />
+  <PackageReference Include="Microsoft.WSMan.Management" Version="7.3.5"/>
 </ItemGroup>
 ```
 
-[powershell-core]: https://powershell.myget.org/gallery/powershell-core
-
 ## Why did my build fail?
 
-There are few common issues with the build.
-The easiest way to resolve most issues with the build is to run `Start-PSBuild -Clean`.
+There are few common issues with the build. The easiest way to resolve most issues with the build is
+to run `Start-PSBuild -Clean`.
 
 ### Dependency changed
 
-If package dependencies were changed in any `project.json`, you need to manually
-run `dotnet restore` to update your local dependency graphs.
-`Start-PSBuild -Restore` can automatically do this.
+If package dependencies were changed in any `project.json`, you need to manually run
+`dotnet restore` to update your local dependency graphs. `Start-PSBuild -Restore` can automatically
+do this.
 
 ### Resource changed
 
-`Start-PSBuild` automatically calls `Start-ResGen` on the very first run.
-On subsequent runs, you may need to explicitly use `Start-PSBuild -ResGen` command.
+`Start-PSBuild` automatically calls `Start-ResGen` on the very first run. On subsequent runs, you
+may need to explicitly use `Start-PSBuild -ResGen` command.
 
 Try it, when you see compilation error about *strings.
 
-[More details](dev-process/resx-files.md) about resource.
+[More details][01] about resource.
 
 ### TypeGen
 
-Similar to `-ResGen` parameter, there is `-TypeGen` parameter that triggers regeneration of type catalog.
+Similar to `-ResGen` parameter, there is `-TypeGen` parameter that triggers regeneration of type
+catalog.
 
 ## Why did `Start-PSBuild` tell me to update `dotnet`?
 
-We depend on the latest version of the .NET CLI, as we use the output of `dotnet
---info` to determine the current runtime identifier.
-Without this information, our build function can't know where `dotnet` is going to place the build artifacts.
+We depend on the latest version of the .NET CLI, as we use the output of `dotnet --info` to
+determine the current runtime identifier. Without this information, our build function can't know
+where `dotnet` is going to place the build artifacts.
 
 You can automatically install this using `Start-PSBootstrap`.
 **However, you must first manually uninstall other versions of the CLI.**
@@ -98,7 +95,22 @@ If you have installed by using any of the following means:
 
 You *must* manually uninstall it.
 
-Additionally, if you've just unzipped their binary drops (or used their obtain
-scripts, which do essentially the same thing), you must manually delete the
-folder, as the .NET CLI team re-engineered how their binaries are setup, such
-that new packages' binaries get stomped on by old packages' binaries.
+Additionally, if you've just unzipped their binary drops (or used their obtain scripts, which do
+essentially the same thing), you must manually delete the folder, as the .NET CLI team re-engineered
+how their binaries are setup, such that new packages' binaries get stomped on by old packages'
+binaries.
+
+<!-- updated link references -->
+[01]: dev-process/resx-files.md
+[02]: https://github.com/MicrosoftDocs/PowerShell-Docs/issues/1583
+[03]: https://github.com/PoshCode/PowerShellPracticeAndStyle
+[04]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced
+[05]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_keywords
+[06]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_operators#call-operator-
+[07]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_operators#dot-sourcing-operator-
+[08]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_scopes
+[09]: https://learn.microsoft.com/powershell/scripting/discover-powershell
+[10]: https://learn.microsoft.com/powershell/scripting/learn/more-powershell-learning
+[11]: https://learn.microsoft.com/powershell/scripting/learn/ps101/00-introduction
+[12]: https://learn.microsoft.com/powershell/scripting/overview
+[13]: https://www.nuget.org/packages/Microsoft.PowerShell.SDK
diff --git a/docs/building/linux.md b/docs/building/linux.md
index 7b42b04d342..55d96e4c21a 100644
--- a/docs/building/linux.md
+++ b/docs/building/linux.md
@@ -5,26 +5,25 @@ We'll start by showing how to set up your environment from scratch.
 
 ## Environment
 
-These instructions are written assuming the Ubuntu 16.04 LTS, since that's the distro the team uses.
+These instructions are written assuming Ubuntu 24.04 LTS (the CI uses ubuntu-latest).
 The build module works on a best-effort basis for other distributions.
 
 ### Git Setup
 
 Using Git requires it to be set up correctly;
 refer to the [Working with the PowerShell Repository](../git/README.md),
-[README](../../README.md), and [Contributing Guidelines](../../.github/CONTRIBUTING.md).
+[Readme](../../README.md), and [Contributing Guidelines](../../.github/CONTRIBUTING.md).
 
 **This guide assumes that you have recursively cloned the PowerShell repository and `cd`ed into it.**
 
 ### Toolchain Setup
 
-We use the [.NET Command-Line Interface][dotnet-cli] (`dotnet`) to build the managed components,
-and [CMake][] to build the native components.
+We use the [.NET Command-Line Interface][dotnet-cli] (`dotnet`) to build the managed components.
 
 Installing the toolchain is as easy as running `Start-PSBootstrap` in PowerShell.
 Of course, this requires a self-hosted copy of PowerShell on Linux.
 
-Fortunately, this is as easy as [downloading and installing the package](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux#binary-archives).
+Fortunately, this is as easy as [downloading and installing the package](https://learn.microsoft.com/en-us/powershell/scripting/install/install-other-linux#binary-archives).
 The `./tools/install-powershell.sh` script will also install the PowerShell package.
 
 In Bash:
@@ -42,20 +41,17 @@ In PowerShell:
 
 ```powershell
 Import-Module ./build.psm1
-Start-PSBootstrap
+Start-PSBootstrap -Scenario Both
 ```
 
 The `Start-PSBootstrap` function does the following:
 
-- Adds the LLVM package feed
-- Installs our dependencies combined with the dependencies of the .NET CLI toolchain via `apt-get`
-- Uninstalls any prior versions of .NET CLI
-- Downloads and installs the .NET Core SDK 2.0.0 to `~/.dotnet`
+- Installs build dependencies and packaging tools via `apt-get` (or equivalent package manager)
+- Downloads and installs the .NET SDK (currently version 10.0.100-rc.1) to `~/.dotnet`
 
 If you want to use `dotnet` outside of `Start-PSBuild`, add `~/.dotnet` to your `PATH` environment variable.
 
-[dotnet-cli]: https://docs.microsoft.com/dotnet/core/tools/
-[CMake]: https://cmake.org/cmake/help/v2.8.12/cmake.html
+[dotnet-cli]: https://learn.microsoft.com/dotnet/core/tools/
 
 ## Build using our module
 
@@ -65,13 +61,15 @@ If you have followed the toolchain setup section above, you should have PowerShe
 
 ```powershell
 Import-Module ./build.psm1
-Start-PSBuild
+Start-PSBuild -UseNuGetOrg
 ```
 
+> The PowerShell project by default references packages from the private Azure Artifacts feed, which requires authentication. The `-UseNuGetOrg` flag reconfigures the build to use the public NuGet.org feed instead.
+
 Congratulations! If everything went right, PowerShell is now built.
 The `Start-PSBuild` script will output the location of the executable:
 
-`./src/powershell-unix/bin/Debug/net5.0/linux-x64/publish/pwsh`.
+`./src/powershell-unix/bin/Debug/net11.0/linux-x64/publish/pwsh`.
 
 You should now be running the PowerShell Core that you just built, if you run the above executable.
-You can run our cross-platform Pester tests with `Start-PSPester`, and our xUnit tests with `Start-PSxUnit`.
+You can run our cross-platform Pester tests with `Start-PSPester -UseNuGetOrg`, and our xUnit tests with `Start-PSxUnit`.
diff --git a/docs/building/macos.md b/docs/building/macos.md
index e398451e8da..7fd767ffa1c 100644
--- a/docs/building/macos.md
+++ b/docs/building/macos.md
@@ -14,7 +14,7 @@ From `pwsh.exe`, run `Import-Module ./build.psm1` and use `Start-PSBootstrap` to
 
 The `Start-PSBootstrap` function does the following:
 
-- Uses `brew` or `port` to install CMake, OpenSSL, and GNU WGet
+- Uses `brew` or `port` to install OpenSSL, and GNU WGet
 - Uninstalls any prior versions of .NET CLI
 - Downloads and installs .NET Core SDK to `~/.dotnet`
 
@@ -34,6 +34,8 @@ We cannot do this for you in the build module due to #[847][].
 
 ## Build using our module
 
-Start a PowerShell session by running `pwsh`, and then use `Start-PSBuild` from the module.
+Start a PowerShell session by running `pwsh`, and then use `Start-PSBuild -UseNuGetOrg` from the module.
 
-After building, PowerShell will be at `./src/powershell-unix/bin/Debug/net5.0/osx-x64/publish/pwsh`.
+After building, PowerShell will be at `./src/powershell-unix/bin/Debug/net6.0/osx-x64/publish/pwsh`.
+
+> The PowerShell project by default references packages from the private Azure Artifacts feed, which requires authentication. The `-UseNuGetOrg` flag reconfigures the build to use the public NuGet.org feed instead.
diff --git a/docs/building/windows-core.md b/docs/building/windows-core.md
index ec273d00391..20774695fcd 100644
--- a/docs/building/windows-core.md
+++ b/docs/building/windows-core.md
@@ -10,8 +10,8 @@ R2, though they should work anywhere the dependencies work.
 
 ### Git Setup
 
-Using Git requires it to be setup correctly; refer to the
-[README](../../README.md) and
+Using Git requires it to be set up correctly; refer to the
+[Readme](../../README.md) and
 [Contributing Guidelines](../../.github/CONTRIBUTING.md).
 
 This guide assumes that you have recursively cloned the PowerShell repository and `cd`ed into it.
@@ -29,13 +29,13 @@ that you must have PowerShell Core 6 Beta.9 (or newer) installed to successfully
 
 ### .NET CLI
 
-We use the [.NET Command Line Interface][dotnet-cli] (`dotnet`) to build PowerShell.
+We use the [.NET command-line interface][dotnet-cli] (`dotnet`) to build PowerShell.
 The version we are currently using is mentioned in [`global.json`](../../global.json#L3) at the root of this repository.
 The `Start-PSBootstrap` function will automatically install it and add it to your path:
 
 ```powershell
 Import-Module ./build.psm1
-Start-PSBootstrap
+Start-PSBootstrap -Scenario Dotnet
 ```
 
 Or you can call `Install-Dotnet` directly:
@@ -47,23 +47,27 @@ Install-Dotnet
 It removes the previously installed version of .NET CLI and installs the version that PowerShell Core depends on.
 If you have any problems installing `dotnet`, please see their [documentation][cli-docs].
 
-[dotnet-cli]: https://docs.microsoft.com/dotnet/core/tools/
+[dotnet-cli]: https://learn.microsoft.com/dotnet/core/tools/
 [cli-docs]: https://www.microsoft.com/net/core#windowscmd
 
 ## Build using our module
 
 We maintain a [PowerShell module](../../build.psm1) with the function `Start-PSBuild` to build PowerShell.
 
+We do not recommend using Visual Studio Dev Environment Terminal to build the source code.
+
 ```powershell
 Import-Module ./build.psm1
-Start-PSBuild
+Start-PSBuild -Clean -PSModuleRestore -UseNuGetOrg
 ```
 
-Congratulations! If everything went right, PowerShell is now built and executable as `./src/powershell-win-core/bin/Debug/net5.0/win7-x64/publish/pwsh.exe`.
+> The PowerShell project by default references packages from the private Azure Artifacts feed, which requires authentication. The `-UseNuGetOrg` flag reconfigures the build to use the public NuGet.org feed instead.
+
+Congratulations! If everything went right, PowerShell is now built and executable as `./src/powershell-win-core/bin/Debug/net6.0/win7-x64/publish/pwsh.exe`.
 
 This location is of the form `./[project]/bin/[configuration]/[framework]/[rid]/publish/[binary name]`,
 and our project is `powershell`, configuration is `Debug` by default,
-framework is `net5.0`, runtime identifier is `win7-x64` by default,
+framework is `net6.0`, runtime identifier is `win7-x64` by default,
 and binary name is `pwsh`.
 The function `Get-PSOutput` will return the path to the executable;
 thus you can execute the development copy via `& (Get-PSOutput)`.
@@ -77,7 +81,7 @@ You can run our cross-platform Pester tests with `Start-PSPester`.
 
 ```powershell
 Import-Module ./build.psm1
-Start-PSPester
+Start-PSPester -UseNuGetOrg
 ```
 
 ## Building in Visual Studio
diff --git a/docs/cmdlet-example/command-line-simple-example.md b/docs/cmdlet-example/command-line-simple-example.md
index 7145a2cceb6..fcc1fba66e3 100644
--- a/docs/cmdlet-example/command-line-simple-example.md
+++ b/docs/cmdlet-example/command-line-simple-example.md
@@ -220,9 +220,9 @@ and macOS as well as Windows using the .NET Core 2.x SDK command-line tools.
 For more information on .NET Standard, check out the [documentation][net-std-docs]
 and the [.NET Standard YouTube channel][net-std-chan].
 
-[dotnet-cli]:    https://docs.microsoft.com/dotnet/core/tools/
+[dotnet-cli]:    https://learn.microsoft.com/dotnet/core/tools/
 [net-core-sdk]:  https://www.microsoft.com/net/download/core
-[net-std-docs]:  https://docs.microsoft.com/dotnet/standard/net-standard
+[net-std-docs]:  https://learn.microsoft.com/dotnet/standard/net-standard
 [net-std-chan]:  https://www.youtube.com/playlist?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY
 [pscore-os]:     https://github.com/powershell/powershell#get-powershell
 [readme]:        ../../README.md
diff --git a/docs/cmdlet-example/visual-studio-simple-example.md b/docs/cmdlet-example/visual-studio-simple-example.md
index f94cc912e34..37244f25705 100644
--- a/docs/cmdlet-example/visual-studio-simple-example.md
+++ b/docs/cmdlet-example/visual-studio-simple-example.md
@@ -10,7 +10,7 @@ This document describes steps for building a C# Cmdlet with Visual Studio in 2 w
 This demonstrates how to build your own C# cmdlet for PowerShell Core with Visual Studio.
 Targeting for PowerShell Core means that the cmdlet may not work against Windows PowerShell if you take dependencies on new APIs introduced in PowerShell Core.
 
-We will use the free [Visual Studio Community 2017](https://www.visualstudio.com/downloads).
+We will use the free [Visual Studio Community 2017](https://visualstudio.microsoft.com/vs/).
 
 1. When installing Visual Studio 2017 select `.NET Core cross-platform development` under `Other Toolsets`
   ![Step1](./Images/Step1.png)
@@ -74,7 +74,7 @@ Steps below show how to build your own C# cmdlet for PowerShell Standard 3.0 wit
 Targeting PowerShell Standard 3.0 means that the same module will work against PowerShell Core as well as Windows PowerShell v3 and newer,
 however, you are limited to a subset of the available PowerShell APIs.
 
-We will use the free [Visual Studio Community 2017](https://www.visualstudio.com/downloads).
+We will use the free [Visual Studio Community 2017](https://visualstudio.microsoft.com/vs/).
 
 1. When installing Visual Studio 2017 select `.NET Core cross-platform development` under `Other Toolsets`
   ![StdImage1](./Images/Step1.png)
@@ -131,5 +131,5 @@ It should find `PowerShellStandard.Library` package, select it and it will show
 ![StdImage61](./Images/Std61.png)
 On PowerShell Core on Linux:
 ![StdImage62](./Images/Std62.png)
-On Windows PowerShell on Windows (this requires [.NET Framework 4.7.1](https://github.com/Microsoft/dotnet-framework-early-access/blob/master/instructions.md)):
+On Windows PowerShell on Windows (this requires [.NET Framework 4.7.1](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net471)
 ![StdImage63](./Images/Std63.png)
diff --git a/docs/community/governance.md b/docs/community/governance.md
index d32cceb393f..c401920bec7 100644
--- a/docs/community/governance.md
+++ b/docs/community/governance.md
@@ -5,10 +5,10 @@
 * [**PowerShell Committee**](#powershell-committee): A committee of project owners who are responsible for design decisions,
   approving [RFCs][RFC-repo], and approving new maintainers/committee members
 * [**Repository maintainer**](#repository-maintainers): An individual responsible for merging pull requests (PRs) into `master` when all requirements are met (code review, tests, docs, and RFC approval as applicable).
-
   Repository Maintainers are the only people with write permissions for the `master` branch.
-* [**Area experts**](#area-experts): People who are experts for specific components (e.g. PSReadline, the parser) or technologies (e.g. security, performance).
-  Area experts are responsible for code reviews, issue triage, and providing their expertise to others.
+* [**Working Groups (WGs)**](#working-groups) are collections of contributors responsible for
+  providing expertise on a specific area of PowerShell in order to help establish consensus within
+  the community and Committee.
 * **Corporation**: The Corporation owns the PowerShell repository and, under extreme circumstances,
   reserves the right to dissolve or reform the PowerShell Committee, the Project Leads, and the Corporate Maintainer.
   The Corporation for PowerShell is Microsoft.
@@ -26,10 +26,9 @@ The PowerShell Committee and its members (aka Committee Members) are the primary
 ### Current Committee Members
 
 * Bruce Payette ([BrucePay](https://github.com/BrucePay))
-* Dongbo Wang ([daxian-dbw](https://github.com/daxian-dbw))
 * Jim Truher ([JamesWTruher](https://github.com/JamesWTruher))
-* Joey Aiello ([joeyaiello](https://github.com/joeyaiello))
-* Kenneth Hansen ([khansen00](https://github.com/khansen00))
+* Paul Higinbotham ([paulhigin](https://github.com/paulhigin))
+* Rob Holt ([rjmholt](https://github.com/rjmholt))
 * Steve Lee ([SteveL-MSFT](https://github.com/SteveL-MSFT))
 
 ### Committee Member Responsibilities
@@ -59,15 +58,16 @@ If any Committee Members feels like this behavior is large enough to warrant an
 
 As a PowerShell Committee Member:
 
+1. **DO** enforce the [Code of Conduct][coc] by taking reports of abuse and violations to the committee for resolution
 1. **DO** reply to issues and pull requests with design opinions
   (this could include offering support for good work or exciting new features)
 1. **DO** encourage healthy discussion about the direction of PowerShell
 1. **DO** raise "red flags" on PRs that haven't followed the proper RFC process when applicable
 1. **DO** contribute to documentation and best practices
-1. **DO** maintain a presence in the PowerShell community outside of GitHub (Twitter, blogs, StackOverflow, Reddit, Hacker News, etc.)
+1. **DO** maintain a presence in the PowerShell community outside of GitHub (Twitter, blogs, Stack Overflow, Reddit, Hacker News, etc.)
 1. **DO** heavily incorporate community feedback into the weight of your decisions
 1. **DO** be polite and respectful to a wide variety of opinions and perspectives
-1. **DO** make sure contributors are following the [contributor guidelines](../../.github/CONTRIBUTING.md)
+1. **DO** make sure contributors are following the [contributing guidelines](../../.github/CONTRIBUTING.md)
 
 1. **DON'T** constantly raise "red flags" for unimportant or minor problems to the point that the progress of the project is being slowed
 1. **DON'T** offer up your opinions as the absolute opinion of the PowerShell Committee.
@@ -83,6 +83,19 @@ At any point in time, a Committee Member can nominate a strong community member
 Nominations should be submitted in the form of [RFCs][RFC-repo] detailing why that individual is qualified and how they will contribute.
 After the RFC has been discussed, a unanimous vote will be required for the new Committee Member to be confirmed.
 
+### PowerShell Committee Code of Conduct Enforcement
+
+As stated in the [contributing guidelines](../../.github/CONTRIBUTING.md#code-of-conduct-enforcement):
+
+Reports of abuse will be reviewed by the PowerShell Committee and if it has been determined that violations of the
+[Code of Conduct][coc] has occurred, then a temporary ban may be imposed.
+The duration of the temporary ban will depend on the impact and/or severity of the infraction.
+This can vary from 1 day, a few days, a week, and up to 30 days.
+Repeat offenses may result in a permanent ban from the PowerShell org.
+
+Microsoft employees on the PowerShell committee should review the available support at
+[aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support).
+
 ## Repository Maintainers
 
 Repository Maintainers are trusted stewards of the PowerShell community/repository responsible for maintaining consistency and quality of PowerShell code.
@@ -90,9 +103,13 @@ One of their primary responsibilities is merging pull requests after all require
 
 For more information on Repository Maintainers--their responsibilities, who they are, and how one becomes a Maintainer--see the [README for Repository Maintainers][maintainers].
 
-## Area Experts
+## Working Groups
 
-Area Experts are people with knowledge of specific components or technologies in the PowerShell domain. They are responsible for code reviews, issue triage, and providing their expertise to others.
+[Working Groups (WGs)][wg] are collections of contributors with knowledge of specific components or
+technologies in the PowerShell domain.
+They are responsible for issue triage/acceptance, code reviews, and providing their expertise to
+others in issues, PRs, and RFC discussions,
+as well as to the Committee when said expertise is helpful in broader discussions.
 
 They have [write access](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization) to the PowerShell repository which gives them the power to:
 
@@ -100,26 +117,31 @@ They have [write access](https://docs.github.com/en/free-pro-team@latest/github/
 1. Merge pull requests to all branches *except* `master` (though this should not be common given that [`master`is the only long-living branch](../git/README.md#understand-branches)).
 1. Assign labels, milestones, and people to [issues](https://guides.github.com/features/issues/).
 
-A list of Area Experts can be found [here][experts].
-
-### Area Expert Responsibilities
-
-If you are an Area Expert, you are expected to be actively involved in any development, design, or contributions in your area of expertise.
-
-If you are an Area Expert:
-
-1. **DO** assign the [correct labels][issue-process]
-1. **DO** assign yourself to issues labeled with your area of expertise
-1. **DO** code reviews for issues where you're assigned or in your areas of expertise.
-1. **DO** reply to new issues and pull requests that are related to your area of expertise
-  (while reviewing PRs, leave your comment even if everything looks good - a simple "Looks good to me" or "LGTM" will suffice, so that we know someone has already taken a look at it).
-1. **DO** make sure contributors are following the [contributor guidelines](../../.github/CONTRIBUTING.md).
-1. **DO** ask people to resend a pull request, if it [doesn't target `master`](../../.github/CONTRIBUTING.md#lifecycle-of-a-pull-request).
-1. **DO** ensure that contributors [write Pester tests][pester] for all new/changed functionality
-1. **DO** ensure that contributors [write documentation][docs-contributing] for all new-/changed functionality
-1. **DO** encourage contributors to refer to issues in their pull request description (e.g. `Resolves issue #123`).
-1. **DO** encourage contributors to create meaningful titles for all PRs. Edit title if necessary.
-1. **DO** verify that all contributors are following the [Coding Guidelines](../dev-process/coding-guidelines.md).
+### Working Group Responsibilities
+
+If you are a member of a Working Group, you are expected to be actively involved in any development, design, or contributions in the focus area of the WG.
+More information on the responsibilities of Working Groups can be found [here][wg],
+while current WG definitions and membership can be found [here][wg-definitions].
+
+If you are a Working Group member:
+
+1. **DO** triage and contribute to discussions in issues and PRs that have `WG-*` labels assigned
+1. **DO** regularly communicate with other members of your WG to coordinate decisions about
+   whether issues should move forward
+1. **DO** make decisions on whether or not issues should proceed forward with implementations or RFCs
+1. **DO** assign the [correct labels][issue-process] to issues
+1. **DO** assign yourself to issues and PRs labeled with your area of expertise only when you are actively
+   working on or implementing them
+1. **DO** code reviews for PRs where you're assigned or in your WG
+   (while reviewing PRs, leave your comment even if everything looks good - a simple "Looks good to me" or "LGTM" will suffice, so that we know someone has already taken a look at it).
+1. **DO** ensure that contributors are following the [contributor guidelines](../../.github/CONTRIBUTING.md)
+   and [Code of Conduct](https://github.com/PowerShell/PowerShell/blob/master/CODE_OF_CONDUCT.md)
+1. **DO** ensure that contributions [include Pester tests][pester] for all new/changed functionality
+1. **DO** ensure that contributions [include documentation][docs-contributing] for all new-/changed functionality
+1. **DO** encourage contributions to refer to issues in their pull request description (e.g. `Resolves issue #123`)
+1. **DO** encourage contributions to have meaningful titles for all PRs,
+   editing their title if necessary to ensure that changelogs convey useful and accurate information
+1. **DO** verify that all contributions are following the [Coding Guidelines](../dev-process/coding-guidelines.md)
 
 1. **DON'T** create new features, new designs, or change behaviors without following the [RFC][RFC-repo] or approval process
 
@@ -135,7 +157,9 @@ See our [Pull Request Process][pull-request-process]
 [pester]: ../testing-guidelines/WritingPesterTests.md
 [breaking-changes]: ../dev-process/breaking-change-contract.md
 [issue-process]: ../maintainers/issue-management.md
+[coc]: ../../CODE_OF_CONDUCT.md
 [pull-request-process]: ../../.github/CONTRIBUTING.md#lifecycle-of-a-pull-request
 [docs-contributing]: https://github.com/PowerShell/PowerShell-Docs/blob/staging/CONTRIBUTING.md
 [maintainers]: ../maintainers/README.md
-[experts]: ../../.github/CODEOWNERS
+[wg]: ./working-group.md
+[wg-definitions]: ./working-group-definitions.md
diff --git a/docs/community/process_diagram.svg b/docs/community/process_diagram.svg
new file mode 100644
index 00000000000..f1e5df16064
--- /dev/null
+++ b/docs/community/process_diagram.svg
@@ -0,0 +1,1413 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export process_diagram.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="21.5in" height="16.5in" viewBox="0 0 1548 1188"
+		xml:space="preserve" color-interpolation-filters="sRGB" class="st23">
+	<v:documentProperties v:langID="1033" v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(0):26"/>
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#3c63ac;stroke:#31528f;stroke-width:0.75}
+		.st2 {fill:#feffff;font-family:Calibri;font-size:0.666664em}
+		.st3 {marker-end:url(#mrkr4-9);stroke:#4672c4;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st4 {fill:#4672c4;fill-opacity:1;stroke:#4672c4;stroke-opacity:1;stroke-width:0.28409090909091}
+		.st5 {fill:#4672c4;stroke:#c8c8c8;stroke-width:0.25}
+		.st6 {font-size:1em}
+		.st7 {fill:#ffffff;stroke:none;stroke-linecap:butt}
+		.st8 {fill:#3c63ac;font-family:Calibri;font-size:0.666664em}
+		.st9 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
+		.st10 {fill:url(#grad0-57)}
+		.st11 {stroke:#3d64ac;stroke-width:0.75}
+		.st12 {fill:#3d64ac;font-family:Calibri;font-size:0.666664em}
+		.st13 {fill:#ed7d31;stroke:#31528f;stroke-width:0.75}
+		.st14 {fill:#007f7f;stroke:#c8c8c8;stroke-width:0.25}
+		.st15 {font-size:0.749991em}
+		.st16 {fill:#7030a0;stroke:#c8c8c8;stroke-width:0.25}
+		.st17 {fill:#7030a0;stroke:#31528f;stroke-width:0.75}
+		.st18 {fill:#007f7f;stroke:#31528f;stroke-width:0.75}
+		.st19 {marker-end:url(#mrkr4-171);stroke:#4672c4;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st20 {fill:#70ad47;stroke:#31528f;stroke-width:0.75}
+		.st21 {marker-end:url(#mrkr4-9);stroke:#4672c4;stroke-dasharray:3,3;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st22 {marker-end:url(#mrkr13-378);marker-start:url(#mrkr13-376);stroke:#4672c4;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st23 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Patterns_And_Gradients">
+		<linearGradient id="grad0-57" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(60 0.5 0.5)">
+			<stop offset="0" stop-color="#e8ebf4" stop-opacity="1"/>
+			<stop offset="0.24" stop-color="#f4f5f9" stop-opacity="1"/>
+			<stop offset="0.54" stop-color="#feffff" stop-opacity="1"/>
+		</linearGradient>
+	</defs>
+	<defs id="Markers">
+		<g id="lend4">
+			<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr4-9" class="st4" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
+		</marker>
+		<marker id="mrkr4-171" class="st4" v:arrowType="4" v:arrowSize="2" v:setback="6.68" refX="-6.68" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
+		</marker>
+		<g id="lend13">
+			<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr13-376" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="10.2" refX="10.2" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend13" transform="scale(3.52) "/>
+		</marker>
+		<marker id="mrkr13-378" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="10.56" refX="-10.56" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend13" transform="scale(-3.52,-3.52) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<v:userDefs>
+			<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
+		</v:userDefs>
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+		<v:layer v:name="Flowchart" v:index="0"/>
+		<v:layer v:name="Connector" v:index="1"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-1125)">
+			<title>Start/End</title>
+			<desc>User has idea!</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.375):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.375):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1174.5" width="72" height="27"/>
+			<path d="M13.5 1188 L58.5 1188 A13.5 13.5 -180 0 0 58.5 1161 L13.5 1161 A13.5 13.5 -180 1 0 13.5 1188 Z" class="st1"/>
+			<text x="12.87" y="1176.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>User has idea!</text>		</g>
+		<g id="shape5-4" v:mID="5" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-1125)">
+			<title>Dynamic connector</title>
+			<path d="M9 1188 L9 1216.96" class="st3"/>
+		</g>
+		<g id="shape4-10" v:mID="4" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-1035)">
+			<title>Process</title>
+			<desc>User files issue with rationale and use cases</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st5"/>
+			<text x="3.8" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>User files issue with <tspan
+						x="7.81" dy="1.2em" class="st6">rationale and use </tspan><tspan x="27.27" dy="1.2em" class="st6">cases</tspan></text>		</g>
+		<g id="shape9-15" v:mID="9" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-1035)">
+			<title>Dynamic connector.9</title>
+			<path d="M9 1188 L9 1216.96" class="st3"/>
+		</g>
+		<g id="shape8-20" v:mID="8" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-945)">
+			<title>Process.8</title>
+			<desc>Maintainers label issue with Area Label</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st5"/>
+			<text x="7.67" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Maintainers label <tspan
+						x="11.22" dy="1.2em" class="st6">issue with Area </tspan><tspan x="27.39" dy="1.2em" class="st6">Label</tspan></text>		</g>
+		<g id="shape13-25" v:mID="13" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-846)">
+			<title>Dynamic connector.13</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1207.12" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1219.21" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="4.30862" y="1202.33" width="9.38287" height="9.59985" class="st7"/>
+			<text x="4.31" y="1209.53" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape12-32" v:mID="12" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-753.75)">
+			<title>Process.12</title>
+			<desc>Users discuss idea “exhaustively” (TBD by WGs)</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st5"/>
+			<text x="6.68" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Users discuss idea <tspan
+						x="3.76" dy="1.2em" class="st6">“</tspan>exhaustively” (TBD <tspan x="22.32" dy="1.2em" class="st6">by WGs)</tspan></text>		</g>
+		<g id="shape15-37" v:mID="15" v:groupContext="shape" v:layerMember="1" transform="translate(121.5,-753.75)">
+			<title>Dynamic connector.15</title>
+			<path d="M-9 1188 L-9 1198.96" class="st3"/>
+		</g>
+		<g id="shape14-42" v:mID="14" v:groupContext="shape" v:layerMember="0" transform="translate(66.375,-643.5)">
+			<title>Decision</title>
+			<desc>Do the WGs think the idea has potential / is worth pursuing?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="46.125" cy="1141.88" width="76.88" height="69.1875"/>
+			<path d="M0 1141.87 L46.12 1095.75 L92.25 1141.87 L46.12 1188 L0 1141.87 Z" class="st1"/>
+			<text x="11.15" y="1134.68" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Do the WGs think the <tspan
+						x="11.24" dy="1.2em" class="st6">idea has potential / is </tspan><tspan x="19.4" dy="1.2em" class="st6">worth pursuing?</tspan></text>		</g>
+		<g id="shape23-47" v:mID="23" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-643.5)">
+			<title>Dynamic connector.23</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1206" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1216.96" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="4.30862" y="1201.2" width="9.38287" height="9.59985" class="st9"/>
+			<text x="4.31" y="1208.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape22-54" v:mID="22" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-553.5)">
+			<title>Subprocess</title>
+			<desc>Committee appeals process (TBD)</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="54" height="54"/>
+			<path d="M0 1188 L72 1188 L72 1134 L0 1134 L0 1188 Z" class="st10"/>
+			<path d="M0 1188 L72 1188 L72 1134 L0 1134 L0 1188" class="st11"/>
+			<path d="M9 1188 L9 1134" class="st11"/>
+			<path d="M63 1188 L63 1134" class="st11"/>
+			<text x="17.79" y="1153.8" class="st12" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Committee <tspan
+						x="23.49" dy="1.2em" class="st6">appeals </tspan><tspan x="13.67" dy="1.2em" class="st6">process (TBD)</tspan></text>		</g>
+		<g id="shape27-64" v:mID="27" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-553.5)">
+			<title>Dynamic connector.27</title>
+			<desc>Appeal unsuccessful</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1203.3" width="75.53" height="17.6036"/>
+			<path d="M9 1188 L9 1211.56" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-23.8568" y="1198.5" width="65.7139" height="9.59985" class="st9"/>
+			<text x="-23.86" y="1205.7" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Appeal unsuccessful</text>		</g>
+		<g id="shape26-71" v:mID="26" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-485.1)">
+			<title>Start/End.26</title>
+			<desc>Issue is closed, idea not pursued within PS repo</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.375):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.375):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.525):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1169.1" width="72" height="37.8"/>
+			<path d="M18 1188 L54 1188 A18 18.9 -180 0 0 54 1150.2 L18 1150.2 A18 18.9 -180 1 0 18 1188 Z" class="st13"/>
+			<text x="4.28" y="1161.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Issue is closed, idea <tspan
+						x="5.05" dy="1.2em" class="st6">not pursued within </tspan><tspan x="23.6" dy="1.2em" class="st6">PS repo</tspan></text>		</g>
+		<g id="shape30-76" v:mID="30" v:groupContext="shape" v:layerMember="1" transform="translate(148.5,-580.5)">
+			<title>Dynamic connector.30</title>
+			<desc>Successful appeal</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="81" cy="1133.6" width="66.87" height="17.6036"/>
+			<path d="M0 1188 L156.16 1083.13" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="52.4712" y="1128.8" width="57.0578" height="9.59985" class="st9"/>
+			<text x="52.47" y="1136" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Successful appeal</text>		</g>
+		<g id="shape32-83" v:mID="32" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-400.5)">
+			<title>Process.32</title>
+			<desc>Implement and release the implementation outside of PS</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st5"/>
+			<text x="11.14" y="1149" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Implement and <tspan
+						x="17.9" dy="1.2em" class="st6">release the </tspan><tspan x="9.87" dy="1.2em" class="st6">implementation </tspan><tspan
+						x="14.83" dy="1.2em" class="st6">outside of PS</tspan></text>		</g>
+		<g id="shape43-89" v:mID="43" v:groupContext="shape" v:layerMember="0" transform="translate(310.5,-653.3)">
+			<title>Process.43</title>
+			<desc>WGs label “RFC required”; Both paths are (eventually) require...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1152" width="72" height="72"/>
+			<rect x="0" y="1116" width="72" height="72" class="st5"/>
+			<text x="10.88" y="1125.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>WGs label “RFC <tspan
+						x="10.63" dy="1.2em" class="st6">required</tspan>”; Both <tspan x="20.77" dy="1.2em" class="st6">paths are </tspan><tspan
+						x="16.68" dy="1.2em" class="st6">(eventually) </tspan><tspan x="5.08" dy="1.2em" class="st6">required; author(s) </tspan><tspan
+						x="4.43" dy="1.2em" class="st6">can choose to do in </tspan><tspan x="20.28" dy="1.2em" class="st6">any order</tspan></text>		</g>
+		<g id="shape46-98" v:mID="46" v:groupContext="shape" v:layerMember="1" transform="translate(337.5,-725.3)">
+			<title>Dynamic connector.46</title>
+			<path d="M9 1188 L9 1136.94" class="st3"/>
+		</g>
+		<g id="shape45-103" v:mID="45" v:groupContext="shape" v:layerMember="0" transform="translate(310.5,-783.4)">
+			<title>Process.45</title>
+			<desc>Contributor writes and publishes RFC as draft PR in PowerShel...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1152" width="72" height="72"/>
+			<rect x="0" y="1116" width="72" height="72" class="st14"/>
+			<text x="5.99" y="1131.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Contributor writes <tspan
+						x="2.18" dy="1.2em" class="st6">and publishes RFC as </tspan><tspan x="18.96" dy="1.2em" class="st6">draft PR in </tspan><tspan
+						x="10.45" dy="1.2em" class="st6">PowerShell</tspan>-RFC<v:lf/><tspan x="5.26" dy="1.3em" class="st15">(add reference in original </tspan><tspan
+						x="28.99" dy="1.5em" class="st15">issue)</tspan></text>		</g>
+		<g id="shape48-111" v:mID="48" v:groupContext="shape" v:layerMember="1" transform="translate(337.5,-653.3)">
+			<title>Dynamic connector.48</title>
+			<path d="M9 1188 L9 1203.13" class="st3"/>
+		</g>
+		<g id="shape47-116" v:mID="47" v:groupContext="shape" v:layerMember="0" transform="translate(310.5,-541.125)">
+			<title>Process.47</title>
+			<desc>Contributor publishes PR with WIP and/or prototype code as dr...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1.25):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1143" width="72" height="90"/>
+			<rect x="0" y="1098" width="72" height="90" class="st16"/>
+			<text x="16.96" y="1109.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Contributor <tspan
+						x="7.37" dy="1.2em" class="st6">publishes PR with </tspan><tspan x="17.29" dy="1.2em" class="st6">WIP and/or </tspan><tspan
+						x="6.52" dy="1.2em" class="st6">prototype code as </tspan><tspan x="18.96" dy="1.2em" class="st6">draft PR in </tspan><tspan
+						x="9.31" dy="1.2em" class="st6">PowerShell repo<v:lf/></tspan><tspan x="5.26" dy="1.3em" class="st15">(add reference in original </tspan><tspan
+						x="8.52" dy="1.2em" class="st15">issue, Maintainers add </tspan><tspan x="16.15" dy="1.5em" class="st15">`Proposal` label)</tspan></text>		</g>
+		<g id="shape50-127" v:mID="50" v:groupContext="shape" v:layerMember="1" transform="translate(382.5,-810.4)">
+			<title>Dynamic connector.50</title>
+			<path d="M0 1179 L19.96 1179" class="st3"/>
+		</g>
+		<g id="shape49-132" v:mID="49" v:groupContext="shape" v:layerMember="0" transform="translate(409.5,-792.4)">
+			<title>Process.49</title>
+			<desc>WGs, contributors, and any others have discussion about RFC f...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st14"/>
+			<text x="5.29" y="1149" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>WGs, contributors, <tspan
+						x="3.03" dy="1.2em" class="st6">and any others have </tspan><tspan x="8.89" dy="1.2em" class="st6">discussion about </tspan><tspan
+						x="3.09" dy="1.2em" class="st6">RFC for &#62;= 2 months</tspan></text>		</g>
+		<g id="shape52-138" v:mID="52" v:groupContext="shape" v:layerMember="1" transform="translate(481.5,-810.4)">
+			<title>Dynamic connector.52</title>
+			<path d="M0 1179 L24.46 1179" class="st3"/>
+		</g>
+		<g id="shape51-143" v:mID="51" v:groupContext="shape" v:layerMember="0" transform="translate(513,-792.4)">
+			<title>Process.51</title>
+			<desc>Author marks RFC PR as non-draft</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st14"/>
+			<text x="6.8" y="1158.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Author marks RFC <tspan
+						x="10.96" dy="1.2em" class="st6">PR as non</tspan>-draft</text>		</g>
+		<g id="shape56-147" v:mID="56" v:groupContext="shape" v:layerMember="1" transform="translate(382.5,-577.125)">
+			<title>Dynamic connector.56</title>
+			<path d="M0 1179 L24.46 1179" class="st3"/>
+		</g>
+		<g id="shape55-152" v:mID="55" v:groupContext="shape" v:layerMember="0" transform="translate(414,-555.75)">
+			<title>Decision.55</title>
+			<desc>Does the code PR meet WG and Maintainer standards?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="40.5" cy="1157.63" width="67.5" height="45.5625"/>
+			<path d="M0 1157.63 L40.5 1127.25 L81 1157.63 L40.5 1188 L0 1157.63 Z" class="st17"/>
+			<text x="26.04" y="1145.62" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Does the <v:newlineChar/><tspan
+						x="11.06" dy="1.2em" class="st6">code PR meet WG </tspan><tspan x="15.46" dy="1.2em" class="st6">and Maintainer </tspan><tspan
+						x="22.65" dy="1.2em" class="st6">standards?</tspan></text>		</g>
+		<g id="shape65-158" v:mID="65" v:groupContext="shape" v:layerMember="0" transform="translate(482.063,-347.625)">
+			<title>Decision.65</title>
+			<desc>Is the RFC accepted and matching the implemen-tation?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1.25):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1143" width="60" height="67.5"/>
+			<path d="M0 1143 L36 1098 L72 1143 L36 1188 L0 1143 Z" class="st18"/>
+			<text x="33.43" y="1121.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Is<v:lf/><tspan
+						x="22.62" dy="1.2em" class="st6"> </tspan>the RFC <v:lf/><tspan x="14.15" dy="1.2em" class="st6">accepted and </tspan><tspan
+						x="14.52" dy="1.2em" class="st6">matching the </tspan><tspan x="18.37" dy="1.2em" class="st6">implemen</tspan>-<tspan
+						x="24.42" dy="1.2em" class="st6">tation?</tspan></text>		</g>
+		<g id="shape67-166" v:mID="67" v:groupContext="shape" v:layerMember="1" transform="translate(482.063,-392.625)">
+			<title>Dynamic connector.67</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-2.48084" cy="1218.78" width="40" height="17.6036"/>
+			<path d="M0 1188 C-18 1188 -14.44 1203.6 0.71 1223.06 C12.55 1238.27 31.47 1255.85 35.31 1240.01 L35.34 1239.65"
+					class="st19"/>
+			<rect v:rectContext="textBkgnd" x="-7.17222" y="1213.98" width="9.38287" height="9.59985" class="st9"/>
+			<text x="-7.17" y="1221.18" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape69-174" v:mID="69" v:groupContext="shape" v:layerMember="1" transform="translate(554.063,-401.625)">
+			<title>Dynamic connector.69</title>
+			<path d="M0 1197 L28.96 1197" class="st3"/>
+		</g>
+		<g id="shape68-179" v:mID="68" v:groupContext="shape" v:layerMember="0" transform="translate(590.063,-379.125)">
+			<title>Start/End.68</title>
+			<desc>Merge as non-experimental code</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.375):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.375):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1174.5" width="72" height="27"/>
+			<path d="M13.5 1188 L58.5 1188 A13.5 13.5 -180 0 0 58.5 1161 L13.5 1161 A13.5 13.5 -180 1 0 13.5 1188 Z" class="st20"/>
+			<text x="12.5" y="1172.1" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Merge as non-<tspan
+						x="5.62" dy="1.2em" class="st6">experimental code</tspan></text>		</g>
+		<g id="shape71-183" v:mID="71" v:groupContext="shape" v:layerMember="1" transform="translate(585,-810.4)">
+			<title>Dynamic connector.71</title>
+			<path d="M0 1179 L28.96 1179" class="st3"/>
+		</g>
+		<g id="shape70-188" v:mID="70" v:groupContext="shape" v:layerMember="0" transform="translate(621,-792.4)">
+			<title>Process.70</title>
+			<desc>Committee review</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st14"/>
+			<text x="5.93" y="1163.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Committee review</text>		</g>
+		<g id="shape75-191" v:mID="75" v:groupContext="shape" v:layerMember="0" transform="translate(843.469,-773.162)">
+			<title>Decision.75</title>
+			<desc>Does the RFC contain all necessary info to merge as experimen...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="38.5313" cy="1141.76" width="64.22" height="69.3562"/>
+			<path d="M0 1141.76 L38.53 1095.53 L77.06 1141.76 L38.53 1188 L0 1141.76 Z" class="st18"/>
+			<text x="17.02" y="1124.96" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Does the RFC <tspan
+						x="21.7" dy="1.2em" class="st6">contain all </tspan><tspan x="10.9" dy="1.2em" class="st6">necessary info to </tspan><tspan
+						x="23.69" dy="1.2em" class="st6">merge as </tspan><tspan x="15.09" dy="1.2em" class="st6">experimental?</tspan></text>		</g>
+		<g id="shape77-198" v:mID="77" v:groupContext="shape" v:layerMember="0" transform="translate(846,-331.875)">
+			<title>Decision.77</title>
+			<desc>Committee votes to approve RFC</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="60" height="40.5"/>
+			<path d="M0 1161 L36 1134 L72 1161 L36 1188 L0 1161 Z" class="st18"/>
+			<text x="8.07" y="1158.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Committee votes <tspan
+						x="11.18" dy="1.2em" class="st6">to approve RFC</tspan></text>		</g>
+		<g id="shape79-202" v:mID="79" v:groupContext="shape" v:layerMember="1" transform="translate(882,-331.875)">
+			<title>Dynamic connector.79</title>
+			<desc>Reject</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-452.812" cy="1206" width="40" height="17.6036"/>
+			<path d="M0 1188 L0 1206 L-715.5 1206 L-715.5 1015.87 L-726.46 1015.87" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-462.953" y="1201.2" width="20.2808" height="9.59985" class="st9"/>
+			<text x="-462.95" y="1208.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Reject</text>		</g>
+		<g id="shape80-209" v:mID="80" v:groupContext="shape" v:layerMember="0" transform="translate(987.75,-792.4)">
+			<title>Process.80</title>
+			<desc>RFC author adds additional info</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st14"/>
+			<text x="9.4" y="1158.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RFC author adds <tspan
+						x="12.41" dy="1.2em" class="st6">additional info</tspan></text>		</g>
+		<g id="shape87-213" v:mID="87" v:groupContext="shape" v:layerMember="1" transform="translate(846,-349.875)">
+			<title>Dynamic connector.87</title>
+			<desc>Approve</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-42.6811" cy="1178.67" width="40" height="17.6036"/>
+			<path d="M0 1179 L-88.02 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-56.4994" y="1173.88" width="27.6367" height="9.59985" class="st9"/>
+			<text x="-56.5" y="1181.08" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Approve</text>		</g>
+		<g id="shape86-220" v:mID="86" v:groupContext="shape" v:layerMember="0" transform="translate(678.938,-331.875)">
+			<title>Decision.86</title>
+			<desc>Is the code ready to go?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="60" height="40.5"/>
+			<path d="M0 1161 L36 1134 L72 1161 L36 1188 L0 1161 Z" class="st17"/>
+			<text x="8.18" y="1158.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Is the code ready <tspan
+						x="25.8" dy="1.2em" class="st6">to go?</tspan></text>		</g>
+		<g id="shape88-224" v:mID="88" v:groupContext="shape" v:layerMember="1" transform="translate(714.938,-380.25)">
+			<title>Dynamic connector.88</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-23.0625" cy="1175.63" width="40" height="17.6036"/>
+			<path d="M0 1182.37 L0 1175.63 L-45.84 1175.63" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-28.5663" y="1170.83" width="11.0078" height="9.59985" class="st9"/>
+			<text x="-28.57" y="1178.03" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape90-231" v:mID="90" v:groupContext="shape" v:layerMember="1" transform="translate(678.938,-358.875)">
+			<title>Dynamic connector.90</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="4.5" cy="1210.5" width="40" height="17.6036"/>
+			<path d="M0 1188 C-4.5 1188 -5.67 1201.43 5.28 1211.22 C12.6 1217.77 25.34 1222.69 31.87 1220.7 L32.08 1220.41"
+					class="st19"/>
+			<rect v:rectContext="textBkgnd" x="-0.191378" y="1205.7" width="9.38287" height="9.59985" class="st9"/>
+			<text x="-0.19" y="1212.9" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1010-238" v:mID="1010" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-301.5)">
+			<title>Decision.36</title>
+			<desc>Do you still think it needs to be in the PS package?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1152" width="60" height="54"/>
+			<path d="M0 1152 L36 1116 L72 1152 L36 1188 L0 1152 Z" class="st1"/>
+			<text x="17.94" y="1140" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Do you still <v:newlineChar/><tspan
+						x="9.55" dy="1.2em" class="st6">think it needs to </tspan><tspan x="16.84" dy="1.2em" class="st6">be in the PS </tspan><tspan
+						x="20.83" dy="1.2em" class="st6">package?</tspan></text>		</g>
+		<g id="shape1012-244" v:mID="1012" v:groupContext="shape" v:layerMember="1" transform="translate(67.5,-337.5)">
+			<title>Dynamic connector.1012</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-9" cy="1188" width="40" height="17.6036"/>
+			<path d="M9 1188 L-45 1188 L-45 463.5 L1.96 463.5" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-14.5038" y="1183.2" width="11.0078" height="9.59985" class="st9"/>
+			<text x="-14.5" y="1190.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1006-251" v:mID="1006" v:groupContext="shape" v:layerMember="0" transform="translate(76.5,-846)">
+			<title>Decision.1006</title>
+			<desc>Can the idea be implemented outside of the PS code repo?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1152" width="60" height="54"/>
+			<path d="M0 1152 L36 1116 L72 1152 L36 1188 L0 1152 Z" class="st1"/>
+			<text x="15.68" y="1140" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Can the idea<v:lf/><tspan
+						x="8.26" dy="1.2em" class="st6"> </tspan>be implemented <tspan x="8.5" dy="1.2em" class="st6">outside of the PS </tspan><tspan
+						x="17.75" dy="1.2em" class="st6">code repo?</tspan></text>		</g>
+		<g id="shape1007-257" v:mID="1007" v:groupContext="shape" v:layerMember="1" transform="translate(121.5,-945)">
+			<title>Dynamic connector.1007</title>
+			<path d="M-9 1188 L-9 1207.96" class="st3"/>
+		</g>
+		<g id="shape1008-262" v:mID="1008" v:groupContext="shape" v:layerMember="1" transform="translate(67.5,-882)">
+			<title>Dynamic connector.1008</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-4.5" cy="1188" width="40" height="17.6036"/>
+			<path d="M9 1188 L-16.88 1188 L-16.88 1566 L1.96 1566" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-10.0038" y="1183.2" width="11.0078" height="9.59985" class="st9"/>
+			<text x="-10" y="1190.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1001-269" v:mID="1001" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-485.1)">
+			<title>Dynamic connector.1001</title>
+			<path d="M9 1188 L9 1211.56" class="st21"/>
+		</g>
+		<g id="shape1014-274" v:mID="1014" v:groupContext="shape" v:layerMember="1" transform="translate(103.5,-400.5)">
+			<title>Dynamic connector.1014</title>
+			<path d="M9 1188 L9 1207.96" class="st21"/>
+		</g>
+		<g id="shape1015-279" v:mID="1015" v:groupContext="shape" v:layerMember="0" transform="translate(194.625,-662.3)">
+			<title>Decision.1015</title>
+			<desc>Do the WGs think an RFC is required?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="60" height="40.5"/>
+			<path d="M0 1161 L36 1134 L72 1161 L36 1188 L0 1161 Z" class="st1"/>
+			<text x="16.54" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Do the WGs <tspan
+						x="12.37" dy="1.2em" class="st6">think an RFC is </tspan><tspan x="20.15" dy="1.2em" class="st6">required?</tspan></text>		</g>
+		<g id="shape1016-284" v:mID="1016" v:groupContext="shape" v:layerMember="1" transform="translate(266.625,-680.3)">
+			<title>Dynamic connector.1016</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="21.9375" cy="1179" width="40" height="17.6036"/>
+			<path d="M0 1179 L36.83 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="16.4337" y="1174.2" width="11.0078" height="9.59985" class="st7"/>
+			<text x="16.43" y="1181.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1017-291" v:mID="1017" v:groupContext="shape" v:layerMember="1" transform="translate(158.625,-698.462)">
+			<title>Dynamic connector.1017</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="18" cy="1197" width="40" height="17.6036"/>
+			<path d="M0 1196.84 L18 1196.84 L18 1197.16 L28.96 1197.16" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="12.4962" y="1192.2" width="11.0078" height="9.59985" class="st9"/>
+			<text x="12.5" y="1199.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1019-298" v:mID="1019" v:groupContext="shape" v:layerMember="1" transform="translate(221.625,-716.3)">
+			<title>Dynamic connector.1019</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1174.5" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1168.04" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="4.30862" y="1169.7" width="9.38287" height="9.59985" class="st9"/>
+			<text x="4.31" y="1176.9" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1018-305" v:mID="1018" v:groupContext="shape" v:layerMember="0" transform="translate(194.625,-743.3)">
+			<title>Process.1018</title>
+			<desc>WGs label “RFC not required”; Contributor opens a PR to be re...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1152" width="72" height="72"/>
+			<rect x="0" y="1116" width="72" height="72" class="st5"/>
+			<text x="4.43" y="1130.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>WGs label “RFC not <tspan
+						x="19.26" dy="1.2em" class="st6">required</tspan>”; <tspan x="3.37" dy="1.2em" class="st6">Contributor opens a </tspan><tspan
+						x="6.46" dy="1.2em" class="st6">PR to be reviewed </tspan><tspan x="3.05" dy="1.2em" class="st6">by WGs and merged </tspan><tspan
+						x="11.83" dy="1.2em" class="st6">by maintainers</tspan></text>		</g>
+		<g id="shape1020-313" v:mID="1020" v:groupContext="shape" v:layerMember="1" transform="translate(873,-773.162)">
+			<title>Dynamic connector.1020</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1221.53" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1248.02" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="3.49619" y="1216.73" width="11.0078" height="9.59985" class="st9"/>
+			<text x="3.5" y="1223.93" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1021-320" v:mID="1021" v:groupContext="shape" v:layerMember="0" transform="translate(846,-652.1)">
+			<title>Process.1021</title>
+			<desc>Committee labels RFC PR with “Experimental - Approved”</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st14"/>
+			<text x="7.48" y="1149" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Committee labels <tspan
+						x="16.59" dy="1.2em" class="st6">RFC PR with </tspan><tspan x="10.65" dy="1.2em" class="st6">“</tspan>Experimental - <tspan
+						x="18.41" dy="1.2em" class="st6">Approved</tspan>”</text>		</g>
+		<g id="shape1023-326" v:mID="1023" v:groupContext="shape" v:layerMember="1" transform="translate(920.531,-810.4)">
+			<title>Dynamic connector.1023</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="33.6094" cy="1179" width="40" height="17.6036"/>
+			<path d="M0 1179 L60.18 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="28.918" y="1174.2" width="9.38287" height="9.59985" class="st9"/>
+			<text x="28.92" y="1181.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1024-333" v:mID="1024" v:groupContext="shape" v:layerMember="1" transform="translate(1023.75,-837.4)">
+			<title>Dynamic connector.1024</title>
+			<path d="M0 1179 L0 1134.76 L-366.75 1134.76 L-366.75 1171.96" class="st3"/>
+		</g>
+		<g id="shape1026-338" v:mID="1026" v:groupContext="shape" v:layerMember="1" transform="translate(495,-577.125)">
+			<title>Dynamic connector.1026</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="13.5" cy="1179" width="40" height="17.6036"/>
+			<path d="M0 1179 L19.96 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="7.99618" y="1174.2" width="11.0078" height="9.59985" class="st9"/>
+			<text x="8" y="1181.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1025-345" v:mID="1025" v:groupContext="shape" v:layerMember="0" transform="translate(522,-540)">
+			<title>Decision.1025</title>
+			<desc>Has the RFC been marked with “Experimental - Approved”?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="46.125" cy="1141.88" width="76.88" height="69.1875"/>
+			<path d="M0 1141.88 L46.12 1095.75 L92.25 1141.88 L46.12 1188 L0 1141.88 Z" class="st17"/>
+			<text x="17.68" y="1129.87" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Has the RFC been <tspan
+						x="25.59" dy="1.2em" class="st6">marked with </tspan><tspan x="20.77" dy="1.2em" class="st6">“</tspan>Experimental - <tspan
+						x="26.68" dy="1.2em" class="st6">Approved</tspan>”?</text>		</g>
+		<g id="shape1028-351" v:mID="1028" v:groupContext="shape" v:layerMember="1" transform="translate(614.25,-577.125)">
+			<title>Dynamic connector.1028</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="18" cy="1179" width="40" height="17.6036"/>
+			<path d="M0 1179 L28.96 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="12.4962" y="1174.2" width="11.0078" height="9.59985" class="st7"/>
+			<text x="12.5" y="1181.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1027-358" v:mID="1027" v:groupContext="shape" v:layerMember="0" transform="translate(650.25,-559.125)">
+			<title>Process.1027</title>
+			<desc>Merge code PR as Experimental Feature</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st16"/>
+			<text x="7" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Merge code PR as <tspan
+						x="14.45" dy="1.2em" class="st6">Experimental </tspan><tspan x="23.43" dy="1.2em" class="st6">Feature</tspan></text>		</g>
+		<g id="shape1029-363" v:mID="1029" v:groupContext="shape" v:layerMember="1" transform="translate(568.125,-632.25)">
+			<title>Dynamic connector.1029</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="1.375" cy="1126.55" width="40" height="17.6036"/>
+			<path d="M0 1188 L0 1045.85 L88.88 1045.85 L88.88 1034.89" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-3.31637" y="1121.75" width="9.38287" height="9.59985" class="st9"/>
+			<text x="-3.32" y="1128.95" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1031-370" v:mID="1031" v:groupContext="shape" v:layerMember="1" transform="translate(445.5,-616.5)">
+			<title>Dynamic connector.1031</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1170" width="40" height="17.6036"/>
+			<path d="M9 1177.8 L9 1177.44 L9 1162.56" class="st22"/>
+			<rect v:rectContext="textBkgnd" x="4.30862" y="1165.2" width="9.38287" height="9.59985" class="st9"/>
+			<text x="4.31" y="1172.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1030-381" v:mID="1030" v:groupContext="shape" v:layerMember="0" transform="translate(418.5,-652.5)">
+			<title>Process.1030</title>
+			<desc>Contributor updates code PR based on feedback</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1161" width="72" height="54"/>
+			<rect x="0" y="1134" width="72" height="54" class="st16"/>
+			<text x="2.94" y="1153.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Contributor updates <tspan
+						x="7.27" dy="1.2em" class="st6">code PR based on </tspan><tspan x="21.17" dy="1.2em" class="st6">feedback</tspan></text>		</g>
+		<g id="shape1033-386" v:mID="1033" v:groupContext="shape" v:layerMember="1" transform="translate(873,-652.1)">
+			<title>Dynamic connector.1033</title>
+			<path d="M9 1188 L9 1205.31" class="st3"/>
+		</g>
+		<g id="shape1032-391" v:mID="1032" v:groupContext="shape" v:layerMember="0" transform="translate(840.375,-544.5)">
+			<title>Decision.1032</title>
+			<desc>Has the code PR been merged as experimental?</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="41.625" cy="1146.38" width="69.38" height="62.4375"/>
+			<path d="M0 1146.38 L41.62 1104.75 L83.25 1146.38 L41.62 1188 L0 1146.38 Z" class="st18"/>
+			<text x="29.32" y="1134.37" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Has the <v:newlineChar/><tspan
+						x="19.5" dy="1.2em" class="st6">code PR been </tspan><tspan x="24.69" dy="1.2em" class="st6">merged as </tspan><tspan
+						x="18.18" dy="1.2em" class="st6">experimental?</tspan></text>		</g>
+		<g id="shape1034-397" v:mID="1034" v:groupContext="shape" v:layerMember="1" transform="translate(840.375,-586.125)">
+			<title>Dynamic connector.1034</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="-177.75" cy="1252.12" width="40" height="17.6036"/>
+			<path d="M0 1188 L-18 1188 L-18 1252.12 L-151.12 1252.12 A3 3 -180 0 0 -157.12 1252.12 L-385.87 1252.12 L-385.87 1225.41"
+					class="st3"/>
+			<rect v:rectContext="textBkgnd" x="-182.441" y="1247.33" width="9.38287" height="9.59985" class="st9"/>
+			<text x="-182.44" y="1254.53" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1036-404" v:mID="1036" v:groupContext="shape" v:layerMember="1" transform="translate(873,-544.5)">
+			<title>Dynamic connector.1036</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1201.5" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1207.96" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="3.49619" y="1196.7" width="11.0078" height="9.59985" class="st9"/>
+			<text x="3.5" y="1203.9" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1035-411" v:mID="1035" v:groupContext="shape" v:layerMember="0" transform="translate(846,-409.5)">
+			<title>Decision.1035</title>
+			<desc>Does the Committee believe the experimental feature has had e...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1.5):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1134" width="60" height="81"/>
+			<path d="M0 1134 L36 1080 L72 1134 L36 1188 L0 1134 Z" class="st18"/>
+			<text x="21.54" y="1107.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Does the <tspan
+						x="17.79" dy="1.2em" class="st6">Committee </tspan><tspan x="17.95" dy="1.2em" class="st6">believe the </tspan><tspan
+						x="14.41" dy="1.2em" class="st6">experimental </tspan><tspan x="10.54" dy="1.2em" class="st6">feature has had </tspan><tspan
+						x="11.01" dy="1.2em" class="st6">enough time to </tspan><tspan x="26.32" dy="1.2em" class="st6">bake?</tspan></text>		</g>
+		<g id="shape1037-420" v:mID="1037" v:groupContext="shape" v:layerMember="1" transform="translate(873,-409.5)">
+			<title>Dynamic connector.1037</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1199.81" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1204.58" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="3.49619" y="1195.01" width="11.0078" height="9.59985" class="st9"/>
+			<text x="3.5" y="1202.21" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1038-427" v:mID="1038" v:groupContext="shape" v:layerMember="1" transform="translate(686.25,-559.125)">
+			<title>Dynamic connector.1038</title>
+			<path d="M0 1188 L0 1291.5 L-168.19 1291.5 L-168.19 1302.46" class="st3"/>
+		</g>
+		<g id="shape1040-432" v:mID="1040" v:groupContext="shape" v:layerMember="1" transform="translate(693,-810.4)">
+			<title>Dynamic connector.1040</title>
+			<path d="M0 1179 L33.46 1179" class="st3"/>
+		</g>
+		<g id="shape1039-437" v:mID="1039" v:groupContext="shape" v:layerMember="0" transform="translate(733.5,-766.156)">
+			<title>Decision.1039</title>
+			<desc>Does the Committee think the intent of the RFC is reasonable ...</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(1):1"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="40.5" cy="1134.76" width="67.5" height="79.8662"/>
+			<path d="M0 1134.76 L40.5 1081.51 L81 1134.76 L40.5 1188 L0 1134.76 Z" class="st18"/>
+			<text x="26.04" y="1117.96" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Does the <tspan
+						x="13.11" dy="1.2em" class="st6">Committee think </tspan><tspan x="13.8" dy="1.2em" class="st6">the intent of the </tspan><tspan
+						x="12.06" dy="1.2em" class="st6">RFC is reasonable </tspan><tspan x="24.89" dy="1.2em" class="st6">to pursue</tspan></text>		</g>
+		<g id="shape1041-444" v:mID="1041" v:groupContext="shape" v:layerMember="1" transform="translate(814.5,-810.4)">
+			<title>Dynamic connector.1041</title>
+			<desc>Yes</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="14.4844" cy="1179" width="40" height="17.6036"/>
+			<path d="M0 1179 L21.93 1179" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="8.98056" y="1174.2" width="11.0078" height="9.59985" class="st7"/>
+			<text x="8.98" y="1181.4" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text>		</g>
+		<g id="shape1043-451" v:mID="1043" v:groupContext="shape" v:layerMember="1" transform="translate(765,-766.156)">
+			<title>Dynamic connector.1043</title>
+			<desc>No</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="9" cy="1217.83" width="40" height="17.6036"/>
+			<path d="M9 1188 L9 1240.62" class="st3"/>
+			<rect v:rectContext="textBkgnd" x="4.30862" y="1213.03" width="9.38287" height="9.59985" class="st9"/>
+			<text x="4.31" y="1220.23" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>No</text>		</g>
+		<g id="shape1042-458" v:mID="1042" v:groupContext="shape" v:layerMember="0" transform="translate(738,-679.5)">
+			<title>Start/End.1042</title>
+			<desc>Process stops</desc>
+			<v:custProps>
+				<v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
+						v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
+						v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+				<v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0"/>
+				<v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
+						v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
+						v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+				<v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(1):0"/>
+				<v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.375):0"/>
+				<v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.375):0"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(2,2,2,2)"/>
+			<v:textRect cx="36" cy="1174.5" width="72" height="27"/>
+			<path d="M13.5 1188 L58.5 1188 A13.5 13.5 -180 0 0 58.5 1161 L13.5 1161 A13.5 13.5 -180 1 0 13.5 1188 Z" class="st13"/>
+			<text x="14.04" y="1176.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Process stops</text>		</g>
+	</g>
+</svg>
diff --git a/docs/community/process_diagram.vsdx b/docs/community/process_diagram.vsdx
new file mode 100644
index 00000000000..014c28fa43d
Binary files /dev/null and b/docs/community/process_diagram.vsdx differ
diff --git a/docs/community/working-group-definitions.md b/docs/community/working-group-definitions.md
new file mode 100644
index 00000000000..277fc37f789
--- /dev/null
+++ b/docs/community/working-group-definitions.md
@@ -0,0 +1,199 @@
+# Working Group Definitions
+
+This document maintains a list of the current PowerShell [Working Groups (WG)](working-group.md),
+as well as their definitions, membership, and a non-exhaustive set of examples of topics that fall
+within the purview of that WG.
+
+For an up-to-date list of the issue/PR labels associated with these WGs,
+see [Issue Management](../maintainers/issue-management.md)
+
+## Desired State Configuration (DSC)
+
+The Desired State Configuration (DSC) WG manages all facets of DSC in PowerShell 7,
+including language features (like the `Configuration` keyword)
+and the `PSDesiredStateConfiguration` module.
+
+Today, DSC is integrated into the PowerShell language, and we need to manage it as such.
+
+### Members
+
+* @TravisEz13
+* @theJasonHelmick
+* @anmenaga
+* @gaelcolas
+* @michaeltlombardi
+* @SteveL-MSFT
+
+## Developer Experience
+
+The PowerShell developer experience includes the **development of modules** (in C#, PowerShell script, etc.),
+as well as the experience of **hosting PowerShell and its APIs** in other applications and language runtimes.
+Special consideration should be given to topics like **backwards compatibility** with Windows PowerShell
+(e.g. with **PowerShell Standard**) and **integration with related developer tools**
+(e.g. .NET CLI or the PowerShell extension for Visual Studio Code).
+
+### Members
+
+* @JamesWTruher (PS Standard, module authoring)
+* @adityapatwardhan (SDK)
+* @michaeltlombardi
+* @SeeminglyScience
+* @bergmeister
+
+## Engine
+
+The PowerShell engine is one of the largest and most complex aspects of the codebase.
+The Engine WG should be focused on the
+**implementation and maintenance of core PowerShell engine code**.
+This includes (but is not limited to):
+
+* The language parser
+* The command and parameter binders
+* The module and provider systems
+  * `*-Item` cmdlets
+  * Providers
+* Performance
+* Componentization
+* AssemblyLoadContext
+
+It's worth noting that the Engine WG is not responsible for the definition of the PowerShell language.
+This should be handled by the Language WG instead.
+However, it's expected that many issues will require input from both WGs.
+
+### Members
+
+* @daxian-dbw
+* @JamesWTruher
+* @rkeithhill
+* @vexx32
+* @SeeminglyScience
+* @IISResetMe
+* @powercode
+* @kilasuit
+
+## Interactive UX
+
+While much of PowerShell can be used through both interactive and non-interactive means,
+some of the PowerShell user experience is exclusively interactive.
+These topics include (but are not limited to):
+
+* Console
+* Help System
+* Tab completion / IntelliSense
+* Markdown rendering
+* PSReadLine
+* Debugging
+
+### Members
+
+* @theJasonHelmick
+* @daxian-dbw (PSReadline / IntelliSense)
+* @adityapatwardhan (Markdown / help system)
+* @JamesWTruher (cmdlet design)
+* @SeeminglyScience
+* @sdwheeler
+* @kilasuit
+* @FriedrichWeinmann
+* @StevenBucher98
+
+## Language
+
+The Language WG is distinct from the Engine WG in that they deal with the abstract definition
+of the PowerShell language itself.
+While all WGs will be working closely with the PowerShell Committee (and may share members),
+it's likely that the Language WG will work especially close with them,
+particularly given the long-lasting effects of language decisions.
+
+### Members
+
+* @JamesWTruher
+* @daxian-dbw
+* @SeeminglyScience
+
+## Remoting
+
+The Remoting WG should focus on topics like the **PowerShell Remoting Protocol (PSRP)**,
+the **protocols implemented under PSRP** (e.g. WinRM and SSH),
+and **other protocols used for remoting** (e.g. "pure SSH" as opposed to SSH over PSRP).
+Given the commonality of serialization boundaries, the Remoting WG should also focus on
+**the PowerShell job system**.
+
+### Members
+
+* @anmenaga
+* @TravisEz13
+
+## Cmdlets and Modules
+
+The Cmdlet WG should focus on core/inbox modules whose source code lives within the
+`PowerShell/PowerShell` repository,
+including the proposal of new cmdlets and parameters, improvements and bugfixes to existing
+cmdlets/parameters, and breaking changes.
+
+However, some modules that ship as part of the PowerShell package are managed in other source repositories.
+These modules are owned by the maintainers of those individual repositories.
+These modules include:
+
+* [`Microsoft.PowerShell.Archive`](https://github.com/PowerShell/Microsoft.PowerShell.Archive)
+* [`PackageManagement` (formerly `OneGet`)](https://github.com/OneGet/oneget)
+* [`PowerShellGet`](https://github.com/PowerShell/PowerShellGet)
+* [`PSDesiredStateConfiguration`](https://github.com/PowerShell/xPSDesiredStateConfiguration)
+  (Note: this community repository maintains a slightly different version of this module on the Gallery,
+  but should be used for future development of `PSDesiredStateConfiguration`.)
+* [`PSReadLine`](https://github.com/PowerShell/PSReadLine)
+* [`ThreadJob`](https://github.com/PowerShell/Modules/tree/master/Modules/Microsoft.PowerShell.ThreadJob)
+
+### Members
+
+* @JamesWTruher
+* @SteveL-MSFT
+* @jdhitsolutions
+* @TobiasPSP
+* @doctordns
+* @kilasuit
+
+## Security
+
+The Security WG should be brought into any issues or pull requests which may have security implications
+in order to provide their expertise, concerns, and guidance.
+
+### Members
+
+* @TravisEz13
+* @SydneySmithReal
+* @anamnavi
+* @SteveL-MSFT
+
+## Explicitly not Working Groups
+
+Some areas of ownership in PowerShell specifically do not have Working Groups.
+For the sake of completeness, these are listed below:
+
+### Build
+
+Build includes everything that is needed to build, compile, and package PowerShell.
+This bucket is also not oriented a customer-facing deliverable and is already something handled by Maintainers,
+so we don't need to address it as part of the WGs.
+
+* Build
+  * `build.psm1`
+  * `install-powershell.ps1`
+  * Build infrastructure and automation
+* Packaging
+  * Scripts
+  * Infrastructure
+
+### Quality
+
+Similar to the topic of building PowerShell, quality
+(including **test code**, **test infrastructure**, and **code coverage**)
+should be managed by the PowerShell Maintainers.
+
+* Test code
+  * Pester unit tests
+  * xUnit unit tests
+* Test infrastructure
+  * Nightlies
+  * CI
+* Code coverage
+* Pester
diff --git a/docs/community/working-group.md b/docs/community/working-group.md
new file mode 100644
index 00000000000..8b9caea2857
--- /dev/null
+++ b/docs/community/working-group.md
@@ -0,0 +1,197 @@
+# Working Groups
+
+Working Groups (WGs) are collections of contributors with knowledge of specific components or
+technologies in the PowerShell domain.
+They are responsible for issue triage/acceptance, code reviews, and providing their expertise to
+others in issues, PRs, and RFC discussions.
+
+The list, description, and membership of the existing Working Groups is available
+[here](working-group-definitions.md).
+
+## Terms
+
+* **Contributor** is used interchangeably within this doc as anyone participating in issues or
+  contributing code, RFCs, documentations, tests, bug reports, etc.,
+  regardless of their status with the PowerShell project.
+* **Repository Maintainers** are trusted stewards of the PowerShell repository responsible for
+  maintaining consistency and quality of PowerShell code.
+  One of their primary responsibilities is merging pull requests after all requirements have been fulfilled.
+  (Learn more about the Repository Maintainers [here](https://github.com/PowerShell/PowerShell/tree/master/docs/maintainers).)
+* The **PowerShell Committee** is responsible for the design and governance of the PowerShell project,
+  primarily by voting to accept or reject review-for-comment (RFC) documents.
+  (Learn more about the PowerShell Committee [here](https://github.com/PowerShell/PowerShell/blob/master/docs/community/governance.md#powershell-committee).)
+* A **Working Group** is a collection of people responsible for providing expertise on a specific
+  area of PowerShell in order to help establish consensus within the community and Committee.
+  The responsibilities of Working Groups are outlined below.
+  (Note: while some experts within Working Groups may have more specific expertise in a sub-topic
+  of the team,
+  the intent is that each team is holistically and collectively responsible for making decisions
+  within the larger topic space.)
+
+## Goals
+
+In designing the WG process, the Committee had a few goals:
+
+1. Increase the velocity of innovation without compromising the stability of PowerShell
+1. Reduce the time spent by contributors on writing/reviewing PRs and RFCs that are not feasible
+1. Increase the formal authority of subject matter experts (SMEs) inside and outside of Microsoft
+1. Decrease the volume of required technical discussions held by the Committee
+
+## Process
+
+This process is represented within the [`process_diagram.vsdx` Visio diagram](process_diagram.vsdx):
+
+![process_diagram](process_diagram.svg)
+
+1. A contributor has an idea for PowerShell
+1. The contributor files an issue informally describing the idea,
+   including some rationale as to why it should happen and a few use cases to show how it could work,
+   as well as to determine viability and value to the community.
+   This should include examples of expected input and output so that others understand how the feature would function in the real world.
+1. The issue gets triaged into an [Area label](https://github.com/PowerShell/PowerShell/blob/master/docs/maintainers/issue-management.md#feature-areas)
+   by Maintainers.
+   This area label maps to one or more Working Groups.
+1. If the Working Group determines that an idea can be prototyped or built outside of the PowerShell repo
+   (e.g. as a module),
+   contributors should start that idea outside of the PowerShell project.
+   Given that the issue is no longer directly relevant to the PowerShell project, it should be closed
+   (with a link to the new project, if available).
+   If the implementation turns out to be successful and particularly popular,
+   and a contributor believes that it would be overwhelmingly valuable to include in the primary PowerShell package,
+   they can restart the process in a new issue proposing that the functionality be
+   incorporated directly into the primary PowerShell package.
+1. After the issue is filed, interested contributors should discuss the
+   feasibility and approach of the idea in the issue.
+   The Working Group that owns that Area is expected to contribute to this discussion.
+   Working groups may have their own criteria to consider in their areas.
+1. After an appropriately exhaustive discussion/conversation
+   (i.e. the Working Group has determined that no new arguments are being made),
+   the Working Group makes a call on whether they believe the idea should continue through this process.
+   Note: this should be done via a best effort of consensus among the Working Group.
+   We don't currently have hard requirements for how this should be done,
+   but some ideas include:
+
+   * a single member of the Working Group makes a proposal as a comment and other members should
+     "react" on GitHub with up/down thumbs
+   * Working Groups communicate privately through their own established channel to reach consensus
+
+   It's worth noting that Working Group members who repeatedly speak on behalf of the Working Group without
+   consensus, they may be censured or removed from the team.
+
+### Working Groups reject the proposal
+
+If the Working Group says the idea should not pursued, the process stops.
+Some reasons for rejection include (but are not limited to):
+
+* the idea can be implemented and validated for usefulness and popularity outside of the primary PowerShell repo/package
+* the idea is difficult/impossible to implement
+* the implementation would introduce undesirable (and possibly breaking) changes to PowerShell
+* other reasons specific to individual Working Groups
+
+In the instance that the contributor feels they have compelling arguments showing that the
+Working Group is incorrect in their rejection,
+they can appeal to the PowerShell Committee by mentioning `@PowerShell/PowerShell-Committee`,
+upon which a maintainer will add the `Review-Committee` label to the issue and reopen it.
+Then, the PS Committee will discuss further with the Working Group and others to make a final call on
+whether or not the issue should be pursued further.
+
+Be sure to enumerate your reasons for appeal, as unfounded appeals may be rejected for consideration
+by the Committee until reasons are given.
+
+### Working groups believe the proposal has merit and/or potential
+
+If the idea passes the preliminary acceptance criteria for the Working Group,
+the process proceeds on one of a few different paths:
+
+#### "RFC Not Required"
+
+In some cases, a proposed idea is determined by the Working Group to be small, uncontroversial, or simple,
+such that an RFC is not required (to be determined by the Working Group).
+In these circumstances, the Working Group should mark the issue as "RFC not required",
+upon which it can move directly to the code PR phase to be reviewed by Working Groups and Maintainers.
+
+The Committee still holds the authority to require an RFC if they see an "RFC Not Required" issue
+that they feel needs more exposition before merging.
+
+In cases of minor breaking changes, Maintainers or Working Groups can add the `Review - Committee` label to get
+additional opinions from the Committee.
+
+#### RFC/Prototype Process
+
+If an idea has any significant design or ecosystem implications,
+*cannot* be prototyped or built outside of the PowerShell repo,
+and the community and Working Groups agree that the idea is worth pursuing,
+a contributor (who may or may not be the original issue filer) must do two things:
+
+* Write an RFC as a [Draft PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests)
+  into `PowerShell/PowerShell-RFC`
+* Prototype the implementation as a [Draft PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests)
+  into `PowerShell/PowerShell`
+
+In both cases, the intention is to provide Working Groups and other contributors who care about the
+idea an opportunity to provide feedback on the design and implementation.
+
+Either of these two steps can be done first, but both are required in order to have code accepted
+into the PowerShell repository, including experimental features.
+
+Note: When "Draft" is capitalized in this document, I'm referring to the
+[Draft pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests)
+feature on GitHub.
+We intend to use this feature liberally to mark the lifecycle of an idea through to implementation.
+
+#### RFCs
+
+The existing RFC process uses folders as a way to move an RFC through a multi-stage process
+(Draft -> Experimental -> Accepted/Final).
+However, it was difficult to reconcile this process with the benefits of PR reviews.
+
+With the introduction of Draft PRs on GitHub, we are reorienting the acceptance process around the PR itself.
+Going forward, an RFC will have three stages:
+
+1. A Draft PR, denoting that the RFC is still in the review period, openly soliciting comments,
+   and that it may continue to be significantly iterated upon with revisions, edits, and responses to
+   community feedback or concerns.
+1. After a minimum of two months of discussion, the RFC/PR author marks the PR as
+   [ready for review](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/changing-the-stage-of-a-pull-request),
+   upon which the RFC will enter the Committee's review queue to discuss the RFC contents and comments,
+   and make a decision on whether it is reasonable to pursue.
+   If after this review, the Committee determines that the intent of the RFC is not reasonable
+   (e.g. there may be irreconcilable issues with the design,
+   or the intent may not fit with the principles of PowerShell),
+   they will reject the PR and the process terminates.
+1. In most cases, the Committee will choose to wait for the code PR to be merged as experimental,
+   and leverage user feedback or telemetry to determine if the RFC PR should be merged.
+1. Finally, the Committee will choose to either merge or close the RFC PR,
+   marking the RFC as either accepted or rejected, respectively.
+
+#### Experiments
+
+Often times, implementing an idea can demonstrate opportunities or challenges that were not well
+understood when the idea was formulated.
+Similarly, a "simple" code change can have far reaching effects that are not well understood
+until you're able to experiment with an idea within working code.
+
+To that end, it's required that *some* implementation exist before the Committee will consider an
+RFC for acceptance.
+That way, contributors can compile the PR branch to play with a working iteration of the idea
+as a way to understand whether the feature is working as expected and valuable.
+
+In most cases, as long as an RFC has already been written and published as a draft,
+Working Groups or the Committee will approve the feature for incorporation as an experimental feature,
+so that it can be trialed with greater usage as part of a preview release.
+In addition to increasing the scope of those who can provide real-world feedback on the feature,
+this enables us to use telemetry to understand if users are turning off the feature in large numbers.
+
+Note: today, this will be done on a case-by-case basis, but over time, the Committee will establish
+firmer guidelines around when PRs should be merged as experimental.
+
+Experiments should be complete to the extent that they serve as reasonable indicators of the user experience.
+In the case that breaking changes are required of the feature, the break should be made in the prototype
+so that users can experiment with whether or not the break has a significant negative effect.
+
+#### Reporting Working Group members abuse
+
+Working group members are individuals and in many cases volunteers.
+There may be situations where a working group member might exhibit behavior that is objectionable,
+exceed the authority defined in this document or violate the [Code of Conduct](../../CODE_OF_CONDUCT.md).
+We recommend to report such issues by using the [Report Content](https://docs.github.com/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam) mechanism to bring it to the attention of the maintainers to review.
diff --git a/docs/debugging/README.md b/docs/debugging/README.md
index 1b13924b854..6e1acaaef59 100644
--- a/docs/debugging/README.md
+++ b/docs/debugging/README.md
@@ -41,7 +41,7 @@ process named `powershell`, and will attach to it. If you need more fine-grained
 control, replace `processName` with `processId` and provide a PID. (Please be
 careful not to commit such a change.)
 
-[core-debug]: https://docs.microsoft.com/dotnet/core/tutorials/with-visual-studio-code#debug
+[core-debug]: https://learn.microsoft.com/dotnet/core/tutorials/with-visual-studio-code#debug
 [vscode]: https://code.visualstudio.com/
 [OmniSharp]: https://github.com/OmniSharp/omnisharp-vscode
 
diff --git a/docs/dev-process/coding-guidelines.md b/docs/dev-process/coding-guidelines.md
index 389981c3f7b..ef0f671c1a0 100644
--- a/docs/dev-process/coding-guidelines.md
+++ b/docs/dev-process/coding-guidelines.md
@@ -86,9 +86,15 @@ We also run the [.NET code formatter tool](https://github.com/dotnet/codeformatt
 
 * Make sure the added/updated comments are meaningful, accurate and easy to understand.
 
-* Public members must use [doc comments](https://docs.microsoft.com/dotnet/csharp/programming-guide/xmldoc/).
+### Documentation comments
+
+* Create documentation using [XML documentation comments](https://learn.microsoft.com/dotnet/csharp/language-reference/xmldoc/) so that Visual Studio and other IDEs can use IntelliSense to show quick information about types or members.
+
+* Publicly visible types and their members must be documented.
   Internal and private members may use doc comments but it is not required.
 
+* Documentation text should be written using complete sentences ending with full stops.
+
 ## Performance Considerations
 
 PowerShell has a lot of performance sensitive code as well as a lot of inefficient code.
@@ -183,16 +189,16 @@ See [CODEOWNERS](../../.github/CODEOWNERS) for more information about the area e
 * Consider using the `Interlocked` class instead of the `lock` statement to atomically change simple states. The `Interlocked` class provides better performance for updates that must be atomic.
 
 * Here are some useful links for your reference:
-  * [Framework Design Guidelines](https://docs.microsoft.com/dotnet/standard/design-guidelines/index) - Naming, Design and Usage guidelines including:
-    * [Arrays](https://docs.microsoft.com/dotnet/standard/design-guidelines/arrays)
-    * [Collections](https://docs.microsoft.com/dotnet/standard/design-guidelines/guidelines-for-collections)
-    * [Exceptions](https://docs.microsoft.com/dotnet/standard/design-guidelines/exceptions)
-  * [Best Practices for Developing World-Ready Applications](https://docs.microsoft.com/dotnet/standard/globalization-localization/best-practices-for-developing-world-ready-apps) - Unicode, Culture, Encoding and Localization.
-  * [Best Practices for Exceptions](https://docs.microsoft.com/dotnet/standard/exceptions/best-practices-for-exceptions)
-  * [Best Practices for Using Strings in .NET](https://docs.microsoft.com/dotnet/standard/base-types/best-practices-strings)
-  * [Best Practices for Regular Expressions in .NET](https://docs.microsoft.com/dotnet/standard/base-types/best-practices)
-  * [Serialization Guidelines](https://docs.microsoft.com/dotnet/standard/serialization/serialization-guidelines)
-  * [Managed Threading Best Practices](https://docs.microsoft.com/dotnet/standard/threading/managed-threading-best-practices)
+  * [Framework Design Guidelines](https://learn.microsoft.com/dotnet/standard/design-guidelines/index) - Naming, Design and Usage guidelines including:
+    * [Arrays](https://learn.microsoft.com/dotnet/standard/design-guidelines/arrays)
+    * [Collections](https://learn.microsoft.com/dotnet/standard/design-guidelines/guidelines-for-collections)
+    * [Exceptions](https://learn.microsoft.com/dotnet/standard/design-guidelines/exceptions)
+  * [Best Practices for Developing World-Ready Applications](https://learn.microsoft.com/dotnet/core/extensions/best-practices-for-developing-world-ready-apps) - Unicode, Culture, Encoding and Localization.
+  * [Best Practices for Exceptions](https://learn.microsoft.com/dotnet/standard/exceptions/best-practices-for-exceptions)
+  * [Best Practices for Using Strings in .NET](https://learn.microsoft.com/dotnet/standard/base-types/best-practices-strings)
+  * [Best Practices for Regular Expressions in .NET](https://learn.microsoft.com/dotnet/standard/base-types/best-practices)
+  * [Serialization Guidelines](https://learn.microsoft.com/dotnet/standard/serialization/serialization-guidelines)
+  * [Managed Threading Best Practices](https://learn.microsoft.com/dotnet/standard/threading/managed-threading-best-practices)
 
 ## Portable Code
 
diff --git a/docs/git/README.md b/docs/git/README.md
index 817e4930f6c..46b5eee4c62 100644
--- a/docs/git/README.md
+++ b/docs/git/README.md
@@ -13,9 +13,9 @@ git clone https://github.com/PowerShell/PowerShell.git --branch=master
 * Checkout a new local branch from `master` for every change you want to make (bugfix, feature).
 * Use lowercase-with-dashes for naming.
 * Follow [Linus' recommendations][Linus] about history.
-    - "People can (and probably should) rebase their _private_ trees (their own work). That's a _cleanup_. But never other peoples code. That's a 'destroy history'...
-    You must never EVER destroy other peoples history. You must not rebase commits other people did.
-    Basically, if it doesn't have your sign-off on it, it's off limits: you can't rebase it, because it's not yours."
+  * "People can (and probably should) rebase their _private_ trees (their own work). That's a _cleanup_. But never other peoples code. That's a 'destroy history'...
+  You must never EVER destroy other peoples history. You must not rebase commits other people did.
+  Basically, if it doesn't have your sign-off on it, it's off limits: you can't rebase it, because it's not yours."
 
 ### Understand branches
 
@@ -23,12 +23,12 @@ git clone https://github.com/PowerShell/PowerShell.git --branch=master
   It could be unstable.
 * Send your pull requests to **master**.
 
-### Sync your local repo
+### Sync your local repository
 
 Use **git rebase** instead of **git merge** and **git pull**, when you're updating your feature-branch.
 
 ```sh
-# fetch updates all remote branch references in the repo
+# fetch updates all remote branch references in the repository
 # --all : tells it to do it for all remotes (handy, when you use your fork)
 # -p : tells it to remove obsolete remote branch references (when they are removed from remote)
 git fetch --all -p
@@ -42,11 +42,9 @@ git rebase origin/master
 Covering all possible git scenarios is behind the scope of the current document.
 Git has excellent documentation and lots of materials available online.
 
-We are leaving few links here:
+We are leaving a few links here:
 
-[Git pretty flowchart](http://justinhileman.info/article/git-pretty/): what to do, when your local repo became a mess.
-
-[Linus]:https://wincent.com/wiki/git_rebase%3A_you're_doing_it_wrong
+[Linus]:https://web.archive.org/web/20230522041845/https://wincent.com/wiki/git_rebase%3A_you're_doing_it_wrong
 
 ## Tags
 
@@ -57,12 +55,12 @@ you will find it via **tags**.
 * Find the tag that corresponds to the release.
 * Use `git checkout <tag-name>` to get this version.
 
-**Note:** [checking out a tag][tag] will move the repo to a [DETACHED HEAD][HEAD] state.
+**Note:** [checking out a tag][tag] will move the repository to a [DETACHED HEAD][HEAD] state.
 
 [tag]:https://git-scm.com/book/en/v2/Git-Basics-Tagging#Checking-out-Tags
 [HEAD]:https://www.git-tower.com/learn/git/faq/detached-head-when-checkout-commit
 
-If you want to make changes, based on tag's version (i.e. a hotfix), 
+If you want to make changes, based on tag's version (i.e. a hotfix),
 checkout a new branch from this DETACHED HEAD state.
 
 ```sh
diff --git a/docs/git/basics.md b/docs/git/basics.md
index a8a9bacf046..aa7629cf746 100644
--- a/docs/git/basics.md
+++ b/docs/git/basics.md
@@ -40,11 +40,6 @@ changes, and issue a pull request.
 
 [Hello World]: https://guides.github.com/activities/hello-world/
 
-#### Katacoda
-
-Learn basic Git scenarios in the browser with interactive labs.
-[Git lessons on katacoda](https://www.katacoda.com/courses/git/).
-
 #### Githug
 
 [Githug](https://github.com/Gazler/githug) is a great gamified way to
diff --git a/docs/host-powershell/README.md b/docs/host-powershell/README.md
index 3d96855b413..174f986dfa4 100644
--- a/docs/host-powershell/README.md
+++ b/docs/host-powershell/README.md
@@ -41,7 +41,7 @@ There is a special hosting scenario for native hosts,
 where Trusted Platform Assemblies (TPA) do not include PowerShell assemblies,
 such as the in-box `powershell.exe` in Nano Server and the Azure DSC host.
 
-For such hosting scenarios, the native host needs to bootstrap by calling [`PowerShellAssemblyLoadContextInitializer.SetPowerShellAssemblyLoadContext`](https://docs.microsoft.com/dotnet/api/system.management.automation.powershellassemblyloadcontextinitializer.setpowershellassemblyloadcontext).
+For such hosting scenarios, the native host needs to bootstrap by calling [`PowerShellAssemblyLoadContextInitializer.SetPowerShellAssemblyLoadContext`](https://learn.microsoft.com/dotnet/api/system.management.automation.powershellassemblyloadcontextinitializer.setpowershellassemblyloadcontext).
 When using this API, the native host can pass in the path to the directory that contains PowerShell assemblies.
 A handler will then be registered to the [`Resolving`](https://github.com/dotnet/corefx/blob/d6678e9653defe3cdfff26b2ff62135b6b22c77f/src/System.Runtime.Loader/ref/System.Runtime.Loader.cs#L38)
 event of the default load context to deal with the loading of assemblies from that directory.
diff --git a/docs/host-powershell/sample/NuGet.config b/docs/host-powershell/sample/NuGet.config
deleted file mode 100644
index b3ce3cb82a5..00000000000
--- a/docs/host-powershell/sample/NuGet.config
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <packageSources>
-    <clear />
-    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> 
-  </packageSources>
-  <disabledPackageSources>
-    <clear />
-  </disabledPackageSources>
-</configuration>
diff --git a/docs/host-powershell/sample/NuGet.config.md b/docs/host-powershell/sample/NuGet.config.md
new file mode 100644
index 00000000000..bf2b4c3f688
--- /dev/null
+++ b/docs/host-powershell/sample/NuGet.config.md
@@ -0,0 +1,16 @@
+# Nuget.config creation
+
+Create a filed called `nuget.config` at this location with this content:
+
+```xml
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <packageSources>
+    <clear />
+    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> 
+  </packageSources>
+  <disabledPackageSources>
+    <clear />
+  </disabledPackageSources>
+</configuration>
+```
diff --git a/docs/learning-powershell/README.md b/docs/learning-powershell/README.md
deleted file mode 100644
index 0dbbc5b8576..00000000000
--- a/docs/learning-powershell/README.md
+++ /dev/null
@@ -1,127 +0,0 @@
-# Learning PowerShell
-
-Whether you're a Developer, a DevOps or an IT Professional, this doc will help you getting started with PowerShell.
-In this document we'll cover the following:
-installing PowerShell, samples walkthrough, PowerShell editor, debugger, testing tools and a map book for experienced bash users to get started with PowerShell faster.
-
-The exercises in this document are intended to give you a solid foundation in how to use PowerShell.
-You won't be a PowerShell guru at the end of reading this material but you will be well on your way with the right set of knowledge to start using PowerShell.
-
-If you have 30 minutes now, let’s try it.
-
-## Installing PowerShell
-
-First you need to set up your computer working environment if you have not done so.
-Choose the platform below and follow the instructions.
-At the end of this exercise, you should be able to launch the PowerShell session.
-
-- Get PowerShell by installing package
-    * [PowerShell on Linux][inst-linux]
-    * [PowerShell on macOS][inst-macos]
-    * [PowerShell on Windows][inst-win]
-
-  For this tutorial, you do not need to install PowerShell if you are running on Windows.
-  You can launch PowerShell console by pressing Windows key, typing PowerShell, and clicking on Windows PowerShell.
-  However if you want to try out the latest PowerShell, follow the [PowerShell on Windows][inst-win].
-
-- Alternatively you can get the PowerShell by [building it][build-powershell]
-
-[build-powershell]:../../README.md#building-the-repository
-[inst-linux]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux
-[inst-win]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-windows
-[inst-macos]: https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos
-
-## Getting Started with PowerShell
-
-PowerShell commands follow a Verb-Noun semantic with a set of parameters.
-It's easy to learn and use PowerShell.
-For example, `Get-Process` will display all the running processes on your system.
-Let's walk through with a few examples from the [PowerShell Beginner's Guide](powershell-beginners-guide.md).
-
-Now you have learned the basics of PowerShell.
-Please continue reading if you want to do some development work in PowerShell.
-
-### PowerShell Editor
-
-In this section, you will create a PowerShell script using a text editor.
-You can use your favorite editor to write scripts.
-We use Visual Studio Code (VS Code) which works on Windows, Linux, and macOS.
-Click on the following link to create your first PowerShell script.
-
-- [Using Visual Studio Code (VS Code)](https://docs.microsoft.com/powershell/scripting/dev-cross-plat/vscode/using-vscode)
-
-### PowerShell Debugger
-
-Debugging can help you find bugs and fix problems in your PowerShell scripts.
-Click on the link below to learn more about debugging:
-
-- [Using Visual Studio Code (VS Code)](https://docs.microsoft.com/powershell/scripting/dev-cross-plat/vscode/using-vscode#debugging-with-visual-studio-code)
-- [PowerShell Command-line Debugging][cli-debugging]
-
-[cli-debugging]:./debugging-from-commandline.md
-
-### PowerShell Testing
-
-We recommend using Pester testing tool which is initiated by the PowerShell Community for writing test cases.
-To use the tool please read [Pester Guides](https://github.com/pester/Pester) and [Writing Pester Tests Guidelines](https://github.com/PowerShell/PowerShell/blob/master/docs/testing-guidelines/WritingPesterTests.md).
-
-### Map Book for Experienced Bash users
-
-The table below lists the usage of some basic commands to help you get started on PowerShell faster.
-Note that all bash commands should continue working on PowerShell session.
-
-| Bash                            | PowerShell                              | Description
-|:--------------------------------|:----------------------------------------|:---------------------
-| ls                              | dir, Get-ChildItem                      | List files and folders
-| tree                            | dir -Recurse, Get-ChildItem -Recurse    | List all files and folders
-| cd                              | cd, Set-Location                        | Change directory
-| pwd                             | pwd, $pwd, Get-Location                 | Show working directory
-| clear, Ctrl+L, reset            | cls, clear                              | Clear screen
-| mkdir                           | New-Item -ItemType Directory            | Create a new folder
-| touch test.txt                  | New-Item -Path test.txt                 | Create a new empty file
-| cat test1.txt test2.txt         | Get-Content test1.txt, test2.txt        | Display files contents
-| cp ./source.txt ./dest/dest.txt | Copy-Item source.txt dest/dest.txt      | Copy a file
-| cp -r ./source ./dest           | Copy-Item ./source ./dest -Recurse      | Recursively copy from one folder to another
-| mv ./source.txt ./dest/dest.txt | Move-Item ./source.txt ./dest/dest.txt  | Move a file to other folder
-| rm test.txt                     | Remove-Item test.txt                    | Delete a file
-| rm -r &lt;folderName>           | Remove-Item &lt;folderName> -Recurse    | Delete a folder
-| find -name build*               | Get-ChildItem build* -Recurse           | Find a file or folder starting with 'build'
-| grep -Rin "sometext" --include="*.cs" |Get-ChildItem -Recurse -Filter *.cs <br> \| Select-String -Pattern "sometext" | Recursively case-insensitive search for text in files
-| curl https://github.com         | Invoke-RestMethod https://github.com    | Transfer data to or from the web
-
-### Recommended Training and Reading
-
-- Microsoft Virtual Academy: [Getting Started with PowerShell][getstarted-with-powershell]
-- [Why Learn PowerShell][why-learn-powershell] by Ed Wilson
-- PowerShell Web Docs: [Basic cookbooks][basic-cookbooks]
-- [The Guide to Learning PowerShell][ebook-from-Idera] by Tobias Weltner
-- [PowerShell-related Videos][channel9-learn-powershell] on Channel 9
-- [PowerShell Quick Reference Guides][quick-reference] by PowerShellMagazine.com
-- [Learn PowerShell Video Library][idera-learn-powershell] from Idera
-- [PowerShell 5 How-To Videos][script-guy-how-to] by Ed Wilson
-- [PowerShell Documentation](https://docs.microsoft.com/powershell)
-- [Interactive learning with PSKoans](https://aka.ms/pskoans)
-
-### Commercial Resources
-
-- [Windows PowerShell in Action][in-action] by [Bruce Payette](https://github.com/brucepay)
-- [Introduction to PowerShell][powershell-intro] from Pluralsight
-- [PowerShell Training and Tutorials][lynda-training] from Lynda.com
-- [Learn Windows PowerShell in a Month of Lunches][learn-win-powershell] by Don Jones and Jeffrey Hicks
-- [Learn PowerShell in a Month of Lunches][learn-powershell] by Travis Plunk (@TravisEz13),
-  Tyler Leonhardt (@tylerleonhardt), Don Jones, and Jeffery Hicks
-
-[in-action]: https://www.amazon.com/Windows-PowerShell-Action-Second-Payette/dp/1935182137
-[powershell-intro]: https://www.pluralsight.com/courses/powershell-intro
-[lynda-training]: https://www.lynda.com/PowerShell-training-tutorials/5779-0.html
-[learn-win-powershell]: https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160
-[learn-powershell]: https://www.manning.com/books/learn-powershell-in-a-month-of-lunches
-
-[getstarted-with-powershell]: https://channel9.msdn.com/Series/GetStartedPowerShell3
-[why-learn-powershell]: https://blogs.technet.microsoft.com/heyscriptingguy/2014/10/18/weekend-scripter-why-learn-powershell/
-[ebook-from-Idera]:https://www.idera.com/resourcecentral/whitepapers/powershell-ebook
-[channel9-learn-powershell]: https://channel9.msdn.com/Search?term=powershell#ch9Search
-[idera-learn-powershell]: https://community.idera.com/database-tools/powershell/video_library/
-[quick-reference]: https://www.powershellmagazine.com/2014/04/24/windows-powershell-4-0-and-other-quick-reference-guides/
-[script-guy-how-to]:https://blogs.technet.microsoft.com/tommypatterson/2015/09/04/ed-wilsons-powershell5-videos-now-on-channel9-2/
-[basic-cookbooks]:https://docs.microsoft.com/powershell/scripting/samples/sample-scripts-for-administration
diff --git a/docs/learning-powershell/create-powershell-scripts.md b/docs/learning-powershell/create-powershell-scripts.md
deleted file mode 100644
index 5f93eb97ab3..00000000000
--- a/docs/learning-powershell/create-powershell-scripts.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# How to Create and Run PowerShell Scripts
-
-You can combine a series of commands in a text file and save it with the file extension '.ps1', and the file will become a PowerShell script.
-This would begin by opening your favorite text editor and pasting in the following example.
-
-```powershell
-# Script to return current IPv4 addresses on a Linux or MacOS host
-$ipInfo = ifconfig | Select-String 'inet'
-$ipInfo = [regex]::matches($ipInfo,"addr:\b(?:\d{1,3}\.){3}\d{1,3}\b") | ForEach-Object value
-foreach ($ip in $ipInfo)
-{
-    $ip.Replace('addr:','')
-}
-```
-
-Then save the file to something memorable, such as .\NetIP.ps1.
-In the future when you need to get the IP addresses for the node, you can simplify this task by executing the script.
-
-```powershell
-.\NetIP.ps1
-10.0.0.1
-127.0.0.1
-```
-
-You can accomplish this same task on Windows.
-
-```powershell
-# One line script to return current IPv4 addresses on a Windows host
-Get-NetIPAddress | Where-Object {$_.AddressFamily -eq 'IPv4'} | ForEach-Object IPAddress
-```
-
-As before, save the file as .\NetIP.ps1 and execute within a PowerShell environment.
-Note: If you are using Windows, make sure you set the PowerShell's execution policy to "RemoteSigned" in this case.
-See [Running PowerShell Scripts Is as Easy as 1-2-3][run-ps] for more details.
-
-```powershell
-NetIP.ps1
-127.0.0.1
-10.0.0.1
-```
-
-## Creating a script that can accomplish the same task on multiple operating systems
-
-If you would like to author one script that will return the IP address across Linux, MacOS, or Windows, you could accomplish this using an IF statement.
-
-```powershell
-# Script to return current IPv4 addresses for Linux, MacOS, or Windows
-$IP = if ($IsLinux -or $IsMacOS)
-{
-    $ipInfo = ifconfig | Select-String 'inet'
-    $ipInfo = [regex]::matches($ipInfo,"addr:\b(?:\d{1,3}\.){3}\d{1,3}\b") | ForEach-Object value
-    foreach ($ip in $ipInfo) {
-        $ip.Replace('addr:','')
-    }
-}
-else
-{
-    Get-NetIPAddress | Where-Object {$_.AddressFamily -eq 'IPv4'} | ForEach-Object IPAddress
-}
-
-# Remove loopback address from output regardless of platform
-$IP | Where-Object {$_ -ne '127.0.0.1'}
-```
-
-[run-ps]:https://www.itprotoday.com/powershell/running-powershell-scripts-easy-1-2-3
diff --git a/docs/learning-powershell/debugging-from-commandline.md b/docs/learning-powershell/debugging-from-commandline.md
deleted file mode 100644
index 1aaab218256..00000000000
--- a/docs/learning-powershell/debugging-from-commandline.md
+++ /dev/null
@@ -1,173 +0,0 @@
-# Debugging in PowerShell Command-line
-
-As we know, we can debug PowerShell code via GUI tools like [Visual Studio Code](https://docs.microsoft.com/powershell/scripting/dev-cross-plat/vscode/using-vscode#debugging-with-visual-studio-code). In addition, we can
-directly perform debugging within the PowerShell command-line session by using the PowerShell debugger cmdlets. This document demonstrates how to use the cmdlets for the PowerShell command-line debugging. We will cover the following topics:
-setting a debug breakpoint on a line of code and on a variable.
-
-Let's use the following code snippet as our sample script.
-
-```powershell
-# Convert Fahrenheit to Celsius
-function ConvertFahrenheitToCelsius([double] $fahrenheit)
-{
-$celsius = $fahrenheit - 32
-$celsius = $celsius / 1.8
-$celsius
-}
-
-$fahrenheit = Read-Host 'Input a temperature in Fahrenheit'
-$result =[int](ConvertFahrenheitToCelsius($fahrenheit))
-Write-Host "$result Celsius"
-```
-
-## Setting a Breakpoint on a Line
-
-- Open a [PowerShell editor](README.md#powershell-editor)
-- Save the above code snippet to a file. For example, "test.ps1"
-- Go to your command-line PowerShell
-- Clear existing breakpoints if any
-
-```powershell
- PS /home/jen/debug>Get-PSBreakpoint | Remove-PSBreakpoint
-```
-
-- Use **Set-PSBreakpoint** cmdlet to set a debug breakpoint. In this case, we will set it to line 5
-
-```powershell
-PS /home/jen/debug>Set-PSBreakpoint -Line 5 -Script ./test.ps1
-
-ID Script             Line       Command          Variable          Action
--- ------             ----       -------          --------          ------
- 0 test.ps1              5
-```
-
-- Run the script "test.ps1". As we have set a breakpoint, it is expected the program will break into the debugger at the line 5.
-
-```powershell
-
-PS /home/jen/debug> ./test.ps1
-Input a temperature in Fahrenheit: 80
-Hit Line breakpoint on '/home/jen/debug/test.ps1:5'
-
-At /home/jen/debug/test.ps1:5 char:1
-+ $celsius = $celsius / 1.8
-+ ~~~~~~~~~~~~~~~~~~~~~~~~~
-[DBG]: PS /home/jen/debug>>
-```
-
-- The PowerShell prompt now has the prefix **[DBG]:** as you may have noticed. This means
- we have entered into the debug mode. To watch the variables like $celsius, simply type **$celsius** as below.
-- To exit from the debugging, type **q**
-- To get help for the debugging commands, simply type **?**. The following is an example of debugging output.
-
-```PowerShell
-[DBG]: PS /home/jen/debug>> $celsius
-48
-[DBG]: PS /home/jen/debug>> $fahrenheit
-80
-[DBG]: PS /home/jen/debug>> ?
-
- s, stepInto         Single step (step into functions, scripts, etc.)
- v, stepOver         Step to next statement (step over functions, scripts, etc.)
- o, stepOut          Step out of the current function, script, etc.
-
- c, continue         Continue operation
- q, quit             Stop operation and exit the debugger
- d, detach           Continue operation and detach the debugger.
-
- k, Get-PSCallStack  Display call stack
-
- l, list             List source code for the current script.
-                     Use "list" to start from the current line, "list <m>"
-                     to start from line <m>, and "list <m> <n>" to list <n>
-                     lines starting from line <m>
-
- <enter>             Repeat last command if it was stepInto, stepOver or list
-
- ?, h                displays this help message.
-
-
-For instructions about how to customize your debugger prompt, type "help about_prompt".
-
-[DBG]: PS /home/jen/debug>> s
-At PS /home/jen/debug/test.ps1:6 char:1
-+ $celsius
-+ ~~~~~~~~
-[DBG]: PS /home/jen/debug>> $celsius
-26.6666666666667
-[DBG]: PS /home/jen/debug>> $fahrenheit
-80
-
-[DBG]: PS /home/jen/debug>> q
-PS /home/jen/debug>
-
-```
-
-## Setting a Breakpoint on a Variable
-- Clear existing breakpoints if there are any
-
-```powershell
- PS /home/jen/debug>Get-PSBreakpoint | Remove-PSBreakpoint
- ```
-
-- Use **Set-PSBreakpoint** cmdlet to set a debug breakpoint. In this case, we set it to line 5
-
-```powershell
-
- PS /home/jen/debug>Set-PSBreakpoint -Variable "celsius" -Mode write -Script ./test.ps1
-
-```
-
-- Run the script "test.ps1"
-
-  Once hit the debug breakpoint, we can type **l** to list the source code that debugger is currently executing. As we can see line 3 has an asterisk at the front, meaning that's the line the program is currently executing and broke into the debugger as illustrated below.
-- Type **q** to exit from the debugging mode. The following is an example of debugging output.
-
-```powershell
-./test.ps1
-Input a temperature in Fahrenheit: 80
-Hit Variable breakpoint on '/home/jen/debug/test.ps1:$celsius' (Write access)
-
-At /home/jen/debug/test.ps1:3 char:1
-+ $celsius = $fahrenheit - 32
-+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-[DBG]: PS /home/jen/debug>> l
-
-
-    1:  function ConvertFahrenheitToCelsius([double] $fahrenheit)
-    2:  {
-    3:* $celsius = $fahrenheit - 32
-    4:  $celsius = $celsius / 1.8
-    5:  $celsius
-    6:  }
-    7:
-    8:  $fahrenheit = Read-Host 'Input a temperature in Fahrenheit'
-    9:  $result =[int](ConvertFahrenheitToCelsius($fahrenheit))
-   10:  Write-Host "$result Celsius"
-
-
-[DBG]: PS /home/jen/debug>> $celsius
-48
-[DBG]: PS /home/jen/debug>> v
-At /home/jen/debug/test.ps1:4 char:1
-+ $celsius = $celsius / 1.8
-+ ~~~~~~~~~~~~~~~~~~~~~~~~~
-[DBG]: PS /home/jen/debug>> v
-Hit Variable breakpoint on '/home/jen/debug/test.ps1:$celsius' (Write access)
-
-At /home/jen/debug/test.ps1:4 char:1
-+ $celsius = $celsius / 1.8
-+ ~~~~~~~~~~~~~~~~~~~~~~~~~
-[DBG]: PS /home/jen/debug>> $celsius
-26.6666666666667
-[DBG]: PS /home/jen/debug>> q
-PS /home/jen/debug>
-
-```
-
-Now you know the basics of the PowerShell debugging from PowerShell command-line. For further learning, read the following articles.
-
-## More Reading
-
-- [about_Debuggers](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_debuggers)
-- [PowerShell Debugging](https://blogs.technet.microsoft.com/heyscriptingguy/tag/debugging/)
diff --git a/docs/learning-powershell/powershell-beginners-guide.md b/docs/learning-powershell/powershell-beginners-guide.md
deleted file mode 100644
index 2017b191066..00000000000
--- a/docs/learning-powershell/powershell-beginners-guide.md
+++ /dev/null
@@ -1,339 +0,0 @@
-# PowerShell Beginner’s Guide
-
-If you are new to PowerShell, this document will walk you through a few examples to give you some basic ideas of PowerShell.
-We recommend that you open a PowerShell console/session and type along with the instructions in this document to get most out of this exercise.
-
-## Launch PowerShell Console/Session
-
-First you need to launch a PowerShell session by following the [Installing PowerShell Guide](./README.md#installing-powershell).
-
-## Getting Familiar with PowerShell Commands
-
-In this section, you will learn how to
-
-- create a file, delete a file and change file directory
-- discover what version of PowerShell you are currently using
-- exit a PowerShell session
-- get help if you needed
-- find syntax of PowerShell cmdlets
-- and more
-
-As mentioned above, PowerShell commands are designed to have Verb-Noun structure, for instance `Get-Process`, `Set-Location`, `Clear-Host`, etc.
-Let’s exercise some of the basic PowerShell commands, also known as **cmdlets**.
-
-Please note that we will use the PowerShell prompt sign **PS />** as it appears on Linux in the following examples.
-It is shown as `PS C:\>` on  Windows.
-
-1. `Get-Process`: Gets the processes that are running on the local computer or a remote computer.
-
-    By default, you will get data back similar to the following:
-
-    ```powershell
-    PS /> Get-Process
-
-    Handles   NPM(K)    PM(K)     WS(K)     CPU(s)     Id    ProcessName
-    -------  ------     -----     -----     ------     --    -----------
-        -      -          -           1      0.012     12    bash
-        -      -          -          21     20.220    449    powershell
-        -      -          -          11     61.630   8620    code
-        -      -          -          74    403.150   1209    firefox
-
-    …
-    ```
-
-    Only interested in the instance of Firefox process that is running on your computer?
-
-    Try this:
-
-    ```powershell
-    PS /> Get-Process -Name firefox
-
-    Handles   NPM(K)    PM(K)     WS(K)    CPU(s)     Id   ProcessName
-    -------  ------     -----     -----    ------     --   -----------
-        -      -          -          74   403.150   1209   firefox
-
-    ```
-
-    Want to get back more than one process?
-    Then just specify process names and separate them with commas.
-
-    ```powershell
-    PS /> Get-Process -Name firefox, powershell
-    Handles   NPM(K)    PM(K)     WS(K)    CPU(s)     Id   ProcessName
-    -------  ------     -----     -----    ------     --   -----------
-        -      -          -          74   403.150   1209   firefox
-        -      -          -          21    20.220    449   powershell
-
-    ```
-
-1. `Clear-Host`: Clears the display in the host program.
-
-    ```powershell
-    PS /> Get-Process
-    PS /> Clear-Host
-    ```
-
-    Type too much just for clearing the screen?
-
-    Here is how the alias can help.
-
-1. `Get-Alias`: Gets the aliases for the current session.
-
-    ```powershell
-    Get-Alias
-
-    CommandType     Name
-    -----------     ----
-    …
-
-    Alias           cd -> Set-Location
-    Alias           cls -> Clear-Host
-    Alias           clear -> Clear-Host
-    Alias           copy -> Copy-Item
-    Alias           dir -> Get-ChildItem
-    Alias           gc -> Get-Content
-    Alias           gmo -> Get-Module
-    Alias           ri -> Remove-Item
-    Alias           type -> Get-Content
-    …
-    ```
-
-    As you can see `cls` or `clear` is an alias of `Clear-Host`.
-
-    Now try it:
-
-    ```powershell
-    PS /> Get-Process
-    PS /> cls
-    ```
-
-1. `cd -> Set-Location`: Sets the current working location to a specified location.
-
-    ```powershell
-    PS /> Set-Location /home
-    PS /home>
-    ```
-
-1. `dir -> Get-ChildItem`: Gets the items and child items in one or more specified locations.
-
-    ```powershell
-    # Get all files under the current directory:
-    PS /> Get-ChildItem
-
-    # Get all files under the current directory as well as its subdirectories:
-    PS /> cd $home
-    PS /home/jen> dir -Recurse
-
-    # List all files with "txt" file extension.
-    PS /> cd $home
-    PS /home/jen> dir –Path *.txt -Recurse
-    ```
-
-1. `New-Item`: Creates a new item.
-
-    ```powershell
-    # An empty file is created if you type the following:
-    PS /home/jen> New-Item -Path ./test.txt
-
-
-        Directory: /home/jen
-
-
-    Mode                LastWriteTime         Length  Name
-    ----                -------------         ------  ----
-    -a----         7/7/2016   7:17 PM              0  test.txt
-    ```
-
-    You can use the `-Value` parameter to add some data to your file.
-
-    For example, the following command adds the phrase `Hello world!` as a file content to the `test.txt`.
-
-    Because the test.txt file exists already, we use `-Force` parameter to replace the existing content.
-
-    ```powershell
-    PS /home/jen> New-Item -Path ./test.txt -Value "Hello world!" -Force
-
-        Directory: /home/jen
-
-
-    Mode                LastWriteTime         Length  Name
-    ----                -------------         ------  ----
-    -a----         7/7/2016   7:19 PM             24  test.txt
-
-    ```
-
-    There are other ways to add some data to a file.
-
-    For example, you can use `Set-Content` to set the file contents:
-
-    ```powershell
-    PS /home/jen>Set-Content -Path ./test.txt -Value "Hello world again!"
-    ```
-
-    Or simply use `>` as below:
-
-    ```powershell
-    # create an empty file
-    "" > test.txt
-
-    # set "Hello world!" as content of test.txt file
-    "Hello world!!!" > test.txt
-
-    ```
-
-    The pound sign `#` above is used for comments in PowerShell.
-
-1. `type -> Get-Content`: Gets the content of the item at the specified location.
-
-    ```powershell
-    PS /home/jen> Get-Content -Path ./test.txt
-    PS /home/jen> type -Path ./test.txt
-
-    Hello world again!
-    ```
-
-1. `del -> Remove-Item`: Deletes the specified items.
-
-    This cmdlet will delete the file `/home/jen/test.txt`:
-
-    ```powershell
-    PS /home/jen> Remove-Item ./test.txt
-    ```
-
-1. `$PSVersionTable`: Displays the version of PowerShell you are currently using.
-
-    Type `$PSVersionTable` in your PowerShell session, you will see something like below.
-    "PSVersion" indicates the PowerShell version that you are using.
-
-    ```powershell
-    Name                           Value
-    ----                           -----
-    PSVersion                      6.0.0-alpha
-    PSEdition                      Core
-    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
-    BuildVersion                   3.0.0.0
-    GitCommitId                    v6.0.0-alpha.12
-    CLRVersion
-    WSManStackVersion              3.0
-    PSRemotingProtocolVersion      2.3
-    SerializationVersion           1.1.0.1
-
-    ```
-
-1. `Exit`: To exit the PowerShell session, type `exit`.
-
-    ```powershell
-    exit
-    ```
-
-## Need Help?
-
-The most important command in PowerShell is possibly the `Get-Help`, which allows you to quickly learn PowerShell without having to search around the internet.
-
-The `Get-Help` cmdlet also shows you how PowerShell commands work with examples.
-
-It shows the syntax and other technical information of the `Get-Process` cmdlet.
-
-```powershell
-PS /> Get-Help -Name Get-Process
-```
-
-It displays the examples how to use the `Get-Process` cmdlet.
-
-```powershell
-PS />Get-Help -Name Get-Process -Examples
-```
-
-If you use **-Full** parameter, for example, `Get-Help -Name Get-Process -Full`, it will display more technical information.
-
-## Discover Commands Available on Your System
-
-You want to discover what PowerShell cmdlets available on your system? Just run `Get-Command` as below:
-
-```powershell
-PS /> Get-Command
-```
-
-If you want to know whether a particular cmdlet exists on your system, you can do something like below:
-
-```powershell
-PS /> Get-Command Get-Process
-```
-
-If you want to know the syntax of `Get-Process` cmdlet, type:
-
-```powershell
-PS /> Get-Command Get-Process -Syntax
-```
-
-If you want to know how to use the `Get-Process`, type:
-
-```powershell
-PS /> Get-Help Get-Process -Example
-```
-
-## PowerShell Pipeline `|`
-
-Sometimes when you run Get-ChildItem or "dir", you want to get a list of files and folders in a descending order.
-To achieve that, type:
-
-```powershell
-PS /home/jen> dir | Sort-Object -Descending
-```
-
-Say you want to get the largest file in a directory
-
-```powershell
-PS /home/jen> dir | Sort-Object -Property Length -Descending | Select-Object -First 1
-
-
-    Directory: /home/jen
-
-
-Mode                LastWriteTime       Length  Name
-----                -------------       ------  ----
--a----        5/16/2016   1:15 PM        32972  test.log
-
-```
-
-## How to Create and Run PowerShell scripts
-
-You can use Visual Studio Code or your favorite editor to create a PowerShell script and save it with a `.ps1` file extension.
-For more details, see [Create and Run PowerShell Script Guide][create-run-script]
-
-## Recommended Training and Reading
-
-- Video: [Get Started with PowerShell][remoting] from Channel9
-- [eBooks from PowerShell.org](https://leanpub.com/u/devopscollective)
-- [eBooks List][ebook-list] by Martin Schvartzman
-- [Tutorial from MVP][tutorial]
-- Script Guy blog: [The best way to Learn PowerShell][to-learn]
-- [Understanding PowerShell Module][ps-module]
-- [How and When to Create PowerShell Module][create-ps-module] by Adam Bertram
-- Video: [PowerShell Remoting in Depth][in-depth] from Channel9
-- [PowerShell Basics: Remote Management][remote-mgmt] from ITPro
-- [Running Remote Commands][remote-commands] from PowerShell Web Docs
-- [Samples for Writing a PowerShell Script Module][examples-ps-module]
-- [Writing a PowerShell module in C#][writing-ps-module]
-- [Examples of Cmdlets Code][sample-code]
-
-## Commercial Resources
-
-- [Windows PowerShell in Action][in-action] by Bruce Payette
-- [Windows PowerShell Cookbook][cookbook] by Lee Holmes
-
-[in-action]: https://www.amazon.com/Windows-PowerShell-Action-Bruce-Payette/dp/1633430294
-[cookbook]: http://shop.oreilly.com/product/9780596801519.do
-[ebook-list]: https://martin77s.wordpress.com/2014/05/26/free-powershell-ebooks/
-[tutorial]: https://www.computerperformance.co.uk/powershell/index-13/
-[to-learn]:https://blogs.technet.microsoft.com/heyscriptingguy/2015/01/04/weekend-scripter-the-best-ways-to-learn-powershell/
-[ps-module]:https://docs.microsoft.com/powershell/scripting/developer/module/understanding-a-windows-powershell-module
-[create-ps-module]:https://www.business.com/articles/powershell-modules/
-[remoting]:https://channel9.msdn.com/Series/GetStartedPowerShell3/06
-[in-depth]: https://channel9.msdn.com/events/MMS/2012/SV-B406
-[remote-mgmt]:https://www.itprotoday.com/powershell/powershell-basics-remote-management
-[remote-commands]:https://docs.microsoft.com/powershell/scripting/learn/remoting/running-remote-commands
-[examples-ps-module]:https://docs.microsoft.com/powershell/scripting/developer/module/how-to-write-a-powershell-script-module
-[writing-ps-module]:https://www.powershellmagazine.com/2014/03/18/writing-a-powershell-module-in-c-part-1-the-basics/
-[sample-code]:https://docs.microsoft.com/powershell/scripting/developer/cmdlet/examples-of-cmdlet-code
-[create-run-script]:./create-powershell-scripts.md
diff --git a/docs/learning-powershell/working-with-powershell-objects.md b/docs/learning-powershell/working-with-powershell-objects.md
deleted file mode 100644
index ab127483cfe..00000000000
--- a/docs/learning-powershell/working-with-powershell-objects.md
+++ /dev/null
@@ -1,125 +0,0 @@
-# Working with PowerShell Objects
-
-When cmdlets are executed in PowerShell, the output is an Object, as opposed to only returning text.
-This provides the ability to store information as properties.
-As a result, handling large amounts of data and getting only specific properties is a trivial task.
-
-As a simple example, the following function retrieves information about storage Devices on a Linux or MacOS operating system platform.
-This is accomplished by parsing the output of an existing command, *parted -l* in administrative context, and creating an object from the raw text by using the *New-Object* cmdlet.
-
-```powershell
-function Get-DiskInfo
-{
-    $disks = sudo parted -l | Select-String "Disk /dev/sd*" -Context 1,0
-    $diskinfo = @()
-    foreach ($disk in $disks) {
-        $diskline1 = $disk.ToString().Split("`n")[0].ToString().Replace('  Model: ','')
-        $diskline2 = $disk.ToString().Split("`n")[1].ToString().Replace('> Disk ','')
-        $i = New-Object psobject -Property @{'Friendly Name' = $diskline1; Device=$diskline2.Split(': ')[0]; 'Total Size'=$diskline2.Split(':')[1]}
-        $diskinfo += $i
-    }
-    $diskinfo
-}
-```
-
-Execute the function and store the results as a variable.
-Now retrieve the value of the variable.
-The results are formatted as a table with the default view.
-
-*Note: in this example, the disks are virtual disks in a Microsoft Azure virtual machine.*
-
-```powershell
-PS /home/psuser> $d = Get-DiskInfo
-[sudo] password for psuser:
-PS /home/psuser> $d
-
-Friendly Name            Total Size Device
--------------            ---------- ------
-Msft Virtual Disk (scsi)  31.5GB    /dev/sda
-Msft Virtual Disk (scsi)  145GB     /dev/sdb
-
-```
-
-Passing the variable down the pipeline to *Get-Member* reveals available methods and properties.
-This is because the value of *$d* is not just text output.
-The value is actually an array of .Net objects with methods and properties.
-The properties include Device, Friendly Name, and Total Size.
-
-```powershell
-PS /home/psuser> $d | Get-Member
-
-
-   TypeName: System.Management.Automation.PSCustomObject
-
-Name          MemberType   Definition
-----          ----------   ----------
-Equals        Method       bool Equals(System.Object obj)
-GetHashCode   Method       int GetHashCode()
-GetType       Method       type GetType()
-ToString      Method       string ToString()
-Device        NoteProperty string Device=/dev/sda
-Friendly Name NoteProperty string Friendly Name=Msft Virtual Disk (scsi)
-Total Size    NoteProperty string Total Size= 31.5GB
-```
-
-To confirm, we can call the GetType() method interactively from the console.
-
-```powershell
-PS /home/psuser> $d.GetType()
-
-IsPublic IsSerial Name                                     BaseType
--------- -------- ----                                     --------
-True     True     Object[]                                 System.Array
-```
-
-To index in to the array and return only specific objects, use the square brackets.
-
-```powershell
-PS /home/psuser> $d[0]
-
-Friendly Name            Total Size Device
--------------            ---------- ------
-Msft Virtual Disk (scsi)  31.5GB    /dev/sda
-
-PS /home/psuser> $d[0].GetType()
-
-IsPublic IsSerial Name                                     BaseType
--------- -------- ----                                     --------
-True     False    PSCustomObject                           System.Object
-```
-
-To return a specific property, the property name can be called interactively from the console.
-
-```powershell
-PS /home/psuser> $d.Device
-/dev/sda
-/dev/sdb
-```
-
-To output a view of the information other than default, such as a view with only specific properties selected, pass the value to the *Select-Object* cmdlet.
-
-```powershell
-PS /home/psuser> $d | Select-Object Device, 'Total Size'
-
-Device   Total Size
-------   ----------
-/dev/sda  31.5GB
-/dev/sdb  145GB
-```
-
-Finally, the example below demonstrates use of the *ForEach-Object* cmdlet to iterate through the array and manipulate the value of a specific property of each object.
-In this case the Total Size property, which was given in Gigabytes, is changed to Megabytes.
-Alternatively, index in to a position in the array as shown below in the third example.
-
-```powershell
-PS /home/psuser> $d | ForEach-Object 'Total Size'
- 31.5GB
- 145GB
-
-PS /home/psuser> $d | ForEach-Object {$_.'Total Size' / 1MB}
-32256
-148480
-
-PS /home/psuser> $d[1].'Total Size' / 1MB
-148480
-```
diff --git a/docs/maintainers/README.md b/docs/maintainers/README.md
index 0c28e2cc9de..ebba4b02258 100644
--- a/docs/maintainers/README.md
+++ b/docs/maintainers/README.md
@@ -6,8 +6,8 @@ One of their primary responsibilities is merging pull requests after all require
 They have [write access](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization) to the PowerShell repositories which gives them the power to:
 
 1. `git push` to the official PowerShell repository
-1. Merge [pull requests](https://www.thinkful.com/learn/github-pull-request-tutorial/)
-1. Assign labels, milestones, and people to [issues](https://guides.github.com/features/issues/) and [pull requests](https://www.thinkful.com/learn/github-pull-request-tutorial/)
+1. Merge [pull requests](https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+1. Assign labels, milestones, and people to [issues](https://guides.github.com/features/issues/) and [pull requests](https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
 
 ## Table of Contents
 
@@ -15,7 +15,6 @@ They have [write access](https://docs.github.com/en/free-pro-team@latest/github/
 - [Repository Maintainer Responsibilities](#repository-maintainer-responsibilities)
 - [Issue Management Process](#issue-management-process)
 - [Pull Request Workflow](#pull-request-workflow)
-    - [Abandoned Pull Requests](#abandoned-pull-requests)
 - [Becoming a Repository Maintainer](#becoming-a-repository-maintainer)
 
 ## Current Repository Maintainers
@@ -33,7 +32,7 @@ They have [write access](https://docs.github.com/en/free-pro-team@latest/github/
 
 <!-- please keep in alphabetical order -->
 
-- Andy Schwartzmeyer ([andschwa](https://github.com/andschwa))
+- Andy Jordan ([andyleejordan](https://github.com/andyleejordan))
 - Jason Shirk ([lzybkr](https://github.com/lzybkr))
 - Mike Richmond ([mirichmo](https://github.com/mirichmo))
 - Sergei Vorobev ([vors](https://github.com/vors))
@@ -44,6 +43,7 @@ Repository Maintainers enable rapid contributions while maintaining a high level
 
 If you are a Repository Maintainer, you:
 
+1. **MUST** abide by the [Code of Conduct](../../CODE_OF_CONDUCT.md) and report suspected violations to the [PowerShell Committee][ps-committee]
 1. **MUST** ensure that each contributor has signed a valid Microsoft Contributor License Agreement (CLA)
 1. **MUST** verify compliance with any third party code license terms (e.g., requiring attribution, etc.) if the contribution contains third party code.
 1. **MUST** make sure that [any change requiring approval from the PowerShell Committee](../community/governance.md#changes-that-require-an-rfc) has gone through the proper [RFC][RFC-repo] or approval process
@@ -96,10 +96,11 @@ At any point in time, the existing Repository Maintainers can unanimously nomina
 Nominations are brought to the PowerShell Committee to understand the reasons and justification.
 A simple majority of the PowerShell Committee is required to veto the nomination.
 When a nominee has been approved, a PR will be submitted by a current Maintainer to update this document to add the nominee's name to
-the [Current Repository Maintainers](#Current-Repository-Maintainers) with justification as the description of the PR to serve as the public announcement.
+the [Current Repository Maintainers](#current-repository-maintainers) with justification as the description of the PR to serve as the public announcement.
 
 [RFC-repo]: https://github.com/PowerShell/PowerShell-RFC
 [ci-system]: ../testing-guidelines/testing-guidelines.md#ci-system
 [issue-management]: issue-management.md
 [CONTRIBUTING]: ../../.github/CONTRIBUTING.md
 [best-practice]: best-practice.md
+[ps-committee]: ../community/governance.md#powershell-committee
diff --git a/docs/maintainers/issue-management.md b/docs/maintainers/issue-management.md
index 4021d44c82a..0cc8eb00e37 100644
--- a/docs/maintainers/issue-management.md
+++ b/docs/maintainers/issue-management.md
@@ -7,6 +7,8 @@ first follow the [vulnerability issue reporting policy](../../.github/SECURITY.m
 
 ## Long-living issue labels
 
+Issue labels for PowerShell/PowerShell can be found [here](https://github.com/powershell/powershell/labels).
+
 ### Issue and PR Labels
 
 Issues are opened for many different reasons.
@@ -37,32 +39,35 @@ When an issue is resolved, the following labels are used to describe the resolut
 
 ### Feature areas
 
-These labels describe what feature area of PowerShell that an issue affects:
+These labels describe what feature area of PowerShell that an issue affects.
+Those labels denoted by `WG-*` are owned by a Working Group (WG) defined
+[here](../community/working-group-definitions.md):
 
-* `Area-Build`: build issues
+* `Area-Maintainers-Build`: build issues
 * `Area-Cmdlets-Core`: cmdlets in the Microsoft.PowerShell.Core module
 * `Area-Cmdlets-Utility`: cmdlets in the Microsoft.PowerShell.Utility module
 * `Area-Cmdlets-Management`: cmdlets in the Microsoft.PowerShell.Management module
-* `Area-Console`: the console experience
-* `Area-Debugging`: debugging PowerShell script
-* `Area-Demo`: a demo or sample
 * `Area-Documentation`: PowerShell *repo* documentation issues, general PowerShell doc issues go [here](https://github.com/PowerShell/PowerShell-Docs/issues)
 * `Area-DSC`: DSC related issues
-* `Area-Engine`: core PowerShell engine, interpreter, runtime
-* `Area-HelpSystem`: anything related to the help infrastructure and formatting of help
-* `Area-Intellisense`: tab completion
-* `Area-Language`: parser, language semantics
-* `Area-OMI`: OMI
-* `Area-PackageManagement`: PackageManagement related issues
-* `Area-Performance`: a performance issue
-* `Area-Portability`: anything affecting script portability
 * `Area-PowerShellGet`: PowerShellGet related issues
-* `Area-Providers`: PowerShell providers such as FileSystem, Certificates, Registry, etc...
-* `Area-PSReadline`: PSReadline related issues
-* `Area-Remoting`: PSRP issues with any transport layer
-* `Area-Security`: security related areas such as [JEA](https://github.com/powershell/JEA)
 * `Area-SideBySide`: side by side support
-* `Area-Test`: issues in a test or in test infrastructure
+* `WG-DevEx-Portability`: anything related to authoring cross-platform or cross-architecture
+  modules, cmdlets, and scripts
+* `WG-DevEx-SDK`: anything related to hosting PowerShell as a runtime, PowerShell's APIs,
+   PowerShell Standard, or the development of modules and cmdlets
+* `WG-Engine`: core PowerShell engine, interpreter, and runtime
+* `WG-Engine-Performance`: core PowerShell engine, interpreter, and runtime performance
+* `WG-Engine-Providers`: built-in PowerShell providers such as FileSystem, Certificates,
+   Registry, etc. (or anything returned by `Get-PSProvider`)
+* `WG-Interactive-Console`: the console experience
+* `WG-Interactive-Debugging`: debugging PowerShell script
+* `WG-Interactive-HelpSystem`: anything related to the help infrastructure and formatting of help
+* `WG-Interactive-IntelliSense`: tab completion
+* `WG-Interactive-PSReadline`: PSReadline related issues
+* `WG-Language`: parser, language semantics
+* `WG-Quality-Test`: issues in a test or in test infrastructure
+* `WG-Remoting`: PSRP issues with any transport layer
+* `WG-Security`: security related areas such as [JEA](https://github.com/powershell/JEA)
 
 ### Operating Systems
 
diff --git a/docs/maintainers/releasing.md b/docs/maintainers/releasing.md
index e3ac1998f77..ccb4e5529d7 100644
--- a/docs/maintainers/releasing.md
+++ b/docs/maintainers/releasing.md
@@ -21,20 +21,15 @@ This is to help track the release preparation work.
    - Sign the MSI packages and DEB/RPM packages.
    - Install and verify the packages.
 1. Update documentation, scripts and Dockerfiles
-   - Summarize the change log for the release. It should be reviewed by PM(s) to make it more user-friendly.
-   - Update [CHANGELOG.md](../../CHANGELOG.md) with the finalized change log draft.
+   - Summarize the changelog for the release. It should be reviewed by PM(s) to make it more user-friendly.
+   - Update [CHANGELOG.md](../../CHANGELOG.md) with the finalized changelog draft.
    - Update other documents and scripts to use the new package names and links.
 1. Verify the release Dockerfiles.
 1. [Create NuGet packages](#nuget-packages) and publish them to [powershell-core feed][ps-core-feed].
 1. [Create the release tag](#release-tag) and push the tag to `PowerShell/PowerShell` repository.
-1. Create the draft and publish the release in Github.
+1. Create the draft and publish the release in GitHub.
 1. Merge the `release-<Release Tag>` branch to `master` in `powershell/powershell` and delete the `release-<Release Tag>` branch.
 1. Publish Linux packages to Microsoft YUM/APT repositories.
-1. Trigger the release docker builds for Linux and Windows container images.
-   - Linux: push a branch named `docker` to `powershell/powershell` repository to trigger the build at [powershell docker hub](https://hub.docker.com/r/microsoft/powershell/builds/).
-     Delete the `docker` branch once the builds succeed.
-   - Windows: queue a new build in `PowerShell Windows Docker Build` on VSTS.
-1. Verify the generated docker container images.
 1. [Update the homebrew formula](#homebrew) for the macOS package.
    This task usually will be taken care of by the community,
    so we can wait for one day or two and see if the homebrew formula has already been updated,
@@ -62,26 +57,29 @@ It **requires** that PowerShell Core has been built via `Start-PSBuild` from the
 
 #### Windows
 
-The `Start-PSPackage` function delegates to `New-MSIPackage` which creates a Windows Installer Package of PowerShell.
+`Start-PSPackage` supports creating ZIP and MSIX packages for Windows.
+When called without `-Type` on Windows, it defaults to creating both ZIP and MSIX packages.
 The packages *must* be published in release mode,
 so make sure `-Configuration Release` is specified when running `Start-PSBuild`.
 
-It uses the Windows Installer XML Toolset (WiX) to generate a MSI package,
-which copies the output of the published PowerShell files to a version-specific folder in Program Files,
-and installs a shortcut in the Start Menu.
-It can be uninstalled through `Programs and Features`.
-
 Note that PowerShell is always self-contained, thus using it does not require installing it.
-The output of `Start-PSBuild` includes a `powershell.exe` executable which can simply be launched.
+The output of `Start-PSBuild` includes a `pwsh.exe` executable which can simply be launched.
 
 #### Linux / macOS
 
 The `Start-PSPackage` function delegates to `New-UnixPackage`.
-It relies on the [Effing Package Management][fpm] project,
-which makes building packages for any (non-Windows) platform a breeze.
-Similarly, the PowerShell man-page is generated from the Markdown-like file
+
+For **Linux** (Debian-based distributions), it relies on the [Effing Package Management][fpm] project,
+which makes building packages a breeze.
+
+For **macOS**, it uses native packaging tools (`pkgbuild` and `productbuild`) from Xcode Command Line Tools,
+eliminating the need for Ruby or fpm.
+
+For **Linux** (Red Hat-based distributions), it uses `rpmbuild` directly.
+
+The PowerShell man-page is generated from the Markdown-like file
 [`assets/pwsh.1.ronn`][man] using [Ronn][].
-The function `Start-PSBootstrap -Package` will install both these tools.
+The function `Start-PSBootstrap -Package` will install these tools.
 
 To modify any property of the packages, edit the `New-UnixPackage` function.
 Please also refer to the function for details on the package properties
@@ -104,7 +102,7 @@ this package will contain actual PowerShell bits
 (i.e. it is not a meta-package).
 These bits are installed to `/opt/microsoft/powershell/6.0.0-alpha.8/`,
 where the version will change with each update
-(and is the pre-release version).
+(and is the prerelease version).
 On macOS, the prefix is `/usr/local`,
 instead of `/opt/microsoft` because it is derived from BSD.
 
@@ -136,7 +134,7 @@ Without `-Name` specified, the primary `powershell`
 package will instead be created.
 
 [fpm]: https://github.com/jordansissel/fpm
-[man]: ../../assets/pwsh.1.ronn
+[man]: ../../assets/manpage/pwsh.1.ronn
 [ronn]: https://github.com/rtomayko/ronn
 
 ### Build and Packaging Examples
@@ -167,13 +165,13 @@ Start-PSBuild -Clean -CrossGen -PSModuleRestore -Runtime win7-x64 -Configuration
 ```powershell
 # Create packages for v6.0.0-beta.1 release targeting Windows universal package.
 # 'win7-x64' / 'win7-x86' should be used for -WindowsRuntime.
-Start-PSPackage -Type msi -ReleaseTag v6.0.0-beta.1 -WindowsRuntime 'win7-x64'
 Start-PSPackage -Type zip -ReleaseTag v6.0.0-beta.1 -WindowsRuntime 'win7-x64'
+Start-PSPackage -Type msix -ReleaseTag v6.0.0-beta.1 -WindowsRuntime 'win7-x64'
 ```
 
 ## NuGet Packages
 
-The NuGet packages for hosting PowerShell for Windows and non-Windows are being built in our release build pipeline.
+The NuGet packages for hosting PowerShell for Windows and non-Windows are being built-in our release build pipeline.
 The assemblies from the individual Windows and Linux builds are consumed and packed into NuGet packages.
 These are then released to [powershell-core feed][ps-core-feed].
 
@@ -190,7 +188,7 @@ we create an [annotated tag][tag] that names the release.
 An annotated tag has a message (like a commit),
 and is *not* the same as a lightweight tag.
 Create one with `git tag -a v6.0.0-alpha.7 -m <message-here>`,
-and use the release change logs as the message.
+and use the release changelogs as the message.
 Our convention is to prepend the `v` to the semantic version.
 The summary (first line) of the annotated tag message should be the full release title,
 e.g. 'v6.0.0-alpha.7 release of PowerShellCore'.
@@ -215,30 +213,10 @@ There are 2 homebrew formulas: main and preview.
 
 Update it on stable releases.
 
-1. Make sure that you have [homebrew cask](https://caskroom.github.io/).
-1. `brew update`
-1. `cd /usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask/Casks`
-1. Edit `./powershell.rb`, reference [file history](https://github.com/vors/homebrew-cask/commits/master/Casks/powershell.rb) for the guidelines:
-    1. Update `version`
-    1. Update `sha256` to the checksum of produced `.pkg` (note lower-case string for the consistent style)
-    1. Update `checkpoint` value. To do that run `brew cask _appcast_checkpoint --calculate 'https://github.com/PowerShell/PowerShell/releases.atom'`
-1. `brew cask style --fix ./powershell.rb`, make sure there are no errors
-1. `brew cask audit --download ./powershell.rb`, make sure there are no errors
-1. `brew cask upgrade powershell`, make sure that powershell was updates successfully
-1. Commit your changes, send a PR to [homebrew-cask](https://github.com/caskroom/homebrew-cask)
+1. Wait for a PR to show up in https://github.com/powershell/homebrew-tap, review and merge it.
 
 ### Preview
 
 Update it on preview releases.
 
-1. Add [homebrew cask versions](https://github.com/Homebrew/homebrew-cask-versions): `brew tap homebrew/cask-versions`
-1. `brew update`
-1. `cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions/Casks`
-1. Edit `./powershell-preview.rb`:
-    1. Update `version`
-    1. Update `sha256` to the checksum of produced `.pkg` (note lower-case string for the consistent style)
-    1. Update `checkpoint` value. To do that run `brew cask _appcast_checkpoint --calculate 'https://github.com/PowerShell/PowerShell/releases.atom'`
-1. `brew cask style --fix ./powershell-preview.rb`, make sure there are no errors
-1. `brew cask audit --download ./powershell-preview.rb`, make sure there are no errors
-1. `brew cask upgrade powershell-preview`, make sure that powershell was updates successfully
-1. Commit your changes, send a PR to [homebrew-cask-versions](https://github.com/Homebrew/homebrew-cask-versions)
+1. Wait for a PR to show up in https://github.com/powershell/homebrew-tap, review and merge it.
diff --git a/docs/testing-guidelines/CodeCoverageAnalysis.md b/docs/testing-guidelines/CodeCoverageAnalysis.md
deleted file mode 100644
index bee669ea747..00000000000
--- a/docs/testing-guidelines/CodeCoverageAnalysis.md
+++ /dev/null
@@ -1,109 +0,0 @@
-# Code coverage analysis for commit [de5f69c](https://codecov.io/gh/PowerShell/PowerShell/tree/de5f69cf942a85839c907f11a29cf9c09f9de8b4/src)
-
-Code coverage runs are enabled on daily Windows builds for PowerShell Core 6.
-The results of the latest build are available at [codecov.io](https://codecov.io/gh/PowerShell/PowerShell)
-
-The goal of this analysis is to find the hot spots of missing coverage.
-The metrics used for selection of these hot spots were: # missing lines and likelihood of code path usage.
-
-## Coverage Status
-
-The following table shows the status for the above commit, dated 2018-11-28
-
-| Assembly | Hit % |
-| -------- |:-----:|
-| Microsoft.Management.Infrastructure.CimCmdlets | 48.18% |
-| Microsoft.PowerShell.Commands.Diagnostics | 47.58% |
-| Microsoft.PowerShell.Commands.Management | 61.06% |
-| Microsoft.PowerShell.Commands.Utility | 70.76% |
-| Microsoft.PowerShell.ConsoleHost | 46.39% |
-| Microsoft.PowerShell.CoreCLR.Eventing | 37.84% |
-| Microsoft.PowerShell.MarkdownRender | 70.68% |
-| Microsoft.PowerShell.Security | 49.36% |
-| Microsoft.WSMan.Management | 62.36% |
-| System.Management.Automation | 63.35% |
-| Microsoft.WSMan.Runtime/WSManSessionOption.cs | 100.00% |
-| powershell/Program.cs | 100.00% |
-
-## Hot Spots with missing coverage
-
-### Microsoft.PowerShell.Commands.Management
-
-- [ ] Add tests for *-Item cmdlets. Especially for literal paths and error cases. [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Lots of resource strings not covered. Will probably get covered when coverage is added for error cases. [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-
-### Microsoft.PowerShell.Commands.Utility
-
-- [ ] Add tests for Debug-Runspace [#4153](https://github.com/PowerShell/PowerShell/issues/4153)
-
-### Microsoft.PowerShell.ConsoleHost
-
-- [ ] Various options, DebugHandler and hosting modes like server, namedpipe etc. [#4155](https://github.com/PowerShell/PowerShell/issues/4155)
-
-### Microsoft.PowerShell.CoreCLR.Eventing
-
-- [ ] Add tests for ETW events. [#4156](https://github.com/PowerShell/PowerShell/issues/4156)
-
-### Microsoft.PowerShell.Security
-
-- [ ] Add tests for *-Acl cmdlets. [#4157](https://github.com/PowerShell/PowerShell/issues/4157)
-- [ ] Add tests for *-AuthenticodeSignature cmdlets. [#4157](https://github.com/PowerShell/PowerShell/issues/4157)
-- [ ] Add coverage to various utility methods under src/Microsoft.PowerShell.Security/security/Utils.cs [#4157](https://github.com/PowerShell/PowerShell/issues/4157)
-
-### Microsoft.WSMan.Management
-
-- [ ] Add tests for WSMan provider [#4158](https://github.com/PowerShell/PowerShell/issues/4158)
-- [ ] Add tests for WSMan cmdlets [#4158](https://github.com/PowerShell/PowerShell/issues/4158)
-- [ ] Add tests for CredSSP [#4158](https://github.com/PowerShell/PowerShell/issues/4158)
-
-### System.Management.Automation
-
-#### CoreCLR
-
-- [ ] Lots of non-windows code can be ifdef'ed out. [#3565](https://github.com/PowerShell/PowerShell/issues/3565)
-
-#### Engine
-
-- [ ] Add tests for Tab Completion of various types of input. [#4160](https://github.com/PowerShell/PowerShell/issues/4160)
-- [ ] Add tests for debugging PS Jobs. [#4153](https://github.com/PowerShell/PowerShell/issues/4153)
-- [ ] Remove Snapin code from CommandDiscovery. [#4118](https://github.com/PowerShell/PowerShell/issues/4118)
-- [ ] Add tests SessionStateItem, SessionStateContainer error cases, dynamic parameters. Coverage possibly added by *-Item, *-ChildItem error case tests. [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add more tests using PSCredential [#4165](https://github.com/PowerShell/PowerShell/issues/4165)
-
-#### Remoting
-
-- [ ] Can PSProxyJobs be removed as it is for Workflows?
-- [ ] Add more tests for PS Jobs. [#4166](https://github.com/PowerShell/PowerShell/issues/4166)
-- [ ] Add more tests using -ThrottleLimit [#4166](https://github.com/PowerShell/PowerShell/issues/4166)
-- [ ] Add tests for Register-PSSessionConfiguration [#4166](https://github.com/PowerShell/PowerShell/issues/4166)
-- [ ] Add tests for Connect/Disconnect session [#4166](https://github.com/PowerShell/PowerShell/issues/4166)
-- [ ] Add more tests for Start-Job's various options [#4166](https://github.com/PowerShell/PowerShell/issues/4166)
-
-#### Security
-
-- [ ] Add more tests under various ExecutionPolicy modes. [#4168](https://github.com/PowerShell/PowerShell/issues/4168)
-
-#### Utils
-
-- [ ] Add more error case test to improve coverage of src/System.Management.Automation/utils [#4169](https://github.com/PowerShell/PowerShell/issues/4169)
-
-#### Providers
-
-##### FileSystemProvider
-
-- [ ] Add tests for Mapped Network Drive [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for *-Item alternate stream [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for Get-ChildItem -path "file" [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for Rename-Item for a directory [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for Copy-Item over remote session [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for various error conditions [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-
-##### RegistryProvider
-
-- [ ] Add tests for *-Item [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-- [ ] Add tests for *-Acl [#4157](https://github.com/PowerShell/PowerShell/issues/4157)
-- [ ] Add tests for error conditions [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
-
-##### FunctionProvider
-
-- [ ] Add *-Item tests [#4148](https://github.com/PowerShell/PowerShell/issues/4148)
diff --git a/dsc/pwsh.profile.dsc.resource.json b/dsc/pwsh.profile.dsc.resource.json
new file mode 100644
index 00000000000..aa5f5c29eee
--- /dev/null
+++ b/dsc/pwsh.profile.dsc.resource.json
@@ -0,0 +1,126 @@
+{
+    "$schema": "https://aka.ms/dsc/schemas/v3/bundled/resource/manifest.json",
+    "description": "Manage PowerShell profiles.",
+    "tags": [
+        "Linux",
+        "Windows",
+        "macOS",
+        "PowerShell"
+    ],
+    "type": "Microsoft.PowerShell/Profile",
+    "version": "0.1.0",
+    "get": {
+        "executable": "pwsh",
+        "args": [
+            "-NoLogo",
+            "-NonInteractive",
+            "-NoProfile",
+            "-ExecutionPolicy",
+            "Bypass",
+            "-File",
+            "./pwsh.profile.resource.ps1",
+            "-operation",
+             "get"
+        ],
+        "input": "stdin"
+    },
+    "set": {
+        "executable": "pwsh",
+        "args": [
+            "-NoLogo",
+            "-NonInteractive",
+            "-NoProfile",
+            "-ExecutionPolicy",
+            "Bypass",
+            "-File",
+            "./pwsh.profile.resource.ps1",
+            "-operation",
+            "set"
+        ],
+        "input": "stdin"
+    },
+    "export": {
+        "executable": "pwsh",
+        "args": [
+            "-NoLogo",
+            "-NonInteractive",
+            "-NoProfile",
+            "-ExecutionPolicy",
+            "Bypass",
+            "-File",
+            "./pwsh.profile.resource.ps1",
+            "-operation",
+            "export"
+        ],
+        "input": "stdin"
+    },
+    "exitCodes": {
+        "0": "Success",
+        "1": "Error",
+        "2": "Input not supported for export operation"
+    },
+    "schema": {
+        "embedded": {
+            "$schema": "https://json-schema.org/draft/2020-12/schema",
+            "title": "Profile",
+            "description": "Manage PowerShell profiles.",
+            "type": "object",
+            "unevaluatedProperties": false,
+            "required": [
+                "profileType"
+            ],
+            "properties": {
+                "profileType": {
+                    "type": "string",
+                    "title": "Profile Type",
+                    "description": "Defines which profile to manage. Valid values are: 'AllUsersCurrentHost', 'AllUsersAllHosts', 'CurrentUserAllHosts', and 'CurrentUserCurrentHost'.",
+                    "enum": [
+                        "AllUsersCurrentHost",
+                        "AllUsersAllHosts",
+                        "CurrentUserAllHosts",
+                        "CurrentUserCurrentHost"
+                    ]
+                },
+                "profilePath": {
+                    "title": "Profile Path",
+                    "description": "The full path to the profile file.",
+                    "type": "string",
+                    "readOnly": true
+                },
+                "content": {
+                    "title": "Content",
+                    "description": "Defines the content of the profile. If you don't specify this property, the resource doesn't manage the file contents. If you specify this property as an empty string, the resource removes all content from the file. If you specify this property as a non-empty string, the resource sets the file contents to the specified string. The resources retains newlines from this property without any modification.",
+                    "type": [ "string", "null" ]
+                },
+                "_exist": {
+                    "$ref": "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/exist.json"
+                },
+                "_name": {
+                    "$ref": "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/name.json"
+                }
+            },
+            "$defs": {
+                "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/exist.json": {
+                    "$schema": "https://json-schema.org/draft/2020-12/schema",
+                    "$id": "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/exist.json",
+                    "title": "Instance should exist",
+                    "description": "Indicates whether the DSC resource instance should exist.",
+                    "type": "boolean",
+                    "default": true,
+                    "enum": [
+                        false,
+                        true
+                    ]
+                },
+                "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/name.json": {
+                    "$schema": "https://json-schema.org/draft/2020-12/schema",
+                    "$id": "https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/v3/resource/properties/name.json",
+                    "title": "Exported instance name",
+                    "description": "Returns a generated name for the resource instance from an export operation.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
diff --git a/dsc/pwsh.profile.resource.ps1 b/dsc/pwsh.profile.resource.ps1
new file mode 100644
index 00000000000..ad9cfa4a63a
--- /dev/null
+++ b/dsc/pwsh.profile.resource.ps1
@@ -0,0 +1,179 @@
+## Copyright (c) Microsoft Corporation. All rights reserved.
+## Licensed under the MIT License.
+
+[CmdletBinding()]
+param(
+    [Parameter(Mandatory = $true)]
+    [ValidateSet('get', 'set', 'export')]
+    [string]$Operation,
+    [Parameter(ValueFromPipeline)]
+    [string[]]$UserInput
+)
+
+Begin {
+    enum ProfileType {
+        AllUsersCurrentHost
+        AllUsersAllHosts
+        CurrentUserAllHosts
+        CurrentUserCurrentHost
+    }
+
+    function New-PwshResource {
+        param(
+            [Parameter(Mandatory = $true)]
+            [ProfileType] $ProfileType,
+
+            [Parameter(ParameterSetName = 'WithContent')]
+            [string] $Content,
+
+            [Parameter(ParameterSetName = 'WithContent')]
+            [bool] $Exist
+        )
+
+        # Create the PSCustomObject with properties
+        $resource = [PSCustomObject]@{
+            profileType = $ProfileType
+            content     = $null
+            profilePath = GetProfilePath -profileType $ProfileType
+            _exist      = $false
+        }
+
+        # Add ToJson method
+        $resource | Add-Member -MemberType ScriptMethod -Name 'ToJson' -Value {
+            return ([ordered] @{
+                    profileType = $this.profileType
+                    content     = $this.content
+                    profilePath = $this.profilePath
+                    _exist      = $this._exist
+                }) | ConvertTo-Json -Compress -EnumsAsStrings
+        }
+
+        # Constructor logic - if Content and Exist parameters are provided (WithContent parameter set)
+        if ($PSCmdlet.ParameterSetName -eq 'WithContent') {
+            $resource.content = $Content
+            $resource._exist = $Exist
+        } else {
+            # Default constructor logic - read from file system
+            $fileExists = Test-Path $resource.profilePath
+            if ($fileExists) {
+                $resource.content = Get-Content -Path $resource.profilePath
+            } else {
+                $resource.content = $null
+            }
+            $resource._exist = $fileExists
+        }
+
+        return $resource
+    }
+
+    function GetProfilePath {
+        param (
+            [ProfileType] $profileType
+        )
+
+        $path = switch ($profileType) {
+            'AllUsersCurrentHost' { $PROFILE.AllUsersCurrentHost }
+            'AllUsersAllHosts' { $PROFILE.AllUsersAllHosts }
+            'CurrentUserAllHosts' { $PROFILE.CurrentUserAllHosts }
+            'CurrentUserCurrentHost' { $PROFILE.CurrentUserCurrentHost }
+        }
+
+        return $path
+    }
+
+    function ExportOperation {
+        $allUserCurrentHost = New-PwshResource -ProfileType 'AllUsersCurrentHost'
+        $allUsersAllHost = New-PwshResource -ProfileType 'AllUsersAllHosts'
+        $currentUserAllHost = New-PwshResource -ProfileType 'CurrentUserAllHosts'
+        $currentUserCurrentHost = New-PwshResource -ProfileType 'CurrentUserCurrentHost'
+
+        # Cannot use the ToJson() method here as we are adding a note property
+        $allUserCurrentHost | Add-Member -NotePropertyName '_name' -NotePropertyValue 'AllUsersCurrentHost' -PassThru | ConvertTo-Json -Compress -EnumsAsStrings
+        $allUsersAllHost | Add-Member -NotePropertyName '_name' -NotePropertyValue 'AllUsersAllHosts' -PassThru | ConvertTo-Json -Compress -EnumsAsStrings
+        $currentUserAllHost | Add-Member -NotePropertyName '_name' -NotePropertyValue 'CurrentUserAllHosts' -PassThru | ConvertTo-Json -Compress -EnumsAsStrings
+        $currentUserCurrentHost | Add-Member -NotePropertyName '_name' -NotePropertyValue 'CurrentUserCurrentHost' -PassThru | ConvertTo-Json -Compress -EnumsAsStrings
+    }
+
+    function GetOperation {
+        param (
+            [Parameter(Mandatory = $true)]
+            $InputResource,
+            [Parameter()]
+            [switch] $AsJson
+        )
+
+        $profilePath = GetProfilePath -profileType $InputResource.profileType.ToString()
+
+        $actualState = New-PwshResource -ProfileType $InputResource.profileType
+
+        $actualState.profilePath = $profilePath
+
+        $exists = Test-Path $profilePath
+
+        if ($InputResource._exist -and $exists) {
+            $content = Get-Content -Path $profilePath
+            $actualState.Content = $content
+        } elseif ($InputResource._exist -and -not $exists) {
+            $actualState.Content = $null
+            $actualState._exist = $false
+        } elseif (-not $InputResource._exist -and $exists) {
+            $actualState.Content = Get-Content -Path $profilePath
+            $actualState._exist = $true
+        } else {
+            $actualState.Content = $null
+            $actualState._exist = $false
+        }
+
+        if ($AsJson) {
+            return $actualState.ToJson()
+        } else {
+            return $actualState
+        }
+    }
+
+    function SetOperation {
+        param (
+            $InputResource
+        )
+
+        $actualState = GetOperation -InputResource $InputResource
+
+        if ($InputResource._exist) {
+            if (-not $actualState._exist) {
+                $null = New-Item -Path $actualState.profilePath -ItemType File -Force
+            }
+
+            if ($null -ne $InputResource.content) {
+                Set-Content -Path $actualState.profilePath -Value $InputResource.content
+            }
+        } elseif ($actualState._exist) {
+            Remove-Item -Path $actualState.profilePath -Force
+        }
+    }
+}
+End {
+    $inputJson = $input | ConvertFrom-Json
+
+    if ($inputJson) {
+        $InputResource = New-PwshResource -ProfileType $inputJson.profileType -Content $inputJson.content -Exist $inputJson._exist
+    }
+
+    switch ($Operation) {
+        'get' {
+            GetOperation -InputResource $InputResource -AsJson
+        }
+        'set' {
+            SetOperation -InputResource $InputResource
+        }
+        'export' {
+            if ($inputJson) {
+                Write-Error "Input not supported for export operation"
+                exit 2
+            }
+
+            ExportOperation
+        }
+    }
+
+    exit 0
+}
diff --git a/es-metadata.yml b/es-metadata.yml
new file mode 100644
index 00000000000..24da115c114
--- /dev/null
+++ b/es-metadata.yml
@@ -0,0 +1,12 @@
+schemaVersion: 1.0.0
+providers:
+- provider: InventoryAsCode
+  version: 1.0.0
+  metadata:
+    isProduction: true
+    accountableOwners:
+      service: cef1de07-99d6-45df-b907-77d0066032ec
+    routing:
+      defaultAreaPath:
+        org: msazure
+        path: One\MGMT\Compute\Powershell\Powershell\Powershell Core\pwsh
diff --git a/experimental-feature-linux.json b/experimental-feature-linux.json
new file mode 100644
index 00000000000..31f7b965a5b
--- /dev/null
+++ b/experimental-feature-linux.json
@@ -0,0 +1,9 @@
+[
+  "PSFeedbackProvider",
+  "PSLoadAssemblyFromNativeCode",
+  "PSNativeWindowsTildeExpansion",
+  "PSProfileDSCResource",
+  "PSSerializeJSONLongEnumAsNumber",
+  "PSRedirectToVariable",
+  "PSSubsystemPluginModel"
+]
diff --git a/experimental-feature-windows.json b/experimental-feature-windows.json
new file mode 100644
index 00000000000..31f7b965a5b
--- /dev/null
+++ b/experimental-feature-windows.json
@@ -0,0 +1,9 @@
+[
+  "PSFeedbackProvider",
+  "PSLoadAssemblyFromNativeCode",
+  "PSNativeWindowsTildeExpansion",
+  "PSProfileDSCResource",
+  "PSSerializeJSONLongEnumAsNumber",
+  "PSRedirectToVariable",
+  "PSSubsystemPluginModel"
+]
diff --git a/global.json b/global.json
index 2c34319a232..be4bdb6275d 100644
--- a/global.json
+++ b/global.json
@@ -1,5 +1,5 @@
 {
   "sdk": {
-    "version": "6.0.100-preview.2.21155.3"
+    "version": "11.0.100-preview.6.26359.118"
   }
 }
diff --git a/nuget.config b/nuget.config
index a8ed27bf99e..388a65572dd 100644
--- a/nuget.config
+++ b/nuget.config
@@ -2,8 +2,7 @@
 <configuration>
   <packageSources>
     <clear />
-    <add key="dotnet" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v2" />
-    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
+    <add key="powershell" value="https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json" />
   </packageSources>
   <disabledPackageSources>
     <clear />
diff --git a/src/GlobalTools/PowerShell.Windows.x64/PowerShell.Windows.x64.csproj b/src/GlobalTools/PowerShell.Windows.x64/PowerShell.Windows.x64.csproj
new file mode 100644
index 00000000000..8449c58ebb0
--- /dev/null
+++ b/src/GlobalTools/PowerShell.Windows.x64/PowerShell.Windows.x64.csproj
@@ -0,0 +1,33 @@
+﻿<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net11.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+    <PackAsTool>true</PackAsTool>
+    <PackAsToolShimRuntimeIdentifiers>win-x64</PackAsToolShimRuntimeIdentifiers>
+    <ToolCommandName>pwsh</ToolCommandName>
+    <Version>$(PackageVersion)</Version>
+    <DelaySign>true</DelaySign>
+    <AssemblyOriginatorKeyFile>../../signing/visualstudiopublic.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="..\..\powershell\Program.cs" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
+    <Content Include="..\..\Modules\Windows\**\*;..\..\Modules\Shared\**\*">
+      <Link>Modules\%(RecursiveDir)\%(FileName)%(Extension)</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
+    </Content>
+    <None Include="Powershell_64.png" Pack="true" PackagePath="" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Microsoft.PowerShell.SDK\Microsoft.PowerShell.SDK.csproj" />
+    <ProjectReference Include="..\..\Microsoft.PowerShell.Commands.Diagnostics\Microsoft.PowerShell.Commands.Diagnostics.csproj" />
+    <ProjectReference Include="..\..\Microsoft.Management.Infrastructure.CimCmdlets\Microsoft.Management.Infrastructure.CimCmdlets.csproj" />
+    <ProjectReference Include="..\..\Microsoft.WSMan.Management\Microsoft.WSMan.Management.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/GlobalTools/PowerShell.Windows.x64/Powershell_64.png b/src/GlobalTools/PowerShell.Windows.x64/Powershell_64.png
new file mode 100644
index 00000000000..2a656ffc3c8
Binary files /dev/null and b/src/GlobalTools/PowerShell.Windows.x64/Powershell_64.png differ
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs
index 49f39c8c019..e794fd929d1 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimAsyncOperation.cs
@@ -206,10 +206,7 @@ protected void AddCimSessionProxy(CimSessionProxy sessionproxy)
         {
             lock (cimSessionProxyCacheLock)
             {
-                if (this.cimSessionProxyCache == null)
-                {
-                    this.cimSessionProxyCache = new List<CimSessionProxy>();
-                }
+                this.cimSessionProxyCache ??= new List<CimSessionProxy>();
 
                 if (!this.cimSessionProxyCache.Contains(sessionproxy))
                 {
@@ -347,16 +344,14 @@ protected virtual void SubscribeToCimSessionProxyEvent(CimSessionProxy proxy)
         /// <returns></returns>
         protected object GetBaseObject(object value)
         {
-            PSObject psObject = value as PSObject;
-            if (psObject == null)
+            if (value is not PSObject psObject)
             {
                 return value;
             }
             else
             {
                 object baseObject = psObject.BaseObject;
-                var arrayObject = baseObject as object[];
-                if (arrayObject == null)
+                if (baseObject is not object[] arrayObject)
                 {
                     return baseObject;
                 }
@@ -383,11 +378,10 @@ protected object GetBaseObject(object value)
         /// <returns>The object.</returns>
         protected object GetReferenceOrReferenceArrayObject(object value, ref CimType referenceType)
         {
-            PSReference cimReference = value as PSReference;
-            if (cimReference != null)
+            if (value is PSReference cimReference)
             {
                 object baseObject = GetBaseObject(cimReference.Value);
-                if (!(baseObject is CimInstance cimInstance))
+                if (baseObject is not CimInstance cimInstance)
                 {
                     return null;
                 }
@@ -397,8 +391,7 @@ protected object GetReferenceOrReferenceArrayObject(object value, ref CimType re
             }
             else
             {
-                object[] cimReferenceArray = value as object[];
-                if (cimReferenceArray == null)
+                if (value is not object[] cimReferenceArray)
                 {
                     return null;
                 }
@@ -410,7 +403,7 @@ protected object GetReferenceOrReferenceArrayObject(object value, ref CimType re
                 CimInstance[] cimInstanceArray = new CimInstance[cimReferenceArray.Length];
                 for (int i = 0; i < cimReferenceArray.Length; i++)
                 {
-                    if (!(cimReferenceArray[i] is PSReference tempCimReference))
+                    if (cimReferenceArray[i] is not PSReference tempCimReference)
                     {
                         return null;
                     }
@@ -531,10 +524,7 @@ private void Cleanup()
             }
 
             this.moreActionEvent.Dispose();
-            if (this.ackedEvent != null)
-            {
-                this.ackedEvent.Dispose();
-            }
+            this.ackedEvent?.Dispose();
 
             DebugHelper.WriteLog("Cleanup complete.", 2);
         }
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimBaseAction.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimBaseAction.cs
index e3e487a9533..4702e47e2f2 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimBaseAction.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimBaseAction.cs
@@ -168,10 +168,7 @@ protected virtual void Dispose(bool disposing)
                 if (disposing)
                 {
                     // Dispose managed resources.
-                    if (this.completeEvent != null)
-                    {
-                        this.completeEvent.Dispose();
-                    }
+                    this.completeEvent?.Dispose();
                 }
 
                 // Call the appropriate methods to clean up
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs
index 059f58a97b2..89f7478b513 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimCommandBase.cs
@@ -57,7 +57,7 @@ internal class ParameterSetEntry
         /// Initializes a new instance of the <see cref="ParameterSetEntry"/> class.
         /// </summary>
         /// <param name="mandatoryParameterCount"></param>
-        internal ParameterSetEntry(UInt32 mandatoryParameterCount)
+        internal ParameterSetEntry(uint mandatoryParameterCount)
         {
             this.MandatoryParameterCount = mandatoryParameterCount;
             this.IsDefaultParameterSet = false;
@@ -80,7 +80,7 @@ internal ParameterSetEntry(ParameterSetEntry toClone)
         /// </summary>
         /// <param name="mandatoryParameterCount"></param>
         /// <param name="mandatory"></param>
-        internal ParameterSetEntry(UInt32 mandatoryParameterCount, bool isDefault)
+        internal ParameterSetEntry(uint mandatoryParameterCount, bool isDefault)
         {
             this.MandatoryParameterCount = mandatoryParameterCount;
             this.IsDefaultParameterSet = isDefault;
@@ -104,7 +104,7 @@ internal void reset()
         /// <summary>
         /// Property <c>MandatoryParameterCount</c>
         /// </summary>
-        internal UInt32 MandatoryParameterCount { get; } = 0;
+        internal uint MandatoryParameterCount { get; } = 0;
 
         /// <summary>
         /// Property <c>IsValueSet</c>
@@ -119,12 +119,12 @@ internal void reset()
         /// <summary>
         /// Property <c>SetMandatoryParameterCount</c>
         /// </summary>
-        internal UInt32 SetMandatoryParameterCount { get; set; } = 0;
+        internal uint SetMandatoryParameterCount { get; set; } = 0;
 
         /// <summary>
         /// Property <c>SetMandatoryParameterCountAtBeginProcess</c>
         /// </summary>
-        internal UInt32 SetMandatoryParameterCountAtBeginProcess { get; set; } = 0;
+        internal uint SetMandatoryParameterCountAtBeginProcess { get; set; } = 0;
     }
 
     /// <summary>
@@ -390,10 +390,7 @@ internal string GetParameterSet()
             }
 
             // Looking for default parameter set
-            if (boundParameterSetName == null)
-            {
-                boundParameterSetName = defaultParameterSetName;
-            }
+            boundParameterSetName ??= defaultParameterSetName;
 
             // throw if still can not find the parameter set name
             if (boundParameterSetName == null)
@@ -473,10 +470,7 @@ internal void SetParameter(object value, string parameterName)
                 return;
             }
 
-            if (this.parameterBinder != null)
-            {
-                this.parameterBinder.SetParameter(parameterName, this.AtBeginProcess);
-            }
+            this.parameterBinder?.SetParameter(parameterName, this.AtBeginProcess);
         }
         #endregion
 
@@ -579,10 +573,7 @@ protected void Dispose(bool disposing)
         protected virtual void DisposeInternal()
         {
             // Dispose managed resources.
-            if (this.operation != null)
-            {
-                this.operation.Dispose();
-            }
+            this.operation?.Dispose();
         }
         #endregion
 
@@ -672,6 +663,7 @@ internal virtual CmdletOperationBase CmdletOperation
         /// Throw terminating error
         /// </para>
         /// </summary>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         internal void ThrowTerminatingError(Exception exception, string operation)
         {
             ErrorRecord errorRecord = new(exception, operation, ErrorCategory.InvalidOperation, this);
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetCimClass.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetCimClass.cs
index 386482f11c5..c775325094b 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetCimClass.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetCimClass.cs
@@ -97,7 +97,7 @@ public void GetCimClass(GetCimClassCommand cmdlet)
         {
             List<CimSessionProxy> proxys = new();
             string nameSpace = ConstValue.GetNamespace(cmdlet.Namespace);
-            string className = (cmdlet.ClassName == null) ? @"*" : cmdlet.ClassName;
+            string className = cmdlet.ClassName ?? @"*";
             CimGetCimClassContext context = new(
                 cmdlet.ClassName,
                 cmdlet.MethodName,
@@ -165,6 +165,7 @@ private static void SetSessionProxyProperties(
             GetCimClassCommand cmdlet)
         {
             proxy.OperationTimeout = cmdlet.OperationTimeoutSec;
+            proxy.Amended = cmdlet.Amended;
         }
 
         /// <summary>
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetInstance.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetInstance.cs
index 25400514401..371b06d9356 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetInstance.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetInstance.cs
@@ -284,8 +284,7 @@ protected static string GetQuery(CimBaseCommand cmdlet)
         internal static bool IsClassNameQuerySet(CimBaseCommand cmdlet)
         {
             DebugHelper.WriteLogEx();
-            GetCimInstanceCommand cmd = cmdlet as GetCimInstanceCommand;
-            if (cmd != null)
+            if (cmdlet is GetCimInstanceCommand cmd)
             {
                 if (cmd.QueryDialect != null || cmd.SelectProperties != null || cmd.Filter != null)
                 {
@@ -299,8 +298,7 @@ internal static bool IsClassNameQuerySet(CimBaseCommand cmdlet)
         protected static string CreateQuery(CimBaseCommand cmdlet)
         {
             DebugHelper.WriteLogEx();
-            GetCimInstanceCommand cmd = cmdlet as GetCimInstanceCommand;
-            if (cmd != null)
+            if (cmdlet is GetCimInstanceCommand cmd)
             {
                 StringBuilder propertyList = new();
                 if (cmd.SelectProperties == null)
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs
index 0c847265cfe..899e67495cc 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimIndicationWatcher.cs
@@ -153,7 +153,7 @@ public CimIndicationWatcher(
             string theNamespace,
             string queryDialect,
             string queryExpression,
-            UInt32 operationTimeout)
+            uint operationTimeout)
         {
             ValidationHelper.ValidateNoNullorWhiteSpaceArgument(queryExpression, queryExpressionParameterName);
             computerName = ConstValue.GetComputerName(computerName);
@@ -173,7 +173,7 @@ public CimIndicationWatcher(
             string theNamespace,
             string queryDialect,
             string queryExpression,
-            UInt32 operationTimeout)
+            uint operationTimeout)
         {
             ValidationHelper.ValidateNoNullorWhiteSpaceArgument(queryExpression, queryExpressionParameterName);
             ValidationHelper.ValidateNoNullArgument(cimSession, cimSessionParameterName);
@@ -192,7 +192,7 @@ private void Initialize(
             string theNameSpace,
             string theQueryDialect,
             string theQueryExpression,
-            UInt32 theOperationTimeout)
+            uint theOperationTimeout)
         {
             enableRaisingEvents = false;
             status = Status.Default;
@@ -221,14 +221,11 @@ private void NewSubscriptionResultHandler(object src, CimSubscriptionEventArgs a
             if (temp != null)
             {
                 // raise the event
-                CimSubscriptionResultEventArgs resultArgs = args as CimSubscriptionResultEventArgs;
-                if (resultArgs != null)
+                if (args is CimSubscriptionResultEventArgs resultArgs)
                     temp(this, new CimIndicationEventInstanceEventArgs(resultArgs.Result));
-                else
+                else if (args is CimSubscriptionExceptionEventArgs exceptionArgs)
                 {
-                    CimSubscriptionExceptionEventArgs exceptionArgs = args as CimSubscriptionExceptionEventArgs;
-                    if (exceptionArgs != null)
-                        temp(this, new CimIndicationEventExceptionEventArgs(exceptionArgs.Exception));
+                    temp(this, new CimIndicationEventExceptionEventArgs(exceptionArgs.Exception));
                 }
             }
         }
@@ -242,7 +239,7 @@ private void NewSubscriptionResultHandler(object src, CimSubscriptionEventArgs a
         /// If set EnableRaisingEvents to false, which will be ignored
         /// </para>
         /// </summary>
-        [BrowsableAttribute(false)]
+        [Browsable(false)]
         public bool EnableRaisingEvents
         {
             get
@@ -378,7 +375,7 @@ internal void SetCmdlet(Cmdlet cmdlet)
         private string nameSpace;
         private string queryDialect;
         private string queryExpression;
-        private UInt32 operationTimeout;
+        private uint operationTimeout;
         #endregion
         #endregion
     }
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimNewCimInstance.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimNewCimInstance.cs
index d7436fc0ec8..beb3e551d33 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimNewCimInstance.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimNewCimInstance.cs
@@ -179,15 +179,14 @@ internal void GetCimInstance(CimInstance cimInstance, XOperationContextBase cont
         {
             DebugHelper.WriteLogEx();
 
-            CimNewCimInstanceContext newCimInstanceContext = context as CimNewCimInstanceContext;
-            if (newCimInstanceContext == null)
+            if (context is not CimNewCimInstanceContext newCimInstanceContext)
             {
                 DebugHelper.WriteLog("Invalid (null) CimNewCimInstanceContext", 1);
                 return;
             }
 
             CimSessionProxy proxy = CreateCimSessionProxy(newCimInstanceContext.Proxy);
-            string nameSpace = (cimInstance.CimSystemProperties.Namespace == null) ? newCimInstanceContext.Namespace : cimInstance.CimSystemProperties.Namespace;
+            string nameSpace = cimInstance.CimSystemProperties.Namespace ?? newCimInstanceContext.Namespace;
             proxy.GetInstanceAsync(nameSpace, cimInstance);
         }
 
@@ -295,8 +294,7 @@ private CimInstance CreateCimInstance(
 
                 DebugHelper.WriteLog("Create and add new property to ciminstance: name = {0}; value = {1}; flags = {2}", 5, propertyName, propertyValue, flag);
 
-                PSReference cimReference = propertyValue as PSReference;
-                if (cimReference != null)
+                if (propertyValue is PSReference cimReference)
                 {
                     CimProperty newProperty = CimProperty.Create(propertyName, GetBaseObject(cimReference.Value), CimType.Reference, flag);
                     cimInstance.CimInstanceProperties.Add(newProperty);
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimRegisterCimIndication.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimRegisterCimIndication.cs
index e0fbb1aa095..692a5f123e8 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimRegisterCimIndication.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimRegisterCimIndication.cs
@@ -123,7 +123,7 @@ public void RegisterCimIndication(
             string nameSpace,
             string queryDialect,
             string queryExpression,
-            UInt32 operationTimeout)
+            uint operationTimeout)
         {
             DebugHelper.WriteLogEx("queryDialect = '{0}'; queryExpression = '{1}'", 0, queryDialect, queryExpression);
             this.TargetComputerName = computerName;
@@ -146,13 +146,11 @@ public void RegisterCimIndication(
             string nameSpace,
             string queryDialect,
             string queryExpression,
-            UInt32 operationTimeout)
+            uint operationTimeout)
         {
             DebugHelper.WriteLogEx("queryDialect = '{0}'; queryExpression = '{1}'", 0, queryDialect, queryExpression);
-            if (cimSession == null)
-            {
-                throw new ArgumentNullException(string.Format(CultureInfo.CurrentUICulture, CimCmdletStrings.NullArgument, @"cimSession"));
-            }
+
+            ArgumentNullException.ThrowIfNull(cimSession, string.Format(CultureInfo.CurrentUICulture, CimCmdletStrings.NullArgument, nameof(cimSession)));
 
             this.TargetComputerName = cimSession.ComputerName;
             CimSessionProxy proxy = CreateSessionProxy(cimSession, operationTimeout);
@@ -198,8 +196,7 @@ private void CimIndicationHandler(object cimSession, CmdletActionEventArgs actio
             }
 
             // NOTES: should move after this.Disposed, but need to log the exception
-            CimWriteError cimWriteError = actionArgs.Action as CimWriteError;
-            if (cimWriteError != null)
+            if (actionArgs.Action is CimWriteError cimWriteError)
             {
                 this.Exception = cimWriteError.Exception;
                 if (!this.ackedEvent.IsSet)
@@ -221,11 +218,9 @@ private void CimIndicationHandler(object cimSession, CmdletActionEventArgs actio
                 DebugHelper.WriteLog("Got an exception: {0}", 2, Exception);
             }
 
-            CimWriteResultObject cimWriteResultObject = actionArgs.Action as CimWriteResultObject;
-            if (cimWriteResultObject != null)
+            if (actionArgs.Action is CimWriteResultObject cimWriteResultObject)
             {
-                CimSubscriptionResult result = cimWriteResultObject.Result as CimSubscriptionResult;
-                if (result != null)
+                if (cimWriteResultObject.Result is CimSubscriptionResult result)
                 {
                     EventHandler<CimSubscriptionEventArgs> temp = this.OnNewSubscriptionResult;
                     if (temp != null)
@@ -317,7 +312,7 @@ internal string TargetComputerName
         /// <returns></returns>
         private CimSessionProxy CreateSessionProxy(
             string computerName,
-            UInt32 timeout)
+            uint timeout)
         {
             CimSessionProxy proxy = CreateCimSessionProxy(computerName);
             proxy.OperationTimeout = timeout;
@@ -332,7 +327,7 @@ private CimSessionProxy CreateSessionProxy(
         /// <returns></returns>
         private CimSessionProxy CreateSessionProxy(
             CimSession session,
-            UInt32 timeout)
+            uint timeout)
         {
             CimSessionProxy proxy = CreateCimSessionProxy(session);
             proxy.OperationTimeout = timeout;
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs
index c27c7493ddb..389c45c8314 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimResultObserver.cs
@@ -419,8 +419,7 @@ public override void OnNext(CimMethodResultBase value)
 
             string resultObjectPSType = null;
             PSObject resultObject = null;
-            CimMethodResult methodResult = value as CimMethodResult;
-            if (methodResult != null)
+            if (value is CimMethodResult methodResult)
             {
                 resultObjectPSType = PSTypeCimMethodResult;
                 resultObject = new PSObject();
@@ -431,8 +430,7 @@ public override void OnNext(CimMethodResultBase value)
             }
             else
             {
-                CimMethodStreamedResult methodStreamedResult = value as CimMethodStreamedResult;
-                if (methodStreamedResult != null)
+                if (value is CimMethodStreamedResult methodStreamedResult)
                 {
                     resultObjectPSType = PSTypeCimMethodStreamedResult;
                     resultObject = new PSObject();
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionOperations.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionOperations.cs
index 28d530ed6a3..b8ebc9adaef 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionOperations.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionOperations.cs
@@ -535,9 +535,8 @@ internal IEnumerable<PSObject> QuerySession(
             {
                 if (this.curCimSessionsById.ContainsKey(id))
                 {
-                    if (!sessionIds.Contains(id))
+                    if (sessionIds.Add(id))
                     {
-                        sessionIds.Add(id);
                         sessions.Add(this.curCimSessionsById[id].GetPSObject());
                     }
                 }
@@ -951,7 +950,7 @@ internal void AddSessionToCache(CimSession cimSession, XOperationContextBase con
             CimTestCimSessionContext testCimSessionContext = context as CimTestCimSessionContext;
             uint sessionId = this.sessionState.GenerateSessionId();
             string originalSessionName = testCimSessionContext.CimSessionWrapper.Name;
-            string sessionName = (originalSessionName != null) ? originalSessionName : string.Format(CultureInfo.CurrentUICulture, @"{0}{1}", CimSessionState.CimSessionClassName, sessionId);
+            string sessionName = originalSessionName ?? string.Create(CultureInfo.CurrentUICulture, $"{CimSessionState.CimSessionClassName}{sessionId}");
 
             // detach CimSession from the proxy object
             CimSession createdCimSession = testCimSessionContext.Proxy.Detach();
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs
index dfbfe090ddc..5cdc168ae24 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimSessionProxy.cs
@@ -539,14 +539,34 @@ private void CreateSetSession(
 
         #region set operation options
 
+        /// <summary>
+        /// Gets or sets a value indicating whether to retrieve localized information for the CIM class.
+        /// </summary>
+        public bool Amended
+        {
+            get => OperationOptions.Flags.HasFlag(CimOperationFlags.LocalizedQualifiers);
+
+            set
+            {
+                if (value)
+                {
+                    OperationOptions.Flags |= CimOperationFlags.LocalizedQualifiers;
+                }
+                else
+                {
+                    OperationOptions.Flags &= ~CimOperationFlags.LocalizedQualifiers;
+                }
+            }
+        }
+
         /// <summary>
         /// Set timeout value (seconds) of the operation.
         /// </summary>
-        public UInt32 OperationTimeout
+        public uint OperationTimeout
         {
             get
             {
-                return (UInt32)this.OperationOptions.Timeout.TotalSeconds;
+                return (uint)this.OperationOptions.Timeout.TotalSeconds;
             }
 
             set
@@ -666,9 +686,9 @@ private void InitOption(CimOperationOptions operOptions)
             {
                 this.OperationOptions = new CimOperationOptions(operOptions);
             }
-            else if (this.OperationOptions == null)
+            else
             {
-                this.OperationOptions = new CimOperationOptions();
+                this.OperationOptions ??= new CimOperationOptions();
             }
 
             this.EnableMethodResultStreaming = true;
@@ -821,7 +841,7 @@ private void FireOperationDeletedEvent(
         /// </summary>
         /// <param name="channel"></param>
         /// <param name="message"></param>
-        internal void WriteMessage(UInt32 channel, string message)
+        internal void WriteMessage(uint channel, string message)
         {
             DebugHelper.WriteLogEx("Channel = {0} message = {1}", 0, channel, message);
             try
@@ -855,7 +875,7 @@ internal void WriteOperationStartMessage(string operation, Hashtable parameterLi
                         parameters.Append(',');
                     }
 
-                    parameters.Append(string.Format(CultureInfo.CurrentUICulture, @"'{0}' = {1}", key, parameterList[key]));
+                    parameters.Append(CultureInfo.CurrentUICulture, $@"'{key}' = {parameterList[key]}");
                 }
             }
 
@@ -863,7 +883,7 @@ internal void WriteOperationStartMessage(string operation, Hashtable parameterLi
                 CimCmdletStrings.CimOperationStart,
                 operation,
                 (parameters.Length == 0) ? "null" : parameters.ToString());
-            WriteMessage((UInt32)CimWriteMessageChannel.Verbose, operationStartMessage);
+            WriteMessage((uint)CimWriteMessageChannel.Verbose, operationStartMessage);
         }
 
         /// <summary>
@@ -878,7 +898,7 @@ internal void WriteOperationCompleteMessage(string operation)
             string operationCompleteMessage = string.Format(CultureInfo.CurrentUICulture,
                 CimCmdletStrings.CimOperationCompleted,
                 operation);
-            WriteMessage((UInt32)CimWriteMessageChannel.Verbose, operationCompleteMessage);
+            WriteMessage((uint)CimWriteMessageChannel.Verbose, operationCompleteMessage);
         }
 
         /// <summary>
@@ -894,8 +914,8 @@ internal void WriteOperationCompleteMessage(string operation)
         public void WriteProgress(string activity,
             string currentOperation,
             string statusDescription,
-            UInt32 percentageCompleted,
-            UInt32 secondsRemaining)
+            uint percentageCompleted,
+            uint secondsRemaining)
         {
             DebugHelper.WriteLogEx("activity:{0}; currentOperation:{1}; percentageCompleted:{2}; secondsRemaining:{3}",
                 0, activity, currentOperation, percentageCompleted, secondsRemaining);
@@ -1212,7 +1232,7 @@ public void EnumerateInstancesAsync(string namespaceName, string className)
             this.operationParameters.Add(@"className", className);
             this.WriteOperationStartMessage(this.operationName, this.operationParameters);
             CimAsyncMultipleResults<CimInstance> asyncResult = this.CimSession.EnumerateInstancesAsync(namespaceName, className, this.OperationOptions);
-            string errorSource = string.Format(CultureInfo.CurrentUICulture, "{0}:{1}", namespaceName, className);
+            string errorSource = string.Create(CultureInfo.CurrentUICulture, $"{namespaceName}:{className}");
             ConsumeCimInstanceAsync(asyncResult, new CimResultContext(errorSource));
         }
 
@@ -1294,7 +1314,7 @@ public void EnumerateClassesAsync(string namespaceName, string className)
             this.operationParameters.Add(@"className", className);
             this.WriteOperationStartMessage(this.operationName, this.operationParameters);
             CimAsyncMultipleResults<CimClass> asyncResult = this.CimSession.EnumerateClassesAsync(namespaceName, className, this.OperationOptions);
-            string errorSource = string.Format(CultureInfo.CurrentUICulture, "{0}:{1}", namespaceName, className);
+            string errorSource = string.Create(CultureInfo.CurrentUICulture, $"{namespaceName}:{className}");
             ConsumeCimClassAsync(asyncResult, new CimResultContext(errorSource));
         }
 
@@ -1314,7 +1334,7 @@ public void GetClassAsync(string namespaceName, string className)
             this.operationParameters.Add(@"className", className);
             this.WriteOperationStartMessage(this.operationName, this.operationParameters);
             CimAsyncResult<CimClass> asyncResult = this.CimSession.GetClassAsync(namespaceName, className, this.OperationOptions);
-            string errorSource = string.Format(CultureInfo.CurrentUICulture, "{0}:{1}", namespaceName, className);
+            string errorSource = string.Create(CultureInfo.CurrentUICulture, $"{namespaceName}:{className}");
             ConsumeCimClassAsync(asyncResult, new CimResultContext(errorSource));
         }
 
@@ -1368,7 +1388,7 @@ public void InvokeMethodAsync(
             this.operationParameters.Add(@"methodName", methodName);
             this.WriteOperationStartMessage(this.operationName, this.operationParameters);
             CimAsyncMultipleResults<CimMethodResultBase> asyncResult = this.CimSession.InvokeMethodAsync(namespaceName, className, methodName, methodParameters, this.OperationOptions);
-            string errorSource = string.Format(CultureInfo.CurrentUICulture, "{0}:{1}", namespaceName, className);
+            string errorSource = string.Create(CultureInfo.CurrentUICulture, $"{namespaceName}:{className}");
             ConsumeCimInvokeMethodResultAsync(asyncResult, className, methodName, new CimResultContext(errorSource));
         }
 
@@ -1473,7 +1493,7 @@ protected virtual void PostOperationDeleteEvent(OperationEventArgs args)
         /// The CimSession object managed by this proxy object,
         /// which is either created by constructor OR passed in by caller.
         /// The session will be closed while disposing this proxy object
-        /// if it is created by constuctor.
+        /// if it is created by constructor.
         /// </summary>
         internal CimSession CimSession { get; private set; }
 
@@ -1879,7 +1899,7 @@ private CimSession CreateCimSessionByComputerName(string computerName)
         /// <param name="credential"></param>
         /// <returns></returns>
         internal static CimSessionOptions CreateCimSessionOption(string computerName,
-            UInt32 timeout, CimCredential credential)
+            uint timeout, CimCredential credential)
         {
             DebugHelper.WriteLogEx();
 
@@ -2021,7 +2041,7 @@ protected override bool PreNewActionEvent(CmdletActionEventArgs args)
             }
 
             CimWriteResultObject writeResultObject = args.Action as CimWriteResultObject;
-            if (!(writeResultObject.Result is CimClass cimClass))
+            if (writeResultObject.Result is not CimClass cimClass)
             {
                 return true;
             }
@@ -2134,12 +2154,11 @@ internal class CimSessionProxyNewCimInstance : CimSessionProxy
 
         /// <summary>
         /// Initializes a new instance of the <see cref="CimSessionProxyNewCimInstance"/> class.
-        /// <summary>
+        /// </summary>
         /// <remarks>
         /// Create <see cref="CimSession"/> by given computer name.
         /// Then create wrapper object.
         /// </remarks>
-        /// <param name="computerName"></param>
         public CimSessionProxyNewCimInstance(string computerName, CimNewCimInstance operation)
             : base(computerName)
         {
@@ -2149,6 +2168,7 @@ public CimSessionProxyNewCimInstance(string computerName, CimNewCimInstance oper
         /// <summary>
         /// Initializes a new instance of the <see cref="CimSessionProxyNewCimInstance"/> class.
         /// </summary>
+        /// <param name="computerName"></param>
         /// <remarks>
         /// Create <see cref="CimSession"/> by given computer name
         /// and session options.
@@ -2180,7 +2200,7 @@ protected override bool PreNewActionEvent(CmdletActionEventArgs args)
             }
 
             CimWriteResultObject writeResultObject = args.Action as CimWriteResultObject;
-            if (!(writeResultObject.Result is CimInstance cimInstance))
+            if (writeResultObject.Result is not CimInstance cimInstance)
             {
                 return true;
             }
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteError.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteError.cs
index d3ae3419fa4..f1ebe911603 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteError.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteError.cs
@@ -39,14 +39,12 @@ internal static ErrorRecord ErrorRecordFromAnyException(
         {
             Debug.Assert(inner != null, "Caller should verify inner != null");
 
-            CimException cimException = inner as CimException;
-            if (cimException != null)
+            if (inner is CimException cimException)
             {
                 return CreateFromCimException(context, cimException, cimResultContext);
             }
 
-            var containsErrorRecord = inner as IContainsErrorRecord;
-            if (containsErrorRecord != null)
+            if (inner is IContainsErrorRecord containsErrorRecord)
             {
                 return InitializeErrorRecord(context,
                     exception: inner,
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteMessage.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteMessage.cs
index cf927617235..f4b244b97f9 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteMessage.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteMessage.cs
@@ -26,7 +26,7 @@ internal sealed class CimWriteMessage : CimBaseAction
 
         #region Properties
 
-        internal UInt32 Channel { get; }
+        internal uint Channel { get; }
 
         internal string Message { get; }
 
@@ -35,7 +35,7 @@ internal sealed class CimWriteMessage : CimBaseAction
         /// <summary>
         /// Initializes a new instance of the <see cref="CimWriteMessage"/> class.
         /// </summary>
-        public CimWriteMessage(UInt32 channel,
+        public CimWriteMessage(uint channel,
             string message)
         {
             this.Channel = channel;
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteProgress.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteProgress.cs
index 8e5632215a0..b99407ccc81 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteProgress.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CimWriteProgress.cs
@@ -40,8 +40,8 @@ public CimWriteProgress(
             int theActivityID,
             string theCurrentOperation,
             string theStatusDescription,
-            UInt32 thePercentageCompleted,
-            UInt32 theSecondsRemaining)
+            uint thePercentageCompleted,
+            uint theSecondsRemaining)
         {
             this.Activity = theActivity;
             this.ActivityID = theActivityID;
@@ -112,12 +112,12 @@ public override void Execute(CmdletOperationBase cmdlet)
         /// <summary>
         /// Gets the percentage completed of the given activity.
         /// </summary>
-        internal UInt32 PercentageCompleted { get; }
+        internal uint PercentageCompleted { get; }
 
         /// <summary>
         /// Gets the number of seconds remaining for the given activity.
         /// </summary>
-        internal UInt32 SecondsRemaining { get; }
+        internal uint SecondsRemaining { get; }
 
         #endregion
     }
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/CmdletOperation.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/CmdletOperation.cs
index 3c49b1dcbb8..bd1a2751622 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/CmdletOperation.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/CmdletOperation.cs
@@ -65,6 +65,7 @@ public virtual bool ShouldProcess(string verboseDescription, string verboseWarni
             return cmdlet.ShouldProcess(verboseDescription, verboseWarning, caption, out shouldProcessReason);
         }
 
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         public virtual void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             cmdlet.ThrowTerminatingError(errorRecord);
@@ -115,6 +116,7 @@ public virtual void WriteWarning(string text)
         /// Throw terminating error
         /// </para>
         /// </summary>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         internal void ThrowTerminatingError(Exception exception, string operation)
         {
             ErrorRecord errorRecord = new(exception, operation, ErrorCategory.InvalidOperation, this);
@@ -230,8 +232,7 @@ public override void WriteObject(object sendToPipeline, XOperationContextBase co
 
             if (sendToPipeline is CimInstance)
             {
-                CimSetCimInstanceContext setContext = context as CimSetCimInstanceContext;
-                if (setContext != null)
+                if (context is CimSetCimInstanceContext setContext)
                 {
                     if (string.Equals(setContext.ParameterSetName, CimBaseCommand.QueryComputerSet, StringComparison.OrdinalIgnoreCase) ||
                         string.Equals(setContext.ParameterSetName, CimBaseCommand.QuerySessionSet, StringComparison.OrdinalIgnoreCase))
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs
index ea592b40b90..6c4d0c94d2b 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimAssociatedInstanceCommand.cs
@@ -110,7 +110,7 @@ public CimInstance InputObject
         /// </summary>
         [Alias(AliasOT)]
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// <para>
@@ -232,8 +232,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimGetAssociatedInstance operation = this.GetOperationAgent();
-            if (operation != null)
-                operation.ProcessRemainActions(this.CmdletOperation);
+            operation?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs
index d4ab679f0a7..1bededc485f 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimClassCommand.cs
@@ -43,6 +43,12 @@ public GetCimClassCommand()
 
         #region parameters
 
+        /// <summary>
+        /// Gets or sets flag to retrieve a localized data for WMI class.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter Amended { get; set; }
+
         /// <summary>
         /// <para>
         /// The following is the definition of the input parameter "ClassName".
@@ -79,7 +85,7 @@ public GetCimClassCommand()
         /// </summary>
         [Alias(AliasOT)]
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// The following is the definition of the input parameter "Session".
@@ -196,10 +202,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimGetCimClass cimGetCimClass = this.GetOperationAgent();
-            if (cimGetCimClass != null)
-            {
-                cimGetCimClass.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimGetCimClass?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs
index cc4de5e84e9..65eeae8e450 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimInstanceCommand.cs
@@ -260,7 +260,7 @@ public string Namespace
         /// </summary>
         [Alias(AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// <para>The following is the definition of the input parameter "InputObject".
@@ -491,10 +491,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimGetInstance cimGetInstance = this.GetOperationAgent();
-            if (cimGetInstance != null)
-            {
-                cimGetInstance.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimGetInstance?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs
index a402d58d0d3..3289b6c86c0 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/GetCimSessionCommand.cs
@@ -81,7 +81,7 @@ public string[] ComputerName
             ValueFromPipelineByPropertyName = true,
             ParameterSetName = SessionIdSet)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public UInt32[] Id
+        public uint[] Id
         {
             get
             {
@@ -95,7 +95,7 @@ public UInt32[] Id
             }
         }
 
-        private UInt32[] id;
+        private uint[] id;
 
         /// <summary>
         /// The following is the definition of the input parameter "InstanceID".
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs
index f920094ae15..e3bc6f293b6 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/InvokeCimMethodCommand.cs
@@ -373,7 +373,7 @@ public string Namespace
         /// </summary>
         [Alias(AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         #endregion
 
@@ -408,10 +408,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimInvokeCimMethod cimInvokeMethod = this.GetOperationAgent();
-            if (cimInvokeMethod != null)
-            {
-                cimInvokeMethod.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimInvokeMethod?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj b/src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj
index 582858a592b..f5388782d9c 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj
@@ -10,4 +10,9 @@
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs
index b43b1e275d7..5843f25a26b 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimInstanceCommand.cs
@@ -223,7 +223,7 @@ public string Namespace
         /// </summary>
         [Alias(AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// <para>
@@ -377,10 +377,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimNewCimInstance cimNewCimInstance = this.GetOperationAgent();
-            if (cimNewCimInstance != null)
-            {
-                cimNewCimInstance.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimNewCimInstance?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs
index 2d1a91f5c0e..8b8e36cf829 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionCommand.cs
@@ -54,7 +54,7 @@ public PasswordAuthenticationMechanism Authentication
         /// The default is the current user.
         /// </summary>
         [Parameter(Position = 1, ParameterSetName = CredentialParameterSet)]
-        [Credential()]
+        [Credential]
         public PSCredential Credential { get; set; }
 
         /// <summary>
@@ -104,7 +104,7 @@ public PasswordAuthenticationMechanism Authentication
         /// </summary>
         [Alias(AliasOT)]
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        public UInt32 OperationTimeoutSec
+        public uint OperationTimeoutSec
         {
             get
             {
@@ -118,7 +118,7 @@ public UInt32 OperationTimeoutSec
             }
         }
 
-        private UInt32 operationTimeout;
+        private uint operationTimeout;
         internal bool operationTimeoutSet = false;
 
         /// <summary>
@@ -136,7 +136,7 @@ public UInt32 OperationTimeoutSec
         /// This is specificly for wsman protocol.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        public UInt32 Port
+        public uint Port
         {
             get
             {
@@ -150,7 +150,7 @@ public UInt32 Port
             }
         }
 
-        private UInt32 port;
+        private uint port;
         private bool portSet = false;
 
         /// <summary>
@@ -234,8 +234,7 @@ internal void BuildSessionOptions(out CimSessionOptions outputOptions, out CimCr
             outputCredential = null;
             if (options != null)
             {
-                DComSessionOptions dcomOptions = options as DComSessionOptions;
-                if (dcomOptions != null)
+                if (options is DComSessionOptions dcomOptions)
                 {
                     bool conflict = false;
                     string parameterName = string.Empty;
@@ -334,10 +333,7 @@ protected override void DisposeInternal()
             base.DisposeInternal();
 
             // Dispose managed resources.
-            if (this.cimNewSession != null)
-            {
-                this.cimNewSession.Dispose();
-            }
+            this.cimNewSession?.Dispose();
         }
         #endregion
     }
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs
index 0b62b79d96c..54956a9805a 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/NewCimSessionOptionCommand.cs
@@ -231,7 +231,7 @@ public Uri HttpPrefix
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
                    ParameterSetName = WSManParameterSet)]
-        public UInt32 MaxEnvelopeSizeKB
+        public uint MaxEnvelopeSizeKB
         {
             get
             {
@@ -246,7 +246,7 @@ public UInt32 MaxEnvelopeSizeKB
             }
         }
 
-        private UInt32 maxenvelopesizekb;
+        private uint maxenvelopesizekb;
         private bool maxenvelopesizekbSet = false;
 
         /// <summary>
@@ -299,7 +299,7 @@ public string ProxyCertificateThumbprint
         /// Ps Credential used by the proxy server when required by the server.
         /// </summary>
         [Parameter(ParameterSetName = WSManParameterSet)]
-        [Credential()]
+        [Credential]
         public PSCredential ProxyCredential
         {
             get
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs
index 246a95f37e3..b314691e41f 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RegisterCimIndicationCommand.cs
@@ -124,7 +124,7 @@ public string QueryDialect
         /// </summary>
         [Alias(CimBaseCommand.AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// The following is the definition of the input parameter "Session".
@@ -205,7 +205,7 @@ protected override object GetSourceObject()
                 case CimBaseCommand.ClassNameComputerSet:
                     // validate the classname
                     this.CheckArgument();
-                    tempQueryExpression = string.Format(CultureInfo.CurrentCulture, "Select * from {0}", this.ClassName);
+                    tempQueryExpression = string.Create(CultureInfo.CurrentCulture, $"Select * from {this.ClassName}");
                     break;
             }
 
@@ -227,10 +227,7 @@ protected override object GetSourceObject()
                     break;
             }
 
-            if (watcher != null)
-            {
-                watcher.SetCmdlet(this);
-            }
+            watcher?.SetCmdlet(this);
 
             return watcher;
         }
@@ -275,10 +272,7 @@ private static void newSubscriber_Unsubscribed(
             DebugHelper.WriteLogEx();
 
             CimIndicationWatcher watcher = sender as CimIndicationWatcher;
-            if (watcher != null)
-            {
-                watcher.Stop();
-            }
+            watcher?.Stop();
         }
 
         #region private members
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs
index c3f1230020c..5ac8d129367 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimInstanceCommand.cs
@@ -154,7 +154,7 @@ public string Namespace
         /// </summary>
         [Alias(AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// The following is the definition of the input parameter "InputObject".
@@ -276,10 +276,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimRemoveCimInstance cimRemoveInstance = this.GetOperationAgent();
-            if (cimRemoveInstance != null)
-            {
-                cimRemoveInstance.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimRemoveInstance?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs
index 53937e57354..2f1a5ad026e 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/RemoveCimSessionCommand.cs
@@ -108,7 +108,7 @@ public string[] ComputerName
                    ValueFromPipelineByPropertyName = true,
                    ParameterSetName = SessionIdSet)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public UInt32[] Id
+        public uint[] Id
         {
             get
             {
@@ -122,7 +122,7 @@ public UInt32[] Id
             }
         }
 
-        private UInt32[] id;
+        private uint[] id;
 
         /// <summary>
         /// The following is the definition of the input parameter "InstanceId".
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs
index 25b3113e452..d190e5fafba 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/SetCimInstanceCommand.cs
@@ -151,7 +151,7 @@ public string Namespace
         /// </summary>
         [Alias(AliasOT)]
         [Parameter]
-        public UInt32 OperationTimeoutSec { get; set; }
+        public uint OperationTimeoutSec { get; set; }
 
         /// <summary>
         /// The following is the definition of the input parameter "InputObject".
@@ -325,10 +325,7 @@ protected override void ProcessRecord()
         protected override void EndProcessing()
         {
             CimSetCimInstance cimSetCimInstance = this.GetOperationAgent();
-            if (cimSetCimInstance != null)
-            {
-                cimSetCimInstance.ProcessRemainActions(this.CmdletOperation);
-            }
+            cimSetCimInstance?.ProcessRemainActions(this.CmdletOperation);
         }
 
         #endregion
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs b/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs
index bab5c092894..adcab254231 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/Utils.cs
@@ -88,7 +88,7 @@ internal static bool IsDefaultComputerName(string computerName)
         /// <returns></returns>
         internal static IEnumerable<string> GetComputerNames(IEnumerable<string> computerNames)
         {
-            return (computerNames == null) ? NullComputerNames : computerNames;
+            return computerNames ?? NullComputerNames;
         }
 
         /// <summary>
@@ -110,7 +110,7 @@ internal static string GetComputerName(string computerName)
         /// <returns></returns>
         internal static string GetNamespace(string nameSpace)
         {
-            return (nameSpace == null) ? DefaultNameSpace : nameSpace;
+            return nameSpace ?? DefaultNameSpace;
         }
 
         /// <summary>
@@ -122,7 +122,7 @@ internal static string GetNamespace(string nameSpace)
         /// <returns></returns>
         internal static string GetQueryDialectWithDefault(string queryDialect)
         {
-            return (queryDialect == null) ? DefaultQueryDialect : queryDialect;
+            return queryDialect ?? DefaultQueryDialect;
         }
     }
 
@@ -199,18 +199,8 @@ internal static string GetSourceCodeInformation(bool withFileName, int depth)
         {
             StackTrace trace = new();
             StackFrame frame = trace.GetFrame(depth);
-            // if (withFileName)
-            // {
-            //    return string.Format(CultureInfo.CurrentUICulture, "{0}#{1}:{2}:", frame.GetFileName()., frame.GetFileLineNumber(), frame.GetMethod().Name);
-            // }
-            // else
-            // {
-            //    return string.Format(CultureInfo.CurrentUICulture, "{0}:", frame.GetMethod());
-            // }
-
-            return string.Format(CultureInfo.CurrentUICulture, "{0}::{1}        ",
-                frame.GetMethod().DeclaringType.Name,
-                frame.GetMethod().Name);
+
+            return string.Create(CultureInfo.CurrentUICulture, $"{frame.GetMethod().DeclaringType.Name}::{frame.GetMethod().Name}        ");
         }
         #endregion
 
@@ -371,10 +361,7 @@ internal static class ValidationHelper
         /// <param name="argumentName"></param>
         public static void ValidateNoNullArgument(object obj, string argumentName)
         {
-            if (obj == null)
-            {
-                throw new ArgumentNullException(argumentName);
-            }
+            ArgumentNullException.ThrowIfNull(obj, argumentName);
         }
 
         /// <summary>
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/CimCmdletStrings.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/CimCmdletStrings.resx
index d479d28b5bf..bf75344781e 100644
--- a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/CimCmdletStrings.resx
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/CimCmdletStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/cs/CimCmdletStrings.cs.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/cs/CimCmdletStrings.cs.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/cs/CimCmdletStrings.cs.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/de/CimCmdletStrings.de.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/de/CimCmdletStrings.de.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/de/CimCmdletStrings.de.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/es/CimCmdletStrings.es.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/es/CimCmdletStrings.es.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/es/CimCmdletStrings.es.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/fr/CimCmdletStrings.fr.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/fr/CimCmdletStrings.fr.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/fr/CimCmdletStrings.fr.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/it/CimCmdletStrings.it.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/it/CimCmdletStrings.it.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/it/CimCmdletStrings.it.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ja/CimCmdletStrings.ja.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ja/CimCmdletStrings.ja.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ja/CimCmdletStrings.ja.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ko/CimCmdletStrings.ko.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ko/CimCmdletStrings.ko.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ko/CimCmdletStrings.ko.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pl/CimCmdletStrings.pl.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pl/CimCmdletStrings.pl.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pl/CimCmdletStrings.pl.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pt-BR/CimCmdletStrings.pt-BR.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pt-BR/CimCmdletStrings.pt-BR.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/pt-BR/CimCmdletStrings.pt-BR.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ru/CimCmdletStrings.ru.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ru/CimCmdletStrings.ru.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/ru/CimCmdletStrings.ru.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/tr/CimCmdletStrings.tr.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/tr/CimCmdletStrings.tr.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/tr/CimCmdletStrings.tr.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hans/CimCmdletStrings.zh-Hans.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hans/CimCmdletStrings.zh-Hans.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hans/CimCmdletStrings.zh-Hans.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hant/CimCmdletStrings.zh-Hant.resx b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hant/CimCmdletStrings.zh-Hant.resx
new file mode 100644
index 00000000000..e0f73fc33ed
--- /dev/null
+++ b/src/Microsoft.Management.Infrastructure.CimCmdlets/resources/zh-Hant/CimCmdletStrings.zh-Hant.resx
@@ -0,0 +1,228 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimOperationCompleted" xml:space="preserve">
+    <value>Operation '{0}' complete.</value>
+    <comment>{0} is a placeholder for operation name. (i.e, GetCimInstance)</comment>
+  </data>
+  <data name="CimOperationNameCreateInstance" xml:space="preserve">
+    <value>Create CimInstance</value>
+  </data>
+  <data name="CimOperationNameDeleteInstance" xml:space="preserve">
+    <value>Delete CimInstance</value>
+  </data>
+  <data name="CimOperationNameEnumerateAssociatedInstances" xml:space="preserve">
+    <value>Enumerate Associated CimInstances</value>
+  </data>
+  <data name="CimOperationNameEnumerateClasses" xml:space="preserve">
+    <value>Enumerate CimClasses</value>
+  </data>
+  <data name="CimOperationNameEnumerateInstances" xml:space="preserve">
+    <value>Enumerate CimInstances</value>
+  </data>
+  <data name="CimOperationNameGetClass" xml:space="preserve">
+    <value>Get CimClass</value>
+  </data>
+  <data name="CimOperationNameGetInstance" xml:space="preserve">
+    <value>Get CimInstance</value>
+  </data>
+  <data name="CimOperationNameInvokeMethod" xml:space="preserve">
+    <value>Invoke CimMethod</value>
+  </data>
+  <data name="CimOperationNameModifyInstance" xml:space="preserve">
+    <value>Modify CimInstance</value>
+  </data>
+  <data name="CimOperationNameQueryInstances" xml:space="preserve">
+    <value>Query CimInstances</value>
+  </data>
+  <data name="CimOperationNameSubscribeIndication" xml:space="preserve">
+    <value>Subscribe CimIndication</value>
+  </data>
+  <data name="CimOperationStart" xml:space="preserve">
+    <value>Perform operation '{0}' with following parameters, '{1}'.</value>
+    <comment>{0} is a placeholder for operation name; {1} is a placeholder for parameters value</comment>
+  </data>
+  <data name="ConflictParameterWasSet" xml:space="preserve">
+    <value>Parameter '{0}' cannot be used with the parameter '{1}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for another parameter name;</comment>
+  </data>
+  <data name="CouldNotFindCimsessionObject" xml:space="preserve">
+    <value>Could not find CimSession with the given {0} = {1}</value>
+    <comment>{0} is a placeholder for property name; {1} is a placeholder for property value.</comment>
+  </data>
+  <data name="CouldNotFindPropertyFromGivenClass" xml:space="preserve">
+    <value>Could not find the following properties from the given class {0}: {1}.</value>
+    <comment>{0} is a placeholder for class name; {1} is a placeholder for list of property names.</comment>
+  </data>
+  <data name="CouldNotModifyReadonlyProperty" xml:space="preserve">
+    <value>Could not modify readonly property '{0}' of object '{1}'.</value>
+    <comment>{0} is a placeholder for propertyname; {1} is a placeholder for object string.</comment>
+  </data>
+  <data name="DefaultStatusDescription" xml:space="preserve">
+    <value>Default status description.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+    <comment>{0} is a placeholder for a path</comment>
+  </data>
+  <data name="InvalidAuthenticationTypeWithNullCredential" xml:space="preserve">
+    <value>Authentication type '{0}' is invalid without credential. Only following authentication type are allowed without credential, '{1}', '{2}', '{3}', or '{4}'.</value>
+    <comment>{0} is a placeholder for authentication type. {1}-{4} are placeholders for authentication types.</comment>
+  </data>
+  <data name="InvalidMethod" xml:space="preserve">
+    <value>Can not find method '{0}' in class '{1}'.</value>
+    <comment>{0} is a placeholder for method name. {1} is a placeholders for class name.</comment>
+  </data>
+  <data name="InvalidMethodParameter" xml:space="preserve">
+    <value>Can not find Parameter '{0}' in method '{1}' of class '{2}'.</value>
+    <comment>{0} is a placeholder for parameter name; {1} is a placeholder for method name; {2} is a placeholder for class name.</comment>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Invalid operation. Current cmdlet already have operation created.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>Argument '{0}' contains characters that are not allowed in parameter '{1}'. Supply an argument that is valid and then try the command again.</value>
+    <comment>{0} stand for argument value, {1} stand for parameter name.</comment>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="NullArgument" xml:space="preserve">
+    <value>Argument '{0}' can not be null.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="OperationInProgress" xml:space="preserve">
+    <value>CimSession proxy object already have operation in progress.</value>
+    <comment>N/A</comment>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+    <comment>{0} is a placeholder for PowerShell filesystem-like provider name (i.e. registry provider)</comment>
+  </data>
+  <data name="UnableToAddPropertyToInstance" xml:space="preserve">
+    <value>Unable to add property '{0}' to input object '{1}'. The class schema does not contain the property.</value>
+    <comment>{0} stand for property name, {1} stand for cim instance path.</comment>
+  </data>
+  <data name="UnableToResolveParameterSetName" xml:space="preserve">
+    <value>Unable to resolve the parameter set name.</value>
+    <comment>N/A</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/.globalconfig b/src/Microsoft.Management.UI.Internal/.globalconfig
deleted file mode 100644
index fdb956e8529..00000000000
--- a/src/Microsoft.Management.UI.Internal/.globalconfig
+++ /dev/null
@@ -1,3 +0,0 @@
-is_global = true
-
-dotnet_analyzer_diagnostic.severity = none
diff --git a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs
index 1d4bcacd893..fdb81a6d416 100644
--- a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs
+++ b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpParagraphBuilder.cs
@@ -147,7 +147,7 @@ private static PSPropertyInfo GetProperty(PSObject psObj, string propertyName)
         /// </summary>
         /// <param name="psObj">PSObject that contains another PSObject as a property.</param>
         /// <param name="psObjectName">Property name that contains the PSObject.</param>
-        /// <param name="propertyName">Property name in thye inner PSObject.</param>
+        /// <param name="propertyName">Property name in the inner PSObject.</param>
         /// <returns>The string from the inner psObject property or null if it could not be retrieved.</returns>
         private static string GetInnerPSObjectPropertyString(PSObject psObj, string psObjectName, string propertyName)
         {
@@ -276,7 +276,7 @@ private static string AddIndent(string str, string indentString)
             foreach (string line in lines)
             {
                 // Indentation is not localized
-                returnValue.AppendFormat("{0}{1}\r\n", indentString, line);
+                returnValue.Append($"{indentString}{line}\r\n");
             }
 
             if (returnValue.Length > 2)
@@ -369,7 +369,7 @@ private void AddSyntax(bool setting, string sectionTitle)
                     continue;
                 }
 
-                string commandStart = string.Format(CultureInfo.CurrentCulture, "{0} ", commandName);
+                string commandStart = string.Create(CultureInfo.CurrentCulture, $"{commandName} ");
                 this.AddText(HelpParagraphBuilder.AddIndent(commandStart), false);
 
                 foreach (object parameterObj in parameterObjs)
@@ -389,7 +389,7 @@ private void AddSyntax(bool setting, string sectionTitle)
                         continue;
                     }
 
-                    string parameterType = parameterValue == null ? string.Empty : string.Format(CultureInfo.CurrentCulture, "<{0}>", parameterValue);
+                    string parameterType = parameterValue == null ? string.Empty : string.Create(CultureInfo.CurrentCulture, $"<{parameterValue}>");
 
                     string parameterOptionalOpenBrace, parameterOptionalCloseBrace;
 
@@ -607,7 +607,7 @@ private void AddMembers(bool setting, string sectionTitle)
                             description = GetPropertyString(propertyTypeObject, "description");
                         }
 
-                        memberText = string.Format(CultureInfo.CurrentCulture, " [{0}] {1}\r\n", propertyType, name);
+                        memberText = string.Create(CultureInfo.CurrentCulture, $" [{propertyType}] {name}\r\n");
                     }
                 }
                 else if (string.Equals("method", type, StringComparison.OrdinalIgnoreCase))
@@ -690,14 +690,14 @@ private static void FormatMethodData(PSObject member, string name, out string me
                         {
                             parameterType = GetPropertyString(parameterTypeData, "name");
 
-                            // If there is no type for the paramter, we expect it is System.Object
+                            // If there is no type for the parameter, we expect it is System.Object
                             if (string.IsNullOrEmpty(parameterType))
                             {
                                 parameterType = "object";
                             }
                         }
 
-                        string paramString = string.Format(CultureInfo.CurrentCulture, "[{0}] ${1},", parameterType, parameterName);
+                        string paramString = string.Create(CultureInfo.CurrentCulture, $"[{parameterType}] ${parameterName},");
 
                         parameterText.Append(paramString);
                     }
@@ -709,7 +709,7 @@ private static void FormatMethodData(PSObject member, string name, out string me
                 }
             }
 
-            memberText = string.Format(CultureInfo.CurrentCulture, " [{0}] {1}({2})\r\n", returnType, name, parameterText);
+            memberText = string.Create(CultureInfo.CurrentCulture, $" [{returnType}] {name}({parameterText})\r\n");
         }
 
         /// <summary>
diff --git a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpViewModel.cs b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpViewModel.cs
index 7cbe4b0c74e..7ab8681fef4 100644
--- a/src/Microsoft.Management.UI.Internal/HelpWindow/HelpViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/HelpWindow/HelpViewModel.cs
@@ -268,7 +268,7 @@ private void SetMatchesLabel()
         }
 
         /// <summary>
-        /// Called internally to notify when a proiperty changed.
+        /// Called internally to notify when a property changed.
         /// </summary>
         /// <param name="propertyName">Property name.</param>
         private void OnNotifyPropertyChanged(string propertyName)
diff --git a/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphBuilder.cs b/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphBuilder.cs
index 822e4c05026..77b1b5c966f 100644
--- a/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphBuilder.cs
+++ b/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphBuilder.cs
@@ -12,8 +12,8 @@ namespace Microsoft.Management.UI.Internal
 {
     /// <summary>
     /// Builds a paragraph based on Text + Bold + Highlight information.
-    /// Bold are the segments of thexct that should be bold, and Highlight are
-    /// the segments of thext that should be highlighted (like search results).
+    /// Bold are the segments of the text that should be bold, and Highlight are
+    /// the segments of the text that should be highlighted (like search results).
     /// </summary>
     internal class ParagraphBuilder : INotifyPropertyChanged
     {
@@ -43,10 +43,7 @@ internal class ParagraphBuilder : INotifyPropertyChanged
         /// <param name="paragraph">Paragraph we will be adding lines to in BuildParagraph.</param>
         internal ParagraphBuilder(Paragraph paragraph)
         {
-            if (paragraph == null)
-            {
-                throw new ArgumentNullException("paragraph");
-            }
+            ArgumentNullException.ThrowIfNull(paragraph);
 
             this.paragraph = paragraph;
             this.boldSpans = new List<TextSpan>();
@@ -80,12 +77,12 @@ internal Paragraph Paragraph
         /// <summary>
         /// Called after all the AddText calls have been made to build the paragraph
         /// based on the current text.
-        /// This method goes over 3 collections simultaneouslly:
+        /// This method goes over 3 collections simultaneously:
         ///    1) characters in this.textBuilder
         ///    2) spans in this.boldSpans
         ///    3) spans in this.highlightedSpans
         /// And adds the minimal number of Inlines to the paragraph so that all
-        /// characters that should be bold and/or highlighed are.
+        /// characters that should be bold and/or highlighted are.
         /// </summary>
         internal void BuildParagraph()
         {
@@ -128,7 +125,7 @@ internal void BuildParagraph()
         }
 
         /// <summary>
-        /// Highlights all ocurrences of <paramref name="search"/>.
+        /// Highlights all occurrences of <paramref name="search"/>.
         /// This is called after all calls to AddText have been made.
         /// </summary>
         /// <param name="search">Search string.</param>
@@ -185,10 +182,7 @@ internal void HighlightAllInstancesOf(string search, bool caseSensitive, bool wh
         /// <param name="bold">True if the text should be bold.</param>
         internal void AddText(string str, bool bold)
         {
-            if (str == null)
-            {
-                throw new ArgumentNullException("str");
-            }
+            ArgumentNullException.ThrowIfNull(str);
 
             if (str.Length == 0)
             {
@@ -240,16 +234,16 @@ private static void AddInline(Paragraph currentParagraph, bool currentBold, bool
         }
 
         /// <summary>
-        /// This is an auxiliar method in BuildParagraph to move the current bold or highlighed spans
+        /// This is an auxiliar method in BuildParagraph to move the current bold or highlighted spans
         /// according to the <paramref name="caracterPosition"/>
-        /// The current bold and higlighed span should be ending ahead of the current position.
+        /// The current bold and highlighted span should be ending ahead of the current position.
         /// Moves <paramref name="currentSpanIndex"/> and <paramref name="currentSpan"/> to the
-        /// propper span in <paramref name="allSpans"/> according to the <paramref name="caracterPosition"/>
+        /// proper span in <paramref name="allSpans"/> according to the <paramref name="caracterPosition"/>
         /// This is an auxiliar method in BuildParagraph.
         /// </summary>
         /// <param name="currentSpanIndex">Current index within <paramref name="allSpans"/>.</param>
         /// <param name="currentSpan">Current span within <paramref name="allSpans"/>.</param>
-        /// <param name="caracterPosition">Caracter position. This comes from a position within this.textBuilder.</param>
+        /// <param name="caracterPosition">Character position. This comes from a position within this.textBuilder.</param>
         /// <param name="allSpans">The collection of spans. This is either this.boldSpans or this.highlightedSpans.</param>
         private static void MoveSpanToPosition(ref int currentSpanIndex, ref TextSpan? currentSpan, int caracterPosition, List<TextSpan> allSpans)
         {
@@ -270,7 +264,7 @@ private static void MoveSpanToPosition(ref int currentSpanIndex, ref TextSpan? c
             }
 
             // there is no span ending ahead of current position, so
-            // we set the current span to null to prevent unecessary comparisons against the currentSpan
+            // we set the current span to null to prevent unnecessary comparisons against the currentSpan
             currentSpan = null;
         }
 
@@ -282,21 +276,14 @@ private static void MoveSpanToPosition(ref int currentSpanIndex, ref TextSpan? c
         /// <param name="length">Highlight length.</param>
         private void AddHighlight(int start, int length)
         {
-            if (start < 0)
-            {
-                throw new ArgumentOutOfRangeException("start");
-            }
-
-            if (start + length > this.textBuilder.Length)
-            {
-                throw new ArgumentOutOfRangeException("length");
-            }
+            ArgumentOutOfRangeException.ThrowIfNegative(start);
+            ArgumentOutOfRangeException.ThrowIfGreaterThan(start + length, this.textBuilder.Length, nameof(length));
 
             this.highlightedSpans.Add(new TextSpan(start, length));
         }
 
         /// <summary>
-        /// Called internally to notify when a proiperty changed.
+        /// Called internally to notify when a property changed.
         /// </summary>
         /// <param name="propertyName">Property name.</param>
         private void OnNotifyPropertyChanged(string propertyName)
@@ -309,7 +296,7 @@ private void OnNotifyPropertyChanged(string propertyName)
         }
 
         /// <summary>
-        /// A text span used to mark bold and highlighed segments.
+        /// A text span used to mark bold and highlighted segments.
         /// </summary>
         internal struct TextSpan
         {
@@ -330,15 +317,8 @@ internal struct TextSpan
             /// <param name="length">Index of the last character in the span.</param>
             internal TextSpan(int start, int length)
             {
-                if (start < 0)
-                {
-                    throw new ArgumentOutOfRangeException("start");
-                }
-
-                if (length < 1)
-                {
-                    throw new ArgumentOutOfRangeException("length");
-                }
+                ArgumentOutOfRangeException.ThrowIfNegative(start);
+                ArgumentOutOfRangeException.ThrowIfLessThan(length, 1);
 
                 this.start = start;
                 this.end = start + length - 1;
diff --git a/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphSearcher.cs b/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphSearcher.cs
index e71a27bac8b..c8b9907751d 100644
--- a/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphSearcher.cs
+++ b/src/Microsoft.Management.UI.Internal/HelpWindow/ParagraphSearcher.cs
@@ -43,8 +43,8 @@ internal ParagraphSearcher()
         /// <returns>The next highlight starting at the <paramref name="caretPosition"/>.</returns>
         internal Run MoveAndHighlightNextNextMatch(bool forward, TextPointer caretPosition)
         {
-            Debug.Assert(caretPosition != null, "a caret position is allways valid");
-            Debug.Assert(caretPosition.Parent != null && caretPosition.Parent is Run, "a caret PArent is allways a valid Run");
+            Debug.Assert(caretPosition != null, "a caret position is always valid");
+            Debug.Assert(caretPosition.Parent != null && caretPosition.Parent is Run, "a caret Parent is always a valid Run");
             Run caretRun = (Run)caretPosition.Parent;
 
             Run currentRun;
@@ -56,10 +56,10 @@ internal Run MoveAndHighlightNextNextMatch(bool forward, TextPointer caretPositi
             }
 
             // If the caret is in the end of a highlight we move to the adjacent run
-            // It has to be in the end because if there is a match at the begining of the file
+            // It has to be in the end because if there is a match at the beginning of the file
             // and the caret has not been touched (so it is in the beginning of the file too)
             // we want to highlight this first match.
-            // Considering the caller allways set the caret to the end of the highlight
+            // Considering the caller always set the caret to the end of the highlight
             // The condition below works well for successive searchs
             // We also need to move to the adjacent run if the caret is at the first run and we
             // are moving backwards so that a search backwards when the first run is highlighted
@@ -78,7 +78,7 @@ internal Run MoveAndHighlightNextNextMatch(bool forward, TextPointer caretPositi
 
             if (currentRun == null)
             {
-                // if we could not find a next highlight wrap arround
+                // if we could not find a next highlight wraparound
                 currentRun = ParagraphSearcher.GetFirstOrLastRun(caretRun, forward);
                 currentRun = ParagraphSearcher.GetNextMatch(currentRun, forward);
             }
@@ -86,7 +86,7 @@ internal Run MoveAndHighlightNextNextMatch(bool forward, TextPointer caretPositi
             this.currentHighlightedMatch = currentRun;
             if (this.currentHighlightedMatch != null)
             {
-                // restore the curent highligthed background to current highlighted
+                // restore the curent highlighted background to current highlighted
                 this.currentHighlightedMatch.Background = ParagraphSearcher.CurrentHighlightBrush;
             }
 
@@ -202,10 +202,10 @@ private static Paragraph GetParagraph(Run run)
         }
 
         /// <summary>
-        /// Returns true if the run is the fiorst run of the paragraph.
+        /// Returns true if the run is the first run of the paragraph.
         /// </summary>
         /// <param name="run">Run to check.</param>
-        /// <returns>True if the run is the fiorst run of the paragraph.</returns>
+        /// <returns>True if the run is the first run of the paragraph.</returns>
         private static bool IsFirstRun(Run run)
         {
             Paragraph paragraph = GetParagraph(run);
@@ -221,7 +221,7 @@ private static bool IsFirstRun(Run run)
         /// <returns>The first or last run in the paragraph containing <paramref name="caretRun"/>.</returns>
         private static Run GetFirstOrLastRun(Run caretRun, bool forward)
         {
-            Debug.Assert(caretRun != null, "a caret run is allways valid");
+            Debug.Assert(caretRun != null, "a caret run is always valid");
 
             Paragraph paragraph = GetParagraph(caretRun);
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/DataRoutedEventArgs.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/DataRoutedEventArgs.cs
index cf65462c3b4..f75555b1da4 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/DataRoutedEventArgs.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/DataRoutedEventArgs.cs
@@ -11,7 +11,7 @@ namespace Microsoft.Management.UI.Internal
 {
     /// <summary>
     /// Routed event args which provide the ability to attach an
-    /// arbitrary peice of data.
+    /// arbitrary piece of data.
     /// </summary>
     /// <typeparam name="T">There are no restrictions on type T.</typeparam>
     [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/DismissiblePopup.Generated.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/DismissiblePopup.Generated.cs
index 76e3206f1f5..3a2768b17b0 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/DismissiblePopup.Generated.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/DismissiblePopup.Generated.cs
@@ -11,7 +11,7 @@ namespace Microsoft.Management.UI.Internal
 {
 
     /// <summary>
-    /// A popup which child controls can signal to be dimissed.
+    /// A popup which child controls can signal to be dismissed.
     /// </summary>
     /// <remarks>
     /// If a control wants to dismiss the popup then they should execute the DismissPopupCommand on a target in the popup window.
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/IntegralConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/IntegralConverter.cs
index dff537f00bb..27c45ef288b 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/IntegralConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/IntegralConverter.cs
@@ -31,10 +31,7 @@ public class IntegralConverter : IMultiValueConverter
         /// </returns>
         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
-            if (values == null)
-            {
-                throw new ArgumentNullException("values");
-            }
+            ArgumentNullException.ThrowIfNull(values);
 
             if (values.Length != 2)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/InverseBooleanConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/InverseBooleanConverter.cs
index 55b57d76a3f..efefb08bae9 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/InverseBooleanConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/InverseBooleanConverter.cs
@@ -22,10 +22,7 @@ public class InverseBooleanConverter : IValueConverter
         /// <returns>The inverted boolean value.</returns>
         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
-            if (value == null)
-            {
-                throw new ArgumentNullException("value");
-            }
+            ArgumentNullException.ThrowIfNull(value);
 
             var boolValue = (bool)value;
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/IsEqualConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/IsEqualConverter.cs
index 83cd762198f..dbd806a64d6 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/IsEqualConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/IsEqualConverter.cs
@@ -31,10 +31,7 @@ public class IsEqualConverter : IMultiValueConverter
         /// </returns>
         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
-            if (values == null)
-            {
-                throw new ArgumentNullException("values");
-            }
+            ArgumentNullException.ThrowIfNull(values);
 
             if (values.Length != 2)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs
index 90684f3f6cc..386b33996c1 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/KeyboardHelp.cs
@@ -106,10 +106,10 @@ public static FocusNavigationDirection GetNavigationDirection(DependencyObject e
         /// <summary>
         /// Determines if the control key is pressed.
         /// </summary>
-        /// <returns>True if a control is is pressed.</returns>
+        /// <returns>True if a control is pressed.</returns>
         public static bool IsControlPressed()
         {
-            if (ModifierKeys.Control == (Keyboard.Modifiers & ModifierKeys.Control))
+            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
             {
                 return true;
             }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs
index 469ed5aec77..24ff69bc35b 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ListOrganizerItem.cs
@@ -153,7 +153,7 @@ private void RevertTextAndChangeFromEditToDisplayMode()
         private void ChangeFromEditToDisplayMode()
         {
             // NOTE : This is to resolve a race condition where clicking
-            // on the rename button causes the the edit box to change and
+            // on the rename button causes the edit box to change and
             // then have re-toggle.
             DependencyObject d = Mouse.DirectlyOver as DependencyObject;
             if (d == null || !(this.renameButton.IsAncestorOf(d) && Mouse.LeftButton == MouseButtonState.Pressed))
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ReadOnlyObservableAsyncCollection.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ReadOnlyObservableAsyncCollection.cs
index 7734bc4903c..99f08931aa4 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ReadOnlyObservableAsyncCollection.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ReadOnlyObservableAsyncCollection.cs
@@ -44,7 +44,7 @@ public ReadOnlyObservableAsyncCollection(IList<T> list)
         /// Occurs when the collection changes, either by adding or removing an item.
         /// </summary>
         /// <remarks>
-        /// see <seealso cref="INotifyCollectionChanged"/>
+        /// see <see cref="INotifyCollectionChanged"/>
         /// </remarks>
         public event NotifyCollectionChangedEventHandler CollectionChanged;
 
@@ -52,7 +52,7 @@ public ReadOnlyObservableAsyncCollection(IList<T> list)
         /// Occurs when a property changes.
         /// </summary>
         /// <remarks>
-        /// see <seealso cref="INotifyPropertyChanged"/>
+        /// see <see cref="INotifyPropertyChanged"/>
         /// </remarks>
         public event PropertyChangedEventHandler PropertyChanged;
         #endregion Events
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ScalableImage.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ScalableImage.cs
index b994bb1a29a..ea5f91adc87 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/ScalableImage.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/ScalableImage.cs
@@ -75,7 +75,7 @@ protected override void OnRender(DrawingContext drawingContext)
         }
 
         /// <summary>
-        /// Override of <seealso cref="UIElement.GetLayoutClip"/>.
+        /// Override of <see cref="UIElement.GetLayoutClip"/>.
         /// Make this control to respect the ClipToBounds attribute value.
         /// </summary>
         /// <param name="layoutSlotSize">An instance of <see cref="System.Windows.Size"/> used for calculating an additional clip.</param>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs
index be8cc841757..b1a82c0d079 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StateDescriptor.cs
@@ -12,7 +12,6 @@ namespace Microsoft.Management.UI.Internal
     /// Base proxy class for other classes which wish to have save and restore functionality.
     /// </summary>
     /// <typeparam name="T">There are no restrictions on T.</typeparam>
-    [Serializable]
     [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public abstract class StateDescriptor<T>
     {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StringFormatConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StringFormatConverter.cs
index a2e2b144ad6..d8cf0b253aa 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/StringFormatConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/StringFormatConverter.cs
@@ -23,10 +23,7 @@ public class StringFormatConverter : IValueConverter
         /// <returns>The formatted string.</returns>
         public object Convert(object value, Type targetType, Object parameter, CultureInfo culture)
         {
-            if (parameter == null)
-            {
-                throw new ArgumentNullException("parameter");
-            }
+            ArgumentNullException.ThrowIfNull(parameter);
 
             string str = (string)value;
             string formatString = (string)parameter;
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/Utilities.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/Utilities.cs
index c6bcfcb1737..9cc60c8411c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/Utilities.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/Utilities.cs
@@ -83,10 +83,7 @@ public static class Utilities
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public static bool AreAllItemsOfType<T>(IEnumerable items)
         {
-            if (items == null)
-            {
-                throw new ArgumentNullException("items");
-            }
+            ArgumentNullException.ThrowIfNull(items);
 
             foreach (object item in items)
             {
@@ -108,10 +105,7 @@ public static bool AreAllItemsOfType<T>(IEnumerable items)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public static T Find<T>(this IEnumerable items)
         {
-            if (items == null)
-            {
-                throw new ArgumentNullException("items");
-            }
+            ArgumentNullException.ThrowIfNull(items);
 
             foreach (object item in items)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/VisualToAncestorDataConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/VisualToAncestorDataConverter.cs
index 85a7d00a61f..868e9a9b25b 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/VisualToAncestorDataConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/VisualToAncestorDataConverter.cs
@@ -27,15 +27,9 @@ public class VisualToAncestorDataConverter : IValueConverter
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
         {
-            if (value == null)
-            {
-                throw new ArgumentNullException("value");
-            }
+            ArgumentNullException.ThrowIfNull(value);
 
-            if (parameter == null)
-            {
-                throw new ArgumentNullException("parameter");
-            }
+            ArgumentNullException.ThrowIfNull(parameter);
 
             Type dataType = (Type)parameter;
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WeakEventListener.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WeakEventListener.cs
index cc18509092f..d005dd909ee 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WeakEventListener.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WeakEventListener.cs
@@ -20,10 +20,7 @@ internal class WeakEventListener<TEventArgs> : IWeakEventListener where TEventAr
         /// <param name="handler">The handler for the event.</param>
         public WeakEventListener(EventHandler<TEventArgs> handler)
         {
-            if (handler == null)
-            {
-                throw new ArgumentNullException("handler");
-            }
+            ArgumentNullException.ThrowIfNull(handler);
 
             this.realHander = handler;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs
index 23ff80d9974..628723b089a 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/Common/WpfHelp.cs
@@ -153,10 +153,7 @@ public bool IsEmpty
         /// <exception cref="NotSupportedException">The specified value does not have a parent that supports removal.</exception>
         public static void RemoveFromParent(FrameworkElement element)
         {
-            if (element == null)
-            {
-                throw new ArgumentNullException("element");
-            }
+            ArgumentNullException.ThrowIfNull(element);
 
             // If the element has already been detached, do nothing \\
             if (element.Parent == null)
@@ -215,15 +212,9 @@ public static void RemoveFromParent(FrameworkElement element)
         /// <exception cref="NotSupportedException">The specified value does not have a parent that supports removal.</exception>
         public static void AddChild(FrameworkElement parent, FrameworkElement element)
         {
-            if (element == null)
-            {
-                throw new ArgumentNullException("element");
-            }
+            ArgumentNullException.ThrowIfNull(element);
 
-            if (parent == null)
-            {
-                throw new ArgumentNullException("element");
-            }
+            ArgumentNullException.ThrowIfNull(parent, nameof(element));
 
             ContentControl parentContentControl = parent as ContentControl;
 
@@ -310,10 +301,8 @@ public static List<T> FindVisualChildren<T>(DependencyObject obj)
             where T : DependencyObject
         {
             Debug.Assert(obj != null, "obj is null");
-            if (obj == null)
-            {
-                throw new ArgumentNullException("obj");
-            }
+
+            ArgumentNullException.ThrowIfNull(obj);
 
             List<T> childrenOfType = new List<T>();
 
@@ -348,10 +337,7 @@ public static List<T> FindVisualChildren<T>(DependencyObject obj)
         public static T FindVisualAncestorData<T>(this DependencyObject obj)
             where T : class
         {
-            if (obj == null)
-            {
-                throw new ArgumentNullException("obj");
-            }
+            ArgumentNullException.ThrowIfNull(obj);
 
             FrameworkElement parent = obj.FindVisualAncestor<FrameworkElement>();
 
@@ -381,10 +367,7 @@ public static T FindVisualAncestorData<T>(this DependencyObject obj)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public static T FindVisualAncestor<T>(this DependencyObject @object) where T : class
         {
-            if (@object == null)
-            {
-                throw new ArgumentNullException("object");
-            }
+            ArgumentNullException.ThrowIfNull(@object, nameof(@object));
 
             DependencyObject parent = VisualTreeHelper.GetParent(@object);
 
@@ -413,10 +396,7 @@ public static T FindVisualAncestor<T>(this DependencyObject @object) where T : c
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public static bool TryExecute(this RoutedCommand command, object parameter, IInputElement target)
         {
-            if (command == null)
-            {
-                throw new ArgumentNullException("command");
-            }
+            ArgumentNullException.ThrowIfNull(command);
 
             if (command.CanExecute(parameter, target))
             {
@@ -437,15 +417,8 @@ public static bool TryExecute(this RoutedCommand command, object parameter, IInp
         /// <returns>The reference to the child, or null if the template part wasn't found.</returns>
         public static T GetOptionalTemplateChild<T>(Control templateParent, string childName) where T : FrameworkElement
         {
-            if (templateParent == null)
-            {
-                throw new ArgumentNullException("templateParent");
-            }
-
-            if (string.IsNullOrEmpty(childName))
-            {
-                throw new ArgumentNullException("childName");
-            }
+            ArgumentNullException.ThrowIfNull(templateParent);
+            ArgumentException.ThrowIfNullOrEmpty(childName);
 
             object templatePart = templateParent.Template.FindName(childName, templateParent);
             T item = templatePart as T;
@@ -566,10 +539,7 @@ public static RoutedPropertyChangedEventArgs<T> CreateRoutedPropertyChangedEvent
         /// <exception cref="ArgumentOutOfRangeException">The specified index is not valid for the specified collection.</exception>
         public static void ChangeIndex(ItemCollection items, object item, int newIndex)
         {
-            if (items == null)
-            {
-                throw new ArgumentNullException("items");
-            }
+            ArgumentNullException.ThrowIfNull(items);
 
             if (!items.Contains(item))
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/ResizerGripThicknessConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/ResizerGripThicknessConverter.cs
index 4cdf51f63f6..c371a6391b5 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/ResizerGripThicknessConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/CommonControls/ResizerGripThicknessConverter.cs
@@ -38,10 +38,7 @@ public ResizerGripThicknessConverter()
         /// <returns>A converted value. If the method returns nullNothingnullptra null reference (Nothing in Visual Basic), the valid null value is used.</returns>
         public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
         {
-            if (values == null)
-            {
-                throw new ArgumentNullException("values");
-            }
+            ArgumentNullException.ThrowIfNull(values);
 
             if (object.ReferenceEquals(values[0], DependencyProperty.UnsetValue) ||
                 object.ReferenceEquals(values[1], DependencyProperty.UnsetValue))
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/DefaultFilterRuleCustomizationFactory.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/DefaultFilterRuleCustomizationFactory.cs
index bd5faf32d63..cd5e40a8bd9 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/DefaultFilterRuleCustomizationFactory.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/DefaultFilterRuleCustomizationFactory.cs
@@ -36,10 +36,7 @@ public override IPropertyValueGetter PropertyValueGetter
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 this.propertyValueGetter = value;
             }
@@ -106,15 +103,9 @@ public override ICollection<FilterRule> CreateDefaultFilterRulesForPropertyValue
         /// </param>
         public override void TransferValues(FilterRule oldRule, FilterRule newRule)
         {
-            if (oldRule == null)
-            {
-                throw new ArgumentNullException("oldRule");
-            }
+            ArgumentNullException.ThrowIfNull(oldRule);
 
-            if (newRule == null)
-            {
-                throw new ArgumentNullException("newRule");
-            }
+            ArgumentNullException.ThrowIfNull(newRule);
 
             if (this.TryTransferValuesAsSingleValueComparableValueFilterRule(oldRule, newRule))
             {
@@ -130,10 +121,7 @@ public override void TransferValues(FilterRule oldRule, FilterRule newRule)
         /// </param>
         public override void ClearValues(FilterRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             if (this.TryClearValueFromSingleValueComparableValueFilterRule(rule))
             {
@@ -163,10 +151,7 @@ public override void ClearValues(FilterRule rule)
         /// </returns>
         public override string GetErrorMessageForInvalidValue(string value, Type typeToParseTo)
         {
-            if (typeToParseTo == null)
-            {
-                throw new ArgumentNullException("typeToParseTo");
-            }
+            ArgumentNullException.ThrowIfNull(typeToParseTo);
 
             bool isNumericType = typeToParseTo == typeof(byte)
                 || typeToParseTo == typeof(sbyte)
@@ -222,10 +207,7 @@ private object GetValueFromValidatingValue(FilterRule rule, string propertyName)
             Debug.Assert(rule != null && !string.IsNullOrEmpty(propertyName), "rule and propertyname are not null");
 
             // NOTE: This isn't needed but OACR is complaining
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             Type ruleType = rule.GetType();
 
@@ -241,10 +223,7 @@ private void SetValueOnValidatingValue(FilterRule rule, string propertyName, obj
             Debug.Assert(rule != null && !string.IsNullOrEmpty(propertyName), "rule and propertyname are not null");
 
             // NOTE: This isn't needed but OACR is complaining
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             Type ruleType = rule.GetType();
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterEvaluator.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterEvaluator.cs
index 2b33153a983..cf885d813c5 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterEvaluator.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterEvaluator.cs
@@ -9,7 +9,7 @@
 namespace Microsoft.Management.UI.Internal
 {
     /// <summary>
-    /// The FilterEvaluator class is responsible for allowing the registeration of
+    /// The FilterEvaluator class is responsible for allowing the registration of
     /// the FilterExpressionProviders and producing a FilterExpression composed of
     /// the FilterExpression returned from the providers.
     /// </summary>
@@ -145,10 +145,7 @@ public FilterExpressionNode FilterExpression
         /// </param>
         public void AddFilterExpressionProvider(IFilterExpressionProvider provider)
         {
-            if (provider == null)
-            {
-                throw new ArgumentNullException("provider");
-            }
+            ArgumentNullException.ThrowIfNull(provider);
 
             this.filterExpressionProviders.Add(provider);
             provider.FilterExpressionChanged += this.FilterProvider_FilterExpressionChanged;
@@ -162,10 +159,7 @@ public void AddFilterExpressionProvider(IFilterExpressionProvider provider)
         /// </param>
         public void RemoveFilterExpressionProvider(IFilterExpressionProvider provider)
         {
-            if (provider == null)
-            {
-                throw new ArgumentNullException("provider");
-            }
+            ArgumentNullException.ThrowIfNull(provider);
 
             this.filterExpressionProviders.Remove(provider);
             provider.FilterExpressionChanged -= this.FilterProvider_FilterExpressionChanged;
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExceptionEventArgs.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExceptionEventArgs.cs
index b7a26757b21..77460f61fc9 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExceptionEventArgs.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExceptionEventArgs.cs
@@ -32,10 +32,7 @@ public Exception Exception
         /// </param>
         public FilterExceptionEventArgs(Exception exception)
         {
-            if (exception == null)
-            {
-                throw new ArgumentNullException("exception");
-            }
+            ArgumentNullException.ThrowIfNull(exception);
 
             this.Exception = exception;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionAndOperatorNode.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionAndOperatorNode.cs
index f255973dce8..0227362bf28 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionAndOperatorNode.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionAndOperatorNode.cs
@@ -52,10 +52,7 @@ public FilterExpressionAndOperatorNode()
         /// </param>
         public FilterExpressionAndOperatorNode(IEnumerable<FilterExpressionNode> children)
         {
-            if (children == null)
-            {
-                throw new ArgumentNullException("children");
-            }
+            ArgumentNullException.ThrowIfNull(children);
 
             this.children.AddRange(children);
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOperandNode.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOperandNode.cs
index f6bfd17377b..3161dc30283 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOperandNode.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOperandNode.cs
@@ -38,10 +38,7 @@ public FilterRule Rule
         /// </param>
         public FilterExpressionOperandNode(FilterRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             this.Rule = rule;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOrOperatorNode.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOrOperatorNode.cs
index 201316a433e..ff92e42cf2d 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOrOperatorNode.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterExpressionNodes/FilterExpressionOrOperatorNode.cs
@@ -52,10 +52,7 @@ public FilterExpressionOrOperatorNode()
         /// </param>
         public FilterExpressionOrOperatorNode(IEnumerable<FilterExpressionNode> children)
         {
-            if (children == null)
-            {
-                throw new ArgumentNullException("children");
-            }
+            ArgumentNullException.ThrowIfNull(children);
 
             this.children.AddRange(children);
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRuleCustomizationFactory.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRuleCustomizationFactory.cs
index 75019cdbf5d..b61c9933aef 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRuleCustomizationFactory.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRuleCustomizationFactory.cs
@@ -32,10 +32,7 @@ public static FilterRuleCustomizationFactory FactoryInstance
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 factoryInstance = value;
             }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/ComparableValueFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/ComparableValueFilterRule.cs
index e75cd59f17a..8362a035156 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/ComparableValueFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/ComparableValueFilterRule.cs
@@ -12,10 +12,26 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public abstract class ComparableValueFilterRule<T> : FilterRule where T : IComparable
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ComparableValueFilterRule{T}"/> class.
+        /// </summary>
+        protected ComparableValueFilterRule()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ComparableValueFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        protected ComparableValueFilterRule(ComparableValueFilterRule<T> source)
+            : base(source)
+        {
+            this.DefaultNullValueEvaluation = source.DefaultNullValueEvaluation;
+        }
+
         #region Properties
 
         /// <summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/DoesNotEqualFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/DoesNotEqualFilterRule.cs
index ea74ee062f9..c5d4f36fe55 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/DoesNotEqualFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/DoesNotEqualFilterRule.cs
@@ -12,12 +12,11 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class DoesNotEqualFilterRule<T> : EqualsFilterRule<T> where T : IComparable
     {
         /// <summary>
-        /// Initializes a new instance of the DoesNotEqualFilterRule class.
+        /// Initializes a new instance of the <see cref="DoesNotEqualFilterRule{T}"/> class.
         /// </summary>
         public DoesNotEqualFilterRule()
         {
@@ -25,6 +24,15 @@ public DoesNotEqualFilterRule()
             this.DefaultNullValueEvaluation = true;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="DoesNotEqualFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public DoesNotEqualFilterRule(DoesNotEqualFilterRule<T> source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if item is not equal to Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/EqualsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/EqualsFilterRule.cs
index 5f21f57292b..34a1ecb722d 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/EqualsFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/EqualsFilterRule.cs
@@ -13,18 +13,26 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class EqualsFilterRule<T> : SingleValueComparableValueFilterRule<T> where T : IComparable
     {
         /// <summary>
-        /// Initializes a new instance of the EqualsFilterRule class.
+        /// Initializes a new instance of the <see cref="EqualsFilterRule{T}"/> class.
         /// </summary>
         public EqualsFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_Equals;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="EqualsFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public EqualsFilterRule(EqualsFilterRule<T> source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if item is equal to Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRule.cs
index 1c2fc523e86..f18c89addf9 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRule.cs
@@ -8,9 +8,8 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// The base class for all filtering rules.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public abstract class FilterRule : IEvaluate
+    public abstract class FilterRule : IEvaluate, IDeepCloneable
     {
         /// <summary>
         /// Gets a value indicating whether the FilterRule can be
@@ -34,15 +33,26 @@ public string DisplayName
         }
 
         /// <summary>
-        /// Initializes a new instance of the FilterRule class.
+        /// Initializes a new instance of the <see cref="FilterRule"/> class.
         /// </summary>
         protected FilterRule()
         {
-            // HACK : Is there a way to statically enforce this? No... not ISerializable...
-            if (!this.GetType().IsSerializable)
-            {
-                throw new InvalidOperationException("FilterRules must be serializable.");
-            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        protected FilterRule(FilterRule source)
+        {
+            ArgumentNullException.ThrowIfNull(source);
+            this.DisplayName = source.DisplayName;
+        }
+
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public object DeepClone()
+        {
+            return Activator.CreateInstance(this.GetType(), new object[] { this });
         }
 
         /// <summary>
@@ -58,7 +68,6 @@ protected FilterRule()
         /// <summary>
         /// Occurs when the values of this rule changes.
         /// </summary>
-        [field: NonSerialized]
         public event EventHandler EvaluationResultInvalidated;
 
         /// <summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRuleExtensions.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRuleExtensions.cs
index 1ccc3d1d227..4a3f8dc2975 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRuleExtensions.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/FilterRuleExtensions.cs
@@ -2,10 +2,6 @@
 // Licensed under the MIT License.
 
 using System;
-using System.Diagnostics;
-using System.IO;
-using System.Runtime.Serialization;
-using System.Runtime.Serialization.Formatters.Binary;
 
 namespace Microsoft.Management.UI.Internal
 {
@@ -27,34 +23,8 @@ public static class FilterRuleExtensions
         /// </returns>
         public static FilterRule DeepCopy(this FilterRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
-
-            Debug.Assert(rule.GetType().IsSerializable, "rule is serializable");
-
-            BinaryFormatter formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
-            MemoryStream ms = new MemoryStream();
-
-            FilterRule copy = null;
-            try
-            {
-#pragma warning disable SYSLIB0011
-                formatter.Serialize(ms, rule);
-#pragma warning restore SYSLIB0011
-
-                ms.Position = 0;
-#pragma warning disable SYSLIB0011
-                copy = (FilterRule)formatter.Deserialize(ms);
-#pragma warning restore SYSLIB0011
-            }
-            finally
-            {
-                ms.Close();
-            }
-
-            return copy;
+            ArgumentNullException.ThrowIfNull(rule);
+            return (FilterRule)rule.DeepClone();
         }
     }
 }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsBetweenFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsBetweenFilterRule.cs
index b54508157a6..f51093510ec 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsBetweenFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsBetweenFilterRule.cs
@@ -15,7 +15,6 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsBetweenFilterRule<T> : ComparableValueFilterRule<T> where T : IComparable
     {
@@ -56,7 +55,7 @@ public ValidatingValue<T> EndValue
         #region Ctor
 
         /// <summary>
-        /// Initializes a new instance of the IsBetweenFilterRule class.
+        /// Initializes a new instance of the <see cref="IsBetweenFilterRule{T}"/> class.
         /// </summary>
         public IsBetweenFilterRule()
         {
@@ -69,6 +68,20 @@ public IsBetweenFilterRule()
             this.EndValue.PropertyChanged += this.Value_PropertyChanged;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IsBetweenFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public IsBetweenFilterRule(IsBetweenFilterRule<T> source)
+            : base(source)
+        {
+            this.StartValue = (ValidatingValue<T>)source.StartValue.DeepClone();
+            this.StartValue.PropertyChanged += this.Value_PropertyChanged;
+
+            this.EndValue = (ValidatingValue<T>)source.EndValue.DeepClone();
+            this.EndValue.PropertyChanged += this.Value_PropertyChanged;
+        }
+
         #endregion Ctor
 
         #region Public Methods
@@ -108,13 +121,6 @@ private void Value_PropertyChanged(object sender, PropertyChangedEventArgs e)
             }
         }
 
-        [OnDeserialized]
-        private void Initialize(StreamingContext context)
-        {
-            this.StartValue.PropertyChanged += this.Value_PropertyChanged;
-            this.EndValue.PropertyChanged += this.Value_PropertyChanged;
-        }
-
         #endregion Value Change Handlers
     }
 }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsEmptyFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsEmptyFilterRule.cs
index 8e8b91087ef..71bb7e23e7c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsEmptyFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsEmptyFilterRule.cs
@@ -9,18 +9,26 @@ namespace Microsoft.Management.UI.Internal
     /// The IsEmptyFilterRule evaluates an item to determine whether it
     /// is empty or not.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsEmptyFilterRule : FilterRule
     {
         /// <summary>
-        /// Initializes a new instance of the IsEmptyFilterRule class.
+        /// Initializes a new instance of the <see cref="IsEmptyFilterRule"/> class.
         /// </summary>
         public IsEmptyFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_IsEmpty;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IsEmptyFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public IsEmptyFilterRule(IsEmptyFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Gets a values indicating whether the supplied item is empty.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsGreaterThanFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsGreaterThanFilterRule.cs
index bd9af169e82..6c7d16f312a 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsGreaterThanFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsGreaterThanFilterRule.cs
@@ -13,18 +13,26 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsGreaterThanFilterRule<T> : SingleValueComparableValueFilterRule<T> where T : IComparable
     {
         /// <summary>
-        /// Initializes a new instance of the IsGreaterThanFilterRule class.
+        /// Initializes a new instance of the <see cref="IsGreaterThanFilterRule{T}"/> class.
         /// </summary>
         public IsGreaterThanFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_GreaterThanOrEqual;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IsGreaterThanFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public IsGreaterThanFilterRule(IsGreaterThanFilterRule<T> source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if item is greater than Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsLessThanFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsLessThanFilterRule.cs
index db3bc01f810..e1dc3268cc5 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsLessThanFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsLessThanFilterRule.cs
@@ -13,18 +13,26 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsLessThanFilterRule<T> : SingleValueComparableValueFilterRule<T> where T : IComparable
     {
         /// <summary>
-        /// Initializes a new instance of the IsLessThanFilterRule class.
+        /// Initializes a new instance of the <see cref="IsLessThanFilterRule{T}"/> class.
         /// </summary>
         public IsLessThanFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_LessThanOrEqual;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IsLessThanFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public IsLessThanFilterRule(IsLessThanFilterRule<T> source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if item is less than Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyFilterRule.cs
index c9bfc7519a0..711caee9874 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyFilterRule.cs
@@ -9,18 +9,26 @@ namespace Microsoft.Management.UI.Internal
     /// The IsNotEmptyFilterRule evaluates an item to determine whether it
     /// is empty or not.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsNotEmptyFilterRule : IsEmptyFilterRule
     {
         /// <summary>
-        /// Initializes a new instance of the IsNotEmptyFilterRule class.
+        /// Initializes a new instance of the <see cref="IsNotEmptyFilterRule"/> class.
         /// </summary>
         public IsNotEmptyFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_IsNotEmpty;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IsNotEmptyFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public IsNotEmptyFilterRule(IsNotEmptyFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Gets a values indicating whether the supplied item is not empty.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyValidationRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyValidationRule.cs
index 924ffc02af8..cb6eacaaff3 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyValidationRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/IsNotEmptyValidationRule.cs
@@ -8,7 +8,6 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// The IsNotEmptyValidationRule checks a value to see if a value is not empty.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class IsNotEmptyValidationRule : DataErrorInfoValidationRule
     {
@@ -51,6 +50,14 @@ public override DataErrorInfoValidationResult Validate(object value, System.Glob
             }
         }
 
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public override object DeepClone()
+        {
+            // Instance is stateless.
+            // return this;
+            return new IsNotEmptyValidationRule();
+        }
+
         #endregion Public Methods
 
         internal static bool IsStringNotEmpty(string value)
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs
index c29715419ce..8c32530be8c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertiesTextContainsFilterRule.cs
@@ -11,7 +11,6 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// Represents a filter rule that searches for text within properties on an object.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class PropertiesTextContainsFilterRule : TextFilterRule
     {
@@ -29,6 +28,17 @@ public PropertiesTextContainsFilterRule()
             this.EvaluationResultInvalidated += this.PropertiesTextContainsFilterRule_EvaluationResultInvalidated;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the  <see cref="PropertiesTextContainsFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public PropertiesTextContainsFilterRule(PropertiesTextContainsFilterRule source)
+            : base(source)
+        {
+            this.PropertyNames = new List<string>(source.PropertyNames);
+            this.EvaluationResultInvalidated += this.PropertiesTextContainsFilterRule_EvaluationResultInvalidated;
+        }
+
         /// <summary>
         /// Gets a collection of the names of properties to search in.
         /// </summary>
@@ -120,11 +130,5 @@ private void PropertiesTextContainsFilterRule_EvaluationResultInvalidated(object
         {
             this.OnEvaluationResultInvalidated();
         }
-
-        [OnDeserialized]
-        private void Initialize(StreamingContext context)
-        {
-            this.EvaluationResultInvalidated += this.PropertiesTextContainsFilterRule_EvaluationResultInvalidated;
-        }
     }
 }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertyValueSelectorFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertyValueSelectorFilterRule.cs
index e8927c74826..09c732970b0 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertyValueSelectorFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/PropertyValueSelectorFilterRule.cs
@@ -15,7 +15,6 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class PropertyValueSelectorFilterRule<T> : SelectorFilterRule where T : IComparable
     {
@@ -66,21 +65,6 @@ public PropertyValueSelectorFilterRule(string propertyName, string propertyDispl
         /// </param>
         public PropertyValueSelectorFilterRule(string propertyName, string propertyDisplayName, IEnumerable<FilterRule> rules)
         {
-            if (string.IsNullOrEmpty(propertyName))
-            {
-                throw new ArgumentNullException("propertyName");
-            }
-
-            if (string.IsNullOrEmpty(propertyDisplayName))
-            {
-                throw new ArgumentNullException("propertyDisplayName");
-            }
-
-            if (rules == null)
-            {
-                throw new ArgumentNullException("rules");
-            }
-
             this.PropertyName = propertyName;
             this.DisplayName = propertyDisplayName;
 
@@ -97,6 +81,17 @@ public PropertyValueSelectorFilterRule(string propertyName, string propertyDispl
             this.AvailableRules.DisplayNameConverter = new FilterRuleToDisplayNameConverter();
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PropertyValueSelectorFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public PropertyValueSelectorFilterRule(PropertyValueSelectorFilterRule<T> source)
+            : base(source)
+        {
+            this.PropertyName = source.PropertyName;
+            this.AvailableRules.DisplayNameConverter = new FilterRuleToDisplayNameConverter();
+        }
+
         #endregion Ctor
 
         #region Public Methods
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SelectorFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SelectorFilterRule.cs
index c67b1c993e5..d1627ee2281 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SelectorFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SelectorFilterRule.cs
@@ -9,7 +9,6 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// The SelectorFilterRule represents a rule composed of other rules.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class SelectorFilterRule : FilterRule
     {
@@ -40,7 +39,7 @@ public ValidatingSelectorValue<FilterRule> AvailableRules
         #region Ctor
 
         /// <summary>
-        /// Creates a new SelectorFilterRule instance.
+        /// Initializes a new instance of the <see cref="SelectorFilterRule"/> class.
         /// </summary>
         public SelectorFilterRule()
         {
@@ -48,6 +47,18 @@ public SelectorFilterRule()
             this.AvailableRules.SelectedValueChanged += this.AvailableRules_SelectedValueChanged;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SelectorFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public SelectorFilterRule(SelectorFilterRule source)
+            : base(source)
+        {
+            this.AvailableRules = (ValidatingSelectorValue<FilterRule>)source.AvailableRules.DeepClone();
+            this.AvailableRules.SelectedValueChanged += this.AvailableRules_SelectedValueChanged;
+            this.AvailableRules.SelectedValue.EvaluationResultInvalidated += this.SelectedValue_EvaluationResultInvalidated;
+        }
+
         #endregion Ctor
 
         #region Public Methods
@@ -86,8 +97,8 @@ protected void OnSelectedValueChanged(FilterRule oldValue, FilterRule newValue)
             FilterRuleCustomizationFactory.FactoryInstance.TransferValues(oldValue, newValue);
             FilterRuleCustomizationFactory.FactoryInstance.ClearValues(oldValue);
 
-            newValue.EvaluationResultInvalidated += this.SelectedValue_EvaluationResultInvalidated;
             oldValue.EvaluationResultInvalidated -= this.SelectedValue_EvaluationResultInvalidated;
+            newValue.EvaluationResultInvalidated += this.SelectedValue_EvaluationResultInvalidated;
 
             this.NotifyEvaluationResultInvalidated();
         }
@@ -101,13 +112,6 @@ private void SelectedValue_EvaluationResultInvalidated(object sender, EventArgs
 
         #region Private Methods
 
-        [OnDeserialized]
-        private void Initialize(StreamingContext context)
-        {
-            this.AvailableRules.SelectedValueChanged += this.AvailableRules_SelectedValueChanged;
-            this.AvailableRules.SelectedValue.EvaluationResultInvalidated += this.SelectedValue_EvaluationResultInvalidated;
-        }
-
         private void AvailableRules_SelectedValueChanged(object sender, PropertyChangedEventArgs<FilterRule> e)
         {
             this.OnSelectedValueChanged(e.OldValue, e.NewValue);
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SingleValueComparableValueFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SingleValueComparableValueFilterRule.cs
index 5aaabe58bfb..b26531943fc 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SingleValueComparableValueFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/SingleValueComparableValueFilterRule.cs
@@ -12,7 +12,6 @@ namespace Microsoft.Management.UI.Internal
     /// that take a single input and evaluate against IComparable values.
     /// </summary>
     /// <typeparam name="T">The generic parameter.</typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public abstract class SingleValueComparableValueFilterRule<T> : ComparableValueFilterRule<T> where T : IComparable
     {
@@ -44,7 +43,7 @@ public override bool IsValid
         #region Ctor
 
         /// <summary>
-        /// Initializes a new instance of the SingleValueComparableValueFilterRule class.
+        /// Initializes a new instance of the <see cref="SingleValueComparableValueFilterRule{T}"/> class.
         /// </summary>
         protected SingleValueComparableValueFilterRule()
         {
@@ -52,6 +51,17 @@ protected SingleValueComparableValueFilterRule()
             this.Value.PropertyChanged += this.Value_PropertyChanged;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SingleValueComparableValueFilterRule{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        protected SingleValueComparableValueFilterRule(SingleValueComparableValueFilterRule<T> source)
+            : base(source)
+        {
+            this.Value = (ValidatingValue<T>)source.Value.DeepClone();
+            this.Value.PropertyChanged += this.Value_PropertyChanged;
+        }
+
         #endregion Ctor
 
         private void Value_PropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -61,11 +71,5 @@ private void Value_PropertyChanged(object sender, PropertyChangedEventArgs e)
                 this.NotifyEvaluationResultInvalidated();
             }
         }
-
-        [OnDeserialized]
-        private void Initialize(StreamingContext context)
-        {
-            this.Value.PropertyChanged += this.Value_PropertyChanged;
-        }
     }
 }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs
index 9186827c5f5..beb4a29d23f 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextContainsFilterRule.cs
@@ -10,7 +10,6 @@ namespace Microsoft.Management.UI.Internal
     /// The TextContainsFilterRule class evaluates a string item to
     /// check if it is contains the rule's value within it.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextContainsFilterRule : TextFilterRule
     {
@@ -18,13 +17,22 @@ public class TextContainsFilterRule : TextFilterRule
         private static readonly string TextContainsWordsRegexPattern = WordBoundaryRegexPattern + TextContainsCharactersRegexPattern + WordBoundaryRegexPattern;
 
         /// <summary>
-        /// Initializes a new instance of the TextContainsFilterRule class.
+        /// Initializes a new instance of the <see cref="TextContainsFilterRule"/> class.
         /// </summary>
         public TextContainsFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_Contains;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextContainsFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextContainsFilterRule(TextContainsFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if Value is contained within data.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotContainFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotContainFilterRule.cs
index dcfeabff4c4..2cdbf1efcef 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotContainFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotContainFilterRule.cs
@@ -9,12 +9,11 @@ namespace Microsoft.Management.UI.Internal
     /// The TextDoesNotContainFilterRule class evaluates a string item to
     /// check if it is does not contain the rule's value within it.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextDoesNotContainFilterRule : TextContainsFilterRule
     {
         /// <summary>
-        /// Initializes a new instance of the TextDoesNotContainFilterRule class.
+        /// Initializes a new instance of the <see cref="TextDoesNotContainFilterRule"/> class.
         /// </summary>
         public TextDoesNotContainFilterRule()
         {
@@ -22,6 +21,15 @@ public TextDoesNotContainFilterRule()
             this.DefaultNullValueEvaluation = true;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextDoesNotContainFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextDoesNotContainFilterRule(TextDoesNotContainFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if Value is not contained within data.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotEqualFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotEqualFilterRule.cs
index 3666b17c2de..e74b371a7a6 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotEqualFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextDoesNotEqualFilterRule.cs
@@ -9,12 +9,11 @@ namespace Microsoft.Management.UI.Internal
     /// The TextDoesNotEqualFilterRule class evaluates a string item to
     /// check if it is not equal to the rule's value.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextDoesNotEqualFilterRule : TextEqualsFilterRule
     {
         /// <summary>
-        /// Initializes a new instance of the TextDoesNotEqualFilterRule class.
+        /// Initializes a new instance of the <see cref="TextDoesNotEqualFilterRule"/> class.
         /// </summary>
         public TextDoesNotEqualFilterRule()
         {
@@ -22,6 +21,15 @@ public TextDoesNotEqualFilterRule()
             this.DefaultNullValueEvaluation = true;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextDoesNotEqualFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextDoesNotEqualFilterRule(TextDoesNotEqualFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if data is not equal to Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs
index 45a9dd85386..d7f7e05c4b8 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEndsWithFilterRule.cs
@@ -10,7 +10,6 @@ namespace Microsoft.Management.UI.Internal
     /// The TextEndsWithFilterRule class evaluates a string item to
     /// check if it ends with the rule's value.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextEndsWithFilterRule : TextFilterRule
     {
@@ -18,13 +17,22 @@ public class TextEndsWithFilterRule : TextFilterRule
         private static readonly string TextEndsWithWordsRegexPattern = WordBoundaryRegexPattern + TextEndsWithCharactersRegexPattern;
 
         /// <summary>
-        /// Initializes a new instance of the TextEndsWithFilterRule class.
+        /// Initializes a new instance of the <see cref="TextEndsWithFilterRule"/> class.
         /// </summary>
         public TextEndsWithFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_TextEndsWith;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextEndsWithFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextEndsWithFilterRule(TextEndsWithFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if data ends with Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEqualsFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEqualsFilterRule.cs
index 6401506bf1d..a357575c6ab 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEqualsFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextEqualsFilterRule.cs
@@ -10,20 +10,28 @@ namespace Microsoft.Management.UI.Internal
     /// The TextEqualsFilterRule class evaluates a string item to
     /// check if it is equal to the rule's value.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextEqualsFilterRule : TextFilterRule
     {
         private static readonly string TextEqualsCharactersRegexPattern = "^{0}$";
 
         /// <summary>
-        /// Initializes a new instance of the TextEqualsFilterRule class.
+        /// Initializes a new instance of the <see cref="TextEqualsFilterRule"/> class.
         /// </summary>
         public TextEqualsFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_Equals;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextEqualsFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextEqualsFilterRule(TextEqualsFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if data is equal to Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs
index 3440935889f..eacbcb8d256 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextFilterRule.cs
@@ -13,7 +13,6 @@ namespace Microsoft.Management.UI.Internal
     /// The TextFilterRule class supports derived rules by offering services for
     /// evaluating string operations.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public abstract class TextFilterRule : SingleValueComparableValueFilterRule<string>
     {
@@ -62,7 +61,7 @@ public bool CultureInvariant
         }
 
         /// <summary>
-        /// Initializes a new instance of the TextFilterRule class.
+        /// Initializes a new instance of the <see cref="TextFilterRule"/> class.
         /// </summary>
         protected TextFilterRule()
         {
@@ -70,6 +69,17 @@ protected TextFilterRule()
             this.CultureInvariant = false;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the  <see cref="TextFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        protected TextFilterRule(TextFilterRule source)
+            : base(source)
+        {
+            this.IgnoreCase = source.IgnoreCase;
+            this.CultureInvariant = source.CultureInvariant;
+        }
+
         /// <summary>
         /// Gets the current value and determines whether it should be evaluated as an exact match.
         /// </summary>
@@ -101,15 +111,9 @@ protected internal string GetParsedValue(out bool evaluateAsExactMatch)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         protected internal string GetRegexPattern(string pattern, string exactMatchPattern)
         {
-            if (pattern == null)
-            {
-                throw new ArgumentNullException("pattern");
-            }
+            ArgumentNullException.ThrowIfNull(pattern);
 
-            if (exactMatchPattern == null)
-            {
-                throw new ArgumentNullException("exactMatchPattern");
-            }
+            ArgumentNullException.ThrowIfNull(exactMatchPattern);
 
             Debug.Assert(this.IsValid, "is valid");
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs
index 8cfdc7960d8..98eac2b9a41 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/FilterRules/TextStartsWithFilterRule.cs
@@ -10,7 +10,6 @@ namespace Microsoft.Management.UI.Internal
     /// The TextStartsWithFilterRule class evaluates a string item to
     /// check if it starts with the rule's value.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class TextStartsWithFilterRule : TextFilterRule
     {
@@ -18,13 +17,22 @@ public class TextStartsWithFilterRule : TextFilterRule
         private static readonly string TextStartsWithWordsRegexPattern = TextStartsWithCharactersRegexPattern + WordBoundaryRegexPattern;
 
         /// <summary>
-        /// Initializes a new instance of the TextStartsWithFilterRule class.
+        /// Initializes a new instance of the <see cref="TextStartsWithFilterRule"/> class.
         /// </summary>
         public TextStartsWithFilterRule()
         {
             this.DisplayName = UICultureResources.FilterRule_TextStartsWith;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TextStartsWithFilterRule"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public TextStartsWithFilterRule(TextStartsWithFilterRule source)
+            : base(source)
+        {
+        }
+
         /// <summary>
         /// Determines if data starts with Value.
         /// </summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IDeepCloneable.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IDeepCloneable.cs
new file mode 100644
index 00000000000..841a2424b51
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IDeepCloneable.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+namespace Microsoft.Management.UI.Internal
+{
+    /// <summary>
+    /// Defines a generalized method for creating a deep copy of an instance.
+    /// </summary>
+    internal interface IDeepCloneable
+    {
+        /// <summary>
+        /// Creates a deep copy of the current instance.
+        /// </summary>
+        /// <returns>A new object that is a deep copy of the current instance.</returns>
+        object DeepClone();
+    }
+}
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IEvaluate.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IEvaluate.cs
index f83f6b377aa..161f14d4537 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IEvaluate.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/IEvaluate.cs
@@ -13,7 +13,7 @@ public interface IEvaluate
     {
         /// <summary>
         /// Gets a values indicating whether the supplied item has meet the
-        /// criteria rule specificed by the rule.
+        /// criteria rule specified by the rule.
         /// </summary>
         /// <param name="item">
         /// The item to evaluate.
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingSelectorValue.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingSelectorValue.cs
index ed5389668e6..0fed0c42e65 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingSelectorValue.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingSelectorValue.cs
@@ -15,10 +15,40 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class ValidatingSelectorValue<T> : ValidatingValueBase
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ValidatingSelectorValue{T}"/> class.
+        /// </summary>
+        public ValidatingSelectorValue()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ValidatingSelectorValue{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public ValidatingSelectorValue(ValidatingSelectorValue<T> source)
+            : base(source)
+        {
+            availableValues.EnsureCapacity(source.availableValues.Count);
+            if (typeof(IDeepCloneable).IsAssignableFrom(typeof(T)))
+            {
+                foreach (var value in source.availableValues)
+                {
+                    availableValues.Add((T)((IDeepCloneable)value).DeepClone());
+                }
+            }
+            else
+            {
+                availableValues.AddRange(source.availableValues);
+            }
+
+            selectedIndex = source.selectedIndex;
+            displayNameConverter = source.displayNameConverter;
+        }
+
         #region Properties
 
         #region Consts
@@ -130,11 +160,6 @@ public IValueConverter DisplayNameConverter
 
             set
             {
-                if (value != null && !value.GetType().IsSerializable)
-                {
-                    throw new ArgumentException("The DisplayNameConverter must be serializable.", "value");
-                }
-
                 this.displayNameConverter = value;
             }
         }
@@ -148,13 +173,18 @@ public IValueConverter DisplayNameConverter
         /// <summary>
         /// Notifies listeners that the selected value has changed.
         /// </summary>
-        [field: NonSerialized]
         public event EventHandler<PropertyChangedEventArgs<T>> SelectedValueChanged;
 
         #endregion Events
 
         #region Public Methods
 
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public override object DeepClone()
+        {
+            return new ValidatingSelectorValue<T>(this);
+        }
+
         #region Validate
 
         /// <summary>
@@ -187,7 +217,7 @@ protected override DataErrorInfoValidationResult Validate(string columnName)
         {
             if (!columnName.Equals(SelectedIndexPropertyName, StringComparison.CurrentCulture))
             {
-                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not a valid column name.", columnName), "columnName");
+                throw new ArgumentException(string.Create(CultureInfo.CurrentCulture, $"{columnName} is not a valid column name."), "columnName");
             }
 
             if (!this.IsIndexWithinBounds(this.SelectedIndex))
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValue.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValue.cs
index cf9c553f6b4..437cb3be50e 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValue.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValue.cs
@@ -14,10 +14,26 @@ namespace Microsoft.Management.UI.Internal
     /// <typeparam name="T">
     /// The generic parameter.
     /// </typeparam>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class ValidatingValue<T> : ValidatingValueBase
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ValidatingValue{T}"/> class.
+        /// </summary>
+        public ValidatingValue()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ValidatingValue{T}"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        public ValidatingValue(ValidatingValue<T> source)
+            : base(source)
+        {
+            value = source.Value is IDeepCloneable deepClone ? deepClone.DeepClone() : source.Value;
+        }
+
         #region Properties
 
         #region Value
@@ -50,6 +66,12 @@ public object Value
 
         #region Public Methods
 
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public override object DeepClone()
+        {
+            return new ValidatingValue<T>(this);
+        }
+
         /// <summary>
         /// Gets the raw value cast/transformed into
         /// type T.
@@ -165,10 +187,7 @@ private bool TryGetCastValue(object rawValue, out T castValue)
         {
             castValue = default(T);
 
-            if (rawValue == null)
-            {
-                throw new ArgumentNullException("rawValue");
-            }
+            ArgumentNullException.ThrowIfNull(rawValue);
 
             if (typeof(T).IsEnum)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs
index f3959685349..a4ffb1af77c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidatingValueBase.cs
@@ -14,10 +14,30 @@ namespace Microsoft.Management.UI.Internal
     /// The ValidatingValueBase class provides basic services for base
     /// classes to support validation via the IDataErrorInfo interface.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public abstract class ValidatingValueBase : IDataErrorInfo, INotifyPropertyChanged
+    public abstract class ValidatingValueBase : IDataErrorInfo, INotifyPropertyChanged, IDeepCloneable
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ValidatingValueBase"/> class.
+        /// </summary>
+        protected ValidatingValueBase()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the  <see cref="ValidatingValueBase"/> class.
+        /// </summary>
+        /// <param name="source">The source to initialize from.</param>
+        protected ValidatingValueBase(ValidatingValueBase source)
+        {
+            ArgumentNullException.ThrowIfNull(source);
+            validationRules.EnsureCapacity(source.validationRules.Count);
+            foreach (var rule in source.validationRules)
+            {
+                validationRules.Add((DataErrorInfoValidationRule)rule.DeepClone());
+            }
+        }
+
         #region Properties
 
         #region ValidationRules
@@ -26,7 +46,6 @@ public abstract class ValidatingValueBase : IDataErrorInfo, INotifyPropertyChang
         private ReadOnlyCollection<DataErrorInfoValidationRule> readonlyValidationRules;
         private bool isValidationRulesCollectionDirty = true;
 
-        [field: NonSerialized]
         private DataErrorInfoValidationResult cachedValidationResult;
 
         /// <summary>
@@ -82,10 +101,7 @@ public string this[string columnName]
         {
             get
             {
-                if (string.IsNullOrEmpty(columnName))
-                {
-                    throw new ArgumentNullException("columnName");
-                }
+                ArgumentException.ThrowIfNullOrEmpty(columnName);
 
                 this.UpdateValidationResult(columnName);
                 return this.GetValidationResult().ErrorMessage;
@@ -123,7 +139,6 @@ public string Error
         /// <remarks>
         /// The listeners attached to this event are not serialized.
         /// </remarks>
-        [field: NonSerialized]
         public event PropertyChangedEventHandler PropertyChanged;
 
         #endregion PropertyChanged
@@ -132,6 +147,9 @@ public string Error
 
         #region Public Methods
 
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public abstract object DeepClone();
+
         #region AddValidationRule
 
         /// <summary>
@@ -140,10 +158,7 @@ public string Error
         /// <param name="rule">The validation rule to add.</param>
         public void AddValidationRule(DataErrorInfoValidationRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             this.validationRules.Add(rule);
 
@@ -161,10 +176,7 @@ public void AddValidationRule(DataErrorInfoValidationRule rule)
         /// <param name="rule">The rule to remove.</param>
         public void RemoveValidationRule(DataErrorInfoValidationRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             this.validationRules.Remove(rule);
 
@@ -223,7 +235,7 @@ internal DataErrorInfoValidationResult EvaluateValidationRules(object value, Sys
                 DataErrorInfoValidationResult result = rule.Validate(value, cultureInfo);
                 if (result == null)
                 {
-                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "DataErrorInfoValidationResult not returned by ValidationRule: {0}", rule.ToString()));
+                    throw new InvalidOperationException(string.Create(CultureInfo.CurrentCulture, $"DataErrorInfoValidationResult not returned by ValidationRule: {rule}"));
                 }
 
                 if (!result.IsValid)
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidationRules/DataErrorInfoValidationRule.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidationRules/DataErrorInfoValidationRule.cs
index 9b4a2b23d0d..a92916c0717 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidationRules/DataErrorInfoValidationRule.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterCore/ValidationRules/DataErrorInfoValidationRule.cs
@@ -8,9 +8,8 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// Provides a way to create a custom rule in order to check the validity of user input.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public abstract class DataErrorInfoValidationRule
+    public abstract class DataErrorInfoValidationRule : IDeepCloneable
     {
         /// <summary>
         /// When overridden in a derived class, performs validation checks on a value.
@@ -25,5 +24,8 @@ public abstract class DataErrorInfoValidationRule
         /// A DataErrorInfoValidationResult object.
         /// </returns>
         public abstract DataErrorInfoValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo);
+
+        /// <inheritdoc cref="IDeepCloneable.DeepClone()" />
+        public abstract object DeepClone();
     }
 }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanel.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanel.cs
index bcc9a01a92c..c3bb4042d53 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanel.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanel.cs
@@ -154,15 +154,9 @@ public FilterRulePanel()
         /// </param>
         public void AddFilterRulePanelItemContentTemplate(Type type, DataTemplate dataTemplate)
         {
-            if (type == null)
-            {
-                throw new ArgumentNullException("type");
-            }
+            ArgumentNullException.ThrowIfNull(type);
 
-            if (dataTemplate == null)
-            {
-                throw new ArgumentNullException("dataTemplate");
-            }
+            ArgumentNullException.ThrowIfNull(dataTemplate);
 
             this.filterRuleTemplateSelector.TemplateDictionary.Add(new KeyValuePair<Type, DataTemplate>(type, dataTemplate));
         }
@@ -176,10 +170,7 @@ public void AddFilterRulePanelItemContentTemplate(Type type, DataTemplate dataTe
         /// </param>
         public void RemoveFilterRulePanelItemContentTemplate(Type type)
         {
-            if (type == null)
-            {
-                throw new ArgumentNullException("type");
-            }
+            ArgumentNullException.ThrowIfNull(type);
 
             this.filterRuleTemplateSelector.TemplateDictionary.Remove(type);
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs
index dcec5022d98..68c22de5af9 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelController.cs
@@ -88,10 +88,7 @@ public FilterRulePanelController()
         /// </param>
         public void AddFilterRulePanelItem(FilterRulePanelItem item)
         {
-            if (item == null)
-            {
-                throw new ArgumentNullException("item");
-            }
+            ArgumentNullException.ThrowIfNull(item);
 
             int insertionIndex = this.GetInsertionIndex(item);
             this.filterRulePanelItems.Insert(insertionIndex, item);
@@ -116,10 +113,7 @@ private void Rule_EvaluationResultInvalidated(object sender, EventArgs e)
         /// </param>
         public void RemoveFilterRulePanelItem(FilterRulePanelItem item)
         {
-            if (item == null)
-            {
-                throw new ArgumentNullException("item");
-            }
+            ArgumentNullException.ThrowIfNull(item);
 
             item.Rule.EvaluationResultInvalidated -= this.Rule_EvaluationResultInvalidated;
 
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelItem.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelItem.cs
index a1a873cdbc7..ee6b124562c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelItem.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRulePanelItem.cs
@@ -25,7 +25,7 @@ public FilterRule Rule
         }
 
         /// <summary>
-        /// Gets a string that indentifies which group this
+        /// Gets a string that identifies which group this
         /// item belongs to.
         /// </summary>
         public string GroupId
@@ -79,15 +79,8 @@ protected internal set
         /// </param>
         public FilterRulePanelItem(FilterRule rule, string groupId)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
-
-            if (string.IsNullOrEmpty(groupId))
-            {
-                throw new ArgumentNullException("groupId");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
+            ArgumentException.ThrowIfNullOrEmpty(groupId);
 
             this.Rule = rule;
             this.GroupId = groupId;
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleTemplateSelector.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleTemplateSelector.cs
index fc40c3c5768..0381ef0e63c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleTemplateSelector.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleTemplateSelector.cs
@@ -26,7 +26,7 @@ public IDictionary<Type, DataTemplate> TemplateDictionary
         }
 
         /// <summary>
-        /// Selects a template based upon the type of the item and and the
+        /// Selects a template based upon the type of the item and the
         /// corresponding template that is registered in the TemplateDictionary.
         /// </summary>
         /// <param name="item">
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleToDisplayNameConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleToDisplayNameConverter.cs
index 07a4ed58f8b..972c19080e0 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleToDisplayNameConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/FilterRuleToDisplayNameConverter.cs
@@ -11,7 +11,6 @@ namespace Microsoft.Management.UI.Internal
     /// The FilterRuleToDisplayNameConverter is responsible for converting
     /// a FilterRule value to its DisplayName.
     /// </summary>
-    [Serializable]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class FilterRuleToDisplayNameConverter : IValueConverter
     {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/InputFieldBackgroundTextConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/InputFieldBackgroundTextConverter.cs
index 0017f2a4340..1295b933d5b 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/InputFieldBackgroundTextConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/InputFieldBackgroundTextConverter.cs
@@ -11,7 +11,7 @@
 namespace Microsoft.Management.UI.Internal
 {
     /// <summary>
-    /// The InputFieldBackgroundTextConverter is responsible for determing the
+    /// The InputFieldBackgroundTextConverter is responsible for determining the
     /// correct background text to display for a particular type of data.
     /// </summary>
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
@@ -40,10 +40,7 @@ public class InputFieldBackgroundTextConverter : IValueConverter
         /// </returns>
         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
         {
-            if (value == null)
-            {
-                throw new ArgumentNullException("value");
-            }
+            ArgumentNullException.ThrowIfNull(value);
 
             Type inputType = null;
             if (this.IsOfTypeValidatingValue(value))
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchBox.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchBox.cs
index 25830150939..b3345a10cf2 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchBox.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchBox.cs
@@ -86,10 +86,7 @@ public SearchTextParser Parser
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 this.parser = value;
             }
@@ -118,10 +115,7 @@ partial void OnClearTextExecutedImplementation(ExecutedRoutedEventArgs e)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         protected static FilterExpressionNode ConvertToFilterExpression(ICollection<SearchTextParseResult> searchBoxItems)
         {
-            if (searchBoxItems == null)
-            {
-                throw new ArgumentNullException("searchBoxItems");
-            }
+            ArgumentNullException.ThrowIfNull(searchBoxItems);
 
             if (searchBoxItems.Count == 0)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParseResult.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParseResult.cs
index 5fa5e3e7703..10843087587 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParseResult.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParseResult.cs
@@ -18,10 +18,7 @@ public class SearchTextParseResult
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public SearchTextParseResult(FilterRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             this.FilterRule = rule;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs
index 04ba32ece6d..2e0ac74e076 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/SearchTextParser.cs
@@ -45,10 +45,7 @@ public TextFilterRule FullTextRule
         public bool TryAddSearchableRule<T>(SelectorFilterRule selectorRule)
             where T : TextFilterRule
         {
-            if (selectorRule == null)
-            {
-                throw new ArgumentNullException("selectorRule");
-            }
+            ArgumentNullException.ThrowIfNull(selectorRule);
 
             T textRule = selectorRule.AvailableRules.AvailableValues.Find<T>();
 
@@ -193,25 +190,21 @@ protected class SearchableRule
             /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
             public SearchableRule(string uniqueId, SelectorFilterRule selectorFilterRule, TextFilterRule childRule)
             {
-                if (uniqueId == null)
-                {
-                    throw new ArgumentNullException("uniqueId");
-                }
+                ArgumentNullException.ThrowIfNull(uniqueId);
 
-                if (selectorFilterRule == null)
-                {
-                    throw new ArgumentNullException("selectorFilterRule");
-                }
+                ArgumentNullException.ThrowIfNull(selectorFilterRule);
 
-                if (childRule == null)
-                {
-                    throw new ArgumentNullException("childRule");
-                }
+                ArgumentNullException.ThrowIfNull(childRule);
 
                 this.UniqueId = uniqueId;
                 this.selectorFilterRule = selectorFilterRule;
                 this.childRule = childRule;
-                this.Pattern = string.Format(CultureInfo.InvariantCulture, "(?<{0}>){1}\\s*:\\s*{2}", uniqueId, Regex.Escape(selectorFilterRule.DisplayName), SearchTextParser.ValuePattern);
+                this.Pattern = string.Format(
+                    CultureInfo.InvariantCulture,
+                    "(?<{0}>){1}\\s*:\\s*{2}",
+                    uniqueId,
+                    Regex.Escape(selectorFilterRule.DisplayName),
+                    SearchTextParser.ValuePattern);
             }
 
             /// <summary>
@@ -240,10 +233,7 @@ public string Pattern
             /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
             public SelectorFilterRule GetRuleWithValueSet(string value)
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 SelectorFilterRule selectorRule = (SelectorFilterRule)this.selectorFilterRule.DeepCopy();
                 selectorRule.AvailableRules.SelectedIndex = this.selectorFilterRule.AvailableRules.AvailableValues.IndexOf(this.childRule);
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/ValidatingSelectorValueToDisplayNameConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/ValidatingSelectorValueToDisplayNameConverter.cs
index e8708b92a15..010fbbeef75 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/ValidatingSelectorValueToDisplayNameConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/FilterProviders/ValidatingSelectorValueToDisplayNameConverter.cs
@@ -38,10 +38,7 @@ public class ValidatingSelectorValueToDisplayNameConverter : IMultiValueConverte
         /// </returns>
         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
-            if (values == null)
-            {
-                throw new ArgumentNullException("values");
-            }
+            ArgumentNullException.ThrowIfNull(values);
 
             if (values.Length != 2)
             {
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs
index 470a7670860..05151330ea2 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ColumnPicker.xaml.cs
@@ -59,15 +59,9 @@ internal ColumnPicker(
             ICollection<InnerListColumn> availableColumns)
             : this()
         {
-            if (columns == null)
-            {
-                throw new ArgumentNullException("columns");
-            }
+            ArgumentNullException.ThrowIfNull(columns);
 
-            if (availableColumns == null)
-            {
-                throw new ArgumentNullException("availableColumns");
-            }
+            ArgumentNullException.ThrowIfNull(availableColumns);
 
             // Add visible columns to Selected list, preserving order
             // Note that availableColumns is not necessarily in the order
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/DefaultStringConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/DefaultStringConverter.cs
index cf85d79ae36..2d590904097 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/DefaultStringConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/DefaultStringConverter.cs
@@ -62,7 +62,9 @@ public string DefaultValue
         /// </remarks>
         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
-            if (values == null || values.Length != 1)
+            ArgumentNullException.ThrowIfNull(values);
+
+            if (values.Length != 1)
             {
                 throw new ArgumentNullException("values");
             }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/InnerListGridView.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/InnerListGridView.cs
index 73222cae639..2761dcf36da 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/InnerListGridView.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/InnerListGridView.cs
@@ -45,10 +45,7 @@ public InnerListGridView()
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         internal InnerListGridView(ObservableCollection<InnerListColumn> availableColumns)
         {
-            if (availableColumns == null)
-            {
-                throw new ArgumentNullException("availableColumns");
-            }
+            ArgumentNullException.ThrowIfNull(availableColumns);
 
             // Setting the AvailableColumns property won't trigger CollectionChanged, so we have to do it manually \\
             this.AvailableColumns = availableColumns;
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/Innerlist.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/Innerlist.cs
index 03c7acdf008..aa945a1d90c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/Innerlist.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/Innerlist.cs
@@ -93,7 +93,7 @@ public InnerList()
 
         /// <summary>
         /// Gets ItemsSource instead.
-        /// <seealso cref="InnerList"/> Does not support adding to Items.
+        /// <see cref="InnerList"/> Does not support adding to Items.
         /// </summary>
         [Browsable(false)]
         public new ItemCollection Items
@@ -191,10 +191,7 @@ public void RefreshColumns()
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public void ApplySort(InnerListColumn column, bool shouldScrollIntoView)
         {
-            if (column == null)
-            {
-                throw new ArgumentNullException("column");
-            }
+            ArgumentNullException.ThrowIfNull(column);
 
             // NOTE : By setting the column here, it will be used
             // later to set the sorted column when the UI state
@@ -296,7 +293,7 @@ protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldV
 
             this.itemsSourceIsEmpty = this.ItemsSource != null && this.ItemsSource.GetEnumerator().MoveNext() == false;
 
-            // A view can be created if there is data to auto-generate columns, or columns are added programatically \\
+            // A view can be created if there is data to auto-generate columns, or columns are added programmatically \\
             bool canCreateView = (this.ItemsSource != null) &&
                 (this.itemsSourceIsEmpty == false || this.AutoGenerateColumns == false);
 
@@ -355,7 +352,7 @@ protected override void OnKeyDown(KeyEventArgs e)
         {
             base.OnKeyDown(e);
 
-            if ((Key.Left == e.Key || Key.Right == e.Key) &&
+            if ((e.Key == Key.Left || e.Key == Key.Right) &&
                 Keyboard.Modifiers == ModifierKeys.None)
             {
                 // If pressing Left or Right on a column header, move the focus \\
@@ -388,8 +385,8 @@ private static void InnerList_OnViewChanged(DependencyObject obj, DependencyProp
                 throw new NotSupportedException(string.Format(
                     CultureInfo.InvariantCulture,
                    InvariantResources.ViewSetWithType,
-                   typeof(GridView).Name,
-                   typeof(InnerListGridView).Name));
+                   nameof(GridView),
+                   nameof(InnerListGridView)));
             }
 
             ((InnerList)obj).innerGrid = innerGrid;
@@ -405,7 +402,7 @@ private static NotSupportedException GetItemsException()
                 string.Format(
                     CultureInfo.InvariantCulture,
                     InvariantResources.NotSupportAddingToItems,
-                    typeof(InnerList).Name,
+                    nameof(InnerList),
                     ItemsControl.ItemsSourceProperty.Name));
         }
         #endregion static private methods
@@ -599,7 +596,7 @@ private string GetClipboardTextLineForSelectedItem(object value)
                     propertyValue = string.Empty;
                 }
 
-                entryText.AppendFormat(CultureInfo.CurrentCulture, "{0}\t", propertyValue);
+                entryText.Append(CultureInfo.CurrentCulture, $"{propertyValue}\t");
             }
 
             return entryText.ToString();
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs
index 841175c97da..bbfd3d8603c 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ManagementListStateDescriptor.cs
@@ -15,7 +15,6 @@ namespace Microsoft.Management.UI.Internal
     /// <summary>
     /// Allows the state of the ManagementList to be saved and restored.
     /// </summary>
-    [Serializable]
     [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
     public class ManagementListStateDescriptor : StateDescriptor<ManagementList>
     {
@@ -63,10 +62,7 @@ public ManagementListStateDescriptor(string name)
         /// </exception>
         public override void SaveState(ManagementList subject)
         {
-            if (subject == null)
-            {
-                throw new ArgumentNullException("subject");
-            }
+            ArgumentNullException.ThrowIfNull(subject);
 
             this.SaveColumns(subject);
             this.SaveSortOrder(subject);
@@ -100,10 +96,7 @@ public override void RestoreState(ManagementList subject)
         /// </exception>
         public void RestoreState(ManagementList subject, bool applyRestoredFilter)
         {
-            if (subject == null)
-            {
-                throw new ArgumentNullException("subject");
-            }
+            ArgumentNullException.ThrowIfNull(subject);
 
             // Clear the sort, otherwise restoring columns and filters may trigger extra sorting \\
             subject.List.ClearSort();
@@ -142,7 +135,7 @@ private static bool VerifyColumnsSavable(ManagementList subject, RetryActionCall
         /// </summary>
         /// <param name="subject">Target ManagementList.</param>
         /// <param name="callback">RetryActionAfterLoaded callback method.</param>
-        /// <returns>True iff columns restorable.</returns>
+        /// <returns>True if-and-only-if columns are restorable.</returns>
         /// <exception cref="InvalidOperationException">
         /// ManagementList.AutoGenerateColumns not supported.
         /// </exception>
@@ -471,7 +464,6 @@ private static void SetColumnWidth(GridViewColumn ilc, double width)
 
         #region Helper Classes
 
-        [Serializable]
         internal class ColumnStateDescriptor
         {
             private int index;
@@ -516,7 +508,6 @@ public double Width
             }
         }
 
-        [Serializable]
         internal class RuleStateDescriptor
         {
             /// <summary>
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueGetter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueGetter.cs
index 61a1a71938c..2e9326cd909 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueGetter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/PropertyValueGetter.cs
@@ -48,10 +48,7 @@ public virtual bool TryGetPropertyValue(string propertyName, object value, out o
                 throw new ArgumentException("propertyName is empty", "propertyName");
             }
 
-            if (value == null)
-            {
-                throw new ArgumentNullException("value");
-            }
+            ArgumentNullException.ThrowIfNull(value);
 
             PropertyDescriptor descriptor = this.GetPropertyDescriptor(propertyName, value);
             if (descriptor == null)
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ViewGroupToStringConverter.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ViewGroupToStringConverter.cs
index c69cd8e0c08..22741a7031b 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ViewGroupToStringConverter.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/ViewGroupToStringConverter.cs
@@ -35,7 +35,7 @@ public object Convert(object value, Type targetType, object parameter, System.Gl
             }
 
             string name = (!string.IsNullOrEmpty(cvg.Name.ToString())) ? cvg.Name.ToString() : UICultureResources.GroupTitleNone;
-            string display = string.Format(CultureInfo.CurrentCulture, "{0} ({1})", name, cvg.ItemCount);
+            string display = string.Create(CultureInfo.CurrentCulture, $"{name} ({cvg.ItemCount})");
 
             return display;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/innerlistcolumn.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/innerlistcolumn.cs
index 9f91f2b74e8..965a66239d0 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/innerlistcolumn.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/innerlistcolumn.cs
@@ -68,10 +68,7 @@ public InnerListColumn(UIPropertyGroupDescription dataDescription, bool isVisibl
         /// <param name="createDefaultBinding">Whether the column should create a default binding using the specified data's property.</param>
         public InnerListColumn(UIPropertyGroupDescription dataDescription, bool isVisible, bool createDefaultBinding)
         {
-            if (dataDescription == null)
-            {
-                throw new ArgumentNullException("dataDescription");
-            }
+            ArgumentNullException.ThrowIfNull(dataDescription);
 
             GridViewColumnHeader header = new GridViewColumnHeader();
             header.Content = dataDescription.DisplayContent;
diff --git a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/managementlist.cs b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/managementlist.cs
index 7c36244e0f1..4ac51c702d8 100644
--- a/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/managementlist.cs
+++ b/src/Microsoft.Management.UI.Internal/ManagementList/ManagementList/managementlist.cs
@@ -50,10 +50,7 @@ public IStateDescriptorFactory<ManagementList> SavedViewFactory
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 this.savedViewFactory = value;
             }
@@ -177,10 +174,7 @@ private void Evaluator_PropertyChanged(object sender, PropertyChangedEventArgs e
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public void AddColumn(InnerListColumn column)
         {
-            if (column == null)
-            {
-                throw new ArgumentNullException("column");
-            }
+            ArgumentNullException.ThrowIfNull(column);
 
             this.AddColumn(column, this.IsFilterShown);
         }
@@ -193,10 +187,7 @@ public void AddColumn(InnerListColumn column)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public void AddColumn(InnerListColumn column, bool addDefaultFilterRules)
         {
-            if (column == null)
-            {
-                throw new ArgumentNullException("column");
-            }
+            ArgumentNullException.ThrowIfNull(column);
 
             this.List.Columns.Add(column);
 
@@ -229,10 +220,7 @@ public void AddColumn(InnerListColumn column, bool addDefaultFilterRules)
         /// <exception cref="ArgumentNullException">The specified value is a null reference.</exception>
         public void AddRule(FilterRule rule)
         {
-            if (rule == null)
-            {
-                throw new ArgumentNullException("rule");
-            }
+            ArgumentNullException.ThrowIfNull(rule);
 
             this.AddFilterRulePicker.ShortcutFilterRules.Add(new AddFilterRulePickerItem(new FilterRulePanelItem(rule, rule.DisplayName)));
         }
diff --git a/src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj b/src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj
index 72eb8d6572f..6db4395d720 100644
--- a/src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj
+++ b/src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj
@@ -5,13 +5,11 @@
     <NoWarn>$(NoWarn);CS1570</NoWarn>
     <RootNamespace>Microsoft.Management.UI.Internal</RootNamespace>
     <AssemblyName>Microsoft.PowerShell.GraphicalHost</AssemblyName>
-    <UseWPF>True</UseWPF>
+    <RunAnalyzers>false</RunAnalyzers>
     <TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
-    <TargetPlatformVersion>7.0</TargetPlatformVersion>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
+    <TargetPlatformVersion>8.0</TargetPlatformVersion>
+    <UseWindowsForms>true</UseWindowsForms>
+    <UseWPF>True</UseWPF>
   </PropertyGroup>
 
   <ItemGroup>
@@ -33,4 +31,10 @@
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
     <ProjectReference Include="..\Microsoft.PowerShell.Commands.Utility\Microsoft.PowerShell.Commands.Utility.csproj" />
   </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/MultipleSelectionControl.xaml.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/MultipleSelectionControl.xaml.cs
index 54dcf1896ff..f57d5dfda51 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/MultipleSelectionControl.xaml.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/MultipleSelectionControl.xaml.cs
@@ -43,7 +43,7 @@ private void ButtonBrowse_Click(object sender, RoutedEventArgs e)
 
             foreach (object selectedItem in multipleSelectionDialog.listboxParameter.SelectedItems)
             {
-                newComboText.AppendFormat(CultureInfo.InvariantCulture, "{0},", selectedItem.ToString());
+                newComboText.Append(CultureInfo.InvariantCulture, $"{selectedItem},");
             }
 
             if (newComboText.Length > 1)
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ParameterSetControl.xaml.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ParameterSetControl.xaml.cs
index 08f9df29337..6efef65eec6 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ParameterSetControl.xaml.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ParameterSetControl.xaml.cs
@@ -94,7 +94,7 @@ private static CheckBox CreateCheckBox(ParameterViewModel parameterViewModel, in
             //// Add AutomationProperties.AutomationId for Ui Automation test.
             checkBox.SetValue(
                 System.Windows.Automation.AutomationProperties.AutomationIdProperty,
-                string.Format(CultureInfo.CurrentCulture, "chk{0}", parameterViewModel.Name));
+                string.Create(CultureInfo.CurrentCulture, $"chk{parameterViewModel.Name}"));
 
             checkBox.SetValue(
                 System.Windows.Automation.AutomationProperties.NameProperty,
@@ -124,10 +124,7 @@ private static ComboBox CreateComboBoxControl(ParameterViewModel parameterViewMo
             Binding selectedItemBinding = new Binding("Value");
             comboBox.SetBinding(ComboBox.SelectedItemProperty, selectedItemBinding);
 
-            string automationId = string.Format(
-                    CultureInfo.CurrentCulture,
-                    "combox{0}",
-                    parameterViewModel.Name);
+            string automationId = string.Create(CultureInfo.CurrentCulture, $"combox{parameterViewModel.Name}");
 
             //// Add AutomationProperties.AutomationId for Ui Automation test.
             comboBox.SetValue(
@@ -164,7 +161,7 @@ private static MultipleSelectionControl CreateMultiSelectComboControl(ParameterV
             multiControls.comboxParameter.SetBinding(ComboBox.TextProperty, valueBinding);
 
             // Add AutomationProperties.AutomationId for Ui Automation test.
-            multiControls.SetValue(System.Windows.Automation.AutomationProperties.AutomationIdProperty, string.Format("combox{0}", parameterViewModel.Name));
+            multiControls.SetValue(System.Windows.Automation.AutomationProperties.AutomationIdProperty, string.Create(CultureInfo.CurrentCulture, $"combox{parameterViewModel.Name}"));
 
             multiControls.comboxParameter.SetValue(
                 System.Windows.Automation.AutomationProperties.NameProperty,
@@ -206,7 +203,7 @@ private static TextBox CreateTextBoxControl(ParameterViewModel parameterViewMode
             //// Add AutomationProperties.AutomationId for UI Automation test.
             textBox.SetValue(
                 System.Windows.Automation.AutomationProperties.AutomationIdProperty,
-                string.Format(CultureInfo.CurrentCulture, "txt{0}", parameterViewModel.Name));
+                string.Create(CultureInfo.CurrentCulture, $"txt{parameterViewModel.Name}"));
 
             textBox.SetValue(
                 System.Windows.Automation.AutomationProperties.NameProperty,
@@ -366,7 +363,7 @@ private void AddControlToMainGrid(UIElement uiControl)
         }
 
         /// <summary>
-        /// Creates a Lable control and add it to MainGrid.
+        /// Creates a Label control and add it to MainGrid.
         /// </summary>
         /// <param name="parameterViewModel">DataContext object.</param>
         /// <param name="rowNumber">Row number.</param>
@@ -397,7 +394,7 @@ private Label CreateLabel(ParameterViewModel parameterViewModel, int rowNumber)
             //// Add AutomationProperties.AutomationId for Ui Automation test.
             label.SetValue(
                 System.Windows.Automation.AutomationProperties.AutomationIdProperty,
-                string.Format(CultureInfo.CurrentCulture, "lbl{0}", parameterViewModel.Name));
+                string.Create(CultureInfo.CurrentCulture, $"lbl{parameterViewModel.Name}"));
 
             return label;
         }
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ShowModuleControl.xaml.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ShowModuleControl.xaml.cs
index 440eb329f39..4bdaa32fd9f 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ShowModuleControl.xaml.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/Controls/ShowModuleControl.xaml.cs
@@ -47,8 +47,8 @@ public Window Owner
         /// it will select the item under it, but if you keep the mouse button down and move the mouse
         /// (if the list supported drag and drop, the mouse action would be the same as dragging) it
         /// will select other list items.
-        /// If the first selection change causes  details for the item to be displayed and resizes the list
-        /// the selection can skip to another list item it happend to be over as the list got resized.
+        /// If the first selection change causes details for the item to be displayed and resizes the list,
+        /// the selection can skip to another list item that happens to be over as the list got resized.
         /// In summary, resizing the list on selection can cause a selection bug. If the user selects an
         /// item in the end of the list the next item downwards can be selected.
         /// The WPF drag-and-select feature is not a standard win32 list behavior, and we can do without it
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/AllModulesViewModel.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/AllModulesViewModel.cs
index 34159c8f837..04fc95e4223 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/AllModulesViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/AllModulesViewModel.cs
@@ -79,7 +79,9 @@ public class AllModulesViewModel : INotifyPropertyChanged
         /// <param name="commands">Commands to show.</param>
         public AllModulesViewModel(Dictionary<string, ShowCommandModuleInfo> importedModules, IEnumerable<ShowCommandCommandInfo> commands)
         {
-            if (commands == null || !commands.GetEnumerator().MoveNext())
+            ArgumentNullException.ThrowIfNull(commands);
+
+            if (!commands.GetEnumerator().MoveNext())
             {
                 throw new ArgumentNullException("commands");
             }
@@ -95,10 +97,7 @@ public AllModulesViewModel(Dictionary<string, ShowCommandModuleInfo> importedMod
         /// <param name="noCommonParameter">True not to show common parameters.</param>
         public AllModulesViewModel(Dictionary<string, ShowCommandModuleInfo> importedModules, IEnumerable<ShowCommandCommandInfo> commands, bool noCommonParameter)
         {
-            if (commands == null)
-            {
-                throw new ArgumentNullException("commands");
-            }
+            ArgumentNullException.ThrowIfNull(commands);
 
             this.Initialization(importedModules, commands, noCommonParameter);
         }
@@ -530,7 +529,7 @@ private void Initialization(Dictionary<string, ShowCommandModuleInfo> importedMo
                 return;
             }
 
-            // If there are more modules, create an additional module to agregate all commands
+            // If there are more modules, create an additional module to aggregate all commands
             ModuleViewModel allCommandsModule = new ModuleViewModel(ShowCommandResources.All, null);
             this.modules.Add(allCommandsModule);
             allCommandsModule.SetAllModules(this);
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/CommandViewModel.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/CommandViewModel.cs
index e5eb1be800d..cfa2798963c 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/CommandViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/CommandViewModel.cs
@@ -431,19 +431,19 @@ public string GetScript()
 
             if (commandName.Contains(' '))
             {
-                builder.AppendFormat("& \"{0}\"", commandName);
+                builder.Append($"& \"{commandName}\"");
             }
             else
             {
                 builder.Append(commandName);
             }
 
-            builder.Append(" ");
+            builder.Append(' ');
 
             if (this.SelectedParameterSet != null)
             {
                 builder.Append(this.SelectedParameterSet.GetScript());
-                builder.Append(" ");
+                builder.Append(' ');
             }
 
             if (this.CommonParameters != null)
@@ -457,7 +457,7 @@ public string GetScript()
         }
 
         /// <summary>
-        /// Showing help information for current actived cmdlet.
+        /// Showing help information for current active cmdlet.
         /// </summary>
         public void OpenHelpWindow()
         {
@@ -465,7 +465,7 @@ public void OpenHelpWindow()
         }
 
         /// <summary>
-        /// Determins whether current command name and a specifed ParameterSetName have same name.
+        /// Determines whether current command name and a specified ParameterSetName have same name.
         /// </summary>
         /// <param name="name">The name of ShareParameterSet.</param>
         /// <returns>Return true is ShareParameterSet. Else return false.</returns>
@@ -490,10 +490,7 @@ internal static bool IsSharedParameterSetName(string name)
         /// <returns>The CommandViewModel corresponding to commandInfo.</returns>
         internal static CommandViewModel GetCommandViewModel(ModuleViewModel module, ShowCommandCommandInfo commandInfo, bool noCommonParameters)
         {
-            if (commandInfo == null)
-            {
-                throw new ArgumentNullException("commandInfo");
-            }
+            ArgumentNullException.ThrowIfNull(commandInfo);
 
             CommandViewModel returnValue = new CommandViewModel();
             returnValue.commandInfo = commandInfo;
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ModuleViewModel.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ModuleViewModel.cs
index 38925e458a9..950dbe93758 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ModuleViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ModuleViewModel.cs
@@ -67,10 +67,7 @@ public class ModuleViewModel : INotifyPropertyChanged
         /// <param name="importedModules">All loaded modules.</param>
         public ModuleViewModel(string name, Dictionary<string, ShowCommandModuleInfo> importedModules)
         {
-            if (name == null)
-            {
-                throw new ArgumentNullException("name");
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
             this.name = name;
             this.commands = new List<CommandViewModel>();
@@ -373,7 +370,7 @@ internal void RefreshFilteredCommands(string filter)
         }
 
         /// <summary>
-        /// Callled in response to a GUI event that requires the command to be run.
+        /// Called in response to a GUI event that requires the command to be run.
         /// </summary>
         internal void OnRunSelectedCommand()
         {
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterSetViewModel.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterSetViewModel.cs
index 756f58c62c8..b4f42dd78a2 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterSetViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterSetViewModel.cs
@@ -39,21 +39,15 @@ public class ParameterSetViewModel : INotifyPropertyChanged
         /// Initializes a new instance of the ParameterSetViewModel class.
         /// </summary>
         /// <param name="name">The name of the parameterSet.</param>
-        /// <param name="parameters">The array parametes of the parameterSet.</param>
+        /// <param name="parameters">The array parameters of the parameterSet.</param>
         [SuppressMessage("Microsoft.Design", "CA1002:DoNotExposeGenericLists", Justification = "this type is internal, made public only for WPF Binding")]
         public ParameterSetViewModel(
             string name,
             List<ParameterViewModel> parameters)
         {
-            if (name == null)
-            {
-                throw new ArgumentNullException("name");
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
-            if (parameters == null)
-            {
-                throw new ArgumentNullException("parameters");
-            }
+            ArgumentNullException.ThrowIfNull(parameters);
 
             parameters.Sort(Compare);
 
@@ -144,7 +138,7 @@ public string GetScript()
                 {
                     if (((bool?)parameter.Value) == true)
                     {
-                        builder.AppendFormat("-{0} ", parameter.Name);
+                        builder.Append($"-{parameter.Name} ");
                     }
 
                     continue;
@@ -172,7 +166,7 @@ public string GetScript()
                     parameterValueString = ParameterSetViewModel.GetDelimitedParameter(parameterValueString, "(", ")");
                 }
 
-                builder.AppendFormat("-{0} {1} ", parameter.Name, parameterValueString);
+                builder.Append($"-{parameter.Name} {parameterValueString} ");
             }
 
             return builder.ToString().Trim();
@@ -232,12 +226,12 @@ internal static int Compare(ParameterViewModel source, ParameterViewModel target
         #endregion
 
         /// <summary>
-        /// Gets the delimited poarameter if it needs delimitation and is not delimited.
+        /// Gets the delimited parameter if it needs delimitation and is not delimited.
         /// </summary>
         /// <param name="parameterValue">Value needing delimitation.</param>
         /// <param name="openDelimiter">Open delimitation.</param>
         /// <param name="closeDelimiter">Close delimitation.</param>
-        /// <returns>The delimited poarameter if it needs delimitation and is not delimited.</returns>
+        /// <returns>The delimited parameter if it needs delimitation and is not delimited.</returns>
         private static string GetDelimitedParameter(string parameterValue, string openDelimiter, string closeDelimiter)
         {
             string parameterValueTrimmed = parameterValue.Trim();
diff --git a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterViewModel.cs b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterViewModel.cs
index 2c6931eb08e..93227df87a1 100644
--- a/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterViewModel.cs
+++ b/src/Microsoft.Management.UI.Internal/ShowCommand/ViewModel/ParameterViewModel.cs
@@ -48,15 +48,9 @@ public class ParameterViewModel : INotifyPropertyChanged
         /// <param name="parameterSetName">The name of the parameter set this parameter is in.</param>
         public ParameterViewModel(ShowCommandParameterInfo parameter, string parameterSetName)
         {
-            if (parameter == null)
-            {
-                throw new ArgumentNullException("parameter");
-            }
+            ArgumentNullException.ThrowIfNull(parameter);
 
-            if (parameterSetName == null)
-            {
-                throw new ArgumentNullException("parameterSetName");
-            }
+            ArgumentNullException.ThrowIfNull(parameterSetName);
 
             this.parameter = parameter;
             this.parameterSetName = parameterSetName;
@@ -165,7 +159,7 @@ public string NameCheckLabel
                 string returnValue = this.Parameter.Name;
                 if (this.Parameter.IsMandatory)
                 {
-                    returnValue = string.Format(CultureInfo.CurrentUICulture, "{0}{1}", returnValue, ShowCommandResources.MandatoryLabelSegment);
+                    returnValue = string.Create(CultureInfo.CurrentUICulture, $"{returnValue}{ShowCommandResources.MandatoryLabelSegment}");
                 }
 
                 return returnValue;
diff --git a/src/Microsoft.Management.UI.Internal/commandHelpers/HelpWindowHelper.cs b/src/Microsoft.Management.UI.Internal/commandHelpers/HelpWindowHelper.cs
index efed820e71c..e0b036a93d0 100644
--- a/src/Microsoft.Management.UI.Internal/commandHelpers/HelpWindowHelper.cs
+++ b/src/Microsoft.Management.UI.Internal/commandHelpers/HelpWindowHelper.cs
@@ -13,7 +13,7 @@
 namespace Microsoft.PowerShell.Commands.Internal
 {
     /// <summary>
-    /// Implements thw WPF window part of the the ShowWindow option of get-help.
+    /// Implements the WPF window part of the ShowWindow option of get-help.
     /// </summary>
     internal static class HelpWindowHelper
     {
diff --git a/src/Microsoft.Management.UI.Internal/commandHelpers/OutGridView.cs b/src/Microsoft.Management.UI.Internal/commandHelpers/OutGridView.cs
index 85ecd95a36f..81621624992 100644
--- a/src/Microsoft.Management.UI.Internal/commandHelpers/OutGridView.cs
+++ b/src/Microsoft.Management.UI.Internal/commandHelpers/OutGridView.cs
@@ -6,6 +6,7 @@
 using System.Collections.ObjectModel;
 using System.Diagnostics.CodeAnalysis;
 using System.Management.Automation;
+using System.Management.Automation.Internal;
 using System.Threading;
 using System.Windows;
 using System.Windows.Automation;
@@ -213,7 +214,7 @@ private void ZoomEventHandlerPlus(object sender, ExecutedRoutedEventArgs e)
 
             if (this.zoomLevel < ZOOM_MAX)
             {
-                this.zoomLevel = this.zoomLevel + ZOOM_INCREMENT;
+                this.zoomLevel += ZOOM_INCREMENT;
                 Grid g = this.gridViewWindow.Content as Grid;
 
                 if (g != null)
@@ -232,7 +233,7 @@ private void ZoomEventHandlerMinus(object sender, ExecutedRoutedEventArgs e)
         {
             if (this.zoomLevel >= ZOOM_MIN)
             {
-                this.zoomLevel = this.zoomLevel - ZOOM_INCREMENT;
+                this.zoomLevel -= ZOOM_INCREMENT;
                 Grid g = this.gridViewWindow.Content as Grid;
                 if (g != null)
                 {
@@ -496,6 +497,16 @@ private void AddItem(PSObject value)
                     {
                         try
                         {
+                            // Remove any potential ANSI decoration
+                            foreach (var property in value.Properties)
+                            {
+                                if (property.Value is string str)
+                                {
+                                    StringDecorated decoratedString = new StringDecorated(str);
+                                    property.Value = decoratedString.ToString(OutputRendering.PlainText);
+                                }
+                            }
+
                             this.listItems.Add(value);
                         }
                         catch (Exception e)
diff --git a/src/Microsoft.Management.UI.Internal/commandHelpers/ShowCommandHelper.cs b/src/Microsoft.Management.UI.Internal/commandHelpers/ShowCommandHelper.cs
index 5d401fc94c6..10690b65dc7 100644
--- a/src/Microsoft.Management.UI.Internal/commandHelpers/ShowCommandHelper.cs
+++ b/src/Microsoft.Management.UI.Internal/commandHelpers/ShowCommandHelper.cs
@@ -21,7 +21,7 @@
 namespace Microsoft.PowerShell.Commands.ShowCommandInternal
 {
     /// <summary>
-    /// Implements thw WPF window part of the show-command cmdlet.
+    /// Implements the WPF window part of the show-command cmdlet.
     /// </summary>
     internal class ShowCommandHelper : IDisposable
     {
@@ -289,7 +289,7 @@ private ShowCommandHelper()
         }
 
         /// <summary>
-        /// Finalizes an instance of the ShowCommandHelper class.
+        /// Finalizes an instance of the <see cref="ShowCommandHelper"/> class.
         /// </summary>
         ~ShowCommandHelper()
         {
@@ -489,37 +489,6 @@ private static string GetSerializedCommandScript()
                 @"Remove-Item -Path 'function:\PSGetSerializedShowCommandInfo' -Force");
         }
 
-        /// <summary>
-        /// Gets the command to be run to in order to import a module and refresh the command data.
-        /// </summary>
-        /// <param name="module">Module we want to import.</param>
-        /// <param name="isRemoteRunspace">Boolean flag determining whether Show-Command is queried in the local or remote runspace scenario.</param>
-        /// <param name="isFirstChance">Boolean flag to indicate that it is the second attempt to query Show-Command data.</param>
-        /// <returns>The command to be run to in order to import a module and refresh the command data.</returns>
-        internal static string GetImportModuleCommand(string module, bool isRemoteRunspace = false, bool isFirstChance = true)
-        {
-            string scriptBase = "Import-Module " + ShowCommandHelper.SingleQuote(module);
-
-            if (isRemoteRunspace)
-            {
-                if (isFirstChance)
-                {
-                    scriptBase += ";@(Get-Command " + ShowCommandHelper.CommandTypeSegment + @" -ShowCommandInfo )";
-                }
-                else
-                {
-                    scriptBase += GetSerializedCommandScript();
-                }
-            }
-            else
-            {
-                scriptBase += ";@(Get-Command " + ShowCommandHelper.CommandTypeSegment + ")";
-            }
-
-            scriptBase += ShowCommandHelper.GetGetModuleSuffix();
-            return scriptBase;
-        }
-
         /// <summary>
         /// Gets the command to be run in order to show help for a command.
         /// </summary>
@@ -672,7 +641,7 @@ internal static AllModulesViewModel GetNewAllModulesViewModel(AllModulesViewMode
         /// <summary>
         /// Gets an error message to be displayed when failed to import a module.
         /// </summary>
-        /// <param name="command">Command belongiong to the module to import.</param>
+        /// <param name="command">Command belonging to the module to import.</param>
         /// <param name="module">Module to import.</param>
         /// <param name="error">Error importing the module.</param>
         /// <returns>An error message to be displayed when failed to import a module.</returns>
@@ -710,7 +679,8 @@ internal static string SingleQuote(string str)
         /// <returns>The host window, if it is present or null if it is not.</returns>
         internal static Window GetHostWindow(PSCmdlet cmdlet)
         {
-            PSPropertyInfo windowProperty = cmdlet.Host.PrivateData.Properties["Window"];
+            // The value of 'PrivateData' property may be null for the default host or a custom host.
+            PSPropertyInfo windowProperty = cmdlet.Host.PrivateData?.Properties["Window"];
             if (windowProperty == null)
             {
                 return null;
@@ -750,7 +720,7 @@ private static object GetPropertyValue(Type type, object obj, string propertyNam
 
             try
             {
-                return property.GetValue(obj, new object[] { });
+                return property.GetValue(obj, Array.Empty<object>());
             }
             catch (ArgumentException)
             {
@@ -794,7 +764,7 @@ private static bool SetPropertyValue(Type type, object obj, string propertyName,
 
             try
             {
-                property.SetValue(obj, value, new object[] { });
+                property.SetValue(obj, value, Array.Empty<object>());
             }
             catch (ArgumentException)
             {
@@ -1000,7 +970,7 @@ private void ImportModuleDone(Dictionary<string, ShowCommandModuleInfo> imported
             {
                 this.window.Dispatcher.Invoke(
                     new SendOrPostCallback(
-                        delegate (object ignored)
+                        delegate(object ignored)
                         {
                             this.allModulesViewModel = ShowCommandHelper.GetNewAllModulesViewModel(
                                 this.allModulesViewModel,
@@ -1050,7 +1020,7 @@ private void DisplayHelp(Collection<PSObject> getHelpResults)
             {
                 this.window.Dispatcher.Invoke(
                     new SendOrPostCallback(
-                        delegate (object ignored)
+                        delegate(object ignored)
                         {
                             HelpWindow help = new HelpWindow(getHelpResults[0]);
                             help.Owner = this.window;
@@ -1200,7 +1170,7 @@ private void Buttons_CopyClick(object sender, RoutedEventArgs e)
         }
 
         /// <summary>
-        /// Sets a succesfull dialog result and then closes the window.
+        /// Sets a successful dialog result and then closes the window.
         /// </summary>
         /// <param name="sender">Event sender.</param>
         /// <param name="e">Event arguments.</param>
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.GraphicalHostResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.GraphicalHostResources.cs.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.GraphicalHostResources.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.HelpWindowResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.HelpWindowResources.cs.resx
new file mode 100644
index 00000000000..cf67ee4265a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.HelpWindowResources.cs.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Zrušit</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Popis</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Vlastnosti</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Nastavení</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.InvariantResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.InvariantResources.cs.resx
new file mode 100644
index 00000000000..3d33b459613
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.InvariantResources.cs.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Sloupce</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.ShowCommandResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.ShowCommandResources.cs.resx
new file mode 100644
index 00000000000..121ca1a52f1
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.ShowCommandResources.cs.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Vše</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Povinné</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Volitelné</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.UICultureResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.UICultureResources.cs.resx
new file mode 100644
index 00000000000..72b57dbb88e
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.UICultureResources.cs.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Vybrat sloupce...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(žádné)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Hodnota musí být typu {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>Aktuální výběr je prázdný.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>obsahuje</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>neobsahuje</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>nerovná se</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>rovná se</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>je větší než nebo rovno</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>je mezi</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>nic neobsahuje</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>něco obsahuje</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>je menší než nebo rovno</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>má na konci</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>má na začátku</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Zpět</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Vpřed</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>Hodnotou musí být platné datum v následujícím formátu: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Hodnota musí být platné číslo.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Hledat</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+plus na numerické klávesnici</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+plus na numerické klávesnici</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+minus na numerické klávesnici</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+minus na numerické klávesnici</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/cs/public.XamlLocalizableResources.cs.resx b/src/Microsoft.Management.UI.Internal/resources/cs/public.XamlLocalizableResources.cs.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/cs/public.XamlLocalizableResources.cs.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.GraphicalHostResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.GraphicalHostResources.de.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.GraphicalHostResources.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.HelpWindowResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.HelpWindowResources.de.resx
new file mode 100644
index 00000000000..db9a3797f25
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.HelpWindowResources.de.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Abbrechen</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Beschreibung</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Eigenschaften</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Einstellungen</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.InvariantResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.InvariantResources.de.resx
new file mode 100644
index 00000000000..bf746936812
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.InvariantResources.de.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Spalten</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.ShowCommandResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.ShowCommandResources.de.resx
new file mode 100644
index 00000000000..b35c11578f5
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.ShowCommandResources.de.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Alle</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obligatorisch</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Optional</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.UICultureResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.UICultureResources.de.resx
new file mode 100644
index 00000000000..1070a6b080c
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.UICultureResources.de.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Select Columns...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(none)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Value should be of Type {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>The current selection is empty.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contains</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>does not contain</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>does not equal</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>equals</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>ist größer als oder gleich</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>is between</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>is empty</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>is not empty</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>ist kleiner als oder gleich</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>ends with</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>starts with</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Back</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Forward</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>The value must be a valid date in the following format: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Der Wert muss eine gültige Zahl sein.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Search</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>...</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/de/public.XamlLocalizableResources.de.resx b/src/Microsoft.Management.UI.Internal/resources/de/public.XamlLocalizableResources.de.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/de/public.XamlLocalizableResources.de.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.GraphicalHostResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.GraphicalHostResources.es.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.GraphicalHostResources.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.HelpWindowResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.HelpWindowResources.es.resx
new file mode 100644
index 00000000000..1c6bf3f0c4d
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.HelpWindowResources.es.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Cancelar</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Descripción</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>Aceptar</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Propiedades</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Configuración</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.InvariantResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.InvariantResources.es.resx
new file mode 100644
index 00000000000..08c41b65379
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.InvariantResources.es.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Columnas</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.ShowCommandResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.ShowCommandResources.es.resx
new file mode 100644
index 00000000000..af6307a3b1b
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.ShowCommandResources.es.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Todas</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obligatorio</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Opcional</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.UICultureResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.UICultureResources.es.resx
new file mode 100644
index 00000000000..1cf7a46dcfc
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.UICultureResources.es.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Select Columns...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(none)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Value should be of Type {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>The current selection is empty.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contains</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>does not contain</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>does not equal</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>equals</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>es mayor o igual que</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>is between</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>is empty</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>is not empty</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>es menor o igual que</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>ends with</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>starts with</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Back</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Forward</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>The value must be a valid date in the following format: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>El valor debe ser un número válido.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Search</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>...</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/es/public.XamlLocalizableResources.es.resx b/src/Microsoft.Management.UI.Internal/resources/es/public.XamlLocalizableResources.es.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/es/public.XamlLocalizableResources.es.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.GraphicalHostResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.GraphicalHostResources.fr.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.GraphicalHostResources.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.HelpWindowResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.HelpWindowResources.fr.resx
new file mode 100644
index 00000000000..2033e6b47fb
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.HelpWindowResources.fr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Annuler</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Description</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Propriétés</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Paramètres</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.InvariantResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.InvariantResources.fr.resx
new file mode 100644
index 00000000000..b4ec0361fdf
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.InvariantResources.fr.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Colonnes</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.ShowCommandResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.ShowCommandResources.fr.resx
new file mode 100644
index 00000000000..231f2484a55
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.ShowCommandResources.fr.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Tout</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obligatoire</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Facultatif</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.UICultureResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.UICultureResources.fr.resx
new file mode 100644
index 00000000000..984ce1bdc9e
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.UICultureResources.fr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Select Columns...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(none)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Value should be of Type {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>The current selection is empty.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contains</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>does not contain</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>does not equal</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>equals</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>est supérieur ou égal à</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>is between</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>is empty</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>is not empty</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>est inférieur ou égal à</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>ends with</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>starts with</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Back</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Forward</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>The value must be a valid date in the following format: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>La valeur doit être un nombre valide.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Search</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/fr/public.XamlLocalizableResources.fr.resx b/src/Microsoft.Management.UI.Internal/resources/fr/public.XamlLocalizableResources.fr.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/fr/public.XamlLocalizableResources.fr.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.GraphicalHostResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.GraphicalHostResources.it.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.GraphicalHostResources.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.HelpWindowResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.HelpWindowResources.it.resx
new file mode 100644
index 00000000000..0d7c67bb66c
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.HelpWindowResources.it.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Annulla</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Descrizione</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Proprietà</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Impostazioni</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.InvariantResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.InvariantResources.it.resx
new file mode 100644
index 00000000000..cc24197cce1
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.InvariantResources.it.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Colonne</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.ShowCommandResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.ShowCommandResources.it.resx
new file mode 100644
index 00000000000..5dad30a7b50
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.ShowCommandResources.it.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Tutto</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obbligatorio</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Facoltativo</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.UICultureResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.UICultureResources.it.resx
new file mode 100644
index 00000000000..774c8488f12
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.UICultureResources.it.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Seleziona colonne...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(nessuno)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Il valore deve essere di tipo {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>La selezione corrente è vuota.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contiene</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>non contiene</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>non uguale a</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>uguale a</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>è maggiore o uguale a</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>è compreso tra</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>è vuoto</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>non è vuoto</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>è minore o uguale a</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>termina con</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>inizia con</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Indietro</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Inoltra</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>Il valore deve essere una data valida nel formato seguente: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Il valore deve essere un numero valido.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Cerca</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Aggiungi</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+MAIUSC+Aggiungi</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+MAIUSC+segno più</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Sottrai</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+MAIUSC+Sottrai</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+segno meno</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+MAIUSC+segno meno</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/it/public.XamlLocalizableResources.it.resx b/src/Microsoft.Management.UI.Internal/resources/it/public.XamlLocalizableResources.it.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/it/public.XamlLocalizableResources.it.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.GraphicalHostResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.GraphicalHostResources.ja.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.GraphicalHostResources.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.HelpWindowResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.HelpWindowResources.ja.resx
new file mode 100644
index 00000000000..ee61fb71d8b
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.HelpWindowResources.ja.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>キャンセル</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>説明</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>プロパティ</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.InvariantResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.InvariantResources.ja.resx
new file mode 100644
index 00000000000..93e3e359006
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.InvariantResources.ja.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} を直接変更することはできません。代わりに {1} を使用してください。</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>列</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} は項目コレクションへの追加をサポートしていません。代わりに {1} を使用してください。</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.ShowCommandResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.ShowCommandResources.ja.resx
new file mode 100644
index 00000000000..10b44068776
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.ShowCommandResources.ja.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>すべて</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>必須</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>オプション</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.UICultureResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.UICultureResources.ja.resx
new file mode 100644
index 00000000000..36468cd2e6a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.UICultureResources.ja.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Select Columns...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(none)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>値は、型 {0} である必要があります。</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>現在の選択内容が空です。</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contains</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>does not contain</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>does not equal</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>equals</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>次の値以上</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>is between</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>is empty</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>is not empty</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>次の値以下</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>ends with</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>starts with</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Back</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Forward</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>The value must be a valid date in the following format: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>この値には有効な数値を指定してください。</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Search</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ja/public.XamlLocalizableResources.ja.resx b/src/Microsoft.Management.UI.Internal/resources/ja/public.XamlLocalizableResources.ja.resx
new file mode 100644
index 00000000000..b23115e35d8
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ja/public.XamlLocalizableResources.ja.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>この列を検索</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>クリックして検索クエリを保存</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>選択した列を、表示する列のリストに移動します</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>選択した列を、表示しない列のリストに移動します</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>この列は削除できません。</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>リストには、少なくとも 1 つの列を常に表示する必要があります。</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>この列を検索</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>クリックすると、フィルター条件がすべて消去されます。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>クリックすると、検索条件を追加できます。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>クリックすると、検索条件の表示が展開されます。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>現在、保存されているクエリはありません。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>フィルター ウィンドウの展開/折りたたみ</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>クリックすると、保存されている検索クエリが表示されます。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.GraphicalHostResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.GraphicalHostResources.ko.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.GraphicalHostResources.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.HelpWindowResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.HelpWindowResources.ko.resx
new file mode 100644
index 00000000000..3fdf93fb448
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.HelpWindowResources.ko.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>취소</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>설명</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>확인</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>속성</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>설정</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.InvariantResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.InvariantResources.ko.resx
new file mode 100644
index 00000000000..71c4ee872f4
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.InvariantResources.ko.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>열</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.ShowCommandResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.ShowCommandResources.ko.resx
new file mode 100644
index 00000000000..a63f1b6af98
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.ShowCommandResources.ko.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>모두</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>필수</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>선택 사항</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.UICultureResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.UICultureResources.ko.resx
new file mode 100644
index 00000000000..1e1f252871f
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.UICultureResources.ko.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>열 선택...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(없음)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>값은 {0} 형식이어야 합니다.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>현재 선택 영역이 비어 있습니다.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>포함</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>다음 값을 포함하지 않음</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>다음 값과 같지 않음</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>같음</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>크거나 같음</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>다음 범위에 속함</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>비어 있음</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>비어 있지 않음</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>작거나 같음</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>다음 값으로 끝남</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>다음 값으로 시작</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>뒤로</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>전달</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>값은 {0} 형식의 유효한 날짜여야 합니다.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>값은 올바른 숫자여야 합니다.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>검색</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>...</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ko/public.XamlLocalizableResources.ko.resx b/src/Microsoft.Management.UI.Internal/resources/ko/public.XamlLocalizableResources.ko.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ko/public.XamlLocalizableResources.ko.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.GraphicalHostResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.GraphicalHostResources.pl.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.GraphicalHostResources.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.HelpWindowResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.HelpWindowResources.pl.resx
new file mode 100644
index 00000000000..56e8bf927f0
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.HelpWindowResources.pl.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Anuluj</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Opis</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Właściwości</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Ustawienia</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.InvariantResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.InvariantResources.pl.resx
new file mode 100644
index 00000000000..e1c8b515ac0
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.InvariantResources.pl.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Kolumny</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.ShowCommandResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.ShowCommandResources.pl.resx
new file mode 100644
index 00000000000..2f37cbdf965
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.ShowCommandResources.pl.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Wszystko</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obowiązkowe</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Opcjonalne</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.UICultureResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.UICultureResources.pl.resx
new file mode 100644
index 00000000000..aa97338c019
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.UICultureResources.pl.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Wybierz kolumny…</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(brak)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Wartość powinna być typem {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>Bieżące zaznaczenie jest puste.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>zawiera</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>nie zawiera</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>nie równa się</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>równa się</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>jest większe lub równe</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>jest pomiędzy</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>jest puste</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>nie jest puste</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>jest mniejsze lub równe</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>kończy się</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>rozpoczyna się</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Do tyłu</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Do przodu</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>Wartość musi być prawidłową datą w następującym formacie: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Wartość musi być prawidłową liczbą.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Wyszukaj</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>...</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Dodaj</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl + Shift + Dodaj</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Odejmowanie</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Odejmowanie</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pl/public.XamlLocalizableResources.pl.resx b/src/Microsoft.Management.UI.Internal/resources/pl/public.XamlLocalizableResources.pl.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pl/public.XamlLocalizableResources.pl.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.GraphicalHostResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.GraphicalHostResources.pt-BR.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.GraphicalHostResources.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.HelpWindowResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.HelpWindowResources.pt-BR.resx
new file mode 100644
index 00000000000..4c48e227f00
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.HelpWindowResources.pt-BR.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Cancelar</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Descrição</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Propriedades</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Configurações</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.InvariantResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.InvariantResources.pt-BR.resx
new file mode 100644
index 00000000000..9c174b642fa
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.InvariantResources.pt-BR.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Colunas</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.ShowCommandResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.ShowCommandResources.pt-BR.resx
new file mode 100644
index 00000000000..626f0b31264
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.ShowCommandResources.pt-BR.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Todos</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Obrigatório</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Opcional</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.UICultureResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.UICultureResources.pt-BR.resx
new file mode 100644
index 00000000000..5dacc74283f
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.UICultureResources.pt-BR.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Selecionar Colunas...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(nenhum)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>O valor deve ser do tipo {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>A seleção atual está vazia.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>contém</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>não contém</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>não é igual a</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>é igual a</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>é maior que ou igual a</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>está entre</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>está vazio</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>não está vazio</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>é menor que ou igual a</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>termina com</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>começa com</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Voltar</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Encaminhar</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>O valor deve ser uma data válida no seguinte formato: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>O valor deve ser um número válido.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Pesquisa</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Adicionar</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Adicionar</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Mais</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Mais</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtrair</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtrair</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Menos</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Menos</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.XamlLocalizableResources.pt-BR.resx b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.XamlLocalizableResources.pt-BR.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/pt-BR/public.XamlLocalizableResources.pt-BR.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.GraphicalHostResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.GraphicalHostResources.resx
index 0a86d51a82e..d4b7082b36b 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.GraphicalHostResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.GraphicalHostResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.HelpWindowResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.HelpWindowResources.resx
index 3bcab7bfb8a..1a6065ff769 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.HelpWindowResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.HelpWindowResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.InvariantResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.InvariantResources.resx
index 62924692a43..64c8e33ccde 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.InvariantResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.InvariantResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.ShowCommandResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.ShowCommandResources.resx
index 5853a0a3c01..dcb5aa9e44b 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.ShowCommandResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.ShowCommandResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.UICultureResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.UICultureResources.resx
index 7f5730b3f86..de8b07134e2 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.UICultureResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.UICultureResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/public.XamlLocalizableResources.resx b/src/Microsoft.Management.UI.Internal/resources/public.XamlLocalizableResources.resx
index caff99962fd..f49fe3d90bf 100644
--- a/src/Microsoft.Management.UI.Internal/resources/public.XamlLocalizableResources.resx
+++ b/src/Microsoft.Management.UI.Internal/resources/public.XamlLocalizableResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.GraphicalHostResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.GraphicalHostResources.ru.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.GraphicalHostResources.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.HelpWindowResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.HelpWindowResources.ru.resx
new file mode 100644
index 00000000000..e95ad4942e0
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.HelpWindowResources.ru.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>Отмена</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Описание</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>ОК</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Свойства</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Параметры</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.InvariantResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.InvariantResources.ru.resx
new file mode 100644
index 00000000000..a14bccf0c61
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.InvariantResources.ru.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Столбцы</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.ShowCommandResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.ShowCommandResources.ru.resx
new file mode 100644
index 00000000000..a61eb31d5e3
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.ShowCommandResources.ru.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Все</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Обязательно</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>Необязательно</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.UICultureResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.UICultureResources.ru.resx
new file mode 100644
index 00000000000..2c2f98e9143
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.UICultureResources.ru.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Выберите столбцы…</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(нет)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Значение должно принадлежать типу {0}.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>Текущее выделение пусто.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>содержит</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>не содержит</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>не равно</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>равно</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>больше или равно</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>между</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>пусто</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>не пусто</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>меньше или равно</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>заканчивается на</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>начинается с</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Назад</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>Переадресовать</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>Значением должна быть допустимая дата в следующем формате: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Значение должно быть допустимым числом.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Поиск</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>CTRL+ДОБАВИТЬ</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>CTRL+SHIFT+A</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>CTRL+ПЛЮС</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>CTRL+SHIFT+ПЛЮС</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>CTRL+ВЫЧЕСТЬ</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>CTRL+SHIFT+ВЫЧЕСТЬ</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>CTRL+МИНУС</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>CTRL + SHIFT + МИНУС</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/ru/public.XamlLocalizableResources.ru.resx b/src/Microsoft.Management.UI.Internal/resources/ru/public.XamlLocalizableResources.ru.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/ru/public.XamlLocalizableResources.ru.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.GraphicalHostResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.GraphicalHostResources.tr.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.GraphicalHostResources.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.HelpWindowResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.HelpWindowResources.tr.resx
new file mode 100644
index 00000000000..fc7d14cf1d3
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.HelpWindowResources.tr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>İptal</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>Açıklama</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>Tamam</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>Özellikler</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>Ayarlar</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.InvariantResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.InvariantResources.tr.resx
new file mode 100644
index 00000000000..f6b61cb6b86
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.InvariantResources.tr.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>Sütunlar</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.ShowCommandResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.ShowCommandResources.tr.resx
new file mode 100644
index 00000000000..242d53fcfcd
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.ShowCommandResources.tr.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>Tümü</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>Zorunlu</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>İsteğe bağlı</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.UICultureResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.UICultureResources.tr.resx
new file mode 100644
index 00000000000..24d7a72fcaf
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.UICultureResources.tr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>Sütunları seç...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(hiçbiri)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>Değer {0} Türünde olmalıdır.</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>Geçerli seçim boş.</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>içerir</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>içermez</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>eşit değildir</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>eşittir</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>şundan büyüktür veya şuna eşittir:</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>arasında</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>boş</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>boş değil</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>şundan küçüktür veya şuna eşittir:</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>ile biter</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>ile başlar</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>Geri</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>İlet</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>Değerin şu biçimde geçerli bir tarih olması gerekir: {0}.</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>Değerin geçerli bir sayı olması gerekir.</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>Arama</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>...</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Ekle</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Ekle</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Artı</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Artı</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Çıkar</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Çıkar</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Eksi</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Eksi</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/tr/public.XamlLocalizableResources.tr.resx b/src/Microsoft.Management.UI.Internal/resources/tr/public.XamlLocalizableResources.tr.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/tr/public.XamlLocalizableResources.tr.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.GraphicalHostResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.GraphicalHostResources.zh-Hans.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.GraphicalHostResources.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.HelpWindowResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.HelpWindowResources.zh-Hans.resx
new file mode 100644
index 00000000000..7309cc6957b
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.HelpWindowResources.zh-Hans.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>说明</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>确定</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>属性</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>设置</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.InvariantResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.InvariantResources.zh-Hans.resx
new file mode 100644
index 00000000000..ba5290cebca
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.InvariantResources.zh-Hans.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>无法直接修改 {0}，请改用 {1}。</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>列</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} 不支持添加到项目集合，请改用 {1}。</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.ShowCommandResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.ShowCommandResources.zh-Hans.resx
new file mode 100644
index 00000000000..519214001ba
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.ShowCommandResources.zh-Hans.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>复制(_P)</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>运行(_R)</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>全部</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>模块:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ?</value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>帮助</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>通用参数</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>错误</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>"{0}" 的参数:</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>名称: {0}
+模块: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>运行命令时出现以下错误:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>名称:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>确定</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>命令名称</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>模块</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;没有模块名称&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>为 "{0}" 选择多个值</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>可以从管道接收值</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>对所有参数集通用</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>强制</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>可选</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>位置: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>类型: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>已导入</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>未导入</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>显示详细信息</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>未能导入命令 "{0}" 所需的模块。模块名称: "{1}"。错误消息:“{2}”。</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>若要导入 "{0}" 模块及其 cmdlet (包括 "{1}")，请单击 {2}。</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>显示命令 - 错误</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>请稍候...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>刷新</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>没有参数。</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>使用 "{0}" 后单击可查看新命令</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.UICultureResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.UICultureResources.zh-Hans.resx
new file mode 100644
index 00000000000..5989d363c2f
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.UICultureResources.zh-Hans.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>选择列...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(无)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>值应为类型 {0}。</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>当前选择为空。</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>包含</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>不包含</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>不等于</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>等于</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>大于或等于</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>介于</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>为空</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>不为空</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>小于或等于</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>结尾为</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>开头为</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>返回</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>前进</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>该值必须是以下格式的有效日期: {0}。</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>该值必须是有效数字。</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>搜索</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+小键盘加号</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+小键盘加号</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+主键盘加号</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+主键盘加号</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+小键盘减号</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+小键盘减号</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+主键盘减号</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+主键盘减号</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.XamlLocalizableResources.zh-Hans.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.XamlLocalizableResources.zh-Hans.resx
new file mode 100644
index 00000000000..9d9ed1a587a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hans/public.XamlLocalizableResources.zh-Hans.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>在此列中查找</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>单击以保存搜索查询</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>将选定列移到可视列的列表中</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>将选定列移到隐藏列的列表中</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>此列可能无法删除。</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>此列表必须始终显示至少一列。</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>在此列中查找</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>单击以清除所有筛选条件。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>单击以添加搜索条件。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>单击以展开搜索条件。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>当前没有保存的查询。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>展开或折叠筛选器面板</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>单击以显示已保存的搜索查询。</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.GraphicalHostResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.GraphicalHostResources.zh-Hant.resx
new file mode 100644
index 00000000000..2d6df859c89
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.GraphicalHostResources.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="OutGridViewWindowObjectName" xml:space="preserve">
+    <value>OutGridViewWindow Object</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.HelpWindowResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.HelpWindowResources.zh-Hant.resx
new file mode 100644
index 00000000000..6a3e93bc213
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.HelpWindowResources.zh-Hant.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CancelText" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="CaseSensitiveTitle" xml:space="preserve">
+    <value>Match Case</value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>CommonParameters</value>
+    <comment>Name of a group of parameters common to all cmdlets</comment>
+  </data>
+  <data name="DescriptionTitle" xml:space="preserve">
+    <value>描述</value>
+  </data>
+  <data name="ExamplesTitle" xml:space="preserve">
+    <value>Examples</value>
+  </data>
+  <data name="FindText" xml:space="preserve">
+    <value>_Find:</value>
+  </data>
+  <data name="HelpSectionsTitle" xml:space="preserve">
+    <value>Help Sections</value>
+  </data>
+  <data name="HelpTitleFormat" xml:space="preserve">
+    <value>{0} Help</value>
+  </data>
+  <data name="InputsTitle" xml:space="preserve">
+    <value>Inputs</value>
+  </data>
+  <data name="LinkTextFormat" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="MethodsTitle" xml:space="preserve">
+    <value>Methods</value>
+  </data>
+  <data name="NextText" xml:space="preserve">
+    <value>_Next</value>
+  </data>
+  <data name="NoMatches" xml:space="preserve">
+    <value>No matches found</value>
+  </data>
+  <data name="NotesTitle" xml:space="preserve">
+    <value>Notes</value>
+  </data>
+  <data name="OKText" xml:space="preserve">
+    <value>確定</value>
+  </data>
+  <data name="OneMatch" xml:space="preserve">
+    <value>1 match</value>
+  </data>
+  <data name="OutputsTitle" xml:space="preserve">
+    <value>Outputs</value>
+  </data>
+  <data name="ParameterAcceptWildcard" xml:space="preserve">
+    <value>Accept wildcard characters?</value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value</value>
+  </data>
+  <data name="ParameterPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?</value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?</value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?</value>
+  </data>
+  <data name="ParametersTitle" xml:space="preserve">
+    <value>Parameters</value>
+  </data>
+  <data name="PreviousText" xml:space="preserve">
+    <value>_Previous</value>
+  </data>
+  <data name="PropertiesTitle" xml:space="preserve">
+    <value>屬性</value>
+  </data>
+  <data name="RelatedLinksTitle" xml:space="preserve">
+    <value>RelatedLinks</value>
+  </data>
+  <data name="RemarksTitle" xml:space="preserve">
+    <value>Remarks</value>
+  </data>
+  <data name="SearchOptionsTitle" xml:space="preserve">
+    <value>Search Options</value>
+  </data>
+  <data name="SettingsText" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="SomeMatchesFormat" xml:space="preserve">
+    <value>{0} matches</value>
+  </data>
+  <data name="SynopsisTitle" xml:space="preserve">
+    <value>Synopsis</value>
+  </data>
+  <data name="SyntaxTitle" xml:space="preserve">
+    <value>Syntax</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Help for {0}</value>
+    <comment>{0} is the name of a cmdlet</comment>
+  </data>
+  <data name="WholeWordTitle" xml:space="preserve">
+    <value>Whole Word</value>
+  </data>
+  <data name="ZoomLabelTextFormat" xml:space="preserve">
+    <value>{0}%</value>
+  </data>
+  <data name="ZoomSlider" xml:space="preserve">
+    <value>Zoom</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.InvariantResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.InvariantResources.zh-Hant.resx
new file mode 100644
index 00000000000..1604265fa4c
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.InvariantResources.zh-Hant.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotModified" xml:space="preserve">
+    <value>{0} cannot be modified directly, use {1} instead.</value>
+  </data>
+  <data name="Columns" xml:space="preserve">
+    <value>資料行</value>
+  </data>
+  <data name="ManagementListDateTimeColumnFormatString" xml:space="preserve">
+    <value>{0:G}</value>
+    <comment>The format string that is used by the InnerList in the case where a DateTime type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListDefaultColumnFormatString" xml:space="preserve">
+    <value>{0}</value>
+    <comment>The format string that is used by the InnerList in the default case. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListFloatColumnFormatString" xml:space="preserve">
+    <value>{0:N}</value>
+    <comment>The format string that is used by the InnerList in the case where a floating point number is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="ManagementListIntegerColumnFormatString" xml:space="preserve">
+    <value>{0:N0}</value>
+    <comment>The format string that is used by the InnerList in the case where a whole number type is used. The {0} will be the column value.</comment>
+  </data>
+  <data name="NotSupportAddingToItems" xml:space="preserve">
+    <value>{0} does not support adding to the Items collection, use {1} instead.</value>
+  </data>
+  <data name="ViewSetWithType" xml:space="preserve">
+    <value>If View is set to a {0}, it should have the type {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.ShowCommandResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.ShowCommandResources.zh-Hant.resx
new file mode 100644
index 00000000000..4e3dee17fb0
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.ShowCommandResources.zh-Hant.resx
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActionButtons_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="ActionButtons_Button_Copy" xml:space="preserve">
+    <value>Co_py</value>
+  </data>
+  <data name="ActionButtons_Button_Run" xml:space="preserve">
+    <value>_Run</value>
+  </data>
+  <data name="All" xml:space="preserve">
+    <value>全部</value>
+  </data>
+  <data name="AllModulesControl_Label_Modules" xml:space="preserve">
+    <value>Modules:</value>
+  </data>
+  <data name="CmdletControl_Button_GetHelp" xml:space="preserve">
+    <value> ? </value>
+  </data>
+  <data name="CmdletControl_Button_ToolTip_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="CmdletControl_Header_CommonParameters" xml:space="preserve">
+    <value>Common Parameters</value>
+  </data>
+  <data name="CmdletControl_Header_Errors" xml:space="preserve">
+    <value>Errors</value>
+  </data>
+  <data name="DetailsParameterTitleFormat" xml:space="preserve">
+    <value>Parameters for "{0}":</value>
+  </data>
+  <data name="CmdletTooltipFormat" xml:space="preserve">
+    <value>Name: {0}
+Module: {1} ({2})</value>
+  </data>
+  <data name="EndProcessingErrorMessage" xml:space="preserve">
+    <value>The following errors occurred running the command:
+{0}</value>
+  </data>
+  <data name="MandatoryLabelSegment" xml:space="preserve">
+    <value> *</value>
+    <comment>Used in MandatoryNameLabelFormat to designate a mandatory parameter with a *</comment>
+  </data>
+  <data name="MandatoryNameLabelFormat" xml:space="preserve">
+    <value>{0}:{1}</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name, {1} is MandatoryLabelSegment or an empty string</comment>
+  </data>
+  <data name="NameLabelFormat" xml:space="preserve">
+    <value>{0}:</value>
+    <comment>This is a label for a control, hence the colon. {0} is a parameter name</comment>
+  </data>
+  <data name="ShowModuleControl_Label_Name" xml:space="preserve">
+    <value>Name:</value>
+  </data>
+  <data name="ActionButtons_Button_Ok" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="MultiParameter_Button_Browse" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="CommandNameAutomationName" xml:space="preserve">
+    <value>Command Name</value>
+  </data>
+  <data name="ModulesAutomationName" xml:space="preserve">
+    <value>Modules</value>
+  </data>
+  <data name="NoModuleName" xml:space="preserve">
+    <value>&lt;No module name&gt;</value>
+  </data>
+  <data name="SelectMultipleValuesForParameterFormat" xml:space="preserve">
+    <value>Select multiple values for "{0}"</value>
+  </data>
+  <data name="CanReceiveValueFromPipeline" xml:space="preserve">
+    <value>Can receive value from pipeline</value>
+  </data>
+  <data name="CommonToAllParameterSets" xml:space="preserve">
+    <value>Common to all parameter sets</value>
+  </data>
+  <data name="Mandatory" xml:space="preserve">
+    <value>強制</value>
+  </data>
+  <data name="Optional" xml:space="preserve">
+    <value>選擇性</value>
+  </data>
+  <data name="PositionFormat" xml:space="preserve">
+    <value>Position: {0}</value>
+  </data>
+  <data name="TypeFormat" xml:space="preserve">
+    <value>Type: {0}</value>
+  </data>
+  <data name="Imported" xml:space="preserve">
+    <value>Imported</value>
+  </data>
+  <data name="NotImported" xml:space="preserve">
+    <value>Not Imported</value>
+  </data>
+  <data name="ImportModuleButtonText" xml:space="preserve">
+    <value>Show Details</value>
+  </data>
+  <data name="ImportModuleFailedFormat" xml:space="preserve">
+    <value>Failed to import the module required by command "{0}". Module name: "{1}". Error message: "{2}".</value>
+  </data>
+  <data name="NotImportedFormat" xml:space="preserve">
+    <value>To import the "{0}" module and its cmdlets, including "{1}", click {2}.</value>
+  </data>
+  <data name="ShowCommandError" xml:space="preserve">
+    <value>Show Command - Error</value>
+  </data>
+  <data name="PleaseWaitMessage" xml:space="preserve">
+    <value>Please Wait...</value>
+  </data>
+  <data name="ShowModuleControl_RefreshButton" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="NoParameters" xml:space="preserve">
+    <value>There are no parameters.</value>
+  </data>
+  <data name="RefreshShowCommandTooltipFormat" xml:space="preserve">
+    <value>Click after using "{0}" to see the new commands</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.UICultureResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.UICultureResources.zh-Hant.resx
new file mode 100644
index 00000000000..9f92a52d0b4
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.UICultureResources.zh-Hant.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ColumnPicker" xml:space="preserve">
+    <value>選取資料行...</value>
+  </data>
+  <data name="GroupTitleNone" xml:space="preserve">
+    <value>(無)</value>
+    <comment>The group title for items within a column whose value is empty/null.</comment>
+  </data>
+  <data name="ErrorTextBoxTypeConversionErrorText" xml:space="preserve">
+    <value>值的類型必須是 {0}。</value>
+    <comment>This text represents the error which will be shown when the entered type does not match the type we are expecting. {0} is the expected type.</comment>
+  </data>
+  <data name="ValidatingSelectorValueOutOfBounds" xml:space="preserve">
+    <value>目前選取項目是空的。</value>
+    <comment>The error validation string to present to the user when they have selected a value out of bounds.</comment>
+  </data>
+  <data name="FilterRule_Contains" xml:space="preserve">
+    <value>包含</value>
+    <comment>A filter rule that indicates a field must contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotContain" xml:space="preserve">
+    <value>不包含</value>
+    <comment>A filter rule that indicates a field must not contain the specified value.</comment>
+  </data>
+  <data name="FilterRule_DoesNotEqual" xml:space="preserve">
+    <value>不等於</value>
+    <comment>A filter rule that indicates a field must not equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_Equals" xml:space="preserve">
+    <value>等於</value>
+    <comment>A filter rule that indicates a field must equal the specified value.</comment>
+  </data>
+  <data name="FilterRule_GreaterThanOrEqual" xml:space="preserve">
+    <value>大於或等於</value>
+    <comment>A filter rule that indicates a field must be greater than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_IsBetween" xml:space="preserve">
+    <value>介於</value>
+    <comment>A filter rule that indicates a field must be between the specified values.</comment>
+  </data>
+  <data name="FilterRule_IsEmpty" xml:space="preserve">
+    <value>為空白</value>
+    <comment>A filter rule that indicates a field must be empty.</comment>
+  </data>
+  <data name="FilterRule_IsNotEmpty" xml:space="preserve">
+    <value>並非空白</value>
+    <comment>A filter rule that indicates a field must not be empty.</comment>
+  </data>
+  <data name="FilterRule_LessThanOrEqual" xml:space="preserve">
+    <value>小於或等於</value>
+    <comment>A filter rule that indicates a field must be less than or equal to the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextEndsWith" xml:space="preserve">
+    <value>結尾為</value>
+    <comment>A filter rule that indicates a field must end with the specified value.</comment>
+  </data>
+  <data name="FilterRule_TextStartsWith" xml:space="preserve">
+    <value>開頭為</value>
+    <comment>A filter rule that indicates a field must start with the specified value.</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseBack_Disabled_Helptext" xml:space="preserve">
+    <value>返回</value>
+    <comment>The text representing the tool tip and help text for the Back Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="BackForwardHistory_BrowseForward_Disabled_Helptext" xml:space="preserve">
+    <value>下一步</value>
+    <comment>The text representing the tool tip and help text for the Forward Button in the Back Forward History control when the button is disabled</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableDateTimeType" xml:space="preserve">
+    <value>此值必須是下列格式的有效日期: {0}。</value>
+    <comment>{0} will be filled in with the culture appropriate ShortDatePattern</comment>
+  </data>
+  <data name="ErrorMessageForUnparsableNumericType" xml:space="preserve">
+    <value>值必須為有效的數字。</value>
+  </data>
+  <data name="SearchBox_BackgroundText" xml:space="preserve">
+    <value>搜尋</value>
+    <comment>The default background text of the search box.</comment>
+  </data>
+  <data name="FlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>This value will be loaded at runtime to define the flow direction of WPF application.  This value should be set to "RightToLeft" for mirrored language and "LeftToRight" for others.</comment>
+  </data>
+  <data name="Ellipsis" xml:space="preserve">
+    <value>…</value>
+    <comment>An ellipsis character.</comment>
+  </data>
+  <data name="ZoomIn1Shortcut" xml:space="preserve">
+    <value>Ctrl+Add</value>
+  </data>
+  <data name="ZoomIn2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Add</value>
+  </data>
+  <data name="ZoomIn3Shortcut" xml:space="preserve">
+    <value>Ctrl+Plus</value>
+  </data>
+  <data name="ZoomIn4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Plus</value>
+  </data>
+  <data name="ZoomOut1Shortcut" xml:space="preserve">
+    <value>Ctrl+Subtract</value>
+  </data>
+  <data name="ZoomOut2Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Subtract</value>
+  </data>
+  <data name="ZoomOut3Shortcut" xml:space="preserve">
+    <value>Ctrl+Minus</value>
+  </data>
+  <data name="ZoomOut4Shortcut" xml:space="preserve">
+    <value>Ctrl+Shift+Minus</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.XamlLocalizableResources.zh-Hant.resx b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.XamlLocalizableResources.zh-Hant.resx
new file mode 100644
index 00000000000..2231ee4929a
--- /dev/null
+++ b/src/Microsoft.Management.UI.Internal/resources/zh-Hant/public.XamlLocalizableResources.zh-Hant.resx
@@ -0,0 +1,414 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_49" xml:space="preserve">
+    <value>Available Columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_86" xml:space="preserve">
+    <value>Remove</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_AutomationPropertiesName_104" xml:space="preserve">
+    <value>Selected Columns</value>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_613" xml:space="preserve">
+    <value>Back</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BackForwardHistory_AutomationPropertiesName_619" xml:space="preserve">
+    <value>Forward</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_Text_144" xml:space="preserve">
+    <value>Find in this column</value>
+    <comment>Background text shown in the search box.</comment>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_Tooltip_148" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_95" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_602" xml:space="preserve">
+    <value>New Query</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_Text_74" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>This is the title string for the Task Pane.</comment>
+  </data>
+  <data name="AutoResXGen_Tile_AutomationPropertiesName_674" xml:space="preserve">
+    <value>Tasks</value>
+    <comment>AutomationProperties.Name of a SeparatedList.</comment>
+  </data>
+  <data name="AutoResXGen_WaitingRing_AutomationPropertiesName_74" xml:space="preserve">
+    <value>Indeterminate Progress Icon</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_124" xml:space="preserve">
+    <value>Add criteria</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Text_166" xml:space="preserve">
+    <value>Overwrite the existing query or type a different name to save a new query. Each query consists of criteria, sorting, and column customizations.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_186" xml:space="preserve">
+    <value>Ok</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_196" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_314" xml:space="preserve">
+    <value>Click to save a search query</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_42" xml:space="preserve">
+    <value>Available columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_73" xml:space="preserve">
+    <value>&gt;&gt;</value>
+    <comment>The contents of a button which indicates that items will move from the left column to right column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_84" xml:space="preserve">
+    <value>&lt;&lt;</value>
+    <comment>The contents of a button which indicates that items will move from the right column to left column</comment>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_127" xml:space="preserve">
+    <value>Move up</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_134" xml:space="preserve">
+    <value>Move down</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_189" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_199" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_5" xml:space="preserve">
+    <value>Select columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_76" xml:space="preserve">
+    <value>Move selected column to list of visible columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Tooltip_84" xml:space="preserve">
+    <value>Move selected column to list of hidden columns</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_142" xml:space="preserve">
+    <value>This column may not be removed.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Text_152" xml:space="preserve">
+    <value>The list must always display at least one column.</value>
+  </data>
+  <data name="AutoResXGen_ColumnPicker_Content_93" xml:space="preserve">
+    <value>Selected columns</value>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_BackgroundText" xml:space="preserve">
+    <value>Find in this column</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_97" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_104" xml:space="preserve">
+    <value>Click to clear all filter criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_132" xml:space="preserve">
+    <value>Click to add search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_ToolTip_32" xml:space="preserve">
+    <value>Click to expand search criteria.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_NoItemsText_50" xml:space="preserve">
+    <value>There are currently no saved queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_AutomationPropertiesName_52" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_47" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ListOrganizer_AutomationPropertiesName_72" xml:space="preserve">
+    <value>Rename</value>
+  </data>
+  <data name="FilterRule_AccessibleName" xml:space="preserve">
+    <value>{0} rule</value>
+    <comment>The text representation of a rule in the filter panel, displayed to accessibility clients. {0} will be the name of the rule.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_214" xml:space="preserve">
+    <value>Add</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_Content_223" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_293" xml:space="preserve">
+    <value>Add Filter Criteria</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_199" xml:space="preserve">
+    <value>Value</value>
+    <comment>The name for text input fields</comment>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_BackgroundText_200" xml:space="preserve">
+    <value>&lt;Empty&gt;</value>
+  </data>
+  <data name="AutoResXGen_FilterRulePanel_AutomationPropertiesName_257" xml:space="preserve">
+    <value>Rules</value>
+    <comment>The name of the panel which contains the filter rules</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_302" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_19" xml:space="preserve">
+    <value>Query</value>
+  </data>
+  <data name="AutoResXGen_ManagementList2_Content_33" xml:space="preserve">
+    <value>Queries</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_75" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterApplied" xml:space="preserve">
+    <value>({0} of {1})</value>
+    <comment>The text displayed in the management list title when the list has a filter applied. {0} will be the number of items shown in the list. {1} will be the total number of items in the list before filtering.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterInProgress" xml:space="preserve">
+    <value>Searching...</value>
+    <comment>The text displayed in the management list title when the list is processing a filter.</comment>
+  </data>
+  <data name="ManagementListTitle_ListStatus_FilterNotApplied" xml:space="preserve">
+    <value>({0})</value>
+    <comment>The text displayed in the management list title when the list does not have a filter applied. {0} will be the number of items shown in the list.</comment>
+  </data>
+  <data name="AutoResXGen_BreadcrumbItem_AutomationPropertiesName_142" xml:space="preserve">
+    <value>Filter</value>
+    <comment>Localizable AutomationName for control that is used by accessibility screen readers.</comment>
+  </data>
+  <data name="ColumnsExplorer_Column_FindTextBox_AutomationName" xml:space="preserve">
+    <value>Filter</value>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_157" xml:space="preserve">
+    <value>Shortcut Rules</value>
+    <comment>The name used to indicate custom filter rules which are specific to a particular application.</comment>
+  </data>
+  <data name="AutoResXGen_AddFilterRulePicker_AutomationPropertiesName_180" xml:space="preserve">
+    <value>Columns Rules</value>
+    <comment>The name used to indicate filter rules that are based upon the properties of the items in the list.</comment>
+  </data>
+  <data name="ManagementList_SortGlyph_Ascending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="ManagementList_SortGlyph_Descending_AutomationName" xml:space="preserve">
+    <value>Sort Glyph</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_119" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="AutoResXGen_DesignerStyleResources_ToolTip_160" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Ascending" xml:space="preserve">
+    <value>Sorted ascending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted ascending.</comment>
+  </data>
+  <data name="InnerList_GridViewColumnHeader_ItemStatus_Descending" xml:space="preserve">
+    <value>Sorted descending</value>
+    <comment>The text used for the accessible ItemStatus property when a column is sorted descending.</comment>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_AutomationName" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_AutomationName" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_83" xml:space="preserve">
+    <value>Search</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_106" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_TextBlock_129" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_AutomationPropertiesName_395" xml:space="preserve">
+    <value>Clear All</value>
+  </data>
+  <data name="AutoResXGen_SearchBox_AutomationPropertiesName_85" xml:space="preserve">
+    <value>Clear Search Text</value>
+  </data>
+  <data name="AutoResXGen_TaskPane_AutomationPropertiesName_133" xml:space="preserve">
+    <value>Tasks</value>
+  </data>
+  <data name="ManagementList_StartFilterButton_AutomationName" xml:space="preserve">
+    <value>Search</value>
+    <comment>The accessible name of the Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_StopFilterButton_AutomationName" xml:space="preserve">
+    <value>Cancel</value>
+    <comment>The accessible name of the Stop Search button in the filter panel.</comment>
+  </data>
+  <data name="ManagementList_ToggleFilterPanelButton_AutomationName" xml:space="preserve">
+    <value>Expand or Collapse Filter Panel</value>
+    <comment>The accessible name of the button that expands/collapses the filter panel.</comment>
+  </data>
+  <data name="ManagementList_SearchBox_BackgroundText_Live" xml:space="preserve">
+    <value>Filter</value>
+    <comment>The background text of the list's search box when filtering is immediate.</comment>
+  </data>
+  <data name="AutoResXGen_ManagementList_ToolTip_314" xml:space="preserve">
+    <value>Click to display saved search queries.</value>
+  </data>
+  <data name="AutoResXGen_ManagementList_Text_392" xml:space="preserve">
+    <value>Filter applied.</value>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_FirstHeader" xml:space="preserve">
+    <value>and</value>
+    <comment>The first header operator indicates that it is the first item in the list of filter rules. The AND value is used to indicate that it is and'ed with the above SearchBox.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Header" xml:space="preserve">
+    <value>and</value>
+    <comment>The header operator indicates that it is the first item in a group of filter rules which are the same. The AND value is used to indicate that it is and'ed with the other groups in the panel.</comment>
+  </data>
+  <data name="FilterRulePanel_LogicalOperatorText_Item" xml:space="preserve">
+    <value>or</value>
+    <comment>The Item operator indicates that it is NOT the first item in a group of filter rules which are the same. The OR value is used to indicate that it is or'ed with the other items in the same group.</comment>
+  </data>
+  <data name="ManagementList_NoMatchesFound_Message" xml:space="preserve">
+    <value>No matches found.</value>
+    <comment>The text displayed in the ManagementList when the filter has been applied but matching items were found.</comment>
+  </data>
+  <data name="CollapsingTabControl_CollapseButton_ToolTip" xml:space="preserve">
+    <value>Collapse</value>
+  </data>
+  <data name="CollapsingTabControl_ExpandButton_ToolTip" xml:space="preserve">
+    <value>Expand</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_ToolTip" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="NavigationList_ShownChildrenButton_AutomationName" xml:space="preserve">
+    <value>Show Children</value>
+  </data>
+  <data name="ManagementListTitle_Title_WithViewName" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>The format string used for the ManagementList title when query has been applied. For example, "Users: My Fancy Query"</comment>
+  </data>
+  <data name="OutGridView_Button_Cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="OutGridView_Button_OK" xml:space="preserve">
+    <value>OK</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs
index fb788b4d26c..dfe046ec8ca 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/CommonUtils.cs
@@ -40,12 +40,12 @@ uint dwFlags
         [DllImport(LocalizationDllName, EntryPoint = "GetUserDefaultLangID", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
         private static extern ushort GetUserDefaultLangID();
 
-        public static uint FormatMessageFromModule(uint lastError, string moduleName, out String msg)
+        public static uint FormatMessageFromModule(uint lastError, string moduleName, out string msg)
         {
             Debug.Assert(!string.IsNullOrEmpty(moduleName));
 
             uint formatError = 0;
-            msg = String.Empty;
+            msg = string.Empty;
 
             IntPtr moduleHandle = LoadLibraryEx(moduleName, IntPtr.Zero, LOAD_LIBRARY_AS_DATAFILE);
             if (moduleHandle == IntPtr.Zero)
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/CoreCLR/Stubs.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/CoreCLR/Stubs.cs
deleted file mode 100644
index 5d57816c0e7..00000000000
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/CoreCLR/Stubs.cs
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#if CORECLR
-
-namespace System.Diagnostics
-{
-    /// <summary>
-    /// Indicates whether the performance counter category can have multiple instances.
-    /// </summary>
-    /// <filterpriority>1</filterpriority>
-    public enum PerformanceCounterCategoryType
-    {
-        /// <summary>
-        /// The instance functionality for the performance counter category is unknown.
-        /// </summary>
-        Unknown = -1,
-
-        /// <summary>
-        /// The performance counter category can have only a single instance.
-        /// </summary>
-        SingleInstance,
-
-        /// <summary>
-        /// The performance counter category can have multiple instances.
-        /// </summary>
-        MultiInstance
-    }
-
-    /// <summary>
-    /// Specifies the formula used to calculate the <see cref="M:System.Diagnostics.PerformanceCounter.NextValue"/>
-    /// method for a <see cref="T:System.Diagnostics.PerformanceCounter"/> instance.
-    /// </summary>
-    /// <filterpriority>2</filterpriority>
-    public enum PerformanceCounterType
-    {
-        /// <summary>
-        /// An instantaneous counter that shows the most recently observed value.
-        /// Used, for example, to maintain a simple count of items or operations.
-        /// </summary>
-        NumberOfItems32 = 65536,
-
-        /// <summary>
-        /// An instantaneous counter that shows the most recently observed value.
-        /// Used, for example, to maintain a simple count of a very large number
-        /// of items or operations. It is the same as NumberOfItems32 except that
-        /// it uses larger fields to accommodate larger values.
-        /// </summary>
-        NumberOfItems64 = 65792,
-
-        /// <summary>
-        /// An instantaneous counter that shows the most recently observed value
-        /// in hexadecimal format. Used, for example, to maintain a simple count
-        /// of items or operations.</summary>
-        NumberOfItemsHEX32 = 0,
-
-        /// <summary>
-        /// An instantaneous counter that shows the most recently observed value.
-        /// Used, for example, to maintain a simple count of a very large number
-        /// of items or operations. It is the same as NumberOfItemsHEX32 except
-        /// that it uses larger fields to accommodate larger values.
-        /// </summary>
-        NumberOfItemsHEX64 = 256,
-
-        /// <summary>
-        /// A difference counter that shows the average number of operations completed
-        /// during each second of the sample interval. Counters of this type measure
-        /// time in ticks of the system clock.</summary>
-        RateOfCountsPerSecond32 = 272696320,
-
-        /// <summary>
-        /// A difference counter that shows the average number of operations completed
-        /// during each second of the sample interval. Counters of this type measure
-        /// time in ticks of the system clock. This counter type is the same as the
-        /// RateOfCountsPerSecond32 type, but it uses larger fields to accommodate
-        /// larger values to track a high-volume number of items or operations per
-        /// second, such as a byte-transmission rate.
-        /// </summary>
-        RateOfCountsPerSecond64 = 272696576,
-
-        /// <summary>
-        /// An average counter designed to monitor the average length of a queue
-        /// to a resource over time. It shows the difference between the queue
-        /// lengths observed during the last two sample intervals divided by the
-        /// duration of the interval. This type of counter is typically used to
-        /// track the number of items that are queued or waiting.
-        /// </summary>
-        CountPerTimeInterval32 = 4523008,
-
-        /// <summary>
-        /// An average counter that monitors the average length of a queue to a
-        /// resource over time. Counters of this type display the difference
-        /// between the queue lengths observed during the last two sample intervals,
-        /// divided by the duration of the interval. This counter type is the same
-        /// as CountPerTimeInterval32 except that it uses larger fields to
-        /// accommodate larger values. This type of counter is typically used
-        /// to track a high-volume or very large number of items that are queued or waiting.
-        /// </summary>
-        CountPerTimeInterval64 = 4523264,
-
-        /// <summary>
-        /// An instantaneous percentage counter that shows the ratio of a subset
-        /// to its set as a percentage. For example, it compares the number of bytes
-        /// in use on a disk to the total number of bytes on the disk.
-        /// Counters of this type display the current percentage only, not an average
-        /// over time.
-        /// </summary>
-        RawFraction = 537003008,
-
-        /// <summary>
-        /// A base counter that stores the denominator of a counter that presents a
-        /// general arithmetic fraction. Check that this value is greater than zero
-        /// before using it as the denominator in a RawFraction value calculation.
-        /// </summary>
-        RawBase = 1073939459,
-
-        /// <summary>
-        /// An average counter that measures the time it takes, on average, to
-        /// complete a process or operation. Counters of this type display a
-        /// ratio of the total elapsed time of the sample interval to the number
-        /// of processes or operations completed during that time. This counter
-        /// type measures time in ticks of the system clock.
-        /// </summary>
-        AverageTimer32 = 805438464,
-
-        /// <summary>
-        /// A base counter that is used in the calculation of time or count averages,
-        ///  such as AverageTimer32 and AverageCount64. Stores the denominator for
-        /// calculating a counter to present "time per operation" or "count per operation".
-        /// </summary>
-        AverageBase = 1073939458,
-
-        /// <summary>
-        /// An average counter that shows how many items are processed, on average,
-        /// during an operation. Counters of this type display a ratio of the items
-        /// processed to the number of operations completed. The ratio is calculated
-        /// by comparing the number of items processed during the last interval to
-        /// the number of operations completed during the last interval.
-        /// </summary>
-        AverageCount64 = 1073874176,
-
-        /// <summary>
-        /// A percentage counter that shows the average ratio of hits to all
-        /// operations during the last two sample intervals.
-        /// </summary>
-        SampleFraction = 549585920,
-
-        /// <summary>
-        /// An average counter that shows the average number of operations completed
-        /// in one second. When a counter of this type samples the data, each sampling
-        /// interrupt returns one or zero. The counter data is the number of ones that
-        /// were sampled. It measures time in units of ticks of the system performance timer.
-        /// </summary>
-        SampleCounter = 4260864,
-
-        /// <summary>
-        /// A base counter that stores the number of sampling interrupts taken
-        /// and is used as a denominator in the sampling fraction. The sampling
-        /// fraction is the number of samples that were 1 (or true) for a sample
-        /// interrupt. Check that this value is greater than zero before using
-        /// it as the denominator in a calculation of SampleFraction.
-        /// </summary>
-        SampleBase = 1073939457,
-
-        /// <summary>
-        /// A percentage counter that shows the average time that a component is
-        /// active as a percentage of the total sample time.
-        /// </summary>
-        CounterTimer = 541132032,
-
-        /// <summary>
-        /// A percentage counter that displays the average percentage of active
-        /// time observed during sample interval. The value of these counters is
-        /// calculated by monitoring the percentage of time that the service was
-        /// inactive and then subtracting that value from 100 percent.
-        /// </summary>
-        CounterTimerInverse = 557909248,
-
-        /// <summary>A percentage counter that shows the active time of a component
-        /// as a percentage of the total elapsed time of the sample interval.
-        /// It measures time in units of 100 nanoseconds (ns). Counters of this
-        /// type are designed to measure the activity of one component at a time.
-        /// </summary>
-        Timer100Ns = 542180608,
-
-        /// <summary>
-        /// A percentage counter that shows the average percentage of active time
-        /// observed during the sample interval.
-        /// </summary>
-        Timer100NsInverse = 558957824,
-
-        /// <summary>
-        /// A difference timer that shows the total time between when the component
-        /// or process started and the time when this value is calculated.
-        /// </summary>
-        ElapsedTime = 807666944,
-
-        /// <summary>
-        /// A percentage counter that displays the active time of one or more
-        /// components as a percentage of the total time of the sample interval.
-        /// Because the numerator records the active time of components operating
-        /// simultaneously, the resulting percentage can exceed 100 percent.
-        /// </summary>
-        CounterMultiTimer = 574686464,
-
-        /// <summary>
-        /// A percentage counter that shows the active time of one or more components
-        /// as a percentage of the total time of the sample interval. It derives
-        /// the active time by measuring the time that the components were not
-        /// active and subtracting the result from 100 percent by the number of
-        /// objects monitored.
-        /// </summary>
-        CounterMultiTimerInverse = 591463680,
-
-        /// <summary>
-        /// A percentage counter that shows the active time of one or more components
-        /// as a percentage of the total time of the sample interval. It measures
-        /// time in 100 nanosecond (ns) units.</summary>
-        CounterMultiTimer100Ns = 575735040,
-
-        /// <summary>
-        /// A percentage counter that shows the active time of one or more components
-        /// as a percentage of the total time of the sample interval. Counters of
-        /// this type measure time in 100 nanosecond (ns) units. They derive the
-        /// active time by measuring the time that the components were not active
-        /// and subtracting the result from multiplying 100 percent by the number
-        /// of objects monitored.</summary>
-        CounterMultiTimer100NsInverse = 592512256,
-
-        /// <summary>
-        /// A base counter that indicates the number of items sampled. It is used
-        /// as the denominator in the calculations to get an average among the
-        /// items sampled when taking timings of multiple, but similar items.
-        /// Used with CounterMultiTimer, CounterMultiTimerInverse, CounterMultiTimer100Ns,
-        /// and CounterMultiTimer100NsInverse.</summary>
-        CounterMultiBase = 1107494144,
-
-        /// <summary>
-        /// A difference counter that shows the change in the measured attribute
-        /// between the two most recent sample intervals.
-        /// </summary>
-        CounterDelta32 = 4195328,
-
-        /// <summary>
-        /// A difference counter that shows the change in the measured attribute
-        /// between the two most recent sample intervals. It is the same as the
-        /// CounterDelta32 counter type except that is uses larger fields to
-        /// accomodate larger values.</summary>
-        CounterDelta64 = 4195584
-    }
-}
-#endif
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/CounterFileInfo.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/CounterFileInfo.cs
deleted file mode 100644
index cbebb9b4557..00000000000
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/CounterFileInfo.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.ComponentModel;
-using System.Diagnostics;
-
-namespace Microsoft.PowerShell.Commands.GetCounter
-{
-    public class CounterFileInfo
-    {
-        internal CounterFileInfo(DateTime oldestRecord,
-            DateTime newestRecord,
-            UInt32 sampleCount)
-        {
-            _oldestRecord = oldestRecord;
-            _newestRecord = newestRecord;
-            _sampleCount = sampleCount;
-        }
-
-        internal CounterFileInfo() { }
-
-        public DateTime OldestRecord
-        {
-            get
-            {
-                return _oldestRecord;
-            }
-        }
-
-        private DateTime _oldestRecord = DateTime.MinValue;
-
-        public DateTime NewestRecord
-        {
-            get
-            {
-                return _newestRecord;
-            }
-        }
-
-        private DateTime _newestRecord = DateTime.MaxValue;
-
-        public UInt32 SampleCount
-        {
-            get
-            {
-                return _sampleCount;
-            }
-        }
-
-        private UInt32 _sampleCount = 0;
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/ExportCounterCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/ExportCounterCommand.cs
deleted file mode 100644
index 9385e55909f..00000000000
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/ExportCounterCommand.cs
+++ /dev/null
@@ -1,383 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Collections.Specialized;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.IO;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-using System.Net;
-using System.Reflection;
-using System.Resources;
-using System.Security;
-using System.Security.Principal;
-using System.Text;
-using System.Threading;
-using System.Xml;
-
-using Microsoft.PowerShell.Commands.Diagnostics.Common;
-using Microsoft.PowerShell.Commands.GetCounter;
-using Microsoft.Powershell.Commands.GetCounter.PdhNative;
-
-namespace Microsoft.PowerShell.Commands
-{
-    ///
-    /// Class that implements the Get-Counter cmdlet.
-    ///
-    [Cmdlet(VerbsData.Export, "Counter", DefaultParameterSetName = "ExportCounterSet", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=138337")]
-    public sealed class ExportCounterCommand : PSCmdlet
-    {
-        //
-        // Path parameter
-        //
-        [Parameter(
-                Mandatory = true,
-                Position = 0,
-                ValueFromPipelineByPropertyName = true,
-                HelpMessageBaseName = "GetEventResources")]
-        [Alias("PSPath")]
-
-        public string Path
-        {
-            get { return _path; }
-
-            set { _path = value; }
-        }
-
-        private string _path;
-        private string _resolvedPath;
-
-        //
-        // Format parameter.
-        // Valid strings are "blg", "csv", "tsv" (case-insensitive).
-        //
-        [Parameter(
-                Mandatory = false,
-                ValueFromPipeline = false,
-                ValueFromPipelineByPropertyName = false,
-                HelpMessageBaseName = "GetEventResources")]
-        [ValidateNotNull]
-        [ValidateSet("blg", "csv", "tsv")]
-        public string FileFormat
-        {
-            get { return _format; }
-
-            set { _format = value; }
-        }
-
-        private string _format = "blg";
-
-        //
-        // MaxSize parameter
-        // Maximum output file size, in megabytes.
-        //
-        [Parameter(
-                HelpMessageBaseName = "GetEventResources")]
-        public UInt32 MaxSize
-        {
-            get { return _maxSize; }
-
-            set { _maxSize = value; }
-        }
-
-        private UInt32 _maxSize = 0;
-
-        //
-        // InputObject parameter
-        //
-        [Parameter(
-                Mandatory = true,
-                ValueFromPipeline = true,
-                ValueFromPipelineByPropertyName = true,
-                HelpMessageBaseName = "GetEventResources")]
-
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays",
-                            Scope = "member",
-                            Target = "Microsoft.PowerShell.Commands.ExportCounterCommand.InputObject",
-                            Justification = "A PerformanceCounterSampleSet[] is required here because Powershell supports arrays natively.")]
-        public PerformanceCounterSampleSet[] InputObject
-        {
-            get { return _counterSampleSets; }
-
-            set { _counterSampleSets = value; }
-        }
-
-        private PerformanceCounterSampleSet[] _counterSampleSets = new PerformanceCounterSampleSet[0];
-
-        //
-        // Force switch
-        //
-        [Parameter(
-                HelpMessageBaseName = "GetEventResources")]
-        public SwitchParameter Force
-        {
-            get { return _force; }
-
-            set { _force = value; }
-        }
-
-        private SwitchParameter _force;
-
-        //
-        // Circular switch
-        //
-        [Parameter(
-                HelpMessageBaseName = "GetEventResources")]
-        public SwitchParameter Circular
-        {
-            get { return _circular; }
-
-            set { _circular = value; }
-        }
-
-        private SwitchParameter _circular;
-
-        private ResourceManager _resourceMgr = null;
-
-        private PdhHelper _pdhHelper = null;
-
-        private bool _stopping = false;
-
-        private bool _queryInitialized = false;
-
-        private PdhLogFileType _outputFormat = PdhLogFileType.PDH_LOG_TYPE_BINARY;
-
-        //
-        // BeginProcessing() is invoked once per pipeline
-        //
-        protected override void BeginProcessing()
-        {
-
-#if CORECLR
-            if (Platform.IsIoT)
-            {
-                // IoT does not have the '$env:windir\System32\pdh.dll' assembly which is required by this cmdlet.
-                throw new PlatformNotSupportedException();
-            }
-
-            // PowerShell 7 requires at least Windows 7,
-            // so no version test is needed
-            _pdhHelper = new PdhHelper(false);
-#else
-            //
-            // Determine the OS version: this cmdlet requires Windows 7
-            // because it uses new Pdh functionality.
-            //
-            Version osVersion = System.Environment.OSVersion.Version;
-            if (osVersion.Major < 6 ||
-                (osVersion.Major == 6 && osVersion.Minor < 1))
-            {
-                string msg = _resourceMgr.GetString("ExportCtrWin7Required");
-                Exception exc = new Exception(msg);
-                ThrowTerminatingError(new ErrorRecord(exc, "ExportCtrWin7Required", ErrorCategory.NotImplemented, null));
-            }
-
-            _pdhHelper = new PdhHelper(osVersion.Major < 6);
-#endif
-            _resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
-
-            //
-            // Set output format (log file type)
-            //
-            SetOutputFormat();
-
-            if (Circular.IsPresent && _maxSize == 0)
-            {
-                string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterCircularNoMaxSize"));
-                Exception exc = new Exception(msg);
-                WriteError(new ErrorRecord(exc, "CounterCircularNoMaxSize", ErrorCategory.InvalidResult, null));
-            }
-
-            uint res = _pdhHelper.ConnectToDataSource();
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-            }
-
-            res = _pdhHelper.OpenQuery();
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-            }
-        }
-
-        //
-        // EndProcessing() is invoked once per pipeline
-        //
-        protected override void EndProcessing()
-        {
-            _pdhHelper.Dispose();
-        }
-
-        ///
-        /// Handle Control-C
-        ///
-        protected override void StopProcessing()
-        {
-            _stopping = true;
-            _pdhHelper.Dispose();
-        }
-
-        //
-        // ProcessRecord() override.
-        // This is the main entry point for the cmdlet.
-        // When counter data comes from the pipeline, this gets invoked for each pipelined object.
-        // When it's passed in as an argument, ProcessRecord() is called once for the entire _counterSampleSets array.
-        //
-        protected override void ProcessRecord()
-        {
-            Debug.Assert(_counterSampleSets.Length != 0 && _counterSampleSets[0] != null);
-
-            ResolvePath();
-
-            uint res = 0;
-
-            if (!_queryInitialized)
-            {
-                if (_format.ToLowerInvariant().Equals("blg"))
-                {
-                    res = _pdhHelper.AddRelogCounters(_counterSampleSets[0]);
-                }
-                else
-                {
-                    res = _pdhHelper.AddRelogCountersPreservingPaths(_counterSampleSets[0]);
-                }
-
-                if (res != 0)
-                {
-                    ReportPdhError(res, true);
-                }
-
-                res = _pdhHelper.OpenLogForWriting(_resolvedPath, _outputFormat, Force.IsPresent, _maxSize * 1024 * 1024, Circular.IsPresent, null);
-                if (res == PdhResults.PDH_FILE_ALREADY_EXISTS)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterFileExists"), _resolvedPath);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "CounterFileExists", ErrorCategory.InvalidResult, null));
-                }
-                else if (res == PdhResults.PDH_LOG_FILE_CREATE_ERROR)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("FileCreateFailed"), _resolvedPath);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "FileCreateFailed", ErrorCategory.InvalidResult, null));
-                }
-                else if (res == PdhResults.PDH_LOG_FILE_OPEN_ERROR)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("FileOpenFailed"), _resolvedPath);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "FileOpenFailed", ErrorCategory.InvalidResult, null));
-                }
-                else if (res != 0)
-                {
-                    ReportPdhError(res, true);
-                }
-
-                _queryInitialized = true;
-            }
-
-            foreach (PerformanceCounterSampleSet set in _counterSampleSets)
-            {
-                _pdhHelper.ResetRelogValues();
-
-                foreach (PerformanceCounterSample sample in set.CounterSamples)
-                {
-                    bool bUnknownKey = false;
-                    res = _pdhHelper.SetCounterValue(sample, out bUnknownKey);
-                    if (bUnknownKey)
-                    {
-                        string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterExportSampleNotInInitialSet"), sample.Path, _resolvedPath);
-                        Exception exc = new Exception(msg);
-                        WriteError(new ErrorRecord(exc, "CounterExportSampleNotInInitialSet", ErrorCategory.InvalidResult, null));
-                    }
-                    else if (res != 0)
-                    {
-                        ReportPdhError(res, true);
-                    }
-                }
-
-                res = _pdhHelper.WriteRelogSample(set.Timestamp);
-                if (res != 0)
-                {
-                    ReportPdhError(res, true);
-                }
-
-                if (_stopping)
-                {
-                    break;
-                }
-            }
-        }
-
-        // Determines Log File Type based on FileFormat parameter
-        //
-        private void SetOutputFormat()
-        {
-            switch (_format.ToLowerInvariant())
-            {
-                case "csv":
-                    _outputFormat = PdhLogFileType.PDH_LOG_TYPE_CSV;
-                    break;
-                case "tsv":
-                    _outputFormat = PdhLogFileType.PDH_LOG_TYPE_TSV;
-                    break;
-                default:  // By default file format is blg
-                    _outputFormat = PdhLogFileType.PDH_LOG_TYPE_BINARY;
-                    break;
-            }
-        }
-
-        private void ResolvePath()
-        {
-            try
-            {
-                Collection<PathInfo> result = null;
-                result = SessionState.Path.GetResolvedPSPathFromPSPath(_path);
-                if (result.Count > 1)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("ExportDestPathAmbiguous"), _path);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "ExportDestPathAmbiguous", ErrorCategory.InvalidArgument, null));
-                }
-
-                foreach (PathInfo currentPath in result)
-                {
-                    _resolvedPath = currentPath.ProviderPath;
-                }
-            }
-            catch (ItemNotFoundException pathNotFound)
-            {
-                //
-                // This is an expected condition - we will be creating a new file
-                //
-                _resolvedPath = pathNotFound.ItemName;
-            }
-        }
-
-        private void ReportPdhError(uint res, bool bTerminate)
-        {
-            string msg;
-            uint formatRes = CommonUtilities.FormatMessageFromModule(res, "pdh.dll", out msg);
-            if (formatRes != 0)
-            {
-                msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterApiError"), res);
-            }
-
-            Exception exc = new Exception(msg);
-            if (bTerminate)
-            {
-                ThrowTerminatingError(new ErrorRecord(exc, "CounterApiError", ErrorCategory.InvalidResult, null));
-            }
-            else
-            {
-                WriteError(new ErrorRecord(exc, "CounterApiError", ErrorCategory.InvalidResult, null));
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs
index 4a6941cc13f..0122ad1941f 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/GetCounterCommand.cs
@@ -248,7 +248,7 @@ protected override void ProcessRecord()
                         break;
 
                     default:
-                        Debug.Fail(string.Format(CultureInfo.InvariantCulture, "Invalid parameter set name: {0}", ParameterSetName));
+                        Debug.Fail(string.Create(CultureInfo.InvariantCulture, $"Invalid parameter set name: {ParameterSetName}"));
                         break;
                 }
             }
@@ -587,13 +587,14 @@ private List<string> CombineMachinesAndCounterPaths()
                 {
                     foreach (string machine in ComputerName)
                     {
+                        string slashBeforePath = path.Length > 0 && path[0] == '\\' ? string.Empty : "\\";
                         if (machine.StartsWith("\\\\", StringComparison.OrdinalIgnoreCase))
                         {
-                            retColl.Add(machine + "\\" + path);
+                            retColl.Add(machine + slashBeforePath + path);
                         }
                         else
                         {
-                            retColl.Add("\\\\" + machine + "\\" + path);
+                            retColl.Add("\\\\" + machine + slashBeforePath + path);
                         }
                     }
                 }
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs
index 1a74da73d1c..0ce68a31d73 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventCommand.cs
@@ -23,6 +23,9 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// Class that implements the Get-WinEvent cmdlet.
     /// </summary>
+    [OutputType(typeof(EventRecord), ParameterSetName = new string[] { "GetLogSet", "GetProviderSet", "FileSet", "HashQuerySet", "XmlQuerySet" })]
+    [OutputType(typeof(ProviderMetadata), ParameterSetName = new string[] { "ListProviderSet" })]
+    [OutputType(typeof(EventLogConfiguration), ParameterSetName = new string[] { "ListLogSet" })]
     [Cmdlet(VerbsCommon.Get, "WinEvent", DefaultParameterSetName = "GetLogSet", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096581")]
     public sealed class GetWinEventCommand : PSCmdlet
     {
@@ -144,8 +147,8 @@ public sealed class GetWinEventCommand : PSCmdlet
                 ValueFromPipelineByPropertyName = false,
                 HelpMessageBaseName = "GetEventResources",
                 HelpMessageResourceId = "MaxEventsParamHelp")]
-        [ValidateRange((Int64)1, Int64.MaxValue)]
-        public Int64 MaxEvents { get; set; } = -1;
+        [ValidateRange((long)1, long.MaxValue)]
+        public long MaxEvents { get; set; } = -1;
 
         /// <summary>
         /// ComputerName parameter.
@@ -222,10 +225,6 @@ public sealed class GetWinEventCommand : PSCmdlet
                 ValueFromPipelineByPropertyName = false,
                 ParameterSetName = "XmlQuerySet",
                 HelpMessageBaseName = "GetEventResources")]
-        [SuppressMessage("Microsoft.Design", "CA1059:MembersShouldNotExposeCertainConcreteTypes",
-                            Scope = "member",
-                            Target = "Microsoft.PowerShell.Commands.GetEvent.FilterXml",
-                            Justification = "An XmlDocument is required here because that is the type Powershell supports")]
         public XmlDocument FilterXml { get; set; }
 
         /// <summary>
@@ -393,7 +392,7 @@ protected override void ProcessRecord()
                     break;
 
                 default:
-                    WriteDebug(string.Format(CultureInfo.InvariantCulture, "Invalid parameter set name: {0}", ParameterSetName));
+                    WriteDebug(string.Create(CultureInfo.InvariantCulture, $"Invalid parameter set name: {ParameterSetName}"));
                     break;
             }
         }
@@ -489,7 +488,7 @@ private void ProcessGetProvider()
                     foreach (string log in _providersByLogMap.Keys)
                     {
                         logQuery = new EventLogQuery(log, PathType.LogName, AddProviderPredicatesToFilter(_providersByLogMap[log]));
-                        WriteVerbose(string.Format(CultureInfo.InvariantCulture, "Log {0} will be queried", log));
+                        WriteVerbose(string.Create(CultureInfo.InvariantCulture, $"Log {log} will be queried"));
                     }
                 }
 
@@ -519,9 +518,11 @@ private void ProcessListLog()
                             ||
                             (wildLogPattern.IsMatch(logName)))
                         {
+                            EventLogConfiguration logObj;
+                            EventLogInformation logInfoObj;
                             try
                             {
-                                EventLogConfiguration logObj = new(logName, eventLogSession);
+                                logObj = new EventLogConfiguration(logName, eventLogSession);
 
                                 //
                                 // Skip direct channels matching the wildcard unless -Force is present.
@@ -534,19 +535,25 @@ private void ProcessListLog()
                                     continue;
                                 }
 
-                                EventLogInformation logInfoObj = eventLogSession.GetLogInformation(logName, PathType.LogName);
-
-                                PSObject outputObj = new(logObj);
+                                bMatchFound = true;
+                                logInfoObj = eventLogSession.GetLogInformation(logName, PathType.LogName);
+                            }
+                            catch (UnauthorizedAccessException exc)
+                            {
+                                string exceptionMsg = string.Format(CultureInfo.InvariantCulture, GetEventResources.LogInfoNoAccess, logName);
+                                var newExc = new UnauthorizedAccessException(exceptionMsg, exc);
 
-                                outputObj.Properties.Add(new PSNoteProperty("FileSize", logInfoObj.FileSize));
-                                outputObj.Properties.Add(new PSNoteProperty("IsLogFull", logInfoObj.IsLogFull));
-                                outputObj.Properties.Add(new PSNoteProperty("LastAccessTime", logInfoObj.LastAccessTime));
-                                outputObj.Properties.Add(new PSNoteProperty("LastWriteTime", logInfoObj.LastWriteTime));
-                                outputObj.Properties.Add(new PSNoteProperty("OldestRecordNumber", logInfoObj.OldestRecordNumber));
-                                outputObj.Properties.Add(new PSNoteProperty("RecordCount", logInfoObj.RecordCount));
+                                string recommendationMsg = GetEventResources.SuggestElevation;
+                                var eRecord = new ErrorRecord(newExc, "LogInfoNoAccess", ErrorCategory.PermissionDenied, logName)
+                                {
+                                    ErrorDetails = new ErrorDetails(string.Empty)
+                                    {
+                                        RecommendedAction = recommendationMsg
+                                    }
+                                };
 
-                                WriteObject(outputObj);
-                                bMatchFound = true;
+                                WriteError(eRecord);
+                                continue;
                             }
                             catch (Exception exc)
                             {
@@ -557,6 +564,16 @@ private void ProcessListLog()
                                 WriteError(new ErrorRecord(outerExc, "LogInfoUnavailable", ErrorCategory.NotSpecified, null));
                                 continue;
                             }
+
+                            PSObject outputObj = new(logObj);
+                            outputObj.Properties.Add(new PSNoteProperty("FileSize", logInfoObj.FileSize));
+                            outputObj.Properties.Add(new PSNoteProperty("IsLogFull", logInfoObj.IsLogFull));
+                            outputObj.Properties.Add(new PSNoteProperty("LastAccessTime", logInfoObj.LastAccessTime));
+                            outputObj.Properties.Add(new PSNoteProperty("LastWriteTime", logInfoObj.LastWriteTime));
+                            outputObj.Properties.Add(new PSNoteProperty("OldestRecordNumber", logInfoObj.OldestRecordNumber));
+                            outputObj.Properties.Add(new PSNoteProperty("RecordCount", logInfoObj.RecordCount));
+
+                            WriteObject(outputObj);
                         }
                     }
 
@@ -677,7 +694,7 @@ private void ProcessFile()
                     foreach (string resolvedPath in resolvedPaths)
                     {
                         _resolvedPaths.Add(resolvedPath);
-                        WriteVerbose(string.Format(CultureInfo.InvariantCulture, "Found file {0}", resolvedPath));
+                        WriteVerbose(string.Create(CultureInfo.InvariantCulture, $"Found file {resolvedPath}"));
                     }
                 }
 
@@ -777,7 +794,7 @@ private void ReadEvents(EventLogQuery logQuery)
         {
             using (EventLogReader readerObj = new(logQuery))
             {
-                Int64 numEvents = 0;
+                long numEvents = 0;
                 EventRecord evtObj = null;
 
                 while (true)
@@ -905,7 +922,7 @@ private string BuildStructuredQuery(EventLogSession eventLogSession)
                     break;
 
                 default:
-                    WriteDebug(string.Format(CultureInfo.InvariantCulture, "Invalid parameter set name: {0}", ParameterSetName));
+                    WriteDebug(string.Create(CultureInfo.InvariantCulture, $"Invalid parameter set name: {ParameterSetName}"));
                     break;
             }
 
@@ -1184,8 +1201,7 @@ private string BuildStructuredQueryFromHashTable(EventLogSession eventLogSession
                 //
                 // Build xpath for <Suppress>
                 //
-                Hashtable suppresshash = hash[hashkey_supress_lc] as Hashtable;
-                if (suppresshash != null)
+                if (hash[hashkey_supress_lc] is Hashtable suppresshash)
                 {
                     xpathStringSuppress = BuildXPathFromHashTable(suppresshash);
                 }
@@ -1252,8 +1268,7 @@ private string BuildStructuredQueryFromHashTable(EventLogSession eventLogSession
         private static string HandleEventIdHashValue(object value)
         {
             StringBuilder ret = new();
-            Array idsArray = value as Array;
-            if (idsArray != null)
+            if (value is Array idsArray)
             {
                 ret.Append('(');
                 for (int i = 0; i < idsArray.Length; i++)
@@ -1282,8 +1297,7 @@ private static string HandleEventIdHashValue(object value)
         private static string HandleLevelHashValue(object value)
         {
             StringBuilder ret = new();
-            Array levelsArray = value as Array;
-            if (levelsArray != null)
+            if (value is Array levelsArray)
             {
                 ret.Append('(');
                 for (int i = 0; i < levelsArray.Length; i++)
@@ -1311,11 +1325,10 @@ private static string HandleLevelHashValue(object value)
         //
         private string HandleKeywordHashValue(object value)
         {
-            Int64 keywordsMask = 0;
-            Int64 keywordLong = 0;
+            long keywordsMask = 0;
+            long keywordLong = 0;
 
-            Array keywordArray = value as Array;
-            if (keywordArray != null)
+            if (value is Array keywordArray)
             {
                 foreach (object keyword in keywordArray)
                 {
@@ -1470,8 +1483,7 @@ private string HandleEndTimeHashValue(object value, Hashtable hash)
         private static string HandleDataHashValue(object value)
         {
             StringBuilder ret = new();
-            Array dataArray = value as Array;
-            if (dataArray != null)
+            if (value is Array dataArray)
             {
                 ret.Append('(');
                 for (int i = 0; i < dataArray.Length; i++)
@@ -1501,8 +1513,7 @@ private static string HandleDataHashValue(object value)
         private static string HandleNamedDataHashValue(string key, object value)
         {
             StringBuilder ret = new();
-            Array dataArray = value as Array;
-            if (dataArray != null)
+            if (value is Array dataArray)
             {
                 ret.Append('(');
                 for (int i = 0; i < dataArray.Length; i++)
@@ -1609,7 +1620,7 @@ private bool ValidateLogName(string logName, EventLogSession eventLogSession)
         // Returns true and keyLong ref if successful.
         // Writes an error and returns false if keyString cannot be converted.
         //
-        private bool KeywordStringToInt64(string keyString, ref Int64 keyLong)
+        private bool KeywordStringToInt64(string keyString, ref long keyLong)
         {
             try
             {
@@ -1749,8 +1760,7 @@ private void CheckHashTablesForNullValues()
                     }
                     else
                     {
-                        Array eltArray = value as Array;
-                        if (eltArray != null)
+                        if (value is Array eltArray)
                         {
                             foreach (object elt in eltArray)
                             {
@@ -2044,7 +2054,7 @@ private void FindProvidersByLogForWildcardPatterns(EventLogSession eventLogSessi
                       ||
                       (wildProvPattern.IsMatch(provName)))
                     {
-                        WriteVerbose(string.Format(CultureInfo.InvariantCulture, "Found matching provider: {0}", provName));
+                        WriteVerbose(string.Create(CultureInfo.InvariantCulture, $"Found matching provider: {provName}"));
                         AddLogsForProviderToInternalMap(eventLogSession, provName);
                         bMatched = true;
                     }
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventSnapin.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventSnapin.cs
deleted file mode 100644
index df3835d9e18..00000000000
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/GetEventSnapin.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Management.Automation;
-using System.Text;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Create the PowerShell snap-in used to register the
-    /// Get-WinEvent cmdlet. Declaring the PSSnapIn class identifies
-    /// this .cs file as a PowerShell snap-in.
-    /// </summary>
-    [RunInstaller(true)]
-    public class GetEventPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of the GetEventPSSnapIn class.
-        /// </summary>
-        public GetEventPSSnapIn()
-               : base()
-        {
-        }
-
-        /// <summary>
-        /// Specify the name of the PowerShell snap-in.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return "Microsoft.Powershell.GetEvent";
-            }
-        }
-
-        /// <summary>
-        /// Specify the vendor of the PowerShell snap-in.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for vendor. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "GetEventResources,Vendor";
-            }
-        }
-
-        /// <summary>
-        /// Specifies the description of the PowerShell snap-in.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This PS snap-in contains Get-WinEvent cmdlet used to read Windows event log data and configuration.";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for description. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "GetEventResources,Description";
-            }
-        }
-
-        /// <summary>
-        /// Get type files to be used for this mshsnapin.
-        /// </summary>
-        public override string[] Types
-        {
-            get
-            {
-                return _types;
-            }
-        }
-
-        private string[] _types = new string[] { "getevent.types.ps1xml" };
-
-        /// <summary>
-        /// Get format files to be used for this mshsnapin.
-        /// </summary>
-        public override string[] Formats
-        {
-            get
-            {
-                return _formats;
-            }
-        }
-
-        private string[] _formats = new string[] { "Event.format.ps1xml" };
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/ImportCounterCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/ImportCounterCommand.cs
deleted file mode 100644
index d571df34084..00000000000
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/ImportCounterCommand.cs
+++ /dev/null
@@ -1,682 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Collections.Specialized;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.IO;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-using System.Net;
-using System.Reflection;
-using System.Resources;
-using System.Security;
-using System.Security.Principal;
-using System.Text;
-using System.Threading;
-using System.Xml;
-
-using Microsoft.PowerShell.Commands.Diagnostics.Common;
-using Microsoft.PowerShell.Commands.GetCounter;
-using Microsoft.Powershell.Commands.GetCounter.PdhNative;
-
-namespace Microsoft.PowerShell.Commands
-{
-    ///
-    /// Class that implements the Get-Counter cmdlet.
-    ///
-    [Cmdlet(VerbsData.Import, "Counter", DefaultParameterSetName = "GetCounterSet", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=138338")]
-    public sealed class ImportCounterCommand : PSCmdlet
-    {
-        //
-        // Path parameter
-        //
-        [Parameter(
-                Position = 0,
-                Mandatory = true,
-                ValueFromPipeline = true,
-                ValueFromPipelineByPropertyName = true,
-                HelpMessageBaseName = "GetEventResources")]
-        [Alias("PSPath")]
-
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays",
-                            Scope = "member",
-                            Target = "Microsoft.PowerShell.Commands.GetCounterCommand.ListSet",
-                            Justification = "A string[] is required here because that is the type Powershell supports")]
-        public string[] Path
-        {
-            get { return _path; }
-
-            set { _path = value; }
-        }
-
-        private string[] _path;
-
-        private StringCollection _resolvedPaths = new StringCollection();
-
-        private List<string> _accumulatedFileNames = new List<string>();
-
-        //
-        // ListSet parameter
-        //
-        [Parameter(
-                Mandatory = true,
-                ParameterSetName = "ListSetSet",
-                ValueFromPipeline = false,
-                ValueFromPipelineByPropertyName = false,
-                HelpMessageBaseName = "GetEventResources")]
-        [AllowEmptyCollection]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays",
-                            Scope = "member",
-                            Target = "Microsoft.PowerShell.Commands.GetCounterCommand.ListSet",
-                            Justification = "A string[] is required here because that is the type Powershell supports")]
-        public string[] ListSet
-        {
-            get { return _listSet; }
-
-            set { _listSet = value; }
-        }
-
-        private string[] _listSet = Array.Empty<string>();
-
-        //
-        // StartTime parameter
-        //
-        [Parameter(
-                ValueFromPipeline = false,
-                ValueFromPipelineByPropertyName = false,
-                ParameterSetName = "GetCounterSet",
-                HelpMessageBaseName = "GetEventResources")]
-        public DateTime StartTime
-        {
-            get { return _startTime; }
-
-            set { _startTime = value; }
-        }
-
-        private DateTime _startTime = DateTime.MinValue;
-
-        //
-        // EndTime parameter
-        //
-        [Parameter(
-                ValueFromPipeline = false,
-                ValueFromPipelineByPropertyName = false,
-                ParameterSetName = "GetCounterSet",
-                HelpMessageBaseName = "GetEventResources")]
-        public DateTime EndTime
-        {
-            get { return _endTime; }
-
-            set { _endTime = value; }
-        }
-
-        private DateTime _endTime = DateTime.MaxValue;
-
-        //
-        // Counter parameter
-        //
-        [Parameter(
-                Mandatory = false,
-                ParameterSetName = "GetCounterSet",
-                ValueFromPipeline = false,
-                HelpMessageBaseName = "GetEventResources")]
-        [AllowEmptyCollection]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays",
-                            Scope = "member",
-                            Target = "Microsoft.PowerShell.Commands.GetCounterCommand.ListSet",
-                            Justification = "A string[] is required here because that is the type Powershell supports")]
-        public string[] Counter
-        {
-            get { return _counter; }
-
-            set { _counter = value; }
-        }
-
-        private string[] _counter = Array.Empty<string>();
-
-        //
-        // Summary switch
-        //
-        [Parameter(ParameterSetName = "SummarySet")]
-        public SwitchParameter Summary
-        {
-            get { return _summary; }
-
-            set { _summary = value; }
-        }
-
-        private SwitchParameter _summary;
-
-        //
-        // MaxSamples parameter
-        //
-        private const Int64 KEEP_ON_SAMPLING = -1;
-        [Parameter(
-                ParameterSetName = "GetCounterSet",
-                ValueFromPipeline = false,
-                ValueFromPipelineByPropertyName = false,
-                HelpMessageBaseName = "GetEventResources")]
-        [ValidateRange((Int64)1, Int64.MaxValue)]
-        public Int64 MaxSamples
-        {
-            get { return _maxSamples; }
-
-            set { _maxSamples = value; }
-        }
-
-        private Int64 _maxSamples = KEEP_ON_SAMPLING;
-
-        private ResourceManager _resourceMgr = null;
-
-        private PdhHelper _pdhHelper = null;
-
-        private bool _stopping = false;
-
-        //
-        // AccumulatePipelineFileNames() accumulates counter file paths in the pipeline scenario:
-        // we do not want to construct a Pdh query until all the file names are supplied.
-        //
-        private void AccumulatePipelineFileNames()
-        {
-            _accumulatedFileNames.AddRange(_path);
-        }
-
-        //
-        // BeginProcessing() is invoked once per pipeline
-        //
-        protected override void BeginProcessing()
-        {
-
-#if CORECLR
-            if (Platform.IsIoT)
-            {
-                // IoT does not have the '$env:windir\System32\pdh.dll' assembly which is required by this cmdlet.
-                throw new PlatformNotSupportedException();
-            }
-
-            // PowerShell 7 requires at least Windows 7,
-            // so no version test is needed
-            _pdhHelper = new PdhHelper(false);
-#else
-            _pdhHelper = new PdhHelper(System.Environment.OSVersion.Version.Major < 6);
-#endif
-            _resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
-        }
-
-        //
-        // EndProcessing() is invoked once per pipeline
-        //
-        protected override void EndProcessing()
-        {
-            //
-            // Resolve and validate the Path argument: present for all parametersets.
-            //
-            if (!ResolveFilePaths())
-            {
-                return;
-            }
-
-            ValidateFilePaths();
-
-            switch (ParameterSetName)
-            {
-                case "ListSetSet":
-                    ProcessListSet();
-                    break;
-
-                case "GetCounterSet":
-                    ProcessGetCounter();
-                    break;
-
-                case "SummarySet":
-                    ProcessSummary();
-                    break;
-
-                default:
-                    Debug.Assert(false, string.Format(CultureInfo.InvariantCulture, "Invalid parameter set name: {0}", ParameterSetName));
-                    break;
-            }
-
-            _pdhHelper.Dispose();
-        }
-
-        //
-        // Handle Control-C
-        //
-        protected override void StopProcessing()
-        {
-            _stopping = true;
-            _pdhHelper.Dispose();
-        }
-
-        //
-        // ProcessRecord() override.
-        // This is the main entry point for the cmdlet.
-        //
-        protected override void ProcessRecord()
-        {
-            AccumulatePipelineFileNames();
-        }
-
-        //
-        // ProcessSummary().
-        // Does the work to process Summary parameter set.
-        //
-        private void ProcessSummary()
-        {
-            uint res = _pdhHelper.ConnectToDataSource(_resolvedPaths);
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-                return;
-            }
-
-            CounterFileInfo summaryObj;
-            res = _pdhHelper.GetFilesSummary(out summaryObj);
-
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-                return;
-            }
-
-            WriteObject(summaryObj);
-        }
-
-        //
-        // ProcessListSet().
-        // Does the work to process ListSet parameter set.
-        //
-        private void ProcessListSet()
-        {
-            uint res = _pdhHelper.ConnectToDataSource(_resolvedPaths);
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-                return;
-            }
-
-            StringCollection machineNames = new StringCollection();
-            res = _pdhHelper.EnumBlgFilesMachines(ref machineNames);
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-                return;
-            }
-
-            foreach (string machine in machineNames)
-            {
-                StringCollection counterSets = new StringCollection();
-                res = _pdhHelper.EnumObjects(machine, ref counterSets);
-                if (res != 0)
-                {
-                    return;
-                }
-
-                StringCollection validPaths = new StringCollection();
-
-                foreach (string pattern in _listSet)
-                {
-                    bool bMatched = false;
-
-                    WildcardPattern wildLogPattern = new WildcardPattern(pattern, WildcardOptions.IgnoreCase);
-
-                    foreach (string counterSet in counterSets)
-                    {
-                        if (!wildLogPattern.IsMatch(counterSet))
-                        {
-                            continue;
-                        }
-
-                        StringCollection counterSetCounters = new StringCollection();
-                        StringCollection counterSetInstances = new StringCollection();
-
-                        res = _pdhHelper.EnumObjectItems(machine, counterSet, ref counterSetCounters, ref counterSetInstances);
-                        if (res != 0)
-                        {
-                            ReportPdhError(res, false);
-                            continue;
-                        }
-
-                        string[] instanceArray = new string[counterSetInstances.Count];
-                        int i = 0;
-                        foreach (string instance in counterSetInstances)
-                        {
-                            instanceArray[i++] = instance;
-                        }
-
-                        Dictionary<string, string[]> counterInstanceMapping = new Dictionary<string, string[]>();
-                        foreach (string counter in counterSetCounters)
-                        {
-                            counterInstanceMapping.Add(counter, instanceArray);
-                        }
-
-                        PerformanceCounterCategoryType categoryType = PerformanceCounterCategoryType.Unknown;
-                        if (counterSetInstances.Count > 1)
-                        {
-                            categoryType = PerformanceCounterCategoryType.MultiInstance;
-                        }
-                        else // if (counterSetInstances.Count == 1) //???
-                        {
-                            categoryType = PerformanceCounterCategoryType.SingleInstance;
-                        }
-
-                        string setHelp = _pdhHelper.GetCounterSetHelp(machine, counterSet);
-
-                        CounterSet setObj = new CounterSet(counterSet, machine, categoryType, setHelp, ref counterInstanceMapping);
-                        WriteObject(setObj);
-                        bMatched = true;
-                    }
-
-                    if (!bMatched)
-                    {
-                        string msg = _resourceMgr.GetString("NoMatchingCounterSetsInFile");
-                        Exception exc = new Exception(string.Format(CultureInfo.InvariantCulture, msg,
-                        CommonUtilities.StringArrayToString(_resolvedPaths),
-                        pattern));
-                        WriteError(new ErrorRecord(exc, "NoMatchingCounterSetsInFile", ErrorCategory.ObjectNotFound, null));
-                    }
-                }
-            }
-        }
-
-        //
-        // ProcessGetCounter()
-        // Does the work to process GetCounterSet parameter set.
-        //
-        private void ProcessGetCounter()
-        {
-            // Validate StartTime-EndTime, if present
-            if (_startTime != DateTime.MinValue || _endTime != DateTime.MaxValue)
-            {
-                if (_startTime >= _endTime)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterInvalidDateRange"));
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "CounterInvalidDateRange", ErrorCategory.InvalidArgument, null));
-                    return;
-                }
-            }
-
-            uint res = _pdhHelper.ConnectToDataSource(_resolvedPaths);
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-                return;
-            }
-
-            StringCollection validPaths = new StringCollection();
-            if (_counter.Length > 0)
-            {
-                foreach (string path in _counter)
-                {
-                    StringCollection expandedPaths;
-                    res = _pdhHelper.ExpandWildCardPath(path, out expandedPaths);
-                    if (res != 0)
-                    {
-                        WriteDebug(path);
-                        ReportPdhError(res, false);
-                        continue;
-                    }
-
-                    foreach (string expandedPath in expandedPaths)
-                    {
-                        if (!_pdhHelper.IsPathValid(expandedPath))
-                        {
-                            string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterPathIsInvalid"), path);
-                            Exception exc = new Exception(msg);
-                            WriteError(new ErrorRecord(exc, "CounterPathIsInvalid", ErrorCategory.InvalidResult, null));
-
-                            continue;
-                        }
-
-                        validPaths.Add(expandedPath);
-                    }
-                }
-
-                if (validPaths.Count == 0)
-                {
-                    return;
-                }
-            }
-            else
-            {
-                res = _pdhHelper.GetValidPathsFromFiles(ref validPaths);
-                if (res != 0)
-                {
-                    ReportPdhError(res, false);
-                }
-            }
-
-            if (validPaths.Count == 0)
-            {
-                string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterPathsInFilesInvalid"));
-                Exception exc = new Exception(msg);
-                ThrowTerminatingError(new ErrorRecord(exc, "CounterPathsInFilesInvalid", ErrorCategory.InvalidResult, null));
-            }
-
-            res = _pdhHelper.OpenQuery();
-            if (res != 0)
-            {
-                ReportPdhError(res, false);
-            }
-
-            if (_startTime != DateTime.MinValue || _endTime != DateTime.MaxValue)
-            {
-                res = _pdhHelper.SetQueryTimeRange(_startTime, _endTime);
-                if (res != 0)
-                {
-                    ReportPdhError(res, true);
-                }
-            }
-
-            res = _pdhHelper.AddCounters(ref validPaths, true);
-            if (res != 0)
-            {
-                ReportPdhError(res, true);
-            }
-
-            PerformanceCounterSampleSet nextSet;
-
-            uint samplesRead = 0;
-
-            while (!_stopping)
-            {
-                res = _pdhHelper.ReadNextSet(out nextSet, false);
-                if (res == PdhResults.PDH_NO_MORE_DATA)
-                {
-                    break;
-                }
-
-                if (res != 0 && res != PdhResults.PDH_INVALID_DATA)
-                {
-                    ReportPdhError(res, false);
-                    continue;
-                }
-
-                //
-                // Display data
-                //
-                WriteSampleSetObject(nextSet, (samplesRead == 0));
-
-                samplesRead++;
-
-                if (_maxSamples != KEEP_ON_SAMPLING && samplesRead >= _maxSamples)
-                {
-                    break;
-                }
-            }
-        }
-
-        //
-        // ValidateFilePaths() helper.
-        // Validates the _resolvedPaths: present for all parametersets.
-        // We cannot have more than 32 blg files, or more than one CSV or TSC file.
-        // Files have to all be of the same type (.blg, .csv, .tsv).
-        //
-        private void ValidateFilePaths()
-        {
-            Debug.Assert(_resolvedPaths.Count > 0);
-
-            string firstExt = System.IO.Path.GetExtension(_resolvedPaths[0]);
-            foreach (string fileName in _resolvedPaths)
-            {
-                WriteVerbose(fileName);
-                string curExtension = System.IO.Path.GetExtension(fileName);
-
-                if (!curExtension.Equals(".blg", StringComparison.OrdinalIgnoreCase)
-                    && !curExtension.Equals(".csv", StringComparison.OrdinalIgnoreCase)
-                    && !curExtension.Equals(".tsv", StringComparison.OrdinalIgnoreCase))
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterNotALogFile"), fileName);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "CounterNotALogFile", ErrorCategory.InvalidResult, null));
-                    return;
-                }
-
-                if (!curExtension.Equals(firstExt, StringComparison.OrdinalIgnoreCase))
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterNoMixedLogTypes"), fileName);
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "CounterNoMixedLogTypes", ErrorCategory.InvalidResult, null));
-                    return;
-                }
-            }
-
-            if (firstExt.Equals(".blg", StringComparison.OrdinalIgnoreCase))
-            {
-                if (_resolvedPaths.Count > 32)
-                {
-                    string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("Counter32FileLimit"));
-                    Exception exc = new Exception(msg);
-                    ThrowTerminatingError(new ErrorRecord(exc, "Counter32FileLimit", ErrorCategory.InvalidResult, null));
-                    return;
-                }
-            }
-            else if (_resolvedPaths.Count > 1)
-            {
-                string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("Counter1FileLimit"));
-                Exception exc = new Exception(msg);
-                ThrowTerminatingError(new ErrorRecord(exc, "Counter1FileLimit", ErrorCategory.InvalidResult, null));
-                return;
-            }
-        }
-
-        //
-        // ResolveFilePath helper.
-        // Returns a string collection of resolved file paths.
-        // Writes non-terminating errors for invalid paths
-        // and returns an empty collection.
-        //
-        private bool ResolveFilePaths()
-        {
-            StringCollection retColl = new StringCollection();
-
-            foreach (string origPath in _accumulatedFileNames)
-            {
-                Collection<PathInfo> resolvedPathSubset = null;
-                try
-                {
-                    resolvedPathSubset = SessionState.Path.GetResolvedPSPathFromPSPath(origPath);
-                }
-                catch (PSNotSupportedException notSupported)
-                {
-                    WriteError(new ErrorRecord(notSupported, string.Empty, ErrorCategory.ObjectNotFound, origPath));
-                    continue;
-                }
-                catch (System.Management.Automation.DriveNotFoundException driveNotFound)
-                {
-                    WriteError(new ErrorRecord(driveNotFound, string.Empty, ErrorCategory.ObjectNotFound, origPath));
-                    continue;
-                }
-                catch (ProviderNotFoundException providerNotFound)
-                {
-                    WriteError(new ErrorRecord(providerNotFound, string.Empty, ErrorCategory.ObjectNotFound, origPath));
-                    continue;
-                }
-                catch (ItemNotFoundException pathNotFound)
-                {
-                    WriteError(new ErrorRecord(pathNotFound, string.Empty, ErrorCategory.ObjectNotFound, origPath));
-                    continue;
-                }
-                catch (Exception exc)
-                {
-                    WriteError(new ErrorRecord(exc, string.Empty, ErrorCategory.ObjectNotFound, origPath));
-                    continue;
-                }
-
-                foreach (PathInfo pi in resolvedPathSubset)
-                {
-                    //
-                    // Check the provider: only FileSystem provider paths are acceptable.
-                    //
-                    if (pi.Provider.Name != "FileSystem")
-                    {
-                        string msg = _resourceMgr.GetString("NotAFileSystemPath");
-                        Exception exc = new Exception(string.Format(CultureInfo.InvariantCulture, msg, origPath));
-                        WriteError(new ErrorRecord(exc, "NotAFileSystemPath", ErrorCategory.InvalidArgument, origPath));
-                        continue;
-                    }
-
-                    _resolvedPaths.Add(pi.ProviderPath.ToLowerInvariant());
-                }
-            }
-
-            return (_resolvedPaths.Count > 0);
-        }
-
-        private void ReportPdhError(uint res, bool bTerminate)
-        {
-            string msg;
-            uint formatRes = CommonUtilities.FormatMessageFromModule(res, "pdh.dll", out msg);
-            if (formatRes != 0)
-            {
-                msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterApiError"), res);
-            }
-
-            Exception exc = new Exception(msg);
-            if (bTerminate)
-            {
-                ThrowTerminatingError(new ErrorRecord(exc, "CounterApiError", ErrorCategory.InvalidResult, null));
-            }
-            else
-            {
-                WriteError(new ErrorRecord(exc, "CounterApiError", ErrorCategory.InvalidResult, null));
-            }
-        }
-
-        //
-        // WriteSampleSetObject() helper.
-        // In addition to writing the PerformanceCounterSampleSet object,
-        // it writes a single error if one of the samples has an invalid (non-zero) status.
-        // The only exception is the first set, where we allow for the formatted value to be 0 -
-        // this is expected for CSV and TSV files.
-
-        private void WriteSampleSetObject(PerformanceCounterSampleSet set, bool firstSet)
-        {
-            if (!firstSet)
-            {
-                foreach (PerformanceCounterSample sample in set.CounterSamples)
-                {
-                    if (sample.Status != 0)
-                    {
-                        string msg = string.Format(CultureInfo.InvariantCulture, _resourceMgr.GetString("CounterSampleDataInvalid"));
-                        Exception exc = new Exception(msg);
-                        WriteError(new ErrorRecord(exc, "CounterApiError", ErrorCategory.InvalidResult, null));
-                        break;
-                    }
-                }
-            }
-
-            WriteObject(set);
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj b/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj
index 02e3b785509..d936a3a52d3 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj
@@ -8,17 +8,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
-  </ItemGroup>
-
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Compile Remove="GetEventSnapin.cs" />
-    <Compile Remove="ExportCounterCommand.cs" />
-    <Compile Remove="ImportCounterCommand.cs" />
-    <Compile Remove="CounterFileInfo.cs" />
+    <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="11.0.0-preview.6.26359.118" />
   </ItemGroup>
 
   <ItemGroup Condition=" '$(IsWindows)' != 'true' ">
@@ -32,4 +22,9 @@
     <Compile Remove="NewWinEventCommand.cs" />
   </ItemGroup>
 
+  <ItemGroup>
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs
index cb74c292a3e..cdddba939f3 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/NewWinEventCommand.cs
@@ -317,14 +317,13 @@ protected override void ProcessRecord()
         /// </summary>
         protected override void EndProcessing()
         {
-            if (_providerMetadata != null)
-                _providerMetadata.Dispose();
+            _providerMetadata?.Dispose();
 
             base.EndProcessing();
         }
     }
 
-    internal class EventWriteException : Exception
+    internal sealed class EventWriteException : Exception
     {
         internal EventWriteException(string msg, Exception innerException)
             : base(msg, innerException)
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs b/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs
index 97eff22db0d..6f5d8f6e5ec 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/PdhHelper.cs
@@ -190,7 +190,7 @@ internal struct CounterHandleNInstance
         public string InstanceName;
     }
 
-    internal class PdhHelper : IDisposable
+    internal sealed class PdhHelper : IDisposable
     {
         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
         private struct PDH_COUNTER_PATH_ELEMENTS
@@ -267,28 +267,65 @@ private struct PDH_TIME_INFO
         // We only need dwType and lDefaultScale fields from this structure.
         // We access those fields directly. The struct is here for reference only.
         //
-        [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
-        private struct PDH_COUNTER_INFO
+        [StructLayout(LayoutKind.Sequential)]
+        private unsafe struct PDH_COUNTER_INFO
         {
-            [FieldOffset(0)] public UInt32 dwLength;
-            [FieldOffset(4)] public UInt32 dwType;
-            [FieldOffset(8)] public UInt32 CVersion;
-            [FieldOffset(12)] public UInt32 CStatus;
-            [FieldOffset(16)] public UInt32 lScale;
-            [FieldOffset(20)] public UInt32 lDefaultScale;
-            [FieldOffset(24)] public IntPtr dwUserData;
-            [FieldOffset(32)] public IntPtr dwQueryUserData;
-            [FieldOffset(40)] public string szFullPath;
-
-            [FieldOffset(48)] public string szMachineName;
-            [FieldOffset(56)] public string szObjectName;
-            [FieldOffset(64)] public string szInstanceName;
-            [FieldOffset(72)] public string szParentInstance;
-            [FieldOffset(80)] public UInt32 dwInstanceIndex;
-            [FieldOffset(88)] public string szCounterName;
-
-            [FieldOffset(96)] public string szExplainText;
-            [FieldOffset(104)] public IntPtr DataBuffer;
+            public uint Length;
+            public uint Type;
+            public uint CVersion;
+            public uint CStatus;
+            public int Scale;
+            public int DefaultScale;
+            public ulong UserData;
+            public ulong QueryUserData;
+            public ushort* FullPath;
+            public _Anonymous_e__Union Anonymous;
+            public ushort* ExplainText;
+            public fixed uint DataBuffer[1];
+
+            [StructLayout(LayoutKind.Explicit)]
+            internal struct _Anonymous_e__Union
+            {
+                [FieldOffset(0)]
+                public PDH_DATA_ITEM_PATH_ELEMENTS_blittable DataItemPath;
+
+                [FieldOffset(0)]
+                public PDH_COUNTER_PATH_ELEMENTS_blittable CounterPath;
+
+                [FieldOffset(0)]
+                public _Anonymous_e__Struct Anonymous;
+
+                [StructLayout(LayoutKind.Sequential)]
+                internal struct PDH_DATA_ITEM_PATH_ELEMENTS_blittable
+                {
+                    public ushort* MachineName;
+                    public Guid ObjectGUID;
+                    public uint ItemId;
+                    public ushort* InstanceName;
+                }
+
+                [StructLayout(LayoutKind.Sequential)]
+                internal struct PDH_COUNTER_PATH_ELEMENTS_blittable
+                {
+                    public ushort* MachineName;
+                    public ushort* ObjectName;
+                    public ushort* InstanceName;
+                    public ushort* ParentInstance;
+                    public uint InstanceIndex;
+                    public ushort* CounterName;
+                }
+
+                [StructLayout(LayoutKind.Sequential)]
+                internal struct _Anonymous_e__Struct
+                {
+                    public ushort* MachineName;
+                    public ushort* ObjectName;
+                    public ushort* InstanceName;
+                    public ushort* ParentInstance;
+                    public uint InstanceIndex;
+                    public ushort* CounterName;
+                }
+            }
         }
 
         [DllImport("pdh.dll", CharSet = CharSet.Unicode)]
@@ -476,8 +513,8 @@ private static uint GetCounterInfoPlus(IntPtr hCounter, out UInt32 counterType,
                 if (res == PdhResults.PDH_CSTATUS_VALID_DATA && bufCounterInfo != IntPtr.Zero)
                 {
                     PDH_COUNTER_INFO pdhCounterInfo = (PDH_COUNTER_INFO)Marshal.PtrToStructure(bufCounterInfo, typeof(PDH_COUNTER_INFO));
-                    counterType = pdhCounterInfo.dwType;
-                    defaultScale = pdhCounterInfo.lDefaultScale;
+                    counterType = pdhCounterInfo.Type;
+                    defaultScale = (uint)pdhCounterInfo.DefaultScale;
                 }
             }
             finally
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/GetEventResources.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/GetEventResources.resx
index f8f41ecc2f5..3a5781e9408 100644
--- a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/GetEventResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/GetEventResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -255,6 +255,12 @@ The defined template is following:
   <data name="LogInfoUnavailable" xml:space="preserve">
     <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
   </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
   <data name="NoEventMessage" xml:space="preserve">
     <value>Cannot retrieve event message text.</value>
   </data>
@@ -285,4 +291,25 @@ The defined template is following:
   <data name="LogCountLimitExceeded" xml:space="preserve">
     <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
   </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/cs/GetEventResources.cs.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/cs/GetEventResources.cs.resx
new file mode 100644
index 00000000000..7bf8f659e88
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/cs/GetEventResources.cs.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Časové razítko</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/de/GetEventResources.de.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/de/GetEventResources.de.resx
new file mode 100644
index 00000000000..751256c9525
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/de/GetEventResources.de.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Zeitstempel</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/es/GetEventResources.es.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/es/GetEventResources.es.resx
new file mode 100644
index 00000000000..68083530c70
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/es/GetEventResources.es.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Marca de tiempo</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/fr/GetEventResources.fr.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/fr/GetEventResources.fr.resx
new file mode 100644
index 00000000000..a03708ff0d0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/fr/GetEventResources.fr.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Horodateur</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/it/GetEventResources.it.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/it/GetEventResources.it.resx
new file mode 100644
index 00000000000..afe084e8a85
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/it/GetEventResources.it.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Timestamp</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ja/GetEventResources.ja.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ja/GetEventResources.ja.resx
new file mode 100644
index 00000000000..7f634a5a42d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ja/GetEventResources.ja.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>タイムスタンプ</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ko/GetEventResources.ko.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ko/GetEventResources.ko.resx
new file mode 100644
index 00000000000..713fbe1af8e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ko/GetEventResources.ko.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>타임스탬프</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pl/GetEventResources.pl.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pl/GetEventResources.pl.resx
new file mode 100644
index 00000000000..5e906cc9575
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pl/GetEventResources.pl.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Znacznik czasu</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pt-BR/GetEventResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pt-BR/GetEventResources.pt-BR.resx
new file mode 100644
index 00000000000..322bf7e4aeb
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/pt-BR/GetEventResources.pt-BR.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Carimbo de data/hora</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ru/GetEventResources.ru.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ru/GetEventResources.ru.resx
new file mode 100644
index 00000000000..3edc75ebda4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/ru/GetEventResources.ru.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Метка времени</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/tr/GetEventResources.tr.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/tr/GetEventResources.tr.resx
new file mode 100644
index 00000000000..0ba635ba01c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/tr/GetEventResources.tr.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>Zaman damgası</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hans/GetEventResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hans/GetEventResources.zh-Hans.resx
new file mode 100644
index 00000000000..c3d6d8035a2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hans/GetEventResources.zh-Hans.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>时间戳</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hant/GetEventResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hant/GetEventResources.zh-Hant.resx
new file mode 100644
index 00000000000..f0691ea61fa
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Diagnostics/resources/zh-Hant/GetEventResources.zh-Hant.resx
@@ -0,0 +1,315 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CounterNotALogFile" xml:space="preserve">
+    <value>The {0} file does not have the expected file name extension. Specify only .blg, .csv, or .tsv files when you use the Path parameter.</value>
+  </data>
+  <data name="CounterApiError" xml:space="preserve">
+    <value>Internal performance counter API call failed. Error: {0:x8}.</value>
+  </data>
+  <data name="LogProviderOrPathNeeded" xml:space="preserve">
+    <value>You must specify at least one Log, Provider or Path key-value pair.</value>
+  </data>
+  <data name="NoMatchingProvidersFound" xml:space="preserve">
+    <value>There is not an event provider on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="NullNotAllowedInHashtable" xml:space="preserve">
+    <value>A null value was encountered in the {0} hash table key. Null values are not permitted.</value>
+  </data>
+  <data name="QueryTrace" xml:space="preserve">
+    <value>Constructed structured query:
+{0}.</value>
+  </data>
+  <data name="ProviderLogLink" xml:space="preserve">
+    <value>The {0} provider writes events to the {1} log.</value>
+  </data>
+  <data name="CounterInvalidDateRange" xml:space="preserve">
+    <value>The value of the StartTime parameter must be less than the value of the EndTime parameter.</value>
+  </data>
+  <data name="NoMatchingLogsFound" xml:space="preserve">
+    <value>There is not an event log on the {0} computer that matches "{1}".</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="CounterCircularNoMaxSize" xml:space="preserve">
+    <value>The Circular parameter will be ignored unless the MaxSize parameter is also specified.</value>
+  </data>
+  <data name="FileOpenFailed" xml:space="preserve">
+    <value>Unable to open the {0} file for writing.</value>
+  </data>
+  <data name="KeywordLongExpected" xml:space="preserve">
+    <value>Invalid value '{0}' specified for keyword.</value>
+  </data>
+  <data name="CounterExportSampleNotInInitialSet" xml:space="preserve">
+    <value>The {0} performance counter cannot be exported to the {1} file because it was not part of the first sample set.</value>
+  </data>
+  <data name="NoMatchingEventsFound" xml:space="preserve">
+    <value>No events were found that match the specified selection criteria.</value>
+  </data>
+  <data name="CounterPathTranslationFailed" xml:space="preserve">
+    <value>The default values for this command failed. Error: {0:x8}.</value>
+  </data>
+  <data name="CounterNoMixedLogTypes" xml:space="preserve">
+    <value>You cannot import different types of performance log files in the same command.  Specify only one type of file in the Path parameter.</value>
+  </data>
+  <data name="NotAFileSystemPath" xml:space="preserve">
+    <value>The {0} path does not appear to be a valid log file path. Specify a valid file system path.</value>
+  </data>
+  <data name="EventIdNotSpecified" xml:space="preserve">
+    <value>A valid Event Id must be specified.</value>
+  </data>
+  <data name="ProviderMetadataUnavailable" xml:space="preserve">
+    <value>Could not retrieve information about the {0} provider. Error: {1}.</value>
+  </data>
+  <data name="SpecifyOldestForLog" xml:space="preserve">
+    <value>The {0} event log can be read only in the forward chronological order because it is an analytical or a debug log. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ExportDestPathAmbiguous" xml:space="preserve">
+    <value>The following export destination path is ambiguous: {0}.</value>
+  </data>
+  <data name="CounterPathIsInvalid" xml:space="preserve">
+    <value>The {0} performance counter path is not valid.</value>
+  </data>
+  <data name="CounterSampleDataInvalid" xml:space="preserve">
+    <value>The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.</value>
+  </data>
+  <data name="PayloadMismatch" xml:space="preserve">
+    <value>Provided payload does not match with the template that was defined for event id {0}.
+The defined template is following:
+{1}</value>
+  </data>
+  <data name="NoMatchingCounterSetsFound" xml:space="preserve">
+    <value>Cannot find any performance counter sets on the {0} computer that match the following: {1}.</value>
+  </data>
+  <data name="CounterPathsInFilesInvalid" xml:space="preserve">
+    <value>No valid counter paths were found in the files.</value>
+  </data>
+  <data name="FileCreateFailed" xml:space="preserve">
+    <value>Unable to create the {0} file. Verify that the path is valid.</value>
+  </data>
+  <data name="NoCounterSetsOnComputer" xml:space="preserve">
+    <value>Could not find any performance counter sets on the {0} computer: error {1:x8}. Verify that the {0} computer exists, that it is discoverable, and that you have sufficient privileges to view performance counter data on that computer.</value>
+  </data>
+  <data name="IncorrectEventId" xml:space="preserve">
+    <value>Event cannot be written because there are no events defined with id {0} for the provider {1}.  Please correct the event id and try again.</value>
+  </data>
+  <data name="InvalidContext" xml:space="preserve">
+    <value>The {0} Context key-value is not a valid SID or NT account name.</value>
+  </data>
+  <data name="IncorrectEventVersion" xml:space="preserve">
+    <value>Event cannot be written because the specified version {0} for event {1} is not defined for the provider {2}.  Please correct the version and try again.</value>
+  </data>
+  <data name="Counter32FileLimit" xml:space="preserve">
+    <value>You cannot import more than 32 .blg counter log files in each command.</value>
+  </data>
+  <data name="SpecifiedProvidersDontWriteToLog" xml:space="preserve">
+    <value>The specified providers do not write events to the {0} log. This log will be ignored.</value>
+  </data>
+  <data name="InvalidSIDFormat" xml:space="preserve">
+    <value>The following value is not in a valid security identifier (SID) format: {0}. Enter a valid SID, such as S-1-5-32-544.</value>
+  </data>
+  <data name="NoProviderFound" xml:space="preserve">
+    <value>No provider found with name {0}.</value>
+  </data>
+  <data name="CounterSetEnumAccessDenied" xml:space="preserve">
+    <value>Cannot retrieve information about the {0} performance counter set because access was denied.</value>
+  </data>
+  <data name="VersionNotSpecified" xml:space="preserve">
+    <value>Event cannot be written because multiple events with id {0} have been defined for provider {1}.  Please provide a version for the event and try again.</value>
+  </data>
+  <data name="SpecifyOldestForEtlEvt" xml:space="preserve">
+    <value>The {0} event log file can be read only in the forward chronological order because it is an .etl or an .evt file. To see events from the {0} event log, use the Oldest parameter in the command.</value>
+  </data>
+  <data name="ProviderNotSpecified" xml:space="preserve">
+    <value>Provider name must be specified.</value>
+  </data>
+  <data name="NotALogFile" xml:space="preserve">
+    <value>The {0} file does not appear to be a valid log file. Specify only .evtx, .etl, or .evt files as values of the Path parameter.</value>
+  </data>
+  <data name="CounterPathInvalidOrNotInFile" xml:space="preserve">
+    <value>The {0} performance counter path is either not valid or it is not present in the following files: {1}.</value>
+  </data>
+  <data name="Timestamp" xml:space="preserve">
+    <value>時間戳記</value>
+  </data>
+  <data name="DateTimeExpected" xml:space="preserve">
+    <value>The following value is not in a valid DateTime format: {0}.</value>
+  </data>
+  <data name="LogInfoUnavailable" xml:space="preserve">
+    <value>To access the '{0}' log start PowerShell with elevated user rights.  Error: {1}</value>
+  </data>
+  <data name="LogInfoNoAccess" xml:space="preserve">
+    <value>Access denied for log: '{0}'.</value>
+  </data>
+  <data name="SuggestElevation" xml:space="preserve">
+    <value>Launch PowerShell with elevated user rights.</value>
+  </data>
+  <data name="NoEventMessage" xml:space="preserve">
+    <value>Cannot retrieve event message text.</value>
+  </data>
+  <data name="CounterFileExists" xml:space="preserve">
+    <value>The {0} file already exists. To overwrite this file, use the Force parameter in the Export-Counter command.</value>
+  </data>
+  <data name="CounterContinuousOrMaxSamples" xml:space="preserve">
+    <value>The Continuous parameter and the MaxSamples parameter cannot be used in the same command.</value>
+  </data>
+  <data name="ExportCtrWin7Required" xml:space="preserve">
+    <value>This cmdlet can be run only on Microsoft Windows 7 and above.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets.</value>
+  </data>
+  <data name="NoMatchingCounterSetsInFile" xml:space="preserve">
+    <value>Cannot find any performance counter sets in the {0} files that match the following: {1}.</value>
+  </data>
+  <data name="LogsAndProvidersDontOverlap" xml:space="preserve">
+    <value>The specified providers do not write events to any of the specified logs.</value>
+  </data>
+  <data name="CookedValues" xml:space="preserve">
+    <value>Cooked Values</value>
+  </data>
+  <data name="Counter1FileLimit" xml:space="preserve">
+    <value>You cannot import more than one comma-separated (.csv) or tab-separated (.tsv) performance counter file in each command.</value>
+  </data>
+  <data name="LogCountLimitExceeded" xml:space="preserve">
+    <value>Log count ({0}) is exceeded Windows Event Log API limit ({1}). Adjust filter to return less log names.</value>
+  </data>
+  <data name="ListLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs. Wildcards are permitted.</value>
+  </data>
+  <data name="GetLogParamHelp" xml:space="preserve">
+    <value>Specifies the event logs that this cmdlet gets events from. Wildcards are permitted.</value>
+  </data>
+  <data name="ListProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers that this cmdlet gets.</value>
+  </data>
+  <data name="GetProviderParamHelp" xml:space="preserve">
+    <value>Specifies the event log providers from which this cmdlet gets events.</value>
+  </data>
+  <data name="PathParamHelp" xml:space="preserve">
+    <value>Specifies the path to the event log files that this cmdlet gets events from.</value>
+  </data>
+  <data name="MaxEventsParamHelp" xml:space="preserve">
+    <value>Specifies the maximum number of events that are returned.</value>
+  </data>
+  <data name="ComputerNameParamHelp" xml:space="preserve">
+    <value>Specifies the name of the computer from which this cmdlet gets data.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj b/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj
index 31e6536380f..306ca16e7a8 100644
--- a/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj
+++ b/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj
@@ -10,44 +10,14 @@
     <ProjectReference Include="..\Microsoft.PowerShell.Security\Microsoft.PowerShell.Security.csproj" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
   <ItemGroup>
-    <Compile Remove="commands\management\ControlPanelItemCommand.cs" />
-    <Compile Remove="commands\management\CommitTransactionCommand.cs" />
-    <Compile Remove="commands\management\Eventlog.cs" />
-    <Compile Remove="commands\management\GetTransactionCommand.cs" />
-    <Compile Remove="commands\management\GetWMIObjectCommand.cs" />
-    <Compile Remove="commands\management\InvokeWMIMethodCommand.cs" />
-    <Compile Remove="commands\management\RegisterWMIEventCommand.cs" />
-    <Compile Remove="commands\management\RemoveWMIObjectCommand.cs" />
-    <Compile Remove="commands\management\RollbackTransactionCommand.cs" />
-    <Compile Remove="commands\management\SetWMIInstanceCommand.cs" />
-    <Compile Remove="commands\management\StartTransactionCommand.cs" />
-    <Compile Remove="commands\management\UseTransactionCommand.cs" />
-    <Compile Remove="commands\management\WMIHelper.cs" />
-    <Compile Remove="commands\management\WebServiceProxy.cs" />
-    <Compile Remove="singleshell\installer\MshManagementMshSnapin.cs" />
-    <Compile Remove="gen\EventlogResources.cs" />
-    <Compile Remove="gen\TransactionResources.cs" />
-    <Compile Remove="gen\WebServiceResources.cs" />
-    <Compile Remove="gen\ControlPanelResources.cs" />
-    <Compile Remove="gen\WmiResources.cs" />
-    <Compile Remove="gen\ManagementMshSnapInResources.cs" />
-
-    <EmbeddedResource Remove="resources\EventlogResources.resx" />
-    <EmbeddedResource Remove="resources\TransactionResources.resx" />
-    <EmbeddedResource Remove="resources\WebServiceResources.resx" />
-    <EmbeddedResource Remove="resources\ControlPanelResources.resx" />
-    <EmbeddedResource Remove="resources\WmiResources.resx" />
-    <EmbeddedResource Remove="resources\ManagementMshSnapInResources.resx" />
+    <!-- the following package(s) are from https://github.com/dotnet/corefx -->
+    <PackageReference Include="System.ServiceProcess.ServiceController" Version="11.0.0-preview.6.26359.118" />
   </ItemGroup>
 
   <ItemGroup>
-    <!-- the following package(s) are from https://github.com/dotnet/corefx -->
-    <PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.0-preview.2.21154.6" />
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
   </ItemGroup>
-
 </Project>
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs
index fb6b638b9df..3e26b2e2e98 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/SessionBasedWrapper.cs
@@ -82,11 +82,7 @@ protected TSession[] Session
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
-
+                ArgumentNullException.ThrowIfNull(value);
                 _session = value;
                 _sessionWasSpecified = true;
             }
@@ -495,8 +491,7 @@ private IEnumerable<TSession> GetSessionsToActAgainst(QueryBuilder queryBuilder)
                 return this.Session;
             }
 
-            var sessionBoundQueryBuilder = queryBuilder as ISessionBoundQueryBuilder<TSession>;
-            if (sessionBoundQueryBuilder != null)
+            if (queryBuilder is ISessionBoundQueryBuilder<TSession> sessionBoundQueryBuilder)
             {
                 TSession sessionOfTheQueryBuilder = sessionBoundQueryBuilder.GetTargetSession();
                 if (sessionOfTheQueryBuilder != null)
@@ -582,8 +577,9 @@ private TSession GetImpliedSession()
         /// <param name="passThru"><see langword="true"/> if successful method invocations should emit downstream the <paramref name="objectInstance"/> being operated on.</param>
         public override void ProcessRecord(TObjectInstance objectInstance, MethodInvocationInfo methodInvocationInfo, bool passThru)
         {
-            if (objectInstance == null) throw new ArgumentNullException(nameof(objectInstance));
-            if (methodInvocationInfo == null) throw new ArgumentNullException(nameof(methodInvocationInfo));
+            ArgumentNullException.ThrowIfNull(objectInstance);
+
+            ArgumentNullException.ThrowIfNull(methodInvocationInfo);
 
             foreach (TSession sessionForJob in this.GetSessionsToActAgainst(objectInstance))
             {
@@ -608,7 +604,7 @@ public override void ProcessRecord(TObjectInstance objectInstance, MethodInvocat
         /// <param name="methodInvocationInfo">Method invocation details.</param>
         public override void ProcessRecord(MethodInvocationInfo methodInvocationInfo)
         {
-            if (methodInvocationInfo == null) throw new ArgumentNullException(nameof(methodInvocationInfo));
+            ArgumentNullException.ThrowIfNull(methodInvocationInfo);
 
             foreach (TSession sessionForJob in this.GetSessionsToActAgainst(methodInvocationInfo))
             {
@@ -688,10 +684,7 @@ public override void EndProcessing()
         public override void StopProcessing()
         {
             Job jobToStop = _parentJob;
-            if (jobToStop != null)
-            {
-                jobToStop.StopJob();
-            }
+            jobToStop?.StopJob();
 
             base.StopProcessing();
         }
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CimJobException.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CimJobException.cs
index 808ca1a4de9..935cc960c6c 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CimJobException.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CimJobException.cs
@@ -15,7 +15,6 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Represents an error during execution of a CIM job.
     /// </summary>
-    [Serializable]
     public class CimJobException : SystemException, IContainsErrorRecord
     {
         #region Standard constructors and methods required for all exceptions
@@ -50,32 +49,12 @@ public CimJobException(string message, Exception inner) : base(message, inner)
         /// </summary>
         /// <param name="info">The <see cref="SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
         /// <param name="context">The <see cref="StreamingContext"/> that contains contextual information about the source or destination.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected CimJobException(
             SerializationInfo info,
-            StreamingContext context) : base(info, context)
+            StreamingContext context)
         {
-            if (info == null)
-            {
-                throw new ArgumentNullException(nameof(info));
-            }
-
-            _errorRecord = (ErrorRecord)info.GetValue("errorRecord", typeof(ErrorRecord));
-        }
-
-        /// <summary>
-        /// Sets the SerializationInfo with information about the exception.
-        /// </summary>
-        /// <param name="info">The <see cref="SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
-        /// <param name="context">The <see cref="StreamingContext"/> that contains contextual information about the source or destination.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new ArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            info.AddValue("errorRecord", _errorRecord);
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -104,16 +83,14 @@ internal static CimJobException CreateFromAnyException(
             Dbg.Assert(jobContext != null, "Caller should verify jobContext != null");
             Dbg.Assert(inner != null, "Caller should verify inner != null");
 
-            CimException cimException = inner as CimException;
-            if (cimException != null)
+            if (inner is CimException cimException)
             {
                 return CreateFromCimException(jobDescription, jobContext, cimException);
             }
 
             string message = BuildErrorMessage(jobDescription, jobContext, inner.Message);
             CimJobException cimJobException = new(message, inner);
-            var containsErrorRecord = inner as IContainsErrorRecord;
-            if (containsErrorRecord != null)
+            if (inner is IContainsErrorRecord containsErrorRecord)
             {
                 cimJobException.InitializeErrorRecord(
                     jobContext,
@@ -362,8 +339,7 @@ internal bool IsTerminatingError
         {
             get
             {
-                var cimException = this.InnerException as CimException;
-                if ((cimException == null) || (cimException.ErrorData == null))
+                if ((this.InnerException is not CimException cimException) || (cimException.ErrorData == null))
                 {
                     return false;
                 }
@@ -374,7 +350,7 @@ internal bool IsTerminatingError
                     return false;
                 }
 
-                UInt16 perceivedSeverityValue = (UInt16)perceivedSeverityProperty.Value;
+                ushort perceivedSeverityValue = (ushort)perceivedSeverityProperty.Value;
                 if (perceivedSeverityValue != 7)
                 {
                     /* from CIM Schema: Interop\CIM_Error.mof:
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs
index d8a1bdd44ea..eb594dd4eea 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/CreateInstanceJob.cs
@@ -12,7 +12,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job wrapping invocation of a CreateInstance intrinsic CIM method.
     /// </summary>
-    internal class CreateInstanceJob : PropertySettingJob<CimInstance>
+    internal sealed class CreateInstanceJob : PropertySettingJob<CimInstance>
     {
         private CimInstance _resultFromCreateInstance;
         private CimInstance _resultFromGetInstance;
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/DeleteInstanceJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/DeleteInstanceJob.cs
index 327fb83affa..0432c6c9a8f 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/DeleteInstanceJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/DeleteInstanceJob.cs
@@ -12,7 +12,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job wrapping invocation of a DeleteInstance intrinsic CIM method.
     /// </summary>
-    internal class DeleteInstanceJob : MethodInvocationJobBase<object>
+    internal sealed class DeleteInstanceJob : MethodInvocationJobBase<object>
     {
         private readonly CimInstance _objectToDelete;
 
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs
index bd024b7d76a..569740d0d1b 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/EnumerateAssociatedInstancesJob.cs
@@ -14,7 +14,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job that handles executing a WQL (in the future CQL?) query on a remote CIM server.
     /// </summary>
-    internal class EnumerateAssociatedInstancesJob : QueryJobBase
+    internal sealed class EnumerateAssociatedInstancesJob : QueryJobBase
     {
         private readonly CimInstance _associatedObject;
         private readonly string _associationName;
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ExtrinsicMethodInvocationJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ExtrinsicMethodInvocationJob.cs
index 1194da4ab0f..9eaac2b3d7f 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ExtrinsicMethodInvocationJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ExtrinsicMethodInvocationJob.cs
@@ -66,8 +66,7 @@ private void ProcessOutParameter(CimMethodResult methodResult, MethodParameter m
                 methodParameter.Value = dotNetValue;
                 cmdletOutput.Add(methodParameter.Name, methodParameter);
 
-                var cimInstances = dotNetValue as CimInstance[];
-                if (cimInstances != null)
+                if (dotNetValue is CimInstance[] cimInstances)
                 {
                     foreach (var instance in cimInstances)
                     {
@@ -75,8 +74,7 @@ private void ProcessOutParameter(CimMethodResult methodResult, MethodParameter m
                     }
                 }
 
-                var cimInstance = dotNetValue as CimInstance;
-                if (cimInstance != null)
+                if (dotNetValue is CimInstance cimInstance)
                 {
                     CimCmdletAdapter.AssociateSessionOfOriginWithInstance(cimInstance, this.JobContext.Session);
                 }
@@ -105,7 +103,7 @@ private void OnNext(CimMethodResult methodResult)
 
             if (cmdletOutput.Count == 1)
             {
-                var singleOutputParameter = cmdletOutput.Values.Single();
+                var singleOutputParameter = cmdletOutput.Values.First();
                 if (singleOutputParameter.Value == null)
                 {
                     return;
@@ -191,15 +189,13 @@ public override void OnNext(CimMethodResultBase item)
             this.ExceptionSafeWrapper(
                     delegate
                     {
-                        var methodResult = item as CimMethodResult;
-                        if (methodResult != null)
+                        if (item is CimMethodResult methodResult)
                         {
                             this.OnNext(methodResult);
                             return;
                         }
 
-                        var streamedResult = item as CimMethodStreamedResult;
-                        if (streamedResult != null)
+                        if (item is CimMethodStreamedResult streamedResult)
                         {
                             this.OnNext(streamedResult);
                             return;
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/InstanceMethodInvocationJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/InstanceMethodInvocationJob.cs
index cd1eb78d81c..06a45933522 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/InstanceMethodInvocationJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/InstanceMethodInvocationJob.cs
@@ -13,7 +13,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job wrapping invocation of an extrinsic CIM method.
     /// </summary>
-    internal class InstanceMethodInvocationJob : ExtrinsicMethodInvocationJob
+    internal sealed class InstanceMethodInvocationJob : ExtrinsicMethodInvocationJob
     {
         private readonly CimInstance _targetInstance;
 
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs
index eb636b4a759..84b13b82097 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/MethodInvocationJobBase.cs
@@ -66,8 +66,8 @@ private IEnumerable<MethodParameter> GetMethodInputParametersCore(Func<MethodPar
 
         internal IEnumerable<MethodParameter> GetMethodInputParameters()
         {
-            var allMethodParameters = this.GetMethodInputParametersCore(p => !p.Name.StartsWith(CustomOperationOptionPrefix, StringComparison.OrdinalIgnoreCase));
-            var methodParametersWithInputValue = allMethodParameters.Where(p => p.IsValuePresent);
+            var allMethodParameters = this.GetMethodInputParametersCore(static p => !p.Name.StartsWith(CustomOperationOptionPrefix, StringComparison.OrdinalIgnoreCase));
+            var methodParametersWithInputValue = allMethodParameters.Where(static p => p.IsValuePresent);
             return methodParametersWithInputValue;
         }
 
@@ -81,7 +81,7 @@ internal override CimCustomOptionsDictionary CalculateJobSpecificCustomOptions()
             IDictionary<string, object> result = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
 
             IEnumerable<MethodParameter> customOptions = this
-                .GetMethodInputParametersCore(p => p.Name.StartsWith(CustomOperationOptionPrefix, StringComparison.OrdinalIgnoreCase));
+                .GetMethodInputParametersCore(static p => p.Name.StartsWith(CustomOperationOptionPrefix, StringComparison.OrdinalIgnoreCase));
             foreach (MethodParameter customOption in customOptions)
             {
                 if (customOption.Value == null)
@@ -104,7 +104,7 @@ internal IEnumerable<MethodParameter> GetMethodOutputParameters()
             }
 
             var outParameters = allParameters_plus_returnValue
-                .Where(p => ((p.Bindings & (MethodParameterBindings.Out | MethodParameterBindings.Error)) != 0));
+                .Where(static p => ((p.Bindings & (MethodParameterBindings.Out | MethodParameterBindings.Error)) != 0));
 
             return outParameters;
         }
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs
index f0d07fc201d..869002a55f4 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/ModifyInstanceJob.cs
@@ -13,7 +13,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job wrapping invocation of a ModifyInstance intrinsic CIM method.
     /// </summary>
-    internal class ModifyInstanceJob : PropertySettingJob<CimInstance>
+    internal sealed class ModifyInstanceJob : PropertySettingJob<CimInstance>
     {
         private CimInstance _resultFromModifyInstance;
         private bool _resultFromModifyInstanceHasBeenPassedThru;
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs
index 7c7a82ee9ca..7bd2bd17531 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/QueryJob.cs
@@ -14,7 +14,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job that handles executing a WQL (in the future CQL?) query on a remote CIM server.
     /// </summary>
-    internal class QueryInstancesJob : QueryJobBase
+    internal sealed class QueryInstancesJob : QueryJobBase
     {
         private readonly string _wqlQuery;
         private readonly bool _useEnumerateInstances;
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/StaticMethodInvocationJob.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/StaticMethodInvocationJob.cs
index 5a25206fe94..3bc376ab3d5 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/StaticMethodInvocationJob.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/StaticMethodInvocationJob.cs
@@ -11,7 +11,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Job wrapping invocation of a static CIM method.
     /// </summary>
-    internal class StaticMethodInvocationJob : ExtrinsicMethodInvocationJob
+    internal sealed class StaticMethodInvocationJob : ExtrinsicMethodInvocationJob
     {
         internal StaticMethodInvocationJob(CimJobContext jobContext, MethodInvocationInfo methodInvocationInfo)
                 : base(jobContext, false /* passThru */, jobContext.CmdletizationClassName, methodInvocationInfo)
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs
index 515e19f895c..6b716fa5501 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/TerminatingErrorTracker.cs
@@ -19,7 +19,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// Tracks (per-session) terminating errors in a given cmdlet invocation.
     /// </summary>
-    internal class TerminatingErrorTracker
+    internal sealed class TerminatingErrorTracker
     {
         #region Getting tracker for a given cmdlet invocation
 
@@ -53,8 +53,7 @@ private static int GetNumberOfSessions(InvocationInfo invocationInfo)
             int maxNumberOfSessionsIndicatedByCimInstanceArguments = 1;
             foreach (object cmdletArgument in invocationInfo.BoundParameters.Values)
             {
-                CimInstance[] array = cmdletArgument as CimInstance[];
-                if (array != null)
+                if (cmdletArgument is CimInstance[] array)
                 {
                     int numberOfSessionsAssociatedWithArgument = array
                         .Select(CimCmdletAdapter.GetSessionOfOriginFromCimInstance)
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs
index 6dc65424f50..6bd2bee7fee 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimChildJobBase.cs
@@ -84,7 +84,7 @@ private enum WsManErrorCode : uint
 
         private static bool IsWsManQuotaReached(Exception exception)
         {
-            if (!(exception is CimException cimException))
+            if (exception is not CimException cimException)
             {
                 return false;
             }
@@ -111,7 +111,7 @@ private static bool IsWsManQuotaReached(Exception exception)
                 return false;
             }
 
-            WsManErrorCode wsManErrorCode = (WsManErrorCode)(UInt32)(errorCodeProperty.Value);
+            WsManErrorCode wsManErrorCode = (WsManErrorCode)(uint)(errorCodeProperty.Value);
             switch (wsManErrorCode) // error codes that should result in sleep-and-retry are based on an email from Ryan
             {
                 case WsManErrorCode.ERROR_WSMAN_QUOTA_MAX_SHELLS:
@@ -315,10 +315,7 @@ internal override void StartJob()
                 this.ExceptionSafeWrapper(delegate
                 {
                     IObservable<T> observable = this.GetCimOperation();
-                    if (observable != null)
-                    {
-                        observable.Subscribe(this);
-                    }
+                    observable?.Subscribe(this);
                 });
             });
         }
@@ -423,11 +420,11 @@ internal CimOperationOptions CreateOperationOptions()
                   (_jobContext.WarningActionPreference == ActionPreference.Ignore)
                 ) && (!_jobContext.IsRunningInBackground))
             {
-                operationOptions.DisableChannel((UInt32)MessageChannel.Warning);
+                operationOptions.DisableChannel((uint)MessageChannel.Warning);
             }
             else
             {
-                operationOptions.EnableChannel((UInt32)MessageChannel.Warning);
+                operationOptions.EnableChannel((uint)MessageChannel.Warning);
             }
 
             if ((
@@ -435,11 +432,11 @@ internal CimOperationOptions CreateOperationOptions()
                   (_jobContext.VerboseActionPreference == ActionPreference.Ignore)
                 ) && (!_jobContext.IsRunningInBackground))
             {
-                operationOptions.DisableChannel((UInt32)MessageChannel.Verbose);
+                operationOptions.DisableChannel((uint)MessageChannel.Verbose);
             }
             else
             {
-                operationOptions.EnableChannel((UInt32)MessageChannel.Verbose);
+                operationOptions.EnableChannel((uint)MessageChannel.Verbose);
             }
 
             if ((
@@ -447,11 +444,11 @@ internal CimOperationOptions CreateOperationOptions()
                   (_jobContext.DebugActionPreference == ActionPreference.Ignore)
                 ) && (!_jobContext.IsRunningInBackground))
             {
-                operationOptions.DisableChannel((UInt32)MessageChannel.Debug);
+                operationOptions.DisableChannel((uint)MessageChannel.Debug);
             }
             else
             {
-                operationOptions.EnableChannel((UInt32)MessageChannel.Debug);
+                operationOptions.EnableChannel((uint)MessageChannel.Debug);
             }
 
             switch (this.JobContext.ShouldProcessOptimization)
@@ -522,10 +519,7 @@ internal CimOperationOptions CreateOperationOptions()
             }
 
             CimCustomOptionsDictionary jobSpecificCustomOptions = this.GetJobSpecificCustomOptions();
-            if (jobSpecificCustomOptions != null)
-            {
-                jobSpecificCustomOptions.Apply(operationOptions, CimSensitiveValueConverter);
-            }
+            jobSpecificCustomOptions?.Apply(operationOptions, CimSensitiveValueConverter);
 
             return operationOptions;
         }
@@ -629,8 +623,7 @@ internal void ReportJobFailure(IContainsErrorRecord exception)
             }
             else
             {
-                CimJobException cje = exception as CimJobException;
-                if ((cje != null) && (cje.IsTerminatingError))
+                if ((exception is CimJobException cje) && (cje.IsTerminatingError))
                 {
                     terminatingErrorTracker.MarkSessionAsTerminated(this.JobContext.Session, out sessionWasAlreadyTerminated);
                     isThisTerminatingError = true;
@@ -763,7 +756,7 @@ internal void FinishProgressReporting()
 
         #region Handling extended semantics callbacks
 
-        private void WriteProgressCallback(string activity, string currentOperation, string statusDescription, UInt32 percentageCompleted, UInt32 secondsRemaining)
+        private void WriteProgressCallback(string activity, string currentOperation, string statusDescription, uint percentageCompleted, uint secondsRemaining)
         {
             if (string.IsNullOrEmpty(activity))
             {
@@ -775,28 +768,28 @@ private void WriteProgressCallback(string activity, string currentOperation, str
                 statusDescription = this.StatusMessage;
             }
 
-            Int32 signedSecondsRemaining;
-            if (secondsRemaining == UInt32.MaxValue)
+            int signedSecondsRemaining;
+            if (secondsRemaining == uint.MaxValue)
             {
                 signedSecondsRemaining = -1;
             }
-            else if (secondsRemaining <= Int32.MaxValue)
+            else if (secondsRemaining <= int.MaxValue)
             {
-                signedSecondsRemaining = (Int32)secondsRemaining;
+                signedSecondsRemaining = (int)secondsRemaining;
             }
             else
             {
-                signedSecondsRemaining = Int32.MaxValue;
+                signedSecondsRemaining = int.MaxValue;
             }
 
-            Int32 signedPercentageComplete;
-            if (percentageCompleted == UInt32.MaxValue)
+            int signedPercentageComplete;
+            if (percentageCompleted == uint.MaxValue)
             {
                 signedPercentageComplete = -1;
             }
             else if (percentageCompleted <= 100)
             {
-                signedPercentageComplete = (Int32)percentageCompleted;
+                signedPercentageComplete = (int)percentageCompleted;
             }
             else
             {
@@ -825,7 +818,7 @@ private enum MessageChannel
             Debug = 2,
         }
 
-        private void WriteMessageCallback(UInt32 channel, string message)
+        private void WriteMessageCallback(uint channel, string message)
         {
             this.ExceptionSafeWrapper(
                     delegate
@@ -1009,7 +1002,7 @@ private CimResponseType PromptUserCallback(string message, CimPromptType promptT
         internal static bool IsShowComputerNameMarkerPresent(CimInstance cimInstance)
         {
             PSObject pso = PSObject.AsPSObject(cimInstance);
-            if (!(pso.InstanceMembers[RemotingConstants.ShowComputerNameNoteProperty] is PSPropertyInfo psShowComputerNameProperty))
+            if (pso.InstanceMembers[RemotingConstants.ShowComputerNameNoteProperty] is not PSPropertyInfo psShowComputerNameProperty)
             {
                 return false;
             }
@@ -1019,8 +1012,7 @@ internal static bool IsShowComputerNameMarkerPresent(CimInstance cimInstance)
 
         internal static void AddShowComputerNameMarker(PSObject pso)
         {
-            PSPropertyInfo psShowComputerNameProperty = pso.InstanceMembers[RemotingConstants.ShowComputerNameNoteProperty] as PSPropertyInfo;
-            if (psShowComputerNameProperty != null)
+            if (pso.InstanceMembers[RemotingConstants.ShowComputerNameNoteProperty] is PSPropertyInfo psShowComputerNameProperty)
             {
                 psShowComputerNameProperty.Value = true;
             }
@@ -1053,10 +1045,7 @@ internal override void WriteObject(object outputObject)
 
             if (this.JobContext.ShowComputerName)
             {
-                if (pso == null)
-                {
-                    pso = PSObject.AsPSObject(outputObject);
-                }
+                pso ??= PSObject.AsPSObject(outputObject);
 
                 AddShowComputerNameMarker(pso);
                 if (cimInstance == null)
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs
index c334ff29601..8a4e4272561 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletDefinitionContext.cs
@@ -10,7 +10,7 @@
 
 namespace Microsoft.PowerShell.Cmdletization.Cim
 {
-    internal class CimCmdletDefinitionContext
+    internal sealed class CimCmdletDefinitionContext
     {
         internal CimCmdletDefinitionContext(
             string cmdletizationClassName,
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletInvocationContext.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletInvocationContext.cs
index c876184c141..3bee74526fc 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletInvocationContext.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimCmdletInvocationContext.cs
@@ -10,7 +10,7 @@
 
 namespace Microsoft.PowerShell.Cmdletization.Cim
 {
-    internal class CimCmdletInvocationContext
+    internal sealed class CimCmdletInvocationContext
     {
         internal CimCmdletInvocationContext(
             CimCmdletDefinitionContext cmdletDefinitionContext,
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs
index 91500758a06..da075286c34 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimConverter.cs
@@ -24,9 +24,9 @@
 
 namespace Microsoft.PowerShell.Cim
 {
-    internal class CimSensitiveValueConverter : IDisposable
+    internal sealed class CimSensitiveValueConverter : IDisposable
     {
-        private class SensitiveString : IDisposable
+        private sealed class SensitiveString : IDisposable
         {
             private GCHandle _gcHandle;
             private string _string;
@@ -50,15 +50,9 @@ internal SensitiveString(int numberOfCharacters)
 
             private unsafe void Copy(char* source, int offset, int charsToCopy)
             {
-                if ((offset < 0) || (offset >= _string.Length))
-                {
-                    throw new ArgumentOutOfRangeException(nameof(offset));
-                }
-
-                if (offset + charsToCopy > _string.Length)
-                {
-                    throw new ArgumentOutOfRangeException(nameof(charsToCopy));
-                }
+                ArgumentOutOfRangeException.ThrowIfNegative(offset);
+                ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(offset, _string.Length);
+                ArgumentOutOfRangeException.ThrowIfGreaterThan(offset + charsToCopy, _string.Length, nameof(charsToCopy));
 
                 fixed (char* target = _string)
                 {
@@ -352,7 +346,7 @@ internal static object ConvertFromDotNetToCim(object dotNetObject)
         /// <exception cref="PSInvalidCastException">The only kind of exception this method can throw.</exception>
         internal static object ConvertFromCimToDotNet(object cimObject, Type expectedDotNetType)
         {
-            if (expectedDotNetType == null) { throw new ArgumentNullException(nameof(expectedDotNetType)); }
+            ArgumentNullException.ThrowIfNull(expectedDotNetType);
 
             if (cimObject == null)
             {
@@ -431,7 +425,9 @@ internal static object ConvertFromCimToDotNet(object cimObject, Type expectedDot
                 var cimIntrinsicValue = (byte[])LanguagePrimitives.ConvertTo(cimObject, typeof(byte[]), CultureInfo.InvariantCulture);
                 return exceptionSafeReturn(delegate
                                                {
+                                                   #pragma warning disable SYSLIB0057
                                                    return new X509Certificate2(cimIntrinsicValue);
+                                                   #pragma warning restore SYSLIB0057
                                                });
             }
 
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimJobContext.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimJobContext.cs
index 5f01d472554..27d48ccab9a 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimJobContext.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimJobContext.cs
@@ -9,7 +9,7 @@
 
 namespace Microsoft.PowerShell.Cmdletization.Cim
 {
-    internal class CimJobContext
+    internal sealed class CimJobContext
     {
         internal CimJobContext(
             CimCmdletInvocationContext cmdletInvocationContext,
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs
index 1445ed17a14..34c708b5f4c 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimOperationOptionsHelper.cs
@@ -14,7 +14,7 @@
 
 namespace Microsoft.PowerShell.Cmdletization.Cim
 {
-    internal class CimCustomOptionsDictionary
+    internal sealed class CimCustomOptionsDictionary
     {
         private readonly IDictionary<string, object> _dict;
         private readonly object _dictModificationLock = new();
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs
index a6f5b9616b9..f08c2ab3c11 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimQuery.cs
@@ -18,7 +18,7 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// <summary>
     /// CimQuery supports building of queries against CIM object model.
     /// </summary>
-    internal class CimQuery : QueryBuilder, ISessionBoundQueryBuilder<CimSession>
+    internal sealed class CimQuery : QueryBuilder, ISessionBoundQueryBuilder<CimSession>
     {
         private readonly StringBuilder _wqlCondition;
 
@@ -177,7 +177,7 @@ private static string GetMatchCondition(string propertyName, IEnumerable propert
                 .Select(propertyValue => wildcardsEnabled
                                              ? GetMatchConditionForLikeOperator(propertyName, propertyValue)
                                              : GetMatchConditionForEqualityOperator(propertyName, propertyValue))
-                .Where(individualCondition => !string.IsNullOrWhiteSpace(individualCondition))
+                .Where(static individualCondition => !string.IsNullOrWhiteSpace(individualCondition))
                 .ToList();
             if (individualConditions.Count == 0)
             {
@@ -196,7 +196,7 @@ private static string GetMatchCondition(string propertyName, IEnumerable propert
         /// <param name="propertyName">Property name to query on.</param>
         /// <param name="allowedPropertyValues">Property values to accept in the query.</param>
         /// <param name="wildcardsEnabled">
-        ///   <see langword="true"/> if <paramref name="allowedPropertyValues"/> should be treated as a <see cref="System.String"/> containing a wildcard pattern;
+        ///   <see langword="true"/> if <paramref name="allowedPropertyValues"/> should be treated as a <see cref="string"/> containing a wildcard pattern;
         ///   <see langword="false"/> otherwise.
         /// </param>
         /// <param name="behaviorOnNoMatch">
@@ -219,7 +219,7 @@ public override void FilterByProperty(string propertyName, IEnumerable allowedPr
         /// <param name="propertyName">Property name to query on.</param>
         /// <param name="excludedPropertyValues">Property values to reject in the query.</param>
         /// <param name="wildcardsEnabled">
-        /// <see langword="true"/> if <paramref name="excludedPropertyValues"/> should be treated as a <see cref="System.String"/> containing a wildcard pattern;
+        /// <see langword="true"/> if <paramref name="excludedPropertyValues"/> should be treated as a <see cref="string"/> containing a wildcard pattern;
         /// <see langword="false"/> otherwise.
         /// </param>
         /// <param name="behaviorOnNoMatch">
@@ -314,15 +314,8 @@ public override void FilterByAssociatedInstance(object associatedInstance, strin
         /// <param name="optionValue"></param>
         public override void AddQueryOption(string optionName, object optionValue)
         {
-            if (string.IsNullOrEmpty(optionName))
-            {
-                throw new ArgumentNullException(nameof(optionName));
-            }
-
-            if (optionValue == null)
-            {
-                throw new ArgumentNullException(nameof(optionValue));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(optionName);
+            ArgumentNullException.ThrowIfNull(optionValue);
 
             this.queryOptions[optionName] = optionValue;
         }
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs
index 7052b16c768..472046b192f 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/cimWrapper.cs
@@ -107,15 +107,12 @@ internal CimCmdletDefinitionContext CmdletDefinitionContext
         {
             get
             {
-                if (_cmdletDefinitionContext == null)
-                {
-                    _cmdletDefinitionContext = new CimCmdletDefinitionContext(
-                            this.ClassName,
-                            this.ClassVersion,
-                            this.ModuleVersion,
-                            this.Cmdlet.CommandInfo.CommandMetadata.SupportsShouldProcess,
-                            this.PrivateData);
-                }
+                _cmdletDefinitionContext ??= new CimCmdletDefinitionContext(
+                    this.ClassName,
+                    this.ClassVersion,
+                    this.ModuleVersion,
+                    this.Cmdlet.CommandInfo.CommandMetadata.SupportsShouldProcess,
+                    this.PrivateData);
 
                 return _cmdletDefinitionContext;
             }
@@ -171,7 +168,7 @@ private CimJobContext CreateJobContext(CimSession session, object targetObject)
         /// <returns><see cref="System.Management.Automation.Job"/> object that performs a query against the wrapped object model.</returns>
         internal override StartableJob CreateQueryJob(CimSession session, QueryBuilder baseQuery)
         {
-            if (!(baseQuery is CimQuery query))
+            if (baseQuery is not CimQuery query)
             {
                 throw new ArgumentNullException(nameof(baseQuery));
             }
diff --git a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs
index 39d1a5bc441..c1a8552db8c 100644
--- a/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/cimSupport/cmdletization/cim/clientSideQuery.cs
@@ -20,9 +20,9 @@ namespace Microsoft.PowerShell.Cmdletization.Cim
     /// 1) filtering that cannot be translated into a server-side query (i.e. when CimQuery.WildcardToWqlLikeOperand reports that it cannot translate into WQL)
     /// 2) detecting if all expected results have been received and giving friendly user errors otherwise (i.e. could not find process with name='foo';  details in Windows 8 Bugs: #60926)
     /// </summary>
-    internal class ClientSideQuery : QueryBuilder
+    internal sealed class ClientSideQuery : QueryBuilder
     {
-        internal class NotFoundError
+        internal sealed class NotFoundError
         {
             public NotFoundError()
             {
@@ -36,8 +36,7 @@ public NotFoundError(string propertyName, object propertyValue, bool wildcardsEn
 
                 if (wildcardsEnabled)
                 {
-                    var propertyValueAsString = propertyValue as string;
-                    if ((propertyValueAsString != null) && (WildcardPattern.ContainsWildcardCharacters(propertyValueAsString)))
+                    if ((propertyValue is string propertyValueAsString) && (WildcardPattern.ContainsWildcardCharacters(propertyValueAsString)))
                     {
                         this.ErrorMessageGenerator =
                             (queryDescription, className) => GetErrorMessageForNotFound_ForWildcard(this.PropertyName, this.PropertyValue, className);
@@ -181,7 +180,7 @@ protected override bool IsMatchCore(CimInstance cimInstance)
             }
         }
 
-        private class CimInstanceRegularFilter : CimInstancePropertyBasedFilter
+        private sealed class CimInstanceRegularFilter : CimInstancePropertyBasedFilter
         {
             public CimInstanceRegularFilter(string propertyName, IEnumerable allowedPropertyValues, bool wildcardsEnabled, BehaviorOnNoMatch behaviorOnNoMatch)
             {
@@ -202,7 +201,7 @@ public CimInstanceRegularFilter(string propertyName, IEnumerable allowedProperty
 
                 if (valueBehaviors.Count == 1)
                 {
-                    this.BehaviorOnNoMatch = valueBehaviors.Single();
+                    this.BehaviorOnNoMatch = valueBehaviors.First();
                 }
                 else
                 {
@@ -223,7 +222,7 @@ public override bool ShouldReportErrorOnNoMatches_IfMultipleFilters()
                     case BehaviorOnNoMatch.Default:
                     default:
                         return this.PropertyValueFilters
-                                   .Any(f => !f.HadMatch && f.BehaviorOnNoMatch == BehaviorOnNoMatch.ReportErrors);
+                                   .Any(static f => !f.HadMatch && f.BehaviorOnNoMatch == BehaviorOnNoMatch.ReportErrors);
                 }
             }
 
@@ -247,7 +246,7 @@ public override IEnumerable<NotFoundError> GetNotFoundErrors_IfThisIsTheOnlyFilt
             }
         }
 
-        private class CimInstanceExcludeFilter : CimInstancePropertyBasedFilter
+        private sealed class CimInstanceExcludeFilter : CimInstancePropertyBasedFilter
         {
             public CimInstanceExcludeFilter(string propertyName, IEnumerable excludedPropertyValues, bool wildcardsEnabled, BehaviorOnNoMatch behaviorOnNoMatch)
             {
@@ -272,7 +271,7 @@ public CimInstanceExcludeFilter(string propertyName, IEnumerable excludedPropert
             }
         }
 
-        private class CimInstanceMinFilter : CimInstancePropertyBasedFilter
+        private sealed class CimInstanceMinFilter : CimInstancePropertyBasedFilter
         {
             public CimInstanceMinFilter(string propertyName, object minPropertyValue, BehaviorOnNoMatch behaviorOnNoMatch)
             {
@@ -293,7 +292,7 @@ public CimInstanceMinFilter(string propertyName, object minPropertyValue, Behavi
             }
         }
 
-        private class CimInstanceMaxFilter : CimInstancePropertyBasedFilter
+        private sealed class CimInstanceMaxFilter : CimInstancePropertyBasedFilter
         {
             public CimInstanceMaxFilter(string propertyName, object minPropertyValue, BehaviorOnNoMatch behaviorOnNoMatch)
             {
@@ -314,7 +313,7 @@ public CimInstanceMaxFilter(string propertyName, object minPropertyValue, Behavi
             }
         }
 
-        private class CimInstanceAssociationFilter : CimInstanceFilterBase
+        private sealed class CimInstanceAssociationFilter : CimInstanceFilterBase
         {
             public CimInstanceAssociationFilter(BehaviorOnNoMatch behaviorOnNoMatch)
             {
@@ -466,8 +465,7 @@ protected override BehaviorOnNoMatch GetDefaultBehaviorWhenNoMatchesFound(object
                 }
                 else
                 {
-                    string expectedPropertyValueAsString = cimTypedExpectedPropertyValue as string;
-                    if (expectedPropertyValueAsString != null && WildcardPattern.ContainsWildcardCharacters(expectedPropertyValueAsString))
+                    if (cimTypedExpectedPropertyValue is string expectedPropertyValueAsString && WildcardPattern.ContainsWildcardCharacters(expectedPropertyValueAsString))
                     {
                         return BehaviorOnNoMatch.SilentlyContinue;
                     }
@@ -504,8 +502,7 @@ private static bool NonWildcardEqual(string propertyName, object actualPropertyV
                     actualPropertyValue = actualPropertyValue.ToString();
                 }
 
-                var expectedPropertyValueAsString = expectedPropertyValue as string;
-                if (expectedPropertyValueAsString != null)
+                if (expectedPropertyValue is string expectedPropertyValueAsString)
                 {
                     var actualPropertyValueAsString = (string)actualPropertyValue;
                     return actualPropertyValueAsString.Equals(expectedPropertyValueAsString, StringComparison.OrdinalIgnoreCase);
@@ -533,7 +530,7 @@ private static bool WildcardEqual(string propertyName, object actualPropertyValu
             }
         }
 
-        internal class PropertyValueExcludeFilter : PropertyValueRegularFilter
+        internal sealed class PropertyValueExcludeFilter : PropertyValueRegularFilter
         {
             public PropertyValueExcludeFilter(string propertyName, object expectedPropertyValue, bool wildcardsEnabled, BehaviorOnNoMatch behaviorOnNoMatch)
                 : base(propertyName, expectedPropertyValue, wildcardsEnabled, behaviorOnNoMatch)
@@ -551,7 +548,7 @@ protected override bool IsMatchingValue(object actualPropertyValue)
             }
         }
 
-        internal class PropertyValueMinFilter : PropertyValueFilter
+        internal sealed class PropertyValueMinFilter : PropertyValueFilter
         {
             public PropertyValueMinFilter(string propertyName, object expectedPropertyValue, BehaviorOnNoMatch behaviorOnNoMatch)
                 : base(propertyName, expectedPropertyValue, behaviorOnNoMatch)
@@ -572,7 +569,7 @@ private static bool ActualValueGreaterThanOrEqualToExpectedValue(string property
             {
                 try
                 {
-                    if (!(expectedPropertyValue is IComparable expectedComparable))
+                    if (expectedPropertyValue is not IComparable expectedComparable)
                     {
                         return false;
                     }
@@ -586,7 +583,7 @@ private static bool ActualValueGreaterThanOrEqualToExpectedValue(string property
             }
         }
 
-        internal class PropertyValueMaxFilter : PropertyValueFilter
+        internal sealed class PropertyValueMaxFilter : PropertyValueFilter
         {
             public PropertyValueMaxFilter(string propertyName, object expectedPropertyValue, BehaviorOnNoMatch behaviorOnNoMatch)
                 : base(propertyName, expectedPropertyValue, behaviorOnNoMatch)
@@ -607,7 +604,7 @@ private static bool ActualValueLessThanOrEqualToExpectedValue(string propertyNam
             {
                 try
                 {
-                    if (!(actualPropertyValue is IComparable actualComparable))
+                    if (actualPropertyValue is not IComparable actualComparable)
                     {
                         return false;
                     }
@@ -656,7 +653,7 @@ internal IEnumerable<NotFoundError> GenerateNotFoundErrors()
                     return Enumerable.Empty<NotFoundError>();
                 }
 
-                if (_filters.All(f => !f.ShouldReportErrorOnNoMatches_IfMultipleFilters()))
+                if (_filters.All(static f => !f.ShouldReportErrorOnNoMatches_IfMultipleFilters()))
                 {
                     return Enumerable.Empty<NotFoundError>();
                 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs
index 1b10bbfe7ab..3f3f617097a 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/CIMHelper.cs
@@ -9,8 +9,6 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    using Extensions;
-
     internal static class CIMHelper
     {
         internal static class ClassNames
@@ -79,8 +77,7 @@ internal static string WqlQueryAll(string from)
         /// </remarks>
         internal static T GetFirst<T>(CimSession session, string nameSpace, string wmiClassName) where T : class, new()
         {
-            if (string.IsNullOrEmpty(wmiClassName))
-                throw new ArgumentException("String argument may not be null or empty", nameof(wmiClassName));
+            ArgumentException.ThrowIfNullOrEmpty(wmiClassName);
 
             try
             {
@@ -132,8 +129,7 @@ internal static string WqlQueryAll(string from)
         /// </remarks>
         internal static T[] GetAll<T>(CimSession session, string nameSpace, string wmiClassName) where T : class, new()
         {
-            if (string.IsNullOrEmpty(wmiClassName))
-                throw new ArgumentException("String argument may not be null or empty", nameof(wmiClassName));
+            ArgumentException.ThrowIfNullOrEmpty(wmiClassName);
 
             var rv = new List<T>();
 
@@ -239,11 +235,6 @@ internal static string EscapePath(string path)
             return string.Join(@"\\", path.Split('\\'));
         }
     }
-}
-
-namespace Extensions
-{
-    using Microsoft.PowerShell.Commands;
 
     internal static class CIMExtensions
     {
@@ -319,12 +310,12 @@ internal static CimInstance QueryFirstInstance(this CimSession session, string q
 
         internal static T[] GetAll<T>(this CimSession session, string wmiClassName) where T : class, new()
         {
-            return Microsoft.PowerShell.Commands.CIMHelper.GetAll<T>(session, wmiClassName);
+            return CIMHelper.GetAll<T>(session, wmiClassName);
         }
 
         internal static T[] GetAll<T>(this CimSession session, string wmiNamespace, string wmiClassName) where T : class, new()
         {
-            return Microsoft.PowerShell.Commands.CIMHelper.GetAll<T>(session, wmiNamespace, wmiClassName);
+            return CIMHelper.GetAll<T>(session, wmiNamespace, wmiClassName);
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs
index 78be89b90da..bc4e44220dd 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearRecycleBinCommand.cs
@@ -41,7 +41,7 @@ public string[] DriveLetter
         /// <summary>
         /// Property that sets force parameter. This will allow to clear the recyclebin.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get
@@ -237,7 +237,7 @@ private void EmptyRecycleBin(string drivePath)
         }
     }
 
-    internal static class NativeMethod
+    internal static partial class NativeMethod
     {
         // Internal code to SHEmptyRecycleBin
         internal enum RecycleFlags : uint
@@ -247,8 +247,8 @@ internal enum RecycleFlags : uint
             SHERB_NOSOUND = 0x00000004
         }
 
-        [DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
-        internal static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);
+        [LibraryImport("Shell32.dll", StringMarshalling = StringMarshalling.Utf16, EntryPoint = "SHEmptyRecycleBinW")]
+        internal static partial uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);
     }
 }
 #endif
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs
index 5ce64350fbd..77e1b497b95 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Clipboard.cs
@@ -8,7 +8,7 @@
 
 namespace Microsoft.PowerShell.Commands.Internal
 {
-    internal static class Clipboard
+    internal static partial class Clipboard
     {
         private static bool? _clipboardSupported;
 
@@ -19,7 +19,8 @@ internal static class Clipboard
         private static string StartProcess(
             string tool,
             string args,
-            string stdin = "")
+            string stdin = "",
+            bool readStdout = true)
         {
             ProcessStartInfo startInfo = new();
             startInfo.UseShellExecute = false;
@@ -28,7 +29,7 @@ private static string StartProcess(
             startInfo.RedirectStandardError = true;
             startInfo.FileName = tool;
             startInfo.Arguments = args;
-            string stdout;
+            string stdout = string.Empty;
 
             using (Process process = new())
             {
@@ -43,15 +44,15 @@ private static string StartProcess(
                     return string.Empty;
                 }
 
-                if (!string.IsNullOrEmpty(stdin))
+                process.StandardInput.Write(stdin);
+                process.StandardInput.Close();
+
+                if (readStdout)
                 {
-                    process.StandardInput.Write(stdin);
-                    process.StandardInput.Close();
+                    stdout = process.StandardOutput.ReadToEnd();
                 }
 
-                stdout = process.StandardOutput.ReadToEnd();
                 process.WaitForExit(250);
-
                 _clipboardSupported = process.ExitCode == 0;
             }
 
@@ -93,11 +94,6 @@ public static string GetText()
 
         public static void SetText(string text)
         {
-            if (string.IsNullOrEmpty(text))
-            {
-                return;
-            }
-
             if (_clipboardSupported == false)
             {
                 _internalClipboard = text;
@@ -114,7 +110,14 @@ public static void SetText(string text)
             else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
             {
                 tool = "xclip";
-                args = "-selection clipboard -in";
+                if (string.IsNullOrEmpty(text))
+                {
+                    args = "-selection clipboard /dev/null";
+                }
+                else
+                {
+                    args = "-selection clipboard -in";
+                }
             }
             else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
             {
@@ -126,7 +129,7 @@ public static void SetText(string text)
                 return;
             }
 
-            StartProcess(tool, args, text);
+            StartProcess(tool, args, text, readStdout: false);
             if (_clipboardSupported == false)
             {
                 _internalClipboard = text;
@@ -154,46 +157,46 @@ public static void SetRtf(string plainText, string rtfText)
         private const uint GMEM_ZEROINIT = 0x0040;
         private const uint GHND = GMEM_MOVEABLE | GMEM_ZEROINIT;
 
-        [DllImport("kernel32.dll")]
-        private static extern IntPtr GlobalAlloc(uint flags, UIntPtr dwBytes);
+        [LibraryImport("kernel32.dll")]
+        private static partial IntPtr GlobalAlloc(uint flags, UIntPtr dwBytes);
 
-        [DllImport("kernel32.dll")]
-        private static extern IntPtr GlobalFree(IntPtr hMem);
+        [LibraryImport("kernel32.dll")]
+        private static partial IntPtr GlobalFree(IntPtr hMem);
 
-        [DllImport("kernel32.dll")]
-        private static extern IntPtr GlobalLock(IntPtr hMem);
+        [LibraryImport("kernel32.dll")]
+        private static partial IntPtr GlobalLock(IntPtr hMem);
 
-        [DllImport("kernel32.dll")]
+        [LibraryImport("kernel32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool GlobalUnlock(IntPtr hMem);
+        private static partial bool GlobalUnlock(IntPtr hMem);
 
-        [DllImport("kernel32.dll", ExactSpelling = true, EntryPoint = "RtlMoveMemory", SetLastError = true)]
-        private static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
+        [LibraryImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
+        private static partial void CopyMemory(IntPtr dest, IntPtr src, uint count);
 
-        [DllImport("user32.dll", SetLastError = false)]
+        [LibraryImport("user32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool IsClipboardFormatAvailable(uint format);
+        private static partial bool IsClipboardFormatAvailable(uint format);
 
-        [DllImport("user32.dll", SetLastError = true)]
+        [LibraryImport("user32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool OpenClipboard(IntPtr hWndNewOwner);
+        private static partial bool OpenClipboard(IntPtr hWndNewOwner);
 
-        [DllImport("user32.dll", SetLastError = true)]
+        [LibraryImport("user32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool CloseClipboard();
+        private static partial bool CloseClipboard();
 
-        [DllImport("user32.dll", SetLastError = true)]
+        [LibraryImport("user32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool EmptyClipboard();
+        private static partial bool EmptyClipboard();
 
-        [DllImport("user32.dll", SetLastError = true)]
-        private static extern IntPtr GetClipboardData(uint format);
+        [LibraryImport("user32.dll")]
+        private static partial IntPtr GetClipboardData(uint format);
 
-        [DllImport("user32.dll")]
-        private static extern IntPtr SetClipboardData(uint format, IntPtr data);
+        [LibraryImport("user32.dll")]
+        private static partial IntPtr SetClipboardData(uint format, IntPtr data);
 
-        [DllImport("user32.dll", SetLastError = true)]
-        private static extern uint RegisterClipboardFormat(string lpszFormat);
+        [LibraryImport("user32.dll", StringMarshalling = StringMarshalling.Utf16)]
+        private static partial uint RegisterClipboardFormat(string lpszFormat);
 
         private const uint CF_TEXT = 1;
         private const uint CF_UNICODETEXT = 13;
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/CombinePathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/CombinePathCommand.cs
index bdeef0dd7a0..79b1c862bfd 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/CombinePathCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/CombinePathCommand.cs
@@ -32,7 +32,8 @@ public class JoinPathCommand : CoreCommandWithCredentialsBase
         [Parameter(Position = 1, Mandatory = true, ValueFromPipelineByPropertyName = true)]
         [AllowNull]
         [AllowEmptyString]
-        public string ChildPath { get; set; }
+        [AllowEmptyCollection]
+        public string[] ChildPath { get; set; }
 
         /// <summary>
         /// Gets or sets additional childPaths to the command.
@@ -50,6 +51,21 @@ public class JoinPathCommand : CoreCommandWithCredentialsBase
         [Parameter]
         public SwitchParameter Resolve { get; set; }
 
+        /// <summary>
+        /// Gets or sets the extension to use for the resulting path.
+        /// If not specified, the original extension (if any) is preserved.
+        /// <para>
+        /// Behavior:
+        /// - If the path has an existing extension, it will be replaced with the specified extension.
+        /// - If the path does not have an extension, the specified extension will be added.
+        /// - If an empty string is provided, any existing extension will be removed.
+        /// - A leading dot in the extension is optional; if omitted, one will be added automatically.
+        /// </para>
+        /// </summary>
+        [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ValidateNotNull]
+        public string Extension { get; set; }
+
         #endregion Parameters
 
         #region Command code
@@ -64,7 +80,15 @@ protected override void ProcessRecord()
                 Path != null,
                 "Since Path is a mandatory parameter, paths should never be null");
 
-            string combinedChildPath = ChildPath;
+            string combinedChildPath = string.Empty;
+
+            if (this.ChildPath != null)
+            {
+                foreach (string childPath in this.ChildPath)
+                {
+                    combinedChildPath = SessionState.Path.Combine(combinedChildPath, childPath, CmdletProviderContext);
+                }
+            }
 
             // join the ChildPath elements
             if (AdditionalChildPath != null)
@@ -119,6 +143,12 @@ protected override void ProcessRecord()
                     continue;
                 }
 
+                // If Extension parameter is present it is not null due to [ValidateNotNull].
+                if (Extension is not null)
+                {
+                    joinedPath = System.IO.Path.ChangeExtension(joinedPath, Extension.Length == 0 ? null : Extension);
+                }
+
                 if (Resolve)
                 {
                     // Resolve the paths. The default API (GetResolvedPSPathFromPSPath)
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/CommitTransactionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/CommitTransactionCommand.cs
deleted file mode 100644
index 6f93119c999..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/CommitTransactionCommand.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Management.Automation;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command that commits a transaction.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Complete, "Transaction", SupportsShouldProcess = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135200")]
-    public class CompleteTransactionCommand : PSCmdlet
-    {
-        /// <summary>
-        /// Commits the current transaction.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            // Commit the transaction
-            if (ShouldProcess(
-                NavigationResources.TransactionResource,
-                NavigationResources.CommitAction))
-            {
-                this.Context.TransactionManager.Commit();
-            }
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs
index 61b5fe4487d..ea8c111531c 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Computer.cs
@@ -24,10 +24,6 @@
 using Microsoft.Win32;
 using Dbg = System.Management.Automation;
 
-// FxCop suppressions for resource strings:
-[module: SuppressMessage("Microsoft.Naming", "CA1703:ResourceStringsShouldBeSpelledCorrectly", Scope = "resource", Target = "ComputerResources.resources", MessageId = "unjoined")]
-[module: SuppressMessage("Microsoft.Naming", "CA1701:ResourceStringCompoundWordsShouldBeCasedCorrectly", Scope = "resource", Target = "ComputerResources.resources", MessageId = "UpTime")]
-
 namespace Microsoft.PowerShell.Commands
 {
     #region Restart-Computer
@@ -35,7 +31,6 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// This exception is thrown when the timeout expires before a computer finishes restarting.
     /// </summary>
-    [Serializable]
     public sealed class RestartComputerTimeoutException : RuntimeException
     {
         /// <summary>
@@ -87,50 +82,6 @@ public RestartComputerTimeoutException(string message) : base(message) { }
         /// An exception that led to this exception.
         /// </param>
         public RestartComputerTimeoutException(string message, Exception innerException) : base(message, innerException) { }
-
-        #region Serialization
-        /// <summary>
-        /// Serialization constructor for class RestartComputerTimeoutException.
-        /// </summary>
-        /// <param name="info">
-        /// serialization information
-        /// </param>
-        /// <param name="context">
-        /// streaming context
-        /// </param>
-        private RestartComputerTimeoutException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            ComputerName = info.GetString("ComputerName");
-            Timeout = info.GetInt32("Timeout");
-        }
-
-        /// <summary>
-        /// Serializes the RestartComputerTimeoutException.
-        /// </summary>
-        /// <param name="info">
-        /// serialization information
-        /// </param>
-        /// <param name="context">
-        /// streaming context
-        /// </param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            info.AddValue("ComputerName", ComputerName);
-            info.AddValue("Timeout", Timeout);
-        }
-        #endregion Serialization
     }
 
     /// <summary>
@@ -275,12 +226,12 @@ public WaitForServiceTypes For
         /// The specific time interval (in second) to wait between network pings or service queries.
         /// </summary>
         [Parameter(ParameterSetName = DefaultParameterSet)]
-        [ValidateRange(1, Int16.MaxValue)]
-        public Int16 Delay
+        [ValidateRange(1, short.MaxValue)]
+        public short Delay
         {
             get
             {
-                return (Int16)_delay;
+                return (short)_delay;
             }
 
             set
@@ -306,7 +257,7 @@ public Int16 Delay
         ComputerName = $computerName
         ScriptBlock = { $true }
 
-        SessionOption = NewPSSessionOption -NoMachineProfile
+        SessionOption = New-PSSessionOption -NoMachineProfile
         ErrorAction = 'SilentlyContinue'
     }
 
@@ -393,17 +344,10 @@ public void Dispose(bool disposing)
         {
             if (disposing)
             {
-                if (_timer != null)
-                {
-                    _timer.Dispose();
-                }
-
+                _timer?.Dispose();
                 _waitHandler.Dispose();
                 _cancel.Dispose();
-                if (_powershell != null)
-                {
-                    _powershell.Dispose();
-                }
+                _powershell?.Dispose();
             }
         }
 
@@ -522,7 +466,7 @@ private void OnTimedEvent(object s)
             }
         }
 
-        private class ComputerInfo
+        private sealed class ComputerInfo
         {
             internal string LastBootUpTime;
             internal bool RebootComplete;
@@ -540,7 +484,10 @@ private List<string> TestRestartStageUsingWsman(IEnumerable<string> computerName
             {
                 try
                 {
-                    if (token.IsCancellationRequested) { break; }
+                    if (token.IsCancellationRequested)
+                    {
+                        break;
+                    }
 
                     using (CimSession cimSession = RemoteDiscoveryHelper.CreateCimSession(computer, Credential, WsmanAuthentication, isLocalHost: false, this, token))
                     {
@@ -682,7 +629,10 @@ internal static List<string> TestWmiConnectionUsingWsman(List<string> computerNa
             {
                 try
                 {
-                    if (token.IsCancellationRequested) { break; }
+                    if (token.IsCancellationRequested)
+                    {
+                        break;
+                    }
 
                     using (CimSession cimSession = RemoteDiscoveryHelper.CreateCimSession(computer, credential, wsmanAuthentication, isLocalHost: false, cmdlet, token))
                     {
@@ -798,7 +748,7 @@ protected override void BeginProcessing()
 
             if (Wait)
             {
-                _activityId = (new Random()).Next();
+                _activityId = Random.Shared.Next();
                 if (_timeout == -1 || _timeout >= int.MaxValue / 1000)
                 {
                     _timeoutInMilliseconds = int.MaxValue;
@@ -837,7 +787,10 @@ protected override void ProcessRecord()
             ValidateComputerNames();
 
             object[] flags = new object[] { 2, 0 };
-            if (Force) flags[0] = forcedReboot;
+            if (Force)
+            {
+                flags[0] = forcedReboot;
+            }
 
             if (ParameterSetName.Equals(DefaultParameterSet, StringComparison.OrdinalIgnoreCase))
             {
@@ -912,14 +865,18 @@ protected override void ProcessRecord()
 
                     while (true)
                     {
-                        int loopCount = actualDelay * 4; // (delay * 1000)/250ms
+                        // (delay * 1000)/250ms
+                        int loopCount = actualDelay * 4;
                         while (loopCount > 0)
                         {
                             WriteProgress(_indicator[(indicatorIndex++) % 4] + _activity, _status, _percent, ProgressRecordType.Processing);
 
                             loopCount--;
                             _waitHandler.Wait(250);
-                            if (_exit) { break; }
+                            if (_exit)
+                            {
+                                break;
+                            }
                         }
 
                         if (first)
@@ -939,7 +896,10 @@ protected override void ProcessRecord()
                             // Test restart stage.
                             // We check if the target machine has already rebooted by querying the LastBootUpTime from the Win32_OperatingSystem object.
                             // So after this step, we are sure that both the Network and the WMI or WinRM service have already come up.
-                            if (_exit) { break; }
+                            if (_exit)
+                            {
+                                break;
+                            }
 
                             if (restartStageTestList.Count > 0)
                             {
@@ -955,7 +915,10 @@ protected override void ProcessRecord()
                             }
 
                             // Test WMI service
-                            if (_exit) { break; }
+                            if (_exit)
+                            {
+                                break;
+                            }
 
                             if (wmiTestList.Count > 0)
                             {
@@ -973,10 +936,16 @@ protected override void ProcessRecord()
                                 }
                             }
 
-                            if (isForWmi) { break; }
+                            if (isForWmi)
+                            {
+                                break;
+                            }
 
                             // Test WinRM service
-                            if (_exit) { break; }
+                            if (_exit)
+                            {
+                                break;
+                            }
 
                             if (winrmTestList.Count > 0)
                             {
@@ -1001,16 +970,25 @@ protected override void ProcessRecord()
 
                                             loopCount--;
                                             _waitHandler.Wait(250);
-                                            if (_exit) { break; }
+                                            if (_exit)
+                                            {
+                                                break;
+                                            }
                                         }
                                     }
                                 }
                             }
 
-                            if (isForWinRm) { break; }
+                            if (isForWinRm)
+                            {
+                                break;
+                            }
 
                             // Test PowerShell
-                            if (_exit) { break; }
+                            if (_exit)
+                            {
+                                break;
+                            }
 
                             if (psTestList.Count > 0)
                             {
@@ -1026,7 +1004,10 @@ protected override void ProcessRecord()
                         } while (false);
 
                         // if time is up or Ctrl+c is typed, break out
-                        if (_exit) { break; }
+                        if (_exit)
+                        {
+                            break;
+                        }
 
                         // Check if the restart completes
                         switch (_waitFor)
@@ -1070,18 +1051,38 @@ protected override void ProcessRecord()
                         // The timeout expires. Write out timeout error messages for the computers that haven't finished restarting
                         do
                         {
-                            if (restartStageTestList.Count > 0) { WriteOutTimeoutError(restartStageTestList); }
+                            if (restartStageTestList.Count > 0)
+                            {
+                                WriteOutTimeoutError(restartStageTestList);
+                            }
+
+                            if (wmiTestList.Count > 0)
+                            {
+                                WriteOutTimeoutError(wmiTestList);
+                            }
 
-                            if (wmiTestList.Count > 0) { WriteOutTimeoutError(wmiTestList); }
                             // Wait for WMI. All computers that finished restarting are put in "winrmTestList"
-                            if (isForWmi) { break; }
+                            if (isForWmi)
+                            {
+                                break;
+                            }
 
                             // Wait for WinRM. All computers that finished restarting are put in "psTestList"
-                            if (winrmTestList.Count > 0) { WriteOutTimeoutError(winrmTestList); }
+                            if (winrmTestList.Count > 0)
+                            {
+                                WriteOutTimeoutError(winrmTestList);
+                            }
 
-                            if (isForWinRm) { break; }
+                            if (isForWinRm)
+                            {
+                                break;
+                            }
+
+                            if (psTestList.Count > 0)
+                            {
+                                WriteOutTimeoutError(psTestList);
+                            }
 
-                            if (psTestList.Count > 0) { WriteOutTimeoutError(psTestList); }
                             // Wait for PowerShell. All computers that finished restarting are put in "allDoneList"
                         } while (false);
                     }
@@ -1098,10 +1099,7 @@ protected override void StopProcessing()
             _cancel.Cancel();
             _waitHandler.Set();
 
-            if (_timer != null)
-            {
-                _timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
-            }
+            _timer?.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
 
             if (_powershell != null)
             {
@@ -1231,7 +1229,10 @@ private void ProcessWSManProtocol(object[] flags)
                 string strLocal = string.Empty;
                 bool isLocalHost = false;
 
-                if (_cancel.Token.IsCancellationRequested) { break; }
+                if (_cancel.Token.IsCancellationRequested)
+                {
+                    break;
+                }
 
                 if ((computer.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (computer.Equals(".", StringComparison.OrdinalIgnoreCase)))
                 {
@@ -1278,6 +1279,7 @@ private void ProcessWSManProtocol(object[] flags)
     /// </summary>
     [Cmdlet(VerbsCommon.Rename, "Computer", SupportsShouldProcess = true,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097054", RemotingCapability = RemotingCapability.SupportedByCommand)]
+    [OutputType(typeof(RenameComputerChangeInfo))]
     public class RenameComputerCommand : PSCmdlet
     {
         #region Private Members
@@ -1585,7 +1587,10 @@ private void DoRenameComputerWsman(string computer, string computerName, string
         protected override void ProcessRecord()
         {
             string targetComputer = ValidateComputerName();
-            if (targetComputer == null) return;
+            if (targetComputer == null)
+            {
+                return;
+            }
 
             bool isLocalhost = targetComputer.Equals("localhost", StringComparison.OrdinalIgnoreCase);
             if (isLocalhost)
@@ -1605,7 +1610,10 @@ protected override void ProcessRecord()
         /// </summary>
         protected override void EndProcessing()
         {
-            if (!_containsLocalHost) return;
+            if (!_containsLocalHost)
+            {
+                return;
+            }
 
             DoRenameComputerAction("localhost", _newNameForLocalHost, true);
         }
@@ -2011,54 +2019,24 @@ internal static void WriteNonTerminatingError(int errorcode, PSCmdlet cmdlet, st
         /// <returns></returns>
         internal static bool IsComputerNameValid(string computerName)
         {
-            bool allDigits = true;
+            bool hasAsciiLetterOrHyphen = false;
 
             if (computerName.Length >= 64)
                 return false;
 
             foreach (char t in computerName)
             {
-                if (t >= 'A' && t <= 'Z' ||
-                    t >= 'a' && t <= 'z')
-                {
-                    allDigits = false;
-                    continue;
-                }
-                else if (t >= '0' && t <= '9')
-                {
-                    continue;
-                }
-                else if (t == '-')
+                if (char.IsAsciiLetter(t) || t is '-')
                 {
-                    allDigits = false;
-                    continue;
+                    hasAsciiLetterOrHyphen = true;
                 }
-                else
+                else if (!char.IsAsciiDigit(t))
                 {
                     return false;
                 }
             }
 
-            return !allDigits;
-        }
-
-        /// <summary>
-        /// System Restore APIs are not supported on the ARM platform. Skip the system restore operation is necessary.
-        /// </summary>
-        /// <param name="cmdlet"></param>
-        /// <returns></returns>
-        internal static bool SkipSystemRestoreOperationForARMPlatform(PSCmdlet cmdlet)
-        {
-            bool retValue = false;
-            if (PsUtils.IsRunningOnProcessorArchitectureARM())
-            {
-                var ex = new InvalidOperationException(ComputerResources.SystemRestoreNotSupported);
-                var er = new ErrorRecord(ex, "SystemRestoreNotSupported", ErrorCategory.InvalidOperation, null);
-                cmdlet.WriteError(er);
-                retValue = true;
-            }
-
-            return retValue;
+            return hasAsciiLetterOrHyphen;
         }
 
         /// <summary>
@@ -2230,8 +2208,7 @@ internal static string ValidateComputerName(
                 bool isIPAddress = false;
                 try
                 {
-                    IPAddress unused;
-                    isIPAddress = IPAddress.TryParse(nameToCheck, out unused);
+                    isIPAddress = IPAddress.TryParse(nameToCheck, out _);
                 }
                 catch (Exception)
                 {
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ComputerUnix.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ComputerUnix.cs
index fb01823790f..22092116330 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ComputerUnix.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ComputerUnix.cs
@@ -5,10 +5,13 @@
 
 using System;
 using System.Diagnostics;
+using System.IO;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Runtime.InteropServices;
 
+#nullable enable
+
 namespace Microsoft.PowerShell.Commands
 {
 #region Restart-Computer
@@ -36,13 +39,13 @@ protected override void BeginProcessing()
                 {
                     string errMsg = StringUtil.Format("Command returned 0x{0:X}", retVal);
                     ErrorRecord error = new ErrorRecord(
-                        new InvalidOperationException(errMsg), "Command Failed", ErrorCategory.OperationStopped, "localhost");
+                        new InvalidOperationException(errMsg), "CommandFailed", ErrorCategory.OperationStopped, "localhost");
                     WriteError(error);
                 }
                 return;
             }
 
-            RunCommand("/sbin/shutdown", "-r now");
+            RunShutdown("-r now");
         }
 #endregion "Overrides"
     }
@@ -67,7 +70,7 @@ public sealed class StopComputerCommand : CommandLineCmdletBase
         protected override void BeginProcessing()
         {
             var args = "-P now";
-            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+            if (Platform.IsMacOS)
             {
                 args = "now";
             }
@@ -78,13 +81,13 @@ protected override void BeginProcessing()
                 {
                     string errMsg = StringUtil.Format("Command returned 0x{0:X}", retVal);
                     ErrorRecord error = new ErrorRecord(
-                        new InvalidOperationException(errMsg), "Command Failed", ErrorCategory.OperationStopped, "localhost");
+                        new InvalidOperationException(errMsg), "CommandFailed", ErrorCategory.OperationStopped, "localhost");
                     WriteError(error);
                 }
                 return;
             }
 
-            RunCommand("/sbin/shutdown", args);
+            RunShutdown(args);
         }
 #endregion "Overrides"
     }
@@ -95,7 +98,7 @@ protected override void BeginProcessing()
     public class CommandLineCmdletBase : PSCmdlet, IDisposable
     {
 #region Private Members
-        private Process _process = null;
+        private Process? _process = null;
 #endregion
 
 #region "IDisposable Members"
@@ -150,22 +153,52 @@ protected override void StopProcessing()
 
 #region "Internals"
 
+        private static string? shutdownPath;
+
         /// <summary>
-        /// Run a command.
+        /// Run shutdown command.
         /// </summary>
-        protected void RunCommand(String command, String args) {
+        protected void RunShutdown(string args)
+        {
+            if (shutdownPath is null)
+            {
+                CommandInfo cmdinfo = CommandDiscovery.LookupCommandInfo(
+                    "shutdown", CommandTypes.Application,
+                    SearchResolutionOptions.None, CommandOrigin.Internal, this.Context);
+
+                if (cmdinfo is not null)
+                {
+                    shutdownPath = cmdinfo.Definition;
+                }
+                else
+                {
+                    ErrorRecord error = new ErrorRecord(
+                        new InvalidOperationException(ComputerResources.ShutdownCommandNotFound), "CommandNotFound", ErrorCategory.ObjectNotFound, targetObject: null);
+                    ThrowTerminatingError(error);
+                }
+            }
+
             _process = new Process()
             {
                 StartInfo = new ProcessStartInfo
                 {
-                    FileName = "/sbin/shutdown",
+                    FileName = shutdownPath,
                     Arguments = string.Empty,
                     RedirectStandardOutput = false,
+                    RedirectStandardError = true,
                     UseShellExecute = false,
                     CreateNoWindow = true,
                 }
             };
             _process.Start();
+            _process.WaitForExit();
+            if (_process.ExitCode != 0)
+            {
+                string stderr = _process.StandardError.ReadToEnd();
+                ErrorRecord error = new ErrorRecord(
+                    new InvalidOperationException(stderr), "CommandFailed", ErrorCategory.OperationStopped, null);
+                ThrowTerminatingError(error);
+            }
         }
 #endregion
     }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ContentCommandBase.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ContentCommandBase.cs
index 0c990292b58..e7b3ada4ebb 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ContentCommandBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ContentCommandBase.cs
@@ -244,7 +244,7 @@ internal void WriteContentObject(object content, long readCount, PathInfo pathIn
         /// as they get written to the pipeline. An instance of this cache class is
         /// only valid for a single path.
         /// </summary>
-        internal class ContentPathsCache
+        internal sealed class ContentPathsCache
         {
             /// <summary>
             /// Constructs a content cache item.
@@ -377,10 +377,7 @@ internal void CloseContent(List<ContentHolder> contentHolders, bool disposing)
             {
                 try
                 {
-                    if (holder.Writer != null)
-                    {
-                        holder.Writer.Close();
-                    }
+                    holder.Writer?.Close();
                 }
                 catch (Exception e) // Catch-all OK. 3rd party callout
                 {
@@ -414,10 +411,7 @@ internal void CloseContent(List<ContentHolder> contentHolders, bool disposing)
 
                 try
                 {
-                    if (holder.Reader != null)
-                    {
-                        holder.Reader.Close();
-                    }
+                    holder.Reader?.Close();
                 }
                 catch (Exception e) // Catch-all OK. 3rd party callout
                 {
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ControlPanelItemCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ControlPanelItemCommand.cs
deleted file mode 100644
index fffb36d2979..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ControlPanelItemCommand.cs
+++ /dev/null
@@ -1,762 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.Management.Automation;
-using System.Management.Automation.Internal;
-
-using Microsoft.Win32;
-
-using Dbg = System.Management.Automation.Diagnostics;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Represent a control panel item.
-    /// </summary>
-    public sealed class ControlPanelItem
-    {
-        /// <summary>
-        /// Control panel applet name.
-        /// </summary>
-        public string Name { get; }
-
-        /// <summary>
-        /// Control panel applet canonical name.
-        /// </summary>
-        public string CanonicalName { get; }
-
-        /// <summary>
-        /// Control panel applet category.
-        /// </summary>
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Category { get; }
-
-        /// <summary>
-        /// Control panel applet description.
-        /// </summary>
-        public string Description { get; }
-
-        /// <summary>
-        /// Control panel applet path.
-        /// </summary>
-        internal string Path { get; }
-
-        /// <summary>
-        /// Internal constructor for ControlPanelItem.
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="canonicalName"></param>
-        /// <param name="category"></param>
-        /// <param name="description"></param>
-        /// <param name="path"></param>
-        internal ControlPanelItem(string name, string canonicalName, string[] category, string description, string path)
-        {
-            Name = name;
-            Path = path;
-            CanonicalName = canonicalName;
-            Category = category;
-            Description = description;
-        }
-
-        /// <summary>
-        /// ToString method.
-        /// </summary>
-        /// <returns></returns>
-        public override string ToString()
-        {
-            return this.Name;
-        }
-    }
-
-    /// <summary>
-    /// This class implements the base for ControlPanelItem commands.
-    /// </summary>
-    public abstract class ControlPanelItemBaseCommand : PSCmdlet
-    {
-        /// <summary>
-        /// Locale specific verb action Open string exposed by the control panel item.
-        /// </summary>
-        private static string s_verbActionOpenName = null;
-
-        /// <summary>
-        /// Canonical name of the control panel item used as a reference to fetch the verb
-        /// action Open string. This control panel item exists on all SKU's.
-        /// </summary>
-        private const string RegionCanonicalName = "Microsoft.RegionAndLanguage";
-
-        private const string ControlPanelShellFolder = "shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}";
-        private static readonly string[] s_controlPanelItemFilterList = new string[] { "Folder Options", "Taskbar and Start Menu" };
-        private const string TestHeadlessServerScript = @"
-$result = $false
-$serverManagerModule = Get-Module -ListAvailable | Where-Object {$_.Name -eq 'ServerManager'}
-if ($serverManagerModule -ne $null)
-{
-    Import-Module ServerManager
-    $Gui = (Get-WindowsFeature Server-Gui-Shell).Installed
-    if ($Gui -eq $false)
-    {
-        $result = $true
-    }
-}
-$result
-";
-        internal readonly Dictionary<string, string> CategoryMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
-
-        internal string[] CategoryNames = { "*" };
-        internal string[] RegularNames = { "*" };
-        internal string[] CanonicalNames = { "*" };
-        internal ControlPanelItem[] ControlPanelItems = new ControlPanelItem[0];
-
-        /// <summary>
-        /// Get all executable control panel items.
-        /// </summary>
-        internal List<ShellFolderItem> AllControlPanelItems
-        {
-            get
-            {
-                if (_allControlPanelItems == null)
-                {
-                    _allControlPanelItems = new List<ShellFolderItem>();
-                    string allItemFolderPath = ControlPanelShellFolder + "\\0";
-                    IShellDispatch4 shell2 = (IShellDispatch4)new Shell();
-                    Folder2 allItemFolder = (Folder2)shell2.NameSpace(allItemFolderPath);
-                    FolderItems3 allItems = (FolderItems3)allItemFolder.Items();
-
-                    bool applyControlPanelItemFilterList = IsServerCoreOrHeadLessServer();
-
-                    foreach (ShellFolderItem item in allItems)
-                    {
-                        if (applyControlPanelItemFilterList)
-                        {
-                            bool match = false;
-                            foreach (string name in s_controlPanelItemFilterList)
-                            {
-                                if (name.Equals(item.Name, StringComparison.OrdinalIgnoreCase))
-                                {
-                                    match = true;
-                                    break;
-                                }
-                            }
-
-                            if (match)
-                                continue;
-                        }
-
-                        if (ContainVerbOpen(item))
-                            _allControlPanelItems.Add(item);
-                    }
-                }
-
-                return _allControlPanelItems;
-            }
-        }
-
-        private List<ShellFolderItem> _allControlPanelItems;
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Does the preprocessing for ControlPanelItem cmdlets.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            System.OperatingSystem osInfo = System.Environment.OSVersion;
-            PlatformID platform = osInfo.Platform;
-            Version version = osInfo.Version;
-
-            if (platform.Equals(PlatformID.Win32NT) &&
-                ((version.Major < 6) ||
-                 ((version.Major == 6) && (version.Minor < 2))
-                ))
-            {
-                // Below Win8, this cmdlet is not supported because of Win8:794135
-                // throw terminating
-                string message = string.Format(CultureInfo.InvariantCulture,
-                                               ControlPanelResources.ControlPanelItemCmdletNotSupported,
-                                               this.CommandInfo.Name);
-                throw new PSNotSupportedException(message);
-            }
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Test if an item can be invoked.
-        /// </summary>
-        /// <param name="item"></param>
-        /// <returns></returns>
-        private bool ContainVerbOpen(ShellFolderItem item)
-        {
-            bool result = false;
-            FolderItemVerbs verbs = item.Verbs();
-            foreach (FolderItemVerb verb in verbs)
-            {
-                if (!string.IsNullOrEmpty(verb.Name) &&
-                    (verb.Name.Equals(ControlPanelResources.VerbActionOpen, StringComparison.OrdinalIgnoreCase) ||
-                     CompareVerbActionOpen(verb.Name)))
-                {
-                    result = true;
-                    break;
-                }
-            }
-
-            return result;
-        }
-
-        /// <summary>
-        /// CompareVerbActionOpen is a helper function used to perform locale specific
-        /// comparison of the verb action Open exposed by various control panel items.
-        /// </summary>
-        /// <param name="verbActionName">Locale specific verb action exposed by the control panel item.</param>
-        /// <returns>True if the control panel item supports verb action open or else returns false.</returns>
-        private static bool CompareVerbActionOpen(string verbActionName)
-        {
-            if (s_verbActionOpenName == null)
-            {
-                const string allItemFolderPath = ControlPanelShellFolder + "\\0";
-                IShellDispatch4 shell2 = (IShellDispatch4)new Shell();
-                Folder2 allItemFolder = (Folder2)shell2.NameSpace(allItemFolderPath);
-                FolderItems3 allItems = (FolderItems3)allItemFolder.Items();
-
-                foreach (ShellFolderItem item in allItems)
-                {
-                    string canonicalName = (string)item.ExtendedProperty("System.ApplicationName");
-                    canonicalName = !string.IsNullOrEmpty(canonicalName)
-                                        ? canonicalName.Substring(0, canonicalName.IndexOf('\0'))
-                                        : null;
-
-                    if (canonicalName != null && canonicalName.Equals(RegionCanonicalName, StringComparison.OrdinalIgnoreCase))
-                    {
-                        // The 'Region' control panel item always has '&Open' (english or other locale) as the first verb name
-                        s_verbActionOpenName = item.Verbs().Item(0).Name;
-                        break;
-                    }
-                }
-
-                Dbg.Assert(s_verbActionOpenName != null, "The 'Region' control panel item is available on all SKUs and it always "
-                                                       + "has '&Open' as the first verb item, so VerbActionOpenName should never be null at this point");
-            }
-
-            return s_verbActionOpenName.Equals(verbActionName, StringComparison.OrdinalIgnoreCase);
-        }
-
-        /// <summary>
-        /// IsServerCoreORHeadLessServer is a helper function that checks if the current SKU is a
-        /// Server Core machine or if the Server-GUI-Shell feature is removed on the machine.
-        /// </summary>
-        /// <returns>True if the current SKU is a Server Core machine or if the Server-GUI-Shell
-        /// feature is removed on the machine or else returns false.</returns>
-        private bool IsServerCoreOrHeadLessServer()
-        {
-            bool result = false;
-
-            using (RegistryKey installation = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"))
-            {
-                Dbg.Assert(installation != null, "the CurrentVersion subkey should exist");
-
-                string installationType = (string)installation.GetValue("InstallationType", string.Empty);
-
-                if (installationType.Equals("Server Core"))
-                {
-                    result = true;
-                }
-                else if (installationType.Equals("Server"))
-                {
-                    using (System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create())
-                    {
-                        ps.AddScript(TestHeadlessServerScript);
-                        Collection<PSObject> psObjectCollection = ps.Invoke(Array.Empty<object>());
-                        Dbg.Assert(psObjectCollection != null && psObjectCollection.Count == 1, "invoke should never return null, there should be only one return item");
-                        if (LanguagePrimitives.IsTrue(PSObject.Base(psObjectCollection[0])))
-                        {
-                            result = true;
-                        }
-                    }
-                }
-            }
-
-            return result;
-        }
-
-        /// <summary>
-        /// Get the category number and name map.
-        /// </summary>
-        internal void GetCategoryMap()
-        {
-            if (CategoryMap.Count != 0)
-            {
-                return;
-            }
-
-            IShellDispatch4 shell2 = (IShellDispatch4)new Shell();
-            Folder2 categoryFolder = (Folder2)shell2.NameSpace(ControlPanelShellFolder);
-            FolderItems3 catItems = (FolderItems3)categoryFolder.Items();
-
-            foreach (ShellFolderItem category in catItems)
-            {
-                string path = category.Path;
-                string catNum = path.Substring(path.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) + 1);
-
-                CategoryMap.Add(catNum, category.Name);
-            }
-        }
-
-        /// <summary>
-        /// Get control panel item by the category.
-        /// </summary>
-        /// <param name="controlPanelItems"></param>
-        /// <returns></returns>
-        internal List<ShellFolderItem> GetControlPanelItemByCategory(List<ShellFolderItem> controlPanelItems)
-        {
-            List<ShellFolderItem> list = new List<ShellFolderItem>();
-            HashSet<string> itemSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-            foreach (string pattern in CategoryNames)
-            {
-                bool found = false;
-                WildcardPattern wildcard = WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase);
-                foreach (ShellFolderItem item in controlPanelItems)
-                {
-                    string path = item.Path;
-                    int[] categories = (int[])item.ExtendedProperty("System.ControlPanel.Category");
-                    foreach (int cat in categories)
-                    {
-                        string catStr = (string)LanguagePrimitives.ConvertTo(cat, typeof(string), CultureInfo.InvariantCulture);
-                        Dbg.Assert(CategoryMap.ContainsKey(catStr), "the category should be contained in _categoryMap");
-                        string catName = CategoryMap[catStr];
-
-                        if (!wildcard.IsMatch(catName))
-                            continue;
-                        if (itemSet.Contains(path))
-                        {
-                            found = true;
-                            break;
-                        }
-
-                        found = true;
-                        itemSet.Add(path);
-                        list.Add(item);
-                        break;
-                    }
-                }
-
-                if (!found && !WildcardPattern.ContainsWildcardCharacters(pattern))
-                {
-                    string errMsg = StringUtil.Format(ControlPanelResources.NoControlPanelItemFoundForGivenCategory, pattern);
-                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg),
-                                                        "NoControlPanelItemFoundForGivenCategory",
-                                                        ErrorCategory.InvalidArgument, pattern);
-                    WriteError(error);
-                }
-            }
-
-            return list;
-        }
-
-        /// <summary>
-        /// Get control panel item by the regular name.
-        /// </summary>
-        /// <param name="controlPanelItems"></param>
-        /// <param name="withCategoryFilter"></param>
-        /// <returns></returns>
-        internal List<ShellFolderItem> GetControlPanelItemByName(List<ShellFolderItem> controlPanelItems, bool withCategoryFilter)
-        {
-            List<ShellFolderItem> list = new List<ShellFolderItem>();
-            HashSet<string> itemSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-            foreach (string pattern in RegularNames)
-            {
-                bool found = false;
-                WildcardPattern wildcard = WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase);
-                foreach (ShellFolderItem item in controlPanelItems)
-                {
-                    string name = item.Name;
-                    string path = item.Path;
-                    if (!wildcard.IsMatch(name))
-                        continue;
-                    if (itemSet.Contains(path))
-                    {
-                        found = true;
-                        continue;
-                    }
-
-                    found = true;
-                    itemSet.Add(path);
-                    list.Add(item);
-                }
-
-                if (!found && !WildcardPattern.ContainsWildcardCharacters(pattern))
-                {
-                    string formatString = withCategoryFilter
-                                              ? ControlPanelResources.NoControlPanelItemFoundForGivenNameWithCategory
-                                              : ControlPanelResources.NoControlPanelItemFoundForGivenName;
-                    string errMsg = StringUtil.Format(formatString, pattern);
-                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg),
-                                                        "NoControlPanelItemFoundForGivenName",
-                                                        ErrorCategory.InvalidArgument, pattern);
-                    WriteError(error);
-                }
-            }
-
-            return list;
-        }
-
-        /// <summary>
-        /// Get control panel item by the canonical name.
-        /// </summary>
-        /// <param name="controlPanelItems"></param>
-        /// <param name="withCategoryFilter"></param>
-        /// <returns></returns>
-        internal List<ShellFolderItem> GetControlPanelItemByCanonicalName(List<ShellFolderItem> controlPanelItems, bool withCategoryFilter)
-        {
-            List<ShellFolderItem> list = new List<ShellFolderItem>();
-            HashSet<string> itemSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-            if (CanonicalNames == null)
-            {
-                bool found = false;
-                foreach (ShellFolderItem item in controlPanelItems)
-                {
-                    string canonicalName = (string)item.ExtendedProperty("System.ApplicationName");
-                    if (canonicalName == null)
-                    {
-                        found = true;
-                        list.Add(item);
-                    }
-                }
-
-                if (!found)
-                {
-                    string errMsg = withCategoryFilter
-                                        ? ControlPanelResources.NoControlPanelItemFoundWithNullCanonicalNameWithCategory
-                                        : ControlPanelResources.NoControlPanelItemFoundWithNullCanonicalName;
-                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg), string.Empty,
-                                                        ErrorCategory.InvalidArgument, CanonicalNames);
-                    WriteError(error);
-                }
-
-                return list;
-            }
-
-            foreach (string pattern in CanonicalNames)
-            {
-                bool found = false;
-                WildcardPattern wildcard = WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase);
-                foreach (ShellFolderItem item in controlPanelItems)
-                {
-                    string path = item.Path;
-                    string canonicalName = (string)item.ExtendedProperty("System.ApplicationName");
-                    canonicalName = canonicalName != null
-                                        ? canonicalName.Substring(0, canonicalName.IndexOf('\0'))
-                                        : null;
-
-                    if (canonicalName == null)
-                    {
-                        if (pattern.Equals("*", StringComparison.OrdinalIgnoreCase))
-                        {
-                            found = true;
-                            if (!itemSet.Contains(path))
-                            {
-                                itemSet.Add(path);
-                                list.Add(item);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        if (!wildcard.IsMatch(canonicalName))
-                            continue;
-                        if (itemSet.Contains(path))
-                        {
-                            found = true;
-                            continue;
-                        }
-
-                        found = true;
-                        itemSet.Add(path);
-                        list.Add(item);
-                    }
-                }
-
-                if (!found && !WildcardPattern.ContainsWildcardCharacters(pattern))
-                {
-                    string formatString = withCategoryFilter
-                                              ? ControlPanelResources.NoControlPanelItemFoundForGivenCanonicalNameWithCategory
-                                              : ControlPanelResources.NoControlPanelItemFoundForGivenCanonicalName;
-                    string errMsg = StringUtil.Format(formatString, pattern);
-                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg),
-                                                        "NoControlPanelItemFoundForGivenCanonicalName",
-                                                        ErrorCategory.InvalidArgument, pattern);
-                    WriteError(error);
-                }
-            }
-
-            return list;
-        }
-
-        /// <summary>
-        /// Get control panel item by the ControlPanelItem instances.
-        /// </summary>
-        /// <param name="controlPanelItems"></param>
-        /// <returns></returns>
-        internal List<ShellFolderItem> GetControlPanelItemsByInstance(List<ShellFolderItem> controlPanelItems)
-        {
-            List<ShellFolderItem> list = new List<ShellFolderItem>();
-            HashSet<string> itemSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-            foreach (ControlPanelItem controlPanelItem in ControlPanelItems)
-            {
-                bool found = false;
-
-                foreach (ShellFolderItem item in controlPanelItems)
-                {
-                    string path = item.Path;
-                    if (!controlPanelItem.Path.Equals(path, StringComparison.OrdinalIgnoreCase))
-                        continue;
-                    if (itemSet.Contains(path))
-                    {
-                        found = true;
-                        break;
-                    }
-
-                    found = true;
-                    itemSet.Add(path);
-                    list.Add(item);
-                    break;
-                }
-
-                if (!found)
-                {
-                    string errMsg = StringUtil.Format(ControlPanelResources.NoControlPanelItemFoundForGivenInstance,
-                                                      controlPanelItem.GetType().Name);
-                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg),
-                                                        "NoControlPanelItemFoundForGivenInstance",
-                                                        ErrorCategory.InvalidArgument, controlPanelItem);
-                    WriteError(error);
-                }
-            }
-
-            return list;
-        }
-    }
-
-    /// <summary>
-    /// Get all control panel items that is available in the "All Control Panel Items" category.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "ControlPanelItem", DefaultParameterSetName = RegularNameParameterSet, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=219982")]
-    [OutputType(typeof(ControlPanelItem))]
-    public sealed class GetControlPanelItemCommand : ControlPanelItemBaseCommand
-    {
-        private const string RegularNameParameterSet = "RegularName";
-        private const string CanonicalNameParameterSet = "CanonicalName";
-
-        #region "Parameters"
-
-        /// <summary>
-        /// Control panel item names.
-        /// </summary>
-        [Parameter(Position = 0, ParameterSetName = RegularNameParameterSet, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return RegularNames; }
-
-            set
-            {
-                RegularNames = value;
-                _nameSpecified = true;
-            }
-        }
-
-        private bool _nameSpecified = false;
-
-        /// <summary>
-        /// Canonical names of control panel items.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = CanonicalNameParameterSet)]
-        [AllowNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] CanonicalName
-        {
-            get { return CanonicalNames; }
-
-            set
-            {
-                CanonicalNames = value;
-                _canonicalNameSpecified = true;
-            }
-        }
-
-        private bool _canonicalNameSpecified = false;
-
-        /// <summary>
-        /// Category of control panel items.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Category
-        {
-            get { return CategoryNames; }
-
-            set
-            {
-                CategoryNames = value;
-                _categorySpecified = true;
-            }
-        }
-
-        private bool _categorySpecified = false;
-
-        #endregion "Parameters"
-
-        /// <summary>
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            GetCategoryMap();
-            List<ShellFolderItem> items = GetControlPanelItemByCategory(AllControlPanelItems);
-
-            if (_nameSpecified)
-            {
-                items = GetControlPanelItemByName(items, _categorySpecified);
-            }
-            else if (_canonicalNameSpecified)
-            {
-                items = GetControlPanelItemByCanonicalName(items, _categorySpecified);
-            }
-
-            List<ControlPanelItem> results = new List<ControlPanelItem>();
-            foreach (ShellFolderItem item in items)
-            {
-                string name = item.Name;
-                string path = item.Path;
-                string description = (string)item.ExtendedProperty("InfoTip");
-                string canonicalName = (string)item.ExtendedProperty("System.ApplicationName");
-                canonicalName = canonicalName != null
-                                        ? canonicalName.Substring(0, canonicalName.IndexOf('\0'))
-                                        : null;
-                int[] categories = (int[])item.ExtendedProperty("System.ControlPanel.Category");
-                string[] cateStrings = new string[categories.Length];
-                for (int i = 0; i < categories.Length; i++)
-                {
-                    string catStr = (string)LanguagePrimitives.ConvertTo(categories[i], typeof(string), CultureInfo.InvariantCulture);
-                    Dbg.Assert(CategoryMap.ContainsKey(catStr), "the category should be contained in CategoryMap");
-                    cateStrings[i] = CategoryMap[catStr];
-                }
-
-                ControlPanelItem controlPanelItem = new ControlPanelItem(name, canonicalName, cateStrings, description, path);
-                results.Add(controlPanelItem);
-            }
-
-            // Sort the results by Canonical Name
-            results.Sort(CompareControlPanelItems);
-            foreach (ControlPanelItem controlPanelItem in results)
-            {
-                WriteObject(controlPanelItem);
-            }
-        }
-
-        #region "Private Methods"
-
-        private static int CompareControlPanelItems(ControlPanelItem x, ControlPanelItem y)
-        {
-            // In the case that at least one of them is null
-            if (x.CanonicalName == null && y.CanonicalName == null)
-                return 0;
-            if (x.CanonicalName == null)
-                return 1;
-            if (y.CanonicalName == null)
-                return -1;
-
-            // In the case that both are not null
-            return string.Compare(x.CanonicalName, y.CanonicalName, StringComparison.OrdinalIgnoreCase);
-        }
-
-        #endregion "Private Methods"
-    }
-
-    /// <summary>
-    /// Show the specified control panel applet.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Show, "ControlPanelItem", DefaultParameterSetName = RegularNameParameterSet, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=219983")]
-    public sealed class ShowControlPanelItemCommand : ControlPanelItemBaseCommand
-    {
-        private const string RegularNameParameterSet = "RegularName";
-        private const string CanonicalNameParameterSet = "CanonicalName";
-        private const string ControlPanelItemParameterSet = "ControlPanelItem";
-
-        #region "Parameters"
-
-        /// <summary>
-        /// Control panel item names.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = RegularNameParameterSet, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return RegularNames; }
-
-            set { RegularNames = value; }
-        }
-
-        /// <summary>
-        /// Canonical names of control panel items.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = CanonicalNameParameterSet)]
-        [AllowNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] CanonicalName
-        {
-            get { return CanonicalNames; }
-
-            set { CanonicalNames = value; }
-        }
-
-        /// <summary>
-        /// Control panel items returned by Get-ControlPanelItem.
-        /// </summary>
-        [Parameter(Position = 0, ParameterSetName = ControlPanelItemParameterSet, ValueFromPipeline = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ControlPanelItem[] InputObject
-        {
-            get { return ControlPanelItems; }
-
-            set { ControlPanelItems = value; }
-        }
-
-        #endregion "Parameters"
-
-        /// <summary>
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            List<ShellFolderItem> items;
-            if (ParameterSetName == RegularNameParameterSet)
-            {
-                items = GetControlPanelItemByName(AllControlPanelItems, false);
-            }
-            else if (ParameterSetName == CanonicalNameParameterSet)
-            {
-                items = GetControlPanelItemByCanonicalName(AllControlPanelItems, false);
-            }
-            else
-            {
-                items = GetControlPanelItemsByInstance(AllControlPanelItems);
-            }
-
-            foreach (ShellFolderItem item in items)
-            {
-                item.InvokeVerb();
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ConvertPathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ConvertPathCommand.cs
index c32d0f2aa67..33796b23378 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ConvertPathCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ConvertPathCommand.cs
@@ -55,6 +55,16 @@ public string[] LiteralPath
             }
         }
 
+        /// <summary>
+        /// Gets or sets the force property.
+        /// </summary>
+        [Parameter]
+        public override SwitchParameter Force
+        {
+            get => base.Force;
+            set => base.Force = value;
+        }
+
         #endregion Parameters
 
         #region parameter data
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Eventlog.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Eventlog.cs
deleted file mode 100644
index 45c484744fa..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Eventlog.cs
+++ /dev/null
@@ -1,1452 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel; // Win32Exception
-using System.Diagnostics; // Eventlog class
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Internal;
-
-namespace Microsoft.PowerShell.Commands
-{
-    #region GetEventLogCommand
-    /// <summary>
-    /// This class implements the Get-EventLog command.
-    /// </summary>
-    /// <remarks>
-    /// The CLR EventLogEntryCollection class has problems with managing
-    /// rapidly spinning logs (i.e. logs set to "Overwrite" which are
-    /// rapidly getting new events and discarding old events).
-    /// In particular, if you enumerate forward
-    ///     EventLogEntryCollection entries = log.Entries;
-    ///     foreach (EventLogEntry entry in entries)
-    /// it will occasionally skip an entry.  Conversely, if you are
-    /// enumerating backward
-    ///     EventLogEntryCollection entries = log.Entries;
-    ///     int count = entries.Count;
-    ///     for (int i = count-1; i >= 0; i--) {
-    ///         EventLogEntry entry = entries[i];
-    /// it will occasionally repeat an entry.  Accordingly, we enumerate
-    /// backward and try to leave off the repeated entries.
-    /// </remarks>
-    [Cmdlet(VerbsCommon.Get, "EventLog", DefaultParameterSetName = "LogName",
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=113314", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    [OutputType(typeof(EventLog), typeof(EventLogEntry), typeof(string))]
-    public sealed class GetEventLogCommand : PSCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// Read eventlog entries from this log.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "LogName")]
-        [Alias("LN")]
-        public string LogName { get; set; }
-
-        /// <summary>
-        /// Read eventlog entries from this computer.
-        /// </summary>
-        [Parameter()]
-        [ValidateNotNullOrEmpty()]
-        [Alias("Cn")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] ComputerName { get; set; } = Array.Empty<string>();
-
-        /// <summary>
-        /// Read only this number of entries.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateRange(0, Int32.MaxValue)]
-        public int Newest { get; set; } = Int32.MaxValue;
-
-        /// <summary>
-        /// Return entries "after " this date.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty]
-        public DateTime After
-        {
-            get { return _after; }
-
-            set
-            {
-                _after = value;
-                _isDateSpecified = true;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private DateTime _after;
-
-        /// <summary>
-        /// Return entries "Before" this date.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty]
-        public DateTime Before
-        {
-            get { return _before; }
-
-            set
-            {
-                _before = value;
-                _isDateSpecified = true;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private DateTime _before;
-
-        /// <summary>
-        /// Return entries for this user.Wild characters is supported.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] UserName
-        {
-            get { return _username; }
-
-            set
-            {
-                _username = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private string[] _username;
-
-        /// <summary>
-        /// Match eventlog entries by the InstanceIds
-        /// gets or sets an array of instanceIds.
-        /// </summary>
-        [Parameter(Position = 1, ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty()]
-        [ValidateRangeAttribute((long)0, long.MaxValue)]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public long[] InstanceId
-        {
-            get { return _instanceIds; }
-
-            set
-            {
-                _instanceIds = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private long[] _instanceIds = null;
-
-        /// <summary>
-        /// Match eventlog entries by the Index
-        /// gets or sets an array of indexes.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty()]
-        [ValidateRangeAttribute((int)1, int.MaxValue)]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public int[] Index
-        {
-            get { return _indexes; }
-
-            set
-            {
-                _indexes = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private int[] _indexes = null;
-
-        /// <summary>
-        /// Match eventlog entries by the EntryType
-        /// gets or sets an array of EntryTypes.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty()]
-        [ValidateSetAttribute(new string[] { "Error", "Information", "FailureAudit", "SuccessAudit", "Warning" })]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        [Alias("ET")]
-        public string[] EntryType
-        {
-            get { return _entryTypes; }
-
-            set
-            {
-                _entryTypes = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private string[] _entryTypes = null;
-
-        /// <summary>
-        /// Get or sets an array of Source.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty()]
-        [Alias("ABO")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Source
-        {
-            get
-            { return _sources; }
-
-            set
-            {
-                _sources = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private string[] _sources;
-
-        /// <summary>
-        /// Get or Set Message string to searched in EventLog.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        [ValidateNotNullOrEmpty()]
-        [Alias("MSG")]
-        public string Message
-        {
-            get
-            {
-                return _message;
-            }
-
-            set
-            {
-                _message = value;
-                _isFilterSpecified = true;
-            }
-        }
-
-        private string _message;
-
-        /// <summary>
-        /// Returns Log Entry as base object.
-        /// </summary>
-        [Parameter(ParameterSetName = "LogName")]
-        public SwitchParameter AsBaseObject { get; set; }
-
-        /// <summary>
-        /// Return the Eventlog objects rather than the log contents.
-        /// </summary>
-        [Parameter(ParameterSetName = "List")]
-        public SwitchParameter List { get; set; }
-
-        /// <summary>
-        /// Return the log names rather than the EventLog objects.
-        /// </summary>
-        [Parameter(ParameterSetName = "List")]
-        public SwitchParameter AsString
-        {
-            get
-            {
-                return _asString;
-            }
-
-            set
-            {
-                _asString = value;
-            }
-        }
-
-        private bool _asString /* = false */;
-        #endregion Parameters
-
-        #region Overrides
-
-        /// <summary>
-        /// Sets true when Filter is Specified.
-        /// </summary>
-        private bool _isFilterSpecified = false;
-        private bool _isDateSpecified = false;
-        private bool _isThrowError = true;
-
-        /// <summary>
-        /// Process the specified logs.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            if (ParameterSetName == "List")
-            {
-                if (ComputerName.Length > 0)
-                {
-                    foreach (string computerName in ComputerName)
-                    {
-                        foreach (EventLog log in EventLog.GetEventLogs(computerName))
-                        {
-                            if (AsString)
-                                WriteObject(log.Log);
-                            else
-                                WriteObject(log);
-                        }
-                    }
-                }
-                else
-                {
-                    foreach (EventLog log in EventLog.GetEventLogs())
-                    {
-                        if (AsString)
-                            WriteObject(log.Log);
-                        else
-                            WriteObject(log);
-                    }
-                }
-            }
-            else
-            {
-                Diagnostics.Assert(ParameterSetName == "LogName", "Unexpected parameter set");
-
-                if (!WildcardPattern.ContainsWildcardCharacters(LogName))
-                {
-                    OutputEvents(LogName);
-                }
-                else
-                {
-                    //
-                    // If we were given a wildcard that matches more than one log, output the matching logs. Otherwise output the events in the matching log.
-                    //
-                    List<EventLog> matchingLogs = GetMatchingLogs(LogName);
-
-                    if (matchingLogs.Count == 1)
-                    {
-                        OutputEvents(matchingLogs[0].Log);
-                    }
-                    else
-                    {
-                        foreach (EventLog log in matchingLogs)
-                        {
-                            WriteObject(log);
-                        }
-                    }
-                }
-            }
-        }
-        #endregion Overrides
-
-        #region Private
-
-        private void OutputEvents(string logName)
-        {
-            // 2005/04/21-JonN This somewhat odd structure works
-            // around the FXCOP DisposeObjectsBeforeLosingScope rule.
-            bool processing = false;
-            try
-            {
-                if (ComputerName.Length == 0)
-                {
-                    using (EventLog specificLog = new EventLog(logName))
-                    {
-                        processing = true;
-                        Process(specificLog);
-                    }
-                }
-                else
-                {
-                    processing = true;
-
-                    foreach (string computerName in ComputerName)
-                    {
-                        using (EventLog specificLog = new EventLog(logName, computerName))
-                        {
-                            Process(specificLog);
-                        }
-                    }
-                }
-            }
-            catch (InvalidOperationException e)
-            {
-                if (processing) throw;
-                ThrowTerminatingError(new ErrorRecord(
-                    e, // default exception text is OK
-                    "EventLogNotFound",
-                    ErrorCategory.ObjectNotFound,
-                    logName));
-            }
-        }
-
-        private void Process(EventLog log)
-        {
-            bool matchesfound = false;
-            if (Newest == 0)
-            {
-                return;
-            }
-
-            // enumerate backward, skipping repeat entries
-            EventLogEntryCollection entries = log.Entries;
-
-            int count = entries.Count;
-            int lastindex = Int32.MinValue;
-            int processed = 0;
-
-            for (int i = count - 1; (i >= 0) && (processed < Newest); i--)
-            {
-                EventLogEntry entry = null;
-                try
-                {
-                    entry = entries[i];
-                }
-                catch (ArgumentException e)
-                {
-                    ErrorRecord er = new ErrorRecord(
-                        e,
-                        "LogReadError",
-                        ErrorCategory.ReadError,
-                        null
-                        );
-                    er.ErrorDetails = new ErrorDetails(
-                        this,
-                        "EventlogResources",
-                        "LogReadError",
-                        log.Log,
-                        e.Message
-                        );
-                    WriteError(er);
-
-                    // NTRAID#Windows Out Of Band Releases-2005/09/27-JonN
-                    // Break after the first one, rather than repeating this
-                    // over and over
-                    break;
-                }
-                catch (Exception e)
-                {
-                    Diagnostics.Assert(false,
-                        "EventLogEntryCollection error "
-                       + e.GetType().FullName
-                        + ": " + e.Message);
-                    throw;
-                }
-
-                if ((entry != null) &&
-                ((lastindex == Int32.MinValue
-                  || lastindex - entry.Index == 1)))
-                {
-                    lastindex = entry.Index;
-                    if (_isFilterSpecified)
-                    {
-                        if (!FiltersMatch(entry))
-                            continue;
-                    }
-
-                    if (!AsBaseObject)
-                    {
-                        // wrapping in PSobject to insert into PStypesnames
-                        PSObject logentry = new PSObject(entry);
-                        // inserting at zero position in reverse order
-                        logentry.TypeNames.Insert(0, logentry.ImmediateBaseObject + "#" + log.Log + "/" + entry.Source);
-                        logentry.TypeNames.Insert(0, logentry.ImmediateBaseObject + "#" + log.Log + "/" + entry.Source + "/" + entry.InstanceId);
-                        WriteObject(logentry);
-                        matchesfound = true;
-                    }
-                    else
-                    {
-                        WriteObject(entry);
-                        matchesfound = true;
-                    }
-
-                    processed++;
-                }
-            }
-
-            if (!matchesfound && _isThrowError)
-            {
-                Exception Ex = new ArgumentException(StringUtil.Format(EventlogResources.NoEntriesFound, log.Log, string.Empty));
-                WriteError(new ErrorRecord(Ex, "GetEventLogNoEntriesFound", ErrorCategory.ObjectNotFound, null));
-            }
-        }
-
-        private bool FiltersMatch(EventLogEntry entry)
-        {
-            if (_indexes != null)
-            {
-                if (!((IList)_indexes).Contains(entry.Index))
-                {
-                    return false;
-                }
-            }
-
-            if (_instanceIds != null)
-            {
-                if (!((IList)_instanceIds).Contains(entry.InstanceId))
-                {
-                    return false;
-                }
-            }
-
-            if (_entryTypes != null)
-            {
-                bool entrymatch = false;
-                foreach (string type in _entryTypes)
-                {
-                    if (type.Equals(entry.EntryType.ToString(), StringComparison.OrdinalIgnoreCase))
-                    {
-                        entrymatch = true;
-                        break;
-                    }
-                }
-
-                if (!entrymatch) return entrymatch;
-            }
-
-            if (_sources != null)
-            {
-                bool sourcematch = false;
-                foreach (string source in _sources)
-                {
-                    if (WildcardPattern.ContainsWildcardCharacters(source))
-                    {
-                        _isThrowError = false;
-                    }
-
-                    WildcardPattern wildcardpattern = WildcardPattern.Get(source, WildcardOptions.IgnoreCase);
-                    if (wildcardpattern.IsMatch(entry.Source))
-                    {
-                        sourcematch = true;
-                        break;
-                    }
-                }
-
-                if (!sourcematch) return sourcematch;
-            }
-
-            if (_message != null)
-            {
-                if (WildcardPattern.ContainsWildcardCharacters(_message))
-                {
-                    _isThrowError = false;
-                }
-
-                WildcardPattern wildcardpattern = WildcardPattern.Get(_message, WildcardOptions.IgnoreCase);
-                if (!wildcardpattern.IsMatch(entry.Message))
-                {
-                    return false;
-                }
-            }
-
-            if (_username != null)
-            {
-                bool usernamematch = false;
-                foreach (string user in _username)
-                {
-                    _isThrowError = false;
-                    if (entry.UserName != null)
-                    {
-                        WildcardPattern wildcardpattern = WildcardPattern.Get(user, WildcardOptions.IgnoreCase);
-                        if (wildcardpattern.IsMatch(entry.UserName))
-                        {
-                            usernamematch = true;
-                            break;
-                        }
-                    }
-                }
-
-                if (!usernamematch) return usernamematch;
-            }
-
-            if (_isDateSpecified)
-            {
-                _isThrowError = false;
-                bool datematch = false;
-                if (!_after.Equals(_initial) && _before.Equals(_initial))
-                {
-                    if (entry.TimeGenerated > _after)
-                    {
-                        datematch = true;
-                    }
-                }
-                else if (!_before.Equals(_initial) && _after.Equals(_initial))
-                {
-                    if (entry.TimeGenerated < _before)
-                    {
-                        datematch = true;
-                    }
-                }
-                else if (!_after.Equals(_initial) && !_before.Equals(_initial))
-                {
-                    if (_after > _before || _after == _before)
-                    {
-                        if ((entry.TimeGenerated > _after) || (entry.TimeGenerated < _before))
-                            datematch = true;
-                    }
-                    else
-                    {
-                        if ((entry.TimeGenerated > _after) && (entry.TimeGenerated < _before))
-                        {
-                            datematch = true;
-                        }
-                    }
-                }
-
-                if (!datematch) return datematch;
-            }
-
-            return true;
-        }
-
-        private List<EventLog> GetMatchingLogs(string pattern)
-        {
-            WildcardPattern wildcardPattern = WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase);
-            List<EventLog> matchingLogs = new List<EventLog>();
-            if (ComputerName.Length == 0)
-            {
-                foreach (EventLog log in EventLog.GetEventLogs())
-                {
-                    if (wildcardPattern.IsMatch(log.Log))
-                    {
-                        matchingLogs.Add(log);
-                    }
-                }
-            }
-            else
-            {
-                foreach (string computerName in ComputerName)
-                {
-                    foreach (EventLog log in EventLog.GetEventLogs(computerName))
-                    {
-                        if (wildcardPattern.IsMatch(log.Log))
-                        {
-                            matchingLogs.Add(log);
-                        }
-                    }
-                }
-            }
-
-            return matchingLogs;
-        }
-        // private string ErrorBase = "EventlogResources";
-        private DateTime _initial = new DateTime();
-
-        #endregion Private
-    }
-    #endregion GetEventLogCommand
-
-    #region ClearEventLogCommand
-    /// <summary>
-    /// This class implements the Clear-EventLog command.
-    /// </summary>
-
-    [Cmdlet(VerbsCommon.Clear, "EventLog", SupportsShouldProcess = true,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135198", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public sealed class ClearEventLogCommand : PSCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// Clear these logs.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true)]
-        [Alias("LN")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] LogName { get; set; }
-
-        /// <summary>
-        /// Clear eventlog entries from these Computers.
-        /// </summary>
-        [Parameter(Position = 1, ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        [Alias("Cn")]
-        public string[] ComputerName { get; set; } = { "." };
-
-        #endregion Parameters
-
-        #region Overrides
-
-        /// <summary>
-        /// Does the processing.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            string computer = string.Empty;
-            foreach (string compName in ComputerName)
-            {
-                if ((compName.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (compName.Equals(".", StringComparison.OrdinalIgnoreCase)))
-                {
-                    computer = "localhost";
-                }
-                else
-                {
-                    computer = compName;
-                }
-
-                foreach (string eventString in LogName)
-                {
-                    try
-                    {
-                        if (!EventLog.Exists(eventString, compName))
-                        {
-                            ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.LogDoesNotExist, eventString, computer)), null, ErrorCategory.InvalidOperation, null);
-                            WriteError(er);
-                            continue;
-                        }
-
-                        if (!ShouldProcess(StringUtil.Format(EventlogResources.ClearEventLogWarning, eventString, computer)))
-                        {
-                            continue;
-                        }
-
-                        EventLog Log = new EventLog(eventString, compName);
-                        Log.Clear();
-                    }
-                    catch (System.IO.IOException)
-                    {
-                        ErrorRecord er = new ErrorRecord(new System.IO.IOException(StringUtil.Format(EventlogResources.PathDoesNotExist, null, computer)), null, ErrorCategory.InvalidOperation, null);
-                        WriteError(er);
-                        continue;
-                    }
-                    catch (Win32Exception)
-                    {
-                        ErrorRecord er = new ErrorRecord(new Win32Exception(StringUtil.Format(EventlogResources.NoAccess, null, computer)), null, ErrorCategory.PermissionDenied, null);
-                        WriteError(er);
-                        continue;
-                    }
-                    catch (InvalidOperationException)
-                    {
-                        ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.OSWritingError)), null, ErrorCategory.ReadError, null);
-                        WriteError(er);
-                        continue;
-                    }
-                }
-            }
-        }
-
-        // beginprocessing
-
-        #endregion Overrides
-    }
-    #endregion ClearEventLogCommand
-
-    #region WriteEventLogCommand
-    /// <summary>
-    /// This class implements the Write-EventLog command.
-    /// </summary>
-
-    [Cmdlet(VerbsCommunications.Write, "EventLog", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135281", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public sealed class WriteEventLogCommand : PSCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// Write eventlog entries in this log.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true)]
-        [Alias("LN")]
-        [ValidateNotNullOrEmpty]
-        public string LogName { get; set; }
-
-        /// <summary>
-        /// The source by which the application is registered on the specified computer.
-        /// </summary>
-        [Parameter(Position = 1, Mandatory = true)]
-        [Alias("SRC")]
-        [ValidateNotNullOrEmpty]
-        public string Source { get; set; }
-
-        /// <summary>
-        /// String which represents One of the EventLogEntryType values.
-        /// </summary>
-        [Parameter(Position = 3)]
-        [Alias("ET")]
-        [ValidateNotNullOrEmpty]
-        [ValidateSetAttribute(new string[] { "Error", "Information", "FailureAudit", "SuccessAudit", "Warning" })]
-        public EventLogEntryType EntryType { get; set; } = EventLogEntryType.Information;
-
-        /// <summary>
-        /// The application-specific subcategory associated with the message.
-        /// </summary>
-        [Parameter]
-        public Int16 Category { get; set; } = 1;
-
-        /// <summary>
-        /// The application-specific identifier for the event.
-        /// </summary>
-        [Parameter(Position = 2, Mandatory = true)]
-        [Alias("ID", "EID")]
-        [ValidateNotNullOrEmpty]
-        [ValidateRange(0, UInt16.MaxValue)]
-        public Int32 EventId { get; set; }
-
-        /// <summary>
-        /// The message goes here.
-        /// </summary>
-        [Parameter(Position = 4, Mandatory = true)]
-        [Alias("MSG")]
-        [ValidateNotNullOrEmpty]
-        [ValidateLength(0, 32766)]
-        public string Message { get; set; }
-
-        /// <summary>
-        /// Write eventlog entries of this log.
-        /// </summary>
-        [Parameter]
-        [Alias("RD")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public byte[] RawData { get; set; }
-
-        /// <summary>
-        /// Write eventlog entries of this log.
-        /// </summary>
-        [Parameter]
-        [Alias("CN")]
-        [ValidateNotNullOrEmpty]
-
-        public string ComputerName { get; set; } = ".";
-
-        #endregion Parameters
-        #region private
-
-        private void WriteNonTerminatingError(Exception exception, string errorId, string errorMessage,
-            ErrorCategory category)
-        {
-            Exception ex = new Exception(errorMessage, exception);
-            WriteError(new ErrorRecord(ex, errorId, category, null));
-        }
-
-        #endregion private
-        #region Overrides
-
-        /// <summary>
-        /// Does the processing.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            string _computerName = string.Empty;
-            if ((ComputerName.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (ComputerName.Equals(".", StringComparison.OrdinalIgnoreCase)))
-            {
-                _computerName = "localhost";
-            }
-            else
-            {
-                _computerName = ComputerName;
-            }
-
-            try
-            {
-                if (!(EventLog.SourceExists(Source, ComputerName)))
-                {
-                    ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.SourceDoesNotExist, null, _computerName, Source)), null, ErrorCategory.InvalidOperation, null);
-                    WriteError(er);
-                }
-                else
-                {
-                    if (!(EventLog.Exists(LogName, ComputerName)))
-                    {
-                        ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.LogDoesNotExist, LogName, _computerName)), null, ErrorCategory.InvalidOperation, null);
-                        WriteError(er);
-                    }
-                    else
-                    {
-                        EventLog _myevent = new EventLog(LogName, ComputerName, Source);
-                        _myevent.WriteEntry(Message, EntryType, EventId, Category, RawData);
-                    }
-                }
-            }
-            catch (ArgumentException ex)
-            {
-                WriteNonTerminatingError(ex, ex.Message, ex.Message, ErrorCategory.InvalidOperation);
-            }
-            catch (InvalidOperationException ex)
-            {
-                WriteNonTerminatingError(ex, "AccessDenied", StringUtil.Format(EventlogResources.AccessDenied, LogName, null, Source), ErrorCategory.PermissionDenied);
-            }
-            catch (Win32Exception ex)
-            {
-                WriteNonTerminatingError(ex, "OSWritingError", StringUtil.Format(EventlogResources.OSWritingError, null, null, null), ErrorCategory.WriteError);
-            }
-            catch (System.IO.IOException ex)
-            {
-                WriteNonTerminatingError(ex, "PathDoesNotExist", StringUtil.Format(EventlogResources.PathDoesNotExist, null, ComputerName, null), ErrorCategory.InvalidOperation);
-            }
-        }
-
-        #endregion Overrides
-    }
-    #endregion WriteEventLogCommand
-
-    #region LimitEventLogCommand
-    /// <summary>
-    /// This class implements the Limit-EventLog command.
-    /// </summary>
-
-    [Cmdlet(VerbsData.Limit, "EventLog", SupportsShouldProcess = true,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135227", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public sealed class LimitEventLogCommand : PSCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// Limit the properties of this log.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true)]
-        [Alias("LN")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] LogName { get; set; }
-
-        /// <summary>
-        /// Limit eventlog entries of this computer.
-        /// </summary>
-        [Parameter]
-        [Alias("CN")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] ComputerName { get; set; } = { "." };
-
-        /// <summary>
-        /// Minimum retention days for this log.
-        /// </summary>
-        [Parameter]
-        [Alias("MRD")]
-        [ValidateNotNullOrEmpty]
-        [ValidateRange(1, 365)]
-        public Int32 RetentionDays
-        {
-            get { return _retention; }
-
-            set
-            {
-                _retention = value;
-                _retentionSpecified = true;
-            }
-        }
-
-        private Int32 _retention;
-        private bool _retentionSpecified = false;
-        /// <summary>
-        /// Overflow action to be taken.
-        /// </summary>
-        [Parameter]
-        [Alias("OFA")]
-        [ValidateNotNullOrEmpty]
-        [ValidateSetAttribute(new string[] { "OverwriteOlder", "OverwriteAsNeeded", "DoNotOverwrite" })]
-
-        public System.Diagnostics.OverflowAction OverflowAction
-        {
-            get { return _overflowaction; }
-
-            set
-            {
-                _overflowaction = value;
-                _overflowSpecified = true;
-            }
-        }
-
-        private System.Diagnostics.OverflowAction _overflowaction;
-        private bool _overflowSpecified = false;
-        /// <summary>
-        /// Maximum size of this log.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNullOrEmpty]
-        public Int64 MaximumSize
-        {
-            get { return _maximumKilobytes; }
-
-            set
-            {
-                _maximumKilobytes = value;
-                _maxkbSpecified = true;
-            }
-        }
-
-        private Int64 _maximumKilobytes;
-        private bool _maxkbSpecified = false;
-        #endregion Parameters
-
-        #region private
-        private void WriteNonTerminatingError(Exception exception, string resourceId, string errorId,
-      ErrorCategory category, string _logName, string _compName)
-        {
-            Exception ex = new Exception(StringUtil.Format(resourceId, _logName, _compName), exception);
-            WriteError(new ErrorRecord(ex, errorId, category, null));
-        }
-
-        #endregion private
-
-        #region Overrides
-
-        /// <summary>
-        /// Does the processing.
-        /// </summary>
-        protected override
-        void
-        BeginProcessing()
-        {
-            string computer = string.Empty;
-            foreach (string compname in ComputerName)
-            {
-                if ((compname.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (compname.Equals(".", StringComparison.OrdinalIgnoreCase)))
-                {
-                    computer = "localhost";
-                }
-                else
-                {
-                    computer = compname;
-                }
-
-                foreach (string logname in LogName)
-                {
-                    try
-                    {
-                        if (!EventLog.Exists(logname, compname))
-                        {
-                            ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.LogDoesNotExist, logname, computer)), null, ErrorCategory.InvalidOperation, null);
-                            WriteError(er);
-                            continue;
-                        }
-                        else
-                        {
-                            if (!ShouldProcess(StringUtil.Format(EventlogResources.LimitEventLogWarning, logname, computer)))
-                            {
-                                continue;
-                            }
-                            else
-                            {
-                                EventLog newLog = new EventLog(logname, compname);
-                                int _minRetention = newLog.MinimumRetentionDays;
-                                System.Diagnostics.OverflowAction _newFlowAction = newLog.OverflowAction;
-                                if (_retentionSpecified && _overflowSpecified)
-                                {
-                                    if (_overflowaction.CompareTo(System.Diagnostics.OverflowAction.OverwriteOlder) == 0)
-                                    {
-                                        newLog.ModifyOverflowPolicy(_overflowaction, _retention);
-                                    }
-                                    else
-                                    {
-                                        ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.InvalidOverflowAction)), null, ErrorCategory.InvalidOperation, null);
-                                        WriteError(er);
-                                        continue;
-                                    }
-                                }
-                                else if (_retentionSpecified && !_overflowSpecified)
-                                {
-                                    if (_newFlowAction.CompareTo(System.Diagnostics.OverflowAction.OverwriteOlder) == 0)
-                                    {
-                                        newLog.ModifyOverflowPolicy(_newFlowAction, _retention);
-                                    }
-                                    else
-                                    {
-                                        ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.InvalidOverflowAction)), null, ErrorCategory.InvalidOperation, null);
-                                        WriteError(er);
-                                        continue;
-                                    }
-                                }
-                                else if (!_retentionSpecified && _overflowSpecified)
-                                {
-                                    newLog.ModifyOverflowPolicy(_overflowaction, _minRetention);
-                                }
-
-                                if (_maxkbSpecified)
-                                {
-                                    int kiloByte = 1024;
-                                    _maximumKilobytes = _maximumKilobytes / kiloByte;
-                                    newLog.MaximumKilobytes = _maximumKilobytes;
-                                }
-                            }
-                        }
-                    }
-                    catch (InvalidOperationException ex)
-                    {
-                        WriteNonTerminatingError(ex, EventlogResources.PermissionDenied, "PermissionDenied", ErrorCategory.PermissionDenied, logname, computer);
-                        continue;
-                    }
-                    catch (System.IO.IOException ex)
-                    {
-                        WriteNonTerminatingError(ex, EventlogResources.PathDoesNotExist, "PathDoesNotExist", ErrorCategory.InvalidOperation, null, computer);
-                        continue;
-                    }
-                    catch (ArgumentOutOfRangeException ex)
-                    {
-                        if (!_retentionSpecified && !_maxkbSpecified)
-                        {
-                            WriteNonTerminatingError(ex, EventlogResources.InvalidArgument, "InvalidArgument", ErrorCategory.InvalidData, null, null);
-                        }
-                        else
-                        {
-                            WriteNonTerminatingError(ex, EventlogResources.ValueOutofRange, "ValueOutofRange", ErrorCategory.InvalidData, null, null);
-                        }
-
-                        continue;
-                    }
-                }
-            }
-        }
-        #endregion override
-
-    }
-    #endregion LimitEventLogCommand
-
-    #region ShowEventLogCommand
-    /// <summary>
-    /// This class implements the Show-EventLog command.
-    /// </summary>
-
-    [Cmdlet(VerbsCommon.Show, "EventLog", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135257", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public sealed class ShowEventLogCommand : PSCmdlet
-    {
-        #region Parameters
-
-        /// <summary>
-        /// Show eventviewer of this computer.
-        /// </summary>
-        [Parameter(Position = 0)]
-        [Alias("CN")]
-        [ValidateNotNullOrEmpty]
-
-        public string ComputerName { get; set; } = ".";
-
-        #endregion Parameters
-
-        #region Overrides
-
-        /// <summary>
-        /// Does the processing.
-        /// </summary>
-        protected override
-        void
-        BeginProcessing()
-        {
-            try
-            {
-                string eventVwrExe = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),
-                    "eventvwr.exe");
-                Process.Start(eventVwrExe, ComputerName);
-            }
-            catch (Win32Exception e)
-            {
-                if (e.NativeErrorCode.Equals(0x00000002))
-                {
-                    string message = StringUtil.Format(EventlogResources.NotSupported);
-                    InvalidOperationException ex = new InvalidOperationException(message);
-                    ErrorRecord er = new ErrorRecord(ex, "Win32Exception", ErrorCategory.InvalidOperation, null);
-                    WriteError(er);
-                }
-                else
-                {
-                    ErrorRecord er = new ErrorRecord(e, "Win32Exception", ErrorCategory.InvalidArgument, null);
-                    WriteError(er);
-                }
-            }
-            catch (SystemException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "InvalidComputerName", ErrorCategory.InvalidArgument, ComputerName);
-                WriteError(er);
-            }
-        }
-        #endregion override
-    }
-    #endregion ShowEventLogCommand
-
-    #region NewEventLogCommand
-    /// <summary>
-    /// This cmdlet creates the new event log .This cmdlet can also be used to
-    /// configure a new source for writing entries to an event log on the local
-    /// computer or a remote computer.
-    /// You can create an event source for an existing event log or a new event log.
-    /// When you create a new source for a new event log, the system registers the
-    /// source for that log, but the log is not created until the first entry is
-    /// written to it.
-    /// The operating system stores event logs as files. The associated file is
-    /// stored in the %SystemRoot%\System32\Config directory on the specified
-    /// computer. The file name is set by appending the first 8 characters of the
-    /// Log property with the ".evt" file name extension.
-    /// You can register the event source with localized resource file(s) for your
-    /// event category and message strings. Your application can write event log
-    /// entries using resource identifiers, rather than specifying the actual
-    /// string. You can register a separate file for event categories, messages and
-    /// parameter insertion strings, or you can register the same resource file for
-    /// all three types of strings.
-    /// </summary>
-
-    [Cmdlet(VerbsCommon.New, "EventLog", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135235", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public class NewEventLogCommand : PSCmdlet
-    {
-        #region Parameter
-        /// <summary>
-        /// The following is the definition of the input parameter "CategoryResourceFile".
-        /// Specifies the path of the resource file that contains category strings for
-        /// the source
-        /// Resource File is expected to be present in Local/Remote Machines.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNullOrEmpty]
-        [Alias("CRF")]
-        public string CategoryResourceFile { get; set; }
-
-        /// <summary>
-        /// The following is the definition of the input parameter "ComputerName".
-        /// Specify the Computer Name. The default is local computer.
-        /// </summary>
-        [Parameter(Position = 2)]
-        [ValidateNotNullOrEmpty]
-        [Alias("CN")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] ComputerName { get; set; } = { "." };
-
-        /// <summary>
-        /// The following is the definition of the input parameter "LogName".
-        /// Specifies the name of the log.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0)]
-        [ValidateNotNullOrEmpty]
-        [Alias("LN")]
-        public string LogName { get; set; }
-
-        /// <summary>
-        /// The following is the definition of the input parameter "MessageResourceFile".
-        /// Specifies the path of the message resource file that contains message
-        /// formatting strings for the source
-        /// Resource File is expected to be present in Local/Remote Machines.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNullOrEmpty]
-        [Alias("MRF")]
-        public string MessageResourceFile { get; set; }
-
-        /// <summary>
-        /// The following is the definition of the input parameter "ParameterResourceFile".
-        /// Specifies the path of the resource file that contains message parameter
-        /// strings for the source
-        /// Resource File is expected to be present in Local/Remote Machines.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNullOrEmpty]
-        [Alias("PRF")]
-        public string ParameterResourceFile { get; set; }
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Source".
-        /// Specifies the Source of the EventLog.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 1)]
-        [ValidateNotNullOrEmpty]
-        [Alias("SRC")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Source { get; set; }
-
-        #endregion Parameter
-
-        #region private
-        private void WriteNonTerminatingError(Exception exception, string resourceId, string errorId,
-            ErrorCategory category, string _logName, string _compName, string _source, string _resourceFile)
-        {
-            Exception ex = new Exception(StringUtil.Format(resourceId, _logName, _compName, _source, _resourceFile), exception);
-            WriteError(new ErrorRecord(ex, errorId, category, null));
-        }
-
-        #endregion private
-
-        #region override
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            string computer = string.Empty;
-            foreach (string compname in ComputerName)
-            {
-                if ((compname.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (compname.Equals(".", StringComparison.OrdinalIgnoreCase)))
-                {
-                    computer = "localhost";
-                }
-                else
-                {
-                    computer = compname;
-                }
-
-                try
-                {
-                    foreach (string _sourceName in Source)
-                    {
-                        if (!EventLog.SourceExists(_sourceName, compname))
-                        {
-                            EventSourceCreationData newEventSource = new EventSourceCreationData(_sourceName, LogName);
-                            newEventSource.MachineName = compname;
-                            if (!string.IsNullOrEmpty(MessageResourceFile))
-                                newEventSource.MessageResourceFile = MessageResourceFile;
-                            if (!string.IsNullOrEmpty(ParameterResourceFile))
-                                newEventSource.ParameterResourceFile = ParameterResourceFile;
-                            if (!string.IsNullOrEmpty(CategoryResourceFile))
-                                newEventSource.CategoryResourceFile = CategoryResourceFile;
-                            EventLog.CreateEventSource(newEventSource);
-                        }
-                        else
-                        {
-                            ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.SourceExistInComp, null, computer, _sourceName)), null, ErrorCategory.InvalidOperation, null);
-                            WriteError(er);
-                            continue;
-                        }
-                    }
-                }
-                catch (InvalidOperationException ex)
-                {
-                    WriteNonTerminatingError(ex, EventlogResources.PermissionDenied, "PermissionDenied", ErrorCategory.PermissionDenied, LogName, computer, null, null);
-                    continue;
-                }
-                catch (ArgumentException ex)
-                {
-                    ErrorRecord er = new ErrorRecord(ex, "NewEventlogException", ErrorCategory.InvalidArgument, null);
-                    WriteError(er);
-                    continue;
-                }
-                catch (System.Security.SecurityException ex)
-                {
-                    WriteNonTerminatingError(ex, EventlogResources.AccessIsDenied, "AccessIsDenied", ErrorCategory.InvalidOperation, null, null, null, null);
-                    continue;
-                }
-            }
-        }
-        // End BeginProcessing()
-        #endregion override
-    }
-    #endregion NewEventLogCommand
-
-    #region RemoveEventLogCommand
-    /// <summary>
-    /// This cmdlet is used to delete the specified event log from the specified
-    /// computer. This can also be used to Clear the entries of the specified event
-    /// log and also to unregister the Source associated with the eventlog.
-    /// </summary>
-
-    [Cmdlet(VerbsCommon.Remove, "EventLog",
-             SupportsShouldProcess = true, DefaultParameterSetName = "Default",
-             HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135248", RemotingCapability = RemotingCapability.SupportedByCommand)]
-    public class RemoveEventLogCommand : PSCmdlet
-    {
-        /// <summary>
-        /// The following is the definition of the input parameter "ComputerName".
-        /// Specifies the Computer Name.
-        /// </summary>
-        [Parameter(Position = 1)]
-        [ValidateNotNull]
-        [ValidateNotNullOrEmpty]
-        [Alias("CN")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] ComputerName { get; set; } = { "." };
-
-        /// <summary>
-        /// The following is the definition of the input parameter "LogName".
-        /// Specifies the Event Log Name.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0, ParameterSetName = "Default")]
-        [ValidateNotNull]
-        [ValidateNotNullOrEmpty]
-        [Alias("LN")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] LogName { get; set; }
-
-        /// <summary>
-        /// The following is the definition of the input parameter "RemoveSource".
-        /// Specifies either to remove the event log and and associated source or
-        /// source. alone.
-        /// When this parameter is not specified, the cmdlet uses Delete Method which
-        /// clears the eventlog and also the source associated with it.
-        /// When this parameter value is true, then this cmdlet uses DeleteEventSource
-        /// Method to delete the Source alone.
-        /// </summary>
-        [Parameter(ParameterSetName = "Source")]
-        [ValidateNotNull]
-        [ValidateNotNullOrEmpty]
-        [Alias("SRC")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Source { get; set; }
-
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            try
-            {
-                string computer = string.Empty;
-                foreach (string compName in ComputerName)
-                {
-                    if ((compName.Equals("localhost", StringComparison.OrdinalIgnoreCase)) || (compName.Equals(".", StringComparison.OrdinalIgnoreCase)))
-                    {
-                        computer = "localhost";
-                    }
-                    else
-                    {
-                        computer = compName;
-                    }
-
-                    if (ParameterSetName.Equals("Default"))
-                    {
-                        foreach (string log in LogName)
-                        {
-                            try
-                            {
-                                if (EventLog.Exists(log, compName))
-                                {
-                                    if (!ShouldProcess(StringUtil.Format(EventlogResources.RemoveEventLogWarning, log, computer)))
-                                    {
-                                        continue;
-                                    }
-
-                                    EventLog.Delete(log, compName);
-                                }
-                                else
-                                {
-                                    ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.LogDoesNotExist, log, computer)), null, ErrorCategory.InvalidOperation, null);
-                                    WriteError(er);
-                                    continue;
-                                }
-                            }
-                            catch (System.IO.IOException)
-                            {
-                                ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.PathDoesNotExist, null, computer)), null, ErrorCategory.InvalidOperation, null);
-                                WriteError(er);
-                                continue;
-                            }
-                        }
-                    }
-                    else
-                    {
-                        foreach (string src in Source)
-                        {
-                            try
-                            {
-                                if (EventLog.SourceExists(src, compName))
-                                {
-                                    if (!ShouldProcess(StringUtil.Format(EventlogResources.RemoveSourceWarning, src, computer)))
-                                    {
-                                        continue;
-                                    }
-
-                                    EventLog.DeleteEventSource(src, compName);
-                                }
-                                else
-                                {
-                                    ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.SourceDoesNotExist, string.Empty, computer, src)), null, ErrorCategory.InvalidOperation, null);
-                                    WriteError(er);
-                                    continue;
-                                }
-                            }
-                            catch (System.IO.IOException)
-                            {
-                                ErrorRecord er = new ErrorRecord(new InvalidOperationException(StringUtil.Format(EventlogResources.PathDoesNotExist, null, computer)), null, ErrorCategory.InvalidOperation, null);
-                                WriteError(er);
-                                continue;
-                            }
-                        }
-                    }
-                }
-            }
-            catch (System.Security.SecurityException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "NewEventlogException", ErrorCategory.SecurityError, null);
-                WriteError(er);
-            }
-        }
-    }
-
-    #endregion RemoveEventLogCommand
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs
index d99ece1fb81..c049370e4b4 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs
@@ -122,7 +122,7 @@ public override string[] Exclude
         /// Gets or sets the recurse switch.
         /// </summary>
         [Parameter]
-        [Alias("s")]
+        [Alias("s", "r")]
         public SwitchParameter Recurse
         {
             get
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetClipboardCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetClipboardCommand.cs
index dd878bd72ce..a2b7f03ce70 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetClipboardCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetClipboardCommand.cs
@@ -2,8 +2,10 @@
 // Licensed under the MIT License.
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Management.Automation;
+using System.Management.Automation.Language;
 using Microsoft.PowerShell.Commands.Internal;
 
 namespace Microsoft.PowerShell.Commands
@@ -34,6 +36,13 @@ public SwitchParameter Raw
             }
         }
 
+        /// <summary>
+        /// Gets or sets the delimiters to use when splitting the clipboard content.
+        /// </summary>
+        [Parameter]
+        [ArgumentCompleter(typeof(DelimiterCompleter))]
+        public string[] Delimiter { get; set; } = [Environment.NewLine];
+
         private bool _raw;
 
         /// <summary>
@@ -68,11 +77,40 @@ private List<string> GetClipboardContentAsText()
             }
             else
             {
-                string[] splitSymbol = { Environment.NewLine };
-                result.AddRange(textContent.Split(splitSymbol, StringSplitOptions.None));
+                result.AddRange(textContent.Split(Delimiter, StringSplitOptions.None));
             }
 
             return result;
         }
     }
+
+    /// <summary>
+    /// Provides argument completion for the Delimiter parameter.
+    /// </summary>
+    public sealed class DelimiterCompleter : IArgumentCompleter
+    {
+        /// <summary>
+        /// Provides argument completion for the Delimiter parameter.
+        /// </summary>
+        /// <param name="commandName">The name of the command that is being completed.</param>
+        /// <param name="parameterName">The name of the parameter that is being completed.</param>
+        /// <param name="wordToComplete">The input text to filter the results by.</param>
+        /// <param name="commandAst">The ast of the command that triggered the completion.</param>
+        /// <param name="fakeBoundParameters">The parameters bound to the command.</param>
+        /// <returns>Completion results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
+        {
+            wordToComplete ??= string.Empty;
+            var pattern = new WildcardPattern(wordToComplete + '*', WildcardOptions.IgnoreCase);
+            if (pattern.IsMatch("CRLF") || pattern.IsMatch("Windows"))
+            {
+                yield return new CompletionResult("\"`r`n\"", "CRLF", CompletionResultType.ParameterValue, "Windows (CRLF)");
+            }
+
+            if (pattern.IsMatch("LF") || pattern.IsMatch("Unix") || pattern.IsMatch("Linux"))
+            {
+                yield return new CompletionResult("\"`n\"", "LF", CompletionResultType.ParameterValue, "UNIX (LF)");
+            }
+        }
+    }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs
index 4c8a95dddeb..65d57194f5d 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetComputerInfoCommand.cs
@@ -17,8 +17,6 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    using Extensions;
-
     #region GetComputerInfoCommand cmdlet implementation
     /// <summary>
     /// The Get-ComputerInfo cmdlet gathers and reports information
@@ -31,7 +29,7 @@ namespace Microsoft.PowerShell.Commands
     public class GetComputerInfoCommand : PSCmdlet
     {
         #region Inner Types
-        private class OSInfoGroup
+        private sealed class OSInfoGroup
         {
             public WmiOperatingSystem os;
             public HotFix[] hotFixes;
@@ -41,7 +39,7 @@ private class OSInfoGroup
             public RegWinNtCurrentVersion regCurVer;
         }
 
-        private class SystemInfoGroup
+        private sealed class SystemInfoGroup
         {
             public WmiBaseBoard baseboard;
             public WmiBios bios;
@@ -50,7 +48,7 @@ private class SystemInfoGroup
             public NetworkAdapter[] networkAdapters;
         }
 
-        private class HyperVInfo
+        private sealed class HyperVInfo
         {
             public bool? Present;
             public bool? VMMonitorModeExtensions;
@@ -59,13 +57,13 @@ private class HyperVInfo
             public bool? DataExecutionPreventionAvailable;
         }
 
-        private class DeviceGuardInfo
+        private sealed class DeviceGuardInfo
         {
             public DeviceGuardSmartStatus status;
             public DeviceGuard deviceGuard;
         }
 
-        private class MiscInfoGroup
+        private sealed class MiscInfoGroup
         {
             public ulong? physicallyInstalledMemory;
             public string timeZone;
@@ -248,7 +246,7 @@ private static string GetHalVersion(CimSession session, string systemDirectory)
             try
             {
                 var halPath = CIMHelper.EscapePath(System.IO.Path.Combine(systemDirectory, "hal.dll"));
-                var query = string.Format("SELECT * FROM CIM_DataFile Where Name='{0}'", halPath);
+                var query = string.Create(CultureInfo.InvariantCulture, $"SELECT * FROM CIM_DataFile Where Name='{halPath}'");
                 var instance = session.QueryFirstInstance(query);
 
                 if (instance != null)
@@ -1125,16 +1123,13 @@ internal static string GetLocaleName(string locale)
                     // base-indication prefix. For example, the string "0409" will be
                     // parsed into the base-10 integer value 1033, while the string "0x0409"
                     // will fail to parse due to the "0x" base-indication prefix.
-                    if (UInt32.TryParse(locale, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uint localeNum))
+                    if (uint.TryParse(locale, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uint localeNum))
                     {
                         culture = CultureInfo.GetCultureInfo((int)localeNum);
                     }
 
-                    if (culture == null)
-                    {
-                        // If TryParse failed we'll try using the original string as culture name
-                        culture = CultureInfo.GetCultureInfo(locale);
-                    }
+                    // If TryParse failed we'll try using the original string as culture name
+                    culture ??= CultureInfo.GetCultureInfo(locale);
                 }
                 catch (Exception)
                 {
@@ -1193,7 +1188,7 @@ internal static class EnumConverter<T> where T : struct, IConvertible
         /// </param>
         /// <returns>
         /// A Nullable<typeparamref name="T"/> enum object. If the value
-        /// is convertable to a valid enum value, the returned object's
+        /// is convertible to a valid enum value, the returned object's
         /// value will contain the converted value, otherwise the returned
         /// object will be null.
         /// </returns>
@@ -1231,11 +1226,11 @@ internal static class EnumConverter<T> where T : struct, IConvertible
 
     internal static class RegistryInfo
     {
-        public static Dictionary<string, UInt32> GetServerLevels()
+        public static Dictionary<string, uint> GetServerLevels()
         {
             const string keyPath = @"Software\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels";
 
-            var rv = new Dictionary<string, UInt32>();
+            var rv = new Dictionary<string, uint>();
 
             using (var key = Registry.LocalMachine.OpenSubKey(keyPath))
             {
@@ -1338,7 +1333,7 @@ protected static string GetLanguageName(uint? lcid)
 
 #pragma warning disable 649 // fields and properties in these class are assigned dynamically
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiBaseBoard
+    internal sealed class WmiBaseBoard
     {
         public string Caption;
         public string[] ConfigOptions;
@@ -1371,9 +1366,9 @@ internal class WmiBaseBoard
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiBios : WmiClassBase
+    internal sealed class WmiBios : WmiClassBase
     {
-        public UInt16[] BiosCharacteristics;
+        public ushort[] BiosCharacteristics;
         public string[] BIOSVersion;
         public string BuildNumber;
         public string Caption;
@@ -1406,7 +1401,7 @@ internal class WmiBios : WmiClassBase
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiComputerSystem
+    internal sealed class WmiComputerSystem
     {
         public ushort? AdminPasswordStatus;
         public bool? AutomaticManagedPagefile;
@@ -1416,11 +1411,11 @@ internal class WmiComputerSystem
         public ushort? BootOptionOnWatchDog;
         public bool? BootROMSupported;
         public string BootupState;
-        public UInt16[] BootStatus;
+        public ushort[] BootStatus;
         public string Caption;
         public ushort? ChassisBootupState;
         public string ChassisSKUNumber;
-        public Int16? CurrentTimeZone;
+        public short? CurrentTimeZone;
         public bool? DaylightInEffect;
         public string Description;
         public string DNSHostName;
@@ -1442,10 +1437,10 @@ internal class WmiComputerSystem
         public uint? NumberOfProcessors;
         public string[] OEMStringArray;
         public bool? PartOfDomain;
-        public Int64? PauseAfterReset;
+        public long? PauseAfterReset;
         public ushort? PCSystemType;
         public ushort? PCSystemTypeEx;
-        public UInt16[] PowerManagementCapabilities;
+        public ushort[] PowerManagementCapabilities;
         public bool? PowerManagementSupported;
         public ushort? PowerOnPasswordStatus;
         public ushort? PowerState;
@@ -1453,8 +1448,8 @@ internal class WmiComputerSystem
         public string PrimaryOwnerContact;
         public string PrimaryOwnerName;
         public ushort? ResetCapability;
-        public Int16? ResetCount;
-        public Int16? ResetLimit;
+        public short? ResetCount;
+        public short? ResetLimit;
         public string[] Roles;
         public string Status;
         public string[] SupportContactDescription;
@@ -1489,14 +1484,14 @@ public PowerManagementCapabilities[] GetPowerManagementCapabilities()
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiDeviceGuard
+    internal sealed class WmiDeviceGuard
     {
-        public UInt32[] AvailableSecurityProperties;
+        public uint[] AvailableSecurityProperties;
         public uint? CodeIntegrityPolicyEnforcementStatus;
         public uint? UsermodeCodeIntegrityPolicyEnforcementStatus;
-        public UInt32[] RequiredSecurityProperties;
-        public UInt32[] SecurityServicesConfigured;
-        public UInt32[] SecurityServicesRunning;
+        public uint[] RequiredSecurityProperties;
+        public uint[] SecurityServicesConfigured;
+        public uint[] SecurityServicesRunning;
         public uint? VirtualizationBasedSecurityStatus;
 
         public DeviceGuard AsOutputType
@@ -1564,7 +1559,7 @@ public DeviceGuard AsOutputType
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiKeyboard
+    internal sealed class WmiKeyboard
     {
         public ushort? Availability;
         public string Caption;
@@ -1582,7 +1577,7 @@ internal class WmiKeyboard
         public ushort? NumberOfFunctionKeys;
         public ushort? Password;
         public string PNPDeviceID;
-        public UInt16[] PowerManagementCapabilities;
+        public ushort[] PowerManagementCapabilities;
         public bool? PowerManagementSupported;
         public string Status;
         public ushort? StatusInfo;
@@ -1591,14 +1586,14 @@ internal class WmiKeyboard
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WMiLogicalMemory
+    internal sealed class WMiLogicalMemory
     {
         // TODO: fill this in!!!
         public uint? TotalPhysicalMemory;
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiMsftNetAdapter
+    internal sealed class WmiMsftNetAdapter
     {
         public string Caption;
         public string Description;
@@ -1613,7 +1608,7 @@ internal class WmiMsftNetAdapter
         public string ErrorDescription;
         public uint? LastErrorCode;
         public string PNPDeviceID;
-        public UInt16[] PowerManagementCapabilities;
+        public ushort[] PowerManagementCapabilities;
         public bool? PowerManagementSupported;
         public ushort? StatusInfo;
         public string SystemCreationClassName;
@@ -1680,13 +1675,13 @@ internal class WmiMsftNetAdapter
         public string PnPDeviceID;
         public string DriverProvider;
         public string ComponentID;
-        public UInt32[] LowerLayerInterfaceIndices;
-        public UInt32[] HigherLayerInterfaceIndices;
+        public uint[] LowerLayerInterfaceIndices;
+        public uint[] HigherLayerInterfaceIndices;
         public bool? AdminLocked;
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiNetworkAdapter
+    internal sealed class WmiNetworkAdapter
     {
         public string AdapterType;
         public ushort? AdapterTypeID;
@@ -1717,7 +1712,7 @@ internal class WmiNetworkAdapter
         public string PermanentAddress;
         public bool? PhysicalAdapter;
         public string PNPDeviceID;
-        public UInt16[] PowerManagementCapabilities;
+        public ushort[] PowerManagementCapabilities;
         public bool? PowerManagementSupported;
         public string ProductName;
         public string ServiceName;
@@ -1730,7 +1725,7 @@ internal class WmiNetworkAdapter
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiNetworkAdapterConfiguration
+    internal sealed class WmiNetworkAdapterConfiguration
     {
         public bool? ArpAlwaysSourceRoute;
         public bool? ArpUseEtherSNAP;
@@ -1753,7 +1748,7 @@ internal class WmiNetworkAdapterConfiguration
         public bool? DomainDNSRegistrationEnabled;
         public uint? ForwardBufferMemory;
         public bool? FullDNSRegistrationEnabled;
-        public UInt16[] GatewayCostMetric;
+        public ushort[] GatewayCostMetric;
         public byte? IGMPLevel;
         public uint? Index;
         public uint? InterfaceIndex;
@@ -1769,7 +1764,7 @@ internal class WmiNetworkAdapterConfiguration
         public bool? IPUseZeroBroadcast;
         public string IPXAddress;
         public bool? IPXEnabled;
-        public UInt32[] IPXFrameType;
+        public uint[] IPXFrameType;
         public uint? IPXMediaType;
         public string[] IPXNetworkNumber;
         public string IPXVirtualNetNumber;
@@ -1796,7 +1791,7 @@ internal class WmiNetworkAdapterConfiguration
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiOperatingSystem : WmiClassBase
+    internal sealed class WmiOperatingSystem : WmiClassBase
     {
         #region Fields
         public string BootDevice;
@@ -1807,7 +1802,7 @@ internal class WmiOperatingSystem : WmiClassBase
         public string CountryCode;
         public string CSDVersion;
         public string CSName;
-        public Int16? CurrentTimeZone;
+        public short? CurrentTimeZone;
         public bool? DataExecutionPrevention_Available;
         public bool? DataExecutionPrevention_32BitApplications;
         public bool? DataExecutionPrevention_Drivers;
@@ -1893,8 +1888,8 @@ private static OSProductSuite[] MakeProductSuites(uint? suiteMask)
             var mask = suiteMask.Value;
             var list = new List<OSProductSuite>();
 
-            foreach (OSProductSuite suite in Enum.GetValues(typeof(OSProductSuite)))
-                if ((mask & (UInt32)suite) != 0)
+            foreach (OSProductSuite suite in Enum.GetValues<OSProductSuite>())
+                if ((mask & (uint)suite) != 0)
                     list.Add(suite);
 
             return list.ToArray();
@@ -1903,7 +1898,7 @@ private static OSProductSuite[] MakeProductSuites(uint? suiteMask)
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiPageFileUsage
+    internal sealed class WmiPageFileUsage
     {
         public uint? AllocatedBaseSize;
         public string Caption;
@@ -1917,7 +1912,7 @@ internal class WmiPageFileUsage
     }
 
     [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Class is instantiated directly from a CIM instance")]
-    internal class WmiProcessor
+    internal sealed class WmiProcessor
     {
         public ushort? AddressWidth;
         public ushort? Architecture;
@@ -1954,7 +1949,7 @@ internal class WmiProcessor
         public string OtherFamilyDescription;
         public string PartNumber;
         public string PNPDeviceID;
-        public UInt16[] PowerManagementCapabilities;
+        public ushort[] PowerManagementCapabilities;
         public bool? PowerManagementSupported;
         public string ProcessorId;
         public ushort? ProcessorType;
@@ -1980,7 +1975,7 @@ internal class WmiProcessor
     #endregion Intermediate WMI classes
 
     #region Other Intermediate classes
-    internal class RegWinNtCurrentVersion
+    internal sealed class RegWinNtCurrentVersion
     {
         public string BuildLabEx;
         public string CurrentVersion;
@@ -2282,7 +2277,7 @@ public class ComputerInfo
         /// the System Management BIOS Reference Specification.
         /// </summary>
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public UInt16[] BiosCharacteristics { get; internal set; }
+        public ushort[] BiosCharacteristics { get; internal set; }
 
         /// <summary>
         /// Array of the complete system BIOS information. In many computers
@@ -2320,12 +2315,12 @@ public class ComputerInfo
         /// <summary>
         /// Major version of the embedded controller firmware.
         /// </summary>
-        public Int16? BiosEmbeddedControllerMajorVersion { get; internal set; }
+        public short? BiosEmbeddedControllerMajorVersion { get; internal set; }
 
         /// <summary>
         /// Minor version of the embedded controller firmware.
         /// </summary>
-        public Int16? BiosEmbeddedControllerMinorVersion { get; internal set; }
+        public short? BiosEmbeddedControllerMinorVersion { get; internal set; }
 
         /// <summary>
         /// Firmware type of the local computer.
@@ -2496,7 +2491,7 @@ public class ComputerInfo
         /// Status and Additional Data fields that identify the boot status.
         /// </summary>
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public UInt16[] CsBootStatus { get; internal set; }
+        public ushort[] CsBootStatus { get; internal set; }
 
         /// <summary>
         /// System is started. Fail-safe boot bypasses the user startup files—also called SafeBoot.
@@ -2524,7 +2519,7 @@ public class ComputerInfo
         /// Amount of time the unitary computer system is offset from Coordinated
         /// Universal Time (UTC).
         /// </summary>
-        public Int16? CsCurrentTimeZone { get; internal set; }
+        public short? CsCurrentTimeZone { get; internal set; }
 
         /// <summary>
         /// If True, the daylight savings mode is ON.
@@ -2675,7 +2670,7 @@ public class ComputerInfo
         /// and automatic system reset. A value of –1 (minus one) indicates that
         /// the pause value is unknown.
         /// </summary>
-        public Int64? CsPauseAfterReset { get; internal set; }
+        public long? CsPauseAfterReset { get; internal set; }
 
         /// <summary>
         /// Type of the computer in use, such as laptop, desktop, or tablet.
@@ -2743,13 +2738,13 @@ public class ComputerInfo
         /// Number of automatic resets since the last reset.
         /// A value of –1 (minus one) indicates that the count is unknown.
         /// </summary>
-        public Int16? CsResetCount { get; internal set; }
+        public short? CsResetCount { get; internal set; }
 
         /// <summary>
         /// Number of consecutive times a system reset is attempted.
         /// A value of –1 (minus one) indicates that the limit is unknown.
         /// </summary>
-        public Int16? CsResetLimit { get; internal set; }
+        public short? CsResetLimit { get; internal set; }
 
         /// <summary>
         /// Array that specifies the roles of a system in the information
@@ -2909,7 +2904,7 @@ public class ComputerInfo
         /// Number, in minutes, an operating system is offset from Greenwich
         /// mean time (GMT). The number is positive, negative, or zero.
         /// </summary>
-        public Int16? OsCurrentTimeZone { get; internal set; }
+        public short? OsCurrentTimeZone { get; internal set; }
 
         /// <summary>
         /// Language identifier used by the operating system.
@@ -3058,7 +3053,7 @@ public class ComputerInfo
         public ulong? OsFreeSpaceInPagingFiles { get; internal set; }
 
         /// <summary>
-        /// Array of fiel paths to the operating system's paging files.
+        /// Array of file paths to the operating system's paging files.
         /// </summary>
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] OsPagingFiles { get; internal set; }
@@ -3328,9 +3323,9 @@ public enum AdminPasswordStatus
     [SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Justification = "The underlying MOF definition does not contain a zero value. The converter method will handle it appropriately.")]
     public enum BootOptionAction
     {
-        //  <summary>
-        //  This value is reserved
-        //  </summary>
+        // <summary>
+        // This value is reserved
+        // </summary>
         // Reserved = 0,
 
         /// <summary>
@@ -3687,7 +3682,22 @@ public enum DeviceGuardHardwareSecure
         /// <summary>
         /// Secure Memory Overwrite.
         /// </summary>
-        SecureMemoryOverwrite = 4
+        SecureMemoryOverwrite = 4,
+
+        /// <summary>
+        /// UEFI Code Readonly.
+        /// </summary>
+        UEFICodeReadonly = 5,
+
+        /// <summary>
+        /// SMM Security Mitigations 1.0.
+        /// </summary>
+        SMMSecurityMitigations = 6,
+
+        /// <summary>
+        /// Mode Based Execution Control.
+        /// </summary>
+        ModeBasedExecutionControl = 7
     }
 
     /// <summary>
@@ -5086,7 +5096,7 @@ public enum SoftwareElementState
     #endregion Output components
 
     #region Native
-    internal static class Native
+    internal static partial class Native
     {
         private static class PInvokeDllNames
         {
@@ -5099,24 +5109,24 @@ private static class PInvokeDllNames
         public const uint POWER_PLATFORM_ROLE_V1 = 0x1;
         public const uint POWER_PLATFORM_ROLE_V2 = 0x2;
 
-        public const UInt32 S_OK = 0;
+        public const uint S_OK = 0;
 
         /// <summary>
         /// Import WINAPI function PowerDeterminePlatformRoleEx.
         /// </summary>
         /// <param name="version">The version of the POWER_PLATFORM_ROLE enumeration for the platform.</param>
         /// <returns>POWER_PLATFORM_ROLE enumeration.</returns>
-        [DllImport(PInvokeDllNames.PowerDeterminePlatformRoleExDllName, EntryPoint = "PowerDeterminePlatformRoleEx", CharSet = CharSet.Ansi)]
-        public static extern uint PowerDeterminePlatformRoleEx(uint version);
+        [LibraryImport(PInvokeDllNames.PowerDeterminePlatformRoleExDllName, EntryPoint = "PowerDeterminePlatformRoleEx")]
+        public static partial uint PowerDeterminePlatformRoleEx(uint version);
 
         /// <summary>
         /// Retrieve the amount of RAM physically installed in the computer.
         /// </summary>
         /// <param name="MemoryInKilobytes"></param>
         /// <returns></returns>
-        [DllImport(PInvokeDllNames.GetPhysicallyInstalledSystemMemoryDllName, SetLastError = true)]
+        [LibraryImport(PInvokeDllNames.GetPhysicallyInstalledSystemMemoryDllName)]
         [return: MarshalAs(UnmanagedType.Bool)]
-        public static extern bool GetPhysicallyInstalledSystemMemory(out ulong MemoryInKilobytes);
+        public static partial bool GetPhysicallyInstalledSystemMemory(out ulong MemoryInKilobytes);
 
         /// <summary>
         /// Retrieve the firmware type of the local computer.
@@ -5126,9 +5136,9 @@ private static class PInvokeDllNames
         /// the resultant firmware type
         /// </param>
         /// <returns></returns>
-        [DllImport(PInvokeDllNames.GetFirmwareTypeDllName, SetLastError = true)]
+        [LibraryImport(PInvokeDllNames.GetFirmwareTypeDllName)]
         [return: MarshalAs(UnmanagedType.Bool)]
-        public static extern bool GetFirmwareType(out FirmwareType firmwareType);
+        public static partial bool GetFirmwareType(out FirmwareType firmwareType);
 
         /// <summary>
         /// Gets the data specified for the passed in property name from the
@@ -5137,8 +5147,8 @@ private static class PInvokeDllNames
         /// <param name="licenseProperty">Name of the licensing property to get.</param>
         /// <param name="propertyValue">Out parameter for the value.</param>
         /// <returns>An hresult indicating success or failure.</returns>
-        [DllImport("slc.dll", CharSet = CharSet.Unicode)]
-        internal static extern int SLGetWindowsInformationDWORD(string licenseProperty, out int propertyValue);
+        [LibraryImport("slc.dll", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial int SLGetWindowsInformationDWORD(string licenseProperty, out int propertyValue);
     }
     #endregion Native
 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs
index f689695fc38..a9d8772a5fc 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetContentCommand.cs
@@ -31,48 +31,20 @@ public class GetContentCommand : ContentCommandBase
         public long ReadCount { get; set; } = 1;
 
         /// <summary>
-        /// The number of content items to retrieve. By default this
-        /// value is -1 which means read all the content.
+        /// The number of content items to retrieve.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ValidateRange(0, long.MaxValue)]
         [Alias("First", "Head")]
-        public long TotalCount
-        {
-            get
-            {
-                return _totalCount;
-            }
-
-            set
-            {
-                _totalCount = value;
-                _totalCountSpecified = true;
-            }
-        }
-
-        private bool _totalCountSpecified = false;
+        public long TotalCount { get; set; } = -1;
 
         /// <summary>
         /// The number of content items to retrieve from the back of the file.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ValidateRange(0, int.MaxValue)]
         [Alias("Last")]
-        public int Tail
-        {
-            get
-            {
-                return _backCount;
-            }
-
-            set
-            {
-                _backCount = value;
-                _tailSpecified = true;
-            }
-        }
-
-        private int _backCount = -1;
-        private bool _tailSpecified = false;
+        public int Tail { get; set; } = -1;
 
         /// <summary>
         /// A virtual method for retrieving the dynamic parameters for a cmdlet. Derived cmdlets
@@ -98,15 +70,6 @@ internal override object GetDynamicParameters(CmdletProviderContext context)
 
         #endregion Parameters
 
-        #region parameter data
-
-        /// <summary>
-        /// The number of content items to retrieve.
-        /// </summary>
-        private long _totalCount = -1;
-
-        #endregion parameter data
-
         #region Command code
 
         /// <summary>
@@ -116,7 +79,7 @@ protected override void ProcessRecord()
         {
             // TotalCount and Tail should not be specified at the same time.
             // Throw out terminating error if this is the case.
-            if (_totalCountSpecified && _tailSpecified)
+            if (TotalCount != -1 && Tail != -1)
             {
                 string errMsg = StringUtil.Format(SessionStateStrings.GetContent_TailAndHeadCannotCoexist, "TotalCount", "Tail");
                 ErrorRecord error = new(new InvalidOperationException(errMsg), "TailAndHeadCannotCoexist", ErrorCategory.InvalidOperation, null);
@@ -141,11 +104,9 @@ protected override void ProcessRecord()
                 {
                     long countRead = 0;
 
-                    Dbg.Diagnostics.Assert(
-                        holder.Reader != null,
-                        "All holders should have a reader assigned");
+                    Dbg.Diagnostics.Assert(holder.Reader != null, "All holders should have a reader assigned");
 
-                    if (_tailSpecified && holder.Reader is not FileSystemContentReaderWriter)
+                    if (Tail != -1 && holder.Reader is not FileSystemContentReaderWriter)
                     {
                         string errMsg = SessionStateStrings.GetContent_TailNotSupported;
                         ErrorRecord error = new(new InvalidOperationException(errMsg), "TailNotSupported", ErrorCategory.InvalidOperation, Tail);
@@ -153,7 +114,7 @@ protected override void ProcessRecord()
                         continue;
                     }
 
-                    // If Tail is negative, we are supposed to read all content out. This is same
+                    // If Tail is -1, we are supposed to read all content out. This is same
                     // as reading forwards. So we read forwards in this case.
                     // If Tail is positive, we seek the right position. Or, if the seek failed
                     // because of an unsupported encoding, we scan forward to get the tail content.
@@ -197,72 +158,61 @@ protected override void ProcessRecord()
                         }
                     }
 
-                    if (TotalCount != 0)
+                    IList results = null;
+
+                    do
                     {
-                        IList results = null;
+                        long countToRead = ReadCount;
 
-                        do
+                        // Make sure we only ask for the amount the user wanted
+                        // I am using TotalCount - countToRead so that I don't
+                        // have to worry about overflow
+                        if (TotalCount > 0 && (countToRead == 0 || TotalCount - countToRead < countRead))
                         {
-                            long countToRead = ReadCount;
+                            countToRead = TotalCount - countRead;
+                        }
 
-                            // Make sure we only ask for the amount the user wanted
-                            // I am using TotalCount - countToRead so that I don't
-                            // have to worry about overflow
+                        try
+                        {
+                            results = holder.Reader.Read(countToRead);
+                        }
+                        catch (Exception e) // Catch-all OK. 3rd party callout
+                        {
+                            ProviderInvocationException providerException =
+                                new(
+                                    "ProviderContentReadError",
+                                    SessionStateStrings.ProviderContentReadError,
+                                    holder.PathInfo.Provider,
+                                    holder.PathInfo.Path,
+                                    e);
 
-                            if ((TotalCount > 0) && (countToRead == 0 || (TotalCount - countToRead < countRead)))
-                            {
-                                countToRead = TotalCount - countRead;
-                            }
+                            // Log a provider health event
+                            MshLog.LogProviderHealthEvent(this.Context, holder.PathInfo.Provider.Name, providerException, Severity.Warning);
+                            WriteError(new ErrorRecord(providerException.ErrorRecord, providerException));
 
-                            try
-                            {
-                                results = holder.Reader.Read(countToRead);
-                            }
-                            catch (Exception e) // Catch-all OK. 3rd party callout
+                            break;
+                        }
+
+                        if (results != null && results.Count > 0)
+                        {
+                            countRead += results.Count;
+                            if (ReadCount == 1)
                             {
-                                ProviderInvocationException providerException =
-                                    new(
-                                        "ProviderContentReadError",
-                                        SessionStateStrings.ProviderContentReadError,
-                                        holder.PathInfo.Provider,
-                                        holder.PathInfo.Path,
-                                        e);
-
-                                // Log a provider health event
-                                MshLog.LogProviderHealthEvent(
-                                    this.Context,
-                                    holder.PathInfo.Provider.Name,
-                                    providerException,
-                                    Severity.Warning);
-
-                                WriteError(new ErrorRecord(
-                                    providerException.ErrorRecord,
-                                    providerException));
-
-                                break;
+                                // Write out the content as a single object
+                                WriteContentObject(results[0], countRead, holder.PathInfo, currentContext);
                             }
-
-                            if (results != null && results.Count > 0)
+                            else
                             {
-                                countRead += results.Count;
-                                if (ReadCount == 1)
-                                {
-                                    // Write out the content as a single object
-                                    WriteContentObject(results[0], countRead, holder.PathInfo, currentContext);
-                                }
-                                else
-                                {
-                                    // Write out the content as an array of objects
-                                    WriteContentObject(results, countRead, holder.PathInfo, currentContext);
-                                }
+                                // Write out the content as an array of objects
+                                WriteContentObject(results, countRead, holder.PathInfo, currentContext);
                             }
-                        } while (results != null && results.Count > 0 && ((TotalCount < 0) || countRead < TotalCount));
-                    }
+                        }
+                    } while (results != null && results.Count > 0 && (TotalCount == -1 || countRead < TotalCount));
                 }
             }
             finally
             {
-                // close all the content readers
+                // Close all the content readers
 
                 CloseContent(contentStreams, false);
 
@@ -277,14 +227,14 @@ protected override void ProcessRecord()
         /// <param name="holder"></param>
         /// <param name="currentContext"></param>
         /// <returns>
-        /// true if no error occured
+        /// true if no error occurred
         /// false if there was an error
         /// </returns>
         private bool ScanForwardsForTail(in ContentHolder holder, CmdletProviderContext currentContext)
         {
             var fsReader = holder.Reader as FileSystemContentReaderWriter;
             Dbg.Diagnostics.Assert(fsReader != null, "Tail is only supported for FileSystemContentReaderWriter");
-            var tailResultQueue = new Queue<object>();
+            Queue<object> tailResultQueue = new();
             IList results = null;
             ErrorRecord error = null;
 
@@ -327,7 +277,10 @@ private bool ScanForwardsForTail(in ContentHolder holder, CmdletProviderContext
                     foreach (object entry in results)
                     {
                         if (tailResultQueue.Count == Tail)
+                        {
                             tailResultQueue.Dequeue();
+                        }
+
                         tailResultQueue.Enqueue(entry);
                     }
                 }
@@ -349,21 +302,25 @@ private bool ScanForwardsForTail(in ContentHolder holder, CmdletProviderContext
                 {
                     // Write out the content as single object
                     while (tailResultQueue.Count > 0)
+                    {
                         WriteContentObject(tailResultQueue.Dequeue(), count++, holder.PathInfo, currentContext);
+                    }
                 }
                 else // ReadCount < Queue.Count
                 {
                     while (tailResultQueue.Count >= ReadCount)
                     {
-                        var outputList = new List<object>((int)ReadCount);
+                        List<object> outputList = new((int)ReadCount);
                         for (int idx = 0; idx < ReadCount; idx++, count++)
+                        {
                             outputList.Add(tailResultQueue.Dequeue());
+                        }
+
                         // Write out the content as an array of objects
                         WriteContentObject(outputList.ToArray(), count, holder.PathInfo, currentContext);
                     }
 
-                    int remainder = tailResultQueue.Count;
-                    if (remainder > 0)
+                    if (tailResultQueue.Count > 0)
                     {
                         // Write out the content as an array of objects
                         WriteContentObject(tailResultQueue.ToArray(), count, holder.PathInfo, currentContext);
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetTransactionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetTransactionCommand.cs
deleted file mode 100644
index 484ddb96680..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetTransactionCommand.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Management.Automation;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command that gets the active transaction.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "Transaction", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135220")]
-    [OutputType(typeof(PSTransaction))]
-    public class GetTransactionCommand : PSCmdlet
-    {
-        /// <summary>
-        /// Creates a new transaction.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            WriteObject(this.Context.TransactionManager.GetCurrent());
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetWMIObjectCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/GetWMIObjectCommand.cs
deleted file mode 100644
index f460b2c4957..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/GetWMIObjectCommand.cs
+++ /dev/null
@@ -1,441 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Globalization;
-using System.Management;
-using System.Management.Automation;
-using System.Text;
-using System.Threading;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command to get WMI Objects.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "WmiObject", DefaultParameterSetName = "query",
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=113337", RemotingCapability = RemotingCapability.OwnedByCommand)]
-    public class GetWmiObjectCommand : WmiBaseCmdlet
-    {
-        #region Parameters
-
-        /// <summary>
-        /// The WMI class to query.
-        /// </summary>
-        [Alias("ClassName")]
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "query")]
-        [Parameter(Position = 1, ParameterSetName = "list")]
-        [ValidateNotNullOrEmpty()]
-        public string Class { get; set; }
-
-        /// <summary>
-        /// To specify whether to get the results recursively.
-        /// </summary>
-        [Parameter(ParameterSetName = "list")]
-        public SwitchParameter Recurse { get; set; } = false;
-
-        /// <summary>
-        /// The WMI properties to retrieve.
-        /// </summary>
-        [Parameter(Position = 1, ParameterSetName = "query")]
-        [ValidateNotNullOrEmpty()]
-        public string[] Property
-        {
-            get { return (string[])_property.Clone(); }
-
-            set { _property = value; }
-        }
-
-        /// <summary>
-        /// The filter to be used in the search.
-        /// </summary>
-        [Parameter(ParameterSetName = "query")]
-        public string Filter { get; set; }
-
-        /// <summary>
-        /// If Amended qualifier to use.
-        /// </summary>
-        [Parameter]
-        public SwitchParameter Amended { get; set; }
-
-        /// <summary>
-        /// If Enumerate Deep flag to use. When 'list' parameter is specified 'EnumerateDeep' parameter is ignored.
-        /// </summary>
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        public SwitchParameter DirectRead { get; set; }
-
-        /// <summary>
-        /// The list of classes.
-        /// </summary>
-        [Parameter(ParameterSetName = "list")]
-        public SwitchParameter List { get; set; } = false;
-
-        /// <summary>
-        /// The query string to search for objects.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = "WQLQuery")]
-        public string Query { get; set; }
-
-        #endregion Parameters
-
-        #region parameter data
-
-        private string[] _property = new string[] { "*" };
-
-        #endregion parameter data
-
-        #region Command code
-
-        /// <summary>
-        /// Uses this.filter, this.wmiClass and this.property to retrieve the filter.
-        /// </summary>
-        internal string GetQueryString()
-        {
-            StringBuilder returnValue = new StringBuilder("select ");
-            returnValue.Append(string.Join(", ", _property));
-            returnValue.Append(" from ");
-            returnValue.Append(Class);
-            if (!string.IsNullOrEmpty(Filter))
-            {
-                returnValue.Append(" where ");
-                returnValue.Append(Filter);
-            }
-
-            return returnValue.ToString();
-        }
-        /// <summary>
-        /// Uses filter table to convert the class into WMI understandable language.
-        ///            Character   Description Example Match   Comment
-        ///             *   Matches zero or more characters starting at the specified position  A*  A,ag,Apple  Supported by PowerShell.
-        ///              ?   Matches any character at the specified position ?n  An,in,on (does not match ran)   Supported by PowerShell.
-        ///              _   Matches any character at the specified position    _n  An,in,on (does not match ran)   Supported by WMI
-        ///             %   Matches zero or more characters starting at the specified position   A%  A,ag,Apple  Supported by WMI
-        ///             []  Matches a range of characters  [a-l]ook    Book,cook,look (does not match took)    Supported by WMI and powershell
-        ///              []  Matches specified characters   [bc]ook Book,cook, (does not match look)    Supported by WMI and powershell
-        ///              ^   Does not Match specified characters. [^bc]ook    Look, took (does not match book, cook)  Supported by WMI.
-        /// </summary>
-
-        internal string GetFilterClassName()
-        {
-            if (string.IsNullOrEmpty(this.Class))
-                return string.Empty;
-            string filterClass = string.Copy(this.Class);
-            filterClass = filterClass.Replace('*', '%');
-            filterClass = filterClass.Replace('?', '_');
-            return filterClass;
-        }
-
-        internal bool IsLocalizedNamespace(string sNamespace)
-        {
-            bool toReturn = false;
-            if (sNamespace.StartsWith("ms_", StringComparison.OrdinalIgnoreCase))
-            {
-                toReturn = true;
-            }
-
-            return toReturn;
-        }
-
-        internal bool ValidateClassFormat()
-        {
-            string filterClass = this.Class;
-            if (string.IsNullOrEmpty(filterClass))
-                return true;
-            StringBuilder newClassName = new StringBuilder();
-            for (int i = 0; i < filterClass.Length; i++)
-            {
-                if (char.IsLetterOrDigit(filterClass[i]) ||
-                    filterClass[i].Equals('[') || filterClass[i].Equals(']') ||
-                    filterClass[i].Equals('*') || filterClass[i].Equals('?') ||
-                    filterClass[i].Equals('-'))
-                {
-                    newClassName.Append(filterClass[i]);
-                    continue;
-                }
-                else if (filterClass[i].Equals('_'))
-                {
-                    newClassName.Append('[');
-                    newClassName.Append(filterClass[i]);
-                    newClassName.Append(']');
-                    continue;
-                }
-
-                return false;
-            }
-
-            this.Class = newClassName.ToString();
-            return true;
-        }
-
-        /// <summary>
-        /// Gets the ManagementObjectSearcher object.
-        /// </summary>
-        internal ManagementObjectSearcher GetObjectList(ManagementScope scope)
-        {
-            StringBuilder queryStringBuilder = new StringBuilder();
-            if (string.IsNullOrEmpty(this.Class))
-            {
-                queryStringBuilder.Append("select * from meta_class");
-            }
-            else
-            {
-                string filterClass = GetFilterClassName();
-                if (filterClass == null)
-                    return null;
-                queryStringBuilder.Append("select * from meta_class where __class like '");
-                queryStringBuilder.Append(filterClass);
-                queryStringBuilder.Append("'");
-            }
-
-            ObjectQuery classQuery = new ObjectQuery(queryStringBuilder.ToString());
-
-            EnumerationOptions enumOptions = new EnumerationOptions();
-            enumOptions.EnumerateDeep = true;
-            enumOptions.UseAmendedQualifiers = this.Amended;
-            var searcher = new ManagementObjectSearcher(scope, classQuery, enumOptions);
-            return searcher;
-        }
-        /// <summary>
-        /// Gets the properties of an item at the specified path.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            ConnectionOptions options = GetConnectionOption();
-            if (this.AsJob)
-            {
-                RunAsJob("Get-WMIObject");
-                return;
-            }
-            else
-            {
-                if (List.IsPresent)
-                {
-                    if (!this.ValidateClassFormat())
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(
-                       new ArgumentException(
-                           string.Format(
-                               Thread.CurrentThread.CurrentCulture,
-                               "Class", this.Class)),
-                       "INVALID_QUERY_IDENTIFIER",
-                       ErrorCategory.InvalidArgument,
-                       null);
-                        errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiFilterInvalidClass", this.Class);
-
-                        WriteError(errorRecord);
-                        return;
-                    }
-
-                    foreach (string name in ComputerName)
-                    {
-                        if (this.Recurse.IsPresent)
-                        {
-                            Queue namespaceElement = new Queue();
-                            namespaceElement.Enqueue(this.Namespace);
-                            while (namespaceElement.Count > 0)
-                            {
-                                string connectNamespace = (string)namespaceElement.Dequeue();
-                                ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(name, connectNamespace), options);
-                                try
-                                {
-                                    scope.Connect();
-                                }
-                                catch (ManagementException e)
-                                {
-                                    ErrorRecord errorRecord = new ErrorRecord(
-                                         e,
-                                         "INVALID_NAMESPACE_IDENTIFIER",
-                                         ErrorCategory.ObjectNotFound,
-                                         null);
-                                    errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", connectNamespace, e.Message);
-                                    WriteError(errorRecord);
-                                    continue;
-                                }
-                                catch (System.Runtime.InteropServices.COMException e)
-                                {
-                                    ErrorRecord errorRecord = new ErrorRecord(
-                                         e,
-                                         "INVALID_NAMESPACE_IDENTIFIER",
-                                         ErrorCategory.ObjectNotFound,
-                                         null);
-                                    errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", connectNamespace, e.Message);
-                                    WriteError(errorRecord);
-                                    continue;
-                                }
-                                catch (System.UnauthorizedAccessException e)
-                                {
-                                    ErrorRecord errorRecord = new ErrorRecord(
-                                         e,
-                                         "INVALID_NAMESPACE_IDENTIFIER",
-                                         ErrorCategory.ObjectNotFound,
-                                         null);
-                                    errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", connectNamespace, e.Message);
-                                    WriteError(errorRecord);
-                                    continue;
-                                }
-
-                                ManagementClass namespaceClass = new ManagementClass(scope, new ManagementPath("__Namespace"), new ObjectGetOptions());
-                                foreach (ManagementBaseObject obj in namespaceClass.GetInstances())
-                                {
-                                    if (!IsLocalizedNamespace((string)obj["Name"]))
-                                    {
-                                        namespaceElement.Enqueue(connectNamespace + "\\" + obj["Name"]);
-                                    }
-                                }
-
-                                ManagementObjectSearcher searcher = this.GetObjectList(scope);
-                                if (searcher == null)
-                                    continue;
-                                foreach (ManagementBaseObject obj in searcher.Get())
-                                {
-                                    WriteObject(obj);
-                                }
-                            }
-                        }
-                        else
-                        {
-                            ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(name, this.Namespace), options);
-                            try
-                            {
-                                scope.Connect();
-                            }
-                            catch (ManagementException e)
-                            {
-                                ErrorRecord errorRecord = new ErrorRecord(
-                                     e,
-                                     "INVALID_NAMESPACE_IDENTIFIER",
-                                     ErrorCategory.ObjectNotFound,
-                                     null);
-                                errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", this.Namespace, e.Message);
-                                WriteError(errorRecord);
-                                continue;
-                            }
-                            catch (System.Runtime.InteropServices.COMException e)
-                            {
-                                ErrorRecord errorRecord = new ErrorRecord(
-                                     e,
-                                     "INVALID_NAMESPACE_IDENTIFIER",
-                                     ErrorCategory.ObjectNotFound,
-                                     null);
-                                errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", this.Namespace, e.Message);
-                                WriteError(errorRecord);
-                                continue;
-                            }
-                            catch (System.UnauthorizedAccessException e)
-                            {
-                                ErrorRecord errorRecord = new ErrorRecord(
-                                     e,
-                                     "INVALID_NAMESPACE_IDENTIFIER",
-                                     ErrorCategory.ObjectNotFound,
-                                     null);
-                                errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiNamespaceConnect", this.Namespace, e.Message);
-                                WriteError(errorRecord);
-                                continue;
-                            }
-
-                            ManagementObjectSearcher searcher = this.GetObjectList(scope);
-                            if (searcher == null)
-                                continue;
-                            foreach (ManagementBaseObject obj in searcher.Get())
-                            {
-                                WriteObject(obj);
-                            }
-                        }
-                    }
-
-                    return;
-                }
-
-                // When -List is not specified and -Recurse is specified, we need the -Class parameter to compose the right query string
-                if (this.Recurse.IsPresent && string.IsNullOrEmpty(Class))
-                {
-                    string errorMsg = string.Format(CultureInfo.InvariantCulture, WmiResources.WmiParameterMissing, "-Class");
-                    ErrorRecord er = new ErrorRecord(new InvalidOperationException(errorMsg), "InvalidOperationException", ErrorCategory.InvalidOperation, null);
-                    WriteError(er);
-                    return;
-                }
-
-                string queryString = string.IsNullOrEmpty(this.Query) ? GetQueryString() : this.Query;
-                ObjectQuery query = new ObjectQuery(queryString.ToString());
-
-                foreach (string name in ComputerName)
-                {
-                    try
-                    {
-                        ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(name, this.Namespace), options);
-                        EnumerationOptions enumOptions = new EnumerationOptions();
-                        enumOptions.UseAmendedQualifiers = Amended;
-                        enumOptions.DirectRead = DirectRead;
-                        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, enumOptions);
-                        foreach (ManagementBaseObject obj in searcher.Get())
-                        {
-                            WriteObject(obj);
-                        }
-                    }
-                    catch (ManagementException e)
-                    {
-                        ErrorRecord errorRecord = null;
-                        if (e.ErrorCode.Equals(ManagementStatus.InvalidClass))
-                        {
-                            string className = GetClassNameFromQuery(queryString);
-                            string errorMsg = string.Format(CultureInfo.InvariantCulture, WmiResources.WmiQueryFailure,
-                                                        e.Message, className);
-                            errorRecord = new ErrorRecord(new ManagementException(errorMsg), "GetWMIManagementException", ErrorCategory.InvalidType, null);
-                        }
-                        else if (e.ErrorCode.Equals(ManagementStatus.InvalidQuery))
-                        {
-                            string errorMsg = string.Format(CultureInfo.InvariantCulture, WmiResources.WmiQueryFailure,
-                                                        e.Message, queryString);
-                            errorRecord = new ErrorRecord(new ManagementException(errorMsg), "GetWMIManagementException", ErrorCategory.InvalidArgument, null);
-                        }
-                        else if (e.ErrorCode.Equals(ManagementStatus.InvalidNamespace))
-                        {
-                            string errorMsg = string.Format(CultureInfo.InvariantCulture, WmiResources.WmiQueryFailure,
-                                                        e.Message, this.Namespace);
-                            errorRecord = new ErrorRecord(new ManagementException(errorMsg), "GetWMIManagementException", ErrorCategory.InvalidArgument, null);
-                        }
-                        else
-                        {
-                            errorRecord = new ErrorRecord(e, "GetWMIManagementException", ErrorCategory.InvalidOperation, null);
-                        }
-
-                        WriteError(errorRecord);
-                        continue;
-                    }
-                    catch (System.Runtime.InteropServices.COMException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "GetWMICOMException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                        continue;
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get the class name from a query string.
-        /// </summary>
-        /// <param name="query"></param>
-        /// <returns></returns>
-        private string GetClassNameFromQuery(string query)
-        {
-            System.Management.Automation.Diagnostics.Assert(query.Contains("from"),
-                                                            "Only get called when ErrorCode is InvalidClass, which means the query string contains 'from' and the class name");
-
-            if (Class != null)
-            {
-                return Class;
-            }
-
-            int fromIndex = query.IndexOf(" from ", StringComparison.OrdinalIgnoreCase);
-            string subQuery = query.Substring(fromIndex + " from ".Length);
-            string className = subQuery.Split(' ')[0];
-            return className;
-        }
-
-        #endregion Command code
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs
index d6768a1315e..d0f15346396 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Hotfix.cs
@@ -169,10 +169,7 @@ protected override void ProcessRecord()
         /// </summary>
         protected override void StopProcessing()
         {
-            if (_searchProcess != null)
-            {
-                _searchProcess.Dispose();
-            }
+            _searchProcess?.Dispose();
         }
         #endregion Overrides
 
@@ -209,29 +206,11 @@ private bool FilterMatch(ManagementObject obj)
         #region "IDisposable Members"
 
         /// <summary>
-        /// Dispose Method.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
         {
-            this.Dispose(true);
-            // Use SuppressFinalize in case a subclass
-            // of this type implements a finalizer.
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Dispose Method.
-        /// </summary>
-        /// <param name="disposing"></param>
-        public void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                if (_searchProcess != null)
-                {
-                    _searchProcess.Dispose();
-                }
-            }
+            _searchProcess?.Dispose();
         }
 
         #endregion "IDisposable Members"
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/InvokeWMIMethodCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/InvokeWMIMethodCommand.cs
deleted file mode 100644
index df0c5775ca1..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/InvokeWMIMethodCommand.cs
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Management;
-using System.Management.Automation;
-using System.Management.Automation.Internal;
-using System.Management.Automation.Provider;
-using System.Runtime.InteropServices;
-using System.Security.AccessControl;
-using System.Text;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command to Invoke WMI Method.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Invoke, "WmiMethod", DefaultParameterSetName = "class", SupportsShouldProcess = true,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=113346", RemotingCapability = RemotingCapability.OwnedByCommand)]
-    public sealed class InvokeWmiMethod : WmiBaseCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// The WMI Object to use.
-        /// </summary>
-        [Parameter(ValueFromPipeline = true, Mandatory = true, ParameterSetName = "object")]
-        public ManagementObject InputObject
-        {
-            get { return _inputObject; }
-
-            set { _inputObject = value; }
-        }
-        /// <summary>
-        /// The WMI Path to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path", Mandatory = true)]
-        public string Path
-        {
-            get { return _path; }
-
-            set { _path = value; }
-        }
-        /// <summary>
-        /// The WMI class to use.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "class")]
-        public string Class
-        {
-            get { return _className; }
-
-            set { _className = value; }
-        }
-        /// <summary>
-        /// The WMI Method to execute.
-        /// </summary>
-        [Parameter(Position = 1, Mandatory = true)]
-        public string Name
-        {
-            get { return _methodName; }
-
-            set { _methodName = value; }
-        }
-
-        /// <summary>
-        /// The parameters to the method specified by MethodName.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(Position = 2, ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "object")]
-        [Alias("Args")]
-        public object[] ArgumentList
-        {
-            get { return _argumentList; }
-
-            set { _argumentList = value; }
-        }
-
-        #endregion Parameters
-
-        #region parameter data
-        private string _path = null;
-        private string _className = null;
-        private string _methodName = null;
-        private ManagementObject _inputObject = null;
-        private object[] _argumentList = null;
-
-        #endregion parameter data
-        #region Command code
-        /// <summary>
-        /// Invoke WMI method given either path,class name or pipeline input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (this.AsJob)
-            {
-                RunAsJob("Invoke-WMIMethod");
-                return;
-            }
-
-            if (_inputObject != null)
-            {
-                object result = null;
-                ManagementBaseObject inputParameters = null;
-                try
-                {
-                    inputParameters = _inputObject.GetMethodParameters(_methodName);
-                    if (_argumentList != null)
-                    {
-                        int inParamCount = _argumentList.Length;
-                        foreach (PropertyData property in inputParameters.Properties)
-                        {
-                            if (inParamCount == 0)
-                                break;
-                            property.Value = _argumentList[_argumentList.Length - inParamCount];
-                            inParamCount--;
-                        }
-                    }
-
-                    if (!ShouldProcess(
-                       StringUtil.Format(WmiResources.WmiMethodNameForConfirmation,
-                       _inputObject["__CLASS"].ToString(),
-                       this.Name)
-                   ))
-                    {
-                        return;
-                    }
-
-                    result = _inputObject.InvokeMethod(_methodName, inputParameters, null);
-                }
-                catch (ManagementException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "InvokeWMIManagementException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "InvokeWMICOMException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-
-                if (result != null)
-                {
-                    WriteObject(result);
-                }
-
-                return;
-            }
-            else
-            {
-                ConnectionOptions options = GetConnectionOption();
-                ManagementPath mPath = null;
-                object result = null;
-                ManagementObject mObject = null;
-                if (_path != null)
-                {
-                    mPath = new ManagementPath(_path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = this.Namespace;
-                    }
-                    else if (namespaceSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "NamespaceSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            this.Namespace));
-                    }
-
-                    if (mPath.Server != "." && serverNameSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "ComputerNameSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            ComputerName));
-                    }
-                    // If server name is specified loop through it.
-                    if (!(mPath.Server == "." && serverNameSpecified))
-                    {
-                        string[] serverName = new string[] { mPath.Server };
-                        ComputerName = serverName;
-                    }
-                }
-
-                foreach (string name in ComputerName)
-                {
-                    result = null;
-                    try
-                    {
-                        if (_path != null)
-                        {
-                            mPath.Server = name;
-                            if (mPath.IsClass)
-                            {
-                                ManagementClass mClass = new ManagementClass(mPath);
-                                mObject = mClass;
-                            }
-                            else
-                            {
-                                ManagementObject mInstance = new ManagementObject(mPath);
-                                mObject = mInstance;
-                            }
-
-                            ManagementScope mScope = new ManagementScope(mPath, options);
-                            mObject.Scope = mScope;
-                        }
-                        else
-                        {
-                            ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(name, this.Namespace), options);
-                            ManagementClass mClass = new ManagementClass(_className);
-                            mObject = mClass;
-                            mObject.Scope = scope;
-                        }
-
-                        ManagementBaseObject inputParameters = mObject.GetMethodParameters(_methodName);
-                        if (_argumentList != null)
-                        {
-                            int inParamCount = _argumentList.Length;
-                            foreach (PropertyData property in inputParameters.Properties)
-                            {
-                                if (inParamCount == 0)
-                                    break;
-                                object argument = PSObject.Base(_argumentList[_argumentList.Length - inParamCount]);
-                                if (property.IsArray)
-                                {
-                                    property.Value = MakeBaseObjectArray(argument);
-                                }
-                                else
-                                {
-                                    property.Value = argument;
-                                }
-
-                                inParamCount--;
-                            }
-                        }
-
-                        if (!ShouldProcess(
-                                StringUtil.Format(WmiResources.WmiMethodNameForConfirmation,
-                           mObject["__CLASS"].ToString(),
-                           this.Name)
-                       ))
-                        {
-                            return;
-                        }
-
-                        result = mObject.InvokeMethod(_methodName, inputParameters, null);
-                    }
-                    catch (ManagementException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "InvokeWMIManagementException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-                    catch (System.Runtime.InteropServices.COMException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "InvokeWMICOMException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-
-                    if (result != null)
-                    {
-                        WriteObject(result);
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Ensure that the argument is a collection containing no PSObjects.
-        /// </summary>
-        /// <param name="argument"></param>
-        /// <returns></returns>
-        private static object MakeBaseObjectArray(object argument)
-        {
-            if (argument == null)
-                return null;
-
-            IList listArgument = argument as IList;
-            if (listArgument == null)
-            {
-                return new object[] { argument };
-            }
-
-            bool needCopy = false;
-            foreach (object argElement in listArgument)
-            {
-                if (argElement is PSObject)
-                {
-                    needCopy = true;
-                    break;
-                }
-            }
-
-            if (needCopy)
-            {
-                var copiedArgument = new object[listArgument.Count];
-                int index = 0;
-                foreach (object argElement in listArgument)
-                {
-                    copiedArgument[index++] = argElement != null ? PSObject.Base(argElement) : null;
-                }
-
-                return copiedArgument;
-            }
-            else
-            {
-                return argument;
-            }
-        }
-
-        #endregion Command code
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/JobProcessCollection.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/JobProcessCollection.cs
new file mode 100644
index 00000000000..78560543939
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/JobProcessCollection.cs
@@ -0,0 +1,125 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+#if !UNIX
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading;
+using Microsoft.Win32.SafeHandles;
+
+namespace Microsoft.PowerShell.Commands;
+
+/// <summary>
+/// JobProcessCollection is a helper class used by Start-Process -Wait cmdlet to monitor the
+/// child processes created by the main process hosted by the Start-process cmdlet.
+/// </summary>
+internal sealed class JobProcessCollection : IDisposable
+{
+    /// <summary>
+    /// Stores the initialisation state of the job and completion port.
+    /// </summary>
+    private bool? _initStatus;
+
+    /// <summary>
+    /// JobObjectHandle is a reference to the job object used to track
+    /// the child processes created by the main process hosted by the Start-Process cmdlet.
+    /// </summary>
+    private Interop.Windows.SafeJobHandle? _jobObject;
+
+    /// <summary>
+    /// The completion port handle that is used to monitor job events.
+    /// </summary>
+    private Interop.Windows.SafeIoCompletionPort? _completionPort;
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="JobProcessCollection"/> class.
+    /// </summary>
+    public JobProcessCollection()
+    { }
+
+    /// <summary>
+    /// Initializes the job and IO completion port and adds the process to the
+    /// job object.
+    /// </summary>
+    /// <param name="process">The process to add to the job.</param>
+    /// <returns>Whether the job creation and assignment worked or not.</returns>
+    public bool AssignProcessToJobObject(SafeProcessHandle process)
+        => InitializeJob() && Interop.Windows.AssignProcessToJobObject(_jobObject, process);
+
+    /// <summary>
+    /// Blocks the current thread until all processes in the job have exited.
+    /// </summary>
+    /// <param name="cancellationToken">A token to cancel the operation.</param>
+    public void WaitForExit(CancellationToken cancellationToken)
+    {
+        if (_completionPort is null)
+        {
+            return;
+        }
+
+        using var cancellationRegistration = cancellationToken.Register(() =>
+        {
+            Interop.Windows.PostQueuedCompletionStatus(
+                _completionPort,
+                Interop.Windows.JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO);
+        });
+
+        int completionCode = 0;
+        do
+        {
+            Interop.Windows.GetQueuedCompletionStatus(
+                _completionPort,
+                Interop.Windows.INFINITE,
+                out completionCode);
+        }
+        while (completionCode != Interop.Windows.JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO);
+        cancellationToken.ThrowIfCancellationRequested();
+    }
+
+    [MemberNotNullWhen(true, [nameof(_jobObject), nameof(_completionPort)])]
+    private bool InitializeJob()
+    {
+        if (_initStatus.HasValue)
+        {
+            return _initStatus.Value;
+        }
+
+        if (_jobObject is null)
+        {
+            _jobObject = Interop.Windows.CreateJobObject();
+            if (_jobObject.IsInvalid)
+            {
+                _initStatus = false;
+                _jobObject.Dispose();
+                _jobObject = null;
+                return false;
+            }
+        }
+
+        if (_completionPort is null)
+        {
+            _completionPort = Interop.Windows.CreateIoCompletionPort();
+            if (_completionPort.IsInvalid)
+            {
+                _initStatus = false;
+                _completionPort.Dispose();
+                _completionPort = null;
+                return false;
+            }
+        }
+
+        _initStatus = Interop.Windows.SetInformationJobObject(
+            _jobObject,
+            _completionPort);
+
+        return _initStatus.Value;
+    }
+
+    public void Dispose()
+    {
+        _jobObject?.Dispose();
+        _completionPort?.Dispose();
+    }
+}
+#endif
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/MovePropertyCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/MovePropertyCommand.cs
index fb90ec1c502..a40cae64b9f 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/MovePropertyCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/MovePropertyCommand.cs
@@ -61,10 +61,7 @@ public string[] Name
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _property = value;
             }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs
index 23aa621266d..6ab8f1d652d 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Navigation.cs
@@ -25,7 +25,7 @@ public abstract class CoreCommandBase : PSCmdlet, IDynamicParameters
         /// An instance of the PSTraceSource class used for trace output
         /// using "NavigationCommands" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute("NavigationCommands", "The namespace navigation tracer")]
+        [Dbg.TraceSource("NavigationCommands", "The namespace navigation tracer")]
         internal static readonly Dbg.PSTraceSource tracer = Dbg.PSTraceSource.GetTracer("NavigationCommands", "The namespace navigation tracer");
 
         #endregion Tracer
@@ -283,7 +283,7 @@ public class CoreCommandWithCredentialsBase : CoreCommandBase
         /// Gets or sets the credential parameter.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        [Credential()]
+        [Credential]
         public PSCredential Credential { get; set; }
 
         #endregion Parameters
@@ -618,7 +618,7 @@ protected override void ProcessRecord()
                     break;
 
                 default:
-                    Dbg.Diagnostics.Assert(false, string.Format(System.Globalization.CultureInfo.InvariantCulture, "One of the predefined parameter sets should have been specified, instead we got: {0}", ParameterSetName));
+                    Dbg.Diagnostics.Assert(false, string.Create(System.Globalization.CultureInfo.InvariantCulture, $"One of the predefined parameter sets should have been specified, instead we got: {ParameterSetName}"));
                     break;
             }
         }
@@ -1075,7 +1075,7 @@ protected override void ProcessRecord()
     #region NewPSDriveCommand
 
     /// <summary>
-    /// Mounts a drive in the Monad namespace.
+    /// Mounts a drive in PowerShell runspace.
     /// </summary>
     [Cmdlet(VerbsCommon.New, "PSDrive", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low,
         SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096815")]
@@ -1129,6 +1129,7 @@ public string Description
         /// Gets or sets the scope identifier for the drive being created.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
 #if !UNIX
@@ -1477,7 +1478,7 @@ internal List<PSDriveInfo> GetMatchingDrives(
     #region RemovePSDriveCommand
 
     /// <summary>
-    /// Removes a drive that is mounted in the Monad namespace.
+    /// Removes a drive that is mounted in the PowerShell runspace.
     /// </summary>
     [Cmdlet(VerbsCommon.Remove, "PSDrive", DefaultParameterSetName = NameParameterSet, SupportsShouldProcess = true, SupportsTransactions = true,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097050")]
@@ -1533,6 +1534,7 @@ public string[] PSProvider
         /// global scope until a drive of the given name is found to remove.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
@@ -1653,7 +1655,7 @@ protected override void ProcessRecord()
     #region GetPSDriveCommand
 
     /// <summary>
-    /// Gets a specified or listing of drives that are mounted in the Monad
+    /// Gets a specified or listing of drives that are mounted in PowerShell
     /// namespace.
     /// </summary>
     [Cmdlet(VerbsCommon.Get, "PSDrive", DefaultParameterSetName = NameParameterSet, SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096494")]
@@ -1701,6 +1703,7 @@ public string[] LiteralName
         /// Gets or sets the scope parameter to the command.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
@@ -2699,7 +2702,7 @@ protected override void ProcessRecord()
                         try
                         {
                             System.IO.DirectoryInfo di = new(providerPath);
-                            if (di != null && (di.Attributes & System.IO.FileAttributes.ReparsePoint) != 0)
+                            if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(di))
                             {
                                 shouldRecurse = false;
                                 treatAsFile = true;
@@ -2715,7 +2718,7 @@ protected override void ProcessRecord()
                     {
                         // Get the localized prompt string
 
-                        string prompt = StringUtil.Format(NavigationResources.RemoveItemWithChildren, resolvedPath.Path);
+                        string prompt = StringUtil.Format(NavigationResources.RemoveItemWithChildren, providerPath);
 
                         // Confirm the user wants to remove all children and the item even if
                         // they did not specify -recurse
@@ -4128,7 +4131,7 @@ public class GetPSProviderCommand : CoreCommandBase
         /// Gets or sets the provider that will be removed.
         /// </summary>
         [Parameter(Position = 0, ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string[] PSProvider
         {
             get => _provider;
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/NewPropertyCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/NewPropertyCommand.cs
index b2b9e6c1a85..fb134ce7a11 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/NewPropertyCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/NewPropertyCommand.cs
@@ -1,7 +1,11 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Management.Automation;
+using System.Management.Automation.Language;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -63,6 +67,9 @@ public string[] LiteralPath
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true)]
         [Alias("Type")]
+#if !UNIX
+        [ArgumentCompleter(typeof(PropertyTypeArgumentCompleter))]
+#endif
         public string PropertyType { get; set; }
 
         /// <summary>
@@ -175,4 +182,114 @@ protected override void ProcessRecord()
         #endregion Command code
 
     }
+
+#if !UNIX
+    /// <summary>
+    /// Provides argument completion for PropertyType parameter.
+    /// </summary>
+    public class PropertyTypeArgumentCompleter : IArgumentCompleter
+    {
+        private static readonly CompletionHelpers.CompletionDisplayInfoMapper RegistryPropertyTypeDisplayInfoMapper = registryPropertyType => registryPropertyType switch
+        {
+            "String" => (
+                ToolTip: TabCompletionStrings.RegistryStringToolTip,
+                ListItemText: "String"),
+            "ExpandString" => (
+                ToolTip: TabCompletionStrings.RegistryExpandStringToolTip,
+                ListItemText: "ExpandString"),
+            "Binary" => (
+                ToolTip: TabCompletionStrings.RegistryBinaryToolTip,
+                ListItemText: "Binary"),
+            "DWord" => (
+                ToolTip: TabCompletionStrings.RegistryDWordToolTip,
+                ListItemText: "DWord"),
+            "MultiString" => (
+                ToolTip: TabCompletionStrings.RegistryMultiStringToolTip,
+                ListItemText: "MultiString"),
+            "QWord" => (
+                ToolTip: TabCompletionStrings.RegistryQWordToolTip,
+                ListItemText: "QWord"),
+            _ => (
+                ToolTip: TabCompletionStrings.RegistryUnknownToolTip,
+                ListItemText: "Unknown"),
+        };
+
+        private static readonly IReadOnlyList<string> s_RegistryPropertyTypes = new List<string>(capacity: 7)
+        {
+            "String",
+            "ExpandString",
+            "Binary",
+            "DWord",
+            "MultiString",
+            "QWord",
+            "Unknown"
+        };
+
+        /// <summary>
+        /// Returns completion results for PropertyType parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of Completion Results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
+                => IsRegistryProvider(fakeBoundParameters)
+                    ? CompletionHelpers.GetMatchingResults(
+                        wordToComplete,
+                        possibleCompletionValues: s_RegistryPropertyTypes,
+                        displayInfoMapper: RegistryPropertyTypeDisplayInfoMapper,
+                        resultType: CompletionResultType.ParameterValue)
+                    : [];
+
+        /// <summary>
+        /// Checks if parameter paths are from Registry provider.
+        /// </summary>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>Boolean indicating if paths are from Registry Provider.</returns>
+        private static bool IsRegistryProvider(IDictionary fakeBoundParameters)
+        {
+            Collection<PathInfo> paths;
+
+            if (fakeBoundParameters.Contains("Path"))
+            {
+                paths = ResolvePath(fakeBoundParameters["Path"], isLiteralPath: false);
+            }
+            else if (fakeBoundParameters.Contains("LiteralPath"))
+            {
+                paths = ResolvePath(fakeBoundParameters["LiteralPath"], isLiteralPath: true);
+            }
+            else
+            {
+                paths = ResolvePath(@".\", isLiteralPath: false);
+            }
+
+            return paths.Count > 0 && paths[0].Provider.NameEquals("Registry");
+        }
+
+        /// <summary>
+        /// Resolve path or literal path using Resolve-Path.
+        /// </summary>
+        /// <param name="path">The path to resolve.</param>
+        /// <param name="isLiteralPath">Specifies if path is literal path.</param>
+        /// <returns>Collection of Pathinfo objects.</returns>
+        private static Collection<PathInfo> ResolvePath(object path, bool isLiteralPath)
+        {
+            using var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
+
+            ps.AddCommand("Microsoft.PowerShell.Management\\Resolve-Path");
+            ps.AddParameter(isLiteralPath ? "LiteralPath" : "Path", path);
+
+            Collection<PathInfo> output = ps.Invoke<PathInfo>();
+
+            return output;
+        }
+    }
+#endif
 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ParsePathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ParsePathCommand.cs
index d56a20faba0..ca616301ebb 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ParsePathCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ParsePathCommand.cs
@@ -12,8 +12,8 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// A command to resolve MSH paths containing glob characters to
-    /// MSH paths that match the glob strings.
+    /// A command to resolve PowerShell paths containing glob characters to
+    /// PowerShell paths that match the glob strings.
     /// </summary>
     [Cmdlet(VerbsCommon.Split, "Path", DefaultParameterSetName = "ParentSet", SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097149")]
     [OutputType(typeof(string), ParameterSetName = new[] { leafSet,
@@ -105,7 +105,7 @@ public string[] LiteralPath
         /// <value>
         /// If true the qualifier of the path will be returned.
         /// The qualifier is the drive or provider that is qualifying
-        /// the MSH path.
+        /// the PowerShell path.
         /// </value>
         [Parameter(ParameterSetName = qualifierSet, Mandatory = true, ValueFromPipelineByPropertyName = true)]
         public SwitchParameter Qualifier { get; set; }
@@ -116,7 +116,7 @@ public string[] LiteralPath
         /// <value>
         /// If true the qualifier of the path will be returned.
         /// The qualifier is the drive or provider that is qualifying
-        /// the MSH path.
+        /// the PowerShell path.
         /// </value>
         [Parameter(ParameterSetName = noQualifierSet, Mandatory = true, ValueFromPipelineByPropertyName = true)]
         public SwitchParameter NoQualifier { get; set; }
@@ -289,137 +289,125 @@ protected override void ProcessRecord()
             {
                 string result = null;
 
-                switch (ParameterSetName)
+                // Check switch parameters in order of specificity
+                if (IsAbsolute)
                 {
-                    case isAbsoluteSet:
-                        string ignored;
-                        bool isPathAbsolute =
-                            SessionState.Path.IsPSAbsolute(pathsToParse[index], out ignored);
+                    string ignored;
+                    bool isPathAbsolute =
+                        SessionState.Path.IsPSAbsolute(pathsToParse[index], out ignored);
 
-                        WriteObject(isPathAbsolute);
-                        continue;
+                    WriteObject(isPathAbsolute);
+                    continue;
+                }
+                else if (Qualifier)
+                {
+                    int separatorIndex = pathsToParse[index].IndexOf(':');
 
-                    case qualifierSet:
-                        int separatorIndex = pathsToParse[index].IndexOf(':');
+                    if (separatorIndex < 0)
+                    {
+                        FormatException e =
+                            new(
+                                StringUtil.Format(NavigationResources.ParsePathFormatError, pathsToParse[index]));
+                        WriteError(
+                            new ErrorRecord(
+                                e,
+                                "ParsePathFormatError", // RENAME
+                                ErrorCategory.InvalidArgument,
+                                pathsToParse[index]));
+                        continue;
+                    }
+                    else
+                    {
+                        // Check to see if it is provider or drive qualified
 
-                        if (separatorIndex < 0)
-                        {
-                            FormatException e =
-                                new(
-                                    StringUtil.Format(NavigationResources.ParsePathFormatError, pathsToParse[index]));
-                            WriteError(
-                                new ErrorRecord(
-                                    e,
-                                    "ParsePathFormatError", // RENAME
-                                    ErrorCategory.InvalidArgument,
-                                    pathsToParse[index]));
-                            continue;
-                        }
-                        else
+                        if (SessionState.Path.IsProviderQualified(pathsToParse[index]))
                         {
-                            // Check to see if it is provider or drive qualified
-
-                            if (SessionState.Path.IsProviderQualified(pathsToParse[index]))
-                            {
-                                // The plus 2 is for the length of the provider separator
-                                // which is "::"
-
-                                result =
-                                    pathsToParse[index].Substring(
-                                        0,
-                                        separatorIndex + 2);
-                            }
-                            else
-                            {
-                                result =
-                                    pathsToParse[index].Substring(
-                                        0,
-                                        separatorIndex + 1);
-                            }
-                        }
+                            // The plus 2 is for the length of the provider separator
+                            // which is "::"
 
-                        break;
-
-                    case parentSet:
-                    case literalPathSet:
-                        try
-                        {
                             result =
-                                SessionState.Path.ParseParent(
-                                    pathsToParse[index],
-                                    string.Empty,
-                                    CmdletProviderContext,
-                                    true);
+                                pathsToParse[index].Substring(
+                                    0,
+                                    separatorIndex + 2);
                         }
-                        catch (PSNotSupportedException)
-                        {
-                            // Since getting the parent path is not supported,
-                            // the provider must be a container, item, or drive
-                            // provider.  Since the paths for these types of
-                            // providers can't be split, asking for the parent
-                            // is asking for an empty string.
-                            result = string.Empty;
-                        }
-
-                        break;
-
-                    case leafSet:
-                    case leafBaseSet:
-                    case extensionSet:
-                        try
+                        else
                         {
-                            // default handles leafSet
                             result =
-                                SessionState.Path.ParseChildName(
-                                    pathsToParse[index],
-                                    CmdletProviderContext,
-                                    true);
-                            if (LeafBase)
-                            {
-                                result = System.IO.Path.GetFileNameWithoutExtension(result);
-                            }
-                            else if (Extension)
-                            {
-                                result = System.IO.Path.GetExtension(result);
-                            }
+                                pathsToParse[index].Substring(
+                                    0,
+                                    separatorIndex + 1);
                         }
-                        catch (PSNotSupportedException)
+                    }
+                }
+                else if (Leaf || LeafBase || Extension)
+                {
+                    try
+                    {
+                        result =
+                            SessionState.Path.ParseChildName(
+                                pathsToParse[index],
+                                CmdletProviderContext,
+                                true);
+                        if (LeafBase)
                         {
-                            // Since getting the leaf part of a path is not supported,
-                            // the provider must be a container, item, or drive
-                            // provider.  Since the paths for these types of
-                            // providers can't be split, asking for the leaf
-                            // is asking for the specified path back.
-                            result = pathsToParse[index];
+                            result = System.IO.Path.GetFileNameWithoutExtension(result);
                         }
-                        catch (DriveNotFoundException driveNotFound)
+                        else if (Extension)
                         {
-                            WriteError(
-                                new ErrorRecord(
-                                    driveNotFound.ErrorRecord,
-                                    driveNotFound));
-                            continue;
-                        }
-                        catch (ProviderNotFoundException providerNotFound)
-                        {
-                            WriteError(
-                                new ErrorRecord(
-                                    providerNotFound.ErrorRecord,
-                                    providerNotFound));
-                            continue;
+                            result = System.IO.Path.GetExtension(result);
                         }
-
-                        break;
-
-                    case noQualifierSet:
-                        result = RemoveQualifier(pathsToParse[index]);
-                        break;
-
-                    default:
-                        Dbg.Diagnostics.Assert(
-                            false,
-                            "Only a known parameter set should be called");
-                        break;
+                    }
+                    catch (PSNotSupportedException)
+                    {
+                        // Since getting the leaf part of a path is not supported,
+                        // the provider must be a container, item, or drive
+                        // provider.  Since the paths for these types of
+                        // providers can't be split, asking for the leaf
+                        // is asking for the specified path back.
+                        result = pathsToParse[index];
+                    }
+                    catch (DriveNotFoundException driveNotFound)
+                    {
+                        WriteError(
+                            new ErrorRecord(
+                                driveNotFound.ErrorRecord,
+                                driveNotFound));
+                        continue;
+                    }
+                    catch (ProviderNotFoundException providerNotFound)
+                    {
+                        WriteError(
+                            new ErrorRecord(
+                                providerNotFound.ErrorRecord,
+                                providerNotFound));
+                        continue;
+                    }
+                }
+                else if (NoQualifier)
+                {
+                    result = RemoveQualifier(pathsToParse[index]);
+                }
+                else
+                {
+                    // None of the switch parameters are true: default to -Parent behavior
+                    try
+                    {
+                        result =
+                            SessionState.Path.ParseParent(
+                                pathsToParse[index],
+                                string.Empty,
+                                CmdletProviderContext,
+                                true);
+                    }
+                    catch (PSNotSupportedException)
+                    {
+                        // Since getting the parent path is not supported,
+                        // the provider must be a container, item, or drive
+                        // provider.  Since the paths for these types of
+                        // providers can't be split, asking for the parent
+                        // is asking for an empty string.
+                        result = string.Empty;
+                    }
                 }
 
                 if (result != null)
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/PingPathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/PingPathCommand.cs
deleted file mode 100644
index 9bebcd076ca..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/PingPathCommand.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The valid values for the -PathType parameter for test-path.
-    /// </summary>
-    public enum TestPathType
-    {
-        /// <summary>
-        /// If the item at the path exists, true will be returned.
-        /// </summary>
-        Any,
-
-        /// <summary>
-        /// If the item at the path exists and is a container, true will be returned.
-        /// </summary>
-        Container,
-
-        /// <summary>
-        /// If the item at the path exists and is not a container, true will be returned.
-        /// </summary>
-        Leaf
-    }
-
-    /// <summary>
-    /// A command to determine if an item exists at a specified path.
-    /// </summary>
-    [Cmdlet(VerbsDiagnostic.Test, "Path", DefaultParameterSetName = "Path", SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097057")]
-    [OutputType(typeof(bool))]
-    public class TestPathCommand : CoreCommandWithCredentialsBase
-    {
-        #region Parameters
-
-        /// <summary>
-        /// Gets or sets the path parameter to the command.
-        /// </summary>
-        [Parameter(Position = 0, ParameterSetName = "Path",
-                    Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
-        [AllowNull]
-        [AllowEmptyCollection]
-        [AllowEmptyString]
-        public string[] Path
-        {
-            get { return _paths; }
-
-            set { _paths = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets the literal path parameter to the command.
-        /// </summary>
-        [Parameter(ParameterSetName = "LiteralPath",
-                   Mandatory = true, ValueFromPipeline = false, ValueFromPipelineByPropertyName = true)]
-        [Alias("PSPath", "LP")]
-        [AllowNull]
-        [AllowEmptyCollection]
-        [AllowEmptyString]
-        public string[] LiteralPath
-        {
-            get
-            {
-                return _paths;
-            }
-
-            set
-            {
-                base.SuppressWildcardExpansion = true;
-                _paths = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the filter property.
-        /// </summary>
-        [Parameter]
-        public override string Filter
-        {
-            get { return base.Filter; }
-
-            set { base.Filter = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets the include property.
-        /// </summary>
-        [Parameter]
-        public override string[] Include
-        {
-            get { return base.Include; }
-
-            set { base.Include = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets the exclude property.
-        /// </summary>
-        [Parameter]
-        public override string[] Exclude
-        {
-            get { return base.Exclude; }
-
-            set { base.Exclude = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets the isContainer property.
-        /// </summary>
-        [Parameter]
-        [Alias("Type")]
-        public TestPathType PathType { get; set; } = TestPathType.Any;
-
-        /// <summary>
-        /// Gets or sets the IsValid parameter.
-        /// </summary>
-        [Parameter]
-        public SwitchParameter IsValid { get; set; } = new SwitchParameter();
-
-        /// <summary>
-        /// A virtual method for retrieving the dynamic parameters for a cmdlet. Derived cmdlets
-        /// that require dynamic parameters should override this method and return the
-        /// dynamic parameter object.
-        /// </summary>
-        /// <param name="context">
-        /// The context under which the command is running.
-        /// </param>
-        /// <returns>
-        /// An object representing the dynamic parameters for the cmdlet or null if there
-        /// are none.
-        /// </returns>
-        internal override object GetDynamicParameters(CmdletProviderContext context)
-        {
-            object result = null;
-
-            if (this.PathType == TestPathType.Any && !IsValid)
-            {
-                if (Path != null && Path.Length > 0 && Path[0] != null)
-                {
-                    result = InvokeProvider.Item.ItemExistsDynamicParameters(Path[0], context);
-                }
-                else
-                {
-                    result = InvokeProvider.Item.ItemExistsDynamicParameters(".", context);
-                }
-            }
-
-            return result;
-        }
-
-        #endregion Parameters
-
-        #region parameter data
-
-        /// <summary>
-        /// The path to the item to ping.
-        /// </summary>
-        private string[] _paths;
-
-        #endregion parameter data
-
-        #region Command code
-
-        /// <summary>
-        /// Determines if an item at the specified path exists.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (_paths == null || _paths.Length == 0)
-            {
-                WriteError(new ErrorRecord(
-                    new ArgumentNullException(TestPathResources.PathIsNullOrEmptyCollection),
-                    "NullPathNotPermitted",
-                    ErrorCategory.InvalidArgument,
-                    Path));
-
-                return;
-            }
-
-            CmdletProviderContext currentContext = CmdletProviderContext;
-
-            foreach (string path in _paths)
-            {
-                bool result = false;
-
-                if (path == null)
-                {
-                    WriteError(new ErrorRecord(
-                        new ArgumentNullException(TestPathResources.PathIsNullOrEmptyCollection),
-                        "NullPathNotPermitted",
-                        ErrorCategory.InvalidArgument,
-                        Path));
-                    continue;
-                }
-
-                if (string.IsNullOrWhiteSpace(path))
-                {
-                    WriteObject(result);
-                    continue;
-                }
-
-                try
-                {
-                    if (IsValid)
-                    {
-                        result = SessionState.Path.IsValid(path, currentContext);
-                    }
-                    else
-                    {
-                        if (this.PathType == TestPathType.Container)
-                        {
-                            result = InvokeProvider.Item.IsContainer(path, currentContext);
-                        }
-                        else if (this.PathType == TestPathType.Leaf)
-                        {
-                            result =
-                                InvokeProvider.Item.Exists(path, currentContext) &&
-                                !InvokeProvider.Item.IsContainer(path, currentContext);
-                        }
-                        else
-                        {
-                            result = InvokeProvider.Item.Exists(path, currentContext);
-                        }
-                    }
-                }
-
-                // Any of the known exceptions means the path does not exist.
-                catch (PSNotSupportedException)
-                {
-                }
-                catch (DriveNotFoundException)
-                {
-                }
-                catch (ProviderNotFoundException)
-                {
-                }
-                catch (ItemNotFoundException)
-                {
-                }
-
-                WriteObject(result);
-            }
-        }
-        #endregion Command code
-
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
index 6656dcc549b..91efda12263 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Collections.Specialized;
 using System.ComponentModel; // Win32Exception
 using System.Diagnostics; // Process class
@@ -11,18 +12,16 @@
 using System.IO;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Language;
 using System.Net;
 using System.Runtime.InteropServices;
 using System.Runtime.Serialization;
-using System.Security;
 using System.Security.Principal;
 using System.Text;
 using System.Threading;
 using Microsoft.Management.Infrastructure;
 using Microsoft.PowerShell.Commands.Internal;
 using Microsoft.Win32.SafeHandles;
-using DWORD = System.UInt32;
-using FileNakedHandle = System.IntPtr;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -266,30 +265,17 @@ private void RetrieveProcessesByInput()
         }
 
         /// <summary>
-        /// Retrieve the master list of all processes.
+        /// Gets an array of all processes.
         /// </summary>
-        /// <value></value>
+        /// <value>An array of <see cref="Process"/> components that represents all the process resources.</value>
         /// <exception cref="System.Security.SecurityException">
         /// MSDN does not document the list of exceptions,
         /// but it is reasonable to expect that SecurityException is
         /// among them.  Errors here will terminate the cmdlet.
         /// </exception>
-        internal Process[] AllProcesses
-        {
-            get
-            {
-                if (_allProcesses == null)
-                {
-                    List<Process> processes = new();
-                    processes.AddRange(Process.GetProcesses());
-                    _allProcesses = processes.ToArray();
-                }
+        internal Process[] AllProcesses => _allProcesses ??= Process.GetProcesses();
 
-                return _allProcesses;
-            }
-        }
-
-        private Process[] _allProcesses = null;
+        private Process[] _allProcesses;
 
         /// <summary>
         /// Add <paramref name="process"/> to <see cref="_matchingProcesses"/>,
@@ -532,27 +518,20 @@ public override Process[] InputObject
         [Parameter(ParameterSetName = NameWithUserNameParameterSet, Mandatory = true)]
         [Parameter(ParameterSetName = IdWithUserNameParameterSet, Mandatory = true)]
         [Parameter(ParameterSetName = InputObjectWithUserNameParameterSet, Mandatory = true)]
-        public SwitchParameter IncludeUserName
-        {
-            get { return _includeUserName; }
-
-            set { _includeUserName = value; }
-        }
-
-        private bool _includeUserName = false;
+        public SwitchParameter IncludeUserName { get; set; }
 
-        ///<summary>
+        /// <summary>
         /// To display the modules of a process.
-        ///</summary>
+        /// </summary>
         [Parameter(ParameterSetName = NameParameterSet)]
         [Parameter(ParameterSetName = IdParameterSet)]
         [Parameter(ParameterSetName = InputObjectParameterSet)]
         [ValidateNotNull]
         public SwitchParameter Module { get; set; }
 
-        ///<summary>
+        /// <summary>
         /// To display the fileversioninfo of the main module of a process.
-        ///</summary>
+        /// </summary>
         [Parameter(ParameterSetName = NameParameterSet)]
         [Parameter(ParameterSetName = IdParameterSet)]
         [Parameter(ParameterSetName = InputObjectParameterSet)]
@@ -564,20 +543,6 @@ public SwitchParameter IncludeUserName
 
         #region Overrides
 
-        /// <summary>
-        /// Check the elevation mode if IncludeUserName is specified.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            // The parameter 'IncludeUserName' requires administrator privilege
-            if (IncludeUserName.IsPresent && !Utils.IsAdministrator())
-            {
-                var ex = new InvalidOperationException(ProcessResources.IncludeUserNameRequiresElevation);
-                var er = new ErrorRecord(ex, "IncludeUserNameRequiresElevation", ErrorCategory.InvalidOperation, null);
-                ThrowTerminatingError(er);
-            }
-        }
-
         /// <summary>
         /// Write the process objects.
         /// </summary>
@@ -653,6 +618,10 @@ protected override void ProcessRecord()
                             WriteNonTerminatingError(process, ex, ProcessResources.CouldNotEnumerateModules, "CouldNotEnumerateModules", ErrorCategory.PermissionDenied);
                         }
                     }
+                    catch (PipelineStoppedException)
+                    {
+                        throw;
+                    }
                     catch (Exception exception)
                     {
                         WriteNonTerminatingError(process, exception, ProcessResources.CouldNotEnumerateModules, "CouldNotEnumerateModules", ErrorCategory.PermissionDenied);
@@ -662,7 +631,7 @@ protected override void ProcessRecord()
                 {
                     try
                     {
-                        ProcessModule mainModule = PsUtils.GetMainModule(process);
+                        ProcessModule mainModule = process.MainModule;
                         if (mainModule != null)
                         {
                             WriteObject(mainModule.FileVersionInfo, true);
@@ -682,7 +651,7 @@ protected override void ProcessRecord()
                         {
                             if (exception.HResult == 299)
                             {
-                                WriteObject(PsUtils.GetMainModule(process).FileVersionInfo, true);
+                                WriteObject(process.MainModule?.FileVersionInfo, true);
                             }
                             else
                             {
@@ -701,7 +670,7 @@ protected override void ProcessRecord()
                 }
                 else
                 {
-                    WriteObject(IncludeUserName.IsPresent ? AddUserNameToProcess(process) : (object)process);
+                    WriteObject(IncludeUserName.IsPresent ? AddUserNameToProcess(process) : process);
                 }
             }
         }
@@ -752,56 +721,46 @@ private static string RetrieveProcessUserName(Process process)
 
             try
             {
-                do
+                int error;
+                if (!Win32Native.OpenProcessToken(process.Handle, TOKEN_QUERY, out processTokenHandler))
                 {
-                    int error;
-                    if (!Win32Native.OpenProcessToken(process.Handle, TOKEN_QUERY, out processTokenHandler)) { break; }
+                    return null;
+                }
 
-                    // Set the default length to be 256, so it will be sufficient for most cases.
-                    int tokenInfoLength = 256;
-                    tokenUserInfo = Marshal.AllocHGlobal(tokenInfoLength);
-                    if (!Win32Native.GetTokenInformation(processTokenHandler, Win32Native.TOKEN_INFORMATION_CLASS.TokenUser, tokenUserInfo, tokenInfoLength, out tokenInfoLength))
+                // Set the default length to be 256, so it will be sufficient for most cases.
+                int tokenInfoLength = 256;
+                tokenUserInfo = Marshal.AllocHGlobal(tokenInfoLength);
+                if (!Win32Native.GetTokenInformation(processTokenHandler, Win32Native.TOKEN_INFORMATION_CLASS.TokenUser, tokenUserInfo, tokenInfoLength, out tokenInfoLength))
+                {
+                    error = Marshal.GetLastWin32Error();
+                    if (error == Win32Native.ERROR_INSUFFICIENT_BUFFER)
                     {
-                        error = Marshal.GetLastWin32Error();
-                        if (error == Win32Native.ERROR_INSUFFICIENT_BUFFER)
-                        {
-                            Marshal.FreeHGlobal(tokenUserInfo);
-                            tokenUserInfo = Marshal.AllocHGlobal(tokenInfoLength);
+                        Marshal.FreeHGlobal(tokenUserInfo);
+                        tokenUserInfo = Marshal.AllocHGlobal(tokenInfoLength);
 
-                            if (!Win32Native.GetTokenInformation(processTokenHandler, Win32Native.TOKEN_INFORMATION_CLASS.TokenUser, tokenUserInfo, tokenInfoLength, out tokenInfoLength)) { break; }
-                        }
-                        else
+                        if (!Win32Native.GetTokenInformation(processTokenHandler, Win32Native.TOKEN_INFORMATION_CLASS.TokenUser, tokenUserInfo, tokenInfoLength, out tokenInfoLength))
                         {
-                            break;
+                            return null;
                         }
                     }
-
-                    var tokenUser = Marshal.PtrToStructure<Win32Native.TOKEN_USER>(tokenUserInfo);
-
-                    // Max username is defined as UNLEN = 256 in lmcons.h
-                    // Max domainname is defined as DNLEN = CNLEN = 15 in lmcons.h
-                    // The buffer length must be +1, last position is for a null string terminator.
-                    int userNameLength = 257;
-                    int domainNameLength = 16;
-#pragma warning disable CA2014
-                    Span<char> userNameStr = stackalloc char[userNameLength];
-                    Span<char> domainNameStr = stackalloc char[domainNameLength];
-#pragma warning restore CA2014
-                    Win32Native.SID_NAME_USE accountType;
-
-                    // userNameLength and domainNameLength will be set to actual lengths.
-                    if (!Win32Native.LookupAccountSid(null, tokenUser.User.Sid, userNameStr, ref userNameLength, domainNameStr, ref domainNameLength, out accountType))
+                    else
                     {
-                        break;
+                        return null;
                     }
+                }
 
-                    userName = string.Concat(domainNameStr.Slice(0, domainNameLength), "\\", userNameStr.Slice(0, userNameLength));
-                } while (false);
+                var tokenUser = Marshal.PtrToStructure<Win32Native.TOKEN_USER>(tokenUserInfo);
+                SecurityIdentifier sid = new SecurityIdentifier(tokenUser.User.Sid);
+                userName = sid.Translate(typeof(System.Security.Principal.NTAccount)).Value;
             }
             catch (NotSupportedException)
             {
                 // The Process not started yet, or it's a process from a remote machine.
             }
+            catch (IdentityNotMappedException)
+            {
+                // SID cannot be mapped to a user
+            }
             catch (InvalidOperationException)
             {
                 // The Process has exited, Process.Handle will raise this exception.
@@ -826,7 +785,6 @@ private static string RetrieveProcessUserName(Process process)
                     Win32Native.CloseHandle(processTokenHandler);
                 }
             }
-
 #endif
             return userName;
         }
@@ -840,6 +798,7 @@ private static string RetrieveProcessUserName(Process process)
     /// This class implements the Wait-process command.
     /// </summary>
     [Cmdlet(VerbsLifecycle.Wait, "Process", DefaultParameterSetName = "Name", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097146")]
+    [OutputType(typeof(Process))]
     public sealed class WaitProcessCommand : ProcessBaseCommand
     {
         #region Parameters
@@ -914,6 +873,18 @@ public int Timeout
             }
         }
 
+        /// <summary>
+        /// Gets or sets a value indicating whether to return after any one process exits.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter Any { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether to return the Process objects after waiting.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter PassThru { get; set; }
+
         private int _timeout = 0;
         private bool _timeOutSpecified;
 
@@ -945,12 +916,9 @@ public void Dispose()
         // Handle Exited event and display process information.
         private void myProcess_Exited(object sender, System.EventArgs e)
         {
-            if (System.Threading.Interlocked.Decrement(ref _numberOfProcessesToWaitFor) == 0)
+            if (Any || (Interlocked.Decrement(ref _numberOfProcessesToWaitFor) == 0))
             {
-                if (_waitHandle != null)
-                {
-                    _waitHandle.Set();
-                }
+                _waitHandle?.Set();
             }
         }
 
@@ -1000,7 +968,12 @@ protected override void EndProcessing()
             {
                 try
                 {
-                    if (!process.HasExited)
+                    // Check for processes that exit too soon for us to add an event.
+                    if (Any && process.HasExited)
+                    {
+                        _waitHandle.Set();
+                    }
+                    else if (!process.HasExited)
                     {
                         process.EnableRaisingEvents = true;
                         process.Exited += myProcess_Exited;
@@ -1016,11 +989,12 @@ protected override void EndProcessing()
                 }
             }
 
+            bool hasTimedOut = false;
             if (_numberOfProcessesToWaitFor > 0)
             {
                 if (_timeOutSpecified)
                 {
-                    _waitHandle.WaitOne(_timeout * 1000);
+                    hasTimedOut = !_waitHandle.WaitOne(_timeout * 1000);
                 }
                 else
                 {
@@ -1028,34 +1002,37 @@ protected override void EndProcessing()
                 }
             }
 
-            foreach (Process process in _processList)
+            if (hasTimedOut || (!Any && _numberOfProcessesToWaitFor > 0))
             {
-                try
+                foreach (Process process in _processList)
                 {
-                    if (!process.HasExited)
+                    try
                     {
-                        string message = StringUtil.Format(ProcessResources.ProcessNotTerminated, new object[] { process.ProcessName, process.Id });
-                        ErrorRecord errorRecord = new(new TimeoutException(message), "ProcessNotTerminated", ErrorCategory.CloseError, process);
-                        WriteError(errorRecord);
+                        if (!process.HasExited)
+                        {
+                            string message = StringUtil.Format(ProcessResources.ProcessNotTerminated, new object[] { process.ProcessName, process.Id });
+                            ErrorRecord errorRecord = new(new TimeoutException(message), "ProcessNotTerminated", ErrorCategory.CloseError, process);
+                            WriteError(errorRecord);
+                        }
+                    }
+                    catch (Win32Exception exception)
+                    {
+                        WriteNonTerminatingError(process, exception, ProcessResources.ProcessIsNotTerminated, "ProcessNotTerminated", ErrorCategory.CloseError);
                     }
-                }
-                catch (Win32Exception exception)
-                {
-                    WriteNonTerminatingError(process, exception, ProcessResources.ProcessIsNotTerminated, "ProcessNotTerminated", ErrorCategory.CloseError);
                 }
             }
+
+            if (PassThru)
+            {
+                WriteObject(_processList, enumerateCollection: true);
+            }
         }
 
         /// <summary>
         /// StopProcessing.
         /// </summary>
-        protected override void StopProcessing()
-        {
-            if (_waitHandle != null)
-            {
-                _waitHandle.Set();
-            }
-        }
+        protected override void StopProcessing() => _waitHandle?.Set();
+
         #endregion Overrides
 
     }
@@ -1188,7 +1165,10 @@ protected override void ProcessRecord()
                             SafeGetProcessName(process),
                             SafeGetProcessId(process));
 
-                if (!ShouldProcess(targetString)) { continue; }
+                if (!ShouldProcess(targetString))
+                {
+                    continue;
+                }
 
                 try
                 {
@@ -1346,7 +1326,10 @@ private bool IsProcessOwnedByCurrentUser(Process process)
             }
             finally
             {
-                if (ph != IntPtr.Zero) { Win32Native.CloseHandle(ph); }
+                if (ph != IntPtr.Zero)
+                {
+                    Win32Native.CloseHandle(ph);
+                }
             }
 
             return false;
@@ -1506,7 +1489,10 @@ protected override void ProcessRecord()
                             SafeGetProcessName(process),
                             SafeGetProcessId(process));
 
-                if (!ShouldProcess(targetMessage)) { continue; }
+                if (!ShouldProcess(targetMessage))
+                {
+                    continue;
+                }
 
                 // Sometimes Idle process has processid zero,so handle that because we cannot attach debugger to it.
                 if (process.Id == 0)
@@ -1521,7 +1507,10 @@ protected override void ProcessRecord()
                 {
                     // If the process has exited, we skip it. If the process is from a remote
                     // machine, then we generate a non-terminating error.
-                    if (process.HasExited) { continue; }
+                    if (process.HasExited)
+                    {
+                        continue;
+                    }
                 }
                 catch (NotSupportedException ex)
                 {
@@ -1572,8 +1561,7 @@ private void AttachDebuggerToProcess(Process process)
                     }
                     catch (CimException e)
                     {
-                        string message = e.Message;
-                        if (!string.IsNullOrEmpty(message)) { message = message.Trim(); }
+                        string message = e.Message?.Trim();
 
                         var errorRecord = new ErrorRecord(
                                 new InvalidOperationException(StringUtil.Format(ProcessResources.DebuggerError, message)),
@@ -1589,16 +1577,17 @@ private void AttachDebuggerToProcess(Process process)
         /// </summary>
         private static string MapReturnCodeToErrorMessage(int returnCode)
         {
-            string errorMessage = string.Empty;
-            switch (returnCode)
+            string errorMessage = returnCode switch
             {
-                case 2: errorMessage = ProcessResources.AttachDebuggerReturnCode2; break;
-                case 3: errorMessage = ProcessResources.AttachDebuggerReturnCode3; break;
-                case 8: errorMessage = ProcessResources.AttachDebuggerReturnCode8; break;
-                case 9: errorMessage = ProcessResources.AttachDebuggerReturnCode9; break;
-                case 21: errorMessage = ProcessResources.AttachDebuggerReturnCode21; break;
-                default: Diagnostics.Assert(false, "Unreachable code."); break;
-            }
+                2 => ProcessResources.AttachDebuggerReturnCode2,
+                3 => ProcessResources.AttachDebuggerReturnCode3,
+                8 => ProcessResources.AttachDebuggerReturnCode8,
+                9 => ProcessResources.AttachDebuggerReturnCode9,
+                21 => ProcessResources.AttachDebuggerReturnCode21,
+                _ => string.Empty
+            };
+
+            Diagnostics.Assert(!string.IsNullOrEmpty(errorMessage), "Error message should not be null or empty.");
 
             return errorMessage;
         }
@@ -1614,7 +1603,7 @@ private static string MapReturnCodeToErrorMessage(int returnCode)
     [OutputType(typeof(Process))]
     public sealed class StartProcessCommand : PSCmdlet, IDisposable
     {
-        private ManualResetEvent _waithandle = null;
+        private readonly CancellationTokenSource _cancellationTokenSource = new();
         private bool _isDefaultSetParameterSpecified = false;
 
         #region Parameters
@@ -1687,7 +1676,7 @@ public SwitchParameter LoadUserProfile
         private SwitchParameter _loaduserprofile = SwitchParameter.Present;
 
         /// <summary>
-        /// Starts process in a new window.
+        /// Starts process in the current console window.
         /// </summary>
         [Parameter(ParameterSetName = "Default")]
         [Alias("nnw")]
@@ -1787,6 +1776,7 @@ public string RedirectStandardOutput
         /// </remarks>
         [Parameter(ParameterSetName = "UseShellExecute")]
         [ValidateNotNullOrEmpty]
+        [ArgumentCompleter(typeof(VerbArgumentCompleter))]
         public string Verb { get; set; }
 
         /// <summary>
@@ -1837,6 +1827,26 @@ public SwitchParameter UseNewEnvironment
 
         private SwitchParameter _UseNewEnvironment;
 
+        /// <summary>
+        /// Gets or sets the environment variables for the process.
+        /// </summary>
+        [Parameter]
+        public Hashtable Environment
+        {
+            get
+            {
+                return _environment;
+            }
+
+            set
+            {
+                _environment = value;
+                _isDefaultSetParameterSpecified = true;
+            }
+        }
+
+        private Hashtable _environment;
+
         #endregion
 
         #region overrides
@@ -1893,6 +1903,7 @@ protected override void BeginProcessing()
             }
             catch (CommandNotFoundException)
             {
+                // codeql[cs/microsoft/command-line-injection-shell-execution] - This is expected Poweshell behavior where user inputted paths are supported for the context of this method. The user assumes trust for the file path they are specifying and the process is on the user's system except for remoting in which case restricted remoting security guidelines should be used.
                 startInfo.FileName = FilePath;
 #if UNIX
                 // Arguments are passed incorrectly to the executable used for ShellExecute and not to filename https://github.com/dotnet/corefx/issues/30718
@@ -1925,8 +1936,12 @@ protected override void BeginProcessing()
             }
             else
             {
-                // Working Directory not specified -> Assign Current Path.
-                startInfo.WorkingDirectory = PathUtils.ResolveFilePath(this.SessionState.Path.CurrentFileSystemLocation.Path, this, isLiteralPath: true);
+                // Working Directory not specified -> Assign Current Path, but only if it still exists
+                var currentDirectory = PathUtils.ResolveFilePath(this.SessionState.Path.CurrentFileSystemLocation.Path, this, isLiteralPath: true);
+                if (Directory.Exists(currentDirectory))
+                {
+                    startInfo.WorkingDirectory = currentDirectory;
+                }
             }
 
             if (this.ParameterSetName.Equals("Default"))
@@ -1939,13 +1954,20 @@ protected override void BeginProcessing()
                 if (_UseNewEnvironment)
                 {
                     startInfo.EnvironmentVariables.Clear();
-                    LoadEnvironmentVariable(startInfo, Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine));
-                    LoadEnvironmentVariable(startInfo, Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User));
+                    LoadEnvironmentVariable(startInfo, System.Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine));
+                    LoadEnvironmentVariable(startInfo, System.Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User));
+                }
+
+                if (_environment != null)
+                {
+                    LoadEnvironmentVariable(startInfo, _environment);
                 }
 
                 startInfo.WindowStyle = _windowstyle;
 
-                if (_nonewwindow)
+                // When starting a process as another user, the 'CreateNoWindow' property value is ignored and a new window is created.
+                // See details at https://learn.microsoft.com/dotnet/api/system.diagnostics.processstartinfo.createnowindow?view=net-9.0#remarks
+                if (_nonewwindow && _credential is null)
                 {
                     startInfo.CreateNoWindow = _nonewwindow;
                 }
@@ -2025,15 +2047,89 @@ protected override void BeginProcessing()
             }
             else if (ParameterSetName.Equals("UseShellExecute"))
             {
-                if (Verb != null) { startInfo.Verb = Verb; }
+                if (Verb != null)
+                {
+                    startInfo.Verb = Verb;
+                }
 
                 startInfo.WindowStyle = _windowstyle;
             }
 
             string targetMessage = StringUtil.Format(ProcessResources.StartProcessTarget, startInfo.FileName, startInfo.Arguments.Trim());
-            if (!ShouldProcess(targetMessage)) { return; }
+            if (!ShouldProcess(targetMessage))
+            {
+                return;
+            }
 
-            Process process = Start(startInfo);
+            Process process = null;
+
+#if !UNIX
+            using JobProcessCollection jobObject = new();
+            bool? jobAssigned = null;
+#endif
+            if (startInfo.UseShellExecute)
+            {
+                process = StartWithShellExecute(startInfo);
+            }
+            else
+            {
+#if UNIX
+                process = new Process() { StartInfo = startInfo };
+                SetupInputOutputRedirection(process);
+                process.Start();
+                if (process.StartInfo.RedirectStandardOutput)
+                {
+                    process.BeginOutputReadLine();
+                }
+
+                if (process.StartInfo.RedirectStandardError)
+                {
+                    process.BeginErrorReadLine();
+                }
+
+                if (process.StartInfo.RedirectStandardInput)
+                {
+                    WriteToStandardInput(process);
+                }
+#else
+                using ProcessInformation processInfo = StartWithCreateProcess(startInfo);
+                process = Process.GetProcessById(processInfo.ProcessId);
+
+                // Starting a process as another user might make it impossible
+                // to get the process handle from the S.D.Process object. Use
+                // the ALL_ACCESS token from CreateProcess here to setup the
+                // job object assignment early if -Wait was specified.
+                // https://github.com/PowerShell/PowerShell/issues/17033
+                if (Wait)
+                {
+                    jobAssigned = jobObject.AssignProcessToJobObject(processInfo.Process);
+                }
+
+                // Since the process wasn't spawned by .NET, we need to trigger .NET to get a lock on the handle of the process.
+                // Otherwise, accessing properties like `ExitCode` will throw the following exception:
+                //   "Process was not started by this object, so requested information cannot be determined."
+                // Fetching the process handle will trigger the `Process` object to update its internal state by calling `SetProcessHandle`,
+                // the result is discarded as it's not used later in this code.
+                try
+                {
+                    _ = process.Handle;
+                }
+                catch (Win32Exception e)
+                {
+                    // If the caller was not an admin and the process was started with another user's credentials .NET
+                    // won't be able to retrieve the process handle. As this is not a critical failure we treat this as
+                    // a warning.
+                    if (PassThru)
+                    {
+                        string msg = StringUtil.Format(ProcessResources.FailedToCreateProcessObject, e.Message);
+                        WriteDebug(msg);
+                    }
+                }
+
+                // Resume the process now that is has been set up.
+                processInfo.Resume();
+#endif
+            }
 
             if (PassThru.IsPresent)
             {
@@ -2056,23 +2152,20 @@ protected override void BeginProcessing()
                     if (!process.HasExited)
                     {
 #if UNIX
-                        process.WaitForExit();
+                        process.WaitForExitAsync(_cancellationTokenSource.Token).GetAwaiter().GetResult();
 #else
-                        _waithandle = new ManualResetEvent(false);
-
-                        // Create and start the job object
-                        ProcessCollection jobObject = new();
-                        if (jobObject.AssignProcessToJobObject(process))
+                        // Add the process to the job, this may have already
+                        // been done in StartWithCreateProcess.
+                        if (jobAssigned == true || (jobAssigned is null && jobObject.AssignProcessToJobObject(process.SafeHandle)))
                         {
                             // Wait for the job object to finish
-                            jobObject.WaitOne(_waithandle);
+                            jobObject.WaitForExit(_cancellationTokenSource.Token);
                         }
-                        else if (!process.HasExited)
+                        else
                         {
                             // WinBlue: 27537 Start-Process -Wait doesn't work in a remote session on Windows 7 or lower.
-                            process.Exited += myProcess_Exited;
-                            process.EnableRaisingEvents = true;
-                            process.WaitForExit();
+                            // A Remote session is in it's own job and nested job support was only added in Windows 8/Server 2012.
+                            process.WaitForExitAsync(_cancellationTokenSource.Token).GetAwaiter().GetResult();
                         }
 #endif
                     }
@@ -2088,51 +2181,27 @@ protected override void BeginProcessing()
         /// <summary>
         /// Implements ^c, after creating a process.
         /// </summary>
-        protected override void StopProcessing()
-        {
-            if (_waithandle != null)
-            {
-                _waithandle.Set();
-            }
-        }
+        protected override void StopProcessing() => _cancellationTokenSource.Cancel();
 
         #endregion
 
         #region IDisposable Overrides
 
         /// <summary>
-        /// Dispose WaitHandle used to honor -Wait parameter.
+        /// Release all resources.
         /// </summary>
+        /// <remarks>
+        /// Dispose WaitHandle used to honor -Wait parameter.
+        /// </remarks>
         public void Dispose()
         {
-            Dispose(true);
-            System.GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool isDisposing)
-        {
-            if (_waithandle != null)
-            {
-                _waithandle.Dispose();
-                _waithandle = null;
-            }
+            _cancellationTokenSource.Dispose();
         }
 
         #endregion
 
         #region Private Methods
 
-        /// <summary>
-        /// When Process exits the wait handle is set.
-        /// </summary>
-        private void myProcess_Exited(object sender, System.EventArgs e)
-        {
-            if (_waithandle != null)
-            {
-                _waithandle.Set();
-            }
-        }
-
         private string ResolveFilePath(string path)
         {
             string filepath = PathUtils.ResolveFilePath(path, this);
@@ -2149,50 +2218,22 @@ private static void LoadEnvironmentVariable(ProcessStartInfo startinfo, IDiction
                     processEnvironment.Remove(entry.Key.ToString());
                 }
 
-                if (entry.Key.ToString().Equals("PATH"))
+                if (entry.Value != null)
                 {
-                    processEnvironment.Add(entry.Key.ToString(), Environment.GetEnvironmentVariable(entry.Key.ToString(), EnvironmentVariableTarget.Machine) + ";" + Environment.GetEnvironmentVariable(entry.Key.ToString(), EnvironmentVariableTarget.User));
-                }
-                else
-                {
-                    processEnvironment.Add(entry.Key.ToString(), entry.Value.ToString());
-                }
-            }
-        }
-
-        private Process Start(ProcessStartInfo startInfo)
-        {
-            Process process = null;
-            if (startInfo.UseShellExecute)
-            {
-                process = StartWithShellExecute(startInfo);
-            }
-            else
-            {
+                    if (entry.Key.ToString().Equals("PATH"))
+                    {
 #if UNIX
-                process = new Process() { StartInfo = startInfo };
-                SetupInputOutputRedirection(process);
-                process.Start();
-                if (process.StartInfo.RedirectStandardOutput)
-                {
-                    process.BeginOutputReadLine();
-                }
-
-                if (process.StartInfo.RedirectStandardError)
-                {
-                    process.BeginErrorReadLine();
-                }
-
-                if (process.StartInfo.RedirectStandardInput)
-                {
-                    WriteToStandardInput(process);
-                }
+                        processEnvironment.Add(entry.Key.ToString(), entry.Value.ToString());
 #else
-                process = StartWithCreateProcess(startInfo);
+                        processEnvironment.Add(entry.Key.ToString(), entry.Value.ToString() + Path.PathSeparator + System.Environment.GetEnvironmentVariable(entry.Key.ToString(), EnvironmentVariableTarget.Machine) + Path.PathSeparator + System.Environment.GetEnvironmentVariable(entry.Key.ToString(), EnvironmentVariableTarget.User));
 #endif
+                    }
+                    else
+                    {
+                        processEnvironment.Add(entry.Key.ToString(), entry.Value.ToString());
+                    }
+                }
             }
-
-            return process;
         }
 
 #if UNIX
@@ -2230,15 +2271,8 @@ private void StreamClosing()
         {
             Thread.Sleep(1000);
 
-            if (_outputWriter != null)
-            {
-                _outputWriter.Dispose();
-            }
-
-            if (_errorWriter != null)
-            {
-                _errorWriter.Dispose();
-            }
+            _outputWriter?.Dispose();
+            _errorWriter?.Dispose();
         }
 
         private void SetupInputOutputRedirection(Process p)
@@ -2299,28 +2333,22 @@ private void WriteToStandardInput(Process p)
             writer.Dispose();
         }
 #else
-        private SafeFileHandle GetSafeFileHandleForRedirection(string RedirectionPath, uint dwCreationDisposition)
-        {
-            System.IntPtr hFileHandle = System.IntPtr.Zero;
-            ProcessNativeMethods.SECURITY_ATTRIBUTES lpSecurityAttributes = new();
-
-            hFileHandle = ProcessNativeMethods.CreateFileW(RedirectionPath,
-                ProcessNativeMethods.GENERIC_READ | ProcessNativeMethods.GENERIC_WRITE,
-                ProcessNativeMethods.FILE_SHARE_WRITE | ProcessNativeMethods.FILE_SHARE_READ,
-                lpSecurityAttributes,
-                dwCreationDisposition,
-                ProcessNativeMethods.FILE_ATTRIBUTE_NORMAL,
-                System.IntPtr.Zero);
-            if (hFileHandle == System.IntPtr.Zero)
-            {
-                int error = Marshal.GetLastWin32Error();
-                Win32Exception win32ex = new(error);
+
+        private SafeFileHandle GetSafeFileHandleForRedirection(string RedirectionPath, FileMode mode)
+        {
+            SafeFileHandle sf = null;
+            try
+            {
+                sf = File.OpenHandle(RedirectionPath, mode, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Inheritable, FileOptions.WriteThrough);
+            }
+            catch (Win32Exception win32ex)
+            {
+                sf?.Dispose();
                 string message = StringUtil.Format(ProcessResources.InvalidStartProcess, win32ex.Message);
                 ErrorRecord er = new(new InvalidOperationException(message), "InvalidOperationException", ErrorCategory.InvalidOperation, null);
                 ThrowTerminatingError(er);
             }
 
-            SafeFileHandle sf = new(hFileHandle, true);
             return sf;
         }
 
@@ -2376,16 +2404,31 @@ private static byte[] ConvertEnvVarsToByteArray(StringDictionary sd)
 
         private void SetStartupInfo(ProcessStartInfo startinfo, ref ProcessNativeMethods.STARTUPINFO lpStartupInfo, ref int creationFlags)
         {
+            // If we are starting a process using the current console window, we need to set its standard handles
+            // explicitly when they are not redirected because otherwise they won't be set and the new process will
+            // fail with the "invalid handle" error.
+            //
+            // However, if we are starting a process with a new console window, we should not explicitly set those
+            // standard handles when they are not redirected, but instead let Windows figure out the default to use
+            // when creating the process. Otherwise, the standard input handles of the current window and the new
+            // window will get weirdly tied together and cause problems.
+            bool hasRedirection = startinfo.CreateNoWindow
+                || _redirectstandardinput is not null
+                || _redirectstandardoutput is not null
+                || _redirectstandarderror is not null;
+
             // RedirectionStandardInput
             if (_redirectstandardinput != null)
             {
                 startinfo.RedirectStandardInput = true;
                 _redirectstandardinput = ResolveFilePath(_redirectstandardinput);
-                lpStartupInfo.hStdInput = GetSafeFileHandleForRedirection(_redirectstandardinput, ProcessNativeMethods.OPEN_EXISTING);
+                lpStartupInfo.hStdInput = GetSafeFileHandleForRedirection(_redirectstandardinput, FileMode.Open);
             }
-            else
+            else if (startinfo.CreateNoWindow)
             {
-                lpStartupInfo.hStdInput = new SafeFileHandle(ProcessNativeMethods.GetStdHandle(-10), false);
+                lpStartupInfo.hStdInput = new SafeFileHandle(
+                    ProcessNativeMethods.GetStdHandle(-10),
+                    ownsHandle: false);
             }
 
             // RedirectionStandardOutput
@@ -2393,11 +2436,13 @@ private void SetStartupInfo(ProcessStartInfo startinfo, ref ProcessNativeMethods
             {
                 startinfo.RedirectStandardOutput = true;
                 _redirectstandardoutput = ResolveFilePath(_redirectstandardoutput);
-                lpStartupInfo.hStdOutput = GetSafeFileHandleForRedirection(_redirectstandardoutput, ProcessNativeMethods.CREATE_ALWAYS);
+                lpStartupInfo.hStdOutput = GetSafeFileHandleForRedirection(_redirectstandardoutput, FileMode.Create);
             }
-            else
+            else if (startinfo.CreateNoWindow)
             {
-                lpStartupInfo.hStdOutput = new SafeFileHandle(ProcessNativeMethods.GetStdHandle(-11), false);
+                lpStartupInfo.hStdOutput = new SafeFileHandle(
+                    ProcessNativeMethods.GetStdHandle(-11),
+                    ownsHandle: false);
             }
 
             // RedirectionStandardError
@@ -2405,15 +2450,20 @@ private void SetStartupInfo(ProcessStartInfo startinfo, ref ProcessNativeMethods
             {
                 startinfo.RedirectStandardError = true;
                 _redirectstandarderror = ResolveFilePath(_redirectstandarderror);
-                lpStartupInfo.hStdError = GetSafeFileHandleForRedirection(_redirectstandarderror, ProcessNativeMethods.CREATE_ALWAYS);
+                lpStartupInfo.hStdError = GetSafeFileHandleForRedirection(_redirectstandarderror, FileMode.Create);
             }
-            else
+            else if (startinfo.CreateNoWindow)
             {
-                lpStartupInfo.hStdError = new SafeFileHandle(ProcessNativeMethods.GetStdHandle(-12), false);
+                lpStartupInfo.hStdError = new SafeFileHandle(
+                    ProcessNativeMethods.GetStdHandle(-12),
+                    ownsHandle: false);
             }
 
-            // STARTF_USESTDHANDLES
-            lpStartupInfo.dwFlags = 0x100;
+            if (hasRedirection)
+            {
+                // Set STARTF_USESTDHANDLES only if there is redirection.
+                lpStartupInfo.dwFlags = 0x100;
+            }
 
             if (startinfo.CreateNoWindow)
             {
@@ -2457,10 +2507,10 @@ private void SetStartupInfo(ProcessStartInfo startinfo, ref ProcessNativeMethods
         /// <summary>
         /// This method will be used on all windows platforms, both full desktop and headless SKUs.
         /// </summary>
-        private Process StartWithCreateProcess(ProcessStartInfo startinfo)
+        private ProcessInformation StartWithCreateProcess(ProcessStartInfo startinfo)
         {
             ProcessNativeMethods.STARTUPINFO lpStartupInfo = new();
-            SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation = new();
+            ProcessNativeMethods.PROCESS_INFORMATION lpProcessInformation = new();
             int error = 0;
             GCHandle pinnedEnvironmentBlock = new();
             IntPtr AddressOfEnvironmentBlock = IntPtr.Zero;
@@ -2507,7 +2557,7 @@ private Process StartWithCreateProcess(ProcessStartInfo startinfo)
                     try
                     {
                         password = (startinfo.Password == null) ? Marshal.StringToCoTaskMemUni(string.Empty) : Marshal.SecureStringToCoTaskMemUnicode(startinfo.Password);
-                        flag = ProcessNativeMethods.CreateProcessWithLogonW(startinfo.UserName, startinfo.Domain, password, logonFlags, null, cmdLine, creationFlags, AddressOfEnvironmentBlock, startinfo.WorkingDirectory, lpStartupInfo, lpProcessInformation);
+                        flag = ProcessNativeMethods.CreateProcessWithLogonW(startinfo.UserName, startinfo.Domain, password, logonFlags, null, cmdLine, creationFlags, AddressOfEnvironmentBlock, startinfo.WorkingDirectory, lpStartupInfo, ref lpProcessInformation);
                         if (!flag)
                         {
                             error = Marshal.GetLastWin32Error();
@@ -2563,7 +2613,7 @@ private Process StartWithCreateProcess(ProcessStartInfo startinfo)
 
                 ProcessNativeMethods.SECURITY_ATTRIBUTES lpProcessAttributes = new();
                 ProcessNativeMethods.SECURITY_ATTRIBUTES lpThreadAttributes = new();
-                flag = ProcessNativeMethods.CreateProcess(null, cmdLine, lpProcessAttributes, lpThreadAttributes, true, creationFlags, AddressOfEnvironmentBlock, startinfo.WorkingDirectory, lpStartupInfo, lpProcessInformation);
+                flag = ProcessNativeMethods.CreateProcess(null, cmdLine, lpProcessAttributes, lpThreadAttributes, true, creationFlags, AddressOfEnvironmentBlock, startinfo.WorkingDirectory, lpStartupInfo, ref lpProcessInformation);
                 if (!flag)
                 {
                     error = Marshal.GetLastWin32Error();
@@ -2576,11 +2626,7 @@ private Process StartWithCreateProcess(ProcessStartInfo startinfo)
 
             Label_03AE:
 
-                // At this point, we should have a suspended process.  Get the .Net Process object, resume the process, and return.
-                Process result = Process.GetProcessById(lpProcessInformation.dwProcessId);
-                ProcessNativeMethods.ResumeThread(lpProcessInformation.hThread);
-
-                return result;
+                return new ProcessInformation(lpProcessInformation);
             }
             finally
             {
@@ -2594,7 +2640,6 @@ private Process StartWithCreateProcess(ProcessStartInfo startinfo)
                 }
 
                 lpStartupInfo.Dispose();
-                lpProcessInformation.Dispose();
             }
         }
 #endif
@@ -2621,122 +2666,120 @@ private Process StartWithShellExecute(ProcessStartInfo startInfo)
         #endregion
     }
 
-#if !UNIX
     /// <summary>
-    /// ProcessCollection is a helper class used by Start-Process -Wait cmdlet to monitor the
-    /// child processes created by the main process hosted by the Start-process cmdlet.
+    /// Provides argument completion for Verb parameter.
     /// </summary>
-    internal class ProcessCollection
+    public class VerbArgumentCompleter : IArgumentCompleter
     {
         /// <summary>
-        /// JobObjectHandle is a reference to the job object used to track
-        /// the child processes created by the main process hosted by the Start-Process cmdlet.
-        /// </summary>
-        private readonly Microsoft.PowerShell.Commands.SafeJobHandle _jobObjectHandle;
-
-        /// <summary>
-        /// ProcessCollection constructor.
+        /// Returns completion results for verb parameter.
         /// </summary>
-        internal ProcessCollection()
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of Completion Results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
         {
-            IntPtr jobObjectHandleIntPtr = NativeMethods.CreateJobObject(IntPtr.Zero, null);
-            _jobObjectHandle = new SafeJobHandle(jobObjectHandleIntPtr);
-        }
+            // -Verb is not supported on non-Windows platforms as well as Windows headless SKUs
+            if (!Platform.IsWindowsDesktop)
+            {
+                return Array.Empty<CompletionResult>();
+            }
 
-        /// <summary>
-        /// Start API assigns the process to the JobObject and starts monitoring
-        /// the child processes hosted by the process created by Start-Process cmdlet.
-        /// </summary>
-        internal bool AssignProcessToJobObject(Process process)
-        {
-            // Add the process to the job object
-            bool result = NativeMethods.AssignProcessToJobObject(_jobObjectHandle, process.Handle);
-            return result;
-        }
+            // Completion: Start-Process -FilePath <path> -Verb <wordToComplete>
+            if (commandName.Equals("Start-Process", StringComparison.OrdinalIgnoreCase)
+                && fakeBoundParameters.Contains("FilePath"))
+            {
+                string filePath = fakeBoundParameters["FilePath"].ToString();
 
-        /// <summary>
-        /// Checks to see if the JobObject is empty (has no assigned processes).
-        /// If job is empty the auto reset event supplied as input would be set.
-        /// </summary>
-        internal void CheckJobStatus(object stateInfo)
-        {
-            ManualResetEvent emptyJobAutoEvent = (ManualResetEvent)stateInfo;
-            int dwSize = 0;
-            const int JOB_OBJECT_BASIC_PROCESS_ID_LIST = 3;
-            JOBOBJECT_BASIC_PROCESS_ID_LIST JobList = new();
+                // Complete file verbs if extension exists
+                if (Path.HasExtension(filePath))
+                {
+                    return CompleteFileVerbs(wordToComplete, filePath);
+                }
 
-            dwSize = Marshal.SizeOf(JobList);
-            if (NativeMethods.QueryInformationJobObject(_jobObjectHandle,
-                JOB_OBJECT_BASIC_PROCESS_ID_LIST,
-                ref JobList, dwSize, IntPtr.Zero))
-            {
-                if (JobList.NumberOfAssignedProcess == 0)
+                // Otherwise check if command is an Application to resolve executable full path with extension
+                // e.g if powershell was given, resolve to powershell.exe to get verbs
+                using var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
+
+                var commandInfo = new CmdletInfo("Get-Command", typeof(GetCommandCommand));
+
+                ps.AddCommand(commandInfo);
+                ps.AddParameter("Name", filePath);
+                ps.AddParameter("CommandType", CommandTypes.Application);
+
+                Collection<CommandInfo> commands = ps.Invoke<CommandInfo>();
+
+                // Start-Process & Get-Command select first found application based on PATHEXT environment variable
+                if (commands.Count >= 1)
                 {
-                    emptyJobAutoEvent.Set();
+                    return CompleteFileVerbs(wordToComplete, filePath: commands[0].Source);
                 }
             }
+
+            return Array.Empty<CompletionResult>();
         }
 
         /// <summary>
-        /// WaitOne blocks the current thread until the current instance receives a signal, using
-        /// a System.TimeSpan to measure the time interval and specifying whether to
-        /// exit the synchronization domain before the wait.
+        /// Completes file verbs.
         /// </summary>
-        /// <param name="waitHandleToUse">
-        /// WaitHandle to use for waiting on the job object.
-        /// </param>
-        internal void WaitOne(ManualResetEvent waitHandleToUse)
-        {
-            TimerCallback jobObjectStatusCb = this.CheckJobStatus;
-            using (Timer stateTimer = new(jobObjectStatusCb, waitHandleToUse, 0, 1000))
-            {
-                waitHandleToUse.WaitOne();
-            }
-        }
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="filePath">The file path to get verbs.</param>
+        /// <returns>List of file verbs to complete.</returns>
+        private static IEnumerable<CompletionResult> CompleteFileVerbs(string wordToComplete, string filePath)
+            => CompletionHelpers.GetMatchingResults(
+                wordToComplete,
+                possibleCompletionValues: new ProcessStartInfo(filePath).Verbs);
     }
 
+#if !UNIX
     /// <summary>
-    /// JOBOBJECT_BASIC_PROCESS_ID_LIST Contains the process identifier list for a job object.
-    /// If the job is nested, the process identifier list consists of all
-    /// processes associated with the job and its child jobs.
+    /// ProcessInformation is a helper class that wraps the native PROCESS_INFORMATION structure
+    /// returned by CreateProcess or CreateProcessWithLogon. It ensures the process and thread
+    /// HANDLEs are disposed once it's not needed.
     /// </summary>
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct JOBOBJECT_BASIC_PROCESS_ID_LIST
+    internal sealed class ProcessInformation : IDisposable
     {
-        /// <summary>
-        /// The number of process identifiers to be stored in ProcessIdList.
-        /// </summary>
-        public uint NumberOfAssignedProcess;
+        public SafeProcessHandle Process { get; }
 
-        /// <summary>
-        /// The number of process identifiers returned in the ProcessIdList buffer.
-        /// If this number is less than NumberOfAssignedProcesses, increase
-        /// the size of the buffer to accommodate the complete list.
-        /// </summary>
-        public uint NumberOfProcessIdsInList;
+        public SafeProcessHandle Thread { get; }
 
-        /// <summary>
-        /// A variable-length array of process identifiers returned by this call.
-        /// Array elements 0 through NumberOfProcessIdsInList minus 1
-        /// contain valid process identifiers.
-        /// </summary>
-        public IntPtr ProcessIdList;
+        public Int32 ProcessId { get; }
+
+        public Int32 ThreadId { get; }
+
+        internal ProcessInformation(ProcessNativeMethods.PROCESS_INFORMATION info)
+        {
+            Process = new(info.hProcess, true);
+            Thread = new(info.hThread, true);
+            ProcessId = info.dwProcessId;
+            ThreadId = info.dwThreadId;
+        }
+
+        public void Resume()
+        {
+            ProcessNativeMethods.ResumeThread(Thread.DangerousGetHandle());
+        }
+
+        public void Dispose()
+        {
+            Process.Dispose();
+            Thread.Dispose();
+            GC.SuppressFinalize(this);
+        }
+
+        ~ProcessInformation() => Dispose();
     }
 
     internal static class ProcessNativeMethods
     {
-        // Fields
-        internal static readonly UInt32 GENERIC_READ = 0x80000000;
-        internal static readonly UInt32 GENERIC_WRITE = 0x40000000;
-        internal static readonly UInt32 FILE_ATTRIBUTE_NORMAL = 0x80000000;
-        internal static readonly UInt32 CREATE_ALWAYS = 2;
-        internal static readonly UInt32 FILE_SHARE_WRITE = 0x00000002;
-        internal static readonly UInt32 FILE_SHARE_READ = 0x00000001;
-        internal static readonly UInt32 OF_READWRITE = 0x00000002;
-        internal static readonly UInt32 OPEN_EXISTING = 3;
-
-        // Methods
-
         [DllImport(PinvokeDllNames.GetStdHandleDllName, SetLastError = true)]
         public static extern IntPtr GetStdHandle(int whichHandle);
 
@@ -2752,7 +2795,7 @@ internal static extern bool CreateProcessWithLogonW(string userName,
             IntPtr environmentBlock,
             [MarshalAs(UnmanagedType.LPWStr)] string lpCurrentDirectory,
             STARTUPINFO lpStartupInfo,
-            SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation);
+            ref PROCESS_INFORMATION lpProcessInformation);
 
         [DllImport(PinvokeDllNames.CreateProcessDllName, CharSet = CharSet.Unicode, SetLastError = true)]
         [return: MarshalAs(UnmanagedType.Bool)]
@@ -2765,22 +2808,11 @@ public static extern bool CreateProcess([MarshalAs(UnmanagedType.LPWStr)] string
             IntPtr lpEnvironment,
             [MarshalAs(UnmanagedType.LPWStr)] string lpCurrentDirectory,
             STARTUPINFO lpStartupInfo,
-            SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation);
+            ref PROCESS_INFORMATION lpProcessInformation);
 
         [DllImport(PinvokeDllNames.ResumeThreadDllName, CharSet = CharSet.Unicode, SetLastError = true)]
         public static extern uint ResumeThread(IntPtr threadHandle);
 
-        [DllImport(PinvokeDllNames.CreateFileDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-        public static extern FileNakedHandle CreateFileW(
-            [In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
-            DWORD dwDesiredAccess,
-            DWORD dwShareMode,
-            ProcessNativeMethods.SECURITY_ATTRIBUTES lpSecurityAttributes,
-            DWORD dwCreationDisposition,
-            DWORD dwFlagsAndAttributes,
-            System.IntPtr hTemplateFile
-            );
-
         [DllImport("userenv.dll", CharSet = CharSet.Unicode, SetLastError = true)]
         [return: MarshalAs(UnmanagedType.Bool)]
         public static extern bool CreateEnvironmentBlock(out IntPtr lpEnvironment, IntPtr hToken, bool bInherit);
@@ -2797,7 +2829,16 @@ internal enum LogonFlags
         }
 
         [StructLayout(LayoutKind.Sequential)]
-        internal class SECURITY_ATTRIBUTES
+        internal struct PROCESS_INFORMATION
+        {
+            public IntPtr hProcess;
+            public IntPtr hThread;
+            public int dwProcessId;
+            public int dwThreadId;
+        }
+
+        [StructLayout(LayoutKind.Sequential)]
+        internal sealed class SECURITY_ATTRIBUTES
         {
             public int nLength;
             public SafeLocalMemHandle lpSecurityDescriptor;
@@ -2835,7 +2876,7 @@ protected override bool ReleaseHandle()
         }
 
         [StructLayout(LayoutKind.Sequential)]
-        internal class STARTUPINFO
+        internal sealed class STARTUPINFO
         {
             public int cb;
             public IntPtr lpReserved;
@@ -2898,72 +2939,6 @@ public void Dispose()
             }
         }
     }
-
-    internal static class SafeNativeMethods
-    {
-        [DllImport(PinvokeDllNames.CloseHandleDllName, SetLastError = true, ExactSpelling = true)]
-        public static extern bool CloseHandle(IntPtr handle);
-
-        [StructLayout(LayoutKind.Sequential)]
-        internal class PROCESS_INFORMATION
-        {
-            public IntPtr hProcess;
-            public IntPtr hThread;
-            public int dwProcessId;
-            public int dwThreadId;
-
-            public PROCESS_INFORMATION()
-            {
-                this.hProcess = IntPtr.Zero;
-                this.hThread = IntPtr.Zero;
-            }
-
-            /// <summary>
-            /// Dispose.
-            /// </summary>
-            public void Dispose()
-            {
-                Dispose(true);
-            }
-
-            /// <summary>
-            /// Dispose.
-            /// </summary>
-            /// <param name="disposing"></param>
-            private void Dispose(bool disposing)
-            {
-                if (disposing)
-                {
-                    if (this.hProcess != IntPtr.Zero)
-                    {
-                        CloseHandle(this.hProcess);
-                        this.hProcess = IntPtr.Zero;
-                    }
-
-                    if (this.hThread != IntPtr.Zero)
-                    {
-                        CloseHandle(this.hThread);
-                        this.hThread = IntPtr.Zero;
-                    }
-                }
-            }
-        }
-    }
-
-    [SuppressUnmanagedCodeSecurity]
-    internal sealed class SafeJobHandle : SafeHandleZeroOrMinusOneIsInvalid
-    {
-        internal SafeJobHandle(IntPtr jobHandle)
-            : base(true)
-        {
-            base.SetHandle(jobHandle);
-        }
-
-        protected override bool ReleaseHandle()
-        {
-            return SafeNativeMethods.CloseHandle(base.handle);
-        }
-    }
 #endif
     #endregion
 
@@ -2971,7 +2946,6 @@ protected override bool ReleaseHandle()
     /// <summary>
     /// Non-terminating errors occurring in the process noun commands.
     /// </summary>
-    [Serializable]
     public class ProcessCommandException : SystemException
     {
         #region ctors
@@ -3011,29 +2985,14 @@ public ProcessCommandException(string message, Exception innerException)
         /// <param name="info"></param>
         /// <param name="context"></param>
         /// <returns>Constructed object.</returns>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected ProcessCommandException(
             SerializationInfo info,
             StreamingContext context)
-            : base(info, context)
         {
-            _processName = info.GetString("ProcessName");
+            throw new NotSupportedException();
         }
-        /// <summary>
-        /// Serializer.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            base.GetObjectData(info, context);
 
-            if (info == null)
-                throw new ArgumentNullException(nameof(info));
-
-            info.AddValue("ProcessName", _processName);
-        }
         #endregion Serialization
 
         #region Properties
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/RegisterWMIEventCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/RegisterWMIEventCommand.cs
deleted file mode 100644
index 0a4d9c6cb34..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/RegisterWMIEventCommand.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Management;
-using System.Management.Automation;
-using System.Text;
-using System.Threading;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Registers for an event on an object.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Register, "WmiEvent", DefaultParameterSetName = "class",
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135245", RemotingCapability = RemotingCapability.OwnedByCommand)]
-    public class RegisterWmiEventCommand : ObjectEventRegistrationBase
-    {
-        #region parameters
-
-        /// <summary>
-        /// The WMI namespace to use.
-        /// </summary>
-        [Parameter]
-        [Alias("NS")]
-        public string Namespace { get; set; } = "root\\cimv2";
-
-        /// <summary>
-        /// The credential to use.
-        /// </summary>
-        [Parameter]
-        [Credential()]
-        public PSCredential Credential { get; set; }
-
-        /// <summary>
-        /// The ComputerName in which to query.
-        /// </summary>
-        [Parameter]
-        [Alias("Cn")]
-        [ValidateNotNullOrEmpty]
-        public string ComputerName { get; set; } = "localhost";
-
-        /// <summary>
-        /// The WMI class to use.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "class")]
-        public string Class { get; set; } = null;
-
-        /// <summary>
-        /// The query string to search for objects.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "query")]
-        public string Query { get; set; } = null;
-
-        /// <summary>
-        /// Timeout in milliseconds.
-        /// </summary>
-        [Parameter]
-        [Alias("TimeoutMSec")]
-        public Int64 Timeout
-        {
-            get
-            {
-                return _timeOut;
-            }
-
-            set
-            {
-                _timeOut = value;
-                _timeoutSpecified = true;
-            }
-        }
-
-        private Int64 _timeOut = 0;
-        private bool _timeoutSpecified = false;
-
-        #endregion parameters
-        #region helper functions
-        private string BuildEventQuery(string objectName)
-        {
-            StringBuilder returnValue = new StringBuilder("select * from ");
-            returnValue.Append(objectName);
-            return returnValue.ToString();
-        }
-
-        private string GetScopeString(string computer, string namespaceParameter)
-        {
-            StringBuilder returnValue = new StringBuilder("\\\\");
-            returnValue.Append(computer);
-            returnValue.Append("\\");
-            returnValue.Append(namespaceParameter);
-            return returnValue.ToString();
-        }
-        #endregion helper functions
-
-        /// <summary>
-        /// Returns the object that generates events to be monitored.
-        /// </summary>
-        protected override object GetSourceObject()
-        {
-            string wmiQuery = this.Query;
-            if (this.Class != null)
-            {
-                // Validate class format
-                for (int i = 0; i < this.Class.Length; i++)
-                {
-                    if (char.IsLetterOrDigit(this.Class[i]) || this.Class[i].Equals('_'))
-                    {
-                        continue;
-                    }
-
-                    ErrorRecord errorRecord = new ErrorRecord(
-                        new ArgumentException(
-                            string.Format(
-                                Thread.CurrentThread.CurrentCulture,
-                                "Class", this.Class)),
-                        "INVALID_QUERY_IDENTIFIER",
-                        ErrorCategory.InvalidArgument,
-                        null);
-                    errorRecord.ErrorDetails = new ErrorDetails(this, "WmiResources", "WmiInvalidClass");
-
-                    ThrowTerminatingError(errorRecord);
-                    return null;
-                }
-
-                wmiQuery = BuildEventQuery(this.Class);
-            }
-
-            ConnectionOptions conOptions = new ConnectionOptions();
-            if (this.Credential != null)
-            {
-                System.Net.NetworkCredential cred = this.Credential.GetNetworkCredential();
-                if (string.IsNullOrEmpty(cred.Domain))
-                {
-                    conOptions.Username = cred.UserName;
-                }
-                else
-                {
-                    conOptions.Username = cred.Domain + "\\" + cred.UserName;
-                }
-
-                conOptions.Password = cred.Password;
-            }
-
-            ManagementScope scope = new ManagementScope(GetScopeString(ComputerName, this.Namespace), conOptions);
-            EventWatcherOptions evtOptions = new EventWatcherOptions();
-
-            if (_timeoutSpecified)
-            {
-                evtOptions.Timeout = new TimeSpan(_timeOut * 10000);
-            }
-
-            ManagementEventWatcher watcher = new ManagementEventWatcher(scope, new EventQuery(wmiQuery), evtOptions);
-            return watcher;
-        }
-
-        /// <summary>
-        /// Returns the event name to be monitored on the input object.
-        /// </summary>
-        protected override string GetSourceObjectEventName()
-        {
-            return "EventArrived";
-        }
-
-        /// <summary>
-        /// Processes the event subscriber after the base class has registered.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            base.EndProcessing();
-
-            // Register for the "Unsubscribed" event so that we can stop the
-            // event watcher.
-            PSEventSubscriber newSubscriber = NewSubscriber;
-            if (newSubscriber != null)
-            {
-                newSubscriber.Unsubscribed += new PSEventUnsubscribedEventHandler(newSubscriber_Unsubscribed);
-            }
-        }
-
-        private void newSubscriber_Unsubscribed(object sender, PSEventUnsubscribedEventArgs e)
-        {
-            ManagementEventWatcher watcher = sender as ManagementEventWatcher;
-            if (watcher != null)
-            {
-                watcher.Stop();
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/RemoveWMIObjectCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/RemoveWMIObjectCommand.cs
deleted file mode 100644
index cce50ea1563..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/RemoveWMIObjectCommand.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Management;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command to Remove WMI Object.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "WmiObject", DefaultParameterSetName = "class", SupportsShouldProcess = true,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=113381", RemotingCapability = RemotingCapability.OwnedByCommand)]
-    public class RemoveWmiObject : WmiBaseCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// The WMI Object to use.
-        /// </summary>
-        [Parameter(ValueFromPipeline = true, Mandatory = true, ParameterSetName = "object")]
-        public ManagementObject InputObject
-        {
-            get { return _inputObject; }
-
-            set { _inputObject = value; }
-        }
-        /// <summary>
-        /// The WMI Path to use.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = "path")]
-        public string Path
-        {
-            get { return _path; }
-
-            set { _path = value; }
-        }
-        /// <summary>
-        /// The WMI class to use.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "class")]
-        public string Class
-        {
-            get { return _className; }
-
-            set { _className = value; }
-        }
-
-        #endregion Parameters
-
-        #region parameter data
-        private string _path = null;
-        private string _className = null;
-        private ManagementObject _inputObject = null;
-
-        #endregion parameter data
-        #region Command code
-        /// <summary>
-        /// Remove an object given either path,class name or pipeline input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (this.AsJob)
-            {
-                RunAsJob("Remove-WMIObject");
-                return;
-            }
-
-            if (_inputObject != null)
-            {
-                try
-                {
-                    if (!ShouldProcess(_inputObject["__PATH"].ToString()))
-                    {
-                        return;
-                    }
-
-                    _inputObject.Delete();
-                }
-                catch (ManagementException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "RemoveWMIManagementException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "RemoveWMICOMException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-
-                return;
-            }
-            else
-            {
-                ConnectionOptions options = GetConnectionOption();
-                ManagementPath mPath = null;
-                ManagementObject mObject = null;
-                if (_path != null)
-                {
-                    mPath = new ManagementPath(_path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = this.Namespace;
-                    }
-                    else if (namespaceSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "NamespaceSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            this.Namespace));
-                    }
-
-                    if (mPath.Server != "." && serverNameSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "ComputerNameSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            this.ComputerName));
-                    }
-
-                    if (!(mPath.Server == "." && serverNameSpecified))
-                    {
-                        string[] serverName = new string[] { mPath.Server };
-                        ComputerName = serverName;
-                    }
-                }
-
-                foreach (string name in ComputerName)
-                {
-                    try
-                    {
-                        if (_path != null)
-                        {
-                            mPath.Server = name;
-                            if (mPath.IsClass)
-                            {
-                                ManagementClass mClass = new ManagementClass(mPath);
-                                mObject = mClass;
-                            }
-                            else
-                            {
-                                ManagementObject mInstance = new ManagementObject(mPath);
-                                mObject = mInstance;
-                            }
-
-                            ManagementScope mScope = new ManagementScope(mPath, options);
-                            mObject.Scope = mScope;
-                        }
-                        else
-                        {
-                            ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(name, this.Namespace), options);
-                            ManagementClass mClass = new ManagementClass(_className);
-                            mObject = mClass;
-                            mObject.Scope = scope;
-                        }
-
-                        if (!ShouldProcess(mObject["__PATH"].ToString()))
-                        {
-                            continue;
-                        }
-
-                        mObject.Delete();
-                    }
-                    catch (ManagementException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "RemoveWMIManagementException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-                    catch (System.Runtime.InteropServices.COMException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "RemoveWMICOMException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-                }
-            }
-        }
-        #endregion Command code
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/ResolvePathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/ResolvePathCommand.cs
index fcc9aef195f..d0f5fecf495 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/ResolvePathCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/ResolvePathCommand.cs
@@ -8,8 +8,8 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// A command to resolve MSH paths containing glob characters to
-    /// MSH paths that match the glob strings.
+    /// A command to resolve PowerShell paths containing glob characters to
+    /// PowerShell paths that match the glob strings.
     /// </summary>
     [Cmdlet(VerbsDiagnostic.Resolve, "Path", DefaultParameterSetName = "Path", SupportsTransactions = true,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097143")]
@@ -59,7 +59,8 @@ public string[] LiteralPath
         /// Gets or sets the value that determines if the resolved path should
         /// be resolved to its relative version.
         /// </summary>
-        [Parameter()]
+        [Parameter(ParameterSetName = "Path")]
+        [Parameter(ParameterSetName = "LiteralPath")]
         public SwitchParameter Relative
         {
             get
@@ -75,6 +76,33 @@ public SwitchParameter Relative
 
         private SwitchParameter _relative;
 
+        /// <summary>
+        /// Gets or sets the path the resolved relative path should be based off.
+        /// </summary>
+        [Parameter]
+        public string RelativeBasePath
+        {
+            get
+            {
+                return _relativeBasePath;
+            }
+
+            set
+            {
+                _relativeBasePath = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the force property.
+        /// </summary>
+        [Parameter]
+        public override SwitchParameter Force
+        {
+            get => base.Force;
+            set => base.Force = value;
+        }
+
         #endregion Parameters
 
         #region parameter data
@@ -84,12 +112,68 @@ public SwitchParameter Relative
         /// </summary>
         private string[] _paths;
 
+        private PSDriveInfo _relativeDrive;
+        private string _relativeBasePath;
+
         #endregion parameter data
 
         #region Command code
 
         /// <summary>
-        /// Resolves the path containing glob characters to the MSH paths that it
+        /// Finds the path and drive that should be used for relative path resolution
+        /// represents.
+        /// </summary>
+        protected override void BeginProcessing()
+        {
+            if (!string.IsNullOrEmpty(RelativeBasePath))
+            {
+                try
+                {
+                    _relativeBasePath = SessionState.Internal.Globber.GetProviderPath(RelativeBasePath, CmdletProviderContext, out _, out _relativeDrive);
+                }
+                catch (ProviderNotFoundException providerNotFound)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(
+                            providerNotFound.ErrorRecord,
+                            providerNotFound));
+                }
+                catch (DriveNotFoundException driveNotFound)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(
+                            driveNotFound.ErrorRecord,
+                            driveNotFound));
+                }
+                catch (ProviderInvocationException providerInvocation)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(
+                            providerInvocation.ErrorRecord,
+                            providerInvocation));
+                }
+                catch (NotSupportedException notSupported)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(notSupported, "ProviderIsNotNavigationCmdletProvider", ErrorCategory.InvalidArgument, RelativeBasePath));
+                }
+                catch (InvalidOperationException invalidOperation)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(invalidOperation, "InvalidHomeLocation", ErrorCategory.InvalidOperation, RelativeBasePath));
+                }
+
+                return;
+            }
+            else if (_relative)
+            {
+                _relativeDrive = SessionState.Path.CurrentLocation.Drive;
+                _relativeBasePath = SessionState.Path.CurrentLocation.ProviderPath;
+            }
+        }
+
+        /// <summary>
+        /// Resolves the path containing glob characters to the PowerShell paths that it
         /// represents.
         /// </summary>
         protected override void ProcessRecord()
@@ -99,25 +183,53 @@ protected override void ProcessRecord()
                 Collection<PathInfo> result = null;
                 try
                 {
-                    result = SessionState.Path.GetResolvedPSPathFromPSPath(path, CmdletProviderContext);
+                    if (MyInvocation.BoundParameters.ContainsKey("RelativeBasePath"))
+                    {
+                        // Pushing and popping the location is done because GetResolvedPSPathFromPSPath uses the current path to resolve relative paths.
+                        // It's important that we pop the location before writing an object to the pipeline to avoid affecting downstream commands.
+                        try
+                        {
+                            SessionState.Path.PushCurrentLocation(string.Empty);
+                            _ = SessionState.Path.SetLocation(_relativeBasePath);
+                            result = SessionState.Path.GetResolvedPSPathFromPSPath(path, CmdletProviderContext);
+                        }
+                        finally
+                        {
+                            _ = SessionState.Path.PopLocation(string.Empty);
+                        }
+                    }
+                    else
+                    {
+                        result = SessionState.Path.GetResolvedPSPathFromPSPath(path, CmdletProviderContext);
+                    }
 
                     if (_relative)
                     {
+                        ReadOnlySpan<char> baseCache = null;
+                        ReadOnlySpan<char> adjustedBaseCache = null;
                         foreach (PathInfo currentPath in result)
                         {
                             // When result path and base path is on different PSDrive
                             // (../)*path should not go beyond the root of base path
-                            if (currentPath.Drive != SessionState.Path.CurrentLocation.Drive &&
-                                SessionState.Path.CurrentLocation.Drive != null &&
-                                !currentPath.ProviderPath.StartsWith(
-                                    SessionState.Path.CurrentLocation.Drive.Root, StringComparison.OrdinalIgnoreCase))
+                            if (currentPath.Drive != _relativeDrive &&
+                                _relativeDrive != null &&
+                                !currentPath.ProviderPath.StartsWith(_relativeDrive.Root, StringComparison.OrdinalIgnoreCase))
                             {
                                 WriteObject(currentPath.Path, enumerateCollection: false);
                                 continue;
                             }
 
-                            string adjustedPath = SessionState.Path.NormalizeRelativePath(currentPath.Path,
-                                SessionState.Path.CurrentLocation.ProviderPath);
+                            int leafIndex = currentPath.Path.LastIndexOf(currentPath.Provider.ItemSeparator);
+                            var basePath = currentPath.Path.AsSpan(0, leafIndex);
+                            if (basePath == baseCache)
+                            {
+                                WriteObject(string.Concat(adjustedBaseCache, currentPath.Path.AsSpan(leafIndex + 1)), enumerateCollection: false);
+                                continue;
+                            }
+
+                            baseCache = basePath;
+                            string adjustedPath = SessionState.Path.NormalizeRelativePath(currentPath.Path, _relativeBasePath);
+
                             // Do not insert './' if result path is not relative
                             if (!adjustedPath.StartsWith(
                                     currentPath.Drive?.Root ?? currentPath.Path, StringComparison.OrdinalIgnoreCase) &&
@@ -126,6 +238,9 @@ protected override void ProcessRecord()
                                 adjustedPath = SessionState.Path.Combine(".", adjustedPath);
                             }
 
+                            leafIndex = adjustedPath.LastIndexOf(currentPath.Provider.ItemSeparator);
+                            adjustedBaseCache = adjustedPath.AsSpan(0, leafIndex + 1);
+
                             WriteObject(adjustedPath, enumerateCollection: false);
                         }
                     }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/RollbackTransactionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/RollbackTransactionCommand.cs
deleted file mode 100644
index 297dd5269a9..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/RollbackTransactionCommand.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Management.Automation;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command that rolls back a transaction.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Undo, "Transaction", SupportsShouldProcess = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135268")]
-    public class UndoTransactionCommand : PSCmdlet
-    {
-        /// <summary>
-        /// Rolls the current transaction back.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            // Rollback the transaction
-            if (ShouldProcess(
-                NavigationResources.TransactionResource,
-                NavigationResources.RollbackAction))
-            {
-                this.Context.TransactionManager.Rollback();
-            }
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs
index 82210f627ce..a00f9583d6a 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/Service.cs
@@ -103,7 +103,7 @@ internal void WriteNonTerminatingError(
             string message = StringUtil.Format(errorMessage,
                 serviceName,
                 displayName,
-                (innerException == null) ? string.Empty : innerException.Message);
+                (innerException == null) ? category.ToString() : innerException.Message);
 
             var exception = new ServiceCommandException(message, innerException);
             exception.ServiceName = serviceName;
@@ -610,146 +610,197 @@ public string[] Name
         /// </summary>
         protected override void ProcessRecord()
         {
-            foreach (ServiceController service in MatchingServices())
+            nint scManagerHandle = nint.Zero;
+            if (!DependentServices && !RequiredServices)
             {
-                if (!DependentServices.IsPresent && !RequiredServices.IsPresent)
-                {
-                    WriteObject(AddProperties(service));
+                // As Get-Service only works on local services we get this once
+                // to retrieve extra properties added by PowerShell.
+                scManagerHandle = NativeMethods.OpenSCManagerW(
+                    lpMachineName: null,
+                    lpDatabaseName: null,
+                    dwDesiredAccess: NativeMethods.SC_MANAGER_CONNECT);
+                if (scManagerHandle == nint.Zero)
+                {
+                    Win32Exception exception = new();
+                    string message = StringUtil.Format(ServiceResources.FailToOpenServiceControlManager, exception.Message);
+                    ServiceCommandException serviceException = new ServiceCommandException(message, exception);
+                    ErrorRecord err = new ErrorRecord(
+                        serviceException,
+                        "FailToOpenServiceControlManager",
+                        ErrorCategory.PermissionDenied,
+                        null);
+                    ThrowTerminatingError(err);
                 }
-                else
+            }
+
+            try
+            {
+                foreach (ServiceController service in MatchingServices())
                 {
-                    if (DependentServices.IsPresent)
+                    if (!DependentServices.IsPresent && !RequiredServices.IsPresent)
                     {
-                        foreach (ServiceController dependantserv in service.DependentServices)
+                        WriteObject(AddProperties(scManagerHandle, service));
+                    }
+                    else
+                    {
+                        if (DependentServices.IsPresent)
                         {
-                            WriteObject(dependantserv);
+                            foreach (ServiceController dependantserv in service.DependentServices)
+                            {
+                                WriteObject(dependantserv);
+                            }
                         }
-                    }
 
-                    if (RequiredServices.IsPresent)
-                    {
-                        foreach (ServiceController servicedependedon in service.ServicesDependedOn)
+                        if (RequiredServices.IsPresent)
                         {
-                            WriteObject(servicedependedon);
+                            foreach (ServiceController servicedependedon in service.ServicesDependedOn)
+                            {
+                                WriteObject(servicedependedon);
+                            }
                         }
                     }
                 }
             }
+            finally
+            {
+                if (scManagerHandle != nint.Zero)
+                {
+                    bool succeeded = NativeMethods.CloseServiceHandle(scManagerHandle);
+                    Diagnostics.Assert(succeeded, "SCManager handle close failed");
+                }
+            }
         }
 
         #endregion Overrides
 
+#nullable enable
+
+        /// <summary>
+        /// Writes a verbose message when a service property query fails.
+        /// </summary>
+        /// <param name="serviceName">Name of the service.</param>
+        /// <param name="propertyName">Name of the property that failed to be queried.</param>
+        private void WriteServicePropertyError(string serviceName, string propertyName)
+        {
+            Win32Exception e = new(Marshal.GetLastWin32Error());
+            WriteVerbose(
+                StringUtil.Format(
+                    ServiceResources.CouldNotGetServiceProperty,
+                    serviceName,
+                    propertyName,
+                    e.Message));
+        }
+
         /// <summary>
         /// Adds UserName, Description, BinaryPathName, DelayedAutoStart and StartupType to a ServiceController object.
         /// </summary>
+        /// <param name="scManagerHandle">Handle to the local SCManager instance.</param>
         /// <param name="service"></param>
         /// <returns>ServiceController as PSObject with UserName, Description and StartupType added.</returns>
-        private PSObject AddProperties(ServiceController service)
+        private PSObject AddProperties(nint scManagerHandle, ServiceController service)
         {
-            NakedWin32Handle hScManager = IntPtr.Zero;
-            NakedWin32Handle hService = IntPtr.Zero;
-            int lastError = 0;
-            PSObject serviceAsPSObj = PSObject.AsPSObject(service);
+            NakedWin32Handle hService = nint.Zero;
+
+            // As these are optional values, a failure due to permissions or
+            // other problem is ignored and the properties are set to null.
+            bool? isDelayedAutoStart = null;
+            string? binPath = null;
+            string? description = null;
+            string? startName = null;
+            ServiceStartupType startupType = ServiceStartupType.InvalidValue;
             try
             {
-                hScManager = NativeMethods.OpenSCManagerW(
-                    lpMachineName: service.MachineName,
-                    lpDatabaseName: null,
-                    dwDesiredAccess: NativeMethods.SC_MANAGER_CONNECT
-                );
-                if (hScManager == IntPtr.Zero)
-                {
-                    lastError = Marshal.GetLastWin32Error();
-                    Win32Exception exception = new(lastError);
-                    WriteNonTerminatingError(
-                        service,
-                        exception,
-                        "FailToOpenServiceControlManager",
-                        ServiceResources.FailToOpenServiceControlManager,
-                        ErrorCategory.PermissionDenied);
-                }
-
+                // We don't use service.ServiceHandle as that requests
+                // SERVICE_ALL_ACCESS when we only need SERVICE_QUERY_CONFIG.
                 hService = NativeMethods.OpenServiceW(
-                    hScManager,
+                    scManagerHandle,
                     service.ServiceName,
                     NativeMethods.SERVICE_QUERY_CONFIG
                 );
-                if (hService == IntPtr.Zero)
+                if (hService != nint.Zero)
                 {
-                    lastError = Marshal.GetLastWin32Error();
-                    Win32Exception exception = new(lastError);
-                    WriteNonTerminatingError(
-                        service,
-                        exception,
-                        "CouldNotGetServiceInfo",
-                        ServiceResources.CouldNotGetServiceInfo,
-                        ErrorCategory.PermissionDenied);
-                }
-
-                NativeMethods.SERVICE_DESCRIPTIONW description = new();
-                bool querySuccessful = NativeMethods.QueryServiceConfig2<NativeMethods.SERVICE_DESCRIPTIONW>(hService, NativeMethods.SERVICE_CONFIG_DESCRIPTION, out description);
-
-                NativeMethods.SERVICE_DELAYED_AUTO_START_INFO autostartInfo = new();
-                querySuccessful = querySuccessful && NativeMethods.QueryServiceConfig2<NativeMethods.SERVICE_DELAYED_AUTO_START_INFO>(hService, NativeMethods.SERVICE_CONFIG_DELAYED_AUTO_START_INFO, out autostartInfo);
+                    if (NativeMethods.QueryServiceConfig2(
+                        hService,
+                        NativeMethods.SERVICE_CONFIG_DESCRIPTION,
+                        out NativeMethods.SERVICE_DESCRIPTIONW descriptionInfo))
+                    {
+                        description = descriptionInfo.lpDescription;
+                    }
+                    else
+                    {
+                        WriteServicePropertyError(service.ServiceName, nameof(NativeMethods.SERVICE_DESCRIPTIONW));
+                    }
 
-                NativeMethods.QUERY_SERVICE_CONFIG serviceInfo = new();
-                querySuccessful = querySuccessful && NativeMethods.QueryServiceConfig(hService, out serviceInfo);
+                    if (NativeMethods.QueryServiceConfig2(
+                        hService,
+                        NativeMethods.SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
+                        out NativeMethods.SERVICE_DELAYED_AUTO_START_INFO autostartInfo))
+                    {
+                        isDelayedAutoStart = autostartInfo.fDelayedAutostart;
+                    }
+                    else
+                    {
+                        WriteServicePropertyError(service.ServiceName, nameof(NativeMethods.SERVICE_DELAYED_AUTO_START_INFO));
+                    }
 
-                if (!querySuccessful)
+                    if (NativeMethods.QueryServiceConfig(
+                        hService,
+                        out NativeMethods.QUERY_SERVICE_CONFIG serviceInfo))
+                    {
+                        binPath = serviceInfo.lpBinaryPathName;
+                        startName = serviceInfo.lpServiceStartName;
+                        if (isDelayedAutoStart.HasValue)
+                        {
+                            startupType = NativeMethods.GetServiceStartupType(
+                                (ServiceStartMode)serviceInfo.dwStartType,
+                                isDelayedAutoStart.Value);
+                        }
+                    }
+                    else
+                    {
+                        WriteServicePropertyError(service.ServiceName, nameof(NativeMethods.QUERY_SERVICE_CONFIG));
+                    }
+                }
+                else
                 {
-                    WriteNonTerminatingError(
-                        service: service,
-                        innerException: null,
-                        errorId: "CouldNotGetServiceInfo",
-                        errorMessage: ServiceResources.CouldNotGetServiceInfo,
-                        category: ErrorCategory.PermissionDenied
-                        );
+                    // handle when OpenServiceW itself fails:
+                    WriteServicePropertyError(service.ServiceName, nameof(NativeMethods.SERVICE_QUERY_CONFIG));
                 }
-
-                PSProperty noteProperty = new("UserName", serviceInfo.lpServiceStartName);
-                serviceAsPSObj.Properties.Add(noteProperty, true);
-                serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#UserName");
-
-                noteProperty = new PSProperty("Description", description.lpDescription);
-                serviceAsPSObj.Properties.Add(noteProperty, true);
-                serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#Description");
-
-                noteProperty = new PSProperty("DelayedAutoStart", autostartInfo.fDelayedAutostart);
-                serviceAsPSObj.Properties.Add(noteProperty, true);
-                serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#DelayedAutoStart");
-
-                noteProperty = new PSProperty("BinaryPathName", serviceInfo.lpBinaryPathName);
-                serviceAsPSObj.Properties.Add(noteProperty, true);
-                serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#BinaryPathName");
-
-                noteProperty = new PSProperty("StartupType", NativeMethods.GetServiceStartupType(service.StartType, autostartInfo.fDelayedAutostart));
-                serviceAsPSObj.Properties.Add(noteProperty, true);
-                serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#StartupType");
             }
             finally
             {
                 if (hService != IntPtr.Zero)
                 {
                     bool succeeded = NativeMethods.CloseServiceHandle(hService);
-                    if (!succeeded)
-                    {
-                        Diagnostics.Assert(lastError != 0, "ErrorCode not success");
-                    }
-                }
-
-                if (hScManager != IntPtr.Zero)
-                {
-                    bool succeeded = NativeMethods.CloseServiceHandle(hScManager);
-                    if (!succeeded)
-                    {
-                        Diagnostics.Assert(lastError != 0, "ErrorCode not success");
-                    }
+                    Diagnostics.Assert(succeeded, "Failed to close service handle");
                 }
             }
 
+            PSObject serviceAsPSObj = PSObject.AsPSObject(service);
+            PSNoteProperty noteProperty = new("UserName", startName);
+            serviceAsPSObj.Properties.Add(noteProperty, true);
+            serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#UserName");
+
+            noteProperty = new PSNoteProperty("Description", description);
+            serviceAsPSObj.Properties.Add(noteProperty, true);
+            serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#Description");
+
+            noteProperty = new PSNoteProperty("DelayedAutoStart", isDelayedAutoStart);
+            serviceAsPSObj.Properties.Add(noteProperty, true);
+            serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#DelayedAutoStart");
+
+            noteProperty = new PSNoteProperty("BinaryPathName", binPath);
+            serviceAsPSObj.Properties.Add(noteProperty, true);
+            serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#BinaryPathName");
+
+            noteProperty = new PSNoteProperty("StartupType", startupType);
+            serviceAsPSObj.Properties.Add(noteProperty, true);
+            serviceAsPSObj.TypeNames.Insert(0, "System.Service.ServiceController#StartupType");
+
             return serviceAsPSObj;
         }
     }
+#nullable disable
     #endregion GetServiceCommand
 
     #region ServiceOperationBaseCommand
@@ -888,7 +939,7 @@ internal bool DoWaitForStatus(
         /// This will start the service.
         /// </summary>
         /// <param name="serviceController">Service to start.</param>
-        /// <returns>True iff the service was started.</returns>
+        /// <returns>True if-and-only-if the service was started.</returns>
         internal bool DoStartService(ServiceController serviceController)
         {
             Exception exception = null;
@@ -903,8 +954,7 @@ internal bool DoStartService(ServiceController serviceController)
             }
             catch (InvalidOperationException e)
             {
-                Win32Exception eInner = e.InnerException as Win32Exception;
-                if (eInner == null
+                if (e.InnerException is not Win32Exception eInner
                     || eInner.NativeErrorCode != NativeMethods.ERROR_SERVICE_ALREADY_RUNNING)
                 {
                     exception = e;
@@ -945,7 +995,7 @@ internal bool DoStartService(ServiceController serviceController)
         /// <param name="serviceController">Service to stop.</param>
         /// <param name="force">Stop dependent services.</param>
         /// <param name="waitForServiceToStop"></param>
-        /// <returns>True iff the service was stopped.</returns>
+        /// <returns>True if-and-only-if the service was stopped.</returns>
         internal List<ServiceController> DoStopService(ServiceController serviceController, bool force, bool waitForServiceToStop)
         {
             // Ignore ServiceController.CanStop.  CanStop will be set false
@@ -1020,9 +1070,7 @@ internal List<ServiceController> DoStopService(ServiceController serviceControll
             }
             catch (InvalidOperationException e)
             {
-                Win32Exception eInner =
-                    e.InnerException as Win32Exception;
-                if (eInner == null
+                if (e.InnerException is not Win32Exception eInner
                     || eInner.NativeErrorCode != NativeMethods.ERROR_SERVICE_NOT_ACTIVE)
                 {
                     exception = e;
@@ -1078,7 +1126,7 @@ internal List<ServiceController> DoStopService(ServiceController serviceControll
         /// </returns>
         private static bool HaveAllDependentServicesStopped(ServiceController[] dependentServices)
         {
-            return Array.TrueForAll(dependentServices, service => service.Status == ServiceControllerStatus.Stopped);
+            return Array.TrueForAll(dependentServices, static service => service.Status == ServiceControllerStatus.Stopped);
         }
 
         /// <summary>
@@ -1097,7 +1145,7 @@ internal void RemoveNotStoppedServices(List<ServiceController> services)
         /// This will pause the service.
         /// </summary>
         /// <param name="serviceController">Service to pause.</param>
-        /// <returns>True iff the service was paused.</returns>
+        /// <returns>True if-and-only-if the service was paused.</returns>
         internal bool DoPauseService(ServiceController serviceController)
         {
             Exception exception = null;
@@ -1117,8 +1165,7 @@ internal bool DoPauseService(ServiceController serviceController)
             }
             catch (InvalidOperationException e)
             {
-                Win32Exception eInner = e.InnerException as Win32Exception;
-                if (eInner != null
+                if (e.InnerException is Win32Exception eInner
                     && eInner.NativeErrorCode == NativeMethods.ERROR_SERVICE_NOT_ACTIVE)
                 {
                     serviceNotRunning = true;
@@ -1178,7 +1225,7 @@ internal bool DoPauseService(ServiceController serviceController)
         /// This will resume the service.
         /// </summary>
         /// <param name="serviceController">Service to resume.</param>
-        /// <returns>True iff the service was resumed.</returns>
+        /// <returns>True if-and-only-if the service was resumed.</returns>
         internal bool DoResumeService(ServiceController serviceController)
         {
             Exception exception = null;
@@ -1198,8 +1245,7 @@ internal bool DoResumeService(ServiceController serviceController)
             }
             catch (InvalidOperationException e)
             {
-                Win32Exception eInner = e.InnerException as Win32Exception;
-                if (eInner != null
+                if (e.InnerException is Win32Exception eInner
                     && eInner.NativeErrorCode == NativeMethods.ERROR_SERVICE_NOT_ACTIVE)
                 {
                     serviceNotRunning = true;
@@ -1680,7 +1726,6 @@ public string Status
         #region Overrides
         /// <summary>
         /// </summary>
-        [ArchitectureSensitive]
         protected override void ProcessRecord()
         {
             ServiceController service = null;
@@ -1756,10 +1801,14 @@ protected override void ProcessRecord()
                         return;
                     }
 
+                    var access = NativeMethods.SERVICE_CHANGE_CONFIG;
+                    if (!string.IsNullOrEmpty(SecurityDescriptorSddl))
+                        access |= NativeMethods.WRITE_DAC | NativeMethods.WRITE_OWNER;
+
                     hService = NativeMethods.OpenServiceW(
                         hScManager,
                         Name,
-                        NativeMethods.SERVICE_CHANGE_CONFIG | NativeMethods.WRITE_DAC | NativeMethods.WRITE_OWNER
+                        access
                         );
 
                     if (hService == IntPtr.Zero)
@@ -2111,7 +2160,6 @@ public string[] DependsOn
         /// <summary>
         /// Create the service.
         /// </summary>
-        [ArchitectureSensitive]
         protected override void BeginProcessing()
         {
             ServiceController service = null;
@@ -2353,7 +2401,7 @@ protected override void BeginProcessing()
     /// <summary>
     /// This class implements the Remove-Service command.
     /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "Service", SupportsShouldProcess = true, DefaultParameterSetName = "Name")]
+    [Cmdlet(VerbsCommon.Remove, "Service", SupportsShouldProcess = true, DefaultParameterSetName = "Name", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2248980")]
     public class RemoveServiceCommand : ServiceBaseCommand
     {
         #region Parameters
@@ -2380,7 +2428,6 @@ public class RemoveServiceCommand : ServiceBaseCommand
         /// <summary>
         /// Remove the service.
         /// </summary>
-        [ArchitectureSensitive]
         protected override void ProcessRecord()
         {
             ServiceController service = null;
@@ -2523,7 +2570,6 @@ protected override void ProcessRecord()
     /// <summary>
     /// Non-terminating errors occurring in the service noun commands.
     /// </summary>
-    [Serializable]
     public class ServiceCommandException : SystemException
     {
         #region ctors
@@ -2565,31 +2611,12 @@ public ServiceCommandException(string message, Exception innerException)
         /// <param name="info"></param>
         /// <param name="context"></param>
         /// <returns>Constructed object.</returns>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8, hence this method is now marked as obsolete", DiagnosticId = "SYSLIB0051")]
         protected ServiceCommandException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            if (info == null)
-            {
-                throw new ArgumentNullException(nameof(info));
-            }
-
-            _serviceName = info.GetString("ServiceName");
+            throw new NotSupportedException();
         }
-        /// <summary>
-        /// Serializer.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new ArgumentNullException(nameof(info));
-            }
 
-            base.GetObjectData(info, context);
-            info.AddValue("ServiceName", _serviceName);
-        }
         #endregion Serialization
 
         #region Properties
@@ -2761,69 +2788,6 @@ bool SetServiceObjectSecurity(
             byte[] lpSecurityDescriptor
             );
 
-        /// <summary>
-        /// CreateJobObject API creates or opens a job object.
-        /// </summary>
-        /// <param name="lpJobAttributes">
-        /// A pointer to a SECURITY_ATTRIBUTES structure that specifies the security descriptor for the
-        /// job object and determines whether child processes can inherit the returned handle.
-        /// If lpJobAttributes is NULL, the job object gets a default security descriptor
-        /// and the handle cannot be inherited.
-        /// </param>
-        /// <param name="lpName">
-        /// The name of the job.
-        /// </param>
-        /// <returns>
-        /// If the function succeeds, the return value is a handle to the job object.
-        /// If the object existed before the function call, the function
-        /// returns a handle to the existing job object.
-        /// </returns>
-        [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
-        internal static extern IntPtr CreateJobObject(IntPtr lpJobAttributes, string lpName);
-
-        /// <summary>
-        /// AssignProcessToJobObject API is used to assign a process to an existing job object.
-        /// </summary>
-        /// <param name="hJob">
-        /// A handle to the job object to which the process will be associated.
-        /// </param>
-        /// <param name="hProcess">
-        /// A handle to the process to associate with the job object.
-        /// </param>
-        /// <returns>If the function succeeds, the return value is nonzero.
-        /// If the function fails, the return value is zero.
-        /// </returns>
-        [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool AssignProcessToJobObject(SafeHandle hJob, IntPtr hProcess);
-
-        /// <summary>
-        /// Retrieves job state information from the job object.
-        /// </summary>
-        /// <param name="hJob">
-        /// A handle to the job whose information is being queried.
-        /// </param>
-        /// <param name="JobObjectInfoClass">
-        /// The information class for the limits to be queried.
-        /// </param>
-        /// <param name="lpJobObjectInfo">
-        /// The limit or job state information.
-        /// </param>
-        /// <param name="cbJobObjectLength">
-        /// The count of the job information being queried, in bytes.
-        /// </param>
-        /// <param name="lpReturnLength">
-        /// A pointer to a variable that receives the length of
-        /// data written to the structure pointed to by the lpJobObjectInfo parameter.
-        /// </param>
-        /// <returns>If the function succeeds, the return value is nonzero.
-        /// If the function fails, the return value is zero.
-        /// </returns>
-        [DllImport("Kernel32.dll", EntryPoint = "QueryInformationJobObject", SetLastError = true, CharSet = CharSet.Unicode)]
-        public static extern bool QueryInformationJobObject(SafeHandle hJob, int JobObjectInfoClass,
-                                    ref JOBOBJECT_BASIC_PROCESS_ID_LIST lpJobObjectInfo,
-                                    int cbJobObjectLength, IntPtr lpReturnLength);
-
         internal static bool QueryServiceConfig(NakedWin32Handle hService, out NativeMethods.QUERY_SERVICE_CONFIG configStructure)
         {
             IntPtr lpBuffer = IntPtr.Zero;
@@ -2960,20 +2924,20 @@ internal static ServiceStartupType GetServiceStartupType(ServiceStartMode startM
     #endregion NativeMethods
 
     #region ServiceStartupType
-    ///<summary>
-    ///Enum for usage with StartupType. Automatic, Manual and Disabled index matched from System.ServiceProcess.ServiceStartMode
-    ///</summary>
+    /// <summary>
+    /// Enum for usage with StartupType. Automatic, Manual and Disabled index matched from System.ServiceProcess.ServiceStartMode
+    /// </summary>
     public enum ServiceStartupType
     {
-        ///<summary>Invalid service</summary>
+        /// <summary>Invalid service</summary>
         InvalidValue = -1,
-        ///<summary>Automatic service</summary>
+        /// <summary>Automatic service</summary>
         Automatic = 2,
-        ///<summary>Manual service</summary>
+        /// <summary>Manual service</summary>
         Manual = 3,
-        ///<summary>Disabled service</summary>
+        /// <summary>Disabled service</summary>
         Disabled = 4,
-        ///<summary>Automatic (Delayed Start) service</summary>
+        /// <summary>Automatic (Delayed Start) service</summary>
         AutomaticDelayedStart = 10
     }
     #endregion ServiceStartupType
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetClipboardCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/SetClipboardCommand.cs
index b53ffeb01b3..49ab5d768f6 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetClipboardCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/SetClipboardCommand.cs
@@ -17,6 +17,7 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     [Cmdlet(VerbsCommon.Set, "Clipboard", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2109826")]
     [Alias("scb")]
+    [OutputType(typeof(string))]
     public class SetClipboardCommand : PSCmdlet
     {
         private readonly List<string> _contentList = new();
@@ -37,6 +38,19 @@ public class SetClipboardCommand : PSCmdlet
         [Parameter]
         public SwitchParameter Append { get; set; }
 
+        /// <summary>
+        /// Gets or sets if the values sent down the pipeline.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter PassThru { get; set; }
+
+        /// <summary>
+        /// Gets or sets whether to use OSC52 escape sequence to set the clipboard of host instead of target.
+        /// </summary>
+        [Parameter]
+        [Alias("ToLocalhost")]
+        public SwitchParameter AsOSC52 { get; set; }
+
         /// <summary>
         /// This method implements the BeginProcessing method for Set-Clipboard command.
         /// </summary>
@@ -53,6 +67,11 @@ protected override void ProcessRecord()
             if (Value != null)
             {
                 _contentList.AddRange(Value);
+
+                if (PassThru)
+                {
+                    WriteObject(Value);
+                }
             }
         }
 
@@ -117,8 +136,28 @@ private void SetClipboardContent(List<string> contentList, bool append)
 
             if (ShouldProcess(setClipboardShouldProcessTarget, "Set-Clipboard"))
             {
-                Clipboard.SetText(content.ToString());
+                SetClipboardContent(content.ToString());
             }
         }
+
+        /// <summary>
+        /// Set the clipboard content.
+        /// </summary>
+        /// <param name="content">The content to store into the clipboard.</param>
+        private void SetClipboardContent(string content)
+        {
+            if (!AsOSC52)
+            {
+                Clipboard.SetText(content);
+                return;
+            }
+
+            var bytes = System.Text.Encoding.UTF8.GetBytes(content);
+            var encoded = System.Convert.ToBase64String(bytes);
+            var osc = $"\u001B]52;;{encoded}\u0007";
+
+            var message = new HostInformationMessage { Message = osc, NoNewLine = true };
+            WriteInformation(message, new string[] { "PSHOST" });
+        }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetWMIInstanceCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/SetWMIInstanceCommand.cs
deleted file mode 100644
index 4b2deac8bef..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/SetWMIInstanceCommand.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Management;
-using System.Management.Automation;
-using System.Management.Automation.Provider;
-using System.Runtime.InteropServices;
-using System.Security.AccessControl;
-using System.Text;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command to Set WMI Instance.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "WmiInstance", DefaultParameterSetName = "class", SupportsShouldProcess = true,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=113402", RemotingCapability = RemotingCapability.OwnedByCommand)]
-    public sealed class SetWmiInstance : WmiBaseCmdlet
-    {
-        #region Parameters
-        /// <summary>
-        /// The WMI Object to use.
-        /// </summary>
-        [Parameter(ValueFromPipeline = true, Mandatory = true, ParameterSetName = "object")]
-        public ManagementObject InputObject { get; set; } = null;
-
-        /// <summary>
-        /// The WMI Path to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path", Mandatory = true)]
-        public string Path { get; set; } = null;
-
-        /// <summary>
-        /// The WMI class to use.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "class")]
-        public string Class { get; set; } = null;
-
-        /// <summary>
-        /// The property name /value pair.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(Position = 2, ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "object")]
-        [Alias("Args", "Property")]
-        [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
-        public Hashtable Arguments { get; set; } = null;
-
-        /// <summary>
-        /// The Flag to use.
-        /// </summary>
-        [Parameter]
-        public PutType PutType
-        {
-            get { return _putType; }
-
-            set { _putType = value; flagSpecified = true; }
-        }
-
-        #endregion Parameters
-        #region parameter data
-        internal bool flagSpecified = false;
-        private PutType _putType = PutType.None;
-
-        #endregion parameter data
-
-        #region Command code
-        /// <summary>
-        /// Create or modify WMI Instance given either path,class name or pipeline input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (this.AsJob)
-            {
-                RunAsJob("Set-WMIInstance");
-                return;
-            }
-
-            if (InputObject != null)
-            {
-                object result = null;
-                ManagementObject mObj = null;
-                try
-                {
-                    PutOptions pOptions = new PutOptions();
-                    mObj = SetWmiInstanceGetPipelineObject();
-                    pOptions.Type = _putType;
-                    if (mObj != null)
-                    {
-                        if (!ShouldProcess(mObj.Path.Path.ToString()))
-                        {
-                            return;
-                        }
-
-                        mObj.Put(pOptions);
-                    }
-                    else
-                    {
-                        InvalidOperationException exp = new InvalidOperationException();
-                        throw exp;
-                    }
-
-                    result = mObj;
-                }
-                catch (ManagementException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "SetWMIManagementException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    ErrorRecord errorRecord = new ErrorRecord(e, "SetWMICOMException", ErrorCategory.InvalidOperation, null);
-                    WriteError(errorRecord);
-                }
-
-                WriteObject(result);
-            }
-            else
-            {
-                ManagementPath mPath = null;
-                // If Class is specified only CreateOnly flag is supported
-                mPath = this.SetWmiInstanceBuildManagementPath();
-                // If server name is specified loop through it.
-                if (mPath != null)
-                {
-                    if (!(mPath.Server == "." && serverNameSpecified))
-                    {
-                        string[] serverName = new string[] { mPath.Server };
-                        ComputerName = serverName;
-                    }
-                }
-
-                ConnectionOptions options = GetConnectionOption();
-                object result = null;
-                ManagementObject mObject = null;
-                foreach (string name in ComputerName)
-                {
-                    result = null;
-                    try
-                    {
-                        mObject = this.SetWmiInstanceGetObject(mPath, name);
-                        PutOptions pOptions = new PutOptions();
-                        pOptions.Type = _putType;
-                        if (mObject != null)
-                        {
-                            if (!ShouldProcess(mObject.Path.Path.ToString()))
-                            {
-                                continue;
-                            }
-
-                            mObject.Put(pOptions);
-                        }
-                        else
-                        {
-                            InvalidOperationException exp = new InvalidOperationException();
-                            throw exp;
-                        }
-
-                        result = mObject;
-                    }
-                    catch (ManagementException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "SetWMIManagementException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-                    catch (System.Runtime.InteropServices.COMException e)
-                    {
-                        ErrorRecord errorRecord = new ErrorRecord(e, "SetWMICOMException", ErrorCategory.InvalidOperation, null);
-                        WriteError(errorRecord);
-                    }
-
-                    if (result != null)
-                    {
-                        WriteObject(result);
-                    }
-                }
-            }
-        }
-        #endregion Command code
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/StartTransactionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/StartTransactionCommand.cs
deleted file mode 100644
index 4f5c239cc64..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/StartTransactionCommand.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Management.Automation;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command that begins a transaction.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Start, "Transaction", SupportsShouldProcess = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135262")]
-    public class StartTransactionCommand : PSCmdlet
-    {
-        /// <summary>
-        /// The time, in minutes, before this transaction is rolled back
-        /// automatically.
-        /// </summary>
-        [Parameter()]
-        [Alias("TimeoutMins")]
-        public int Timeout
-        {
-            get
-            {
-                return (int)_timeout.TotalMinutes;
-            }
-
-            set
-            {
-                // The transactions constructor treats a timeout of
-                // zero as infinite. So we fudge it to be a bit longer.
-                if (value == 0)
-                    _timeout = TimeSpan.FromTicks(1);
-                else
-                    _timeout = TimeSpan.FromMinutes(value);
-
-                _timeoutSpecified = true;
-            }
-        }
-
-        private bool _timeoutSpecified = false;
-        private TimeSpan _timeout = TimeSpan.MinValue;
-
-        /// <summary>
-        /// Gets or sets the flag to determine if this transaction can
-        /// be committed or rolled back independently of other transactions.
-        /// </summary>
-        [Parameter()]
-        public SwitchParameter Independent
-        {
-            get { return _independent; }
-
-            set { _independent = value; }
-        }
-
-        private SwitchParameter _independent;
-
-        /// <summary>
-        /// Gets or sets the rollback preference for this transaction.
-        /// </summary>
-        [Parameter()]
-        public RollbackSeverity RollbackPreference
-        {
-            get { return _rollbackPreference; }
-
-            set { _rollbackPreference = value; }
-        }
-
-        private RollbackSeverity _rollbackPreference = RollbackSeverity.Error;
-
-        /// <summary>
-        /// Creates a new transaction.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (ShouldProcess(
-                NavigationResources.TransactionResource,
-                NavigationResources.CreateAction))
-            {
-                // Set the default timeout
-                if (!_timeoutSpecified)
-                {
-                    // See if we're being invoked directly at the
-                    // command line. In that case, set the timeout to infinite.
-                    if (MyInvocation.CommandOrigin == CommandOrigin.Runspace)
-                    {
-                        _timeout = TimeSpan.MaxValue;
-                    }
-                    else
-                    {
-                        _timeout = TimeSpan.FromMinutes(30);
-                    }
-                }
-
-                // Create the new transaction
-                if (_independent)
-                {
-                    this.Context.TransactionManager.CreateNew(_rollbackPreference, _timeout);
-                }
-                else
-                {
-                    this.Context.TransactionManager.CreateOrJoin(_rollbackPreference, _timeout);
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs
index e6b33142457..2a4a453f8f7 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestConnectionCommand.cs
@@ -27,6 +27,7 @@ namespace Microsoft.PowerShell.Commands
     [OutputType(typeof(PingMtuStatus), ParameterSetName = new string[] { MtuSizeDetectParameterSet })]
     [OutputType(typeof(int), ParameterSetName = new string[] { MtuSizeDetectParameterSet })]
     [OutputType(typeof(TraceStatus), ParameterSetName = new string[] { TraceRouteParameterSet })]
+    [OutputType(typeof(TcpPortStatus), ParameterSetName = new string[] { TcpPortParameterSet })]
     public class TestConnectionCommand : PSCmdlet, IDisposable
     {
         #region Parameter Set Names
@@ -55,7 +56,7 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
 
         #region Private Fields
 
-        private static byte[]? s_DefaultSendBuffer;
+        private static readonly byte[] s_DefaultSendBuffer = Array.Empty<byte>();
 
         private readonly CancellationTokenSource _dnsLookupCancel = new();
 
@@ -134,6 +135,7 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
         /// The default (from Windows) is 4 times.
         /// </summary>
         [Parameter(ParameterSetName = DefaultPingParameterSet)]
+        [Parameter(ParameterSetName = TcpPortParameterSet)]
         [ValidateRange(ValidateRangeKind.Positive)]
         public int Count { get; set; } = 4;
 
@@ -143,6 +145,7 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
         /// </summary>
         [Parameter(ParameterSetName = DefaultPingParameterSet)]
         [Parameter(ParameterSetName = RepeatPingParameterSet)]
+        [Parameter(ParameterSetName = TcpPortParameterSet)]
         [ValidateRange(ValidateRangeKind.Positive)]
         public int Delay { get; set; } = 1;
 
@@ -169,6 +172,7 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
         /// Gets or sets whether to continue pinging until user presses Ctrl-C (or Int.MaxValue threshold reached).
         /// </summary>
         [Parameter(Mandatory = true, ParameterSetName = RepeatPingParameterSet)]
+        [Parameter(ParameterSetName = TcpPortParameterSet)]
         [Alias("Continuous")]
         public SwitchParameter Repeat { get; set; }
 
@@ -180,6 +184,13 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
         [Parameter]
         public SwitchParameter Quiet { get; set; }
 
+        /// <summary>
+        /// Gets or sets whether to enable detailed output mode while running a TCP connection test.
+        /// Without this flag, the TCP test will return a boolean result.
+        /// </summary>
+        [Parameter(ParameterSetName = TcpPortParameterSet)]
+        public SwitchParameter Detailed;
+
         /// <summary>
         /// Gets or sets the timeout value for an individual ping in seconds.
         /// If a response is not received in this time, no response is assumed.
@@ -227,14 +238,17 @@ public class TestConnectionCommand : PSCmdlet, IDisposable
 
         /// <summary>
         /// BeginProcessing implementation for TestConnectionCommand.
+        /// Sets Count for different types of tests unless specified explicitly.
         /// </summary>
         protected override void BeginProcessing()
         {
-            switch (ParameterSetName)
+            if (Repeat)
             {
-                case RepeatPingParameterSet:
-                    Count = int.MaxValue;
-                    break;
+                Count = int.MaxValue;
+            }
+            else if (ParameterSetName == TcpPortParameterSet)
+            {
+                SetCountForTcpTest();
             }
         }
 
@@ -250,21 +264,22 @@ protected override void ProcessRecord()
 
             foreach (var targetName in TargetName)
             {
-                switch (ParameterSetName)
+                if (MtuSize)
+                {
+                    ProcessMTUSize(targetName);
+                }
+                else if (Traceroute)
+                {
+                    ProcessTraceroute(targetName);
+                }
+                else if (ParameterSetName == TcpPortParameterSet)
+                {
+                    ProcessConnectionByTCPPort(targetName);
+                }
+                else
                 {
-                    case DefaultPingParameterSet:
-                    case RepeatPingParameterSet:
-                        ProcessPing(targetName);
-                        break;
-                    case MtuSizeDetectParameterSet:
-                        ProcessMTUSize(targetName);
-                        break;
-                    case TraceRouteParameterSet:
-                        ProcessTraceroute(targetName);
-                        break;
-                    case TcpPortParameterSet:
-                        ProcessConnectionByTCPPort(targetName);
-                        break;
+                    // None of the switch parameters are true: handle default ping or -Repeat
+                    ProcessPing(targetName);
                 }
             }
         }
@@ -281,6 +296,18 @@ protected override void StopProcessing()
 
         #region ConnectionTest
 
+        private void SetCountForTcpTest()
+        {
+            if (Repeat)
+            {
+                Count = int.MaxValue;
+            }
+            else if (!MyInvocation.BoundParameters.ContainsKey(nameof(Count)))
+            {
+                Count = 1;
+            }
+        }
+
         private void ProcessConnectionByTCPPort(string targetNameOrAddress)
         {
             if (!TryResolveNameOrAddress(targetNameOrAddress, out _, out IPAddress? targetAddress))
@@ -293,42 +320,80 @@ private void ProcessConnectionByTCPPort(string targetNameOrAddress)
                 return;
             }
 
-            TcpClient client = new();
+            int timeoutMilliseconds = TimeoutSeconds * 1000;
+            int delayMilliseconds = Delay * 1000;
 
-            try
+            for (var i = 1; i <= Count; i++)
             {
-                Task connectionTask = client.ConnectAsync(targetAddress, TcpPort);
-                string targetString = targetAddress.ToString();
+                long latency = 0;
+                SocketError status = SocketError.SocketError;
+
+                Stopwatch stopwatch = new Stopwatch();
 
-                for (var i = 1; i <= TimeoutSeconds; i++)
+                using var client = new TcpClient();
+
+                try
                 {
-                    Task timeoutTask = Task.Delay(millisecondsDelay: 1000);
-                    Task.WhenAny(connectionTask, timeoutTask).Result.Wait();
+                    stopwatch.Start();
 
-                    if (timeoutTask.Status == TaskStatus.Faulted || timeoutTask.Status == TaskStatus.Canceled)
+                    if (client.ConnectAsync(targetAddress, TcpPort).Wait(timeoutMilliseconds, _dnsLookupCancel.Token))
                     {
-                        // Waiting is interrupted by Ctrl-C.
-                        WriteObject(false);
-                        return;
+                        latency = stopwatch.ElapsedMilliseconds;
+                        status = SocketError.Success;
                     }
-
-                    if (connectionTask.Status == TaskStatus.RanToCompletion)
+                    else
                     {
-                        WriteObject(true);
-                        return;
+                        status = SocketError.TimedOut;
                     }
                 }
-            }
-            catch
-            {
-                // Silently ignore connection errors.
-            }
-            finally
-            {
-                client.Close();
-            }
+                catch (AggregateException ae)
+                {
+                    ae.Handle((ex) =>
+                    {
+                        if (ex is TaskCanceledException)
+                        {
+                            throw new PipelineStoppedException();
+                        }
+                        if (ex is SocketException socketException)
+                        {
+                            status = socketException.SocketErrorCode;
+                            return true;
+                        }
+                        else
+                        {
+                            return false;
+                        }
+                    });
+                }
+                finally
+                {
+                    stopwatch.Reset();
+                }
+
+                if (!Detailed.IsPresent)
+                {
+                    WriteObject(status == SocketError.Success);
+                    return;
+                }
+                else
+                {
+                    WriteObject(new TcpPortStatus(
+                        i,
+                        Source,
+                        targetNameOrAddress,
+                        targetAddress,
+                        TcpPort,
+                        latency,
+                        status == SocketError.Success,
+                        status
+                    ));
+                }
 
-            WriteObject(false);
+                if (i < Count)
+                {
+                    Task.Delay(delayMilliseconds).Wait(_dnsLookupCancel.Token);
+                }
+            }
         }
 
         #endregion ConnectionTest
@@ -419,7 +484,10 @@ private void ProcessTraceroute(string targetNameOrAddress)
                                 reply.Status == IPStatus.Success
                                     ? reply.RoundtripTime
                                     : timer.ElapsedMilliseconds,
-                                buffer.Length,
+
+                                // If we use the empty buffer, then .NET actually uses a 32 byte buffer so we want to show
+                                // as the result object the actual buffer size used instead of 0.
+                                buffer.Length == 0 ? DefaultSendBufferSize : buffer.Length,
                                 pingNum: i);
                             WriteObject(new TraceStatus(
                                 currentHop,
@@ -497,6 +565,8 @@ private void ProcessMTUSize(string targetNameOrAddress)
             int LowMTUSize = targetAddress.AddressFamily == AddressFamily.InterNetworkV6 ? 1280 : 68;
             int timeout = TimeoutSeconds * 1000;
 
+            PingReply? timeoutReply = null;
+
             try
             {
                 PingOptions pingOptions = new(MaxHops, true);
@@ -517,6 +587,7 @@ private void ProcessMTUSize(string targetNameOrAddress)
                     if (reply.Status == IPStatus.PacketTooBig || reply.Status == IPStatus.TimedOut)
                     {
                         HighMTUSize = CurrentMTUSize;
+                        timeoutReply = reply;
                         retry = 1;
                     }
                     else if (reply.Status == IPStatus.Success)
@@ -575,11 +646,32 @@ private void ProcessMTUSize(string targetNameOrAddress)
             }
             else
             {
-                WriteObject(new PingMtuStatus(
-                    Source,
-                    resolvedTargetName,
-                    replyResult ?? throw new ArgumentNullException(nameof(replyResult)),
-                    CurrentMTUSize));
+                if (replyResult is null)
+                {
+                    if (timeoutReply is not null)
+                    {
+                        Exception timeoutException = new TimeoutException(targetAddress.ToString());
+                        ErrorRecord errorRecord = new(
+                            timeoutException,
+                            TestConnectionExceptionId,
+                            ErrorCategory.ResourceUnavailable,
+                            timeoutReply);
+                        WriteError(errorRecord);
+                    }
+                    else
+                    {
+                        ArgumentNullException.ThrowIfNull(replyResult);
+                    }
+                }
+                else
+                {
+                    WriteObject(new PingMtuStatus(
+                        Source,
+                        resolvedTargetName,
+                        replyResult,
+                        CurrentMTUSize));
+                }
+
             }
         }
 
@@ -640,7 +732,7 @@ private void ProcessPing(string targetNameOrAddress)
                         resolvedTargetName,
                         reply,
                         reply.RoundtripTime,
-                        buffer.Length,
+                        buffer.Length == 0 ? DefaultSendBufferSize : buffer.Length,
                         pingNum: (uint)i));
                 }
 
@@ -795,7 +887,7 @@ private IPHostEntry GetCancellableHostEntry(string targetNameOrAddress)
         // Creates and fills a send buffer. This follows the ping.exe and CoreFX model.
         private static byte[] GetSendBuffer(int bufferSize)
         {
-            if (bufferSize == DefaultSendBufferSize && s_DefaultSendBuffer != null)
+            if (bufferSize == DefaultSendBufferSize)
             {
                 return s_DefaultSendBuffer;
             }
@@ -807,11 +899,6 @@ private static byte[] GetSendBuffer(int bufferSize)
                 sendBuffer[i] = (byte)((int)'a' + i % 23);
             }
 
-            if (bufferSize == DefaultSendBufferSize && s_DefaultSendBuffer == null)
-            {
-                s_DefaultSendBuffer = sendBuffer;
-            }
-
             return sendBuffer;
         }
 
@@ -875,6 +962,75 @@ private PingReply SendCancellablePing(
             }
         }
 
+        /// <summary>
+        /// The class contains information about the TCP connection test.
+        /// </summary>
+        public class TcpPortStatus
+        {
+            /// <summary>
+            /// Initializes a new instance of the <see cref="TcpPortStatus"/> class.
+            /// </summary>
+            /// <param name="id">The number of this test.</param>
+            /// <param name="source">The source machine name or IP of the test.</param>
+            /// <param name="target">The target machine name or IP of the test.</param>
+            /// <param name="targetAddress">The resolved IP from the target.</param>
+            /// <param name="port">The port used for the connection.</param>
+            /// <param name="latency">The latency of the test.</param>
+            /// <param name="connected">If the test connection succeeded.</param>
+            /// <param name="status">Status of the underlying socket.</param>
+            internal TcpPortStatus(int id, string source, string target, IPAddress targetAddress, int port, long latency, bool connected, SocketError status)
+            {
+                Id = id;
+                Source = source;
+                Target = target;
+                TargetAddress = targetAddress;
+                Port = port;
+                Latency = latency;
+                Connected = connected;
+                Status = status;
+            }
+
+            /// <summary>
+            /// Gets and sets the count of the test.
+            /// </summary>
+            public int Id { get; set; }
+
+            /// <summary>
+            /// Gets the source from which the test was sent.
+            /// </summary>
+            public string Source { get; }
+
+            /// <summary>
+            /// Gets the target name.
+            /// </summary>
+            public string Target { get; }
+
+            /// <summary>
+            /// Gets the resolved address for the target.
+            /// </summary>
+            public IPAddress TargetAddress { get; }
+
+            /// <summary>
+            /// Gets the port used for the test.
+            /// </summary>
+            public int Port { get; }
+
+            /// <summary>
+            /// Gets or sets the latancy of the connection.
+            /// </summary>
+            public long Latency { get; set; }
+
+            /// <summary>
+            /// Gets or sets the result of the test.
+            /// </summary>
+            public bool Connected { get; set; }
+
+            /// <summary>
+            /// Gets or sets the state of the socket after the test.
+            /// </summary>
+            public SocketError Status { get; set; }
+        }
+
         /// <summary>
         /// The class contains information about the source, the destination and ping results.
         /// </summary>
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/TestPathCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestPathCommand.cs
new file mode 100644
index 00000000000..50765c0e0ae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/TestPathCommand.cs
@@ -0,0 +1,247 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System;
+using System.Management.Automation;
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// The valid values for the -PathType parameter for test-path.
+    /// </summary>
+    public enum TestPathType
+    {
+        /// <summary>
+        /// If the item at the path exists, true will be returned.
+        /// </summary>
+        Any,
+
+        /// <summary>
+        /// If the item at the path exists and is a container, true will be returned.
+        /// </summary>
+        Container,
+
+        /// <summary>
+        /// If the item at the path exists and is not a container, true will be returned.
+        /// </summary>
+        Leaf
+    }
+
+    /// <summary>
+    /// A command to determine if an item exists at a specified path.
+    /// </summary>
+    [Cmdlet(VerbsDiagnostic.Test, "Path", DefaultParameterSetName = "Path", SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097057")]
+    [OutputType(typeof(bool))]
+    public class TestPathCommand : CoreCommandWithCredentialsBase
+    {
+        #region Parameters
+
+        /// <summary>
+        /// Gets or sets the path parameter to the command.
+        /// </summary>
+        [Parameter(Position = 0, ParameterSetName = "Path",
+                    Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
+        [AllowNull]
+        [AllowEmptyCollection]
+        [AllowEmptyString]
+        public string[] Path
+        {
+            get { return _paths; }
+
+            set { _paths = value; }
+        }
+
+        /// <summary>
+        /// Gets or sets the literal path parameter to the command.
+        /// </summary>
+        [Parameter(ParameterSetName = "LiteralPath",
+                   Mandatory = true, ValueFromPipeline = false, ValueFromPipelineByPropertyName = true)]
+        [Alias("PSPath", "LP")]
+        [AllowNull]
+        [AllowEmptyCollection]
+        [AllowEmptyString]
+        public string[] LiteralPath
+        {
+            get
+            {
+                return _paths;
+            }
+
+            set
+            {
+                base.SuppressWildcardExpansion = true;
+                _paths = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the filter property.
+        /// </summary>
+        [Parameter]
+        public override string Filter
+        {
+            get { return base.Filter; }
+
+            set { base.Filter = value; }
+        }
+
+        /// <summary>
+        /// Gets or sets the include property.
+        /// </summary>
+        [Parameter]
+        public override string[] Include
+        {
+            get { return base.Include; }
+
+            set { base.Include = value; }
+        }
+
+        /// <summary>
+        /// Gets or sets the exclude property.
+        /// </summary>
+        [Parameter]
+        public override string[] Exclude
+        {
+            get { return base.Exclude; }
+
+            set { base.Exclude = value; }
+        }
+
+        /// <summary>
+        /// Gets or sets the isContainer property.
+        /// </summary>
+        [Parameter]
+        [Alias("Type")]
+        public TestPathType PathType { get; set; } = TestPathType.Any;
+
+        /// <summary>
+        /// Gets or sets the IsValid parameter.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter IsValid { get; set; } = new SwitchParameter();
+
+        /// <summary>
+        /// A virtual method for retrieving the dynamic parameters for a cmdlet. Derived cmdlets
+        /// that require dynamic parameters should override this method and return the
+        /// dynamic parameter object.
+        /// </summary>
+        /// <param name="context">
+        /// The context under which the command is running.
+        /// </param>
+        /// <returns>
+        /// An object representing the dynamic parameters for the cmdlet or null if there
+        /// are none.
+        /// </returns>
+        internal override object GetDynamicParameters(CmdletProviderContext context)
+        {
+            object result = null;
+
+            if (!IsValid)
+            {
+                if (Path != null && Path.Length > 0 && Path[0] != null)
+                {
+                    result = InvokeProvider.Item.ItemExistsDynamicParameters(Path[0], context);
+                }
+                else
+                {
+                    result = InvokeProvider.Item.ItemExistsDynamicParameters(".", context);
+                }
+            }
+
+            return result;
+        }
+
+        #endregion Parameters
+
+        #region parameter data
+
+        /// <summary>
+        /// The path to the item to ping.
+        /// </summary>
+        private string[] _paths;
+
+        #endregion parameter data
+
+        #region Command code
+
+        /// <summary>
+        /// Determines if an item at the specified path exists.
+        /// </summary>
+        protected override void ProcessRecord()
+        {
+            if (_paths == null || _paths.Length == 0)
+            {
+                WriteError(new ErrorRecord(
+                    new ArgumentNullException(TestPathResources.PathIsNullOrEmptyCollection),
+                    "NullPathNotPermitted",
+                    ErrorCategory.InvalidArgument,
+                    Path));
+
+                return;
+            }
+
+            CmdletProviderContext currentContext = CmdletProviderContext;
+
+            foreach (string path in _paths)
+            {
+                bool result = false;
+
+                if (string.IsNullOrWhiteSpace(path))
+                {
+                    if (path is null)
+                    {
+                        WriteError(new ErrorRecord(
+                            new ArgumentNullException(TestPathResources.PathIsNullOrEmptyCollection),
+                            "NullPathNotPermitted",
+                            ErrorCategory.InvalidArgument,
+                            Path));
+                    }
+                    else
+                    {
+                        WriteObject(result);
+                    }
+
+                    continue;
+                }
+
+                try
+                {
+                    if (IsValid)
+                    {
+                        result = SessionState.Path.IsValid(path, currentContext);
+                    }
+                    else
+                    {
+                        result = InvokeProvider.Item.Exists(path, currentContext);
+
+                        if (this.PathType == TestPathType.Container)
+                        {
+                            result &= InvokeProvider.Item.IsContainer(path, currentContext);
+                        }
+                        else if (this.PathType == TestPathType.Leaf)
+                        {
+                            result &= !InvokeProvider.Item.IsContainer(path, currentContext);
+                        }
+                    }
+                }
+
+                // Any of the known exceptions means the path does not exist.
+                catch (PSNotSupportedException)
+                {
+                }
+                catch (DriveNotFoundException)
+                {
+                }
+                catch (ProviderNotFoundException)
+                {
+                }
+                catch (ItemNotFoundException)
+                {
+                }
+
+                WriteObject(result);
+            }
+        }
+        #endregion Command code
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs
index 69e8860f3ab..22a50e41176 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/TimeZoneCommands.cs
@@ -17,6 +17,7 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     [Cmdlet(VerbsCommon.Get, "TimeZone", DefaultParameterSetName = "Name",
         HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096904")]
+    [OutputType(typeof(TimeZoneInfo))]
     [Alias("gtz")]
     public class GetTimeZoneCommand : PSCmdlet
     {
@@ -53,7 +54,7 @@ protected override void ProcessRecord()
             // make sure we've got the latest time zone settings
             TimeZoneInfo.ClearCachedData();
 
-            if (this.ParameterSetName.Equals("ListAvailable", StringComparison.OrdinalIgnoreCase))
+            if (ListAvailable)
             {
                 // output the list of all available time zones
                 WriteObject(TimeZoneInfo.GetSystemTimeZones(), true);
@@ -121,6 +122,7 @@ protected override void ProcessRecord()
         SupportsShouldProcess = true,
         DefaultParameterSetName = "Name",
         HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2097056")]
+    [OutputType(typeof(TimeZoneInfo))]
     [Alias("stz")]
     public class SetTimeZoneCommand : PSCmdlet
     {
@@ -159,7 +161,7 @@ public class SetTimeZoneCommand : PSCmdlet
         #endregion Parameters
 
         /// <summary>
-        /// Implementation of the ProcessRecord method for Get-TimeZone.
+        /// Implementation of the ProcessRecord method for Set-TimeZone.
         /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Justification = "Since Name is not a parameter of this method, it confuses FXCop. It is the appropriate value for the exception.")]
         protected override void ProcessRecord()
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/UseTransactionCommand.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/UseTransactionCommand.cs
deleted file mode 100644
index 056cf60265b..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/UseTransactionCommand.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Management.Automation;
-using System.Management.Automation.Internal;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// A command that commits a transaction.
-    /// </summary>
-    [Cmdlet(VerbsOther.Use, "Transaction", SupportsTransactions = true, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135271")]
-    public class UseTransactionCommand : PSCmdlet
-    {
-        /// <summary>
-        /// This parameter specifies the script block to run in the current
-        /// PowerShell transaction.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true)]
-        public ScriptBlock TransactedScript
-        {
-            get
-            {
-                return _transactedScript;
-            }
-
-            set
-            {
-                _transactedScript = value;
-            }
-        }
-
-        private ScriptBlock _transactedScript;
-
-        /// <summary>
-        /// Commits the current transaction.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            using (CurrentPSTransaction)
-            {
-                try
-                {
-                    var emptyArray = Array.Empty<object>();
-                    _transactedScript.InvokeUsingCmdlet(
-                        contextCmdlet: this,
-                        useLocalScope: false,
-                        errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
-                        dollarUnder: null,
-                        input: emptyArray,
-                        scriptThis: AutomationNull.Value,
-                        args: emptyArray);
-                }
-                catch (Exception e)
-                {
-                    // Catch-all OK. This is a third-party call-out.
-
-                    ErrorRecord errorRecord = new ErrorRecord(e, "TRANSACTED_SCRIPT_EXCEPTION", ErrorCategory.NotSpecified, null);
-
-                    // The "transaction timed out" exception is
-                    // exceedingly obtuse. We clarify things here.
-                    bool isTimeoutException = false;
-                    Exception tempException = e;
-                    while (tempException != null)
-                    {
-                        if (tempException is System.TimeoutException)
-                        {
-                            isTimeoutException = true;
-                            break;
-                        }
-
-                        tempException = tempException.InnerException;
-                    }
-
-                    if (isTimeoutException)
-                    {
-                        errorRecord = new ErrorRecord(
-                            new InvalidOperationException(
-                                TransactionResources.TransactionTimedOut),
-                            "TRANSACTION_TIMEOUT",
-                            ErrorCategory.InvalidOperation,
-                            e);
-                    }
-
-                    WriteError(errorRecord);
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/WMIHelper.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/WMIHelper.cs
deleted file mode 100644
index eed6efff76a..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/WMIHelper.cs
+++ /dev/null
@@ -1,2083 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.Management;
-using System.Management.Automation;
-using System.Management.Automation.Internal;
-using System.Management.Automation.Provider;
-using System.Management.Automation.Remoting;
-using System.Runtime.InteropServices;
-using System.Security.AccessControl;
-using System.Text;
-using System.Threading;
-
-using Microsoft.PowerShell.Commands.Internal;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    #region Helper Classes
-
-    /// <summary>
-    /// Base class for all WMI helper classes. This is an abstract class
-    /// and the helpers need to derive from this.
-    /// </summary>
-    internal abstract class AsyncCmdletHelper : IThrottleOperation
-    {
-        /// <summary>
-        /// Exception raised internally when any method of this class
-        /// is executed.
-        /// </summary>
-        internal Exception InternalException
-        {
-            get
-            {
-                return internalException;
-            }
-        }
-
-        protected Exception internalException = null;
-    }
-
-    /// <summary>
-    /// This class is responsible for creating WMI connection for getting objects and notifications
-    /// from WMI asynchronously. This spawns a new thread to connect to WMI on remote machine.
-    /// This allows the main thread to return faster and not blocked on network hops.
-    /// </summary>
-    internal class WmiAsyncCmdletHelper : AsyncCmdletHelper
-    {
-        /// <summary>
-        /// Internal Constructor.
-        /// </summary>
-        /// <param name="childJob">Job associated with this operation.</param>
-        /// <param name="wmiObject">Object associated with this operation.</param>
-        /// <param name="computerName">Computer on which the operation is invoked.</param>
-        /// <param name="results">Sink to get wmi objects.</param>
-        internal WmiAsyncCmdletHelper(PSWmiChildJob childJob, Cmdlet wmiObject, string computerName, ManagementOperationObserver results)
-        {
-            _wmiObject = wmiObject;
-            _computerName = computerName;
-            _results = results;
-            this.State = WmiState.NotStarted;
-            _job = childJob;
-        }
-
-        /// <summary>
-        /// Internal Constructor.  This variant takes a count parameter that determines how many times
-        /// the WMI command is executed.
-        /// </summary>
-        /// <param name="childJob">Job associated with this operation.</param>
-        /// <param name="wmiObject">Object associated with this operation.</param>
-        /// <param name="computerName">Computer on which the operation is invoked.</param>
-        /// <param name="results">Sink to return wmi objects.</param>
-        /// <param name="count">Number of times the WMI command is executed.</param>
-        internal WmiAsyncCmdletHelper(PSWmiChildJob childJob, Cmdlet wmiObject, string computerName, ManagementOperationObserver results, int count)
-            : this(childJob, wmiObject, computerName, results)
-        {
-            _cmdCount = count;
-        }
-
-        private string _computerName;
-        internal event EventHandler<WmiJobStateEventArgs> WmiOperationState;
-        internal event EventHandler<EventArgs> ShutdownComplete;
-        private ManagementOperationObserver _results;
-        private int _cmdCount = 1;
-        private PSWmiChildJob _job;
-        /// <summary>
-        /// Current operation state.
-        /// </summary>
-        internal WmiState State
-        {
-            get { return _state; }
-
-            set { _state = value; }
-        }
-
-        private WmiState _state;
-
-        /// <summary>
-        /// Cancel WMI connection.
-        /// </summary>
-        internal override void StopOperation()
-        {
-            _results.Cancel();
-            _state = WmiState.Stopped;
-            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-        }
-        /// <summary>
-        /// Uses this.filter, this.wmiClass and this.property to retrieve the filter.
-        /// </summary>
-        private string GetWmiQueryString()
-        {
-            GetWmiObjectCommand getObject = (GetWmiObjectCommand)_wmiObject;
-            StringBuilder returnValue = new StringBuilder("select ");
-            returnValue.Append(string.Join(", ", getObject.Property));
-            returnValue.Append(" from ");
-            returnValue.Append(getObject.Class);
-            if (!string.IsNullOrEmpty(getObject.Filter))
-            {
-                returnValue.Append(" where ");
-                returnValue.Append(getObject.Filter);
-            }
-
-            return returnValue.ToString();
-        }
-
-        /// <summary>
-        /// Do WMI connection by creating another thread based on type of request and return immediately.
-        /// </summary>
-        internal override void StartOperation()
-        {
-            Thread thread;
-            if (_wmiObject.GetType() == typeof(GetWmiObjectCommand))
-            {
-                thread = new Thread(new ThreadStart(ConnectGetWMI));
-            }
-            else if (_wmiObject.GetType() == typeof(RemoveWmiObject))
-            {
-                thread = new Thread(new ThreadStart(ConnectRemoveWmi));
-            }
-            else if (_wmiObject is InvokeWmiMethod)
-            {
-                thread = new Thread(new ThreadStart(ConnectInvokeWmi));
-            }
-            else if (_wmiObject is SetWmiInstance)
-            {
-                thread = new Thread(new ThreadStart(ConnectSetWmi));
-            }
-            else
-            {
-                InvalidOperationException exception = new InvalidOperationException("This operation is not supported for this cmdlet.");
-                internalException = exception;
-                _state = WmiState.Failed;
-                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                return;
-            }
-
-            thread.IsBackground = true;
-            thread.SetApartmentState(ApartmentState.STA);
-            thread.Start();
-        }
-
-        /// <summary>
-        /// </summary>
-        internal override event EventHandler<OperationStateEventArgs> OperationComplete;
-
-        private Cmdlet _wmiObject;
-
-        /// <summary>
-        /// Raise operation completion event.
-        /// </summary>
-        internal void RaiseOperationCompleteEvent(EventArgs baseEventArgs, OperationState state)
-        {
-            OperationStateEventArgs operationStateEventArgs = new OperationStateEventArgs();
-            operationStateEventArgs.OperationState = state;
-            OperationComplete.SafeInvoke(this, operationStateEventArgs);
-        }
-
-        ///<summary>
-        /// Raise WMI state changed event
-        ///</summary>
-        internal void RaiseWmiOperationState(EventArgs baseEventArgs, WmiState state)
-        {
-            WmiJobStateEventArgs wmiJobStateEventArgs = new WmiJobStateEventArgs();
-            wmiJobStateEventArgs.WmiState = state;
-            WmiOperationState.SafeInvoke(this, wmiJobStateEventArgs);
-        }
-
-        /// <summary>
-        /// Do the actual connection to remote machine for Set-WMIInstance cmdlet and raise operation complete event.
-        /// </summary>
-        private void ConnectSetWmi()
-        {
-            SetWmiInstance setObject = (SetWmiInstance)_wmiObject;
-            _state = WmiState.Running;
-            RaiseWmiOperationState(null, WmiState.Running);
-            if (setObject.InputObject != null)
-            {
-                ManagementObject mObj = null;
-                try
-                {
-                    PutOptions pOptions = new PutOptions();
-                    // Extra check
-                    if (setObject.InputObject.GetType() == typeof(ManagementClass))
-                    {
-                        // Check if Flag specified is CreateOnly or not
-                        if (setObject.flagSpecified && setObject.PutType != PutType.CreateOnly)
-                        {
-                            InvalidOperationException e = new InvalidOperationException("CreateOnlyFlagNotSpecifiedWithClassPath");
-                            internalException = e;
-                            _state = WmiState.Failed;
-                            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                            return;
-                        }
-
-                        mObj = ((ManagementClass)setObject.InputObject).CreateInstance();
-                        setObject.PutType = PutType.CreateOnly;
-                    }
-                    else
-                    {
-                        // Check if Flag specified is Updateonly or UpdateOrCreateOnly or not
-                        if (setObject.flagSpecified)
-                        {
-                            if (!(setObject.PutType == PutType.UpdateOnly || setObject.PutType == PutType.UpdateOrCreate))
-                            {
-                                InvalidOperationException e = new InvalidOperationException("NonUpdateFlagSpecifiedWithInstancePath");
-                                internalException = e;
-                                _state = WmiState.Failed;
-                                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                                return;
-                            }
-                        }
-                        else
-                        {
-                            setObject.PutType = PutType.UpdateOrCreate;
-                        }
-
-                        mObj = (ManagementObject)setObject.InputObject.Clone();
-                    }
-
-                    if (setObject.Arguments != null)
-                    {
-                        IDictionaryEnumerator en = setObject.Arguments.GetEnumerator();
-                        while (en.MoveNext())
-                        {
-                            mObj[en.Key as string] = en.Value;
-                        }
-                    }
-
-                    pOptions.Type = setObject.PutType;
-                    if (mObj != null)
-                    {
-                        mObj.Put(_results, pOptions);
-                    }
-                    else
-                    {
-                        InvalidOperationException exp = new InvalidOperationException();
-                        internalException = exp;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                    }
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-            }
-            else
-            {
-                ManagementPath mPath = null;
-                // If Class is specified only CreateOnly flag is supported
-                if (setObject.Class != null)
-                {
-                    if (setObject.flagSpecified && setObject.PutType != PutType.CreateOnly)
-                    {
-                        InvalidOperationException exp = new InvalidOperationException("CreateOnlyFlagNotSpecifiedWithClassPath");
-                        internalException = exp;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    setObject.PutType = PutType.CreateOnly;
-                }
-                else
-                {
-                    mPath = new ManagementPath(setObject.Path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = setObject.Namespace;
-                    }
-                    else if (setObject.namespaceSpecified)
-                    {
-                        InvalidOperationException exp = new InvalidOperationException("NamespaceSpecifiedWithPath");
-                        internalException = exp;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    if (mPath.Server != "." && setObject.serverNameSpecified)
-                    {
-                        InvalidOperationException exp = new InvalidOperationException("ComputerNameSpecifiedWithPath");
-                        internalException = exp;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    if (mPath.IsClass)
-                    {
-                        if (setObject.flagSpecified && setObject.PutType != PutType.CreateOnly)
-                        {
-                            InvalidOperationException exp = new InvalidOperationException("CreateOnlyFlagNotSpecifiedWithClassPath");
-                            internalException = exp;
-                            _state = WmiState.Failed;
-                            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                            return;
-                        }
-
-                        setObject.PutType = PutType.CreateOnly;
-                    }
-                    else
-                    {
-                        if (setObject.flagSpecified)
-                        {
-                            if (!(setObject.PutType == PutType.UpdateOnly || setObject.PutType == PutType.UpdateOrCreate))
-                            {
-                                InvalidOperationException exp = new InvalidOperationException("NonUpdateFlagSpecifiedWithInstancePath");
-                                internalException = exp;
-                                _state = WmiState.Failed;
-                                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                                return;
-                            }
-                        }
-                        else
-                        {
-                            setObject.PutType = PutType.UpdateOrCreate;
-                        }
-                    }
-                }
-                // If server name is specified loop through it.
-                if (mPath != null)
-                {
-                    if (!(mPath.Server == "." && setObject.serverNameSpecified))
-                    {
-                        _computerName = mPath.Server;
-                    }
-                }
-
-                ConnectionOptions options = setObject.GetConnectionOption();
-                ManagementObject mObject = null;
-                try
-                {
-                    if (setObject.Path != null)
-                    {
-                        mPath.Server = _computerName;
-                        ManagementScope mScope = new ManagementScope(mPath, options);
-                        if (mPath.IsClass)
-                        {
-                            ManagementClass mClass = new ManagementClass(mPath);
-                            mClass.Scope = mScope;
-                            mObject = mClass.CreateInstance();
-                        }
-                        else
-                        {
-                            // This can throw if path does not exist caller should catch it.
-                            ManagementObject mInstance = new ManagementObject(mPath);
-                            mInstance.Scope = mScope;
-                            try
-                            {
-                                mInstance.Get();
-                            }
-                            catch (ManagementException e)
-                            {
-                                if (e.ErrorCode != ManagementStatus.NotFound)
-                                {
-                                    internalException = e;
-                                    _state = WmiState.Failed;
-                                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                                    return;
-                                }
-
-                                int namespaceIndex = setObject.Path.IndexOf(':');
-                                if (namespaceIndex == -1)
-                                {
-                                    internalException = e;
-                                    _state = WmiState.Failed;
-                                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                                    return;
-                                }
-
-                                int classIndex = (setObject.Path.Substring(namespaceIndex)).IndexOf('.');
-                                if (classIndex == -1)
-                                {
-                                    internalException = e;
-                                    _state = WmiState.Failed;
-                                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                                    return;
-                                }
-                                // Get class object and create instance.
-                                string newPath = setObject.Path.Substring(0, classIndex + namespaceIndex);
-                                ManagementPath classPath = new ManagementPath(newPath);
-                                ManagementClass mClass = new ManagementClass(classPath);
-                                mClass.Scope = mScope;
-                                mInstance = mClass.CreateInstance();
-                            }
-
-                            mObject = mInstance;
-                        }
-                    }
-                    else
-                    {
-                        ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, setObject.Namespace), options);
-                        ManagementClass mClass = new ManagementClass(setObject.Class);
-                        mClass.Scope = scope;
-                        mObject = mClass.CreateInstance();
-                    }
-
-                    if (setObject.Arguments != null)
-                    {
-                        IDictionaryEnumerator en = setObject.Arguments.GetEnumerator();
-                        while (en.MoveNext())
-                        {
-                            mObject[en.Key as string] = en.Value;
-                        }
-                    }
-
-                    PutOptions pOptions = new PutOptions();
-                    pOptions.Type = setObject.PutType;
-                    if (mObject != null)
-                    {
-                        mObject.Put(_results, pOptions);
-                    }
-                    else
-                    {
-                        InvalidOperationException exp = new InvalidOperationException();
-                        internalException = exp;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                    }
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Do the actual connection to remote machine for Invoke-WMIMethod cmdlet and raise operation complete event.
-        /// </summary>
-        private void ConnectInvokeWmi()
-        {
-            InvokeWmiMethod invokeObject = (InvokeWmiMethod)_wmiObject;
-            _state = WmiState.Running;
-            RaiseWmiOperationState(null, WmiState.Running);
-
-            if (invokeObject.InputObject != null)
-            {
-                ManagementBaseObject inputParameters = null;
-                try
-                {
-                    inputParameters = invokeObject.InputObject.GetMethodParameters(invokeObject.Name);
-                    if (invokeObject.ArgumentList != null)
-                    {
-                        int inParamCount = invokeObject.ArgumentList.Length;
-                        foreach (PropertyData property in inputParameters.Properties)
-                        {
-                            if (inParamCount == 0)
-                                break;
-                            property.Value = invokeObject.ArgumentList[invokeObject.ArgumentList.Length - inParamCount];
-                            inParamCount--;
-                        }
-                    }
-
-                    invokeObject.InputObject.InvokeMethod(_results, invokeObject.Name, inputParameters, null);
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-
-                return;
-            }
-            else
-            {
-                ConnectionOptions options = invokeObject.GetConnectionOption();
-                ManagementPath mPath = null;
-                ManagementObject mObject = null;
-                if (invokeObject.Path != null)
-                {
-                    mPath = new ManagementPath(invokeObject.Path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = invokeObject.Namespace;
-                    }
-                    else if (invokeObject.namespaceSpecified)
-                    {
-                        InvalidOperationException e = new InvalidOperationException("NamespaceSpecifiedWithPath");
-                        internalException = e;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    if (mPath.Server != "." && invokeObject.serverNameSpecified)
-                    {
-                        InvalidOperationException e = new InvalidOperationException("ComputerNameSpecifiedWithPath");
-                        internalException = e;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-                    // If server name is specified loop through it.
-                    if (!(mPath.Server == "." && invokeObject.serverNameSpecified))
-                    {
-                        _computerName = mPath.Server;
-                    }
-                }
-
-                bool isLocal = false, needToEnablePrivilege = false;
-                PlatformInvokes.TOKEN_PRIVILEGE currentPrivilegeState = new PlatformInvokes.TOKEN_PRIVILEGE();
-                try
-                {
-                    needToEnablePrivilege = NeedToEnablePrivilege(_computerName, invokeObject.Name, ref isLocal);
-                    if (needToEnablePrivilege)
-                    {
-                        if (!(isLocal && PlatformInvokes.EnableTokenPrivilege(ComputerWMIHelper.SE_SHUTDOWN_NAME, ref currentPrivilegeState)) &&
-                            !(!isLocal && PlatformInvokes.EnableTokenPrivilege(ComputerWMIHelper.SE_REMOTE_SHUTDOWN_NAME, ref currentPrivilegeState)))
-                        {
-                            string message =
-                                StringUtil.Format(ComputerResources.PrivilegeNotEnabled, _computerName,
-                                isLocal ? ComputerWMIHelper.SE_SHUTDOWN_NAME : ComputerWMIHelper.SE_REMOTE_SHUTDOWN_NAME);
-                            InvalidOperationException e = new InvalidOperationException(message);
-                            internalException = e;
-                            _state = WmiState.Failed;
-                            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                            return;
-                        }
-                    }
-
-                    if (invokeObject.Path != null)
-                    {
-                        mPath.Server = _computerName;
-                        if (mPath.IsClass)
-                        {
-                            ManagementClass mClass = new ManagementClass(mPath);
-                            mObject = mClass;
-                        }
-                        else
-                        {
-                            ManagementObject mInstance = new ManagementObject(mPath);
-                            mObject = mInstance;
-                        }
-
-                        ManagementScope mScope = new ManagementScope(mPath, options);
-                        mObject.Scope = mScope;
-                    }
-                    else
-                    {
-                        ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, invokeObject.Namespace), options);
-                        ManagementClass mClass = new ManagementClass(invokeObject.Class);
-                        mObject = mClass;
-                        mObject.Scope = scope;
-                    }
-
-                    ManagementBaseObject inputParameters = mObject.GetMethodParameters(invokeObject.Name);
-                    if (invokeObject.ArgumentList != null)
-                    {
-                        int inParamCount = invokeObject.ArgumentList.Length;
-                        foreach (PropertyData property in inputParameters.Properties)
-                        {
-                            if (inParamCount == 0)
-                                break;
-                            property.Value = invokeObject.ArgumentList[invokeObject.ArgumentList.Length - inParamCount];
-                            inParamCount--;
-                        }
-                    }
-
-                    if (needToEnablePrivilege)
-                    {
-                        ManagementBaseObject result = mObject.InvokeMethod(invokeObject.Name, inputParameters, null);
-                        Dbg.Diagnostics.Assert(result != null, "result cannot be null if the Join method is invoked");
-                        int returnCode = Convert.ToInt32(result["ReturnValue"], CultureInfo.CurrentCulture);
-                        if (returnCode != 0)
-                        {
-                            var e = new Win32Exception(returnCode);
-                            internalException = e;
-                            _state = WmiState.Failed;
-                            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        }
-                        else
-                        {
-                            ShutdownComplete.SafeInvoke(this, null);
-                        }
-                    }
-                    else
-                    {
-                        mObject.InvokeMethod(_results, invokeObject.Name, inputParameters, null);
-                    }
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                finally
-                {
-                    // Restore the previous privilege state if something unexpected happened
-                    if (needToEnablePrivilege)
-                    {
-                        PlatformInvokes.RestoreTokenPrivilege(
-                            isLocal ? ComputerWMIHelper.SE_SHUTDOWN_NAME : ComputerWMIHelper.SE_REMOTE_SHUTDOWN_NAME, ref currentPrivilegeState);
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Check if we need to enable the shutdown privilege.
-        /// </summary>
-        /// <param name="computer"></param>
-        /// <param name="methodName"></param>
-        /// <param name="isLocal"></param>
-        /// <returns></returns>
-        private bool NeedToEnablePrivilege(string computer, string methodName, ref bool isLocal)
-        {
-            bool result = false;
-            if (methodName.Equals("Win32Shutdown", StringComparison.OrdinalIgnoreCase))
-            {
-                result = true;
-
-                // CLR 4.0 Port note - use https://msdn.microsoft.com/library/system.net.networkinformation.ipglobalproperties.hostname(v=vs.110).aspx
-                string localName = System.Net.Dns.GetHostName();
-
-                // And for this, use PsUtils.GetHostname()
-                string localFullName = System.Net.Dns.GetHostEntry(string.Empty).HostName;
-                if (computer.Equals(".") || computer.Equals("localhost", StringComparison.OrdinalIgnoreCase) ||
-                    computer.Equals(localName, StringComparison.OrdinalIgnoreCase) ||
-                    computer.Equals(localFullName, StringComparison.OrdinalIgnoreCase))
-                {
-                    isLocal = true;
-                }
-            }
-
-            return result;
-        }
-
-        /// <summary>
-        /// Do the actual connection to remote machine for Remove-WMIObject cmdlet and raise operation complete event.
-        /// </summary>
-        private void ConnectRemoveWmi()
-        {
-            RemoveWmiObject removeObject = (RemoveWmiObject)_wmiObject;
-            _state = WmiState.Running;
-            RaiseWmiOperationState(null, WmiState.Running);
-            if (removeObject.InputObject != null)
-            {
-                try
-                {
-                    removeObject.InputObject.Delete(_results);
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-
-                return;
-            }
-            else
-            {
-                ConnectionOptions options = removeObject.GetConnectionOption();
-                ManagementPath mPath = null;
-                ManagementObject mObject = null;
-                if (removeObject.Path != null)
-                {
-                    mPath = new ManagementPath(removeObject.Path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = removeObject.Namespace;
-                    }
-                    else if (removeObject.namespaceSpecified)
-                    {
-                        InvalidOperationException e = new InvalidOperationException("NamespaceSpecifiedWithPath");
-                        internalException = e;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    if (mPath.Server != "." && removeObject.serverNameSpecified)
-                    {
-                        InvalidOperationException e = new InvalidOperationException("ComputerNameSpecifiedWithPath");
-                        internalException = e;
-                        _state = WmiState.Failed;
-                        RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                        return;
-                    }
-
-                    if (!(mPath.Server == "." && removeObject.serverNameSpecified))
-                    {
-                        _computerName = mPath.Server;
-                    }
-                }
-
-                try
-                {
-                    if (removeObject.Path != null)
-                    {
-                        mPath.Server = _computerName;
-                        if (mPath.IsClass)
-                        {
-                            ManagementClass mClass = new ManagementClass(mPath);
-                            mObject = mClass;
-                        }
-                        else
-                        {
-                            ManagementObject mInstance = new ManagementObject(mPath);
-                            mObject = mInstance;
-                        }
-
-                        ManagementScope mScope = new ManagementScope(mPath, options);
-                        mObject.Scope = mScope;
-                    }
-                    else
-                    {
-                        ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, removeObject.Namespace), options);
-                        ManagementClass mClass = new ManagementClass(removeObject.Class);
-                        mObject = mClass;
-                        mObject.Scope = scope;
-                    }
-
-                    mObject.Delete(_results);
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Do the actual connection to remote machine for Get-WMIObject cmdlet and raise operation complete event.
-        /// </summary>
-        private void ConnectGetWMI()
-        {
-            GetWmiObjectCommand getObject = (GetWmiObjectCommand)_wmiObject;
-            _state = WmiState.Running;
-            RaiseWmiOperationState(null, WmiState.Running);
-            ConnectionOptions options = getObject.GetConnectionOption();
-            if (getObject.List.IsPresent)
-            {
-                if (!getObject.ValidateClassFormat())
-                {
-                    ArgumentException e = new ArgumentException(
-                        string.Format(
-                            Thread.CurrentThread.CurrentCulture,
-                            "Class", getObject.Class));
-
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                    return;
-                }
-
-                try
-                {
-                    if (getObject.Recurse.IsPresent)
-                    {
-                        ArrayList namespaceArray = new ArrayList();
-                        ArrayList sinkArray = new ArrayList();
-                        ArrayList connectArray = new ArrayList(); // Optimization for remote namespace
-                        int currentNamespaceCount = 0;
-                        namespaceArray.Add(getObject.Namespace);
-                        bool topNamespace = true;
-                        while (currentNamespaceCount < namespaceArray.Count)
-                        {
-                            string connectNamespace = (string)namespaceArray[currentNamespaceCount];
-                            ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, connectNamespace), options);
-                            scope.Connect();
-                            ManagementClass namespaceClass = new ManagementClass(scope, new ManagementPath("__Namespace"), new ObjectGetOptions());
-                            foreach (ManagementBaseObject obj in namespaceClass.GetInstances())
-                            {
-                                if (!getObject.IsLocalizedNamespace((string)obj["Name"]))
-                                {
-                                    namespaceArray.Add(connectNamespace + "\\" + obj["Name"]);
-                                }
-                            }
-
-                            if (topNamespace)
-                            {
-                                topNamespace = false;
-                                sinkArray.Add(_results);
-                            }
-                            else
-                            {
-                                sinkArray.Add(_job.GetNewSink());
-                            }
-
-                            connectArray.Add(scope);
-                            currentNamespaceCount++;
-                        }
-
-                        if ((sinkArray.Count != namespaceArray.Count) || (connectArray.Count != namespaceArray.Count)) // not expected throw exception
-                        {
-                            internalException = new InvalidOperationException();
-                            _state = WmiState.Failed;
-                            RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                            return;
-                        }
-
-                        currentNamespaceCount = 0;
-                        while (currentNamespaceCount < namespaceArray.Count)
-                        {
-                            string connectNamespace = (string)namespaceArray[currentNamespaceCount];
-                            ManagementObjectSearcher searcher = getObject.GetObjectList((ManagementScope)connectArray[currentNamespaceCount]);
-                            if (searcher == null)
-                            {
-                                currentNamespaceCount++;
-                                continue;
-                            }
-
-                            if (topNamespace)
-                            {
-                                topNamespace = false;
-                                searcher.Get(_results);
-                            }
-                            else
-                            {
-                                searcher.Get((ManagementOperationObserver)sinkArray[currentNamespaceCount]);
-                            }
-
-                            currentNamespaceCount++;
-                        }
-                    }
-                    else
-                    {
-                        ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, getObject.Namespace), options);
-                        scope.Connect();
-                        ManagementObjectSearcher searcher = getObject.GetObjectList(scope);
-                        if (searcher == null)
-                            throw new ManagementException();
-                        searcher.Get(_results);
-                    }
-                }
-                catch (ManagementException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.Runtime.InteropServices.COMException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    internalException = e;
-                    _state = WmiState.Failed;
-                    RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                }
-
-                return;
-            }
-
-            string queryString = string.IsNullOrEmpty(getObject.Query) ? GetWmiQueryString() : getObject.Query;
-            ObjectQuery query = new ObjectQuery(queryString.ToString());
-            try
-            {
-                ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(_computerName, getObject.Namespace), options);
-                EnumerationOptions enumOptions = new EnumerationOptions();
-                enumOptions.UseAmendedQualifiers = getObject.Amended;
-                enumOptions.DirectRead = getObject.DirectRead;
-                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, enumOptions);
-
-                // Execute the WMI command for each count value.
-                for (int i = 0; i < _cmdCount; ++i)
-                {
-                    searcher.Get(_results);
-                }
-            }
-            catch (ManagementException e)
-            {
-                internalException = e;
-                _state = WmiState.Failed;
-                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-            }
-            catch (System.Runtime.InteropServices.COMException e)
-            {
-                internalException = e;
-                _state = WmiState.Failed;
-                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-            }
-            catch (System.UnauthorizedAccessException e)
-            {
-                internalException = e;
-                _state = WmiState.Failed;
-                RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-            }
-        }
-    }
-
-    ///<summary>
-    /// Event which will be triggered when WMI state is changed.
-    /// Currently it is to notify Jobs that state has changed to running.
-    /// Other states are notified via OperationComplete.
-    ///</summary>
-    internal sealed class WmiJobStateEventArgs : EventArgs
-    {
-        ///<summary>
-        /// WMI state
-        ///</summary>
-        internal WmiState WmiState { get; set; }
-    }
-
-    /// <summary>
-    /// Enumerated type defining the state of the WMI operation.
-    /// </summary>
-    public enum WmiState
-    {
-        /// <summary>
-        /// The operation has not been started.
-        /// </summary>
-        NotStarted = 0,
-        /// <summary>
-        /// The operation is executing.
-        /// </summary>
-        Running = 1,
-        /// <summary>
-        /// The operation is stoping execution.
-        /// </summary>
-        Stopping = 2,
-        /// <summary>
-        /// The operation is completed due to a stop request.
-        /// </summary>
-        Stopped = 3,
-        /// <summary>
-        /// The operation has completed.
-        /// </summary>
-        Completed = 4,
-        /// <summary>
-        /// The operation completed abnormally due to an error.
-        /// </summary>
-        Failed = 5,
-    }
-
-    internal static class WMIHelper
-    {
-        internal static string GetScopeString(string computer, string namespaceParameter)
-        {
-            StringBuilder returnValue = new StringBuilder("\\\\");
-            returnValue.Append(computer);
-            returnValue.Append("\\");
-            returnValue.Append(namespaceParameter);
-            return returnValue.ToString();
-        }
-    }
-    #endregion Helper Classes
-
-    /// <summary>
-    /// A class to set WMI connection options.
-    /// </summary>
-    public class WmiBaseCmdlet : Cmdlet
-    {
-        #region Parameters
-
-        /// <summary>
-        /// Perform Async operation.
-        /// </summary>
-        [Parameter]
-        public SwitchParameter AsJob { get; set; } = false;
-
-        /// <summary>
-        /// The Impersonation level to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        public ImpersonationLevel Impersonation { get; set; } = ImpersonationLevel.Impersonate;
-
-        /// <summary>
-        /// The Authentication level to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        public AuthenticationLevel Authentication { get; set; } = AuthenticationLevel.PacketPrivacy;
-
-        /// <summary>
-        /// The Locale to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        public string Locale { get; set; } = null;
-
-        /// <summary>
-        /// If all Privileges are enabled.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        public SwitchParameter EnableAllPrivileges { get; set; }
-
-        /// <summary>
-        /// The Authority to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        public string Authority { get; set; } = null;
-
-        /// <summary>
-        /// The credential to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        [Credential()]
-        public PSCredential Credential { get; set; }
-
-        /// <summary>
-        /// The credential to use.
-        /// </summary>
-        [Parameter]
-        public Int32 ThrottleLimit { get; set; } = s_DEFAULT_THROTTLE_LIMIT;
-
-        /// <summary>
-        /// The ComputerName in which to query.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        [ValidateNotNullOrEmpty]
-        [Alias("Cn")]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] ComputerName
-        {
-            get { return _computerName; }
-
-            set { _computerName = value; serverNameSpecified = true; }
-        }
-        /// <summary>
-        /// The WMI namespace to use.
-        /// </summary>
-        [Parameter(ParameterSetName = "path")]
-        [Parameter(ParameterSetName = "class")]
-        [Parameter(ParameterSetName = "WQLQuery")]
-        [Parameter(ParameterSetName = "query")]
-        [Parameter(ParameterSetName = "list")]
-        [Alias("NS")]
-        public string Namespace
-        {
-            get { return _nameSpace; }
-
-            set { _nameSpace = value; namespaceSpecified = true; }
-        }
-        #endregion Parameters
-
-        #region parameter data
-        /// <summary>
-        /// The computer to query.
-        /// </summary>
-        private string[] _computerName = new string[] { "localhost" };
-        /// <summary>
-        /// WMI namespace.
-        /// </summary>
-        private string _nameSpace = "root\\cimv2";
-        /// <summary>
-        /// Specify if namespace was specified or not.
-        /// </summary>
-        internal bool namespaceSpecified = false;
-        /// <summary>
-        /// Specify if server name was specified or not.
-        /// </summary>
-        internal bool serverNameSpecified = false;
-
-        private static int s_DEFAULT_THROTTLE_LIMIT = 32;    // maximum number of items to be processed at a time
-
-        #endregion parameter data
-
-        #region Command code
-        /// <summary>
-        /// Get connection options.
-        /// </summary>
-        internal ConnectionOptions GetConnectionOption()
-        {
-            ConnectionOptions options;
-            options = new ConnectionOptions();
-            options.Authentication = this.Authentication;
-            options.Locale = this.Locale;
-            options.Authority = this.Authority;
-            options.EnablePrivileges = this.EnableAllPrivileges;
-            options.Impersonation = this.Impersonation;
-            if (this.Credential != null)
-            {
-                if (!(this.Credential.UserName == null && this.Credential.Password == null)) // Empty credential, use implicit credential
-                {
-                    options.Username = this.Credential.UserName;
-                    options.SecurePassword = this.Credential.Password;
-                }
-            }
-
-            return options;
-        }
-        /// <summary>
-        /// Set wmi instance helper.
-        /// </summary>
-        internal ManagementObject SetWmiInstanceGetObject(ManagementPath mPath, string serverName)
-        {
-            ConnectionOptions options = GetConnectionOption();
-            ManagementObject mObject = null;
-            var setObject = this as SetWmiInstance;
-            if (setObject != null)
-            {
-                if (setObject.Path != null)
-                {
-                    mPath.Server = serverName;
-                    ManagementScope mScope = new ManagementScope(mPath, options);
-                    if (mPath.IsClass)
-                    {
-                        ManagementClass mClass = new ManagementClass(mPath);
-                        mClass.Scope = mScope;
-                        mObject = mClass.CreateInstance();
-                    }
-                    else
-                    {
-                        // This can throw if path does not exist caller should catch it.
-                        ManagementObject mInstance = new ManagementObject(mPath);
-                        mInstance.Scope = mScope;
-                        try
-                        {
-                            mInstance.Get();
-                        }
-                        catch (ManagementException e)
-                        {
-                            if (e.ErrorCode != ManagementStatus.NotFound)
-                            {
-                                throw;
-                            }
-
-                            int namespaceIndex = setObject.Path.IndexOf(':');
-                            if (namespaceIndex == -1)
-                            {
-                                throw;
-                            }
-
-                            int classIndex = (setObject.Path.Substring(namespaceIndex)).IndexOf('.');
-                            if (classIndex == -1)
-                            {
-                                throw;
-                            }
-                            // Get class object and create instance.
-                            string newPath = setObject.Path.Substring(0, classIndex + namespaceIndex);
-                            ManagementPath classPath = new ManagementPath(newPath);
-                            ManagementClass mClass = new ManagementClass(classPath);
-                            mClass.Scope = mScope;
-                            mInstance = mClass.CreateInstance();
-                        }
-
-                        mObject = mInstance;
-                    }
-                }
-                else
-                {
-                    ManagementScope scope = new ManagementScope(WMIHelper.GetScopeString(serverName, setObject.Namespace), options);
-                    ManagementClass mClass = new ManagementClass(setObject.Class);
-                    mClass.Scope = scope;
-                    mObject = mClass.CreateInstance();
-                }
-
-                if (setObject.Arguments != null)
-                {
-                    IDictionaryEnumerator en = setObject.Arguments.GetEnumerator();
-                    while (en.MoveNext())
-                    {
-                        mObject[en.Key as string] = en.Value;
-                    }
-                }
-            }
-
-            return mObject;
-        }
-        /// <summary>
-        /// Set wmi instance helper for building management path.
-        /// </summary>
-        internal ManagementPath SetWmiInstanceBuildManagementPath()
-        {
-            ManagementPath mPath = null;
-            var wmiInstance = this as SetWmiInstance;
-            if (wmiInstance != null)
-            {
-                // If Class is specified only CreateOnly flag is supported
-                if (wmiInstance.Class != null)
-                {
-                    if (wmiInstance.flagSpecified && wmiInstance.PutType != PutType.CreateOnly)
-                    {
-                        // Throw Terminating error
-                        ThrowTerminatingError(new ErrorRecord(
-                         new InvalidOperationException(),
-                         "CreateOnlyFlagNotSpecifiedWithClassPath",
-                         ErrorCategory.InvalidOperation,
-                         wmiInstance.PutType));
-                    }
-
-                    wmiInstance.PutType = PutType.CreateOnly;
-                }
-                else
-                {
-                    mPath = new ManagementPath(wmiInstance.Path);
-                    if (string.IsNullOrEmpty(mPath.NamespacePath))
-                    {
-                        mPath.NamespacePath = wmiInstance.Namespace;
-                    }
-                    else if (wmiInstance.namespaceSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "NamespaceSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            wmiInstance.Namespace));
-                    }
-
-                    if (mPath.Server != "." && wmiInstance.serverNameSpecified)
-                    {
-                        // ThrowTerminatingError
-                        ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "ComputerNameSpecifiedWithPath",
-                            ErrorCategory.InvalidOperation,
-                            wmiInstance.ComputerName));
-                    }
-
-                    if (mPath.IsClass)
-                    {
-                        if (wmiInstance.flagSpecified && wmiInstance.PutType != PutType.CreateOnly)
-                        {
-                            // Throw Terminating error
-                            ThrowTerminatingError(new ErrorRecord(
-                             new InvalidOperationException(),
-                             "CreateOnlyFlagNotSpecifiedWithClassPath",
-                             ErrorCategory.InvalidOperation,
-                             wmiInstance.PutType));
-                        }
-
-                        wmiInstance.PutType = PutType.CreateOnly;
-                    }
-                    else
-                    {
-                        if (wmiInstance.flagSpecified)
-                        {
-                            if (!(wmiInstance.PutType == PutType.UpdateOnly || wmiInstance.PutType == PutType.UpdateOrCreate))
-                            {
-                                // Throw terminating error
-                                ThrowTerminatingError(new ErrorRecord(
-                                new InvalidOperationException(),
-                                "NonUpdateFlagSpecifiedWithInstancePath",
-                                ErrorCategory.InvalidOperation,
-                                wmiInstance.PutType));
-                            }
-                        }
-                        else
-                        {
-                            wmiInstance.PutType = PutType.UpdateOrCreate;
-                        }
-                    }
-                }
-            }
-
-            return mPath;
-        }
-
-        /// <summary>
-        /// Set wmi instance helper for pipeline input.
-        /// </summary>
-        internal ManagementObject SetWmiInstanceGetPipelineObject()
-        {
-            // Should only be called from Set-WMIInstance cmdlet
-            ManagementObject mObj = null;
-            var wmiInstance = this as SetWmiInstance;
-            if (wmiInstance != null)
-            {
-                // Extra check
-                if (wmiInstance.InputObject != null)
-                {
-                    if (wmiInstance.InputObject.GetType() == typeof(ManagementClass))
-                    {
-                        // Check if Flag specified is CreateOnly or not
-                        if (wmiInstance.flagSpecified && wmiInstance.PutType != PutType.CreateOnly)
-                        {
-                            // Throw terminating error
-                            ThrowTerminatingError(new ErrorRecord(
-                            new InvalidOperationException(),
-                            "CreateOnlyFlagNotSpecifiedWithClassPath",
-                            ErrorCategory.InvalidOperation,
-                            wmiInstance.PutType));
-                        }
-
-                        mObj = ((ManagementClass)wmiInstance.InputObject).CreateInstance();
-                        wmiInstance.PutType = PutType.CreateOnly;
-                    }
-                    else
-                    {
-                        // Check if Flag specified is Updateonly or UpdateOrCreateOnly or not
-                        if (wmiInstance.flagSpecified)
-                        {
-                            if (!(wmiInstance.PutType == PutType.UpdateOnly || wmiInstance.PutType == PutType.UpdateOrCreate))
-                            {
-                                // Throw terminating error
-                                ThrowTerminatingError(new ErrorRecord(
-                                new InvalidOperationException(),
-                                "NonUpdateFlagSpecifiedWithInstancePath",
-                                ErrorCategory.InvalidOperation,
-                                wmiInstance.PutType));
-                            }
-                        }
-                        else
-                        {
-                            wmiInstance.PutType = PutType.UpdateOrCreate;
-                        }
-
-                        mObj = (ManagementObject)wmiInstance.InputObject.Clone();
-                    }
-
-                    if (wmiInstance.Arguments != null)
-                    {
-                        IDictionaryEnumerator en = wmiInstance.Arguments.GetEnumerator();
-                        while (en.MoveNext())
-                        {
-                            mObj[en.Key as string] = en.Value;
-                        }
-                    }
-                }
-            }
-
-            return mObj;
-        }
-
-        /// <summary>
-        /// Start this cmdlet as a WMI job...
-        /// </summary>
-        internal void RunAsJob(string cmdletName)
-        {
-            PSWmiJob wmiJob = new PSWmiJob(this, ComputerName, this.ThrottleLimit, Job.GetCommandTextFromInvocationInfo(this.MyInvocation));
-            if (_context != null)
-            {
-                ((System.Management.Automation.Runspaces.LocalRunspace)_context.CurrentRunspace).JobRepository.Add(wmiJob);
-            }
-
-            WriteObject(wmiJob);
-        }
-        // Get the PowerShell execution context if it's available at cmdlet creation time...
-        private System.Management.Automation.ExecutionContext _context = System.Management.Automation.Runspaces.LocalPipeline.GetExecutionContextFromTLS();
-
-        #endregion Command code
-    }
-    /// <summary>
-    /// A class to perform async operations for WMI cmdlets.
-    /// </summary>
-
-    internal class PSWmiJob : Job
-    {
-        #region internal constructor
-
-        /// <summary>
-        ///Internal constructor for initializing WMI jobs.
-        /// </summary>
-        internal PSWmiJob(Cmdlet cmds, string[] computerName, int throttleLimt, string command)
-        : base(command, null)
-        {
-            PSJobTypeName = WMIJobType;
-            _throttleManager.ThrottleLimit = throttleLimt;
-            for (int i = 0; i < computerName.Length; i++)
-            {
-                PSWmiChildJob job = new PSWmiChildJob(cmds, computerName[i], _throttleManager);
-                job.StateChanged += new EventHandler<JobStateEventArgs>(HandleChildJobStateChanged);
-                job.JobUnblocked += new EventHandler(HandleJobUnblocked);
-                ChildJobs.Add(job);
-            }
-
-            CommonInit(throttleLimt);
-        }
-
-        /// <summary>
-        /// Internal constructor for initializing WMI jobs, where WMI command is executed a variable
-        /// number of times.
-        /// </summary>
-        internal PSWmiJob(Cmdlet cmds, string[] computerName, int throttleLimit, string command, int count)
-            : base(command, null)
-        {
-            PSJobTypeName = WMIJobType;
-            _throttleManager.ThrottleLimit = throttleLimit;
-            for (int i = 0; i < computerName.Length; ++i)
-            {
-                PSWmiChildJob childJob = new PSWmiChildJob(cmds, computerName[i], _throttleManager, count);
-                childJob.StateChanged += new EventHandler<JobStateEventArgs>(HandleChildJobStateChanged);
-                childJob.JobUnblocked += new EventHandler(HandleJobUnblocked);
-                ChildJobs.Add(childJob);
-            }
-
-            CommonInit(throttleLimit);
-        }
-
-        #endregion internal constructor
-
-        // Set to true when at least one chil job failed
-        private bool _atleastOneChildJobFailed = false;
-
-        // Count the number of childs which have finished
-        private int _finishedChildJobsCount = 0;
-
-        // Count of number of child jobs which are blocked
-        private int _blockedChildJobsCount = 0;
-
-        // WMI Job type name.
-        private const string WMIJobType = "WmiJob";
-
-        /// <summary>
-        /// Handles the StateChanged event from each of the child job objects.
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void HandleChildJobStateChanged(object sender, JobStateEventArgs e)
-        {
-            if (e.JobStateInfo.State == JobState.Blocked)
-            {
-                // increment count of blocked child jobs
-                lock (_syncObject)
-                {
-                    _blockedChildJobsCount++;
-                }
-                // if any of the child job is blocked, we set state to blocked
-                SetJobState(JobState.Blocked, null);
-                return;
-            }
-
-            // Ignore state changes which are not resulting in state change to finished.
-            if ((!IsFinishedState(e.JobStateInfo.State)) || (e.JobStateInfo.State == JobState.NotStarted))
-            {
-                return;
-            }
-
-            if (e.JobStateInfo.State == JobState.Failed)
-            {
-                // If any of the child job failed, we set status to failed
-                _atleastOneChildJobFailed = true;
-            }
-
-            bool allChildJobsFinished = false;
-            lock (_syncObject)
-            {
-                _finishedChildJobsCount++;
-
-                // We are done
-                if (_finishedChildJobsCount == ChildJobs.Count)
-                {
-                    allChildJobsFinished = true;
-                }
-            }
-
-            if (allChildJobsFinished)
-            {
-                // if any child job failed, set status to failed
-                // If stop was called set, status to stopped
-                // else completed
-                if (_atleastOneChildJobFailed)
-                {
-                    SetJobState(JobState.Failed);
-                }
-                else if (_stopIsCalled == true)
-                {
-                    SetJobState(JobState.Stopped);
-                }
-                else
-                {
-                    SetJobState(JobState.Completed);
-                }
-            }
-        }
-
-        private bool _stopIsCalled = false;
-        private string _statusMessage;
-        /// <summary>
-        /// Message indicating status of the job.
-        /// </summary>
-        public override string StatusMessage
-        {
-            get
-            {
-                return _statusMessage;
-            }
-        }
-        // ISSUE: Implement StatusMessage
-        /// <summary>
-        /// Checks the status of remote command execution.
-        /// </summary>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        private void SetStatusMessage()
-        {
-            _statusMessage = "test";
-        }
-
-        private bool _moreData = false;
-        /// <summary>
-        /// Indicates if more data is available.
-        /// </summary>
-        /// <remarks>
-        /// This has more data if any of the child jobs have more data.
-        /// </remarks>
-        public override bool HasMoreData
-        {
-            get
-            {
-                // moreData is set to false and will be set to true
-                // if at least one child is has more data.
-
-                // if ( (!moreData))
-                // {
-                bool atleastOneChildHasMoreData = false;
-
-                for (int i = 0; i < ChildJobs.Count; i++)
-                {
-                    if (ChildJobs[i].HasMoreData)
-                    {
-                        atleastOneChildHasMoreData = true;
-                        break;
-                    }
-                }
-
-                _moreData = atleastOneChildHasMoreData;
-                // }
-
-                return _moreData;
-            }
-        }
-
-        /// <summary>
-        /// Computers on which this job is running.
-        /// </summary>
-        public override string Location
-        {
-            get
-            {
-                return ConstructLocation();
-            }
-        }
-
-        private string ConstructLocation()
-        {
-            StringBuilder location = new StringBuilder();
-
-            foreach (PSWmiChildJob job in ChildJobs)
-            {
-                location.Append(job.Location);
-                location.Append(",");
-            }
-
-            location.Remove(location.Length - 1, 1);
-
-            return location.ToString();
-        }
-        /// <summary>
-        /// Stop Job.
-        /// </summary>
-        public override void StopJob()
-        {
-            // AssertNotDisposed();
-
-            if (!IsFinishedState(JobStateInfo.State))
-            {
-                _stopIsCalled = true;
-
-                _throttleManager.StopAllOperations();
-
-                Finished.WaitOne();
-            }
-        }
-        /// <summary>
-        /// Release all the resources.
-        /// </summary>
-        /// <param name="disposing">
-        /// if true, release all the managed objects.
-        /// </param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                if (!_isDisposed)
-                {
-                    _isDisposed = true;
-                    try
-                    {
-                        if (!IsFinishedState(JobStateInfo.State))
-                        {
-                            StopJob();
-                        }
-
-                        _throttleManager.Dispose();
-                        foreach (Job job in ChildJobs)
-                        {
-                            job.Dispose();
-                        }
-                    }
-                    finally
-                    {
-                        base.Dispose(disposing);
-                    }
-                }
-            }
-        }
-
-        private bool _isDisposed = false;
-        /// <summary>
-        /// Initialization common to both constructors.
-        /// </summary>
-        private void CommonInit(int throttleLimit)
-        {
-            // Since no results are produced by any streams. We should
-            // close all the streams
-            base.CloseAllStreams();
-
-            // set status to "in progress"
-            SetJobState(JobState.Running);
-
-            // submit operations to the throttle manager
-            _throttleManager.EndSubmitOperations();
-        }
-        /// <summary>
-        /// Handles JobUnblocked event from a child job and decrements
-        /// count of blocked child jobs. When count reaches 0, sets the
-        /// state of the parent job to running.
-        /// </summary>
-        /// <param name="sender">Sender of this event, unused.</param>
-        /// <param name="eventArgs">event arguments, should be empty in this
-        /// case</param>
-        private void HandleJobUnblocked(object sender, EventArgs eventArgs)
-        {
-            bool unblockjob = false;
-
-            lock (_syncObject)
-            {
-                _blockedChildJobsCount--;
-
-                if (_blockedChildJobsCount == 0)
-                {
-                    unblockjob = true;
-                }
-            }
-
-            if (unblockjob)
-            {
-                SetJobState(JobState.Running, null);
-            }
-        }
-
-        private ThrottleManager _throttleManager = new ThrottleManager();
-
-        private object _syncObject = new object();           // sync object
-    }
-
-    /// <summary>
-    /// Class for WmiChildJob object. This job object Execute wmi cmdlet.
-    /// </summary>
-    internal class PSWmiChildJob : Job
-    {
-        #region internal constructor
-
-        /// <summary>
-        /// Internal constructor for initializing WMI jobs.
-        /// </summary>
-        internal PSWmiChildJob(Cmdlet cmds, string computerName, ThrottleManager throttleManager)
-        : base(null, null)
-        {
-            UsesResultsCollection = true;
-            Location = computerName;
-            _throttleManager = throttleManager;
-            _wmiSinkArray = new ArrayList();
-            ManagementOperationObserver wmiSink = new ManagementOperationObserver();
-            _wmiSinkArray.Add(wmiSink);
-            _sinkCompleted++;
-            wmiSink.ObjectReady += new ObjectReadyEventHandler(this.NewObject);
-            wmiSink.Completed += new CompletedEventHandler(this.JobDone);
-            _helper = new WmiAsyncCmdletHelper(this, cmds, computerName, wmiSink);
-            _helper.WmiOperationState += new EventHandler<WmiJobStateEventArgs>(HandleWMIState);
-            _helper.ShutdownComplete += new EventHandler<EventArgs>(JobDoneForWin32Shutdown);
-            SetJobState(JobState.NotStarted);
-            IThrottleOperation operation = _helper;
-            operation.OperationComplete += new EventHandler<OperationStateEventArgs>(HandleOperationComplete);
-            throttleManager.ThrottleComplete += new EventHandler<EventArgs>(HandleThrottleComplete);
-            throttleManager.AddOperation(operation);
-        }
-
-        /// <summary>
-        /// Internal constructor for initializing WMI jobs, where WMI command is executed a variable
-        /// number of times.
-        /// </summary>
-        internal PSWmiChildJob(Cmdlet cmds, string computerName, ThrottleManager throttleManager, int count)
-            : base(null, null)
-        {
-            UsesResultsCollection = true;
-            Location = computerName;
-            _throttleManager = throttleManager;
-            _wmiSinkArray = new ArrayList();
-            ManagementOperationObserver wmiSink = new ManagementOperationObserver();
-            _wmiSinkArray.Add(wmiSink);
-            _sinkCompleted += count;
-            wmiSink.ObjectReady += new ObjectReadyEventHandler(this.NewObject);
-            wmiSink.Completed += new CompletedEventHandler(this.JobDone);
-            _helper = new WmiAsyncCmdletHelper(this, cmds, computerName, wmiSink, count);
-            _helper.WmiOperationState += new EventHandler<WmiJobStateEventArgs>(HandleWMIState);
-            _helper.ShutdownComplete += new EventHandler<EventArgs>(JobDoneForWin32Shutdown);
-            SetJobState(JobState.NotStarted);
-            IThrottleOperation operation = _helper;
-            operation.OperationComplete += new EventHandler<OperationStateEventArgs>(HandleOperationComplete);
-            throttleManager.ThrottleComplete += new EventHandler<EventArgs>(HandleThrottleComplete);
-            throttleManager.AddOperation(operation);
-        }
-
-        #endregion internal constructor
-
-        private WmiAsyncCmdletHelper _helper;
-        // bool _bFinished;
-        private ThrottleManager _throttleManager;
-        private object _syncObject = new object();           // sync object
-        private int _sinkCompleted;
-        private bool _bJobFailed;
-        private bool _bAtLeastOneObject;
-
-        private ArrayList _wmiSinkArray;
-        /// <summary>
-        /// Event raised by this job to indicate to its parent that
-        /// its now unblocked by the user.
-        /// </summary>
-        internal event EventHandler JobUnblocked;
-
-        /// <summary>
-        /// Set the state of the current job from blocked to
-        /// running and raise an event indicating to this
-        /// parent job that this job is unblocked.
-        /// </summary>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal void UnblockJob()
-        {
-            SetJobState(JobState.Running, null);
-            JobUnblocked.SafeInvoke(this, EventArgs.Empty);
-        }
-
-        internal ManagementOperationObserver GetNewSink()
-        {
-            ManagementOperationObserver wmiSink = new ManagementOperationObserver();
-            _wmiSinkArray.Add(wmiSink);
-            lock (_syncObject)
-            {
-                _sinkCompleted++;
-            }
-
-            wmiSink.ObjectReady += new ObjectReadyEventHandler(this.NewObject);
-            wmiSink.Completed += new CompletedEventHandler(this.JobDone);
-            return wmiSink;
-        }
-
-        /// <summary>
-        /// It receives Management objects.
-        /// </summary>
-        private void NewObject(object sender, ObjectReadyEventArgs obj)
-        {
-            if (!_bAtLeastOneObject)
-            {
-                _bAtLeastOneObject = true;
-            }
-
-            this.WriteObject(obj.NewObject);
-        }
-
-        /// <summary>
-        /// It is called when WMI job is done.
-        /// </summary>
-        private void JobDone(object sender, CompletedEventArgs obj)
-        {
-            lock (_syncObject)
-            {
-                _sinkCompleted--;
-            }
-
-            if (obj.Status != ManagementStatus.NoError)
-            {
-                _bJobFailed = true;
-            }
-
-            if (_sinkCompleted == 0)
-            {
-                // Notify throttle manager and change the state to complete
-                // Two cases where _bFinished should be set to false.
-                // 1) Invalid class or some other condition so that after making a connection WMI is throwing an error
-                // 2) We could not get any instance for the class.
-                /*if(bAtLeastOneObject )
-                    _bFinished = true;*/
-                _helper.RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                if (!_bJobFailed)
-                {
-                    _helper.State = WmiState.Completed;
-                    SetJobState(JobState.Completed);
-                }
-                else
-                {
-                    _helper.State = WmiState.Failed;
-                    SetJobState(JobState.Failed);
-                }
-            }
-        }
-
-        /// <summary>
-        /// It is called when the call to Win32shutdown is successfully completed.
-        /// </summary>
-        private void JobDoneForWin32Shutdown(object sender, EventArgs arg)
-        {
-            lock (_syncObject)
-            {
-                _sinkCompleted--;
-            }
-
-            if (_sinkCompleted == 0)
-            {
-                _helper.RaiseOperationCompleteEvent(null, OperationState.StopComplete);
-                _helper.State = WmiState.Completed;
-                SetJobState(JobState.Completed);
-            }
-        }
-
-        /// <summary>
-        /// Message indicating status of the job.
-        /// </summary>
-        public override string StatusMessage { get; } = "test";
-
-        /// <summary>
-        /// Indicates if there is more data available in
-        /// this Job.
-        /// </summary>
-        public override bool HasMoreData
-        {
-            get
-            {
-                return (Results.IsOpen || Results.Count > 0);
-            }
-        }
-
-        /// <summary>
-        /// Returns the computer on which this command is
-        /// running.
-        /// </summary>
-        public override string Location { get; }
-
-        /// <summary>
-        /// Stops the job.
-        /// </summary>
-        public override void StopJob()
-        {
-            AssertNotDisposed();
-            _throttleManager.StopOperation(_helper);
-
-            // if IgnoreStop is set, then StopOperation will
-            // return immediately, but StopJob should only
-            // return when job is complete. Waiting on the
-            // wait handle will ensure that its blocked
-            // until the job reaches a terminal state
-            Finished.WaitOne();
-        }
-
-        /// <summary>
-        /// Release all the resources.
-        /// </summary>
-        /// <param name="disposing">
-        /// if true, release all the managed objects.
-        /// </param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                if (!_isDisposed)
-                {
-                    _isDisposed = true;
-                    base.Dispose(disposing);
-                }
-            }
-        }
-
-        private bool _isDisposed;
-
-        /// <summary>
-        /// Handles operation complete event.
-        /// </summary>
-        private void HandleOperationComplete(object sender, OperationStateEventArgs stateEventArgs)
-        {
-            WmiAsyncCmdletHelper helper = (WmiAsyncCmdletHelper)sender;
-
-            if (helper.State == WmiState.NotStarted)
-            {
-                // This is a case WMI operation was not started.
-                SetJobState(JobState.Stopped, helper.InternalException);
-            }
-            else if (helper.State == WmiState.Running)
-            {
-                SetJobState(JobState.Running, helper.InternalException);
-            }
-            else if (helper.State == WmiState.Completed)
-            {
-                SetJobState(JobState.Completed, helper.InternalException);
-            }
-            else if (helper.State == WmiState.Failed)
-            {
-                SetJobState(JobState.Failed, helper.InternalException);
-            }
-            else
-            {
-                SetJobState(JobState.Stopped, helper.InternalException);
-            }
-        }
-        /// <summary>
-        /// Handles WMI state changed.
-        /// </summary>
-        private void HandleWMIState(object sender, WmiJobStateEventArgs stateEventArgs)
-        {
-            if (stateEventArgs.WmiState == WmiState.Running)
-            {
-                SetJobState(JobState.Running, _helper.InternalException);
-            }
-            else if (stateEventArgs.WmiState == WmiState.NotStarted)
-            {
-                SetJobState(JobState.NotStarted, _helper.InternalException);
-            }
-            else if (stateEventArgs.WmiState == WmiState.Completed)
-            {
-                SetJobState(JobState.Completed);
-            }
-            else if (stateEventArgs.WmiState == WmiState.Failed)
-            {
-                SetJobState(JobState.Failed, _helper.InternalException);
-            }
-            else
-            {
-                SetJobState(JobState.Stopped, _helper.InternalException);
-            }
-        }
-
-        /// <summary>
-        /// Handle a throttle complete event.
-        /// </summary>
-        /// <param name="sender">Sender of this event.</param>
-        /// <param name="eventArgs">Not used in this method.</param>
-        private void HandleThrottleComplete(object sender, EventArgs eventArgs)
-        {
-            if (_helper.State == WmiState.NotStarted)
-            {
-                // This is a case WMI operation was not started.
-                SetJobState(JobState.Stopped, _helper.InternalException);
-            }
-            else if (_helper.State == WmiState.Running)
-            {
-                SetJobState(JobState.Running, _helper.InternalException);
-            }
-            else if (_helper.State == WmiState.Completed)
-            {
-                SetJobState(JobState.Completed, _helper.InternalException);
-            }
-            else if (_helper.State == WmiState.Failed)
-            {
-                SetJobState(JobState.Failed, _helper.InternalException);
-            }
-            else
-            {
-                SetJobState(JobState.Stopped, _helper.InternalException);
-            }
-            // Do Nothing
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/WebServiceProxy.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/WebServiceProxy.cs
deleted file mode 100644
index 547b121c571..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/WebServiceProxy.cs
+++ /dev/null
@@ -1,491 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.CodeDom;
-using System.CodeDom.Compiler;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.IO;
-using System.Management;
-using System.Management.Automation;
-using System.Net;
-using System.Reflection;
-using System.Resources;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Web.Services;
-using System.Web.Services.Description;
-using System.Web.Services.Discovery;
-using System.Xml;
-
-using Microsoft.CSharp;
-using Microsoft.Win32;
-
-using Dbg = System.Management.Automation;
-
-namespace Microsoft.PowerShell.Commands
-{
-    #region New-WebServiceProxy
-
-    /// <summary>
-    /// Cmdlet for new-WebService Proxy.
-    /// </summary>
-    [Cmdlet(VerbsCommon.New, "WebServiceProxy", DefaultParameterSetName = "NoCredentials", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=135238")]
-    public sealed class NewWebServiceProxy : PSCmdlet
-    {
-        #region Parameters
-
-        /// <summary>
-        /// URI of the web service.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0)]
-        [ValidateNotNullOrEmpty]
-        [Alias("WL", "WSDL", "Path")]
-        public System.Uri Uri
-        {
-            get { return _uri; }
-
-            set
-            {
-                _uri = value;
-            }
-        }
-
-        private System.Uri _uri;
-
-        /// <summary>
-        /// Parameter Class name.
-        /// </summary>
-        [Parameter(Position = 1)]
-        [ValidateNotNullOrEmpty]
-        [Alias("FileName", "FN")]
-        public string Class
-        {
-            get { return _class; }
-
-            set
-            {
-                _class = value;
-            }
-        }
-
-        private string _class;
-
-        /// <summary>
-        /// Namespace.
-        /// </summary>
-        [Parameter(Position = 2)]
-        [ValidateNotNullOrEmpty]
-        [Alias("NS")]
-        public string Namespace
-        {
-            get { return _namespace; }
-
-            set
-            {
-                _namespace = value;
-            }
-        }
-
-        private string _namespace;
-
-        /// <summary>
-        /// Credential.
-        /// </summary>
-        [Parameter(ParameterSetName = "Credential")]
-        [ValidateNotNullOrEmpty]
-        [Credential]
-        [Alias("Cred")]
-        public PSCredential Credential
-        {
-            get { return _credential; }
-
-            set
-            {
-                _credential = value;
-            }
-        }
-
-        private PSCredential _credential;
-
-        /// <summary>
-        /// Use default credential..
-        /// </summary>
-        [Parameter(ParameterSetName = "UseDefaultCredential")]
-        [ValidateNotNull]
-        [Alias("UDC")]
-        public SwitchParameter UseDefaultCredential
-        {
-            get { return _usedefaultcredential; }
-
-            set
-            {
-                _usedefaultcredential = value;
-            }
-        }
-
-        private SwitchParameter _usedefaultcredential;
-
-        #endregion
-
-        #region overrides
-        /// <summary>
-        /// Cache for storing URIs.
-        /// </summary>
-        private static Dictionary<Uri, string> s_uriCache = new Dictionary<Uri, string>();
-
-        /// <summary>
-        /// Cache for storing sourcecodehashes.
-        /// </summary>
-        private static Dictionary<int, object> s_srccodeCache = new Dictionary<int, object>();
-
-        /// <summary>
-        /// Holds the hash code of the source generated.
-        /// </summary>
-        private int _sourceHash;
-        /// <summary>
-        /// Random class.
-        /// </summary>
-
-        private object _cachelock = new object();
-        private static Random s_rnd = new Random();
-        /// <summary>
-        /// BeginProcessing code.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            if (string.IsNullOrWhiteSpace(_uri.ToString()))
-            {
-                Exception ex = new ArgumentException(WebServiceResources.InvalidUri);
-                ErrorRecord er = new ErrorRecord(ex, "ArgumentException", ErrorCategory.InvalidOperation, null);
-                ThrowTerminatingError(er);
-            }
-            // check if system.web is available.This assembly is not available in win server core.
-            string AssemblyString = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
-            try
-            {
-                Assembly webAssembly = Assembly.Load(AssemblyString);
-            }
-            catch (FileNotFoundException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "SystemWebAssemblyNotFound", ErrorCategory.ObjectNotFound, null);
-                er.ErrorDetails = new ErrorDetails(WebServiceResources.NotSupported);
-                ThrowTerminatingError(er);
-            }
-
-            int sourceCache = 0;
-
-            lock (s_uriCache)
-            {
-                if (s_uriCache.ContainsKey(_uri))
-                {
-                    // if uri is present in the cache
-                    string ns;
-                    s_uriCache.TryGetValue(_uri, out ns);
-                    string[] data = ns.Split('|');
-                    if (string.IsNullOrEmpty(_namespace))
-                    {
-                        if (data[0].StartsWith("Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.", StringComparison.OrdinalIgnoreCase))
-                        {
-                            _namespace = data[0];
-                            _class = data[1];
-                        }
-                    }
-
-                    sourceCache = Int32.Parse(data[2].ToString(), CultureInfo.InvariantCulture);
-                }
-            }
-
-            if (string.IsNullOrEmpty(_namespace))
-            {
-                _namespace = "Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy" + GenerateRandomName();
-            }
-            // if class is null,generate a name for it
-            if (string.IsNullOrEmpty(_class))
-            {
-                _class = "MyClass" + GenerateRandomName();
-            }
-
-            Assembly webserviceproxy = GenerateWebServiceProxyAssembly(_namespace, _class);
-            if (webserviceproxy == null)
-                return;
-            object instance = InstantiateWebServiceProxy(webserviceproxy);
-
-            // to set the credentials into the generated webproxy Object
-            PropertyInfo[] pinfo = instance.GetType().GetProperties();
-            foreach (PropertyInfo pr in pinfo)
-            {
-                if (pr.Name.Equals("UseDefaultCredentials", StringComparison.OrdinalIgnoreCase))
-                {
-                    if (UseDefaultCredential.IsPresent)
-                    {
-                        bool flag = true;
-                        pr.SetValue(instance, flag as object, null);
-                    }
-                }
-
-                if (pr.Name.Equals("Credentials", StringComparison.OrdinalIgnoreCase))
-                {
-                    if (Credential != null)
-                    {
-                        NetworkCredential cred = Credential.GetNetworkCredential();
-                        pr.SetValue(instance, cred as object, null);
-                    }
-                }
-            }
-
-            // disposing the entries in a cache
-            // Adding to Cache
-            lock (s_uriCache)
-            {
-                s_uriCache.Remove(_uri);
-            }
-
-            if (sourceCache > 0)
-            {
-                lock (_cachelock)
-                {
-                    s_srccodeCache.Remove(sourceCache);
-                }
-            }
-
-            string key = string.Join("|", new string[] { _namespace, _class, _sourceHash.ToString(System.Globalization.CultureInfo.InvariantCulture) });
-            lock (s_uriCache)
-            {
-                s_uriCache.Add(_uri, key);
-            }
-
-            lock (_cachelock)
-            {
-                s_srccodeCache.Add(_sourceHash, instance);
-            }
-
-            WriteObject(instance, true);
-        }
-
-        #endregion
-
-        #region private
-
-        private static ulong s_sequenceNumber = 1;
-        private static object s_sequenceNumberLock = new object();
-
-        /// <summary>
-        /// Generates a random name.
-        /// </summary>
-        /// <returns>String.</returns>
-        private string GenerateRandomName()
-        {
-            string rndname = null;
-            string givenuri = _uri.ToString();
-            for (int i = 0; i < givenuri.Length; i++)
-            {
-                Int32 val = System.Convert.ToInt32(givenuri[i], CultureInfo.InvariantCulture);
-                if ((val >= 65 && val <= 90) || (val >= 48 && val <= 57) || (val >= 97 && val <= 122))
-                {
-                    rndname += givenuri[i];
-                }
-                else
-                {
-                    rndname += "_";
-                }
-            }
-
-            string sequenceString;
-            lock (s_sequenceNumberLock)
-            {
-                sequenceString = (s_sequenceNumber++).ToString(CultureInfo.InvariantCulture);
-            }
-
-            if (rndname.Length > 30)
-            {
-                return (sequenceString + rndname.Substring(rndname.Length - 30));
-            }
-
-            return (sequenceString + rndname);
-        }
-
-        /// <summary>
-        /// Generates the Assembly.
-        /// </summary>
-        /// <param name="NameSpace"></param>
-        /// <param name="ClassName"></param>
-        /// <returns></returns>
-        [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")]
-        private Assembly GenerateWebServiceProxyAssembly(string NameSpace, string ClassName)
-        {
-            DiscoveryClientProtocol dcp = new DiscoveryClientProtocol();
-
-            // if paramset is defaultcredential, set the flag in wcclient
-            if (_usedefaultcredential.IsPresent)
-                dcp.UseDefaultCredentials = true;
-
-            // if paramset is credential, assign the credentials
-            if (ParameterSetName.Equals("Credential", StringComparison.OrdinalIgnoreCase))
-                dcp.Credentials = _credential.GetNetworkCredential();
-
-            try
-            {
-                dcp.AllowAutoRedirect = true;
-                dcp.DiscoverAny(_uri.ToString());
-                dcp.ResolveAll();
-            }
-            catch (WebException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "WebException", ErrorCategory.ObjectNotFound, _uri);
-                if (ex.InnerException != null)
-                    er.ErrorDetails = new ErrorDetails(ex.InnerException.Message);
-                WriteError(er);
-                return null;
-            }
-            catch (InvalidOperationException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "InvalidOperationException", ErrorCategory.InvalidOperation, _uri);
-                WriteError(er);
-                return null;
-            }
-
-            // create the namespace
-            CodeNamespace codeNS = new CodeNamespace();
-            if (!string.IsNullOrEmpty(NameSpace))
-                codeNS.Name = NameSpace;
-
-            // create the class and add it to the namespace
-            if (!string.IsNullOrEmpty(ClassName))
-            {
-                CodeTypeDeclaration codeClass = new CodeTypeDeclaration(ClassName);
-                codeClass.IsClass = true;
-                codeClass.Attributes = MemberAttributes.Public;
-                codeNS.Types.Add(codeClass);
-            }
-
-            // create a web reference to the uri docs
-            WebReference wref = new WebReference(dcp.Documents, codeNS);
-            WebReferenceCollection wrefs = new WebReferenceCollection();
-            wrefs.Add(wref);
-
-            // create a codecompileunit and add the namespace to it
-            CodeCompileUnit codecompileunit = new CodeCompileUnit();
-            codecompileunit.Namespaces.Add(codeNS);
-
-            WebReferenceOptions wrefOptions = new WebReferenceOptions();
-            wrefOptions.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateNewAsync | System.Xml.Serialization.CodeGenerationOptions.GenerateOldAsync | System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
-            wrefOptions.Verbose = true;
-
-            // create a csharpprovider and compile it
-            CSharpCodeProvider csharpprovider = new CSharpCodeProvider();
-            StringCollection Warnings = ServiceDescriptionImporter.GenerateWebReferences(wrefs, csharpprovider, codecompileunit, wrefOptions);
-
-            StringBuilder codegenerator = new StringBuilder();
-            StringWriter writer = new StringWriter(codegenerator, CultureInfo.InvariantCulture);
-            try
-            {
-                csharpprovider.GenerateCodeFromCompileUnit(codecompileunit, writer, null);
-            }
-            catch (NotImplementedException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "NotImplementedException", ErrorCategory.ObjectNotFound, _uri);
-                WriteError(er);
-            }
-            // generate the hashcode of the CodeCompileUnit
-            _sourceHash = codegenerator.ToString().GetHashCode();
-
-            // if the sourcehash matches the hashcode in the cache,the proxy hasnt changed and so
-            // return the instance of th eproxy in the cache
-            if (s_srccodeCache.ContainsKey(_sourceHash))
-            {
-                object obj;
-                s_srccodeCache.TryGetValue(_sourceHash, out obj);
-                WriteObject(obj, true);
-                return null;
-            }
-
-            CompilerParameters options = new CompilerParameters();
-            CompilerResults results = null;
-
-            foreach (string warning in Warnings)
-            {
-                this.WriteWarning(warning);
-            }
-
-            // add the references to the required assemblies
-            options.ReferencedAssemblies.Add("System.dll");
-            options.ReferencedAssemblies.Add("System.Data.dll");
-            options.ReferencedAssemblies.Add("System.Xml.dll");
-            options.ReferencedAssemblies.Add("System.Web.Services.dll");
-            options.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
-            GetReferencedAssemblies(typeof(Cmdlet).Assembly, options);
-            options.GenerateInMemory = true;
-            options.TreatWarningsAsErrors = false;
-            options.WarningLevel = 4;
-            options.GenerateExecutable = false;
-            try
-            {
-                results = csharpprovider.CompileAssemblyFromSource(options, codegenerator.ToString());
-            }
-            catch (NotImplementedException ex)
-            {
-                ErrorRecord er = new ErrorRecord(ex, "NotImplementedException", ErrorCategory.ObjectNotFound, _uri);
-                WriteError(er);
-            }
-
-            return results.CompiledAssembly;
-        }
-
-        /// <summary>
-        /// Function to add all the assemblies required to generate the web proxy.
-        /// </summary>
-        /// <param name="assembly"></param>
-        /// <param name="parameters"></param>
-        private void GetReferencedAssemblies(Assembly assembly, CompilerParameters parameters)
-        {
-            if (!parameters.ReferencedAssemblies.Contains(assembly.Location))
-            {
-                string location = Path.GetFileName(assembly.Location);
-                if (!parameters.ReferencedAssemblies.Contains(location))
-                {
-                    parameters.ReferencedAssemblies.Add(assembly.Location);
-                    foreach (AssemblyName referencedAssembly in assembly.GetReferencedAssemblies())
-                        GetReferencedAssemblies(Assembly.Load(referencedAssembly.FullName), parameters);
-                }
-            }
-        }
-        /// <summary>
-        /// Instantiates the object
-        ///  if a type of WebServiceBindingAttribute is not found, throw an exception.
-        /// </summary>
-        /// <param name="assembly"></param>
-        /// <returns></returns>
-        private object InstantiateWebServiceProxy(Assembly assembly)
-        {
-            Type proxyType = null;
-            // loop through the types of the assembly and identify the type having
-            // a web service binding attribute
-            foreach (Type type in assembly.GetTypes())
-            {
-                object[] obj = type.GetCustomAttributes(typeof(WebServiceBindingAttribute), false);
-                if (obj.Length > 0)
-                {
-                    proxyType = type;
-                    break;
-                }
-
-                if (proxyType != null) break;
-            }
-
-            System.Management.Automation.Diagnostics.Assert(
-                proxyType != null,
-                "Proxy class should always get generated unless there were some errors earlier (in that case we shouldn't get here)");
-
-            return assembly.CreateInstance(proxyType.ToString());
-        }
-
-        #endregion
-    }
-    #endregion
-}
diff --git a/src/Microsoft.PowerShell.Commands.Management/commands/management/WriteContentCommandBase.cs b/src/Microsoft.PowerShell.Commands.Management/commands/management/WriteContentCommandBase.cs
index 25ecd672c4c..a2a6387e9da 100644
--- a/src/Microsoft.PowerShell.Commands.Management/commands/management/WriteContentCommandBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Management/commands/management/WriteContentCommandBase.cs
@@ -95,10 +95,7 @@ protected override void ProcessRecord()
 
             // Initialize the content
 
-            if (_content == null)
-            {
-                _content = Array.Empty<object>();
-            }
+            _content ??= Array.Empty<object>();
 
             if (_pipingPaths)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ClearRecycleBinResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ClearRecycleBinResources.resx
index d74321e46ff..9811798e3f8 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ClearRecycleBinResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ClearRecycleBinResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ClipboardResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ClipboardResources.resx
index 9e6cbd55cc1..4b25f91f36e 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ClipboardResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ClipboardResources.resx
@@ -1,103 +1,63 @@
 <?xml version="1.0" encoding="utf-8"?>
 <root>
-    <!--
-        Microsoft ResX Schema
-
-        Version 1.3
-
-        The primary goals of this format is to allow a simple XML format
-        that is mostly human readable. The generation and parsing of the
-        various data types are done through the TypeConverter classes
-        associated with the data types.
-
-        Example:
-
-        ... ado.net/XML headers & schema ...
-        <resheader name="resmimetype">text/microsoft-resx</resheader>
-        <resheader name="version">1.3</resheader>
-        <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-        <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-        <data name="Name1">this is my long string</data>
-        <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-        <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-            [base64 mime encoded serialized .NET Framework object]
-        </data>
-        <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-            [base64 mime encoded string representing a byte array form of the .NET Framework object]
-        </data>
-
-        There are any number of "resheader" rows that contain simple
-        name/value pairs.
-
-        Each data row contains a name, and value. The row also contains a
-        type or mimetype. Type corresponds to a .NET class that support
-        text/value conversion through the TypeConverter architecture.
-        Classes that don't support this are serialized and stored with the
-        mimetype set.
-
-        The mimetype is used for serialized objects, and tells the
-        ResXResourceReader how to depersist the object. This is currently not
-        extensible. For a given mimetype the value must be set accordingly:
-
-        Note - application/x-microsoft.net.object.binary.base64 is the format
-        that the ResXResourceWriter will generate, however the reader can
-        read any of the formats listed below.
-
-        mimetype: application/x-microsoft.net.object.binary.base64
-        value   : The object must be serialized with
-            : System.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-        mimetype: application/x-microsoft.net.object.soap.base64
-        value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-        mimetype: application/x-microsoft.net.object.bytearray.base64
-        value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-
-    <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-        <xsd:element name="root" msdata:IsDataSet="true">
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
             <xsd:complexType>
-                <xsd:choice maxOccurs="unbounded">
-                    <xsd:element name="data">
-                        <xsd:complexType>
-                            <xsd:sequence>
-                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-                            </xsd:sequence>
-                            <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
-                            <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-                            <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-                        </xsd:complexType>
-                    </xsd:element>
-                    <xsd:element name="resheader">
-                        <xsd:complexType>
-                            <xsd:sequence>
-                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                            </xsd:sequence>
-                            <xsd:attribute name="name" type="xsd:string" use="required" />
-                        </xsd:complexType>
-                    </xsd:element>
-                </xsd:choice>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
             </xsd:complexType>
-        </xsd:element>
-    </xsd:schema>
-    <resheader name="resmimetype">
-        <value>text/microsoft-resx</value>
-    </resheader>
-    <resheader name="version">
-        <value>1.3</value>
-    </resheader>
-    <resheader name="reader">
-        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-    </resheader>
-    <resheader name="writer">
-        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-    </resheader>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
   <data name="SetClipboardContent" xml:space="preserve">
     <value>Set string '{0}' to the clipboard.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/CmdletizationResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/CmdletizationResources.resx
index 15bfadffe7b..1c931c700bc 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/CmdletizationResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/CmdletizationResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ComputerInfoResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ComputerInfoResources.resx
index 8a562f462d4..c8865458286 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ComputerInfoResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ComputerInfoResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ComputerResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ComputerResources.resx
index 63a671c0248..23fa6c4b68d 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ComputerResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ComputerResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -387,4 +387,7 @@
   <data name="InvalidParameterForCoreClr" xml:space="preserve">
     <value>The {0} parameter is not supported for CoreCLR.</value>
   </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ControlPanelResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ControlPanelResources.resx
deleted file mode 100644
index 077beaa117f..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ControlPanelResources.resx
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="ControlPanelItemCmdletNotSupported" xml:space="preserve">
-    <value>The {0} cmdlet is not supported on this version of Windows.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenCanonicalName" xml:space="preserve">
-    <value>Cannot find any Control Panel item with the given canonical name {0}.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenCanonicalNameWithCategory" xml:space="preserve">
-    <value>Cannot find any control panel item with the given canonical name {0} that satisfies the specified category.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenCategory" xml:space="preserve">
-    <value>Cannot find any control panel item with the given category {0}.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenInstance" xml:space="preserve">
-    <value>Cannot find the Control Panel item based on the given instance of type {0}.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenName" xml:space="preserve">
-    <value>Cannot find any control panel item with the given name {0}.</value>
-  </data>
-  <data name="NoControlPanelItemFoundForGivenNameWithCategory" xml:space="preserve">
-    <value>Cannot find any Control Panel item with the given name {0} that satisfies the specified category.</value>
-  </data>
-  <data name="NoControlPanelItemFoundWithNullCanonicalName" xml:space="preserve">
-    <value>Cannot find any control panel item that has a canonical name.</value>
-  </data>
-  <data name="NoControlPanelItemFoundWithNullCanonicalNameWithCategory" xml:space="preserve">
-    <value>Cannot find any Control Panel item that satisfies the specified category and has a canonical name.</value>
-  </data>
-  <data name="VerbActionOpen" xml:space="preserve">
-    <value>&amp;Open</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/EventlogResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/EventlogResources.resx
deleted file mode 100644
index cee97f4adae..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/EventlogResources.resx
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="LogReadError" xml:space="preserve">
-    <value>Log "{0}" could not be read to completion due to the following error. This may have occurred because the log was cleared while still being read. {1}</value>
-  </data>
-  <data name="NoEntriesFound" xml:space="preserve">
-    <value>No matches found</value>
-  </data>
-  <data name="ClearEventLogWarning" xml:space="preserve">
-    <value>Do you want to clear the "{0}" log on the computer "{1}"?</value>
-  </data>
-  <data name="LogDoesNotExist" xml:space="preserve">
-    <value>The Log name "{0}" does not exist in the computer "{1}".</value>
-  </data>
-  <data name="PathDoesNotExist" xml:space="preserve">
-    <value>The path to the "{1}" computer cannot be found.</value>
-  </data>
-  <data name="SourceDoesNotExist" xml:space="preserve">
-    <value>The source name "{2}" does not exist on computer "{1}".</value>
-  </data>
-  <data name="AccessDenied" xml:space="preserve">
-    <value>The registry key for the log "{0}" for source "{2}" could not be opened.</value>
-  </data>
-  <data name="OSWritingError" xml:space="preserve">
-    <value>The operating system reported an error when writing the event entry to the event log. A Windows error code is not available.</value>
-  </data>
-  <data name="LimitEventLogWarning" xml:space="preserve">
-    <value>Do you want to change the properties of the "{0}" log on the "{1}" computer?</value>
-  </data>
-  <data name="PermissionDenied" xml:space="preserve">
-    <value>The registry key for the log "{0}" could not be opened on the computer "{1}".</value>
-  </data>
-  <data name="ValueOutofRange" xml:space="preserve">
-    <value>The value supplied for MaximumSize parameter has to be in the range of 64 KB to 4GB with an increment of 64 KB. Please enter a proper value and then retry.</value>
-  </data>
-  <data name="NoAccess" xml:space="preserve">
-    <value>Access to the "{1}" computer is denied.</value>
-  </data>
-  <data name="SourceExistWithLog" xml:space="preserve">
-    <value>The "{2}" source is already registered with the "{0}" log.</value>
-  </data>
-  <data name="SourceExistInComp" xml:space="preserve">
-    <value>The "{2}" source is already registered on the "{1}" computer.</value>
-  </data>
-  <data name="RemoveEventLogWarning" xml:space="preserve">
-    <value>Do you want to remove the "{0}" log from the "{1}" computer?</value>
-  </data>
-  <data name="RemoveSourceWarning" xml:space="preserve">
-    <value>Do you want to remove the "{0}" source from the "{1}" computer?</value>
-  </data>
-  <data name="InvalidOverflowAction" xml:space="preserve">
-    <value>Retention days is valid only if the overflow action is "OverwriteOlder". Please change and try again.</value>
-  </data>
-  <data name="InvalidArgument" xml:space="preserve">
-    <value>Specify a valid value for the number of retention days.</value>
-  </data>
-  <data name="AccessIsDenied" xml:space="preserve">
-    <value>Access is denied. Try running the command again in a session that has been opened with elevated user rights (that is, Run as Administrator).</value>
-  </data>
-  <data name="NotSupported" xml:space="preserve">
-    <value>The command is not supported in this version of the operating system.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/HotFixResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/HotFixResources.resx
index a058ae71a11..c878f64a50f 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/HotFixResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/HotFixResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ManagementMshSnapInResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ManagementMshSnapInResources.resx
deleted file mode 100644
index 73de4f80a24..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ManagementMshSnapInResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Description" xml:space="preserve">
-    <value>This PowerShell Snap-In contains management cmdlets that are used to manage Windows components.  </value>
-  </data>
-  <data name="Vendor" xml:space="preserve">
-    <value>Microsoft Corporation</value>
-  </data>
-  <data name="Name" xml:space="preserve">
-    <value>Management PSSnapIn</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/NavigationResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/NavigationResources.resx
index 6bec473c213..3c2675f900e 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/NavigationResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/NavigationResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ProcessCommandHelpResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ProcessCommandHelpResources.resx
index fa4ae71963a..d75296bacf3 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ProcessCommandHelpResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ProcessCommandHelpResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ProcessResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ProcessResources.resx
index 65513e55f5f..1b9e9b21c25 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ProcessResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ProcessResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -189,6 +189,9 @@
   <data name="CannotStarttheProcess" xml:space="preserve">
     <value>This command cannot be run completely because the system cannot find all the information required.</value>
   </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
   <data name="InvalidUserError" xml:space="preserve">
     <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
   </data>
@@ -204,9 +207,6 @@
   <data name="ContradictParametersSpecified" xml:space="preserve">
     <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
   </data>
-  <data name="IncludeUserNameRequiresElevation" xml:space="preserve">
-    <value>The 'IncludeUserName' parameter requires elevated user rights. Try running the command again in a session that has been opened with elevated user rights (that is, Run as Administrator).</value>
-  </data>
   <data name="CouldNotDebugProcess" xml:space="preserve">
     <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ServiceResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ServiceResources.resx
index 3792ce8db99..1184748d98e 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/ServiceResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ServiceResources.resx
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <root>
-  <!--
-    Microsoft ResX Schema
-
+  <!-- 
+    Microsoft ResX Schema 
+    
     Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
     associated with the data types.
-
+    
     Example:
-
+    
     ... ado.net/XML headers & schema ...
     <resheader name="resmimetype">text/microsoft-resx</resheader>
     <resheader name="version">2.0</resheader>
@@ -26,41 +26,41 @@
         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
         <comment>This is a comment</comment>
     </data>
-
-    There are any number of "resheader" rows that contain simple
+                
+    There are any number of "resheader" rows that contain simple 
     name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
     mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
     extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
     read any of the formats listed below.
-
+    
     mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
+    value   : The object must be serialized with 
             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
-
+    
     mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
+    value   : The object must be serialized with 
             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
             : and then encoded with base64 encoding.
 
     mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
+    value   : The object must be serialized into a byte array 
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -159,9 +159,6 @@
   <data name="CouldNotSetService" xml:space="preserve">
     <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
   </data>
-  <data name="CouldNotGetServiceInfo" xml:space="preserve">
-    <value>Service '{1} ({0})' cannot be queried due to the following error: {2}</value>
-  </data>
   <data name="CouldNotSetServiceDescription" xml:space="preserve">
     <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
   </data>
@@ -211,9 +208,12 @@
     <value>Service '{1} ({0})' resume failed.</value>
   </data>
   <data name="FailToOpenServiceControlManager" xml:space="preserve">
-    <value>Failed to configure the service '{1} ({0})' due to the following error: {2}. Run PowerShell as admin and run your command again.</value>
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
   </data>
   <data name="UnsupportedStartupType" xml:space="preserve">
     <value>The startup type '{0}' is not supported by {1}.</value>
   </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/TestConnectionResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/TestConnectionResources.resx
index ddd4ba8f815..da6e540b9bc 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/TestConnectionResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/TestConnectionResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/TestPathResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/TestPathResources.resx
index c60c4318a64..c14a57076b5 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/TestPathResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/TestPathResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/TimeZoneResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/TimeZoneResources.resx
index f474785fd22..01594e592a1 100644
--- a/src/Microsoft.PowerShell.Commands.Management/resources/TimeZoneResources.resx
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/TimeZoneResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/TransactionResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/TransactionResources.resx
deleted file mode 100644
index 9d92573d86d..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/TransactionResources.resx
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="TransactionTimedOut" xml:space="preserve">
-    <value>Cannot use transaction. The transaction has timed out.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/WebServiceResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/WebServiceResources.resx
deleted file mode 100644
index 91d57c51902..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/WebServiceResources.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="InvalidUri" xml:space="preserve">
-    <value>The Uniform Resource Identifier (URI) cannot be null or empty. Provide a valid URI.</value>
-  </data>
-  <data name="NotSupported" xml:space="preserve">
-    <value>The command is not supported on this operating system.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/WmiResources.resx b/src/Microsoft.PowerShell.Commands.Management/resources/WmiResources.resx
deleted file mode 100644
index 47f736405ea..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/resources/WmiResources.resx
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="WmiInvalidClass" xml:space="preserve">
-    <value>Could not register for event. The class name is invalid. Valid class names consist of letters, digits and the underscore character.</value>
-  </data>
-  <data name="WmiNamespaceConnect" xml:space="preserve">
-    <value>Could not get objects from namespace {0}. {1}</value>
-  </data>
-  <data name="WmiFilterInvalidClass" xml:space="preserve">
-    <value>The class name {0} is invalid. Valid class names consist of letters, digits, '_', '?', '*', '-' and "[]".</value>
-  </data>
-  <data name="WmiMethodNameForConfirmation" xml:space="preserve">
-    <value>{0} ({1})</value>
-  </data>
-  <data name="WmiParameterMissing" xml:space="preserve">
-    <value>Parameter {0} should be specified to compose the query.</value>
-  </data>
-  <data name="WmiQueryFailure" xml:space="preserve">
-    <value>{0}"{1}"</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClearRecycleBinResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClearRecycleBinResources.cs.resx
new file mode 100644
index 00000000000..4f7ab0ca493
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClearRecycleBinResources.cs.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Veškerý obsah Koše</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Veškerý obsah Koše pro jednotku {0}</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Vyprazdňování Koše</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>pro jednotku {0}</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>pro všechny jednotky</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Jednotku nelze najít. Jednotka s názvem {0} neexistuje. Spuštěním rutiny {1} zobrazíte dostupné pevné jednotky v systému.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Neplatný vstup Podporovány jsou následující formáty: {0}, {1} nebo {2}.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>Jednotka s názvem {0} není pevná jednotka a nepodporuje Koš. Spuštěním rutiny {1} zobrazíte dostupné pevné jednotky v systému.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClipboardResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClipboardResources.cs.resx
new file mode 100644
index 00000000000..15ad2078786
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ClipboardResources.cs.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Nastavte řetězec {0} do schránky.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Připojte řetězec {0} ke schránce.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Nastavte soubor {0} do schránky.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Připojte soubor {0} ke schránce.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Nastavte soubory ({0}) do schránky.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Připojte soubory ({0}) do schránky.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>Schránka neobsahuje žádný obsah nebo formát obsahu není kompatibilní. Nastavte vstupní objekt do schránky.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Schránka byla vymazána.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType lze kombinovat pouze s formátem Text.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Hodnotu Raw lze kombinovat pouze s formátem Text nebo FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Html lze kombinovat pouze s formátem Html Text.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Na této platformě je podporován pouze formát Text.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Schránka není na této platformě podporována.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>Přepínač -AsHtml není na této platformě podporován.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Parametr -TextFormatType podporuje na této platformě pouze hodnotu Text.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Parametr -Path není na této platformě podporován.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Parametr -LiteralPath není na této platformě podporován.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/CmdletizationResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/CmdletizationResources.cs.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/CmdletizationResources.cs.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerInfoResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerInfoResources.cs.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerInfoResources.cs.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerResources.cs.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ComputerResources.cs.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/HotFixResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/HotFixResources.cs.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/HotFixResources.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/NavigationResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/NavigationResources.cs.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/NavigationResources.cs.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessCommandHelpResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessCommandHelpResources.cs.resx
new file mode 100644
index 00000000000..e619e61392f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessCommandHelpResources.cs.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Vypíše aktuálně spuštěné procesy.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[vstup z kanálu je povolen]
+Čárkami oddělený seznam identifikátorů procesů určujících procesy, které se mají získat
+
+-ProcessName název
+[string[]]
+[vstup z kanálu je povolen]
+Čárkami oddělený seznam názvů procesů určujících procesy, které se mají získat
+
+-Exclude název
+[ArrayList]
+Čárkami oddělený seznam názvů procesů, které mají být z výstupu vyloučeny.
+
+---
+Příkaz vypíše procesy z místního počítače a vrátí objekty System.Diagnostics.Process. Příkaz zapisuje objekt procesu do výstupního kanálu po jednom. Příkaz přijímá z příkazového řádku parametry, jako jsou ID (identifikátor procesu) nebo ProcessName (název procesu). Příkaz vrátí odpovídající objekt System.Diagnostics.Process pro zadané parametry ID nebo ProcessName.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>Možnost Vyloučit funguje pouze pro název procesu.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Vrátí všechny spuštěné procesy.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Vrátí všechny procesy s názvy začínajícími na svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessResources.cs.resx
new file mode 100644
index 00000000000..f22605b5b5b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ProcessResources.cs.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>Uživatel nemá přístup k požadovaným informacím.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>The path specified does not exist.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/ServiceResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ServiceResources.cs.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/ServiceResources.cs.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestConnectionResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestConnectionResources.cs.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestConnectionResources.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestPathResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestPathResources.cs.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TestPathResources.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/cs/TimeZoneResources.cs.resx b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TimeZoneResources.cs.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/cs/TimeZoneResources.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ClearRecycleBinResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ClearRecycleBinResources.de.resx
new file mode 100644
index 00000000000..acebb930da1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ClearRecycleBinResources.de.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Alle Inhalte des Papierkorbs</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Der gesamte Inhalt der Papierkorb für das Laufwerk „{0}“</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Papierkorb wird gelöscht</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>für das Laufwerk „{0}“</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>für alle Laufwerke</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen „{0}“ ist nicht vorhanden. Führen Sie das cmdlet „{1}“ aus, um die verfügbaren Festplattenlaufwerke im System anzuzeigen.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Die Eingabe ist ungültig. Die folgenden Formate werden unterstützt: „{0}“, „{1}“ oder „{2}“.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>Das Laufwerk mit dem Namen „{0}“ ist kein Festplattenlaufwerk und unterstützt die Papierkorb nicht. Führen Sie das cmdlet „{1}“ aus, um die verfügbaren Festplattenlaufwerke im System anzuzeigen.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ClipboardResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ClipboardResources.de.resx
new file mode 100644
index 00000000000..4d717d9f91b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ClipboardResources.de.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Zeichenfolge „{0}“ in die Zwischenablage festlegen.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Zeichenfolge „{0}“ an die Zwischenablage anhängen.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Legen Sie die Datei „{0}“ in der Zwischenablage fest.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Hängen Sie die Datei „{0}“ an die Zwischenablage an.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Legen Sie {0} Dateien in der Zwischenablage fest.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Fügen Sie {0} Dateien an die Zwischenablage an.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>In der Zwischenablage sind keine Inhalte vorhanden, oder das Inhaltsformat ist nicht kompatibel. Legen Sie das Eingabeobjekt auf die Zwischenablage fest.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Die Zwischenablage wurde gelöscht.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType kann nur mit dem Textformat kombiniert werden.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw kann nur mit dem Text- oder FileDropList-Format kombiniert werden.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>HTML kann nur mit dem HTML-Textformat kombiniert werden.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Auf dieser Plattform wird nur das Textformat unterstützt.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Die Zwischenablage wird auf dieser Plattform nicht unterstützt.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>Der Schalter „-AsHtml“ wird auf dieser Plattform nicht unterstützt.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Der Parameter „-TextFormatType“ unterstützt nur „Text“ auf dieser Plattform.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Der Parameter „-Path“ wird auf dieser Plattform nicht unterstützt.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Der Parameter -LiteralPath wird auf dieser Plattform nicht unterstützt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/CmdletizationResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/CmdletizationResources.de.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/CmdletizationResources.de.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerInfoResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerInfoResources.de.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerInfoResources.de.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerResources.de.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ComputerResources.de.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/HotFixResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/HotFixResources.de.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/HotFixResources.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/NavigationResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/NavigationResources.de.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/NavigationResources.de.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessCommandHelpResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessCommandHelpResources.de.resx
new file mode 100644
index 00000000000..db935ef5512
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessCommandHelpResources.de.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Listet Prozesse auf, die derzeit ausgeführt werden.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[Pipelineeingabe zulässig]
+Durch Kommata getrennte Liste von Prozessbezeichnern, die die abzurufenden Prozesse angeben
+
+-ProcessName-Name
+[Zeichenfolge[]]
+[Pipelineeingabe zulässig]
+Durch Kommata getrennte Liste von Prozessnamen, die die abzurufenden Prozesse angeben
+
+-Name ausschließen
+[ArrayList]
+Durch Kommata getrennte Liste von Prozessnamen, die von der Ausgabe ausgeschlossen werden sollen.
+
+---
+Der Befehl listet Prozesse vom lokalen Computer auf und gibt System.Diagnostics.Process-Objekt(e) aus. Der Befehl schreibt das Prozessobjekt einzeln in die Ausgabepipeline. Der Befehl akzeptiert Parameter wie ID (Prozessbezeichner) oder Prozessname über die Befehlszeile. Der Befehl gibt den entsprechenden system.diagnostics.process-Wert für die angegebenen ID- oder ProcessName-Parameter zurück.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>„Ausschließen“ funktioniert nur für den Prozessnamen.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Gibt alle laufenden Prozesse zurück.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Gibt alle Prozesse mit Namen zurück, die mit svc beginnen.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessResources.de.resx
new file mode 100644
index 00000000000..40b2f2244db
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ProcessResources.de.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>Der Benutzer besitzt keinen Zugriff auf die angeforderten Informationen.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>Der angegebene Pfad ist nicht vorhanden.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/ServiceResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/ServiceResources.de.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/ServiceResources.de.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/TestConnectionResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/TestConnectionResources.de.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/TestConnectionResources.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/TestPathResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/TestPathResources.de.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/TestPathResources.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/de/TimeZoneResources.de.resx b/src/Microsoft.PowerShell.Commands.Management/resources/de/TimeZoneResources.de.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/de/TimeZoneResources.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ClearRecycleBinResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ClearRecycleBinResources.es.resx
new file mode 100644
index 00000000000..33d86a8b2b9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ClearRecycleBinResources.es.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Todo el contenido de la papelera de reciclaje</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Todo el contenido de la papelera de reciclaje de la unidad "{0}"</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Borrando papelera de reciclaje</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>para la unidad "{0}"</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>en todas las unidades.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>No se encuentra la unidad. No existe una unidad con el nombre '{0}'. Ejecute el cmdlet "{1}" para ver las unidades fijas disponibles en el sistema.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Entrada no válida. Se admiten los formatos siguientes: '{0}', '{1}' o '{2}'.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>La unidad con el nombre '{0}' no es una unidad fija y no admite el papelera de reciclaje. Ejecute el cmdlet "{1}" para ver las unidades fijas disponibles en el sistema.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ClipboardResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ClipboardResources.es.resx
new file mode 100644
index 00000000000..c319969cf54
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ClipboardResources.es.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Establezca la cadena "{0}" en el Portapapeles.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Anexe la cadena "{0}" en el Portapapeles.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Establezca el archivo "{0}" en el Portapapeles.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Anexar el archivo "{0}" al Portapapeles.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Establezca {0} archivos en el Portapapeles.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Anexe {0} archivos en el Portapapeles.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>No hay contenido en Portapapeles o el formato del contenido no es compatible. Establece el objeto de entrada en el Portapapeles.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Se ha borrado el Portapapeles.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType solo se puede combinar con el formato Text.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw solo se puede combinar con los formatos Text o FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>HTML solo se puede combinar con el formato HTML Text.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>En esta plataforma solo se admite el formato Text.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>El Portapapeles no se admite en esta plataforma.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>El modificador '-AsHtml' no se admite en esta plataforma.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>El parámetro "-TextFormatType" solo admite "Text" en esta plataforma.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>El parámetro "-Path" no se admite en esta plataforma.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>El parámetro "-LiteralPath" no se admite en esta plataforma.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/CmdletizationResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/CmdletizationResources.es.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/CmdletizationResources.es.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerInfoResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerInfoResources.es.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerInfoResources.es.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerResources.es.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ComputerResources.es.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/HotFixResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/HotFixResources.es.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/HotFixResources.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/NavigationResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/NavigationResources.es.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/NavigationResources.es.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessCommandHelpResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessCommandHelpResources.es.resx
new file mode 100644
index 00000000000..9c8ec651897
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessCommandHelpResources.es.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Enumera los procesos que se están ejecutando actualmente.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+Id. -Id
+[int[]]
+[se permite entrada por canalización]
+Lista separada por comas de identificadores de proceso que especifican los procesos que se van a obtener
+
+Nombre -ProcessName
+[string[]]
+[se permite entrada por canalización]
+Lista separada por comas de nombres de proceso que especifican los procesos que se van a obtener
+
+Nombre -Exclude
+[ArrayList]
+Lista separada por comas de nombres de procesos que se excluirán de la salida.
+
+---
+El comando enumera los procesos del equipo local y devuelve objetos System.Diagnostics.Process. El comando escribe el objeto de proceso en la canalización de salida uno a uno. El comando toma parámetros como id. (identificador de proceso) o nombre de proceso desde la línea de comandos. El comando devuelve el system.diagnostics.process correspondiente para los parámetros id. o ProcessName proporcionados.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>La exclusión solo funciona para el nombre del proceso.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Devuelve todos los procesos en ejecución.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Devuelve todos los procesos cuyos nombres empiezan por svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessResources.es.resx
new file mode 100644
index 00000000000..ed1f5e36a2b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ProcessResources.es.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>El usuario no tiene acceso a la información pedida.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>La ruta especificada no existe.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/ServiceResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/ServiceResources.es.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/ServiceResources.es.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/TestConnectionResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/TestConnectionResources.es.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/TestConnectionResources.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/TestPathResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/TestPathResources.es.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/TestPathResources.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/es/TimeZoneResources.es.resx b/src/Microsoft.PowerShell.Commands.Management/resources/es/TimeZoneResources.es.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/es/TimeZoneResources.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClearRecycleBinResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClearRecycleBinResources.fr.resx
new file mode 100644
index 00000000000..1e4c3e85da9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClearRecycleBinResources.fr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Tous les éléments de la Corbeille</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Tout le contenu de la Corbeille du lecteur « {0} »</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Effacement Corbeille</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>pour le lecteur « {0} »</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>pour tous les disques</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver le lecteur. Aucun lecteur nommé « {0} » n’existe. Exécutez l’applet de commande « {1} » pour voir les lecteurs fixes disponibles sur le système.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Entrée non valide. Les formats suivants sont pris en charge : « {0} », « {1} » ou « {2} ».</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>Le lecteur nommé « {0} » n’est pas un lecteur fixe et ne prend pas en charge la Corbeille. Exécutez l’applet de commande « {1} » pour voir les lecteurs fixes disponibles sur le système.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClipboardResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClipboardResources.fr.resx
new file mode 100644
index 00000000000..7c9418f2bc2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ClipboardResources.fr.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Définissez la chaîne « {0} » au Presse-papiers.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Ajoutez la chaîne « {0} » au Presse-papiers.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Définissez le fichier « {0} » au Presse-papiers.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Ajoutez le fichier « {0} » au Presse-papiers.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Définissez {0} fichiers au Presse-papiers.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Ajoutez {0} fichiers au Presse-papiers.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>Aucun contenu n’est présent dans le Presse-papiers ou le format du contenu n’est pas compatible. Définissez l’objet d’entrée sur le Presse-papiers.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Le Presse-papiers a été vidé.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType ne peut être combiné qu’avec le format Text.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw ne peut être combiné qu’avec le format Text ou FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Le format HTML ne peut être combiné qu’avec le format de texte HTML.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Seul le format texte est pris en charge sur cette plateforme.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Le Presse-papiers n’est pas pris en charge sur cette plateforme.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>Le commutateur « -AsHtml » n’est pas pris en charge sur cette plateforme.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Le paramètre « -TextFormatType » prend en charge uniquement « Text » sur cette plateforme.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Le paramètre « -Path » n’est pas pris en charge sur cette plateforme.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Le paramètre « -LiteralPath » n’est pas pris en charge sur cette plateforme.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/CmdletizationResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/CmdletizationResources.fr.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/CmdletizationResources.fr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerInfoResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerInfoResources.fr.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerInfoResources.fr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerResources.fr.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ComputerResources.fr.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/HotFixResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/HotFixResources.fr.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/HotFixResources.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/NavigationResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/NavigationResources.fr.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/NavigationResources.fr.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessCommandHelpResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessCommandHelpResources.fr.resx
new file mode 100644
index 00000000000..125ac713408
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessCommandHelpResources.fr.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Répertorie les processus en cours d’exécution.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[pipeline input allowed]
+Liste séparée par des virgules des identifiants de processus qui spécifient les processus à obtenir
+
+-ProcessName name
+[string[]]
+[pipeline input allowed]
+Liste séparée par des virgules des noms de processus qui spécifient les processus à obtenir
+
+-Exclure le nom
+[ArrayList]
+Liste séparée par des virgules des noms de processus à exclure de la sortie.
+
+---
+La commande énumère les processus de l’ordinateur local et renvoie un ou plusieurs objets System.Diagnostics.Process. La commande écrit l’objet de processus dans le pipeline de sortie un à la fois. La commande accepte des paramètres comme ID (identifiant de processus) ou Process Name depuis la ligne de commande. La commande retourne System.Diagnostics.Process correspondant pour les paramètres ID ou ProcessName fournis.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>L’exclusion ne s’applique qu’au nom du processus.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Retourne tous les processus en cours d’exécution.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Renvoie tous les processus dont le nom commence par svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessResources.fr.resx
new file mode 100644
index 00000000000..8bd5fe1369d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ProcessResources.fr.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>L'utilisateur n'a pas accès aux informations demandées.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>Le chemin d’accès spécifié n’existe pas.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/ServiceResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ServiceResources.fr.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/ServiceResources.fr.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestConnectionResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestConnectionResources.fr.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestConnectionResources.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestPathResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestPathResources.fr.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TestPathResources.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/fr/TimeZoneResources.fr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TimeZoneResources.fr.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/fr/TimeZoneResources.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ClearRecycleBinResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ClearRecycleBinResources.it.resx
new file mode 100644
index 00000000000..f1dfe2a454d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ClearRecycleBinResources.it.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Tutto il contenuto del cestino</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Tutto il contenuto del cestino per l'unità "{0}"</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Svuotamento del cestino</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>per l'unità "{0}"</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>per tutte le unità</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Impossibile trovare l'unità. L'unità con il nome "{0}" non esiste. Eseguire il cmdlet "{1}" per visualizzare le unità fisse disponibili nel sistema.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Input non valido. Sono supportati i seguenti formati: "{0}", "{1}" o "{2}".</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>L'unità con il nome "{0}" non è un'unità fissa e non supporta il cestino. Eseguire il cmdlet "{1}" per visualizzare le unità fisse disponibili nel sistema.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ClipboardResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ClipboardResources.it.resx
new file mode 100644
index 00000000000..b965d42aaea
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ClipboardResources.it.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Impostare la stringa '{0}' negli Appunti.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Accodare la stringa '{0}' negli Appunti.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Impostare il file '{0}' negli Appunti.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Accodare il file '{0}' negli Appunti.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Impostare i file {0} negli Appunti.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Accodare i file {0} negli Appunti.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>Non è presente alcun contenuto negli Appunti oppure il formato del contenuto non è compatibile. Impostare l'oggetto di input negli Appunti.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Gli Appunti sono stati cancellati.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType può essere combinato solo con il formato Testo.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>È possibile combinare Raw solo con il formato Testo o FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>È possibile combinare HTML solo con il formato testo HTML.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Questa piattaforma supporta solo il formato Testo.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Gli Appunti non sono supportati in questa piattaforma.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>L'opzione '-AsHtml' non è supportata in questa piattaforma.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Il parametro '-TextFormatType' supporta solo 'Text' in questa piattaforma.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Il parametro '-Path' non è supportato in questa piattaforma.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Il parametro '-LiteralPath' non è supportato in questa piattaforma.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/CmdletizationResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/CmdletizationResources.it.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/CmdletizationResources.it.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerInfoResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerInfoResources.it.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerInfoResources.it.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerResources.it.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ComputerResources.it.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/HotFixResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/HotFixResources.it.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/HotFixResources.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/NavigationResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/NavigationResources.it.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/NavigationResources.it.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessCommandHelpResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessCommandHelpResources.it.resx
new file mode 100644
index 00000000000..fce17ad4b7f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessCommandHelpResources.it.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Elenca i processi attualmente in esecuzione.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[input pipeline consentito]
+Elenco delimitato da virgole di identificatori di processo che specifica i processi da ottenere
+
+-nome ProcessName
+[string[]]
+[input pipeline consentito]
+Elenco delimitato da virgole di nomi di processo che specifica i processi da ottenere
+
+-Escludi nome
+[ArrayList]
+Elenco delimitato da virgole di nomi di processo da escludere dall'output.
+
+---
+Il comando enumera i processi dal computer locale e restituisce uno o più oggetti System.Diagnostics.Process. Il comando scrive l'oggetto processo nella pipeline di output uno alla volta. Il comando accetta parametri come ID (identificatore di processo) o nome processo dalla riga di comando. Il comando restituisce il corrispondente System.Diagnostics.Process per i parametri ID o ProcessName forniti.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>L'esclusione funziona solo per il nome del processo.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Restituisce tutti i processi in esecuzione.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Restituisce tutti i processi con nomi che iniziano con svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessResources.it.resx
new file mode 100644
index 00000000000..6c54f5407db
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ProcessResources.it.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>L'utente non ha accesso alle informazioni richieste.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>Il percorso specificato non esiste.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/ServiceResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/ServiceResources.it.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/ServiceResources.it.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/TestConnectionResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/TestConnectionResources.it.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/TestConnectionResources.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/TestPathResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/TestPathResources.it.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/TestPathResources.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/it/TimeZoneResources.it.resx b/src/Microsoft.PowerShell.Commands.Management/resources/it/TimeZoneResources.it.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/it/TimeZoneResources.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClearRecycleBinResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClearRecycleBinResources.ja.resx
new file mode 100644
index 00000000000..d0f2e835aa5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClearRecycleBinResources.ja.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>ごみ箱のすべての内容</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>'{0}' ドライブのごみ箱のすべての内容</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>ごみ箱を空にしています</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>'{0}' ドライブ</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>すべてのドライブ</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>ドライブが見つかりません。'{0}' という名前のドライブは存在しません。'{1}' コマンドレットを実行して、システムで使用可能な固定ドライブを確認してください。</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>入力が無効です。次の形式がサポートされています: '{0}'、'{1}' または '{2}'。</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>'{0}' という名前のドライブは固定ドライブではなく、ごみ箱をサポートしていません。'{1}' コマンドレットを実行して、システムで使用可能な固定ドライブを確認してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClipboardResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClipboardResources.ja.resx
new file mode 100644
index 00000000000..6eccdb7dd0d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ClipboardResources.ja.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>文字列 '{0}' をクリップボードに設定します。</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>文字列 '{0}' をクリップボードにアペンドします。</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>ファイル '{0}' をクリップボードに設定します。</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>ファイル '{0}' をクリップボードに追加します。</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} ファイルをクリップボードに設定します。</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} ファイルをクリップボードにアペンドします。</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>クリップボードにコンテンツがないか、コンテンツ形式に互換性がありません。入力オブジェクトをクリップボードに設定します。</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>クリップボードがクリアされました。</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType はテキスト形式とのみ組み合わせることができます。</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw は Text 形式または FileDropList 形式でのみ組み合わせることができます。</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>HTML は HTML テキスト形式とのみ組み合わせることができます。</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>このプラットフォームでは、テキスト形式のみがサポートされています。</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>クリップボードは、このプラットフォームではサポートされていません。</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>'-AsHtml' スイッチは、このプラットフォームではサポートされていません。</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>'-TextFormatType' パラメーターは、このプラットフォームで 'Text' のみをサポートします。</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>'-Path' パラメーターは、このプラットフォームではサポートされていません。</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>'-LiteralPath' パラメーターは、このプラットフォームではサポートされていません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/CmdletizationResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/CmdletizationResources.ja.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/CmdletizationResources.ja.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerInfoResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerInfoResources.ja.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerInfoResources.ja.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerResources.ja.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ComputerResources.ja.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/HotFixResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/HotFixResources.ja.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/HotFixResources.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/NavigationResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/NavigationResources.ja.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/NavigationResources.ja.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessCommandHelpResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessCommandHelpResources.ja.resx
new file mode 100644
index 00000000000..6efea01c88c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessCommandHelpResources.ja.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>現在実行中のプロセスを一覧表示します。</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[パイプライン入力が許可されました]
+取得するプロセスを指定するプロセス識別子のコンマ区切りの一覧
+
+-ProcessName 名
+[string[]]
+[パイプライン入力が許可されました]
+取得するプロセスを指定するプロセス名のコンマ区切りの一覧
+
+-除外名
+[ArrayList]
+出力から除外するプロセス名のコンマ区切りリスト。
+
+---
+このコマンドは、ローカル コンピューターからプロセスを列挙し、System.Diagnostics.Process オブジェクトを出力します。このコマンドは、プロセス オブジェクトを出力パイプラインに一度に 1 つずつ書き込みます。このコマンドは、コマンド ラインから ID (プロセス識別子) またはプロセス名などのパラメーターを受け取ります。このコマンドは、指定された ID または ProcessName パラメーターに対応する system.diagnostics.process を返します。</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>除外は、プロセス名に対してのみ機能します。</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>実行中のすべてのプロセスを返します。</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>svc で始まる名前を持つすべてのプロセスを返します。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessResources.ja.resx
new file mode 100644
index 00000000000..299a6caa2ff
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ProcessResources.ja.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>ユーザーには、要求された情報へのアクセス権がありません。</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>指定されたパスが存在しない。</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/ServiceResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ServiceResources.ja.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/ServiceResources.ja.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestConnectionResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestConnectionResources.ja.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestConnectionResources.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestPathResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestPathResources.ja.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TestPathResources.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ja/TimeZoneResources.ja.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TimeZoneResources.ja.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ja/TimeZoneResources.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClearRecycleBinResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClearRecycleBinResources.ko.resx
new file mode 100644
index 00000000000..009e32045e8
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClearRecycleBinResources.ko.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>휴지통에 있는 모든 항목</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>'{0}' 드라이브의 휴지통에 있는 모든 내용</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>휴지통 지우는 중</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>'{0}' 드라이브용</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>모든 드라이브에 대해</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>드라이브를 찾을 수 없습니다. 이름이 '{0}'인 드라이브가 없습니다. '{1}' cmdlet을 실행하여 시스템에서 사용 가능한 고정 드라이브를 확인하세요.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>유효하지 않은 입력입니다. 지원되는 형식은 '{0}', '{1}' 또는 '{2}'입니다.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>'{0}' 드라이브는 Fixed 드라이브가 아니므로 휴지통을 지원하지 않습니다. '{1}' cmdlet을 실행하여 시스템에서 사용 가능한 고정 드라이브를 확인하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClipboardResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClipboardResources.ko.resx
new file mode 100644
index 00000000000..569f0b1ca7d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ClipboardResources.ko.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>'{0}' 문자열을 클립보드로 설정합니다.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>'{0}' 문자열을 클립보드에 추가합니다.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>'{0}' 파일을 클립보드로 설정합니다.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>'{0}' 파일을 클립보드에 추가합니다.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} 파일을 클립보드로 설정합니다.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} 파일을 클립보드에 추가합니다.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>클립보드에 콘텐츠가 없거나 콘텐츠 형식이 호환되지 않습니다. 입력 개체를 클립보드에 설정하세요.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>클립보드를 지웠습니다.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType은 텍스트 형식과만 함께 사용할 수 있습니다.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw는 텍스트 또는 FileDropList 형식과만 함께 사용할 수 있습니다.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>HTML은 HTML 텍스트 형식과만 함께 사용할 수 있습니다.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>이 플랫폼에서는 텍스트 형식만 지원됩니다.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>클립보드는 이 플랫폼에서 지원되지 않습니다.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>이 플랫폼에서는 '-AsHtml' 스위치를 지원하지 않습니다.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>이 플랫폼에서는 '-TextFormatType' 매개 변수가 'Text'만 지원합니다.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>'-Path' 매개 변수는 이 플랫폼에서 지원되지 않습니다.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>'-LiteralPath' 매개 변수는 이 플랫폼에서 지원되지 않습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/CmdletizationResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/CmdletizationResources.ko.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/CmdletizationResources.ko.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerInfoResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerInfoResources.ko.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerInfoResources.ko.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerResources.ko.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ComputerResources.ko.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/HotFixResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/HotFixResources.ko.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/HotFixResources.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/NavigationResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/NavigationResources.ko.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/NavigationResources.ko.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessCommandHelpResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessCommandHelpResources.ko.resx
new file mode 100644
index 00000000000..ea4f0235b4b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessCommandHelpResources.ko.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>현재 실행 중인 프로세스를 나열합니다.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[pipeline input allowed]
+가져올 프로세스를 지정하는 프로세스 식별자의 쉼표로 구분된 목록
+
+-ProcessName name
+[string[]]
+[pipeline input allowed]
+가져올 프로세스를 지정하는 프로세스 이름의 쉼표로 구분된 목록
+
+-Exclude name
+[ArrayList]
+출력에서 제외할 프로세스 이름의 쉼표로 구분된 목록입니다.
+
+---
+이 명령은 로컬 컴퓨터의 프로세스를 열거하고 System.Diagnostics.Process 개체를 출력합니다. 이 명령은 프로세스 개체를 출력 파이프라인으로 하나씩 보냅니다. 이 명령은 명령줄에서 ID(프로세스 식별자) 또는 프로세스 이름 같은 매개 변수를 사용합니다. 이 명령은 지정한 ID 또는 ProcessName 매개 변수에 해당하는 system.diagnostics.process를 반환합니다.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>제외는 프로세스 이름에 대해서만 작동합니다.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>실행 중인 모든 프로세스를 반환합니다.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>svc로 시작하는 이름의 모든 프로세스를 반환합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessResources.ko.resx
new file mode 100644
index 00000000000..1d9460a9310
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ProcessResources.ko.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>사용자는 요청한 정보에 대한 액세스 권한이 없습니다.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>지정한 경로가 없습니다.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/ServiceResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ServiceResources.ko.resx
new file mode 100644
index 00000000000..0a90db7b1e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/ServiceResources.ko.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0}({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>서비스 이름이 '{0}'인 서비스를 찾을 수 없습니다.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>표시 이름이 '{1}'인 서비스를 찾을 수 없습니다.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>종속 서비스가 있으므로 서비스 '{1}({0})'을(를) 중지할 수 없습니다. Force 플래그가 설정된 경우에만 중지할 수 있습니다.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>종속 서비스가 있으므로 서비스 '{1}({0})'을(를) 중지할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 중지할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 시작할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 일시 중단할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>서비스 '{1}({0})'은(는) 일시 중단이나 다시 시작을 지원하지 않으므로 일시 중단할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 현재 실행 중이 아니므로 일시 중단할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 다시 시작할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>서비스 '{1}({0})'은(는) 일시 중단이나 재개를 지원하지 않으므로 다시 시작할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 현재 실행 중이 아니므로 다시 시작할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})' 설명을 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'의 자동(지연된 시작)을 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>{1} 오류로 인해 서비스 '{0}' 보안 설명자를 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 만들 수 없습니다.</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 만들어졌지만 {2} 오류로 인해 설명을 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 만들어졌지만 {2} 오류로 인해 StartupType '자동(지연된 시작)'을 구성할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>{2} 오류로 인해 서비스 '{1}({0})'을(를) 제거할 수 없습니다.</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>''{1}({0})'의 종속 서비스에 액세스할 수 없습니다.</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 시작되기를 기다리는 중...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 중지되기를 기다리는 중...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 일시 중단되기를 기다리는 중...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>서비스 '{1}({0})'이(가) 다시 시작되기를 기다리는 중...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>'{1}({0})' 서비스를 시작하지 못했습니다.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>서비스 '{1}({0})'을(를) 중지하지 못했습니다.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>서비스 '{1}({0})'을(를) 일시 중단하지 못했습니다.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>서비스 '{1}({0})'을(를) 다시 시작하지 못했습니다.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>{0} 오류로 인해 SCManager를 열 수 없습니다. PowerShell을 관리자 권한으로 실행한 다음 명령을 다시 실행하세요.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>시작 유형 '{0}'은(는) {1}에서 지원되지 않습니다.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>서비스 '{0}'의 속성 '{1}'을(를) 검색할 수 없음: {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestConnectionResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestConnectionResources.ko.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestConnectionResources.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestPathResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestPathResources.ko.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TestPathResources.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ko/TimeZoneResources.ko.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TimeZoneResources.ko.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ko/TimeZoneResources.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClearRecycleBinResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClearRecycleBinResources.pl.resx
new file mode 100644
index 00000000000..3efd0592ed4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClearRecycleBinResources.pl.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Cała zawartość kosza</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Cała zawartość kosza w przypadku dysku „{0}”</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Czyszczenie kosza</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>W przypadku dysku „{0}”</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>w przypadku wszystkich dysków</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Nie można odnaleźć dysku. Dysk o nazwie „{0}” nie istnieje. Uruchom polecenie cmdlet „{1}”, aby wyświetlić dostępne dyski stałe w systemie.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Nieprawidłowe dane wejściowe. Obsługiwane są następujące formaty: „{0}”, „{1}” lub „{2}”.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>Dysk o nazwie „{0}” nie jest dyskiem stałym i nie obsługuje kosza. Uruchom polecenie cmdlet „{1}”, aby wyświetlić dostępne dyski stałe w systemie.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClipboardResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClipboardResources.pl.resx
new file mode 100644
index 00000000000..ecced3ff668
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ClipboardResources.pl.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Ustaw ciąg „{0}” do schowka.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Dołącz ciąg „{0}” do schowka.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Ustaw plik „{0}” do schowka.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Dołącz plik „{0}” do schowka.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Ustaw pliki ({0}) w schowku.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Dołącz pliki ({0}) do schowka.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>W Schowku nie ma zawartości lub format zawartości jest niezgodny. Ustaw obiekt wejściowy na Schowek.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Schowek został wyczyszczony.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>Typ TextFormatType można łączyć tylko z formatem Text.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Nieprzetworzone można łączyć tylko z formatem Text lub FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Kod HTML można łączyć tylko z formatem tekstu HTML.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Na tej platformie jest obsługiwany tylko format tekstu.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Schowek nie jest obsługiwany na tej platformie.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>Przełącznik „-AsHtml” nie jest obsługiwany na tej platformie.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Parametr „-TextFormatType” obsługuje tylko element „Text” na tej platformie.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Parametr „-Path” nie jest obsługiwany na tej platformie.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Parametr „-LiteralPath” nie jest obsługiwany na tej platformie.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/CmdletizationResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/CmdletizationResources.pl.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/CmdletizationResources.pl.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerInfoResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerInfoResources.pl.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerInfoResources.pl.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerResources.pl.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ComputerResources.pl.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/HotFixResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/HotFixResources.pl.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/HotFixResources.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/NavigationResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/NavigationResources.pl.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/NavigationResources.pl.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessCommandHelpResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessCommandHelpResources.pl.resx
new file mode 100644
index 00000000000..8f507d59b76
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessCommandHelpResources.pl.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Wyświetla listę aktualnie uruchomionych procesów.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[pipeline input allowed]
+Rozdzielana przecinkami lista identyfikatorów procesów określających procesy do pobrania
+
+Nazwa -ProcessName
+[string[]]
+[pipeline input allowed]
+Rozdzielana przecinkami lista nazw procesów określających procesy do pobrania
+
+-Wyklucz nazwę
+[ArrayList]
+Rozdzielana przecinkami lista nazw procesów do wykluczenia z danych wyjściowych.
+
+---
+Polecenie wylicza procesy z komputera lokalnego i generuje obiekty System.Diagnostics.Process. Polecenie zapisuje obiekt procesu do potoku wyjściowego pojedynczo. Polecenie pobiera parametry, takie jak identyfikator (identyfikator procesu) lub nazwa procesu z wiersza polecenia. Polecenie zwraca odpowiedni element system.diagnostics.process dla podanego identyfikatora lub parametrów ProcessName.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>Wykluczenie działa tylko dla nazwy procesu.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Zwraca wszystkie uruchomione procesy.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Zwraca wszystkie procesy o nazwach rozpoczynających się od svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessResources.pl.resx
new file mode 100644
index 00000000000..5a90624db61
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ProcessResources.pl.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>Użytkownik nie ma dostępu do żądanych informacji.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>The path specified does not exist.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/ServiceResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ServiceResources.pl.resx
new file mode 100644
index 00000000000..70532713564
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/ServiceResources.pl.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Nie można odnaleźć żadnej usługi o nazwie „{0}”.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Nie można odnaleźć żadnej usługi o nazwie wyświetlanej „{1}”.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Nie można zatrzymać usługi „{1} ({0})”, ponieważ ma ona usługi zależne. Można ją zatrzymać tylko wtedy, gdy flaga Wymuś jest ustawiona.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Nie można zatrzymać usługi „{1} ({0})”, ponieważ ma ona usługi zależne.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Nie można zatrzymać usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Nie można uruchomić usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Nie można wstrzymać usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Nie można wstrzymać usługi „{1} ({0})”, ponieważ usługa nie obsługuje wstrzymania ani wznowienia.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Nie można wstrzymać usługi „{1} ({0})”, ponieważ nie jest ona obecnie uruchomiona.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Nie można wznowić usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Nie można wznowić usługi „{1} ({0})”, ponieważ usługa nie obsługuje wstrzymania ani wznowienia.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Nie można wznowić usługi „{1} ({0})”, ponieważ nie jest ona obecnie uruchomiona.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Nie można skonfigurować usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Nie można skonfigurować opisu usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Nie można skonfigurować automatycznej usługi „{1} ({0})” (opóźnione uruchomienie) z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Nie można skonfigurować deskryptora zabezpieczeń usługi „{0}” z powodu następującego błędu: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Nie można utworzyć usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Utworzono usługę „{1} ({0})”, ale jej opisu nie można skonfigurować z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Utworzono usługę „{1} ({0})”, ale nie można skonfigurować jej elementu StartupType „Automatic (Delayed Start)” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Nie można usunąć usługi „{1} ({0})” z powodu następującego błędu: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Nie można uzyskać dostępu do usług zależnych „{1} ({0})”</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Trwa oczekiwanie na uruchomienie usługi „{1} ({0})”...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Trwa oczekiwanie na zatrzymanie usługi „{1} ({0})”...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Trwa oczekiwanie na wstrzymanie usługi „{1} ({0})”...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Trwa oczekiwanie na wznowienie usługi {1} ({0})...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Nie można uruchomić usługi „{1} ({0})”.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Zatrzymanie usługi „{1} ({0})” nie powiodło się.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Wstrzymanie usługi „{1} ({0})” nie powiodło się.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Wznowienie usługi „{1} ({0})” nie powiodło się.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Nie można otworzyć programu SCManager z powodu następującego błędu: {0} Uruchom program PowerShell jako administrator i ponownie uruchom polecenie.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>Typ uruchomienia „{0}” nie jest obsługiwany przez {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Nie można pobrać właściwości „{1}” dla usługi „{0}”: {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestConnectionResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestConnectionResources.pl.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestConnectionResources.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestPathResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestPathResources.pl.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TestPathResources.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pl/TimeZoneResources.pl.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TimeZoneResources.pl.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pl/TimeZoneResources.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClearRecycleBinResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClearRecycleBinResources.pt-BR.resx
new file mode 100644
index 00000000000..8b1e4e60ca9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClearRecycleBinResources.pt-BR.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Todo o conteúdo da Lixeira</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Todo o conteúdo da Lixeira da unidade '{0}'</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Limpando a Lixeira</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>para a unidade '{0}'</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>para todas as unidades</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Não é possível localizar a unidade. Não existe uma unidade com o nome '{0}'. Execute o cmdlet '{1}' para ver as unidades fixas disponíveis no sistema.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Entrada inválida. Há suporte para os seguintes formatos: '{0}', '{1}' ou '{2}'.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>A unidade com o nome '{0}' não é uma unidade fixa e não dá suporte à Lixeira. Execute o cmdlet '{1}' para ver as unidades fixas disponíveis no sistema.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClipboardResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClipboardResources.pt-BR.resx
new file mode 100644
index 00000000000..9b1784cb8e9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ClipboardResources.pt-BR.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Definir a cadeia '{0}' na área de transferência.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Acrescentar a cadeia '{0}' à área de transferência.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Definir o arquivo '{0}' na área de transferência.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Acrescentar o arquivo '{0}' à área de transferência.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Definir {0} arquivos na área de transferência.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Acrescentar {0} arquivos à área de transferência.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>Não há conteúdo na Área de Transferência ou o formato do conteúdo não é compatível. Definir o objeto de entrada como Área de Transferência.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>A Área de Transferência foi limpa.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType só pode ser combinado com o formato Texto.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw só pode ser combinado com o formato Texto ou FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Html só pode ser combinado com o formato Texto Html.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Somente o formato Texto tem suporte nesta plataforma.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>A área de transferência não tem suporte nesta plataforma.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>O parâmetro '-AsHtml' não tem suporte nesta plataforma.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>O parâmetro '-TextFormatType' só dá suporte a 'Texto' nesta plataforma.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>O parâmetro '-Path' não tem suporte nesta plataforma.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>O parâmetro '-LiteralPath' não tem suporte nesta plataforma.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/CmdletizationResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/CmdletizationResources.pt-BR.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/CmdletizationResources.pt-BR.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerInfoResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerInfoResources.pt-BR.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerInfoResources.pt-BR.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerResources.pt-BR.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ComputerResources.pt-BR.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/HotFixResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/HotFixResources.pt-BR.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/HotFixResources.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/NavigationResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/NavigationResources.pt-BR.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/NavigationResources.pt-BR.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessCommandHelpResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessCommandHelpResources.pt-BR.resx
new file mode 100644
index 00000000000..d1e2e53a9cd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessCommandHelpResources.pt-BR.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Lista os processos em execução no momento.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[entrada de pipeline permitida]
+Lista separada por vírgulas de identificadores de processo que especificam os processos a serem obtidos
+
+-ProcessName nome
+[string[]]
+[entrada de pipeline permitida]
+Lista separada por vírgulas de nomes de processo que especificam os processos a serem obtidos
+
+-Exclude name
+[ArrayList]
+Lista separada por vírgulas de nomes de processo a serem excluídos da saída.
+
+---
+O comando enumera processos no computador local e produz objetos System.Diagnostics.Process. O comando grava o objeto de processo no pipeline de saída, um de cada vez. O comando aceita parâmetros como ID (Identificador de Processo) ou Nome do Processo na linha de comando. O comando retorna o system.diagnostics.process correspondente para os parâmetros ID ou ProcessName fornecidos.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>Excluir funciona somente para nome de processo.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Retorna todos os processos em execução.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Retorna todos os processos com nomes que começam com svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessResources.pt-BR.resx
new file mode 100644
index 00000000000..72ceb86aa65
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ProcessResources.pt-BR.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>O usuário não tem acesso às informações solicitadas.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>O caminho especificado não existe.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ServiceResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ServiceResources.pt-BR.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/ServiceResources.pt-BR.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestConnectionResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestConnectionResources.pt-BR.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestConnectionResources.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestPathResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestPathResources.pt-BR.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TestPathResources.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TimeZoneResources.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TimeZoneResources.pt-BR.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/pt-BR/TimeZoneResources.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClearRecycleBinResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClearRecycleBinResources.ru.resx
new file mode 100644
index 00000000000..35bbad73d6a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClearRecycleBinResources.ru.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Все содержимое корзины</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>Все содержимое корзины для диска {0}</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Очистка корзины</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>для диска {0}</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>для всех дисков</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Не удается найти диск. Диск с именем {0} не существует. Запустите командлет {1}, чтобы просмотреть доступные в системе фиксированные диски.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Недопустимые входные данные. Поддерживаются следующие форматы: {0}, {1} или {2}.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>Диск с именем {0} не является фиксированным диском и не поддерживает корзину. Запустите командлет {1}, чтобы просмотреть доступные в системе фиксированные диски.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClipboardResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClipboardResources.ru.resx
new file mode 100644
index 00000000000..59bf0775854
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ClipboardResources.ru.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>Установить строку "{0}" в буфер обмена.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>Добавить строку "{0}" в буфер обмена.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>Установить файл "{0}" в буфер обмена.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>Добавить файл "{0}" в буфер обмена.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>Установите файлы {0} в буфер обмена.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>Добавлять файлы ({0}) в буфер обмена.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>В буфере обмена нет содержимого, или формат содержимого несовместим. Установите входной объект в буфер обмена.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Буфер обмена очищен.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType можно объединить только с текстовым форматом.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Необработанные файлы можно сочетать только с текстовым форматом или форматом FileDropList.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>HTML можно сочетать только с текстовым HTML-форматом.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>На этой платформе поддерживается только текстовый формат.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Буфер обмена не поддерживается на этой платформе.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>Переключатель "-AsHtml" не поддерживается на этой платформе.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>Параметр "-TextFormatType" поддерживает только текст на этой платформе.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>Параметр "-Path" не поддерживается на этой платформе.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>Параметр "-LiteralPath" не поддерживается на этой платформе.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/CmdletizationResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/CmdletizationResources.ru.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/CmdletizationResources.ru.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerInfoResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerInfoResources.ru.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerInfoResources.ru.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerResources.ru.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ComputerResources.ru.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/HotFixResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/HotFixResources.ru.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/HotFixResources.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/NavigationResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/NavigationResources.ru.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/NavigationResources.ru.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessCommandHelpResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessCommandHelpResources.ru.resx
new file mode 100644
index 00000000000..25f5aa87254
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessCommandHelpResources.ru.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>Отображает список процессов, запущенных в данный момент.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+ИД: -Id
+[int[]]
+[входные данные конвейера разрешены]
+Список идентификаторов процессов, разделенных запятыми, указывает, какие процессы нужно получить
+
+Имя -ProcessName
+[string[]]
+[входные данные конвейера разрешены]
+Список имен процессов, разделенных запятыми, указывает, какие процессы нужно получить
+
+Имя -Exclude
+[ArrayList]
+Список имен процессов, разделенных запятыми, которые нужно исключить из вывода.
+
+---
+Команда перечисляет процессы на локальном компьютере и выводит объекты System.Diagnostics.Process. Команда записывает объекты процесса в выходной конвейер по одному. Команда принимает из командной строки такие параметры, как ID(Идентификатор процесса) или Имя процесса. Команда возвращает соответствующий System.Diagnostics.Process для указанных параметров ID или ProcessName.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>Исключение применяется только к имени процесса.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Возвращает все запущенные процессы.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Возвращает все процессы, имена которых начинаются с svc.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessResources.ru.resx
new file mode 100644
index 00000000000..5dbb82a04f4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ProcessResources.ru.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>У пользователя нет доступа к запрошенной информации.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>Указанный путь не существует.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/ServiceResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ServiceResources.ru.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/ServiceResources.ru.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestConnectionResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestConnectionResources.ru.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestConnectionResources.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestPathResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestPathResources.ru.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TestPathResources.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/ru/TimeZoneResources.ru.resx b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TimeZoneResources.ru.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/ru/TimeZoneResources.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClearRecycleBinResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClearRecycleBinResources.tr.resx
new file mode 100644
index 00000000000..621b26b07a6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClearRecycleBinResources.tr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>Geri Dönüşüm Kutusu’ndaki tüm içerikler</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>'{0}' sürücüsündeki Geri Dönüşüm Kutusu'nun tüm içeriği</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>Geri Dönüşüm Kutusu'nu Boşaltılıyor</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>'{0}' sürücüsü için</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>tüm sürücüler için</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Sürücü bulunamıyor. '{0}' adlı bir sürücü yok. Sistemde bulunan Sabit sürücüleri görmek için lütfen '{1}' cmdlet'ini çalıştırın.</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>Geçersiz giriş. Aşağıdaki biçimler desteklenmektedir: '{0}', '{1}' veya '{2}'.</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>'{0}' adlı sürücü, Sabit sürücü değildir ve Geri Dönüşüm Kutusu'nu desteklemez. Sistemde bulunan Sabit sürücüleri görmek için lütfen '{1}' cmdlet'ini çalıştırın.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClipboardResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClipboardResources.tr.resx
new file mode 100644
index 00000000000..f9ea4816390
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ClipboardResources.tr.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>'{0}' dizesini panoya ayarlayın.</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>'{0}' dizesini panoya ekleyin.</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>'{0}' dosyasını panoya ayarlayın.</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>'{0}' dosyasını panoya ekleyin.</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} dosyayı panoya ayarlayın.</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>{0} dosyayı panoya ekleyin.</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>Panoda içerik yok ya da içeriğin biçimi uyumlu değil. Giriş nesnesini Panoya ayarlayın.</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>Pano temizlendi.</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType yalnızca Text biçimiyle birleştirilebilir.</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw yalnızca Text veya FileDropList biçimiyle birleştirilebilir.</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Html yalnızca Html Text biçimiyle birleştirilebilir.</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>Bu platformda yalnızca Text biçimi desteklenir.</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>Pano bu platformda desteklenmiyor.</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>'-AsHtml' anahtarı bu platformda desteklenmiyor.</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>'-TextFormatType' parametresi bu platformda yalnızca 'Text' biçimini destekler.</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>'-Path' parametresi bu platformda desteklenmiyor.</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>'-LiteralPath' parametresi bu platformda desteklenmiyor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/CmdletizationResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/CmdletizationResources.tr.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/CmdletizationResources.tr.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerInfoResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerInfoResources.tr.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerInfoResources.tr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerResources.tr.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ComputerResources.tr.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/HotFixResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/HotFixResources.tr.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/HotFixResources.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/NavigationResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/NavigationResources.tr.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/NavigationResources.tr.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessCommandHelpResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessCommandHelpResources.tr.resx
new file mode 100644
index 00000000000..59607b3dba9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessCommandHelpResources.tr.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>O anda çalışan işlemleri listeler.</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id kimliği
+[int[]]
+[pipeline input allowed]
+Alınacak işlemleri belirten işlem kimliklerinin virgülle ayrılmış listesi
+
+-ProcessName adı
+[string[]]
+[pipeline input allowed]
+Alınacak işlemleri belirten işlem kimliklerinin virgülle ayrılmış listesi
+
+-Exclude adı
+[ArrayList]
+Çıkıştan hariç tutulacak işlem adlarının virgülle ayrılmış listesi.
+
+---
+Komut, yerel bilgisayardaki işlemleri listeler ve System.Diagnostics.Process nesnelerini çıktı olarak verir. Komut, işlem nesnelerini çıktı işlem hattına teker teker yazar. Komut, komut satırından ID (İşlem Kimliği) ya da Process Name gibi parametreleri alır. Komut, sağlanan ID veya ProcessName parametreleri için ilgili system.diagnostics.process nesnesini döndürür.</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>Hariç tutma yalnızca işlem adı için çalışır.</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>Tüm çalışan işlemleri döndürür.</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>Adları svc ile başlayan tüm işlemleri döndürür.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessResources.tr.resx
new file mode 100644
index 00000000000..38b23654fce
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ProcessResources.tr.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>Kullanıcının istenen bilgilere erişimi yok.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>The path specified does not exist.</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/ServiceResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ServiceResources.tr.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/ServiceResources.tr.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestConnectionResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestConnectionResources.tr.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestConnectionResources.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestPathResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestPathResources.tr.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TestPathResources.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/tr/TimeZoneResources.tr.resx b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TimeZoneResources.tr.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/tr/TimeZoneResources.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClearRecycleBinResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClearRecycleBinResources.zh-Hans.resx
new file mode 100644
index 00000000000..ee1eb3b15e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClearRecycleBinResources.zh-Hans.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>回收站的所有内容</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>“{0}”驱动器回收站的所有内容</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>正在清除回收站</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>对于“{0}”驱动器</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>对于所有驱动器</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>找不到驱动器。名为“{0}”的驱动器不存在。请运行“{1}”cmdlet 以查看系统中可用的固定驱动器。</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>输入无效。支持以下文件格式:“{0}”、“{1}”或“{2}”。</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>名为“{0}”的驱动器不是固定驱动器，不支持回收站。请运行“{1}”cmdlet 以查看系统中可用的固定驱动器。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClipboardResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClipboardResources.zh-Hans.resx
new file mode 100644
index 00000000000..4ed9d404583
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ClipboardResources.zh-Hans.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>将字符串 '{0}' 放入剪贴板。</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>将字符串 '{0}' 追加到剪贴板。</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>将文件“{0}”放入剪贴板。</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>将文件“{0}”追加到剪贴板。</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>将 {0} 个文件放入剪贴板。</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>将 {0} 个文件追加到剪贴板。</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>剪贴板中没有内容，或内容格式不兼容。请将输入对象放入剪贴板。</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>已清除剪贴板。</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType 只能与 Text 格式组合使用。</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw 只能与 Text 或 FileDropList 格式组合使用。</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Html 只能与 Html Text 格式组合使用。</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>此平台仅支持 Text 格式。</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>此平台不支持剪贴板。</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>此平台不支持 '-AsHtml' 开关。</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>'-TextFormatType' 参数在此平台上仅支持 'Text'。</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>此平台不支持 '-Path' 参数。</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>此平台上不支持 '-LiteralPath' 参数。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/CmdletizationResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/CmdletizationResources.zh-Hans.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/CmdletizationResources.zh-Hans.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerInfoResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerInfoResources.zh-Hans.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerInfoResources.zh-Hans.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerResources.zh-Hans.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ComputerResources.zh-Hans.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/HotFixResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/HotFixResources.zh-Hans.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/HotFixResources.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/NavigationResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/NavigationResources.zh-Hans.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/NavigationResources.zh-Hans.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessCommandHelpResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessCommandHelpResources.zh-Hans.resx
new file mode 100644
index 00000000000..22e570ecf07
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessCommandHelpResources.zh-Hans.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>列出当前正在运行的进程。</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id id
+[int[]]
+[pipeline input allowed]
+以逗号分隔的进程标识符列表，用于指定要获取的进程
+
+-ProcessName 名称
+[string[]]
+[pipeline input allowed]
+以逗号分隔的进程名称列表，用于指定要获取的进程
+
+-排除名称
+[ArrayList]
+要从输出中排除的进程名称的逗号分隔列表。
+
+---
+该命令枚举本地计算机上的进程，并输出 System.Diagnostics.Process 对象。该命令一次将一个进程对象写入输出管道。该命令从命令行获取 ID (进程标识符)或进程名称等参数。该命令返回与所提供的 ID 或 ProcessName 参数对应的 system.diagnostics.process。</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>排除仅适用于进程名称。</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>返回所有正在运行的进程。</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>返回所有名称以 svc. 开头的进程。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessResources.zh-Hans.resx
new file mode 100644
index 00000000000..de845754629
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ProcessResources.zh-Hans.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>用户无权访问请求的信息。</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>指定的路径不存在。</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ServiceResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ServiceResources.zh-Hans.resx
new file mode 100644
index 00000000000..5947a8d3126
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/ServiceResources.zh-Hans.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>找不到任何服务名称为 '{0}' 的服务。</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>找不到任何显示名称为 '{1}' 的服务。</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>无法停止服务 '{1} ({0})'，因为它具有依赖服务。只有设置强制标志时才能停止它。</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>无法停止服务 '{1} ({0})'，因为它具有依赖服务。</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>由于以下错误，无法停止服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>由于以下错误，无法启动服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>由于以下错误，无法暂停服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>无法暂停服务 '{1} ({0})'，因为该服务不支持暂停或恢复。</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>无法暂停服务 '{1} ({0})'，因为它当前未运行。</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>由于以下错误，无法恢复服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>无法恢复服务 '{1} ({0})'，因为该服务不支持暂停或恢复。</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>无法恢复服务 '{1} ({0})'，因为它当前未运行。</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>由于以下错误，无法配置服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>由于以下错误，无法配置服务 '{1} ({0})' 的说明: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>由于以下错误，无法配置服务 '{1} ({0})' 自动(延迟启动): {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>由于以下错误，无法配置服务 '{0}' 的安全描述符: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>由于以下错误，无法创建服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>已创建服务 '{1} ({0})'，但由于以下错误，无法配置其说明: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>已创建服务 '{1} ({0})'，但由于以下错误，无法配置其 StartupType“自动(延迟启动)”: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>由于以下错误，无法移除服务 '{1} ({0})': {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'无法访问 '{1} ({0})' 的依赖服务</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>正在等待服务 '{1} ({0})' 启动...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>正在等待服务 '{1} ({0})' 停止...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>正在等待服务 '{1} ({0})' 暂停...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>正在等待服务 '{1} ({0})' 恢复...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>未能启动服务 '{1} ({0})'。</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>服务 '{1} ({0})' 停止失败。</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>服务 '{1} ({0})' 暂停失败。</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>服务 '{1} ({0})' 恢复失败。</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>由于以下错误，未能打开 SCManager: {0}。请以管理员身份运行 PowerShell，然后再次运行你的命令。</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>启动类型 '{0}' 不受 {1} 支持。</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>无法检索服务 '{0}' 的属性 '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestConnectionResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestConnectionResources.zh-Hans.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestConnectionResources.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestPathResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestPathResources.zh-Hans.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TestPathResources.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TimeZoneResources.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TimeZoneResources.zh-Hans.resx
new file mode 100644
index 00000000000..e8c913c1372
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hans/TimeZoneResources.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>无法设置本地时区，因为名称 '{0}' 解析为多个条目。</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>在本地计算机上找不到时区名称 '{0}'。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClearRecycleBinResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClearRecycleBinResources.zh-Hant.resx
new file mode 100644
index 00000000000..906277c6f06
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClearRecycleBinResources.zh-Hant.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ClearRecycleBinContent" xml:space="preserve">
+    <value>資源回收筒中的所有內容</value>
+  </data>
+  <data name="ClearRecycleBinContentForDrive" xml:space="preserve">
+    <value>'{0}' 磁碟機之資源回收筒中的所有內容</value>
+  </data>
+  <data name="ClearRecycleBinProgressActivity" xml:space="preserve">
+    <value>正在清理資源回收筒</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionByDrive" xml:space="preserve">
+    <value>'{0}' 磁碟機</value>
+  </data>
+  <data name="ClearRecycleBinStatusDescriptionForAllDrives" xml:space="preserve">
+    <value>所有磁碟機</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>找不到磁碟機。沒有名為 '{0}' 的磁碟機。請執行 '{1}' Cmdlet，以查看系統中可用的固定磁碟機。</value>
+  </data>
+  <data name="InvalidDriveNameFormat" xml:space="preserve">
+    <value>輸入無效。支援下列格式: '{0}'、'{1}' 或 '{2}'。</value>
+  </data>
+  <data name="InvalidDriveType" xml:space="preserve">
+    <value>名稱為 '{0}' 的磁碟機不是固定磁碟機，而且不支援資源回收筒。請執行 '{1}' Cmdlet，以查看系統中可用的固定磁碟機。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClipboardResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClipboardResources.zh-Hant.resx
new file mode 100644
index 00000000000..ac99a2866b9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ClipboardResources.zh-Hant.resx
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetClipboardContent" xml:space="preserve">
+    <value>將字串 '{0}' 設定為剪貼簿。</value>
+  </data>
+  <data name="AppendClipboardContent" xml:space="preserve">
+    <value>將字串 '{0}' 附加至剪貼簿。</value>
+  </data>
+  <data name="SetSingleFileToClipboard" xml:space="preserve">
+    <value>將檔案 '{0}' 設定為剪貼簿。</value>
+  </data>
+  <data name="AppendSingleFileToClipboard" xml:space="preserve">
+    <value>將檔案 '{0}' 附加至剪貼簿。</value>
+  </data>
+  <data name="SetMultipleFilesToClipboard" xml:space="preserve">
+    <value>將 {0} 檔案設定為剪貼簿。</value>
+  </data>
+  <data name="AppendMultipleFilesToClipboard" xml:space="preserve">
+    <value>將 {0} 檔案附加至剪貼簿。</value>
+  </data>
+  <data name="NoAppendableClipboardContent" xml:space="preserve">
+    <value>剪貼簿中沒有任何內容，或內容格式不相容。將輸入物件設定為剪貼簿。</value>
+  </data>
+  <data name="ClipboardCleared" xml:space="preserve">
+    <value>剪貼簿已清除。</value>
+  </data>
+  <data name="InvalidTypeCombine" xml:space="preserve">
+    <value>TextFormatType 只能與文字格式結合。</value>
+  </data>
+  <data name="InvalidRawCombine" xml:space="preserve">
+    <value>Raw 只能與文字或 FileDropList 格式結合。</value>
+  </data>
+  <data name="InvalidHtmlCombine" xml:space="preserve">
+    <value>Html 只能與 Html 文字格式結合。</value>
+  </data>
+  <data name="UnsupportedFormat" xml:space="preserve">
+    <value>此平台僅支援文字格式。</value>
+  </data>
+  <data name="UnsupportedPlatform" xml:space="preserve">
+    <value>此平台不支援剪貼簿。</value>
+  </data>
+  <data name="AsHtmlUnsupported" xml:space="preserve">
+    <value>此平台不支援 '-AsHtml' 參數。</value>
+  </data>
+  <data name="TextFormatUnsupported" xml:space="preserve">
+    <value>'-TextformatType' 參數僅在此平台上支援 'Text'。</value>
+  </data>
+  <data name="PathUnsupported" xml:space="preserve">
+    <value>此平台不支援 '-Path' 參數。</value>
+  </data>
+  <data name="LiteralPathUnsupported" xml:space="preserve">
+    <value>此平台不支援 '-LiteralPath' 參數。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/CmdletizationResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/CmdletizationResources.zh-Hant.resx
new file mode 100644
index 00000000000..b97467043ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/CmdletizationResources.zh-Hant.resx
@@ -0,0 +1,230 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CimJob_InvalidClassName" xml:space="preserve">
+    <value>Cannot find the {0} class on the {1} CIM server.  Verify the value of the ClassName xml attribute in Cmdlet Definition XML and retry. Valid class name example: ROOT\cimv2\Win32_Process.</value>
+    <comment>{StrContains="ClassName"} {StrContains="ROOT\cimv2\Win32_Process"}
+{0} is a placeholder for a name of a (potentially misspelled) CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CimJob_MethodDescription" xml:space="preserve">
+    <value>CIM method {1} on the {0} CIM object</value>
+    <comment>{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimJob_GenericCimFailure" xml:space="preserve">
+    <value>Failed to run {1}.  {0}</value>
+    <comment>{0} is a placeholder for a generic CIM failure.  Example: 'Invalid namespace' or '9'
+{1} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="CimJob_VerboseExecutionMessage" xml:space="preserve">
+    <value>Running the following operation: {0}.</value>
+    <comment>{0} is a placeholder for a description of CIM operation.  This most likely comes from CimJob_MethodDescription or CimJob_QueryDescription</comment>
+  </data>
+  <data name="SessionBasedWrapper_ShouldProcessVsJobConflict" xml:space="preserve">
+    <value>CIM cmdlets do not support the {0} parameter together with the AsJob parameter.  Remove one of these parameters and retry.</value>
+    <comment>{StrContains="AsJob"}
+{0} is a placeholder for 'WhatIf' or 'Confirm' cmdlet parameters</comment>
+  </data>
+  <data name="CimJob_SafeQueryDescription" xml:space="preserve">
+    <value>CIM query for instances of the {0} class on the {1} CIM server: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_ErrorCodeFromMethod" xml:space="preserve">
+    <value>The CIM method returned the following error code: {0}</value>
+    <comment>{0} is a placeholder for an error code returned from a CIM method.  Example: 123</comment>
+  </data>
+  <data name="CimJob_SafeMethodDescription" xml:space="preserve">
+    <value>The {2} CIM method exposed by the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a CIM method name. Example: Create</comment>
+  </data>
+  <data name="CimConversion_CimIntrinsicValue" xml:space="preserve">
+    <value>CIM intrinsic type</value>
+  </data>
+  <data name="CimConversion_WqlQuery" xml:space="preserve">
+    <value>WQL literal</value>
+  </data>
+  <data name="CimJob_InvalidOutputParameterName" xml:space="preserve">
+    <value>Cannot find the {2} output parameter of the {1} method of the {0} CIM object.  Verify the value of the ParameterName attribute in Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="ParameterName"}
+{0} is a placeholder for a CIM path. Example: \\SERVER1\ROOT\cimv2:Win32_Process.Handle="11828"
+{1} is a placeholder for a name of a (potentially misspelled) CIM method.  Example: "Terminate".
+{2} is a placeholder for a name of a (potentially misspelled) method parameter.
+</comment>
+  </data>
+  <data name="CimJob_NotFound_ComplexCase" xml:space="preserve">
+    <value>No matching {1} objects found by {0}. Verify query parameters and retry.</value>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Equality" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' equal to '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+  <data name="CimJob_MismatchedTypeOfPropertyReturnedByQuery" xml:space="preserve">
+    <value>Type of {0} property ({1}) doesn't match the CIM type ({2}) associated with the type declared in Cmdlet Definition XML.</value>
+  </data>
+  <data name="CimJob_SafeAssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating associated instance of the {0} class on the {1} CIM server</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".</comment>
+  </data>
+  <data name="CimJob_AssociationDescription" xml:space="preserve">
+    <value>CIM query for enumerating instances of the {0} class on the {1} CIM server, that are associated with the following instance: {2}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "Win32_Process".
+{1} is a placeholder for a server name.  Example: "localhost".
+{2} is a placeholder for a string describing a CimInstance.  Example: "Win32_Process[Handle=123]".</comment>
+  </data>
+  <data name="CimJob_SleepAndRetryVerboseMessage" xml:space="preserve">
+    <value>The {0} command cannot complete, because the {1} server is currently busy.  The command will be automatically resumed in {2:f2} seconds.</value>
+    <comment>{0} is a placeholder for a command name.  Example: "Get-NetAdapter"
+{1} is a placeholder for a computer name.  Example: "localhost"
+{2} is a placeholder for a number of seconds.  Example: 1.23</comment>
+  </data>
+  <data name="CimJob_BrokenSession" xml:space="preserve">
+    <value>Cannot connect to CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message.</comment>
+  </data>
+  <data name="CimCmdletAdapter_DebugInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for debug messages.  Cmdlet operation will continue during the prompt.  Select a different action preference via -Debug switch or $DebugPreference variable, and try again.</value>
+    <comment>{StrContains="Debug"} {StrContains="DebugPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningInquire" xml:space="preserve">
+    <value>The cmdlet does not fully support the Inquire action for warnings.  Cmdlet operation will continue during the prompt.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Inquire"}</comment>
+  </data>
+  <data name="CimCmdletAdapter_WarningStop" xml:space="preserve">
+    <value>The cmdlet does not fully support the Stop action for warnings.  Cmdlet operation will be stopped with a delay.  Select a different action preference via -WarningAction parameter or $WarningPreference variable, and try again.</value>
+    <comment>{StrContains="WarningAction"} {StrContains="WarningPreference"} {StrContains="Stop"}</comment>
+  </data>
+  <data name="CimJob_ComputerNameConcatenationTemplate" xml:space="preserve">
+    <value>{0}: {1}</value>
+    <comment>{0} is a placeholder for a computername.  Example: "localhost"
+{1} is a placeholder for the original message.  Example: "Deleting managed resource"</comment>
+  </data>
+  <data name="CimCmdletAdapter_RemoteDcomDoesntSupportExtendedSemantics" xml:space="preserve">
+    <value>{0}: A CimSession to the CIM server uses the DCOM protocol, which does not support the {1} switch.</value>
+    <comment>{0} is a placeholder for a name of a computer
+{1} is a placeholder for 'Confirm' or 'WhatIf'</comment>
+  </data>
+  <data name="CimJob_NotFound_SimpleGranularCase_Wildcard" xml:space="preserve">
+    <value>No {2} objects found with property '{0}' matching '{1}'.  Verify the value of the property and retry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerInfoResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerInfoResources.zh-Hant.resx
new file mode 100644
index 00000000000..522b61cb43a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerInfoResources.zh-Hant.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LoadingOperationSystemInfo" xml:space="preserve">
+    <value>Loading operating system information</value>
+  </data>
+  <data name="LoadingHotPatchInfo" xml:space="preserve">
+    <value>Loading hot-patch information</value>
+  </data>
+  <data name="LoadingRegistryInfo" xml:space="preserve">
+    <value>Loading registry information</value>
+  </data>
+  <data name="LoadingBiosInfo" xml:space="preserve">
+    <value>Loading BIOS information</value>
+  </data>
+  <data name="LoadingMotherboardInfo" xml:space="preserve">
+    <value>Loading motherboard information</value>
+  </data>
+  <data name="LoadingComputerInfo" xml:space="preserve">
+    <value>Loading Computer information</value>
+  </data>
+  <data name="LoadingProcessorInfo" xml:space="preserve">
+    <value>Loading processor information</value>
+  </data>
+  <data name="LoadingNetworkAdapterInfo" xml:space="preserve">
+    <value>Loading network adapter information</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerResources.zh-Hant.resx
new file mode 100644
index 00000000000..0891a9bdd1a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ComputerResources.zh-Hant.resx
@@ -0,0 +1,393 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NotSupported" xml:space="preserve">
+    <value>This functionality is not supported on this operating system.</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>Could not enable drive {0}.</value>
+  </data>
+  <data name="InvalidDrive" xml:space="preserve">
+    <value>The command cannot turn on the restore computer infrastructure on the specified computer because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NoSystemDrive" xml:space="preserve">
+    <value>Include System Drive in the list of Drives.</value>
+  </data>
+  <data name="NotValidDrive" xml:space="preserve">
+    <value>The command cannot turn off the restore computer infrastructure because the supplied drive is not valid. Enter a valid drive in the Drive parameter, and then try again.</value>
+  </data>
+  <data name="NotDisabled" xml:space="preserve">
+    <value>The command cannot disable System Restore on the {0} drive. You may not have sufficient permissions to perform this operation.</value>
+  </data>
+  <data name="ServiceDisabled" xml:space="preserve">
+    <value>SystemRestore service is disabled.</value>
+  </data>
+  <data name="RestorePointNotCreated" xml:space="preserve">
+    <value>The system restore infrastructure cannot create a restore point.</value>
+  </data>
+  <data name="RestoreFailed" xml:space="preserve">
+    <value>The last attempt to restore the computer failed.</value>
+  </data>
+  <data name="RestoreSuccess" xml:space="preserve">
+    <value>The computer has been restored to the specified restore point.</value>
+  </data>
+  <data name="RestoreInterrupted" xml:space="preserve">
+    <value>The last attempt to restore the computer was interrupted.</value>
+  </data>
+  <data name="NoRestorePoint" xml:space="preserve">
+    <value>The command cannot locate the "{0}" restore point. Verify the "{0}" sequence number, and then try the command again.</value>
+  </data>
+  <data name="DoubleComputerName" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="RestartcomputerFailed" xml:space="preserve">
+    <value>Failed to restart the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="OperationFailed" xml:space="preserve">
+    <value>This command cannot be run on target computer('{1}') due to following error: {0}.{2}</value>
+  </data>
+  <data name="StopcomputerFailed" xml:space="preserve">
+    <value>Failed to stop the computer {0} with the following error message: {1}.</value>
+  </data>
+  <data name="InvalidRestorePoint" xml:space="preserve">
+    <value>The command cannot restore the computer because "{0}" has not been set as valid restore point. Enter a valid restore point in the RestorePoint parameter, and then try again.</value>
+  </data>
+  <data name="RestartNeeded" xml:space="preserve">
+    <value>The changes will take effect after you restart the computer {1}.</value>
+  </data>
+  <data name="RemoveComputerConfirm" xml:space="preserve">
+    <value>After you leave the domain, you will need to know the password of the local Administrator account to log onto this computer. Do you wish to continue?</value>
+  </data>
+  <data name="InvalidComputerNameFormat" xml:space="preserve">
+    <value>The following computer name is not valid: {0}. Make sure that the computer name is not longer than 255 characters, that it does not contain two or more consecutive dots, that it does not begin with a dot, that it does not contain only numeric characters, and that it does not contain any of the following characters:
+{{|}}~[\]^:;&lt;=&gt;?@!"#$%^`()+/,</value>
+  </data>
+  <data name="InvalidDomainNameFormat" xml:space="preserve">
+    <value>The domain in computer name '{0}' is not valid. Make sure that the domain exists and that the name is a valid domain name.</value>
+  </data>
+  <data name="ComputerNamesAreEqual" xml:space="preserve">
+    <value>The value specified for the NewComputerName parameter is the same as the value of the ComputerName parameter. Provide a different value for the NewComputerName parameter.</value>
+  </data>
+  <data name="ResetComputerMachinePassword" xml:space="preserve">
+    <value>"The password of the secure channel between '{0}' and '{1}' has been reset."</value>
+  </data>
+  <data name="SystemRestoreServiceDisabled" xml:space="preserve">
+    <value>This command cannot be run due to the following error: the service cannot be started because it is disabled or does not have enabled devices associated with it.</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating a system restore point ...</value>
+  </data>
+  <data name="ProgressStatusCreatingRestorePoint" xml:space="preserve">
+    <value>Creating a system restore point... {0}% Completed.</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="NetworkPathNotFound" xml:space="preserve">
+    <value>Try below options and Run the command again.
+1. Verify that the target computer('{0}') is running.
+2. Specify full computer name of the target computer('{0}').</value>
+  </data>
+  <data name="PrivilegeNotEnabled" xml:space="preserve">
+    <value>Failed to restart the computer {0}. Access rights {1} cannot be enabled for the calling process.</value>
+  </data>
+  <data name="RestartComputerAction" xml:space="preserve">
+    <value>Enable the {0} and restart the computer.</value>
+  </data>
+  <data name="LocalShutdownPrivilege" xml:space="preserve">
+    <value>Local shutdown access rights</value>
+  </data>
+  <data name="RemoteShutdownPrivilege" xml:space="preserve">
+    <value>Remote shutdown access rights</value>
+  </data>
+  <data name="CannotWaitLocalComputer" xml:space="preserve">
+    <value>Cannot wait for the local computer to restart. The local computer is ignored when the Wait parameter is specified.</value>
+  </data>
+  <data name="RestartComputerInvalidParameter" xml:space="preserve">
+    <value>The parameters Timeout, For, and Delay are valid only when the parameter Wait is specified.</value>
+  </data>
+  <data name="RestartMultipleComputersActivity" xml:space="preserve">
+    <value> Restarting computers...</value>
+  </data>
+  <data name="RestartSingleComputerActivity" xml:space="preserve">
+    <value> Restarting computer {0}</value>
+  </data>
+  <data name="WaitForMultipleComputers" xml:space="preserve">
+    <value>Completed: {0}/{1}.</value>
+  </data>
+  <data name="VerifyRebootStage" xml:space="preserve">
+    <value>Verifying that the computer has been restarted...</value>
+  </data>
+  <data name="WaitForPowerShell" xml:space="preserve">
+    <value>Waiting for PowerShell connectivity...</value>
+  </data>
+  <data name="WaitForRestartToBegin" xml:space="preserve">
+    <value>Waiting for the restart to begin...</value>
+  </data>
+  <data name="WaitForWinRM" xml:space="preserve">
+    <value>Waiting for WinRM connectivity...</value>
+  </data>
+  <data name="WaitForWMI" xml:space="preserve">
+    <value>Waiting for WMI connectivity...</value>
+  </data>
+  <data name="RestartComplete" xml:space="preserve">
+    <value>Restart is complete</value>
+  </data>
+  <data name="NoSupportForCombinedServiceType" xml:space="preserve">
+    <value>The combined service types are not supported for now.</value>
+  </data>
+  <data name="CannotResolveComputerName" xml:space="preserve">
+    <value>Computer name {0} cannot be resolved with the exception: {1}.</value>
+  </data>
+  <data name="IncorrectNewNameNumber" xml:space="preserve">
+    <value>The number of new names is not equal to the number of target computers.</value>
+  </data>
+  <data name="InvalidNewName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is not valid. The new computer name entered is not properly formatted. Standard names may contain letters (a-z, A-Z), numbers (0-9), and hyphens (-), but no spaces or periods (.). The name may not consist entirely of digits, and may not be longer than 63 characters.</value>
+  </data>
+  <data name="NewNameIsOldName" xml:space="preserve">
+    <value>Skip computer '{0}' with new name '{1}' because the new name is the same as the current name.</value>
+  </data>
+  <data name="ComputerNotInDomain" xml:space="preserve">
+    <value>Cannot remove computer '{0}' because it is not in a domain.</value>
+  </data>
+  <data name="FailToJoinWorkGroup" xml:space="preserve">
+    <value>Failed to join computer '{0}' to workgroup '{1}' with the following error message: {2}</value>
+  </data>
+  <data name="NetworkDown" xml:space="preserve">
+    <value>Cannot remove computer(s) from the domain because the local network is down.</value>
+  </data>
+  <data name="FailToRename" xml:space="preserve">
+    <value>Fail to rename computer '{0}' to '{1}' due to the following exception: {2}.</value>
+  </data>
+  <data name="AddComputerActionDomain" xml:space="preserve">
+    <value>Join in domain '{0}'</value>
+  </data>
+  <data name="AddComputerActionWorkgroup" xml:space="preserve">
+    <value>Join in workgroup '{0}'</value>
+  </data>
+  <data name="AddComputerToSameDomain" xml:space="preserve">
+    <value>Cannot add computer '{0}' to domain '{1}' because it is already in that domain.</value>
+  </data>
+  <data name="AddComputerToSameWorkgroup" xml:space="preserve">
+    <value>Cannot add computer '{0}' to workgroup '{1}' because it is already in that workgroup.</value>
+  </data>
+  <data name="FailToRenameAfterJoinWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' successfully joined the workgroup '{1}', but could not be renamed to '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToSwitchFromDomainToWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from the domain '{1}', but it failed to join the workgroup '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToUnjoinDomain" xml:space="preserve">
+    <value>Failed to unjoin computer '{0}' from domain '{1}' with the following error message: {2}.</value>
+  </data>
+  <data name="FailToConnectToComputer" xml:space="preserve">
+    <value>Cannot establish the WMI connection to the computer '{0}' with the following error message: {1}.</value>
+  </data>
+  <data name="FailToJoinDomainFromWorkgroup" xml:space="preserve">
+    <value>Computer '{0}' failed to join domain '{1}' from its current workgroup '{2}' with following error message: {3}.</value>
+  </data>
+  <data name="FailToJoinNewDomainAfterUnjoinOldDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully unjoined from domain '{1}', but failed to join the new domain '{2}' with the following error message: {3}.</value>
+  </data>
+  <data name="FailToRenameAfterJoinDomain" xml:space="preserve">
+    <value>Computer '{0}' was successfully joined to the new domain '{1}', but renaming it to '{2}' failed with the following error message: {3}.</value>
+  </data>
+  <data name="InvalidJoinOptions" xml:space="preserve">
+    <value>The flag '{0}' is valid only if flag '{1}' is specified.</value>
+  </data>
+  <data name="CannotRenameMultipleComputers" xml:space="preserve">
+    <value>Cannot rename multiple computers. The NewName parameter is valid only if a single computer is specified.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromDomain" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer in the domain {0}.</value>
+  </data>
+  <data name="CannotFindMachineAccountFromServer" xml:space="preserve">
+    <value>Cannot find the computer account for the local computer from the domain controller {0}.</value>
+  </data>
+  <data name="FailToGetDomainInformation" xml:space="preserve">
+    <value>Cannot get domain information about the local computer because of the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the computer account in the domain. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="FailToResetPasswordOnLocalMachine" xml:space="preserve">
+    <value>Resetting the secure channel password for the local computer failed with the following error message: {0}.</value>
+  </data>
+  <data name="NeedAdminPrivilegeToResetPassword" xml:space="preserve">
+    <value>Administrator rights are required to reset the secure channel password on the local computer. Access is denied.</value>
+  </data>
+  <data name="ResetComputerNotInDomain" xml:space="preserve">
+    <value>Cannot reset the secure channel password for the account of the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="TruncateNetBIOSName" xml:space="preserve">
+    <value>The NetBIOS name of the computer is limited to 15 bytes, which is 15 characters in this case. The NetBIOS name will be shortened to "{0}", which may cause conflicts under NetBIOS name resolution. Do you wish to continue?</value>
+  </data>
+  <data name="TruncateNetBIOSNameCaption" xml:space="preserve">
+    <value>NetBIOS name will be truncated.</value>
+  </data>
+  <data name="CannotResolveServerName" xml:space="preserve">
+    <value>The specified server name {0} cannot be resolved.</value>
+  </data>
+  <data name="CannotCreateRestorePointWarning" xml:space="preserve">
+    <value>A new system restore point cannot be created because one has already been created within the past {0} minutes. The frequency of restore point creation can be changed by creating the DWORD value 'SystemRestorePointCreationFrequency' under the registry key 'HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore'. The value of this registry key indicates the necessary time interval (in minutes) between two restore point creation. The default value is 1440 minutes (24 hours).</value>
+  </data>
+  <data name="CannotGetOperatingSystemObject" xml:space="preserve">
+    <value>The Win32_OperatingSystem WMI object cannot be retrieved.</value>
+  </data>
+  <data name="RestartComputerSkipped" xml:space="preserve">
+    <value>The computer {0} is skipped. Fail to retrieve its LastBootUpTime via the WMI service with the following error message: {1}.</value>
+  </data>
+  <data name="FailToTestSecureChannel" xml:space="preserve">
+    <value>Cannot verify the secure channel for the local computer. Operation failed with the following exception: {0}.</value>
+  </data>
+  <data name="RepairSecureChannelFail" xml:space="preserve">
+    <value>The attempt to repair the secure channel between the local computer and the domain {0} has failed.</value>
+  </data>
+  <data name="RepairSecureChannelSucceed" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} was successfully repaired.</value>
+  </data>
+  <data name="SecureChannelAlive" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is in good condition.</value>
+  </data>
+  <data name="SecureChannelBroken" xml:space="preserve">
+    <value>The secure channel between the local computer and the domain {0} is broken.</value>
+  </data>
+  <data name="TestComputerNotInDomain" xml:space="preserve">
+    <value>Cannot verify the secure channel password for the local computer. The local computer is not currently part of a domain.</value>
+  </data>
+  <data name="SystemRestoreNotSupported" xml:space="preserve">
+    <value>The operation cannot be performed because the system restore APIs are not supported on the Advanced RISC Machine (ARM) platform.</value>
+  </data>
+  <data name="TimeoutError" xml:space="preserve">
+    <value>The computer did not finish restarting within the specified time-out period.</value>
+  </data>
+  <data name="FailToRetrieveLastRestorePoint" xml:space="preserve">
+    <value>Cannot validate the time interval for restore point creation. It failed to retrieve the last restore point with the following error message: {0}.</value>
+  </data>
+  <data name="InvalidParameterSetAsJob" xml:space="preserve">
+    <value>The AsJob Parameter Set is not supported.</value>
+  </data>
+  <data name="InvalidParameterForCoreClr" xml:space="preserve">
+    <value>The {0} parameter is not supported for CoreCLR.</value>
+  </data>
+  <data name="ShutdownCommandNotFound" xml:space="preserve">
+    <value>The required native command 'shutdown' was not found.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/HotFixResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/HotFixResources.zh-Hant.resx
new file mode 100644
index 00000000000..3c6a66af83f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/HotFixResources.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoEntriesFound" xml:space="preserve">
+    <value>Cannot find the requested hotfix on the '{0}' computer. Verify the input and run the command again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/NavigationResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/NavigationResources.zh-Hant.resx
new file mode 100644
index 00000000000..4b676b786f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/NavigationResources.zh-Hant.resx
@@ -0,0 +1,192 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DeleteHasChildrenPrompt" xml:space="preserve">
+    <value>The specified path is a container that has child items. Do you want to delete this container and its child items?</value>
+  </data>
+  <data name="DeletePrompt" xml:space="preserve">
+    <value>Do you want to delete the specified item?</value>
+  </data>
+  <data name="CopyToExistingPrompt" xml:space="preserve">
+    <value>Cannot copy because the specified destination already exists. Do you want to overwrite the existing content?</value>
+  </data>
+  <data name="NewDriveConfirmAction" xml:space="preserve">
+    <value>New drive</value>
+  </data>
+  <data name="NewDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveConfirmAction" xml:space="preserve">
+    <value>Remove Drive</value>
+  </data>
+  <data name="RemoveDriveConfirmResourceTemplate" xml:space="preserve">
+    <value>Name: {0} Provider: {1} Root: {2}</value>
+  </data>
+  <data name="RemoveDriveInUse" xml:space="preserve">
+    <value>Cannot remove drive '{0}' because it is in use.</value>
+  </data>
+  <data name="RemoveItemWithChildren" xml:space="preserve">
+    <value>The item at {0} has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?</value>
+  </data>
+  <data name="RemoveItemInUse" xml:space="preserve">
+    <value>Cannot remove the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist, or has been filtered by the -Include or -Exclude parameter.</value>
+  </data>
+  <data name="SetContentAction" xml:space="preserve">
+    <value>Set Content</value>
+  </data>
+  <data name="SetContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="AddContentAction" xml:space="preserve">
+    <value>Add Content</value>
+  </data>
+  <data name="AddContentTarget" xml:space="preserve">
+    <value>Path: {0}</value>
+  </data>
+  <data name="MoveItemDoesntExist" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' does not exist.</value>
+  </data>
+  <data name="MoveItemInUse" xml:space="preserve">
+    <value>Cannot move item because the item at '{0}' is in use.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>Cannot rename because item at '{0}' does not exist.</value>
+  </data>
+  <data name="RenamedItemInUse" xml:space="preserve">
+    <value>Cannot rename the item at '{0}' because it is in use.</value>
+  </data>
+  <data name="ParsePathFormatError" xml:space="preserve">
+    <value>Cannot parse path because path '{0}' does not have a qualifier specified.</value>
+  </data>
+  <data name="CreateAction" xml:space="preserve">
+    <value>Begin</value>
+  </data>
+  <data name="RollbackAction" xml:space="preserve">
+    <value>Rollback</value>
+  </data>
+  <data name="CommitAction" xml:space="preserve">
+    <value>Commit</value>
+  </data>
+  <data name="TransactionResource" xml:space="preserve">
+    <value>Current transaction</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessCommandHelpResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessCommandHelpResources.zh-Hant.resx
new file mode 100644
index 00000000000..e6e0fbdd429
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessCommandHelpResources.zh-Hant.resx
@@ -0,0 +1,151 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetProcessShortDescription" xml:space="preserve">
+    <value>列出目前正在執行的處理序。</value>
+  </data>
+  <data name="GetProcessDetailedDescription" xml:space="preserve">
+    <value>
+-Id 識別碼
+[int[]]
+[pipeline input allowed]
+以逗號分隔的處理序識別碼清單，指定要取得的處理序
+
+-ProcessName 名稱
+[string[]]
+[pipeline input allowed]
+以逗號分隔的處理序名稱清單，指定要取得的處理序
+
+-Exclude 名稱
+[ArrayList]
+以逗號分隔的清單，列出要從輸出中排除的處理序名稱。
+
+---
+此命令會列舉本機電腦上的處理序，並輸出 System.Diagnostics.Process 物件。此命令會一次將一個處理序物件寫入輸出管線。此命令會從命令列接受 ID (處理序識別碼) 或 Process Name 等參數。此命令會針對所提供的 ID 或 ProcessName 參數，傳回對應的 system.diagnostics.process。</value>
+  </data>
+  <data name="GetProcessNote1" xml:space="preserve">
+    <value>排除僅適用於處理序名稱。</value>
+  </data>
+  <data name="GetProcessExample1Description" xml:space="preserve">
+    <value>傳回所有執行中的處理序。</value>
+  </data>
+  <data name="GetProcessExample2Description" xml:space="preserve">
+    <value>傳回名稱以 svc 開頭的所有處理序。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessResources.zh-Hant.resx
new file mode 100644
index 00000000000..ca9e9648689
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ProcessResources.zh-Hant.resx
@@ -0,0 +1,234 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoProcessFoundForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Verify the process name and call the cmdlet again.</value>
+  </data>
+  <data name="RecommendIdTagForGivenName" xml:space="preserve">
+    <value>Cannot find a process with the name "{0}". Try running with -Id to search by Id of processes.</value>
+  </data>
+  <data name="NoDebuggerFound" xml:space="preserve">
+    <value>This command cannot be run because the debugger cannot be attached to the process "{0} ({1})". Specify another process and Run your command.</value>
+  </data>
+  <data name="NoProcessFoundForGivenId" xml:space="preserve">
+    <value>Cannot find a process with the process identifier {1}.</value>
+  </data>
+  <data name="CouldNotStopProcess" xml:space="preserve">
+    <value>Cannot stop process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="ProcessNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="StartProcessTarget" xml:space="preserve">
+    <value>{0} {1}</value>
+  </data>
+  <data name="CouldNotEnumerateModules" xml:space="preserve">
+    <value>Cannot enumerate the modules of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateFileVer" xml:space="preserve">
+    <value>Cannot enumerate the file version information of the "{0}" process.</value>
+  </data>
+  <data name="CouldNotEnumerateModuleFileVer" xml:space="preserve">
+    <value>Cannot enumerate the modules and the file version information of the "{0}" process.</value>
+  </data>
+  <data name="ConfirmStopProcess" xml:space="preserve">
+    <value>Are you sure you want to perform the Stop-Process operation on the following item: {0}({1})?</value>
+  </data>
+  <data name="UseShell" xml:space="preserve">
+    <value>The specified path is not a valid win32 application. Try again with the UseShellExecute.</value>
+  </data>
+  <data name="ProcessIsNotTerminated" xml:space="preserve">
+    <value>This command stopped operation of "{0} ({1})" because of the following error: {2}.</value>
+  </data>
+  <data name="RedirectionParams" xml:space="preserve">
+    <value>This command cannot be run because Redirection parameters cannot be used with UseShellExecute parameter</value>
+  </data>
+  <data name="NoComputerNameWithFileVersion" xml:space="preserve">
+    <value>Exception getting "Modules" or "FileVersion": "This feature is not supported for remote computers.".</value>
+  </data>
+  <data name="DebuggerError" xml:space="preserve">
+    <value>This command cannot attach the debugger to the process due to {0} because no default debugger is available.</value>
+  </data>
+  <data name="WaitOnIdleProcess" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on 'System Idle' process. Specify another process and Run your command again.</value>
+  </data>
+  <data name="WaitOnItself" xml:space="preserve">
+    <value>This command stopped operation because it cannot wait on itself. Specify another process and Run your command again.</value>
+  </data>
+  <data name="ProcessNotTerminated" xml:space="preserve">
+    <value>This command stopped operation because process "{0} ({1})" is not stopped in the specified time-out.</value>
+  </data>
+  <data name="InvalidStartProcess" xml:space="preserve">
+    <value>This command cannot be run due to the error: {0}</value>
+  </data>
+  <data name="InvalidApplication" xml:space="preserve">
+    <value>This command cannot be run because the input "{0}" is not a valid Application.  Give a valid application and run your command again.</value>
+  </data>
+  <data name="InvalidInput" xml:space="preserve">
+    <value>This command cannot be run because either the parameter "{0}" has a value that is not valid or cannot be used with this command. Give a valid input and Run your command again.</value>
+  </data>
+  <data name="DuplicateEntry" xml:space="preserve">
+    <value>This command cannot be run because "{0}" and "{1}" are same. Give different inputs and Run your command again.</value>
+  </data>
+  <data name="CannotStarttheProcess" xml:space="preserve">
+    <value>This command cannot be run completely because the system cannot find all the information required.</value>
+  </data>
+  <data name="FailedToCreateProcessObject" xml:space="preserve">
+    <value>Failed to retrieve the new process handle: "{0}". The Process object outputted may have some properties and methods that do not work properly.</value>
+  </data>
+  <data name="InvalidUserError" xml:space="preserve">
+    <value>This command cannot be run due to error 1783. The possible cause of this error can be using of a non-existing user "{0}". Please give a valid user and run your command again.</value>
+  </data>
+  <data name="JoinNetworkFailed" xml:space="preserve">
+    <value>Error adding '{0}' to the network: {1}</value>
+  </data>
+  <data name="RemoveFailed" xml:space="preserve">
+    <value>Error removing '{0}' from the network: {1}</value>
+  </data>
+  <data name="RenameFailed" xml:space="preserve">
+    <value>Error renaming '{0}': {1}</value>
+  </data>
+  <data name="ContradictParametersSpecified" xml:space="preserve">
+    <value>Parameters "{0}" and "{1}" cannot be specified at the same time.</value>
+  </data>
+  <data name="CouldNotDebugProcess" xml:space="preserve">
+    <value>Cannot debug process "{0} ({1})" because of the following error: {2}</value>
+  </data>
+  <data name="AttachDebuggerReturnCode2" xml:space="preserve">
+    <value>使用者沒有要求之資訊的存取權。</value>
+  </data>
+  <data name="AttachDebuggerReturnCode21" xml:space="preserve">
+    <value>The specified parameter is not valid.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode3" xml:space="preserve">
+    <value>The user does not have sufficient privilege.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode8" xml:space="preserve">
+    <value>Unknown failure.</value>
+  </data>
+  <data name="AttachDebuggerReturnCode9" xml:space="preserve">
+    <value>指定的路徑不存在。</value>
+  </data>
+  <data name="ParameterNotSupported" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of Windows.</value>
+  </data>
+  <data name="ParameterNotSupportedOnPSEdition" xml:space="preserve">
+    <value>The parameter '{0}' is not supported for the cmdlet '{1}' on this edition of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ServiceResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ServiceResources.zh-Hant.resx
new file mode 100644
index 00000000000..383ee816da6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/ServiceResources.zh-Hant.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ServiceNameForConfirmation" xml:space="preserve">
+    <value>{0} ({1})</value>
+  </data>
+  <data name="NoServiceFoundForGivenName" xml:space="preserve">
+    <value>Cannot find any service with service name '{0}'.</value>
+  </data>
+  <data name="NoServiceFoundForGivenDisplayName" xml:space="preserve">
+    <value>Cannot find any service with display name '{1}'.</value>
+  </data>
+  <data name="ServiceHasDependentServices" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services. It can only be stopped if the Force flag is set.</value>
+  </data>
+  <data name="ServiceHasDependentServicesNoForce" xml:space="preserve">
+    <value>Cannot stop service '{1} ({0})' because it has dependent services.</value>
+  </data>
+  <data name="CouldNotStopService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be stopped due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotStartService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be started due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotSuspendServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be suspended because it is not currently running.</value>
+  </data>
+  <data name="CouldNotResumeService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotResumeServiceNotSupported" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because the service does not support being suspended or resumed.</value>
+  </data>
+  <data name="CouldNotResumeServiceNotRunning" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be resumed because it is not currently running.</value>
+  </data>
+  <data name="CouldNotSetService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' automatic (delayed start) cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotSetServiceSecurityDescriptorSddl" xml:space="preserve">
+    <value>Service '{0}' security descriptor cannot be configured due to the following error: {1}</value>
+  </data>
+  <data name="CouldNotNewService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be created due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDescription" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its description cannot be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotNewServiceDelayedAutoStart" xml:space="preserve">
+    <value>Service '{1} ({0})' was created, but its StartupType 'Automatic (Delayed Start)' could not be configured due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotRemoveService" xml:space="preserve">
+    <value>Service '{1} ({0})' cannot be removed due to the following error: {2}</value>
+  </data>
+  <data name="CouldNotAccessDependentServices" xml:space="preserve">
+    <value>'Cannot access dependent services of '{1} ({0})'</value>
+  </data>
+  <data name="StartingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to start...</value>
+  </data>
+  <data name="StoppingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to stop...</value>
+  </data>
+  <data name="SuspendingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to suspend...</value>
+  </data>
+  <data name="ResumingService" xml:space="preserve">
+    <value>Waiting for service '{1} ({0})' to resume...</value>
+  </data>
+  <data name="StartServiceFailed" xml:space="preserve">
+    <value>Failed to start service '{1} ({0})'.</value>
+  </data>
+  <data name="StopServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' stop failed.</value>
+  </data>
+  <data name="SuspendServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' suspend failed.</value>
+  </data>
+  <data name="ResumeServiceFailed" xml:space="preserve">
+    <value>Service '{1} ({0})' resume failed.</value>
+  </data>
+  <data name="FailToOpenServiceControlManager" xml:space="preserve">
+    <value>Failed to open SCManager due to the following error: {0}. Run PowerShell as admin and run your command again.</value>
+  </data>
+  <data name="UnsupportedStartupType" xml:space="preserve">
+    <value>The startup type '{0}' is not supported by {1}.</value>
+  </data>
+  <data name="CouldNotGetServiceProperty" xml:space="preserve">
+    <value>Could not retrieve property '{1}' for service '{0}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestConnectionResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestConnectionResources.zh-Hant.resx
new file mode 100644
index 00000000000..8f01dca03fd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestConnectionResources.zh-Hant.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoPingResult" xml:space="preserve">
+    <value>Testing connection to computer '{0}' failed: {1}</value>
+  </data>
+  <data name="CannotResolveTargetName" xml:space="preserve">
+    <value>Cannot resolve the target name.</value>
+  </data>
+  <data name="TargetAddressAbsent" xml:space="preserve">
+    <value>Target IPv4/IPv6 address absent.</value>
+  </data>
+  <data name="MaxHopsExceeded" xml:space="preserve">
+    <value>Cannot complete traceroute to destination '{0}': Number of hops required to reach host exceeds MaxHops ({1}).</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestPathResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestPathResources.zh-Hant.resx
new file mode 100644
index 00000000000..6587c518bcc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TestPathResources.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PathIsNullOrEmptyCollection" xml:space="preserve">
+    <value>The provided Path argument was null or an empty collection.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TimeZoneResources.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TimeZoneResources.zh-Hant.resx
new file mode 100644
index 00000000000..64826d6e253
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Management/resources/zh-Hant/TimeZoneResources.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleMatchingTimeZones" xml:space="preserve">
+    <value>Cannot set the local time zone because the name '{0}' resolves to multiple entries.</value>
+  </data>
+  <data name="TimeZoneNameNotFound" xml:space="preserve">
+    <value>The time zone name '{0}' was not found on the local computer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Management/singleshell/installer/MshManagementMshSnapin.cs b/src/Microsoft.PowerShell.Commands.Management/singleshell/installer/MshManagementMshSnapin.cs
deleted file mode 100644
index 0b0239053ea..00000000000
--- a/src/Microsoft.PowerShell.Commands.Management/singleshell/installer/MshManagementMshSnapin.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.ComponentModel;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// MshManagementMshSnapin (or MshManagementMshSnapinInstaller) is a class for facilitating registry
-    /// of necessary information for monad management mshsnapin.
-    ///
-    /// This class will be built with monad management dll.
-    /// </summary>
-    [RunInstaller(true)]
-    public sealed class PSManagementPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of this class.
-        /// </summary>
-        public PSManagementPSSnapIn()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// Get name of this mshsnapin.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return RegistryStrings.ManagementMshSnapinName;
-            }
-        }
-
-        /// <summary>
-        /// Get the default vendor string for this mshsnapin.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for vendor. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "ManagementMshSnapInResources,Vendor";
-            }
-        }
-
-        /// <summary>
-        /// Get the default description string for this mshsnapin.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This PSSnapIn contains general management cmdlets used to manage Windows components.";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for description. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "ManagementMshSnapInResources,Description";
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj b/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj
index e923f6aa810..9a7249ee575 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj
+++ b/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj
@@ -8,33 +8,19 @@
 
   <ItemGroup>
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
-    <PackageReference Include="Microsoft.PowerShell.MarkdownRender" Version="7.2.0-preview.2" />
+    <PackageReference Include="Markdig.Signed" Version="1.3.2" />
+    <PackageReference Include="Microsoft.PowerShell.MarkdownRender" Version="7.2.1" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
   <ItemGroup>
-    <Compile Remove="singleshell\installer\MshUtilityMshSnapin.cs" />
-    <Compile Remove="gen\UtilityMshSnapinResources.cs" />
-    <Compile Remove="gen\ConvertFromStringResources.cs" />
-    <Compile Remove="gen\ConvertStringResources.cs" />
-    <Compile Remove="gen\FlashExtractStrings.cs" />
-    <Compile Remove="gen\ImmutableStrings.cs" />
-
-    <EmbeddedResource Remove="resources\UtilityMshSnapinResources.resx" />
-    <EmbeddedResource Remove="resources\ConvertFromStringResources.resx" />
-    <EmbeddedResource Remove="resources\ConvertStringResources.resx" />
-    <EmbeddedResource Remove="resources\FlashExtractStrings.resx" />
-    <EmbeddedResource Remove="resources\ImmutableStrings.resx" />
+    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="5.6.0" />
+    <PackageReference Include="System.Drawing.Common" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="JsonSchema.Net" Version="7.4.0" />
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0-1.final" />
-    <PackageReference Include="System.Threading.AccessControl" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Drawing.Common" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="NJsonSchema" Version="10.4.0" />
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
   </ItemGroup>
-
 </Project>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs
index efb035b7785..4c7601e883f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddMember.cs
@@ -147,8 +147,8 @@ public SwitchParameter PassThru
         /// The name of the new NoteProperty member.
         /// </summary>
         [Parameter(Mandatory = true, Position = 0, ParameterSetName = NotePropertySingleMemberSet)]
-        [ValidateNotePropertyNameAttribute()]
-        [NotePropertyTransformationAttribute()]
+        [ValidateNotePropertyName]
+        [NotePropertyTransformation]
         [ValidateNotNullOrEmpty]
         public string NotePropertyName
         {
@@ -524,7 +524,10 @@ private void UpdateTypeNames()
             // Respect the type shortcut
             Type type;
             string typeNameInUse = _typeName;
-            if (LanguagePrimitives.TryConvertTo(_typeName, out type)) { typeNameInUse = type.FullName; }
+            if (LanguagePrimitives.TryConvertTo(_typeName, out type))
+            {
+                typeNameInUse = type.FullName;
+            }
 
             _inputObject.TypeNames.Insert(0, typeNameInUse);
         }
@@ -557,9 +560,8 @@ private sealed class ValidateNotePropertyNameAttribute : ValidateArgumentsAttrib
         {
             protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics)
             {
-                string notePropertyName = arguments as string;
                 PSMemberTypes memberType;
-                if (notePropertyName != null && LanguagePrimitives.TryConvertTo<PSMemberTypes>(notePropertyName, out memberType))
+                if (arguments is string notePropertyName && LanguagePrimitives.TryConvertTo<PSMemberTypes>(notePropertyName, out memberType))
                 {
                     switch (memberType)
                     {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs
index b86cadc1eff..7dc0a9c3556 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/AddType.cs
@@ -11,7 +11,9 @@
 using System.Linq;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Security;
 using System.Reflection;
+using System.Runtime.CompilerServices;
 using System.Runtime.Loader;
 using System.Security;
 using System.Text;
@@ -108,7 +110,7 @@ public string[] MemberDefinition
 
                 if (value != null)
                 {
-                    _sourceCode = string.Join("\n", value);
+                    _sourceCode = string.Join('\n', value);
                 }
             }
         }
@@ -127,7 +129,7 @@ public string[] MemberDefinition
         /// Any using statements required by the auto-generated type.
         /// </summary>
         [Parameter(ParameterSetName = FromMemberParameterSetName)]
-        [ValidateNotNull()]
+        [ValidateNotNull]
         [Alias("Using")]
         public string[] UsingNamespace { get; set; } = Array.Empty<string>();
 
@@ -299,7 +301,10 @@ public string[] ReferencedAssemblies
 
             set
             {
-                if (value != null) { _referencedAssemblies = value; }
+                if (value != null)
+                {
+                    _referencedAssemblies = value;
+                }
             }
         }
 
@@ -400,7 +405,7 @@ public string OutputAssembly
         /// <summary>
         /// Flag to pass the resulting types along.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter PassThru { get; set; }
 
         /// <summary>
@@ -549,15 +554,26 @@ private string GetUsingSet(Language language)
         /// </summary>
         protected override void BeginProcessing()
         {
-            // Prevent code compilation in ConstrainedLanguage mode
-            if (SessionState.LanguageMode == PSLanguageMode.ConstrainedLanguage)
+            // Prevent code compilation in ConstrainedLanguage mode, or NoLanguage mode under system lock down.
+            if (SessionState.LanguageMode == PSLanguageMode.ConstrainedLanguage ||
+                (SessionState.LanguageMode == PSLanguageMode.NoLanguage && SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce))
             {
-                ThrowTerminatingError(
-                    new ErrorRecord(
-                        new PSNotSupportedException(AddTypeStrings.CannotDefineNewType),
-                        nameof(AddTypeStrings.CannotDefineNewType),
-                        ErrorCategory.PermissionDenied,
-                        targetObject: null));
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    ThrowTerminatingError(
+                        new ErrorRecord(
+                            new PSNotSupportedException(AddTypeStrings.CannotDefineNewType),
+                            nameof(AddTypeStrings.CannotDefineNewType),
+                            ErrorCategory.PermissionDenied,
+                            targetObject: null));
+                }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Context,
+                    title: AddTypeStrings.AddTypeLogTitle,
+                    message: AddTypeStrings.AddTypeLogMessage,
+                    fqid: "AddTypeCmdletDisabled",
+                    dropIntoDebugger: true);
             }
 
             // 'ConsoleApplication' and 'WindowsApplication' types are currently not working in .NET Core
@@ -646,8 +662,8 @@ protected override void EndProcessing()
         // These dictionaries prevent reloading already loaded and unchanged code.
         // We don't worry about unbounded growing of the cache because in .Net Core 2.0 we can not unload assemblies.
         // TODO: review if we will be able to unload assemblies after migrating to .Net Core 2.1.
-        private static readonly HashSet<string> s_sourceTypesCache = new();
-        private static readonly Dictionary<int, Assembly> s_sourceAssemblyCache = new();
+        private static readonly ConcurrentDictionary<string, object> s_sourceTypesCache = new();
+        private static readonly ConcurrentDictionary<int, Assembly> s_sourceAssemblyCache = new();
 
         private static readonly string s_defaultSdkDirectory = Utils.DefaultPowerShellAppBase;
 
@@ -668,6 +684,7 @@ private void LoadAssemblies(IEnumerable<string> assemblies)
             {
                 // CoreCLR doesn't allow re-load TPA assemblies with different API (i.e. we load them by name and now want to load by path).
                 // LoadAssemblyHelper helps us avoid re-loading them, if they already loaded.
+                // codeql[cs/dll-injection-remote] - This is expected PowerShell behavior and integral to the purpose of the class. It allows users to load any C# dependencies they need for their PowerShell application and add other types they require.
                 Assembly assembly = LoadAssemblyHelper(assemblyName) ?? Assembly.LoadFrom(ResolveAssemblyName(assemblyName, false));
 
                 if (PassThru)
@@ -682,11 +699,10 @@ private void LoadAssemblies(IEnumerable<string> assemblies)
         /// </summary>
         private static IEnumerable<PortableExecutableReference> InitDefaultRefAssemblies()
         {
-            // Define number of reference assemblies distributed with PowerShell.
-            const int maxPowershellRefAssemblies = 160;
-
-            const int capacity = maxPowershellRefAssemblies + 1;
-            var defaultRefAssemblies = new List<PortableExecutableReference>(capacity);
+            // Default reference assemblies consist of .NET reference assemblies and the 'S.M.A' assembly.
+            // Today, there are 161 .NET reference assemblies, so the needed capacity is 162, but we use 200
+            // as the initial capacity to cover the possible increase of .NET reference assemblies in future.
+            var defaultRefAssemblies = new List<PortableExecutableReference>(capacity: 200);
 
             foreach (string file in Directory.EnumerateFiles(s_netcoreAppRefFolder, "*.dll", SearchOption.TopDirectoryOnly))
             {
@@ -696,11 +712,6 @@ private static IEnumerable<PortableExecutableReference> InitDefaultRefAssemblies
             // Add System.Management.Automation.dll
             defaultRefAssemblies.Add(MetadataReference.CreateFromFile(typeof(PSObject).Assembly.Location));
 
-            // We want to avoid reallocating the internal array, so we assert if the list capacity has increased.
-            Diagnostics.Assert(
-                defaultRefAssemblies.Capacity <= capacity,
-                $"defaultRefAssemblies was resized because of insufficient initial capacity! A capacity of {defaultRefAssemblies.Count} is required.");
-
             return defaultRefAssemblies;
         }
 
@@ -869,7 +880,10 @@ private IEnumerable<PortableExecutableReference> GetPortableExecutableReferences
                 var tempReferences = new List<PortableExecutableReference>(s_autoReferencedAssemblies.Value);
                 foreach (string assembly in ReferencedAssemblies)
                 {
-                    if (string.IsNullOrWhiteSpace(assembly)) { continue; }
+                    if (string.IsNullOrWhiteSpace(assembly))
+                    {
+                        continue;
+                    }
 
                     string resolvedAssemblyPath = ResolveAssemblyName(assembly, true);
 
@@ -894,7 +908,14 @@ private IEnumerable<PortableExecutableReference> GetPortableExecutableReferences
 
         private void WriteTypes(Assembly assembly)
         {
-            WriteObject(assembly.GetTypes(), true);
+            foreach (Type type in assembly.GetTypes())
+            {
+                // We only write out types that are not auto-generated by compiler.
+                if (type.GetCustomAttribute<CompilerGeneratedAttribute>() is null)
+                {
+                    WriteObject(type);
+                }
+            }
         }
 
         #endregion LoadAssembly
@@ -952,7 +973,7 @@ private CompilationOptions GetDefaultCompilationOptions()
             }
         }
 
-        private bool isSourceCodeUpdated(List<SyntaxTree> syntaxTrees, out Assembly assembly)
+        private bool IsSourceCodeUpdated(List<SyntaxTree> syntaxTrees, out Assembly assembly)
         {
             Diagnostics.Assert(syntaxTrees.Count != 0, "syntaxTrees should contains a source code.");
 
@@ -1037,7 +1058,7 @@ private void SourceCodeProcessing()
             {
                 // if the source code was already compiled and loaded and not changed
                 // we get the assembly from the cache.
-                if (isSourceCodeUpdated(syntaxTrees, out Assembly assembly))
+                if (IsSourceCodeUpdated(syntaxTrees, out Assembly assembly))
                 {
                     CompileToAssembly(syntaxTrees, compilationOptions, emitOptions);
                 }
@@ -1107,7 +1128,7 @@ private void CheckDuplicateTypes(Compilation compilation, out ConcurrentBag<stri
         }
 
         // Visit symbols in all namespaces and collect duplicates.
-        private class AllNamedTypeSymbolsVisitor : SymbolVisitor
+        private sealed class AllNamedTypeSymbolsVisitor : SymbolVisitor
         {
             public readonly ConcurrentBag<string> DuplicateSymbols = new();
             public readonly ConcurrentBag<string> UniqueSymbols = new();
@@ -1127,7 +1148,7 @@ public override void VisitNamedType(INamedTypeSymbol symbol)
                 // It is namespace-fully-qualified name
                 var symbolFullName = symbol.ToString();
 
-                if (s_sourceTypesCache.TryGetValue(symbolFullName, out _))
+                if (s_sourceTypesCache.ContainsKey(symbolFullName))
                 {
                     DuplicateSymbols.Add(symbolFullName);
                 }
@@ -1142,13 +1163,13 @@ private static void CacheNewTypes(ConcurrentBag<string> newTypes)
         {
             foreach (var typeName in newTypes)
             {
-                s_sourceTypesCache.Add(typeName);
+                s_sourceTypesCache.TryAdd(typeName, null);
             }
         }
 
         private void CacheAssembly(Assembly assembly)
         {
-            s_sourceAssemblyCache.Add(_syntaxTreesHash, assembly);
+            s_sourceAssemblyCache.TryAdd(_syntaxTreesHash, assembly);
         }
 
         private void DoEmitAndLoadAssembly(Compilation compilation, EmitOptions emitOptions)
@@ -1167,8 +1188,6 @@ private void DoEmitAndLoadAssembly(Compilation compilation, EmitOptions emitOpti
 
                     if (emitResult.Success)
                     {
-                        // TODO:  We could use Assembly.LoadFromStream() in future.
-                        // See https://github.com/dotnet/corefx/issues/26994
                         ms.Seek(0, SeekOrigin.Begin);
                         Assembly assembly = AssemblyLoadContext.Default.LoadFromStream(ms);
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs
index 83f78ce77a2..54a5b07cf5d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Compare-Object.cs
@@ -32,8 +32,8 @@ public sealed class CompareObjectCommand : ObjectCmdletBase
         /// <summary>
         /// </summary>
         [Parameter]
-        [ValidateRange(0, Int32.MaxValue)]
-        public int SyncWindow { get; set; } = Int32.MaxValue;
+        [ValidateRange(0, int.MaxValue)]
+        public int SyncWindow { get; set; } = int.MaxValue;
 
         /// <summary>
         /// </summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs
index 22c1e5ef46b..48bda12cd8a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-SddlString.cs
@@ -70,7 +70,7 @@ private static List<string> GetApplicableAccessRights(int accessMask, AccessRigh
             }
             else
             {
-                foreach (AccessRightTypeNames member in Enum.GetValues(typeof(AccessRightTypeNames)))
+                foreach (AccessRightTypeNames member in Enum.GetValues<AccessRightTypeNames>())
                 {
                     typesToExamine.Add(GetRealAccessRightType(member));
                 }
@@ -81,9 +81,8 @@ private static List<string> GetApplicableAccessRights(int accessMask, AccessRigh
                 foreach (string memberName in Enum.GetNames(accessRightType))
                 {
                     int memberValue = (int)Enum.Parse(accessRightType, memberName);
-                    if (!foundAccessRightValues.Contains(memberValue))
+                    if (foundAccessRightValues.Add(memberValue))
                     {
-                        foundAccessRightValues.Add(memberValue);
                         if ((accessMask & memberValue) == memberValue)
                         {
                             foundAccessRightNames.Add(memberName);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-StringData.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-StringData.cs
index 16bb4be012d..9272e85c05d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-StringData.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertFrom-StringData.cs
@@ -55,16 +55,14 @@ protected override void ProcessRecord()
                 return;
             }
 
-            string[] lines = _stringData.Split('\n');
+            string[] lines = _stringData.Split('\n', StringSplitOptions.TrimEntries);
 
             foreach (string line in lines)
             {
-                string s = line.Trim();
-
-                if (string.IsNullOrEmpty(s) || s[0] == '#')
+                if (string.IsNullOrEmpty(line) || line[0] == '#')
                     continue;
 
-                int index = s.IndexOf(Delimiter);
+                int index = line.IndexOf(Delimiter);
                 if (index <= 0)
                 {
                     throw PSTraceSource.NewInvalidOperationException(
@@ -72,7 +70,7 @@ protected override void ProcessRecord()
                         line);
                 }
 
-                string name = s.Substring(0, index);
+                string name = line.Substring(0, index);
                 name = name.Trim();
 
                 if (result.ContainsKey(name))
@@ -83,7 +81,7 @@ protected override void ProcessRecord()
                         name);
                 }
 
-                string value = s.Substring(index + 1);
+                string value = line.Substring(index + 1);
                 value = value.Trim();
 
                 value = Regex.Unescape(value);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs
index e72fc825e7c..41dd159a3ba 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ConvertTo-Html.cs
@@ -19,6 +19,7 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     [Cmdlet(VerbsData.ConvertTo, "Html", DefaultParameterSetName = "Page",
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096595", RemotingCapability = RemotingCapability.None)]
+    [OutputType(typeof(string))]
     public sealed
     class ConvertToHtmlCommand : PSCmdlet
     {
@@ -320,7 +321,7 @@ internal static class ConvertHTMLParameterDefinitionKeys
         /// <summary>
         /// This allows for @{e='foo';label='bar';alignment='center';width='20'}.
         /// </summary>
-        internal class ConvertHTMLExpressionParameterDefinition : CommandParameterDefinition
+        internal sealed class ConvertHTMLExpressionParameterDefinition : CommandParameterDefinition
         {
             protected override void SetEntries()
             {
@@ -343,10 +344,7 @@ private List<MshParameter> ProcessParameter(object[] properties)
             TerminatingErrorContext invocationContext = new(this);
             ParameterProcessor processor =
                 new(new ConvertHTMLExpressionParameterDefinition());
-            if (properties == null)
-            {
-                properties = new object[] { "*" };
-            }
+            properties ??= new object[] { "*" };
 
             return processor.ProcessParameters(properties, invocationContext);
         }
@@ -504,9 +502,8 @@ protected override void BeginProcessing()
                                     MshCommandRuntime mshCommandRuntime = this.CommandRuntime as MshCommandRuntime;
                                     string Message = StringUtil.Format(ConvertHTMLStrings.MetaPropertyNotFound, s, _meta[s]);
                                     WarningRecord record = new(Message);
-                                    InvocationInfo invocationInfo = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;
 
-                                    if (invocationInfo != null)
+                                    if (GetVariableValue(SpecialVariables.MyInvocation) is InvocationInfo invocationInfo)
                                     {
                                         record.SetInvocationInfo(invocationInfo);
                                     }
@@ -555,16 +552,14 @@ private void WriteColumns(List<MshParameter> mshParams)
             foreach (MshParameter p in mshParams)
             {
                 COLTag.Append("<col");
-                string width = p.GetEntry(ConvertHTMLParameterDefinitionKeys.WidthEntryKey) as string;
-                if (width != null)
+                if (p.GetEntry(ConvertHTMLParameterDefinitionKeys.WidthEntryKey) is string width)
                 {
                     COLTag.Append(" width = \"");
                     COLTag.Append(width);
                     COLTag.Append('"');
                 }
 
-                string alignment = p.GetEntry(ConvertHTMLParameterDefinitionKeys.AlignmentEntryKey) as string;
-                if (alignment != null)
+                if (p.GetEntry(ConvertHTMLParameterDefinitionKeys.AlignmentEntryKey) is string alignment)
                 {
                     COLTag.Append(" align = \"");
                     COLTag.Append(alignment);
@@ -610,8 +605,7 @@ private void WriteListEntry()
         private static void WritePropertyName(StringBuilder Listtag, MshParameter p)
         {
             // for writing the property name
-            string label = p.GetEntry(ConvertHTMLParameterDefinitionKeys.LabelEntryKey) as string;
-            if (label != null)
+            if (p.GetEntry(ConvertHTMLParameterDefinitionKeys.LabelEntryKey) is string label)
             {
                 Listtag.Append(label);
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Csv.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Csv.cs
index 9590cd7c771..d0b9f91e7f7 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Csv.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Csv.cs
@@ -8,7 +8,7 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// This class is used to parse CSV text.
     /// </summary>
-    internal class CSVHelper
+    internal sealed class CSVHelper
     {
         internal CSVHelper(char delimiter)
         {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
index cbd9d4c36b4..cb455417531 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Diagnostics.CodeAnalysis;
@@ -31,9 +32,9 @@ public abstract class BaseCsvWritingCommand : PSCmdlet
         [ValidateNotNull]
         public char Delimiter { get; set; }
 
-        ///<summary>
-        ///Culture switch for csv conversion
-        ///</summary>
+        /// <summary>
+        /// Culture switch for csv conversion
+        /// </summary>
         [Parameter(ParameterSetName = "UseCulture")]
         public SwitchParameter UseCulture { get; set; }
 
@@ -44,17 +45,19 @@ public abstract class BaseCsvWritingCommand : PSCmdlet
         public abstract PSObject InputObject { get; set; }
 
         /// <summary>
-        /// IncludeTypeInformation : The #TYPE line should be generated. Default is false. Cannot specify with NoTypeInformation.
+        /// IncludeTypeInformation : The #TYPE line should be generated. Default is false.
         /// </summary>
         [Parameter]
         [Alias("ITI")]
         public SwitchParameter IncludeTypeInformation { get; set; }
 
         /// <summary>
-        /// NoTypeInformation : The #TYPE line should not be generated. Default is true. Cannot specify with IncludeTypeInformation.
+        /// Gets or sets a value indicating whether to suppress the #TYPE line.
+        /// This parameter is obsolete and has no effect. It is retained for backward compatibility only.
         /// </summary>
         [Parameter(DontShow = true)]
         [Alias("NTI")]
+        [Obsolete("This parameter is obsolete and has no effect. The default behavior is to not include type information. Use -IncludeTypeInformation to include type information.")]
         public SwitchParameter NoTypeInformation { get; set; } = true;
 
         /// <summary>
@@ -71,6 +74,12 @@ public abstract class BaseCsvWritingCommand : PSCmdlet
         [Alias("UQ")]
         public QuoteKind UseQuotes { get; set; } = QuoteKind.Always;
 
+        /// <summary>
+        /// Gets or sets property that writes csv file with no headers.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter NoHeader { get; set; }
+
         #endregion Command Line Parameters
 
         /// <summary>
@@ -113,18 +122,6 @@ protected override void BeginProcessing()
                 this.ThrowTerminatingError(errorRecord);
             }
 
-            if (this.MyInvocation.BoundParameters.ContainsKey(nameof(IncludeTypeInformation)) && this.MyInvocation.BoundParameters.ContainsKey(nameof(NoTypeInformation)))
-            {
-                InvalidOperationException exception = new(CsvCommandStrings.CannotSpecifyIncludeTypeInformationAndNoTypeInformation);
-                ErrorRecord errorRecord = new(exception, "CannotSpecifyIncludeTypeInformationAndNoTypeInformation", ErrorCategory.InvalidData, null);
-                this.ThrowTerminatingError(errorRecord);
-            }
-
-            if (this.MyInvocation.BoundParameters.ContainsKey(nameof(IncludeTypeInformation)))
-            {
-                NoTypeInformation = !IncludeTypeInformation;
-            }
-
             Delimiter = ImportExportCSVHelper.SetDelimiter(this, ParameterSetName, Delimiter, UseCulture);
         }
     }
@@ -211,8 +208,8 @@ public string LiteralPath
         /// Gets or sets encoding optional flag.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -228,7 +225,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Gets or sets property that sets append parameter.
@@ -263,6 +260,14 @@ protected override void BeginProcessing()
                 this.ThrowTerminatingError(errorRecord);
             }
 
+            // Validate that Append and NoHeader are not specified together.
+            if (Append && NoHeader)
+            {
+                InvalidOperationException exception = new(CsvCommandStrings.CannotSpecifyAppendAndNoHeader);
+                ErrorRecord errorRecord = new(exception, "CannotSpecifyBothAppendAndNoHeader", ErrorCategory.InvalidData, null);
+                this.ThrowTerminatingError(errorRecord);
+            }
+
             _shouldProcess = ShouldProcess(Path);
             if (!_shouldProcess)
             {
@@ -300,9 +305,9 @@ protected override void ProcessRecord()
                 }
 
                 // write headers (row1: typename + row2: column names)
-                if (!_isActuallyAppending)
+                if (!_isActuallyAppending && !NoHeader.IsPresent)
                 {
-                    if (NoTypeInformation == false)
+                    if (IncludeTypeInformation)
                     {
                         WriteCsvLine(ExportCsvHelper.GetTypeString(InputObject));
                     }
@@ -313,7 +318,6 @@ protected override void ProcessRecord()
 
             string csv = _helper.ConvertPSObjectToCSV(InputObject, _propertyNames);
             WriteCsvLine(csv);
-            _sw.Flush();
         }
 
         /// <summary>
@@ -415,7 +419,6 @@ private void CleanUp()
             {
                 if (_sw != null)
                 {
-                    _sw.Flush();
                     _sw.Dispose();
                     _sw = null;
                 }
@@ -428,10 +431,7 @@ private void CleanUp()
                     _readOnlyFileInfo.Attributes |= FileAttributes.ReadOnly;
             }
 
-            if (_helper != null)
-            {
-                _helper.Dispose();
-            }
+            _helper?.Dispose();
         }
 
         private void ReconcilePreexistingPropertyNames()
@@ -588,9 +588,9 @@ public string[] LiteralPath
         [ValidateNotNull]
         public SwitchParameter UseCulture { get; set; }
 
-        ///<summary>
+        /// <summary>
         /// Gets or sets header property to customize the names.
-        ///</summary>
+        /// </summary>
         [Parameter(Mandatory = false)]
         [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
@@ -600,8 +600,8 @@ public string[] LiteralPath
         /// Gets or sets encoding optional flag.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -617,7 +617,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Avoid writing out duplicate warning messages when there are one or more unspecified names.
@@ -729,22 +729,30 @@ protected override void ProcessRecord()
             if (_propertyNames == null)
             {
                 _propertyNames = ExportCsvHelper.BuildPropertyNames(InputObject, _propertyNames);
-                if (NoTypeInformation == false)
+
+                if (!NoHeader.IsPresent)
                 {
-                    WriteCsvLine(ExportCsvHelper.GetTypeString(InputObject));
-                }
+                    if (IncludeTypeInformation)
+                    {
+                        WriteCsvLine(ExportCsvHelper.GetTypeString(InputObject));
+                    }
 
-                // Write property information
-                string properties = _helper.ConvertPropertyNamesCSV(_propertyNames);
-                if (!properties.Equals(string.Empty))
-                    WriteCsvLine(properties);
+                    // Write property information
+                    string properties = _helper.ConvertPropertyNamesCSV(_propertyNames);
+                    if (!properties.Equals(string.Empty))
+                    {
+                        WriteCsvLine(properties);
+                    }
+                }
             }
 
             string csv = _helper.ConvertPSObjectToCSV(InputObject, _propertyNames);
 
-            // write to the console
+            // Write to the output stream
             if (csv != string.Empty)
+            {
                 WriteCsvLine(csv);
+            }
         }
 
         #endregion Overrides
@@ -783,9 +791,9 @@ public sealed class ConvertFromCsvCommand : PSCmdlet
         [ValidateNotNullOrEmpty]
         public char Delimiter { get; set; }
 
-        ///<summary>
-        ///Culture switch for csv conversion
-        ///</summary>
+        /// <summary>
+        /// Culture switch for csv conversion
+        /// </summary>
         [Parameter(ParameterSetName = "UseCulture", Mandatory = true)]
         [ValidateNotNull]
         [ValidateNotNullOrEmpty]
@@ -800,9 +808,9 @@ public sealed class ConvertFromCsvCommand : PSCmdlet
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public PSObject[] InputObject { get; set; }
 
-        ///<summary>
+        /// <summary>
         /// Gets or sets header property to customize the names.
-        ///</summary>
+        /// </summary>
         [Parameter(Mandatory = false)]
         [ValidateNotNull]
         [ValidateNotNullOrEmpty]
@@ -875,7 +883,7 @@ protected override void ProcessRecord()
     /// <summary>
     /// Helper class for Export-Csv and ConvertTo-Csv.
     /// </summary>
-    internal class ExportCsvHelper : IDisposable
+    internal sealed class ExportCsvHelper : IDisposable
     {
         private readonly char _delimiter;
         private readonly BaseCsvWritingCommand.QuoteKind _quoteKind;
@@ -908,16 +916,36 @@ internal static IList<string> BuildPropertyNames(PSObject source, IList<string>
                 throw new InvalidOperationException(CsvCommandStrings.BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance);
             }
 
-            // serialize only Extended and Adapted properties..
-            PSMemberInfoCollection<PSPropertyInfo> srcPropertiesToSearch =
-                new PSMemberInfoIntegratingCollection<PSPropertyInfo>(
+            propertyNames = new Collection<string>();
+            if (source.BaseObject is IDictionary dictionary)
+            {
+                foreach (var key in dictionary.Keys)
+                {
+                    propertyNames.Add(LanguagePrimitives.ConvertTo<string>(key));
+                }
+
+                // Add additional extended members added to the dictionary object, if any
+                var propertiesToSearch = new PSMemberInfoIntegratingCollection<PSPropertyInfo>(
                     source,
-                    PSObject.GetPropertyCollection(PSMemberViewTypes.Extended | PSMemberViewTypes.Adapted));
+                    PSObject.GetPropertyCollection(PSMemberViewTypes.Extended));
 
-            propertyNames = new Collection<string>();
-            foreach (PSPropertyInfo prop in srcPropertiesToSearch)
+                foreach (var prop in propertiesToSearch)
+                {
+                    propertyNames.Add(prop.Name);
+                }
+            }
+            else
             {
-                propertyNames.Add(prop.Name);
+                // serialize only Extended and Adapted properties.
+                PSMemberInfoCollection<PSPropertyInfo> srcPropertiesToSearch =
+                    new PSMemberInfoIntegratingCollection<PSPropertyInfo>(
+                        source,
+                        PSObject.GetPropertyCollection(PSMemberViewTypes.Extended | PSMemberViewTypes.Adapted));
+
+                foreach (PSPropertyInfo prop in srcPropertiesToSearch)
+                {
+                    propertyNames.Add(prop.Name);
+                }
             }
 
             return propertyNames;
@@ -929,10 +957,7 @@ internal static IList<string> BuildPropertyNames(PSObject source, IList<string>
         /// <returns>Converted string.</returns>
         internal string ConvertPropertyNamesCSV(IList<string> propertyNames)
         {
-            if (propertyNames == null)
-            {
-                throw new ArgumentNullException(nameof(propertyNames));
-            }
+            ArgumentNullException.ThrowIfNull(propertyNames);
 
             _outputString.Clear();
             bool first = true;
@@ -967,7 +992,8 @@ internal string ConvertPropertyNamesCSV(IList<string> propertyNames)
                             AppendStringWithEscapeAlways(_outputString, propertyName);
                             break;
                         case BaseCsvWritingCommand.QuoteKind.AsNeeded:
-                            if (propertyName.Contains(_delimiter))
+
+                            if (propertyName.AsSpan().IndexOfAny(_delimiter, '\n', '"') != -1)
                             {
                                 AppendStringWithEscapeAlways(_outputString, propertyName);
                             }
@@ -995,10 +1021,7 @@ internal string ConvertPropertyNamesCSV(IList<string> propertyNames)
         /// <returns></returns>
         internal string ConvertPSObjectToCSV(PSObject mshObject, IList<string> propertyNames)
         {
-            if (propertyNames == null)
-            {
-                throw new ArgumentNullException(nameof(propertyNames));
-            }
+            ArgumentNullException.ThrowIfNull(propertyNames);
 
             _outputString.Clear();
             bool first = true;
@@ -1014,11 +1037,26 @@ internal string ConvertPSObjectToCSV(PSObject mshObject, IList<string> propertyN
                     _outputString.Append(_delimiter);
                 }
 
-                // If property is not present, assume value is null and skip it.
-                if (mshObject.Properties[propertyName] is PSPropertyInfo property)
+                string value = null;
+                if (mshObject.BaseObject is IDictionary dictionary)
                 {
-                    var value = GetToStringValueForProperty(property);
+                    if (dictionary.Contains(propertyName))
+                    {
+                        value = dictionary[propertyName]?.ToString();
+                    }
+                    else if (mshObject.Properties[propertyName] is PSPropertyInfo property)
+                    {
+                        value = GetToStringValueForProperty(property);
+                    }
+                }
+                else if (mshObject.Properties[propertyName] is PSPropertyInfo property)
+                {
+                    value = GetToStringValueForProperty(property);
+                }
 
+                // If value is null, assume property is not present and skip it.
+                if (value != null)
+                {
                     if (_quoteFields != null)
                     {
                         if (_quoteFields.TryGetValue(propertyName, out _))
@@ -1038,7 +1076,7 @@ internal string ConvertPSObjectToCSV(PSObject mshObject, IList<string> propertyN
                                 AppendStringWithEscapeAlways(_outputString, value);
                                 break;
                             case BaseCsvWritingCommand.QuoteKind.AsNeeded:
-                                if (value != null && value.Contains(_delimiter))
+                                if (value != null && value.AsSpan().IndexOfAny(_delimiter, '\n', '"') != -1)
                                 {
                                     AppendStringWithEscapeAlways(_outputString, value);
                                 }
@@ -1069,10 +1107,7 @@ internal string ConvertPSObjectToCSV(PSObject mshObject, IList<string> propertyN
         /// <returns>ToString() value.</returns>
         internal static string GetToStringValueForProperty(PSPropertyInfo property)
         {
-            if (property == null)
-            {
-                throw new ArgumentNullException(nameof(property));
-            }
+            ArgumentNullException.ThrowIfNull(property);
 
             string value = null;
             try
@@ -1122,7 +1157,7 @@ internal static string GetTypeString(PSObject source)
                     temp = temp.Substring(4);
                 }
 
-                type = string.Format(System.Globalization.CultureInfo.InvariantCulture, "#TYPE {0}", temp);
+                type = string.Create(System.Globalization.CultureInfo.InvariantCulture, $"#TYPE {temp}");
             }
 
             return type;
@@ -1187,7 +1222,7 @@ public void Dispose()
     /// <summary>
     /// Helper class to import single CSV file.
     /// </summary>
-    internal class ImportCsvHelper
+    internal sealed class ImportCsvHelper
     {
         #region constructor
 
@@ -1234,15 +1269,8 @@ internal class ImportCsvHelper
 
         internal ImportCsvHelper(PSCmdlet cmdlet, char delimiter, IList<string> header, string typeName, StreamReader streamReader)
         {
-            if (cmdlet == null)
-            {
-                throw new ArgumentNullException(nameof(cmdlet));
-            }
-
-            if (streamReader == null)
-            {
-                throw new ArgumentNullException(nameof(streamReader));
-            }
+            ArgumentNullException.ThrowIfNull(cmdlet);
+            ArgumentNullException.ThrowIfNull(streamReader);
 
             _cmdlet = cmdlet;
             _delimiter = delimiter;
@@ -1389,11 +1417,7 @@ private static void ValidatePropertyNames(IList<string> names)
                     {
                         if (!string.IsNullOrEmpty(currentHeader))
                         {
-                            if (!headers.Contains(currentHeader))
-                            {
-                                headers.Add(currentHeader);
-                            }
-                            else
+                            if (!headers.Add(currentHeader))
                             {
                                 // throw a terminating error as there are duplicate headers in the input.
                                 string memberAlreadyPresentMsg =
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CustomSerialization.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CustomSerialization.cs
index 6ad8b02a558..6d224d29007 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CustomSerialization.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CustomSerialization.cs
@@ -14,7 +14,7 @@ namespace System.Management.Automation
     /// <summary>
     /// This class provides functionality for serializing a PSObject.
     /// </summary>
-    internal class CustomSerialization
+    internal sealed class CustomSerialization
     {
         #region constructor
         /// <summary>
@@ -170,10 +170,7 @@ internal void DoneAsStream()
         internal void Stop()
         {
             CustomInternalSerializer serializer = _serializer;
-            if (serializer != null)
-            {
-                serializer.Stop();
-            }
+            serializer?.Stop();
         }
 
         #endregion
@@ -182,8 +179,7 @@ internal void Stop()
     /// <summary>
     /// This internal helper class provides methods for serializing mshObject.
     /// </summary>
-    internal class
-    CustomInternalSerializer
+    internal sealed class CustomInternalSerializer
     {
         #region constructor
 
@@ -341,8 +337,7 @@ private bool HandlePrimitiveKnownTypePSObject(object source, string property, in
             Dbg.Assert(source != null, "caller should validate the parameter");
 
             bool sourceHandled = false;
-            PSObject moSource = source as PSObject;
-            if (moSource != null && !moSource.ImmediateBaseObjectIsEmpty)
+            if (source is PSObject moSource && !moSource.ImmediateBaseObjectIsEmpty)
             {
                 // Check if baseObject is primitive known type
                 object baseObject = moSource.ImmediateBaseObject;
@@ -709,7 +704,7 @@ private void WriteMemberInfoCollection(
                     continue;
                 }
 
-                if (!(info is PSPropertyInfo property))
+                if (info is not PSPropertyInfo property)
                 {
                     continue;
                 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs
index aa370c12ba1..756afff13de 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/DebugRunspaceCommand.cs
@@ -103,7 +103,6 @@ public Guid InstanceId
         /// <summary>
         /// Gets or sets a flag that tells PowerShell to automatically perform a BreakAll when the debugger is attached to the remote target.
         /// </summary>
-        [Experimental("Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace", ExperimentAction.Show)]
         [Parameter]
         public SwitchParameter BreakAll { get; set; }
 
@@ -237,10 +236,7 @@ protected override void StopProcessing()
 
             // Unblock the data collection.
             PSDataCollection<PSStreamObject> debugCollection = _debugBlockingCollection;
-            if (debugCollection != null)
-            {
-                debugCollection.Complete();
-            }
+            debugCollection?.Complete();
 
             // Unblock any new command wait.
             _newRunningScriptEvent.Set();
@@ -269,12 +265,24 @@ private void WaitAndReceiveRunspaceOutput()
                 // Set up host script debugger to debug the runspace.
                 _debugger.DebugRunspace(_runspace, breakAll: BreakAll);
 
+                _runspace.IsRemoteDebuggerAttached = true;
+                _runspace.Events?.GenerateEvent(
+                    PSEngineEvent.OnDebugAttach,
+                    sender: null,
+                    args: Array.Empty<object>(),
+                    extraData: null,
+                    processInCurrentThread: true,
+                    waitForCompletionInCurrentThread: false);
+
                 while (_debugging)
                 {
                     // Wait for running script.
                     _newRunningScriptEvent.Wait();
 
-                    if (!_debugging) { return; }
+                    if (!_debugging)
+                    {
+                        return;
+                    }
 
                     AddDataEventHandlers();
 
@@ -308,6 +316,7 @@ private void WaitAndReceiveRunspaceOutput()
             {
                 _runspace.AvailabilityChanged -= HandleRunspaceAvailabilityChanged;
                 _debugger.NestedDebuggingCancelledEvent -= HandleDebuggerNestedDebuggingCancelledEvent;
+                _runspace.IsRemoteDebuggerAttached = false;
                 _debugger.StopDebugRunspace(_runspace);
                 _newRunningScriptEvent.Dispose();
             }
@@ -335,9 +344,8 @@ private void HostWriteLine(string line)
         private void AddDataEventHandlers()
         {
             // Create new collection objects.
-            if (_debugBlockingCollection != null) { _debugBlockingCollection.Dispose(); }
-
-            if (_debugAccumulateCollection != null) { _debugAccumulateCollection.Dispose(); }
+            _debugBlockingCollection?.Dispose();
+            _debugAccumulateCollection?.Dispose();
 
             _debugBlockingCollection = new PSDataCollection<PSStreamObject>();
             _debugBlockingCollection.BlockingEnumerator = true;
@@ -409,8 +417,7 @@ private void RemoveDataEventHandlers()
         private void HandleRunspaceAvailabilityChanged(object sender, RunspaceAvailabilityEventArgs e)
         {
             // Ignore nested commands.
-            LocalRunspace localRunspace = sender as LocalRunspace;
-            if (localRunspace != null)
+            if (sender is LocalRunspace localRunspace)
             {
                 var basePowerShell = localRunspace.GetCurrentBasePowerShell();
                 if ((basePowerShell != null) && (basePowerShell.IsNested))
@@ -440,8 +447,7 @@ private void HandleDebuggerNestedDebuggingCancelledEvent(object sender, EventArg
 
         private void HandlePipelineOutputDataReady(object sender, EventArgs e)
         {
-            PipelineReader<PSObject> reader = sender as PipelineReader<PSObject>;
-            if (reader != null && reader.IsOpen)
+            if (sender is PipelineReader<PSObject> reader && reader.IsOpen)
             {
                 WritePipelineCollection(reader.NonBlockingRead(), PSStreamObjectType.Output);
             }
@@ -449,8 +455,7 @@ private void HandlePipelineOutputDataReady(object sender, EventArgs e)
 
         private void HandlePipelineErrorDataReady(object sender, EventArgs e)
         {
-            PipelineReader<object> reader = sender as PipelineReader<object>;
-            if (reader != null && reader.IsOpen)
+            if (sender is PipelineReader<object> reader && reader.IsOpen)
             {
                 WritePipelineCollection(reader.NonBlockingRead(), PSStreamObjectType.Error);
             }
@@ -508,7 +513,10 @@ private void HandlePowerShellPStreamItem(PSStreamObject streamItem)
 
         private void AddToDebugBlockingCollection(PSStreamObject streamItem)
         {
-            if (!_debugBlockingCollection.IsOpen) { return; }
+            if (!_debugBlockingCollection.IsOpen)
+            {
+                return;
+            }
 
             if (streamItem != null)
             {
@@ -537,8 +545,7 @@ private void EnableHostDebugger(Runspace runspace, bool enabled)
             // Only enable and disable the host's runspace if we are in process attach mode.
             if (_debugger is ServerRemoteDebugger)
             {
-                LocalRunspace localRunspace = runspace as LocalRunspace;
-                if ((localRunspace != null) && (localRunspace.ExecutionContext != null) && (localRunspace.ExecutionContext.EngineHostInterface != null))
+                if ((runspace is LocalRunspace localRunspace) && (localRunspace.ExecutionContext != null) && (localRunspace.ExecutionContext.EngineHostInterface != null))
                 {
                     try
                     {
@@ -551,8 +558,7 @@ private void EnableHostDebugger(Runspace runspace, bool enabled)
 
         private static void SetLocalMode(System.Management.Automation.Debugger debugger, bool localMode)
         {
-            ServerRemoteDebugger remoteDebugger = debugger as ServerRemoteDebugger;
-            if (remoteDebugger != null)
+            if (debugger is ServerRemoteDebugger remoteDebugger)
             {
                 remoteDebugger.LocalDebugMode = localMode;
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/EnableDisableRunspaceDebugCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/EnableDisableRunspaceDebugCommand.cs
index c37d83ecf84..47b83c78770 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/EnableDisableRunspaceDebugCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/EnableDisableRunspaceDebugCommand.cs
@@ -59,7 +59,10 @@ public sealed class PSRunspaceDebug
         /// <param name="runspaceId">Runspace local Id.</param>
         public PSRunspaceDebug(bool enabled, bool breakAll, string runspaceName, int runspaceId)
         {
-            if (string.IsNullOrEmpty(runspaceName)) { throw new PSArgumentNullException(nameof(runspaceName)); }
+            if (string.IsNullOrEmpty(runspaceName))
+            {
+                throw new PSArgumentNullException(nameof(runspaceName));
+            }
 
             this.Enabled = enabled;
             this.BreakAll = breakAll;
@@ -115,7 +118,7 @@ public abstract class CommonRunspaceCommandBase : PSCmdlet
         /// </summary>
         [Parameter(Position = 0,
                    ParameterSetName = CommonRunspaceCommandBase.RunspaceNameParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] RunspaceName
         {
@@ -131,7 +134,7 @@ public string[] RunspaceName
                    ValueFromPipelineByPropertyName = true,
                    ValueFromPipeline = true,
                    ParameterSetName = CommonRunspaceCommandBase.RunspaceParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public Runspace[] Runspace
         {
@@ -145,7 +148,7 @@ public Runspace[] Runspace
         [Parameter(Position = 0,
                    Mandatory = true,
                    ParameterSetName = CommonRunspaceCommandBase.RunspaceIdParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public int[] RunspaceId
         {
@@ -158,7 +161,7 @@ public int[] RunspaceId
         [Parameter(Position = 0,
                    Mandatory = true,
                    ParameterSetName = CommonRunspaceCommandBase.RunspaceInstanceIdParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public System.Guid[] RunspaceInstanceId
         {
@@ -170,7 +173,7 @@ public System.Guid[] RunspaceInstanceId
         /// Gets or Sets the ProcessName for which runspace debugging has to be enabled or disabled.
         /// </summary>
         [Parameter(Position = 0, ParameterSetName = CommonRunspaceCommandBase.ProcessNameParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string ProcessName
         {
             get;
@@ -181,7 +184,7 @@ public string ProcessName
         /// Gets or Sets the AppDomain Names for which runspace debugging has to be enabled or disabled.
         /// </summary>
         [Parameter(Position = 1, ParameterSetName = CommonRunspaceCommandBase.ProcessNameParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Scope = "member",
             Target = "Microsoft.PowerShell.Commands.CommonRunspaceCommandBase.#AppDomainName")]
         public string[] AppDomainName
@@ -275,10 +278,7 @@ protected void SetDebugPreferenceHelper(string processName, string[] appDomainNa
                 {
                     if (!string.IsNullOrEmpty(currentAppDomainName))
                     {
-                        if (appDomainNames == null)
-                        {
-                            appDomainNames = new List<string>();
-                        }
+                        appDomainNames ??= new List<string>();
 
                         appDomainNames.Add(currentAppDomainName.ToLowerInvariant());
                     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ExportAliasCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ExportAliasCommand.cs
index e01d8c28e0c..d6f2c661ad0 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ExportAliasCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ExportAliasCommand.cs
@@ -21,7 +21,7 @@ public enum ExportAliasFormat
         Csv,
 
         /// <summary>
-        /// Aliases will be exported as an MSH script.
+        /// Aliases will be exported as a script.
         /// </summary>
         Script
     }
@@ -117,7 +117,7 @@ public SwitchParameter PassThru
         /// <summary>
         /// Property that sets append parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Append
         {
             get
@@ -136,7 +136,7 @@ public SwitchParameter Append
         /// <summary>
         /// Property that sets force parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get
@@ -155,7 +155,7 @@ public SwitchParameter Force
         /// <summary>
         /// Property that prevents file overwrite.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [Alias("NoOverwrite")]
         public SwitchParameter NoClobber
         {
@@ -184,6 +184,7 @@ public SwitchParameter NoClobber
         /// which scope the aliases are retrieved from.
         /// </summary>
         [Parameter]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         #endregion Parameters
@@ -291,8 +292,7 @@ protected override void EndProcessing()
                         line = GetAliasLine(alias, "set-alias -Name:\"{0}\" -Value:\"{1}\" -Description:\"{2}\" -Option:\"{3}\"");
                     }
 
-                    if (writer != null)
-                        writer.WriteLine(line);
+                    writer?.WriteLine(line);
 
                     if (PassThru)
                     {
@@ -302,8 +302,7 @@ protected override void EndProcessing()
             }
             finally
             {
-                if (writer != null)
-                    writer.Dispose();
+                writer?.Dispose();
                 // reset the read-only attribute
                 if (readOnlyFileInfo != null)
                     readOnlyFileInfo.Attributes |= FileAttributes.ReadOnly;
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs
index a42462737ea..65efee78a28 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ColumnInfo.cs
@@ -48,7 +48,7 @@ internal Type GetValueType(PSObject liveObject, out object columnValue)
         /// <returns>The source string limited in the number of lines.</returns>
         internal static object LimitString(object src)
         {
-            if (!(src is string srcString))
+            if (src is not string srcString)
             {
                 return src;
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ExpressionColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ExpressionColumnInfo.cs
index e905f5d64b6..4d0c8af875c 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ExpressionColumnInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ExpressionColumnInfo.cs
@@ -6,7 +6,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class ExpressionColumnInfo : ColumnInfo
+    internal sealed class ExpressionColumnInfo : ColumnInfo
     {
         private readonly PSPropertyExpression _expression;
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/HeaderInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/HeaderInfo.cs
index d811ce32303..4f4e84a1569 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/HeaderInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/HeaderInfo.cs
@@ -7,7 +7,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class HeaderInfo
+    internal sealed class HeaderInfo
     {
         private readonly List<ColumnInfo> _columns = new();
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs
index 3db37f3528e..4ec5e2240fa 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OriginalColumnInfo.cs
@@ -9,7 +9,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class OriginalColumnInfo : ColumnInfo
+    internal sealed class OriginalColumnInfo : ColumnInfo
     {
         private readonly string _liveObjectPropertyName;
         private readonly OutGridViewCommand _parentCmdlet;
@@ -33,15 +33,13 @@ internal override object GetValue(PSObject liveObject)
 
                 // The live object has the liveObjectPropertyName property.
                 object liveObjectValue = propertyInfo.Value;
-                ICollection collectionValue = liveObjectValue as ICollection;
-                if (collectionValue != null)
+                if (liveObjectValue is ICollection collectionValue)
                 {
                     liveObjectValue = _parentCmdlet.ConvertToString(PSObjectHelper.AsPSObject(propertyInfo.Value));
                 }
                 else
                 {
-                    PSObject psObjectValue = liveObjectValue as PSObject;
-                    if (psObjectValue != null)
+                    if (liveObjectValue is PSObject psObjectValue)
                     {
                         // Since PSObject implements IComparable there is a need to verify if its BaseObject actually implements IComparable.
                         if (psObjectValue.BaseObject is IComparable)
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs
index e606e58e9e4..574ca39426d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutGridViewCommand.cs
@@ -145,7 +145,7 @@ protected override void EndProcessing()
             // The pipeline will be blocked while we don't return
             if (this.Wait || this.OutputMode != OutputModeOption.None)
             {
-                _windowProxy.BlockUntillClosed();
+                _windowProxy.BlockUntilClosed();
             }
 
             // Output selected items to pipeline.
@@ -180,8 +180,7 @@ protected override void ProcessRecord()
                 return;
             }
 
-            IDictionary dictionary = InputObject.BaseObject as IDictionary;
-            if (dictionary != null)
+            if (InputObject.BaseObject is IDictionary dictionary)
             {
                 // Dictionaries should be enumerated through because the pipeline does not enumerate through them.
                 foreach (DictionaryEntry entry in dictionary)
@@ -324,7 +323,7 @@ internal static GridHeader ConstructGridHeader(PSObject input, OutGridViewComman
             internal abstract void ProcessInputObject(PSObject input);
         }
 
-        internal class ScalarTypeHeader : GridHeader
+        internal sealed class ScalarTypeHeader : GridHeader
         {
             private readonly Type _originalScalarType;
 
@@ -350,7 +349,7 @@ internal override void ProcessInputObject(PSObject input)
             }
         }
 
-        internal class NonscalarTypeHeader : GridHeader
+        internal sealed class NonscalarTypeHeader : GridHeader
         {
             private readonly AppliesTo _appliesTo = null;
 
@@ -454,7 +453,7 @@ internal override void ProcessInputObject(PSObject input)
             }
         }
 
-        internal class HeteroTypeHeader : GridHeader
+        internal sealed class HeteroTypeHeader : GridHeader
         {
             internal HeteroTypeHeader(OutGridViewCommand parentCmd, PSObject input) : base(parentCmd)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs
index 3f22caf1e7b..ef9b0528c75 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/OutWindowProxy.cs
@@ -13,7 +13,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class OutWindowProxy : IDisposable
+    internal sealed class OutWindowProxy : IDisposable
     {
         private const string OutGridViewWindowClassName = "Microsoft.Management.UI.Internal.OutGridViewWindow";
         private const string OriginalTypePropertyName = "OriginalType";
@@ -58,20 +58,11 @@ internal OutWindowProxy(string title, OutputModeOption outPutMode, OutGridViewCo
         /// <param name="types">An array of types to add.</param>
         internal void AddColumns(string[] propertyNames, string[] displayNames, Type[] types)
         {
-            if (propertyNames == null)
-            {
-                throw new ArgumentNullException(nameof(propertyNames));
-            }
+            ArgumentNullException.ThrowIfNull(propertyNames);
 
-            if (displayNames == null)
-            {
-                throw new ArgumentNullException(nameof(displayNames));
-            }
+            ArgumentNullException.ThrowIfNull(displayNames);
 
-            if (types == null)
-            {
-                throw new ArgumentNullException(nameof(types));
-            }
+            ArgumentNullException.ThrowIfNull(types);
 
             try
             {
@@ -80,8 +71,7 @@ internal void AddColumns(string[] propertyNames, string[] displayNames, Type[] t
             catch (TargetInvocationException ex)
             {
                 // Verify if this is an error loading the System.Core dll.
-                FileNotFoundException fileNotFoundEx = ex.InnerException as FileNotFoundException;
-                if (fileNotFoundEx != null && fileNotFoundEx.FileName.Contains("System.Core"))
+                if (ex.InnerException is FileNotFoundException fileNotFoundEx && fileNotFoundEx.FileName.Contains("System.Core"))
                 {
                     _parentCmdlet.ThrowTerminatingError(
                         new ErrorRecord(new InvalidOperationException(
@@ -177,10 +167,7 @@ private void AddExtraProperties(PSObject staleObject, PSObject liveObject)
         /// </param>
         internal void AddItem(PSObject livePSObject)
         {
-            if (livePSObject == null)
-            {
-                throw new ArgumentNullException(nameof(livePSObject));
-            }
+            ArgumentNullException.ThrowIfNull(livePSObject);
 
             if (_headerInfo == null)
             {
@@ -203,10 +190,7 @@ internal void AddItem(PSObject livePSObject)
         /// </param>
         internal void AddHeteroViewItem(PSObject livePSObject)
         {
-            if (livePSObject == null)
-            {
-                throw new ArgumentNullException(nameof(livePSObject));
-            }
+            ArgumentNullException.ThrowIfNull(livePSObject);
 
             if (_headerInfo == null)
             {
@@ -230,13 +214,7 @@ internal void ShowWindow()
             }
         }
 
-        internal void BlockUntillClosed()
-        {
-            if (_closedEvent != null)
-            {
-                _closedEvent.WaitOne();
-            }
-        }
+        internal void BlockUntilClosed() => _closedEvent?.WaitOne();
 
         /// <summary>
         /// Implements IDisposable logic.
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ScalarTypeColumnInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ScalarTypeColumnInfo.cs
index 77f80c269a3..38cc9668856 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ScalarTypeColumnInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/ScalarTypeColumnInfo.cs
@@ -6,7 +6,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class ScalarTypeColumnInfo : ColumnInfo
+    internal sealed class ScalarTypeColumnInfo : ColumnInfo
     {
         private readonly Type _type;
 
@@ -29,7 +29,7 @@ internal override object GetValue(PSObject liveObject)
         }
     }
 
-    internal class TypeNameColumnInfo : ColumnInfo
+    internal sealed class TypeNameColumnInfo : ColumnInfo
     {
         internal TypeNameColumnInfo(string staleObjectPropertyName, string displayName)
             : base(staleObjectPropertyName, displayName)
@@ -43,7 +43,7 @@ internal override object GetValue(PSObject liveObject)
         }
     }
 
-    internal class ToStringColumnInfo : ColumnInfo
+    internal sealed class ToStringColumnInfo : ColumnInfo
     {
         private readonly OutGridViewCommand _parentCmdlet;
 
@@ -60,7 +60,7 @@ internal override object GetValue(PSObject liveObject)
         }
     }
 
-    internal class IndexColumnInfo : ColumnInfo
+    internal sealed class IndexColumnInfo : ColumnInfo
     {
         private int _index = 0;
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs
index 216d9121d54..e152bb7c973 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/OutGridView/TableView.cs
@@ -12,7 +12,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class TableView
+    internal sealed class TableView
     {
         private PSPropertyExpressionFactory _expressionFactory;
         private TypeInfoDataBase _typeInfoDatabase;
@@ -69,14 +69,10 @@ internal HeaderInfo GenerateHeaderInfo(PSObject input, TableControlBody tableBod
 
                     if (token != null)
                     {
-                        FieldPropertyToken fpt = token as FieldPropertyToken;
-                        if (fpt != null)
+                        if (token is FieldPropertyToken fpt)
                         {
-                            if (displayName == null)
-                            {
-                                // Database does not provide a label(DisplayName) for the current property, use the expression value instead.
-                                displayName = fpt.expression.expressionValue;
-                            }
+                            // If Database does not provide a label(DisplayName) for the current property, use the expression value instead.
+                            displayName ??= fpt.expression.expressionValue;
 
                             if (fpt.expression.isScriptBlock)
                             {
@@ -101,8 +97,7 @@ internal HeaderInfo GenerateHeaderInfo(PSObject input, TableControlBody tableBod
                         }
                         else
                         {
-                            TextToken tt = token as TextToken;
-                            if (tt != null)
+                            if (token is TextToken tt)
                             {
                                 displayName = _typeInfoDatabase.displayResourceManagerCache.GetTextTokenString(tt);
                                 columnInfo = new OriginalColumnInfo(tt.text, displayName, tt.text, parentCmdlet);
@@ -170,10 +165,7 @@ internal HeaderInfo GenerateHeaderInfo(PSObject input, OutGridViewCommand parent
                         propertyName = (string)key;
                 }
 
-                if (propertyName == null)
-                {
-                    propertyName = association.ResolvedExpression.ToString();
-                }
+                propertyName ??= association.ResolvedExpression.ToString();
 
                 ColumnInfo columnInfo = new OriginalColumnInfo(propertyName, propertyName, propertyName, parentCmdlet);
 
@@ -233,10 +225,7 @@ private List<TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBod
                 }
             }
 
-            if (matchingRowDefinition == null)
-            {
-                matchingRowDefinition = match.BestMatch as TableRowDefinition;
-            }
+            matchingRowDefinition ??= match.BestMatch as TableRowDefinition;
 
             if (matchingRowDefinition == null)
             {
@@ -254,10 +243,7 @@ private List<TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBod
                         }
                     }
 
-                    if (matchingRowDefinition == null)
-                    {
-                        matchingRowDefinition = match.BestMatch as TableRowDefinition;
-                    }
+                    matchingRowDefinition ??= match.BestMatch as TableRowDefinition;
                 }
             }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs
index 70967aa897b..16d4325f68a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/GetFormatDataCommand.cs
@@ -4,7 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
+using System.Globalization;
 using System.Management.Automation;
 using System.Management.Automation.Remoting;
 using System.Management.Automation.Runspaces;
@@ -85,7 +85,7 @@ private static Dictionary<string, List<string>> GetTypeGroupMap(IEnumerable<Type
                 // first type group will take effect. So we skip the rest groups that have the same name.
                 if (!typeGroupMap.ContainsKey(typeGroup.name))
                 {
-                    var typesInGroup = typeGroup.typeReferenceList.Select(typeReference => typeReference.name).ToList();
+                    var typesInGroup = typeGroup.typeReferenceList.ConvertAll(static typeReference => typeReference.name);
                     typeGroupMap.Add(typeGroup.name, typesInGroup);
                 }
             }
@@ -98,7 +98,7 @@ private static Dictionary<string, List<string>> GetTypeGroupMap(IEnumerable<Type
         /// </summary>
         protected override void ProcessRecord()
         {
-            // Remoting detection: 
+            // Remoting detection:
             //   * Automatic variable $PSSenderInfo is defined in true remoting contexts as well as in background jobs.
             //   * $PSSenderInfo.ApplicationArguments.PSVersionTable.PSVersion contains the client version, as a [version] instance.
             //      Note: Even though $PSVersionTable.PSVersion is of type [semver] in PowerShell 6+, it is of type [version] here,
@@ -130,6 +130,7 @@ protected override void ProcessRecord()
 
             foreach (ViewDefinition definition in viewdefinitions)
             {
+                this.WriteVerbose(string.Format(CultureInfo.CurrentCulture, GetFormatDataStrings.ProcessViewDefinition, definition.name));
                 if (definition.isHelpFormatter)
                     continue;
 
@@ -140,22 +141,19 @@ protected override void ProcessRecord()
 
                 PSControl control;
 
-                var tableControlBody = definition.mainControl as TableControlBody;
-                if (tableControlBody != null)
+                if (definition.mainControl is TableControlBody tableControlBody)
                 {
                     control = new TableControl(tableControlBody, definition);
                 }
                 else
                 {
-                    var listControlBody = definition.mainControl as ListControlBody;
-                    if (listControlBody != null)
+                    if (definition.mainControl is ListControlBody listControlBody)
                     {
                         control = new ListControl(listControlBody, definition);
                     }
                     else
                     {
-                        var wideControlBody = definition.mainControl as WideControlBody;
-                        if (wideControlBody != null)
+                        if (definition.mainControl is WideControlBody wideControlBody)
                         {
                             control = new WideControl(wideControlBody, definition);
                             if (writeOldWay)
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/WriteFormatDataCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/WriteFormatDataCommand.cs
index 3ccbe942829..c07539aa25a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/WriteFormatDataCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/common/WriteFormatDataCommand.cs
@@ -81,7 +81,7 @@ public string LiteralPath
         /// <summary>
         /// Force writing a file.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get
@@ -98,7 +98,7 @@ public SwitchParameter Force
         /// <summary>
         /// Do not overwrite file if exists.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [Alias("NoOverwrite")]
         public SwitchParameter NoClobber
         {
@@ -118,7 +118,7 @@ public SwitchParameter NoClobber
         /// <summary>
         /// Include scriptblocks for export.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter IncludeScriptBlock
         {
             get
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-hex/Format-Hex.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-hex/Format-Hex.cs
index 091903f011a..7e9dab8a203 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-hex/Format-Hex.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-hex/Format-Hex.cs
@@ -24,7 +24,7 @@ public sealed class FormatHex : PSCmdlet
         private const int BUFFERSIZE = 16;
 
         /// <summary>
-        /// For cases where a homogenous collection of bytes or other items are directly piped in, we collect all the
+        /// For cases where a homogeneous collection of bytes or other items are directly piped in, we collect all the
         /// bytes in a List&lt;byte&gt; and then output the formatted result all at once in EndProcessing().
         /// </summary>
         private readonly List<byte> _inputBuffer = new();
@@ -37,7 +37,7 @@ public sealed class FormatHex : PSCmdlet
         private bool _groupInput = true;
 
         /// <summary>
-        /// Keep track of prior input types to determine if we're given a heterogenous collection.
+        /// Keep track of prior input types to determine if we're given a heterogeneous collection.
         /// </summary>
         private Type _lastInputType;
 
@@ -47,14 +47,14 @@ public sealed class FormatHex : PSCmdlet
         /// Gets or sets the path of file(s) to process.
         /// </summary>
         [Parameter(Mandatory = true, Position = 0, ParameterSetName = "Path")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string[] Path { get; set; }
 
         /// <summary>
         /// Gets or sets the literal path of file to process.
         /// </summary>
         [Parameter(Mandatory = true, ParameterSetName = "LiteralPath")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [Alias("PSPath", "LP")]
         public string[] LiteralPath { get; set; }
 
@@ -68,8 +68,8 @@ public sealed class FormatHex : PSCmdlet
         /// Gets or sets the type of character encoding for InputObject.
         /// </summary>
         [Parameter(ParameterSetName = "ByInputObject")]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -85,7 +85,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Gets or sets count of bytes to read from the input stream.
@@ -391,7 +391,6 @@ private byte[] ConvertToBytes(object inputObject)
             byte[] result = null;
             int elements = 1;
             bool isArray = false;
-            bool isBool = false;
             bool isEnum = false;
             if (baseType.IsArray)
             {
@@ -424,11 +423,6 @@ private byte[] ConvertToBytes(object inputObject)
                     _lastInputType = baseType;
                 }
 
-                if (baseType == typeof(bool))
-                {
-                    isBool = true;
-                }
-
                 var elementSize = Marshal.SizeOf(baseType);
                 result = new byte[elementSize * elements];
                 if (!isArray)
@@ -450,11 +444,6 @@ private byte[] ConvertToBytes(object inputObject)
                         {
                             toBytes = Convert.ChangeType(obj, baseType);
                         }
-                        else if (isBool)
-                        {
-                            // bool is 1 byte apparently
-                            toBytes = Convert.ToByte(obj);
-                        }
                         else
                         {
                             toBytes = obj;
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-list/Format-List.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-list/Format-List.cs
index 7237cd46834..182ea53e258 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-list/Format-List.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-list/Format-List.cs
@@ -8,9 +8,10 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// Implementation for the format-table command.
+    /// Implementation for the Format-List command.
     /// </summary>
     [Cmdlet(VerbsCommon.Format, "List", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096928")]
+    [OutputType(typeof(FormatStartData), typeof(FormatEntryData), typeof(FormatEndData), typeof(GroupStartData), typeof(GroupEndData))]
     public class FormatListCommand : OuterFormatTableAndListBase
     {
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-object/Format-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-object/Format-Object.cs
index 9e064ba37db..693a799c809 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-object/Format-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-object/Format-Object.cs
@@ -8,9 +8,10 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// Implementation for the format-custom command. It just calls the formatting engine on complex shape.
+    /// Implementation for the Format-Custom command. It just calls the formatting engine on complex shape.
     /// </summary>
     [Cmdlet(VerbsCommon.Format, "Custom", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096929")]
+    [OutputType(typeof(FormatStartData), typeof(FormatEntryData), typeof(FormatEndData), typeof(GroupStartData), typeof(GroupEndData))]
     public class FormatCustomCommand : OuterFormatShapeCommandBase
     {
         /// <summary>
@@ -31,6 +32,7 @@ public FormatCustomCommand()
         /// will be determined using property sets, etc.
         /// </summary>
         [Parameter(Position = 0)]
+        [ValidateNotNullOrEmpty]
         public object[] Property
         {
             get { return _props; }
@@ -40,10 +42,16 @@ public object[] Property
 
         private object[] _props;
 
+        /// <summary>
+        /// Gets or sets the properties to exclude from formatting.
+        /// </summary>
+        [Parameter]
+        public string[] ExcludeProperty { get; set; }
+
         /// <summary>
         /// </summary>
         /// <value></value>
-        [ValidateRangeAttribute(1, int.MaxValue)]
+        [ValidateRange(1, int.MaxValue)]
         [Parameter]
         public int Depth
         {
@@ -60,6 +68,18 @@ internal override FormattingCommandLineParameters GetCommandLineParameters()
         {
             FormattingCommandLineParameters parameters = new();
 
+            // Check View conflicts first (before any auto-expansion)
+            if (!string.IsNullOrEmpty(this.View))
+            {
+                // View cannot be used with Property or ExcludeProperty
+                if ((_props is not null && _props.Length != 0) || (ExcludeProperty is not null && ExcludeProperty.Length != 0))
+                {
+                    ReportCannotSpecifyViewAndProperty();
+                }
+
+                parameters.viewName = this.View;
+            }
+
             if (_props != null)
             {
                 ParameterProcessor processor = new(new FormatObjectParameterDefinition());
@@ -67,15 +87,17 @@ internal override FormattingCommandLineParameters GetCommandLineParameters()
                 parameters.mshParameterList = processor.ProcessParameters(_props, invocationContext);
             }
 
-            if (!string.IsNullOrEmpty(this.View))
+            if (ExcludeProperty is not null)
             {
-                // we have a view command line switch
-                if (parameters.mshParameterList.Count != 0)
+                parameters.excludePropertyFilter = new PSPropertyExpressionFilter(ExcludeProperty);
+
+                // ExcludeProperty implies -Property * for better UX
+                if (_props is null || _props.Length == 0)
                 {
-                    ReportCannotSpecifyViewAndProperty();
+                    ParameterProcessor processor = new(new FormatObjectParameterDefinition());
+                    TerminatingErrorContext invocationContext = new(this);
+                    parameters.mshParameterList = processor.ProcessParameters(new object[] { "*" }, invocationContext);
                 }
-
-                parameters.viewName = this.View;
             }
 
             parameters.groupByParameter = this.ProcessGroupByParameter();
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-table/Format-Table.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-table/Format-Table.cs
index e831981568e..a9e35fcdbc3 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-table/Format-Table.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-table/Format-Table.cs
@@ -8,9 +8,10 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// Implementation for the format-table command.
+    /// Implementation for the Format-Table command.
     /// </summary>
     [Cmdlet(VerbsCommon.Format, "Table", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096703")]
+    [OutputType(typeof(FormatStartData), typeof(FormatEntryData), typeof(FormatEndData), typeof(GroupStartData), typeof(GroupEndData))]
     public class FormatTableCommand : OuterFormatTableBase
     {
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-wide/Format-Wide.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-wide/Format-Wide.cs
index 8d80462c12f..c6aef5c20be 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-wide/Format-Wide.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/format-wide/Format-Wide.cs
@@ -10,9 +10,10 @@
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// Implementation for the format-table command.
+    /// Implementation for the Format-Wide command.
     /// </summary>
     [Cmdlet(VerbsCommon.Format, "Wide", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096930")]
+    [OutputType(typeof(FormatStartData), typeof(FormatEntryData), typeof(FormatEndData), typeof(GroupStartData), typeof(GroupEndData))]
     public class FormatWideCommand : OuterFormatShapeCommandBase
     {
         /// <summary>
@@ -41,23 +42,19 @@ public object Property
         private object _prop;
 
         /// <summary>
-        /// Optional, non positional parameter.
+        /// Gets or sets the properties to exclude from formatting.
+        /// </summary>
+        [Parameter]
+        public string[] ExcludeProperty { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether to autosize the output.
         /// </summary>
-        /// <value></value>
         [Parameter]
         public SwitchParameter AutoSize
         {
-            get
-            {
-                if (_autosize.HasValue)
-                    return _autosize.Value;
-                return false;
-            }
-
-            set
-            {
-                _autosize = value;
-            }
+            get => _autosize.GetValueOrDefault();
+            set => _autosize = value;
         }
 
         private bool? _autosize = null;
@@ -67,20 +64,11 @@ public SwitchParameter AutoSize
         /// </summary>
         /// <value></value>
         [Parameter]
-        [ValidateRangeAttribute(1, int.MaxValue)]
+        [ValidateRange(1, int.MaxValue)]
         public int Column
         {
-            get
-            {
-                if (_column.HasValue)
-                    return _column.Value;
-                return -1;
-            }
-
-            set
-            {
-                _column = value;
-            }
+            get => _column.GetValueOrDefault(-1);
+            set => _column = value;
         }
 
         private int? _column = null;
@@ -91,6 +79,18 @@ internal override FormattingCommandLineParameters GetCommandLineParameters()
         {
             FormattingCommandLineParameters parameters = new();
 
+            // Check View conflicts first (before any auto-expansion)
+            if (!string.IsNullOrEmpty(this.View))
+            {
+                // View cannot be used with Property or ExcludeProperty
+                if (_prop is not null || (ExcludeProperty is not null && ExcludeProperty.Length != 0))
+                {
+                    ReportCannotSpecifyViewAndProperty();
+                }
+
+                parameters.viewName = this.View;
+            }
+
             if (_prop != null)
             {
                 ParameterProcessor processor = new(new FormatWideParameterDefinition());
@@ -98,34 +98,33 @@ internal override FormattingCommandLineParameters GetCommandLineParameters()
                 parameters.mshParameterList = processor.ProcessParameters(new object[] { _prop }, invocationContext);
             }
 
-            if (!string.IsNullOrEmpty(this.View))
+            if (ExcludeProperty is not null)
             {
-                // we have a view command line switch
-                if (parameters.mshParameterList.Count != 0)
+                parameters.excludePropertyFilter = new PSPropertyExpressionFilter(ExcludeProperty);
+
+                // ExcludeProperty implies -Property * for better UX
+                if (_prop is null)
                 {
-                    ReportCannotSpecifyViewAndProperty();
+                    ParameterProcessor processor = new(new FormatWideParameterDefinition());
+                    TerminatingErrorContext invocationContext = new(this);
+                    parameters.mshParameterList = processor.ProcessParameters(new object[] { "*" }, invocationContext);
                 }
-
-                parameters.viewName = this.View;
             }
 
             // we cannot specify -column and -autosize, they are mutually exclusive
-            if (_autosize.HasValue && _column.HasValue)
+            if (AutoSize && _column.HasValue)
             {
-                if (_autosize.Value)
-                {
-                    // the user specified -autosize:true AND a column number
-                    string msg = StringUtil.Format(FormatAndOut_format_xxx.CannotSpecifyAutosizeAndColumnsError);
+                // the user specified -autosize:true AND a column number
+                string msg = StringUtil.Format(FormatAndOut_format_xxx.CannotSpecifyAutosizeAndColumnsError);
 
-                    ErrorRecord errorRecord = new(
-                        new InvalidDataException(),
-                        "FormatCannotSpecifyAutosizeAndColumns",
-                        ErrorCategory.InvalidArgument,
-                        null);
+                ErrorRecord errorRecord = new(
+                    new InvalidDataException(),
+                    "FormatCannotSpecifyAutosizeAndColumns",
+                    ErrorCategory.InvalidArgument,
+                    null);
 
-                    errorRecord.ErrorDetails = new ErrorDetails(msg);
-                    this.ThrowTerminatingError(errorRecord);
-                }
+                errorRecord.ErrorDetails = new ErrorDetails(msg);
+                this.ThrowTerminatingError(errorRecord);
             }
 
             parameters.groupByParameter = this.ProcessGroupByParameter();
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-file/Out-File.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-file/Out-File.cs
index 2fbdb73dc9c..e585fc1ce08 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-file/Out-File.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-file/Out-File.cs
@@ -74,8 +74,8 @@ public string LiteralPath
         /// Encoding optional flag.
         /// </summary>
         [Parameter(Position = 1)]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -91,12 +91,12 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Property that sets append parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Append
         {
             get { return _append; }
@@ -109,7 +109,7 @@ public SwitchParameter Append
         /// <summary>
         /// Property that sets force parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get { return _force; }
@@ -122,7 +122,7 @@ public SwitchParameter Force
         /// <summary>
         /// Property that prevents file overwrite.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [Alias("NoOverwrite")]
         public SwitchParameter NoClobber
         {
@@ -136,7 +136,7 @@ public SwitchParameter NoClobber
         /// <summary>
         /// Optional, number of columns to use when writing to device.
         /// </summary>
-        [ValidateRangeAttribute(2, int.MaxValue)]
+        [ValidateRange(2, int.MaxValue)]
         [Parameter]
         public int Width
         {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-printer/PrinterLineOutput.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-printer/PrinterLineOutput.cs
index cbd19a17f4f..94f3fe6a50e 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-printer/PrinterLineOutput.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-printer/PrinterLineOutput.cs
@@ -5,6 +5,8 @@
 using System.Collections.Generic;
 using System.Drawing;
 using System.Drawing.Printing;
+using System.Management.Automation;
+using System.Management.Automation.Internal;
 
 namespace Microsoft.PowerShell.Commands.Internal.Format
 {
@@ -62,11 +64,25 @@ internal override int RowNumber
         internal override void WriteLine(string s)
         {
             CheckStopProcessing();
-            // delegate the action to the helper,
-            // that will properly break the string into
-            // screen lines
-            _writeLineHelper.WriteLine(s, this.ColumnNumber);
+
+            // Remove all ANSI escape sequences before sending out to the printer.
+            s = new ValueStringDecorated(s).ToString(OutputRendering.PlainText);
+            WriteRawText(s);
         }
+
+        /// <summary>
+        /// Write a raw text by delegating to the writer underneath, with no change to the text.
+        /// For example, keeping VT escape sequences intact in it.
+        /// </summary>
+        /// <param name="s">The raw text to be written to the device.</param>
+        internal override void WriteRawText(string s)
+        {
+            CheckStopProcessing();
+
+            // Delegate the action to the helper, that will properly break the string into screen lines.
+            _writeLineHelper.WriteLine(s, ColumnNumber);
+        }
+
         #endregion
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-string/Out-String.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-string/Out-String.cs
index 512bf1048e0..0f485bec06a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-string/Out-String.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/FormatAndOutput/out-string/Out-String.cs
@@ -34,7 +34,7 @@ public SwitchParameter Stream
         /// <summary>
         /// Optional, number of columns to use when writing to device.
         /// </summary>
-        [ValidateRangeAttribute(2, int.MaxValue)]
+        [ValidateRange(2, int.MaxValue)]
         [Parameter]
         public int Width
         {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs
index 053f99f897d..3af01087ad7 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-Error.cs
@@ -12,7 +12,7 @@ namespace Microsoft.PowerShell.Commands
     /// Class for Get-Error implementation.
     /// </summary>
     [Cmdlet(VerbsCommon.Get, "Error",
-        HelpUri = "https://docs.microsoft.com/powershell/module/microsoft.powershell.utility/get-error",
+        HelpUri = "https://go.microsoft.com/fwlink/?linkid=2241804",
         DefaultParameterSetName = NewestParameterSetName)]
     [OutputType("System.Management.Automation.ErrorRecord#PSExtendedError", "System.Exception#PSExtendedError")]
     public sealed class GetErrorCommand : PSCmdlet
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-PSBreakpoint.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-PSBreakpoint.cs
index 469e18926d8..c675a0f6dc1 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-PSBreakpoint.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Get-PSBreakpoint.cs
@@ -16,8 +16,7 @@ public enum BreakpointType
         /// <summary>Breakpoint on a line within a script</summary>
         Line,
 
-        /// <summary>
-        /// Breakpoint on a variable</summary>
+        /// <summary>Breakpoint on a variable</summary>
         Variable,
 
         /// <summary>Breakpoint on a command</summary>
@@ -107,7 +106,7 @@ protected override void ProcessRecord()
                 breakpoints = Filter(
                     breakpoints,
                     Id,
-                    (Breakpoint breakpoint, int id) => breakpoint.Id == id);
+                    static (Breakpoint breakpoint, int id) => breakpoint.Id == id);
             }
             else if (ParameterSetName.Equals(CommandParameterSetName, StringComparison.OrdinalIgnoreCase))
             {
@@ -116,7 +115,7 @@ protected override void ProcessRecord()
                     Command,
                     (Breakpoint breakpoint, string command) =>
                     {
-                        if (!(breakpoint is CommandBreakpoint commandBreakpoint))
+                        if (breakpoint is not CommandBreakpoint commandBreakpoint)
                         {
                             return false;
                         }
@@ -131,7 +130,7 @@ protected override void ProcessRecord()
                     Variable,
                     (Breakpoint breakpoint, string variable) =>
                     {
-                        if (!(breakpoint is VariableBreakpoint variableBreakpoint))
+                        if (breakpoint is not VariableBreakpoint variableBreakpoint)
                         {
                             return false;
                         }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetAliasCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetAliasCommand.cs
index fee8b3ab27c..7b93b555c5c 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetAliasCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetAliasCommand.cs
@@ -51,6 +51,7 @@ public string[] Exclude
         /// which scope the aliases are retrieved from.
         /// </summary>
         [Parameter]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
@@ -181,7 +182,7 @@ private void WriteMatches(string value, string parametersetname)
             }
 
             results.Sort(
-                (AliasInfo left, AliasInfo right) => StringComparer.CurrentCultureIgnoreCase.Compare(left.Name, right.Name));
+                static (AliasInfo left, AliasInfo right) => StringComparer.CurrentCultureIgnoreCase.Compare(left.Name, right.Name));
             foreach (AliasInfo alias in results)
             {
                 this.WriteObject(alias);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs
index 40e0bbeefd7..6717cc7196b 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetDateCommand.cs
@@ -78,7 +78,7 @@ public long UnixTimeSeconds
         /// Allows the user to override the year.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(1, 9999)]
+        [ValidateRange(1, 9999)]
         public int Year
         {
             get
@@ -100,7 +100,7 @@ public int Year
         /// Allows the user to override the month.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(1, 12)]
+        [ValidateRange(1, 12)]
         public int Month
         {
             get
@@ -122,7 +122,7 @@ public int Month
         /// Allows the user to override the day.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(1, 31)]
+        [ValidateRange(1, 31)]
         public int Day
         {
             get
@@ -144,7 +144,7 @@ public int Day
         /// Allows the user to override the hour.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(0, 23)]
+        [ValidateRange(0, 23)]
         public int Hour
         {
             get
@@ -166,7 +166,7 @@ public int Hour
         /// Allows the user to override the minute.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(0, 59)]
+        [ValidateRange(0, 59)]
         public int Minute
         {
             get
@@ -188,7 +188,7 @@ public int Minute
         /// Allows the user to override the second.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(0, 59)]
+        [ValidateRange(0, 59)]
         public int Second
         {
             get
@@ -210,7 +210,7 @@ public int Second
         /// Allows the user to override the millisecond.
         /// </summary>
         [Parameter]
-        [ValidateRangeAttribute(0, 999)]
+        [ValidateRange(0, 999)]
         public int Millisecond
         {
             get
@@ -376,8 +376,6 @@ protected override void ProcessRecord()
             }
         }
 
-        private static readonly DateTime s_epoch = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
         /// <summary>
         /// This is more an implementation of the UNIX strftime.
         /// </summary>
@@ -501,7 +499,7 @@ private string UFormatDateString(DateTime dateTime)
                             break;
 
                         case 's':
-                            sb.Append(StringUtil.Format("{0:0}", dateTime.ToUniversalTime().Subtract(s_epoch).TotalSeconds));
+                            sb.Append(StringUtil.Format("{0:0}", dateTime.ToUniversalTime().Subtract(DateTime.UnixEpoch).TotalSeconds));
                             break;
 
                         case 'T':
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventCommand.cs
index 42360983c4e..f4ab18ac75a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventCommand.cs
@@ -20,7 +20,7 @@ public class GetEventCommand : PSCmdlet
         /// An identifier for this event subscription.
         /// </summary>
         [Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = "BySource")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string SourceIdentifier
         {
             get
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventSubscriberCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventSubscriberCommand.cs
index b3bd99b7bdf..f95c708fa50 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventSubscriberCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetEventSubscriberCommand.cs
@@ -20,7 +20,7 @@ public class GetEventSubscriberCommand : PSCmdlet
         /// An identifier for this event subscription.
         /// </summary>
         [Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = "BySource")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string SourceIdentifier
         {
             get
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs
index 40ea1d187d5..6f4b2f53cef 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
+using System.Diagnostics;
 using System.IO;
 using System.Management.Automation;
 using System.Security.Cryptography;
@@ -68,15 +69,6 @@ public string[] LiteralPath
         [Parameter(Mandatory = true, ParameterSetName = StreamParameterSet, Position = 0)]
         public Stream InputStream { get; set; }
 
-        /// <summary>
-        /// BeginProcessing() override.
-        /// This is for hash function init.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            InitHasher(Algorithm);
-        }
-
         /// <summary>
         /// ProcessRecord() override.
         /// This is for paths collecting from pipe.
@@ -133,6 +125,26 @@ protected override void ProcessRecord()
             }
         }
 
+        private byte[] ComputeHash(Stream stream)
+        {
+            switch (Algorithm)
+            {
+                case HashAlgorithmNames.SHA1:
+                    return SHA1.HashData(stream);
+                case HashAlgorithmNames.SHA256:
+                    return SHA256.HashData(stream);
+                case HashAlgorithmNames.SHA384:
+                    return SHA384.HashData(stream);
+                case HashAlgorithmNames.SHA512:
+                    return SHA512.HashData(stream);
+                case HashAlgorithmNames.MD5:
+                    return MD5.HashData(stream);
+            }
+
+            Debug.Assert(false, "invalid hash algorithm");
+            return SHA256.HashData(stream);
+        }
+
         /// <summary>
         /// Perform common error checks.
         /// Populate source code.
@@ -141,12 +153,9 @@ protected override void EndProcessing()
         {
             if (ParameterSetName == StreamParameterSet)
             {
-                byte[] bytehash = null;
-                string hash = null;
+                byte[] bytehash = ComputeHash(InputStream);
 
-                bytehash = hasher.ComputeHash(InputStream);
-
-                hash = BitConverter.ToString(bytehash).Replace("-", string.Empty);
+                string hash = Convert.ToHexString(bytehash);
                 WriteHashResult(Algorithm, hash, string.Empty);
             }
         }
@@ -159,7 +168,6 @@ protected override void EndProcessing()
         /// <returns>Boolean value indicating whether the hash calculation succeeded or failed.</returns>
         private bool ComputeFileHash(string path, out string hash)
         {
-            byte[] bytehash = null;
             Stream openfilestream = null;
 
             hash = null;
@@ -167,9 +175,9 @@ private bool ComputeFileHash(string path, out string hash)
             try
             {
                 openfilestream = File.OpenRead(path);
+                byte[] bytehash = ComputeHash(openfilestream);
 
-                bytehash = hasher.ComputeHash(openfilestream);
-                hash = BitConverter.ToString(bytehash).Replace("-", string.Empty);
+                hash = Convert.ToHexString(bytehash);
             }
             catch (FileNotFoundException ex)
             {
@@ -259,11 +267,6 @@ public string Algorithm
 
         private string _Algorithm = HashAlgorithmNames.SHA256;
 
-        /// <summary>
-        /// Hash algorithm is used.
-        /// </summary>
-        protected HashAlgorithm hasher;
-
         /// <summary>
         /// Hash algorithm names.
         /// </summary>
@@ -275,40 +278,6 @@ internal static class HashAlgorithmNames
             public const string SHA384 = "SHA384";
             public const string SHA512 = "SHA512";
         }
-
-        /// <summary>
-        /// Init a hash algorithm.
-        /// </summary>
-        protected void InitHasher(string Algorithm)
-        {
-            try
-            {
-                switch (Algorithm)
-                {
-                    case HashAlgorithmNames.SHA1:
-                        hasher = SHA1.Create();
-                        break;
-                    case HashAlgorithmNames.SHA256:
-                        hasher = SHA256.Create();
-                        break;
-                    case HashAlgorithmNames.SHA384:
-                        hasher = SHA384.Create();
-                        break;
-                    case HashAlgorithmNames.SHA512:
-                        hasher = SHA512.Create();
-                        break;
-                    case HashAlgorithmNames.MD5:
-                        hasher = MD5.Create();
-                        break;
-                }
-            }
-            catch
-            {
-                // Seems it will never throw! Remove?
-                Exception exc = new NotSupportedException(UtilityCommonStrings.AlgorithmTypeNotSupported);
-                ThrowTerminatingError(new ErrorRecord(exc, "AlgorithmTypeNotSupported", ErrorCategory.NotImplemented, null));
-            }
-        }
     }
 
     /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetMember.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetMember.cs
index 2fd9a499012..0b11af84200 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetMember.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetMember.cs
@@ -230,8 +230,7 @@ protected override void ProcessRecord()
                 {
                     if (!Force)
                     {
-                        PSMethod memberAsPSMethod = member as PSMethod;
-                        if ((memberAsPSMethod != null) && (memberAsPSMethod.IsSpecial))
+                        if ((member is PSMethod memberAsPSMethod) && (memberAsPSMethod.IsSpecial))
                         {
                             continue;
                         }
@@ -249,7 +248,7 @@ protected override void ProcessRecord()
             }
         }
 
-        private class MemberComparer : System.Collections.Generic.IComparer<MemberDefinition>
+        private sealed class MemberComparer : System.Collections.Generic.IComparer<MemberDefinition>
         {
             public int Compare(MemberDefinition first, MemberDefinition second)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs
index 7d02713d801..c77c25c5f4f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommand.cs
@@ -1,199 +1,18 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
 using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-using System.Numerics;
-using System.Security.Cryptography;
-using System.Threading;
-
-using Debug = System.Management.Automation.Diagnostics;
 
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
-    /// This class implements get-random cmdlet.
+    /// This class implements `Get-Random` cmdlet.
     /// </summary>
-    /// <!-- author: LukaszA -->
-    [Cmdlet(VerbsCommon.Get, "Random", DefaultParameterSetName = GetRandomCommand.RandomNumberParameterSet,
+    [Cmdlet(VerbsCommon.Get, "Random", DefaultParameterSetName = GetRandomCommandBase.RandomNumberParameterSet,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097016", RemotingCapability = RemotingCapability.None)]
-    [OutputType(typeof(Int32), typeof(Int64), typeof(double))]
-    public class GetRandomCommand : PSCmdlet
+    [OutputType(typeof(int), typeof(long), typeof(double))]
+    public sealed class GetRandomCommand : GetRandomCommandBase
     {
-        #region Parameter set handling
-
-        private const string RandomNumberParameterSet = "RandomNumberParameterSet";
-        private const string RandomListItemParameterSet = "RandomListItemParameterSet";
-        private const string ShuffleParameterSet = "ShuffleParameterSet";
-
-        private static readonly object[] _nullInArray = new object[] { null };
-
-        private enum MyParameterSet
-        {
-            Unknown,
-            RandomNumber,
-            RandomListItem
-        }
-
-        private MyParameterSet _effectiveParameterSet;
-
-        private MyParameterSet EffectiveParameterSet
-        {
-            get
-            {
-                // cache MyParameterSet enum instead of doing string comparison every time
-                if (_effectiveParameterSet == MyParameterSet.Unknown)
-                {
-                    if ((MyInvocation.ExpectingInput) && (Maximum == null) && (Minimum == null))
-                    {
-                        _effectiveParameterSet = MyParameterSet.RandomListItem;
-                    }
-                    else if (ParameterSetName == GetRandomCommand.RandomListItemParameterSet
-                        || ParameterSetName == GetRandomCommand.ShuffleParameterSet)
-                    {
-                        _effectiveParameterSet = MyParameterSet.RandomListItem;
-                    }
-                    else if (ParameterSetName.Equals(GetRandomCommand.RandomNumberParameterSet, StringComparison.OrdinalIgnoreCase))
-                    {
-                        if ((Maximum != null) && (Maximum.GetType().IsArray))
-                        {
-                            InputObject = (object[])Maximum;
-                            _effectiveParameterSet = MyParameterSet.RandomListItem;
-                        }
-                        else
-                        {
-                            _effectiveParameterSet = MyParameterSet.RandomNumber;
-                        }
-                    }
-                    else
-                    {
-                        Debug.Assert(false, "Unrecognized parameter set");
-                    }
-                }
-
-                return _effectiveParameterSet;
-            }
-        }
-
-        #endregion Parameter set handling
-
-        #region Error handling
-
-        private void ThrowMinGreaterThanOrEqualMax(object minValue, object maxValue)
-        {
-            if (minValue == null)
-            {
-                throw PSTraceSource.NewArgumentNullException("min");
-            }
-
-            if (maxValue == null)
-            {
-                throw PSTraceSource.NewArgumentNullException("max");
-            }
-
-            ErrorRecord errorRecord = new(
-                new ArgumentException(string.Format(
-                    CultureInfo.InvariantCulture, GetRandomCommandStrings.MinGreaterThanOrEqualMax, minValue, maxValue)),
-                "MinGreaterThanOrEqualMax",
-                ErrorCategory.InvalidArgument,
-                null);
-
-            ThrowTerminatingError(errorRecord);
-        }
-
-        #endregion
-
-        #region Random generator state
-
-        private static readonly ReaderWriterLockSlim s_runspaceGeneratorMapLock = new();
-
-        // 1-to-1 mapping of runspaces and random number generators
-        private static readonly Dictionary<Guid, PolymorphicRandomNumberGenerator> s_runspaceGeneratorMap = new();
-
-        private static void CurrentRunspace_StateChanged(object sender, RunspaceStateEventArgs e)
-        {
-            switch (e.RunspaceStateInfo.State)
-            {
-                case RunspaceState.Broken:
-                case RunspaceState.Closed:
-                    try
-                    {
-                        GetRandomCommand.s_runspaceGeneratorMapLock.EnterWriteLock();
-                        GetRandomCommand.s_runspaceGeneratorMap.Remove(((Runspace)sender).InstanceId);
-                    }
-                    finally
-                    {
-                        GetRandomCommand.s_runspaceGeneratorMapLock.ExitWriteLock();
-                    }
-
-                    break;
-            }
-        }
-
-        private PolymorphicRandomNumberGenerator _generator;
-
-        /// <summary>
-        /// Gets and sets generator associated with the current runspace.
-        /// </summary>
-        private PolymorphicRandomNumberGenerator Generator
-        {
-            get
-            {
-                if (_generator == null)
-                {
-                    Guid runspaceId = Context.CurrentRunspace.InstanceId;
-
-                    bool needToInitialize = false;
-                    try
-                    {
-                        GetRandomCommand.s_runspaceGeneratorMapLock.EnterReadLock();
-                        needToInitialize = !GetRandomCommand.s_runspaceGeneratorMap.TryGetValue(runspaceId, out _generator);
-                    }
-                    finally
-                    {
-                        GetRandomCommand.s_runspaceGeneratorMapLock.ExitReadLock();
-                    }
-
-                    if (needToInitialize)
-                    {
-                        Generator = new PolymorphicRandomNumberGenerator();
-                    }
-                }
-
-                return _generator;
-            }
-
-            set
-            {
-                _generator = value;
-                Runspace myRunspace = Context.CurrentRunspace;
-
-                try
-                {
-                    GetRandomCommand.s_runspaceGeneratorMapLock.EnterWriteLock();
-                    if (!GetRandomCommand.s_runspaceGeneratorMap.ContainsKey(myRunspace.InstanceId))
-                    {
-                        // make sure we won't leave the generator around after runspace exits
-                        myRunspace.StateChanged += CurrentRunspace_StateChanged;
-                    }
-
-                    GetRandomCommand.s_runspaceGeneratorMap[myRunspace.InstanceId] = _generator;
-                }
-                finally
-                {
-                    GetRandomCommand.s_runspaceGeneratorMapLock.ExitWriteLock();
-                }
-            }
-        }
-
-        #endregion
-
-        #region Common parameters
-
         /// <summary>
         /// Seed used to reinitialize random numbers generator.
         /// </summary>
@@ -201,194 +20,6 @@ private PolymorphicRandomNumberGenerator Generator
         [ValidateNotNull]
         public int? SetSeed { get; set; }
 
-        #endregion Common parameters
-
-        #region Parameters for RandomNumberParameterSet
-
-        /// <summary>
-        /// Maximum number to generate.
-        /// </summary>
-        [Parameter(ParameterSetName = RandomNumberParameterSet, Position = 0)]
-        public object Maximum { get; set; }
-
-        /// <summary>
-        /// Minimum number to generate.
-        /// </summary>
-        [Parameter(ParameterSetName = RandomNumberParameterSet)]
-        public object Minimum { get; set; }
-
-        private static bool IsInt(object o)
-        {
-            if (o == null || o is int)
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        private static bool IsInt64(object o)
-        {
-            if (o == null || o is Int64)
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        private static object ProcessOperand(object o)
-        {
-            if (o == null)
-            {
-                return null;
-            }
-
-            PSObject pso = PSObject.AsPSObject(o);
-            object baseObject = pso.BaseObject;
-
-            if (baseObject is string)
-            {
-                // The type argument passed in does not decide the number type we want to convert to. ScanNumber will return
-                // int/long/double based on the string form number passed in.
-                baseObject = System.Management.Automation.Language.Parser.ScanNumber((string)baseObject, typeof(int));
-            }
-
-            return baseObject;
-        }
-
-        private static double ConvertToDouble(object o, double defaultIfNull)
-        {
-            if (o == null)
-            {
-                return defaultIfNull;
-            }
-
-            double result = (double)LanguagePrimitives.ConvertTo(o, typeof(double), CultureInfo.InvariantCulture);
-            return result;
-        }
-
-        #endregion
-
-        #region Parameters and variables for RandomListItemParameterSet
-
-        private List<object> _chosenListItems;
-        private int _numberOfProcessedListItems;
-
-        /// <summary>
-        /// List from which random elements are chosen.
-        /// </summary>
-        [Parameter(ParameterSetName = RandomListItemParameterSet, ValueFromPipeline = true, Position = 0, Mandatory = true)]
-        [Parameter(ParameterSetName = ShuffleParameterSet, ValueFromPipeline = true, Position = 0, Mandatory = true)]
-        [System.Management.Automation.AllowNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public object[] InputObject { get; set; }
-
-        /// <summary>
-        /// Number of items to output (number of list items or of numbers).
-        /// </summary>
-        [Parameter(ParameterSetName = RandomNumberParameterSet)]
-        [Parameter(ParameterSetName = RandomListItemParameterSet)]
-        [ValidateRange(1, int.MaxValue)]
-        public int Count { get; set; } = 1;
-
-        #endregion
-
-        #region Shuffle parameter
-
-        /// <summary>
-        /// Gets or sets whether the command should return all input objects in randomized order.
-        /// </summary>
-        [Parameter(ParameterSetName = ShuffleParameterSet, Mandatory = true)]
-        public SwitchParameter Shuffle { get; set; }
-
-        #endregion
-
-        #region Cmdlet processing methods
-
-        private double GetRandomDouble(double minValue, double maxValue)
-        {
-            double randomNumber;
-            double diff = maxValue - minValue;
-
-            // I couldn't find a better fix for bug #216893 then
-            // to test and retry if a random number falls outside the bounds
-            // because of floating-point-arithmetic inaccuracies.
-            //
-            // Performance in the normal case is not impacted much.
-            // In low-precision situations we should converge to a solution quickly
-            // (diff gets smaller at a quick pace).
-
-            if (double.IsInfinity(diff))
-            {
-                do
-                {
-                    double r = Generator.NextDouble();
-                    randomNumber = minValue + r * maxValue - r * minValue;
-                }
-                while (randomNumber >= maxValue);
-            }
-            else
-            {
-                do
-                {
-                    double r = Generator.NextDouble();
-                    randomNumber = minValue + r * diff;
-                    diff *= r;
-                }
-                while (randomNumber >= maxValue);
-            }
-
-            return randomNumber;
-        }
-
-        /// <summary>
-        /// Get a random Int64 type number.
-        /// </summary>
-        /// <param name="minValue"></param>
-        /// <param name="maxValue"></param>
-        /// <returns></returns>
-        private Int64 GetRandomInt64(Int64 minValue, Int64 maxValue)
-        {
-            // Randomly generate eight bytes and convert the byte array to UInt64
-            var buffer = new byte[sizeof(UInt64)];
-            UInt64 randomUint64;
-
-            BigInteger bigIntegerDiff = (BigInteger)maxValue - (BigInteger)minValue;
-
-            // When the difference is less than int.MaxValue, use Random.Next(int, int)
-            if (bigIntegerDiff <= int.MaxValue)
-            {
-                int randomDiff = Generator.Next(0, (int)(maxValue - minValue));
-                return minValue + randomDiff;
-            }
-
-            // The difference of two Int64 numbers would not exceed UInt64.MaxValue, so it can be represented by a UInt64 number.
-            UInt64 uint64Diff = (UInt64)bigIntegerDiff;
-
-            // Calculate the number of bits to represent the diff in type UInt64
-            int bitsToRepresentDiff = 0;
-            UInt64 diffCopy = uint64Diff;
-            for (; diffCopy != 0; bitsToRepresentDiff++)
-            {
-                diffCopy >>= 1;
-            }
-            // Get the mask for the number of bits
-            UInt64 mask = (0xffffffffffffffff >> (64 - bitsToRepresentDiff));
-            do
-            {
-                // Randomly fill the buffer
-                Generator.NextBytes(buffer);
-                randomUint64 = BitConverter.ToUInt64(buffer, 0);
-
-                // Get the last 'bitsToRepresentDiff' number of random bits
-                randomUint64 &= mask;
-            } while (uint64Diff <= randomUint64);
-
-            double randomNumber = minValue * 1.0 + randomUint64 * 1.0;
-            return (Int64)randomNumber;
-        }
-
         /// <summary>
         /// This method implements the BeginProcessing method for get-random command.
         /// </summary>
@@ -399,335 +30,7 @@ protected override void BeginProcessing()
                 Generator = new PolymorphicRandomNumberGenerator(SetSeed.Value);
             }
 
-            if (EffectiveParameterSet == MyParameterSet.RandomNumber)
-            {
-                object maxOperand = ProcessOperand(Maximum);
-                object minOperand = ProcessOperand(Minimum);
-
-                if (IsInt(maxOperand) && IsInt(minOperand))
-                {
-                    int minValue = minOperand != null ? (int)minOperand : 0;
-                    int maxValue = maxOperand != null ? (int)maxOperand : int.MaxValue;
-
-                    if (minValue >= maxValue)
-                    {
-                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
-                    }
-
-                    for (int i = 0; i < Count; i++)
-                    {
-                        int randomNumber = Generator.Next(minValue, maxValue);
-                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
-                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
-
-                        WriteObject(randomNumber);
-                    }
-                }
-                else if ((IsInt64(maxOperand) || IsInt(maxOperand)) && (IsInt64(minOperand) || IsInt(minOperand)))
-                {
-                    Int64 minValue = minOperand != null ? ((minOperand is Int64) ? (Int64)minOperand : (int)minOperand) : 0;
-                    Int64 maxValue = maxOperand != null ? ((maxOperand is Int64) ? (Int64)maxOperand : (int)maxOperand) : Int64.MaxValue;
-
-                    if (minValue >= maxValue)
-                    {
-                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
-                    }
-
-                    for (int i = 0; i < Count; i++)
-                    {
-                        Int64 randomNumber = GetRandomInt64(minValue, maxValue);
-                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
-                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
-
-                        WriteObject(randomNumber);
-                    }
-                }
-                else
-                {
-                    double minValue = (minOperand is double) ? (double)minOperand : ConvertToDouble(Minimum, 0.0);
-                    double maxValue = (maxOperand is double) ? (double)maxOperand : ConvertToDouble(Maximum, double.MaxValue);
-
-                    if (minValue >= maxValue)
-                    {
-                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
-                    }
-
-                    for (int i = 0; i < Count; i++)
-                    {
-                        double randomNumber = GetRandomDouble(minValue, maxValue);
-                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
-                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
-
-                        WriteObject(randomNumber);
-                    }
-                }
-            }
-            else if (EffectiveParameterSet == MyParameterSet.RandomListItem)
-            {
-                _chosenListItems = new List<object>();
-                _numberOfProcessedListItems = 0;
-            }
-        }
-
-        // rough proof that when choosing random K items out of N items
-        // each item has got K/N probability of being included in the final list
-        //
-        // probability that a particular item in chosenListItems is NOT going to be replaced
-        // when processing I-th input item [assumes I > K]:
-        // P_one_step(I) = 1 - ((K / I) * ((K - 1) / K) + ((I - K) / I) = (I - 1) / I
-        //                      <--A-->   <-----B----->   <-----C----->
-        // A - probability that I-th element is going to be replacing an element from chosenListItems
-        //     (see (1) in the code below)
-        // B - probability that a particular element from chosenListItems is NOT going to be replaced
-        //     (see (2) in the code below)
-        // C - probability that I-th element is NOT going to be replacing an element from chosenListItems
-        //     (see (1) in the code below)
-        //
-        // probability that a particular item in chosenListItems is NOT going to be replaced
-        // when processing input items J through N [assumes J > K]
-        // P_removal(J) = Multiply(for I = J to N) P(I) =
-        //              = ((J - 1) / J) * (J / (J + 1)) * ... * ((N - 2) / (N - 1)) * ((N - 1) / N) =
-        //              = (J - 1) / N
-        //
-        // probability that when processing an element it is going to be put into chosenListItems
-        // P_insertion(I) = 1.0 when I <= K - see (3) in the code below
-        // P_insertion(I) = K/N otherwise - see (1) in the code below
-        //
-        // probability that a given element is going to be a part of the final list
-        // P_final(I)   = P_insertion(I) * P_removal(max(I + 1, K + 1))
-        // [for I <= K] = 1.0 * ((K + 1) - 1) / N = K / N
-        // [otherwise]  = (K / I) * ((I + 1) - 1) / N = K / N
-        //
-        // which proves that P_final(I) = K / N for all values of I.  QED.
-
-        /// <summary>
-        /// This method implements the ProcessRecord method for get-random command.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (EffectiveParameterSet == MyParameterSet.RandomListItem)
-            {
-                if (ParameterSetName == ShuffleParameterSet)
-                {
-                    // this allows for $null to be in an array passed to InputObject
-                    foreach (object item in InputObject ?? _nullInArray)
-                    {
-                        _chosenListItems.Add(item);
-                    }
-                }
-                else
-                {
-                    foreach (object item in InputObject ?? _nullInArray)
-                    {
-                        // (3)
-                        if (_numberOfProcessedListItems < Count)
-                        {
-                            Debug.Assert(_chosenListItems.Count == _numberOfProcessedListItems, "Initial K elements should all be included in chosenListItems");
-                            _chosenListItems.Add(item);
-                        }
-                        else
-                        {
-                            Debug.Assert(_chosenListItems.Count == Count, "After processing K initial elements, the length of chosenItems should stay equal to K");
-
-                            // (1)
-                            if (Generator.Next(_numberOfProcessedListItems + 1) < Count)
-                            {
-                                // (2)
-                                int indexToReplace = Generator.Next(_chosenListItems.Count);
-                                _chosenListItems[indexToReplace] = item;
-                            }
-                        }
-
-                        _numberOfProcessedListItems++;
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// This method implements the EndProcessing method for get-random command.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (EffectiveParameterSet == MyParameterSet.RandomListItem)
-            {
-                // make sure the order is truly random
-                // (all permutations with the same probability)
-                // O(n) time
-                int n = _chosenListItems.Count;
-                for (int i = 0; i < n; i++)
-                {
-                    // randomly choose j from [i...n)
-                    int j = Generator.Next(i, n);
-
-                    WriteObject(_chosenListItems[j]);
-
-                    // remove the output object from consideration in the next iteration.
-                    if (i != j)
-                    {
-                        _chosenListItems[j] = _chosenListItems[i];
-                    }
-                }
-            }
-        }
-
-        #endregion Processing methods
-    }
-
-    /// <summary>
-    /// Provides an adapter API for random numbers that may be either cryptographically random, or
-    /// generated with the regular pseudo-random number generator. Re-implementations of
-    /// methods using the NextBytes() primitive based on the CLR implementation:
-    ///     https://referencesource.microsoft.com/#mscorlib/system/random.cs.
-    /// </summary>
-    internal class PolymorphicRandomNumberGenerator
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PolymorphicRandomNumberGenerator"/> class.
-        /// </summary>
-        public PolymorphicRandomNumberGenerator()
-        {
-            _cryptographicGenerator = RandomNumberGenerator.Create();
-            _pseudoGenerator = null;
-        }
-
-        internal PolymorphicRandomNumberGenerator(int seed)
-        {
-            _cryptographicGenerator = null;
-            _pseudoGenerator = new Random(seed);
-        }
-
-        private readonly Random _pseudoGenerator = null;
-        private readonly RandomNumberGenerator _cryptographicGenerator = null;
-
-        /// <summary>
-        /// Generates a random floating-point number that is greater than or equal to 0.0, and less than 1.0.
-        /// </summary>
-        /// <returns>A random floating-point number that is greater than or equal to 0.0, and less than 1.0.</returns>
-        internal double NextDouble()
-        {
-            // According to the CLR source:
-            //     "Including this division at the end gives us significantly improved random number distribution."
-            return Next() * (1.0 / Int32.MaxValue);
-        }
-
-        /// <summary>
-        /// Generates a non-negative random integer.
-        /// </summary>
-        /// <returns>A non-negative random integer.</returns>
-        internal int Next()
-        {
-            int randomNumber;
-
-            // The CLR implementation just fudges
-            // Int32.MaxValue down to (Int32.MaxValue - 1). This implementation
-            // errs on the side of correctness.
-            do
-            {
-                randomNumber = InternalSample();
-            }
-            while (randomNumber == Int32.MaxValue);
-
-            if (randomNumber < 0)
-            {
-                randomNumber += Int32.MaxValue;
-            }
-
-            return randomNumber;
-        }
-
-        /// <summary>
-        /// Returns a random integer that is within a specified range.
-        /// </summary>
-        /// <param name="maxValue">The exclusive upper bound of the random number returned.</param>
-        /// <returns></returns>
-        internal int Next(int maxValue)
-        {
-            if (maxValue < 0)
-            {
-                throw new ArgumentOutOfRangeException(nameof(maxValue), GetRandomCommandStrings.MaxMustBeGreaterThanZeroApi);
-            }
-
-            return Next(0, maxValue);
-        }
-
-        /// <summary>
-        /// Returns a random integer that is within a specified range.
-        /// </summary>
-        /// <param name="minValue">The inclusive lower bound of the random number returned.</param>
-        /// <param name="maxValue">The exclusive upper bound of the random number returned. maxValue must be greater than or equal to minValue.</param>
-        /// <returns></returns>
-        public int Next(int minValue, int maxValue)
-        {
-            if (minValue > maxValue)
-            {
-                throw new ArgumentOutOfRangeException(nameof(minValue), GetRandomCommandStrings.MinGreaterThanOrEqualMaxApi);
-            }
-
-            int randomNumber = 0;
-
-            long range = (long)maxValue - (long)minValue;
-            if (range <= int.MaxValue)
-            {
-                randomNumber = ((int)(NextDouble() * range) + minValue);
-            }
-            else
-            {
-                double largeSample = InternalSampleLargeRange() * (1.0 / (2 * ((uint)Int32.MaxValue)));
-                randomNumber = (int)((long)(largeSample * range) + minValue);
-            }
-
-            return randomNumber;
-        }
-
-        /// <summary>
-        /// Fills the elements of a specified array of bytes with random numbers.
-        /// </summary>
-        /// <param name="buffer">The array to be filled.</param>
-        internal void NextBytes(byte[] buffer)
-        {
-            if (_cryptographicGenerator != null)
-            {
-                _cryptographicGenerator.GetBytes(buffer);
-            }
-            else
-            {
-                _pseudoGenerator.NextBytes(buffer);
-            }
-        }
-
-        /// <summary>
-        /// Samples a random integer.
-        /// </summary>
-        /// <returns>A random integer, using the full range of Int32.</returns>
-        private int InternalSample()
-        {
-            int randomNumber;
-            byte[] data = new byte[sizeof(int)];
-
-            NextBytes(data);
-            randomNumber = BitConverter.ToInt32(data, 0);
-
-            return randomNumber;
-        }
-
-        /// <summary>
-        /// Samples a random int when the range is large. This does
-        /// not need to be in the range of -Double.MaxValue .. Double.MaxValue,
-        /// just 0.. (2 * Int32.MaxValue) - 1 .
-        /// </summary>
-        /// <returns></returns>
-        private double InternalSampleLargeRange()
-        {
-            double randomNumber;
-
-            do
-            {
-                randomNumber = InternalSample();
-            } while (randomNumber == Int32.MaxValue);
-
-            randomNumber += Int32.MaxValue;
-            return randomNumber;
+            base.BeginProcessing();
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommandBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommandBase.cs
new file mode 100644
index 00000000000..8e50b1cf5a9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetRandomCommandBase.cs
@@ -0,0 +1,719 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Management.Automation;
+using System.Management.Automation.Runspaces;
+using System.Numerics;
+using System.Reflection;
+using System.Security.Cryptography;
+using System.Threading;
+
+using Debug = System.Management.Automation.Diagnostics;
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// This class implements base class for `Get-Random` and `Get-SecureRandom` cmdlets.
+    /// </summary>
+    public class GetRandomCommandBase : PSCmdlet
+    {
+        #region Parameter set handling
+
+        internal const string RandomNumberParameterSet = "RandomNumberParameterSet";
+        private const string RandomListItemParameterSet = "RandomListItemParameterSet";
+        private const string ShuffleParameterSet = "ShuffleParameterSet";
+
+        private static readonly object[] _nullInArray = new object[] { null };
+
+        private enum MyParameterSet
+        {
+            Unknown,
+            RandomNumber,
+            RandomListItem
+        }
+
+        private MyParameterSet _effectiveParameterSet;
+
+        private MyParameterSet EffectiveParameterSet
+        {
+            get
+            {
+                // cache MyParameterSet enum instead of doing string comparison every time
+                if (_effectiveParameterSet == MyParameterSet.Unknown)
+                {
+                    if (MyInvocation.ExpectingInput && (Maximum == null) && (Minimum == null))
+                    {
+                        _effectiveParameterSet = MyParameterSet.RandomListItem;
+                    }
+                    else if (ParameterSetName == GetRandomCommandBase.RandomListItemParameterSet
+                        || ParameterSetName == GetRandomCommandBase.ShuffleParameterSet)
+                    {
+                        _effectiveParameterSet = MyParameterSet.RandomListItem;
+                    }
+                    else if (ParameterSetName.Equals(GetRandomCommandBase.RandomNumberParameterSet, StringComparison.OrdinalIgnoreCase))
+                    {
+                        if ((Maximum != null) && Maximum.GetType().IsArray)
+                        {
+                            InputObject = (object[])Maximum;
+                            _effectiveParameterSet = MyParameterSet.RandomListItem;
+                        }
+                        else
+                        {
+                            _effectiveParameterSet = MyParameterSet.RandomNumber;
+                        }
+                    }
+                    else
+                    {
+                        Debug.Assert(false, "Unrecognized parameter set");
+                    }
+                }
+
+                return _effectiveParameterSet;
+            }
+        }
+
+        #endregion Parameter set handling
+
+        #region Error handling
+
+        private void ThrowMinGreaterThanOrEqualMax(object minValue, object maxValue)
+        {
+            if (minValue == null)
+            {
+                throw PSTraceSource.NewArgumentNullException("min");
+            }
+
+            if (maxValue == null)
+            {
+                throw PSTraceSource.NewArgumentNullException("max");
+            }
+
+            ErrorRecord errorRecord = new(
+                new ArgumentException(string.Format(
+                    CultureInfo.InvariantCulture, GetRandomCommandStrings.MinGreaterThanOrEqualMax, minValue, maxValue)),
+                "MinGreaterThanOrEqualMax",
+                ErrorCategory.InvalidArgument,
+                null);
+
+            ThrowTerminatingError(errorRecord);
+        }
+
+        #endregion
+
+        #region Random generator state
+
+        private static readonly ReaderWriterLockSlim s_runspaceGeneratorMapLock = new();
+
+        // 1-to-1 mapping of cmdlet + runspacesId and random number generators
+        private static readonly Dictionary<string, PolymorphicRandomNumberGenerator> s_runspaceGeneratorMap = new();
+
+        private static void CurrentRunspace_StateChanged(object sender, RunspaceStateEventArgs e)
+        {
+            switch (e.RunspaceStateInfo.State)
+            {
+                case RunspaceState.Broken:
+                case RunspaceState.Closed:
+                    try
+                    {
+                        GetRandomCommandBase.s_runspaceGeneratorMapLock.EnterWriteLock();
+                        GetRandomCommandBase.s_runspaceGeneratorMap.Remove(MethodBase.GetCurrentMethod().DeclaringType.Name + ((Runspace)sender).InstanceId.ToString());
+                    }
+                    finally
+                    {
+                        GetRandomCommandBase.s_runspaceGeneratorMapLock.ExitWriteLock();
+                    }
+
+                    break;
+            }
+        }
+
+        private PolymorphicRandomNumberGenerator _generator;
+
+        /// <summary>
+        /// Gets and sets generator associated with the current cmdlet and runspace.
+        /// </summary>
+        internal PolymorphicRandomNumberGenerator Generator
+        {
+            get
+            {
+                if (_generator == null)
+                {
+                    string runspaceId = Context.CurrentRunspace.InstanceId.ToString();
+
+                    bool needToInitialize = false;
+                    try
+                    {
+                        GetRandomCommandBase.s_runspaceGeneratorMapLock.EnterReadLock();
+                        needToInitialize = !GetRandomCommandBase.s_runspaceGeneratorMap.TryGetValue(this.GetType().Name + runspaceId, out _generator);
+                    }
+                    finally
+                    {
+                        GetRandomCommandBase.s_runspaceGeneratorMapLock.ExitReadLock();
+                    }
+
+                    if (needToInitialize)
+                    {
+                        Generator = new PolymorphicRandomNumberGenerator();
+                    }
+                }
+
+                return _generator;
+            }
+
+            set
+            {
+                _generator = value;
+                Runspace myRunspace = Context.CurrentRunspace;
+
+                try
+                {
+                    GetRandomCommandBase.s_runspaceGeneratorMapLock.EnterWriteLock();
+                    if (!GetRandomCommandBase.s_runspaceGeneratorMap.ContainsKey(this.GetType().Name + myRunspace.InstanceId.ToString()))
+                    {
+                        // make sure we won't leave the generator around after runspace exits
+                        myRunspace.StateChanged += CurrentRunspace_StateChanged;
+                    }
+
+                    GetRandomCommandBase.s_runspaceGeneratorMap[this.GetType().Name + myRunspace.InstanceId.ToString()] = _generator;
+                }
+                finally
+                {
+                    GetRandomCommandBase.s_runspaceGeneratorMapLock.ExitWriteLock();
+                }
+            }
+        }
+
+        #endregion
+
+        #region Parameters for RandomNumberParameterSet
+
+        /// <summary>
+        /// Gets or sets the maximum number to generate.
+        /// </summary>
+        [Parameter(ParameterSetName = RandomNumberParameterSet, Position = 0)]
+        public object Maximum { get; set; }
+
+        /// <summary>
+        /// Gets or sets the minimum number to generate.
+        /// </summary>
+        [Parameter(ParameterSetName = RandomNumberParameterSet)]
+        public object Minimum { get; set; }
+
+        private static bool IsInt(object o)
+        {
+            if (o == null || o is int)
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        private static bool IsInt64(object o)
+        {
+            if (o == null || o is long)
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        private static object ProcessOperand(object o)
+        {
+            if (o == null)
+            {
+                return null;
+            }
+
+            PSObject pso = PSObject.AsPSObject(o);
+            object baseObject = pso.BaseObject;
+
+            if (baseObject is string)
+            {
+                // The type argument passed in does not decide the number type we want to convert to. ScanNumber will return
+                // int/long/double based on the string form number passed in.
+                baseObject = System.Management.Automation.Language.Parser.ScanNumber((string)baseObject, typeof(int));
+            }
+
+            return baseObject;
+        }
+
+        private static double ConvertToDouble(object o, double defaultIfNull)
+        {
+            if (o == null)
+            {
+                return defaultIfNull;
+            }
+
+            double result = (double)LanguagePrimitives.ConvertTo(o, typeof(double), CultureInfo.InvariantCulture);
+            return result;
+        }
+
+        #endregion
+
+        #region Parameters and variables for RandomListItemParameterSet
+
+        private List<object> _chosenListItems;
+        private int _numberOfProcessedListItems;
+
+        /// <summary>
+        /// Gets or sets the list from which random elements are chosen.
+        /// </summary>
+        [Parameter(ParameterSetName = RandomListItemParameterSet, ValueFromPipeline = true, Position = 0, Mandatory = true)]
+        [Parameter(ParameterSetName = ShuffleParameterSet, ValueFromPipeline = true, Position = 0, Mandatory = true)]
+        [System.Management.Automation.AllowNull]
+        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
+        public object[] InputObject { get; set; }
+
+        /// <summary>
+        /// Gets or sets the number of items to output (number of list items or of numbers).
+        /// </summary>
+        [Parameter(ParameterSetName = RandomNumberParameterSet)]
+        [Parameter(ParameterSetName = RandomListItemParameterSet)]
+        [ValidateRange(1, int.MaxValue)]
+        public int Count { get; set; } = 1;
+
+        #endregion
+
+        #region Shuffle parameter
+
+        /// <summary>
+        /// Gets or sets whether the command should return all input objects in randomized order.
+        /// </summary>
+        [Parameter(ParameterSetName = ShuffleParameterSet, Mandatory = true)]
+        public SwitchParameter Shuffle { get; set; }
+
+        #endregion
+
+        #region Cmdlet processing methods
+
+        private double GetRandomDouble(double minValue, double maxValue)
+        {
+            double randomNumber;
+            double diff = maxValue - minValue;
+
+            // I couldn't find a better fix for bug #216893 then
+            // to test and retry if a random number falls outside the bounds
+            // because of floating-point-arithmetic inaccuracies.
+            //
+            // Performance in the normal case is not impacted much.
+            // In low-precision situations we should converge to a solution quickly
+            // (diff gets smaller at a quick pace).
+            if (double.IsInfinity(diff))
+            {
+                do
+                {
+                    double r = Generator.NextDouble();
+                    randomNumber = minValue + (r * maxValue) - (r * minValue);
+                }
+                while (randomNumber >= maxValue);
+            }
+            else
+            {
+                do
+                {
+                    double r = Generator.NextDouble();
+                    randomNumber = minValue + (r * diff);
+                    diff *= r;
+                }
+                while (randomNumber >= maxValue);
+            }
+
+            return randomNumber;
+        }
+
+        /// <summary>
+        /// Get a random Int64 type number.
+        /// </summary>
+        /// <param name="minValue">Minimum value.</param>
+        /// <param name="maxValue">Maximum value.</param>
+        /// <returns>Rnadom long.</returns>
+        private long GetRandomInt64(long minValue, long maxValue)
+        {
+            // Randomly generate eight bytes and convert the byte array to UInt64
+            var buffer = new byte[sizeof(ulong)];
+            ulong randomUint64;
+
+            BigInteger bigIntegerDiff = (BigInteger)maxValue - (BigInteger)minValue;
+
+            // When the difference is less than int.MaxValue, use Random.Next(int, int)
+            if (bigIntegerDiff <= int.MaxValue)
+            {
+                int randomDiff = Generator.Next(0, (int)(maxValue - minValue));
+                return minValue + randomDiff;
+            }
+
+            // The difference of two Int64 numbers would not exceed UInt64.MaxValue, so it can be represented by a UInt64 number.
+            ulong uint64Diff = (ulong)bigIntegerDiff;
+
+            // Calculate the number of bits to represent the diff in type UInt64
+            int bitsToRepresentDiff = 0;
+            ulong diffCopy = uint64Diff;
+            for (; diffCopy != 0; bitsToRepresentDiff++)
+            {
+                diffCopy >>= 1;
+            }
+
+            // Get the mask for the number of bits
+            ulong mask = 0xffffffffffffffff >> (64 - bitsToRepresentDiff);
+            do
+            {
+                // Randomly fill the buffer
+                Generator.NextBytes(buffer);
+                randomUint64 = BitConverter.ToUInt64(buffer, 0);
+
+                // Get the last 'bitsToRepresentDiff' number of random bits
+                randomUint64 &= mask;
+            } while (uint64Diff <= randomUint64);
+
+            double randomNumber = (minValue * 1.0) + (randomUint64 * 1.0);
+            return (long)randomNumber;
+        }
+
+        /// <summary>
+        /// This method implements the BeginProcessing method for derived cmdlets.
+        /// </summary>
+        protected override void BeginProcessing()
+        {
+            if (EffectiveParameterSet == MyParameterSet.RandomNumber)
+            {
+                object maxOperand = ProcessOperand(Maximum);
+                object minOperand = ProcessOperand(Minimum);
+
+                if (IsInt(maxOperand) && IsInt(minOperand))
+                {
+                    int minValue = minOperand != null ? (int)minOperand : 0;
+                    int maxValue = maxOperand != null ? (int)maxOperand : int.MaxValue;
+
+                    if (minValue >= maxValue)
+                    {
+                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
+                    }
+
+                    for (int i = 0; i < Count; i++)
+                    {
+                        int randomNumber = Generator.Next(minValue, maxValue);
+                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
+                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
+
+                        WriteObject(randomNumber);
+                    }
+                }
+                else if ((IsInt64(maxOperand) || IsInt(maxOperand)) && (IsInt64(minOperand) || IsInt(minOperand)))
+                {
+                    long minValue = minOperand != null ? ((minOperand is long) ? (long)minOperand : (int)minOperand) : 0;
+                    long maxValue = maxOperand != null ? ((maxOperand is long) ? (long)maxOperand : (int)maxOperand) : long.MaxValue;
+
+                    if (minValue >= maxValue)
+                    {
+                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
+                    }
+
+                    for (int i = 0; i < Count; i++)
+                    {
+                        long randomNumber = GetRandomInt64(minValue, maxValue);
+                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
+                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
+
+                        WriteObject(randomNumber);
+                    }
+                }
+                else
+                {
+                    double minValue = (minOperand is double) ? (double)minOperand : ConvertToDouble(Minimum, 0.0);
+                    double maxValue = (maxOperand is double) ? (double)maxOperand : ConvertToDouble(Maximum, double.MaxValue);
+
+                    if (minValue >= maxValue)
+                    {
+                        ThrowMinGreaterThanOrEqualMax(minValue, maxValue);
+                    }
+
+                    for (int i = 0; i < Count; i++)
+                    {
+                        double randomNumber = GetRandomDouble(minValue, maxValue);
+                        Debug.Assert(minValue <= randomNumber, "lower bound <= random number");
+                        Debug.Assert(randomNumber < maxValue, "random number < upper bound");
+
+                        WriteObject(randomNumber);
+                    }
+                }
+            }
+            else if (EffectiveParameterSet == MyParameterSet.RandomListItem)
+            {
+                _chosenListItems = new List<object>();
+                _numberOfProcessedListItems = 0;
+            }
+        }
+
+        // rough proof that when choosing random K items out of N items
+        // each item has got K/N probability of being included in the final list
+        //
+        // probability that a particular item in chosenListItems is NOT going to be replaced
+        // when processing I-th input item [assumes I > K]:
+        // P_one_step(I) = 1 - ((K / I) * ((K - 1) / K) + ((I - K) / I) = (I - 1) / I
+        //                      <--A-->   <-----B----->   <-----C----->
+        // A - probability that I-th element is going to be replacing an element from chosenListItems
+        //     (see (1) in the code below)
+        // B - probability that a particular element from chosenListItems is NOT going to be replaced
+        //     (see (2) in the code below)
+        // C - probability that I-th element is NOT going to be replacing an element from chosenListItems
+        //     (see (1) in the code below)
+        //
+        // probability that a particular item in chosenListItems is NOT going to be replaced
+        // when processing input items J through N [assumes J > K]
+        // P_removal(J) = Multiply(for I = J to N) P(I) =
+        //              = ((J - 1) / J) * (J / (J + 1)) * ... * ((N - 2) / (N - 1)) * ((N - 1) / N) =
+        //              = (J - 1) / N
+        //
+        // probability that when processing an element it is going to be put into chosenListItems
+        // P_insertion(I) = 1.0 when I <= K - see (3) in the code below
+        // P_insertion(I) = K/N otherwise - see (1) in the code below
+        //
+        // probability that a given element is going to be a part of the final list
+        // P_final(I)   = P_insertion(I) * P_removal(max(I + 1, K + 1))
+        // [for I <= K] = 1.0 * ((K + 1) - 1) / N = K / N
+        // [otherwise]  = (K / I) * ((I + 1) - 1) / N = K / N
+        //
+        // which proves that P_final(I) = K / N for all values of I.  QED.
+
+        /// <summary>
+        /// This method implements the ProcessRecord method for derived cmdlets.
+        /// </summary>
+        protected override void ProcessRecord()
+        {
+            if (EffectiveParameterSet == MyParameterSet.RandomListItem)
+            {
+                if (Shuffle)
+                {
+                    // this allows for $null to be in an array passed to InputObject
+                    foreach (object item in InputObject ?? _nullInArray)
+                    {
+                        _chosenListItems.Add(item);
+                    }
+                }
+                else
+                {
+                    foreach (object item in InputObject ?? _nullInArray)
+                    {
+                        // (3)
+                        if (_numberOfProcessedListItems < Count)
+                        {
+                            Debug.Assert(_chosenListItems.Count == _numberOfProcessedListItems, "Initial K elements should all be included in chosenListItems");
+                            _chosenListItems.Add(item);
+                        }
+                        else
+                        {
+                            Debug.Assert(_chosenListItems.Count == Count, "After processing K initial elements, the length of chosenItems should stay equal to K");
+
+                            // (1)
+                            if (Generator.Next(_numberOfProcessedListItems + 1) < Count)
+                            {
+                                // (2)
+                                int indexToReplace = Generator.Next(_chosenListItems.Count);
+                                _chosenListItems[indexToReplace] = item;
+                            }
+                        }
+
+                        _numberOfProcessedListItems++;
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// This method implements the EndProcessing method for derived cmdlets.
+        /// </summary>
+        protected override void EndProcessing()
+        {
+            if (EffectiveParameterSet == MyParameterSet.RandomListItem)
+            {
+                // make sure the order is truly random
+                // (all permutations with the same probability)
+                // O(n) time
+                int n = _chosenListItems.Count;
+                for (int i = 0; i < n; i++)
+                {
+                    // randomly choose j from [i...n)
+                    int j = Generator.Next(i, n);
+
+                    WriteObject(_chosenListItems[j]);
+
+                    // remove the output object from consideration in the next iteration.
+                    if (i != j)
+                    {
+                        _chosenListItems[j] = _chosenListItems[i];
+                    }
+                }
+            }
+        }
+
+        #endregion Processing methods
+    }
+
+    /// <summary>
+    /// Provides an adapter API for random numbers that may be either cryptographically random, or
+    /// generated with the regular pseudo-random number generator. Re-implementations of
+    /// methods using the NextBytes() primitive based on the CLR implementation:
+    ///     https://referencesource.microsoft.com/#mscorlib/system/random.cs.
+    /// </summary>
+    internal sealed class PolymorphicRandomNumberGenerator
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PolymorphicRandomNumberGenerator"/> class.
+        /// </summary>
+        public PolymorphicRandomNumberGenerator()
+        {
+            _cryptographicGenerator = RandomNumberGenerator.Create();
+            _pseudoGenerator = null;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PolymorphicRandomNumberGenerator"/> using pseudorandom generator instead of the cryptographic one.
+        /// </summary>
+        /// <param name="seed">The seed value.</param>
+        internal PolymorphicRandomNumberGenerator(int seed)
+        {
+            _cryptographicGenerator = null;
+            _pseudoGenerator = new Random(seed);
+        }
+
+        private readonly Random _pseudoGenerator = null;
+        private readonly RandomNumberGenerator _cryptographicGenerator = null;
+
+        /// <summary>
+        /// Generates a random floating-point number that is greater than or equal to 0.0, and less than 1.0.
+        /// </summary>
+        /// <returns>A random floating-point number that is greater than or equal to 0.0, and less than 1.0.</returns>
+        internal double NextDouble()
+        {
+            // According to the CLR source:
+            //     "Including this division at the end gives us significantly improved random number distribution."
+            return Next() * (1.0 / int.MaxValue);
+        }
+
+        /// <summary>
+        /// Generates a non-negative random integer.
+        /// </summary>
+        /// <returns>A non-negative random integer.</returns>
+        internal int Next()
+        {
+            int randomNumber;
+
+            // The CLR implementation just fudges
+            // Int32.MaxValue down to (Int32.MaxValue - 1). This implementation
+            // errs on the side of correctness.
+            do
+            {
+                randomNumber = InternalSample();
+            }
+            while (randomNumber == int.MaxValue);
+
+            if (randomNumber < 0)
+            {
+                randomNumber += int.MaxValue;
+            }
+
+            return randomNumber;
+        }
+
+        /// <summary>
+        /// Returns a random integer that is within a specified range.
+        /// </summary>
+        /// <param name="maxValue">The exclusive upper bound of the random number returned.</param>
+        /// <returns>Next random integer.</returns>
+        internal int Next(int maxValue)
+        {
+            if (maxValue < 0)
+            {
+                throw new ArgumentOutOfRangeException(nameof(maxValue), GetRandomCommandStrings.MaxMustBeGreaterThanZeroApi);
+            }
+
+            return Next(0, maxValue);
+        }
+
+        /// <summary>
+        /// Returns a random integer that is within a specified range.
+        /// </summary>
+        /// <param name="minValue">The inclusive lower bound of the random number returned.</param>
+        /// <param name="maxValue">The exclusive upper bound of the random number returned. maxValue must be greater than or equal to minValue.</param>
+        /// <returns>Next random integer.</returns>
+        public int Next(int minValue, int maxValue)
+        {
+            if (minValue > maxValue)
+            {
+                throw new ArgumentOutOfRangeException(nameof(minValue), GetRandomCommandStrings.MinGreaterThanOrEqualMaxApi);
+            }
+
+            int randomNumber = 0;
+
+            long range = (long)maxValue - (long)minValue;
+            if (range <= int.MaxValue)
+            {
+                randomNumber = (int)(NextDouble() * range) + minValue;
+            }
+            else
+            {
+                double largeSample = InternalSampleLargeRange() * (1.0 / (2 * ((uint)int.MaxValue)));
+                randomNumber = (int)((long)(largeSample * range) + minValue);
+            }
+
+            return randomNumber;
+        }
+
+        /// <summary>
+        /// Fills the elements of a specified array of bytes with random numbers.
+        /// </summary>
+        /// <param name="buffer">The array to be filled.</param>
+        internal void NextBytes(byte[] buffer)
+        {
+            if (_cryptographicGenerator != null)
+            {
+                _cryptographicGenerator.GetBytes(buffer);
+            }
+            else
+            {
+                _pseudoGenerator.NextBytes(buffer);
+            }
+        }
+
+        /// <summary>
+        /// Samples a random integer.
+        /// </summary>
+        /// <returns>A random integer, using the full range of Int32.</returns>
+        private int InternalSample()
+        {
+            int randomNumber;
+            byte[] data = new byte[sizeof(int)];
+
+            NextBytes(data);
+            randomNumber = BitConverter.ToInt32(data, 0);
+
+            return randomNumber;
+        }
+
+        /// <summary>
+        /// Samples a random int when the range is large. This does
+        /// not need to be in the range of -Double.MaxValue .. Double.MaxValue,
+        /// just 0.. (2 * Int32.MaxValue) - 1 .
+        /// </summary>
+        /// <returns>A random double.</returns>
+        private double InternalSampleLargeRange()
+        {
+            double randomNumber;
+
+            do
+            {
+                randomNumber = InternalSample();
+            }
+            while (randomNumber == int.MaxValue);
+
+            randomNumber += int.MaxValue;
+            return randomNumber;
+        }
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetSecureRandomCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetSecureRandomCommand.cs
new file mode 100644
index 00000000000..e0ea7e68dbf
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetSecureRandomCommand.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System.Management.Automation;
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// This class implements `Get-SecureRandom` cmdlet.
+    /// </summary>
+    [Cmdlet(VerbsCommon.Get, "SecureRandom", DefaultParameterSetName = GetRandomCommandBase.RandomNumberParameterSet,
+        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2235055", RemotingCapability = RemotingCapability.None)]
+    [OutputType(typeof(int), typeof(long), typeof(double))]
+    public sealed class GetSecureRandomCommand : GetRandomCommandBase
+    {
+        // nothing unique from base class
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs
index b43a870dccb..09bc78d9693 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUnique.cs
@@ -50,6 +50,13 @@ public SwitchParameter OnType
         }
 
         private bool _onType = false;
+
+        /// <summary>
+        /// Gets or sets case insensitive switch for string comparison.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter CaseInsensitive { get; set; }
+
         #endregion Parameters
 
         #region Overrides
@@ -72,15 +79,12 @@ protected override void ProcessRecord()
             else if (AsString)
             {
                 string inputString = InputObject.ToString();
-                if (_lastObjectAsString == null)
-                {
-                    _lastObjectAsString = _lastObject.ToString();
-                }
+                _lastObjectAsString ??= _lastObject.ToString();
 
                 if (string.Equals(
                     inputString,
                     _lastObjectAsString,
-                    StringComparison.CurrentCulture))
+                    CaseInsensitive.IsPresent ? StringComparison.CurrentCultureIgnoreCase : StringComparison.CurrentCulture))
                 {
                     isUnique = false;
                 }
@@ -91,13 +95,10 @@ protected override void ProcessRecord()
             }
             else // compare as objects
             {
-                if (_comparer == null)
-                {
-                    _comparer = new ObjectCommandComparer(
-                        true, // ascending (doesn't matter)
-                        CultureInfo.CurrentCulture,
-                        true); // case-sensitive
-                }
+                _comparer ??= new ObjectCommandComparer(
+                    ascending: true,
+                    CultureInfo.CurrentCulture,
+                    caseSensitive: !CaseInsensitive.IsPresent);
 
                 isUnique = (_comparer.Compare(InputObject, _lastObject) != 0);
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUptime.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUptime.cs
index e8dcfbe254a..c21165301e2 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUptime.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetUptime.cs
@@ -36,16 +36,15 @@ protected override void ProcessRecord()
             {
                 TimeSpan uptime = TimeSpan.FromSeconds(Stopwatch.GetTimestamp() / Stopwatch.Frequency);
 
-                switch (ParameterSetName)
+                if (Since)
                 {
-                    case TimespanParameterSet:
-                        // return TimeSpan of time since the system started up
-                        WriteObject(uptime);
-                        break;
-                    case SinceParameterSet:
-                        // return Datetime when the system started up
-                        WriteObject(DateTime.Now.Subtract(uptime));
-                        break;
+                    // Output the time of the last system boot.
+                    WriteObject(DateTime.Now.Subtract(uptime));
+                }
+                else
+                {
+                    // Output the time elapsed since the last system boot.
+                    WriteObject(uptime);
                 }
             }
             else
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetVerbCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetVerbCommand.cs
index 1ec93b0f1d7..61a0fe1a390 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetVerbCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetVerbCommand.cs
@@ -1,10 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System;
-using System.Collections.ObjectModel;
 using System.Management.Automation;
-using System.Reflection;
+using static System.Management.Automation.Verbs;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -19,6 +17,7 @@ public class GetVerbCommand : Cmdlet
         /// Optional Verb filter.
         /// </summary>
         [Parameter(ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
+        [ArgumentCompleter(typeof(VerbArgumentCompleter))]
         public string[] Verb
         {
             get; set;
@@ -39,45 +38,9 @@ public string[] Group
         /// </summary>
         protected override void ProcessRecord()
         {
-            Type[] verbTypes = new Type[] { typeof(VerbsCommon), typeof(VerbsCommunications), typeof(VerbsData),
-                typeof(VerbsDiagnostic), typeof(VerbsLifecycle), typeof(VerbsOther), typeof(VerbsSecurity) };
-
-            Collection<WildcardPattern> matchingVerbs = SessionStateUtilities.CreateWildcardsFromStrings(
-                            this.Verb,
-                            WildcardOptions.IgnoreCase
-                        );
-
-            foreach (Type type in verbTypes)
+            foreach (VerbInfo verb in FilterByVerbsAndGroups(Verb, Group))
             {
-                string groupName = type.Name.Substring(5);
-                if (this.Group != null)
-                {
-                    if (!SessionStateUtilities.CollectionContainsValue(this.Group, groupName, StringComparer.OrdinalIgnoreCase))
-                    {
-                        continue;
-                    }
-                }
-
-                foreach (FieldInfo field in type.GetFields())
-                {
-                    if (field.IsLiteral)
-                    {
-                        if (this.Verb != null)
-                        {
-                            if (!SessionStateUtilities.MatchesAnyWildcardPattern(field.Name, matchingVerbs, false))
-                            {
-                                continue;
-                            }
-                        }
-
-                        VerbInfo verb = new();
-                        verb.Verb = field.Name;
-                        verb.AliasPrefix = VerbAliasPrefixes.GetVerbAliasPrefix(field.Name);
-                        verb.Group = groupName;
-                        verb.Description = VerbDescriptions.GetVerbDescription(field.Name);
-                        WriteObject(verb);
-                    }
-                }
+                WriteObject(verb);
             }
         }
     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs
index d63ff694281..1f527258939 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Group-Object.cs
@@ -153,7 +153,7 @@ private static string BuildName(List<ObjectCommandPropertyValue> propValues)
 
                         foreach (object item in propertyValueItems)
                         {
-                            sb.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", item.ToString());
+                            sb.Append(CultureInfo.CurrentCulture, $"{item}, ");
                         }
 
                         sb = sb.Length > length ? sb.Remove(sb.Length - 2, 2) : sb;
@@ -161,7 +161,7 @@ private static string BuildName(List<ObjectCommandPropertyValue> propValues)
                     }
                     else
                     {
-                        sb.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", propValuePropertyValue.ToString());
+                        sb.Append(CultureInfo.CurrentCulture, $"{propValuePropertyValue}, ");
                     }
                 }
             }
@@ -392,10 +392,7 @@ protected override void ProcessRecord()
 
                 if (!_hasProcessedFirstInputObject)
                 {
-                    if (Property == null)
-                    {
-                        Property = OrderByProperty.GetDefaultKeyPropertySet(InputObject);
-                    }
+                    Property ??= OrderByProperty.GetDefaultKeyPropertySet(InputObject);
 
                     _orderByProperty.ProcessExpressionParameter(this, Property);
 
@@ -443,7 +440,7 @@ private void UpdateOrderPropertyTypeInfo(List<ObjectCommandPropertyValue> curren
         {
             if (_propertyTypesCandidate == null)
             {
-                _propertyTypesCandidate = currentEntryOrderValues.Select(c => PSObject.Base(c.PropertyValue)?.GetType()).ToArray();
+                _propertyTypesCandidate = currentEntryOrderValues.Select(static c => PSObject.Base(c.PropertyValue)?.GetType()).ToArray();
                 return;
             }
 
@@ -491,7 +488,7 @@ protected override void EndProcessing()
             {
                 // using OrderBy to get stable sort.
                 // fast path when we only have the same object types to group
-                foreach (var entry in _entriesToOrder.OrderBy(e => e, _orderByPropertyComparer))
+                foreach (var entry in _entriesToOrder.Order(_orderByPropertyComparer))
                 {
                     DoOrderedGrouping(entry, NoElement, _groups, _tupleToGroupInfoMappingDictionary, _orderByPropertyComparer);
                     if (Stopping)
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs
index d772258227b..d01d144caca 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImplicitRemotingCommands.cs
@@ -73,8 +73,8 @@ public SwitchParameter Force
         /// Encoding optional flag.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -90,7 +90,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         #endregion Parameters
 
@@ -443,10 +443,7 @@ public string[] Module
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _PSSnapins = value;
                 _commandParameterSpecified = true;
@@ -729,8 +726,7 @@ private ErrorRecord GetErrorFromRemoteCommand(string commandName, RuntimeExcepti
             //
             // handle recognized types of exceptions first
             //
-            RemoteException remoteException = runtimeException as RemoteException;
-            if ((remoteException != null) && (remoteException.SerializedRemoteException != null))
+            if ((runtimeException is RemoteException remoteException) && (remoteException.SerializedRemoteException != null))
             {
                 if (Deserializer.IsInstanceOfType(remoteException.SerializedRemoteException, typeof(CommandNotFoundException)))
                 {
@@ -1044,10 +1040,7 @@ private List<T> RehydrateList<T>(string commandName, PSObject deserializedObject
 
         private List<T> RehydrateList<T>(string commandName, object deserializedList, Func<PSObject, T> itemRehydrator)
         {
-            if (itemRehydrator == null)
-            {
-                itemRehydrator = (PSObject pso) => ConvertTo<T>(commandName, pso);
-            }
+            itemRehydrator ??= (PSObject pso) => ConvertTo<T>(commandName, pso);
 
             List<T> result = null;
 
@@ -1068,17 +1061,14 @@ private List<T> RehydrateList<T>(string commandName, object deserializedList, Fu
 
         private Dictionary<TKey, TValue> RehydrateDictionary<TKey, TValue>(
             string commandName,
-            PSObject deserializedObject, 
+            PSObject deserializedObject,
             string propertyName,
             Func<PSObject, TValue> valueRehydrator)
         {
             Dbg.Assert(deserializedObject != null, "deserializedObject parameter != null");
             Dbg.Assert(!string.IsNullOrEmpty(propertyName), "propertyName parameter != null");
 
-            if (valueRehydrator == null)
-            {
-                valueRehydrator = (PSObject pso) => ConvertTo<TValue>(commandName, pso);
-            }
+            valueRehydrator ??= (PSObject pso) => ConvertTo<TValue>(commandName, pso);
 
             Dictionary<TKey, TValue> result = new();
             PSPropertyInfo deserializedDictionaryProperty = deserializedObject.Properties[propertyName];
@@ -1310,13 +1300,23 @@ private ParameterMetadata RehydrateParameterMetadata(PSObject deserializedParame
                 parameterType);
         }
 
-        private static bool IsProxyForCmdlet(Dictionary<string, ParameterMetadata> parameters)
+        private bool IsProxyForCmdlet(Dictionary<string, ParameterMetadata> parameters)
         {
             // we are not sending CmdletBinding/DefaultParameterSet over the wire anymore
             // we need to infer IsProxyForCmdlet from presence of all common parameters
 
-            foreach (string commonParameterName in Cmdlet.CommonParameters)
+            // need to exclude `ProgressAction` which may not exist for downlevel platforms
+            bool isDownLevelRemote = Session.Runspace is RemoteRunspace remoteRunspace
+                && remoteRunspace.ServerVersion is not null
+                && remoteRunspace.ServerVersion <= new Version(7, 3);
+
+            foreach (string commonParameterName in CommonParameters)
             {
+                if (isDownLevelRemote && commonParameterName == "ProgressAction")
+                {
+                    continue;
+                }
+
                 if (!parameters.ContainsKey(commonParameterName))
                 {
                     return false;
@@ -1584,8 +1584,7 @@ private PowerShell BuildPowerShellForGetFormatData()
             powerShell.AddParameter("TypeName", this.FormatTypeName);
 
             // For remote PS version 5.1 and greater, we need to include the new -PowerShellVersion parameter
-            RemoteRunspace remoteRunspace = Session.Runspace as RemoteRunspace;
-            if ((remoteRunspace != null) && (remoteRunspace.ServerVersion != null) &&
+            if ((Session.Runspace is RemoteRunspace remoteRunspace) && (remoteRunspace.ServerVersion != null) &&
                 (remoteRunspace.ServerVersion >= new Version(5, 1)))
             {
                 powerShell.AddParameter("PowerShellVersion", PSVersionInfo.PSVersion);
@@ -1706,7 +1705,7 @@ private void HandleHostCallReceived(object sender, RemoteDataEventArgs<RemoteHos
         internal List<CommandMetadata> GetRemoteCommandMetadata(out Dictionary<string, string> alias2resolvedCommandName)
         {
             bool isReleaseCandidateBackcompatibilityMode =
-                this.Session.Runspace.GetRemoteProtocolVersion() == RemotingConstants.ProtocolVersionWin7RC;
+                this.Session.Runspace.GetRemoteProtocolVersion() == RemotingConstants.ProtocolVersion_2_0;
 
             alias2resolvedCommandName = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
             if ((this.CommandName == null) || (this.CommandName.Length == 0) ||
@@ -1917,7 +1916,7 @@ internal List<string> GenerateProxyModule(
         #endregion
     }
 
-    internal class ImplicitRemotingCodeGenerator
+    internal sealed class ImplicitRemotingCodeGenerator
     {
         internal static readonly Version VersionOfScriptWriter = new(1, 0);
 
@@ -1951,20 +1950,17 @@ internal ImplicitRemotingCodeGenerator(
         /// <returns>Connection URI associated with the remote runspace.</returns>
         private string GetConnectionString()
         {
-            WSManConnectionInfo connectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as WSManConnectionInfo;
-            if (connectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is WSManConnectionInfo connectionInfo)
             {
                 return connectionInfo.ConnectionUri.ToString();
             }
 
-            VMConnectionInfo vmConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as VMConnectionInfo;
-            if (vmConnectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is VMConnectionInfo vmConnectionInfo)
             {
                 return vmConnectionInfo.ComputerName;
             }
 
-            ContainerConnectionInfo containerConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as ContainerConnectionInfo;
-            if (containerConnectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is ContainerConnectionInfo containerConnectionInfo)
             {
                 return containerConnectionInfo.ComputerName;
             }
@@ -2024,7 +2020,6 @@ private static void GenerateSectionSeparator(TextWriter writer)
 
     PrivateData = @{{
         ImplicitRemoting = $true
-        ImplicitSessionId = '{4}'
     }}
 }}
         ";
@@ -2043,8 +2038,7 @@ private void GenerateManifest(TextWriter writer, string psm1fileName, string for
                 CodeGeneration.EscapeSingleQuotedStringContent(_moduleGuid.ToString()),
                 CodeGeneration.EscapeSingleQuotedStringContent(StringUtil.Format(ImplicitRemotingStrings.ProxyModuleDescription, this.GetConnectionString())),
                 CodeGeneration.EscapeSingleQuotedStringContent(Path.GetFileName(psm1fileName)),
-                CodeGeneration.EscapeSingleQuotedStringContent(Path.GetFileName(formatPs1xmlFileName)),
-                _remoteRunspaceInfo.InstanceId);
+                CodeGeneration.EscapeSingleQuotedStringContent(Path.GetFileName(formatPs1xmlFileName)));
         }
 
         #endregion
@@ -2111,7 +2105,9 @@ private void GenerateModuleHeader(TextWriter writer)
 
             // In Win8, we are no longer loading all assemblies by default.
             // So we need to use the fully qualified name when accessing a type in that assembly
-            string versionOfScriptGenerator = "[" + typeof(ExportPSSessionCommand).AssemblyQualifiedName + "]" + "::VersionOfScriptGenerator";
+            Type type = typeof(ExportPSSessionCommand);
+            string asmName = type.Assembly.GetName().Name;
+            string versionOfScriptGenerator = $"[{type.FullName}, {asmName}]::VersionOfScriptGenerator";
             GenerateTopComment(writer);
             writer.Write(
                 HeaderTemplate,
@@ -2253,64 +2249,68 @@ private string GenerateNewPSSessionOption()
         {
             StringBuilder result = new("& $script:NewPSSessionOption ");
 
-            RunspaceConnectionInfo runspaceConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as RunspaceConnectionInfo;
-            if (runspaceConnectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is RunspaceConnectionInfo runspaceConnectionInfo)
             {
-                result.AppendFormat(null, "-Culture '{0}' ", CodeGeneration.EscapeSingleQuotedStringContent(runspaceConnectionInfo.Culture.ToString()));
-                result.AppendFormat(null, "-UICulture '{0}' ", CodeGeneration.EscapeSingleQuotedStringContent(runspaceConnectionInfo.UICulture.ToString()));
+                result.Append(null, $"-Culture '{CodeGeneration.EscapeSingleQuotedStringContent(runspaceConnectionInfo.Culture.ToString())}' ");
+                result.Append(null, $"-UICulture '{CodeGeneration.EscapeSingleQuotedStringContent(runspaceConnectionInfo.UICulture.ToString())}' ");
 
-                result.AppendFormat(null, "-CancelTimeOut {0} ", runspaceConnectionInfo.CancelTimeout);
-                result.AppendFormat(null, "-IdleTimeOut {0} ", runspaceConnectionInfo.IdleTimeout);
-                result.AppendFormat(null, "-OpenTimeOut {0} ", runspaceConnectionInfo.OpenTimeout);
-                result.AppendFormat(null, "-OperationTimeOut {0} ", runspaceConnectionInfo.OperationTimeout);
+                result.Append(null, $"-CancelTimeOut {runspaceConnectionInfo.CancelTimeout} ");
+                result.Append(null, $"-IdleTimeOut {runspaceConnectionInfo.IdleTimeout} ");
+                result.Append(null, $"-OpenTimeOut {runspaceConnectionInfo.OpenTimeout} ");
+                result.Append(null, $"-OperationTimeOut {runspaceConnectionInfo.OperationTimeout} ");
             }
 
-            WSManConnectionInfo wsmanConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as WSManConnectionInfo;
-            if (wsmanConnectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is WSManConnectionInfo wsmanConnectionInfo)
             {
-                if (!wsmanConnectionInfo.UseCompression) { result.Append("-NoCompression "); }
+                if (!wsmanConnectionInfo.UseCompression)
+                {
+                    result.Append("-NoCompression ");
+                }
 
-                if (wsmanConnectionInfo.NoEncryption) { result.Append("-NoEncryption "); }
+                if (wsmanConnectionInfo.NoEncryption)
+                {
+                    result.Append("-NoEncryption ");
+                }
 
-                if (wsmanConnectionInfo.NoMachineProfile) { result.Append("-NoMachineProfile "); }
+                if (wsmanConnectionInfo.NoMachineProfile)
+                {
+                    result.Append("-NoMachineProfile ");
+                }
 
-                if (wsmanConnectionInfo.UseUTF16) { result.Append("-UseUTF16 "); }
+                if (wsmanConnectionInfo.UseUTF16)
+                {
+                    result.Append("-UseUTF16 ");
+                }
 
-                if (wsmanConnectionInfo.SkipCACheck) { result.Append("-SkipCACheck "); }
+                if (wsmanConnectionInfo.SkipCACheck)
+                {
+                    result.Append("-SkipCACheck ");
+                }
 
-                if (wsmanConnectionInfo.SkipCNCheck) { result.Append("-SkipCNCheck "); }
+                if (wsmanConnectionInfo.SkipCNCheck)
+                {
+                    result.Append("-SkipCNCheck ");
+                }
 
-                if (wsmanConnectionInfo.SkipRevocationCheck) { result.Append("-SkipRevocationCheck "); }
+                if (wsmanConnectionInfo.SkipRevocationCheck)
+                {
+                    result.Append("-SkipRevocationCheck ");
+                }
 
                 if (wsmanConnectionInfo.MaximumReceivedDataSizePerCommand.HasValue)
                 {
-                    result.AppendFormat(
-                        CultureInfo.InvariantCulture,
-                        "-MaximumReceivedDataSizePerCommand {0} ",
-                        wsmanConnectionInfo.MaximumReceivedDataSizePerCommand.Value);
+                    result.Append(CultureInfo.InvariantCulture, $"-MaximumReceivedDataSizePerCommand {wsmanConnectionInfo.MaximumReceivedDataSizePerCommand.Value} ");
                 }
 
                 if (wsmanConnectionInfo.MaximumReceivedObjectSize.HasValue)
                 {
-                    result.AppendFormat(
-                        CultureInfo.InvariantCulture,
-                        "-MaximumReceivedObjectSize {0} ",
-                        wsmanConnectionInfo.MaximumReceivedObjectSize.Value);
+                    result.Append(CultureInfo.InvariantCulture, $"-MaximumReceivedObjectSize {wsmanConnectionInfo.MaximumReceivedObjectSize.Value} ");
                 }
 
-                result.AppendFormat(
-                    CultureInfo.InvariantCulture,
-                    "-MaximumRedirection {0} ",
-                    wsmanConnectionInfo.MaximumConnectionRedirectionCount);
+                result.Append(CultureInfo.InvariantCulture, $"-MaximumRedirection {wsmanConnectionInfo.MaximumConnectionRedirectionCount} ");
 
-                result.AppendFormat(
-                    CultureInfo.InvariantCulture,
-                    "-ProxyAccessType {0} ",
-                    wsmanConnectionInfo.ProxyAccessType.ToString());
-                result.AppendFormat(
-                    CultureInfo.InvariantCulture,
-                    "-ProxyAuthentication {0} ",
-                    wsmanConnectionInfo.ProxyAuthentication.ToString());
+                result.Append(CultureInfo.InvariantCulture, $"-ProxyAccessType {wsmanConnectionInfo.ProxyAccessType} ");
+                result.Append(CultureInfo.InvariantCulture, $"-ProxyAuthentication {wsmanConnectionInfo.ProxyAuthentication} ");
                 result.Append(this.GenerateProxyCredentialParameter(wsmanConnectionInfo));
             }
 
@@ -2525,8 +2525,7 @@ private string GenerateReimportingOfModules()
 
         private string GenerateNewRunspaceExpression()
         {
-            VMConnectionInfo vmConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as VMConnectionInfo;
-            if (vmConnectionInfo != null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is VMConnectionInfo vmConnectionInfo)
             {
                 string vmConfigurationName = vmConnectionInfo.ConfigurationName;
                 return string.Format(
@@ -2538,8 +2537,7 @@ private string GenerateNewRunspaceExpression()
             }
             else
             {
-                ContainerConnectionInfo containerConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as ContainerConnectionInfo;
-                if (containerConnectionInfo != null)
+                if (_remoteRunspaceInfo.Runspace.ConnectionInfo is ContainerConnectionInfo containerConnectionInfo)
                 {
                     string containerConfigurationName = containerConnectionInfo.ContainerProc.ConfigurationName;
                     return string.Format(
@@ -2581,19 +2579,16 @@ private string GenerateNewRunspaceExpression()
         /// <returns></returns>
         private string GenerateConnectionStringForNewRunspace()
         {
-            WSManConnectionInfo connectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as WSManConnectionInfo;
-            if (connectionInfo == null)
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is not WSManConnectionInfo connectionInfo)
             {
-                VMConnectionInfo vmConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as VMConnectionInfo;
-                if (vmConnectionInfo != null)
+                if (_remoteRunspaceInfo.Runspace.ConnectionInfo is VMConnectionInfo vmConnectionInfo)
                 {
                     return string.Format(CultureInfo.InvariantCulture,
                         VMIdParameterTemplate,
                         CodeGeneration.EscapeSingleQuotedStringContent(vmConnectionInfo.VMGuid.ToString()));
                 }
 
-                ContainerConnectionInfo containerConnectionInfo = _remoteRunspaceInfo.Runspace.ConnectionInfo as ContainerConnectionInfo;
-                if (containerConnectionInfo != null)
+                if (_remoteRunspaceInfo.Runspace.ConnectionInfo is ContainerConnectionInfo containerConnectionInfo)
                 {
                     return string.Format(CultureInfo.InvariantCulture,
                         ContainerIdParameterTemplate,
@@ -2613,21 +2608,19 @@ private string GenerateConnectionStringForNewRunspace()
                     CodeGeneration.EscapeSingleQuotedStringContent(connectionInfo.AppName),
                     connectionInfo.UseDefaultWSManPort ?
                         string.Empty :
-                        string.Format(CultureInfo.InvariantCulture,
-                            "-Port {0} ", connectionInfo.Port),
+                        string.Create(CultureInfo.InvariantCulture, $"-Port {connectionInfo.Port} "),
                     isSSLSpecified ? "-useSSL" : string.Empty);
             }
             else
             {
-                return string.Format(CultureInfo.InvariantCulture,
-                    "-connectionUri '{0}'",
-                    CodeGeneration.EscapeSingleQuotedStringContent(GetConnectionString()));
+                string connectionString = CodeGeneration.EscapeSingleQuotedStringContent(GetConnectionString());
+                return string.Create(CultureInfo.InvariantCulture, $"-connectionUri '{connectionString}'");
             }
         }
 
         private string GenerateAllowRedirectionParameter()
         {
-            if (!(_remoteRunspaceInfo.Runspace.ConnectionInfo is WSManConnectionInfo wsmanConnectionInfo))
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is not WSManConnectionInfo wsmanConnectionInfo)
             {
                 return string.Empty;
             }
@@ -2653,7 +2646,7 @@ private string GenerateAuthenticationMechanismParameter()
                 return string.Empty;
             }
 
-            if (!(_remoteRunspaceInfo.Runspace.ConnectionInfo is WSManConnectionInfo wsmanConnectionInfo))
+            if (_remoteRunspaceInfo.Runspace.ConnectionInfo is not WSManConnectionInfo wsmanConnectionInfo)
             {
                 return string.Empty;
             }
@@ -2749,7 +2742,7 @@ function Get-PSImplicitRemotingClientSideParameters
 
     $clientSideParameters = @{}
 
-    $parametersToLeaveRemote = 'ErrorAction', 'WarningAction', 'InformationAction'
+    $parametersToLeaveRemote = 'ErrorAction', 'WarningAction', 'InformationAction', 'ProgressAction'
 
     Modify-PSImplicitRemotingParameters $clientSideParameters $PSBoundParameters 'AsJob'
     if ($proxyForCmdlet)
@@ -2825,13 +2818,14 @@ private void GenerateHelperFunctions(TextWriter writer)
 
             $clientSideParameters = Get-PSImplicitRemotingClientSideParameters $PSBoundParameters ${8}
 
-            $scriptCmd = {{ & $script:InvokeCommand `
-                            @clientSideParameters `
-                            -HideComputerName `
-                            -Session (Get-PSImplicitRemotingSession -CommandName '{0}') `
-                            -Arg ('{0}', $PSBoundParameters, $positionalArguments) `
-                            -Script {{ param($name, $boundParams, $unboundParams) & $name @boundParams @unboundParams }} `
-                         }}
+            $scriptCmd = {{
+                & $script:InvokeCommand `
+                    @clientSideParameters `
+                    -HideComputerName `
+                    -Session (Get-PSImplicitRemotingSession -CommandName '{0}') `
+                    -Arg ('{0}', $PSBoundParameters, $positionalArguments) `
+                    -Script {{ param($name, $boundParams, $unboundParams) & $name @boundParams @unboundParams }} `
+            }}
 
             $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
             $steppablePipeline.Begin($myInvocation.ExpectingInput, $ExecutionContext)
@@ -3059,10 +3053,7 @@ internal List<string> GenerateProxyModule(
                 FileShare.None);
             using (TextWriter writer = new StreamWriter(psm1, encoding))
             {
-                if (listOfCommandMetadata == null)
-                {
-                    listOfCommandMetadata = new List<CommandMetadata>();
-                }
+                listOfCommandMetadata ??= new List<CommandMetadata>();
 
                 GenerateModuleHeader(writer);
                 GenerateHelperFunctions(writer);
@@ -3080,10 +3071,7 @@ internal List<string> GenerateProxyModule(
                 FileShare.None);
             using (TextWriter writer = new StreamWriter(formatPs1xml, encoding))
             {
-                if (listOfFormatData == null)
-                {
-                    listOfFormatData = new List<ExtendedTypeDefinition>();
-                }
+                listOfFormatData ??= new List<ExtendedTypeDefinition>();
 
                 GenerateFormatFile(writer, listOfFormatData);
                 formatPs1xml.SetLength(formatPs1xml.Position);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs
index 53ab8d32c2f..c4e423ffd1d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Import-LocalizedData.cs
@@ -2,11 +2,13 @@
 // Licensed under the MIT License.
 
 using System;
+using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.IO;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Security;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -146,9 +148,9 @@ protected override void ProcessRecord()
             }
 
             // Prevent additional commands in ConstrainedLanguage mode
-            if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage)
+            if (_setSupportedCommand && Context.LanguageMode == PSLanguageMode.ConstrainedLanguage)
             {
-                if (_setSupportedCommand)
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
                 {
                     NotSupportedException nse =
                         PSTraceSource.NewNotSupportedException(
@@ -156,6 +158,13 @@ protected override void ProcessRecord()
                     ThrowTerminatingError(
                         new ErrorRecord(nse, "CannotDefineSupportedCommand", ErrorCategory.PermissionDenied, null));
                 }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Context,
+                    title: ImportLocalizedDataStrings.WDACLogTitle,
+                    message: ImportLocalizedDataStrings.WDACLogMessage,
+                    fqid: "SupportedCommandsDisabled",
+                    dropIntoDebugger: true);
             }
 
             string script = GetScript(path);
@@ -282,7 +291,7 @@ private string GetFilePath()
 
             fileName = Path.GetFileNameWithoutExtension(fileName);
 
-            CultureInfo culture = null;
+            CultureInfo culture;
             if (_uiculture == null)
             {
                 culture = CultureInfo.CurrentUICulture;
@@ -299,19 +308,33 @@ private string GetFilePath()
                 }
             }
 
-            CultureInfo currentCulture = culture;
+            List<CultureInfo> cultureList = new List<CultureInfo> { culture };
+            if (_uiculture == null && culture.Name != "en-US")
+            {
+                // .NET 4.8 presents en-US as a parent of any current culture when accessed via the CurrentUICulture
+                // property.
+                //
+                // This feature is not present when GetCultureInfo is called, therefore this fallback change only
+                // applies when the UICulture parameter is not supplied.
+                cultureList.Add(CultureInfo.GetCultureInfo("en-US"));
+            }
+
             string filePath;
             string fullFileName = fileName + ".psd1";
-            while (currentCulture != null && !string.IsNullOrEmpty(currentCulture.Name))
+            foreach (CultureInfo cultureToTest in cultureList)
             {
-                filePath = Path.Combine(dir, currentCulture.Name, fullFileName);
-
-                if (File.Exists(filePath))
+                CultureInfo currentCulture = cultureToTest;
+                while (currentCulture != null && !string.IsNullOrEmpty(currentCulture.Name))
                 {
-                    return filePath;
-                }
+                    filePath = Path.Combine(dir, currentCulture.Name, fullFileName);
 
-                currentCulture = currentCulture.Parent;
+                    if (File.Exists(filePath))
+                    {
+                        return filePath;
+                    }
+
+                    currentCulture = currentCulture.Parent;
+                }
             }
 
             filePath = Path.Combine(dir, fullFileName);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportAliasCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportAliasCommand.cs
index 4252a1623d6..657d00b4fc5 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportAliasCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportAliasCommand.cs
@@ -55,6 +55,7 @@ public string LiteralPath
         /// </summary>
         [Parameter]
         [ValidateNotNullOrEmpty]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
@@ -296,7 +297,7 @@ private Collection<AliasInfo> GetAliasesFromFile(bool isLiteralPath)
             {
                 CSVHelper csvHelper = new(',');
 
-                Int64 lineNumber = 0;
+                long lineNumber = 0;
                 string line = null;
                 while ((line = reader.ReadLine()) != null)
                 {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportPowerShellDataFile.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportPowerShellDataFile.cs
index 53dc461dfb2..5661df24fa9 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportPowerShellDataFile.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ImportPowerShellDataFile.cs
@@ -42,7 +42,6 @@ public string[] LiteralPath
         /// <summary>
         /// Gets or sets switch that determines if built-in limits are applied to the data.
         /// </summary>
-        [Experimental("Microsoft.PowerShell.Utility.PSImportPSDataFileSkipLimitCheck", ExperimentAction.Show)]
         [Parameter]
         public SwitchParameter SkipLimitCheck { get; set; }
 
@@ -65,7 +64,7 @@ protected override void ProcessRecord()
                     }
                     else
                     {
-                        var data = ast.Find(a => a is HashtableAst, false);
+                        var data = ast.Find(static a => a is HashtableAst, false);
                         if (data != null)
                         {
                             WriteObject(data.SafeGetValue(SkipLimitCheck));
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/InvokeExpressionCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/InvokeExpressionCommand.cs
index d51f20f8704..acbffeb66f4 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/InvokeExpressionCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/InvokeExpressionCommand.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Security;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -43,6 +44,16 @@ protected override void ProcessRecord()
                 myScriptBlock.LanguageMode = PSLanguageMode.ConstrainedLanguage;
             }
 
+            if (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Audit)
+            {
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Context,
+                    title: UtilityCommonStrings.IEXWDACLogTitle,
+                    message: UtilityCommonStrings.IEXWDACLogMessage,
+                    fqid: "InvokeExpressionCmdletConstrained",
+                    dropIntoDebugger: true);
+            }
+
             var emptyArray = Array.Empty<object>();
             myScriptBlock.InvokeUsingCmdlet(
                 contextCmdlet: this,
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs
index 16243fcf6ae..80a04b07f17 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Join-String.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.Linq;
 using System.Management.Automation;
@@ -40,7 +41,7 @@ public sealed class JoinStringCommand : PSCmdlet
         /// Gets or sets the delimiter to join the output with.
         /// </summary>
         [Parameter(Position = 1)]
-        [ArgumentCompleter(typeof(JoinItemCompleter))]
+        [ArgumentCompleter(typeof(SeparatorArgumentCompleter))]
         [AllowEmptyString]
         public string Separator
         {
@@ -78,7 +79,7 @@ public string Separator
         /// Gets or sets a format string that is applied to each input object.
         /// </summary>
         [Parameter(ParameterSetName = "Format")]
-        [ArgumentCompleter(typeof(JoinItemCompleter))]
+        [ArgumentCompleter(typeof(FormatStringArgumentCompleter))]
         public string FormatString { get; set; }
 
         /// <summary>
@@ -159,75 +160,115 @@ protected override void EndProcessing()
         }
     }
 
-    internal class JoinItemCompleter : IArgumentCompleter
+    /// <summary>
+    /// Provides completion for the Separator parameter of the Join-String cmdlet.
+    /// </summary>
+    public sealed class SeparatorArgumentCompleter : IArgumentCompleter
     {
+        private const string NewLineText =
+#if UNIX
+        "`n";
+#else
+        "`r`n";
+#endif
+
+        private static readonly CompletionHelpers.CompletionDisplayInfoMapper SeparatorDisplayInfoMapper = separator => separator switch
+        {
+            "," => (
+                ToolTip: TabCompletionStrings.SeparatorCommaToolTip,
+                ListItemText: "Comma"),
+            ", " => (
+                ToolTip: TabCompletionStrings.SeparatorCommaSpaceToolTip,
+                ListItemText: "Comma-Space"),
+            ";" => (
+                ToolTip: TabCompletionStrings.SeparatorSemiColonToolTip,
+                ListItemText: "Semi-Colon"),
+            "; " => (
+                ToolTip: TabCompletionStrings.SeparatorSemiColonSpaceToolTip,
+                ListItemText: "Semi-Colon-Space"),
+            "-" => (
+                ToolTip: TabCompletionStrings.SeparatorDashToolTip,
+                ListItemText: "Dash"),
+            " " => (
+                ToolTip: TabCompletionStrings.SeparatorSpaceToolTip,
+                ListItemText: "Space"),
+            NewLineText => (
+                ToolTip: StringUtil.Format(TabCompletionStrings.SeparatorNewlineToolTip, NewLineText),
+                ListItemText: "Newline"),
+            _ => (
+                ToolTip: separator,
+                ListItemText: separator),
+        };
+
+        private static readonly IReadOnlyList<string> s_separatorValues = new List<string>(capacity: 7)
+        {
+            ",",
+            ", ",
+            ";",
+            "; ",
+            NewLineText,
+            "-",
+            " ",
+        };
+
+        /// <summary>
+        /// Returns completion results for Separator parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of Completion Results.</returns>
         public IEnumerable<CompletionResult> CompleteArgument(
             string commandName,
             string parameterName,
             string wordToComplete,
             CommandAst commandAst,
             IDictionary fakeBoundParameters)
-        {
-            switch (parameterName)
-            {
-                case "Separator": return CompleteSeparator(wordToComplete);
-                case "FormatString": return CompleteFormatString(wordToComplete);
-            }
-
-            return null;
-        }
-
-        private static IEnumerable<CompletionResult> CompleteFormatString(string wordToComplete)
-        {
-            var res = new List<CompletionResult>();
-            void AddMatching(string completionText)
-            {
-                if (completionText.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
-                {
-                    res.Add(new CompletionResult(completionText));
-                }
-            }
-
-            AddMatching("'[{0}]'");
-            AddMatching("'{0:N2}'");
-            AddMatching("\"`r`n    `${0}\"");
-            AddMatching("\"`r`n    [string] `${0}\"");
-
-            return res;
-        }
-
-        private IEnumerable<CompletionResult> CompleteSeparator(string wordToComplete)
-        {
-            var res = new List<CompletionResult>(10);
-
-            void AddMatching(string completionText, string listText, string toolTip)
-            {
-                if (completionText.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
-                {
-                    res.Add(new CompletionResult(completionText, listText, CompletionResultType.ParameterValue, toolTip));
-                }
-            }
-
-            AddMatching("', '", "Comma-Space", "', ' - Comma-Space");
-            AddMatching("';'", "Semi-Colon", "';'  - Semi-Colon ");
-            AddMatching("'; '", "Semi-Colon-Space", "'; ' - Semi-Colon-Space");
-            AddMatching($"\"{NewLineText}\"", "Newline", $"{NewLineText} - Newline");
-            AddMatching("','", "Comma", "','  - Comma");
-            AddMatching("'-'", "Dash", "'-'  - Dash");
-            AddMatching("' '", "Space", "' '  - Space");
-            return res;
-        }
+                => CompletionHelpers.GetMatchingResults(
+                    wordToComplete,
+                    possibleCompletionValues: s_separatorValues,
+                    displayInfoMapper: SeparatorDisplayInfoMapper,
+                    resultType: CompletionResultType.ParameterValue);
+    }
 
-        public string NewLineText
+    /// <summary>
+    /// Provides completion for the FormatString parameter of the Join-String cmdlet.
+    /// </summary>
+    public sealed class FormatStringArgumentCompleter : IArgumentCompleter
+    {
+        private static readonly IReadOnlyList<string> s_formatStringValues = new List<string>(capacity: 4)
         {
-            get
-            {
+            "[{0}]",
+            "{0:N2}",
 #if UNIX
-                return "`n";
+            "`n    `${0}",
+            "`n    [string] `${0}",
 #else
-                return "`r`n";
+            "`r`n    `${0}",
+            "`r`n    [string] `${0}",
 #endif
-            }
-        }
+        };
+
+        /// <summary>
+        /// Returns completion results for FormatString parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of Completion Results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
+                => CompletionHelpers.GetMatchingResults(
+                    wordToComplete,
+                    possibleCompletionValues: s_formatStringValues,
+                    matchStrategy: CompletionHelpers.WildcardPatternEscapeMatch);
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/JsonSchemaReferenceResolutionException.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/JsonSchemaReferenceResolutionException.cs
new file mode 100644
index 00000000000..7c2a7ac65f4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/JsonSchemaReferenceResolutionException.cs
@@ -0,0 +1,27 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+
+namespace Microsoft.PowerShell.Commands;
+
+/// <summary>
+/// Thrown during evaluation of <see cref="TestJsonCommand"/> when an attempt
+/// to resolve a <code>$ref</code> or <code>$dynamicRef</code> fails.
+/// </summary>
+internal sealed class JsonSchemaReferenceResolutionException : Exception
+{
+    /// <summary>
+    /// Initializes a new instance of the <see cref="JsonSchemaReferenceResolutionException"/> class.
+    /// </summary>
+    /// <param name="innerException">
+    /// The exception that is the cause of the current exception, or a null reference
+    /// (<code>Nothing</code> in Visual Basic) if no inner exception is specified.
+    /// </param>
+    public JsonSchemaReferenceResolutionException(Exception innerException)
+        : base(message: null, innerException)
+    {
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs
index 6271e6f57b6..262fd44b30f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/MatchString.cs
@@ -80,7 +80,7 @@ public class MatchInfo
         /// Gets or sets the number of the matching line.
         /// </summary>
         /// <value>The number of the matching line.</value>
-        public int LineNumber { get; set; }
+        public ulong LineNumber { get; set; }
 
         /// <summary>
         /// Gets or sets the text of the matching line.
@@ -127,11 +127,11 @@ public MatchInfo(IReadOnlyList<int> matchIndexes, IReadOnlyList<int> matchLength
 
         /// <summary>
         /// Gets the base name of the file containing the matching line.
+        /// </summary>
         /// <remarks>
         /// It will be the string "InputStream" if the object came from the input stream.
         /// This is a readonly property calculated from the path <see cref="Path"/>.
         /// </remarks>
-        /// </summary>
         /// <value>The file name.</value>
         public string Filename
         {
@@ -150,10 +150,10 @@ public string Filename
 
         /// <summary>
         /// Gets or sets the full path of the file containing the matching line.
+        /// </summary>
         /// <remarks>
         /// It will be "InputStream" if the object came from the input stream.
         /// </remarks>
-        /// </summary>
         /// <value>The path name.</value>
         public string Path
         {
@@ -182,11 +182,11 @@ public string Path
 
         /// <summary>
         /// Returns the path of the matching file truncated relative to the <paramref name="directory"/> parameter.
+        /// </summary>
         /// <remarks>
         /// For example, if the matching path was c:\foo\bar\baz.c and the directory argument was c:\foo
         /// the routine would return bar\baz.c .
         /// </remarks>
-        /// </summary>
         /// <param name="directory">The directory base the truncation on.</param>
         /// <returns>The relative path that was produced.</returns>
         public string RelativePath(string directory)
@@ -232,12 +232,12 @@ public string RelativePath(string directory)
         /// <summary>
         /// Returns the string representation of this object. The format
         /// depends on whether a path has been set for this object or not.
+        /// </summary>
         /// <remarks>
         /// If the path component is set, as would be the case when matching
         /// in a file, ToString() would return the path, line number and line text.
         /// If path is not set, then just the line text is presented.
         /// </remarks>
-        /// </summary>
         /// <returns>The string representation of the match object.</returns>
         public override string ToString()
         {
@@ -277,7 +277,7 @@ private string ToString(string directory, string line)
             // Otherwise, render the full context.
             List<string> lines = new(Context.DisplayPreContext.Length + Context.DisplayPostContext.Length + 1);
 
-            int displayLineNumber = this.LineNumber - Context.DisplayPreContext.Length;
+            ulong displayLineNumber = this.LineNumber - (ulong)Context.DisplayPreContext.Length;
             foreach (string contextLine in Context.DisplayPreContext)
             {
                 lines.Add(FormatLine(contextLine, displayLineNumber++, displayPath, ContextPrefix));
@@ -315,8 +315,8 @@ public string ToEmphasizedString(string directory)
         /// <returns>The matched line with matched text inverted.</returns>
         private string EmphasizeLine()
         {
-            string invertColorsVT100 = VTUtility.GetEscapeSequence(VTUtility.VT.Inverse);
-            string resetVT100 = VTUtility.GetEscapeSequence(VTUtility.VT.Reset);
+            string invertColorsVT100 = PSStyle.Instance.Reverse;
+            string resetVT100 = PSStyle.Instance.Reset;
 
             char[] chars = new char[(_matchIndexes.Count * (invertColorsVT100.Length + resetVT100.Length)) + Line.Length];
             int lineIndex = 0;
@@ -356,7 +356,7 @@ private string EmphasizeLine()
         /// <param name="displayPath">The file path, formatted for display.</param>
         /// <param name="prefix">The match prefix.</param>
         /// <returns>The formatted line as a string.</returns>
-        private string FormatLine(string lineStr, int displayLineNumber, string displayPath, string prefix)
+        private string FormatLine(string lineStr, ulong displayLineNumber, string displayPath, string prefix)
         {
             return _pathSet
                        ? StringUtil.Format(MatchFormat, prefix, displayPath, displayLineNumber, lineStr)
@@ -410,7 +410,7 @@ public sealed class SelectStringCommand : PSCmdlet
         /// A generic circular buffer.
         /// </summary>
         /// <typeparam name="T">The type of items that are buffered.</typeparam>
-        private class CircularBuffer<T> : ICollection<T>
+        private sealed class CircularBuffer<T> : ICollection<T>
         {
             // Ring of items
             private readonly T[] _items;
@@ -428,10 +428,7 @@ private class CircularBuffer<T> : ICollection<T>
             /// <exception cref="ArgumentOutOfRangeException">If <paramref name="capacity"/> is negative.</exception>
             public CircularBuffer(int capacity)
             {
-                if (capacity < 0)
-                {
-                    throw new ArgumentOutOfRangeException(nameof(capacity));
-                }
+                ArgumentOutOfRangeException.ThrowIfNegative(capacity);
 
                 _items = new T[capacity];
                 Clear();
@@ -532,15 +529,8 @@ public bool Contains(T item)
 
             public void CopyTo(T[] array, int arrayIndex)
             {
-                if (array == null)
-                {
-                    throw new ArgumentNullException(nameof(array));
-                }
-
-                if (arrayIndex < 0)
-                {
-                    throw new ArgumentOutOfRangeException(nameof(arrayIndex));
-                }
+                ArgumentNullException.ThrowIfNull(array);
+                ArgumentOutOfRangeException.ThrowIfNegative(arrayIndex);
 
                 if (Count > (array.Length - arrayIndex))
                 {
@@ -627,7 +617,7 @@ private interface IContextTracker
         /// <summary>
         /// A state machine to track display context for each match.
         /// </summary>
-        private class DisplayContextTracker : IContextTracker
+        private sealed class DisplayContextTracker : IContextTracker
         {
             private enum ContextState
             {
@@ -784,12 +774,12 @@ private void Reset()
         /// and other matching lines (since they will appear
         /// as their own match entries.).
         /// </remarks>
-        private class LogicalContextTracker : IContextTracker
+        private sealed class LogicalContextTracker : IContextTracker
         {
             // A union: string | MatchInfo. Needed since
             // context lines could be either proper matches
             // or non-matching lines.
-            private class ContextEntry
+            private sealed class ContextEntry
             {
                 public readonly string Line;
                 public readonly MatchInfo Match;
@@ -989,7 +979,7 @@ private string[] CopyContext(int startIndex, int length)
         /// <summary>
         /// A class to track both logical and display contexts.
         /// </summary>
-        private class ContextTracker : IContextTracker
+        private sealed class ContextTracker : IContextTracker
         {
             private readonly IContextTracker _displayTracker;
             private readonly IContextTracker _logicalTracker;
@@ -1058,7 +1048,7 @@ private void UpdateQueue()
         /// <summary>
         /// ContextTracker that does not work for the case when pre- and post context is 0.
         /// </summary>
-        private class NoContextTracker : IContextTracker
+        private sealed class NoContextTracker : IContextTracker
         {
             private readonly IList<MatchInfo> _matches = new List<MatchInfo>(1);
 
@@ -1346,8 +1336,8 @@ public string[] Exclude
         /// Gets or sets the text encoding to process each file as.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -1363,7 +1353,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Gets or sets the number of context lines to collect. If set to a
@@ -1376,7 +1366,7 @@ public Encoding Encoding
         [Parameter]
         [ValidateNotNullOrEmpty]
         [ValidateCount(1, 2)]
-        [ValidateRange(0, Int32.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         public new int[] Context
         {
             get => _context;
@@ -1427,7 +1417,7 @@ private IContextTracker GetContextTracker() => (Raw || (_preContext == 0 && _pos
         /// </summary>
         private bool _doneProcessing;
 
-        private int _inputRecordNumber;
+        private ulong _inputRecordNumber;
 
         /// <summary>
         /// Read command line parameters.
@@ -1605,7 +1595,7 @@ private bool ProcessFile(string filename)
                     using (StreamReader sr = new(fs, Encoding))
                     {
                         string line;
-                        int lineNo = 0;
+                        ulong lineNo = 0;
 
                         // Read and display lines from the file until the end of
                         // the file is reached.
@@ -1996,7 +1986,7 @@ private void WarnFilterContext()
         /// <summary>
         /// Magic class that works around the limitations on ToString() for FileInfo.
         /// </summary>
-        private class FileinfoToStringAttribute : ArgumentTransformationAttribute
+        private sealed class FileinfoToStringAttribute : ArgumentTransformationAttribute
         {
             public override object Transform(EngineIntrinsics engineIntrinsics, object inputData)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs
index 452e8bfe09c..1e741758270 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Measure-Object.cs
@@ -160,7 +160,7 @@ public sealed class MeasureObjectCommand : PSCmdlet
         /// Keys are strings. Keys are compared with OrdinalIgnoreCase.
         /// </summary>
         /// <typeparam name="TValue">Value type.</typeparam>
-        private class MeasureObjectDictionary<TValue> : Dictionary<string, TValue>
+        private sealed class MeasureObjectDictionary<TValue> : Dictionary<string, TValue>
             where TValue : new()
         {
             /// <summary>
@@ -200,7 +200,7 @@ public TValue EnsureEntry(string key)
         /// what mode we're in.
         /// </summary>
         [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")]
-        private class Statistics
+        private sealed class Statistics
         {
             // Common properties
             internal int count = 0;
@@ -561,8 +561,7 @@ private void AnalyzeObjectProperties(PSObject inObj)
         /// <param name="objValue">The value to analyze.</param>
         private void AnalyzeValue(string propertyName, object objValue)
         {
-            if (propertyName == null)
-                propertyName = thisObject;
+            propertyName ??= thisObject;
 
             Statistics stat = _statistics.EnsureEntry(propertyName);
 
@@ -792,9 +791,9 @@ private void WritePropertyNotFoundError(string propertyName, string errorId)
         {
             Diagnostics.Assert(Property != null, "no property and no InputObject should have been addressed");
             ErrorRecord errorRecord = new(
-                    PSTraceSource.NewArgumentException("Property"),
+                    PSTraceSource.NewArgumentException(propertyName),
                     errorId,
-                    ErrorCategory.InvalidArgument,
+                    ErrorCategory.ObjectNotFound,
                     null);
             errorRecord.ErrorDetails = new ErrorDetails(
                 this, "MeasureObjectStrings", "PropertyNotFound", propertyName);
@@ -820,9 +819,12 @@ protected override void EndProcessing()
                 Statistics stat = _statistics[propertyName];
                 if (stat.count == 0 && Property != null)
                 {
-                    // Why are there two different ids for this error?
-                    string errorId = (IsMeasuringGeneric) ? "GenericMeasurePropertyNotFound" : "TextMeasurePropertyNotFound";
-                    WritePropertyNotFoundError(propertyName, errorId);
+                    if (Context.IsStrictVersion(2))
+                    {
+                        string errorId = (IsMeasuringGeneric) ? "GenericMeasurePropertyNotFound" : "TextMeasurePropertyNotFound";
+                        WritePropertyNotFoundError(propertyName, errorId);
+                    }
+
                     continue;
                 }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs
index 90ef2ca4376..0ea312f2963 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/New-Object.cs
@@ -187,18 +187,30 @@ protected override void BeginProcessing()
                             targetObject: null));
                 }
 
-                if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage)
-                {
-                    if (!CoreTypes.Contains(type))
-                    {
-                        ThrowTerminatingError(
-                            new ErrorRecord(
-                                new PSNotSupportedException(NewObjectStrings.CannotCreateTypeConstrainedLanguage), "CannotCreateTypeConstrainedLanguage", ErrorCategory.PermissionDenied, null));
-                    }
-                }
-
                 switch (Context.LanguageMode)
                 {
+                    case PSLanguageMode.ConstrainedLanguage:
+                        if (!CoreTypes.Contains(type))
+                        {
+                            if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                            {
+                                ThrowTerminatingError(
+                                    new ErrorRecord(
+                                        new PSNotSupportedException(NewObjectStrings.CannotCreateTypeConstrainedLanguage),
+                                        "CannotCreateTypeConstrainedLanguage",
+                                        ErrorCategory.PermissionDenied,
+                                        targetObject: null));
+                            }
+
+                            SystemPolicy.LogWDACAuditMessage(
+                                context: Context,
+                                title: NewObjectStrings.TypeWDACLogTitle,
+                                message: StringUtil.Format(NewObjectStrings.TypeWDACLogMessage, type.FullName),
+                                fqid: "NewObjectCmdletCannotCreateType",
+                                dropIntoDebugger: true);
+                        }
+                        break;
+
                     case PSLanguageMode.NoLanguage:
                     case PSLanguageMode.RestrictedLanguage:
                         if (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce
@@ -212,8 +224,7 @@ protected override void BeginProcessing()
                                     ErrorCategory.PermissionDenied,
                                     targetObject: null));
                         }
-
-                    break;
+                        break;
                 }
 
                 // WinRT does not support creating instances of attribute & delegate WinRT types.
@@ -238,7 +249,7 @@ protected override void BeginProcessing()
                         WriteObject(_newObject);
                         return;
                     }
-                    else if (type.GetTypeInfo().IsValueType)
+                    else if (type.IsValueType)
                     {
                         // This is for default parameterless struct ctor which is not returned by
                         // Type.GetConstructor(System.Type.EmptyTypes).
@@ -301,21 +312,31 @@ protected override void BeginProcessing()
                     bool isAllowed = false;
 
                     // If it's a system-wide lockdown, we may allow additional COM types
-                    if (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce)
+                    var systemLockdownPolicy = SystemPolicy.GetSystemLockdownPolicy();
+                    if (systemLockdownPolicy == SystemEnforcementMode.Enforce || systemLockdownPolicy == SystemEnforcementMode.Audit)
                     {
-                        if ((result >= 0) &&
-                            SystemPolicy.IsClassInApprovedList(_comObjectClsId))
-                        {
-                            isAllowed = true;
-                        }
+                        isAllowed = (result >= 0) && SystemPolicy.IsClassInApprovedList(_comObjectClsId);
                     }
 
                     if (!isAllowed)
                     {
-                        ThrowTerminatingError(
-                            new ErrorRecord(
-                                new PSNotSupportedException(NewObjectStrings.CannotCreateTypeConstrainedLanguage), "CannotCreateComTypeConstrainedLanguage", ErrorCategory.PermissionDenied, null));
-                        return;
+                        if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                        {
+                            ThrowTerminatingError(
+                                new ErrorRecord(
+                                    new PSNotSupportedException(NewObjectStrings.CannotCreateTypeConstrainedLanguage),
+                                    "CannotCreateComTypeConstrainedLanguage",
+                                    ErrorCategory.PermissionDenied,
+                                    targetObject: null));
+                            return;
+                        }
+
+                        SystemPolicy.LogWDACAuditMessage(
+                            context: Context,
+                            title: NewObjectStrings.ComWDACLogTitle,
+                            message: StringUtil.Format(NewObjectStrings.ComWDACLogMessage, ComObject ?? string.Empty),
+                            fqid: "NewObjectCmdletCannotCreateCOM",
+                            dropIntoDebugger: true);
                     }
                 }
 
@@ -351,12 +372,12 @@ protected override void BeginProcessing()
 #if !UNIX
         #region Com
 
-        private object SafeCreateInstance(Type t, object[] args)
+        private object SafeCreateInstance(Type t)
         {
             object result = null;
             try
             {
-                result = Activator.CreateInstance(t, args);
+                result = Activator.CreateInstance(t);
             }
             // Does not catch InvalidComObjectException because ComObject is obtained from GetTypeFromProgID
             catch (ArgumentException e)
@@ -416,7 +437,7 @@ private object SafeCreateInstance(Type t, object[] args)
             return result;
         }
 
-        private class ComCreateInfo
+        private sealed class ComCreateInfo
         {
             public object objectCreated;
             public bool success;
@@ -430,13 +451,10 @@ private void STAComCreateThreadProc(object createstruct)
             ComCreateInfo info = (ComCreateInfo)createstruct;
             try
             {
-                Type type = null;
-                PSArgumentException mshArgE = null;
-
-                type = Type.GetTypeFromCLSID(_comObjectClsId);
+                Type type = Type.GetTypeFromCLSID(_comObjectClsId);
                 if (type == null)
                 {
-                    mshArgE = PSTraceSource.NewArgumentException(
+                    PSArgumentException mshArgE = PSTraceSource.NewArgumentException(
                         "ComObject",
                         NewObjectStrings.CannotLoadComObjectType,
                         ComObject);
@@ -446,7 +464,7 @@ private void STAComCreateThreadProc(object createstruct)
                     return;
                 }
 
-                info.objectCreated = SafeCreateInstance(type, ArgumentList);
+                info.objectCreated = SafeCreateInstance(type);
                 info.success = true;
             }
             catch (Exception e)
@@ -458,20 +476,25 @@ private void STAComCreateThreadProc(object createstruct)
 
         private object CreateComObject()
         {
-            Type type = null;
-            PSArgumentException mshArgE = null;
-
             try
             {
-                type = Marshal.GetTypeFromCLSID(_comObjectClsId);
+                Type type = Marshal.GetTypeFromCLSID(_comObjectClsId);
                 if (type == null)
                 {
-                    mshArgE = PSTraceSource.NewArgumentException("ComObject", NewObjectStrings.CannotLoadComObjectType, ComObject);
+                    PSArgumentException mshArgE = PSTraceSource.NewArgumentException(
+                        "ComObject",
+                        NewObjectStrings.CannotLoadComObjectType,
+                        ComObject);
+
                     ThrowTerminatingError(
-                        new ErrorRecord(mshArgE, "CannotLoadComObjectType", ErrorCategory.InvalidType, null));
+                        new ErrorRecord(
+                            mshArgE,
+                            "CannotLoadComObjectType",
+                            ErrorCategory.InvalidType,
+                            targetObject: null));
                 }
 
-                return SafeCreateInstance(type, ArgumentList);
+                return SafeCreateInstance(type);
             }
             catch (COMException e)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewEventCommand.cs
index 34c95a116f3..1e46241b2d8 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewEventCommand.cs
@@ -121,7 +121,10 @@ protected override void EndProcessing()
             }
 
             object messageSender = null;
-            if (_sender != null) { messageSender = _sender.BaseObject; }
+            if (_sender != null)
+            {
+                messageSender = _sender.BaseObject;
+            }
 
             // And then generate the event
             WriteObject(Events.GenerateEvent(_sourceIdentifier, messageSender, baseEventArgs, _messageData, true, false));
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewGuidCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewGuidCommand.cs
index 537d86c24ec..d1d41b312f7 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewGuidCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewGuidCommand.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Management.Automation;
 
@@ -9,16 +11,48 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// The implementation of the "new-guid" cmdlet.
     /// </summary>
-    [Cmdlet(VerbsCommon.New, "Guid", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2097130")]
+    [Cmdlet(VerbsCommon.New, "Guid", DefaultParameterSetName = "Default", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2097130")]
     [OutputType(typeof(Guid))]
-    public class NewGuidCommand : Cmdlet
+    public class NewGuidCommand : PSCmdlet
     {
         /// <summary>
-        /// Returns a guid.
+        /// Gets or sets a value indicating that the cmdlet should return a Guid structure whose value is all zeros.
         /// </summary>
-        protected override void EndProcessing()
+        [Parameter(ParameterSetName = "Empty")]
+        public SwitchParameter Empty { get; set; }
+
+        /// <summary>
+        /// Gets or sets the value to be converted to a Guid.
+        /// </summary>
+        [Parameter(Position = 0, ValueFromPipeline = true, ParameterSetName = "InputObject")]
+        [System.Diagnostics.CodeAnalysis.AllowNull]
+        public string InputObject { get; set; }
+
+        /// <summary>
+        /// Returns a Guid.
+        /// </summary>
+        protected override void ProcessRecord()
         {
-            WriteObject(Guid.NewGuid());
+            Guid? guid = null;
+
+            if (ParameterSetName is "InputObject")
+            {
+                try
+                {
+                    guid = new(InputObject);
+                }
+                catch (Exception ex)
+                {
+                    ErrorRecord error = new(ex, "StringNotRecognizedAsGuid", ErrorCategory.InvalidArgument, null);
+                    WriteError(error);
+                }
+            }
+            else
+            {
+                guid = Empty.ToBool() ? Guid.Empty : Guid.CreateVersion7();
+            }
+
+            WriteObject(guid);
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs
index 53c39250763..a5d784da9bb 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/NewTimeSpanCommand.cs
@@ -88,6 +88,12 @@ public DateTime End
         [Parameter(ParameterSetName = "Time")]
         public int Seconds { get; set; }
 
+        /// <summary>
+        /// Allows the user to override the millisecond.
+        /// </summary>
+        [Parameter(ParameterSetName = "Time")]
+        public int Milliseconds { get; set; }
+
         #endregion
 
         #region methods
@@ -119,7 +125,7 @@ protected override void ProcessRecord()
                     break;
 
                 case "Time":
-                    result = new TimeSpan(Days, Hours, Minutes, Seconds);
+                    result = new TimeSpan(Days, Hours, Minutes, Seconds, Milliseconds);
                     break;
 
                 default:
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs
index 39986943c99..13b0234a02b 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ObjectCommandComparer.cs
@@ -19,7 +19,7 @@ namespace Microsoft.PowerShell.Commands
     /// isExistingProperty is needed to distinguish whether a property exists and its value is null or
     /// the property does not exist at all.
     /// </summary>
-    internal class ObjectCommandPropertyValue
+    internal sealed class ObjectCommandPropertyValue
     {
         private ObjectCommandPropertyValue() { }
 
@@ -77,7 +77,7 @@ internal CultureInfo Culture
         /// <returns>True if both the objects are same or else returns false.</returns>
         public override bool Equals(object inputObject)
         {
-            if (!(inputObject is ObjectCommandPropertyValue objectCommandPropertyValueObject))
+            if (inputObject is not ObjectCommandPropertyValue objectCommandPropertyValueObject)
             {
                 return false;
             }
@@ -136,7 +136,7 @@ public override int GetHashCode()
     /// <summary>
     /// ObjectCommandComparer class.
     /// </summary>
-    internal class ObjectCommandComparer : IComparer
+    internal sealed class ObjectCommandComparer : IComparer
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="ObjectCommandComparer"/> class.
@@ -190,7 +190,7 @@ internal int Compare(ObjectCommandPropertyValue first, ObjectCommandPropertyValu
         /// </param>
         /// <returns>
         /// 0 if they are the same, less than 0 if first is smaller, more than 0 if first is greater.
-        ///</returns>
+        /// </returns>
         public int Compare(object first, object second)
         {
             // This method will never throw exceptions, two null
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs
index 40f06e58eca..596bbcaafc6 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/OrderObjectBase.cs
@@ -24,7 +24,7 @@ internal static class SortObjectParameterDefinitionKeys
 
     /// <summary>
     /// </summary>
-    internal class SortObjectExpressionParameterDefinition : CommandParameterDefinition
+    internal sealed class SortObjectExpressionParameterDefinition : CommandParameterDefinition
     {
         protected override void SetEntries()
         {
@@ -36,7 +36,7 @@ protected override void SetEntries()
 
     /// <summary>
     /// </summary>
-    internal class GroupObjectExpressionParameterDefinition : CommandParameterDefinition
+    internal sealed class GroupObjectExpressionParameterDefinition : CommandParameterDefinition
     {
         protected override void SetEntries()
         {
@@ -259,10 +259,7 @@ internal void ProcessExpressionParameter(
                         }
                         else
                         {
-                            if (_unExpandedParametersWithWildCardPattern == null)
-                            {
-                                _unExpandedParametersWithWildCardPattern = new List<MshParameter>();
-                            }
+                            _unExpandedParametersWithWildCardPattern ??= new List<MshParameter>();
 
                             _unExpandedParametersWithWildCardPattern.Add(unexpandedParameter);
                         }
@@ -361,7 +358,7 @@ internal static string[] GetDefaultKeyPropertySet(PSObject mshObj)
                 return null;
             }
 
-            if (!(standardNames.Members["DefaultKeyPropertySet"] is PSPropertySet defaultKeys))
+            if (standardNames.Members["DefaultKeyPropertySet"] is not PSPropertySet defaultKeys)
             {
                 return null;
             }
@@ -633,7 +630,7 @@ internal sealed class OrderByPropertyEntry
         internal bool comparable = false;
     }
 
-    internal class OrderByPropertyComparer : IComparer<OrderByPropertyEntry>
+    internal sealed class OrderByPropertyComparer : IComparer<OrderByPropertyEntry>
     {
         internal OrderByPropertyComparer(bool[] ascending, CultureInfo cultureInfo, bool caseSensitive)
         {
@@ -702,7 +699,7 @@ internal static OrderByPropertyComparer CreateComparer(List<OrderByPropertyEntry
         private readonly ObjectCommandComparer[] _propertyComparers = null;
     }
 
-    internal class IndexedOrderByPropertyComparer : IComparer<OrderByPropertyEntry>
+    internal sealed class IndexedOrderByPropertyComparer : IComparer<OrderByPropertyEntry>
     {
         internal IndexedOrderByPropertyComparer(OrderByPropertyComparer orderByPropertyComparer)
         {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCommandBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCommandBase.cs
index bc01f341861..61d7236977d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCommandBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/PSBreakpointCommandBase.cs
@@ -16,7 +16,6 @@ public abstract class PSBreakpointCommandBase : PSCmdlet
         /// <summary>
         /// Gets or sets the runspace where the breakpoints will be used.
         /// </summary>
-        [Experimental("Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace", ExperimentAction.Show)]
         [Parameter]
         [ValidateNotNull]
         [Runspace]
@@ -31,10 +30,7 @@ public abstract class PSBreakpointCommandBase : PSCmdlet
         /// </summary>
         protected override void BeginProcessing()
         {
-            if (Runspace == null)
-            {
-                Runspace = Context.CurrentRunspace;
-            }
+            Runspace ??= Context.CurrentRunspace;
         }
 
         #endregion overrides
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/RemoveAliasCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/RemoveAliasCommand.cs
index 7cec08e1b10..15c48efd847 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/RemoveAliasCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/RemoveAliasCommand.cs
@@ -9,7 +9,7 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// The implementation of the "Remove-Alias" cmdlet.
     /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "Alias", DefaultParameterSetName = "Default", HelpUri = "")]
+    [Cmdlet(VerbsCommon.Remove, "Alias", DefaultParameterSetName = "Default", HelpUri = "https://go.microsoft.com/fwlink/?linkid=2097127")]
     [Alias("ral")]
     public class RemoveAliasCommand : PSCmdlet
     {
@@ -25,6 +25,7 @@ public class RemoveAliasCommand : PSCmdlet
         /// The scope parameter for the command determines which scope the alias is removed from.
         /// </summary>
         [Parameter]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs
index efdd82d79de..e0b0bff07c5 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Select-Object.cs
@@ -12,51 +12,7 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    /// <summary>
-    /// Helper class to do wildcard matching on PSPropertyExpressions.
-    /// </summary>
-    internal sealed class PSPropertyExpressionFilter
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PSPropertyExpressionFilter"/> class
-        /// with the specified array of patterns.
-        /// </summary>
-        /// <param name="wildcardPatternsStrings">Array of pattern strings to use.</param>
-        internal PSPropertyExpressionFilter(string[] wildcardPatternsStrings)
-        {
-            if (wildcardPatternsStrings == null)
-            {
-                throw new ArgumentNullException(nameof(wildcardPatternsStrings));
-            }
-
-            _wildcardPatterns = new WildcardPattern[wildcardPatternsStrings.Length];
-            for (int k = 0; k < wildcardPatternsStrings.Length; k++)
-            {
-                _wildcardPatterns[k] = WildcardPattern.Get(wildcardPatternsStrings[k], WildcardOptions.IgnoreCase);
-            }
-        }
-
-        /// <summary>
-        /// Try to match the expression against the array of wildcard patterns.
-        /// The first match shortcircuits the search.
-        /// </summary>
-        /// <param name="expression">PSPropertyExpression to test against.</param>
-        /// <returns>True if there is a match, else false.</returns>
-        internal bool IsMatch(PSPropertyExpression expression)
-        {
-            for (int k = 0; k < _wildcardPatterns.Length; k++)
-            {
-                if (_wildcardPatterns[k].IsMatch(expression.ToString()))
-                    return true;
-            }
-
-            return false;
-        }
-
-        private readonly WildcardPattern[] _wildcardPatterns;
-    }
-
-    internal class SelectObjectExpressionParameterDefinition : CommandParameterDefinition
+    internal sealed class SelectObjectExpressionParameterDefinition : CommandParameterDefinition
     {
         protected override void SetEntries()
         {
@@ -113,6 +69,13 @@ public SwitchParameter Unique
 
         private bool _unique;
 
+        /// <summary>
+        /// Gets or sets case insensitive switch for string comparison.
+        /// Used in combination with Unique switch parameter.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter CaseInsensitive { get; set; }
+
         /// <summary>
         /// </summary>
         /// <value></value>
@@ -147,10 +110,11 @@ public int First
         private bool _firstOrLastSpecified;
 
         /// <summary>
-        /// Skips the specified number of items from top when used with First, from end when used with Last.
+        /// Skips the specified number of items from top when used with First, from end when used with Last or SkipLast.
         /// </summary>
         /// <value></value>
         [Parameter(ParameterSetName = "DefaultParameter")]
+        [Parameter(ParameterSetName = "SkipLastParameter")]
         [ValidateRange(0, int.MaxValue)]
         public int Skip { get; set; }
 
@@ -174,7 +138,7 @@ public int First
         /// </summary>
         /// <value></value>
         [Parameter(ParameterSetName = "IndexParameter")]
-        [ValidateRangeAttribute(0, int.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public int[] Index
         {
@@ -197,7 +161,7 @@ public int[] Index
         /// </summary>
         /// <value></value>
         [Parameter(ParameterSetName = "SkipIndexParameter")]
-        [ValidateRangeAttribute(0, int.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public int[] SkipIndex
         {
@@ -223,7 +187,7 @@ public int[] SkipIndex
 
         private SelectObjectQueue _selectObjectQueue;
 
-        private class SelectObjectQueue : Queue<PSObject>
+        private sealed class SelectObjectQueue : Queue<PSObject>
         {
             internal SelectObjectQueue(int first, int last, int skip, int skipLast, bool firstOrLastSpecified)
             {
@@ -324,7 +288,7 @@ public PSObject StreamingDequeue()
 
         private PSPropertyExpressionFilter _exclusionFilter;
 
-        private class UniquePSObjectHelper
+        private sealed class UniquePSObjectHelper
         {
             internal UniquePSObjectHelper(PSObject o, int notePropertyCount)
             {
@@ -437,7 +401,11 @@ private void ProcessParameter(MshParameter p, PSObject inputObject, List<PSNoteP
                 if (_exclusionFilter == null || !_exclusionFilter.IsMatch(resolvedName))
                 {
                     List<PSPropertyExpressionResult> tempExprResults = resolvedName.GetValues(inputObject);
-                    if (tempExprResults == null) continue;
+                    if (tempExprResults == null)
+                    {
+                        continue;
+                    }
+
                     foreach (PSPropertyExpressionResult mshExpRes in tempExprResults)
                     {
                         expressionResults.Add(mshExpRes);
@@ -528,7 +496,10 @@ private void ProcessExpandParameter(MshParameter p, PSObject inputObject,
             if (r.Exception == null)
             {
                 // ignore the property value if it's null
-                if (r.Result == null) { return; }
+                if (r.Result == null)
+                {
+                    return;
+                }
 
                 System.Collections.IEnumerable results = LanguagePrimitives.GetEnumerable(r.Result);
                 if (results == null)
@@ -548,7 +519,10 @@ private void ProcessExpandParameter(MshParameter p, PSObject inputObject,
                 foreach (object expandedValue in results)
                 {
                     // ignore the element if it's null
-                    if (expandedValue == null) { continue; }
+                    if (expandedValue == null)
+                    {
+                        continue;
+                    }
 
                     // add NoteProperties if there is any
                     // If expandedValue is a base object, we don't want to associate the NoteProperty
@@ -624,7 +598,11 @@ private void FilteredWriteObject(PSObject obj, List<PSNoteProperty> addedNotePro
                 bool isObjUnique = true;
                 foreach (UniquePSObjectHelper uniqueObj in _uniques)
                 {
-                    ObjectCommandComparer comparer = new(true, CultureInfo.CurrentCulture, true);
+                    ObjectCommandComparer comparer = new(
+                        ascending: true,
+                        CultureInfo.CurrentCulture,
+                        caseSensitive: !CaseInsensitive.IsPresent);
+
                     if ((comparer.Compare(obj.BaseObject, uniqueObj.WrittenObject.BaseObject) == 0) &&
                         (uniqueObj.NotePropertyCount == addedNoteProperties.Count))
                     {
@@ -847,7 +825,7 @@ protected override void EndProcessing()
     [SuppressMessage("Microsoft.Usage", "CA2237:MarkISerializableTypesWithSerializable", Justification = "This exception is internal and never thrown by any public API")]
     [SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Justification = "This exception is internal and never thrown by any public API")]
     [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic", Justification = "This exception is internal and never thrown by any public API")]
-    internal class SelectObjectException : SystemException
+    internal sealed class SelectObjectException : SystemException
     {
         internal ErrorRecord ErrorRecord { get; }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Send-MailMessage.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Send-MailMessage.cs
index 975fd68ebfa..2598d953496 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Send-MailMessage.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Send-MailMessage.cs
@@ -61,8 +61,8 @@ public sealed class SendMailMessage : PSCmdlet
         [Parameter(ValueFromPipelineByPropertyName = true)]
         [Alias("BE")]
         [ValidateNotNullOrEmpty]
-        [ArgumentEncodingCompletionsAttribute]
-        [ArgumentToEncodingTransformationAttribute]
+        [ArgumentEncodingCompletions]
+        [ArgumentToEncodingTransformation]
         public Encoding Encoding
         {
             get
@@ -165,7 +165,7 @@ public Encoding Encoding
         /// Value must be greater than zero.
         /// </remarks>
         [Parameter(ValueFromPipelineByPropertyName = true)]
-        [ValidateRange(0, Int32.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         public int Port { get; set; }
 
         #endregion
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs
index 77b0dce3470..5dfe40fa9d4 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/SetDateCommand.cs
@@ -48,7 +48,6 @@ public sealed class SetDateCommand : PSCmdlet
         /// <summary>
         /// Set the date.
         /// </summary>
-        [ArchitectureSensitive]
         protected override void ProcessRecord()
         {
             DateTime dateToUse;
@@ -71,31 +70,44 @@ protected override void ProcessRecord()
             if (ShouldProcess(dateToUse.ToString()))
             {
 #if UNIX
-                if (!Platform.NonWindowsSetDate(dateToUse))
+                // We are not validating the native call here.
+                // We just want to be sure that we're using the value the user provided us.
+                if (Dbg.Internal.InternalTestHooks.SetDate)
+                {
+                    WriteObject(dateToUse);
+                }
+                else if (!Platform.NonWindowsSetDate(dateToUse))
                 {
                     throw new Win32Exception(Marshal.GetLastWin32Error());
                 }
 #else
                 // build up the SystemTime struct to pass to SetSystemTime
                 NativeMethods.SystemTime systemTime = new();
-                systemTime.Year = (UInt16)dateToUse.Year;
-                systemTime.Month = (UInt16)dateToUse.Month;
-                systemTime.Day = (UInt16)dateToUse.Day;
-                systemTime.Hour = (UInt16)dateToUse.Hour;
-                systemTime.Minute = (UInt16)dateToUse.Minute;
-                systemTime.Second = (UInt16)dateToUse.Second;
-                systemTime.Milliseconds = (UInt16)dateToUse.Millisecond;
+                systemTime.Year = (ushort)dateToUse.Year;
+                systemTime.Month = (ushort)dateToUse.Month;
+                systemTime.Day = (ushort)dateToUse.Day;
+                systemTime.Hour = (ushort)dateToUse.Hour;
+                systemTime.Minute = (ushort)dateToUse.Minute;
+                systemTime.Second = (ushort)dateToUse.Second;
+                systemTime.Milliseconds = (ushort)dateToUse.Millisecond;
 #pragma warning disable 56523
-                if (!NativeMethods.SetLocalTime(ref systemTime))
+                if (Dbg.Internal.InternalTestHooks.SetDate)
                 {
-                    throw new Win32Exception(Marshal.GetLastWin32Error());
+                    WriteObject(systemTime);
                 }
-
-                // MSDN says to call this twice to account for changes
-                // between DST
-                if (!NativeMethods.SetLocalTime(ref systemTime))
+                else
                 {
-                    throw new Win32Exception(Marshal.GetLastWin32Error());
+                    if (!NativeMethods.SetLocalTime(ref systemTime))
+                    {
+                        throw new Win32Exception(Marshal.GetLastWin32Error());
+                    }
+
+                    // MSDN says to call this twice to account for changes
+                    // between DST
+                    if (!NativeMethods.SetLocalTime(ref systemTime))
+                    {
+                        throw new Win32Exception(Marshal.GetLastWin32Error());
+                    }
                 }
 #pragma warning restore 56523
 #endif
@@ -106,7 +118,11 @@ protected override void ProcessRecord()
             PSNoteProperty note = new("DisplayHint", DisplayHint);
             outputObj.Properties.Add(note);
 
-            WriteObject(outputObj);
+            // If we've turned on the SetDate test hook, don't emit the output object here because we emitted it earlier.
+            if (!Dbg.Internal.InternalTestHooks.SetDate)
+            {
+                WriteObject(outputObj);
+            }
         }
 
         #endregion
@@ -118,14 +134,14 @@ internal static class NativeMethods
             [StructLayout(LayoutKind.Sequential)]
             public struct SystemTime
             {
-                public UInt16 Year;
-                public UInt16 Month;
-                public UInt16 DayOfWeek;
-                public UInt16 Day;
-                public UInt16 Hour;
-                public UInt16 Minute;
-                public UInt16 Second;
-                public UInt16 Milliseconds;
+                public ushort Year;
+                public ushort Month;
+                public ushort DayOfWeek;
+                public ushort Day;
+                public ushort Hour;
+                public ushort Minute;
+                public ushort Second;
+                public ushort Milliseconds;
             }
 
             [DllImport(PinvokeDllNames.SetLocalTimeDllName, SetLastError = true)]
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommand.cs
index 330716af151..60b05807d48 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommand.cs
@@ -75,14 +75,14 @@ public class ShowCommandCommand : PSCmdlet, IDisposable
         /// Gets or sets the Width.
         /// </summary>
         [Parameter]
-        [ValidateRange(300, Int32.MaxValue)]
+        [ValidateRange(300, int.MaxValue)]
         public double Height { get; set; }
 
         /// <summary>
         /// Gets or sets the Width.
         /// </summary>
         [Parameter]
-        [ValidateRange(300, Int32.MaxValue)]
+        [ValidateRange(300, int.MaxValue)]
         public double Width { get; set; }
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandCommandInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandCommandInfo.cs
index e3de5cac296..e2ba41fb3fc 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandCommandInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandCommandInfo.cs
@@ -22,10 +22,7 @@ public class ShowCommandCommandInfo
         /// </param>
         public ShowCommandCommandInfo(CommandInfo other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Name;
             this.ModuleName = other.ModuleName;
@@ -39,7 +36,7 @@ public ShowCommandCommandInfo(CommandInfo other)
             {
                 this.ParameterSets =
                     other.ParameterSets
-                        .Select(x => new ShowCommandParameterSetInfo(x))
+                        .Select(static x => new ShowCommandParameterSetInfo(x))
                         .ToList()
                         .AsReadOnly();
             }
@@ -71,10 +68,7 @@ public ShowCommandCommandInfo(CommandInfo other)
         /// </param>
         public ShowCommandCommandInfo(PSObject other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Members["Name"].Value as string;
             this.ModuleName = other.Members["ModuleName"].Value as string;
@@ -92,7 +86,7 @@ public ShowCommandCommandInfo(PSObject other)
                 this.CommandType = (CommandTypes)((other.Members["CommandType"].Value as PSObject).BaseObject);
 
                 var parameterSets = (other.Members["ParameterSets"].Value as PSObject).BaseObject as System.Collections.ArrayList;
-                this.ParameterSets = GetObjectEnumerable(parameterSets).Cast<PSObject>().Select(x => new ShowCommandParameterSetInfo(x)).ToList().AsReadOnly();
+                this.ParameterSets = GetObjectEnumerable(parameterSets).Cast<PSObject>().Select(static x => new ShowCommandParameterSetInfo(x)).ToList().AsReadOnly();
 
                 if (other.Members["Module"]?.Value is PSObject)
                 {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandModuleInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandModuleInfo.cs
index b12cc5651f4..f31bc93525d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandModuleInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandModuleInfo.cs
@@ -20,10 +20,7 @@ public class ShowCommandModuleInfo
         /// </param>
         public ShowCommandModuleInfo(PSModuleInfo other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Name;
         }
@@ -37,10 +34,7 @@ public ShowCommandModuleInfo(PSModuleInfo other)
         /// </param>
         public ShowCommandModuleInfo(PSObject other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Members["Name"].Value as string;
         }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterInfo.cs
index 04a74b4fc45..9bf79c5bd76 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterInfo.cs
@@ -22,10 +22,7 @@ public class ShowCommandParameterInfo
         /// </param>
         public ShowCommandParameterInfo(CommandParameterInfo other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Name;
             this.IsMandatory = other.IsMandatory;
@@ -33,7 +30,7 @@ public ShowCommandParameterInfo(CommandParameterInfo other)
             this.ParameterType = new ShowCommandParameterType(other.ParameterType);
             this.Position = other.Position;
 
-            var validateSetAttribute = other.Attributes.Where(x => typeof(ValidateSetAttribute).IsAssignableFrom(x.GetType())).Cast<ValidateSetAttribute>().LastOrDefault();
+            var validateSetAttribute = other.Attributes.Where(static x => typeof(ValidateSetAttribute).IsAssignableFrom(x.GetType())).Cast<ValidateSetAttribute>().LastOrDefault();
             if (validateSetAttribute != null)
             {
                 this.HasParameterSet = true;
@@ -50,10 +47,7 @@ public ShowCommandParameterInfo(CommandParameterInfo other)
         /// </param>
         public ShowCommandParameterInfo(PSObject other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Members["Name"].Value as string;
             this.IsMandatory = (bool)(other.Members["IsMandatory"].Value);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterSetInfo.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterSetInfo.cs
index fb25e2e4745..c5ec1c74c08 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterSetInfo.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterSetInfo.cs
@@ -22,14 +22,11 @@ public class ShowCommandParameterSetInfo
         /// </param>
         public ShowCommandParameterSetInfo(CommandParameterSetInfo other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Name;
             this.IsDefault = other.IsDefault;
-            this.Parameters = other.Parameters.Select(x => new ShowCommandParameterInfo(x)).ToArray();
+            this.Parameters = other.Parameters.Select(static x => new ShowCommandParameterInfo(x)).ToArray();
         }
 
         /// <summary>
@@ -41,15 +38,12 @@ public ShowCommandParameterSetInfo(CommandParameterSetInfo other)
         /// </param>
         public ShowCommandParameterSetInfo(PSObject other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.Name = other.Members["Name"].Value as string;
             this.IsDefault = (bool)(other.Members["IsDefault"].Value);
             var parameters = (other.Members["Parameters"].Value as PSObject).BaseObject as System.Collections.ArrayList;
-            this.Parameters = ShowCommandCommandInfo.GetObjectEnumerable(parameters).Cast<PSObject>().Select(x => new ShowCommandParameterInfo(x)).ToArray();
+            this.Parameters = ShowCommandCommandInfo.GetObjectEnumerable(parameters).Cast<PSObject>().Select(static x => new ShowCommandParameterInfo(x)).ToArray();
         }
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterType.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterType.cs
index 1daf0350dbc..01da285a1d7 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterType.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandParameterType.cs
@@ -21,10 +21,7 @@ public class ShowCommandParameterType
         /// </param>
         public ShowCommandParameterType(Type other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.FullName = other.FullName;
             if (other.IsEnum)
@@ -51,10 +48,7 @@ public ShowCommandParameterType(Type other)
         /// </param>
         public ShowCommandParameterType(PSObject other)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             this.IsEnum = (bool)(other.Members["IsEnum"].Value);
             this.FullName = other.Members["FullName"].Value as string;
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandProxy.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandProxy.cs
index a8a9c8f194d..ab8909bb590 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandProxy.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowCommand/ShowCommandProxy.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerShell.Commands
     /// Help show-command create WPF object and invoke WPF windows with the
     /// Microsoft.PowerShell.Commands.ShowCommandInternal.ShowCommandHelperhelp type defined in Microsoft.PowerShell.GraphicalHost.dll.
     /// </summary>
-    internal class ShowCommandProxy
+    internal sealed class ShowCommandProxy
     {
         private const string ShowCommandHelperName = "Microsoft.PowerShell.Commands.ShowCommandInternal.ShowCommandHelper";
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs
index 63ee15f6f59..3f40ec3439e 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/ShowMarkdownCommand.cs
@@ -224,10 +224,7 @@ private void ProcessMarkdownInfo(MarkdownInfo markdownInfo)
         /// </summary>
         protected override void EndProcessing()
         {
-            if (_powerShell != null)
-            {
-                _powerShell.Dispose();
-            }
+            _powerShell?.Dispose();
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Sort-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Sort-Object.cs
index 06f5ebfffad..365a669c186 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Sort-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Sort-Object.cs
@@ -147,7 +147,7 @@ private int Heapify(List<OrderByPropertyEntry> dataToSort, OrderByPropertyCompar
 
             // Tracking the index is necessary so that unsortable items can be output at the end, in the order
             // in which they were received.
-            for (int dataIndex = 0, discardedDuplicates = 0; dataIndex < dataToSort.Count - discardedDuplicates; dataIndex++)
+            for (int dataIndex = 0, discardedDuplicates = 0; dataIndex + discardedDuplicates < dataToSort.Count; dataIndex++)
             {
                 // Min-heap: if the heap is full and the root item is larger than the entry, discard the entry
                 // Max-heap: if the heap is full and the root item is smaller than the entry, discard the entry
@@ -157,20 +157,19 @@ private int Heapify(List<OrderByPropertyEntry> dataToSort, OrderByPropertyCompar
                 }
 
                 // If we're doing a unique sort and the entry is not unique, discard the duplicate entry
-                if (Unique && !uniqueSet.Add(dataToSort[dataIndex]))
+                if (Unique && !uniqueSet.Add(dataToSort[dataIndex + discardedDuplicates]))
                 {
                     discardedDuplicates++;
-                    if (dataIndex != dataToSort.Count - discardedDuplicates)
-                    {
-                        // When discarding duplicates, replace them with an item at the end of the list and
-                        // adjust our counter so that we check the item we just swapped in next
-                        dataToSort[dataIndex] = dataToSort[dataToSort.Count - discardedDuplicates];
-                        dataIndex--;
-                    }
-
+                    dataIndex--;
                     continue;
                 }
 
+                // Shift next non-duplicate entry into place
+                if (discardedDuplicates > 0)
+                {
+                    dataToSort[dataIndex] = dataToSort[dataIndex + discardedDuplicates];
+                }
+
                 // Add the current item to the heap and bubble it up into the correct position
                 int childIndex = dataIndex;
                 while (childIndex > 0)
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/StartSleepCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/StartSleepCommand.cs
index a57d635f3eb..839a0b7c051 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/StartSleepCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/StartSleepCommand.cs
@@ -44,17 +44,26 @@ public void Dispose()
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ParameterSetName = "Seconds", ValueFromPipeline = true,
                    ValueFromPipelineByPropertyName = true)]
-        [ValidateRangeAttribute(0.0, (double)(int.MaxValue / 1000))]
+        [ValidateRange(0.0, (double)(int.MaxValue / 1000))]
         public double Seconds { get; set; }
 
         /// <summary>
         /// Allows sleep time to be specified in milliseconds.
         /// </summary>
         [Parameter(Mandatory = true, ParameterSetName = "Milliseconds", ValueFromPipelineByPropertyName = true)]
-        [ValidateRangeAttribute(0, int.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         [Alias("ms")]
         public int Milliseconds { get; set; }
 
+        /// <summary>
+        /// Allows sleep time to be specified as a TimeSpan.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = true, ParameterSetName = "FromTimeSpan", ValueFromPipeline = true,
+                   ValueFromPipelineByPropertyName = true)]
+        [ValidateRange(ValidateRangeKind.NonNegative)]
+        [Alias("ts")]
+        public TimeSpan Duration { get; set; }
+
         #endregion
 
         #region methods
@@ -82,10 +91,7 @@ private void Sleep(int milliSecondsToSleep)
                 }
             }
 
-            if (_waitHandle != null)
-            {
-                _waitHandle.WaitOne(milliSecondsToSleep, true);
-            }
+            _waitHandle?.WaitOne(milliSecondsToSleep, true);
         }
 
         /// <summary>
@@ -105,6 +111,26 @@ protected override void ProcessRecord()
                     sleepTime = Milliseconds;
                     break;
 
+                case "FromTimeSpan":
+                    if (Duration.TotalMilliseconds > int.MaxValue)
+                    {
+                        PSArgumentException argumentException = PSTraceSource.NewArgumentException(
+                            nameof(Duration),
+                            StartSleepStrings.MaximumDurationExceeded,
+                            TimeSpan.FromMilliseconds(int.MaxValue),
+                            Duration);
+
+                        ThrowTerminatingError(
+                            new ErrorRecord(
+                                argumentException,
+                                "MaximumDurationExceeded",
+                                ErrorCategory.InvalidArgument,
+                                targetObject: null));
+                    }
+
+                    sleepTime = (int)Math.Floor(Duration.TotalMilliseconds);
+                    break;
+
                 default:
                     Dbg.Diagnostics.Assert(false, "Only one of the specified parameter sets should be called.");
                     break;
@@ -121,10 +147,7 @@ protected override void StopProcessing()
             lock (_syncObject)
             {
                 _stopping = true;
-                if (_waitHandle != null)
-                {
-                    _waitHandle.Set();
-                }
+                _waitHandle?.Set();
             }
         }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs
index 78ca964d408..4a0f4831299 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Tee-Object.cs
@@ -3,6 +3,7 @@
 
 using System;
 using System.Management.Automation;
+using System.Text;
 
 using Microsoft.PowerShell.Commands.Internal.Format;
 
@@ -72,6 +73,16 @@ public SwitchParameter Append
 
         private bool _append;
 
+        /// <summary>
+        /// Gets or sets the Encoding.
+        /// </summary>
+        [Parameter(ParameterSetName = "File")]
+        [Parameter(ParameterSetName = "LiteralFile")]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
+        [ValidateNotNullOrEmpty]
+        public Encoding Encoding { get; set; } = Encoding.Default;
+
         /// <summary>
         /// Variable parameter.
         /// </summary>
@@ -95,12 +106,14 @@ protected override void BeginProcessing()
                 _commandWrapper.Initialize(Context, "out-file", typeof(OutFileCommand));
                 _commandWrapper.AddNamedParameter("filepath", _fileName);
                 _commandWrapper.AddNamedParameter("append", _append);
+                _commandWrapper.AddNamedParameter("encoding", Encoding);
             }
             else if (string.Equals(ParameterSetName, "LiteralFile", StringComparison.OrdinalIgnoreCase))
             {
                 _commandWrapper.Initialize(Context, "out-file", typeof(OutFileCommand));
                 _commandWrapper.AddNamedParameter("LiteralPath", _fileName);
                 _commandWrapper.AddNamedParameter("append", _append);
+                _commandWrapper.AddNamedParameter("encoding", Encoding);
             }
             else
             {
@@ -127,12 +140,15 @@ protected override void EndProcessing()
             _commandWrapper.ShutDown();
         }
 
-        private void Dispose(bool isDisposing)
+        /// <summary>
+        /// Release all resources.
+        /// </summary>
+        public void Dispose()
         {
             if (!_alreadyDisposed)
             {
                 _alreadyDisposed = true;
-                if (isDisposing && _commandWrapper != null)
+                if (_commandWrapper != null)
                 {
                     _commandWrapper.Dispose();
                     _commandWrapper = null;
@@ -140,15 +156,6 @@ private void Dispose(bool isDisposing)
             }
         }
 
-        /// <summary>
-        /// Dispose method in IDisposable.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
         #region private
         private CommandWrapper _commandWrapper;
         private bool _alreadyDisposed;
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/TestJsonCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/TestJsonCommand.cs
index c8ba1e7ea48..909cbff3c8f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/TestJsonCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/TestJsonCommand.cs
@@ -4,30 +4,83 @@
 using System;
 using System.Globalization;
 using System.IO;
+using System.Linq;
 using System.Management.Automation;
-using System.Reflection;
-using System.Runtime.ExceptionServices;
+using System.Net.Http;
 using System.Security;
-using Newtonsoft.Json.Linq;
-using NJsonSchema;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using Json.Schema;
 
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
     /// This class implements Test-Json command.
     /// </summary>
-    [Cmdlet(VerbsDiagnostic.Test, "Json", DefaultParameterSetName = ParameterAttribute.AllParameterSets, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096609")]
+    [Cmdlet(VerbsDiagnostic.Test, "Json", DefaultParameterSetName = JsonStringParameterSet, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096609")]
+    [OutputType(typeof(bool))]
     public class TestJsonCommand : PSCmdlet
     {
-        private const string SchemaFileParameterSet = "SchemaFile";
-        private const string SchemaStringParameterSet = "SchemaString";
+        #region Parameter Set Names
+
+        private const string JsonStringParameterSet = "JsonString";
+        private const string JsonStringWithSchemaStringParameterSet = "JsonStringWithSchemaString";
+        private const string JsonStringWithSchemaFileParameterSet = "JsonStringWithSchemaFile";
+        private const string JsonPathParameterSet = "JsonPath";
+        private const string JsonPathWithSchemaStringParameterSet = "JsonPathWithSchemaString";
+        private const string JsonPathWithSchemaFileParameterSet = "JsonPathWithSchemaFile";
+        private const string JsonLiteralPathParameterSet = "JsonLiteralPath";
+        private const string JsonLiteralPathWithSchemaStringParameterSet = "JsonLiteralPathWithSchemaString";
+        private const string JsonLiteralPathWithSchemaFileParameterSet = "JsonLiteralPathWithSchemaFile";
+
+        #endregion
+
+        #region Json Document Option Constants
+
+        private const string IgnoreCommentsOption = "IgnoreComments";
+        private const string AllowTrailingCommasOption = "AllowTrailingCommas";
+
+        #endregion
+
+        #region Parameters
 
         /// <summary>
         /// Gets or sets JSON string to be validated.
         /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = JsonStringParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = JsonStringWithSchemaStringParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = JsonStringWithSchemaFileParameterSet)]
         public string Json { get; set; }
 
+        /// <summary>
+        /// Gets or sets JSON file path to be validated.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonPathParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonPathWithSchemaStringParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonPathWithSchemaFileParameterSet)]
+        public string Path { get; set; }
+
+        /// <summary>
+        /// Gets or sets JSON literal file path to be validated.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonLiteralPathParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonLiteralPathWithSchemaStringParameterSet)]
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = JsonLiteralPathWithSchemaFileParameterSet)]
+        [Alias("PSPath", "LP")]
+        public string LiteralPath
+        {
+            get
+            {
+                return _isLiteralPath ? Path : null;
+            }
+
+            set
+            {
+                _isLiteralPath = true;
+                Path = value;
+            }
+        }
+
         /// <summary>
         /// Gets or sets schema to validate the JSON against.
         /// This is optional parameter.
@@ -36,46 +89,82 @@ public class TestJsonCommand : PSCmdlet
         /// then validates the JSON against the schema. Before testing the JSON string,
         /// the cmdlet parses the schema doing implicitly check the schema too.
         /// </summary>
-        [Parameter(Position = 1, ParameterSetName = SchemaStringParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonStringWithSchemaStringParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonPathWithSchemaStringParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonLiteralPathWithSchemaStringParameterSet)]
         [ValidateNotNullOrEmpty]
         public string Schema { get; set; }
 
         /// <summary>
-        /// Gets or sets path to the file containg schema to validate the JSON string against.
+        /// Gets or sets path to the file containing schema to validate the JSON string against.
         /// This is optional parameter.
         /// </summary>
-        [Parameter(Position = 1, ParameterSetName = SchemaFileParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonStringWithSchemaFileParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonPathWithSchemaFileParameterSet)]
+        [Parameter(Position = 1, Mandatory = true, ParameterSetName = JsonLiteralPathWithSchemaFileParameterSet)]
         [ValidateNotNullOrEmpty]
         public string SchemaFile { get; set; }
 
-        private JsonSchema _jschema;
-
         /// <summary>
-        /// Process all exceptions in the AggregateException.
-        /// Unwrap TargetInvocationException if any and
-        /// rethrow inner exception without losing the stack trace.
+        /// Gets or sets JSON document options.
         /// </summary>
-        /// <param name="e">AggregateException to be unwrapped.</param>
-        /// <returns>Return value is unreachable since we always rethrow.</returns>
-        private static bool UnwrapException(Exception e)
-        {
-            if (e.InnerException != null && e is TargetInvocationException)
-            {
-                ExceptionDispatchInfo.Capture(e.InnerException).Throw();
-            }
-            else
-            {
-                ExceptionDispatchInfo.Capture(e).Throw();
-            }
+        [Parameter]
+        [ValidateNotNullOrEmpty]
+        [ValidateSet(IgnoreCommentsOption, AllowTrailingCommasOption)]
+        public string[] Options { get; set; } = Array.Empty<string>();
 
-            return true;
-        }
+        #endregion
+
+        #region Private Members
+
+        private bool _isLiteralPath = false;
+        private JsonSchema _jschema;
+        private JsonDocumentOptions _documentOptions;
+
+        #endregion
 
         /// <summary>
         /// Prepare a JSON schema.
         /// </summary>
         protected override void BeginProcessing()
         {
+            // By default, a JSON Schema implementation isn't supposed to automatically fetch content.
+            // Instead JsonSchema.Net has been set up with a registry so that users can pre-register
+            // any schemas they may need to resolve.
+            // However, pre-registering schemas doesn't make sense in the context of a Powershell command,
+            // and automatically fetching referenced URIs is likely the preferred behavior.  To do that,
+            // this property must be set with a method to retrieve and deserialize the content.
+            // For more information, see https://json-everything.net/json-schema#automatic-resolution
+            SchemaRegistry.Global.Fetch = static uri =>
+            {
+                try
+                {
+                    string text;
+                    switch (uri.Scheme)
+                    {
+                        case "http":
+                        case "https":
+                            {
+                                using var client = new HttpClient();
+                                text = client.GetStringAsync(uri).Result;
+                                break;
+                            }
+                        case "file":
+                            var filename = Uri.UnescapeDataString(uri.AbsolutePath);
+                            text = File.ReadAllText(filename);
+                            break;
+                        default:
+                            throw new FormatException(string.Format(TestJsonCmdletStrings.InvalidUriScheme, uri.Scheme));
+                    }
+
+                    return JsonSerializer.Deserialize<JsonSchema>(text);
+                }
+                catch (Exception e)
+                {
+                    throw new JsonSchemaReferenceResolutionException(e);
+                }
+            };
+
             string resolvedpath = string.Empty;
 
             try
@@ -84,13 +173,12 @@ protected override void BeginProcessing()
                 {
                     try
                     {
-                        _jschema = JsonSchema.FromJsonAsync(Schema).Result;
+                        _jschema = JsonSchema.FromText(Schema);
                     }
-                    catch (AggregateException ae)
+                    catch (JsonException e)
                     {
-                        // Even if only one exception is thrown, it is still wrapped in an AggregateException exception
-                        // https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/exception-handling-task-parallel-library
-                        ae.Handle(UnwrapException);
+                        Exception exception = new(TestJsonCmdletStrings.InvalidJsonSchema, e);
+                        WriteError(new ErrorRecord(exception, "InvalidJsonSchema", ErrorCategory.InvalidData, Schema));
                     }
                 }
                 else if (SchemaFile != null)
@@ -98,17 +186,18 @@ protected override void BeginProcessing()
                     try
                     {
                         resolvedpath = Context.SessionState.Path.GetUnresolvedProviderPathFromPSPath(SchemaFile);
-                        _jschema = JsonSchema.FromFileAsync(resolvedpath).Result;
+                        _jschema = JsonSchema.FromFile(resolvedpath);
                     }
-                    catch (AggregateException ae)
+                    catch (JsonException e)
                     {
-                        ae.Handle(UnwrapException);
+                        Exception exception = new(TestJsonCmdletStrings.InvalidJsonSchema, e);
+                        WriteError(new ErrorRecord(exception, "InvalidJsonSchema", ErrorCategory.InvalidData, SchemaFile));
                     }
                 }
             }
             catch (Exception e) when (
                 // Handle exceptions related to file access to provide more specific error message
-                // https://docs.microsoft.com/en-us/dotnet/standard/io/handling-io-errors
+                // https://learn.microsoft.com/dotnet/standard/io/handling-io-errors
                 e is IOException ||
                 e is UnauthorizedAccessException ||
                 e is NotSupportedException ||
@@ -128,6 +217,14 @@ e is SecurityException
                 Exception exception = new(TestJsonCmdletStrings.InvalidJsonSchema, e);
                 ThrowTerminatingError(new ErrorRecord(exception, "InvalidJsonSchema", ErrorCategory.InvalidData, resolvedpath));
             }
+
+            _documentOptions = new JsonDocumentOptions
+            {
+                CommentHandling = Options.Contains(IgnoreCommentsOption, StringComparer.OrdinalIgnoreCase)
+                    ? JsonCommentHandling.Skip
+                    : JsonCommentHandling.Disallow,
+                AllowTrailingCommas = Options.Contains(AllowTrailingCommasOption, StringComparer.OrdinalIgnoreCase)
+            };
         }
 
         /// <summary>
@@ -135,31 +232,53 @@ e is SecurityException
         /// </summary>
         protected override void ProcessRecord()
         {
-            JObject parsedJson = null;
             bool result = true;
 
+            string jsonToParse = string.Empty;
+
+            if (Json != null)
+            {
+                jsonToParse = Json;
+            }
+            else if (Path != null)
+            {
+                string resolvedPath = PathUtils.ResolveFilePath(Path, this, _isLiteralPath);
+
+                if (!File.Exists(resolvedPath))
+                {
+                    ItemNotFoundException exception = new(
+                        Path,
+                        "PathNotFound",
+                        SessionStateStrings.PathNotFound);
+
+                    ThrowTerminatingError(exception.ErrorRecord);
+                }
+
+                jsonToParse = File.ReadAllText(resolvedPath);
+            }
+
             try
             {
-                parsedJson = JObject.Parse(Json);
+
+                var parsedJson = JsonNode.Parse(jsonToParse, nodeOptions: null, _documentOptions);
 
                 if (_jschema != null)
                 {
-                    var errorMessages = _jschema.Validate(parsedJson);
-                    if (errorMessages != null && errorMessages.Count != 0)
+                    EvaluationResults evaluationResults = _jschema.Evaluate(parsedJson, new EvaluationOptions { OutputFormat = OutputFormat.Hierarchical });
+                    result = evaluationResults.IsValid;
+                    if (!result)
                     {
-                        result = false;
-
-                        Exception exception = new(TestJsonCmdletStrings.InvalidJsonAgainstSchema);
-
-                        foreach (var message in errorMessages)
-                        {
-                            ErrorRecord errorRecord = new(exception, "InvalidJsonAgainstSchema", ErrorCategory.InvalidData, null);
-                            errorRecord.ErrorDetails = new ErrorDetails(message.ToString());
-                            WriteError(errorRecord);
-                        }
+                        ReportValidationErrors(evaluationResults);
                     }
                 }
             }
+            catch (JsonSchemaReferenceResolutionException jsonExc)
+            {
+                result = false;
+
+                Exception exception = new(TestJsonCmdletStrings.InvalidJsonSchema, jsonExc);
+                WriteError(new ErrorRecord(exception, "InvalidJsonSchema", ErrorCategory.InvalidData, _jschema));
+            }
             catch (Exception exc)
             {
                 result = false;
@@ -170,5 +289,47 @@ protected override void ProcessRecord()
 
             WriteObject(result);
         }
+
+        /// <summary>
+        /// Recursively reports validation errors from hierarchical evaluation results.
+        /// Skips nodes (and their children) where IsValid is true to avoid false positives
+        /// from constructs like OneOf or AnyOf.
+        /// </summary>
+        /// <param name="evaluationResult">The evaluation result to process.</param>
+        private void ReportValidationErrors(EvaluationResults evaluationResult)
+        {
+            // Skip this node and all children if validation passed
+            if (evaluationResult.IsValid)
+            {
+                return;
+            }
+
+            // Report errors at this level
+            HandleValidationErrors(evaluationResult);
+
+            // Recursively process child results
+            if (evaluationResult.HasDetails)
+            {
+                foreach (var nestedResult in evaluationResult.Details)
+                {
+                    ReportValidationErrors(nestedResult);
+                }
+            }
+        }
+
+        private void HandleValidationErrors(EvaluationResults evaluationResult)
+        {
+            if (!evaluationResult.HasErrors)
+            {
+                return;
+            }
+
+            foreach (var error in evaluationResult.Errors!)
+            {
+                Exception exception = new(string.Format(TestJsonCmdletStrings.InvalidJsonAgainstSchemaDetailed, error.Value, evaluationResult.InstanceLocation));
+                ErrorRecord errorRecord = new(exception, "InvalidJsonAgainstSchemaDetailed", ErrorCategory.InvalidData, null);
+                WriteError(errorRecord);
+            }
+        }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnblockFile.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnblockFile.cs
index 5c297ed86d5..6633a66f96f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnblockFile.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnblockFile.cs
@@ -137,7 +137,7 @@ protected override void ProcessRecord()
                 }
             }
 #else
-            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+            if (Platform.IsLinux)
             {
                 string errorMessage = UnblockFileStrings.LinuxNotSupported;
                 Exception e = new PlatformNotSupportedException(errorMessage);
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs
index f0f87eb9f66..cf65a1f73b3 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UnregisterEventCommand.cs
@@ -47,7 +47,7 @@ public string SourceIdentifier
         /// <summary>
         /// Flag that determines if we should include subscriptions used to support other subscriptions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force { get; set; }
 
         #endregion parameters
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-List.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-List.cs
index 5850eaca7db..99507d0461b 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-List.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-List.cs
@@ -26,7 +26,7 @@ public class UpdateListCommand : PSCmdlet
         /// Objects to add to the list.
         /// </summary>
         [Parameter(ParameterSetName = "AddRemoveSet")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Justification = "Cmdlets use arrays for parameters.")]
         public object[] Add { get; set; }
 
@@ -35,7 +35,7 @@ public class UpdateListCommand : PSCmdlet
         /// Objects to be removed from the list.
         /// </summary>
         [Parameter(ParameterSetName = "AddRemoveSet")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Justification = "Cmdlets use arrays for parameters.")]
         public object[] Remove { get; set; }
 
@@ -44,7 +44,7 @@ public class UpdateListCommand : PSCmdlet
         /// Objects in this list replace the objects in the target list.
         /// </summary>
         [Parameter(Mandatory = true, ParameterSetName = "ReplaceSet")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Justification = "Cmdlets use arrays for parameters.")]
         public object[] Replace { get; set; }
 
@@ -55,7 +55,7 @@ public class UpdateListCommand : PSCmdlet
         // [Parameter(ValueFromPipeline = true, ParameterSetName = "AddRemoveSet")]
         // [Parameter(ValueFromPipeline = true, ParameterSetName = "ReplaceSet")]
         [Parameter(ValueFromPipeline = true)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public PSObject InputObject { get; set; }
 
         /// <summary>
@@ -65,7 +65,7 @@ public class UpdateListCommand : PSCmdlet
         // [Parameter(Position = 0, ParameterSetName = "AddRemoveSet")]
         // [Parameter(Position = 0, ParameterSetName = "ReplaceSet")]
         [Parameter(Position = 0)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string Property { get; set; }
 
         private PSListModifier _listModifier;
@@ -83,10 +83,7 @@ protected override void ProcessRecord()
                 }
                 else
                 {
-                    if (_listModifier == null)
-                    {
-                        _listModifier = CreatePSListModifier();
-                    }
+                    _listModifier ??= CreatePSListModifier();
 
                     PSMemberInfo memberInfo = InputObject.Members[Property];
                     if (memberInfo != null)
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs
index d137524629d..b73d8570040 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Update-TypeData.cs
@@ -260,7 +260,7 @@ public string[] PropertySerializationSet
         /// The type name we want to update on.
         /// </summary>
         [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = DynamicTypeSet)]
-        [ArgumentToTypeNameTransformationAttribute()]
+        [ArgumentToTypeNameTransformation]
         [ValidateNotNullOrEmpty]
         public string TypeName
         {
@@ -792,9 +792,8 @@ private void ProcessTypeFiles()
 
                     if (ShouldProcess(formattedTarget, action))
                     {
-                        if (!fullFileNameHash.Contains(resolvedPath))
+                        if (fullFileNameHash.Add(resolvedPath))
                         {
-                            fullFileNameHash.Add(resolvedPath);
                             newTypes.Add(new SessionStateTypeEntry(prependPathTotal[i]));
                         }
                     }
@@ -806,9 +805,8 @@ private void ProcessTypeFiles()
                     if (entry.FileName != null)
                     {
                         string resolvedPath = ModuleCmdletBase.ResolveRootedFilePath(entry.FileName, Context) ?? entry.FileName;
-                        if (!fullFileNameHash.Contains(resolvedPath))
+                        if (fullFileNameHash.Add(resolvedPath))
                         {
-                            fullFileNameHash.Add(resolvedPath);
                             newTypes.Add(entry);
                         }
                     }
@@ -825,9 +823,8 @@ private void ProcessTypeFiles()
 
                     if (ShouldProcess(formattedTarget, action))
                     {
-                        if (!fullFileNameHash.Contains(resolvedPath))
+                        if (fullFileNameHash.Add(resolvedPath))
                         {
-                            fullFileNameHash.Add(resolvedPath);
                             newTypes.Add(new SessionStateTypeEntry(appendPathTotalItem));
                         }
                     }
@@ -849,8 +846,7 @@ private void ProcessTypeFiles()
                         }
                         else if (sste.FileName != null)
                         {
-                            bool unused;
-                            Context.TypeTable.Update(sste.FileName, sste.FileName, errors, Context.AuthorizationManager, Context.InitialSessionState.Host, out unused);
+                            Context.TypeTable.Update(sste.FileName, sste.FileName, errors, Context.AuthorizationManager, Context.InitialSessionState.Host, out _);
                         }
                         else
                         {
@@ -972,9 +968,8 @@ protected override void ProcessRecord()
 
                     if (ShouldProcess(formattedTarget, action))
                     {
-                        if (!fullFileNameHash.Contains(appendPathTotalItem))
+                        if (fullFileNameHash.Add(appendPathTotalItem))
                         {
-                            fullFileNameHash.Add(appendPathTotalItem);
                             newFormats.Add(new SessionStateFormatEntry(appendPathTotalItem));
                         }
                     }
@@ -1056,7 +1051,7 @@ public class RemoveTypeDataCommand : PSCmdlet
         /// The target type to remove.
         /// </summary>
         [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = RemoveTypeSet)]
-        [ArgumentToTypeNameTransformationAttribute()]
+        [ArgumentToTypeNameTransformation]
         [ValidateNotNullOrEmpty]
         public string TypeName
         {
@@ -1118,7 +1113,10 @@ protected override void ProcessRecord()
                 string removeFileTarget = UpdateDataStrings.UpdateTarget;
 
                 Collection<string> typeFileTotal = UpdateData.Glob(_typeFiles, "TypePathException", this);
-                if (typeFileTotal.Count == 0) { return; }
+                if (typeFileTotal.Count == 0)
+                {
+                    return;
+                }
 
                 // Key of the map is the name of the file that is in the cache. Value of the map is a index list. Duplicate files might
                 // exist in the cache because the user can add arbitrary files to the cache by $host.Runspace.InitialSessionState.Types.Add()
@@ -1130,7 +1128,10 @@ protected override void ProcessRecord()
                     for (int index = 0; index < Context.InitialSessionState.Types.Count; index++)
                     {
                         string fileName = Context.InitialSessionState.Types[index].FileName;
-                        if (fileName == null) { continue; }
+                        if (fileName == null)
+                        {
+                            continue;
+                        }
 
                         // Resolving the file path because the path to the types file in module manifest is now specified as
                         // ..\..\types.ps1xml which expands to C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Core\..\..\types.ps1xml
@@ -1161,10 +1162,7 @@ protected override void ProcessRecord()
                     indicesToRemove.Sort();
                     for (int i = indicesToRemove.Count - 1; i >= 0; i--)
                     {
-                        if (Context.InitialSessionState != null)
-                        {
-                            Context.InitialSessionState.Types.RemoveItem(indicesToRemove[i]);
-                        }
+                        Context.InitialSessionState?.Types.RemoveItem(indicesToRemove[i]);
                     }
 
                     try
@@ -1337,7 +1335,6 @@ protected override void ProcessRecord()
             ValidateTypeName();
 
             Dictionary<string, TypeData> alltypes = Context.TypeTable.GetAllTypeData();
-            Collection<TypeData> typedefs = new();
 
             foreach (string type in alltypes.Keys)
             {
@@ -1345,17 +1342,11 @@ protected override void ProcessRecord()
                 {
                     if (pattern.IsMatch(type))
                     {
-                        typedefs.Add(alltypes[type]);
+                        WriteObject(alltypes[type]);
                         break;
                     }
                 }
             }
-
-            // write out all the available type definitions
-            foreach (TypeData typedef in typedefs)
-            {
-                WriteObject(typedef);
-            }
         }
     }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UtilityCommon.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UtilityCommon.cs
index 69b89e928ce..1e3cc038750 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UtilityCommon.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/UtilityCommon.cs
@@ -78,15 +78,10 @@ public static class UtilityResources
         public static string FileReadError { get { return UtilityCommonStrings.FileReadError; } }
 
         /// <summary>
-        /// The resource string used to indicate 'PATH:' in the formating header.
+        /// The resource string used to indicate 'PATH:' in the formatting header.
         /// </summary>
         public static string FormatHexPathPrefix { get { return UtilityCommonStrings.FormatHexPathPrefix; } }
 
-        /// <summary>
-        /// Error message to indicate that requested algorithm is not supported on the target platform.
-        /// </summary>
-        public static string AlgorithmTypeNotSupported { get { return UtilityCommonStrings.AlgorithmTypeNotSupported; } }
-
         /// <summary>
         /// The file '{0}' could not be parsed as a PowerShell Data File.
         /// </summary>
@@ -188,11 +183,11 @@ public ByteCollection(byte[] value)
         /// Gets the Offset address to be used while displaying the bytes in the collection.
         /// </summary>
         [Obsolete("The property is deprecated, please use Offset64 instead.", true)]
-        public UInt32 Offset
+        public uint Offset
         {
             get
             {
-                return (UInt32)Offset64;
+                return (uint)Offset64;
             }
 
             private set
@@ -204,7 +199,7 @@ private set
         /// <summary>
         /// Gets the Offset address to be used while displaying the bytes in the collection.
         /// </summary>
-        public UInt64 Offset64 { get; private set; }
+        public ulong Offset64 { get; private set; }
 
         /// <summary>
         /// Gets underlying bytes stored in the collection.
@@ -220,7 +215,7 @@ private set
         /// <summary>
         /// Gets the hexadecimal representation of the <see cref="Offset64"/> value.
         /// </summary>
-        public string HexOffset { get => string.Format(CultureInfo.CurrentCulture, "{0:X16}", Offset64); }
+        public string HexOffset => string.Create(CultureInfo.CurrentCulture, $"{Offset64:X16}");
 
         /// <summary>
         /// Gets the type of the input objects used to create the <see cref="ByteCollection"/>.
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs
index 20f8f847475..a41b284f568 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Var.cs
@@ -22,6 +22,7 @@ public abstract class VariableCommandBase : PSCmdlet
         /// </summary>
         [Parameter]
         [ValidateNotNullOrEmpty]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         #endregion parameters
@@ -38,10 +39,7 @@ protected string[] IncludeFilters
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _include = value;
             }
@@ -61,10 +59,7 @@ protected string[] ExcludeFilters
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _exclude = value;
             }
@@ -258,10 +253,7 @@ public string[] Name
 
             set
             {
-                if (value == null)
-                {
-                    value = new string[] { "*" };
-                }
+                value ??= new string[] { "*" };
 
                 _name = value;
             }
@@ -336,7 +328,7 @@ protected override void ProcessRecord()
                     GetMatchingVariables(varName, Scope, out wasFiltered, /*quiet*/ false);
 
                 matchingVariables.Sort(
-                    (PSVariable left, PSVariable right) => StringComparer.CurrentCultureIgnoreCase.Compare(left.Name, right.Name));
+                    static (PSVariable left, PSVariable right) => StringComparer.CurrentCultureIgnoreCase.Compare(left.Name, right.Name));
 
                 bool matchFound = false;
                 foreach (PSVariable matchingVariable in matchingVariables)
@@ -374,6 +366,7 @@ protected override void ProcessRecord()
     /// </summary>
     [Cmdlet(VerbsCommon.New, "Variable", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097121")]
+    [OutputType(typeof(PSVariable))]
     public sealed class NewVariableCommand : VariableCommandBase
     {
         #region parameters
@@ -700,6 +693,12 @@ public SwitchParameter PassThru
 
         private bool _passThru;
 
+        /// <summary>
+        /// Gets whether we will append to the variable if it exists.
+        /// </summary>
+        [Parameter]
+        public SwitchParameter Append { get; set; }
+
         private bool _nameIsFormalParameter;
         private bool _valueIsFormalParameter;
         #endregion parameters
@@ -718,6 +717,33 @@ protected override void BeginProcessing()
             {
                 _valueIsFormalParameter = true;
             }
+
+            if (Append)
+            {
+                // create the list here and add to it if it has a value
+                // but if they have more than one name, produce an error
+                if (Name.Length != 1)
+                {
+                    ErrorRecord appendVariableError = new ErrorRecord(new InvalidOperationException(), "SetVariableAppend", ErrorCategory.InvalidOperation, Name);
+                    appendVariableError.ErrorDetails = new ErrorDetails("SetVariableAppend");
+                    appendVariableError.ErrorDetails.RecommendedAction = VariableCommandStrings.UseSingleVariable;
+                    ThrowTerminatingError(appendVariableError);
+                }
+
+                _valueList = new List<object>();
+                var currentValue = Context.SessionState.PSVariable.Get(Name[0]);
+                if (currentValue is not null)
+                {
+                    if (currentValue.Value is IList<object> ilist)
+                    {
+                        _valueList.AddRange(ilist);
+                    }
+                    else
+                    {
+                        _valueList.Add(currentValue.Value);
+                    }
+                }
+            }
         }
 
         /// <summary>
@@ -733,6 +759,16 @@ protected override void ProcessRecord()
         {
             if (_nameIsFormalParameter && _valueIsFormalParameter)
             {
+                if (Append)
+                {
+                    if (Value != AutomationNull.Value)
+                    {
+                        _valueList ??= new List<object>();
+
+                        _valueList.Add(Value);
+                    }
+                }
+
                 return;
             }
 
@@ -740,10 +776,7 @@ protected override void ProcessRecord()
             {
                 if (Value != AutomationNull.Value)
                 {
-                    if (_valueList == null)
-                    {
-                        _valueList = new List<object>();
-                    }
+                    _valueList ??= new List<object>();
 
                     _valueList.Add(Value);
                 }
@@ -766,7 +799,14 @@ protected override void EndProcessing()
             {
                 if (_valueIsFormalParameter)
                 {
-                    SetVariable(Name, Value);
+                    if (Append)
+                    {
+                        SetVariable(Name, _valueList);
+                    }
+                    else
+                    {
+                        SetVariable(Name, Value);
+                    }
                 }
                 else
                 {
@@ -870,10 +910,7 @@ private void SetVariable(string[] varNames, object varValue)
                                 newVarValue,
                                 newOptions);
 
-                        if (Description == null)
-                        {
-                            Description = string.Empty;
-                        }
+                        Description ??= string.Empty;
 
                         varToSet.Description = Description;
 
@@ -1102,10 +1139,7 @@ protected override void ProcessRecord()
             // Removal of variables only happens in the local scope if the
             // scope wasn't explicitly specified by the user.
 
-            if (Scope == null)
-            {
-                Scope = "local";
-            }
+            Scope ??= "local";
 
             foreach (string varName in Name)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs
index 70ac9e4ae95..3c4336f07d0 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WaitEventCommand.cs
@@ -42,7 +42,7 @@ public string SourceIdentifier
         /// </summary>
         [Parameter]
         [Alias("TimeoutSec")]
-        [ValidateRangeAttribute(-1, Int32.MaxValue)]
+        [ValidateRange(-1, int.MaxValue)]
         public int Timeout
         {
             get
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs
index 969dd8231c8..ea650e80e67 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/BasicHtmlWebResponseObject.Common.cs
@@ -1,13 +1,18 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
+using System;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Management.Automation;
 using System.Net.Http;
 using System.Text;
 using System.Text.RegularExpressions;
+using System.Threading;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -16,38 +21,27 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     public class BasicHtmlWebResponseObject : WebResponseObject
     {
-        #region Private Fields
-
-        private static Regex s_attribNameValueRegex;
-        private static Regex s_attribsRegex;
-        private static Regex s_imageRegex;
-        private static Regex s_inputFieldRegex;
-        private static Regex s_linkRegex;
-        private static Regex s_tagRegex;
-
-        #endregion Private Fields
-
         #region Constructors
 
         /// <summary>
         /// Initializes a new instance of the <see cref="BasicHtmlWebResponseObject"/> class.
         /// </summary>
-        /// <param name="response"></param>
-        public BasicHtmlWebResponseObject(HttpResponseMessage response)
-            : this(response, null)
-        { }
+        /// <param name="response">The response.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
+        /// <param name="cancellationToken">Cancellation token.</param>
+        public BasicHtmlWebResponseObject(HttpResponseMessage response, TimeSpan perReadTimeout, CancellationToken cancellationToken) : this(response, null, perReadTimeout, cancellationToken) { }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="BasicHtmlWebResponseObject"/> class
         /// with the specified <paramref name="contentStream"/>.
         /// </summary>
-        /// <param name="response"></param>
-        /// <param name="contentStream"></param>
-        public BasicHtmlWebResponseObject(HttpResponseMessage response, Stream contentStream)
-            : base(response, contentStream)
+        /// <param name="response">The response.</param>
+        /// <param name="contentStream">The content stream associated with the response.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
+        /// <param name="cancellationToken">Cancellation token.</param>
+        public BasicHtmlWebResponseObject(HttpResponseMessage response, Stream? contentStream, TimeSpan perReadTimeout, CancellationToken cancellationToken) : base(response, contentStream, perReadTimeout, cancellationToken)
         {
-            EnsureHtmlParser();
-            InitializeContent();
+            InitializeContent(cancellationToken);
             InitializeRawContent(response);
         }
 
@@ -72,9 +66,9 @@ public BasicHtmlWebResponseObject(HttpResponseMessage response, Stream contentSt
         /// Encoding of the response body from the <c>Content-Type</c> header,
         /// or <see langword="null"/> if the encoding could not be determined.
         /// </value>
-        public Encoding Encoding { get; private set; }
+        public Encoding? Encoding { get; private set; }
 
-        private WebCmdletElementCollection _inputFields;
+        private WebCmdletElementCollection? _inputFields;
 
         /// <summary>
         /// Gets the HTML input field elements parsed from <see cref="Content"/>.
@@ -85,13 +79,11 @@ public WebCmdletElementCollection InputFields
             {
                 if (_inputFields == null)
                 {
-                    EnsureHtmlParser();
-
                     List<PSObject> parsedFields = new();
-                    MatchCollection fieldMatch = s_inputFieldRegex.Matches(Content);
-                    foreach (Match field in fieldMatch)
+                    MatchCollection fieldMatch = HtmlParser.InputFieldRegex.Matches(Content);
+                    foreach (Match match in fieldMatch)
                     {
-                        parsedFields.Add(CreateHtmlObject(field.Value, "INPUT"));
+                        parsedFields.Add(CreateHtmlObject(match.Value, "INPUT"));
                     }
 
                     _inputFields = new WebCmdletElementCollection(parsedFields);
@@ -101,7 +93,7 @@ public WebCmdletElementCollection InputFields
             }
         }
 
-        private WebCmdletElementCollection _links;
+        private WebCmdletElementCollection? _links;
 
         /// <summary>
         /// Gets the HTML a link elements parsed from <see cref="Content"/>.
@@ -112,10 +104,8 @@ public WebCmdletElementCollection Links
             {
                 if (_links == null)
                 {
-                    EnsureHtmlParser();
-
                     List<PSObject> parsedLinks = new();
-                    MatchCollection linkMatch = s_linkRegex.Matches(Content);
+                    MatchCollection linkMatch = HtmlParser.LinkRegex.Matches(Content);
                     foreach (Match link in linkMatch)
                     {
                         parsedLinks.Add(CreateHtmlObject(link.Value, "A"));
@@ -128,7 +118,7 @@ public WebCmdletElementCollection Links
             }
         }
 
-        private WebCmdletElementCollection _images;
+        private WebCmdletElementCollection? _images;
 
         /// <summary>
         /// Gets the HTML img elements parsed from <see cref="Content"/>.
@@ -139,10 +129,8 @@ public WebCmdletElementCollection Images
             {
                 if (_images == null)
                 {
-                    EnsureHtmlParser();
-
                     List<PSObject> parsedImages = new();
-                    MatchCollection imageMatch = s_imageRegex.Matches(Content);
+                    MatchCollection imageMatch = HtmlParser.ImageRegex.Matches(Content);
                     foreach (Match image in imageMatch)
                     {
                         parsedImages.Add(CreateHtmlObject(image.Value, "IMG"));
@@ -162,26 +150,22 @@ public WebCmdletElementCollection Images
         /// <summary>
         /// Reads the response content from the web response.
         /// </summary>
-        protected void InitializeContent()
+        /// <param name="cancellationToken">The cancellation token.</param>
+        [MemberNotNull(nameof(Content))]
+        protected void InitializeContent(CancellationToken cancellationToken)
         {
-            string contentType = ContentHelper.GetContentType(BaseResponse);
+            string? contentType = ContentHelper.GetContentType(BaseResponse);
             if (ContentHelper.IsText(contentType))
             {
-                Encoding encoding = null;
-                // fill the Content buffer
-                string characterSet = WebResponseHelper.GetCharacterSet(BaseResponse);
-
-                if (string.IsNullOrEmpty(characterSet) && ContentHelper.IsJson(contentType))
-                {
-                    characterSet = Encoding.UTF8.HeaderName;
-                }
+                // Fill the Content buffer
+                string? characterSet = WebResponseHelper.GetCharacterSet(BaseResponse);
 
-                this.Content = StreamHelper.DecodeStream(RawContentStream, characterSet, out encoding);
-                this.Encoding = encoding;
+                Content = StreamHelper.DecodeStream(RawContentStream, characterSet, out Encoding encoding, perReadTimeout, cancellationToken);
+                Encoding = encoding;
             }
             else
             {
-                this.Content = string.Empty;
+                Content = string.Empty;
             }
         }
 
@@ -197,50 +181,11 @@ private static PSObject CreateHtmlObject(string html, string tagName)
             return elementObject;
         }
 
-        private static void EnsureHtmlParser()
-        {
-            if (s_tagRegex == null)
-            {
-                s_tagRegex = new Regex(@"<\w+((\s+[^""'>/=\s\p{Cc}]+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-
-            if (s_attribsRegex == null)
-            {
-                s_attribsRegex = new Regex(@"(?<=\s+)([^""'>/=\s\p{Cc}]+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-
-            if (s_attribNameValueRegex == null)
-            {
-                s_attribNameValueRegex = new Regex(@"([^""'>/=\s\p{Cc}]+)(?:\s*=\s*(?:""(.*?)""|'(.*?)'|([^'"">\s]+)))?",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-
-            if (s_inputFieldRegex == null)
-            {
-                s_inputFieldRegex = new Regex(@"<input\s+[^>]*(/>|>.*?</input>)",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-
-            if (s_linkRegex == null)
-            {
-                s_linkRegex = new Regex(@"<a\s+[^>]*(/>|>.*?</a>)",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-
-            if (s_imageRegex == null)
-            {
-                s_imageRegex = new Regex(@"<img\s[^>]*?>",
-                    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
-            }
-        }
-
         private void InitializeRawContent(HttpResponseMessage baseResponse)
         {
             StringBuilder raw = ContentHelper.GetRawContentHeader(baseResponse);
             raw.Append(Content);
-            this.RawContent = raw.ToString();
+            RawContent = raw.ToString();
         }
 
         private static void ParseAttributes(string outerHtml, PSObject elementObject)
@@ -250,23 +195,23 @@ private static void ParseAttributes(string outerHtml, PSObject elementObject)
             {
                 // Extract just the opening tag of the HTML element (omitting the closing tag and any contents,
                 // including contained HTML elements)
-                var match = s_tagRegex.Match(outerHtml);
+                Match match = HtmlParser.TagRegex.Match(outerHtml);
 
                 // Extract all the attribute specifications within the HTML element opening tag
-                var attribMatches = s_attribsRegex.Matches(match.Value);
+                MatchCollection attribMatches = HtmlParser.AttribsRegex.Matches(match.Value);
 
                 foreach (Match attribMatch in attribMatches)
                 {
                     // Extract the name and value for this attribute (allowing for variations like single/double/no
                     // quotes, and no value at all)
-                    var nvMatches = s_attribNameValueRegex.Match(attribMatch.Value);
+                    Match nvMatches = HtmlParser.AttribNameValueRegex.Match(attribMatch.Value);
                     Debug.Assert(nvMatches.Groups.Count == 5);
 
                     // Name is always captured by group #1
                     string name = nvMatches.Groups[1].Value;
 
                     // The value (if any) is captured by group #2, #3, or #4, depending on quoting or lack thereof
-                    string value = null;
+                    string? value = null;
                     if (nvMatches.Groups[2].Success)
                     {
                         value = nvMatches.Groups[2].Value;
@@ -286,5 +231,21 @@ private static void ParseAttributes(string outerHtml, PSObject elementObject)
         }
 
         #endregion Methods
+
+        // This class is needed so the static Regexes are initialized only the first time they are used
+        private static class HtmlParser
+        {
+            internal static readonly Regex AttribsRegex = new Regex(@"(?<=\s+)([^""'>/=\s\p{Cc}]+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
+            internal static readonly Regex AttribNameValueRegex = new Regex(@"([^""'>/=\s\p{Cc}]+)(?:\s*=\s*(?:""(.*?)""|'(.*?)'|([^'"">\s]+)))?", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
+            internal static readonly Regex ImageRegex = new Regex(@"<img\s[^>]*?>", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
+            internal static readonly Regex InputFieldRegex = new Regex(@"<input\s+[^>]*(/?>|>.*?</input>)", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
+            internal static readonly Regex LinkRegex = new Regex(@"<a\s+[^>]*(/>|>.*?</a>)", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
+            internal static readonly Regex TagRegex = new Regex(@"<\w+((\s+[^""'>/=\s\p{Cc}]+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
+        }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/ContentHelper.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/ContentHelper.Common.cs
index f16ad99d2a1..9eca5ce187a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/ContentHelper.Common.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/ContentHelper.Common.cs
@@ -1,70 +1,34 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
+using System.Diagnostics.CodeAnalysis;
 using System.Management.Automation;
 using System.Net.Http;
 using System.Net.Http.Headers;
 using System.Text;
-
+using Humanizer;
 using Microsoft.Win32;
 
 namespace Microsoft.PowerShell.Commands
 {
     internal static class ContentHelper
     {
-        #region Constants
-
-        // default codepage encoding for web content.  See RFC 2616.
-        private const string _defaultCodePage = "ISO-8859-1";
-
-        #endregion Constants
-
-        #region Fields
-
-        // used to split contentType arguments
-        private static readonly char[] s_contentTypeParamSeparator = { ';' };
-
-        #endregion Fields
-
         #region Internal Methods
 
-        internal static string GetContentType(HttpResponseMessage response)
-        {
-            // ContentType may not exist in response header.  Return null if not.
-            return response.Content.Headers.ContentType?.MediaType;
-        }
+        // ContentType may not exist in response header.  Return null if not.
+        internal static string? GetContentType(HttpResponseMessage response) => response.Content.Headers.ContentType?.MediaType;
 
-        internal static Encoding GetDefaultEncoding()
-        {
-            return GetEncodingOrDefault((string)null);
-        }
+        internal static string? GetContentType(HttpRequestMessage request) => request.Content?.Headers.ContentType?.MediaType;
 
-        internal static Encoding GetEncoding(HttpResponseMessage response)
-        {
-            // ContentType may not exist in response header.
-            string charSet = response.Content.Headers.ContentType?.CharSet;
-            return GetEncodingOrDefault(charSet);
-        }
+        internal static Encoding GetDefaultEncoding() => Encoding.UTF8;
 
-        internal static Encoding GetEncodingOrDefault(string characterSet)
-        {
-            // get the name of the codepage to use for response content
-            string codepage = (string.IsNullOrEmpty(characterSet) ? _defaultCodePage : characterSet);
-            Encoding encoding = null;
-
-            try
-            {
-                encoding = Encoding.GetEncoding(codepage);
-            }
-            catch (ArgumentException)
-            {
-                // 0, default code page
-                encoding = Encoding.GetEncoding(0);
-            }
-
-            return encoding;
-        }
+        internal static string GetFriendlyContentLength(long? length) =>
+            length.HasValue
+            ? $"{length.Value.Bytes().Humanize()} ({length.Value:#,0} bytes)"
+            : "unknown size";
 
         internal static StringBuilder GetRawContentHeader(HttpResponseMessage response)
         {
@@ -75,14 +39,13 @@ internal static StringBuilder GetRawContentHeader(HttpResponseMessage response)
             {
                 int statusCode = WebResponseHelper.GetStatusCode(response);
                 string statusDescription = WebResponseHelper.GetStatusDescription(response);
-                raw.AppendFormat("{0} {1} {2}", protocol, statusCode, statusDescription);
-                raw.AppendLine();
+                raw.AppendLine($"{protocol} {statusCode} {statusDescription}");
             }
 
             HttpHeaders[] headerCollections =
             {
                 response.Headers,
-                response.Content?.Headers
+                response.Content.Headers
             };
 
             foreach (var headerCollection in headerCollections)
@@ -95,12 +58,9 @@ internal static StringBuilder GetRawContentHeader(HttpResponseMessage response)
                 foreach (var header in headerCollection)
                 {
                     // Headers may have multiple entries with different values
-                    foreach (var headerValue in header.Value)
+                    foreach (string headerValue in header.Value)
                     {
-                        raw.Append(header.Key);
-                        raw.Append(": ");
-                        raw.Append(headerValue);
-                        raw.AppendLine();
+                        raw.AppendLine($"{header.Key}: {headerValue}");
                     }
                 }
             }
@@ -109,74 +69,55 @@ internal static StringBuilder GetRawContentHeader(HttpResponseMessage response)
             return raw;
         }
 
-        internal static bool IsJson(string contentType)
-        {
-            contentType = GetContentTypeSignature(contentType);
-            return CheckIsJson(contentType);
-        }
-
-        internal static bool IsText(string contentType)
-        {
-            contentType = GetContentTypeSignature(contentType);
-            return CheckIsText(contentType);
-        }
-
-        internal static bool IsXml(string contentType)
-        {
-            contentType = GetContentTypeSignature(contentType);
-            return CheckIsXml(contentType);
-        }
-
-        #endregion Internal Methods
-
-        #region Private Helper Methods
-
-        private static bool CheckIsJson(string contentType)
+        internal static bool IsJson([NotNullWhen(true)] string? contentType)
         {
             if (string.IsNullOrEmpty(contentType))
+            {
                 return false;
+            }
 
-            // the correct type for JSON content, as specified in RFC 4627
+            // The correct type for JSON content, as specified in RFC 4627
             bool isJson = contentType.Equals("application/json", StringComparison.OrdinalIgnoreCase);
 
-            // add in these other "javascript" related types that
+            // Add in these other "javascript" related types that
             // sometimes get sent down as the mime type for JSON content
             isJson |= contentType.Equals("text/json", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("application/x-javascript", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("text/x-javascript", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("application/javascript", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("text/javascript", StringComparison.OrdinalIgnoreCase);
+                   || contentType.Equals("application/x-javascript", StringComparison.OrdinalIgnoreCase)
+                   || contentType.Equals("text/x-javascript", StringComparison.OrdinalIgnoreCase)
+                   || contentType.Equals("application/javascript", StringComparison.OrdinalIgnoreCase)
+                   || contentType.Equals("text/javascript", StringComparison.OrdinalIgnoreCase);
 
-            return (isJson);
+            return isJson;
         }
 
-        private static bool CheckIsText(string contentType)
+        internal static bool IsText([NotNullWhen(true)] string? contentType)
         {
             if (string.IsNullOrEmpty(contentType))
+            {
                 return false;
+            }
 
-            // any text, xml or json types are text
+            // Any text, xml or json types are text
             bool isText = contentType.StartsWith("text/", StringComparison.OrdinalIgnoreCase)
-            || CheckIsXml(contentType)
-            || CheckIsJson(contentType);
+                        || IsXml(contentType)
+                        || IsJson(contentType);
 
             // Further content type analysis is available on Windows
             if (Platform.IsWindows && !isText)
             {
                 // Media types registered with Windows as having a perceived type of text, are text
-                using (RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + contentType))
+                using (RegistryKey? contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + contentType))
                 {
                     if (contentTypeKey != null)
                     {
-                        string extension = contentTypeKey.GetValue("Extension") as string;
-                        if (extension != null)
+                        if (contentTypeKey.GetValue("Extension") is string extension)
                         {
-                            using (RegistryKey extensionKey = Registry.ClassesRoot.OpenSubKey(extension))
+                            using (RegistryKey? extensionKey = Registry.ClassesRoot.OpenSubKey(extension))
                             {
                                 if (extensionKey != null)
                                 {
-                                    string perceivedType = extensionKey.GetValue("PerceivedType") as string;
-                                    isText = (perceivedType == "text");
+                                    string? perceivedType = extensionKey.GetValue("PerceivedType") as string;
+                                    isText = perceivedType == "text";
                                 }
                             }
                         }
@@ -184,32 +125,28 @@ private static bool CheckIsText(string contentType)
                 }
             }
 
-            return (isText);
+            return isText;
         }
 
-        private static bool CheckIsXml(string contentType)
+        internal static bool IsXml([NotNullWhen(true)] string? contentType)
         {
             if (string.IsNullOrEmpty(contentType))
+            {
                 return false;
+            }
 
             // RFC 3023: Media types with the suffix "+xml" are XML
-            bool isXml = (contentType.Equals("application/xml", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("application/xml-external-parsed-entity", StringComparison.OrdinalIgnoreCase)
-            || contentType.Equals("application/xml-dtd", StringComparison.OrdinalIgnoreCase));
+            bool isXml = contentType.Equals("application/xml", StringComparison.OrdinalIgnoreCase)
+                       || contentType.Equals("application/xml-external-parsed-entity", StringComparison.OrdinalIgnoreCase)
+                       || contentType.Equals("application/xml-dtd", StringComparison.OrdinalIgnoreCase)
+                       || contentType.EndsWith("+xml", StringComparison.OrdinalIgnoreCase);
 
-            isXml |= contentType.EndsWith("+xml", StringComparison.OrdinalIgnoreCase);
-            return (isXml);
+            return isXml;
         }
 
-        private static string GetContentTypeSignature(string contentType)
-        {
-            if (string.IsNullOrEmpty(contentType))
-                return null;
+        internal static bool IsTextBasedContentType([NotNullWhen(true)] string? contentType)
+            => IsText(contentType) || IsJson(contentType) || IsXml(contentType);
 
-            string sig = contentType.Split(s_contentTypeParamSeparator, 2)[0].ToUpperInvariant();
-            return (sig);
-        }
-
-        #endregion Private Helper Methods
+        #endregion Internal Methods
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/HttpVersionCompletionsAttribute.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/HttpVersionCompletionsAttribute.cs
new file mode 100644
index 00000000000..903ff4d8f80
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/HttpVersionCompletionsAttribute.cs
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Collections.Generic;
+using System.Management.Automation;
+using System.Net;
+using System.Reflection;
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// A completer for HTTP version names.
+    /// </summary>
+    internal sealed class HttpVersionCompletionsAttribute : ArgumentCompletionsAttribute
+    {
+        public static readonly string[] AllowedVersions;
+
+        static HttpVersionCompletionsAttribute()
+        {
+            FieldInfo[] fields = typeof(HttpVersion).GetFields(BindingFlags.Static | BindingFlags.Public);
+
+            var versions = new List<string>(fields.Length - 1);
+
+            for (int i = 0; i < fields.Length; i++)
+            {
+                // skip field Unknown and not Version type
+                if (fields[i].Name == nameof(HttpVersion.Unknown) || fields[i].FieldType != typeof(Version))
+                {
+                    continue;
+                }
+
+                var version = (Version?)fields[i].GetValue(null);
+
+                if (version is not null)
+                {
+                    versions.Add(version.ToString());
+                }
+            }
+
+            AllowedVersions = versions.ToArray();
+        }
+
+        /// <inheritdoc/>
+        public HttpVersionCompletionsAttribute() : base(AllowedVersions)
+        {
+        }
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs
index 235aaf82773..22ffaef288c 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/InvokeRestMethodCommand.Common.cs
@@ -1,11 +1,15 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
+using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Management.Automation;
 using System.Net.Http;
 using System.Text;
+using System.Threading;
 using System.Xml;
 
 using Newtonsoft.Json;
@@ -13,36 +17,18 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-    public partial class InvokeRestMethodCommand
+    /// <summary>
+    /// The Invoke-RestMethod command
+    /// This command makes an HTTP or HTTPS request to a web service,
+    /// and returns the response in an appropriate way.
+    /// Intended to work against the wide spectrum of "RESTful" web services
+    /// currently deployed across the web.
+    /// </summary>
+    [Cmdlet(VerbsLifecycle.Invoke, "RestMethod", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096706", DefaultParameterSetName = "StandardMethod")]
+    public class InvokeRestMethodCommand : WebRequestPSCmdlet
     {
         #region Parameters
 
-        /// <summary>
-        /// Gets or sets the parameter Method.
-        /// </summary>
-        [Parameter(ParameterSetName = "StandardMethod")]
-        [Parameter(ParameterSetName = "StandardMethodNoProxy")]
-        public override WebRequestMethod Method
-        {
-            get { return base.Method; }
-
-            set { base.Method = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets the parameter CustomMethod.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = "CustomMethod")]
-        [Parameter(Mandatory = true, ParameterSetName = "CustomMethodNoProxy")]
-        [Alias("CM")]
-        [ValidateNotNullOrEmpty]
-        public override string CustomMethod
-        {
-            get { return base.CustomMethod; }
-
-            set { base.CustomMethod = value; }
-        }
-
         /// <summary>
         /// Enable automatic following of rel links.
         /// </summary>
@@ -50,9 +36,9 @@ public override string CustomMethod
         [Alias("FL")]
         public SwitchParameter FollowRelLink
         {
-            get { return base._followRelLink; }
+            get => base._followRelLink;
 
-            set { base._followRelLink = value; }
+            set => base._followRelLink = value;
         }
 
         /// <summary>
@@ -60,12 +46,12 @@ public SwitchParameter FollowRelLink
         /// </summary>
         [Parameter]
         [Alias("ML")]
-        [ValidateRange(1, Int32.MaxValue)]
+        [ValidateRange(1, int.MaxValue)]
         public int MaximumFollowRelLink
         {
-            get { return base._maximumFollowRelLink; }
+            get => base._maximumFollowRelLink;
 
-            set { base._maximumFollowRelLink = value; }
+            set => base._maximumFollowRelLink = value;
         }
 
         /// <summary>
@@ -73,18 +59,137 @@ public int MaximumFollowRelLink
         /// </summary>
         [Parameter]
         [Alias("RHV")]
-        public string ResponseHeadersVariable { get; set; }
+        public string? ResponseHeadersVariable { get; set; }
 
         /// <summary>
         /// Gets or sets the variable name to use for storing the status code from the response.
         /// </summary>
         [Parameter]
-        public string StatusCodeVariable { get; set; }
+        public string? StatusCodeVariable { get; set; }
 
         #endregion Parameters
 
+        #region Virtual Method Overrides
+
+        /// <summary>
+        /// Process the web response and output corresponding objects.
+        /// </summary>
+        /// <param name="response"></param>
+        internal override void ProcessResponse(HttpResponseMessage response)
+        {
+            ArgumentNullException.ThrowIfNull(response);
+            ArgumentNullException.ThrowIfNull(_cancelToken);
+
+            TimeSpan perReadTimeout = ConvertTimeoutSecondsToTimeSpan(OperationTimeoutSeconds);
+            Stream responseStream = StreamHelper.GetResponseStream(response, _cancelToken.Token);
+
+            if (ShouldWriteToPipeline)
+            {
+                responseStream = new BufferingStreamReader(responseStream, perReadTimeout, _cancelToken.Token);
+
+                // First see if it is an RSS / ATOM feed, in which case we can
+                // stream it - unless the user has overridden it with a return type of "XML"
+                if (TryProcessFeedStream(responseStream))
+                {
+                    // Do nothing, content has been processed.
+                }
+                else
+                {
+                    // Try to get the response encoding from the ContentType header.
+                    string? characterSet = WebResponseHelper.GetCharacterSet(response);
+                    string str = StreamHelper.DecodeStream(responseStream, characterSet, out Encoding encoding, perReadTimeout, _cancelToken.Token);
+
+                    string friendlyName = "unknown";
+                    string encodingWebName = "unknown";
+                    string encodingPage = encoding.CodePage == -1 ? "unknown" : encoding.CodePage.ToString();
+                    try
+                    {
+                        // NOTE: These are getter methods that may possibly throw a NotSupportedException exception,
+                        // hence the try/catch
+                        encodingWebName = encoding.WebName;
+                        friendlyName = encoding.EncodingName;
+                    }
+                    catch
+                    {
+                    }
+
+                    // NOTE: Tests use this debug output to verify the encoding.
+                    WriteDebug($"WebResponse content encoding: {encodingWebName} ({friendlyName}) CodePage: {encodingPage}");
+
+                    // Determine the response type
+                    RestReturnType returnType = CheckReturnType(response);
+
+                    bool convertSuccess = false;
+                    object? obj = null;
+                    Exception? ex = null;
+
+                    if (returnType == RestReturnType.Json)
+                    {
+                        convertSuccess = TryConvertToJson(str, out obj, ref ex) || TryConvertToXml(str, out obj, ref ex);
+                    }
+                    // Default to try xml first since it's more common
+                    else
+                    {
+                        convertSuccess = TryConvertToXml(str, out obj, ref ex) || TryConvertToJson(str, out obj, ref ex);
+                    }
+
+                    if (!convertSuccess)
+                    {
+                        // Fallback to string
+                        obj = str;
+                    }
+
+                    WriteObject(obj);
+                }
+
+                responseStream.Position = 0;
+            }
+
+            if (ShouldSaveToOutFile)
+            {
+                string outFilePath = WebResponseHelper.GetOutFilePath(response, _qualifiedOutFile);
+
+                WriteVerbose($"File Name: {Path.GetFileName(outFilePath)}");
+
+                StreamHelper.SaveStreamToFile(responseStream, outFilePath, this, response.Content.Headers.ContentLength.GetValueOrDefault(), perReadTimeout, _cancelToken.Token);
+            }
+
+            if (!string.IsNullOrEmpty(StatusCodeVariable))
+            {
+                PSVariableIntrinsics vi = SessionState.PSVariable;
+                vi.Set(StatusCodeVariable, (int)response.StatusCode);
+            }
+
+            if (!string.IsNullOrEmpty(ResponseHeadersVariable))
+            {
+                PSVariableIntrinsics vi = SessionState.PSVariable;
+                vi.Set(ResponseHeadersVariable, WebResponseHelper.GetHeadersDictionary(response));
+            }
+        }
+
+        #endregion Virtual Method Overrides
+
         #region Helper Methods
 
+        private static RestReturnType CheckReturnType(HttpResponseMessage response)
+        {
+            ArgumentNullException.ThrowIfNull(response);
+
+            RestReturnType rt = RestReturnType.Detect;
+            string? contentType = ContentHelper.GetContentType(response);
+
+            if (ContentHelper.IsJson(contentType))
+            {
+                rt = RestReturnType.Json;
+            }
+            else if (ContentHelper.IsXml(contentType))
+            {
+                rt = RestReturnType.Xml;
+            }
+
+            return rt;
+        }
+
         private bool TryProcessFeedStream(Stream responseStream)
         {
             bool isRssOrFeed = false;
@@ -111,7 +216,8 @@ private bool TryProcessFeedStream(Stream responseStream)
                 if (isRssOrFeed)
                 {
                     XmlDocument workingDocument = new();
-                    // performing a Read() here to avoid rrechecking
+
+                    // Performing a Read() here to avoid rechecking
                     // "rss" or "feed" items
                     reader.Read();
                     while (!reader.EOF)
@@ -122,8 +228,8 @@ private bool TryProcessFeedStream(Stream responseStream)
                              string.Equals("Entry", reader.Name, StringComparison.OrdinalIgnoreCase))
                            )
                         {
-                            // this one will do reader.Read() internally
-                            XmlNode result = workingDocument.ReadNode(reader);
+                            // This one will do reader.Read() internally
+                            XmlNode? result = workingDocument.ReadNode(reader);
                             WriteObject(result);
                         }
                         else
@@ -133,7 +239,10 @@ private bool TryProcessFeedStream(Stream responseStream)
                     }
                 }
             }
-            catch (XmlException) { }
+            catch (XmlException)
+            {
+                // Catch XmlException
+            }
             finally
             {
                 responseStream.Seek(0, SeekOrigin.Begin);
@@ -159,14 +268,14 @@ private static XmlReaderSettings GetSecureXmlReaderSettings()
             return xrs;
         }
 
-        private static bool TryConvertToXml(string xml, out object doc, ref Exception exRef)
+        private static bool TryConvertToXml(string xml, [NotNullWhen(true)] out object? doc, ref Exception? exRef)
         {
             try
             {
                 XmlReaderSettings settings = GetSecureXmlReaderSettings();
                 XmlReader xmlReader = XmlReader.Create(new StringReader(xml), settings);
 
-                var xmlDoc = new XmlDocument();
+                XmlDocument xmlDoc = new();
                 xmlDoc.PreserveWhitespace = true;
                 xmlDoc.Load(xmlReader);
 
@@ -178,16 +287,15 @@ private static bool TryConvertToXml(string xml, out object doc, ref Exception ex
                 doc = null;
             }
 
-            return (doc != null);
+            return doc != null;
         }
 
-        private static bool TryConvertToJson(string json, out object obj, ref Exception exRef)
+        private static bool TryConvertToJson(string json, [NotNullWhen(true)] out object? obj, ref Exception? exRef)
         {
             bool converted = false;
             try
             {
-                ErrorRecord error;
-                obj = JsonObject.ConvertFromJson(json, out error);
+                obj = JsonObject.ConvertFromJson(json, out ErrorRecord error);
 
                 if (obj == null)
                 {
@@ -206,19 +314,14 @@ private static bool TryConvertToJson(string json, out object obj, ref Exception
                     converted = true;
                 }
             }
-            catch (ArgumentException ex)
-            {
-                exRef = ex;
-                obj = null;
-            }
-            catch (InvalidOperationException ex)
+            catch (Exception ex) when (ex is ArgumentException || ex is InvalidOperationException)
             {
                 exRef = ex;
                 obj = null;
             }
             catch (JsonException ex)
             {
-                var msg = string.Format(System.Globalization.CultureInfo.CurrentCulture, WebCmdletStrings.JsonDeserializationFailed, ex.Message);
+                string msg = string.Format(System.Globalization.CultureInfo.CurrentCulture, WebCmdletStrings.JsonDeserializationFailed, ex.Message);
                 exRef = new ArgumentException(msg, ex);
                 obj = null;
             }
@@ -226,7 +329,7 @@ private static bool TryConvertToJson(string json, out object obj, ref Exception
             return converted;
         }
 
-        #endregion
+        #endregion Helper Methods
 
         /// <summary>
         /// Enum for rest return type.
@@ -242,7 +345,7 @@ public enum RestReturnType
             /// <summary>
             /// Json return type.
             /// </summary>
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
+            [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
             Json,
 
             /// <summary>
@@ -251,52 +354,44 @@ public enum RestReturnType
             Xml,
         }
 
-        internal class BufferingStreamReader : Stream
+        internal sealed class BufferingStreamReader : Stream
         {
-            internal BufferingStreamReader(Stream baseStream)
+            internal BufferingStreamReader(Stream baseStream, TimeSpan perReadTimeout, CancellationToken cancellationToken)
             {
                 _baseStream = baseStream;
                 _streamBuffer = new MemoryStream();
                 _length = long.MaxValue;
                 _copyBuffer = new byte[4096];
+                _perReadTimeout = perReadTimeout;
+                _cancellationToken = cancellationToken;
             }
 
             private readonly Stream _baseStream;
             private readonly MemoryStream _streamBuffer;
             private readonly byte[] _copyBuffer;
+            private readonly TimeSpan _perReadTimeout;
+            private readonly CancellationToken _cancellationToken;
 
-            public override bool CanRead
-            {
-                get { return true; }
-            }
+            public override bool CanRead => true;
 
-            public override bool CanSeek
-            {
-                get { return true; }
-            }
+            public override bool CanSeek => true;
 
-            public override bool CanWrite
-            {
-                get { return false; }
-            }
+            public override bool CanWrite => false;
 
             public override void Flush()
             {
                 _streamBuffer.SetLength(0);
             }
 
-            public override long Length
-            {
-                get { return _length; }
-            }
+            public override long Length => _length;
 
             private long _length;
 
             public override long Position
             {
-                get { return _streamBuffer.Position; }
+                get => _streamBuffer.Position;
 
-                set { _streamBuffer.Position = value; }
+                set => _streamBuffer.Position = value;
             }
 
             public override int Read(byte[] buffer, int offset, int count)
@@ -304,13 +399,12 @@ public override int Read(byte[] buffer, int offset, int count)
                 long previousPosition = Position;
                 bool consumedStream = false;
                 int totalCount = count;
-                while ((!consumedStream) &&
-                    ((Position + totalCount) > _streamBuffer.Length))
+                while (!consumedStream && (Position + totalCount) > _streamBuffer.Length)
                 {
                     // If we don't have enough data to fill this from memory, cache more.
                     // We try to read 4096 bytes from base stream every time, so at most we
                     // may cache 4095 bytes more than what is required by the Read operation.
-                    int bytesRead = _baseStream.Read(_copyBuffer, 0, _copyBuffer.Length);
+                    int bytesRead = _baseStream.ReadAsync(_copyBuffer.AsMemory(), _perReadTimeout, _cancellationToken).GetAwaiter().GetResult();
 
                     if (_streamBuffer.Position < _streamBuffer.Length)
                     {
@@ -359,147 +453,4 @@ public override void Write(byte[] buffer, int offset, int count)
             }
         }
     }
-
-    // TODO: Merge Partials
-
-    /// <summary>
-    /// The Invoke-RestMethod command
-    /// This command makes an HTTP or HTTPS request to a web service,
-    /// and returns the response in an appropriate way.
-    /// Intended to work against the wide spectrum of "RESTful" web services
-    /// currently deployed across the web.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Invoke, "RestMethod", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096706", DefaultParameterSetName = "StandardMethod")]
-    public partial class InvokeRestMethodCommand : WebRequestPSCmdlet
-    {
-        #region Virtual Method Overrides
-
-        /// <summary>
-        /// Process the web response and output corresponding objects.
-        /// </summary>
-        /// <param name="response"></param>
-        internal override void ProcessResponse(HttpResponseMessage response)
-        {
-            if (response == null) { throw new ArgumentNullException(nameof(response)); }
-
-            var baseResponseStream = StreamHelper.GetResponseStream(response);
-
-            if (ShouldWriteToPipeline)
-            {
-                using var responseStream = new BufferingStreamReader(baseResponseStream);
-
-                // First see if it is an RSS / ATOM feed, in which case we can
-                // stream it - unless the user has overridden it with a return type of "XML"
-                if (TryProcessFeedStream(responseStream))
-                {
-                    // Do nothing, content has been processed.
-                }
-                else
-                {
-                    // determine the response type
-                    RestReturnType returnType = CheckReturnType(response);
-
-                    // Try to get the response encoding from the ContentType header.
-                    Encoding encoding = null;
-                    string charSet = response.Content.Headers.ContentType?.CharSet;
-                    if (!string.IsNullOrEmpty(charSet))
-                    {
-                        // NOTE: Don't use ContentHelper.GetEncoding; it returns a
-                        // default which bypasses checking for a meta charset value.
-                        StreamHelper.TryGetEncoding(charSet, out encoding);
-                    }
-
-                    if (string.IsNullOrEmpty(charSet) && returnType == RestReturnType.Json)
-                    {
-                        encoding = Encoding.UTF8;
-                    }
-
-                    object obj = null;
-                    Exception ex = null;
-
-                    string str = StreamHelper.DecodeStream(responseStream, ref encoding);
-
-                    string encodingVerboseName;
-                    try
-                    {
-                        encodingVerboseName = string.IsNullOrEmpty(encoding.HeaderName) ? encoding.EncodingName : encoding.HeaderName;
-                    }
-                    catch (NotSupportedException)
-                    {
-                        encodingVerboseName = encoding.EncodingName;
-                    }
-                    // NOTE: Tests use this verbose output to verify the encoding.
-                    WriteVerbose(string.Format
-                    (
-                        System.Globalization.CultureInfo.InvariantCulture,
-                        "Content encoding: {0}",
-                        encodingVerboseName)
-                    );
-                    bool convertSuccess = false;
-
-                    if (returnType == RestReturnType.Json)
-                    {
-                        convertSuccess = TryConvertToJson(str, out obj, ref ex) || TryConvertToXml(str, out obj, ref ex);
-                    }
-                    // default to try xml first since it's more common
-                    else
-                    {
-                        convertSuccess = TryConvertToXml(str, out obj, ref ex) || TryConvertToJson(str, out obj, ref ex);
-                    }
-
-                    if (!convertSuccess)
-                    {
-                        // fallback to string
-                        obj = str;
-                    }
-
-                    WriteObject(obj);
-                }
-            }
-            else if (ShouldSaveToOutFile)
-            {
-                StreamHelper.SaveStreamToFile(baseResponseStream, QualifiedOutFile, this, _cancelToken.Token);
-            }
-
-            if (!string.IsNullOrEmpty(StatusCodeVariable))
-            {
-                PSVariableIntrinsics vi = SessionState.PSVariable;
-                vi.Set(StatusCodeVariable, (int)response.StatusCode);
-            }
-
-            if (!string.IsNullOrEmpty(ResponseHeadersVariable))
-            {
-                PSVariableIntrinsics vi = SessionState.PSVariable;
-                vi.Set(ResponseHeadersVariable, WebResponseHelper.GetHeadersDictionary(response));
-            }
-        }
-
-        #endregion Virtual Method Overrides
-
-        #region Helper Methods
-
-        private static RestReturnType CheckReturnType(HttpResponseMessage response)
-        {
-            if (response == null) { throw new ArgumentNullException(nameof(response)); }
-
-            RestReturnType rt = RestReturnType.Detect;
-            string contentType = ContentHelper.GetContentType(response);
-            if (string.IsNullOrEmpty(contentType))
-            {
-                rt = RestReturnType.Detect;
-            }
-            else if (ContentHelper.IsJson(contentType))
-            {
-                rt = RestReturnType.Json;
-            }
-            else if (ContentHelper.IsXml(contentType))
-            {
-                rt = RestReturnType.Xml;
-            }
-
-            return (rt);
-        }
-
-        #endregion Helper Methods
-    }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs
index 3423b912fe7..f1a455974b9 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs
@@ -11,11 +11,14 @@
 using System.Net;
 using System.Net.Http;
 using System.Net.Http.Headers;
+using System.Net.Sockets;
 using System.Security;
 using System.Security.Authentication;
 using System.Security.Cryptography;
 using System.Security.Cryptography.X509Certificates;
 using System.Text;
+using System.Text.Json;
+using System.Text.Json.Nodes;
 using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
@@ -60,17 +63,17 @@ public enum WebSslProtocol
         /// <summary>
         /// No SSL protocol will be set and the system defaults will be used.
         /// </summary>
-        Default = 0,
+        Default = SslProtocols.None,
 
         /// <summary>
-        /// Specifies the TLS 1.0 security protocol. The TLS protocol is defined in IETF RFC 2246.
+        /// Specifies the TLS 1.0 is obsolete. Using this value now defaults to TLS 1.2.
         /// </summary>
-        Tls = SslProtocols.Tls,
+        Tls = SslProtocols.Tls12,
 
         /// <summary>
-        /// Specifies the TLS 1.1 security protocol. The TLS protocol is defined in IETF RFC 4346.
+        /// Specifies the TLS 1.1 is obsolete. Using this value now defaults to TLS 1.2.
         /// </summary>
-        Tls11 = SslProtocols.Tls11,
+        Tls11 = SslProtocols.Tls12,
 
         /// <summary>
         /// Specifies the TLS 1.2 security protocol. The TLS protocol is defined in IETF RFC 5246.
@@ -86,8 +89,62 @@ public enum WebSslProtocol
     /// <summary>
     /// Base class for Invoke-RestMethod and Invoke-WebRequest commands.
     /// </summary>
-    public abstract partial class WebRequestPSCmdlet : PSCmdlet
+    public abstract class WebRequestPSCmdlet : PSCmdlet, IDisposable
     {
+        #region Fields
+
+        /// <summary>
+        /// Used to prefix the headers in debug and verbose messaging.
+        /// </summary>
+        internal const string DebugHeaderPrefix = "--- ";
+
+        /// <summary>
+        /// Cancellation token source.
+        /// </summary>
+        internal CancellationTokenSource _cancelToken = null;
+
+        /// <summary>
+        /// Automatically follow Rel Links.
+        /// </summary>
+        internal bool _followRelLink = false;
+
+        /// <summary>
+        /// Maximum number of Rel Links to follow.
+        /// </summary>
+        internal int _maximumFollowRelLink = int.MaxValue;
+
+        /// <summary>
+        /// Maximum number of Redirects to follow.
+        /// </summary>
+        internal int _maximumRedirection;
+
+        /// <summary>
+        /// Parse Rel Links.
+        /// </summary>
+        internal bool _parseRelLink = false;
+
+        /// <summary>
+        /// Automatically follow Rel Links.
+        /// </summary>
+        internal Dictionary<string, string> _relationLink = null;
+
+        /// <summary>
+        /// The current size of the local file being resumed.
+        /// </summary>
+        private long _resumeFileSize = 0;
+
+        /// <summary>
+        /// The remote endpoint returned a 206 status code indicating successful resume.
+        /// </summary>
+        private bool _resumeSuccess = false;
+
+        /// <summary>
+        /// True if the Dispose() method has already been called to cleanup Disposable fields.
+        /// </summary>
+        private bool _disposed = false;
+
+        #endregion Fields
+
         #region Virtual Properties
 
         #region URI
@@ -105,7 +162,19 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         [ValidateNotNullOrEmpty]
         public virtual Uri Uri { get; set; }
 
-        #endregion
+        #endregion URI
+
+        #region HTTP Version
+
+        /// <summary>
+        /// Gets or sets the HTTP Version property.
+        /// </summary>
+        [Parameter]
+        [ArgumentToVersionTransformation]
+        [HttpVersionCompletions]
+        public virtual Version HttpVersion { get; set; }
+
+        #endregion HTTP Version
 
         #region Session
         /// <summary>
@@ -121,7 +190,7 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         [Alias("SV")]
         public virtual string SessionVariable { get; set; }
 
-        #endregion
+        #endregion Session
 
         #region Authorization and Credentials
 
@@ -132,7 +201,7 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         public virtual SwitchParameter AllowUnencryptedAuthentication { get; set; }
 
         /// <summary>
-        /// Gets or sets the Authentication property used to determin the Authentication method for the web session.
+        /// Gets or sets the Authentication property used to determine the Authentication method for the web session.
         /// Authentication does not work with UseDefaultCredentials.
         /// Authentication over unencrypted sessions requires AllowUnencryptedAuthentication.
         /// Basic: Requires Credential.
@@ -186,7 +255,7 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         [Parameter]
         public virtual SecureString Token { get; set; }
 
-        #endregion
+        #endregion Authorization and Credentials
 
         #region Headers
 
@@ -203,11 +272,25 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         public virtual SwitchParameter DisableKeepAlive { get; set; }
 
         /// <summary>
-        /// Gets or sets the TimeOut property.
+        /// Gets or sets the ConnectionTimeoutSeconds property.
+        /// </summary>
+        /// <remarks>
+        /// This property applies to sending the request and receiving the response headers only.
+        /// </remarks>
+        [Alias("TimeoutSec")]
+        [Parameter]
+        [ValidateRange(0, int.MaxValue)]
+        public virtual int ConnectionTimeoutSeconds { get; set; }
+
+        /// <summary>
+        /// Gets or sets the OperationTimeoutSeconds property.
         /// </summary>
+        /// <remarks>
+        /// This property applies to each read operation when receiving the response body.
+        /// </remarks>
         [Parameter]
-        [ValidateRange(0, Int32.MaxValue)]
-        public virtual int TimeoutSec { get; set; }
+        [ValidateRange(0, int.MaxValue)]
+        public virtual int OperationTimeoutSeconds { get; set; }
 
         /// <summary>
         /// Gets or sets the Headers property.
@@ -216,39 +299,62 @@ public abstract partial class WebRequestPSCmdlet : PSCmdlet
         [Parameter]
         public virtual IDictionary Headers { get; set; }
 
-        #endregion
+        /// <summary>
+        /// Gets or sets the SkipHeaderValidation property.
+        /// </summary>
+        /// <remarks>
+        /// This property adds headers to the request's header collection without validation.
+        /// </remarks>
+        [Parameter]
+        public virtual SwitchParameter SkipHeaderValidation { get; set; }
+
+        #endregion Headers
 
         #region Redirect
 
         /// <summary>
-        /// Gets or sets the RedirectMax property.
+        /// Gets or sets the AllowInsecureRedirect property used to follow HTTP redirects from HTTPS.
         /// </summary>
         [Parameter]
-        [ValidateRange(0, Int32.MaxValue)]
-        public virtual int MaximumRedirection
-        {
-            get { return _maximumRedirection; }
-
-            set { _maximumRedirection = value; }
-        }
+        public virtual SwitchParameter AllowInsecureRedirect { get; set; }
 
-        private int _maximumRedirection = -1;
+        /// <summary>
+        /// Gets or sets the RedirectMax property.
+        /// </summary>
+        [Parameter]
+        [ValidateRange(0, int.MaxValue)]
+        public virtual int MaximumRedirection { get; set; } = -1;
 
         /// <summary>
         /// Gets or sets the MaximumRetryCount property, which determines the number of retries of a failed web request.
         /// </summary>
         [Parameter]
-        [ValidateRange(0, Int32.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         public virtual int MaximumRetryCount { get; set; }
 
+        /// <summary>
+        /// Gets or sets the PreserveAuthorizationOnRedirect property.
+        /// </summary>
+        /// <remarks>
+        /// This property overrides compatibility with web requests on Windows.
+        /// On FullCLR (WebRequest), authorization headers are stripped during redirect.
+        /// CoreCLR (HTTPClient) does not have this behavior so web requests that work on
+        /// PowerShell/FullCLR can fail with PowerShell/CoreCLR. To provide compatibility,
+        /// we'll detect requests with an Authorization header and automatically strip
+        /// the header when the first redirect occurs. This switch turns off this logic for
+        /// edge cases where the authorization header needs to be preserved across redirects.
+        /// </remarks>
+        [Parameter]
+        public virtual SwitchParameter PreserveAuthorizationOnRedirect { get; set; }
+
         /// <summary>
         /// Gets or sets the RetryIntervalSec property, which determines the number seconds between retries.
         /// </summary>
         [Parameter]
-        [ValidateRange(1, Int32.MaxValue)]
+        [ValidateRange(1, int.MaxValue)]
         public virtual int RetryIntervalSec { get; set; } = 5;
 
-        #endregion
+        #endregion Redirect
 
         #region Method
 
@@ -257,14 +363,7 @@ public virtual int MaximumRedirection
         /// </summary>
         [Parameter(ParameterSetName = "StandardMethod")]
         [Parameter(ParameterSetName = "StandardMethodNoProxy")]
-        public virtual WebRequestMethod Method
-        {
-            get { return _method; }
-
-            set { _method = value; }
-        }
-
-        private WebRequestMethod _method = WebRequestMethod.Default;
+        public virtual WebRequestMethod Method { get; set; } = WebRequestMethod.Default;
 
         /// <summary>
         /// Gets or sets the CustomMethod property.
@@ -273,16 +372,24 @@ public virtual WebRequestMethod Method
         [Parameter(Mandatory = true, ParameterSetName = "CustomMethodNoProxy")]
         [Alias("CM")]
         [ValidateNotNullOrEmpty]
-        public virtual string CustomMethod
-        {
-            get { return _customMethod; }
-
-            set { _customMethod = value; }
-        }
+        public virtual string CustomMethod { get => _customMethod; set => _customMethod = value.ToUpperInvariant(); }
 
         private string _customMethod;
 
-        #endregion
+        /// <summary>
+        /// Gets or sets the PreserveHttpMethodOnRedirect property.
+        /// </summary>
+        [Parameter]
+        public virtual SwitchParameter PreserveHttpMethodOnRedirect { get; set; }
+
+        /// <summary>
+        /// Gets or sets the UnixSocket property.
+        /// </summary>
+        [Parameter]
+        [ValidateNotNullOrEmpty]
+        public virtual UnixDomainSocketEndPoint UnixSocket { get; set; }
+
+        #endregion Method
 
         #region NoProxy
 
@@ -293,7 +400,7 @@ public virtual string CustomMethod
         [Parameter(Mandatory = true, ParameterSetName = "StandardMethodNoProxy")]
         public virtual SwitchParameter NoProxy { get; set; }
 
-        #endregion
+        #endregion NoProxy
 
         #region Proxy
 
@@ -319,7 +426,7 @@ public virtual string CustomMethod
         [Parameter(ParameterSetName = "CustomMethod")]
         public virtual SwitchParameter ProxyUseDefaultCredentials { get; set; }
 
-        #endregion
+        #endregion Proxy
 
         #region Input
 
@@ -354,6 +461,7 @@ public virtual string CustomMethod
         /// Gets or sets the InFile property.
         /// </summary>
         [Parameter]
+        [ValidateNotNullOrEmpty]
         public virtual string InFile { get; set; }
 
         /// <summary>
@@ -361,7 +469,7 @@ public virtual string CustomMethod
         /// </summary>
         private string _originalFilePath;
 
-        #endregion
+        #endregion Input
 
         #region Output
 
@@ -369,6 +477,7 @@ public virtual string CustomMethod
         /// Gets or sets the OutFile property.
         /// </summary>
         [Parameter]
+        [ValidateNotNullOrEmpty]
         public virtual string OutFile { get; set; }
 
         /// <summary>
@@ -389,142 +498,366 @@ public virtual string CustomMethod
         [Parameter]
         public virtual SwitchParameter SkipHttpErrorCheck { get; set; }
 
-        #endregion
+        #endregion Output
 
         #endregion Virtual Properties
 
-        #region Virtual Methods
+        #region Helper Properties
 
-        internal virtual void ValidateParameters()
+        internal string QualifiedOutFile => QualifyFilePath(OutFile);
+
+        internal string _qualifiedOutFile;
+
+        internal bool ShouldCheckHttpStatus => !SkipHttpErrorCheck;
+
+        /// <summary>
+        /// Determines whether writing to a file should Resume and append rather than overwrite.
+        /// </summary>
+        internal bool ShouldResume => Resume.IsPresent && _resumeSuccess;
+
+        internal bool ShouldSaveToOutFile => !string.IsNullOrEmpty(OutFile);
+
+        internal bool ShouldWriteToPipeline => !ShouldSaveToOutFile || PassThru;
+
+        #endregion Helper Properties
+
+        #region Abstract Methods
+
+        /// <summary>
+        /// Read the supplied WebResponse object and push the resulting output into the pipeline.
+        /// </summary>
+        /// <param name="response">Instance of a WebResponse object to be processed.</param>
+        internal abstract void ProcessResponse(HttpResponseMessage response);
+
+        #endregion Abstract Methods
+
+        #region Overrides
+
+        /// <summary>
+        /// The main execution method for cmdlets derived from WebRequestPSCmdlet.
+        /// </summary>
+        protected override void ProcessRecord()
         {
-            // sessions
-            if ((WebSession != null) && (SessionVariable != null))
+            try
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.SessionConflict,
-                                                       "WebCmdletSessionConflictException");
-                ThrowTerminatingError(error);
+                // Set cmdlet context for write progress
+                ValidateParameters();
+                PrepareSession();
+
+                // If the request contains an authorization header and PreserveAuthorizationOnRedirect is not set,
+                // it needs to be stripped on the first redirect.
+                bool keepAuthorizationOnRedirect = PreserveAuthorizationOnRedirect.IsPresent
+                                                   && WebSession.Headers.ContainsKey(HttpKnownHeaderNames.Authorization);
+
+                bool handleRedirect = keepAuthorizationOnRedirect || AllowInsecureRedirect || PreserveHttpMethodOnRedirect;
+
+                HttpClient client = GetHttpClient(handleRedirect);
+
+                int followedRelLink = 0;
+                Uri uri = Uri;
+                do
+                {
+                    if (followedRelLink > 0)
+                    {
+                        string linkVerboseMsg = string.Format(
+                            CultureInfo.CurrentCulture,
+                            WebCmdletStrings.FollowingRelLinkVerboseMsg,
+                            uri.AbsoluteUri);
+
+                        WriteVerbose(linkVerboseMsg);
+                    }
+
+                    using (HttpRequestMessage request = GetRequest(uri))
+                    {
+                        FillRequestStream(request);
+                        try
+                        {
+                            _maximumRedirection = WebSession.MaximumRedirection;
+
+                            using HttpResponseMessage response = GetResponse(client, request, handleRedirect);
+
+                            bool _isSuccess = response.IsSuccessStatusCode;
+
+                            // Check if the Resume range was not satisfiable because the file already completed downloading.
+                            // This happens when the local file is the same size as the remote file.
+                            if (Resume.IsPresent
+                                && response.StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable
+                                && response.Content.Headers.ContentRange.HasLength
+                                && response.Content.Headers.ContentRange.Length == _resumeFileSize)
+                            {
+                                _isSuccess = true;
+                                WriteVerbose(string.Format(
+                                    CultureInfo.CurrentCulture,
+                                    WebCmdletStrings.OutFileWritingSkipped,
+                                    OutFile));
+
+                                // Disable writing to the OutFile.
+                                OutFile = null;
+                            }
+
+                            // Detect insecure redirection.
+                            if (!AllowInsecureRedirect)
+                            {
+                                // We will skip detection if either of the URIs is relative, because the 'Scheme' property is not supported on a relative URI.
+                                // If we have to skip the check, an error may be thrown later if it's actually an insecure https-to-http redirect.
+                                bool originIsHttps = response.RequestMessage.RequestUri.IsAbsoluteUri && response.RequestMessage.RequestUri.Scheme == "https";
+                                bool destinationIsHttp = response.Headers.Location is not null && response.Headers.Location.IsAbsoluteUri && response.Headers.Location.Scheme == "http";
+
+                                if (originIsHttps && destinationIsHttp)
+                                {
+                                    ErrorRecord er = new(new InvalidOperationException(), "InsecureRedirection", ErrorCategory.InvalidOperation, request);
+                                    er.ErrorDetails = new ErrorDetails(WebCmdletStrings.InsecureRedirection);
+                                    ThrowTerminatingError(er);
+                                }
+                            }
+
+                            if (ShouldCheckHttpStatus && !_isSuccess)
+                            {
+                                string message = string.Format(
+                                    CultureInfo.CurrentCulture,
+                                    WebCmdletStrings.ResponseStatusCodeFailure,
+                                    (int)response.StatusCode,
+                                    response.ReasonPhrase);
+
+                                HttpResponseException httpEx = new(message, response);
+                                ErrorRecord er = new(httpEx, "WebCmdletWebResponseException", ErrorCategory.InvalidOperation, request);
+                                string detailMsg = string.Empty;
+                                try
+                                {
+                                    string contentType = ContentHelper.GetContentType(response);
+                                    long? contentLength = response.Content.Headers.ContentLength;
+
+                                    // We can't use ReadAsStringAsync because it doesn't have per read timeouts
+                                    TimeSpan perReadTimeout = ConvertTimeoutSecondsToTimeSpan(OperationTimeoutSeconds);
+                                    string characterSet = WebResponseHelper.GetCharacterSet(response);
+                                    var responseStream = StreamHelper.GetResponseStream(response, _cancelToken.Token);
+                                    int initialCapacity = (int)Math.Min(contentLength ?? StreamHelper.DefaultReadBuffer, StreamHelper.DefaultReadBuffer);
+                                    var bufferedStream = new WebResponseContentMemoryStream(responseStream, initialCapacity, this, contentLength, perReadTimeout, _cancelToken.Token);
+                                    string error = StreamHelper.DecodeStream(bufferedStream, characterSet, out Encoding encoding, perReadTimeout, _cancelToken.Token);
+                                    detailMsg = FormatErrorMessage(error, contentType);
+                                }
+                                catch (Exception ex)
+                                {
+                                    // Catch all
+                                    er.ErrorDetails = new ErrorDetails(ex.ToString());
+                                }
+
+                                if (!string.IsNullOrEmpty(detailMsg))
+                                {
+                                    er.ErrorDetails = new ErrorDetails(detailMsg);
+                                }
+
+                                ThrowTerminatingError(er);
+                            }
+
+                            if (_parseRelLink || _followRelLink)
+                            {
+                                ParseLinkHeader(response);
+                            }
+
+                            ProcessResponse(response);
+                            UpdateSession(response);
+
+                            // If we hit our maximum redirection count, generate an error.
+                            // Errors with redirection counts of greater than 0 are handled automatically by .NET, but are
+                            // impossible to detect programmatically when we hit this limit. By handling this ourselves
+                            // (and still writing out the result), users can debug actual HTTP redirect problems.
+                            if (_maximumRedirection == 0 && IsRedirectCode(response.StatusCode))
+                            {
+                                ErrorRecord er = new(new InvalidOperationException(), "MaximumRedirectExceeded", ErrorCategory.InvalidOperation, request);
+                                er.ErrorDetails = new ErrorDetails(WebCmdletStrings.MaximumRedirectionCountExceeded);
+                                WriteError(er);
+                            }
+                        }
+                        catch (TimeoutException ex)
+                        {
+                            ErrorRecord er = new(ex, "OperationTimeoutReached", ErrorCategory.OperationTimeout, null);
+                            ThrowTerminatingError(er);
+                        }
+                        catch (HttpRequestException ex)
+                        {
+                            ErrorRecord er = new(ex, "WebCmdletWebResponseException", ErrorCategory.InvalidOperation, request);
+                            if (ex.InnerException is not null)
+                            {
+                                er.ErrorDetails = new ErrorDetails(ex.InnerException.Message);
+                            }
+
+                            ThrowTerminatingError(er);
+                        }
+                        finally
+                        {
+                            _cancelToken?.Dispose();
+                            _cancelToken = null;
+                        }
+
+                        if (_followRelLink)
+                        {
+                            if (!_relationLink.ContainsKey("next"))
+                            {
+                                return;
+                            }
+
+                            uri = new Uri(_relationLink["next"]);
+                            followedRelLink++;
+                        }
+                    }
+                }
+                while (_followRelLink && (followedRelLink < _maximumFollowRelLink));
             }
+            catch (CryptographicException ex)
+            {
+                ErrorRecord er = new(ex, "WebCmdletCertificateException", ErrorCategory.SecurityError, null);
+                ThrowTerminatingError(er);
+            }
+            catch (NotSupportedException ex)
+            {
+                ErrorRecord er = new(ex, "WebCmdletIEDomNotSupportedException", ErrorCategory.NotImplemented, null);
+                ThrowTerminatingError(er);
+            }
+        }
 
-            // Authentication
-            if (UseDefaultCredentials && (Authentication != WebAuthenticationType.None))
+        /// <summary>
+        /// To implement ^C.
+        /// </summary>
+        protected override void StopProcessing() => _cancelToken?.Cancel();
+
+        /// <summary>
+        /// Disposes the associated WebSession if it is not being used as part of a persistent session.
+        /// </summary>
+        /// <param name="disposing">True when called from Dispose() and false when called from finalizer.</param>
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!_disposed)
+            {
+                if (disposing && !IsPersistentSession())
+                {
+                    WebSession?.Dispose();
+                    WebSession = null;
+                }
+
+                _disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Disposes the associated WebSession if it is not being used as part of a persistent session.
+        /// </summary>
+        public void Dispose()
+        {
+            Dispose(disposing: true);
+            GC.SuppressFinalize(this);
+        }
+
+        #endregion Overrides
+
+        #region Virtual Methods
+
+        internal virtual void ValidateParameters()
+        {
+            // Sessions
+            if (WebSession is not null && SessionVariable is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationConflict,
-                                                       "WebCmdletAuthenticationConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.SessionConflict, "WebCmdletSessionConflictException");
                 ThrowTerminatingError(error);
             }
 
-            if ((Authentication != WebAuthenticationType.None) && (Token != null) && (Credential != null))
+            // Authentication
+            if (UseDefaultCredentials && Authentication != WebAuthenticationType.None)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationTokenConflict,
-                                                       "WebCmdletAuthenticationTokenConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationConflict, "WebCmdletAuthenticationConflictException");
                 ThrowTerminatingError(error);
             }
 
-            if ((Authentication == WebAuthenticationType.Basic) && (Credential == null))
+            if (Authentication != WebAuthenticationType.None && Token is not null && Credential is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationCredentialNotSupplied,
-                                                       "WebCmdletAuthenticationCredentialNotSuppliedException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationTokenConflict, "WebCmdletAuthenticationTokenConflictException");
                 ThrowTerminatingError(error);
             }
 
-            if ((Authentication == WebAuthenticationType.OAuth || Authentication == WebAuthenticationType.Bearer) && (Token == null))
+            if (Authentication == WebAuthenticationType.Basic && Credential is null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationTokenNotSupplied,
-                                                       "WebCmdletAuthenticationTokenNotSuppliedException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationCredentialNotSupplied, "WebCmdletAuthenticationCredentialNotSuppliedException");
                 ThrowTerminatingError(error);
             }
 
-            if (!AllowUnencryptedAuthentication && (Authentication != WebAuthenticationType.None) && (Uri.Scheme != "https"))
+            if ((Authentication == WebAuthenticationType.OAuth || Authentication == WebAuthenticationType.Bearer) && Token is null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AllowUnencryptedAuthenticationRequired,
-                                                       "WebCmdletAllowUnencryptedAuthenticationRequiredException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.AuthenticationTokenNotSupplied, "WebCmdletAuthenticationTokenNotSuppliedException");
                 ThrowTerminatingError(error);
             }
 
-            if (!AllowUnencryptedAuthentication && (Credential != null || UseDefaultCredentials) && (Uri.Scheme != "https"))
+            if (!AllowUnencryptedAuthentication && (Authentication != WebAuthenticationType.None || Credential is not null || UseDefaultCredentials) && Uri.Scheme != "https")
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.AllowUnencryptedAuthenticationRequired,
-                                                       "WebCmdletAllowUnencryptedAuthenticationRequiredException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.AllowUnencryptedAuthenticationRequired, "WebCmdletAllowUnencryptedAuthenticationRequiredException");
                 ThrowTerminatingError(error);
             }
 
-            // credentials
-            if (UseDefaultCredentials && (Credential != null))
+            // Credentials
+            if (UseDefaultCredentials && Credential is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.CredentialConflict,
-                                                       "WebCmdletCredentialConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.CredentialConflict, "WebCmdletCredentialConflictException");
                 ThrowTerminatingError(error);
             }
 
             // Proxy server
-            if (ProxyUseDefaultCredentials && (ProxyCredential != null))
+            if (ProxyUseDefaultCredentials && ProxyCredential is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.ProxyCredentialConflict,
-                                                       "WebCmdletProxyCredentialConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.ProxyCredentialConflict, "WebCmdletProxyCredentialConflictException");
                 ThrowTerminatingError(error);
             }
-            else if ((Proxy == null) && ((ProxyCredential != null) || ProxyUseDefaultCredentials))
+            else if (Proxy is null && (ProxyCredential is not null || ProxyUseDefaultCredentials))
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.ProxyUriNotSupplied,
-                                                       "WebCmdletProxyUriNotSuppliedException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.ProxyUriNotSupplied, "WebCmdletProxyUriNotSuppliedException");
                 ThrowTerminatingError(error);
             }
 
-            // request body content
-            if ((Body != null) && (InFile != null))
+            // Request body content
+            if (Body is not null && InFile is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.BodyConflict,
-                                                       "WebCmdletBodyConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.BodyConflict, "WebCmdletBodyConflictException");
                 ThrowTerminatingError(error);
             }
 
-            if ((Body != null) && (Form != null))
+            if (Body is not null && Form is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.BodyFormConflict,
-                                                       "WebCmdletBodyFormConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.BodyFormConflict, "WebCmdletBodyFormConflictException");
                 ThrowTerminatingError(error);
             }
 
-            if ((InFile != null) && (Form != null))
+            if (InFile is not null && Form is not null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.FormInFileConflict,
-                                                       "WebCmdletFormInFileConflictException");
+                ErrorRecord error = GetValidationError(WebCmdletStrings.FormInFileConflict, "WebCmdletFormInFileConflictException");
                 ThrowTerminatingError(error);
             }
 
-            // validate InFile path
-            if (InFile != null)
+            // Validate InFile path
+            if (InFile is not null)
             {
-                ProviderInfo provider = null;
                 ErrorRecord errorRecord = null;
 
                 try
                 {
-                    Collection<string> providerPaths = GetResolvedProviderPathFromPSPath(InFile, out provider);
+                    Collection<string> providerPaths = GetResolvedProviderPathFromPSPath(InFile, out ProviderInfo provider);
 
                     if (!provider.Name.Equals(FileSystemProvider.ProviderName, StringComparison.OrdinalIgnoreCase))
                     {
-                        errorRecord = GetValidationError(WebCmdletStrings.NotFilesystemPath,
-                                                         "WebCmdletInFileNotFilesystemPathException", InFile);
+                        errorRecord = GetValidationError(WebCmdletStrings.NotFilesystemPath, "WebCmdletInFileNotFilesystemPathException", InFile);
                     }
                     else
                     {
                         if (providerPaths.Count > 1)
                         {
-                            errorRecord = GetValidationError(WebCmdletStrings.MultiplePathsResolved,
-                                                             "WebCmdletInFileMultiplePathsResolvedException", InFile);
+                            errorRecord = GetValidationError(WebCmdletStrings.MultiplePathsResolved, "WebCmdletInFileMultiplePathsResolvedException", InFile);
                         }
                         else if (providerPaths.Count == 0)
                         {
-                            errorRecord = GetValidationError(WebCmdletStrings.NoPathResolved,
-                                                             "WebCmdletInFileNoPathResolvedException", InFile);
+                            errorRecord = GetValidationError(WebCmdletStrings.NoPathResolved, "WebCmdletInFileNoPathResolvedException", InFile);
                         }
                         else
                         {
                             if (Directory.Exists(providerPaths[0]))
                             {
-                                errorRecord = GetValidationError(WebCmdletStrings.DirectoryPathSpecified,
-                                                                 "WebCmdletInFileNotFilePathException", InFile);
+                                errorRecord = GetValidationError(WebCmdletStrings.DirectoryPathSpecified, "WebCmdletInFileNotFilePathException", InFile);
                             }
 
                             _originalFilePath = InFile;
@@ -545,57 +878,59 @@ internal virtual void ValidateParameters()
                     errorRecord = new ErrorRecord(driveNotFound.ErrorRecord, driveNotFound);
                 }
 
-                if (errorRecord != null)
+                if (errorRecord is not null)
                 {
                     ThrowTerminatingError(errorRecord);
                 }
             }
 
-            // output ??
-            if (PassThru && (OutFile == null))
+            // Output ??
+            if (PassThru.IsPresent && OutFile is null)
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.OutFileMissing,
-                                                       "WebCmdletOutFileMissingException", nameof(PassThru));
+                ErrorRecord error = GetValidationError(WebCmdletStrings.OutFileMissing, "WebCmdletOutFileMissingException", nameof(PassThru));
                 ThrowTerminatingError(error);
             }
 
             // Resume requires OutFile.
-            if (Resume.IsPresent && OutFile == null)
+            if (Resume.IsPresent && OutFile is null)
+            {
+                ErrorRecord error = GetValidationError(WebCmdletStrings.OutFileMissing, "WebCmdletOutFileMissingException", nameof(Resume));
+                ThrowTerminatingError(error);
+            }
+
+            _qualifiedOutFile = ShouldSaveToOutFile ? QualifiedOutFile : null;
+
+            // OutFile must not be a directory to use Resume.
+            if (Resume.IsPresent && Directory.Exists(_qualifiedOutFile))
             {
-                ErrorRecord error = GetValidationError(WebCmdletStrings.OutFileMissing,
-                                                       "WebCmdletOutFileMissingException", nameof(Resume));
+                ErrorRecord error = GetValidationError(WebCmdletStrings.ResumeNotFilePath, "WebCmdletResumeNotFilePathException", _qualifiedOutFile);
                 ThrowTerminatingError(error);
             }
         }
 
         internal virtual void PrepareSession()
         {
-            // make sure we have a valid WebRequestSession object to work with
-            if (WebSession == null)
-            {
-                WebSession = new WebRequestSession();
-            }
+            // Make sure we have a valid WebRequestSession object to work with
+            WebSession ??= new WebRequestSession();
 
-            if (SessionVariable != null)
+            if (SessionVariable is not null)
             {
-                // save the session back to the PS environment if requested
+                // Save the session back to the PS environment if requested
                 PSVariableIntrinsics vi = SessionState.PSVariable;
                 vi.Set(SessionVariable, WebSession);
             }
 
-            //
-            // handle credentials
-            //
-            if (Credential != null && Authentication == WebAuthenticationType.None)
+            // Handle credentials
+            if (Credential is not null && Authentication == WebAuthenticationType.None)
             {
-                // get the relevant NetworkCredential
+                // Get the relevant NetworkCredential
                 NetworkCredential netCred = Credential.GetNetworkCredential();
                 WebSession.Credentials = netCred;
 
-                // supplying a credential overrides the UseDefaultCredentials setting
+                // Supplying a credential overrides the UseDefaultCredentials setting
                 WebSession.UseDefaultCredentials = false;
             }
-            else if ((Credential != null || Token != null) && Authentication != WebAuthenticationType.None)
+            else if ((Credential is not null || Token is not null) && Authentication != WebAuthenticationType.None)
             {
                 ProcessAuthentication();
             }
@@ -604,16 +939,15 @@ internal virtual void PrepareSession()
                 WebSession.UseDefaultCredentials = true;
             }
 
-            if (CertificateThumbprint != null)
+            if (CertificateThumbprint is not null)
             {
-                X509Store store = new(StoreName.My, StoreLocation.CurrentUser);
+                using X509Store store = new(StoreName.My, StoreLocation.CurrentUser);
                 store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                 X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                 X509Certificate2Collection tbCollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByThumbprint, CertificateThumbprint, false);
                 if (tbCollection.Count == 0)
                 {
-                    CryptographicException ex = new(WebCmdletStrings.ThumbprintNotFound);
-                    throw ex;
+                    throw new CryptographicException(WebCmdletStrings.ThumbprintNotFound);
                 }
 
                 foreach (X509Certificate2 tbCert in tbCollection)
@@ -623,36 +957,53 @@ internal virtual void PrepareSession()
                 }
             }
 
-            if (Certificate != null)
+            if (Certificate is not null)
             {
                 WebSession.AddCertificate(Certificate);
             }
 
-            //
-            // handle the user agent
-            //
-            if (UserAgent != null)
+            // Handle the user agent
+            if (UserAgent is not null)
             {
-                // store the UserAgent string
+                // Store the UserAgent string
                 WebSession.UserAgent = UserAgent;
             }
 
-            if (Proxy != null)
+            // Proxy and NoProxy parameters are mutually exclusive.
+            // If NoProxy is provided, WebSession will turn off the proxy
+            // and if Proxy is provided NoProxy will be turned off.
+            if (NoProxy.IsPresent)
             {
-                WebProxy webProxy = new(Proxy);
-                webProxy.BypassProxyOnLocal = false;
-                if (ProxyCredential != null)
+                WebSession.NoProxy = true;
+            }
+            else
+            {
+                if (Proxy is not null)
                 {
-                    webProxy.Credentials = ProxyCredential.GetNetworkCredential();
-                }
-                else if (ProxyUseDefaultCredentials)
-                {
-                    // If both ProxyCredential and ProxyUseDefaultCredentials are passed,
-                    // UseDefaultCredentials will overwrite the supplied credentials.
-                    webProxy.UseDefaultCredentials = true;
+                    WebProxy webProxy = new(Proxy);
+                    webProxy.BypassProxyOnLocal = false;
+                    if (ProxyCredential is not null)
+                    {
+                        webProxy.Credentials = ProxyCredential.GetNetworkCredential();
+                    }
+                    else
+                    {
+                        webProxy.UseDefaultCredentials = ProxyUseDefaultCredentials;
+                    }
+
+                    // We don't want to update the WebSession unless the proxies are different
+                    // as that will require us to create a new HttpClientHandler and lose connection
+                    // persistence.
+                    if (!webProxy.Equals(WebSession.Proxy))
+                    {
+                        WebSession.Proxy = webProxy;
+                    }
                 }
+            }
 
-                WebSession.Proxy = webProxy;
+            if (MyInvocation.BoundParameters.ContainsKey(nameof(SslProtocol)))
+            {
+                WebSession.SslProtocol = SslProtocol;
             }
 
             if (MaximumRedirection > -1)
@@ -660,18 +1011,22 @@ internal virtual void PrepareSession()
                 WebSession.MaximumRedirection = MaximumRedirection;
             }
 
-            // store the other supplied headers
-            if (Headers != null)
+            WebSession.UnixSocket = UnixSocket;
+
+            WebSession.SkipCertificateCheck = SkipCertificateCheck.IsPresent;
+
+            // Store the other supplied headers
+            if (Headers is not null)
             {
                 foreach (string key in Headers.Keys)
                 {
-                    var value = Headers[key];
+                    object value = Headers[key];
 
                     // null is not valid value for header.
                     // We silently ignore header if value is null.
                     if (value is not null)
                     {
-                        // add the header value (or overwrite it if already present)
+                        // Add the header value (or overwrite it if already present).
                         WebSession.Headers[key] = value.ToString();
                     }
                 }
@@ -681,407 +1036,39 @@ internal virtual void PrepareSession()
             {
                 WebSession.MaximumRetryCount = MaximumRetryCount;
 
-                // only set retry interval if retry count is set.
+                // Only set retry interval if retry count is set.
                 WebSession.RetryIntervalInSeconds = RetryIntervalSec;
             }
-        }
-
-        #endregion Virtual Methods
-
-        #region Helper Properties
-
-        internal string QualifiedOutFile
-        {
-            get { return (QualifyFilePath(OutFile)); }
-        }
-
-        internal bool ShouldSaveToOutFile
-        {
-            get { return (!string.IsNullOrEmpty(OutFile)); }
-        }
-
-        internal bool ShouldWriteToPipeline
-        {
-            get { return (!ShouldSaveToOutFile || PassThru); }
-        }
-
-        internal bool ShouldCheckHttpStatus
-        {
-            get { return !SkipHttpErrorCheck; }
-        }
-
-        /// <summary>
-        /// Determines whether writing to a file should Resume and append rather than overwrite.
-        /// </summary>
-        internal bool ShouldResume
-        {
-            get { return (Resume.IsPresent && _resumeSuccess); }
-        }
-
-        #endregion Helper Properties
-
-        #region Helper Methods
-        private Uri PrepareUri(Uri uri)
-        {
-            uri = CheckProtocol(uri);
-
-            // before creating the web request,
-            // preprocess Body if content is a dictionary and method is GET (set as query)
-            IDictionary bodyAsDictionary;
-            LanguagePrimitives.TryConvertTo<IDictionary>(Body, out bodyAsDictionary);
-            if ((bodyAsDictionary != null)
-                && ((IsStandardMethodSet() && (Method == WebRequestMethod.Default || Method == WebRequestMethod.Get))
-                     || (IsCustomMethodSet() && CustomMethod.ToUpperInvariant() == "GET")))
-            {
-                UriBuilder uriBuilder = new(uri);
-                if (uriBuilder.Query != null && uriBuilder.Query.Length > 1)
-                {
-                    uriBuilder.Query = string.Concat(uriBuilder.Query.AsSpan(1), "&", FormatDictionary(bodyAsDictionary));
-                }
-                else
-                {
-                    uriBuilder.Query = FormatDictionary(bodyAsDictionary);
-                }
-
-                uri = uriBuilder.Uri;
-                // set body to null to prevent later FillRequestStream
-                Body = null;
-            }
-
-            return uri;
-        }
-
-        private static Uri CheckProtocol(Uri uri)
-        {
-            if (uri == null) { throw new ArgumentNullException(nameof(uri)); }
-
-            if (!uri.IsAbsoluteUri)
-            {
-                uri = new Uri("http://" + uri.OriginalString);
-            }
-
-            return (uri);
-        }
-
-        private string QualifyFilePath(string path)
-        {
-            string resolvedFilePath = PathUtils.ResolveFilePath(filePath: path, command: this, isLiteralPath: true);
-            return resolvedFilePath;
-        }
-
-        private static string FormatDictionary(IDictionary content)
-        {
-            if (content == null)
-                throw new ArgumentNullException(nameof(content));
-
-            StringBuilder bodyBuilder = new();
-            foreach (string key in content.Keys)
-            {
-                if (bodyBuilder.Length > 0)
-                {
-                    bodyBuilder.Append('&');
-                }
-
-                object value = content[key];
-
-                // URLEncode the key and value
-                string encodedKey = WebUtility.UrlEncode(key);
-                string encodedValue = string.Empty;
-                if (value != null)
-                {
-                    encodedValue = WebUtility.UrlEncode(value.ToString());
-                }
-
-                bodyBuilder.AppendFormat("{0}={1}", encodedKey, encodedValue);
-            }
-
-            return bodyBuilder.ToString();
-        }
-
-        private ErrorRecord GetValidationError(string msg, string errorId)
-        {
-            var ex = new ValidationMetadataException(msg);
-            var error = new ErrorRecord(ex, errorId, ErrorCategory.InvalidArgument, this);
-            return (error);
-        }
-
-        private ErrorRecord GetValidationError(string msg, string errorId, params object[] args)
-        {
-            msg = string.Format(CultureInfo.InvariantCulture, msg, args);
-            var ex = new ValidationMetadataException(msg);
-            var error = new ErrorRecord(ex, errorId, ErrorCategory.InvalidArgument, this);
-            return (error);
-        }
-
-        private bool IsStandardMethodSet()
-        {
-            return (ParameterSetName == "StandardMethod" || ParameterSetName == "StandardMethodNoProxy");
-        }
-
-        private bool IsCustomMethodSet()
-        {
-            return (ParameterSetName == "CustomMethod" || ParameterSetName == "CustomMethodNoProxy");
-        }
-
-        private string GetBasicAuthorizationHeader()
-        {
-            var password = new NetworkCredential(null, Credential.Password).Password;
-            string unencoded = string.Format("{0}:{1}", Credential.UserName, password);
-            byte[] bytes = Encoding.UTF8.GetBytes(unencoded);
-            return string.Format("Basic {0}", Convert.ToBase64String(bytes));
-        }
-
-        private string GetBearerAuthorizationHeader()
-        {
-            return string.Format("Bearer {0}", new NetworkCredential(string.Empty, Token).Password);
-        }
-
-        private void ProcessAuthentication()
-        {
-            if (Authentication == WebAuthenticationType.Basic)
-            {
-                WebSession.Headers["Authorization"] = GetBasicAuthorizationHeader();
-            }
-            else if (Authentication == WebAuthenticationType.Bearer || Authentication == WebAuthenticationType.OAuth)
-            {
-                WebSession.Headers["Authorization"] = GetBearerAuthorizationHeader();
-            }
-            else
-            {
-                Diagnostics.Assert(false, string.Format("Unrecognized Authentication value: {0}", Authentication));
-            }
-        }
-
-        #endregion Helper Methods
-    }
-
-    // TODO: Merge Partials
-
-    /// <summary>
-    /// Exception class for webcmdlets to enable returning HTTP error response.
-    /// </summary>
-    public sealed class HttpResponseException : HttpRequestException
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpResponseException"/> class.
-        /// </summary>
-        /// <param name="message">Message for the exception.</param>
-        /// <param name="response">Response from the HTTP server.</param>
-        public HttpResponseException(string message, HttpResponseMessage response) : base(message)
-        {
-            Response = response;
-        }
-
-        /// <summary>
-        /// HTTP error response.
-        /// </summary>
-        public HttpResponseMessage Response { get; }
-    }
-
-    /// <summary>
-    /// Base class for Invoke-RestMethod and Invoke-WebRequest commands.
-    /// </summary>
-    public abstract partial class WebRequestPSCmdlet : PSCmdlet
-    {
-        /// <summary>
-        /// Gets or sets the PreserveAuthorizationOnRedirect property.
-        /// </summary>
-        /// <remarks>
-        /// This property overrides compatibility with web requests on Windows.
-        /// On FullCLR (WebRequest), authorization headers are stripped during redirect.
-        /// CoreCLR (HTTPClient) does not have this behavior so web requests that work on
-        /// PowerShell/FullCLR can fail with PowerShell/CoreCLR.  To provide compatibility,
-        /// we'll detect requests with an Authorization header and automatically strip
-        /// the header when the first redirect occurs. This switch turns off this logic for
-        /// edge cases where the authorization header needs to be preserved across redirects.
-        /// </remarks>
-        [Parameter]
-        public virtual SwitchParameter PreserveAuthorizationOnRedirect { get; set; }
-
-        /// <summary>
-        /// Gets or sets the SkipHeaderValidation property.
-        /// </summary>
-        /// <remarks>
-        /// This property adds headers to the request's header collection without validation.
-        /// </remarks>
-        [Parameter]
-        public virtual SwitchParameter SkipHeaderValidation { get; set; }
-
-        #region Abstract Methods
-
-        /// <summary>
-        /// Read the supplied WebResponse object and push the resulting output into the pipeline.
-        /// </summary>
-        /// <param name="response">Instance of a WebResponse object to be processed.</param>
-        internal abstract void ProcessResponse(HttpResponseMessage response);
-
-        #endregion Abstract Methods
-
-        /// <summary>
-        /// Cancellation token source.
-        /// </summary>
-        internal CancellationTokenSource _cancelToken = null;
-
-        /// <summary>
-        /// Parse Rel Links.
-        /// </summary>
-        internal bool _parseRelLink = false;
-
-        /// <summary>
-        /// Automatically follow Rel Links.
-        /// </summary>
-        internal bool _followRelLink = false;
-
-        /// <summary>
-        /// Automatically follow Rel Links.
-        /// </summary>
-        internal Dictionary<string, string> _relationLink = null;
-
-        /// <summary>
-        /// Maximum number of Rel Links to follow.
-        /// </summary>
-        internal int _maximumFollowRelLink = Int32.MaxValue;
 
-        /// <summary>
-        /// The remote endpoint returned a 206 status code indicating successful resume.
-        /// </summary>
-        private bool _resumeSuccess = false;
-
-        /// <summary>
-        /// The current size of the local file being resumed.
-        /// </summary>
-        private long _resumeFileSize = 0;
-
-        private HttpMethod GetHttpMethod(WebRequestMethod method)
-        {
-            switch (Method)
-            {
-                case WebRequestMethod.Default:
-                case WebRequestMethod.Get:
-                    return HttpMethod.Get;
-                case WebRequestMethod.Head:
-                    return HttpMethod.Head;
-                case WebRequestMethod.Post:
-                    return HttpMethod.Post;
-                case WebRequestMethod.Put:
-                    return HttpMethod.Put;
-                case WebRequestMethod.Delete:
-                    return HttpMethod.Delete;
-                case WebRequestMethod.Trace:
-                    return HttpMethod.Trace;
-                case WebRequestMethod.Options:
-                    return HttpMethod.Options;
-                default:
-                    // Merge and Patch
-                    return new HttpMethod(Method.ToString().ToUpperInvariant());
-            }
+            WebSession.ConnectionTimeout = ConvertTimeoutSecondsToTimeSpan(ConnectionTimeoutSeconds);
         }
 
-        #region Virtual Methods
-
-        // NOTE: Only pass true for handleRedirect if the original request has an authorization header
-        // and PreserveAuthorizationOnRedirect is NOT set.
         internal virtual HttpClient GetHttpClient(bool handleRedirect)
         {
-            // By default the HttpClientHandler will automatically decompress GZip and Deflate content
-            HttpClientHandler handler = new();
-            handler.CookieContainer = WebSession.Cookies;
-
-            // set the credentials used by this request
-            if (WebSession.UseDefaultCredentials)
-            {
-                // the UseDefaultCredentials flag overrides other supplied credentials
-                handler.UseDefaultCredentials = true;
-            }
-            else if (WebSession.Credentials != null)
-            {
-                handler.Credentials = WebSession.Credentials;
-            }
-
-            if (NoProxy)
-            {
-                handler.UseProxy = false;
-            }
-            else if (WebSession.Proxy != null)
-            {
-                handler.Proxy = WebSession.Proxy;
-            }
-
-            if (WebSession.Certificates != null)
-            {
-                handler.ClientCertificates.AddRange(WebSession.Certificates);
-            }
-
-            if (SkipCertificateCheck)
-            {
-                handler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
-                handler.ClientCertificateOptions = ClientCertificateOption.Manual;
-            }
-
-            // This indicates GetResponse will handle redirects.
-            if (handleRedirect)
-            {
-                handler.AllowAutoRedirect = false;
-            }
-            else if (WebSession.MaximumRedirection > -1)
-            {
-                if (WebSession.MaximumRedirection == 0)
-                {
-                    handler.AllowAutoRedirect = false;
-                }
-                else
-                {
-                    handler.MaxAutomaticRedirections = WebSession.MaximumRedirection;
-                }
-            }
-
-            handler.SslProtocols = (SslProtocols)SslProtocol;
-
-            HttpClient httpClient = new(handler);
+            HttpClient client = WebSession.GetHttpClient(handleRedirect, out bool clientWasReset);
 
-            // check timeout setting (in seconds instead of milliseconds as in HttpWebRequest)
-            if (TimeoutSec == 0)
-            {
-                // A zero timeout means infinite
-                httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
-            }
-            else if (TimeoutSec > 0)
+            if (clientWasReset)
             {
-                httpClient.Timeout = new TimeSpan(0, 0, TimeoutSec);
+                WriteVerbose(WebCmdletStrings.WebSessionConnectionRecreated);
             }
 
-            return httpClient;
+            return client;
         }
 
         internal virtual HttpRequestMessage GetRequest(Uri uri)
         {
             Uri requestUri = PrepareUri(uri);
-            HttpMethod httpMethod = null;
-
-            switch (ParameterSetName)
-            {
-                case "StandardMethodNoProxy":
-                    goto case "StandardMethod";
-                case "StandardMethod":
-                    // set the method if the parameter was provided
-                    httpMethod = GetHttpMethod(Method);
-                    break;
-                case "CustomMethodNoProxy":
-                    goto case "CustomMethod";
-                case "CustomMethod":
-                    if (!string.IsNullOrEmpty(CustomMethod))
-                    {
-                        // set the method if the parameter was provided
-                        httpMethod = new HttpMethod(CustomMethod.ToUpperInvariant());
-                    }
+            HttpMethod httpMethod = string.IsNullOrEmpty(CustomMethod) ? GetHttpMethod(Method) : new HttpMethod(CustomMethod);
 
-                    break;
-            }
+            // Create the base WebRequest object
+            HttpRequestMessage request = new(httpMethod, requestUri);
 
-            // create the base WebRequest object
-            var request = new HttpRequestMessage(httpMethod, requestUri);
+            if (HttpVersion is not null)
+            {
+                request.Version = HttpVersion;
+            }
 
-            // pull in session data
+            // Pull in session data
             if (WebSession.Headers.Count > 0)
             {
                 WebSession.ContentHeaders.Clear();
@@ -1112,8 +1099,7 @@ internal virtual HttpRequestMessage GetRequest(Uri uri)
             }
 
             // Set 'User-Agent' if WebSession.Headers doesn't already contain it
-            string userAgent = null;
-            if (WebSession.Headers.TryGetValue(HttpKnownHeaderNames.UserAgent, out userAgent))
+            if (WebSession.Headers.TryGetValue(HttpKnownHeaderNames.UserAgent, out string userAgent))
             {
                 WebSession.UserAgent = userAgent;
             }
@@ -1136,10 +1122,10 @@ internal virtual HttpRequestMessage GetRequest(Uri uri)
             }
 
             // Set 'Transfer-Encoding'
-            if (TransferEncoding != null)
+            if (TransferEncoding is not null)
             {
                 request.Headers.TransferEncodingChunked = true;
-                var headerValue = new TransferCodingHeaderValue(TransferEncoding);
+                TransferCodingHeaderValue headerValue = new(TransferEncoding);
                 if (!request.Headers.TransferEncoding.Contains(headerValue))
                 {
                     request.Headers.TransferEncoding.Add(headerValue);
@@ -1150,7 +1136,8 @@ internal virtual HttpRequestMessage GetRequest(Uri uri)
             // If not, create a Range to request the entire file.
             if (Resume.IsPresent)
             {
-                var fileInfo = new FileInfo(QualifiedOutFile);
+                FileInfo fileInfo = new(QualifiedOutFile);
+
                 if (fileInfo.Exists)
                 {
                     request.Headers.Range = new RangeHeaderValue(fileInfo.Length, null);
@@ -1162,37 +1149,31 @@ internal virtual HttpRequestMessage GetRequest(Uri uri)
                 }
             }
 
-            return (request);
+            return request;
         }
 
         internal virtual void FillRequestStream(HttpRequestMessage request)
         {
-            if (request == null) { throw new ArgumentNullException(nameof(request)); }
+            ArgumentNullException.ThrowIfNull(request);
 
-            // set the content type
-            if (ContentType != null)
+            // Set the request content type
+            if (ContentType is not null)
             {
                 WebSession.ContentHeaders[HttpKnownHeaderNames.ContentType] = ContentType;
-                // request
             }
-            // ContentType == null
-            else if (Method == WebRequestMethod.Post || (IsCustomMethodSet() && CustomMethod.ToUpperInvariant() == "POST"))
+            else if (request.Method == HttpMethod.Post)
             {
                 // Win8:545310 Invoke-WebRequest does not properly set MIME type for POST
-                string contentType = null;
-                WebSession.ContentHeaders.TryGetValue(HttpKnownHeaderNames.ContentType, out contentType);
+                WebSession.ContentHeaders.TryGetValue(HttpKnownHeaderNames.ContentType, out string contentType);
                 if (string.IsNullOrEmpty(contentType))
                 {
                     WebSession.ContentHeaders[HttpKnownHeaderNames.ContentType] = "application/x-www-form-urlencoded";
                 }
             }
 
-            if (Form != null)
+            if (Form is not null)
             {
-                // Content headers will be set by MultipartFormDataContent which will throw unless we clear them first
-                WebSession.ContentHeaders.Clear();
-
-                var formData = new MultipartFormDataContent();
+                MultipartFormDataContent formData = new();
                 foreach (DictionaryEntry formEntry in Form)
                 {
                     // AddMultipartContent will handle PSObject unwrapping, Object type determination and enumerateing top level IEnumerables.
@@ -1201,73 +1182,67 @@ internal virtual void FillRequestStream(HttpRequestMessage request)
 
                 SetRequestContent(request, formData);
             }
-            // coerce body into a usable form
-            else if (Body != null)
+            else if (Body is not null)
             {
-                object content = Body;
-
-                // make sure we're using the base object of the body, not the PSObject wrapper
-                PSObject psBody = Body as PSObject;
-                if (psBody != null)
-                {
-                    content = psBody.BaseObject;
-                }
+                // Coerce body into a usable form
+                // Make sure we're using the base object of the body, not the PSObject wrapper
+                object content = Body is PSObject psBody ? psBody.BaseObject : Body;
 
-                if (content is FormObject form)
-                {
-                    SetRequestContent(request, form.Fields);
-                }
-                else if (content is IDictionary dictionary && request.Method != HttpMethod.Get)
-                {
-                    SetRequestContent(request, dictionary);
-                }
-                else if (content is XmlNode xmlNode)
-                {
-                    SetRequestContent(request, xmlNode);
-                }
-                else if (content is Stream stream)
-                {
-                    SetRequestContent(request, stream);
-                }
-                else if (content is byte[] bytes)
-                {
-                    SetRequestContent(request, bytes);
-                }
-                else if (content is MultipartFormDataContent multipartFormDataContent)
-                {
-                    WebSession.ContentHeaders.Clear();
-                    SetRequestContent(request, multipartFormDataContent);
-                }
-                else
+                switch (content)
                 {
-                    SetRequestContent(
-                        request,
-                        (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture));
+                    case FormObject form:
+                        SetRequestContent(request, form.Fields);
+                        break;
+                    case IDictionary dictionary when request.Method != HttpMethod.Get:
+                        SetRequestContent(request, dictionary);
+                        break;
+                    case XmlNode xmlNode:
+                        SetRequestContent(request, xmlNode);
+                        break;
+                    case Stream stream:
+                        SetRequestContent(request, stream);
+                        break;
+                    case byte[] bytes:
+                        SetRequestContent(request, bytes);
+                        break;
+                    case MultipartFormDataContent multipartFormDataContent:
+                        SetRequestContent(request, multipartFormDataContent);
+                        break;
+                    default:
+                        SetRequestContent(request, (string)LanguagePrimitives.ConvertTo(content, typeof(string), CultureInfo.InvariantCulture));
+                        break;
                 }
             }
-            else if (InFile != null) // copy InFile data
+            else if (InFile is not null)
             {
+                // Copy InFile data
                 try
                 {
-                    // open the input file
+                    // Open the input file
                     SetRequestContent(request, new FileStream(InFile, FileMode.Open, FileAccess.Read, FileShare.Read));
                 }
                 catch (UnauthorizedAccessException)
                 {
-                    string msg = string.Format(CultureInfo.InvariantCulture, WebCmdletStrings.AccessDenied,
-                                               _originalFilePath);
+                    string msg = string.Format(CultureInfo.InvariantCulture, WebCmdletStrings.AccessDenied, _originalFilePath);
+
                     throw new UnauthorizedAccessException(msg);
                 }
             }
 
-            // Add the content headers
-            if (request.Content == null)
+            // For other methods like Put where empty content has meaning, we need to fill in the content
+            if (request.Content is null)
             {
+                // If this is a Get request and there is no content, then don't fill in the content as empty content gets rejected by some web services per RFC7230
+                if (request.Method == HttpMethod.Get && ContentType is null)
+                {
+                    return;
+                }
+
                 request.Content = new StringContent(string.Empty);
                 request.Content.Headers.Clear();
             }
 
-            foreach (var entry in WebSession.ContentHeaders)
+            foreach (KeyValuePair<string, string> entry in WebSession.ContentHeaders)
             {
                 if (!string.IsNullOrWhiteSpace(entry.Value))
                 {
@@ -1283,7 +1258,7 @@ internal virtual void FillRequestStream(HttpRequestMessage request)
                         }
                         catch (FormatException ex)
                         {
-                            var outerEx = new ValidationMetadataException(WebCmdletStrings.ContentTypeException, ex);
+                            ValidationMetadataException outerEx = new(WebCmdletStrings.ContentTypeException, ex);
                             ErrorRecord er = new(outerEx, "WebCmdletContentTypeException", ErrorCategory.InvalidArgument, ContentType);
                             ThrowTerminatingError(er);
                         }
@@ -1292,106 +1267,97 @@ internal virtual void FillRequestStream(HttpRequestMessage request)
             }
         }
 
-        // Returns true if the status code is one of the supported redirection codes.
-        private static bool IsRedirectCode(HttpStatusCode code)
-        {
-            int intCode = (int)code;
-            return
-            (
-                (intCode >= 300 && intCode < 304)
-                ||
-                intCode == 307
-            );
-        }
-
-        // Returns true if the status code is a redirection code and the action requires switching from POST to GET on redirection.
-        // NOTE: Some of these status codes map to the same underlying value but spelling them out for completeness.
-        private static bool IsRedirectToGet(HttpStatusCode code)
-        {
-            return
-            (
-                code == HttpStatusCode.Found
-                ||
-                code == HttpStatusCode.Moved
-                ||
-                code == HttpStatusCode.Redirect
-                ||
-                code == HttpStatusCode.RedirectMethod
-                ||
-                code == HttpStatusCode.SeeOther
-                ||
-                code == HttpStatusCode.Ambiguous
-                ||
-                code == HttpStatusCode.MultipleChoices
-            );
-        }
-
-        private bool ShouldRetry(HttpStatusCode code)
-        {
-            int intCode = (int)code;
-
-            if (((intCode == 304) || (intCode >= 400 && intCode <= 599)) && WebSession.MaximumRetryCount > 0)
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestMessage request, bool keepAuthorization)
+        internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestMessage request, bool handleRedirect)
         {
-            if (client == null) { throw new ArgumentNullException(nameof(client)); }
-
-            if (request == null) { throw new ArgumentNullException(nameof(request)); }
+            ArgumentNullException.ThrowIfNull(client);
+            ArgumentNullException.ThrowIfNull(request);
 
             // Add 1 to account for the first request.
             int totalRequests = WebSession.MaximumRetryCount + 1;
-            HttpRequestMessage req = request;
+            HttpRequestMessage currentRequest = request;
             HttpResponseMessage response = null;
 
             do
             {
                 // Track the current URI being used by various requests and re-requests.
-                var currentUri = req.RequestUri;
+                Uri currentUri = currentRequest.RequestUri;
 
                 _cancelToken = new CancellationTokenSource();
-                response = client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead, _cancelToken.Token).GetAwaiter().GetResult();
+                try
+                {
+                    if (IsWriteVerboseEnabled())
+                    {
+                        WriteWebRequestVerboseInfo(currentRequest);
+                    }
+
+                    if (IsWriteDebugEnabled())
+                    {
+                        WriteWebRequestDebugInfo(currentRequest);
+                    }
+
+                    // codeql[cs/ssrf] - This is expected Poweshell behavior where user inputted Uri is supported for the context of this method. The user assumes trust for the Uri and invocation is done on the user's machine, not a web application. If there is concern for remoting, they should use restricted remoting.
+                    response = client.SendAsync(currentRequest, HttpCompletionOption.ResponseHeadersRead, _cancelToken.Token).GetAwaiter().GetResult();
+
+                    if (IsWriteVerboseEnabled())
+                    {
+                        WriteWebResponseVerboseInfo(response);
+                    }
+
+                    if (IsWriteDebugEnabled())
+                    {
+                        WriteWebResponseDebugInfo(response);
+                    }
+                }
+                catch (TaskCanceledException ex)
+                {
+                    if (ex.InnerException is TimeoutException)
+                    {
+                        // HTTP Request timed out
+                        ErrorRecord er = new(ex, "ConnectionTimeoutReached", ErrorCategory.OperationTimeout, null);
+                        ThrowTerminatingError(er);
+                    }
+                    else
+                    {
+                        throw;
+                    }
 
-                if (keepAuthorization && IsRedirectCode(response.StatusCode) && response.Headers.Location != null)
+                }
+                if (handleRedirect
+                    && _maximumRedirection is not 0
+                    && IsRedirectCode(response.StatusCode)
+                    && response.Headers.Location is not null)
                 {
                     _cancelToken.Cancel();
                     _cancelToken = null;
 
-                    // if explicit count was provided, reduce it for this redirection.
-                    if (WebSession.MaximumRedirection > 0)
+                    // If explicit count was provided, reduce it for this redirection.
+                    if (_maximumRedirection > 0)
                     {
-                        WebSession.MaximumRedirection--;
+                        _maximumRedirection--;
                     }
-                    // For selected redirects that used POST, GET must be used with the
-                    // redirected Location.
-                    // Since GET is the default; POST only occurs when -Method POST is used.
-                    if (Method == WebRequestMethod.Post && IsRedirectToGet(response.StatusCode))
+
+                    // For selected redirects, GET must be used with the redirected Location.
+                    if (RequestRequiresForceGet(response.StatusCode, currentRequest.Method) && !PreserveHttpMethodOnRedirect)
                     {
-                        // See https://msdn.microsoft.com/library/system.net.httpstatuscode(v=vs.110).aspx
                         Method = WebRequestMethod.Get;
+                        CustomMethod = string.Empty;
                     }
 
                     currentUri = new Uri(request.RequestUri, response.Headers.Location);
+
                     // Continue to handle redirection
-                    using (client = GetHttpClient(handleRedirect: true))
-                    using (HttpRequestMessage redirectRequest = GetRequest(currentUri))
-                    {
-                        response = GetResponse(client, redirectRequest, keepAuthorization);
-                    }
+                    using HttpRequestMessage redirectRequest = GetRequest(currentUri);
+                    response.Dispose();
+                    response = GetResponse(client, redirectRequest, handleRedirect);
                 }
 
                 // Request again without the Range header because the server indicated the range was not satisfiable.
                 // This happens when the local file is larger than the remote file.
                 // If the size of the remote file is the same as the local file, there is nothing to resume.
-                if (Resume.IsPresent &&
-                    response.StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable &&
-                    (response.Content.Headers.ContentRange.HasLength &&
-                    response.Content.Headers.ContentRange.Length != _resumeFileSize))
+                if (Resume.IsPresent
+                    && response.StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable
+                    && (response.Content.Headers.ContentRange.HasLength
+                    && response.Content.Headers.ContentRange.Length != _resumeFileSize))
                 {
                     _cancelToken.Cancel();
 
@@ -1404,45 +1370,53 @@ internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestM
                     using (HttpRequestMessage requestWithoutRange = GetRequest(currentUri))
                     {
                         FillRequestStream(requestWithoutRange);
-                        long requestContentLength = 0;
-                        if (requestWithoutRange.Content != null)
-                        {
-                            requestContentLength = requestWithoutRange.Content.Headers.ContentLength.Value;
-                        }
 
-                        string reqVerboseMsg = string.Format(
-                            CultureInfo.CurrentCulture,
-                            WebCmdletStrings.WebMethodInvocationVerboseMsg,
-                            requestWithoutRange.Method,
-                            requestWithoutRange.RequestUri,
-                            requestContentLength);
-                        WriteVerbose(reqVerboseMsg);
-
-                        return GetResponse(client, requestWithoutRange, keepAuthorization);
+                        response.Dispose();
+                        response = GetResponse(client, requestWithoutRange, handleRedirect);
                     }
                 }
 
                 _resumeSuccess = response.StatusCode == HttpStatusCode.PartialContent;
 
-                // When MaximumRetryCount is not specified, the totalRequests == 1.
-                if (totalRequests > 1 && ShouldRetry(response.StatusCode))
-                {
+                // When MaximumRetryCount is not specified, the totalRequests is 1.
+                if (totalRequests > 1 && ShouldRetry(response.StatusCode))
+                {
+                    int retryIntervalInSeconds = WebSession.RetryIntervalInSeconds;
+
+                    // If the status code is 429 get the retry interval from the Headers.
+                    // Ignore broken header and its value.
+                    if (response.StatusCode is HttpStatusCode.TooManyRequests && response.Headers.TryGetValues(HttpKnownHeaderNames.RetryAfter, out IEnumerable<string> retryAfter))
+                    {
+                        try
+                        {
+                            IEnumerator<string> enumerator = retryAfter.GetEnumerator();
+                            if (enumerator.MoveNext())
+                            {
+                                retryIntervalInSeconds = Convert.ToInt32(enumerator.Current);
+                            }
+                        }
+                        catch
+                        {
+                            // Ignore broken header.
+                        }
+                    }
+
                     string retryMessage = string.Format(
                         CultureInfo.CurrentCulture,
                         WebCmdletStrings.RetryVerboseMsg,
-                        RetryIntervalSec,
+                        retryIntervalInSeconds,
                         response.StatusCode);
 
                     WriteVerbose(retryMessage);
 
                     _cancelToken = new CancellationTokenSource();
-                    Task.Delay(WebSession.RetryIntervalInSeconds * 1000, _cancelToken.Token).GetAwaiter().GetResult();
+                    Task.Delay(retryIntervalInSeconds * 1000, _cancelToken.Token).GetAwaiter().GetResult();
                     _cancelToken.Cancel();
                     _cancelToken = null;
 
-                    req.Dispose();
-                    req = GetRequest(currentUri);
-                    FillRequestStream(req);
+                    currentRequest.Dispose();
+                    currentRequest = GetRequest(currentUri);
+                    FillRequestStream(currentRequest);
                 }
 
                 totalRequests--;
@@ -1454,219 +1428,329 @@ internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestM
 
         internal virtual void UpdateSession(HttpResponseMessage response)
         {
-            if (response == null) { throw new ArgumentNullException(nameof(response)); }
+            ArgumentNullException.ThrowIfNull(response);
         }
-
         #endregion Virtual Methods
 
-        #region Overrides
+        #region Helper Methods
+#nullable enable
+        internal static TimeSpan ConvertTimeoutSecondsToTimeSpan(int timeout) => timeout > 0 ? TimeSpan.FromSeconds(timeout) : Timeout.InfiniteTimeSpan;
 
-        /// <summary>
-        /// The main execution method for cmdlets derived from WebRequestPSCmdlet.
-        /// </summary>
-        protected override void ProcessRecord()
+        private void WriteWebRequestVerboseInfo(HttpRequestMessage request)
         {
             try
             {
-                // Set cmdlet context for write progress
-                ValidateParameters();
-                PrepareSession();
+                // Typical Basic Example: 'WebRequest: v1.1 POST https://httpstat.us/200 with query length 6'
+                StringBuilder verboseBuilder = new(128);
 
-                // if the request contains an authorization header and PreserveAuthorizationOnRedirect is not set,
-                // it needs to be stripped on the first redirect.
-                bool keepAuthorization = WebSession != null
-                                          &&
-                                          WebSession.Headers != null
-                                          &&
-                                          PreserveAuthorizationOnRedirect.IsPresent
-                                          &&
-                                          WebSession.Headers.ContainsKey(HttpKnownHeaderNames.Authorization);
-
-                using (HttpClient client = GetHttpClient(keepAuthorization))
+                // "Redact" the query string from verbose output, the details will be visible in Debug output
+                string uriWithoutQuery = request.RequestUri?.GetLeftPart(UriPartial.Path) ?? string.Empty;
+                verboseBuilder.Append($"WebRequest: v{request.Version} {request.Method} {uriWithoutQuery}");
+                if (request.RequestUri?.Query is not null && request.RequestUri.Query.Length > 1)
+                {
+                    verboseBuilder.Append($" with query length {request.RequestUri.Query.Length - 1}");
+                }
+
+                string? requestContentType = ContentHelper.GetContentType(request);
+                if (requestContentType is not null)
+                {
+                    verboseBuilder.Append($" with {requestContentType} payload");
+                }
+
+                long? requestContentLength = request.Content?.Headers?.ContentLength;
+                if (requestContentLength is not null)
+                {
+                    verboseBuilder.Append($" with body size {ContentHelper.GetFriendlyContentLength(requestContentLength)}");
+                }
+                if (OutFile is not null)
+                {
+                    verboseBuilder.Append($" output to {QualifyFilePath(OutFile)}");
+                }
+
+                WriteVerbose(verboseBuilder.ToString().Trim());
+            }
+            catch (Exception ex)
+            {
+                // Just in case there are any edge cases we missed, we don't break workflows with an exception
+                WriteVerbose($"Failed to Write WebRequest Verbose Info: {ex} {ex.StackTrace}");
+            }
+        }
+
+        private void WriteWebRequestDebugInfo(HttpRequestMessage request)
+        {
+            try
+            {
+                // Typical basic example:
+                // WebRequest Detail
+                // ---QUERY
+                // test = 5
+                // --- HEADERS
+                // User - Agent: Mozilla / 5.0, (Linux;Ubuntu 24.04.2 LTS;en - US), PowerShell / 7.6.0
+                StringBuilder debugBuilder = new("WebRequest Detail" + Environment.NewLine, 512);
+
+                if (!string.IsNullOrEmpty(request.RequestUri?.Query))
+                {
+                    debugBuilder.Append(DebugHeaderPrefix).AppendLine("QUERY");
+                    string[] queryParams = request.RequestUri.Query.TrimStart('?').Split('&');
+                    debugBuilder
+                        .AppendJoin(Environment.NewLine, queryParams)
+                        .AppendLine()
+                        .AppendLine();
+                }
+
+                debugBuilder.Append(DebugHeaderPrefix).AppendLine("HEADERS");
+
+                foreach (var headerSet in new HttpHeaders?[] { request.Headers, request.Content?.Headers })
                 {
-                    int followedRelLink = 0;
-                    Uri uri = Uri;
-                    do
+                    if (headerSet is null)
                     {
-                        if (followedRelLink > 0)
-                        {
-                            string linkVerboseMsg = string.Format(CultureInfo.CurrentCulture,
-                                WebCmdletStrings.FollowingRelLinkVerboseMsg,
-                                uri.AbsoluteUri);
-                            WriteVerbose(linkVerboseMsg);
-                        }
+                        continue;
+                    }
 
-                        using (HttpRequestMessage request = GetRequest(uri))
-                        {
-                            FillRequestStream(request);
-                            try
-                            {
-                                long requestContentLength = 0;
-                                if (request.Content != null)
-                                    requestContentLength = request.Content.Headers.ContentLength.Value;
-
-                                string reqVerboseMsg = string.Format(CultureInfo.CurrentCulture,
-                                    WebCmdletStrings.WebMethodInvocationVerboseMsg,
-                                    request.Method,
-                                    requestContentLength);
-                                WriteVerbose(reqVerboseMsg);
-
-                                HttpResponseMessage response = GetResponse(client, request, keepAuthorization);
-
-                                string contentType = ContentHelper.GetContentType(response);
-                                string respVerboseMsg = string.Format(CultureInfo.CurrentCulture,
-                                    WebCmdletStrings.WebResponseVerboseMsg,
-                                    response.Content.Headers.ContentLength,
-                                    contentType);
-                                WriteVerbose(respVerboseMsg);
-
-                                bool _isSuccess = response.IsSuccessStatusCode;
-
-                                // Check if the Resume range was not satisfiable because the file already completed downloading.
-                                // This happens when the local file is the same size as the remote file.
-                                if (Resume.IsPresent &&
-                                    response.StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable &&
-                                    response.Content.Headers.ContentRange.HasLength &&
-                                    response.Content.Headers.ContentRange.Length == _resumeFileSize)
-                                {
-                                    _isSuccess = true;
-                                    WriteVerbose(string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.OutFileWritingSkipped, OutFile));
-                                    // Disable writing to the OutFile.
-                                    OutFile = null;
-                                }
+                    debugBuilder.AppendLine(headerSet.ToString());
+                }
 
-                                if (ShouldCheckHttpStatus && !_isSuccess)
-                                {
-                                    string message = string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.ResponseStatusCodeFailure,
-                                        (int)response.StatusCode, response.ReasonPhrase);
-                                    HttpResponseException httpEx = new(message, response);
-                                    ErrorRecord er = new(httpEx, "WebCmdletWebResponseException", ErrorCategory.InvalidOperation, request);
-                                    string detailMsg = string.Empty;
-                                    StreamReader reader = null;
-                                    try
-                                    {
-                                        reader = new StreamReader(StreamHelper.GetResponseStream(response));
-                                        // remove HTML tags making it easier to read
-                                        detailMsg = System.Text.RegularExpressions.Regex.Replace(reader.ReadToEnd(), "<[^>]*>", string.Empty);
-                                    }
-                                    catch (Exception)
-                                    {
-                                        // catch all
-                                    }
-                                    finally
-                                    {
-                                        if (reader != null)
-                                        {
-                                            reader.Dispose();
-                                        }
-                                    }
-
-                                    if (!string.IsNullOrEmpty(detailMsg))
-                                    {
-                                        er.ErrorDetails = new ErrorDetails(detailMsg);
-                                    }
+                if (request.Content is not null)
+                {
+                    debugBuilder
+                    .Append(DebugHeaderPrefix).AppendLine("BODY")
+                    .AppendLine(request.Content switch
+                    {
+                        StringContent stringContent => stringContent
+                            .ReadAsStringAsync(_cancelToken.Token)
+                            .GetAwaiter().GetResult(),
+                        MultipartFormDataContent multipartContent => "=> Multipart Form Content"
+                            + Environment.NewLine
+                            + multipartContent.ReadAsStringAsync(_cancelToken.Token)
+                            .GetAwaiter().GetResult(),
+                        ByteArrayContent byteContent => InFile is not null
+                            ? "[Binary content: "
+                                + ContentHelper.GetFriendlyContentLength(byteContent.Headers.ContentLength)
+                                + "]"
+                            : byteContent.ReadAsStringAsync(_cancelToken.Token).GetAwaiter().GetResult(),
+                        StreamContent streamContent =>
+                            "[Stream content: " + ContentHelper.GetFriendlyContentLength(streamContent.Headers.ContentLength) + "]",
+                        _ => "[Unknown content type]",
+                    })
+                    .AppendLine();
+                }
 
-                                    ThrowTerminatingError(er);
-                                }
+                WriteDebug(debugBuilder.ToString().Trim());
+            }
+            catch (Exception ex)
+            {
+                // Just in case there are any edge cases we missed, we don't break workflows with an exception
+                WriteVerbose($"Failed to Write WebRequest Debug Info: {ex} {ex.StackTrace}");
+            }
+        }
 
-                                if (_parseRelLink || _followRelLink)
-                                {
-                                    ParseLinkHeader(response, uri);
-                                }
+        private void WriteWebResponseVerboseInfo(HttpResponseMessage response)
+        {
+            try
+            {
+                // Typical basic example: WebResponse: 200 OK with text/plain payload body size 6 B (6 bytes)
+                StringBuilder verboseBuilder = new(128);
+                verboseBuilder.Append($"WebResponse: {(int)response.StatusCode} {response.ReasonPhrase ?? response.StatusCode.ToString()}");
 
-                                ProcessResponse(response);
-                                UpdateSession(response);
+                string? responseContentType = ContentHelper.GetContentType(response);
+                if (responseContentType is not null)
+                {
+                    verboseBuilder.Append($" with {responseContentType} payload");
+                }
 
-                                // If we hit our maximum redirection count, generate an error.
-                                // Errors with redirection counts of greater than 0 are handled automatically by .NET, but are
-                                // impossible to detect programmatically when we hit this limit. By handling this ourselves
-                                // (and still writing out the result), users can debug actual HTTP redirect problems.
-                                if (WebSession.MaximumRedirection == 0) // Indicate "HttpClientHandler.AllowAutoRedirect == false"
-                                {
-                                    if (response.StatusCode == HttpStatusCode.Found ||
-                                        response.StatusCode == HttpStatusCode.Moved ||
-                                        response.StatusCode == HttpStatusCode.MovedPermanently)
-                                    {
-                                        ErrorRecord er = new(new InvalidOperationException(), "MaximumRedirectExceeded", ErrorCategory.InvalidOperation, request);
-                                        er.ErrorDetails = new ErrorDetails(WebCmdletStrings.MaximumRedirectionCountExceeded);
-                                        WriteError(er);
-                                    }
-                                }
-                            }
-                            catch (HttpRequestException ex)
-                            {
-                                ErrorRecord er = new(ex, "WebCmdletWebResponseException", ErrorCategory.InvalidOperation, request);
-                                if (ex.InnerException != null)
-                                {
-                                    er.ErrorDetails = new ErrorDetails(ex.InnerException.Message);
-                                }
+                long? responseContentLength = response.Content?.Headers?.ContentLength;
+                if (responseContentLength is not null)
+                {
+                    verboseBuilder.Append($" with body size {ContentHelper.GetFriendlyContentLength(responseContentLength)}");
+                }
 
-                                ThrowTerminatingError(er);
-                            }
+                WriteVerbose(verboseBuilder.ToString().Trim());
+            }
+            catch (Exception ex)
+            {
+                // Just in case there are any edge cases we missed, we don't break workflows with an exception
+                WriteVerbose($"Failed to Write WebResponse Verbose Info: {ex} {ex.StackTrace}");
+            }
+        }
 
-                            if (_followRelLink)
-                            {
-                                if (!_relationLink.ContainsKey("next"))
-                                {
-                                    return;
-                                }
+        private void WriteWebResponseDebugInfo(HttpResponseMessage response)
+        {
+            try
+            {
+                // Typical basic example
+                // WebResponse Detail
+                // --- HEADERS
+                // Date: Fri, 09 May 2025 18:06:44 GMT
+                // Server: Kestrel
+                // Set-Cookie: ARRAffinity=ee0b467f95b53d8dcfe48aeeb4173f93cf819be6e4721f434341647f4695039d;Path=/;HttpOnly;Secure;Domain=httpstat.us, ARRAffinitySameSite=ee0b467f95b53d8dcfe48aeeb4173f93cf819be6e4721f434341647f4695039d;Path=/;HttpOnly;SameSite=None;Secure;Domain=httpstat.us
+                // Strict-Transport-Security: max-age=2592000
+                // Request-Context: appId=cid-v1:3548b0f5-7f75-492f-82bb-b6eb0e864e53
+                // Content-Length: 6
+                // Content-Type: text/plain
+                // --- BODY
+                // 200 OK
+                StringBuilder debugBuilder = new("WebResponse Detail" + Environment.NewLine, 512);
+
+                debugBuilder.Append(DebugHeaderPrefix).AppendLine("HEADERS");
+
+                foreach (var headerSet in new HttpHeaders?[] { response.Headers, response.Content?.Headers })
+                {
+                    if (headerSet is null)
+                    {
+                        continue;
+                    }
 
-                                uri = new Uri(_relationLink["next"]);
-                                followedRelLink++;
-                            }
-                        }
+                    debugBuilder.AppendLine(headerSet.ToString());
+                }
+
+                if (response.Content is not null)
+                {
+                    debugBuilder.Append(DebugHeaderPrefix).AppendLine("BODY");
+
+                    if (ContentHelper.IsTextBasedContentType(ContentHelper.GetContentType(response)))
+                    {
+                        debugBuilder.AppendLine(
+                            response.Content.ReadAsStringAsync(_cancelToken.Token)
+                            .GetAwaiter().GetResult());
+                    }
+                    else
+                    {
+                        string friendlyContentLength = ContentHelper.GetFriendlyContentLength(
+                            response.Content?.Headers?.ContentLength);
+                        debugBuilder.AppendLine($"[Binary content: {friendlyContentLength}]");
                     }
-                    while (_followRelLink && (followedRelLink < _maximumFollowRelLink));
                 }
+
+                WriteDebug(debugBuilder.ToString().Trim());
             }
-            catch (CryptographicException ex)
+            catch (Exception ex)
             {
-                ErrorRecord er = new(ex, "WebCmdletCertificateException", ErrorCategory.SecurityError, null);
-                ThrowTerminatingError(er);
+                // Just in case there are any edge cases we missed, we don't break workflows with an exception
+                WriteVerbose($"Failed to Write WebResponse Debug Info: {ex} {ex.StackTrace}");
             }
-            catch (NotSupportedException ex)
+        }
+
+        private Uri PrepareUri(Uri uri)
+        {
+            uri = CheckProtocol(uri);
+
+            // Before creating the web request,
+            // preprocess Body if content is a dictionary and method is GET (set as query)
+            LanguagePrimitives.TryConvertTo<IDictionary>(Body, out IDictionary bodyAsDictionary);
+            if (bodyAsDictionary is not null && (Method == WebRequestMethod.Default || Method == WebRequestMethod.Get || CustomMethod == "GET"))
             {
-                ErrorRecord er = new(ex, "WebCmdletIEDomNotSupportedException", ErrorCategory.NotImplemented, null);
-                ThrowTerminatingError(er);
+                UriBuilder uriBuilder = new(uri);
+                if (uriBuilder.Query is not null && uriBuilder.Query.Length > 1)
+                {
+                    uriBuilder.Query = string.Concat(uriBuilder.Query.AsSpan(1), "&", FormatDictionary(bodyAsDictionary));
+                }
+                else
+                {
+                    uriBuilder.Query = FormatDictionary(bodyAsDictionary);
+                }
+
+                uri = uriBuilder.Uri;
+
+                // Set body to null to prevent later FillRequestStream
+                Body = null;
             }
+
+            return uri;
         }
 
-        /// <summary>
-        /// Implementing ^C, after start the BeginGetResponse.
-        /// </summary>
-        protected override void StopProcessing()
+        private static Uri CheckProtocol(Uri uri)
+        {
+            ArgumentNullException.ThrowIfNull(uri);
+
+            return uri.IsAbsoluteUri ? uri : new Uri("http://" + uri.OriginalString);
+        }
+#nullable restore
+
+        private string QualifyFilePath(string path) => PathUtils.ResolveFilePath(filePath: path, command: this, isLiteralPath: true);
+
+        private static string FormatDictionary(IDictionary content)
         {
-            if (_cancelToken != null)
+            ArgumentNullException.ThrowIfNull(content);
+
+            StringBuilder bodyBuilder = new();
+            foreach (string key in content.Keys)
             {
-                _cancelToken.Cancel();
+                if (bodyBuilder.Length > 0)
+                {
+                    bodyBuilder.Append('&');
+                }
+
+                object value = content[key];
+
+                // URLEncode the key and value
+                string encodedKey = WebUtility.UrlEncode(key);
+                string encodedValue = value is null ? string.Empty : WebUtility.UrlEncode(value.ToString());
+
+                bodyBuilder.Append($"{encodedKey}={encodedValue}");
             }
+
+            return bodyBuilder.ToString();
         }
 
-        #endregion Overrides
+        private ErrorRecord GetValidationError(string msg, string errorId)
+        {
+            ValidationMetadataException ex = new(msg);
+            return new ErrorRecord(ex, errorId, ErrorCategory.InvalidArgument, this);
+        }
 
-        #region Helper Methods
+        private ErrorRecord GetValidationError(string msg, string errorId, params object[] args)
+        {
+            msg = string.Format(CultureInfo.InvariantCulture, msg, args);
+            ValidationMetadataException ex = new(msg);
+            return new ErrorRecord(ex, errorId, ErrorCategory.InvalidArgument, this);
+        }
+
+        private string GetBasicAuthorizationHeader()
+        {
+            string password = new NetworkCredential(string.Empty, Credential.Password).Password;
+            string unencoded = string.Create(CultureInfo.InvariantCulture, $"{Credential.UserName}:{password}");
+            byte[] bytes = Encoding.UTF8.GetBytes(unencoded);
+            return string.Create(CultureInfo.InvariantCulture, $"Basic {Convert.ToBase64String(bytes)}");
+        }
+
+        private string GetBearerAuthorizationHeader()
+        {
+            return string.Create(CultureInfo.InvariantCulture, $"Bearer {new NetworkCredential(string.Empty, Token).Password}");
+        }
+
+        private void ProcessAuthentication()
+        {
+            if (Authentication == WebAuthenticationType.Basic)
+            {
+                WebSession.Headers["Authorization"] = GetBasicAuthorizationHeader();
+            }
+            else if (Authentication == WebAuthenticationType.Bearer || Authentication == WebAuthenticationType.OAuth)
+            {
+                WebSession.Headers["Authorization"] = GetBearerAuthorizationHeader();
+            }
+            else
+            {
+                Diagnostics.Assert(false, string.Create(CultureInfo.InvariantCulture, $"Unrecognized Authentication value: {Authentication}"));
+            }
+        }
+
+        private bool IsPersistentSession() => MyInvocation.BoundParameters.ContainsKey(nameof(WebSession)) || MyInvocation.BoundParameters.ContainsKey(nameof(SessionVariable));
 
         /// <summary>
         /// Sets the ContentLength property of the request and writes the specified content to the request's RequestStream.
         /// </summary>
         /// <param name="request">The WebRequest who's content is to be set.</param>
         /// <param name="content">A byte array containing the content data.</param>
-        /// <returns>The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property.</returns>
         /// <remarks>
-        /// Because this function sets the request's ContentLength property and writes content data into the requests's stream,
+        /// Because this function sets the request's ContentLength property and writes content data into the request's stream,
         /// it should be called one time maximum on a given request.
         /// </remarks>
-        internal long SetRequestContent(HttpRequestMessage request, byte[] content)
+        internal void SetRequestContent(HttpRequestMessage request, byte[] content)
         {
-            if (request == null)
-                throw new ArgumentNullException(nameof(request));
-            if (content == null)
-                return 0;
-
-            var byteArrayContent = new ByteArrayContent(content);
-            request.Content = byteArrayContent;
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(content);
 
-            return byteArrayContent.Headers.ContentLength.Value;
+            request.Content = new ByteArrayContent(content);
         }
 
         /// <summary>
@@ -1674,85 +1758,63 @@ internal long SetRequestContent(HttpRequestMessage request, byte[] content)
         /// </summary>
         /// <param name="request">The WebRequest who's content is to be set.</param>
         /// <param name="content">A String object containing the content data.</param>
-        /// <returns>The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property.</returns>
         /// <remarks>
-        /// Because this function sets the request's ContentLength property and writes content data into the requests's stream,
+        /// Because this function sets the request's ContentLength property and writes content data into the request's stream,
         /// it should be called one time maximum on a given request.
         /// </remarks>
-        internal long SetRequestContent(HttpRequestMessage request, string content)
+        internal void SetRequestContent(HttpRequestMessage request, string content)
         {
-            if (request == null)
-                throw new ArgumentNullException(nameof(request));
-
-            if (content == null)
-                return 0;
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(content);
 
             Encoding encoding = null;
-            if (ContentType != null)
+
+            if (WebSession.ContentHeaders.TryGetValue(HttpKnownHeaderNames.ContentType, out string contentType) && contentType is not null)
             {
                 // If Content-Type contains the encoding format (as CharSet), use this encoding format
                 // to encode the Body of the WebRequest sent to the server. Default Encoding format
                 // would be used if Charset is not supplied in the Content-Type property.
                 try
                 {
-                    var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(ContentType);
+                    MediaTypeHeaderValue mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(contentType);
                     if (!string.IsNullOrEmpty(mediaTypeHeaderValue.CharSet))
                     {
                         encoding = Encoding.GetEncoding(mediaTypeHeaderValue.CharSet);
                     }
                 }
-                catch (FormatException ex)
+                catch (Exception ex) when (ex is FormatException || ex is ArgumentException)
                 {
                     if (!SkipHeaderValidation)
                     {
-                        var outerEx = new ValidationMetadataException(WebCmdletStrings.ContentTypeException, ex);
-                        ErrorRecord er = new(outerEx, "WebCmdletContentTypeException", ErrorCategory.InvalidArgument, ContentType);
-                        ThrowTerminatingError(er);
-                    }
-                }
-                catch (ArgumentException ex)
-                {
-                    if (!SkipHeaderValidation)
-                    {
-                        var outerEx = new ValidationMetadataException(WebCmdletStrings.ContentTypeException, ex);
-                        ErrorRecord er = new(outerEx, "WebCmdletContentTypeException", ErrorCategory.InvalidArgument, ContentType);
+                        ValidationMetadataException outerEx = new(WebCmdletStrings.ContentTypeException, ex);
+                        ErrorRecord er = new(outerEx, "WebCmdletContentTypeException", ErrorCategory.InvalidArgument, contentType);
                         ThrowTerminatingError(er);
                     }
                 }
             }
 
             byte[] bytes = StreamHelper.EncodeToBytes(content, encoding);
-            var byteArrayContent = new ByteArrayContent(bytes);
-            request.Content = byteArrayContent;
-
-            return byteArrayContent.Headers.ContentLength.Value;
+            request.Content = new ByteArrayContent(bytes);
         }
 
-        internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode)
+        internal void SetRequestContent(HttpRequestMessage request, XmlNode xmlNode)
         {
-            if (request == null)
-                throw new ArgumentNullException(nameof(request));
-
-            if (xmlNode == null)
-                return 0;
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(xmlNode);
 
             byte[] bytes = null;
             XmlDocument doc = xmlNode as XmlDocument;
-            if (doc?.FirstChild is XmlDeclaration)
+            if (doc?.FirstChild is XmlDeclaration decl && !string.IsNullOrEmpty(decl.Encoding))
             {
-                XmlDeclaration decl = doc.FirstChild as XmlDeclaration;
                 Encoding encoding = Encoding.GetEncoding(decl.Encoding);
                 bytes = StreamHelper.EncodeToBytes(doc.OuterXml, encoding);
             }
             else
             {
-                bytes = StreamHelper.EncodeToBytes(xmlNode.OuterXml);
+                bytes = StreamHelper.EncodeToBytes(xmlNode.OuterXml, encoding: null);
             }
 
-            var byteArrayContent = new ByteArrayContent(bytes);
-            request.Content = byteArrayContent;
-
-            return byteArrayContent.Headers.ContentLength.Value;
+            request.Content = new ByteArrayContent(bytes);
         }
 
         /// <summary>
@@ -1760,65 +1822,51 @@ internal long SetRequestContent(HttpRequestMessage request, XmlNode xmlNode)
         /// </summary>
         /// <param name="request">The WebRequest who's content is to be set.</param>
         /// <param name="contentStream">A Stream object containing the content data.</param>
-        /// <returns>The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property.</returns>
         /// <remarks>
-        /// Because this function sets the request's ContentLength property and writes content data into the requests's stream,
+        /// Because this function sets the request's ContentLength property and writes content data into the request's stream,
         /// it should be called one time maximum on a given request.
         /// </remarks>
-        internal long SetRequestContent(HttpRequestMessage request, Stream contentStream)
+        internal void SetRequestContent(HttpRequestMessage request, Stream contentStream)
         {
-            if (request == null)
-                throw new ArgumentNullException(nameof(request));
-            if (contentStream == null)
-                throw new ArgumentNullException(nameof(contentStream));
-
-            var streamContent = new StreamContent(contentStream);
-            request.Content = streamContent;
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(contentStream);
 
-            return streamContent.Headers.ContentLength.Value;
+            request.Content = new StreamContent(contentStream);
         }
 
         /// <summary>
-        /// Sets the ContentLength property of the request and writes the specified content to the request's RequestStream.
+        /// Sets the ContentLength property of the request and writes the ContentLength property of the request and writes the specified content to the request's RequestStream.
         /// </summary>
         /// <param name="request">The WebRequest who's content is to be set.</param>
         /// <param name="multipartContent">A MultipartFormDataContent object containing multipart/form-data content.</param>
-        /// <returns>The number of bytes written to the requests RequestStream (and the new value of the request's ContentLength property.</returns>
         /// <remarks>
-        /// Because this function sets the request's ContentLength property and writes content data into the requests's stream,
+        /// Because this function sets the request's ContentLength property and writes content data into the request's stream,
         /// it should be called one time maximum on a given request.
         /// </remarks>
-        internal long SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent)
+        internal void SetRequestContent(HttpRequestMessage request, MultipartFormDataContent multipartContent)
         {
-            if (request == null)
-            {
-                throw new ArgumentNullException(nameof(request));
-            }
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(multipartContent);
 
-            if (multipartContent == null)
-            {
-                throw new ArgumentNullException(nameof(multipartContent));
-            }
+            // Content headers will be set by MultipartFormDataContent which will throw unless we clear them first
+            WebSession.ContentHeaders.Clear();
 
             request.Content = multipartContent;
-
-            return multipartContent.Headers.ContentLength.Value;
         }
 
-        internal long SetRequestContent(HttpRequestMessage request, IDictionary content)
+        internal void SetRequestContent(HttpRequestMessage request, IDictionary content)
         {
-            if (request == null)
-                throw new ArgumentNullException(nameof(request));
-            if (content == null)
-                throw new ArgumentNullException(nameof(content));
+            ArgumentNullException.ThrowIfNull(request);
+            ArgumentNullException.ThrowIfNull(content);
 
             string body = FormatDictionary(content);
-            return (SetRequestContent(request, body));
+            SetRequestContent(request, body);
         }
 
-        internal void ParseLinkHeader(HttpResponseMessage response, System.Uri requestUri)
+        internal void ParseLinkHeader(HttpResponseMessage response)
         {
-            if (_relationLink == null)
+            Uri requestUri = response.RequestMessage.RequestUri;
+            if (_relationLink is null)
             {
                 // Must ignore the case of relation links. See RFC 8288 (https://tools.ietf.org/html/rfc8288)
                 _relationLink = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
@@ -1828,17 +1876,16 @@ internal void ParseLinkHeader(HttpResponseMessage response, System.Uri requestUr
                 _relationLink.Clear();
             }
 
-            // we only support the URL in angle brackets and `rel`, other attributes are ignored
+            // We only support the URL in angle brackets and `rel`, other attributes are ignored
             // user can still parse it themselves via the Headers property
-            const string pattern = "<(?<url>.*?)>;\\s*rel=(\"?)(?<rel>.*?)\\1[^\\w -.]?";
-            IEnumerable<string> links;
-            if (response.Headers.TryGetValues("Link", out links))
+            const string Pattern = "<(?<url>.*?)>;\\s*rel=(?<quoted>\")?(?<rel>(?(quoted).*?|[^,;]*))(?(quoted)\")";
+            if (response.Headers.TryGetValues("Link", out IEnumerable<string> links))
             {
                 foreach (string linkHeader in links)
                 {
-                    foreach (string link in linkHeader.Split(','))
+                    MatchCollection matchCollection = Regex.Matches(linkHeader, Pattern);
+                    foreach (Match match in matchCollection)
                     {
-                        Match match = Regex.Match(link, pattern);
                         if (match.Success)
                         {
                             string url = match.Groups["url"].Value;
@@ -1859,14 +1906,11 @@ internal void ParseLinkHeader(HttpResponseMessage response, System.Uri requestUr
         /// </summary>
         /// <param name="fieldName">The Field Name to use.</param>
         /// <param name="fieldValue">The Field Value to use.</param>
-        /// <param name="formData">The <see cref="MultipartFormDataContent"/>> to update.</param>
+        /// <param name="formData">The <see cref="MultipartFormDataContent"/> to update.</param>
         /// <param name="enumerate">If true, collection types in <paramref name="fieldValue"/> will be enumerated. If false, collections will be treated as single value.</param>
-        private void AddMultipartContent(object fieldName, object fieldValue, MultipartFormDataContent formData, bool enumerate)
+        private static void AddMultipartContent(object fieldName, object fieldValue, MultipartFormDataContent formData, bool enumerate)
         {
-            if (formData == null)
-            {
-                throw new ArgumentNullException("formDate");
-            }
+            ArgumentNullException.ThrowIfNull(formData);
 
             // It is possible that the dictionary keys or values are PSObject wrapped depending on how the dictionary is defined and assigned.
             // Before processing the field name and value we need to ensure we are working with the base objects and not the PSObject wrappers.
@@ -1902,9 +1946,9 @@ private void AddMultipartContent(object fieldName, object fieldValue, MultipartF
             // Treat the value as a collection and enumerate it if enumeration is true
             if (enumerate && fieldValue is IEnumerable items)
             {
-                foreach (var item in items)
+                foreach (object item in items)
                 {
-                    // Recruse, but do not enumerate the next level. IEnumerables will be treated as single values.
+                    // Recurse, but do not enumerate the next level. IEnumerables will be treated as single values.
                     AddMultipartContent(fieldName: fieldName, fieldValue: item, formData: formData, enumerate: false);
                 }
             }
@@ -1917,11 +1961,11 @@ private void AddMultipartContent(object fieldName, object fieldValue, MultipartF
         /// <param name="fieldValue">The Field Value to use for the <see cref="StringContent"/></param>
         private static StringContent GetMultipartStringContent(object fieldName, object fieldValue)
         {
-            var contentDisposition = new ContentDispositionHeaderValue("form-data");
-            // .NET does not enclose field names in quotes, however, modern browsers and curl do.
-            contentDisposition.Name = "\"" + LanguagePrimitives.ConvertTo<string>(fieldName) + "\"";
+            ContentDispositionHeaderValue contentDisposition = new("form-data");
+            contentDisposition.Name = LanguagePrimitives.ConvertTo<string>(fieldName);
 
-            var result = new StringContent(LanguagePrimitives.ConvertTo<string>(fieldValue));
+            // codeql[cs/information-exposure-through-exception] - PowerShell is an on-premise product, meaning local users would already have access to the binaries and stack traces. Therefore, the information would not be exposed in the same way it would be for an ASP .NET service.
+            StringContent result = new(LanguagePrimitives.ConvertTo<string>(fieldValue));
             result.Headers.ContentDisposition = contentDisposition;
 
             return result;
@@ -1934,11 +1978,10 @@ private static StringContent GetMultipartStringContent(object fieldName, object
         /// <param name="stream">The <see cref="Stream"/> to use for the <see cref="StreamContent"/></param>
         private static StreamContent GetMultipartStreamContent(object fieldName, Stream stream)
         {
-            var contentDisposition = new ContentDispositionHeaderValue("form-data");
-            // .NET does not enclose field names in quotes, however, modern browsers and curl do.
-            contentDisposition.Name = "\"" + LanguagePrimitives.ConvertTo<string>(fieldName) + "\"";
+            ContentDispositionHeaderValue contentDisposition = new("form-data");
+            contentDisposition.Name = LanguagePrimitives.ConvertTo<string>(fieldName);
 
-            var result = new StreamContent(stream);
+            StreamContent result = new(stream);
             result.Headers.ContentDisposition = contentDisposition;
             result.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
 
@@ -1952,12 +1995,131 @@ private static StreamContent GetMultipartStreamContent(object fieldName, Stream
         /// <param name="file">The file to use for the <see cref="StreamContent"/></param>
         private static StreamContent GetMultipartFileContent(object fieldName, FileInfo file)
         {
-            var result = GetMultipartStreamContent(fieldName: fieldName, stream: new FileStream(file.FullName, FileMode.Open));
-            // .NET does not enclose field names in quotes, however, modern browsers and curl do.
-            result.Headers.ContentDisposition.FileName = "\"" + file.Name + "\"";
+            StreamContent result = GetMultipartStreamContent(fieldName: fieldName, stream: new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read));
+
+            result.Headers.ContentDisposition.FileName = file.Name;
+            result.Headers.ContentDisposition.FileNameStar = file.Name;
 
             return result;
         }
+
+        private static string FormatErrorMessage(string error, string contentType)
+        {
+            string formattedError = null;
+
+            try
+            {
+                if (ContentHelper.IsXml(contentType))
+                {
+                    XmlDocument doc = new();
+                    doc.LoadXml(error);
+
+                    XmlWriterSettings settings = new XmlWriterSettings
+                    {
+                        Indent = true,
+                        NewLineOnAttributes = true,
+                        OmitXmlDeclaration = true
+                    };
+
+                    if (doc.FirstChild is XmlDeclaration decl)
+                    {
+                        settings.Encoding = Encoding.GetEncoding(decl.Encoding);
+                    }
+
+                    StringBuilder stringBuilder = new();
+                    using XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, settings);
+                    doc.Save(xmlWriter);
+                    string xmlString = stringBuilder.ToString();
+
+                    formattedError = Environment.NewLine + xmlString;
+                }
+                else if (ContentHelper.IsJson(contentType))
+                {
+                    JsonNode jsonNode = JsonNode.Parse(error);
+                    JsonSerializerOptions options = new JsonSerializerOptions { WriteIndented = true };
+                    string jsonString = jsonNode.ToJsonString(options);
+
+                    formattedError = Environment.NewLine + jsonString;
+                }
+            }
+            catch
+            {
+                // Ignore errors
+            }
+
+            if (string.IsNullOrEmpty(formattedError))
+            {
+                // Remove HTML tags making it easier to read
+                formattedError = Regex.Replace(error, "<[^>]*>", string.Empty);
+            }
+
+            return formattedError;
+        }
+
+        // Returns true if the status code is one of the supported redirection codes.
+        private static bool IsRedirectCode(HttpStatusCode statusCode) => statusCode switch
+        {
+            HttpStatusCode.Found
+            or HttpStatusCode.Moved
+            or HttpStatusCode.MultipleChoices
+            or HttpStatusCode.PermanentRedirect
+            or HttpStatusCode.SeeOther
+            or HttpStatusCode.TemporaryRedirect => true,
+            _ => false
+        };
+
+        // Returns true if the status code is a redirection code and the action requires switching to GET on redirection.
+        // See https://learn.microsoft.com/en-us/dotnet/api/system.net.httpstatuscode
+        private static bool RequestRequiresForceGet(HttpStatusCode statusCode, HttpMethod requestMethod) => statusCode switch
+        {
+            HttpStatusCode.Found
+            or HttpStatusCode.Moved
+            or HttpStatusCode.MultipleChoices => requestMethod == HttpMethod.Post,
+            HttpStatusCode.SeeOther => requestMethod != HttpMethod.Get && requestMethod != HttpMethod.Head,
+            _ => false
+        };
+
+        // Returns true if the status code shows a server or client error and MaximumRetryCount > 0
+        private static bool ShouldRetry(HttpStatusCode statusCode) => (int)statusCode switch
+        {
+            304 or (>= 400 and <= 599) => true,
+            _ => false
+        };
+
+        private static HttpMethod GetHttpMethod(WebRequestMethod method) => method switch
+        {
+            WebRequestMethod.Default or WebRequestMethod.Get => HttpMethod.Get,
+            WebRequestMethod.Delete => HttpMethod.Delete,
+            WebRequestMethod.Head => HttpMethod.Head,
+            WebRequestMethod.Patch => HttpMethod.Patch,
+            WebRequestMethod.Post => HttpMethod.Post,
+            WebRequestMethod.Put => HttpMethod.Put,
+            WebRequestMethod.Options => HttpMethod.Options,
+            WebRequestMethod.Trace => HttpMethod.Trace,
+            _ => new HttpMethod(method.ToString().ToUpperInvariant())
+        };
+
         #endregion Helper Methods
     }
+
+    /// <summary>
+    /// Exception class for webcmdlets to enable returning HTTP error response.
+    /// </summary>
+    public sealed class HttpResponseException : HttpRequestException
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="HttpResponseException"/> class.
+        /// </summary>
+        /// <param name="message">Message for the exception.</param>
+        /// <param name="response">Response from the HTTP server.</param>
+        public HttpResponseException(string message, HttpResponseMessage response) : base(message, inner: null, response.StatusCode)
+        {
+            Response = response;
+        }
+
+        /// <summary>
+        /// HTTP error response.
+        /// </summary>
+        public HttpResponseMessage Response { get; }
+    }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebResponseObject.Common.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebResponseObject.Common.cs
index 98e7c397e45..ace84f480f9 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebResponseObject.Common.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebResponseObject.Common.cs
@@ -1,60 +1,41 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Net.Http;
 using System.Text;
+using System.Threading;
 
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
     /// WebResponseObject.
     /// </summary>
-    public partial class WebResponseObject
+    public class WebResponseObject
     {
         #region Properties
 
         /// <summary>
-        /// Gets or protected sets the response body content.
-        /// </summary>
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public byte[] Content { get; protected set; }
-
-        /// <summary>
-        /// Gets the response status code.
+        /// Gets or sets the BaseResponse property.
         /// </summary>
-        public int StatusCode
-        {
-            get { return (WebResponseHelper.GetStatusCode(BaseResponse)); }
-        }
+        public HttpResponseMessage BaseResponse { get; set; }
 
         /// <summary>
-        /// Gets the response status description.
+        /// Gets or protected sets the response body content.
         /// </summary>
-        public string StatusDescription
-        {
-            get { return (WebResponseHelper.GetStatusDescription(BaseResponse)); }
-        }
+        public byte[]? Content { get; protected set; }
 
-        private MemoryStream _rawContentStream;
         /// <summary>
-        /// Gets the response body content as a <see cref="MemoryStream"/>.
+        /// Gets the Headers property.
         /// </summary>
-        public MemoryStream RawContentStream
-        {
-            get { return (_rawContentStream); }
-        }
+        public Dictionary<string, IEnumerable<string>> Headers => _headers ??= WebResponseHelper.GetHeadersDictionary(BaseResponse);
 
-        /// <summary>
-        /// Gets the length (in bytes) of <see cref="RawContentStream"/>.
-        /// </summary>
-        public long RawContentLength
-        {
-            get { return (RawContentStream == null ? -1 : RawContentStream.Length); }
-        }
+        private Dictionary<string, IEnumerable<string>>? _headers;
 
         /// <summary>
         /// Gets or protected sets the full response content.
@@ -62,104 +43,71 @@ public long RawContentLength
         /// <value>
         /// Full response content, including the HTTP status line, headers, and body.
         /// </value>
-        public string RawContent { get; protected set; }
-
-        #endregion Properties
-
-        #region Methods
+        public string? RawContent { get; protected set; }
 
         /// <summary>
-        /// Reads the response content from the web response.
+        /// Gets the length (in bytes) of <see cref="RawContentStream"/>.
         /// </summary>
-        private void InitializeContent()
-        {
-            this.Content = this.RawContentStream.ToArray();
-        }
-
-        private static bool IsPrintable(char c)
-        {
-            return (char.IsLetterOrDigit(c) || char.IsPunctuation(c) || char.IsSeparator(c) || char.IsSymbol(c) || char.IsWhiteSpace(c));
-        }
+        public long RawContentLength => RawContentStream is null ? -1 : RawContentStream.Length;
 
         /// <summary>
-        /// Returns the string representation of this web response.
+        /// Gets or protected sets the response body content as a <see cref="MemoryStream"/>.
         /// </summary>
-        /// <returns>The string representation of this web response.</returns>
-        public sealed override string ToString()
-        {
-            char[] stringContent = System.Text.Encoding.ASCII.GetChars(Content);
-            for (int counter = 0; counter < stringContent.Length; counter++)
-            {
-                if (!IsPrintable(stringContent[counter]))
-                {
-                    stringContent[counter] = '.';
-                }
-            }
-
-            return new string(stringContent);
-        }
+        public MemoryStream RawContentStream { get; protected set; }
 
-        #endregion Methods
-    }
-
-    // TODO: Merge Partials
+        /// <summary>
+        /// Gets the RelationLink property.
+        /// </summary>
+        public Dictionary<string, string>? RelationLink { get; internal set; }
 
-    /// <summary>
-    /// WebResponseObject.
-    /// </summary>
-    public partial class WebResponseObject
-    {
-        #region Properties
+        /// <summary>
+        /// Gets the response status code.
+        /// </summary>
+        public int StatusCode => WebResponseHelper.GetStatusCode(BaseResponse);
 
         /// <summary>
-        /// Gets or sets the BaseResponse property.
+        /// Gets the response status description.
         /// </summary>
-        public HttpResponseMessage BaseResponse { get; set; }
+        public string StatusDescription => WebResponseHelper.GetStatusDescription(BaseResponse);
 
         /// <summary>
-        /// Gets the Headers property.
+        /// Gets or sets the output file path.
         /// </summary>
-        public Dictionary<string, IEnumerable<string>> Headers
-        {
-            get
-            {
-                if (_headers == null)
-                {
-                    _headers = WebResponseHelper.GetHeadersDictionary(BaseResponse);
-                }
+        public string? OutFile { get; internal set; }
 
-                return _headers;
-            }
-        }
+        #endregion Properties
 
-        private Dictionary<string, IEnumerable<string>> _headers = null;
+        #region Protected Fields
 
         /// <summary>
-        /// Gets the RelationLink property.
+        /// Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.
         /// </summary>
-        public Dictionary<string, string> RelationLink { get; internal set; }
+        protected TimeSpan perReadTimeout;
 
-        #endregion
+        #endregion Protected Fields
 
         #region Constructors
 
         /// <summary>
         /// Initializes a new instance of the <see cref="WebResponseObject"/> class.
         /// </summary>
-        /// <param name="response"></param>
-        public WebResponseObject(HttpResponseMessage response)
-            : this(response, null)
-        { }
+        /// <param name="response">The Http response.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        public WebResponseObject(HttpResponseMessage response, TimeSpan perReadTimeout, CancellationToken cancellationToken) : this(response, null, perReadTimeout, cancellationToken) { }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="WebResponseObject"/> class
         /// with the specified <paramref name="contentStream"/>.
         /// </summary>
-        /// <param name="response"></param>
-        /// <param name="contentStream"></param>
-        public WebResponseObject(HttpResponseMessage response, Stream contentStream)
+        /// <param name="response">Http response.</param>
+        /// <param name="contentStream">The http content stream.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        public WebResponseObject(HttpResponseMessage response, Stream? contentStream, TimeSpan perReadTimeout, CancellationToken cancellationToken)
         {
-            SetResponse(response, contentStream);
+            this.perReadTimeout = perReadTimeout;
+            SetResponse(response, contentStream, cancellationToken);
             InitializeContent();
             InitializeRawContent(response);
         }
@@ -168,50 +116,86 @@ public WebResponseObject(HttpResponseMessage response, Stream contentStream)
 
         #region Methods
 
+        /// <summary>
+        /// Reads the response content from the web response.
+        /// </summary>
+        private void InitializeContent()
+        {
+            Content = RawContentStream.ToArray();
+        }
+
         private void InitializeRawContent(HttpResponseMessage baseResponse)
         {
             StringBuilder raw = ContentHelper.GetRawContentHeader(baseResponse);
 
             // Use ASCII encoding for the RawContent visual view of the content.
-            if (Content.Length > 0)
+            if (Content?.Length > 0)
             {
-                raw.Append(this.ToString());
+                raw.Append(ToString());
             }
 
-            this.RawContent = raw.ToString();
+            RawContent = raw.ToString();
         }
 
-        private void SetResponse(HttpResponseMessage response, Stream contentStream)
+        private static bool IsPrintable(char c) => char.IsLetterOrDigit(c)
+                                                || char.IsPunctuation(c)
+                                                || char.IsSeparator(c)
+                                                || char.IsSymbol(c)
+                                                || char.IsWhiteSpace(c);
+
+        [MemberNotNull(nameof(RawContentStream))]
+        [MemberNotNull(nameof(BaseResponse))]
+        private void SetResponse(HttpResponseMessage response, Stream? contentStream, CancellationToken cancellationToken)
         {
-            if (response == null) { throw new ArgumentNullException(nameof(response)); }
+            ArgumentNullException.ThrowIfNull(response);
 
             BaseResponse = response;
 
-            MemoryStream ms = contentStream as MemoryStream;
-            if (ms != null)
+            if (contentStream is MemoryStream ms)
             {
-                _rawContentStream = ms;
+                RawContentStream = ms;
             }
             else
             {
-                Stream st = contentStream;
-                if (contentStream == null)
-                {
-                    st = StreamHelper.GetResponseStream(response);
-                }
+                Stream st = contentStream ?? StreamHelper.GetResponseStream(response, cancellationToken);
 
-                long contentLength = response.Content.Headers.ContentLength.Value;
+                long contentLength = response.Content.Headers.ContentLength.GetValueOrDefault();
                 if (contentLength <= 0)
                 {
                     contentLength = StreamHelper.DefaultReadBuffer;
                 }
 
                 int initialCapacity = (int)Math.Min(contentLength, StreamHelper.DefaultReadBuffer);
-                _rawContentStream = new WebResponseContentMemoryStream(st, initialCapacity, null);
+                RawContentStream = new WebResponseContentMemoryStream(st, initialCapacity, cmdlet: null, response.Content.Headers.ContentLength.GetValueOrDefault(), perReadTimeout, cancellationToken);
+            }
+
+            // Set the position of the content stream to the beginning
+            RawContentStream.Position = 0;
+        }
+
+        /// <summary>
+        /// Returns the string representation of this web response.
+        /// </summary>
+        /// <returns>The string representation of this web response.</returns>
+        public sealed override string ToString()
+        {
+            if (Content is null)
+            {
+                return string.Empty;
             }
-            // set the position of the content stream to the beginning
-            _rawContentStream.Position = 0;
+
+            char[] stringContent = Encoding.ASCII.GetChars(Content);
+            for (int counter = 0; counter < stringContent.Length; counter++)
+            {
+                if (!IsPrintable(stringContent[counter]))
+                {
+                    stringContent[counter] = '.';
+                }
+            }
+
+            return new string(stringContent);
         }
-        #endregion
+
+        #endregion Methods
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertFromJsonCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertFromJsonCommand.cs
index 0af97b061a9..82e1277e00c 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertFromJsonCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertFromJsonCommand.cs
@@ -32,13 +32,13 @@ public class ConvertFromJsonCommand : Cmdlet
         /// <summary>
         /// Returned data structure is a Hashtable instead a CustomPSObject.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter AsHashtable { get; set; }
 
         /// <summary>
         /// Gets or sets the maximum depth the JSON input is allowed to have. By default, it is 1024.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [ValidateRange(ValidateRangeKind.Positive)]
         public int Depth { get; set; } = 1024;
 
@@ -49,6 +49,12 @@ public class ConvertFromJsonCommand : Cmdlet
         [Parameter]
         public SwitchParameter NoEnumerate { get; set; }
 
+        /// <summary>
+        /// Gets or sets the switch to control how DateTime values are to be parsed as a dotnet object.
+        /// </summary>
+        [Parameter]
+        public JsonDateKind DateKind { get; set; } = JsonDateKind.Default;
+
         #endregion parameters
 
         #region overrides
@@ -86,7 +92,7 @@ protected override void EndProcessing()
                     catch (ArgumentException)
                     {
                         // The first input string does not represent a complete Json Syntax.
-                        // Hence consider the the entire input as a single Json content.
+                        // Hence consider the entire input as a single Json content.
                     }
 
                     if (successfullyConverted)
@@ -113,7 +119,7 @@ protected override void EndProcessing()
         private bool ConvertFromJsonHelper(string input)
         {
             ErrorRecord error = null;
-            object result = JsonObject.ConvertFromJson(input, AsHashtable.IsPresent, Depth, out error);
+            object result = JsonObject.ConvertFromJson(input, AsHashtable.IsPresent, Depth, DateKind, out error);
 
             if (error != null)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertToJsonCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertToJsonCommand.cs
index d15303557eb..173d999b06d 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertToJsonCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/ConvertToJsonCommand.cs
@@ -16,7 +16,8 @@ namespace Microsoft.PowerShell.Commands
     /// This command converts an object to a Json string representation.
     /// </summary>
     [Cmdlet(VerbsData.ConvertTo, "Json", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096925", RemotingCapability = RemotingCapability.None)]
-    public class ConvertToJsonCommand : PSCmdlet
+    [OutputType(typeof(string))]
+    public class ConvertToJsonCommand : PSCmdlet, IDisposable
     {
         /// <summary>
         /// Gets or sets the InputObject property.
@@ -27,15 +28,13 @@ public class ConvertToJsonCommand : PSCmdlet
 
         private int _depth = 2;
 
-        private const int maxDepthAllowed = 100;
-
         private readonly CancellationTokenSource _cancellationSource = new();
 
         /// <summary>
         /// Gets or sets the Depth property.
         /// </summary>
         [Parameter]
-        [ValidateRange(1, int.MaxValue)]
+        [ValidateRange(0, 100)]
         public int Depth
         {
             get { return _depth; }
@@ -78,18 +77,25 @@ public int Depth
         public StringEscapeHandling EscapeHandling { get; set; } = StringEscapeHandling.Default;
 
         /// <summary>
-        /// Prerequisite checks.
+        /// IDisposable implementation, dispose of any disposable resources created by the cmdlet.
+        /// </summary>
+        public void Dispose()
+        {
+            Dispose(disposing: true);
+            GC.SuppressFinalize(this);
+        }
+
+        /// <summary>
+        /// Implementation of IDisposable for both manual Dispose() and finalizer-called disposal of resources.
         /// </summary>
-        protected override void BeginProcessing()
+        /// <param name="disposing">
+        /// Specified as true when Dispose() was called, false if this is called from the finalizer.
+        /// </param>
+        protected virtual void Dispose(bool disposing)
         {
-            if (_depth > maxDepthAllowed)
+            if (disposing)
             {
-                string errorMessage = StringUtil.Format(WebCmdletStrings.ReachedMaximumDepthAllowed, maxDepthAllowed);
-                ThrowTerminatingError(new ErrorRecord(
-                                new InvalidOperationException(errorMessage),
-                                "ReachedMaximumDepthAllowed",
-                                ErrorCategory.InvalidOperation,
-                                null));
+                _cancellationSource.Dispose();
             }
         }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs
index 80d07a54ddf..6571696e5bf 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/HttpKnownHeaderNames.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Collections.Generic;
 
@@ -11,14 +13,22 @@ internal static class HttpKnownHeaderNames
         #region Known_HTTP_Header_Names
 
         // Known HTTP Header Names.
-        // List comes from corefx/System/Net/HttpKnownHeaderNames.cs
+        // List comes from https://github.com/dotnet/runtime/blob/51a8dd5323721b363e61069575511f783e7ea6d3/src/libraries/Common/src/System/Net/HttpKnownHeaderNames.cs
         public const string Accept = "Accept";
         public const string AcceptCharset = "Accept-Charset";
         public const string AcceptEncoding = "Accept-Encoding";
         public const string AcceptLanguage = "Accept-Language";
+        public const string AcceptPatch = "Accept-Patch";
         public const string AcceptRanges = "Accept-Ranges";
+        public const string AccessControlAllowCredentials = "Access-Control-Allow-Credentials";
+        public const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
+        public const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
+        public const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
+        public const string AccessControlExposeHeaders = "Access-Control-Expose-Headers";
+        public const string AccessControlMaxAge = "Access-Control-Max-Age";
         public const string Age = "Age";
         public const string Allow = "Allow";
+        public const string AltSvc = "Alt-Svc";
         public const string Authorization = "Authorization";
         public const string CacheControl = "Cache-Control";
         public const string Connection = "Connection";
@@ -29,6 +39,7 @@ internal static class HttpKnownHeaderNames
         public const string ContentLocation = "Content-Location";
         public const string ContentMD5 = "Content-MD5";
         public const string ContentRange = "Content-Range";
+        public const string ContentSecurityPolicy = "Content-Security-Policy";
         public const string ContentType = "Content-Type";
         public const string Cookie = "Cookie";
         public const string Cookie2 = "Cookie2";
@@ -45,6 +56,7 @@ internal static class HttpKnownHeaderNames
         public const string IfUnmodifiedSince = "If-Unmodified-Since";
         public const string KeepAlive = "Keep-Alive";
         public const string LastModified = "Last-Modified";
+        public const string Link = "Link";
         public const string Location = "Location";
         public const string MaxForwards = "Max-Forwards";
         public const string Origin = "Origin";
@@ -53,6 +65,7 @@ internal static class HttpKnownHeaderNames
         public const string ProxyAuthenticate = "Proxy-Authenticate";
         public const string ProxyAuthorization = "Proxy-Authorization";
         public const string ProxyConnection = "Proxy-Connection";
+        public const string PublicKeyPins = "Public-Key-Pins";
         public const string Range = "Range";
         public const string Referer = "Referer"; // NB: The spelling-mistake "Referer" for "Referrer" must be matched.
         public const string RetryAfter = "Retry-After";
@@ -64,45 +77,49 @@ internal static class HttpKnownHeaderNames
         public const string Server = "Server";
         public const string SetCookie = "Set-Cookie";
         public const string SetCookie2 = "Set-Cookie2";
+        public const string StrictTransportSecurity = "Strict-Transport-Security";
         public const string TE = "TE";
+        public const string TSV = "TSV";
         public const string Trailer = "Trailer";
         public const string TransferEncoding = "Transfer-Encoding";
         public const string Upgrade = "Upgrade";
+        public const string UpgradeInsecureRequests = "Upgrade-Insecure-Requests";
         public const string UserAgent = "User-Agent";
         public const string Vary = "Vary";
         public const string Via = "Via";
         public const string WWWAuthenticate = "WWW-Authenticate";
         public const string Warning = "Warning";
         public const string XAspNetVersion = "X-AspNet-Version";
+        public const string XContentDuration = "X-Content-Duration";
+        public const string XContentTypeOptions = "X-Content-Type-Options";
+        public const string XFrameOptions = "X-Frame-Options";
+        public const string XMSEdgeRef = "X-MSEdge-Ref";
         public const string XPoweredBy = "X-Powered-By";
+        public const string XRequestID = "X-Request-ID";
+        public const string XUACompatible = "X-UA-Compatible";
 
         #endregion Known_HTTP_Header_Names
 
-        private static HashSet<string> s_contentHeaderSet = null;
+        private static readonly HashSet<string> s_contentHeaderSet;
 
-        internal static HashSet<string> ContentHeaders
+        static HttpKnownHeaderNames()
         {
-            get
-            {
-                if (s_contentHeaderSet == null)
-                {
-                    s_contentHeaderSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.Allow);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentDisposition);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentEncoding);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLanguage);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLength);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLocation);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentMD5);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentRange);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentType);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.Expires);
-                    s_contentHeaderSet.Add(HttpKnownHeaderNames.LastModified);
-                }
+            // Thread-safe initialization.
+            s_contentHeaderSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
 
-                return s_contentHeaderSet;
-            }
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.Allow);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentDisposition);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentEncoding);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLanguage);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLength);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentLocation);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentMD5);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentRange);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.ContentType);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.Expires);
+            s_contentHeaderSet.Add(HttpKnownHeaderNames.LastModified);
         }
+
+        internal static HashSet<string> ContentHeaders => s_contentHeaderSet;
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/InvokeWebRequestCommand.CoreClr.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/InvokeWebRequestCommand.CoreClr.cs
index dafcf3b4295..0bcafcf2964 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/InvokeWebRequestCommand.CoreClr.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/InvokeWebRequestCommand.CoreClr.cs
@@ -1,10 +1,13 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.IO;
 using System.Management.Automation;
 using System.Net.Http;
+using System.Threading;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -13,6 +16,7 @@ namespace Microsoft.PowerShell.Commands
     /// This command makes an HTTP or HTTPS request to a web server and returns the results.
     /// </summary>
     [Cmdlet(VerbsLifecycle.Invoke, "WebRequest", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097126", DefaultParameterSetName = "StandardMethod")]
+    [OutputType(typeof(BasicHtmlWebResponseObject))]
     public class InvokeWebRequestCommand : WebRequestPSCmdlet
     {
         #region Virtual Method Overrides
@@ -22,7 +26,7 @@ public class InvokeWebRequestCommand : WebRequestPSCmdlet
         /// </summary>
         public InvokeWebRequestCommand() : base()
         {
-            this._parseRelLink = true;
+            _parseRelLink = true;
         }
 
         /// <summary>
@@ -31,18 +35,27 @@ public InvokeWebRequestCommand() : base()
         /// <param name="response"></param>
         internal override void ProcessResponse(HttpResponseMessage response)
         {
-            if (response == null) { throw new ArgumentNullException(nameof(response)); }
+            ArgumentNullException.ThrowIfNull(response);
+            TimeSpan perReadTimeout = ConvertTimeoutSecondsToTimeSpan(OperationTimeoutSeconds);
+            Stream responseStream = StreamHelper.GetResponseStream(response, _cancelToken.Token);
+            string outFilePath = WebResponseHelper.GetOutFilePath(response, _qualifiedOutFile);
 
-            Stream responseStream = StreamHelper.GetResponseStream(response);
             if (ShouldWriteToPipeline)
             {
-                // creating a MemoryStream wrapper to response stream here to support IsStopping.
-                responseStream = new WebResponseContentMemoryStream(responseStream, StreamHelper.ChunkSize, this);
-                WebResponseObject ro = WebResponseObjectFactory.GetResponseObject(response, responseStream, this.Context);
+                // Creating a MemoryStream wrapper to response stream here to support IsStopping.
+                responseStream = new WebResponseContentMemoryStream(
+                    responseStream,
+                    StreamHelper.ChunkSize,
+                    this,
+                    response.Content.Headers.ContentLength.GetValueOrDefault(),
+                    perReadTimeout,
+                    _cancelToken.Token);
+                WebResponseObject ro = WebResponseHelper.IsText(response) ? new BasicHtmlWebResponseObject(response, responseStream, perReadTimeout, _cancelToken.Token) : new WebResponseObject(response, responseStream, perReadTimeout, _cancelToken.Token);
                 ro.RelationLink = _relationLink;
+                ro.OutFile = outFilePath;
                 WriteObject(ro);
 
-                // use the rawcontent stream from WebResponseObject for further
+                // Use the rawcontent stream from WebResponseObject for further
                 // processing of the stream. This is need because WebResponse's
                 // stream can be used only once.
                 responseStream = ro.RawContentStream;
@@ -51,7 +64,11 @@ internal override void ProcessResponse(HttpResponseMessage response)
 
             if (ShouldSaveToOutFile)
             {
-                StreamHelper.SaveStreamToFile(responseStream, QualifiedOutFile, this, _cancelToken.Token);
+                WriteVerbose($"File Name: {Path.GetFileName(outFilePath)}");
+
+                // ContentLength is always the partial length, while ContentRange is the full length
+                // Without Request.Range set, ContentRange is null and partial length (ContentLength) equals to full length
+                StreamHelper.SaveStreamToFile(responseStream, outFilePath, this, response.Content.Headers.ContentRange?.Length.GetValueOrDefault() ?? response.Content.Headers.ContentLength.GetValueOrDefault(), perReadTimeout, _cancelToken.Token);
             }
         }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs
index 226a981f8a2..c8fed859771 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebProxy.cs
@@ -1,69 +1,65 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Net;
 
 namespace Microsoft.PowerShell.Commands
 {
-    internal class WebProxy : IWebProxy
+    internal sealed class WebProxy : IWebProxy, IEquatable<WebProxy>
     {
-        private ICredentials _credentials;
+        private ICredentials? _credentials;
         private readonly Uri _proxyAddress;
 
         internal WebProxy(Uri address)
         {
-            if (address == null)
-            {
-                throw new ArgumentNullException(nameof(address));
-            }
+            ArgumentNullException.ThrowIfNull(address);
 
             _proxyAddress = address;
         }
 
-        public ICredentials Credentials
+        public override bool Equals(object? obj) => Equals(obj as WebProxy);
+
+        public override int GetHashCode() => HashCode.Combine(_proxyAddress, _credentials, BypassProxyOnLocal);
+
+        public bool Equals(WebProxy? other)
         {
-            get { return _credentials; }
+            if (other is null)
+            {
+                return false;
+            }
 
-            set { _credentials = value; }
+            // _proxyAddress cannot be null as it is set in the constructor
+            return other._credentials == _credentials
+                && _proxyAddress.Equals(other._proxyAddress)
+                && BypassProxyOnLocal == other.BypassProxyOnLocal;
         }
 
-        internal bool BypassProxyOnLocal
+        public ICredentials? Credentials
         {
-            get; set;
+            get => _credentials;
+
+            set => _credentials = value;
         }
 
+        internal bool BypassProxyOnLocal { get; set; }
+
         internal bool UseDefaultCredentials
         {
-            get
-            {
-                return _credentials == CredentialCache.DefaultCredentials;
-            }
+            get => _credentials == CredentialCache.DefaultCredentials;
 
-            set
-            {
-                _credentials = value ? CredentialCache.DefaultCredentials : null;
-            }
+            set => _credentials = value ? CredentialCache.DefaultCredentials : null;
         }
 
         public Uri GetProxy(Uri destination)
         {
-            if (destination == null)
-            {
-                throw new ArgumentNullException(nameof(destination));
-            }
+            ArgumentNullException.ThrowIfNull(destination);
 
-            if (destination.IsLoopback)
-            {
-                return destination;
-            }
-
-            return _proxyAddress;
+            return destination.IsLoopback ? destination : _proxyAddress;
         }
 
-        public bool IsBypassed(Uri host)
-        {
-            return host.IsLoopback;
-        }
+        public bool IsBypassed(Uri host) => host.IsLoopback;
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseHelper.CoreClr.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseHelper.CoreClr.cs
index dc2f734d6bd..377a7e56265 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseHelper.CoreClr.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseHelper.CoreClr.cs
@@ -1,20 +1,19 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Collections.Generic;
 using System.Globalization;
+using System.IO;
 using System.Net.Http;
 
 namespace Microsoft.PowerShell.Commands
 {
     internal static class WebResponseHelper
     {
-        internal static string GetCharacterSet(HttpResponseMessage response)
-        {
-            string characterSet = response.Content.Headers.ContentType.CharSet;
-            return characterSet;
-        }
+        internal static string? GetCharacterSet(HttpResponseMessage response) => response.Content.Headers.ContentType?.CharSet;
 
         internal static Dictionary<string, IEnumerable<string>> GetHeadersDictionary(HttpResponseMessage response)
         {
@@ -27,7 +26,7 @@ internal static Dictionary<string, IEnumerable<string>> GetHeadersDictionary(Htt
             // HttpResponseMessage.Content.Headers. The remaining headers are in HttpResponseMessage.Headers.
             // The keys in both should be unique with no duplicates between them.
             // Added for backwards compatibility with PowerShell 5.1 and earlier.
-            if (response.Content != null)
+            if (response.Content is not null)
             {
                 foreach (var entry in response.Content.Headers)
                 {
@@ -38,29 +37,24 @@ internal static Dictionary<string, IEnumerable<string>> GetHeadersDictionary(Htt
             return headers;
         }
 
-        internal static string GetProtocol(HttpResponseMessage response)
+        internal static string GetOutFilePath(HttpResponseMessage response, string qualifiedOutFile)
         {
-            string protocol = string.Format(CultureInfo.InvariantCulture,
-                                            "HTTP/{0}", response.Version);
-            return protocol;
-        }
+            // Get file name from last segment of Uri
+            string? lastUriSegment = System.Net.WebUtility.UrlDecode(response.RequestMessage?.RequestUri?.Segments[^1]);
 
-        internal static int GetStatusCode(HttpResponseMessage response)
-        {
-            int statusCode = (int)response.StatusCode;
-            return statusCode;
+            return Directory.Exists(qualifiedOutFile) ? Path.Join(qualifiedOutFile, lastUriSegment) : qualifiedOutFile;
         }
 
-        internal static string GetStatusDescription(HttpResponseMessage response)
-        {
-            string statusDescription = response.StatusCode.ToString();
-            return statusDescription;
-        }
+        internal static string GetProtocol(HttpResponseMessage response) => string.Create(CultureInfo.InvariantCulture, $"HTTP/{response.Version}");
+
+        internal static int GetStatusCode(HttpResponseMessage response) => (int)response.StatusCode;
+
+        internal static string GetStatusDescription(HttpResponseMessage response) => response.StatusCode.ToString();
 
         internal static bool IsText(HttpResponseMessage response)
         {
             // ContentType may not exist in response header.
-            string contentType = response.Content.Headers.ContentType?.MediaType;
+            string? contentType = ContentHelper.GetContentType(response);
             return ContentHelper.IsText(contentType);
         }
     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseObjectFactory.CoreClr.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseObjectFactory.CoreClr.cs
deleted file mode 100644
index c4371515fe7..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/CoreCLR/WebResponseObjectFactory.CoreClr.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.IO;
-using System.Management.Automation;
-using System.Net.Http;
-
-namespace Microsoft.PowerShell.Commands
-{
-    internal static class WebResponseObjectFactory
-    {
-        internal static WebResponseObject GetResponseObject(HttpResponseMessage response, Stream responseStream, ExecutionContext executionContext)
-        {
-            WebResponseObject output;
-            if (WebResponseHelper.IsText(response))
-            {
-                output = new BasicHtmlWebResponseObject(response, responseStream);
-            }
-            else
-            {
-                output = new WebResponseObject(response, responseStream);
-            }
-
-            return (output);
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObject.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObject.cs
index b8f7d252711..5ac4adfbb64 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObject.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObject.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System.Collections.Generic;
 
 namespace Microsoft.PowerShell.Commands
@@ -11,22 +13,22 @@ namespace Microsoft.PowerShell.Commands
     public class FormObject
     {
         /// <summary>
-        /// Gets or private sets the Id property.
+        /// Gets the Id property.
         /// </summary>
         public string Id { get; }
 
         /// <summary>
-        /// Gets or private sets the Method property.
+        /// Gets the Method property.
         /// </summary>
         public string Method { get; }
 
         /// <summary>
-        /// Gets or private sets the Action property.
+        /// Gets the Action property.
         /// </summary>
         public string Action { get; }
 
         /// <summary>
-        /// Gets or private sets the Fields property.
+        /// Gets the Fields property.
         /// </summary>
         public Dictionary<string, string> Fields { get; }
 
@@ -46,8 +48,7 @@ public FormObject(string id, string method, string action)
 
         internal void AddField(string key, string value)
         {
-            string test;
-            if (key != null && !Fields.TryGetValue(key, out test))
+            if (key is not null && !Fields.TryGetValue(key, out string? _))
             {
                 Fields[key] = value;
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObjectCollection.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObjectCollection.cs
index 9072e431cae..5f923558185 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObjectCollection.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/FormObjectCollection.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Collections.ObjectModel;
 
@@ -16,11 +18,11 @@ public class FormObjectCollection : Collection<FormObject>
         /// </summary>
         /// <param name="key"></param>
         /// <returns></returns>
-        public FormObject this[string key]
+        public FormObject? this[string key]
         {
             get
             {
-                FormObject form = null;
+                FormObject? form = null;
                 foreach (FormObject f in this)
                 {
                     if (string.Equals(key, f.Id, StringComparison.OrdinalIgnoreCase))
@@ -30,7 +32,7 @@ public FormObject this[string key]
                     }
                 }
 
-                return (form);
+                return form;
             }
         }
     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonDateKind.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonDateKind.cs
new file mode 100644
index 00000000000..2fed27128a6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonDateKind.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// Enums for ConvertFrom-Json -DateKind parameter.
+    /// </summary>
+    public enum JsonDateKind
+    {
+        /// <summary>
+        /// DateTime values are returned as a DateTime with the Kind representing the time zone in the raw string.
+        /// </summary>
+        Default,
+
+        /// <summary>
+        /// DateTime values are returned as the Local kind representation of the value.
+        /// </summary>
+        Local,
+
+        /// <summary>
+        /// DateTime values are returned as the UTC kind representation of the value.
+        /// </summary>
+        Utc,
+
+        /// <summary>
+        /// DateTime values are returned as a DateTimeOffset value preserving the timezone information.
+        /// </summary>
+        Offset,
+
+        /// <summary>
+        /// DateTime values are returned as raw strings.
+        /// </summary>
+        String,
+    }
+}
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs
index 9f1d2b1c8a2..6506f2bd2ce 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs
@@ -8,8 +8,8 @@
 using System.Globalization;
 using System.Management.Automation;
 using System.Management.Automation.Language;
+using System.Numerics;
 using System.Reflection;
-using System.Text.RegularExpressions;
 using System.Threading;
 
 using Newtonsoft.Json;
@@ -98,7 +98,7 @@ public ConvertToJsonContext(
             }
         }
 
-        private class DuplicateMemberHashSet : HashSet<string>
+        private sealed class DuplicateMemberHashSet : HashSet<string>
         {
             public DuplicateMemberHashSet(int capacity)
                 : base(capacity, StringComparer.OrdinalIgnoreCase)
@@ -151,35 +151,68 @@ public static object ConvertFromJson(string input, bool returnHashtable, out Err
         /// if the <paramref name="returnHashtable"/> parameter is true.</returns>
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Preferring Json over JSON")]
         public static object ConvertFromJson(string input, bool returnHashtable, int? maxDepth, out ErrorRecord error)
+            => ConvertFromJson(input, returnHashtable, maxDepth, jsonDateKind: JsonDateKind.Default, out error);
+
+        /// <summary>
+        /// Convert a JSON string back to an object of type <see cref="System.Management.Automation.PSObject"/> or
+        /// <see cref="System.Collections.Hashtable"/> depending on parameter <paramref name="returnHashtable"/>.
+        /// </summary>
+        /// <param name="input">The JSON text to convert.</param>
+        /// <param name="returnHashtable">True if the result should be returned as a <see cref="System.Collections.Hashtable"/>
+        /// instead of a <see cref="System.Management.Automation.PSObject"/>.</param>
+        /// <param name="maxDepth">The max depth allowed when deserializing the json input. Set to null for no maximum.</param>
+        /// <param name="jsonDateKind">Controls how DateTime values are to be converted.</param>
+        /// <param name="error">An error record if the conversion failed.</param>
+        /// <returns>A <see cref="System.Management.Automation.PSObject"/> or a <see cref="System.Collections.Hashtable"/>
+        /// if the <paramref name="returnHashtable"/> parameter is true.</returns>
+        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Preferring Json over JSON")]
+        internal static object ConvertFromJson(string input, bool returnHashtable, int? maxDepth, JsonDateKind jsonDateKind, out ErrorRecord error)
         {
-            if (input == null)
+            ArgumentNullException.ThrowIfNull(input);
+
+            DateParseHandling dateParseHandling;
+            DateTimeZoneHandling dateTimeZoneHandling;
+            switch (jsonDateKind)
             {
-                throw new ArgumentNullException(nameof(input));
+                case JsonDateKind.Default:
+                    dateParseHandling = DateParseHandling.DateTime;
+                    dateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
+                    break;
+
+                case JsonDateKind.Local:
+                    dateParseHandling = DateParseHandling.DateTime;
+                    dateTimeZoneHandling = DateTimeZoneHandling.Local;
+                    break;
+
+                case JsonDateKind.Utc:
+                    dateParseHandling = DateParseHandling.DateTime;
+                    dateTimeZoneHandling = DateTimeZoneHandling.Utc;
+                    break;
+
+                case JsonDateKind.Offset:
+                    dateParseHandling = DateParseHandling.DateTimeOffset;
+                    dateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
+                    break;
+
+                case JsonDateKind.String:
+                    dateParseHandling = DateParseHandling.None;
+                    dateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
+                    break;
+
+                default:
+                    throw new ArgumentException($"Unknown JsonDateKind value requested '{jsonDateKind}'");
             }
 
             error = null;
             try
             {
-                // JsonConvert.DeserializeObject does not throw an exception when an invalid Json array is passed.
-                // This issue is being tracked by https://github.com/JamesNK/Newtonsoft.Json/issues/1930.
-                // To work around this, we need to identify when input is a Json array, and then try to parse it via JArray.Parse().
-
-                // If input starts with '[' (ignoring white spaces).
-                if (Regex.Match(input, @"^\s*\[").Success)
-                {
-                    // JArray.Parse() will throw a JsonException if the array is invalid.
-                    // This will be caught by the catch block below, and then throw an
-                    // ArgumentException - this is done to have same behavior as the JavaScriptSerializer.
-                    JArray.Parse(input);
-
-                    // Please note that if the Json array is valid, we don't do anything,
-                    // we just continue the deserialization.
-                }
-
                 var obj = JsonConvert.DeserializeObject(
                     input,
                     new JsonSerializerSettings
                     {
+                        DateParseHandling = dateParseHandling,
+                        DateTimeZoneHandling = dateTimeZoneHandling,
+
                         // This TypeNameHandling setting is required to be secure.
                         TypeNameHandling = TypeNameHandling.None,
                         MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
@@ -255,11 +288,11 @@ private static PSObject PopulateFromJDictionary(JObject entries, DuplicateMember
                     return null;
                 }
 
-                // Array
                 switch (entry.Value)
                 {
                     case JArray list:
                         {
+                            // Array
                             var listResult = PopulateFromJArray(list, out error);
                             if (error != null)
                             {
@@ -299,52 +332,51 @@ private static ICollection<object> PopulateFromJArray(JArray list, out ErrorReco
         {
             error = null;
             var result = new object[list.Count];
+            var i = 0;
 
-            for (var index = 0; index < list.Count; index++)
+            foreach (var element in list)
             {
-                var element = list[index];
                 switch (element)
                 {
                     case JArray subList:
+                        // Array
+                        result[i++] = PopulateFromJArray(subList, out error);
+                        if (error != null)
                         {
-                            // Array
-                            var listResult = PopulateFromJArray(subList, out error);
-                            if (error != null)
-                            {
-                                return null;
-                            }
-
-                            result[index] = listResult;
-                            break;
+                            return null;
                         }
+
+                        break;
+
                     case JObject dic:
+                        // Dictionary
+                        result[i++] = PopulateFromJDictionary(dic, new DuplicateMemberHashSet(dic.Count), out error);
+                        if (error != null)
                         {
-                            // Dictionary
-                            var dicResult = PopulateFromJDictionary(dic, new DuplicateMemberHashSet(dic.Count), out error);
-                            if (error != null)
-                            {
-                                return null;
-                            }
-
-                            result[index] = dicResult;
-                            break;
+                            return null;
                         }
+
+                        break;
+
                     case JValue value:
+                        if (value.Type != JTokenType.Comment)
                         {
-                            result[index] = value.Value;
-                            break;
+                            result[i++] = value.Value;
                         }
+
+                        break;
                 }
             }
 
-            return result;
+            // In the common case of not having any comments, return the original array, otherwise create a sliced copy.
+            return i == list.Count ? result : result[..i];
         }
 
         // This function is a clone of PopulateFromDictionary using JObject as an input.
         private static Hashtable PopulateHashTableFromJDictionary(JObject entries, out ErrorRecord error)
         {
             error = null;
-            Hashtable result = new(entries.Count);
+            OrderedHashtable result = new(entries.Count);
             foreach (var entry in entries)
             {
                 // Case sensitive duplicates should normally not occur since JsonConvert.DeserializeObject
@@ -402,46 +434,44 @@ private static ICollection<object> PopulateHashTableFromJArray(JArray list, out
         {
             error = null;
             var result = new object[list.Count];
+            var i = 0;
 
-            for (var index = 0; index < list.Count; index++)
+            foreach (var element in list)
             {
-                var element = list[index];
-
                 switch (element)
                 {
-                    case JArray array:
+                    case JArray subList:
+                        // Array
+                        result[i++] = PopulateHashTableFromJArray(subList, out error);
+                        if (error != null)
                         {
-                            // Array
-                            var listResult = PopulateHashTableFromJArray(array, out error);
-                            if (error != null)
-                            {
-                                return null;
-                            }
-
-                            result[index] = listResult;
-                            break;
+                            return null;
                         }
+
+                        break;
+
                     case JObject dic:
+                        // Dictionary
+                        result[i++] = PopulateHashTableFromJDictionary(dic, out error);
+                        if (error != null)
                         {
-                            // Dictionary
-                            var dicResult = PopulateHashTableFromJDictionary(dic, out error);
-                            if (error != null)
-                            {
-                                return null;
-                            }
-
-                            result[index] = dicResult;
-                            break;
+                            return null;
                         }
+
+                        break;
+
                     case JValue value:
+                        if (value.Type != JTokenType.Comment)
                         {
-                            result[index] = value.Value;
-                            break;
+                            result[i++] = value.Value;
                         }
+
+                        break;
                 }
             }
 
-            return result;
+            // In the common case of not having any comments, return the original array, otherwise create a sliced copy.
+            return i == list.Count ? result : result[..i];
         }
 
         #endregion ConvertFromJson
@@ -530,7 +560,8 @@ private static object ProcessValue(object obj, int currentDepth, in ConvertToJso
                     || obj is Uri
                     || obj is double
                     || obj is float
-                    || obj is decimal)
+                    || obj is decimal
+                    || obj is BigInteger)
             {
                 rv = obj;
             }
@@ -542,7 +573,7 @@ private static object ProcessValue(object obj, int currentDepth, in ConvertToJso
             {
                 Type t = obj.GetType();
 
-                if (t.IsPrimitive)
+                if (t.IsPrimitive || (t.IsEnum && ExperimentalFeature.IsEnabled(ExperimentalFeature.PSSerializeJSONLongEnumAsNumber)))
                 {
                     rv = obj;
                 }
@@ -551,7 +582,7 @@ private static object ProcessValue(object obj, int currentDepth, in ConvertToJso
                     // Win8:378368 Enums based on System.Int64 or System.UInt64 are not JSON-serializable
                     // because JavaScript does not support the necessary precision.
                     Type enumUnderlyingType = Enum.GetUnderlyingType(obj.GetType());
-                    if (enumUnderlyingType.Equals(typeof(Int64)) || enumUnderlyingType.Equals(typeof(UInt64)))
+                    if (enumUnderlyingType.Equals(typeof(long)) || enumUnderlyingType.Equals(typeof(ulong)))
                     {
                         rv = obj.ToString();
                     }
@@ -590,15 +621,13 @@ private static object ProcessValue(object obj, int currentDepth, in ConvertToJso
                     }
                     else
                     {
-                        IDictionary dict = obj as IDictionary;
-                        if (dict != null)
+                        if (obj is IDictionary dict)
                         {
                             rv = ProcessDictionary(dict, currentDepth, in context);
                         }
                         else
                         {
-                            IEnumerable enumerable = obj as IEnumerable;
-                            if (enumerable != null)
+                            if (obj is IEnumerable enumerable)
                             {
                                 rv = ProcessEnumerable(enumerable, currentDepth, in context);
                             }
@@ -633,7 +662,7 @@ private static object ProcessValue(object obj, int currentDepth, in ConvertToJso
         /// </returns>
         private static object AddPsProperties(object psObj, object obj, int depth, bool isPurePSObj, bool isCustomObj, in ConvertToJsonContext context)
         {
-            if (!(psObj is PSObject pso))
+            if (psObj is not PSObject pso)
             {
                 return obj;
             }
@@ -645,9 +674,8 @@ private static object AddPsProperties(object psObj, object obj, int depth, bool
             }
 
             bool wasDictionary = true;
-            IDictionary dict = obj as IDictionary;
 
-            if (dict == null)
+            if (obj is not IDictionary dict)
             {
                 wasDictionary = false;
                 dict = new Dictionary<string, object>();
@@ -678,6 +706,12 @@ private static object AddPsProperties(object psObj, object obj, int depth, bool
         /// <param name="context">The context for the operation.</param>
         private static void AppendPsProperties(PSObject psObj, IDictionary receiver, int depth, bool isCustomObject, in ConvertToJsonContext context)
         {
+            // if the psObj is a DateTime or String type, we don't serialize any extended or adapted properties
+            if (psObj.BaseObject is string || psObj.BaseObject is DateTime)
+            {
+                return;
+            }
+
             // serialize only Extended and Adapted properties..
             PSMemberInfoCollection<PSPropertyInfo> srcPropertiesToSearch =
                 new PSMemberInfoIntegratingCollection<PSPropertyInfo>(psObj,
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/PSUserAgent.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/PSUserAgent.cs
index 2ea29e73fa3..1a19d6b0457 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/PSUserAgent.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/PSUserAgent.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Globalization;
 using System.Management.Automation;
@@ -14,112 +16,39 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     public static class PSUserAgent
     {
-        private static string s_windowsUserAgent;
+        private static string? s_windowsUserAgent;
 
-        internal static string UserAgent
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "{0} ({1}; {2}; {3}) {4}",
-                    Compatibility, PlatformName, OS, Culture, App);
-                return (userAgent);
-            }
-        }
+        // Format the user-agent string from the various component parts
+        internal static string UserAgent => string.Create(CultureInfo.InvariantCulture, $"{Compatibility} ({PlatformName}; {OS}; {Culture}) {App}");
 
         /// <summary>
         /// Useragent string for InternetExplorer (9.0).
         /// </summary>
-        public static string InternetExplorer
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "{0} (compatible; MSIE 9.0; {1}; {2}; {3})",
-                    Compatibility, PlatformName, OS, Culture);
-                return (userAgent);
-            }
-        }
+        public static string InternetExplorer => string.Create(CultureInfo.InvariantCulture, $"{Compatibility} (compatible; MSIE 9.0; {PlatformName}; {OS}; {Culture})");
 
         /// <summary>
         /// Useragent string for Firefox (4.0).
         /// </summary>
-        public static string FireFox
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "{0} ({1}; {2}; {3}) Gecko/20100401 Firefox/4.0",
-                    Compatibility, PlatformName, OS, Culture);
-                return (userAgent);
-            }
-        }
+        public static string FireFox => string.Create(CultureInfo.InvariantCulture, $"{Compatibility} ({PlatformName}; {OS}; {Culture}) Gecko/20100401 Firefox/4.0");
 
         /// <summary>
         /// Useragent string for Chrome (7.0).
         /// </summary>
-        public static string Chrome
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "{0} ({1}; {2}; {3}) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/7.0.500.0 Safari/534.6",
-                    Compatibility, PlatformName, OS, Culture);
-                return (userAgent);
-            }
-        }
+        public static string Chrome => string.Create(CultureInfo.InvariantCulture, $"{Compatibility} ({PlatformName}; {OS}; {Culture}) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/7.0.500.0 Safari/534.6");
 
         /// <summary>
         /// Useragent string for Opera (9.0).
         /// </summary>
-        public static string Opera
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "Opera/9.70 ({0}; {1}; {2}) Presto/2.2.1",
-                    PlatformName, OS, Culture);
-                return (userAgent);
-            }
-        }
+        public static string Opera => string.Create(CultureInfo.InvariantCulture, $"Opera/9.70 ({PlatformName}; {OS}; {Culture}) Presto/2.2.1");
 
         /// <summary>
         /// Useragent string for Safari (5.0).
         /// </summary>
-        public static string Safari
-        {
-            get
-            {
-                // format the user-agent string from the various component parts
-                string userAgent = string.Format(CultureInfo.InvariantCulture,
-                    "{0} ({1}; {2}; {3}) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16",
-                    Compatibility, PlatformName, OS, Culture);
-                return (userAgent);
-            }
-        }
+        public static string Safari => string.Create(CultureInfo.InvariantCulture, $"{Compatibility} ({PlatformName}; {OS}; {Culture}) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16");
 
-        internal static string Compatibility
-        {
-            get
-            {
-                return ("Mozilla/5.0");
-            }
-        }
+        internal static string Compatibility => "Mozilla/5.0";
 
-        internal static string App
-        {
-            get
-            {
-                string app = string.Format(CultureInfo.InvariantCulture,
-                    "PowerShell/{0}", PSVersionInfo.PSVersion);
-                return (app);
-            }
-        }
+        internal static string App => string.Create(CultureInfo.InvariantCulture, $"PowerShell/{PSVersionInfo.PSVersion}");
 
         internal static string PlatformName
         {
@@ -127,10 +56,10 @@ internal static string PlatformName
             {
                 if (Platform.IsWindows)
                 {
-                    // only generate the windows user agent once
-                    if (s_windowsUserAgent == null)
+                    // Only generate the windows user agent once
+                    if (s_windowsUserAgent is null)
                     {
-                        // find the version in the windows operating system description
+                        // Find the version in the windows operating system description
                         Regex pattern = new(@"\d+(\.\d+)+");
                         string versionText = pattern.Match(OS).Value;
                         Version windowsPlatformversion = new(versionText);
@@ -149,27 +78,15 @@ internal static string PlatformName
                 }
                 else
                 {
-                    // unknown/unsupported platform
+                    // Unknown/unsupported platform
                     Diagnostics.Assert(false, "Unable to determine Operating System Platform");
                     return string.Empty;
                 }
             }
         }
 
-        internal static string OS
-        {
-            get
-            {
-                return RuntimeInformation.OSDescription.Trim();
-            }
-        }
+        internal static string OS => RuntimeInformation.OSDescription.Trim();
 
-        internal static string Culture
-        {
-            get
-            {
-                return (CultureInfo.CurrentCulture.Name);
-            }
-        }
+        internal static string Culture => CultureInfo.CurrentCulture.Name;
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs
index 43b625311b9..d24961834b6 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/StreamHelper.cs
@@ -1,9 +1,11 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
+using System.Buffers;
 using System.IO;
-using System.IO.Compression;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Net.Http;
@@ -20,70 +22,50 @@ namespace Microsoft.PowerShell.Commands
     /// this class as a wrapper to MemoryStream to lazily initialize. Otherwise, the
     /// content will unnecessarily be read even if there are no consumers for it.
     /// </summary>
-    internal class WebResponseContentMemoryStream : MemoryStream
+    internal sealed class WebResponseContentMemoryStream : MemoryStream
     {
         #region Data
 
+        private readonly long? _contentLength;
         private readonly Stream _originalStreamToProxy;
+        private readonly Cmdlet? _ownerCmdlet;
+        private readonly CancellationToken _cancellationToken;
+        private readonly TimeSpan _perReadTimeout;
         private bool _isInitialized = false;
-        private readonly Cmdlet _ownerCmdlet;
 
-        #endregion
+        #endregion Data
 
         #region Constructors
         /// <summary>
         /// Initializes a new instance of the <see cref="WebResponseContentMemoryStream"/> class.
         /// </summary>
-        /// <param name="stream"></param>
-        /// <param name="initialCapacity"></param>
+        /// <param name="stream">Response stream.</param>
+        /// <param name="initialCapacity">Presize the memory stream.</param>
         /// <param name="cmdlet">Owner cmdlet if any.</param>
-        internal WebResponseContentMemoryStream(Stream stream, int initialCapacity, Cmdlet cmdlet)
-            : base(initialCapacity)
+        /// <param name="contentLength">Expected download size in Bytes.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
+        /// <param name="cancellationToken">Cancellation token.</param>
+        internal WebResponseContentMemoryStream(Stream stream, int initialCapacity, Cmdlet? cmdlet, long? contentLength, TimeSpan perReadTimeout, CancellationToken cancellationToken) : base(initialCapacity)
         {
+            this._contentLength = contentLength;
             _originalStreamToProxy = stream;
             _ownerCmdlet = cmdlet;
+            _cancellationToken = cancellationToken;
+            _perReadTimeout = perReadTimeout;
         }
-        #endregion
+        #endregion Constructors
 
         /// <summary>
         /// </summary>
-        public override bool CanRead
-        {
-            get
-            {
-                return true;
-            }
-        }
+        public override bool CanRead => true;
 
         /// <summary>
         /// </summary>
-        public override bool CanSeek
-        {
-            get
-            {
-                return true;
-            }
-        }
+        public override bool CanSeek => true;
 
         /// <summary>
         /// </summary>
-        public override bool CanTimeout
-        {
-            get
-            {
-                return base.CanTimeout;
-            }
-        }
-
-        /// <summary>
-        /// </summary>
-        public override bool CanWrite
-        {
-            get
-            {
-                return true;
-            }
-        }
+        public override bool CanWrite => true;
 
         /// <summary>
         /// </summary>
@@ -104,7 +86,7 @@ public override long Length
         /// <returns></returns>
         public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
         {
-            Initialize();
+            Initialize(cancellationToken);
             return base.CopyToAsync(destination, bufferSize, cancellationToken);
         }
 
@@ -129,7 +111,7 @@ public override int Read(byte[] buffer, int offset, int count)
         /// <returns></returns>
         public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
         {
-            Initialize();
+            Initialize(cancellationToken);
             return base.ReadAsync(buffer, offset, count, cancellationToken);
         }
 
@@ -180,7 +162,7 @@ public override void Write(byte[] buffer, int offset, int count)
         /// <returns></returns>
         public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
         {
-            Initialize();
+            Initialize(cancellationToken);
             return base.WriteAsync(buffer, offset, count, cancellationToken);
         }
 
@@ -209,23 +191,39 @@ protected override void Dispose(bool disposing)
             base.Dispose(disposing);
         }
 
-        /// <summary>
-        /// </summary>
-        private void Initialize()
+        private void Initialize(CancellationToken cancellationToken = default)
         {
-            if (_isInitialized) { return; }
+            if (_isInitialized)
+            {
+                return;
+            }
+
+            if (cancellationToken == default)
+            {
+                cancellationToken = _cancellationToken;
+            }
 
             _isInitialized = true;
             try
             {
-                long totalLength = 0;
+                long totalRead = 0;
                 byte[] buffer = new byte[StreamHelper.ChunkSize];
                 ProgressRecord record = new(StreamHelper.ActivityId, WebCmdletStrings.ReadResponseProgressActivity, "statusDescriptionPlaceholder");
-                for (int read = 1; read > 0; totalLength += read)
+                string totalDownloadSize = _contentLength is null ? "???" : Utils.DisplayHumanReadableFileSize((long)_contentLength);
+                for (int read = 1; read > 0; totalRead += read)
                 {
-                    if (_ownerCmdlet != null)
+                    if (_ownerCmdlet is not null)
                     {
-                        record.StatusDescription = StringUtil.Format(WebCmdletStrings.ReadResponseProgressStatus, totalLength);
+                        record.StatusDescription = StringUtil.Format(
+                            WebCmdletStrings.ReadResponseProgressStatus,
+                            Utils.DisplayHumanReadableFileSize(totalRead),
+                            totalDownloadSize);
+
+                        if (_contentLength > 0)
+                        {
+                            record.PercentComplete = Math.Min((int)(totalRead * 100 / (long)_contentLength), 100);
+                        }
+
                         _ownerCmdlet.WriteProgress(record);
 
                         if (_ownerCmdlet.IsStopping)
@@ -234,7 +232,7 @@ private void Initialize()
                         }
                     }
 
-                    read = _originalStreamToProxy.Read(buffer, 0, buffer.Length);
+                    read = _originalStreamToProxy.ReadAsync(buffer.AsMemory(), _perReadTimeout, cancellationToken).GetAwaiter().GetResult();
 
                     if (read > 0)
                     {
@@ -242,25 +240,103 @@ private void Initialize()
                     }
                 }
 
-                if (_ownerCmdlet != null)
+                if (_ownerCmdlet is not null)
                 {
-                    record.StatusDescription = StringUtil.Format(WebCmdletStrings.ReadResponseComplete, totalLength);
+                    record.StatusDescription = StringUtil.Format(WebCmdletStrings.ReadResponseComplete, totalRead);
                     record.RecordType = ProgressRecordType.Completed;
                     _ownerCmdlet.WriteProgress(record);
                 }
 
-                // make sure the length is set appropriately
-                base.SetLength(totalLength);
-                base.Seek(0, SeekOrigin.Begin);
+                // Make sure the length is set appropriately
+                base.SetLength(totalRead);
+                Seek(0, SeekOrigin.Begin);
             }
             catch (Exception)
             {
-                base.Dispose();
+                Dispose();
                 throw;
             }
         }
     }
 
+    internal static class StreamTimeoutExtensions
+    {
+        internal static async Task<int> ReadAsync(this Stream stream, Memory<byte> buffer, TimeSpan readTimeout, CancellationToken cancellationToken)
+        {
+            if (readTimeout == Timeout.InfiniteTimeSpan)
+            {
+                return await stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(false);
+            }
+
+            using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+            try
+            {
+                cts.CancelAfter(readTimeout);
+                return await stream.ReadAsync(buffer, cts.Token).ConfigureAwait(false);
+            }
+            catch (TaskCanceledException ex)
+            {
+                if (cts.IsCancellationRequested)
+                {
+                    throw new TimeoutException($"The request was canceled due to the configured OperationTimeout of {readTimeout.TotalSeconds} seconds elapsing", ex);
+                }
+                else
+                {
+                    throw;
+                }
+            }
+        }
+
+        internal static async Task CopyToAsync(this Stream source, Stream destination, TimeSpan perReadTimeout, CancellationToken cancellationToken)
+        {
+            if (perReadTimeout == Timeout.InfiniteTimeSpan)
+            {
+                // No timeout - use fast path
+                await source.CopyToAsync(destination, cancellationToken).ConfigureAwait(false);
+                return;
+            }
+
+            byte[] buffer = ArrayPool<byte>.Shared.Rent(StreamHelper.ChunkSize);
+            CancellationTokenSource cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+            try
+            {
+                while (true)
+                {
+                    if (!cts.TryReset())
+                    {
+                        cts.Dispose();
+                        cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+                    }
+
+                    cts.CancelAfter(perReadTimeout);
+                    int bytesRead = await source.ReadAsync(buffer, cts.Token).ConfigureAwait(false);
+                    if (bytesRead == 0)
+                    {
+                        break;
+                    }
+
+                    await destination.WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken).ConfigureAwait(false);
+                }
+            }
+            catch (TaskCanceledException ex)
+            {
+                if (cts.IsCancellationRequested)
+                {
+                    throw new TimeoutException($"The request was canceled due to the configured OperationTimeout of {perReadTimeout.TotalSeconds} seconds elapsing", ex);
+                }
+                else
+                {
+                    throw;
+                }
+            }
+            finally
+            {
+                cts.Dispose();
+                ArrayPool<byte>.Shared.Return(buffer);
+            }
+        }
+    }
+
     internal static class StreamHelper
     {
         #region Constants
@@ -269,46 +345,61 @@ internal static class StreamHelper
 
         internal const int ChunkSize = 10000;
 
-        // just picked a random number
+        // Just picked a random number
         internal const int ActivityId = 174593042;
 
         #endregion Constants
 
         #region Static Methods
 
-        internal static void WriteToStream(Stream input, Stream output, PSCmdlet cmdlet, CancellationToken cancellationToken)
+        internal static void WriteToStream(Stream input, Stream output, PSCmdlet cmdlet, long? contentLength, TimeSpan perReadTimeout, CancellationToken cancellationToken)
         {
-            if (cmdlet == null)
-            {
-                throw new ArgumentNullException(nameof(cmdlet));
-            }
+            ArgumentNullException.ThrowIfNull(cmdlet);
 
-            Task copyTask = input.CopyToAsync(output, cancellationToken);
+            Task copyTask = input.CopyToAsync(output, perReadTimeout, cancellationToken);
 
+            bool wroteProgress = false;
             ProgressRecord record = new(
                 ActivityId,
                 WebCmdletStrings.WriteRequestProgressActivity,
                 WebCmdletStrings.WriteRequestProgressStatus);
+            string totalDownloadSize = contentLength is null ? "???" : Utils.DisplayHumanReadableFileSize((long)contentLength);
+
             try
             {
-                do
+                while (!copyTask.Wait(1000, cancellationToken))
                 {
-                    record.StatusDescription = StringUtil.Format(WebCmdletStrings.WriteRequestProgressStatus, output.Position);
-                    cmdlet.WriteProgress(record);
+                    record.StatusDescription = StringUtil.Format(
+                        WebCmdletStrings.WriteRequestProgressStatus,
+                        Utils.DisplayHumanReadableFileSize(output.Position),
+                        totalDownloadSize);
 
-                    Task.Delay(1000).Wait(cancellationToken);
-                }
-                while (!copyTask.IsCompleted && !cancellationToken.IsCancellationRequested);
+                    if (contentLength > 0)
+                    {
+                        record.PercentComplete = Math.Min((int)(output.Position * 100 / (long)contentLength), 100);
+                    }
 
-                if (copyTask.IsCompleted)
-                {
-                    record.StatusDescription = StringUtil.Format(WebCmdletStrings.WriteRequestComplete, output.Position);
                     cmdlet.WriteProgress(record);
+                    wroteProgress = true;
                 }
             }
             catch (OperationCanceledException)
             {
             }
+            finally
+            {
+                if (wroteProgress)
+                {
+                    // Write out the completion progress record only if we did render the progress.
+                    record.StatusDescription = StringUtil.Format(
+                        copyTask.IsCompleted
+                            ? WebCmdletStrings.WriteRequestComplete
+                            : WebCmdletStrings.WriteRequestCancelled,
+                        output.Position);
+                    record.RecordType = ProgressRecordType.Completed;
+                    cmdlet.WriteProgress(record);
+                }
+            }
         }
 
         /// <summary>
@@ -318,16 +409,18 @@ internal static void WriteToStream(Stream input, Stream output, PSCmdlet cmdlet,
         /// <param name="stream">Input stream.</param>
         /// <param name="filePath">Output file name.</param>
         /// <param name="cmdlet">Current cmdlet (Invoke-WebRequest or Invoke-RestMethod).</param>
+        /// <param name="contentLength">Expected download size in Bytes.</param>
+        /// <param name="perReadTimeout">Time permitted between reads or Timeout.InfiniteTimeSpan for no timeout.</param>
         /// <param name="cancellationToken">CancellationToken to track the cmdlet cancellation.</param>
-        internal static void SaveStreamToFile(Stream stream, string filePath, PSCmdlet cmdlet, CancellationToken cancellationToken)
+        internal static void SaveStreamToFile(Stream stream, string filePath, PSCmdlet cmdlet, long? contentLength, TimeSpan perReadTimeout, CancellationToken cancellationToken)
         {
             // If the web cmdlet should resume, append the file instead of overwriting.
             FileMode fileMode = cmdlet is WebRequestPSCmdlet webCmdlet && webCmdlet.ShouldResume ? FileMode.Append : FileMode.Create;
             using FileStream output = new(filePath, fileMode, FileAccess.Write, FileShare.Read);
-            WriteToStream(stream, output, cmdlet, cancellationToken);
+            WriteToStream(stream, output, cmdlet, contentLength, perReadTimeout, cancellationToken);
         }
 
-        private static string StreamToString(Stream stream, Encoding encoding)
+        private static string StreamToString(Stream stream, Encoding encoding, TimeSpan perReadTimeout, CancellationToken cancellationToken)
         {
             StringBuilder result = new(capacity: ChunkSize);
             Decoder decoder = encoding.GetDecoder();
@@ -338,157 +431,126 @@ private static string StreamToString(Stream stream, Encoding encoding)
                 useBufferSize = encoding.GetMaxCharCount(10);
             }
 
-            char[] chars = new char[useBufferSize];
-            byte[] bytes = new byte[useBufferSize * 4];
-            int bytesRead = 0;
-            do
+            char[] chars = ArrayPool<char>.Shared.Rent(useBufferSize);
+            byte[] bytes = ArrayPool<byte>.Shared.Rent(useBufferSize * 4);
+            try
             {
-                // Read at most the number of bytes that will fit in the input buffer. The
-                // return value is the actual number of bytes read, or zero if no bytes remain.
-                bytesRead = stream.Read(bytes, 0, useBufferSize * 4);
+                int bytesRead = 0;
+                do
+                {
+                    // Read at most the number of bytes that will fit in the input buffer. The
+                    // return value is the actual number of bytes read, or zero if no bytes remain.
+                    bytesRead = stream.ReadAsync(bytes.AsMemory(), perReadTimeout, cancellationToken).GetAwaiter().GetResult();
 
-                bool completed = false;
-                int byteIndex = 0;
-                int bytesUsed;
-                int charsUsed;
+                    bool completed = false;
+                    int byteIndex = 0;
 
-                while (!completed)
-                {
-                    // If this is the last input data, flush the decoder's internal buffer and state.
-                    bool flush = (bytesRead == 0);
-                    decoder.Convert(bytes, byteIndex, bytesRead - byteIndex,
-                                    chars, 0, useBufferSize, flush,
-                                    out bytesUsed, out charsUsed, out completed);
-
-                    // The conversion produced the number of characters indicated by charsUsed. Write that number
-                    // of characters to our result buffer
-                    result.Append(chars, 0, charsUsed);
-
-                    // Increment byteIndex to the next block of bytes in the input buffer, if any, to convert.
-                    byteIndex += bytesUsed;
-
-                    // The behavior of decoder.Convert changed start .NET 3.1-preview2.
-                    // The change was made in https://github.com/dotnet/coreclr/pull/27229
-                    // The recommendation from .NET team is to not check for 'completed' if 'flush' is false.
-                    // Break out of the loop if all bytes have been read.
-                    if (!flush && bytesRead == byteIndex)
+                    while (!completed)
                     {
-                        break;
+                        // If this is the last input data, flush the decoder's internal buffer and state.
+                        bool flush = bytesRead is 0;
+                        decoder.Convert(bytes, byteIndex, bytesRead - byteIndex, chars, 0, useBufferSize, flush, out int bytesUsed, out int charsUsed, out completed);
+
+                        // The conversion produced the number of characters indicated by charsUsed. Write that number
+                        // of characters to our result buffer
+                        result.Append(chars, 0, charsUsed);
+
+                        // Increment byteIndex to the next block of bytes in the input buffer, if any, to convert.
+                        byteIndex += bytesUsed;
+
+                        // The behavior of decoder.Convert changed start .NET 3.1-preview2.
+                        // The change was made in https://github.com/dotnet/coreclr/pull/27229
+                        // The recommendation from .NET team is to not check for 'completed' if 'flush' is false.
+                        // Break out of the loop if all bytes have been read.
+                        if (!flush && bytesRead == byteIndex)
+                        {
+                            break;
+                        }
                     }
                 }
-            } while (bytesRead != 0);
+                while (bytesRead != 0);
 
-            return result.ToString();
+                return result.ToString();
+            }
+            finally
+            {
+                ArrayPool<char>.Shared.Return(chars);
+                ArrayPool<byte>.Shared.Return(bytes);
+            }
         }
 
-        internal static string DecodeStream(Stream stream, string characterSet, out Encoding encoding)
+        internal static string DecodeStream(Stream stream, string? characterSet, out Encoding encoding, TimeSpan perReadTimeout, CancellationToken cancellationToken)
         {
-            try
-            {
-                encoding = Encoding.GetEncoding(characterSet);
-            }
-            catch (ArgumentException)
+            bool isDefaultEncoding = !TryGetEncoding(characterSet, out encoding);
+
+            string content = StreamToString(stream, encoding, perReadTimeout, cancellationToken);
+            if (isDefaultEncoding)
             {
-                encoding = null;
+                // We only look within the first 1k characters as the meta element and
+                // the xml declaration are at the start of the document
+                string substring = content.Substring(0, Math.Min(content.Length, 1024));
+
+                // Check for a charset attribute on the meta element to override the default
+                Match match = s_metaRegex.Match(substring);
+
+                // Check for a encoding attribute on the xml declaration to override the default
+                if (!match.Success)
+                {
+                    match = s_xmlRegex.Match(substring);
+                }
+
+                if (match.Success)
+                {
+                    characterSet = match.Groups["charset"].Value;
+
+                    if (TryGetEncoding(characterSet, out Encoding localEncoding))
+                    {
+                        stream.Seek(0, SeekOrigin.Begin);
+                        content = StreamToString(stream, localEncoding, perReadTimeout, cancellationToken);
+                        encoding = localEncoding;
+                    }
+                }
             }
 
-            return DecodeStream(stream, ref encoding);
+            return content;
         }
 
-        internal static bool TryGetEncoding(string characterSet, out Encoding encoding)
+        internal static bool TryGetEncoding(string? characterSet, out Encoding encoding)
         {
             bool result = false;
             try
             {
-                encoding = Encoding.GetEncoding(characterSet);
+                encoding = Encoding.GetEncoding(characterSet!);
                 result = true;
             }
             catch (ArgumentException)
             {
-                encoding = null;
+                // Use the default encoding if one wasn't provided
+                encoding = ContentHelper.GetDefaultEncoding();
             }
 
             return result;
         }
 
-        private static readonly Regex s_metaexp = new(
+        private static readonly Regex s_metaRegex = new(
                 @"<meta\s.*[^.><]*charset\s*=\s*[""'\n]?(?<charset>[A-Za-z].[^\s""'\n<>]*)[\s""'\n>]",
-                RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase
+                RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.NonBacktracking
             );
 
-        internal static string DecodeStream(Stream stream, ref Encoding encoding)
-        {
-            bool isDefaultEncoding = false;
-            if (encoding == null)
-            {
-                // Use the default encoding if one wasn't provided
-                encoding = ContentHelper.GetDefaultEncoding();
-                isDefaultEncoding = true;
-            }
-
-            string content = StreamToString(stream, encoding);
-            if (isDefaultEncoding)
-            {
-                do
-                {
-                    // check for a charset attribute on the meta element to override the default.
-                    Match match = s_metaexp.Match(content);
-                    if (match.Success)
-                    {
-                        Encoding localEncoding = null;
-                        string characterSet = match.Groups["charset"].Value;
-
-                        if (TryGetEncoding(characterSet, out localEncoding))
-                        {
-                            stream.Seek(0, SeekOrigin.Begin);
-                            content = StreamToString(stream, localEncoding);
-                            // report the encoding used.
-                            encoding = localEncoding;
-                        }
-                    }
-                } while (false);
-            }
-
-            return content;
-        }
+        private static readonly Regex s_xmlRegex = new(
+                @"<\?xml\s.*[^.><]*encoding\s*=\s*[""'\n]?(?<charset>[A-Za-z].[^\s""'\n<>]*)[\s""'\n>]",
+                RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.NonBacktracking
+            );
 
         internal static byte[] EncodeToBytes(string str, Encoding encoding)
         {
-            if (encoding == null)
-            {
-                // just use the default encoding if one wasn't provided
-                encoding = ContentHelper.GetDefaultEncoding();
-            }
+            // Just use the default encoding if one wasn't provided
+            encoding ??= ContentHelper.GetDefaultEncoding();
 
             return encoding.GetBytes(str);
         }
 
-        internal static byte[] EncodeToBytes(string str)
-        {
-            return EncodeToBytes(str, null);
-        }
-
-        internal static Stream GetResponseStream(HttpResponseMessage response)
-        {
-            Stream responseStream = response.Content.ReadAsStreamAsync().GetAwaiter().GetResult();
-            var contentEncoding = response.Content.Headers.ContentEncoding;
-
-            // HttpClient by default will automatically decompress GZip and Deflate content.
-            // We keep this decompression logic here just in case.
-            if (contentEncoding != null && contentEncoding.Count > 0)
-            {
-                if (contentEncoding.Contains("gzip"))
-                {
-                    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
-                }
-                else if (contentEncoding.Contains("deflate"))
-                {
-                    responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
-                }
-            }
-
-            return responseStream;
-        }
+        internal static Stream GetResponseStream(HttpResponseMessage response, CancellationToken cancellationToken) => response.Content.ReadAsStreamAsync(cancellationToken).GetAwaiter().GetResult();
 
         #endregion Static Methods
     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebCmdletElementCollection.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebCmdletElementCollection.cs
index fada385d4ac..99326898d9f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebCmdletElementCollection.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebCmdletElementCollection.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Management.Automation;
@@ -12,8 +14,7 @@ namespace Microsoft.PowerShell.Commands
     /// </summary>
     public class WebCmdletElementCollection : ReadOnlyCollection<PSObject>
     {
-        internal WebCmdletElementCollection(IList<PSObject> list)
-            : base(list)
+        internal WebCmdletElementCollection(IList<PSObject> list) : base(list)
         {
         }
 
@@ -22,35 +23,23 @@ internal WebCmdletElementCollection(IList<PSObject> list)
         /// </summary>
         /// <param name="nameOrId"></param>
         /// <returns>Found element as PSObject.</returns>
-        public PSObject Find(string nameOrId)
-        {
-            // try Id first
-            PSObject result = FindById(nameOrId) ?? FindByName(nameOrId);
-
-            return (result);
-        }
+        public PSObject? Find(string nameOrId) => FindById(nameOrId) ?? FindByName(nameOrId);
 
         /// <summary>
         /// Finds the element by id.
         /// </summary>
         /// <param name="id"></param>
         /// <returns>Found element as PSObject.</returns>
-        public PSObject FindById(string id)
-        {
-            return Find(id, true);
-        }
+        public PSObject? FindById(string id) => Find(id, findById: true);
 
         /// <summary>
         /// Finds the element by name.
         /// </summary>
         /// <param name="name"></param>
         /// <returns>Found element as PSObject.</returns>
-        public PSObject FindByName(string name)
-        {
-            return Find(name, false);
-        }
+        public PSObject? FindByName(string name) => Find(name, findById: false);
 
-        private PSObject Find(string nameOrId, bool findById)
+        private PSObject? Find(string nameOrId, bool findById)
         {
             foreach (PSObject candidate in this)
             {
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestMethod.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestMethod.cs
index aa7067f1c23..9b90115a1d5 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestMethod.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestMethod.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestSession.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestSession.cs
index ae08babe17f..efee6f3240e 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestSession.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/WebRequestSession.cs
@@ -1,18 +1,48 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System;
 using System.Collections.Generic;
 using System.Net;
+using System.Net.Http;
+using System.Net.Sockets;
+using System.Security.Authentication;
 using System.Security.Cryptography.X509Certificates;
+using System.Threading;
 
 namespace Microsoft.PowerShell.Commands
 {
     /// <summary>
     /// WebRequestSession for holding session infos.
     /// </summary>
-    public class WebRequestSession
+    public class WebRequestSession : IDisposable
     {
+        #region Fields
+
+        private HttpClient? _client;
+        private CookieContainer _cookies;
+        private bool _useDefaultCredentials;
+        private ICredentials? _credentials;
+        private X509CertificateCollection? _certificates;
+        private IWebProxy? _proxy;
+        private int _maximumRedirection;
+        private WebSslProtocol _sslProtocol;
+        private bool _allowAutoRedirect;
+        private bool _skipCertificateCheck;
+        private bool _noProxy;
+        private bool _disposed;
+        private TimeSpan _connectionTimeout;
+        private UnixDomainSocketEndPoint? _unixSocket;
+
+        /// <summary>
+        /// Contains true if an existing HttpClient had to be disposed and recreated since the WebSession was last used.
+        /// </summary>
+        private bool _disposedClient;
+
+        #endregion Fields
+
         /// <summary>
         /// Gets or sets the Header property.
         /// </summary>
@@ -27,27 +57,27 @@ public class WebRequestSession
         /// <summary>
         /// Gets or sets the Cookies property.
         /// </summary>
-        public CookieContainer Cookies { get; set; }
+        public CookieContainer Cookies { get => _cookies; set => SetClassVar(ref _cookies, value); }
 
         #region Credentials
 
         /// <summary>
         /// Gets or sets the UseDefaultCredentials property.
         /// </summary>
-        public bool UseDefaultCredentials { get; set; }
+        public bool UseDefaultCredentials { get => _useDefaultCredentials; set => SetStructVar(ref _useDefaultCredentials, value); }
 
         /// <summary>
         /// Gets or sets the Credentials property.
         /// </summary>
-        public ICredentials Credentials { get; set; }
+        public ICredentials? Credentials { get => _credentials; set => SetClassVar(ref _credentials, value); }
 
         /// <summary>
         /// Gets or sets the Certificates property.
         /// </summary>
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
-        public X509CertificateCollection Certificates { get; set; }
+        public X509CertificateCollection? Certificates { get => _certificates; set => SetClassVar(ref _certificates, value); }
 
-        #endregion
+        #endregion Credentials
 
         /// <summary>
         /// Gets or sets the UserAgent property.
@@ -57,12 +87,23 @@ public class WebRequestSession
         /// <summary>
         /// Gets or sets the Proxy property.
         /// </summary>
-        public IWebProxy Proxy { get; set; }
+        public IWebProxy? Proxy
+        {
+            get => _proxy;
+            set
+            {
+                SetClassVar(ref _proxy, value);
+                if (_proxy is not null)
+                {
+                    NoProxy = false;
+                }
+            }
+        }
 
         /// <summary>
-        /// Gets or sets the RedirectMax property.
+        /// Gets or sets the MaximumRedirection property.
         /// </summary>
-        public int MaximumRedirection { get; set; }
+        public int MaximumRedirection { get => _maximumRedirection; set => SetStructVar(ref _maximumRedirection, value); }
 
         /// <summary>
         /// Gets or sets the count of retries for request failures.
@@ -79,23 +120,44 @@ public class WebRequestSession
         /// </summary>
         public WebRequestSession()
         {
-            // build the headers collection
+            // Build the headers collection
             Headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
             ContentHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
 
-            // build the cookie jar
-            Cookies = new CookieContainer();
+            // Build the cookie jar
+            _cookies = new CookieContainer();
 
-            // initialize the credential and certificate caches
-            UseDefaultCredentials = false;
-            Credentials = null;
-            Certificates = null;
+            // Initialize the credential and certificate caches
+            _useDefaultCredentials = false;
+            _credentials = null;
+            _certificates = null;
 
-            // setup the default UserAgent
+            // Setup the default UserAgent
             UserAgent = PSUserAgent.UserAgent;
 
-            Proxy = null;
-            MaximumRedirection = -1;
+            _proxy = null;
+            _maximumRedirection = -1;
+            _allowAutoRedirect = true;
+        }
+
+        internal WebSslProtocol SslProtocol { set => SetStructVar(ref _sslProtocol, value); }
+
+        internal bool SkipCertificateCheck { set => SetStructVar(ref _skipCertificateCheck, value); }
+
+        internal TimeSpan ConnectionTimeout { set => SetStructVar(ref _connectionTimeout, value); }
+
+        internal UnixDomainSocketEndPoint UnixSocket { set => SetClassVar(ref _unixSocket, value); }
+
+        internal bool NoProxy
+        {
+            set
+            {
+                SetStructVar(ref _noProxy, value);
+                if (_noProxy)
+                {
+                    Proxy = null;
+                }
+            }
         }
 
         /// <summary>
@@ -104,12 +166,150 @@ public WebRequestSession()
         /// <param name="certificate">The certificate to be added.</param>
         internal void AddCertificate(X509Certificate certificate)
         {
-            if (Certificates == null)
+            Certificates ??= new X509CertificateCollection();
+            if (!Certificates.Contains(certificate))
+            {
+                ResetClient();
+                Certificates.Add(certificate);
+            }
+        }
+
+        /// <summary>
+        /// Gets an existing or creates a new HttpClient for this WebRequest session if none currently exists (either because it was never
+        /// created, or because changes to the WebSession properties required the existing HttpClient to be disposed).
+        /// </summary>
+        /// <param name="suppressHttpClientRedirects">True if the caller does not want the HttpClient to ever handle redirections automatically.</param>
+        /// <param name="clientWasReset">Contains true if an existing HttpClient had to be disposed and recreated since the WebSession was last used.</param>
+        /// <returns>The HttpClient cached in the WebSession, based on all current settings.</returns>
+        internal HttpClient GetHttpClient(bool suppressHttpClientRedirects, out bool clientWasReset)
+        {
+            // Do not auto redirect if the caller does not want it, or maximum redirections is 0
+            SetStructVar(ref _allowAutoRedirect, !(suppressHttpClientRedirects || MaximumRedirection == 0));
+
+            clientWasReset = _disposedClient;
+
+            if (_client is null)
+            {
+                _client = CreateHttpClient();
+                _disposedClient = false;
+            }
+
+            return _client;
+        }
+
+        private HttpClient CreateHttpClient()
+        {
+            SocketsHttpHandler handler = new();
+
+            if (_unixSocket is not null)
             {
-                Certificates = new X509CertificateCollection();
+                handler.ConnectCallback = async (context, token) =>
+                {
+                    Socket socket = new(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
+                    await socket.ConnectAsync(_unixSocket).ConfigureAwait(false);
+
+                    return new NetworkStream(socket, ownsSocket: false);
+                };
             }
 
-            Certificates.Add(certificate);
+            handler.CookieContainer = Cookies;
+            handler.AutomaticDecompression = DecompressionMethods.All;
+
+            if (Credentials is not null)
+            {
+                handler.Credentials = Credentials;
+            }
+            else if (UseDefaultCredentials)
+            {
+                handler.Credentials = CredentialCache.DefaultCredentials;
+            }
+
+            if (_noProxy)
+            {
+                handler.UseProxy = false;
+            }
+            else if (Proxy is not null)
+            {
+                handler.Proxy = Proxy;
+            }
+
+            if (Certificates is not null)
+            {
+                handler.SslOptions.ClientCertificates = new X509CertificateCollection(Certificates);
+            }
+
+            if (_skipCertificateCheck)
+            {
+                handler.SslOptions.RemoteCertificateValidationCallback = delegate { return true; };
+            }
+
+            handler.AllowAutoRedirect = _allowAutoRedirect;
+            if (_allowAutoRedirect && MaximumRedirection > 0)
+            {
+                handler.MaxAutomaticRedirections = MaximumRedirection;
+            }
+
+            handler.SslOptions.EnabledSslProtocols = (SslProtocols)_sslProtocol;
+
+            // Check timeout setting (in seconds)
+            return new HttpClient(handler)
+            {
+                Timeout = _connectionTimeout
+            };
+        }
+
+        private void SetClassVar<T>(ref T oldValue, T newValue) where T : class?
+        {
+            if (oldValue != newValue)
+            {
+                ResetClient();
+                oldValue = newValue;
+            }
+        }
+
+        private void SetStructVar<T>(ref T oldValue, T newValue) where T : struct
+        {
+            if (!oldValue.Equals(newValue))
+            {
+                ResetClient();
+                oldValue = newValue;
+            }
+        }
+
+        private void ResetClient()
+        {
+            if (_client is not null)
+            {
+                _disposedClient = true;
+                _client.Dispose();
+                _client = null;
+            }
+        }
+
+        /// <summary>
+        /// Dispose the WebRequestSession.
+        /// </summary>
+        /// <param name="disposing">True when called from Dispose() and false when called from finalizer.</param>
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!_disposed)
+            {
+                if (disposing)
+                {
+                    _client?.Dispose();
+                }
+
+                _disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Dispose the WebRequestSession.
+        /// </summary>
+        public void Dispose()
+        {
+            Dispose(disposing: true);
+            GC.SuppressFinalize(this);
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Write.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Write.cs
index bf907203544..d20d7d8712b 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Write.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/Write.cs
@@ -33,15 +33,11 @@ protected override void ProcessRecord()
             // so we create the DebugRecord here and fill it up with the appropriate InvocationInfo;
             // then, we call the command runtime directly and pass this record to WriteDebug().
             //
-            MshCommandRuntime mshCommandRuntime = this.CommandRuntime as MshCommandRuntime;
-
-            if (mshCommandRuntime != null)
+            if (this.CommandRuntime is MshCommandRuntime mshCommandRuntime)
             {
                 DebugRecord record = new(Message);
 
-                InvocationInfo invocationInfo = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;
-
-                if (invocationInfo != null)
+                if (GetVariableValue(SpecialVariables.MyInvocation) is InvocationInfo invocationInfo)
                 {
                     record.SetInvocationInfo(invocationInfo);
                 }
@@ -81,15 +77,11 @@ protected override void ProcessRecord()
             // so we create the VerboseRecord here and fill it up with the appropriate InvocationInfo;
             // then, we call the command runtime directly and pass this record to WriteVerbose().
             //
-            MshCommandRuntime mshCommandRuntime = this.CommandRuntime as MshCommandRuntime;
-
-            if (mshCommandRuntime != null)
+            if (this.CommandRuntime is MshCommandRuntime mshCommandRuntime)
             {
                 VerboseRecord record = new(Message);
 
-                InvocationInfo invocationInfo = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;
-
-                if (invocationInfo != null)
+                if (GetVariableValue(SpecialVariables.MyInvocation) is InvocationInfo invocationInfo)
                 {
                     record.SetInvocationInfo(invocationInfo);
                 }
@@ -129,15 +121,11 @@ protected override void ProcessRecord()
             // so we create the WarningRecord here and fill it up with the appropriate InvocationInfo;
             // then, we call the command runtime directly and pass this record to WriteWarning().
             //
-            MshCommandRuntime mshCommandRuntime = this.CommandRuntime as MshCommandRuntime;
-
-            if (mshCommandRuntime != null)
+            if (this.CommandRuntime is MshCommandRuntime mshCommandRuntime)
             {
                 WarningRecord record = new(Message);
 
-                InvocationInfo invocationInfo = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;
-
-                if (invocationInfo != null)
+                if (GetVariableValue(SpecialVariables.MyInvocation) is InvocationInfo invocationInfo)
                 {
                     record.SetInvocationInfo(invocationInfo);
                 }
@@ -214,7 +202,7 @@ public class WriteOrThrowErrorCommand : PSCmdlet
         /// <summary>
         /// ErrorRecord.Exception -- if not specified, ErrorRecord.Exception is System.Exception.
         /// </summary>
-        [Parameter(ParameterSetName = "WithException", Mandatory = true)]
+        [Parameter(Position = 0, ParameterSetName = "WithException", Mandatory = true)]
         public Exception Exception { get; set; }
 
         /// <summary>
@@ -232,7 +220,7 @@ public class WriteOrThrowErrorCommand : PSCmdlet
         /// If Exception is specified, this is ErrorRecord.ErrorDetails.Message;
         /// otherwise, the Exception is System.Exception, and this is Exception.Message.
         /// </summary>
-        [Parameter(ParameterSetName = "ErrorRecord", Mandatory = true)]
+        [Parameter(Position = 0, ParameterSetName = "ErrorRecord", Mandatory = true)]
         public ErrorRecord ErrorRecord { get; set; }
 
         /// <summary>
@@ -312,10 +300,7 @@ protected override void ProcessRecord()
             {
                 Exception e = this.Exception;
                 string msg = Message;
-                if (e == null)
-                {
-                    e = new WriteErrorException(msg);
-                }
+                e ??= new WriteErrorException(msg);
 
                 string errid = ErrorId;
                 if (string.IsNullOrEmpty(errid))
@@ -339,10 +324,7 @@ protected override void ProcessRecord()
             string recact = RecommendedAction;
             if (!string.IsNullOrEmpty(recact))
             {
-                if (errorRecord.ErrorDetails == null)
-                {
-                    errorRecord.ErrorDetails = new ErrorDetails(errorRecord.ToString());
-                }
+                errorRecord.ErrorDetails ??= new ErrorDetails(errorRecord.ToString());
 
                 errorRecord.ErrorDetails.RecommendedAction = recact;
             }
@@ -367,8 +349,7 @@ protected override void ProcessRecord()
 
             // 2005/07/14-913791 "write-error output is confusing and misleading"
             // set InvocationInfo to the script not the command
-            InvocationInfo myInvocation = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;
-            if (myInvocation != null)
+            if (GetVariableValue(SpecialVariables.MyInvocation) is InvocationInfo myInvocation)
             {
                 errorRecord.SetInvocationInfo(myInvocation);
                 errorRecord.PreserveInvocationInfoOnce = true;
@@ -428,7 +409,6 @@ public ThrowErrorCommand()
     /// when the user only specifies a string and not
     /// an Exception or ErrorRecord.
     /// </summary>
-    [Serializable]
     public class WriteErrorException : SystemException
     {
         #region ctor
@@ -471,10 +451,11 @@ public WriteErrorException(string message,
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
         /// <returns>Constructed object.</returns>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected WriteErrorException(SerializationInfo info,
                                       StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
     }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteAliasCommandBase.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteAliasCommandBase.cs
index 82c9c9f6557..31670935fcf 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteAliasCommandBase.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteAliasCommandBase.cs
@@ -61,6 +61,7 @@ public SwitchParameter PassThru
         /// The scope parameter for the command determines which scope the alias is set in.
         /// </summary>
         [Parameter]
+        [ArgumentCompleter(typeof(ScopeArgumentCompleter))]
         public string Scope { get; set; }
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteConsoleCmdlet.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteConsoleCmdlet.cs
index 2d2009e56bc..48d84636ce2 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteConsoleCmdlet.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteConsoleCmdlet.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.Management.Automation;
 using System.Text;
+using System.Xml;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -51,9 +52,7 @@ private string ProcessObject(object o)
         {
             if (o != null)
             {
-                string s = o as string;
-                IEnumerable enumerable = null;
-                if (s != null)
+                if (o is string s)
                 {
                     // strings are IEnumerable, so we special case them
                     if (s.Length > 0)
@@ -61,7 +60,11 @@ private string ProcessObject(object o)
                         return s;
                     }
                 }
-                else if ((enumerable = o as IEnumerable) != null)
+                else if (o is XmlNode xmlNode)
+                {
+                    return xmlNode.Name;
+                }
+                else if (o is IEnumerable enumerable)
                 {
                     // unroll enumerables, including arrays.
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteProgressCmdlet.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteProgressCmdlet.cs
index fe8fccb6e1a..0751954c54e 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteProgressCmdlet.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WriteProgressCmdlet.cs
@@ -17,7 +17,6 @@ public sealed class WriteProgressCommand : PSCmdlet
         /// </summary>
         [Parameter(
             Position = 0,
-            Mandatory = true,
             HelpMessageBaseName = HelpMessageBaseName,
             HelpMessageResourceId = "ActivityParameterHelpMessage")]
         public string Activity { get; set; }
@@ -36,7 +35,7 @@ public sealed class WriteProgressCommand : PSCmdlet
         /// Uniquely identifies this activity for purposes of chaining subordinate activities.
         /// </summary>
         [Parameter(Position = 2)]
-        [ValidateRange(0, Int32.MaxValue)]
+        [ValidateRange(0, int.MaxValue)]
         public int Id { get; set; }
 
         /// <summary>
@@ -62,7 +61,7 @@ public sealed class WriteProgressCommand : PSCmdlet
         /// Identifies the parent Id of this activity, or -1 if none.
         /// </summary>
         [Parameter]
-        [ValidateRange(-1, Int32.MaxValue)]
+        [ValidateRange(-1, int.MaxValue)]
         public int ParentId { get; set; } = -1;
 
         /// <summary>
@@ -96,7 +95,29 @@ protected override
         void
         ProcessRecord()
         {
-            ProgressRecord pr = new(Id, Activity, Status);
+            ProgressRecord pr;
+            if (string.IsNullOrEmpty(Activity))
+            {
+                if (!Completed)
+                {
+                    ThrowTerminatingError(new ErrorRecord(
+                    new ArgumentException("Missing value for mandatory parameter.", nameof(Activity)),
+                    "MissingActivity",
+                    ErrorCategory.InvalidArgument,
+                    Activity));
+                    return;
+                }
+                else
+                {
+                    pr = new(Id);
+                    pr.StatusDescription = Status;
+                }
+            }
+            else
+            {
+                pr = new(Id, Activity, Status);
+            }
+
             pr.ParentActivityId = ParentId;
             pr.PercentComplete = PercentComplete;
             pr.SecondsRemaining = SecondsRemaining;
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs
index 8db56196a68..cc3b1f2b251 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/XmlCommands.cs
@@ -111,8 +111,8 @@ public SwitchParameter NoClobber
         /// Encoding optional flag.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -128,7 +128,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         #endregion Command Line Parameters
 
@@ -208,7 +208,10 @@ private void CreateFileStream()
         {
             Dbg.Assert(Path != null, "FileName is mandatory parameter");
 
-            if (!ShouldProcess(Path)) return;
+            if (!ShouldProcess(Path))
+            {
+                return;
+            }
 
             StreamWriter sw;
             PathUtils.MasterStreamOpen(
@@ -328,13 +331,12 @@ public string[] LiteralPath
         private bool _disposed = false;
 
         /// <summary>
-        /// Public dispose method.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
         {
             if (!_disposed)
             {
-                GC.SuppressFinalize(this);
                 if (_helper != null)
                 {
                     _helper.Dispose();
@@ -439,7 +441,7 @@ protected override void BeginProcessing()
             }
             else
             {
-                WriteObject(string.Format(CultureInfo.InvariantCulture, "<?xml version=\"1.0\" encoding=\"{0}\"?>", Encoding.UTF8.WebName));
+                WriteObject(string.Create(CultureInfo.InvariantCulture, $"<?xml version=\"1.0\" encoding=\"{Encoding.UTF8.WebName}\"?>"));
                 WriteObject("<Objects>");
             }
         }
@@ -453,8 +455,7 @@ protected override void ProcessRecord()
             {
                 CreateMemoryStream();
 
-                if (_serializer != null)
-                    _serializer.SerializeAsStream(InputObject);
+                _serializer?.SerializeAsStream(InputObject);
 
                 if (_serializer != null)
                 {
@@ -472,8 +473,7 @@ protected override void ProcessRecord()
             }
             else
             {
-                if (_serializer != null)
-                    _serializer.Serialize(InputObject);
+                _serializer?.Serialize(InputObject);
             }
         }
 
@@ -631,10 +631,90 @@ private void CleanUp()
         #endregion IDisposable Members
     }
 
+    /// <summary>
+    /// Implements ConvertTo-CliXml command.
+    /// </summary>
+    [Cmdlet(VerbsData.ConvertTo, "CliXml", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2280866")]
+    [OutputType(typeof(string))]
+    public sealed class ConvertToClixmlCommand : PSCmdlet
+    {
+        #region Parameters
+
+        /// <summary>
+        /// Gets or sets input objects to be converted to CliXml object.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true)]
+        public PSObject InputObject { get; set; }
+
+        /// <summary>
+        /// Gets or sets depth of serialization.
+        /// </summary>
+        [Parameter]
+        [ValidateRange(1, int.MaxValue)]
+        public int Depth { get; set; } = 2;
+
+        #endregion Parameters
+
+        #region Private Members
+
+        private readonly List<object> _inputObjectBuffer = new();
+
+        #endregion Private Members
+
+        #region Overrides
+
+        /// <summary>
+        /// Process record.
+        /// </summary>
+        protected override void ProcessRecord()
+        {
+            _inputObjectBuffer.Add(InputObject);
+        }
+
+        /// <summary>
+        /// End Processing.
+        /// </summary>
+        protected override void EndProcessing()
+        {
+            WriteObject(PSSerializer.Serialize(_inputObjectBuffer, Depth, enumerate: true));
+        }
+
+        #endregion Overrides
+    }
+
+    /// <summary>
+    /// Implements ConvertFrom-CliXml command.
+    /// </summary>
+    [Cmdlet(VerbsData.ConvertFrom, "CliXml", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2280770")]
+    public sealed class ConvertFromClixmlCommand : PSCmdlet
+    {
+        #region Parameters
+
+        /// <summary>
+        /// Gets or sets input object which is written in CliXml format.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true)]
+        public string InputObject { get; set; }
+
+        #endregion Parameters
+
+        #region Overrides
+
+        /// <summary>
+        /// Process record.
+        /// </summary>
+        protected override void ProcessRecord()
+        {
+            WriteObject(PSSerializer.Deserialize(InputObject));
+        }
+
+        #endregion Overrides
+    }
+
     /// <summary>
     /// Helper class to import single XML file.
     /// </summary>
-    internal class ImportXmlHelper : IDisposable
+    internal sealed class ImportXmlHelper : IDisposable
     {
         #region constructor
 
@@ -763,12 +843,10 @@ internal void Import()
                 while (!_deserializer.Done() && count < first)
                 {
                     object result = _deserializer.Deserialize();
-                    PSObject psObject = result as PSObject;
 
-                    if (psObject != null)
+                    if (result is PSObject psObject)
                     {
-                        ICollection c = psObject.BaseObject as ICollection;
-                        if (c != null)
+                        if (psObject.BaseObject is ICollection c)
                         {
                             foreach (object o in c)
                             {
@@ -801,19 +879,13 @@ internal void Import()
             }
         }
 
-        internal void Stop()
-        {
-            if (_deserializer != null)
-            {
-                _deserializer.Stop();
-            }
-        }
+        internal void Stop() => _deserializer?.Stop();
     }
 
     #region Select-Xml
-    ///<summary>
-    ///This cmdlet is used to search an xml document based on the XPath Query.
-    ///</summary>
+    /// <summary>
+    /// This cmdlet is used to search an xml document based on the XPath Query.
+    /// </summary>
     [Cmdlet(VerbsCommon.Select, "Xml", DefaultParameterSetName = "Xml", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097031")]
     [OutputType(typeof(SelectXmlInfo))]
     public class SelectXmlCommand : PSCmdlet
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/GetTracerCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/GetTracerCommand.cs
index b37f06b2b2f..491aaf85361 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/GetTracerCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/GetTracerCommand.cs
@@ -51,7 +51,7 @@ public string[] Name
         protected override void ProcessRecord()
         {
             var sources = GetMatchingTraceSource(_names, true);
-            var result = sources.OrderBy(source => source.Name);
+            var result = sources.OrderBy(static source => source.Name);
             WriteObject(result, true);
         }
 
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/MshHostTraceListener.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/MshHostTraceListener.cs
index 357e0222b6d..b7e4ed279aa 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/MshHostTraceListener.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/MshHostTraceListener.cs
@@ -17,7 +17,7 @@ namespace Microsoft.PowerShell.Commands
     /// This trace listener cannot be specified in the app.config file.
     /// It must be added through the add-tracelistener cmdlet.
     /// </remarks>
-    internal class PSHostTraceListener
+    internal sealed class PSHostTraceListener
         : System.Diagnostics.TraceListener
     {
         #region TraceListener constructors and disposer
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/SetTracerCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/SetTracerCommand.cs
index a17ee0fdbef..9f8694ebd20 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/SetTracerCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/SetTracerCommand.cs
@@ -99,7 +99,7 @@ public SwitchParameter Debugger
         }
 
         /// <summary>
-        /// If this parameter is specified the Msh Host trace listener will be added.
+        /// If this parameter is specified the PSHost trace listener will be added.
         /// </summary>
         /// <value></value>
         [Parameter(ParameterSetName = "optionsSet")]
diff --git a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs
index 412f4a2d150..1eadd4934b3 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs
+++ b/src/Microsoft.PowerShell.Commands.Utility/commands/utility/trace/TraceExpressionCommand.cs
@@ -249,13 +249,7 @@ protected override void EndProcessing()
         /// <summary>
         /// Ensures that the sub-pipeline we created gets stopped as well.
         /// </summary>
-        protected override void StopProcessing()
-        {
-            if (_pipeline != null)
-            {
-                _pipeline.Stop();
-            }
-        }
+        protected override void StopProcessing() => _pipeline?.Stop();
 
         #endregion Cmdlet code
 
@@ -329,22 +323,15 @@ public void Dispose()
     /// cmdlet.  It gets attached to the sub-pipelines success or error pipeline and redirects
     /// all objects written to these pipelines to trace-command pipeline.
     /// </summary>
-    internal class TracePipelineWriter : PipelineWriter
+    internal sealed class TracePipelineWriter : PipelineWriter
     {
         internal TracePipelineWriter(
             TraceListenerCommandBase cmdlet,
             bool writeError,
             Collection<PSTraceSource> matchingSources)
         {
-            if (cmdlet == null)
-            {
-                throw new ArgumentNullException(nameof(cmdlet));
-            }
-
-            if (matchingSources == null)
-            {
-                throw new ArgumentNullException(nameof(matchingSources));
-            }
+            ArgumentNullException.ThrowIfNull(cmdlet);
+            ArgumentNullException.ThrowIfNull(matchingSources);
 
             _cmdlet = cmdlet;
             _writeError = writeError;
@@ -525,8 +512,7 @@ public override int Write(object obj, bool enumerateCollection)
         private static ErrorRecord ConvertToErrorRecord(object obj)
         {
             ErrorRecord result = null;
-            PSObject mshobj = obj as PSObject;
-            if (mshobj != null)
+            if (obj is PSObject mshobj)
             {
                 object baseObject = mshobj.BaseObject;
                 if (baseObject is not PSCustomObject)
@@ -535,8 +521,7 @@ private static ErrorRecord ConvertToErrorRecord(object obj)
                 }
             }
 
-            ErrorRecord errorRecordResult = obj as ErrorRecord;
-            if (errorRecordResult != null)
+            if (obj is ErrorRecord errorRecordResult)
             {
                 result = errorRecordResult;
             }
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/AddMember.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/AddMember.resx
index cb18968d6ed..5890ed43eea 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/AddMember.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/AddMember.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/AddTypeStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/AddTypeStrings.resx
index 75ba47072d2..c0374e4d1d2 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/AddTypeStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/AddTypeStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -120,27 +120,12 @@
   <data name="AlreadyCompiledandLoaded" xml:space="preserve">
     <value>The source code was already compiled and loaded.</value>
   </data>
-  <data name="MethodDefinitionNotPublic" xml:space="preserve">
-    <value>The generated type defines no public methods or properties.</value>
-  </data>
-  <data name="TypeDefinitionNotPublic" xml:space="preserve">
-    <value>The generated type is not public.</value>
-  </data>
-  <data name="FromMemberNotSupported" xml:space="preserve">
-    <value>Cannot add type. The -MemberDefinition parameter is not supported for this language.</value>
-  </data>
   <data name="FileExtensionNotSupported" xml:space="preserve">
     <value>Cannot add type. The "{0}" extension is not supported.</value>
   </data>
   <data name="MultipleExtensionsNotSupported" xml:space="preserve">
     <value>Cannot add type. Input files must all have the same file extension.</value>
   </data>
-  <data name="LanguageAndProviderSpecified" xml:space="preserve">
-    <value>Cannot add type. Specify only the Language or CodeDomProvider parameters.</value>
-  </data>
-  <data name="AmbiguousAssemblyName" xml:space="preserve">
-    <value>Cannot add type. The assembly name {0} matches both {1} and {2}.</value>
-  </data>
   <data name="AssemblyNotFound" xml:space="preserve">
     <value>Cannot add type. The assembly '{0}' could not be found.</value>
   </data>
@@ -153,9 +138,6 @@
   <data name="CompilerErrors" xml:space="preserve">
     <value>Cannot add type. Compilation errors occurred.</value>
   </data>
-  <data name="AssemblyLoadErrors" xml:space="preserve">
-    <value>Cannot add type. One or more required assemblies are missing.</value>
-  </data>
   <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
     <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
   </data>
@@ -168,4 +150,10 @@
   <data name="AssemblyTypeNotSupported" xml:space="preserve">
     <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
   </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/AliasCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/AliasCommandStrings.resx
index 1c3b0e52953..b113e19818f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/AliasCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/AliasCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -135,12 +135,6 @@
   <data name="ImportAliasTarget" xml:space="preserve">
     <value>Name: {0} Value: {1}</value>
   </data>
-  <data name="ExportAliasToFileSystemOnly" xml:space="preserve">
-    <value>Cannot export the aliases because path '{0}' referred to a '{1}' provider path. Change the Path parameter to a file system path.</value>
-  </data>
-  <data name="ExportAliasPathResolvedToMultiple" xml:space="preserve">
-    <value>Cannot export the aliases because path '{0}' contains wildcard characters that resolved to multiple paths. Aliases can be exported to only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
-  </data>
   <data name="ExportAliasFileOpenFailed" xml:space="preserve">
     <value>Cannot open file {0} to export the alias. {1}</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringData.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringData.resx
index 285dea7301e..10214736962 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringData.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringData.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringResources.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringResources.resx
deleted file mode 100644
index ae0b785d645..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertFromStringResources.resx
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="DocInformation" xml:space="preserve">
-    <value>The supplied template was invalid: {0}. For more information on the template syntax, type 'Get-Help ConvertFrom-String'</value>
-  </data>
-  <data name="EmptyInputObject" xml:space="preserve">
-    <value>No input was supplied</value>
-  </data>
-  <data name="InvalidRegularExpression" xml:space="preserve">
-    <value>{0} is not a valid Regular Expression delimiter</value>
-  </data>
-  <data name="OneOrMorePropertyNamesAreInvalid" xml:space="preserve">
-    <value>One or more PropertyNames are invalid</value>
-  </data>
-  <data name="OnlyOneTemplateSupported" xml:space="preserve">
-    <value>Template file path resolves to more than one file. Specify a path to a single file</value>
-  </data>
-  <data name="ProgramNotFound" xml:space="preserve">
-    <value>ConvertFrom-String appears to be having trouble parsing your data using the template you've provided. We'd love to take a look at what went wrong, if you'd like to share the data and template used to parse it. We've saved these files to {0} and {1} - feel free to attach them in a mail to psdmfb@microsoft.com. We will review all submissions, although we can't guarantee a response.</value>
-  </data>
-  <data name="ResultNotFound" xml:space="preserve">
-    <value>ConvertFrom-String appears to be having trouble parsing your data using the template you've provided. We'd love to take a look at what went wrong, if you'd like to share the data and template used to parse it. We've saved these files to {0} and {1} - feel free to attach them in a mail to psdmfb@microsoft.com. We will review all submissions, although we can't guarantee a response.</value>
-  </data>
-  <data name="StringConversionError" xml:space="preserve">
-    <value>Error converting string value to specified type at file character position {0}</value>
-  </data>
-  <data name="TemplateFileRequired" xml:space="preserve">
-    <value>Template file is required for UpdateTemplate parameter</value>
-  </data>
-  <data name="TemplateNotFound" xml:space="preserve">
-    <value>Template file was not found</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertHTMLStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertHTMLStrings.resx
index f01b88d8754..e604b617997 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertHTMLStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertHTMLStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx
index d37509d0f50..692be6fe026 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertMarkdownStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -120,9 +120,6 @@
   <data name="InvalidInputObjectType" xml:space="preserve">
     <value>The type of the input object '{0}' is invalid.</value>
   </data>
-  <data name="InputFileNotFound" xml:space="preserve">
-    <value>The file is not found: '{0}'.</value>
-  </data>
   <data name="FileSystemPathsOnly" xml:space="preserve">
     <value>Only FileSystem Provider paths are supported. The file path is not supported: '{0}'.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertStringResources.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertStringResources.resx
deleted file mode 100644
index 9e65acdc23c..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ConvertStringResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="InvalidExample" xml:space="preserve">
-    <value>Text examples must follow the pattern "input value = output value"</value>
-  </data>
-  <data name="InvalidPsObjectExample" xml:space="preserve">
-    <value>PSObject examples should have 'Before' and 'After' properties</value>
-  </data>
-  <data name="NoProgramFound" xml:space="preserve">
-    <value>Convert-String appears to be having trouble parsing your data using the examples you've provided. We'd love to take a look at what went wrong - feel free to send the command you tried in a mail to psdmfb@microsoft.com. We will review all submissions, although we can't guarantee a response.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
index 0eff0d6f84f..572e4d99e17 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/CsvCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -130,9 +130,6 @@
   <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
     <value>You must specify either the -UseQuotes or -QuoteFields parameters, but not both.</value>
   </data>
-  <data name="CannotSpecifyIncludeTypeInformationAndNoTypeInformation" xml:space="preserve">
-    <value>You must specify either the -IncludeTypeInformation or -NoTypeInformation parameters, but not both.</value>
-  </data>
   <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
     <value>You must specify either the -Path or -LiteralPath parameters, but not both.</value>
   </data>
@@ -157,4 +154,7 @@
   <data name="EOFIsReached" xml:space="preserve">
     <value>EOF is reached.</value>
   </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>You must specify either the -Append or -NoHeader parameters, but not both.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/Debugger.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/Debugger.resx
index 043fa4a9320..c4ab45d5b61 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/Debugger.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/Debugger.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/EventingStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/EventingStrings.resx
index 2eff70b6267..e36c4148b01 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/EventingStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/EventingStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/FlashExtractStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/FlashExtractStrings.resx
deleted file mode 100644
index 824b56ec6bf..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/FlashExtractStrings.resx
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="ChildNamesMustBeUnique" xml:space="preserve">
-    <value>There are two instances of non-sequence Property '{0}' at {1} and {2} in parent Span {3}</value>
-  </data>
-  <data name="NonOptionalNonStructMustHaveValue" xml:space="preserve">
-    <value>Property '{0}' at {1} has no value and is not optional or a containing span</value>
-  </data>
-  <data name="NoProgramFound" xml:space="preserve">
-    <value>No program can be found for the given input</value>
-  </data>
-  <data name="NullProperty" xml:space="preserve">
-    <value>Internal error: Property cannot be null</value>
-  </data>
-  <data name="UnexpectedEndingBracket" xml:space="preserve">
-    <value>Unexpected Span ending bracket found at {0}</value>
-  </data>
-  <data name="MissingSpan" xml:space="preserve">
-    <value>Missing Span value at {0} while processing {1}</value>
-  </data>
-  <data name="InvalidFormat" xml:space="preserve">
-    <value>Invalid format at {0} while processing {1}</value>
-  </data>
-  <data name="InvalidTypeName" xml:space="preserve">
-    <value>Invalid type name '{0}' at {1} while processing {2}</value>
-  </data>
-  <data name="InvalidSpanName" xml:space="preserve">
-    <value>Missing Span name at {0} while processing {1}</value>
-  </data>
-  <data name="InvalidFirstNameChar" xml:space="preserve">
-    <value>First character of a name must be a letter or underscore at {0} while processing {1}</value>
-  </data>
-  <data name="InvalidNameChar" xml:space="preserve">
-    <value>Characters of a name must be letters, digits, or underscores at {0} while processing {1}</value>
-  </data>
-  <data name="AttributeSuffixWithinName" xml:space="preserve">
-    <value>Cannot embed attribute suffixes (e.g. optional, sequence) in names at {0} while processing {1}</value>
-  </data>
-  <data name="ReservedWord" xml:space="preserve">
-    <value>Cannot use reserved word '{2}' at {0} while processing {1}</value>
-  </data>
-  <data name="ValueIndicatorNotFound" xml:space="preserve">
-    <value>Expected value indicator at {0} while processing {1}</value>
-  </data>
-  <data name="CannotConvertValue" xml:space="preserve">
-    <value>Unable to convert string value to specified type while processing {0}</value>
-  </data>
-  <data name="UnexpectedEOF" xml:space="preserve">
-    <value>Unexpected EOF while processing {0}</value>
-  </data>
-  <data name="SpanStartPosition" xml:space="preserve">
-    <value>Span starting at line {0} column {1}</value>
-  </data>
-  <data name="NoParent" xml:space="preserve">
-    <value>Internal error: Property '{0}' at {1} has no containing parent</value>
-  </data>
-  <data name="InconsistentPropertyDefinition" xml:space="preserve">
-    <value>Property '{0}' definition at {1} is inconsistent with earlier definition(s)</value>
-  </data>
-  <data name="NoParentRegionFound" xml:space="preserve">
-    <value>Internal error: no parent region found.</value>
-  </data>
-  <data name="ParentRegionsCannotBeEmpty" xml:space="preserve">
-    <value>Internal error: parent regions cannot be null or empty.</value>
-  </data>
-  <data name="ParserSpanStartPosition" xml:space="preserve">
-    <value>line {0} column {1}</value>
-  </data>
-  <data name="AtPosition" xml:space="preserve">
-    <value>at {0}</value>
-  </data>
-  <data name="SingleNameString" xml:space="preserve">
-    <value>'{0}'</value>
-  </data>
-  <data name="MarkupCharPosition" xml:space="preserve">
-    <value>line {0} column {1}</value>
-  </data>
-  <data name="NoStrippedTemplateFileStart" xml:space="preserve">
-    <value>No template text file start for Span {0}</value>
-  </data>
-  <data name="PropertyNotFound" xml:space="preserve">
-    <value>Internal error: Property '{0}' not found</value>
-  </data>
-  <data name="InvalidOperation" xml:space="preserve">
-    <value>Internal error: Invalid parser operation</value>
-  </data>
-  <data name="CachedProgramNotFound" xml:space="preserve">
-    <value>Cached program was not found in template file for property: {0}</value>
-  </data>
-  <data name="DifferentTemplateHash" xml:space="preserve">
-    <value>Template text does not match cached programs</value>
-  </data>
-  <data name="NoExampleFound" xml:space="preserve">
-    <value>The template text contains no example to parse</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/FormatAndOut_out_gridview.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/FormatAndOut_out_gridview.resx
index e5bdb6dc12b..f5b5dd3000a 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/FormatAndOut_out_gridview.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/FormatAndOut_out_gridview.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/GetFormatDataStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/GetFormatDataStrings.resx
new file mode 100644
index 00000000000..74e1db4692d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/GetFormatDataStrings.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Processing view defintion '{0}'</value>
+  </data>
+</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/GetMember.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/GetMember.resx
index a2e19681b64..054a4c873d6 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/GetMember.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/GetMember.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/GetRandomCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/GetRandomCommandStrings.resx
index c81839c8409..ecbdecc3464 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/GetRandomCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/GetRandomCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/GetUptimeStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/GetUptimeStrings.resx
index f59439da714..9450dc82028 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/GetUptimeStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/GetUptimeStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/HostStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/HostStrings.resx
index 6172bb81951..6391b0183ea 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/HostStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/HostStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -120,7 +120,4 @@
   <data name="InvalidColorErrorTemplate" xml:space="preserve">
     <value>Cannot process the color because {0} is not a valid color.</value>
   </data>
-  <data name="NoStringToEvalulateError" xml:space="preserve">
-    <value>Cannot evaluate the error because a string is not specified.</value>
-  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/HttpCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/HttpCommandStrings.resx
index 78ccfb68dc1..a08843ed7c3 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/HttpCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/HttpCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="EmptyUri" xml:space="preserve">
-    <value>The command cannot run because "{0}" is empty or blank. Specify a value, and then run the command again.</value>
-  </data>
   <data name="Error" xml:space="preserve">
     <value>This command cannot be completed due to the following error: '{0}'.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ImmutableStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ImmutableStrings.resx
deleted file mode 100644
index 9ba7fddb0b5..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ImmutableStrings.resx
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="ArrayInitializedStateNotEqual" xml:space="preserve">
-    <value>Object is not a array with the same initialization state as the array to compare it to.</value>
-  </data>
-  <data name="ArrayLengthsNotEqual" xml:space="preserve">
-    <value>Object is not a array with the same number of elements as the array to compare it to.</value>
-  </data>
-  <data name="CannotFindOldValue" xml:space="preserve">
-    <value>Cannot find the old value</value>
-  </data>
-  <data name="CapacityMustBeGreaterThanOrEqualToCount" xml:space="preserve">
-    <value>Capacity was less than the current Count of elements.</value>
-  </data>
-  <data name="CapacityMustEqualCountOnMove" xml:space="preserve">
-    <value>MoveToImmutable can only be performed when Count equals Capacity.</value>
-  </data>
-  <data name="CollectionModifiedDuringEnumeration" xml:space="preserve">
-    <value>Collection was modified; enumeration operation may not execute.</value>
-  </data>
-  <data name="DuplicateKey" xml:space="preserve">
-    <value>An element with the same key but a different value already exists. Key: {0}</value>
-  </data>
-  <data name="InvalidEmptyOperation" xml:space="preserve">
-    <value>This operation does not apply to an empty instance.</value>
-  </data>
-  <data name="InvalidOperationOnDefaultArray" xml:space="preserve">
-    <value>This operation cannot be performed on a default instance of ImmutableArray&lt;T&gt;.  Consider initializing the array, or checking the ImmutableArray&lt;T&gt;.IsDefault property.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ImplicitRemotingStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ImplicitRemotingStrings.resx
index 48d1fea7c34..70e00b3b7f1 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ImplicitRemotingStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ImplicitRemotingStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -129,9 +129,6 @@
   <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
     <value>Running the {0} command in a remote session returned no results.</value>
   </data>
-  <data name="ErrorCannotCreateTemporaryFile" xml:space="preserve">
-    <value>Cannot create temporary file for implicit remoting module.</value>
-  </data>
   <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
     <value>No session has been associated with this implicit remoting module.</value>
   </data>
@@ -147,15 +144,6 @@
   <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
     <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
   </data>
-  <data name="ErrorSkippedUnsafeParameterName" xml:space="preserve">
-    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of a parameter name: '{1}'.</value>
-  </data>
-  <data name="ErrorSkippedUnsafeParameterSetName" xml:space="preserve">
-    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of a parameter set name: '{1}'.</value>
-  </data>
-  <data name="ErrorSkippedUnsafeAliasName" xml:space="preserve">
-    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of a parameter alias name: '{1}'.</value>
-  </data>
   <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
     <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
   </data>
@@ -204,9 +192,6 @@
   <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
     <value>Getting formatting and output information from remote session ... {0} objects received</value>
   </data>
-  <data name="ProgressStatusProxyGeneration" xml:space="preserve">
-    <value>Generating a proxy command for '{0}' ...</value>
-  </data>
   <data name="ProgressStatusCompleted" xml:space="preserve">
     <value>Completed.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ImportLocalizedDataStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ImportLocalizedDataStrings.resx
index 8bd19d60ac3..8fc6474c99e 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/ImportLocalizedDataStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ImportLocalizedDataStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -143,4 +143,10 @@
   <data name="IncorrectVariableName" xml:space="preserve">
     <value>The BindingVariable name '{0}' is invalid.</value>
   </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/MatchStringStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/MatchStringStrings.resx
index 2b6b80959d0..fe284f4a24b 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/MatchStringStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/MatchStringStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/MeasureObjectStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/MeasureObjectStrings.resx
index 8211114c335..47daf3c35b1 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/MeasureObjectStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/MeasureObjectStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -120,9 +120,6 @@
   <data name="PropertyNotFound" xml:space="preserve">
     <value>The property "{0}" cannot be found in the input for any objects.</value>
   </data>
-  <data name="NonNumericProperty" xml:space="preserve">
-    <value>Property "{0}" is not numeric.</value>
-  </data>
   <data name="NonNumericInputObject" xml:space="preserve">
     <value>Input object "{0}" is not numeric.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/NewObjectStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/NewObjectStrings.resx
index 07c2a6d8c9e..3b8b8ab2371 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/NewObjectStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/NewObjectStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -147,7 +147,16 @@
   <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
     <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
   </data>
-  <data name="ApartmentNotSupported" xml:space="preserve">
-    <value>{0} Please note that Single-Threaded Apartment is not supported in PowerShell.</value>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
   </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/OutPrinterDisplayStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/OutPrinterDisplayStrings.resx
index 0b4c01443f3..8e6fcd284b1 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/OutPrinterDisplayStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/OutPrinterDisplayStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/SelectObjectStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/SelectObjectStrings.resx
index 02d3aad766d..621e833d092 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/SelectObjectStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/SelectObjectStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/SendMailMessageStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/SendMailMessageStrings.resx
index 3f53249c1b3..8278af4b469 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/SendMailMessageStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/SendMailMessageStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/SortObjectStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/SortObjectStrings.resx
index 4e05f063ce1..729a027d66f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/SortObjectStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/SortObjectStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/StartSleepStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/StartSleepStrings.resx
new file mode 100644
index 00000000000..32804b9e21b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/StartSleepStrings.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/TestJsonCmdletStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/TestJsonCmdletStrings.resx
index ab105e47fd3..e9a19f81793 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/TestJsonCmdletStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/TestJsonCmdletStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,10 +123,13 @@
   <data name="InvalidJson" xml:space="preserve">
     <value>Cannot parse the JSON.</value>
   </data>
-  <data name="InvalidJsonAgainstSchema" xml:space="preserve">
-    <value>The JSON is not valid with the schema.</value>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
   </data>
   <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
     <value>Can not open JSON schema file: {0}</value>
   </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/TraceCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/TraceCommandStrings.resx
index 0eb1e1e9466..1446921e129 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/TraceCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/TraceCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="FileListenerNotFound" xml:space="preserve">
-    <value>A file listener with name '{0}' was not found.</value>
-  </data>
   <data name="TraceFileOnly" xml:space="preserve">
     <value>Trace output can only be written to the file system. The path '{0}' referred to a '{1}' provider path.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/UnblockFileStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/UnblockFileStrings.resx
index b2af7eba67e..9c6325363cf 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/UnblockFileStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/UnblockFileStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateDataStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateDataStrings.resx
index 9d2ccaced94..feea0b90490 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateDataStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateDataStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -135,9 +135,6 @@
   <data name="CannotUpdateMemberType" xml:space="preserve">
     <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
   </data>
-  <data name="SerializationDepthNegative" xml:space="preserve">
-    <value>The value of the SerializationDepth property should not be negative.</value>
-  </data>
   <data name="ShouldBeSpecified" xml:space="preserve">
     <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateListStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateListStrings.resx
index e6b985db275..8caa94ce8d8 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateListStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/UpdateListStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityCommonStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityCommonStrings.resx
index 551f0d1fcb8..3e7f0052592 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityCommonStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityCommonStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="NoMatchFound" xml:space="preserve">
-    <value>There are no matching results found for {2}.</value>
-  </data>
   <data name="Invalidpath" xml:space="preserve">
     <value>{2} has one or more exceptions that are not valid.</value>
   </data>
@@ -165,13 +162,16 @@
   <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
     <value>Cannot use tag '{0}'. The 'PS' prefix is reserved.</value>
   </data>
-  <data name="AlgorithmTypeNotSupported" xml:space="preserve">
-    <value>Algorithm '{0}' is not supported in this system.</value>
-  </data>
   <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
     <value>The file '{0}' could not be parsed as a PowerShell Data File.</value>
   </data>
   <data name="InvalidSDDL" xml:space="preserve">
     <value>Cannot construct a security descriptor from the given SDDL due to the following error: {0}</value>
   </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression cmdlet script block will be run in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityMshSnapinResources.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityMshSnapinResources.resx
deleted file mode 100644
index 3bca38847db..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/UtilityMshSnapinResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Description" xml:space="preserve">
-    <value>This PowerShell snap-in contains utility cmdlets that are used to view and organize data in different ways.</value>
-  </data>
-  <data name="Vendor" xml:space="preserve">
-    <value>Microsoft Corporation</value>
-  </data>
-  <data name="Name" xml:space="preserve">
-    <value>PowerShell utility snap-in</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/VariableCommandStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/VariableCommandStrings.resx
index bff7eee52af..51b93d480ef 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/VariableCommandStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/VariableCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,18 +123,15 @@
   <data name="SetVariableTarget" xml:space="preserve">
     <value>Name: {0} Value: {1}</value>
   </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Use a single variable rather than a collection</value>
+  </data>
   <data name="NewVariableAction" xml:space="preserve">
     <value>New variable</value>
   </data>
   <data name="NewVariableTarget" xml:space="preserve">
     <value>Name: {0} Value: {1}</value>
   </data>
-  <data name="AddVariableAction" xml:space="preserve">
-    <value>Add variable</value>
-  </data>
-  <data name="AddVariableTarget" xml:space="preserve">
-    <value>Name: {0}</value>
-  </data>
   <data name="RemoveVariableAction" xml:space="preserve">
     <value>Remove variable</value>
   </data>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/WebCmdletStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/WebCmdletStrings.resx
index e3c64bd5ca3..4bc8e782b0f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/WebCmdletStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/WebCmdletStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -129,7 +129,7 @@
   <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
     <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
   </data>
-    <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
     <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
   </data>
   <data name="AuthenticationTokenConflict" xml:space="preserve">
@@ -159,17 +159,14 @@
   <data name="DuplicateKeysInJsonString" xml:space="preserve">
     <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
   </data>
-  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
-    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
-  </data>
-  <data name="ExtendedProfileRequired" xml:space="preserve">
-    <value>The ConvertTo-Json and ConvertFrom-Json cmdlets require the installation of the .NET Client Profile, sometimes called the .NET extended profile.</value>
-  </data>
   <data name="IEDomNotSupported" xml:space="preserve">
     <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
   </data>
-  <data name="JsonStringInBadFormat" xml:space="preserve">
-    <value>The converted JSON string is in bad format.</value>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
   </data>
   <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
     <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
@@ -199,16 +196,16 @@
     <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
   </data>
   <data name="ReadResponseComplete" xml:space="preserve">
-    <value>Reading web response completed. (Number of bytes read: {0})</value>
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
   </data>
   <data name="ReadResponseProgressActivity" xml:space="preserve">
-    <value>Reading web response</value>
+    <value>Reading web response stream</value>
   </data>
   <data name="ReadResponseProgressStatus" xml:space="preserve">
-    <value>Reading response stream... (Number of bytes read: {0})</value>
+    <value>Downloaded: {0} of {1}</value>
   </data>
-  <data name="RequestTimeout" xml:space="preserve">
-    <value>The operation has timed out.</value>
+   <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
   </data>
   <data name="SessionConflict" xml:space="preserve">
     <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
@@ -219,26 +216,14 @@
   <data name="WriteRequestComplete" xml:space="preserve">
     <value>Web request completed. (Number of bytes processed: {0})</value>
   </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
   <data name="WriteRequestProgressActivity" xml:space="preserve">
     <value>Web request status</value>
   </data>
   <data name="WriteRequestProgressStatus" xml:space="preserve">
-    <value>Number of bytes processed: {0}</value>
-  </data>
-  <data name="JsonNetModuleRequired" xml:space="preserve">
-    <value>The ConvertTo-Json and ConvertFrom-Json cmdlets require the 'Json.Net' module. {0}</value>
-  </data>
-  <data name="PSModuleAutoloadingPreferenceNotEnable" xml:space="preserve">
-    <value>The cmdlet cannot run because the 'Json.Net' module cannot be loaded. Import the module manually or set the $PSModuleAutoLoadingPreference variable to enable module auto loading. For more information, see 'get-help about_Preference_Variables'.</value>
-  </data>
-  <data name="CouldNotAutoImportJsonNetModule" xml:space="preserve">
-    <value>However, the 'Json.Net' module could not be loaded. For more information, run 'Import-Module Json.Net'.</value>
-  </data>
-  <data name="JsonNetModuleFilesRequired" xml:space="preserve">
-    <value>Ensure 'Json.Net.psd1' and 'Newtonsoft.Json.dll' are available in a versioned subdirectory of '{0}'.</value>
-  </data>
-  <data name="ReachedMaximumDepthAllowed" xml:space="preserve">
-    <value>The maximum depth allowed for serialization is {0}.</value>
+    <value>Downloaded: {0} of {1}</value>
   </data>
   <data name="JsonDeserializationFailed" xml:space="preserve">
     <value>Conversion from JSON failed with error: {0}</value>
@@ -249,14 +234,11 @@
   <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
     <value>Following rel link {0}</value>
   </data>
-  <data name="WebMethodInvocationVerboseMsg" xml:space="preserve">
-    <value>{0} with {1}-byte payload</value>
-  </data>
   <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
     <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
   </data>
-  <data name="WebResponseVerboseMsg" xml:space="preserve">
-    <value>received {0}-byte response of content type {1}</value>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
   </data>
   <data name="RetryVerboseMsg" xml:space="preserve">
     <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
@@ -264,4 +246,7 @@
   <data name="JsonMaxDepthReached" xml:space="preserve">
     <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
   </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/WriteErrorStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/WriteErrorStrings.resx
index 13d2058e7b2..cb913ef9dd5 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/WriteErrorStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/WriteErrorStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/WriteProgressResourceStrings.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/WriteProgressResourceStrings.resx
index 9603b4deb99..919e5638e2f 100644
--- a/src/Microsoft.PowerShell.Commands.Utility/resources/WriteProgressResourceStrings.resx
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/WriteProgressResourceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddMember.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddMember.cs.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddMember.cs.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddTypeStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddTypeStrings.cs.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AddTypeStrings.cs.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AliasCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AliasCommandStrings.cs.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/AliasCommandStrings.cs.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertFromStringData.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertFromStringData.cs.resx
new file mode 100644
index 00000000000..2a10c309c52
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertFromStringData.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>Datový řádek {0} není ve formátu name=value. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>Datová položka {1} na řádku {0} je již definována. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertHTMLStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertHTMLStrings.cs.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertHTMLStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertMarkdownStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertMarkdownStrings.cs.resx
new file mode 100644
index 00000000000..523a392e975
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ConvertMarkdownStrings.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Typ vstupního objektu {0} je neplatný.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Jsou podporovány pouze cesty poskytovatele FileSystem. Cesta k souboru {0} se nepodporuje.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>Vlastnost {0} zadaného objektu má hodnotu null nebo je prázdná.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Neplatný název sady parametrů: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/CsvCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/CsvCommandStrings.cs.resx
new file mode 100644
index 00000000000..8306588baaf
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/CsvCommandStrings.cs.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Obsah CSV nejde přidat do následujícího souboru: {1}. Přidávaný objekt nemá vlastnost odpovídající následujícímu sloupci: {0}. Chcete-li pokračovat i s neodpovídajícími vlastnostmi, přidejte parametr -Force a spusťte příkaz znovu.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>Musíte zadat parametr -UseQuotes nebo -QuoteFields, ale ne oba.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>Musíte zadat parametr -Path nebo -LiteralPath, ale ne oba.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>Jedno nebo více záhlaví nebylo zadaných. Místo všech chybějících záhlaví se použily výchozí názvy začínající písmenem H.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName je povinný parametr.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>Metoda ReconcilePreexistingPropertyNames se má volat jen při přidávání.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>Metoda ReconcilePreexistingPropertyNames se má volat jen po úspěšném načtení existujících názvů vlastností.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>Metoda BuildPropertyNames se má u každé instance rutiny volat jen jednou.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Hierarchie typů nesmí obsahovat hodnoty null.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>Bylo dosaženo konce souboru.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>Musíte zadat parametr -Append nebo -NoHeader, ale ne oba.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/Debugger.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/Debugger.cs.resx
new file mode 100644
index 00000000000..2d35d9fdd4c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/Debugger.cs.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Soubor {0} neexistuje.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/EventingStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/EventingStrings.cs.resx
new file mode 100644
index 00000000000..deec5e4e5f8
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/EventingStrings.cs.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Odhlásit odběr</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Odebrat</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/FormatAndOut_out_gridview.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/FormatAndOut_out_gridview.cs.resx
new file mode 100644
index 00000000000..65f0ad56b0f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/FormatAndOut_out_gridview.cs.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Hodnota</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetFormatDataStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetFormatDataStrings.cs.resx
new file mode 100644
index 00000000000..90c9780343a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetFormatDataStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Probíhá zpracování definice zobrazení {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetMember.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetMember.cs.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetMember.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetRandomCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetRandomCommandStrings.cs.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetRandomCommandStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetUptimeStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetUptimeStrings.cs.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/GetUptimeStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HostStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HostStrings.cs.resx
new file mode 100644
index 00000000000..4e2f0f729ad
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HostStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Barvu nelze zpracovat, protože {0} není platná barva.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HttpCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HttpCommandStrings.cs.resx
new file mode 100644
index 00000000000..7b764b1e15e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/HttpCommandStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Tento příkaz nelze dokončit z důvodu následující chyby: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImplicitRemotingStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImplicitRemotingStrings.cs.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImplicitRemotingStrings.cs.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImportLocalizedDataStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImportLocalizedDataStrings.cs.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/ImportLocalizedDataStrings.cs.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MatchStringStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MatchStringStrings.cs.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MatchStringStrings.cs.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MeasureObjectStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MeasureObjectStrings.cs.resx
new file mode 100644
index 00000000000..5da93bbc568
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/MeasureObjectStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Vlastnost {0} nebyla nalezena ve vstupu pro žádné objekty.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Vstupní objekt {0} není číselný.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/NewObjectStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/NewObjectStrings.cs.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/NewObjectStrings.cs.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/OutPrinterDisplayStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/OutPrinterDisplayStrings.cs.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/OutPrinterDisplayStrings.cs.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SelectObjectStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SelectObjectStrings.cs.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SelectObjectStrings.cs.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SendMailMessageStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SendMailMessageStrings.cs.resx
new file mode 100644
index 00000000000..34d7df9b9c3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SendMailMessageStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>E-mail nejde odeslat, protože nebyl zadaný žádný server SMTP. Server SMTP musíte zadat pomocí parametru SmtpServer nebo proměnné $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SortObjectStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SortObjectStrings.cs.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/SortObjectStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/StartSleepStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/StartSleepStrings.cs.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/StartSleepStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TestJsonCmdletStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TestJsonCmdletStrings.cs.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TestJsonCmdletStrings.cs.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TraceCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TraceCommandStrings.cs.resx
new file mode 100644
index 00000000000..e41f3e1c4c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/TraceCommandStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>Výstup trasování jde zapisovat jen do systému souborů. Cesta {0} odkazovala na cestu poskytovatele {1}.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>Výstup trasování jde zapisovat jen do jednoho souboru. Cesta {0} se přeložila na více než jeden soubor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UnblockFileStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UnblockFileStrings.cs.resx
new file mode 100644
index 00000000000..6c8706b9efd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UnblockFileStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Rutina nepodporuje Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Při pokusu o odblokování souboru {0} došlo k chybě.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateDataStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateDataStrings.cs.resx
new file mode 100644
index 00000000000..982e4931fcd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateDataStrings.cs.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Soubor nelze otevřít, protože aktuálním zprostředkovatelem je {0} a tento příkaz vyžaduje soubor.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Soubor {0} nelze přečíst, protože nemá příponu názvu souboru {1}.</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Aktualizovat TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Aktualizovat FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Člen typu {0} se nedá aktualizovat. Pro parametr MemberType zadejte jiný typ.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>Parametr {0} je pro typ {1} povinný. Zadejte prosím parametr {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>Parametr {0} nesmí být pro člen typu {1} null ani prázdný řetězec. Při aktualizaci tohoto typu členu zadejte pro parametr {0} hodnotu, která není null.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>Parametr {0} není pro člen typu {1} nutný a neměl by být zadán. Při aktualizaci tohoto typu členu nezadávejte parametr {0}.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Pro aktualizaci typu {0} není zadán žádný člen.</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>Název cílového typu nesmí být null, prázdný ani obsahovat pouze prázdné znaky.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Parametry Value a SecondValue nesmí být pro člen typu {0} současně null. Zadejte pro jeden z těchto dvou parametrů hodnotu, která není null.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Lze zadat pouze jeden typ členu. Zadané typy členů: {0}. Aktualizujte typ pouze s jedním typem členu.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Parametry MemberName, Value a SecondValue nelze zadat bez parametru MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Odebrat TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Název typu, který bude odebrán: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Typ, který chcete aktualizovat: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Odebrat typ souboru</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>Soubor {0} není importován do aktuální relace.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Aktualizace dat formátu nejsou v tomto prostředí runspace povoleny. Při vytváření prostředí runspace je vlastnost DisableFormatUpdates nastavena na hodnotu True.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Data formátu nelze aktualizovat pomocí instance FormatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Data typu nelze aktualizovat pomocí instance TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateListStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateListStrings.cs.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UpdateListStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UtilityCommonStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UtilityCommonStrings.cs.resx
new file mode 100644
index 00000000000..9dff16de405
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/UtilityCommonStrings.cs.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>Objekt {2} obsahuje jednu nebo více neplatných výjimek.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Tento příkaz nejde spustit, protože cesta k souboru {0} není platná. Zadejte platnou cestu k souboru a spusťte příkaz znovu.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Tento příkaz nejde spustit, protože hodnota {0} je prázdná. Zadejte CSSUri a spusťte příkaz znovu.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Soubor nejde otevřít, protože aktuální poskytovatel ({0}) neumí otevírat soubory.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Tento příkaz nejde spustit, protože hodnota předpony v parametru Namespace má hodnotu null. Zadejte platnou hodnotu předpony a spusťte příkaz znovu.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Objekty seskupené podle této vlastnosti nejde rozbalit, protože se opakuje klíč. Zadejte platnou hodnotu vlastnosti a zkuste to znovu.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Tento příkaz není v tomto operačním systému podporovaný.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Soubor {0} nejde přečíst: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Vstup typu {0} nejde převést na šestnáctkovou hodnotu. Chcete-li zobrazit šestnáctkové formátování jeho řetězcové reprezentace, předejte ho před rutinou Format-Hex prostřednictvím kanálu rutině Out-String.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Zadaná cesta {0} není podporovaná. Tento příkaz podporuje jen cesty poskytovatele FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Cesta: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Příkaz nejde spustit, protože parametr AsString vyžaduje zadání parametru AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Příkaz nejde spustit, protože při použití parametru AsHashTable s více než jednou vlastností je nutné přidat parametr AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Cesta {0} se nenašla, protože neexistuje.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Značku {0} nejde použít. Předpona PS je rezervovaná.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Soubor {0} se nepovedlo analyzovat jako datový soubor PowerShellu.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Z daného SDDL nejde vytvořit popisovač zabezpečení kvůli následující chybě: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Rutina Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Blok skriptu rutiny Invoke-Expression se spustí v režimu ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/VariableCommandStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/VariableCommandStrings.cs.resx
new file mode 100644
index 00000000000..3497e287da1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/VariableCommandStrings.cs.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Nastavit proměnnou</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Název: {0} Hodnota: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Použijte jednu proměnnou místo kolekce</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nová proměnná</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Název: {0} Hodnota: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Odebrat proměnnou</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Název: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Vymazat proměnnou</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Název: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WebCmdletStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WebCmdletStrings.cs.resx
new file mode 100644
index 00000000000..89eaa6df2fe
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WebCmdletStrings.cs.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>Přístup k cestě {0} se zamítl.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteErrorStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteErrorStrings.cs.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteErrorStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteProgressResourceStrings.cs.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteProgressResourceStrings.cs.resx
new file mode 100644
index 00000000000..22fa2809b6b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/cs/WriteProgressResourceStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Text popisující aktivitu, pro kterou se hlásí průběh</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Text popisující aktuální stav aktivity, pro kterou se hlásí průběh</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Zpracovávání</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddMember.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddMember.de.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddMember.de.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddTypeStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddTypeStrings.de.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AddTypeStrings.de.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/AliasCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AliasCommandStrings.de.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/AliasCommandStrings.de.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertFromStringData.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertFromStringData.de.resx
new file mode 100644
index 00000000000..dc3ff5d1261
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertFromStringData.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>Die Datenzeile „{0}“ weist nicht das Format „name=value“ auf. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>Das Datenelement „{1}“ in Zeile „{0}“ ist bereits definiert. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertHTMLStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertHTMLStrings.de.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertHTMLStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertMarkdownStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertMarkdownStrings.de.resx
new file mode 100644
index 00000000000..f4957176502
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ConvertMarkdownStrings.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Der Typ des Eingabeobjekts „{0}“ ist ungültig.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Es werden nur FileSystem Provider-Pfade unterstützt. Der Dateipfad wird nicht unterstützt: „{0}“.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>Die Eigenschaft {0} des angegebenen Objekts ist NULL oder leer.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Ungültiger Parametersatzname: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/CsvCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/CsvCommandStrings.de.resx
new file mode 100644
index 00000000000..b8f95b9e80a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/CsvCommandStrings.de.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>CSV-Inhalt kann nicht an die folgende Datei angefügt werden: {1}. Das angefügte Objekt verfügt nicht über eine Eigenschaft, die der folgenden Spalte entspricht: {0}. Um mit nicht übereinstimmenden Eigenschaften fortzufahren, fügen Sie den -Force-Parameter hinzu, und wiederholen Sie dann den Befehl.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>Sie müssen entweder die Parameter -UseQuotes oder -QuoteFields angeben, aber nicht beides.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>Sie müssen entweder die Parameter -Path oder -LiteralPath angeben, aber nicht beides.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>Mindestens ein Header wurde nicht angegeben. Standardnamen, die mit „H“ beginnen, wurden anstelle fehlender Header verwendet.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName ist ein obligatorischer Parameter.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>Die ReconcilePreexistingPropertyNames-Methode sollte nur beim Anfügen aufgerufen werden.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>Die ReconcilePreexistingPropertyNames-Methode sollte nur aufgerufen werden, wenn bereits vorhandene Eigenschaftsnamen erfolgreich gelesen wurden.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>Die BuildPropertyNames-Methode sollte nur einmal pro cmdlet-Instanz aufgerufen werden.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Die Typhierarchie darf keine NULL-Werte enthalten.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF ist erreicht.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>Sie müssen entweder die Parameter -Append oder -NoHeader angeben, aber nicht beide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/Debugger.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/Debugger.de.resx
new file mode 100644
index 00000000000..f9593efbe5a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/Debugger.de.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Die Datei '{0}' ist nicht vorhanden.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/EventingStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/EventingStrings.de.resx
new file mode 100644
index 00000000000..321f6f67e70
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/EventingStrings.de.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Abonnement kündigen</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Entfernen</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/FormatAndOut_out_gridview.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/FormatAndOut_out_gridview.de.resx
new file mode 100644
index 00000000000..2061c2617b2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/FormatAndOut_out_gridview.de.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Wert</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetFormatDataStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetFormatDataStrings.de.resx
new file mode 100644
index 00000000000..e3bfa4be97c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetFormatDataStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Die Ansichtsdefinition „{0}“ wird verarbeitet</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetMember.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetMember.de.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetMember.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetRandomCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetRandomCommandStrings.de.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetRandomCommandStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetUptimeStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetUptimeStrings.de.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/GetUptimeStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/HostStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/HostStrings.de.resx
new file mode 100644
index 00000000000..a8151e4a5cc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/HostStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Die Farbe kann nicht verarbeitet werden, da {0} keine gültige Farbe ist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/HttpCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/HttpCommandStrings.de.resx
new file mode 100644
index 00000000000..6cb7165bdae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/HttpCommandStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Dieser Befehl kann aufgrund des folgenden Fehlers nicht abgeschlossen werden: „{0}“.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImplicitRemotingStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImplicitRemotingStrings.de.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImplicitRemotingStrings.de.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImportLocalizedDataStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImportLocalizedDataStrings.de.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/ImportLocalizedDataStrings.de.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/MatchStringStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/MatchStringStrings.de.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/MatchStringStrings.de.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/MeasureObjectStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/MeasureObjectStrings.de.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/MeasureObjectStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/NewObjectStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/NewObjectStrings.de.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/NewObjectStrings.de.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/OutPrinterDisplayStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/OutPrinterDisplayStrings.de.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/OutPrinterDisplayStrings.de.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/SelectObjectStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SelectObjectStrings.de.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SelectObjectStrings.de.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/SendMailMessageStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SendMailMessageStrings.de.resx
new file mode 100644
index 00000000000..795e1f8b017
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SendMailMessageStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>Die E-Mail kann nicht gesendet werden, da kein SMTP-Server angegeben wurde. Sie müssen einen SMTP-Server angeben, indem Sie entweder den SmtpServer-Parameter oder die $PSEmailServer Variable verwenden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/SortObjectStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SortObjectStrings.de.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/SortObjectStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/StartSleepStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/StartSleepStrings.de.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/StartSleepStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/TestJsonCmdletStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/TestJsonCmdletStrings.de.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/TestJsonCmdletStrings.de.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/TraceCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/TraceCommandStrings.de.resx
new file mode 100644
index 00000000000..298837b2c29
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/TraceCommandStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>Die Ablaufverfolgungsausgabe kann nur in das Dateisystem geschrieben werden. Der Pfad „{0}“ verweist auf einen „{1}“-Anbieterpfad.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>Die Ablaufverfolgungsausgabe kann nur in eine einzelne Datei geschrieben werden. Der Pfad „{0}“ wurde in mehr als eine Datei aufgelöst.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/UnblockFileStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UnblockFileStrings.de.resx
new file mode 100644
index 00000000000..b48d9adbba4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UnblockFileStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Linux wird vom cmdlet nicht unterstützt.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Fehler beim Aufheben der Blockierung von {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateDataStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateDataStrings.de.resx
new file mode 100644
index 00000000000..2524db1af95
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateDataStrings.de.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Die Datei kann nicht geöffnet werden, da der aktuelle Anbieter „{0}“ ist, und dieser Befehl eine Datei erfordert.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Die Datei „{0}“ kann nicht gelesen werden, da sie nicht die Dateinamenerweiterung „{1}“ hat.</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>TypeData aktualisieren</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>FormatData aktualisieren</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Ein Member vom Typ „{0}“ kann nicht aktualisiert werden. Geben Sie für den Parameter MemberType einen anderen Typ an.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>Der {0}-Parameter ist für den Typ „{1}“ erforderlich. Geben Sie den {0}-Parameter an.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>Der {0}-Parameter darf für einen Member vom Typ „{1}“ nicht NULL oder eine leere Zeichenfolge sein. Geben Sie beim Aktualisieren dieses Membertyps für den {0}-Parameter einen Wert ungleich NULL an.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>Der {0}-Parameter ist für einen Member vom Typ „{1}“ nicht erforderlich und sollte nicht angegeben werden. Geben Sie den {0}-Parameter nicht an, wenn Sie diesen Membertyp aktualisieren.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Für die Aktualisierung des Typs „{0}“ ist kein Member angegeben.</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>Der Zieltypname darf nicht NULL oder leer sein oder nur Leerzeichen enthalten.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Die Value- und SecondValue-Parameter dürfen für einen Member vom Typ „{0}“ nicht beide NULL sein. Geben Sie für einen der beiden Parameter einen Wert ungleich NULL an.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Es kann nur ein Membertyp angegeben werden. Die angegebenen Membertypen sind: „{0}“. Aktualisieren Sie den Typ nur mit einem Membertyp.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Die MemberName-, Value- und SecondValue-Parameter können nicht ohne den MemberType-Parameter angegeben werden.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>TypeData entfernen</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name des zu entfernenden Typs: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Zu aktualisierender Typ: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Typdatei entfernen</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>Die Datei „{0}“ wird nicht in die aktuelle Sitzung importiert.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Das Aktualisieren von Formatdaten ist in diesem Runspace nicht zulässig. Die Eigenschaft „DisableFormatUpdates“ wird beim Erstellen des Runspace auf TRUE festgelegt.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Die Formatdaten können nicht mithilfe einer Instanz der FormatTable aktualisiert werden.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Die Typdaten können nicht mithilfe einer TypeTable-Instanz aktualisiert werden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateListStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateListStrings.de.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UpdateListStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/UtilityCommonStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UtilityCommonStrings.de.resx
new file mode 100644
index 00000000000..eb88c6e1706
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/UtilityCommonStrings.de.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} weist mindestens eine ungültige Ausnahme auf.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da der Dateipfad „{0}“ ungültig ist. Geben Sie einen gültigen Dateipfad an, und führen Sie dann den Befehl aus.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da „{0}“ leer oder nicht ausgefüllt ist. Geben Sie CSSUri an, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Die Datei kann nicht geöffnet werden, da der aktuelle Anbieter ({0}) keine Dateien öffnen kann.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da der Präfixwert im Namespace-Parameter Null ist. Geben Sie einen gültigen Wert für das Präfix an, und führen Sie den Befehl dann erneut aus.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Die nach dieser Eigenschaft gruppierten Objekte können nicht erweitert werden, da eine Schlüsselduplizierung vorliegt. Geben Sie einen gültigen Wert für die Eigenschaft an, und wiederholen Sie dann den Vorgang.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Der Befehl wird unter diesem Betriebssystem nicht unterstützt.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Die Datei „{0}“ kann nicht gelesen werden: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Die Eingabe vom Typ „{0}“ kann nicht in hexadezimale Eingaben konvertiert werden. Um die hexadezimale Formatierung der Zeichenfolgendarstellung anzuzeigen, übergeben Sie sie an das Out-String-cmdlet, bevor Sie sie an Format-Hex weiterleiten.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Der angegebene Pfad „{0}“ wird nicht unterstützt. Dieser Befehl unterstützt nur die FileSystem Provider-Pfade.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Pfad: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Der Befehl kann nicht ausgeführt werden, da der AsString-Parameter erfordert, dass Sie den AsHashtable-Parameter angeben.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Der Befehl kann nicht ausgeführt werden, da für die Verwendung des AsHashTable-Parameters mit mehreren Eigenschaften der AsString-Parameter hinzugefügt werden muss.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Der Pfad "{0}" wurde nicht gefunden, da er nicht vorhanden ist.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Das Tag „{0}“ kann nicht verwendet werden. Das Präfix „PS“ ist reserviert.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Die Datei „{0}“ konnte nicht als PowerShell-Datendatei analysiert werden.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Aufgrund des folgenden Fehlers kann keine Sicherheitsbeschreibung aus der angegebenen SDDL erstellt werden: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Der Skriptblock des cmdlets „Invoke-Expression“ wird im ConstrainedLanguage-Modus ausgeführt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/VariableCommandStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/VariableCommandStrings.de.resx
new file mode 100644
index 00000000000..8d2587c1efe
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/VariableCommandStrings.de.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Variable festlegen</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Name: {0} Wert: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Verwenden einer einzelnen Variablen anstelle einer Auflistung</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Neue Variable</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Name: {0} Wert: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Variable entfernen</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Variable löschen</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/WebCmdletStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WebCmdletStrings.de.resx
new file mode 100644
index 00000000000..2e7d6752493
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WebCmdletStrings.de.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>Der Zugriff auf den Pfad "{0}" wird verweigert.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteErrorStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteErrorStrings.de.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteErrorStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteProgressResourceStrings.de.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteProgressResourceStrings.de.resx
new file mode 100644
index 00000000000..c25dea6cf0d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/de/WriteProgressResourceStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Text zur Beschreibung der Aktivität, für die der Fortschritt gemeldet wird.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Text, der den aktuellen Status der Aktivität beschreibt, für die der Fortschritt gemeldet wird.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Wird verarbeitet</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddMember.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddMember.es.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddMember.es.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddTypeStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddTypeStrings.es.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AddTypeStrings.es.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/AliasCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AliasCommandStrings.es.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/AliasCommandStrings.es.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertFromStringData.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertFromStringData.es.resx
new file mode 100644
index 00000000000..eef3a91fada
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertFromStringData.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>La línea de datos "{0}" no está en formato "nombre=valor". </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>El elemento de datos "{1}" de la línea "{0}" ya está definido. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertHTMLStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertHTMLStrings.es.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertHTMLStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertMarkdownStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertMarkdownStrings.es.resx
new file mode 100644
index 00000000000..45c7b84a2b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ConvertMarkdownStrings.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>El tipo del objeto de entrada "{0}" no es válido.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Solo se admiten rutas de acceso del proveedor FileSystem. No se admite la ruta de archivo: "{0}".</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>La propiedad {0} del objeto especificado está vacía o es null.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>El nombre del conjunto de parámetros no es válido: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/CsvCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/CsvCommandStrings.es.resx
new file mode 100644
index 00000000000..597399f29ea
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/CsvCommandStrings.es.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>No se puede anexar contenido CSV al siguiente archivo: {1}. El objeto anexado no tiene una propiedad que corresponda a la siguiente columna: {0}. Para continuar con las propiedades no coincidentes, agregue el parámetro -Force y vuelva a intentar el comando.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>Debe especificar los parámetros -UseQuotes o -QuoteFields, pero no ambos.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>Debe especificar los parámetros -Path o -LiteralPath, pero no ambos.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>No se especificaron uno o varios encabezados. Los nombres predeterminados que empiezan por "H" se han usado en lugar de los encabezados que faltan.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName es un parámetro obligatorio.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>Solo se debe llamar al método ReconcilePreexistingPropertyNames al anexar.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>Solo se debe llamar al método ReconcilePreexistingPropertyNames cuando los nombres de propiedad preexistente se hayan leído correctamente.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>Solo se debe llamar al método BuildPropertyNames una vez por instancia de cmdlet.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>La jerarquía de tipos no debe tener valores NULL.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>Se ha alcanzado EOF.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>Debe especificar los parámetros -Append o -NoHeader, pero no ambos.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/Debugger.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/Debugger.es.resx
new file mode 100644
index 00000000000..4aad039409e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/Debugger.es.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>El archivo '{0}' no existe.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/EventingStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/EventingStrings.es.resx
new file mode 100644
index 00000000000..68a01c7ea69
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/EventingStrings.es.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Cancelar suscripción</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Quitar</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/FormatAndOut_out_gridview.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/FormatAndOut_out_gridview.es.resx
new file mode 100644
index 00000000000..1ded52b6cf1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/FormatAndOut_out_gridview.es.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Valor</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetFormatDataStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetFormatDataStrings.es.resx
new file mode 100644
index 00000000000..b03891f2b03
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetFormatDataStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Procesando la definición de vista "{0}"</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetMember.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetMember.es.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetMember.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetRandomCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetRandomCommandStrings.es.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetRandomCommandStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetUptimeStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetUptimeStrings.es.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/GetUptimeStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/HostStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/HostStrings.es.resx
new file mode 100644
index 00000000000..de2f8f2dc92
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/HostStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>No se puede procesar el color porque {0} no es un color válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/HttpCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/HttpCommandStrings.es.resx
new file mode 100644
index 00000000000..cb18e6589ae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/HttpCommandStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>This command cannot be completed due to the following error: '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImplicitRemotingStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImplicitRemotingStrings.es.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImplicitRemotingStrings.es.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImportLocalizedDataStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImportLocalizedDataStrings.es.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/ImportLocalizedDataStrings.es.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/MatchStringStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/MatchStringStrings.es.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/MatchStringStrings.es.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/MeasureObjectStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/MeasureObjectStrings.es.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/MeasureObjectStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/NewObjectStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/NewObjectStrings.es.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/NewObjectStrings.es.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/OutPrinterDisplayStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/OutPrinterDisplayStrings.es.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/OutPrinterDisplayStrings.es.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/SelectObjectStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SelectObjectStrings.es.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SelectObjectStrings.es.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/SendMailMessageStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SendMailMessageStrings.es.resx
new file mode 100644
index 00000000000..a099c436291
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SendMailMessageStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>No se puede enviar el correo electrónico porque no se especificó ningún servidor SMTP. Debe especificar un servidor SMTP mediante el parámetro SmtpServer o la variable $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/SortObjectStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SortObjectStrings.es.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/SortObjectStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/StartSleepStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/StartSleepStrings.es.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/StartSleepStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/TestJsonCmdletStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/TestJsonCmdletStrings.es.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/TestJsonCmdletStrings.es.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/TraceCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/TraceCommandStrings.es.resx
new file mode 100644
index 00000000000..5f2b76f9777
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/TraceCommandStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>La salida de seguimiento solo se puede escribir en el sistema de archivos. La ruta de acceso ''{0}'' se refiere a una ruta de proveedor de ''{1}''.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>La salida de seguimiento solo se puede escribir en un único archivo. La ruta de acceso ''{0}'' resuelve en más de un archivo.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/UnblockFileStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UnblockFileStrings.es.resx
new file mode 100644
index 00000000000..8785ba77912
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UnblockFileStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>El cmdlet no admite Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Se produjo un error al desbloquear {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateDataStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateDataStrings.es.resx
new file mode 100644
index 00000000000..b3f1289174a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateDataStrings.es.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>No se puede abrir el archivo porque el proveedor actual es "{0}" y este comando requiere un archivo.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>No se puede leer el archivo "{0}" porque no tiene la extensión de nombre de archivo "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Actualizar TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Actualizar FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>Nombre de archivo: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>No se puede actualizar un miembro con el tipo "{0}". Especifique un tipo diferente para el parámetro MemberType.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>El parámetro {0} es necesario para el tipo "{1}". Especifique el parámetro {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>El parámetro {0} no debe ser nulo ni una cadena vacía para un miembro de tipo "{1}". Especifique un valor distinto de NULL para el parámetro {0} al actualizar este tipo de miembro.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>El parámetro {0} no es necesario para un miembro de tipo "{1}" y no se debe especificar. No especifique el parámetro {0} al actualizar este tipo de miembro.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No se especificó ningún miembro para la actualización en el tipo "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>El nombre del tipo de destino no debe ser nulo, estar vacío ni contener solo espacios en blanco.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Los parámetros Value y SecondValue no deben ser nulos para un miembro de tipo "{0}". Especifique un valor distinto de NULL para uno de los dos parámetros.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Solo se puede especificar un tipo de miembro. Los tipos de miembro especificados son: "{0}". Actualice el tipo con un solo tipo de miembro.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Los parámetros MemberName, Value y SecondValue no se pueden especificar sin el parámetro MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Quitar TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Nombre del tipo que se quitará: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Escriba para actualizar: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Quitar archivo de tipo</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>El archivo {0} no se importa en la sesión actual.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>No se permite actualizar los datos de formato en este espacio de ejecución. La propiedad 'DisableFormatUpdates' se establece en True al crear el espacio de ejecución.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>No se pueden actualizar los datos de formato con una instancia de FormatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>No se pueden actualizar los datos de tipo con una instancia de TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateListStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateListStrings.es.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UpdateListStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/UtilityCommonStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UtilityCommonStrings.es.resx
new file mode 100644
index 00000000000..1c71e7c0ab6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/UtilityCommonStrings.es.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} tiene una o varias excepciones que no son válidas.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque la ruta de acceso del archivo "{0}" no es válida. Proporcione una ruta de acceso de archivo válida y, a continuación, ejecute el comando.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque "{0}" está vacío o en blanco. Especifique CSSUri y, a continuación, ejecute el comando.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>No se puede abrir el archivo porque el proveedor actual ({0}) no puede abrir archivos.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque el valor de prefijo del parámetro Namespace es null. Proporcione un valor válido para el prefijo y, a continuación, vuelva a ejecutar el comando.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Los objetos agrupados por esta propiedad no se pueden expandir porque hay una duplicación de claves. Proporcione un valor válido para la propiedad y vuelva a intentarlo.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>El comando no se admite en este sistema operativo.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>No se puede leer el archivo "{0}": {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>No se puede convertir la entrada de tipo "{0}" a hexadecimal. Para ver el formato hexadecimal de su representación de cadena, canalícela al cmdlet Out-String antes de canalizarla a Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>No se admite la ruta de acceso especificada "{0}". Este comando solo admite las rutas de acceso del proveedor FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Ruta: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>No se puede ejecutar el comando porque el parámetro AsString requiere que especifique el parámetro AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>No se puede ejecutar el comando porque, para usar el parámetro AsHashTable con más de una propiedad, debe agregar el parámetro AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>No se encuentra la ruta de acceso '{0}' porque no existe.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>No se puede usar la etiqueta "{0}". El prefijo "PS" está reservado.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>No se pudo analizar el archivo "{0}" como un archivo de datos de PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>No se puede construir un descriptor de seguridad a partir del SDDL especificado debido al siguiente error: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Cmdlet Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>El bloque de script del cmdlet Invoke-Expression se ejecutará en modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/VariableCommandStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/VariableCommandStrings.es.resx
new file mode 100644
index 00000000000..15a5ca10025
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/VariableCommandStrings.es.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Establecer variable</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Nombre: {0} Valor: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Usar una sola variable en lugar de una colección</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nueva variable</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Nombre: {0} Valor: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Quitar variable</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Nombre: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Borrar variable</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Nombre: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/WebCmdletStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WebCmdletStrings.es.resx
new file mode 100644
index 00000000000..97000e62d05
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WebCmdletStrings.es.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>Se ha denegado el acceso a la ruta '{0}'.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteErrorStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteErrorStrings.es.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteErrorStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteProgressResourceStrings.es.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteProgressResourceStrings.es.resx
new file mode 100644
index 00000000000..dbf919975b1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/es/WriteProgressResourceStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Texto para describir la actividad para la que se notifica el progreso.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Texto para describir el estado actual de la actividad sobre la que se informa del progreso.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Procesando</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddMember.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddMember.fr.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddMember.fr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddTypeStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddTypeStrings.fr.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AddTypeStrings.fr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AliasCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AliasCommandStrings.fr.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/AliasCommandStrings.fr.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertFromStringData.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertFromStringData.fr.resx
new file mode 100644
index 00000000000..eb8e39ef728
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertFromStringData.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>La ligne de données « {0} » n’est pas au format « name=value ». </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>L’élément de données « {1} » dans la ligne « {0} » est déjà défini. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertHTMLStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertHTMLStrings.fr.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertHTMLStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertMarkdownStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertMarkdownStrings.fr.resx
new file mode 100644
index 00000000000..00962209f7a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ConvertMarkdownStrings.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Le type de l’objet d’entrée « {0} » n’est pas valide.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Seuls les chemins du fournisseur FileSystem sont pris en charge. Le chemin d’accès au fichier n’est pas pris en charge : « {0} ».</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>La propriété {0} de l’objet donné est null ou vide.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Nom du jeu de paramètres non valide : {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/CsvCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/CsvCommandStrings.fr.resx
new file mode 100644
index 00000000000..98568bed456
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/CsvCommandStrings.fr.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Cannot append CSV content to the following file: {1}. The appended object does not have a property that corresponds to the following column: {0}. To continue with mismatched properties, add the -Force parameter, and then retry the command.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>You must specify either the -UseQuotes or -QuoteFields parameters, but not both.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>You must specify either the -Path or -LiteralPath parameters, but not both.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>One or more headers were not specified. Default names starting with "H" have been used in place of any missing headers.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName is a mandatory parameter.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when appending.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when preexisting property names have been read successfully.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames method should be called only once per cmdlet instance.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Type hierarchy should not have null values.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF is reached.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>You must specify either the -Append or -NoHeader parameters, but not both.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/Debugger.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/Debugger.fr.resx
new file mode 100644
index 00000000000..d4704b63137
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/Debugger.fr.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Le fichier « {0} » n'existe pas.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/EventingStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/EventingStrings.fr.resx
new file mode 100644
index 00000000000..0f8afe18853
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/EventingStrings.fr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Se désabonner</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Supprimer</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/FormatAndOut_out_gridview.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/FormatAndOut_out_gridview.fr.resx
new file mode 100644
index 00000000000..c2a09dd7168
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/FormatAndOut_out_gridview.fr.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Valeur</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetFormatDataStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetFormatDataStrings.fr.resx
new file mode 100644
index 00000000000..1defd23f8ad
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetFormatDataStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Traitement de la définition de vue « {0} »</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetMember.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetMember.fr.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetMember.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetRandomCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetRandomCommandStrings.fr.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetRandomCommandStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetUptimeStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetUptimeStrings.fr.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/GetUptimeStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HostStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HostStrings.fr.resx
new file mode 100644
index 00000000000..c13fee13a67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HostStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter la couleur, car {0} n’est pas une couleur valide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HttpCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HttpCommandStrings.fr.resx
new file mode 100644
index 00000000000..cb18e6589ae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/HttpCommandStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>This command cannot be completed due to the following error: '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImplicitRemotingStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImplicitRemotingStrings.fr.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImplicitRemotingStrings.fr.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImportLocalizedDataStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImportLocalizedDataStrings.fr.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/ImportLocalizedDataStrings.fr.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MatchStringStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MatchStringStrings.fr.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MatchStringStrings.fr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MeasureObjectStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MeasureObjectStrings.fr.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/MeasureObjectStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/NewObjectStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/NewObjectStrings.fr.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/NewObjectStrings.fr.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/OutPrinterDisplayStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/OutPrinterDisplayStrings.fr.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/OutPrinterDisplayStrings.fr.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SelectObjectStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SelectObjectStrings.fr.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SelectObjectStrings.fr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SendMailMessageStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SendMailMessageStrings.fr.resx
new file mode 100644
index 00000000000..518ae60795b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SendMailMessageStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>L’e-mail ne peut pas être envoyé car aucun serveur SMTP n’a été spécifié. Vous devez spécifier un serveur SMTP à l’aide du paramètre SmtpServer ou de la variable $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SortObjectStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SortObjectStrings.fr.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/SortObjectStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/StartSleepStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/StartSleepStrings.fr.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/StartSleepStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TestJsonCmdletStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TestJsonCmdletStrings.fr.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TestJsonCmdletStrings.fr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TraceCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TraceCommandStrings.fr.resx
new file mode 100644
index 00000000000..31af68598ba
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/TraceCommandStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>La sortie de trace ne peut être écrite que dans le système de fichiers. Le chemin d’accès « {0} » fait référence à un chemin d’accès de fournisseur « {1} ».</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>La sortie de trace ne peut être écrite que dans un seul fichier. Le chemin d’accès « {0} » a été résolu en plusieurs fichiers.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UnblockFileStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UnblockFileStrings.fr.resx
new file mode 100644
index 00000000000..5ecd31b7e84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UnblockFileStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>La cmdlet ne prend pas en charge Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Une erreur s’est produite lors du déblocage {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateDataStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateDataStrings.fr.resx
new file mode 100644
index 00000000000..f0754aa54d4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateDataStrings.fr.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Cannot open the file because the current provider is "{0}", and this command requires a file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Cannot read the file "{0}"  because it does not have the file name extension "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>The {0} parameter should not be null or an empty string for a member of type "{1}". Specify a non-null value for the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is not necessary for a member of type "{1}", and should not be specified. Do not specify the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No member is specified for the update on type "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>The target type name should not be null, empty, or contain only white spaces.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>The Value and SecondValue parameters should not both be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Only one member type can be specified. The member types specified are: "{0}". Update the type with only one member type.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>The MemberName, Value, and SecondValue parameters cannot be specified without the MemberType parameter.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name of the type that will be removed: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Type to update: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remove type file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>The file {0} is not imported into the current session.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Updating format data is not allowed in this runspace. The 'DisableFormatUpdates' property is set to True when creating the runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Cannot update the format data with a FormatTable instance.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Cannot update the type data with a TypeTable instance.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateListStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateListStrings.fr.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UpdateListStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UtilityCommonStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UtilityCommonStrings.fr.resx
new file mode 100644
index 00000000000..313e63f7db8
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/UtilityCommonStrings.fr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} comporte une ou plusieurs exceptions non valides.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Nous ne pouvons pas exécuter cette commande, car le chemin d’accès au fichier « {0} » n’est pas valide. Indiquez un chemin d’accès au fichier valide, puis exécutez la commande.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Nous ne pouvons pas exécuter cette commande, car « {0} » est vide ou blanc. Veuillez spécifier CSSUri, puis exécutez la commande.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Nous ne pouvons pas ouvrir le fichier, car le fournisseur actuel ({0}) ne peut pas ouvrir de fichiers.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Nous ne pouvons pas exécuter cette commande, car la valeur de préfixe du paramètre Namespace est null. Fournissez une valeur valide pour le préfixe, puis exécutez de nouveau la commande.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Les objets regroupés par cette propriété ne peuvent pas être développés, car une clé est en double. Fournissez une valeur valide pour la propriété, puis réessayez.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>La commande n’est pas prise en charge sur ce système d’exploitation.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Le fichier « {0} » ne peut pas être lu : {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Nous ne pouvons pas convertir une entrée de type « {0} » en hexadécimal. Pour afficher la mise en forme hexadécimale de sa représentation sous forme de chaîne, redirigez-la vers l’applet de commande Out-String avant de la rediriger vers Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Le chemin d’accès donné « {0} » n’est pas pris en charge. Cette commande prend en charge uniquement les chemins d’accès du fournisseur FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Chemin d’accès : </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Nous ne pouvons pas exécuter la commande, car le paramètre AsString nécessite de spécifier le paramètre AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Nous ne pouvons pas exécuter la commande, car l’utilisation du paramètre AsHashTable avec plusieurs propriétés nécessite d’ajouter le paramètre AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Impossible de trouver le chemin d'accès « {0} », car il n'existe pas.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Vous ne pouvez pas utiliser la balise : « {0} ». Le préfixe « PS » est réservé.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Le fichier « {0} » n’a pas pu être analysé en tant que fichier de données PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Nous ne pouvons pas construire un descripteur de sécurité à partir du SDDL fourni en raison de l’erreur suivante : {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Le bloc de script de l’applet de commande Invoke-Expression s’exécutera en mode ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/VariableCommandStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/VariableCommandStrings.fr.resx
new file mode 100644
index 00000000000..ca6f484e5f6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/VariableCommandStrings.fr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Définissez une variable</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Nom : {0}Valeur : {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Utilisez une seule variable plutôt qu’une collection</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nouvelle variable</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Nom : {0}Valeur : {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Supprimer une variable</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Nom : {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Effacer la variable</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Nom : {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WebCmdletStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WebCmdletStrings.fr.resx
new file mode 100644
index 00000000000..004617b35fa
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WebCmdletStrings.fr.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>L'accès au chemin '{0}' est refusé.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteErrorStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteErrorStrings.fr.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteErrorStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteProgressResourceStrings.fr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteProgressResourceStrings.fr.resx
new file mode 100644
index 00000000000..e66cdb10022
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/fr/WriteProgressResourceStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Texte décrivant l’activité pour laquelle l’avancement est signalé.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Texte décrivant l’état actuel de l’activité pour laquelle l’avancement est signalé.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Traitement</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddMember.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddMember.it.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddMember.it.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddTypeStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddTypeStrings.it.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AddTypeStrings.it.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/AliasCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AliasCommandStrings.it.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/AliasCommandStrings.it.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertFromStringData.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertFromStringData.it.resx
new file mode 100644
index 00000000000..bfeba170a2a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertFromStringData.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>La riga di dati "{0}" non è nel formato "nome=valore". </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>L'elemento di dati "{1}" nella riga "{0}" è già definito. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertHTMLStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertHTMLStrings.it.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertHTMLStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertMarkdownStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertMarkdownStrings.it.resx
new file mode 100644
index 00000000000..08b4e072260
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ConvertMarkdownStrings.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Il tipo dell'oggetto di input ''{0}'' non è valido.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Sono supportati solo i percorsi del provider FileSystem. Il percorso del file non è supportato: ''{0}''.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>La proprietà {0} dell'oggetto specificato è null o vuota.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Nome del set di parametri non valido: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/CsvCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/CsvCommandStrings.it.resx
new file mode 100644
index 00000000000..98568bed456
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/CsvCommandStrings.it.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Cannot append CSV content to the following file: {1}. The appended object does not have a property that corresponds to the following column: {0}. To continue with mismatched properties, add the -Force parameter, and then retry the command.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>You must specify either the -UseQuotes or -QuoteFields parameters, but not both.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>You must specify either the -Path or -LiteralPath parameters, but not both.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>One or more headers were not specified. Default names starting with "H" have been used in place of any missing headers.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName is a mandatory parameter.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when appending.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when preexisting property names have been read successfully.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames method should be called only once per cmdlet instance.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Type hierarchy should not have null values.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF is reached.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>You must specify either the -Append or -NoHeader parameters, but not both.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/Debugger.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/Debugger.it.resx
new file mode 100644
index 00000000000..d5dfffa76e6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/Debugger.it.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Il file '{0}' non esiste.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/EventingStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/EventingStrings.it.resx
new file mode 100644
index 00000000000..c4a768163d9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/EventingStrings.it.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Annulla la sottoscrizione</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Rimuovi</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/FormatAndOut_out_gridview.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/FormatAndOut_out_gridview.it.resx
new file mode 100644
index 00000000000..6964f72d705
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/FormatAndOut_out_gridview.it.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Valore</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetFormatDataStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetFormatDataStrings.it.resx
new file mode 100644
index 00000000000..c7c49b8e7de
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetFormatDataStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Elaborazione della definizione della vista ''{0}''</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetMember.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetMember.it.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetMember.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetRandomCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetRandomCommandStrings.it.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetRandomCommandStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetUptimeStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetUptimeStrings.it.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/GetUptimeStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/HostStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/HostStrings.it.resx
new file mode 100644
index 00000000000..6972ece93c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/HostStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Cannot process the color because {0} is not a valid color.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/HttpCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/HttpCommandStrings.it.resx
new file mode 100644
index 00000000000..4ffef6614bd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/HttpCommandStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Non è possibile completare il comando a causa dell'errore seguente: ''{0}''.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImplicitRemotingStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImplicitRemotingStrings.it.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImplicitRemotingStrings.it.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImportLocalizedDataStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImportLocalizedDataStrings.it.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/ImportLocalizedDataStrings.it.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/MatchStringStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/MatchStringStrings.it.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/MatchStringStrings.it.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/MeasureObjectStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/MeasureObjectStrings.it.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/MeasureObjectStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/NewObjectStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/NewObjectStrings.it.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/NewObjectStrings.it.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/OutPrinterDisplayStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/OutPrinterDisplayStrings.it.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/OutPrinterDisplayStrings.it.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/SelectObjectStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SelectObjectStrings.it.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SelectObjectStrings.it.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/SendMailMessageStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SendMailMessageStrings.it.resx
new file mode 100644
index 00000000000..83d2d662ddc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SendMailMessageStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>Non è possibile inviare il messaggio e-mail perché non è stato specificato alcun server SMTP. È necessario specificare un server SMTP usando il parametro SmtpServer o la variabile $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/SortObjectStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SortObjectStrings.it.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/SortObjectStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/StartSleepStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/StartSleepStrings.it.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/StartSleepStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/TestJsonCmdletStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/TestJsonCmdletStrings.it.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/TestJsonCmdletStrings.it.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/TraceCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/TraceCommandStrings.it.resx
new file mode 100644
index 00000000000..bc95d839f91
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/TraceCommandStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>L'output di traccia può essere scritto solo nel file system. Il percorso '{0}' fa riferimento a un percorso del provider '{1}'.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>L'output di traccia può essere scritto solo in un singolo file. Il percorso '{0}' è stato risolto in più file.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/UnblockFileStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UnblockFileStrings.it.resx
new file mode 100644
index 00000000000..100877f6ab4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UnblockFileStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Il cmdlet non supporta Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Si è verificato un errore durante la rimozione del blocco {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateDataStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateDataStrings.it.resx
new file mode 100644
index 00000000000..2b9426ad0a8
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateDataStrings.it.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Non è possibile aprire il file perché il provider corrente è "{0}" e questo comando richiede un file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Non è possibile leggere il file "{0}" perché non ha l'estensione "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Aggiorna TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Aggiorna FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Non è possibile aggiornare un membro con tipo "{0}". Specificare un tipo diverso per il parametro MemberType.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>Il parametro {0} è obbligatorio per il tipo "{1}". Specificare il parametro {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>Il parametro {0} non deve essere null o una stringa vuota per un membro di tipo "{1}". Specificare un valore non null per il parametro {0} quando si aggiorna questo tipo di membro.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>Il parametro {0} non è necessario per un membro di tipo "{1}" e non deve essere specificato. Non specificare il parametro {0} quando si aggiorna questo tipo di membro.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Nessun membro è specificato per l'aggiornamento sul tipo "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>Il nome del tipo di destinazione non deve essere null, vuoto o contenere solo spazi vuoti.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>I parametri Value e SecondValue non devono essere entrambi null per un membro di tipo "{0}". Specificare un valore non null per uno dei due parametri.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>È possibile specificare un solo tipo di membro. I tipi di membro specificati sono: "{0}". Aggiornare il tipo con un solo tipo di membro.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Non è possibile specificare parametri MemberName, Value e SecondValue senza il parametro MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Rimuovi TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Nome del tipo che verrà rimosso: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Tipo da aggiornare: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Rimuovi tipo di file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>Il file {0} non è stato importato nella sessione corrente.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>L'aggiornamento dei dati di formato non è consentito in questo spazio di esecuzione. La proprietà 'DisableFormatUpdates' è impostata su True durante la creazione dello spazio di esecuzione.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Non è possibile aggiornare i dati di formato con un'istanza di FormatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Non è possibile aggiornare i dati del tipo con un'istanza di TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateListStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateListStrings.it.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UpdateListStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/UtilityCommonStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UtilityCommonStrings.it.resx
new file mode 100644
index 00000000000..4463108dd8e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/UtilityCommonStrings.it.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} presenta una o più eccezioni non valide.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Questo comando non può essere eseguito perché il percorso del file "{0}" non è valido. Specificare un percorso di file valido e quindi eseguire il comando.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Questo comando non può essere eseguito perché "{0}" è vuoto o non contiene caratteri. Specificare CSSUri e quindi eseguire il comando.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Non è possibile aprire il file perché il provider corrente ({0}) non può aprire i file.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Questo comando non può essere eseguito perché il valore del prefisso nel parametro Namespace è Null. Specificare un valore valido per il prefisso e quindi eseguire di nuovo il comando.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Gli oggetti raggruppati in base a questa proprietà non possono essere espansi perché è presente una chiave duplicata. Specificare un valore valido per la proprietà e quindi riprovare.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Il comando non è supportato in questo sistema operativo.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Non è possibile leggere il file "{0}": {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Non è possibile convertire l'input di tipo "{0}" in esadecimale. Per visualizzare la formattazione esadecimale della relativa rappresentazione di stringa, inviarla tramite pipe al cmdlet Out-String prima di inviarla tramite pipe a Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Il percorso specificato "{0}" non è supportato. Questo comando supporta solo i percorsi del provider FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Percorso: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Non è possibile eseguire il comando perché il parametro AsString richiede di specificare il parametro AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Non è possibile eseguire il comando perché per usare il parametro AsHashTable con più di una proprietà è necessario aggiungere il parametro AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Non è possibile trovare il percorso '{0}' perché non esiste.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Non è possibile usare il tag "{0}". Il prefisso "PS" è riservato.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Non è possibile analizzare il file "{0}" come file di dati di PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Non è possibile creare un descrittore di sicurezza dall'SDDL specificato a causa dell'errore seguente: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Cmdlet Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Il blocco di script del cmdlet Invoke-Expression verrà eseguito in modalità ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/VariableCommandStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/VariableCommandStrings.it.resx
new file mode 100644
index 00000000000..1fbfda2431e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/VariableCommandStrings.it.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Imposta variabile</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Nome: {0} Valore: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Usare una singola variabile invece di una raccolta</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nuova variabile</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Nome: {0} Valore: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Rimuovi variabile</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Nome: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Cancella variabile</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Nome: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/WebCmdletStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WebCmdletStrings.it.resx
new file mode 100644
index 00000000000..9ec195be0b5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WebCmdletStrings.it.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>L'accesso al percorso '{0}' è stato negato.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteErrorStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteErrorStrings.it.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteErrorStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteProgressResourceStrings.it.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteProgressResourceStrings.it.resx
new file mode 100644
index 00000000000..848e353c1b0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/it/WriteProgressResourceStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Testo che descrive l'attività per cui viene segnalato lo stato di avanzamento.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Testo che descrive lo stato corrente dell'attività per cui viene segnalato lo stato di avanzamento.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Elaborazione</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddMember.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddMember.ja.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddMember.ja.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddTypeStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddTypeStrings.ja.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AddTypeStrings.ja.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AliasCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AliasCommandStrings.ja.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/AliasCommandStrings.ja.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertFromStringData.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertFromStringData.ja.resx
new file mode 100644
index 00000000000..9c8e13242b3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertFromStringData.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>データ行 '{0}' は 'name=value' 形式ではありません。</value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>行 '{0}' のデータ項目 '{1}' は既に定義されています。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertHTMLStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertHTMLStrings.ja.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertHTMLStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertMarkdownStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertMarkdownStrings.ja.resx
new file mode 100644
index 00000000000..0aab95b023b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ConvertMarkdownStrings.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>入力オブジェクト '{0}' の型が無効です。</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>FileSystem プロバイダー パスのみがサポートされています。ファイル パス '{0}' はサポートされていません。</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>指定されたオブジェクトのプロパティ {0} が null 値または空です。</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>無効なパラメーター セット名: {0}。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/CsvCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/CsvCommandStrings.ja.resx
new file mode 100644
index 00000000000..b3ecec46d6b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/CsvCommandStrings.ja.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>CSV コンテンツを次のファイルに追加できません: {1}。追加されたオブジェクトには、次の列に対応するプロパティがありません: {0}。一致しないプロパティを続行するには、-Force パラメーターを追加してから、コマンドを再試行してください。</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>-UseQuotes パラメーターまたは -QuoteFields パラメーターを指定する必要がありますが、両方を指定することはできません。</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>-Path パラメーター、または -LiteralPath パラメーターのいずれかを指定する必要がありますが、両方を指定することはできません。</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>1 つ以上のヘッダーが指定されませんでした。不足しているヘッダーの代わりに、"H" で始まる既定の名前が使用されています。</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName は必須パラメーターです。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames メソッドは、追加時にのみ呼び出されます。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames メソッドは、既存のプロパティ名が正常に読み取られた場合にのみ呼び出されます。</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames メソッドは、コマンドレット インスタンスごとに 1 回だけ呼び出す必要があります。</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>型階層に null 値を含めてはなりません。</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF に達しました。</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>-Append パラメーターまたは -NoHeader パラメーターを指定する必要がありますが、両方を指定することはできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/Debugger.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/Debugger.ja.resx
new file mode 100644
index 00000000000..bb3e7a77f25
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/Debugger.ja.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>ファイル '{0}' が存在しません。</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/EventingStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/EventingStrings.ja.resx
new file mode 100644
index 00000000000..29699742f4c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/EventingStrings.ja.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>受信登録の取り消し</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>削除</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/FormatAndOut_out_gridview.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/FormatAndOut_out_gridview.ja.resx
new file mode 100644
index 00000000000..01bffa924fb
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/FormatAndOut_out_gridview.ja.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>値</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetFormatDataStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetFormatDataStrings.ja.resx
new file mode 100644
index 00000000000..5c73654c618
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetFormatDataStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>ビュー定義 '{0}' を処理しています</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetMember.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetMember.ja.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetMember.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetRandomCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetRandomCommandStrings.ja.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetRandomCommandStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetUptimeStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetUptimeStrings.ja.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/GetUptimeStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HostStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HostStrings.ja.resx
new file mode 100644
index 00000000000..ed16d85df7e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HostStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>{0} が有効な色ではないため、色を処理できません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HttpCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HttpCommandStrings.ja.resx
new file mode 100644
index 00000000000..35bb2013d4d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/HttpCommandStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>次のエラーのため、このコマンドを完了できません: '{0}'。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImplicitRemotingStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImplicitRemotingStrings.ja.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImplicitRemotingStrings.ja.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImportLocalizedDataStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImportLocalizedDataStrings.ja.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/ImportLocalizedDataStrings.ja.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MatchStringStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MatchStringStrings.ja.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MatchStringStrings.ja.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MeasureObjectStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MeasureObjectStrings.ja.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/MeasureObjectStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/NewObjectStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/NewObjectStrings.ja.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/NewObjectStrings.ja.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/OutPrinterDisplayStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/OutPrinterDisplayStrings.ja.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/OutPrinterDisplayStrings.ja.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SelectObjectStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SelectObjectStrings.ja.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SelectObjectStrings.ja.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SendMailMessageStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SendMailMessageStrings.ja.resx
new file mode 100644
index 00000000000..c8a75a17efb
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SendMailMessageStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>SMTP サーバーが指定されていないため、メールを送信できません。SMTPServer パラメーターまたは $PSEmailServer 変数を使用して SMTP サーバーを指定する必要があります。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SortObjectStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SortObjectStrings.ja.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/SortObjectStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/StartSleepStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/StartSleepStrings.ja.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/StartSleepStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TestJsonCmdletStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TestJsonCmdletStrings.ja.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TestJsonCmdletStrings.ja.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TraceCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TraceCommandStrings.ja.resx
new file mode 100644
index 00000000000..ae06806995b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/TraceCommandStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>トレース出力は、ファイル システムにのみ書き込むことができます。パス '{0}' は '{1}' プロバイダー パスを参照しました。</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>トレース出力は、1 つのファイルにのみ書き込むことができます。パス '{0}' は、複数のファイルに解決されました。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UnblockFileStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UnblockFileStrings.ja.resx
new file mode 100644
index 00000000000..26b55d35614
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UnblockFileStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>このコマンドレットは Linux をサポートしていません。</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>{0} のブロック解除中にエラーが発生しました。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateDataStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateDataStrings.ja.resx
new file mode 100644
index 00000000000..dbd215d7ad5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateDataStrings.ja.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>現在のプロバイダーが "{0}" であるため、ファイルを開けません。このコマンドにはファイルが必要です。</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>ファイル名拡張子 "{1}" がないため、ファイル "{0}" を読み取れません。</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>TypeData の更新</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>FormatData の更新</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>Filename: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>型が "{0}" のメンバーを更新できません。MemberType パラメーターに別の型を指定します。</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>型 " {1} " には、{0} パラメーターが必要です。{0} パラメーターを指定してください。</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>型 " {1} " のメンバーに対して、{0} パラメーターを null 値または空の文字列にすることはできません。このメンバー型を更新するときに、{0} パラメーターに null 値以外の値を指定します。</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>{0} パラメーターは、型 "{1}" のメンバーには必要ありません。指定しないでください。このメンバー型を更新するときに、{0} パラメーターを指定しないでください。</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>型 "{0}" の更新にメンバーが指定されていません。</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>ターゲットの型名を null 値、空、または空白のみにすることはできません。</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>型 "{0}" のメンバーの Value パラメーターと SecondValue パラメーターの両方を null 値にすることはできません。2 つのパラメーターのいずれかに null 値以外の値を指定します。</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>指定できるメンバー型は 1 つだけです。指定されたメンバー型は "{0}" です。メンバー型を 1 つだけ使用して型を更新します。</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>MemberType パラメーターを指定しないと、MemberName、Value、SecondValue パラメーターを指定できません。</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>TypeData の削除</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>削除される型の名前: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>更新する種類: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>種類のファイルを削除する</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>ファイル {0} は現在のセッションにインポートされません。</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>この実行空間では、フォーマット データの更新は許可されていません。実行空間の作成時に "DisableFormatUpdates" プロパティが True に設定されます。</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>FormatTable インスタンスでフォーマット データを更新できません。</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>TypeTable インスタンスで型データを更新できません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateListStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateListStrings.ja.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UpdateListStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UtilityCommonStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UtilityCommonStrings.ja.resx
new file mode 100644
index 00000000000..ccdd020001b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/UtilityCommonStrings.ja.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} には無効な例外が 1 つ以上あります。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>ファイル パス '{0}' が無効なため、このコマンドは実行できません。有効なファイル パスを指定してから、コマンドを実行してください。</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>'{0}' が空または空白であるため、このコマンドは実行できません。CSSUri を指定してから、コマンドを実行してください。</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>現在のプロバイダー ({0}) ではファイルを開けないため、このファイルを開けません。</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Namespace パラメーターのプレフィックス値が null であるため、このコマンドは実行できません。プレフィックスに有効な値を指定してから、コマンドを再度実行してください。</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>このプロパティでグループ化されたオブジェクトは、キーが重複しているため展開できません。プロパティに有効な値を指定してから、やり直してください。</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>このコマンドは、このオペレーティング システムではサポートされていません。</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>ファイル '{0}' を読み取れません: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>型 '{0}' の入力を 16 進数に変換できません。文字列表現の 16 進数形式を表示するには、Out-String コマンドレットにパイプしてから Format-Hex にパイプしてください。</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>指定されたパス '{0}' はサポートされていません。このコマンドでサポートされているのは、FileSystem プロバイダーのパスのみです。</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>パス:</value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>AsString パラメーターを使用するには、AsHashtable パラメーターを指定する必要があるため、このコマンドは実行できません。</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>複数のプロパティで AsHashTable パラメーターを使用するには、AsString パラメーターを追加する必要があるため、このコマンドは実行できません。</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>パス '{0}' は存在しないため、見つかりません。</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>タグ '{0}' を使用できません。'PS' プレフィックスは予約されています。</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>ファイル '{0}' を PowerShell データ ファイルとして解析できませんでした。</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>次のエラーのため、指定された SDDL からセキュリティ記述子を構築できません: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression コマンドレット</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression コマンドレットのスクリプト ブロックは ConstrainedLanguage モードで実行されます。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/VariableCommandStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/VariableCommandStrings.ja.resx
new file mode 100644
index 00000000000..2c6080f0131
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/VariableCommandStrings.ja.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>変数の設定</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>名前: {0}、値: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>コレクションではなく単一の変数を使用する</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>新しい変数</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>名前: {0}、値: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>変数の削除</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>名前: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>変数のクリア</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>名前: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WebCmdletStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WebCmdletStrings.ja.resx
new file mode 100644
index 00000000000..bed18b034cd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WebCmdletStrings.ja.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>パス '{0}' へのアクセスが拒否されました。</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteErrorStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteErrorStrings.ja.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteErrorStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteProgressResourceStrings.ja.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteProgressResourceStrings.ja.resx
new file mode 100644
index 00000000000..81bfacb2172
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ja/WriteProgressResourceStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>進行状況を報告するアクティビティを説明するテキスト。</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>進行状況が報告されているアクティビティの現在の状態を説明するテキスト。</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>処理中</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddMember.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddMember.ko.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddMember.ko.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddTypeStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddTypeStrings.ko.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AddTypeStrings.ko.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AliasCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AliasCommandStrings.ko.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/AliasCommandStrings.ko.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertFromStringData.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertFromStringData.ko.resx
new file mode 100644
index 00000000000..3bf72dbb488
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertFromStringData.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>데이터 줄 '{0}'이(가) 'name=value' 형식이 아닙니다. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>'{0}' 줄의 데이터 항목 '{1}'이(가) 이미 정의되어 있습니다. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertHTMLStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertHTMLStrings.ko.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertHTMLStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertMarkdownStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertMarkdownStrings.ko.resx
new file mode 100644
index 00000000000..021ce3492c0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ConvertMarkdownStrings.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>입력 개체 '{0}'의 형식이 잘못되었습니다.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>FileSystem 공급자 경로만 지원됩니다. 파일 경로가 지원되지 않습니다. '{0}'.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>지정된 개체의 속성 {0}은(는) null이거나 비어 있습니다.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>잘못된 매개 변수 집합 이름: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/CsvCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/CsvCommandStrings.ko.resx
new file mode 100644
index 00000000000..a6b2723e16d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/CsvCommandStrings.ko.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>CSV 콘텐츠를 {1} 파일에 추가할 수 없습니다. 추가된 개체에 {0} 열에 해당하는 속성이 없습니다. 일치하지 않는 속성을 계속하려면 -Force 매개 변수를 추가한 다음 명령을 다시 시도하세요.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>-UseQuotes 또는 -QuoteFields 매개 변수 중 하나만 지정해야 합니다.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>-Path 또는 -LiteralPath 매개 변수 중 하나만 지정해야 합니다. 둘 다 지정할 수는 없습니다.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>하나 이상의 헤더가 지정되지 않았습니다. 누락된 헤더 대신 "H"로 시작하는 기본 이름이 사용되었습니다.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName은 필수 매개 변수입니다.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames 메서드는 추가할 때만 호출해야 합니다.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames 메서드는 기존 속성 이름을 성공적으로 읽은 경우에만 호출해야 합니다.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames 메서드는 cmdlet 인스턴스당 한 번만 호출해야 합니다.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>형식 계층 구조에는 null 값이 없어야 합니다.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF에 도달했습니다.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>-Append 또는 -NoHeader 매개 변수 중 하나만 지정해야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/Debugger.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/Debugger.ko.resx
new file mode 100644
index 00000000000..d5df372c75f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/Debugger.ko.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>파일 '{0}'이(가) 없습니다.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/EventingStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/EventingStrings.ko.resx
new file mode 100644
index 00000000000..e1c41ed59f9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/EventingStrings.ko.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>구독 취소</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>제거</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/FormatAndOut_out_gridview.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/FormatAndOut_out_gridview.ko.resx
new file mode 100644
index 00000000000..0cdbf0501e9
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/FormatAndOut_out_gridview.ko.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>값</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetFormatDataStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetFormatDataStrings.ko.resx
new file mode 100644
index 00000000000..a0e4a1ff3d2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetFormatDataStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>뷰 정의 '{0}' 처리 중</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetMember.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetMember.ko.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetMember.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetRandomCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetRandomCommandStrings.ko.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetRandomCommandStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetUptimeStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetUptimeStrings.ko.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/GetUptimeStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HostStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HostStrings.ko.resx
new file mode 100644
index 00000000000..aade50e6e33
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HostStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>{0}이(가) 올바른 색이 아니므로 색을 처리할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HttpCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HttpCommandStrings.ko.resx
new file mode 100644
index 00000000000..cb18e6589ae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/HttpCommandStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>This command cannot be completed due to the following error: '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImplicitRemotingStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImplicitRemotingStrings.ko.resx
new file mode 100644
index 00000000000..fb110509908
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImplicitRemotingStrings.ko.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>원격 {0} 명령에서 반환된 데이터가 예상 형식이 아닙니다.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>{0} cmdlet을 사용하려면 원격 세션에 Get-Command, Get-FormatData, Select-Objec 명령이 필요합니다. Get-Help, Measure-Object 명령은 사용되지만 선택 사항입니다. 원격 세션에 필요한 명령이 포함되어 있는지 확인한 다음 다시 시도하세요.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>원격 세션에서 {0} 명령을 실행하는 동안 {1} 오류가 보고되었습니다.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>원격 세션에서 {0} 명령을 실행해도 결과가 반환되지 않았습니다.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>이 암시적 원격 모듈과 연결된 세션이 없습니다.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>원격 별칭 '{0}'을(를) 확인할 수 없습니다.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>이름이 Name 매개 변수의 값과 일치하지 않아 '{0}' 명령에 대한 프록시 만들기를 건너뛰었습니다.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>'{0}' 형식은 이름이 FormatTypeName 매개 변수의 값과 일치하지 않아 해당 형식에 대한 확장 형식 정의를 건너뛰었습니다.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>PowerShell에서 명령 이름의 안전성을 확인할 수 없어 '{0}' 명령에 대한 프록시 만들기를 건너뛰었습니다.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>'{0}' 명령은 기존 로컬 명령과 겹치므로 프록시 만들기를 건너뛰었습니다.  기존 로컬 명령과 겹치게 하려면 AllowClobber 매개 변수를 사용하세요.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>요청된 모든 원격 명령이 기존 로컬 명령과 겹치므로 명령 프록시를 만들지 않았습니다.  기존 로컬 명령과 겹치게 하려면 AllowClobber 매개 변수를 사용하세요.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>{0}에 대한 암시적 원격</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>암시적 원격 이벤트(세션 ID: {0}, 이벤트 처리기 ID: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>암시적 원격 모듈</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>{0}에 생성됨</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>{0} cmdlet 기준</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>{0} 명령줄로 호출되었습니다.</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>이 프록시 모듈이 작동할 세션을 지정하는 데 사용할 수 있는 선택적 매개 변수입니다.</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>"{{0}}" 명령의 암시적 원격 작업을 위한 새 세션을 만드는 중...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>{{0}}의 암시적 원격 모듈 세션</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>암시적 원격 모듈을 만드는 중 ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>원격 세션에서 명령 정보를 가져오는 중 ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>원격 세션에서 명령 정보를 가져오는 중 ... {0} 명령 받음</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>원격 세션에서 형식 및 출력 정보를 가져오는 중...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>원격 세션에서 형식 및 출력 정보를 가져오는 중 ... {0} 개체 받음</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>완료했습니다.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell 자격 증명 요청</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>{0}에 대한 자격 증명을 입력하세요.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>{0} 연결에 사용할 HTTP 프록시 자격 증명을 입력하세요.</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>새 원격 세션에서 사용할 수 있는 명령은 암시적 원격 모듈을 만들 때 사용할 수 있는 명령과 다릅니다.  Export-PSSession cmdlet을 사용해 모듈을 다시 만드는 것이 좋습니다.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>이 시스템에서 스크립트 실행이 비활성화되어 파일을 로드할 수 없습니다. 파일 서명에 유효한 인증서를 제공하세요.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>파일 {0}을(를) 저장할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImportLocalizedDataStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImportLocalizedDataStrings.ko.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/ImportLocalizedDataStrings.ko.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MatchStringStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MatchStringStrings.ko.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MatchStringStrings.ko.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MeasureObjectStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MeasureObjectStrings.ko.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/MeasureObjectStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/NewObjectStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/NewObjectStrings.ko.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/NewObjectStrings.ko.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/OutPrinterDisplayStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/OutPrinterDisplayStrings.ko.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/OutPrinterDisplayStrings.ko.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SelectObjectStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SelectObjectStrings.ko.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SelectObjectStrings.ko.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SendMailMessageStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SendMailMessageStrings.ko.resx
new file mode 100644
index 00000000000..fc7fb61f879
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SendMailMessageStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>SMTP 서버를 지정하지 않았기 때문에 전자 메일을 보낼 수 없습니다. SmtpServer 매개 변수 또는 $PSEmailServer 변수를 사용하여 SMTP 서버를 지정해야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SortObjectStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SortObjectStrings.ko.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/SortObjectStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/StartSleepStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/StartSleepStrings.ko.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/StartSleepStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TestJsonCmdletStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TestJsonCmdletStrings.ko.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TestJsonCmdletStrings.ko.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TraceCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TraceCommandStrings.ko.resx
new file mode 100644
index 00000000000..4429323c93c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/TraceCommandStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>추적 출력은 파일 시스템에만 쓸 수 있습니다. 경로 '{0}'은(는) '{1}' 공급자 경로를 가리킵니다.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>추적 출력은 단일 파일에만 쓸 수 있습니다. 경로 '{0}'은(는) 하나 이상의 파일로 확인되었습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UnblockFileStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UnblockFileStrings.ko.resx
new file mode 100644
index 00000000000..7629ea9a68f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UnblockFileStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>이 cmdlet은 Linux를 지원하지 않습니다.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>{0}의 차단을 해제하는 동안 오류가 발생했습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateDataStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateDataStrings.ko.resx
new file mode 100644
index 00000000000..f0754aa54d4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateDataStrings.ko.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Cannot open the file because the current provider is "{0}", and this command requires a file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Cannot read the file "{0}"  because it does not have the file name extension "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>The {0} parameter should not be null or an empty string for a member of type "{1}". Specify a non-null value for the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is not necessary for a member of type "{1}", and should not be specified. Do not specify the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No member is specified for the update on type "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>The target type name should not be null, empty, or contain only white spaces.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>The Value and SecondValue parameters should not both be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Only one member type can be specified. The member types specified are: "{0}". Update the type with only one member type.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>The MemberName, Value, and SecondValue parameters cannot be specified without the MemberType parameter.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name of the type that will be removed: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Type to update: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remove type file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>The file {0} is not imported into the current session.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Updating format data is not allowed in this runspace. The 'DisableFormatUpdates' property is set to True when creating the runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Cannot update the format data with a FormatTable instance.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Cannot update the type data with a TypeTable instance.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateListStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateListStrings.ko.resx
new file mode 100644
index 00000000000..228aadb4a2d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UpdateListStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>이 개체에서 '{0}' 속성을 찾을 수 없습니다.</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>InputObject 매개 변수를 지정하는 경우 Property 매개 변수를 지정해야 합니다.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>Property 매개 변수를 지정하는 경우 InputObject 매개 변수를 지정해야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UtilityCommonStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UtilityCommonStrings.ko.resx
new file mode 100644
index 00000000000..c36550b7564
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/UtilityCommonStrings.ko.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2}에 잘못된 예외가 하나 이상 있습니다.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>파일 경로 '{0}'이(가) 잘못되었으므로 이 명령을 실행할 수 없습니다. 올바른 파일 경로를 제공한 다음 명령을 실행하세요.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>'{0}'이(가) 비어 있거나 공백이므로 이 명령을 실행할 수 없습니다. CSSUri를 지정한 다음 명령을 실행하세요.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>현재 공급자({0})에서는 파일을 열 수 없으므로 파일을 열 수 없습니다.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Namespace 매개 변수의 접두사 값이 null이므로 이 명령을 실행할 수 없습니다. 접두사에 유효한 값을 지정한 다음 명령을 다시 실행하세요.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>이 속성으로 그룹화된 개체는 키가 중복되어 확장할 수 없습니다. 속성에 유효한 값을 지정한 다음 다시 시도하세요.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>이 운영 체제에서는 명령이 지원되지 않습니다.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>'{0}' 파일을 읽을 수 없습니다. {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>'{0}' 형식의 입력은 16진수로 변환할 수 없습니다. 문자열 표현의 16진수 서식을 보려면 Format-Hex에 전달하기 전에 Out-String cmdlet에 먼저 전달하세요.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>지정된 경로 '{0}'은(는) 지원되지 않습니다. 이 명령은 FileSystem 공급자 경로만 지원합니다.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>경로: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>AsString 매개 변수를 사용하려면 AsHashtable 매개 변수를 지정해야 하므로 명령을 실행할 수 없습니다.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>하나 이상의 속성과 함께 AsHashTable 매개 변수를 사용하려면 AsString 매개 변수도 지정해야 하므로 명령을 실행할 수 없습니다.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>경로 '{0}'이(가) 없으므로 찾을 수 없습니다.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>태그 '{0}'을(를) 사용할 수 없습니다. 'PS' 접두사는 예약되어 있습니다.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>'{0}' 파일을 PowerShell 데이터 파일로 구문 분석할 수 없습니다.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>다음 오류로 인해 제공된 SDDL에서 보안 설명자를 생성할 수 없습니다. {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression cmdlet 스크립트 블록은 ConstrainedLanguage 모드에서 실행됩니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/VariableCommandStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/VariableCommandStrings.ko.resx
new file mode 100644
index 00000000000..23c5d775874
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/VariableCommandStrings.ko.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>변수 설정</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>이름: {0} 값: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>컬렉션 대신 단일 변수를 사용하세요</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>새 변수</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>이름: {0} 값: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>변수 제거</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>이름: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>변수 지우기</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>이름: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WebCmdletStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WebCmdletStrings.ko.resx
new file mode 100644
index 00000000000..e2b74f2b426
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WebCmdletStrings.ko.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>'{0}' 경로에 대한 액세스가 거부되었습니다.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteErrorStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteErrorStrings.ko.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteErrorStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteProgressResourceStrings.ko.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteProgressResourceStrings.ko.resx
new file mode 100644
index 00000000000..b1947c94de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ko/WriteProgressResourceStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>진행 상황이 보고되는 활동을 설명하는 텍스트입니다.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>진행 상황이 보고되는 활동의 현재 상태를 설명하는 텍스트입니다.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>처리하는 중</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddMember.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddMember.pl.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddMember.pl.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddTypeStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddTypeStrings.pl.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AddTypeStrings.pl.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AliasCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AliasCommandStrings.pl.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/AliasCommandStrings.pl.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertFromStringData.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertFromStringData.pl.resx
new file mode 100644
index 00000000000..2ff46762218
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertFromStringData.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>Wiersz danych „{0}” nie ma formatu „name=value”. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>Element danych „{1}” w wierszu „{0}” jest już zdefiniowany. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertHTMLStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertHTMLStrings.pl.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertHTMLStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertMarkdownStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertMarkdownStrings.pl.resx
new file mode 100644
index 00000000000..d86e11f4f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ConvertMarkdownStrings.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Typ obiektu wejściowego „{0}” jest nieprawidłowy.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Obsługiwane są tylko ścieżki dostawcy systemu plików. Ścieżka pliku nie jest obsługiwana: „{0}”.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>Właściwość {0} danego obiektu ma wartość null lub jest pusta.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Nieprawidłowa nazwa zestawu parametrów: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/CsvCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/CsvCommandStrings.pl.resx
new file mode 100644
index 00000000000..235bb044226
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/CsvCommandStrings.pl.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Nie można dołączyć zawartości CSV do następującego pliku: {1}. Dołączony obiekt nie ma właściwości odpowiadającej następującej kolumnie: {0}. Aby kontynuować z niezgodnymi właściwościami, dodaj parametr -Force, a następnie ponów próbę wykonania polecenia.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>Należy określić parametry -UseQuotes lub -QuoteFields, ale nie oba te parametry.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>Należy określić parametry -Path lub -LiteralPath, ale nie oba te parametry.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>Nie określono co najmniej jednego nagłówka. Zamiast brakujących nagłówków użyto domyślnych nazw rozpoczynających się od znaku „H”.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName jest parametrem obowiązkowym.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>Metoda ReconcilePreexistingPropertyNames powinna zostać wywołana tylko w przypadku dołączenia.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>Metoda ReconcilePreexistingPropertyNames powinna zostać wywołana tylko wtedy, gdy istniejące wcześniej nazwy właściwości zostały pomyślnie odczytane.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>Metoda BuildPropertyNames powinna być wywoływana tylko raz na wystąpienie polecenia cmdlet.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Hierarchia typów nie powinna mieć wartości null.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>Osiągnięto EOF.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>Należy określić parametry -Append lub -NoHeader, ale nie oba te parametry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/Debugger.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/Debugger.pl.resx
new file mode 100644
index 00000000000..c22b0885147
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/Debugger.pl.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Plik „{0}” nie istnieje.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/EventingStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/EventingStrings.pl.resx
new file mode 100644
index 00000000000..2683e99d77f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/EventingStrings.pl.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Anuluj subskrypcję</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Usuń</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/FormatAndOut_out_gridview.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/FormatAndOut_out_gridview.pl.resx
new file mode 100644
index 00000000000..e1d4a490ed1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/FormatAndOut_out_gridview.pl.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Wartość</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetFormatDataStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetFormatDataStrings.pl.resx
new file mode 100644
index 00000000000..6706d39e83a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetFormatDataStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Przetwarzanie definicji widoku „{0}”</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetMember.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetMember.pl.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetMember.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetRandomCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetRandomCommandStrings.pl.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetRandomCommandStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetUptimeStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetUptimeStrings.pl.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/GetUptimeStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HostStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HostStrings.pl.resx
new file mode 100644
index 00000000000..ed9b9a6587e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HostStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Nie można przetworzyć koloru, ponieważ {0} nie jest prawidłowym kolorem.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HttpCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HttpCommandStrings.pl.resx
new file mode 100644
index 00000000000..c1093f003f5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/HttpCommandStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Nie można wykonać tego polecenia z powodu następującego błędu: „{0}”.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImplicitRemotingStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImplicitRemotingStrings.pl.resx
new file mode 100644
index 00000000000..2fd4066ea78
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImplicitRemotingStrings.pl.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Dane zwrócone przez polecenie zdalne {0} nie mają oczekiwanego formatu.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>Polecenie cmdlet {0} wymaga następujących poleceń w sesji zdalnej: Get-Command, Get-FormatData i Select-Object. Są używane następujące polecenia, ale opcjonalne: Get-Help i Measure-Object. Sprawdź, czy sesja zdalna zawiera wymagane polecenia, a następnie spróbuj ponownie.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Uruchomienie polecenia {0} w sesji zdalnej zgłosiło następujący błąd: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Uruchomienie polecenia {0} w sesji zdalnej nie zwróciło żadnych wyników.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>Z tym niejawnym modułem zdalnym nie skojarzono żadnej sesji.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Nie można rozpoznać aliasu zdalnego „{0}”.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Tworzenie serwera proxy zostało pominięte dla polecenia „{0}”, ponieważ nazwa nie jest zgodna z wartością parametru Name.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Definicja typu rozszerzonego została pominięta dla typu „{0}”, ponieważ jego nazwa nie jest zgodna z wartością parametru FormatTypeName.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Tworzenie serwera proxy dla polecenia „{0}” zostało pominięte, ponieważ program PowerShell nie może zweryfikować bezpieczeństwa nazwy polecenia.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Tworzenie serwera proxy zostało pominięte dla następującego polecenia: „{0}”, ponieważ spowodowałoby to cieniowanie istniejącego polecenia lokalnego.  Użyj parametru AllowClobber, jeśli chcesz zasłaniać istniejące polecenia lokalne.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>Nie utworzono serwerów proxy poleceń, ponieważ wszystkie żądane polecenia zdalne będą w tle istniejących poleceń lokalnych.  Użyj parametru AllowClobber, jeśli chcesz zasłaniać istniejące polecenia lokalne.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Niejawna komunikacja zdalna dla {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Niejawne zdarzenie komunikacji zdalnej (identyfikator sesji: {0}; identyfikator procedury obsługi zdarzeń: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Moduł niejawnej komunikacji zdalnej</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>wygenerowano {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>według polecenia cmdlet {0}</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Wywołano przy użyciu następującego wiersza polecenia: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Opcjonalny parametr, którego można użyć do określenia sesji, w której działa ten moduł proxy</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Trwa tworzenie nowej sesji na potrzeby niejawnego zdalnego sterowania poleceniem „{{0}}”...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Sesja modułu niejawnej komunikacji zdalnej {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Trwa tworzenie niejawnego modułu zdalnego...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Trwa pobieranie informacji o poleceniu z sesji zdalnej...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Trwa pobieranie informacji o poleceniu z sesji zdalnej... {0} odebrane polecenia</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Trwa pobieranie informacji o formatowaniu i danych wyjściowych z sesji zdalnej...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Trwa pobieranie informacji o formatowaniu i danych wyjściowych z sesji zdalnej... odebrane obiekty ({0})</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Ukończono.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>Żądanie poświadczeń programu PowerShell</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Wprowadź swoje poświadczenia dla {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Wprowadź poświadczenia serwera proxy HTTP, które są używane dla następującego połączenia: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Polecenia dostępne w nowej sesji zdalnej różnią się od poleceń dostępnych podczas tworzenia niejawnego modułu komunikacji zdalnej.  Rozważ ponowne utworzenie modułu korzystając z polecenia cmdlet Export-PSSession.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Nie można załadować plików, ponieważ uruchomione skrypty są wyłączone w tym systemie. Podaj prawidłowy certyfikat, za pomocą którego chcesz podpisać pliki.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>Nie można zapisać pliku {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImportLocalizedDataStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImportLocalizedDataStrings.pl.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/ImportLocalizedDataStrings.pl.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MatchStringStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MatchStringStrings.pl.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MatchStringStrings.pl.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MeasureObjectStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MeasureObjectStrings.pl.resx
new file mode 100644
index 00000000000..a6b4c39ab94
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/MeasureObjectStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Nie można odnaleźć właściwości „{0}” w danych wejściowych dla żadnych obiektów.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Obiekt wejściowy „{0}” nie jest wartością liczbową.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/NewObjectStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/NewObjectStrings.pl.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/NewObjectStrings.pl.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/OutPrinterDisplayStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/OutPrinterDisplayStrings.pl.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/OutPrinterDisplayStrings.pl.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SelectObjectStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SelectObjectStrings.pl.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SelectObjectStrings.pl.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SendMailMessageStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SendMailMessageStrings.pl.resx
new file mode 100644
index 00000000000..517fab076c1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SendMailMessageStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>Nie można wysłać wiadomości e-mail, ponieważ nie określono serwera SMTP. Serwer SMTP należy określić przy użyciu parametru SmtpServer lub zmiennej $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SortObjectStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SortObjectStrings.pl.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/SortObjectStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/StartSleepStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/StartSleepStrings.pl.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/StartSleepStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TestJsonCmdletStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TestJsonCmdletStrings.pl.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TestJsonCmdletStrings.pl.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TraceCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TraceCommandStrings.pl.resx
new file mode 100644
index 00000000000..4ff5e18defc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/TraceCommandStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>Dane wyjściowe śledzenia można zapisywać tylko w systemie plików. Ścieżka „{0}” odwołuje się do ścieżki dostawcy „{1}”.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>Dane wyjściowe śledzenia mogą być zapisywane tylko w pojedynczym pliku. Ścieżka „{0}” została rozpoznana jako więcej niż jeden plik.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UnblockFileStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UnblockFileStrings.pl.resx
new file mode 100644
index 00000000000..c269bd82055
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UnblockFileStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Polecenie cmdlet nie obsługuje systemu Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Wystąpił błąd podczas odblokowywanie {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateDataStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateDataStrings.pl.resx
new file mode 100644
index 00000000000..124c9b4b871
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateDataStrings.pl.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Nie można otworzyć pliku, ponieważ bieżący dostawca to „{0}" , a to polecenie wymaga pliku.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Nie można odczytać pliku „{0}”, ponieważ nie ma on rozszerzenia nazwy pliku „{1}”.</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>Filename: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Nie można zaktualizować elementu członkowskiego o typie „{0}”. Określ inny typ parametru MemberType.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>Parametr {0} jest wymagany dla typu „{1}”.  Określ typ parametru {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>Parametr {0} nie powinien mieć wartości null ani być pustym ciągiem dla składowej typu „{1}”. Określ wartość inną niż null dla parametru {0} podczas aktualizowania tego typu elementu członkowskiego.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>Parametr {0} nie jest niezbędny dla składowej typu „{1}”. Nie należy go określać. Nie określaj parametru {0} podczas aktualizowania tego typu elementu członkowskiego.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Nie określono elementu członkowskiego dla aktualizacji w typie „{0}”.</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>Nazwa typu docelowego nie może mieć wartości null, być pusta ani zawierać tylko białych znaków.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Parametry Value i SecondValue nie powinny mieć jednocześnie wartości null dla składowej typu „{0}”. Określ wartość inną niż null dla jednego z dwóch parametrów.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Można określić tylko jeden typ elementu członkowskiego. Określone typy składowych to: „{0}” Zaktualizuj typ przy użyciu tylko jednego typu elementu członkowskiego.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Nie można określić parametrów MemberName, Value i SecondValue bez parametru MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Nazwa typu, który zostanie usunięty: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Wpisz, aby zaktualizować: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Usuń plik typu</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>Plik {0} nie jest importowany do bieżącej sesji.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Aktualizowanie danych formatu jest niedozwolone w tym obszarze uruchamiania. Właściwość „DisableFormatUpdates” jest ustawiona na wartość True podczas tworzenia obszaru uruchomieniowego.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Nie można zaktualizować danych formatu przy użyciu wystąpienia formatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Nie można zaktualizować danych typu przy użyciu wystąpienia elementu TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateListStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateListStrings.pl.resx
new file mode 100644
index 00000000000..e51e7fe890f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UpdateListStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>Nie można odnaleźć właściwości „{0}” w tym obiekcie</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>Po określeniu parametru InputObject należy określić parametr Property.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>Po określeniu parametru Property należy określić parametr InputObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UtilityCommonStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UtilityCommonStrings.pl.resx
new file mode 100644
index 00000000000..31bfcd9183e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/UtilityCommonStrings.pl.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} ma co najmniej jeden nieprawidłowy wyjątek.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Nie można uruchomić tego polecenia, ponieważ ścieżka pliku „{0}” jest nieprawidłowa. Podaj prawidłową ścieżkę pliku, a następnie uruchom polecenie.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Nie można uruchomić tego polecenia, ponieważ element „{0}”" jest czysty lub pusty. Określ identyfikator CSSUri, a następnie uruchom polecenie.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Nie można otworzyć pliku, ponieważ bieżący dostawca ({0}) nie może otwierać plików.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Nie można uruchomić tego polecenia, ponieważ wartość prefiksu w parametrze Namespace ma wartość null. Podaj prawidłową wartość prefiksu, a następnie ponownie uruchom polecenie.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Nie można rozszerzyć obiektów pogrupowanych według tej właściwości, ponieważ istnieje duplikacja klucza. Podaj prawidłową wartość właściwości, a następnie spróbuj ponownie.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Polecenie nie jest obsługiwane w tym systemie operacyjnym.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Nie można odczytać pliku {0}: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Nie można przekonwertować danych wejściowych typu „{0}” na szesnastkowy. Aby wyświetlić formatowanie szesnastkowe reprezentacji ciągu, przekaż je do polecenia cmdlet Out-String przed przesłaniem potoku do Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Podana ścieżka „{0}” nie jest obsługiwana. To polecenie obsługuje tylko ścieżki dostawcy systemu plików.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Ścieżka: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Nie można uruchomić polecenia, ponieważ parametr AsString wymaga określenia parametru AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Nie można uruchomić polecenia, ponieważ użycie parametru AsHashTable z więcej niż jedną właściwością wymaga dodania parametru AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Nie można odnaleźć ścieżki „{0}”, ponieważ nie istnieje.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Nie można użyć tagu „{0}”. Prefiks „PS” jest zarezerwowany.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Nie można przeanalizować pliku „{0}” jako pliku danych programu PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Nie można utworzyć deskryptora zabezpieczeń z danego pliku SDDL z powodu następującego błędu: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Polecenie cmdlet Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Blok skryptu polecenia cmdlet Invoke-Expression zostanie uruchomiony w trybie ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/VariableCommandStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/VariableCommandStrings.pl.resx
new file mode 100644
index 00000000000..072132c8206
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/VariableCommandStrings.pl.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Ustaw zmienną</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Nazwa: {0} Wartość: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Użyj pojedynczej zmiennej, a nie kolekcji</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nowa zmienna</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Nazwa: {0} Wartość: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Usuń zmienną</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Nazwa: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Wyczyść zmienną</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Nazwa: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WebCmdletStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WebCmdletStrings.pl.resx
new file mode 100644
index 00000000000..beb82618d2c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WebCmdletStrings.pl.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>Odmowa dostępu do ścieżki „{0}”.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteErrorStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteErrorStrings.pl.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteErrorStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteProgressResourceStrings.pl.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteProgressResourceStrings.pl.resx
new file mode 100644
index 00000000000..fbfc044c86c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pl/WriteProgressResourceStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Tekst opisujący działanie, dla którego jest raportowany postęp.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Tekst opisujący bieżący stan działania, dla którego jest raportowany postęp.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Przetwarzanie</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddMember.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddMember.pt-BR.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddMember.pt-BR.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddTypeStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddTypeStrings.pt-BR.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AddTypeStrings.pt-BR.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AliasCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AliasCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/AliasCommandStrings.pt-BR.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertFromStringData.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertFromStringData.pt-BR.resx
new file mode 100644
index 00000000000..909d5fc4e42
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertFromStringData.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>A linha de dados '{0}' não está no formato 'name=value'. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>O item de dados '{1}' na linha '{0}' já está definido. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertHTMLStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertHTMLStrings.pt-BR.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertHTMLStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertMarkdownStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertMarkdownStrings.pt-BR.resx
new file mode 100644
index 00000000000..214c9d12da0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ConvertMarkdownStrings.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>O tipo do objeto de entrada '{0}' é inválido.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Somente caminhos do Provedor FileSystem têm suporte. Não há suporte para o caminho do arquivo: '{0}'.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>A propriedade {0} do objeto fornecido é nula ou vazia.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Nome do conjunto de parâmetros inválido: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/CsvCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/CsvCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..4388886a111
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/CsvCommandStrings.pt-BR.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Não é possível acrescentar conteúdo CSV ao arquivo a seguir: {1}. O objeto acrescentado não tem uma propriedade que corresponda à coluna a seguir: {0}. Para continuar com propriedades incompatíveis, adicione o parâmetro -Force e tente o comando novamente.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>Você deve especificar os parâmetros -UseQuotes ou -QuoteFields, mas não ambos.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>Você deve especificar os parâmetros -Path ou -LiteralPath, mas não ambos.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>Um ou mais cabeçalhos não foram especificados. Nomes padrão que começam com "H" foram usados no lugar de cabeçalhos ausentes.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName é um parâmetro obrigatório.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>O método ReconcilePreexistingPropertyNames só deve ser chamado ao anexar.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>O método ReconcilePreexistingPropertyNames só deve ser chamado quando os nomes de propriedades preexistentes tiverem sido lidos com sucesso.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>O método BuildPropertyNames deve ser chamado apenas uma vez por instância de cmdlet.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>A hierarquia de tipos não deve ter valores nulos.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>O fim do arquivo foi alcançado.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>Você deve especificar os parâmetros -Append ou -NoHeader, mas não ambos.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/Debugger.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/Debugger.pt-BR.resx
new file mode 100644
index 00000000000..4711ef99002
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/Debugger.pt-BR.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>O arquivo '{0}' não existe.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/EventingStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/EventingStrings.pt-BR.resx
new file mode 100644
index 00000000000..9d7d82ed69b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/EventingStrings.pt-BR.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Cancelar assinatura</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Remover</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/FormatAndOut_out_gridview.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/FormatAndOut_out_gridview.pt-BR.resx
new file mode 100644
index 00000000000..1ded52b6cf1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/FormatAndOut_out_gridview.pt-BR.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Valor</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetFormatDataStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetFormatDataStrings.pt-BR.resx
new file mode 100644
index 00000000000..e2a6747737b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetFormatDataStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Processando a definição de exibição '{0}'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetMember.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetMember.pt-BR.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetMember.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetRandomCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetRandomCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetRandomCommandStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetUptimeStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetUptimeStrings.pt-BR.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/GetUptimeStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HostStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HostStrings.pt-BR.resx
new file mode 100644
index 00000000000..6972ece93c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HostStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Cannot process the color because {0} is not a valid color.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HttpCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HttpCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..b49aec19359
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/HttpCommandStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Este comando não pode ser concluído devido ao seguinte erro: '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImplicitRemotingStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImplicitRemotingStrings.pt-BR.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImplicitRemotingStrings.pt-BR.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImportLocalizedDataStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImportLocalizedDataStrings.pt-BR.resx
new file mode 100644
index 00000000000..84827251a03
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/ImportLocalizedDataStrings.pt-BR.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>Não foi possível encontrar o arquivo de dados '{0}'. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>O parâmetro FileName não foi especificado. O parâmetro FileName é necessário quando Import-LocalizedData não é chamado de um arquivo de script.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>Ocorreu o seguinte erro enquanto o PowerShell abria o arquivo de dados '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>Ocorreu o seguinte erro enquanto o PowerShell carregava o arquivo de dados do script '{0}':
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>O argumento do parâmetro FileName não deve conter um caminho.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Não foi possível localizar o arquivo de dados do PowerShell '{0}' no diretório '{1}' nem em nenhum diretório de cultura pai.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Não é possível importar dados localizados. A definição de comandos adicionais com suporte não é permitida neste modo de linguagem.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>O nome de BindingVariable '{0}' é inválido.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Cmdlet Import-LocalizedData</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Comandos adicionais com suporte (por meio do parâmetro SupportedCommand) não serão permitidos no modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MatchStringStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MatchStringStrings.pt-BR.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MatchStringStrings.pt-BR.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MeasureObjectStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MeasureObjectStrings.pt-BR.resx
new file mode 100644
index 00000000000..c32c4ccc02c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/MeasureObjectStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>A propriedade "{0}" não pode ser encontrada na entrada de nenhum objeto.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>O objeto de entrada "{0}" não é numérico.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/NewObjectStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/NewObjectStrings.pt-BR.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/NewObjectStrings.pt-BR.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/OutPrinterDisplayStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/OutPrinterDisplayStrings.pt-BR.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/OutPrinterDisplayStrings.pt-BR.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SelectObjectStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SelectObjectStrings.pt-BR.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SelectObjectStrings.pt-BR.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SendMailMessageStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SendMailMessageStrings.pt-BR.resx
new file mode 100644
index 00000000000..fac6ae19485
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SendMailMessageStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>O email não pode ser enviado porque nenhum servidor SMTP foi especificado. Você deve especificar um servidor SMTP usando o parâmetro SmtpServer ou a variável $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SortObjectStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SortObjectStrings.pt-BR.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/SortObjectStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/StartSleepStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/StartSleepStrings.pt-BR.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/StartSleepStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TestJsonCmdletStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TestJsonCmdletStrings.pt-BR.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TestJsonCmdletStrings.pt-BR.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TraceCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TraceCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..1e184349185
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/TraceCommandStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>A saída de rastreamento só pode ser gravada no sistema de arquivos. O caminho '{0}' se refere a um caminho de provedor '{1}'.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>A saída de rastreamento só pode ser gravada em um único arquivo. O caminho '{0}' foi resolvido para mais de um arquivo.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UnblockFileStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UnblockFileStrings.pt-BR.resx
new file mode 100644
index 00000000000..dc852cc519d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UnblockFileStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>O cmdlet não dá suporte ao Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Ocorreu um erro ao desbloquear {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateDataStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateDataStrings.pt-BR.resx
new file mode 100644
index 00000000000..f1f6f938907
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateDataStrings.pt-BR.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Não é possível abrir o arquivo porque o provedor atual é "{0}" e este comando requer um arquivo.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Não é possível ler o arquivo "{0}" porque ele não tem a extensão de nome de arquivo "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Atualizar TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Atualizar FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Não é possível atualizar um membro com o tipo "{0}". Especifique um tipo diferente para o parâmetro MemberType.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>O parâmetro {0} é necessário para o tipo "{1}". Especifique o parâmetro {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>O parâmetro {0} não deve ser nulo ou uma cadeia de caracteres vazia para um membro do tipo "{1}". Especifique um valor não nulo para o parâmetro {0} ao atualizar esse tipo de membro.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>O parâmetro {0} não é necessário para um membro do tipo "{1}" e não deve ser especificado. Não especifique o parâmetro {0} ao atualizar esse tipo de membro.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Nenhum membro foi especificado para a atualização no tipo "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>O nome do tipo de destino não deve ser nulo, estar vazio nem conter apenas espaços em branco.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Os parâmetros Value e SecondValue não devem ser nulos para um membro do tipo "{0}". Especifique um valor não nulo para um dos dois parâmetros.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Apenas um tipo de membro pode ser especificado. Os tipos de membro especificados são: "{0}". Atualize o tipo com apenas um tipo de membro.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Os parâmetros MemberName, Value e SecondValue não podem ser especificados sem o parâmetro MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remover TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Nome do tipo que será removido: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Tipo a ser atualizado: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remover arquivo de tipo</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>O arquivo {0} não foi importado para a sessão atual.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Não é permitido atualizar dados de formato neste runspace. A propriedade "DisableFormatUpdates" está definida como True ao criar o runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Não é possível atualizar os dados de formato com uma instância de FormatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Não é possível atualizar os dados de tipo com uma instância de TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateListStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateListStrings.pt-BR.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UpdateListStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UtilityCommonStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UtilityCommonStrings.pt-BR.resx
new file mode 100644
index 00000000000..d086ee71627
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/UtilityCommonStrings.pt-BR.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} tem uma ou mais exceções inválidas.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Este comando não pode ser executado porque o caminho do arquivo "{0}" é inválido. Forneça um caminho de arquivo válido e execute o comando novamente.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Este comando não pode ser executado porque "{0}" está vazio ou em branco. Especifique CSSUri e execute o comando novamente.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Não é possível abrir o arquivo porque o provedor atual ({0}) não pode abrir arquivos.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Este comando não pode ser executado porque o valor do prefixo no parâmetro Namespace é nulo. Forneça um valor válido para o prefixo e execute o comando novamente.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Os objetos agrupados por essa propriedade não podem ser expandidos porque há duplicidade de chave. Forneça um valor válido para a propriedade e tente novamente.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>O comando não tem suporte neste sistema operacional.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>O arquivo "{0}" não pode ser lido: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Não é possível converter a entrada do tipo "{0}" em hexa. Para ver a formatação hexa da representação em cadeia de caracteres, passe-a para o cmdlet Out-String antes de passá-la para Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Não há suporte para o caminho "{0}" fornecido. Este comando dá suporte apenas a caminhos do provedor FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Caminho: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>O comando não pode ser executado porque o parâmetro AsString exige que você especifique o parâmetro AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>O comando não pode ser executado porque usar o parâmetro AsHashTable com mais de uma propriedade exige adicionar o parâmetro AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>Não é possível localizar o caminho '{0}' porque ele não existe.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Não é possível usar a marca "{0}". O prefixo "PS" está reservado.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Não foi possível analisar o arquivo "{0}" como um arquivo de dados do PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Não é possível construir um descritor de segurança a partir do SDDL fornecido devido ao seguinte erro: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Cmdlet Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>O bloco de script do cmdlet Invoke-Expression será executado no modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/VariableCommandStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/VariableCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..caf018acdae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/VariableCommandStrings.pt-BR.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Definir variável</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Nome: {0} Valor: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Use uma única variável em vez de uma coleção</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Nova variável</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Nome: {0} Valor: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Remover variável</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Nome: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Limpar variável</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Nome: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WebCmdletStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WebCmdletStrings.pt-BR.resx
new file mode 100644
index 00000000000..6b7564c3cc1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WebCmdletStrings.pt-BR.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>O acesso ao caminho '{0}' foi recusado.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteErrorStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteErrorStrings.pt-BR.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteErrorStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteProgressResourceStrings.pt-BR.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteProgressResourceStrings.pt-BR.resx
new file mode 100644
index 00000000000..53ffa3a9046
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/pt-BR/WriteProgressResourceStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Texto para descrever a atividade cujo andamento está sendo relatado.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Texto para descrever o estado atual da atividade cujo andamento está sendo relatado.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Processando</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddMember.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddMember.ru.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddMember.ru.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddTypeStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddTypeStrings.ru.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AddTypeStrings.ru.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AliasCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AliasCommandStrings.ru.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/AliasCommandStrings.ru.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertFromStringData.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertFromStringData.ru.resx
new file mode 100644
index 00000000000..a91cd5f45c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertFromStringData.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>Строка данных "{0}" не в формате "имя=значение". </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>Элемент данных "{1}" в строке "{0}" уже определен. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertHTMLStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertHTMLStrings.ru.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertHTMLStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertMarkdownStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertMarkdownStrings.ru.resx
new file mode 100644
index 00000000000..a40c3f186dd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ConvertMarkdownStrings.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Недопустимый тип входного объекта "{0}".</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Поддерживаются только пути поставщика файловой системы. Путь к файлу "{0}" не поддерживается.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>Свойство {0} данного объекта равно null или пустое.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Недопустимое имя набора параметров: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/CsvCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/CsvCommandStrings.ru.resx
new file mode 100644
index 00000000000..98568bed456
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/CsvCommandStrings.ru.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>Cannot append CSV content to the following file: {1}. The appended object does not have a property that corresponds to the following column: {0}. To continue with mismatched properties, add the -Force parameter, and then retry the command.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>You must specify either the -UseQuotes or -QuoteFields parameters, but not both.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>You must specify either the -Path or -LiteralPath parameters, but not both.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>One or more headers were not specified. Default names starting with "H" have been used in place of any missing headers.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName is a mandatory parameter.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when appending.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames method should only get called when preexisting property names have been read successfully.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames method should be called only once per cmdlet instance.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Type hierarchy should not have null values.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF is reached.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>You must specify either the -Append or -NoHeader parameters, but not both.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/Debugger.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/Debugger.ru.resx
new file mode 100644
index 00000000000..5b669eeed0d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/Debugger.ru.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>Файл "{0}" не существует.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/EventingStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/EventingStrings.ru.resx
new file mode 100644
index 00000000000..2b1426facbe
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/EventingStrings.ru.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Отменить подписку</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Удалить</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/FormatAndOut_out_gridview.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/FormatAndOut_out_gridview.ru.resx
new file mode 100644
index 00000000000..86da10b48ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/FormatAndOut_out_gridview.ru.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Значение</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetFormatDataStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetFormatDataStrings.ru.resx
new file mode 100644
index 00000000000..2b868a467ba
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetFormatDataStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>Определение представления обработки "{0}"</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetMember.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetMember.ru.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetMember.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetRandomCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetRandomCommandStrings.ru.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetRandomCommandStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetUptimeStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetUptimeStrings.ru.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/GetUptimeStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HostStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HostStrings.ru.resx
new file mode 100644
index 00000000000..c86c396e04d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HostStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Невозможно обработать цвет, так как {0} не является допустимым цветом.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HttpCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HttpCommandStrings.ru.resx
new file mode 100644
index 00000000000..0d55e047d13
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/HttpCommandStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>Не удается завершить эту команду из-за следующей ошибки: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImplicitRemotingStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImplicitRemotingStrings.ru.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImplicitRemotingStrings.ru.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImportLocalizedDataStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImportLocalizedDataStrings.ru.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/ImportLocalizedDataStrings.ru.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MatchStringStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MatchStringStrings.ru.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MatchStringStrings.ru.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MeasureObjectStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MeasureObjectStrings.ru.resx
new file mode 100644
index 00000000000..9deb005c831
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/MeasureObjectStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property "{0}" cannot be found in the input for any objects.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Input object "{0}" is not numeric.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/NewObjectStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/NewObjectStrings.ru.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/NewObjectStrings.ru.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/OutPrinterDisplayStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/OutPrinterDisplayStrings.ru.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/OutPrinterDisplayStrings.ru.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SelectObjectStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SelectObjectStrings.ru.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SelectObjectStrings.ru.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SendMailMessageStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SendMailMessageStrings.ru.resx
new file mode 100644
index 00000000000..6b62243e900
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SendMailMessageStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>Не удается отправить сообщение электронной почты, так как не указан SMTP-сервер. Укажите SMTP-сервер с помощью параметра SmtpServer или переменной $PSEmailServer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SortObjectStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SortObjectStrings.ru.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/SortObjectStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/StartSleepStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/StartSleepStrings.ru.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/StartSleepStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TestJsonCmdletStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TestJsonCmdletStrings.ru.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TestJsonCmdletStrings.ru.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TraceCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TraceCommandStrings.ru.resx
new file mode 100644
index 00000000000..c2cd31ff0fa
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/TraceCommandStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>Результаты трассировки могут быть записаны только в файловую систему. Путь "{0}" ссылается на путь поставщика "{1}".</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>Результаты трассировки можно записать только в один файл. Путь "{0}" разрешен в несколько файлов.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UnblockFileStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UnblockFileStrings.ru.resx
new file mode 100644
index 00000000000..01d006d227d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UnblockFileStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Командлет не поддерживает Linux.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>Произошла ошибка при снятии блокировки {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateDataStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateDataStrings.ru.resx
new file mode 100644
index 00000000000..f9249a05c0b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateDataStrings.ru.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Не удается открыть файл, так как текущий поставщик — "{0}", а для этой команды требуется файл.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Не удается прочитать файл "{0}", так как у него нет расширения имени файла "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Обновить TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Обновить FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Не удается обновить тип элемента "{0}". Укажите другой тип для параметра MemberType.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>Параметр {0} обязателен для типа "{1}". Укажите параметр {0}.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>Параметр {0} не может иметь значение null или быть пустой строкой для типа элемента "{1}". При обновлении этого типа элемента укажите значение, отличное от null, для параметра {0}.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>Параметр {0} необязателен для типа элемента "{1}", и его не следует указывать. Не указывайте параметр {0} при обновлении этого типа элемента.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>Для обновления типа "{0}" не указан элемент.</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>Имя целевого типа не может быть пустым, иметь значение null или содержать только пробелы.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Параметры Value и SecondValue не могут одновременно иметь значение null для типа элемента "{0}". Укажите значение, отличное от null, для одного из этих параметров.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Можно указать только один тип элемента. Указаны следующие типы элементов: "{0}". Обновите тип, указав только один тип элемента.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>Параметры MemberName, Value и SecondValue не могут быть указаны без параметра MemberType.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Удалить TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Имя типа, который будет удален: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Тип для обновления: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Удалить тип файла</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>Файл {0} не импортирован в текущий сеанс.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Обновление формата данных в этом пространстве выполнения не разрешено. При создании пространства выполнения для свойства "DisableFormatUpdates" задается значение True.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Не удается обновить формат данных с помощью экземпляра FormatTable.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Не удается обновить тип данных с помощью экземпляра TypeTable.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateListStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateListStrings.ru.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UpdateListStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UtilityCommonStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UtilityCommonStrings.ru.resx
new file mode 100644
index 00000000000..989f7128b72
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/UtilityCommonStrings.ru.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} содержит одно или несколько недопустимых исключений.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Невозможно выполнить эту команду, поскольку путь к файлу "{0}" недопустим. Укажите допустимый путь к файлу и повторите попытку.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>Невозможно выполнить эту команду, поскольку элемент "{0}" пуст. Укажите CSSUri, затем выполните команду.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Не удалось открыть файл, поскольку текущий поставщик ({0}) не может открывать файлы.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Невозможно выполнить эту команду, поскольку значение префикса в параметре пространства имен равно null. Укажите допустимое значение префикса, затем снова выполните эту команду.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Объекты, сгруппированные по этому свойству, невозможно развернуть из-за дублирования ключа. Укажите допустимое значение свойства, затем повторите попытку.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Команда не поддерживается в этой операционной системе.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>Невозможно прочесть файл "{0}": {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>Невозможно преобразовать входные данные типа "{0}" в шестнадцатеричный формат. Чтобы просмотреть это строковое представление в шестнадцатеричном формате, передайте его в командлет Out-String перед передачей в Format-Hex.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Заданный путь "{0}" не поддерживается. Эта команда поддерживает только пути поставщика FileSystem.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Путь: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>Невозможно выполнить эту команду, поскольку для параметра AsString необходимо указать параметр AsHashtable.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>Невозможно выполнить эту команду, поскольку для использования параметра AsHashTable более чем с одним свойством необходимо добавить параметр AsString.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>не удается найти путь "{0}", поскольку он не существует.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>Невозможно использовать тег "{0}". Префикс "PS" зарезервирован.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>Не удалось проанализировать файл "{0}" в качестве файла данных PowerShell.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Не удалось создать дескриптор безопасности из заданного SDDL из-за следующей ошибки: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Командлет Invoke-Expression</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Блок сценария командлета Invoke-Expression будет выполняться в режиме ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/VariableCommandStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/VariableCommandStrings.ru.resx
new file mode 100644
index 00000000000..9160096b901
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/VariableCommandStrings.ru.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Задать переменную</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Имя: {0}, значение: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Используйте одну переменную вместо коллекции</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Новая переменная</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Имя: {0}, значение: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Удалить переменную</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Имя: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Clear-Variable</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Имя: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WebCmdletStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WebCmdletStrings.ru.resx
new file mode 100644
index 00000000000..80c8a790ac3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WebCmdletStrings.ru.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>Доступ к пути "{0}" запрещен.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteErrorStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteErrorStrings.ru.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteErrorStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteProgressResourceStrings.ru.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteProgressResourceStrings.ru.resx
new file mode 100644
index 00000000000..9e7e063b71b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/ru/WriteProgressResourceStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>Текст, описывающий действие, о ходе выполнения которого сообщается.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>Текст, описывающий текущее состояние действия, о ходе выполнения которого сообщается.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>Обработка</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddMember.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddMember.tr.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddMember.tr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddTypeStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddTypeStrings.tr.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AddTypeStrings.tr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AliasCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AliasCommandStrings.tr.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/AliasCommandStrings.tr.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertFromStringData.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertFromStringData.tr.resx
new file mode 100644
index 00000000000..b78cad7a2eb
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertFromStringData.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>Veri satırı "{0}" "ad=değer" biçiminde değil. </value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>Satır "{0}" içindeki "{1}" veri öğesi zaten tanımlı. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertHTMLStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertHTMLStrings.tr.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertHTMLStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertMarkdownStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertMarkdownStrings.tr.resx
new file mode 100644
index 00000000000..c928146d006
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ConvertMarkdownStrings.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>Giriş nesnesinin '{0}' türü geçersiz.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Yalnızca FileSystem Sağlayıcısı yolları desteklenir. Dosya yolu desteklenmiyor: '{0}'.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>Belirtilen nesnenin {0} özelliği null veya boş.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Geçersiz parametre kümesi adı: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/CsvCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/CsvCommandStrings.tr.resx
new file mode 100644
index 00000000000..cf64bd058cd
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/CsvCommandStrings.tr.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>CSV içeriği aşağıdaki dosyaya eklenemiyor: {1}. Eklenen nesnede, şu sütuna karşılık gelen bir özellik bulunmamaktadır: {0}. Eşleşmeyen özelliklerle devam etmek için -Force parametresini ekleyin ve ardından komutu yeniden deneyin.</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>-UseQuotes ya da -QuoteFields parametrelerinden birini belirtmeniz gerekir; ancak ikisini birden belirtemezsiniz.</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>-Path ya da -LiteralPath parametrelerinden birini belirtmeniz gerekir; ancak ikisini birden belirtemezsiniz.</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>Bir veya daha fazla başlık belirtilmemiştir. Eksik başlıkların yerine “H” harfiyle başlayan varsayılan isimler kullanılmıştır.</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName zorunlu bir parametredir.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames yöntemi yalnızca ekleme işlemi sırasında çağrılmalıdır.</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>ReconcilePreexistingPropertyNames yöntemi, yalnızca önceden var olan özellik adları başarıyla okunduğunda çağrılmalıdır.</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>BuildPropertyNames yöntemi, her cmdlet örneği için yalnızca bir kez çağrılmalıdır.</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>Tip hiyerarşisinde null değerler bulunmamalıdır.</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>EOF'a ulaşıldı.</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>-Append ya da -NoHeader parametrelerinden birini belirtmeniz gerekir; ancak ikisini birden belirtemezsiniz.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/Debugger.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/Debugger.tr.resx
new file mode 100644
index 00000000000..dfced76494e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/Debugger.tr.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>'{0}' dosyası yok.</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/EventingStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/EventingStrings.tr.resx
new file mode 100644
index 00000000000..8a654ba6864
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/EventingStrings.tr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>Aboneliği kaldır</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Kaldır</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/FormatAndOut_out_gridview.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/FormatAndOut_out_gridview.tr.resx
new file mode 100644
index 00000000000..72c3903542b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/FormatAndOut_out_gridview.tr.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>Değer</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetFormatDataStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetFormatDataStrings.tr.resx
new file mode 100644
index 00000000000..5eb225e3d5e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetFormatDataStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>"{0}" görünüm tanımı işleniyor</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetMember.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetMember.tr.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetMember.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetRandomCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetRandomCommandStrings.tr.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetRandomCommandStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetUptimeStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetUptimeStrings.tr.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/GetUptimeStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HostStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HostStrings.tr.resx
new file mode 100644
index 00000000000..6972ece93c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HostStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Cannot process the color because {0} is not a valid color.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HttpCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HttpCommandStrings.tr.resx
new file mode 100644
index 00000000000..cb18e6589ae
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/HttpCommandStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>This command cannot be completed due to the following error: '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImplicitRemotingStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImplicitRemotingStrings.tr.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImplicitRemotingStrings.tr.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImportLocalizedDataStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImportLocalizedDataStrings.tr.resx
new file mode 100644
index 00000000000..21f2527a84c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/ImportLocalizedDataStrings.tr.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>"{0}" dosyası bulunamıyor. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>FileName parametresi belirtilmedi. Import-LocalizedData bir betik dosyasından çağrılmadığında FileName parametresi gereklidir.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>Windows PowerShell, "{0}" veri dosyasını açarken şu hata oluştu: 
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>Windows PowerShell, "{0}" betik veri dosyasını yüklerken şu hata oluştu: 
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>FileName parametresi için belirtilen bağımsız değişken bir yol içermemelidir.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>"{0}" Windows PowerShell veri dosyası, "{1}" dizininde veya herhangi bir üst kültür dizininde bulunamıyor.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Yerelleştirilmiş veriler içeri aktarılamıyor. Bu dil modunda ek desteklenen komutların tanımlanmasına izin verilmiyor.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>BindingVariable adı '{0}' geçersiz.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Desteklenen ek komutlara (SupportedCommand parametresi aracılığıyla) ConstrainedLanguage modunda izin verilmez.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MatchStringStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MatchStringStrings.tr.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MatchStringStrings.tr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MeasureObjectStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MeasureObjectStrings.tr.resx
new file mode 100644
index 00000000000..7f1bcb90e56
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/MeasureObjectStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"{0}" özelliği, hiçbir nesne için girişte bulunamadı.</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>Giriş nesnesi "{0}" sayısal değil.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/NewObjectStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/NewObjectStrings.tr.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/NewObjectStrings.tr.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/OutPrinterDisplayStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/OutPrinterDisplayStrings.tr.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/OutPrinterDisplayStrings.tr.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SelectObjectStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SelectObjectStrings.tr.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SelectObjectStrings.tr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SendMailMessageStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SendMailMessageStrings.tr.resx
new file mode 100644
index 00000000000..a20c5a39f2d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SendMailMessageStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>SMTP sunucusu belirtilmediğinden e-posta gönderilemiyor. SmtpServer parametresini ya da $PSEmailServer değişkenini kullanarak bir SMTP sunucusu belirtmeniz gerekir.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SortObjectStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SortObjectStrings.tr.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/SortObjectStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/StartSleepStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/StartSleepStrings.tr.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/StartSleepStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TestJsonCmdletStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TestJsonCmdletStrings.tr.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TestJsonCmdletStrings.tr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TraceCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TraceCommandStrings.tr.resx
new file mode 100644
index 00000000000..003d8e137ed
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/TraceCommandStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>İzleme çıktısı yalnızca dosya sistemine yazılabilir. '{0}' yolu, bir '{1}' sağlayıcısı yoluna başvurdu.</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>İzleme çıktısı yalnızca tek bir dosyaya yazılabilir. '{0}' yolu birden fazla dosyaya çözümlendi.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UnblockFileStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UnblockFileStrings.tr.resx
new file mode 100644
index 00000000000..194a6e1f35f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UnblockFileStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>Cmdlet Linux'ı desteklemiyor.</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>{0} için engelleme kaldırılırken bir hata oluştu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateDataStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateDataStrings.tr.resx
new file mode 100644
index 00000000000..f0754aa54d4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateDataStrings.tr.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Cannot open the file because the current provider is "{0}", and this command requires a file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Cannot read the file "{0}"  because it does not have the file name extension "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>The {0} parameter should not be null or an empty string for a member of type "{1}". Specify a non-null value for the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is not necessary for a member of type "{1}", and should not be specified. Do not specify the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No member is specified for the update on type "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>The target type name should not be null, empty, or contain only white spaces.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>The Value and SecondValue parameters should not both be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Only one member type can be specified. The member types specified are: "{0}". Update the type with only one member type.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>The MemberName, Value, and SecondValue parameters cannot be specified without the MemberType parameter.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name of the type that will be removed: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Type to update: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remove type file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>The file {0} is not imported into the current session.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Updating format data is not allowed in this runspace. The 'DisableFormatUpdates' property is set to True when creating the runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Cannot update the format data with a FormatTable instance.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Cannot update the type data with a TypeTable instance.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateListStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateListStrings.tr.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UpdateListStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UtilityCommonStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UtilityCommonStrings.tr.resx
new file mode 100644
index 00000000000..2dbcab3f4d5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/UtilityCommonStrings.tr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} geçersiz olan bir veya daha fazla özel durum içeriyor.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>‘{0}' dosya yolu geçersiz olduğu için bu komut çalıştırılamaz. Lütfen geçerli bir dosya yolu sağlayın ve ardından komutu çalıştırın.</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>‘{0}' boş veya boşluk olduğu için bu komut çalıştırılamaz. Lütfen CSSUri belirtin ve ardından komutu çalıştırın.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Geçerli sağlayıcı ({0}) dosyaları açamadığı için dosya açılamıyor.</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>Namespace parametresindeki önek değeri null olduğu için bu komut çalıştırılamaz. Önek için geçerli bir değer sağlayın ve ardından komutu yeniden çalıştırın.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Bu özellik tarafından gruplandırılan nesneler, bir anahtar çoğaltması olduğu için genişletilemez. Özellik için geçerli bir değer sağlayın ve ardından yeniden deneyin.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Bu komut geçerli işletim sisteminde desteklenmiyor.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>‘{0}' dosyası okunamıyor: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>‘{0}' türündeki giriş onaltılığa dönüştürülemiyor. Dize gösteriminin onaltılık biçimlendirmesini görüntülemek için, Format-Hex'e göndermeden önce onu Out-String cmdlet'ine kanal oluşturun.</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>Verilen '{0}' yolu desteklenmiyor. Bu komut yalnızca FileSystem Provider yollarını destekler.</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>Yol: </value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>AsString parametresi, AsHashtable parametresini belirtmenizi gerektirdiği için bu komut çalıştırılamaz.</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>AsHashTable parametresini birden fazla özellik ile kullanmak, AsString parametresinin eklenmesini gerektirdiğinden bu komut çalıştırılamaz.</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>‘{0}' yolu bulunamadığı için bulunamıyor.</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>‘{0}' etiketi kullanılamaz. 'PS' öneki ayrılmış.</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>‘{0}' PowerShell Veri dosyası olarak ayrıştırılamadı.</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>Verilen hata nedeniyle güvenlik tanımlayıcısı belirtilen SDDL'den oluşturulamıyor: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression cmdlet betik bloğu, ConstrainedLanguage modunda çalıştırılacak.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/VariableCommandStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/VariableCommandStrings.tr.resx
new file mode 100644
index 00000000000..d8b7aa2c9db
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/VariableCommandStrings.tr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>Değişken ayarla</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>Ad: {0} Değer: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>Tek bir değişken kullanın, koleksiyon yerine</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>Yeni değişken</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>Ad: {0} Değer: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>Değişkeni kaldır</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>Ad: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>Değişkeni temizle</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>Ad: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WebCmdletStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WebCmdletStrings.tr.resx
new file mode 100644
index 00000000000..ef580bbc142
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WebCmdletStrings.tr.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>'{0}' yoluna erişim reddedildi.</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteErrorStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteErrorStrings.tr.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteErrorStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteProgressResourceStrings.tr.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteProgressResourceStrings.tr.resx
new file mode 100644
index 00000000000..b2c0b402555
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/tr/WriteProgressResourceStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>İlerlemenin bildirildiği etkinliği açıklayan metin.</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>İlerlemenin bildirildiği etkinliğin mevcut durumunu açıklayan metin.</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>İşleniyor</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddMember.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddMember.zh-Hans.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddMember.zh-Hans.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddTypeStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddTypeStrings.zh-Hans.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AddTypeStrings.zh-Hans.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AliasCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AliasCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/AliasCommandStrings.zh-Hans.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertFromStringData.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertFromStringData.zh-Hans.resx
new file mode 100644
index 00000000000..5a2603d98f0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertFromStringData.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>数据行“{0}”未采用 'name=value' 格式。</value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>行“{0}”中的数据项“{1}”已被定义。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertHTMLStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertHTMLStrings.zh-Hans.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertHTMLStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertMarkdownStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertMarkdownStrings.zh-Hans.resx
new file mode 100644
index 00000000000..65165e5ff0b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ConvertMarkdownStrings.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>输入对象 '{0}' 的类型无效。</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>仅支持 FileSystem 提供程序路径。不支持文件路径: '{0}'。</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>给定对象的属性 {0} 为 null 或为空。</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>无效的参数集名称: {0}。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/CsvCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/CsvCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..454fbd916b5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/CsvCommandStrings.zh-Hans.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>无法将 CSV 内容追加到以下文件: {1}。追加的对象没有对应于以下列的属性: {0}。要继续使用不匹配的属性，请添加 -Force 参数，然后重试该命令。</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>必须指定 -UseQuotes 或 -QuoteFields 参数之一，但不能同时指定两者。</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>必须指定 -Path 或 -LiteralPath 参数之一，但不能同时指定两者。</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>未指定一个或多个标头。已使用以 "H" 开头的默认名称来代替任何缺失的标头。</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName 是必需参数。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>只有在追加时才应调用 ReconcilePreexistingPropertyNames 方法。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>只有在已成功读取预先存在的属性名称时，才应调用 ReconcilePreexistingPropertyNames 方法。</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>每个 cmdlet 实例只能调用一次 BuildPropertyNames 方法。</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>类型层次结构不应具有 null 值。</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>已达到 EOF。</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>必须指定 -Append 或 -NoHeader 参数，但不能同时指定两者。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/Debugger.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/Debugger.zh-Hans.resx
new file mode 100644
index 00000000000..a8e17de0d04
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/Debugger.zh-Hans.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>文件“{0}”不存在。</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/EventingStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/EventingStrings.zh-Hans.resx
new file mode 100644
index 00000000000..b767f28c5ce
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/EventingStrings.zh-Hans.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>取消订阅</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>移除</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/FormatAndOut_out_gridview.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/FormatAndOut_out_gridview.zh-Hans.resx
new file mode 100644
index 00000000000..fcc9f4542db
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/FormatAndOut_out_gridview.zh-Hans.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>值</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetFormatDataStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetFormatDataStrings.zh-Hans.resx
new file mode 100644
index 00000000000..33abd5025ce
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetFormatDataStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>正在处理视图定义 '{0}'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetMember.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetMember.zh-Hans.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetMember.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetRandomCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetRandomCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetRandomCommandStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetUptimeStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetUptimeStrings.zh-Hans.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/GetUptimeStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HostStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HostStrings.zh-Hans.resx
new file mode 100644
index 00000000000..262799a448d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HostStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>无法处理该颜色，因为 {0} 不是有效颜色。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HttpCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HttpCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..e8aa6480202
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/HttpCommandStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>由于以下错误，无法完成此命令:“{0}”。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImplicitRemotingStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImplicitRemotingStrings.zh-Hans.resx
new file mode 100644
index 00000000000..936defa25de
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImplicitRemotingStrings.zh-Hans.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>远程 {0} 命令返回的数据为采用预期格式。</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>{0} cmdlet 要求远程会话中包含以下命令: Get-Command、Get-FormatData 和 Select-Object。可以使用以下命令，但它们不是必需的: Get-Help 和 Measure-Object。验证远程会话是否包含所需命令，然后重试。</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>在远程会话中运行 {0} 命令时报告了以下错误: {1}。</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>在远程会话中运行 {0} 命令未返回结果。</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>没有会话与此隐式远程处理模块关联。</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>无法解析远程别名 '{0}'。</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>已跳过 '{0}' 命令的代理创建，因为名称与 Name 参数的值不匹配。</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>已跳过 '{0}' 类型的扩展类型定义，因为其名称与 FormatTypeName 参数的值不匹配。</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>已跳过 '{0}' 命令的代理创建，因为 PowerShell 无法验证命令名称的安全性。</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>已跳过以下命令的代理创建: '{0}'，因为它会遮蔽现有的本地命令。 如果要遮蔽现有本地命令，请使用 AllowClobber 参数。</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>未创建任何命令代理，因为请求的所有远程命令都会遮蔽现有的本地命令。 如果要遮蔽现有本地命令，请使用 AllowClobber 参数。</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>针对 {0} 的隐式远程处理</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>隐式远程处理事件(会话 ID: {0}；事件处理程序 ID: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>隐式远程处理模块</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>生成时间: {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>通过 {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>请使用以下命令行进行调用: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>可选参数，可用于指定此代理模块在哪个会话上运行</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>正在为隐式远程处理 "{{0}}" 命令创建新会话...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>位于 {{0}} 的隐式远程处理模块会话</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>正在创建隐式远程处理模块...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>正在从远程会话获取命令信息...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>正在从远程会话获取命令信息... 已收到 {0} 条命令</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>正在从远程会话获取格式和输出信息...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>正在从远程会话获取格式和输出信息... 已收到 {0} 个对象</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>已完成。</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell 凭据请求</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>输入 {0} 的凭据。</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>输入用于以下连接的 HTTP 代理凭据: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>新远程会话中可用的命令与创建隐式远程处理模块时可用的命令不同。 请考虑使用 Export-PSSession cmdlet 重新创建该模块。</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>无法加载文件，因为此系统上已禁用脚本运行功能。请提供用于对文件进行签名的有效证书。</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>无法对文件 {0} 进行签名。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImportLocalizedDataStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImportLocalizedDataStrings.zh-Hans.resx
new file mode 100644
index 00000000000..5455a8e9ac2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/ImportLocalizedDataStrings.zh-Hans.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>找不到数据文件 '{0}'。</value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>未指定 FileName 参数。如果不是从脚本文件调用 Import-LocalizedData，则需要 FileName 参数。</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>PowerShell 打开数据文件 '{0}' 时发生以下错误:
+{1}。</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>PowerShell 加载 '{0}' 脚本数据文件时发生以下错误:
+{1}。</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>FileName 参数的自变量不应包含路径。</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>无法在目录 '{1}' 或任何父区域性目录中找到 PowerShell 数据文件 '{0}'。</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>无法导入本地化数据。此语言模式不允许定义其他受支持的命令。</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>BindingVariable 名称 '{0}' 无效。</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>在 ConstrainedLanguage 模式下，不允许使用其他受支持的命令(通过 SupportedCommand 参数)。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MatchStringStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MatchStringStrings.zh-Hans.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MatchStringStrings.zh-Hans.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MeasureObjectStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MeasureObjectStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c8d4ecabd5d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/MeasureObjectStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>在任何对象的输入中都找不到属性“{0}”。</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>输入对象“{0}”不是数值。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/NewObjectStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/NewObjectStrings.zh-Hans.resx
new file mode 100644
index 00000000000..68032620ee5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/NewObjectStrings.zh-Hans.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>找不到构造函数。找不到类型 {0} 的合适的构造函数。</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>找不到类型 [{0}]: 请验证是否已加载包含此类型的程序集。</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>无法加载 COM 类型 {0}。</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>写入管道的对象是来自组件主互操作程序集的类型 "{0}" 的实例。如果此类型公开的成员与 IDispatch 成员不同，那么在未安装主互操作程序集时，编写以使用此对象的脚本可能无法正常工作。</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>未找到指定 {2} 对象的成员 "{1}"。</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>提供的值无效，或者该属性为只读。请更改该值，然后重试。</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>不支持创建属性和委托 Windows RT 类型的实例。</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>无法创建类似 ByRef 的类型 "{0}" 的实例。PowerShell 不支持类似 ByRef 的类型。</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>无法创建类型。此语言模式仅支持核心类型。</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>无法创建类型。在策略锁定的计算机上的 {0} 语言模式下，仅支持核心类型。</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet 类型创建</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>ConstrainedLanguage 模式下不会创建类型 "{0}"。</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object cmdlet COM 对象创建</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>ConstrainedLanguage 模式下不会创建 COM 对象 "{0}"。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/OutPrinterDisplayStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/OutPrinterDisplayStrings.zh-Hans.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/OutPrinterDisplayStrings.zh-Hans.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SelectObjectStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SelectObjectStrings.zh-Hans.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SelectObjectStrings.zh-Hans.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SendMailMessageStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SendMailMessageStrings.zh-Hans.resx
new file mode 100644
index 00000000000..8cd5b19ccb4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SendMailMessageStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>由于未指定 SMTP 服务器，因此无法发送电子邮件。必须使用 SmtpServer 参数或 $PSEmailServer 变量指定 SMTP 服务器。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SortObjectStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SortObjectStrings.zh-Hans.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/SortObjectStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/StartSleepStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/StartSleepStrings.zh-Hans.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/StartSleepStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TestJsonCmdletStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TestJsonCmdletStrings.zh-Hans.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TestJsonCmdletStrings.zh-Hans.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TraceCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TraceCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..5634ea6e8a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/TraceCommandStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>只能将跟踪输出写入文件系统。路径“{0}”引用了“{1}”提供程序路径。</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>只能将跟踪输出写入单个文件。路径“{0}”已解析为多个文件。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UnblockFileStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UnblockFileStrings.zh-Hans.resx
new file mode 100644
index 00000000000..1c1c2e7f0c0
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UnblockFileStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>该 cmdlet 不支持 Linux。</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>取消阻止 {0} 时出错。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateDataStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateDataStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f0754aa54d4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateDataStrings.zh-Hans.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Cannot open the file because the current provider is "{0}", and this command requires a file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Cannot read the file "{0}"  because it does not have the file name extension "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>The {0} parameter should not be null or an empty string for a member of type "{1}". Specify a non-null value for the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is not necessary for a member of type "{1}", and should not be specified. Do not specify the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No member is specified for the update on type "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>The target type name should not be null, empty, or contain only white spaces.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>The Value and SecondValue parameters should not both be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Only one member type can be specified. The member types specified are: "{0}". Update the type with only one member type.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>The MemberName, Value, and SecondValue parameters cannot be specified without the MemberType parameter.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name of the type that will be removed: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Type to update: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remove type file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>The file {0} is not imported into the current session.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Updating format data is not allowed in this runspace. The 'DisableFormatUpdates' property is set to True when creating the runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Cannot update the format data with a FormatTable instance.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Cannot update the type data with a TypeTable instance.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateListStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateListStrings.zh-Hans.resx
new file mode 100644
index 00000000000..98caf649e5a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UpdateListStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>无法在此对象上找到属性 '{0}'</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>指定 InputObject 参数时，必须指定 Property 参数。</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>指定 Property 参数时，必须指定 InputObject 参数。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UtilityCommonStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UtilityCommonStrings.zh-Hans.resx
new file mode 100644
index 00000000000..7c5eb07c006
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/UtilityCommonStrings.zh-Hans.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} 具有一个或多个无效的异常。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>无法运行此命令，因为文件路径“{0}”无效。请提供有效的文件路径，然后运行该命令。</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>无法运行此命令，因为“{0}”为空或为空白。请指定 CSSUri，然后运行该命令。</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>无法打开文件，因为当前提供程序({0})无法打开文件。</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>无法运行此命令，因为 Namespace 参数中的前缀值为 null。提供前缀的有效值，然后再次运行该命令。</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>无法展开按此属性分组的对象，因为存在键重复。请提供属性的有效值，然后重试。</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>此操作系统不支持该命令。</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>无法读取文件“{0}”: {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>无法将“{0}”类型的输入转换为十六进制。要查看其字符串表示形式的十六进制格式，请将其通过管道传递给 Out-String cmdlet，然后再将其传递给 Format-Hex。</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>不支持给定的路径“{0}”。此命令仅支持 FileSystem 提供程序路径。</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>路径:</value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>无法运行该命令，因为 AsString 参数要求指定 AsHashtable 参数。</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>无法运行该命令，因为使用具有多个属性的 AsHashTable 参数需要添加 AsString 参数。</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>找不到路径“{0}”，因为该路径不存在。</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>无法使用标记“{0}”。已保留 'PS' 前缀。</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>无法将文件“{0}”分析为 PowerShell 数据文件。</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>由于以下错误，无法根据给定的 SDDL 构造安全描述符: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression cmdlet 脚本块将在 ConstrainedLanguage 模式下运行。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/VariableCommandStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/VariableCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..b02198a2b72
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/VariableCommandStrings.zh-Hans.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>设置变量</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>名称: {0} 值: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>使用单个变量而不是集合</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>新变量</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>名称: {0} 值: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>移除变量</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>名称: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>清除变量</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>名称: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WebCmdletStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WebCmdletStrings.zh-Hans.resx
new file mode 100644
index 00000000000..d6c7a8b3e38
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WebCmdletStrings.zh-Hans.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>对路径“{0}”的访问被拒绝。</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteErrorStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteErrorStrings.zh-Hans.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteErrorStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteProgressResourceStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteProgressResourceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c307454cc91
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hans/WriteProgressResourceStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>用于描述正在报告进度的活动的文本。</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>用于描述正在报告进度的活动当前状态的文本。</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>正在处理</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddMember.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddMember.zh-Hant.resx
new file mode 100644
index 00000000000..e7ce64965ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddMember.zh-Hant.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>To add a member, only one member type can be specified. The member types specified are: "{0}"</value>
+  </data>
+  <data name="CannotAddMemberType" xml:space="preserve">
+    <value>Cannot add a member with type "{0}". Specify a different type for the MemberTypes parameter.</value>
+  </data>
+  <data name="Value2ShouldNotBeSpecified" xml:space="preserve">
+    <value>The SecondValue parameter is not necessary for a member of type "{0}", and should not be specified. Do not specify the SecondValue parameter when you add members of this type.</value>
+  </data>
+  <data name="Value1Prompt" xml:space="preserve">
+    <value>The Value parameter is required for a member of type "{0}". Specify the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>Both Value and SecondValue parameters should not be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="MemberAlreadyExists" xml:space="preserve">
+    <value>Cannot add a member with the name "{0}" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.</value>
+  </data>
+  <data name="CannotRemoveTypeDataMember" xml:space="preserve">
+    <value>Cannot force the member with name "{0}" and type "{1}" to be added. A member with that name and type already exists, and the existing member is not an instance extension.</value>
+  </data>
+  <data name="AliasReferenceShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>The member referenced by this alias should not be null or empty.</value>
+  </data>
+  <data name="Value1ShouldNotBeNull" xml:space="preserve">
+    <value>The Value parameter should not be null for a member of type "{0}". Specify a non-null value for the Value parameter when adding members of this type.</value>
+  </data>
+  <data name="Value2ShouldNotBeNull" xml:space="preserve">
+    <value>The SecondValue parameter should not be null for a member of type "{0}". Specify a non-null value for the SecondValue parameter when adding members of this type.</value>
+  </data>
+  <data name="InvalidValueForNotePropertyName" xml:space="preserve">
+    <value>The parameter NotePropertyName cannot take values that could be converted to the type {0}. To define the name of a member with those values, use Add-Member, and specify the member type.</value>
+  </data>
+  <data name="NotePropertyNameShouldNotBeNull" xml:space="preserve">
+    <value>The name for a NoteProperty member should not be null or an empty string.</value>
+  </data>
+  <data name="TypeNameShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeName parameter should not be null, empty, or contain only white spaces.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddTypeStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddTypeStrings.zh-Hant.resx
new file mode 100644
index 00000000000..7f03cd1e1e3
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AddTypeStrings.zh-Hant.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AlreadyCompiledandLoaded" xml:space="preserve">
+    <value>The source code was already compiled and loaded.</value>
+  </data>
+  <data name="FileExtensionNotSupported" xml:space="preserve">
+    <value>Cannot add type. The "{0}" extension is not supported.</value>
+  </data>
+  <data name="MultipleExtensionsNotSupported" xml:space="preserve">
+    <value>Cannot add type. Input files must all have the same file extension.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Cannot add type. The assembly '{0}' could not be found.</value>
+  </data>
+  <data name="TypeAlreadyExists" xml:space="preserve">
+    <value>Cannot add type. The type name '{0}' already exists.</value>
+  </data>
+  <data name="OutputAssemblyDidNotResolve" xml:space="preserve">
+    <value>Cannot set output assembly. The path {0} did not resolve to a single file.</value>
+  </data>
+  <data name="CompilerErrors" xml:space="preserve">
+    <value>Cannot add type. Compilation errors occurred.</value>
+  </data>
+  <data name="OutputTypeRequiresOutputAssembly" xml:space="preserve">
+    <value>Cannot add type. The OutputType parameter requires that the OutputAssembly parameter be specified.</value>
+  </data>
+  <data name="CannotDefineNewType" xml:space="preserve">
+    <value>Cannot add type. Definition of new types is not supported in this language mode.</value>
+  </data>
+  <data name="ReferenceAssemblyIgnored" xml:space="preserve">
+    <value>The specified reference assembly '{0}' is unnecessary and ignored.</value>
+  </data>
+  <data name="AssemblyTypeNotSupported" xml:space="preserve">
+    <value>Both the assembly types 'ConsoleApplication' and 'WindowsApplication' are not currently supported.</value>
+  </data>
+  <data name="AddTypeLogTitle" xml:space="preserve">
+    <value>Add-Type Cmdlet</value>
+  </data>
+  <data name="AddTypeLogMessage" xml:space="preserve">
+    <value>Add-Type cmdlet will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AliasCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AliasCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..abb7afc3de7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/AliasCommandStrings.zh-Hant.resx
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetAliasAction" xml:space="preserve">
+    <value>Set Alias</value>
+  </data>
+  <data name="SetAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="NewAliasAction" xml:space="preserve">
+    <value>New Alias</value>
+  </data>
+  <data name="NewAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ImportAliasAction" xml:space="preserve">
+    <value>Import Alias</value>
+  </data>
+  <data name="ImportAliasTarget" xml:space="preserve">
+    <value>Name: {0} Value: {1}</value>
+  </data>
+  <data name="ExportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to export the alias. {1}</value>
+  </data>
+  <data name="ExportAliasHeaderTitle" xml:space="preserve">
+    <value>Alias File</value>
+  </data>
+  <data name="ExportAliasHeaderUser" xml:space="preserve">
+    <value>Exported by : {0}</value>
+  </data>
+  <data name="ExportAliasHeaderDate" xml:space="preserve">
+    <value>Date/Time : {0:F}</value>
+  </data>
+  <data name="ExportAliasHeaderMachine" xml:space="preserve">
+    <value>Computer : {0}</value>
+  </data>
+  <data name="ImportAliasFromFileSystemOnly" xml:space="preserve">
+    <value>Cannot import the alias because the specified path '{0}' referred to a '{1}' provider path. Change the value of the Path parameter to a file system path.</value>
+  </data>
+  <data name="ImportAliasPathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot import alias because path '{0}' contains wildcard characters that resolve to multiple paths. Aliases can be imported from only one file. Change the value of the Path parameter to a path that resolves to a single file.</value>
+  </data>
+  <data name="ImportAliasFileOpenFailed" xml:space="preserve">
+    <value>Cannot open file {0} to import the alias. {1}</value>
+  </data>
+  <data name="ImportAliasFileInvalidFormat" xml:space="preserve">
+    <value>Cannot import an alias. Line number {1} in the file '{0}' is not a properly-formatted, comma-separated values (CSV) line for aliases. Change the line to contain four values separated by commas. If the value text itself contains a comma, then the value must be contained in quotation marks.</value>
+  </data>
+  <data name="ImportAliasOptionsError" xml:space="preserve">
+    <value>Cannot import the alias because line number {1} in the file '{0}' contains an option that is not recognized for aliases. Change the file to contain valid options.</value>
+  </data>
+  <data name="NoAliasFound" xml:space="preserve">
+    <value>This command cannot find a matching alias because an alias with the {0} '{1}' does not exist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertFromStringData.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertFromStringData.zh-Hant.resx
new file mode 100644
index 00000000000..75e43519082
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertFromStringData.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidDataLine" xml:space="preserve">
+    <value>資料行 '{0}' 不是 'name=value' 格式。</value>
+  </data>
+  <data name="DataItemAlreadyDefined" xml:space="preserve">
+    <value>行 '{0}' 中的資料項目 '{1}' 已經定義。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertHTMLStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertHTMLStrings.zh-Hant.resx
new file mode 100644
index 00000000000..865447e08b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertHTMLStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetaPropertyNotFound" xml:space="preserve">
+    <value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertMarkdownStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertMarkdownStrings.zh-Hant.resx
new file mode 100644
index 00000000000..f01c75c279d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ConvertMarkdownStrings.zh-Hant.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidInputObjectType" xml:space="preserve">
+    <value>The type of the input object '{0}' is invalid.</value>
+  </data>
+  <data name="FileSystemPathsOnly" xml:space="preserve">
+    <value>Only FileSystem Provider paths are supported. The file path is not supported: '{0}'.</value>
+  </data>
+  <data name="MarkdownInfoInvalid" xml:space="preserve">
+    <value>The property {0} of the given object is null or empty.</value>
+  </data>
+  <data name="InvalidParameterSet" xml:space="preserve">
+    <value>Invalid parameter set name: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/CsvCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/CsvCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..20c7a456c17
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/CsvCommandStrings.zh-Hant.resx
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotAppendCsvWithMismatchedPropertyNames" xml:space="preserve">
+    <value>無法將 CSV 內容附加至下列檔案: {1}。附加物件的屬性未對應下列資料行: {0}。若要繼續使用不相符的屬性，請新增 -Force 參數，然後重新執行命令。</value>
+    <comment>{0} is a placeholder for property name (i.e. ProcessId)
+        {1} is a placeholder for filename (i.e. c:\users\lukasza\foo.csv)
+
+        {StrContains="Force"}
+
+        Reviewed by TArcher on 2010-06-29.
+    </comment>
+  </data>
+  <data name="CannotSpecifyQuoteFieldsAndUseQuotes" xml:space="preserve">
+    <value>您必須指定 -UseQuotes 或 -QuoteFields 參數，但不能同時指定兩者。</value>
+  </data>
+  <data name="CannotSpecifyPathAndLiteralPath" xml:space="preserve">
+    <value>您必須指定 -Path 或 -LiteralPath 參數，但不能同時指定兩者。</value>
+  </data>
+  <data name="UseDefaultNameForUnspecifiedHeader" xml:space="preserve">
+    <value>未指定一或多個標頭。已使用以 "H" 開頭的預設名稱取代任何遺漏的標頭。</value>
+  </data>
+  <data name="FileNameIsAMandatoryParameter" xml:space="preserve">
+    <value>FileName 是必要參數。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenAppending" xml:space="preserve">
+    <value>只有在附加時，才應呼叫 ReconcilePreexistingPropertyNames 方法。</value>
+  </data>
+  <data name="ReconcilePreexistingPropertyNamesMethodShouldOnlyGetCalledWhenPreexistingPropertyNamesHaveBeenReadSuccessfully" xml:space="preserve">
+    <value>只有在成功讀取現有屬性名稱後，才應呼叫 ReconcilePreexistingPropertyNames 方法。</value>
+  </data>
+  <data name="BuildPropertyNamesMethodShouldBeCalledOnlyOncePerCmdletInstance" xml:space="preserve">
+    <value>每個 Cmdlet 執行個體只能呼叫一次 BuildPropertyNames 方法。</value>
+  </data>
+  <data name="TypeHierarchyShouldNotHaveNullValues" xml:space="preserve">
+    <value>類型階層不應有 null 值。</value>
+  </data>
+  <data name="EOFIsReached" xml:space="preserve">
+    <value>已達到檔案結尾。</value>
+  </data>
+  <data name="CannotSpecifyAppendAndNoHeader" xml:space="preserve">
+    <value>您必須指定 -Append 或 -NoHeader 參數，但不能同時指定兩者。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/Debugger.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/Debugger.zh-Hant.resx
new file mode 100644
index 00000000000..75884ad9a06
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/Debugger.zh-Hant.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LineLessThanOne" xml:space="preserve">
+    <value>Line cannot be less than 1.</value>
+  </data>
+  <data name="BreakpointIdNotFound" xml:space="preserve">
+    <value>There is no breakpoint with ID '{0}'.</value>
+  </data>
+  <data name="FileDoesNotExist" xml:space="preserve">
+    <value>檔案 '{0}' 不存在。</value>
+  </data>
+  <data name="WrongExtension" xml:space="preserve">
+    <value>Cannot set breakpoint on file '{0}'; only *.ps1 and *.psm1 files are valid.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupported" xml:space="preserve">
+    <value>Debugging is not supported on remote sessions.</value>
+  </data>
+  <data name="CannotSetBreakpointInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot set breakpoint. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="RemoteDebuggerNotSupportedInHost" xml:space="preserve">
+    <value>Breakpoints cannot be set in the remote session because remote debugging is not supported by the current host.</value>
+  </data>
+  <data name="RunspaceDebuggingCannotDebugDefaultRunspace" xml:space="preserve">
+    <value>You cannot debug the default host Runspace using this cmdlet. To debug the default Runspace use the normal debugging commands from the host.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHostRunspaceOrDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The host has no debugger. Try debugging the Runspace inside the PowerShell console or with Visual Studio Code, both of which have built-in debuggers.</value>
+  </data>
+  <data name="RunspaceDebuggingNoHost" xml:space="preserve">
+    <value>Cannot debug Runspace. There is no host or host UI. The debugger requires a host and host UI for debugging.</value>
+  </data>
+  <data name="RunspaceDebuggingTooManyRunspacesFound" xml:space="preserve">
+    <value>More than one Runspace was found. Only one Runspace can be debugged at a time.</value>
+  </data>
+  <data name="RunspaceDebuggingEndSession" xml:space="preserve">
+    <value>To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.</value>
+  </data>
+  <data name="RunspaceDebuggingScriptCompleted" xml:space="preserve">
+    <value>Command or script completed.</value>
+  </data>
+  <data name="RunspaceDebuggingStarted" xml:space="preserve">
+    <value>Debugging Runspace: {0}</value>
+  </data>
+  <data name="RunspaceOptionInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot set debug options on Runspace {0} because it is not in the Opened state.</value>
+  </data>
+  <data name="PersistDebugPreferenceFailure" xml:space="preserve">
+    <value>Failed to persist debug options for Process {0}.</value>
+  </data>
+  <data name="RunspaceOptionNoDebugger" xml:space="preserve">
+    <value>No debugger was found for Runspace {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceFound" xml:space="preserve">
+    <value>No Runspace was found.</value>
+  </data>
+  <data name="DebugBreakMessage" xml:space="preserve">
+    <value>Wait-Debugger called on line {0} in {1}.</value>
+  </data>
+  <data name="RunspaceInstanceIdNotFound" xml:space="preserve">
+    <value>A breakpoint associated with another runspace cannot be updated because there is no runspace with instance ID '{0}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/EventingStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/EventingStrings.zh-Hant.resx
new file mode 100644
index 00000000000..b8d36d3eaff
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/EventingStrings.zh-Hant.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SourceIdentifierNotFound" xml:space="preserve">
+    <value>Event with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventIdentifierNotFound" xml:space="preserve">
+    <value>Event with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionSourceNotFound" xml:space="preserve">
+    <value>Event subscription with source identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscriptionNotFound" xml:space="preserve">
+    <value>Event subscription with identifier '{0}' does not exist.</value>
+  </data>
+  <data name="EventSubscription" xml:space="preserve">
+    <value>Event subscription '{0}'</value>
+  </data>
+  <data name="EventResource" xml:space="preserve">
+    <value>Event '{0}'</value>
+  </data>
+  <data name="ActionMandatoryForLocal" xml:space="preserve">
+    <value>Action must be specified for non-forwarded events.</value>
+  </data>
+  <data name="Unsubscribe" xml:space="preserve">
+    <value>取消訂閱</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>移除</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/FormatAndOut_out_gridview.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/FormatAndOut_out_gridview.zh-Hant.resx
new file mode 100644
index 00000000000..fcc9f4542db
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/FormatAndOut_out_gridview.zh-Hant.resx
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DataNotQualifiedForGridView" xml:space="preserve">
+    <value>The data format is not supported by Out-GridView.</value>
+  </data>
+  <data name="RestartPowerShell" xml:space="preserve">
+    <value>Microsoft .NET Framework 4.5 was installed while one or more PowerShell sessions were running. To use the {0} cmdlet, close all PowerShell windows, and then open a new PowerShell window.</value>
+  </data>
+  <data name="TypeColumnName" xml:space="preserve">
+    <value>Type</value>
+  </data>
+  <data name="ValueColumnName" xml:space="preserve">
+    <value>值</value>
+  </data>
+  <data name="IndexColumnName" xml:space="preserve">
+    <value>Index</value>
+  </data>
+  <data name="CommandNotFound" xml:space="preserve">
+    <value>A command named '{0}' was not found.</value>
+  </data>
+  <data name="MoreThanOneCommand" xml:space="preserve">
+    <value>More than one command named '{0}' was found. Start '{1}' with no parameters, and then type '{0}' to filter the results.</value>
+  </data>
+  <data name="CannotWriteToConsoleInputBuffer" xml:space="preserve">
+    <value>Cannot write to console input buffer.</value>
+  </data>
+  <data name="PropertyValidate" xml:space="preserve">
+    <value>{0} should be smaller than {1}.</value>
+    <comment>{0} is the property "Height"
+{1} is the maximum allowed value for the height property.</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetFormatDataStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetFormatDataStrings.zh-Hant.resx
new file mode 100644
index 00000000000..f20b16fad40
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetFormatDataStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ProcessViewDefinition" xml:space="preserve">
+    <value>正在處理檢視定義 '{0}'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetMember.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetMember.zh-Hant.resx
new file mode 100644
index 00000000000..5ad7b93b9c4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetMember.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoObjectSpecified" xml:space="preserve">
+    <value>You must specify an object for the Get-Member cmdlet.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetRandomCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetRandomCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..b3a7965b642
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetRandomCommandStrings.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxMustBeGreaterThanZeroApi" xml:space="preserve">
+    <value>'maxValue' must be greater than zero.</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMax" xml:space="preserve">
+    <value>The Minimum value ({0}) cannot be greater than or equal to the Maximum value ({1}).</value>
+  </data>
+  <data name="MinGreaterThanOrEqualMaxApi" xml:space="preserve">
+    <value>'minValue' cannot be greater than maxValue.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetUptimeStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetUptimeStrings.zh-Hant.resx
new file mode 100644
index 00000000000..a9d0be9630e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/GetUptimeStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetUptimePlatformIsNotSupported" xml:space="preserve">
+    <value>"The platform is not supported (System.Diagnostics.Stopwatch.IsHighResolution is false)."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HostStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HostStrings.zh-Hant.resx
new file mode 100644
index 00000000000..6972ece93c2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HostStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidColorErrorTemplate" xml:space="preserve">
+    <value>Cannot process the color because {0} is not a valid color.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HttpCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HttpCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..68a7fe3f0f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/HttpCommandStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Error" xml:space="preserve">
+    <value>無法完成此命令，因為發生下列錯誤: '{0}'。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImplicitRemotingStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImplicitRemotingStrings.zh-Hant.resx
new file mode 100644
index 00000000000..31e8a6acc8a
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImplicitRemotingStrings.zh-Hant.resx
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrorMalformedDataFromRemoteCommand" xml:space="preserve">
+    <value>Data returned by the remote {0} command is not in the expected format.</value>
+  </data>
+  <data name="ErrorRequiredRemoteCommandNotFound" xml:space="preserve">
+    <value>The {0} cmdlet requires the following commands in the remote session: Get-Command, Get-FormatData, and Select-Object. The following commands are used, but optional: Get-Help, and Measure-Object. Verify that the remote session includes the required commands, and then try again.</value>
+  </data>
+  <data name="ErrorFromRemoteCommand" xml:space="preserve">
+    <value>Running the {0} command in a remote session reported the following error: {1}.</value>
+  </data>
+  <data name="ErrorNoResultsFromRemoteEnd" xml:space="preserve">
+    <value>Running the {0} command in a remote session returned no results.</value>
+  </data>
+  <data name="ErrorNoRunspaceForThisModule" xml:space="preserve">
+    <value>No session has been associated with this implicit remoting module.</value>
+  </data>
+  <data name="ErrorCouldntResolveAlias" xml:space="preserve">
+    <value>Could not resolve remote alias '{0}'.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedCommand" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because the name did not match the value of the Name parameter.</value>
+  </data>
+  <data name="ErrorSkippedNonRequestedTypeDefinition" xml:space="preserve">
+    <value>Extended type definition has been skipped for the '{0}' type because its name did not match the value of the FormatTypeName parameter.</value>
+  </data>
+  <data name="ErrorSkippedUnsafeCommandName" xml:space="preserve">
+    <value>Proxy creation has been skipped for the '{0}' command, because PowerShell could not verify the safety of the command name.</value>
+  </data>
+  <data name="ErrorCommandSkippedBecauseOfShadowing" xml:space="preserve">
+    <value>Proxy creation has been skipped for the following command: '{0}', because it would shadow an existing local command.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ErrorNoCommandsImportedBecauseOfSkipping" xml:space="preserve">
+    <value>No command proxies have been created, because all of the requested remote commands would shadow existing local commands.  Use the AllowClobber parameter if you want to shadow existing local commands.</value>
+  </data>
+  <data name="ProxyModuleDescription" xml:space="preserve">
+    <value>Implicit remoting for {0}</value>
+  </data>
+  <data name="EventSourceIdentifier" xml:space="preserve">
+    <value>Implicit remoting event (session id: {0}; event handler id: {1})</value>
+  </data>
+  <data name="ModuleHeaderTitle" xml:space="preserve">
+    <value>Implicit remoting module</value>
+  </data>
+  <data name="ModuleHeaderDate" xml:space="preserve">
+    <value>generated on {0}</value>
+  </data>
+  <data name="ModuleHeaderCommand" xml:space="preserve">
+    <value>by {0} cmdlet</value>
+  </data>
+  <data name="ModuleHeaderCommandLine" xml:space="preserve">
+    <value>Invoked with the following command line: {0}</value>
+  </data>
+  <data name="ModuleHeaderRunspaceOverrideParameter" xml:space="preserve">
+    <value>Optional parameter that can be used to specify the session on which this proxy module works</value>
+  </data>
+  <data name="CreateNewRunspaceMessageTemplate" xml:space="preserve">
+    <value>Creating a new session for implicit remoting of "{{0}}" command...</value>
+  </data>
+  <data name="ProxyRunspaceNameTemplate" xml:space="preserve">
+    <value>Session for implicit remoting module at {{0}}</value>
+  </data>
+  <data name="ProgressActivity" xml:space="preserve">
+    <value>Creating implicit remoting module ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandStart" xml:space="preserve">
+    <value>Getting command information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetCommandProgress" xml:space="preserve">
+    <value>Getting command information from remote session ... {0} commands received</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataStart" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ...</value>
+  </data>
+  <data name="ProgressStatusGetFormatDataProgress" xml:space="preserve">
+    <value>Getting formatting and output information from remote session ... {0} objects received</value>
+  </data>
+  <data name="ProgressStatusCompleted" xml:space="preserve">
+    <value>Completed.</value>
+  </data>
+  <data name="CredentialRequestTitle" xml:space="preserve">
+    <value>PowerShell Credential Request</value>
+  </data>
+  <data name="CredentialRequestBody" xml:space="preserve">
+    <value>Enter your credentials for {0}.</value>
+  </data>
+  <data name="ProxyCredentialRequestBody" xml:space="preserve">
+    <value>Enter the HTTP proxy credentials that are used for the following connection: {0}</value>
+  </data>
+  <data name="WarningMismatchedImplicitRemotingHash" xml:space="preserve">
+    <value>Commands that are available in the new remote session are different than those available when the implicit remoting module was created.  Consider creating the module again by using the Export-PSSession cmdlet.</value>
+  </data>
+  <data name="CertificateNeeded" xml:space="preserve">
+    <value>Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.</value>
+  </data>
+  <data name="InvalidSigningOperation" xml:space="preserve">
+    <value>The file {0} could not be signed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImportLocalizedDataStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImportLocalizedDataStrings.zh-Hant.resx
new file mode 100644
index 00000000000..cb0229fd515
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/ImportLocalizedDataStrings.zh-Hant.resx
@@ -0,0 +1,152 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileNotExist" xml:space="preserve">
+    <value>The data file '{0}' cannot be found. </value>
+  </data>
+  <data name="NotCalledFromAScriptFile" xml:space="preserve">
+    <value>The FileName parameter was not specified. The FileName parameter is required when Import-LocalizedData is not called from a script file.</value>
+  </data>
+  <data name="ErrorOpeningFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was opening the data file '{0}':
+{1}.</value>
+  </data>
+  <data name="ErrorLoadingDataFile" xml:space="preserve">
+    <value>The following error occurred while PowerShell was loading the '{0}' script data file:
+{1}.</value>
+  </data>
+  <data name="FileNameParameterCannotHavePath" xml:space="preserve">
+    <value>The argument for the FileName parameter should not contain a path.</value>
+  </data>
+  <data name="CannotFindPsd1File" xml:space="preserve">
+    <value>Cannot find the PowerShell data file '{0}' in directory '{1}', or in any parent culture directories.</value>
+  </data>
+  <data name="CannotDefineSupportedCommand" xml:space="preserve">
+    <value>Cannot import localized data. The definition of additional supported commands is not allowed in this language mode.</value>
+  </data>
+  <data name="IncorrectVariableName" xml:space="preserve">
+    <value>The BindingVariable name '{0}' is invalid.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Import-LocalizedData Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Additional supported commands (via SupportedCommand parameter) will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MatchStringStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MatchStringStrings.zh-Hant.resx
new file mode 100644
index 00000000000..bc7da6005b7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MatchStringStrings.zh-Hant.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>Cannot open the file because the current provider ({0}) cannot open files.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file {0} cannot be read: {1}</value>
+  </data>
+  <data name="FilterContextWarning" xml:space="preserve">
+    <value>The option "Context" is not valid when searching results that are piped from Select-String output.</value>
+  </data>
+  <data name="InvalidRegex" xml:space="preserve">
+    <value>The string {0} is not a valid regular expression: {1}</value>
+  </data>
+  <data name="CannotSpecifyCultureWithoutSimpleMatch" xml:space="preserve">
+    <value>You must specify -Culture parameter only with -SimpleMatch parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MeasureObjectStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MeasureObjectStrings.zh-Hant.resx
new file mode 100644
index 00000000000..fbfdc4a21f2
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/MeasureObjectStrings.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>在任何物件的輸入中，都找不到屬性 "{0}"。</value>
+  </data>
+  <data name="NonNumericInputObject" xml:space="preserve">
+    <value>輸入物件 "{0}" 不是數值。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/NewObjectStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/NewObjectStrings.zh-Hant.resx
new file mode 100644
index 00000000000..4d5839056f7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/NewObjectStrings.zh-Hant.resx
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotFindAppropriateCtor" xml:space="preserve">
+    <value>A constructor was not found. Cannot find an appropriate constructor for type {0}.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Cannot find type [{0}]: verify that the assembly containing this type is loaded.</value>
+  </data>
+  <data name="CannotLoadComObjectType" xml:space="preserve">
+    <value>Cannot load COM type {0}.</value>
+  </data>
+  <data name="ComInteropLoaded" xml:space="preserve">
+    <value>The object written to the pipeline is an instance of the type "{0}" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.</value>
+  </data>
+  <data name="MemberNotFound" xml:space="preserve">
+    <value>The member "{1}" was not found for the specified {2} object.</value>
+  </data>
+  <data name="InvalidValue" xml:space="preserve">
+    <value>The value supplied is not valid, or the property is read-only. Change the value, and then try again.</value>
+  </data>
+  <data name="CannotInstantiateWinRTType" xml:space="preserve">
+    <value>Creating instances of attribute and delegated Windows RT types is not supported.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create instances of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="CannotCreateTypeLanguageMode" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in {0} language mode on a policy locked down machine.</value>
+  </data>
+  <data name="TypeWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet Type Creation</value>
+  </data>
+  <data name="TypeWDACLogMessage" xml:space="preserve">
+    <value>The type '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="ComWDACLogTitle" xml:space="preserve">
+    <value>New-Object Cmdlet COM Object Creation</value>
+  </data>
+  <data name="ComWDACLogMessage" xml:space="preserve">
+    <value>The COM object '{0}' will not be created in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/OutPrinterDisplayStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/OutPrinterDisplayStrings.zh-Hant.resx
new file mode 100644
index 00000000000..06b5ab3d4b4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/OutPrinterDisplayStrings.zh-Hant.resx
@@ -0,0 +1,124 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultPrintFontName" xml:space="preserve">
+    <value>Courier New</value>
+    <comment>{StringCategory="Font Name"}</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SelectObjectStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SelectObjectStrings.zh-Hant.resx
new file mode 100644
index 00000000000..bdd62150f75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SelectObjectStrings.zh-Hant.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RenamingMultipleResults" xml:space="preserve">
+    <value>Cannot rename multiple results.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>Property "{0}" cannot be found.</value>
+  </data>
+  <data name="MutlipleExpandProperties" xml:space="preserve">
+    <value>Multiple properties cannot be expanded.</value>
+  </data>
+  <data name="AlreadyExistingProperty" xml:space="preserve">
+    <value>The property cannot be processed because the property "{0}" already exists.</value>
+  </data>
+  <data name="EmptyScriptBlockAndNoName" xml:space="preserve">
+    <value>A property is an empty script block and does not provide a name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SendMailMessageStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SendMailMessageStrings.zh-Hant.resx
new file mode 100644
index 00000000000..d6bfa0981df
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SendMailMessageStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HostNameValue" xml:space="preserve">
+    <value>無法傳送電子郵件，因為未指定 SMTP 伺服器。您必須使用 SmtpServer 參數或 $PSEmailServer 變數來指定 SMTP 伺服器。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SortObjectStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SortObjectStrings.zh-Hant.resx
new file mode 100644
index 00000000000..4b0bf6df438
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/SortObjectStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>"Sort-Object" - "{0}" cannot be found in "InputObject".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/StartSleepStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/StartSleepStrings.zh-Hant.resx
new file mode 100644
index 00000000000..8a9aed4bd67
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/StartSleepStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaximumDurationExceeded" xml:space="preserve">
+    <value>The '-Duration' parameter value must not exceed '{0}', provided value was '{1}'.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TestJsonCmdletStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TestJsonCmdletStrings.zh-Hant.resx
new file mode 100644
index 00000000000..49ee964a5e7
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TestJsonCmdletStrings.zh-Hant.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidJsonSchema" xml:space="preserve">
+    <value>Cannot parse the JSON schema.</value>
+  </data>
+  <data name="InvalidJson" xml:space="preserve">
+    <value>Cannot parse the JSON.</value>
+  </data>
+  <data name="InvalidJsonAgainstSchemaDetailed" xml:space="preserve">
+    <value>The JSON is not valid with the schema: {0} at '{1}'</value>
+  </data>
+  <data name="JsonSchemaFileOpenFailure" xml:space="preserve">
+    <value>Can not open JSON schema file: {0}</value>
+  </data>
+  <data name="InvalidUriScheme" xml:space="preserve">
+    <value>URI scheme '{0}' is not supported. Only HTTP(S) and local file system URIs are allowed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TraceCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TraceCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..e771733c140
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/TraceCommandStrings.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TraceFileOnly" xml:space="preserve">
+    <value>追蹤輸出只能寫入檔案系統。路徑 '{0}' 參照 '{1}' 提供者路徑。</value>
+  </data>
+  <data name="TraceSingleFileOnly" xml:space="preserve">
+    <value>追蹤輸出只能寫入單一系統。路徑 '{0}' 解析成多個檔案。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UnblockFileStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UnblockFileStrings.zh-Hant.resx
new file mode 100644
index 00000000000..7b6946f5d62
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UnblockFileStrings.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LinuxNotSupported" xml:space="preserve">
+    <value>此 Cmdlet 不支援 Linux。</value>
+  </data>
+  <data name="UnblockError" xml:space="preserve">
+    <value>解除封鎖 {0} 時發生錯誤。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateDataStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateDataStrings.zh-Hant.resx
new file mode 100644
index 00000000000..f0754aa54d4
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateDataStrings.zh-Hant.resx
@@ -0,0 +1,186 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateData_WrongProviderError" xml:space="preserve">
+    <value>Cannot open the file because the current provider is "{0}", and this command requires a file.</value>
+  </data>
+  <data name="UpdateData_WrongExtension" xml:space="preserve">
+    <value>Cannot read the file "{0}"  because it does not have the file name extension "{1}".</value>
+  </data>
+  <data name="UpdateTypeDataAction" xml:space="preserve">
+    <value>Update TypeData</value>
+  </data>
+  <data name="UpdateFormatDataAction" xml:space="preserve">
+    <value>Update FormatData</value>
+  </data>
+  <data name="UpdateTarget" xml:space="preserve">
+    <value>FileName: {0}</value>
+  </data>
+  <data name="CannotUpdateMemberType" xml:space="preserve">
+    <value>Cannot update a member with type "{0}". Specify a different type for the MemberType parameter.</value>
+  </data>
+  <data name="ShouldBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is required for the type "{1}". Please specify the {0} parameter.</value>
+  </data>
+  <data name="ShouldNotBeNull" xml:space="preserve">
+    <value>The {0} parameter should not be null or an empty string for a member of type "{1}". Specify a non-null value for the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="ShouldNotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is not necessary for a member of type "{1}", and should not be specified. Do not specify the {0} parameter when updating this member type.</value>
+  </data>
+  <data name="TypeDataEmpty" xml:space="preserve">
+    <value>No member is specified for the update on type "{0}".</value>
+  </data>
+  <data name="TargetTypeNameEmpty" xml:space="preserve">
+    <value>The target type name should not be null, empty, or contain only white spaces.</value>
+  </data>
+  <data name="Value1AndValue2AreNotBothNull" xml:space="preserve">
+    <value>The Value and SecondValue parameters should not both be null for a member of type "{0}". Specify a non-null value for one of the two parameters.</value>
+  </data>
+  <data name="WrongMemberCount" xml:space="preserve">
+    <value>Only one member type can be specified. The member types specified are: "{0}". Update the type with only one member type.</value>
+  </data>
+  <data name="MemberTypeIsMissing" xml:space="preserve">
+    <value>The MemberName, Value, and SecondValue parameters cannot be specified without the MemberType parameter.</value>
+  </data>
+  <data name="RemoveTypeDataAction" xml:space="preserve">
+    <value>Remove TypeData</value>
+  </data>
+  <data name="RemoveTypeDataTarget" xml:space="preserve">
+    <value>Name of the type that will be removed: {0}</value>
+  </data>
+  <data name="UpdateTypeDataTarget" xml:space="preserve">
+    <value>Type to update: {0}</value>
+  </data>
+  <data name="RemoveTypeFileAction" xml:space="preserve">
+    <value>Remove type file</value>
+  </data>
+  <data name="TypeFileNotExistsInCurrentSession" xml:space="preserve">
+    <value>The file {0} is not imported into the current session.</value>
+  </data>
+  <data name="FormatUpdatesDisabled" xml:space="preserve">
+    <value>Updating format data is not allowed in this runspace. The 'DisableFormatUpdates' property is set to True when creating the runspace.</value>
+  </data>
+  <data name="CannotUpdateFormatWithFormatTable" xml:space="preserve">
+    <value>Cannot update the format data with a FormatTable instance.</value>
+  </data>
+  <data name="CannotUpdateTypeWithTypeTable" xml:space="preserve">
+    <value>Cannot update the type data with a TypeTable instance.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateListStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateListStrings.zh-Hant.resx
new file mode 100644
index 00000000000..4908857c573
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UpdateListStrings.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberDoesntExist" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object</value>
+  </data>
+  <data name="MissingPropertyParameter" xml:space="preserve">
+    <value>You must specify the Property parameter when the InputObject parameter is specified.</value>
+  </data>
+  <data name="MissingInputObjectParameter" xml:space="preserve">
+    <value>You must specify the InputObject parameter when the Property parameter is specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UtilityCommonStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UtilityCommonStrings.zh-Hant.resx
new file mode 100644
index 00000000000..ca8fe0ee44b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/UtilityCommonStrings.zh-Hant.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Invalidpath" xml:space="preserve">
+    <value>{2} 有一或多個無效的例外狀況。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>無法執行此命令，因為檔案路徑 '{0}' 無效。請提供有效的檔案路徑，然後執行命令。</value>
+  </data>
+  <data name="EmptyCSSUri" xml:space="preserve">
+    <value>無法執行此命令，因為 '{0}' 是空的或空白。請指定 CSSUri，然後執行命令。</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>無法開啟檔案，因為目前的提供者 ({0}) 無法開啟檔案。</value>
+  </data>
+  <data name="SearchXMLPrefixNullError" xml:space="preserve">
+    <value>無法執行此命令，因為 Namespace 參數中的前置詞值為 null。請為前置詞提供有效值，然後再次執行命令。</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>無法展開依此屬性分組的物件，因為索引鍵重複。請為此屬性提供有效值，然後再試一次。</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>此作業系統不支援這個命令。</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>無法讀取檔案 '{0}': {1}</value>
+  </data>
+  <data name="FormatHexTypeNotSupported" xml:space="preserve">
+    <value>無法將類型為 '{0}' 的輸入轉換為十六進位。若要檢視其字串表示的十六進位格式，請先將它傳送至 Out-String Cmdlet，再傳送至 Format-Hex。</value>
+  </data>
+  <data name="FormatHexOnlySupportsFileSystemPaths" xml:space="preserve">
+    <value>不支援指定的路徑 '{0}'。此命令僅支援 FileSystem 提供者路徑。</value>
+  </data>
+  <data name="FormatHexPathPrefix" xml:space="preserve">
+    <value>路徑:</value>
+  </data>
+  <data name="GroupObjectWithHashTable" xml:space="preserve">
+    <value>無法執行命令，因為 AsString 參數需要您指定 AsHashtable 參數。</value>
+  </data>
+  <data name="GroupObjectSingleProperty" xml:space="preserve">
+    <value>無法執行命令，因為當 AsHashTable 參數搭配一個以上的屬性使用時，必須同時加入 AsString 參數。</value>
+  </data>
+  <data name="PathDoesNotExist" xml:space="preserve">
+    <value>找不到路徑 '{0}'，因為它不存在。</value>
+  </data>
+  <data name="PSPrefixReservedInInformationTag" xml:space="preserve">
+    <value>無法使用標記 '{0}'。'PS' 前置詞是保留的。</value>
+  </data>
+  <data name="CouldNotParseAsPowerShellDataFile" xml:space="preserve">
+    <value>無法將檔案 '{0}' 剖析為 PowerShell 資料檔案。</value>
+  </data>
+  <data name="InvalidSDDL" xml:space="preserve">
+    <value>無法從指定的 SDDL 建構安全性描述元，因為發生下列錯誤: {0}</value>
+  </data>
+  <data name="IEXWDACLogTitle" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet</value>
+  </data>
+  <data name="IEXWDACLogMessage" xml:space="preserve">
+    <value>Invoke-Expression Cmdlet 指令碼區塊將會以 ConstrainedLanguage 模式執行。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/VariableCommandStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/VariableCommandStrings.zh-Hant.resx
new file mode 100644
index 00000000000..b422ea58e25
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/VariableCommandStrings.zh-Hant.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetVariableAction" xml:space="preserve">
+    <value>設定變數</value>
+  </data>
+  <data name="SetVariableTarget" xml:space="preserve">
+    <value>名稱: {0}，值: {1}</value>
+  </data>
+  <data name="UseSingleVariable" xml:space="preserve">
+    <value>使用單一變數，而非集合</value>
+  </data>
+  <data name="NewVariableAction" xml:space="preserve">
+    <value>新增變數</value>
+  </data>
+  <data name="NewVariableTarget" xml:space="preserve">
+    <value>名稱: {0}，值: {1}</value>
+  </data>
+  <data name="RemoveVariableAction" xml:space="preserve">
+    <value>移除變數</value>
+  </data>
+  <data name="RemoveVariableTarget" xml:space="preserve">
+    <value>名稱: {0}</value>
+  </data>
+  <data name="ClearVariableAction" xml:space="preserve">
+    <value>清除變數</value>
+  </data>
+  <data name="ClearVariableTarget" xml:space="preserve">
+    <value>名稱: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WebCmdletStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WebCmdletStrings.zh-Hant.resx
new file mode 100644
index 00000000000..80f45281c7e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WebCmdletStrings.zh-Hant.resx
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AccessDenied" xml:space="preserve">
+    <value>存取路徑 '{0}' 遭拒。</value>
+  </data>
+  <data name="AllowUnencryptedAuthenticationRequired" xml:space="preserve">
+    <value>The cmdlet cannot protect plain text secrets sent over unencrypted connections. To suppress this warning and send plain text secrets over unencrypted networks, reissue the command specifying the AllowUnencryptedAuthentication parameter.</value>
+  </data>
+  <data name="AuthenticationConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Authentication and UseDefaultCredentials. Authentication does not support Default Credentials. Specify either Authentication or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="AuthenticationCredentialNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Credential. The supplied Authentication type requires a Credential. Specify Credential, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is not specified: Token. The supplied Authentication type requires a Token. Specify Token, then retry.</value>
+  </data>
+  <data name="AuthenticationTokenConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and Token. Specify either Credential or Token, then retry.</value>
+  </data>
+  <data name="BodyConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and InFile. Specify either Body or Infile, then retry.  </value>
+  </data>
+  <data name="BodyFormConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Body and Form. Specify either Body or Form, then retry.  </value>
+  </data>
+  <data name="FormInFileConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: InFile and Form. Specify either InFile or Form, then retry.  </value>
+  </data>
+  <data name="ContentTypeException" xml:space="preserve">
+    <value>The cmdlet cannot run because the -ContentType parameter is not a valid Content-Type header. Specify a valid Content-Type for -ContentType, then retry. To suppress header validation, supply the -SkipHeaderValidation parameter.</value>
+  </data>
+  <data name="CredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Credential and UseDefaultCredentials. Specify either Credential or UseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="DirectoryPathSpecified" xml:space="preserve">
+    <value>Path '{0}' resolves to a directory. Specify a path including a file name, and then retry the command.</value>
+  </data>
+  <data name="EmptyKeyInJsonString" xml:space="preserve">
+    <value>The provided JSON includes a property whose name is an empty string, this is only supported using the -AsHashTable switch.</value>
+  </data>
+  <data name="DuplicateKeysInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because a dictionary that was converted from the string contains the duplicated key '{0}'.</value>
+  </data>
+  <data name="IEDomNotSupported" xml:space="preserve">
+    <value>The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. </value>
+  </data>
+  <data name="InsecureRedirection" xml:space="preserve">
+    <value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
+  </data>
+  <data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
+    <value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
+  </data>
+  <data name="MaximumRedirectionCountExceeded" xml:space="preserve">
+    <value>The maximum redirection count has been exceeded. To increase the number of redirections allowed, supply a higher value to the -MaximumRedirection parameter.</value>
+  </data>
+  <data name="MultiplePathsResolved" xml:space="preserve">
+    <value>Path '{0}' can be resolved to multiple paths.</value>
+  </data>
+  <data name="NonStringKeyInDictionary" xml:space="preserve">
+    <value>The type '{0}' is not supported for serialization or deserialization of a dictionary. Keys must be strings.</value>
+  </data>
+  <data name="NoPathResolved" xml:space="preserve">
+    <value>Path '{0}' cannot be resolved to a file.</value>
+  </data>
+  <data name="NotFilesystemPath" xml:space="preserve">
+    <value>Path '{0}' is not a file system path. Please specify the path to a file in the file system.</value>
+  </data>
+  <data name="OutFileMissing" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: OutFile. Provide a valid OutFile parameter value when using the {0} parameter, then retry.</value>
+  </data>
+  <data name="OutFileWritingSkipped" xml:space="preserve">
+    <value>The file will not be re-downloaded because the remote file is the same size as the OutFile: {0}</value>
+  </data>
+  <data name="ProxyCredentialConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: ProxyCredential and ProxyUseDefaultCredentials. Specify either ProxyCredential or ProxyUseDefaultCredentials, then retry.</value>
+  </data>
+  <data name="ProxyUriNotSupplied" xml:space="preserve">
+    <value>The cmdlet cannot run because the following parameter is missing: Proxy. Provide a valid proxy URI for the Proxy parameter when using the ProxyCredential or ProxyUseDefaultCredentials parameters, then retry.</value>
+  </data>
+  <data name="ReadResponseComplete" xml:space="preserve">
+    <value>Reading web response stream completed. Bytes downloaded: {0}</value>
+  </data>
+  <data name="ReadResponseProgressActivity" xml:space="preserve">
+    <value>Reading web response stream</value>
+  </data>
+  <data name="ReadResponseProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="ResumeNotFilePath" xml:space="preserve">
+    <value>The Resume switch can only be used if OutFile targets a file but it resolves to a directory: {0}.</value>
+  </data>
+  <data name="SessionConflict" xml:space="preserve">
+    <value>The cmdlet cannot run because the following conflicting parameters are specified: Session and SessionVariable. Specify either Session or SessionVariable, then retry.</value>
+  </data>
+  <data name="ThumbprintNotFound" xml:space="preserve">
+    <value>Unable to retrieve certificates because the thumbprint is not valid. Verify the thumbprint and retry. </value>
+  </data>
+  <data name="WriteRequestComplete" xml:space="preserve">
+    <value>Web request completed. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestCancelled" xml:space="preserve">
+    <value>Web request cancelled. (Number of bytes processed: {0})</value>
+  </data>
+  <data name="WriteRequestProgressActivity" xml:space="preserve">
+    <value>Web request status</value>
+  </data>
+  <data name="WriteRequestProgressStatus" xml:space="preserve">
+    <value>Downloaded: {0} of {1}</value>
+  </data>
+  <data name="JsonDeserializationFailed" xml:space="preserve">
+    <value>Conversion from JSON failed with error: {0}</value>
+  </data>
+  <data name="ResponseStatusCodeFailure" xml:space="preserve">
+    <value>Response status code does not indicate success: {0} ({1}).</value>
+  </data>
+  <data name="FollowingRelLinkVerboseMsg" xml:space="preserve">
+    <value>Following rel link {0}</value>
+  </data>
+  <data name="WebMethodResumeFailedVerboseMsg" xml:space="preserve">
+    <value>The remote server indicated it could not resume downloading. The local file will be overwritten.</value>
+  </data>
+  <data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
+    <value>Received HTTP/{0} response of content type {1} of unknown size</value>
+  </data>
+  <data name="RetryVerboseMsg" xml:space="preserve">
+    <value>Retrying after interval of {0} seconds. Status code for previous attempt: {1}</value>
+  </data>
+  <data name="JsonMaxDepthReached" xml:space="preserve">
+    <value>Resulting JSON is truncated as serialization has exceeded the set depth of {0}.</value>
+  </data>
+  <data name="WebSessionConnectionRecreated" xml:space="preserve">
+    <value>The WebSession properties were changed between requests forcing all HTTP connections in the session to be recreated.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteErrorStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteErrorStrings.zh-Hant.resx
new file mode 100644
index 00000000000..33b1df84a74
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteErrorStrings.zh-Hant.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteErrorException" xml:space="preserve">
+    <value>"The Write-Error cmdlet reported an error."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteProgressResourceStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteProgressResourceStrings.zh-Hant.resx
new file mode 100644
index 00000000000..291b2f4df66
--- /dev/null
+++ b/src/Microsoft.PowerShell.Commands.Utility/resources/zh-Hant/WriteProgressResourceStrings.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ActivityParameterHelpMessage" xml:space="preserve">
+    <value>描述正在報告進度之活動的文字。</value>
+  </data>
+  <data name="StatusParameterHelpMessage" xml:space="preserve">
+    <value>描述目前正在報告進度之活動目前狀態的文字。</value>
+  </data>
+  <data name="Processing" xml:space="preserve">
+    <value>正在處理</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Commands.Utility/singleshell/installer/MshUtilityMshSnapin.cs b/src/Microsoft.PowerShell.Commands.Utility/singleshell/installer/MshUtilityMshSnapin.cs
deleted file mode 100644
index 1c29b44c603..00000000000
--- a/src/Microsoft.PowerShell.Commands.Utility/singleshell/installer/MshUtilityMshSnapin.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.ComponentModel;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// MshUtilityMshSnapin (or MshUtilityMshSnapinInstaller) is a class for facilitating registry
-    /// of necessary information for monad utility mshsnapin.
-    ///
-    /// This class will be built with monad utility dll.
-    /// </summary>
-    [RunInstaller(true)]
-    public sealed class PSUtilityPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of this class.
-        /// </summary>
-        public PSUtilityPSSnapIn()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// Get name of this mshsnapin.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return RegistryStrings.UtilityMshSnapinName;
-            }
-        }
-
-        /// <summary>
-        /// Get the default vendor string for this mshsnapin.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for vendor. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "UtilityMshSnapInResources,Vendor";
-            }
-        }
-
-        /// <summary>
-        /// Get the default description string for this mshsnapin.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This PSSnapIn contains utility cmdlets used to manipulate data.";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for description. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "UtilityMshSnapInResources,Description";
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj b/src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj
index bbc8023b1da..ddb794bd1d2 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj
+++ b/src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj
@@ -10,20 +10,13 @@
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
   <ItemGroup Condition=" '$(IsWindows)' != 'true' ">
     <Compile Remove="WindowsTaskbarJumpList\*.cs" />
   </ItemGroup>
 
   <ItemGroup>
-    <Compile Remove="singleshell\installer\EngineInstaller.cs" />
-    <Compile Remove="singleshell\installer\MshHostMshSnapin.cs" />
-    <Compile Remove="gen\HostMshSnapinResources.cs" />
-
-    <EmbeddedResource Remove="resources\HostMshSnapinResources.resx" />
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
   </ItemGroup>
-
 </Project>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs
index f5903ded5bc..8cc6bd8ab02 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/ComInterfaces.cs
@@ -20,20 +20,20 @@ internal static class ComInterfaces
         [StructLayout(LayoutKind.Sequential)]
         internal readonly struct StartUpInfo
         {
-            public readonly UInt32 cb;
+            public readonly uint cb;
             private readonly IntPtr lpReserved;
             public readonly IntPtr lpDesktop;
             public readonly IntPtr lpTitle;
-            public readonly UInt32 dwX;
-            public readonly UInt32 dwY;
-            public readonly UInt32 dwXSize;
-            public readonly UInt32 dwYSize;
-            public readonly UInt32 dwXCountChars;
-            public readonly UInt32 dwYCountChars;
-            public readonly UInt32 dwFillAttribute;
-            public readonly UInt32 dwFlags;
-            public readonly UInt16 wShowWindow;
-            private readonly UInt16 cbReserved2;
+            public readonly uint dwX;
+            public readonly uint dwY;
+            public readonly uint dwXSize;
+            public readonly uint dwYSize;
+            public readonly uint dwXCountChars;
+            public readonly uint dwYCountChars;
+            public readonly uint dwFillAttribute;
+            public readonly uint dwFlags;
+            public readonly ushort wShowWindow;
+            private readonly ushort cbReserved2;
             private readonly IntPtr lpReserved2;
             public readonly IntPtr hStdInput;
             public readonly IntPtr hStdOutput;
@@ -160,7 +160,7 @@ internal interface IPropertyStore
             HResult Commit();
         }
 
-        [ComImport()]
+        [ComImport]
         [Guid("6332DEBF-87B5-4670-90C0-5E57B408A49E")]
         [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
         internal interface ICustomDestinationList
@@ -204,7 +204,7 @@ internal enum KnownDestinationCategory
             Recent
         }
 
-        [ComImport()]
+        [ComImport]
         [Guid("92CA9DCD-5622-4BBA-A805-5E9F541BD8C9")]
         [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
         internal interface IObjectArray
@@ -217,7 +217,7 @@ void GetAt(
                 [Out(), MarshalAs(UnmanagedType.Interface)] out object ppvObject);
         }
 
-        [ComImport()]
+        [ComImport]
         [Guid("5632B1A4-E38A-400A-928A-D4CD63230295")]
         [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
         internal interface IObjectCollection
@@ -248,13 +248,13 @@ void AddFromArray(
         internal interface IShellLinkDataListW
         {
             [PreserveSig]
-            Int32 AddDataBlock(IntPtr pDataBlock);
+            int AddDataBlock(IntPtr pDataBlock);
 
             [PreserveSig]
-            Int32 CopyDataBlock(UInt32 dwSig, out IntPtr ppDataBlock);
+            int CopyDataBlock(uint dwSig, out IntPtr ppDataBlock);
 
             [PreserveSig]
-            Int32 RemoveDataBlock(UInt32 dwSig);
+            int RemoveDataBlock(uint dwSig);
 
             void GetFlags(out uint pdwFlags);
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/HResult.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/HResult.cs
index e23f0810ea1..4789bcef06f 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/HResult.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/HResult.cs
@@ -4,18 +4,18 @@
 namespace Microsoft.PowerShell
 {
     /// <summary>
-    /// HRESULT Wrapper    
-    /// </summary>    
+    /// HRESULT Wrapper
+    /// </summary>
     internal enum HResult
     {
-        /// <summary>     
-        /// S_OK          
-        /// </summary>    
+        /// <summary>
+        /// S_OK
+        /// </summary>
         Ok = 0x0000,
 
         /// <summary>
         /// S_FALSE.
-        /// </summary>        
+        /// </summary>
         False = 0x0001,
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropVariant.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropVariant.cs
index 10db7912b4a..408c59c482a 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropVariant.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropVariant.cs
@@ -34,9 +34,7 @@ internal PropVariant(string value)
                 throw new ArgumentException("PropVariantNullString", nameof(value));
             }
 
-#pragma warning disable CS0618 // Type or member is obsolete (might get deprecated in future versions
             _valueType = (ushort)VarEnum.VT_LPWSTR;
-#pragma warning restore CS0618 // Type or member is obsolete (might get deprecated in future versions
             _ptr = Marshal.StringToCoTaskMemUni(value);
         }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropertyKey.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropertyKey.cs
index ecd1918492b..93346424dc5 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropertyKey.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/PropertyKey.cs
@@ -21,7 +21,7 @@ namespace Microsoft.PowerShell
         /// <summary>
         /// Property identifier (PID)
         /// </summary>
-        public Int32 PropertyId { get; }
+        public int PropertyId { get; }
 
         #endregion
 
@@ -32,7 +32,7 @@ namespace Microsoft.PowerShell
         /// </summary>
         /// <param name="formatId">A unique GUID for the property.</param>
         /// <param name="propertyId">Property identifier (PID).</param>
-        internal PropertyKey(Guid formatId, Int32 propertyId)
+        internal PropertyKey(Guid formatId, int propertyId)
         {
             this.FormatId = formatId;
             this.PropertyId = propertyId;
diff --git a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/TaskbarJumpList.cs b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/TaskbarJumpList.cs
index 90c6c811bb1..5606eabd567 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/TaskbarJumpList.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/WindowsTaskbarJumpList/TaskbarJumpList.cs
@@ -33,13 +33,12 @@ internal static void CreateRunAsAdministratorJumpList()
             {
                 try
                 {
-                    TaskbarJumpList.CreateElevatedEntry(ConsoleHostStrings.RunAsAdministrator);
+                    CreateElevatedEntry(ConsoleHostStrings.RunAsAdministrator);
                 }
-                catch (Exception exception)
+                catch (Exception)
                 {
                     // Due to COM threading complexity there might still be sporadic failures but they can be
                     // ignored as creating the JumpList is not critical and persists after its first creation.
-                    Debug.Fail($"Creating 'Run as Administrator' JumpList failed. {exception}");
                 }
             });
 
@@ -48,7 +47,7 @@ internal static void CreateRunAsAdministratorJumpList()
                 thread.SetApartmentState(ApartmentState.STA);
                 thread.Start();
             }
-            catch (System.Threading.ThreadStartException)
+            catch (ThreadStartException)
             {
                 // STA may not be supported on some platforms
             }
@@ -117,7 +116,6 @@ private static void CreateElevatedEntry(string title)
                     var CLSID_EnumerableObjectCollection = new Guid(@"2d3468c1-36a7-43b6-ac24-d3f02fd9607a");
                     const uint CLSCTX_INPROC_HANDLER = 2;
                     const uint CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER;
-                    var ComSvrInterface_GUID = new Guid(@"555E2D2B-EE00-47AA-AB2B-39F953F6B339");
                     hResult = CoCreateInstance(ref CLSID_EnumerableObjectCollection, null, CLSCTX_INPROC, ref IID_IUnknown, out object instance);
                     if (hResult < 0)
                     {
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs
index ad809b70982..0fb85e740f4 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs
@@ -1,6 +1,5 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
-
 #nullable enable
 
 using System;
@@ -175,6 +174,7 @@ internal static int MaxNameLength()
             "sta",
             "mta",
             "command",
+            "commandwithargs",
             "configurationname",
             "custompipename",
             "encodedcommand",
@@ -187,6 +187,7 @@ internal static int MaxNameLength()
             "nologo",
             "noninteractive",
             "noprofile",
+            "noprofileloadtime",
             "outputformat",
             "removeworkingdirectorytrailingcharacter",
             "settingsfile",
@@ -195,6 +196,66 @@ internal static int MaxNameLength()
             "workingdirectory"
         };
 
+#pragma warning disable SA1025 // CodeMustNotContainMultipleWhitespaceInARow
+        /// <summary>
+        /// These represent the parameters that are used when starting pwsh.
+        /// We can query in our telemetry to determine how pwsh was invoked.
+        /// </summary>
+        [Flags]
+        internal enum ParameterBitmap : long
+        {
+            Command             = 0x0000000000000001, // -Command | -c
+            ConfigurationName   = 0x0000000000000002, // -ConfigurationName | -config
+            CustomPipeName      = 0x0000000000000004, // -CustomPipeName
+            EncodedCommand      = 0x0000000000000008, // -EncodedCommand | -e | -ec
+            EncodedArgument     = 0x0000000000000010, // -EncodedArgument
+            ExecutionPolicy     = 0x0000000000000020, // -ExecutionPolicy | -ex | -ep
+            File                = 0x0000000000000040, // -File | -f
+            Help                = 0x0000000000000080, // -Help, -?, /?
+            InputFormat         = 0x0000000000000100, // -InputFormat | -inp | -if
+            Interactive         = 0x0000000000000200, // -Interactive | -i
+            Login               = 0x0000000000000400, // -Login | -l
+            MTA                 = 0x0000000000000800, // -MTA
+            NoExit              = 0x0000000000001000, // -NoExit | -noe
+            NoLogo              = 0x0000000000002000, // -NoLogo | -nol
+            NonInteractive      = 0x0000000000004000, // -NonInteractive | -noni
+            NoProfile           = 0x0000000000008000, // -NoProfile | -nop
+            OutputFormat        = 0x0000000000010000, // -OutputFormat | -o | -of
+            SettingsFile        = 0x0000000000020000, // -SettingsFile | -settings
+            SSHServerMode       = 0x0000000000040000, // -SSHServerMode | -sshs
+            SocketServerMode    = 0x0000000000080000, // -SocketServerMode | -sockets
+            ServerMode          = 0x0000000000100000, // -ServerMode | -server
+            NamedPipeServerMode = 0x0000000000200000, // -NamedPipeServerMode | -namedpipes
+            STA                 = 0x0000000000400000, // -STA
+            Version             = 0x0000000000800000, // -Version | -v
+            WindowStyle         = 0x0000000001000000, // -WindowStyle | -w
+            WorkingDirectory    = 0x0000000002000000, // -WorkingDirectory | -wd
+            ConfigurationFile   = 0x0000000004000000, // -ConfigurationFile
+            NoProfileLoadTime   = 0x0000000008000000, // -NoProfileLoadTime
+            CommandWithArgs     = 0x0000000010000000, // -CommandWithArgs | -cwa
+
+            // Enum values for specified ExecutionPolicy
+            EPUnrestricted      = 0x0000000100000000, // ExecutionPolicy unrestricted
+            EPRemoteSigned      = 0x0000000200000000, // ExecutionPolicy remote signed
+            EPAllSigned         = 0x0000000400000000, // ExecutionPolicy all signed
+            EPRestricted        = 0x0000000800000000, // ExecutionPolicy restricted
+            EPDefault           = 0x0000001000000000, // ExecutionPolicy default
+            EPBypass            = 0x0000002000000000, // ExecutionPolicy bypass
+            EPUndefined         = 0x0000004000000000, // ExecutionPolicy undefined
+            EPIncorrect         = 0x0000008000000000, // ExecutionPolicy incorrect
+
+            // V2 Socket Server Mode
+            V2SocketServerMode  = 0x0000100000000000, // -V2SocketServerMode | -v2so
+        }
+#pragma warning restore SA1025 // CodeMustNotContainMultipleWhitespaceInARow
+
+        internal ParameterBitmap ParametersUsed = 0;
+
+        internal double ParametersUsedAsDouble
+        {
+            get { return (double)ParametersUsed; }
+        }
+
         [Conditional("DEBUG")]
         private void AssertArgumentsParsed()
         {
@@ -320,6 +381,15 @@ internal Collection<CommandParameter> Args
             }
         }
 
+        internal string? ConfigurationFile
+        {
+            get
+            {
+                AssertArgumentsParsed();
+                return _configurationFile;
+            }
+        }
+
         internal string? ConfigurationName
         {
             get
@@ -403,6 +473,15 @@ internal bool ShowExtendedHelp
             }
         }
 
+        internal bool NoProfileLoadTime
+        {
+            get
+            {
+                AssertArgumentsParsed();
+                return _noProfileLoadTime;
+            }
+        }
+
         internal bool ShowVersion
         {
             get
@@ -477,7 +556,7 @@ internal bool StaMode
                 }
                 else
                 {
-                    return true;
+                    return Platform.IsStaSupported;
                 }
             }
         }
@@ -524,6 +603,33 @@ internal bool RemoveWorkingDirectoryTrailingCharacter
                 return _removeWorkingDirectoryTrailingCharacter;
             }
         }
+
+        internal DateTimeOffset? UTCTimestamp
+        {
+            get
+            {
+                AssertArgumentsParsed();
+                return _utcTimestamp;
+            }
+        }
+
+        internal string? Token
+        {
+            get
+            {
+                AssertArgumentsParsed();
+                return _token;
+            }
+        }
+
+        internal bool V2SocketServerMode
+        {
+            get
+            {
+                AssertArgumentsParsed();
+                return _v2SocketServerMode;
+            }
+        }
 #endif
 
         #endregion Internal properties
@@ -608,7 +714,8 @@ internal static string GetConfigurationNameFromGroupPolicy()
                 return (switchKey: string.Empty, shouldBreak: false);
             }
 
-            if (!CharExtensions.IsDash(switchKey[0]) && switchKey[0] != '/')
+            char firstChar = switchKey[0];
+            if (!CharExtensions.IsDash(firstChar) && firstChar != '/')
             {
                 // then it's a file
                 --argIndex;
@@ -622,7 +729,7 @@ internal static string GetConfigurationNameFromGroupPolicy()
             switchKey = switchKey.Substring(1);
 
             // chop off the second dash so we're agnostic wrt specifying - or --
-            if (!string.IsNullOrEmpty(switchKey) && CharExtensions.IsDash(switchKey[0]))
+            if (!string.IsNullOrEmpty(switchKey) && CharExtensions.IsDash(firstChar) && switchKey[0] == firstChar)
             {
                 switchKey = switchKey.Substring(1);
             }
@@ -640,6 +747,53 @@ internal static string NormalizeFilePath(string path)
             return Path.GetFullPath(path);
         }
 
+        /// <summary>
+        /// Determine the execution policy based on the supplied string.
+        /// If the string doesn't match to any known execution policy, set it to incorrect.
+        /// </summary>
+        /// <param name="_executionPolicy">The value provided on the command line.</param>
+        /// <returns>The execution policy.</returns>
+        private static ParameterBitmap GetExecutionPolicy(string? _executionPolicy)
+        {
+            if (_executionPolicy is null)
+            {
+                return ParameterBitmap.EPUndefined;
+            }
+
+            ParameterBitmap executionPolicySetting = ParameterBitmap.EPIncorrect;
+
+            if (string.Equals(_executionPolicy, "default", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPDefault;
+            }
+            else if (string.Equals(_executionPolicy, "remotesigned", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPRemoteSigned;
+            }
+            else if (string.Equals(_executionPolicy, "bypass", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPBypass;
+            }
+            else if (string.Equals(_executionPolicy, "allsigned", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPAllSigned;
+            }
+            else if (string.Equals(_executionPolicy, "restricted", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPRestricted;
+            }
+            else if (string.Equals(_executionPolicy, "unrestricted", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPUnrestricted;
+            }
+            else if (string.Equals(_executionPolicy, "undefined", StringComparison.OrdinalIgnoreCase))
+            {
+                executionPolicySetting = ParameterBitmap.EPUndefined;
+            }
+
+            return executionPolicySetting;
+        }
+
         private static bool MatchSwitch(string switchKey, string match, string smallestUnambiguousMatch)
         {
             Dbg.Assert(!string.IsNullOrEmpty(match), "need a value");
@@ -689,7 +843,6 @@ private void DisplayBanner(PSHostUserInterface hostUI, string? bannerText)
                 if (!string.IsNullOrEmpty(bannerText))
                 {
                     hostUI.WriteLine(bannerText);
-                    hostUI.WriteLine();
                 }
 
                 if (UpdatesNotification.CanNotifyUpdates)
@@ -715,10 +868,7 @@ internal void Parse(string[] args)
 
             for (int i = 0; i < args.Length; i++)
             {
-                if (args[i] is null)
-                {
-                    throw new ArgumentNullException(nameof(args), CommandLineParameterParserStrings.NullElementInArgs);
-                }
+                ArgumentNullException.ThrowIfNull(args[i], CommandLineParameterParserStrings.NullElementInArgs);
             }
 
             // Indicates that we've called this method on this instance, and that when it's done, the state variables
@@ -755,6 +905,7 @@ private void ParseHelper(string[] args)
                     _noInteractive = true;
                     _skipUserInit = true;
                     _noExit = false;
+                    ParametersUsed |= ParameterBitmap.Version;
                     break;
                 }
 
@@ -763,48 +914,89 @@ private void ParseHelper(string[] args)
                     _showHelp = true;
                     _showExtendedHelp = true;
                     _abortStartup = true;
+                    ParametersUsed |= ParameterBitmap.Help;
                 }
                 else if (MatchSwitch(switchKey, "login", "l"))
                 {
                     // On Windows, '-Login' does nothing.
                     // On *nix, '-Login' is already handled much earlier to improve startup performance, so we do nothing here.
+                    ParametersUsed |= ParameterBitmap.Login;
                 }
                 else if (MatchSwitch(switchKey, "noexit", "noe"))
                 {
                     _noExit = true;
                     noexitSeen = true;
+                    ParametersUsed |= ParameterBitmap.NoExit;
                 }
                 else if (MatchSwitch(switchKey, "noprofile", "nop"))
                 {
                     _skipUserInit = true;
+                    ParametersUsed |= ParameterBitmap.NoProfile;
                 }
                 else if (MatchSwitch(switchKey, "nologo", "nol"))
                 {
                     _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.NoLogo;
                 }
                 else if (MatchSwitch(switchKey, "noninteractive", "noni"))
                 {
                     _noInteractive = true;
+                    ParametersUsed |= ParameterBitmap.NonInteractive;
                 }
                 else if (MatchSwitch(switchKey, "socketservermode", "so"))
                 {
                     _socketServerMode = true;
+                    _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.SocketServerMode;
                 }
+#if !UNIX
+                else if (MatchSwitch(switchKey, "v2socketservermode", "v2so"))
+                {
+                    _v2SocketServerMode = true;
+                    _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.V2SocketServerMode;
+                }
+#endif
                 else if (MatchSwitch(switchKey, "servermode", "s"))
                 {
                     _serverMode = true;
+                    _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.ServerMode;
                 }
                 else if (MatchSwitch(switchKey, "namedpipeservermode", "nam"))
                 {
                     _namedPipeServerMode = true;
+                    _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.NamedPipeServerMode;
                 }
                 else if (MatchSwitch(switchKey, "sshservermode", "sshs"))
                 {
                     _sshServerMode = true;
+                    _showBanner = false;
+                    ParametersUsed |= ParameterBitmap.SSHServerMode;
+                }
+                else if (MatchSwitch(switchKey, "noprofileloadtime", "noprofileloadtime"))
+                {
+                    _noProfileLoadTime = true;
+                    ParametersUsed |= ParameterBitmap.NoProfileLoadTime;
                 }
                 else if (MatchSwitch(switchKey, "interactive", "i"))
                 {
                     _noInteractive = false;
+                    ParametersUsed |= ParameterBitmap.Interactive;
+                }
+                else if (MatchSwitch(switchKey, "configurationfile", "configurationfile"))
+                {
+                    ++i;
+                    if (i >= args.Length)
+                    {
+                        SetCommandLineError(
+                            CommandLineParameterParserStrings.MissingConfigurationFileArgument);
+                        break;
+                    }
+
+                    _configurationFile = args[i];
+                    ParametersUsed |= ParameterBitmap.ConfigurationFile;
                 }
                 else if (MatchSwitch(switchKey, "configurationname", "config"))
                 {
@@ -817,6 +1009,7 @@ private void ParseHelper(string[] args)
                     }
 
                     _configurationName = args[i];
+                    ParametersUsed |= ParameterBitmap.ConfigurationName;
                 }
                 else if (MatchSwitch(switchKey, "custompipename", "cus"))
                 {
@@ -841,7 +1034,22 @@ private void ParseHelper(string[] args)
                         break;
                     }
 #endif
+
                     _customPipeName = args[i];
+                    ParametersUsed |= ParameterBitmap.CustomPipeName;
+                }
+                else if (MatchSwitch(switchKey, "commandwithargs", "commandwithargs") || MatchSwitch(switchKey, "cwa", "cwa"))
+                {
+                    _commandHasArgs = true;
+
+                    if (!ParseCommand(args, ref i, noexitSeen, false))
+                    {
+                        break;
+                    }
+
+                    i++;
+                    CollectPSArgs(args, ref i);
+                    ParametersUsed |= ParameterBitmap.CommandWithArgs;
                 }
                 else if (MatchSwitch(switchKey, "command", "c"))
                 {
@@ -849,6 +1057,8 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.Command;
                 }
                 else if (MatchSwitch(switchKey, "windowstyle", "w"))
                 {
@@ -875,6 +1085,8 @@ private void ParseHelper(string[] args)
                             string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.InvalidWindowStyleArgument, args[i], e.Message));
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.WindowStyle;
 #endif
                 }
                 else if (MatchSwitch(switchKey, "file", "f"))
@@ -883,6 +1095,8 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.File;
                 }
 #if DEBUG
                 else if (MatchSwitch(switchKey, "isswait", "isswait"))
@@ -894,14 +1108,27 @@ private void ParseHelper(string[] args)
                 {
                     ParseFormat(args, ref i, ref _outFormat, CommandLineParameterParserStrings.MissingOutputFormatParameter);
                     _outputFormatSpecified = true;
+                    ParametersUsed |= ParameterBitmap.OutputFormat;
                 }
                 else if (MatchSwitch(switchKey, "inputformat", "inp") || MatchSwitch(switchKey, "if", "if"))
                 {
                     ParseFormat(args, ref i, ref _inFormat, CommandLineParameterParserStrings.MissingInputFormatParameter);
+                    ParametersUsed |= ParameterBitmap.InputFormat;
                 }
                 else if (MatchSwitch(switchKey, "executionpolicy", "ex") || MatchSwitch(switchKey, "ep", "ep"))
                 {
                     ParseExecutionPolicy(args, ref i, ref _executionPolicy, CommandLineParameterParserStrings.MissingExecutionPolicyParameter);
+                    ParametersUsed |= ParameterBitmap.ExecutionPolicy;
+                    var executionPolicy = GetExecutionPolicy(_executionPolicy);
+                    if (executionPolicy == ParameterBitmap.EPIncorrect)
+                    {
+                        SetCommandLineError(
+                            string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.InvalidExecutionPolicyArgument, _executionPolicy),
+                            showHelp: true);
+                        break;
+                    }
+
+                    ParametersUsed |= executionPolicy;
                 }
                 else if (MatchSwitch(switchKey, "encodedcommand", "e") || MatchSwitch(switchKey, "ec", "e"))
                 {
@@ -910,6 +1137,8 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.EncodedCommand;
                 }
                 else if (MatchSwitch(switchKey, "encodedarguments", "encodeda") || MatchSwitch(switchKey, "ea", "ea"))
                 {
@@ -917,6 +1146,8 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.EncodedArgument;
                 }
                 else if (MatchSwitch(switchKey, "settingsfile", "settings"))
                 {
@@ -925,10 +1156,12 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    ParametersUsed |= ParameterBitmap.SettingsFile;
                 }
                 else if (MatchSwitch(switchKey, "sta", "sta"))
                 {
-                    if (!Platform.IsWindowsDesktop)
+                    if (!Platform.IsWindowsDesktop || !Platform.IsStaSupported)
                     {
                         SetCommandLineError(
                             CommandLineParameterParserStrings.STANotImplemented);
@@ -944,6 +1177,7 @@ private void ParseHelper(string[] args)
                     }
 
                     _staMode = true;
+                    ParametersUsed |= ParameterBitmap.STA;
                 }
                 else if (MatchSwitch(switchKey, "mta", "mta"))
                 {
@@ -963,6 +1197,7 @@ private void ParseHelper(string[] args)
                     }
 
                     _staMode = false;
+                    ParametersUsed |= ParameterBitmap.MTA;
                 }
                 else if (MatchSwitch(switchKey, "workingdirectory", "wo") || MatchSwitch(switchKey, "wd", "wd"))
                 {
@@ -975,12 +1210,44 @@ private void ParseHelper(string[] args)
                     }
 
                     _workingDirectory = args[i];
+                    ParametersUsed |= ParameterBitmap.WorkingDirectory;
                 }
 #if !UNIX
                 else if (MatchSwitch(switchKey, "removeworkingdirectorytrailingcharacter", "removeworkingdirectorytrailingcharacter"))
                 {
                     _removeWorkingDirectoryTrailingCharacter = true;
                 }
+                else if (MatchSwitch(switchKey, "token", "to"))
+                {
+                    ++i;
+                    if (i >= args.Length)
+                    {
+                        SetCommandLineError(
+                            string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.MissingMandatoryArgument, "-Token"));
+                        break;
+                    }
+
+                    _token = args[i];
+
+                    // Not adding anything to ParametersUsed, because it is required with V2 socket server mode
+                    // So, we can assume it based on that bit
+                }
+                else if (MatchSwitch(switchKey, "utctimestamp", "utc"))
+                {
+                    ++i;
+                    if (i >= args.Length)
+                    {
+                        SetCommandLineError(
+                            string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.MissingMandatoryArgument, "-UTCTimestamp"));
+                        break;
+                    }
+
+                    // Parse as iso8601UtcString
+                    _utcTimestamp = DateTimeOffset.ParseExact(args[i], "yyyy-MM-dd'T'HH:mm:ssK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
+
+                    // Not adding anything to ParametersUsed, because it is required with V2 socket server mode
+                    // So, we can assume it based on that bit
+                }
 #endif
                 else
                 {
@@ -990,6 +1257,9 @@ private void ParseHelper(string[] args)
                     {
                         break;
                     }
+
+                    // default to filename being the next argument.
+                    ParametersUsed |= ParameterBitmap.File;
                 }
             }
 
@@ -1023,7 +1293,7 @@ private void SetCommandLineError(string msg, bool showHelp = false, bool showBan
         private void ParseFormat(string[] args, ref int i, ref Serialization.DataFormat format, string resourceStr)
         {
             StringBuilder sb = new StringBuilder();
-            foreach (string s in Enum.GetNames(typeof(Serialization.DataFormat)))
+            foreach (string s in Enum.GetNames<Serialization.DataFormat>())
             {
                 sb.Append(s);
                 sb.Append(Environment.NewLine);
@@ -1073,15 +1343,6 @@ private void ParseExecutionPolicy(string[] args, ref int i, ref string? executio
         // treat -command as an argument to the script...
         private bool ParseFile(string[] args, ref int i, bool noexitSeen)
         {
-            // Try parse '$true', 'true', '$false' and 'false' values.
-            static object ConvertToBoolIfPossible(string arg)
-            {
-                // Before parsing we skip '$' if present.
-                return arg.Length > 0 && bool.TryParse(arg.AsSpan(arg[0] == '$' ? 1 : 0), out bool boolValue)
-                    ? (object)boolValue
-                    : (object)arg;
-            }
-
             ++i;
             if (i >= args.Length)
             {
@@ -1158,54 +1419,75 @@ static object ConvertToBoolIfPossible(string arg)
                         showHelp: true);
                     return false;
                 }
+#if !UNIX
+                // Only do the .ps1 extension check on Windows since shebang is not supported
+                if (!_file.EndsWith(".ps1", StringComparison.OrdinalIgnoreCase))
+                {
+                    SetCommandLineError(string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.InvalidFileArgumentExtension, args[i]));
+                    return false;
+                }
+#endif
 
                 i++;
 
-                string? pendingParameter = null;
+                CollectPSArgs(args, ref i);
+            }
 
-                // Accumulate the arguments to this script...
-                while (i < args.Length)
-                {
-                    string arg = args[i];
+            return true;
+        }
 
-                    // If there was a pending parameter, add a named parameter
-                    // using the pending parameter and current argument
-                    if (pendingParameter != null)
-                    {
-                        _collectedArgs.Add(new CommandParameter(pendingParameter, arg));
-                        pendingParameter = null;
-                    }
-                    else if (!string.IsNullOrEmpty(arg) && CharExtensions.IsDash(arg[0]) && arg.Length > 1)
+        private void CollectPSArgs(string[] args, ref int i)
+        {
+            // Try parse '$true', 'true', '$false' and 'false' values.
+            static object ConvertToBoolIfPossible(string arg)
+            {
+                // Before parsing we skip '$' if present.
+                return arg.Length > 0 && bool.TryParse(arg.AsSpan(arg[0] == '$' ? 1 : 0), out bool boolValue)
+                    ? (object)boolValue
+                    : (object)arg;
+            }
+
+            string? pendingParameter = null;
+
+            while (i < args.Length)
+            {
+                string arg = args[i];
+
+                // If there was a pending parameter, add a named parameter
+                // using the pending parameter and current argument
+                if (pendingParameter != null)
+                {
+                    _collectedArgs.Add(new CommandParameter(pendingParameter, arg));
+                    pendingParameter = null;
+                }
+                else if (!string.IsNullOrEmpty(arg) && CharExtensions.IsDash(arg[0]) && arg.Length > 1)
+                {
+                    int offset = arg.IndexOf(':');
+                    if (offset >= 0)
                     {
-                        int offset = arg.IndexOf(':');
-                        if (offset >= 0)
+                        if (offset == arg.Length - 1)
                         {
-                            if (offset == arg.Length - 1)
-                            {
-                                pendingParameter = arg.TrimEnd(':');
-                            }
-                            else
-                            {
-                                string argValue = arg.Substring(offset + 1);
-                                string argName = arg.Substring(0, offset);
-                                _collectedArgs.Add(new CommandParameter(argName, ConvertToBoolIfPossible(argValue)));
-                            }
+                            pendingParameter = arg.TrimEnd(':');
                         }
                         else
                         {
-                            _collectedArgs.Add(new CommandParameter(arg));
+                            string argValue = arg.Substring(offset + 1);
+                            string argName = arg.Substring(0, offset);
+                            _collectedArgs.Add(new CommandParameter(argName, ConvertToBoolIfPossible(argValue)));
                         }
                     }
                     else
                     {
-                        _collectedArgs.Add(new CommandParameter(null, arg));
+                        _collectedArgs.Add(new CommandParameter(arg));
                     }
-
-                    ++i;
                 }
-            }
+                else
+                {
+                    _collectedArgs.Add(new CommandParameter(null, arg));
+                }
 
-            return true;
+                ++i;
+            }
         }
 
         private bool ParseCommand(string[] args, ref int i, bool noexitSeen, bool isEncoded)
@@ -1261,23 +1543,15 @@ private bool ParseCommand(string[] args, ref int i, bool noexitSeen, bool isEnco
             }
             else
             {
-                // Collect the remaining parameters and combine them into a single command to be run.
-
-                StringBuilder cmdLineCmdSB = new StringBuilder();
-
-                while (i < args.Length)
+                if (_commandHasArgs)
                 {
-                    cmdLineCmdSB.Append(args[i] + " ");
-                    ++i;
+                    _commandLineCommand = args[i];
                 }
-
-                if (cmdLineCmdSB.Length > 0)
+                else
                 {
-                    // remove the last blank
-                    cmdLineCmdSB.Remove(cmdLineCmdSB.Length - 1, 1);
+                    _commandLineCommand = string.Join(' ', args, i, args.Length - i);
+                    i = args.Length;
                 }
-
-                _commandLineCommand = cmdLineCmdSB.ToString();
             }
 
             if (!noexitSeen && !_explicitReadCommandsFromStdin)
@@ -1328,10 +1602,15 @@ private bool CollectArgs(string[] args, ref int i)
         }
 
         private bool _socketServerMode;
+#if !UNIX
+        private bool _v2SocketServerMode;
+#endif
         private bool _serverMode;
         private bool _namedPipeServerMode;
         private bool _sshServerMode;
+        private bool _noProfileLoadTime;
         private bool _showVersion;
+        private string? _configurationFile;
         private string? _configurationName;
         private string? _error;
         private bool _showHelp;
@@ -1347,6 +1626,7 @@ private bool CollectArgs(string[] args, ref int i)
         private bool _noPrompt;
         private string? _commandLineCommand;
         private bool _wasCommandEncoded;
+        private bool _commandHasArgs;
         private uint _exitCode = ConsoleHost.ExitCodeSuccess;
         private bool _dirty;
         private Serialization.DataFormat _outFormat = Serialization.DataFormat.Text;
@@ -1357,6 +1637,10 @@ private bool CollectArgs(string[] args, ref int i)
         private string? _executionPolicy;
         private string? _settingsFile;
         private string? _workingDirectory;
+#if !UNIX
+        private string? _token;
+        private DateTimeOffset? _utcTimestamp;
+#endif
 
 #if !UNIX
         private ProcessWindowStyle? _windowStyle;
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs
index a157964c637..7bda4bc5688 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleControl.cs
@@ -10,9 +10,9 @@
 // On the use of DangerousGetHandle: If the handle has been invalidated, then the API we pass it to will return an error.  These
 // handles should not be exposed to recycling attacks (because they are not exposed at all), but if they were, the worse they
 // could do is diddle with the console buffer.
-#pragma warning disable 1634, 1691
 
 using System;
+using System.Buffers;
 using System.Text;
 using System.Runtime.InteropServices;
 using System.Management.Automation;
@@ -109,7 +109,7 @@ internal struct COORD
 
             public override string ToString()
             {
-                return string.Format(CultureInfo.InvariantCulture, "{0},{1}", X, Y);
+                return string.Create(CultureInfo.InvariantCulture, $"{X},{Y}");
             }
         }
 
@@ -161,7 +161,7 @@ internal struct SMALL_RECT
 
             public override string ToString()
             {
-                return string.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3}", Left, Top, Right, Bottom);
+                return string.Create(CultureInfo.InvariantCulture, $"{Left},{Top},{Right},{Bottom}");
             }
         }
 
@@ -192,7 +192,7 @@ internal struct CONSOLE_CURSOR_INFO
 
             public override string ToString()
             {
-                return string.Format(CultureInfo.InvariantCulture, "Size: {0}, Visible: {1}", Size, Visible);
+                return string.Create(CultureInfo.InvariantCulture, $"Size: {Size}, Visible: {Visible}");
             }
         }
 
@@ -211,41 +211,6 @@ internal struct FONTSIGNATURE
             internal DWORD fsCsb1;
         }
 
-        [StructLayout(LayoutKind.Sequential)]
-        internal struct CHARSETINFO
-        {
-            // From public\sdk\inc\wingdi.h
-            internal uint ciCharset;   // Character set value.
-            internal uint ciACP;       // ANSI code-page identifier.
-            internal FONTSIGNATURE fs;
-        }
-
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-        internal struct TEXTMETRIC
-        {
-            // From public\sdk\inc\wingdi.h
-            public int tmHeight;
-            public int tmAscent;
-            public int tmDescent;
-            public int tmInternalLeading;
-            public int tmExternalLeading;
-            public int tmAveCharWidth;
-            public int tmMaxCharWidth;
-            public int tmWeight;
-            public int tmOverhang;
-            public int tmDigitizedAspectX;
-            public int tmDigitizedAspectY;
-            public char tmFirstChar;
-            public char tmLastChar;
-            public char tmDefaultChar;
-            public char tmBreakChar;
-            public byte tmItalic;
-            public byte tmUnderlined;
-            public byte tmStruckOut;
-            public byte tmPitchAndFamily;
-            public byte tmCharSet;
-        }
-
         #region SentInput Data Structures
 
         [StructLayout(LayoutKind.Sequential)]
@@ -275,13 +240,13 @@ internal struct MouseInput
             /// The absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member.
             /// Absolute data is specified as the x coordinate of the mouse; relative data is specified as the number of pixels moved.
             /// </summary>
-            internal Int32 X;
+            internal int X;
 
             /// <summary>
             /// The absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the value of the dwFlags member.
             /// Absolute data is specified as the y coordinate of the mouse; relative data is specified as the number of pixels moved.
             /// </summary>
-            internal Int32 Y;
+            internal int Y;
 
             /// <summary>
             /// If dwFlags contains MOUSEEVENTF_WHEEL, then mouseData specifies the amount of wheel movement. A positive value indicates that the wheel was rotated forward, away from the user;
@@ -450,7 +415,7 @@ internal enum KeyboardFlag : uint
         /// <returns>True if it was successful.</returns>
         [DllImport("user32.dll")]
         [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
+        internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 
         internal static void SetConsoleMode(ProcessWindowStyle style)
         {
@@ -1249,8 +1214,7 @@ internal static void CheckWriteEdges(
             {
                 if (firstLeftTrailingRow >= 0)
                 {
-                    throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]",
-                        firstLeftTrailingRow, contentsRegion.Left));
+                    throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{firstLeftTrailingRow}, {contentsRegion.Left}]"));
                 }
             }
             else
@@ -1265,8 +1229,7 @@ internal static void CheckWriteEdges(
                     if (leftExisting[r, 0].BufferCellType == BufferCellType.Leading ^
                             contents[r, contentsRegion.Left].BufferCellType == BufferCellType.Trailing)
                     {
-                        throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]",
-                            r, contentsRegion.Left));
+                        throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{r}, {contentsRegion.Left}]"));
                     }
                 }
             }
@@ -1275,8 +1238,7 @@ internal static void CheckWriteEdges(
             {
                 if (firstRightLeadingRow >= 0)
                 {
-                    throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]",
-                            firstRightLeadingRow, contentsRegion.Right));
+                    throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{firstRightLeadingRow}, {contentsRegion.Right}]"));
                 }
             }
             else
@@ -1291,8 +1253,7 @@ internal static void CheckWriteEdges(
                     if (rightExisting[r, 0].BufferCellType == BufferCellType.Leading ^
                             contents[r, contentsRegion.Right].BufferCellType == BufferCellType.Leading)
                     {
-                        throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]",
-                            r, contentsRegion.Right));
+                        throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{r}, {contentsRegion.Right}]"));
                     }
                 }
             }
@@ -1312,7 +1273,7 @@ private static void CheckWriteConsoleOutputContents(BufferCell[,] contents, Rect
                         contents[r, c].Character != 0)
                     {
                         // trailing character is not 0
-                        throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]", r, c));
+                        throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{r}, {c}]"));
                     }
 
                     if (contents[r, c].BufferCellType == BufferCellType.Leading)
@@ -1327,7 +1288,7 @@ private static void CheckWriteConsoleOutputContents(BufferCell[,] contents, Rect
                         {
                             // for a 2 cell character, either there is no trailing BufferCell or
                             // the trailing BufferCell's character is not 0
-                            throw PSTraceSource.NewArgumentException(string.Format(CultureInfo.InvariantCulture, "contents[{0}, {1}]", r, c));
+                            throw PSTraceSource.NewArgumentException(string.Create(CultureInfo.InvariantCulture, $"contents[{r}, {c}]"));
                         }
                     }
                 }
@@ -1479,9 +1440,7 @@ private static void WriteConsoleOutputCJK(ConsoleHandle consoleHandle, Coordinat
                         bSize.X++;
                         SMALL_RECT wRegion = writeRegion;
                         wRegion.Right++;
-                        // Suppress the PreFAST warning about not using Marshal.GetLastWin32Error() to
-                        // get the error code.
-#pragma warning disable 56523
+
                         result = NativeMethods.WriteConsoleOutput(
                             consoleHandle.DangerousGetHandle(),
                             characterBuffer,
@@ -1491,9 +1450,6 @@ private static void WriteConsoleOutputCJK(ConsoleHandle consoleHandle, Coordinat
                     }
                     else
                     {
-                        // Suppress the PreFAST warning about not using Marshal.GetLastWin32Error() to
-                        // get the error code.
-#pragma warning disable 56523
                         result = NativeMethods.WriteConsoleOutput(
                             consoleHandle.DangerousGetHandle(),
                             characterBuffer,
@@ -1527,7 +1483,7 @@ private static void WriteConsoleOutputCJK(ConsoleHandle consoleHandle, Coordinat
                             // to write is larger than bufferLimit. In that case, the algorithm writes one row
                             // at a time => bufferSize.Y == 1. Then, we can safely leave bufferSize.Y unchanged
                             // to retry with a smaller bufferSize.X.
-                            Dbg.Assert(bufferSize.Y == 1, string.Format(CultureInfo.InvariantCulture, "bufferSize.Y should be 1, but is {0}", bufferSize.Y));
+                            Dbg.Assert(bufferSize.Y == 1, string.Create(CultureInfo.InvariantCulture, $"bufferSize.Y should be 1, but is {bufferSize.Y}"));
                             bufferSize.X = (short)Math.Min(colsRemaining, bufferLimit);
                             continue;
                         }
@@ -1655,7 +1611,7 @@ private static void WriteConsoleOutputPlain(ConsoleHandle consoleHandle, Coordin
                             // to write is larger than bufferLimit. In that case, the algorithm writes one row
                             // at a time => bufferSize.Y == 1. Then, we can safely leave bufferSize.Y unchanged
                             // to retry with a smaller bufferSize.X.
-                            Dbg.Assert(bufferSize.Y == 1, string.Format(CultureInfo.InvariantCulture, "bufferSize.Y should be 1, but is {0}", bufferSize.Y));
+                            Dbg.Assert(bufferSize.Y == 1, string.Create(CultureInfo.InvariantCulture, $"bufferSize.Y should be 1, but is {bufferSize.Y}"));
                             bufferSize.X = (short)Math.Min(colsRemaining, bufferLimit);
                             continue;
                         }
@@ -1732,10 +1688,7 @@ internal static void ReadConsoleOutput
                 if (origin.X + (contentsRegion.Right - contentsRegion.Left) + 1 < bufferInfo.BufferSize.X &&
                     ShouldCheck(contentsRegion.Right, contents, contentsRegion))
                 {
-                    if (cellArray == null)
-                    {
-                        cellArray = new BufferCell[cellArrayRegion.Bottom + 1, 2];
-                    }
+                    cellArray ??= new BufferCell[cellArrayRegion.Bottom + 1, 2];
 
                     checkOrigin = new Coordinates(origin.X +
                         (contentsRegion.Right - contentsRegion.Left), origin.Y);
@@ -1799,9 +1752,7 @@ private static bool ReadConsoleOutputCJKSmall
             readRegion.Top = (short)origin.Y;
             readRegion.Right = (short)(origin.X + bufferSize.X - 1);
             readRegion.Bottom = (short)(origin.Y + bufferSize.Y - 1);
-            // Suppress the PreFAST warning about not using Marshal.GetLastWin32Error() to
-            // get the error code.
-#pragma warning disable 56523
+
             bool result = NativeMethods.ReadConsoleOutput(
                                         consoleHandle.DangerousGetHandle(),
                                         characterBuffer,
@@ -1985,7 +1936,7 @@ internal static void ReadConsoleOutputCJK
                                 // to write is larger than bufferLimit. In that case, the algorithm reads one row
                                 // at a time => bufferSize.Y == 1. Then, we can safely leave bufferSize.Y unchanged
                                 // to retry with a smaller bufferSize.X.
-                                Dbg.Assert(bufferSize.Y == 1, string.Format(CultureInfo.InvariantCulture, "bufferSize.Y should be 1, but is {0}", bufferSize.Y));
+                                Dbg.Assert(bufferSize.Y == 1, string.Create(CultureInfo.InvariantCulture, $"bufferSize.Y should be 1, but is {bufferSize.Y}"));
                                 bufferSize.X = (short)Math.Min(colsRemaining, bufferLimit);
                                 continue;
                             }
@@ -2155,7 +2106,7 @@ private static void ReadConsoleOutputPlain
                             // to write is larger than bufferLimit. In that case, the algorithm reads one row
                             // at a time => bufferSize.Y == 1. Then, we can safely leave bufferSize.Y unchanged
                             // to retry with a smaller bufferSize.X.
-                            Dbg.Assert(bufferSize.Y == 1, string.Format(CultureInfo.InvariantCulture, "bufferSize.Y should be 1, but is {0}", bufferSize.Y));
+                            Dbg.Assert(bufferSize.Y == 1, string.Create(CultureInfo.InvariantCulture, $"bufferSize.Y should be 1, but is {bufferSize.Y}"));
                             bufferSize.X = (short)Math.Min(colsRemaining, bufferLimit);
                             continue;
                         }
@@ -2270,14 +2221,13 @@ Coordinates origin
             c.X = (short)origin.X;
             c.Y = (short)origin.Y;
 
-            DWORD unused = 0;
             bool result =
                 NativeMethods.FillConsoleOutputCharacter(
                     consoleHandle.DangerousGetHandle(),
                     character,
                     (DWORD)numberToWrite,
                     c,
-                    out unused);
+                    out _);
             if (!result)
             {
                 int err = Marshal.GetLastWin32Error();
@@ -2324,14 +2274,13 @@ Coordinates origin
             c.X = (short)origin.X;
             c.Y = (short)origin.Y;
 
-            DWORD unused = 0;
             bool result =
                 NativeMethods.FillConsoleOutputAttribute(
                     consoleHandle.DangerousGetHandle(),
                     attribute,
                     (DWORD)numberToWrite,
                     c,
-                    out unused);
+                    out _);
 
             if (!result)
             {
@@ -2479,9 +2428,6 @@ internal static string GetConsoleWindowTitle()
             DWORD result;
             StringBuilder consoleTitle = new StringBuilder((int)bufferSize);
 
-            // Suppress the PreFAST warning about not using Marshal.GetLastWin32Error() to
-            // get the error code.
-#pragma warning disable 56523
             result = NativeMethods.GetConsoleTitle(consoleTitle, bufferSize);
             // If the result is zero, it may mean and error but it may also mean
             // that the window title has been set to null. Since we can't tell the
@@ -2494,6 +2440,8 @@ internal static string GetConsoleWindowTitle()
             return consoleTitle.ToString();
         }
 
+        private static bool s_dontsetConsoleWindowTitle;
+
         /// <summary>
         /// Wraps Win32 SetConsoleTitle.
         /// </summary>
@@ -2505,12 +2453,27 @@ internal static string GetConsoleWindowTitle()
         /// </exception>
         internal static void SetConsoleWindowTitle(string consoleTitle)
         {
+            if (s_dontsetConsoleWindowTitle)
+            {
+                return;
+            }
+
             bool result = NativeMethods.SetConsoleTitle(consoleTitle);
 
             if (!result)
             {
                 int err = Marshal.GetLastWin32Error();
 
+                // ERROR_GEN_FAILURE is returned if this api can't be used with the terminal
+                if (err == 0x1f)
+                {
+                    tracer.WriteLine("Call to SetConsoleTitle failed: {0}", err);
+                    s_dontsetConsoleWindowTitle = true;
+
+                    // We ignore this specific error as the console can still continue to operate
+                    return;
+                }
+
                 HostException e = CreateHostException(err, "SetConsoleWindowTitle",
                     ErrorCategory.ResourceUnavailable, ConsoleControlStrings.SetConsoleWindowTitleExceptionTemplate);
                 throw e;
@@ -2549,42 +2512,54 @@ internal static void WriteConsole(ConsoleHandle consoleHandle, ReadOnlySpan<char
                 return;
             }
 
-            // Native WriteConsole doesn't support output buffer longer than 64K.
-            // We need to chop the output string if it is too long.
-            int cursor = 0; // This records the chopping position in output string
-            const int MaxBufferSize = 16383; // this is 64K/4 - 1 to account for possible width of each character.
+            // Native WriteConsole doesn't support output buffer longer than 64K, so we need to chop the output string if it is too long.
+            // This records the chopping position in output string.
+            int cursor = 0;
+            // This is 64K/4 - 1 to account for possible width of each character.
+            const int MaxBufferSize = 16383;
+            const int MaxStackAllocSize = 512;
+            ReadOnlySpan<char> outBuffer;
 
-            while (cursor < output.Length)
+            // In case that a new line is required, we try to write out the last chunk and the new-line string together,
+            // to avoid one extra call to 'WriteConsole' just for a new line string.
+            while (cursor + MaxBufferSize < output.Length)
             {
-                ReadOnlySpan<char> outBuffer;
+                outBuffer = output.Slice(cursor, MaxBufferSize);
+                cursor += MaxBufferSize;
+                WriteConsole(consoleHandle, outBuffer);
+            }
 
-                if (cursor + MaxBufferSize < output.Length)
-                {
-                    outBuffer = output.Slice(cursor, MaxBufferSize);
-                    cursor += MaxBufferSize;
+            outBuffer = output.Slice(cursor);
+            if (!newLine)
+            {
+                WriteConsole(consoleHandle, outBuffer);
+                return;
+            }
 
-                    WriteConsole(consoleHandle, outBuffer);
-                }
-                else
+            char[] rentedArray = null;
+            string lineEnding = Environment.NewLine;
+            int size = outBuffer.Length + lineEnding.Length;
+
+            // We expect the 'size' will often be small, and thus optimize that case with 'stackalloc'.
+            Span<char> buffer = size <= MaxStackAllocSize ? stackalloc char[size] : default;
+
+            try
+            {
+                if (buffer.IsEmpty)
                 {
-                    outBuffer = output.Slice(cursor);
-                    cursor = output.Length;
+                    rentedArray = ArrayPool<char>.Shared.Rent(size);
+                    buffer = rentedArray.AsSpan().Slice(0, size);
+                }
 
-                    if (newLine)
-                    {
-                        var endOfLine = Environment.NewLine.AsSpan();
-                        var endOfLineLength = endOfLine.Length;
-#pragma warning disable CA2014
-                        Span<char> outBufferLine = stackalloc char[outBuffer.Length + endOfLineLength];
-#pragma warning restore CA2014
-                        outBuffer.CopyTo(outBufferLine);
-                        endOfLine.CopyTo(outBufferLine.Slice(outBufferLine.Length - endOfLineLength));
-                        WriteConsole(consoleHandle, outBufferLine);
-                    }
-                    else
-                    {
-                        WriteConsole(consoleHandle, outBuffer);
-                    }
+                outBuffer.CopyTo(buffer);
+                lineEnding.CopyTo(buffer.Slice(outBuffer.Length));
+                WriteConsole(consoleHandle, buffer);
+            }
+            finally
+            {
+                if (rentedArray is not null)
+                {
+                    ArrayPool<char>.Shared.Return(rentedArray);
                 }
             }
         }
@@ -2654,7 +2629,7 @@ internal static void SetConsoleTextAttribute(ConsoleHandle consoleHandle, WORD a
         //     CSI params? '#' [{}pq]        // XTPUSHSGR ('{'), XTPOPSGR ('}'), or their aliases ('p' and 'q')
         //
         // Where:
-        //     params: digit+ (';' params)?
+        //     params: digit+ ((';' | ':') params)?
         //     CSI:     C0_CSI | C1_CSI
         //     C0_CSI:  \x001b '['            // ESC '['
         //     C1_CSI:  \x009b
@@ -2699,7 +2674,7 @@ internal static int ControlSequenceLength(string str, ref int offset)
             {
                 c = str[offset++];
             }
-            while ((offset < str.Length) && (char.IsDigit(c) || c == ';'));
+            while ((offset < str.Length) && (char.IsDigit(c) || (c == ';') || (c == ':')));
 
             // Finally, handle the command characters for the specific sequences we
             // handle:
@@ -2789,7 +2764,7 @@ internal static int LengthInBufferCells(char c)
                  ((uint)(c - 0xffe0) <= (0xffe6 - 0xffe0)));
 
             // We can ignore these ranges because .Net strings use surrogate pairs
-            // for this range and we do not handle surrogage pairs.
+            // for this range and we do not handle surrogate pairs.
             // (c >= 0x20000 && c <= 0x2fffd) ||
             // (c >= 0x30000 && c <= 0x3fffd)
             return 1 + (isWide ? 1 : 0);
@@ -2818,40 +2793,6 @@ internal static bool IsCJKOutputCodePage(out uint codePage)
 
         #region Cursor
 
-        /// <summary>
-        /// Wraps Win32 SetConsoleCursorPosition.
-        /// </summary>
-        /// <param name="consoleHandle">
-        /// handle for the console where cursor position is set
-        /// </param>
-        /// <param name="cursorPosition">
-        /// location to which the cursor will be set
-        /// </param>
-        /// <exception cref="HostException">
-        /// If Win32's SetConsoleCursorPosition fails
-        /// </exception>
-        internal static void SetConsoleCursorPosition(ConsoleHandle consoleHandle, Coordinates cursorPosition)
-        {
-            Dbg.Assert(!consoleHandle.IsInvalid, "ConsoleHandle is not valid");
-            Dbg.Assert(!consoleHandle.IsClosed, "ConsoleHandle is closed");
-
-            ConsoleControl.COORD c;
-
-            c.X = (short)cursorPosition.X;
-            c.Y = (short)cursorPosition.Y;
-
-            bool result = NativeMethods.SetConsoleCursorPosition(consoleHandle.DangerousGetHandle(), c);
-
-            if (!result)
-            {
-                int err = Marshal.GetLastWin32Error();
-
-                HostException e = CreateHostException(err, "SetConsoleCursorPosition",
-                    ErrorCategory.ResourceUnavailable, ConsoleControlStrings.SetConsoleCursorPositionExceptionTemplate);
-                throw e;
-            }
-        }
-
         /// <summary>
         /// Wraps Win32 GetConsoleCursorInfo.
         /// </summary>
@@ -3159,10 +3100,6 @@ out DWORD numberOfEventsRead
             [return: MarshalAs(UnmanagedType.Bool)]
             internal static extern bool SetConsoleCtrlHandler(BreakHandler handlerRoutine, bool add);
 
-            [DllImport(PinvokeDllNames.SetConsoleCursorPositionDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-            [return: MarshalAs(UnmanagedType.Bool)]
-            internal static extern bool SetConsoleCursorPosition(NakedWin32Handle consoleOutput, COORD cursorPosition);
-
             [DllImport(PinvokeDllNames.SetConsoleModeDllName, SetLastError = true, CharSet = CharSet.Unicode)]
             [return: MarshalAs(UnmanagedType.Bool)]
             internal static extern bool SetConsoleMode(NakedWin32Handle consoleHandle, DWORD mode);
@@ -3213,7 +3150,7 @@ ref CHAR_INFO fill
             );
 
             [DllImport(PinvokeDllNames.SendInputDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-            internal static extern UInt32 SendInput(UInt32 inputNumbers, INPUT[] inputs, Int32 sizeOfInput);
+            internal static extern UInt32 SendInput(UInt32 inputNumbers, INPUT[] inputs, int sizeOfInput);
 
             // There is no GetCurrentConsoleFontEx on Core
             [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs
index 660e6774334..daf69d50251 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs
@@ -1,8 +1,6 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-#pragma warning disable 1634, 1691
-
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
@@ -16,7 +14,10 @@
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
 using System.Management.Automation.Remoting;
+using System.Management.Automation.Remoting.Server;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
+using System.Management.Automation.Subsystem.Feedback;
 using System.Management.Automation.Tracing;
 using System.Reflection;
 using System.Runtime;
@@ -53,11 +54,10 @@ internal sealed partial class ConsoleHost
         internal const int ExitCodeCtrlBreak = 128 + 21; // SIGBREAK
         internal const int ExitCodeInitFailure = 70; // Internal Software Error
         internal const int ExitCodeBadCommandLineParameter = 64; // Command Line Usage Error
-        private const uint SPI_GETSCREENREADER = 0x0046;
-
-        [DllImport("user32.dll", SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref bool pvParam, uint fWinIni);
+#if UNIX
+        internal const string DECCKM_ON = "\x1b[?1h";
+        internal const string DECCKM_OFF = "\x1b[?1l";
+#endif
 
         /// <summary>
         /// Internal Entry point in msh console host implementation.
@@ -68,6 +68,9 @@ internal sealed partial class ConsoleHost
         /// <param name="helpText">
         /// Help text for minishell. This is displayed on 'minishell -?'.
         /// </param>
+        /// <param name="issProvidedExternally">
+        /// True when an external caller provides an InitialSessionState object, which can conflict with '-ConfigurationFile' argument.
+        /// </param>
         /// <returns>
         /// The exit code for the shell.
         ///
@@ -94,7 +97,10 @@ internal sealed partial class ConsoleHost
         /// Anyone checking the exit code of the shell or monitor can mask off the high word to determine the exit code passed
         /// by the script that the shell last executed.
         /// </returns>
-        internal static int Start(string bannerText, string helpText)
+        internal static int Start(
+            string bannerText,
+            string helpText,
+            bool issProvidedExternally)
         {
 #if DEBUG
             if (Environment.GetEnvironmentVariable("POWERSHELL_DEBUG_STARTUP") != null)
@@ -106,11 +112,29 @@ internal static int Start(string bannerText, string helpText)
             }
 #endif
 
-            // put PSHOME in front of PATH so that calling `powershell` within `powershell` always starts the same running version
+            // Check for external InitialSessionState configuration conflict with '-ConfigurationFile' argument.
+            if (issProvidedExternally && !string.IsNullOrEmpty(s_cpp.ConfigurationFile))
+            {
+                throw new ConsoleHostStartupException(ConsoleHostStrings.ShellCannotBeStartedWithConfigConflict);
+            }
+
+            // Put PSHOME in front of PATH so that calling `pwsh` within `pwsh` always starts the same running version.
             string path = Environment.GetEnvironmentVariable("PATH");
-            string pshome = Utils.DefaultPowerShellAppBase + Path.PathSeparator;
+            string pshome = Utils.DefaultPowerShellAppBase;
+            string dotnetToolsPathSegment = $"{Path.DirectorySeparatorChar}.store{Path.DirectorySeparatorChar}powershell{Path.DirectorySeparatorChar}";
+
+            int index = pshome.IndexOf(dotnetToolsPathSegment, StringComparison.Ordinal);
+            if (index > 0)
+            {
+                // We're running PowerShell global tool. In this case the real entry executable should be the 'pwsh'
+                // or 'pwsh.exe' within the tool folder which should be the path right before the '\.store', not what
+                // PSHome is pointing to.
+                pshome = pshome[0..index];
+            }
+
+            pshome += Path.PathSeparator;
 
-            // to not impact startup perf, we don't remove duplicates, but we avoid adding a duplicate to the front
+            // To not impact startup perf, we don't remove duplicates, but we avoid adding a duplicate to the front
             // we also don't handle the edge case where PATH only contains $PSHOME
             if (string.IsNullOrEmpty(path))
             {
@@ -124,13 +148,16 @@ internal static int Start(string bannerText, string helpText)
             try
             {
                 string profileDir = Platform.CacheDirectory;
-#if !UNIX
-                if (!Directory.Exists(profileDir))
+                if (!string.IsNullOrEmpty(profileDir))
                 {
-                    Directory.CreateDirectory(profileDir);
-                }
+#if !UNIX
+                    if (!Directory.Exists(profileDir))
+                    {
+                        Directory.CreateDirectory(profileDir);
+                    }
 #endif
-                ProfileOptimization.SetProfileRoot(profileDir);
+                    ProfileOptimization.SetProfileRoot(profileDir);
+                }
             }
             catch
             {
@@ -164,18 +191,34 @@ internal static int Start(string bannerText, string helpText)
                     // Alternatively, we could call s_theConsoleHost.UI.WriteLine(s_theConsoleHost.Version.ToString());
                     // or start up the engine and retrieve the information via $psversiontable.GitCommitId
                     // but this returns the semantic version and avoids executing a script
-                    s_theConsoleHost.UI.WriteLine("PowerShell " + PSVersionInfo.GitCommitId);
+                    s_theConsoleHost.UI.WriteLine($"PowerShell {PSVersionInfo.GitCommitId}");
                     return 0;
                 }
 
                 // Servermode parameter validation check.
-                if ((s_cpp.ServerMode && s_cpp.NamedPipeServerMode) || (s_cpp.ServerMode && s_cpp.SocketServerMode) || (s_cpp.NamedPipeServerMode && s_cpp.SocketServerMode))
+                int serverModeCount = 0;
+                if (s_cpp.ServerMode)
+                {
+                    serverModeCount++;
+                }
+                if (s_cpp.NamedPipeServerMode)
+                {
+                    serverModeCount++;
+                }
+                if (s_cpp.SocketServerMode)
+                {
+                    serverModeCount++;
+                }
+#if !UNIX
+                if (s_cpp.V2SocketServerMode)
+                {
+                    serverModeCount++;
+                }
+#endif
+                if (serverModeCount > 1)
                 {
                     s_tracer.TraceError("Conflicting server mode parameters, parameters must be used exclusively.");
-                    if (s_theConsoleHost != null)
-                    {
-                        s_theConsoleHost.ui.WriteErrorLine(ConsoleHostStrings.ConflictingServerModeParameters);
-                    }
+                    s_theConsoleHost?.ui.WriteErrorLine(ConsoleHostStrings.ConflictingServerModeParameters);
 
                     return ExitCodeBadCommandLineParameter;
                 }
@@ -183,36 +226,74 @@ internal static int Start(string bannerText, string helpText)
 #if !UNIX
                 TaskbarJumpList.CreateRunAsAdministratorJumpList();
 #endif
-
                 // First check for and handle PowerShell running in a server mode.
                 if (s_cpp.ServerMode)
                 {
-                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("ServerMode");
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("ServerMode", s_cpp.ParametersUsedAsDouble);
                     ProfileOptimization.StartProfile("StartupProfileData-ServerMode");
-                    System.Management.Automation.Remoting.Server.OutOfProcessMediator.Run(s_cpp.InitialCommand, s_cpp.WorkingDirectory);
+                    StdIOProcessMediator.Run(
+                        initialCommand: s_cpp.InitialCommand,
+                        workingDirectory: s_cpp.WorkingDirectory,
+                        configurationName: null,
+                        configurationFile: s_cpp.ConfigurationFile,
+                        combineErrOutStream: false);
+                    exitCode = 0;
+                }
+                else if (s_cpp.SSHServerMode)
+                {
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("SSHServer", s_cpp.ParametersUsedAsDouble);
+                    ProfileOptimization.StartProfile("StartupProfileData-SSHServerMode");
+                    StdIOProcessMediator.Run(
+                        initialCommand: s_cpp.InitialCommand,
+                        workingDirectory: null,
+                        configurationName: null,
+                        configurationFile: s_cpp.ConfigurationFile,
+                        combineErrOutStream: true);
                     exitCode = 0;
                 }
                 else if (s_cpp.NamedPipeServerMode)
                 {
-                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("NamedPipe");
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("NamedPipe", s_cpp.ParametersUsedAsDouble);
                     ProfileOptimization.StartProfile("StartupProfileData-NamedPipeServerMode");
-                    System.Management.Automation.Remoting.RemoteSessionNamedPipeServer.RunServerMode(
-                        s_cpp.ConfigurationName);
+                    RemoteSessionNamedPipeServer.RunServerMode(
+                        configurationName: s_cpp.ConfigurationName);
                     exitCode = 0;
                 }
-                else if (s_cpp.SSHServerMode)
+#if !UNIX
+                else if (s_cpp.V2SocketServerMode)
                 {
-                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("SSHServer");
-                    ProfileOptimization.StartProfile("StartupProfileData-SSHServerMode");
-                    System.Management.Automation.Remoting.Server.SSHProcessMediator.Run(s_cpp.InitialCommand);
+                    if (s_cpp.Token == null)
+                    {
+                        s_tracer.TraceError("Token is required for V2SocketServerMode.");
+                        s_theConsoleHost?.ui.WriteErrorLine(string.Format(CultureInfo.CurrentCulture, ConsoleHostStrings.MissingMandatoryParameter, "-Token", "-V2SocketServerMode"));
+                        return ExitCodeBadCommandLineParameter;
+                    }
+
+                    if (s_cpp.UTCTimestamp == null)
+                    {
+                        s_tracer.TraceError("UTCTimestamp is required for V2SocketServerMode.");
+                        s_theConsoleHost?.ui.WriteErrorLine(string.Format(CultureInfo.CurrentCulture, ConsoleHostStrings.MissingMandatoryParameter, "-UTCTimestamp", "-v2socketservermode"));
+                        return ExitCodeBadCommandLineParameter;
+                    }
+
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("V2SocketServerMode", s_cpp.ParametersUsedAsDouble);
+                    ProfileOptimization.StartProfile("StartupProfileData-V2SocketServerMode");
+                    HyperVSocketMediator.Run(
+                        initialCommand: s_cpp.InitialCommand,
+                        configurationName: s_cpp.ConfigurationName,
+                        token: s_cpp.Token,
+                        tokenCreationTime: s_cpp.UTCTimestamp.Value);
+
                     exitCode = 0;
                 }
+#endif
                 else if (s_cpp.SocketServerMode)
                 {
-                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("SocketServerMode");
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("SocketServerMode", s_cpp.ParametersUsedAsDouble);
                     ProfileOptimization.StartProfile("StartupProfileData-SocketServerMode");
-                    System.Management.Automation.Remoting.Server.HyperVSocketMediator.Run(s_cpp.InitialCommand,
-                        s_cpp.ConfigurationName);
+                    HyperVSocketMediator.Run(
+                        initialCommand: s_cpp.InitialCommand,
+                        configurationName: s_cpp.ConfigurationName);
                     exitCode = 0;
                 }
                 else
@@ -240,23 +321,33 @@ internal static int Start(string bannerText, string helpText)
                     }
 
                     s_theConsoleHost.BindBreakHandler();
-                    PSHost.IsStdOutputRedirected = Console.IsOutputRedirected;
+                    IsStdOutputRedirected = Console.IsOutputRedirected;
 
                     // Send startup telemetry for ConsoleHost startup
-                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("Normal");
+                    ApplicationInsightsTelemetry.SendPSCoreStartupTelemetry("Normal", s_cpp.ParametersUsedAsDouble);
 
                     exitCode = s_theConsoleHost.Run(s_cpp, false);
                 }
             }
             finally
             {
+#pragma warning disable IDE0031
                 if (s_theConsoleHost != null)
                 {
 #if LEGACYTELEMETRY
                     TelemetryAPI.ReportExitTelemetry(s_theConsoleHost);
+#endif
+#if UNIX
+                    if (s_theConsoleHost.IsInteractive && s_theConsoleHost.UI.SupportsVirtualTerminal)
+                    {
+                        // https://github.com/dotnet/runtime/issues/27626 leaves terminal in application mode
+                        // for now, we explicitly emit DECRST 1 sequence
+                        s_theConsoleHost.UI.Write(DECCKM_OFF);
+                    }
 #endif
                     s_theConsoleHost.Dispose();
                 }
+#pragma warning restore IDE0031
             }
 
             unchecked
@@ -281,8 +372,8 @@ internal static void ParseCommandLine(string[] args)
                 PowerShellConfig.Instance.SetSystemConfigFilePath(s_cpp.SettingsFile);
             }
 
-            // Check registry setting for a Group Policy ConfigurationName entry and
-            // use it to override anything set by the user.
+            // Check registry setting for a Group Policy ConfigurationName entry,
+            // and use it to override anything set by the user on the command line.
             // It depends on setting file so 'SetSystemConfigFilePath()' should be called before.
             s_cpp.ConfigurationName = CommandLineParameterParser.GetConfigurationNameFromGroupPolicy();
         }
@@ -398,7 +489,7 @@ private static bool BreakIntoDebugger()
         /// if true, then flag the parent ConsoleHost that it should shutdown the session.  If false, then only the current
         /// executing instance is stopped.
         ///
-        ///</param>
+        /// </param>
         private static void SpinUpBreakHandlerThread(bool shouldEndSession)
         {
             ConsoleHost host = ConsoleHost.SingletonInstance;
@@ -413,7 +504,7 @@ private static void SpinUpBreakHandlerThread(bool shouldEndSession)
                     host.ShouldEndSession = shouldEndSession;
                 }
 
-                // Creation of the tread and starting it should be an atomic operation.
+                // Creation of the thread and starting it should be an atomic operation.
                 // otherwise the code in Run method can get instance of the breakhandlerThread
                 // after it is created and before started and call join on it. This will result
                 // in ThreadStateException.
@@ -464,10 +555,7 @@ private static void HandleBreak()
                     if (runspaceRef != null)
                     {
                         var runspace = runspaceRef.Runspace;
-                        if (runspace != null)
-                        {
-                            runspace.Close();
-                        }
+                        runspace?.Close();
                     }
                 }
             }
@@ -579,12 +667,18 @@ public override PSHostUserInterface UI
         /// <summary>
         /// See base class.
         /// </summary>
-        public void PushRunspace(Runspace newRunspace)
+        public void PushRunspace(Runspace runspace)
         {
-            if (_runspaceRef == null) { return; }
+            if (_runspaceRef == null)
+            {
+                return;
+            }
+
+            if (runspace is not RemoteRunspace remoteRunspace)
+            {
+                throw new ArgumentException(ConsoleHostStrings.PushRunspaceNotRemote, nameof(runspace));
+            }
 
-            RemoteRunspace remoteRunspace = newRunspace as RemoteRunspace;
-            Dbg.Assert(remoteRunspace != null, "Expected remoteRunspace != null");
             remoteRunspace.StateChanged += HandleRemoteRunspaceStateChanged;
 
             // Unsubscribe the local session debugger.
@@ -714,7 +808,10 @@ public Runspace Runspace
         {
             get
             {
-                if (this.RunspaceRef == null) { return null; }
+                if (this.RunspaceRef == null)
+                {
+                    return null;
+                }
 
                 return this.RunspaceRef.Runspace;
             }
@@ -729,7 +826,10 @@ internal LocalRunspace LocalRunspace
                     return RunspaceRef.OldRunspace as LocalRunspace;
                 }
 
-                if (RunspaceRef == null) { return null; }
+                if (RunspaceRef == null)
+                {
+                    return null;
+                }
 
                 return RunspaceRef.Runspace as LocalRunspace;
             }
@@ -741,7 +841,7 @@ public class ConsoleColorProxy
 
             public ConsoleColorProxy(ConsoleHostUserInterface ui)
             {
-                if (ui == null) throw new ArgumentNullException(nameof(ui));
+                ArgumentNullException.ThrowIfNull(ui);
                 _ui = ui;
             }
 
@@ -934,7 +1034,11 @@ public override PSObject PrivateData
         {
             get
             {
-                if (ui == null) return null;
+                if (ui == null)
+                {
+                    return null;
+                }
+
                 return _consoleColorProxy ??= PSObject.AsPSObject(new ConsoleColorProxy(ui));
             }
         }
@@ -1051,18 +1155,16 @@ public override void NotifyBeginApplication()
         {
             lock (hostGlobalLock)
             {
-                ++_beginApplicationNotifyCount;
-                if (_beginApplicationNotifyCount == 1)
+                if (++_beginApplicationNotifyCount == 1)
                 {
-                    // save the window title when first notified.
-
+                    // Save the window title when first notified.
                     _savedWindowTitle = ui.RawUI.WindowTitle;
 #if !UNIX
                     if (_initialConsoleMode != ConsoleControl.ConsoleModes.Unknown)
                     {
-                        var activeScreenBufferHandle = ConsoleControl.GetActiveScreenBufferHandle();
-                        _savedConsoleMode = ConsoleControl.GetMode(activeScreenBufferHandle);
-                        ConsoleControl.SetMode(activeScreenBufferHandle, _initialConsoleMode);
+                        var outputHandle = ConsoleControl.GetActiveScreenBufferHandle();
+                        _savedConsoleMode = ConsoleControl.GetMode(outputHandle);
+                        ConsoleControl.SetMode(outputHandle, _initialConsoleMode);
                     }
 #endif
                 }
@@ -1077,17 +1179,26 @@ public override void NotifyEndApplication()
         {
             lock (hostGlobalLock)
             {
-                Dbg.Assert(_beginApplicationNotifyCount > 0, "Not running an executable - NotifyBeginApplication was not called!");
-                --_beginApplicationNotifyCount;
-                if (_beginApplicationNotifyCount == 0)
+                if (--_beginApplicationNotifyCount == 0)
                 {
-                    // restore the window title when the last application started has ended.
-
+                    // Restore the window title when the last application started has ended.
                     ui.RawUI.WindowTitle = _savedWindowTitle;
 #if !UNIX
                     if (_savedConsoleMode != ConsoleControl.ConsoleModes.Unknown)
                     {
                         ConsoleControl.SetMode(ConsoleControl.GetActiveScreenBufferHandle(), _savedConsoleMode);
+                        if (_savedConsoleMode.HasFlag(ConsoleControl.ConsoleModes.VirtualTerminal))
+                        {
+                            // If the console output mode we just set already has 'VirtualTerminal' turned on,
+                            // we don't need to try turn on the VT mode separately.
+                            return;
+                        }
+                    }
+
+                    if (ui.SupportsVirtualTerminal)
+                    {
+                        // Re-enable VT mode if it was previously enabled, as a native command may have turned it off.
+                        ui.TryTurnOnVirtualTerminal();
                     }
 #endif
                 }
@@ -1222,15 +1333,8 @@ private void Dispose(bool isDisposingNotFinalizing)
                         StopTranscribing();
                     }
 
-                    if (_outputSerializer != null)
-                    {
-                        _outputSerializer.End();
-                    }
-
-                    if (_errorSerializer != null)
-                    {
-                        _errorSerializer.End();
-                    }
+                    _outputSerializer?.End();
+                    _errorSerializer?.End();
 
                     if (_runspaceRef != null)
                     {
@@ -1346,14 +1450,11 @@ internal WrappedSerializer OutputSerializer
         {
             get
             {
-                if (_outputSerializer == null)
-                {
-                    _outputSerializer =
-                        new WrappedSerializer(
-                            OutputFormat,
-                            "Output",
-                            Console.IsOutputRedirected ? Console.Out : ConsoleTextWriter);
-                }
+                _outputSerializer ??=
+                    new WrappedSerializer(
+                        OutputFormat,
+                        "Output",
+                        Console.IsOutputRedirected ? Console.Out : ConsoleTextWriter);
 
                 return _outputSerializer;
             }
@@ -1363,14 +1464,11 @@ internal WrappedSerializer ErrorSerializer
         {
             get
             {
-                if (_errorSerializer == null)
-                {
-                    _errorSerializer =
-                        new WrappedSerializer(
-                            ErrorFormat,
-                            "Error",
-                            Console.IsErrorRedirected ? Console.Error : ConsoleTextWriter);
-                }
+                _errorSerializer ??=
+                    new WrappedSerializer(
+                        ErrorFormat,
+                        "Error",
+                        Console.IsErrorRedirected ? Console.Error : ConsoleTextWriter);
 
                 return _errorSerializer;
             }
@@ -1462,7 +1560,7 @@ private uint Run(CommandLineParameterParser cpp, bool isPrestartWarned)
 
                 // NTRAID#Windows Out Of Band Releases-915506-2005/09/09
                 // Removed HandleUnexpectedExceptions infrastructure
-                exitCode = DoRunspaceLoop(cpp.InitialCommand, cpp.SkipProfiles, cpp.Args, cpp.StaMode, cpp.ConfigurationName);
+                exitCode = DoRunspaceLoop(cpp.InitialCommand, cpp.SkipProfiles, cpp.Args, cpp.StaMode, cpp.ConfigurationName, cpp.ConfigurationFile);
             }
             while (false);
 
@@ -1475,16 +1573,25 @@ private uint Run(CommandLineParameterParser cpp, bool isPrestartWarned)
         /// <returns>
         /// The process exit code to be returned by Main.
         /// </returns>
-        private uint DoRunspaceLoop(string initialCommand, bool skipProfiles, Collection<CommandParameter> initialCommandArgs, bool staMode, string configurationName)
+        private uint DoRunspaceLoop(
+            string initialCommand,
+            bool skipProfiles,
+            Collection<CommandParameter> initialCommandArgs,
+            bool staMode,
+            string configurationName,
+            string configurationFilePath)
         {
             ExitCode = ExitCodeSuccess;
 
             while (!ShouldEndSession)
             {
-                RunspaceCreationEventArgs args = new RunspaceCreationEventArgs(initialCommand, skipProfiles, staMode, configurationName, initialCommandArgs);
+                RunspaceCreationEventArgs args = new RunspaceCreationEventArgs(initialCommand, skipProfiles, staMode, configurationName, configurationFilePath, initialCommandArgs);
                 CreateRunspace(args);
 
-                if (ExitCode == ExitCodeInitFailure) { break; }
+                if (ExitCode == ExitCodeInitFailure)
+                {
+                    break;
+                }
 
                 if (!_noExit)
                 {
@@ -1557,14 +1664,12 @@ private Exception InitializeRunspaceHelper(string command, Executor exec, Execut
             return e;
         }
 
-        private void CreateRunspace(object runspaceCreationArgs)
+        private void CreateRunspace(RunspaceCreationEventArgs runspaceCreationArgs)
         {
-            RunspaceCreationEventArgs args = null;
             try
             {
-                args = runspaceCreationArgs as RunspaceCreationEventArgs;
-                Dbg.Assert(args != null, "Event Arguments to CreateRunspace should not be null");
-                DoCreateRunspace(args.InitialCommand, args.SkipProfiles, args.StaMode, args.ConfigurationName, args.InitialCommandArgs);
+                Dbg.Assert(runspaceCreationArgs != null, "Arguments to CreateRunspace should not be null.");
+                DoCreateRunspace(runspaceCreationArgs);
             }
             catch (ConsoleHostStartupException startupException)
             {
@@ -1573,35 +1678,6 @@ private void CreateRunspace(object runspaceCreationArgs)
             }
         }
 
-        /// <summary>
-        /// Check if a screen reviewer utility is running.
-        /// When a screen reader is running, we don't auto-load the PSReadLine module at startup,
-        /// since PSReadLine is not accessibility-firendly enough as of today.
-        /// </summary>
-        private bool IsScreenReaderActive()
-        {
-            if (_screenReaderActive.HasValue)
-            {
-                return _screenReaderActive.Value;
-            }
-
-            _screenReaderActive = false;
-            if (Platform.IsWindowsDesktop)
-            {
-                // Note: this API can detect if a third-party screen reader is active, such as NVDA, but not the in-box Windows Narrator.
-                // Quoted from https://docs.microsoft.com/windows/win32/api/winuser/nf-winuser-systemparametersinfoa about the
-                // accessibility parameter 'SPI_GETSCREENREADER':
-                // "Narrator, the screen reader that is included with Windows, does not set the SPI_SETSCREENREADER or SPI_GETSCREENREADER flags."
-                bool enabled = false;
-                if (SystemParametersInfo(SPI_GETSCREENREADER, 0, ref enabled, 0))
-                {
-                    _screenReaderActive = enabled;
-                }
-            }
-
-            return _screenReaderActive.Value;
-        }
-
         private static bool LoadPSReadline()
         {
             // Don't load PSReadline if:
@@ -1619,19 +1695,39 @@ private static bool LoadPSReadline()
         /// Opens and Initializes the Host's sole Runspace.  Processes the startup scripts and runs any command passed on the
         /// command line.
         /// </summary>
-        private void DoCreateRunspace(string initialCommand, bool skipProfiles, bool staMode, string configurationName, Collection<CommandParameter> initialCommandArgs)
+        /// <param name="args">Runspace creation event arguments.</param>
+        private void DoCreateRunspace(RunspaceCreationEventArgs args)
         {
-            Dbg.Assert(_runspaceRef == null, "runspace should be null");
+            Dbg.Assert(_runspaceRef == null, "_runspaceRef field should be null");
             Dbg.Assert(DefaultInitialSessionState != null, "DefaultInitialSessionState should not be null");
             s_runspaceInitTracer.WriteLine("Calling RunspaceFactory.CreateRunspace");
 
+            // Use session configuration file if provided.
+            bool customConfigurationProvided = false;
+            if (!string.IsNullOrEmpty(args.ConfigurationFilePath))
+            {
+                try
+                {
+                    // Replace DefaultInitialSessionState with the initial state configuration defined by the file.
+                    DefaultInitialSessionState = InitialSessionState.CreateFromSessionConfigurationFile(
+                        path: args.ConfigurationFilePath,
+                        roleVerifier: null,
+                        validateFile: true);
+                }
+                catch (Exception ex)
+                {
+                    throw new ConsoleHostStartupException(ConsoleHostStrings.ShellCannotBeStarted, ex);
+                }
+
+                customConfigurationProvided = true;
+            }
+
             try
             {
                 Runspace consoleRunspace = null;
                 bool psReadlineFailed = false;
 
                 // Load PSReadline by default unless there is no use:
-                //    - screen reader is active, such as NVDA, indicating non-visual access
                 //    - we're running a command/file and just exiting
                 //    - stdin is redirected by a parent process
                 //    - we're not interactive
@@ -1640,28 +1736,20 @@ private void DoCreateRunspace(string initialCommand, bool skipProfiles, bool sta
                 //    powershell -command "Update-Module PSReadline"
                 // This should work just fine as long as no other instances of PowerShell are running.
                 ReadOnlyCollection<ModuleSpecification> defaultImportModulesList = null;
-                if (LoadPSReadline())
+                if (!customConfigurationProvided && LoadPSReadline())
                 {
-                    if (IsScreenReaderActive())
+                    // Create and open Runspace with PSReadline.
+                    defaultImportModulesList = DefaultInitialSessionState.Modules;
+                    DefaultInitialSessionState.ImportPSModule(new[] { "PSReadLine" });
+                    consoleRunspace = RunspaceFactory.CreateRunspace(this, DefaultInitialSessionState);
+                    try
                     {
-                        s_theConsoleHost.UI.WriteLine(ManagedEntranceStrings.PSReadLineDisabledWhenScreenReaderIsActive);
-                        s_theConsoleHost.UI.WriteLine();
+                        OpenConsoleRunspace(consoleRunspace, args.StaMode);
                     }
-                    else
+                    catch (Exception)
                     {
-                        // Create and open Runspace with PSReadline.
-                        defaultImportModulesList = DefaultInitialSessionState.Modules;
-                        DefaultInitialSessionState.ImportPSModule(new[] { "PSReadLine" });
-                        consoleRunspace = RunspaceFactory.CreateRunspace(this, DefaultInitialSessionState);
-                        try
-                        {
-                            OpenConsoleRunspace(consoleRunspace, staMode);
-                        }
-                        catch (Exception)
-                        {
-                            consoleRunspace = null;
-                            psReadlineFailed = true;
-                        }
+                        consoleRunspace = null;
+                        psReadlineFailed = true;
                     }
                 }
 
@@ -1675,7 +1763,7 @@ private void DoCreateRunspace(string initialCommand, bool skipProfiles, bool sta
                     }
 
                     consoleRunspace = RunspaceFactory.CreateRunspace(this, DefaultInitialSessionState);
-                    OpenConsoleRunspace(consoleRunspace, staMode);
+                    OpenConsoleRunspace(consoleRunspace, args.StaMode);
                 }
 
                 Runspace.PrimaryRunspace = consoleRunspace;
@@ -1707,7 +1795,7 @@ private void DoCreateRunspace(string initialCommand, bool skipProfiles, bool sta
             _readyForInputTimeInMS = (DateTime.Now - Process.GetCurrentProcess().StartTime).TotalMilliseconds;
 #endif
 
-            DoRunspaceInitialization(skipProfiles, initialCommand, configurationName, initialCommandArgs);
+            DoRunspaceInitialization(args);
         }
 
         private static void OpenConsoleRunspace(Runspace runspace, bool staMode)
@@ -1724,7 +1812,7 @@ private static void OpenConsoleRunspace(Runspace runspace, bool staMode)
             runspace.Open();
         }
 
-        private void DoRunspaceInitialization(bool skipProfiles, string initialCommand, string configurationName, Collection<CommandParameter> initialCommandArgs)
+        private void DoRunspaceInitialization(RunspaceCreationEventArgs args)
         {
             if (_runspaceRef.Runspace.Debugger != null)
             {
@@ -1759,13 +1847,13 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                 }
             }
 
-            if (!string.IsNullOrEmpty(configurationName))
+            if (!string.IsNullOrEmpty(args.ConfigurationName))
             {
                 // If an endpoint configuration is specified then create a loop-back remote runspace targeting
                 // the endpoint and push onto runspace ref stack.  Ignore profile and configuration scripts.
                 try
                 {
-                    RemoteRunspace remoteRunspace = HostUtilities.CreateConfiguredRunspace(configurationName, this);
+                    RemoteRunspace remoteRunspace = HostUtilities.CreateConfiguredRunspace(args.ConfigurationName, this);
                     remoteRunspace.ShouldCloseOnPop = true;
                     PushRunspace(remoteRunspace);
 
@@ -1782,8 +1870,37 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                 const string shellId = "Microsoft.PowerShell";
 
                 // If the system lockdown policy says "Enforce", do so. Do this after types / formatting, default functions, etc
-                // are loaded so that they are trusted. (Validation of their signatures is done in F&O)
-                Utils.EnforceSystemLockDownLanguageMode(_runspaceRef.Runspace.ExecutionContext);
+                // are loaded so that they are trusted. (Validation of their signatures is done in F&O).
+                var languageMode = Utils.EnforceSystemLockDownLanguageMode(_runspaceRef.Runspace.ExecutionContext);
+                // When displaying banner, also display the language mode if running in any restricted mode.
+                if (s_cpp.ShowBanner)
+                {
+                    switch (languageMode)
+                    {
+                        case PSLanguageMode.ConstrainedLanguage:
+                            if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                            {
+                                s_theConsoleHost.UI.WriteLine(ManagedEntranceStrings.ShellBannerCLMode);
+                            }
+                            else
+                            {
+                                s_theConsoleHost.UI.WriteLine(ManagedEntranceStrings.ShellBannerCLAuditMode);
+                            }
+
+                            break;
+
+                        case PSLanguageMode.NoLanguage:
+                            s_theConsoleHost.UI.WriteLine(ManagedEntranceStrings.ShellBannerNLMode);
+                            break;
+
+                        case PSLanguageMode.RestrictedLanguage:
+                            s_theConsoleHost.UI.WriteLine(ManagedEntranceStrings.ShellBannerRLMode);
+                            break;
+
+                        default:
+                            break;
+                    }
+                }
 
                 string allUsersProfile = HostUtilities.GetFullProfileFileName(null, false);
                 string allUsersHostSpecificProfile = HostUtilities.GetFullProfileFileName(shellId, false);
@@ -1800,7 +1917,7 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                         currentUserProfile,
                         currentUserHostSpecificProfile));
 
-                if (!skipProfiles)
+                if (!args.SkipProfiles)
                 {
                     // Run the profiles.
                     // Profiles are run in the following order:
@@ -1818,7 +1935,7 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                     sw.Stop();
 
                     var profileLoadTimeInMs = sw.ElapsedMilliseconds;
-                    if (profileLoadTimeInMs > 500 && s_cpp.ShowBanner)
+                    if (s_cpp.ShowBanner && !s_cpp.NoProfileLoadTime && profileLoadTimeInMs > 500)
                     {
                         Console.Error.WriteLine(ConsoleHostStrings.SlowProfileLoadingMessage, profileLoadTimeInMs);
                     }
@@ -1845,24 +1962,26 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
 
                 Pipeline tempPipeline = exec.CreatePipeline();
                 Command c;
+#if UNIX
                 // if file doesn't have .ps1 extension, we read the contents and treat it as a script to support shebang with no .ps1 extension usage
-                if (!Path.GetExtension(filePath).Equals(".ps1", StringComparison.OrdinalIgnoreCase))
+                if (!filePath.EndsWith(".ps1", StringComparison.OrdinalIgnoreCase))
                 {
                     string script = File.ReadAllText(filePath);
                     c = new Command(script, isScript: true, useLocalScope: false);
                 }
                 else
+#endif
                 {
                     c = new Command(filePath, false, false);
                 }
 
                 tempPipeline.Commands.Add(c);
 
-                if (initialCommandArgs != null)
+                if (args.InitialCommandArgs != null)
                 {
                     // add the args passed to the command.
 
-                    foreach (CommandParameter p in initialCommandArgs)
+                    foreach (CommandParameter p in args.InitialCommandArgs)
                     {
                         c.Parameters.Add(p);
                     }
@@ -1919,19 +2038,19 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                     ReportException(e1, exec);
                 }
             }
-            else if (!string.IsNullOrEmpty(initialCommand))
+            else if (!string.IsNullOrEmpty(args.InitialCommand))
             {
                 // Run the command passed on the command line
 
                 s_tracer.WriteLine("running initial command");
 
-                Pipeline tempPipeline = exec.CreatePipeline(initialCommand, true);
+                Pipeline tempPipeline = exec.CreatePipeline(args.InitialCommand, true);
 
-                if (initialCommandArgs != null)
+                if (args.InitialCommandArgs != null)
                 {
                     // add the args passed to the command.
 
-                    foreach (CommandParameter p in initialCommandArgs)
+                    foreach (CommandParameter p in args.InitialCommandArgs)
                     {
                         tempPipeline.Commands[0].Parameters.Add(p);
                     }
@@ -1947,7 +2066,7 @@ private void DoRunspaceInitialization(bool skipProfiles, string initialCommand,
                     ParseError[] errors;
 
                     // Detect if they're using input. If so, read from it.
-                    Ast parsedInput = Parser.ParseInput(initialCommand, out tokens, out errors);
+                    Ast parsedInput = Parser.ParseInput(args.InitialCommand, out tokens, out errors);
                     if (AstSearcher.IsUsingDollarInput(parsedInput))
                     {
                         executionOptions |= Executor.ExecutionOptions.ReadInputObjects;
@@ -2053,9 +2172,7 @@ private void ReportException(Exception e, Executor exec)
 
             // NTRAID#Windows OS Bugs-1143621-2005/04/08-sburns
 
-            IContainsErrorRecord icer = e as IContainsErrorRecord;
-
-            if (icer != null)
+            if (e is IContainsErrorRecord icer)
             {
                 error = icer.ErrorRecord;
             }
@@ -2084,7 +2201,6 @@ private void ReportException(Exception e, Executor exec)
             if (e1 != null)
             {
                 // that didn't work.  Write out the error ourselves as a last resort.
-
                 ReportExceptionFallback(e, null);
             }
         }
@@ -2105,16 +2221,17 @@ private void ReportExceptionFallback(Exception e, string header)
                 Console.Error.WriteLine(header);
             }
 
-            if (e == null)
+            if (e is null)
             {
                 return;
             }
 
             // See if the exception has an error record attached to it...
             ErrorRecord er = null;
-            IContainsErrorRecord icer = e as IContainsErrorRecord;
-            if (icer != null)
+            if (e is IContainsErrorRecord icer)
+            {
                 er = icer.ErrorRecord;
+            }
 
             if (e is PSRemotingTransportException)
             {
@@ -2131,8 +2248,22 @@ private void ReportExceptionFallback(Exception e, string header)
             }
 
             // Add the position message for the error if it's available.
-            if (er != null && er.InvocationInfo != null)
+            if (er?.InvocationInfo is { })
+            {
                 Console.Error.WriteLine(er.InvocationInfo.PositionMessage);
+            }
+
+            // Print the stack trace.
+            Console.Error.WriteLine($"\n--- {e.GetType().FullName} ---");
+            Console.Error.WriteLine(e.StackTrace);
+
+            Exception inner = e.InnerException;
+            while (inner is { })
+            {
+                Console.Error.WriteLine($"--- inner {inner.GetType().FullName} ---");
+                Console.Error.WriteLine(inner.StackTrace);
+                inner = inner.InnerException;
+            }
         }
 
         /// <summary>
@@ -2156,7 +2287,10 @@ private void OnExecutionSuspended(object sender, DebuggerStopEventArgs e)
         {
             // Check local runspace internalHost to see if debugging is enabled.
             LocalRunspace localrunspace = LocalRunspace;
-            if ((localrunspace != null) && !localrunspace.ExecutionContext.EngineHostInterface.DebuggerEnabled) { return; }
+            if ((localrunspace != null) && !localrunspace.ExecutionContext.EngineHostInterface.DebuggerEnabled)
+            {
+                return;
+            }
 
             _debuggerStopEventArgs = e;
             InputLoop baseLoop = null;
@@ -2168,10 +2302,7 @@ private void OnExecutionSuspended(object sender, DebuggerStopEventArgs e)
                     // For remote debugging block data coming from the main (not-nested)
                     // running command.
                     baseLoop = InputLoop.GetNonNestedLoop();
-                    if (baseLoop != null)
-                    {
-                        baseLoop.BlockCommandOutput();
-                    }
+                    baseLoop?.BlockCommandOutput();
                 }
 
                 //
@@ -2216,10 +2347,7 @@ private void OnExecutionSuspended(object sender, DebuggerStopEventArgs e)
             finally
             {
                 _debuggerStopEventArgs = null;
-                if (baseLoop != null)
-                {
-                    baseLoop.ResumeCommandOutput();
-                }
+                baseLoop?.ResumeCommandOutput();
             }
         }
 
@@ -2310,7 +2438,7 @@ private void WriteDebuggerMessage(string line)
         /// Neither this class' instances nor its static data is threadsafe.  Caller is responsible for ensuring threadsafe
         /// access.
         /// </summary>
-        private class InputLoop
+        private sealed class InputLoop
         {
             internal static void RunNewInputLoop(ConsoleHost parent, bool isNested)
             {
@@ -2419,25 +2547,18 @@ private void HandleRunspacePopped(object sender, EventArgs eventArgs)
             /// </summary>
             internal void Run(bool inputLoopIsNested)
             {
-                System.Management.Automation.Host.PSHostUserInterface c = _parent.UI;
+                PSHostUserInterface c = _parent.UI;
                 ConsoleHostUserInterface ui = c as ConsoleHostUserInterface;
 
                 Dbg.Assert(ui != null, "Host.UI should return an instance.");
 
                 bool inBlockMode = false;
-                bool previousResponseWasEmpty = false;
-                StringBuilder inputBlock = new StringBuilder();
+                // Use nullable so that we don't evaluate suggestions at startup.
+                bool? previousResponseWasEmpty = null;
+                var inputBlock = new StringBuilder();
 
                 while (!_parent.ShouldEndSession && !_shouldExit)
                 {
-#if !UNIX
-                    if (ui.SupportsVirtualTerminal)
-                    {
-                        // need to re-enable VT mode if it was previously enabled as native commands may have turned it off
-                        ui.TryTurnOnVtMode();
-                    }
-#endif
-
                     try
                     {
                         _parent._isRunningPromptLoop = true;
@@ -2450,7 +2571,6 @@ internal void Run(bool inputLoopIsNested)
                             if (inBlockMode)
                             {
                                 // use a special prompt that denotes block mode
-
                                 prompt = ">> ";
                             }
                             else
@@ -2461,9 +2581,9 @@ internal void Run(bool inputLoopIsNested)
                                     ui.WriteLine();
 
                                 // Evaluate any suggestions
-                                if (!previousResponseWasEmpty)
+                                if (previousResponseWasEmpty == false)
                                 {
-                                    EvaluateSuggestions(ui);
+                                    EvaluateFeedbacks(ui);
                                 }
 
                                 // Then output the prompt
@@ -2472,15 +2592,20 @@ internal void Run(bool inputLoopIsNested)
                                     prompt = EvaluateDebugPrompt();
                                 }
 
-                                if (prompt == null)
-                                {
-                                    prompt = EvaluatePrompt();
-                                }
+                                prompt ??= EvaluatePrompt();
                             }
 
                             ui.Write(prompt);
                         }
 
+#if UNIX
+                        if (c.SupportsVirtualTerminal)
+                        {
+                            // enable DECCKM as .NET requires cursor keys to emit VT for Console class
+                            c.Write(DECCKM_ON);
+                        }
+#endif
+
                         previousResponseWasEmpty = false;
                         // There could be a profile. So there could be a user defined custom readline command
                         line = ui.ReadLineWithTabCompletion(_exec);
@@ -2584,6 +2709,14 @@ e is RemoteException ||
                         }
                         else
                         {
+#if UNIX
+                            if (c.SupportsVirtualTerminal)
+                            {
+                                // disable DECCKM to standard mode as applications may not expect VT for cursor keys
+                                c.Write(DECCKM_OFF);
+                            }
+#endif
+
                             if (_parent.IsRunningAsync && !_parent.IsNested)
                             {
                                 _exec.ExecuteCommandAsync(line, out e, Executor.ExecutionOptions.AddOutputter | Executor.ExecutionOptions.AddToHistory);
@@ -2600,10 +2733,7 @@ e is RemoteException ||
                                 bht = _parent._breakHandlerThread;
                             }
 
-                            if (bht != null)
-                            {
-                                bht.Join();
-                            }
+                            bht?.Join();
 
                             // Once the pipeline has been executed, we toss any outstanding progress data and
                             // take down the display.
@@ -2631,6 +2761,7 @@ e is RemoteException ||
 #endif
                         }
                     }
+
                     // NTRAID#Windows Out Of Band Releases-915506-2005/09/09
                     // Removed HandleUnexpectedExceptions infrastructure
                     finally
@@ -2642,8 +2773,7 @@ e is RemoteException ||
 
             internal void BlockCommandOutput()
             {
-                RemotePipeline rCmdPipeline = _parent.runningCmd as RemotePipeline;
-                if (rCmdPipeline != null)
+                if (_parent.runningCmd is RemotePipeline rCmdPipeline)
                 {
                     rCmdPipeline.DrainIncomingData();
                     rCmdPipeline.SuspendIncomingData();
@@ -2656,8 +2786,7 @@ internal void BlockCommandOutput()
 
             internal void ResumeCommandOutput()
             {
-                RemotePipeline rCmdPipeline = _parent.runningCmd as RemotePipeline;
-                if (rCmdPipeline != null)
+                if (_parent.runningCmd is RemotePipeline rCmdPipeline)
                 {
                     rCmdPipeline.ResumeIncomingData();
                 }
@@ -2685,7 +2814,7 @@ private bool HandleErrors(Exception e, string line, bool inBlockMode, ref String
                 }
                 else
                 {
-                    // an exception ocurred when the command was executed.  Tell the user about it.
+                    // an exception occurred when the command was executed.  Tell the user about it.
                     _parent.ReportException(e, _exec);
                 }
 
@@ -2747,8 +2876,7 @@ private static bool IsIncompleteParseException(Exception e)
                 }
 
                 // If it is remote exception ferret out the real exception.
-                RemoteException remoteException = e as RemoteException;
-                if (remoteException == null || remoteException.ErrorRecord == null)
+                if (e is not RemoteException remoteException || remoteException.ErrorRecord == null)
                 {
                     return false;
                 }
@@ -2756,33 +2884,18 @@ private static bool IsIncompleteParseException(Exception e)
                 return remoteException.ErrorRecord.CategoryInfo.Reason == nameof(IncompleteParseException);
             }
 
-            private void EvaluateSuggestions(ConsoleHostUserInterface ui)
+            private void EvaluateFeedbacks(ConsoleHostUserInterface ui)
             {
                 // Output any training suggestions
                 try
                 {
-                    List<string> suggestions = HostUtilities.GetSuggestion(_parent.Runspace);
-
-                    if (suggestions.Count > 0)
+                    List<FeedbackResult> feedbacks = FeedbackHub.GetFeedback(_parent.Runspace);
+                    if (feedbacks is null || feedbacks.Count is 0)
                     {
-                        ui.WriteLine();
+                        return;
                     }
 
-                    bool first = true;
-                    foreach (string suggestion in suggestions)
-                    {
-                        if (!first)
-                            ui.WriteLine();
-
-                        ui.WriteLine(suggestion);
-
-                        first = false;
-                    }
-                }
-                catch (TerminateException)
-                {
-                    // A variable breakpoint may be hit by HostUtilities.GetSuggestion. The debugger throws TerminateExceptions to stop the execution
-                    // of the current statement; we do not want to treat these exceptions as errors.
+                    HostUtilities.RenderFeedback(feedbacks, ui);
                 }
                 catch (Exception e)
                 {
@@ -2796,8 +2909,7 @@ private void EvaluateSuggestions(ConsoleHostUserInterface ui)
 
             private string EvaluatePrompt()
             {
-                Exception unused = null;
-                string promptString = _promptExec.ExecuteCommandAndGetResultAsString("prompt", out unused);
+                string promptString = _promptExec.ExecuteCommandAndGetResultAsString("prompt", out _);
 
                 if (string.IsNullOrEmpty(promptString))
                 {
@@ -2807,8 +2919,7 @@ private string EvaluatePrompt()
                 // Check for the pushed runspace scenario.
                 if (_isRunspacePushed)
                 {
-                    RemoteRunspace remoteRunspace = _parent.Runspace as RemoteRunspace;
-                    if (remoteRunspace != null)
+                    if (_parent.Runspace is RemoteRunspace remoteRunspace)
                     {
                         promptString = HostUtilities.GetRemotePrompt(remoteRunspace, promptString, _parent._inPushedConfiguredSession);
                     }
@@ -2842,13 +2953,9 @@ private string EvaluateDebugPrompt()
 
                 PSObject prompt = output.ReadAndRemoveAt0();
                 string promptString = (prompt != null) ? (prompt.BaseObject as string) : null;
-                if (promptString != null)
+                if (promptString != null && _parent.Runspace is RemoteRunspace remoteRunspace)
                 {
-                    RemoteRunspace remoteRunspace = _parent.Runspace as RemoteRunspace;
-                    if (remoteRunspace != null)
-                    {
-                        promptString = HostUtilities.GetRemotePrompt(remoteRunspace, promptString, _parent._inPushedConfiguredSession);
-                    }
+                    promptString = HostUtilities.GetRemotePrompt(remoteRunspace, promptString, _parent._inPushedConfiguredSession);
                 }
 
                 return promptString;
@@ -2871,10 +2978,9 @@ private string EvaluateDebugPrompt()
             private static readonly Stack<InputLoop> s_instanceStack = new Stack<InputLoop>();
         }
 
-        [Serializable]
         [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic", Justification =
             "This exception cannot be used outside of the console host application. It is not thrown by a library routine, only by an application.")]
-        private class ConsoleHostStartupException : Exception
+        private sealed class ConsoleHostStartupException : Exception
         {
             internal
             ConsoleHostStartupException()
@@ -2888,14 +2994,6 @@ private class ConsoleHostStartupException : Exception
             {
             }
 
-            protected
-            ConsoleHostStartupException(
-                System.Runtime.Serialization.SerializationInfo info,
-                System.Runtime.Serialization.StreamingContext context)
-                : base(info, context)
-            {
-            }
-
             internal
             ConsoleHostStartupException(string message, Exception innerException)
                 : base(message, innerException)
@@ -2925,7 +3023,7 @@ private class ConsoleHostStartupException : Exception
         private bool _isDisposed;
         internal ConsoleHostUserInterface ui;
 
-        internal Lazy<TextReader> ConsoleIn { get; } = new Lazy<TextReader>(() => Console.In);
+        internal Lazy<TextReader> ConsoleIn { get; } = new Lazy<TextReader>(static () => Console.In);
 
         private string _savedWindowTitle = string.Empty;
         private readonly Version _ver = PSVersionInfo.PSVersion;
@@ -2934,7 +3032,6 @@ private class ConsoleHostStartupException : Exception
         private bool _setShouldExitCalled;
         private bool _isRunningPromptLoop;
         private bool _wasInitialCommandEncoded;
-        private bool? _screenReaderActive;
 
         // hostGlobalLock is used to sync public method calls (in case multiple threads call into the host) and access to
         // state that persists across method calls, like progress data. It's internal because the ui object also
@@ -2984,12 +3081,14 @@ internal RunspaceCreationEventArgs(
             bool skipProfiles,
             bool staMode,
             string configurationName,
+            string configurationFilePath,
             Collection<CommandParameter> initialCommandArgs)
         {
             InitialCommand = initialCommand;
             SkipProfiles = skipProfiles;
             StaMode = staMode;
             ConfigurationName = configurationName;
+            ConfigurationFilePath = configurationFilePath;
             InitialCommandArgs = initialCommandArgs;
         }
 
@@ -3001,6 +3100,8 @@ internal RunspaceCreationEventArgs(
 
         internal string ConfigurationName { get; set; }
 
+        internal string ConfigurationFilePath { get; set; }
+
         internal Collection<CommandParameter> InitialCommandArgs { get; set; }
     }
 }   // namespace
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostRawUserInterface.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostRawUserInterface.cs
index 2a6ea89176d..58630f5b3c0 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostRawUserInterface.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostRawUserInterface.cs
@@ -41,23 +41,16 @@ class ConsoleHostRawUserInterface : System.Management.Automation.Host.PSHostRawU
             //   (we may load resources which can take some time)
             Task.Run(() =>
             {
-                WindowsIdentity identity = WindowsIdentity.GetCurrent();
-                WindowsPrincipal principal = new WindowsPrincipal(identity);
+                var identity = WindowsIdentity.GetCurrent();
+                var principal = new WindowsPrincipal(identity);
                 if (principal.IsInRole(WindowsBuiltInRole.Administrator))
                 {
-                    string prefix = ConsoleHostRawUserInterfaceStrings.WindowTitleElevatedPrefix;
-
-                    // check using Regex if the window already has Administrator: prefix
-                    // (i.e. from the parent console process)
-                    string titlePattern = ConsoleHostRawUserInterfaceStrings.WindowTitleTemplate;
-                    titlePattern = Regex.Escape(titlePattern)
-                        .Replace(@"\{1}", ".*")
-                        .Replace(@"\{0}", Regex.Escape(prefix));
-                    if (!Regex.IsMatch(this.WindowTitle, titlePattern))
+                    // Check if the window already has the "Administrator: " prefix (i.e. from the parent console process).
+                    ReadOnlySpan<char> prefix = ConsoleHostRawUserInterfaceStrings.WindowTitleElevatedPrefix;
+                    ReadOnlySpan<char> windowTitle = WindowTitle;
+                    if (!windowTitle.StartsWith(prefix))
                     {
-                        this.WindowTitle = StringUtil.Format(ConsoleHostRawUserInterfaceStrings.WindowTitleTemplate,
-                            prefix,
-                            this.WindowTitle);
+                        WindowTitle = string.Concat(prefix, windowTitle);
                     }
                 }
             });
@@ -85,9 +78,8 @@ public override
                 GetBufferInfo(out bufferInfo);
 
                 ConsoleColor foreground;
-                ConsoleColor unused;
 
-                ConsoleControl.WORDToColor(bufferInfo.Attributes, out foreground, out unused);
+                ConsoleControl.WORDToColor(bufferInfo.Attributes, out foreground, out _);
                 return foreground;
             }
 
@@ -135,9 +127,8 @@ public override
                 GetBufferInfo(out bufferInfo);
 
                 ConsoleColor background;
-                ConsoleColor unused;
 
-                ConsoleControl.WORDToColor(bufferInfo.Attributes, out unused, out background);
+                ConsoleControl.WORDToColor(bufferInfo.Attributes, out _, out background);
                 return background;
             }
 
@@ -190,14 +181,15 @@ public override
 
             set
             {
-                // cursor position can't be outside the buffer area
-
-                ConsoleControl.CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
-
-                ConsoleHandle handle = GetBufferInfo(out bufferInfo);
-
-                CheckCoordinateWithinBuffer(ref value, ref bufferInfo, "value");
-                ConsoleControl.SetConsoleCursorPosition(handle, value);
+                try
+                {
+                    Console.SetCursorPosition(value.X, value.Y);
+                }
+                catch (ArgumentOutOfRangeException)
+                {
+                    // if screen buffer has changed, we cannot set it anywhere reasonable as the screen buffer
+                    // might change again, so we ignore this
+                }
             }
         }
 
@@ -362,8 +354,7 @@ public override
                 }
                 catch (HostException e)
                 {
-                    Win32Exception win32exception = e.InnerException as Win32Exception;
-                    if (win32exception != null &&
+                    if (e.InnerException is Win32Exception win32exception &&
                         win32exception.NativeErrorCode == 0x57)
                     {
                         throw PSTraceSource.NewArgumentOutOfRangeException("value", value,
@@ -456,7 +447,7 @@ public override
                 }
 
                 // if the new size will extend past the edge of screen buffer, then move the window position to try to
-                // accomodate that.
+                // accommodate that.
 
                 ConsoleControl.SMALL_RECT r = bufferInfo.WindowRect;
 
@@ -647,8 +638,7 @@ public override
                     {
                         int actualNumberOfInput = ConsoleControl.ReadConsoleInput(handle, ref inputRecords);
                         Dbg.Assert(actualNumberOfInput == 1,
-                            string.Format(CultureInfo.InvariantCulture, "ReadConsoleInput returns {0} number of input event records",
-                                actualNumberOfInput));
+                            string.Create(CultureInfo.InvariantCulture, $"ReadConsoleInput returns {actualNumberOfInput} number of input event records"));
                         if (actualNumberOfInput == 1)
                         {
                             if (((ConsoleControl.InputRecordEventTypes)inputRecords[0].EventType) ==
@@ -1540,7 +1530,7 @@ internal struct COORD
 
             public override string ToString()
             {
-                return string.Format(CultureInfo.InvariantCulture, "{0},{1}", X, Y);
+                return string.Create(CultureInfo.InvariantCulture, $"{X},{Y}");
             }
         }
 
@@ -1556,7 +1546,7 @@ internal struct SMALL_RECT
 
             public override string ToString()
             {
-                return string.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3}", Left, Top, Right, Bottom);
+                return string.Create(CultureInfo.InvariantCulture, $"{Left},{Top},{Right},{Bottom}");
             }
         }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs
index 14425da82c0..f0da0d99547 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterface.cs
@@ -60,11 +60,38 @@ internal ConsoleHostUserInterface(ConsoleHost parent)
 
             _parent = parent;
             _rawui = new ConsoleHostRawUserInterface(this);
-            SupportsVirtualTerminal = TryTurnOnVtMode();
+            SupportsVirtualTerminal = true;
             _isInteractiveTestToolListening = false;
+
+            // check if TERM env var is set
+            // `dumb` means explicitly don't use VT
+            // `xterm-mono` and `xtermm` means support VT, but emit plaintext
+            switch (Environment.GetEnvironmentVariable("TERM"))
+            {
+                case "dumb":
+                    SupportsVirtualTerminal = false;
+                    break;
+                case "xterm-mono":
+                case "xtermm":
+                    PSStyle.Instance.OutputRendering = OutputRendering.PlainText;
+                    break;
+                default:
+                    break;
+            }
+
+            // widely supported by CLI tools via https://no-color.org/
+            if (Environment.GetEnvironmentVariable("NO_COLOR") != null)
+            {
+                PSStyle.Instance.OutputRendering = OutputRendering.PlainText;
+            }
+
+            if (SupportsVirtualTerminal)
+            {
+                SupportsVirtualTerminal = TryTurnOnVirtualTerminal();
+            }
         }
 
-        internal bool TryTurnOnVtMode()
+        internal bool TryTurnOnVirtualTerminal()
         {
 #if UNIX
             return true;
@@ -72,16 +99,22 @@ internal bool TryTurnOnVtMode()
             try
             {
                 // Turn on virtual terminal if possible.
-
                 // This might throw - not sure how exactly (no console), but if it does, we shouldn't fail to start.
-                var handle = ConsoleControl.GetActiveScreenBufferHandle();
-                var m = ConsoleControl.GetMode(handle);
-                if (ConsoleControl.NativeMethods.SetConsoleMode(handle.DangerousGetHandle(), (uint)(m | ConsoleControl.ConsoleModes.VirtualTerminal)))
+                var outputHandle = ConsoleControl.GetActiveScreenBufferHandle();
+                var outputMode = ConsoleControl.GetMode(outputHandle);
+
+                if (outputMode.HasFlag(ConsoleControl.ConsoleModes.VirtualTerminal))
+                {
+                    return true;
+                }
+
+                outputMode |= ConsoleControl.ConsoleModes.VirtualTerminal;
+                if (ConsoleControl.NativeMethods.SetConsoleMode(outputHandle.DangerousGetHandle(), (uint)outputMode))
                 {
                     // We only know if vt100 is supported if the previous call actually set the new flag, older
                     // systems ignore the setting.
-                    m = ConsoleControl.GetMode(handle);
-                    return (m & ConsoleControl.ConsoleModes.VirtualTerminal) != 0;
+                    outputMode = ConsoleControl.GetMode(outputHandle);
+                    return outputMode.HasFlag(ConsoleControl.ConsoleModes.VirtualTerminal);
                 }
             }
             catch
@@ -174,9 +207,8 @@ public override string ReadLine()
             HandleThrowOnReadAndPrompt();
 
             // call our internal version such that it does not end input on a tab
-            ReadLineResult unused;
 
-            return ReadLine(false, string.Empty, out unused, true, true);
+            return ReadLine(false, string.Empty, out _, true, true);
         }
 
         /// <summary>
@@ -223,7 +255,7 @@ public override SecureString ReadLineAsSecureString()
         /// the advantage is portability through abstraction. Does not support
         /// arrow key movement, but supports backspace.
         /// </summary>
-        ///<param name="isSecureString">
+        /// <param name="isSecureString">
         /// True to specify reading a SecureString; false reading a string
         /// </param>
         /// <param name="printToken">
@@ -300,20 +332,19 @@ private object ReadLineSafe(bool isSecureString, char? printToken)
 
                 Coordinates originalCursorPos = _rawui.CursorPosition;
 
+                //
+                // read one char at a time so that we don't
+                // end up having a immutable string holding the
+                // secret in memory.
+                //
+                const int CharactersToRead = 1;
+                Span<char> inputBuffer = stackalloc char[CharactersToRead + 1];
+
                 while (true)
                 {
-                    //
-                    // read one char at a time so that we don't
-                    // end up having a immutable string holding the
-                    // secret in memory.
-                    //
 #if UNIX
                     ConsoleKeyInfo keyInfo = Console.ReadKey(true);
 #else
-                    const int CharactersToRead = 1;
-#pragma warning disable CA2014
-                    Span<char> inputBuffer = stackalloc char[CharactersToRead + 1];
-#pragma warning restore CA2014
                     string key = ConsoleControl.ReadConsole(handle, initialContentLength: 0, inputBuffer, charactersToRead: CharactersToRead, endOnTab: false, out _);
 #endif
 
@@ -547,7 +578,7 @@ private static bool shouldUnsetMode(
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         internal void WriteToConsole(char c, bool transcribeResult)
         {
-            ReadOnlySpan<char> value = stackalloc char[1] { c };
+            ReadOnlySpan<char> value = [c];
             WriteToConsole(value, transcribeResult);
         }
 
@@ -678,9 +709,14 @@ private void WriteLineToConsole()
         /// </exception>
         public override void Write(string value)
         {
-            WriteImpl(value, newLine: false);
+            lock (_instanceLock)
+            {
+                WriteImpl(value, newLine: false);
+            }
         }
 
+        // The WriteImpl() method should always be called within a lock on _instanceLock
+        // to ensure thread safety and prevent issues in multi-threaded scenarios.
         private void WriteImpl(string value, bool newLine)
         {
             if (string.IsNullOrEmpty(value) && !newLine)
@@ -702,7 +738,7 @@ private void WriteImpl(string value, bool newLine)
             }
 
             TextWriter writer = Console.IsOutputRedirected ? Console.Out : _parent.ConsoleTextWriter;
-            value = Utils.GetOutputString(value, isHost: true, SupportsVirtualTerminal, Console.IsOutputRedirected);
+            value = GetOutputString(value, SupportsVirtualTerminal);
 
             if (_parent.IsRunningAsync)
             {
@@ -814,7 +850,10 @@ private void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, s
         /// </exception>
         public override void WriteLine(string value)
         {
-            this.WriteImpl(value, newLine: true);
+            lock (_instanceLock)
+            {
+                this.WriteImpl(value, newLine: true);
+            }
         }
 
         /// <summary>
@@ -831,7 +870,10 @@ public override void WriteLine(string value)
         /// </exception>
         public override void WriteLine()
         {
-            this.WriteImpl(Environment.NewLine, newLine: false);
+            lock (_instanceLock)
+            {
+                this.WriteImpl(Environment.NewLine, newLine: false);
+            }
         }
 
         #region Word Wrapping
@@ -931,7 +973,7 @@ internal List<string> WrapText(string text, int maxWidthInBufferCells)
                     int w = maxWidthInBufferCells - cellCounter;
                     Dbg.Assert(w < e.Current.CellCount, "width remaining should be less than size of word");
 
-                    line.Append(e.Current.Text.Substring(0, w));
+                    line.Append(e.Current.Text.AsSpan(0, w));
 
                     l = line.ToString();
                     Dbg.Assert(RawUI.LengthInBufferCells(l) == maxWidthInBufferCells, "line should exactly fit");
@@ -1175,10 +1217,6 @@ internal string WrapToCurrentWindowWidth(string text)
         /// </exception>
         public override void WriteDebugLine(string message)
         {
-            // don't lock here as WriteLine is already protected.
-            bool unused;
-            message = HostUtilities.RemoveGuidFromMessage(message, out unused);
-
             // We should write debug to error stream only if debug is redirected.)
             if (_parent.ErrorFormat == Serialization.DataFormat.XML)
             {
@@ -1186,9 +1224,9 @@ public override void WriteDebugLine(string message)
             }
             else
             {
-                if (SupportsVirtualTerminal && ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+                if (SupportsVirtualTerminal)
                 {
-                    WriteLine(Utils.GetFormatStyleString(Utils.FormatStyle.Debug) + StringUtil.Format(ConsoleHostUserInterfaceStrings.DebugFormatString, message) + PSStyle.Instance.Reset);
+                    WriteLine(GetFormatStyleString(FormatStyle.Debug) + StringUtil.Format(ConsoleHostUserInterfaceStrings.DebugFormatString, message) + PSStyle.Instance.Reset);
                 }
                 else
                 {
@@ -1236,10 +1274,6 @@ public override void WriteInformation(InformationRecord record)
         /// </exception>
         public override void WriteVerboseLine(string message)
         {
-            // don't lock here as WriteLine is already protected.
-            bool unused;
-            message = HostUtilities.RemoveGuidFromMessage(message, out unused);
-
             // NTRAID#Windows OS Bugs-1061752-2004/12/15-sburns should read a skin setting here...)
             if (_parent.ErrorFormat == Serialization.DataFormat.XML)
             {
@@ -1247,9 +1281,9 @@ public override void WriteVerboseLine(string message)
             }
             else
             {
-                if (SupportsVirtualTerminal && ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+                if (SupportsVirtualTerminal)
                 {
-                    WriteLine(Utils.GetFormatStyleString(Utils.FormatStyle.Verbose) + StringUtil.Format(ConsoleHostUserInterfaceStrings.VerboseFormatString, message) + PSStyle.Instance.Reset);
+                    WriteLine(GetFormatStyleString(FormatStyle.Verbose) + StringUtil.Format(ConsoleHostUserInterfaceStrings.VerboseFormatString, message) + PSStyle.Instance.Reset);
                 }
                 else
                 {
@@ -1280,10 +1314,6 @@ public override void WriteVerboseLine(string message)
         /// </exception>
         public override void WriteWarningLine(string message)
         {
-            // don't lock here as WriteLine is already protected.
-            bool unused;
-            message = HostUtilities.RemoveGuidFromMessage(message, out unused);
-
             // NTRAID#Windows OS Bugs-1061752-2004/12/15-sburns should read a skin setting here...)
             if (_parent.ErrorFormat == Serialization.DataFormat.XML)
             {
@@ -1291,9 +1321,9 @@ public override void WriteWarningLine(string message)
             }
             else
             {
-                if (SupportsVirtualTerminal && ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+                if (SupportsVirtualTerminal)
                 {
-                    WriteLine(Utils.GetFormatStyleString(Utils.FormatStyle.Warning) + StringUtil.Format(ConsoleHostUserInterfaceStrings.WarningFormatString, message) + PSStyle.Instance.Reset);
+                    WriteLine(GetFormatStyleString(FormatStyle.Warning) + StringUtil.Format(ConsoleHostUserInterfaceStrings.WarningFormatString, message) + PSStyle.Instance.Reset);
                 }
                 else
                 {
@@ -1308,24 +1338,10 @@ public override void WriteWarningLine(string message)
         /// <summary>
         /// Invoked by CommandBase.WriteProgress to display a progress record.
         /// </summary>
-        public override void WriteProgress(Int64 sourceId, ProgressRecord record)
+        public override void WriteProgress(long sourceId, ProgressRecord record)
         {
             Dbg.Assert(record != null, "WriteProgress called with null ProgressRecord");
 
-            if (Console.IsOutputRedirected)
-            {
-                // Do not write progress bar when the stdout is redirected.
-                return;
-            }
-
-            bool matchPattern;
-            string currentOperation = HostUtilities.RemoveIdentifierInfoFromMessage(record.CurrentOperation, out matchPattern);
-            if (matchPattern)
-            {
-                record = new ProgressRecord(record) { CurrentOperation = currentOperation };
-            }
-
-            // We allow only one thread at a time to update the progress state.)
             if (_parent.ErrorFormat == Serialization.DataFormat.XML)
             {
                 PSObject obj = new PSObject();
@@ -1333,8 +1349,14 @@ public override void WriteProgress(Int64 sourceId, ProgressRecord record)
                 obj.Properties.Add(new PSNoteProperty("Record", record));
                 _parent.ErrorSerializer.Serialize(obj, "progress");
             }
+            else if (Console.IsOutputRedirected)
+            {
+                // Do not write progress bar when the stdout is redirected.
+                return;
+            }
             else
             {
+                // We allow only one thread at a time to update the progress state.)
                 lock (_instanceLock)
                 {
                     HandleIncomingProgressRecord(sourceId, record);
@@ -1363,7 +1385,7 @@ public override void WriteErrorLine(string value)
             {
                 if (writer == _parent.ConsoleTextWriter)
                 {
-                    if (SupportsVirtualTerminal && ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+                    if (SupportsVirtualTerminal)
                     {
                         WriteLine(value);
                     }
@@ -1374,6 +1396,7 @@ public override void WriteErrorLine(string value)
                 }
                 else
                 {
+                    value = GetOutputString(value, SupportsVirtualTerminal);
                     Console.Error.WriteLine(value);
                 }
             }
@@ -1463,7 +1486,10 @@ internal string ReadLine(bool endOnTab, string initialContent, out ReadLineResul
             result = ReadLineResult.endedOnEnter;
 
             // If the test hook is set, read from it.
-            if (s_h != null) return s_h.ReadLine();
+            if (s_h != null)
+            {
+                return s_h.ReadLine();
+            }
 
             string restOfLine = null;
 
@@ -1508,14 +1534,21 @@ private string ReadLineFromFile(string initialContent)
                 }
 
                 var c = unchecked((char)inC);
-                if (!NoPrompt) Console.Out.Write(c);
+                if (!NoPrompt)
+                {
+                    Console.Out.Write(c);
+                }
 
                 if (c == '\r')
                 {
                     // Treat as newline, but consume \n if there is one.
                     if (consoleIn.Peek() == '\n')
                     {
-                        if (!NoPrompt) Console.Out.Write('\n');
+                        if (!NoPrompt)
+                        {
+                            Console.Out.Write('\n');
+                        }
+
                         consoleIn.Read();
                     }
 
@@ -1882,22 +1915,24 @@ private char GetCharacterUnderCursor(Coordinates cursorPosition)
 #endif
 
         /// <summary>
-        /// Strip nulls from a string...
+        /// Strip nulls from a string.
         /// </summary>
         /// <param name="input">The string to process.</param>
-        /// <returns>The string with any \0 characters removed...</returns>
+        /// <returns>The string with any '\0' characters removed.</returns>
         private static string RemoveNulls(string input)
         {
-            if (input.Contains('\0'))
+            if (!input.Contains('\0'))
             {
                 return input;
             }
 
-            StringBuilder sb = new StringBuilder();
+            StringBuilder sb = new StringBuilder(input.Length);
             foreach (char c in input)
             {
                 if (c != '\0')
+                {
                     sb.Append(c);
+                }
             }
 
             return sb.ToString();
@@ -1989,8 +2024,7 @@ internal string ReadLineWithTabCompletion(Executor exec)
                     var completionResult = commandCompletion.GetNextResult(rlResult == ReadLineResult.endedOnTab);
                     if (completionResult != null)
                     {
-                        completedInput = completionInput.Substring(0, commandCompletion.ReplacementIndex)
-                                         + completionResult.CompletionText;
+                        completedInput = string.Concat(completionInput.AsSpan(0, commandCompletion.ReplacementIndex), completionResult.CompletionText);
                     }
                     else
                     {
@@ -2087,20 +2121,20 @@ private static void SendLeftArrows(int length)
             for (int i = 0; i < length; i++)
             {
                 var down = new ConsoleControl.INPUT();
-                down.Type = (UInt32)ConsoleControl.InputType.Keyboard;
+                down.Type = (uint)ConsoleControl.InputType.Keyboard;
                 down.Data.Keyboard = new ConsoleControl.KeyboardInput();
-                down.Data.Keyboard.Vk = (UInt16)ConsoleControl.VirtualKeyCode.Left;
+                down.Data.Keyboard.Vk = (ushort)ConsoleControl.VirtualKeyCode.Left;
                 down.Data.Keyboard.Scan = 0;
                 down.Data.Keyboard.Flags = 0;
                 down.Data.Keyboard.Time = 0;
                 down.Data.Keyboard.ExtraInfo = IntPtr.Zero;
 
                 var up = new ConsoleControl.INPUT();
-                up.Type = (UInt32)ConsoleControl.InputType.Keyboard;
+                up.Type = (uint)ConsoleControl.InputType.Keyboard;
                 up.Data.Keyboard = new ConsoleControl.KeyboardInput();
-                up.Data.Keyboard.Vk = (UInt16)ConsoleControl.VirtualKeyCode.Left;
+                up.Data.Keyboard.Vk = (ushort)ConsoleControl.VirtualKeyCode.Left;
                 up.Data.Keyboard.Scan = 0;
-                up.Data.Keyboard.Flags = (UInt32)ConsoleControl.KeyboardFlag.KeyUp;
+                up.Data.Keyboard.Flags = (uint)ConsoleControl.KeyboardFlag.KeyUp;
                 up.Data.Keyboard.Time = 0;
                 up.Data.Keyboard.ExtraInfo = IntPtr.Zero;
 
@@ -2228,7 +2262,7 @@ internal void HandleThrowOnReadAndPrompt()
         private readonly ConsoleHostRawUserInterface _rawui;
         private readonly ConsoleHost _parent;
 
-        [TraceSourceAttribute("ConsoleHostUserInterface", "Console host's subclass of S.M.A.Host.Console")]
+        [TraceSource("ConsoleHostUserInterface", "Console host's subclass of S.M.A.Host.Console")]
         private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("ConsoleHostUserInterface", "Console host's subclass of S.M.A.Host.Console");
     }
 }   // namespace
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs
index 406c36c8a00..1c9d37ea9fb 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfaceProgress.cs
@@ -3,6 +3,7 @@
 
 using System;
 using System.Management.Automation;
+using System.Management.Automation.Host;
 using System.Threading;
 
 using Dbg = System.Management.Automation.Diagnostics;
@@ -10,7 +11,7 @@
 namespace Microsoft.PowerShell
 {
     internal partial
-    class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInterface
+    class ConsoleHostUserInterface : PSHostUserInterface
     {
         /// <summary>
         /// Called at the end of a prompt loop to take down any progress display that might have appeared and purge any
@@ -48,7 +49,7 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
 
                 _pendingProgress = null;
 
-                if (ExperimentalFeature.IsEnabled(ExperimentalFeature.PSAnsiProgressFeatureName) && PSStyle.Instance.Progress.UseOSCIndicator)
+                if (SupportsVirtualTerminal && !PSHost.IsStdOutputRedirected && PSStyle.Instance.Progress.UseOSCIndicator)
                 {
                     // OSC sequence to turn off progress indicator
                     // https://github.com/microsoft/terminal/issues/6700
@@ -63,7 +64,7 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
         /// </summary>
         private
         void
-        HandleIncomingProgressRecord(Int64 sourceId, ProgressRecord record)
+        HandleIncomingProgressRecord(long sourceId, ProgressRecord record)
         {
             Dbg.Assert(record != null, "record should not be null");
 
@@ -99,7 +100,7 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
             {
                 // Update the progress pane only when the timer set up the update flag or WriteProgress is completed.
                 // As a result, we do not block WriteProgress and whole script and eliminate unnecessary console locks and updates.
-                if (ExperimentalFeature.IsEnabled(ExperimentalFeature.PSAnsiProgressFeatureName) && PSStyle.Instance.Progress.UseOSCIndicator)
+                if (SupportsVirtualTerminal && !PSHost.IsStdOutputRedirected && PSStyle.Instance.Progress.UseOSCIndicator)
                 {
                     int percentComplete = record.PercentComplete;
                     if (percentComplete < 0)
@@ -114,6 +115,12 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
                     Console.Write($"\x1b]9;4;1;{percentComplete}\x1b\\");
                 }
 
+                // If VT is not supported, we change ProgressView to classic
+                if (!SupportsVirtualTerminal)
+                {
+                    PSStyle.Instance.Progress.View = ProgressView.Classic;
+                }
+
                 _progPane.Show(_pendingProgress);
             }
         }
@@ -132,20 +139,14 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
         void
         PreWrite()
         {
-            if (_progPane != null)
-            {
-                _progPane.Hide();
-            }
+            _progPane?.Hide();
         }
 
         private
         void
         PostWrite()
         {
-            if (_progPane != null)
-            {
-                _progPane.Show();
-            }
+            _progPane?.Show();
         }
 
         private
@@ -171,20 +172,14 @@ class ConsoleHostUserInterface : System.Management.Automation.Host.PSHostUserInt
         void
         PreRead()
         {
-            if (_progPane != null)
-            {
-                _progPane.Hide();
-            }
+            _progPane?.Hide();
         }
 
         private
         void
         PostRead()
         {
-            if (_progPane != null)
-            {
-                _progPane.Show();
-            }
+            _progPane?.Show();
         }
 
         private
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePrompt.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePrompt.cs
index 6d7caefec36..5895dcf2b83 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePrompt.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePrompt.cs
@@ -140,7 +140,7 @@ public override
                     {
                         throw PSTraceSource.NewArgumentException(nameof(descriptions),
                             ConsoleHostUserInterfaceStrings.NullErrorTemplate,
-                            string.Format(CultureInfo.InvariantCulture, "descriptions[{0}]", descIndex));
+                            string.Create(CultureInfo.InvariantCulture, $"descriptions[{descIndex}]"));
                     }
 
                     PSObject inputPSObject = null;
@@ -152,7 +152,7 @@ public override
                     if (string.IsNullOrEmpty(desc.ParameterAssemblyFullName))
                     {
                         string paramName =
-                            string.Format(CultureInfo.InvariantCulture, "descriptions[{0}].AssemblyFullName", descIndex);
+                            string.Create(CultureInfo.InvariantCulture, $"descriptions[{descIndex}].AssemblyFullName");
                         throw PSTraceSource.NewArgumentException(paramName, ConsoleHostUserInterfaceStrings.NullOrEmptyErrorTemplate, paramName);
                     }
 
@@ -190,8 +190,7 @@ public override
                             {
                                 string msg = StringUtil.Format(ConsoleHostUserInterfaceStrings.RankZeroArrayErrorTemplate, desc.Name);
                                 ArgumentException innerException = PSTraceSource.NewArgumentException(
-                                    string.Format(CultureInfo.InvariantCulture,
-                                    "descriptions[{0}].AssemblyFullName", descIndex));
+                                    string.Create(CultureInfo.InvariantCulture, $"descriptions[{descIndex}].AssemblyFullName"));
                                 PromptingException e = new PromptingException(msg, innerException, "ZeroRankArray", ErrorCategory.InvalidOperation);
                                 throw e;
                             }
@@ -203,8 +202,7 @@ public override
 
                         while (true)
                         {
-                            fieldPromptList.Append(
-                                string.Format(CultureInfo.InvariantCulture, "{0}]: ", inputList.Count));
+                            fieldPromptList.Append(CultureInfo.InvariantCulture, $"{inputList.Count}]: ");
                             bool endListInput = false;
                             object convertedObj = null;
                             _ = PromptForSingleItem(
@@ -356,7 +354,7 @@ out object convertedObj
         /// <param name="fieldEchoOnPrompt">True to echo user input.</param>
         /// <param name="listInput">True if the field is a list.</param>
         /// <param name="endListInput">Valid only if listInput is true. set to true if the input signals end of list input.</param>
-        /// <param name="cancelled">True iff the input is canceled, e.g., by Ctrl-C or Ctrl-Break.</param>
+        /// <param name="cancelled">True if-and-only-if the input is canceled, e.g., by Ctrl-C or Ctrl-Break.</param>
         /// <returns>Processed input string to be converted with LanguagePrimitives.ConvertTo.</returns>
         private string PromptReadInput(string fieldPrompt, FieldDescription desc, bool fieldEchoOnPrompt,
                         bool listInput, out bool endListInput, out bool cancelled)
@@ -486,7 +484,7 @@ private PromptCommonInputErrors PromptTryConvertTo(Type fieldType, bool isFromRe
         /// !h  prints out field's Quick Help, returns null
         /// All others tilde comments are invalid and return null
         ///
-        /// returns null iff there's nothing the caller can process.
+        /// returns null if-and-only-if there's nothing the caller can process.
         /// </summary>
         /// <param name="input"></param>
         /// <param name="desc"></param>
@@ -495,7 +493,7 @@ private PromptCommonInputErrors PromptTryConvertTo(Type fieldType, bool isFromRe
         private string PromptCommandMode(string input, FieldDescription desc, out bool inputDone)
         {
             Dbg.Assert(input != null && input.StartsWith(PromptCommandPrefix, StringComparison.OrdinalIgnoreCase),
-                string.Format(CultureInfo.InvariantCulture, "input should start with {0}", PromptCommandPrefix));
+                string.Create(CultureInfo.InvariantCulture, $"input should start with {PromptCommandPrefix}"));
             Dbg.Assert(desc != null, "desc should never be null when PromptCommandMode is called");
             string command = input.Substring(1);
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePromptForChoice.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePromptForChoice.cs
index 872aaa19a9c..7e3dcfd70e0 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePromptForChoice.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHostUserInterfacePromptForChoice.cs
@@ -345,8 +345,7 @@ private void WriteChoicePrompt(string[,] hotkeysAndPlainLabels,
                         defaultStr = hotkeysAndPlainLabels[1, defaultChoice];
                     }
 
-                    defaultChoicesBuilder.Append(string.Format(CultureInfo.InvariantCulture,
-                        "{0}{1}", prepend, defaultStr));
+                    defaultChoicesBuilder.Append(CultureInfo.InvariantCulture, $"{prepend}{defaultStr}");
                     prepend = ",";
                 }
 
@@ -427,7 +426,7 @@ private void ShowChoiceHelp(Collection<ChoiceDescription> choices, string[,] hot
 
                 WriteLineToConsole(
                     WrapToCurrentWindowWidth(
-                        string.Format(CultureInfo.InvariantCulture, "{0} - {1}", s, choices[i].HelpMessage)));
+                        string.Create(CultureInfo.InvariantCulture, $"{s} - {choices[i].HelpMessage}")));
             }
         }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleShell.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleShell.cs
index 11dd276a52d..ce5d5ecaef4 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleShell.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleShell.cs
@@ -9,8 +9,8 @@
 namespace Microsoft.PowerShell
 {
     /// <summary>
-    /// This class provides an entry point which is called by minishell's main
-    /// to transfer control to Msh console host implementation.
+    /// This class provides an entry point which is called
+    /// to transfer control to console host implementation.
     /// </summary>
     public static class ConsoleShell
     {
@@ -21,7 +21,12 @@ public static class ConsoleShell
         /// <returns>An integer value which should be used as exit code for the process.</returns>
         public static int Start(string? bannerText, string? helpText, string[] args)
         {
-            return Start(InitialSessionState.CreateDefault2(), bannerText, helpText, args);
+            return StartImpl(
+                initialSessionState: InitialSessionState.CreateDefault2(),
+                bannerText,
+                helpText,
+                args,
+                issProvided: false);
         }
 
         /// <summary>Entry point in to ConsoleShell. Used to create a custom Powershell console application.</summary>
@@ -31,6 +36,31 @@ public static int Start(string? bannerText, string? helpText, string[] args)
         /// <param name="args">Commandline parameters specified by user.</param>
         /// <returns>An integer value which should be used as exit code for the process.</returns>
         public static int Start(InitialSessionState initialSessionState, string? bannerText, string? helpText, string[] args)
+        {
+            return StartImpl(
+                initialSessionState,
+                bannerText,
+                helpText,
+                args,
+                issProvided: true);
+        }
+
+        /// <summary>
+        /// Implementation of entry point to ConsoleShell.
+        /// Used to create a custom Powershell console application.
+        /// </summary>
+        /// <param name="initialSessionState">InitialSessionState to be used by the ConsoleHost.</param>
+        /// <param name="bannerText">Banner text to be displayed by ConsoleHost.</param>
+        /// <param name="helpText">Help text for the shell.</param>
+        /// <param name="args">Commandline parameters specified by user.</param>
+        /// <param name="issProvided">True when the InitialSessionState object is provided by caller.</param>
+        /// <returns>An integer value which should be used as exit code for the process.</returns>
+        private static int StartImpl(
+            InitialSessionState initialSessionState,
+            string? bannerText,
+            string? helpText,
+            string[] args,
+            bool issProvided)
         {
             if (initialSessionState == null)
             {
@@ -45,7 +75,7 @@ public static int Start(InitialSessionState initialSessionState, string? bannerT
             ConsoleHost.ParseCommandLine(args);
             ConsoleHost.DefaultInitialSessionState = initialSessionState;
 
-            return ConsoleHost.Start(bannerText, helpText);
+            return ConsoleHost.Start(bannerText, helpText, issProvided);
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleTextWriter.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleTextWriter.cs
index 97a02cb7123..a82156ce1c8 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleTextWriter.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleTextWriter.cs
@@ -76,8 +76,8 @@ public override
         void
         Write(char c)
         {
-            ReadOnlySpan<char> c1 = stackalloc char[1] { c };
-            _ui.WriteToConsole(c1, transcribeResult: true);
+            ReadOnlySpan<char> value = [c];
+            _ui.WriteToConsole(value, transcribeResult: true);
         }
 
         public override
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs
index 68df51be539..354c61fb8f3 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Executor.cs
@@ -13,11 +13,11 @@
 namespace Microsoft.PowerShell
 {
     /// <summary>
-    /// Executor wraps a Pipeline instance, and provides helper methods for executing commands in that pipeline.  It is used to
+    /// Executor wraps a Pipeline instance, and provides helper methods for executing commands in that pipeline. It is used to
     /// provide bookkeeping and structure to the use of pipeline in such a way that they can be interrupted and cancelled by a
-    /// break event handler, and track nesting of pipelines (which happens with interrupted input loops (aka subshells) and use
-    /// of tab-completion in prompts.  The bookkeeping is necessary because the break handler is static and global, and there is
-    /// no means for tying a break handler to an instance of an object.
+    /// break event handler, and to track nesting of pipelines (which happens with interrupted input loops (aka subshells) and
+    /// use of tab-completion in prompts). The bookkeeping is necessary because the break handler is static and global, and
+    /// there is no means for tying a break handler to an instance of an object.
     ///
     /// The class' instance methods manage a single pipeline.  The class' static methods track the outstanding instances to
     /// ensure that only one instance is 'active' (and therefore cancellable) at a time.
@@ -44,8 +44,8 @@ internal enum ExecutionOptions
         /// </param>
         /// <param name="isPromptFunctionExecutor">
         /// True if the instance will be used to execute the prompt function, which will delay stopping the pipeline by some
-        /// milliseconds.  This we prevent us from stopping the pipeline so quickly that when the user leans on the ctrl-c key
-        /// that the prompt "stops working" (because it is being stopped faster than it can run to completion).
+        /// milliseconds.  This will prevent us from stopping the pipeline so quickly that, when the user leans on the ctrl-c
+        /// key, the prompt "stops working" (because it is being stopped faster than it can run to completion).
         /// </param>
         internal Executor(ConsoleHost parent, bool useNestedPipelines, bool isPromptFunctionExecutor)
         {
@@ -67,7 +67,7 @@ private void OutputObjectStreamHandler(object sender, EventArgs e)
 
             PipelineReader<PSObject> reader = (PipelineReader<PSObject>)sender;
 
-            // we use NonBlockingRead instead of Read, as Read would block if the reader has no objects.  While it would be
+            // We use NonBlockingRead instead of Read, as Read would block if the reader has no objects.  While it would be
             // inconsistent for this method to be called when there are no objects, since it will be called synchronously on
             // the pipeline thread, blocking in this call until an object is streamed would deadlock the pipeline. So we
             // prefer to take no chance of blocking.
@@ -80,7 +80,6 @@ private void OutputObjectStreamHandler(object sender, EventArgs e)
         }
 
         // called on the pipeline thread
-
         private void ErrorObjectStreamHandler(object sender, EventArgs e)
         {
             // e is just an empty instance of EventArgs, so we ignore it. sender is the PipelineReader that raised it's
@@ -88,7 +87,7 @@ private void ErrorObjectStreamHandler(object sender, EventArgs e)
 
             PipelineReader<object> reader = (PipelineReader<object>)sender;
 
-            // we use NonBlockingRead instead of Read, as Read would block if the reader has no objects.  While it would be
+            // We use NonBlockingRead instead of Read, as Read would block if the reader has no objects.  While it would be
             // inconsistent for this method to be called when there are no objects, since it will be called synchronously on
             // the pipeline thread, blocking in this call until an object is streamed would deadlock the pipeline. So we
             // prefer to take no chance of blocking.
@@ -101,30 +100,26 @@ private void ErrorObjectStreamHandler(object sender, EventArgs e)
         }
 
         /// <summary>
-        /// This method handles the failure in executing pipeline asynchronously.
+        /// This method handles failures in executing the pipeline asynchronously.
         /// </summary>
         /// <param name="ex"></param>
         private void AsyncPipelineFailureHandler(Exception ex)
         {
             ErrorRecord er = null;
-            IContainsErrorRecord cer = ex as IContainsErrorRecord;
-            if (cer != null)
+            if (ex is IContainsErrorRecord cer)
             {
                 er = cer.ErrorRecord;
-                // Exception inside the error record is ParentContainsErrorRecordException which
-                // doesn't have stack trace. Replace it with top level exception.
+                // The exception inside the error record is ParentContainsErrorRecordException, which
+                // doesn't have a stack trace. Replace it with the top level exception.
                 er = new ErrorRecord(er, ex);
             }
 
-            if (er == null)
-            {
-                er = new ErrorRecord(ex, "ConsoleHostAsyncPipelineFailure", ErrorCategory.NotSpecified, null);
-            }
+            er ??= new ErrorRecord(ex, "ConsoleHostAsyncPipelineFailure", ErrorCategory.NotSpecified, null);
 
             _parent.ErrorSerializer.Serialize(er);
         }
 
-        private class PipelineFinishedWaitHandle
+        private sealed class PipelineFinishedWaitHandle
         {
             internal PipelineFinishedWaitHandle(Pipeline p)
             {
@@ -232,9 +227,9 @@ internal void ExecuteCommandAsyncHelper(Pipeline tempPipeline, out Exception exc
                         }
                         catch (PipelineClosedException)
                         {
-                            // This exception can occurs when input is closed. This can happen
-                            // for various reasons. For ex:Command in the pipeline is invalid and
-                            // command discovery throws exception which closes the pipeline and
+                            // This Exception can occur when the input is closed. This can happen
+                            // for various reasons. For example: The command in the pipeline is invalid and
+                            // command discovery throws an exception, which closes the pipeline and
                             // hence the Input pipe.
                             break;
                         }
@@ -297,46 +292,30 @@ internal Pipeline CreatePipeline(string command, bool addToHistory)
 
         /// <summary>
         /// All calls to the Runspace to execute a command line must be done with this function, which properly synchronizes
-        /// access to the running pipeline between the main thread and the break handler thread.  This synchronization is
+        /// access to the running pipeline between the main thread and the break handler thread. This synchronization is
         /// necessary so that executions can be aborted with Ctrl-C (including evaluation of the prompt and collection of
-        /// command-completion candidates.
+        /// command-completion candidates).
         ///
         /// On any given Executor instance, ExecuteCommand should be called at most once at a time by any one thread. It is NOT
         /// reentrant.
         /// </summary>
         /// <param name="command">
-        /// The command line to be executed.  Must be non-null.
+        /// The command line to be executed. Must be non-null.
         /// </param>
         /// <param name="exceptionThrown">
         /// Receives the Exception thrown by the execution of the command, if any. If no exception is thrown, then set to null.
         /// Can be tested to see if the execution was successful or not.
         /// </param>
         /// <param name="options">
-        /// options to govern the execution
+        /// Options to govern the execution
         /// </param>
         /// <returns>
-        /// the object stream resulting from the execution.  May be null.
+        /// The object stream resulting from the execution. May be null.
         /// </returns>
         internal Collection<PSObject> ExecuteCommand(string command, out Exception exceptionThrown, ExecutionOptions options)
         {
             Dbg.Assert(!string.IsNullOrEmpty(command), "command should have a value");
 
-            // Experimental:
-            // Check for implicit remoting commands that can be batched, and execute as batched if able.
-            if (ExperimentalFeature.IsEnabled("PSImplicitRemotingBatching"))
-            {
-                var addOutputter = ((options & ExecutionOptions.AddOutputter) > 0);
-                if (addOutputter &&
-                    !_parent.RunspaceRef.IsRunspaceOverridden &&
-                    _parent.RunspaceRef.Runspace.ExecutionContext.Modules != null &&
-                    _parent.RunspaceRef.Runspace.ExecutionContext.Modules.IsImplicitRemotingModuleLoaded &&
-                    Utils.TryRunAsImplicitBatch(command, _parent.RunspaceRef.Runspace))
-                {
-                    exceptionThrown = null;
-                    return null;
-                }
-            }
-
             Pipeline tempPipeline = CreatePipeline(command, (options & ExecutionOptions.AddToHistory) > 0);
 
             return ExecuteCommandHelper(tempPipeline, out exceptionThrown, options);
@@ -461,14 +440,14 @@ internal Collection<PSObject> ExecuteCommand(string command)
         }
 
         /// <summary>
-        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a string.  Any Exception
-        /// thrown in the course of execution is returned thru the exceptionThrown parameter.
+        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a string. Any Exception
+        /// thrown in the course of execution is returned through the exceptionThrown parameter.
         /// </summary>
         /// <param name="command">
-        /// The command to execute.  May be any valid monad command.
+        /// The command to execute. May be any valid monad command.
         /// </param>
         /// <param name="exceptionThrown">
-        /// Receives the Exception thrown by the execution of the command, if any. If no exception is thrown, then set to null.
+        /// Receives the Exception thrown by the execution of the command, if any. Set to null if no exception is thrown.
         /// Can be tested to see if the execution was successful or not.
         /// </param>
         /// <returns>
@@ -502,8 +481,7 @@ internal string ExecuteCommandAndGetResultAsString(string command, out Exception
                 // And convert the base object into a string. We can't use the proxied
                 // ToString() on the PSObject because there is no default runspace
                 // available.
-                PSObject msho = streamResults[0] as PSObject;
-                if (msho != null)
+                if (streamResults[0] is PSObject msho)
                     result = msho.BaseObject.ToString();
                 else
                     result = streamResults[0].ToString();
@@ -514,11 +492,11 @@ internal string ExecuteCommandAndGetResultAsString(string command, out Exception
         }
 
         /// <summary>
-        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a bool.  Any Exception
+        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a bool. Any Exception
         /// thrown in the course of execution is caught and ignored.
         /// </summary>
         /// <param name="command">
-        /// The command to execute.  May be any valid monad command.
+        /// The command to execute. May be any valid monad command.
         /// </param>
         /// <returns>
         /// The Nullable`bool representation of the first result object returned, or null if an exception was thrown or no
@@ -526,22 +504,20 @@ internal string ExecuteCommandAndGetResultAsString(string command, out Exception
         /// </returns>
         internal bool? ExecuteCommandAndGetResultAsBool(string command)
         {
-            Exception unused = null;
-
-            bool? result = ExecuteCommandAndGetResultAsBool(command, out unused);
+            bool? result = ExecuteCommandAndGetResultAsBool(command, out _);
 
             return result;
         }
 
         /// <summary>
-        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a bool.  Any Exception
-        /// thrown in the course of execution is returned thru the exceptionThrown parameter.
+        /// Executes a command (by calling this.ExecuteCommand), and coerces the first result object to a bool. Any Exception
+        /// thrown in the course of execution is returned through the exceptionThrown parameter.
         /// </summary>
         /// <param name="command">
-        /// The command to execute.  May be any valid monad command.
+        /// The command to execute. May be any valid monad command.
         /// </param>
         /// <param name="exceptionThrown">
-        /// Receives the Exception thrown by the execution of the command, if any. If no exception is thrown, then set to null.
+        /// Receives the Exception thrown by the execution of the command, if any. Set to null if no exception is thrown.
         /// Can be tested to see if the execution was successful or not.
         /// </param>
         /// <returns>
@@ -580,7 +556,7 @@ internal string ExecuteCommandAndGetResultAsString(string command, out Exception
         }
 
         /// <summary>
-        /// Cancels execution of the current instance.  If the current instance is not running, then does nothing.  Called in
+        /// Cancels execution of the current instance. Does nothing if the current instance is not running. Called in
         /// response to a break handler, by the static Executor.Cancel method.
         /// </summary>
         private void Cancel()
@@ -605,8 +581,7 @@ private void Cancel()
 
         internal void BlockCommandOutput()
         {
-            RemotePipeline remotePipeline = _pipeline as RemotePipeline;
-            if (remotePipeline != null)
+            if (_pipeline is RemotePipeline remotePipeline)
             {
                 // Waits until queued data is handled.
                 remotePipeline.DrainIncomingData();
@@ -619,15 +594,13 @@ internal void BlockCommandOutput()
         internal void ResumeCommandOutput()
         {
             RemotePipeline remotePipeline = _pipeline as RemotePipeline;
-            if (remotePipeline != null)
-            {
-                // Resumes data flow.
-                remotePipeline.ResumeIncomingData();
-            }
+
+            // Resumes data flow.
+            remotePipeline?.ResumeIncomingData();
         }
 
         /// <summary>
-        /// Resets the instance to its post-ctor state.  Does not cancel execution.
+        /// Resets the instance to its post-ctor state. Does not cancel execution.
         /// </summary>
         private void Reset()
         {
@@ -643,7 +616,7 @@ private void Reset()
         /// handler is triggered and calls the static Cancel method.
         /// </summary>
         /// <value>
-        /// The instance to make current.  Null is allowed.
+        /// The instance to make current. Null is allowed.
         /// </value>
         /// <remarks>
         /// Here are some state-transition cases to illustrate the use of CurrentExecutor
@@ -705,8 +678,8 @@ internal static Executor CurrentExecutor
         }
 
         /// <summary>
-        /// Cancels the execution of the current instance (the instance last passed to PushCurrentExecutor), if any.  If no
-        /// instance is Current, then does nothing.
+        /// Cancels the execution of the current instance (the instance last passed to PushCurrentExecutor), if any. Does
+        /// nothing if no instance is Current.
         /// </summary>
         internal static void CancelCurrentExecutor()
         {
@@ -717,10 +690,7 @@ internal static void CancelCurrentExecutor()
                 temp = s_currentExecutor;
             }
 
-            if (temp != null)
-            {
-                temp.Cancel();
-            }
+            temp?.Cancel();
         }
 
         // These statics are threadsafe, as there can be only one instance of ConsoleHost in a process at a time, and access
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ManagedEntrance.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ManagedEntrance.cs
index 6dbc21ab242..acfdea07153 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ManagedEntrance.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ManagedEntrance.cs
@@ -16,18 +16,18 @@
 namespace Microsoft.PowerShell
 {
     /// <summary>
-    /// Defines an entry point from unmanaged code to managed Msh.
+    /// Defines an entry point from unmanaged code to PowerShell.
     /// </summary>
     public sealed class UnmanagedPSEntry
     {
         /// <summary>
-        /// Starts managed MSH.
+        /// Starts PowerShell.
         /// </summary>
         /// <param name="consoleFilePath">
-        /// Deprecated: Console file used to create a runspace configuration to start MSH
+        /// Deprecated: Console file used to create a runspace configuration to start PowerShell
         /// </param>
         /// <param name="args">
-        /// Command line arguments to the managed MSH
+        /// Command line arguments to the PowerShell
         /// </param>
         /// <param name="argc">
         /// Length of the passed in argument array.
@@ -39,20 +39,17 @@ public static int Start(string consoleFilePath, [MarshalAs(UnmanagedType.LPArray
         }
 
         /// <summary>
-        /// Starts managed MSH.
+        /// Starts PowerShell.
         /// </summary>
         /// <param name="args">
-        /// Command line arguments to the managed MSH
+        /// Command line arguments to PowerShell
         /// </param>
         /// <param name="argc">
         /// Length of the passed in argument array.
         /// </param>
         public static int Start([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 1)] string[] args, int argc)
         {
-            if (args == null)
-            {
-                throw new ArgumentNullException(nameof(args));
-            }
+            ArgumentNullException.ThrowIfNull(args);
 
 #if DEBUG
             if (args.Length > 0 && !string.IsNullOrEmpty(args[0]) && args[0]!.Equals("-isswait", StringComparison.OrdinalIgnoreCase))
@@ -89,14 +86,17 @@ public static int Start([MarshalAs(UnmanagedType.LPArray, ArraySubType = Unmanag
             int exitCode = 0;
             try
             {
-                var banner = string.Format(
+                string banner = string.Format(
                     CultureInfo.InvariantCulture,
-                    ManagedEntranceStrings.ShellBannerNonWindowsPowerShell,
+                    ManagedEntranceStrings.ShellBannerPowerShell,
                     PSVersionInfo.GitCommitId);
 
                 ConsoleHost.DefaultInitialSessionState = InitialSessionState.CreateDefault2();
 
-                exitCode = ConsoleHost.Start(banner, ManagedEntranceStrings.UsageHelp);
+                exitCode = ConsoleHost.Start(
+                    bannerText: banner,
+                    helpText: ManagedEntranceStrings.UsageHelp,
+                    issProvidedExternally: false);
             }
             catch (HostException e)
             {
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs
index 0c38f35960f..b16fb5ee147 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/PendingProgress.cs
@@ -43,7 +43,7 @@ class PendingProgress
         /// </param>
         internal
         void
-        Update(Int64 sourceId, ProgressRecord record)
+        Update(long sourceId, ProgressRecord record)
         {
             Dbg.Assert(record != null, "record should not be null");
 
@@ -119,10 +119,7 @@ class PendingProgress
                     ProgressNode parentNode = FindNodeById(newNode.SourceId, newNode.ParentActivityId);
                     if (parentNode != null)
                     {
-                        if (parentNode.Children == null)
-                        {
-                            parentNode.Children = new ArrayList();
-                        }
+                        parentNode.Children ??= new ArrayList();
 
                         AddNode(parentNode.Children, newNode);
                         break;
@@ -265,8 +262,7 @@ class PendingProgress
 #endif
         }
 
-        private
-        class FindOldestNodeVisitor : NodeVisitor
+        private sealed class FindOldestNodeVisitor : NodeVisitor
         {
             internal override
             bool
@@ -358,7 +354,7 @@ internal override
         /// </summary>
         private
         ProgressNode
-        FindNodeById(Int64 sourceId, int activityId)
+        FindNodeById(long sourceId, int activityId)
         {
             ArrayList listWhereFound = null;
             int indexWhereFound = -1;
@@ -366,11 +362,10 @@ internal override
                 FindNodeById(sourceId, activityId, out listWhereFound, out indexWhereFound);
         }
 
-        private
-        class FindByIdNodeVisitor : NodeVisitor
+        private sealed class FindByIdNodeVisitor : NodeVisitor
         {
             internal
-            FindByIdNodeVisitor(Int64 sourceIdToFind, int activityIdToFind)
+            FindByIdNodeVisitor(long sourceIdToFind, int activityIdToFind)
             {
                 _sourceIdToFind = sourceIdToFind;
                 _idToFind = activityIdToFind;
@@ -404,7 +399,7 @@ internal override
             IndexWhereFound = -1;
 
             private readonly int _idToFind = -1;
-            private readonly Int64 _sourceIdToFind;
+            private readonly long _sourceIdToFind;
         }
 
         /// <summary>
@@ -428,7 +423,7 @@ internal override
         /// </returns>
         private
         ProgressNode
-        FindNodeById(Int64 sourceId, int activityId, out ArrayList listWhereFound, out int indexWhereFound)
+        FindNodeById(long sourceId, int activityId, out ArrayList listWhereFound, out int indexWhereFound)
         {
             listWhereFound = null;
             indexWhereFound = -1;
@@ -463,9 +458,7 @@ internal override
         /// <returns>
         /// The found node, or null if no suitable node was located.
         /// </returns>
-        private
-        ProgressNode
-        FindOldestNodeOfGivenStyle(ArrayList nodes, int oldestSoFar, ProgressNode.RenderStyle style)
+        private static ProgressNode FindOldestNodeOfGivenStyle(ArrayList nodes, int oldestSoFar, ProgressNode.RenderStyle style)
         {
             if (nodes == null)
             {
@@ -508,8 +501,7 @@ internal override
             return found;
         }
 
-        private
-        class AgeAndResetStyleVisitor : NodeVisitor
+        private sealed class AgeAndResetStyleVisitor : NodeVisitor
         {
             internal override
             bool
@@ -579,7 +571,7 @@ internal override
             int invisible = 0;
             if (TallyHeight(rawUI, maxHeight, maxWidth) > maxHeight)
             {
-                // This will smash down nodes until the tree will fit into the alloted number of lines.  If in the
+                // This will smash down nodes until the tree will fit into the allotted number of lines.  If in the
                 // process some nodes were made invisible, we will add a line to the display to say so.
 
                 invisible = CompressToFit(rawUI, maxHeight, maxWidth);
@@ -637,9 +629,7 @@ internal override
         /// <param name="rawUI">
         /// The PSHostRawUserInterface used to gauge string widths in the rendering.
         /// </param>
-        private
-        void
-        RenderHelper(ArrayList strings, ArrayList nodes, int indentation, int maxWidth, PSHostRawUserInterface rawUI)
+        private static void RenderHelper(ArrayList strings, ArrayList nodes, int indentation, int maxWidth, PSHostRawUserInterface rawUI)
         {
             Dbg.Assert(strings != null, "strings should not be null");
             Dbg.Assert(nodes != null, "nodes should not be null");
@@ -666,8 +656,7 @@ internal override
             }
         }
 
-        private
-        class HeightTallyer : NodeVisitor
+        private sealed class HeightTallyer : NodeVisitor
         {
             internal HeightTallyer(PSHostRawUserInterface rawUi, int maxHeight, int maxWidth)
             {
@@ -728,9 +717,7 @@ private int TallyHeight(PSHostRawUserInterface rawUi, int maxHeight, int maxWidt
         /// <param name="nodes"></param>
         /// <param name="style"></param>
         /// <returns></returns>
-        private
-        bool
-        AllNodesHaveGivenStyle(ArrayList nodes, ProgressNode.RenderStyle style)
+        private static bool AllNodesHaveGivenStyle(ArrayList nodes, ProgressNode.RenderStyle style)
         {
             if (nodes == null)
             {
@@ -855,18 +842,6 @@ internal override
             }
 
             // If we get all the way to here, then we've compressed all the nodes and we still don't fit.
-
-#if DEBUG || ASSERTIONS_TRACE
-
-            Dbg.Assert(
-                nodesCompressed == CountNodes(),
-                "We should have compressed every node in the tree.");
-            Dbg.Assert(
-                AllNodesHaveGivenStyle(_topLevelNodes, newStyle),
-                "We should have compressed every node in the tree.");
-
-#endif
-
             return false;
         }
 
@@ -891,7 +866,7 @@ internal override
         /// <returns>
         /// The number of nodes that were made invisible during the compression.
         ///
-        ///</returns>
+        /// </returns>
         private
         int
         CompressToFit(PSHostRawUserInterface rawUi, int maxHeight, int maxWidth)
@@ -953,8 +928,6 @@ internal override
                 return nodesCompressed;
             }
 
-            Dbg.Assert(false, "with all nodes invisible, we should never reach this point.");
-
             return 0;
         }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs
index ca2694bcabc..01cbd4069c4 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressNode.cs
@@ -54,7 +54,7 @@ namespace Microsoft.PowerShell
         /// Constructs an instance from a ProgressRecord.
         /// </summary>
         internal
-        ProgressNode(Int64 sourceId, ProgressRecord record)
+        ProgressNode(long sourceId, ProgressRecord record)
             : base(record.ActivityId, record.Activity, record.StatusDescription)
         {
             Dbg.Assert(record.RecordType == ProgressRecordType.Processing, "should only create node for Processing records");
@@ -67,7 +67,7 @@ namespace Microsoft.PowerShell
 
             this.Style = IsMinimalProgressRenderingEnabled()
                 ? RenderStyle.Ansi
-                : this.Style = RenderStyle.FullPlus;
+                : RenderStyle.FullPlus;
 
             this.SourceId = sourceId;
         }
@@ -111,7 +111,7 @@ namespace Microsoft.PowerShell
                     RenderMinimal(strCollection, indentation, maxWidth, rawUI);
                     break;
                 case RenderStyle.Ansi:
-                    RenderAnsi(strCollection, indentation, maxWidth);
+                    RenderAnsi(strCollection, indentation, maxWidth, rawUI);
                     break;
                 case RenderStyle.Invisible:
                     // do nothing
@@ -353,7 +353,7 @@ private static void RenderFullDescription(string description, string indent, int
 
         internal static bool IsMinimalProgressRenderingEnabled()
         {
-            return ExperimentalFeature.IsEnabled(ExperimentalFeature.PSAnsiProgressFeatureName) && PSStyle.Instance.Progress.View == ProgressView.Minimal;
+            return PSStyle.Instance.Progress.View == ProgressView.Minimal;
         }
 
         /// <summary>
@@ -368,9 +368,12 @@ internal static bool IsMinimalProgressRenderingEnabled()
         /// <param name="maxWidth">
         /// The maximum number of chars that the rendering is allowed to consume.
         /// </param>
+        /// <param name="rawUI">
+        /// The PSHostRawUserInterface used to gauge string widths in the rendering.
+        /// </param>
         private
         void
-        RenderAnsi(ArrayList strCollection, int indentation, int maxWidth)
+        RenderAnsi(ArrayList strCollection, int indentation, int maxWidth, PSHostRawUserInterface rawUI)
         {
             string indent = StringUtil.Padding(indentation);
             string secRemain = string.Empty;
@@ -387,50 +390,131 @@ internal static bool IsMinimalProgressRenderingEnabled()
                 maxWidth = PSStyle.Instance.Progress.MaxWidth;
             }
 
+            // if the activity is really long, only use up to half the width
+            string activity;
+            int activityDisplayCellsWidth = rawUI.LengthInBufferCells(Activity);
+            if (activityDisplayCellsWidth > maxWidth / 2)
+            {
+                activity = StringUtil.TruncateToBufferCellWidth(rawUI, Activity, (maxWidth / 2) - 1) + PSObjectHelper.Ellipsis;
+            }
+            else
+            {
+                activity = Activity;
+            }
+
+            activityDisplayCellsWidth = rawUI.LengthInBufferCells(activity);
+
             // 4 is for the extra space and square brackets below and one extra space
-            int barWidth = maxWidth - Activity.Length - indentation - 4;
+            int barWidth = maxWidth - activityDisplayCellsWidth - indentation - 4;
 
             var sb = new StringBuilder();
-            int padding = maxWidth + PSStyle.Instance.Progress.Style.Length + PSStyle.Instance.Reverse.Length + PSStyle.Instance.ReverseOff.Length;
             sb.Append(PSStyle.Instance.Reverse);
 
-            if (StatusDescription.Length > barWidth - secRemainLength)
+            // Build the status description part
+            int maxStatusWidth = barWidth - secRemainLength;
+            string statusPart = RenderAnsiStatusPart(rawUI, maxStatusWidth, out int statusPartDisplayWidth);
+
+            sb.Append(statusPart);
+
+            // Calculate padding needed
+            int emptyPadLength = barWidth - statusPartDisplayWidth - secRemainLength;
+            if (emptyPadLength > 0)
             {
-                sb.Append(StatusDescription.Substring(0, barWidth - secRemainLength - 1));
-                sb.Append(PSObjectHelper.Ellipsis);
+                sb.Append(' ', emptyPadLength);
             }
-            else
+
+            sb.Append(secRemain);
+
+            // Insert ReverseOff at the correct position for the progress bar
+            RenderAnsiReverseOff(sb, rawUI, statusPart, barWidth);
+
+            strCollection.Add(
+                StringUtil.Format(
+                    "{0}{1}{2} [{3}]{4}",
+                    indent,
+                    PSStyle.Instance.Progress.Style,
+                    activity,
+                    sb.ToString(),
+                    PSStyle.Instance.Reset));
+        }
+
+        /// <summary>
+        /// Builds the status-description portion of the Ansi progress bar, truncating it
+        /// with an ellipsis when it would exceed the available status width.
+        /// </summary>
+        /// <param name="rawUI">
+        /// The PSHostRawUserInterface used to gauge string widths.
+        /// </param>
+        /// <param name="maxStatusWidth">
+        /// The maximum number of buffer cells available for the status description.
+        /// </param>
+        /// <param name="statusPartDisplayWidth">
+        /// On return, the width in buffer cells of the produced status part.
+        /// </param>
+        /// <returns>The status description, possibly truncated with an ellipsis.</returns>
+        private string RenderAnsiStatusPart(PSHostRawUserInterface rawUI, int maxStatusWidth, out int statusPartDisplayWidth)
+        {
+            int statusDisplayWidth = rawUI.LengthInBufferCells(StatusDescription);
+
+            if (maxStatusWidth <= 0 || statusDisplayWidth <= maxStatusWidth)
             {
-                sb.Append(StatusDescription);
+                statusPartDisplayWidth = statusDisplayWidth;
+                return StatusDescription;
             }
 
-            sb.Append(string.Empty.PadRight(barWidth + PSStyle.Instance.Reverse.Length - sb.Length - secRemainLength));
-            sb.Append(secRemain);
+            int ellipsisWidth = rawUI.LengthInBufferCells(PSObjectHelper.EllipsisStr);
+            string statusPart = StringUtil.TruncateToBufferCellWidth(rawUI, StatusDescription, maxStatusWidth - ellipsisWidth) + PSObjectHelper.EllipsisStr;
+            statusPartDisplayWidth = rawUI.LengthInBufferCells(statusPart);
+            return statusPart;
+        }
 
-            if (PercentComplete > 0 && PercentComplete < 100)
+        /// <summary>
+        /// Appends the ReverseOff VT sequence to the rendered bar at the buffer-cell position
+        /// that corresponds to the filled portion of the progress bar, respecting character boundaries.
+        /// </summary>
+        /// <param name="sb">The StringBuilder holding the bar contents built so far.</param>
+        /// <param name="rawUI">
+        /// The PSHostRawUserInterface used to gauge string widths.
+        /// </param>
+        /// <param name="statusPart">The status text at the start of the bar.</param>
+        /// <param name="barWidth">The total width of the progress bar in buffer cells.</param>
+        private void RenderAnsiReverseOff(StringBuilder sb, PSHostRawUserInterface rawUI, string statusPart, int barWidth)
+        {
+            if (PercentComplete < 0 || PercentComplete >= 100 || barWidth <= 0)
             {
-                int barLength = PercentComplete * barWidth / 100;
-                if (barLength >= barWidth)
-                {
-                    barLength = barWidth - 1;
-                }
+                sb.Append(PSStyle.Instance.ReverseOff);
+                return;
+            }
+
+            int barLength = PercentComplete * barWidth / 100;
+            if (barLength >= barWidth)
+            {
+                barLength = barWidth - 1;
+            }
+
+            // Calculate the string position where we need to insert ReverseOff.
+            // We need to find the character position that corresponds to barLength buffer cells.
+            int stringPos = PSStyle.Instance.Reverse.Length;
+            int currentCellCount = 0;
+
+            for (int i = 0; i < statusPart.Length && currentCellCount < barLength; i++)
+            {
+                currentCellCount += rawUI.LengthInBufferCells(statusPart[i]);
+                stringPos++;
+            }
 
-                sb.Insert(barLength + PSStyle.Instance.Reverse.Length, PSStyle.Instance.ReverseOff);
+            // Add any padding characters.
+            int remainingCells = barLength - currentCellCount;
+            stringPos += Math.Max(0, remainingCells);
+
+            if (stringPos < sb.Length)
+            {
+                sb.Insert(stringPos, PSStyle.Instance.ReverseOff);
             }
             else
             {
                 sb.Append(PSStyle.Instance.ReverseOff);
             }
-
-            strCollection.Add(
-                StringUtil.Format(
-                    "{0}{1}{2} [{3}]{4}",
-                    indent,
-                    PSStyle.Instance.Progress.Style,
-                    Activity,
-                    sb.ToString(),
-                    PSStyle.Instance.Reset)
-                .PadRight(padding));
         }
 
         /// <summary>
@@ -465,7 +549,7 @@ internal static bool IsMinimalProgressRenderingEnabled()
         /// Identifies the source of the progress record.
         /// </summary>
         internal
-        Int64
+        long
         SourceId;
 
         /// <summary>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs
index f0cdadc73eb..030a359c2d8 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ProgressPane.cs
@@ -13,7 +13,7 @@ namespace Microsoft.PowerShell
     /// ProgressPane is a class that represents the "window" in which outstanding activities for which the host has received
     /// progress updates are shown.
     ///
-    ///</summary>
+    /// </summary>
     internal
     class ProgressPane
     {
@@ -26,7 +26,7 @@ class ProgressPane
         internal
         ProgressPane(ConsoleHostUserInterface ui)
         {
-            if (ui == null) throw new ArgumentNullException(nameof(ui));
+            ArgumentNullException.ThrowIfNull(ui);
             _ui = ui;
             _rawui = ui.RawUI;
         }
@@ -37,7 +37,7 @@ class ProgressPane
         /// <value>
         /// true if the pane is visible, false if not.
         ///
-        ///</value>
+        /// </value>
         internal
         bool
         IsShowing
@@ -115,7 +115,7 @@ class ProgressPane
 
                     // create cleared region to clear progress bar later
                     _savedRegion = tempProgressRegion;
-                    if (ExperimentalFeature.IsEnabled(ExperimentalFeature.PSAnsiProgressFeatureName) && PSStyle.Instance.Progress.View != ProgressView.Minimal)
+                    if (PSStyle.Instance.Progress.View != ProgressView.Minimal)
                     {
                         for (int row = 0; row < rows; row++)
                         {
@@ -301,7 +301,17 @@ private void WriteContent()
         {
             if (_content is not null)
             {
+                // On Windows, we can check if the cursor is currently visible and not change it to visible
+                // if it is intentionally hidden.  On Unix, it is not currently supported to read the cursor visibility.
+#if UNIX
                 Console.CursorVisible = false;
+#else
+                bool currentCursorVisible = Console.CursorVisible;
+                if (currentCursorVisible)
+                {
+                    Console.CursorVisible = false;
+                }
+#endif
 
                 var currentPosition = _rawui.CursorPosition;
                 _rawui.CursorPosition = _location;
@@ -319,7 +329,11 @@ private void WriteContent()
                 }
 
                 _rawui.CursorPosition = currentPosition;
+#if UNIX
                 Console.CursorVisible = true;
+#else
+                Console.CursorVisible = currentCursorVisible;
+#endif
             }
         }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs
index 4c1fb4fa4e9..5181ae63672 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/Serialization.cs
@@ -189,8 +189,7 @@ class WrappedDeserializer : Serialization
                     return null;
 
                 case DataFormat.XML:
-                    string unused;
-                    o = _xmlDeserializer.Deserialize(out unused);
+                    o = _xmlDeserializer.Deserialize(out _);
                     break;
 
                 case DataFormat.Text:
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs
index dadc5117ab3..18725b5ddb7 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StartTranscriptCmdlet.cs
@@ -96,7 +96,7 @@ public SwitchParameter Append
         /// <remarks>
         /// The read-only attribute will not be replaced when the transcript is done.
         /// </remarks>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get
@@ -115,7 +115,7 @@ public SwitchParameter Force
         /// <summary>
         /// Property that prevents file overwrite.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [Alias("NoOverwrite")]
         public SwitchParameter NoClobber
         {
@@ -135,7 +135,7 @@ public SwitchParameter NoClobber
         /// <summary>
         /// Whether to include command invocation time headers between commands.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter IncludeInvocationHeader
         {
             get; set;
@@ -177,7 +177,7 @@ protected override void BeginProcessing()
                 }
                 else
                 {
-                    _outFilename = (string)value;
+                    _outFilename = (string)PSObject.Base(value);
                 }
             }
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StopTranscriptCmdlet.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StopTranscriptCmdlet.cs
index 48b392f98e7..093f7c147dc 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/StopTranscriptCmdlet.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/StopTranscriptCmdlet.cs
@@ -10,17 +10,22 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// Implements the stop-transcript cmdlet.
     /// </summary>
-    [Cmdlet(VerbsLifecycle.Stop, "Transcript", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096798")]
+    [Cmdlet(VerbsLifecycle.Stop, "Transcript", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.None, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096798")]
     [OutputType(typeof(string))]
     public sealed class StopTranscriptCommand : PSCmdlet
     {
         /// <summary>
-        /// Starts the transcription.
+        /// Stops the transcription.
         /// </summary>
         protected override
         void
         BeginProcessing()
         {
+            if (!ShouldProcess(string.Empty))
+            {
+                return;
+            }
+
             try
             {
                 string outFilename = Host.UI.StopTranscribing();
diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs
index 08e0ed8e1ee..eb4557c04d2 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs
+++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/UpdatesNotification.cs
@@ -28,6 +28,9 @@ internal static class UpdatesNotification
         private const string StableBuildInfoURL = "https://aka.ms/pwsh-buildinfo-stable";
         private const string PreviewBuildInfoURL = "https://aka.ms/pwsh-buildinfo-preview";
 
+        private const int NotificationDelayDays = 7;
+        private const int UpdateCheckBackoffDays = 7;
+
         /// <summary>
         /// The version of new update is persisted using a file, not as the file content, but instead baked in the file name in the following template:
         ///  `update{notification-type}_{version}_{publish-date}` -- held by 's_updateFileNameTemplate',
@@ -57,12 +60,12 @@ internal static class UpdatesNotification
         static UpdatesNotification()
         {
             s_notificationType = GetNotificationType();
-            CanNotifyUpdates = s_notificationType != NotificationType.Off;
+            CanNotifyUpdates = s_notificationType != NotificationType.Off
+                && Platform.TryDeriveFromCache(PSVersionInfo.GitCommitId, out s_cacheDirectory);
 
             if (CanNotifyUpdates)
             {
                 s_enumOptions = new EnumerationOptions();
-                s_cacheDirectory = Path.Combine(Platform.CacheDirectory, PSVersionInfo.GitCommitId);
 
                 // Build the template/pattern strings for the configured notification type.
                 string typeNum = ((int)s_notificationType).ToString();
@@ -89,9 +92,18 @@ internal static void ShowUpdateNotification(PSHostUserInterface hostUI)
             if (TryParseUpdateFile(
                     updateFilePath: out _,
                     out SemanticVersion lastUpdateVersion,
-                    lastUpdateDate: out _)
+                    out DateTime lastUpdateDate)
                && lastUpdateVersion != null)
             {
+                DateTime today = DateTime.UtcNow;
+                if ((today - lastUpdateDate).TotalDays < NotificationDelayDays)
+                {
+                    // The update was out less than 1 week ago and it's possible the packages are still rolling out.
+                    // We only show the notification when the update is at least 1 week old, to reduce the chance that
+                    // users see the notification but cannot get the new update when they try to install it.
+                    return;
+                }
+
                 string releaseTag = lastUpdateVersion.ToString();
                 string notificationMsgTemplate = s_notificationType == NotificationType.LTS
                     ? ManagedEntranceStrings.LTSUpdateNotificationMessage
@@ -108,7 +120,7 @@ internal static void ShowUpdateNotification(PSHostUserInterface hostUI)
                 // We calculate how much whitespace we need to make it look nice
                 if (hostUI.SupportsVirtualTerminal)
                 {
-                    // Use Warning Color
+                    // Swaps foreground and background colors.
                     notificationColor = "\x1B[7m";
                     resetColor = "\x1B[0m";
 
@@ -126,6 +138,7 @@ internal static void ShowUpdateNotification(PSHostUserInterface hostUI)
 
                 string notificationMsg = string.Format(CultureInfo.CurrentCulture, notificationMsgTemplate, releaseTag, notificationColor, resetColor, line2Padding, line3Padding);
 
+                hostUI.WriteLine();
                 hostUI.WriteLine(notificationMsg);
             }
         }
@@ -168,7 +181,7 @@ internal static async Task CheckForUpdates()
                 out DateTime lastUpdateDate);
 
             DateTime today = DateTime.UtcNow;
-            if (parseSuccess && updateFilePath != null && (today - lastUpdateDate).TotalDays < 7)
+            if (parseSuccess && updateFilePath != null && (today - lastUpdateDate).TotalDays < UpdateCheckBackoffDays)
             {
                 // There is an existing update file, and the last update was less than 1 week ago.
                 // It's unlikely a new version is released within 1 week, so we can skip this check.
@@ -352,7 +365,7 @@ private static async Task<Release> QueryNewReleaseAsync(SemanticVersion baseline
 
             using var client = new HttpClient();
 
-            string userAgent = string.Format(CultureInfo.InvariantCulture, "PowerShell {0}", PSVersionInfo.GitCommitId);
+            string userAgent = string.Create(CultureInfo.InvariantCulture, $"PowerShell {PSVersionInfo.GitCommitId}");
             client.DefaultRequestHeaders.Add("User-Agent", userAgent);
             client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 
@@ -411,7 +424,7 @@ private static NotificationType GetNotificationType()
         private enum NotificationType
         {
             /// <summary>
-            /// Turn off the udpate notification.
+            /// Turn off the update notification.
             /// </summary>
             Off = 0,
 
@@ -428,7 +441,7 @@ private enum NotificationType
             LTS = 2
         }
 
-        private class Release
+        private sealed class Release
         {
             internal Release(string publishAt, string tagName)
             {
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/CommandLineParameterParserStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/CommandLineParameterParserStrings.resx
index ab893b91a0a..c84e1b376ed 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/CommandLineParameterParserStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/CommandLineParameterParserStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -118,10 +118,7 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <data name="CommandAlreadySpecified" xml:space="preserve">
-    <value>Cannot process command because a command is already specified with -Command or -EncodedCommand.</value>
-  </data>
-  <data name="CannotReadFile" xml:space="preserve">
-    <value>Unable to read from file '{0}'.</value>
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
   </data>
   <data name="MissingCommandParameter" xml:space="preserve">
     <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
@@ -187,7 +184,10 @@ Valid formats are:
     <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
   </data>
   <data name="MissingConfigurationNameArgument" xml:space="preserve">
-    <value>Cannot process the command because -Configuration requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
   </data>
   <data name="MissingCustomPipeNameArgument" xml:space="preserve">
     <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
@@ -222,4 +222,10 @@ Valid formats are:
   <data name="NullElementInArgs" xml:space="preserve">
     <value>The specified arguments must not contain null elements.</value>
   </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleControlStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleControlStrings.resx
index f5fc6e4427a..bb2e50e949e 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleControlStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleControlStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,12 +123,6 @@
   <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
     <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
   </data>
-  <data name="AttachToParentConsoleExceptionTemplate" xml:space="preserve">
-    <value>The Win32 internal error "{0}" 0x{1:X} occurred while attaching to parent console. Contact Microsoft Customer Support Services.</value>
-  </data>
-  <data name="DetachFromConsoleExceptionTemplate" xml:space="preserve">
-    <value>The Win32 internal error "{0}" 0x{1:X} occurred while detaching from the console. Contact Microsoft Customer Support Services.</value>
-  </data>
   <data name="GetInputModeExceptionTemplate" xml:space="preserve">
     <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
   </data>
@@ -192,9 +186,6 @@
   <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
     <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
   </data>
-  <data name="SetConsoleCursorPositionExceptionTemplate" xml:space="preserve">
-    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to set the cursor position. Contact Microsoft Customer Support Services.</value>
-  </data>
   <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
     <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
   </data>
@@ -207,7 +198,4 @@
   <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
     <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
   </data>
-  <data name="SetConsoleFontInfoExceptionTemplate" xml:space="preserve">
-    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting console font information. Contact Microsoft Customer Support Services.</value>
-  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostRawUserInterfaceStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostRawUserInterfaceStrings.resx
index bf47782fdb0..150f1cb973f 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostRawUserInterfaceStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostRawUserInterfaceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -172,9 +172,6 @@
     <value>Window title cannot be longer than {0} characters.</value>
   </data>
   <data name="WindowTitleElevatedPrefix" xml:space="preserve">
-    <value>Administrator</value>
-  </data>
-  <data name="WindowTitleTemplate" xml:space="preserve">
-    <value>{0}: {1}</value>
+    <value>Administrator: </value>
   </data>
 </root>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostStrings.resx
index 7296bb30feb..f99a7627a65 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,18 +123,15 @@
   <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
     <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
   </data>
-  <data name="NestedPromptEntryError" xml:space="preserve">
-    <value>A nested prompt cannot be entered until the host is running at least one prompt loop.</value>
-  </data>
   <data name="DefaultPrompt" xml:space="preserve">
     <value>PS&gt;</value>
   </data>
-  <data name="InitScriptFailed" xml:space="preserve">
-    <value>Execution of initialization script has failed. The shell cannot be started.</value>
-  </data>
   <data name="ShellCannotBeStarted" xml:space="preserve">
     <value>The shell cannot be started. A failure occurred during initialization:</value>
   </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
   <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
     <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
   </data>
@@ -152,9 +149,6 @@ PowerShell transcript end
 End time: {0:yyyyMMddHHmmss}
 **********************</value>
   </data>
-  <data name="ConsoleHostIsSingleton" xml:space="preserve">
-    <value>An instance of the ConsoleHost class has already been created for this process.</value>
-  </data>
   <data name="InitialCommandNotExecuted" xml:space="preserve">
     <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
   </data>
@@ -170,9 +164,6 @@ End time: {0:yyyyMMddHHmmss}
   <data name="DebuggerSourceCodeFormat" xml:space="preserve">
     <value>{0}:{1,-3} {2}</value>
   </data>
-  <data name="CommandFailed" xml:space="preserve">
-    <value>An error occurred while running '{0}': {1}</value>
-  </data>
   <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
     <value>
 The current session does not support debugging; execution will continue.
@@ -191,4 +182,10 @@ The current session does not support debugging; execution will continue.
   <data name="RunAsAdministrator" xml:space="preserve">
     <value>Run as Administrator</value>
   </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
 </root>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceSecurityResources.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceSecurityResources.resx
index 6c383d5052f..a3b9491db36 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceSecurityResources.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceSecurityResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceStrings.resx
index 7a2f61022f5..b7d0c1f79d6 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ConsoleHostUserInterfaceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/HostMshSnapinResources.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/HostMshSnapinResources.resx
deleted file mode 100644
index 7cfdd2f63b5..00000000000
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/HostMshSnapinResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Description" xml:space="preserve">
-    <value>This PowerShell snap-in contains cmdlets (such as Start-Transcript and Stop-Transcript) that are provided for use with the PowerShell console host.</value>
-  </data>
-  <data name="Vendor" xml:space="preserve">
-    <value>Microsoft Corporation</value>
-  </data>
-  <data name="Name" xml:space="preserve">
-    <value>Host PowerShell Snap-In.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ManagedEntranceStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ManagedEntranceStrings.resx
index 7b13837b294..4f5e919fbf7 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ManagedEntranceStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ManagedEntranceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,15 +117,20 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="ShellBannerNonWindowsPowerShell" xml:space="preserve">
-    <value>PowerShell {0}
-Copyright (c) Microsoft Corporation.
-
-https://aka.ms/powershell
-Type 'help' to get help.</value>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
   </data>
-  <data name="PSReadLineDisabledWhenScreenReaderIsActive" xml:space="preserve">
-    <value>Warning: PowerShell detected that you might be using a screen reader and has disabled PSReadLine for compatibility purposes. If you want to re-enable it, run 'Import-Module PSReadLine'.</value>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
   </data>
   <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
     <value>  {1} A new PowerShell preview release is available: v{0} {2}
@@ -149,12 +154,15 @@ Type 'help' to get help.</value>
     <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
                   [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
                                 | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
-                  [-ConfigurationName &lt;string&gt;] [-CustomPipeName &lt;string&gt;]
-                  [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
                   [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
                   [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
-                  [-OutputFormat {Text | XML}] [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
-                  [-Version] [-WindowStyle &lt;style&gt;] [-WorkingDirectory &lt;directoryPath&gt;]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
 
        pwsh[.exe] -h | -Help | -? | /?
 
@@ -283,6 +291,25 @@ All parameters are case-insensitive.</value>
     (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
     or when execution is interrupted with Ctrl-C.
 
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
 -ConfigurationName | -config
 
     Specifies a configuration endpoint in which PowerShell is run. This can be
@@ -292,6 +319,14 @@ All parameters are case-insensitive.</value>
 
     Example: "pwsh -ConfigurationName AdminRoles"
 
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
 -CustomPipeName
 
     Specifies the name to use for an additional IPC server (named pipe) used
@@ -383,18 +418,24 @@ All parameters are case-insensitive.</value>
 
 -NoLogo | -nol
 
-    Hides the copyright banner at startup of interactive sessions.
+    Hides the banner text at startup of interactive sessions.
 
 -NonInteractive | -noni
 
-    Does not present an interactive prompt to the user. Any attempts to use
-    interactive features, like Read-Host or confirmation prompts, result in
-    statement-terminating errors.
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
 
 -NoProfile | -nop
 
     Does not load the PowerShell profiles.
 
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
 -OutputFormat | -o | -of
 
     Determines how output from PowerShell is formatted. Valid values are "Text"
@@ -402,7 +443,7 @@ All parameters are case-insensitive.</value>
 
     Example: "pwsh -o XML -c Get-Date"
 
-    When called withing a PowerShell session, you get deserialized objects as
+    When called within a PowerShell session, you get deserialized objects as
     output rather plain strings. When called from other shells, the output is
     string data formatted as CLIXML text.
 
@@ -434,7 +475,7 @@ All parameters are case-insensitive.</value>
 -WindowStyle | -w
 
     Sets the window style for the session. Valid values are Normal, Minimized,
-    Maximized and Hidden.
+    Maximized, and Hidden.
 
 -WorkingDirectory | -wd
 
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ProgressNodeStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ProgressNodeStrings.resx
index b4e9785add6..afaa49e90c3 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/ProgressNodeStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ProgressNodeStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/TranscriptStrings.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/TranscriptStrings.resx
index c2a2826955c..e460449e060 100644
--- a/src/Microsoft.PowerShell.ConsoleHost/resources/TranscriptStrings.resx
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/TranscriptStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="HostDoesNotSupportTranscript" xml:space="preserve">
-    <value>This host does not support transcription.</value>
-  </data>
   <data name="TranscriptionStarted" xml:space="preserve">
     <value>Transcript started, output file is {0}</value>
   </data>
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/CommandLineParameterParserStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/CommandLineParameterParserStrings.cs.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/CommandLineParameterParserStrings.cs.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleControlStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleControlStrings.cs.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleControlStrings.cs.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostRawUserInterfaceStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostRawUserInterfaceStrings.cs.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostRawUserInterfaceStrings.cs.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostStrings.cs.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostStrings.cs.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceSecurityResources.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceSecurityResources.cs.resx
new file mode 100644
index 00000000000..1fcc9ce638d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceSecurityResources.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Uživatel: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Heslo uživatele {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceStrings.cs.resx
new file mode 100644
index 00000000000..a5fbef9da42
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ConsoleHostUserInterfaceStrings.cs.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>„{0}“ nesmí být null ani prázdné.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ManagedEntranceStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ManagedEntranceStrings.cs.resx
new file mode 100644
index 00000000000..c6cea6f3b9a
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ManagedEntranceStrings.cs.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Režim omezeného jazyka]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Režim AUDIT omezeného jazyka : Bez omezení]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Režim bez jazyka]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Režim omezeného jazyka]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Je k dispozici nová verze Preview PowerShellu: v{0} {2}
+  {1} Upgradujte teď nebo si prohlédněte stránku verze na adrese:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Je k dispozici nová stabilní verze PowerShellu: v{0} {2}
+  {1} Upgradujte teď nebo si prohlédněte stránku verze na adrese:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Je k dispozici nová verze PowerShellu LTS: v{0} {2}
+  {1} Upgradujte teď nebo si prohlédněte stránku verze na adrese:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Použití: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+Online nápověda PowerShellu https://aka.ms/powershell-docs
+
+U všech parametrů se nerozlišují velká a malá písmena.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ProgressNodeStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ProgressNodeStrings.cs.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/ProgressNodeStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/cs/TranscriptStrings.cs.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/TranscriptStrings.cs.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/cs/TranscriptStrings.cs.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/CommandLineParameterParserStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/CommandLineParameterParserStrings.de.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/CommandLineParameterParserStrings.de.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleControlStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleControlStrings.de.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleControlStrings.de.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostRawUserInterfaceStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostRawUserInterfaceStrings.de.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostRawUserInterfaceStrings.de.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostStrings.de.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostStrings.de.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceSecurityResources.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceSecurityResources.de.resx
new file mode 100644
index 00000000000..ce6ce6ae67e
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceSecurityResources.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Benutzer: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Kennwort für Benutzer {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceStrings.de.resx
new file mode 100644
index 00000000000..767a96c20cf
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ConsoleHostUserInterfaceStrings.de.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>'{0}' darf nicht NULL oder leer sein.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ManagedEntranceStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ManagedEntranceStrings.de.resx
new file mode 100644
index 00000000000..4d6e339dd07
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ManagedEntranceStrings.de.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Eingeschränkter Sprachmodus]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Eingeschränkte Sprache AUDIT-Modus : Keine Einschränkungen]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Kein Sprachmodus]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Eingeschränkter Sprachmodus]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Eine neue PowerShell-Vorschauversion ist verfügbar: v{0} {2}
+  {1} Upgraden Sie jetzt, oder besuchen Sie die Releaseseite unter:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Ein neues stabiles PowerShell-Release ist verfügbar: v{0} {2}
+  {1} Upgraden Sie jetzt, oder besuchen Sie die Releaseseite unter:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Ein neues PowerShell LTS-Release ist verfügbar: v{0} {2}
+  {1} Jetzt aktualisieren, oder besuchen Sie die Releaseseite unter:{3}{2}
+  {1}https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Syntax: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;Zeichenfolge&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+Die PowerShell Online-Hilfe https://aka.ms/powershell-docs
+
+Bei allen Parametern wird die Groß-/Kleinschreibung nicht beachtet.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/ProgressNodeStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ProgressNodeStrings.de.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/ProgressNodeStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/de/TranscriptStrings.de.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/de/TranscriptStrings.de.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/de/TranscriptStrings.de.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/CommandLineParameterParserStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/CommandLineParameterParserStrings.es.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/CommandLineParameterParserStrings.es.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleControlStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleControlStrings.es.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleControlStrings.es.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostRawUserInterfaceStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostRawUserInterfaceStrings.es.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostRawUserInterfaceStrings.es.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostStrings.es.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostStrings.es.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceSecurityResources.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceSecurityResources.es.resx
new file mode 100644
index 00000000000..1f37d095ec1
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceSecurityResources.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Usuario: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Contraseña del usuario {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceStrings.es.resx
new file mode 100644
index 00000000000..daccb8b6d7b
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ConsoleHostUserInterfaceStrings.es.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>El valor de '{0}' no puede ser de tipo NULL ni estar vacío.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ManagedEntranceStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ManagedEntranceStrings.es.resx
new file mode 100644
index 00000000000..9981769419d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ManagedEntranceStrings.es.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Modo de lenguaje restringido]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Modo auditoría de lenguaje restringido: sin restricciones]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Modo sin lenguaje]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Modo de lenguaje restringido]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Ya está disponible una nueva versión en versión preliminar de PowerShell: v{0} {2}
+  {1} Actualice ahora o consulte la página de la versión en:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Ya está disponible una nueva versión estable de PowerShell: v{0} {2}
+  {1} Actualice ahora o consulte la página de la versión en:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Ya está disponible una nueva versión LTS de PowerShell: v{0} {2}
+  {1} Actualice ahora o consulte la página de la versión en:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Uso: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+Ayuda en pantalla de PowerShell https://aka.ms/powershell-docs
+
+Ningún parámetro distingue entre mayúsculas y minúsculas.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/ProgressNodeStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ProgressNodeStrings.es.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/ProgressNodeStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/es/TranscriptStrings.es.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/es/TranscriptStrings.es.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/es/TranscriptStrings.es.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/CommandLineParameterParserStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/CommandLineParameterParserStrings.fr.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/CommandLineParameterParserStrings.fr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleControlStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleControlStrings.fr.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleControlStrings.fr.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostRawUserInterfaceStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostRawUserInterfaceStrings.fr.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostRawUserInterfaceStrings.fr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostStrings.fr.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostStrings.fr.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceSecurityResources.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceSecurityResources.fr.resx
new file mode 100644
index 00000000000..20d086475d7
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceSecurityResources.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>User: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Password for user {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceStrings.fr.resx
new file mode 100644
index 00000000000..7141231a29b
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ConsoleHostUserInterfaceStrings.fr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>« {0} » ne peut pas être NULL ou vide.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ManagedEntranceStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ManagedEntranceStrings.fr.resx
new file mode 100644
index 00000000000..977cf608639
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ManagedEntranceStrings.fr.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell preview release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell stable release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell LTS release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ProgressNodeStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ProgressNodeStrings.fr.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/ProgressNodeStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/fr/TranscriptStrings.fr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/TranscriptStrings.fr.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/fr/TranscriptStrings.fr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/CommandLineParameterParserStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/CommandLineParameterParserStrings.it.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/CommandLineParameterParserStrings.it.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleControlStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleControlStrings.it.resx
new file mode 100644
index 00000000000..8b9c7b4bfab
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleControlStrings.it.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'aggiunta di un gestore di interruzioni. Contattare il Supporto tecnico Microsoft.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il tentativo di rimozione di un gestore di interruzioni. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero delle informazioni sull'handle della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero dell'handle del buffer di output della console attiva. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero della modalità console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione della modalità console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la lettura dei caratteri dal buffer di input della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la lettura dei record di input dal buffer di input della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la lettura del contenuto del buffer di input della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero del numero di eventi nel buffer di input della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante lo svuotamento del buffer di input della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero delle informazioni sul buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione delle dimensioni del buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la scrittura nel buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la lettura del buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il riempimento del buffer di output della console con i caratteri. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il riempimento del buffer di output della console con gli attributi. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante lo scorrimento del buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione delle informazioni sulla finestra della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero delle dimensioni massime della finestra della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione del titolo della finestra della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante la scrittura nel buffer di output della console nella posizione corrente del cursore. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione degli attributi dei caratteri per il buffer di output della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero delle informazioni sul cursore. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'impostazione delle informazioni sul cursore. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante il recupero delle informazioni sui tipi di carattere della console. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>Si è verificato l'errore interno Win32 "{0}" 0x{1:X} durante l'invio dell'input da tastiera. Contattare il Servizio Assistenza clienti Microsoft.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostRawUserInterfaceStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostRawUserInterfaceStrings.it.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostRawUserInterfaceStrings.it.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostStrings.it.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostStrings.it.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceSecurityResources.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceSecurityResources.it.resx
new file mode 100644
index 00000000000..58f0c1b9413
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceSecurityResources.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Utente: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Password per l'utente {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceStrings.it.resx
new file mode 100644
index 00000000000..10a31915835
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ConsoleHostUserInterfaceStrings.it.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}" non può essere Null o vuoto.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ManagedEntranceStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ManagedEntranceStrings.it.resx
new file mode 100644
index 00000000000..56d684fa9ef
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ManagedEntranceStrings.it.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Modalità linguaggio con restrizioni]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Modalità di controllo linguaggio con restrizioni: nessuna restrizione]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Nessuna modalità di linguaggio]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Modalità linguaggio con restrizioni]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} È disponibile una nuova versione di anteprima di PowerShell: v{0} {2}
+  {1} Aggiorna ora oppure consulta la pagina della versione all'indirizzo:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} È disponibile una nuova versione stabile di PowerShell: v{0} {2}
+  {1} Aggiorna ora oppure consulta la pagina della versione all'indirizzo:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} È disponibile una nuova versione LTS di PowerShell: v{0} {2}
+  {1} Aggiorna ora oppure consulta la pagina della versione all'indirizzo:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/ProgressNodeStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ProgressNodeStrings.it.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/ProgressNodeStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/it/TranscriptStrings.it.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/it/TranscriptStrings.it.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/it/TranscriptStrings.it.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/CommandLineParameterParserStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/CommandLineParameterParserStrings.ja.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/CommandLineParameterParserStrings.ja.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleControlStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleControlStrings.ja.resx
new file mode 100644
index 00000000000..9d972db65ad
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleControlStrings.ja.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>ブレーク ハンドラーを追加するときに、Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft サポート サービスにお問い合わせください。</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>中断ハンドラーを削除しようとしているときに、Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>コンソール ハンドルに関する入力を取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>アクティブなコンソール出力バッファーのハンドルの取得中に、Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>コンソール モードの取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>コンソール モードの設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>コンソール入力バッファーから文字を読み取り中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>コンソール入力バッファーからの入力レコードの読み取り中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>コンソール入力バッファーの内容の読み取り中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>コンソール入力バッファー内のイベント数の取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>コンソール入力バッファーのフラッシュ中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファー情報の取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファー サイズの設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーへの書き込み中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーの読み取り中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーに文字を入力中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーに属性を入力中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーのスクロール中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>コンソール ウィンドウ情報の設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>最大のコンソール ウィンドウ サイズの取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>コンソール ウィンドウのタイトルの設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>現在のカーソル位置にあるコンソール出力バッファーへの書き込み中に、Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>コンソール出力バッファーの文字属性の設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>カーソル情報の取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>カーソル情報の設定中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスにお問い合わせください。</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>本体のフォント情報の取得中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>キーボード入力の送信中に Win32 内部エラー "{0}" 0x{1:X} が発生しました。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostRawUserInterfaceStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostRawUserInterfaceStrings.ja.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostRawUserInterfaceStrings.ja.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostStrings.ja.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostStrings.ja.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceSecurityResources.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceSecurityResources.ja.resx
new file mode 100644
index 00000000000..d5bc8352b21
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceSecurityResources.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>ユーザー:</value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>ユーザー {0} のパスワード:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceStrings.ja.resx
new file mode 100644
index 00000000000..4b1eeb04b56
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ConsoleHostUserInterfaceStrings.ja.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}" を NULL または空にすることはできません。</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ManagedEntranceStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ManagedEntranceStrings.ja.resx
new file mode 100644
index 00000000000..55bd36508d7
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ManagedEntranceStrings.ja.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[制約付き言語モード]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[制約付き言語監査モード : 制限なし]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[言語モードなし]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[制限付き言語モード]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 新しい PowerShell のプレビュー リリースが利用可能です。v{0} {2}
+  {1} 今すぐアップグレードするか、{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+のリリース ページを確認してください</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 新しい PowerShell の安定リリースが利用可能です。v{0} {2}
+  {1} 今すぐアップグレードするか、{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+のリリース ページを確認してください</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 新しい PowerShell LTS リリースが利用可能です。v{0} {2}
+  {1} 今すぐアップグレードするか、{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+のリリース ページを確認してください</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>使用法: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell オンライン ヘルプ https://aka.ms/powershell-docs
+
+すべてのパラメーターでは大文字と小文字が区別されません。</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ProgressNodeStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ProgressNodeStrings.ja.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/ProgressNodeStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ja/TranscriptStrings.ja.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/TranscriptStrings.ja.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ja/TranscriptStrings.ja.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/CommandLineParameterParserStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/CommandLineParameterParserStrings.ko.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/CommandLineParameterParserStrings.ko.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleControlStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleControlStrings.ko.resx
new file mode 100644
index 00000000000..c02a84e63ed
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleControlStrings.ko.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>중단 핸들러를 추가할 때 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>중단 핸들러를 제거하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 핸들에 대한 입력을 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>활성 콘솔 출력 버퍼의 핸들을 검색하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 모드를 가져오는 동안 Win32 내부 오류 "{0}% 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 모드를 설정하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼에서 문자를 읽는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼에서 입력 레코드를 읽는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼의 내용을 읽는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼의 이벤트 수를 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼를 플러시하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼 정보를 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼 크기를 설정하는 동안 Win32 내부 오류 "{0}% 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼에 쓰는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>콘솔 입력 버퍼를 읽는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼를 문자로 채우는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼에 특성으로 채우는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>콘솔 창 제목을 스크롤하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>콘솔 모드를 설정하는 동안 Win32 내부 오류 "{0}% 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>가장 큰 콘솔 창 크기를 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>콘솔 창 제목을 설정하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>현재 커서 위치에서 콘솔 출력 버퍼에 쓰는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>콘솔 출력 버퍼의 문자 속성을 설정하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>커서 정보를 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>커서 정보를 설정하는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>콘솔 글꼴 정보를 가져오는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>키보드 입력을 보내는 동안 Win32 내부 오류 "{0}" 0x{1:X}이(가) 발생했습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostRawUserInterfaceStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostRawUserInterfaceStrings.ko.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostRawUserInterfaceStrings.ko.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostStrings.ko.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostStrings.ko.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceSecurityResources.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceSecurityResources.ko.resx
new file mode 100644
index 00000000000..080a3222ecd
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceSecurityResources.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>사용자: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>사용자 {0}의 암호: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceStrings.ko.resx
new file mode 100644
index 00000000000..11ecd04924f
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ConsoleHostUserInterfaceStrings.ko.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}"은(는) Null이거나 비워 둘 수 없습니다.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ManagedEntranceStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ManagedEntranceStrings.ko.resx
new file mode 100644
index 00000000000..977cf608639
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ManagedEntranceStrings.ko.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell preview release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell stable release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell LTS release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ProgressNodeStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ProgressNodeStrings.ko.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/ProgressNodeStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ko/TranscriptStrings.ko.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/TranscriptStrings.ko.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ko/TranscriptStrings.ko.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/CommandLineParameterParserStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/CommandLineParameterParserStrings.pl.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/CommandLineParameterParserStrings.pl.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleControlStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleControlStrings.pl.resx
new file mode 100644
index 00000000000..749f190979e
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleControlStrings.pl.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas dodawania procedury obsługi przerwania. Skontaktuj się z pomocą techniczną firmy Microsoft w celu uzyskania pomocy.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas próby usunięcia procedury obsługi przerwania. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania danych wejściowych dotyczących dojścia konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania dojścia do aktywnego buforu danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas uzyskiwania trybu konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania trybu konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas odczytywania znaków z buforu danych wejściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas odczytywania rekordów danych wejściowych z buforu danych wejściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas odczytywania zawartości buforu danych wejściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania liczby zdarzeń w buforze danych wejściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas opróżniania buforu danych wejściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania informacji o buforze danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania rozmiaru buforu danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas zapisywania w buforze danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny win32 „{0}” 0x{1:X} podczas odczytywania buforu danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas wypełniania buforu danych wyjściowych konsoli znakami. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas wypełniania buforu danych wyjściowych konsoli atrybutami. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas przewijania buforu danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania informacji o oknie konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania największego rozmiaru okna konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania tytułu okna konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas zapisywania w buforze danych wyjściowych konsoli w bieżącym położeniu kursora. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania atrybutów znaków dla buforu danych wyjściowych konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania informacji o kursorze. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas ustawiania informacji o kursorze. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas pobierania informacji o czcionce konsoli. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>Wystąpił błąd wewnętrzny Win32 „{0}” 0x{1:X} podczas wysyłania danych wejściowych klawiatury. Skontaktuj się z pomocą techniczną firmy Microsoft.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostRawUserInterfaceStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostRawUserInterfaceStrings.pl.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostRawUserInterfaceStrings.pl.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostStrings.pl.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostStrings.pl.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceSecurityResources.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceSecurityResources.pl.resx
new file mode 100644
index 00000000000..20d086475d7
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceSecurityResources.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>User: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Password for user {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceStrings.pl.resx
new file mode 100644
index 00000000000..4dd4a830513
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ConsoleHostUserInterfaceStrings.pl.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>Argument „{0}” nie może mieć wartości null ani nie może być pusty.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ManagedEntranceStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ManagedEntranceStrings.pl.resx
new file mode 100644
index 00000000000..977cf608639
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ManagedEntranceStrings.pl.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell preview release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell stable release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell LTS release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ProgressNodeStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ProgressNodeStrings.pl.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/ProgressNodeStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pl/TranscriptStrings.pl.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/TranscriptStrings.pl.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pl/TranscriptStrings.pl.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/CommandLineParameterParserStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/CommandLineParameterParserStrings.pt-BR.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/CommandLineParameterParserStrings.pt-BR.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleControlStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleControlStrings.pt-BR.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleControlStrings.pt-BR.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostRawUserInterfaceStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostRawUserInterfaceStrings.pt-BR.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostRawUserInterfaceStrings.pt-BR.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostStrings.pt-BR.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostStrings.pt-BR.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceSecurityResources.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceSecurityResources.pt-BR.resx
new file mode 100644
index 00000000000..21e3f6392b6
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceSecurityResources.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Usuário: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Senha para usuário {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceStrings.pt-BR.resx
new file mode 100644
index 00000000000..331746380fa
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ConsoleHostUserInterfaceStrings.pt-BR.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}" não pode ser nulo ou vazio.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ManagedEntranceStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ManagedEntranceStrings.pt-BR.resx
new file mode 100644
index 00000000000..813d5baa47c
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ManagedEntranceStrings.pt-BR.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Modo de Linguagem Restritiva]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Modo de AUDITORIA de Linguagem Restrita: Sem Restrições]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Modo sem Linguagem]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Modo de Linguagem Restrita]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Uma nova versão prévia do PowerShell está disponível: v{0} {2}
+  {1} Atualize agora ou confira a página da versão em:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Uma nova versão estável do PowerShell está disponível: v{0} {2}
+  {1} Atualize agora ou confira a página da versão em:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Uma nova versão LTS do PowerShell está disponível: v{0} {2}
+  {1} Atualize agora ou confira a página da versão em:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Uso: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+Ajuda Online do PowerShell https://aka.ms/powershell-docs
+
+Todos os parâmetros não diferenciam maiúsculas de minúsculas.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    Se o valor de File for "-", será feita a leitura do texto do comando a partir da entrada padrão.
+    Executar "pwsh -File -" sem entrada padrão redirecionada inicia uma sessão
+    regular. Isso é o mesmo que não especificar o parâmetro File de forma alguma.
+
+    Este é o parâmetro padrão quando não há parâmetros, mas há valores
+    presente na linha de comando. O script especificado é executado no escopo local
+    ("dot-sourced"), para que as funções e variáveis que o script
+    cria fiquem disponíveis na sessão atual. Insira o caminho do arquivo de script
+    e quaisquer parâmetros. File deve ser o último parâmetro no comando, porque
+    todos os caracteres digitados após o nome do parâmetro File são interpretados como o
+    caminho do arquivo de script seguido pelos parâmetros do script.
+
+    Normalmente, os parâmetros de opção de um script são incluídos ou
+    omitidos. Por exemplo, o comando a seguir usa o parâmetro All do
+    Get-Script.ps1 arquivo de script: "-File .\Get-Script.ps1 -All"
+
+    Em casos raros, talvez seja necessário fornecer um valor BOOLIANO para um parâmetro
+    de opção. Para fornecer um valor BOOLIANO para um parâmetro de opção no valor
+    do parâmetro FILE, use o parâmetro normalmente seguido imediatamente por
+    dois-pontos e pelo valor booleano, como no exemplo a seguir:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Os parâmetros passados para o script são passados como cadeias de caracteres literais, após
+    a interpretação pelo shell atual. Por exemplo, se você estiver no cmd.exe e
+    quiser passar um valor de variável de ambiente, você usaria a sintaxe do
+    cmd.exe: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    Em contraste, executar "pwsh -File .\test.ps1 -TestParam $env:windir" em
+    cmd.exe fará com que o script receba a cadeia de caracteres literal "$env:windir"
+    porque ela não tem um significado especial para o shell cmd.exe atual. O
+    O estilo de referência de variável de ambiente "$env:windir" pode ser usado dentro de um
+    parâmetro Command, pois lá ele é interpretado como código do PowerShell.
+
+    Da mesma forma, se você quiser executar o mesmo comando a partir de um script de Lote,
+    você usaria "%~dp0" em vez de ".\" ou "$PSScriptRoot" para representar o diretório
+    de execução atual: "pwsh -File %~dp0test.ps1 -TestParam %windir%". Se você
+    usasse ".\test.ps1", o PowerShell geraria um erro porque ele não consegue
+    localizar o caminho literal ".\test.ps1".
+
+    Quando o arquivo de script invocado termina com um comando de saída, o
+    o código de saída do processo é definido como o argumento numérico usado com o comando de saída. Em
+    caso de encerramento normal, o código de saída é sempre 0.
+
+    Semelhante a -Command, quando ocorre um erro que termina o script, o código de saída
+    é definido como 1. No entanto, ao contrário de -Command, quando a execução é
+    interrompida com Ctrl-C, o código de saída é 0.
+
+-Command | -c
+
+    Executa os comandos especificados (e quaisquer parâmetros) como se fossem
+    digitados no prompt de comando do PowerShell e, em seguida, encerrados, a menos que o parâmetro NoExit
+    seja especificado.
+
+    O valor de Command pode ser "-", um bloco de script ou uma cadeia de caracteres. Se o valor
+    de Command for "-", o texto do comando será lido da entrada padrão.
+
+    O parâmetro Command aceita um bloco de script para execução somente quando consegue
+    reconhecer o valor passado para Command como um tipo ScriptBlock. Isso só é
+    possível somente ao executar pwsh de outro processo que hospeda o PowerShell. O tipo ScriptBlock
+    pode estar contido em uma variável existente, ser retornado de uma expressão,
+    ou analisado pelo processo que hospeda o PowerShell como um bloco de script literal delimitado por
+    chaves curvas "{}", antes de ser passado para pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    No cmd.exe, não existe algo como um bloco de script (ou tipo ScriptBlock),
+    portanto, o valor passado para Command será sempre uma cadeia de caracteres. Você pode escrever o
+    bloco de script dentro da cadeia, mas, em vez de ser executado, ele
+    se comportará exatamente como se você o tivesse digitado em um prompt típico do PowerShell,
+    imprimindo o conteúdo do bloco de script de volta para você.
+
+    Uma cadeia de caracteres passada para Command ainda é executada como script do PowerShell, portanto,
+    as chaves do bloco de script geralmente nem são necessárias quando
+    em execução a partir de cmd.exe. Para executar um bloco de script embutido definido dentro de uma
+    cadeia de caracteres, pode-se usar o operador de chamada &amp;:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    Se o valor de Command for uma cadeia, Command deverá ser o último parâmetro de
+    pwsh, pois todos os argumentos posteriores a ele são interpretados como parte do
+    comando a executar.
+
+    Quando chamado de uma sessão existente do PowerShell, os resultados são
+    retornados ao shell pai como objetos XML desserializados, não como objetos ativos.
+    Para outros shells, os resultados são retornados como cadeias de caracteres.
+
+    Se o valor de Command for "-", o texto do comando será lido da entrada
+    padrão. Você deve redirecionar a entrada padrão ao usar o parâmetro Command
+    com entrada padrão. Por exemplo:
+
+        @'
+        "in"
+
+        "olá" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    Este exemplo produz a seguinte saída:
+
+        in
+        hi there
+        out
+
+    O código de saída do processo é determinado pelo status do 
+    comando executado no bloco de script (executado). O código de saída é 0 quando $? é $true ou 1
+    quando $? é $false. Se o último comando for um programa externo ou um
+    Script do PowerShell que defina explicitamente um código de saída diferente de 0 ou 1,
+    o código de saída será convertido em 1 para o código de saída do processo. Para preservar o
+    código de saída específico, adicione exit $LASTEXITCODE à cadeia de caracteres do comando ou ao bloco de script.
+
+    Da mesma forma, o valor 1 é retornado quando ocorre um erro de encerramento de script
+    (erro que encerra o script), como um throw ou -ErrorAction Stop, ocorre
+    ou quando a execução é interrompida com Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executa um comando do PowerShell com argumentos.  Ao contrário de `-Command`, esse
+    parâmetro preenche a variável interna `$args, que pode ser usada pelo
+    comando.
+
+    A primeira cadeia de caracteres é o comando e as cadeias de caracteres seguintes, separadas por espaços em branco,
+    são os argumentos.
+
+    Por exemplo:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    Este exemplo produz a seguinte saída:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Especifica um ponto de extremidade de configuração no qual o PowerShell é executado. Esse pode ser
+    qualquer ponto de extremidade registrado no computador local, incluindo
+    pontos de extremidade padrão de comunicação remota do PowerShell ou um ponto de extremidade personalizado com capacidades específicas de
+    função de usuário.
+
+    Exemplo: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Especifica o caminho de um arquivo de configuração de sessão (.pssc). A configuração
+    contida no arquivo de configuração será aplicada à sessão do
+    PowerShell.
+
+    Exemplo: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Especifica o nome que será usado para um servidor IPC adicional (pipe nomeado) usado
+    para depuração e outras comunicações entre processos. Este oferece um
+    mecanismo previsível para se conectar a outras instâncias do PowerShell.
+    Normalmente usado com o parâmetro CustomPipeName no comando "Enter-PSHostProcess".
+
+    Este parâmetro foi introduzido no PowerShell 6.2.
+
+    Por exemplo:
+
+        # Instância do PowerShell 1
+        pwsh -CustomPipeName mydebugpipe
+        # Instância do PowerShell 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Aceita uma versão do comando codificada em Base64 de um comando. Use este parâmetro para
+    enviar comandos ao PowerShell que exigem aspas complexas e aninhadas. O
+    A representação em Base64 deve ser uma cadeia de caracteres codificada em UTF-16.
+
+    Por exemplo:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Define a política de execução padrão para a sessão atual e a salva na
+    variável de ambiente $env:PSExecutionPolicyPreference. Este parâmetro
+    não altera as políticas de execução configuradas de forma persistente.
+
+    Este parâmetro aplica-se somente a computadores Windows. A
+    variável de ambiente $env:PSExecutionPolicyPreference não existe em
+    plataformas não Windows.
+
+-InputFormat | -inp | -if
+
+    Descreve o formato dos dados enviados ao PowerShell. Os valores válidos são "Text"
+    (cadeias de caracteres de texto) ou "XML" (formato CLIXML serializado).
+
+-Interactive | -i
+
+    Apresente um prompt interativo ao usuário. É o inverso do parâmetro
+    NonInteractive.
+
+-Login | -l
+
+    No Linux e macOS, inicia o PowerShell como um shell de logon, usando /bin/sh para
+    executar perfis de logon, como /etc/profile e ~/.profile. No Windows,
+    este parâmetro de opçã não faz nada.
+
+    [!IMPORTANT] Este parâmetro deve vir primeiro para iniciar o PowerShell como um shell
+    de logon. O parâmetro será ignorado se for passado em qualquer outra posição.
+
+    Para configurar o pwsh como o shell de logon em sistemas operacionais semelhantes ao UNIX:
+
+    - Verifique se o caminho absoluto completo para pwsh está listado em /etc/shells
+
+      - Este caminho geralmente é algo como /usr/bin/pwsh no Linux ou
+        /usr/local/bin/pwsh no macOS
+      - Com alguns métodos de instalação, esta entrada é adicionada
+        automaticamente durante a instalação
+      - Se o pwsh não estiver presente em /etc/shells, use um editor para acrescentar o
+        caminho para pwsh na última linha. A edição exige privilégios elevados para
+        editar.
+
+    - Use o utilitário chsh para definir o shell do usuário atual como pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] No momento, não há suporte para definir pwsh como o shell de logon no
+    Subsistema do Windows para Linux (WSL), e tentar definir o pwsh como
+    shell de logon no WSL pode fazer com que não seja possível iniciar o WSL interativamente.
+
+-MTA
+
+    Iniciar o PowerShell usando um multi-threaded apartment. Este parâmetro só está
+    disponível no Windows.
+
+-NoExit | -noe
+
+    Não encerra o PowerShell após executar os comandos de inicialização.
+
+    Exemplo: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Oculta o texto da barra de notificação na inicialização de sessões interativas.
+
+-NonInteractive | -noni
+
+    Este parâmetro é usado para criar sessões que não devem exigir a entrada do usuário.
+    Isto é útil para scripts executados em tarefas agendadas ou pipelines de CI/CD.
+    Todas as tentativas de usar recursos interativos, como 'Read-Host' ou prompts de confirmação,
+    resultam em erros de término de instrução em vez de ficarem aguardando indefinidamente.
+
+-NoProfile | -nop
+
+    Não carrega os perfis do PowerShell.
+
+-NoProfileLoadTime
+
+    Oculta o texto do tempo de carregamento do perfil do PowerShell exibido na inicialização quando esse
+    tempo ultrapassa 500 milissegundos.
+
+-OutputFormat | -o | -of
+
+    Determina como a saída do PowerShell é formatada. Os valores válidos são "Text"
+    (cadeias de caracteres de texto) ou "XML" (formato CLIXML serializado).
+
+    Exemplo: "pwsh -o XML -c Get-Date"
+
+    Quando chamado em uma sessão do PowerShell, você obtém objetos desserializados como
+    saída, em vez de cadeias de caracteres simples. Quando chamado de outros shells, a saída é
+    dados de cadeia de caracteres formatados como texto CLIXML.
+
+-SettingsFile | -settings
+
+    Substitui, para a sessão, o arquivo de configurações
+    "powershell.config.json". Por padrão, as configurações de todo o sistema são lidas do
+    "powershell.config.json" no diretório "$PSHOME".
+
+    Observe que essas configurações não são usadas pelo ponto de extremidade especificado pelo
+    argumento "-ConfigurationName".
+
+    Exemplo: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Usado em sshd_config para executar o PowerShell como subsistema SSH. Não se
+    destina a nenhum outro uso, que também não tem suporte.
+
+-STA
+
+    Iniciar PowerShell usando um single-threaded apartment. Esse é o padrão.
+    Este parâmetro só está disponível no Windows.
+
+-Version | -v
+
+    Exibe a versão do PowerShell. Os parâmetros adicionais são ignorados.
+
+-WindowStyle | -w
+
+    Define o estilo da janela para a sessão. Os valores válidos são Normal, Minimized,
+    Maximized e Hidden.
+
+-WorkingDirectory | -wd
+
+    Define o diretório de trabalho inicial executando na inicialização. Há suporte para
+    qualquer caminho de arquivo válido do PowerShell.
+
+    Para iniciar o PowerShell no diretório inicial, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Exibe a ajuda do pwsh. Se você estiver digitando um comando pwsh no PowerShell,
+    preceda os parâmetros do comando com um hífen (-), não com uma barra (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ProgressNodeStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ProgressNodeStrings.pt-BR.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/ProgressNodeStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/TranscriptStrings.pt-BR.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/TranscriptStrings.pt-BR.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/pt-BR/TranscriptStrings.pt-BR.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/CommandLineParameterParserStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/CommandLineParameterParserStrings.ru.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/CommandLineParameterParserStrings.ru.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleControlStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleControlStrings.ru.resx
new file mode 100644
index 00000000000..19fe0180f90
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleControlStrings.ru.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred when adding a break handler. Contact Microsoft Support Services.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while trying to remove a break handler. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting input about the console handle. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while retrieving the handle for the active console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console mode. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading characters from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading input records from the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while reading the contents of the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the number of events in the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while flushing the console input buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console output buffer information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console output buffer size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while reading the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with characters. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while filling the console output buffer with attributes. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while scrolling the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting the largest console window size. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting the console window title. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while writing to the console output buffer at the current cursor position. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while setting character attributes for the console output buffer. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting cursor information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>Win32 internal error "{0}" 0x{1:X} occurred while setting cursor information.Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while getting console font information. Contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>The Win32 internal error "{0}" 0x{1:X} occurred while sending keyboard input. Contact Microsoft Customer Support Services.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostRawUserInterfaceStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostRawUserInterfaceStrings.ru.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostRawUserInterfaceStrings.ru.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostStrings.ru.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostStrings.ru.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceSecurityResources.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceSecurityResources.ru.resx
new file mode 100644
index 00000000000..2fcee197506
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceSecurityResources.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Пользователь: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>Пароль для пользователя {0}: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceStrings.ru.resx
new file mode 100644
index 00000000000..5bf79270638
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ConsoleHostUserInterfaceStrings.ru.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} не может быть пустым или иметь значение NULL.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ManagedEntranceStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ManagedEntranceStrings.ru.resx
new file mode 100644
index 00000000000..8384c1418dd
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ManagedEntranceStrings.ru.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Ограниченный языковой режим]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Режим АУДИТА с ограничением по языку: без ограничений]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[Режим без языка]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Ограниченный языковой режим]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Доступна новая предварительная версия PowerShell.: v{0} {2}
+  {1} Обновите сейчас или ознакомьтесь со страницей релиза по адресу:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Доступна новая стабильная версия PowerShell.: v{0} {2}
+  {1} Обновите сейчас или ознакомьтесь со страницей релиза по адресу::{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} Доступна новая версия PowerShell LTS: v{0} {2}
+  {1} Обновите сейчас или ознакомьтесь со страницей релиза по адресу:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+Все параметры нечувствительны к регистру.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ProgressNodeStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ProgressNodeStrings.ru.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/ProgressNodeStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/ru/TranscriptStrings.ru.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/TranscriptStrings.ru.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/ru/TranscriptStrings.ru.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/CommandLineParameterParserStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/CommandLineParameterParserStrings.tr.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/CommandLineParameterParserStrings.tr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleControlStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleControlStrings.tr.resx
new file mode 100644
index 00000000000..148f1d156ab
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleControlStrings.tr.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>Bir kesme işleyicisi eklenirken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Desteği ile iletişime geçin.</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>Bir kesme işleyicisi kaldırılmaya çalışılırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>Konsol tanıtıcısı hakkında girdi alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>Etkin konsol çıktı arabelleğinin tanıtıcısı alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>Konsol modu alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>Konsol modu ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>Konsol girdi arabelleğinden karakterler okunurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Konsol girdi arabelleğinden girdi kayıtları okunurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>Konsol girdi arabelleğinin içeriği okunurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>Konsol girdi arabelleğindeki olay sayısı alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>Konsol girdi arabelleği boşaltılırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği bilgileri alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği boyutu ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleğine yazılırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği okunurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Desteği ile iletişime geçin.</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği karakterlerle doldurulurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Desteği ile iletişime geçin.</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği özniteliklerle doldurulurken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği kaydırılırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>Konsol pencere bilgileri ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Desteği ile iletişime geçin.</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>En büyük konsol pencere boyutu alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>Konsol pencere başlığı ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>Mevcut imleç konumunda konsol çıktı arabelleğine yazılırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>Konsol çıktı arabelleği için karakter öznitelikleri ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>İmleç bilgileri alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>İmleç bilgileri ayarlanırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>Konsol yazı tipi bilgileri alınırken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>Klavye girdisi gönderilirken Win32 iç hatası "{0}" 0x{1:X} oluştu. Microsoft Müşteri Hizmetleri ile iletişime geçin.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostRawUserInterfaceStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostRawUserInterfaceStrings.tr.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostRawUserInterfaceStrings.tr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostStrings.tr.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostStrings.tr.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceSecurityResources.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceSecurityResources.tr.resx
new file mode 100644
index 00000000000..02d8e2d6dc6
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceSecurityResources.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>Kullanıcı: </value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>{0} kullanıcısı için parolayı: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceStrings.tr.resx
new file mode 100644
index 00000000000..a3644ac9a4b
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ConsoleHostUserInterfaceStrings.tr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}" değeri null veya boş olamaz.</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ManagedEntranceStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ManagedEntranceStrings.tr.resx
new file mode 100644
index 00000000000..977cf608639
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ManagedEntranceStrings.tr.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell preview release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell stable release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell LTS release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ProgressNodeStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ProgressNodeStrings.tr.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/ProgressNodeStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/tr/TranscriptStrings.tr.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/TranscriptStrings.tr.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/tr/TranscriptStrings.tr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/CommandLineParameterParserStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/CommandLineParameterParserStrings.zh-Hans.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/CommandLineParameterParserStrings.zh-Hans.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleControlStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleControlStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ecaaffc2cf4
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleControlStrings.zh-Hans.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>添加中断处理程序时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 支持服务部门联系。</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>尝试移除中断处理程序时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>获取有关控制台句柄的输入时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>检索活动控制台输出缓冲区的句柄时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>获取控制台模式时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>设置控制台模式时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>从控制台输入缓冲区读取字符时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>从控制台输入缓冲区读取输入记录时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>读取控制台输入缓冲区的内容时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>获取控制台输入缓冲区中的事件数时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>刷新控制台输入缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>获取控制台输出缓冲区信息时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>设置控制台输出缓冲区大小时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>写入控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>读取控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>在用字符填充控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>在用属性填充控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>滚动控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>设置控制台窗口信息时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>获取最大的控制台窗口大小时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>设置控制台窗口标题时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>在当前光标位置写入控制台输出缓冲区时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>设置控制台输出缓冲区的字符属性时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>获取游标信息时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>设置游标信息时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>获取控制台字体信息时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>发送键盘输入时发生 Win32 内部错误 "{0}" 0x{1:X}。请与 Microsoft 客户支持服务部门联系。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostRawUserInterfaceStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostRawUserInterfaceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostRawUserInterfaceStrings.zh-Hans.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostStrings.zh-Hans.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostStrings.zh-Hans.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceSecurityResources.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceSecurityResources.zh-Hans.resx
new file mode 100644
index 00000000000..7cf6e4b2065
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceSecurityResources.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>用户:</value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>用户 {0} 的密码:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..fc04940cb3e
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ConsoleHostUserInterfaceStrings.zh-Hans.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>“{0}”不能是 Null 或为空。</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ManagedEntranceStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ManagedEntranceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..977cf608639
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ManagedEntranceStrings.zh-Hans.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[Constrained Language Mode]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[Constrained Language AUDIT Mode : No Restrictions]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[No Language Mode]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[Restricted Language Mode]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell preview release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell stable release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} A new PowerShell LTS release is available: v{0} {2}
+  {1} Upgrade now, or check out the release page at:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>Usage: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell Online Help https://aka.ms/powershell-docs
+
+All parameters are case-insensitive.</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ProgressNodeStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ProgressNodeStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/ProgressNodeStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/TranscriptStrings.zh-Hans.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/TranscriptStrings.zh-Hans.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hans/TranscriptStrings.zh-Hans.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/CommandLineParameterParserStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/CommandLineParameterParserStrings.zh-Hant.resx
new file mode 100644
index 00000000000..45b7febbe41
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/CommandLineParameterParserStrings.zh-Hant.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandAlreadySpecified" xml:space="preserve">
+    <value>Cannot process command because a command is already specified with -Command, -CommandWithArgs, or -EncodedCommand.</value>
+  </data>
+  <data name="MissingCommandParameter" xml:space="preserve">
+    <value>Cannot process the command because of a missing parameter. A command must follow -Command.</value>
+  </data>
+  <data name="UnknownParameter" xml:space="preserve">
+    <value>Unrecognized parameter: '{0}'.</value>
+  </data>
+  <data name="TooManyParametersToCommand" xml:space="preserve">
+    <value>'-' was specified with the -Command parameter; no other arguments to -Command are permitted.</value>
+  </data>
+  <data name="StdinNotRedirected" xml:space="preserve">
+    <value>'-' was specified as the argument to -Command but standard input has not been redirected for this process.</value>
+  </data>
+  <data name="MissingOutputFormatParameter" xml:space="preserve">
+    <value>The command cannot be run because no argument has been supplied for the OutputFormat parameter.
+Specify one of the following formats for this parameter:
+{0}</value>
+  </data>
+  <data name="MissingInputFormatParameter" xml:space="preserve">
+    <value>Cannot process the command because the -InputFormat parameter requires an argument. Specify a valid format argument for this parameter.
+Valid formats are:
+{0}</value>
+  </data>
+  <data name="BadFormatParameterValue" xml:space="preserve">
+    <value>Cannot process the command because of an incorrect parameter value. "{0}" is not a valid format.
+Valid formats are:
+{1}</value>
+  </data>
+  <data name="ArgsAlreadySpecified" xml:space="preserve">
+    <value>Cannot process the command because arguments to -Command or -EncodedCommand have already been specified with -EncodedArguments.</value>
+  </data>
+  <data name="MissingArgsValue" xml:space="preserve">
+    <value>Cannot process the command because -EncodedArguments requires a value. Specify a value for the -EncodedArguments parameter.</value>
+  </data>
+  <data name="MissingFileArgument" xml:space="preserve">
+    <value>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.</value>
+  </data>
+  <data name="MissingWindowStyleArgument" xml:space="preserve">
+    <value>Cannot process the command because -WindowStyle requires an argument that is normal, hidden, minimized or maximized. Specify one of these argument values and try again.</value>
+  </data>
+  <data name="InvalidFileArgument" xml:space="preserve">
+    <value>Processing -File '{0}' failed: {1} Specify a valid path for the -File parameter.</value>
+  </data>
+  <data name="InvalidWindowStyleArgument" xml:space="preserve">
+    <value>Processing -WindowStyle '{0}' failed: {1}.</value>
+  </data>
+  <data name="InvalidFileArgumentExtension" xml:space="preserve">
+    <value>Processing -File '{0}' failed because the file does not have a '.ps1' extension. Specify a valid PowerShell script file name, and then try again.</value>
+  </data>
+  <data name="ArgumentFileDoesNotExist" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="BadArgsValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedArguments is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="BadCommandValue" xml:space="preserve">
+    <value>Cannot process the command because the value specified with -EncodedCommand is not properly encoded. The value must be Base64 encoded.</value>
+  </data>
+  <data name="MissingExecutionPolicyParameter" xml:space="preserve">
+    <value>Cannot process the execution policy because of a missing policy name. A policy name must follow -ExecutionPolicy.</value>
+  </data>
+  <data name="MtaStaMutuallyExclusive" xml:space="preserve">
+    <value>Cannot process the command because -STA and -MTA are both specified. Specify either -STA or -MTA.</value>
+  </data>
+  <data name="MissingConfigurationNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationName requires an argument that is a remote endpoint configuration name. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingConfigurationFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -ConfigurationFile requires an argument that is a session configuration (.pssc) file path. Specify this argument and try again.</value>
+  </data>
+  <data name="MissingCustomPipeNameArgument" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName requires an argument that is a name of the pipe you want to use. Specify this argument and try again.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because -CustomPipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="MissingSettingsFileArgument" xml:space="preserve">
+    <value>Cannot process the command because -SettingsFile requires an argument that is a file path.</value>
+  </data>
+  <data name="InvalidSettingsFileArgument" xml:space="preserve">
+    <value>Processing -SettingsFile '{0}' failed: {1}. Specify a valid path for the -SettingsFile parameter.</value>
+  </data>
+  <data name="SettingsFileNotExists" xml:space="preserve">
+    <value>The argument '{0}' passed to the -SettingsFile does not exist. Provide the path to an existing json file as an argument to the -SettingsFile parameter.</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>Invalid argument '{0}', did you mean:</value>
+  </data>
+  <data name="WindowStyleArgumentNotImplemented" xml:space="preserve">
+    <value>Parameter -WindowStyle is not implemented on this platform.</value>
+  </data>
+  <data name="MissingWorkingDirectoryArgument" xml:space="preserve">
+    <value>Cannot process the command because -WorkingDirectory requires an argument that is a directory path.</value>
+  </data>
+  <data name="MTANotImplemented" xml:space="preserve">
+    <value>Parameter -MTA is not supported on this platform.</value>
+  </data>
+  <data name="STANotImplemented" xml:space="preserve">
+    <value>Parameter -STA is not supported on this platform.</value>
+  </data>
+  <data name="NullElementInArgs" xml:space="preserve">
+    <value>The specified arguments must not contain null elements.</value>
+  </data>
+  <data name="InvalidExecutionPolicyArgument" xml:space="preserve">
+    <value>Invalid ExecutionPolicy value '{0}'.</value>
+  </data>
+  <data name="MissingMandatoryArgument" xml:space="preserve">
+    <value>An argument is required to be supplied to the '{0}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleControlStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleControlStrings.zh-Hant.resx
new file mode 100644
index 00000000000..15d52a6c619
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleControlStrings.zh-Hant.resx
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AddBreakHandlerExceptionMessage" xml:space="preserve">
+    <value>新增中斷處理常式時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 支援服務。</value>
+  </data>
+  <data name="RemoveBreakHandlerExceptionTemplate" xml:space="preserve">
+    <value>嘗試移除中斷處理常式時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetInputModeExceptionTemplate" xml:space="preserve">
+    <value>取得主控台控制代碼的輸入時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetActiveScreenBufferHandleExceptionTemplate" xml:space="preserve">
+    <value>擷取使用中主控台輸出緩衝區的控制代碼時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetModeExceptionTemplate" xml:space="preserve">
+    <value>取得主控台模式時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetModeExceptionTemplate" xml:space="preserve">
+    <value>設定主控台模式時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="ReadConsoleExceptionTemplate" xml:space="preserve">
+    <value>從主控台輸入緩衝區讀取字元時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="ReadConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>從主控台輸入緩衝區讀取輸入記錄時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="PeekConsoleInputExceptionTemplate" xml:space="preserve">
+    <value>讀取主控台輸入緩衝區的內容時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetNumberOfConsoleInputEventsExceptionTemplate" xml:space="preserve">
+    <value>取得主控台輸入緩衝區中的事件數目時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="FlushConsoleInputBufferExceptionTemplate" xml:space="preserve">
+    <value>排清主控台輸入緩衝區時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetConsoleScreenBufferInfoExceptionTemplate" xml:space="preserve">
+    <value>取得主控台輸出緩衝區資訊時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetConsoleScreenBufferSizeExceptionTemplate" xml:space="preserve">
+    <value>設定主控台輸出緩衝區大小時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="WriteConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>寫入主控台輸出緩衝區時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="ReadConsoleOutputExceptionTemplate" xml:space="preserve">
+    <value>讀取主控台輸出緩衝區時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="FillConsoleOutputCharacterExceptionTemplate" xml:space="preserve">
+    <value>填入主控台輸出緩衝區字元時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="FillConsoleOutputAttributeExceptionTemplate" xml:space="preserve">
+    <value>填入主控台輸出緩衝區屬性時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="ScrollConsoleScreenBufferExceptionTemplate" xml:space="preserve">
+    <value>捲動主控台輸出緩衝區時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetConsoleWindowInfoExceptionTemplate" xml:space="preserve">
+    <value>設定主控台視窗資訊時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetLargestConsoleWindowSizeExceptionTemplate" xml:space="preserve">
+    <value>取得最大主控台視窗大小時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetConsoleWindowTitleExceptionTemplate" xml:space="preserve">
+    <value>設定主控台視窗標題時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="WriteConsoleExceptionTemplate" xml:space="preserve">
+    <value>在目前游標位置寫入主控台輸出緩衝區時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetConsoleTextAttributeExceptionTemplate" xml:space="preserve">
+    <value>設定主控台輸出緩衝區字元屬性時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>取得游標資訊時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SetConsoleCursorInfoExceptionTemplate" xml:space="preserve">
+    <value>設定游標資訊時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="GetConsoleFontInfoExceptionTemplate" xml:space="preserve">
+    <value>取得主控台字型資訊時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+  <data name="SendKeyPressInputExceptionTemplate" xml:space="preserve">
+    <value>傳送鍵盤輸入時發生 Win32 內部錯誤 "{0}" 0x{1:X}。請連絡 Microsoft 客戶支援服務。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostRawUserInterfaceStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostRawUserInterfaceStrings.zh-Hant.resx
new file mode 100644
index 00000000000..77bd074831d
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostRawUserInterfaceStrings.zh-Hant.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CoordinateOutOfBufferErrorTemplate" xml:space="preserve">
+    <value>Cannot process the operation because the supplied coordinate is not valid. Specify a coordinate within the buffer area of {0}.</value>
+  </data>
+  <data name="InvalidBufferSizeError" xml:space="preserve">
+    <value>Cannot set the buffer size because the size specified is too large or too small.</value>
+  </data>
+  <data name="InvalidConsoleColorError" xml:space="preserve">
+    <value>Cannot set the console color because the value specified is not valid. Specify a valid color as defined by the System.ConsoleColor type.</value>
+  </data>
+  <data name="InvalidCursorSizeError" xml:space="preserve">
+    <value>Cannot process CursorSize because the cursor size specified is not valid.</value>
+  </data>
+  <data name="InvalidReadKeyOptionsError" xml:space="preserve">
+    <value>Cannot read key options. To read options, set one or both of the following: IncludeKeyDown, IncludeKeyUp.</value>
+  </data>
+  <data name="InvalidRegionErrorTemplate" xml:space="preserve">
+    <value>{0} should be greater than or equal to {1}.</value>
+  </data>
+  <data name="InvalidXWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window X (column) position because it extends past the width of the screen buffer. Specify another X position, starting with 0 as the left most column of the buffer.</value>
+  </data>
+  <data name="InvalidYWindowPositionError" xml:space="preserve">
+    <value>Cannot use the specified Window Y (row) position because it extends past the height of the screen buffer. Specify another Y position, starting with 0 as the top-most row of the buffer.</value>
+  </data>
+  <data name="WindowWidthTooSmallError" xml:space="preserve">
+    <value>Window width cannot be less than 1.</value>
+  </data>
+  <data name="WindowHeightTooSmallError" xml:space="preserve">
+    <value>Window height must be at least 1.</value>
+  </data>
+  <data name="WindowWidthLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be wider than the screen buffer.</value>
+  </data>
+  <data name="WindowHeightLargerThanBufferError" xml:space="preserve">
+    <value>Window cannot be taller than the screen buffer.</value>
+  </data>
+  <data name="WindowWidthTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be wider than {0}.</value>
+  </data>
+  <data name="WindowHeightTooLargeErrorTemplate" xml:space="preserve">
+    <value>Window cannot be taller than {0}.</value>
+  </data>
+  <data name="WindowTooNarrowError" xml:space="preserve">
+    <value>Window size is too narrow.</value>
+  </data>
+  <data name="WindowTooShortError" xml:space="preserve">
+    <value>Window size is too short.</value>
+  </data>
+  <data name="WindowTitleTooShortError" xml:space="preserve">
+    <value>Window title cannot be empty.</value>
+  </data>
+  <data name="WindowTitleTooLongErrorTemplate" xml:space="preserve">
+    <value>Window title cannot be longer than {0} characters.</value>
+  </data>
+  <data name="WindowTitleElevatedPrefix" xml:space="preserve">
+    <value>Administrator: </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostStrings.zh-Hant.resx
new file mode 100644
index 00000000000..bf7ab57b1a3
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostStrings.zh-Hant.resx
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TooManyNestedPromptsError" xml:space="preserve">
+    <value>Cannot display prompt because too many nested prompts are already running.</value>
+  </data>
+  <data name="InputExitCurrentLoopOutOfSyncError" xml:space="preserve">
+    <value>Cannot process input loop. ExitCurrentLoop was called when no InputLoops were running.</value>
+  </data>
+  <data name="DefaultPrompt" xml:space="preserve">
+    <value>PS&gt;</value>
+  </data>
+  <data name="ShellCannotBeStarted" xml:space="preserve">
+    <value>The shell cannot be started. A failure occurred during initialization:</value>
+  </data>
+  <data name="ShellCannotBeStartedWithConfigConflict" xml:space="preserve">
+    <value>The shell cannot be started. An InitialSessionState object has been provided along with a -ConfigurationFile argument. Both configuration directives cannot be used at the same time.</value>
+  </data>
+  <data name="UnhandledExceptionShutdownMessage" xml:space="preserve">
+    <value>An error has occurred that was not properly handled. Additional information is shown below. The PowerShell process will exit.</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username  : {1}\{2}
+Machine   : {3} ({4})
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InitialCommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' could not be run because some PowerShell Snap-Ins did not load.</value>
+  </data>
+  <data name="CommandNotExecuted" xml:space="preserve">
+    <value>Command '{0}' was not run as the session in which it was intended to run was either closed or broken</value>
+  </data>
+  <data name="EnteringDebugger" xml:space="preserve">
+    <value>Entering debug mode. Use h or ? for help. </value>
+  </data>
+  <data name="HitBreakpoint" xml:space="preserve">
+    <value>Hit {0}</value>
+  </data>
+  <data name="DebuggerSourceCodeFormat" xml:space="preserve">
+    <value>{0}:{1,-3} {2}</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; execution will continue.
+
+</value>
+  </data>
+  <data name="CannotLoadPSReadline" xml:space="preserve">
+    <value>Cannot load PSReadline module.  Console is running without PSReadline.</value>
+  </data>
+  <data name="ConflictingServerModeParameters" xml:space="preserve">
+    <value>More than one server mode parameter was specified. Server mode parameters must be used exclusively.</value>
+  </data>
+  <data name="SlowProfileLoadingMessage" xml:space="preserve">
+    <value>Loading personal and system profiles took {0}ms.</value>
+  </data>
+  <data name="RunAsAdministrator" xml:space="preserve">
+    <value>Run as Administrator</value>
+  </data>
+  <data name="PushRunspaceNotRemote" xml:space="preserve">
+    <value>PushRunspace can only push a remote runspace.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>The '{0}' parameter is mandatory and must be specified when using the '{1}' parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceSecurityResources.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceSecurityResources.zh-Hant.resx
new file mode 100644
index 00000000000..fba4efa1319
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceSecurityResources.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_User" xml:space="preserve">
+    <value>使用者:</value>
+  </data>
+  <data name="PromptForCredential_Password" xml:space="preserve">
+    <value>使用者 {0} 的密碼：</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceStrings.zh-Hant.resx
new file mode 100644
index 00000000000..b1916ede67f
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ConsoleHostUserInterfaceStrings.zh-Hant.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptEmptyDescriptionsErrorTemplate" xml:space="preserve">
+    <value>The "{0}" collection must have at least one element.</value>
+  </data>
+  <data name="PromptParseOverflowErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to an overflow error.</value>
+  </data>
+  <data name="PromptParseFormatErrorTemplate" xml:space="preserve">
+    <value>Cannot recognize "{1}" as a {0} due to a format error.</value>
+  </data>
+  <data name="PromptUnrecognizedCommandErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be recognized as a valid Prompt command.</value>
+  </data>
+  <data name="PromptNoHelpAvailableErrorTemplate" xml:space="preserve">
+    <value>No help is available for {0}.</value>
+  </data>
+  <data name="PromptFieldPromptInputSeparatorTemplate" xml:space="preserve">
+    <value>{0}: </value>
+  </data>
+  <data name="RankZeroArrayErrorTemplate" xml:space="preserve">
+    <value>The field "{0}" is a zero rank array.</value>
+  </data>
+  <data name="EmptyChoicesErrorTemplate" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceErrorTemplate" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}" or -1 for no default choice.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="PromptForChoiceHelp" xml:space="preserve">
+    <value>[?] Help </value>
+  </data>
+  <data name="PromptCanceledError" xml:space="preserve">
+    <value>The prompt was canceled.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="PromptTypeLoadErrorTemplate" xml:space="preserve">
+    <value>Cannot display the prompt for "{0}" because type "{1}" cannot be loaded.</value>
+  </data>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>"{0}" 不可以是 Null 或空的。</value>
+  </data>
+  <data name="NullErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be null.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>(Type !? for Help.)</value>
+  </data>
+  <data name="DefaultChoicePrompt" xml:space="preserve">
+    <value>(default is "{0}"): </value>
+  </data>
+  <data name="DefaultChoiceForMultipleChoices" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="ReadFailsOnNonInteractiveFlag" xml:space="preserve">
+    <value>PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ManagedEntranceStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ManagedEntranceStrings.zh-Hant.resx
new file mode 100644
index 00000000000..49744d65ee6
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ManagedEntranceStrings.zh-Hant.resx
@@ -0,0 +1,493 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShellBannerPowerShell" xml:space="preserve">
+    <value>PowerShell {0}</value>
+  </data>
+  <data name="ShellBannerCLMode" xml:space="preserve">
+    <value>[限制語言模式]</value>
+  </data>
+  <data name="ShellBannerCLAuditMode" xml:space="preserve">
+    <value>[限制語言稽核模式: 無限制]</value>
+  </data>
+  <data name="ShellBannerNLMode" xml:space="preserve">
+    <value>[沒有語言模式]</value>
+  </data>
+  <data name="ShellBannerRLMode" xml:space="preserve">
+    <value>[限制語言模式]</value>
+  </data>
+  <data name="PreviewUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 有新的 PowerShell 預覽版本可供使用: 版本 {0} {2}
+  {1} 立即升級，或於下列發行頁面查看:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="StableUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 有新的 PowerShell 穩定版本可供使用: 版本 {0} {2}
+  {1} 立即升級，或於下列發行頁面查看:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="LTSUpdateNotificationMessage" xml:space="preserve">
+    <value>  {1} 有新的 PowerShell LTS 版本可供使用: 版本 {0} {2}
+  {1} 立即升級，或於下列發行頁面查看:{3}{2}
+  {1}   https://aka.ms/PowerShell-Release?tag=v{0} {4}{2}
+</value>
+  </data>
+  <data name="UsageHelp" xml:space="preserve">
+    <value>使用方式: pwsh[.exe] [-Login] [[-File] &lt;filePath&gt; [args]]
+                  [-Command { - | &lt;script-block&gt; [-args &lt;arg-array&gt;]
+                                | &lt;string&gt; [&lt;CommandParameters&gt;] } ]
+                  [-CommandWithArgs &lt;string&gt; [&lt;CommandParameters&gt;]
+                  [-ConfigurationName &lt;string&gt;] [-ConfigurationFile &lt;filePath&gt;]
+                  [-CustomPipeName &lt;string&gt;] [-EncodedCommand &lt;Base64EncodedCommand&gt;]
+                  [-ExecutionPolicy &lt;ExecutionPolicy&gt;] [-InputFormat {Text | XML}]
+                  [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
+                  [-NoProfileLoadTime] [-OutputFormat {Text | XML}]
+                  [-SettingsFile &lt;filePath&gt;] [-SSHServerMode] [-STA]
+                  [-Version] [-WindowStyle &lt;style&gt;]
+                  [-WorkingDirectory &lt;directoryPath&gt;]
+
+       pwsh[.exe] -h | -Help | -? | /?
+
+PowerShell 線上說明 https://aka.ms/powershell-docs
+
+所有參數都不區分大小寫。</value>
+  </data>
+  <data name="ExtendedHelp" xml:space="preserve">
+    <value>
+
+-File | -f
+
+    If the value of File is "-", the command text is read from standard input.
+    Running "pwsh -File -" without redirected standard input starts a regular
+    session. This is the same as not specifying the File parameter at all.
+
+    This is the default parameter if no parameters are present but values are
+    present in the command line. The specified script runs in the local scope
+    ("dot-sourced"), so that the functions and variables that the script
+    creates are available in the current session. Enter the script file path
+    and any parameters. File must be the last parameter in the command, because
+    all characters typed after the File parameter name are interpreted as the
+    script file path followed by the script parameters.
+
+    Typically, the switch parameters of a script are either included or
+    omitted. For example, the following command uses the All parameter of the
+    Get-Script.ps1 script file: "-File .\Get-Script.ps1 -All"
+
+    In rare cases, you might need to provide a BOOLEAN value for a switch
+    parameter. To provide a BOOLEAN value for a switch parameter in the value
+    of the FILE parameter, Use the parameter normally followed immediately by a
+    colon and the boolean value, such as the following:
+    "-File .\Get-Script.ps1 -All:$False".
+
+    Parameters passed to the script are passed as literal strings, after
+    interpretation by the current shell. For example, if you are in cmd.exe and
+    want to pass an environment variable value, you would use the cmd.exe
+    syntax: "pwsh -File .\test.ps1 -TestParam %windir%"
+
+    In contrast, running "pwsh -File .\test.ps1 -TestParam $env:windir" in
+    cmd.exe results in the script receiving the literal string "$env:windir"
+    because it has no special meaning to the current cmd.exe shell. The
+    "$env:windir" style of environment variable reference can be used inside a
+    Command parameter, since there it is interpreted as PowerShell code.
+
+    Similarly, if you want to execute the same command from a Batch script,
+    you would use "%~dp0" instead of ".\" or "$PSScriptRoot" to represent the current
+    execution directory: "pwsh -File %~dp0test.ps1 -TestParam %windir%". If you
+    instead used ".\test.ps1", PowerShell would throw an error because it cannot
+    find the literal path ".\test.ps1".
+
+    When the script file invoked terminates with an exit command, the process
+    exit code is set to the numeric argument used with the exit command. With
+    normal termination, the exit code is always 0.
+
+    Similar to -Command, when a script-terminating error occurs, the exit code
+    is set to 1. However, unlike with -Command, when the execution is
+    interrupted with Ctrl-C the exit code is 0.
+
+-Command | -c
+
+    Executes the specified commands (and any parameters) as though they were
+    typed at the PowerShell command prompt, and then exits, unless the NoExit
+    parameter is specified.
+
+    The value of Command can be "-", a script block, or a string. If the value
+    of Command is "-", the command text is read from standard input.
+
+    The Command parameter only accepts a script block for execution when it can
+    recognize the value passed to Command as a ScriptBlock type. This is only
+    possible when running pwsh from another PowerShell host. The ScriptBlock
+    type may be contained in an existing variable, returned from an expression,
+    or parsed by the PowerShell host as a literal script block enclosed in
+    curly braces "{}", before being passed to pwsh.
+
+        pwsh -Command {Get-WinEvent -LogName security}
+
+    In cmd.exe, there is no such thing as a script block (or ScriptBlock type),
+    so the value passed to Command will always be a string. You can write a
+    script block inside the string, but instead of being executed it will
+    behave exactly as though you typed it at a typical PowerShell prompt,
+    printing the contents of the script block back out to you.
+
+    A string passed to Command is still executed as PowerShell script, so the
+    script block curly braces are often not required in the first place when
+    running from cmd.exe. To execute an inline script block defined inside a
+    string, the call operator "&amp;" can be used:
+
+        pwsh -Command "&amp; {Get-WinEvent -LogName security}"
+
+    If the value of Command is a string, Command must be the last parameter for
+    pwsh, because all arguments following it are interpreted as part of the
+    command to execute.
+
+    When called from within an existing PowerShell session, the results are
+    returned to the parent shell as deserialized XML objects, not live objects.
+    For other shells, the results are returned as strings.
+
+    If the value of Command is "-", the command text is read from standard
+    input. You must redirect standard input when using the Command parameter
+    with standard input. For example:
+
+        @'
+        "in"
+
+        "hi" |
+        % { "$_ there" }
+
+        "out"
+        '@ | powershell -NoProfile -Command -
+
+    This example produces the following output:
+
+        in
+        hi there
+        out
+
+    The process exit code is determined by status of the last (executed)
+    command within the script block. The exit code is 0 when $? is $true or 1
+    when $? is $false. If the last command is an external program or a
+    PowerShell script that explicitly sets an exit code other than 0 or 1, that
+    exit code is converted to 1 for process exit code. To preserve the specific
+    exit code, add exit $LASTEXITCODE to your command string or script block.
+
+    Similarly, the value 1 is returned when a script-terminating
+    (runspace-terminating) error, such as a throw or -ErrorAction Stop, occurs
+    or when execution is interrupted with Ctrl-C.
+
+-CommandWithArgs | -cwa
+
+    [Experimental]
+    Executes a PowerShell command with arguments.  Unlike `-Command`, this
+    parameter populates the `$args built-in variable which can be used by the
+    command.
+
+    The first string is the command and subsequent strings delimited by whitespace
+    are the arguments.
+
+    For example:
+
+        pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
+
+    This example produces the following output:
+
+        arg: arg1
+        arg: arg2
+
+-ConfigurationName | -config
+
+    Specifies a configuration endpoint in which PowerShell is run. This can be
+    any endpoint registered on the local machine including the default
+    PowerShell remoting endpoints or a custom endpoint having specific user
+    role capabilities.
+
+    Example: "pwsh -ConfigurationName AdminRoles"
+
+-ConfigurationFile
+
+    Specifies a session configuration (.pssc) file path. The configuration
+    contained in the configuration file will be applied to the PowerShell
+    session.
+
+    Example: "pwsh -ConfigurationFile "C:\ProgramData\PowerShell\MyConfig.pssc"
+
+-CustomPipeName
+
+    Specifies the name to use for an additional IPC server (named pipe) used
+    for debugging and other cross-process communication. This offers a
+    predictable mechanism for connecting to other PowerShell instances.
+    Typically used with the CustomPipeName parameter on "Enter-PSHostProcess".
+
+    This parameter was introduced in PowerShell 6.2.
+
+    For example:
+
+        # PowerShell instance 1
+        pwsh -CustomPipeName mydebugpipe
+        # PowerShell instance 2
+        Enter-PSHostProcess -CustomPipeName mydebugpipe
+
+-EncodedCommand | -e | -ec
+
+    Accepts a Base64-encoded string version of a command. Use this parameter to
+    submit commands to PowerShell that require complex, nested quoting. The
+    Base64 representation must be a UTF-16 encoded string.
+
+    For example:
+
+        $command = 'dir "c:\program files" '
+        $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
+        $encodedCommand = [Convert]::ToBase64String($bytes)
+        pwsh -encodedcommand $encodedCommand
+
+-ExecutionPolicy | -ex | -ep
+
+    Sets the default execution policy for the current session and saves it in
+    the $env:PSExecutionPolicyPreference environment variable. This parameter
+    does not change the persistently configured execution policies.
+
+    This parameter only applies to Windows computers. The
+    $env:PSExecutionPolicyPreference environment variable does not exist on
+    non-Windows platforms.
+
+-InputFormat | -inp | -if
+
+    Describes the format of data sent to PowerShell. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+-Interactive | -i
+
+    Present an interactive prompt to the user. Inverse for NonInteractive
+    parameter.
+
+-Login | -l
+
+    On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
+    execute login profiles such as /etc/profile and ~/.profile. On Windows,
+    this switch does nothing.
+
+    [!IMPORTANT] This parameter must come first to start PowerShell as a login
+    shell. The parameter is ignored if passed in any other position.
+
+    To set up pwsh as the login shell on UNIX-like operating systems:
+
+    - Verify that the full absolute path to pwsh is listed under /etc/shells
+
+      - This path is usually something like /usr/bin/pwsh on Linux or
+        /usr/local/bin/pwsh on macOS
+      - With some installation methods, this entry will be added
+        automatically at installation time
+      - If pwsh is not present in /etc/shells, use an editor to append the
+        path to pwsh on the last line. This requires elevated privileges to
+        edit.
+
+    - Use the chsh utility to set your current user's shell to pwsh:
+
+        chsh -s /usr/bin/pwsh
+
+    [!WARNING] Setting pwsh as the login shell is currently not supported on
+    Windows Subsystem for Linux (WSL), and attempting to set pwsh as the
+    login shell there may lead to being unable to start WSL interactively.
+
+-MTA
+
+    Start PowerShell using a multi-threaded apartment. This switch is only
+    available on Windows.
+
+-NoExit | -noe
+
+    Does not exit after running startup commands.
+
+    Example: "pwsh -NoExit -Command Get-Date"
+
+-NoLogo | -nol
+
+    Hides the banner text at startup of interactive sessions.
+
+-NonInteractive | -noni
+
+    This switch is used to create sessions that shouldn't require user input.
+    This is useful for scripts that run in scheduled tasks or CI/CD pipelines.
+    Any attempts to use interactive features, like 'Read-Host' or confirmation
+    prompts, result in statement terminating errors rather than hanging.
+
+-NoProfile | -nop
+
+    Does not load the PowerShell profiles.
+
+-NoProfileLoadTime
+
+    Hides the PowerShell profile load time text shown at startup when the load
+    time exceeds 500 milliseconds.
+
+-OutputFormat | -o | -of
+
+    Determines how output from PowerShell is formatted. Valid values are "Text"
+    (text strings) or "XML" (serialized CLIXML format).
+
+    Example: "pwsh -o XML -c Get-Date"
+
+    When called within a PowerShell session, you get deserialized objects as
+    output rather plain strings. When called from other shells, the output is
+    string data formatted as CLIXML text.
+
+-SettingsFile | -settings
+
+    Overrides the system-wide "powershell.config.json" settings file for the
+    session. By default, system-wide settings are read from the
+    "powershell.config.json" in the "$PSHOME" directory.
+
+    Note that these settings are not used by the endpoint specified by the
+    "-ConfigurationName" argument.
+
+    Example: "pwsh -SettingsFile c:\myproject\powershell.config.json"
+
+-SSHServerMode | -sshs
+
+    Used in sshd_config for running PowerShell as an SSH subsystem. It is not
+    intended or supported for any other use.
+
+-STA
+
+    Start PowerShell using a single-threaded apartment. This is the default.
+    This switch is only available on Windows.
+
+-Version | -v
+
+    Displays the version of PowerShell. Additional parameters are ignored.
+
+-WindowStyle | -w
+
+    Sets the window style for the session. Valid values are Normal, Minimized,
+    Maximized, and Hidden.
+
+-WorkingDirectory | -wd
+
+    Sets the initial working directory by executing at startup. Any valid
+    PowerShell file path is supported.
+
+    To start PowerShell in your home directory, use: pwsh -WorkingDirectory ~
+
+-Help, -?, /?
+
+    Displays help for pwsh. If you are typing a pwsh command in PowerShell,
+    prepend the command parameters with a hyphen (-), not a forward slash (/).
+    </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ProgressNodeStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ProgressNodeStrings.zh-Hant.resx
new file mode 100644
index 00000000000..ac7d9c8c173
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/ProgressNodeStrings.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SecondsRemaining" xml:space="preserve">
+    <value>{0}{1} remaining. </value>
+  </data>
+  <data name="InvisibleNodesMessageSingular" xml:space="preserve">
+    <value>{0} activity not shown...</value>
+  </data>
+  <data name="InvisibleNodesMessagePlural" xml:space="preserve">
+    <value>{0} activities not shown...</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/TranscriptStrings.zh-Hant.resx b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/TranscriptStrings.zh-Hant.resx
new file mode 100644
index 00000000000..d23d6495940
--- /dev/null
+++ b/src/Microsoft.PowerShell.ConsoleHost/resources/zh-Hant/TranscriptStrings.zh-Hant.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TranscriptionStarted" xml:space="preserve">
+    <value>Transcript started, output file is {0}</value>
+  </data>
+  <data name="TranscriptionStopped" xml:space="preserve">
+    <value>Transcript stopped, output file is {0}</value>
+  </data>
+  <data name="CannotStartTranscription" xml:space="preserve">
+    <value>Transcription cannot be started due to the error: {0}</value>
+  </data>
+  <data name="ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="TranscriptFileReadOnly" xml:space="preserve">
+    <value>File {0} is read-only. Cannot write to this file. "Start-Transcript -Force" will clear the read-only attribute.</value>
+  </data>
+  <data name="MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="TranscriptFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ErrorStoppingTranscript" xml:space="preserve">
+    <value>An error occurred stopping transcription: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/EngineInstaller.cs b/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/EngineInstaller.cs
deleted file mode 100644
index 1b3f939158f..00000000000
--- a/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/EngineInstaller.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.IO;
-using System.Management.Automation;
-using System.Reflection;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// EngineInstaller is a class for facilitating registry of necessary
-    /// information for monad engine.
-    ///
-    /// This class will be built with monad console host dll
-    /// (System.Management.Automation.dll).
-    ///
-    /// At install time, installation utilities (like InstallUtil.exe) will
-    /// call install this engine assembly based on the implementation in
-    /// this class.
-    ///
-    /// This class derives from base class PSInstaller. PSInstaller will
-    /// handle the details about how information got written into registry.
-    /// Here, the information about registry content is provided.
-    /// </summary>
-    [RunInstaller(true)]
-    public sealed class EngineInstaller : PSInstaller
-    {
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        public EngineInstaller()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// </summary>
-        internal sealed override string RegKey
-        {
-            get
-            {
-                return RegistryStrings.MonadEngineKey;
-            }
-        }
-
-        private static string EngineVersion
-        {
-            get
-            {
-                return PSVersionInfo.FeatureVersionString;
-            }
-        }
-
-        private Dictionary<string, object> _regValues = null;
-        /// <summary>
-        /// </summary>
-        internal sealed override Dictionary<string, object> RegValues
-        {
-            get
-            {
-                if (_regValues == null)
-                {
-                    _regValues = new Dictionary<string, object>();
-                    _regValues[RegistryStrings.MonadEngine_MonadVersion] = EngineVersion;
-                    _regValues[RegistryStrings.MonadEngine_ApplicationBase] = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
-                    _regValues[RegistryStrings.MonadEngine_ConsoleHostAssemblyName] = Assembly.GetExecutingAssembly().FullName;
-                    _regValues[RegistryStrings.MonadEngine_ConsoleHostModuleName] = Assembly.GetExecutingAssembly().Location;
-                    _regValues[RegistryStrings.MonadEngine_RuntimeVersion] = Assembly.GetExecutingAssembly().ImageRuntimeVersion;
-                }
-
-                return _regValues;
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/MshHostMshSnapin.cs b/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/MshHostMshSnapin.cs
deleted file mode 100644
index c532aeb190d..00000000000
--- a/src/Microsoft.PowerShell.ConsoleHost/singleshell/installer/MshHostMshSnapin.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.ComponentModel;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// PSHostMshSnapin (or PSHostMshSnapinInstaller) is a class for facilitating registry
-    /// of necessary information for monad host mshsnapin.
-    ///
-    /// This class will be built with monad host engine dll
-    /// (Microsoft.PowerShell.ConsoleHost.dll).
-    /// </summary>
-    [RunInstaller(true)]
-    public sealed class PSHostPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of this class.
-        /// </summary>
-        public PSHostPSSnapIn()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// Get name of this mshsnapin.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return RegistryStrings.HostMshSnapinName;
-            }
-        }
-
-        /// <summary>
-        /// Get the default vendor string for this mshsnapin.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for vendor. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "HostMshSnapInResources,Vendor";
-            }
-        }
-
-        /// <summary>
-        /// Get the default description string for this mshsnapin.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This PSSnapIn contains cmdlets used by the MSH host.";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for description. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "HostMshSnapInResources,Description";
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs
index d4e566890f0..32ce9993cfb 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProvider.cs
@@ -107,7 +107,7 @@ private unsafe void EtwRegister()
         }
 
         //
-        // implement Dispose Pattern to early deregister from ETW insted of waiting for
+        // implement Dispose Pattern to early deregister from ETW instead of waiting for
         // the finalizer to call deregistration.
         // Once the user is done with the provider it needs to call Close() or Dispose()
         // If neither are called the finalizer will unregister the provider anyway
@@ -131,7 +131,10 @@ protected virtual void Dispose(bool disposing)
             //
             // check if the object has been already disposed
             //
-            if (_disposed == 1) return;
+            if (_disposed == 1)
+            {
+                return;
+            }
 
             if (Interlocked.Exchange(ref _disposed, 1) != 0)
             {
@@ -291,8 +294,7 @@ to fill the passed in ETW data descriptor.
         {
             dataDescriptor->Reserved = 0;
 
-            string sRet = data as string;
-            if (sRet != null)
+            if (data is string sRet)
             {
                 dataDescriptor->Size = (uint)((sRet.Length + 1) * 2);
                 return sRet;
@@ -331,10 +333,10 @@ to fill the passed in ETW data descriptor.
                 *uintptr = (uint)data;
                 dataDescriptor->DataPointer = (ulong)uintptr;
             }
-            else if (data is UInt64)
+            else if (data is ulong)
             {
                 dataDescriptor->Size = (uint)sizeof(ulong);
-                UInt64* ulongptr = (ulong*)dataBuffer;
+                ulong* ulongptr = (ulong*)dataBuffer;
                 *ulongptr = (ulong)data;
                 dataDescriptor->DataPointer = (ulong)ulongptr;
             }
@@ -437,10 +439,7 @@ public bool WriteMessageEvent(string eventMessage, byte eventLevel, long eventKe
         {
             int status = 0;
 
-            if (eventMessage == null)
-            {
-                throw new ArgumentNullException(nameof(eventMessage));
-            }
+            ArgumentNullException.ThrowIfNull(eventMessage);
 
             if (IsEnabled(eventLevel, eventKeywords))
             {
@@ -508,10 +507,7 @@ public bool WriteEvent(in EventDescriptor eventDescriptor, string data)
         {
             uint status = 0;
 
-            if (data == null)
-            {
-                throw new ArgumentNullException("dataString");
-            }
+            ArgumentNullException.ThrowIfNull(data);
 
             if (IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords))
             {
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs
index 7264e485468..1c82891b654 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/EventProviderTraceListener.cs
@@ -41,8 +41,7 @@ public string Delimiter
             [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
             set
             {
-                if (value == null)
-                    throw new ArgumentNullException("Delimiter");
+                ArgumentNullException.ThrowIfNull(value, nameof(Delimiter));
 
                 if (value.Length == 0)
                     throw new ArgumentException(DotNetEventingStrings.Argument_NeedNonemptyDelimiter);
@@ -72,8 +71,7 @@ public EventProviderTraceListener(string providerId, string name)
         public EventProviderTraceListener(string providerId, string name, string delimiter)
             : base(name)
         {
-            if (delimiter == null)
-                throw new ArgumentNullException(nameof(delimiter));
+            ArgumentNullException.ThrowIfNull(delimiter);
 
             if (delimiter.Length == 0)
                 throw new ArgumentException(DotNetEventingStrings.Argument_NeedNonemptyDelimiter);
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs
index 007cf74891e..df2b064ebd5 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs
@@ -307,7 +307,7 @@ public static void EvtClearLog(
 
         [System.Security.SecurityCritical]
         public static EventLogHandle EvtCreateRenderContext(
-                            Int32 valuePathsCount,
+                            int valuePathsCount,
                             string[] valuePaths,
                             UnsafeNativeMethods.EvtRenderContextFlags flags)
         {
@@ -939,7 +939,7 @@ public static void EvtRenderBufferWithContextSystem(EventLogHandle contextHandle
                             break;
                     }
 
-                    pointer = new IntPtr(((Int64)pointer + Marshal.SizeOf(varVal)));
+                    pointer = new IntPtr(((long)pointer + Marshal.SizeOf(varVal)));
                 }
             }
             finally
@@ -984,7 +984,7 @@ public static IList<object> EvtRenderBufferWithContextUserOrValues(EventLogHandl
                     {
                         UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure<UnsafeNativeMethods.EvtVariant>(pointer);
                         valuesList.Add(ConvertToObject(varVal));
-                        pointer = new IntPtr(((Int64)pointer + Marshal.SizeOf(varVal)));
+                        pointer = new IntPtr(((long)pointer + Marshal.SizeOf(varVal)));
                     }
                 }
 
@@ -1106,7 +1106,7 @@ public static IEnumerable<string> EvtFormatMessageRenderKeywords(EventLogHandle
                         break;
                     keywordsList.Add(s);
                     // nr of bytes = # chars * 2 + 2 bytes for character '\0'.
-                    pointer = new IntPtr((Int64)pointer + (s.Length * 2) + 2);
+                    pointer = new IntPtr((long)pointer + (s.Length * 2) + 2);
                 }
 
                 return keywordsList.AsReadOnly();
@@ -1270,23 +1270,23 @@ private static object ConvertToObject(UnsafeNativeMethods.EvtVariant val)
                     Marshal.Copy(val.Reference, arByte, 0, (int)val.Count);
                     return arByte;
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeInt16):
-                    if (val.Reference == IntPtr.Zero) return Array.Empty<Int16>();
-                    Int16[] arInt16 = new Int16[val.Count];
+                    if (val.Reference == IntPtr.Zero) return Array.Empty<short>();
+                    short[] arInt16 = new short[val.Count];
                     Marshal.Copy(val.Reference, arInt16, 0, (int)val.Count);
                     return arInt16;
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeInt32):
-                    if (val.Reference == IntPtr.Zero) return Array.Empty<Int32>();
-                    Int32[] arInt32 = new Int32[val.Count];
+                    if (val.Reference == IntPtr.Zero) return Array.Empty<int>();
+                    int[] arInt32 = new int[val.Count];
                     Marshal.Copy(val.Reference, arInt32, 0, (int)val.Count);
                     return arInt32;
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeInt64):
-                    if (val.Reference == IntPtr.Zero) return Array.Empty<Int64>();
-                    Int64[] arInt64 = new Int64[val.Count];
+                    if (val.Reference == IntPtr.Zero) return Array.Empty<long>();
+                    long[] arInt64 = new long[val.Count];
                     Marshal.Copy(val.Reference, arInt64, 0, (int)val.Count);
                     return arInt64;
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeSingle):
-                    if (val.Reference == IntPtr.Zero) return Array.Empty<Single>();
-                    Single[] arSingle = new Single[val.Count];
+                    if (val.Reference == IntPtr.Zero) return Array.Empty<float>();
+                    float[] arSingle = new float[val.Count];
                     Marshal.Copy(val.Reference, arSingle, 0, (int)val.Count);
                     return arSingle;
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeDouble):
@@ -1297,13 +1297,13 @@ private static object ConvertToObject(UnsafeNativeMethods.EvtVariant val)
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeSByte):
                     return ConvertToArray<sbyte>(val, sizeof(sbyte)); // not CLS-compliant
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeUInt16):
-                    return ConvertToArray<UInt16>(val, sizeof(UInt16));
+                    return ConvertToArray<ushort>(val, sizeof(ushort));
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeUInt64):
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeHexInt64):
-                    return ConvertToArray<UInt64>(val, sizeof(UInt64));
+                    return ConvertToArray<ulong>(val, sizeof(ulong));
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeUInt32):
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeHexInt32):
-                    return ConvertToArray<UInt32>(val, sizeof(UInt32));
+                    return ConvertToArray<uint>(val, sizeof(uint));
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeString):
                     return ConvertToStringArray(val, false);
                 case ((int)UnsafeNativeMethods.EvtMasks.EVT_VARIANT_TYPE_ARRAY | (int)UnsafeNativeMethods.EvtVariantType.EvtVarTypeAnsiString):
@@ -1375,7 +1375,7 @@ public static Array ConvertToArray<T>(UnsafeNativeMethods.EvtVariant val, int si
                 for (int i = 0; i < val.Count; i++)
                 {
                     array.SetValue(Marshal.PtrToStructure<T>(ptr), i);
-                    ptr = new IntPtr((Int64)ptr + size);
+                    ptr = new IntPtr((long)ptr + size);
                 }
 
                 return array;
@@ -1398,7 +1398,7 @@ public static Array ConvertToBoolArray(UnsafeNativeMethods.EvtVariant val)
                 {
                     bool value = Marshal.ReadInt32(ptr) != 0;
                     array[i] = value;
-                    ptr = new IntPtr((Int64)ptr + 4);
+                    ptr = new IntPtr((long)ptr + 4);
                 }
 
                 return array;
@@ -1419,7 +1419,7 @@ public static Array ConvertToFileTimeArray(UnsafeNativeMethods.EvtVariant val)
                 for (int i = 0; i < val.Count; i++)
                 {
                     array[i] = DateTime.FromFileTime(Marshal.ReadInt64(ptr));
-                    ptr = new IntPtr((Int64)ptr + 8 * sizeof(byte)); // FILETIME values are 8 bytes
+                    ptr = new IntPtr((long)ptr + 8 * sizeof(byte)); // FILETIME values are 8 bytes
                 }
 
                 return array;
@@ -1441,7 +1441,7 @@ public static Array ConvertToSysTimeArray(UnsafeNativeMethods.EvtVariant val)
                 {
                     UnsafeNativeMethods.SystemTime sysTime = Marshal.PtrToStructure<UnsafeNativeMethods.SystemTime>(ptr);
                     array[i] = new DateTime(sysTime.Year, sysTime.Month, sysTime.Day, sysTime.Hour, sysTime.Minute, sysTime.Second, sysTime.Milliseconds);
-                    ptr = new IntPtr((Int64)ptr + 16 * sizeof(byte)); // SystemTime values are 16 bytes
+                    ptr = new IntPtr((long)ptr + 16 * sizeof(byte)); // SystemTime values are 16 bytes
                 }
 
                 return array;
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs
index 38a3f4a60c7..b7beee133ed 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/UnsafeNativeMethods.cs
@@ -268,10 +268,10 @@ internal struct SystemTime
         internal struct EvtVariant
         {
             [FieldOffset(0)]
-            public UInt32 UInteger;
+            public uint UInteger;
 
             [FieldOffset(0)]
-            public Int32 Integer;
+            public int Integer;
 
             [FieldOffset(0)]
             public byte UInt8;
@@ -283,7 +283,7 @@ internal struct EvtVariant
             public ushort UShort;
 
             [FieldOffset(0)]
-            public UInt32 Bool;
+            public uint Bool;
 
             [FieldOffset(0)]
             public byte ByteVal;
@@ -292,13 +292,13 @@ internal struct EvtVariant
             public byte SByte;
 
             [FieldOffset(0)]
-            public UInt64 ULong;
+            public ulong ULong;
 
             [FieldOffset(0)]
-            public Int64 Long;
+            public long Long;
 
             [FieldOffset(0)]
-            public Single Single;
+            public float Single;
 
             [FieldOffset(0)]
             public double Double;
@@ -325,7 +325,7 @@ internal struct EvtVariant
             public IntPtr GuidReference;
 
             [FieldOffset(0)]
-            public UInt64 FileTime;
+            public ulong FileTime;
 
             [FieldOffset(0)]
             public IntPtr SystemTime;
@@ -334,10 +334,10 @@ internal struct EvtVariant
             public IntPtr SizeT;
 
             [FieldOffset(8)]
-            public UInt32 Count;   // number of elements (not length) in bytes.
+            public uint Count;   // number of elements (not length) in bytes.
 
             [FieldOffset(12)]
-            public UInt32 Type;
+            public uint Type;
         }
 
         internal enum EvtEventPropertyId
@@ -404,15 +404,15 @@ internal enum EvtChannelReferenceFlags
 
         internal enum EvtEventMetadataPropertyId
         {
-            EventMetadataEventID,       // EvtVarTypeUInt32
-            EventMetadataEventVersion,  // EvtVarTypeUInt32
-            EventMetadataEventChannel,  // EvtVarTypeUInt32
-            EventMetadataEventLevel,    // EvtVarTypeUInt32
-            EventMetadataEventOpcode,   // EvtVarTypeUInt32
-            EventMetadataEventTask,     // EvtVarTypeUInt32
-            EventMetadataEventKeyword,  // EvtVarTypeUInt64
-            EventMetadataEventMessageID,// EvtVarTypeUInt32
-            EventMetadataEventTemplate // EvtVarTypeString
+            EventMetadataEventID,        // EvtVarTypeUInt32
+            EventMetadataEventVersion,   // EvtVarTypeUInt32
+            EventMetadataEventChannel,   // EvtVarTypeUInt32
+            EventMetadataEventLevel,     // EvtVarTypeUInt32
+            EventMetadataEventOpcode,    // EvtVarTypeUInt32
+            EventMetadataEventTask,      // EvtVarTypeUInt32
+            EventMetadataEventKeyword,   // EvtVarTypeUInt64
+            EventMetadataEventMessageID, // EvtVarTypeUInt32
+            EventMetadataEventTemplate   // EvtVarTypeString
             // EvtEventMetadataPropertyIdEND
         }
 
@@ -733,7 +733,7 @@ out int publisherIdBufferUsed
         [SecurityCritical]
         internal static extern EventLogHandle EvtOpenChannelConfig(
                             EventLogHandle session,
-                            [MarshalAs(UnmanagedType.LPWStr)] String channelPath,
+                            [MarshalAs(UnmanagedType.LPWStr)] string channelPath,
                             int flags
                                     );
 
@@ -823,8 +823,8 @@ int flags
         [DllImport(WEVTAPI, CharSet = CharSet.Unicode, SetLastError = true)]
         [SecurityCritical]
         internal static extern EventLogHandle EvtCreateRenderContext(
-                            Int32 valuePathsCount,
-                            [MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPWStr)]
+                            int valuePathsCount,
+                            [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)]
                                 string[] valuePaths,
                             [MarshalAs(UnmanagedType.I4)] EvtRenderContextFlags flags
                                     );
@@ -862,10 +862,10 @@ internal struct EvtStringVariant
             public string StringVal;
 
             [FieldOffset(8)]
-            public UInt32 Count;
+            public uint Count;
 
             [FieldOffset(12)]
-            public UInt32 Type;
+            public uint Type;
         }
 
         [DllImport(WEVTAPI, CharSet = CharSet.Unicode, SetLastError = true)]
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj b/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj
index 81c8fc4e9dd..e3cdb00a3a1 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj
@@ -8,7 +8,12 @@
 
   <ItemGroup>
     <!-- the following package(s) are from https://github.com/dotnet/corefx -->
-    <PackageReference Include="System.Diagnostics.EventLog" Version="6.0.0-preview.2.21154.6" />
+    <PackageReference Include="System.Diagnostics.EventLog" Version="11.0.0-preview.6.26359.118" />
   </ItemGroup>
 
+  <ItemGroup>
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/DotNetEventingStrings.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/DotNetEventingStrings.resx
index b801e091abd..1cf6b6df5cf 100644
--- a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/DotNetEventingStrings.resx
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/DotNetEventingStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/cs/DotNetEventingStrings.cs.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/cs/DotNetEventingStrings.cs.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/cs/DotNetEventingStrings.cs.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/de/DotNetEventingStrings.de.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/de/DotNetEventingStrings.de.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/de/DotNetEventingStrings.de.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/es/DotNetEventingStrings.es.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/es/DotNetEventingStrings.es.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/es/DotNetEventingStrings.es.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/fr/DotNetEventingStrings.fr.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/fr/DotNetEventingStrings.fr.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/fr/DotNetEventingStrings.fr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/it/DotNetEventingStrings.it.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/it/DotNetEventingStrings.it.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/it/DotNetEventingStrings.it.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ja/DotNetEventingStrings.ja.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ja/DotNetEventingStrings.ja.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ja/DotNetEventingStrings.ja.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ko/DotNetEventingStrings.ko.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ko/DotNetEventingStrings.ko.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ko/DotNetEventingStrings.ko.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pl/DotNetEventingStrings.pl.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pl/DotNetEventingStrings.pl.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pl/DotNetEventingStrings.pl.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pt-BR/DotNetEventingStrings.pt-BR.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pt-BR/DotNetEventingStrings.pt-BR.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/pt-BR/DotNetEventingStrings.pt-BR.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ru/DotNetEventingStrings.ru.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ru/DotNetEventingStrings.ru.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/ru/DotNetEventingStrings.ru.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/tr/DotNetEventingStrings.tr.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/tr/DotNetEventingStrings.tr.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/tr/DotNetEventingStrings.tr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hans/DotNetEventingStrings.zh-Hans.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hans/DotNetEventingStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hans/DotNetEventingStrings.zh-Hans.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hant/DotNetEventingStrings.zh-Hant.resx b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hant/DotNetEventingStrings.zh-Hant.resx
new file mode 100644
index 00000000000..c88e249bd31
--- /dev/null
+++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/resources/zh-Hant/DotNetEventingStrings.zh-Hant.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentOutOfRange_NeedNonNegNum" xml:space="preserve">
+    <value>Non negative number is required.</value>
+  </data>
+  <data name="ArgumentOutOfRange_NeedValidId" xml:space="preserve">
+    <value>The ID parameter must be in the range {0} through {1}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxArgExceeded" xml:space="preserve">
+    <value>The total number of parameters must not exceed {0}.</value>
+  </data>
+  <data name="ArgumentOutOfRange_MaxStringsExceeded" xml:space="preserve">
+    <value>The number of String parameters must not exceed {0}.</value>
+  </data>
+  <data name="Argument_NeedNonemptyDelimiter" xml:space="preserve">
+    <value>Delimiter cannot be an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.GlobalTool.Shim/GlobalToolShim.cs b/src/Microsoft.PowerShell.GlobalTool.Shim/GlobalToolShim.cs
index 47a66ea8767..356cde68152 100644
--- a/src/Microsoft.PowerShell.GlobalTool.Shim/GlobalToolShim.cs
+++ b/src/Microsoft.PowerShell.GlobalTool.Shim/GlobalToolShim.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System;
+using System.Collections.Generic;
 using System.IO;
 using System.Runtime.InteropServices;
 
@@ -10,7 +11,7 @@ namespace Microsoft.PowerShell.GlobalTool.Shim
     /// <summary>
     /// Shim layer to chose the appropriate runtime for PowerShell DotNet Global tool.
     /// </summary>
-    public class EntryPoint
+    public static class EntryPoint
     {
         private const string PwshDllName = "pwsh.dll";
 
@@ -26,13 +27,14 @@ public class EntryPoint
         public static int Main(string[] args)
         {
             var currentPath = new FileInfo(System.Reflection.Assembly.GetEntryAssembly().Location).Directory.FullName;
-            var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
+            var isWindows = OperatingSystem.IsWindows();
 
             string platformFolder = isWindows ? WinFolderName : UnixFolderName;
 
-            string argsString = args.Length > 0 ? string.Join(" ", args) : null;
+            var arguments = new List<string>(args.Length + 1);
             var pwshPath = Path.Combine(currentPath, platformFolder, PwshDllName);
-            string processArgs = string.IsNullOrEmpty(argsString) ? $"\"{pwshPath}\"" : $"\"{pwshPath}\" {argsString}";
+            arguments.Add(pwshPath);
+            arguments.AddRange(args);
 
             if (File.Exists(pwshPath))
             {
@@ -41,7 +43,7 @@ public static int Main(string[] args)
                     e.Cancel = true;
                 };
 
-                var process = System.Diagnostics.Process.Start("dotnet", processArgs);
+                var process = System.Diagnostics.Process.Start("dotnet", arguments);
                 process.WaitForExit();
                 return process.ExitCode;
             }
diff --git a/src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj b/src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj
index aa845a7817d..d0203344cc2 100644
--- a/src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj
+++ b/src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj
@@ -6,6 +6,7 @@
     <AssemblyName>Microsoft.PowerShell.GlobalTool.Shim</AssemblyName>
     <OutputType>EXE</OutputType>
     <RootNamespace>Microsoft.PowerShell.GlobalTool.Shim</RootNamespace>
+    <UseAppHost>False</UseAppHost>
   </PropertyGroup>
 
   <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" Condition="'$(SDKToUse)' == 'Microsoft.NET.Sdk' " />
diff --git a/src/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json b/src/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json
index 8ba6dc2eba9..4a5e3e367ec 100644
--- a/src/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json
+++ b/src/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json
@@ -1,4 +1,4 @@
-// This is required to roll forward to runtime 3.x when 2.x is not installed
+// This is required to roll forward to supported minor.patch versions of the runtime.
 {
-  "rollForwardOnNoCandidateFx": 2
+  "rollForwardOnNoCandidateFx": 1
 }
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/AddLocalGroupMemberCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/AddLocalGroupMemberCommand.cs
deleted file mode 100644
index 375a8101075..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/AddLocalGroupMemberCommand.cs
+++ /dev/null
@@ -1,304 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-using System.Security.Principal;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Add-LocalGroupMember cmdlet adds one or more users or groups to a local
-    /// group.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Add, "LocalGroupMember",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717987")]
-    [Alias("algm")]
-    public class AddLocalGroupMemberCommand : PSCmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Group".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "Group")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalGroup Group
-        {
-            get { return this.group;}
-
-            set { this.group = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup group;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Member".
-        /// Specifies one or more users or groups to add to this local group. You can
-        /// identify users or groups by specifying their names or SIDs, or by passing
-        /// Microsoft.PowerShell.Commands.LocalPrincipal objects.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 1,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalPrincipal[] Member
-        {
-            get { return this.member;}
-
-            set { this.member = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalPrincipal[] member;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                if (Group != null)
-                    ProcessGroup(Group);
-                else if (Name != null)
-                    ProcessName(Name);
-                else if (SID != null)
-                    ProcessSid(SID);
-            }
-            catch (GroupNotFoundException ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-
-        /// <summary>
-        /// Creates a list of <see cref="LocalPrincipal"/> objects
-        /// ready to be processed by the cmdlet.
-        /// </summary>
-        /// <param name="groupId">
-        /// Name or SID (as a string) of the group we'll be adding to.
-        /// This string is used primarily for specifying the target
-        /// in WhatIf scenarios.
-        /// </param>
-        /// <param name="member">
-        /// LocalPrincipal object to be processed
-        /// </param>
-        /// <returns>
-        /// A LocalPrincipal Object to be added to the group
-        /// </returns>
-        /// <remarks>
-        /// <para>
-        /// LocalPrincipal objects in the Member parameter may not be complete,
-        /// particularly those created from a name or a SID string given to the
-        /// Member cmdlet parameter. The object returned from this method contains
-        /// , at the very least, a valid SID.
-        /// </para>
-        /// <para>
-        /// Any Member objects provided by name or SID string will be looked up
-        /// to ensure that such an object exists. If an object is not found,
-        /// an error message is displayed by PowerShell and null will be returned
-        /// </para>
-        /// <para>
-        /// This method also handles the WhatIf scenario. If the Cmdlet's
-        /// <b>ShouldProcess</b> method returns false on any Member object,
-        /// that object will not be included in the returned List.
-        /// </para>
-        /// </remarks>
-        private LocalPrincipal MakePrincipal(string groupId, LocalPrincipal member)
-        {
-            LocalPrincipal principal = null;
-            // if the member has a SID, we can use it directly
-            if (member.SID != null)
-            {
-                principal = member;
-            }
-            else    // otherwise it must have been constructed by name
-            {
-                SecurityIdentifier sid = this.TrySid(member.Name);
-
-                if (sid != null)
-                {
-                    member.SID = sid;
-                    principal = member;
-                }
-                else
-                {
-                    try
-                    {
-                        principal = sam.LookupAccount(member.Name);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-
-            if (CheckShouldProcess(principal, groupId))
-                return principal;
-
-            return null;
-        }
-
-        /// <summary>
-        /// Determine if a principal should be processed.
-        /// Just a wrapper around Cmdlet.ShouldProcess, with localized string
-        /// formatting.
-        /// </summary>
-        /// <param name="principal">Name of the principal to be added.</param>
-        /// <param name="groupName">
-        /// Name of the group to which the members will be added.
-        /// </param>
-        /// <returns>
-        /// True if the principal should be processed, false otherwise.
-        /// </returns>
-        private bool CheckShouldProcess(LocalPrincipal principal, string groupName)
-        {
-            if (principal == null)
-                return false;
-
-            string msg = StringUtil.Format(Strings.ActionAddGroupMember, principal.ToString());
-
-            return ShouldProcess(groupName, msg);
-        }
-
-        /// <summary>
-        /// Add members to a group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object representing the group to which
-        /// the members will be added.
-        /// </param>
-        private void ProcessGroup(LocalGroup group)
-        {
-            string groupId = group.Name ?? group.SID.ToString();
-            foreach (var member in this.Member)
-            {
-                LocalPrincipal principal = MakePrincipal(groupId, member);
-                if (principal != null)
-                {
-                    var ex = sam.AddLocalGroupMember(group, principal);
-                    if (ex != null)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Add members to a group specified by name.
-        /// </summary>
-        /// <param name="name">
-        /// The name of the group to which the members will be added.
-        /// </param>
-        private void ProcessName(string name)
-        {
-            ProcessGroup(sam.GetLocalGroup(name));
-        }
-
-        /// <summary>
-        /// Add members to a group specified by SID.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group
-        /// to which the members will be added.
-        /// </param>
-        private void ProcessSid(SecurityIdentifier groupSid)
-        {
-            foreach (var member in this.Member)
-            {
-                LocalPrincipal principal = MakePrincipal(groupSid.ToString(), member);
-                if (principal != null)
-                {
-                    var ex = sam.AddLocalGroupMember(groupSid, principal);
-                    if (ex != null)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/DisableLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/DisableLocalUserCommand.cs
deleted file mode 100644
index 09e7bdf9452..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/DisableLocalUserCommand.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Disable-LocalUser cmdlet disables local user accounts. When a user
-    /// account is disabled, the user is not permitted to log on. When a user
-    /// account is enabled, the user is permitted to log on normally.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Disable, "LocalUser",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717986")]
-    [Alias("dlu")]
-    public class DisableLocalUserCommand : Cmdlet
-    {
-        #region Constants
-        private const Enabling enabling = Enabling.Disable;
-        #endregion Constants
-
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local user accounts to disable in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalUser[] InputObject
-        {
-            get { return this.inputobject; }
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalUser[] inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the names of the local user accounts to disable in the local
-        /// Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies the LocalUser accounts to disable by
-        /// System.Security.Principal.SecurityIdentifier.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessUsers();
-                ProcessNames();
-                ProcessSids();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process users requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var name in Name)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(name))
-                            sam.EnableLocalUser(sam.GetLocalUser(name), enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var sid in SID)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(sid.ToString()))
-                            sam.EnableLocalUser(sid, enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -InputObject.
-        /// </summary>
-        private void ProcessUsers()
-        {
-            if (InputObject != null)
-            {
-                foreach (var user in InputObject)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(user.Name))
-                            sam.EnableLocalUser(user, enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionDisableUser);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/EnableLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/EnableLocalUserCommand.cs
deleted file mode 100644
index e321a03e266..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/EnableLocalUserCommand.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Enable-LocalUser cmdlet enables local user accounts. When a user account
-    /// is disabled, the user is not permitted to log on. When a user account is
-    /// enabled, the user is permitted to log on normally.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Enable, "LocalUser",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717985")]
-    [Alias("elu")]
-    public class EnableLocalUserCommand : Cmdlet
-    {
-        #region Constants
-        private const Enabling enabling = Enabling.Enable;
-        #endregion Constants
-
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local user accounts to enable in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalUser[] InputObject
-        {
-            get { return this.inputobject; }
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalUser[] inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local user accounts to enable in the local Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies the LocalUser accounts to enable by
-        /// System.Security.Principal.SecurityIdentifier.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessUsers();
-                ProcessNames();
-                ProcessSids();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process users requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var name in Name)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(name))
-                            sam.EnableLocalUser(sam.GetLocalUser(name), enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var sid in SID)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(sid.ToString()))
-                            sam.EnableLocalUser(sid, enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -InputObject.
-        /// </summary>
-        private void ProcessUsers()
-        {
-            if (InputObject != null)
-            {
-                foreach (var user in InputObject)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(user.Name))
-                            sam.EnableLocalUser(user, enabling);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionEnableUser);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupCommand.cs
deleted file mode 100644
index 3965c362335..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupCommand.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-using System.Security.Principal;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Get-LocalGroup cmdlet gets local groups from the Windows Security
-    /// Accounts manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "LocalGroup",
-            DefaultParameterSetName = "Default",
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717974")]
-    [Alias("glg")]
-    public class GetLocalGroupCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local groups to get from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a local group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (Name == null && SID == null)
-            {
-                foreach (var group in sam.GetAllLocalGroups())
-                    WriteObject(group);
-
-                return;
-            }
-
-            ProcessNames();
-            ProcessSids();
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process groups requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// Groups may be specified using wildcards.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var name in Name)
-                {
-                    try
-                    {
-                        if (WildcardPattern.ContainsWildcardCharacters(name))
-                        {
-                            var pattern = new WildcardPattern(name, WildcardOptions.Compiled
-                                                                | WildcardOptions.IgnoreCase);
-
-                            foreach (var group in sam.GetMatchingLocalGroups(n => pattern.IsMatch(n)))
-                                WriteObject(group);
-                        }
-                        else
-                        {
-                            WriteObject(sam.GetLocalGroup(name));
-                        }
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process groups requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var sid in SID)
-                {
-                    try
-                    {
-                        WriteObject(sam.GetLocalGroup(sid));
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupMemberCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupMemberCommand.cs
deleted file mode 100644
index a10300e9065..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalGroupMemberCommand.cs
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-using System.Security.Principal;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Get-LocalGroupMember cmdlet gets the members of a local group.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "LocalGroupMember",
-            DefaultParameterSetName = "Default",
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717988")]
-    [Alias("glgm")]
-    public class GetLocalGroupMemberCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Group".
-        /// The security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Group")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalGroup Group
-        {
-            get { return this.group;}
-
-            set { this.group = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup group;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Member".
-        /// Specifies the name of the user or group that is a member of this group. If
-        /// this parameter is not specified, all members of the specified group are
-        /// returned. This accepts a name, SID, or wildcard string.
-        /// </summary>
-        [Parameter(Position = 1)]
-        [ValidateNotNullOrEmpty]
-        public string Member
-        {
-            get { return this.member;}
-
-            set { this.member = value; }
-        }
-
-        private string member;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// The security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// The security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                IEnumerable<LocalPrincipal> principals = null;
-
-                if (Group != null)
-                    principals = ProcessGroup(Group);
-                else if (Name != null)
-                    principals = ProcessName(Name);
-                else if (SID != null)
-                    principals = ProcessSid(SID);
-
-                if (principals != null)
-                    WriteObject(principals, true);
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        private IEnumerable<LocalPrincipal> ProcessesMembership(IEnumerable<LocalPrincipal> membership)
-        {
-            List<LocalPrincipal> rv;
-
-            // if no members are specified, return all of them
-            if (Member == null)
-            {
-                // return membership;
-                rv = new List<LocalPrincipal>(membership);
-            }
-            else
-            {
-                // var rv = new List<LocalPrincipal>();
-                rv = new List<LocalPrincipal>();
-
-                if (WildcardPattern.ContainsWildcardCharacters(Member))
-                {
-                    var pattern = new WildcardPattern(Member, WildcardOptions.Compiled
-                                                                | WildcardOptions.IgnoreCase);
-
-                    foreach (var m in membership)
-                        if (pattern.IsMatch(sam.StripMachineName(m.Name)))
-                            rv.Add(m);
-                }
-                else
-                {
-                    var sid = this.TrySid(Member);
-
-                    if (sid != null)
-                    {
-                        foreach (var m in membership)
-                        {
-                            if (m.SID == sid)
-                            {
-                                rv.Add(m);
-                                break;
-                            }
-                        }
-                    }
-                    else
-                    {
-                        foreach (var m in membership)
-                        {
-                            if (sam.StripMachineName(m.Name).Equals(Member, StringComparison.CurrentCultureIgnoreCase))
-                            {
-                                rv.Add(m);
-                                break;
-                            }
-                        }
-                    }
-
-                    if (rv.Count == 0)
-                    {
-                        var ex = new PrincipalNotFoundException(member, member);
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-
-            // sort the resulting principals by mane
-            rv.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, StringComparison.CurrentCultureIgnoreCase));
-
-            return rv;
-        }
-
-        private IEnumerable<LocalPrincipal> ProcessGroup(LocalGroup group)
-        {
-            return ProcessesMembership(sam.GetLocalGroupMembers(group));
-        }
-
-        private IEnumerable<LocalPrincipal> ProcessName(string name)
-        {
-            return ProcessGroup(sam.GetLocalGroup(name));
-        }
-
-        private IEnumerable<LocalPrincipal> ProcessSid(SecurityIdentifier groupSid)
-        {
-            return ProcessesMembership(sam.GetLocalGroupMembers(groupSid));
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalUserCommand.cs
deleted file mode 100644
index e469d043ffa..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/GetLocalUserCommand.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Get-LocalUser cmdlet gets local user accounts from the Windows Security
-    /// Accounts Manager. This includes local accounts that have been connected to a
-    /// Microsoft account.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "LocalUser",
-            DefaultParameterSetName = "Default",
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717980")]
-    [Alias("glu")]
-    public class GetLocalUserCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local user accounts to get from the local Security Accounts
-        /// Manager. This accepts a name or wildcard string.
-        /// </summary>
-        [Parameter(Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a user from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid; }
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            if (Name == null && SID == null)
-            {
-                foreach (var user in sam.GetAllLocalUsers())
-                    WriteObject(user);
-
-                return;
-            }
-
-            ProcessNames();
-            ProcessSids();
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process users requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// Users may be specified using wildcards.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var nm in Name)
-                {
-                    try
-                    {
-                        if (WildcardPattern.ContainsWildcardCharacters(nm))
-                        {
-                            var pattern = new WildcardPattern(nm, WildcardOptions.Compiled
-                                                                | WildcardOptions.IgnoreCase);
-
-                            foreach (var user in sam.GetMatchingLocalUsers(n => pattern.IsMatch(n)))
-                                WriteObject(user);
-                        }
-                        else
-                        {
-                            WriteObject(sam.GetLocalUser(nm));
-                        }
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var s in SID)
-                {
-                    try
-                    {
-                        WriteObject(sam.GetLocalUser(s));
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalGroupCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalGroupCommand.cs
deleted file mode 100644
index 59e4f4ca13f..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalGroupCommand.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The New-LocalGroup Cmdlet can be used to create a new local security group
-    /// in the Windows Security Accounts Manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.New, "LocalGroup",
-            SupportsShouldProcess = true,
-            HelpUri ="https://go.microsoft.com/fwlink/?LinkId=717990")]
-    [Alias("nlg")]
-    public class NewLocalGroupCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Description".
-        /// A descriptive comment.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNull]
-        public string Description
-        {
-            get { return this.description;}
-
-            set { this.description = value; }
-        }
-
-        private string description;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// The group name for the local security group.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [ValidateLength(1, 256)]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                if (CheckShouldProcess(Name))
-                {
-                    var group = sam.CreateLocalGroup(new LocalGroup
-                                                        {
-                                                            Description = Description,
-                                                            Name = Name
-                                                        });
-
-                    WriteObject(group);
-                }
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionNewGroup);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalUserCommand.cs
deleted file mode 100644
index b3916f46071..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/NewLocalUserCommand.cs
+++ /dev/null
@@ -1,295 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The New-LocalUser cmdlet creates a new local user account.
-    /// </summary>
-    [Cmdlet(VerbsCommon.New, "LocalUser",
-            DefaultParameterSetName = "Password",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717981")]
-    [Alias("nlu")]
-    public class NewLocalUserCommand : PSCmdlet
-    {
-        #region Static Data
-        // Names of object- and boolean-type parameters.
-        // Switch parameters don't need to be included.
-        private static string[] parameterNames = new string[]
-            {
-                "AccountExpires",
-                "Description",
-                "Disabled",
-                "FullName",
-                "Password",
-                "UserMayNotChangePassword"
-            };
-        #endregion Static Data
-
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "AccountExpires".
-        /// Specifies when the user account will expire.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        public System.DateTime AccountExpires
-        {
-            get { return this.accountexpires;}
-
-            set { this.accountexpires = value; }
-        }
-
-        private System.DateTime accountexpires;
-
-        // This parameter added by hand (copied from SetLocalUserCommand), not by Cmdlet Designer
-        /// <summary>
-        /// The following is the definition of the input parameter "AccountNeverExpires".
-        /// Specifies that the account will not expire.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        public System.Management.Automation.SwitchParameter AccountNeverExpires
-        {
-            get { return this.accountneverexpires;}
-
-            set { this.accountneverexpires = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter accountneverexpires;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Description".
-        /// A descriptive comment for this user account.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNull]
-        public string Description
-        {
-            get { return this.description;}
-
-            set { this.description = value; }
-        }
-
-        private string description;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Disabled".
-        /// Specifies whether this user account is enabled or disabled.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        public System.Management.Automation.SwitchParameter Disabled
-        {
-            get { return this.disabled;}
-
-            set { this.disabled = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter disabled;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "FullName".
-        /// Specifies the full name of the user account. This is different from the
-        /// username of the user account.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNull]
-        public string FullName
-        {
-            get { return this.fullname;}
-
-            set { this.fullname = value; }
-        }
-
-        private string fullname;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the user name for the local user account. This can be a local user
-        /// account or a local user account that is connected to a Microsoft Account.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [ValidateLength(1, 20)]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Password".
-        /// Specifies the password for the local user account. A password can contain up
-        /// to 127 characters.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   ParameterSetName = "Password",
-                   ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNull]
-        public System.Security.SecureString Password
-        {
-            get { return this.password;}
-
-            set { this.password = value; }
-        }
-
-        private System.Security.SecureString password;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "PasswordChangeableDate".
-        /// Specifies that the new User account has no password.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   ParameterSetName = "NoPassword",
-                   ValueFromPipelineByPropertyName = true)]
-        public System.Management.Automation.SwitchParameter NoPassword
-        {
-            get { return this.nopassword; }
-
-            set { this.nopassword = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter nopassword;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "PasswordNeverExpires".
-        /// Specifies that the password will not expire.
-        /// </summary>
-        [Parameter(ParameterSetName = "Password",
-                   ValueFromPipelineByPropertyName = true)]
-        public System.Management.Automation.SwitchParameter PasswordNeverExpires
-        {
-            get { return this.passwordneverexpires; }
-
-            set { this.passwordneverexpires = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter passwordneverexpires;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "UserMayNotChangePassword".
-        /// Specifies whether the user is allowed to change the password on this
-        /// account. The default value is True.
-        /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true)]
-        public System.Management.Automation.SwitchParameter UserMayNotChangePassword
-        {
-            get { return this.usermaynotchangepassword;}
-
-            set { this.usermaynotchangepassword = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter usermaynotchangepassword;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            if (this.HasParameter("AccountExpires") && AccountNeverExpires.IsPresent)
-            {
-                InvalidParametersException ex = new InvalidParametersException("AccountExpires", "AccountNeverExpires");
-                ThrowTerminatingError(ex.MakeErrorRecord());
-            }
-
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                if (CheckShouldProcess(Name))
-                {
-                    var user = new LocalUser
-                                {
-                                    Name = Name,
-                                    Description = Description,
-                                    Enabled = true,
-                                    FullName = FullName,
-                                    UserMayChangePassword = true
-                                };
-
-                    foreach (var paramName in parameterNames)
-                    {
-                        if (this.HasParameter(paramName))
-                        {
-                            switch (paramName)
-                            {
-                                case "AccountExpires":
-                                    user.AccountExpires = AccountExpires;
-                                    break;
-
-                                case "Disabled":
-                                    user.Enabled = !Disabled;
-                                    break;
-
-                                case "UserMayNotChangePassword":
-                                    user.UserMayChangePassword = !UserMayNotChangePassword;
-                                    break;
-                            }
-                        }
-                    }
-
-                    if (AccountNeverExpires.IsPresent)
-                        user.AccountExpires = null;
-
-                    // Password will be null if NoPassword was given
-                    user = sam.CreateLocalUser(user, Password, PasswordNeverExpires.IsPresent);
-
-                    WriteObject(user);
-                }
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionNewUser);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupCommand.cs
deleted file mode 100644
index 0c0af710af1..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupCommand.cs
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Remove-LocalGroup cmdlet deletes a security group from the Windows
-    /// Security Accounts manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "LocalGroup",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717975")]
-    [Alias("rlg")]
-    public class RemoveLocalGroupCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies security groups from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalGroup[] InputObject
-        {
-            get { return this.inputobject; }
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup[] inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local groups to be deleted from the local Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies the LocalGroup accounts to remove by
-        /// System.Security.Principal.SecurityIdentifier.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid; }
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessGroups();
-                ProcessNames();
-                ProcessSids();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process groups requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var name in Name)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(name))
-                            sam.RemoveLocalGroup(sam.GetLocalGroup(name));
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process groups requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var sid in SID)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(sid.ToString()))
-                            sam.RemoveLocalGroup(sid);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process groups given through -InputObject.
-        /// </summary>
-        private void ProcessGroups()
-        {
-            if (InputObject != null)
-            {
-                foreach (var group in InputObject)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(group.Name))
-                            sam.RemoveLocalGroup(group);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionRemoveGroup);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupMemberCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupMemberCommand.cs
deleted file mode 100644
index 7e132405b2a..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalGroupMemberCommand.cs
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-using System.Security.Principal;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Remove-LocalGroupMember cmdlet removes one or more members (users or
-    /// groups) from a local security group.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "LocalGroupMember",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717989")]
-    [Alias("rlgm")]
-    public class RemoveLocalGroupMemberCommand : PSCmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Group".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "Group")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalGroup Group
-        {
-            get { return this.group;}
-
-            set { this.group = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup group;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Member".
-        /// Specifies one or more users or groups to remove from this local group. You can
-        /// identify users or groups by specifying their names or SIDs, or by passing
-        /// Microsoft.PowerShell.Commands.LocalPrincipal objects.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 1,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalPrincipal[] Member
-        {
-            get { return this.member;}
-
-            set { this.member = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalPrincipal[] member;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// The security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                if (Group != null)
-                    ProcessGroup(Group);
-                else if (Name != null)
-                    ProcessName(Name);
-                else if (SID != null)
-                    ProcessSid(SID);
-            }
-            catch (GroupNotFoundException ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-
-        /// <summary>
-        /// Creates a list of <see cref="LocalPrincipal"/> objects
-        /// ready to be processed by the cmdlet.
-        /// </summary>
-        /// <param name="groupId">
-        /// Name or SID (as a string) of the group we'll be removing from.
-        /// This string is used primarily for specifying the target
-        /// in WhatIf scenarios.
-        /// </param>
-        /// <param name="member">
-        /// LocalPrincipal object to be processed
-        /// </param>
-        /// <returns>
-        /// LocalPrincipal object processed and ready to be removed
-        /// </returns>
-        /// <remarks>
-        /// <para>
-        /// LocalPrincipal object in the Member parameter may not be complete,
-        /// particularly those created from a name or a SID string given to the
-        /// Member cmdlet parameter. The object returned from this method contains at the very least, contain a valid SID.
-        /// </para>
-        /// <para>
-        /// Any Member object provided by name or SID string will be looked up
-        /// to ensure that such an object exists. If an object is not found,
-        /// an error message is displayed by PowerShell and null will be returned from this method
-        /// </para>
-        /// <para>
-        /// This method also handles the WhatIf scenario. If the Cmdlet's
-        /// <b>ShouldProcess</b> method returns false on any Member object
-        /// </para>
-        /// </remarks>
-        private LocalPrincipal MakePrincipal(string groupId, LocalPrincipal member)
-        {
-               LocalPrincipal principal = null;
-
-                // if the member has a SID, we can use it directly
-                if (member.SID != null)
-                {
-                    principal = member;
-                }
-                else    // otherwise it must have been constructed by name
-                {
-                    SecurityIdentifier sid = this.TrySid(member.Name);
-
-                    if (sid != null)
-                    {
-                        member.SID = sid;
-                        principal = member;
-                    }
-                    else
-                    {
-                        try
-                        {
-                            principal = sam.LookupAccount(member.Name);
-                        }
-                        catch (Exception ex)
-                        {
-                            WriteError(ex.MakeErrorRecord());
-                        }
-                    }
-                }
-
-            if (CheckShouldProcess(principal, groupId))
-                return principal;
-
-            return null;
-        }
-
-        /// <summary>
-        /// Determine if a principal should be processed.
-        /// Just a wrapper around Cmdlet.ShouldProcess, with localized string
-        /// formatting.
-        /// </summary>
-        /// <param name="principal">Name of the principal to be removed.</param>
-        /// <param name="groupName">
-        /// Name of the group from which the members will be removed.
-        /// </param>
-        /// <returns>
-        /// True if the principal should be processed, false otherwise.
-        /// </returns>
-        private bool CheckShouldProcess(LocalPrincipal principal, string groupName)
-        {
-            if (principal == null)
-                return false;
-
-            string msg = StringUtil.Format(Strings.ActionRemoveGroupMember, principal.ToString());
-
-            return ShouldProcess(groupName, msg);
-        }
-
-        /// <summary>
-        /// Remove members from a group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object representing the group from which
-        /// the members will be removed.
-        /// </param>
-        private void ProcessGroup(LocalGroup group)
-        {
-            string groupId = group.Name ?? group.SID.ToString();
-            foreach (var member in this.Member)
-            {
-                LocalPrincipal principal = MakePrincipal(groupId, member);
-                if (principal != null)
-                {
-                    var ex = sam.RemoveLocalGroupMember(group, principal);
-                    if (ex != null)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Remove members from a group specified by name.
-        /// </summary>
-        /// <param name="name">
-        /// The name of the group from which the members will be removed.
-        /// </param>
-        private void ProcessName(string name)
-        {
-            ProcessGroup(sam.GetLocalGroup(name));
-        }
-
-        /// <summary>
-        /// Remove members from a group specified by SID.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group
-        /// from which the members will be removed.
-        /// </param>
-        private void ProcessSid(SecurityIdentifier groupSid)
-        {
-            foreach (var member in this.Member)
-            {
-                LocalPrincipal principal = MakePrincipal(groupSid.ToString(), member);
-                if (principal != null)
-                {
-                    var ex = sam.RemoveLocalGroupMember(groupSid, principal);
-                    if (ex != null)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalUserCommand.cs
deleted file mode 100644
index 0c61da2e117..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RemoveLocalUserCommand.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Remove-LocalUser cmdlet deletes a user account from the Windows Security
-    /// Accounts manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "LocalUser",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717982")]
-    [Alias("rlu")]
-    public class RemoveLocalUserCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local user accounts to remove in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Microsoft.PowerShell.Commands.LocalUser[] InputObject
-        {
-            get { return this.inputobject;}
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalUser[] inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the user accounts to be deleted from the local Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return this.name; }
-
-            set { this.name = value; }
-        }
-
-        private string[] name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies the local user accounts to remove by
-        /// System.Security.Principal.SecurityIdentifier.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public System.Security.Principal.SecurityIdentifier[] SID
-        {
-            get { return this.sid; }
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier[] sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessUsers();
-                ProcessNames();
-                ProcessSids();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process users requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// All arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessNames()
-        {
-            if (Name != null)
-            {
-                foreach (var name in Name)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(name))
-                            sam.RemoveLocalUser(sam.GetLocalUser(name));
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users requested by -SID.
-        /// </summary>
-        private void ProcessSids()
-        {
-            if (SID != null)
-            {
-                foreach (var sid in SID)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(sid.ToString()))
-                            sam.RemoveLocalUser(sid);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process users given through -InputObject.
-        /// </summary>
-        private void ProcessUsers()
-        {
-            if (InputObject != null)
-            {
-                foreach (var user in InputObject)
-                {
-                    try
-                    {
-                        if (CheckShouldProcess(user.Name))
-                            sam.RemoveLocalUser(user);
-                    }
-                    catch (Exception ex)
-                    {
-                        WriteError(ex.MakeErrorRecord());
-                    }
-                }
-            }
-        }
-
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionRemoveUser);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalGroupCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalGroupCommand.cs
deleted file mode 100644
index f32e3365086..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalGroupCommand.cs
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Rename-LocalGroup cmdlet renames a local security group in the Security
-    /// Accounts Manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Rename, "LocalGroup",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717978")]
-    [Alias("rnlg")]
-    public class RenameLocalGroupCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local group account to rename in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNullOrEmpty]
-        public Microsoft.PowerShell.Commands.LocalGroup InputObject
-        {
-            get { return this.inputobject;}
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local group to be renamed in the local Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "NewName".
-        /// Specifies the new name for the local security group in the Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 1)]
-        [ValidateNotNullOrEmpty]
-        public string NewName
-        {
-            get { return this.newname;}
-
-            set { this.newname = value; }
-        }
-
-        private string newname;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNullOrEmpty]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessGroup();
-                ProcessName();
-                ProcessSid();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process group requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// Arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessName()
-        {
-            if (Name != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(Name, NewName))
-                        sam.RenameLocalGroup(sam.GetLocalGroup(Name), NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process group requested by -SID.
-        /// </summary>
-        private void ProcessSid()
-        {
-            if (SID != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(SID.ToString(), NewName))
-                        sam.RenameLocalGroup(SID, NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process group given through -InputObject.
-        /// </summary>
-        private void ProcessGroup()
-        {
-            if (InputObject != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(InputObject.Name, NewName))
-                        sam.RenameLocalGroup(InputObject, NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Determine if a group should be processed.
-        /// Just a wrapper around Cmdlet.ShouldProcess, with localized string
-        /// formatting.
-        /// </summary>
-        /// <param name="groupName">
-        /// Name of the group to rename.
-        /// </param>
-        /// <param name="newName">
-        /// New name for the group.
-        /// </param>
-        /// <returns>
-        /// True if the group should be processed, false otherwise.
-        /// </returns>
-        private bool CheckShouldProcess(string groupName, string newName)
-        {
-            string msg = StringUtil.Format(Strings.ActionRenameGroup, newName);
-
-            return ShouldProcess(groupName, msg);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalUserCommand.cs
deleted file mode 100644
index e6b1297a7d5..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/RenameLocalUserCommand.cs
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Rename-LocalUser cmdlet renames a local user account in the Security
-    /// Accounts Manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Rename, "LocalUser",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkID=717983")]
-    [Alias("rnlu")]
-    public class RenameLocalUserCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local user account to rename in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalUser InputObject
-        {
-            get { return this.inputobject;}
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalUser inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local user account to be renamed in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "NewName".
-        /// Specifies the new name for the local user account in the Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 1)]
-        [ValidateNotNullOrEmpty]
-        public string NewName
-        {
-            get { return this.newname;}
-
-            set { this.newname = value; }
-        }
-
-        private string newname;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies the local user to rename.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                ProcessUser();
-                ProcessName();
-                ProcessSid();
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        /// <summary>
-        /// Process user requested by -Name.
-        /// </summary>
-        /// <remarks>
-        /// Arguments to -Name will be treated as names,
-        /// even if a name looks like a SID.
-        /// </remarks>
-        private void ProcessName()
-        {
-            if (Name != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(Name, NewName))
-                        sam.RenameLocalUser(sam.GetLocalUser(Name), NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process user requested by -SID.
-        /// </summary>
-        private void ProcessSid()
-        {
-            if (SID != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(SID.ToString(), NewName))
-                        sam.RenameLocalUser(SID, NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Process group given through -InputObject.
-        /// </summary>
-        private void ProcessUser()
-        {
-            if (InputObject != null)
-            {
-                try
-                {
-                    if (CheckShouldProcess(InputObject.Name, NewName))
-                        sam.RenameLocalUser(InputObject, NewName);
-                }
-                catch (Exception ex)
-                {
-                    WriteError(ex.MakeErrorRecord());
-                }
-            }
-        }
-
-        /// <summary>
-        /// Determine if a user should be processed.
-        /// Just a wrapper around Cmdlet.ShouldProcess, with localized string
-        /// formatting.
-        /// </summary>
-        /// <param name="userName">
-        /// Name of the user to rename.
-        /// </param>
-        /// <param name="newName">
-        /// New name for the user.
-        /// </param>
-        /// <returns>
-        /// True if the user should be processed, false otherwise.
-        /// </returns>
-        private bool CheckShouldProcess(string userName, string newName)
-        {
-            string msg = StringUtil.Format(Strings.ActionRenameUser, newName);
-
-            return ShouldProcess(userName, msg);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalGroupCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalGroupCommand.cs
deleted file mode 100644
index b1943971e3d..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalGroupCommand.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Set-LocalGroup cmdlet modifies the properties of a local security group
-    /// in the Windows Security Accounts Manager.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "LocalGroup",
-            SupportsShouldProcess = true,
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717979")]
-    [Alias("slg")]
-    public class SetLocalGroupCommand : Cmdlet
-    {
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "Description".
-        /// A descriptive comment.
-        /// </summary>
-        [Parameter(Mandatory = true)]
-        [ValidateNotNull]
-        public string Description
-        {
-            get { return this.description;}
-
-            set { this.description = value; }
-        }
-
-        private string description;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the local group account to modify in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalGroup InputObject
-        {
-            get { return this.inputobject;}
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalGroup inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local group to be renamed in the local Security Accounts
-        /// Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Default")]
-        [ValidateNotNull]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a security group from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                LocalGroup group = null;
-
-                if (InputObject != null)
-                {
-                    if (CheckShouldProcess(InputObject.ToString()))
-                        group = InputObject;
-                }
-                else if (Name != null)
-                {
-                    group = sam.GetLocalGroup(Name);
-
-                    if (!CheckShouldProcess(Name))
-                        group = null;
-                }
-                else if (SID != null)
-                {
-                    group = sam.GetLocalGroup(SID);
-
-                    if (!CheckShouldProcess(SID.ToString()))
-                        group = null;
-                }
-
-                if (group != null)
-                {
-                    var delta = group.Clone();
-
-                    delta.Description = Description;
-                    sam.UpdateLocalGroup(group, delta);
-                }
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionSetGroup);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalUserCommand.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalUserCommand.cs
deleted file mode 100644
index 8fafa52c9e4..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Commands/SetLocalUserCommand.cs
+++ /dev/null
@@ -1,323 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#region Using directives
-using System;
-using System.Management.Automation;
-
-using System.Management.Automation.SecurityAccountsManager;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-
-using Microsoft.PowerShell.LocalAccounts;
-#endregion
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// The Set-LocalUser cmdlet changes the properties of a user account in the
-    /// local Windows Security Accounts Manager. It can also reset the password of a
-    /// local user account.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "LocalUser",
-            SupportsShouldProcess = true,
-            DefaultParameterSetName = "Name",
-            HelpUri = "https://go.microsoft.com/fwlink/?LinkId=717984")]
-    [Alias("slu")]
-    public class SetLocalUserCommand : PSCmdlet
-    {
-        #region Static Data
-        // Names of object- and boolean-type parameters.
-        // Switch parameters don't need to be included.
-        private static string[] parameterNames = new string[]
-            {
-                "AccountExpires",
-                "Description",
-                "FullName",
-                "Password",
-                "UserMayChangePassword",
-                "PasswordNeverExpires"
-            };
-        #endregion Static Data
-
-        #region Instance Data
-        private Sam sam = null;
-        #endregion Instance Data
-
-        #region Parameter Properties
-        /// <summary>
-        /// The following is the definition of the input parameter "AccountExpires".
-        /// Specifies when the user account will expire. Set to null to indicate that
-        /// the account will never expire. The default value is null (account never
-        /// expires).
-        /// </summary>
-        [Parameter]
-        public System.DateTime AccountExpires
-        {
-            get { return this.accountexpires;}
-
-            set { this.accountexpires = value; }
-        }
-
-        private System.DateTime accountexpires;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "AccountNeverExpires".
-        /// Specifies that the account will not expire.
-        /// </summary>
-        [Parameter]
-        public System.Management.Automation.SwitchParameter AccountNeverExpires
-        {
-            get { return this.accountneverexpires;}
-
-            set { this.accountneverexpires = value; }
-        }
-
-        private System.Management.Automation.SwitchParameter accountneverexpires;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Description".
-        /// A descriptive comment for this user account.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNull]
-        public string Description
-        {
-            get { return this.description;}
-
-            set { this.description = value; }
-        }
-
-        private string description;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "FullName".
-        /// Specifies the full name of the user account. This is different from the
-        /// username of the user account.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNull]
-        public string FullName
-        {
-            get { return this.fullname;}
-
-            set { this.fullname = value; }
-        }
-
-        private string fullname;
-        /// <summary>
-        /// The following is the definition of the input parameter "InputObject".
-        /// Specifies the of the local user account to modify in the local Security
-        /// Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "InputObject")]
-        [ValidateNotNull]
-        public Microsoft.PowerShell.Commands.LocalUser InputObject
-        {
-            get { return this.inputobject;}
-
-            set { this.inputobject = value; }
-        }
-
-        private Microsoft.PowerShell.Commands.LocalUser inputobject;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Name".
-        /// Specifies the local user account to change.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "Name")]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return this.name;}
-
-            set { this.name = value; }
-        }
-
-        private string name;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "Password".
-        /// Specifies the password for the local user account.
-        /// </summary>
-        [Parameter]
-        [ValidateNotNull]
-        public System.Security.SecureString Password
-        {
-            get { return this.password;}
-
-            set { this.password = value; }
-        }
-
-        private System.Security.SecureString password;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "PasswordNeverExpires".
-        /// Specifies that the password will not expire.
-        /// </summary>
-        [Parameter]
-        public bool PasswordNeverExpires
-        {
-            get { return this.passwordneverexpires; }
-
-            set { this.passwordneverexpires = value; }
-        }
-
-        private bool passwordneverexpires;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "SID".
-        /// Specifies a user from the local Security Accounts Manager.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = "SecurityIdentifier")]
-        [ValidateNotNull]
-        public System.Security.Principal.SecurityIdentifier SID
-        {
-            get { return this.sid;}
-
-            set { this.sid = value; }
-        }
-
-        private System.Security.Principal.SecurityIdentifier sid;
-
-        /// <summary>
-        /// The following is the definition of the input parameter "UserMayChangePassword".
-        /// Specifies whether the user is allowed to change the password on this
-        /// account. The default value is True.
-        /// </summary>
-        [Parameter]
-        public bool UserMayChangePassword
-        {
-            get { return this.usermaychangepassword;}
-
-            set { this.usermaychangepassword = value; }
-        }
-
-        private bool usermaychangepassword;
-        #endregion Parameter Properties
-
-        #region Cmdlet Overrides
-        /// <summary>
-        /// BeginProcessing method.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            if (this.HasParameter("AccountExpires") && AccountNeverExpires.IsPresent)
-            {
-                InvalidParametersException ex = new InvalidParametersException("AccountExpires", "AccountNeverExpires");
-                ThrowTerminatingError(ex.MakeErrorRecord());
-            }
-
-            sam = new Sam();
-        }
-
-        /// <summary>
-        /// ProcessRecord method.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            try
-            {
-                LocalUser user = null;
-
-                if (InputObject != null)
-                {
-                    if (CheckShouldProcess(InputObject.ToString()))
-                        user = InputObject;
-                }
-                else if (Name != null)
-                {
-                    user = sam.GetLocalUser(Name);
-
-                    if (!CheckShouldProcess(Name))
-                        user = null;
-                }
-                else if (SID != null)
-                {
-                    user = sam.GetLocalUser(SID);
-
-                    if (!CheckShouldProcess(SID.ToString()))
-                        user = null;
-                }
-
-                if (user == null)
-                    return;
-
-                // We start with what already exists
-                var delta = user.Clone();
-                bool? passwordNeverExpires = null;
-
-                foreach (var paramName in parameterNames)
-                {
-                    if (this.HasParameter(paramName))
-                    {
-                        switch (paramName)
-                        {
-                            case "AccountExpires":
-                                delta.AccountExpires = this.AccountExpires;
-                                break;
-
-                            case "Description":
-                                delta.Description = this.Description;
-                                break;
-
-                            case "FullName":
-                                delta.FullName = this.FullName;
-                                break;
-
-                            case "UserMayChangePassword":
-                                delta.UserMayChangePassword = this.UserMayChangePassword;
-                                break;
-
-                            case "PasswordNeverExpires":
-                                passwordNeverExpires = this.PasswordNeverExpires;
-                                break;
-                        }
-                    }
-                }
-
-                if (AccountNeverExpires.IsPresent)
-                    delta.AccountExpires = null;
-
-                sam.UpdateLocalUser(user, delta, Password, passwordNeverExpires);
-            }
-            catch (Exception ex)
-            {
-                WriteError(ex.MakeErrorRecord());
-            }
-        }
-
-        /// <summary>
-        /// EndProcessing method.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            if (sam != null)
-            {
-                sam.Dispose();
-                sam = null;
-            }
-        }
-        #endregion Cmdlet Overrides
-
-        #region Private Methods
-        private bool CheckShouldProcess(string target)
-        {
-            return ShouldProcess(target, Strings.ActionSetUser);
-        }
-        #endregion Private Methods
-    }
-
-}
-
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Exceptions.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Exceptions.cs
deleted file mode 100644
index 1c7a7630ea3..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Exceptions.cs
+++ /dev/null
@@ -1,689 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Management.Automation;
-using System.Management.Automation.SecurityAccountsManager;
-using System.Runtime.Serialization;
-
-using Microsoft.PowerShell.LocalAccounts;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Base class for cmdlet-specific exceptions.
-    /// </summary>
-    public class LocalAccountsException : Exception
-    {
-#region Public Properties
-        /// <summary>
-        /// Gets the <see cref="System.Management.Automation.ErrorCategory"/>
-        /// value for this exception.
-        /// </summary>
-        public ErrorCategory ErrorCategory
-        {
-            get;
-            private set;
-        }
-
-        /// <summary>
-        /// Gets the target object for this exception. This is used as
-        /// the TargetObject member of a PowerShell
-        /// <see cref="System.Management.Automation.ErrorRecord"/> object.
-        /// </summary>
-        public object Target
-        {
-            get;
-            private set;
-        }
-
-        /// <summary>
-        /// Gets the error name. This is used as the ErrorId parameter when
-        /// constructing a PowerShell <see cref="System.Management.Automation.ErrorRecord"/>
-        /// oject.
-        /// </summary>
-        public string ErrorName
-        {
-            get
-            {
-                string exname = "Exception";
-                var exlen = exname.Length;
-                var name = this.GetType().Name;
-
-                if (name.EndsWith(exname, StringComparison.OrdinalIgnoreCase) && name.Length > exlen)
-                    name = name.Substring(0, name.Length - exlen);
-                return name;
-            }
-        }
-#endregion Public Properties
-
-        internal LocalAccountsException(string message, object target, ErrorCategory errorCategory)
-            : base(message)
-        {
-            ErrorCategory = errorCategory;
-            Target = target;
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public LocalAccountsException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public LocalAccountsException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public LocalAccountsException(string message, Exception ex) : base(message, ex) { }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected LocalAccountsException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating an error occurred during one of the internal
-    /// operations such as opening or closing a handle.
-    /// </summary>
-    public class InternalException : LocalAccountsException
-    {
-#region Public Properties
-        /// <summary>
-        /// Gets the NTSTATUS code for this exception.
-        /// </summary>
-        public UInt32 StatusCode
-        {
-            get;
-            private set;
-        }
-#endregion Public Properties
-
-        internal InternalException(UInt32 ntStatus,
-                                   string message,
-                                   object target,
-                                   ErrorCategory errorCategory = ErrorCategory.NotSpecified)
-            : base(message, target, errorCategory)
-        {
-            StatusCode = ntStatus;
-        }
-
-        internal InternalException(UInt32 ntStatus,
-                                   object target,
-                                   ErrorCategory errorCategory = ErrorCategory.NotSpecified)
-            : this(ntStatus,
-                   StringUtil.Format(Strings.UnspecifiedErrorNtStatus, ntStatus),
-                   target,
-                   errorCategory)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public InternalException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public InternalException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public InternalException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected InternalException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating an error occurred when a native function
-    /// is called that returns a Win32 error code as opposed to an
-    /// NT Status code.
-    /// </summary>
-    public class Win32InternalException : LocalAccountsException
-    {
-#region Public Properties
-        /// <summary>
-        /// The Win32 error code for this exception.
-        /// </summary>
-        public int NativeErrorCode
-        {
-            get;
-            private set;
-        }
-#endregion Public Properties
-
-        internal Win32InternalException(int errorCode,
-                                        string message,
-                                        object target,
-                                        ErrorCategory errorCategory = ErrorCategory.NotSpecified)
-            : base(message, target, errorCategory)
-        {
-            NativeErrorCode = errorCode;
-        }
-
-        internal Win32InternalException(int errorCode,
-                                        object target,
-                                        ErrorCategory errorCategory = ErrorCategory.NotSpecified)
-            : this(errorCode,
-                   StringUtil.Format(Strings.UnspecifiedErrorWin32Error, errorCode),
-                   target,
-                   errorCategory)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public Win32InternalException() : base() {}
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public Win32InternalException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public Win32InternalException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected Win32InternalException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating an invalid password.
-    /// </summary>
-    public class InvalidPasswordException : LocalAccountsException
-    {
-        /// <summary>
-        /// Generates with a default invalid password message.
-        /// </summary>
-        public InvalidPasswordException()
-            : base(Strings.InvalidPassword, null, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        /// <summary>
-        /// Generates the exception with the specified message.
-        /// </summary>
-        /// <param name="message"></param>
-        public InvalidPasswordException(string message)
-            : base(message, null, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        /// <summary>
-        /// Creates a message from the specified error code.
-        /// </summary>
-        /// <param name="errorCode"></param>
-        public InvalidPasswordException(uint errorCode)
-            : base(StringUtil.GetSystemMessage(errorCode), null, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public InvalidPasswordException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected InvalidPasswordException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception thrown when invalid parameter pairing is detected.
-    /// </summary>
-    public class InvalidParametersException : LocalAccountsException
-    {
-        /// <summary>
-        /// Creates InvalidParametersException using the specified message.
-        /// </summary>
-        /// <param name="message"></param>
-        public InvalidParametersException(string message)
-            : base(message, null, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        internal InvalidParametersException(string parameterA, string parameterB)
-            : this(StringUtil.Format(Strings.InvalidParameterPair, parameterA, parameterB))
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public InvalidParametersException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public InvalidParametersException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected InvalidParametersException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating permission denied.
-    /// </summary>
-    public class AccessDeniedException : LocalAccountsException
-    {
-        internal AccessDeniedException(object target)
-            : base(Strings.AccessDenied, target, ErrorCategory.PermissionDenied)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public AccessDeniedException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public AccessDeniedException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public AccessDeniedException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected AccessDeniedException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that the name of a user or group is invalid.
-    /// </summary>
-    public class InvalidNameException : LocalAccountsException
-    {
-        internal InvalidNameException(string name, object target)
-            : base(StringUtil.Format(Strings.InvalidName, name), target, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public InvalidNameException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public InvalidNameException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public InvalidNameException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected InvalidNameException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that the specified name is already in use.
-    /// </summary>
-    public class NameInUseException : LocalAccountsException
-    {
-        internal NameInUseException(string name, object target)
-            : base(StringUtil.Format(Strings.NameInUse, name), target, ErrorCategory.InvalidArgument)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public NameInUseException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public NameInUseException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public NameInUseException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected NameInUseException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that an entity of some kind was not found.
-    /// Also serves as a base class for more specific object-not-found errors.
-    /// </summary>
-    public class NotFoundException : LocalAccountsException
-    {
-        internal NotFoundException(string message, object target)
-          : base(message, target, ErrorCategory.ObjectNotFound)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public NotFoundException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public NotFoundException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public NotFoundException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected NotFoundException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a principal was not Found.
-    /// </summary>
-    public class PrincipalNotFoundException : NotFoundException
-    {
-        internal PrincipalNotFoundException(string principal, object target)
-            : base(StringUtil.Format(Strings.PrincipalNotFound, principal), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public PrincipalNotFoundException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public PrincipalNotFoundException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public PrincipalNotFoundException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected PrincipalNotFoundException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a group was not found.
-    /// </summary>
-    public class GroupNotFoundException : NotFoundException
-    {
-        internal GroupNotFoundException(string group, object target)
-            : base(StringUtil.Format(Strings.GroupNotFound, group), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public GroupNotFoundException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public GroupNotFoundException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public GroupNotFoundException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected GroupNotFoundException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a user was not found.
-    /// </summary>
-    public class UserNotFoundException : NotFoundException
-    {
-        internal UserNotFoundException(string user, object target)
-            : base(StringUtil.Format(Strings.UserNotFound, user), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public UserNotFoundException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public UserNotFoundException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public UserNotFoundException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected UserNotFoundException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a group member was not found.
-    /// </summary>
-    public class MemberNotFoundException : NotFoundException
-    {
-        internal MemberNotFoundException(string member, string group)
-            : base(StringUtil.Format(Strings.MemberNotFound, member, group), member)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public MemberNotFoundException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public MemberNotFoundException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public MemberNotFoundException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected MemberNotFoundException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that an entity of some kind already exists.
-    /// Also serves as a base class for more specific object-exists errors.
-    /// </summary>
-    public class ObjectExistsException : LocalAccountsException
-    {
-        internal ObjectExistsException(string message, object target)
-            : base(message, target, ErrorCategory.ResourceExists)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public ObjectExistsException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public ObjectExistsException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public ObjectExistsException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected ObjectExistsException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a group already exists.
-    /// </summary>
-    public class GroupExistsException : ObjectExistsException
-    {
-        internal GroupExistsException(string group, object target)
-            : base(StringUtil.Format(Strings.GroupExists, group), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public GroupExistsException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public GroupExistsException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public GroupExistsException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected GroupExistsException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that a group already exists.
-    /// </summary>
-    public class UserExistsException : ObjectExistsException
-    {
-        internal UserExistsException(string user, object target)
-            : base(StringUtil.Format(Strings.UserExists, user), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public UserExistsException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public UserExistsException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public UserExistsException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected UserExistsException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-
-    /// <summary>
-    /// Exception indicating that an object already exists as a group member.
-    /// </summary>
-    public class MemberExistsException : ObjectExistsException
-    {
-        internal MemberExistsException(string member, string group, object target)
-            : base(StringUtil.Format(Strings.MemberExists, member, group), target)
-        {
-        }
-
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        public MemberExistsException() : base() { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        public MemberExistsException(string message) : base(message) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="ex"></param>
-        public MemberExistsException(string message, Exception ex) : base(message, ex) { }
-        /// <summary>
-        /// Compliance Constructor.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="ctx"></param>
-        protected MemberExistsException(SerializationInfo info, StreamingContext ctx) : base(info, ctx) { }
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Extensions.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Extensions.cs
deleted file mode 100644
index 007966cb0a8..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Extensions.cs
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Runtime.InteropServices;
-using System.Security;
-using System.Security.Principal;
-using System.Text.RegularExpressions;
-
-using Microsoft.PowerShell.Commands;
-using Microsoft.PowerShell.LocalAccounts;
-
-namespace System.Management.Automation.SecurityAccountsManager.Extensions
-{
-    /// <summary>
-    /// Provides extension methods for the Cmdlet class.
-    /// </summary>
-    internal static class CmdletExtensions
-    {
-        /// <summary>
-        /// Attempt to create a SID from a string.
-        /// </summary>
-        /// <param name="cmdlet">The cmdlet being extended with this method.</param>
-        /// <param name="s">The string to be converted to a SID.</param>
-        /// <param name="allowSidConstants">
-        /// A boolean indicating whether SID constants, such as "BA", are considered.
-        /// </param>
-        /// <returns>
-        /// A <see cref="SecurityIdentifier"/> object if the conversion was successful,
-        /// null otherwise.
-        /// </returns>
-        internal static SecurityIdentifier TrySid(this Cmdlet cmdlet,
-                                                  string s,
-                                                  bool allowSidConstants = false)
-        {
-            if (!allowSidConstants)
-                if (!(s.Length > 2 && s.StartsWith("S-", StringComparison.Ordinal) && char.IsDigit(s[2])))
-                    return null;
-
-            SecurityIdentifier sid = null;
-
-            try
-            {
-                sid = new SecurityIdentifier(s);
-            }
-            catch (ArgumentException)
-            {
-                // do nothing here, just fall through to the return
-            }
-
-            return sid;
-        }
-    }
-
-    /// <summary>
-    /// Provides extension methods for the PSCmdlet class.
-    /// </summary>
-    internal static class PSExtensions
-    {
-        /// <summary>
-        /// Determine if a given parameter was provided to the cmdlet.
-        /// </summary>
-        /// <param name="cmdlet">
-        /// The <see cref="PSCmdlet"/> object to check.
-        /// </param>
-        /// <param name="parameterName">
-        /// A string containing the name of the parameter. This should be in the
-        /// same letter-casing as the defined parameter.
-        /// </param>
-        /// <returns>
-        /// True if the specified parameter was given on the cmdlet invocation,
-        /// false otherwise.
-        /// </returns>
-        internal static bool HasParameter(this PSCmdlet cmdlet, string parameterName)
-        {
-            var invocation = cmdlet.MyInvocation;
-            if (invocation != null)
-            {
-                var parameters = invocation.BoundParameters;
-
-                if (parameters != null)
-                {
-                    // PowerShell sets the parameter names in the BoundParameters dictionary
-                    // to their "proper" casing, so we don't have to do a case-insensitive search.
-                    if (parameters.ContainsKey(parameterName))
-                        return true;
-                }
-            }
-
-            return false;
-        }
-    }
-
-    /// <summary>
-    /// Provides extension methods for the SecurityIdentifier class.
-    /// </summary>
-    internal static class SidExtensions
-    {
-        /// <summary>
-        /// Get the Relative ID (RID) from a <see cref="SecurityIdentifier"/> object.
-        /// </summary>
-        /// <param name="sid">The SecurityIdentifier containing the desired Relative ID.</param>
-        /// <returns>
-        /// A UInt32 value containing the Relative ID in the SecurityIdentifier.
-        /// </returns>
-        internal static UInt32 GetRid(this SecurityIdentifier sid)
-        {
-            byte[] sidBinary = new byte[sid.BinaryLength];
-            sid.GetBinaryForm(sidBinary, 0);
-
-            return System.BitConverter.ToUInt32(sidBinary, sidBinary.Length-4);
-        }
-
-        /// <summary>
-        /// Gets the Identifier Authority portion of a <see cref="SecurityIdentifier"/>
-        /// </summary>
-        /// <param name="sid">The SecurityIdentifier containing the desired Authority.</param>
-        /// <returns>
-        /// A long integer value containing the SecurityIdentifier's Identifier Authority value.
-        /// </returns>
-        /// <remarks>
-        /// This method is used primarily for determining the Source of a Principal.
-        /// The Win32 API LsaLookupUserAccountType function does not (yet) properly
-        /// identify MicrosoftAccount principals.
-        /// </remarks>
-        internal static long GetIdentifierAuthority(this SecurityIdentifier sid)
-        {
-            byte[] sidBinary = new byte[sid.BinaryLength];
-
-            sid.GetBinaryForm(sidBinary, 0);
-
-            // The Identifier Authority is six bytes wide,
-            // in big-endian format, starting at the third byte
-            long authority = (long) (((long)sidBinary[2]) << 40) +
-                                    (((long)sidBinary[3]) << 32) +
-                                    (((long)sidBinary[4]) << 24) +
-                                    (((long)sidBinary[5]) << 16) +
-                                    (((long)sidBinary[6]) <<  8) +
-                                    (((long)sidBinary[7])      );
-
-            return authority;
-        }
-
-        internal static bool IsMsaAccount(this SecurityIdentifier sid)
-        {
-            return sid.GetIdentifierAuthority() == 11;
-        }
-    }
-
-    internal static class SecureStringExtensions
-    {
-        /// <summary>
-        /// Extension method to extract clear text from a
-        /// <see cref="System.Security.SecureString"/> object.
-        /// </summary>
-        /// <param name="str">
-        /// This SecureString object, containing encrypted text.
-        /// </param>
-        /// <returns>
-        /// A string containing the SecureString object's original text.
-        /// </returns>
-        internal static string AsString(this SecureString str)
-        {
-#if CORECLR
-            IntPtr buffer = SecureStringMarshal.SecureStringToCoTaskMemUnicode(str);
-            string clear = Marshal.PtrToStringUni(buffer);
-            Marshal.ZeroFreeCoTaskMemUnicode(buffer);
-#else
-            var bstr = Marshal.SecureStringToBSTR(str);
-            string clear = Marshal.PtrToStringAuto(bstr);
-            Marshal.ZeroFreeBSTR(bstr);
-#endif
-            return clear;
-        }
-    }
-
-    internal static class ExceptionExtensions
-    {
-        internal static ErrorRecord MakeErrorRecord(this Exception ex,
-                                                    string errorId,
-                                                    ErrorCategory errorCategory,
-                                                    object target = null)
-        {
-            return new ErrorRecord(ex, errorId, errorCategory, target);
-        }
-
-        internal static ErrorRecord MakeErrorRecord(this Exception ex, object target = null)
-        {
-            // This part is somewhat less than beautiful, but it prevents
-            // having to have multiple exception handlers in every cmdlet command.
-            var exTemp = ex as LocalAccountsException;
-
-            if (exTemp != null)
-                return MakeErrorRecord(exTemp, target ?? exTemp.Target);
-
-            return new ErrorRecord(ex,
-                                   Strings.UnspecifiedError,
-                                   ErrorCategory.NotSpecified,
-                                   target);
-        }
-
-        internal static ErrorRecord MakeErrorRecord(this LocalAccountsException ex, object target = null)
-        {
-            return ex.MakeErrorRecord(ex.ErrorName, ex.ErrorCategory, target ?? ex.Target);
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalGroup.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalGroup.cs
deleted file mode 100644
index b43904fb773..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalGroup.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-
-using Microsoft.PowerShell.LocalAccounts;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Describes a Local Group.
-    /// Objects of this type are provided to and returned from group-related Cmdlets.
-    /// </summary>
-    public class LocalGroup : LocalPrincipal
-    {
-        #region Public Properties
-        /// <summary>
-        /// A short description of the Group.
-        /// </summary>
-        public string Description { get; set; }
-        #endregion Public Properties
-
-        #region Construction
-        /// <summary>
-        /// Initializes a new LocalGroup object.
-        /// </summary>
-        public LocalGroup()
-        {
-            ObjectClass = Strings.ObjectClassGroup;
-        }
-
-        /// <summary>
-        /// Initializes a new LocalUser object with the specified name.
-        /// </summary>
-        /// <param name="name">Name of the new LocalGroup.</param>
-        public LocalGroup(string name)
-          : base(name)
-        {
-            ObjectClass = Strings.ObjectClassGroup;
-        }
-
-        /// <summary>
-        /// Construct a new LocalGroup object that is a copy of another.
-        /// </summary>
-        /// <param name="other"></param>
-        private LocalGroup(LocalGroup other)
-          : this(other.Name)
-        {
-            Description = other.Description;
-        }
-        #endregion Construction
-
-        #region Public Methods
-        /// <summary>
-        /// Provides a string representation of the LocalGroup object.
-        /// </summary>
-        /// <returns>
-        /// A string containing the Group Name.
-        /// </returns>
-        public override string ToString()
-        {
-            return Name ?? SID.ToString();
-        }
-
-        /// <summary>
-        /// Create a copy of a LocalGroup object.
-        /// </summary>
-        /// <returns>
-        /// A new LocalGroup object with the same property values as this one.
-        /// </returns>
-        public LocalGroup Clone()
-        {
-            return new LocalGroup(this);
-        }
-        #endregion Public Methods
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalPrincipal.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalPrincipal.cs
deleted file mode 100644
index dcfec24631b..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalPrincipal.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Security.Principal;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Defines the source of a Principal.
-    /// </summary>
-    public enum PrincipalSource
-    {
-        /// <summary>
-        /// The principal source is unknown or could not be determined.
-        /// </summary>
-        Unknown = 0,
-
-        /// <summary>
-        /// The principal is sourced from the local Windows Security Accounts Manager.
-        /// </summary>
-        Local,
-
-        /// <summary>
-        /// The principal is sourced from an Active Directory domain.
-        /// </summary>
-        ActiveDirectory,
-
-        /// <summary>
-        /// The principal is sourced from Azure Active Directory.
-        /// </summary>
-        AzureAD,
-
-        /// <summary>
-        /// The principal is a Microsoft Account, such as
-        /// <b>MicrosoftAccount\user@domain.com</b>
-        /// </summary>
-        MicrosoftAccount
-    }
-
-    /// <summary>
-    /// Represents a Principal. Serves as a base class for Users and Groups.
-    /// </summary>
-    public class LocalPrincipal
-    {
-        #region Public Properties
-        /// <summary>
-        /// The account name of the Principal.
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// The Security Identifier that uniquely identifies the Principal/
-        /// </summary>
-        public SecurityIdentifier SID { get; set; }
-
-        /// <summary>
-        /// Indicates the account store from which the principal is sourced.
-        /// One of the PrincipalSource enumerations.
-        /// </summary>
-        public PrincipalSource? PrincipalSource { get; set; }
-
-        /// <summary>
-        /// The object class that represents this principal.
-        /// This can be User or Group.
-        /// </summary>
-        public string ObjectClass { get; set; }
-        #endregion Public Properties
-
-        #region Construction
-        /// <summary>
-        /// Initializes a new LocalPrincipal object.
-        /// </summary>
-        public LocalPrincipal()
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new LocalPrincipal object with the specified name.
-        /// </summary>
-        /// <param name="name">Name of the new LocalPrincipal.</param>
-        public LocalPrincipal(string name)
-        {
-            Name = name;
-        }
-        #endregion Construction
-
-        #region Public Methods
-        /// <summary>
-        /// Provides a string representation of the Principal.
-        /// </summary>
-        /// <returns>
-        /// A string, in SDDL form, representing the Principal.
-        /// </returns>
-        public override string ToString()
-        {
-            return Name ?? SID.ToString();
-        }
-        #endregion Public Methods
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalUser.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalUser.cs
deleted file mode 100644
index 9cad9777cac..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/LocalUser.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-
-using Microsoft.PowerShell.LocalAccounts;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// Describes a Local User.
-    /// Objects of this type are provided to and returned from user-related Cmdlets.
-    /// </summary>
-    public class LocalUser : LocalPrincipal
-    {
-        #region Public Properties
-        /// <summary>
-        /// The date and time at which this user account expires.
-        /// A value of null indicates that the account never expires.
-        /// </summary>
-        public DateTime? AccountExpires { get; set; }
-
-        /// <summary>
-        /// A short description of the User.
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// Indicates whether the user account is enabled (true) or disabled (false).
-        /// </summary>
-        public bool Enabled { get; set; }
-
-        /// <summary>
-        /// The user's full name. Not the same as the User name.
-        /// </summary>
-        public string FullName { get; set; }
-
-        /// <summary>
-        /// The date and time at which this user account password is allowed
-        /// to be changed. The password cannot be changed before this time.
-        /// A value of null indicates that the password can be changed anytime.
-        /// </summary>
-        public DateTime? PasswordChangeableDate { get; set; }
-
-        /// <summary>
-        /// The date and time at which this user account password must be changed
-        /// to a new password. A value of null indicates that the password will
-        /// never expire.
-        /// </summary>
-        public DateTime? PasswordExpires { get; set; }
-
-        /// <summary>
-        /// Indicates whether the user is allowed to change the password (true)
-        /// or not (false).
-        /// </summary>
-        public bool UserMayChangePassword { get; set; }
-
-        /// <summary>
-        /// Indicates whether the user must have a password (true) or not (false).
-        /// </summary>
-        public bool PasswordRequired { get; set; }
-
-        /// <summary>
-        /// The date and time at which this user last changed the account password.
-        /// </summary>
-        public DateTime? PasswordLastSet { get; set; }
-
-        /// <summary>
-        /// The date and time at which the user last logged on to the machine.
-        /// </summary>
-        public DateTime? LastLogon { get; set; }
-        #endregion Public Properties
-
-        #region Construction
-        /// <summary>
-        /// Initializes a new LocalUser object.
-        /// </summary>
-        public LocalUser()
-        {
-            ObjectClass = Strings.ObjectClassUser;
-        }
-
-        /// <summary>
-        /// Initializes a new LocalUser object with the specified name.
-        /// </summary>
-        /// <param name="name">Name of the new LocalUser.</param>
-        public LocalUser(string name)
-          : base(name)
-        {
-            ObjectClass = Strings.ObjectClassUser;
-        }
-
-        /// <summary>
-        /// Construct a new LocalUser object that is a copy of another.
-        /// </summary>
-        /// <param name="other">The LocalUser object to copy.</param>
-        private LocalUser(LocalUser other)
-          : this(other.Name)
-        {
-            SID = other.SID;
-            PrincipalSource = other.PrincipalSource;
-            ObjectClass = other.ObjectClass;
-
-            AccountExpires = other.AccountExpires;
-            Description = other.Description;
-            Enabled = other.Enabled;
-            FullName = other.FullName;
-            PasswordChangeableDate = other.PasswordChangeableDate;
-            PasswordExpires = other.PasswordExpires;
-            UserMayChangePassword = other.UserMayChangePassword;
-
-            PasswordRequired = other.PasswordRequired;
-            PasswordLastSet = other.PasswordLastSet;
-            LastLogon = other.LastLogon;
-        }
-        #endregion Construction
-
-        #region Public Methods
-        /// <summary>
-        /// Provides a string representation of the LocalUser object.
-        /// </summary>
-        /// <returns>
-        /// A string containing the User Name.
-        /// </returns>
-        public override string ToString()
-        {
-            return Name ?? SID.ToString();
-        }
-
-        /// <summary>
-        /// Create a copy of a LocalUser object.
-        /// </summary>
-        /// <returns>
-        /// A new LocalUser object with the same property values as this one.
-        /// </returns>
-        public LocalUser Clone()
-        {
-            return new LocalUser(this);
-        }
-        #endregion Public Methods
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Native.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Native.cs
deleted file mode 100644
index c34dbcd64d8..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Native.cs
+++ /dev/null
@@ -1,424 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace System.Management.Automation.SecurityAccountsManager.Native
-{
-    #region Enums
-    internal enum POLICY_INFORMATION_CLASS
-    {
-        PolicyAuditLogInformation        = 1,
-        PolicyAuditEventsInformation,
-        PolicyPrimaryDomainInformation,
-        PolicyPdAccountInformation,
-        PolicyAccountDomainInformation,
-        PolicyLsaServerRoleInformation,
-        PolicyReplicaSourceInformation,
-        PolicyDefaultQuotaInformation,
-        PolicyModificationInformation,
-        PolicyAuditFullSetInformation,
-        PolicyAuditFullQueryInformation,
-        PolicyDnsDomainInformation
-    }
-
-    [Flags]
-    internal enum LSA_AccessPolicy : long
-    {
-        POLICY_VIEW_LOCAL_INFORMATION   = 0x00000001L,
-        POLICY_VIEW_AUDIT_INFORMATION   = 0x00000002L,
-        POLICY_GET_PRIVATE_INFORMATION  = 0x00000004L,
-        POLICY_TRUST_ADMIN              = 0x00000008L,
-        POLICY_CREATE_ACCOUNT           = 0x00000010L,
-        POLICY_CREATE_SECRET            = 0x00000020L,
-        POLICY_CREATE_PRIVILEGE         = 0x00000040L,
-        POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080L,
-        POLICY_SET_AUDIT_REQUIREMENTS   = 0x00000100L,
-        POLICY_AUDIT_LOG_ADMIN          = 0x00000200L,
-        POLICY_SERVER_ADMIN             = 0x00000400L,
-        POLICY_LOOKUP_NAMES             = 0x00000800L,
-        POLICY_NOTIFICATION             = 0x00001000L
-    }
-
-    internal enum SID_NAME_USE
-    {
-        SidTypeUser             = 1,
-        SidTypeGroup,
-        SidTypeDomain,
-        SidTypeAlias,
-        SidTypeWellKnownGroup,
-        SidTypeDeletedAccount,
-        SidTypeInvalid,
-        SidTypeUnknown,
-        SidTypeComputer,
-        SidTypeLabel
-    }
-
-    internal enum LSA_USER_ACCOUNT_TYPE
-    {
-        UnknownUserAccountType = 0,
-        LocalUserAccountType,
-        PrimaryDomainUserAccountType,
-        ExternalDomainUserAccountType,
-        LocalConnectedUserAccountType,  // Microsoft Account
-        AADUserAccountType,
-        InternetUserAccountType,        // Generic internet User (eg. if the SID supplied is MSA's internet SID)
-        MSAUserAccountType      // !!! NOT YET IN THE ENUM SPECIFIED IN THE C API !!!
-
-    }
-    #endregion Enums
-
-    #region Structures
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SECURITY_DESCRIPTOR
-    {
-        public byte Revision;
-        public byte Sbz1;
-        public UInt16 Control;  // SECURITY_DESCRIPTOR_CONTROL
-        public IntPtr Owner;
-        public IntPtr Group;
-        public IntPtr Sacl;
-        public IntPtr Dacl;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ACL
-    {
-        public byte AclRevision;
-        public byte Sbz1;
-        public UInt16 AclSize;
-        public UInt16 AceCount;
-        public UInt16 Sbz2;
-    }
-
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal struct USER_INFO_1
-    {
-        public string name;
-        public string password;
-        public int password_age;
-        public int priv;
-        public string home_dir;
-        public string comment;
-        public uint flags;
-        public string script_path;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_INFO_1008
-    {
-        public uint flags;
-    }
-
-    /// <summary>
-    /// The UNICODE_STRING structure is passed to a number of the SAM and LSA
-    /// API functions. This adds cleanup and managed-string conversion behaviors.
-    /// </summary>
-    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-    internal struct UNICODE_STRING
-    {
-        public UInt16 Length;
-        public UInt16 MaximumLength;
-        [MarshalAs(UnmanagedType.LPWStr)]
-        private string buffer;
-
-        public UNICODE_STRING(string s)
-        {
-            buffer = string.IsNullOrEmpty(s) ? string.Empty : s;
-            Length = (UInt16)(2 * buffer.Length);
-            MaximumLength = Length;
-        }
-
-        public override string ToString()
-        {
-            // UNICODE_STRING structures that were populated by unmanaged code
-            // often have buffers that point to junk if Length = 0, or that
-            // point to non-null-terminated strings, resulting in marshaled
-            // String objects that have more characters than they should.
-            return Length == 0 ? string.Empty
-                               : buffer.Substring(0, Length / 2);
-        }
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct OBJECT_ATTRIBUTES : IDisposable
-    {
-        public int Length;
-        public IntPtr RootDirectory;
-        public uint Attributes;
-        public IntPtr SecurityDescriptor;
-        public IntPtr SecurityQualityOfService;
-
-        private IntPtr objectName;
-        public UNICODE_STRING ObjectName;
-
-        public void Dispose()
-        {
-            if (objectName != IntPtr.Zero)
-            {
-                Marshal.DestroyStructure<UNICODE_STRING>(objectName);
-                Marshal.FreeHGlobal(objectName);
-                objectName = IntPtr.Zero;
-            }
-        }
-    }
-
-// These structures are filled in by Marshalling, so fields will be initialized
-// invisibly to the C# compiler, and some fields will not be used in C# code.
-#pragma warning disable 0649, 0169
-    [StructLayout(LayoutKind.Explicit, Size = 8)]
-    struct LARGE_INTEGER
-    {
-        [FieldOffset(0)]
-        public Int64 QuadPart;
-        [FieldOffset(0)]
-        public UInt32 LowPart;
-        [FieldOffset(4)]
-        public Int32 HighPart;
-    }
-#pragma warning restore 0649, 0169
-    #endregion Structures
-
-    internal static class Win32
-    {
-        #region Constants
-        //  The following are masks for the predefined standard access types
-        internal const UInt32 DELETE                    = 0x00010000;
-        internal const UInt32 READ_CONTROL              = 0x00020000;
-        internal const UInt32 WRITE_DAC                 = 0x00040000;
-        internal const UInt32 WRITE_OWNER               = 0x00080000;
-        internal const UInt32 SYNCHRONIZE               = 0x00100000;
-
-        internal const UInt32 STANDARD_RIGHTS_REQUIRED  = 0x000F0000;
-
-        internal const UInt32 STANDARD_RIGHTS_READ      = READ_CONTROL;
-        internal const UInt32 STANDARD_RIGHTS_WRITE     = READ_CONTROL;
-        internal const UInt32 STANDARD_RIGHTS_EXECUTE   = READ_CONTROL;
-
-        internal const UInt32 STANDARD_RIGHTS_ALL       = 0x001F0000;
-
-        internal const UInt32 SPECIFIC_RIGHTS_ALL       = 0x0000FFFF;
-
-        internal const UInt32 ACCESS_SYSTEM_SECURITY    = 0x01000000;
-
-        internal const UInt32 MAXIMUM_ALLOWED           = 0x02000000;
-
-        internal const UInt32 GENERIC_READ              = 0x80000000;
-        internal const UInt32 GENERIC_WRITE             = 0x40000000;
-        internal const UInt32 GENERIC_EXECUTE           = 0x20000000;
-        internal const UInt32 GENERIC_ALL               = 0x10000000;
-
-        // These constants control the behavior of the FormatMessage Windows API function
-        internal const uint FORMAT_MESSAGE_ALLOCATE_BUFFER  = 0x00000100;
-        internal const uint FORMAT_MESSAGE_IGNORE_INSERTS   = 0x00000200;
-        internal const uint FORMAT_MESSAGE_FROM_SYSTEM      = 0x00001000;
-        internal const uint FORMAT_MESSAGE_ARGUMENT_ARRAY   = 0x00002000;
-        internal const uint FORMAT_MESSAGE_FROM_HMODULE     = 0x00000800;
-        internal const uint FORMAT_MESSAGE_FROM_STRING      = 0x00000400;
-
-        #region Win32 Error Codes
-        //
-        // MessageText:
-        //
-        // The operation completed successfully.
-        //
-        internal const Int32 ERROR_SUCCESS              = 0;
-        internal const Int32 NO_ERROR                   = ERROR_SUCCESS;
-
-        //
-        // MessageId: ERROR_ACCESS_DENIED
-        //
-        // MessageText:
-        //
-        // Access is denied.
-        //
-        internal const int ERROR_ACCESS_DENIED          = 5;
-
-        //
-        // MessageId: ERROR_BAD_NETPATH
-        //
-        // MessageText:
-        //
-        // The network path was not found.
-        //
-        internal const int ERROR_BAD_NETPATH            = 53;
-
-        //
-        // MessageId: ERROR_NETWORK_ACCESS_DENIED
-        //
-        // MessageText:
-        //
-        // Network access is denied.
-        //
-        internal const int ERROR_NETWORK_ACCESS_DENIED  = 65;
-
-        //
-        // MessageId: ERROR_INVALID_PARAMETER
-        //
-        // MessageText:
-        //
-        // The parameter is incorrect.
-        //
-        internal const int ERROR_INVALID_PARAMETER      = 87;
-
-        //
-        // MessageText:
-        //
-        // The file name is too long.
-        //
-        internal const Int32 ERROR_BUFFER_OVERFLOW      = 111;
-
-        //
-        // MessageText:
-        //
-        // The data area passed to a system call is too small.
-        //
-        internal const Int32 ERROR_INSUFFICIENT_BUFFER  = 122;
-
-        //
-        // MessageId: ERROR_INVALID_LEVEL
-        //
-        // MessageText:
-        //
-        // The system call level is not correct.
-        //
-        internal const int ERROR_INVALID_LEVEL          = 124;
-
-        //
-        // MessageId: ERROR_INVALID_FLAGS
-        //
-        // MessageText:
-        //
-        // Invalid flags.
-        //
-        internal const Int32 ERROR_INVALID_FLAGS        = 1004;
-
-        //
-        // MessageId: ERROR_ILL_FORMED_PASSWORD
-        //
-        // MessageText:
-        //
-        // Unable to update the password. The value provided for the new password contains values that are not allowed in passwords.
-        //
-        internal const UInt32 ERROR_ILL_FORMED_PASSWORD = 1324;
-
-        //
-        // MessageId: ERROR_PASSWORD_RESTRICTION
-        //
-        // MessageText:
-        //
-        // Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain.
-        //
-        internal const UInt32 ERROR_PASSWORD_RESTRICTION    = 1325;
-
-        //
-        // MessageText:
-        //
-        // No mapping between account names and security IDs was done.
-        //
-        internal const Int32 ERROR_NONE_MAPPED          = 1332;
-
-        internal const int NERR_Success                 = 0;
-        // NERR_BASE is the base of error codes from network utilities,
-        // chosen to avoid conflict with system and redirector error codes.
-        // 2100 is a value that has been assigned to us by system.
-        internal const int NERR_BASE                    = 2100;
-
-        internal const int NERR_BadPassword             = NERR_BASE + 103;  // The password parameter is invalid.
-        internal const int NERR_UserNotFound            = NERR_BASE + 121;  // The user name could not be found.
-        internal const int NERR_NotPrimary              = NERR_BASE + 126;  // This operation is only allowed on the primary domain controller of the domain.
-        internal const int NERR_SpeGroupOp              = NERR_BASE + 134;  // This operation is not allowed on this special group.
-        internal const int NERR_PasswordTooShort        = NERR_BASE + 145;  // The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements.
-        internal const int NERR_InvalidComputer         = NERR_BASE + 251;  // This computer name is invalid.
-        internal const int NERR_LastAdmin               = NERR_BASE + 352;  // This operation is not allowed on the last administrative account.
-        #endregion Win32 Error Codes
-
-        #region SECURITY_DESCRIPTOR Control Flags
-        internal const UInt16 SE_DACL_PRESENT           = 0x0004;
-        internal const UInt16 SE_SELF_RELATIVE          = 0x8000;
-        #endregion SECURITY_DESCRIPTOR Control Flags
-
-        #region SECURITY_INFORMATION Values
-        internal const int DACL_SECURITY_INFORMATION    = 0x00000004;
-        #endregion SECURITY_INFORMATION Values
-        #endregion Constants
-
-        #region Win32 Functions
-        [DllImport(PInvokeDllNames.LookupAccountSidDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool LookupAccountSid(string systemName,
-                                                     byte[] accountSid,
-                                                     StringBuilder accountName,
-                                                     ref Int32 nameLength,
-                                                     StringBuilder domainName,
-                                                     ref Int32 domainNameLength,
-                                                     out SID_NAME_USE use);
-
-        [DllImport(PInvokeDllNames.LookupAccountNameDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool LookupAccountName(string systemName,
-                                                      string accountName,
-                                                      [MarshalAs(UnmanagedType.LPArray)]
-                                                      byte[] sid,
-                                                      ref uint sidLength,
-                                                      StringBuilder domainName,
-                                                      ref uint domainNameLength,
-                                                      out SID_NAME_USE peUse);
-
-        [DllImport(PInvokeDllNames.GetSecurityDescriptorDaclDllName, SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool GetSecurityDescriptorDacl(IntPtr pSecurityDescriptor,
-                                                              [MarshalAs(UnmanagedType.Bool)]
-                                                              out bool bDaclPresent,
-                                                              out IntPtr pDacl,
-                                                              [MarshalAs(UnmanagedType.Bool)]
-                                                              out bool bDaclDefaulted);
-
-        [DllImport(PInvokeDllNames.SetSecurityDescriptorDaclDllName, SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool SetSecurityDescriptorDacl(IntPtr pSecurityDescriptor,
-                                                              [MarshalAs(UnmanagedType.Bool)]
-                                                              bool bDaclPresent,
-                                                              IntPtr pDacl,
-                                                              [MarshalAs(UnmanagedType.Bool)]
-                                                              bool bDaclDefaulted);
-
-        [DllImport(PInvokeDllNames.FormatMessageDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-        internal static extern uint FormatMessage(uint dwFlags,
-                                                  IntPtr lpSource,
-                                                  uint dwMessageId,
-                                                  uint dwLanguageId,
-                                                  [Out] StringBuilder lpBuffer,
-                                                  uint nSize,
-                                                  string[] Arguments);
-
-        [DllImport("ntdll.dll")]
-        internal static extern uint RtlNtStatusToDosError(uint ntStatus);
-        #endregion Win32 Functions
-
-        #region LSA Functions
-        [DllImport(PInvokeDllNames.LsaOpenPolicyDllName, CharSet = CharSet.Unicode)]
-        internal static extern UInt32 LsaOpenPolicy(ref UNICODE_STRING SystemName,
-                                                    ref OBJECT_ATTRIBUTES ObjectAttributes,
-                                                    uint DesiredAccess,
-                                                    out IntPtr PolicyHandle);
-
-        [DllImport(PInvokeDllNames.LsaQueryInformationPolicyDllName, CharSet = CharSet.Unicode)]
-        internal static extern UInt32 LsaQueryInformationPolicy(IntPtr lsaHandle,
-                                                                POLICY_INFORMATION_CLASS infoClass,
-                                                                out IntPtr buffer);
-
-        [DllImport(PInvokeDllNames.LsaFreeMemoryDllName)]
-        internal static extern UInt32 LsaFreeMemory(IntPtr buffer);
-
-        [DllImport(PInvokeDllNames.LsaCloseDllName)]
-        internal static extern UInt32 LsaClose(IntPtr handle);
-
-        [DllImport("api-ms-win-security-lsalookup-l1-1-2.dll")]
-        internal static extern UInt32 LsaLookupUserAccountType([MarshalAs(UnmanagedType.LPArray)] byte[] Sid,
-                                                               out LSA_USER_ACCOUNT_TYPE accountType);
-        #endregion LSA Functions
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/NtStatus.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/NtStatus.cs
deleted file mode 100644
index 654d221a69b..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/NtStatus.cs
+++ /dev/null
@@ -1,519 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Diagnostics.CodeAnalysis;
-
-namespace System.Management.Automation.SecurityAccountsManager.Native
-{
-    internal static class NtStatus
-    {
-        #region Constants
-        //
-        //  These values are taken from ntstatus.h
-        //
-
-        //
-        // Severity codes
-        //
-        public const UInt32 STATUS_SEVERITY_WARNING         = 0x2;
-        public const UInt32 STATUS_SEVERITY_SUCCESS         = 0x0;
-        public const UInt32 STATUS_SEVERITY_INFORMATIONAL   = 0x1;
-        public const UInt32 STATUS_SEVERITY_ERROR           = 0x3;
-
-        public const UInt32 STATUS_SUCCESS                  = 0x00000000;
-        //
-        // MessageText:
-        //
-        // Returned by enumeration APIs to indicate more information is available to successive calls.
-        //
-        public const UInt32 STATUS_MORE_ENTRIES             = 0x00000105;
-
-
-        /////////////////////////////////////////////////////////////////////////
-        //
-        // Standard Information values
-        //
-        /////////////////////////////////////////////////////////////////////////
-
-        //
-        // MessageText:
-        //
-        // {Object Exists}
-        // An attempt was made to create an object and the object name already existed.
-        //
-        public const UInt32 STATUS_OBJECT_NAME_EXISTS        = 0x40000000;
-
-        //
-        // MessageText:
-        //
-        // {Password Too Complex}
-        // The Windows password is too complex to be converted to a LAN Manager password. The LAN Manager password returned is a NULL string.
-        //
-        public const UInt32 STATUS_NULL_LM_PASSWORD          = 0x4000000D;
-
-        //
-        // MessageText:
-        //
-        // {Access Denied}
-        // A process has requested access to an object, but has not been granted those access rights.
-        //
-        public const UInt32 STATUS_ACCESS_DENIED             = 0xC0000022;
-
-        //
-        // MessageText:
-        //
-        // The name provided is not a properly formed account name.
-        //
-        public const UInt32 STATUS_INVALID_ACCOUNT_NAME      = 0xC0000062;
-
-        //
-        // MessageText:
-        //
-        // The specified account already exists.
-        //
-        public const UInt32 STATUS_USER_EXISTS               = 0xC0000063;
-
-        //
-        // MessageText:
-        //
-        // The specified account does not exist.
-        //
-        public const UInt32 STATUS_NO_SUCH_USER              = 0xC0000064;     // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // The specified group already exists.
-        //
-        public const UInt32 STATUS_GROUP_EXISTS              = 0xC0000065;
-
-        //
-        // MessageText:
-        //
-        // The specified group does not exist.
-        //
-        public const UInt32 STATUS_NO_SUCH_GROUP             = 0xC0000066;
-
-        //
-        // MessageText:
-        //
-        // The specified user account is already in the specified group account. Also used to indicate a group cannot be deleted because it contains a member.
-        //
-        public const UInt32 STATUS_MEMBER_IN_GROUP           = 0xC0000067;
-
-        //
-        // MessageText:
-        //
-        // The specified user account is not a member of the specified group account.
-        //
-        public const UInt32 STATUS_MEMBER_NOT_IN_GROUP       = 0xC0000068;
-
-        //
-        // MessageText:
-        //
-        // Indicates the requested operation would disable, delete or could prevent logon for an administration account.
-        // This is not allowed to prevent creating a situation in which the system cannot be administrated.
-        //
-        public const UInt32 STATUS_LAST_ADMIN                = 0xC0000069;
-
-        //
-        // MessageText:
-        //
-        // When trying to update a password, this return status indicates that the value provided as the current password is not correct.
-        //
-        public const UInt32 STATUS_WRONG_PASSWORD            = 0xC000006A;     // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // When trying to update a password, this return status indicates that the value provided for the new password contains values that are not allowed in passwords.
-        //
-        public const UInt32 STATUS_ILL_FORMED_PASSWORD       = 0xC000006B;
-
-        //
-        // MessageText:
-        //
-        // When trying to update a password, this status indicates that some password update rule has been violated. For example, the password may not meet length criteria.
-        //
-        public const UInt32 STATUS_PASSWORD_RESTRICTION      = 0xC000006C;     // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // The user account's password has expired.
-        //
-        public const UInt32 STATUS_PASSWORD_EXPIRED          = 0xC0000071;     // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // The referenced account is currently disabled and may not be logged on to.
-        //
-        public const UInt32 STATUS_ACCOUNT_DISABLED          = 0xC0000072;     // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // None of the information to be translated has been translated.
-        //
-        public const UInt32 STATUS_NONE_MAPPED               = 0xC0000073;
-
-        //
-        // MessageText:
-        //
-        // Indicates the sub-authority value is invalid for the particular use.
-        //
-        public const UInt32 STATUS_INVALID_SUB_AUTHORITY     = 0xC0000076;
-
-        //
-        // MessageText:
-        //
-        // Indicates the ACL structure is not valid.
-        //
-        public const UInt32 STATUS_INVALID_ACL               = 0xC0000077;
-
-        //
-        // MessageText:
-        //
-        // Indicates the SID structure is not valid.
-        //
-        public const UInt32 STATUS_INVALID_SID               = 0xC0000078;
-
-        //
-        // MessageText:
-        //
-        // Indicates the SECURITY_DESCRIPTOR structure is not valid.
-        //
-        public const UInt32 STATUS_INVALID_SECURITY_DESCR    = 0xC0000079;
-
-        //
-        // Network specific errors.
-        //
-        //
-        //
-        // MessageText:
-        //
-        // The request is not supported.
-        //
-        public const UInt32 STATUS_NOT_SUPPORTED             = 0xC00000BB;
-
-        //
-        // MessageText:
-        //
-        // This remote computer is not listening.
-        //
-        public const UInt32 STATUS_REMOTE_NOT_LISTENING      = 0xC00000BC;
-
-        //
-        // MessageText:
-        //
-        // Network access is denied.
-        //
-        public const UInt32 STATUS_NETWORK_ACCESS_DENIED     = 0xC00000CA;
-
-        //
-        // MessageText:
-        //
-        // Indicates an attempt was made to operate on the security of an object that does not have security associated with it.
-        //
-        public const UInt32 STATUS_NO_SECURITY_ON_OBJECT     = 0xC00000D7;
-
-        //
-        // MessageText:
-        //
-        // An internal error occurred.
-        //
-        public const UInt32 STATUS_INTERNAL_ERROR            = 0xC00000E5;
-
-        //
-        // MessageText:
-        //
-        // Indicates a security descriptor is not in the necessary format (absolute or self-relative).
-        //
-        public const UInt32 STATUS_BAD_DESCRIPTOR_FORMAT     = 0xC00000E7;
-
-        //
-        // MessageText:
-        //
-        // A specified name string is too long for its intended use.
-        //
-        public const UInt32 STATUS_NAME_TOO_LONG             = 0xC0000106;
-
-        //
-        // MessageText:
-        //
-        // Indicates a name specified as a remote computer name is syntactically invalid.
-        //
-        public const UInt32 STATUS_INVALID_COMPUTER_NAME     = 0xC0000122;
-
-        //
-        // MessageText:
-        //
-        // Indicates an operation has been attempted on a built-in (special) SAM account which is incompatible with built-in accounts. For example, built-in accounts cannot be deleted.
-        //
-        public const UInt32 STATUS_SPECIAL_ACCOUNT           = 0xC0000124;
-
-        //
-        // MessageText:
-        //
-        // The operation requested may not be performed on the specified group because it is a built-in special group.
-        //
-        public const UInt32 STATUS_SPECIAL_GROUP             = 0xC0000125;
-
-        //
-        // MessageText:
-        //
-        // The operation requested may not be performed on the specified user because it is a built-in special user.
-        //
-        public const UInt32 STATUS_SPECIAL_USER              = 0xC0000126;
-
-        //
-        // MessageText:
-        //
-        // Indicates a member cannot be removed from a group because the group is currently the member's primary group.
-        //
-        public const UInt32 STATUS_MEMBERS_PRIMARY_GROUP     = 0xC0000127;
-
-        //
-        // MessageText:
-        //
-        // The specified local group does not exist.
-        //
-        public const UInt32 STATUS_NO_SUCH_ALIAS             = 0xC0000151;
-
-        //
-        // MessageText:
-        //
-        // The specified account name is not a member of the group.
-        //
-        public const UInt32 STATUS_MEMBER_NOT_IN_ALIAS       = 0xC0000152;
-
-        //
-        // MessageText:
-        //
-        // The specified account name is already a member of the group.
-        //
-        public const UInt32 STATUS_MEMBER_IN_ALIAS           = 0xC0000153;
-
-        //
-        // MessageText:
-        //
-        // The specified local group already exists.
-        //
-        public const UInt32 STATUS_ALIAS_EXISTS              = 0xC0000154;
-
-        //
-        // MessageText:
-        //
-        // A member could not be added to or removed from the local group because the member does not exist.
-        //
-        public const UInt32 STATUS_NO_SUCH_MEMBER            = 0xC000017A;
-
-        //
-        // MessageText:
-        //
-        // A new member could not be added to a local group because the member has the wrong account type.
-        //
-        public const UInt32 STATUS_INVALID_MEMBER            = 0xC000017B;
-
-        //
-        // MessageText:
-        //
-        // The user's account has expired.
-        //
-        public const UInt32 STATUS_ACCOUNT_EXPIRED           = 0xC0000193;    // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // {Invalid ACE Condition}
-        // The specified access control entry (ACE) contains an invalid condition.
-        //
-        public const UInt32 STATUS_INVALID_ACE_CONDITION     = 0xC00001A2;
-
-        //
-        // MessageText:
-        //
-        // The user's password must be changed before signing in.
-        //
-        public const UInt32 STATUS_PASSWORD_MUST_CHANGE      = 0xC0000224;    // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // The object was not found.
-        //
-        public const UInt32 STATUS_NOT_FOUND                 = 0xC0000225;
-
-        //
-        // MessageText:
-        //
-        // Could not find a domain controller for this domain.
-        //
-        public const UInt32 STATUS_DOMAIN_CONTROLLER_NOT_FOUND = 0xC0000233;
-
-        //
-        // MessageText:
-        //
-        // The user account has been automatically locked because too many invalid logon attempts or password change attempts have been requested.
-        //
-        public const UInt32 STATUS_ACCOUNT_LOCKED_OUT        = 0xC0000234;    // ntsubauth
-
-        //
-        // MessageText:
-        //
-        // The password provided is too short to meet the policy of your user account. Please choose a longer password.
-        //
-        public const UInt32 STATUS_PWD_TOO_SHORT             = 0xC000025A;
-
-        //
-        // MessageText:
-        //
-        // The policy of your user account does not allow you to change passwords too frequently. This is done to prevent users from changing back to a familiar, but potentially discovered, password. If you feel your password has been compromised then please contact your administrator immediately to have a new one assigned.
-        //
-        public const UInt32 STATUS_PWD_TOO_RECENT            = 0xC000025B;
-
-        //
-        // MessageText:
-        //
-        // You have attempted to change your password to one that you have used in the past. The policy of your user account does not allow this. Please select a password that you have not previously used.
-        //
-        public const UInt32 STATUS_PWD_HISTORY_CONFLICT      = 0xC000025C;
-
-        //
-        // MessageText:
-        //
-        // The password provided is too long to meet the policy of your user account. Please choose a shorter password.
-        //
-        public const UInt32 STATUS_PWD_TOO_LONG              = 0xC000027A;
-
-        //
-        // MessageText:
-        //
-        // Only an administrator can modify the membership list of an administrative group.
-        //
-        public const UInt32 STATUS_DS_SENSITIVE_GROUP_VIOLATION = 0xC00002CD;
-
-        //
-        // MessageText:
-        //
-        // The specified group type is invalid.
-        //
-        public const UInt32 STATUS_DS_INVALID_GROUP_TYPE     = 0xC00002D4;
-
-        //
-        // MessageText:
-        //
-        // A local group cannot have another cross domain local group as a member.
-        //
-        public const UInt32 STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER = 0xC00002DB;
-
-        //
-        // MessageText:
-        //
-        // Cannot change to security disabled group because of having primary members in this group.
-        //
-        public const UInt32 STATUS_DS_HAVE_PRIMARY_MEMBERS   = 0xC00002DC;
-
-        //
-        // MessageText:
-        //
-        // EAS policy requires that the user change their password before this operation can be performed.
-        //
-        public const UInt32 STATUS_PASSWORD_CHANGE_REQUIRED  = 0xC000030C;
-
-        #endregion Constants
-
-        #region Public Methods
-        /// <summary>
-        /// Determine if an NTSTATUS value indicates Success.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// True if the NTSTATUS value indicates success, false otherwise.
-        /// </returns>
-        public static bool IsSuccess(UInt32 ntstatus)
-        {
-            return Severity(ntstatus) == STATUS_SEVERITY_SUCCESS;
-        }
-
-        /// <summary>
-        /// Determine if an NTSTATUS value indicates an Error.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// True if the NTSTATUS value indicates an error, false otherwise.
-        /// </returns>
-        public static bool IsError(UInt32 ntstatus)
-        {
-            return Severity(ntstatus) == STATUS_SEVERITY_ERROR;
-        }
-
-        /// <summary>
-        /// Determine if an NTSTATUS value indicates a Warning.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// True if the NTSTATUS value indicates a warning, false otherwise.
-        /// </returns>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        public static bool IsWarning(UInt32 ntstatus)
-        {
-            return Severity(ntstatus) == STATUS_SEVERITY_WARNING;
-        }
-
-        /// <summary>
-        /// Determine if an NTSTATUS value indicates that the value is Informational.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// True if the NTSTATUS value indicates that it is informational, false otherwise.
-        /// </returns>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        public static bool IsInformational(UInt32 ntstatus)
-        {
-            return Severity(ntstatus) == STATUS_SEVERITY_INFORMATIONAL;
-        }
-
-        /// <summary>
-        /// Return the Severity part of an NTSTATUS value.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// One of the STATUS_SEVERITY_* values
-        /// </returns>
-        public static uint Severity(UInt32 ntstatus)
-        {
-            return ntstatus >> 30;
-        }
-
-        /// <summary>
-        /// Return the Facility part of an NSTATUS value.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// The value of the Facility portion of an NTSTATUS value.
-        /// </returns>
-
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        public static uint Facility(UInt32 ntstatus)
-        {
-            return (ntstatus >> 16) & 0x0FFF;
-        }
-
-        /// <summary>
-        /// Return the Code part of an NTSTATUS value.
-        /// </summary>
-        /// <param name="ntstatus">The NTSTATUS value returned from native functions.</param>
-        /// <returns>
-        /// The value of the Code portion of an NTSTATUS value.
-        /// </returns>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        public static uint Code(UInt32 ntstatus)
-        {
-            return ntstatus & 0xFFFF;
-        }
-
-        #endregion Public Methods
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/PInvokeDllNames.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/PInvokeDllNames.cs
deleted file mode 100644
index 68a7d31e833..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/PInvokeDllNames.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-namespace System.Management.Automation
-{
-    /// <summary>
-    /// PinvokeDllNames contains the DLL names to be use for PInvoke in FullCLR/CoreCLR powershell.
-    ///
-    /// * When adding a new DLL name here, make sure that you add both the FullCLR and CoreCLR version
-    ///   of it. Add the comment '/*COUNT*/' with the new DLL name, and make sure the 'COUNT' is the
-    ///   same for both FullCLR and CoreCLR DLL names.
-    /// </summary>
-    internal static class PInvokeDllNames
-    {
-        internal const string GetLastErrorDllName = "api-ms-win-core-errorhandling-l1-1-0.dll";              /* 1*/
-        internal const string LookupAccountSidDllName = "api-ms-win-security-lsalookup-l2-1-1.dll";          /* 2*/
-        internal const string IsValidSidDllName = "api-ms-win-security-base-l1-2-0.dll";                     /* 3*/
-        internal const string GetLengthSidDllName = "api-ms-win-security-base-l1-2-0.dll";                   /* 4*/
-        internal const string LsaFreeMemoryDllName = "api-ms-win-security-lsapolicy-l1-1-0.dll";             /* 5*/
-        internal const string LsaOpenPolicyDllName = "api-ms-win-security-lsapolicy-l1-1-0.dll";             /* 6*/
-        internal const string LsaQueryInformationPolicyDllName = "api-ms-win-security-lsapolicy-l1-1-0.dll"; /* 7*/
-        internal const string LsaCloseDllName = "api-ms-win-security-lsapolicy-l1-1-0.dll";                  /* 8*/
-        internal const string LookupAccountNameDllName = "api-ms-win-security-lsalookup-l2-1-1.dll";         /* 9*/
-        internal const string GetComputerNameDllName = "api-ms-win-downlevel-kernel32-l2-1-0.dll";           /*10*/
-        internal const string GetSecurityDescriptorDaclDllName = "api-ms-win-security-base-l1-2-0";          /*11*/
-        internal const string SetSecurityDescriptorDaclDllName = "api-ms-win-security-base-l1-2-0";          /*12*/
-        internal const string FormatMessageDllName = "api-ms-win-core-localization-l1-2-1";                  /*13*/
-        internal const string GetVersionExDllName = "api-ms-win-core-sysinfo-l1-2-1.dll";                    /*14*/
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Sam.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Sam.cs
deleted file mode 100644
index e87147fd35d..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/Sam.cs
+++ /dev/null
@@ -1,3276 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Runtime.InteropServices;
-using System.Security.AccessControl;
-using System.Security.Principal;
-
-using Microsoft.PowerShell.Commands;
-using System.Management.Automation.SecurityAccountsManager.Extensions;
-using System.Management.Automation.SecurityAccountsManager.Native;
-using System.Management.Automation.SecurityAccountsManager.Native.NtSam;
-using System.Text;
-
-using Microsoft.PowerShell.LocalAccounts;
-using System.Diagnostics.CodeAnalysis;
-
-[module: SuppressMessage("Microsoft.Design", "CA1014:MarkAssembliesWithClsCompliant")]
-
-namespace System.Management.Automation.SecurityAccountsManager
-{
-    /// <summary>
-    /// Defines enumeration constants for enabling and disabling something.
-    /// </summary>
-    internal enum Enabling
-    {
-        Disable = 0,
-        Enable
-    }
-
-    /// <summary>
-    /// Managed version of the SAM_RID_ENUMERATION native structure,
-    /// to be returned from the EnumerateLocalUsers method of Sam.
-    /// Contains the original structure's members along with additional
-    /// members of use.
-    /// </summary>
-    internal class SamRidEnumeration
-    {
-#region Original struct members
-        public string Name;
-        public UInt32 RelativeId;
-#endregion Original struct members
-
-#region Additional members
-        public IntPtr domainHandle;     // The domain handle used to acquire the data.
-#endregion Additional members
-    }
-
-    /// <summary>
-    /// Provides methods for manipulating local Users and Groups.
-    /// </summary>
-    internal class Sam : IDisposable
-    {
-#region Enums
-        [Flags]
-        private enum GroupProperties
-        {
-            Name        = 0x0001,   // NOT changeable through Set-LocalGroup
-            Description = 0x0002,
-
-            AllSetable  = Description,
-            AllReadable = AllSetable | Name
-        }
-
-        /// <summary>
-        /// Defines a set of flags, each corresponding to a member of LocalUser,
-        /// which indicate fields to be updated.
-        /// </summary>
-        /// <remarks>
-        /// Although password can be set through Create-LocalUser and Set-LocalUser,
-        /// it is not a member of LocalUser so does not appear in this enumeration.
-        /// </remarks>
-        [Flags]
-        private enum UserProperties
-        {
-            None                    = 0x0000,   // not actually a LocalUser member
-            Name                    = 0x0001,   // NOT changeable through Set-LocalUser
-            AccountExpires          = 0x0002,
-            Description             = 0x0004,
-            Enabled                 = 0x0008,   // NOT changeable through Set-LocalUser
-            FullName                = 0x0010,
-            PasswordChangeableDate  = 0x0020,
-            PasswordExpires         = 0x0040,
-            PasswordNeverExpires    = 0x0080,
-            UserMayChangePassword   = 0x0100,
-            PasswordRequired        = 0x0200,
-            PasswordLastSet         = 0x0400,   // CANNOT be set by cmdlet
-            LastLogon               = 0x0800,   // CANNOT be set by cmdlet
-
-            // All properties that can be set through Set-LocalUser
-            AllSetable              = AccountExpires
-                                        | Description
-                                        | FullName
-                                        | PasswordChangeableDate
-                                        | PasswordExpires
-                                        | PasswordNeverExpires
-                                        | UserMayChangePassword
-                                        | PasswordRequired,
-
-            // Properties that can be set by Create-LocalUser
-            AllCreateable           = AllSetable | Name | Enabled,
-
-            // Properties that can be read by e.g., Get-LocalUser
-            AllReadable             = AllCreateable | PasswordLastSet | LastLogon
-        }
-
-        private enum PasswordExpiredState
-        {
-            Unchanged = -1,
-            NotExpired = 0,
-            Expired = 1
-        }
-
-        [Flags]
-        internal enum ObjectAccess : uint
-        {
-            AliasRead   = Win32.STANDARD_RIGHTS_READ
-                            | ALIAS_LIST_MEMBERS,
-            ALiasWrite  = Win32.STANDARD_RIGHTS_WRITE
-                            | ALIAS_WRITE_ACCOUNT
-                            | ALIAS_ADD_MEMBER
-                            | ALIAS_REMOVE_MEMBER,
-
-            UserAllAccess   = Win32.STANDARD_RIGHTS_REQUIRED
-                                | USER_READ_PREFERENCES
-                                | USER_READ_LOGON
-                                | USER_LIST_GROUPS
-                                | USER_READ_GROUP_INFORMATION
-                                | USER_WRITE_PREFERENCES
-                                | USER_CHANGE_PASSWORD
-                                | USER_FORCE_PASSWORD_CHANGE
-                                | USER_READ_GENERAL
-                                | USER_READ_ACCOUNT
-                                | USER_WRITE_ACCOUNT
-                                | USER_WRITE_GROUP_INFORMATION,
-            UserRead        = Win32.STANDARD_RIGHTS_READ
-                                | USER_READ_GENERAL             // not in original USER_READ
-                                | USER_READ_PREFERENCES
-                                | USER_READ_LOGON
-                                | USER_READ_ACCOUNT
-                                | USER_LIST_GROUPS
-                                | USER_READ_GROUP_INFORMATION,
-            UserWrite       = Win32.STANDARD_RIGHTS_WRITE
-                                | USER_WRITE_PREFERENCES
-                                | USER_CHANGE_PASSWORD
-        }
-
-        [Flags]
-        internal enum DomainAccess : uint
-        {
-            AllAccess   = Win32.STANDARD_RIGHTS_REQUIRED
-                            | DOMAIN_READ_OTHER_PARAMETERS
-                            | DOMAIN_WRITE_OTHER_PARAMETERS
-                            | DOMAIN_WRITE_PASSWORD_PARAMS
-                            | DOMAIN_CREATE_USER
-                            | DOMAIN_CREATE_GROUP
-                            | DOMAIN_CREATE_ALIAS
-                            | DOMAIN_GET_ALIAS_MEMBERSHIP
-                            | DOMAIN_LIST_ACCOUNTS
-                            | DOMAIN_READ_PASSWORD_PARAMETERS
-                            | DOMAIN_LOOKUP
-                            | DOMAIN_ADMINISTER_SERVER,
-
-            Read        = Win32.STANDARD_RIGHTS_READ
-                            | DOMAIN_LIST_ACCOUNTS
-                            | DOMAIN_GET_ALIAS_MEMBERSHIP
-                            | DOMAIN_READ_OTHER_PARAMETERS,
-
-            Write       = Win32.STANDARD_RIGHTS_WRITE
-                            | DOMAIN_WRITE_OTHER_PARAMETERS
-                            | DOMAIN_WRITE_PASSWORD_PARAMS
-                            | DOMAIN_CREATE_USER
-                            | DOMAIN_CREATE_GROUP
-                            | DOMAIN_CREATE_ALIAS
-                            | DOMAIN_ADMINISTER_SERVER,
-
-            Max         = Win32.MAXIMUM_ALLOWED
-        }
-
-        /// <summary>
-        /// The operation under way. Used in the <see cref="Context"/> class.
-        /// </summary>
-        private enum ContextOperation
-        {
-            New = 1,
-            Enable,
-            Disable,
-            Get,
-            Remove,
-            Rename,
-            Set,
-            AddMember,
-            GetMember,
-            RemoveMember
-        }
-
-        /// <summary>
-        /// The type of object currently operating with.
-        /// used in the <see cref="Context"/> class.
-        /// </summary>
-        private enum ContextObjectType
-        {
-            User = 1,
-            Group
-        }
-#endregion Enums
-
-#region Internal Classes
-        /// <summary>
-        /// Holds information about the underway operation.
-        /// </summary>
-        /// <remarks>
-        /// Used primarily by the private ThrowOnFailure method when building
-        /// Exception objects to throw.
-        /// </remarks>
-        private class Context
-        {
-            public ContextOperation operation;
-            public ContextObjectType type;
-            public object target;
-            public string objectId;
-            public string memberId;
-
-            /// <summary>
-            /// Initialize a new Context object.
-            /// </summary>
-            /// <param name="operation">
-            /// One of the <see cref="ContextOperation"/> enumerations indicating
-            /// the type of operation under way.
-            /// </param>
-            /// <param name="objectType">
-            /// One of the <see cref="ContextObjectType"/> enumerations indicating
-            /// the type of object (user or group) being used.
-            /// </param>
-            /// <param name="objectIdentifier">
-            /// A string containing the name of the object. This may be either a
-            /// user/group name or a string representation of a SID.
-            /// </param>
-            /// <param name="target">
-            /// The target being operated on.
-            /// </param>
-            /// <param name="memberIdentifier">
-            /// A string containing the name of the member being added or removed
-            /// from a group. Used only in such cases.
-            /// </param>
-            public Context(ContextOperation operation,
-                           ContextObjectType objectType,
-                           string objectIdentifier,
-                           object target,
-                           string memberIdentifier = null)
-            {
-                this.operation = operation;
-                this.type = objectType;
-                this.objectId = objectIdentifier;
-                this.target = target;
-                this.memberId = memberIdentifier;
-            }
-
-            /// <summary>
-            /// Default constructor.
-            /// </summary>
-            public Context()
-            {
-            }
-            /// <summary>
-            /// Gets a string containing the type of operation under way.
-            /// </summary>
-            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-            public string OperationName
-            {
-                get { return operation.ToString(); }
-            }
-
-            /// <summary>
-            /// Gets a string containing the type of object ("User" or "Group")
-            /// being used.
-            /// </summary>
-            [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-            public string TypeNamne
-            {
-                get { return type.ToString(); }
-            }
-
-            /// <summary>
-            /// Gets a string containing the name of the object being used.
-            /// </summary>
-            public string ObjectName
-            {
-                get { return objectId; }
-            }
-
-            /// <summary>
-            /// Gets a string containing the name of the member being added to
-            /// or removed from a group. Returns null if the operation does not
-            /// involve group members.
-            /// </summary>
-            public string MemberName
-            {
-                get { return memberId; }
-            }
-        }
-
-        /// <summary>
-        /// Contains basic information about an Account.
-        /// </summary>
-        /// <remarks>
-        /// AccountInfo is the return type from the private
-        /// LookupAccountInfo method.
-        /// </remarks>
-        private class AccountInfo
-        {
-            public string AccountName;
-            public string DomainName;
-            public SecurityIdentifier Sid;
-            public Native.SID_NAME_USE Use;
-
-            public override string ToString()
-            {
-                if (!string.IsNullOrEmpty(DomainName))
-                    return DomainName + '\\' + AccountName;
-                else
-                    return AccountName;
-            }
-        }
-#endregion Internal Classes
-
-#region Constants
-        //
-        // Access rights
-        //
-        private const UInt32 ALIAS_ADD_MEMBER       = 0x0001;
-        private const UInt32 ALIAS_REMOVE_MEMBER    = 0x0002;
-        private const UInt32 ALIAS_LIST_MEMBERS     = 0x0004;
-        private const UInt32 ALIAS_READ_INFORMATION = 0x0008;
-        private const UInt32 ALIAS_WRITE_ACCOUNT    = 0x0010;
-
-        private const UInt32 USER_READ_GENERAL              = 0x0001;
-        private const UInt32 USER_READ_PREFERENCES          = 0x0002;
-        private const UInt32 USER_WRITE_PREFERENCES         = 0x0004;
-        private const UInt32 USER_READ_LOGON                = 0x0008;
-        private const UInt32 USER_READ_ACCOUNT              = 0x0010;
-        private const UInt32 USER_WRITE_ACCOUNT             = 0x0020;
-        private const UInt32 USER_CHANGE_PASSWORD           = 0x0040;
-        private const UInt32 USER_FORCE_PASSWORD_CHANGE     = 0x0080;
-        private const UInt32 USER_LIST_GROUPS               = 0x0100;
-        private const UInt32 USER_READ_GROUP_INFORMATION    = 0x0200;
-        private const UInt32 USER_WRITE_GROUP_INFORMATION   = 0x0400;
-
-        private const UInt32 DOMAIN_READ_PASSWORD_PARAMETERS = 0x0001;
-        private const UInt32 DOMAIN_WRITE_PASSWORD_PARAMS    = 0x0002;
-        private const UInt32 DOMAIN_READ_OTHER_PARAMETERS    = 0x0004;
-        private const UInt32 DOMAIN_WRITE_OTHER_PARAMETERS   = 0x0008;
-        private const UInt32 DOMAIN_CREATE_USER              = 0x0010;
-        private const UInt32 DOMAIN_CREATE_GROUP             = 0x0020;
-        private const UInt32 DOMAIN_CREATE_ALIAS             = 0x0040;
-        private const UInt32 DOMAIN_GET_ALIAS_MEMBERSHIP     = 0x0080;
-        private const UInt32 DOMAIN_LIST_ACCOUNTS            = 0x0100;
-        private const UInt32 DOMAIN_LOOKUP                   = 0x0200;
-        private const UInt32 DOMAIN_ADMINISTER_SERVER        = 0x0400;
-#endregion Constants
-
-#region Static Data
-        private static SecurityIdentifier worldSid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
-#endregion Static Data
-
-#region Instance Data
-        private IntPtr samHandle = IntPtr.Zero;
-        private IntPtr localDomainHandle = IntPtr.Zero;
-        private IntPtr builtinDomainHandle = IntPtr.Zero;
-        private Context context = null;
-        private string machineName = string.Empty;
-#endregion Instance Data
-
-#region Construction
-        internal Sam()
-        {
-            OpenHandles();
-
-            // CoreCLR does not have Environment.MachineName,
-            // so we'll use this instead.
-            machineName = System.Net.Dns.GetHostName();
-        }
-#endregion Construction
-
-#region Public (Internal) Methods
-        public string StripMachineName(string name)
-        {
-            var mn = machineName + '\\';
-
-            if (name.StartsWith(mn, StringComparison.CurrentCultureIgnoreCase))
-                return name.Substring(mn.Length);
-
-            return name;
-        }
-#region Local Groups
-        /// <summary>
-        /// Retrieve a named local group.
-        /// </summary>
-        /// <param name="groupName">Name of the desired local group.</param>
-        /// <returns>
-        /// A <see cref="LocalGroup"/> object containing information about
-        /// the local group.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the named group cannot be found.
-        /// </exception>
-        internal LocalGroup GetLocalGroup(string groupName)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.Group, groupName, groupName);
-
-            foreach (var sre in EnumerateGroups())
-                if (sre.Name.Equals(groupName, StringComparison.CurrentCultureIgnoreCase))
-                    return MakeLocalGroupObject(sre);   // return a populated group
-
-            throw new GroupNotFoundException(groupName, context.target);
-        }
-
-        /// <summary>
-        /// Retrieve a local group by SID.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the desired group.
-        /// </param>
-        /// <returns>
-        /// A <see cref="LocalGroup"/> object containing information about
-        /// the local group.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        internal LocalGroup GetLocalGroup(SecurityIdentifier sid)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.Group, sid.ToString(), sid);
-
-            foreach (var sre in EnumerateGroups())
-                if (RidToSid(sre.domainHandle, sre.RelativeId) == sid)
-                    return MakeLocalGroupObject(sre);   // return a populated group
-
-            throw new GroupNotFoundException(sid.ToString(), context.target);
-        }
-
-        /// <summary>
-        /// Create a local group.
-        /// </summary>
-        /// <param name="group">A <see cref="LocalGroup"/> object containing
-        /// information about the local group to be created.
-        /// </param>
-        /// <returns>
-        /// A new LocalGroup object containing information about the newly
-        /// created local group.
-        /// </returns>
-        /// <exception cref="GroupExistsException">
-        /// Thrown when an attempt is made to create a local group that already
-        /// exists.
-        /// </exception>
-        internal LocalGroup CreateLocalGroup(LocalGroup group)
-        {
-            context = new Context(ContextOperation.New, ContextObjectType.Group, group.Name, group.Name);
-
-            return CreateGroup(group, localDomainHandle);
-        }
-
-        /// <summary>
-        /// Update a local group with new property values.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object representing the group to be updated.
-        /// </param>
-        /// <param name="changed">
-        /// A LocalGroup object containing the desired changes.
-        /// </param>
-        /// <remarks>
-        /// Currently, a group's description is the only changeable property.
-        /// </remarks>
-        internal void UpdateLocalGroup(LocalGroup group, LocalGroup changed)
-        {
-            context = new Context(ContextOperation.Set, ContextObjectType.Group, group.Name, group);
-
-            UpdateGroup(group, changed);
-        }
-
-        /// <summary>
-        /// Remove a local group.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the
-        /// local group to be removed.
-        /// </param>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        internal void RemoveLocalGroup(SecurityIdentifier sid)
-        {
-            context = new Context(ContextOperation.Remove, ContextObjectType.Group, sid.ToString(), sid);
-
-            RemoveGroup(sid);
-        }
-
-        /// <summary>
-        /// Remove a local group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object containing
-        /// information about the local group to be removed.
-        /// </param>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        internal void RemoveLocalGroup(LocalGroup group)
-        {
-            context = new Context(ContextOperation.Remove, ContextObjectType.Group, group.Name, group);
-
-            if (group.SID == null)
-                context.target = group = GetLocalGroup(group.Name);
-
-            RemoveGroup(group.SID);
-        }
-
-        /// <summary>
-        /// Rename a local group.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying
-        /// the local group to be renamed.
-        /// </param>
-        /// <param name="newName">
-        /// A string containing the new name for the local group.
-        /// </param>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        internal void RenameLocalGroup(SecurityIdentifier sid, string newName)
-        {
-            context = new Context(ContextOperation.Rename, ContextObjectType.Group, sid.ToString(), sid);
-
-            RenameGroup(sid, newName);
-        }
-
-        /// <summary>
-        /// Rename a local group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object containing
-        /// information about the local group to be renamed.
-        /// </param>
-        /// <param name="newName">
-        /// A string containing the new name for the local group.
-        /// </param>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        internal void RenameLocalGroup(LocalGroup group, string newName)
-        {
-            context = new Context(ContextOperation.Rename, ContextObjectType.Group, group.Name, group);
-
-            if (group.SID == null)
-                context.target = group = GetLocalGroup(group.Name);
-
-            RenameGroup(group.SID, newName);
-        }
-
-        /// <summary>
-        /// Get all local groups whose names satisfy the specified predicate.
-        /// </summary>
-        /// <param name="pred">
-        /// Predicate that determines whether a group satisfies the conditions.
-        /// </param>
-        /// <returns>
-        /// An <see cref="IEnumerable{LocalGroup}"/> object containing LocalGroup
-        /// objects that satisfy the predicate condition.
-        /// </returns>
-        internal IEnumerable<LocalGroup> GetMatchingLocalGroups(Predicate<string> pred)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.Group, string.Empty, null);
-
-            foreach (var sre in EnumerateGroups())
-            {
-
-                if (pred(sre.Name))
-                {
-                    context.target = sre.Name;
-                    yield return MakeLocalGroupObject(sre);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get all local groups.
-        /// </summary>
-        /// <returns>
-        /// An <see cref="IEnumerable{LocalGroup}"/> object containing a
-        /// LocalGroup object for each local group.
-        /// </returns>
-        internal IEnumerable<LocalGroup> GetAllLocalGroups()
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.Group, string.Empty, null);
-
-            foreach (var sre in EnumerateGroups())
-            {
-                context.target = sre.Name;
-                yield return MakeLocalGroupObject(sre);
-            }
-        }
-
-        /// <summary>
-        /// Add members to a local group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object identifying the group to
-        /// which to add members.
-        /// </param>
-        /// <param name="member">
-        /// An object of type <see cref="LocalPrincipal"/> identifying
-        /// the member to be added.
-        /// </param>
-        /// <returns>
-        /// An Exception object indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        internal Exception AddLocalGroupMember(LocalGroup group, LocalPrincipal member)
-        {
-            context = new Context(ContextOperation.AddMember, ContextObjectType.Group, group.Name, group);
-            if (group.SID == null)
-                context.target = group = GetLocalGroup(group.Name);
-
-            return AddGroupMember(group.SID, member);
-        }
-
-        /// <summary>
-        /// Add members to a local group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group to
-        /// which to add members.
-        /// </param>
-        /// <param name="member">
-        /// An object of type <see cref="LocalPrincipal"/> identifying
-        /// the member to be added.
-        /// </param>
-        /// <returns>
-        /// An Exception object indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        internal Exception AddLocalGroupMember(SecurityIdentifier groupSid, LocalPrincipal member)
-        {
-            context = new Context(ContextOperation.AddMember, ContextObjectType.Group, groupSid.ToString(), groupSid);
-
-            return AddGroupMember(groupSid, member);
-        }
-
-        /// <summary>
-        /// Retrieve members of a Local group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object identifying the group whose members
-        /// are requested.
-        /// </param>
-        /// <returns>
-        /// An IEnumerable of <see cref="LocalPrincipal"/> objects containing the group's
-        /// members.
-        /// </returns>
-        internal IEnumerable<LocalPrincipal> GetLocalGroupMembers(LocalGroup group)
-        {
-            context = new Context(ContextOperation.GetMember, ContextObjectType.Group, group.Name, group);
-
-            if (group.SID == null)
-                context.target = group = GetLocalGroup(group.Name);
-
-            return GetGroupMembers(group.SID);
-        }
-
-        /// <summary>
-        /// Retrieve members of a Local group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group whose members
-        /// are requested.
-        /// </param>
-        /// <returns>
-        /// An IEnumerable of <see cref="LocalPrincipal"/> objects containing the group's
-        /// members.
-        /// </returns>
-        internal IEnumerable<LocalPrincipal> GetLocalGroupMembers(SecurityIdentifier groupSid)
-        {
-            context = new Context(ContextOperation.GetMember, ContextObjectType.Group, groupSid.ToString(), groupSid);
-
-            return GetGroupMembers(groupSid);
-        }
-
-        /// <summary>
-        /// Remove members from a local group.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object identifying the group from
-        /// which to remove members
-        /// </param>
-        /// <param name="member">
-        /// An object of type <see cref="LocalPrincipal"/> identifying
-        /// the member to be removed.
-        /// </param>
-        /// <returns>
-        /// An Exception object indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        internal Exception RemoveLocalGroupMember(LocalGroup group, LocalPrincipal member)
-        {
-            context = new Context(ContextOperation.RemoveMember, ContextObjectType.Group, group.Name, group);
-
-            if (group.SID == null)
-                context.target = group = GetLocalGroup(group.Name);
-
-            return RemoveGroupMember(group.SID, member);
-        }
-
-        /// <summary>
-        /// Remove members from a local group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group from
-        /// which to remove members
-        /// </param>
-        /// <param name="member">
-        /// An Object of type <see cref="LocalPrincipal"/> identifying
-        /// the member to be removed.
-        /// </param>
-        /// <returns>
-        /// An Exception object indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        internal Exception RemoveLocalGroupMember(SecurityIdentifier groupSid, LocalPrincipal member)
-        {
-            context = new Context(ContextOperation.RemoveMember, ContextObjectType.Group, groupSid.ToString(), groupSid);
-
-            return RemoveGroupMember(groupSid, member);
-        }
-#endregion Local Groups
-
-#region Local Users
-        /// <summary>
-        /// Retrieve a named local user.
-        /// </summary>
-        /// <param name="userName">Name of the desired local user.</param>
-        /// <returns>
-        /// A <see cref="LocalUser"/> object containing information about
-        /// the local user.
-        /// </returns>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the named user cannot be found.
-        /// </exception>
-        internal LocalUser GetLocalUser(string userName)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.User, userName, userName);
-
-            foreach (var sre in EnumerateUsers())
-                if (sre.Name.Equals(userName, StringComparison.CurrentCultureIgnoreCase))
-                    return MakeLocalUserObject(sre);
-
-            throw new UserNotFoundException(userName, userName);
-        }
-
-        /// <summary>
-        /// Retrieve a local user by SID.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the desired user.
-        /// </param>
-        /// <returns>
-        /// A <see cref="LocalUser"/> object containing information about
-        /// the local user.
-        /// </returns>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user cannot be found.
-        /// </exception>
-        internal LocalUser GetLocalUser(SecurityIdentifier sid)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.User, sid.ToString(), sid);
-
-            foreach (var sre in EnumerateUsers())
-                if (RidToSid(sre.domainHandle, sre.RelativeId) == sid)
-                    return MakeLocalUserObject(sre);    // return a populated user
-
-            throw new UserNotFoundException(sid.ToString(), sid);
-        }
-
-        /// <summary>
-        /// Create a local user.
-        /// </summary>
-        /// <param name="user">A <see cref="LocalUser"/> object containing
-        /// information about the local user to be created.
-        /// </param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/> containing
-        /// the initial password to be set for the new local user. If this parameter is null,
-        /// no password is set.
-        /// </param>
-        /// <param name="setPasswordNeverExpires">
-        /// Indicates whether PasswordNeverExpires was specified
-        /// </param>
-        /// <returns>
-        /// A new LocalGroup object containing information about the newly
-        /// created local user.
-        /// </returns>
-        /// <exception cref="UserExistsException">
-        /// Thrown when an attempt is made to create a local user that already
-        /// exists.
-        /// </exception>
-        internal LocalUser CreateLocalUser(LocalUser user, System.Security.SecureString password, bool setPasswordNeverExpires)
-        {
-            context = new Context(ContextOperation.New, ContextObjectType.User, user.Name, user);
-
-            return CreateUser(user, password, localDomainHandle, setPasswordNeverExpires);
-        }
-
-        /// <summary>
-        /// Remove a local user.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying
-        /// the local user to be removed.
-        /// </param>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user cannot be found.
-        /// </exception>
-        internal void RemoveLocalUser(SecurityIdentifier sid)
-        {
-            context = new Context(ContextOperation.Remove, ContextObjectType.User, sid.ToString(), sid);
-
-            RemoveUser(sid);
-        }
-
-        /// <summary>
-        /// Remove a local user.
-        /// </summary>
-        /// <param name="user">
-        /// A <see cref="LocalUser"/> object containing
-        /// information about the local user to be removed.
-        /// </param>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user cannot be found.
-        /// </exception>
-        internal void RemoveLocalUser(LocalUser user)
-        {
-            context = new Context(ContextOperation.Remove, ContextObjectType.User, user.Name, user);
-
-            if (user.SID == null)
-                context.target = user = GetLocalUser(user.Name);
-
-            RemoveUser(user.SID);
-        }
-
-        /// <summary>
-        /// Rename a local user.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> objects identifying
-        /// the local user to be renamed.
-        /// </param>
-        /// <param name="newName">
-        /// A string containing the new name for the local user.
-        /// </param>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user cannot be found.
-        /// </exception>
-        internal void RenameLocalUser(SecurityIdentifier sid, string newName)
-        {
-            context = new Context(ContextOperation.Rename, ContextObjectType.User, sid.ToString(), sid);
-
-            RenameUser(sid, newName);
-        }
-
-        /// <summary>
-        /// Rename a local user.
-        /// </summary>
-        /// <param name="user">
-        /// A <see cref="LocalUser"/> objects containing
-        /// information about the local user to be renamed.
-        /// </param>
-        /// <param name="newName">
-        /// A string containing the new name for the local user.
-        /// </param>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user cannot be found.
-        /// </exception>
-        internal void RenameLocalUser(LocalUser user, string newName)
-        {
-            context = new Context(ContextOperation.Rename, ContextObjectType.User, user.Name, user);
-
-            if (user.SID == null)
-                context.target = user = GetLocalUser(user.Name);
-
-            RenameUser(user.SID, newName);
-        }
-
-        /// <summary>
-        /// Enable or disable a Local User.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the user to enable or disable.
-        /// </param>
-        /// <param name="enable">
-        /// One of the <see cref="Enabling"/> enumeration values, indicating whether to
-        /// enable or disable the user.
-        /// </param>
-        internal void EnableLocalUser(SecurityIdentifier sid, Enabling enable)
-        {
-            context = new Context(enable == Enabling.Enable ? ContextOperation.Enable
-                                                            : ContextOperation.Disable,
-                                  ContextObjectType.User, sid.ToString(),
-                                  sid);
-
-            EnableUser(sid, enable);
-        }
-
-        /// <summary>
-        /// Enable or disable a Local User.
-        /// </summary>
-        /// <param name="user">
-        /// A <see cref="LocalUser"/> object representing the user to enable or disable.
-        /// </param>
-        /// <param name="enable">
-        /// One of the <see cref="Enabling"/> enumeration values, indicating whether to
-        /// enable or disable the user.
-        /// </param>
-        internal void EnableLocalUser(LocalUser user, Enabling enable)
-        {
-            context = new Context(enable == Enabling.Enable ? ContextOperation.Enable
-                                                            : ContextOperation.Disable,
-                                  ContextObjectType.User, user.Name,
-                                  user);
-
-            if (user.SID == null)
-                context.target = user = GetLocalUser(user.Name);
-
-            EnableUser(user.SID, enable);
-        }
-
-        /// <summary>
-        /// Update a local user with new properties.
-        /// </summary>
-        /// <param name="user">
-        /// A <see cref="LocalUser"/> object representing the user to be updated.
-        /// </param>
-        /// <param name="changed">
-        /// A LocalUser object containing the desired changes.
-        /// </param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/>
-        /// object containing the new password. A null value in this parameter
-        /// indicates that the password is not to be changed.
-        /// </param>
-        /// <param name="setPasswordNeverExpires">
-        /// Specifies whether the PasswordNeverExpires parameter was set.
-        /// </param>
-        /// <remarks>
-        /// Call this overload when intending to leave the password-expired
-        /// marker in its current state. To set the password and the
-        /// password-expired state, call the overload with a boolean as the
-        /// fourth parameter
-        /// </remarks>
-        internal void UpdateLocalUser(LocalUser user, LocalUser changed, System.Security.SecureString password, bool? setPasswordNeverExpires)
-        {
-            context = new Context(ContextOperation.Set, ContextObjectType.User, user.Name, user);
-
-            UpdateUser(user, changed, password, PasswordExpiredState.Unchanged, setPasswordNeverExpires);
-        }
-
-        /// <summary>
-        /// Get all local users whose names satisfy the specified predicate.
-        /// </summary>
-        /// <param name="pred">
-        /// Predicate that determines whether a user satisfies the conditions.
-        /// </param>
-        /// <returns>
-        /// An <see cref="IEnumerable{LocalUser}"/> object containing LocalUser
-        /// objects that satisfy the predicate condition.
-        /// </returns>
-        internal IEnumerable<LocalUser> GetMatchingLocalUsers(Predicate<string> pred)
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.User, string.Empty, null);
-
-            foreach (var sre in EnumerateUsers())
-            {
-                if (pred(sre.Name))
-                {
-                    context.target = sre.Name;
-                    yield return MakeLocalUserObject(sre);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get all local users.
-        /// </summary>
-        /// <returns>
-        /// An <see cref="IEnumerable{LocalUser}"/> object containing a
-        /// LocalUser object for each local user.
-        /// </returns>
-        internal IEnumerable<LocalUser> GetAllLocalUsers()
-        {
-            context = new Context(ContextOperation.Get, ContextObjectType.User, null, null);
-
-            foreach (var sre in EnumerateUsers())
-                yield return MakeLocalUserObject(sre);
-        }
-#endregion Local Users
-
-#region Local Principals
-        internal LocalPrincipal LookupAccount(string name)
-        {
-            var info = LookupAccountInfo(name);
-
-            if (info == null)
-                throw new PrincipalNotFoundException(name, name);
-
-            return MakeLocalPrincipalObject(info);
-        }
-#endregion Local Principals
-#endregion Public (Internal) Methods
-
-#region Private Methods
-        /// <summary>
-        /// Open the handles stored by Sam instances.
-        /// </summary>
-        private void OpenHandles()
-        {
-            var systemName = new UNICODE_STRING();
-            var oa = new OBJECT_ATTRIBUTES();
-            IntPtr pInfo = IntPtr.Zero;
-            IntPtr pSid = IntPtr.Zero;
-            IntPtr lsaHandle = IntPtr.Zero;
-            UInt32 status = 0;
-
-            try
-            {
-                status = Win32.LsaOpenPolicy(ref systemName, ref oa, (UInt32)LSA_AccessPolicy.POLICY_VIEW_LOCAL_INFORMATION, out lsaHandle);
-                ThrowOnFailure(status);
-
-                POLICY_PRIMARY_DOMAIN_INFO domainInfo;
-
-                status = Win32.LsaQueryInformationPolicy(lsaHandle,
-                                                         POLICY_INFORMATION_CLASS.PolicyAccountDomainInformation,
-                                                         out pInfo);
-                ThrowOnFailure(status);
-                status = Win32.LsaClose(lsaHandle);
-                ThrowOnFailure(status);
-
-                lsaHandle = IntPtr.Zero;
-
-                domainInfo = Marshal.PtrToStructure<POLICY_PRIMARY_DOMAIN_INFO>(pInfo);
-
-                status = SamApi.SamConnect(ref systemName, out samHandle, SamApi.SAM_SERVER_LOOKUP_DOMAIN, ref oa);
-                ThrowOnFailure(status);
-
-                // Open the local domain
-                status = SamApi.SamOpenDomain(samHandle, Win32.MAXIMUM_ALLOWED, domainInfo.Sid, out localDomainHandle);
-                ThrowOnFailure(status);
-
-                // Open the "BuiltIn" domain
-                SecurityIdentifier sid = new SecurityIdentifier("S-1-5-32");
-                byte[] bSid = new byte[sid.BinaryLength];
-                int size = Marshal.SizeOf<byte>() * bSid.Length;
-
-                pSid = Marshal.AllocHGlobal(size);
-
-                sid.GetBinaryForm(bSid, 0);
-                Marshal.Copy(bSid, 0, pSid, bSid.Length);
-
-                status = SamApi.SamOpenDomain(samHandle, Win32.MAXIMUM_ALLOWED, pSid, out builtinDomainHandle);
-
-                ThrowOnFailure(status);
-            }
-            finally
-            {
-                if (pInfo != IntPtr.Zero)
-                    status = Win32.LsaFreeMemory(pInfo);
-
-                Marshal.FreeHGlobal(pSid);
-
-                if (lsaHandle != IntPtr.Zero)
-                    status = Win32.LsaClose(lsaHandle);
-            }
-        }
-
-        /// <summary>
-        /// Find a group by SID and return a <see cref="SamRidEnumeration"/> object
-        /// representing the group.
-        /// </summary>
-        /// <param name="sid">A <see cref="SecurityIdentifier"/> object identifying
-        /// the group to search for.</param>
-        /// <returns>
-        /// A SamRidEnumeration object representing the group.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group is not found.
-        /// </exception>
-        /// <remarks>
-        /// This method saves some time and effort over the GetGroup method
-        /// because it does not have to open a group to populate a full Group
-        /// object.
-        /// </remarks>
-        private SamRidEnumeration GetGroupSre(SecurityIdentifier sid)
-        {
-            foreach (var sre in EnumerateGroups())
-                if (RidToSid(sre.domainHandle, sre.RelativeId) == sid)
-                    return sre;
-
-            throw new GroupNotFoundException(sid.ToString(), sid);
-        }
-
-        /// <summary>
-        /// Find a user by SID and return a <see cref="SamRidEnumeration"/> object
-        /// representing the user.
-        /// </summary>
-        /// <param name="sid">A <see cref="SecurityIdentifier"/> object identifying
-        /// the user to search for.</param>
-        /// <returns>
-        /// A SamRidEnumeration object representing the user.
-        /// </returns>
-        /// <exception cref="UserNotFoundException">
-        /// Thrown when the specified user is not found.
-        /// </exception>
-        /// <remarks>
-        /// This method saves some time and effort over the GetUser method
-        /// because it does not have to open a user to populate a full LocalUser
-        /// object.
-        /// </remarks>
-        private SamRidEnumeration GetUserSre(SecurityIdentifier sid)
-        {
-            foreach (var sre in EnumerateUsers())
-                if (RidToSid(sre.domainHandle, sre.RelativeId) == sid)
-                    return sre;
-
-            throw new UserNotFoundException(sid.ToString(), sid);
-        }
-
-        /// <summary>
-        /// Enumerate local users with native SAM functions.
-        /// </summary>
-        /// <param name="domainHandle">Handle to the domain to enumerate over.</param>
-        /// <returns>
-        /// An IEnumerable of SamRidEnumeration objects, one for each local user.
-        /// </returns>
-        /// <remarks>
-        /// This is a "generator" method. Rather than returning an entire collection,
-        /// it uses 'yield return' to return each object in turn.
-        /// </remarks>
-        private static IEnumerable<SamRidEnumeration> EnumerateUsersInDomain(IntPtr domainHandle)
-        {
-            UInt32 status = 0;
-            UInt32 context = 0;
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 countReturned;
-
-            do
-            {
-                status = SamApi.SamEnumerateUsersInDomain(domainHandle,
-                                                          ref context,
-                                                          0,
-                                                          out buffer,
-                                                          1,
-                                                          out countReturned);
-
-                if (status == NtStatus.STATUS_MORE_ENTRIES && countReturned == 1)
-                {
-                    if (buffer != IntPtr.Zero)
-                    {
-                        SAM_RID_ENUMERATION sre;
-
-                        sre = Marshal.PtrToStructure<SAM_RID_ENUMERATION>(buffer);
-
-                        SamApi.SamFreeMemory(buffer);
-                        buffer = IntPtr.Zero;
-
-                        yield return new SamRidEnumeration
-                                        {
-                                            Name = sre.Name.ToString(),
-                                            RelativeId = sre.RelativeId,
-
-                                            domainHandle = domainHandle
-                                        };
-                    }
-                }
-            } while (Succeeded(status) && status != 0 && countReturned != 0);
-        }
-
-        /// <summary>
-        /// Enumerate user objects in both the local and builtin domains.
-        /// </summary>
-        /// <returns>
-        /// An IEnumerable of SamRidEnumeration objects, one for each local user.
-        /// </returns>
-        /// <remarks>
-        /// This is a "generator" method. Rather than returning an entire collection,
-        /// it uses 'yield return' to return each object in turn.
-        /// </remarks>
-        private IEnumerable<SamRidEnumeration> EnumerateUsers()
-        {
-            foreach (var sre in EnumerateUsersInDomain(localDomainHandle))
-                yield return sre;
-
-            foreach (var sre in EnumerateUsersInDomain(builtinDomainHandle))
-                yield return sre;
-        }
-
-        /// <summary>
-        /// Create a new user in the specified domain.
-        /// </summary>
-        /// <param name="userInfo">
-        /// A <see cref="LocalUser"/> object containing information about the new user.
-        /// </param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/> containing
-        /// the initial password to be set for the new local user. If this parameter is null,
-        /// no password is set.
-        /// </param>
-        /// <param name="domainHandle">
-        /// Handle to the domain in which to create the new user.
-        /// </param>
-        /// <param name="setPasswordNeverExpires">
-        /// Indicates whether PasswordNeverExpires was specified
-        /// </param>
-        /// <returns>
-        /// A LocalUser object that represents the newly-created user
-        /// </returns>
-        private LocalUser CreateUser(LocalUser userInfo, System.Security.SecureString password, IntPtr domainHandle, bool setPasswordNeverExpires)
-        {
-            IntPtr userHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-            UNICODE_STRING str = new UNICODE_STRING();
-            UInt32 status = 0;
-
-            try
-            {
-                UInt32 relativeId = 0;
-                UInt32 grantedAccess = 0;
-
-                str = new UNICODE_STRING(userInfo.Name);
-
-                buffer = Marshal.AllocHGlobal(Marshal.SizeOf(str));
-                Marshal.StructureToPtr(str, buffer, false);
-
-                status = SamApi.SamCreateUser2InDomain(domainHandle,
-                    ref str,
-                    (int) SamApi.USER_NORMAL_ACCOUNT,
-                    Win32.MAXIMUM_ALLOWED,
-                    out userHandle,
-                    out grantedAccess,
-                    out relativeId);
-                Marshal.DestroyStructure<UNICODE_STRING>(buffer);
-                Marshal.FreeHGlobal(buffer);
-                buffer = IntPtr.Zero;
-                ThrowOnFailure(status);
-
-                // set the various properties of the user. A SID is required because some
-                // operations depend on it.
-                userInfo.SID = RidToSid(domainHandle, relativeId);
-
-                SetUserData(userHandle, userInfo, UserProperties.AllCreateable, password, PasswordExpiredState.NotExpired, setPasswordNeverExpires);
-
-                return MakeLocalUserObject(new SamRidEnumeration
-                                            {
-                                                domainHandle = domainHandle,
-                                                Name = userInfo.Name,
-                                                RelativeId = relativeId
-                                            },
-                                            userHandle);
-            }
-            catch (Exception)
-            {
-                if (IntPtr.Zero != userHandle)
-                {
-                    SamApi.SamDeleteUser(userHandle);
-                }
-
-                throw;
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    Marshal.FreeHGlobal(buffer);
-                if (userHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(userHandle);
-            }
-        }
-
-        /// <summary>
-        /// Remove a group identified by SID.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the
-        /// group to be removed.
-        /// </param>
-        private void RemoveGroup(SecurityIdentifier sid)
-        {
-            var sre = GetGroupSre(sid);
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            UInt32 status;
-            try
-            {
-                status = SamApi.SamOpenAlias(sre.domainHandle,
-                                                 Win32.MAXIMUM_ALLOWED,
-                                                 sre.RelativeId,
-                                                 out aliasHandle);
-                ThrowOnFailure(status);
-
-                status = SamApi.SamDeleteAlias(aliasHandle);
-                ThrowOnFailure(status);
-
-                aliasHandle = IntPtr.Zero; // The handle is freed internally if SamDeleteAlias succeeds
-            }
-            finally
-            {
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-        }
-
-        /// <summary>
-        /// Rename a group identified by SID.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying
-        /// the local group to be renamed.
-        /// </param>
-        /// <param name="newName">
-        /// A string containing the new name for the group.
-        /// </param>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown when the specified group cannot be found.
-        /// </exception>
-        private void RenameGroup(SecurityIdentifier sid, string newName)
-        {
-            var sre = GetGroupSre(sid);
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 status = 0;
-
-            status = SamApi.SamOpenAlias(sre.domainHandle,
-                                         Win32.MAXIMUM_ALLOWED,
-                                         sre.RelativeId,
-                                         out aliasHandle);
-            ThrowOnFailure(status);
-
-            try
-            {
-                ALIAS_NAME_INFORMATION info = new ALIAS_NAME_INFORMATION();
-
-                info.Name = new UNICODE_STRING(newName);
-                buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                Marshal.StructureToPtr(info, buffer, false);
-
-                status = SamApi.SamSetInformationAlias(aliasHandle,
-                                                       ALIAS_INFORMATION_CLASS.AliasNameInformation,
-                                                       buffer);
-                ThrowOnFailure(status,
-                               new Context {
-                                            objectId = newName,
-                                            operation = context.operation,
-                                            type = context.type
-                                           }
-                              );
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                {
-                    Marshal.DestroyStructure<ALIAS_NAME_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                }
-
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-        }
-
-        /// <summary>
-        /// Add members to a group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group to
-        /// which to add members.
-        /// </param>
-        /// <param name="member">
-        /// An object of type <see cref="LocalPrincipal"/>identifying
-        /// the member to be added.
-        /// </param>
-        /// <returns>
-        /// An Exception object indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        private Exception AddGroupMember(SecurityIdentifier groupSid, LocalPrincipal member)
-        {
-            var sre = GetGroupSre(groupSid);    // We'll let this throw if necessary
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            UInt32 status = SamApi.SamOpenAlias(sre.domainHandle,
-                                                Win32.MAXIMUM_ALLOWED,
-                                                sre.RelativeId,
-                                                out aliasHandle);
-            ThrowOnFailure(status);
-            Exception ex = null;
-            try
-            {
-                var sid = member.SID;
-                var binarySid = new byte[sid.BinaryLength];
-
-                sid.GetBinaryForm(binarySid, 0);
-                status = SamApi.SamAddMemberToAlias(aliasHandle, binarySid);
-                ex = MakeException(status,
-                                            new Context
-                                            {
-                                                memberId = member.ToString(),
-                                                objectId = context.objectId,
-                                                operation = context.operation,
-                                                target = context.target,
-                                                type = context.type
-                                            }
-                                            );
-
-            }
-            finally
-            {
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-
-            return ex;
-        }
-
-        /// <summary>
-        /// Retrieve members of a group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object representing the group whose members
-        /// are requested.
-        /// </param>
-        /// <returns>
-        /// An IEnumerable of <see cref="LocalPrincipal"/> objects containing the group's
-        /// members.
-        /// </returns>
-        private IEnumerable<LocalPrincipal> GetGroupMembers(SecurityIdentifier groupSid)
-        {
-            var sre = GetGroupSre(groupSid);
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            IntPtr memberIds = IntPtr.Zero;
-            UInt32 status = SamApi.SamOpenAlias(sre.domainHandle,
-                                                Win32.MAXIMUM_ALLOWED,
-                                                sre.RelativeId,
-                                                out aliasHandle);
-            ThrowOnFailure(status);
-
-            try
-            {
-                UInt32 memberCount = 0;
-
-                status = SamApi.SamGetMembersInAlias(aliasHandle, out memberIds, out memberCount);
-                ThrowOnFailure(status);
-
-                if (memberCount != 0)
-                {
-                    IntPtr[] idArray = new IntPtr[memberCount];
-
-                    Marshal.Copy(memberIds, idArray, 0, (int)memberCount);
-
-                    for (int i=0; i < memberCount; i++)
-                    {
-                        var sid = new SecurityIdentifier(idArray[i]);
-                        yield return MakeLocalPrincipalObject(LookupAccountInfo(sid));
-                    }
-                }
-            }
-            finally
-            {
-                if (aliasHandle != IntPtr.Zero)
-                    SamApi.SamCloseHandle(aliasHandle);
-
-                if (memberIds != IntPtr.Zero)
-                    SamApi.SamFreeMemory(memberIds);
-            }
-        }
-
-        /// <summary>
-        /// Remove members from a group.
-        /// </summary>
-        /// <param name="groupSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the group from
-        /// which to remove members
-        /// </param>
-        /// <param name="member">
-        /// An object of type <see cref="LocalPrincipal"/> identifying
-        /// the member to be removed.
-        /// </param>
-        /// <returns>
-        /// An IEnumerable of Exception objects indicating any errors encountered.
-        /// </returns>
-        /// <exception cref="GroupNotFoundException">
-        /// Thrown if the group could not be found.
-        /// </exception>
-        private Exception RemoveGroupMember(SecurityIdentifier groupSid, LocalPrincipal member)
-        {
-            var sre = GetGroupSre(groupSid);    // We'll let this throw if necessary
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            UInt32 status = SamApi.SamOpenAlias(sre.domainHandle,
-                                                Win32.MAXIMUM_ALLOWED,
-                                                sre.RelativeId,
-                                                out aliasHandle);
-            ThrowOnFailure(status);
-
-            // Now we're processing each member, so any further exceptions will
-            // be stored in the collection and returned later.
-            var rv = new List<Exception>();
-            Exception ex = null;
-            try
-            {
-                var sid = member.SID;
-                var binarySid = new byte[sid.BinaryLength];
-
-                sid.GetBinaryForm(binarySid, 0);
-                status = SamApi.SamRemoveMemberFromAlias(aliasHandle, binarySid);
-
-                ex = MakeException(status,
-                                        new Context {
-                                                        memberId = member.ToString(),
-                                                        objectId = context.objectId,
-                                                        operation = context.operation,
-                                                        target = context.target,
-                                                        type = context.type
-                                                    }
-                                        );
-            }
-            finally
-            {
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-
-            return ex;
-        }
-
-        /// <summary>
-        /// Create a populated LocalUser object from a SamRidEnumeration object.
-        /// </summary>
-        /// <param name="sre">
-        /// A <see cref="SamRidEnumeration"/> object containing minimal information
-        /// about a local user.
-        /// </param>
-        /// <returns>
-        /// A LocalUser object, populated with user information.
-        /// </returns>
-        private LocalUser MakeLocalUserObject(SamRidEnumeration sre)
-        {
-            IntPtr userHandle = IntPtr.Zero;
-            var status = SamApi.SamOpenUser(sre.domainHandle,
-                                            (UInt32)ObjectAccess.UserRead,
-                                            sre.RelativeId,
-                                            out userHandle);
-
-            ThrowOnFailure(status);
-
-            try
-            {
-                return MakeLocalUserObject(sre, userHandle);
-            }
-            finally
-            {
-                if (userHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(userHandle);
-            }
-        }
-
-        /// <summary>
-        /// Create a populated LocalUser object from a SamRidEnumeration object,
-        /// using an already-opened SAM user handle.
-        /// </summary>
-        /// <param name="sre">
-        /// A <see cref="SamRidEnumeration"/> object containing minimal information
-        /// about a local user.
-        /// </param>
-        /// <param name="userHandle">
-        /// Handle to an open SAM user.
-        /// </param>
-        /// <returns>
-        /// A LocalUser object, populated with user information.
-        /// </returns>
-        private LocalUser MakeLocalUserObject(SamRidEnumeration sre, IntPtr userHandle)
-        {
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 status = 0;
-
-            try
-            {
-                USER_ALL_INFORMATION allInfo;
-
-                status = SamApi.SamQueryInformationUser(userHandle,
-                                                        USER_INFORMATION_CLASS.UserAllInformation,
-                                                        out buffer);
-                ThrowOnFailure(status);
-                allInfo = Marshal.PtrToStructure<USER_ALL_INFORMATION>(buffer);
-
-                var userSid = RidToSid(sre.domainHandle, sre.RelativeId);
-                LocalUser user = new LocalUser()
-                                    {
-                                        PrincipalSource = GetPrincipalSource(sre),
-                                        SID = userSid,
-
-                                        Name = allInfo.UserName.ToString(),
-                                        FullName = allInfo.FullName.ToString(),
-                                        Description = allInfo.AdminComment.ToString(),
-
-                                        // TODO: why is this coming up as 864000000000 (number of ticks per day)?
-                                        PasswordChangeableDate = DateTimeFromSam(allInfo.PasswordCanChange.QuadPart),
-
-                                        PasswordExpires = DateTimeFromSam(allInfo.PasswordMustChange.QuadPart),
-
-                                        // TODO: why is this coming up as 0X7FFFFFFFFFFFFFFF (largest signed 64-bit, and well out of range of DateTime)?
-                                        AccountExpires = DateTimeFromSam(allInfo.AccountExpires.QuadPart),
-                                        LastLogon = DateTimeFromSam(allInfo.LastLogon.QuadPart),
-                                        PasswordLastSet = DateTimeFromSam(allInfo.PasswordLastSet.QuadPart),
-
-                                        UserMayChangePassword = GetUserMayChangePassword(userHandle, userSid),
-
-                                        PasswordRequired = (allInfo.UserAccountControl & SamApi.USER_PASSWORD_NOT_REQUIRED) == 0,
-
-                                        Enabled = !((allInfo.UserAccountControl & SamApi.USER_ACCOUNT_DISABLED) == SamApi.USER_ACCOUNT_DISABLED)
-                                    };
-
-                return user;
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    status = SamApi.SamFreeMemory(buffer);
-            }
-        }
-
-        /// <summary>
-        /// Enable or disable a user.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the user to be
-        /// enabled or disabled.
-        /// </param>
-        /// <param name="enable">
-        /// One of the <see cref="Enabling"/> enumeration values indicating
-        /// whether the user is to be enabled or disabled.
-        /// </param>
-        private void EnableUser(SecurityIdentifier sid, Enabling enable)
-        {
-            IntPtr userHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 status = 0;
-
-            var sre = GetUserSre(sid);
-
-            status = SamApi.SamOpenUser(sre.domainHandle,
-                                        Win32.MAXIMUM_ALLOWED,
-                                        sre.RelativeId,
-                                        out userHandle);
-            ThrowOnFailure(status);
-
-            try
-            {
-                USER_ALL_INFORMATION info;
-
-                status = SamApi.SamQueryInformationUser(userHandle,
-                                                        USER_INFORMATION_CLASS.UserAllInformation,
-                                                        out buffer);
-                ThrowOnFailure(status);
-                info = Marshal.PtrToStructure<USER_ALL_INFORMATION>(buffer);
-                status = SamApi.SamFreeMemory(buffer);
-                buffer = IntPtr.Zero;
-
-                UInt32 uac = info.UserAccountControl;
-                UInt32 enabled_state = uac & SamApi.USER_ACCOUNT_DISABLED;
-
-                if (enable == Enabling.Enable && enabled_state == SamApi.USER_ACCOUNT_DISABLED)
-                    uac &= ~SamApi.USER_ACCOUNT_DISABLED;
-                else if (enable == Enabling.Disable && enabled_state != SamApi.USER_ACCOUNT_DISABLED)
-                    uac |= SamApi.USER_ACCOUNT_DISABLED;
-                else
-                    return;
-
-                if (uac != info.UserAccountControl)
-                {
-                    info.UserAccountControl = uac;
-                    info.WhichFields = SamApi.USER_ALL_USERACCOUNTCONTROL;
-
-                    buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                    Marshal.StructureToPtr(info, buffer, false);
-                    status = SamApi.SamSetInformationUser(userHandle,
-                                                          USER_INFORMATION_CLASS.UserAllInformation,
-                                                          buffer);
-                    Marshal.DestroyStructure<USER_ALL_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                    buffer = IntPtr.Zero;
-                    ThrowOnFailure(status);
-                }
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    Marshal.FreeHGlobal(buffer);
-                if (userHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(userHandle);
-            }
-        }
-
-        /// <summary>
-        /// Rename a user.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the user to be
-        /// renamed.
-        /// </param>
-        /// <param name="newName">The new user name.</param>
-        private void RenameUser(SecurityIdentifier sid, string newName)
-        {
-            IntPtr userHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 status = 0;
-
-            var sre = GetUserSre(sid);
-
-            status = SamApi.SamOpenUser(sre.domainHandle,
-                                        Win32.MAXIMUM_ALLOWED,
-                                        sre.RelativeId,
-                                        out userHandle);
-            ThrowOnFailure(status);
-
-            try
-            {
-                USER_ACCOUNT_NAME_INFORMATION info = new USER_ACCOUNT_NAME_INFORMATION();
-
-                info.UserName = new UNICODE_STRING(newName);
-                buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                Marshal.StructureToPtr(info, buffer, false);
-
-                status = SamApi.SamSetInformationUser(userHandle,
-                                                      USER_INFORMATION_CLASS.UserAccountNameInformation,
-                                                      buffer);
-                ThrowOnFailure(status,
-                               new Context {
-                                            objectId = newName,
-                                            operation = context.operation,
-                                            type = context.type
-                                           }
-                              );
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                {
-                    Marshal.DestroyStructure<USER_ACCOUNT_NAME_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                }
-
-                if (userHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(userHandle);
-            }
-        }
-
-        /// <summary>
-        /// Delete a user.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the user to be
-        /// removed.
-        /// </param>
-        private void RemoveUser(SecurityIdentifier sid)
-        {
-            IntPtr userHandle = IntPtr.Zero;
-
-            var sre = GetUserSre(sid);
-            UInt32 status;
-
-            try
-            {
-                status = SamApi.SamOpenUser(sre.domainHandle,
-                                                Win32.MAXIMUM_ALLOWED,
-                                                sre.RelativeId,
-                                                out userHandle);
-                ThrowOnFailure(status);
-
-                status = SamApi.SamDeleteUser(userHandle);
-                ThrowOnFailure(status);
-
-                userHandle = IntPtr.Zero; // The handle is freed internally if SamDeleteUser succeeds
-            }
-            finally
-            {
-                if (userHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(userHandle);
-            }
-        }
-
-        /// <summary>
-        /// Enumerate local users with native SAM functions.
-        /// </summary>
-        /// <param name="domainHandle">Handle to the domain to enumerate over.</param>
-        /// <returns>
-        /// An IEnumerable of SamRidEnumeration objects, one for each local user.
-        /// </returns>
-        /// <remarks>
-        /// This is a "generator" method. Rather than returning an entire collection,
-        /// it uses 'yield return' to return each object in turn.
-        /// </remarks>
-        private static IEnumerable<SamRidEnumeration> EnumerateGroupsInDomain(IntPtr domainHandle)
-        {
-            UInt32 status = 0;
-            UInt32 context = 0;
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 countReturned;
-
-            do
-            {
-                // Although the method name indicates that we are operating with "groups",
-                // it actually uses the SAM API's SamEnumerateAliasesInDomain function.
-                status = SamApi.SamEnumerateAliasesInDomain(domainHandle,
-                                                           ref context,
-                                                           out buffer,
-                                                           1,
-                                                           out countReturned);
-
-                if (status == NtStatus.STATUS_MORE_ENTRIES && countReturned == 1)
-                {
-                    if (buffer != IntPtr.Zero)
-                    {
-                        SAM_RID_ENUMERATION sre;
-
-                        sre = Marshal.PtrToStructure<SAM_RID_ENUMERATION>(buffer);
-
-                        SamApi.SamFreeMemory(buffer);
-                        buffer = IntPtr.Zero;
-
-                        yield return new SamRidEnumeration
-                                        {
-                                            Name = sre.Name.ToString(),
-                                            RelativeId = sre.RelativeId,
-
-                                            domainHandle = domainHandle
-                                        };
-                    }
-                }
-            } while (Succeeded(status) && status != 0 && countReturned != 0);
-        }
-
-        /// <summary>
-        /// Enumerate group objects in both the local and builtin domains.
-        /// </summary>
-        /// <returns>
-        /// An IEnumerable of SamRidEnumeration objects, one for each local group.
-        /// </returns>
-        /// <remarks>
-        /// This is a "generator" method. Rather than returning an entire collection,
-        /// it uses 'yield return' to return each object in turn.
-        /// </remarks>
-        internal IEnumerable<SamRidEnumeration> EnumerateGroups()
-        {
-            foreach (var sre in EnumerateGroupsInDomain(localDomainHandle))
-                yield return sre;
-
-            foreach (var sre in EnumerateGroupsInDomain(builtinDomainHandle))
-                yield return sre;
-        }
-
-        /// <summary>
-        /// Create a new group in the specified domain.
-        /// </summary>
-        /// <param name="groupInfo">
-        /// A <see cref="LocalGroup"/> object containing information about the new group.
-        /// </param>
-        /// <param name="domainHandle">Handle to the domain in which to create the new group.</param>
-        /// <returns>
-        /// A LocalGroup object that represents the newly-created group.
-        /// </returns>
-        private LocalGroup CreateGroup(LocalGroup groupInfo, IntPtr domainHandle)
-        {
-            IntPtr aliasHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-            UNICODE_STRING str = new UNICODE_STRING();
-            UInt32 status;
-
-            try
-            {
-                UInt32 relativeId;
-
-                str = new UNICODE_STRING(groupInfo.Name);
-
-                buffer = Marshal.AllocHGlobal(Marshal.SizeOf(str));
-                Marshal.StructureToPtr(str, buffer, false);
-
-                status = SamApi.SamCreateAliasInDomain(domainHandle,
-                                                       buffer,
-                                                       Win32.MAXIMUM_ALLOWED,
-                                                       out aliasHandle,
-                                                       out relativeId);
-                Marshal.DestroyStructure<UNICODE_STRING>(buffer);
-                Marshal.FreeHGlobal(buffer);
-                buffer = IntPtr.Zero;
-                ThrowOnFailure(status);
-
-                if (!string.IsNullOrEmpty(groupInfo.Description))
-                {
-                    ALIAS_ADM_COMMENT_INFORMATION info = new ALIAS_ADM_COMMENT_INFORMATION();
-
-                    info.AdminComment = new UNICODE_STRING(groupInfo.Description);
-                    buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                    Marshal.StructureToPtr(info, buffer, false);
-
-                    status = SamApi.SamSetInformationAlias(aliasHandle,
-                                                           ALIAS_INFORMATION_CLASS.AliasAdminCommentInformation,
-                                                           buffer);
-
-                    Marshal.DestroyStructure<ALIAS_ADM_COMMENT_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                    buffer = IntPtr.Zero;
-                    ThrowOnFailure(status);
-                }
-
-                return MakeLocalGroupObject(new SamRidEnumeration
-                                                {
-                                                    domainHandle = domainHandle,
-                                                    Name = groupInfo.Name,
-                                                    RelativeId = relativeId
-                                                },
-                                            aliasHandle);
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    Marshal.FreeHGlobal(buffer);
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-        }
-
-        /// <summary>
-        /// Update a local group with new property values. This method provides
-        /// the actual implementation.
-        /// </summary>
-        /// <param name="group">
-        /// A <see cref="LocalGroup"/> object representing the group to be updated.
-        /// </param>
-        /// <param name="changed">
-        /// A LocalGroup object containing the desired changes.
-        /// </param>
-        /// <remarks>
-        /// Currently, a group's description is the only changeable property.
-        /// </remarks>
-        private void UpdateGroup(LocalGroup group, LocalGroup changed)
-        {
-            // Only description may be changed
-            if (group.Description == changed.Description)
-                return;
-
-            IntPtr aliasHandle = IntPtr.Zero;
-            IntPtr buffer = IntPtr.Zero;
-
-            if (group.SID == null)
-                group = GetLocalGroup(group.Name);
-
-            var sre = GetGroupSre(group.SID);
-            UInt32 status;
-
-            try
-            {
-                status = SamApi.SamOpenAlias(sre.domainHandle,
-                                                 Win32.MAXIMUM_ALLOWED,
-                                                 sre.RelativeId,
-                                                 out aliasHandle);
-                ThrowOnFailure(status);
-
-                ALIAS_ADM_COMMENT_INFORMATION info = new ALIAS_ADM_COMMENT_INFORMATION();
-
-                info.AdminComment = new UNICODE_STRING(changed.Description);
-                buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                Marshal.StructureToPtr(info, buffer, false);
-
-                status = SamApi.SamSetInformationAlias(aliasHandle,
-                                                       ALIAS_INFORMATION_CLASS.AliasAdminCommentInformation,
-                                                       buffer);
-
-                ThrowOnFailure(status);
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                {
-                    Marshal.DestroyStructure<ALIAS_ADM_COMMENT_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                }
-
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-        }
-
-        /// <summary>
-        /// Create a populated LocalGroup object from a SamRidEnumeration object.
-        /// </summary>
-        /// <param name="sre">
-        /// A <see cref="SamRidEnumeration"/> object containing minimal information
-        /// about a local group.
-        /// </param>
-        /// <returns>
-        /// A LocalGroup object, populated with group information.
-        /// </returns>
-        private LocalGroup MakeLocalGroupObject(SamRidEnumeration sre)
-        {
-            IntPtr aliasHandle = IntPtr.Zero;
-            var status = SamApi.SamOpenAlias(sre.domainHandle,
-                                             Win32.MAXIMUM_ALLOWED,
-                                             sre.RelativeId,
-                                             out aliasHandle);
-
-            ThrowOnFailure(status);
-
-            try
-            {
-                return MakeLocalGroupObject(sre, aliasHandle);
-            }
-            finally
-            {
-                if (aliasHandle != IntPtr.Zero)
-                    status = SamApi.SamCloseHandle(aliasHandle);
-            }
-        }
-
-        /// <summary>
-        /// Create a populated LocalGroup object from a SamRidEnumeration object,
-        /// using an already-opened SAM alias handle.
-        /// </summary>
-        /// <param name="sre">
-        /// A <see cref="SamRidEnumeration"/> object containing minimal information
-        /// about a local group.
-        /// </param>
-        /// <param name="aliasHandle">
-        /// Handle to an open SAM alias.
-        /// </param>
-        /// <returns>
-        /// A LocalGroup object, populated with group information.
-        /// </returns>
-        private LocalGroup MakeLocalGroupObject(SamRidEnumeration sre, IntPtr aliasHandle)
-        {
-            IntPtr buffer = IntPtr.Zero;
-            UInt32 status = 0;
-
-            try
-            {
-                ALIAS_GENERAL_INFORMATION generalInfo;
-
-                status = SamApi.SamQueryInformationAlias(aliasHandle,
-                                                         ALIAS_INFORMATION_CLASS.AliasGeneralInformation,
-                                                         out buffer);
-                ThrowOnFailure(status);
-                generalInfo = Marshal.PtrToStructure<ALIAS_GENERAL_INFORMATION>(buffer);
-
-                LocalGroup group = new LocalGroup()
-                                    {
-                                        PrincipalSource = GetPrincipalSource(sre),
-                                        SID = RidToSid(sre.domainHandle, sre.RelativeId),
-
-                                        Name = generalInfo.Name.ToString(),
-                                        Description = generalInfo.AdminComment.ToString()
-                                    };
-
-                return group;
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    status = SamApi.SamFreeMemory(buffer);
-            }
-        }
-
-        /// <summary>
-        /// Update a local user with new properties.
-        /// </summary>
-        /// <param name="user">
-        /// A <see cref="LocalUser"/> object representing the user to be updated.
-        /// </param>
-        /// <param name="changed">
-        /// A LocalUser object containing the desired changes.
-        /// </param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/>
-        /// object containing the new password. A null value in this parameter
-        /// indicates that the password is not to be changed.
-        /// </param>
-        /// <param name="passwordExpired">One of the
-        /// <see cref="PasswordExpiredState"/> enumeration values indicating
-        /// whether the password-expired state is to be explicitly set or
-        /// left as is.
-        /// If the <paramref name="password"/> parameter is null, this parameter
-        /// is ignored.
-        /// </param>
-        /// <param name="setPasswordNeverExpires">
-        /// Indicates whether the PasswordNeverExpires parameter was specified.
-        /// </param>
-        private void UpdateUser(LocalUser user,
-                                LocalUser changed,
-                                System.Security.SecureString password,
-                                PasswordExpiredState passwordExpired,
-                                bool? setPasswordNeverExpires)
-        {
-            UserProperties properties = UserProperties.None;
-
-            if (user.AccountExpires != changed.AccountExpires)
-                properties |= UserProperties.AccountExpires;
-
-            if (user.Description != changed.Description)
-                properties |= UserProperties.Description;
-
-            if (user.FullName != changed.FullName)
-                properties |= UserProperties.FullName;
-
-            if (setPasswordNeverExpires.HasValue)
-                properties |= UserProperties.PasswordNeverExpires;
-
-            if (user.UserMayChangePassword != changed.UserMayChangePassword)
-                properties |= UserProperties.UserMayChangePassword;
-
-            if (user.PasswordRequired != changed.PasswordRequired)
-                properties |= UserProperties.PasswordRequired;
-
-            if (   properties != UserProperties.None
-                || passwordExpired != PasswordExpiredState.Unchanged
-                || password != null)
-            {
-                IntPtr userHandle = IntPtr.Zero;
-                UInt32 status = 0;
-
-                try
-                {
-                    status = SamApi.SamOpenUser(localDomainHandle,
-                                                Win32.MAXIMUM_ALLOWED,
-                                                user.SID.GetRid(),
-                                                out userHandle);
-                    ThrowOnFailure(status);
-
-                    SetUserData(userHandle, changed, properties, password, passwordExpired, setPasswordNeverExpires);
-                }
-                finally
-                {
-                    if (userHandle != IntPtr.Zero)
-                        status = SamApi.SamCloseHandle(userHandle);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Set selected properties of a user.
-        /// </summary>
-        /// <param name="userHandle">Handle to an open SAM user.</param>
-        /// <param name="sourceUser">
-        /// A <see cref="LocalUser"/> object containing the data to set into the user.
-        /// </param>
-        /// <param name="setFlags">
-        /// A combination of <see cref="UserProperties"/> values indicating the properties to be set.
-        /// </param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/>
-        /// object containing the new password.
-        /// </param>
-        /// <param name="passwordExpired">One of the
-        /// <see cref="PasswordExpiredState"/> enumeration values indicating
-        /// whether the password-expired state is to be explicitly set or
-        /// left as is. If the <paramref name="password"/> parameter is null,
-        /// this parameter is ignored.
-        /// </param>
-        /// <param name="setPasswordNeverExpires">
-        /// Nullable value the specifies whether the PasswordNeverExpires bit should be flipped
-        /// </param>
-        private void SetUserData(IntPtr userHandle,
-                                 LocalUser sourceUser,
-                                 UserProperties setFlags,
-                                 System.Security.SecureString password,
-                                 PasswordExpiredState passwordExpired,
-                                 bool? setPasswordNeverExpires)
-        {
-            IntPtr buffer = IntPtr.Zero;
-
-            try
-            {
-                UInt32 which = 0;
-                UInt32 status = 0;
-                UInt32 uac = GetUserAccountControl(userHandle);
-                USER_ALL_INFORMATION info = new USER_ALL_INFORMATION();
-
-                if (setFlags.HasFlag(UserProperties.AccountExpires))
-                {
-                    which |= SamApi.USER_ALL_ACCOUNTEXPIRES;
-                    info.AccountExpires.QuadPart = sourceUser.AccountExpires.HasValue
-                                                 ? sourceUser.AccountExpires.Value.ToFileTime()
-                                                 : 0L;
-                }
-
-                if (setFlags.HasFlag(UserProperties.Description))
-                {
-                    which |= SamApi.USER_ALL_ADMINCOMMENT;
-                    info.AdminComment = new UNICODE_STRING(sourceUser.Description);
-                }
-
-                if (setFlags.HasFlag(UserProperties.Enabled))
-                {
-                    which |= SamApi.USER_ALL_USERACCOUNTCONTROL;
-                    if (sourceUser.Enabled)
-                        uac &= ~SamApi.USER_ACCOUNT_DISABLED;
-                    else
-                        uac |= SamApi.USER_ACCOUNT_DISABLED;
-                }
-
-                if (setFlags.HasFlag(UserProperties.FullName))
-                {
-                    which |= SamApi.USER_ALL_FULLNAME;
-                    info.FullName = new UNICODE_STRING(sourceUser.FullName);
-                }
-
-                if (setFlags.HasFlag(UserProperties.PasswordNeverExpires))
-                {
-                    // Only modify the bit if a change was requested
-                    if (setPasswordNeverExpires.HasValue)
-                    {
-                        which |= SamApi.USER_ALL_USERACCOUNTCONTROL;
-                        if (setPasswordNeverExpires.Value)
-                            uac |= SamApi.USER_DONT_EXPIRE_PASSWORD;
-                        else
-                            uac &= ~SamApi.USER_DONT_EXPIRE_PASSWORD;
-                    }
-                }
-
-                if (setFlags.HasFlag(UserProperties.PasswordRequired))
-                {
-                    which |= SamApi.USER_ALL_USERACCOUNTCONTROL;
-                    if (sourceUser.PasswordRequired)
-                        uac &= ~SamApi.USER_PASSWORD_NOT_REQUIRED;
-                    else
-                        uac |= SamApi.USER_PASSWORD_NOT_REQUIRED;
-                }
-
-                if (which != 0)
-                {
-                    info.WhichFields = which;
-                    if ((which & SamApi.USER_ALL_USERACCOUNTCONTROL) != 0)
-                        info.UserAccountControl = uac;
-
-                    buffer = Marshal.AllocHGlobal(Marshal.SizeOf<USER_ALL_INFORMATION>());
-                    Marshal.StructureToPtr<USER_ALL_INFORMATION>(info, buffer, false);
-
-                    status = SamApi.SamSetInformationUser(userHandle,
-                                                          USER_INFORMATION_CLASS.UserAllInformation,
-                                                          buffer);
-                    ThrowOnFailure(status);
-                    status = SamApi.SamFreeMemory(buffer);
-                    buffer = IntPtr.Zero;
-                }
-
-                if (setFlags.HasFlag(UserProperties.UserMayChangePassword))
-                    SetUserMayChangePassword(userHandle, sourceUser.SID, sourceUser.UserMayChangePassword);
-
-                if (password != null)
-                    SetUserPassword(userHandle, password, passwordExpired);
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                {
-                    Marshal.DestroyStructure<USER_ALL_INFORMATION>(buffer);
-                    Marshal.FreeHGlobal(buffer);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Retrieve the User's User Account Control flags.
-        /// </summary>
-        /// <param name="userHandle">
-        /// Handle to an open user.
-        /// </param>
-        /// <returns>
-        /// A 32-bit unsigned integer containing the User Account Control
-        /// flags as a set of bits.
-        /// </returns>
-        private UInt32 GetUserAccountControl(IntPtr userHandle)
-        {
-            IntPtr buffer = IntPtr.Zero;
-            USER_LOGON_INFORMATION info;
-            UInt32 status;
-
-            try
-            {
-                status = SamApi.SamQueryInformationUser(userHandle,
-                                                        USER_INFORMATION_CLASS.UserLogonInformation,
-                                                        out buffer);
-                ThrowOnFailure(status);
-                info = Marshal.PtrToStructure<USER_LOGON_INFORMATION>(buffer);
-                status = SamApi.SamFreeMemory(buffer);
-                buffer = IntPtr.Zero;
-
-                return info.UserAccountControl;
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    status = SamApi.SamFreeMemory(buffer);
-            }
-        }
-
-        /// <summary>
-        /// Retrieve the DACL from a SAM object.
-        /// </summary>
-        /// <param name="objectHandle">
-        /// A handle to the SAM object whose DACL is to be retrieved.
-        /// </param>
-        /// <returns>
-        /// A <see cref="RawAcl"/> object containing the DACL retrieved from
-        /// the SAM object.
-        /// </returns>
-        private RawAcl GetSamDacl(IntPtr objectHandle)
-        {
-            RawAcl rv = null;
-            IntPtr securityObject = IntPtr.Zero;
-            UInt32 status = 0;
-
-            try
-            {
-                status = SamApi.SamQuerySecurityObject(objectHandle, Win32.DACL_SECURITY_INFORMATION, out securityObject);
-                ThrowOnFailure(status);
-
-                SECURITY_DESCRIPTOR sd = Marshal.PtrToStructure<SECURITY_DESCRIPTOR>(securityObject);
-
-                bool daclPresent;
-                bool daclDefaulted;
-                IntPtr dacl;
-                bool ok = Win32.GetSecurityDescriptorDacl(securityObject, out daclPresent, out dacl, out daclDefaulted);
-
-                if (!ok)
-                {
-                    var error = Marshal.GetLastWin32Error();
-                    if (error == Win32.ERROR_ACCESS_DENIED)
-                        throw new AccessDeniedException(context.target);
-                    else
-                        throw new Win32InternalException(error, context.target);
-                }
-
-                if (daclPresent)
-                {
-                    ACL acl = Marshal.PtrToStructure<ACL>(dacl);
-
-                    if (acl.AclSize != 0)
-                    {
-                        // put the DACL into managed data
-                        var bytes = new byte[acl.AclSize];
-
-                        Marshal.Copy(dacl, bytes, 0, acl.AclSize);
-                        rv = new RawAcl(bytes, 0);
-                    }
-                }
-            }
-            finally
-            {
-                if (IntPtr.Zero != securityObject)
-                    status = SamApi.SamFreeMemory(securityObject);
-            }
-
-            return rv;
-        }
-
-        /// <summary>
-        /// Set the DACL of a SAM object.
-        /// </summary>
-        /// <param name="objectHandle">
-        /// A handle to the SAM object whose DACL is to be retrieved.
-        /// </param>
-        /// <param name="rawAcl">
-        /// A <see cref="RawAcl"/> object containing the DACL to be set into
-        /// the SAM object.
-        /// </param>
-        private void SetSamDacl(IntPtr objectHandle, RawAcl rawAcl)
-        {
-            IntPtr ipsd = IntPtr.Zero;
-            IntPtr ipDacl = IntPtr.Zero;
-
-            try
-            {
-                bool present = false;
-
-                // create a new security descriptor
-                var sd = new SECURITY_DESCRIPTOR() { Revision = 1 };
-                ipsd = Marshal.AllocHGlobal(Marshal.SizeOf<SECURITY_DESCRIPTOR>());
-
-                if (rawAcl != null && rawAcl.BinaryLength > 0)
-                {
-                    Marshal.StructureToPtr<SECURITY_DESCRIPTOR>(sd, ipsd, false);
-
-                    // put the DACL into unmanaged memory
-                    var length = rawAcl.BinaryLength;
-                    var bytes = new byte[length];
-                    rawAcl.GetBinaryForm(bytes, 0);
-                    ipDacl = Marshal.AllocHGlobal(length);
-
-                    Marshal.Copy(bytes, 0, ipDacl, length);
-                    present = true;
-                }
-
-                // set the DACL into our new security descriptor
-                var ok = Win32.SetSecurityDescriptorDacl(ipsd, present, ipDacl, false);
-                if (!ok)
-                {
-                    var error = Marshal.GetLastWin32Error();
-
-                    if (error == Win32.ERROR_ACCESS_DENIED)
-                        throw new AccessDeniedException(context.target);
-                    else
-                        throw new Win32InternalException(error, context.target);
-                }
-
-                var status = SamApi.SamSetSecurityObject(objectHandle, Win32.DACL_SECURITY_INFORMATION, ipsd);
-                ThrowOnFailure(status);
-            }
-            finally
-            {
-                Marshal.FreeHGlobal(ipDacl);
-                Marshal.FreeHGlobal(ipsd);
-            }
-        }
-
-        /// <summary>
-        /// Determine if a user account password may be changed by the user.
-        /// </summary>
-        /// <param name="userHandle">
-        /// Handle to a SAM user object.
-        /// </param>
-        /// <param name="userSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the SAM
-        /// object's associated user.
-        /// </param>
-        /// <returns>
-        /// True if the user account password may be changed by its user,
-        /// false otherwise.
-        /// </returns>
-        /// <remarks>
-        /// The ability to for the user to change the user account password
-        /// is a permission in the object's DACL. This method walks through
-        /// the ACEs in the DACL, checking if the permission is granted to
-        /// either Everyone or the user identified by the userSid parameter.
-        /// </remarks>
-        private bool GetUserMayChangePassword(IntPtr userHandle, SecurityIdentifier userSid)
-        {
-            var rawAcl = GetSamDacl(userHandle);
-
-            // if there is no DACL, then access is granted
-            if (rawAcl == null)
-                return true;
-
-            foreach (var a in rawAcl)
-            {
-                var ace = a as CommonAce;
-                if (ace != null && ace.AceType == AceType.AccessAllowed)
-                {
-                    if (ace.SecurityIdentifier == worldSid ||
-                        ace.SecurityIdentifier == userSid)
-                    {
-                        if ((ace.AccessMask & SamApi.USER_CHANGE_PASSWORD) != 0)
-                            return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// Set whether a user account password may be changed by the user.
-        /// </summary>
-        /// <param name="userHandle">
-        /// Handle to a SAM user object.
-        /// </param>
-        /// <param name="userSid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the SAM
-        /// object's associated user.
-        /// </param>
-        /// <param name="enable">
-        /// A boolean indicating whether the permission is to be enabled or
-        /// disabled.
-        /// </param>
-        /// <remarks>
-        /// The ability to for the user to change the user account password
-        /// is a permission in the object's DACL. This method walks through
-        /// the ACEs in the DACL, enabling or disabling the permission on ACEs
-        /// associated with either Everyone or the user identified by the
-        /// userSid parameter.
-        /// </remarks>
-        private void SetUserMayChangePassword(IntPtr userHandle, SecurityIdentifier userSid, bool enable)
-        {
-            var changed = false;
-            var rawAcl = GetSamDacl(userHandle);
-
-            if (rawAcl != null)
-            {
-                foreach (var a in rawAcl)
-                {
-                    var ace = a as CommonAce;
-                    if (ace != null && ace.AceType == AceType.AccessAllowed)
-                    {
-                        if (ace.SecurityIdentifier == worldSid ||
-                            ace.SecurityIdentifier == userSid)
-                        {
-                            if (enable)
-                                ace.AccessMask |= SamApi.USER_CHANGE_PASSWORD;
-                            else
-                                ace.AccessMask &= ~SamApi.USER_CHANGE_PASSWORD;
-
-                            changed = true;
-                        }
-                    }
-                }
-
-                if (changed)
-                    SetSamDacl(userHandle, rawAcl);
-            }
-        }
-
-        /// <summary>
-        /// Determine if a user's password has expired.
-        /// </summary>
-        /// <param name="userHandle">
-        /// Handle to an open User.
-        /// </param>
-        /// <returns>
-        /// True if the user's password has expired, false otherwise.
-        /// </returns>
-        private bool IsPasswordExpired(IntPtr userHandle)
-        {
-            IntPtr buffer = IntPtr.Zero;
-            USER_ALL_INFORMATION info;
-            UInt32 status;
-
-            try
-            {
-                status = SamApi.SamQueryInformationUser(userHandle,
-                                                            USER_INFORMATION_CLASS.UserAllInformation,
-                                                            out buffer);
-                ThrowOnFailure(status);
-                info = Marshal.PtrToStructure<USER_ALL_INFORMATION>(buffer);
-                status = SamApi.SamFreeMemory(buffer);
-                buffer = IntPtr.Zero;
-
-                return info.PasswordExpired;
-            }
-            finally
-            {
-                if (buffer != IntPtr.Zero)
-                    status = SamApi.SamFreeMemory(buffer);
-            }
-        }
-
-        /// <summary>
-        /// Set a user's password.
-        /// </summary>
-        /// <param name="userHandle">Handle to an open User.</param>
-        /// <param name="password">A <see cref="System.Security.SecureString"/>
-        /// object containing the new password.
-        /// </param>
-        /// <param name="passwordExpired">One of the
-        /// <see cref="PasswordExpiredState"/> enumeration values indicating
-        /// whether the password-expired state is to be explicitly set or
-        /// left as is.
-        /// </param>
-        private void SetUserPassword(IntPtr userHandle,
-                                     System.Security.SecureString password,
-                                     PasswordExpiredState passwordExpired)
-        {
-            if (password != null)
-            {
-                USER_SET_PASSWORD_INFORMATION info = new USER_SET_PASSWORD_INFORMATION();
-                IntPtr buffer = IntPtr.Zero;
-
-                try
-                {
-                    bool setPwExpire = false;
-
-                    switch (passwordExpired)
-                    {
-                        case PasswordExpiredState.Expired:
-                            setPwExpire = true;
-                            break;
-
-                        case PasswordExpiredState.NotExpired:
-                            setPwExpire = false;
-                            break;
-
-                        case PasswordExpiredState.Unchanged:
-                            setPwExpire = IsPasswordExpired(userHandle);
-                            break;
-                    }
-
-                    info.Password = new UNICODE_STRING(password.AsString());
-                    info.PasswordExpired = setPwExpire;
-
-                    buffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
-                    Marshal.StructureToPtr<USER_SET_PASSWORD_INFORMATION>(info, buffer, false);
-
-                    var status = SamApi.SamSetInformationUser(userHandle,
-                                                              USER_INFORMATION_CLASS.UserSetPasswordInformation,
-                                                              buffer);
-                    ThrowOnFailure(status);
-                }
-                finally
-                {
-                    if (buffer != IntPtr.Zero)
-                    {
-                        Marshal.DestroyStructure<USER_SET_PASSWORD_INFORMATION>(buffer);
-                        Marshal.FreeHGlobal(buffer);
-                    }
-                }
-            }
-        }
-
-#region Utility Methods
-        /// <summary>
-        /// Create a <see cref="System.Security.Principal.SecurityIdentifier"/>
-        /// object from a relative ID.
-        /// </summary>
-        /// <param name="domainHandle">
-        /// Handle to the domain from which the ID was acquired.
-        /// </param>
-        /// <param name="rid">
-        /// The Relative ID value.
-        /// </param>
-        /// <returns>
-        /// A SecurityIdentifier object containing the SID of the
-        /// object identified by the <paramref name="rid"/> parameter.
-        /// </returns>
-        private SecurityIdentifier RidToSid(IntPtr domainHandle, uint rid)
-        {
-            IntPtr sidBytes = IntPtr.Zero;
-            UInt32 status = 0;
-            SecurityIdentifier sid = null;
-
-            try
-            {
-                status = SamApi.SamRidToSid(domainHandle, rid, out sidBytes);
-
-                if (status == NtStatus.STATUS_NOT_FOUND)
-                    throw new InternalException(status,
-                        StringUtil.Format(Strings.RidToSidFailed, rid),
-                        ErrorCategory.ObjectNotFound);
-                ThrowOnFailure(status);
-
-                sid = new SecurityIdentifier(sidBytes);
-            }
-            finally
-            {
-                if (IntPtr.Zero != sidBytes)
-                    status = SamApi.SamFreeMemory(sidBytes);
-            }
-
-            return sid;
-        }
-
-        /// <summary>
-        /// Lookup the account identified by the specified SID.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the account
-        /// to look up.
-        /// </param>
-        /// <returns>
-        /// A <see cref="AccountInfo"/> object contains information about the
-        /// account, or null if no matching account was found.
-        /// </returns>
-        private AccountInfo LookupAccountInfo(SecurityIdentifier sid)
-        {
-            var sbAccountName = new StringBuilder();
-            var sbDomainName = new StringBuilder();
-            var accountNameLength = sbAccountName.Capacity;
-            var domainNameLength = sbDomainName.Capacity;
-            SID_NAME_USE use;
-            var error = Win32.NO_ERROR;
-            var bytes = new byte[sid.BinaryLength];
-
-            sid.GetBinaryForm(bytes, 0);
-
-            if (!Win32.LookupAccountSid(null,
-                                        bytes,
-                                        sbAccountName, ref accountNameLength,
-                                        sbDomainName, ref domainNameLength,
-                                        out use))
-            {
-                error = Marshal.GetLastWin32Error();
-
-                if (error == Win32.ERROR_INSUFFICIENT_BUFFER)
-                {
-                    sbAccountName.EnsureCapacity(accountNameLength);
-                    sbDomainName.EnsureCapacity((int)domainNameLength);
-                    error = Win32.NO_ERROR;
-                    if (!Win32.LookupAccountSid(null,
-                                                bytes,
-                                                sbAccountName, ref accountNameLength,
-                                                sbDomainName, ref domainNameLength,
-                                                out use))
-                        error = Marshal.GetLastWin32Error();
-                }
-            }
-
-            if (error == Win32.ERROR_SUCCESS)
-                return new AccountInfo
-                            {
-                                AccountName = sbAccountName.ToString(),
-                                DomainName = sbDomainName.ToString(),
-                                Sid = sid,
-                                Use = use
-                            };
-            else if (error == Win32.ERROR_NONE_MAPPED)
-                return null;
-            else
-                throw new Win32InternalException(error, context.target);
-        }
-
-        /// <summary>
-        /// Lookup the account identified by specified account name.
-        /// </summary>
-        /// <param name="accountName">
-        /// A string containing the name of the account to look up.
-        /// </param>
-        /// <returns>
-        /// A <see cref="AccountInfo"/> object contains information about the
-        /// account, or null if no matching account was found.
-        /// </returns>
-        private AccountInfo LookupAccountInfo(string accountName)
-        {
-            var sbDomainName = new StringBuilder();
-            var domainNameLength = (uint)sbDomainName.Capacity;
-            byte [] sid = null;
-            uint sidLength = 0;
-            SID_NAME_USE use;
-            int error = Win32.NO_ERROR;
-
-            if (!Win32.LookupAccountName(null,
-                                         accountName,
-                                         sid,
-                                         ref sidLength,
-                                         sbDomainName,
-                                         ref domainNameLength,
-                                         out use))
-            {
-                error = Marshal.GetLastWin32Error();
-                if (error == Win32.ERROR_INSUFFICIENT_BUFFER || error == Win32.ERROR_INVALID_FLAGS)
-                {
-                    sid = new byte[sidLength];
-                    sbDomainName.EnsureCapacity((int)domainNameLength);
-                    error = Win32.NO_ERROR;
-
-                    if (!Win32.LookupAccountName(null,
-                                                 accountName,
-                                                 sid,
-                                                 ref sidLength,
-                                                 sbDomainName,
-                                                 ref domainNameLength,
-                                                 out use))
-                        error = Marshal.GetLastWin32Error();
-                }
-
-            }
-
-            if (error == Win32.ERROR_SUCCESS)
-            {
-                // Bug: 7407413 :
-                // If accountname is in the format domain1\user1,
-                // then AccountName.ToString() will return domain1\domain1\user1
-                // Ideally , accountname should be processed to hold only account name (without domain)
-                // as we are keeping the domain in 'DomainName' variable.
-
-                int index = accountName.IndexOf("\\", StringComparison.CurrentCultureIgnoreCase);
-                if (index > -1)
-                {
-                    accountName = accountName.Substring(index + 1);
-                }
-
-                return new AccountInfo
-                {
-                    AccountName = accountName,
-                    DomainName = sbDomainName.ToString(),
-                    Sid = new SecurityIdentifier(sid, 0),
-                    Use = use
-                };
-            }
-            else if (error == Win32.ERROR_NONE_MAPPED)
-                return null;
-            else if (error == Win32.ERROR_ACCESS_DENIED)
-                throw new AccessDeniedException(context.target);
-            else
-                throw new Win32InternalException(error, context.target);
-        }
-
-        /// <summary>
-        /// Create a <see cref="LocalPrincipal"/> object from information in
-        /// an AccountInfo object.
-        /// </summary>
-        /// <param name="info">
-        /// An AccountInfo object containing information about the account
-        /// for which the LocalPrincipal object is being created. This parameter
-        /// may be null, in which case this method returns null.
-        /// </param>
-        /// <returns>
-        /// A new LocalPrincipal object representing the account, or null if the
-        /// <paramref name="info"/> parameter is null.
-        /// </returns>
-        private LocalPrincipal MakeLocalPrincipalObject(AccountInfo info)
-        {
-            if (info == null)
-                return null;    // this is a legitimate case
-
-            var rv = new LocalPrincipal(info.ToString());
-            rv.SID = info.Sid;
-            rv.PrincipalSource = GetPrincipalSource(info);
-
-            switch (info.Use)
-            {
-                case SID_NAME_USE.SidTypeAlias:     // TODO: is this the right thing to do???
-                case SID_NAME_USE.SidTypeGroup:
-                case SID_NAME_USE.SidTypeWellKnownGroup:
-                    rv.ObjectClass = Strings.ObjectClassGroup;
-                    break;
-
-                case SID_NAME_USE.SidTypeUser:
-                    rv.ObjectClass = Strings.ObjectClassUser;
-                    break;
-
-                default:
-                    rv.ObjectClass = Strings.ObjectClassOther;
-                    break;
-            }
-
-            return rv;
-        }
-
-        /// <summary>
-        /// Indicate whether a Status code is a successful value.
-        /// </summary>
-        /// <param name="ntStatus">
-        /// One of the NTSTATUS code values indicating the error, if any.
-        /// </param>
-        /// <returns>
-        /// True if the Status code represents a success, false otherwise.
-        /// </returns>
-        private static bool Succeeded(UInt32 ntStatus)
-        {
-            return NtStatus.IsSuccess(ntStatus);
-        }
-
-        /// <summary>
-        /// Helper to throw an exception if the provided Status code
-        /// represents a failure.
-        /// </summary>
-        /// <param name="ntStatus">
-        /// One of the NTSTATUS code values indicating the error, if any.
-        /// </param>
-        /// <param name="context">
-        /// A <see cref="Context"/> object containing information about the
-        /// current operation. If this parameter is null, the class's context
-        /// is used.
-        /// </param>
-        private void ThrowOnFailure(UInt32 ntStatus, Context context = null)
-        {
-            if (NtStatus.IsError(ntStatus))
-            {
-                var ex = MakeException(ntStatus, context);
-
-                if (ex != null)
-                    throw ex;
-            }
-        }
-
-        /// <summary>
-        /// Create an appropriate exception from the specified status code.
-        /// </summary>
-        /// <param name="ntStatus">
-        /// One of the NTSTATUS code values indicating the error, if any.
-        /// </param>
-        /// <param name="context">
-        /// A <see cref="Context"/> object containing information about the
-        /// current operation. If this parameter is null, the class's context
-        /// is used.
-        /// </param>
-        /// <returns>
-        /// An <see cref="Exception"/> object, or an object derived from Exception,
-        /// appropriate to the error. If <paramref name="ntStatus"/> does not
-        /// indicate an error, the method returns null.
-        /// </returns>
-        private Exception MakeException(UInt32 ntStatus, Context context = null)
-        {
-            if (!NtStatus.IsError(ntStatus))
-                return null;
-
-            if (context == null)
-                context = this.context;
-
-            switch (ntStatus)
-            {
-                case NtStatus.STATUS_ACCESS_DENIED:
-                    return new AccessDeniedException(context.target);
-
-                case NtStatus.STATUS_INVALID_ACCOUNT_NAME:
-                    return new InvalidNameException(context.ObjectName, context.target);
-
-                case NtStatus.STATUS_USER_EXISTS:
-                    if (context.operation == ContextOperation.New &&
-                        context.type == ContextObjectType.User)
-                    {
-                        return new UserExistsException(context.ObjectName, context.target);
-                    }
-                    else
-                    {
-                        return new NameInUseException(context.ObjectName, context.target);
-                    }
-
-                case NtStatus.STATUS_ALIAS_EXISTS:
-                    if (context.operation == ContextOperation.New &&
-                        context.type == ContextObjectType.Group)
-                    {
-                        return new GroupExistsException(context.ObjectName, context.target);
-                    }
-                    else
-                    {
-                        return new NameInUseException(context.ObjectName, context.target);
-                    }
-
-                case NtStatus.STATUS_GROUP_EXISTS:
-                    return new NameInUseException(context.ObjectName, context.target);
-
-                case NtStatus.STATUS_NO_SUCH_ALIAS:
-                case NtStatus.STATUS_NO_SUCH_GROUP:
-                    return new GroupNotFoundException(context.ObjectName, context.target);
-
-                case NtStatus.STATUS_NO_SUCH_USER:
-                    return new UserNotFoundException(context.ObjectName, context.target);
-
-                case NtStatus.STATUS_SPECIAL_GROUP:     // The group specified is a special group and cannot be operated on in the requested fashion.
-                // case NtStatus.STATUS_SPECIAL_ALIAS: // referred to in source for SAM api, but not in ntstatus.h!!!
-
-                    return new InvalidOperationException(StringUtil.Format(Strings.InvalidForGroup, context.ObjectName));
-
-                case NtStatus.STATUS_SPECIAL_USER:  // The user specified is a special user and cannot be operated on in the requested fashion.
-                    return new InvalidOperationException(StringUtil.Format(Strings.InvalidForUser, context.ObjectName));
-
-                case NtStatus.STATUS_NO_SUCH_MEMBER:
-                    return new MemberNotFoundException(context.MemberName, context.ObjectName);
-
-                case NtStatus.STATUS_MEMBER_IN_ALIAS:
-                case NtStatus.STATUS_MEMBER_IN_GROUP:
-                    if (context.operation == ContextOperation.Remove &&
-                        context.type == ContextObjectType.Group)
-                    {
-                        return new InvalidOperationException(StringUtil.Format(Strings.GroupHasMembers, context.ObjectName));
-                    }
-                    else
-                    {
-                        return new MemberExistsException(context.MemberName, context.ObjectName, context.target);
-                    }
-
-                case NtStatus.STATUS_MEMBER_NOT_IN_ALIAS:
-                case NtStatus.STATUS_MEMBER_NOT_IN_GROUP:
-                    return new MemberNotFoundException(context.MemberName, context.ObjectName);
-
-                case NtStatus.STATUS_MEMBERS_PRIMARY_GROUP:
-                    return new InvalidOperationException(StringUtil.Format(Strings.MembersPrimaryGroup, context.ObjectName));
-
-                case NtStatus.STATUS_LAST_ADMIN:    // Cannot delete the last administrator.
-                    return new InvalidOperationException(Strings.LastAdmin);
-
-                case NtStatus.STATUS_ILL_FORMED_PASSWORD:
-                case NtStatus.STATUS_PASSWORD_RESTRICTION:
-                    return new InvalidPasswordException(Native.Win32.RtlNtStatusToDosError(ntStatus));
-
-                // TODO: do we want to handle these?
-                //      they appear to be returned only in functions we are not calling
-                case NtStatus.STATUS_INVALID_SID:       // member sid is corrupted
-                case NtStatus.STATUS_INVALID_MEMBER:    // member has wrong account type
-                default:
-                    return new InternalException(ntStatus, context.target);
-            }
-        }
-
-        /// <summary>
-        /// Create a DateTime object from a 64-bit value from one of the SAM
-        /// structures.
-        /// </summary>
-        /// <param name="samValue">
-        /// A signed 64-bit value representing a date and time.
-        /// </param>
-        /// <returns>
-        /// A nullable DateTime object representing a date and time,
-        /// or null if the <paramref name="samValue"/> parameter is zero.
-        /// </returns>
-        private static DateTime? DateTimeFromSam(Int64 samValue)
-        {
-            if (samValue == 0 || samValue == 0X7FFFFFFFFFFFFFFF)
-                return null;
-
-            return DateTime.FromFileTime(samValue);
-        }
-
-        /// <summary>
-        /// Determine the source of a user or group. Either local, Active Directory,
-        /// or Azure AD.
-        /// </summary>
-        /// <param name="sid">
-        /// A <see cref="SecurityIdentifier"/> object identifying the user or group.
-        /// </param>
-        /// <returns>
-        /// One of the <see cref="PrincipalSource"/> enumerations identifying the
-        /// source of the object.
-        /// </returns>
-        private PrincipalSource? GetPrincipalSource(SecurityIdentifier sid)
-        {
-            var bSid = new byte[sid.BinaryLength];
-
-            sid.GetBinaryForm(bSid, 0);
-
-            var type = LSA_USER_ACCOUNT_TYPE.UnknownUserAccountType;
-
-            // Use LsaLookupUserAccountType for Windows 10 and later.
-            // Earlier versions of the OS will leave the property NULL because
-            // it is too error prone to attempt to replicate the decisions of
-            // LsaLookupUserAccountType.
-            var os = GetOperatingSystem();
-            if (os.Version.Major >= 10)
-            {
-                UInt32 status = Native.Win32.LsaLookupUserAccountType(bSid, out type);
-                if (NtStatus.IsError(status))
-                    type = LSA_USER_ACCOUNT_TYPE.UnknownUserAccountType;
-
-                switch (type)
-                {
-                    case LSA_USER_ACCOUNT_TYPE.ExternalDomainUserAccountType:
-                    case LSA_USER_ACCOUNT_TYPE.PrimaryDomainUserAccountType:
-                        return PrincipalSource.ActiveDirectory;
-
-                    case LSA_USER_ACCOUNT_TYPE.LocalUserAccountType:
-                        return PrincipalSource.Local;
-
-                    case LSA_USER_ACCOUNT_TYPE.AADUserAccountType:
-                        return PrincipalSource.AzureAD;
-
-                    // Currently, there is no value returned by LsaLookupUserAccountType
-                    // that corresponds to LSA_USER_ACCOUNT_TYPE.MSAUserAccountType,
-                    // but there may be in the future, so we'll account for it here.
-                    case LSA_USER_ACCOUNT_TYPE.MSAUserAccountType:
-                    case LSA_USER_ACCOUNT_TYPE.LocalConnectedUserAccountType:
-                        return PrincipalSource.MicrosoftAccount;
-
-                    case LSA_USER_ACCOUNT_TYPE.InternetUserAccountType:
-                        return sid.IsMsaAccount()
-                            ? PrincipalSource.MicrosoftAccount
-                            : PrincipalSource.Unknown;
-
-                    case LSA_USER_ACCOUNT_TYPE.UnknownUserAccountType:
-                    default:
-                        return PrincipalSource.Unknown;
-                }
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// Determine the source of a user or group. Either local, Active Directory,
-        /// or Azure AD.
-        /// </summary>
-        /// <param name="info">
-        /// An <see cref="AccountInfo"/> object containing information about the
-        /// user or group.
-        /// </param>
-        /// <returns>
-        /// One of the <see cref="PrincipalSource"/> enumerations identifying the
-        /// source of the object.
-        /// </returns>
-        private PrincipalSource? GetPrincipalSource(AccountInfo info)
-        {
-            return GetPrincipalSource(info.Sid);
-        }
-
-        /// <summary>
-        /// Determine the source of a user or group. Either local, Active Directory,
-        /// or Azure AD.
-        /// </summary>
-        /// <param name="sre">
-        /// A <see cref="SamRidEnumeration"/> object identifying the user or group.
-        /// </param>
-        /// <returns>
-        /// One of the <see cref="PrincipalSource"/> enumerations identifying the
-        /// source of the object.
-        /// </returns>
-        private PrincipalSource? GetPrincipalSource(SamRidEnumeration sre)
-        {
-            return GetPrincipalSource(RidToSid(sre.domainHandle, sre.RelativeId));
-        }
-
-#if CORECLR
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-        internal struct OSVERSIONINFOEX
-        {
-            // The OSVersionInfoSize field must be set to Marshal.SizeOf(this)
-            public int OSVersionInfoSize;
-            public int MajorVersion;
-            public int MinorVersion;
-            public int BuildNumber;
-            public int PlatformId;
-            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
-            public string CSDVersion;
-            public ushort ServicePackMajor;
-            public ushort ServicePackMinor;
-            public short SuiteMask;
-            public byte ProductType;
-            public byte Reserved;
-        }
-
-        [DllImport(PInvokeDllNames.GetVersionExDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-        internal static extern bool GetVersionEx(ref OSVERSIONINFOEX osVerEx);
-
-        private static volatile OperatingSystem localOs;
-
-        /// <summary>
-        /// It only contains the properties that get used in powershell.
-        /// </summary>
-        internal sealed class OperatingSystem
-        {
-            private Version _version;
-            private string _servicePack;
-            private string _versionString;
-
-            internal OperatingSystem(Version version, string servicePack)
-            {
-                if (version == null)
-                    throw new ArgumentNullException("version");
-
-                _version = version;
-                _servicePack = servicePack;
-            }
-
-            /// <summary>
-            /// OS version.
-            /// </summary>
-            public Version Version
-            {
-                get { return _version; }
-            }
-
-            /// <summary>
-            /// VersionString.
-            /// </summary>
-            public string VersionString
-            {
-                get
-                {
-                    if (_versionString != null)
-                    {
-                        return _versionString;
-                    }
-
-                    // It's always 'VER_PLATFORM_WIN32_NT' for NanoServer and IoT
-                    const string os = "Microsoft Windows NT ";
-                    if (string.IsNullOrEmpty(_servicePack))
-                    {
-                        _versionString = os + _version.ToString();
-                    }
-                    else
-                    {
-                        _versionString = os + _version.ToString(3) + " " + _servicePack;
-                    }
-
-                    return _versionString;
-                }
-            }
-        }
-#endif
-
-        // Wraps calls to acquire the OperatingSystem version
-        private OperatingSystem GetOperatingSystem()
-        {
-#if CORECLR
-            if (localOs == null)
-            {
-                OSVERSIONINFOEX osviex = new OSVERSIONINFOEX();
-                osviex.OSVersionInfoSize = Marshal.SizeOf(osviex);
-                if (!GetVersionEx(ref osviex))
-                {
-                    int errorCode = Marshal.GetLastWin32Error();
-                    throw new Win32Exception(errorCode);
-                }
-
-                Version ver = new Version(osviex.MajorVersion, osviex.MinorVersion, osviex.BuildNumber, (osviex.ServicePackMajor << 16) | osviex.ServicePackMinor);
-                localOs = new OperatingSystem(ver, osviex.CSDVersion);
-            }
-
-            return localOs;
-#else
-            return Environment.OSVersion;
-#endif
-        }
-#endregion Utility Methods
-#endregion Private Methods
-
-#region IDisposable Support
-        private bool disposedValue = false; // To detect redundant calls
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!disposedValue)
-            {
-                UInt32 status = 0;
-
-                if (disposing)
-                {
-                    // no managed objects need disposing.
-                }
-
-                if (builtinDomainHandle != IntPtr.Zero)
-                {
-                    status = SamApi.SamCloseHandle(builtinDomainHandle);
-                    builtinDomainHandle = IntPtr.Zero;
-                }
-
-                if (localDomainHandle != IntPtr.Zero)
-                {
-                    status = SamApi.SamCloseHandle(localDomainHandle);
-                    localDomainHandle = IntPtr.Zero;
-                }
-
-                if (samHandle != IntPtr.Zero)
-                {
-                    status = SamApi.SamCloseHandle(samHandle);
-                    samHandle = IntPtr.Zero;
-                }
-
-                if (NtStatus.IsError(status))
-                {
-                    // Do nothing to satisfy CA1806: Do not ignore method results. We want the dispose to proceed regardless of the handle close status.
-                }
-
-                disposedValue = true;
-            }
-        }
-
-        // override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
-        ~Sam()
-        {
-            // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
-            Dispose(false);
-        }
-
-        // This code added to correctly implement the disposable pattern.
-        public void Dispose()
-        {
-            // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
-            Dispose(true);
-            // uncomment the following line if the finalizer is overridden above.
-            GC.SuppressFinalize(this);
-        }
-#endregion IDisposable Support
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/SamApi.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/SamApi.cs
deleted file mode 100644
index c2d9bc7f95b..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/SamApi.cs
+++ /dev/null
@@ -1,468 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-//using System.Management.Automation.SecurityAccountsManager.Native;
-
-namespace System.Management.Automation.SecurityAccountsManager.Native.NtSam
-{
-    #region Enums
-    internal enum ALIAS_INFORMATION_CLASS
-    {
-        AliasGeneralInformation = 1,
-        AliasNameInformation,
-        AliasAdminCommentInformation,
-        AliasReplicationInformation,
-        AliasExtendedInformation,
-    }
-
-    internal enum GROUP_INFORMATION_CLASS
-    {
-        GroupGeneralInformation = 1,
-        GroupNameInformation,
-        GroupAttributeInformation,
-        GroupAdminCommentInformation,
-        GroupReplicationInformation
-    }
-
-    internal enum USER_INFORMATION_CLASS
-    {
-        UserGeneralInformation      = 1,
-        UserPreferencesInformation,
-        UserLogonInformation,
-        UserLogonHoursInformation,
-        UserAccountInformation,
-        UserNameInformation,
-        UserAccountNameInformation,
-        UserFullNameInformation,
-        UserPrimaryGroupInformation,
-        UserHomeInformation,
-        UserScriptInformation,
-        UserProfileInformation,
-        UserAdminCommentInformation,
-        UserWorkStationsInformation,
-        UserSetPasswordInformation,
-        UserControlInformation,
-        UserExpiresInformation,
-        UserInternal1Information,
-        UserInternal2Information,
-        UserParametersInformation,
-        UserAllInformation,
-        UserInternal3Information,
-        UserInternal4Information,
-        UserInternal5Information,
-        UserInternal4InformationNew,
-        UserInternal5InformationNew,
-        UserInternal6Information,
-        UserExtendedInformation,
-        UserLogonUIInformation,
-    }
-
-    #endregion Enums
-
-    #region Structures
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SR_SECURITY_DESCRIPTOR
-    {
-        public UInt32 Length;
-        public IntPtr SecurityDescriptor;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct LOGON_HOURS
-    {
-        public UInt16 UnitsPerWeek;
-
-        //
-        // UnitsPerWeek is the number of equal length time units the week is
-        // divided into.  This value is used to compute the length of the bit
-        // string in logon_hours.  Must be less than or equal to
-        // SAM_UNITS_PER_WEEK (10080) for this release.
-        //
-        // LogonHours is a bit map of valid logon times.  Each bit represents
-        // a unique division in a week.  The largest bit map supported is 1260
-        // bytes (10080 bits), which represents minutes per week.  In this case
-        // the first bit (bit 0, byte 0) is Sunday, 00:00:00 - 00-00:59; bit 1,
-        // byte 0 is Sunday, 00:01:00 - 00:01:59, etc.  A NULL pointer means
-        // DONT_CHANGE for SamSetInformationUser() calls.
-        //
-
-        public IntPtr LogonHours;
-    }
-
-    [StructLayout(LayoutKind.Sequential, Pack=4)]
-    internal struct USER_ALL_INFORMATION
-    {
-        public LARGE_INTEGER LastLogon;
-        public LARGE_INTEGER LastLogoff;
-        public LARGE_INTEGER PasswordLastSet;
-        public LARGE_INTEGER AccountExpires;
-        public LARGE_INTEGER PasswordCanChange;
-        public LARGE_INTEGER PasswordMustChange;
-        public UNICODE_STRING UserName;
-        public UNICODE_STRING FullName;
-        public UNICODE_STRING HomeDirectory;
-        public UNICODE_STRING HomeDirectoryDrive;
-        public UNICODE_STRING ScriptPath;
-        public UNICODE_STRING ProfilePath;
-        public UNICODE_STRING AdminComment;
-        public UNICODE_STRING WorkStations;
-        public UNICODE_STRING UserComment;
-        public UNICODE_STRING Parameters;
-        public UNICODE_STRING LmPassword;
-        public UNICODE_STRING NtPassword;
-        public UNICODE_STRING PrivateData;
-        public SR_SECURITY_DESCRIPTOR SecurityDescriptor;
-        public UInt32 UserId;
-        public UInt32 PrimaryGroupId;
-        public UInt32 UserAccountControl;
-        public UInt32 WhichFields;
-        public LOGON_HOURS LogonHours;
-        public UInt16 BadPasswordCount;
-        public UInt16 LogonCount;
-        public UInt16 CountryCode;
-        public UInt16 CodePage;
-        [MarshalAs(UnmanagedType.I1)]
-        public bool LmPasswordPresent;
-        [MarshalAs(UnmanagedType.I1)]
-        public bool NtPasswordPresent;
-        [MarshalAs(UnmanagedType.I1)]
-        public bool PasswordExpired;
-        [MarshalAs(UnmanagedType.I1)]
-        public bool PrivateDataSensitive;
-    }
-
-    [StructLayout(LayoutKind.Sequential, Pack=4)]
-    internal struct USER_GENERAL_INFORMATION
-    {
-        public UNICODE_STRING UserName;
-        public UNICODE_STRING FullName;
-        public UInt32 PrimaryGroupId;
-        public UNICODE_STRING AdminComment;
-        public UNICODE_STRING UserComment;
-    }
-
-    [StructLayout(LayoutKind.Sequential, Pack=4)]
-    internal struct USER_LOGON_INFORMATION
-    {
-        public UNICODE_STRING UserName;
-        public UNICODE_STRING FullName;
-        public UInt32 UserId;
-        public UInt32 PrimaryGroupId;
-        public UNICODE_STRING HomeDirectory;
-        public UNICODE_STRING HomeDirectoryDrive;
-        public UNICODE_STRING ScriptPath;
-        public UNICODE_STRING ProfilePath;
-        public UNICODE_STRING WorkStations;
-        public LARGE_INTEGER LastLogon;
-        public LARGE_INTEGER LastLogoff;
-        public LARGE_INTEGER PasswordLastSet;
-        public LARGE_INTEGER PasswordCanChange;
-        public LARGE_INTEGER PasswordMustChange;
-        public LOGON_HOURS LogonHours;
-        public UInt16 BadPasswordCount;
-        public UInt16 LogonCount;
-        public UInt32 UserAccountControl;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_ACCOUNT_NAME_INFORMATION
-    {
-        public UNICODE_STRING UserName;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_FULL_NAME_INFORMATION
-    {
-        public UNICODE_STRING FullName;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_NAME_INFORMATION
-    {
-        public UNICODE_STRING UserName;
-        public UNICODE_STRING FullName;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_ADMIN_COMMENT_INFORMATION
-    {
-        UNICODE_STRING AdminComment;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_EXPIRES_INFORMATION
-    {
-        // LARGE_INTEGER AccountExpires;
-        public Int64 AccountExpires;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_SET_PASSWORD_INFORMATION
-    {
-        public UNICODE_STRING Password;
-        public bool PasswordExpired;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct USER_LOGON_HOURS_INFORMATION
-    {
-        public LOGON_HOURS LogonHours;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct POLICY_PRIMARY_DOMAIN_INFO
-    {
-        public UNICODE_STRING Name;
-        public IntPtr Sid;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ALIAS_GENERAL_INFORMATION
-    {
-        public UNICODE_STRING Name;
-        public UInt32 MemberCount;
-        public UNICODE_STRING AdminComment;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ALIAS_NAME_INFORMATION
-    {
-        public UNICODE_STRING Name;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ALIAS_ADM_COMMENT_INFORMATION
-    {
-        public UNICODE_STRING AdminComment;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SAMPR_GROUP_GENERAL_INFORMATION
-    {
-        public UNICODE_STRING Name;
-        public UInt32 Attributes;
-        public UInt32 MemberCount;
-        public UNICODE_STRING AdminComment;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SAMPR_GROUP_NAME_INFORMATION
-    {
-        public UNICODE_STRING Name;
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct SAM_RID_ENUMERATION
-    {
-        public UInt32 RelativeId;
-        public UNICODE_STRING Name;
-    }
-    #endregion Structures
-
-    /// <summary>
-    /// Provides methods for invoking functions in the Windows
-    /// Security Accounts Manager (SAM) API.
-    /// </summary>
-    internal static class SamApi
-    {
-        #region Constants
-        // Account enumeration filters, may be combined by bitwise OR
-        internal const UInt32 SAM_USER_ENUMERATION_FILTER_LOCAL     = 0x00000001;
-        internal const UInt32 SAM_USER_ENUMERATION_FILTER_INTERNET  = 0x00000002;
-        internal const UInt32 SAM_SERVER_LOOKUP_DOMAIN              = 0x0020;
-
-        //
-        // Bits to be used in UserAllInformation's WhichFields field (to indicate
-        // which items were queried or set).
-        //
-        internal const UInt32 USER_ALL_USERNAME             = 0x00000001;
-        internal const UInt32 USER_ALL_FULLNAME             = 0x00000002;
-        internal const UInt32 USER_ALL_USERID               = 0x00000004;
-        internal const UInt32 USER_ALL_PRIMARYGROUPID       = 0x00000008;
-        internal const UInt32 USER_ALL_ADMINCOMMENT         = 0x00000010;
-        internal const UInt32 USER_ALL_USERCOMMENT          = 0x00000020;
-        internal const UInt32 USER_ALL_HOMEDIRECTORY        = 0x00000040;
-        internal const UInt32 USER_ALL_HOMEDIRECTORYDRIVE   = 0x00000080;
-        internal const UInt32 USER_ALL_SCRIPTPATH           = 0x00000100;
-        internal const UInt32 USER_ALL_PROFILEPATH          = 0x00000200;
-        internal const UInt32 USER_ALL_WORKSTATIONS         = 0x00000400;
-        internal const UInt32 USER_ALL_LASTLOGON            = 0x00000800;
-        internal const UInt32 USER_ALL_LASTLOGOFF           = 0x00001000;
-        internal const UInt32 USER_ALL_LOGONHOURS           = 0x00002000;
-        internal const UInt32 USER_ALL_BADPASSWORDCOUNT     = 0x00004000;
-        internal const UInt32 USER_ALL_LOGONCOUNT           = 0x00008000;
-        internal const UInt32 USER_ALL_PASSWORDCANCHANGE    = 0x00010000;
-        internal const UInt32 USER_ALL_PASSWORDMUSTCHANGE   = 0x00020000;
-        internal const UInt32 USER_ALL_PASSWORDLASTSET      = 0x00040000;
-        internal const UInt32 USER_ALL_ACCOUNTEXPIRES       = 0x00080000;
-        internal const UInt32 USER_ALL_USERACCOUNTCONTROL   = 0x00100000;
-        internal const UInt32 USER_ALL_PARAMETERS           = 0x00200000;   // ntsubauth
-        internal const UInt32 USER_ALL_COUNTRYCODE          = 0x00400000;
-        internal const UInt32 USER_ALL_CODEPAGE             = 0x00800000;
-        internal const UInt32 USER_ALL_NTPASSWORDPRESENT    = 0x01000000;   // field AND boolean
-        internal const UInt32 USER_ALL_LMPASSWORDPRESENT    = 0x02000000;   // field AND boolean
-        internal const UInt32 USER_ALL_PRIVATEDATA          = 0x04000000;   // field AND boolean
-        internal const UInt32 USER_ALL_PASSWORDEXPIRED      = 0x08000000;
-        internal const UInt32 USER_ALL_SECURITYDESCRIPTOR   = 0x10000000;
-        internal const UInt32 USER_ALL_OWFPASSWORD          = 0x20000000;   // boolean
-
-        internal const UInt32 USER_ALL_UNDEFINED_MASK       = 0xC0000000;
-
-        //
-        // Bit masks for the UserAccountControl member of the USER_ALL_INFORMATION structure
-        //
-        internal const UInt32 USER_ACCOUNT_DISABLED                       = 0x00000001;
-        internal const UInt32 USER_HOME_DIRECTORY_REQUIRED                = 0x00000002;
-        internal const UInt32 USER_PASSWORD_NOT_REQUIRED                  = 0x00000004;
-        internal const UInt32 USER_TEMP_DUPLICATE_ACCOUNT                 = 0x00000008;
-        internal const UInt32 USER_NORMAL_ACCOUNT                         = 0x00000010;
-        internal const UInt32 USER_MNS_LOGON_ACCOUNT                      = 0x00000020;
-        internal const UInt32 USER_INTERDOMAIN_TRUST_ACCOUNT              = 0x00000040;
-        internal const UInt32 USER_WORKSTATION_TRUST_ACCOUNT              = 0x00000080;
-        internal const UInt32 USER_SERVER_TRUST_ACCOUNT                   = 0x00000100;
-        internal const UInt32 USER_DONT_EXPIRE_PASSWORD                   = 0x00000200;
-        internal const UInt32 USER_ACCOUNT_AUTO_LOCKED                    = 0x00000400;
-        internal const UInt32 USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED        = 0x00000800;
-        internal const UInt32 USER_SMARTCARD_REQUIRED                     = 0x00001000;
-        internal const UInt32 USER_TRUSTED_FOR_DELEGATION                 = 0x00002000;
-        internal const UInt32 USER_NOT_DELEGATED                          = 0x00004000;
-        internal const UInt32 USER_USE_DES_KEY_ONLY                       = 0x00008000;
-        internal const UInt32 USER_DONT_REQUIRE_PREAUTH                   = 0x00010000;
-        internal const UInt32 USER_PASSWORD_EXPIRED                       = 0x00020000;
-        internal const UInt32 USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = 0x00040000;
-        internal const UInt32 USER_NO_AUTH_DATA_REQUIRED                  = 0x00080000;
-        internal const UInt32 USER_PARTIAL_SECRETS_ACCOUNT                = 0x00100000;
-        internal const UInt32 USER_USE_AES_KEYS                           = 0x00200000;
-
-        //
-        // Access rights for user object
-        //
-        internal const UInt16 USER_CHANGE_PASSWORD  = 0x0040;
-        #endregion Constants
-
-        #region Sam Functions
-        [DllImport("samlib.dll")]
-        public static extern UInt32 SamConnect(ref UNICODE_STRING serverName,
-                                               out IntPtr serverHandle,
-                                               UInt32 desiredAccess,
-                                               ref OBJECT_ATTRIBUTES objectAttributes);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamRidToSid(IntPtr objectHandle, UInt32 rid, out IntPtr sid);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamCloseHandle(IntPtr serverHandle);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamFreeMemory(IntPtr buffer);
-
-        #region Domain Functions
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamOpenDomain(IntPtr serverHandle,
-                                                    UInt32 desiredAccess,
-                                                    IntPtr domainId,
-                                                    out IntPtr domainHandle);
-        #endregion Domain Functions
-
-        #region Alias Functions
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamEnumerateAliasesInDomain(IntPtr domainHandle,
-                                                                  ref UInt32 enumerationContext,
-                                                                  out IntPtr buffer,
-                                                                  UInt32 preferredMaximumLength,
-                                                                  out UInt32 countReturned);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamCreateAliasInDomain(IntPtr domainHandle,
-                                                             IntPtr accountName,        // PUNICODE_STRING
-                                                             UInt32 desiredAccess,
-                                                             out IntPtr aliasHandle,
-                                                             out UInt32 relativeId);    // PULONG
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamOpenAlias(IntPtr domainHandle,
-                                                   UInt32 desiredAccess,
-                                                   UInt32 aliasId,
-                                                   out IntPtr aliasHandle);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamQueryInformationAlias(IntPtr aliasHandle,
-                                                               ALIAS_INFORMATION_CLASS aliasInformationClass,
-                                                               out IntPtr buffer);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamSetInformationAlias(IntPtr aliasHandle,
-                                                             ALIAS_INFORMATION_CLASS aliasInformationClass,
-                                                             IntPtr buffer);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamDeleteAlias(IntPtr aliasHandle);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamAddMemberToAlias(IntPtr aliasHandle,
-                                                          byte[] memberId);     // PSID
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamRemoveMemberFromAlias(IntPtr aliasHandle,
-                                                               byte[] memberId);    // PSID
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamGetMembersInAlias(IntPtr aliasHandle,
-                                                           out IntPtr memberIds,    // PSID **
-                                                           out UInt32 memberCount);
-        #endregion Alias Functions
-
-        #region User Functions
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamOpenUser(IntPtr domainHandle,
-                                                  UInt32 desiredAccess,
-                                                  UInt32 userID,
-                                                  out IntPtr userHandle);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamDeleteUser(IntPtr aliasHandle);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamEnumerateUsersInDomain(IntPtr domainHandle,
-                                                                ref UInt32 enumerationContext,
-                                                                UInt32 userAccountControl,
-                                                                out IntPtr buffer,
-                                                                UInt32 preferredMaximumLength,
-                                                                out UInt32 countReturned);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamCreateUser2InDomain(IntPtr domainHandle,
-                                                             ref UNICODE_STRING accountName,
-                                                             Int32 accountType,
-                                                             UInt32 desiredAccess,
-                                                             out IntPtr userHandle,
-                                                             out UInt32 grantedAccess,
-                                                             out UInt32 relativeId);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamQueryInformationUser(IntPtr userHandle,
-                                                              USER_INFORMATION_CLASS userInformationClass,
-                                                              out IntPtr buffer);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamSetInformationUser(IntPtr userHandle,
-                                                            USER_INFORMATION_CLASS userInformationClass,
-                                                            IntPtr buffer);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamQuerySecurityObject(IntPtr objectHandle,
-                                                             UInt32 securityInformation,
-                                                             out IntPtr securityDescriptor);
-
-        [DllImport("samlib.dll")]
-        internal static extern UInt32 SamSetSecurityObject(IntPtr objectHandle,
-                                                           UInt32 SecurityInformation,
-                                                           IntPtr SecurityDescriptor);
-        #endregion User Functions
-        #endregion Sam Functions
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/StringUtil.cs b/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/StringUtil.cs
deleted file mode 100644
index 3534b34cc49..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/LocalAccounts/StringUtil.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Globalization;
-using System.Management.Automation.SecurityAccountsManager.Native;
-
-namespace System.Management.Automation.SecurityAccountsManager
-{
-    /// <summary>
-    /// Contains utility functions for formatting localizable strings.
-    /// </summary>
-    internal class StringUtil
-    {
-        /// <summary>
-        /// Private constructor to precent auto-generation of a default constructor with greater accessability.
-        /// </summary>
-        private StringUtil()
-        {
-        }
-
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal static string Format(string str)
-        {
-            return string.Format(CultureInfo.CurrentCulture, str);
-        }
-
-        internal static string Format(string fmt, string p0)
-        {
-            return string.Format(CultureInfo.CurrentCulture, fmt, p0);
-        }
-
-        internal static string Format(string fmt, string p0, string p1)
-        {
-            return string.Format(CultureInfo.CurrentCulture, fmt, p0, p1);
-        }
-
-        internal static string Format(string fmt, uint p0)
-        {
-            return string.Format(CultureInfo.CurrentCulture, fmt, p0);
-        }
-
-        internal static string Format(string fmt, int p0)
-        {
-            return string.Format(CultureInfo.CurrentCulture, fmt, p0);
-        }
-
-        internal static string FormatMessage(uint messageId, string[] args)
-        {
-            var message = new System.Text.StringBuilder(256);
-            UInt32 flags = Win32.FORMAT_MESSAGE_FROM_SYSTEM;
-
-            if (args == null)
-                flags |= Win32.FORMAT_MESSAGE_IGNORE_INSERTS;
-            else
-                flags |= Win32.FORMAT_MESSAGE_ARGUMENT_ARRAY;
-
-            var length = Win32.FormatMessage(flags, IntPtr.Zero, messageId, 0, message, 256, args);
-
-            if (length > 0)
-                return message.ToString();
-
-            return null;
-        }
-
-        internal static string GetSystemMessage(uint messageId)
-        {
-            return FormatMessage(messageId, null);
-        }
-    }
-}
diff --git a/src/Microsoft.PowerShell.LocalAccounts/Microsoft.PowerShell.LocalAccounts.csproj b/src/Microsoft.PowerShell.LocalAccounts/Microsoft.PowerShell.LocalAccounts.csproj
deleted file mode 100644
index a85b06d4f90..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/Microsoft.PowerShell.LocalAccounts.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <Import Project="..\..\PowerShell.Common.props"/>
-
-  <PropertyGroup>
-    <Description>PowerShell's Microsoft.PowerShell.LocalAccounts project</Description>
-    <AssemblyName>Microsoft.PowerShell.LocalAccounts</AssemblyName>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Microsoft.PowerShell.LocalAccounts/resources/Microsoft.PowerShell.LocalAccounts.Strings.resx b/src/Microsoft.PowerShell.LocalAccounts/resources/Microsoft.PowerShell.LocalAccounts.Strings.resx
deleted file mode 100644
index ff1c4a17427..00000000000
--- a/src/Microsoft.PowerShell.LocalAccounts/resources/Microsoft.PowerShell.LocalAccounts.Strings.resx
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="AccessDenied" xml:space="preserve">
-    <value>Access denied.</value>
-  </data>
-  <data name="AccountNotFound" xml:space="preserve">
-    <value>Account {0} was not found.</value>
-  </data>
-  <data name="ActionAddGroupMember" xml:space="preserve">
-    <value>Add member {0}</value>
-  </data>
-  <data name="ActionDisableUser" xml:space="preserve">
-    <value>Disable local user</value>
-  </data>
-  <data name="ActionEnableUser" xml:space="preserve">
-    <value>Enable local user</value>
-  </data>
-  <data name="ActionNewGroup" xml:space="preserve">
-    <value>Create new local group</value>
-  </data>
-  <data name="ActionNewUser" xml:space="preserve">
-    <value>Create new local user</value>
-  </data>
-  <data name="ActionRemoveGroup" xml:space="preserve">
-    <value>Remove local group</value>
-  </data>
-  <data name="ActionRemoveGroupMember" xml:space="preserve">
-    <value>Remove member {0}</value>
-  </data>
-  <data name="ActionRemoveUser" xml:space="preserve">
-    <value>Remove local user</value>
-  </data>
-  <data name="ActionRenameGroup" xml:space="preserve">
-    <value>Rename local group to {0}</value>
-  </data>
-  <data name="ActionRenameUser" xml:space="preserve">
-    <value>Rename local user to {0}</value>
-  </data>
-  <data name="ActionSetGroup" xml:space="preserve">
-    <value>Modify local group</value>
-  </data>
-  <data name="ActionSetUser" xml:space="preserve">
-    <value>Modify local user</value>
-  </data>
-  <data name="GroupExists" xml:space="preserve">
-    <value>Group {0} already exists.</value>
-  </data>
-  <data name="GroupHasMembers" xml:space="preserve">
-    <value>The group {0} still has members.</value>
-  </data>
-  <data name="GroupNotFound" xml:space="preserve">
-    <value>Group {0} was not found.</value>
-  </data>
-  <data name="InvalidForGroup" xml:space="preserve">
-    <value>The operation is not allowed for group {0}.</value>
-  </data>
-  <data name="InvalidForUser" xml:space="preserve">
-    <value>The operation is not allowed for user {0}.</value>
-  </data>
-  <data name="InvalidName" xml:space="preserve">
-    <value>The name {0} is invalid.</value>
-  </data>
-  <data name="InvalidParameterPair" xml:space="preserve">
-    <value>Parameter {0} and parameter {1} may not be used together.</value>
-  </data>
-  <data name="InvalidPassword" xml:space="preserve">
-    <value>Invalid password.</value>
-  </data>
-  <data name="LastAdmin" xml:space="preserve">
-    <value>Cannot remove the last Administrator</value>
-  </data>
-  <data name="MemberExists" xml:space="preserve">
-    <value>{0} is already a member of group {1}.</value>
-  </data>
-  <data name="MemberNotFound" xml:space="preserve">
-    <value>Member {0} was not found in group {1}.</value>
-  </data>
-  <data name="MembersPrimaryGroup" xml:space="preserve">
-    <value>User {0} may not be removed from its primary group.</value>
-  </data>
-  <data name="NameInUse" xml:space="preserve">
-    <value>The name {0} is already in use.</value>
-  </data>
-  <data name="ObjectClassGroup" xml:space="preserve">
-    <value>Group</value>
-  </data>
-  <data name="ObjectClassOther" xml:space="preserve">
-    <value>Other</value>
-  </data>
-  <data name="ObjectClassUser" xml:space="preserve">
-    <value>User</value>
-  </data>
-  <data name="PasswordRestriction" xml:space="preserve">
-    <value>The password cannot be set because a password restriction is in place.</value>
-  </data>
-  <data name="PrincipalNotFound" xml:space="preserve">
-    <value>Principal {0} was not found.</value>
-  </data>
-  <data name="RidToSidFailed" xml:space="preserve">
-    <value>RID {0} was not found.</value>
-  </data>
-  <data name="UnspecifiedError" xml:space="preserve">
-    <value>An unspecified error occurred.</value>
-  </data>
-  <data name="UnspecifiedErrorNtStatus" xml:space="preserve">
-    <value>An unspecified error occurred: status = {0}</value>
-  </data>
-  <data name="UnspecifiedErrorWin32Error" xml:space="preserve">
-    <value>An unspecified error occurred: error code = {0}</value>
-  </data>
-  <data name="UserExists" xml:space="preserve">
-    <value>User {0} already exists.</value>
-  </data>
-  <data name="UserNotFound" xml:space="preserve">
-    <value>User {0} was not found.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj
index b6d7fa7f936..f92790f15cc 100644
--- a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj
+++ b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj
@@ -15,22 +15,41 @@
   </ItemGroup>
 
   <ItemGroup>
+    <!-- This section is to force the version of non-direct dependencies -->
+    <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="Microsoft.Extensions.ObjectPool" Version="11.0.0-preview.6.26359.118" />
     <!-- the following package(s) are from https://github.com/dotnet/fxdac -->
-    <PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
+    <PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
     <!-- the following package(s) are from https://github.com/dotnet/corefx -->
-    <PackageReference Include="System.IO.Packaging" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Text.Encodings.Web" Version="6.0.0-preview.2.21154.6" />
+    <PackageReference Include="System.IO.Packaging" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="11.0.0-preview.6.26359.118" />
     <!-- the following package(s) are from https://github.com/dotnet/wcf -->
-    <PackageReference Include="System.ServiceModel.Duplex" Version="4.8.1" />
-    <PackageReference Include="System.ServiceModel.Http" Version="4.8.1" />
-    <PackageReference Include="System.ServiceModel.NetTcp" Version="4.8.1" />
-    <PackageReference Include="System.ServiceModel.Primitives" Version="4.8.1" />
-    <PackageReference Include="System.ServiceModel.Security" Version="4.8.1" />
-    <PackageReference Include="System.Private.ServiceModel" Version="4.8.1" />
+    <PackageReference Include="System.ServiceModel.Http" Version="10.0.652802" />
+    <PackageReference Include="System.ServiceModel.NetTcp" Version="10.0.652802" />
+    <PackageReference Include="System.ServiceModel.Primitives" Version="10.0.652802" />
     <!-- the source could not be found for the following package(s) -->
-    <PackageReference Include="Microsoft.NETCore.Windows.ApiSets" Version="1.0.1" />
-    <PackageReference Include="Microsoft.Windows.Compatibility" Version="6.0.0-preview.2.21154.6" />
+    <PackageReference Include="Microsoft.Windows.Compatibility" Version="11.0.0-preview.6.26359.118" />
   </ItemGroup>
 
-</Project>
+  <!--
+    This target is invoked explicitly by Start-TypeGen in build.psm1 to collect the list of
+    reference assembly paths needed by TypeCatalogGen. It is not run during a normal build.
+
+    To find the available properties of '_ReferencesFromRAR' when switching to a new dotnet sdk:
+      1. Create a dummy project using the new dotnet sdk.
+      2. Build the dummy project with:
+         dotnet msbuild ./dummy.csproj /t:ResolveAssemblyReferencesDesignTime /fileLogger /noconsolelogger /v:diag
+      3. Search '_ReferencesFromRAR' in the produced 'msbuild.log' file.
+  -->
+  <Target Name="_GetDependencies" DependsOnTargets="ResolveAssemblyReferencesDesignTime">
+    <ItemGroup>
+      <!--
+        Excludes 'Microsoft.Management.Infrastructure' from the type catalog reference list,
+        as it is provided separately at runtime and must not be included in the generated catalog.
+      -->
+      <_RefAssemblyPath Include="%(_ReferencesFromRAR.OriginalItemSpec)%3B" Condition=" '%(_ReferencesFromRAR.NuGetPackageId)' != 'Microsoft.Management.Infrastructure' " />
+    </ItemGroup>
+    <WriteLinesToFile File="$(_DependencyFile)" Lines="@(_RefAssemblyPath)" Overwrite="true" />
+  </Target>
+
+</Project>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.ScheduledJob/AssemblyInfo.cs b/src/Microsoft.PowerShell.ScheduledJob/AssemblyInfo.cs
deleted file mode 100644
index 3e2e4ff3268..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/AssemblyInfo.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Reflection;
-using System.Resources;
-
-[assembly:AssemblyFileVersionAttribute("3.0.0.0")]
-[assembly:AssemblyVersion("3.0.0.0")]
-
-[assembly:AssemblyCulture("")]
-[assembly:NeutralResourcesLanguage("en-US")]
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJob.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJob.cs
deleted file mode 100644
index 4c7dcb146a9..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJob.cs
+++ /dev/null
@@ -1,1285 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.IO;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Runspaces;
-using System.Runtime.Serialization;
-using System.Security.Permissions;
-using System.Text;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This is a Job2 derived class that contains a DefinitionJob for
-    /// running job definition based jobs but can also save and load job
-    /// results data from file.  This class is used to load job result
-    /// data from previously run jobs so that a user can view results of
-    /// scheduled job runs.  This class also contains the definition of
-    /// the scheduled job and so can run an instance of the scheduled
-    /// job and optionally save results to file.
-    /// </summary>
-    [Serializable]
-    public sealed class ScheduledJob : Job2, ISerializable
-    {
-        #region Private Members
-
-        private ScheduledJobDefinition _jobDefinition;
-        private Runspace _runspace;
-        private System.Management.Automation.PowerShell _powerShell;
-        private Job _job = null;
-        private bool _asyncJobStop;
-        private bool _allowSetShouldExit;
-        private PSHost _host;
-
-        private const string AllowHostSetShouldExit = "AllowSetShouldExitFromRemote";
-
-        private StatusInfo _statusInfo;
-
-        #endregion
-
-        #region Public Properties
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        public ScheduledJobDefinition Definition
-        {
-            get { return _jobDefinition; }
-
-            internal set { _jobDefinition = value; }
-        }
-
-        /// <summary>
-        /// Location of job being run.
-        /// </summary>
-        public override string Location
-        {
-            get
-            {
-                return Status.Location;
-            }
-        }
-
-        /// <summary>
-        /// Status Message associated with the Job.
-        /// </summary>
-        public override string StatusMessage
-        {
-            get
-            {
-                return Status.StatusMessage;
-            }
-        }
-
-        /// <summary>
-        /// Indicates whether more data is available from Job.
-        /// </summary>
-        public override bool HasMoreData
-        {
-            get
-            {
-                return (_job != null) ?
-                    _job.HasMoreData
-                    :
-                    (Output.Count > 0 ||
-                     Error.Count > 0 ||
-                     Warning.Count > 0 ||
-                     Verbose.Count > 0 ||
-                     Progress.Count > 0 ||
-                     Debug.Count > 0 ||
-                     Information.Count > 0
-                     );
-            }
-        }
-
-        /// <summary>
-        /// Job command string.
-        /// </summary>
-        public new string Command
-        {
-            get
-            {
-                return Status.Command;
-            }
-        }
-
-        /// <summary>
-        /// Internal property indicating whether a SetShouldExit is honored
-        /// while running the scheduled job script.
-        /// </summary>
-        internal bool AllowSetShouldExit
-        {
-            get { return _allowSetShouldExit; }
-
-            set { _allowSetShouldExit = value; }
-        }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="command">Job command string for display.</param>
-        /// <param name="name">Name of job.</param>
-        /// <param name="jobDefinition">ScheduledJobDefinition defining job to run.</param>
-        public ScheduledJob(
-            string command,
-            string name,
-            ScheduledJobDefinition jobDefinition) :
-            base(command, name)
-        {
-            if (command == null)
-            {
-                throw new PSArgumentNullException("command");
-            }
-
-            if (name == null)
-            {
-                throw new PSArgumentNullException("name");
-            }
-
-            if (jobDefinition == null)
-            {
-                throw new PSArgumentNullException("jobDefinition");
-            }
-
-            _jobDefinition = jobDefinition;
-
-            PSJobTypeName = ScheduledJobSourceAdapter.AdapterTypeName;
-        }
-
-        #endregion
-
-        #region Public Overrides
-
-        /// <summary>
-        /// Starts a job as defined by the contained ScheduledJobDefinition object.
-        /// </summary>
-        public override void StartJob()
-        {
-            lock (SyncRoot)
-            {
-                if (_job != null && !IsFinishedState(_job.JobStateInfo.State))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.JobAlreadyRunning, _jobDefinition.Name);
-                    throw new PSInvalidOperationException(msg);
-                }
-
-                _statusInfo = null;
-                _asyncJobStop = false;
-                PSBeginTime = DateTime.Now;
-
-                if (_powerShell == null)
-                {
-                    InitialSessionState iss = InitialSessionState.CreateDefault2();
-                    iss.Commands.Clear();
-                    iss.Formats.Clear();
-                    iss.Commands.Add(
-                        new SessionStateCmdletEntry("Start-Job", typeof(Microsoft.PowerShell.Commands.StartJobCommand), null));
-
-                    // Get the default host from the default runspace.
-                    _host = GetDefaultHost();
-                    _runspace = RunspaceFactory.CreateRunspace(_host, iss);
-                    _runspace.Open();
-                    _powerShell = System.Management.Automation.PowerShell.Create();
-                    _powerShell.Runspace = _runspace;
-
-                    // Indicate SetShouldExit to host.
-                    AddSetShouldExitToHost();
-                }
-                else
-                {
-                    _powerShell.Commands.Clear();
-                }
-
-                _job = StartJobCommand(_powerShell);
-
-                _job.StateChanged += new EventHandler<JobStateEventArgs>(HandleJobStateChanged);
-                SetJobState(_job.JobStateInfo.State);
-
-                // Add all child jobs to this object's list so that
-                // the user and Receive-Job can retrieve results.
-                foreach (Job childJob in _job.ChildJobs)
-                {
-                    this.ChildJobs.Add(childJob);
-                }
-
-                // Add this job to the local repository.
-                ScheduledJobSourceAdapter.AddToRepository(this);
-            }
-        }
-
-        /// <summary>
-        /// Start job asynchronously.
-        /// </summary>
-        public override void StartJobAsync()
-        {
-            // StartJob();
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// Stop the job.
-        /// </summary>
-        public override void StopJob()
-        {
-            Job job;
-            JobState state;
-            lock (SyncRoot)
-            {
-                job = _job;
-                state = Status.State;
-                _asyncJobStop = false;
-            }
-
-            if (IsFinishedState(state))
-            {
-                return;
-            }
-
-            if (job == null)
-            {
-                // Set job state to failed so that it can be removed from the
-                // cache using Remove-Job.
-                SetJobState(JobState.Failed);
-            }
-            else
-            {
-                job.StopJob();
-            }
-        }
-
-        /// <summary>
-        /// Stop the job asynchronously.
-        /// </summary>
-        public override void StopJobAsync()
-        {
-            Job job;
-            JobState state;
-            lock (SyncRoot)
-            {
-                job = _job;
-                state = Status.State;
-                _asyncJobStop = true;
-            }
-
-            if (IsFinishedState(state))
-            {
-                return;
-            }
-
-            if (job == null)
-            {
-                // Set job state to failed so that it can be removed from the
-                // cache using Remove-Job.
-                SetJobState(JobState.Failed);
-                HandleJobStateChanged(this,
-                    new JobStateEventArgs(
-                        new JobStateInfo(JobState.Failed)));
-            }
-            else
-            {
-                job.StopJob();
-            }
-        }
-
-        /// <summary>
-        /// SuspendJob.
-        /// </summary>
-        public override void SuspendJob()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// SuspendJobAsync.
-        /// </summary>
-        public override void SuspendJobAsync()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// ResumeJob.
-        /// </summary>
-        public override void ResumeJob()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// ResumeJobAsync.
-        /// </summary>
-        public override void ResumeJobAsync()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// UnblockJob.
-        /// </summary>
-        public override void UnblockJob()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// UnblockJobAsync.
-        /// </summary>
-        public override void UnblockJobAsync()
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// StopJob.
-        /// </summary>
-        /// <param name="force"></param>
-        /// <param name="reason"></param>
-        public override void StopJob(bool force, string reason)
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// StopJobAsync.
-        /// </summary>
-        /// <param name="force"></param>
-        /// <param name="reason"></param>
-        public override void StopJobAsync(bool force, string reason)
-        {
-            throw new PSNotSupportedException();
-        }
-        /// <summary>
-        /// SuspendJob.
-        /// </summary>
-        /// <param name="force"></param>
-        /// <param name="reason"></param>
-        public override void SuspendJob(bool force, string reason)
-        {
-            throw new PSNotSupportedException();
-        }
-
-        /// <summary>
-        /// SuspendJobAsync.
-        /// </summary>
-        /// <param name="force"></param>
-        /// <param name="reason"></param>
-        public override void SuspendJobAsync(bool force, string reason)
-        {
-            throw new PSNotSupportedException();
-        }
-
-        #endregion
-
-        #region Implementation of ISerializable
-
-        /// <summary>
-        /// Deserialize constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        private ScheduledJob(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            DeserializeStatusInfo(info);
-            DeserializeResultsInfo(info);
-            PSJobTypeName = ScheduledJobSourceAdapter.AdapterTypeName;
-        }
-
-        /// <summary>
-        /// Serialize method.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        public void GetObjectData(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentException("info");
-            }
-
-            SerializeStatusInfo(info);
-            SerializeResultsInfo(info);
-        }
-
-        private void SerializeStatusInfo(SerializationInfo info)
-        {
-            StatusInfo statusInfo = new StatusInfo(
-                InstanceId,
-                Name,
-                Location,
-                Command,
-                StatusMessage,
-                (_job != null) ? _job.JobStateInfo.State : JobStateInfo.State,
-                HasMoreData,
-                PSBeginTime,
-                PSEndTime,
-                _jobDefinition);
-
-            info.AddValue("StatusInfo", statusInfo);
-        }
-
-        private void SerializeResultsInfo(SerializationInfo info)
-        {
-            // All other job information is in the child jobs.
-            Collection<PSObject> output = new Collection<PSObject>();
-            Collection<ErrorRecord> error = new Collection<ErrorRecord>();
-            Collection<WarningRecord> warning = new Collection<WarningRecord>();
-            Collection<VerboseRecord> verbose = new Collection<VerboseRecord>();
-            Collection<ProgressRecord> progress = new Collection<ProgressRecord>();
-            Collection<DebugRecord> debug = new Collection<DebugRecord>();
-            Collection<InformationRecord> information = new Collection<InformationRecord>();
-
-            if (_job != null)
-            {
-                // Collect data from "live" job.
-
-                if (JobStateInfo.Reason != null)
-                {
-                    error.Add(new ErrorRecord(JobStateInfo.Reason, "ScheduledJobFailedState", ErrorCategory.InvalidResult, null));
-                }
-
-                foreach (var item in _job.Error)
-                {
-                    error.Add(item);
-                }
-
-                foreach (Job childJob in ChildJobs)
-                {
-                    if (childJob.JobStateInfo.Reason != null)
-                    {
-                        error.Add(new ErrorRecord(childJob.JobStateInfo.Reason, "ScheduledJobFailedState", ErrorCategory.InvalidResult, null));
-                    }
-
-                    foreach (var item in childJob.Output)
-                    {
-                        output.Add(item);
-                    }
-
-                    foreach (var item in childJob.Error)
-                    {
-                        error.Add(item);
-                    }
-
-                    foreach (var item in childJob.Warning)
-                    {
-                        warning.Add(item);
-                    }
-
-                    foreach (var item in childJob.Verbose)
-                    {
-                        verbose.Add(item);
-                    }
-
-                    foreach (var item in childJob.Progress)
-                    {
-                        progress.Add(item);
-                    }
-
-                    foreach (var item in childJob.Debug)
-                    {
-                        debug.Add(item);
-                    }
-
-                    foreach (var item in childJob.Information)
-                    {
-                        information.Add(item);
-                    }
-                }
-            }
-            else
-            {
-                // Collect data from object collections.
-
-                foreach (var item in Output)
-                {
-                    // Wrap the base object in a new PSObject.  This is necessary because the
-                    // source deserialized PSObject doesn't serialize again correctly and breaks
-                    // PS F&O.  Not sure if this is a PSObject serialization bug or not.
-                    output.Add(new PSObject(item.BaseObject));
-                }
-
-                foreach (var item in Error)
-                {
-                    error.Add(item);
-                }
-
-                foreach (var item in Warning)
-                {
-                    warning.Add(item);
-                }
-
-                foreach (var item in Verbose)
-                {
-                    verbose.Add(item);
-                }
-
-                foreach (var item in Progress)
-                {
-                    progress.Add(item);
-                }
-
-                foreach (var item in Debug)
-                {
-                    debug.Add(item);
-                }
-
-                foreach (var item in Information)
-                {
-                    information.Add(item);
-                }
-            }
-
-            ResultsInfo resultsInfo = new ResultsInfo(
-                output, error, warning, verbose, progress, debug, information);
-
-           info.AddValue("ResultsInfo", resultsInfo);
-        }
-
-        private void DeserializeStatusInfo(SerializationInfo info)
-        {
-            StatusInfo statusInfo = (StatusInfo)info.GetValue("StatusInfo", typeof(StatusInfo));
-
-            Name = statusInfo.Name;
-            PSBeginTime = statusInfo.StartTime;
-            PSEndTime = statusInfo.StopTime;
-            _jobDefinition = statusInfo.Definition;
-            SetJobState(statusInfo.State, null);
-
-            lock (SyncRoot)
-            {
-                _statusInfo = statusInfo;
-            }
-        }
-
-        private void DeserializeResultsInfo(SerializationInfo info)
-        {
-            ResultsInfo resultsInfo = (ResultsInfo)info.GetValue("ResultsInfo", typeof(ResultsInfo));
-
-            // Output
-            CopyOutput(resultsInfo.Output);
-
-            // Error
-            CopyError(resultsInfo.Error);
-
-            // Warning
-            CopyWarning(resultsInfo.Warning);
-
-            // Verbose
-            CopyVerbose(resultsInfo.Verbose);
-
-            // Progress
-            CopyProgress(resultsInfo.Progress);
-
-            // Debug
-            CopyDebug(resultsInfo.Debug);
-
-            // Information
-            CopyInformation(resultsInfo.Information);
-        }
-
-        #endregion
-
-        #region Internal Methods
-
-        /// <summary>
-        /// Method to update a ScheduledJob based on new state and
-        /// result data from a provided Job.
-        /// </summary>
-        /// <param name="fromJob">ScheduledJob to update from.</param>
-        internal void Update(ScheduledJob fromJob)
-        {
-            // We do not update "live" jobs.
-            if (_job != null || fromJob == null)
-            {
-                return;
-            }
-
-            //
-            // Update status.
-            //
-            PSEndTime = fromJob.PSEndTime;
-            JobState state = fromJob.JobStateInfo.State;
-            if (Status.State != state)
-            {
-                SetJobState(state, null);
-            }
-
-            lock (SyncRoot)
-            {
-                _statusInfo = new StatusInfo(
-                    fromJob.InstanceId,
-                    fromJob.Name,
-                    fromJob.Location,
-                    fromJob.Command,
-                    fromJob.StatusMessage,
-                    state,
-                    fromJob.HasMoreData,
-                    fromJob.PSBeginTime,
-                    fromJob.PSEndTime,
-                    fromJob._jobDefinition);
-            }
-
-            //
-            // Update results.
-            //
-            CopyOutput(fromJob.Output);
-            CopyError(fromJob.Error);
-            CopyWarning(fromJob.Warning);
-            CopyVerbose(fromJob.Verbose);
-            CopyProgress(fromJob.Progress);
-            CopyDebug(fromJob.Debug);
-            CopyInformation(fromJob.Information);
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private System.Management.Automation.Host.PSHost GetDefaultHost()
-        {
-            System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace).AddScript("$host");
-            Collection<System.Management.Automation.Host.PSHost> hosts = ps.Invoke<System.Management.Automation.Host.PSHost>();
-            if (hosts == null || hosts.Count == 0)
-            {
-                System.Diagnostics.Debug.Assert(false, "Current runspace should always return default host.");
-                return null;
-            }
-
-            return hosts[0];
-        }
-
-        private Job StartJobCommand(System.Management.Automation.PowerShell powerShell)
-        {
-            Job job = null;
-
-            // Use PowerShell Start-Job cmdlet to run job.
-            powerShell.AddCommand("Start-Job");
-
-            powerShell.AddParameter("Name", _jobDefinition.Name);
-
-            // Add job parameters from the JobInvocationInfo object.
-            CommandParameterCollection parameters = _jobDefinition.InvocationInfo.Parameters[0];
-            foreach (CommandParameter parameter in parameters)
-            {
-                switch (parameter.Name)
-                {
-                    case "ScriptBlock":
-                        powerShell.AddParameter("ScriptBlock", parameter.Value as ScriptBlock);
-                        break;
-
-                    case "FilePath":
-                        powerShell.AddParameter("FilePath", parameter.Value as string);
-                        break;
-
-                    case "RunAs32":
-                        powerShell.AddParameter("RunAs32", (bool)parameter.Value);
-                        break;
-
-                    case "Authentication":
-                        powerShell.AddParameter("Authentication", (AuthenticationMechanism)parameter.Value);
-                        break;
-
-                    case "InitializationScript":
-                        powerShell.AddParameter("InitializationScript", parameter.Value as ScriptBlock);
-                        break;
-
-                    case "ArgumentList":
-                        powerShell.AddParameter("ArgumentList", parameter.Value as object[]);
-                        break;
-                }
-            }
-
-            // Start the job.
-            Collection<PSObject> rtn = powerShell.Invoke();
-            if (rtn != null && rtn.Count == 1)
-            {
-                job = rtn[0].BaseObject as Job;
-            }
-
-            return job;
-        }
-
-        private void HandleJobStateChanged(object sender, JobStateEventArgs e)
-        {
-            SetJobState(e.JobStateInfo.State);
-
-            if (IsFinishedState(e.JobStateInfo.State))
-            {
-                PSEndTime = DateTime.Now;
-
-                // Dispose the PowerShell and Runspace objects.
-                System.Management.Automation.PowerShell disposePowerShell = null;
-                Runspace disposeRunspace = null;
-                lock (SyncRoot)
-                {
-                    if (_job != null &&
-                        IsFinishedState(_job.JobStateInfo.State))
-                    {
-                        disposePowerShell = _powerShell;
-                        _powerShell = null;
-                        disposeRunspace = _runspace;
-                        _runspace = null;
-                    }
-                }
-
-                if (disposePowerShell != null)
-                {
-                    disposePowerShell.Dispose();
-                }
-
-                if (disposeRunspace != null)
-                {
-                    disposeRunspace.Dispose();
-                }
-
-                // Raise async job stopped event, if needed.
-                if (_asyncJobStop)
-                {
-                    _asyncJobStop = false;
-                    OnStopJobCompleted(new AsyncCompletedEventArgs(null, false, null));
-                }
-
-                // Remove AllowSetShouldExit from host.
-                RemoveSetShouldExitFromHost();
-            }
-        }
-
-        internal bool IsFinishedState(JobState state)
-        {
-            return (state == JobState.Completed || state == JobState.Failed || state == JobState.Stopped);
-        }
-
-        private StatusInfo Status
-        {
-            get
-            {
-                StatusInfo statusInfo;
-                lock (SyncRoot)
-                {
-                    if (_statusInfo != null)
-                    {
-                        // Pass back static status.
-                        statusInfo = _statusInfo;
-                    }
-                    else if (_job != null)
-                    {
-                        // Create current job status.
-                        statusInfo = new StatusInfo(
-                            _job.InstanceId,
-                            _job.Name,
-                            _job.Location,
-                            _job.Command,
-                            _job.StatusMessage,
-                            _job.JobStateInfo.State,
-                            _job.HasMoreData,
-                            PSBeginTime,
-                            PSEndTime,
-                            _jobDefinition);
-                    }
-                    else
-                    {
-                        // Create default static empty status.
-                        _statusInfo = new StatusInfo(
-                            Guid.Empty,
-                            string.Empty,
-                            string.Empty,
-                            string.Empty,
-                            string.Empty,
-                            JobState.NotStarted,
-                            false,
-                            PSBeginTime,
-                            PSEndTime,
-                            _jobDefinition);
-
-                        statusInfo = _statusInfo;
-                    }
-                }
-
-                return statusInfo;
-            }
-        }
-
-        private void CopyOutput(ICollection<PSObject> fromOutput)
-        {
-            PSDataCollection<PSObject> output = CopyResults<PSObject>(fromOutput);
-            if (output != null)
-            {
-                try
-                {
-                    Output = output;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyError(ICollection<ErrorRecord> fromError)
-        {
-            PSDataCollection<ErrorRecord> error = CopyResults<ErrorRecord>(fromError);
-            if (error != null)
-            {
-                try
-                {
-                    Error = error;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyWarning(ICollection<WarningRecord> fromWarning)
-        {
-            PSDataCollection<WarningRecord> warning = CopyResults<WarningRecord>(fromWarning);
-            if (warning != null)
-            {
-                try
-                {
-                    Warning = warning;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyVerbose(ICollection<VerboseRecord> fromVerbose)
-        {
-            PSDataCollection<VerboseRecord> verbose = CopyResults<VerboseRecord>(fromVerbose);
-            if (verbose != null)
-            {
-                try
-                {
-                    Verbose = verbose;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyProgress(ICollection<ProgressRecord> fromProgress)
-        {
-            PSDataCollection<ProgressRecord> progress = CopyResults<ProgressRecord>(fromProgress);
-            if (progress != null)
-            {
-                try
-                {
-                    Progress = progress;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyDebug(ICollection<DebugRecord> fromDebug)
-        {
-            PSDataCollection<DebugRecord> debug = CopyResults<DebugRecord>(fromDebug);
-            if (debug != null)
-            {
-                try
-                {
-                    Debug = debug;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private void CopyInformation(ICollection<InformationRecord> fromInformation)
-        {
-            PSDataCollection<InformationRecord> information = CopyResults<InformationRecord>(fromInformation);
-            if (information != null)
-            {
-                try
-                {
-                    Information = information;
-                }
-                catch (InvalidJobStateException) { }
-            }
-        }
-
-        private PSDataCollection<T> CopyResults<T>(ICollection<T> fromResults)
-        {
-            if (fromResults != null && fromResults.Count > 0)
-            {
-                PSDataCollection<T> returnResults = new PSDataCollection<T>();
-                foreach (var item in fromResults)
-                {
-                    returnResults.Add(item);
-                }
-
-                return returnResults;
-            }
-
-            return null;
-        }
-
-        private void AddSetShouldExitToHost()
-        {
-            if (!_allowSetShouldExit || _host == null) { return; }
-
-            PSObject hostPrivateData = _host.PrivateData as PSObject;
-            if (hostPrivateData != null)
-            {
-                // Adds or replaces.
-                hostPrivateData.Properties.Add(new PSNoteProperty(AllowHostSetShouldExit, true));
-            }
-        }
-
-        private void RemoveSetShouldExitFromHost()
-        {
-            if (!_allowSetShouldExit || _host == null) { return; }
-
-            PSObject hostPrivateData = _host.PrivateData as PSObject;
-            if (hostPrivateData != null)
-            {
-                // Removes if exists.
-                hostPrivateData.Properties.Remove(AllowHostSetShouldExit);
-            }
-        }
-
-        #endregion
-
-        #region Private ResultsInfo class
-
-        [Serializable]
-        private class ResultsInfo : ISerializable
-        {
-            // Private Members
-            private Collection<PSObject> _output;
-            private Collection<ErrorRecord> _error;
-            private Collection<WarningRecord> _warning;
-            private Collection<VerboseRecord> _verbose;
-            private Collection<ProgressRecord> _progress;
-            private Collection<DebugRecord> _debug;
-            private Collection<InformationRecord> _information;
-
-            // Properties
-            internal Collection<PSObject> Output
-            {
-                get { return _output; }
-            }
-
-            internal Collection<ErrorRecord> Error
-            {
-                get { return _error; }
-            }
-
-            internal Collection<WarningRecord> Warning
-            {
-                get { return _warning; }
-            }
-
-            internal Collection<VerboseRecord> Verbose
-            {
-                get { return _verbose; }
-            }
-
-            internal Collection<ProgressRecord> Progress
-            {
-                get { return _progress; }
-            }
-
-            internal Collection<DebugRecord> Debug
-            {
-                get { return _debug; }
-            }
-
-            internal Collection<InformationRecord> Information
-            {
-                get { return _information; }
-            }
-
-            // Constructors
-            internal ResultsInfo(
-                Collection<PSObject> output,
-                Collection<ErrorRecord> error,
-                Collection<WarningRecord> warning,
-                Collection<VerboseRecord> verbose,
-                Collection<ProgressRecord> progress,
-                Collection<DebugRecord> debug,
-                Collection<InformationRecord> information
-                )
-            {
-                if (output == null)
-                {
-                    throw new PSArgumentNullException("output");
-                }
-
-                if (error == null)
-                {
-                    throw new PSArgumentNullException("error");
-                }
-
-                if (warning == null)
-                {
-                    throw new PSArgumentNullException("warning");
-                }
-
-                if (verbose == null)
-                {
-                    throw new PSArgumentNullException("verbose");
-                }
-
-                if (progress == null)
-                {
-                    throw new PSArgumentNullException("progress");
-                }
-
-                if (debug == null)
-                {
-                    throw new PSArgumentNullException("debug");
-                }
-
-                if (information == null)
-                {
-                    throw new PSArgumentNullException("information");
-                }
-
-                _output = output;
-                _error = error;
-                _warning = warning;
-                _verbose = verbose;
-                _progress = progress;
-                _debug = debug;
-                _information = information;
-            }
-
-            // ISerializable
-            private ResultsInfo(
-                SerializationInfo info,
-                StreamingContext context)
-            {
-                if (info == null)
-                {
-                    throw new PSArgumentNullException("info");
-                }
-
-                _output = (Collection<PSObject>)info.GetValue("Results_Output", typeof(Collection<PSObject>));
-                _error = (Collection<ErrorRecord>)info.GetValue("Results_Error", typeof(Collection<ErrorRecord>));
-                _warning = (Collection<WarningRecord>)info.GetValue("Results_Warning", typeof(Collection<WarningRecord>));
-                _verbose = (Collection<VerboseRecord>)info.GetValue("Results_Verbose", typeof(Collection<VerboseRecord>));
-                _progress = (Collection<ProgressRecord>)info.GetValue("Results_Progress", typeof(Collection<ProgressRecord>));
-                _debug = (Collection<DebugRecord>)info.GetValue("Results_Debug", typeof(Collection<DebugRecord>));
-
-                try
-                {
-                    _information = (Collection<InformationRecord>)info.GetValue("Results_Information", typeof(Collection<InformationRecord>));
-                }
-                catch(SerializationException)
-                {
-                    // The job might not have the info stream. Ignore.
-                    _information = new Collection<InformationRecord>();
-                }
-            }
-
-            public void GetObjectData(
-                SerializationInfo info,
-                StreamingContext context)
-            {
-                if (info == null)
-                {
-                    throw new PSArgumentException("info");
-                }
-
-                info.AddValue("Results_Output", _output);
-                info.AddValue("Results_Error", _error);
-                info.AddValue("Results_Warning", _warning);
-                info.AddValue("Results_Verbose", _verbose);
-                info.AddValue("Results_Progress", _progress);
-                info.AddValue("Results_Debug", _debug);
-                info.AddValue("Results_Information", _information);
-            }
-        }
-
-        #endregion
-    }
-
-    #region Internal StatusInfo Class
-
-    [Serializable]
-    internal class StatusInfo : ISerializable
-    {
-        // Private Members
-        private Guid _instanceId;
-        private string _name;
-        private string _location;
-        private string _command;
-        private string _statusMessage;
-        private JobState _jobState;
-        private bool _hasMoreData;
-        private DateTime? _startTime;
-        private DateTime? _stopTime;
-        private ScheduledJobDefinition _definition;
-
-        // Properties
-        internal Guid InstanceId
-        {
-            get { return _instanceId; }
-        }
-
-        internal string Name
-        {
-            get { return _name; }
-        }
-
-        internal string Location
-        {
-            get { return _location; }
-        }
-
-        internal string Command
-        {
-            get { return _command; }
-        }
-
-        internal string StatusMessage
-        {
-            get { return _statusMessage; }
-        }
-
-        internal JobState State
-        {
-            get { return _jobState; }
-        }
-
-        internal bool HasMoreData
-        {
-            get { return _hasMoreData; }
-        }
-
-        internal DateTime? StartTime
-        {
-            get { return _startTime; }
-        }
-
-        internal DateTime? StopTime
-        {
-            get { return _stopTime; }
-        }
-
-        internal ScheduledJobDefinition Definition
-        {
-            get { return _definition; }
-        }
-
-        // Constructors
-        internal StatusInfo(
-            Guid instanceId,
-            string name,
-            string location,
-            string command,
-            string statusMessage,
-            JobState jobState,
-            bool hasMoreData,
-            DateTime? startTime,
-            DateTime? stopTime,
-            ScheduledJobDefinition definition)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            _instanceId = instanceId;
-            _name = name;
-            _location = location;
-            _command = command;
-            _statusMessage = statusMessage;
-            _jobState = jobState;
-            _hasMoreData = hasMoreData;
-            _startTime = startTime;
-            _stopTime = stopTime;
-            _definition = definition;
-        }
-
-        // ISerializable
-        private StatusInfo(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            _instanceId = Guid.Parse(info.GetString("Status_InstanceId"));
-            _name = info.GetString("Status_Name");
-            _location = info.GetString("Status_Location");
-            _command = info.GetString("Status_Command");
-            _statusMessage = info.GetString("Status_Message");
-            _jobState = (JobState)info.GetValue("Status_State", typeof(JobState));
-            _hasMoreData = info.GetBoolean("Status_MoreData");
-            _definition = (ScheduledJobDefinition)info.GetValue("Status_Definition", typeof(ScheduledJobDefinition));
-
-            DateTime startTime = info.GetDateTime("Status_StartTime");
-            if (startTime != DateTime.MinValue)
-            {
-                _startTime = startTime;
-            }
-            else
-            {
-                _startTime = null;
-            }
-
-            DateTime stopTime = info.GetDateTime("Status_StopTime");
-            if (stopTime != DateTime.MinValue)
-            {
-                _stopTime = stopTime;
-            }
-            else
-            {
-                _stopTime = null;
-            }
-        }
-
-        public void GetObjectData(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            info.AddValue("Status_InstanceId", _instanceId);
-            info.AddValue("Status_Name", _name);
-            info.AddValue("Status_Location", _location);
-            info.AddValue("Status_Command", _command);
-            info.AddValue("Status_Message", _statusMessage);
-            info.AddValue("Status_State", _jobState);
-            info.AddValue("Status_MoreData", _hasMoreData);
-            info.AddValue("Status_Definition", _definition);
-
-            if (_startTime != null)
-            {
-                info.AddValue("Status_StartTime", _startTime);
-            }
-            else
-            {
-                info.AddValue("Status_StartTime", DateTime.MinValue);
-            }
-
-            if (_stopTime != null)
-            {
-                info.AddValue("Status_StopTime", _stopTime);
-            }
-            else
-            {
-                info.AddValue("Status_StopTime", DateTime.MinValue);
-            }
-        }
-    }
-
-    #endregion
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobDefinition.cs
deleted file mode 100644
index ecb4fc9caa6..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobDefinition.cs
+++ /dev/null
@@ -1,2585 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Globalization;
-using System.IO;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-using System.Management.Automation.Tracing;
-using System.Runtime.Serialization;
-using System.Security.Permissions;
-using System.Text.RegularExpressions;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This class contains all information needed to define a PowerShell job that
-    /// can be scheduled to run through either stand-alone or through the Windows
-    /// Task Scheduler.
-    /// </summary>
-    [Serializable]
-    public sealed class ScheduledJobDefinition : ISerializable, IDisposable
-    {
-        #region Private Members
-
-        private JobInvocationInfo _invocationInfo;
-        private ScheduledJobOptions _options;
-        private PSCredential _credential;
-        private Guid _globalId = Guid.NewGuid();
-        private string _name = string.Empty;
-        private int _id = GetCurrentId();
-        private int _executionHistoryLength = DefaultExecutionHistoryLength;
-        private bool _enabled = true;
-        private Dictionary<Int32, ScheduledJobTrigger> _triggers = new Dictionary<Int32, ScheduledJobTrigger>();
-        private Int32 _currentTriggerId;
-
-        private string _definitionFilePath;
-        private string _definitionOutputPath;
-
-        private bool _isDisposed;
-
-        // Task Action strings.
-        private const string TaskExecutionPath = @"pwsh.exe";
-        private const string TaskArguments = @"-NoLogo -NonInteractive -WindowStyle Hidden -Command ""Import-Module PSScheduledJob; $jobDef = [Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition]::LoadFromStore('{0}', '{1}'); $jobDef.Run()""";
-        private static object LockObject = new object();
-        private static int CurrentId = 0;
-        private static int DefaultExecutionHistoryLength = 32;
-
-        internal static ScheduledJobDefinitionRepository Repository = new ScheduledJobDefinitionRepository();
-
-        // Task Scheduler COM error codes.
-        private const int TSErrorDisabledTask = -2147216602;
-
-        #endregion
-
-        #region Public Properties
-
-        /// <summary>
-        /// Contains information needed to run the job such as script parameters,
-        /// job definition, user credentials, etc.
-        /// </summary>
-        public JobInvocationInfo InvocationInfo
-        {
-            get { return _invocationInfo; }
-        }
-
-        /// <summary>
-        /// Contains the script commands that define the job.
-        /// </summary>
-        public JobDefinition Definition
-        {
-            get { return _invocationInfo.Definition; }
-        }
-
-        /// <summary>
-        /// Specifies Task Scheduler options for the scheduled job.
-        /// </summary>
-        public ScheduledJobOptions Options
-        {
-            get { return new ScheduledJobOptions(_options); }
-        }
-
-        /// <summary>
-        /// Credential.
-        /// </summary>
-        public PSCredential Credential
-        {
-            get { return _credential; }
-
-            internal set { _credential = value; }
-        }
-
-        /// <summary>
-        /// An array of trigger objects that specify a time/condition
-        /// for when the job is run.
-        /// </summary>
-        public List<ScheduledJobTrigger> JobTriggers
-        {
-            get
-            {
-                List<Int32> notFoundIds;
-                return GetTriggers(null, out notFoundIds);
-            }
-        }
-
-        /// <summary>
-        /// Local instance Id for object instance.
-        /// </summary>
-        public int Id
-        {
-            get { return _id; }
-        }
-
-        /// <summary>
-        /// Global Id for scheduled job definition.
-        /// </summary>
-        public Guid GlobalId
-        {
-            get { return _globalId; }
-        }
-
-        /// <summary>
-        /// Name of scheduled job definition.
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-        }
-
-        /// <summary>
-        /// Job command.
-        /// </summary>
-        public string Command
-        {
-            get { return _invocationInfo.Command; }
-        }
-
-        /// <summary>
-        /// Returns the maximum number of job execution data
-        /// allowed in the job store.
-        /// </summary>
-        public int ExecutionHistoryLength
-        {
-            get { return _executionHistoryLength; }
-        }
-
-        /// <summary>
-        /// Determines whether this scheduled job definition is enabled
-        /// in Task Scheduler.
-        /// </summary>
-        public bool Enabled
-        {
-            get { return _enabled; }
-        }
-
-        /// <summary>
-        /// Returns the PowerShell command line execution path.
-        /// </summary>
-        public string PSExecutionPath
-        {
-            get { return TaskExecutionPath; }
-        }
-
-        /// <summary>
-        /// Returns PowerShell command line arguments to run
-        /// the scheduled job.
-        /// </summary>
-        public string PSExecutionArgs
-        {
-            get
-            {
-                // Escape single quotes in name.  Double quotes are not allowed
-                // and are caught during name validation.
-                string nameEscapeQuotes = _invocationInfo.Name.Replace("'", "''");
-
-                return string.Format(CultureInfo.InvariantCulture, TaskArguments, nameEscapeQuotes, _definitionFilePath);
-            }
-        }
-
-        /// <summary>
-        /// Returns the job run output path for this job definition.
-        /// </summary>
-        internal string OutputPath
-        {
-            get { return _definitionOutputPath; }
-        }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Default constructor is not accessible.
-        /// </summary>
-        private ScheduledJobDefinition()
-        { }
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="invocationInfo">Information to invoke Job.</param>
-        /// <param name="triggers">ScheduledJobTriggers.</param>
-        /// <param name="options">ScheduledJobOptions.</param>
-        /// <param name="credential">Credential.</param>
-        public ScheduledJobDefinition(
-            JobInvocationInfo invocationInfo,
-            IEnumerable<ScheduledJobTrigger> triggers,
-            ScheduledJobOptions options,
-            PSCredential credential)
-        {
-            if (invocationInfo == null)
-            {
-                throw new PSArgumentNullException("invocationInfo");
-            }
-
-            _name = invocationInfo.Name;
-            _invocationInfo = invocationInfo;
-
-            SetTriggers(triggers, false);
-            _options = (options != null) ? new ScheduledJobOptions(options) :
-                                           new ScheduledJobOptions();
-            _options.JobDefinition = this;
-
-            _credential = credential;
-        }
-
-        #endregion
-
-        #region ISerializable Implementation
-
-        /// <summary>
-        /// Serialization constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        private ScheduledJobDefinition(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            _options = (ScheduledJobOptions)info.GetValue("Options_Member", typeof(ScheduledJobOptions));
-            _globalId = Guid.Parse(info.GetString("GlobalId_Member"));
-            _name = info.GetString("Name_Member");
-            _executionHistoryLength = info.GetInt32("HistoryLength_Member");
-            _enabled = info.GetBoolean("Enabled_Member");
-            _triggers = (Dictionary<Int32, ScheduledJobTrigger>)info.GetValue("Triggers_Member", typeof(Dictionary<Int32, ScheduledJobTrigger>));
-            _currentTriggerId = info.GetInt32("CurrentTriggerId_Member");
-            _definitionFilePath = info.GetString("FilePath_Member");
-            _definitionOutputPath = info.GetString("OutputPath_Member");
-
-            object invocationObject = info.GetValue("InvocationInfo_Member", typeof(object));
-            _invocationInfo = invocationObject as JobInvocationInfo;
-
-            // Set the JobDefinition reference for the ScheduledJobTrigger and
-            // ScheduledJobOptions objects.
-            _options.JobDefinition = this;
-            foreach (ScheduledJobTrigger trigger in _triggers.Values)
-            {
-                trigger.JobDefinition = this;
-            }
-
-            // Instance information.
-            _isDisposed = false;
-        }
-
-        /// <summary>
-        /// Serialization constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        public void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            info.AddValue("Options_Member", _options);
-            info.AddValue("GlobalId_Member", _globalId.ToString());
-            info.AddValue("Name_Member", _name);
-            info.AddValue("HistoryLength_Member", _executionHistoryLength);
-            info.AddValue("Enabled_Member", _enabled);
-            info.AddValue("Triggers_Member", _triggers);
-            info.AddValue("CurrentTriggerId_Member", _currentTriggerId);
-            info.AddValue("FilePath_Member", _definitionFilePath);
-            info.AddValue("OutputPath_Member", _definitionOutputPath);
-
-            info.AddValue("InvocationInfo_Member", _invocationInfo);
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        /// <summary>
-        /// Updates existing information if scheduled job already exists.
-        /// WTS entry includes command line, options, and trigger conditions.
-        /// </summary>
-        private void UpdateWTSFromDefinition()
-        {
-            using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-            {
-                taskScheduler.UpdateTask(this);
-            }
-        }
-
-        /// <summary>
-        /// Compares the current ScheduledJobDefinition task scheduler information
-        /// with the corresponding information stored in Task Scheduler.  If the
-        /// information is different then the task scheduler information in this
-        /// object is updated to match what is in Task Scheduler, since that information
-        /// takes precedence.
-        ///
-        /// Task Scheduler information:
-        /// - Triggers
-        /// - Options
-        /// - Enabled state.
-        /// </summary>
-        /// <returns>Boolean if this object data is modified.</returns>
-        private bool UpdateDefinitionFromWTS()
-        {
-            bool dataModified = false;
-
-            // Get information from Task Scheduler.
-            using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-            {
-                bool wtsEnabled = taskScheduler.GetTaskEnabled(_name);
-                ScheduledJobOptions wtsOptions = taskScheduler.GetJobOptions(_name);
-                Collection<ScheduledJobTrigger> wtsTriggers = taskScheduler.GetJobTriggers(_name);
-
-                //
-                // Compare with existing object data and modify if necessary.
-                //
-
-                // Enabled.
-                if (wtsEnabled != _enabled)
-                {
-                    _enabled = wtsEnabled;
-                    dataModified = true;
-                }
-
-                // Options.
-                if (wtsOptions.DoNotAllowDemandStart != _options.DoNotAllowDemandStart ||
-                    wtsOptions.IdleDuration != _options.IdleDuration ||
-                    wtsOptions.IdleTimeout != _options.IdleTimeout ||
-                    wtsOptions.MultipleInstancePolicy != _options.MultipleInstancePolicy ||
-                    wtsOptions.RestartOnIdleResume != _options.RestartOnIdleResume ||
-                    wtsOptions.RunElevated != _options.RunElevated ||
-                    wtsOptions.RunWithoutNetwork != _options.RunWithoutNetwork ||
-                    wtsOptions.ShowInTaskScheduler != _options.ShowInTaskScheduler ||
-                    wtsOptions.StartIfNotIdle != _options.StartIfNotIdle ||
-                    wtsOptions.StartIfOnBatteries != _options.StartIfOnBatteries ||
-                    wtsOptions.StopIfGoingOffIdle != _options.StopIfGoingOffIdle ||
-                    wtsOptions.StopIfGoingOnBatteries != _options.StopIfGoingOnBatteries ||
-                    wtsOptions.WakeToRun != _options.WakeToRun)
-                {
-                    // Keep the current scheduled job definition reference.
-                    wtsOptions.JobDefinition = _options.JobDefinition;
-                    _options = wtsOptions;
-                    dataModified = true;
-                }
-
-                // Triggers.
-                if (_triggers.Count != wtsTriggers.Count)
-                {
-                    SetTriggers(wtsTriggers, false);
-                    dataModified = true;
-                }
-                else
-                {
-                    bool foundTriggerDiff = false;
-
-                    // Compare each trigger object.
-                    foreach (var wtsTrigger in wtsTriggers)
-                    {
-                        if (_triggers.ContainsKey(wtsTrigger.Id) == false)
-                        {
-                            foundTriggerDiff = true;
-                            break;
-                        }
-
-                        ScheduledJobTrigger trigger = _triggers[wtsTrigger.Id];
-                        if (trigger.DaysOfWeek != wtsTrigger.DaysOfWeek ||
-                            trigger.Enabled != wtsTrigger.Enabled ||
-                            trigger.Frequency != wtsTrigger.Frequency ||
-                            trigger.Interval != wtsTrigger.Interval ||
-                            trigger.RandomDelay != wtsTrigger.RandomDelay ||
-                            trigger.At != wtsTrigger.At ||
-                            trigger.User != wtsTrigger.User)
-                        {
-                            foundTriggerDiff = true;
-                            break;
-                        }
-                    }
-
-                    if (foundTriggerDiff)
-                    {
-                        SetTriggers(wtsTriggers, false);
-                        dataModified = true;
-                    }
-                }
-            }
-
-            return dataModified;
-        }
-
-        /// <summary>
-        /// Adds this scheduled job definition to the Task Scheduler.
-        /// </summary>
-        private void AddToWTS()
-        {
-            using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-            {
-                taskScheduler.CreateTask(this);
-            }
-        }
-
-        /// <summary>
-        /// Removes this scheduled job definition from the Task Scheduler.
-        /// This operation will fail if a current instance of this job definition
-        /// is running.
-        /// If force == true then all current instances will be stopped.
-        /// </summary>
-        /// <param name="force">Force removal and stop all running instances.</param>
-        private void RemoveFromWTS(bool force)
-        {
-            using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-            {
-                taskScheduler.RemoveTask(this, force);
-            }
-        }
-
-        /// <summary>
-        /// Adds this scheduled job definition to the job definition store.
-        /// </summary>
-        private void AddToJobStore()
-        {
-            FileStream fs = null;
-            try
-            {
-                fs = ScheduledJobStore.CreateFileForJobDefinition(Name);
-                _definitionFilePath = ScheduledJobStore.GetJobDefinitionLocation();
-                _definitionOutputPath = ScheduledJobStore.GetJobRunOutputDirectory(Name);
-
-                XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-                serializer.WriteObject(fs, this);
-                fs.Flush();
-            }
-            finally
-            {
-                if (fs != null)
-                {
-                    fs.Close();
-                }
-            }
-
-            // If credentials are provided then update permissions.
-            if (Credential != null)
-            {
-                UpdateFilePermissions(Credential.UserName);
-            }
-        }
-
-        /// <summary>
-        /// Updates existing file with this definition information.
-        /// </summary>
-        private void UpdateJobStore()
-        {
-            FileStream fs = null;
-            try
-            {
-                // Overwrite the existing file.
-                fs = GetFileStream(
-                    Name,
-                    _definitionFilePath,
-                    FileMode.Create,
-                    FileAccess.Write,
-                    FileShare.None);
-
-                XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-                serializer.WriteObject(fs, this);
-                fs.Flush();
-            }
-            finally
-            {
-                if (fs != null)
-                {
-                    fs.Close();
-                }
-            }
-
-            // If credentials are provided then update permissions.
-            if (Credential != null)
-            {
-                UpdateFilePermissions(Credential.UserName);
-            }
-        }
-
-        /// <summary>
-        /// Updates definition file permissions for provided user account.
-        /// </summary>
-        /// <param name="user">Account user name.</param>
-        private void UpdateFilePermissions(string user)
-        {
-            Exception ex = null;
-            try
-            {
-                // Add user for read access to the job definition file.
-                ScheduledJobStore.SetReadAccessOnDefinitionFile(Name, user);
-
-                // Add user for write access to the job run Output directory.
-                ScheduledJobStore.SetWriteAccessOnJobRunOutput(Name, user);
-            }
-            catch (System.Security.Principal.IdentityNotMappedException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (ArgumentNullException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorSettingAccessPermissions, this.Name, Credential.UserName);
-                throw new ScheduledJobException(msg, ex);
-            }
-        }
-
-        /// <summary>
-        /// Removes this scheduled job definition from the job definition store.
-        /// </summary>
-        private void RemoveFromJobStore()
-        {
-            ScheduledJobStore.RemoveJobDefinition(Name);
-        }
-
-        /// <summary>
-        /// Throws exception if object is disposed.
-        /// </summary>
-        private void IsDisposed()
-        {
-            if (_isDisposed == true)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.DefinitionObjectDisposed, Name);
-                throw new RuntimeException(msg);
-            }
-        }
-
-        /// <summary>
-        /// If repository is empty try refreshing it from the store.
-        /// </summary>
-        private void LoadRepository()
-        {
-            ScheduledJobDefinition.RefreshRepositoryFromStore();
-        }
-
-        /// <summary>
-        /// Validates all triggers in collection.  An exception is thrown
-        /// for invalid triggers.
-        /// </summary>
-        /// <param name="triggers"></param>
-        private void ValidateTriggers(IEnumerable<ScheduledJobTrigger> triggers)
-        {
-            if (triggers != null)
-            {
-                foreach (var trigger in triggers)
-                {
-                    trigger.Validate();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Validates the job definition name.  Since the job definition
-        /// name is used in the job store as a directory name, make sure
-        /// it does not contain any invalid characters.
-        /// </summary>
-        private static void ValidateName(string name)
-        {
-            if (name.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidJobDefName, name);
-                throw new ScheduledJobException(msg);
-            }
-        }
-
-        /// <summary>
-        /// Iterates through all job run files, opens each job
-        /// run and renames it to the provided new name.
-        /// </summary>
-        /// <param name="newDefName">New job run name.</param>
-        private void UpdateJobRunNames(
-            string newDefName)
-        {
-            // Job run results will be under the new scheduled job definition name.
-            Collection<DateTime> jobRuns = ScheduledJobSourceAdapter.GetJobRuns(newDefName);
-            if (jobRuns == null)
-            {
-                return;
-            }
-
-            // Load and rename each job.
-            ScheduledJobDefinition definition = ScheduledJobDefinition.LoadFromStore(newDefName, null);
-            foreach (DateTime jobRun in jobRuns)
-            {
-                ScheduledJob job = null;
-                try
-                {
-                    job = ScheduledJobSourceAdapter.LoadJobFromStore(definition.Name, jobRun) as ScheduledJob;
-                }
-                catch (ScheduledJobException)
-                {
-                    continue;
-                }
-                catch (DirectoryNotFoundException)
-                {
-                    continue;
-                }
-                catch (FileNotFoundException)
-                {
-                    continue;
-                }
-                catch (UnauthorizedAccessException)
-                {
-                    continue;
-                }
-                catch (IOException)
-                {
-                    continue;
-                }
-
-                if (job != null)
-                {
-                    job.Name = newDefName;
-                    job.Definition = definition;
-                    ScheduledJobSourceAdapter.SaveJobToStore(job);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Handles known Task Scheduler COM error codes.
-        /// </summary>
-        /// <param name="e">COMException.</param>
-        /// <returns>Error message.</returns>
-        private string ConvertCOMErrorCode(System.Runtime.InteropServices.COMException e)
-        {
-            string msg = null;
-            switch (e.ErrorCode)
-            {
-                case TSErrorDisabledTask:
-                    msg = ScheduledJobErrorStrings.ReasonTaskDisabled;
-                    break;
-            }
-
-            return msg;
-        }
-
-        #endregion
-
-        #region Internal Methods
-
-        /// <summary>
-        /// Save object to store.
-        /// </summary>
-        internal void SaveToStore()
-        {
-            IsDisposed();
-
-            UpdateJobStore();
-        }
-
-        /// <summary>
-        /// Compares the task scheduler information in this object with
-        /// what is stored in Task Scheduler.  If there is a difference
-        /// then this object is updated with the information from Task
-        /// Scheduler and saved to the job store.
-        /// </summary>
-        internal void SyncWithWTS()
-        {
-            Exception notFoundEx = null;
-            try
-            {
-                if (UpdateDefinitionFromWTS())
-                {
-                    SaveToStore();
-                }
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                notFoundEx = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                notFoundEx = e;
-            }
-
-            if (notFoundEx != null)
-            {
-                // There is no corresponding Task Scheduler item for this
-                // scheduled job definition.  Remove this definition from
-                // the job store for consistency.
-                Remove(true);
-                throw notFoundEx;
-            }
-        }
-
-        /// <summary>
-        /// Renames scheduled job definition, store directory and task scheduler task.
-        /// </summary>
-        /// <param name="newName">New name of job definition.</param>
-        internal void RenameAndSave(string newName)
-        {
-            if (InvocationInfo.Name.Equals(newName, StringComparison.OrdinalIgnoreCase))
-            {
-                return;
-            }
-
-            ValidateName(newName);
-
-            // Attempt to rename job store directory.  Detect if new name
-            // is not unique.
-            string oldName = InvocationInfo.Name;
-            Exception ex = null;
-            try
-            {
-                ScheduledJobStore.RenameScheduledJobDefDir(oldName, newName);
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                string msg;
-                if (!string.IsNullOrEmpty(ex.Message))
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRenamingScheduledJobWithMessage, oldName, newName, ex.Message);
-                }
-                else
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRenamingScheduledJob, oldName, newName);
-                }
-
-                throw new ScheduledJobException(msg, ex);
-            }
-
-            try
-            {
-                // Remove old named Task Scheduler task.
-                // This also stops any existing running job.
-                RemoveFromWTS(true);
-
-                // Update job definition names.
-                _name = newName;
-                InvocationInfo.Name = newName;
-                InvocationInfo.Definition.Name = newName;
-                _definitionOutputPath = ScheduledJobStore.GetJobRunOutputDirectory(Name);
-
-                // Update job definition in new job store location.
-                UpdateJobStore();
-
-                // Add new Task Scheduler task with new name.
-                // Jobs can start running again.
-                AddToWTS();
-
-                // Update any existing job run names.
-                UpdateJobRunNames(newName);
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            finally
-            {
-                // Clear job run cache since job runs now appear in new directory location.
-                ScheduledJobSourceAdapter.ClearRepository();
-            }
-
-            // If any part of renaming the various scheduled job components fail,
-            // aggressively remove scheduled job corrupted state and inform user.
-            if (ex != null)
-            {
-                try
-                {
-                    Remove(true);
-                }
-                catch (ScheduledJobException e)
-                {
-                    ex.Data.Add("SchedJobRemoveError", e);
-                }
-
-                string msg;
-                if (!string.IsNullOrEmpty(ex.Message))
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.BrokenRenamingScheduledJobWithMessage, oldName, newName, ex.Message);
-                }
-                else
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.BrokenRenamingScheduledJob, oldName, newName);
-                }
-
-                throw new ScheduledJobException(msg, ex);
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Registers this scheduled job definition object by doing the
-        /// following:
-        ///  a) Writing this object to the scheduled job object store.
-        ///  b) Registering this job as a Windows Task Scheduler task.
-        ///  c) Adding this object to the local repository.
-        /// </summary>
-        public void Register()
-        {
-            IsDisposed();
-
-            LoadRepository();
-
-            ValidateName(Name);
-
-            // First add to the job store.  If an exception occurs here
-            // then this method fails with no clean up.
-            Exception ex = null;
-            bool corruptedFile = false;
-            try
-            {
-                AddToJobStore();
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (System.Runtime.Serialization.SerializationException e)
-            {
-                corruptedFile = true;
-                ex = e;
-            }
-            catch (System.Runtime.Serialization.InvalidDataContractException e)
-            {
-                corruptedFile = true;
-                ex = e;
-            }
-            catch (ScheduledJobException e)
-            {
-                // Can be thrown for error setting file access permissions with supplied credentials.
-                // But file is not considered corrupted if it already exists.
-                corruptedFile = !(e.FQEID.Equals(ScheduledJobStore.ScheduledJobDefExistsFQEID, StringComparison.OrdinalIgnoreCase));
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                if (corruptedFile)
-                {
-                    // Remove from store.
-                    try
-                    {
-                        ScheduledJobStore.RemoveJobDefinition(Name);
-                    }
-                    catch (DirectoryNotFoundException)
-                    { }
-                    catch (FileNotFoundException)
-                    { }
-                    catch (UnauthorizedAccessException)
-                    { }
-                    catch (IOException)
-                    { }
-                }
-
-                if (ex is not ScheduledJobException)
-                {
-                    // Wrap in ScheduledJobException type.
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRegisteringDefinitionStore, this.Name);
-                    throw new ScheduledJobException(msg, ex);
-                }
-                else
-                {
-                    // Otherwise just re-throw.
-                    throw ex;
-                }
-            }
-
-            // Next register with the Task Scheduler.
-            ex = null;
-            try
-            {
-                AddToWTS();
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (System.Runtime.InteropServices.COMException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                // Clean up job store.
-                RemoveFromJobStore();
-
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRegisteringDefinitionTask,
-                    this.Name,
-                    (string.IsNullOrEmpty(ex.Message) == false) ? ex.Message : string.Empty);
-                throw new ScheduledJobException(msg, ex);
-            }
-
-            // Finally add to the local repository.
-            Repository.AddOrReplace(this);
-        }
-
-        /// <summary>
-        /// Saves this scheduled job definition object:
-        ///  a) Rewrites this object to the scheduled job object store.
-        ///  b) Updates the Windows Task Scheduler task.
-        /// </summary>
-        public void Save()
-        {
-            IsDisposed();
-
-            LoadRepository();
-
-            ValidateName(Name);
-
-            // First update the Task Scheduler.  If an exception occurs here then
-            // we fail with no clean up.
-            Exception ex = null;
-            try
-            {
-                UpdateWTSFromDefinition();
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (System.Runtime.InteropServices.COMException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                // We want this object to remain synchronized with what is in WTS.
-                SyncWithWTS();
-
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorUpdatingDefinitionTask, this.Name);
-                throw new ScheduledJobException(msg, ex);
-            }
-
-            // Next save to job store.
-            ex = null;
-            try
-            {
-                UpdateJobStore();
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                // Remove this from WTS for consistency.
-                RemoveFromWTS(true);
-
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorUpdatingDefinitionStore, this.Name);
-                throw new ScheduledJobException(msg, ex);
-            }
-
-            // Finally update this object in the local repository.
-            ScheduledJobDefinition.RefreshRepositoryFromStore();
-            Repository.AddOrReplace(this);
-        }
-
-        /// <summary>
-        /// Removes this definition object:
-        ///  a) Removes from the Task Scheduler
-        ///      or fails if an instance is currently running.
-        ///      or stops any running instances if force is true.
-        ///  b) Removes from the scheduled job definition store.
-        ///  c) Removes from the local repository.
-        ///  d) Disposes this object.
-        /// </summary>
-        public void Remove(bool force)
-        {
-            IsDisposed();
-
-            // First remove from Task Scheduler.  Catch not found
-            // exceptions and continue.
-            try
-            {
-                RemoveFromWTS(force);
-            }
-            catch (System.IO.DirectoryNotFoundException)
-            {
-                // Continue with removal.
-            }
-            catch (System.IO.FileNotFoundException)
-            {
-                // Continue with removal.
-            }
-
-            // Remove from the Job Store.  Catch exceptions and continue
-            // with removal.
-            Exception ex = null;
-            try
-            {
-                RemoveFromJobStore();
-            }
-            catch (DirectoryNotFoundException)
-            {
-            }
-            catch (FileNotFoundException)
-            {
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            finally
-            {
-                // Remove from the local repository.
-                Repository.Remove(this);
-
-                // Remove job runs for this definition from local repository.
-                ScheduledJobSourceAdapter.ClearRepositoryForDefinition(this.Name);
-
-                // Dispose this object.
-                Dispose();
-            }
-
-            if (ex != null)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRemovingDefinitionStore, this.Name);
-                throw new ScheduledJobException(msg, ex);
-            }
-        }
-
-        /// <summary>
-        /// Starts the scheduled job immediately.  A ScheduledJob object is
-        /// returned that represents the running command, and this returned
-        /// job is also added to the local job repository.  Job results are
-        /// not written to the job store.
-        /// </summary>
-        /// <returns>ScheduledJob object for running job.</returns>
-        public ScheduledJob StartJob()
-        {
-            IsDisposed();
-
-            ScheduledJob job = new ScheduledJob(_invocationInfo.Command, _invocationInfo.Name, this);
-            job.StartJob();
-
-            return job;
-        }
-
-        /// <summary>
-        /// Starts registered job definition running from the Task Scheduler.
-        /// </summary>
-        public void RunAsTask()
-        {
-            IsDisposed();
-
-            Exception ex = null;
-            string reason = null;
-            try
-            {
-                using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-                {
-                    taskScheduler.RunTask(this);
-                }
-            }
-            catch (System.IO.DirectoryNotFoundException e)
-            {
-                reason = ScheduledJobErrorStrings.reasonJobNotFound;
-                ex = e;
-            }
-            catch (System.IO.FileNotFoundException e)
-            {
-                reason = ScheduledJobErrorStrings.reasonJobNotFound;
-                ex = e;
-            }
-            catch (System.Runtime.InteropServices.COMException e)
-            {
-                reason = ConvertCOMErrorCode(e);
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                string msg;
-                if (reason != null)
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRunningAsTaskWithReason, this.Name, reason);
-                }
-                else
-                {
-                    msg = StringUtil.Format(ScheduledJobErrorStrings.ErrorRunningAsTask, this.Name);
-                }
-
-                throw new ScheduledJobException(msg, ex);
-            }
-        }
-
-        #endregion
-
-        #region Public Trigger Methods
-
-        /// <summary>
-        /// Adds new ScheduledJobTriggers.
-        /// </summary>
-        /// <param name="triggers">Collection of ScheduledJobTrigger objects.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        public void AddTriggers(
-            IEnumerable<ScheduledJobTrigger> triggers,
-            bool save)
-        {
-            IsDisposed();
-
-            if (triggers == null)
-            {
-                throw new PSArgumentNullException("triggers");
-            }
-
-            // First validate all triggers.
-            ValidateTriggers(triggers);
-
-            Collection<int> newTriggerIds = new Collection<int>();
-            foreach (ScheduledJobTrigger trigger in triggers)
-            {
-                ScheduledJobTrigger newTrigger = new ScheduledJobTrigger(trigger);
-
-                newTrigger.Id = ++_currentTriggerId;
-                newTriggerIds.Add(newTrigger.Id);
-                newTrigger.JobDefinition = this;
-                _triggers.Add(newTrigger.Id, newTrigger);
-            }
-
-            if (save)
-            {
-                Save();
-            }
-        }
-
-        /// <summary>
-        /// Removes triggers matching passed in trigger Ids.
-        /// </summary>
-        /// <param name="triggerIds">Trigger Ids to remove.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        /// <returns>Trigger Ids not found.</returns>
-        public List<Int32> RemoveTriggers(
-            IEnumerable<Int32> triggerIds,
-            bool save)
-        {
-            IsDisposed();
-
-            List<Int32> idsNotFound = new List<Int32>();
-            bool triggerFound = false;
-
-            // triggerIds is null then remove all triggers.
-            if (triggerIds == null)
-            {
-                _currentTriggerId = 0;
-                if (_triggers.Count > 0)
-                {
-                    triggerFound = true;
-
-                    foreach (ScheduledJobTrigger trigger in _triggers.Values)
-                    {
-                        trigger.Id = 0;
-                        trigger.JobDefinition = null;
-                    }
-
-                    // Create new empty trigger collection.
-                    _triggers = new Dictionary<int, ScheduledJobTrigger>();
-                }
-            }
-            else
-            {
-                foreach (Int32 removeId in triggerIds)
-                {
-                    if (_triggers.ContainsKey(removeId))
-                    {
-                        _triggers[removeId].JobDefinition = null;
-                        _triggers[removeId].Id = 0;
-                        _triggers.Remove(removeId);
-                        triggerFound = true;
-                    }
-                    else
-                    {
-                        idsNotFound.Add(removeId);
-                    }
-                }
-            }
-
-            if (save && triggerFound)
-            {
-                Save();
-            }
-
-            return idsNotFound;
-        }
-
-        /// <summary>
-        /// Updates triggers with provided trigger objects, matching passed in
-        /// trigger Id with existing trigger Id.
-        /// </summary>
-        /// <param name="triggers">Collection of ScheduledJobTrigger objects to update.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        /// <returns>Trigger Ids not found.</returns>
-        public List<Int32> UpdateTriggers(
-            IEnumerable<ScheduledJobTrigger> triggers,
-            bool save)
-        {
-            IsDisposed();
-
-            if (triggers == null)
-            {
-                throw new PSArgumentNullException("triggers");
-            }
-
-            // First validate all triggers.
-            ValidateTriggers(triggers);
-
-            List<Int32> idsNotFound = new List<Int32>();
-            bool triggerFound = false;
-            foreach (ScheduledJobTrigger updateTrigger in triggers)
-            {
-                if (_triggers.ContainsKey(updateTrigger.Id))
-                {
-                    // Disassociate old trigger from this definition.
-                    _triggers[updateTrigger.Id].JobDefinition = null;
-
-                    // Replace older trigger object with new updated one.
-                    ScheduledJobTrigger newTrigger = new ScheduledJobTrigger(updateTrigger);
-                    newTrigger.Id = updateTrigger.Id;
-                    newTrigger.JobDefinition = this;
-                    _triggers[newTrigger.Id] = newTrigger;
-                    triggerFound = true;
-                }
-                else
-                {
-                    idsNotFound.Add(updateTrigger.Id);
-                }
-            }
-
-            if (save && triggerFound)
-            {
-                Save();
-            }
-
-            return idsNotFound;
-        }
-
-        /// <summary>
-        /// Creates a new set of ScheduledJobTriggers for this object.
-        /// </summary>
-        /// <param name="newTriggers">Array of ScheduledJobTrigger objects to set.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        public void SetTriggers(
-            IEnumerable<ScheduledJobTrigger> newTriggers,
-            bool save)
-        {
-            IsDisposed();
-
-            // First validate all triggers.
-            ValidateTriggers(newTriggers);
-
-            // Disassociate any old trigger objects from this definition.
-            foreach (ScheduledJobTrigger trigger in _triggers.Values)
-            {
-                trigger.JobDefinition = null;
-            }
-
-            _currentTriggerId = 0;
-            _triggers = new Dictionary<Int32, ScheduledJobTrigger>();
-            if (newTriggers != null)
-            {
-                foreach (ScheduledJobTrigger trigger in newTriggers)
-                {
-                    ScheduledJobTrigger newTrigger = new ScheduledJobTrigger(trigger);
-
-                    newTrigger.Id = ++_currentTriggerId;
-                    newTrigger.JobDefinition = this;
-                    _triggers.Add(newTrigger.Id, newTrigger);
-                }
-            }
-
-            if (save)
-            {
-                Save();
-            }
-        }
-
-        /// <summary>
-        /// Returns a list of new ScheduledJobTrigger objects corresponding
-        /// to the passed in trigger Ids.  Also returns an array of trigger Ids
-        /// that were not found in an out parameter.
-        /// </summary>
-        /// <param name="triggerIds">List of trigger Ids.</param>
-        /// <param name="notFoundIds">List of not found trigger Ids.</param>
-        /// <returns>List of ScheduledJobTrigger objects.</returns>
-        public List<ScheduledJobTrigger> GetTriggers(
-            IEnumerable<Int32> triggerIds,
-            out List<Int32> notFoundIds)
-        {
-            IsDisposed();
-
-            List<ScheduledJobTrigger> newTriggers;
-            List<Int32> notFoundList = new List<Int32>();
-            if (triggerIds == null)
-            {
-                // Return all triggers.
-                newTriggers = new List<ScheduledJobTrigger>();
-                foreach (ScheduledJobTrigger trigger in _triggers.Values)
-                {
-                    newTriggers.Add(new ScheduledJobTrigger(trigger));
-                }
-            }
-            else
-            {
-                // Filter returned triggers to match requested.
-                newTriggers = new List<ScheduledJobTrigger>();
-                foreach (Int32 triggerId in triggerIds)
-                {
-                    if (_triggers.ContainsKey(triggerId))
-                    {
-                        newTriggers.Add(new ScheduledJobTrigger(_triggers[triggerId]));
-                    }
-                    else
-                    {
-                        notFoundList.Add(triggerId);
-                    }
-                }
-            }
-
-            notFoundIds = notFoundList;
-
-            // Return array of ScheduledJobTrigger objects sorted by Id.
-            newTriggers.Sort((firstTrigger, secondTrigger) =>
-                {
-                    return ((int)firstTrigger.Id - (int)secondTrigger.Id);
-                });
-
-            return newTriggers;
-        }
-
-        /// <summary>
-        /// Finds and returns a copy of the ScheduledJobTrigger corresponding to
-        /// the passed in trigger Id.
-        /// </summary>
-        /// <param name="triggerId">Trigger Id.</param>
-        /// <returns>ScheduledJobTrigger object.</returns>
-        public ScheduledJobTrigger GetTrigger(
-            Int32 triggerId)
-        {
-            IsDisposed();
-
-            if (_triggers.ContainsKey(triggerId))
-            {
-                return new ScheduledJobTrigger(_triggers[triggerId]);
-            }
-
-            return null;
-        }
-
-        #endregion
-
-        #region Public Update Methods
-
-        /// <summary>
-        /// Updates scheduled job options.
-        /// </summary>
-        /// <param name="options">ScheduledJobOptions or null for default.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        public void UpdateOptions(
-            ScheduledJobOptions options,
-            bool save)
-        {
-            IsDisposed();
-
-            // Disassociate current options object from this definition.
-            _options.JobDefinition = null;
-
-            // options == null is allowed and signals the use default
-            // Task Scheduler options.
-            _options = (options != null) ? new ScheduledJobOptions(options) :
-                                           new ScheduledJobOptions();
-            _options.JobDefinition = this;
-
-            if (save)
-            {
-                Save();
-            }
-        }
-
-        /// <summary>
-        /// Sets the execution history length property.
-        /// </summary>
-        /// <param name="executionHistoryLength">Execution history length.</param>
-        /// <param name="save">Save to store.</param>
-        public void SetExecutionHistoryLength(
-            int executionHistoryLength,
-            bool save)
-        {
-            IsDisposed();
-
-            _executionHistoryLength = executionHistoryLength;
-
-            if (save)
-            {
-                SaveToStore();
-            }
-        }
-
-        /// <summary>
-        /// Clears all execution results in the job store.
-        /// </summary>
-        public void ClearExecutionHistory()
-        {
-            IsDisposed();
-
-            ScheduledJobStore.RemoveAllJobRuns(Name);
-            ScheduledJobSourceAdapter.ClearRepositoryForDefinition(Name);
-        }
-
-        /// <summary>
-        /// Updates the JobInvocationInfo object.
-        /// </summary>
-        /// <param name="jobInvocationInfo">JobInvocationInfo.</param>
-        /// <param name="save">Save to store.</param>
-        public void UpdateJobInvocationInfo(
-            JobInvocationInfo jobInvocationInfo,
-            bool save)
-        {
-            IsDisposed();
-
-            if (jobInvocationInfo == null)
-            {
-                throw new PSArgumentNullException("jobInvocationInfo");
-            }
-
-            _invocationInfo = jobInvocationInfo;
-            _name = jobInvocationInfo.Name;
-
-            if (save)
-            {
-                SaveToStore();
-            }
-        }
-
-        /// <summary>
-        /// Sets the enabled state of this object.
-        /// </summary>
-        /// <param name="enabled">True if enabled.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        public void SetEnabled(
-            bool enabled,
-            bool save)
-        {
-            IsDisposed();
-
-            _enabled = enabled;
-
-            if (save)
-            {
-                Save();
-            }
-        }
-
-        /// <summary>
-        /// Sets the name of this scheduled job definition.
-        /// </summary>
-        /// <param name="name">Name.</param>
-        /// <param name="save">Update Windows Task Scheduler and save to store.</param>
-        public void SetName(
-            string name,
-            bool save)
-        {
-            IsDisposed();
-
-            _name = (name != null) ? name : string.Empty;
-
-            if (save)
-            {
-                Save();
-            }
-        }
-
-        #endregion
-
-        #region IDisposable
-
-        /// <summary>
-        /// Dispose.
-        /// </summary>
-        public void Dispose()
-        {
-            _isDisposed = true;
-
-            GC.SuppressFinalize(this);
-        }
-
-        #endregion
-
-        #region Static Methods
-
-        /// <summary>
-        /// Synchronizes the local ScheduledJobDefinition repository with the
-        /// scheduled job definitions in the job store.
-        /// </summary>
-        /// <param name="itemFound">Callback delegate for each discovered item.</param>
-        /// <returns>Dictionary of errors.</returns>
-        internal static Dictionary<string, Exception> RefreshRepositoryFromStore(
-            Action<ScheduledJobDefinition> itemFound = null)
-        {
-            Dictionary<string, Exception> errors = new Dictionary<string, Exception>();
-
-            // Get current list of job definition files in store, and create hash
-            // table for quick look up.
-            IEnumerable<string> jobDefinitionPathNames = ScheduledJobStore.GetJobDefinitions();
-            HashSet<string> jobDefinitionNamesHash = new HashSet<string>();
-            foreach (string pathName in jobDefinitionPathNames)
-            {
-                // Remove path information and use job definition name only.
-                int indx = pathName.LastIndexOf('\\');
-                string jobDefName = (indx != -1) ? pathName.Substring(indx + 1) : pathName;
-                jobDefinitionNamesHash.Add(jobDefName);
-            }
-
-            // First remove definition objects not in store.
-            // Repository.Definitions returns a *copy* of current repository items.
-            foreach (ScheduledJobDefinition jobDef in Repository.Definitions)
-            {
-                if (jobDefinitionNamesHash.Contains(jobDef.Name) == false)
-                {
-                    Repository.Remove(jobDef);
-                }
-                else
-                {
-                    jobDefinitionNamesHash.Remove(jobDef.Name);
-
-                    if (itemFound != null)
-                    {
-                        itemFound(jobDef);
-                    }
-                }
-            }
-
-            // Next add definition items not in local repository.
-            foreach (string jobDefinitionName in jobDefinitionNamesHash)
-            {
-                try
-                {
-                    // Read the job definition object from file and add to local repository.
-                    ScheduledJobDefinition jobDefinition = ScheduledJobDefinition.LoadDefFromStore(jobDefinitionName, null);
-                    Repository.AddOrReplace(jobDefinition);
-
-                    if (itemFound != null)
-                    {
-                        itemFound(jobDefinition);
-                    }
-                }
-                catch (System.IO.IOException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-                catch (System.Xml.XmlException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-                catch (System.TypeInitializationException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-                catch (System.Runtime.Serialization.SerializationException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-                catch (System.ArgumentNullException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-                catch (System.UnauthorizedAccessException e)
-                {
-                    errors.Add(jobDefinitionName, e);
-                }
-            }
-
-            return errors;
-        }
-
-        /// <summary>
-        /// Reads a ScheduledJobDefinition object from file and
-        /// returns object.
-        /// </summary>
-        /// <param name="definitionName">Name of definition to load.</param>
-        /// <param name="definitionPath">Path to definition file.</param>
-        /// <returns>ScheduledJobDefinition object.</returns>
-        internal static ScheduledJobDefinition LoadDefFromStore(
-            string definitionName,
-            string definitionPath)
-        {
-            ScheduledJobDefinition definition = null;
-            FileStream fs = null;
-            try
-            {
-                fs = GetFileStream(
-                    definitionName,
-                    definitionPath,
-                    FileMode.Open,
-                    FileAccess.Read,
-                    FileShare.Read);
-
-                XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-                definition = serializer.ReadObject(fs) as ScheduledJobDefinition;
-            }
-            finally
-            {
-                if (fs != null)
-                {
-                    fs.Close();
-                }
-            }
-
-            return definition;
-        }
-
-        /// <summary>
-        /// Creates a new ScheduledJobDefinition object from a file.
-        /// </summary>
-        /// <param name="definitionName">Name of definition to load.</param>
-        /// <param name="definitionPath">Path to definition file.</param>
-        /// <returns>ScheduledJobDefinition object.</returns>
-        public static ScheduledJobDefinition LoadFromStore(
-            string definitionName,
-            string definitionPath)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentNullException("definitionName");
-            }
-
-            ScheduledJobDefinition definition = null;
-            bool corruptedFile = false;
-            Exception ex = null;
-
-            try
-            {
-                definition = LoadDefFromStore(definitionName, definitionPath);
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (System.Xml.XmlException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-            catch (System.TypeInitializationException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-            catch (System.ArgumentNullException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-            catch (System.Runtime.Serialization.SerializationException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-
-            if (ex != null)
-            {
-                //
-                // Remove definition if corrupted.
-                // But only if the corrupted file is in the default scheduled jobs
-                // path for the current user.
-                //
-                if (corruptedFile &&
-                    (definitionPath == null ||
-                     ScheduledJobStore.IsDefaultUserPath(definitionPath)))
-                {
-                    // Remove corrupted scheduled job definition.
-                    RemoveDefinition(definitionName);
-
-                    // Throw exception for corrupted/removed job definition.
-                    throw new ScheduledJobException(
-                        StringUtil.Format(ScheduledJobErrorStrings.CantLoadDefinitionFromStore, definitionName),
-                        ex);
-                }
-
-                // Throw exception for not found job definition.
-                throw new ScheduledJobException(
-                    StringUtil.Format(ScheduledJobErrorStrings.CannotFindJobDefinition, definitionName),
-                    ex);
-            }
-
-            // Make sure the deserialized ScheduledJobDefinition object contains the same
-            // Task Scheduler information that is stored in Task Scheduler.
-            definition.SyncWithWTS();
-
-            return definition;
-        }
-
-        /// <summary>
-        /// Internal helper method to remove a scheduled job definition
-        /// by name from job store and Task Scheduler.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        internal static void RemoveDefinition(
-            string definitionName)
-        {
-            // Remove from store.
-            try
-            {
-                ScheduledJobStore.RemoveJobDefinition(definitionName);
-            }
-            catch (DirectoryNotFoundException)
-            { }
-            catch (FileNotFoundException)
-            { }
-            catch (UnauthorizedAccessException)
-            { }
-            catch (IOException)
-            { }
-
-            // Check and remove from Task Scheduler.
-            using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-            {
-                try
-                {
-                    taskScheduler.RemoveTaskByName(definitionName, true, true);
-                }
-                catch (UnauthorizedAccessException)
-                { }
-                catch (IOException)
-                { }
-            }
-        }
-
-        private static int GetCurrentId()
-        {
-            lock (LockObject)
-            {
-                return ++CurrentId;
-            }
-        }
-
-        /// <summary>
-        /// Starts a scheduled job based on definition name and returns the
-        /// running job object.  Returned job is also added to the local
-        /// job repository.  Job results are not written to store.
-        /// </summary>
-        /// <param name="DefinitionName">ScheduledJobDefinition name.</param>
-        public static Job2 StartJob(
-            string DefinitionName)
-        {
-            // Load scheduled job definition.
-            ScheduledJobDefinition jobDefinition = ScheduledJobDefinition.LoadFromStore(DefinitionName, null);
-
-            // Start job.
-            return jobDefinition.StartJob();
-        }
-
-        private static FileStream GetFileStream(
-            string definitionName,
-            string definitionPath,
-            FileMode fileMode,
-            FileAccess fileAccess,
-            FileShare fileShare)
-        {
-            FileStream fs;
-
-            if (definitionPath == null)
-            {
-                // Look for definition in default current user location.
-                fs = ScheduledJobStore.GetFileForJobDefinition(
-                    definitionName,
-                    fileMode,
-                    fileAccess,
-                    fileShare);
-            }
-            else
-            {
-                // Look for definition in known path.
-                fs = ScheduledJobStore.GetFileForJobDefinition(
-                    definitionName,
-                    definitionPath,
-                    fileMode,
-                    fileAccess,
-                    fileShare);
-            }
-
-            return fs;
-        }
-
-        #endregion
-
-        #region Running Job
-
-        /// <summary>
-        /// Create a Job2 job, runs it and waits for it to complete.
-        /// Job status and results are written to the job store.
-        /// </summary>
-        /// <returns>Job2 job object that was run.</returns>
-        public Job2 Run()
-        {
-            Job2 job = null;
-
-            using (PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource())
-            {
-                Exception ex = null;
-                try
-                {
-                    JobManager jobManager = Runspace.DefaultRunspace.JobManager;
-
-                    job = jobManager.NewJob(InvocationInfo);
-
-                    // If this is a scheduled job type then include this object so
-                    // so that ScheduledJobSourceAdapter knows where the results are
-                    // to be stored.
-                    ScheduledJob schedJob = job as ScheduledJob;
-                    if (schedJob != null)
-                    {
-                        schedJob.Definition = this;
-                        schedJob.AllowSetShouldExit = true;
-                    }
-
-                    // Update job store data when job begins.
-                    job.StateChanged += (object sender, JobStateEventArgs e) =>
-                        {
-                            if (e.JobStateInfo.State == JobState.Running)
-                            {
-                                // Write job to store with this running state.
-                                jobManager.PersistJob(job, Definition);
-                            }
-                        };
-
-                    job.StartJob();
-
-                    // Log scheduled job start.
-                    _tracer.WriteScheduledJobStartEvent(
-                        job.Name,
-                        job.PSBeginTime.ToString());
-
-                    // Wait for job to finish.
-                    job.Finished.WaitOne();
-
-                    // Ensure that the job run results are persisted to store.
-                    jobManager.PersistJob(job, Definition);
-
-                    // Perform a Receive-Job on the job object.  Output data will be dropped
-                    // but we do this to execute any client method calls, in particular we
-                    // want SetShouldExit to set the correct exit code on the process for
-                    // use inside Task Scheduler.
-                    using (System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create())
-                    {
-                        // Run on the default runspace.
-                        ps.AddCommand("Receive-Job").AddParameter("Job", job).AddParameter("Keep", true);
-                        ps.Invoke();
-                    }
-
-                    // Log scheduled job finish.
-                    _tracer.WriteScheduledJobCompleteEvent(
-                        job.Name,
-                        job.PSEndTime.ToString(),
-                        job.JobStateInfo.State.ToString());
-                }
-                catch (RuntimeException e)
-                {
-                    ex = e;
-                }
-                catch (InvalidOperationException e)
-                {
-                    ex = e;
-                }
-                catch (System.Security.SecurityException e)
-                {
-                    ex = e;
-                }
-                catch (IOException e)
-                {
-                    ex = e;
-                }
-                catch (UnauthorizedAccessException e)
-                {
-                    ex = e;
-                }
-                catch (ArgumentException e)
-                {
-                    ex = e;
-                }
-                catch (ScriptCallDepthException e)
-                {
-                    ex = e;
-                }
-                catch (System.Runtime.Serialization.SerializationException e)
-                {
-                    ex = e;
-                }
-                catch (System.Runtime.Serialization.InvalidDataContractException e)
-                {
-                    ex = e;
-                }
-                catch (System.Xml.XmlException e)
-                {
-                    ex = e;
-                }
-                catch (Microsoft.PowerShell.ScheduledJob.ScheduledJobException e)
-                {
-                    ex = e;
-                }
-
-                if (ex != null)
-                {
-                    // Log error.
-                    _tracer.WriteScheduledJobErrorEvent(
-                        this.Name,
-                        ex.Message,
-                        ex.StackTrace.ToString(),
-                        (ex.InnerException != null) ? ex.InnerException.Message : string.Empty);
-
-                    throw ex;
-                }
-            }
-
-            return job;
-        }
-
-        #endregion
-    }
-
-    #region ScheduledJobDefinition Repository
-
-    /// <summary>
-    /// Collection of ScheduledJobDefinition objects.
-    /// </summary>
-    internal class ScheduledJobDefinitionRepository
-    {
-        #region Private Members
-
-        private object _syncObject = new object();
-        private Dictionary<string, ScheduledJobDefinition> _definitions = new Dictionary<string, ScheduledJobDefinition>();
-
-        #endregion
-
-        #region Public Properties
-
-        /// <summary>
-        /// Returns all definition objects in the repository as a List.
-        /// </summary>
-        public List<ScheduledJobDefinition> Definitions
-        {
-            get
-            {
-                lock (_syncObject)
-                {
-                    // Sort returned list by Ids.
-                    List<ScheduledJobDefinition> rtnList =
-                            new List<ScheduledJobDefinition>(_definitions.Values);
-
-                    rtnList.Sort((firstJob, secondJob) =>
-                        {
-                            if (firstJob.Id > secondJob.Id)
-                            {
-                                return 1;
-                            }
-                            else if (firstJob.Id < secondJob.Id)
-                            {
-                                return -1;
-                            }
-                            else
-                            {
-                                return 0;
-                            }
-                        });
-
-                    return rtnList;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Returns count of object in repository.
-        /// </summary>
-        public int Count
-        {
-            get
-            {
-                lock (_syncObject)
-                {
-                    return _definitions.Count;
-                }
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Add ScheduledJobDefinition to repository.
-        /// </summary>
-        /// <param name="jobDef"></param>
-        public void Add(ScheduledJobDefinition jobDef)
-        {
-            if (jobDef == null)
-            {
-                throw new PSArgumentNullException("jobDef");
-            }
-
-            lock (_syncObject)
-            {
-                if (_definitions.ContainsKey(jobDef.Name))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.DefinitionAlreadyExistsInLocal, jobDef.Name, jobDef.GlobalId);
-                    throw new ScheduledJobException(msg);
-                }
-
-                _definitions.Add(jobDef.Name, jobDef);
-            }
-        }
-
-        /// <summary>
-        /// Add or replace passed in ScheduledJobDefinition object to repository.
-        /// </summary>
-        /// <param name="jobDef"></param>
-        public void AddOrReplace(ScheduledJobDefinition jobDef)
-        {
-            if (jobDef == null)
-            {
-                throw new PSArgumentNullException("jobDef");
-            }
-
-            lock (_syncObject)
-            {
-                if (_definitions.ContainsKey(jobDef.Name))
-                {
-                    _definitions.Remove(jobDef.Name);
-                }
-
-                _definitions.Add(jobDef.Name, jobDef);
-            }
-        }
-
-        /// <summary>
-        /// Remove ScheduledJobDefinition from repository.
-        /// </summary>
-        /// <param name="jobDef"></param>
-        public void Remove(ScheduledJobDefinition jobDef)
-        {
-            if (jobDef == null)
-            {
-                throw new PSArgumentNullException("jobDef");
-            }
-
-            lock (_syncObject)
-            {
-                if (_definitions.ContainsKey(jobDef.Name))
-                {
-                    _definitions.Remove(jobDef.Name);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Checks to see if a ScheduledJobDefinition object exists with
-        /// the provided definition name.
-        /// </summary>
-        /// <param name="jobDefName">Definition name.</param>
-        /// <returns>True if definition exists.</returns>
-        public bool Contains(string jobDefName)
-        {
-            lock (_syncObject)
-            {
-                return _definitions.ContainsKey(jobDefName);
-            }
-        }
-
-        /// <summary>
-        /// Clears all ScheduledJobDefinition items from the repository.
-        /// </summary>
-        public void Clear()
-        {
-            lock (_syncObject)
-            {
-                _definitions.Clear();
-            }
-        }
-
-        #endregion
-    }
-
-    #endregion
-
-    #region Exceptions
-
-    /// <summary>
-    /// Exception thrown for errors in Scheduled Jobs.
-    /// </summary>
-    [Serializable]
-    public class ScheduledJobException : SystemException
-    {
-        /// <summary>
-        /// Creates a new instance of ScheduledJobException class.
-        /// </summary>
-        public ScheduledJobException()
-            : base
-            (
-                StringUtil.Format(ScheduledJobErrorStrings.GeneralWTSError)
-            )
-        {
-        }
-
-        /// <summary>
-        /// Creates a new instance of ScheduledJobException class.
-        /// </summary>
-        /// <param name="message">
-        /// The error message that explains the reason for the exception.
-        /// </param>
-        public ScheduledJobException(string message)
-            : base(message)
-        {
-        }
-
-        /// <summary>
-        /// Creates a new instance of ScheduledJobException class.
-        /// </summary>
-        /// <param name="message">
-        /// The error message that explains the reason for the exception.
-        /// </param>
-        /// <param name="innerException">
-        /// The exception that is the cause of the current exception.
-        /// </param>
-        public ScheduledJobException(string message, Exception innerException)
-            : base(message, innerException)
-        {
-        }
-
-        /// <summary>
-        /// Fully qualified error id for exception.
-        /// </summary>
-        internal string FQEID
-        {
-            get { return _fqeid; }
-
-            set { _fqeid = value ?? string.Empty; }
-        }
-
-        private string _fqeid = string.Empty;
-    }
-
-    #endregion
-
-    #region Utilities
-
-    /// <summary>
-    /// Simple string formatting helper.
-    /// </summary>
-    internal class StringUtil
-    {
-        internal static string Format(string formatSpec, object o)
-        {
-            return string.Format(System.Threading.Thread.CurrentThread.CurrentCulture, formatSpec, o);
-        }
-
-        internal static string Format(string formatSpec, params object[] o)
-        {
-            return string.Format(System.Threading.Thread.CurrentThread.CurrentCulture, formatSpec, o);
-        }
-    }
-
-    #endregion
-
-    #region ScheduledJobInvocationInfo Class
-
-    /// <summary>
-    /// This class defines the JobInvocationInfo class for PowerShell jobs
-    /// for job scheduling.  The following parameters are supported:
-    ///
-    ///  "ScriptBlock"             -> ScriptBlock
-    ///  "FilePath"                -> String
-    ///  "InitializationScript"    -> ScriptBlock
-    ///  "ArgumentList"            -> object[]
-    ///  "RunAs32"                 -> Boolean
-    ///  "Authentication"          -> AuthenticationMechanism.
-    /// </summary>
-    [Serializable]
-    public sealed class ScheduledJobInvocationInfo : JobInvocationInfo
-    {
-        #region Constructors
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="definition">JobDefinition.</param>
-        /// <param name="parameters">Dictionary of parameters.</param>
-        public ScheduledJobInvocationInfo(JobDefinition definition, Dictionary<string, object> parameters)
-            : base(definition, parameters)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            Name = definition.Name;
-        }
-
-        #endregion
-
-        #region Public Strings
-
-        /// <summary>
-        /// ScriptBlock parameter.
-        /// </summary>
-        public const string ScriptBlockParameter = "ScriptBlock";
-
-        /// <summary>
-        /// FilePath parameter.
-        /// </summary>
-        public const string FilePathParameter = "FilePath";
-
-        /// <summary>
-        /// RunAs32 parameter.
-        /// </summary>
-        public const string RunAs32Parameter = "RunAs32";
-
-        /// <summary>
-        /// Authentication parameter.
-        /// </summary>
-        public const string AuthenticationParameter = "Authentication";
-
-        /// <summary>
-        /// InitializationScript parameter.
-        /// </summary>
-        public const string InitializationScriptParameter = "InitializationScript";
-
-        /// <summary>
-        /// ArgumentList parameter.
-        /// </summary>
-        public const string ArgumentListParameter = "ArgumentList";
-
-        #endregion
-
-        #region ISerializable Implementation
-
-        /// <summary>
-        /// Serialization constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        internal ScheduledJobInvocationInfo(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            DeserializeInvocationInfo(info);
-        }
-
-        /// <summary>
-        /// Serialization implementation.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            SerializeInvocationInfo(info);
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void SerializeInvocationInfo(SerializationInfo info)
-        {
-            info.AddValue("InvocationInfo_Command", this.Command);
-            info.AddValue("InvocationInfo_Name", this.Name);
-            info.AddValue("InvocationInfo_AdapterType", this.Definition.JobSourceAdapterType);
-            info.AddValue("InvocationInfo_ModuleName", this.Definition.ModuleName);
-            info.AddValue("InvocationInfo_AdapterTypeName", this.Definition.JobSourceAdapterTypeName);
-
-            // Get the job parameters.
-            Dictionary<string, object> parameters = new Dictionary<string, object>();
-            foreach (var commandParam in this.Parameters[0])
-            {
-                if (!parameters.ContainsKey(commandParam.Name))
-                {
-                    parameters.Add(commandParam.Name, commandParam.Value);
-                }
-            }
-
-            //
-            // Serialize only parameters that scheduled job knows about.
-            //
-
-            // ScriptBlock
-            if (parameters.ContainsKey(ScriptBlockParameter))
-            {
-                ScriptBlock scriptBlock = (ScriptBlock)parameters[ScriptBlockParameter];
-                info.AddValue("InvocationParam_ScriptBlock", scriptBlock.ToString());
-            }
-            else
-            {
-                info.AddValue("InvocationParam_ScriptBlock", null);
-            }
-
-            // FilePath
-            if (parameters.ContainsKey(FilePathParameter))
-            {
-                string filePath = (string)parameters[FilePathParameter];
-                info.AddValue("InvocationParam_FilePath", filePath);
-            }
-            else
-            {
-                info.AddValue("InvocationParam_FilePath", string.Empty);
-            }
-
-            // InitializationScript
-            if (parameters.ContainsKey(InitializationScriptParameter))
-            {
-                ScriptBlock scriptBlock = (ScriptBlock)parameters[InitializationScriptParameter];
-                info.AddValue("InvocationParam_InitScript", scriptBlock.ToString());
-            }
-            else
-            {
-                info.AddValue("InvocationParam_InitScript", string.Empty);
-            }
-
-            // RunAs32
-            if (parameters.ContainsKey(RunAs32Parameter))
-            {
-                bool runAs32 = (bool)parameters[RunAs32Parameter];
-                info.AddValue("InvocationParam_RunAs32", runAs32);
-            }
-            else
-            {
-                info.AddValue("InvocationParam_RunAs32", false);
-            }
-
-            // Authentication
-            if (parameters.ContainsKey(AuthenticationParameter))
-            {
-                AuthenticationMechanism authentication = (AuthenticationMechanism)parameters[AuthenticationParameter];
-                info.AddValue("InvocationParam_Authentication", authentication);
-            }
-            else
-            {
-                info.AddValue("InvocationParam_Authentication", AuthenticationMechanism.Default);
-            }
-
-            // ArgumentList
-            if (parameters.ContainsKey(ArgumentListParameter))
-            {
-                object[] argList = (object[])parameters[ArgumentListParameter];
-                info.AddValue("InvocationParam_ArgList", argList);
-            }
-            else
-            {
-                info.AddValue("InvocationParam_ArgList", null);
-            }
-        }
-
-        private void DeserializeInvocationInfo(SerializationInfo info)
-        {
-            string command = info.GetString("InvocationInfo_Command");
-            string name = info.GetString("InvocationInfo_Name");
-            string moduleName = info.GetString("InvocationInfo_ModuleName");
-            string adapterTypeName = info.GetString("InvocationInfo_AdapterTypeName");
-
-            //
-            // Parameters
-            Dictionary<string, object> parameters = new Dictionary<string, object>();
-
-            // ScriptBlock
-            string script = info.GetString("InvocationParam_ScriptBlock");
-            if (script != null)
-            {
-                parameters.Add(ScriptBlockParameter, ScriptBlock.Create(script));
-            }
-
-            // FilePath
-            string filePath = info.GetString("InvocationParam_FilePath");
-            if (!string.IsNullOrEmpty(filePath))
-            {
-                parameters.Add(FilePathParameter, filePath);
-            }
-
-            // InitializationScript
-            script = info.GetString("InvocationParam_InitScript");
-            if (!string.IsNullOrEmpty(script))
-            {
-                parameters.Add(InitializationScriptParameter, ScriptBlock.Create(script));
-            }
-
-            // RunAs32
-            bool runAs32 = info.GetBoolean("InvocationParam_RunAs32");
-            parameters.Add(RunAs32Parameter, runAs32);
-
-            // Authentication
-            AuthenticationMechanism authentication = (AuthenticationMechanism)info.GetValue("InvocationParam_Authentication",
-                typeof(AuthenticationMechanism));
-            parameters.Add(AuthenticationParameter, authentication);
-
-            // ArgumentList
-            object[] argList = (object[])info.GetValue("InvocationParam_ArgList", typeof(object[]));
-            if (argList != null)
-            {
-                parameters.Add(ArgumentListParameter, argList);
-            }
-
-            JobDefinition jobDefinition = new JobDefinition(null, command, name);
-            jobDefinition.ModuleName = moduleName;
-            jobDefinition.JobSourceAdapterTypeName = adapterTypeName;
-
-            // Convert to JobInvocationParameter collection
-            CommandParameterCollection paramCollection = new CommandParameterCollection();
-            foreach (KeyValuePair<string, object> param in parameters)
-            {
-                CommandParameter paramItem = new CommandParameter(param.Key, param.Value);
-                paramCollection.Add(paramItem);
-            }
-
-            this.Definition = jobDefinition;
-            this.Name = name;
-            this.Command = command;
-            this.Parameters.Add(paramCollection);
-        }
-
-        #endregion
-    }
-
-    #endregion
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobOptions.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobOptions.cs
deleted file mode 100644
index 8f171cd02ba..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobOptions.cs
+++ /dev/null
@@ -1,405 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Management.Automation;
-using System.Runtime.Serialization;
-using System.Security.Permissions;
-using System.Text;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This class contains Windows Task Scheduler options.
-    /// </summary>
-    [Serializable]
-    public sealed class ScheduledJobOptions : ISerializable
-    {
-        #region Private Members
-
-        // Power settings
-        private bool _startIfOnBatteries;
-        private bool _stopIfGoingOnBatteries;
-        private bool _wakeToRun;
-
-        // Idle settings
-        private bool _startIfNotIdle;
-        private bool _stopIfGoingOffIdle;
-        private bool _restartOnIdleResume;
-        private TimeSpan _idleDuration;
-        private TimeSpan _idleTimeout;
-
-        // Security settings
-        private bool _showInTaskScheduler;
-        private bool _runElevated;
-
-        // Misc
-        private bool _runWithoutNetwork;
-        private bool _donotAllowDemandStart;
-        private TaskMultipleInstancePolicy _multipleInstancePolicy;
-
-        // ScheduledJobDefinition object associated with this options object.
-        private ScheduledJobDefinition _jobDefAssociation;
-
-        #endregion
-
-        #region Public Properties
-
-        /// <summary>
-        /// Start task if on batteries.
-        /// </summary>
-        public bool StartIfOnBatteries
-        {
-            get { return _startIfOnBatteries; }
-
-            set { _startIfOnBatteries = value; }
-        }
-
-        /// <summary>
-        /// Stop task if computer is going on batteries.
-        /// </summary>
-        public bool StopIfGoingOnBatteries
-        {
-            get { return _stopIfGoingOnBatteries; }
-
-            set { _stopIfGoingOnBatteries = value; }
-        }
-
-        /// <summary>
-        /// Wake computer to run task.
-        /// </summary>
-        public bool WakeToRun
-        {
-            get { return _wakeToRun; }
-
-            set { _wakeToRun = value; }
-        }
-
-        /// <summary>
-        /// Start task only if computer is not idle.
-        /// </summary>
-        public bool StartIfNotIdle
-        {
-            get { return _startIfNotIdle; }
-
-            set { _startIfNotIdle = value; }
-        }
-
-        /// <summary>
-        /// Stop task if computer is no longer idle.
-        /// </summary>
-        public bool StopIfGoingOffIdle
-        {
-            get { return _stopIfGoingOffIdle; }
-
-            set { _stopIfGoingOffIdle = value; }
-        }
-        /// <summary>
-        /// Restart task on idle resuming.
-        /// </summary>
-        public bool RestartOnIdleResume
-        {
-            get { return _restartOnIdleResume; }
-
-            set { _restartOnIdleResume = value; }
-        }
-
-        /// <summary>
-        /// How long computer must be idle before task starts.
-        /// </summary>
-        public TimeSpan IdleDuration
-        {
-            get { return _idleDuration; }
-
-            set { _idleDuration = value; }
-        }
-
-        /// <summary>
-        /// How long task manager will wait for required idle duration.
-        /// </summary>
-        public TimeSpan IdleTimeout
-        {
-            get { return _idleTimeout; }
-
-            set { _idleTimeout = value; }
-        }
-
-        /// <summary>
-        /// When true task is not shown in Task Scheduler UI.
-        /// </summary>
-        public bool ShowInTaskScheduler
-        {
-            get { return _showInTaskScheduler; }
-
-            set { _showInTaskScheduler = value; }
-        }
-
-        /// <summary>
-        /// Run task with elevated privileges.
-        /// </summary>
-        public bool RunElevated
-        {
-            get { return _runElevated; }
-
-            set { _runElevated = value; }
-        }
-
-        /// <summary>
-        /// Run task even if network is not available.
-        /// </summary>
-        public bool RunWithoutNetwork
-        {
-            get { return _runWithoutNetwork; }
-
-            set { _runWithoutNetwork = value; }
-        }
-
-        /// <summary>
-        /// Do not allow a task to be started on demand.
-        /// </summary>
-        public bool DoNotAllowDemandStart
-        {
-            get { return _donotAllowDemandStart; }
-
-            set { _donotAllowDemandStart = value; }
-        }
-
-        /// <summary>
-        /// Multiple task instance policy.
-        /// </summary>
-        public TaskMultipleInstancePolicy MultipleInstancePolicy
-        {
-            get { return _multipleInstancePolicy; }
-
-            set { _multipleInstancePolicy = value; }
-        }
-
-        /// <summary>
-        /// ScheduledJobDefinition object associated with this options object.
-        /// </summary>
-        public ScheduledJobDefinition JobDefinition
-        {
-            get { return _jobDefAssociation; }
-
-            internal set { _jobDefAssociation = value; }
-        }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Default constructor.
-        /// </summary>
-        public ScheduledJobOptions()
-        {
-            _startIfOnBatteries = false;
-            _stopIfGoingOnBatteries = true;
-            _wakeToRun = false;
-            _startIfNotIdle = true;
-            _stopIfGoingOffIdle = false;
-            _restartOnIdleResume = false;
-            _idleDuration = new TimeSpan(0, 10, 0);
-            _idleTimeout = new TimeSpan(1, 0, 0);
-            _showInTaskScheduler = true;
-            _runElevated = false;
-            _runWithoutNetwork = true;
-            _donotAllowDemandStart = false;
-            _multipleInstancePolicy = TaskMultipleInstancePolicy.IgnoreNew;
-        }
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="startIfOnBatteries"></param>
-        /// <param name="stopIfGoingOnBatters"></param>
-        /// <param name="wakeToRun"></param>
-        /// <param name="startIfNotIdle"></param>
-        /// <param name="stopIfGoingOffIdle"></param>
-        /// <param name="restartOnIdleResume"></param>
-        /// <param name="idleDuration"></param>
-        /// <param name="idleTimeout"></param>
-        /// <param name="showInTaskScheduler"></param>
-        /// <param name="runElevated"></param>
-        /// <param name="runWithoutNetwork"></param>
-        /// <param name="donotAllowDemandStart"></param>
-        /// <param name="multipleInstancePolicy"></param>
-        internal ScheduledJobOptions(
-            bool startIfOnBatteries,
-            bool stopIfGoingOnBatters,
-            bool wakeToRun,
-            bool startIfNotIdle,
-            bool stopIfGoingOffIdle,
-            bool restartOnIdleResume,
-            TimeSpan idleDuration,
-            TimeSpan idleTimeout,
-            bool showInTaskScheduler,
-            bool runElevated,
-            bool runWithoutNetwork,
-            bool donotAllowDemandStart,
-            TaskMultipleInstancePolicy multipleInstancePolicy)
-        {
-            _startIfOnBatteries = startIfOnBatteries;
-            _stopIfGoingOnBatteries = stopIfGoingOnBatters;
-            _wakeToRun = wakeToRun;
-            _startIfNotIdle = startIfNotIdle;
-            _stopIfGoingOffIdle = stopIfGoingOffIdle;
-            _restartOnIdleResume = restartOnIdleResume;
-            _idleDuration = idleDuration;
-            _idleTimeout = idleTimeout;
-            _showInTaskScheduler = showInTaskScheduler;
-            _runElevated = runElevated;
-            _runWithoutNetwork = runWithoutNetwork;
-            _donotAllowDemandStart = donotAllowDemandStart;
-            _multipleInstancePolicy = multipleInstancePolicy;
-        }
-
-        /// <summary>
-        /// Copy Constructor.
-        /// </summary>
-        /// <param name="copyOptions">Copy from.</param>
-        internal ScheduledJobOptions(
-            ScheduledJobOptions copyOptions)
-        {
-            if (copyOptions == null)
-            {
-                throw new PSArgumentNullException("copyOptions");
-            }
-
-            _startIfOnBatteries = copyOptions.StartIfOnBatteries;
-            _stopIfGoingOnBatteries = copyOptions.StopIfGoingOnBatteries;
-            _wakeToRun = copyOptions.WakeToRun;
-            _startIfNotIdle = copyOptions.StartIfNotIdle;
-            _stopIfGoingOffIdle = copyOptions.StopIfGoingOffIdle;
-            _restartOnIdleResume = copyOptions.RestartOnIdleResume;
-            _idleDuration = copyOptions.IdleDuration;
-            _idleTimeout = copyOptions.IdleTimeout;
-            _showInTaskScheduler = copyOptions.ShowInTaskScheduler;
-            _runElevated = copyOptions.RunElevated;
-            _runWithoutNetwork = copyOptions.RunWithoutNetwork;
-            _donotAllowDemandStart = copyOptions.DoNotAllowDemandStart;
-            _multipleInstancePolicy = copyOptions.MultipleInstancePolicy;
-
-            _jobDefAssociation = copyOptions.JobDefinition;
-        }
-
-        #endregion
-
-        #region ISerializable Implementation
-
-        /// <summary>
-        /// Serialization constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        private ScheduledJobOptions(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            _startIfOnBatteries = info.GetBoolean("StartIfOnBatteries_Value");
-            _stopIfGoingOnBatteries = info.GetBoolean("StopIfGoingOnBatteries_Value");
-            _wakeToRun = info.GetBoolean("WakeToRun_Value");
-            _startIfNotIdle = info.GetBoolean("StartIfNotIdle_Value");
-            _stopIfGoingOffIdle = info.GetBoolean("StopIfGoingOffIdle_Value");
-            _restartOnIdleResume = info.GetBoolean("RestartOnIdleResume_Value");
-            _idleDuration = (TimeSpan)info.GetValue("IdleDuration_Value", typeof(TimeSpan));
-            _idleTimeout = (TimeSpan)info.GetValue("IdleTimeout_Value", typeof(TimeSpan));
-            _showInTaskScheduler = info.GetBoolean("ShowInTaskScheduler_Value");
-            _runElevated = info.GetBoolean("RunElevated_Value");
-            _runWithoutNetwork = info.GetBoolean("RunWithoutNetwork_Value");
-            _donotAllowDemandStart = info.GetBoolean("DoNotAllowDemandStart_Value");
-            _multipleInstancePolicy = (TaskMultipleInstancePolicy)info.GetValue("TaskMultipleInstancePolicy_Value", typeof(TaskMultipleInstancePolicy));
-
-            // Runtime reference and not saved to store.
-            _jobDefAssociation = null;
-        }
-
-        /// <summary>
-        /// GetObjectData for ISerializable implementation.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        public void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            info.AddValue("StartIfOnBatteries_Value", _startIfOnBatteries);
-            info.AddValue("StopIfGoingOnBatteries_Value", _stopIfGoingOnBatteries);
-            info.AddValue("WakeToRun_Value", _wakeToRun);
-            info.AddValue("StartIfNotIdle_Value", _startIfNotIdle);
-            info.AddValue("StopIfGoingOffIdle_Value", _stopIfGoingOffIdle);
-            info.AddValue("RestartOnIdleResume_Value", _restartOnIdleResume);
-            info.AddValue("IdleDuration_Value", _idleDuration);
-            info.AddValue("IdleTimeout_Value", _idleTimeout);
-            info.AddValue("ShowInTaskScheduler_Value", _showInTaskScheduler);
-            info.AddValue("RunElevated_Value", _runElevated);
-            info.AddValue("RunWithoutNetwork_Value", _runWithoutNetwork);
-            info.AddValue("DoNotAllowDemandStart_Value", _donotAllowDemandStart);
-            info.AddValue("TaskMultipleInstancePolicy_Value", _multipleInstancePolicy);
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Update the associated ScheduledJobDefinition object with the
-        /// current properties of this object.
-        /// </summary>
-        public void UpdateJobDefinition()
-        {
-            if (_jobDefAssociation == null)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.NoAssociatedJobDefinitionForOption);
-
-                throw new RuntimeException(msg);
-            }
-
-            _jobDefAssociation.UpdateOptions(this, true);
-        }
-
-        #endregion
-    }
-
-    #region Public Enums
-
-    /// <summary>
-    /// Enumerates Task Scheduler options for multiple instance polices of
-    /// scheduled tasks (jobs).
-    /// </summary>
-    public enum TaskMultipleInstancePolicy
-    {
-        /// <summary>
-        /// None.
-        /// </summary>
-        None = 0,
-        /// <summary>
-        /// Ignore a new instance of the task (job)
-        /// </summary>
-        IgnoreNew = 1,
-        /// <summary>
-        /// Allow parallel running of a task (job)
-        /// </summary>
-        Parallel = 2,
-        /// <summary>
-        /// Queue up multiple instances of a task (job)
-        /// </summary>
-        Queue = 3,
-        /// <summary>
-        /// Stop currently running task (job) and start a new one.
-        /// </summary>
-        StopExisting = 4
-    }
-
-    #endregion
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobSourceAdapter.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobSourceAdapter.cs
deleted file mode 100644
index 53434c729e7..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobSourceAdapter.cs
+++ /dev/null
@@ -1,1088 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-using System.Runtime.Serialization;
-using System.Text;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This class provides functionality for retrieving scheduled job run results
-    /// from the scheduled job store.  An instance of this object will be registered
-    /// with the PowerShell JobManager so that GetJobs commands will retrieve schedule
-    /// job runs from the file based scheduled job store.  This allows scheduled job
-    /// runs to be managed from PowerShell in the same way workflow jobs are managed.
-    /// </summary>
-    public sealed class ScheduledJobSourceAdapter : JobSourceAdapter
-    {
-        #region Private Members
-
-        private static FileSystemWatcher StoreWatcher;
-        private static object SyncObject = new object();
-        private static ScheduledJobRepository JobRepository = new ScheduledJobRepository();
-        internal const string AdapterTypeName = "PSScheduledJob";
-
-        #endregion
-
-        #region Public Strings
-
-        /// <summary>
-        /// BeforeFilter.
-        /// </summary>
-        public const string BeforeFilter = "Before";
-
-        /// <summary>
-        /// AfterFilter.
-        /// </summary>
-        public const string AfterFilter = "After";
-
-        /// <summary>
-        /// NewestFilter.
-        /// </summary>
-        public const string NewestFilter = "Newest";
-
-        #endregion
-
-        #region Constructor
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        public ScheduledJobSourceAdapter()
-        {
-            Name = AdapterTypeName;
-        }
-
-        #endregion
-
-        #region JobSourceAdapter Implementation
-
-        /// <summary>
-        /// Create a new Job2 results instance.
-        /// </summary>
-        /// <param name="specification">Job specification.</param>
-        /// <returns>Job2.</returns>
-        public override Job2 NewJob(JobInvocationInfo specification)
-        {
-            if (specification == null)
-            {
-                throw new PSArgumentNullException("specification");
-            }
-
-            ScheduledJobDefinition scheduledJobDef = new ScheduledJobDefinition(
-                specification, null, null, null);
-
-            return new ScheduledJob(
-                specification.Command,
-                specification.Name,
-                scheduledJobDef);
-        }
-
-        /// <summary>
-        /// Creates a new Job2 object based on a definition name
-        /// that can be run manually.  If the path parameter is
-        /// null then a default location will be used to find the
-        /// job definition by name.
-        /// </summary>
-        /// <param name="definitionName">ScheduledJob definition name.</param>
-        /// <param name="definitionPath">ScheduledJob definition file path.</param>
-        /// <returns>Job2 object.</returns>
-        public override Job2 NewJob(string definitionName, string definitionPath)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            Job2 rtnJob = null;
-            try
-            {
-                ScheduledJobDefinition scheduledJobDef =
-                    ScheduledJobDefinition.LoadFromStore(definitionName, definitionPath);
-
-                rtnJob = new ScheduledJob(
-                    scheduledJobDef.Command,
-                    scheduledJobDef.Name,
-                    scheduledJobDef);
-            }
-            catch (FileNotFoundException)
-            {
-                // Return null if no job definition exists.
-            }
-
-            return rtnJob;
-        }
-
-        /// <summary>
-        /// Get the list of jobs that are currently available in this
-        /// store.
-        /// </summary>
-        /// <returns>Collection of job objects.</returns>
-        public override IList<Job2> GetJobs()
-        {
-            RefreshRepository();
-
-            List<Job2> rtnJobs = new List<Job2>();
-            foreach (var job in JobRepository.Jobs)
-            {
-                rtnJobs.Add(job);
-            }
-
-            return rtnJobs;
-        }
-
-        /// <summary>
-        /// Get list of jobs that matches the specified names.
-        /// </summary>
-        /// <param name="name">names to match, can support
-        ///   wildcard if the store supports</param>
-        /// <param name="recurse"></param>
-        /// <returns>Collection of jobs that match the specified
-        /// criteria.</returns>
-        public override IList<Job2> GetJobsByName(string name, bool recurse)
-        {
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new PSArgumentException("name");
-            }
-
-            RefreshRepository();
-
-            WildcardPattern namePattern = new WildcardPattern(name, WildcardOptions.IgnoreCase);
-            List<Job2> rtnJobs = new List<Job2>();
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (namePattern.IsMatch(job.Name))
-                {
-                    rtnJobs.Add(job);
-                }
-            }
-
-            return rtnJobs;
-        }
-
-        /// <summary>
-        /// Get list of jobs that run the specified command.
-        /// </summary>
-        /// <param name="command">Command to match.</param>
-        /// <param name="recurse"></param>
-        /// <returns>Collection of jobs that match the specified
-        /// criteria.</returns>
-        public override IList<Job2> GetJobsByCommand(string command, bool recurse)
-        {
-            if (string.IsNullOrEmpty(command))
-            {
-                throw new PSArgumentException("command");
-            }
-
-            RefreshRepository();
-
-            WildcardPattern commandPattern = new WildcardPattern(command, WildcardOptions.IgnoreCase);
-            List<Job2> rtnJobs = new List<Job2>();
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (commandPattern.IsMatch(job.Command))
-                {
-                    rtnJobs.Add(job);
-                }
-            }
-
-            return rtnJobs;
-        }
-
-        /// <summary>
-        /// Get job that has the specified id.
-        /// </summary>
-        /// <param name="instanceId">Guid to match.</param>
-        /// <param name="recurse"></param>
-        /// <returns>Job with the specified guid.</returns>
-        public override Job2 GetJobByInstanceId(Guid instanceId, bool recurse)
-        {
-            RefreshRepository();
-
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (Guid.Equals(job.InstanceId, instanceId))
-                {
-                    return job;
-                }
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Get job that has specific session id.
-        /// </summary>
-        /// <param name="id">Id to match.</param>
-        /// <param name="recurse"></param>
-        /// <returns>Job with the specified id.</returns>
-        public override Job2 GetJobBySessionId(int id, bool recurse)
-        {
-            RefreshRepository();
-
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (id == job.Id)
-                {
-                    return job;
-                }
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Get list of jobs that are in the specified state.
-        /// </summary>
-        /// <param name="state">State to match.</param>
-        /// <param name="recurse"></param>
-        /// <returns>Collection of jobs with the specified
-        /// state.</returns>
-        public override IList<Job2> GetJobsByState(JobState state, bool recurse)
-        {
-            RefreshRepository();
-
-            List<Job2> rtnJobs = new List<Job2>();
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (state == job.JobStateInfo.State)
-                {
-                    rtnJobs.Add(job);
-                }
-            }
-
-            return rtnJobs;
-        }
-
-        /// <summary>
-        /// Get list of jobs based on the adapter specific
-        /// filter parameters.
-        /// </summary>
-        /// <param name="filter">dictionary containing name value
-        ///   pairs for adapter specific filters</param>
-        /// <param name="recurse"></param>
-        /// <returns>Collection of jobs that match the
-        /// specified criteria.</returns>
-        public override IList<Job2> GetJobsByFilter(Dictionary<string, object> filter, bool recurse)
-        {
-            if (filter == null)
-            {
-                throw new PSArgumentNullException("filter");
-            }
-
-            List<Job2> rtnJobs = new List<Job2>();
-            foreach (var filterItem in filter)
-            {
-                switch (filterItem.Key)
-                {
-                    case BeforeFilter:
-                        GetJobsBefore((DateTime)filterItem.Value, ref rtnJobs);
-                        break;
-
-                    case AfterFilter:
-                        GetJobsAfter((DateTime)filterItem.Value, ref rtnJobs);
-                        break;
-
-                    case NewestFilter:
-                        GetNewestJobs((int)filterItem.Value, ref rtnJobs);
-                        break;
-                }
-            }
-
-            return rtnJobs;
-        }
-
-        /// <summary>
-        /// Remove a job from the store.
-        /// </summary>
-        /// <param name="job">Job object to remove.</param>
-        public override void RemoveJob(Job2 job)
-        {
-            if (job == null)
-            {
-                throw new PSArgumentNullException("job");
-            }
-
-            RefreshRepository();
-
-            try
-            {
-                JobRepository.Remove(job);
-                ScheduledJobStore.RemoveJobRun(
-                    job.Name,
-                    job.PSBeginTime ?? DateTime.MinValue);
-            }
-            catch (DirectoryNotFoundException)
-            {
-            }
-            catch (FileNotFoundException)
-            {
-            }
-        }
-
-        /// <summary>
-        /// Saves job to scheduled job run store.
-        /// </summary>
-        /// <param name="job">ScheduledJob.</param>
-        public override void PersistJob(Job2 job)
-        {
-            if (job == null)
-            {
-                throw new PSArgumentNullException("job");
-            }
-
-            SaveJobToStore(job as ScheduledJob);
-        }
-
-        #endregion
-
-        #region Save Job
-
-        /// <summary>
-        /// Serializes a ScheduledJob and saves it to store.
-        /// </summary>
-        /// <param name="job">ScheduledJob.</param>
-        internal static void SaveJobToStore(ScheduledJob job)
-        {
-            string outputPath = job.Definition.OutputPath;
-            if (string.IsNullOrEmpty(outputPath))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.CantSaveJobNoFilePathSpecified,
-                    job.Name);
-                throw new ScheduledJobException(msg);
-            }
-
-            FileStream fsStatus = null;
-            FileStream fsResults = null;
-            try
-            {
-                // Check the job store results and if maximum number of results exist
-                // remove the oldest results folder to make room for these new results.
-                CheckJobStoreResults(outputPath, job.Definition.ExecutionHistoryLength);
-
-                fsStatus = ScheduledJobStore.CreateFileForJobRunItem(
-                    outputPath,
-                    job.PSBeginTime ?? DateTime.MinValue,
-                    ScheduledJobStore.JobRunItem.Status);
-
-                // Save status only in status file stream.
-                SaveStatusToFile(job, fsStatus);
-
-                fsResults = ScheduledJobStore.CreateFileForJobRunItem(
-                    outputPath,
-                    job.PSBeginTime ?? DateTime.MinValue,
-                    ScheduledJobStore.JobRunItem.Results);
-
-                // Save entire job in results file stream.
-                SaveResultsToFile(job, fsResults);
-            }
-            finally
-            {
-                if (fsStatus != null)
-                {
-                    fsStatus.Close();
-                }
-
-                if (fsResults != null)
-                {
-                    fsResults.Close();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Writes the job status information to the provided
-        /// file stream.
-        /// </summary>
-        /// <param name="job">ScheduledJob job to save.</param>
-        /// <param name="fs">FileStream.</param>
-        private static void SaveStatusToFile(ScheduledJob job, FileStream fs)
-        {
-            StatusInfo statusInfo = new StatusInfo(
-                job.InstanceId,
-                job.Name,
-                job.Location,
-                job.Command,
-                job.StatusMessage,
-                job.JobStateInfo.State,
-                job.HasMoreData,
-                job.PSBeginTime,
-                job.PSEndTime,
-                job.Definition);
-
-            XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-            serializer.WriteObject(fs, statusInfo);
-            fs.Flush();
-        }
-
-        /// <summary>
-        /// Writes the job (which implements ISerializable) to the provided
-        /// file stream.
-        /// </summary>
-        /// <param name="job">ScheduledJob job to save.</param>
-        /// <param name="fs">FileStream.</param>
-        private static void SaveResultsToFile(ScheduledJob job, FileStream fs)
-        {
-            XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-            serializer.WriteObject(fs, job);
-            fs.Flush();
-        }
-
-        /// <summary>
-        /// Check the job store results and if maximum number of results exist
-        /// remove the oldest results folder to make room for these new results.
-        /// </summary>
-        /// <param name="outputPath">Output path.</param>
-        /// <param name="executionHistoryLength">Maximum size of stored job results.</param>
-        private static void CheckJobStoreResults(string outputPath, int executionHistoryLength)
-        {
-            // Get current results for this job definition.
-            Collection<DateTime> jobRuns = ScheduledJobStore.GetJobRunsForDefinitionPath(outputPath);
-            if (jobRuns.Count <= executionHistoryLength)
-            {
-                // There is room for another job run in the store.
-                return;
-            }
-
-            // Remove the oldest job run from the store.
-            DateTime jobRunToRemove = DateTime.MaxValue;
-            foreach (DateTime jobRun in jobRuns)
-            {
-                jobRunToRemove = (jobRun < jobRunToRemove) ? jobRun : jobRunToRemove;
-            }
-
-            try
-            {
-                ScheduledJobStore.RemoveJobRunFromOutputPath(outputPath, jobRunToRemove);
-            }
-            catch (UnauthorizedAccessException)
-            { }
-        }
-
-        #endregion
-
-        #region Retrieve Job
-
-        /// <summary>
-        /// Finds and load the Job associated with this ScheduledJobDefinition object
-        /// having the job run date time provided.
-        /// </summary>
-        /// <param name="jobRun">DateTime of job run to load.</param>
-        /// <param name="definitionName">ScheduledJobDefinition name.</param>
-        /// <returns>Job2 job loaded from store.</returns>
-        internal static Job2 LoadJobFromStore(string definitionName, DateTime jobRun)
-        {
-            FileStream fsResults = null;
-            Exception ex = null;
-            bool corruptedFile = false;
-            Job2 job = null;
-
-            try
-            {
-                // Results
-                fsResults = ScheduledJobStore.GetFileForJobRunItem(
-                    definitionName,
-                    jobRun,
-                    ScheduledJobStore.JobRunItem.Results,
-                    FileMode.Open,
-                    FileAccess.Read,
-                    FileShare.Read);
-
-                job = LoadResultsFromFile(fsResults);
-            }
-            catch (ArgumentException e)
-            {
-                ex = e;
-            }
-            catch (DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (FileNotFoundException e)
-            {
-                ex = e;
-                corruptedFile = true;
-            }
-            catch (UnauthorizedAccessException e)
-            {
-                ex = e;
-            }
-            catch (IOException e)
-            {
-                ex = e;
-            }
-            catch (System.Runtime.Serialization.SerializationException)
-            {
-                corruptedFile = true;
-            }
-            catch (System.Runtime.Serialization.InvalidDataContractException)
-            {
-                corruptedFile = true;
-            }
-            catch (System.Xml.XmlException)
-            {
-                corruptedFile = true;
-            }
-            catch (System.TypeInitializationException)
-            {
-                corruptedFile = true;
-            }
-            finally
-            {
-                if (fsResults != null)
-                {
-                    fsResults.Close();
-                }
-            }
-
-            if (corruptedFile)
-            {
-                // Remove the corrupted job results file.
-                ScheduledJobStore.RemoveJobRun(definitionName, jobRun);
-            }
-
-            if (ex != null)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.CantLoadJobRunFromStore, definitionName, jobRun);
-                throw new ScheduledJobException(msg, ex);
-            }
-
-            return job;
-        }
-
-        /// <summary>
-        /// Loads the Job2 object from provided files stream.
-        /// </summary>
-        /// <param name="fs">FileStream from which to read job object.</param>
-        /// <returns>Created Job2 from file stream.</returns>
-        private static Job2 LoadResultsFromFile(FileStream fs)
-        {
-            XmlObjectSerializer serializer = new System.Runtime.Serialization.NetDataContractSerializer();
-            return (Job2)serializer.ReadObject(fs);
-        }
-
-        #endregion
-
-        #region Static Methods
-
-        /// <summary>
-        /// Adds a Job2 object to the repository.
-        /// </summary>
-        /// <param name="job">Job2.</param>
-        internal static void AddToRepository(Job2 job)
-        {
-            if (job == null)
-            {
-                throw new PSArgumentNullException("job");
-            }
-
-            JobRepository.AddOrReplace(job);
-        }
-
-        /// <summary>
-        /// Clears all items in the repository.
-        /// </summary>
-        internal static void ClearRepository()
-        {
-            JobRepository.Clear();
-        }
-
-        /// <summary>
-        /// Clears all items for given job definition name in the
-        /// repository.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        internal static void ClearRepositoryForDefinition(string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            // This returns a new list object of repository jobs.
-            List<Job2> jobList = JobRepository.Jobs;
-            foreach (var job in jobList)
-            {
-                if (string.Compare(definitionName, job.Name,
-                    StringComparison.OrdinalIgnoreCase) == 0)
-                {
-                    JobRepository.Remove(job);
-                }
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void RefreshRepository()
-        {
-            ScheduledJobStore.CreateDirectoryIfNotExists();
-            CreateFileSystemWatcher();
-
-            IEnumerable<string> jobDefinitions = ScheduledJobStore.GetJobDefinitions();
-            foreach (string definitionName in jobDefinitions)
-            {
-                // Create Job2 objects for each job run in store.
-                Collection<DateTime> jobRuns = GetJobRuns(definitionName);
-                if (jobRuns == null)
-                {
-                    continue;
-                }
-
-                ScheduledJobDefinition definition = null;
-                foreach (DateTime jobRun in jobRuns)
-                {
-                    if (jobRun > JobRepository.GetLatestJobRun(definitionName))
-                    {
-                        Job2 job;
-                        try
-                        {
-                            if (definition == null)
-                            {
-                                definition = ScheduledJobDefinition.LoadFromStore(definitionName, null);
-                            }
-
-                            job = LoadJobFromStore(definition.Name, jobRun);
-                        }
-                        catch (ScheduledJobException)
-                        {
-                            continue;
-                        }
-                        catch (DirectoryNotFoundException)
-                        {
-                            continue;
-                        }
-                        catch (FileNotFoundException)
-                        {
-                            continue;
-                        }
-                        catch (UnauthorizedAccessException)
-                        {
-                            continue;
-                        }
-                        catch (IOException)
-                        {
-                            continue;
-                        }
-
-                        JobRepository.AddOrReplace(job);
-                        JobRepository.SetLatestJobRun(definitionName, jobRun);
-                    }
-                }
-            }
-        }
-
-        private void CreateFileSystemWatcher()
-        {
-            // Lazily create the static file system watcher
-            // on first use.
-            if (StoreWatcher == null)
-            {
-                lock (SyncObject)
-                {
-                    if (StoreWatcher == null)
-                    {
-                        StoreWatcher = new FileSystemWatcher(ScheduledJobStore.GetJobDefinitionLocation());
-                        StoreWatcher.IncludeSubdirectories = true;
-                        StoreWatcher.NotifyFilter = NotifyFilters.LastWrite;
-                        StoreWatcher.Filter = "Results.xml";
-                        StoreWatcher.EnableRaisingEvents = true;
-                        StoreWatcher.Changed += (object sender, FileSystemEventArgs e) =>
-                        {
-                            UpdateRepositoryObjects(e);
-                        };
-                    }
-                }
-            }
-        }
-
-        private static void UpdateRepositoryObjects(FileSystemEventArgs e)
-        {
-            // Extract job run information from change file path.
-            string updateDefinitionName;
-            DateTime updateJobRun;
-            if (!GetJobRunInfo(e.Name, out updateDefinitionName, out updateJobRun))
-            {
-                System.Diagnostics.Debug.Assert(false, "All job run updates should have valid directory names.");
-                return;
-            }
-
-            // Find corresponding job in repository.
-            ScheduledJob updateJob = JobRepository.GetJob(updateDefinitionName, updateJobRun);
-            if (updateJob == null)
-            {
-                return;
-            }
-
-            // Load updated job information from store.
-            Job2 job = null;
-            try
-            {
-                job = LoadJobFromStore(updateDefinitionName, updateJobRun);
-            }
-            catch (ScheduledJobException)
-            { }
-            catch (DirectoryNotFoundException)
-            { }
-            catch (FileNotFoundException)
-            { }
-            catch (UnauthorizedAccessException)
-            { }
-            catch (IOException)
-            { }
-
-            // Update job in repository based on new job store data.
-            if (job != null)
-            {
-                updateJob.Update(job as ScheduledJob);
-            }
-        }
-
-        /// <summary>
-        /// Parses job definition name and job run DateTime from provided path string.
-        /// Example:
-        ///   path = "ScheduledJob1\\Output\\20111219-200921-369\\Results.xml"
-        ///      'ScheduledJob1' is the definition name.
-        ///      '20111219-200921-369' is the jobRun DateTime.
-        /// </summary>
-        /// <param name="path"></param>
-        /// <param name="definitionName"></param>
-        /// <param name="jobRunReturn"></param>
-        /// <returns></returns>
-        private static bool GetJobRunInfo(
-            string path,
-            out string definitionName,
-            out DateTime jobRunReturn)
-        {
-            // Parse definition name from path.
-            string[] pathItems = path.Split(System.IO.Path.DirectorySeparatorChar);
-            if (pathItems.Length == 4)
-            {
-                definitionName = pathItems[0];
-                return ScheduledJobStore.ConvertJobRunNameToDateTime(pathItems[2], out jobRunReturn);
-            }
-
-            definitionName = null;
-            jobRunReturn = DateTime.MinValue;
-            return false;
-        }
-
-        internal static Collection<DateTime> GetJobRuns(string definitionName)
-        {
-            Collection<DateTime> jobRuns = null;
-            try
-            {
-                jobRuns = ScheduledJobStore.GetJobRunsForDefinition(definitionName);
-            }
-            catch (DirectoryNotFoundException)
-            { }
-            catch (FileNotFoundException)
-            { }
-            catch (UnauthorizedAccessException)
-            { }
-            catch (IOException)
-            { }
-
-            return jobRuns;
-        }
-
-        private void GetJobsBefore(
-            DateTime dateTime,
-            ref List<Job2> jobList)
-        {
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (job.PSEndTime < dateTime &&
-                    !jobList.Contains(job))
-                {
-                    jobList.Add(job);
-                }
-            }
-        }
-
-        private void GetJobsAfter(
-            DateTime dateTime,
-            ref List<Job2> jobList)
-        {
-            foreach (var job in JobRepository.Jobs)
-            {
-                if (job.PSEndTime > dateTime &&
-                    !jobList.Contains(job))
-                {
-                    jobList.Add(job);
-                }
-            }
-        }
-
-        private void GetNewestJobs(
-            int maxNumber,
-            ref List<Job2> jobList)
-        {
-            List<Job2> allJobs = JobRepository.Jobs;
-
-            // Sort descending.
-            allJobs.Sort((firstJob, secondJob) =>
-                {
-                    if (firstJob.PSEndTime > secondJob.PSEndTime)
-                    {
-                        return -1;
-                    }
-                    else if (firstJob.PSEndTime < secondJob.PSEndTime)
-                    {
-                        return 1;
-                    }
-                    else
-                    {
-                        return 0;
-                    }
-                });
-
-            int count = 0;
-            foreach (var job in allJobs)
-            {
-                if (++count > maxNumber)
-                {
-                    break;
-                }
-
-                if (!jobList.Contains(job))
-                {
-                    jobList.Add(job);
-                }
-            }
-        }
-
-        #endregion
-
-        #region Private Repository Class
-
-        /// <summary>
-        /// Collection of Job2 objects.
-        /// </summary>
-        internal class ScheduledJobRepository
-        {
-            #region Private Members
-
-            private object _syncObject = new object();
-            private Dictionary<Guid, Job2> _jobs = new Dictionary<Guid, Job2>();
-            private Dictionary<string, DateTime> _latestJobRuns = new Dictionary<string, DateTime>();
-
-            #endregion
-
-            #region Public Properties
-
-            /// <summary>
-            /// Returns all job objects in the repository as a List.
-            /// </summary>
-            public List<Job2> Jobs
-            {
-                get
-                {
-                    lock (_syncObject)
-                    {
-                        return new List<Job2>(_jobs.Values);
-                    }
-                }
-            }
-
-            /// <summary>
-            /// Returns count of jobs in repository.
-            /// </summary>
-            public int Count
-            {
-                get
-                {
-                    lock (_syncObject)
-                    {
-                        return _jobs.Count;
-                    }
-                }
-            }
-
-            #endregion
-
-            #region Public Methods
-
-            /// <summary>
-            /// Add Job2 to repository.
-            /// </summary>
-            /// <param name="job">Job2 to add.</param>
-            public void Add(Job2 job)
-            {
-                if (job == null)
-                {
-                    throw new PSArgumentNullException("job");
-                }
-
-                lock (_syncObject)
-                {
-                    if (_jobs.ContainsKey(job.InstanceId))
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.ScheduledJobAlreadyExistsInLocal, job.Name, job.InstanceId);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    _jobs.Add(job.InstanceId, job);
-                }
-            }
-
-            /// <summary>
-            /// Add or replace passed in Job2 object to repository.
-            /// </summary>
-            /// <param name="job">Job2 to add.</param>
-            public void AddOrReplace(Job2 job)
-            {
-                if (job == null)
-                {
-                    throw new PSArgumentNullException("job");
-                }
-
-                lock (_syncObject)
-                {
-                    if (_jobs.ContainsKey(job.InstanceId))
-                    {
-                        _jobs.Remove(job.InstanceId);
-                    }
-
-                    _jobs.Add(job.InstanceId, job);
-                }
-            }
-
-            /// <summary>
-            /// Remove Job2 from repository.
-            /// </summary>
-            /// <param name="job"></param>
-            public void Remove(Job2 job)
-            {
-                if (job == null)
-                {
-                    throw new PSArgumentNullException("job");
-                }
-
-                lock (_syncObject)
-                {
-                    if (_jobs.ContainsKey(job.InstanceId) == false)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.ScheduledJobNotInRepository, job.Name);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    _jobs.Remove(job.InstanceId);
-                }
-            }
-
-            /// <summary>
-            /// Clears all Job2 items from the repository.
-            /// </summary>
-            public void Clear()
-            {
-                lock (_syncObject)
-                {
-                    _jobs.Clear();
-                }
-            }
-
-            /// <summary>
-            /// Gets the latest job run Date/Time for the given definition name.
-            /// </summary>
-            /// <param name="definitionName">ScheduledJobDefinition name.</param>
-            /// <returns>Job Run DateTime.</returns>
-            public DateTime GetLatestJobRun(string definitionName)
-            {
-                if (string.IsNullOrEmpty(definitionName))
-                {
-                    throw new PSArgumentException("definitionName");
-                }
-
-                lock (_syncObject)
-                {
-                    if (_latestJobRuns.ContainsKey(definitionName))
-                    {
-                        return _latestJobRuns[definitionName];
-                    }
-                    else
-                    {
-                        DateTime startJobRun = DateTime.MinValue;
-                        _latestJobRuns.Add(definitionName, startJobRun);
-                        return startJobRun;
-                    }
-                }
-            }
-
-            /// <summary>
-            /// Sets the latest job run Date/Time for the given definition name.
-            /// </summary>
-            /// <param name="definitionName"></param>
-            /// <param name="jobRun"></param>
-            public void SetLatestJobRun(string definitionName, DateTime jobRun)
-            {
-                if (string.IsNullOrEmpty(definitionName))
-                {
-                    throw new PSArgumentException("definitionName");
-                }
-
-                lock (_syncObject)
-                {
-                    if (_latestJobRuns.ContainsKey(definitionName))
-                    {
-                        _latestJobRuns.Remove(definitionName);
-                        _latestJobRuns.Add(definitionName, jobRun);
-                    }
-                    else
-                    {
-                        _latestJobRuns.Add(definitionName, jobRun);
-                    }
-                }
-            }
-
-            /// <summary>
-            /// Search repository for specific job run.
-            /// </summary>
-            /// <param name="definitionName">Definition name.</param>
-            /// <param name="jobRun">Job run DateTime.</param>
-            /// <returns>Scheduled job if found.</returns>
-            public ScheduledJob GetJob(string definitionName, DateTime jobRun)
-            {
-                lock (_syncObject)
-                {
-                    foreach (ScheduledJob job in _jobs.Values)
-                    {
-                        if (job.PSBeginTime == null)
-                        {
-                            continue;
-                        }
-
-                        DateTime PSBeginTime = job.PSBeginTime ?? DateTime.MinValue;
-                        if (definitionName.Equals(job.Definition.Name, StringComparison.OrdinalIgnoreCase) &&
-                            jobRun.Year == PSBeginTime.Year &&
-                            jobRun.Month == PSBeginTime.Month &&
-                            jobRun.Day == PSBeginTime.Day &&
-                            jobRun.Hour == PSBeginTime.Hour &&
-                            jobRun.Minute == PSBeginTime.Minute &&
-                            jobRun.Second == PSBeginTime.Second &&
-                            jobRun.Millisecond == PSBeginTime.Millisecond)
-                        {
-                            return job;
-                        }
-                    }
-                }
-
-                return null;
-            }
-
-            #endregion
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobStore.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobStore.cs
deleted file mode 100644
index bd9d7439696..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobStore.cs
+++ /dev/null
@@ -1,683 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Globalization;
-using System.IO;
-using System.Management.Automation;
-using System.Security.AccessControl;
-using System.Security.Principal;
-using System.Text;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This class encapsulates the work of determining the file location where
-    /// a job definition will be stored and retrieved and where job runs will
-    /// be stored and retrieved.  Scheduled job definitions are stored in a
-    /// location based on the current user.  Job runs are stored in the
-    /// corresponding scheduled job definition location under an "Output"
-    /// directory, where each run will have a subdirectory with a name derived
-    /// from the job run date/time.
-    ///
-    /// File Structure for "JobDefinitionFoo":
-    /// $env:User\AppData\Local\Windows\PowerShell\ScheduledJobs\JobDefinitionFoo\
-    ///     ScheduledJobDefinition.xml
-    ///     Output\
-    ///         110321-130942\
-    ///             Status.xml
-    ///             Results.xml
-    ///         110319-173502\
-    ///             Status.xml
-    ///             Results.xml
-    ///         ...
-    /// </summary>
-    internal class ScheduledJobStore
-    {
-        #region Public Enums
-
-        public enum JobRunItem
-        {
-            None = 0,
-            Status = 1,
-            Results = 2
-        }
-
-        #endregion
-
-        #region Public Strings
-
-        public const string ScheduledJobsPath = @"Microsoft\Windows\PowerShell\ScheduledJobs";
-        public const string DefinitionFileName = "ScheduledJobDefinition";
-        public const string JobRunOutput = "Output";
-        public const string ScheduledJobDefExistsFQEID = "ScheduledJobDefExists";
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Returns FileStream object for existing scheduled job definition.
-        /// Definition file is looked for in the default user local appdata path.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <param name="fileMode">File mode.</param>
-        /// <param name="fileAccess">File access.</param>
-        /// <param name="fileShare">File share.</param>
-        /// <returns>FileStream object.</returns>
-        public static FileStream GetFileForJobDefinition(
-            string definitionName,
-            FileMode fileMode,
-            FileAccess fileAccess,
-            FileShare fileShare)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            string filePathName = GetFilePathName(definitionName, DefinitionFileName);
-            return File.Open(filePathName, fileMode, fileAccess, fileShare);
-        }
-
-        /// <summary>
-        /// Returns FileStream object for existing scheduled job definition.
-        /// Definition file is looked for in the path provided.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <param name="definitionPath">Scheduled job definition file path.</param>
-        /// <param name="fileMode">File mode.</param>
-        /// <param name="fileAccess">File share.</param>
-        /// <param name="fileShare">File share.</param>
-        /// <returns></returns>
-        public static FileStream GetFileForJobDefinition(
-            string definitionName,
-            string definitionPath,
-            FileMode fileMode,
-            FileAccess fileAccess,
-            FileShare fileShare)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            if (string.IsNullOrEmpty(definitionPath))
-            {
-                throw new PSArgumentException("definitionPath");
-            }
-
-            string filePathName = string.Format(CultureInfo.InvariantCulture, @"{0}\{1}\{2}.xml",
-                definitionPath, definitionName, DefinitionFileName);
-            return File.Open(filePathName, fileMode, fileAccess, fileShare);
-        }
-
-        /// <summary>
-        /// Checks the provided path against the the default path of scheduled jobs
-        /// for the current user.
-        /// </summary>
-        /// <param name="definitionPath">Path for scheduled job definitions.</param>
-        /// <returns>True if paths are equal.</returns>
-        public static bool IsDefaultUserPath(string definitionPath)
-        {
-            return definitionPath.Equals(GetJobDefinitionLocation(), StringComparison.OrdinalIgnoreCase);
-        }
-
-        /// <summary>
-        /// Returns a FileStream object for a new scheduled job definition name.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <returns>FileStream object.</returns>
-        public static FileStream CreateFileForJobDefinition(
-            string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            string filePathName = CreateFilePathName(definitionName, DefinitionFileName);
-            return File.Create(filePathName);
-        }
-
-        /// <summary>
-        /// Returns an IEnumerable object of scheduled job definition names in
-        /// the job store.
-        /// </summary>
-        /// <returns>IEnumerable of job definition names.</returns>
-        public static IEnumerable<string> GetJobDefinitions()
-        {
-            // Directory names are identical to the corresponding scheduled job definition names.
-            string directoryPath = GetDirectoryPath();
-            IEnumerable<string> definitions = Directory.EnumerateDirectories(directoryPath);
-            return (definitions != null) ? definitions : new Collection<string>() as IEnumerable<string>;
-        }
-
-        /// <summary>
-        /// Returns a FileStream object for an existing scheduled job definition
-        /// run.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <param name="runStart">DateTime of job run start time.</param>
-        /// <param name="runItem">Job run item.</param>
-        /// <param name="fileAccess">File access.</param>
-        /// <param name="fileMode">File mode.</param>
-        /// <param name="fileShare">File share.</param>
-        /// <returns>FileStream object.</returns>
-        public static FileStream GetFileForJobRunItem(
-            string definitionName,
-            DateTime runStart,
-            JobRunItem runItem,
-            FileMode fileMode,
-            FileAccess fileAccess,
-            FileShare fileShare)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            string filePathName = GetRunFilePathName(definitionName, runItem, runStart);
-            return File.Open(filePathName, fileMode, fileAccess, fileShare);
-        }
-
-        /// <summary>
-        /// Returns a FileStream object for a new scheduled job definition run.
-        /// </summary>
-        /// <param name="definitionOutputPath">Scheduled job definition path.</param>
-        /// <param name="runStart">DateTime of job run start time.</param>
-        /// <param name="runItem">Job run item.</param>
-        /// <returns>FileStream object.</returns>
-        public static FileStream CreateFileForJobRunItem(
-            string definitionOutputPath,
-            DateTime runStart,
-            JobRunItem runItem)
-        {
-            if (string.IsNullOrEmpty(definitionOutputPath))
-            {
-                throw new PSArgumentException("definitionOutputPath");
-            }
-
-            string filePathName = GetRunFilePathNameFromPath(definitionOutputPath, runItem, runStart);
-
-            // If the file already exists, we overwrite it because the job run
-            // can be updated multiple times while the job is running.
-            return File.Create(filePathName);
-        }
-
-        /// <summary>
-        /// Returns a collection of DateTime objects which specify job run directories
-        /// that are currently in the store.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <returns>Collection of DateTime objects.</returns>
-        public static Collection<DateTime> GetJobRunsForDefinition(
-            string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            string definitionOutputPath = GetJobRunOutputDirectory(definitionName);
-
-            return GetJobRunsForDefinitionPath(definitionOutputPath);
-        }
-
-        /// <summary>
-        /// Returns a collection of DateTime objects which specify job run directories
-        /// that are currently in the store.
-        /// </summary>
-        /// <param name="definitionOutputPath">Scheduled job definition job run Output path.</param>
-        /// <returns>Collection of DateTime objects.</returns>
-        public static Collection<DateTime> GetJobRunsForDefinitionPath(
-            string definitionOutputPath)
-        {
-            if (string.IsNullOrEmpty(definitionOutputPath))
-            {
-                throw new PSArgumentException("definitionOutputPath");
-            }
-
-            Collection<DateTime> jobRunInfos = new Collection<DateTime>();
-            IEnumerable<string> jobRuns = Directory.EnumerateDirectories(definitionOutputPath);
-            if (jobRuns != null)
-            {
-                // Job run directory names are the date/times that the job was started.
-                foreach (string jobRun in jobRuns)
-                {
-                    DateTime jobRunDateTime;
-                    int indx = jobRun.LastIndexOf('\\');
-                    string jobRunName = (indx != -1) ? jobRun.Substring(indx + 1) : jobRun;
-                    if (ConvertJobRunNameToDateTime(jobRunName, out jobRunDateTime))
-                    {
-                        jobRunInfos.Add(jobRunDateTime);
-                    }
-                }
-            }
-
-            return jobRunInfos;
-        }
-
-        /// <summary>
-        /// Remove the job definition and all job runs from job store.
-        /// </summary>
-        /// <param name="definitionName">Scheduled Job Definition name.</param>
-        public static void RemoveJobDefinition(
-            string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            // Remove job runs, job definition file, and job definition directory.
-            string jobDefDirectory = GetJobDefinitionPath(definitionName);
-            Directory.Delete(jobDefDirectory, true);
-        }
-
-        /// <summary>
-        /// Renames the directory containing the old job definition name
-        /// to the new name provided.
-        /// </summary>
-        /// <param name="oldDefName">Existing job definition directory.</param>
-        /// <param name="newDefName">Renamed job definition directory.</param>
-        public static void RenameScheduledJobDefDir(
-            string oldDefName,
-            string newDefName)
-        {
-            if (string.IsNullOrEmpty(oldDefName))
-            {
-                throw new PSArgumentException("oldDefName");
-            }
-
-            if (string.IsNullOrEmpty(newDefName))
-            {
-                throw new PSArgumentException("newDefName");
-            }
-
-            string oldDirPath = GetJobDefinitionPath(oldDefName);
-            string newDirPath = GetJobDefinitionPath(newDefName);
-            Directory.Move(oldDirPath, newDirPath);
-        }
-
-        /// <summary>
-        /// Remove a single job definition job run from the job store.
-        /// </summary>
-        /// <param name="definitionName">Scheduled Job Definition name.</param>
-        /// <param name="runStart">DateTime of job run.</param>
-        public static void RemoveJobRun(
-            string definitionName,
-            DateTime runStart)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            // Remove the job run files and directory.
-            string runDirectory = GetRunDirectory(definitionName, runStart);
-            Directory.Delete(runDirectory, true);
-        }
-
-        /// <summary>
-        /// Remove a single job definition job run from the job store.
-        /// </summary>
-        /// <param name="definitionOutputPath">Scheduled Job Definition Output path.</param>
-        /// <param name="runStart">DateTime of job run.</param>
-        public static void RemoveJobRunFromOutputPath(
-            string definitionOutputPath,
-            DateTime runStart)
-        {
-            if (string.IsNullOrEmpty(definitionOutputPath))
-            {
-                throw new PSArgumentException("definitionOutputPath");
-            }
-
-            // Remove the job run files and directory.
-            string runDirectory = GetRunDirectoryFromPath(definitionOutputPath, runStart);
-            Directory.Delete(runDirectory, true);
-        }
-
-        /// <summary>
-        /// Remove all job runs for this job definition.
-        /// </summary>
-        /// <param name="definitionName">Scheduled Job Definition name.</param>
-        public static void RemoveAllJobRuns(
-            string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            Collection<DateTime> jobRuns = GetJobRunsForDefinition(definitionName);
-            foreach (DateTime jobRun in jobRuns)
-            {
-                string jobRunPath = GetRunDirectory(definitionName, jobRun);
-                Directory.Delete(jobRunPath, true);
-            }
-        }
-
-        /// <summary>
-        /// Set read access on provided definition file for specified user.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="user">Account user name.</param>
-        public static void SetReadAccessOnDefinitionFile(
-            string definitionName,
-            string user)
-        {
-            string filePath = GetFilePathName(definitionName, DefinitionFileName);
-
-            // Get file security for existing file.
-            FileSecurity fileSecurity = new FileSecurity(
-                filePath,
-                AccessControlSections.Access);
-
-            // Create rule.
-            FileSystemAccessRule fileAccessRule = new FileSystemAccessRule(
-                user,
-                FileSystemRights.Read,
-                AccessControlType.Allow);
-            fileSecurity.AddAccessRule(fileAccessRule);
-
-            // Apply rule.
-            File.SetAccessControl(filePath, fileSecurity);
-        }
-
-        /// <summary>
-        /// Set write access on Output directory for provided definition for
-        /// specified user.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="user">Account user name.</param>
-        public static void SetWriteAccessOnJobRunOutput(
-            string definitionName,
-            string user)
-        {
-            string outputDirectoryPath = GetJobRunOutputDirectory(definitionName);
-            AddFullAccessToDirectory(user, outputDirectoryPath);
-        }
-
-        /// <summary>
-        /// Returns the directory path for job run output for the specified
-        /// scheduled job definition.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <returns>Directory Path.</returns>
-        public static string GetJobRunOutputDirectory(
-            string definitionName)
-        {
-            if (string.IsNullOrEmpty(definitionName))
-            {
-                throw new PSArgumentException("definitionName");
-            }
-
-            return Path.Combine(GetJobDefinitionPath(definitionName), JobRunOutput);
-        }
-
-        /// <summary>
-        /// Gets the directory path for a Scheduled Job Definition.
-        /// </summary>
-        /// <returns>Directory Path.</returns>
-        public static string GetJobDefinitionLocation()
-        {
-#if UNIX
-            return Path.Combine(Platform.SelectProductNameForDirectory(Platform.XDG_Type.CACHE), "ScheduledJobs"));
-#else
-            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), ScheduledJobsPath);
-#endif
-        }
-
-        public static void CreateDirectoryIfNotExists()
-        {
-            GetDirectoryPath();
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        /// <summary>
-        /// Gets the directory path for Scheduled Jobs.  Will create the directory if
-        /// it does not exist.
-        /// </summary>
-        /// <returns>Directory Path.</returns>
-        private static string GetDirectoryPath()
-        {
-            string pathName;
-#if UNIX
-            pathName = Path.Combine(Platform.SelectProductNameForDirectory(Platform.XDG_Type.CACHE), "ScheduledJobs"));
-#else
-            pathName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), ScheduledJobsPath);
-#endif
-            if (!Directory.Exists(pathName))
-            {
-                Directory.CreateDirectory(pathName);
-            }
-
-            return pathName;
-        }
-
-        /// <summary>
-        /// Creates a ScheduledJob definition directory with provided definition name
-        /// along with a job run Output directory, and returns a file path/name.
-        ///  ...\ScheduledJobs\definitionName\fileName.xml
-        ///  ...\ScheduledJobs\definitionName\Output\
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="fileName">File name.</param>
-        /// <returns>File path/name.</returns>
-        private static string CreateFilePathName(string definitionName, string fileName)
-        {
-            string filePath = GetJobDefinitionPath(definitionName);
-            string outputPath = GetJobRunOutputDirectory(definitionName);
-            if (Directory.Exists(filePath))
-            {
-                ScheduledJobException ex = new ScheduledJobException(StringUtil.Format(ScheduledJobErrorStrings.JobDefFileAlreadyExists, definitionName));
-                ex.FQEID = ScheduledJobDefExistsFQEID;
-                throw ex;
-            }
-
-            Directory.CreateDirectory(filePath);
-            Directory.CreateDirectory(outputPath);
-            return string.Format(CultureInfo.InstalledUICulture, @"{0}\{1}.xml", filePath, fileName);
-        }
-
-        /// <summary>
-        /// Returns a file path/name for an existing Scheduled job definition directory.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="fileName">File name.</param>
-        /// <returns>File path/name.</returns>
-        private static string GetFilePathName(string definitionName, string fileName)
-        {
-            string filePath = GetJobDefinitionPath(definitionName);
-            return string.Format(CultureInfo.InvariantCulture, @"{0}\{1}.xml", filePath, fileName);
-        }
-
-        /// <summary>
-        /// Gets the directory path for a Scheduled Job Definition.
-        /// </summary>
-        /// <param name="definitionName">Scheduled job definition name.</param>
-        /// <returns>Directory Path.</returns>
-        private static string GetJobDefinitionPath(string definitionName)
-        {
-#if UNIX
-            return Path.Combine(Platform.SelectProductNameForDirectory(Platform.XDG_Type.CACHE), "ScheduledJobs", definitionName);
-#else
-            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
-                                ScheduledJobsPath,
-                                definitionName);
-#endif
-        }
-
-        /// <summary>
-        /// Returns a directory path for an existing ScheduledJob run result directory.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="runStart">File name.</param>
-        /// <returns>Directory Path.</returns>
-        private static string GetRunDirectory(
-            string definitionName,
-            DateTime runStart)
-        {
-            string directoryPath = GetJobRunOutputDirectory(definitionName);
-            return string.Format(CultureInfo.InvariantCulture, @"{0}\{1}", directoryPath,
-                ConvertDateTimeToJobRunName(runStart));
-        }
-
-        /// <summary>
-        /// Returns a directory path for an existing ScheduledJob run based on
-        /// provided definition Output directory path.
-        /// </summary>
-        /// <param name="definitionOutputPath">Output directory path.</param>
-        /// <param name="runStart">File name.</param>
-        /// <returns>Directory Path.</returns>
-        private static string GetRunDirectoryFromPath(
-            string definitionOutputPath,
-            DateTime runStart)
-        {
-            return string.Format(CultureInfo.InvariantCulture, @"{0}\{1}",
-                definitionOutputPath, ConvertDateTimeToJobRunName(runStart));
-        }
-
-        /// <summary>
-        /// Returns a file path/name for a run result file.  Will create the
-        /// job run directory if it does not exist.
-        /// </summary>
-        /// <param name="definitionName">Definition name.</param>
-        /// <param name="runItem">Result type.</param>
-        /// <param name="runStart">Run date.</param>
-        /// <returns>File path/name.</returns>
-        private static string GetRunFilePathName(
-            string definitionName,
-            JobRunItem runItem,
-            DateTime runStart)
-        {
-            string directoryPath = GetJobRunOutputDirectory(definitionName);
-            string jobRunPath = string.Format(CultureInfo.InvariantCulture, @"{0}\{1}",
-                directoryPath, ConvertDateTimeToJobRunName(runStart));
-
-            return string.Format(CultureInfo.InvariantCulture, @"{0}\{1}.xml", jobRunPath,
-                runItem.ToString());
-        }
-
-        /// <summary>
-        /// Returns a file path/name for a job run result, based on the passed in
-        /// job run output path.  Will create the job run directory if it does not
-        /// exist.
-        /// </summary>
-        /// <param name="outputPath">Definition job run output path.</param>
-        /// <param name="runItem">Result type.</param>
-        /// <param name="runStart">Run date.</param>
-        /// <returns></returns>
-        private static string GetRunFilePathNameFromPath(
-            string outputPath,
-            JobRunItem runItem,
-            DateTime runStart)
-        {
-            string jobRunPath = string.Format(CultureInfo.InvariantCulture, @"{0}\{1}",
-                outputPath, ConvertDateTimeToJobRunName(runStart));
-
-            if (!Directory.Exists(jobRunPath))
-            {
-                // Create directory for this job run date.
-                Directory.CreateDirectory(jobRunPath);
-            }
-
-            return string.Format(CultureInfo.InvariantCulture, @"{0}\{1}.xml", jobRunPath,
-                runItem.ToString());
-        }
-
-        private static void AddFullAccessToDirectory(
-            string user,
-            string directoryPath)
-        {
-            // Create rule.
-            DirectoryInfo info = new DirectoryInfo(directoryPath);
-            DirectorySecurity dSecurity = info.GetAccessControl();
-            FileSystemAccessRule fileAccessRule = new FileSystemAccessRule(
-                user,
-                FileSystemRights.FullControl,
-                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
-                PropagationFlags.None,
-                AccessControlType.Allow);
-
-            // Apply rule.
-            dSecurity.AddAccessRule(fileAccessRule);
-            info.SetAccessControl(dSecurity);
-        }
-
-        //
-        // String format: 'YYYYMMDD-HHMMSS-SSS'
-        // ,where SSS is milliseconds.
-        //
-
-        private static string ConvertDateTimeToJobRunName(DateTime dt)
-        {
-            return string.Format(CultureInfo.InvariantCulture,
-                @"{0:d4}{1:d2}{2:d2}-{3:d2}{4:d2}{5:d2}-{6:d3}",
-                dt.Year, dt.Month, dt.Day,
-                dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
-        }
-
-        /// <summary>
-        /// Converts a jobRun name string to an equivalent DateTime.
-        /// </summary>
-        /// <param name="jobRunName"></param>
-        /// <param name="jobRun"></param>
-        /// <returns></returns>
-        internal static bool ConvertJobRunNameToDateTime(string jobRunName, out DateTime jobRun)
-        {
-            if (jobRunName == null || jobRunName.Length != 19)
-            {
-                jobRun = new DateTime();
-                return false;
-            }
-
-            int year = 0;
-            int month = 0;
-            int day = 0;
-            int hour = 0;
-            int minute = 0;
-            int second = 0;
-            int msecs = 0;
-            bool success = true;
-
-            try
-            {
-                year = Convert.ToInt32(jobRunName.Substring(0, 4));
-                month = Convert.ToInt32(jobRunName.Substring(4, 2));
-                day = Convert.ToInt32(jobRunName.Substring(6, 2));
-                hour = Convert.ToInt32(jobRunName.Substring(9, 2));
-                minute = Convert.ToInt32(jobRunName.Substring(11, 2));
-                second = Convert.ToInt32(jobRunName.Substring(13, 2));
-                msecs = Convert.ToInt32(jobRunName.Substring(16, 3));
-            }
-            catch (FormatException)
-            {
-                success = false;
-            }
-            catch (OverflowException)
-            {
-                success = false;
-            }
-
-            if (success)
-            {
-                jobRun = new DateTime(year, month, day, hour, minute, second, msecs);
-            }
-            else
-            {
-                jobRun = new DateTime();
-            }
-
-            return success;
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobTrigger.cs
deleted file mode 100644
index f32f33ce008..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobTrigger.cs
+++ /dev/null
@@ -1,897 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Globalization;
-using System.Management.Automation;
-using System.Runtime.Serialization;
-using System.Security.Permissions;
-using System.Text;
-using System.Threading;
-
-using Microsoft.Management.Infrastructure;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This class contains parameters used to define how/when a PowerShell job is
-    /// run via the Windows Task Scheduler (WTS).
-    /// </summary>
-    [Serializable]
-    public sealed class ScheduledJobTrigger : ISerializable
-    {
-        #region Private Members
-
-        private DateTime? _time;
-        private List<DayOfWeek> _daysOfWeek;
-        private TimeSpan _randomDelay;
-        private Int32 _interval = 1;
-        private string _user;
-        private TriggerFrequency _frequency = TriggerFrequency.None;
-        private TimeSpan? _repInterval;
-        private TimeSpan? _repDuration;
-
-        private Int32 _id;
-        private bool _enabled = true;
-        private ScheduledJobDefinition _jobDefAssociation;
-
-        private static string _allUsers = "*";
-
-        #endregion
-
-        #region Public Properties
-
-        /// <summary>
-        /// Trigger time.
-        /// </summary>
-        public DateTime? At
-        {
-            get { return _time; }
-
-            set { _time = value; }
-        }
-
-        /// <summary>
-        /// Trigger days of week.
-        /// </summary>
-        public List<DayOfWeek> DaysOfWeek
-        {
-            get { return _daysOfWeek; }
-
-            set { _daysOfWeek = value; }
-        }
-
-        /// <summary>
-        /// Trigger days or weeks interval.
-        /// </summary>
-        public Int32 Interval
-        {
-            get { return _interval; }
-
-            set { _interval = value; }
-        }
-
-        /// <summary>
-        /// Trigger frequency.
-        /// </summary>
-        public TriggerFrequency Frequency
-        {
-            get { return _frequency; }
-
-            set { _frequency = value; }
-        }
-
-        /// <summary>
-        /// Trigger random delay.
-        /// </summary>
-        public TimeSpan RandomDelay
-        {
-            get { return _randomDelay; }
-
-            set { _randomDelay = value; }
-        }
-
-        /// <summary>
-        /// Trigger Once frequency repetition interval.
-        /// </summary>
-        public TimeSpan? RepetitionInterval
-        {
-            get { return _repInterval; }
-
-            set
-            {
-                // A TimeSpan value of zero is equivalent to a null value.
-                _repInterval = (value != null && value.Value == TimeSpan.Zero) ?
-                    null : value;
-            }
-        }
-
-        /// <summary>
-        /// Trigger Once frequency repetition duration.
-        /// </summary>
-        public TimeSpan? RepetitionDuration
-        {
-            get { return _repDuration; }
-
-            set
-            {
-                // A TimeSpan value of zero is equivalent to a null value.
-                _repDuration = (value != null && value.Value == TimeSpan.Zero) ?
-                    null : value;
-            }
-        }
-
-        /// <summary>
-        /// Trigger user name.
-        /// </summary>
-        public string User
-        {
-            get { return _user; }
-
-            set { _user = value; }
-        }
-
-        /// <summary>
-        /// Returns the trigger local Id.
-        /// </summary>
-        public Int32 Id
-        {
-            get { return _id; }
-
-            internal set { _id = value; }
-        }
-
-        /// <summary>
-        /// Defines enabled state of trigger.
-        /// </summary>
-        public bool Enabled
-        {
-            get { return _enabled; }
-
-            set { _enabled = value; }
-        }
-
-        /// <summary>
-        /// ScheduledJobDefinition object this trigger is associated with.
-        /// </summary>
-        public ScheduledJobDefinition JobDefinition
-        {
-            get { return _jobDefAssociation; }
-
-            internal set { _jobDefAssociation = value; }
-        }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Default constructor.
-        /// </summary>
-        public ScheduledJobTrigger()
-        { }
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="enabled">Enabled.</param>
-        /// <param name="frequency">Trigger frequency.</param>
-        /// <param name="time">Trigger time.</param>
-        /// <param name="daysOfWeek">Weekly days of week.</param>
-        /// <param name="interval">Daily or Weekly interval.</param>
-        /// <param name="randomDelay">Random delay.</param>
-        /// <param name="repetitionInterval">Repetition interval.</param>
-        /// <param name="repetitionDuration">Repetition duration.</param>
-        /// <param name="user">Logon user.</param>
-        /// <param name="id">Trigger id.</param>
-        private ScheduledJobTrigger(
-            bool enabled,
-            TriggerFrequency frequency,
-            DateTime? time,
-            List<DayOfWeek> daysOfWeek,
-            Int32 interval,
-            TimeSpan randomDelay,
-            TimeSpan? repetitionInterval,
-            TimeSpan? repetitionDuration,
-            string user,
-            Int32 id)
-        {
-            _enabled = enabled;
-            _frequency = frequency;
-            _time = time;
-            _daysOfWeek = daysOfWeek;
-            _interval = interval;
-            _randomDelay = randomDelay;
-            RepetitionInterval = repetitionInterval;
-            RepetitionDuration = repetitionDuration;
-            _user = user;
-            _id = id;
-        }
-
-        /// <summary>
-        /// Copy constructor.
-        /// </summary>
-        /// <param name="copyTrigger">ScheduledJobTrigger.</param>
-        internal ScheduledJobTrigger(ScheduledJobTrigger copyTrigger)
-        {
-            if (copyTrigger == null)
-            {
-                throw new PSArgumentNullException("copyTrigger");
-            }
-
-            _enabled = copyTrigger.Enabled;
-            _frequency = copyTrigger.Frequency;
-            _id = copyTrigger.Id;
-            _time = copyTrigger.At;
-            _daysOfWeek = copyTrigger.DaysOfWeek;
-            _interval = copyTrigger.Interval;
-            _randomDelay = copyTrigger.RandomDelay;
-            _repInterval = copyTrigger.RepetitionInterval;
-            _repDuration = copyTrigger.RepetitionDuration;
-            _user = copyTrigger.User;
-
-            _jobDefAssociation = copyTrigger.JobDefinition;
-        }
-
-        /// <summary>
-        /// Serialization constructor.
-        /// </summary>
-        /// <param name="info">SerializationInfo.</param>
-        /// <param name="context">StreamingContext.</param>
-        private ScheduledJobTrigger(
-            SerializationInfo info,
-            StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            DateTime time = info.GetDateTime("Time_Value");
-            if (time != DateTime.MinValue)
-            {
-                _time = time;
-            }
-            else
-            {
-                _time = null;
-            }
-
-            RepetitionInterval = (TimeSpan?)info.GetValue("RepetitionInterval_Value", typeof(TimeSpan));
-            RepetitionDuration = (TimeSpan?)info.GetValue("RepetitionDuration_Value", typeof(TimeSpan));
-
-            _daysOfWeek = (List<DayOfWeek>)info.GetValue("DaysOfWeek_Value", typeof(List<DayOfWeek>));
-            _randomDelay = (TimeSpan)info.GetValue("RandomDelay_Value", typeof(TimeSpan));
-            _interval = info.GetInt32("Interval_Value");
-            _user = info.GetString("User_Value");
-            _frequency = (TriggerFrequency)info.GetValue("TriggerFrequency_Value", typeof(TriggerFrequency));
-            _id = info.GetInt32("ID_Value");
-            _enabled = info.GetBoolean("Enabled_Value");
-
-            // Runtime reference and not saved to store.
-            _jobDefAssociation = null;
-        }
-
-        #endregion
-
-        #region ISerializable Implementation
-
-        /// <summary>
-        /// GetObjectData for ISerializable implementation.
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="context"></param>
-        public void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException("info");
-            }
-
-            if (_time == null)
-            {
-                info.AddValue("Time_Value", DateTime.MinValue);
-            }
-            else
-            {
-                info.AddValue("Time_Value", _time);
-            }
-
-            if (_repInterval == null)
-            {
-                info.AddValue("RepetitionInterval_Value", TimeSpan.Zero);
-            }
-            else
-            {
-                info.AddValue("RepetitionInterval_Value", _repInterval);
-            }
-
-            if (_repDuration == null)
-            {
-                info.AddValue("RepetitionDuration_Value", TimeSpan.Zero);
-            }
-            else
-            {
-                info.AddValue("RepetitionDuration_Value", _repDuration);
-            }
-
-            info.AddValue("DaysOfWeek_Value", _daysOfWeek);
-            info.AddValue("RandomDelay_Value", _randomDelay);
-            info.AddValue("Interval_Value", _interval);
-            info.AddValue("User_Value", _user);
-            info.AddValue("TriggerFrequency_Value", _frequency);
-            info.AddValue("ID_Value", _id);
-            info.AddValue("Enabled_Value", _enabled);
-        }
-
-        #endregion
-
-        #region Internal Methods
-
-        internal void ClearProperties()
-        {
-            _time = null;
-            _daysOfWeek = null;
-            _interval = 1;
-            _randomDelay = TimeSpan.Zero;
-            _repInterval = null;
-            _repDuration = null;
-            _user = null;
-            _frequency = TriggerFrequency.None;
-            _enabled = false;
-            _id = 0;
-        }
-
-        internal void Validate()
-        {
-            switch (_frequency)
-            {
-                case TriggerFrequency.None:
-                    throw new ScheduledJobException(ScheduledJobErrorStrings.MissingJobTriggerType);
-
-                case TriggerFrequency.AtStartup:
-                    // AtStartup has no required parameters.
-                    break;
-
-                case TriggerFrequency.AtLogon:
-                    // AtLogon has no required parameters.
-                    break;
-
-                case TriggerFrequency.Once:
-                    if (_time == null)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingJobTriggerTime, ScheduledJobErrorStrings.TriggerOnceType);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    if (_repInterval != null || _repDuration != null)
-                    {
-                        ValidateOnceRepetitionParams(_repInterval, _repDuration);
-                    }
-
-                    break;
-
-                case TriggerFrequency.Daily:
-                    if (_time == null)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingJobTriggerTime, ScheduledJobErrorStrings.TriggerDailyType);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    if (_interval < 1)
-                    {
-                        throw new ScheduledJobException(ScheduledJobErrorStrings.InvalidDaysIntervalParam);
-                    }
-
-                    break;
-
-                case TriggerFrequency.Weekly:
-                    if (_time == null)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingJobTriggerTime, ScheduledJobErrorStrings.TriggerWeeklyType);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    if (_interval < 1)
-                    {
-                        throw new ScheduledJobException(ScheduledJobErrorStrings.InvalidWeeksIntervalParam);
-                    }
-
-                    if (_daysOfWeek == null || _daysOfWeek.Count == 0)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingJobTriggerDaysOfWeek, ScheduledJobErrorStrings.TriggerWeeklyType);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    break;
-            }
-        }
-
-        internal static void ValidateOnceRepetitionParams(
-            TimeSpan? repInterval,
-            TimeSpan? repDuration)
-        {
-            // Both Interval and Duration parameters must be specified together.
-            if (repInterval == null || repDuration == null)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionParams);
-            }
-
-            // Interval and Duration parameters must not have negative value.
-            if (repInterval < TimeSpan.Zero || repDuration < TimeSpan.Zero)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionParamValues);
-            }
-
-            // Zero values are allowed but only if both parameters are set to zero.
-            // This removes repetition from the Once trigger.
-            if (repInterval == TimeSpan.Zero && repDuration != TimeSpan.Zero)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.MismatchedRepetitionParamValues);
-            }
-
-            // Parameter values must be GE to one minute unless both are zero to remove repetition.
-            if (repInterval < TimeSpan.FromMinutes(1) &&
-                !(repInterval == TimeSpan.Zero && repDuration == TimeSpan.Zero))
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionIntervalValue);
-            }
-
-            // Interval parameter must be LE to Duration parameter.
-            if (repInterval > repDuration)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionInterval);
-            }
-        }
-
-        internal void CopyTo(ScheduledJobTrigger targetTrigger)
-        {
-            if (targetTrigger == null)
-            {
-                throw new PSArgumentNullException("targetTrigger");
-            }
-
-            targetTrigger.Enabled = _enabled;
-            targetTrigger.Frequency = _frequency;
-            targetTrigger.Id = _id;
-            targetTrigger.At = _time;
-            targetTrigger.DaysOfWeek = _daysOfWeek;
-            targetTrigger.Interval = _interval;
-            targetTrigger.RandomDelay = _randomDelay;
-            targetTrigger.RepetitionInterval = _repInterval;
-            targetTrigger.RepetitionDuration = _repDuration;
-            targetTrigger.User = _user;
-            targetTrigger.JobDefinition = _jobDefAssociation;
-        }
-
-        #endregion
-
-        #region Static methods
-
-        /// <summary>
-        /// Creates a one time ScheduledJobTrigger object.
-        /// </summary>
-        /// <param name="time">DateTime when trigger activates.</param>
-        /// <param name="delay">Random delay.</param>
-        /// <param name="repetitionInterval">Repetition interval.</param>
-        /// <param name="repetitionDuration">Repetition duration.</param>
-        /// <param name="id">Trigger Id.</param>
-        /// <param name="enabled">Trigger enabled state.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        public static ScheduledJobTrigger CreateOnceTrigger(
-            DateTime time,
-            TimeSpan delay,
-            TimeSpan? repetitionInterval,
-            TimeSpan? repetitionDuration,
-            Int32 id,
-            bool enabled)
-        {
-            return new ScheduledJobTrigger(
-                enabled,
-                TriggerFrequency.Once,
-                time,
-                null,
-                1,
-                delay,
-                repetitionInterval,
-                repetitionDuration,
-                null,
-                id);
-        }
-
-        /// <summary>
-        /// Creates a daily ScheduledJobTrigger object.
-        /// </summary>
-        /// <param name="time">Time of day when trigger activates.</param>
-        /// <param name="interval">Days interval for trigger activation.</param>
-        /// <param name="delay">Random delay.</param>
-        /// <param name="id">Trigger Id.</param>
-        /// <param name="enabled">Trigger enabled state.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        public static ScheduledJobTrigger CreateDailyTrigger(
-            DateTime time,
-            Int32 interval,
-            TimeSpan delay,
-            Int32 id,
-            bool enabled)
-        {
-            return new ScheduledJobTrigger(
-                enabled,
-                TriggerFrequency.Daily,
-                time,
-                null,
-                interval,
-                delay,
-                null,
-                null,
-                null,
-                id);
-        }
-
-        /// <summary>
-        /// Creates a weekly ScheduledJobTrigger object.
-        /// </summary>
-        /// <param name="time">Time of day when trigger activates.</param>
-        /// <param name="interval">Weeks interval for trigger activation.</param>
-        /// <param name="daysOfWeek">Days of the week for trigger activation.</param>
-        /// <param name="delay">Random delay.</param>
-        /// <param name="id">Trigger Id.</param>
-        /// <param name="enabled">Trigger enabled state.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        public static ScheduledJobTrigger CreateWeeklyTrigger(
-            DateTime time,
-            Int32 interval,
-            IEnumerable<DayOfWeek> daysOfWeek,
-            TimeSpan delay,
-            Int32 id,
-            bool enabled)
-        {
-            List<DayOfWeek> lDaysOfWeek = (daysOfWeek != null) ? new List<DayOfWeek>(daysOfWeek) : null;
-
-            return new ScheduledJobTrigger(
-                enabled,
-                TriggerFrequency.Weekly,
-                time,
-                lDaysOfWeek,
-                interval,
-                delay,
-                null,
-                null,
-                null,
-                id);
-        }
-
-        /// <summary>
-        /// Creates a trigger that activates after user log on.
-        /// </summary>
-        /// <param name="user">Name of user.</param>
-        /// <param name="delay">Random delay.</param>
-        /// <param name="id">Trigger Id.</param>
-        /// <param name="enabled">Trigger enabled state.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        public static ScheduledJobTrigger CreateAtLogOnTrigger(
-            string user,
-            TimeSpan delay,
-            Int32 id,
-            bool enabled)
-        {
-            return new ScheduledJobTrigger(
-                enabled,
-                TriggerFrequency.AtLogon,
-                null,
-                null,
-                1,
-                delay,
-                null,
-                null,
-                string.IsNullOrEmpty(user) ? AllUsers : user,
-                id);
-        }
-
-        /// <summary>
-        /// Creates a trigger that activates after OS boot.
-        /// </summary>
-        /// <param name="delay">Random delay.</param>
-        /// <param name="id">Trigger Id.</param>
-        /// <param name="enabled">Trigger enabled state.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        public static ScheduledJobTrigger CreateAtStartupTrigger(
-            TimeSpan delay,
-            Int32 id,
-            bool enabled)
-        {
-            return new ScheduledJobTrigger(
-                enabled,
-                TriggerFrequency.AtStartup,
-                null,
-                null,
-                1,
-                delay,
-                null,
-                null,
-                null,
-                id);
-        }
-
-        /// <summary>
-        /// Compares provided user name to All Users string ("*").
-        /// </summary>
-        /// <param name="userName">Logon user name.</param>
-        /// <returns>Boolean, true if All Users.</returns>
-        internal static bool IsAllUsers(string userName)
-        {
-            return (string.Compare(userName, ScheduledJobTrigger.AllUsers,
-                StringComparison.OrdinalIgnoreCase) == 0);
-        }
-
-        /// <summary>
-        /// Returns the All Users string.
-        /// </summary>
-        internal static string AllUsers
-        {
-            get { return _allUsers; }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Update the associated ScheduledJobDefinition object with the
-        /// current properties of this object.
-        /// </summary>
-        public void UpdateJobDefinition()
-        {
-            if (_jobDefAssociation == null)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.NoAssociatedJobDefinitionForTrigger, _id);
-                throw new RuntimeException(msg);
-            }
-
-            _jobDefAssociation.UpdateTriggers(new ScheduledJobTrigger[1] { this }, true);
-        }
-
-        #endregion
-    }
-
-    #region Public Enums
-
-    /// <summary>
-    /// Specifies trigger types in terms of the frequency that
-    /// the trigger is activated.
-    /// </summary>
-    public enum TriggerFrequency
-    {
-        /// <summary>
-        /// None.
-        /// </summary>
-        None = 0,
-        /// <summary>
-        /// Trigger activates once at a specified time.
-        /// </summary>
-        Once = 1,
-        /// <summary>
-        /// Trigger activates daily.
-        /// </summary>
-        Daily = 2,
-        /// <summary>
-        /// Trigger activates on a weekly basis and multiple days
-        /// during the week.
-        /// </summary>
-        Weekly = 3,
-        /// <summary>
-        /// Trigger activates at user logon to the operating system.
-        /// </summary>
-        AtLogon = 4,
-        /// <summary>
-        /// Trigger activates after machine boot up.
-        /// </summary>
-        AtStartup = 5
-    }
-
-    #endregion
-
-    #region JobTriggerToCimInstanceConverter
-    /// <summary>
-    /// Class providing implementation of PowerShell conversions for types in Microsoft.Management.Infrastructure namespace.
-    /// </summary>
-    public sealed class JobTriggerToCimInstanceConverter : PSTypeConverter
-    {
-        private static readonly string CIM_TRIGGER_NAMESPACE = @"Root\Microsoft\Windows\TaskScheduler";
-
-        /// <summary>
-        /// Determines if the converter can convert the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter.
-        /// </summary>
-        /// <param name="sourceValue">The value to convert from.</param>
-        /// <param name="destinationType">The type to convert to.</param>
-        /// <returns>True if the converter can convert the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter, otherwise false.</returns>
-        public override bool CanConvertFrom(object sourceValue, Type destinationType)
-        {
-            if (destinationType == null)
-            {
-                throw new ArgumentNullException("destinationType");
-            }
-
-            return (sourceValue is ScheduledJobTrigger) && (destinationType.Equals(typeof(CimInstance)));
-        }
-
-        /// <summary>
-        /// Converts the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter using formatProvider and ignoreCase.
-        /// </summary>
-        /// <param name="sourceValue">The value to convert from.</param>
-        /// <param name="destinationType">The type to convert to.</param>
-        /// <param name="formatProvider">The format provider to use like in IFormattable's ToString.</param>
-        /// <param name="ignoreCase">True if case should be ignored.</param>
-        /// <returns>The <paramref name="sourceValue"/> parameter converted to the <paramref name="destinationType"/> parameter using formatProvider and ignoreCase.</returns>
-        /// <exception cref="InvalidCastException">If no conversion was possible.</exception>
-        public override object ConvertFrom(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
-        {
-            if (destinationType == null)
-            {
-                throw new ArgumentNullException("destinationType");
-            }
-
-            if (sourceValue == null)
-            {
-                throw new ArgumentNullException("sourceValue");
-            }
-
-            ScheduledJobTrigger originalTrigger = (ScheduledJobTrigger) sourceValue;
-            using (CimSession cimSession = CimSession.Create(null))
-            {
-                switch (originalTrigger.Frequency)
-                {
-                    case TriggerFrequency.Weekly:
-                        return ConvertToWeekly(originalTrigger, cimSession);
-                    case TriggerFrequency.Once:
-                        return ConvertToOnce(originalTrigger, cimSession);
-                    case TriggerFrequency.Daily:
-                        return ConvertToDaily(originalTrigger, cimSession);
-                    case TriggerFrequency.AtStartup:
-                        return ConvertToAtStartup(originalTrigger, cimSession);
-                    case TriggerFrequency.AtLogon:
-                        return ConvertToAtLogon(originalTrigger, cimSession);
-                    case TriggerFrequency.None:
-                        return ConvertToDefault(originalTrigger, cimSession);
-                    default:
-                        string errorMsg = StringUtil.Format(ScheduledJobErrorStrings.UnknownTriggerFrequency,
-                                                            originalTrigger.Frequency.ToString());
-                        throw new PSInvalidOperationException(errorMsg);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Returns true if the converter can convert the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter.
-        /// </summary>
-        /// <param name="sourceValue">The value to convert from.</param>
-        /// <param name="destinationType">The type to convert to.</param>
-        /// <returns>True if the converter can convert the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter, otherwise false.</returns>
-        public override bool CanConvertTo(object sourceValue, Type destinationType)
-        {
-            return false;
-        }
-
-        /// <summary>
-        /// Converts the <paramref name="sourceValue"/> parameter to the <paramref name="destinationType"/> parameter using formatProvider and ignoreCase.
-        /// </summary>
-        /// <param name="sourceValue">The value to convert from.</param>
-        /// <param name="destinationType">The type to convert to.</param>
-        /// <param name="formatProvider">The format provider to use like in IFormattable's ToString.</param>
-        /// <param name="ignoreCase">True if case should be ignored.</param>
-        /// <returns>SourceValue converted to the <paramref name="destinationType"/> parameter using formatProvider and ignoreCase.</returns>
-        /// <exception cref="InvalidCastException">If no conversion was possible.</exception>
-        public override object ConvertTo(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
-        {
-            throw new NotImplementedException();
-        }
-
-        #region Helper Methods
-
-        private CimInstance ConvertToWeekly(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskWeeklyTrigger");
-            CimInstance cimInstance = new CimInstance(cimClass);
-
-            cimInstance.CimInstanceProperties["DaysOfWeek"].Value = ScheduledJobWTS.ConvertDaysOfWeekToMask(trigger.DaysOfWeek);
-            cimInstance.CimInstanceProperties["RandomDelay"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RandomDelay);
-            cimInstance.CimInstanceProperties["WeeksInterval"].Value = trigger.Interval;
-
-            AddCommonProperties(trigger, cimInstance);
-            return cimInstance;
-        }
-
-        private CimInstance ConvertToOnce(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskTimeTrigger");
-            CimInstance cimInstance = new CimInstance(cimClass);
-
-            cimInstance.CimInstanceProperties["RandomDelay"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RandomDelay);
-
-            if (trigger.RepetitionInterval != null && trigger.RepetitionDuration != null)
-            {
-                CimClass cimRepClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskRepetitionPattern");
-                CimInstance cimRepInstance = new CimInstance(cimRepClass);
-
-                cimRepInstance.CimInstanceProperties["Interval"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RepetitionInterval.Value);
-
-                if (trigger.RepetitionDuration == TimeSpan.MaxValue)
-                {
-                    cimRepInstance.CimInstanceProperties["StopAtDurationEnd"].Value = false;
-                }
-                else
-                {
-                    cimRepInstance.CimInstanceProperties["StopAtDurationEnd"].Value = true;
-                    cimRepInstance.CimInstanceProperties["Duration"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RepetitionDuration.Value);
-                }
-
-                cimInstance.CimInstanceProperties["Repetition"].Value = cimRepInstance;
-            }
-
-            AddCommonProperties(trigger, cimInstance);
-            return cimInstance;
-        }
-
-        private CimInstance ConvertToDaily(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskDailyTrigger");
-            CimInstance cimInstance = new CimInstance(cimClass);
-
-            cimInstance.CimInstanceProperties["RandomDelay"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RandomDelay);
-            cimInstance.CimInstanceProperties["DaysInterval"].Value = trigger.Interval;
-
-            AddCommonProperties(trigger, cimInstance);
-            return cimInstance;
-        }
-
-        private CimInstance ConvertToAtLogon(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskLogonTrigger");
-            CimInstance cimInstance = new CimInstance(cimClass);
-
-            cimInstance.CimInstanceProperties["Delay"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RandomDelay);
-
-            // Convert the "AllUsers" name ("*" character) to null for Task Scheduler.
-            string userId = (ScheduledJobTrigger.IsAllUsers(trigger.User)) ? null : trigger.User;
-            cimInstance.CimInstanceProperties["UserId"].Value = userId;
-
-            AddCommonProperties(trigger, cimInstance);
-            return cimInstance;
-        }
-
-        private CimInstance ConvertToAtStartup(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskBootTrigger");
-            CimInstance cimInstance = new CimInstance(cimClass);
-
-            cimInstance.CimInstanceProperties["Delay"].Value = ScheduledJobWTS.ConvertTimeSpanToWTSString(trigger.RandomDelay);
-
-            AddCommonProperties(trigger, cimInstance);
-            return cimInstance;
-        }
-
-        private CimInstance ConvertToDefault(ScheduledJobTrigger trigger, CimSession cimSession)
-        {
-            CimClass cimClass = cimSession.GetClass(CIM_TRIGGER_NAMESPACE, "MSFT_TaskTrigger");
-            CimInstance result = new CimInstance(cimClass);
-            AddCommonProperties(trigger, result);
-            return result;
-        }
-
-        private static void AddCommonProperties(ScheduledJobTrigger trigger, CimInstance cimInstance)
-        {
-            cimInstance.CimInstanceProperties["Enabled"].Value = trigger.Enabled;
-
-            if (trigger.At != null)
-            {
-                cimInstance.CimInstanceProperties["StartBoundary"].Value = ScheduledJobWTS.ConvertDateTimeToString(trigger.At);
-            }
-        }
-
-        #endregion
-    }
-
-    #endregion
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobWTS.cs b/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobWTS.cs
deleted file mode 100644
index a8d76ef7da8..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/ScheduledJobWTS.cs
+++ /dev/null
@@ -1,961 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Globalization;
-using System.Management.Automation;
-using System.Runtime.InteropServices;
-using System.Security.AccessControl;
-using System.Text;
-
-using TaskScheduler;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// Managed code class to provide Windows Task Scheduler functionality for
-    /// scheduled jobs.
-    /// </summary>
-    internal sealed class ScheduledJobWTS : IDisposable
-    {
-        #region Private Members
-
-        private ITaskService _taskScheduler;
-        private ITaskFolder _iRootFolder;
-
-        private const short WTSSunday = 0x01;
-        private const short WTSMonday = 0x02;
-        private const short WTSTuesday = 0x04;
-        private const short WTSWednesday = 0x08;
-        private const short WTSThursday = 0x10;
-        private const short WTSFriday = 0x20;
-        private const short WTSSaturday = 0x40;
-
-        // Task Scheduler folders for PowerShell scheduled job tasks.
-        private const string TaskSchedulerWindowsFolder = @"\Microsoft\Windows";
-        private const string ScheduledJobSubFolder = @"PowerShell\ScheduledJobs";
-        private const string ScheduledJobTasksRootFolder = @"\Microsoft\Windows\PowerShell\ScheduledJobs";
-
-        // Define a single Action Id since PowerShell Scheduled Job tasks will have only one action.
-        private const string ScheduledJobTaskActionId = "StartPowerShellJob";
-
-        #endregion
-
-        #region Constructors
-
-        public ScheduledJobWTS()
-        {
-            // Create the Windows Task Scheduler object.
-            _taskScheduler = (ITaskService)new TaskScheduler.TaskScheduler();
-
-            // Connect the task scheduler object to the local machine
-            // using the current user security token.
-            _taskScheduler.Connect(null, null, null, null);
-
-            // Get or create the root folder in Task Scheduler for PowerShell scheduled jobs.
-            _iRootFolder = GetRootFolder();
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Retrieves job triggers from WTS with provided task Id.
-        /// </summary>
-        /// <param name="taskId">Task Id.</param>
-        /// <exception cref="ScheduledJobException">Task not found.</exception>
-        /// <returns>ScheduledJobTriggers.</returns>
-        public Collection<ScheduledJobTrigger> GetJobTriggers(
-            string taskId)
-        {
-            if (string.IsNullOrEmpty(taskId))
-            {
-                throw new PSArgumentException("taskId");
-            }
-
-            ITaskDefinition iTaskDefinition = FindTask(taskId);
-
-            Collection<ScheduledJobTrigger> jobTriggers = new Collection<ScheduledJobTrigger>();
-            ITriggerCollection iTriggerCollection = iTaskDefinition.Triggers;
-            if (iTriggerCollection != null)
-            {
-                foreach (ITrigger iTrigger in iTriggerCollection)
-                {
-                    ScheduledJobTrigger jobTrigger = CreateJobTrigger(iTrigger);
-                    if (jobTrigger == null)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.UnknownTriggerType, taskId, iTrigger.Id);
-                        throw new ScheduledJobException(msg);
-                    }
-
-                    jobTriggers.Add(jobTrigger);
-                }
-            }
-
-            return jobTriggers;
-        }
-
-        /// <summary>
-        /// Retrieves options for the provided task Id.
-        /// </summary>
-        /// <param name="taskId">Task Id.</param>
-        /// <exception cref="ScheduledJobException">Task not found.</exception>
-        /// <returns>ScheduledJobOptions.</returns>
-        public ScheduledJobOptions GetJobOptions(
-            string taskId)
-        {
-            if (string.IsNullOrEmpty(taskId))
-            {
-                throw new PSArgumentException("taskId");
-            }
-
-            ITaskDefinition iTaskDefinition = FindTask(taskId);
-
-            return CreateJobOptions(iTaskDefinition);
-        }
-
-        /// <summary>
-        /// Returns a boolean indicating whether the job/task is enabled
-        /// in the Task Scheduler.
-        /// </summary>
-        /// <param name="taskId"></param>
-        /// <returns></returns>
-        public bool GetTaskEnabled(
-            string taskId)
-        {
-            if (string.IsNullOrEmpty(taskId))
-            {
-                throw new PSArgumentException("taskId");
-            }
-
-            ITaskDefinition iTaskDefinition = FindTask(taskId);
-
-            return iTaskDefinition.Settings.Enabled;
-        }
-
-        /// <summary>
-        /// Creates a new task in WTS with information from ScheduledJobDefinition.
-        /// </summary>
-        /// <param name="definition">ScheduledJobDefinition.</param>
-        public void CreateTask(
-            ScheduledJobDefinition definition)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            // Create task definition
-            ITaskDefinition iTaskDefinition = _taskScheduler.NewTask(0);
-
-            // Add task options.
-            AddTaskOptions(iTaskDefinition, definition.Options);
-
-            // Add task triggers.
-            foreach (ScheduledJobTrigger jobTrigger in definition.JobTriggers)
-            {
-                AddTaskTrigger(iTaskDefinition, jobTrigger);
-            }
-
-            // Add task action.
-            AddTaskAction(iTaskDefinition, definition);
-
-            // Create a security descriptor for the current user so that only the user
-            // (and Local System account) can see/access the registered task.
-            string startSddl = "D:P(A;;GA;;;SY)(A;;GA;;;BA)";   // DACL Allow Generic Access to System and BUILTIN\Administrators.
-            System.Security.Principal.SecurityIdentifier userSid =
-                System.Security.Principal.WindowsIdentity.GetCurrent().User;
-            CommonSecurityDescriptor SDesc = new CommonSecurityDescriptor(false, false, startSddl);
-            SDesc.DiscretionaryAcl.AddAccess(AccessControlType.Allow, userSid, 0x10000000, InheritanceFlags.None, PropagationFlags.None);
-            string sddl = SDesc.GetSddlForm(AccessControlSections.All);
-
-            // Register this new task with the Task Scheduler.
-            if (definition.Credential == null)
-            {
-                // Register task to run as currently logged on user.
-                _iRootFolder.RegisterTaskDefinition(
-                    definition.Name,
-                    iTaskDefinition,
-                    (int)_TASK_CREATION.TASK_CREATE,
-                    null,       // User name
-                    null,       // Password
-                    _TASK_LOGON_TYPE.TASK_LOGON_S4U,
-                    sddl);
-            }
-            else
-            {
-                // Register task to run under provided user account/credentials.
-                _iRootFolder.RegisterTaskDefinition(
-                    definition.Name,
-                    iTaskDefinition,
-                    (int)_TASK_CREATION.TASK_CREATE,
-                    definition.Credential.UserName,
-                    GetCredentialPassword(definition.Credential),
-                    _TASK_LOGON_TYPE.TASK_LOGON_PASSWORD,
-                    sddl);
-            }
-        }
-
-        /// <summary>
-        /// Removes the WTS task for this ScheduledJobDefinition.
-        /// Throws error if one or more instances of this task are running.
-        /// Force parameter will stop all running instances and remove task.
-        /// </summary>
-        /// <param name="definition">ScheduledJobDefinition.</param>
-        /// <param name="force">Force running instances to stop and remove task.</param>
-        public void RemoveTask(
-            ScheduledJobDefinition definition,
-            bool force = false)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            RemoveTaskByName(definition.Name, force, false);
-        }
-
-        /// <summary>
-        /// Removes a Task Scheduler task from the PowerShell/ScheduledJobs folder
-        /// based on a task name.
-        /// </summary>
-        /// <param name="taskName">Task Scheduler task name.</param>
-        /// <param name="force">Force running instances to stop and remove task.</param>
-        /// <param name="firstCheckForTask">First check for existence of task.</param>
-        public void RemoveTaskByName(
-            string taskName,
-            bool force,
-            bool firstCheckForTask)
-        {
-            // Get registered task.
-            IRegisteredTask iRegisteredTask = null;
-            try
-            {
-                iRegisteredTask = _iRootFolder.GetTask(taskName);
-            }
-            catch (System.IO.DirectoryNotFoundException)
-            {
-                if (!firstCheckForTask)
-                {
-                    throw;
-                }
-            }
-            catch (System.IO.FileNotFoundException)
-            {
-                if (!firstCheckForTask)
-                {
-                    throw;
-                }
-            }
-
-            if (iRegisteredTask == null)
-            {
-                return;
-            }
-
-            // Check to see if any instances of this job/task is running.
-            IRunningTaskCollection iRunningTasks = iRegisteredTask.GetInstances(0);
-            if (iRunningTasks.Count > 0)
-            {
-                if (!force)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.CannotRemoveTaskRunningInstance, taskName);
-                    throw new ScheduledJobException(msg);
-                }
-
-                // Stop all running tasks.
-                iRegisteredTask.Stop(0);
-            }
-
-            // Remove task.
-            _iRootFolder.DeleteTask(taskName, 0);
-        }
-
-        /// <summary>
-        /// Starts task running from Task Scheduler.
-        /// </summary>
-        /// <param name="definition">ScheduledJobDefinition.</param>
-        /// <exception cref="System.IO.DirectoryNotFoundException"></exception>
-        /// <exception cref="System.IO.FileNotFoundException"></exception>
-        public void RunTask(
-            ScheduledJobDefinition definition)
-        {
-            // Get registered task.
-            IRegisteredTask iRegisteredTask = _iRootFolder.GetTask(definition.Name);
-
-            // Run task.
-            iRegisteredTask.Run(null);
-        }
-
-        /// <summary>
-        /// Updates an existing task in WTS with information from
-        /// ScheduledJobDefinition.
-        /// </summary>
-        /// <param name="definition">ScheduledJobDefinition.</param>
-        public void UpdateTask(
-            ScheduledJobDefinition definition)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            // Get task to update.
-            ITaskDefinition iTaskDefinition = FindTask(definition.Name);
-
-            // Replace options.
-            AddTaskOptions(iTaskDefinition, definition.Options);
-
-            // Set enabled state.
-            iTaskDefinition.Settings.Enabled = definition.Enabled;
-
-            // Replace triggers.
-            iTaskDefinition.Triggers.Clear();
-            foreach (ScheduledJobTrigger jobTrigger in definition.JobTriggers)
-            {
-                AddTaskTrigger(iTaskDefinition, jobTrigger);
-            }
-
-            // Replace action.
-            iTaskDefinition.Actions.Clear();
-            AddTaskAction(iTaskDefinition, definition);
-
-            // Register updated task.
-            if (definition.Credential == null)
-            {
-                // Register task to run as currently logged on user.
-                _iRootFolder.RegisterTaskDefinition(
-                    definition.Name,
-                    iTaskDefinition,
-                    (int)_TASK_CREATION.TASK_UPDATE,
-                    null,           // User name
-                    null,           // Password
-                    _TASK_LOGON_TYPE.TASK_LOGON_S4U,
-                    null);
-            }
-            else
-            {
-                // Register task to run under provided user account/credentials.
-                _iRootFolder.RegisterTaskDefinition(
-                    definition.Name,
-                    iTaskDefinition,
-                    (int)_TASK_CREATION.TASK_UPDATE,
-                    definition.Credential.UserName,
-                    GetCredentialPassword(definition.Credential),
-                    _TASK_LOGON_TYPE.TASK_LOGON_PASSWORD,
-                    null);
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        /// <summary>
-        /// Creates a new WTS trigger based on the provided ScheduledJobTrigger object
-        /// and adds it to the provided ITaskDefinition object.
-        /// </summary>
-        /// <param name="iTaskDefinition">ITaskDefinition.</param>
-        /// <param name="jobTrigger">ScheduledJobTrigger.</param>
-        private void AddTaskTrigger(
-            ITaskDefinition iTaskDefinition,
-            ScheduledJobTrigger jobTrigger)
-        {
-            ITrigger iTrigger = null;
-
-            switch (jobTrigger.Frequency)
-            {
-                case TriggerFrequency.AtStartup:
-                    {
-                        iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT);
-                        IBootTrigger iBootTrigger = iTrigger as IBootTrigger;
-                        Debug.Assert(iBootTrigger != null);
-
-                        iBootTrigger.Delay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
-
-                        iTrigger.Id = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
-                        iTrigger.Enabled = jobTrigger.Enabled;
-                    }
-
-                    break;
-
-                case TriggerFrequency.AtLogon:
-                    {
-                        iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
-                        ILogonTrigger iLogonTrigger = iTrigger as ILogonTrigger;
-                        Debug.Assert(iLogonTrigger != null);
-
-                        iLogonTrigger.UserId = ScheduledJobTrigger.IsAllUsers(jobTrigger.User) ? null : jobTrigger.User;
-                        iLogonTrigger.Delay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
-
-                        iTrigger.Id = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
-                        iTrigger.Enabled = jobTrigger.Enabled;
-                    }
-
-                    break;
-
-                case TriggerFrequency.Once:
-                    {
-                        iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
-                        ITimeTrigger iTimeTrigger = iTrigger as ITimeTrigger;
-                        Debug.Assert(iTimeTrigger != null);
-
-                        iTimeTrigger.RandomDelay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
-
-                        // Time trigger repetition.
-                        if (jobTrigger.RepetitionInterval != null &&
-                            jobTrigger.RepetitionDuration != null)
-                        {
-                            iTimeTrigger.Repetition.Interval = ConvertTimeSpanToWTSString(jobTrigger.RepetitionInterval.Value);
-                            if (jobTrigger.RepetitionDuration.Value == TimeSpan.MaxValue)
-                            {
-                                iTimeTrigger.Repetition.StopAtDurationEnd = false;
-                            }
-                            else
-                            {
-                                iTimeTrigger.Repetition.StopAtDurationEnd = true;
-                                iTimeTrigger.Repetition.Duration = ConvertTimeSpanToWTSString(jobTrigger.RepetitionDuration.Value);
-                            }
-                        }
-
-                        iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
-                        iTrigger.Id = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
-                        iTrigger.Enabled = jobTrigger.Enabled;
-                    }
-
-                    break;
-
-                case TriggerFrequency.Daily:
-                    {
-                        iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
-                        IDailyTrigger iDailyTrigger = iTrigger as IDailyTrigger;
-                        Debug.Assert(iDailyTrigger != null);
-
-                        iDailyTrigger.RandomDelay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
-                        iDailyTrigger.DaysInterval = (short)jobTrigger.Interval;
-
-                        iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
-                        iTrigger.Id = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
-                        iTrigger.Enabled = jobTrigger.Enabled;
-                    }
-
-                    break;
-
-                case TriggerFrequency.Weekly:
-                    {
-                        iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);
-                        IWeeklyTrigger iWeeklyTrigger = iTrigger as IWeeklyTrigger;
-                        Debug.Assert(iWeeklyTrigger != null);
-
-                        iWeeklyTrigger.RandomDelay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
-                        iWeeklyTrigger.WeeksInterval = (short)jobTrigger.Interval;
-                        iWeeklyTrigger.DaysOfWeek = ConvertDaysOfWeekToMask(jobTrigger.DaysOfWeek);
-
-                        iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
-                        iTrigger.Id = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
-                        iTrigger.Enabled = jobTrigger.Enabled;
-                    }
-
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// Creates a ScheduledJobTrigger object based on a provided WTS ITrigger.
-        /// </summary>
-        /// <param name="iTrigger">ITrigger.</param>
-        /// <returns>ScheduledJobTrigger.</returns>
-        private ScheduledJobTrigger CreateJobTrigger(
-            ITrigger iTrigger)
-        {
-            ScheduledJobTrigger rtnJobTrigger = null;
-
-            if (iTrigger is IBootTrigger)
-            {
-                IBootTrigger iBootTrigger = (IBootTrigger)iTrigger;
-                rtnJobTrigger = ScheduledJobTrigger.CreateAtStartupTrigger(
-                    ParseWTSTime(iBootTrigger.Delay),
-                    ConvertStringId(iBootTrigger.Id),
-                    iBootTrigger.Enabled);
-            }
-            else if (iTrigger is ILogonTrigger)
-            {
-                ILogonTrigger iLogonTrigger = (ILogonTrigger)iTrigger;
-                rtnJobTrigger = ScheduledJobTrigger.CreateAtLogOnTrigger(
-                    iLogonTrigger.UserId,
-                    ParseWTSTime(iLogonTrigger.Delay),
-                    ConvertStringId(iLogonTrigger.Id),
-                    iLogonTrigger.Enabled);
-            }
-            else if (iTrigger is ITimeTrigger)
-            {
-                ITimeTrigger iTimeTrigger = (ITimeTrigger)iTrigger;
-                TimeSpan repInterval = ParseWTSTime(iTimeTrigger.Repetition.Interval);
-                TimeSpan repDuration = (repInterval != TimeSpan.Zero && iTimeTrigger.Repetition.StopAtDurationEnd == false) ?
-                    TimeSpan.MaxValue : ParseWTSTime(iTimeTrigger.Repetition.Duration);
-                rtnJobTrigger = ScheduledJobTrigger.CreateOnceTrigger(
-                    DateTime.Parse(iTimeTrigger.StartBoundary, CultureInfo.InvariantCulture),
-                    ParseWTSTime(iTimeTrigger.RandomDelay),
-                    repInterval,
-                    repDuration,
-                    ConvertStringId(iTimeTrigger.Id),
-                    iTimeTrigger.Enabled);
-            }
-            else if (iTrigger is IDailyTrigger)
-            {
-                IDailyTrigger iDailyTrigger = (IDailyTrigger)iTrigger;
-                rtnJobTrigger = ScheduledJobTrigger.CreateDailyTrigger(
-                    DateTime.Parse(iDailyTrigger.StartBoundary, CultureInfo.InvariantCulture),
-                    (Int32)iDailyTrigger.DaysInterval,
-                    ParseWTSTime(iDailyTrigger.RandomDelay),
-                    ConvertStringId(iDailyTrigger.Id),
-                    iDailyTrigger.Enabled);
-            }
-            else if (iTrigger is IWeeklyTrigger)
-            {
-                IWeeklyTrigger iWeeklyTrigger = (IWeeklyTrigger)iTrigger;
-                rtnJobTrigger = ScheduledJobTrigger.CreateWeeklyTrigger(
-                    DateTime.Parse(iWeeklyTrigger.StartBoundary, CultureInfo.InvariantCulture),
-                    (Int32)iWeeklyTrigger.WeeksInterval,
-                    ConvertMaskToDaysOfWeekArray(iWeeklyTrigger.DaysOfWeek),
-                    ParseWTSTime(iWeeklyTrigger.RandomDelay),
-                    ConvertStringId(iWeeklyTrigger.Id),
-                    iWeeklyTrigger.Enabled);
-            }
-
-            return rtnJobTrigger;
-        }
-
-        private void AddTaskOptions(
-            ITaskDefinition iTaskDefinition,
-            ScheduledJobOptions jobOptions)
-        {
-            iTaskDefinition.Settings.DisallowStartIfOnBatteries = !jobOptions.StartIfOnBatteries;
-            iTaskDefinition.Settings.StopIfGoingOnBatteries = jobOptions.StopIfGoingOnBatteries;
-            iTaskDefinition.Settings.WakeToRun = jobOptions.WakeToRun;
-            iTaskDefinition.Settings.RunOnlyIfIdle = !jobOptions.StartIfNotIdle;
-            iTaskDefinition.Settings.IdleSettings.StopOnIdleEnd = jobOptions.StopIfGoingOffIdle;
-            iTaskDefinition.Settings.IdleSettings.RestartOnIdle = jobOptions.RestartOnIdleResume;
-            iTaskDefinition.Settings.IdleSettings.IdleDuration = ConvertTimeSpanToWTSString(jobOptions.IdleDuration);
-            iTaskDefinition.Settings.IdleSettings.WaitTimeout = ConvertTimeSpanToWTSString(jobOptions.IdleTimeout);
-            iTaskDefinition.Settings.Hidden = !jobOptions.ShowInTaskScheduler;
-            iTaskDefinition.Settings.RunOnlyIfNetworkAvailable = !jobOptions.RunWithoutNetwork;
-            iTaskDefinition.Settings.AllowDemandStart = !jobOptions.DoNotAllowDemandStart;
-            iTaskDefinition.Settings.MultipleInstances = ConvertFromMultiInstances(jobOptions.MultipleInstancePolicy);
-            iTaskDefinition.Principal.RunLevel = (jobOptions.RunElevated) ?
-                                                    _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST : _TASK_RUNLEVEL.TASK_RUNLEVEL_LUA;
-        }
-
-        private ScheduledJobOptions CreateJobOptions(
-            ITaskDefinition iTaskDefinition)
-        {
-            ITaskSettings iTaskSettings = iTaskDefinition.Settings;
-            IPrincipal iPrincipal = iTaskDefinition.Principal;
-
-            return new ScheduledJobOptions(
-                        !iTaskSettings.DisallowStartIfOnBatteries,
-                        iTaskSettings.StopIfGoingOnBatteries,
-                        iTaskSettings.WakeToRun,
-                        !iTaskSettings.RunOnlyIfIdle,
-                        iTaskSettings.IdleSettings.StopOnIdleEnd,
-                        iTaskSettings.IdleSettings.RestartOnIdle,
-                        ParseWTSTime(iTaskSettings.IdleSettings.IdleDuration),
-                        ParseWTSTime(iTaskSettings.IdleSettings.WaitTimeout),
-                        !iTaskSettings.Hidden,
-                        iPrincipal.RunLevel == _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST,
-                        !iTaskSettings.RunOnlyIfNetworkAvailable,
-                        !iTaskSettings.AllowDemandStart,
-                        ConvertToMultiInstances(iTaskSettings));
-        }
-
-        private void AddTaskAction(
-            ITaskDefinition iTaskDefinition,
-            ScheduledJobDefinition definition)
-        {
-            IExecAction iExecAction = iTaskDefinition.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC) as IExecAction;
-            Debug.Assert(iExecAction != null);
-
-            iExecAction.Id = ScheduledJobTaskActionId;
-            iExecAction.Path = definition.PSExecutionPath;
-            iExecAction.Arguments = definition.PSExecutionArgs;
-        }
-
-        /// <summary>
-        /// Gets and returns the unsecured password for the provided
-        /// PSCredential object.
-        /// </summary>
-        /// <param name="credential">PSCredential.</param>
-        /// <returns>Unsecured password string.</returns>
-        private string GetCredentialPassword(PSCredential credential)
-        {
-            if (credential == null)
-            {
-                return null;
-            }
-
-            IntPtr unmanagedString = IntPtr.Zero;
-            try
-            {
-                unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(credential.Password);
-                return Marshal.PtrToStringUni(unmanagedString);
-            }
-            finally
-            {
-                Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
-            }
-        }
-
-        #endregion
-
-        #region Private Utility Methods
-
-        /// <summary>
-        /// Gets the Task Scheduler root folder for Scheduled Jobs or
-        /// creates it if it does not exist.
-        /// </summary>
-        /// <returns>Scheduled Jobs root folder.</returns>
-        private ITaskFolder GetRootFolder()
-        {
-            ITaskFolder iTaskRootFolder = null;
-
-            try
-            {
-                iTaskRootFolder = _taskScheduler.GetFolder(ScheduledJobTasksRootFolder);
-            }
-            catch (System.IO.DirectoryNotFoundException)
-            {
-            }
-            catch (System.IO.FileNotFoundException)
-            {
-                // This can be thrown if COM interop tries to load the Microsoft.PowerShell.ScheduledJob
-                // assembly again.
-            }
-
-            if (iTaskRootFolder == null)
-            {
-                // Create the PowerShell Scheduled Job root folder.
-                ITaskFolder iTSWindowsFolder = _taskScheduler.GetFolder(TaskSchedulerWindowsFolder);
-                iTaskRootFolder = iTSWindowsFolder.CreateFolder(ScheduledJobSubFolder);
-            }
-
-            return iTaskRootFolder;
-        }
-
-        /// <summary>
-        /// Finds a task with the provided Task Id and returns it as
-        /// a ITaskDefinition object.
-        /// </summary>
-        /// <param name="taskId">Task Id.</param>
-        /// <returns>ITaskDefinition.</returns>
-        private ITaskDefinition FindTask(string taskId)
-        {
-            try
-            {
-                ITaskFolder iTaskFolder = _taskScheduler.GetFolder(ScheduledJobTasksRootFolder);
-                IRegisteredTask iRegisteredTask = iTaskFolder.GetTask(taskId);
-                return iRegisteredTask.Definition;
-            }
-            catch (System.IO.DirectoryNotFoundException e)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.CannotFindTaskId, taskId);
-                throw new ScheduledJobException(msg, e);
-            }
-        }
-
-        private Int32 ConvertStringId(string triggerId)
-        {
-            Int32 triggerIdVal = 0;
-
-            try
-            {
-                triggerIdVal = Convert.ToInt32(triggerId);
-            }
-            catch (FormatException)
-            { }
-            catch (OverflowException)
-            { }
-
-            return triggerIdVal;
-        }
-
-        /// <summary>
-        /// Helper method to parse a WTS time string and return
-        /// a corresponding TimeSpan object.  Note that the
-        /// year and month values are ignored.
-        /// Format:
-        /// "PnYnMnDTnHnMnS"
-        /// "P" - Date separator
-        ///  "nY" - year value.
-        ///  "nM" - month value.
-        ///  "nD" - day value.
-        /// "T" - Time separator
-        ///  "nH" - hour value.
-        ///  "nM" - minute value.
-        ///  "nS" - second value.
-        /// </summary>
-        /// <param name="wtsTime">Formatted time string.</param>
-        /// <returns>TimeSpan.</returns>
-        private TimeSpan ParseWTSTime(string wtsTime)
-        {
-            if (string.IsNullOrEmpty(wtsTime))
-            {
-                return new TimeSpan(0);
-            }
-
-            int days = 0;
-            int hours = 0;
-            int minutes = 0;
-            int seconds = 0;
-            int indx = 0;
-            int length = wtsTime.Length;
-            StringBuilder str = new StringBuilder();
-
-            try
-            {
-                while (indx != length)
-                {
-                    char c = wtsTime[indx++];
-
-                    switch (c)
-                    {
-                        case 'P':
-                            str.Clear();
-                            while (indx != length &&
-                                   wtsTime[indx] != 'T')
-                            {
-                                char c2 = wtsTime[indx++];
-                                if (c2 == 'Y')
-                                {
-                                    // Ignore year value.
-                                    str.Clear();
-                                }
-                                else if (c2 == 'M')
-                                {
-                                    // Ignore month value.
-                                    str.Clear();
-                                }
-                                else if (c2 == 'D')
-                                {
-                                    days = Convert.ToInt32(str.ToString(), CultureInfo.InvariantCulture);
-                                    str.Clear();
-                                }
-                                else if (c2 >= '0' && c2 <= '9')
-                                {
-                                    str.Append(c2);
-                                }
-                            }
-
-                            break;
-
-                        case 'T':
-                            str.Clear();
-                            while (indx != length &&
-                                   wtsTime[indx] != 'P')
-                            {
-                                char c2 = wtsTime[indx++];
-                                if (c2 == 'H')
-                                {
-                                    hours = Convert.ToInt32(str.ToString(), CultureInfo.InvariantCulture);
-                                    str.Clear();
-                                }
-                                else if (c2 == 'M')
-                                {
-                                    minutes = Convert.ToInt32(str.ToString(), CultureInfo.InvariantCulture);
-                                    str.Clear();
-                                }
-                                else if (c2 == 'S')
-                                {
-                                    seconds = Convert.ToInt32(str.ToString(), CultureInfo.InvariantCulture);
-                                    str.Clear();
-                                }
-                                else if (c2 >= '0' && c2 <= '9')
-                                {
-                                    str.Append(c2);
-                                }
-                            }
-
-                            break;
-                    }
-                }
-            }
-            catch (FormatException)
-            { }
-            catch (OverflowException)
-            { }
-
-            return new TimeSpan(days, hours, minutes, seconds);
-        }
-
-        /// <summary>
-        /// Creates WTS formatted time string based on TimeSpan parameter.
-        /// </summary>
-        /// <param name="time">TimeSpan.</param>
-        /// <returns>WTS time string.</returns>
-        internal static string ConvertTimeSpanToWTSString(TimeSpan time)
-        {
-            return string.Format(
-                    CultureInfo.InvariantCulture,
-                    "P{0}DT{1}H{2}M{3}S",
-                    time.Days,
-                    time.Hours,
-                    time.Minutes,
-                    time.Seconds);
-        }
-
-        /// <summary>
-        /// Converts DateTime to string for WTS.
-        /// </summary>
-        /// <param name="dt">DateTime.</param>
-        /// <returns>DateTime string.</returns>
-        internal static string ConvertDateTimeToString(DateTime? dt)
-        {
-            if (dt == null)
-            {
-                return string.Empty;
-            }
-            else
-            {
-                return dt.Value.ToString("s", CultureInfo.InvariantCulture);
-            }
-        }
-
-        /// <summary>
-        /// Returns a bitmask representing days of week as
-        /// required by Windows Task Scheduler API.
-        /// </summary>
-        /// <param name="daysOfWeek">Array of DayOfWeek.</param>
-        /// <returns>WTS days of week mask.</returns>
-        internal static short ConvertDaysOfWeekToMask(IEnumerable<DayOfWeek> daysOfWeek)
-        {
-            short rtnValue = 0;
-            foreach (DayOfWeek day in daysOfWeek)
-            {
-                switch (day)
-                {
-                    case DayOfWeek.Sunday:
-                        rtnValue |= WTSSunday;
-                        break;
-
-                    case DayOfWeek.Monday:
-                        rtnValue |= WTSMonday;
-                        break;
-
-                    case DayOfWeek.Tuesday:
-                        rtnValue |= WTSTuesday;
-                        break;
-
-                    case DayOfWeek.Wednesday:
-                        rtnValue |= WTSWednesday;
-                        break;
-
-                    case DayOfWeek.Thursday:
-                        rtnValue |= WTSThursday;
-                        break;
-
-                    case DayOfWeek.Friday:
-                        rtnValue |= WTSFriday;
-                        break;
-
-                    case DayOfWeek.Saturday:
-                        rtnValue |= WTSSaturday;
-                        break;
-                }
-            }
-
-            return rtnValue;
-        }
-
-        /// <summary>
-        /// Converts WTS days of week mask to an array of DayOfWeek type.
-        /// </summary>
-        /// <param name="mask">WTS days of week mask.</param>
-        /// <returns>Days of week as List.</returns>
-        private List<DayOfWeek> ConvertMaskToDaysOfWeekArray(short mask)
-        {
-            List<DayOfWeek> daysOfWeek = new List<DayOfWeek>();
-
-            if ((mask & WTSSunday) != 0) { daysOfWeek.Add(DayOfWeek.Sunday); }
-
-            if ((mask & WTSMonday) != 0) { daysOfWeek.Add(DayOfWeek.Monday); }
-
-            if ((mask & WTSTuesday) != 0) { daysOfWeek.Add(DayOfWeek.Tuesday); }
-
-            if ((mask & WTSWednesday) != 0) { daysOfWeek.Add(DayOfWeek.Wednesday); }
-
-            if ((mask & WTSThursday) != 0) { daysOfWeek.Add(DayOfWeek.Thursday); }
-
-            if ((mask & WTSFriday) != 0) { daysOfWeek.Add(DayOfWeek.Friday); }
-
-            if ((mask & WTSSaturday) != 0) { daysOfWeek.Add(DayOfWeek.Saturday); }
-
-            return daysOfWeek;
-        }
-
-        private TaskMultipleInstancePolicy ConvertToMultiInstances(
-            ITaskSettings iTaskSettings)
-        {
-            switch (iTaskSettings.MultipleInstances)
-            {
-                case _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW:
-                    return TaskMultipleInstancePolicy.IgnoreNew;
-
-                case _TASK_INSTANCES_POLICY.TASK_INSTANCES_PARALLEL:
-                    return TaskMultipleInstancePolicy.Parallel;
-
-                case _TASK_INSTANCES_POLICY.TASK_INSTANCES_QUEUE:
-                    return TaskMultipleInstancePolicy.Queue;
-
-                case _TASK_INSTANCES_POLICY.TASK_INSTANCES_STOP_EXISTING:
-                    return TaskMultipleInstancePolicy.StopExisting;
-            }
-
-            Debug.Assert(false);
-            return TaskMultipleInstancePolicy.None;
-        }
-
-        private _TASK_INSTANCES_POLICY ConvertFromMultiInstances(
-            TaskMultipleInstancePolicy jobPolicies)
-        {
-            switch (jobPolicies)
-            {
-                case TaskMultipleInstancePolicy.IgnoreNew:
-                    return _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
-
-                case TaskMultipleInstancePolicy.Parallel:
-                    return _TASK_INSTANCES_POLICY.TASK_INSTANCES_PARALLEL;
-
-                case TaskMultipleInstancePolicy.Queue:
-                    return _TASK_INSTANCES_POLICY.TASK_INSTANCES_QUEUE;
-
-                case TaskMultipleInstancePolicy.StopExisting:
-                    return _TASK_INSTANCES_POLICY.TASK_INSTANCES_STOP_EXISTING;
-
-                default:
-                    return _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
-            }
-        }
-
-        #endregion
-
-        #region IDisposable
-
-        /// <summary>
-        /// Dispose.
-        /// </summary>
-        public void Dispose()
-        {
-            // Release reference to Task Scheduler object so that the COM
-            // object can be released.
-            _iRootFolder = null;
-            _taskScheduler = null;
-
-            GC.SuppressFinalize(this);
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/AddJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/AddJobTrigger.cs
deleted file mode 100644
index 2936fcf78c6..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/AddJobTrigger.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet adds ScheduledJobTriggers to ScheduledJobDefinition objects.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Add, "JobTrigger", DefaultParameterSetName = AddJobTriggerCommand.JobDefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223913")]
-    public sealed class AddJobTriggerCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string JobDefinitionParameterSet = "JobDefinition";
-        private const string JobDefinitionIdParameterSet = "JobDefinitionId";
-        private const string JobDefinitionNameParameterSet = "JobDefinitionName";
-
-        /// <summary>
-        /// ScheduledJobTrigger.
-        /// </summary>
-        [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionParameterSet)]
-        [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionIdParameterSet)]
-        [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobTrigger[] Trigger
-        {
-            get { return _triggers; }
-
-            set { _triggers = value; }
-        }
-
-        private ScheduledJobTrigger[] _triggers;
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionIdParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] Id
-        {
-            get { return _ids; }
-
-            set { _ids = value; }
-        }
-
-        private Int32[] _ids;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return _names; }
-
-            set { _names = value; }
-        }
-
-        private string[] _names;
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = AddJobTriggerCommand.JobDefinitionParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobDefinition[] InputObject
-        {
-            get { return _definitions; }
-
-            set { _definitions = value; }
-        }
-
-        private ScheduledJobDefinition[] _definitions;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case JobDefinitionParameterSet:
-                    AddToJobDefinition(_definitions);
-                    break;
-
-                case JobDefinitionIdParameterSet:
-                    AddToJobDefinition(GetJobDefinitionsById(_ids));
-                    break;
-
-                case JobDefinitionNameParameterSet:
-                    AddToJobDefinition(GetJobDefinitionsByName(_names));
-                    break;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void AddToJobDefinition(IEnumerable<ScheduledJobDefinition> jobDefinitions)
-        {
-            foreach (ScheduledJobDefinition definition in jobDefinitions)
-            {
-                try
-                {
-                    definition.AddTriggers(_triggers, true);
-                }
-                catch (ScheduledJobException e)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.CantAddJobTriggersToDefinition, definition.Name);
-                    Exception reason = new RuntimeException(msg, e);
-                    ErrorRecord errorRecord = new ErrorRecord(reason, "CantAddJobTriggersToScheduledJobDefinition", ErrorCategory.InvalidOperation, definition);
-                    WriteError(errorRecord);
-                }
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinition.cs
deleted file mode 100644
index d76b1829d42..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinition.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet disables the specified ScheduledJobDefinition.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Disable, "ScheduledJob", SupportsShouldProcess = true, DefaultParameterSetName = DisableScheduledJobDefinitionBase.DefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223927")]
-    [OutputType(typeof(ScheduledJobDefinition))]
-    public sealed class DisableScheduledJobCommand : DisableScheduledJobDefinitionBase
-    {
-        #region Properties
-
-        /// <summary>
-        /// Returns true if scheduled job definition should be enabled,
-        /// false otherwise.
-        /// </summary>
-        protected override bool Enabled
-        {
-            get { return false; }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinitionBase.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinitionBase.cs
deleted file mode 100644
index d06020ed3d6..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobDefinitionBase.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// Base class for the DisableScheduledJobCommand, EnableScheduledJobCommand cmdlets.
-    /// </summary>
-    public abstract class DisableScheduledJobDefinitionBase : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        /// <summary>
-        /// DefinitionIdParameterSet.
-        /// </summary>
-        protected const string DefinitionIdParameterSet = "DefinitionId";
-
-        /// <summary>
-        /// DefinitionNameParameterSet.
-        /// </summary>
-        protected const string DefinitionNameParameterSet = "DefinitionName";
-
-        /// <summary>
-        /// DefinitionParameterSet.
-        /// </summary>
-        protected const string DefinitionParameterSet = "Definition";
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobDefinition InputObject
-        {
-            get { return _definition; }
-
-            set { _definition = value; }
-        }
-
-        private ScheduledJobDefinition _definition;
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionIdParameterSet)]
-        public Int32 Id
-        {
-            get { return _definitionId; }
-
-            set { _definitionId = value; }
-        }
-
-        private Int32 _definitionId;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return _definitionName; }
-
-            set { _definitionName = value; }
-        }
-
-        private string _definitionName;
-
-        /// <summary>
-        /// Pass through ScheduledJobDefinition object.
-        /// </summary>
-        [Parameter(ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionParameterSet)]
-        [Parameter(ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionIdParameterSet)]
-        [Parameter(ParameterSetName = DisableScheduledJobDefinitionBase.DefinitionNameParameterSet)]
-        public SwitchParameter PassThru
-        {
-            get { return _passThru; }
-
-            set { _passThru = value; }
-        }
-
-        private SwitchParameter _passThru;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            ScheduledJobDefinition definition = null;
-
-            switch (ParameterSetName)
-            {
-                case DefinitionParameterSet:
-                    definition = _definition;
-                    break;
-
-                case DefinitionIdParameterSet:
-                    definition = GetJobDefinitionById(_definitionId);
-                    break;
-
-                case DefinitionNameParameterSet:
-                    definition = GetJobDefinitionByName(_definitionName);
-                    break;
-            }
-
-            string verbName = Enabled ? VerbsLifecycle.Enable : VerbsLifecycle.Disable;
-
-            if (definition != null &&
-                ShouldProcess(definition.Name, verbName))
-            {
-                try
-                {
-                    definition.SetEnabled(Enabled, true);
-                }
-                catch (ScheduledJobException e)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.CantSetEnableOnJobDefinition, definition.Name);
-                    Exception reason = new RuntimeException(msg, e);
-                    ErrorRecord errorRecord = new ErrorRecord(reason, "CantSetEnableOnScheduledJobDefinition", ErrorCategory.InvalidOperation, definition);
-                    WriteError(errorRecord);
-                }
-
-                if (_passThru)
-                {
-                    WriteObject(definition);
-                }
-            }
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Returns true if scheduled job definition should be enabled,
-        /// false otherwise.
-        /// </summary>
-        protected abstract bool Enabled
-        {
-            get;
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobTrigger.cs
deleted file mode 100644
index 02e37c0acfb..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/DisableJobTrigger.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet enables triggers on a ScheduledJobDefinition object.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Disable, "JobTrigger", SupportsShouldProcess = true, DefaultParameterSetName = DisableJobTriggerCommand.EnabledParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223918")]
-    public sealed class DisableJobTriggerCommand : EnableDisableScheduledJobCmdletBase
-    {
-        #region Enabled Implementation
-
-        /// <summary>
-        /// Property to determine if trigger should be enabled or disabled.
-        /// </summary>
-        internal override bool Enabled
-        {
-            get { return false; }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableDisableCmdletBase.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/EnableDisableCmdletBase.cs
deleted file mode 100644
index c00626e6d64..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableDisableCmdletBase.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// Base class for DisableJobTrigger, EnableJobTrigger cmdlets.
-    /// </summary>
-    public abstract class EnableDisableScheduledJobCmdletBase : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        /// <summary>
-        /// JobDefinition parameter set.
-        /// </summary>
-        protected const string EnabledParameterSet = "JobEnabled";
-
-        /// <summary>
-        /// ScheduledJobTrigger objects to set properties on.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = EnableDisableScheduledJobCmdletBase.EnabledParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobTrigger[] InputObject
-        {
-            get { return _triggers; }
-
-            set { _triggers = value; }
-        }
-
-        /// <summary>
-        /// Pass through for scheduledjobtrigger object.
-        /// </summary>
-        [Parameter(ParameterSetName = EnableDisableScheduledJobCmdletBase.EnabledParameterSet)]
-        public SwitchParameter PassThru
-        {
-            get { return _passThru; }
-
-            set { _passThru = value; }
-        }
-
-        private SwitchParameter _passThru;
-
-        private ScheduledJobTrigger[] _triggers;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // Update each trigger with the current enabled state.
-            foreach (ScheduledJobTrigger trigger in _triggers)
-            {
-                trigger.Enabled = Enabled;
-                if (trigger.JobDefinition != null)
-                {
-                    trigger.UpdateJobDefinition();
-                }
-
-                if (_passThru)
-                {
-                    WriteObject(trigger);
-                }
-            }
-        }
-
-        #endregion
-
-        #region Internal Properties
-
-        /// <summary>
-        /// Property to determine if trigger should be enabled or disabled.
-        /// </summary>
-        internal abstract bool Enabled
-        {
-            get;
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobDefinition.cs
deleted file mode 100644
index 6f236ea57af..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobDefinition.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet enables the specified ScheduledJobDefinition.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Enable, "ScheduledJob", SupportsShouldProcess = true, DefaultParameterSetName = DisableScheduledJobDefinitionBase.DefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223926")]
-    [OutputType(typeof(ScheduledJobDefinition))]
-    public sealed class EnableScheduledJobCommand : DisableScheduledJobDefinitionBase
-    {
-        #region Properties
-
-        /// <summary>
-        /// Returns true if scheduled job definition should be enabled,
-        /// false otherwise.
-        /// </summary>
-        protected override bool Enabled
-        {
-            get { return true; }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobTrigger.cs
deleted file mode 100644
index 955dde31dfe..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/EnableJobTrigger.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet disables triggers on a ScheduledJobDefinition object.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Enable, "JobTrigger", SupportsShouldProcess = true, DefaultParameterSetName = EnableJobTriggerCommand.EnabledParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223917")]
-    public sealed class EnableJobTriggerCommand : EnableDisableScheduledJobCmdletBase
-    {
-       #region Enabled Implementation
-
-        /// <summary>
-        /// Property to determine if trigger should be enabled or disabled.
-        /// </summary>
-        internal override bool Enabled
-        {
-            get { return true; }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobDefinition.cs
deleted file mode 100644
index 772027f4fa5..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobDefinition.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet gets scheduled job definition objects from the local repository.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "ScheduledJob", DefaultParameterSetName = GetScheduledJobCommand.DefinitionIdParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223923")]
-    [OutputType(typeof(ScheduledJobDefinition))]
-    public sealed class GetScheduledJobCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string DefinitionIdParameterSet = "DefinitionId";
-        private const string DefinitionNameParameterSet = "DefinitionName";
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0,
-                   ParameterSetName = GetScheduledJobCommand.DefinitionIdParameterSet)]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] Id
-        {
-            get { return _definitionIds; }
-
-            set { _definitionIds = value; }
-        }
-
-        private Int32[] _definitionIds;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = GetScheduledJobCommand.DefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return _definitionNames; }
-
-            set { _definitionNames = value; }
-        }
-
-        private string[] _definitionNames;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case DefinitionIdParameterSet:
-                    if (_definitionIds == null)
-                    {
-                        FindAllJobDefinitions(
-                            (definition) =>
-                            {
-                                WriteObject(definition);
-                            });
-                    }
-                    else
-                    {
-                        FindJobDefinitionsById(
-                            _definitionIds,
-                            (definition) =>
-                            {
-                                WriteObject(definition);
-                            });
-                    }
-
-                    break;
-
-                case DefinitionNameParameterSet:
-                    FindJobDefinitionsByName(
-                        _definitionNames,
-                        (definition) =>
-                        {
-                            WriteObject(definition);
-                        });
-                    break;
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobTrigger.cs
deleted file mode 100644
index 0218395f3a1..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/GetJobTrigger.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet gets ScheduledJobTriggers for the specified ScheduledJobDefinition object.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "JobTrigger", DefaultParameterSetName = GetJobTriggerCommand.JobDefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223915")]
-    [OutputType(typeof(ScheduledJobTrigger))]
-    public sealed class GetJobTriggerCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string JobDefinitionParameterSet = "JobDefinition";
-        private const string JobDefinitionIdParameterSet = "JobDefinitionId";
-        private const string JobDefinitionNameParameterSet = "JobDefinitionName";
-
-        /// <summary>
-        /// Trigger number to get.
-        /// </summary>
-        [Parameter(Position = 1,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionParameterSet)]
-        [Parameter(Position = 1,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionIdParameterSet)]
-        [Parameter(Position = 1,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] TriggerId
-        {
-            get { return _triggerIds; }
-
-            set { _triggerIds = value; }
-        }
-
-        private Int32[] _triggerIds;
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobDefinition InputObject
-        {
-            get { return _definition; }
-
-            set { _definition = value; }
-        }
-
-        private ScheduledJobDefinition _definition;
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionIdParameterSet)]
-        public Int32 Id
-        {
-            get { return _definitionId; }
-
-            set { _definitionId = value; }
-        }
-
-        private Int32 _definitionId;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = GetJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return _name; }
-
-            set { _name = value; }
-        }
-
-        private string _name;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case JobDefinitionParameterSet:
-                    WriteTriggers(_definition);
-                    break;
-
-                case JobDefinitionIdParameterSet:
-                    WriteTriggers(GetJobDefinitionById(_definitionId));
-                    break;
-
-                case JobDefinitionNameParameterSet:
-                    WriteTriggers(GetJobDefinitionByName(_name));
-                    break;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void WriteTriggers(ScheduledJobDefinition definition)
-        {
-            if (definition == null)
-            {
-                return;
-            }
-
-            List<Int32> notFoundIds;
-            List<ScheduledJobTrigger> triggers = definition.GetTriggers(_triggerIds, out notFoundIds);
-
-            // Write found trigger objects.
-            foreach (ScheduledJobTrigger trigger in triggers)
-            {
-                WriteObject(trigger);
-            }
-
-            // Report any triggers that were not found.
-            foreach (Int32 notFoundId in notFoundIds)
-            {
-                WriteTriggerNotFoundError(notFoundId, definition.Name, definition);
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/GetScheduledJobOption.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/GetScheduledJobOption.cs
deleted file mode 100644
index 4de3131b223..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/GetScheduledJobOption.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet gets scheduled job option object from a provided ScheduledJobDefinition object.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Get, "ScheduledJobOption", DefaultParameterSetName = GetScheduledJobOptionCommand.JobDefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223920")]
-    [OutputType(typeof(ScheduledJobOptions))]
-    public sealed class GetScheduledJobOptionCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string JobDefinitionParameterSet = "JobDefinition";
-        private const string JobDefinitionIdParameterSet = "JobDefinitionId";
-        private const string JobDefinitionNameParameterSet = "JobDefinitionName";
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = GetScheduledJobOptionCommand.JobDefinitionIdParameterSet)]
-        public Int32 Id
-        {
-            get { return _id; }
-
-            set { _id = value; }
-        }
-
-        private Int32 _id;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = GetScheduledJobOptionCommand.JobDefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return _name; }
-
-            set { _name = value; }
-        }
-
-        private string _name;
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = GetScheduledJobOptionCommand.JobDefinitionParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobDefinition InputObject
-        {
-            get { return _definition; }
-
-            set { _definition = value; }
-        }
-
-        private ScheduledJobDefinition _definition;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // Get ScheduledJobDefinition object.
-            ScheduledJobDefinition definition = null;
-            switch (ParameterSetName)
-            {
-                case JobDefinitionParameterSet:
-                    definition = _definition;
-                    break;
-
-                case JobDefinitionIdParameterSet:
-                    definition = GetJobDefinitionById(_id);
-                    break;
-
-                case JobDefinitionNameParameterSet:
-                    definition = GetJobDefinitionByName(_name);
-                    break;
-            }
-
-            // Return options from the definition object.
-            if (definition != null)
-            {
-                WriteObject(definition.Options);
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/NewJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/NewJobTrigger.cs
deleted file mode 100644
index 99ce575bec3..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/NewJobTrigger.cs
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet creates a new scheduled job trigger based on the provided
-    /// parameter values.
-    /// </summary>
-    [Cmdlet(VerbsCommon.New, "JobTrigger", DefaultParameterSetName = NewJobTriggerCommand.OnceParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223912")]
-    [OutputType(typeof(ScheduledJobTrigger))]
-    public sealed class NewJobTriggerCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string AtLogonParameterSet = "AtLogon";
-        private const string AtStartupParameterSet = "AtStartup";
-        private const string OnceParameterSet = "Once";
-        private const string DailyParameterSet = "Daily";
-        private const string WeeklyParameterSet = "Weekly";
-
-        /// <summary>
-        /// Daily interval for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.DailyParameterSet)]
-        public Int32 DaysInterval
-        {
-            get { return _daysInterval; }
-
-            set { _daysInterval = value; }
-        }
-
-        private Int32 _daysInterval = 1;
-
-        /// <summary>
-        /// Weekly interval for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.WeeklyParameterSet)]
-        public Int32 WeeksInterval
-        {
-            get { return _weeksInterval; }
-
-            set { _weeksInterval = value; }
-        }
-
-        private Int32 _weeksInterval = 1;
-
-        /// <summary>
-        /// Random delay for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.AtLogonParameterSet)]
-        [Parameter(ParameterSetName = NewJobTriggerCommand.AtStartupParameterSet)]
-        [Parameter(ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        [Parameter(ParameterSetName = NewJobTriggerCommand.DailyParameterSet)]
-        [Parameter(ParameterSetName = NewJobTriggerCommand.WeeklyParameterSet)]
-        public TimeSpan RandomDelay
-        {
-            get { return _randomDelay; }
-
-            set { _randomDelay = value; }
-        }
-
-        private TimeSpan _randomDelay;
-
-        /// <summary>
-        /// Job start date/time for trigger.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        [Parameter(Mandatory = true,
-                   ParameterSetName = NewJobTriggerCommand.DailyParameterSet)]
-        [Parameter(Mandatory = true,
-                   ParameterSetName = NewJobTriggerCommand.WeeklyParameterSet)]
-        public DateTime At
-        {
-            get { return _atTime; }
-
-            set { _atTime = value; }
-        }
-
-        private DateTime _atTime;
-
-        /// <summary>
-        /// User name for AtLogon trigger.  User name is used to determine which user
-        /// log on causes the trigger to activate.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.AtLogonParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string User
-        {
-            get { return _user; }
-
-            set { _user = value; }
-        }
-
-        private string _user;
-
-        /// <summary>
-        /// Days of week for trigger applies only to the Weekly parameter set.
-        /// Specifies which day(s) of the week the weekly trigger is activated.
-        /// </summary>
-        [Parameter(Mandatory = true, ParameterSetName = NewJobTriggerCommand.WeeklyParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public DayOfWeek[] DaysOfWeek
-        {
-            get { return _daysOfWeek; }
-
-            set { _daysOfWeek = value; }
-        }
-
-        private DayOfWeek[] _daysOfWeek;
-
-        /// <summary>
-        /// Switch to specify an AtStartup trigger.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0,
-            ParameterSetName = NewJobTriggerCommand.AtStartupParameterSet)]
-        public SwitchParameter AtStartup
-        {
-            get { return _atStartup; }
-
-            set { _atStartup = value; }
-        }
-
-        private SwitchParameter _atStartup;
-
-        /// <summary>
-        /// Switch to specify an AtLogon trigger.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0,
-            ParameterSetName = NewJobTriggerCommand.AtLogonParameterSet)]
-        public SwitchParameter AtLogOn
-        {
-            get { return _atLogon; }
-
-            set { _atLogon = value; }
-        }
-
-        private SwitchParameter _atLogon;
-
-        /// <summary>
-        /// Switch to specify a Once (one time) trigger.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0,
-            ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        public SwitchParameter Once
-        {
-            get { return _once; }
-
-            set { _once = value; }
-        }
-
-        private SwitchParameter _once;
-
-        /// <summary>
-        /// Repetition interval of a one time trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        public TimeSpan RepetitionInterval
-        {
-            get { return _repInterval; }
-
-            set { _repInterval = value; }
-        }
-
-        private TimeSpan _repInterval;
-
-        /// <summary>
-        /// Repetition duration of a one time trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        public TimeSpan RepetitionDuration
-        {
-            get { return _repDuration; }
-
-            set { _repDuration = value; }
-        }
-
-        private TimeSpan _repDuration;
-
-        /// <summary>
-        /// Repetition interval repeats indefinitely.
-        /// </summary>
-        [Parameter(ParameterSetName = NewJobTriggerCommand.OnceParameterSet)]
-        public SwitchParameter RepeatIndefinitely
-        {
-            get { return _repRepeatIndefinitely; }
-
-            set { _repRepeatIndefinitely = value; }
-        }
-
-        private SwitchParameter _repRepeatIndefinitely;
-
-        /// <summary>
-        /// Switch to specify a Daily trigger.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0,
-            ParameterSetName = NewJobTriggerCommand.DailyParameterSet)]
-        public SwitchParameter Daily
-        {
-            get { return _daily; }
-
-            set { _daily = value; }
-        }
-
-        private SwitchParameter _daily;
-
-        /// <summary>
-        /// Switch to specify a Weekly trigger.
-        /// </summary>
-        [Parameter(Mandatory = true, Position = 0,
-            ParameterSetName = NewJobTriggerCommand.WeeklyParameterSet)]
-        public SwitchParameter Weekly
-        {
-            get { return _weekly; }
-
-            set { _weekly = value; }
-        }
-
-        private SwitchParameter _weekly;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Do begin processing.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            base.BeginProcessing();
-
-            // Validate parameters.
-            if (_daysInterval < 1)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidDaysIntervalParam);
-            }
-
-            if (_weeksInterval < 1)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidWeeksIntervalParam);
-            }
-        }
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case AtLogonParameterSet:
-                    CreateAtLogonTrigger();
-                    break;
-
-                case AtStartupParameterSet:
-                    CreateAtStartupTrigger();
-                    break;
-
-                case OnceParameterSet:
-                    CreateOnceTrigger();
-                    break;
-
-                case DailyParameterSet:
-                    CreateDailyTrigger();
-                    break;
-
-                case WeeklyParameterSet:
-                    CreateWeeklyTrigger();
-                    break;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void CreateAtLogonTrigger()
-        {
-            WriteObject(ScheduledJobTrigger.CreateAtLogOnTrigger(_user, _randomDelay, 0, true));
-        }
-
-        private void CreateAtStartupTrigger()
-        {
-            WriteObject(ScheduledJobTrigger.CreateAtStartupTrigger(_randomDelay, 0, true));
-        }
-
-        private void CreateOnceTrigger()
-        {
-            TimeSpan? repInterval = null;
-            TimeSpan? repDuration = null;
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepeatIndefinitely)))
-            {
-                if (MyInvocation.BoundParameters.ContainsKey(nameof(RepeatIndefinitely)))
-                {
-                    if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)))
-                    {
-                        throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepeatIndefinitelyParams);
-                    }
-
-                    if (!MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)))
-                    {
-                        throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionRepeatParams);
-                    }
-
-                    _repDuration = TimeSpan.MaxValue;
-                }
-                else if (!MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || !MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)))
-                {
-                    throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionParams);
-                }
-
-                if (_repInterval < TimeSpan.Zero || _repDuration < TimeSpan.Zero)
-                {
-                    throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionParamValues);
-                }
-
-                if (_repInterval < TimeSpan.FromMinutes(1))
-                {
-                    throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionIntervalValue);
-                }
-
-                if (_repInterval > _repDuration)
-                {
-                    throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionInterval);
-                }
-
-                repInterval = _repInterval;
-                repDuration = _repDuration;
-            }
-
-            WriteObject(ScheduledJobTrigger.CreateOnceTrigger(_atTime, _randomDelay, repInterval, repDuration, 0, true));
-        }
-
-        private void CreateDailyTrigger()
-        {
-            WriteObject(ScheduledJobTrigger.CreateDailyTrigger(_atTime, _daysInterval, _randomDelay, 0, true));
-        }
-
-        private void CreateWeeklyTrigger()
-        {
-            WriteObject(ScheduledJobTrigger.CreateWeeklyTrigger(_atTime, _weeksInterval, _daysOfWeek, _randomDelay, 0, true));
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/NewScheduledJobOption.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/NewScheduledJobOption.cs
deleted file mode 100644
index 09eab549426..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/NewScheduledJobOption.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet creates a new scheduled job option object based on the provided
-    /// parameter values.
-    /// </summary>
-    [Cmdlet(VerbsCommon.New, "ScheduledJobOption", DefaultParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223919")]
-    [OutputType(typeof(ScheduledJobOptions))]
-    public sealed class NewScheduledJobOptionCommand : ScheduledJobOptionCmdletBase
-    {
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            WriteObject(new ScheduledJobOptions(
-                StartIfOnBattery,
-                !ContinueIfGoingOnBattery,
-                WakeToRun,
-                !StartIfIdle,
-                StopIfGoingOffIdle,
-                RestartOnIdleResume,
-                IdleDuration,
-                IdleTimeout,
-                !HideInTaskScheduler,
-                RunElevated,
-                !RequireNetwork,
-                DoNotAllowDemandStart,
-                MultipleInstancePolicy));
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/RegisterJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/RegisterJobDefinition.cs
deleted file mode 100644
index e473f91dfd4..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/RegisterJobDefinition.cs
+++ /dev/null
@@ -1,408 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-
-using Microsoft.PowerShell.Commands;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet creates a new scheduled job definition object based on the provided
-    /// parameter values and registers it with the Task Scheduler.
-    /// </summary>
-    [SuppressMessage("Microsoft.PowerShell", "PS1012:CallShouldProcessOnlyIfDeclaringSupport")]
-    [Cmdlet(VerbsLifecycle.Register, "ScheduledJob", SupportsShouldProcess = true, DefaultParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223922")]
-    [OutputType(typeof(ScheduledJobDefinition))]
-    public sealed class RegisterScheduledJobCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string FilePathParameterSet = "FilePath";
-        private const string ScriptBlockParameterSet = "ScriptBlock";
-
-        /// <summary>
-        /// File path for script to be run in job.
-        /// </summary>
-        [Parameter(Position = 1, Mandatory = true,
-                   ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Alias("Path")]
-        [ValidateNotNullOrEmpty]
-        public string FilePath
-        {
-            get { return _filePath; }
-
-            set { _filePath = value; }
-        }
-
-        private string _filePath;
-
-        /// <summary>
-        /// ScriptBlock containing script to run in job.
-        /// </summary>
-        [Parameter(Position = 1, Mandatory = true,
-                   ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNull]
-        public ScriptBlock ScriptBlock
-        {
-            get { return _scriptBlock; }
-
-            set { _scriptBlock = value; }
-        }
-
-        private ScriptBlock _scriptBlock;
-
-        /// <summary>
-        /// Name of scheduled job definition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return _name; }
-
-            set { _name = value; }
-        }
-
-        private string _name;
-
-        /// <summary>
-        /// Triggers to define when job will run.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobTrigger[] Trigger
-        {
-            get { return _triggers; }
-
-            set { _triggers = value; }
-        }
-
-        private ScheduledJobTrigger[] _triggers;
-
-        /// <summary>
-        /// Initialization script to run before the job starts.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNull]
-        public ScriptBlock InitializationScript
-        {
-            get { return _initializationScript; }
-
-            set { _initializationScript = value; }
-        }
-
-        private ScriptBlock _initializationScript;
-
-        /// <summary>
-        /// Runs the job in a 32-bit PowerShell process.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        public SwitchParameter RunAs32
-        {
-            get { return _runAs32; }
-
-            set { _runAs32 = value; }
-        }
-
-        private SwitchParameter _runAs32;
-
-        /// <summary>
-        /// Credentials for job.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [Credential()]
-        public PSCredential Credential
-        {
-            get { return _credential; }
-
-            set { _credential = value; }
-        }
-
-        private PSCredential _credential;
-
-        /// <summary>
-        /// Authentication mechanism to use for job.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        public AuthenticationMechanism Authentication
-        {
-            get { return _authenticationMechanism; }
-
-            set { _authenticationMechanism = value; }
-        }
-
-        private AuthenticationMechanism _authenticationMechanism;
-
-        /// <summary>
-        /// Scheduling options for job.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobOptions ScheduledJobOption
-        {
-            get { return _options; }
-
-            set { _options = value; }
-        }
-
-        private ScheduledJobOptions _options;
-
-        /// <summary>
-        /// Argument list for FilePath parameter.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public object[] ArgumentList
-        {
-            get { return _arguments; }
-
-            set { _arguments = value; }
-        }
-
-        private object[] _arguments;
-
-        /// <summary>
-        /// Maximum number of job results allowed in job store.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        public int MaxResultCount
-        {
-            get { return _executionHistoryLength; }
-
-            set { _executionHistoryLength = value; }
-        }
-
-        private int _executionHistoryLength;
-
-        /// <summary>
-        /// Runs scheduled job immediately after successful registration.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        public SwitchParameter RunNow
-        {
-            get { return _runNow; }
-
-            set { _runNow = value; }
-        }
-
-        private SwitchParameter _runNow;
-
-        /// <summary>
-        /// Runs scheduled job at the repetition interval indicated by the
-        /// TimeSpan value for an unending duration.
-        /// </summary>
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = RegisterScheduledJobCommand.ScriptBlockParameterSet)]
-        public TimeSpan RunEvery
-        {
-            get { return _runEvery; }
-
-            set { _runEvery = value; }
-        }
-
-        private TimeSpan _runEvery;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            string targetString = StringUtil.Format(ScheduledJobErrorStrings.DefinitionWhatIf, Name);
-            if (!ShouldProcess(targetString, VerbsLifecycle.Register))
-            {
-                return;
-            }
-
-            ScheduledJobDefinition definition = null;
-
-            switch (ParameterSetName)
-            {
-                case ScriptBlockParameterSet:
-                    definition = CreateScriptBlockDefinition();
-                    break;
-
-                case FilePathParameterSet:
-                    definition = CreateFilePathDefinition();
-                    break;
-            }
-
-            if (definition != null)
-            {
-                // Set the MaxCount value if available.
-                if (MyInvocation.BoundParameters.ContainsKey(nameof(MaxResultCount)))
-                {
-                    if (MaxResultCount < 1)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidMaxResultCount);
-                        Exception reason = new RuntimeException(msg);
-                        ErrorRecord errorRecord = new ErrorRecord(reason, "InvalidMaxResultCountParameterForRegisterScheduledJobDefinition", ErrorCategory.InvalidArgument, null);
-                        WriteError(errorRecord);
-
-                        return;
-                    }
-
-                    definition.SetExecutionHistoryLength(MaxResultCount, false);
-                }
-
-                try
-                {
-                    // If RunEvery parameter is specified then create a job trigger for the definition that
-                    // runs the job at the requested interval.
-                    if (MyInvocation.BoundParameters.ContainsKey(nameof(RunEvery)))
-                    {
-                        AddRepetitionJobTriggerToDefinition(
-                            definition,
-                            RunEvery,
-                            false);
-                    }
-
-                    definition.Register();
-                    WriteObject(definition);
-
-                    if (_runNow)
-                    {
-                        definition.RunAsTask();
-                    }
-                }
-                catch (ScheduledJobException e)
-                {
-                    // Check for access denied error.
-                    if (e.InnerException != null && e.InnerException is System.UnauthorizedAccessException)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.UnauthorizedAccessError, definition.Name);
-                        Exception reason = new RuntimeException(msg, e);
-                        ErrorRecord errorRecord = new ErrorRecord(reason, "UnauthorizedAccessToRegisterScheduledJobDefinition", ErrorCategory.PermissionDenied, definition);
-                        WriteError(errorRecord);
-                    }
-                    else if (e.InnerException != null && e.InnerException is System.IO.DirectoryNotFoundException)
-                    {
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.DirectoryNotFoundError, definition.Name);
-                        Exception reason = new RuntimeException(msg, e);
-                        ErrorRecord errorRecord = new ErrorRecord(reason, "DirectoryNotFoundWhenRegisteringScheduledJobDefinition", ErrorCategory.ObjectNotFound, definition);
-                        WriteError(errorRecord);
-                    }
-                    else if (e.InnerException != null && e.InnerException is System.Runtime.Serialization.InvalidDataContractException)
-                    {
-                        string innerMsg = (!string.IsNullOrEmpty(e.InnerException.Message)) ? e.InnerException.Message : string.Empty;
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.CannotSerializeData, definition.Name, innerMsg);
-                        Exception reason = new RuntimeException(msg, e);
-                        ErrorRecord errorRecord = new ErrorRecord(reason, "CannotSerializeDataWhenRegisteringScheduledJobDefinition", ErrorCategory.InvalidData, definition);
-                        WriteError(errorRecord);
-                    }
-                    else
-                    {
-                        // Create record around known exception type.
-                        ErrorRecord errorRecord = new ErrorRecord(e, "CantRegisterScheduledJobDefinition", ErrorCategory.InvalidOperation, definition);
-                        WriteError(errorRecord);
-                    }
-                }
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private ScheduledJobDefinition CreateScriptBlockDefinition()
-        {
-            JobDefinition jobDefinition = new JobDefinition(typeof(ScheduledJobSourceAdapter), ScriptBlock.ToString(), _name);
-            jobDefinition.ModuleName = ModuleName;
-            Dictionary<string, object> parameterCollection = CreateCommonParameters();
-
-            // ScriptBlock, mandatory
-            parameterCollection.Add(ScheduledJobInvocationInfo.ScriptBlockParameter, ScriptBlock);
-
-            JobInvocationInfo jobInvocationInfo = new ScheduledJobInvocationInfo(jobDefinition, parameterCollection);
-
-            ScheduledJobDefinition definition = new ScheduledJobDefinition(jobInvocationInfo, Trigger,
-                ScheduledJobOption, _credential);
-
-            return definition;
-        }
-
-        private ScheduledJobDefinition CreateFilePathDefinition()
-        {
-            JobDefinition jobDefinition = new JobDefinition(typeof(ScheduledJobSourceAdapter), FilePath, _name);
-            jobDefinition.ModuleName = ModuleName;
-            Dictionary<string, object> parameterCollection = CreateCommonParameters();
-
-            // FilePath, mandatory
-            if (!FilePath.EndsWith(".ps1", StringComparison.OrdinalIgnoreCase))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidFilePathFile);
-                Exception reason = new RuntimeException(msg);
-                ErrorRecord errorRecord = new ErrorRecord(reason, "InvalidFilePathParameterForRegisterScheduledJobDefinition", ErrorCategory.InvalidArgument, this);
-                WriteError(errorRecord);
-
-                return null;
-            }
-
-            Collection<PathInfo> pathInfos = SessionState.Path.GetResolvedPSPathFromPSPath(FilePath);
-            if (pathInfos.Count != 1)
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidFilePath);
-                Exception reason = new RuntimeException(msg);
-                ErrorRecord errorRecord = new ErrorRecord(reason, "InvalidFilePathParameterForRegisterScheduledJobDefinition", ErrorCategory.InvalidArgument, this);
-                WriteError(errorRecord);
-
-                return null;
-            }
-
-            parameterCollection.Add(ScheduledJobInvocationInfo.FilePathParameter, pathInfos[0].Path);
-
-            JobInvocationInfo jobInvocationInfo = new ScheduledJobInvocationInfo(jobDefinition, parameterCollection);
-
-            ScheduledJobDefinition definition = new ScheduledJobDefinition(jobInvocationInfo, Trigger,
-                ScheduledJobOption, _credential);
-
-            return definition;
-        }
-
-        private Dictionary<string, object> CreateCommonParameters()
-        {
-            Dictionary<string, object> parameterCollection = new Dictionary<string, object>();
-
-            parameterCollection.Add(ScheduledJobInvocationInfo.RunAs32Parameter, RunAs32.ToBool());
-            parameterCollection.Add(ScheduledJobInvocationInfo.AuthenticationParameter, Authentication);
-
-            if (InitializationScript != null)
-            {
-                parameterCollection.Add(ScheduledJobInvocationInfo.InitializationScriptParameter, InitializationScript);
-            }
-
-            if (ArgumentList != null)
-            {
-                parameterCollection.Add(ScheduledJobInvocationInfo.ArgumentListParameter, ArgumentList);
-            }
-
-            return parameterCollection;
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/RemoveJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/RemoveJobTrigger.cs
deleted file mode 100644
index 81cdb8ecc35..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/RemoveJobTrigger.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.Management.Automation;
-using System.Management.Automation.Host;
-using System.Management.Automation.Internal;
-using System.Threading;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet removes ScheduledJobTriggers from ScheduledJobDefinition objects.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Remove, "JobTrigger", DefaultParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223914")]
-    public sealed class RemoveJobTriggerCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string JobDefinitionParameterSet = "JobDefinition";
-        private const string JobDefinitionIdParameterSet = "JobDefinitionId";
-        private const string JobDefinitionNameParameterSet = "JobDefinitionName";
-
-        /// <summary>
-        /// Trigger number to remove.
-        /// </summary>
-        [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionIdParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] TriggerId
-        {
-            get { return _triggerIds; }
-
-            set { _triggerIds = value; }
-        }
-
-        private Int32[] _triggerIds;
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = RemoveJobTriggerCommand.JobDefinitionIdParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] Id
-        {
-            get { return _definitionIds; }
-
-            set { _definitionIds = value; }
-        }
-
-        private Int32[] _definitionIds;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = RemoveJobTriggerCommand.JobDefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return _names; }
-
-            set { _names = value; }
-        }
-
-        private string[] _names;
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobDefinition[] InputObject
-        {
-            get { return _definitions; }
-
-            set { _definitions = value; }
-        }
-
-        private ScheduledJobDefinition[] _definitions;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case JobDefinitionParameterSet:
-                    RemoveFromJobDefinition(_definitions);
-                    break;
-
-                case JobDefinitionIdParameterSet:
-                    RemoveFromJobDefinition(GetJobDefinitionsById(_definitionIds));
-                    break;
-
-                case JobDefinitionNameParameterSet:
-                    RemoveFromJobDefinition(GetJobDefinitionsByName(_names));
-                    break;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void RemoveFromJobDefinition(IEnumerable<ScheduledJobDefinition> definitions)
-        {
-            foreach (ScheduledJobDefinition definition in definitions)
-            {
-                List<Int32> notFoundIds = new List<int>();
-                try
-                {
-                    notFoundIds = definition.RemoveTriggers(_triggerIds, true);
-                }
-                catch (ScheduledJobException e)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.CantRemoveTriggersFromDefinition, definition.Name);
-                    Exception reason = new RuntimeException(msg, e);
-                    ErrorRecord errorRecord = new ErrorRecord(reason, "CantRemoveTriggersFromScheduledJobDefinition", ErrorCategory.InvalidOperation, definition);
-                    WriteError(errorRecord);
-                }
-
-                // Report not found errors.
-                foreach (Int32 idNotFound in notFoundIds)
-                {
-                    WriteTriggerNotFoundError(idNotFound, definition.Name, definition);
-                }
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/SchedJobCmdletBase.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/SchedJobCmdletBase.cs
deleted file mode 100644
index e8112877019..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/SchedJobCmdletBase.cs
+++ /dev/null
@@ -1,468 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// Base class for ScheduledJob cmdlets.
-    /// </summary>
-    public abstract class ScheduleJobCmdletBase : PSCmdlet
-    {
-        #region Cmdlet Strings
-
-        /// <summary>
-        /// Scheduled job module name.
-        /// </summary>
-        protected const string ModuleName = "PSScheduledJob";
-
-        #endregion
-
-        #region Utility Methods
-
-        /// <summary>
-        /// Makes delegate callback call for each scheduledjob definition object found.
-        /// </summary>
-        /// <param name="itemFound">Callback delegate for each discovered item.</param>
-        internal void FindAllJobDefinitions(
-            Action<ScheduledJobDefinition> itemFound)
-        {
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore((definition) =>
-                {
-                    if (ValidateJobDefinition(definition))
-                    {
-                        itemFound(definition);
-                    }
-                });
-            HandleAllLoadErrors(errors);
-        }
-
-        /// <summary>
-        /// Returns a single ScheduledJobDefinition object from the local
-        /// scheduled job definition repository corresponding to the provided id.
-        /// </summary>
-        /// <param name="id">Local repository scheduled job definition id.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        /// <returns>ScheduledJobDefinition object.</returns>
-        internal ScheduledJobDefinition GetJobDefinitionById(
-            Int32 id,
-            bool writeErrorsAndWarnings = true)
-        {
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore(null);
-            HandleAllLoadErrors(errors);
-
-            foreach (var definition in ScheduledJobDefinition.Repository.Definitions)
-            {
-                if (definition.Id == id &&
-                    ValidateJobDefinition(definition))
-                {
-                    return definition;
-                }
-            }
-
-            if (writeErrorsAndWarnings)
-            {
-                WriteDefinitionNotFoundByIdError(id);
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Returns an array of ScheduledJobDefinition objects from the local
-        /// scheduled job definition repository corresponding to the provided Ids.
-        /// </summary>
-        /// <param name="ids">Local repository scheduled job definition ids.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        /// <returns>List of ScheduledJobDefinition objects.</returns>
-        internal List<ScheduledJobDefinition> GetJobDefinitionsById(
-            Int32[] ids,
-            bool writeErrorsAndWarnings = true)
-        {
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore(null);
-            HandleAllLoadErrors(errors);
-
-            List<ScheduledJobDefinition> definitions = new List<ScheduledJobDefinition>();
-            HashSet<Int32> findIds = new HashSet<Int32>(ids);
-            foreach (var definition in ScheduledJobDefinition.Repository.Definitions)
-            {
-                if (findIds.Contains(definition.Id) &&
-                    ValidateJobDefinition(definition))
-                {
-                    definitions.Add(definition);
-                    findIds.Remove(definition.Id);
-                }
-            }
-
-            if (writeErrorsAndWarnings)
-            {
-                foreach (int id in findIds)
-                {
-                    WriteDefinitionNotFoundByIdError(id);
-                }
-            }
-
-            return definitions;
-        }
-
-        /// <summary>
-        /// Makes delegate callback call for each scheduledjob definition object found.
-        /// </summary>
-        /// <param name="ids">Local repository scheduled job definition ids.</param>
-        /// <param name="itemFound">Callback delegate for each discovered item.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        internal void FindJobDefinitionsById(
-            Int32[] ids,
-            Action<ScheduledJobDefinition> itemFound,
-            bool writeErrorsAndWarnings = true)
-        {
-            HashSet<Int32> findIds = new HashSet<Int32>(ids);
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore((definition) =>
-                {
-                    if (findIds.Contains(definition.Id) &&
-                        ValidateJobDefinition(definition))
-                    {
-                        itemFound(definition);
-                        findIds.Remove(definition.Id);
-                    }
-                });
-
-            HandleAllLoadErrors(errors);
-
-            if (writeErrorsAndWarnings)
-            {
-                foreach (Int32 id in findIds)
-                {
-                    WriteDefinitionNotFoundByIdError(id);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Returns an array of ScheduledJobDefinition objects from the local
-        /// scheduled job definition repository corresponding to the given name.
-        /// </summary>
-        /// <param name="name">Scheduled job definition name.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        /// <returns>ScheduledJobDefinition object.</returns>
-        internal ScheduledJobDefinition GetJobDefinitionByName(
-            string name,
-            bool writeErrorsAndWarnings = true)
-        {
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore(null);
-
-            // Look for match.
-            WildcardPattern namePattern = new WildcardPattern(name, WildcardOptions.IgnoreCase);
-            foreach (var definition in ScheduledJobDefinition.Repository.Definitions)
-            {
-                if (namePattern.IsMatch(definition.Name) &&
-                    ValidateJobDefinition(definition))
-                {
-                    return definition;
-                }
-            }
-
-            // Look for load error.
-            foreach (var error in errors)
-            {
-                if (namePattern.IsMatch(error.Key))
-                {
-                    HandleLoadError(error.Key, error.Value);
-                }
-            }
-
-            if (writeErrorsAndWarnings)
-            {
-                WriteDefinitionNotFoundByNameError(name);
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Returns an array of ScheduledJobDefinition objects from the local
-        /// scheduled job definition repository corresponding to the given names.
-        /// </summary>
-        /// <param name="names">Scheduled job definition names.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        /// <returns>List of ScheduledJobDefinition objects.</returns>
-        internal List<ScheduledJobDefinition> GetJobDefinitionsByName(
-            string[] names,
-            bool writeErrorsAndWarnings = true)
-        {
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore(null);
-
-            List<ScheduledJobDefinition> definitions = new List<ScheduledJobDefinition>();
-            foreach (string name in names)
-            {
-                WildcardPattern namePattern = new WildcardPattern(name, WildcardOptions.IgnoreCase);
-
-                // Look for match.
-                bool nameFound = false;
-                foreach (var definition in ScheduledJobDefinition.Repository.Definitions)
-                {
-                    if (namePattern.IsMatch(definition.Name) &&
-                        ValidateJobDefinition(definition))
-                    {
-                        nameFound = true;
-                        definitions.Add(definition);
-                    }
-                }
-
-                // Look for load error.
-                foreach (var error in errors)
-                {
-                    if (namePattern.IsMatch(error.Key))
-                    {
-                        HandleLoadError(error.Key, error.Value);
-                    }
-                }
-
-                if (!nameFound && writeErrorsAndWarnings)
-                {
-                    WriteDefinitionNotFoundByNameError(name);
-                }
-            }
-
-            return definitions;
-        }
-
-        /// <summary>
-        /// Makes delegate callback call for each scheduledjob definition object found.
-        /// </summary>
-        /// <param name="names">Scheduled job definition names.</param>
-        /// <param name="itemFound">Callback delegate for each discovered item.</param>
-        /// <param name="writeErrorsAndWarnings">Errors/warnings are written to host.</param>
-        internal void FindJobDefinitionsByName(
-            string[] names,
-            Action<ScheduledJobDefinition> itemFound,
-            bool writeErrorsAndWarnings = true)
-        {
-            HashSet<string> notFoundNames = new HashSet<string>(names);
-            Dictionary<string, WildcardPattern> patterns = new Dictionary<string, WildcardPattern>();
-            foreach (string name in names)
-            {
-                if (!patterns.ContainsKey(name))
-                {
-                    patterns.Add(name, new WildcardPattern(name, WildcardOptions.IgnoreCase));
-                }
-            }
-
-            Dictionary<string, Exception> errors = ScheduledJobDefinition.RefreshRepositoryFromStore((definition) =>
-                {
-                    foreach (var item in patterns)
-                    {
-                        if (item.Value.IsMatch(definition.Name) &&
-                            ValidateJobDefinition(definition))
-                        {
-                            itemFound(definition);
-                            if (notFoundNames.Contains(item.Key))
-                            {
-                                notFoundNames.Remove(item.Key);
-                            }
-                        }
-                    }
-                });
-
-            // Look for load error.
-            foreach (var error in errors)
-            {
-                foreach (var item in patterns)
-                {
-                    if (item.Value.IsMatch(error.Key))
-                    {
-                        HandleLoadError(error.Key, error.Value);
-                    }
-                }
-            }
-
-            if (writeErrorsAndWarnings)
-            {
-                foreach (var name in notFoundNames)
-                {
-                    WriteDefinitionNotFoundByNameError(name);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Writes a "Trigger not found" error to host.
-        /// </summary>
-        /// <param name="notFoundId">Trigger Id not found.</param>
-        /// <param name="definitionName">ScheduledJobDefinition name.</param>
-        /// <param name="errorObject">Error object.</param>
-        internal void WriteTriggerNotFoundError(
-            Int32 notFoundId,
-            string definitionName,
-            object errorObject)
-        {
-            string msg = StringUtil.Format(ScheduledJobErrorStrings.TriggerNotFound, notFoundId, definitionName);
-            Exception reason = new RuntimeException(msg);
-            ErrorRecord errorRecord = new ErrorRecord(reason, "ScheduledJobTriggerNotFound", ErrorCategory.ObjectNotFound, errorObject);
-            WriteError(errorRecord);
-        }
-
-        /// <summary>
-        /// Writes a "Definition not found for Id" error to host.
-        /// </summary>
-        /// <param name="defId">Definition Id.</param>
-        internal void WriteDefinitionNotFoundByIdError(
-            Int32 defId)
-        {
-            string msg = StringUtil.Format(ScheduledJobErrorStrings.DefinitionNotFoundById, defId);
-            Exception reason = new RuntimeException(msg);
-            ErrorRecord errorRecord = new ErrorRecord(reason, "ScheduledJobDefinitionNotFoundById", ErrorCategory.ObjectNotFound, null);
-            WriteError(errorRecord);
-        }
-
-        /// <summary>
-        /// Writes a "Definition not found for Name" error to host.
-        /// </summary>
-        /// <param name="name">Definition Name.</param>
-        internal void WriteDefinitionNotFoundByNameError(
-            string name)
-        {
-            string msg = StringUtil.Format(ScheduledJobErrorStrings.DefinitionNotFoundByName, name);
-            Exception reason = new RuntimeException(msg);
-            ErrorRecord errorRecord = new ErrorRecord(reason, "ScheduledJobDefinitionNotFoundByName", ErrorCategory.ObjectNotFound, null);
-            WriteError(errorRecord);
-        }
-
-        /// <summary>
-        /// Writes a "Load from job store" error to host.
-        /// </summary>
-        /// <param name="name">Scheduled job definition name.</param>
-        /// <param name="error">Exception thrown during loading.</param>
-        internal void WriteErrorLoadingDefinition(string name, Exception error)
-        {
-            string msg = StringUtil.Format(ScheduledJobErrorStrings.CantLoadDefinitionFromStore, name);
-            Exception reason = new RuntimeException(msg, error);
-            ErrorRecord errorRecord = new ErrorRecord(reason, "CantLoadScheduledJobDefinitionFromStore", ErrorCategory.InvalidOperation, null);
-            WriteError(errorRecord);
-        }
-
-        /// <summary>
-        /// Creates a Once job trigger with provided repetition interval and an
-        /// infinite duration, and adds the trigger to the provided scheduled job
-        /// definition object.
-        /// </summary>
-        /// <param name="definition">ScheduledJobDefinition.</param>
-        /// <param name="repInterval">Rep interval.</param>
-        /// <param name="save">Save definition change.</param>
-        internal static void AddRepetitionJobTriggerToDefinition(
-            ScheduledJobDefinition definition,
-            TimeSpan repInterval,
-            bool save)
-        {
-            if (definition == null)
-            {
-                throw new PSArgumentNullException("definition");
-            }
-
-            TimeSpan repDuration = TimeSpan.MaxValue;
-
-            // Validate every interval value.
-            if (repInterval < TimeSpan.Zero || repDuration < TimeSpan.Zero)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionParamValues);
-            }
-
-            if (repInterval < TimeSpan.FromMinutes(1))
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionIntervalValue);
-            }
-
-            if (repInterval > repDuration)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidRepetitionInterval);
-            }
-
-            // Create job trigger.
-            var trigger = ScheduledJobTrigger.CreateOnceTrigger(
-                DateTime.Now,
-                TimeSpan.Zero,
-                repInterval,
-                repDuration,
-                0,
-                true);
-
-            definition.AddTriggers(new ScheduledJobTrigger[] { trigger }, save);
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void HandleAllLoadErrors(Dictionary<string, Exception> errors)
-        {
-            foreach (var error in errors)
-            {
-                HandleLoadError(error.Key, error.Value);
-            }
-        }
-
-        private void HandleLoadError(string name, Exception e)
-        {
-            if (e is System.IO.IOException ||
-                e is System.Xml.XmlException ||
-                e is System.TypeInitializationException ||
-                e is System.Runtime.Serialization.SerializationException ||
-                e is System.ArgumentNullException)
-            {
-                // Remove the corrupted scheduled job definition and
-                // notify user with error message.
-                ScheduledJobDefinition.RemoveDefinition(name);
-                WriteErrorLoadingDefinition(name, e);
-            }
-        }
-
-        private void ValidateJobDefinitions()
-        {
-            foreach (var definition in ScheduledJobDefinition.Repository.Definitions)
-            {
-                ValidateJobDefinition(definition);
-            }
-        }
-
-        /// <summary>
-        /// Validates the job definition object retrieved from store by syncing
-        /// its data with the corresponding Task Scheduler task.  If no task
-        /// is found then validation fails.
-        /// </summary>
-        /// <param name="definition"></param>
-        /// <returns></returns>
-        private bool ValidateJobDefinition(ScheduledJobDefinition definition)
-        {
-            Exception ex = null;
-            try
-            {
-                definition.SyncWithWTS();
-            }
-            catch (System.IO.DirectoryNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (System.IO.FileNotFoundException e)
-            {
-                ex = e;
-            }
-            catch (System.ArgumentNullException e)
-            {
-                ex = e;
-            }
-
-            if (ex != null)
-            {
-                WriteErrorLoadingDefinition(definition.Name, ex);
-            }
-
-            return (ex == null);
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/ScheduledJobOptionCmdletBase.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/ScheduledJobOptionCmdletBase.cs
deleted file mode 100644
index cd70dc0a8f1..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/ScheduledJobOptionCmdletBase.cs
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// Base class for NewScheduledJobOption, SetScheduledJobOption cmdlets.
-    /// </summary>
-    public abstract class ScheduledJobOptionCmdletBase : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        /// <summary>
-        /// Options parameter set name.
-        /// </summary>
-        protected const string OptionsParameterSet = "Options";
-
-        /// <summary>
-        /// Scheduled job task is run with elevated privileges when this switch is selected.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter RunElevated
-        {
-            get { return _runElevated; }
-
-            set { _runElevated = value; }
-        }
-
-        private SwitchParameter _runElevated = false;
-
-        /// <summary>
-        /// Scheduled job task is hidden in Windows Task Scheduler when true.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter HideInTaskScheduler
-        {
-            get { return _hideInTaskScheduler; }
-
-            set { _hideInTaskScheduler = value; }
-        }
-
-        private SwitchParameter _hideInTaskScheduler = false;
-
-        /// <summary>
-        /// Scheduled job task will be restarted when machine becomes idle.  This is applicable
-        /// only if the job was configured to stop when no longer idle.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter RestartOnIdleResume
-        {
-            get { return _restartOnIdleResume; }
-
-            set { _restartOnIdleResume = value; }
-        }
-
-        private SwitchParameter _restartOnIdleResume = false;
-
-        /// <summary>
-        /// Provides task scheduler options for multiple running instances of the job.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public TaskMultipleInstancePolicy MultipleInstancePolicy
-        {
-            get { return _multipleInstancePolicy; }
-
-            set { _multipleInstancePolicy = value; }
-        }
-
-        private TaskMultipleInstancePolicy _multipleInstancePolicy = TaskMultipleInstancePolicy.IgnoreNew;
-
-        /// <summary>
-        /// Prevents the job task from being started manually via Task Scheduler UI.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter DoNotAllowDemandStart
-        {
-            get { return _doNotAllowDemandStart; }
-
-            set { _doNotAllowDemandStart = value; }
-        }
-
-        private SwitchParameter _doNotAllowDemandStart = false;
-
-        /// <summary>
-        /// Allows the job task to be run only when network connection available.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter RequireNetwork
-        {
-            get { return _requireNetwork; }
-
-            set { _requireNetwork = value; }
-        }
-
-        private SwitchParameter _requireNetwork = false;
-
-        /// <summary>
-        /// Stops running job started by Task Scheduler if computer is no longer idle.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter StopIfGoingOffIdle
-        {
-            get { return _stopIfGoingOffIdle; }
-
-            set { _stopIfGoingOffIdle = value; }
-        }
-
-        private SwitchParameter _stopIfGoingOffIdle = false;
-
-        /// <summary>
-        /// Will wake the computer to run the job if computer is in sleep mode when
-        /// trigger activates.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter WakeToRun
-        {
-            get { return _wakeToRun; }
-
-            set { _wakeToRun = value; }
-        }
-
-        private SwitchParameter _wakeToRun = false;
-
-        /// <summary>
-        /// Continue running task job if computer going on battery.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter ContinueIfGoingOnBattery
-        {
-            get { return _continueIfGoingOnBattery; }
-
-            set { _continueIfGoingOnBattery = value; }
-        }
-
-        private SwitchParameter _continueIfGoingOnBattery = false;
-
-        /// <summary>
-        /// Will start job task even if computer is running on battery power.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter StartIfOnBattery
-        {
-            get { return _startIfOnBattery; }
-
-            set { _startIfOnBattery = value; }
-        }
-
-        private SwitchParameter _startIfOnBattery = false;
-
-        /// <summary>
-        /// Specifies how long Task Scheduler will wait for idle time after a trigger has
-        /// activated before giving up trying to run job during computer idle.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public TimeSpan IdleTimeout
-        {
-            get { return _idleTimeout; }
-
-            set { _idleTimeout = value; }
-        }
-
-        private TimeSpan _idleTimeout = new TimeSpan(1, 0, 0);
-
-        /// <summary>
-        /// How long the computer needs to be idle before a triggered job task is started.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public TimeSpan IdleDuration
-        {
-            get { return _idleDuration; }
-
-            set { _idleDuration = value; }
-        }
-
-        private TimeSpan _idleDuration = new TimeSpan(0, 10, 0);
-
-        /// <summary>
-        /// Will start job task if machine is idle.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter StartIfIdle
-        {
-            get { return _startIfIdle; }
-
-            set { _startIfIdle = value; }
-        }
-
-        private SwitchParameter _startIfIdle = false;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Begin processing.
-        /// </summary>
-        protected override void BeginProcessing()
-        {
-            // Validate parameters.
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(IdleTimeout)) &&
-                _idleTimeout < TimeSpan.Zero)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidIdleTimeout);
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(IdleDuration)) &&
-                _idleDuration < TimeSpan.Zero)
-            {
-                throw new PSArgumentException(ScheduledJobErrorStrings.InvalidIdleDuration);
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobDefinition.cs
deleted file mode 100644
index 0d56f5640e4..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobDefinition.cs
+++ /dev/null
@@ -1,552 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet updates a scheduled job definition object based on the provided
-    /// parameter values and saves changes to job store and Task Scheduler.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "ScheduledJob", DefaultParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223924")]
-    [OutputType(typeof(ScheduledJobDefinition))]
-    public sealed class SetScheduledJobCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string ExecutionParameterSet = "Execution";
-        private const string ScriptBlockParameterSet = "ScriptBlock";
-        private const string FilePathParameterSet = "FilePath";
-
-        /// <summary>
-        /// Name of scheduled job definition.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string Name
-        {
-            get { return _name; }
-
-            set { _name = value; }
-        }
-
-        private string _name;
-
-        /// <summary>
-        /// File path for script to be run in job.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [Alias("Path")]
-        [ValidateNotNullOrEmpty]
-        public string FilePath
-        {
-            get { return _filePath; }
-
-            set { _filePath = value; }
-        }
-
-        private string _filePath;
-
-        /// <summary>
-        /// ScriptBlock containing script to run in job.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [ValidateNotNull]
-        public ScriptBlock ScriptBlock
-        {
-            get { return _scriptBlock; }
-
-            set { _scriptBlock = value; }
-        }
-
-        private ScriptBlock _scriptBlock;
-
-        /// <summary>
-        /// Triggers to define when job will run.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobTrigger[] Trigger
-        {
-            get { return _triggers; }
-
-            set { _triggers = value; }
-        }
-
-        private ScheduledJobTrigger[] _triggers;
-
-        /// <summary>
-        /// Initialization script to run before the job starts.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [ValidateNotNull]
-        public ScriptBlock InitializationScript
-        {
-            get { return _initializationScript; }
-
-            set { _initializationScript = value; }
-        }
-
-        private ScriptBlock _initializationScript;
-
-        /// <summary>
-        /// Runs the job in a 32-bit PowerShell process.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        public SwitchParameter RunAs32
-        {
-            get { return _runAs32; }
-
-            set { _runAs32 = value; }
-        }
-
-        private SwitchParameter _runAs32;
-
-        /// <summary>
-        /// Credentials for job.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [Credential()]
-        public PSCredential Credential
-        {
-            get { return _credential; }
-
-            set { _credential = value; }
-        }
-
-        private PSCredential _credential;
-
-        /// <summary>
-        /// Authentication mechanism to use for job.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        public AuthenticationMechanism Authentication
-        {
-            get { return _authenticationMechanism; }
-
-            set { _authenticationMechanism = value; }
-        }
-
-        private AuthenticationMechanism _authenticationMechanism;
-
-        /// <summary>
-        /// Scheduling options for job.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobOptions ScheduledJobOption
-        {
-            get { return _options; }
-
-            set { _options = value; }
-        }
-
-        private ScheduledJobOptions _options;
-
-        /// <summary>
-        /// Input for the job.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = SetScheduledJobCommand.ExecutionParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobDefinition InputObject
-        {
-            get { return _definition; }
-
-            set { _definition = value; }
-        }
-
-        private ScheduledJobDefinition _definition;
-
-        /// <summary>
-        /// ClearExecutionHistory.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ExecutionParameterSet)]
-        public SwitchParameter ClearExecutionHistory
-        {
-            get { return _clearExecutionHistory; }
-
-            set { _clearExecutionHistory = value; }
-        }
-
-        private SwitchParameter _clearExecutionHistory;
-
-        /// <summary>
-        /// Maximum number of job results allowed in job store.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        public int MaxResultCount
-        {
-            get { return _executionHistoryLength; }
-
-            set { _executionHistoryLength = value; }
-        }
-
-        private int _executionHistoryLength;
-
-        /// <summary>
-        /// Pass the ScheduledJobDefinition object through to output.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ExecutionParameterSet)]
-        public SwitchParameter PassThru
-        {
-            get { return _passThru; }
-
-            set { _passThru = value; }
-        }
-
-        private SwitchParameter _passThru;
-
-        /// <summary>
-        /// Argument list.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public object[] ArgumentList
-        {
-            get { return _arguments; }
-
-            set { _arguments = value; }
-        }
-
-        private object[] _arguments;
-
-        /// <summary>
-        /// Runs scheduled job immediately after successfully setting job definition.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        public SwitchParameter RunNow
-        {
-            get { return _runNow; }
-
-            set { _runNow = value; }
-        }
-
-        private SwitchParameter _runNow;
-
-        /// <summary>
-        /// Runs scheduled job at the repetition interval indicated by the
-        /// TimeSpan value for an unending duration.
-        /// </summary>
-        [Parameter(ParameterSetName = SetScheduledJobCommand.ScriptBlockParameterSet)]
-        [Parameter(ParameterSetName = SetScheduledJobCommand.FilePathParameterSet)]
-        public TimeSpan RunEvery
-        {
-            get { return _runEvery; }
-
-            set { _runEvery = value; }
-        }
-
-        private TimeSpan _runEvery;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            switch (ParameterSetName)
-            {
-                case ExecutionParameterSet:
-                    UpdateExecutionDefinition();
-                    break;
-
-                case ScriptBlockParameterSet:
-                case FilePathParameterSet:
-                    UpdateDefinition();
-                    break;
-            }
-
-            try
-            {
-                // If RunEvery parameter is specified then create a job trigger for the definition that
-                // runs the job at the requested interval.
-                bool addedTrigger = false;
-                if (MyInvocation.BoundParameters.ContainsKey(nameof(RunEvery)))
-                {
-                    AddRepetitionJobTriggerToDefinition(
-                        _definition,
-                        RunEvery,
-                        false);
-
-                    addedTrigger = true;
-                }
-
-                if (Trigger != null || ScheduledJobOption != null || Credential != null || addedTrigger)
-                {
-                    // Save definition to file and update WTS.
-                    _definition.Save();
-                }
-                else
-                {
-                    // No WTS changes.  Save definition to store only.
-                    _definition.SaveToStore();
-                }
-
-                if (_runNow)
-                {
-                    _definition.RunAsTask();
-                }
-            }
-            catch (ScheduledJobException e)
-            {
-                ErrorRecord errorRecord;
-
-                if (e.InnerException != null &&
-                    e.InnerException is System.UnauthorizedAccessException)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.NoAccessOnSetJobDefinition, _definition.Name);
-                    errorRecord = new ErrorRecord(new RuntimeException(msg, e),
-                        "NoAccessFailureOnSetJobDefinition", ErrorCategory.InvalidOperation, _definition);
-                }
-                else if (e.InnerException != null &&
-                         e.InnerException is System.IO.IOException)
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.IOFailureOnSetJobDefinition, _definition.Name);
-                    errorRecord = new ErrorRecord(new RuntimeException(msg, e),
-                        "IOFailureOnSetJobDefinition", ErrorCategory.InvalidOperation, _definition);
-                }
-                else
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.CantSetJobDefinition, _definition.Name);
-                    errorRecord = new ErrorRecord(new RuntimeException(msg, e),
-                        "CantSetPropertiesToScheduledJobDefinition", ErrorCategory.InvalidOperation, _definition);
-                }
-
-                WriteError(errorRecord);
-            }
-
-            if (_passThru)
-            {
-                WriteObject(_definition);
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void UpdateExecutionDefinition()
-        {
-            if (_clearExecutionHistory)
-            {
-                _definition.ClearExecutionHistory();
-            }
-        }
-
-        private void UpdateDefinition()
-        {
-            if (_name != null &&
-                string.Compare(_name, _definition.Name, StringComparison.OrdinalIgnoreCase) != 0)
-            {
-                _definition.RenameAndSave(_name);
-            }
-
-            UpdateJobInvocationInfo();
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(MaxResultCount)))
-            {
-                _definition.SetExecutionHistoryLength(MaxResultCount, false);
-            }
-
-            if (Credential != null)
-            {
-                _definition.Credential = Credential;
-            }
-
-            if (Trigger != null)
-            {
-                _definition.SetTriggers(Trigger, false);
-            }
-
-            if (ScheduledJobOption != null)
-            {
-                _definition.UpdateOptions(ScheduledJobOption, false);
-            }
-        }
-
-        /// <summary>
-        /// Create new ScheduledJobInvocationInfo object with update information and
-        /// update the job definition object.
-        /// </summary>
-        private void UpdateJobInvocationInfo()
-        {
-            Dictionary<string, object> parameters = UpdateParameters();
-            string name = _definition.Name;
-            string command;
-
-            if (ScriptBlock != null)
-            {
-                command = ScriptBlock.ToString();
-            }
-            else if (FilePath != null)
-            {
-                command = FilePath;
-            }
-            else
-            {
-                command = _definition.InvocationInfo.Command;
-            }
-
-            JobDefinition jobDefinition = new JobDefinition(typeof(ScheduledJobSourceAdapter), command, name);
-            jobDefinition.ModuleName = ModuleName;
-            JobInvocationInfo jobInvocationInfo = new ScheduledJobInvocationInfo(jobDefinition, parameters);
-
-            _definition.UpdateJobInvocationInfo(jobInvocationInfo, false);
-        }
-
-        /// <summary>
-        /// Creates a new parameter dictionary with update parameters.
-        /// </summary>
-        /// <returns>Updated parameters.</returns>
-        private Dictionary<string, object> UpdateParameters()
-        {
-            Debug.Assert(_definition.InvocationInfo.Parameters.Count != 0,
-                "ScheduledJobDefinition must always have some job invocation parameters");
-            Dictionary<string, object> newParameters = new Dictionary<string, object>();
-            foreach (CommandParameter parameter in _definition.InvocationInfo.Parameters[0])
-            {
-                newParameters.Add(parameter.Name, parameter.Value);
-            }
-
-            // RunAs32
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RunAs32)))
-            {
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.RunAs32Parameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.RunAs32Parameter] = RunAs32.ToBool();
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.RunAs32Parameter, RunAs32.ToBool());
-                }
-            }
-
-            // Authentication
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(Authentication)))
-            {
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.AuthenticationParameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.AuthenticationParameter] = Authentication;
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.AuthenticationParameter, Authentication);
-                }
-            }
-
-            // InitializationScript
-            if (InitializationScript == null)
-            {
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.InitializationScriptParameter))
-                {
-                    newParameters.Remove(ScheduledJobInvocationInfo.InitializationScriptParameter);
-                }
-            }
-            else
-            {
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.InitializationScriptParameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.InitializationScriptParameter] = InitializationScript;
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.InitializationScriptParameter, InitializationScript);
-                }
-            }
-
-            // ScriptBlock
-            if (ScriptBlock != null)
-            {
-                // FilePath cannot also be specified.
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.FilePathParameter))
-                {
-                    newParameters.Remove(ScheduledJobInvocationInfo.FilePathParameter);
-                }
-
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.ScriptBlockParameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.ScriptBlockParameter] = ScriptBlock;
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.ScriptBlockParameter, ScriptBlock);
-                }
-            }
-
-            // FilePath
-            if (FilePath != null)
-            {
-                // ScriptBlock cannot also be specified.
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.ScriptBlockParameter))
-                {
-                    newParameters.Remove(ScheduledJobInvocationInfo.ScriptBlockParameter);
-                }
-
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.FilePathParameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.FilePathParameter] = FilePath;
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.FilePathParameter, FilePath);
-                }
-            }
-
-            // ArgumentList
-            if (ArgumentList == null)
-            {
-                // Clear existing argument list only if new scriptblock or script file path was specified
-                // (in this case old argument list is invalid).
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.ArgumentListParameter) &&
-                    (ScriptBlock != null || FilePath != null))
-                {
-                    newParameters.Remove(ScheduledJobInvocationInfo.ArgumentListParameter);
-                }
-            }
-            else
-            {
-                if (newParameters.ContainsKey(ScheduledJobInvocationInfo.ArgumentListParameter))
-                {
-                    newParameters[ScheduledJobInvocationInfo.ArgumentListParameter] = ArgumentList;
-                }
-                else
-                {
-                    newParameters.Add(ScheduledJobInvocationInfo.ArgumentListParameter, ArgumentList);
-                }
-            }
-
-            return newParameters;
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobTrigger.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobTrigger.cs
deleted file mode 100644
index 4eeab7fcc72..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/SetJobTrigger.cs
+++ /dev/null
@@ -1,945 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet sets properties on a trigger for a ScheduledJobDefinition.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "JobTrigger", DefaultParameterSetName = SetJobTriggerCommand.DefaultParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223916")]
-    [OutputType(typeof(ScheduledJobTrigger))]
-    public sealed class SetJobTriggerCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string DefaultParameterSet = "DefaultParams";
-
-        /// <summary>
-        /// ScheduledJobTrigger objects to set properties on.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobTrigger[] InputObject
-        {
-            get { return _triggers; }
-
-            set { _triggers = value; }
-        }
-
-        private ScheduledJobTrigger[] _triggers;
-
-        /// <summary>
-        /// Daily interval for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public Int32 DaysInterval
-        {
-            get { return _daysInterval; }
-
-            set { _daysInterval = value; }
-        }
-
-        private Int32 _daysInterval = 1;
-
-        /// <summary>
-        /// Weekly interval for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public Int32 WeeksInterval
-        {
-            get { return _weeksInterval; }
-
-            set { _weeksInterval = value; }
-        }
-
-        private Int32 _weeksInterval = 1;
-
-        /// <summary>
-        /// Random delay for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public TimeSpan RandomDelay
-        {
-            get { return _randomDelay; }
-
-            set { _randomDelay = value; }
-        }
-
-        private TimeSpan _randomDelay;
-
-        /// <summary>
-        /// Job start date/time for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public DateTime At
-        {
-            get { return _atTime; }
-
-            set { _atTime = value; }
-        }
-
-        private DateTime _atTime;
-
-        /// <summary>
-        /// User name for AtLogon trigger.  The AtLogon parameter set will create a trigger
-        /// that activates after log on for the provided user name.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        [ValidateNotNullOrEmpty]
-        public string User
-        {
-            get { return _user; }
-
-            set { _user = value; }
-        }
-
-        private string _user;
-
-        /// <summary>
-        /// Days of week for trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public DayOfWeek[] DaysOfWeek
-        {
-            get { return _daysOfWeek; }
-
-            set { _daysOfWeek = value; }
-        }
-
-        private DayOfWeek[] _daysOfWeek;
-
-        /// <summary>
-        /// Switch to specify an AtStartup trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter AtStartup
-        {
-            get { return _atStartup; }
-
-            set { _atStartup = value; }
-        }
-
-        private SwitchParameter _atStartup;
-
-        /// <summary>
-        /// Switch to specify an AtLogon trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter AtLogOn
-        {
-            get { return _atLogon; }
-
-            set { _atLogon = value; }
-        }
-
-        private SwitchParameter _atLogon;
-
-        /// <summary>
-        /// Switch to specify an Once trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter Once
-        {
-            get { return _once; }
-
-            set { _once = value; }
-        }
-
-        private SwitchParameter _once;
-
-        /// <summary>
-        /// Repetition interval of a one time trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public TimeSpan RepetitionInterval
-        {
-            get { return _repInterval; }
-
-            set { _repInterval = value; }
-        }
-
-        private TimeSpan _repInterval;
-
-        /// <summary>
-        /// Repetition duration of a one time trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public TimeSpan RepetitionDuration
-        {
-            get { return _repDuration; }
-
-            set { _repDuration = value; }
-        }
-
-        private TimeSpan _repDuration;
-
-        /// <summary>
-        /// Repetition interval repeats indefinitely.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter RepeatIndefinitely
-        {
-            get { return _repRepeatIndefinitely; }
-
-            set { _repRepeatIndefinitely = value; }
-        }
-
-        private SwitchParameter _repRepeatIndefinitely;
-
-        /// <summary>
-        /// Switch to specify an Daily trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter Daily
-        {
-            get { return _daily; }
-
-            set { _daily = value; }
-        }
-
-        private SwitchParameter _daily;
-
-        /// <summary>
-        /// Switch to specify an Weekly trigger.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter Weekly
-        {
-            get { return _weekly; }
-
-            set { _weekly = value; }
-        }
-
-        private SwitchParameter _weekly;
-
-        /// <summary>
-        /// Pass through job trigger object.
-        /// </summary>
-        [Parameter(ParameterSetName = SetJobTriggerCommand.DefaultParameterSet)]
-        public SwitchParameter PassThru
-        {
-            get { return _passThru; }
-
-            set { _passThru = value; }
-        }
-
-        private SwitchParameter _passThru;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // Validate the parameter set and write any errors.
-            TriggerFrequency newTriggerFrequency = TriggerFrequency.None;
-            if (!ValidateParameterSet(ref newTriggerFrequency))
-            {
-                return;
-            }
-
-            // Update each trigger object with the current parameter set.
-            // The associated scheduled job definition will also be updated.
-            foreach (ScheduledJobTrigger trigger in _triggers)
-            {
-                ScheduledJobTrigger originalTrigger = new ScheduledJobTrigger(trigger);
-                if (!UpdateTrigger(trigger, newTriggerFrequency))
-                {
-                    continue;
-                }
-
-                ScheduledJobDefinition definition = trigger.JobDefinition;
-                if (definition != null)
-                {
-                    bool jobUpdateFailed = false;
-
-                    try
-                    {
-                        trigger.UpdateJobDefinition();
-                    }
-                    catch (ScheduledJobException e)
-                    {
-                        jobUpdateFailed = true;
-
-                        string msg = StringUtil.Format(ScheduledJobErrorStrings.CantUpdateTriggerOnJobDef, definition.Name, trigger.Id);
-                        Exception reason = new RuntimeException(msg, e);
-                        ErrorRecord errorRecord = new ErrorRecord(reason, "CantSetPropertiesOnJobTrigger", ErrorCategory.InvalidOperation, trigger);
-                        WriteError(errorRecord);
-                    }
-
-                    if (jobUpdateFailed)
-                    {
-                        // Restore trigger to original configuration.
-                        originalTrigger.CopyTo(trigger);
-                    }
-                }
-
-                if (_passThru)
-                {
-                    WriteObject(trigger);
-                }
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private bool ValidateParameterSet(ref TriggerFrequency newTriggerFrequency)
-        {
-            // First see if a switch parameter was set.
-            List<TriggerFrequency> switchParamList = new List<TriggerFrequency>();
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(AtStartup)))
-            {
-                switchParamList.Add(TriggerFrequency.AtStartup);
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(AtLogon)))
-            {
-                switchParamList.Add(TriggerFrequency.AtLogon);
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(Once)))
-            {
-                switchParamList.Add(TriggerFrequency.Once);
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(Daily)))
-            {
-                switchParamList.Add(TriggerFrequency.Daily);
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(Weekly)))
-            {
-                switchParamList.Add(TriggerFrequency.Weekly);
-            }
-
-            if (switchParamList.Count > 1)
-            {
-                WriteValidationError(ScheduledJobErrorStrings.ConflictingTypeParams);
-                return false;
-            }
-
-            newTriggerFrequency = (switchParamList.Count == 1) ? switchParamList[0] : TriggerFrequency.None;
-
-            // Validate parameters against the new trigger frequency value.
-            bool rtnValue = false;
-            switch (newTriggerFrequency)
-            {
-                case TriggerFrequency.None:
-                    rtnValue = true;
-                    break;
-
-                case TriggerFrequency.AtStartup:
-                    rtnValue = ValidateStartupParams();
-                    break;
-
-                case TriggerFrequency.AtLogon:
-                    rtnValue = ValidateLogonParams();
-                    break;
-
-                case TriggerFrequency.Once:
-                    rtnValue = ValidateOnceParams();
-                    break;
-
-                case TriggerFrequency.Daily:
-                    rtnValue = ValidateDailyParams();
-                    break;
-
-                case TriggerFrequency.Weekly:
-                    rtnValue = ValidateWeeklyParams();
-                    break;
-
-                default:
-                    Debug.Assert(false, "Invalid trigger frequency value.");
-                    rtnValue = false;
-                    break;
-            }
-
-            return rtnValue;
-        }
-
-        private bool ValidateStartupParams()
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysInterval, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidWeeksInterval, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidAtTime, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(User)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidUser, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysOfWeek, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidSetTriggerRepetition, ScheduledJobErrorStrings.TriggerStartUpType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            return true;
-        }
-
-        private bool ValidateLogonParams()
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysInterval, ScheduledJobErrorStrings.TriggerLogonType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidWeeksInterval, ScheduledJobErrorStrings.TriggerLogonType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidAtTime, ScheduledJobErrorStrings.TriggerLogonType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysOfWeek, ScheduledJobErrorStrings.TriggerLogonType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidSetTriggerRepetition, ScheduledJobErrorStrings.TriggerLogonType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            return true;
-        }
-
-        private bool ValidateOnceParams(ScheduledJobTrigger trigger = null)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysInterval, ScheduledJobErrorStrings.TriggerOnceType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidWeeksInterval, ScheduledJobErrorStrings.TriggerOnceType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(User)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidUser, ScheduledJobErrorStrings.TriggerOnceType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysOfWeek, ScheduledJobErrorStrings.TriggerOnceType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                _repDuration = TimeSpan.MaxValue;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                // Validate Once trigger repetition parameters.
-                try
-                {
-                    ScheduledJobTrigger.ValidateOnceRepetitionParams(_repInterval, _repDuration);
-                }
-                catch (PSArgumentException e)
-                {
-                    WriteValidationError(e.Message);
-                    return false;
-                }
-            }
-
-            if (trigger != null)
-            {
-                if (trigger.At == null && !MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingAtTime, ScheduledJobErrorStrings.TriggerOnceType);
-                    WriteValidationError(msg);
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        private bool ValidateDailyParams(ScheduledJobTrigger trigger = null)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)) &&
-                _daysInterval < 1)
-            {
-                WriteValidationError(ScheduledJobErrorStrings.InvalidDaysIntervalParam);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidWeeksInterval, ScheduledJobErrorStrings.TriggerDailyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(User)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidUser, ScheduledJobErrorStrings.TriggerDailyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysOfWeek, ScheduledJobErrorStrings.TriggerDailyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidSetTriggerRepetition, ScheduledJobErrorStrings.TriggerDailyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (trigger != null)
-            {
-                if (trigger.At == null && !MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingAtTime, ScheduledJobErrorStrings.TriggerDailyType);
-                    WriteValidationError(msg);
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        private bool ValidateWeeklyParams(ScheduledJobTrigger trigger = null)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidDaysInterval, ScheduledJobErrorStrings.TriggerWeeklyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)) &&
-                _weeksInterval < 1)
-            {
-                WriteValidationError(ScheduledJobErrorStrings.InvalidWeeksIntervalParam);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(User)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidUser, ScheduledJobErrorStrings.TriggerWeeklyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) || MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ||
-                MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInfiniteDuration)))
-            {
-                string msg = StringUtil.Format(ScheduledJobErrorStrings.InvalidSetTriggerRepetition, ScheduledJobErrorStrings.TriggerWeeklyType);
-                WriteValidationError(msg);
-                return false;
-            }
-
-            if (trigger != null)
-            {
-                if (trigger.At == null && !MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingAtTime, ScheduledJobErrorStrings.TriggerDailyType);
-                    WriteValidationError(msg);
-                    return false;
-                }
-
-                if ((trigger.DaysOfWeek == null || trigger.DaysOfWeek.Count == 0) &&
-                    !MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-                {
-                    string msg = StringUtil.Format(ScheduledJobErrorStrings.MissingDaysOfWeek, ScheduledJobErrorStrings.TriggerDailyType);
-                    WriteValidationError(msg);
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        private bool UpdateTrigger(ScheduledJobTrigger trigger, TriggerFrequency triggerFrequency)
-        {
-            if (triggerFrequency != TriggerFrequency.None)
-            {
-                //
-                // User has specified a specific trigger type.
-                // Parameters have been validated for this trigger type.
-                //
-                if (triggerFrequency != trigger.Frequency)
-                {
-                    // Changing to a new trigger type.
-                    return CreateTrigger(trigger, triggerFrequency);
-                }
-                else
-                {
-                    // Modifying existing trigger type.
-                    return ModifyTrigger(trigger, triggerFrequency);
-                }
-            }
-            else
-            {
-                // We are updating an existing trigger.  Need to validate params
-                // against each trigger type we are updating.
-                return ModifyTrigger(trigger, trigger.Frequency, true);
-            }
-        }
-
-        private bool CreateTrigger(ScheduledJobTrigger trigger, TriggerFrequency triggerFrequency)
-        {
-            switch (triggerFrequency)
-            {
-                case TriggerFrequency.AtStartup:
-                    CreateAtStartupTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.AtLogon:
-                    CreateAtLogonTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Once:
-                    if (trigger.Frequency != triggerFrequency &&
-                        !ValidateOnceParams(trigger))
-                    {
-                        return false;
-                    }
-
-                    CreateOnceTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Daily:
-                    if (trigger.Frequency != triggerFrequency &&
-                        !ValidateDailyParams(trigger))
-                    {
-                        return false;
-                    }
-
-                    CreateDailyTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Weekly:
-                    if (trigger.Frequency != triggerFrequency &&
-                        !ValidateWeeklyParams(trigger))
-                    {
-                        return false;
-                    }
-
-                    CreateWeeklyTrigger(trigger);
-                    break;
-            }
-
-            return true;
-        }
-
-        private bool ModifyTrigger(ScheduledJobTrigger trigger, TriggerFrequency triggerFrequency, bool validate = false)
-        {
-            switch (triggerFrequency)
-            {
-                case TriggerFrequency.AtStartup:
-                    if (validate &&
-                        !ValidateStartupParams())
-                    {
-                        return false;
-                    }
-
-                    ModifyStartupTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.AtLogon:
-                    if (validate &&
-                        !ValidateLogonParams())
-                    {
-                        return false;
-                    }
-
-                    ModifyLogonTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Once:
-                    if (validate &&
-                        !ValidateOnceParams())
-                    {
-                        return false;
-                    }
-
-                    ModifyOnceTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Daily:
-                    if (validate &&
-                        !ValidateDailyParams())
-                    {
-                        return false;
-                    }
-
-                    ModifyDailyTrigger(trigger);
-                    break;
-
-                case TriggerFrequency.Weekly:
-                    if (validate &&
-                        !ValidateWeeklyParams())
-                    {
-                        return false;
-                    }
-
-                    ModifyWeeklyTrigger(trigger);
-                    break;
-            }
-
-            return true;
-        }
-
-        private void ModifyStartupTrigger(ScheduledJobTrigger trigger)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)))
-            {
-                trigger.RandomDelay = _randomDelay;
-            }
-        }
-
-        private void ModifyLogonTrigger(ScheduledJobTrigger trigger)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)))
-            {
-                trigger.RandomDelay = _randomDelay;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(User)))
-            {
-                trigger.User = string.IsNullOrEmpty(_user) ? ScheduledJobTrigger.AllUsers : _user;
-            }
-        }
-
-        private void ModifyOnceTrigger(ScheduledJobTrigger trigger)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)))
-            {
-                trigger.RandomDelay = _randomDelay;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)))
-            {
-                trigger.RepetitionInterval = _repInterval;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)))
-            {
-                trigger.RepetitionDuration = _repDuration;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-            {
-                trigger.At = _atTime;
-            }
-        }
-
-        private void ModifyDailyTrigger(ScheduledJobTrigger trigger)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)))
-            {
-                trigger.RandomDelay = _randomDelay;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-            {
-                trigger.At = _atTime;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)))
-            {
-                trigger.Interval = _daysInterval;
-            }
-        }
-
-        private void ModifyWeeklyTrigger(ScheduledJobTrigger trigger)
-        {
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)))
-            {
-                trigger.RandomDelay = _randomDelay;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(At)))
-            {
-                trigger.At = _atTime;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)))
-            {
-                trigger.Interval = _weeksInterval;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)))
-            {
-                trigger.DaysOfWeek = new List<DayOfWeek>(_daysOfWeek);
-            }
-        }
-
-        private void CreateAtLogonTrigger(ScheduledJobTrigger trigger)
-        {
-            bool enabled = trigger.Enabled;
-            int id = trigger.Id;
-            TimeSpan randomDelay = trigger.RandomDelay;
-            string user = string.IsNullOrEmpty(trigger.User) ? ScheduledJobTrigger.AllUsers : trigger.User;
-
-            trigger.ClearProperties();
-            trigger.Frequency = TriggerFrequency.AtLogon;
-            trigger.Enabled = enabled;
-            trigger.Id = id;
-
-            trigger.RandomDelay = MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)) ? _randomDelay : randomDelay;
-            trigger.User = MyInvocation.BoundParameters.ContainsKey(nameof(User)) ? _user : user;
-        }
-
-        private void CreateAtStartupTrigger(ScheduledJobTrigger trigger)
-        {
-            bool enabled = trigger.Enabled;
-            int id = trigger.Id;
-            TimeSpan randomDelay = trigger.RandomDelay;
-
-            trigger.ClearProperties();
-            trigger.Frequency = TriggerFrequency.AtStartup;
-            trigger.Enabled = enabled;
-            trigger.Id = id;
-
-            trigger.RandomDelay = MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)) ? _randomDelay : randomDelay;
-        }
-
-        private void CreateOnceTrigger(ScheduledJobTrigger trigger)
-        {
-            bool enabled = trigger.Enabled;
-            int id = trigger.Id;
-            TimeSpan randomDelay = trigger.RandomDelay;
-            DateTime? atTime = trigger.At;
-            TimeSpan? repInterval = trigger.RepetitionInterval;
-            TimeSpan? repDuration = trigger.RepetitionDuration;
-
-            trigger.ClearProperties();
-            trigger.Frequency = TriggerFrequency.Once;
-            trigger.Enabled = enabled;
-            trigger.Id = id;
-
-            trigger.RandomDelay = MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)) ? _randomDelay : randomDelay;
-            trigger.At = MyInvocation.BoundParameters.ContainsKey(nameof(At)) ? _atTime : atTime;
-            trigger.RepetitionInterval = MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionInterval)) ? _repInterval : repInterval;
-            trigger.RepetitionDuration = MyInvocation.BoundParameters.ContainsKey(nameof(RepetitionDuration)) ? _repDuration : repDuration;
-        }
-
-        private void CreateDailyTrigger(ScheduledJobTrigger trigger)
-        {
-            bool enabled = trigger.Enabled;
-            int id = trigger.Id;
-            TimeSpan randomDelay = trigger.RandomDelay;
-            DateTime? atTime = trigger.At;
-            int interval = trigger.Interval;
-
-            trigger.ClearProperties();
-            trigger.Frequency = TriggerFrequency.Daily;
-            trigger.Enabled = enabled;
-            trigger.Id = id;
-
-            trigger.RandomDelay = MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)) ? _randomDelay : randomDelay;
-            trigger.At = MyInvocation.BoundParameters.ContainsKey(nameof(At)) ? _atTime : atTime;
-            trigger.Interval = MyInvocation.BoundParameters.ContainsKey(nameof(DaysInterval)) ? _daysInterval : interval;
-        }
-
-        private void CreateWeeklyTrigger(ScheduledJobTrigger trigger)
-        {
-            bool enabled = trigger.Enabled;
-            int id = trigger.Id;
-            TimeSpan randomDelay = trigger.RandomDelay;
-            DateTime? atTime = trigger.At;
-            int interval = trigger.Interval;
-            List<DayOfWeek> daysOfWeek = trigger.DaysOfWeek;
-
-            trigger.ClearProperties();
-            trigger.Frequency = TriggerFrequency.Weekly;
-            trigger.Enabled = enabled;
-            trigger.Id = id;
-
-            trigger.RandomDelay = MyInvocation.BoundParameters.ContainsKey(nameof(RandomDelay)) ? _randomDelay : randomDelay;
-            trigger.At = MyInvocation.BoundParameters.ContainsKey(nameof(At)) ? _atTime : atTime;
-            trigger.Interval = MyInvocation.BoundParameters.ContainsKey(nameof(WeeksInterval)) ? _weeksInterval : interval;
-            trigger.DaysOfWeek = MyInvocation.BoundParameters.ContainsKey(nameof(DaysOfWeek)) ? new List<DayOfWeek>(_daysOfWeek) : daysOfWeek;
-        }
-
-        private void WriteValidationError(string msg)
-        {
-            Exception reason = new RuntimeException(msg);
-            ErrorRecord errorRecord = new ErrorRecord(reason, "SetJobTriggerParameterValidationError", ErrorCategory.InvalidArgument, null);
-            WriteError(errorRecord);
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/SetScheduledJobOption.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/SetScheduledJobOption.cs
deleted file mode 100644
index bc1e07b1473..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/SetScheduledJobOption.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet sets the provided scheduled job options to the provided ScheduledJobOptions objects.
-    /// </summary>
-    [Cmdlet(VerbsCommon.Set, "ScheduledJobOption", DefaultParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223921")]
-    [OutputType(typeof(ScheduledJobOptions))]
-    public class SetScheduledJobOptionCommand : ScheduledJobOptionCmdletBase
-    {
-        #region Parameters
-
-        /// <summary>
-        /// ScheduledJobOptions object.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        [ValidateNotNull]
-        public ScheduledJobOptions InputObject
-        {
-            get { return _jobOptions; }
-
-            set { _jobOptions = value; }
-        }
-
-        private ScheduledJobOptions _jobOptions;
-
-        /// <summary>
-        /// Pas the ScheduledJobOptions object through to output.
-        /// </summary>
-        [Parameter(ParameterSetName = ScheduledJobOptionCmdletBase.OptionsParameterSet)]
-        public SwitchParameter PassThru
-        {
-            get { return _passThru; }
-
-            set { _passThru = value; }
-        }
-
-        private SwitchParameter _passThru;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // Update ScheduledJobOptions object with current parameters.
-            // Update switch parameters only if they were selected.
-            // Also update the ScheduledJobDefinition object associated with this options object.
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(StartIfOnBattery)))
-            {
-                _jobOptions.StartIfOnBatteries = StartIfOnBattery;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(ContinueIfGoingOnBattery)))
-            {
-                _jobOptions.StopIfGoingOnBatteries = !ContinueIfGoingOnBattery;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(WakeToRun)))
-            {
-                _jobOptions.WakeToRun = WakeToRun;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(StartIfIdle)))
-            {
-                _jobOptions.StartIfNotIdle = !StartIfIdle;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(StopIfGoingOffIdle)))
-            {
-                _jobOptions.StopIfGoingOffIdle = StopIfGoingOffIdle;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RestartOnIdleResume)))
-            {
-                _jobOptions.RestartOnIdleResume = RestartOnIdleResume;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(HideInTaskScheduler)))
-            {
-                _jobOptions.ShowInTaskScheduler = !HideInTaskScheduler;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RunElevated)))
-            {
-                _jobOptions.RunElevated = RunElevated;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(RequireNetwork)))
-            {
-                _jobOptions.RunWithoutNetwork = !RequireNetwork;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(DoNotAllowDemandStart)))
-            {
-                _jobOptions.DoNotAllowDemandStart = DoNotAllowDemandStart;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(IdleDuration)))
-            {
-                _jobOptions.IdleDuration = IdleDuration;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(IdleTimeout)))
-            {
-                _jobOptions.IdleTimeout = IdleTimeout;
-            }
-
-            if (MyInvocation.BoundParameters.ContainsKey(nameof(MultipleInstancePolicy)))
-            {
-                _jobOptions.MultipleInstancePolicy = MultipleInstancePolicy;
-            }
-
-            // Update ScheduledJobDefinition with changes.
-            if (_jobOptions.JobDefinition != null)
-            {
-                _jobOptions.UpdateJobDefinition();
-            }
-
-            if (_passThru)
-            {
-                WriteObject(_jobOptions);
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/commands/UnregisterJobDefinition.cs b/src/Microsoft.PowerShell.ScheduledJob/commands/UnregisterJobDefinition.cs
deleted file mode 100644
index c6c3885fb90..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/commands/UnregisterJobDefinition.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Management.Automation;
-
-namespace Microsoft.PowerShell.ScheduledJob
-{
-    /// <summary>
-    /// This cmdlet removes the specified ScheduledJobDefinition objects from the
-    /// Task Scheduler, job store, and local repository.
-    /// </summary>
-    [Cmdlet(VerbsLifecycle.Unregister, "ScheduledJob", SupportsShouldProcess = true, DefaultParameterSetName = UnregisterScheduledJobCommand.DefinitionParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223925")]
-    public sealed class UnregisterScheduledJobCommand : ScheduleJobCmdletBase
-    {
-        #region Parameters
-
-        private const string DefinitionIdParameterSet = "DefinitionId";
-        private const string DefinitionNameParameterSet = "DefinitionName";
-        private const string DefinitionParameterSet = "Definition";
-
-        /// <summary>
-        /// ScheduledJobDefinition Id.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = UnregisterScheduledJobCommand.DefinitionIdParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Int32[] Id
-        {
-            get { return _definitionIds; }
-
-            set { _definitionIds = value; }
-        }
-
-        private Int32[] _definitionIds;
-
-        /// <summary>
-        /// ScheduledJobDefinition Name.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true,
-                   ParameterSetName = UnregisterScheduledJobCommand.DefinitionNameParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public string[] Name
-        {
-            get { return _names; }
-
-            set { _names = value; }
-        }
-
-        private string[] _names;
-
-        /// <summary>
-        /// ScheduledJobDefinition.
-        /// </summary>
-        [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
-                   ParameterSetName = UnregisterScheduledJobCommand.DefinitionParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public ScheduledJobDefinition[] InputObject
-        {
-            get { return _definitions; }
-
-            set { _definitions = value; }
-        }
-
-        private ScheduledJobDefinition[] _definitions;
-
-        /// <summary>
-        /// When true this will stop any running instances of this job definition before
-        /// removing the definition.
-        /// </summary>
-        [Parameter(ParameterSetName = UnregisterScheduledJobCommand.DefinitionIdParameterSet)]
-        [Parameter(ParameterSetName = UnregisterScheduledJobCommand.DefinitionNameParameterSet)]
-        [Parameter(ParameterSetName = UnregisterScheduledJobCommand.DefinitionParameterSet)]
-        public SwitchParameter Force
-        {
-            get { return _force; }
-
-            set { _force = value; }
-        }
-
-        private SwitchParameter _force;
-
-        #endregion
-
-        #region Cmdlet Overrides
-
-        /// <summary>
-        /// Process input.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            List<ScheduledJobDefinition> definitions = null;
-            switch (ParameterSetName)
-            {
-                case DefinitionParameterSet:
-                    definitions = new List<ScheduledJobDefinition>(_definitions);
-                    break;
-
-                case DefinitionNameParameterSet:
-                    definitions = GetJobDefinitionsByName(_names);
-                    break;
-
-                case DefinitionIdParameterSet:
-                    definitions = GetJobDefinitionsById(_definitionIds);
-                    break;
-            }
-
-            if (definitions != null)
-            {
-                foreach (ScheduledJobDefinition definition in definitions)
-                {
-                    string targetString = StringUtil.Format(ScheduledJobErrorStrings.DefinitionWhatIf, definition.Name);
-                    if (ShouldProcess(targetString, VerbsLifecycle.Unregister))
-                    {
-                        // Removes the ScheduledJobDefinition from the job store,
-                        // Task Scheduler, and disposes the object.
-                        try
-                        {
-                            definition.Remove(_force);
-                        }
-                        catch (ScheduledJobException e)
-                        {
-                            string msg = StringUtil.Format(ScheduledJobErrorStrings.CantUnregisterDefinition, definition.Name);
-                            Exception reason = new RuntimeException(msg, e);
-                            ErrorRecord errorRecord = new ErrorRecord(reason, "CantUnregisterScheduledJobDefinition", ErrorCategory.InvalidOperation, definition);
-                            WriteError(errorRecord);
-                        }
-                    }
-                }
-            }
-
-            // Check for unknown definition names.
-            if ((_names != null && _names.Length > 0) &&
-                (_definitions == null || _definitions.Length < _names.Length))
-            {
-                // Make sure there is no PowerShell task in Task Scheduler with removed names.
-                // This covers the case where the scheduled job definition was manually removed from
-                // the job store but remains as a PowerShell task in Task Scheduler.
-                using (ScheduledJobWTS taskScheduler = new ScheduledJobWTS())
-                {
-                    foreach (string name in _names)
-                    {
-                        taskScheduler.RemoveTaskByName(name, true, true);
-                    }
-                }
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/src/Microsoft.PowerShell.ScheduledJob/resources/ScheduledJobErrorStrings.resx b/src/Microsoft.PowerShell.ScheduledJob/resources/ScheduledJobErrorStrings.resx
deleted file mode 100644
index 047abfee829..00000000000
--- a/src/Microsoft.PowerShell.ScheduledJob/resources/ScheduledJobErrorStrings.resx
+++ /dev/null
@@ -1,387 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="CannotFindJobDefinition" xml:space="preserve">
-    <value>Cannot find scheduled job {0}.</value>
-    <comment>{0} is the scheduled job definition name that cannot be found.</comment>
-  </data>
-  <data name="CannotFindTaskId" xml:space="preserve">
-    <value>Cannot find scheduled job definition {0} in the Task Scheduler.</value>
-  </data>
-  <data name="CannotRemoveTaskRunningInstance" xml:space="preserve">
-    <value>The scheduled job definition {0} cannot be removed because one or more instances are currently running.  You can remove and stop all running instances by using the Force parameter.</value>
-  </data>
-  <data name="CantAddJobTriggersToDefinition" xml:space="preserve">
-    <value>An error occurred while adding triggers to the scheduled job {0}.</value>
-  </data>
-  <data name="CantFindInWTS" xml:space="preserve">
-    <value>There is no entry in Task Scheduler for scheduled job definition {0}.  A new Task Scheduler entry has been created for this scheduled job definition.</value>
-  </data>
-  <data name="CantLoadDefinitionFromStore" xml:space="preserve">
-    <value>Cannot get the {0} scheduled job because it is corrupted or in an irresolvable state. Because it cannot run, PowerShell has deleted {0} and its results from the computer. To recreate the scheduled job, use the Register-ScheduledJob cmdlet. For more information about corrupted scheduled jobs, see about_Scheduled_Jobs_Troubleshooting.</value>
-    <comment>{0} is the name of the scheduled job definition.</comment>
-  </data>
-  <data name="CantLoadJobRunFromStore" xml:space="preserve">
-    <value>An error occurred while loading job run results for scheduled job {0} with job run date {1}.  </value>
-  </data>
-  <data name="CantRegisterJobDefinition" xml:space="preserve">
-    <value>An error occurred while registering the scheduled job {0}.</value>
-  </data>
-  <data name="CantRemoveTriggersFromDefinition" xml:space="preserve">
-    <value>An error occurred while removing job triggers from scheduled job {0}.</value>
-  </data>
-  <data name="CantRetrieveJobRuns" xml:space="preserve">
-    <value>One or more scheduled job runs could not be retrieved {0}.</value>
-  </data>
-  <data name="CantSaveJobNoFilePathSpecified" xml:space="preserve">
-    <value>Job {0} cannot be saved because no file path was specified.</value>
-  </data>
-  <data name="CantSaveJobNotRun" xml:space="preserve">
-    <value>Job {0} has not been run and cannot be saved.  Run the job first, and then save results.</value>
-  </data>
-  <data name="CantSetEnableOnJobDefinition" xml:space="preserve">
-    <value>An error occurred while enabling or disabling the scheduled job {0}.</value>
-  </data>
-  <data name="CantSetJobDefinition" xml:space="preserve">
-    <value>An error occurred while setting properties on the scheduled job {0}.</value>
-  </data>
-  <data name="CantStartJobDefinition" xml:space="preserve">
-    <value>Cannot start a job from the {0} scheduled job definition.</value>
-  </data>
-  <data name="CantUnregisterDefinition" xml:space="preserve">
-    <value>An error occurred while unregistering the scheduled job {0}.</value>
-  </data>
-  <data name="CantUpdateTriggerOnJobDef" xml:space="preserve">
-    <value>An error occurred while updating the scheduled job definition {0} with this trigger {1}. See exception details for more information.</value>
-  </data>
-  <data name="ConflictingTypeParams" xml:space="preserve">
-    <value>Only one JobTrigger type can be specified: AtStartup, AtLogon, Once, Daily, or Weekly.</value>
-  </data>
-  <data name="DefinitionAlreadyExistsInLocal" xml:space="preserve">
-    <value>A scheduled job definition object {0} already exists in the local scheduled job repository having this Global ID {1}.</value>
-  </data>
-  <data name="DefinitionNotFoundByGlobalId" xml:space="preserve">
-    <value>A scheduled job definition object with Global ID {0} could not be found.</value>
-  </data>
-  <data name="DefinitionNotFoundById" xml:space="preserve">
-    <value>A scheduled job definition with ID {0} could not be found.</value>
-  </data>
-  <data name="DefinitionNotFoundByName" xml:space="preserve">
-    <value>A scheduled job definition with Name {0} could not be found.</value>
-  </data>
-  <data name="DefinitionObjectDisposed" xml:space="preserve">
-    <value>This scheduled job definition object {0} has been disposed.</value>
-  </data>
-  <data name="DefinitionWhatIf" xml:space="preserve">
-    <value>Scheduled job definition {0}.</value>
-  </data>
-  <data name="DirectoryNotFoundError" xml:space="preserve">
-    <value>A directory not found error occurred while registering scheduled job definition {0}.  Make sure you are running PowerShell with elevated privileges.</value>
-  </data>
-  <data name="ErrorRegisteringDefinitionStore" xml:space="preserve">
-    <value>An error occurred while registering scheduled job definition {0}. Cannot add this definition object to the job store.</value>
-  </data>
-  <data name="ErrorRegisteringDefinitionTask" xml:space="preserve">
-    <value>An error occurred while registering scheduled job definition {0} to the Windows Task Scheduler.  The Task Scheduler error is: {1}.</value>
-  </data>
-  <data name="ErrorRemovingDefinitionStore" xml:space="preserve">
-    <value>An error occurred while unregistering scheduled job definition {0}.</value>
-  </data>
-  <data name="ErrorSettingAccessPermissions" xml:space="preserve">
-    <value>An error occurred while setting file access permissions for job definition {0} and user {1}.</value>
-  </data>
-  <data name="ErrorUpdatingDefinitionStore" xml:space="preserve">
-    <value>An error occurred while updating scheduled job definition {0}.  Cannot update this definition in the job store.</value>
-  </data>
-  <data name="ErrorUpdatingDefinitionTask" xml:space="preserve">
-    <value>An error occurred while updating scheduled job definition {0}.  Cannot update this definition with the Windows Task Scheduler.</value>
-  </data>
-  <data name="GeneralWTSError" xml:space="preserve">
-    <value>An error has occurred within the Task Scheduler.</value>
-  </data>
-  <data name="InvalidAtTime" xml:space="preserve">
-    <value>The At parameter is not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="InvalidDaysInterval" xml:space="preserve">
-    <value>The DaysInterval parameter is not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="InvalidDaysIntervalParam" xml:space="preserve">
-    <value>The DaysInterval parameter value must be greater than zero.</value>
-  </data>
-  <data name="InvalidDaysOfWeek" xml:space="preserve">
-    <value>The DaysOfWeek parameter is not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="InvalidFilePath" xml:space="preserve">
-    <value>The FilePath parameter is not valid.</value>
-  </data>
-  <data name="InvalidFilePathFile" xml:space="preserve">
-    <value>Only PowerShell script files are allowed for FilePath parameter. Specify a file with .ps1 extension.</value>
-  </data>
-  <data name="InvalidIdleDuration" xml:space="preserve">
-    <value>The IdleDuration parameter cannot have a negative value.</value>
-  </data>
-  <data name="InvalidIdleTimeout" xml:space="preserve">
-    <value>The IdleTimeout parameter cannot have a negative value.</value>
-  </data>
-  <data name="InvalidJobDefName" xml:space="preserve">
-    <value>The scheduled job definition name {0} contains characters that are not valid.</value>
-  </data>
-  <data name="InvalidMaxResultCount" xml:space="preserve">
-    <value>The MaxResultCount parameter cannot have a negative or zero value.</value>
-  </data>
-  <data name="InvalidUser" xml:space="preserve">
-    <value>The User parameter is not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="InvalidWeeksInterval" xml:space="preserve">
-    <value>The WeeksInterval parameter is not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="InvalidWeeksIntervalParam" xml:space="preserve">
-    <value>The WeeksInterval parameter value must be greater than zero.</value>
-  </data>
-  <data name="IOFailureOnSetJobDefinition" xml:space="preserve">
-    <value>An I/O failure occurred while updating the scheduled job definition {0}.  This could mean a file is missing or corrupted, either in Task Scheduler or in the PowerShell scheduled job store. You might need to create the scheduled job definition again.</value>
-    <comment>{0} is the scheduled job definition name</comment>
-  </data>
-  <data name="JobAlreadyRunning" xml:space="preserve">
-    <value>Job {0} is currently running.</value>
-  </data>
-  <data name="JobDefFileAlreadyExists" xml:space="preserve">
-    <value>The scheduled job definition {0} already exists in the job definition store.</value>
-  </data>
-  <data name="JobRunResultsFileAlreadyExists" xml:space="preserve">
-    <value>The scheduled job results {0} already exist in the job results store.</value>
-  </data>
-  <data name="MissingAtTime" xml:space="preserve">
-    <value>The At parameter is required for the {0} job trigger type.</value>
-  </data>
-  <data name="MissingDaysOfWeek" xml:space="preserve">
-    <value>The DaysOfWeek parameter is required for the {0} job trigger type.</value>
-  </data>
-  <data name="MissingJobTriggerDaysOfWeek" xml:space="preserve">
-    <value>The job trigger {0} requires the DaysOfWeek parameter to be defined.</value>
-  </data>
-  <data name="MissingJobTriggerTime" xml:space="preserve">
-    <value>The Job trigger {0} requires the At parameter to be defined.</value>
-  </data>
-  <data name="MissingJobTriggerType" xml:space="preserve">
-    <value>No Frequency type has been specified for this job trigger. One of the following job trigger frequencies must be specified: AtStartup, AtLogon, Once, Daily, Weekly.</value>
-  </data>
-  <data name="NoAccessOnSetJobDefinition" xml:space="preserve">
-    <value>An access denied error occurred while updating the scheduled job definition {0}.  Try running PowerShell with elevated user rights; that is, Run as Administrator.</value>
-    <comment>{0} is the scheduled job definition name</comment>
-  </data>
-  <data name="NoAssociatedJobDefinitionForOption" xml:space="preserve">
-    <value>There is no scheduled job definition object associated with this options object.</value>
-  </data>
-  <data name="NoAssociatedJobDefinitionForTrigger" xml:space="preserve">
-    <value>There is no scheduled job definition object associated with this trigger {0}.</value>
-  </data>
-  <data name="ScheduledJobAlreadyExistsInLocal" xml:space="preserve">
-    <value>The scheduled job {0} already exists in the local repository.</value>
-  </data>
-  <data name="ScheduledJobNotInRepository" xml:space="preserve">
-    <value>The scheduled job {0} is not in the local job repository.</value>
-  </data>
-  <data name="TaskIdAlreadyExists" xml:space="preserve">
-    <value>The scheduled job definition {0} already exists in Task Scheduler.</value>
-  </data>
-  <data name="TriggerDailyType" xml:space="preserve">
-    <value>Daily</value>
-  </data>
-  <data name="TriggerLogonType" xml:space="preserve">
-    <value>AtLogon</value>
-  </data>
-  <data name="TriggerNotFound" xml:space="preserve">
-    <value>A scheduled job trigger with ID {0} was not found for the scheduled job definition {1}.</value>
-  </data>
-  <data name="TriggerOnceType" xml:space="preserve">
-    <value>Once</value>
-  </data>
-  <data name="TriggerStartUpType" xml:space="preserve">
-    <value>AtStartup</value>
-  </data>
-  <data name="TriggerWeeklyType" xml:space="preserve">
-    <value>Weekly</value>
-  </data>
-  <data name="UnauthorizedAccessError" xml:space="preserve">
-    <value>An access denied error occurred when registering scheduled job definition {0}.  Try running PowerShell with elevated user rights; that is, Run As Administrator.</value>
-  </data>
-  <data name="UnknownTriggerFrequency" xml:space="preserve">
-    <value>Cannot convert a ScheduledJobTrigger object with TriggerFrequency value of {0}.</value>
-  </data>
-  <data name="UnknownTriggerType" xml:space="preserve">
-    <value>An unknown trigger type was returned from Task Scheduler for scheduled job definition {0} with trigger ID {1}.</value>
-  </data>
-  <data name="CannotSerializeData" xml:space="preserve">
-    <value>The scheduled job definition {0} could not be saved because one of the values in the ArgumentList parameter cannot be converted to XML. If possible, change the ArgumentList values to types that are easily converted to XML, such as strings, integers, and hash tables. {1}</value>
-    <comment>{0} is the name of the scheduled job definition that cannot be registered
-{1} is the inner exception message from .Net serialization, or empty if no exception message.</comment>
-  </data>
-  <data name="UnsupportedHostFunction" xml:space="preserve">
-    <value>Commands that interact with the host program, such as Write-Host, cannot be included in PowerShell scheduled jobs because scheduled jobs do not interact with the host program.  Use an alternate command that does not interact with the host program, such as Write-Output or Out-File.</value>
-  </data>
-  <data name="InvalidRepetitionInterval" xml:space="preserve">
-    <value>The RepetitionInterval parameter value must be less than or equal to the RepetitionDuration parameter value.</value>
-  </data>
-  <data name="InvalidRepetitionIntervalValue" xml:space="preserve">
-    <value>The RepetitionInterval parameter value must be greater than 1 minute.</value>
-  </data>
-  <data name="InvalidRepetitionParams" xml:space="preserve">
-    <value>The RepetitionInterval and RepetitionDuration Job trigger parameters must be specified together.</value>
-  </data>
-  <data name="InvalidRepetitionParamValues" xml:space="preserve">
-    <value>The Repetition parameters cannot have negative values.</value>
-  </data>
-  <data name="InvalidSetTriggerRepetition" xml:space="preserve">
-    <value>The Repetition parameters are not valid for the {0} job trigger type.</value>
-  </data>
-  <data name="MismatchedRepetitionParamValues" xml:space="preserve">
-    <value>The RepetitionInterval parameter cannot have a value of zero unless the RepetitionDuration parameter also has a zero value. A zero value removes repetition behavior from the Job trigger.</value>
-  </data>
-  <data name="ErrorRenamingScheduledJob" xml:space="preserve">
-    <value>An error occurred while attempting to rename scheduled job from {0} to {1}.</value>
-  </data>
-  <data name="ErrorRenamingScheduledJobWithMessage" xml:space="preserve">
-    <value>An error occurred while attempting to rename scheduled job from {0} to {1} with error message: {2}.</value>
-  </data>
-  <data name="BrokenRenamingScheduledJob" xml:space="preserve">
-    <value>An unrecoverable error occurred while renaming the scheduled job from {0} to {1}. The scheduled job will be removed.</value>
-  </data>
-  <data name="BrokenRenamingScheduledJobWithMessage" xml:space="preserve">
-    <value>An unrecoverable error occurred while renaming the scheduled job from {0} to {1} with message {2}. The scheduled job will be removed.</value>
-  </data>
-  <data name="ErrorRunningAsTask" xml:space="preserve">
-    <value>An error occurred while running scheduled job definition {0} from the Task Scheduler.</value>
-  </data>
-  <data name="ErrorRunningAsTaskWithReason" xml:space="preserve">
-    <value>An error occurred while running scheduled job definition {0} from the Task Scheduler because {1}.</value>
-  </data>
-  <data name="InvalidRepeatIndefinitelyParams" xml:space="preserve">
-    <value>You cannot specify the RepetitionDuration and RepeatIndefinitely parameters in the same command.</value>
-  </data>
-  <data name="InvalidRepetitionRepeatParams" xml:space="preserve">
-    <value>When you use the RepeatIndefinitely parameter, the RepetitionInterval parameter is required.</value>
-  </data>
-  <data name="reasonJobNotFound" xml:space="preserve">
-    <value>the scheduled job definition could not be found</value>
-  </data>
-  <data name="ReasonTaskDisabled" xml:space="preserve">
-    <value>the scheduled job definition is disabled</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj b/src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj
index a6dadabfed2..8e991d177b4 100644
--- a/src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj
+++ b/src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj
@@ -11,10 +11,8 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Compile Remove="singleshell\installer\MshSecurityMshSnapin.cs" />
-    <Compile Remove="gen\SecurityMshSnapinResources.cs" />
-
-    <EmbeddedResource Remove="resources\SecurityMshSnapinResources.resx" />
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
   </ItemGroup>
-
 </Project>
diff --git a/src/Microsoft.PowerShell.Security/resources/CertificateCommands.resx b/src/Microsoft.PowerShell.Security/resources/CertificateCommands.resx
index d4c08f78bab..833793ecf25 100644
--- a/src/Microsoft.PowerShell.Security/resources/CertificateCommands.resx
+++ b/src/Microsoft.PowerShell.Security/resources/CertificateCommands.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Security/resources/CertificateProviderStrings.resx b/src/Microsoft.PowerShell.Security/resources/CertificateProviderStrings.resx
index ded11aab0a2..11e70869c16 100644
--- a/src/Microsoft.PowerShell.Security/resources/CertificateProviderStrings.resx
+++ b/src/Microsoft.PowerShell.Security/resources/CertificateProviderStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -144,9 +144,6 @@
   <data name="Action_Invoke" xml:space="preserve">
     <value>Invoke Certificate Manager</value>
   </data>
-  <data name="NotSupported_CertificateProvider" xml:space="preserve">
-      <value>{0} is not supported in the current operating system. </value>
-  </data>
   <data name="MoveItemTemplate" xml:space="preserve">
       <value>Item: {0} Destination: {1} </value>
   </data>
diff --git a/src/Microsoft.PowerShell.Security/resources/CmsCommands.resx b/src/Microsoft.PowerShell.Security/resources/CmsCommands.resx
index 9f47134f147..6d646ddee45 100644
--- a/src/Microsoft.PowerShell.Security/resources/CmsCommands.resx
+++ b/src/Microsoft.PowerShell.Security/resources/CmsCommands.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Security/resources/ExecutionPolicyCommands.resx b/src/Microsoft.PowerShell.Security/resources/ExecutionPolicyCommands.resx
index d1bb4f0b23c..f2a48e21ed2 100644
--- a/src/Microsoft.PowerShell.Security/resources/ExecutionPolicyCommands.resx
+++ b/src/Microsoft.PowerShell.Security/resources/ExecutionPolicyCommands.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Security/resources/SecureStringCommands.resx b/src/Microsoft.PowerShell.Security/resources/SecureStringCommands.resx
index af2242e5828..a418bb03920 100644
--- a/src/Microsoft.PowerShell.Security/resources/SecureStringCommands.resx
+++ b/src/Microsoft.PowerShell.Security/resources/SecureStringCommands.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Security/resources/SecurityMshSnapinResources.resx b/src/Microsoft.PowerShell.Security/resources/SecurityMshSnapinResources.resx
deleted file mode 100644
index e86df194720..00000000000
--- a/src/Microsoft.PowerShell.Security/resources/SecurityMshSnapinResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Description" xml:space="preserve">
-    <value>This PowerShell Snap-In contains cmdlets to manage PowerShell security.</value>
-  </data>
-  <data name="Vendor" xml:space="preserve">
-    <value>Microsoft Corporation</value>
-  </data>
-  <data name="Name" xml:space="preserve">
-    <value>Security PowerShell Snap-In.</value>
-  </data>
-</root>
diff --git a/src/Microsoft.PowerShell.Security/resources/SignatureCommands.resx b/src/Microsoft.PowerShell.Security/resources/SignatureCommands.resx
index 53f5371fc4c..dcbbc53bd51 100644
--- a/src/Microsoft.PowerShell.Security/resources/SignatureCommands.resx
+++ b/src/Microsoft.PowerShell.Security/resources/SignatureCommands.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -121,7 +121,7 @@
     <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
   </data>
   <data name="TimeStampUrlRequired" xml:space="preserve">
-    <value>Cannot sign code.  The TimeStamp server URL must be fully qualified in the form of http://&lt;server url&gt;</value>
+    <value>Cannot sign code.  The TimeStamp server URL must be fully qualified in the form of http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
   </data>
   <data name="CannotRetrieveFromContainer" xml:space="preserve">
     <value>The Get-AuthenticodeSignature cmdlet does not support directories. Supply a path to a file and retry.</value>
diff --git a/src/Microsoft.PowerShell.Security/resources/UtilsStrings.resx b/src/Microsoft.PowerShell.Security/resources/UtilsStrings.resx
index b067e9dc988..2a0404efe7f 100644
--- a/src/Microsoft.PowerShell.Security/resources/UtilsStrings.resx
+++ b/src/Microsoft.PowerShell.Security/resources/UtilsStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/CertificateCommands.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/CertificateCommands.cs.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/CertificateCommands.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/CertificateProviderStrings.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/CertificateProviderStrings.cs.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/CertificateProviderStrings.cs.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/CmsCommands.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/CmsCommands.cs.resx
new file mode 100644
index 00000000000..213cc64a867
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/CmsCommands.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Cesta {0} musí odkazovat na jedinou cestu systému souborů.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Ochranu zprávy nejde zrušit. Vstup neobsahoval žádný šifrovaný obsah.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Ochranu zprávy nejde zrušit. Vstup neobsahoval žádný šifrovaný obsah. Pokud chcete v případě, že se nezjistí žádný šifrovaný obsah, vypsat původní obsah, zadejte parametr {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/ExecutionPolicyCommands.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/ExecutionPolicyCommands.cs.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/ExecutionPolicyCommands.cs.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/SecureStringCommands.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/SecureStringCommands.cs.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/SecureStringCommands.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/SignatureCommands.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/SignatureCommands.cs.resx
new file mode 100644
index 00000000000..53953301899
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/SignatureCommands.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Kód nejde podepsat. Zadaný certifikát není vhodný k podepisování kódu.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Kód nejde podepsat.  Adresa URL serveru časového razítka musí být plně kvalifikovaná ve formátu http://&lt;server url&gt; nebo https://&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Rutina Get-AuthenticodeSignature nepodporuje adresáře. Zadejte cestu k souboru a zkuste to znovu.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Soubor {0} nebyl nalezen.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/cs/UtilsStrings.cs.resx b/src/Microsoft.PowerShell.Security/resources/cs/UtilsStrings.cs.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/cs/UtilsStrings.cs.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/CertificateCommands.de.resx b/src/Microsoft.PowerShell.Security/resources/de/CertificateCommands.de.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/CertificateCommands.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/CertificateProviderStrings.de.resx b/src/Microsoft.PowerShell.Security/resources/de/CertificateProviderStrings.de.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/CertificateProviderStrings.de.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/CmsCommands.de.resx b/src/Microsoft.PowerShell.Security/resources/de/CmsCommands.de.resx
new file mode 100644
index 00000000000..1553d13cf75
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/CmsCommands.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Der Pfad „{0}“ muss auf einen einzelnen Dateisystempfad verweisen.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Der Schutz der Nachricht kann nicht aufgehoben werden. Die Eingabe enthielt keinen verschlüsselten Inhalt.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Der Schutz der Nachricht kann nicht aufgehoben werden. Die Eingabe enthielt keinen verschlüsselten Inhalt. Geben Sie den Parameter „{0}“ an, wenn Sie den ursprünglichen Inhalt ausgeben möchten, wenn kein verschlüsselter Inhalt erkannt wird.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/ExecutionPolicyCommands.de.resx b/src/Microsoft.PowerShell.Security/resources/de/ExecutionPolicyCommands.de.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/ExecutionPolicyCommands.de.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/SecureStringCommands.de.resx b/src/Microsoft.PowerShell.Security/resources/de/SecureStringCommands.de.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/SecureStringCommands.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/SignatureCommands.de.resx b/src/Microsoft.PowerShell.Security/resources/de/SignatureCommands.de.resx
new file mode 100644
index 00000000000..2554443ab4d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/SignatureCommands.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Code kann nicht signiert werden. Das angegebene Zertifikat ist nicht zum Codesignieren geeignet.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Code kann nicht signiert werden.  Die TimeStamp-Server-URL muss in der Form http://&lt;server url&gt; oder https://&lt;server url&gt; vollqualifiziert sein.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Das Get-AuthenticodeSignature „cmdlet“ unterstützt keine Verzeichnisse. Geben Sie einen Pfad zu einer Datei an, und wiederholen Sie den Vorgang.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Die Datei „{0}“ wurde nicht gefunden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/de/UtilsStrings.de.resx b/src/Microsoft.PowerShell.Security/resources/de/UtilsStrings.de.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/de/UtilsStrings.de.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/CertificateCommands.es.resx b/src/Microsoft.PowerShell.Security/resources/es/CertificateCommands.es.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/CertificateCommands.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/CertificateProviderStrings.es.resx b/src/Microsoft.PowerShell.Security/resources/es/CertificateProviderStrings.es.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/CertificateProviderStrings.es.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/CmsCommands.es.resx b/src/Microsoft.PowerShell.Security/resources/es/CmsCommands.es.resx
new file mode 100644
index 00000000000..23154f6a150
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/CmsCommands.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>La ruta "{0}" debe hacer referencia a una única ruta del sistema de archivos.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>No se puede desproteger el mensaje. La entrada no contenía contenido cifrado.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>No se puede desproteger el mensaje. La entrada no contenía contenido cifrado. Especifique el parámetro "{0}" si desea mostrar el contenido original cuando no se detecte contenido cifrado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/ExecutionPolicyCommands.es.resx b/src/Microsoft.PowerShell.Security/resources/es/ExecutionPolicyCommands.es.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/ExecutionPolicyCommands.es.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/SecureStringCommands.es.resx b/src/Microsoft.PowerShell.Security/resources/es/SecureStringCommands.es.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/SecureStringCommands.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/SignatureCommands.es.resx b/src/Microsoft.PowerShell.Security/resources/es/SignatureCommands.es.resx
new file mode 100644
index 00000000000..0d61c48b43f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/SignatureCommands.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>No se puede firmar el código. El certificado especificado no es adecuado para la firma de código.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>No se puede firmar el código.  La URL del servidor de marca de tiempo debe estar completa, en la forma http://&lt;server url&gt; o https://&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>El cmdlet Get-AuthenticodeSignature no admite directorios. Proporcione una ruta de acceso a un archivo y vuelva a intentarlo.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No se ha encontrado el archivo {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/es/UtilsStrings.es.resx b/src/Microsoft.PowerShell.Security/resources/es/UtilsStrings.es.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/es/UtilsStrings.es.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/CertificateCommands.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/CertificateCommands.fr.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/CertificateCommands.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/CertificateProviderStrings.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/CertificateProviderStrings.fr.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/CertificateProviderStrings.fr.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/CmsCommands.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/CmsCommands.fr.resx
new file mode 100644
index 00000000000..89dfad5bada
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/CmsCommands.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Le chemin « {0} » doit faire référence à un seul chemin du système de fichiers.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Nous ne pouvons pas lever la protection du message. L’entrée ne contenait aucun contenu chiffré.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Nous ne pouvons pas lever la protection du message. L’entrée ne contenait aucun contenu chiffré. Spécifiez le paramètre « {0} » si vous souhaitez afficher le contenu d’origine lorsqu’aucun contenu chiffré n’est détecté.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/ExecutionPolicyCommands.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/ExecutionPolicyCommands.fr.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/ExecutionPolicyCommands.fr.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/SecureStringCommands.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/SecureStringCommands.fr.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/SecureStringCommands.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/SignatureCommands.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/SignatureCommands.fr.resx
new file mode 100644
index 00000000000..1229fd6a972
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/SignatureCommands.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Impossible de signer le code. Le certificat spécifié ne convient pas pour la signature de code.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Impossible de signer le code.  L’URL du serveur TimeStamp doit être entièrement qualifiée et prendre la forme http://&lt;server url&gt; ou https://&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>L’applet de commande Get-AuthenticodeSignature ne prend pas en charge les dossiers. Indiquez un chemin d’accès à un fichier, puis réessayez.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Le fichier « {0} » est introuvable</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/fr/UtilsStrings.fr.resx b/src/Microsoft.PowerShell.Security/resources/fr/UtilsStrings.fr.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/fr/UtilsStrings.fr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/CertificateCommands.it.resx b/src/Microsoft.PowerShell.Security/resources/it/CertificateCommands.it.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/CertificateCommands.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/CertificateProviderStrings.it.resx b/src/Microsoft.PowerShell.Security/resources/it/CertificateProviderStrings.it.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/CertificateProviderStrings.it.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/CmsCommands.it.resx b/src/Microsoft.PowerShell.Security/resources/it/CmsCommands.it.resx
new file mode 100644
index 00000000000..6906cec081d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/CmsCommands.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Il percorso "{0}" deve fare riferimento a un singolo percorso del file system.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Non è possibile rimuovere la protezione del messaggio. L'input non conteneva alcun contenuto crittografato.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Non è possibile rimuovere la protezione del messaggio. L'input non conteneva alcun contenuto crittografato. Specificare il parametro "{0}" se si desidera restituire il contenuto originale quando non viene rilevato alcun contenuto crittografato.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/ExecutionPolicyCommands.it.resx b/src/Microsoft.PowerShell.Security/resources/it/ExecutionPolicyCommands.it.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/ExecutionPolicyCommands.it.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/SecureStringCommands.it.resx b/src/Microsoft.PowerShell.Security/resources/it/SecureStringCommands.it.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/SecureStringCommands.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/SignatureCommands.it.resx b/src/Microsoft.PowerShell.Security/resources/it/SignatureCommands.it.resx
new file mode 100644
index 00000000000..ca5a33371dc
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/SignatureCommands.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Non è possibile firmare il codice. Il certificato specificato non è adatto per la firma del codice.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Non è possibile firmare il codice.  L'URL del server TimeStamp deve essere completo nel formato http://&lt;url server&gt; o https://&lt;url server&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Il cmdlet Get-AuthenticodeSignature non supporta le directory. Specificare un percorso di un file e riprovare.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Non è possibile trovare il file {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/it/UtilsStrings.it.resx b/src/Microsoft.PowerShell.Security/resources/it/UtilsStrings.it.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/it/UtilsStrings.it.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/CertificateCommands.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/CertificateCommands.ja.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/CertificateCommands.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/CertificateProviderStrings.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/CertificateProviderStrings.ja.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/CertificateProviderStrings.ja.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/CmsCommands.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/CmsCommands.ja.resx
new file mode 100644
index 00000000000..f941c3b1d8d
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/CmsCommands.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>パス '{0}' は、1 つのファイル システム パスを参照する必要があります。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>メッセージの保護を解除できません。入力には暗号化されたコンテンツが含まれていませんでした。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>メッセージの保護を解除できません。入力には暗号化されたコンテンツが含まれていませんでした。暗号化されたコンテンツが検出されない場合に元のコンテンツを出力する場合は、'{0}' パラメーターを指定します。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/ExecutionPolicyCommands.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/ExecutionPolicyCommands.ja.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/ExecutionPolicyCommands.ja.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/SecureStringCommands.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/SecureStringCommands.ja.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/SecureStringCommands.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/SignatureCommands.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/SignatureCommands.ja.resx
new file mode 100644
index 00000000000..dbfe3cd4ac6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/SignatureCommands.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>コードに署名できません。指定された証明書はコード署名に適していません。</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>コードに署名できません。 TimeStamp サーバー URL は、http://&lt;server url&gt; または https://&lt;server url&gt; の形式で完全修飾されている必要があります。</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Get-AuthenticodeSignature コマンドレットではディレクトリはサポートされていません。ファイルへのパスを指定して再試行してください。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>ファイル {0} が見つかりませんでした。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ja/UtilsStrings.ja.resx b/src/Microsoft.PowerShell.Security/resources/ja/UtilsStrings.ja.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ja/UtilsStrings.ja.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/CertificateCommands.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/CertificateCommands.ko.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/CertificateCommands.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/CertificateProviderStrings.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/CertificateProviderStrings.ko.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/CertificateProviderStrings.ko.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/CmsCommands.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/CmsCommands.ko.resx
new file mode 100644
index 00000000000..844e9baf534
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/CmsCommands.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>경로 '{0}'은(는) 단일 파일 시스템 경로를 참조해야 합니다.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>메시지의 보호를 해제할 수 없습니다. 입력에 암호화된 콘텐츠가 없습니다.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>메시지의 보호를 해제할 수 없습니다. 입력에 암호화된 콘텐츠가 없습니다. 암호화된 콘텐츠가 검색되지 않을 때 원래 콘텐츠를 출력하려면 '{0}' 매개 변수를 지정하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/ExecutionPolicyCommands.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/ExecutionPolicyCommands.ko.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/ExecutionPolicyCommands.ko.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/SecureStringCommands.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/SecureStringCommands.ko.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/SecureStringCommands.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/SignatureCommands.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/SignatureCommands.ko.resx
new file mode 100644
index 00000000000..cad136557e5
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/SignatureCommands.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>코드에 서명할 수 없습니다. 지정한 인증서는 코드 서명에 적합하지 않습니다.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>코드에 서명할 수 없습니다.  TimeStamp 서버 URL은 http://&lt;server url&gt; 또는 https://&lt;server url&gt; 형식의 완전한 정규화된 경로여야 합니다.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Get-AuthenticodeSignature cmdlet은 디렉터리를 지원하지 않습니다. 파일 경로를 지정하고 다시 시도하세요.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>파일 {0}을(를) 찾을 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ko/UtilsStrings.ko.resx b/src/Microsoft.PowerShell.Security/resources/ko/UtilsStrings.ko.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ko/UtilsStrings.ko.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/CertificateCommands.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/CertificateCommands.pl.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/CertificateCommands.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/CertificateProviderStrings.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/CertificateProviderStrings.pl.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/CertificateProviderStrings.pl.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/CmsCommands.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/CmsCommands.pl.resx
new file mode 100644
index 00000000000..b8baba584c6
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/CmsCommands.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Ścieżka „{0}” musi odwoływać się do pojedynczej ścieżki systemu plików.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Nie można wyłączyć ochrony wiadomości. Dane wejściowe nie zawierały zaszyfrowanej zawartości.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Nie można wyłączyć ochrony wiadomości. Dane wejściowe nie zawierały zaszyfrowanej zawartości. Określ parametr „{0}”, jeśli chcesz wygenerować oryginalną zawartość, gdy nie zostanie wykryta żadna zaszyfrowana zawartość.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/ExecutionPolicyCommands.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/ExecutionPolicyCommands.pl.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/ExecutionPolicyCommands.pl.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/SecureStringCommands.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/SecureStringCommands.pl.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/SecureStringCommands.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/SignatureCommands.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/SignatureCommands.pl.resx
new file mode 100644
index 00000000000..9523eb1271c
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/SignatureCommands.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Nie można podpisać kodu. Określony certyfikat nie jest odpowiedni do podpisywania kodu.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Nie można podpisać kodu.  Adres URL serwera TimeStamp musi być w pełni kwalifikowany w postaci adresu http://&lt;server url&gt; lub https:///&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Polecenie cmdlet Get-AuthenticodeSignature nie obsługuje katalogów. Podaj ścieżkę do pliku i spróbuj ponownie.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Nie znaleziono pliku „{0}”.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pl/UtilsStrings.pl.resx b/src/Microsoft.PowerShell.Security/resources/pl/UtilsStrings.pl.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pl/UtilsStrings.pl.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateCommands.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateCommands.pt-BR.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateCommands.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateProviderStrings.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateProviderStrings.pt-BR.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/CertificateProviderStrings.pt-BR.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/CmsCommands.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/CmsCommands.pt-BR.resx
new file mode 100644
index 00000000000..d46d177cd7b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/CmsCommands.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>O caminho '{0}' deve se referir a um único caminho do sistema de arquivos.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Não é possível cancelar a proteção da mensagem. A entrada não continha conteúdo criptografado.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Não é possível cancelar a proteção da mensagem. A entrada não continha conteúdo criptografado. Especifique o parâmetro '{0}' se quiser gerar o conteúdo original quando nenhum conteúdo criptografado for detectado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/ExecutionPolicyCommands.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/ExecutionPolicyCommands.pt-BR.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/ExecutionPolicyCommands.pt-BR.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/SecureStringCommands.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/SecureStringCommands.pt-BR.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/SecureStringCommands.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/SignatureCommands.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/SignatureCommands.pt-BR.resx
new file mode 100644
index 00000000000..230012b3337
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/SignatureCommands.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Não é possível assinar o código. O certificado especificado não é adequado para assinatura de código.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Não é possível assinar o código.  A URL do servidor TimeStamp deve ser totalmente qualificada no formato http://&lt;server url&gt; ou https://&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>O cmdlet Get-AuthenticodeSignature não dá suporte a diretórios. Forneça um caminho para um arquivo e tente novamente.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>O arquivo {0} não foi encontrado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/pt-BR/UtilsStrings.pt-BR.resx b/src/Microsoft.PowerShell.Security/resources/pt-BR/UtilsStrings.pt-BR.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/pt-BR/UtilsStrings.pt-BR.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/CertificateCommands.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/CertificateCommands.ru.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/CertificateCommands.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/CertificateProviderStrings.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/CertificateProviderStrings.ru.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/CertificateProviderStrings.ru.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/CmsCommands.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/CmsCommands.ru.resx
new file mode 100644
index 00000000000..e210477d708
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/CmsCommands.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Путь {0} должен указывать только на один путь файловой системы.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>Не удается снять защиту с сообщения. Входные данные не содержали зашифрованного содержимого.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>Не удается снять защиту с сообщения. Входные данные не содержали зашифрованного содержимого. Укажите параметр {0}, если требуется вывести исходное содержимое в случае, когда зашифрованное содержимое не обнаружено.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/ExecutionPolicyCommands.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/ExecutionPolicyCommands.ru.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/ExecutionPolicyCommands.ru.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/SecureStringCommands.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/SecureStringCommands.ru.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/SecureStringCommands.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/SignatureCommands.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/SignatureCommands.ru.resx
new file mode 100644
index 00000000000..967b9e702f1
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/SignatureCommands.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Не удается подписать код. Указанный сертификат не подходит для подписания кода.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Не удается подписать код.  URL-адрес сервера TimeStamp должен быть указан полностью в формате http://&lt;server url&gt; или https://&lt;server url&gt;.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Командлет Get-AuthenticodeSignature не поддерживает каталоги. Укажите путь к файлу и повторите попытку.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Файл {0} не найден.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/ru/UtilsStrings.ru.resx b/src/Microsoft.PowerShell.Security/resources/ru/UtilsStrings.ru.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/ru/UtilsStrings.ru.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/CertificateCommands.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/CertificateCommands.tr.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/CertificateCommands.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/CertificateProviderStrings.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/CertificateProviderStrings.tr.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/CertificateProviderStrings.tr.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/CmsCommands.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/CmsCommands.tr.resx
new file mode 100644
index 00000000000..7af4e1ca60f
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/CmsCommands.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>‘{0}' yolu tek bir dosya sistemi yolunu göstermelidir.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>İleti korunamıyor. Girişte şifrelenmiş içerik yoktu.</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>İleti korunamıyor. Girişte şifrelenmiş içerik yoktu. Şifrelenmiş içerik algılanmadığında özgün içeriği çıktı olarak vermek istiyorsanız '{0}' parametresini belirtin.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/ExecutionPolicyCommands.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/ExecutionPolicyCommands.tr.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/ExecutionPolicyCommands.tr.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/SecureStringCommands.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/SecureStringCommands.tr.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/SecureStringCommands.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/SignatureCommands.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/SignatureCommands.tr.resx
new file mode 100644
index 00000000000..b2ee520becb
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/SignatureCommands.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Kod imzalanamıyor. Belirtilen sertifika kod imzalama için uygun değil.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Kod imzalanamıyor.  Zaman damgası sunucusu URL'si, http://&lt;server url&gt; veya https://&lt;server url&gt; biçiminde tam olarak belirtilmelidir.</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Get-AuthenticodeSignature cmdlet'i dizinleri desteklemez. Bir dosya yolu sağlayıp yeniden deneyin.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0} dosyası bulunamadı.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/tr/UtilsStrings.tr.resx b/src/Microsoft.PowerShell.Security/resources/tr/UtilsStrings.tr.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/tr/UtilsStrings.tr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateCommands.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateCommands.zh-Hans.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateCommands.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateProviderStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateProviderStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CertificateProviderStrings.zh-Hans.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/CmsCommands.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CmsCommands.zh-Hans.resx
new file mode 100644
index 00000000000..cb88f0a137e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/CmsCommands.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>路径“{0}”必须引用单个文件系统路径。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>无法取消保护消息。输入不包含任何加密内容。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>无法取消保护消息。输入不包含任何加密内容。如果希望在未检测到加密内容时输出原始内容，请指定“{0}”参数。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/ExecutionPolicyCommands.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/ExecutionPolicyCommands.zh-Hans.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/ExecutionPolicyCommands.zh-Hans.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/SecureStringCommands.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/SecureStringCommands.zh-Hans.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/SecureStringCommands.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/SignatureCommands.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/SignatureCommands.zh-Hans.resx
new file mode 100644
index 00000000000..63e8b5ea500
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/SignatureCommands.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>无法对代码进行签名。指定的证书不适用于代码签名。</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>无法对代码进行签名。 时间戳服务器 URL 必须以 http://&lt;server url&gt; or https://&lt;server url&gt; 的形式完全限定。</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Get-AuthenticodeSignature cmdlet 不支持目录。提供文件的路径，然后重试。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>找不到文件 {0}。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hans/UtilsStrings.zh-Hans.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hans/UtilsStrings.zh-Hans.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hans/UtilsStrings.zh-Hans.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateCommands.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateCommands.zh-Hant.resx
new file mode 100644
index 00000000000..e89d119031b
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateCommands.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="GetPfxCertPasswordPrompt" xml:space="preserve">
+    <value>Enter password: </value>
+  </data>
+  <data name="NoneOfTheFilesFound" xml:space="preserve">
+    <value>Command cannot find any of the specified files.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>The following file could not be found: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateProviderStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateProviderStrings.zh-Hant.resx
new file mode 100644
index 00000000000..f3b08732974
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CertificateProviderStrings.zh-Hant.resx
@@ -0,0 +1,189 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertProvidername" xml:space="preserve">
+    <value>X509 Certificate Provider</value>
+  </data>
+  <data name="CertificateNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate at path {0}.</value>
+  </data>
+  <data name="CertificateStoreNotFound" xml:space="preserve">
+    <value>Cannot find the X509 certificate store at path {0}.</value>
+  </data>
+  <data name="CertificateStoreLocationNotFound" xml:space="preserve">
+    <value>Cannot find the certificate store because the specified X509 store location {0} is not valid.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Cannot process the path because path {0} is not a valid certificate provider path.</value>
+  </data>
+  <data name="Action_Move" xml:space="preserve">
+    <value>Move certificate</value>
+  </data>
+  <data name="Action_Remove" xml:space="preserve">
+    <value>Remove certificate</value>
+  </data>
+  <data name="Action_RemoveAndDeleteKey" xml:space="preserve">
+    <value>Remove certificate and its private key.</value>
+  </data>
+  <data name="Action_Invoke" xml:space="preserve">
+    <value>Invoke Certificate Manager</value>
+  </data>
+  <data name="MoveItemTemplate" xml:space="preserve">
+      <value>Item: {0} Destination: {1} </value>
+  </data>
+  <data name="CannotMoveContainer" xml:space="preserve">
+      <value>You cannot move a certificate container. </value>
+  </data>
+  <data name="CannotMoveCrossContext" xml:space="preserve">
+      <value>You cannot move a certificate from user store to or from machine. </value>
+  </data>
+  <data name="CannotMoveToSameStore" xml:space="preserve">
+    <value>You cannot move a certificate to the same store. </value>
+  </data>
+  <data name="CannotCreateItem" xml:space="preserve">
+    <value>You cannot create an item other than certificate store. </value>
+  </data>
+  <data name="CannotCreateUserStore" xml:space="preserve">
+    <value>Creating certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="CannotDeleteUserStore" xml:space="preserve">
+    <value>Deleting certificate stores under CurrentUser is not supported. </value>
+  </data>
+  <data name="InvalidDestStore" xml:space="preserve">
+    <value>The destination is not a valid store. </value>
+  </data>
+  <data name="RemoveItemTemplate" xml:space="preserve">
+    <value>Item: {0} </value>
+  </data>
+  <data name="RemoveStoreTemplate" xml:space="preserve">
+    <value>The store {0} is a built-in system store and cannot be deleted.</value>
+  </data>
+  <data name="CannotRemoveContainer" xml:space="preserve">
+    <value>You cannot remove a certificate container. </value>
+  </data>
+  <data name="VerboseNoPrivateKey" xml:space="preserve">
+    <value>Private key skipped. The certificate has no private key association. </value>
+  </data>
+  <data name="UINotAllowed" xml:space="preserve">
+    <value>The operation is on user root store and UI is not allowed. </value>
+  </data>
+  <data name="RemoteErrorMessage" xml:space="preserve">
+    <value>. The following error may be a result of user credentials required on the remote machine. See Enable-WSManCredSSP Cmdlet help on how to enable and use CredSSP for delegation with PowerShell remoting. </value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/CmsCommands.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CmsCommands.zh-Hant.resx
new file mode 100644
index 00000000000..5e5ca7dd828
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/CmsCommands.zh-Hant.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FilePathMustBeFileSystemPath" xml:space="preserve">
+    <value>路徑 '{0}' 必須指向單一檔案系統路徑。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContent" xml:space="preserve">
+    <value>無法解除保護訊息。輸入包含未加密內容。</value>
+  </data>
+  <data name="InputContainedNoEncryptedContentIncludeContext" xml:space="preserve">
+    <value>無法解除保護訊息。輸入包含未加密內容。如果您希望在未偵測到加密內容時輸出原始內容，請指定 '{0}' 參數。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/ExecutionPolicyCommands.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/ExecutionPolicyCommands.zh-Hant.resx
new file mode 100644
index 00000000000..47aa923e787
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/ExecutionPolicyCommands.zh-Hant.resx
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExecutionPolicyOverridden" xml:space="preserve">
+    <value>PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of {0}. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".</value>
+  </data>
+  <data name="ExecutionPolicyOverriddenRecommendedAction" xml:space="preserve">
+    <value>Contact your system administrator.</value>
+  </data>
+  <data name="ListAndScopeSpecified" xml:space="preserve">
+    <value>Cannot get execution policy. Specify only the List or Scope parameters.</value>
+  </data>
+  <data name="CantSetGroupPolicy" xml:space="preserve">
+    <value>Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.</value>
+  </data>
+  <data name="SetExecutionPolicyCaption" xml:space="preserve">
+    <value>Execution Policy Change</value>
+  </data>
+  <data name="SetExecutionPolicyQuery" xml:space="preserve">
+    <value>The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?</value>
+  </data>
+  <data name="SetExecutionPolicyAccessDeniedError" xml:space="preserve">
+    <value>{0}
+To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/SecureStringCommands.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/SecureStringCommands.zh-Hant.resx
new file mode 100644
index 00000000000..c49866d98da
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/SecureStringCommands.zh-Hant.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NewSecureString_Prompt" xml:space="preserve">
+    <value>Enter secret: </value>
+  </data>
+  <data name="ForceRequired" xml:space="preserve">
+    <value>The system cannot protect plain text input. To suppress this warning and convert the plain text to a SecureString, reissue the command specifying the Force parameter. For more information, type: get-help ConvertTo-SecureString.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/SignatureCommands.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/SignatureCommands.zh-Hant.resx
new file mode 100644
index 00000000000..8c55bd7081e
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/SignatureCommands.zh-Hant.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>無法簽署程式碼。指定的憑證不適合程式碼簽署。</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>無法簽署程式碼。 TimeStamp 伺服器 URL 必須使用完整格式，例如 http://&lt;server url&gt; 或 https://&lt;server url&gt;。</value>
+  </data>
+  <data name="CannotRetrieveFromContainer" xml:space="preserve">
+    <value>Get-AuthenticodeSignature Cmdlet 不支援目錄。請提供檔案的路徑，然後再試一次。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>找不到檔案 {0}。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/resources/zh-Hant/UtilsStrings.zh-Hant.resx b/src/Microsoft.PowerShell.Security/resources/zh-Hant/UtilsStrings.zh-Hant.resx
new file mode 100644
index 00000000000..bd0a9c5fb84
--- /dev/null
+++ b/src/Microsoft.PowerShell.Security/resources/zh-Hant/UtilsStrings.zh-Hant.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileSmallerThan4Bytes" xml:space="preserve">
+    <value>Cannot digitally sign file because file {0} is smaller than 4 bytes in size. Files must be at least 4 bytes in order to be digitally signed.</value>
+  </data>
+  <data name="OperationNotSupportedOnPath" xml:space="preserve">
+    <value>Cannot perform the operation because it is not supported on the object found in path {0}.</value>
+  </data>
+  <data name="GetMethodNotFound" xml:space="preserve">
+    <value>Cannot get the ACL because the necessary method, GetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="SetMethodNotFound" xml:space="preserve">
+    <value>Cannot set the ACL because the method that it needs to invoke, SetSecurityDescriptor, does not exist.</value>
+  </data>
+  <data name="MethodInvokeFail" xml:space="preserve">
+    <value>Could not perform operation because an exception was thrown during method invoke.</value>
+  </data>
+  <data name="GetSaclWithCapIdFail" xml:space="preserve">
+    <value>Could not create a SACL with the specified central access policy.</value>
+  </data>
+  <data name="GetEmptySaclFail" xml:space="preserve">
+    <value>Could not create an empty SACL.</value>
+  </data>
+  <data name="GetTokenWithEnabledPrivilegeFail" xml:space="preserve">
+    <value>Could not enable SeSecurityPrivilege.</value>
+  </data>
+  <data name="SetCentralAccessPolicyFail" xml:space="preserve">
+    <value>Could not set central access policy.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyParameters" xml:space="preserve">
+    <value>ClearCentralAccessPolicy and CentralAccessPolicy parameters cannot be used at the same time.</value>
+  </data>
+  <data name="InvalidCentralAccessPolicyIdentifier" xml:space="preserve">
+    <value>Central Access Policy identifier or name is not valid. If specifying an identifier, it must begin with S-1-17. If specifying a name, the policy must be applied on the target machine.</value>
+  </data>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.PowerShell.Security/security/AclCommands.cs b/src/Microsoft.PowerShell.Security/security/AclCommands.cs
index c0994a57a53..e39b296d154 100644
--- a/src/Microsoft.PowerShell.Security/security/AclCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/AclCommands.cs
@@ -207,7 +207,7 @@ public static string GetOwner(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is ObjectSecurity sd))
+            if (instance.BaseObject is not ObjectSecurity sd)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
@@ -246,7 +246,7 @@ public static string GetGroup(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is ObjectSecurity sd))
+            if (instance.BaseObject is not ObjectSecurity sd)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
@@ -291,8 +291,7 @@ public static AuthorizationRuleCollection GetAccess(PSObject instance)
             }
 
             // Get DACL
-            CommonObjectSecurity cos = sd as CommonObjectSecurity;
-            if (cos != null)
+            if (sd is CommonObjectSecurity cos)
             {
                 return cos.GetAccessRules(true, true, typeof(NTAccount));
             }
@@ -326,8 +325,7 @@ public static AuthorizationRuleCollection GetAudit(PSObject instance)
                 PSTraceSource.NewArgumentException(nameof(instance));
             }
 
-            CommonObjectSecurity cos = sd as CommonObjectSecurity;
-            if (cos != null)
+            if (sd is CommonObjectSecurity cos)
             {
                 return cos.GetAuditRules(true, true, typeof(NTAccount));
             }
@@ -572,7 +570,7 @@ public static string GetSddl(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is ObjectSecurity sd))
+            if (instance.BaseObject is not ObjectSecurity sd)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
@@ -625,7 +623,7 @@ public GetAclCommand()
         /// security descriptor.  Default is the current location.
         /// </summary>
         [Parameter(Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "ByPath")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string[] Path
         {
             get
@@ -664,8 +662,8 @@ public PSObject InputObject
         /// security descriptor.  Default is the current location.
         /// </summary>
         [Parameter(ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "ByLiteralPath")]
-        [Alias("PSPath")]
-        [ValidateNotNullOrEmpty()]
+        [Alias("PSPath", "LP")]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] LiteralPath
         {
@@ -687,7 +685,7 @@ public string[] LiteralPath
         /// Gets or sets the audit flag of the command.  This flag
         /// determines if audit rules should also be retrieved.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Audit
         {
             get
@@ -718,7 +716,7 @@ private SwitchParameter AllCentralAccessPolicies
         /// determines whether the information about all central access policies
         /// available on the machine should be displayed.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter AllCentralAccessPolicies
         {
             get
@@ -931,7 +929,7 @@ public PSObject InputObject
         /// security descriptor.
         /// </summary>
         [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "ByLiteralPath")]
-        [Alias("PSPath")]
+        [Alias("PSPath", "LP")]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] LiteralPath
         {
@@ -1027,7 +1025,7 @@ public SwitchParameter ClearCentralAccessPolicy
         /// If true, the security descriptor is also passed
         /// down the output pipeline.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Passthru
         {
             get
diff --git a/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs b/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs
index a86bf657853..4d0cad2d3e9 100644
--- a/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/CatalogCommands.cs
@@ -145,7 +145,7 @@ public NewFileCatalogCommand() : base("New-FileCatalog") { }
         /// <summary>
         /// Catalog version.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public int CatalogVersion
         {
             get
@@ -160,7 +160,7 @@ public int CatalogVersion
         }
 
         // Based on the Catalog version we will decide which hashing Algorithm to use
-        private int catalogVersion = 1;
+        private int catalogVersion = 2;
 
         /// <summary>
         /// Generate the Catalog for the Path.
@@ -223,7 +223,7 @@ public TestFileCatalogCommand() : base("Test-FileCatalog") { }
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Detailed
         {
             get { return detailed; }
@@ -236,7 +236,7 @@ public SwitchParameter Detailed
         /// <summary>
         /// Patterns used to exclude files from DiskPaths and Catalog.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string[] FilesToSkip
         {
             get
diff --git a/src/Microsoft.PowerShell.Security/security/CertificateCommands.cs b/src/Microsoft.PowerShell.Security/security/CertificateCommands.cs
index 4723aa7fbf0..e3a386ee507 100644
--- a/src/Microsoft.PowerShell.Security/security/CertificateCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/CertificateCommands.cs
@@ -44,7 +44,7 @@ public string[] FilePath
         /// certificate.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true, ParameterSetName = "ByLiteralPath")]
-        [Alias("PSPath")]
+        [Alias("PSPath", "LP")]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] LiteralPath
         {
@@ -208,8 +208,11 @@ protected override void ProcessRecord()
 
         private static X509Certificate2 GetCertFromPfxFile(string path, SecureString password)
         {
+            // No overload found in X509CertificateLoader that takes SecureString
+            #pragma warning disable SYSLIB0057
             var cert = new X509Certificate2(path, password, X509KeyStorageFlags.DefaultKeySet);
             return cert;
+            #pragma warning restore SYSLIB0057
         }
     }
 }
diff --git a/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs b/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs
index d0c71e82260..37c687a7770 100644
--- a/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs
+++ b/src/Microsoft.PowerShell.Security/security/CertificateProvider.cs
@@ -26,7 +26,7 @@
 using Dbg = System.Management.Automation;
 using DWORD = System.UInt32;
 using Runspaces = System.Management.Automation.Runspaces;
-using Security = System.Management.Automation.Security;
+using SMASecurity = System.Management.Automation.Security;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -214,9 +214,9 @@ public override string ToString()
             // to differ only by upper/lower case.  If they do, that's really
             // a code bug, and the effect is to just display both strings.
 
-            return string.Equals(_punycodeName, _unicodeName) ?
-                        _punycodeName :
-                        _unicodeName + " (" + _punycodeName + ")";
+            return string.Equals(_punycodeName, _unicodeName, StringComparison.Ordinal)
+                ? _punycodeName
+                : _unicodeName + " (" + _punycodeName + ")";
         }
     }
 
@@ -275,7 +275,7 @@ protected override bool ReleaseHandle()
 
             if (handle != IntPtr.Zero)
             {
-                fResult = Security.NativeMethods.CertCloseStore(handle, 0);
+                fResult = SMASecurity.NativeMethods.CertCloseStore(handle, 0);
                 handle = IntPtr.Zero;
             }
 
@@ -318,25 +318,25 @@ public void Open(bool includeArchivedCerts)
                 _valid = false;
                 _open = false;
 
-                Security.NativeMethods.CertOpenStoreFlags StoreFlags =
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_SHARE_STORE_FLAG |
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_SHARE_CONTEXT_FLAG |
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_OPEN_EXISTING_FLAG |
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_MAXIMUM_ALLOWED_FLAG;
+                SMASecurity.NativeMethods.CertOpenStoreFlags StoreFlags =
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_SHARE_STORE_FLAG |
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_SHARE_CONTEXT_FLAG |
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_OPEN_EXISTING_FLAG |
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_MAXIMUM_ALLOWED_FLAG;
 
                 if (includeArchivedCerts)
                 {
-                    StoreFlags |= Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_ENUM_ARCHIVED_FLAG;
+                    StoreFlags |= SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_ENUM_ARCHIVED_FLAG;
                 }
 
                 switch (_storeLocation.Location)
                 {
                     case StoreLocation.LocalMachine:
-                        StoreFlags |= Security.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
+                        StoreFlags |= SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
                         break;
 
                     case StoreLocation.CurrentUser:
-                        StoreFlags |= Security.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
+                        StoreFlags |= SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
                         break;
 
                     default:
@@ -344,9 +344,9 @@ public void Open(bool includeArchivedCerts)
                         break;
                 }
 
-                IntPtr hCertStore = Security.NativeMethods.CertOpenStore(
-                                Security.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
-                                Security.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
+                IntPtr hCertStore = SMASecurity.NativeMethods.CertOpenStore(
+                                SMASecurity.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
+                                SMASecurity.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
                                 IntPtr.Zero,  // hCryptProv
                                 StoreFlags,
                                 _storeName);
@@ -364,10 +364,10 @@ public void Open(bool includeArchivedCerts)
                                 "UserDS",
                                 StringComparison.OrdinalIgnoreCase))
                 {
-                    if (!Security.NativeMethods.CertControlStore(
+                    if (!SMASecurity.NativeMethods.CertControlStore(
                                 _storeHandle.Handle,
                                 0,
-                                Security.NativeMethods.CertControlStoreType.CERT_STORE_CTRL_AUTO_RESYNC,
+                                SMASecurity.NativeMethods.CertControlStoreType.CERT_STORE_CTRL_AUTO_RESYNC,
                                 IntPtr.Zero))
                     {
                         _storeHandle = null;
@@ -391,12 +391,12 @@ public IntPtr GetNextCert(IntPtr certContext)
             if (!_open)
             {
                 throw Marshal.GetExceptionForHR(
-                                    Security.NativeMethods.CRYPT_E_NOT_FOUND);
+                                    SMASecurity.NativeMethods.CRYPT_E_NOT_FOUND);
             }
 
             if (Valid)
             {
-                certContext = Security.NativeMethods.CertEnumCertificatesInStore(
+                certContext = SMASecurity.NativeMethods.CertEnumCertificatesInStore(
                                                     _storeHandle.Handle,
                                                     certContext);
             }
@@ -415,18 +415,18 @@ public IntPtr GetCertByName(string Name)
             if (!_open)
             {
                 throw Marshal.GetExceptionForHR(
-                                    Security.NativeMethods.CRYPT_E_NOT_FOUND);
+                                    SMASecurity.NativeMethods.CRYPT_E_NOT_FOUND);
             }
 
             if (Valid)
             {
                 if (DownLevelHelper.HashLookupSupported())
                 {
-                    certContext = Security.NativeMethods.CertFindCertificateInStore(
+                    certContext = SMASecurity.NativeMethods.CertFindCertificateInStore(
                             _storeHandle.Handle,
-                            Security.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
+                            SMASecurity.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
                             0,                                // dwFindFlags
-                            Security.NativeMethods.CertFindType.CERT_FIND_HASH_STR,
+                            SMASecurity.NativeMethods.CertFindType.CERT_FIND_HASH_STR,
                             Name,
                             IntPtr.Zero);                     // pPrevCertContext
                 }
@@ -464,7 +464,7 @@ public IntPtr GetCertByName(string Name)
 
         public void FreeCert(IntPtr certContext)
         {
-            Security.NativeMethods.CertFreeCertificateContext(certContext);
+            SMASecurity.NativeMethods.CertFreeCertificateContext(certContext);
         }
 
         /// <summary>
@@ -556,6 +556,7 @@ internal enum CertificateProviderItem
     [CmdletProvider("Certificate", ProviderCapabilities.ShouldProcess)]
     [OutputType(typeof(string), typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.ResolvePath)]
     [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PushLocation)]
+    [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PopLocation)]
     [OutputType(typeof(Microsoft.PowerShell.Commands.X509StoreLocation), typeof(X509Certificate2), ProviderCmdlet = ProviderCmdlet.GetItem)]
     [OutputType(typeof(X509Store), typeof(X509Certificate2), ProviderCmdlet = ProviderCmdlet.GetChildItem)]
     public sealed class CertificateProvider : NavigationCmdletProvider, ICmdletProviderSupportsHelp
@@ -723,16 +724,11 @@ protected override void RemoveItem(
                 ThrowInvalidOperation(errorId, message);
             }
 
-            if (DynamicParameters != null)
+            if (DynamicParameters != null && DynamicParameters is ProviderRemoveItemDynamicParameters dp)
             {
-                ProviderRemoveItemDynamicParameters dp =
-                    DynamicParameters as ProviderRemoveItemDynamicParameters;
-                if (dp != null)
+                if (dp.DeleteKey)
                 {
-                    if (dp.DeleteKey)
-                    {
-                        fDeleteKey = true;
-                    }
+                    fDeleteKey = true;
                 }
             }
 
@@ -887,9 +883,8 @@ protected override void MoveItem(
                 object store = GetItemAtPath(destination, false, out isDestContainer);
 
                 X509Certificate2 certificate = cert as X509Certificate2;
-                X509NativeStore certstore = store as X509NativeStore;
 
-                if (certstore != null)
+                if (store is X509NativeStore certstore)
                 {
                     certstore.Open(true);
 
@@ -925,7 +920,7 @@ protected override void MoveItem(
         /// <param name="path">
         /// The path of the certificate store to create.
         /// </param>
-        ///<param name="type">
+        /// <param name="type">
         /// Ignored.
         /// Only support store.
         /// </param>
@@ -973,15 +968,15 @@ protected override void NewItem(
                 ThrowInvalidOperation(errorId, message);
             }
 
-            const Security.NativeMethods.CertOpenStoreFlags StoreFlags =
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_CREATE_NEW_FLAG |
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_MAXIMUM_ALLOWED_FLAG |
-                    Security.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
+            const SMASecurity.NativeMethods.CertOpenStoreFlags StoreFlags =
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_CREATE_NEW_FLAG |
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_MAXIMUM_ALLOWED_FLAG |
+                    SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
 
             // Create new store
-            IntPtr hCertStore = Security.NativeMethods.CertOpenStore(
-                                Security.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
-                                Security.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
+            IntPtr hCertStore = SMASecurity.NativeMethods.CertOpenStore(
+                                SMASecurity.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
+                                SMASecurity.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
                                 IntPtr.Zero,  // hCryptProv
                                 StoreFlags,
                                 pathElements[1]);
@@ -992,7 +987,7 @@ protected override void NewItem(
             else // free native store handle
             {
                 bool fResult = false;
-                fResult = Security.NativeMethods.CertCloseStore(hCertStore, 0);
+                fResult = SMASecurity.NativeMethods.CertCloseStore(hCertStore, 0);
             }
 
             X509Store outStore = new(pathElements[1], StoreLocation.LocalMachine);
@@ -1067,23 +1062,18 @@ protected override bool HasChildItems(string path)
 
             if ((item != null) && isContainer)
             {
-                X509StoreLocation storeLocation = item as X509StoreLocation;
-                if (storeLocation != null)
+                if (item is X509StoreLocation storeLocation)
                 {
                     result = storeLocation.StoreNames.Count > 0;
                 }
-                else
+                else if (item is X509NativeStore store)
                 {
-                    X509NativeStore store = item as X509NativeStore;
-                    if (store != null)
+                    store.Open(IncludeArchivedCerts());
+                    IntPtr certContext = store.GetFirstCert();
+                    if (certContext != IntPtr.Zero)
                     {
-                        store.Open(IncludeArchivedCerts());
-                        IntPtr certContext = store.GetFirstCert();
-                        if (certContext != IntPtr.Zero)
-                        {
-                            store.FreeCert(certContext);
-                            result = true;
-                        }
+                        store.FreeCert(certContext);
+                        result = true;
                     }
                 }
             }
@@ -1258,20 +1248,15 @@ protected override void GetItem(string path)
                         return;
                     }
 
-                    X509StoreLocation storeLocation = item as X509StoreLocation;
-                    if (storeLocation != null)  // store location
+                    if (item is X509StoreLocation storeLocation)  // store location
                     {
                         WriteItemObject(item, path, isContainer);
                     }
-                    else // store
+                    else if (item is X509NativeStore store) // store
                     {
-                        X509NativeStore store = item as X509NativeStore;
-                        if (store != null)
-                        {
-                            // create X509Store
-                            X509Store outStore = new(store.StoreName, store.Location.Location);
-                            WriteItemObject(outStore, path, isContainer);
-                        }
+                        // create X509Store
+                        X509Store outStore = new(store.StoreName, store.Location.Location);
+                        WriteItemObject(outStore, path, isContainer);
                     }
                 }
             }
@@ -1567,7 +1552,7 @@ private static string NormalizePath(string path)
 
                 string[] elts = GetPathElements(path);
 
-                path = string.Join("\\", elts);
+                path = string.Join('\\', elts);
             }
 
             return path;
@@ -1615,8 +1600,8 @@ private static string[] GetPathElements(string path)
         private void DoDeleteKey(IntPtr pProvInfo)
         {
             IntPtr hProv = IntPtr.Zero;
-            Security.NativeMethods.CRYPT_KEY_PROV_INFO keyProvInfo =
-                Marshal.PtrToStructure<Security.NativeMethods.CRYPT_KEY_PROV_INFO>(pProvInfo);
+            SMASecurity.NativeMethods.CRYPT_KEY_PROV_INFO keyProvInfo =
+                Marshal.PtrToStructure<SMASecurity.NativeMethods.CRYPT_KEY_PROV_INFO>(pProvInfo);
 
             IntPtr hWnd = DetectUIHelper.GetOwnerWindow(Host);
 
@@ -1624,33 +1609,33 @@ private void DoDeleteKey(IntPtr pProvInfo)
             {
                 if (hWnd != IntPtr.Zero)
                 {
-                    if (Security.NativeMethods.CryptAcquireContext(
+                    if (SMASecurity.NativeMethods.CryptAcquireContext(
                         ref hProv,
                         keyProvInfo.pwszContainerName,
                         keyProvInfo.pwszProvName,
                         (int)keyProvInfo.dwProvType,
-                        (uint)Security.NativeMethods.ProviderFlagsEnum.CRYPT_VERIFYCONTEXT))
+                        (uint)SMASecurity.NativeMethods.ProviderFlagsEnum.CRYPT_VERIFYCONTEXT))
                     {
                         unsafe
                         {
                             void* pWnd = hWnd.ToPointer();
-                            Security.NativeMethods.CryptSetProvParam(
+                            SMASecurity.NativeMethods.CryptSetProvParam(
                                 hProv,
-                                Security.NativeMethods.ProviderParam.PP_CLIENT_HWND,
+                                SMASecurity.NativeMethods.ProviderParam.PP_CLIENT_HWND,
                                 &pWnd,
                                 0);
-                            Security.NativeMethods.CryptReleaseContext(hProv, 0);
+                            SMASecurity.NativeMethods.CryptReleaseContext(hProv, 0);
                         }
                     }
                 }
 
-                if (!Security.NativeMethods.CryptAcquireContext(
+                if (!SMASecurity.NativeMethods.CryptAcquireContext(
                                 ref hProv,
                                 keyProvInfo.pwszContainerName,
                                 keyProvInfo.pwszProvName,
                                 (int)keyProvInfo.dwProvType,
-                                keyProvInfo.dwFlags | (uint)Security.NativeMethods.ProviderFlagsEnum.CRYPT_DELETEKEYSET |
-                                (hWnd == IntPtr.Zero ? (uint)Security.NativeMethods.ProviderFlagsEnum.CRYPT_SILENT : 0)))
+                                keyProvInfo.dwFlags | (uint)SMASecurity.NativeMethods.ProviderFlagsEnum.CRYPT_DELETEKEYSET |
+                                (hWnd == IntPtr.Zero ? (uint)SMASecurity.NativeMethods.ProviderFlagsEnum.CRYPT_SILENT : 0)))
                 {
                     ThrowErrorRemoting(Marshal.GetLastWin32Error());
                 }
@@ -1663,21 +1648,21 @@ private void DoDeleteKey(IntPtr pProvInfo)
                 IntPtr hCNGProv = IntPtr.Zero;
                 IntPtr hCNGKey = IntPtr.Zero;
 
-                if ((keyProvInfo.dwFlags & (uint)Security.NativeMethods.ProviderFlagsEnum.CRYPT_MACHINE_KEYSET) != 0)
+                if ((keyProvInfo.dwFlags & (uint)SMASecurity.NativeMethods.ProviderFlagsEnum.CRYPT_MACHINE_KEYSET) != 0)
                 {
-                    cngKeyFlag = (uint)Security.NativeMethods.NCryptDeletKeyFlag.NCRYPT_MACHINE_KEY_FLAG;
+                    cngKeyFlag = (uint)SMASecurity.NativeMethods.NCryptDeletKeyFlag.NCRYPT_MACHINE_KEY_FLAG;
                 }
 
                 if (hWnd == IntPtr.Zero ||
-                    (keyProvInfo.dwFlags & (uint)Security.NativeMethods.ProviderFlagsEnum.CRYPT_SILENT) != 0)
+                    (keyProvInfo.dwFlags & (uint)SMASecurity.NativeMethods.ProviderFlagsEnum.CRYPT_SILENT) != 0)
                 {
-                    cngKeyFlag |= (uint)Security.NativeMethods.NCryptDeletKeyFlag.NCRYPT_SILENT_FLAG;
+                    cngKeyFlag |= (uint)SMASecurity.NativeMethods.NCryptDeletKeyFlag.NCRYPT_SILENT_FLAG;
                 }
 
                 int stat = 0;
                 try
                 {
-                    stat = Security.NativeMethods.NCryptOpenStorageProvider(
+                    stat = SMASecurity.NativeMethods.NCryptOpenStorageProvider(
                                     ref hCNGProv,
                                     keyProvInfo.pwszProvName,
                                     0);
@@ -1686,7 +1671,7 @@ private void DoDeleteKey(IntPtr pProvInfo)
                         ThrowErrorRemoting(stat);
                     }
 
-                    stat = Security.NativeMethods.NCryptOpenKey(
+                    stat = SMASecurity.NativeMethods.NCryptOpenKey(
                                         hCNGProv,
                                         ref hCNGKey,
                                         keyProvInfo.pwszContainerName,
@@ -1697,21 +1682,21 @@ private void DoDeleteKey(IntPtr pProvInfo)
                         ThrowErrorRemoting(stat);
                     }
 
-                    if ((cngKeyFlag & (uint)Security.NativeMethods.NCryptDeletKeyFlag.NCRYPT_SILENT_FLAG) != 0)
+                    if ((cngKeyFlag & (uint)SMASecurity.NativeMethods.NCryptDeletKeyFlag.NCRYPT_SILENT_FLAG) != 0)
                     {
                         unsafe
                         {
                             void* pWnd = hWnd.ToPointer();
-                            Security.NativeMethods.NCryptSetProperty(
+                            SMASecurity.NativeMethods.NCryptSetProperty(
                                 hCNGProv,
-                                Security.NativeMethods.NCRYPT_WINDOW_HANDLE_PROPERTY,
+                                SMASecurity.NativeMethods.NCRYPT_WINDOW_HANDLE_PROPERTY,
                                 &pWnd,
                                 sizeof(void*),
                                 0); // dwFlags
                         }
                     }
 
-                    stat = Security.NativeMethods.NCryptDeleteKey(hCNGKey, 0);
+                    stat = SMASecurity.NativeMethods.NCryptDeleteKey(hCNGKey, 0);
                     if (stat != 0)
                     {
                         ThrowErrorRemoting(stat);
@@ -1722,10 +1707,10 @@ private void DoDeleteKey(IntPtr pProvInfo)
                 finally
                 {
                     if (hCNGProv != IntPtr.Zero)
-                        result = Security.NativeMethods.NCryptFreeObject(hCNGProv);
+                        result = SMASecurity.NativeMethods.NCryptFreeObject(hCNGProv);
 
                     if (hCNGKey != IntPtr.Zero)
-                        result = Security.NativeMethods.NCryptFreeObject(hCNGKey);
+                        result = SMASecurity.NativeMethods.NCryptFreeObject(hCNGKey);
                 }
             }
         }
@@ -1741,7 +1726,7 @@ private void DoDeleteKey(IntPtr pProvInfo)
         private void RemoveCertStore(string storeName, bool fDeleteKey, string sourcePath)
         {
             // if recurse is true, remove every cert in the store
-            IntPtr localName = Security.NativeMethods.CryptFindLocalizedName(storeName);
+            IntPtr localName = SMASecurity.NativeMethods.CryptFindLocalizedName(storeName);
             string[] pathElements = GetPathElements(sourcePath);
             if (localName == IntPtr.Zero)//not find, we can remove
             {
@@ -1766,17 +1751,17 @@ private void RemoveCertStore(string storeName, bool fDeleteKey, string sourcePat
                     certContext = store.GetNextCert(certContext);
                 }
                 // remove the cert store
-                const Security.NativeMethods.CertOpenStoreFlags StoreFlags =
-                        Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_READONLY_FLAG |
-                        Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_OPEN_EXISTING_FLAG |
-                        Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG |
-                        Security.NativeMethods.CertOpenStoreFlags.CERT_STORE_DELETE_FLAG |
-                        Security.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
+                const SMASecurity.NativeMethods.CertOpenStoreFlags StoreFlags =
+                        SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_READONLY_FLAG |
+                        SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_OPEN_EXISTING_FLAG |
+                        SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG |
+                        SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_STORE_DELETE_FLAG |
+                        SMASecurity.NativeMethods.CertOpenStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
 
                 // delete store
-                IntPtr hCertStore = Security.NativeMethods.CertOpenStore(
-                                Security.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
-                                Security.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
+                IntPtr hCertStore = SMASecurity.NativeMethods.CertOpenStore(
+                                SMASecurity.NativeMethods.CertOpenStoreProvider.CERT_STORE_PROV_SYSTEM,
+                                SMASecurity.NativeMethods.CertOpenStoreEncodingType.X509_ASN_ENCODING,
                                 IntPtr.Zero,  // hCryptProv
                                 StoreFlags,
                                 storeName);
@@ -1848,17 +1833,17 @@ private void DoRemove(X509Certificate2 cert, bool fDeleteKey, bool fMachine, str
                 if (fDeleteKey)
                 {
                     // it is fine if below call fails
-                    if (Security.NativeMethods.CertGetCertificateContextProperty(
+                    if (SMASecurity.NativeMethods.CertGetCertificateContextProperty(
                                 cert.Handle,
-                                Security.NativeMethods.CertPropertyId.CERT_KEY_PROV_INFO_PROP_ID,
+                                SMASecurity.NativeMethods.CertPropertyId.CERT_KEY_PROV_INFO_PROP_ID,
                                 IntPtr.Zero,
                                 ref provSize))
                     {
                         pProvInfo = Marshal.AllocHGlobal((int)provSize);
 
-                        if (Security.NativeMethods.CertGetCertificateContextProperty(
+                        if (SMASecurity.NativeMethods.CertGetCertificateContextProperty(
                                 cert.Handle,
-                                Security.NativeMethods.CertPropertyId.CERT_KEY_PROV_INFO_PROP_ID,
+                                SMASecurity.NativeMethods.CertPropertyId.CERT_KEY_PROV_INFO_PROP_ID,
                                 pProvInfo,
                                 ref provSize))
                         {
@@ -1878,8 +1863,8 @@ private void DoRemove(X509Certificate2 cert, bool fDeleteKey, bool fMachine, str
                 // do remove certificate
                 // should not use the original handle
 
-                if (!Security.NativeMethods.CertDeleteCertificateFromStore(
-                            Security.NativeMethods.CertDuplicateCertificateContext(cert.Handle)))
+                if (!SMASecurity.NativeMethods.CertDeleteCertificateFromStore(
+                            SMASecurity.NativeMethods.CertDuplicateCertificateContext(cert.Handle)))
                 {
                     throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
                 }
@@ -1887,8 +1872,8 @@ private void DoRemove(X509Certificate2 cert, bool fDeleteKey, bool fMachine, str
                 // commit the change to physical store
                 if (sourcePath.Contains("UserDS"))
                 {
-                    Security.NativeMethods.CERT_CONTEXT context =
-                        Marshal.PtrToStructure<Security.NativeMethods.CERT_CONTEXT>(cert.Handle);
+                    SMASecurity.NativeMethods.CERT_CONTEXT context =
+                        Marshal.PtrToStructure<SMASecurity.NativeMethods.CERT_CONTEXT>(cert.Handle);
 
                     CommitUserDS(context.hCertStore);
                 }
@@ -1915,10 +1900,10 @@ private void DoRemove(X509Certificate2 cert, bool fDeleteKey, bool fMachine, str
         /// <returns>No return.</returns>
         private static void CommitUserDS(IntPtr storeHandle)
         {
-            if (!Security.NativeMethods.CertControlStore(
+            if (!SMASecurity.NativeMethods.CertControlStore(
                                         storeHandle,
                                         0,
-                                        Security.NativeMethods.CertControlStoreType.CERT_STORE_CTRL_COMMIT,
+                                        SMASecurity.NativeMethods.CertControlStoreType.CERT_STORE_CTRL_COMMIT,
                                         IntPtr.Zero))
             {
                 throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
@@ -1940,7 +1925,7 @@ private void DoMove(string destination, X509Certificate2 cert, X509NativeStore s
             IntPtr outCert = IntPtr.Zero;
 
             // duplicate cert first
-            dupCert = Security.NativeMethods.CertDuplicateCertificateContext(cert.Handle);
+            dupCert = SMASecurity.NativeMethods.CertDuplicateCertificateContext(cert.Handle);
 
             if (dupCert == IntPtr.Zero)
             {
@@ -1948,16 +1933,16 @@ private void DoMove(string destination, X509Certificate2 cert, X509NativeStore s
             }
             else
             {
-                if (!Security.NativeMethods.CertAddCertificateContextToStore(
+                if (!SMASecurity.NativeMethods.CertAddCertificateContextToStore(
                                              store.StoreHandle,
                                              cert.Handle,
-                                             (uint)Security.NativeMethods.AddCertificateContext.CERT_STORE_ADD_ALWAYS,
+                                             (uint)SMASecurity.NativeMethods.AddCertificateContext.CERT_STORE_ADD_ALWAYS,
                                              ref outCert))
                 {
                     throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
                 }
 
-                if (!Security.NativeMethods.CertDeleteCertificateFromStore(dupCert))
+                if (!SMASecurity.NativeMethods.CertDeleteCertificateFromStore(dupCert))
                 {
                     throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
                 }
@@ -1973,7 +1958,7 @@ private void DoMove(string destination, X509Certificate2 cert, X509NativeStore s
 
             if (sourcePath.Contains("UserDS"))
             {
-                Security.NativeMethods.CERT_CONTEXT context = Marshal.PtrToStructure<Security.NativeMethods.CERT_CONTEXT>(cert.Handle);
+                SMASecurity.NativeMethods.CERT_CONTEXT context = Marshal.PtrToStructure<SMASecurity.NativeMethods.CERT_CONTEXT>(cert.Handle);
 
                 CommitUserDS(context.hCertStore);
             }
@@ -2545,10 +2530,7 @@ private X509NativeStore GetStore(string storePath,
                 }
             }
 
-            if (s_storeCache == null)
-            {
-                s_storeCache = new X509NativeStore(storeLocation, storeName);
-            }
+            s_storeCache ??= new X509NativeStore(storeLocation, storeName);
 
             return s_storeCache;
         }
@@ -2646,51 +2628,46 @@ private CertificateFilterInfo GetFilter()
         {
             CertificateFilterInfo filter = null;
 
-            if (DynamicParameters != null)
+            if (DynamicParameters != null && DynamicParameters is CertificateProviderDynamicParameters dp)
             {
-                CertificateProviderDynamicParameters dp =
-                    DynamicParameters as CertificateProviderDynamicParameters;
-                if (dp != null)
+                if (dp.CodeSigningCert)
                 {
-                    if (dp.CodeSigningCert)
-                    {
-                        filter = new CertificateFilterInfo();
-                        filter.Purpose = CertificatePurpose.CodeSigning;
-                    }
+                    filter = new CertificateFilterInfo();
+                    filter.Purpose = CertificatePurpose.CodeSigning;
+                }
 
-                    if (dp.DocumentEncryptionCert)
-                    {
-                        filter ??= new CertificateFilterInfo();
-                        filter.Purpose = CertificatePurpose.DocumentEncryption;
-                    }
+                if (dp.DocumentEncryptionCert)
+                {
+                    filter ??= new CertificateFilterInfo();
+                    filter.Purpose = CertificatePurpose.DocumentEncryption;
+                }
 
-                    if (dp.DnsName != null)
-                    {
-                        filter ??= new CertificateFilterInfo();
-                        filter.DnsName = new WildcardPattern(dp.DnsName, WildcardOptions.IgnoreCase);
-                    }
+                if (dp.DnsName != null)
+                {
+                    filter ??= new CertificateFilterInfo();
+                    filter.DnsName = new WildcardPattern(dp.DnsName, WildcardOptions.IgnoreCase);
+                }
 
-                    if (dp.Eku != null)
+                if (dp.Eku != null)
+                {
+                    filter ??= new CertificateFilterInfo();
+                    filter.Eku = new List<WildcardPattern>();
+                    foreach (var pattern in dp.Eku)
                     {
-                        filter ??= new CertificateFilterInfo();
-                        filter.Eku = new List<WildcardPattern>();
-                        foreach (var pattern in dp.Eku)
-                        {
-                            filter.Eku.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
-                        }
+                        filter.Eku.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
                     }
+                }
 
-                    if (dp.ExpiringInDays >= 0)
-                    {
-                        filter ??= new CertificateFilterInfo();
-                        filter.Expiring = DateTime.Now.AddDays(dp.ExpiringInDays);
-                    }
+                if (dp.ExpiringInDays >= 0)
+                {
+                    filter ??= new CertificateFilterInfo();
+                    filter.Expiring = DateTime.Now.AddDays(dp.ExpiringInDays);
+                }
 
-                    if (dp.SSLServerAuthentication)
-                    {
-                        filter ??= new CertificateFilterInfo();
-                        filter.SSLServerAuthentication = true;
-                    }
+                if (dp.SSLServerAuthentication)
+                {
+                    filter ??= new CertificateFilterInfo();
+                    filter.SSLServerAuthentication = true;
                 }
             }
 
@@ -3151,9 +3128,9 @@ public static bool ReadSendAsTrustedIssuerProperty(X509Certificate2 cert)
                 int propSize = 0;
                 // try to get the property
                 // it is fine if fail for not there
-                if (Security.NativeMethods.CertGetCertificateContextProperty(
+                if (SMASecurity.NativeMethods.CertGetCertificateContextProperty(
                                 cert.Handle,
-                                Security.NativeMethods.CertPropertyId.CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID,
+                                SMASecurity.NativeMethods.CertPropertyId.CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID,
                                 IntPtr.Zero,
                                 ref propSize))
                 {
@@ -3164,7 +3141,7 @@ public static bool ReadSendAsTrustedIssuerProperty(X509Certificate2 cert)
                 {
                     // if fail
                     int error = Marshal.GetLastWin32Error();
-                    if (error != Security.NativeMethods.CRYPT_E_NOT_FOUND)
+                    if (error != SMASecurity.NativeMethods.CRYPT_E_NOT_FOUND)
                     {
                         throw new System.ComponentModel.Win32Exception(error);
                     }
@@ -3183,7 +3160,7 @@ public static void WriteSendAsTrustedIssuerProperty(X509Certificate2 cert, strin
             if (DownLevelHelper.TrustedIssuerSupported())
             {
                 IntPtr propertyPtr = IntPtr.Zero;
-                Security.NativeMethods.CRYPT_DATA_BLOB dataBlob = new();
+                SMASecurity.NativeMethods.CRYPT_DATA_BLOB dataBlob = new();
                 dataBlob.cbData = 0;
                 dataBlob.pbData = IntPtr.Zero;
                 X509Certificate certFromStore = null;
@@ -3230,9 +3207,9 @@ public static void WriteSendAsTrustedIssuerProperty(X509Certificate2 cert, strin
                     }
 
                     // set property
-                    if (!Security.NativeMethods.CertSetCertificateContextProperty(
+                    if (!SMASecurity.NativeMethods.CertSetCertificateContextProperty(
                                 certFromStore != null ? certFromStore.Handle : cert.Handle,
-                                Security.NativeMethods.CertPropertyId.CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID,
+                                SMASecurity.NativeMethods.CertPropertyId.CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID,
                                 0,
                                 propertyPtr))
                     {
@@ -3249,7 +3226,7 @@ public static void WriteSendAsTrustedIssuerProperty(X509Certificate2 cert, strin
             }
             else
             {
-                Marshal.ThrowExceptionForHR(Security.NativeMethods.NTE_NOT_SUPPORTED);
+                Marshal.ThrowExceptionForHR(SMASecurity.NativeMethods.NTE_NOT_SUPPORTED);
             }
         }
 
@@ -3313,17 +3290,13 @@ public EnhancedKeyUsageProperty(X509Certificate2 cert)
             foreach (X509Extension extension in cert.Extensions)
             {
                 // Filter to the OID for EKU
-                if (extension.Oid.Value == "2.5.29.37")
+                if (extension.Oid.Value == "2.5.29.37" && extension is X509EnhancedKeyUsageExtension ext)
                 {
-                    X509EnhancedKeyUsageExtension ext = extension as X509EnhancedKeyUsageExtension;
-                    if (ext != null)
+                    OidCollection oids = ext.EnhancedKeyUsages;
+                    foreach (Oid oid in oids)
                     {
-                        OidCollection oids = ext.EnhancedKeyUsages;
-                        foreach (Oid oid in oids)
-                        {
-                            EnhancedKeyUsageRepresentation ekuString = new(oid.FriendlyName, oid.Value);
-                            _ekuList.Add(ekuString);
-                        }
+                        EnhancedKeyUsageRepresentation ekuString = new(oid.FriendlyName, oid.Value);
+                        _ekuList.Add(ekuString);
                     }
                 }
             }
@@ -3336,20 +3309,30 @@ public EnhancedKeyUsageProperty(X509Certificate2 cert)
     public sealed class DnsNameProperty
     {
         private readonly List<DnsNameRepresentation> _dnsList = new();
-        private readonly System.Globalization.IdnMapping idnMapping = new();
+        private readonly IdnMapping idnMapping = new();
 
-        private const string dnsNamePrefix = "DNS Name=";
         private const string distinguishedNamePrefix = "CN=";
 
         /// <summary>
         /// Get property of DnsNameList.
         /// </summary>
-        public List<DnsNameRepresentation> DnsNameList
+        public List<DnsNameRepresentation> DnsNameList => _dnsList;
+
+        private DnsNameRepresentation GetDnsNameRepresentation(string dnsName)
         {
-            get
+            string unicodeName;
+
+            try
             {
-                return _dnsList;
+                unicodeName = idnMapping.GetUnicode(dnsName);
             }
+            catch (ArgumentException)
+            {
+                // The name is not valid Punycode, assume it's valid ASCII.
+                unicodeName = dnsName;
+            }
+
+            return new DnsNameRepresentation(dnsName, unicodeName);
         }
 
         /// <summary>
@@ -3357,61 +3340,32 @@ public List<DnsNameRepresentation> DnsNameList
         /// </summary>
         public DnsNameProperty(X509Certificate2 cert)
         {
-            string name;
-            string unicodeName;
-            DnsNameRepresentation dnsName;
             _dnsList = new List<DnsNameRepresentation>();
 
             // extract DNS name from subject distinguish name
             // if it exists and does not contain a comma
             // a comma, indicates it is not a DNS name
-            if (cert.Subject.StartsWith(distinguishedNamePrefix, System.StringComparison.OrdinalIgnoreCase) &&
+            if (cert.Subject.StartsWith(distinguishedNamePrefix, StringComparison.OrdinalIgnoreCase) &&
                 !cert.Subject.Contains(','))
             {
-                name = cert.Subject.Substring(distinguishedNamePrefix.Length);
-                try
-                {
-                    unicodeName = idnMapping.GetUnicode(name);
-                }
-                catch (System.ArgumentException)
-                {
-                    // The name is not valid punyCode, assume it's valid ascii.
-                    unicodeName = name;
-                }
-
-                dnsName = new DnsNameRepresentation(name, unicodeName);
+                string parsedSubjectDistinguishedDnsName = cert.Subject.Substring(distinguishedNamePrefix.Length);
+                DnsNameRepresentation dnsName = GetDnsNameRepresentation(parsedSubjectDistinguishedDnsName);
                 _dnsList.Add(dnsName);
             }
 
+            // Extract DNS names from SAN extensions
             foreach (X509Extension extension in cert.Extensions)
             {
-                // Filter to the OID for Subject Alternative Name
-                if (extension.Oid.Value == "2.5.29.17")
+                if (extension is X509SubjectAlternativeNameExtension sanExtension)
                 {
-                    string[] names = extension.Format(true).Split(Environment.NewLine);
-                    foreach (string nameLine in names)
+                    foreach (string dnsNameEntry in sanExtension.EnumerateDnsNames())
                     {
-                        // Get the part after 'DNS Name='
-                        if (nameLine.StartsWith(dnsNamePrefix, System.StringComparison.InvariantCultureIgnoreCase))
-                        {
-                            name = nameLine.Substring(dnsNamePrefix.Length);
-                            try
-                            {
-                                unicodeName = idnMapping.GetUnicode(name);
-                            }
-                            catch (System.ArgumentException)
-                            {
-                                // The name is not valid punyCode, assume it's valid ascii.
-                                unicodeName = name;
-                            }
-
-                            dnsName = new DnsNameRepresentation(name, unicodeName);
+                        DnsNameRepresentation dnsName = GetDnsNameRepresentation(dnsNameEntry);
 
-                            // Only add the name if it is not the same as an existing name.
-                            if (!_dnsList.Contains(dnsName))
-                            {
-                                _dnsList.Add(dnsName);
-                            }
+                        // Only add the name if it is not the same as an existing name.
+                        if (!_dnsList.Contains(dnsName))
+                        {
+                            _dnsList.Add(dnsName);
                         }
                     }
                 }
@@ -3470,7 +3424,6 @@ internal static IntPtr GetOwnerWindow(PSHost host)
             return IntPtr.Zero;
         }
 #else
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private static IntPtr hWnd = IntPtr.Zero;
         private static bool firstRun = true;
 
@@ -3486,12 +3439,12 @@ internal static IntPtr GetOwnerWindow(PSHost host)
 
                     if (hWnd == IntPtr.Zero)
                     {
-                        hWnd = Security.NativeMethods.GetConsoleWindow();
+                        hWnd = SMASecurity.NativeMethods.GetConsoleWindow();
                     }
 
                     if (hWnd == IntPtr.Zero)
                     {
-                        hWnd = Security.NativeMethods.GetDesktopWindow();
+                        hWnd = SMASecurity.NativeMethods.GetDesktopWindow();
                     }
                 }
             }
@@ -3505,8 +3458,7 @@ private static bool IsUIAllowed(PSHost host)
                 return false;
 
             uint SessionId;
-            uint ProcessId = (uint)System.Diagnostics.Process.GetCurrentProcess().Id;
-            if (!Security.NativeMethods.ProcessIdToSessionId(ProcessId, out SessionId))
+            if (!SMASecurity.NativeMethods.ProcessIdToSessionId((uint)Environment.ProcessId, out SessionId))
                 return false;
 
             if (SessionId == 0)
@@ -3549,20 +3501,19 @@ internal static class Crypt32Helpers
         /// <summary>
         /// Get a list of store names at the specified location.
         /// </summary>
-        [ArchitectureSensitive]
         internal static List<string> GetStoreNamesAtLocation(StoreLocation location)
         {
-            Security.NativeMethods.CertStoreFlags locationFlag =
-                Security.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
+            SMASecurity.NativeMethods.CertStoreFlags locationFlag =
+                SMASecurity.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
 
             switch (location)
             {
                 case StoreLocation.CurrentUser:
-                    locationFlag = Security.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
+                    locationFlag = SMASecurity.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_CURRENT_USER;
                     break;
 
                 case StoreLocation.LocalMachine:
-                    locationFlag = Security.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
+                    locationFlag = SMASecurity.NativeMethods.CertStoreFlags.CERT_SYSTEM_STORE_LOCAL_MACHINE;
                     break;
 
                 default:
@@ -3570,7 +3521,7 @@ internal static List<string> GetStoreNamesAtLocation(StoreLocation location)
                     break;
             }
 
-            Security.NativeMethods.CertEnumSystemStoreCallBackProto callBack = new(CertEnumSystemStoreCallBack);
+            SMASecurity.NativeMethods.CertEnumSystemStoreCallBackProto callBack = new(CertEnumSystemStoreCallBack);
 
             // Return a new list to avoid synchronization issues.
 
@@ -3579,7 +3530,7 @@ internal static List<string> GetStoreNamesAtLocation(StoreLocation location)
             {
                 storeNames.Clear();
 
-                Security.NativeMethods.CertEnumSystemStore(locationFlag, IntPtr.Zero,
+                SMASecurity.NativeMethods.CertEnumSystemStore(locationFlag, IntPtr.Zero,
                                                   IntPtr.Zero, callBack);
                 foreach (string name in storeNames)
                 {
diff --git a/src/Microsoft.PowerShell.Security/security/CmsCommands.cs b/src/Microsoft.PowerShell.Security/security/CmsCommands.cs
index 9fde804d220..5e8e6d19b46 100644
--- a/src/Microsoft.PowerShell.Security/security/CmsCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/CmsCommands.cs
@@ -35,8 +35,8 @@ public CmsMessageRecipient[] To
         /// Gets or sets the content of the CMS Message.
         /// </summary>
         [Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true, ParameterSetName = "ByContent")]
-        [AllowNull()]
-        [AllowEmptyString()]
+        [AllowNull]
+        [AllowEmptyString]
         public PSObject Content
         {
             get;
@@ -202,8 +202,8 @@ public sealed class GetCmsMessageCommand : PSCmdlet
         /// Gets or sets the content of the CMS Message.
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = "ByContent")]
-        [AllowNull()]
-        [AllowEmptyString()]
+        [AllowNull]
+        [AllowEmptyString]
         public string Content
         {
             get;
@@ -308,8 +308,7 @@ protected override void EndProcessing()
             }
 
             // Extract out the bytes and Base64 decode them
-            int startIndex, endIndex;
-            byte[] contentBytes = CmsUtils.RemoveAsciiArmor(actualContent, CmsUtils.BEGIN_CMS_SIGIL, CmsUtils.END_CMS_SIGIL, out startIndex, out endIndex);
+            byte[] contentBytes = CmsUtils.RemoveAsciiArmor(actualContent, CmsUtils.BEGIN_CMS_SIGIL, CmsUtils.END_CMS_SIGIL, out int _, out int _);
             if (contentBytes == null)
             {
                 ErrorRecord error = new(
@@ -351,8 +350,8 @@ public sealed class UnprotectCmsMessageCommand : PSCmdlet
         /// Gets or sets the content of the CMS Message.
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "ByContent")]
-        [AllowNull()]
-        [AllowEmptyString()]
+        [AllowNull]
+        [AllowEmptyString]
         public string Content
         {
             get;
@@ -398,7 +397,7 @@ public string LiteralPath
         /// Determines whether to include the decrypted content in its original context,
         /// rather than just output the decrypted content itself.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter IncludeContext
         {
             get;
diff --git a/src/Microsoft.PowerShell.Security/security/CredentialCommands.cs b/src/Microsoft.PowerShell.Security/security/CredentialCommands.cs
index 33238c0ca6c..cc354ee1531 100644
--- a/src/Microsoft.PowerShell.Security/security/CredentialCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/CredentialCommands.cs
@@ -9,7 +9,7 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// Defines the implementation of the 'get-credential' cmdlet.
     /// The get-credential Cmdlet establishes a credential object called a
-    /// Msh credential, by pairing a given username with
+    /// PSCredential, by pairing a given username with
     /// a prompted password. That credential object can then be used for other
     /// operations involving security.
     /// </summary>
@@ -33,7 +33,7 @@ public sealed class GetCredentialCommand : PSCmdlet
         /// </summary>
         [Parameter(Position = 0, ParameterSetName = credentialSet)]
         [ValidateNotNull]
-        [Credential()]
+        [Credential]
         public PSCredential Credential { get; set; }
 
         /// <summary>
@@ -55,7 +55,7 @@ public string Message
         /// Gets and sets the user supplied username to be used while creating the PSCredential.
         /// </summary>
         [Parameter(Position = 0, Mandatory = false, ParameterSetName = messageSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string UserName
         {
             get { return _userName; }
diff --git a/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs b/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs
index 6333541e242..29179a7046d 100644
--- a/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs
@@ -239,7 +239,7 @@ public ConvertToSecureStringCommand() : base("ConvertTo-SecureString") { }
         /// Gets or sets the unsecured string to be imported.
         /// </summary>
         [Parameter(Position = 0, ValueFromPipeline = true, Mandatory = true)]
-        public String String
+        public string String
         {
             get
             {
@@ -311,8 +311,7 @@ protected override void ProcessRecord()
                 byte[] iv = null;
 
                 // If this is a V2 package
-                if (String.IndexOf(SecureStringHelper.SecureStringExportHeader,
-                        StringComparison.OrdinalIgnoreCase) == 0)
+                if (String.StartsWith(SecureStringHelper.SecureStringExportHeader, StringComparison.OrdinalIgnoreCase))
                 {
                     try
                     {
@@ -326,7 +325,7 @@ protected override void ProcessRecord()
                         // representation, then parse it into its components.
                         byte[] inputBytes = Convert.FromBase64String(remainingData);
                         string dataPackage = System.Text.Encoding.Unicode.GetString(inputBytes);
-                        string[] dataElements = dataPackage.Split(Utils.Separators.Pipe);
+                        string[] dataElements = dataPackage.Split('|');
 
                         if (dataElements.Length == 3)
                         {
@@ -359,8 +358,7 @@ protected override void ProcessRecord()
                 }
                 else
                 {
-                    importedString = new SecureString();
-                    foreach (char currentChar in String) { importedString.AppendChar(currentChar); }
+                    importedString = SecureStringHelper.FromPlainTextString(String);
                 }
             }
             catch (ArgumentException e)
diff --git a/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs b/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs
index 5d5bb06b667..53a662ca4f9 100644
--- a/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs
+++ b/src/Microsoft.PowerShell.Security/security/SignatureCommands.cs
@@ -44,7 +44,7 @@ public string[] FilePath
         /// digital signature.
         /// </summary>
         [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "ByLiteralPath")]
-        [Alias("PSPath")]
+        [Alias("PSPath", "LP")]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] LiteralPath
         {
@@ -294,7 +294,7 @@ protected override Signature PerformAction(string filePath)
         /// </returns>
         protected override Signature PerformAction(string sourcePathOrExtension, byte[] content)
         {
-            return SignatureHelper.GetSignature(sourcePathOrExtension, System.Text.Encoding.Unicode.GetString(content));
+            return SignatureHelper.GetSignature(sourcePathOrExtension, content);
         }
     }
 
@@ -374,10 +374,7 @@ public string TimestampServer
 
             set
             {
-                if (value == null)
-                {
-                    value = string.Empty;
-                }
+                value ??= string.Empty;
 
                 _timestampServer = value;
             }
@@ -404,12 +401,12 @@ public string HashAlgorithm
             }
         }
 
-        private string _hashAlgorithm = null;
+        private string _hashAlgorithm = "SHA256";
 
         /// <summary>
         /// Property that sets force parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get
diff --git a/src/Microsoft.PowerShell.Security/security/certificateproviderexceptions.cs b/src/Microsoft.PowerShell.Security/security/certificateproviderexceptions.cs
index efd205e5769..6d602d2d99f 100644
--- a/src/Microsoft.PowerShell.Security/security/certificateproviderexceptions.cs
+++ b/src/Microsoft.PowerShell.Security/security/certificateproviderexceptions.cs
@@ -12,7 +12,6 @@ namespace Microsoft.PowerShell.Commands
     /// Defines the base class for exceptions thrown by the
     /// certificate provider when the specified item cannot be located.
     /// </summary>
-    [Serializable]
     public class CertificateProviderItemNotFoundException : SystemException
     {
         /// <summary>
@@ -60,10 +59,11 @@ public CertificateProviderItemNotFoundException(string message,
         /// <param name="context">
         /// The streaming context.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected CertificateProviderItemNotFoundException(SerializationInfo info,
-                                            StreamingContext context)
-            : base(info, context)
+                                                        StreamingContext context)
         {
+            throw new NotSupportedException();
         }
 
         /// <summary>
@@ -83,7 +83,6 @@ internal CertificateProviderItemNotFoundException(Exception innerException)
     /// Defines the exception thrown by the certificate provider
     /// when the specified X509 certificate cannot be located.
     /// </summary>
-    [Serializable]
     public class CertificateNotFoundException
               : CertificateProviderItemNotFoundException
     {
@@ -134,10 +133,11 @@ public CertificateNotFoundException(string message,
         /// <param name="context">
         /// The streaming context.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected CertificateNotFoundException(SerializationInfo info,
                                             StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         /// <summary>
@@ -157,7 +157,6 @@ internal CertificateNotFoundException(Exception innerException)
     /// Defines the exception thrown by the certificate provider
     /// when the specified X509 store cannot be located.
     /// </summary>
-    [Serializable]
     public class CertificateStoreNotFoundException
               : CertificateProviderItemNotFoundException
     {
@@ -170,6 +169,23 @@ public CertificateStoreNotFoundException()
         {
         }
 
+        /// <summary>
+        /// Initializes a new instance of the CertificateStoreNotFoundException
+        /// class with the specified serialization information, and context.
+        /// </summary>
+        /// <param name="info">
+        /// The serialization information.
+        /// </param>
+        /// <param name="context">
+        /// The streaming context.
+        /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
+        protected CertificateStoreNotFoundException(SerializationInfo info,
+                                            StreamingContext context)
+        {
+            throw new NotSupportedException();
+        }
+
         /// <summary>
         /// Initializes a new instance of the CertificateStoreNotFoundException
         /// class with the specified message.
@@ -198,22 +214,6 @@ public CertificateStoreNotFoundException(string message,
         {
         }
 
-        /// <summary>
-        /// Initializes a new instance of the CertificateStoreNotFoundException
-        /// class with the specified serialization information, and context.
-        /// </summary>
-        /// <param name="info">
-        /// The serialization information.
-        /// </param>
-        /// <param name="context">
-        /// The streaming context.
-        /// </param>
-        protected CertificateStoreNotFoundException(SerializationInfo info,
-                                            StreamingContext context)
-            : base(info, context)
-        {
-        }
-
         /// <summary>
         /// Initializes a new instance of the CertificateStoreNotFoundException
         /// class with the specified inner exception.
@@ -231,7 +231,6 @@ internal CertificateStoreNotFoundException(Exception innerException)
     /// Defines the exception thrown by the certificate provider
     /// when the specified X509 store location cannot be located.
     /// </summary>
-    [Serializable]
     public class CertificateStoreLocationNotFoundException
               : CertificateProviderItemNotFoundException
     {
@@ -244,6 +243,23 @@ public CertificateStoreLocationNotFoundException()
         {
         }
 
+        /// <summary>
+        /// Initializes a new instance of the CertificateStoreLocationNotFoundException
+        /// class with the specified serialization information, and context.
+        /// </summary>
+        /// <param name="info">
+        /// The serialization information.
+        /// </param>
+        /// <param name="context">
+        /// The streaming context.
+        /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
+        protected CertificateStoreLocationNotFoundException(SerializationInfo info,
+                                                        StreamingContext context)
+        {
+            throw new NotSupportedException();
+        }
+
         /// <summary>
         /// Initializes a new instance of the CertificateStoreLocationNotFoundException
         /// class with the specified message.
@@ -272,22 +288,6 @@ public CertificateStoreLocationNotFoundException(string message,
         {
         }
 
-        /// <summary>
-        /// Initializes a new instance of the CertificateStoreLocationNotFoundException
-        /// class with the specified serialization information, and context.
-        /// </summary>
-        /// <param name="info">
-        /// The serialization information.
-        /// </param>
-        /// <param name="context">
-        /// The streaming context.
-        /// </param>
-        protected CertificateStoreLocationNotFoundException(SerializationInfo info,
-                                            StreamingContext context)
-            : base(info, context)
-        {
-        }
-
         /// <summary>
         /// Initializes a new instance of the CertificateStoreLocationNotFoundException
         /// class with the specified inner exception.
diff --git a/src/Microsoft.PowerShell.Security/singleshell/installer/MshSecurityMshSnapin.cs b/src/Microsoft.PowerShell.Security/singleshell/installer/MshSecurityMshSnapin.cs
deleted file mode 100644
index efc4ec63daa..00000000000
--- a/src/Microsoft.PowerShell.Security/singleshell/installer/MshSecurityMshSnapin.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Configuration.Install;
-using System.IO;
-using System.Management.Automation;
-using System.Reflection;
-
-using Microsoft.Win32;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// MshSecurityMshSnapin (or MshSecurityMshSnapinInstaller) is a class for facilitating registry
-    /// of necessary information for monad security mshsnapin.
-    ///
-    /// This class will be built with monad security dll.
-    /// </summary>
-    [RunInstaller(true)]
-    public sealed class PSSecurityPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of this class.
-        /// </summary>
-        public PSSecurityPSSnapIn()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// Get name of this mshsnapin.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return RegistryStrings.SecurityMshSnapinName;
-            }
-        }
-
-        /// <summary>
-        /// Get the default vendor string for this mshsnapin.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for vendor. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "SecurityMshSnapInResources,Vendor";
-            }
-        }
-
-        /// <summary>
-        /// Get the default description string for this mshsnapin.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This PSSnapIn contains cmdlets to manage MSH security.";
-            }
-        }
-
-        /// <summary>
-        /// Get resource information for description. This is a string of format: resourceBaseName,resourceName.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "SecurityMshSnapInResources,Description";
-            }
-        }
-    }
-}
diff --git a/src/Microsoft.WSMan.Management/ConfigProvider.cs b/src/Microsoft.WSMan.Management/ConfigProvider.cs
index 9e3d9bd05b1..55141379faa 100644
--- a/src/Microsoft.WSMan.Management/ConfigProvider.cs
+++ b/src/Microsoft.WSMan.Management/ConfigProvider.cs
@@ -62,7 +62,7 @@ public sealed class WSManConfigProvider : NavigationCmdletProvider, ICmdletProvi
         string ICmdletProviderSupportsHelp.GetHelpMaml(string helpItemName, string path)
         {
             // Get the leaf node from the path for which help is requested.
-            int ChildIndex = path.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase);
+            int ChildIndex = path.LastIndexOf('\\');
             if (ChildIndex == -1)
             {
                 // Means we are at host level, where no new-item is supported. Return empty string.
@@ -617,7 +617,10 @@ protected override void GetItem(string path)
                 SessionObjCache.TryGetValue(host, out sessionobj);
 
                 XmlDocument xmlResource = FindResourceValue(sessionobj, uri, null);
-                if (xmlResource == null) { return; }
+                if (xmlResource == null)
+                {
+                    return;
+                }
 
                 // if endswith '\', removes it.
                 if (path.EndsWith(WSManStringLiterals.DefaultPathSeparator.ToString(), StringComparison.OrdinalIgnoreCase))
@@ -1021,20 +1024,15 @@ protected override void SetItem(string path, object value)
                         strPathChk = strPathChk + WSManStringLiterals.containerPlugin + WSManStringLiterals.DefaultPathSeparator;
                         if (path.EndsWith(strPathChk + currentpluginname, StringComparison.OrdinalIgnoreCase))
                         {
-                            if (WSManStringLiterals.ConfigRunAsUserName.Equals(ChildName, StringComparison.OrdinalIgnoreCase))
+                            if (WSManStringLiterals.ConfigRunAsUserName.Equals(ChildName, StringComparison.OrdinalIgnoreCase)  && value is PSCredential runAsCredentials)
                             {
-                                PSCredential runAsCredentials = value as PSCredential;
-
-                                if (runAsCredentials != null)
-                                {
-                                    // UserName
-                                    value = runAsCredentials.UserName;
+                                // UserName
+                                value = runAsCredentials.UserName;
 
-                                    pluginConfiguration.UpdateOneConfiguration(
-                                        ".",
-                                        WSManStringLiterals.ConfigRunAsPasswordName,
-                                        GetStringFromSecureString(runAsCredentials.Password));
-                                }
+                                pluginConfiguration.UpdateOneConfiguration(
+                                    ".",
+                                    WSManStringLiterals.ConfigRunAsPasswordName,
+                                    GetStringFromSecureString(runAsCredentials.Password));
                             }
 
                             if (WSManStringLiterals.ConfigRunAsPasswordName.Equals(ChildName, StringComparison.OrdinalIgnoreCase))
@@ -1301,8 +1299,7 @@ protected override void SetItem(string path, object value)
                                     }
                                 }
 
-                                WSManProviderSetItemDynamicParameters dynParams = DynamicParameters as WSManProviderSetItemDynamicParameters;
-                                if (dynParams != null)
+                                if (DynamicParameters is WSManProviderSetItemDynamicParameters dynParams)
                                 {
                                     if (dynParams.Concatenate)
                                     {
@@ -1965,9 +1962,8 @@ protected override object NewItemDynamicParameters(string path, string itemTypeN
         private void NewItemCreateComputerConnection(string Name)
         {
             helper = new WSManHelper(this);
-            WSManProviderNewItemComputerParameters dynParams = DynamicParameters as WSManProviderNewItemComputerParameters;
             string parametersetName = "ComputerName";
-            if (dynParams != null)
+            if (DynamicParameters is WSManProviderNewItemComputerParameters dynParams)
             {
                 if (dynParams.ConnectionURI != null)
                 {
@@ -2064,8 +2060,7 @@ private void NewItemPluginOrPluginChild(object sessionobj, string path, string h
             // to create a new plugin
             if (path.EndsWith(strPathChk, StringComparison.OrdinalIgnoreCase))
             {
-                WSManProviderNewItemPluginParameters niParams = DynamicParameters as WSManProviderNewItemPluginParameters;
-                if (niParams != null)
+                if (DynamicParameters is WSManProviderNewItemPluginParameters niParams)
                 {
                     if (string.IsNullOrEmpty(niParams.File))
                     {
@@ -2155,8 +2150,7 @@ private void NewItemPluginOrPluginChild(object sessionobj, string path, string h
                     strPathChk += WSManStringLiterals.containerResources;
                     if (path.EndsWith(strPathChk, StringComparison.OrdinalIgnoreCase))
                     {
-                        WSManProviderNewItemResourceParameters niParams = DynamicParameters as WSManProviderNewItemResourceParameters;
-                        if (niParams != null)
+                        if (DynamicParameters is WSManProviderNewItemResourceParameters niParams)
                         {
                             mshObj.Properties.Add(new PSNoteProperty("Resource", niParams.ResourceUri));
                             mshObj.Properties.Add(new PSNoteProperty("Capability", niParams.Capability));
@@ -3413,10 +3407,7 @@ private static string NormalizePath(string path, string host)
         /// </exception>
         private PSObject GetItemValue(string path)
         {
-            if (string.IsNullOrEmpty(path) || (path.Length == 0))
-            {
-                throw new ArgumentNullException(path);
-            }
+            ArgumentException.ThrowIfNullOrEmpty(path);
 
             // if endswith '\', removes it.
             if (path.EndsWith(WSManStringLiterals.DefaultPathSeparator.ToString(), StringComparison.OrdinalIgnoreCase))
@@ -5059,9 +5050,9 @@ private static ArrayList ProcessPluginSecurityLevel(ArrayList arrSecurity, XmlDo
         /// <param name="ResourceURI">Resource URI for the XML.</param>
         /// <param name="host">Name of the Host.</param>
         /// <param name="Operation">Type of Operation.</param>
-        ///<param name="resources">List of Resources.</param>
-        ///<param name="securities">List of Securities</param>
-        ///<param name="initParams">List of initialization parameters.</param>
+        /// <param name="resources">List of Resources.</param>
+        /// <param name="securities">List of Securities</param>
+        /// <param name="initParams">List of initialization parameters.</param>
         /// <returns>An Configuration XML, ready to send to server.</returns>
         private static string ConstructPluginXml(PSObject objinputparam, string ResourceURI, string host, string Operation, ArrayList resources, ArrayList securities, ArrayList initParams)
         {
@@ -5193,10 +5184,9 @@ private object ValidateAndGetUserObject(string configurationName, object value)
         /// <param name="propertyValue">Value to append.</param>
         private static string GetStringFromSecureString(object propertyValue)
         {
-            SecureString value = propertyValue as SecureString;
             string passwordValueToAdd = string.Empty;
 
-            if (value != null)
+            if (propertyValue is SecureString value)
             {
                 IntPtr ptr = Marshal.SecureStringToBSTR(value);
                 passwordValueToAdd = Marshal.PtrToStringAuto(ptr);
@@ -5607,15 +5597,15 @@ public string ApplicationName
         [Parameter]
         [ValidateNotNullOrEmpty]
         [Parameter(ParameterSetName = "nameSet")]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "UseSSL".
@@ -5766,7 +5756,7 @@ public string File
         /// Parameter for RunAs credentials for a Plugin.
         /// </summary>
         [ValidateNotNull]
-        [Parameter()]
+        [Parameter]
         public PSCredential RunAsCredential
         {
             get { return this.runAsCredentials; }
@@ -5779,7 +5769,7 @@ public PSCredential RunAsCredential
         /// <summary>
         /// Parameter for Plugin Host Process configuration (Shared or Separate).
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter UseSharedProcess
         {
             get { return this.sharedHost; }
@@ -5792,7 +5782,7 @@ public SwitchParameter UseSharedProcess
         /// <summary>
         /// Parameter for Auto Restart configuration for Plugin.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter AutoRestart
         {
             get { return this.autoRestart; }
@@ -5805,7 +5795,7 @@ public SwitchParameter AutoRestart
         /// <summary>
         /// Parameter for Idle timeout for HostProcess.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public uint? ProcessIdleTimeoutSec
         {
             get
@@ -5946,7 +5936,7 @@ public string Issuer
         /// <summary>
         /// Parameter Subject.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [ValidateNotNullOrEmpty]
         public string Subject
         {
@@ -6191,7 +6181,7 @@ public class WSManProviderSetItemDynamicParameters
         /// <summary>
         /// Parameter Concatenate.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Concatenate
         {
             get { return _concatenate; }
diff --git a/src/Microsoft.WSMan.Management/CredSSP.cs b/src/Microsoft.WSMan.Management/CredSSP.cs
index cd5e6d3fc4d..a8457ab5bc2 100644
--- a/src/Microsoft.WSMan.Management/CredSSP.cs
+++ b/src/Microsoft.WSMan.Management/CredSSP.cs
@@ -200,7 +200,8 @@ private void DisableServerSideSettings()
                     return;
                 }
 
-                string inputXml = string.Format(CultureInfo.InvariantCulture,
+                string inputXml = string.Format(
+                    CultureInfo.InvariantCulture,
                     @"<cfg:Auth xmlns:cfg=""{0}""><cfg:CredSSP>false</cfg:CredSSP></cfg:Auth>",
                     helper.Service_CredSSP_XMLNmsp);
 
@@ -389,6 +390,7 @@ protected override void BeginProcessing()
     /// authentication is achieved via a trusted X509 certificate or Kerberos.
     /// </summary>
     [Cmdlet(VerbsLifecycle.Enable, "WSManCredSSP", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096719")]
+    [OutputType(typeof(XmlElement))]
     [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cred")]
     [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SSP")]
     public class EnableWSManCredSSPCommand : WSManCredSSPCommandBase, IDisposable/*, IDynamicParameters*/
@@ -411,7 +413,7 @@ public string[] DelegateComputer
         /// <summary>
         /// Property that sets force parameter.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get { return force; }
@@ -512,6 +514,7 @@ private void EnableClientSideSettings()
                 try
                 {
                     XmlDocument xmldoc = new XmlDocument();
+
                     // push the xml string with credssp enabled
                     xmldoc.LoadXml(m_SessionObj.Put(helper.CredSSP_RUri, newxmlcontent, 0));
 
@@ -591,9 +594,11 @@ private void EnableServerSideSettings()
                 try
                 {
                     XmlDocument xmldoc = new XmlDocument();
-                    string newxmlcontent = string.Format(CultureInfo.InvariantCulture,
+                    string newxmlcontent = string.Format(
+                        CultureInfo.InvariantCulture,
                         @"<cfg:Auth xmlns:cfg=""{0}""><cfg:CredSSP>true</cfg:CredSSP></cfg:Auth>",
                         helper.Service_CredSSP_XMLNmsp);
+
                     // push the xml string with credssp enabled
                     xmldoc.LoadXml(m_SessionObj.Put(helper.Service_CredSSP_Uri, newxmlcontent, 0));
                     WriteObject(xmldoc.FirstChild);
@@ -736,6 +741,7 @@ private void UpdateGPORegistrySettings(string applicationname, string[] delegate
     [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cred")]
     [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SSP")]
     [Cmdlet(VerbsCommon.Get, "WSManCredSSP", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096838")]
+    [OutputType(typeof(string))]
     public class GetWSManCredSSPCommand : PSCmdlet, IDisposable
     {
         #region private
diff --git a/src/Microsoft.WSMan.Management/CurrentConfigurations.cs b/src/Microsoft.WSMan.Management/CurrentConfigurations.cs
index 0129554c30b..3182c04c535 100644
--- a/src/Microsoft.WSMan.Management/CurrentConfigurations.cs
+++ b/src/Microsoft.WSMan.Management/CurrentConfigurations.cs
@@ -11,7 +11,7 @@ namespace Microsoft.WSMan.Management
     /// Class that queries the server and gets current configurations.
     /// Also provides a generic way to update the configurations.
     /// </summary>
-    internal class CurrentConfigurations
+    internal sealed class CurrentConfigurations
     {
         /// <summary>
         /// Prefix used to add NameSpace of root element to namespace manager.
@@ -61,10 +61,7 @@ public XmlDocument RootDocument
         /// <param name="serverSession">Current server session.</param>
         public CurrentConfigurations(IWSManSession serverSession)
         {
-            if (serverSession == null)
-            {
-                throw new ArgumentNullException(nameof(serverSession));
-            }
+            ArgumentNullException.ThrowIfNull(serverSession);
 
             this.rootDocument = new XmlDocument();
             this.serverSession = serverSession;
@@ -79,10 +76,7 @@ public CurrentConfigurations(IWSManSession serverSession)
         /// <returns>False, if operation failed.</returns>
         public bool RefreshCurrentConfiguration(string responseOfGet)
         {
-            if (string.IsNullOrEmpty(responseOfGet))
-            {
-                throw new ArgumentNullException(nameof(responseOfGet));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(responseOfGet);
 
             this.rootDocument.LoadXml(responseOfGet);
             this.documentElement = this.rootDocument.DocumentElement;
@@ -98,13 +92,10 @@ public bool RefreshCurrentConfiguration(string responseOfGet)
         /// Issues a PUT request with the ResourceUri provided.
         /// </summary>
         /// <param name="resourceUri">Resource URI to use.</param>
-        /// <returns>False, if operation is not succesful.</returns>
+        /// <returns>False, if operation is not successful.</returns>
         public void PutConfigurationOnServer(string resourceUri)
         {
-            if (string.IsNullOrEmpty(resourceUri))
-            {
-                throw new ArgumentNullException(nameof(resourceUri));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(resourceUri);
 
             this.serverSession.Put(resourceUri, this.rootDocument.InnerXml, 0);
         }
@@ -117,10 +108,7 @@ public void PutConfigurationOnServer(string resourceUri)
         /// <param name="pathToNodeFromRoot">Path with namespace to the node from Root element. Must not end with '/'.</param>
         public void RemoveOneConfiguration(string pathToNodeFromRoot)
         {
-            if (pathToNodeFromRoot == null)
-            {
-                throw new ArgumentNullException(nameof(pathToNodeFromRoot));
-            }
+            ArgumentNullException.ThrowIfNull(pathToNodeFromRoot);
 
             XmlNode nodeToRemove =
                 this.documentElement.SelectSingleNode(
@@ -150,20 +138,9 @@ public void RemoveOneConfiguration(string pathToNodeFromRoot)
         /// <param name="configurationValue">Value of the configurations.</param>
         public void UpdateOneConfiguration(string pathToNodeFromRoot, string configurationName, string configurationValue)
         {
-            if (pathToNodeFromRoot == null)
-            {
-                throw new ArgumentNullException(nameof(pathToNodeFromRoot));
-            }
-
-            if (string.IsNullOrEmpty(configurationName))
-            {
-                throw new ArgumentNullException(nameof(configurationName));
-            }
-
-            if (configurationValue == null)
-            {
-                throw new ArgumentNullException(nameof(configurationValue));
-            }
+            ArgumentNullException.ThrowIfNull(pathToNodeFromRoot);
+            ArgumentException.ThrowIfNullOrEmpty(configurationName);
+            ArgumentNullException.ThrowIfNull(configurationValue);
 
             XmlNode nodeToUpdate =
                 this.documentElement.SelectSingleNode(
@@ -195,10 +172,7 @@ public void UpdateOneConfiguration(string pathToNodeFromRoot, string configurati
         /// <returns>Value of the Node, or Null if no node present.</returns>
         public string GetOneConfiguration(string pathFromRoot)
         {
-            if (pathFromRoot == null)
-            {
-                throw new ArgumentNullException(nameof(pathFromRoot));
-            }
+            ArgumentNullException.ThrowIfNull(pathFromRoot);
 
             XmlNode requiredNode =
                 this.documentElement.SelectSingleNode(
diff --git a/src/Microsoft.WSMan.Management/Interop.cs b/src/Microsoft.WSMan.Management/Interop.cs
index 6685770b0ef..3abb938a572 100644
--- a/src/Microsoft.WSMan.Management/Interop.cs
+++ b/src/Microsoft.WSMan.Management/Interop.cs
@@ -173,7 +173,7 @@ public enum AuthenticationMechanism
     [ComImport]
     [TypeLibType((short)4304)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -255,7 +255,7 @@ string Error
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -312,7 +312,7 @@ string Password
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -336,7 +336,7 @@ string CertificateThumbprint
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -386,7 +386,7 @@ void SetProxy(int accessType,
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -450,7 +450,7 @@ string Error
     [TypeLibType((short)4304)]
     [SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -706,7 +706,7 @@ string Error
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -734,18 +734,19 @@ public interface IWSManResourceLocator
         [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings")]
         string ResourceUri
         {
-            // IDL: HRESULT resourceUri ([out, retval] BSTR* ReturnValue);
+            // IDL: HRESULT resourceUri (BSTR value);
+            [SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1212:PropertyAccessorsMustFollowOrder", Justification = "COM interface defines put_ before get_.")]
             [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "resource")]
             [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings")]
             [DispId(1)]
-            [return: MarshalAs(UnmanagedType.BStr)]
-            get;
+            set;
 
-            // IDL: HRESULT resourceUri (BSTR value);
+            // IDL: HRESULT resourceUri ([out, retval] BSTR* ReturnValue);
             [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "resource")]
             [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings")]
             [DispId(1)]
-            set;
+            [return: MarshalAs(UnmanagedType.BStr)]
+            get;
         }
 
         /// <summary><para><c>AddSelector</c> method of <c>IWSManResourceLocator</c> interface.  </para><para>Add selector to resource locator</para></summary>
@@ -818,14 +819,16 @@ string FragmentDialect
 
         int MustUnderstandOptions
         {
-            // IDL: HRESULT MustUnderstandOptions ([out, retval] long* ReturnValue);
-
-            [DispId(7)]
-            get;
             // IDL: HRESULT MustUnderstandOptions (long value);
 
+            [SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1212:PropertyAccessorsMustFollowOrder", Justification = "COM interface defines put_ before get_.")]
             [DispId(7)]
             set;
+
+            // IDL: HRESULT MustUnderstandOptions ([out, retval] long* ReturnValue);
+
+            [DispId(7)]
+            get;
         }
 
         /// <summary><para><c>ClearOptions</c> method of <c>IWSManResourceLocator</c> interface.  </para><para>Clear all options</para></summary>
@@ -860,7 +863,7 @@ string Error
     [ComImport]
     [TypeLibType((short)4288)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
@@ -1005,7 +1008,7 @@ int Timeout
     [ComImport]
     [TypeLibType((short)400)]
 #if CORECLR
-    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 #else
     [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
 #endif
diff --git a/src/Microsoft.WSMan.Management/InvokeWSManAction.cs b/src/Microsoft.WSMan.Management/InvokeWSManAction.cs
index 36f65e52705..da92a680ab3 100644
--- a/src/Microsoft.WSMan.Management/InvokeWSManAction.cs
+++ b/src/Microsoft.WSMan.Management/InvokeWSManAction.cs
@@ -24,6 +24,7 @@ namespace Microsoft.WSMan.Management
     /// -SelectorSet {Name=Spooler}
     /// </summary>
     [Cmdlet(VerbsLifecycle.Invoke, "WSManAction", DefaultParameterSetName = "URI", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096843")]
+    [OutputType(typeof(XmlElement))]
     public class InvokeWSManActionCommand : AuthenticatingWSManCommand, IDisposable
     {
         /// <summary>
@@ -146,15 +147,15 @@ public Hashtable OptionSet
         /// </summary>
         [Parameter(ParameterSetName = "ComputerName")]
         [ValidateNotNullOrEmpty]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "SelectorSet".
diff --git a/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj b/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj
index 84fc158cc0f..5dc59c5ecef 100644
--- a/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj
+++ b/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj
@@ -10,15 +10,13 @@
     <ProjectReference Include="..\System.Management.Automation\System.Management.Automation.csproj" />
     <ProjectReference Include="..\Microsoft.WSMan.Runtime\Microsoft.WSMan.Runtime.csproj" />
     <!-- the following package(s) are from https://github.com/dotnet/corefx -->
-    <PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.0-preview.2.21154.6" />
+    <PackageReference Include="System.ServiceProcess.ServiceController" Version="11.0.0-preview.6.26359.118" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
   <ItemGroup>
-    <Compile Remove="WsManSnapin.cs" />
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
   </ItemGroup>
 
 </Project>
diff --git a/src/Microsoft.WSMan.Management/NewWSManSession.cs b/src/Microsoft.WSMan.Management/NewWSManSession.cs
index 30959f3ced5..09b22af9924 100644
--- a/src/Microsoft.WSMan.Management/NewWSManSession.cs
+++ b/src/Microsoft.WSMan.Management/NewWSManSession.cs
@@ -26,6 +26,7 @@ namespace Microsoft.WSMan.Management
     /// Connect-WSMan.
     /// </summary>
     [Cmdlet(VerbsCommon.New, "WSManSessionOption", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096845")]
+    [OutputType(typeof(SessionOption))]
     public class NewWSManSessionOptionCommand : PSCmdlet
     {
         /// <summary>
@@ -170,8 +171,8 @@ public SwitchParameter SkipRevocationCheck
         /// </summary>
         [Parameter]
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SPN")]
-        [ValidateRange(0, Int32.MaxValue)]
-        public Int32 SPNPort
+        [ValidateRange(0, int.MaxValue)]
+        public int SPNPort
         {
             get
             {
@@ -184,7 +185,7 @@ public Int32 SPNPort
             }
         }
 
-        private Int32 spnport;
+        private int spnport;
 
         /// <summary>
         /// The following is the definition of the input parameter "Timeout".
@@ -192,8 +193,8 @@ public Int32 SPNPort
         /// </summary>
         [Parameter]
         [Alias("OperationTimeoutMSec")]
-        [ValidateRange(0, Int32.MaxValue)]
-        public Int32 OperationTimeout
+        [ValidateRange(0, int.MaxValue)]
+        public int OperationTimeout
         {
             get
             {
@@ -206,7 +207,7 @@ public Int32 OperationTimeout
             }
         }
 
-        private Int32 operationtimeout;
+        private int operationtimeout;
 
         /// <summary>
         /// The following is the definition of the input parameter "UnEncrypted".
diff --git a/src/Microsoft.WSMan.Management/PingWSMan.cs b/src/Microsoft.WSMan.Management/PingWSMan.cs
index a04167a0f1b..88b443a6ef0 100644
--- a/src/Microsoft.WSMan.Management/PingWSMan.cs
+++ b/src/Microsoft.WSMan.Management/PingWSMan.cs
@@ -23,6 +23,7 @@ namespace Microsoft.WSMan.Management
     /// service is running.
     /// </summary>
     [Cmdlet(VerbsDiagnostic.Test, "WSMan", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2097114")]
+    [OutputType(typeof(XmlElement))]
     public class TestWSManCommand : AuthenticatingWSManCommand, IDisposable
     {
         /// <summary>
@@ -95,15 +96,15 @@ public override AuthenticationMechanism Authentication
         /// </summary>
         [Parameter(ParameterSetName = "ComputerName")]
         [ValidateNotNullOrEmpty]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "UseSSL".
diff --git a/src/Microsoft.WSMan.Management/Set-QuickConfig.cs b/src/Microsoft.WSMan.Management/Set-QuickConfig.cs
index c318ea76477..9ad9e39c332 100644
--- a/src/Microsoft.WSMan.Management/Set-QuickConfig.cs
+++ b/src/Microsoft.WSMan.Management/Set-QuickConfig.cs
@@ -30,6 +30,7 @@ namespace Microsoft.WSMan.Management
     /// 4. Enable firewall exception for WS-Management traffic.
     /// </summary>
     [Cmdlet(VerbsCommon.Set, "WSManQuickConfig", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2097112")]
+    [OutputType(typeof(string))]
     public class SetWSManQuickConfigCommand : PSCmdlet, IDisposable
     {
         /// <summary>
@@ -55,7 +56,7 @@ public SwitchParameter UseSSL
         /// Property that sets force parameter. This will allow
         /// configuring WinRM without prompting the user.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         {
             get { return force; }
@@ -68,7 +69,7 @@ public SwitchParameter Force
         /// <summary>
         /// Property that will allow configuring WinRM with Public profile exception enabled.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter SkipNetworkProfileCheck
         {
             get { return skipNetworkProfileCheck; }
diff --git a/src/Microsoft.WSMan.Management/WSManConnections.cs b/src/Microsoft.WSMan.Management/WSManConnections.cs
index 85c5d1ba0ae..cac5196740f 100644
--- a/src/Microsoft.WSMan.Management/WSManConnections.cs
+++ b/src/Microsoft.WSMan.Management/WSManConnections.cs
@@ -213,15 +213,15 @@ public Hashtable OptionSet
         [Parameter]
         [ValidateNotNullOrEmpty]
         [Parameter(ParameterSetName = "ComputerName")]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "SessionOption".
@@ -360,10 +360,7 @@ public string ComputerName
         protected override void BeginProcessing()
         {
             WSManHelper helper = new WSManHelper(this);
-            if (computername == null)
-            {
-                computername = "localhost";
-            }
+            computername ??= "localhost";
 
             if (this.SessionState.Path.CurrentProviderLocation(WSManStringLiterals.rootpath).Path.StartsWith(WSManStringLiterals.rootpath + ":" + WSManStringLiterals.DefaultPathSeparator + computername, StringComparison.OrdinalIgnoreCase))
             {
diff --git a/src/Microsoft.WSMan.Management/WSManInstance.cs b/src/Microsoft.WSMan.Management/WSManInstance.cs
index 733316c785f..c96b002123d 100644
--- a/src/Microsoft.WSMan.Management/WSManInstance.cs
+++ b/src/Microsoft.WSMan.Management/WSManInstance.cs
@@ -29,6 +29,7 @@ namespace Microsoft.WSMan.Management
     /// -SelectorSet {Name=Spooler}
     /// </summary>
     [Cmdlet(VerbsCommon.Get, "WSManInstance", DefaultParameterSetName = "GetInstance", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096627")]
+    [OutputType(typeof(XmlElement))]
     public class GetWSManInstanceCommand : AuthenticatingWSManCommand, IDisposable
     {
         #region parameter
@@ -247,7 +248,7 @@ public Hashtable OptionSet
         /// </summary>
         [Parameter(ParameterSetName = "Enumerate")]
         [Parameter(ParameterSetName = "GetInstance")]
-        public Int32 Port
+        public int Port
         {
             get
             {
@@ -260,7 +261,7 @@ public Int32 Port
             }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "Associations".
@@ -325,7 +326,7 @@ public Uri ResourceURI
         [Parameter(ParameterSetName = "Enumerate")]
 
         [ValidateNotNullOrEmpty]
-        [ValidateSetAttribute(new string[] { "object", "epr", "objectandepr" })]
+        [ValidateSet(new string[] { "object", "epr", "objectandepr" })]
         [Alias("RT")]
         public string ReturnType
         {
@@ -685,6 +686,7 @@ protected override void EndProcessing()
     /// -SelectorSet {Name=Spooler}
     /// </summary>
     [Cmdlet(VerbsCommon.Set, "WSManInstance", DefaultParameterSetName = "ComputerName", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096937")]
+    [OutputType(typeof(XmlElement), typeof(string))]
     public class SetWSManInstanceCommand : AuthenticatingWSManCommand, IDisposable
     {
         #region Parameters
@@ -822,15 +824,15 @@ public Hashtable OptionSet
         /// </summary>
         [Parameter(ParameterSetName = "ComputerName")]
         [ValidateNotNullOrEmpty]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "ResourceURI".
@@ -1146,15 +1148,15 @@ public Hashtable OptionSet
         /// </summary>
         [Parameter(ParameterSetName = "ComputerName")]
         [ValidateNotNullOrEmpty]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "ResourceURI".
@@ -1324,6 +1326,7 @@ protected override void ProcessRecord()
     /// using specified ValueSet or input File.
     /// </summary>
     [Cmdlet(VerbsCommon.New, "WSManInstance", DefaultParameterSetName = "ComputerName", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=2096933")]
+    [OutputType(typeof(XmlElement))]
     public class NewWSManInstanceCommand : AuthenticatingWSManCommand, IDisposable
     {
         /// <summary>
@@ -1428,15 +1431,15 @@ public Hashtable OptionSet
         /// </summary>
         [Parameter(ParameterSetName = "ComputerName")]
         [ValidateNotNullOrEmpty]
-        [ValidateRange(1, Int32.MaxValue)]
-        public Int32 Port
+        [ValidateRange(1, int.MaxValue)]
+        public int Port
         {
             get { return port; }
 
             set { port = value; }
         }
 
-        private Int32 port = 0;
+        private int port = 0;
 
         /// <summary>
         /// The following is the definition of the input parameter "ResourceURI".
diff --git a/src/Microsoft.WSMan.Management/WsManHelper.cs b/src/Microsoft.WSMan.Management/WsManHelper.cs
index 000cb871abb..9249c7f4b88 100644
--- a/src/Microsoft.WSMan.Management/WsManHelper.cs
+++ b/src/Microsoft.WSMan.Management/WsManHelper.cs
@@ -22,7 +22,7 @@
 namespace Microsoft.WSMan.Management
 {
     [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#")]
-    internal class WSManHelper
+    internal sealed class WSManHelper
     {
         // regular expressions
         private const string PTRN_URI_LAST = @"([a-z_][-a-z0-9._]*)$";
@@ -89,7 +89,7 @@ internal class WSManHelper
         //
         //
         // Below class is just a static container which would release sessions in case this DLL is unloaded.
-        internal class Sessions
+        internal sealed class Sessions
         {
             /// <summary>
             /// Dictionary object to store the connection.
@@ -178,15 +178,8 @@ private static string FormatResourceMsgFromResourcetextS(
             string resourceName,
             object[] args)
         {
-            if (resourceManager == null)
-            {
-                throw new ArgumentNullException(nameof(resourceManager));
-            }
-
-            if (string.IsNullOrEmpty(resourceName))
-            {
-                throw new ArgumentNullException(nameof(resourceName));
-            }
+            ArgumentNullException.ThrowIfNull(resourceManager);
+            ArgumentException.ThrowIfNullOrEmpty(resourceName);
 
             string template = resourceManager.GetString(resourceName);
 
@@ -370,17 +363,8 @@ internal string ReadFile(string path)
             }
             finally
             {
-                if (_sr != null)
-                {
-                    // _sr.Close();
-                    _sr.Dispose();
-                }
-
-                if (_fs != null)
-                {
-                    // _fs.Close();
-                    _fs.Dispose();
-                }
+                _sr?.Dispose();
+                _fs?.Dispose();
             }
 
             return strOut;
@@ -627,7 +611,7 @@ internal static void ValidateSpecifiedAuthentication(AuthenticationMechanism aut
             if ((credential != null) && (certificateThumbprint != null))
             {
                 string message = FormatResourceMsgFromResourcetextS(
-                    "AmbiguosAuthentication",
+                    "AmbiguousAuthentication",
                         "CertificateThumbPrint", "credential");
 
                 throw new InvalidOperationException(message);
@@ -638,7 +622,7 @@ internal static void ValidateSpecifiedAuthentication(AuthenticationMechanism aut
                 (certificateThumbprint != null))
             {
                 string message = FormatResourceMsgFromResourcetextS(
-                    "AmbiguosAuthentication",
+                    "AmbiguousAuthentication",
                         "CertificateThumbPrint", authentication.ToString());
 
                 throw new InvalidOperationException(message);
@@ -1078,13 +1062,10 @@ internal static void LoadResourceData()
         {
             try
             {
-                string filepath = System.Environment.ExpandEnvironmentVariables("%Windir%") + "\\System32\\Winrm\\" +
-#if CORECLR
-                    "0409" /* TODO: don't assume it is always English on CSS? */
-#else
-                    string.Concat("0", string.Format(CultureInfo.CurrentCulture, "{0:x2}", checked((uint)CultureInfo.CurrentUICulture.LCID)))
-#endif
-                    + "\\" + "winrm.ini";
+                string winDir = System.Environment.ExpandEnvironmentVariables("%Windir%");
+                uint lcid = checked((uint)CultureInfo.CurrentUICulture.LCID);
+                string filepath = string.Create(CultureInfo.CurrentCulture, $@"{winDir}\System32\Winrm\0{lcid:x2}\winrm.ini");
+
                 if (File.Exists(filepath))
                 {
                     FileStream _fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
diff --git a/src/Microsoft.WSMan.Management/WsManSnapin.cs b/src/Microsoft.WSMan.Management/WsManSnapin.cs
deleted file mode 100644
index 4093caf12db..00000000000
--- a/src/Microsoft.WSMan.Management/WsManSnapin.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Management;
-using System.Management.Automation;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace Microsoft.WSMan.Management
-{
-    #region SnapIn
-
-    /// <summary>
-    /// Create the PowerShell snap-in used to register the
-    /// WsManPSSnapIn cmdlets. Declaring the PSSnapIn class identifies
-    /// this .cs file as a PowerShell snap-in.
-    /// </summary>
-    [RunInstaller(true)]
-    public class WSManPSSnapIn : PSSnapIn
-    {
-        /// <summary>
-        /// Create an instance of the WsManSnapin class.
-        /// </summary>
-        public WSManPSSnapIn()
-            : base()
-        {
-        }
-
-        /// <summary>
-        /// Specify the name of the PowerShell snap-in.
-        /// </summary>
-        public override string Name
-        {
-            get
-            {
-                return "WsManPSSnapIn";
-            }
-        }
-
-        /// <summary>
-        /// Specify the vendor for the PowerShell snap-in.
-        /// </summary>
-        public override string Vendor
-        {
-            get
-            {
-                return "Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Specify the localization resource information for the vendor.
-        /// Use the format: resourceBaseName,VendorName.
-        /// </summary>
-        public override string VendorResource
-        {
-            get
-            {
-                return "WsManPSSnapIn,Microsoft";
-            }
-        }
-
-        /// <summary>
-        /// Specify a description of the PowerShell snap-in.
-        /// </summary>
-        public override string Description
-        {
-            get
-            {
-                return "This is a PowerShell snap-in that includes the WsMan cmdlets.";
-            }
-        }
-
-        /// <summary>
-        /// Specify the localization resource information for the description.
-        /// Use the format: resourceBaseName,Description.
-        /// </summary>
-        public override string DescriptionResource
-        {
-            get
-            {
-                return "WsManPSSnapIn,This is a PowerShell snap-in that includes the WsMan cmdlets.";
-            }
-        }
-    }
-
-    #endregion SnapIn
-}
diff --git a/src/Microsoft.WSMan.Management/resources/WsManResources.resx b/src/Microsoft.WSMan.Management/resources/WsManResources.resx
index c55aab1132f..0c33749488b 100644
--- a/src/Microsoft.WSMan.Management/resources/WsManResources.resx
+++ b/src/Microsoft.WSMan.Management/resources/WsManResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -191,7 +191,7 @@ Do you want to enable CredSSP authentication?</value>
   <data name="NoAttributeMatch" xml:space="preserve">
     <value>This command cannot be used because the parameter matches a non-text property on the ResourceURI.Check the input parameters and run your command.</value>
   </data>
-  <data name="AmbiguosAuthentication" xml:space="preserve">
+  <data name="AmbiguousAuthentication" xml:space="preserve">
     <value>A {0} cannot be specified when {1} is specified.</value>
   </data>
   <data name="InvalidComputerName" xml:space="preserve">
diff --git a/src/Microsoft.WSMan.Management/resources/WsManResources.txt b/src/Microsoft.WSMan.Management/resources/WsManResources.txt
index 50cf1bf1fe5..10702e5ccea 100644
--- a/src/Microsoft.WSMan.Management/resources/WsManResources.txt
+++ b/src/Microsoft.WSMan.Management/resources/WsManResources.txt
@@ -56,7 +56,7 @@ CredSSPServiceConfigured=This computer is configured to receive credentials from
 CredSSPServiceNotConfigured=This computer is not configured to receive credentials from a remote client computer.
 QuickConfigContinueCaption=WinRM Quick Configuration
 QuickConfigContinueQuery=Running the Set-WSManQuickConfig command has significant security implications, as it enables remote management through the WinRM service on this computer.\nThis command:\n	1. Checks whether the WinRM service is running. If the WinRM service is not running, the service is started.\n	2. Sets the WinRM service startup type to automatic.\n	3. Creates a listener to accept requests on any IP address. By default, the transport is HTTP.\n	4. Enables a firewall exception for WS-Management traffic.\n	5. Enables Kerberos and Negotiate service authentication.\nDo you want to enable remote management through the WinRM service on this computer?
-AmbiguosAuthentication=A {0} cannot be specified when {1} is specified.
+AmbiguousAuthentication=A {0} cannot be specified when {1} is specified.
 CmdletNotAvailable=This PowerShell cmdlet is not available on for Windows XP and Windows Server 2003.
 InvalidValueType=This command cannot be used because the parameter value type is invalid. {0} configuration expects a value of Type {1}. Verify that the value is correct and try again.
 ClearItemOnRunAsPassword=The RunAsPassword value cannot be removed. Remove the values for RunAsUser and RunAsPassword in PowerShell by calling the Clear-Item cmdlet with the value for -Path attribute equal to the value of RunAsUser.
diff --git a/src/Microsoft.WSMan.Management/resources/cs/WsManResources.cs.resx b/src/Microsoft.WSMan.Management/resources/cs/WsManResources.cs.resx
new file mode 100644
index 00000000000..dc579cf1106
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/cs/WsManResources.cs.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože soubor neexistuje. Zkontrolujte, zda soubor existuje, a spusťte příkaz znovu.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Vytvoří novou položku ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Tento příkaz nelze spustit, protože identifikátor URI připojení nemá správný formát. Zkontrolujte prosím identifikátor URI připojení a spusťte příkaz znovu.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>Ověřování CredSSP umožňuje odeslat přihlašovací údaje uživatele z tohoto počítače do vzdáleného počítače. Pokud použijete ověřování CredSSP pro připojení ke škodlivému nebo napadenému počítači, bude mít tento počítač přístup k vašemu uživatelskému jménu a heslu. Další informace najdete v tématu nápovědy Enable-WSManCredSSP.
+Chcete povolit ověřování CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Vytvoří novou položku naslouchacího procesu.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Tento příkaz upraví nastavení zabezpečení prostředku v následujícím modulu plug-in služby WinRM: {0}.
+Chcete pokračovat?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>Spuštěním rutiny Set-Item s nastavením konfigurace WinRM {0} aktualizujte hodnotu na {1}.</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Tento příkaz nelze spustit, protože toto nastavení nelze povolit.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Tento příkaz vytvoří novou položku naslouchacího procesu.
+
+Chcete pokračovat?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Přístup je odepřený. Tuto rutinu musíte spustit z procesu se zvýšenými oprávněními.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože kořen jednotky WsMan není v této verzi systému Windows podporován.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Spustit službu WinRM</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>Ověřování CredSSP umožňuje serveru přijímat přihlašovací údaje uživatele ze vzdáleného počítače. Pokud na serveru povolíte ověřování CredSSP, bude mít server přístup k uživatelskému jménu a heslu klientského počítače, pokud je klientský počítač odešle. Další informace najdete v tématu nápovědy Enable-WSManCredSSP.
+Chcete povolit ověřování CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Rychlá konfigurace WinRM</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Tento příkaz nemůže nastavit vstupní hodnotu, protože tyto hodnoty představují primární klíče nebo položky kontejneru objektu prostředku. Změňte vstupní hodnotu a spusťte příkaz znovu.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Konfigurace ověřování CredSSP pro službu WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Nastavit hodnotu položky</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Typ System.Object[] nelze převést na typ System.String vyžadovaný parametrem. Zadaná metoda není podporována.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Tento počítač není nakonfigurován pro příjem přihlašovacích údajů ze vzdáleného klientského počítače.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Tento příkaz nelze použít z aktuální cesty. Přejděte do kořenové cesty zprostředkovatele pomocí cd\ a spusťte příkaz znovu.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Tato rutina PowerShellu není k dispozici pro systémy Windows XP a Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože parametr odpovídá netextové vlastnosti v ResourceURI. Zkontrolujte vstupní parametry a spusťte příkaz znovu.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Parametr {0} nelze zadat, pokud je zadán parametr {1}.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>Klient WinRM nemůže dokončit operaci. Zkontrolujte, zda je název počítače platný.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>Parametr {0} je povinný, pokud je hodnota parametru {1} rovna {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože není zadána hodnota parametru. Zkontrolujte hodnotu a spusťte příkaz znovu.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože cesta neexistuje. Zkontrolujte, zda cesta existuje, a spusťte příkaz znovu.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Konfigurace zabezpečení modulu plug-in WinRM.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Tento příkaz nelze použít v aktuální cestě, protože tato rutina není na této úrovni cesty zprostředkovatele podporována.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Tento počítač není nakonfigurován tak, aby umožňoval delegování nových přihlašovacích údajů.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Provedené změny konfigurace se projeví až po restartování služby WinRM.  Chcete-li restartovat službu WinRM, spusťte následující příkaz: Restart-Service winrm.</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Spuštění příkazu Set-WSManQuickConfig má významné důsledky pro zabezpečení, protože na tomto počítači povoluje vzdálenou správu prostřednictvím služby WinRM.
+Tento příkaz:
+    1. Zkontroluje, jestli je služba WinRM spuštěná. Pokud služba WinRM není spuštěná, spustí se.
+    2. Nastaví typ spouštění služby WinRM na Automaticky.
+    3. Vytvoří naslouchací proces pro příjem požadavků na libovolné IP adrese. Ve výchozím nastavení se používá přenos HTTP.
+    4. Povolí výjimku brány firewall pro provoz služby WS-Management.
+    5. Povolí ověřování služby Kerberos a Negotiate.
+Chcete na tomto počítači povolit vzdálenou správu prostřednictvím služby WinRM?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>Hodnotu RunAsPassword nelze nastavit, pokud není nastavena hodnota RunAsUser. Nastavte hodnoty RunAsUser a RunAsPassword v PowerShellu voláním rutiny Set-Item s hodnotou atributu -Path nastavenou na hodnotu RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>Aktualizovaná konfigurace může ovlivnit fungování modulů plug-in, jejichž hodnota kvóty pro jednotlivé moduly plug-in je větší než {0}. Ověřte konfiguraci všech zaregistrovaných modulů plug-in a změňte hodnoty kvót pro jednotlivé moduly plug-in u dotčených modulů plug-in.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Tento příkaz nastaví hodnotu položky.
+
+Chcete pokračovat?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Tento počítač je nakonfigurován tak, aby umožňoval delegování nových přihlašovacích údajů na následující cíle:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Kořen úložiště konfigurace WsMan</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Tento příkaz nelze spustit, protože služba WinRM není spuštěná.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože kořenová cesta neexistuje. Zkontrolujte kořenovou cestu a spusťte příkaz znovu.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Tento příkaz nelze použít v aktuální cestě, protože rutina Remove-Item není na této úrovni cesty zprostředkovatele podporována.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Tento příkaz upraví seznam TrustedHosts klienta WinRM. Počítače v seznamu TrustedHosts nemusí být ověřeny. Klient může do těchto počítačů odesílat přihlašovací údaje. Opravdu chcete tento seznam změnit?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Tento příkaz upraví nastavení RootSDDL služby WinRM.  RootSDDL ukládá výchozí nastavení zabezpečení pro všechny prostředky zabezpečitelné pomocí služby WinRM, které neurčují vlastní deskriptor SDDL. Změna SDDL může ovlivnit zabezpečení mnoha prostředků služby WinRM. Opravdu chcete změnit tato výchozí nastavení?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Tento příkaz nelze použít bez přihlašovacích údajů, protože se používá základní ověřování nebo ověřování hodnotou hash. Pomocí parametru Credentials zadejte hodnotu a spusťte příkaz.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>Aktualizovaná konfigurace se projeví pouze v případě, že je menší než nebo rovna hodnotě globální kvóty {0}. Ověřte hodnotu globální kvóty pomocí rutiny PowerShellu Get-Item {0}.</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Tento příkaz nelze spustit, protože toto nastavení nelze zakázat.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Hodnotu prvku {0} v cestě {1} se nepodařilo najít.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Tento příkaz nelze použít bez základního ověřování nebo ověřování hodnotou hash, protože jsou zadány přihlašovací údaje. Použijte základní ověřování nebo ověřování hodnotou hash a spusťte příkaz.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Konfigurace zabezpečení WinRM</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Tento příkaz nelze použít v aktuální cestě, protože rutina New-Item není na této úrovni cesty zprostředkovatele podporována.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože konfigurace je poškozená. Chcete-li obnovit výchozí konfiguraci, spusťte příkaz WinRM invoke Restore WinRM/config.</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože typ hodnoty parametru je neplatný. Konfigurace {0} očekává hodnotu typu {1}. Ověřte správnost hodnoty a zkuste to znovu.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>Služba WinRM momentálně není spuštěná. Spuštěním tohoto příkazu se spustí služba WinRM.
+
+Chcete pokračovat?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože parametr neodpovídá žádné vlastnosti v ResourceURI. Zkontrolujte vstupní parametry a spusťte příkaz znovu.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Tento počítač je nakonfigurován pro příjem přihlašovacích údajů ze vzdáleného klientského počítače.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>Parametr {0} nelze použít, pokud je hodnota parametru {1} rovna {2}. Parametr {0} lze použít pouze v případě, že hodnota parametru {1} je {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Provedené změny konfigurace se projeví až po restartování služby WinRM na počítači {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Tento příkaz nelze použít z aktuální cesty. Přejděte do kořenové cesty zprostředkovatele pomocí cd\ a spusťte příkaz znovu.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Tento modul snap-in PowerShellu obsahuje rutiny (například Get-WSManInstance a Set-WSManInstance), které hostitel PowerShellu používá ke správě operací WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Tento příkaz nelze použít k odebrání počítače localhost, protože bude vždy připojený. Zadejte jiný připojený počítač a spusťte příkaz znovu.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Tento příkaz vytvoří novou položku ClientCertificate.
+
+Chcete pokračovat?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>Hodnotu RunAsPassword nelze odebrat. Odeberte hodnoty RunAsUser a RunAsPassword v PowerShellu voláním rutiny Clear-Item s hodnotou atributu -Path nastavenou na hodnotu RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Jednotku se zadaným kořenovým adresářem nejde vytvořit. Kořenová cesta neexistuje.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Tento příkaz nelze použít, protože parametr odpovídá více vlastnostem v ResourceURI. Zkontrolujte vstupní parametry a spusťte příkaz znovu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/de/WsManResources.de.resx b/src/Microsoft.WSMan.Management/resources/de/WsManResources.de.resx
new file mode 100644
index 00000000000..53a70ab22b5
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/de/WsManResources.de.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da die Datei nicht vorhanden ist. Überprüfen Sie das Vorhandensein der Datei, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Erstellen eines neuen ClientCertificate-Elements.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da der Verbindungs-URI nicht das richtige Format aufweist. Überprüfen Sie den Verbindungs-URI, und führen Sie den Befehl erneut aus.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>Die CredSSP-Authentifizierung ermöglicht es, die Benutzeranmeldeinformationen auf diesem Computer an einen Remotecomputer zu senden. Wenn Sie die CredSSP-Authentifizierung für eine Verbindung mit einem schädlichen oder kompromittierten Computer verwenden, hat dieser Computer Zugriff auf Ihren Benutzernamen und Ihr Kennwort. Weitere Informationen finden Sie im Hilfethema „Enable-WSManCredSSP“.
+Möchten Sie die CredSSP-Authentifizierung aktivieren?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Erstellt ein neues Listener-Element.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Mit diesem Befehl werden die Sicherheitseinstellungen für eine Ressource im folgenden WinRM-Plug-In geändert: {0}.
+Möchten Sie fortfahren?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>„Set-Item“ für die WinRM-Konfigurationseinstellung „{0}“, um den Wert auf „{1}“ zu aktualisieren</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da die Einstellung nicht aktiviert werden kann.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Mit diesem Befehl wird ein neues Listenerelement erstellt.
+
+Möchten Sie fortfahren?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Der Zugriff wird verweigert. Sie müssen dieses Cmdlet aus einem Prozess mit erhöhten Rechten ausführen.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der WsMan-Laufwerkstamm unter dieser Version von Windows nicht unterstützt wird.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>WinRM-Dienst starten</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>Die CredSSP-Authentifizierung ermöglicht es dem Server, Benutzeranmeldeinformationen von einem Remotecomputer zu akzeptieren. Wenn Sie die CredSSP-Authentifizierung auf dem Server aktivieren, hat der Server Zugriff auf den Benutzernamen und das Kennwort des Clientcomputers, wenn dieser sie sendet. Weitere Informationen finden Sie im Hilfethema „Enable-WSManCredSSP“.
+Möchten Sie die CredSSP-Authentifizierung aktivieren?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM-Schnellkonfiguration</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Dieser Befehl kann den Eingabewert nicht festlegen, da diese Werte Primärschlüssel oder Containerelemente des Ressourcenobjekts sind. Ändern Sie den Eingabewert, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>CredSSP-Authentifizierungskonfiguration für WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Wert des Elements festlegen</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>„System.Object[]“ kann nicht in den für den Parameter erforderlichen Typ „System.String“ konvertiert werden. Die angegebene Methode wird nicht unterstützt.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Dieser Computer ist nicht für den Empfang von Anmeldeinformationen von einem Remoteclientcomputer konfiguriert.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Dieses PowerShell-Cmdlet ist für Windows XP und Windows Server 2003 nicht verfügbar.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Parameter mit einer Nichttexteigenschaft des Ressourcen-URI übereinstimmt. Überprüfen Sie die Eingabeparameter, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Eine „{0}“ kann nicht angegeben werden, wenn „{1}“ angegeben ist.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>Der WinRM-Client kann den Vorgang nicht abschließen. Überprüfen Sie, ob der Computername gültig ist.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>Der {0}-Parameter ist erforderlich, wenn der Wert des {1}-Parameters „{2}“ ist.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da kein Parameterwert angegeben wurde. Überprüfen Sie den Wert erneut, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Pfad nicht vorhanden ist. Überprüfen Sie das Vorhandensein des Pfads, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Sicherheitskonfiguration für das WinRM-Plug-In.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Dieser Befehl kann im aktuellen Pfad nicht verwendet werden, da dieses Cmdlet auf dieser Ebene des Anbieterpfads nicht unterstützt wird.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Der Computer ist nicht zum Zulassen der Delegierung von aktuellen Anmeldeinformationen konfiguriert.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Die von Ihnen vorgenommenen Konfigurationsänderungen werden erst wirksam, nachdem der WinRM-Dienst neu gestartet wurde.  Führen Sie den folgenden Befehl aus, um den WinRM-Dienst neu zu starten: „Restart-Service winrm“</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Das Ausführen des Befehls Set-WSManQuickConfig hat erhebliche Auswirkungen auf die Sicherheit, da damit die Remoteverwaltung über den WinRM-Dienst auf diesem Computer aktiviert wird.
+Dieser Befehl:
+    1. Überprüft, ob der WinRM-Dienst ausgeführt wird. Wenn der WinRM-Dienst nicht ausgeführt wird, wird er gestartet.
+    2. Legt den Starttyp des WinRM-Diensts auf „Automatisch“ fest.
+    3. Erstellen eines Listeners zum Annehmen von Anforderungen an jeder IP-Adresse Der Transport erfolgt standardmäßig über HTTP.
+    4. Aktivieren einer Firewallausnahme für den WS-Management-Datenverkehr.
+    5. Aktivieren der Kerberos- und Negotiate-Dienstauthentifizierung.
+Möchten Sie die Remoteverwaltung über den WinRM-Dienst auf diesem Computer aktivieren?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>Der Wert für RunAsPassword kann nicht ohne einen festgelegten Wert für RunAsUser festgelegt werden. Legen Sie den Wert sowohl für „RunAsUser“ als auch für „RunAsPassword“ in PowerShell fest, indem Sie das Cmdlet „Set-Item“ mit dem -Path-Attribut aufrufen, dessen Wert dem Wert von RunAsUser entspricht.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>Die aktualisierte Konfiguration kann sich auf den Betrieb der Plug-Ins auswirken, deren Kontingentwert pro Plug-In größer als {0} ist. Überprüfen Sie die Konfiguration aller registrierten Plug-Ins, und ändern Sie die Kontingentwerte pro Plug-In für die betroffenen Plug-Ins.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Mit diesem Befehl wird der Wert des Elements festgelegt.
+
+Möchten Sie fortfahren?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Der Computer ist so konfiguriert, dass das Delegieren neuer Anmeldeinformationen an die folgenden Ziele zulässig ist:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Stamm des WsMan-Konfigurationsspeichers.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da der WinRM-Dienst nicht gestartet ist.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Stammpfad nicht vorhanden ist. Überprüfen Sie den Stammpfad, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Dieser Befehl kann im aktuellen Pfad nicht verwendet werden, da „Remove-Item“ auf dieser Ebene des Anbieterpfads nicht unterstützt wird.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Mit diesem Befehl wird die TrustedHosts-Liste für den WinRM-Client geändert. Die Computer in der TrustedHosts-Liste sind möglicherweise nicht authentifiziert. Der Client sendet möglicherweise Anmeldeinformationen an diese Computer. Möchten Sie diese Liste wirklich ändern?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Mit diesem Befehl wird die RootSDDL-Einstellung für den WinRM-Dienst geändert.  Die RootSDDL speichert die standardmäßigen Sicherheitseinstellungen für alle sicherungsfähigen WinRM-Ressourcen, die keine eigene SDDL angeben. Das Ändern der SDDL kann die Sicherheit vieler WinRM-Ressourcen beeinflussen. Möchten Sie diese Standardeinstellungen wirklich ändern?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ohne Anmeldeinformationen verwendet werden, da der Standard- oder Digest-Authentifizierungsalgorithmus verwendet wird. Verwenden Sie den Parameter Anmeldeinformationen, um einen Wert anzugeben, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>Die aktualisierte Konfiguration ist nur wirksam, wenn sie kleiner oder gleich dem Wert des globalen Kontingents „{0}“ ist. Überprüfen Sie den Wert des globalen Kontingents mithilfe des PowerShell-Cmdlets „Get-Item {0}“.</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ausgeführt werden, da die Einstellung nicht deaktiviert werden kann.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Der Wert für das Element „{0}“ wurde im Pfad {1} nicht gefunden.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Dieser Befehl kann nicht ohne den Standard- oder Digest-Authentifizierungsalgorithmus verwendet werden, da Anmeldeinformationen angegeben wurden. Verwenden Sie den Standard- oder Digest-Authentifizierungsalgorithmus, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM-Sicherheitskonfiguration</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Dieser Befehl kann im aktuellen Pfad nicht verwendet werden, da „New-Item“ auf dieser Ebene des Anbieterpfads nicht unterstützt wird.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da die Konfiguration beschädigt ist. Führen Sie „WinRM invoke Restore WinRM/config“ aus, um die Standardkonfiguration wiederherzustellen.</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Parameterwerttyp ungültig ist. {0}-Konfiguration erwartet einen Wert vom Typ „{1}“. Stellen Sie sicher, dass der Wert korrekt ist, und versuchen Sie es erneut.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>Der WinRM-Dienst ist derzeit nicht gestartet. Wenn dieser Befehl ausgeführt wird, wird der WinRM-Dienst gestartet.
+
+Möchten Sie fortfahren?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Parameter mit keiner Eigenschaft des Ressourcen-URI übereinstimmt. Überprüfen Sie die Eingabeparameter, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Dieser Computer ist für den Empfang von Anmeldeinformationen von einem Remoteclientcomputer konfiguriert.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>Der {0}-Parameter kann nicht verwendet werden, wenn der Wert des {1}-Parameters „{2}“ ist. Der {0}-Parameter kann nur verwendet werden, wenn der Wert des {1}-Parameters „{3}“ ist.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Die von Ihnen vorgenommenen Konfigurationsänderungen werden erst wirksam, nachdem der WinRM-Dienst auf „{0}“ neu gestartet wurde.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Dieses PowerShell-Snap-In enthält Cmdlets, z. B. Get-WSManInstance und Set-WSManInstance, die vom PowerShell-Host zum Verwalten von WSMan-Vorgängen verwendet werden.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Dieser Befehl kann nicht zum Entfernen des Computers „localhost“ verwendet werden, da er immer verbunden ist. Geben Sie einen anderen verbundenen Computer an, und führen Sie den Befehl aus.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Mit diesem Befehl wird ein neues ClientCertificate-Element erstellt.
+
+Möchten Sie fortfahren?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>Der Wert RunAsPassword kann nicht entfernt werden. Entfernen Sie die Werte für RunAsUser und RunAsPassword in PowerShell, indem Sie das Cmdlet Clear-Item mit dem -Path-Attribut aufrufen, dessen Wert dem Wert von RunAsUser entspricht.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Es kann kein Laufwerk mit dem angegebenen Stamm erstellt werden. Der Stammpfad ist nicht vorhanden.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Dieser Befehl kann nicht verwendet werden, da der Parameter mit mehreren Eigenschaften des Ressourcen-URI übereinstimmt. Überprüfen Sie die Eingabeparameter, und führen Sie den Befehl aus.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/es/WsManResources.es.resx b/src/Microsoft.WSMan.Management/resources/es/WsManResources.es.resx
new file mode 100644
index 00000000000..36351a880a8
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/es/WsManResources.es.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>No se puede usar este comando porque el archivo no existe. Compruebe la existencia del archivo y ejecute el comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Crea un nuevo elemento ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque el formato del URI de conexión no es correcto. Compruebe el URI de conexión y vuelva a ejecutar el comando.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>La autenticación CredSSP permite que las credenciales de usuario de este equipo se envíen a un equipo remoto. Si usa la autenticación CredSSP para una conexión a un equipo malintencionado o comprometido, ese equipo tendrá acceso a su nombre de usuario y contraseña. Para obtener más información, vea el tema de Ayuda Enable-WSManCredSSP.
+¿Desea habilitar la autenticación CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Crea un nuevo elemento de Escucha.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Este comando modifica la configuración de seguridad de un recurso en el siguiente complemento de WinRM: {0}.
+¿Desea continuar?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" en el valor de configuración de WinRM "{0}" para actualizar el valor a "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque no se puede habilitar la configuración.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Este comando crea un nuevo elemento de Escucha.
+
+¿Desea continuar?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Acceso denegado. Debe ejecutar este cmdlet desde un proceso con privilegios elevados.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>No se puede usar este comando porque la raíz de la unidad WsMan no se admite en esta versión del sistema operativo Windows.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Iniciar servicio WinRM</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>La autenticación CredSSP permite que el servidor acepte credenciales de usuario de un equipo remoto. Si habilita la autenticación CredSSP en el servidor, este tendrá acceso al nombre de usuario y la contraseña del equipo cliente si este los envía. Para obtener más información, vea el tema de Ayuda Enable-WSManCredSSP.
+¿Desea habilitar la autenticación CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Configuración rápida de WinRM</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Este comando no puede establecer el valor de entrada porque estos valores son claves primarias o elementos de contenedor del objeto de recurso. Cambie el valor de entrada y ejecute el comando.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Configuración de autenticación CredSSP para WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Establecer el valor del elemento</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>No se puede convertir "System.Object[]" al tipo "System.String" requerido por el parámetro. No se admite el método especificado.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Este equipo no está configurado para recibir credenciales de un equipo cliente remoto.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>No se puede usar este comando desde la ruta de acceso actual. Vaya a la ruta de acceso raíz del proveedor mediante cd\ y vuelva a ejecutar el comando.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Este cmdlet de PowerShell no está disponible para Windows XP y Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>No se puede usar este comando porque el parámetro coincide con una propiedad que no es de texto en ResourceURI. Compruebe los parámetros de entrada y ejecute el comando.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Un {0} no se puede especificar cuando se especifica {1}.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>El cliente WinRM no puede completar la operación. Compruebe si el nombre del equipo es válido.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>El parámetro {0} es obligatorio cuando el valor del parámetro {1} es {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>No se puede usar este comando porque no se proporcionó el valor del parámetro. Vuelva a comprobar el valor y ejecute el comando.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>No se puede usar este comando porque la ruta de acceso no existe. Compruebe la existencia de la ruta de acceso y ejecute el comando.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Configuración de seguridad para el complemento de WinRM.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Este comando no se puede usar en la ruta de acceso actual porque este cmdlet no se admite en este nivel de la ruta de acceso del proveedor.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>El equipo no está configurado para permitir la delegación de credenciales nuevas.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Los cambios de configuración realizados solo serán efectivos después de reiniciar el servicio WinRM.  Para reiniciar el servicio WinRM, ejecute el siguiente comando: "Restart-Service winrm"</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Ejecutar el comando Set-WSManQuickConfig tiene importantes implicaciones de seguridad, ya que habilita la administración remota a través del servicio WinRM en este equipo.
+Este comando:
+    1. Comprueba si el servicio WinRM está en ejecución. Si no se está ejecutando el servicio WinRM, se inicia.
+    2. Establece en automático el tipo de inicio del servicio WinRM.
+    3. Crea un agente de escucha para aceptar solicitudes en cualquier dirección IP. De manera predeterminada, el transporte es HTTP.
+    4. Habilita una excepción de firewall para tráfico de WS-Management.
+    5. Habilita la autenticación de servicio Kerberos y Negotiate.
+¿Desea habilitar la administración remota a través del servicio WinRM en este equipo?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>El valor de RunAsPassword no se puede establecer sin un valor establecido para RunAsUser. Establezca los valores de RunAsUser y RunAsPassword en Powershell llamando al cmdlet Set-Item con el valor del atributo -Path igual al valor de RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>La configuración actualizada puede afectar al funcionamiento de los complementos con un valor de cuota por complemento superior a {0}. Compruebe la configuración de todos los complementos registrados y cambie los valores de cuota por complemento de los complementos afectados.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Este comando establece el valor del elemento.
+
+¿Desea continuar?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>La máquina está configurada para permitir la delegación de credenciales nuevas a los siguientes destinos:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Raíz del almacenamiento de configuración de WsMan.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque el servicio WinRM no está iniciado.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>No se puede usar este comando porque la ruta de acceso raíz no existe. Compruebe la ruta de acceso raíz y ejecute el comando.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Este comando no se puede usar en la ruta de acceso actual porque Remove-Item no se admite en este nivel de la ruta de acceso del proveedor.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Este comando modifica la lista TrustedHosts para el cliente WinRM. Es posible que los equipos de la lista TrustedHosts no estén autenticados. Es posible que el cliente envíe información de credenciales a estos equipos. ¿Está seguro de que desea modificar esta lista?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Este comando modifica la configuración de RootSDDL para el servicio WinRM.  RootSDDL almacena la configuración de seguridad predeterminada para cualquier recurso de WinRM protegible que no especifique su propio SDDL. Cambiar el SDDL puede afectar a la seguridad de muchos recursos de WinRM. ¿Está seguro de que desea modificar esta configuración predeterminada?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Este comando no se puede usar sin credenciales porque el algoritmo de autenticación es Básico o Implícito. Use el parámetro Credenciales para especificar un valor y ejecute el comando.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>La configuración actualizada solo es efectiva si es menor o igual que el valor de la cuota global {0}. Compruebe el valor de la cuota global mediante el cmdlet de PowerShell "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>No se puede ejecutar este comando porque no se puede deshabilitar la configuración.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>No se encuentra el valor del elemento "{0}" en la ruta de acceso {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Este comando no se puede usar sin el algoritmo de autenticación Básico o Implícito porque se especificaron credenciales. Use el algoritmo de autenticación Básico o Implícito y ejecute el comando.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Configuración de seguridad de WinRM.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Este comando no se puede usar en la ruta de acceso actual porque New-Item no se admite en este nivel de la ruta de acceso del proveedor.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>No se puede usar este comando porque la configuración está dañada. Ejecute WinRM invoke Restore WinRM/config para restaurar la configuración predeterminada</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>No se puede usar este comando porque el tipo de valor del parámetro no es válido. La configuración {0} espera un valor de Tipo {1}. Compruebe que el valor es correcto e inténtelo de nuevo.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>El servicio WinRM no está iniciado actualmente. Al ejecutar este comando, se iniciará el servicio WinRM.
+
+¿Desea continuar?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>No se puede usar este comando porque el parámetro no coincide con ninguna propiedad del ResourceURI. Compruebe los parámetros de entrada y ejecute el comando.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Este equipo está configurado para recibir credenciales de un equipo cliente remoto.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>El parámetro {0} no se puede usar cuando el valor del parámetro {1} es {2}. El parámetro {0} solo se puede usar cuando el valor del parámetro {1} es {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Los cambios de configuración realizados solo serán efectivos después de reiniciar el servicio WinRM en {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>No se puede usar este comando desde la ruta de acceso actual. Vaya a la ruta de acceso raíz del proveedor mediante cd\ y vuelva a ejecutar el comando.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Este complemento de PowerShell contiene cmdlets (como Get-WSManInstance y Set-WSManInstance) que el host de PowerShell usa para administrar las operaciones de WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Este comando no se puede usar para quitar el equipo "localhost" porque siempre estará conectado. Proporcione otro equipo conectado y ejecute el comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Este comando crea un nuevo elemento ClientCertificate.
+
+¿Desea continuar?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>No se puede quitar el valor RunAsPassword. Quite los valores de RunAsUser y RunAsPassword en PowerShell llamando al cmdlet Clear-Item con el valor del atributo -Path igual al valor de RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>No se puede crear una unidad con la raíz especificada. La ruta de acceso raíz no existe.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>No se puede usar este comando porque el parámetro coincide con varias propiedades de ResourceURI. Compruebe los parámetros de entrada y ejecute el comando.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/fr/WsManResources.fr.resx b/src/Microsoft.WSMan.Management/resources/fr/WsManResources.fr.resx
new file mode 100644
index 00000000000..342d7618ef0
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/fr/WsManResources.fr.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>This command cannot be used because file does not exist.Check the file existence and run your command.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Creates a new ClientCertificate item.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>This command cannot be executed because the Connection URI is not in correct format. Please check the connection uri and Run your command again.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP authentication allows the user credentials on this computer to be sent to a remote computer. If you use CredSSP authentication for a connection to a malicious or compromised computer, that computer will have access to your user name and password. For more information, see the Enable-WSManCredSSP Help topic.
+Do you want to enable CredSSP authentication?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Creates a new Listener item.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>This command modifies the security settings on a resource in the following WinRM plug-in: {0}.
+Do you want to continue?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" on the WinRM configuration setting "{0}" to update the value to "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>This command cannot be executed because the setting cannot be enabled.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>This command creates a new Listener item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Access is denied. You need to run this cmdlet from an elevated process.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>This command cannot be used because WsMan drive root is not supported on this version of Windows OS.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Start WinRM Service</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP authentication allows the server to accept user credentials from a remote computer. If you enable CredSSP authentication on the server, the server will have access to the user name and password of the client computer if the client computer sends them. For more information, see the Enable-WSManCredSSP Help topic.
+Do you want to enable CredSSP authentication?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>This command cannot set the input value because these values are Primary keys or Container items of the resource object. Change the input value and Run your command.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>CredSSP Authentication Configuration for WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Set the value of the item</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Cannot convert 'System.Object[]' to the type 'System.String' required by the parameter. Specified method is not supported.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>This computer is not configured to receive credentials from a remote client computer.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>This PowerShell cmdlet is not available on for Windows XP and Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter matches a non-text property on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>The WinRM client cannot complete the operation.Check if the computer name is valid.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is mandatory when the {1} parameter value is {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>This command cannot be used because Parameter Value is not supplied. Check the value again and run your command.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>This command cannot be used because path does not exist.Check the path existence and run your command.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Security Configuration for WinRM Plug-in.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because this cmdlet is not supported at this level of Provider path.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>The machine is not configured to allow delegating fresh credentials.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>The configuration changes you made will only be effective after the WinRM service is restarted.  To restart the WinRM service, run the following command: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Running the Set-WSManQuickConfig command has significant security implications, as it enables remote management through the WinRM service on this computer.
+This command:
+    1. Checks whether the WinRM service is running. If the WinRM service is not running, the service is started.
+    2. Sets the WinRM service startup type to automatic.
+    3. Creates a listener to accept requests on any IP address. By default, the transport is HTTP.
+    4. Enables a firewall exception for WS-Management traffic.
+    5. Enables Kerberos and Negotiate service authentication.
+Do you want to enable remote management through the WinRM service on this computer?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>The value for RunAsPassword cannot be set without a value set for RunAsUser. Set the value for both RunAsUser and RunAsPassword in Powershell by calling the Set-Item cmdlet with the value for -Path attribute equal to the value of RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>The updated configuration might affect the operation of the plugins having a per plugin quota value greater than {0}. Verify the configuration of all the registered plugins and change the per plugin quota values for the affected plugins.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>This command set the value of the Item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>The machine is configured to allow delegating fresh credentials to the following target(s):</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Root of WsMan Config Storage.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>This command cannot be executed because the WinRM Service is not started.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>This command cannot be used because root path does not exist.Check the root path and run your command.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because Remove-Item is not supported at this level of Provider path.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>This command modifies the TrustedHosts list for the WinRM client. The computers in the TrustedHosts list might not be authenticated. The client might send credential information to these computers. Are you sure that you want to modify this list?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>This command modifies the RootSDDL setting for the WinRM service.  The RootSDDL stores the default security settings for any WinRM securable resource that does not specify its own SDDL. Changing the SDDL might affect security for many WinRM resources. Are you sure that you want to modify these default settings?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>This command cannot be used without credential because the authentication algorithm is Basic or Digest. Use Credentials parameter to specify value and run your command.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>The updated configuration is effective only if it is less than or equal to the value of global quota {0}. Verify the value for the global quota using the PowerShell cmdlet "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>This command cannot be executed because the setting cannot be disabled.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Unable to find value for "{0}" element in the path {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>This command cannot be used without Basic or Digest authentication algorithm because credentials are specified.Use Basic or Digest authentication algorithm and run your command.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM Security Configuration.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because New-Item is not supported at this level of Provider path.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>This command cannot be used because the configuration is corrupted. Run WinRM invoke Restore WinRM/config to restore the default configuration</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>This command cannot be used because the parameter value type is invalid. {0} configuration expects a value of Type {1}. Verify that the value is correct and try again.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>WinRM service is not started currently. Running this command will start the WinRM service.
+
+Do you want to continue?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter does not match any properties on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>This computer is configured to receive credentials from a remote client computer.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter cannot be used when the {1} parameter value is {2}. The {0} parameter can be used only when the {1} parameter value is {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>The configuration changes you made will only be effective after the WinRM service is restarted on {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains cmdlets (such as Get-WSManInstance and Set-WSManInstance) that are used by the PowerShell host to manage WSMan operations.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>This command cannot be used to remove the computer 'localhost' because it will always be connected. Give some other connected computer and run your command.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>This command creates a new ClientCertificate item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>The RunAsPassword value cannot be removed. Remove the values for RunAsUser and RunAsPassword in PowerShell by calling the Clear-Item cmdlet with the value for -Path attribute equal to the value of RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Unable to create a drive with the specified root. The root path does not exist.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter matches multiple properties on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/it/WsManResources.it.resx b/src/Microsoft.WSMan.Management/resources/it/WsManResources.it.resx
new file mode 100644
index 00000000000..4b2e314219d
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/it/WsManResources.it.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il file non esiste. Verificare che il file esista ed eseguire il comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Crea un nuovo elemento ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Questo comando non può essere eseguito perché l'URI di connessione non è nel formato corretto. Controllare l'URI di connessione ed eseguire di nuovo il comando.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>L'autenticazione CredSSP consente l'invio delle credenziali utente di questo computer a un computer remoto. Se si usa l'autenticazione CredSSP per una connessione a un computer dannoso o compromesso, tale computer avrà accesso al nome utente e alla password. Per altre informazioni, vedere l'argomento della Guida Enable-WSManCredSSP.
+Abilitare l'autenticazione CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Crea un nuovo elemento listener.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Questo comando consente di modificare le impostazioni di sicurezza di una risorsa nel seguente plug-in Gestione remota Windows: {0}.
+Continuare?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" nell'impostazione di configurazione di Gestione remota Windows "{0}" per aggiornare il valore in "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Non è possibile eseguire il comando perché non è possibile abilitare l'impostazione.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Questo comando crea un nuovo elemento Listener.
+
+Continuare?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Accesso negato. È necessario eseguire questo cmdlet da un processo con privilegi elevati.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Non è possibile usare questo comando perché la radice dell'unità WsMan non è supportata in questa versione del sistema operativo Windows.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Avvia il servizio Gestione remota Windows</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>L'autenticazione CredSSP consente al server di accettare le credenziali utente da un computer remoto. Se abiliti l'autenticazione CredSSP nel server, il server avrà accesso al nome utente e alla password del computer client, se inviati dal computer client. Per altre informazioni, vedere l'argomento della Guida Enable-WSManCredSSP.
+Abilitare l'autenticazione CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Configurazione rapida di Gestione remota Windows</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Questo comando non può impostare il valore di input perché tali valori sono chiavi primarie o elementi Contenitore dell'oggetto risorsa. Modificare il valore di input ed eseguire il comando.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Configurazione dell'autenticazione CredSSP per WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Imposta il valore dell'elemento</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Non è possibile convertire 'System.Object[]' nel tipo 'System.String' richiesto dal parametro. Il metodo specificato non è supportato.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Il computer non è configurato per ricevere credenziali da un computer client remoto.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Non è possibile utilizzare questo comando dal percorso corrente. Passare al percorso radice del provider usando cd\ ed eseguire di nuovo il comando.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Questo cmdlet di PowerShell non è disponibile per Windows XP e Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il parametro corrisponde a una proprietà non testuale in ResourceURI. Controllare i parametri di input ed eseguire il comando.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Un {0} non può essere specificato quando {1} è specificato.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>Il client Gestione remota Windows non può completare l'operazione. Verificare che il nome del computer sia valido.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>Il parametro {0} è obbligatorio quando il valore del parametro {1} è {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il valore del parametro non è specificato. Controllare di nuovo il valore ed eseguire il comando.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il percorso non esiste. Verificare che il percorso esista ed eseguire il comando.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Configurazione di sicurezza per il plug-in Gestione remota Windows.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Non è possibile usare questo comando nel percorso corrente perché questo cmdlet non è supportato a questo livello del percorso del provider.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Il computer non è configurato per consentire la delega di nuove credenziali.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Le modifiche apportate alla configurazione saranno effettive solo dopo il riavvio del servizio Gestione remota Windows.  Per riavviare il servizio Gestione remota Windows, eseguire il comando seguente: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>L'esecuzione del comando Set-WSManQuickConfig ha implicazioni significative per la sicurezza, in quanto abilita la gestione remota tramite il servizio Gestione remota Windows in questo computer.
+Questo comando:
+    1. Verifica se il servizio Gestione remota Windows è in esecuzione. Se non è in esecuzione, il servizio Gestione remota Windows viene avviato.
+    2. Imposta il tipo di avvio del servizio Gestione remota Windows su Automatico.
+    3. Crea un listener per accettare le richieste in qualsiasi indirizzo IP. Per impostazione predefinita, il trasporto è HTTP.
+    4. Abilita un'eccezione del firewall per il traffico WS-Management.
+    5. Abilita l'autenticazione del servizio Kerberos e Negotiate.
+Abilitare la gestione remota tramite il servizio Gestione remota Windows in questo computer?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>Non è possibile impostare il valore di RunAsPassword senza un valore impostato per RunAsUser. Impostare entrambi i valori, RunAsUser e RunAsPassword, in PowerShell chiamando il cmdlet Set-Item con il valore dell'attributo -Path uguale al valore di RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>La configurazione aggiornata potrebbe influire sul funzionamento dei plug-in con un valore di quota per plug-in maggiore di {0}. Verificare la configurazione di tutti i plug-in registrati e modificare i valori di quota per plug-in per i plug-in interessati.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Questo comando imposta il valore dell'elemento.
+
+Continuare?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Il computer è configurato per consentire la delega di credenziali nuove alle destinazioni seguenti:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Radice dell'archiviazione della configurazione WsMan.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Non è possibile eseguire questo comando perché il servizio Gestione remota Windows non è avviato.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il percorso radice non esiste. Controllare il percorso radice ed eseguire il comando.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Non è possibile usare questo comando nel percorso corrente perché Remove-Item non è supportato a questo livello del percorso del provider.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Questo comando modifica l'elenco TrustedHosts per il client Gestione remota Windows. I computer nell'elenco di TrustedHosts potrebbero non essere autenticati. Il client potrebbe inviare informazioni sulle credenziali a questi computer. Modificare questo elenco?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Questo comando modifica l'impostazione RootSDDL per il servizio Gestione remota Windows.  RootSDDL archivia le impostazioni di sicurezza predefinite per qualsiasi risorsa a protezione diretta Gestione remota Windows che non specifica il proprio SDDL. La modifica dell'SDDL potrebbe influire sulla sicurezza di molte risorse Gestione remota Windows. Modificare queste impostazioni predefinite?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Questo comando non può essere usato senza credenziali perché l'algoritmo di autenticazione è Basic o Digest. Usare il parametro Credentials per specificare il valore ed eseguire il comando.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>La configurazione aggiornata è effettiva solo se è minore o uguale al valore della quota globale {0}. Verificare il valore della quota globale usando il cmdlet di PowerShell "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Non è possibile eseguire il comando perché l'impostazione non può essere disabilitata.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Non è possibile trovare il valore dell'elemento "{0}" nel percorso {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Questo comando non può essere usato senza l'algoritmo di autenticazione Basic o Digest perché sono specificate credenziali. Usare l'algoritmo di autenticazione Basic o Digest ed eseguire il comando.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Configurazione di sicurezza Gestione remota Windows.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Non è possibile usare questo comando nel percorso corrente perché New-Item non è supportato a questo livello del percorso del provider.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Questo comando non può essere usato perché la configurazione è danneggiata. Eseguire WinRM invoke Restore WinRM/config per ripristinare la configurazione predefinita</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Non è possibile utilizzare questo comando perché il tipo di valore del parametro non è valido. La configurazione di {0} prevede un valore di tipo {1}. Verificare che il valore sia corretto e riprovare.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>Il servizio Gestione remota Windows non è attualmente avviato. L'esecuzione di questo comando avvierà il servizio Gestione remota Windows.
+
+Continuare?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il parametro non corrisponde ad alcuna proprietà in ResourceURI. Controllare i parametri di input ed eseguire il comando.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Il computer è configurato per ricevere credenziali da un computer client remoto.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>Il parametro {0} non può essere usato quando il valore del parametro {1} è {2}. Il parametro {0} può essere usato solo quando il valore del parametro {1} è {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Le modifiche apportate alla configurazione saranno effettive solo dopo il riavvio del servizio Gestione remota Windows in {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Non è possibile utilizzare questo comando dal percorso corrente. Passare al percorso radice del provider usando cd\ ed eseguire di nuovo il comando.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Questo snap-in di PowerShell contiene cmdlet, ad esempio Get-WSManInstance e Set-WSManInstance, usati dall'host di PowerShell per gestire le operazioni WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Questo comando non può essere usato per rimuovere il computer 'localhost' perché sarà sempre connesso. Specificare un altro computer connesso ed eseguire il comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Questo comando crea un nuovo elemento ClientCertificate.
+
+Continuare?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>Non è possibile rimuovere il valore RunAsPassword. Rimuovere i valori RunAsUser e RunAsPassword in PowerShell chiamando il cmdlet Clear-Item con il valore dell'attributo -Path uguale al valore di RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Non è possibile creare un'unità con la radice specificata. Il percorso radice non esiste.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Questo comando non può essere usato perché il parametro corrisponde a più proprietà in ResourceURI. Controllare i parametri di input ed eseguire il comando.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/ja/WsManResources.ja.resx b/src/Microsoft.WSMan.Management/resources/ja/WsManResources.ja.resx
new file mode 100644
index 00000000000..a6f593f296d
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/ja/WsManResources.ja.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>ファイルが存在しないため、このコマンドは使用できません。ファイルの存在を確認し、コマンドを実行してください。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>新しい ClientCertificate 項目を作成します。</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>接続 URI の形式が正しくないため、このコマンドを実行できません。接続 URI を確認し、コマンドをもう一度実行してください。</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP 認証を使用すると、このコンピューターのユーザー資格情報をリモート コンピューターに送信できます。悪意のあるコンピューターまたは侵害されたコンピューターへの接続に CredSSP 認証を使用する場合、そのコンピューターはユーザー名とパスワードにアクセスできます。詳細については、Enable-WSManCredSSP のヘルプ トピックを参照してください。
+CredSSP 認証を有効にしますか?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>新しいリスナー項目を作成します。</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>このコマンドは、次の WinRM プラグインのリソースのセキュリティ設定を変更します: {0}。
+続行しますか?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>値を "{1}" に更新するための WinRM 構成設定 "{0}" の "Set-Item"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>設定を有効にできないため、このコマンドを実行できません。</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>このコマンドは、新しいリスナー項目を作成します。
+
+続行しますか?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>アクセスは拒否されました。昇格されたプロセスからこのコマンドレットを実行する必要があります。</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>このバージョンの Windows OS では WsMan ドライブ ルートがサポートされていないため、このコマンドは使用できません。</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>WinRM サービスの開始</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP 認証を使用すると、サーバーはリモート コンピューターからユーザー資格情報を受け入れます。サーバーで CredSSP 認証を有効にした場合、クライアント コンピューターから送信された場合、サーバーはクライアント コンピューターのユーザー名とパスワードにアクセスできます。詳細については、Enable-WSManCredSSP のヘルプ トピックを参照してください。
+CredSSP 認証を有効にしますか?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM クイック構成</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>これらの値はリソース オブジェクトの主キーまたはコンテナー項目であるため、このコマンドは入力値を設定できません。入力値を変更し、コマンドを実行します。</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>WS-Management の CredSSP 認証構成</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>項目の値を設定する</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>'System.Object[]' をパラメーターに必要な型 'System.String' に変換できません。指定されたメソッドはサポートされていません。</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>このコンピューターは、リモート クライアント コンピューターから資格情報を受信するように構成されていません。</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>このコマンドは、現在のパスからは使用できません。cd\ を使用してプロバイダーのルート パスに移動し、コマンドをもう一度実行してください。</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>この PowerShell コマンドレットは、Windows XP および Windows Server 2003 では使用できません。</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>パラメーターが ResourceURI のテキスト以外のプロパティと一致するため、このコマンドを使用できません。入力パラメーターを確認し、コマンドを実行してください。</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>{1} が指定されている場合、{0} は指定できません。</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>WinRM クライアントは操作を完了できません。コンピューター名が有効かどうかを確認してください。</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>{1} パラメーター値が {2} の場合、{0} パラメーターは必須です。</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>パラメーター値が指定されていないため、このコマンドは使用できません。値をもう一度確認し、コマンドを実行します。</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>パスが存在しないため、このコマンドは使用できません。パスの存在を確認し、コマンドを実行します。</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>WinRM プラグインのセキュリティ構成。</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>このコマンドレットはこのレベルのプロバイダー パスではサポートされていないため、現在のパスではこのコマンドを使用できません。</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>このマシンは、新しい資格情報の委任を許可するようには構成されていません。</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>行った構成の変更は、WinRM サービスが再起動された後にのみ有効になります。 WinRM サービスを再起動するには、次のコマンドを実行します: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Set-WSManQuickConfig コマンドを実行すると、このコンピューターの WinRM サービスを介したリモート管理が可能になり、セキュリティに大きな影響があります。
+このコマンドは次のとおりです: 
+    1. WinRM サービスが実行されているかどうかを確認します。WinRM サービスが実行されていない場合は、サービスを開始します。
+    2. WinRM サービスのスタートアップの種類を自動に設定されます。
+    3. 任意の IP アドレスで要求を受け入れるリスナーが作成されます。既定では、トランスポートは HTTP です。
+    4. WS-Management トラフィックのファイアウォール例外が有効になります。
+    5. Kerberos および Negotiate サービス認証が有効になります。
+このコンピューターの WinRM サービスを使用してリモート管理を有効にしますか?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>RunAsPassword の値は、RunAsUser に値を設定しないと設定できません。-Path 属性の値が RunAsUser の値と等しい Set-Item コマンドレットを呼び出して、PowerShell で RunAsUser と RunAsPassword の両方の値を設定してください。</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>更新された構成は、プラグインごとのクォータ値が {0} より大きいプラグインの操作に影響する可能性があります。登録されているすべてのプラグインの構成を確認し、影響を受けるプラグインの、プラグインごとのクォータ値を変更します。</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>このコマンドは、Item の値を設定します。
+
+続行しますか?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>このマシンは、次のターゲットへの新しい資格情報の委任を許可するように構成されています:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>WsMan Config Storage のルート。</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>WinRM サービスが開始されていないため、このコマンドを実行できません。</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>ルート パスが存在しないため、このコマンドは使用できません。ルート パスを確認し、コマンドを実行してください。</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Remove-Item はこのレベルのプロバイダー パスではサポートされていないため、現在のパスではこのコマンドを使用できません。</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>このコマンドは、WinRM クライアントの TrustedHosts リストを変更します。TrustedHosts リスト内のコンピューターが認証されていない可能性があります。クライアントは、これらのコンピューターに資格情報を送信する場合があります。このリストを変更しますか?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>このコマンドにより WinRM サービスの RootSDDL 設定が変更されます。 RootSDDL には、独自の SDDL を指定しない WinRM セキュリティ保護可能なリソースの既定のセキュリティ設定が格納されます。SDDL を変更すると、多くの WinRM リソースのセキュリティに影響する可能性があります。これらの既定の設定を変更しますか?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>認証アルゴリズムが Basic または Digest であるため、このコマンドは資格情報なしでは使用できません。Credentials パラメーターを使用して値を指定し、コマンドを実行してください。</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>更新された構成は、グローバル クォータ {0} の値以下の場合にのみ有効です。PowerShell コマンドレット "Get-Item {0}" を使用して、グローバル クォータの値を確認します。</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>設定を無効にできないため、このコマンドを実行できません。</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>パス {1} に "{0}" 要素の値が見つかりません。</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>資格情報が指定されているため、基本認証アルゴリズムまたはダイジェスト認証アルゴリズムがないと、このコマンドを使用できません。基本認証アルゴリズムまたはダイジェスト認証アルゴリズムを使用して、コマンドを実行してください。</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM セキュリティの構成を同期します。</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>New-Item はこのレベルのプロバイダー パスでサポートされていないため、現在のパスではこのコマンドを使用できません。</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>構成が壊れているため、このコマンドは使用できません。WinRM を実行して Restore WinRM/config を呼び出し、既定の構成を復元します</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>パラメーター値の型が無効なため、このコマンドは使用できません。{0} 構成では、型 {1} の値が必要です。値が正しいことを確認してから、もう一度やり直してください。</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>WinRM サービスは現在開始されていません。このコマンドを実行すると、WinRM サービスが開始されます。
+
+続行しますか?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>パラメーターが ResourceURI のどのプロパティとも一致しないため、このコマンドを使用できません。入力パラメーターを確認して、コマンドを実行してください。</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>このコンピューターは、リモート クライアント コンピューターから資格情報を受信するように構成されています。</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>{1} パラメーター値が {2} の場合、{0} パラメーターは使用できません。{0} パラメーターは、{1} パラメーター値が {3} の場合にのみ使用できます。</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>行った構成の変更は、WinRM サービスが {0} に再起動された後にのみ有効になります。</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>このコマンドは、現在のパスからは使用できません。cd\ を使用してプロバイダーのルート パスに移動し、コマンドをもう一度実行してください。</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>この PowerShell スナップインには、PowerShell ホストが WSMan 操作を管理するために使用するコマンドレット (Get-WSManInstance や Set-WSManInstance など) が含まれています。</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>このコマンドは、常に接続されるため、コンピューター 'localhost' を削除するために使用できません。他の接続されたコンピューターを指定して、コマンドを実行します。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>このコマンドは、新しい ClientCertificate 項目を作成します。
+
+続行しますか?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>RunAsPassword 値を削除できません。PowerShell で -Path 属性の値が RunAsUser の値と等しい Clear-Item コマンドレットを呼び出して、RunAsUser と RunAsPassword の値を削除してください。</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>指定されたルートを持つドライブを作成できません。ルート パスが存在しません。</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>パラメーターが ResourceURI の複数のプロパティと一致するため、このコマンドを使用できません。入力パラメーターを確認して、コマンドを実行してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/ko/WsManResources.ko.resx b/src/Microsoft.WSMan.Management/resources/ko/WsManResources.ko.resx
new file mode 100644
index 00000000000..342d7618ef0
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/ko/WsManResources.ko.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>This command cannot be used because file does not exist.Check the file existence and run your command.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Creates a new ClientCertificate item.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>This command cannot be executed because the Connection URI is not in correct format. Please check the connection uri and Run your command again.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP authentication allows the user credentials on this computer to be sent to a remote computer. If you use CredSSP authentication for a connection to a malicious or compromised computer, that computer will have access to your user name and password. For more information, see the Enable-WSManCredSSP Help topic.
+Do you want to enable CredSSP authentication?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Creates a new Listener item.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>This command modifies the security settings on a resource in the following WinRM plug-in: {0}.
+Do you want to continue?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" on the WinRM configuration setting "{0}" to update the value to "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>This command cannot be executed because the setting cannot be enabled.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>This command creates a new Listener item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Access is denied. You need to run this cmdlet from an elevated process.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>This command cannot be used because WsMan drive root is not supported on this version of Windows OS.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Start WinRM Service</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP authentication allows the server to accept user credentials from a remote computer. If you enable CredSSP authentication on the server, the server will have access to the user name and password of the client computer if the client computer sends them. For more information, see the Enable-WSManCredSSP Help topic.
+Do you want to enable CredSSP authentication?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>This command cannot set the input value because these values are Primary keys or Container items of the resource object. Change the input value and Run your command.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>CredSSP Authentication Configuration for WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Set the value of the item</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Cannot convert 'System.Object[]' to the type 'System.String' required by the parameter. Specified method is not supported.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>This computer is not configured to receive credentials from a remote client computer.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>This PowerShell cmdlet is not available on for Windows XP and Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter matches a non-text property on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>The WinRM client cannot complete the operation.Check if the computer name is valid.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>The {0} parameter is mandatory when the {1} parameter value is {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>This command cannot be used because Parameter Value is not supplied. Check the value again and run your command.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>This command cannot be used because path does not exist.Check the path existence and run your command.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Security Configuration for WinRM Plug-in.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because this cmdlet is not supported at this level of Provider path.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>The machine is not configured to allow delegating fresh credentials.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>The configuration changes you made will only be effective after the WinRM service is restarted.  To restart the WinRM service, run the following command: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Running the Set-WSManQuickConfig command has significant security implications, as it enables remote management through the WinRM service on this computer.
+This command:
+    1. Checks whether the WinRM service is running. If the WinRM service is not running, the service is started.
+    2. Sets the WinRM service startup type to automatic.
+    3. Creates a listener to accept requests on any IP address. By default, the transport is HTTP.
+    4. Enables a firewall exception for WS-Management traffic.
+    5. Enables Kerberos and Negotiate service authentication.
+Do you want to enable remote management through the WinRM service on this computer?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>The value for RunAsPassword cannot be set without a value set for RunAsUser. Set the value for both RunAsUser and RunAsPassword in Powershell by calling the Set-Item cmdlet with the value for -Path attribute equal to the value of RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>The updated configuration might affect the operation of the plugins having a per plugin quota value greater than {0}. Verify the configuration of all the registered plugins and change the per plugin quota values for the affected plugins.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>This command set the value of the Item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>The machine is configured to allow delegating fresh credentials to the following target(s):</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Root of WsMan Config Storage.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>This command cannot be executed because the WinRM Service is not started.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>This command cannot be used because root path does not exist.Check the root path and run your command.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because Remove-Item is not supported at this level of Provider path.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>This command modifies the TrustedHosts list for the WinRM client. The computers in the TrustedHosts list might not be authenticated. The client might send credential information to these computers. Are you sure that you want to modify this list?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>This command modifies the RootSDDL setting for the WinRM service.  The RootSDDL stores the default security settings for any WinRM securable resource that does not specify its own SDDL. Changing the SDDL might affect security for many WinRM resources. Are you sure that you want to modify these default settings?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>This command cannot be used without credential because the authentication algorithm is Basic or Digest. Use Credentials parameter to specify value and run your command.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>The updated configuration is effective only if it is less than or equal to the value of global quota {0}. Verify the value for the global quota using the PowerShell cmdlet "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>This command cannot be executed because the setting cannot be disabled.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Unable to find value for "{0}" element in the path {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>This command cannot be used without Basic or Digest authentication algorithm because credentials are specified.Use Basic or Digest authentication algorithm and run your command.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM Security Configuration.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>This command cannot be used in the current path because New-Item is not supported at this level of Provider path.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>This command cannot be used because the configuration is corrupted. Run WinRM invoke Restore WinRM/config to restore the default configuration</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>This command cannot be used because the parameter value type is invalid. {0} configuration expects a value of Type {1}. Verify that the value is correct and try again.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>WinRM service is not started currently. Running this command will start the WinRM service.
+
+Do you want to continue?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter does not match any properties on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>This computer is configured to receive credentials from a remote client computer.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>The {0} parameter cannot be used when the {1} parameter value is {2}. The {0} parameter can be used only when the {1} parameter value is {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>The configuration changes you made will only be effective after the WinRM service is restarted on {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>This command cannot be used from the current path. Move to root path of the provider using cd\ and run your command again.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>This PowerShell snap-in contains cmdlets (such as Get-WSManInstance and Set-WSManInstance) that are used by the PowerShell host to manage WSMan operations.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>This command cannot be used to remove the computer 'localhost' because it will always be connected. Give some other connected computer and run your command.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>This command creates a new ClientCertificate item.
+
+Do you want to continue?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>The RunAsPassword value cannot be removed. Remove the values for RunAsUser and RunAsPassword in PowerShell by calling the Clear-Item cmdlet with the value for -Path attribute equal to the value of RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Unable to create a drive with the specified root. The root path does not exist.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>This command cannot be used because the parameter matches multiple properties on the ResourceURI.Check the input parameters and run your command.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/pl/WsManResources.pl.resx b/src/Microsoft.WSMan.Management/resources/pl/WsManResources.pl.resx
new file mode 100644
index 00000000000..825f677f4f6
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/pl/WsManResources.pl.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Nie można użyć tego polecenia, ponieważ plik nie istnieje. Sprawdź, czy plik istnieje i uruchom swoje polecenie.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Tworzy nowy element ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Nie można wykonać tego polecenia, ponieważ identyfikator URI połączenia ma nieprawidłowy format. Sprawdź identyfikator URI połączenia i uruchom polecenie ponownie.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>Uwierzytelnianie CredSSP umożliwia wysłanie poświadczeń użytkownika na tym komputerze do komputera zdalnego. Jeśli użyjesz uwierzytelniania CredSSP podczas łączenia się ze złośliwym komputerem lub który ma naruszone zabezpieczenia, komputer ten uzyska dostęp do Twojej nazwy użytkownika i hasła. Więcej informacji można znaleźć w temacie pomocy Enable-WSManCredSSP.
+Czy chcesz włączyć uwierzytelnianie CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Tworzy nowy element nasłuchujący.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>To polecenie modyfikuje ustawienia zabezpieczeń zasobu w następującym dodatku usługi WinRM: {0}.
+Czy na pewno chcesz kontynuować?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>Element „Set-Item” w ustawieniu konfiguracji usługi WinRM „{0}”, aby zaktualizować wartość na „{1}”</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Nie można wykonać tego polecenia, ponieważ nie można włączyć ustawienia.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>To polecenie tworzy nowy element nasłuchujący.
+
+Czy na pewno chcesz kontynuować?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Odmowa dostępu. To polecenie cmdlet trzeba uruchomić z procesu z podwyższonymi uprawnieniami.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Tego polecenia nie można użyć, ponieważ katalog główny dysku WsMan nie jest obsługiwany w tej wersji systemu operacyjnego Windows.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Uruchom usługę WinRM</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>Uwierzytelnianie CredSSP umożliwia serwerowi akceptowanie poświadczeń użytkownika z komputera zdalnego. Jeśli włączysz uwierzytelnianie CredSSP na serwerze, serwer uzyska dostęp do nazwy użytkownika i hasła komputera klienckiego, jeśli ten je prześle. Więcej informacji można znaleźć w temacie pomocy Enable-WSManCredSSP.
+Czy chcesz włączyć uwierzytelnianie CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Szybka konfiguracja usługi WinRM</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Tego polecenia nie można użyć do ustawienia wartości wejściowej, ponieważ są to klucze podstawowe lub elementy kontenera obiektu zasobu. Zmień wartość wejściową i uruchom swoje polecenie.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Konfiguracja uwierzytelniania CredSSP dla protokołu WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Ustaw wartość elementu</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Nie można przekonwertować elementu „System.Object[]” na typ „System.String” wymagany przez parametr. Podana metoda nie jest obsługiwana.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Ten komputer nie jest skonfigurowany do odbierania poświadczeń ze zdalnego komputera klienckiego.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Tego polecenia nie można użyć z bieżącej ścieżki. Przejdź do ścieżki katalogu głównego dostawcy za pomocą polecenia cd\ i ponownie uruchom swoje polecenie.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>To polecenie cmdlet programu PowerShell nie jest dostępne w systemach Windows XP i Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Tego polecenia nie można użyć, ponieważ parametr jest zgodny z właściwością inną niż tekstowa w identyfikatorze URI zasobu. Sprawdź parametry wejściowe i uruchom swoje polecenie.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Nie można określić elementu {0}, gdy określono element{1}.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>Klient usługi WinRM nie może ukończyć operacji. Sprawdź, czy nazwa komputera jest prawidłowa.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>Parametr {0} jest wymagany, gdy wartość parametru {1} to {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Tego polecenia nie można użyć, ponieważ nie podano wartości parametru. Sprawdź ponownie wartość i uruchom swoje polecenie.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Nie można użyć tego polecenia, ponieważ ścieżka nie istnieje. Sprawdź, czy ścieżka istnieje i uruchom swoje polecenie.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Konfiguracja zabezpieczeń wtyczki usługi WinRM.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Tego polecenia nie można użyć w bieżącej ścieżce, ponieważ to polecenie cmdlet nie jest obsługiwane na tym poziomie ścieżki dostawcy.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Maszyna nie jest skonfigurowana w sposób umożliwiający delegowanie nowych poświadczeń.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Wprowadzone zmiany konfiguracji zaczną obowiązywać dopiero po ponownym uruchomieniu usługi WinRM.  Aby ponownie uruchomić usługę WinRM, uruchom następujące polecenie: „Restart-Service winrm”</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Uruchomienie polecenia Set-WSManQuickConfig ma istotny wpływ na zabezpieczenia, ponieważ włącza zdalne zarządzanie na tym komputerze za pośrednictwem usługi WinRM.
+To polecenie:
+    1. Sprawdza, czy usługa WinRM jest uruchomiona. Jeżeli usługa WinRM nie jest uruchomiona, zostanie ona uruchomiona.
+    2. Ustawia typ uruchamiania usługi WinRM na automatyczny.
+    3. Tworzy obiekt nasłuchujący, który będzie akceptował żądania z dowolnego adresu IP. Domyślnie transportem jest protokół HTTP.
+    4. Włącza wyjątek zapory dla ruchu WS-Management.
+    5. Włącza uwierzytelnianie usługi Kerberos i Negotiate.
+Czy chcesz włączyć zdalne zarządzanie za pośrednictwem usługi WinRM na tym komputerze?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>Nie można ustawić wartości RunAsPassword bez ustawienia wartości RunAsUser. Ustaw wartości dla elementów RunAsUser i RunAsPassword w programie PowerShell, wywołując polecenie cmdlet „Set-Item” z wartością atrybutu ścieżki równą wartości RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>Zaktualizowana konfiguracja może wpłynąć na działanie wtyczek, których wartość limitu na wtyczkę jest większa niż {0}. Sprawdź konfigurację wszystkich zarejestrowanych wtyczek i zmień wartości limitu dla wtyczek, których to dotyczy.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>To polecenie ustawia wartość elementu.
+
+Czy na pewno chcesz kontynuować?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Maszyna jest skonfigurowana tak, aby zezwalać na delegowanie świeżych poświadczeń do następujących elementów docelowych:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Katalog główny magazynu konfiguracji WsMan.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Nie można wykonać tego polecenia, ponieważ usługa WinRM nie jest uruchomiona.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Tego polecenia nie można użyć, ponieważ ścieżka katalogu głównego nie istnieje. Sprawdź ścieżkę katalogu głównego i uruchom swoje polecenie.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Tego polecenia nie można użyć w bieżącej ścieżce, ponieważ element Remove-Item nie jest obsługiwane na tym poziomie ścieżki dostawcy.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>To polecenie modyfikuje listę TrustedHosts dla klienta usługi WinRM. Komputery znajdujące się na liście TrustedHosts mogą nie być uwierzytelnione. Klient może wysłać informacje o poświadczeniach do tych komputerów. Czy na pewno chcesz zmodyfikować tę listę?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>To polecenie modyfikuje ustawienie RootSDDL dla usługi WinRM.  Parametr RootSDDL przechowuje domyślne ustawienia zabezpieczeń dla każdego zabezpieczanego zasobu usługi WinRM, który nie określa własnego parametru SDDL. Zmiana parametru SDDL może mieć wpływ na zabezpieczenia wielu zasobów usługi WinRM. Czy na pewno chcesz zmodyfikować te ustawienia domyślne?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Tego polecenia nie można użyć bez poświadczeń, ponieważ algorytm uwierzytelniania jest podstawowy lub szyfrowany. Użyj parametru poświadczeń, aby określić wartość i uruchomić polecenie.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>Zaktualizowana konfiguracja jest skuteczna tylko wtedy, gdy jest mniejsza lub równa wartości globalnego limitu przydziału {0}. Sprawdź wartość globalnego limitu przydziału przy użyciu polecenia cmdlet programu PowerShell „Get-Item {0}”.</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Nie można wykonać tego polecenia, ponieważ nie można wyłączyć ustawienia.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Nie można odnaleźć wartości dla elementu „{0}” w ścieżce {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Tego polecenia nie można użyć bez algorytmu uwierzytelniania podstawowego lub szyfrowanego, ponieważ określono poświadczenia. Użyj algorytmu uwierzytelniania podstawowego lub szyfrowanego i uruchom swoje polecenie.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Konfiguracja zabezpieczeń usługi WinRM.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Tego polecenia nie można użyć w bieżącej ścieżce, ponieważ element New-Item nie jest obsługiwane na tym poziomie ścieżki dostawcy.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Tego polecenia nie można użyć, ponieważ konfiguracja jest uszkodzona. Uruchom usługę WinRM wywołaj polecenie „Restore WinRM/config”, aby przywrócić konfigurację domyślną</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Nie można użyć tego polecenia, ponieważ typ wartości parametru jest nieprawidłowy. Konfiguracja {0} oczekuje wartości typu {1}. Sprawdź, czy wartość jest poprawna, i spróbuj ponownie.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>Usługa WinRM nie jest obecnie uruchomiona. Uruchomienie tego polecenia spowoduje uruchomienie usługi WinRM.
+
+Czy na pewno chcesz kontynuować?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Nie można użyć tego polecenia, ponieważ parametr nie pasuje do żadnej właściwości w identyfikatorze ResourceURI. Sprawdź parametry wejściowe i uruchom swoje polecenie.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Ten komputer jest skonfigurowany do odbierania poświadczeń ze zdalnego komputera klienckiego.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>Nie można użyć parametru {0}, gdy wartość parametru {1} to {2}. Parametr {0} można stosować tylko wtedy, gdy wartością parametru {1} jest {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Wprowadzone zmiany konfiguracji zaczną obowiązywać dopiero po ponownym uruchomieniu usługi WinRM na {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Tego polecenia nie można użyć z bieżącej ścieżki. Przejdź do ścieżki katalogu głównego dostawcy za pomocą polecenia cd\ i ponownie uruchom swoje polecenie.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Ta przystawka programu PowerShell zawiera polecenia cmdlet (takie jak Get-WSManInstance i Set-WSManInstance), które są używane przez hosta programu PowerShell do zarządzania operacjami WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Tego polecenia nie można użyć do usunięcia komputera „localhost”, ponieważ będzie on zawsze połączony. Podaj inny połączony komputer i uruchom swoje polecenie.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>To polecenie tworzy nowy element ClientCertificate.
+
+Czy na pewno chcesz kontynuować?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>Nie można usunąć wartości RunAsPassword. Usuń wartości RunAsUser i RunAsPassword w programie PowerShell, wywołując polecenie cmdlet „Clear-Item” z wartością atrybutu ścieżki równą wartości RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Nie można utworzyć dysku z określonym katalogiem głównym. Ścieżka główna nie istnieje.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Nie można użyć tego polecenia, ponieważ parametr pasuje do wielu właściwości w identyfikatorze ResourceURI. Sprawdź parametry wejściowe i uruchom swoje polecenie.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/pt-BR/WsManResources.pt-BR.resx b/src/Microsoft.WSMan.Management/resources/pt-BR/WsManResources.pt-BR.resx
new file mode 100644
index 00000000000..ffc030df191
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/pt-BR/WsManResources.pt-BR.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o arquivo não existe. Verifique a existência do arquivo e faça a execução do seu comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Crie um item ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Este comando não pode ser executado porque o URI de Conexão não está no formato correto. Verifique o URI de conexão e faça a execução do seu comando novamente.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>A autenticação CredSSP permite que as credenciais do usuário neste computador sejam enviadas a um computador remoto. Se você usar a autenticação CredSSP para uma conexão com um computador mal-intencionado ou comprometido, esse computador terá acesso ao seu nome de usuário e à sua senha. Para obter mais informações, confira o tópico da Ajuda Enable-WSManCredSSP.
+Deseja habilitar a autenticação CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Cria um item Ouvinte.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Este comando modifica as configurações de segurança de um recurso no seguinte plug-in do WinRM: {0}.
+Deseja continuar?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" na configuração "{0}" do WinRM para atualizar o valor para "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Este comando não pode ser executado porque a configuração não pode ser habilitada.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Este comando cria um item Ouvinte.
+
+Deseja continuar?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Acesso negado. Você precisa executar este cmdlet em um processo elevado.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Este comando não pode ser usado porque a raiz da unidade WsMan não tem suporte nesta versão do Sistema Operacional Windows.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Iniciar Serviço WinRM</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>A autenticação CredSSP permite que o servidor aceite credenciais do usuário de um computador de repositório remoto. Se você habilitar a autenticação CredSSP no servidor, o servidor terá acesso ao nome de usuário e à senha do computador cliente se o computador cliente os enviar. Para obter mais informações, confira o tópico da Ajuda Enable-WSManCredSSP.
+Deseja habilitar a autenticação CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Configuração Rápida do WinRM</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Este comando não pode definir o valor de entrada porque esses valores são chaves primárias ou itens de Contêiner do objeto de recurso. Altere o valor de entrada e execute seu comando.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Configuração de Autenticação do CredSSP para WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Defina o valor do item</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Não é possível converter 'System.Object[]' no tipo 'System.String' exigido pelo parâmetro. O método especificado não tem suporte.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Este computador não está configurado para receber credenciais de um computador cliente remoto.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Este comando não pode ser usado a partir do caminho atual. Mova para o caminho raiz do provedor usando cd\ e execute seu comando novamente.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Este cmdlet do PowerShell não está disponível para Windows XP e Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o parâmetro corresponde a uma propriedade que não é de texto no ResourceURI. Verifique os parâmetros de entrada e execute seu comando.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>Não é possível especificar {0} quando {1} está especificado.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>O cliente WinRM não pode concluir a operação. Verifique se o nome do computador é válido.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>O parâmetro {0} é obrigatório quando o valor do parâmetro {1} é {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o Valor do Parâmetro não foi fornecido. Verifique o valor novamente e execute seu comando.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o caminho não existe. Verifique a existência do caminho e execute seu comando.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Configuração de Segurança para o Plug-in do WinRM.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Este comando não pode ser usado no caminho atual porque esse cmdlet não tem suporte neste nível do caminho do Provedor.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>O computador não está configurado para permitir a delegação de novas credenciais.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>As alterações de configuração feitas só serão efetivas depois que o serviço WinRM for reiniciado.  Para reiniciar o serviço WinRM, faça a execução do seguinte comando: 'Restart-Serviço winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>A execução do comando Set-WSManQuickConfig tem implicações significativas de segurança, pois habilita o gerenciamento remoto por meio do serviço WinRM neste computador.
+Este comando:
+    1. Verifica se o serviço WinRM está em execução. Se o serviço WinRM não estiver em execução, o serviço será iniciado.
+    2. Define o tipo de inicialização do serviço WinRM como automático.
+    3. Cria um ouvinte para aceitar solicitações em qualquer endereço IP. Por padrão, o transporte é HTTP.
+    4. Habilita uma exceção de firewall para o tráfego do WS-Management.
+    5. Habilita a autenticação de serviço por Kerberos e Negotiate.
+Deseja habilitar o gerenciamento remoto por meio do serviço WinRM neste computador?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>O valor de RunAsPassword não pode ser definido sem um conjunto de valores para RunAsUser. Defina o valor de RunAsUser e RunAsPassword no Powershell por meio da chamada do cmdlet Set-Item com o valor do atributo -Path igual ao valor de RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>A configuração atualizada pode afetar a operação dos plugins que têm um valor de cota por plugin superior a {0}. Verifique a configuração de todos os plugins registrados e altere os valores de cota por plugin dos plugins afetados.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Este comando define o valor do Item.
+
+Deseja continuar?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>O computador está configurado para permitir a delegação de credenciais novas aos seguintes destinos:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Raiz do Armazenamento de Configuração do WsMan.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Este comando não pode ser executado porque o Serviço WinRM não foi iniciado.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o caminho raiz não existe. Verifique o caminho raiz e execute seu comando.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Este comando não pode ser usado no caminho atual porque Remove-Item não tem suporte neste nível do caminho do Provedor.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Este comando modifica a lista TrustedHosts do cliente WinRM. Os computadores na lista TrustedHosts podem não estar autenticados. O cliente pode enviar informações de credencial a esses computadores. Tem certeza de que deseja modificar esta lista?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Este comando modifica a configuração RootSDDL do serviço WinRM.  RootSDDL armazena as configurações de segurança padrão de qualquer recurso protegível do WinRM que não especifique seu próprio SDDL. A alteração da SDDL pode afetar a segurança de muitos recursos do WinRM. Tem certeza de que deseja modificar essas configurações padrão?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Este comando não pode ser usado sem uma credencial porque o algoritmo de autenticação é Basic ou Digest. Use o parâmetro Credentials para especificar o valor e executar seu comando.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>A configuração atualizada só será efetiva se for menor ou igual ao valor da cota global {0}. Verifique o valor da cota global usando o cmdlet do PowerShell "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Este comando não pode ser executado porque a configuração não pode ser desabilitada.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Não é possível localizar o valor do elemento "{0}" no caminho {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Este comando não pode ser usado sem o algoritmo de autenticação Basic ou Digest porque há credenciais especificadas. Use o algoritmo de autenticação Basic ou Digest e faça a execução do seu comando.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Configuração de Segurança do WinRM.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Este comando não pode ser usado no caminho atual porque New-Item não tem suporte neste nível do caminho do Provedor.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Este comando não pode ser usado porque a configuração está corrompida. Execute WinRM invoke Restore WinRM/config para restaurar a configuração padrão</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o tipo de valor do parâmetro é inválido. A configuração {0} espera um valor do Tipo {1}. Verifique se o valor está correto e tente novamente.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>O serviço WinRM não está em execução no momento. A execução deste comando iniciará o serviço WinRM.
+
+Deseja continuar?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o parâmetro não corresponde a nenhuma propriedade em ResourceURI. Verifique os parâmetros de entrada e execute o comando.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Este computador está configurado para receber credenciais de um computador cliente remoto.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>O parâmetro {0} não pode ser usado quando o valor do parâmetro {1} é {2}. O parâmetro {0} só pode ser usado quando o valor do parâmetro {1} é {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>As alterações de configuração feitas só serão efetivas depois que o serviço WinRM for reiniciado em {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Este comando não pode ser usado a partir do caminho atual. Mova para o caminho raiz do provedor usando cd\ e execute seu comando novamente.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Este snap-in do PowerShell contém cmdlets (como Get-WSManInstance e Set-WSManInstance) que são usados pelo host do PowerShell para gerenciar operações do WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Este comando não pode ser usado para remover o computador 'localhost' porque ele permanecerá sempre conectado. Forneça outro computador conectado e execute seu comando.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Este comando cria um item ClientCertificate.
+
+Deseja continuar?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>O valor RunAsPassword não pode ser removido. Remover os valores de RunAsUser e RunAsPassword no PowerShell por meio da chamada Clear-Item do cmdlet com o valor do atributo -Path igual ao valor de RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Não é possível criar uma unidade com a raiz especificada. O caminho raiz não existe.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Este comando não pode ser usado porque o parâmetro corresponde a várias propriedades no ResourceURI. Verifique os parâmetros de entrada e execute o comando novamente.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/ru/WsManResources.ru.resx b/src/Microsoft.WSMan.Management/resources/ru/WsManResources.ru.resx
new file mode 100644
index 00000000000..81c0e215ed5
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/ru/WsManResources.ru.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как файл не существует. Проверьте существование файла и выполните команду.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Создает новый элемент ClientCertificate.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Эту команду нельзя выполнить, так как URI подключения имеет неверный формат. Проверьте URI подключения и выполните команду еще раз.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>Проверка подлинности CredSSP позволяет передавать учетные данные пользователя с этого компьютера на удаленный компьютер. Если для подключения к вредоносному или взломанному компьютеру используется проверка подлинности CredSSP, этот компьютер получит доступ к имени пользователя и паролю. Подробнее см. в разделе «Справка по Enable-WSManCredSSP».
+Вы хотите включить проверку подлинности CredSSP?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Создает новый элемент Listener.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Эта команда изменяет параметры безопасности ресурса в следующем подключаемом модуле WinRM: {0}.
+Продолжить?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>"Set-Item" для параметра конфигурации WinRM {0} для обновления значения до {1}</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Эту команду нельзя выполнить, так как параметр нельзя включить.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Эта команда создает новый элемент Listener.
+
+Продолжить?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>В доступе отказано. Необходимо запустить этот командлет из процесса с повышенными правами.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как корень диска WsMan не поддерживается в этой версии Windows.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>Запустить службу WinRM</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>Проверка подлинности CredSSP позволяет серверу принимать учетные данные пользователя с удаленного компьютера. Если на сервере включена проверка подлинности CredSSP, сервер получит доступ к имени пользователя и паролю клиентского компьютера, если клиентский компьютер их отправит. Подробнее см. в разделе «Справка по Enable-WSManCredSSP».
+Вы хотите включить проверку подлинности CredSSP?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>Быстрая настройка WinRM</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Корпорация Майкрософт</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Этой команде не удается задать входное значение, так как эти значения являются первичными ключами или элементами контейнера объекта ресурса. Измените входное значение и выполните команду.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>Конфигурация проверки подлинности CredSSP для WS-Management</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Задать значение элемента</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>Не удается преобразовать System.Object[] в тип System.String, требуемый параметром. Указанный метод не поддерживается.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Этот компьютер не настроен на получение учетных данных от удаленного клиентского компьютера.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Эту команду нельзя использовать из текущего пути. Перейдите в корневой путь поставщика с помощью cd\ и выполните команду еще раз.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Этот командлет PowerShell недоступен в Windows XP и Windows Server 2003.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как параметр соответствует нетекстовому свойству ResourceURI. Проверьте входные параметры и выполните команду.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>{0} нельзя указывать, если указан {1}.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>Клиенту WinRM не удается завершить операцию. Проверьте, что имя компьютера указано правильно.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>Параметр {0} обязателен, если параметр {1} имеет значение {2}.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как не указано значение параметра. Проверьте значение еще раз и выполните команду.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как путь не существует. Проверьте существование пути и выполните команду.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>Конфигурация безопасности для подключаемого модуля WinRM.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Эту команду нельзя использовать в текущем пути, так как этот командлет не поддерживается на этом уровне пути поставщика.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Параметры компьютера не позволяют делегировать новые учетные данные.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Внесенные изменения конфигурации вступят в силу только после перезапуска службы WinRM.  Чтобы перезапустить службу WinRM, выполните следующую команду: Restart-Service winrm</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Выполнение команды Set-WSManQuickConfig имеет серьезные последствия для безопасности, так как она включает удаленное управление через службу WinRM на этом компьютере.
+Эта команда:
+    1. Проверяет, запущена ли служба WinRM. Если служба WinRM не запущена, она запускается.
+    2. Устанавливает автоматический тип запуска службы WinRM.
+    3. Создает прослушиватель для принятия запросов по любому IP-адресу. По умолчанию транспортом является HTTP.
+    4. Включает исключение брандмауэра для трафика WS-Management.
+    5. Включает проверку подлинности службы Kerberos и Negotiate.
+Вы хотите включить удаленное управление через службу WinRM на этом компьютере?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>Значение RunAsPassword нельзя задать, пока не задано значение RunAsUser. Задайте значения для RunAsUser и RunAsPassword в PowerShell, вызвав командлет Set-Item со значением атрибута -Path, равным значению RunAsUser.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>Обновленная конфигурация может повлиять на работу подключаемых модулей, у которых значение квоты на один модуль больше {0}. Проверьте конфигурацию всех зарегистрированных подключаемых модулей и измените значения квоты для затронутых модулей.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Эта команда устанавливает значение элемента.
+
+Продолжить?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Компьютер настроен на разрешение делегирования новых учетных данных следующим целевым объектам:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>Корень хранилища конфигурации WsMan.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>Эту команду нельзя выполнить, так как служба WinRM не запущена.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как корневой путь не существует. Проверьте корневой путь и выполните команду.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Эту команду нельзя использовать в текущем пути, так как Remove-Item не поддерживается на этом уровне пути поставщика.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Эта команда изменяет список TrustedHosts для клиента WinRM. Компьютеры в списке TrustedHosts могут не проходить проверку подлинности. Клиент может отправить этим компьютерам сведения об учетных данных. Вы действительно хотите изменить этот список?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Эта команда изменяет параметр RootSDDL для службы WinRM.  RootSDDL хранит параметры безопасности по умолчанию для любого защищаемого ресурса WinRM, который не задает собственный SDDL. Изменение SDDL может повлиять на безопасность многих ресурсов WinRM. Вы уверены, что хотите изменить эти параметры по умолчанию?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Эту команду нельзя использовать без учетных данных, так как алгоритм проверки подлинности — Basic или Digest. Укажите значение с помощью параметра Credentials и выполните команду.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>Обновленная конфигурация вступает в силу, только если ее значение меньше или равно значению глобальной квоты {0}. Проверьте значение глобальной квоты с помощью командлета PowerShell "Get-Item {0}".</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Эту команду нельзя выполнить, так как параметр нельзя отключить.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>Не удалось найти значение элемента {0} в пути {1}.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Эту команду нельзя использовать без алгоритма проверки подлинности Basic или Digest, так как указаны учетные данные. Используйте алгоритм проверки подлинности Basic или Digest и выполните команду.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>Конфигурация безопасности WinRM.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Эту команду нельзя использовать в текущем пути, так как New-Item не поддерживается на этом уровне пути поставщика.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как конфигурация повреждена. Запустите WinRM invoke Restore WinRM/config, чтобы восстановить конфигурацию по умолчанию</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Невозможно использовать эту команду, так как тип значения параметра недопустим. Конфигурация {0} ожидает значение типа {1}. Проверьте правильность значения и повторите попытку.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>Служба WinRM сейчас не запущена. При выполнении этой команды служба WinRM будет запущена.
+
+Продолжить?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как параметр не соответствует ни одному свойству в ResourceURI. Проверьте входные параметры и выполните команду.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Этот компьютер настроен на получение учетных данных от удаленного клиентского компьютера.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>Параметр {0} нельзя использовать, если параметр {1} имеет значение {2}. Параметр {0} можно использовать, только если параметр {1} имеет значение {3}.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Внесенные изменения конфигурации вступят в силу только после перезапуска службы WinRM на {0}.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Эту команду нельзя использовать из текущего пути. Перейдите в корневой путь поставщика с помощью cd\ и выполните команду еще раз.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Эта оснастка PowerShell содержит такие командлеты как Get-WSManInstance и Set-WSManInstance, которые узел PowerShell использует для управления операциями WSMan.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Эту команду нельзя использовать для удаления localhost компьютера, так как он всегда будет подключен. Укажите другой подключенный компьютер и выполните команду.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Эта команда создает новый элемент ClientCertificate.
+
+Продолжить?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>Значение RunAsPassword нельзя удалить. Удалите значения RunAsUser и RunAsPassword в PowerShell, вызвав командлет Clear-Item со значением атрибута -Path, равным значению RunAsUser.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Не удалось создать диск с указанным корнем. Корневой путь не существует.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Эту команду нельзя использовать, так как параметр соответствует нескольким свойствам в ResourceURI. Проверьте входные параметры и выполните команду.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/tr/WsManResources.tr.resx b/src/Microsoft.WSMan.Management/resources/tr/WsManResources.tr.resx
new file mode 100644
index 00000000000..eaf77ad05f4
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/tr/WsManResources.tr.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>Dosya mevcut olmadığından bu komut kullanılamıyor. Dosyanın mevcut olduğunu denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>Yeni bir ClientCertificate öğesi oluşturur.</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>Bağlantı URI'si doğru biçimde olmadığından bu komut yürütülemiyor. Lütfen bağlantı URI'sini denetleyin ve komutunuzu yeniden çalıştırın.</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP kimlik doğrulaması, bu bilgisayardaki kullanıcı kimlik bilgilerinin uzak bir bilgisayara gönderilmesine izin verir. Kötü amaçlı veya güvenliği ihlal edilmiş bir bilgisayara bağlanmak için CredSSP kimlik doğrulamasını kullanırsanız, o bilgisayar kullanıcı adınıza ve parolanıza erişebilir. Daha fazla bilgi için Enable-WSManCredSSP Yardım konusuna bakın.
+CredSSP kimlik doğrulamasını etkinleştirmek istiyor musunuz?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>Yeni bir Dinleyici öğesi oluşturur.</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>Bu komut, şu WinRM eklentisindeki bir kaynağın güvenlik ayarlarını değiştirir: {0}.
+Devam etmek istiyor musunuz?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>Değeri "{1}" olarak güncelleştirmek için WinRM yapılandırma ayarı "{0}" üzerindeki "Set-Item"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Ayar etkinleştirilemediği için bu komut yürütülemiyor.</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>Bu komut yeni bir Dinleyici öğesi oluşturur.
+
+Devam etmek istiyor musunuz?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>Erişim reddedildi. Bu cmdlet'i yükseltilmiş bir işlemden çalıştırmanız gerekir.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>WsMan sürücü kökü Windows işletim sisteminin bu sürümünde desteklenmediğinden bu komut kullanılamıyor.</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>WinRM Hizmetini Başlat</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP kimlik doğrulaması, sunucunun uzak bir bilgisayardan kullanıcı kimlik bilgilerini kabul etmesine izin verir. Sunucuda CredSSP kimlik doğrulamasını etkinleştirirseniz, istemci bilgisayar bunları gönderirse sunucu istemci bilgisayarın kullanıcı adı ve parolasına erişebilir. Daha fazla bilgi için Enable-WSManCredSSP Yardım konusuna bakın.
+CredSSP kimlik doğrulamasını etkinleştirmek istiyor musunuz?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM Hızlı Yapılandırma</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>Bu komut, bu değerler kaynak nesnesinin Birincil anahtarları veya Kapsayıcı öğeleri olduğu için giriş değerini ayarlayamaz. Giriş değerini değiştirin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>WS-Management için CredSSP Kimlik Doğrulama Yapılandırması</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>Öğenin değerini ayarlayın</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>'System.Object[]', parametrenin gerektirdiği 'System.String' türüne dönüştürülemiyor. Belirtilen yöntem desteklenmiyor.</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>Bu bilgisayar, kimlik bilgilerini uzak bir istemci bilgisayardan alacak şekilde yapılandırıldı.</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>Bu komut geçerli yoldan kullanılamaz. cd\ kullanarak sağlayıcının kök yoluna gidin ve komutunuzu yeniden çalıştırın.</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Bu PowerShell cmdlet'i Windows XP ve Windows Server 2003'te kullanılamaz.</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>Parametre, ResourceURI üzerindeki metin olmayan bir özellikle eşleştiğinden bu komut kullanılamıyor. Giriş parametrelerini denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>{1} belirtildiğinde bir {0} belirtilemez.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>WinRM istemcisi işlemi tamamlayamıyor. Bilgisayar adının geçerli olup olmadığını denetleyin.</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>{0} parametresi, {1} parametresinin değeri {2}olduğunda zorunludur.</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>Parametre Değeri sağlanmadığından bu komut kullanılamıyor. Değeri yeniden denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>Yol mevcut olmadığından bu komut kullanılamıyor. Yolun mevcut olduğunu denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>WinRM Eklentisi için Güvenlik Yapılandırması.</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>Bu Sağlayıcı yolunun bu düzeyinde bu cmdlet desteklenmediğinden bu komut geçerli yolda kullanılamaz.</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>Makine, yeni kimlik bilgilerinin temsilci olarak atanmasına izin verecek şekilde yapılandırılmamış.</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>Yaptığınız yapılandırma değişiklikleri yalnızca WinRM hizmeti yeniden başlatıldıktan sonra etkili olur.  WinRM hizmetini yeniden başlatmak için şu komutu çalıştırın: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>Set-WSManQuickConfig komutunu çalıştırmak, bu bilgisayarda WinRM hizmeti aracılığıyla uzaktan yönetimi etkinleştirdiği için önemli güvenlik etkileri oluşturur.
+Bu komut:
+    1. WinRM hizmetinin çalışıp çalışmadığını denetler. WinRM hizmeti çalışmıyorsa, hizmet başlatılır.
+    2. WinRM hizmetinin başlangıç türünü otomatik olarak ayarlar.
+    Herhangi bir IP adresinde isteği kabul etmek için dinleyici oluşturur. Varsayılan olarak aktarım HTTP'dir.
+    4. WS-Management trafiği için bir güvenlik duvarı özel durumunu etkinleştirir.
+    5. Kerberos ve Negotiate hizmet kimlik doğrulamasını etkinleştirir.
+Bu bilgisayarda WinRM hizmeti aracılığıyla uzaktan yönetimi etkinleştirmek istiyor musunuz?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>RunAsUser için bir değer ayarlanmadan RunAsPassword değeri ayarlanamaz. -Path özniteliğinin değeri RunAsUser değerine eşit olacak şekilde Set-Item cmdlet'ini çağırarak PowerShell'de hem RunAsUser hem de RunAsPassword değerlerini ayarlayın.</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>Güncelleştirilmiş yapılandırma, eklenti başına kota değeri {0} değerinden büyük olan eklentilerin çalışmasını etkileyebilir. Tüm kayıtlı eklentilerin yapılandırmasını doğrulayın ve etkilenen eklentiler için eklenti başına kota değerlerini değiştirin.</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>Bu komut Item öğesinin değerini ayarlar.
+
+Devam etmek istiyor musunuz?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>Makine, yeni kimlik bilgilerinin aşağıdaki hedeflere temsilci olarak atanmasına izin verecek şekilde yapılandırıldı:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>WsMan Yapılandırma Depolamasının kökü.</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>WinRM Hizmeti başlatılmadığından bu komut yürütülemiyor.</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>Kök yolu mevcut olmadığından bu komut kullanılamıyor. Kök yolunu denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>Bu Sağlayıcı yolunun bu düzeyinde Remove-Item desteklenmediğinden bu komut geçerli yolda kullanılamaz.</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>Bu komut, WinRM istemcisinin TrustedHosts listesini değiştirir. TrustedHosts listesindeki bilgisayarların kimliği doğrulanmamış olabilir. İstemci, kimlik bilgilerini bu bilgisayarlara gönderebilir. Bu listeyi değiştirmek istediğinizden emin misiniz?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>Bu komut, WinRM hizmeti için RootSDDL ayarını değiştirir.  RootSDDL, kendi SDDL'sini belirtmeyen tüm WinRM güvenlikli kaynakları için varsayılan güvenlik ayarlarını depolar. SDDL'nin değiştirilmesi, birçok WinRM kaynağının güvenliğini etkileyebilir. Bu varsayılan ayarları değiştirmek istediğinizden emin misiniz?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>Kimlik doğrulama algoritması Temel veya Özet olduğu için bu komut kimlik bilgileri olmadan kullanılamaz. Değer belirtmek için Credentials parametresini kullanın ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>Güncelleştirilmiş yapılandırma yalnızca genel kota {0} değerinden küçük veya buna eşitse geçerlidir. Genel kota değerini PowerShell cmdlet'i "Get-Item {0}" ile doğrulayın.</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>Ayar devre dışı bırakılamadığı için bu komut yürütülemiyor.</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>{1} yolunda "{0}" öğesi için değer bulunamıyor.</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>Kimlik bilgileri belirtildiği için bu komut Temel veya Özet kimlik doğrulama algoritması olmadan kullanılamaz. Temel veya Özet kimlik doğrulama algoritmasını kullanın ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM Güvenlik Yapılandırması.</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>Bu Sağlayıcı yolunun bu düzeyinde New-Item desteklenmediğinden bu komut geçerli yolda kullanılamaz.</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>Yapılandırma bozuk olduğundan bu komut kullanılamıyor. Varsayılan yapılandırmayı geri yüklemek için WinRM invoke Restore WinRM/config komutunu çalıştırın</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>Parametre değeri türü geçersiz olduğundan bu komut kullanılamaz. {0} yapılandırması, {1} Türünde bir değer bekliyor. Değerin doğru olduğundan emin olun ve yeniden deneyin.</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>WinRM hizmeti şu anda başlatılmadı. Bu komutu çalıştırmak WinRM hizmetini başlatır.
+
+Devam etmek istiyor musunuz?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>Parametre, ResourceURI üzerindeki hiçbir özellikle eşleşmediğinden bu komut kullanılamıyor. Giriş parametrelerini denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>Bu bilgisayar, kimlik bilgilerini uzak bir istemci bilgisayardan alacak şekilde yapılandırıldı.</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>{0} parametresi, {1} parametresinin değeri {2}olduğunda kullanılamaz. {0} parametresi yalnızca {1} parametresinin değeri {3} olduğunda kullanılabilir.</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>Yaptığınız yapılandırma değişiklikleri yalnızca WinRM hizmeti {0} üzerinde yeniden başlatıldıktan sonra etkili olur.</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>Bu komut geçerli yoldan kullanılamaz. cd\ kullanarak sağlayıcının kök yoluna gidin ve komutunuzu yeniden çalıştırın.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Bu PowerShell ek bileşeni, PowerShell ana bilgisayarı tarafından WSMan işlemlerini yönetmek için kullanılan cmdlet'leri (örneğin Get-WSManInstance ve Set-WSManInstance) içerir.</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>Bu bilgisayar her zaman bağlı olduğundan, bu komut, 'localhost' bilgisayarını kaldırmak için kullanılamaz. Başka bir bağlı bilgisayar belirtin ve komutunuzu çalıştırın.</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>Bu komut yeni bir ClientCertificate öğesi oluşturur.
+
+Devam etmek istiyor musunuz?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>RunAsPassword değeri kaldırılamaz. -Path özniteliğinin değeri RunAsUser değerine eşit olacak şekilde Clear-Item cmdlet'ini çağırarak PowerShell'de RunAsUser ve RunAsPassword değerlerini kaldırın.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Belirtilen köke sahip bir sürücü oluşturulamıyor. Kök yol yok.</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>Parametre, ResourceURI üzerindeki birden fazla özellikle eşleştiğinden bu komut kullanılamıyor. Giriş parametrelerini denetleyin ve komutunuzu çalıştırın.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/zh-Hans/WsManResources.zh-Hans.resx b/src/Microsoft.WSMan.Management/resources/zh-Hans/WsManResources.zh-Hans.resx
new file mode 100644
index 00000000000..f234a0ecad5
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/zh-Hans/WsManResources.zh-Hans.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>无法使用此命令，因为文件不存在。检查文件是否存在并运行命令。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>创建新的 ClientCertificate 项。</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>无法执行此命令，因为连接 URI 的格式不正确。请检查连接 URI，然后再次运行命令。</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP 身份验证允许将此计算机上的用户凭据发送到远程计算机。如果你使用 CredSSP 身份验证连接到恶意计算机或已遭入侵的计算机，该计算机将可以访问你的用户名和密码。有关详细信息，请参阅 Enable-WSManCredSSP 帮助主题。
+是否要启用 CredSSP 身份验证?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>创建新的侦听器项。</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>此命令将修改以下 WinRM 插件中资源的安全设置: {0}。
+是否要继续?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>WinRM 配置设置“{0}”上的 "Set-Item" 将值更新为“{1}”</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>无法执行此命令，因为无法启用该设置。</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>此命令将创建一个新的侦听器项。
+
+是否要继续?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>拒绝访问。需要从提升的进程运行此 cmdlet。</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>无法使用此命令，因为此版本的 Windows 操作系统不支持 WsMan 驱动器根目录。</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>启动 WinRM 服务</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP 身份验证允许服务器接受来自远程计算机的用户凭据。如果在服务器上启用 CredSSP 身份验证，并且客户端计算机发送了这些凭据，则服务器将可以访问客户端计算机的用户名和密码。有关详细信息，请参阅 Enable-WSManCredSSP 帮助主题。
+是否要启用 CredSSP 身份验证?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM 快速配置</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>此命令无法设置输入值，因为这些值是资源对象的主键或容器项。请更改输入值并运行命令。</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>WS-Management 的 CredSSP 身份验证配置</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>设置项的值</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>无法将 "System.Object[]" 转换为参数所需的类型 "System.String"。不支持指定的方法。</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>此计算机未配置为接收来自远程客户端计算机的凭据。</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>无法从当前路径使用此命令。请使用 cd\ 转到提供程序的根路径，然后再次运行命令。</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>此 PowerShell cmdlet 在 Windows XP 和 Windows Server 2003 上不可用。</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>无法使用此命令，因为参数与 ResourceURI 上的非文本属性匹配。请检查输入参数并运行命令。</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>指定 {1} 时，无法指定 {0}。</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>WinRM 客户端无法完成该操作。请检查计算机名是否有效。</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>当 {1} 参数值为 {2} 时，{0} 参数是必需的。</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>无法使用此命令，因为未提供参数值。请再次检查值并运行命令。</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>无法使用此命令，因为路径不存在。检查路径是否存在并运行命令。</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>WinRM 插件的安全配置。</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>无法在当前路径中使用此命令，因为此级别的提供程序路径不支持此 cmdlet。</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>未将此计算机配置为允许委派新凭据。</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>所做的配置更改仅在 WinRM 服务重新启动后才有效。 要重新启动 WinRM 服务，请运行以下命令: "Restart-Service winrm"</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>运行 Set-WSManQuickConfig 命令具有重大的安全隐患，因为它可通过此计算机上的 WinRM 服务进行远程管理。
+此命令:
+    1. 检查 WinRM 服务是否正在运行。如果 WinRM 服务未运行，则启动该服务。
+    2. 将 WinRM 服务启动类型设置为自动。
+    3. 创建一个可接受任何 IP 地址上的请求的侦听器。默认情况下，传输为 HTTP。
+    4. 为 WS-Management 流量启用防火墙例外。
+    5. 启用 Kerberos 和 Negotiate 服务身份验证。
+是否要在此计算机上通过 WinRM 服务启用远程管理?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>如果未为 RunAsUser 设置值，则无法设置 RunAsPassword 的值。调用 Set-Item cmdlet，并将 -Path 属性的值设为 RunAsUser 的值，以在 Powershell 中设置 RunAsUser 和 RunAsPassword 的值。</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>更新的配置可能会影响每个插件配额值大于 {0} 的插件的操作。验证所有已注册插件的配置，并更改受影响插件的每个插件配额值。</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>此命令设置该项的值。
+
+是否要继续?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>计算机配置为允许将新凭据委派给以下目标:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>WsMan 配置存储的根目录。</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>无法执行此命令，因为 WinRM 服务未启动。</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>根路径不存在，无法使用此命令。请检查根路径并运行命令。</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>无法在当前路径中使用此命令，因为此级别的提供程序路径不支持 Remove-Item。</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>此命令将修改 WinRM 客户端的 TrustedHosts 列表。TrustedHosts 列表中的计算机可能未通过身份验证。客户端可能会向这些计算机发送凭据信息。是否确定要修改此列表?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>此命令会修改 WinRM 服务的 RootSDDL 设置。 RootSDDL 存储任何未指定自身 SDDL 的 WinRM 安全资源的默认安全设置。更改 SDDL 可能会影响许多 WinRM 资源的安全性。是否确定要修改这些默认设置?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>由于身份验证算法为 Basic 或 Digest，因此无法在没有凭据的情况下使用此命令。使用 Credentials 参数指定值并运行命令。</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>更新后的配置仅在其小于或等于全局配额 {0} 的值时才生效。请使用 PowerShell cmdlet“Get-Item {0}”验证全局配额的值。</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>无法执行此命令，因为无法禁用该设置。</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>在路径 {1} 中找不到“{0}”元素的值。</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>由于已指定凭据，因此不能在没有 Basic 或 Digest 身份验证算法的情况下使用此命令。请使用 Basic 或 Digest 身份验证算法并运行命令。</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM 安全配置。</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>无法在当前路径中使用此命令，因为此级别的提供程序路径不支持 New-Item。</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>无法使用此命令，因为配置已损坏。请运行 WinRM invoke Restore WinRM/config 以还原默认配置</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>无法使用此命令，因为参数值类型无效。{0} 配置需要类型为 {1} 的值。请验证值是否正确，然后重试。</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>当前未启动 WinRM 服务。运行此命令将启动 WinRM 服务。
+
+是否要继续?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>无法使用此命令，因为该参数与 ResourceURI 上的任何属性都不匹配。请检查输入参数并运行命令。</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>此计算机配置为接收来自远程客户端计算机的凭据。</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>当 {1} 参数值为 {2} 时，无法使用 {0} 参数。仅当 {1} 参数值为 {3} 时，才能使用 {0} 参数。</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>只有在 {0} 上重新启动 WinRM 服务后，所做的配置更改才会生效。</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>无法从当前路径使用此命令。请使用 cd\ 转到提供程序的根路径，然后再次运行命令。</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>此 PowerShell 管理单元包含由 PowerShell 主机用来管理 WSMan 操作的 cmdlet (例如 Get-WSManInstance 和 Set-WSManInstance)。</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>此命令不能用于删除计算机 "localhost"，因为它将始终处于连接状态。请提供其他已连接的计算机并运行命令。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>此命令创建新的 ClientCertificate 项。
+
+是否要继续?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>无法删除 RunAsPassword 值。通过调用 Clear-Item cmdlet (其中 -Path 属性的值等于 RunAsUser 的值)来删除 PowerShell 中 RunAsUser 和 RunAsPassword 的值。</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>无法使用指定的根创建驱动器。根路径不存在。</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>无法使用此命令，因为该参数与 ResourceURI 上的多个属性匹配。请检查输入参数并运行命令。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Microsoft.WSMan.Management/resources/zh-Hant/WsManResources.zh-Hant.resx b/src/Microsoft.WSMan.Management/resources/zh-Hant/WsManResources.zh-Hant.resx
new file mode 100644
index 00000000000..63e1da5a520
--- /dev/null
+++ b/src/Microsoft.WSMan.Management/resources/zh-Hant/WsManResources.zh-Hant.resx
@@ -0,0 +1,330 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidFileName" xml:space="preserve">
+    <value>因為檔案不存在，所以無法使用此命令。請檔案存在，然後執行您的命令。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertCaption" xml:space="preserve">
+    <value>建立新的 ClientCertificate 項目。</value>
+  </data>
+  <data name="NotProperURI" xml:space="preserve">
+    <value>因為連線 URI 的格式不正確，所以無法執行此命令。請檢查連線 URI，然後再次執行您的命令。</value>
+  </data>
+  <data name="CredSSPContinueQuery" xml:space="preserve">
+    <value>CredSSP 驗證可讓此電腦上的使用者認證傳送到遠端電腦。如果您使用 CredSSP 驗證連線到惡意或已遭入侵的電腦，該電腦就能存取您的使用者名稱和密碼。如需詳細資訊，請參閱 Enable-WSManCredSSP 說明主題。
+您要啟用 CredSSP 驗證嗎?</value>
+  </data>
+  <data name="NewItemShouldContinueListenerCaption" xml:space="preserve">
+    <value>建立新接聽程式項目。</value>
+  </data>
+  <data name="ShouldContinueSecurityQuery" xml:space="preserve">
+    <value>此命令會修改下列 WinRM 外掛程式中資源的安全性設定: {0}。
+要繼續嗎?</value>
+  </data>
+  <data name="SetItemWhatIfAndConfirmText" xml:space="preserve">
+    <value>在 WinRM 組態設定 "{0}" 上使用 "Set-Item"，將值更新為 "{1}"</value>
+  </data>
+  <data name="EnableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>因為無法啟用設定，所以無法執行此命令。</value>
+  </data>
+  <data name="NewItemShouldContinueListenerQuery" xml:space="preserve">
+    <value>此命令會建立新的接聽程式項目。
+
+要繼續嗎?</value>
+  </data>
+  <data name="ErrorElevationNeeded" xml:space="preserve">
+    <value>存取遭到拒絕。您必須從已提升權限的程序執行此 Cmdlet。</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>因為此 Windows 作業系統版本不支援 WsMan 磁碟機根目錄，所以無法使用此命令。</value>
+  </data>
+  <data name="WSManServiceStartCaption" xml:space="preserve">
+    <value>啟動 WinRM 服務</value>
+  </data>
+  <data name="CredSSPServerContinueQuery" xml:space="preserve">
+    <value>CredSSP 驗證可讓伺服器接受來自遠端電腦的使用者認證。如果您在伺服器上啟用 CredSSP 驗證，當用戶端電腦傳送這些認證時，伺服器就能存取用戶端電腦的使用者名稱和密碼。如需詳細資訊，請參閱 Enable-WSManCredSSP 說明主題。
+您要啟用 CredSSP 驗證嗎?</value>
+  </data>
+  <data name="QuickConfigContinueCaption" xml:space="preserve">
+    <value>WinRM 快速設定</value>
+  </data>
+  <data name="Vendor" xml:space="preserve">
+    <value>Microsoft</value>
+  </data>
+  <data name="NoChangeValue" xml:space="preserve">
+    <value>此命令無法設定輸入值，因為這些值是資源物件的主索引鍵或容器項目。請變更輸入值，然後執行您的命令。</value>
+  </data>
+  <data name="CredSSPContinueCaption" xml:space="preserve">
+    <value>WS-Management 的 CredSSP 驗證設定</value>
+  </data>
+  <data name="SetItemShouldContinueCaption" xml:space="preserve">
+    <value>設定項目的值</value>
+  </data>
+  <data name="TrustedHostValueTypeError" xml:space="preserve">
+    <value>無法將 'System.Object[]' 轉換為參數所需的 'System.String' 類型。不支援指定的方法。</value>
+  </data>
+  <data name="CredSSPServiceNotConfigured" xml:space="preserve">
+    <value>此電腦未設定為接收來自遠端用戶端電腦的認證。</value>
+  </data>
+  <data name="DisconnectFailure" xml:space="preserve">
+    <value>無法從目前的路徑使用此命令。請使用 cd\ 移至提供者的根路徑，然後再次執行您的命令。</value>
+  </data>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>此 PowerShell Cmdlet 無法在 Windows XP 和 Windows Server 2003 上使用。</value>
+  </data>
+  <data name="NoAttributeMatch" xml:space="preserve">
+    <value>因為參數符合 ResourceURI 上的非文字屬性，所以無法使用此命令。請檢查輸入參數，然後執行您的命令。</value>
+  </data>
+  <data name="AmbiguousAuthentication" xml:space="preserve">
+    <value>當指定 {1} 時，無法指定 {0}。</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>WinRM 用戶端無法完成作業。請檢查電腦名稱是否有效。</value>
+  </data>
+  <data name="CredSSPClientAndDelegateMustBeSpecified" xml:space="preserve">
+    <value>當 {1} 參數的值為 {2} 時，{0} 參數為必要參數。</value>
+  </data>
+  <data name="value" xml:space="preserve">
+    <value>因為未提供參數值，所以無法使用此命令。請再次檢查值，然後執行您的命令。</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>因為路徑不存在，所以無法使用此命令。請路徑存在，然後執行您的命令。</value>
+  </data>
+  <data name="ShouldContinueSecurityCaption" xml:space="preserve">
+    <value>WinRM 外掛程式的安全性設定。</value>
+  </data>
+  <data name="SetItemNotSupported" xml:space="preserve">
+    <value>因為此層級的提供者路徑不支援此 Cmdlet，所以無法在目前的路徑中使用此命令。</value>
+  </data>
+  <data name="NoDelegateFreshCred" xml:space="preserve">
+    <value>尚未設定電腦以允許委派新認證。</value>
+  </data>
+  <data name="SetItemServiceRestartWarning" xml:space="preserve">
+    <value>您所做的設定變更，只有在 WinRM 服務重新啟動 WinRM 服務後才會生效。 若要重新啟動 WinRM 服務，請執行下列命令: 'Restart-Service winrm'</value>
+  </data>
+  <data name="QuickConfigContinueQuery" xml:space="preserve">
+    <value>執行 Set-WSManQuickConfig 命令會對安全性造成重大影響，因為它會透過此電腦上的 WinRM 服務啟用遠端管理。
+此命令:
+    1. 檢查 WinRM 服務是否正在執行。若 WinRM 服務未執行，會啟動該服務。
+    2. 將 WinRM 服務的啟動類型設定為自動。
+    3. 建立接聽程式，以接受任何 IP 位址的要求。根據預設，傳輸通訊協定是 HTTP。
+    4. 針對 WS-Management 流量啟用防火牆例外狀況。
+    5. 啟用 Kerberos 和 Negotiate 服務驗證。
+您要透過此電腦上的 WinRM 服務啟用遠端管理嗎?</value>
+  </data>
+  <data name="SetItemOnRunAsPasswordNoRunAsUser" xml:space="preserve">
+    <value>若未設定 RunAsUser 的值，就無法設定 RunAsPassword 的值。請在 PowerShell 中呼叫 Set-Item Cmdlet，並將 -Path 屬性的值設為 RunAsUser 的值，以設定 RunAsUser 和 RunAsPassword 的值。</value>
+  </data>
+  <data name="SetItemWarningForGlobalQuota" xml:space="preserve">
+    <value>更新的設定可能會影響每個外掛程式配額值大於 {0} 的外掛程式作業。請確認所有已註冊外掛程式的設定，並變更受影響外掛程式的每個外掛程式配額值。</value>
+  </data>
+  <data name="SetItemShouldContinueQuery" xml:space="preserve">
+    <value>此命令會設定項目的值。
+
+要繼續嗎?</value>
+  </data>
+  <data name="DelegateFreshCred" xml:space="preserve">
+    <value>電腦已設定為允許將新的認證委派給下列目標:</value>
+  </data>
+  <data name="ConfigStorage" xml:space="preserve">
+    <value>WsMan 設定儲存區的根目錄。</value>
+  </data>
+  <data name="WinRMServiceError" xml:space="preserve">
+    <value>因為 WinRM 服務未啟動，所以無法執行此命令。</value>
+  </data>
+  <data name="InvalidPath" xml:space="preserve">
+    <value>因為根路徑不存在，所以無法使用此命令。請檢查根路徑，然後執行您的命令。</value>
+  </data>
+  <data name="RemoveItemNotSupported" xml:space="preserve">
+    <value>因為此層級的提供者路徑不支援 Remove-Item，所以無法在目前的路徑中使用此命令。</value>
+  </data>
+  <data name="SetItemTrustedHostsWarningQuery" xml:space="preserve">
+    <value>此命令會修改 WinRM 用戶端的 TrustedHosts 清單。TrustedHosts 清單中的電腦可能未經驗證。用戶端可能會將認證資訊傳送給這些電腦。確定要修改此清單嗎?</value>
+  </data>
+  <data name="SetItemRootSDDLWarningQuery" xml:space="preserve">
+    <value>此命令會修改 WinRM 服務的 RootSDDL 設定。 RootSDDL 會儲存任何未指定其本身 SDDL 之 WinRM 安全資源的預設安全性設定。變更 SDDL 可能會影響許多 WinRM 資源的安全性。確定要修改這些預設設定嗎?</value>
+  </data>
+  <data name="NewWSManSessionOptionCred" xml:space="preserve">
+    <value>因為驗證演算法為 Basic 或 Digest，所以沒有認證無法使用此命令。請使用 Credentials 參數指定值，然後執行您的命令。</value>
+  </data>
+  <data name="SetItemWarnigForPPQ" xml:space="preserve">
+    <value>更新的設定只有在小於或等於全域配額 {0} 的值時才會生效。請使用 PowerShell Cmdlet "Get-Item {0}" 驗證全域配額的值。</value>
+  </data>
+  <data name="DisableCredSSPPolicyValidateError" xml:space="preserve">
+    <value>因為無法停用設定，所以無法執行此命令。</value>
+  </data>
+  <data name="ResourceURIMissingInResourceDir" xml:space="preserve">
+    <value>在路徑 {1} 中找不到 "{0}" 元素的值。</value>
+  </data>
+  <data name="NewWSManSessionOptionAuth" xml:space="preserve">
+    <value>因為已指定認證，所以無法在沒有 Basic 或 Digest 驗證演算法的情況下使用此命令。請使用 Basic 或 Digest 驗證演算法，然後執行您的命令。</value>
+  </data>
+  <data name="SetItemGeneralSecurityCaption" xml:space="preserve">
+    <value>WinRM 安全性設定。</value>
+  </data>
+  <data name="NewItemNotSupported" xml:space="preserve">
+    <value>因為此層級的提供者路徑不支援 New-Item，所以無法在目前的路徑中使用此命令。</value>
+  </data>
+  <data name="WinrmNotConfigured" xml:space="preserve">
+    <value>因為設定已損毀，所以無法使用此命令。請執行 WinRM invoke Restore WinRM/config 以還原預設設定</value>
+  </data>
+  <data name="InvalidValueType" xml:space="preserve">
+    <value>因為參數值類型無效，所以無法使用此命令。{0} 設定必須為類型值 {1}。請確認值正確，然後再試一次。</value>
+  </data>
+  <data name="WSManServiceStartQuery" xml:space="preserve">
+    <value>WinRM 服務目前未啟動。執行此命令會啟動 WinRM 服務。
+
+要繼續嗎?</value>
+  </data>
+  <data name="NoResourceMatch" xml:space="preserve">
+    <value>因為參數不符合 ResourceURI 上的任何屬性，所以無法使用此命令。請檢查輸入參數，然後執行您的命令。</value>
+  </data>
+  <data name="CredSSPServiceConfigured" xml:space="preserve">
+    <value>此電腦已設定為接收來自遠端用戶端電腦的認證。</value>
+  </data>
+  <data name="CredSSPRoleAndDelegateCannotBeSpecified" xml:space="preserve">
+    <value>當 {1} 參數的值為 {2} 時，無法使用 {0} 參數。只有當 {1} 參數的值為 {3} 時，才能使用 {0} 參數。</value>
+  </data>
+  <data name="SetItemServiceRestartWarningRemote" xml:space="preserve">
+    <value>您所做的設定變更，只有在 {0} 重新啟動 WinRM 服務後才會生效。</value>
+  </data>
+  <data name="ConnectFailure" xml:space="preserve">
+    <value>無法從目前的路徑使用此命令。請使用 cd\ 移至提供者的根路徑，然後再次執行您的命令。</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>此 PowerShell 嵌入式管理單元包含 Cmdlet (例如 Get-WSManInstance 和 Set-WSManInstance)，供 PowerShell 主機用來管理 WSMan 作業。</value>
+  </data>
+  <data name="LocalHost" xml:space="preserve">
+    <value>此命令無法用來移除電腦 'localhost'，因為它會一直保持連線。請提供其他已連線的電腦，然後執行您的命令。</value>
+  </data>
+  <data name="NewItemShouldContinueClientCertQuery" xml:space="preserve">
+    <value>此命令會建立新的 ClientCertificate 項目。
+
+要繼續嗎?</value>
+  </data>
+  <data name="ClearItemOnRunAsPassword" xml:space="preserve">
+    <value>無法移除 RunAsPassword 值。請在 PowerShell 中呼叫 Clear-Item Cmdlet，並將 -Path 屬性的值設為 RunAsUser 的值，以移除 RunAsUser 和 RunAsPassword 的值。</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>無法使用指定的根目錄建立磁碟機。根路徑不存在。</value>
+  </data>
+  <data name="MultipleResourceMatch" xml:space="preserve">
+    <value>因為參數符合 ResourceURI 上多個屬性，所以無法使用此命令。請檢查輸入參數，然後執行您的命令。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Modules/PSGalleryModules.csproj b/src/Modules/PSGalleryModules.csproj
index ae838f27601..d08fc45c494 100644
--- a/src/Modules/PSGalleryModules.csproj
+++ b/src/Modules/PSGalleryModules.csproj
@@ -5,18 +5,18 @@
     <Company>Microsoft Corporation</Company>
     <Copyright>(c) Microsoft Corporation.</Copyright>
 
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net11.0</TargetFramework>
 
     <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
   </PropertyGroup>
 
   <ItemGroup>
     <PackageReference Include="PowerShellGet" Version="2.2.5" />
-    <PackageReference Include="PackageManagement" Version="1.4.7" />
+    <PackageReference Include="PackageManagement" Version="1.4.8.1" />
+    <PackageReference Include="Microsoft.PowerShell.PSResourceGet" Version="1.3.0-preview1" />
     <PackageReference Include="Microsoft.PowerShell.Archive" Version="1.2.5" />
-    <PackageReference Include="PSReadLine" Version="2.1.0" />
-    <PackageReference Include="ThreadJob" Version="2.0.3" />
-    <PackageReference Include="PSDesiredStateConfiguration" Version="2.0.5" />
+    <PackageReference Include="PSReadLine" Version="2.4.5" />
+    <PackageReference Include="Microsoft.PowerShell.ThreadJob" Version="2.2.0" />
   </ItemGroup>
 
 </Project>
diff --git a/src/Modules/Shared/Microsoft.PowerShell.Host/Microsoft.PowerShell.Host.psd1 b/src/Modules/Shared/Microsoft.PowerShell.Host/Microsoft.PowerShell.Host.psd1
index 0270ceffca0..3c2581795f7 100644
--- a/src/Modules/Shared/Microsoft.PowerShell.Host/Microsoft.PowerShell.Host.psd1
+++ b/src/Modules/Shared/Microsoft.PowerShell.Host/Microsoft.PowerShell.Host.psd1
@@ -10,5 +10,5 @@ FunctionsToExport = @()
 CmdletsToExport="Start-Transcript", "Stop-Transcript"
 AliasesToExport = @()
 NestedModules="Microsoft.PowerShell.ConsoleHost.dll"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Unix/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1 b/src/Modules/Unix/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
index da8f8707945..21563c1da7c 100644
--- a/src/Modules/Unix/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
+++ b/src/Modules/Unix/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
@@ -7,7 +7,7 @@ ModuleVersion="7.0.0.0"
 CompatiblePSEditions = @("Core")
 PowerShellVersion="3.0"
 NestedModules="Microsoft.PowerShell.Commands.Management.dll"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 FunctionsToExport = @()
 AliasesToExport = @("gcb", "gtz", "scb")
 CmdletsToExport=@("Add-Content",
diff --git a/src/Modules/Unix/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1 b/src/Modules/Unix/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
index 1f4cc15e118..adab0df2849 100644
--- a/src/Modules/Unix/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
+++ b/src/Modules/Unix/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
@@ -1,14 +1,14 @@
 @{
-GUID="A94C8C7E-9810-47C0-B8AF-65089C13A35A"
-Author="PowerShell"
-CompanyName="Microsoft Corporation"
-Copyright="Copyright (c) Microsoft Corporation."
-ModuleVersion="7.0.0.0"
+GUID = "A94C8C7E-9810-47C0-B8AF-65089C13A35A"
+Author = "PowerShell"
+CompanyName = "Microsoft Corporation"
+Copyright = "Copyright (c) Microsoft Corporation."
+ModuleVersion = "7.0.0.0"
 CompatiblePSEditions = @("Core")
-PowerShellVersion="3.0"
+PowerShellVersion = "3.0"
 FunctionsToExport = @()
-CmdletsToExport="Get-Credential", "Get-ExecutionPolicy", "Set-ExecutionPolicy", "ConvertFrom-SecureString", "ConvertTo-SecureString", "Get-PfxCertificate" , "Protect-CmsMessage", "Unprotect-CmsMessage", "Get-CmsMessage"
+CmdletsToExport = "Get-Credential", "Get-ExecutionPolicy", "Set-ExecutionPolicy", "ConvertFrom-SecureString", "ConvertTo-SecureString", "Get-PfxCertificate" , "Protect-CmsMessage", "Unprotect-CmsMessage", "Get-CmsMessage"
 AliasesToExport = @()
-NestedModules="Microsoft.PowerShell.Security.dll"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+NestedModules = "Microsoft.PowerShell.Security.dll"
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Unix/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1 b/src/Modules/Unix/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
index b883acdd0d6..df841837696 100644
--- a/src/Modules/Unix/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
+++ b/src/Modules/Unix/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
@@ -19,30 +19,17 @@ CmdletsToExport = @(
   'New-Object', 'Select-Object', 'Sort-Object', 'Tee-Object', 'Register-ObjectEvent', 'Write-Output',
   'Import-PowerShellDataFile', 'Write-Progress', 'Disable-PSBreakpoint', 'Enable-PSBreakpoint',
   'Get-PSBreakpoint', 'Remove-PSBreakpoint', 'Set-PSBreakpoint', 'Get-PSCallStack', 'Export-PSSession',
-  'Import-PSSession', 'Get-Random', 'Invoke-RestMethod', 'Debug-Runspace', 'Get-Runspace',
+  'Import-PSSession', 'Get-Random', 'Get-SecureRandom', 'Invoke-RestMethod', 'Debug-Runspace', 'Get-Runspace',
   'Disable-RunspaceDebug', 'Enable-RunspaceDebug', 'Get-RunspaceDebug', 'Start-Sleep', 'Join-String',
   'Out-String', 'Select-String', 'ConvertFrom-StringData', 'Format-Table', 'New-TemporaryFile', 'New-TimeSpan',
   'Get-TraceSource', 'Set-TraceSource', 'Add-Type', 'Get-TypeData', 'Remove-TypeData', 'Update-TypeData',
   'Get-UICulture', 'Get-Unique', 'Get-Uptime', 'Clear-Variable', 'Get-Variable', 'New-Variable',
   'Remove-Variable', 'Set-Variable', 'Get-Verb', 'Write-Verbose', 'Write-Warning', 'Invoke-WebRequest',
-  'Format-Wide', 'ConvertTo-Xml', 'Select-Xml', 'Get-Error', 'Update-List', 'Unblock-File'
+  'Format-Wide', 'ConvertTo-Xml', 'Select-Xml', 'Get-Error', 'Update-List', 'Unblock-File', 'ConvertTo-CliXml',
+  'ConvertFrom-CliXml'
 )
 FunctionsToExport = @()
 AliasesToExport = @('fhx')
 NestedModules = @("Microsoft.PowerShell.Commands.Utility.dll")
-HelpInfoURI = 'https://aka.ms/powershell71-help'
-PrivateData = @{
-  PSData = @{
-    ExperimentalFeatures = @(
-      @{
-        Name        = 'Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace'
-        Description = 'Enables -BreakAll parameter on Debug-Runspace and Debug-Job cmdlets to allow users to decide if they want PowerShell to break immediately in the current location when they attach a debugger. Enables -Runspace parameter on *-PSBreakpoint cmdlets to support management of breakpoints in another runspace.'
-      }
-      @{
-        Name        = 'Microsoft.PowerShell.Utility.PSImportPSDataFileSkipLimitCheck'
-        Description = 'Enable -SkipLimitCheck switch for Import-PowerShellDataFile to not enforce built-in hashtable limits'
-      }
-    )
-  }
-}
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Windows/CimCmdlets/CimCmdlets.psd1 b/src/Modules/Windows/CimCmdlets/CimCmdlets.psd1
index 4b38d4abc9e..734fe45016d 100644
--- a/src/Modules/Windows/CimCmdlets/CimCmdlets.psd1
+++ b/src/Modules/Windows/CimCmdlets/CimCmdlets.psd1
@@ -14,5 +14,5 @@ CmdletsToExport= "Get-CimAssociatedInstance", "Get-CimClass", "Get-CimInstance",
     "Remove-CimSession","Set-CimInstance",
     "Export-BinaryMiLog","Import-BinaryMiLog"
 AliasesToExport = "gcim","scim","ncim", "rcim","icim","gcai","rcie","ncms","rcms","gcms","ncso","gcls"
-HelpInfoUri="https://aka.ms/powershell71-help"
+HelpInfoUri="https://aka.ms/powershell75-help"
 }
diff --git a/src/Modules/Windows/Microsoft.PowerShell.Diagnostics/Microsoft.PowerShell.Diagnostics.psd1 b/src/Modules/Windows/Microsoft.PowerShell.Diagnostics/Microsoft.PowerShell.Diagnostics.psd1
index ed2344b51b2..7f77777b137 100644
--- a/src/Modules/Windows/Microsoft.PowerShell.Diagnostics/Microsoft.PowerShell.Diagnostics.psd1
+++ b/src/Modules/Windows/Microsoft.PowerShell.Diagnostics/Microsoft.PowerShell.Diagnostics.psd1
@@ -12,5 +12,5 @@ AliasesToExport = @()
 NestedModules="Microsoft.PowerShell.Commands.Diagnostics.dll"
 TypesToProcess="GetEvent.types.ps1xml"
 FormatsToProcess="Event.format.ps1xml", "Diagnostics.format.ps1xml"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Windows/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1 b/src/Modules/Windows/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
index f7cd1dc6ace..f7582920935 100644
--- a/src/Modules/Windows/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
+++ b/src/Modules/Windows/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1
@@ -7,7 +7,7 @@ ModuleVersion="7.0.0.0"
 CompatiblePSEditions = @("Core")
 PowerShellVersion="3.0"
 NestedModules="Microsoft.PowerShell.Commands.Management.dll"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 FunctionsToExport = @()
 AliasesToExport = @("gcb", "gin", "gtz", "scb", "stz")
 CmdletsToExport=@("Add-Content",
diff --git a/src/Modules/Windows/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1 b/src/Modules/Windows/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
index cbc5b2dc78e..0953b2d1cca 100644
--- a/src/Modules/Windows/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
+++ b/src/Modules/Windows/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1
@@ -1,14 +1,18 @@
 @{
-GUID="A94C8C7E-9810-47C0-B8AF-65089C13A35A"
-Author="PowerShell"
-CompanyName="Microsoft Corporation"
-Copyright="Copyright (c) Microsoft Corporation."
-ModuleVersion="7.0.0.0"
+GUID = "A94C8C7E-9810-47C0-B8AF-65089C13A35A"
+Author = "PowerShell"
+CompanyName = "Microsoft Corporation"
+Copyright = "Copyright (c) Microsoft Corporation."
+ModuleVersion = "7.0.0.0"
 CompatiblePSEditions = @("Core")
-PowerShellVersion="3.0"
+PowerShellVersion = "3.0"
 FunctionsToExport = @()
-CmdletsToExport="Get-Acl", "Set-Acl", "Get-PfxCertificate", "Get-Credential", "Get-ExecutionPolicy", "Set-ExecutionPolicy", "Get-AuthenticodeSignature", "Set-AuthenticodeSignature", "ConvertFrom-SecureString", "ConvertTo-SecureString", "Get-CmsMessage", "Unprotect-CmsMessage", "Protect-CmsMessage" , "New-FileCatalog" , "Test-FileCatalog"
+CmdletsToExport = "Get-Acl", "Set-Acl", "Get-PfxCertificate", "Get-Credential", "Get-ExecutionPolicy", "Set-ExecutionPolicy", "Get-AuthenticodeSignature", "Set-AuthenticodeSignature", "ConvertFrom-SecureString", "ConvertTo-SecureString", "Get-CmsMessage", "Unprotect-CmsMessage", "Protect-CmsMessage" , "New-FileCatalog" , "Test-FileCatalog"
 AliasesToExport = @()
-NestedModules="Microsoft.PowerShell.Security.dll"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+NestedModules = "Microsoft.PowerShell.Security.dll"
+# 'Security.types.ps1xml' refers to types from 'Microsoft.PowerShell.Security.dll' and thus requiring to load the assembly before processing the type file.
+# We declare 'Microsoft.PowerShell.Security.dll' in 'RequiredAssemblies' so as to make sure it's loaded before the type file processing.
+RequiredAssemblies = "Microsoft.PowerShell.Security.dll"
+TypesToProcess = "Security.types.ps1xml"
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Windows/Microsoft.PowerShell.Security/Security.types.ps1xml b/src/Modules/Windows/Microsoft.PowerShell.Security/Security.types.ps1xml
new file mode 100644
index 00000000000..b1171c98e6a
--- /dev/null
+++ b/src/Modules/Windows/Microsoft.PowerShell.Security/Security.types.ps1xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- *******************************************************************
+These sample files contain type information used by the PowerShell engine.
+Do not edit or change the contents of this file directly.
+Please see the PowerShell documentation or type "Get-Help Update-TypeData"
+for more information.
+
+Copyright (c) Microsoft Corporation.
+
+THIS SAMPLE CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
+OF ANY KIND,WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+PURPOSE. IF THIS CODE AND INFORMATION IS MODIFIED, THE ENTIRE RISK OF USE
+OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE AND INFORMATION
+REMAINS WITH THE USER.
+******************************************************************** -->
+
+<Types>
+  <Type>
+    <Name>System.Security.AccessControl.ObjectSecurity</Name>
+    <Members>
+      <CodeProperty>
+        <Name>Path</Name>
+        <GetCodeReference>
+          <TypeName>Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase</TypeName>
+          <MethodName>GetPath</MethodName>
+        </GetCodeReference>
+      </CodeProperty>
+      <CodeProperty>
+        <Name>Owner</Name>
+        <GetCodeReference>
+          <TypeName>Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase</TypeName>
+          <MethodName>GetOwner</MethodName>
+        </GetCodeReference>
+      </CodeProperty>
+      <CodeProperty>
+        <Name>Group</Name>
+        <GetCodeReference>
+          <TypeName>Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase</TypeName>
+          <MethodName>GetGroup</MethodName>
+        </GetCodeReference>
+      </CodeProperty>
+      <CodeProperty>
+        <Name>Access</Name>
+        <GetCodeReference>
+          <TypeName>Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase</TypeName>
+          <MethodName>GetAccess</MethodName>
+        </GetCodeReference>
+      </CodeProperty>
+      <CodeProperty>
+        <Name>Sddl</Name>
+        <GetCodeReference>
+          <TypeName>Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase</TypeName>
+          <MethodName>GetSddl</MethodName>
+        </GetCodeReference>
+      </CodeProperty>
+      <ScriptProperty>
+        <Name>AccessToString</Name>
+        <GetScriptBlock>
+          $toString = "";
+          $first = $true;
+          if ( ! $this.Access ) { return "" }
+          foreach($ace in $this.Access)
+          {
+          if($first)
+          {
+          $first = $false;
+          }
+          else
+          {
+          $tostring += "`n";
+          }
+          $toString += $ace.IdentityReference.ToString();
+          $toString += " ";
+          $toString += $ace.AccessControlType.ToString();
+          $toString += "  ";
+          if($ace -is [System.Security.AccessControl.FileSystemAccessRule])
+          {
+          $toString += $ace.FileSystemRights.ToString();
+          }
+          elseif($ace -is  [System.Security.AccessControl.RegistryAccessRule])
+          {
+          $toString += $ace.RegistryRights.ToString();
+          }
+          }
+          return $toString;
+        </GetScriptBlock>
+      </ScriptProperty>
+      <ScriptProperty>
+        <Name>AuditToString</Name>
+        <GetScriptBlock>
+          $toString = "";
+          $first = $true;
+          if ( ! (&amp; { Set-StrictMode -Version 1; $this.audit }) ) { return "" }
+          foreach($ace in (&amp; { Set-StrictMode -Version 1; $this.audit }))
+          {
+          if($first)
+          {
+          $first = $false;
+          }
+          else
+          {
+          $tostring += "`n";
+          }
+          $toString += $ace.IdentityReference.ToString();
+          $toString += " ";
+          $toString += $ace.AuditFlags.ToString();
+          $toString += "  ";
+          if($ace -is [System.Security.AccessControl.FileSystemAuditRule])
+          {
+          $toString += $ace.FileSystemRights.ToString();
+          }
+          elseif($ace -is [System.Security.AccessControl.RegistryAuditRule])
+          {
+          $toString += $ace.RegistryRights.ToString();
+          }
+          }
+          return $toString;
+        </GetScriptBlock>
+      </ScriptProperty>
+    </Members>
+  </Type>
+
+</Types>
diff --git a/src/Modules/Windows/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1 b/src/Modules/Windows/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
index 5ea504197fa..2043543a8a5 100644
--- a/src/Modules/Windows/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
+++ b/src/Modules/Windows/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1
@@ -17,31 +17,17 @@ CmdletsToExport = @(
   'Show-Markdown', 'Get-MarkdownOption', 'Set-MarkdownOption', 'Add-Member', 'Get-Member', 'Compare-Object', 'Group-Object',
   'Measure-Object', 'New-Object', 'Select-Object', 'Sort-Object', 'Tee-Object', 'Register-ObjectEvent', 'Write-Output',
   'Import-PowerShellDataFile', 'Write-Progress', 'Disable-PSBreakpoint', 'Enable-PSBreakpoint', 'Get-PSBreakpoint',
-  'Remove-PSBreakpoint', 'Set-PSBreakpoint', 'Get-PSCallStack', 'Export-PSSession', 'Import-PSSession', 'Get-Random',
+  'Remove-PSBreakpoint', 'Set-PSBreakpoint', 'Get-PSCallStack', 'Export-PSSession', 'Import-PSSession', 'Get-Random', 'Get-SecureRandom'
   'Invoke-RestMethod', 'Debug-Runspace', 'Get-Runspace', 'Disable-RunspaceDebug', 'Enable-RunspaceDebug',
   'Get-RunspaceDebug', 'ConvertFrom-SddlString', 'Start-Sleep', 'Join-String', 'Out-String', 'Select-String',
   'ConvertFrom-StringData', 'Format-Table', 'New-TemporaryFile', 'New-TimeSpan', 'Get-TraceSource', 'Set-TraceSource',
   'Add-Type', 'Get-TypeData', 'Remove-TypeData', 'Update-TypeData', 'Get-UICulture', 'Get-Unique', 'Get-Uptime',
   'Clear-Variable', 'Get-Variable', 'New-Variable', 'Remove-Variable', 'Set-Variable', 'Get-Verb', 'Write-Verbose',
   'Write-Warning', 'Invoke-WebRequest', 'Format-Wide', 'ConvertTo-Xml', 'Select-Xml', 'Get-Error', 'Update-List',
-  'Out-GridView', 'Show-Command', 'Out-Printer'
+  'Out-GridView', 'Show-Command', 'Out-Printer', 'ConvertTo-CliXml', 'ConvertFrom-CliXml'
 )
 FunctionsToExport = @()
 AliasesToExport = @('fhx')
 NestedModules = @("Microsoft.PowerShell.Commands.Utility.dll")
-HelpInfoURI = 'https://aka.ms/powershell71-help'
-PrivateData = @{
-  PSData = @{
-    ExperimentalFeatures = @(
-      @{
-        Name        = 'Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace'
-        Description = 'Enables -BreakAll parameter on Debug-Runspace and Debug-Job cmdlets to allow users to decide if they want PowerShell to break immediately in the current location when they attach a debugger. Enables -Runspace parameter on *-PSBreakpoint cmdlets to support management of breakpoints in another runspace.'
-      }
-      @{
-        Name        = 'Microsoft.PowerShell.Utility.PSImportPSDataFileSkipLimitCheck'
-        Description = 'Enable -NoLimit switch for Import-PowerShellDataFile to not enforce built-in hashtable limits'
-      }
-    )
-  }
-}
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Windows/Microsoft.WSMan.Management/Microsoft.WSMan.Management.psd1 b/src/Modules/Windows/Microsoft.WSMan.Management/Microsoft.WSMan.Management.psd1
index d2bb2398541..ced706c9fde 100644
--- a/src/Modules/Windows/Microsoft.WSMan.Management/Microsoft.WSMan.Management.psd1
+++ b/src/Modules/Windows/Microsoft.WSMan.Management/Microsoft.WSMan.Management.psd1
@@ -11,5 +11,5 @@ CmdletsToExport="Disable-WSManCredSSP", "Enable-WSManCredSSP", "Get-WSManCredSSP
 AliasesToExport = @()
 NestedModules="Microsoft.WSMan.Management.dll"
 FormatsToProcess="WSMan.format.ps1xml"
-HelpInfoURI = 'https://aka.ms/powershell71-help'
+HelpInfoURI = 'https://aka.ms/powershell75-help'
 }
diff --git a/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psd1 b/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psd1
index dded04d4920..3b53d6740e5 100644
--- a/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psd1
+++ b/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psd1
@@ -10,5 +10,5 @@
     FunctionsToExport="Disable-PSTrace","Disable-PSWSManCombinedTrace","Disable-WSManTrace","Enable-PSTrace","Enable-PSWSManCombinedTrace","Enable-WSManTrace","Get-LogProperties","Set-LogProperties","Start-Trace","Stop-Trace"
     CmdletsToExport = @()
     AliasesToExport = @()
-    HelpInfoUri="https://aka.ms/powershell71-help"
+    HelpInfoUri="https://aka.ms/powershell75-help"
 }
diff --git a/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psm1 b/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psm1
index ce0739eb622..c31e9f25963 100644
--- a/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psm1
+++ b/src/Modules/Windows/PSDiagnostics/PSDiagnostics.psm1
@@ -4,21 +4,22 @@
 <#
   PowerShell Diagnostics Module
   This module contains a set of wrapper scripts that
-  enable a user to use ETW tracing in Windows
-  PowerShell.
+  enable a user to use ETW tracing in PowerShell 7.
  #>
 
-$script:Logman="$env:windir\system32\logman.exe"
-$script:wsmanlogfile = "$env:windir\system32\wsmtraces.log"
-$script:wsmprovfile = "$env:windir\system32\wsmtraceproviders.txt"
+$script:windir = [System.Environment]::GetEnvironmentVariable("windir", [System.EnvironmentVariableTarget]::Machine)
+
+$script:Logman = "${script:windir}\system32\logman.exe"
+$script:wsmanlogfile = "${script:windir}\system32\wsmtraces.log"
+$script:wsmprovfile = "${script:windir}\system32\wsmtraceproviders.txt"
 $script:wsmsession = "wsmlog"
 $script:pssession = "PSTrace"
-$script:psprovidername="Microsoft-Windows-PowerShell"
+$script:psprovidername = "PowerShellCore"
 $script:wsmprovidername = "Microsoft-Windows-WinRM"
 $script:oplog = "/Operational"
-$script:analyticlog="/Analytic"
-$script:debuglog="/Debug"
-$script:wevtutil="$env:windir\system32\wevtutil.exe"
+$script:analyticlog = "/Analytic"
+$script:debuglog = "/Debug"
+$script:wevtutil = "${script:windir}\system32\wevtutil.exe"
 $script:slparam = "sl"
 $script:glparam = "gl"
 
@@ -169,7 +170,6 @@ function Enable-PSWSManCombinedTrace
 
     $provfile = [io.path]::GetTempFilename()
 
-    $traceFileName = [string][Guid]::NewGuid()
     if ($DoNotOverwriteExistingTrace) {
         $fileName = [string][guid]::newguid()
         $logfile = $PSHOME + "\\Traces\\PSTrace_$fileName.etl"
@@ -177,8 +177,8 @@ function Enable-PSWSManCombinedTrace
         $logfile = $PSHOME + "\\Traces\\PSTrace.etl"
     }
 
-    "Microsoft-Windows-PowerShell 0 5" | Out-File $provfile -Encoding ascii
-    "Microsoft-Windows-WinRM 0 5" | Out-File $provfile -Encoding ascii -Append
+    "$script:psprovidername 0 5" | Out-File $provfile -Encoding ascii
+    "$script:wsmprovidername 0 5" | Out-File $provfile -Encoding ascii -Append
 
     if (!(Test-Path $PSHOME\Traces))
     {
@@ -192,7 +192,7 @@ function Enable-PSWSManCombinedTrace
 
     Start-Trace -SessionName $script:pssession -OutputFilePath $logfile -ProviderFilePath $provfile -ETS
 
-    Remove-Item $provfile -Force -ea 0
+    Remove-Item $provfile -Force -ErrorAction SilentlyContinue
 }
 
 function Disable-PSWSManCombinedTrace
diff --git a/src/Modules/nuget.config b/src/Modules/nuget.config
index f5a7f806a36..388a65572dd 100644
--- a/src/Modules/nuget.config
+++ b/src/Modules/nuget.config
@@ -2,8 +2,7 @@
 <configuration>
   <packageSources>
     <clear />
-    <add key="PSGallery" value="https://www.powershellgallery.com/api/v2/" />
-    <add key="powershell_nuget" value="https://powershell.pkgs.visualstudio.com/PowerShell/_packaging/powershell/nuget/v3/index.json" />
+    <add key="powershell" value="https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShell/nuget/v3/index.json" />
   </packageSources>
   <disabledPackageSources>
     <clear />
diff --git a/src/PowerShell.Core.Instrumentation/PowerShell.Core.Instrumentation.man b/src/PowerShell.Core.Instrumentation/PowerShell.Core.Instrumentation.man
index 5d4dd473f4b..bb4e15351e5 100644
--- a/src/PowerShell.Core.Instrumentation/PowerShell.Core.Instrumentation.man
+++ b/src/PowerShell.Core.Instrumentation/PowerShell.Core.Instrumentation.man
@@ -121,6 +121,18 @@
               value="0x3002"
               version="1"
               />
+          <!--Telemetry events-->
+          <event
+              channel="C_OPERATIONAL"
+              level="win:Error"
+              message="$(string.PS_PROVIDER.event.E_O_TelemetrySettingError.message)"
+              opcode="Exception"
+              symbol="TelemetrySettingError"
+              task="Telemetry"
+              template="T_TelemetrySettingError"
+              value="0x3011"
+              version="1"
+              />
           <!--M3P events-->
           <event
               channel="C_ANALYTIC"
@@ -2208,6 +2220,42 @@
               value="0x6017"
               version="1"
               />
+          <event
+              channel="C_ANALYTIC"
+              keywords="AmsiState"
+              level="win:Verbose"
+              message="$(string.PS_PROVIDER.event.E_A_AmsiState.message)"
+              opcode="Method"
+              symbol="AmsiState"
+              task="Amsi"
+              template="T_AmsiState"
+              value="0x4001"
+              version="1"
+              />
+          <event
+              channel="C_ANALYTIC"
+              keywords="WDACQuery"
+              level="win:Verbose"
+              message="$(string.PS_PROVIDER.event.E_A_WDACQuery.message)"
+              opcode="Method"
+              symbol="WDACQuery"
+              task="WDAC"
+              template="T_WDACQuery"
+              value="0x4002"
+              version="1"
+              />
+          <event
+              channel="C_ANALYTIC"
+              keywords="WDACAudit"
+              level="win:Verbose"
+              message = "$(string.PS_PROVIDER.event.E_A_WDACAudit.message)"
+              opcode="Method"
+              symbol="WDACAudit"
+              task="WDACAudit"
+              template="T_WDACAudit"
+              value="0x4003"
+              version="1"
+              />
         </events>
         <channels>
           <!--There are three channels defined for PowerShell instrumentation
@@ -2397,6 +2445,12 @@
               symbol="T_EXPERIMENTALFEATURE"
               value="107"
               />
+          <task
+              message="$(string.PS_PROVIDER.task.T_Telemetry.message)"
+              name="Telemetry"
+              symbol="T_TELEMETRY"
+              value="108"
+              />
           <task
               message="$(string.PS_PROVIDER.task.T_ScheduledJob.message)"
               name="ScheduledJob"
@@ -2415,6 +2469,24 @@
               symbol="T_ISEOperation"
               value="120"
               />
+          <task
+              message="$(string.PS_PROVIDER.task.T_AmsiState.message)"
+              name="Amsi"
+              symbol="T_Amsi"
+              value="130"
+              />
+          <task
+              message="$(string.PS_PROVIDER.task.T_WDACQuery.message)"
+              name="WDAC"
+              symbol="T_WDAC"
+              value="131"
+              />
+          <task
+              message="$(string.PS_PROVIDER.task.T_WDACAudit.message)"
+              name="WDACAudit"
+              symbol="T_WDACAudit"
+              value="132"
+              />
         </tasks>
         <opcodes>
           <opcode
@@ -2575,6 +2647,24 @@
               name="PSWorkflow"
               symbol="K_PSWORKFLOW"
               />
+          <keyword
+              mask="0x400"
+              message="$(string.PS_PROVIDER.keyword.K_AmsiState.message)"
+              name="AmsiState"
+              symbol="K_AmsiState"
+              />
+          <keyword
+              mask="0x800"
+              message="$(string.PS_PROVIDER.keyword.K_WDACQuery.message)"
+              name="WDACQuery"
+              symbol="K_WDACQuery"
+              />
+          <keyword
+              mask="0x1000"
+              message="$(string.PS_PROVIDER.keyword.K_WDACAudit.message)"
+              name="WDACAudit"
+              symbol="K_WDACAudit"
+              />
         </keywords>
         <maps>
           <!-- please keep in sync with SerializationMethod from
@@ -3980,6 +4070,20 @@
                 name="StackTrace"
                 />
           </template>
+          <template tid="T_TelemetrySettingError">
+            <data
+                inType="win:UnicodeString"
+                name="Name"
+                />
+            <data
+                inType="win:UnicodeString"
+                name="Message"
+                />
+            <data
+                inType="win:UnicodeString"
+                name="StackTrace"
+                />
+          </template>
           <template tid="T_TrackingGuid">
             <data
                 inType="win:GUID"
@@ -4056,6 +4160,48 @@
                 name="FileName"
                 />
           </template>
+          <template tid="T_AmsiState">
+            <data
+                inType="win:UnicodeString"
+                name="Action"
+                />
+            <data
+                inType="win:UnicodeString"
+                name="AmsiContext"
+                />
+          </template>
+          <template tid="T_WDACQuery">
+              <data
+                  inType="win:UnicodeString"
+                  name="QueryName"
+                  />
+              <data
+                  inType="win:UnicodeString"
+                  name="FileName"
+                  />
+              <data
+                  inType="win:Int32"
+                  name="QuerySuccess"
+                  />
+              <data
+                  inType="win:Int32"
+                  name="QuerySResult"
+                  />
+          </template>
+          <template tid="T_WDACAudit">
+              <data
+                  inType="win:UnicodeString"
+                  name="Title"
+                  />
+              <data
+                  inType="win:UnicodeString"
+                  name="Message"
+                  />
+              <data
+                  inType="win:UnicodeString"
+                  name="FullyQualifiedId"
+                  />
+          </template>
         </templates>
       </provider>
     </events>
@@ -4723,7 +4869,7 @@
             />
         <string
             id="PS_PROVIDER.event.E_A_RUNSPACE_WSMANCONNECTIONINFO.message"
-            value="Connection Paramters are %n Connection URI: %1 %n Resource URI: %2 %n User: %3 %n OpenTimeout: %4 %n IdleTimeout: %5 %n CancelTimeout: %6 %n AuthenticationMechanism: %7 %n Thumb Print: %8 %n MaxUriRedirectionCount: %9 %n MaxReceivedDataSizePerCommand: %10 %n MaxReceivedObjectSize: %11"
+            value="Connection Parameters are %n Connection URI: %1 %n Resource URI: %2 %n User: %3 %n OpenTimeout: %4 %n IdleTimeout: %5 %n CancelTimeout: %6 %n AuthenticationMechanism: %7 %n Thumb Print: %8 %n MaxUriRedirectionCount: %9 %n MaxReceivedDataSizePerCommand: %10 %n MaxReceivedObjectSize: %11"
             />
         <string
             id="PS_PROVIDER.event.E_O_RUNSPACE_CONSTRUCTOR.message"
@@ -4835,7 +4981,7 @@
             />
         <string
             id="PS_PROVIDER.event.E_A_CREATE_SERVER_REMOTESESSION.message"
-            value="Request %1. Creating a server remote session. UserName: %2 Custome Shell Id: %3"
+            value="Request %1. Creating a server remote session. UserName: %2 Custom Shell Id: %3"
             />
         <string
             id="PS_PROVIDER.event.E_A_REPORT_CONTEXT.message"
@@ -4895,11 +5041,11 @@
             />
         <string
             id="PS_PROVIDER.event.E_A_SERIALIZER_DEPTH_OVERRIDE.message"
-            value="Serialization depth has been overriden. %n %t Serialized type name: %1 %n %t Original depth: %2 %n %t Overriden depth: %3 %n %t Current depth below top level: %4"
+            value="Serialization depth has been overriden. %n %t Serialized type name: %1 %n %t Original depth: %2 %n %t Overridden depth: %3 %n %t Current depth below top level: %4"
             />
         <string
             id="PS_PROVIDER.event.E_A_SERIALIZER_MODE_OVERRIDE.message"
-            value="Serialization mode has been overriden. %n %t Serialized type name: %1 %n %t Overriden mode: %2"
+            value="Serialization mode has been overriden. %n %t Serialized type name: %1 %n %t Overridden mode: %2"
             />
         <string
             id="PS_PROVIDER.event.E_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE.message"
@@ -4949,7 +5095,11 @@
             id="PS_PROVIDER.event.E_O_M3PWorkflowExecutionStarted.message"
             value="Workflow execution started. %n %t WorkflowId: %1 %n %t ManagedNodes: %2"
             />
-        <string
+          <string
+              id="PS_PROVIDER.event.E_A_AmsiState.message"
+              value="AmsiUtil state. %n %t state: %1 %n %t Context: %2"
+            />
+          <string
             id="PS_PROVIDER.event.E_O_M3PEndpointRegistered.message"
             value="A new PowerShell endpoint was registered. %n %t EndpointName: %1 %n %t EndpointType: %2 %n %t RegisteredBy: %3"
             />
@@ -5417,7 +5567,11 @@
             id="PS_PROVIDER.keyword.K_PSWORKFLOW.message"
             value="PSWorkflow Hosting And Execution Layer"
             />
-        <string
+          <string
+              id="PS_PROVIDER.keyword.K_AmsiState.message"
+              value="Amsi state"
+            />
+          <string
             id="PS_PROVIDER.keyword.K_SESSION.message"
             value="All session layer"
             />
@@ -5493,6 +5647,14 @@
             id="PS_PROVIDER.task.T_ExperimentalFeature.message"
             value="PowerShell Experimental Features"
             />
+        <string
+            id="PS_PROVIDER.event.E_O_TelemetrySettingError.message"
+            value="Failed to retrieve diagnostics and feedback setting from Windows.%n Exception: %1 %n Message: %2 %n StackTrace: %3 %n"
+            />
+        <string
+            id="PS_PROVIDER.task.T_Telemetry.message"
+            value="PowerShell Telemetry"
+            />
         <string
             id="PS_PROVIDER.task.T_NamedPipe.message"
             value="PowerShell Named Pipe IPC"
@@ -5589,7 +5751,11 @@
             id="PS_PROVIDER.task.T_ISEOperation.message"
             value="PowerShell ISE Operation"
             />
-        <string
+          <string
+              id="PS_PROVIDER.task.T_AmsiState.message"
+              value="Amsi State"
+            />
+          <string
             id="PS_PROVIDER.event.E_O_ISEExecuteScript.message"
             value="Windows PowerShell ISE has started to run script file %1."
             />
@@ -5673,6 +5839,30 @@
             id="PS_PROVIDER.event.E_O_REMOTE_NAMEDPIPE_DISCONNECT.message"
             value="PowerShell IPC disconnect on process: %1 in AppDomain: %2 for User: %3."
             />
+        <string
+            id="PS_PROVIDER.event.E_A_WDACQuery.message"
+            value="WDAC Query. %n %t Query: %1 %n %t File: %2 %n %t SuccessCode: %3 %n %t ResultCode: %4"
+            />
+        <string
+            id="PS_PROVIDER.keyword.K_WDACQuery.message"
+            value="WDAC Query"
+            />
+        <string
+            id="PS_PROVIDER.task.T_WDACQuery.message"
+            value="WDAC Query"
+            />
+        <string
+            id="PS_PROVIDER.event.E_A_WDACAudit.message"
+            value="WDAC Audit. %n %t Title: %1 %n %t Message: %2 %n %t FullyQualifiedId: %3"
+            />
+        <string
+            id="PS_PROVIDER.keyword.K_WDACAudit.message"
+            value="WDAC Audit"
+            />
+        <string
+            id="PS_PROVIDER.task.T_WDACAudit.message"
+            value="WDAC Audit"
+            />
       </stringTable>
     </resources>
   </localization>
diff --git a/src/PowerShell.Core.Instrumentation/README.md b/src/PowerShell.Core.Instrumentation/README.md
index 65c8d19fbcb..4701116036b 100644
--- a/src/PowerShell.Core.Instrumentation/README.md
+++ b/src/PowerShell.Core.Instrumentation/README.md
@@ -1,5 +1,7 @@
 # PowerShell.Core.Instrumentation
 
-The code under `PowerShell.Core.Instrumentation` is being migrated to [PowerShell-native](https://github.com/PowerShell/PowerShell-native) repository.
-Please make PRs to the new repository.
-Code under here will be removed once the move is complete.
\ No newline at end of file
+The `PowerShell.Core.Instrumentation.man` has actually been migrated to [PowerShell-Native](https://github.com/PowerShell/PowerShell-Native/tree/master/src/PowerShell.Core.Instrumentation) repository.
+The corresponding manifest resource DLL `PowerShell.Core.Instrumentation.dll` is now produced in the release build of `PowerShell-Native` and is shipped in the `Microsoft.PowerShell.Native` NuGet package.
+
+However, we still need to keep `PowerShell.Core.Instrumentation.man` in the PowerShell repository because the PowerShell packages for Windows ship the manifest file and `RegisterManifest.ps1` for users to register the manifest resource DLL if they want to.
+Therefore, when making changes to `PowerShell.Core.Instrumentation.man`, make sure your changes are made to both repositories -- **this file needs to be kept in sync between those 2 repositories**.
diff --git a/src/ResGen/Program.cs b/src/ResGen/Program.cs
index 3359226a99e..314e6e319b5 100644
--- a/src/ResGen/Program.cs
+++ b/src/ResGen/Program.cs
@@ -9,7 +9,7 @@
 
 namespace ConsoleApplication
 {
-    public class Program
+    public static class Program
     {
         public static void Main(string[] args)
         {
@@ -52,7 +52,7 @@ public static void Main(string[] args)
                         if (className.StartsWith("public.", StringComparison.InvariantCultureIgnoreCase))
                         {
                             accessModifier = "public";
-                            className = className.Substring(className.IndexOf(".") + 1);
+                            className = className.Substring(className.IndexOf('.') + 1);
                         }
 
                         string sourceCode = GetStronglyTypeCsFileForResx(resxPath, moduleName, className, accessModifier);
diff --git a/src/ResGen/ResGen.csproj b/src/ResGen/ResGen.csproj
index 5c736ad9ed9..954038cfa51 100644
--- a/src/ResGen/ResGen.csproj
+++ b/src/ResGen/ResGen.csproj
@@ -2,12 +2,12 @@
 
   <PropertyGroup>
     <Description>Generates C# typed bindings for .resx files</Description>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net11.0</TargetFramework>
     <AssemblyName>resgen</AssemblyName>
     <OutputType>Exe</OutputType>
     <TieredCompilation>true</TieredCompilation>
     <TieredCompilationQuickJit>true</TieredCompilationQuickJit>
-    <RuntimeIdentifiers>win7-x86;win7-x64;osx-x64;linux-x64</RuntimeIdentifiers>
+    <RuntimeIdentifiers>win-x86;win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
   </PropertyGroup>
 
 </Project>
diff --git a/src/Schemas/PSMaml/Maml_HTML_Style.xsl b/src/Schemas/PSMaml/Maml_HTML_Style.xsl
index 3f66ee3f968..955966526cc 100644
--- a/src/Schemas/PSMaml/Maml_HTML_Style.xsl
+++ b/src/Schemas/PSMaml/Maml_HTML_Style.xsl
@@ -172,7 +172,7 @@
 					</xsl:when>
 					<xsl:otherwise>
 						<!-- the default vertical alignment depends on whether
-						     this cell is the the table header, footer or body -->
+						     this cell is the table header, footer or body -->
 						<xsl:choose>
 							<xsl:when test='parent::*/parent::thead'>
 								bottom
@@ -381,4 +381,4 @@
 		
 		</xsl:choose>
 	</xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/src/System.Management.Automation/AssemblyInfo.cs b/src/System.Management.Automation/AssemblyInfo.cs
index 1963b331ef1..e265bb453c8 100644
--- a/src/System.Management.Automation/AssemblyInfo.cs
+++ b/src/System.Management.Automation/AssemblyInfo.cs
@@ -6,33 +6,12 @@
 using System.Runtime.CompilerServices;
 
 [assembly: InternalsVisibleTo("powershell-tests,PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
+[assembly: InternalsVisibleTo("powershell-perf,PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
+[assembly: InternalsVisibleTo("powershell-fuzz-tests,PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
 
-[assembly: InternalsVisibleTo("Microsoft.Test.Management.Automation.GPowershell.Analyzers,PublicKey=00240000048000009400000006020000002400005253413100040000010001003f8c902c8fe7ac83af7401b14c1bd103973b26dfafb2b77eda478a2539b979b56ce47f36336741b4ec52bbc51fecd51ba23810cec47070f3e29a2261a2d1d08e4b2b4b457beaa91460055f78cc89f21cd028377af0cc5e6c04699b6856a1e49d5fad3ef16d3c3d6010f40df0a7d6cc2ee11744b5cfb42e0f19a52b8a29dc31b0")]
-
-#if NOT_SIGNED
-// These attributes aren't every used, it's just a hack to get VS to not complain
-// about access when editing using the project files that don't actually build.
-[assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Commands.Utility")]
-[assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Commands.Management")]
-[assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Security")]
-[assembly: InternalsVisibleTo(@"System.Management.Automation.Remoting")]
-[assembly: InternalsVisibleTo(@"Microsoft.PowerShell.ConsoleHost")]
-#else
 [assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Commands.Utility" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
 [assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Commands.Management" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
 [assembly: InternalsVisibleTo(@"Microsoft.PowerShell.Security" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
 [assembly: InternalsVisibleTo(@"System.Management.Automation.Remoting" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
 [assembly: InternalsVisibleTo(@"Microsoft.PowerShell.ConsoleHost" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
-#endif
-
-namespace System.Management.Automation
-{
-    internal static class NTVerpVars
-    {
-        internal const int PRODUCTMAJORVERSION = 10;
-        internal const int PRODUCTMINORVERSION = 0;
-        internal const int PRODUCTBUILD = 10032;
-        internal const int PRODUCTBUILD_QFE = 0;
-        internal const int PACKAGEBUILD_QFE = 814;
-    }
-}
+[assembly: InternalsVisibleTo(@"Microsoft.PowerShell.DscSubsystem" + @",PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
diff --git a/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs b/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs
index 5bd9be5c62b..5a15df53ca8 100644
--- a/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs
+++ b/src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs
@@ -9,13 +9,14 @@
 using System.Runtime.InteropServices;
 using System.Reflection;
 using System.Runtime.Loader;
+using Microsoft.PowerShell.Telemetry;
 
 namespace System.Management.Automation
 {
     /// <summary>
     /// The powershell custom AssemblyLoadContext implementation.
     /// </summary>
-    internal partial class PowerShellAssemblyLoadContext
+    internal sealed partial class PowerShellAssemblyLoadContext
     {
         #region Resource_Strings
 
@@ -36,16 +37,19 @@ internal partial class PowerShellAssemblyLoadContext
         /// <summary>
         /// Initialize a singleton of PowerShellAssemblyLoadContext.
         /// </summary>
-        internal static PowerShellAssemblyLoadContext InitializeSingleton(string basePaths)
+        internal static PowerShellAssemblyLoadContext InitializeSingleton(string basePaths, bool throwOnReentry)
         {
             lock (s_syncObj)
             {
-                if (Instance != null)
+                if (Instance is null)
+                {
+                    Instance = new PowerShellAssemblyLoadContext(basePaths);
+                }
+                else if (throwOnReentry)
                 {
                     throw new InvalidOperationException(SingletonAlreadyInitialized);
                 }
 
-                Instance = new PowerShellAssemblyLoadContext(basePaths);
                 return Instance;
             }
         }
@@ -232,6 +236,9 @@ internal IEnumerable<Assembly> GetAssembly(string namespaceQualifiedTypeName)
         ///                     |
         ///                     |--- 'osx-x64' subfolder
         ///                     |       |--- native.dylib
+        ///                     |
+        ///                     |--- 'osx-arm64' subfolder
+        ///                     |       |--- native.dylib
         /// </summary>
         internal static IntPtr NativeDllHandler(Assembly assembly, string libraryName)
         {
@@ -343,9 +350,6 @@ private bool TryFindInGAC(AssemblyName assemblyName, out string assemblyFilePath
                 return false;
             }
 
-            bool assemblyFound = false;
-            char dirSeparator = IO.Path.DirectorySeparatorChar;
-
             if (string.IsNullOrEmpty(_winDir))
             {
                 // cache value of '_winDir' folder in member variable.
@@ -355,21 +359,21 @@ private bool TryFindInGAC(AssemblyName assemblyName, out string assemblyFilePath
             if (string.IsNullOrEmpty(_gacPathMSIL))
             {
                 // cache value of '_gacPathMSIL' folder in member variable.
-                _gacPathMSIL = $"{_winDir}{dirSeparator}Microsoft.NET{dirSeparator}assembly{dirSeparator}GAC_MSIL";
+                _gacPathMSIL = Path.Join(_winDir, "Microsoft.NET", "assembly", "GAC_MSIL");
             }
 
-            assemblyFound = FindInGac(_gacPathMSIL, assemblyName, out assemblyFilePath);
+            bool assemblyFound = FindInGac(_gacPathMSIL, assemblyName, out assemblyFilePath);
 
             if (!assemblyFound)
             {
-                string gacBitnessAwarePath = null;
+                string gacBitnessAwarePath;
 
                 if (Environment.Is64BitProcess)
                 {
                     if (string.IsNullOrEmpty(_gacPath64))
                     {
-                        // cache value of '_gacPath64' folder in member variable.
-                        _gacPath64 = $"{_winDir}{dirSeparator}Microsoft.NET{dirSeparator}assembly{dirSeparator}GAC_64";
+                       var gacName = RuntimeInformation.ProcessArchitecture == Architecture.Arm64 ? "GAC_Arm64" : "GAC_64";
+                        _gacPath64 = Path.Join(_winDir, "Microsoft.NET", "assembly", gacName);
                     }
 
                     gacBitnessAwarePath = _gacPath64;
@@ -378,8 +382,7 @@ private bool TryFindInGAC(AssemblyName assemblyName, out string assemblyFilePath
                 {
                     if (string.IsNullOrEmpty(_gacPath32))
                     {
-                        // cache value of '_gacPath32' folder in member variable.
-                        _gacPath32 = $"{_winDir}{dirSeparator}Microsoft.NET{dirSeparator}assembly{dirSeparator}GAC_32";
+                        _gacPath32 = Path.Join(_winDir, "Microsoft.NET", "assembly", "GAC_32");
                     }
 
                     gacBitnessAwarePath = _gacPath32;
@@ -397,13 +400,12 @@ private static bool FindInGac(string gacRoot, AssemblyName assemblyName, out str
             bool assemblyFound = false;
             assemblyPath = null;
 
-            char dirSeparator = IO.Path.DirectorySeparatorChar;
-            string tempAssemblyDirPath = $"{gacRoot}{dirSeparator}{assemblyName.Name}";
+            string tempAssemblyDirPath = Path.Join(gacRoot, assemblyName.Name);
 
             if (Directory.Exists(tempAssemblyDirPath))
             {
                 // Enumerate all directories, sort by name and select the last. This selects the latest version.
-                var chosenVersionDirectory = Directory.EnumerateDirectories(tempAssemblyDirPath).OrderBy(d => d).LastOrDefault();
+                var chosenVersionDirectory = Directory.EnumerateDirectories(tempAssemblyDirPath).Order().LastOrDefault();
 
                 if (!string.IsNullOrEmpty(chosenVersionDirectory))
                 {
@@ -540,19 +542,19 @@ private static string GetNativeDllSubFolderName(out string ext)
             ext = string.Empty;
             var processArch = RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();
 
-            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            if (Platform.IsWindows)
             {
                 folderName = "win-" + processArch;
                 ext = ".dll";
             }
-            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+            else if (Platform.IsLinux)
             {
                 folderName = "linux-" + processArch;
                 ext = ".so";
             }
-            else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+            else if (Platform.IsMacOS)
             {
-                folderName = "osx-x64";
+                folderName = "osx-" + processArch;
                 ext = ".dylib";
             }
 
@@ -581,10 +583,44 @@ public static class PowerShellAssemblyLoadContextInitializer
         /// </param>
         public static void SetPowerShellAssemblyLoadContext([MarshalAs(UnmanagedType.LPWStr)] string basePaths)
         {
-            if (string.IsNullOrEmpty(basePaths))
-                throw new ArgumentNullException(nameof(basePaths));
+            ArgumentException.ThrowIfNullOrEmpty(basePaths);
+
+            // Disallow calling this method from native code for more than once.
+            PowerShellAssemblyLoadContext.InitializeSingleton(basePaths, throwOnReentry: true);
+        }
+    }
+
+    /// <summary>
+    /// Provides helper functions to facilitate calling managed code from a native PowerShell host.
+    /// </summary>
+    public static unsafe class PowerShellUnsafeAssemblyLoad
+    {
+        /// <summary>
+        /// Load an assembly in memory from unmanaged code.
+        /// </summary>
+        /// <remarks>
+        /// This API is covered by the experimental feature 'PSLoadAssemblyFromNativeCode',
+        /// and it may be deprecated and removed in future.
+        /// </remarks>
+        /// <param name="data">Unmanaged pointer to assembly data buffer.</param>
+        /// <param name="size">Size in bytes of the assembly data buffer.</param>
+        /// <returns>Returns zero on success and non-zero on failure.</returns>
+        [UnmanagedCallersOnly]
+        public static int LoadAssemblyFromNativeMemory(IntPtr data, int size)
+        {
+            int result = 0;
+            try
+            {
+                using var stream = new UnmanagedMemoryStream((byte*)data, size);
+                AssemblyLoadContext.Default.LoadFromStream(stream);
+            }
+            catch
+            {
+                result = -1;
+            }
 
-            PowerShellAssemblyLoadContext.InitializeSingleton(basePaths);
+            ApplicationInsightsTelemetry.SendUseTelemetry("PowerShellUnsafeAssemblyLoad", result == 0 ? "1" : "0");
+            return result;
         }
     }
 }
diff --git a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs
index b5e657d497f..4cbb346fb14 100644
--- a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs
+++ b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs
@@ -5,19 +5,16 @@
 using System.ComponentModel;
 using System.IO;
 using System.Runtime.InteropServices;
-
+using System.Management.Automation.Internal;
 using Microsoft.Win32;
-using Microsoft.Win32.SafeHandles;
 
 namespace System.Management.Automation
 {
     /// <summary>
     /// These are platform abstractions and platform specific implementations.
     /// </summary>
-    public static class Platform
+    public static partial class Platform
     {
-        private static string _tempDirectory = null;
-
         /// <summary>
         /// True if the current platform is Linux.
         /// </summary>
@@ -25,7 +22,7 @@ public static bool IsLinux
         {
             get
             {
-                return RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
+                return OperatingSystem.IsLinux();
             }
         }
 
@@ -36,7 +33,7 @@ public static bool IsMacOS
         {
             get
             {
-                return RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
+                return OperatingSystem.IsMacOS();
             }
         }
 
@@ -47,7 +44,7 @@ public static bool IsWindows
         {
             get
             {
-                return RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
+                return OperatingSystem.IsWindows();
             }
         }
 
@@ -72,7 +69,10 @@ public static bool IsNanoServer
 #if UNIX
                 return false;
 #else
-                if (_isNanoServer.HasValue) { return _isNanoServer.Value; }
+                if (_isNanoServer.HasValue)
+                {
+                    return _isNanoServer.Value;
+                }
 
                 _isNanoServer = false;
                 using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels"))
@@ -102,7 +102,10 @@ public static bool IsIoT
 #if UNIX
                 return false;
 #else
-                if (_isIoT.HasValue) { return _isIoT.Value; }
+                if (_isIoT.HasValue)
+                {
+                    return _isIoT.Value;
+                }
 
                 _isIoT = false;
                 using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
@@ -132,7 +135,10 @@ public static bool IsWindowsDesktop
 #if UNIX
                 return false;
 #else
-                if (_isWindowsDesktop.HasValue) { return _isWindowsDesktop.Value; }
+                if (_isWindowsDesktop.HasValue)
+                {
+                    return _isWindowsDesktop.Value;
+                }
 
                 _isWindowsDesktop = !IsNanoServer && !IsIoT;
                 return _isWindowsDesktop.Value;
@@ -140,22 +146,83 @@ public static bool IsWindowsDesktop
             }
         }
 
+        /// <summary>
+        /// Gets a value indicating whether the underlying system supports single-threaded apartment.
+        /// </summary>
+        public static bool IsStaSupported
+        {
+            get
+            {
+#if UNIX
+                return false;
+#else
+                return _isStaSupported.Value;
+#endif
+            }
+        }
+
 #if UNIX
         // Gets the location for cache and config folders.
         internal static readonly string CacheDirectory = Platform.SelectProductNameForDirectory(Platform.XDG_Type.CACHE);
         internal static readonly string ConfigDirectory = Platform.SelectProductNameForDirectory(Platform.XDG_Type.CONFIG);
 #else
         // Gets the location for cache and config folders.
-        internal static readonly string CacheDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\PowerShell";
-        internal static readonly string ConfigDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"\PowerShell";
+        internal static readonly string CacheDirectory = SafeDeriveFromSpecialFolder(
+            Environment.SpecialFolder.LocalApplicationData,
+            @"Microsoft\PowerShell");
+
+        internal static readonly string ConfigDirectory = SafeDeriveFromSpecialFolder(
+            Environment.SpecialFolder.Personal,
+            @"PowerShell");
+
+        private static readonly Lazy<bool> _isStaSupported = new Lazy<bool>(() =>
+        {
+            int result = Interop.Windows.CoInitializeEx(IntPtr.Zero, Interop.Windows.COINIT_APARTMENTTHREADED);
+
+            // Per COM documentation: Each successful call to CoInitializeEx (including S_FALSE)
+            // must be balanced by a corresponding call to CoUninitialize.
+            //  - S_OK (0) means we initialized for the first time.
+            //  - S_FALSE (1) means already initialized, but still increments the reference count.
+            // Both require CoUninitialize to decrement the reference count.
+            if (result >= 0)
+            {
+                Interop.Windows.CoUninitialize();
+            }
+
+            return result != Interop.Windows.E_NOTIMPL;
+        });
 
         private static bool? _isNanoServer = null;
         private static bool? _isIoT = null;
         private static bool? _isWindowsDesktop = null;
 #endif
 
+        internal static bool TryDeriveFromCache(string path1, out string result)
+        {
+            if (CacheDirectory is null or [])
+            {
+                result = null;
+                return false;
+            }
+
+            result = Path.Combine(CacheDirectory, path1);
+            return true;
+        }
+
+        internal static bool TryDeriveFromCache(string path1, string path2, out string result)
+        {
+            if (CacheDirectory is null or [])
+            {
+                result = null;
+                return false;
+            }
+
+            result = Path.Combine(CacheDirectory, path1, path2);
+            return true;
+        }
+
         // format files
-        internal static readonly List<string> FormatFileNames = new()
+        internal static readonly string[] FormatFileNames = new string[]
         {
             "Certificate.format.ps1xml",
             "Diagnostics.format.ps1xml",
@@ -183,43 +250,48 @@ internal static class CommonEnvVariableNames
 #endif
         }
 
-        /// <summary>
-        /// Remove the temporary directory created for the current process.
-        /// </summary>
-        internal static void RemoveTemporaryDirectory()
+        private static string SafeDeriveFromSpecialFolder(Environment.SpecialFolder specialFolder, string subPath)
         {
-            if (_tempDirectory == null)
+            string basePath = Environment.GetFolderPath(specialFolder, Environment.SpecialFolderOption.DoNotVerify);
+            if (string.IsNullOrWhiteSpace(basePath))
             {
-                return;
+                return string.Empty;
             }
 
-            try
-            {
-                Directory.Delete(_tempDirectory, true);
-            }
-            catch
-            {
-                // ignore if there is a failure
-            }
-
-            _tempDirectory = null;
+            return Path.Join(basePath, subPath);
         }
 
+#if UNIX
+        private static string s_tempHome = null;
+
         /// <summary>
-        /// Get a temporary directory to use for the current process.
+        /// Get the 'HOME' environment variable or create a temporary home directory if the environment variable is not set.
         /// </summary>
-        internal static string GetTemporaryDirectory()
+        private static string GetHomeOrCreateTempHome()
         {
-            if (_tempDirectory != null)
+            const string tempHomeFolderName = "pwsh-{0}-98288ff9-5712-4a14-9a11-23693b9cd91a";
+
+            string envHome = Environment.GetEnvironmentVariable("HOME") ?? s_tempHome;
+            if (envHome is not null)
             {
-                return _tempDirectory;
+                return envHome;
             }
 
-            _tempDirectory = PsUtils.GetTemporaryDirectory();
-            return _tempDirectory;
+            try
+            {
+                s_tempHome = Path.Combine(Path.GetTempPath(), StringUtil.Format(tempHomeFolderName, Environment.UserName));
+                Directory.CreateDirectory(s_tempHome);
+            }
+            catch (UnauthorizedAccessException)
+            {
+                // Directory creation may fail if the account doesn't have filesystem permission such as some service accounts.
+                // Return an empty string in this case so the process working directory will be used.
+                s_tempHome = string.Empty;
+            }
+
+            return s_tempHome;
         }
 
-#if UNIX
         /// <summary>
         /// X Desktop Group configuration type enum.
         /// </summary>
@@ -239,230 +311,100 @@ public enum XDG_Type
             DEFAULT
         }
 
-        private static string s_tempHomeDir = null;
-
         /// <summary>
         /// Function for choosing directory location of PowerShell for profile loading.
         /// </summary>
-        public static string SelectProductNameForDirectory(Platform.XDG_Type dirpath)
+        public static string SelectProductNameForDirectory(XDG_Type dirpath)
         {
             // TODO: XDG_DATA_DIRS implementation as per GitHub issue #1060
 
-            string xdgconfighome = System.Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
-            string xdgdatahome = System.Environment.GetEnvironmentVariable("XDG_DATA_HOME");
-            string xdgcachehome = System.Environment.GetEnvironmentVariable("XDG_CACHE_HOME");
-            string envHome = System.Environment.GetEnvironmentVariable(CommonEnvVariableNames.Home);
-            if (envHome == null)
-            {
-                s_tempHomeDir ??= GetTemporaryDirectory();
-                envHome = s_tempHomeDir;
-            }
+            string xdgconfighome = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
+            string xdgdatahome = Environment.GetEnvironmentVariable("XDG_DATA_HOME");
+            string xdgcachehome = Environment.GetEnvironmentVariable("XDG_CACHE_HOME");
+            string envHome = GetHomeOrCreateTempHome();
 
             string xdgConfigHomeDefault = Path.Combine(envHome, ".config", "powershell");
             string xdgDataHomeDefault = Path.Combine(envHome, ".local", "share", "powershell");
             string xdgModuleDefault = Path.Combine(xdgDataHomeDefault, "Modules");
             string xdgCacheDefault = Path.Combine(envHome, ".cache", "powershell");
 
-            switch (dirpath)
+            try
             {
-                case Platform.XDG_Type.CONFIG:
-                    // the user has set XDG_CONFIG_HOME corresponding to profile path
-                    if (string.IsNullOrEmpty(xdgconfighome))
-                    {
-                        // xdg values have not been set
-                        return xdgConfigHomeDefault;
-                    }
-
-                    else
-                    {
-                        return Path.Combine(xdgconfighome, "powershell");
-                    }
-
-                case Platform.XDG_Type.DATA:
-                    // the user has set XDG_DATA_HOME corresponding to module path
-                    if (string.IsNullOrEmpty(xdgdatahome))
-                    {
-                        // create the xdg folder if needed
-                        if (!Directory.Exists(xdgDataHomeDefault))
+                switch (dirpath)
+                {
+                    case XDG_Type.CONFIG:
+                        // Use 'XDG_CONFIG_HOME' if it's set, otherwise use the default path.
+                        return string.IsNullOrEmpty(xdgconfighome)
+                            ? xdgConfigHomeDefault
+                            : Path.Combine(xdgconfighome, "powershell");
+
+                    case XDG_Type.DATA:
+                        // Use 'XDG_DATA_HOME' if it's set, otherwise use the default path.
+                        if (string.IsNullOrEmpty(xdgdatahome))
                         {
-                            try
-                            {
-                                Directory.CreateDirectory(xdgDataHomeDefault);
-                            }
-                            catch (UnauthorizedAccessException)
-                            {
-                                // service accounts won't have permission to create user folder
-                                return GetTemporaryDirectory();
-                            }
+                            // Create the default data directory if it doesn't exist.
+                            Directory.CreateDirectory(xdgDataHomeDefault);
+                            return xdgDataHomeDefault;
                         }
-
-                        return xdgDataHomeDefault;
-                    }
-                    else
-                    {
                         return Path.Combine(xdgdatahome, "powershell");
-                    }
 
-                case Platform.XDG_Type.USER_MODULES:
-                    // the user has set XDG_DATA_HOME corresponding to module path
-                    if (string.IsNullOrEmpty(xdgdatahome))
-                    {
-                        // xdg values have not been set
-                        if (!Directory.Exists(xdgModuleDefault)) // module folder not always guaranteed to exist
+                    case XDG_Type.USER_MODULES:
+                        // Use 'XDG_DATA_HOME' if it's set, otherwise use the default path.
+                        if (string.IsNullOrEmpty(xdgdatahome))
                         {
-                            try
-                            {
-                                Directory.CreateDirectory(xdgModuleDefault);
-                            }
-                            catch (UnauthorizedAccessException)
-                            {
-                                // service accounts won't have permission to create user folder
-                                return GetTemporaryDirectory();
-                            }
+                            Directory.CreateDirectory(xdgModuleDefault);
+                            return xdgModuleDefault;
                         }
-
-                        return xdgModuleDefault;
-                    }
-                    else
-                    {
                         return Path.Combine(xdgdatahome, "powershell", "Modules");
-                    }
 
-                case Platform.XDG_Type.SHARED_MODULES:
-                    return "/usr/local/share/powershell/Modules";
+                    case XDG_Type.SHARED_MODULES:
+                        return "/usr/local/share/powershell/Modules";
 
-                case Platform.XDG_Type.CACHE:
-                    // the user has set XDG_CACHE_HOME
-                    if (string.IsNullOrEmpty(xdgcachehome))
-                    {
-                        // xdg values have not been set
-                        if (!Directory.Exists(xdgCacheDefault)) // module folder not always guaranteed to exist
+                    case XDG_Type.CACHE:
+                        // Use 'XDG_CACHE_HOME' if it's set, otherwise use the default path.
+                        if (string.IsNullOrEmpty(xdgcachehome))
                         {
-                            try
-                            {
-                                Directory.CreateDirectory(xdgCacheDefault);
-                            }
-                            catch (UnauthorizedAccessException)
-                            {
-                                // service accounts won't have permission to create user folder
-                                return GetTemporaryDirectory();
-                            }
+                            Directory.CreateDirectory(xdgCacheDefault);
+                            return xdgCacheDefault;
                         }
 
-                        return xdgCacheDefault;
-                    }
-                    else
-                    {
-                        if (!Directory.Exists(Path.Combine(xdgcachehome, "powershell")))
-                        {
-                            try
-                            {
-                                Directory.CreateDirectory(Path.Combine(xdgcachehome, "powershell"));
-                            }
-                            catch (UnauthorizedAccessException)
-                            {
-                                // service accounts won't have permission to create user folder
-                                return GetTemporaryDirectory();
-                            }
-                        }
-
-                        return Path.Combine(xdgcachehome, "powershell");
-                    }
-
-                case Platform.XDG_Type.DEFAULT:
-                    // default for profile location
-                    return xdgConfigHomeDefault;
+                        string cachePath = Path.Combine(xdgcachehome, "powershell");
+                        Directory.CreateDirectory(cachePath);
+                        return cachePath;
 
-                default:
-                    // xdgConfigHomeDefault needs to be created in the edge case that we do not have the folder or it was deleted
-                    // This folder is the default in the event of all other failures for data storage
-                    if (!Directory.Exists(xdgConfigHomeDefault))
-                    {
-                        try
-                        {
-                            Directory.CreateDirectory(xdgConfigHomeDefault);
-                        }
-                        catch
-                        {
-                            Console.Error.WriteLine("Failed to create default data directory: " + xdgConfigHomeDefault);
-                        }
-                    }
+                    case XDG_Type.DEFAULT:
+                        // Use 'xdgConfigHomeDefault' for 'XDG_Type.DEFAULT' and create the directory if it doesn't exist.
+                        Directory.CreateDirectory(xdgConfigHomeDefault);
+                        return xdgConfigHomeDefault;
 
-                    return xdgConfigHomeDefault;
+                    default:
+                        throw new InvalidOperationException("Unreachable code.");
+                }
+            }
+            catch (UnauthorizedAccessException)
+            {
+                // Directory creation may fail if the account doesn't have filesystem permission such as some service accounts.
+                // Return an empty string in this case so the process working directory will be used.
+                return string.Empty;
             }
         }
 #endif
 
         /// <summary>
-        /// The code is copied from the .NET implementation.
-        /// </summary>
-        internal static string GetFolderPath(System.Environment.SpecialFolder folder)
-        {
-            return InternalGetFolderPath(folder);
-        }
-
-        /// <summary>
-        /// The API set 'api-ms-win-shell-shellfolders-l1-1-0.dll' was removed from NanoServer, so we cannot depend on 'SHGetFolderPathW'
-        /// to get the special folder paths. Instead, we need to rely on the basic environment variables to get the special folder paths.
+        /// Mimic 'Environment.GetFolderPath(folder)' on Unix.
         /// </summary>
-        /// <returns>
-        /// The path to the specified system special folder, if that folder physically exists on your computer.
-        /// Otherwise, an empty string (string.Empty).
-        /// </returns>
-        private static string InternalGetFolderPath(System.Environment.SpecialFolder folder)
+        internal static string GetFolderPath(Environment.SpecialFolder folder)
         {
-            string folderPath = null;
 #if UNIX
-            string envHome = System.Environment.GetEnvironmentVariable(Platform.CommonEnvVariableNames.Home);
-            if (envHome == null)
+            return folder switch
             {
-                envHome = Platform.GetTemporaryDirectory();
-            }
-
-            switch (folder)
-            {
-                case System.Environment.SpecialFolder.ProgramFiles:
-                    folderPath = "/bin";
-                    if (!System.IO.Directory.Exists(folderPath)) { folderPath = null; }
-
-                    break;
-                case System.Environment.SpecialFolder.ProgramFilesX86:
-                    folderPath = "/usr/bin";
-                    if (!System.IO.Directory.Exists(folderPath)) { folderPath = null; }
-
-                    break;
-                case System.Environment.SpecialFolder.System:
-                case System.Environment.SpecialFolder.SystemX86:
-                    folderPath = "/sbin";
-                    if (!System.IO.Directory.Exists(folderPath)) { folderPath = null; }
-
-                    break;
-                case System.Environment.SpecialFolder.Personal:
-                    folderPath = envHome;
-                    break;
-                case System.Environment.SpecialFolder.LocalApplicationData:
-                    folderPath = System.IO.Path.Combine(envHome, ".config");
-                    if (!System.IO.Directory.Exists(folderPath))
-                    {
-                        try
-                        {
-                            System.IO.Directory.CreateDirectory(folderPath);
-                        }
-                        catch (UnauthorizedAccessException)
-                        {
-                            // directory creation may fail if the account doesn't have filesystem permission such as some service accounts
-                            folderPath = string.Empty;
-                        }
-                    }
-
-                    break;
-                default:
-                    throw new NotSupportedException();
-            }
+                Environment.SpecialFolder.ProgramFiles => Directory.Exists("/bin") ? "/bin" : string.Empty,
+                Environment.SpecialFolder.MyDocuments => GetHomeOrCreateTempHome(),
+                _ => throw new NotSupportedException()
+            };
 #else
-            folderPath = System.Environment.GetFolderPath(folder);
+            return Environment.GetFolderPath(folder, Environment.SpecialFolderOption.DoNotVerify);
 #endif
-            return folderPath ?? string.Empty;
         }
 
         // Platform methods prefixed NonWindows are:
@@ -475,21 +417,11 @@ private static string InternalGetFolderPath(System.Environment.SpecialFolder fol
         // - only to be used with the IsWindows feature query, and only if
         //   no other more specific feature query makes sense
 
-        internal static bool NonWindowsIsHardLink(ref IntPtr handle)
-        {
-            return Unix.IsHardLink(ref handle);
-        }
-
         internal static bool NonWindowsIsHardLink(FileSystemInfo fileInfo)
         {
             return Unix.IsHardLink(fileInfo);
         }
 
-        internal static string NonWindowsInternalGetTarget(string path)
-        {
-            return Unix.NativeMethods.FollowSymLink(path);
-        }
-
         internal static string NonWindowsGetUserFromPid(int path)
         {
             return Unix.NativeMethods.GetUserFromPid(path);
@@ -532,11 +464,9 @@ internal static bool NonWindowsIsSameFileSystemItem(string pathOne, string pathT
             return Unix.NativeMethods.IsSameFileSystemItem(pathOne, pathTwo);
         }
 
-        internal static bool NonWindowsGetInodeData(string path, out System.ValueTuple<UInt64, UInt64> inodeData)
+        internal static bool NonWindowsGetInodeData(string path, out ValueTuple<ulong, ulong> inodeData)
         {
-            UInt64 device = 0UL;
-            UInt64 inode = 0UL;
-            var result = Unix.NativeMethods.GetInodeData(path, out device, out inode);
+            var result = Unix.NativeMethods.GetInodeData(path, out ulong device, out ulong inode);
 
             inodeData = (device, inode);
             return result == 0;
@@ -557,6 +487,16 @@ internal static int NonWindowsGetProcessParentPid(int pid)
             return IsMacOS ? Unix.NativeMethods.GetPPid(pid) : Unix.GetProcFSParentPid(pid);
         }
 
+        internal static bool NonWindowsKillProcess(int pid)
+        {
+            return Unix.NativeMethods.KillProcess(pid);
+        }
+
+        internal static int NonWindowsWaitPid(int pid, bool nohang)
+        {
+            return Unix.NativeMethods.WaitPid(pid, nohang);
+        }
+
         // Please note that `Win32Exception(Marshal.GetLastWin32Error())`
         // works *correctly* on Linux in that it creates an exception with
         // the string perror would give you for the last set value of errno.
@@ -564,10 +504,10 @@ internal static int NonWindowsGetProcessParentPid(int pid)
         // to a PAL value and calls strerror_r underneath to generate the message.
 
         /// <summary>Unix specific implementations of required functionality.</summary>
-        internal static class Unix
+        internal static partial class Unix
         {
-            private static Dictionary<int, string> usernameCache = new();
-            private static Dictionary<int, string> groupnameCache = new();
+            private static readonly Dictionary<int, string> usernameCache = new();
+            private static readonly Dictionary<int, string> groupnameCache = new();
 
             /// <summary>The type of a Unix file system item.</summary>
             public enum ItemType
@@ -697,82 +637,73 @@ public class CommonStat
                 private const char CanRead = 'r';
                 private const char CanWrite = 'w';
                 private const char CanExecute = 'x';
-
-                // helper for getting unix mode
-                private Dictionary<StatMask, char> modeMap = new()
-                {
-                        { StatMask.OwnerRead, CanRead },
-                        { StatMask.OwnerWrite, CanWrite },
-                        { StatMask.OwnerExecute, CanExecute },
-                        { StatMask.GroupRead, CanRead },
-                        { StatMask.GroupWrite, CanWrite },
-                        { StatMask.GroupExecute, CanExecute },
-                        { StatMask.OtherRead, CanRead },
-                        { StatMask.OtherWrite, CanWrite },
-                        { StatMask.OtherExecute, CanExecute },
-                };
-
-                private StatMask[] permissions = new StatMask[]
-                {
-                    StatMask.OwnerRead,
-                    StatMask.OwnerWrite,
-                    StatMask.OwnerExecute,
-                    StatMask.GroupRead,
-                    StatMask.GroupWrite,
-                    StatMask.GroupExecute,
-                    StatMask.OtherRead,
-                    StatMask.OtherWrite,
-                    StatMask.OtherExecute
-                };
+                private const char NoPerm = '-';
+                private const char SetAndExec = 's';
+                private const char SetAndNotExec = 'S';
+                private const char StickyAndExec = 't';
+                private const char StickyAndNotExec = 'T';
 
                 // The item type and the character representation for the first element in the stat string
-                private Dictionary<ItemType, char> itemTypeTable = new()
+                private static readonly Dictionary<ItemType, char> itemTypeTable = new()
                 {
-                    { ItemType.BlockDevice, 'b' },
+                    { ItemType.BlockDevice,     'b' },
                     { ItemType.CharacterDevice, 'c' },
-                    { ItemType.Directory, 'd' },
-                    { ItemType.File, '-' },
-                    { ItemType.NamedPipe, 'p' },
-                    { ItemType.Socket, 's' },
-                    { ItemType.SymbolicLink, 'l' },
+                    { ItemType.Directory,       'd' },
+                    { ItemType.File,            '-' },
+                    { ItemType.NamedPipe,       'p' },
+                    { ItemType.Socket,          's' },
+                    { ItemType.SymbolicLink,    'l' },
                 };
 
+                // We'll create a few common mode strings here to reduce allocations and improve performance a bit.
+                private const string OwnerReadGroupReadOtherRead = "-r--r--r--";
+                private const string OwnerReadWriteGroupReadOtherRead = "-rw-r--r--";
+                private const string DirectoryOwnerFullGroupReadExecOtherReadExec = "drwxr-xr-x";
+
                 /// <summary>Convert the mode to a string which is usable in our formatting.</summary>
                 /// <returns>The mode converted into a Unix style string similar to the output of ls.</returns>
                 public string GetModeString()
                 {
-                    int offset = 0;
-                    char[] modeCharacters = new char[10];
-                    modeCharacters[offset++] = itemTypeTable[ItemType];
+                    // On an Ubuntu system (docker), these 3 are roughly 70% of all the permissions
+                    if ((Mode & 0xFFF) == 292)
+                    {
+                        return OwnerReadGroupReadOtherRead;
+                    }
 
-                    foreach (StatMask permission in permissions)
+                    if ((Mode & 0xFFF) == 420)
                     {
-                        // determine whether we are setuid, sticky, or the usual rwx.
-                        if ((Mode & (int)permission) == (int)permission)
-                        {
-                            if ((permission == StatMask.OwnerExecute && IsSetUid) || (permission == StatMask.GroupExecute && IsSetGid))
-                            {
-                                // Check for setuid and add 's'
-                                modeCharacters[offset] = 's';
-                            }
-                            else if (permission == StatMask.OtherExecute && IsSticky && (ItemType == ItemType.Directory))
-                            {
-                                // Directories are sticky, rather than setuid
-                                modeCharacters[offset] = 't';
-                            }
-                            else
-                            {
-                                modeCharacters[offset] = modeMap[permission];
-                            }
-                        }
-                        else
-                        {
-                            modeCharacters[offset] = '-';
-                        }
+                       return OwnerReadWriteGroupReadOtherRead;
+                    }
 
-                        offset++;
+                    if (ItemType == ItemType.Directory & (Mode & 0xFFF) == 493)
+                    {
+                        return DirectoryOwnerFullGroupReadExecOtherReadExec;
                     }
 
+                    UnixFileMode modeInfo = (UnixFileMode)Mode;
+
+                    Span<char> modeCharacters = [
+                        itemTypeTable[ItemType],
+
+                        modeInfo.HasFlag(UnixFileMode.UserRead) ? CanRead : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.UserWrite) ? CanWrite : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.SetUser) ?
+                            (modeInfo.HasFlag(UnixFileMode.UserExecute) ? SetAndExec : SetAndNotExec) :
+                            (modeInfo.HasFlag(UnixFileMode.UserExecute) ? CanExecute : NoPerm),
+
+                        modeInfo.HasFlag(UnixFileMode.GroupRead) ? CanRead : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.GroupWrite) ? CanWrite : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.SetGroup) ?
+                            (modeInfo.HasFlag(UnixFileMode.GroupExecute) ? SetAndExec : SetAndNotExec) :
+                            (modeInfo.HasFlag(UnixFileMode.GroupExecute) ? CanExecute : NoPerm),
+
+                        modeInfo.HasFlag(UnixFileMode.OtherRead) ? CanRead : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.OtherWrite) ? CanWrite : NoPerm,
+                        modeInfo.HasFlag(UnixFileMode.StickyBit) ?
+                            (modeInfo.HasFlag(UnixFileMode.OtherExecute) ? StickyAndExec : StickyAndNotExec) :
+                            (modeInfo.HasFlag(UnixFileMode.OtherExecute) ? CanExecute : NoPerm),
+                    ];
+
                     return new string(modeCharacters);
                 }
 
@@ -823,15 +754,6 @@ internal static ErrorCategory GetErrorCategory(int errno)
                 return (ErrorCategory)Unix.NativeMethods.GetErrorCategory(errno);
             }
 
-            /// <summary>Is this a hardlink.</summary>
-            /// <param name="handle">The handle to a file.</param>
-            /// <returns>A boolean that represents whether the item is a hardlink.</returns>
-            public static bool IsHardLink(ref IntPtr handle)
-            {
-                // TODO:PSL implement using fstat to query inode refcount to see if it is a hard link
-                return false;
-            }
-
             /// <summary>Determine if the item is a hardlink.</summary>
             /// <param name="fs">A FileSystemInfo to check to determine if it is a hardlink.</param>
             /// <returns>A boolean that represents whether the item is a hardlink.</returns>
@@ -972,20 +894,40 @@ public static int GetProcFSParentPid(int pid)
             {
                 const int invalidPid = -1;
 
-                // read /proc/<pid>/stat
-                // 4th column will contain the ppid, 92 in the example below
-                // ex: 93 (bash) S 92 93 2 4294967295 ...
-                var path = $"/proc/{pid}/stat";
+                // read /proc/<pid>/status
+                // Row beginning with PPid: \d is the parent process id.
+                // This used to check /proc/<pid>/stat but that file was meant
+                // to be a space delimited line but it contains a value which
+                // could contain spaces itself. Using the status file is a lot
+                // simpler because each line contains a record with a simple
+                // label.
+                // https://github.com/PowerShell/PowerShell/issues/17541#issuecomment-1159911577
+                var path = $"/proc/{pid}/status";
                 try
                 {
-                    var stat = System.IO.File.ReadAllText(path);
-                    var parts = stat.Split(' ', 5);
-                    if (parts.Length < 5)
+                    using FileStream fs = File.OpenRead(path);
+                    using StreamReader sr = new(fs);
+                    string line;
+                    while ((line = sr.ReadLine()) != null)
                     {
-                        return invalidPid;
+                        if (!line.StartsWith("PPid:\t", StringComparison.OrdinalIgnoreCase))
+                        {
+                            continue;
+                        }
+
+                        string[] lineSplit = line.Split('\t', 2, StringSplitOptions.RemoveEmptyEntries);
+                        if (lineSplit.Length != 2)
+                        {
+                            continue;
+                        }
+
+                        if (int.TryParse(lineSplit[1].Trim(), out var ppid))
+                        {
+                            return ppid;
+                        }
                     }
 
-                    return Int32.Parse(parts[3]);
+                    return invalidPid;
                 }
                 catch (Exception)
                 {
@@ -994,31 +936,40 @@ public static int GetProcFSParentPid(int pid)
             }
 
             /// <summary>The native methods class.</summary>
-            internal static class NativeMethods
+            internal static partial class NativeMethods
             {
                 private const string psLib = "libpsl-native";
 
                 // Ansi is a misnomer, it is hardcoded to UTF-8 on Linux and macOS
-                // C bools are 1 byte and so must be marshaled as I1
+                // C bools are 1 byte and so must be marshalled as I1
 
-                [DllImport(psLib, CharSet = CharSet.Ansi)]
-                internal static extern int GetErrorCategory(int errno);
+                [LibraryImport(psLib)]
+                internal static partial int GetErrorCategory(int errno);
 
-                [DllImport(psLib)]
-                internal static extern int GetPPid(int pid);
+                [LibraryImport(psLib)]
+                internal static partial int GetPPid(int pid);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern int GetLinkCount([MarshalAs(UnmanagedType.LPStr)] string filePath, out int linkCount);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8, SetLastError = true)]
+                internal static partial int GetLinkCount(string filePath, out int linkCount);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
                 [return: MarshalAs(UnmanagedType.I1)]
-                internal static extern bool IsExecutable([MarshalAs(UnmanagedType.LPStr)] string filePath);
+                internal static partial bool IsExecutable(string filePath);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi)]
-                internal static extern uint GetCurrentThreadId();
+                [LibraryImport(psLib)]
+                internal static partial uint GetCurrentThreadId();
 
-                // This is a struct tm from <time.h>.
-                [StructLayout(LayoutKind.Sequential)]
+                [LibraryImport(psLib)]
+                [return: MarshalAs(UnmanagedType.Bool)]
+                internal static partial bool KillProcess(int pid);
+
+                [LibraryImport(psLib)]
+                internal static partial int WaitPid(int pid, [MarshalAs(UnmanagedType.Bool)] bool nohang);
+
+                // This is the struct `private_tm` from setdate.h in libpsl-native.
+                // Packing is set to 4 to match the unmanaged declaration.
+                // https://github.com/PowerShell/PowerShell-Native/blob/c5575ceb064e60355b9fee33eabae6c6d2708d14/src/libpsl-native/src/setdate.h#L23
+                [StructLayout(LayoutKind.Sequential, Pack = 4)]
                 internal unsafe struct UnixTm
                 {
                     /// <summary>Seconds (0-60).</summary>
@@ -1065,33 +1016,25 @@ internal static UnixTm DateTimeToUnixTm(DateTime date)
                     return tm;
                 }
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern unsafe int SetDate(UnixTm* tm);
+                [LibraryImport(psLib, SetLastError = true)]
+                internal static unsafe partial int SetDate(UnixTm* tm);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern int CreateSymLink([MarshalAs(UnmanagedType.LPStr)] string filePath,
-                                                         [MarshalAs(UnmanagedType.LPStr)] string target);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
+                internal static partial int CreateSymLink(string filePath, string target);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern int CreateHardLink([MarshalAs(UnmanagedType.LPStr)] string filePath,
-                                                          [MarshalAs(UnmanagedType.LPStr)] string target);
-
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                [return: MarshalAs(UnmanagedType.LPStr)]
-                internal static extern string FollowSymLink([MarshalAs(UnmanagedType.LPStr)] string filePath);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
+                internal static partial int CreateHardLink(string filePath, string target);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
+                [LibraryImport(psLib)]
                 [return: MarshalAs(UnmanagedType.LPStr)]
-                internal static extern string GetUserFromPid(int pid);
+                internal static partial string GetUserFromPid(int pid);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
                 [return: MarshalAs(UnmanagedType.I1)]
-                internal static extern bool IsSameFileSystemItem([MarshalAs(UnmanagedType.LPStr)] string filePathOne,
-                                                                 [MarshalAs(UnmanagedType.LPStr)] string filePathTwo);
+                internal static partial bool IsSameFileSystemItem(string filePathOne, string filePathTwo);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern int GetInodeData([MarshalAs(UnmanagedType.LPStr)] string path,
-                                                        out UInt64 device, out UInt64 inode);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
+                internal static partial int GetInodeData(string path, out ulong device, out ulong inode);
 
                 /// <summary>
                 /// This is a struct from getcommonstat.h in the native library.
@@ -1169,17 +1112,17 @@ internal struct CommonStatStruct
                     internal int IsSticky;
                 }
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern unsafe int GetCommonLStat(string filePath, [Out] out CommonStatStruct cs);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8, SetLastError = true)]
+                internal static unsafe partial int GetCommonLStat(string filePath, out CommonStatStruct cs);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern unsafe int GetCommonStat(string filePath, [Out] out CommonStatStruct cs);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8, SetLastError = true)]
+                internal static unsafe partial int GetCommonStat(string filePath, out CommonStatStruct cs);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern string GetPwUid(int id);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
+                internal static partial string GetPwUid(int id);
 
-                [DllImport(psLib, CharSet = CharSet.Ansi, SetLastError = true)]
-                internal static extern string GetGrGid(int id);
+                [LibraryImport(psLib, StringMarshalling = StringMarshalling.Utf8)]
+                internal static partial string GetGrGid(int id);
             }
         }
     }
diff --git a/src/System.Management.Automation/CoreCLR/CorePsStub.cs b/src/System.Management.Automation/CoreCLR/CorePsStub.cs
index d99bcbb398b..e439cc30ff2 100644
--- a/src/System.Management.Automation/CoreCLR/CorePsStub.cs
+++ b/src/System.Management.Automation/CoreCLR/CorePsStub.cs
@@ -431,14 +431,31 @@ namespace System.Management.Automation.Security
     /// <summary>
     /// Application white listing security policies only affect Windows OSs.
     /// </summary>
-    internal sealed class SystemPolicy
+    public sealed class SystemPolicy
     {
         private SystemPolicy() { }
 
+        /// <summary>
+        /// Writes to PowerShell WDAC Audit mode ETW log.
+        /// </summary>
+        /// <param name="context">Current execution context.</param>
+        /// <param name="title">Audit message title.</param>
+        /// <param name="message">Audit message message.</param>
+        /// <param name="fqid">Fully Qualified ID.</param>
+        /// <param name="dropIntoDebugger">Stops code execution and goes into debugger mode.</param>
+        internal static void LogWDACAuditMessage(
+            ExecutionContext context,
+            string title,
+            string message,
+            string fqid,
+            bool dropIntoDebugger = false)
+        {
+        }
+
         /// <summary>
         /// Gets the system lockdown policy.
         /// </summary>
-        /// <remarks>Always return SystemEnforcementMode.None in CSS (trusted)</remarks>
+        /// <remarks>Always return SystemEnforcementMode.None on non-Windows platforms.</remarks>
         public static SystemEnforcementMode GetSystemLockdownPolicy()
         {
             return SystemEnforcementMode.None;
@@ -447,7 +464,7 @@ public static SystemEnforcementMode GetSystemLockdownPolicy()
         /// <summary>
         /// Gets lockdown policy as applied to a file.
         /// </summary>
-        /// <remarks>Always return SystemEnforcementMode.None in CSS (trusted)</remarks>
+        /// <remarks>Always return SystemEnforcementMode.None on non-Windows platforms.</remarks>
         public static SystemEnforcementMode GetLockdownPolicy(string path, System.Runtime.InteropServices.SafeHandle handle)
         {
             return SystemEnforcementMode.None;
@@ -457,12 +474,26 @@ internal static bool IsClassInApprovedList(Guid clsid)
         {
             throw new NotImplementedException("SystemPolicy.IsClassInApprovedList not implemented");
         }
+
+        /// <summary>
+        /// Gets the system wide script file policy enforcement for an open file.
+        /// Based on system WDAC (Windows Defender Application Control) or AppLocker policies.
+        /// </summary>
+        /// <param name="filePath">Script file path for policy check.</param>
+        /// <param name="fileStream">FileStream object to script file path.</param>
+        /// <returns>Policy check result for script file.</returns>
+        public static SystemScriptFileEnforcement GetFilePolicyEnforcement(
+            string filePath,
+            System.IO.FileStream fileStream)
+        {
+            return SystemScriptFileEnforcement.None;
+        }
     }
 
     /// <summary>
     /// How the policy is being enforced.
     /// </summary>
-    internal enum SystemEnforcementMode
+    public enum SystemEnforcementMode
     {
         /// Not enforced at all
         None = 0,
@@ -473,6 +504,37 @@ internal enum SystemEnforcementMode
         /// Enabled, enforce restrictions
         Enforce = 2
     }
+
+    /// <summary>
+    /// System wide policy enforcement for a specific script file.
+    /// </summary>
+    public enum SystemScriptFileEnforcement
+    {
+        /// <summary>
+        /// No policy enforcement.
+        /// </summary>
+        None = 0,
+
+        /// <summary>
+        /// Script file is blocked from running.
+        /// </summary>
+        Block = 1,
+
+        /// <summary>
+        /// Script file is allowed to run without restrictions (FullLanguage mode).
+        /// </summary>
+        Allow = 2,
+
+        /// <summary>
+        /// Script file is allowed to run in ConstrainedLanguage mode only.
+        /// </summary>
+        AllowConstrained = 3,
+
+        /// <summary>
+        /// Script file is allowed to run in FullLanguage mode but will emit ConstrainedLanguage restriction audit logs.
+        /// </summary>
+        AllowConstrainedAudit = 4
+    }
 }
 
 // Porting note: Tracing is absolutely not available on Linux
diff --git a/src/System.Management.Automation/DscSupport/CimDSCParser.cs b/src/System.Management.Automation/DscSupport/CimDSCParser.cs
index 2901148813b..283ec1bcad8 100644
--- a/src/System.Management.Automation/DscSupport/CimDSCParser.cs
+++ b/src/System.Management.Automation/DscSupport/CimDSCParser.cs
@@ -22,6 +22,8 @@
 using Microsoft.Management.Infrastructure.Serialization;
 using Microsoft.PowerShell.Commands;
 
+using static Microsoft.PowerShell.SecureStringHelper;
+
 namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal
 {
     /// <summary>
@@ -259,12 +261,7 @@ private static object ConvertCimInstancePsCredential(string providerName, CimIns
                 throw invalidOperationException;
             }
 
-            // Extract the password into a SecureString.
-            var password = new SecureString();
-            foreach (char t in plainPassWord)
-            {
-                password.AppendChar(t);
-            }
+            SecureString password = SecureStringHelper.FromPlainTextString(plainPassWord);
 
             password.MakeReadOnly();
             return new PSCredential(userName, password);
@@ -320,8 +317,8 @@ public override object Transform(EngineIntrinsics engineIntrinsics, object input
     /// </summary>
     internal class CimDSCParser
     {
-        private CimMofDeserializer _deserializer;
-        private CimMofDeserializer.OnClassNeeded _onClassNeeded;
+        private readonly CimMofDeserializer _deserializer;
+        private readonly CimMofDeserializer.OnClassNeeded _onClassNeeded;
 
         /// <summary>
         /// </summary>
@@ -528,11 +525,8 @@ public DscClassCacheEntry(DSCResourceRunAsCredential aDSCResourceRunAsCredential
     public static class DscClassCache
     {
         private const string InboxDscResourceModulePath = "WindowsPowershell\\v1.0\\Modules\\PsDesiredStateConfiguration";
-        private const string reservedDynamicKeywords = "^(Synchronization|Certificate|IIS|SQL)$";
-
-        private const string reservedProperties = "^(Require|Trigger|Notify|Before|After|Subscribe)$";
 
-        private static PSTraceSource s_tracer = PSTraceSource.GetTracer("DSC", "DSC Class Cache");
+        private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("DSC", "DSC Class Cache");
 
         // Constants for items in the module qualified name (Module\Version\ClassName)
         private const int IndexModuleName = 0;
@@ -564,10 +558,7 @@ private static Dictionary<string, DscClassCacheEntry> ClassCache
         {
             get
             {
-                if (t_classCache == null)
-                {
-                    t_classCache = new Dictionary<string, DscClassCacheEntry>(StringComparer.OrdinalIgnoreCase);
-                }
+                t_classCache ??= new Dictionary<string, DscClassCacheEntry>(StringComparer.OrdinalIgnoreCase);
 
                 return t_classCache;
             }
@@ -583,10 +574,7 @@ private static Dictionary<string, Tuple<string, Version>> ByClassModuleCache
         {
             get
             {
-                if (t_byClassModuleCache == null)
-                {
-                    t_byClassModuleCache = new Dictionary<string, Tuple<string, Version>>(StringComparer.OrdinalIgnoreCase);
-                }
+                t_byClassModuleCache ??= new Dictionary<string, Tuple<string, Version>>(StringComparer.OrdinalIgnoreCase);
 
                 return t_byClassModuleCache;
             }
@@ -602,10 +590,7 @@ private static Dictionary<string, Tuple<string, Version>> ByClassModuleCache
         {
             get
             {
-                if (t_byFileClassCache == null)
-                {
-                    t_byFileClassCache = new Dictionary<string, List<Microsoft.Management.Infrastructure.CimClass>>(StringComparer.OrdinalIgnoreCase);
-                }
+                t_byFileClassCache ??= new Dictionary<string, List<Microsoft.Management.Infrastructure.CimClass>>(StringComparer.OrdinalIgnoreCase);
 
                 return t_byFileClassCache;
             }
@@ -621,10 +606,7 @@ private static HashSet<string> ScriptKeywordFileCache
         {
             get
             {
-                if (t_scriptKeywordFileCache == null)
-                {
-                    t_scriptKeywordFileCache = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-                }
+                t_scriptKeywordFileCache ??= new HashSet<string>(StringComparer.OrdinalIgnoreCase);
 
                 return t_scriptKeywordFileCache;
             }
@@ -724,7 +706,7 @@ public static void Initialize(Collection<Exception> errors, List<string> moduleP
                         continue;
                     }
 
-                    foreach (var schemaFile in Directory.EnumerateDirectories(resources).SelectMany(d => Directory.EnumerateFiles(d, "*.schema.mof")))
+                    foreach (var schemaFile in Directory.EnumerateDirectories(resources).SelectMany(static d => Directory.EnumerateFiles(d, "*.schema.mof")))
                     {
                         ImportClasses(schemaFile, s_defaultModuleInfoForResource, errors);
                     }
@@ -741,12 +723,12 @@ public static void Initialize(Collection<Exception> errors, List<string> moduleP
 
                 if (!Directory.Exists(systemResourceRoot))
                 {
-                    configSystemPath = Platform.GetFolderPath(Environment.SpecialFolder.System);
+                    configSystemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
                     systemResourceRoot = Path.Combine(configSystemPath, "Configuration");
                     inboxModulePath = InboxDscResourceModulePath;
                 }
 
-                var programFilesDirectory = Platform.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
+                var programFilesDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
                 Debug.Assert(programFilesDirectory != null, "Program Files environment variable does not exist!");
                 var customResourceRoot = Path.Combine(programFilesDirectory, "WindowsPowerShell\\Configuration");
                 Debug.Assert(Directory.Exists(customResourceRoot), "%ProgramFiles%\\WindowsPowerShell\\Configuration Directory does not exist");
@@ -776,7 +758,7 @@ public static void Initialize(Collection<Exception> errors, List<string> moduleP
                         continue;
                     }
 
-                    foreach (var schemaFile in Directory.EnumerateDirectories(resources).SelectMany(d => Directory.EnumerateFiles(d, "*.schema.mof")))
+                    foreach (var schemaFile in Directory.EnumerateDirectories(resources).SelectMany(static d => Directory.EnumerateFiles(d, "*.schema.mof")))
                     {
                         ImportClasses(schemaFile, s_defaultModuleInfoForResource, errors);
                     }
@@ -822,7 +804,10 @@ private static void LoadDSCResourceIntoCache(Collection<Exception> errors, List<
         {
             foreach (string moduleDir in modulePathList)
             {
-                if (!Directory.Exists(moduleDir)) continue;
+                if (!Directory.Exists(moduleDir))
+                {
+                    continue;
+                }
 
                 var dscResourcesPath = Path.Combine(moduleDir, "DscResources");
                 if (Directory.Exists(dscResourcesPath))
@@ -933,7 +918,7 @@ private static CimClass MyClassCallback(string serverName, string namespaceName,
         {
             foreach (KeyValuePair<string, DscClassCacheEntry> cimClass in ClassCache)
             {
-                string cachedClassName = cimClass.Key.Split(Utils.Separators.Backslash)[IndexClassName];
+                string cachedClassName = cimClass.Key.Split('\\')[IndexClassName];
                 if (string.Equals(cachedClassName, className, StringComparison.OrdinalIgnoreCase))
                 {
                     return cimClass.Value.CimClassInstance;
@@ -985,10 +970,7 @@ public static List<CimClass> ImportClasses(string path, Tuple<string, Version> m
             {
                 // Ignore modules with invalid schemas.
                 s_tracer.WriteLine("DSC ClassCache: Error importing file '{0}', with error '{1}'.  Skipping file.", path, e);
-                if (errors != null)
-                {
-                    errors.Add(e);
-                }
+                errors?.Add(e);
             }
 
             if (classes != null)
@@ -1010,15 +992,12 @@ public static List<CimClass> ImportClasses(string path, Tuple<string, Version> m
                         // allow sharing of nested objects.
                         if (!IsSameNestedObject(cimClass, c))
                         {
-                            var files = string.Join(",", GetFileDefiningClass(className));
+                            var files = string.Join(',', GetFileDefiningClass(className));
                             PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
                                 ParserStrings.DuplicateCimClassDefinition, className, path, files);
 
                             e.SetErrorId("DuplicateCimClassDefinition");
-                            if (errors != null)
-                            {
-                                errors.Add(e);
-                            }
+                            errors?.Add(e);
                         }
                     }
 
@@ -1107,7 +1086,7 @@ public static void ClearCache()
         /// <returns></returns>
         private static string GetModuleQualifiedResourceName(string moduleName, string moduleVersion, string className, string resourceName)
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0}\\{1}\\{2}\\{3}", moduleName, moduleVersion, className, resourceName);
+            return string.Create(CultureInfo.InvariantCulture, $"{moduleName}\\{moduleVersion}\\{className}\\{resourceName}");
         }
 
         /// <summary>
@@ -1120,7 +1099,7 @@ private static string GetModuleQualifiedResourceName(string moduleName, string m
         private static List<KeyValuePair<string, DscClassCacheEntry>> FindResourceInCache(string moduleName, string className, string resourceName)
         {
             return (from cacheEntry in ClassCache
-                    let splittedName = cacheEntry.Key.Split(Utils.Separators.Backslash)
+                    let splittedName = cacheEntry.Key.Split('\\')
                     let cachedClassName = splittedName[IndexClassName]
                     let cachedModuleName = splittedName[IndexModuleName]
                     let cachedResourceName = splittedName[IndexFriendlyName]
@@ -1146,7 +1125,7 @@ private static List<DscClassCacheEntry> GetCachedClasses()
         public static List<Microsoft.Management.Infrastructure.CimClass> GetCachedClassesForModule(PSModuleInfo module)
         {
             List<Microsoft.Management.Infrastructure.CimClass> cachedClasses = new();
-            var moduleQualifiedName = string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", module.Name, module.Version.ToString());
+            var moduleQualifiedName = string.Create(CultureInfo.InvariantCulture, $"{module.Name}\\{module.Version}");
             foreach (var dscClassCacheEntry in ClassCache)
             {
                 if (dscClassCacheEntry.Key.StartsWith(moduleQualifiedName, StringComparison.OrdinalIgnoreCase))
@@ -1282,13 +1261,6 @@ public static void ValidateInstanceText(string instanceText)
             parser.ValidateInstanceText(instanceText);
         }
 
-        private static bool IsMagicProperty(string propertyName)
-        {
-            return System.Text.RegularExpressions.Regex.Match(propertyName,
-                "^(ResourceId|SourceInfo|ModuleName|ModuleVersion|ConfigurationName)$",
-                System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success;
-        }
-
         private static string GetFriendlyName(CimClass cimClass)
         {
             try
@@ -1316,7 +1288,7 @@ public static Collection<DynamicKeyword> GetCachedKeywords()
 
             foreach (KeyValuePair<string, DscClassCacheEntry> cachedClass in ClassCache)
             {
-                string[] splittedName = cachedClass.Key.Split(Utils.Separators.Backslash);
+                string[] splittedName = cachedClass.Key.Split('\\');
                 string moduleName = splittedName[IndexModuleName];
                 string moduleVersion = splittedName[IndexModuleVersion];
 
@@ -1385,7 +1357,8 @@ private static DynamicKeyword CreateKeywordFromCimClass(string moduleName, Versi
             //
             // Skip all of the base, meta, registration and other classes that are not intended to be used directly by a script author
             //
-            if (System.Text.RegularExpressions.Regex.Match(keywordString, "^OMI_Base|^OMI_.*Registration", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success)
+            if (keywordString.StartsWith("OMI_Base", StringComparison.OrdinalIgnoreCase) ||
+                (keywordString.StartsWith("OMI_", StringComparison.OrdinalIgnoreCase) && keywordString.IndexOf("Registration", 4, StringComparison.OrdinalIgnoreCase) >= 0))
             {
                 return null;
             }
@@ -1401,7 +1374,7 @@ private static DynamicKeyword CreateKeywordFromCimClass(string moduleName, Versi
             };
 
             // If it's one of reserved dynamic keyword, mark it
-            if (System.Text.RegularExpressions.Regex.Match(keywordString, reservedDynamicKeywords, System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success)
+            if (IsReservedDynamicKeyword(keywordString))
             {
                 keyword.IsReservedKeyword = true;
             }
@@ -1459,7 +1432,7 @@ private static DynamicKeyword CreateKeywordFromCimClass(string moduleName, Versi
                     }
                 }
                 // If it's one of our reserved properties, save it for error reporting
-                if (System.Text.RegularExpressions.Regex.Match(prop.Name, reservedProperties, System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success)
+                if (IsReservedProperty(prop.Name))
                 {
                     keyword.HasReservedProperties = true;
                     continue;
@@ -1558,6 +1531,27 @@ private static DynamicKeyword CreateKeywordFromCimClass(string moduleName, Versi
             UpdateKnownRestriction(keyword);
 
             return keyword;
+
+            static bool IsMagicProperty(string propertyName) =>
+                string.Equals(propertyName, "ResourceId", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(propertyName, "SourceInfo", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(propertyName, "ModuleName", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(propertyName, "ModuleVersion", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(propertyName, "ConfigurationName", StringComparison.OrdinalIgnoreCase);
+
+            static bool IsReservedDynamicKeyword(string keyword) =>
+                string.Equals(keyword, "Synchronization", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(keyword, "Certificate", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(keyword, "IIS", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(keyword, "SQL", StringComparison.OrdinalIgnoreCase);
+
+            static bool IsReservedProperty(string name) =>
+                string.Equals(name, "Require", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(name, "Trigger", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(name, "Notify", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(name, "Before", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(name, "After", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(name, "Subscribe", StringComparison.OrdinalIgnoreCase);
         }
 
         /// <summary>
@@ -1622,8 +1616,8 @@ public static void LoadDefaultCimKeywords(Collection<Exception> errors)
 
         /// <summary>
         /// Load the default system CIM classes and create the corresponding keywords.
-        /// <param name="functionsToDefine">A dictionary to add the defined functions to, may be null.</param>
         /// </summary>
+        /// <param name="functionsToDefine">A dictionary to add the defined functions to, may be null.</param>
         public static void LoadDefaultCimKeywords(Dictionary<string, ScriptBlock> functionsToDefine)
         {
             LoadDefaultCimKeywords(functionsToDefine, null, null, false);
@@ -1896,10 +1890,7 @@ private static ParseError[] ImportResourceCheckSemantics(DynamicKeywordStatement
             {
                 if (keywordAst.Keyword.Keyword.Equals("Node"))
                 {
-                    if (errorList == null)
-                    {
-                        errorList = new List<ParseError>();
-                    }
+                    errorList ??= new List<ParseError>();
 
                     errorList.Add(new ParseError(kwAst.Extent,
                                          "ImportDscResourceInsideNode",
@@ -1956,8 +1947,7 @@ private static ParseError[] CheckMandatoryPropertiesPresent(DynamicKeywordStatem
                 object evalResultObject;
                 if (IsConstantValueVisitor.IsConstant(pair.Item1, out evalResultObject, forAttribute: false, forRequires: false))
                 {
-                    var presentName = evalResultObject as string;
-                    if (presentName != null)
+                    if (evalResultObject is string presentName)
                     {
                         if (mandatoryPropertiesNames.Remove(presentName) && mandatoryPropertiesNames.Count == 0)
                         {
@@ -2043,7 +2033,7 @@ public static void LoadResourcesFromModule(IScriptExtent scriptExtent,
                         {
                             string moduleString = moduleToImport.Version == null
                                 ? moduleToImport.Name
-                                : string.Format(CultureInfo.CurrentCulture, "<{0}, {1}>", moduleToImport.Name, moduleToImport.Version);
+                                : string.Create(CultureInfo.CurrentCulture, $"<{moduleToImport.Name}, {moduleToImport.Version}>");
 
                             errorList.Add(new ParseError(scriptExtent, "ModuleNotFoundDuringParse",
                                 string.Format(CultureInfo.CurrentCulture, ParserStrings.ModuleNotFoundDuringParse, moduleString)));
@@ -2151,8 +2141,7 @@ public static void LoadResourcesFromModule(IScriptExtent scriptExtent,
                         {
                             try
                             {
-                                string unused;
-                                foundResources = ImportCimKeywordsFromModule(moduleInfo, resourceToImport, out unused);
+                                foundResources = ImportCimKeywordsFromModule(moduleInfo, resourceToImport, out _);
                             }
                             catch (Exception)
                             {
@@ -2320,8 +2309,7 @@ internal static string GenerateMofForAst(TypeDefinitionAst typeAst)
         internal static string MapTypeNameToMofType(ITypeName typeName, string memberName, string className, out bool isArrayType, out string embeddedInstanceType, List<object> embeddedInstanceTypes, ref string[] enumNames)
         {
             TypeName propTypeName;
-            var arrayTypeName = typeName as ArrayTypeName;
-            if (arrayTypeName != null)
+            if (typeName is ArrayTypeName arrayTypeName)
             {
                 isArrayType = true;
                 propTypeName = arrayTypeName.ElementType as TypeName;
@@ -2344,7 +2332,7 @@ internal static string MapTypeNameToMofType(ITypeName typeName, string memberNam
 
             if (propTypeName._typeDefinitionAst.IsEnum)
             {
-                enumNames = propTypeName._typeDefinitionAst.Members.Select(m => m.Name).ToArray();
+                enumNames = propTypeName._typeDefinitionAst.Members.Select(static m => m.Name).ToArray();
                 isArrayType = false;
                 embeddedInstanceType = null;
                 return "string";
@@ -2364,9 +2352,9 @@ internal static string MapTypeNameToMofType(ITypeName typeName, string memberNam
         private static void GenerateMofForAst(TypeDefinitionAst typeAst, StringBuilder sb, List<object> embeddedInstanceTypes)
         {
             var className = typeAst.Name;
-            sb.AppendFormat(CultureInfo.InvariantCulture, "[ClassVersion(\"1.0.0\"), FriendlyName(\"{0}\")]\nclass {0}", className);
+            sb.Append(CultureInfo.InvariantCulture, $"[ClassVersion(\"1.0.0\"), FriendlyName(\"{className}\")]\nclass {className}");
 
-            if (typeAst.Attributes.Any(a => a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute)))
+            if (typeAst.Attributes.Any(static a => a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute)))
             {
                 sb.Append(" : OMI_BaseResource");
             }
@@ -2384,15 +2372,13 @@ private static void GenerateMofForAst(TypeDefinitionAst typeAst, StringBuilder s
             while (bases.Count > 0)
             {
                 var b = bases.Dequeue();
-                var tc = b as TypeConstraintAst;
 
-                if (tc != null)
+                if (b is TypeConstraintAst tc)
                 {
                     b = tc.TypeName.GetReflectionType();
                     if (b == null)
                     {
-                        var td = tc.TypeName as TypeName;
-                        if (td != null && td._typeDefinitionAst != null)
+                        if (tc.TypeName is TypeName td && td._typeDefinitionAst != null)
                         {
                             ProcessMembers(sb, embeddedInstanceTypes, td._typeDefinitionAst, className);
                             foreach (var b1 in td._typeDefinitionAst.BaseTypes)
@@ -2434,8 +2420,7 @@ private static bool GetResourceMethodsLineNumber(TypeDefinitionAst typeDefinitio
             methodsLinePosition = new Dictionary<string, int>();
             foreach (var member in typeDefinitionAst.Members)
             {
-                var functionMemberAst = member as FunctionMemberAst;
-                if (functionMemberAst != null)
+                if (member is FunctionMemberAst functionMemberAst)
                 {
                     if (functionMemberAst.Name.Equals(getMethodName, StringComparison.OrdinalIgnoreCase))
                     {
@@ -2481,7 +2466,7 @@ public static bool GetResourceMethodsLinePosition(PSModuleInfo moduleInfo, strin
 
             if (moduleInfo.NestedModules != null)
             {
-                foreach (var nestedModule in moduleInfo.NestedModules.Where(m => !string.IsNullOrEmpty(m.Path)))
+                foreach (var nestedModule in moduleInfo.NestedModules.Where(static m => !string.IsNullOrEmpty(m.Path)))
                 {
                     moduleFiles.Add(nestedModule.Path);
                 }
@@ -2515,9 +2500,7 @@ private static void ProcessMembers(StringBuilder sb, List<object> embeddedInstan
         {
             foreach (var member in typeDefinitionAst.Members)
             {
-                var property = member as PropertyMemberAst;
-
-                if (property == null || property.IsStatic ||
+                if (member is not PropertyMemberAst property || property.IsStatic ||
                     property.Attributes.All(a => a.TypeName.GetReflectionAttributeType() != typeof(DscPropertyAttribute)))
                 {
                     continue;
@@ -2557,14 +2540,12 @@ private static void ProcessMembers(StringBuilder sb, List<object> embeddedInstan
                         out embeddedInstanceType, embeddedInstanceTypes, ref enumNames);
                 }
 
+                string mofAttr = MapAttributesToMof(enumNames, attributes, embeddedInstanceType);
                 string arrayAffix = isArrayType ? "[]" : string.Empty;
 
-                sb.AppendFormat(CultureInfo.InvariantCulture,
-                    "    {0}{1} {2}{3};\n",
-                    MapAttributesToMof(enumNames, attributes, embeddedInstanceType),
-                    mofType,
-                    member.Name,
-                    arrayAffix);
+                sb.Append(
+                    CultureInfo.InvariantCulture,
+                    $"    {mofAttr}{mofType} {member.Name}{arrayAffix};\n");
             }
         }
 
@@ -2622,13 +2603,15 @@ private static bool GetResourceDefinitionsFromModule(string fileName, out IEnume
 
             resourceDefinitions = ast.FindAll(n =>
             {
-                var typeAst = n as TypeDefinitionAst;
-                if (typeAst != null)
+                if (n is TypeDefinitionAst typeAst)
                 {
                     for (int i = 0; i < typeAst.Attributes.Count; i++)
                     {
                         var a = typeAst.Attributes[i];
-                        if (a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute)) return true;
+                        if (a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute))
+                        {
+                            return true;
+                        }
                     }
                 }
 
@@ -2682,7 +2665,10 @@ private static bool ImportKeywordsFromScriptFile(string fileName, PSModuleInfo m
                     }
                 }
 
-                if (skip) continue;
+                if (skip)
+                {
+                    continue;
+                }
 
                 // Parse the Resource Attribute to see if RunAs behavior is specified for the resource.
                 DSCResourceRunAsCredential runAsBehavior = DSCResourceRunAsCredential.Default;
@@ -2692,13 +2678,9 @@ private static bool ImportKeywordsFromScriptFile(string fileName, PSModuleInfo m
                     {
                         foreach (var na in attr.NamedArguments)
                         {
-                            if (na.ArgumentName.Equals("RunAsCredential", StringComparison.OrdinalIgnoreCase))
+                            if (na.ArgumentName.Equals("RunAsCredential", StringComparison.OrdinalIgnoreCase) && attr.GetAttribute() is DscResourceAttribute dscResourceAttribute)
                             {
-                                var dscResourceAttribute = attr.GetAttribute() as DscResourceAttribute;
-                                if (dscResourceAttribute != null)
-                                {
-                                    runAsBehavior = dscResourceAttribute.RunAsCredential;
-                                }
+                                runAsBehavior = dscResourceAttribute.RunAsCredential;
                             }
                         }
                     }
@@ -2715,16 +2697,16 @@ private static bool ImportKeywordsFromScriptFile(string fileName, PSModuleInfo m
         private static readonly Dictionary<Type, string> s_mapPrimitiveDotNetTypeToMof = new()
         {
             { typeof(sbyte), "sint8" },
-            { typeof(byte) , "uint8"},
-            { typeof(short) , "sint16"},
-            { typeof(ushort) , "uint16"},
-            { typeof(int) , "sint32"},
-            { typeof(uint) , "uint32"},
-            { typeof(long) , "sint64"},
+            { typeof(byte), "uint8"},
+            { typeof(short), "sint16"},
+            { typeof(ushort), "uint16"},
+            { typeof(int), "sint32"},
+            { typeof(uint), "uint32"},
+            { typeof(long), "sint64"},
             { typeof(ulong), "uint64" },
-            { typeof(float) , "real32"},
-            { typeof(double) , "real64"},
-            { typeof(bool) , "boolean"},
+            { typeof(float), "real32"},
+            { typeof(double), "real64"},
+            { typeof(bool), "boolean"},
             { typeof(string), "string" },
             { typeof(DateTime), "datetime" },
             { typeof(PSCredential), "string" },
@@ -2932,8 +2914,7 @@ private static string MapAttributesToMof(string[] enumNames, IEnumerable<object>
             bool needComma = false;
             foreach (var attr in customAttributes)
             {
-                var dscProperty = attr as DscPropertyAttribute;
-                if (dscProperty != null)
+                if (attr is DscPropertyAttribute dscProperty)
                 {
                     if (dscProperty.Key)
                     {
@@ -2956,8 +2937,7 @@ private static string MapAttributesToMof(string[] enumNames, IEnumerable<object>
                     continue;
                 }
 
-                var validateSet = attr as ValidateSetAttribute;
-                if (validateSet != null)
+                if (attr is ValidateSetAttribute validateSet)
                 {
                     bool valueMapComma = false;
                     StringBuilder sbValues = new(", Values{");
@@ -3072,7 +3052,7 @@ private static void GenerateMofForType(Type type, StringBuilder sb, List<object>
         {
             var className = type.Name;
             // Friendly name is required by module validator to verify resource instance against the exclusive resource name list.
-            sb.AppendFormat(CultureInfo.InvariantCulture, "[ClassVersion(\"1.0.0\"), FriendlyName(\"{0}\")]\nclass {0}", className);
+            sb.Append(CultureInfo.InvariantCulture, $"[ClassVersion(\"1.0.0\"), FriendlyName(\"{className}\")]\nclass {className}");
 
             if (type.GetCustomAttributes<DscResourceAttribute>().Any())
             {
@@ -3087,9 +3067,9 @@ private static void GenerateMofForType(Type type, StringBuilder sb, List<object>
 
         private static void ProcessMembers(Type type, StringBuilder sb, List<object> embeddedInstanceTypes, string className)
         {
-            foreach (var member in type.GetMembers(BindingFlags.Instance | BindingFlags.Public).Where(m => m is PropertyInfo || m is FieldInfo))
+            foreach (var member in type.GetMembers(BindingFlags.Instance | BindingFlags.Public).Where(static m => m is PropertyInfo || m is FieldInfo))
             {
-                if (member.CustomAttributes.All(cad => cad.AttributeType != typeof(DscPropertyAttribute)))
+                if (member.CustomAttributes.All(static cad => cad.AttributeType != typeof(DscPropertyAttribute)))
                 {
                     continue;
                 }
@@ -3112,21 +3092,21 @@ private static void ProcessMembers(Type type, StringBuilder sb, List<object> emb
                 }
 
                 // TODO - validate type and name
-                bool isArrayType;
-                string embeddedInstanceType;
-                string mofType = MapTypeToMofType(memberType, member.Name, className, out isArrayType, out embeddedInstanceType,
+                string mofType = MapTypeToMofType(
+                    memberType,
+                    member.Name,
+                    className,
+                    out bool isArrayType,
+                    out string embeddedInstanceType,
                     embeddedInstanceTypes);
+
+                var enumNames = memberType.IsEnum ? Enum.GetNames(memberType) : null;
+                string mofAttr = MapAttributesToMof(enumNames, member.GetCustomAttributes(true), embeddedInstanceType);
                 string arrayAffix = isArrayType ? "[]" : string.Empty;
 
-                var enumNames = memberType.IsEnum
-                    ? Enum.GetNames(memberType)
-                    : null;
-                sb.AppendFormat(CultureInfo.InvariantCulture,
-                    "    {0}{1} {2}{3};\n",
-                    MapAttributesToMof(enumNames, member.GetCustomAttributes(true), embeddedInstanceType),
-                    mofType,
-                    member.Name,
-                    arrayAffix);
+                sb.Append(
+                    CultureInfo.InvariantCulture,
+                    $"    {mofAttr}{mofType} {member.Name}{arrayAffix};\n");
             }
         }
 
@@ -3141,7 +3121,7 @@ private static bool ImportKeywordsFromAssembly(PSModuleInfo module,
             var parser = new Microsoft.PowerShell.DesiredStateConfiguration.CimDSCParser(MyClassCallback);
 
             IEnumerable<Type> resourceDefinitions =
-                assembly.GetTypes().Where(t => t.GetCustomAttributes<DscResourceAttribute>().Any());
+                assembly.GetTypes().Where(static t => t.GetCustomAttributes<DscResourceAttribute>().Any());
 
             foreach (var r in resourceDefinitions)
             {
@@ -3157,7 +3137,10 @@ private static bool ImportKeywordsFromAssembly(PSModuleInfo module,
                     }
                 }
 
-                if (skip) continue;
+                if (skip)
+                {
+                    continue;
+                }
 
                 var mof = GenerateMofForType(r);
 
@@ -3275,14 +3258,15 @@ public static bool ImportCimKeywordsFromModule(PSModuleInfo module, string resou
                 //
                 try
                 {
-                    var dscResourceDirectories = Directory.GetDirectories(dscResourcesPath);
-                    foreach (var directory in dscResourceDirectories)
+                    foreach (var directory in Directory.EnumerateDirectories(dscResourcesPath))
                     {
-                        var schemaFiles = Directory.GetFiles(directory, "*.schema.mof", SearchOption.TopDirectoryOnly);
-                        if (schemaFiles.Length > 0)
+                        IEnumerable<string> schemaFiles = Directory.EnumerateFiles(directory, "*.schema.mof", SearchOption.TopDirectoryOnly);
+                        string tempSchemaFilepath = schemaFiles.FirstOrDefault();
+
+                        Debug.Assert(schemaFiles.Count() == 1, "A valid DSCResource module can have only one schema mof file");
+
+                        if (tempSchemaFilepath is not null)
                         {
-                            Debug.Assert(schemaFiles.Length == 1, "A valid DSCResource module can have only one schema mof file");
-                            var tempSchemaFilepath = schemaFiles[0];
                             var classes = GetCachedClassByFileName(tempSchemaFilepath) ?? ImportClasses(tempSchemaFilepath, new Tuple<string, Version>(module.Name, module.Version), errors);
                             if (classes != null)
                             {
@@ -3635,7 +3619,7 @@ public static string GetDSCResourceUsageString(DynamicKeyword keyword)
             bool listKeyProperties = true;
             while (true)
             {
-                foreach (var prop in keyword.Properties.OrderBy(ob => ob.Key))
+                foreach (var prop in keyword.Properties.OrderBy(static ob => ob.Key))
                 {
                     if (string.Equals(prop.Key, "ResourceId", StringComparison.OrdinalIgnoreCase))
                     {
@@ -3702,7 +3686,7 @@ private static StringBuilder FormatCimPropertyType(DynamicKeywordProperty prop,
             // Do the property values map
             if (prop.ValueMap != null && prop.ValueMap.Count > 0)
             {
-                formattedTypeString.Append(" { " + string.Join(" | ", prop.ValueMap.Keys.OrderBy(x => x)) + " }");
+                formattedTypeString.Append(" { " + string.Join(" | ", prop.ValueMap.Keys.Order()) + " }");
             }
 
             // We prepend optional property with "[" so close out it here. This way it is shown with [ ] to indication optional
diff --git a/src/System.Management.Automation/DscSupport/JsonCimDSCParser.cs b/src/System.Management.Automation/DscSupport/JsonCimDSCParser.cs
deleted file mode 100755
index c2221cb3f33..00000000000
--- a/src/System.Management.Automation/DscSupport/JsonCimDSCParser.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.IO;
-using System.Management.Automation;
-using System.Security;
-
-namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform
-{
-    /// <summary>
-    /// Class that does high level Cim schema parsing.
-    /// </summary>
-    internal class CimDSCParser
-    {
-        private readonly JsonDeserializer _jsonDeserializer;
-        
-        internal CimDSCParser()
-        {
-            _jsonDeserializer = JsonDeserializer.Create();
-        }
-
-        internal IEnumerable<PSObject> ParseSchemaJson(string filePath, bool useNewRunspace = false)
-        {
-            try
-            {
-                string json = File.ReadAllText(filePath);
-                string fileNameDefiningClass = Path.GetFileNameWithoutExtension(filePath);
-                int dotIndex = fileNameDefiningClass.IndexOf(".schema", StringComparison.InvariantCultureIgnoreCase);
-                if (dotIndex != -1)
-                {
-                    fileNameDefiningClass = fileNameDefiningClass.Substring(0, dotIndex);
-                }
-
-                IEnumerable<PSObject> result = _jsonDeserializer.DeserializeClasses(json, useNewRunspace);
-                foreach (dynamic classObject in result)
-                {
-                    string superClassName = classObject.SuperClassName;
-                    string className = classObject.ClassName;
-                    if (string.Equals(superClassName, "OMI_BaseResource", StringComparison.OrdinalIgnoreCase))
-                    {
-                        // Get the name of the file without schema.mof/json extension
-                        if (!className.Equals(fileNameDefiningClass, StringComparison.OrdinalIgnoreCase))
-                        {
-                            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
-                                ParserStrings.ClassNameNotSameAsDefiningFile, className, fileNameDefiningClass);
-                            throw e;
-                        }
-                    }
-                }
-
-                return result;
-            }
-            catch (Exception exception)
-            {
-                PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
-                    exception, ParserStrings.CimDeserializationError, filePath);
-
-                e.SetErrorId("CimDeserializationError");
-                throw e;
-            }
-        }
-    }
-}
diff --git a/src/System.Management.Automation/DscSupport/JsonDeserializer.cs b/src/System.Management.Automation/DscSupport/JsonDeserializer.cs
deleted file mode 100755
index 319560f0a09..00000000000
--- a/src/System.Management.Automation/DscSupport/JsonDeserializer.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Management.Automation;
-using System.Management.Automation.Runspaces;
-
-namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform
-{
-    internal class JsonDeserializer
-    {
-        #region Constructors
-
-        /// <summary>
-        /// Instantiates a default deserializer.
-        /// </summary>
-        /// <returns>Default deserializer.</returns>
-        public static JsonDeserializer Create()
-        {
-            return new JsonDeserializer();
-        }
-
-        #endregion Constructors
-
-        #region Methods
-
-        /// <summary>
-        /// Returns schema of Cim classes from specified json file.
-        /// </summary>
-        /// <param name="json">Json text to deserialize.</param>
-        /// <param name="useNewRunspace">If a new runspace should be used.</param>
-        /// <returns>Deserialized PSObjects.</returns>
-        public IEnumerable<PSObject> DeserializeClasses(string json, bool useNewRunspace = false)
-        {
-            if (string.IsNullOrEmpty(json))
-            {
-                throw new ArgumentNullException(nameof(json));
-            }
-
-            System.Management.Automation.PowerShell powerShell = null;
-
-            if (useNewRunspace)
-            {
-                // currently using RunspaceMode.NewRunspace will reset PSModulePath env var for the entire process
-                // this is something we want to avoid in DSC GuestConfigAgent scenario, so we use following workaround
-                var s_iss = InitialSessionState.CreateDefault();
-                s_iss.EnvironmentVariables.Add(
-                    new SessionStateVariableEntry(
-                        "PSModulePath",
-                        Environment.GetEnvironmentVariable("PSModulePath"),
-                        description: null));
-                powerShell = System.Management.Automation.PowerShell.Create(s_iss);
-            }
-            else
-            {
-                powerShell = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
-            }
-
-            using (powerShell)
-            {
-                return powerShell.AddCommand("Microsoft.PowerShell.Utility\\ConvertFrom-Json")
-                    .AddParameter("InputObject", json)
-                    .AddParameter("Depth", 100) // maximum supported by cmdlet
-                    .Invoke();
-            }
-        }
-
-        #endregion Methods
-    }
-}
diff --git a/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs b/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs
deleted file mode 100755
index 2fe4f7c2606..00000000000
--- a/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs
+++ /dev/null
@@ -1,2498 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Management.Automation;
-using System.Management.Automation.Language;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Security;
-using System.Text;
-using System.Text.RegularExpressions;
-
-using Microsoft.PowerShell.Commands;
-
-namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform
-{
-    /// <summary>
-    /// Class that defines Dsc cache entries.
-    /// </summary>
-    internal class DscClassCacheEntry
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DscClassCacheEntry"/> class.
-        /// </summary>
-        public DscClassCacheEntry()
-            : this(DSCResourceRunAsCredential.Default, isImportedImplicitly: false, cimClassInstance: null, modulePath: string.Empty)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DscClassCacheEntry"/> class.
-        /// </summary>
-        /// <param name="dscResourceRunAsCredential">Run as credential value.</param>
-        /// <param name="isImportedImplicitly">Resource is imported implicitly.</param>
-        /// <param name="cimClassInstance">Class definition.</param>
-        /// <param name="modulePath">Path of module defining the class.</param>
-        public DscClassCacheEntry(DSCResourceRunAsCredential dscResourceRunAsCredential, bool isImportedImplicitly, PSObject cimClassInstance, string modulePath)
-        {
-            DscResRunAsCred = dscResourceRunAsCredential;
-            IsImportedImplicitly = isImportedImplicitly;
-            CimClassInstance = cimClassInstance;
-            ModulePath = modulePath;
-        }
-
-        /// <summary>
-        /// Gets or sets the RunAs Credentials that this DSC resource will use.
-        /// </summary>
-        public DSCResourceRunAsCredential DscResRunAsCred { get; set; }
-
-        /// <summary>
-        /// Gets or sets a value indicating if we have implicitly imported this resource.
-        /// </summary>
-        public bool IsImportedImplicitly { get; set; }
-
-        /// <summary>
-        /// Gets or sets CimClass instance for this resource.
-        /// </summary>
-        public PSObject CimClassInstance { get; set; }
-
-        /// <summary>
-        /// Gets or sets path of the implementing module for this resource.
-        /// </summary>
-        public string ModulePath { get; set; }
-    }
-
-    /// <summary>
-    /// DSC class cache for this runspace.
-    /// </summary>
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes",
-        Justification = "Needed Internal use only")]
-    public static class DscClassCache
-    {
-        private static readonly HashSet<string> s_reservedDynamicKeywords = new HashSet<string>(new[] { "Synchronization", "Certificate", "IIS", "SQL" }, StringComparer.OrdinalIgnoreCase);
-
-        private static readonly HashSet<string> s_reservedProperties = new HashSet<string>(new[] { "Require", "Trigger", "Notify", "Before", "After", "Subscribe" }, StringComparer.OrdinalIgnoreCase);
-
-        /// <summary>
-        /// Experimental feature name for DSC v3.
-        /// </summary>
-        public const string DscExperimentalFeatureName = "PS7DscSupport";
-
-        private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("DSC", "DSC Class Cache");
-
-        // Constants for items in the module qualified name (Module\Version\ClassName)
-        private const int ModuleNameIndex = 0;
-        private const int ModuleVersionIndex = 1;
-        private const int ClassNameIndex = 2;
-        private const int FriendlyNameIndex = 3;
-
-        // Create a HashSet for fast lookup. According to MSDN, the time complexity of search for an element in a HashSet is O(1)
-        private static readonly HashSet<string> s_hiddenResourceCache =
-            new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "MSFT_BaseConfigurationProviderRegistration", "MSFT_CimConfigurationProviderRegistration", "MSFT_PSConfigurationProviderRegistration" };
-
-        // A collection to prevent circular importing case when Import-DscResource does not have a module specified
-        [ThreadStatic]
-        private static readonly HashSet<string> t_currentImportDscResourceInvocations = new(StringComparer.OrdinalIgnoreCase);
-
-        /// <summary>
-        /// Gets DSC class cache for this runspace.
-        /// Cache stores the DSCRunAsBehavior, cim class and boolean to indicate if an Inbox resource has been implicitly imported.
-        /// </summary>
-        private static Dictionary<string, DscClassCacheEntry> ClassCache
-        {
-            get => t_classCache ??= new Dictionary<string, DscClassCacheEntry>(StringComparer.OrdinalIgnoreCase);
-        }
-
-        [ThreadStatic]
-        private static Dictionary<string, DscClassCacheEntry> t_classCache;
-
-        /// <summary>
-        /// Gets DSC class cache for GuestConfig; it is similar to ClassCache, but maintains values between operations.
-        /// </summary>
-        private static Dictionary<string, DscClassCacheEntry> GuestConfigClassCache
-        {
-            get => t_guestConfigClassCache ??= new Dictionary<string, DscClassCacheEntry>(StringComparer.OrdinalIgnoreCase);
-        }
-
-        [ThreadStatic]
-        private static Dictionary<string, DscClassCacheEntry> t_guestConfigClassCache;
-
-        /// <summary>
-        /// DSC classname to source module mapper.
-        /// </summary>
-        private static Dictionary<string, Tuple<string, Version>> ByClassModuleCache
-            => t_byClassModuleCache ??= new Dictionary<string, Tuple<string, Version>>(StringComparer.OrdinalIgnoreCase);
-
-        [ThreadStatic]
-        private static Dictionary<string, Tuple<string, Version>> t_byClassModuleCache;
-
-        /// <summary>
-        /// Default ModuleName and ModuleVersion to use.
-        /// </summary>
-        private static readonly Tuple<string, Version> s_defaultModuleInfoForResource = new Tuple<string, Version>("PSDesiredStateConfiguration", new Version(3, 0));
-
-        /// <summary>
-        /// When this property is set to true, DSC Cache will cache multiple versions of a resource.
-        /// That means it will cache duplicate resource classes (class names for a resource in two different module versions are same).
-        /// NOTE: This property should be set to false for DSC compiler related methods/functionality, such as Import-DscResource,
-        ///       because the Mof serializer does not support deserialization of classes with different versions.
-        /// </summary>
-        [ThreadStatic]
-        private static bool t_cacheResourcesFromMultipleModuleVersions;
-
-        private static bool CacheResourcesFromMultipleModuleVersions
-        {
-            get
-            {
-                return t_cacheResourcesFromMultipleModuleVersions;
-            }
-
-            set
-            {
-                t_cacheResourcesFromMultipleModuleVersions = value;
-            }
-        }
-
-        [ThreadStatic]
-        private static bool t_newApiIsUsed = false;
-
-        /// <summary>
-        /// Flag shows if PS7 DSC APIs were used.
-        /// </summary>
-        public static bool NewApiIsUsed
-        {
-            get
-            {
-                return t_newApiIsUsed;
-            }
-
-            set
-            {
-                t_newApiIsUsed = value;
-            }
-        }
-
-        /// <summary>
-        /// Initialize the class cache with the default classes in $ENV:SystemDirectory\Configuration.
-        /// </summary>
-        public static void Initialize()
-        {
-            Initialize(errors: null, modulePathList: null);
-        }
-
-        /// <summary>
-        /// Initialize the class cache with default classes that come with PSDesiredStateConfiguration module.
-        /// </summary>
-        /// <param name="errors">Collection of any errors encountered during initialization.</param>
-        /// <param name="modulePathList">List of module path from where DSC PS modules will be loaded.</param>
-        public static void Initialize(Collection<Exception> errors, List<string> modulePathList)
-        {
-            s_tracer.WriteLine("Initializing DSC class cache");
-
-            // Load the base schema files.
-            ClearCache();
-            var dscConfigurationDirectory = Environment.GetEnvironmentVariable("DSC_HOME");
-            if (string.IsNullOrEmpty(dscConfigurationDirectory))
-            {
-                var moduleInfos = ModuleCmdletBase.GetModuleIfAvailable(new Microsoft.PowerShell.Commands.ModuleSpecification()
-                    {
-                        Name = "PSDesiredStateConfiguration",
-
-                        // Version in the next line is actually MinimumVersion
-                        Version = new Version(3, 0, 0)
-                    });
-
-                if (moduleInfos.Count > 0)
-                { 
-                    // to be consistent with Import-Module behavior, we use the first occurrence that we find in PSModulePath
-                    var moduleDirectory = Path.GetDirectoryName(moduleInfos[0].Path);
-                    dscConfigurationDirectory = Path.Join(moduleDirectory, "Configuration");
-                }
-                else
-                {
-                    // when all else has failed use location of system-wide PS module directory (i.e. /usr/local/share/powershell/Modules) as backup
-                    dscConfigurationDirectory = Path.Join(ModuleIntrinsics.GetSharedModulePath(), "PSDesiredStateConfiguration", "Configuration");
-                }
-            }
-
-            if (!Directory.Exists(dscConfigurationDirectory))
-            {
-                throw new DirectoryNotFoundException(string.Format(ParserStrings.PsDscMissingSchemaStore, dscConfigurationDirectory));
-            }
-
-            var resourceBaseFile = Path.Join(dscConfigurationDirectory, "BaseRegistration", "BaseResource.schema.json");
-            ImportBaseClasses(resourceBaseFile, s_defaultModuleInfoForResource, errors, false);
-            var metaConfigFile = Path.Join(dscConfigurationDirectory, "BaseRegistration", "MSFT_DSCMetaConfiguration.json");
-            ImportBaseClasses(metaConfigFile, s_defaultModuleInfoForResource, errors, false);
-        }
-
-        /// <summary>
-        /// Import base classes from the given file.
-        /// </summary>
-        /// <param name="path">Path to schema file.</param>
-        /// <param name="moduleInfo">Module information.</param>
-        /// <param name="errors">Error collection that will be shown to the user.</param>
-        /// <param name="importInBoxResourcesImplicitly">Flag for implicitly imported resource.</param>
-        /// <returns>Class objects from schema file.</returns>
-        public static IEnumerable<PSObject> ImportBaseClasses(string path, Tuple<string, Version> moduleInfo, Collection<Exception> errors, bool importInBoxResourcesImplicitly)
-        {
-            if (string.IsNullOrEmpty(path))
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(path));
-            }
-
-            s_tracer.WriteLine("DSC ClassCache: importing file: {0}", path);
-
-            var parser = new CimDSCParser();
-
-            IEnumerable<PSObject> classes = null;
-            try
-            {
-                classes = parser.ParseSchemaJson(path);
-            }
-            catch (PSInvalidOperationException e)
-            {
-                // Ignore modules with invalid schemas.
-                s_tracer.WriteLine("DSC ClassCache: Error importing file '{0}', with error '{1}'.  Skipping file.", path, e);
-                if (errors != null)
-                {
-                    errors.Add(e);
-                }
-            }
-
-            if (classes != null)
-            {
-                foreach (dynamic c in classes)
-                {
-                    var className = c.ClassName;
-
-                    if (string.IsNullOrEmpty(className))
-                    {
-                        // ClassName is empty - skipping class import
-                        continue;
-                    }
-
-                    string alias = GetFriendlyName(c);
-                    var friendlyName = string.IsNullOrEmpty(alias) ? className : alias;
-                    string moduleQualifiedResourceName = GetModuleQualifiedResourceName(moduleInfo.Item1, moduleInfo.Item2.ToString(), className, friendlyName);
-                    DscClassCacheEntry cimClassInfo;
-
-                    if (ClassCache.TryGetValue(moduleQualifiedResourceName, out cimClassInfo))
-                    {
-                        if (errors != null)
-                        {
-                            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
-                                ParserStrings.DuplicateCimClassDefinition, className, path, cimClassInfo.ModulePath);
-
-                            e.SetErrorId("DuplicateCimClassDefinition");
-                            errors.Add(e);
-                        }
-
-                        continue;
-                    }
-
-                    if (s_hiddenResourceCache.Contains(className))
-                    {
-                        continue;
-                    }
-
-                    var classCacheEntry = new DscClassCacheEntry(DSCResourceRunAsCredential.NotSupported, importInBoxResourcesImplicitly, c, path);
-                    ClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                    GuestConfigClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                    ByClassModuleCache[className] = moduleInfo;
-                }
-
-                var sb = new System.Text.StringBuilder();
-                foreach (dynamic c in classes)
-                {
-                    sb.Append(c.ClassName);
-                    sb.Append(',');
-                }
-
-                s_tracer.WriteLine("DSC ClassCache: loading file '{0}' added the following classes to the cache: {1}", path, sb.ToString());
-            }
-            else
-            {
-                s_tracer.WriteLine("DSC ClassCache: loading file '{0}' added no classes to the cache.");
-            }
-
-            return classes;
-        }
-
-        /// <summary>
-        /// Get text from SecureString.
-        /// </summary>
-        /// <param name="value">Value of SecureString.</param>
-        /// <returns>Decoded string.</returns>
-        public static string GetStringFromSecureString(SecureString value)
-        {
-            string passwordValueToAdd = string.Empty;
-
-            if (value != null)
-            {
-                IntPtr ptr = Marshal.SecureStringToCoTaskMemUnicode(value);
-                passwordValueToAdd = Marshal.PtrToStringUni(ptr);
-                Marshal.ZeroFreeCoTaskMemUnicode(ptr);
-            }
-
-            return passwordValueToAdd;
-        }
-
-        /// <summary>
-        /// Clear out the existing collection of CIM classes and associated keywords.
-        /// </summary>
-        public static void ClearCache()
-        {
-            if (!ExperimentalFeature.IsEnabled(DscExperimentalFeatureName))
-            {
-                throw new InvalidOperationException(ParserStrings.PS7DscSupportDisabled);
-            }
-
-            s_tracer.WriteLine("DSC class: clearing the cache and associated keywords.");
-            ClassCache.Clear();
-            ByClassModuleCache.Clear();
-            CacheResourcesFromMultipleModuleVersions = false;
-            t_currentImportDscResourceInvocations.Clear();
-        }
-
-        private static string GetModuleQualifiedResourceName(string moduleName, string moduleVersion, string className, string resourceName)
-        {
-            return string.Format(CultureInfo.InvariantCulture, "{0}\\{1}\\{2}\\{3}", moduleName, moduleVersion, className, resourceName);
-        }
-
-        private static List<KeyValuePair<string, DscClassCacheEntry>> FindResourceInCache(string moduleName, string className, string resourceName)
-        {
-            return (from cacheEntry in ClassCache
-                    let splittedName = cacheEntry.Key.Split(Utils.Separators.Backslash)
-                    let cachedClassName = splittedName[ClassNameIndex]
-                    let cachedModuleName = splittedName[ModuleNameIndex]
-                    let cachedResourceName = splittedName[FriendlyNameIndex]
-                    where (string.Equals(cachedResourceName, resourceName, StringComparison.OrdinalIgnoreCase)
-                    || (string.Equals(cachedClassName, className, StringComparison.OrdinalIgnoreCase)
-                        && string.Equals(cachedModuleName, moduleName, StringComparison.OrdinalIgnoreCase)))
-                    select cacheEntry).ToList();
-        }
-
-        /// <summary>
-        /// Returns class declaration from GuestConfigClassCache.
-        /// </summary>
-        /// <param name="moduleName">Module name.</param>
-        /// <param name="moduleVersion">Module version.</param>
-        /// <param name="className">Name of the class.</param>
-        /// <param name="resourceName">Friendly name of the resource.</param>
-        /// <returns>Class declaration from cache.</returns>
-        public static PSObject GetGuestConfigCachedClass(string moduleName, string moduleVersion, string className, string resourceName)
-        {
-            if (!ExperimentalFeature.IsEnabled(DscExperimentalFeatureName))
-            {
-                throw new InvalidOperationException(ParserStrings.PS7DscSupportDisabled);
-            }
-
-            var moduleQualifiedResourceName = GetModuleQualifiedResourceName(moduleName, moduleVersion, className, string.IsNullOrEmpty(resourceName) ? className : resourceName);
-            DscClassCacheEntry classCacheEntry = null;
-            if (GuestConfigClassCache.TryGetValue(moduleQualifiedResourceName, out classCacheEntry))
-            {
-                return classCacheEntry.CimClassInstance;
-            }
-            else
-            {
-                // if class was not found with current ResourceName then it may be a class with non-empty FriendlyName that caller does not know, so perform a broad search
-                string partialClassPath = string.Join('\\', moduleName, moduleVersion, className, string.Empty);
-                foreach (string key in GuestConfigClassCache.Keys)
-                {
-                    if (key.StartsWith(partialClassPath))
-                    {
-                        return GuestConfigClassCache[key].CimClassInstance;
-                    }
-                }
-
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// Clears GuestConfigClassCache.
-        /// </summary>
-        public static void ClearGuestConfigClassCache()
-        {
-            GuestConfigClassCache.Clear();
-        }
-
-        private static bool IsMagicProperty(string propertyName)
-        {
-            return System.Text.RegularExpressions.Regex.Match(propertyName, "^(ResourceId|SourceInfo|ModuleName|ModuleVersion|ConfigurationName)$", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success;
-        }
-
-        private static string GetFriendlyName(dynamic cimClass)
-        {
-            return cimClass.FriendlyName;
-        }
-
-        /// <summary>
-        /// Method to get the cached classes in the form of DynamicKeyword.
-        /// </summary>
-        /// <returns>Dynamic keyword collection.</returns>
-        public static Collection<DynamicKeyword> GetKeywordsFromCachedClasses()
-        {
-            if (!ExperimentalFeature.IsEnabled(DscExperimentalFeatureName))
-            {
-                throw new InvalidOperationException(ParserStrings.PS7DscSupportDisabled);
-            }
-
-            Collection<DynamicKeyword> keywords = new Collection<DynamicKeyword>();
-
-            foreach (KeyValuePair<string, DscClassCacheEntry> cachedClass in ClassCache)
-            {
-                string[] splittedName = cachedClass.Key.Split(Utils.Separators.Backslash);
-                string moduleName = splittedName[ModuleNameIndex];
-                string moduleVersion = splittedName[ModuleVersionIndex];
-
-                var keyword = CreateKeywordFromCimClass(moduleName, Version.Parse(moduleVersion), cachedClass.Value.CimClassInstance, cachedClass.Value.DscResRunAsCred);
-                if (keyword is not null)
-                {
-                    keywords.Add(keyword);
-                }
-            }
-
-            return keywords;
-        }
-
-        private static void CreateAndRegisterKeywordFromCimClass(string moduleName, Version moduleVersion, PSObject cimClass, Dictionary<string, ScriptBlock> functionsToDefine, DSCResourceRunAsCredential runAsBehavior)
-        {
-            var keyword = CreateKeywordFromCimClass(moduleName, moduleVersion, cimClass, runAsBehavior);
-            if (keyword is null)
-            {
-                return;
-            }
-
-            // keyword is already defined and we don't allow redefine it
-            if (!CacheResourcesFromMultipleModuleVersions && DynamicKeyword.ContainsKeyword(keyword.Keyword))
-            {
-                var oldKeyword = DynamicKeyword.GetKeyword(keyword.Keyword);
-                if (oldKeyword.ImplementingModule is null ||
-                    !oldKeyword.ImplementingModule.Equals(moduleName, StringComparison.OrdinalIgnoreCase) || oldKeyword.ImplementingModuleVersion != moduleVersion)
-                {
-                    var e = PSTraceSource.NewInvalidOperationException(ParserStrings.DuplicateKeywordDefinition, keyword.Keyword);
-                    e.SetErrorId("DuplicateKeywordDefinition");
-                    throw e;
-                }
-            }
-
-            // Add the dynamic keyword to the table
-            DynamicKeyword.AddKeyword(keyword);
-
-            // And now define the driver functions in the current scope...
-            if (functionsToDefine != null)
-            {
-                functionsToDefine[moduleName + "\\" + keyword.Keyword] = CimKeywordImplementationFunction;
-            }
-        }
-
-        private static DynamicKeyword CreateKeywordFromCimClass(string moduleName, Version moduleVersion, dynamic cimClass, DSCResourceRunAsCredential runAsBehavior)
-        {
-            var resourceName = cimClass.ClassName;
-            string alias = GetFriendlyName(cimClass);
-            var keywordString = string.IsNullOrEmpty(alias) ? resourceName : alias;
-
-            // Skip all of the base, meta, registration and other classes that are not intended to be used directly by a script author
-            if (System.Text.RegularExpressions.Regex.Match(keywordString, "^OMI_Base|^OMI_.*Registration", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Success)
-            {
-                return null;
-            }
-
-            var keyword = new DynamicKeyword()
-            {
-                BodyMode = DynamicKeywordBodyMode.Hashtable,
-                Keyword = keywordString,
-                ResourceName = resourceName,
-                ImplementingModule = moduleName,
-                ImplementingModuleVersion = moduleVersion,
-                SemanticCheck = CheckMandatoryPropertiesPresent
-            };
-
-            // If it's one of reserved dynamic keyword, mark it
-            if (s_reservedDynamicKeywords.Contains(keywordString))
-            {
-                keyword.IsReservedKeyword = true;
-            }
-
-            // see if it's a resource type i.e. it inherits from OMI_BaseResource
-            bool isResourceType = false;
-
-            // previous version of this code was the only place that referenced CimSuperClass
-            // so to simplify things we just check superclass to be OMI_BaseResource
-            // with assumption that current code will not work for multi-level class inheritance (which is never used in practice according to DSC team)
-            // this simplification allows us to avoid linking objects together using CimSuperClass field during deserialization
-            if ((!string.IsNullOrEmpty(cimClass.SuperClassName)) && string.Equals("OMI_BaseResource", cimClass.SuperClassName, StringComparison.OrdinalIgnoreCase))
-            {
-                isResourceType = true;
-            }
-
-            // If it's a resource type, then a resource name is required.
-            keyword.NameMode = isResourceType ? DynamicKeywordNameMode.NameRequired : DynamicKeywordNameMode.NoName;
-
-            // Add the settable properties to the keyword object
-            if (cimClass.ClassProperties != null)
-            {
-                foreach (var prop in cimClass.ClassProperties)
-                {
-                    // If the property has the Read qualifier, skip it.
-                    if (string.Equals(prop.Qualifiers?.Read?.ToString(), "True", StringComparison.OrdinalIgnoreCase))
-                    {
-                        continue;
-                    }
-
-                    // If it's one of our magic properties, skip it
-                    if (IsMagicProperty(prop.Name))
-                    {
-                        continue;
-                    }
-
-                    if (runAsBehavior == DSCResourceRunAsCredential.NotSupported)
-                    {
-                        if (string.Equals(prop.Name, "PsDscRunAsCredential", StringComparison.OrdinalIgnoreCase))
-                        {
-                            // skip adding PsDscRunAsCredential to the dynamic word for the dsc resource.
-                            continue;
-                        }
-                    }
-
-                    // If it's one of our reserved properties, save it for error reporting
-                    if (s_reservedProperties.Contains(prop.Name))
-                    {
-                        keyword.HasReservedProperties = true;
-                        continue;
-                    }
-
-                    // Otherwise, add it to the Keyword List.
-                    var keyProp = new System.Management.Automation.Language.DynamicKeywordProperty();
-                    keyProp.Name = prop.Name;
-
-                    // Copy the type name string. If it's an embedded instance, need to grab it from the ReferenceClassName
-                    bool referenceClassNameIsNullOrEmpty = string.IsNullOrEmpty(prop.ReferenceClassName);
-                    if (prop.CimType == "Instance" && !referenceClassNameIsNullOrEmpty)
-                    {
-                        keyProp.TypeConstraint = prop.ReferenceClassName;
-                    }
-                    else if (prop.CimType == "InstanceArray" && !referenceClassNameIsNullOrEmpty)
-                    {
-                        keyProp.TypeConstraint = prop.ReferenceClassName + "[]";
-                    }
-                    else
-                    {
-                        keyProp.TypeConstraint = prop.CimType.ToString();
-                    }
-
-                    // Check to see if there is a Values attribute and save the list of allowed values if so.
-                    var values = prop.Qualifiers?.Values;
-                    if (values is not null)
-                    {
-                        foreach (var val in values)
-                        {
-                            keyProp.Values.Add(val.ToString());
-                        }
-                    }
-
-                    // Check to see if there is a ValueMap attribute and save the list of allowed values if so.
-                    var nativeValueMap = prop.Qualifiers?.ValueMap;
-                    List<string> valueMap = null;
-                    if (nativeValueMap is not null)
-                    {
-                        valueMap = new List<string>();
-                        foreach (var val in nativeValueMap)
-                        {
-                            valueMap.Add(val.ToString());
-                        }
-                    }
-
-                    // Check to see if this property has the Required qualifier associated with it.
-                    if (string.Equals(prop.Qualifiers?.Required?.ToString(), "True", StringComparison.OrdinalIgnoreCase))
-                    {
-                        keyProp.Mandatory = true;
-                    }
-
-                    // Check to see if this property has the Key qualifier associated with it.
-                    if (string.Equals(prop.Qualifiers?.Key?.ToString(), "True", StringComparison.OrdinalIgnoreCase))
-                    {
-                        keyProp.Mandatory = true;
-                        keyProp.IsKey = true;
-                    }
-
-                    // set the property to mandatory is specified for the resource.
-                    if (runAsBehavior == DSCResourceRunAsCredential.Mandatory)
-                    {
-                        if (string.Equals(prop.Name, "PsDscRunAsCredential", StringComparison.OrdinalIgnoreCase))
-                        {
-                            keyProp.Mandatory = true;
-                        }
-                    }
-
-                    if (valueMap is not null && keyProp.Values.Count > 0)
-                    {
-                        if (valueMap.Count != keyProp.Values.Count)
-                        {
-                            s_tracer.WriteLine(
-                                "DSC CreateDynamicKeywordFromClass: the count of values for qualifier 'Values' and 'ValueMap' doesn't match. count of 'Values': {0}, count of 'ValueMap': {1}. Skip the keyword '{2}'.",
-                                keyProp.Values.Count,
-                                valueMap.Count,
-                                keyword.Keyword);
-                            return null;
-                        }
-
-                        for (int index = 0; index < valueMap.Count; index++)
-                        {
-                            string key = keyProp.Values[index];
-                            string value = valueMap[index];
-
-                            if (keyProp.ValueMap.ContainsKey(key))
-                            {
-                                s_tracer.WriteLine(
-                                    "DSC CreateDynamicKeywordFromClass: same string value '{0}' appears more than once in qualifier 'Values'. Skip the keyword '{1}'.",
-                                    key,
-                                    keyword.Keyword);
-                                return null;
-                            }
-
-                            keyProp.ValueMap.Add(key, value);
-                        }
-                    }
-
-                    keyword.Properties.Add(prop.Name, keyProp);
-                }
-            }
-
-            // update specific keyword with range constraints
-            UpdateKnownRestriction(keyword);
-
-            return keyword;
-        }
-
-        private static void UpdateKnownRestriction(DynamicKeyword keyword)
-        {
-            const int RefreshFrequencyMin = 30;
-            const int RefreshFrequencyMax = 44640;
-
-            const int ConfigurationModeFrequencyMin = 15;
-            const int ConfigurationModeFrequencyMax = 44640;
-
-            if (
-                string.Equals(
-                    keyword.ResourceName,
-                    "MSFT_DSCMetaConfigurationV2",
-                    StringComparison.OrdinalIgnoreCase)
-                ||
-                string.Equals(
-                    keyword.ResourceName,
-                    "MSFT_DSCMetaConfiguration",
-                    StringComparison.OrdinalIgnoreCase))
-            {
-                if (keyword.Properties["RefreshFrequencyMins"] is not null)
-                {
-                    keyword.Properties["RefreshFrequencyMins"].Range = new Tuple<int, int>(RefreshFrequencyMin, RefreshFrequencyMax);
-                }
-
-                if (keyword.Properties["ConfigurationModeFrequencyMins"] != null)
-                {
-                    keyword.Properties["ConfigurationModeFrequencyMins"].Range = new Tuple<int, int>(ConfigurationModeFrequencyMin, ConfigurationModeFrequencyMax);
-                }
-
-                if (keyword.Properties["DebugMode"] is not null)
-                {
-                    keyword.Properties["DebugMode"].Values.Remove("ResourceScriptBreakAll");
-                    keyword.Properties["DebugMode"].ValueMap.Remove("ResourceScriptBreakAll");
-                }
-            }
-        }
-
-        /// <summary>
-        /// Load the default system CIM classes and create the corresponding keywords.
-        /// </summary>
-        /// <param name="errors">Collection of any errors encountered while loading keywords.</param>
-        public static void LoadDefaultCimKeywords(Collection<Exception> errors)
-        {
-            LoadDefaultCimKeywords(functionsToDefine: null, errors, modulePathList: null, cacheResourcesFromMultipleModuleVersions: false);
-        }
-
-        /// <summary>
-        /// Load the default system CIM classes and create the corresponding keywords.
-        /// </summary>
-        /// <param name="functionsToDefine">A dictionary to add the defined functions to, may be null.</param>
-        public static void LoadDefaultCimKeywords(Dictionary<string, ScriptBlock> functionsToDefine)
-        {
-            LoadDefaultCimKeywords(functionsToDefine, errors: null, modulePathList: null, cacheResourcesFromMultipleModuleVersions: false);
-        }
-
-        /// <summary>
-        /// Load the default system CIM classes and create the corresponding keywords.
-        /// </summary>
-        /// <param name="errors">Collection of any errors encountered while loading keywords.</param>
-        /// <param name="cacheResourcesFromMultipleModuleVersions">Allow caching the resources from multiple versions of modules.</param>
-        public static void LoadDefaultCimKeywords(Collection<Exception> errors, bool cacheResourcesFromMultipleModuleVersions)
-        {
-            LoadDefaultCimKeywords(functionsToDefine: null, errors, modulePathList: null, cacheResourcesFromMultipleModuleVersions);
-        }
-
-        /// <summary>
-        /// Load the default system CIM classes and create the corresponding keywords.
-        /// </summary>
-        /// <param name="functionsToDefine">A dictionary to add the defined functions to, may be null.</param>
-        /// <param name="errors">Collection of any errors encountered while loading keywords.</param>
-        /// <param name="modulePathList">List of module path from where DSC PS modules will be loaded.</param>
-        /// <param name="cacheResourcesFromMultipleModuleVersions">Allow caching the resources from multiple versions of modules.</param>
-        private static void LoadDefaultCimKeywords(
-            Dictionary<string, ScriptBlock> functionsToDefine,
-            Collection<Exception> errors,
-            List<string> modulePathList,
-            bool cacheResourcesFromMultipleModuleVersions)
-        {
-            if (!ExperimentalFeature.IsEnabled(DscExperimentalFeatureName))
-            {
-                Exception exception = new InvalidOperationException(ParserStrings.PS7DscSupportDisabled);
-                errors.Add(exception);
-                return;
-            }
-            
-            NewApiIsUsed = true;
-            DynamicKeyword.Reset();
-            Initialize(errors, modulePathList);
-
-            // Initialize->ClearCache resets CacheResourcesFromMultipleModuleVersions to false,
-            // workaround is to set it after Initialize method call.
-            // Initialize method imports all the Inbox resources and internal classes which belongs to only one version
-            // of the module, so it is ok if this property is not set during cache initialization.
-            CacheResourcesFromMultipleModuleVersions = cacheResourcesFromMultipleModuleVersions;
-
-            foreach (dynamic cimClass in ClassCache.Values)
-            {
-                var className = cimClass.CimClassInstance.ClassName;
-                var moduleInfo = ByClassModuleCache[className];
-                CreateAndRegisterKeywordFromCimClass(moduleInfo.Item1, moduleInfo.Item2, cimClass.CimClassInstance, functionsToDefine, cimClass.DscResRunAsCred);
-            }
-
-            // And add the Node keyword definitions
-            if (!DynamicKeyword.ContainsKeyword("Node"))
-            {
-                // Implement dispatch to the Node keyword.
-                var nodeKeyword = new DynamicKeyword()
-                {
-                    BodyMode = DynamicKeywordBodyMode.ScriptBlock,
-                    ImplementingModule = s_defaultModuleInfoForResource.Item1,
-                    ImplementingModuleVersion = s_defaultModuleInfoForResource.Item2,
-                    NameMode = DynamicKeywordNameMode.NameRequired,
-                    Keyword = "Node",
-                };
-                DynamicKeyword.AddKeyword(nodeKeyword);
-            }
-
-            // And add the Import-DscResource keyword definitions
-            if (!DynamicKeyword.ContainsKeyword("Import-DscResource"))
-            {
-                // Implement dispatch to the Node keyword.
-                var nodeKeyword = new DynamicKeyword()
-                {
-                    BodyMode = DynamicKeywordBodyMode.Command,
-                    ImplementingModule = s_defaultModuleInfoForResource.Item1,
-                    ImplementingModuleVersion = s_defaultModuleInfoForResource.Item2,
-                    NameMode = DynamicKeywordNameMode.NoName,
-                    Keyword = "Import-DscResource",
-                    MetaStatement = true,
-                    PostParse = ImportResourcePostParse,
-                    SemanticCheck = ImportResourceCheckSemantics
-                };
-                DynamicKeyword.AddKeyword(nodeKeyword);
-            }
-        }
-
-        // This function is called after parsing the Import-DscResource keyword and it's arguments, but before parsing anything else.
-        private static ParseError[] ImportResourcePostParse(DynamicKeywordStatementAst ast)
-        {
-            var elements = Ast.CopyElements(ast.CommandElements);
-            var commandAst = new CommandAst(ast.Extent, elements, TokenKind.Unknown, null);
-
-            const string NameParam = "Name";
-            const string ModuleNameParam = "ModuleName";
-            const string ModuleVersionParam = "ModuleVersion";
-
-            StaticBindingResult bindingResult = StaticParameterBinder.BindCommand(commandAst, false);
-
-            var errorList = new List<ParseError>();
-            foreach (var bindingException in bindingResult.BindingExceptions.Values)
-            {
-                errorList.Add(new ParseError(bindingException.CommandElement.Extent, "ParameterBindingException", bindingException.BindingException.Message));
-            }
-
-            ParameterBindingResult moduleNameBindingResult = null;
-            ParameterBindingResult resourceNameBindingResult = null;
-            ParameterBindingResult moduleVersionBindingResult = null;
-
-            foreach (var binding in bindingResult.BoundParameters)
-            {
-                // Error case when positional parameter values are specified
-                var boundParameterName = binding.Key;
-                var parameterBindingResult = binding.Value;
-                if (boundParameterName.All(char.IsDigit))
-                {
-                    errorList.Add(new ParseError(parameterBindingResult.Value.Extent, "ImportDscResourcePositionalParamsNotSupported", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourcePositionalParamsNotSupported)));
-                    continue;
-                }
-
-                if (NameParam.StartsWith(boundParameterName, StringComparison.OrdinalIgnoreCase))
-                {
-                    resourceNameBindingResult = parameterBindingResult;
-                }
-                else if (ModuleNameParam.StartsWith(boundParameterName, StringComparison.OrdinalIgnoreCase))
-                {
-                    moduleNameBindingResult = parameterBindingResult;
-                }
-                else if (ModuleVersionParam.StartsWith(boundParameterName, StringComparison.OrdinalIgnoreCase))
-                {
-                    moduleVersionBindingResult = parameterBindingResult;
-                }
-                else
-                {
-                    errorList.Add(new ParseError(parameterBindingResult.Value.Extent, "ImportDscResourceNeedParams", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceNeedParams)));
-                }
-            }
-
-            if (errorList.Count == 0 && moduleNameBindingResult == null && resourceNameBindingResult == null)
-            {
-                errorList.Add(new ParseError(ast.Extent, "ImportDscResourceNeedParams", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceNeedParams)));
-            }
-
-            // Check here if Version is specified but modulename is not specified
-            if (moduleVersionBindingResult != null && moduleNameBindingResult == null)
-            {
-                // only add this error again to the error list if resources is not null
-                // if resources and modules are both null we have already added this error in collection
-                // we do not want to do this twice. since we are giving same error ImportDscResourceNeedParams in both cases
-                // once we have different error messages for 2 scenarios we can remove this check
-                if (resourceNameBindingResult is not null)
-                {
-                    errorList.Add(new ParseError(ast.Extent, "ImportDscResourceNeedModuleNameWithModuleVersion", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceNeedParams)));
-                }
-            }
-
-            string[] resourceNames = null;
-            if (resourceNameBindingResult is not null)
-            {
-                object resourceName = null;
-                if (!IsConstantValueVisitor.IsConstant(resourceNameBindingResult.Value, out resourceName, true, true) ||
-                    !LanguagePrimitives.TryConvertTo(resourceName, out resourceNames))
-                {
-                    errorList.Add(new ParseError(resourceNameBindingResult.Value.Extent, "RequiresInvalidStringArgument", string.Format(CultureInfo.CurrentCulture, ParserStrings.RequiresInvalidStringArgument, NameParam)));
-                }
-            }
-
-            System.Version moduleVersion = null;
-            if (moduleVersionBindingResult is not null)
-            {
-                object moduleVer = null;
-                if (!IsConstantValueVisitor.IsConstant(moduleVersionBindingResult.Value, out moduleVer, true, true))
-                {
-                    errorList.Add(new ParseError(moduleVersionBindingResult.Value.Extent, "RequiresArgumentMustBeConstant", ParserStrings.RequiresArgumentMustBeConstant));
-                }
-
-                if (moduleVer is double)
-                {
-                    // this happens in case -ModuleVersion 1.0, then use extent text for that.
-                    // The better way to do it would be define static binding API against CommandInfo, that holds information about parameter types.
-                    // This way, we can avoid this ugly special-casing and say that -ModuleVersion has type [System.Version].
-                    moduleVer = moduleVersionBindingResult.Value.Extent.Text;
-                }
-
-                if (!LanguagePrimitives.TryConvertTo(moduleVer, out moduleVersion))
-                {
-                    errorList.Add(new ParseError(moduleVersionBindingResult.Value.Extent, "RequiresVersionInvalid", ParserStrings.RequiresVersionInvalid));
-                }
-            }
-
-            ModuleSpecification[] moduleSpecifications = null;
-            if (moduleNameBindingResult is not null)
-            {
-                object moduleName = null;
-                if (!IsConstantValueVisitor.IsConstant(moduleNameBindingResult.Value, out moduleName, true, true))
-                {
-                    errorList.Add(new ParseError(moduleNameBindingResult.Value.Extent, "RequiresArgumentMustBeConstant", ParserStrings.RequiresArgumentMustBeConstant));
-                }
-
-                if (LanguagePrimitives.TryConvertTo(moduleName, out moduleSpecifications))
-                {
-                    // if resourceNames are specified then we can not specify multiple modules name
-                    if (moduleSpecifications is not null && moduleSpecifications.Length > 1 && resourceNames is not null)
-                    {
-                        errorList.Add(new ParseError(moduleNameBindingResult.Value.Extent, "ImportDscResourceMultipleModulesNotSupportedWithName", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceMultipleModulesNotSupportedWithName)));
-                    }
-
-                    // if moduleversion is specified then we can not specify multiple modules name
-                    if (moduleSpecifications is not null && moduleSpecifications.Length > 1 && moduleVersion is not null)
-                    {
-                        errorList.Add(new ParseError(moduleNameBindingResult.Value.Extent, "ImportDscResourceMultipleModulesNotSupportedWithVersion", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceNeedParams)));
-                    }
-
-                    // if moduleversion is specified then we can not specify another version in modulespecification object of ModuleName
-                    if (moduleSpecifications is not null && (moduleSpecifications[0].Version is not null || moduleSpecifications[0].MaximumVersion is not null) && moduleVersion is not null)
-                    {
-                        errorList.Add(new ParseError(moduleNameBindingResult.Value.Extent, "ImportDscResourceMultipleModuleVersionsNotSupported", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceNeedParams)));
-                    }
-
-                    // If moduleVersion is specified we have only one module Name in valid scenario
-                    // So update it's version property in module specification object that will be used to load modules
-                    if (moduleSpecifications is not null && moduleSpecifications[0].Version is null && moduleSpecifications[0].MaximumVersion is null && moduleVersion is not null)
-                    {
-                        moduleSpecifications[0].Version = moduleVersion;
-                    }
-                }
-                else
-                {
-                    errorList.Add(new ParseError(moduleNameBindingResult.Value.Extent, "RequiresInvalidStringArgument", string.Format(CultureInfo.CurrentCulture, ParserStrings.RequiresInvalidStringArgument, ModuleNameParam)));
-                }
-            }
-
-            if (errorList.Count == 0)
-            {
-                // No errors, try to load the resources
-                LoadResourcesFromModuleInImportResourcePostParse(ast.Extent, moduleSpecifications, resourceNames, errorList);
-            }
-
-            return errorList.ToArray();
-        }
-
-        // This function performs semantic checks for Import-DscResource
-        private static ParseError[] ImportResourceCheckSemantics(DynamicKeywordStatementAst ast)
-        {
-            List<ParseError> errorList = null;
-
-            var keywordAst = Ast.GetAncestorAst<DynamicKeywordStatementAst>(ast.Parent);
-            while (keywordAst is not null)
-            {
-                if (keywordAst.Keyword.Keyword.Equals("Node"))
-                {
-                    if (errorList is null)
-                    {
-                        errorList = new List<ParseError>();
-                    }
-
-                    errorList.Add(new ParseError(ast.Extent, "ImportDscResourceInsideNode", string.Format(CultureInfo.CurrentCulture, ParserStrings.ImportDscResourceInsideNode)));
-                    break;
-                }
-
-                keywordAst = Ast.GetAncestorAst<DynamicKeywordStatementAst>(keywordAst.Parent);
-            }
-
-            if (errorList is not null)
-            {
-                return errorList.ToArray();
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        // This function performs semantic checks for all DSC Resources keywords.
-        private static ParseError[] CheckMandatoryPropertiesPresent(DynamicKeywordStatementAst ast)
-        {
-            HashSet<string> mandatoryPropertiesNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-            foreach (var pair in ast.Keyword.Properties)
-            {
-                if (pair.Value.Mandatory)
-                {
-                    mandatoryPropertiesNames.Add(pair.Key);
-                }
-            }
-
-            // by design mandatoryPropertiesNames are not empty at this point:
-            // every resource must have at least one Key property.
-            HashtableAst hashtableAst = null;
-            foreach (var commandElementsAst in ast.CommandElements)
-            {
-                hashtableAst = commandElementsAst as HashtableAst;
-                if (hashtableAst != null)
-                {
-                    break;
-                }
-            }
-
-            if (hashtableAst is null)
-            {
-                // nothing to validate
-                return null;
-            }
-
-            foreach (var pair in hashtableAst.KeyValuePairs)
-            {
-                object evalResultObject;
-                if (IsConstantValueVisitor.IsConstant(pair.Item1, out evalResultObject, forAttribute: false, forRequires: false))
-                {
-                    var presentName = evalResultObject as string;
-                    if (presentName is not null)
-                    {
-                        if (mandatoryPropertiesNames.Remove(presentName) && mandatoryPropertiesNames.Count == 0)
-                        {
-                            // optimization, once all mandatory properties are specified, we can safely exit.
-                            return null;
-                        }
-                    }
-                }
-            }
-
-            if (mandatoryPropertiesNames.Count > 0)
-            {
-                ParseError[] errors = new ParseError[mandatoryPropertiesNames.Count];
-                var extent = ast.CommandElements[0].Extent;
-                int i = 0;
-                foreach (string name in mandatoryPropertiesNames)
-                {
-                    errors[i] = new ParseError(
-                        extent,
-                        "MissingValueForMandatoryProperty",
-                        string.Format(
-                            CultureInfo.CurrentCulture,
-                            ParserStrings.MissingValueForMandatoryProperty,
-                            ast.Keyword.Keyword,
-                            ast.Keyword.Properties.First(p => StringComparer.OrdinalIgnoreCase.Equals(p.Value.Name, name)).Value.TypeConstraint,
-                            name));
-                    i++;
-                }
-
-                return errors;
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Load DSC resources from specified module.
-        /// </summary>
-        /// <param name="scriptExtent">Script statement loading the module, can be null.</param>
-        /// <param name="moduleSpecifications">Module information, can be null.</param>
-        /// <param name="resourceNames">Name of the resource to be loaded from module.</param>
-        /// <param name="errorList">List of errors reported by the method.</param>
-        internal static void LoadResourcesFromModuleInImportResourcePostParse(
-            IScriptExtent scriptExtent,
-            ModuleSpecification[] moduleSpecifications,
-            string[] resourceNames,
-            List<ParseError> errorList)
-        {
-            // get all required modules
-            var modules = new Collection<PSModuleInfo>();
-            if (moduleSpecifications is not null)
-            {
-                foreach (var moduleToImport in moduleSpecifications)
-                {
-                    bool foundModule = false;
-                    var moduleInfos = ModuleCmdletBase.GetModuleIfAvailable(moduleToImport);
-
-                    if (moduleInfos.Count >= 1 && (moduleToImport.Version is not null || moduleToImport.Guid is not null))
-                    {
-                        foreach (var psModuleInfo in moduleInfos)
-                        {
-                            if ((moduleToImport.Guid.HasValue && moduleToImport.Guid.Equals(psModuleInfo.Guid)) ||
-                                (moduleToImport.Version is not null &&
-                                 moduleToImport.Version.Equals(psModuleInfo.Version)))
-                            {
-                                modules.Add(psModuleInfo);
-                                foundModule = true;
-                                break;
-                            }
-                        }
-                    }
-                    else if (moduleInfos.Count == 1)
-                    {
-                        modules.Add(moduleInfos[0]);
-                        foundModule = true;
-                    }
-
-                    if (!foundModule)
-                    {
-                        if (moduleInfos.Count > 1)
-                        {
-                            errorList.Add(
-                                new ParseError(
-                                    scriptExtent,
-                                    "MultipleModuleEntriesFoundDuringParse",
-                                    string.Format(CultureInfo.CurrentCulture, ParserStrings.MultipleModuleEntriesFoundDuringParse, moduleToImport.Name)));
-                        }
-                        else
-                        {
-                            string moduleString = moduleToImport.Version == null
-                                ? moduleToImport.Name
-                                : string.Format(CultureInfo.CurrentCulture, "<{0}, {1}>", moduleToImport.Name, moduleToImport.Version);
-
-                            errorList.Add(new ParseError(scriptExtent, "ModuleNotFoundDuringParse", string.Format(CultureInfo.CurrentCulture, ParserStrings.ModuleNotFoundDuringParse, moduleString)));
-                        }
-
-                        return;
-                    }
-                }
-            }
-            else if (resourceNames is not null)
-            {
-                // Lookup the required resources under available PowerShell modules when modulename is not specified
-                // Make sure that this is not a circular import/parsing
-                var callLocation = string.Join(':', scriptExtent.File, scriptExtent.StartLineNumber, scriptExtent.StartColumnNumber, scriptExtent.Text);
-                if (!t_currentImportDscResourceInvocations.Contains(callLocation))
-                {
-                    t_currentImportDscResourceInvocations.Add(callLocation);
-                    using (var powerShell = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace))
-                    {
-                        powerShell.AddCommand("Get-Module");
-                        powerShell.AddParameter("ListAvailable");
-                        modules = powerShell.Invoke<PSModuleInfo>();
-                    }
-                }
-            }
-
-            // When ModuleName only specified, we need to import all resources from that module
-            var resourcesToImport = new List<string>();
-            if (resourceNames is null || resourceNames.Length == 0)
-            {
-                resourcesToImport.Add("*");
-            }
-            else
-            {
-                resourcesToImport.AddRange(resourceNames);
-            }
-
-            foreach (var moduleInfo in modules)
-            {
-                var resourcesFound = new List<string>();
-                var exceptionList = new System.Collections.ObjectModel.Collection<Exception>();
-                LoadPowerShellClassResourcesFromModule(primaryModuleInfo: moduleInfo, moduleInfo: moduleInfo, resourcesToImport: resourcesToImport, resourcesFound: resourcesFound, errorList: exceptionList, functionsToDefine: null, recurse: true, extent: scriptExtent);
-                foreach (Exception ex in exceptionList)
-                {
-                    errorList.Add(new ParseError(scriptExtent, "ClassResourcesLoadingFailed", ex.Message));
-                }
-
-                foreach (var resource in resourcesFound)
-                {
-                    resourcesToImport.Remove(resource);
-                }
-
-                if (resourcesToImport.Count == 0)
-                {
-                    break;
-                }
-            }
-
-            if (resourcesToImport.Count > 0)
-            {
-                foreach (var resourceNameToImport in resourcesToImport)
-                {
-                    if (!resourceNameToImport.Contains('*'))
-                    {
-                        errorList.Add(new ParseError(scriptExtent, "DscResourcesNotFoundDuringParsing", string.Format(CultureInfo.CurrentCulture, ParserStrings.DscResourcesNotFoundDuringParsing, resourceNameToImport)));
-                    }
-                }
-            }
-        }
-
-        private static void LoadPowerShellClassResourcesFromModule(
-            PSModuleInfo primaryModuleInfo,
-            PSModuleInfo moduleInfo,
-            ICollection<string> resourcesToImport,
-            ICollection<string> resourcesFound,
-            Collection<Exception> errorList,
-            Dictionary<string, ScriptBlock> functionsToDefine = null,
-            bool recurse = true,
-            IScriptExtent extent = null)
-        {
-            if (primaryModuleInfo._declaredDscResourceExports is null || primaryModuleInfo._declaredDscResourceExports.Count == 0)
-            {
-                return;
-            }
-
-            if (moduleInfo.ModuleType == ModuleType.Binary)
-            {
-                throw PSTraceSource.NewArgumentException("isConfiguration", ParserStrings.ConfigurationNotSupportedInPowerShellCore);
-            }
-            else
-            {
-                string scriptPath = null;
-                if (moduleInfo.RootModule is not null)
-                {
-                    scriptPath = Path.Join(moduleInfo.ModuleBase, moduleInfo.RootModule);
-                }
-                else if (moduleInfo.Path is not null)
-                {
-                    scriptPath = moduleInfo.Path;
-                }
-
-                LoadPowerShellClassResourcesFromModule(scriptPath, primaryModuleInfo, resourcesToImport, resourcesFound, functionsToDefine, errorList, extent);
-            }
-
-            if (moduleInfo.NestedModules is not null && recurse)
-            {
-                foreach (var nestedModule in moduleInfo.NestedModules)
-                {
-                    LoadPowerShellClassResourcesFromModule(primaryModuleInfo, nestedModule, resourcesToImport, resourcesFound, errorList, functionsToDefine, recurse: false, extent: extent);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Import class resources from module.
-        /// </summary>
-        /// <param name="moduleInfo">Module information.</param>
-        /// <param name="resourcesToImport">Collection of resources to import.</param>
-        /// <param name="functionsToDefine">Functions to define.</param>
-        /// <param name="errors">List of errors to return.</param>
-        /// <returns>The list of resources imported from this module.</returns>
-        public static List<string> ImportClassResourcesFromModule(PSModuleInfo moduleInfo, ICollection<string> resourcesToImport, Dictionary<string, ScriptBlock> functionsToDefine, Collection<Exception> errors)
-        {
-            if (!ExperimentalFeature.IsEnabled(DscExperimentalFeatureName))
-            {
-                throw new InvalidOperationException(ParserStrings.PS7DscSupportDisabled);
-            }
-
-            var resourcesImported = new List<string>();
-            LoadPowerShellClassResourcesFromModule(moduleInfo, moduleInfo, resourcesToImport, resourcesImported, errors, functionsToDefine);
-            return resourcesImported;
-        }
-
-        internal static PSObject[] GenerateJsonClassesForAst(TypeDefinitionAst typeAst, PSModuleInfo module, DSCResourceRunAsCredential runAsBehavior)
-        {
-            var embeddedInstanceTypes = new List<object>();
-
-            var result = GenerateJsonClassesForAst(typeAst, embeddedInstanceTypes);
-            var visitedInstances = new List<object>();
-            visitedInstances.Add(typeAst);
-            var classes = ProcessEmbeddedInstanceTypes(embeddedInstanceTypes, visitedInstances);
-            AddEmbeddedInstanceTypesToCaches(classes, module, runAsBehavior);
-
-            return result;
-        }
-
-        private static List<PSObject> ProcessEmbeddedInstanceTypes(List<object> embeddedInstanceTypes, List<object> visitedInstances)
-        {
-            var result = new List<PSObject>();
-            while (embeddedInstanceTypes.Count > 0)
-            {
-                var batchedTypes = embeddedInstanceTypes.Where(x => !visitedInstances.Contains(x)).ToArray();
-                embeddedInstanceTypes.Clear();
-
-                for (int i = batchedTypes.Length - 1; i >= 0; i--)
-                {
-                    visitedInstances.Add(batchedTypes[i]);
-                    var typeAst = batchedTypes[i] as TypeDefinitionAst;
-                    if (typeAst is not null)
-                    {
-                        var classes = GenerateJsonClassesForAst(typeAst, embeddedInstanceTypes);
-                        result.AddRange(classes);
-                    }
-                }
-            }
-
-            return result;
-        }
-        
-        private static void AddEmbeddedInstanceTypesToCaches(IEnumerable<PSObject> classes, PSModuleInfo module, DSCResourceRunAsCredential runAsBehavior)
-        {
-            foreach (dynamic c in classes)
-            {
-                var className = c.ClassName;
-                string alias = GetFriendlyName(c);
-                var friendlyName = string.IsNullOrEmpty(alias) ? className : alias;
-                var moduleQualifiedResourceName = GetModuleQualifiedResourceName(module.Name, module.Version.ToString(), className, friendlyName);
-                var classCacheEntry = new DscClassCacheEntry(runAsBehavior, false, c, module.Path);
-                ClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                GuestConfigClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                ByClassModuleCache[className] = new Tuple<string, Version>(module.Name, module.Version);
-            }
-        }
-
-        internal static string MapTypeNameToMofType(ITypeName typeName, string memberName, string className, out bool isArrayType, out string embeddedInstanceType, List<object> embeddedInstanceTypes, ref string[] enumNames)
-        {
-            TypeName propTypeName;
-            var arrayTypeName = typeName as ArrayTypeName;
-            if (arrayTypeName is not null)
-            {
-                isArrayType = true;
-                propTypeName = arrayTypeName.ElementType as TypeName;
-            }
-            else
-            {
-                isArrayType = false;
-                propTypeName = typeName as TypeName;
-            }
-
-            if (propTypeName is null || propTypeName._typeDefinitionAst is null)
-            {
-                throw new NotSupportedException(string.Format(
-                    CultureInfo.InvariantCulture,
-                    ParserStrings.UnsupportedPropertyTypeOfDSCResourceClass,
-                    memberName,
-                    typeName.FullName,
-                    typeName));
-            }
-
-            if (propTypeName._typeDefinitionAst.IsEnum)
-            {
-                enumNames = propTypeName._typeDefinitionAst.Members.Select(m => m.Name).ToArray();
-                isArrayType = false;
-                embeddedInstanceType = null;
-                return "string";
-            }
-
-            if (!embeddedInstanceTypes.Contains(propTypeName._typeDefinitionAst))
-            {
-                embeddedInstanceTypes.Add(propTypeName._typeDefinitionAst);
-            }
-
-            embeddedInstanceType = propTypeName.Name.Replace('.', '_');
-            return "Instance";
-        }
-
-        private static PSObject[] GenerateJsonClassesForAst(TypeDefinitionAst typeAst, List<object> embeddedInstanceTypes)
-        {
-            // MOF-based implementation of this used to generate MOF string representing classes/typeAst and pass it to MMI/MOF deserializer to get CimClass array
-            // Here we are avoiding that roundtrip by constructing the resulting PSObjects directly
-            var className = typeAst.Name;
-
-            string cimSuperClassName = null;
-            if (typeAst.Attributes.Any(a => a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute)))
-            {
-                cimSuperClassName = "OMI_BaseResource";
-            }
-
-            var cimClassProperties = ProcessMembers(embeddedInstanceTypes, typeAst, className).ToArray();
-
-            Queue<object> bases = new Queue<object>();
-            foreach (var b in typeAst.BaseTypes)
-            {
-                bases.Enqueue(b);
-            }
-
-            while (bases.Count > 0)
-            {
-                var b = bases.Dequeue();
-                var tc = b as TypeConstraintAst;
-
-                if (tc is not null)
-                {
-                    b = tc.TypeName.GetReflectionType();
-                    if (b is null)
-                    {
-                        var td = tc.TypeName as TypeName;
-                        if (td is not null && td._typeDefinitionAst is not null)
-                        {
-                            ProcessMembers(embeddedInstanceTypes, td._typeDefinitionAst, className);
-                            foreach (var b1 in td._typeDefinitionAst.BaseTypes)
-                            {
-                                bases.Enqueue(b1);
-                            }
-                        }
-
-                        continue;
-                    }
-                }
-            }
-
-            var result = new PSObject();
-            result.Properties.Add(new PSNoteProperty("ClassName", className));
-            result.Properties.Add(new PSNoteProperty("FriendlyName", className));
-            result.Properties.Add(new PSNoteProperty("SuperClassName", cimSuperClassName));
-            result.Properties.Add(new PSNoteProperty("ClassProperties", cimClassProperties));
-
-            return new[] { result };
-        }
-
-        private static List<PSObject> ProcessMembers(List<object> embeddedInstanceTypes, TypeDefinitionAst typeDefinitionAst, string className)
-        {
-            List<PSObject> result = new List<PSObject>();
-
-            foreach (var member in typeDefinitionAst.Members)
-            {
-                var property = member as PropertyMemberAst;
-
-                if (property == null || property.IsStatic ||
-                    property.Attributes.All(a => a.TypeName.GetReflectionAttributeType() != typeof(DscPropertyAttribute)))
-                {
-                    continue;
-                }
-
-                var memberType = property.PropertyType is null
-                    ? typeof(object)
-                    : property.PropertyType.TypeName.GetReflectionType();
-
-                var attributes = new List<object>();
-                for (int i = 0; i < property.Attributes.Count; i++)
-                {
-                    attributes.Add(property.Attributes[i].GetAttribute());
-                }
-
-                string mofType;
-                bool isArrayType;
-                string embeddedInstanceType;
-                string[] enumNames = null;
-
-                if (memberType != null)
-                {
-                    mofType = MapTypeToMofType(memberType, member.Name, className, out isArrayType, out embeddedInstanceType, embeddedInstanceTypes);
-                    if (memberType.IsEnum)
-                    {
-                        enumNames = Enum.GetNames(memberType);
-                    }
-                }
-                else
-                {
-                    // PropertyType can't be null, we used typeof(object) above in that case so we don't get here.
-                    mofType = MapTypeNameToMofType(property.PropertyType.TypeName, member.Name, className, out isArrayType, out embeddedInstanceType, embeddedInstanceTypes, ref enumNames);
-                }
-
-                var propertyObject = new PSObject();
-                propertyObject.Properties.Add(new PSNoteProperty(@"Name", member.Name));
-                propertyObject.Properties.Add(new PSNoteProperty(@"CimType", mofType + (isArrayType ? "Array" : string.Empty)));
-                if (!string.IsNullOrEmpty(embeddedInstanceType))
-                {
-                    propertyObject.Properties.Add(new PSNoteProperty(@"ReferenceClassName", embeddedInstanceType));
-                }
-
-                PSObject attributesPSObject = null;
-                foreach (var attr in attributes)
-                {
-                    var dscProperty = attr as DscPropertyAttribute;
-                    if (dscProperty is not null)
-                    {
-                        if (attributesPSObject is null)
-                        {
-                            attributesPSObject = new PSObject();
-                        }
-
-                        if (dscProperty.Key)
-                        {
-                            attributesPSObject.Properties.Add(new PSNoteProperty("Key", true));
-                        }
-
-                        if (dscProperty.Mandatory)
-                        {
-                            attributesPSObject.Properties.Add(new PSNoteProperty("Required", true));
-                        }
-
-                        if (dscProperty.NotConfigurable)
-                        {
-                            attributesPSObject.Properties.Add(new PSNoteProperty("Read", true));
-                        }
-
-                        continue;
-                    }
-
-                    var validateSet = attr as ValidateSetAttribute;
-                    if (validateSet is not null)
-                    {
-                        if (attributesPSObject is null)
-                        {
-                            attributesPSObject = new PSObject();
-                        }
-
-                        List<string> valueMap = new List<string>(validateSet.ValidValues);
-                        List<string> values = new List<string>(validateSet.ValidValues);
-                        attributesPSObject.Properties.Add(new PSNoteProperty("ValueMap", valueMap));
-                        attributesPSObject.Properties.Add(new PSNoteProperty("Values", values));
-                    }
-                }
-
-                if (attributesPSObject is not null)
-                {
-                    propertyObject.Properties.Add(new PSNoteProperty(@"Qualifiers", attributesPSObject));
-                }
-
-                result.Add(propertyObject);
-            }
-
-            return result;
-        }
-
-        private static bool GetResourceDefinitionsFromModule(string fileName, out IEnumerable<Ast> resourceDefinitions, Collection<Exception> errorList, IScriptExtent extent)
-        {
-            resourceDefinitions = null;
-
-            if (string.IsNullOrEmpty(fileName))
-            {
-                return false;
-            }
-
-            if (!".psm1".Equals(Path.GetExtension(fileName), StringComparison.OrdinalIgnoreCase) &&
-                !".ps1".Equals(Path.GetExtension(fileName), StringComparison.OrdinalIgnoreCase))
-            {
-                return false;
-            }
-
-            Token[] tokens;
-            ParseError[] errors;
-            var ast = Parser.ParseFile(fileName, out tokens, out errors);
-
-            if (errors is not null && errors.Length > 0)
-            {
-                if (errorList is not null && extent is not null)
-                {
-                    List<string> errorMessages = new List<string>();
-                    foreach (var error in errors)
-                    {
-                        errorMessages.Add(error.ToString());
-                    }
-                    
-                    PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.FailToParseModuleScriptFile, fileName, string.Join(Environment.NewLine, errorMessages));
-                    e.SetErrorId("FailToParseModuleScriptFile");
-                    errorList.Add(e);
-                }
-
-                return false;
-            }
-
-            resourceDefinitions = ast.FindAll(
-                n =>
-                {
-                    var typeAst = n as TypeDefinitionAst;
-                    if (typeAst is not null)
-                    {
-                        for (int i = 0; i < typeAst.Attributes.Count; i++)
-                        {
-                            var a = typeAst.Attributes[i];
-                            if (a.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute))
-                            {
-                                return true;
-                            }
-                        }
-                    }
-
-                    return false;
-                },
-                false);
-
-            return true;
-        }
-
-        private static bool LoadPowerShellClassResourcesFromModule(string fileName, PSModuleInfo module, ICollection<string> resourcesToImport, ICollection<string> resourcesFound, Dictionary<string, ScriptBlock> functionsToDefine, Collection<Exception> errorList, IScriptExtent extent)
-        {
-            IEnumerable<Ast> resourceDefinitions;
-            if (!GetResourceDefinitionsFromModule(fileName, out resourceDefinitions, errorList, extent))
-            {
-                return false;
-            }
-
-            var result = false;
-
-            const WildcardOptions options = WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant;
-            IEnumerable<WildcardPattern> patternList = SessionStateUtilities.CreateWildcardsFromStrings(module._declaredDscResourceExports, options);
-
-            foreach (var r in resourceDefinitions)
-            {
-                result = true;
-                var resourceDefnAst = (TypeDefinitionAst)r;
-
-                if (!SessionStateUtilities.MatchesAnyWildcardPattern(resourceDefnAst.Name, patternList, true))
-                {
-                    continue;
-                }
-
-                bool skip = true;
-                foreach (var toImport in resourcesToImport)
-                {
-                    if (WildcardPattern.Get(toImport, WildcardOptions.IgnoreCase).IsMatch(resourceDefnAst.Name))
-                    {
-                        skip = false;
-                        break;
-                    }
-                }
-
-                if (skip)
-                {
-                    continue;
-                }
-
-                // Parse the Resource Attribute to see if RunAs behavior is specified for the resource.
-                DSCResourceRunAsCredential runAsBehavior = DSCResourceRunAsCredential.Default;
-                foreach (var attr in resourceDefnAst.Attributes)
-                {
-                    if (attr.TypeName.GetReflectionAttributeType() == typeof(DscResourceAttribute))
-                    {
-                        foreach (var na in attr.NamedArguments)
-                        {
-                            if (na.ArgumentName.Equals("RunAsCredential", StringComparison.OrdinalIgnoreCase))
-                            {
-                                var dscResourceAttribute = attr.GetAttribute() as DscResourceAttribute;
-                                if (dscResourceAttribute != null)
-                                {
-                                    runAsBehavior = dscResourceAttribute.RunAsCredential;
-                                }
-                            }
-                        }
-                    }
-                }
-
-                var classes = GenerateJsonClassesForAst(resourceDefnAst, module, runAsBehavior);
-
-                ProcessJsonForDynamicKeywords(module, resourcesFound, functionsToDefine, classes, runAsBehavior, errorList);
-            }
-
-            return result;
-        }
-
-        private static readonly Dictionary<Type, string> s_mapPrimitiveDotNetTypeToMof = new Dictionary<Type, string>()
-        {
-            { typeof(sbyte), "sint8" },
-            { typeof(byte), "uint8" },
-            { typeof(short), "sint16" },
-            { typeof(ushort), "uint16" },
-            { typeof(int), "sint32" },
-            { typeof(uint), "uint32" },
-            { typeof(long), "sint64" },
-            { typeof(ulong), "uint64" },
-            { typeof(float), "real32" },
-            { typeof(double), "real64" },
-            { typeof(bool), "boolean" },
-            { typeof(string), "string" },
-            { typeof(DateTime), "datetime" },
-            { typeof(PSCredential), "string" },
-            { typeof(char), "char16" },
-        };
-
-        internal static string MapTypeToMofType(Type type, string memberName, string className, out bool isArrayType, out string embeddedInstanceType, List<object> embeddedInstanceTypes)
-        {
-            isArrayType = false;
-            if (type.IsValueType)
-            {
-                type = Nullable.GetUnderlyingType(type) ?? type;
-            }
-
-            if (type.IsEnum)
-            {
-                embeddedInstanceType = null;
-                return "string";
-            }
-
-            if (type == typeof(Hashtable))
-            {
-                // Hashtable is obviously not an array, but in the mof, we represent
-                // it as string[] (really, embeddedinstance of MSFT_KeyValuePair), but
-                // we need an array to hold each entry in the hashtable.
-                isArrayType = true;
-                embeddedInstanceType = "MSFT_KeyValuePair";
-                return "string";
-            }
-
-            if (type == typeof(PSCredential))
-            {
-                embeddedInstanceType = "MSFT_Credential";
-                return "string";
-            }
-
-            if (type.IsArray)
-            {
-                isArrayType = true;
-                bool temp;
-                var elementType = type.GetElementType();
-                if (!elementType.IsArray)
-                {
-                    return MapTypeToMofType(type.GetElementType(), memberName, className, out temp, out embeddedInstanceType, embeddedInstanceTypes);
-                }
-            }
-            else
-            {
-                string cimType;
-                if (s_mapPrimitiveDotNetTypeToMof.TryGetValue(type, out cimType))
-                {
-                    embeddedInstanceType = null;
-                    return cimType;
-                }
-            }
-
-            bool supported = false;
-            bool missingDefaultConstructor = false;
-            if (type.IsValueType)
-            {
-                if (s_mapPrimitiveDotNetTypeToMof.ContainsKey(type))
-                {
-                    supported = true;
-                }
-            }
-            else if (!type.IsAbstract)
-            {
-                // Must have default constructor, at least 1 public property/field, and no base classes
-                if (type.GetConstructor(Type.EmptyTypes) is null)
-                {
-                    missingDefaultConstructor = true;
-                }
-                else if (type.BaseType == typeof(object) &&
-                    (type.GetProperties(BindingFlags.Instance | BindingFlags.Public).Length > 0 ||
-                         type.GetFields(BindingFlags.Instance | BindingFlags.Public).Length > 0))
-                {
-                    supported = true;
-                }
-            }
-
-            if (supported)
-            {
-                if (!embeddedInstanceTypes.Contains(type))
-                {
-                    embeddedInstanceTypes.Add(type);
-                }
-
-                // The type is obviously not a string, but in the mof, we represent
-                // it as string (really, embeddedinstance of the class type)
-                embeddedInstanceType = type.FullName.Replace('.', '_');
-                return "string";
-            }
-
-            if (missingDefaultConstructor)
-            {
-                throw new NotSupportedException(string.Format(
-                    CultureInfo.InvariantCulture,
-                    ParserStrings.DscResourceMissingDefaultConstructor,
-                    type.Name));
-            }
-            else
-            {
-                throw new NotSupportedException(string.Format(
-                    CultureInfo.InvariantCulture,
-                    ParserStrings.UnsupportedPropertyTypeOfDSCResourceClass,
-                    memberName,
-                    type.Name,
-                    className));
-            }
-        }
-
-        private static void ProcessJsonForDynamicKeywords(
-            PSModuleInfo module,
-            ICollection<string> resourcesFound,
-            Dictionary<string, ScriptBlock> functionsToDefine,
-            PSObject[] classes,
-            DSCResourceRunAsCredential runAsBehavior,
-            Collection<Exception> errors)
-        {
-            foreach (dynamic c in classes)
-            {
-                var className = c.ClassName;
-                string alias = GetFriendlyName(c);
-                var friendlyName = string.IsNullOrEmpty(alias) ? className : alias;
-                if (!CacheResourcesFromMultipleModuleVersions)
-                {
-                    // Find & remove the previous version of the resource.
-                    List<KeyValuePair<string, DscClassCacheEntry>> resourceList = FindResourceInCache(module.Name, className, friendlyName);
-
-                    if (resourceList.Count > 0 && !string.IsNullOrEmpty(resourceList[0].Key))
-                    {
-                        ClassCache.Remove(resourceList[0].Key);
-
-                        // keyword is already defined and it is a Inbox resource, remove it
-                        if (DynamicKeyword.ContainsKeyword(friendlyName) && resourceList[0].Value.IsImportedImplicitly)
-                        {
-                            DynamicKeyword.RemoveKeyword(friendlyName);
-                        }
-                    }
-                }
-
-                var moduleQualifiedResourceName = GetModuleQualifiedResourceName(module.Name, module.Version.ToString(), className, friendlyName);
-                DscClassCacheEntry existingCacheEntry = null;
-                if (ClassCache.TryGetValue(moduleQualifiedResourceName, out existingCacheEntry))
-                {
-                    if (errors is not null)
-                    {
-                        PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.DuplicateCimClassDefinition, className, module.Path, existingCacheEntry.ModulePath);
-                        e.SetErrorId("DuplicateCimClassDefinition");
-                        errors.Add(e);
-                    }
-                }
-                else
-                {
-                    var classCacheEntry = new DscClassCacheEntry(runAsBehavior, false, c, module.Path);
-                    ClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                    GuestConfigClassCache[moduleQualifiedResourceName] = classCacheEntry;
-                    ByClassModuleCache[className] = new Tuple<string, Version>(module.Name, module.Version);
-                    resourcesFound.Add(className);
-                    CreateAndRegisterKeywordFromCimClass(module.Name, module.Version, c, functionsToDefine, runAsBehavior);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of a malformed resource reference in the DependsOn list.
-        /// </summary>
-        /// <param name="badDependsOnReference">The malformed resource.</param>
-        /// <param name="definingResource">The referencing resource instance.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord GetBadlyFormedRequiredResourceIdErrorRecord(string badDependsOnReference, string definingResource)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.GetBadlyFormedRequiredResourceId, badDependsOnReference, definingResource);
-            e.SetErrorId("GetBadlyFormedRequiredResourceId");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of a malformed resource reference in the exclusive resources list.
-        /// </summary>
-        /// <param name="badExclusiveResourcereference">The malformed resource.</param>
-        /// <param name="definingResource">The referencing resource instance.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord GetBadlyFormedExclusiveResourceIdErrorRecord(string badExclusiveResourcereference, string definingResource)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.GetBadlyFormedExclusiveResourceId, badExclusiveResourcereference, definingResource);
-            e.SetErrorId("GetBadlyFormedExclusiveResourceId");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// If a partial configuration is in 'Pull' Mode, it needs a configuration source.
-        /// </summary>
-        /// <param name="resourceId">Resource id.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord GetPullModeNeedConfigurationSource(string resourceId)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.GetPullModeNeedConfigurationSource, resourceId);
-            e.SetErrorId("GetPullModeNeedConfigurationSource");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Refresh Mode can not be Disabled for the Partial Configurations.
-        /// </summary>
-        /// <param name="resourceId">Resource id.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord DisabledRefreshModeNotValidForPartialConfig(string resourceId)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.DisabledRefreshModeNotValidForPartialConfig, resourceId);
-            e.SetErrorId("DisabledRefreshModeNotValidForPartialConfig");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of a malformed resource reference in the DependsOn list.
-        /// </summary>
-        /// <param name="duplicateResourceId">The duplicate resource identifier.</param>
-        /// <param name="nodeName">The node being defined.</param>
-        /// <returns>The error record to use.</returns>
-        public static ErrorRecord DuplicateResourceIdInNodeStatementErrorRecord(string duplicateResourceId, string nodeName)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.DuplicateResourceIdInNodeStatement, duplicateResourceId, nodeName);
-            e.SetErrorId("DuplicateResourceIdInNodeStatement");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of a configuration name is invalid.
-        /// </summary>
-        /// <param name="configurationName">Configuration name.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord InvalidConfigurationNameErrorRecord(string configurationName)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.InvalidConfigurationName, configurationName);
-            e.SetErrorId("InvalidConfigurationName");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of the given value for a property is invalid.
-        /// </summary>
-        /// <param name="propertyName">Property name.</param>
-        /// <param name="value">Property value.</param>
-        /// <param name="keywordName">Keyword name.</param>
-        /// <param name="validValues">Valid property values.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord InvalidValueForPropertyErrorRecord(string propertyName, string value, string keywordName, string validValues)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.InvalidValueForProperty, value, propertyName, keywordName, validValues);
-            e.SetErrorId("InvalidValueForProperty");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in case the given property is not valid LocalConfigurationManager property.
-        /// </summary>
-        /// <param name="propertyName">Property name.</param>
-        /// <param name="validProperties">Valid properties.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord InvalidLocalConfigurationManagerPropertyErrorRecord(string propertyName, string validProperties)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.InvalidLocalConfigurationManagerProperty, propertyName, validProperties);
-            e.SetErrorId("InvalidLocalConfigurationManagerProperty");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of the given value for a property is not supported.
-        /// </summary>
-        /// <param name="propertyName">Property name.</param>
-        /// <param name="value">Property value.</param>
-        /// <param name="keywordName">Keyword name.</param>
-        /// <param name="validValues">Valid property values.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord UnsupportedValueForPropertyErrorRecord(string propertyName, string value, string keywordName, string validValues)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.UnsupportedValueForProperty, value, propertyName, keywordName, validValues);
-            e.SetErrorId("UnsupportedValueForProperty");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of no value is provided for a mandatory property.
-        /// </summary>
-        /// <param name="keywordName">Keyword name.</param>
-        /// <param name="typeName">Type name.</param>
-        /// <param name="propertyName">Property name.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord MissingValueForMandatoryPropertyErrorRecord(string keywordName, string typeName, string propertyName)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.MissingValueForMandatoryProperty, keywordName, typeName, propertyName);
-            e.SetErrorId("MissingValueForMandatoryProperty");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use in the case of more than one values are provided for DebugMode property.
-        /// </summary>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord DebugModeShouldHaveOneValue()
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.DebugModeShouldHaveOneValue);
-            e.SetErrorId("DebugModeShouldHaveOneValue");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Return an error to indicate a value is out of range for a dynamic keyword property.
-        /// </summary>
-        /// <param name="property">Rroperty name.</param>
-        /// <param name="name">Resource name.</param>
-        /// <param name="providedValue">Provided value.</param>
-        /// <param name="lower">Valid range lower bound.</param>
-        /// <param name="upper">Valid range upper bound.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord ValueNotInRangeErrorRecord(string property, string name, int providedValue, int lower, int upper)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.ValueNotInRange, property, name, providedValue, lower, upper);
-            e.SetErrorId("ValueNotInRange");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Returns an error record to use when composite resource and its resource instances both has PsDscRunAsCredentials value.
-        /// </summary>
-        /// <param name="resourceId">ResourceId of resource.</param>
-        /// <returns>Generated error record.</returns>
-        public static ErrorRecord PsDscRunAsCredentialMergeErrorForCompositeResources(string resourceId)
-        {
-            PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(ParserStrings.PsDscRunAsCredentialMergeErrorForCompositeResources, resourceId);
-            e.SetErrorId("PsDscRunAsCredentialMergeErrorForCompositeResources");
-            return e.ErrorRecord;
-        }
-
-        /// <summary>
-        /// Routine to format a usage string from keyword. The resulting string should look like:
-        ///        User [string] #ResourceName
-        ///        {
-        ///            UserName = [string]
-        ///            [ Description = [string] ]
-        ///            [ Disabled = [bool] ]
-        ///            [ Ensure = [string] { Absent | Present }  ]
-        ///            [ Force = [bool] ]
-        ///            [ FullName = [string] ]
-        ///            [ Password = [PSCredential] ]
-        ///            [ PasswordChangeNotAllowed = [bool] ]
-        ///            [ PasswordChangeRequired = [bool] ]
-        ///            [ PasswordNeverExpires = [bool] ]
-        ///            [ DependsOn = [string[]] ]
-        ///        }
-        /// </summary>
-        /// <param name="keyword">Dynamic keyword.</param>
-        /// <returns>Usage string.</returns>
-        public static string GetDSCResourceUsageString(DynamicKeyword keyword)
-        {
-            StringBuilder usageString;
-            switch (keyword.NameMode)
-            {
-                // Name must be present and simple non-empty bare word
-                case DynamicKeywordNameMode.SimpleNameRequired:
-                    usageString = new StringBuilder(keyword.Keyword + " [string] # Resource Name");
-                    break;
-
-                // Name must be present but can also be an expression
-                case DynamicKeywordNameMode.NameRequired:
-                    usageString = new StringBuilder(keyword.Keyword + " [string[]] # Name List");
-                    break;
-
-                // Name may be optionally present, but if it is present, it must be a non-empty bare word.
-                case DynamicKeywordNameMode.SimpleOptionalName:
-                    usageString = new StringBuilder(keyword.Keyword + " [ [string] ] # Optional Name");
-                    break;
-
-                // Name may be optionally present, expression or bare word
-                case DynamicKeywordNameMode.OptionalName:
-                    usageString = new StringBuilder(keyword.Keyword + " [ [string[]] ] # Optional NameList");
-                    break;
-
-                // Does not take a name
-                default:
-                    usageString = new StringBuilder(keyword.Keyword);
-                    break;
-            }
-
-            usageString.Append("\n{\n");
-
-            bool listKeyProperties = true;
-            while (true)
-            {
-                foreach (var prop in keyword.Properties.OrderBy(ob => ob.Key))
-                {
-                    if (string.Equals(prop.Key, "ResourceId", StringComparison.OrdinalIgnoreCase))
-                    {
-                        continue;
-                    }
-
-                    var propVal = prop.Value;
-                    if ((listKeyProperties && propVal.IsKey) || (!listKeyProperties && !propVal.IsKey))
-                    {
-                        usageString.Append(propVal.Mandatory ? "    " : "    [ ");
-                        usageString.Append(prop.Key);
-                        usageString.Append(" = ");
-                        usageString.Append(FormatCimPropertyType(propVal, !propVal.Mandatory));
-                    }
-                }
-
-                if (listKeyProperties)
-                {
-                    listKeyProperties = false;
-                }
-                else
-                {
-                    break;
-                }
-            }
-
-            usageString.Append('}');
-
-            return usageString.ToString();
-        }
-
-        /// <summary>
-        /// Format the type name of a CIM property in a presentable way.
-        /// </summary>
-        /// <param name="prop">Dynamic keyword property.</param>
-        /// <param name="isOptionalProperty">If this is optional property or not.</param>
-        /// <returns>CIM property type string.</returns>
-        private static StringBuilder FormatCimPropertyType(DynamicKeywordProperty prop, bool isOptionalProperty)
-        {
-            string cimTypeName = prop.TypeConstraint;
-            StringBuilder formattedTypeString = new StringBuilder();
-
-            if (string.Equals(cimTypeName, "MSFT_Credential", StringComparison.OrdinalIgnoreCase))
-            {
-                formattedTypeString.Append("[PSCredential]");
-            }
-            else if (string.Equals(cimTypeName, "MSFT_KeyValuePair", StringComparison.OrdinalIgnoreCase) || string.Equals(cimTypeName, "MSFT_KeyValuePair[]", StringComparison.OrdinalIgnoreCase))
-            {
-                formattedTypeString.Append("[Hashtable]");
-            }
-            else
-            {
-                string convertedTypeString = System.Management.Automation.LanguagePrimitives.ConvertTypeNameToPSTypeName(cimTypeName);
-                if (!string.IsNullOrEmpty(convertedTypeString) && !string.Equals(convertedTypeString, "[]", StringComparison.OrdinalIgnoreCase))
-                {
-                    formattedTypeString.Append(convertedTypeString);
-                }
-                else
-                {
-                    formattedTypeString.Append("[" + cimTypeName + "]");
-                }
-            }
-
-            // Do the property values map
-            if (prop.ValueMap is not null && prop.ValueMap.Count > 0)
-            {
-                formattedTypeString.Append(" { " + string.Join(" | ", prop.ValueMap.Keys.OrderBy(x => x)) + " }");
-            }
-
-            // We prepend optional property with "[" so close out it here. This way it is shown with [ ] to indication optional
-            if (isOptionalProperty)
-            {
-                formattedTypeString.Append(']');
-            }
-
-            formattedTypeString.Append('\n');
-
-            return formattedTypeString;
-        }
-
-        /// <summary>
-        /// Gets the scriptblock that implements the CIM keyword functionality.
-        /// </summary>
-        private static ScriptBlock CimKeywordImplementationFunction
-        {
-            get
-            {
-                // The scriptblock cache will handle mutual exclusion
-                return s_cimKeywordImplementationFunction ??= ScriptBlock.Create(CimKeywordImplementationFunctionText);
-            }
-        }
-
-        private static ScriptBlock s_cimKeywordImplementationFunction;
-
-        private const string CimKeywordImplementationFunctionText = @"
-    param (
-        [Parameter(Mandatory)]
-            $KeywordData,
-        [Parameter(Mandatory)]
-            $Name,
-        [Parameter(Mandatory)]
-        [Hashtable]
-            $Value,
-        [Parameter(Mandatory)]
-            $SourceMetadata
-    )
-
-# walk the call stack to get at all of the enclosing configuration resource IDs
-    $stackedConfigs = @(Get-PSCallStack |
-        where { ($null -ne $_.InvocationInfo.MyCommand) -and ($_.InvocationInfo.MyCommand.CommandType -eq 'Configuration') })
-# keep all but the top-most
-    $stackedConfigs = $stackedConfigs[0..(@($stackedConfigs).Length - 2)]
-# and build the complex resource ID suffix.
-    $complexResourceQualifier = ( $stackedConfigs | ForEach-Object { '[' + $_.Command + ']' + $_.InvocationInfo.BoundParameters['InstanceName'] } ) -join '::'
-
-#
-# Utility function used to validate that the DependsOn arguments are well-formed.
-# The function also adds them to the define nodes resource collection.
-# in the case of resources generated inside a script resource, this routine
-# will also fix up the DependsOn references to '[Type]Instance::[OuterType]::OuterInstance
-#
-    function Test-DependsOn
-    {
-
-# make sure the references are well-formed
-        $updatedDependsOn = foreach ($DependsOnVar in $value['DependsOn']) {
-# match [ResourceType]ResourceName. ResourceName should starts with [a-z_0-9] followed by [a-z_0-9\p{Zs}\.\\-]*
-            if ($DependsOnVar -notmatch '^\[[a-z]\w*\][a-z_0-9][a-z_0-9\p{Zs}\.\\-]*$')
-            {
-                Update-ConfigurationErrorCount
-                Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::GetBadlyFormedRequiredResourceIdErrorRecord($DependsOnVar, $resourceId))
-            }
-
-# Fix up DependsOn for nested names
-            if ($MyTypeName -and $typeName -ne $MyTypeName -and $InstanceName)
-            {
-                ""$DependsOnVar::$complexResourceQualifier""
-            }
-            else
-            {
-                $DependsOnVar
-            }
-        }
-
-        $value['DependsOn']= $updatedDependsOn
-
-        if($null -ne $DependsOn)
-        {
-#
-# Combine DependsOn with dependson from outer composite resource
-# which is set as local variable $DependsOn at the composite resource context
-#
-            $value['DependsOn']= @($value['DependsOn']) + $DependsOn
-        }
-
-# Save the resource id in a per-node dictionary to do cross validation at the end
-        Set-NodeResources $resourceId @( $value['DependsOn'])
-
-# Remove depends on because it need to be fixed up for composite resources
-# We do it in ValidateNodeResource and Update-Depends on in configuration/Node function
-        $value.Remove('DependsOn')
-    }
-
-# A copy of the value object with correctly-cased property names
-    $canonicalizedValue = @{}
-
-    $typeName = $keywordData.ResourceName # CIM type
-    $keywordName = $keywordData.Keyword   # user-friendly alias that is used in scripts
-    $keyValues = ''
-    $debugPrefix = ""   ${TypeName}:"" # set up a debug prefix string that makes it easier to track what's happening.
-
-    Write-Debug ""${debugPrefix} RESOURCE PROCESSING STARTED [KeywordName='$keywordName'] Function='$($myinvocation.Invocationname)']""
-
-# Check whether it's an old style metaconfig
-    $OldMetaConfig = $false
-    if ((-not $IsMetaConfig) -and ($keywordName -ieq 'LocalConfigurationManager')) {
-        $OldMetaConfig = $true
-    }
-
-# Check to see if it's a resource keyword. If so add the meta-properties to the canonical property collection.
-    $resourceId = $null
-# todo: need to include configuration managers and partial configuration
-    if (($keywordData.Properties.Keys -contains 'DependsOn') -or (($KeywordData.ImplementingModule -ieq 'PSDesiredStateConfigurationEngine') -and ($KeywordData.NameMode -eq [System.Management.Automation.Language.DynamicKeywordNameMode]::NameRequired)))
-    {
-
-        $resourceId = ""[$keywordName]$name""
-        if ($MyTypeName -and $keywordName -ne $MyTypeName -and $InstanceName)
-        {
-            $resourceId += ""::$complexResourceQualifier""
-        }
-
-        Write-Debug ""${debugPrefix} ResourceID = $resourceId""
-
-# copy the meta-properties
-        $canonicalizedValue['ResourceID'] = $resourceId
-        $canonicalizedValue['SourceInfo'] = $SourceMetadata
-        if(-not $IsMetaConfig)
-        {
-            $canonicalizedValue['ModuleName'] = $keywordData.ImplementingModule
-            $canonicalizedValue['ModuleVersion'] = $keywordData.ImplementingModuleVersion -as [string]
-        }
-
-# see if there is already a resource with this ID.
-        if (Test-NodeResources $resourceId)
-        {
-            Update-ConfigurationErrorCount
-            Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::DuplicateResourceIdInNodeStatementErrorRecord($resourceId, (Get-PSCurrentConfigurationNode)))
-        }
-        else
-        {
-# If there are prerequisite resources, validate that the references are well-formed strings
-# This routine also adds the resource to the global node resources table.
-            Test-DependsOn
-
-# Check if PsDscRunCredential is being specified as Arguments to Configuration
-        if($null -ne $PsDscRunAsCredential)
-        {
-# Check if resource is also trying to set the value for RunAsCred
-# In that case we will generate error during compilation, this is merge error
-        if($null -ne $value['PsDscRunAsCredential'])
-        {
-            Update-ConfigurationErrorCount
-            Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::PsDscRunAsCredentialMergeErrorForCompositeResources($resourceId))
-        }
-# Set the Value of RunAsCred to that of outer configuration
-        else
-        {
-            $value['PsDscRunAsCredential'] = $PsDscRunAsCredential
-        }
-    }
-
-# Save the resource id in a per-node dictionary to do cross validation at the end
-            if($keywordData.ImplementingModule -ieq ""PSDesiredStateConfigurationEngine"")
-            {
-#$keywordName is PartialConfiguration
-                if($keywordName -eq 'PartialConfiguration')
-                {
-# RefreshMode is 'Pull' and .ConfigurationSource is empty
-                    if($value['RefreshMode'] -eq 'Pull' -and -not $value['ConfigurationSource'])
-                    {
-                        Update-ConfigurationErrorCount
-                        Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::GetPullModeNeedConfigurationSource($resourceId))
-                    }
-
-# Verify that RefreshMode is not Disabled for Partial configuration
-                    if($value['RefreshMode'] -eq 'Disabled')
-                    {
-                        Update-ConfigurationErrorCount
-                        Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::DisabledRefreshModeNotValidForPartialConfig($resourceId))
-                    }
-
-                    if($null -ne $value['ConfigurationSource'])
-                    {
-                        Set-NodeManager $resourceId $value['ConfigurationSource']
-                    }
-
-                    if($null -ne $value['ResourceModuleSource'])
-                    {
-                        Set-NodeResourceSource $resourceId $value['ResourceModuleSource']
-                    }
-                }
-
-                if($null -ne $value['ExclusiveResources'])
-                {
-# make sure the references are well-formed
-                    foreach ($ExclusiveResource in $value['ExclusiveResources']) {
-                        if (($ExclusiveResource -notmatch '^[a-z][a-z_0-9]*\\[a-z][a-z_0-9]*$') -and ($ExclusiveResource -notmatch '^[a-z][a-z_0-9]*$') -and ($ExclusiveResource -notmatch '^[a-z][a-z_0-9]*\\\*$'))
-                        {
-                            Update-ConfigurationErrorCount
-                            Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::GetBadlyFormedExclusiveResourceIdErrorRecord($ExclusiveResource, $resourceId))
-                        }
-                    }
-
-# Save the resource id in a per-node dictionary to do cross validation at the end
-# Validate resource exist
-# Also update the resource reference from module\friendlyname to module\name
-                    $value['ExclusiveResources'] = @(Set-NodeExclusiveResources $resourceId @( $value['ExclusiveResources'] ))
-                }
-            }
-        }
-    }
-    else
-    {
-        Write-Debug ""${debugPrefix} TYPE IS NOT AS DSC RESOURCE""
-    }
-
-#
-# Copy the user-supplied values into a new collection with canonicalized property names
-#
-    foreach ($key in $keywordData.Properties.Keys)
-    {
-        Write-Debug ""${debugPrefix} Processing property '$key' [""
-
-        if ($value.Contains($key))
-        {
-            if ($OldMetaConfig -and (-not ($V1MetaConfigPropertyList -contains $key)))
-            {
-                Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::InvalidLocalConfigurationManagerPropertyErrorRecord($key, ($V1MetaConfigPropertyList -join ', ')))
-                Update-ConfigurationErrorCount
-            }
-# see if there is a list of allowed values for this property (similar to an enum)
-            $allowedValues = $keywordData.Properties[$key].Values
-# If there is and user-provided value is not in that list, write an error.
-            if ($allowedValues)
-            {
-                if(($null -eq $value[$key]) -and ($allowedValues -notcontains $value[$key]))
-                {
-                    Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::InvalidValueForPropertyErrorRecord($key, ""$($value[$key])"", $keywordData.Keyword, ($allowedValues -join ', ')))
-                    Update-ConfigurationErrorCount
-                }
-                else
-                {
-                    $notAllowedValue=$null
-                    foreach($v in $value[$key])
-                    {
-                        if($allowedValues -notcontains $v)
-                        {
-                            $notAllowedValue +=$v.ToString() + ', '
-                        }
-                    }
-
-                    if($notAllowedValue)
-                    {
-                        $notAllowedValue = $notAllowedValue.Substring(0, $notAllowedValue.Length -2)
-                        Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::UnsupportedValueForPropertyErrorRecord($key, $notAllowedValue, $keywordData.Keyword, ($allowedValues -join ', ')))
-                        Update-ConfigurationErrorCount
-                    }
-                }
-            }
-
-# see if a value range is defined for this property
-            $allowedRange = $keywordData.Properties[$key].Range
-            if($allowedRange)
-            {
-                $castedValue = $value[$key] -as [int]
-                if((($castedValue -is [int]) -and (($castedValue -lt  $keywordData.Properties[$key].Range.Item1) -or ($castedValue -gt $keywordData.Properties[$key].Range.Item2))) -or ($null -eq $castedValue))
-                {
-                    Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ValueNotInRangeErrorRecord($key, $keywordName, $value[$key],  $keywordData.Properties[$key].Range.Item1,  $keywordData.Properties[$key].Range.Item2))
-                    Update-ConfigurationErrorCount
-                }
-            }
-
-            Write-Debug ""${debugPrefix}        Canonicalized property '$key' = '$($value[$key])'""
-
-            if ($keywordData.Properties[$key].IsKey)
-            {
-                if($null -eq $value[$key])
-                {
-                    $keyValues += ""::__NULL__""
-                }
-                else
-                {
-                    $keyValues += ""::"" + $value[$key]
-                }
-            }
-
-# see if ValueMap is also defined for this property (actual values)
-            $allowedValueMap = $keywordData.Properties[$key].ValueMap
-#if it is and the ValueMap contains the user-provided value as a key, use the actual value
-            if ($allowedValueMap -and $allowedValueMap.ContainsKey($value[$key]))
-            {
-                $canonicalizedValue[$key] = $allowedValueMap[$value[$key]]
-            }
-            else
-            {
-                $canonicalizedValue[$key] = $value[$key]
-            }
-        }
-        elseif ($keywordData.Properties[$key].Mandatory)
-        {
-# If the property was mandatory but the user didn't provide a value, write and error.
-            Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::MissingValueForMandatoryPropertyErrorRecord($keywordData.Keyword, $keywordData.Properties[$key].TypeConstraint, $Key))
-            Update-ConfigurationErrorCount
-        }
-
-        Write-Debug ""${debugPrefix}    Processing completed '$key' ]""
-    }
-
-    if($keyValues)
-    {
-        $keyValues = $keyValues.Substring(2) # Remove the leading '::'
-        Add-NodeKeys $keyValues $keywordName
-        Test-ConflictingResources $keywordName $canonicalizedValue $keywordData
-    }
-
-# update OMI_ConfigurationDocument
-    if($IsMetaConfig)
-    {
-        if($keywordData.ResourceName -eq 'OMI_ConfigurationDocument')
-        {
-            if($(Get-PSMetaConfigurationProcessed))
-            {
-                $PSMetaConfigDocumentInstVersionInfo = Get-PSMetaConfigDocumentInstVersionInfo
-                $canonicalizedValue['MinimumCompatibleVersion']=$PSMetaConfigDocumentInstVersionInfo['MinimumCompatibleVersion']
-            }
-            else
-            {
-                Set-PSMetaConfigDocInsProcessedBeforeMeta
-                $canonicalizedValue['MinimumCompatibleVersion']='1.0.0'
-            }
-        }
-
-        if(($keywordData.ResourceName -eq 'MSFT_WebDownloadManager') `
-            -or ($keywordData.ResourceName -eq 'MSFT_FileDownloadManager') `
-            -or ($keywordData.ResourceName -eq 'MSFT_WebResourceManager') `
-            -or ($keywordData.ResourceName -eq 'MSFT_FileResourceManager') `
-            -or ($keywordData.ResourceName -eq 'MSFT_WebReportManager') `
-            -or ($keywordData.ResourceName -eq 'MSFT_SignatureValidation') `
-            -or ($keywordData.ResourceName -eq 'MSFT_PartialConfiguration'))
-        {
-            Set-PSMetaConfigVersionInfoV2
-        }
-    }
-    elseif($keywordData.ResourceName -eq 'OMI_ConfigurationDocument')
-    {
-        $canonicalizedValue['MinimumCompatibleVersion']='1.0.0'
-        $canonicalizedValue['CompatibleVersionAdditionalProperties']=@('Omi_BaseResource:ConfigurationName')
-    }
-
-    if(($keywordData.ResourceName -eq 'MSFT_DSCMetaConfiguration') -or ($keywordData.ResourceName -eq 'MSFT_DSCMetaConfigurationV2'))
-    {
-        if($canonicalizedValue['DebugMode'] -and @($canonicalizedValue['DebugMode']).Length -gt 1)
-        {
-# we only allow one value for debug mode now.
-            Write-Error -ErrorRecord ([Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::DebugModeShouldHaveOneValue())
-            Update-ConfigurationErrorCount
-        }
-    }
-
-# Generate the MOF text for this resource instance.
-# when generate mof text for OMI_ConfigurationDocument we handle below two cases:
-# 1. we will add versioning related property based on meta configuration instance already process
-# 2. we update the existing OMI_ConfigurationDocument instance if it already exists when process meta configuration instance
-    $aliasId = ConvertTo-MOFInstance $keywordName $canonicalizedValue
-
-# If a OMI_ConfigurationDocument is executed outside of a node statement, it becomes the default
-# for all nodes that don't have an explicit OMI_ConfigurationDocument declaration
-    if ($keywordData.ResourceName -eq 'OMI_ConfigurationDocument' -and -not (Get-PSCurrentConfigurationNode))
-    {
-        $data = Get-MoFInstanceText $aliasId
-        Write-Debug ""${debugPrefix} DEFINING DEFAULT CONFIGURATION DOCUMENT: $data""
-        Set-PSDefaultConfigurationDocument $data
-    }
-
-    Write-Debug ""${debugPrefix} MOF alias for this resource is '$aliasId'""
-
-# always return the aliasId so the generated file will be well-formed if not valid
-    $aliasId
-
-    Write-Debug ""${debugPrefix} RESOURCE PROCESSING COMPLETED. TOTAL ERROR COUNT: $(Get-ConfigurationErrorCount)""
-
-    ";
-    }
-}
diff --git a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/FileSystem_format_ps1xml.cs b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/FileSystem_format_ps1xml.cs
index 374cadf31d8..4c8d23971af 100644
--- a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/FileSystem_format_ps1xml.cs
+++ b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/FileSystem_format_ps1xml.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System.Collections.Generic;
+using System.Globalization;
 
 namespace System.Management.Automation.Runspaces
 {
@@ -42,27 +43,27 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
         private static IEnumerable<FormatViewDefinition> ViewsOf_FileSystemTypes(CustomControl[] sharedControls)
         {
 #if UNIX
-            if (ExperimentalFeature.IsEnabled("PSUnixFileStat"))
-            {
-                yield return new FormatViewDefinition("childrenWithUnixStat",
-                    TableControl.Create()
-                        .GroupByProperty("PSParentPath", customControl: sharedControls[0])
-                        .AddHeader(Alignment.Left, label: "UnixMode", width: 10)
-                        .AddHeader(Alignment.Left, label: "User", width: 16)
-                        .AddHeader(Alignment.Left, label: "Group", width: 16)
-                        .AddHeader(Alignment.Right, label: "LastWriteTime", width: 18)
-                        .AddHeader(Alignment.Right, label: "Size", width: 14)
-                        .AddHeader(Alignment.Left, label: "Name")
-                        .StartRowDefinition(wrap: true)
-                            .AddPropertyColumn("UnixMode")
-                            .AddPropertyColumn("User")
-                            .AddPropertyColumn("Group")
-                            .AddScriptBlockColumn(scriptBlock: @"'{0:d} {0:HH}:{0:mm}' -f $_.LastWriteTime")
-                            .AddPropertyColumn("Size")
-                            .AddPropertyColumn("NameString")
-                        .EndRowDefinition()
-                    .EndTable());
-            }
+            yield return new FormatViewDefinition("childrenWithUnixStat",
+                TableControl.Create()
+                    .GroupByProperty("PSParentPath", customControl: sharedControls[0])
+                    .AddHeader(Alignment.Left, label: "UnixMode", width: 10)
+                    .AddHeader(Alignment.Right, label: "User", width: 10)
+                    .AddHeader(Alignment.Left, label: "Group", width: 10)
+                    .AddHeader(
+                        Alignment.Right,
+                        label: "LastWriteTime",
+                        width: String.Format(CultureInfo.CurrentCulture, "{0:d} {0:HH}:{0:mm}", CultureInfo.CurrentCulture.Calendar.MaxSupportedDateTime).Length)
+                    .AddHeader(Alignment.Right, label: "Size", width: 12)
+                    .AddHeader(Alignment.Left, label: "Name")
+                    .StartRowDefinition(wrap: true)
+                        .AddPropertyColumn("UnixMode")
+                        .AddPropertyColumn("User")
+                        .AddPropertyColumn("Group")
+                        .AddScriptBlockColumn(scriptBlock: @"'{0:d} {0:HH}:{0:mm}' -f $_.LastWriteTime")
+                        .AddPropertyColumn("Size")
+                        .AddPropertyColumn("NameString")
+                    .EndRowDefinition()
+                .EndTable());
 #endif
 
             yield return new FormatViewDefinition("children",
diff --git a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/HelpV3_format_ps1xml.cs b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/HelpV3_format_ps1xml.cs
index d04ea1bdedf..fc5ddc5ab9a 100644
--- a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/HelpV3_format_ps1xml.cs
+++ b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/HelpV3_format_ps1xml.cs
@@ -175,7 +175,7 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                 .EndControl();
 
             var sharedControls = new CustomControl[] {
-                null,//MamlParameterValueGroupControl,
+                null, //MamlParameterValueGroupControl,
                 MamlParameterControl,
                 MamlTypeControl,
                 MamlParameterValueControl,
diff --git a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/Help_format_ps1xml.cs b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/Help_format_ps1xml.cs
index d18de013397..6825ec14e6c 100644
--- a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/Help_format_ps1xml.cs
+++ b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/Help_format_ps1xml.cs
@@ -350,7 +350,7 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                             .AddNewline()
                             .AddText(HelpDisplayStrings.ParameterPosition)
                             .AddScriptBlockExpressionBinding(@" ", selectedByScript: @"($_.position -eq  $()) -or ($_.position -eq '')", customControl: control7)
-                            .AddScriptBlockExpressionBinding(@"$_.position", selectedByScript: "$_.position  -ne  $()")
+                            .AddScriptBlockExpressionBinding(@"$_.position", selectedByScript: "$_.position -ne $()")
                             .AddNewline()
                             .AddText(HelpDisplayStrings.ParameterDefaultValue)
                             .AddPropertyExpressionBinding(@"defaultValue")
@@ -358,6 +358,9 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                             .AddText(HelpDisplayStrings.AcceptsPipelineInput)
                             .AddPropertyExpressionBinding(@"pipelineInput")
                             .AddNewline()
+                            .AddText(HelpDisplayStrings.ParameterAliases)
+                            .AddPropertyExpressionBinding(@"aliases")
+                            .AddNewline()
                             .AddText(HelpDisplayStrings.AcceptsWildCardCharacters)
                             .AddPropertyExpressionBinding(@"globbing", customControl: MamlTrueFalseShortControl)
                             .AddNewline()
@@ -677,10 +680,7 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_MamlCommandHelpInfo_Ful
                         .StartFrame(leftIndent: 4)
                             .AddPropertyExpressionBinding(@"title")
                             .AddNewline()
-                            .AddNewline()
-                            .StartFrame(leftIndent: 4)
-                                .AddPropertyExpressionBinding(@"alert", enumerateCollection: true, customControl: sharedControls[11])
-                            .EndFrame()
+                            .AddPropertyExpressionBinding(@"alert", enumerateCollection: true, customControl: sharedControls[11])
                             .AddNewline()
                         .EndFrame()
                     .EndEntry()
diff --git a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs
index b29fe0bb5de..24d99d4dd4b 100644
--- a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs
+++ b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs
@@ -137,6 +137,10 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                 "System.Management.Automation.Subsystem.SubsystemInfo",
                 ViewsOf_System_Management_Automation_Subsystem_SubsystemInfo());
 
+            yield return new ExtendedTypeDefinition(
+                "System.Management.Automation.Subsystem.SubsystemInfo+ImplementationInfo",
+                ViewsOf_System_Management_Automation_Subsystem_SubsystemInfo_ImplementationInfo());
+
             yield return new ExtendedTypeDefinition(
                 "System.Management.Automation.ShellVariable",
                 ViewsOf_System_Management_Automation_ShellVariable());
@@ -248,6 +252,10 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                 "Microsoft.PowerShell.MarkdownRender.PSMarkdownOptionInfo",
                 ViewsOf_Microsoft_PowerShell_MarkdownRender_MarkdownOptionInfo());
 
+            yield return new ExtendedTypeDefinition(
+                "Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatus",
+                ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_TcpPortStatus());
+
             yield return new ExtendedTypeDefinition(
                 "Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus",
                 ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingStatus());
@@ -276,6 +284,10 @@ internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
                 "System.Management.Automation.PSStyle+ProgressConfiguration",
                 ViewsOf_System_Management_Automation_PSStyleProgressConfiguration());
 
+            yield return new ExtendedTypeDefinition(
+                "System.Management.Automation.PSStyle+FileInfoFormatting",
+                ViewsOf_System_Management_Automation_PSStyleFileInfoFormat());
+
             yield return new ExtendedTypeDefinition(
                 "System.Management.Automation.PSStyle+ForegroundColor",
                 ViewsOf_System_Management_Automation_PSStyleForegroundColor());
@@ -770,6 +782,21 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                 .EndTable());
         }
 
+        private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_Subsystem_SubsystemInfo_ImplementationInfo()
+        {
+            yield return new FormatViewDefinition(
+                "System.Management.Automation.Subsystem.SubsystemInfo+ImplementationInfo",
+                ListControl.Create()
+                    .StartEntry()
+                        .AddItemProperty(@"Id")
+                        .AddItemProperty(@"Kind")
+                        .AddItemProperty(@"Name")
+                        .AddItemProperty(@"Description")
+                        .AddItemProperty(@"ImplementationType")
+                    .EndEntry()
+                .EndList());
+        }
+
         private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ShellVariable()
         {
             yield return new FormatViewDefinition("ShellVariable",
@@ -806,29 +833,19 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                             $maxDepth = 10
                             $ellipsis = ""`u{2026}""
                             $resetColor = ''
-                            if ($Host.UI.SupportsVirtualTerminal -and ([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
-                                $resetColor = [System.Management.Automation.VTUtility]::GetEscapeSequence(
-                                    [System.Management.Automation.VTUtility+VT]::Reset
-                                )
-                            }
-
-                            function Get-VT100Color([ConsoleColor] $color) {
-                                if (!$Host.UI.SupportsVirtualTerminal -or !([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
-                                    return ''
-                                }
+                            $errorColor = ''
+                            $accentColor = ''
 
-                                return [System.Management.Automation.VTUtility]::GetEscapeSequence($color)
+                            if ($Host.UI.SupportsVirtualTerminal -and ([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
+                                $resetColor = $PSStyle.Reset
+                                $errorColor = $psstyle.Formatting.Error
+                                $accentColor = $PSStyle.Formatting.FormatAccent
                             }
 
                             function Show-ErrorRecord($obj, [int]$indent = 0, [int]$depth = 1) {
                                 $newline = [Environment]::Newline
                                 $output = [System.Text.StringBuilder]::new()
                                 $prefix = ' ' * $indent
-                                $accentColor = ''
-
-                                if ($null -ne $Host.PrivateData) {
-                                    $accentColor = Get-VT100Color ($Host.PrivateData.FormatAccentColor ?? $Host.PrivateData.ErrorForegroundColor)
-                                }
 
                                 $expandTypes = @(
                                     'Microsoft.Rest.HttpRequestMessageWrapper'
@@ -901,9 +918,9 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                                             $null = $output.Append($prop.Value)
                                         }
                                         # Dictionary and Hashtable we want to show as Key/Value pairs, we don't do the extra whitespace alignment here
-                                        elseif ($prop.Value.GetType().Name.StartsWith('Dictionary') -or $prop.Value.GetType().Name -eq 'Hashtable') {
+                                        elseif ($prop.Value -is [System.Collections.IDictionary]) {
                                             $isFirstElement = $true
-                                            foreach ($key in $prop.Value.Keys) {
+                                            foreach ($key in ($prop.Value.Keys | Sort-Object)) {
                                                 if ($isFirstElement) {
                                                     $null = $output.Append($newline)
                                                 }
@@ -929,20 +946,42 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                                                 $isFirstElement = $true
                                                 foreach ($value in $prop.Value) {
                                                     $null = $output.Append($newline)
-                                                    if (!$isFirstElement) {
-                                                        $null = $output.Append($newline)
+                                                    $valueIndent = ' ' * ($newIndent + 2)
+
+                                                    if ($value -is [Type]) {
+                                                        # Just show the typename instead of it as an object
+                                                        $null = $output.Append(""${prefix}${valueIndent}[$($value.ToString())]"")
+                                                    }
+                                                    elseif ($value -is [string] -or $value.GetType().IsPrimitive) {
+                                                        $null = $output.Append(""${prefix}${valueIndent}${value}"")
+                                                    }
+                                                    else {
+                                                        if (!$isFirstElement) {
+                                                            $null = $output.Append($newline)
+                                                        }
+                                                        $null = $output.Append((Show-ErrorRecord $value $newIndent ($depth + 1)))
                                                     }
-                                                    $null = $output.Append((Show-ErrorRecord $value $newIndent ($depth + 1)))
                                                     $isFirstElement = $false
                                                 }
                                             }
                                         }
+                                        elseif ($prop.Value -is [Type]) {
+                                            # Just show the typename instead of it as an object
+                                            $null = $output.Append(""[$($prop.Value.ToString())]"")
+                                        }
                                         # Anything else, we convert to string.
                                         # ToString() can throw so we use LanguagePrimitives.TryConvertTo() to hide a convert error
                                         else {
                                             $value = $null
                                             if ([System.Management.Automation.LanguagePrimitives]::TryConvertTo($prop.Value, [string], [ref]$value) -and $value -ne $null)
                                             {
+                                                if ($prop.Name -eq 'PositionMessage') {
+                                                    $value = $value.Insert($value.IndexOf('~'), $errorColor)
+                                                }
+                                                elseif ($prop.Name -eq 'Message') {
+                                                    $value = $errorColor + $value
+                                                }
+
                                                 $isFirstLine = $true
                                                 if ($value.Contains($newline)) {
                                                     # the 3 is to account for ' : '
@@ -995,12 +1034,18 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
             yield return new FormatViewDefinition("ErrorInstance",
                 CustomControl.Create(outOfBand: true)
                     .StartEntry()
-                        .AddScriptBlockExpressionBinding(@"
-                                    if (@('NativeCommandErrorMessage','NativeCommandError') -notcontains $_.FullyQualifiedErrorId -and @('CategoryView','ConciseView') -notcontains $ErrorView)
+                        .AddScriptBlockExpressionBinding(
+                            """
+                                    $errorColor = ''
+                                    $commandPrefix = ''
+                                    if (@('NativeCommandErrorMessage','NativeCommandError') -notcontains $_.FullyQualifiedErrorId -and @('CategoryView','ConciseView','DetailedView') -notcontains $ErrorView)
                                     {
                                         $myinv = $_.InvocationInfo
-                                        if ($myinv -and $myinv.MyCommand)
-                                        {
+                                        if ($Host.UI.SupportsVirtualTerminal) {
+                                            $errorColor = $PSStyle.Formatting.Error
+                                        }
+
+                                        $commandPrefix = if ($myinv -and $myinv.MyCommand) {
                                             switch -regex ( $myinv.MyCommand.CommandType )
                                             {
                                                 ([System.Management.Automation.CommandTypes]::ExternalScript)
@@ -1045,41 +1090,27 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                                             $myinv.InvocationName + ' : '
                                         }
                                     }
-                                ")
-                        .AddScriptBlockExpressionBinding(@"
+
+                                    $errorColor + $commandPrefix
+                                """)
+                        .AddScriptBlockExpressionBinding(
+                            """
                                     Set-StrictMode -Off
+                                    $ErrorActionPreference = 'Stop'
+                                    trap { 'Error found in error view definition: ' + $_.Exception.Message }
                                     $newline = [Environment]::Newline
 
-                                    function Get-ConciseViewPositionMessage {
-
-                                        $resetColor = ''
-                                        if ($Host.UI.SupportsVirtualTerminal -and ([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
-                                            $resetColor = [System.Management.Automation.VTUtility]::GetEscapeSequence(
-                                                [System.Management.Automation.VTUtility+VT]::Reset
-                                            )
-                                        }
-
-                                        function Get-VT100Color([ConsoleColor] $color) {
-                                            if (!$Host.UI.SupportsVirtualTerminal -or !([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
-                                                return ''
-                                            }
-
-                                            return [System.Management.Automation.VTUtility]::GetEscapeSequence($color)
-                                        }
-
-                                        # return length of string sans VT100 codes
-                                        function Get-RawStringLength($string) {
-                                            $vtCodes = ""`e[0m"", ""`e[2;30m"", ""`e[2;31m"", ""`e[2;32m"", ""`e[2;33m"", ""`e[2;34m"",
-                                                ""`e[2;35m"", ""`e[2;36m"", ""`e[2;37m"", ""`e[1;30m"", ""`e[1;31m"", ""`e[1;32m"",
-                                                ""`e[1;33m"", ""`e[1;34m"", ""`e[1;35m"", ""`e[1;36m"", ""`e[1;37m""
+                                    $resetColor = ''
+                                    $errorColor = ''
+                                    $accentColor = ''
 
-                                            $newString = $string
-                                            foreach ($vtCode in $vtCodes) {
-                                                $newString = $newString.Replace($vtCode, '')
-                                            }
+                                    if ($Host.UI.SupportsVirtualTerminal -and ([string]::IsNullOrEmpty($env:__SuppressAnsiEscapeSequences))) {
+                                        $resetColor = $PSStyle.Reset
+                                        $errorColor = $PSStyle.Formatting.Error
+                                        $accentColor = $PSStyle.Formatting.ErrorAccent
+                                    }
 
-                                            return $newString.Length
-                                        }
+                                    function Get-ConciseViewPositionMessage {
 
                                         # returns a string cut to last whitespace
                                         function Get-TruncatedString($string, [int]$length) {
@@ -1091,45 +1122,53 @@ function Get-ConciseViewPositionMessage {
                                             return ($string.Substring(0,$length) -split '\s',-2)[0]
                                         }
 
-                                        $errorColor = ''
-                                        $accentColor = ''
-
-                                        if ($null -ne $Host.PrivateData) {
-                                            $errorColor = Get-VT100Color $Host.PrivateData.ErrorForegroundColor
-                                            $accentColor = Get-VT100Color ($Host.PrivateData.ErrorAccentColor ?? $errorColor)
-                                        }
-
                                         $posmsg = ''
                                         $headerWhitespace = ''
                                         $offsetWhitespace = ''
                                         $message = ''
                                         $prefix = ''
 
-                                        # Don't show line information if script module
-                                        if (($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') -and !($myinv.ScriptName.EndsWith('.psm1', [System.StringComparison]::OrdinalIgnoreCase))) {
-                                            $useTargetObject = $false
+                                        # Handle case where there is a TargetObject from a Pester `Should` assertion failure and we can show the error at the target rather than the script source
+                                        # Note that in some versions, this is a Dictionary<,> and in others it's a hashtable. So we explicitly cast to a shared interface in the method invocation
+                                        # to force using `IDictionary.Contains`. Hashtable does have it's own `ContainKeys` as well, but if they ever opt to use a custom `IDictionary`, that may not.
+                                        $useTargetObject = $null -ne $err.TargetObject -and
+                                            $err.TargetObject -is [System.Collections.IDictionary] -and
+                                            ([System.Collections.IDictionary]$err.TargetObject).Contains('Line') -and
+                                            ([System.Collections.IDictionary]$err.TargetObject).Contains('LineText')
+
+                                        # The checks here determine if we show line detailed error information:
+                                        # - check if `ParserError` and comes from PowerShell which eventually results in a ParseException, but during this execution it's an ErrorRecord
+                                        $isParseError = $err.CategoryInfo.Category -eq 'ParserError' -and
+                                            $err.Exception -is [System.Management.Automation.ParentContainsErrorRecordException]
+
+                                        # - check if invocation is a script or multiple lines in the console
+                                        $isMultiLineOrExternal = $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1
+
+                                        # - check that it's not a script module as expectation is that users don't want to see the line of error within a module
+                                        $shouldShowLineDetail = ($isParseError -or $isMultiLineOrExternal) -and
+                                            $myinv.ScriptName -notmatch '\.psm1$'
+
+                                        if ($useTargetObject -or $shouldShowLineDetail) {
 
-                                            # Handle case where there is a TargetObject and we can show the error at the target rather than the script source
-                                            if ($_.TargetObject.Line -and $_.TargetObject.LineText) {
-                                                $posmsg = ""${resetcolor}$($_.TargetObject.File)${newline}""
-                                                $useTargetObject = $true
+                                            if ($useTargetObject) {
+                                                $posmsg = "${resetcolor}$($err.TargetObject.File)${newline}"
                                             }
                                             elseif ($myinv.ScriptName) {
                                                 if ($env:TERM_PROGRAM -eq 'vscode') {
                                                     # If we are running in vscode, we know the file:line:col links are clickable so we use this format
-                                                    $posmsg = ""${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber):$($myinv.OffsetInLine)${newline}""
+                                                    $posmsg = "${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber):$($myinv.OffsetInLine)${newline}"
                                                 }
                                                 else {
-                                                    $posmsg = ""${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber)${newline}""
+                                                    $posmsg = "${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber)${newline}"
                                                 }
                                             }
                                             else {
-                                                $posmsg = ""${newline}""
+                                                $posmsg = "${newline}"
                                             }
 
                                             if ($useTargetObject) {
-                                                $scriptLineNumber = $_.TargetObject.Line
-                                                $scriptLineNumberLength = $_.TargetObject.Line.ToString().Length
+                                                $scriptLineNumber = $err.TargetObject.Line
+                                                $scriptLineNumberLength = $err.TargetObject.Line.ToString().Length
                                             }
                                             else {
                                                 $scriptLineNumber = $myinv.ScriptLineNumber
@@ -1146,13 +1185,42 @@ function Get-ConciseViewPositionMessage {
                                             }
 
                                             $verticalBar = '|'
-                                            $posmsg += ""${accentColor}${headerWhitespace}Line ${verticalBar}${newline}""
+                                            $posmsg += "${accentColor}${headerWhitespace}Line ${verticalBar}${newline}"
 
                                             $highlightLine = ''
                                             if ($useTargetObject) {
                                                 $line = $_.TargetObject.LineText.Trim()
+
                                                 $offsetLength = 0
                                                 $offsetInLine = 0
+                                                $startColumn = 0
+                                                if (
+                                                    ([System.Collections.IDictionary]$_.TargetObject).Contains('StartColumn') -and
+                                                    [System.Management.Automation.LanguagePrimitives]::TryConvertTo[int]($_.TargetObject.StartColumn, [ref]$startColumn) -and
+                                                    $null -ne $startColumn -and
+                                                    $startColumn -gt 0 -and
+                                                    $startColumn -le $line.Length
+                                                ) {
+                                                    $endColumn = 0
+                                                    if (-not (
+                                                        ([System.Collections.IDictionary]$_.TargetObject).Contains('EndColumn') -and
+                                                        [System.Management.Automation.LanguagePrimitives]::TryConvertTo[int]($_.TargetObject.EndColumn, [ref]$endColumn) -and
+                                                        $null -ne $endColumn -and
+                                                        $endColumn -gt $startColumn -and
+                                                        $endColumn -le ($line.Length + 1)
+                                                    )) {
+                                                        $endColumn = $line.Length + 1
+                                                    }
+
+                                                    # Input is expected to be 1-based index to match the extent positioning
+                                                    # but we use 0-based indexing below.
+                                                    $startColumn -= 1
+                                                    $endColumn -= 1
+
+                                                    $highlightLine = "$(" " * $startColumn)$("~" * ($endColumn - $startColumn))"
+                                                    $offsetLength = $endColumn - $startColumn
+                                                    $offsetInLine = $startColumn
+                                                }
                                             }
                                             else {
                                                 $positionMessage = $myinv.PositionMessage.Split($newline)
@@ -1171,19 +1239,19 @@ function Get-ConciseViewPositionMessage {
                                                 $line = $line.Insert($offsetInLine + $offsetLength, $resetColor).Insert($offsetInLine, $accentColor)
                                             }
 
-                                            $posmsg += ""${accentColor}${lineWhitespace}${ScriptLineNumber} ${verticalBar} ${resetcolor}${line}""
+                                            $posmsg += "${accentColor}${lineWhitespace}${ScriptLineNumber} ${verticalBar} ${resetcolor}${line}"
                                             $offsetWhitespace = ' ' * $offsetInLine
-                                            $prefix = ""${accentColor}${headerWhitespace}     ${verticalBar} ${errorColor}""
+                                            $prefix = "${accentColor}${headerWhitespace}     ${verticalBar} ${errorColor}"
                                             if ($highlightLine -ne '') {
-                                                $posMsg += ""${prefix}${highlightLine}${newline}""
+                                                $posMsg += "${prefix}${highlightLine}${newline}"
                                             }
-                                            $message = ""${prefix}""
+                                            $message = "${prefix}"
                                         }
 
                                         if (! $err.ErrorDetails -or ! $err.ErrorDetails.Message) {
-                                            if ($err.CategoryInfo.Category -eq 'ParserError' -and $err.Exception.Message.Contains(""~$newline"")) {
+                                            if ($err.CategoryInfo.Category -eq 'ParserError' -and $err.Exception.Message.Contains("~$newline")) {
                                                 # need to parse out the relevant part of the pre-rendered positionmessage
-                                                $message += $err.Exception.Message.split(""~$newline"")[1].split(""${newline}${newline}"")[0]
+                                                $message += $err.Exception.Message.split("~$newline")[1].split("${newline}${newline}")[0]
                                             }
                                             elseif ($err.Exception) {
                                                 $message += $err.Exception.Message
@@ -1201,11 +1269,11 @@ function Get-ConciseViewPositionMessage {
 
                                         # if rendering line information, break up the message if it's wider than the console
                                         if ($myinv -and $myinv.ScriptName -or $err.CategoryInfo.Category -eq 'ParserError') {
-                                            $prefixLength = Get-RawStringLength -string $prefix
+                                            $prefixLength = [System.Management.Automation.Internal.StringDecorated]::new($prefix).ContentLength
                                             $prefixVtLength = $prefix.Length - $prefixLength
 
                                             # replace newlines in message so it lines up correct
-                                            $message = $message.Replace($newline, ' ').Replace(""`n"", ' ').Replace(""`t"", ' ')
+                                            $message = $message.Replace($newline, ' ').Replace("`n", ' ').Replace("`t", ' ')
 
                                             $windowWidth = 120
                                             if ($Host.UI.RawUI -ne $null) {
@@ -1240,7 +1308,7 @@ function Get-ConciseViewPositionMessage {
                                             $message += $newline
                                         }
 
-                                        $posmsg += ""${errorColor}"" + $message
+                                        $posmsg += "${errorColor}" + $message
 
                                         $reason = 'Error'
                                         if ($err.Exception -and $err.Exception.WasThrownFromThrowStatement) {
@@ -1252,8 +1320,8 @@ function Get-ConciseViewPositionMessage {
                                             $reason = $myinv.MyCommand
                                         }
                                         # If it's a scriptblock, better to show the command in the scriptblock that had the error
-                                        elseif ($_.CategoryInfo.Activity) {
-                                            $reason = $_.CategoryInfo.Activity
+                                        elseif ($err.CategoryInfo.Activity) {
+                                            $reason = $err.CategoryInfo.Activity
                                         }
                                         elseif ($myinv.MyCommand) {
                                             $reason = $myinv.MyCommand
@@ -1270,7 +1338,7 @@ function Get-ConciseViewPositionMessage {
 
                                         $errorMsg = 'Error'
 
-                                        ""${errorColor}${reason}: ${posmsg}${resetcolor}""
+                                        "${errorColor}${reason}: ${posmsg}${resetcolor}"
                                     }
 
                                     $myinv = $_.InvocationInfo
@@ -1281,69 +1349,84 @@ function Get-ConciseViewPositionMessage {
                                     }
 
                                     if ($err.FullyQualifiedErrorId -eq 'NativeCommandErrorMessage' -or $err.FullyQualifiedErrorId -eq 'NativeCommandError') {
-                                        $err.Exception.Message
+                                        return "${errorColor}$($err.Exception.Message)${resetcolor}"
                                     }
-                                    else
-                                    {
-                                        $myinv = $err.InvocationInfo
-                                        if ($ErrorView -eq 'ConciseView') {
-                                            $posmsg = Get-ConciseViewPositionMessage
-                                        }
-                                        elseif ($myinv -and ($myinv.MyCommand -or ($err.CategoryInfo.Category -ne 'ParserError'))) {
-                                            $posmsg = $myinv.PositionMessage
-                                        } else {
-                                            $posmsg = ''
-                                        }
 
-                                        if ($posmsg -ne '')
-                                        {
+                                    if ($ErrorView -eq 'DetailedView') {
+                                        $message = Get-Error | Out-String
+                                        return "${errorColor}${message}${resetcolor}"
+                                    }
+
+                                    if ($ErrorView -eq 'CategoryView') {
+                                        $message = $err.CategoryInfo.GetMessage()
+                                        return "${errorColor}${message}${resetcolor}"
+                                    }
+
+                                    $posmsg = ''
+                                    if ($ErrorView -eq 'ConciseView') {
+                                        $posmsg = Get-ConciseViewPositionMessage
+                                    }
+                                    elseif ($myinv -and ($myinv.MyCommand -or ($err.CategoryInfo.Category -ne 'ParserError'))) {
+                                        $posmsg = $myinv.PositionMessage
+                                        if ($posmsg -ne '') {
                                             $posmsg = $newline + $posmsg
                                         }
+                                    }
 
-                                        if ($err.PSMessageDetails) {
-                                            $posmsg = ' : ' +  $err.PSMessageDetails + $posmsg
+                                    if ($err.PSMessageDetails) {
+                                        $posmsg = ' : ' +  $err.PSMessageDetails + $posmsg
+                                    }
+
+                                    if ($ErrorView -eq 'ConciseView') {
+                                        $recommendedAction = $_.ErrorDetails.RecommendedAction
+                                        if (-not [String]::IsNullOrWhiteSpace($recommendedAction)) {
+                                            $recommendedAction = $newline +
+                                                ${errorColor} +
+                                                '  Recommendation: ' +
+                                                $recommendedAction +
+                                                ${resetcolor}
                                         }
 
-                                        if ($ErrorView -eq 'ConciseView') {
-                                            return $posmsg
+                                        if ($err.PSMessageDetails) {
+                                            $posmsg = "${errorColor}${posmsg}"
                                         }
+                                        return $posmsg + $recommendedAction
+                                    }
 
-                                        $indent = 4
+                                    $indent = 4
 
-                                        $errorCategoryMsg = $err.ErrorCategory_Message
+                                    $errorCategoryMsg = $err.ErrorCategory_Message
 
-                                        if ($null -ne $errorCategoryMsg)
-                                        {
-                                            $indentString = '+ CategoryInfo          : ' + $err.ErrorCategory_Message
-                                        }
-                                        else
-                                        {
-                                            $indentString = '+ CategoryInfo          : ' + $err.CategoryInfo
-                                        }
+                                    if ($null -ne $errorCategoryMsg)
+                                    {
+                                        $indentString = '+ CategoryInfo          : ' + $err.ErrorCategory_Message
+                                    }
+                                    else
+                                    {
+                                        $indentString = '+ CategoryInfo          : ' + $err.CategoryInfo
+                                    }
 
-                                        $posmsg += $newline + $indentString
+                                    $posmsg += $newline + $indentString
 
-                                        $indentString = ""+ FullyQualifiedErrorId : "" + $err.FullyQualifiedErrorId
-                                        $posmsg += $newline + $indentString
+                                    $indentString = "+ FullyQualifiedErrorId : " + $err.FullyQualifiedErrorId
+                                    $posmsg += $newline + $indentString
 
-                                        $originInfo = $err.OriginInfo
+                                    $originInfo = $err.OriginInfo
 
-                                        if (($null -ne $originInfo) -and ($null -ne $originInfo.PSComputerName))
-                                        {
-                                            $indentString = ""+ PSComputerName        : "" + $originInfo.PSComputerName
-                                            $posmsg += $newline + $indentString
-                                        }
+                                    if (($null -ne $originInfo) -and ($null -ne $originInfo.PSComputerName))
+                                    {
+                                        $indentString = "+ PSComputerName        : " + $originInfo.PSComputerName
+                                        $posmsg += $newline + $indentString
+                                    }
 
-                                        if ($ErrorView -eq 'CategoryView') {
-                                            $err.CategoryInfo.GetMessage()
-                                        }
-                                        elseif (! $err.ErrorDetails -or ! $err.ErrorDetails.Message) {
-                                            $err.Exception.Message + $posmsg
-                                        } else {
-                                            $err.ErrorDetails.Message + $posmsg
-                                        }
+                                    $finalMsg = if ($err.ErrorDetails.Message) {
+                                        $err.ErrorDetails.Message + $posmsg
+                                    } else {
+                                        $err.Exception.Message + $posmsg
                                     }
-                                ")
+
+                                    "${errorColor}${finalMsg}${resetcolor}"
+                                """)
                     .EndEntry()
                 .EndControl());
         }
@@ -1905,6 +1988,31 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Ma
                 .EndList());
         }
 
+        private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_TcpPortStatus()
+        {
+            yield return new FormatViewDefinition(
+                "Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatus",
+                TableControl.Create()
+                    .AddHeader(Alignment.Right, label: "Id", width: 4)
+                    .AddHeader(Alignment.Left, label: "Source", width: 16)
+                    .AddHeader(Alignment.Left, label: "Address", width: 25)
+                    .AddHeader(Alignment.Right, label: "Port", width: 7)
+                    .AddHeader(Alignment.Right, label: "Latency(ms)", width: 7)
+                    .AddHeader(Alignment.Left, label: "Connected", width: 10)
+                    .AddHeader(Alignment.Left, label: "Status", width: 24)
+                    .StartRowDefinition()
+                        .AddPropertyColumn("Id")
+                        .AddPropertyColumn("Source")
+                        .AddPropertyColumn("TargetAddress")
+                        .AddPropertyColumn("Port")
+                        .AddPropertyColumn("Latency")
+                        .AddPropertyColumn("Connected")
+                        .AddPropertyColumn("Status")
+                    .EndRowDefinition()
+                    .GroupByProperty("Target")
+                .EndTable());
+        }
+
         private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingStatus()
         {
             yield return new FormatViewDefinition(
@@ -2036,6 +2144,8 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                         .AddItemScriptBlock(@"""$($_.Blink)$($_.Blink.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "Blink")
                         .AddItemScriptBlock(@"""$($_.BoldOff)$($_.BoldOff.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "BoldOff")
                         .AddItemScriptBlock(@"""$($_.Bold)$($_.Bold.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "Bold")
+                        .AddItemScriptBlock(@"""$($_.DimOff)$($_.DimOff.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "DimOff")
+                        .AddItemScriptBlock(@"""$($_.Dim)$($_.Dim.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "Dim")
                         .AddItemScriptBlock(@"""$($_.Hidden)$($_.Hidden.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "Hidden")
                         .AddItemScriptBlock(@"""$($_.HiddenOff)$($_.HiddenOff.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "HiddenOff")
                         .AddItemScriptBlock(@"""$($_.Reverse)$($_.Reverse.Replace(""""`e"""",'`e'))$($_.Reset)""", label: "Reverse")
@@ -2053,42 +2163,51 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                         .AddItemScriptBlock(@"""$($_.Formatting.Warning)$($_.Formatting.Warning.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.Warning")
                         .AddItemScriptBlock(@"""$($_.Formatting.Verbose)$($_.Formatting.Verbose.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.Verbose")
                         .AddItemScriptBlock(@"""$($_.Formatting.Debug)$($_.Formatting.Debug.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.Debug")
+                        .AddItemScriptBlock(@"""$($_.Formatting.TableHeader)$($_.Formatting.TableHeader.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.TableHeader")
+                        .AddItemScriptBlock(@"""$($_.Formatting.CustomTableHeaderLabel)$($_.Formatting.CustomTableHeaderLabel.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.CustomTableHeaderLabel")
+                        .AddItemScriptBlock(@"""$($_.Formatting.FeedbackName)$($_.Formatting.FeedbackName.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.FeedbackName")
+                        .AddItemScriptBlock(@"""$($_.Formatting.FeedbackText)$($_.Formatting.FeedbackText.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.FeedbackText")
+                        .AddItemScriptBlock(@"""$($_.Formatting.FeedbackAction)$($_.Formatting.FeedbackAction.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.FeedbackAction")
                         .AddItemScriptBlock(@"""$($_.Progress.Style)$($_.Progress.Style.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Progress.Style")
                         .AddItemScriptBlock(@"""$($_.Progress.MaxWidth)""", label: "Progress.MaxWidth")
                         .AddItemScriptBlock(@"""$($_.Progress.View)""", label: "Progress.View")
                         .AddItemScriptBlock(@"""$($_.Progress.UseOSCIndicator)""", label: "Progress.UseOSCIndicator")
+                        .AddItemScriptBlock(@"""$($_.FileInfo.Directory)$($_.FileInfo.Directory.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FileInfo.Directory")
+                        .AddItemScriptBlock(@"""$($_.FileInfo.SymbolicLink)$($_.FileInfo.SymbolicLink.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FileInfo.SymbolicLink")
+                        .AddItemScriptBlock(@"""$($_.FileInfo.Executable)$($_.FileInfo.Executable.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FileInfo.Executable")
+                        .AddItemScriptBlock(@"""$([string]::Join(',',$_.FileInfo.Extension.Keys))""", label: "FileInfo.Extension")
                         .AddItemScriptBlock(@"""$($_.Foreground.Black)$($_.Foreground.Black.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Black")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightBlack)$($_.Foreground.BrightBlack.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightBlack")
                         .AddItemScriptBlock(@"""$($_.Foreground.White)$($_.Foreground.White.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.White")
-                        .AddItemScriptBlock(@"""$($_.Foreground.DarkGray)$($_.Foreground.DarkGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.DarkGray")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightGray)$($_.Foreground.LightGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightGray")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightWhite)$($_.Foreground.BrightWhite.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightWhite")
                         .AddItemScriptBlock(@"""$($_.Foreground.Red)$($_.Foreground.Red.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Red")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightRed)$($_.Foreground.LightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightRed")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightRed)$($_.Foreground.BrightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightRed")
                         .AddItemScriptBlock(@"""$($_.Foreground.Magenta)$($_.Foreground.Magenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Magenta")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightMagenta)$($_.Foreground.LightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightMagenta")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightMagenta)$($_.Foreground.BrightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightMagenta")
                         .AddItemScriptBlock(@"""$($_.Foreground.Blue)$($_.Foreground.Blue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Blue")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightBlue)$($_.Foreground.LightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightBlue")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightBlue)$($_.Foreground.BrightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightBlue")
                         .AddItemScriptBlock(@"""$($_.Foreground.Cyan)$($_.Foreground.Cyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Cyan")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightCyan)$($_.Foreground.LightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightCyan")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightCyan)$($_.Foreground.BrightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightCyan")
                         .AddItemScriptBlock(@"""$($_.Foreground.Green)$($_.Foreground.Green.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Green")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightGreen)$($_.Foreground.LightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightGreen")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightGreen)$($_.Foreground.BrightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightGreen")
                         .AddItemScriptBlock(@"""$($_.Foreground.Yellow)$($_.Foreground.Yellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.Yellow")
-                        .AddItemScriptBlock(@"""$($_.Foreground.LightYellow)$($_.Foreground.LightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.LightYellow")
+                        .AddItemScriptBlock(@"""$($_.Foreground.BrightYellow)$($_.Foreground.BrightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Foreground.BrightYellow")
                         .AddItemScriptBlock(@"""$($_.Background.Black)$($_.Background.Black.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Black")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightBlack)$($_.Background.BrightBlack.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightBlack")
                         .AddItemScriptBlock(@"""$($_.Background.White)$($_.Background.White.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.White")
-                        .AddItemScriptBlock(@"""$($_.Background.DarkGray)$($_.Background.DarkGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.DarkGray")
-                        .AddItemScriptBlock(@"""$($_.Background.LightGray)$($_.Background.LightGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightGray")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightWhite)$($_.Background.BrightWhite.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightWhite")
                         .AddItemScriptBlock(@"""$($_.Background.Red)$($_.Background.Red.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Red")
-                        .AddItemScriptBlock(@"""$($_.Background.LightRed)$($_.Background.LightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightRed")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightRed)$($_.Background.BrightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightRed")
                         .AddItemScriptBlock(@"""$($_.Background.Magenta)$($_.Background.Magenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Magenta")
-                        .AddItemScriptBlock(@"""$($_.Background.LightMagenta)$($_.Background.LightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightMagenta")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightMagenta)$($_.Background.BrightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightMagenta")
                         .AddItemScriptBlock(@"""$($_.Background.Blue)$($_.Background.Blue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Blue")
-                        .AddItemScriptBlock(@"""$($_.Background.LightBlue)$($_.Background.LightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightBlue")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightBlue)$($_.Background.BrightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightBlue")
                         .AddItemScriptBlock(@"""$($_.Background.Cyan)$($_.Background.Cyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Cyan")
-                        .AddItemScriptBlock(@"""$($_.Background.LightCyan)$($_.Background.LightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightCyan")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightCyan)$($_.Background.BrightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightCyan")
                         .AddItemScriptBlock(@"""$($_.Background.Green)$($_.Background.Green.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Green")
-                        .AddItemScriptBlock(@"""$($_.Background.LightGreen)$($_.Background.LightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightGreen")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightGreen)$($_.Background.BrightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightGreen")
                         .AddItemScriptBlock(@"""$($_.Background.Yellow)$($_.Background.Yellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.Yellow")
-                        .AddItemScriptBlock(@"""$($_.Background.LightYellow)$($_.Background.LightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.LightYellow")
+                        .AddItemScriptBlock(@"""$($_.Background.BrightYellow)$($_.Background.BrightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Background.BrightYellow")
                         .EndEntry()
                 .EndList());
         }
@@ -2102,8 +2221,13 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                         .AddItemScriptBlock(@"""$($_.ErrorAccent)$($_.ErrorAccent.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "ErrorAccent")
                         .AddItemScriptBlock(@"""$($_.Error)$($_.Error.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Error")
                         .AddItemScriptBlock(@"""$($_.Warning)$($_.Warning.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Warning")
-                        .AddItemScriptBlock(@"""$($_.Verbose)$($_.Verbose.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Formatting.Verbose")
+                        .AddItemScriptBlock(@"""$($_.Verbose)$($_.Verbose.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Verbose")
                         .AddItemScriptBlock(@"""$($_.Debug)$($_.Debug.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Debug")
+                        .AddItemScriptBlock(@"""$($_.TableHeader)$($_.TableHeader.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "TableHeader")
+                        .AddItemScriptBlock(@"""$($_.CustomTableHeaderLabel)$($_.CustomTableHeaderLabel.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "CustomTableHeaderLabel")
+                        .AddItemScriptBlock(@"""$($_.FeedbackName)$($_.FeedbackName.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FeedbackName")
+                        .AddItemScriptBlock(@"""$($_.FeedbackText)$($_.FeedbackText.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FeedbackText")
+                        .AddItemScriptBlock(@"""$($_.FeedbackAction)$($_.FeedbackAction.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "FeedbackAction")
                     .EndEntry()
                 .EndList());
         }
@@ -2121,52 +2245,85 @@ private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Autom
                 .EndList());
         }
 
+        private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSStyleFileInfoFormat()
+        {
+            yield return new FormatViewDefinition("System.Management.Automation.PSStyle+FileInfoFormatting",
+                ListControl.Create()
+                    .StartEntry()
+                        .AddItemScriptBlock(@"""$($_.Directory)$($_.Directory.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Directory")
+                        .AddItemScriptBlock(@"""$($_.SymbolicLink)$($_.SymbolicLink.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "SymbolicLink")
+                        .AddItemScriptBlock(@"""$($_.Executable)$($_.Executable.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Executable")
+                        .AddItemScriptBlock(@"
+                            $sb = [System.Text.StringBuilder]::new()
+                            $maxKeyLength = 0
+                            foreach ($key in $_.Extension.Keys) {
+                                if ($key.Length -gt $maxKeyLength) {
+                                    $maxKeyLength = $key.Length
+                                }
+                            }
+
+                            foreach ($key in $_.Extension.Keys) {
+                                $null = $sb.Append($key.PadRight($maxKeyLength))
+                                $null = $sb.Append(' = ""')
+                                $null = $sb.Append($_.Extension[$key])
+                                $null = $sb.Append($_.Extension[$key].Replace(""`e"",'`e'))
+                                $null = $sb.Append($PSStyle.Reset)
+                                $null = $sb.Append('""')
+                                $null = $sb.Append([Environment]::NewLine)
+                            }
+
+                            $sb.ToString()",
+                            label: "Extension")
+                    .EndEntry()
+                .EndList());
+        }
+
         private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSStyleForegroundColor()
         {
             yield return new FormatViewDefinition("System.Management.Automation.PSStyle+ForegroundColor",
                 ListControl.Create()
                     .StartEntry()
                         .AddItemScriptBlock(@"""$($_.Black)$($_.Black.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Black")
+                        .AddItemScriptBlock(@"""$($_.BrightBlack)$($_.BrightBlack.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightBlack")
                         .AddItemScriptBlock(@"""$($_.White)$($_.White.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "White")
-                        .AddItemScriptBlock(@"""$($_.DarkGray)$($_.DarkGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "DarkGray")
-                        .AddItemScriptBlock(@"""$($_.LightGray)$($_.LightGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightGray")
+                        .AddItemScriptBlock(@"""$($_.BrightWhite)$($_.BrightWhite.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightWhite")
                         .AddItemScriptBlock(@"""$($_.Red)$($_.Red.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Red")
-                        .AddItemScriptBlock(@"""$($_.LightRed)$($_.LightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightRed")
+                        .AddItemScriptBlock(@"""$($_.BrightRed)$($_.BrightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightRed")
                         .AddItemScriptBlock(@"""$($_.Magenta)$($_.Magenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Magenta")
-                        .AddItemScriptBlock(@"""$($_.LightMagenta)$($_.LightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightMagenta")
+                        .AddItemScriptBlock(@"""$($_.BrightMagenta)$($_.BrightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightMagenta")
                         .AddItemScriptBlock(@"""$($_.Blue)$($_.Blue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Blue")
-                        .AddItemScriptBlock(@"""$($_.LightBlue)$($_.LightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightBlue")
+                        .AddItemScriptBlock(@"""$($_.BrightBlue)$($_.BrightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightBlue")
                         .AddItemScriptBlock(@"""$($_.Cyan)$($_.Cyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Cyan")
-                        .AddItemScriptBlock(@"""$($_.LightCyan)$($_.LightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightCyan")
+                        .AddItemScriptBlock(@"""$($_.BrightCyan)$($_.BrightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightCyan")
                         .AddItemScriptBlock(@"""$($_.Green)$($_.Green.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Green")
-                        .AddItemScriptBlock(@"""$($_.LightGreen)$($_.LightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightGreen")
+                        .AddItemScriptBlock(@"""$($_.BrightGreen)$($_.BrightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightGreen")
                         .AddItemScriptBlock(@"""$($_.Yellow)$($_.Yellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Yellow")
-                        .AddItemScriptBlock(@"""$($_.LightYellow)$($_.LightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightYellow")
+                        .AddItemScriptBlock(@"""$($_.BrightYellow)$($_.BrightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightYellow")
                     .EndEntry()
                 .EndList());
         }
 
         private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSStyleBackgroundColor()
         {
-            yield return new FormatViewDefinition("System.Management.Automation.PSStyle+ForegroundColor",
+            yield return new FormatViewDefinition("System.Management.Automation.PSStyle+BackgroundColor",
                 ListControl.Create()
                     .StartEntry()
                         .AddItemScriptBlock(@"""$($_.Black)$($_.Black.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Black")
+                        .AddItemScriptBlock(@"""$($_.BrightBlack)$($_.BrightBlack.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightBlack")
                         .AddItemScriptBlock(@"""$($_.White)$($_.White.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "White")
-                        .AddItemScriptBlock(@"""$($_.DarkGray)$($_.DarkGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "DarkGray")
-                        .AddItemScriptBlock(@"""$($_.LightGray)$($_.LightGray.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightGray")
+                        .AddItemScriptBlock(@"""$($_.BrightWhite)$($_.BrightWhite.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightWhite")
                         .AddItemScriptBlock(@"""$($_.Red)$($_.Red.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Red")
-                        .AddItemScriptBlock(@"""$($_.LightRed)$($_.LightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightRed")
+                        .AddItemScriptBlock(@"""$($_.BrightRed)$($_.BrightRed.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightRed")
                         .AddItemScriptBlock(@"""$($_.Magenta)$($_.Magenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Magenta")
-                        .AddItemScriptBlock(@"""$($_.LightMagenta)$($_.LightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightMagenta")
+                        .AddItemScriptBlock(@"""$($_.BrightMagenta)$($_.BrightMagenta.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightMagenta")
                         .AddItemScriptBlock(@"""$($_.Blue)$($_.Blue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Blue")
-                        .AddItemScriptBlock(@"""$($_.LightBlue)$($_.LightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightBlue")
+                        .AddItemScriptBlock(@"""$($_.BrightBlue)$($_.BrightBlue.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightBlue")
                         .AddItemScriptBlock(@"""$($_.Cyan)$($_.Cyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Cyan")
-                        .AddItemScriptBlock(@"""$($_.LightCyan)$($_.LightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightCyan")
+                        .AddItemScriptBlock(@"""$($_.BrightCyan)$($_.BrightCyan.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightCyan")
                         .AddItemScriptBlock(@"""$($_.Green)$($_.Green.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Green")
-                        .AddItemScriptBlock(@"""$($_.LightGreen)$($_.LightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightGreen")
+                        .AddItemScriptBlock(@"""$($_.BrightGreen)$($_.BrightGreen.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightGreen")
                         .AddItemScriptBlock(@"""$($_.Yellow)$($_.Yellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "Yellow")
-                        .AddItemScriptBlock(@"""$($_.LightYellow)$($_.LightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "LightYellow")
+                        .AddItemScriptBlock(@"""$($_.BrightYellow)$($_.BrightYellow.Replace(""""`e"""",'`e'))$($PSStyle.Reset)""", label: "BrightYellow")
                     .EndEntry()
                 .EndList());
         }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs
index dcfb79d4aed..e59cae40146 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/BaseCommand.cs
@@ -22,6 +22,7 @@ internal TerminatingErrorContext(PSCmdlet command)
             _command = command;
         }
 
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         internal void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             _command.ThrowTerminatingError(errorRecord);
diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs
index 18b74cbcfe1..be31a1db9a8 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommand.cs
@@ -9,6 +9,7 @@
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Runspaces;
+using Microsoft.PowerShell.Commands;
 
 namespace Microsoft.PowerShell.Commands.Internal.Format
 {
@@ -727,8 +728,15 @@ public class OuterFormatTableAndListBase : OuterFormatShapeCommandBase
         /// will be determined using property sets, etc.
         /// </summary>
         [Parameter(Position = 0)]
+        [ValidateNotNullOrEmpty]
         public object[] Property { get; set; }
 
+        /// <summary>
+        /// Optional parameter for excluding properties from formatting.
+        /// </summary>
+        [Parameter]
+        public string[] ExcludeProperty { get; set; }
+
         #endregion
 
         internal override FormattingCommandLineParameters GetCommandLineParameters()
@@ -751,6 +759,18 @@ internal override FormattingCommandLineParameters GetCommandLineParameters()
 
         internal void GetCommandLineProperties(FormattingCommandLineParameters parameters, bool isTable)
         {
+            // Check View conflicts first (before any auto-expansion)
+            if (!string.IsNullOrEmpty(this.View))
+            {
+                // View cannot be used with Property or ExcludeProperty
+                if ((Property is not null && Property.Length != 0) || (ExcludeProperty is not null && ExcludeProperty.Length != 0))
+                {
+                    ReportCannotSpecifyViewAndProperty();
+                }
+
+                parameters.viewName = this.View;
+            }
+
             if (Property != null)
             {
                 CommandParameterDefinition def;
@@ -765,15 +785,21 @@ internal void GetCommandLineProperties(FormattingCommandLineParameters parameter
                 parameters.mshParameterList = processor.ProcessParameters(Property, invocationContext);
             }
 
-            if (!string.IsNullOrEmpty(this.View))
+            if (ExcludeProperty is not null)
             {
-                // we have a view command line switch
-                if (parameters.mshParameterList.Count != 0)
+                parameters.excludePropertyFilter = new PSPropertyExpressionFilter(ExcludeProperty);
+
+                // ExcludeProperty implies -Property * for better UX
+                if (Property is null || Property.Length == 0)
                 {
-                    ReportCannotSpecifyViewAndProperty();
-                }
+                    CommandParameterDefinition def = isTable
+                        ? new FormatTableParameterDefinition()
+                        : new FormatListParameterDefinition();
+                    ParameterProcessor processor = new ParameterProcessor(def);
+                    TerminatingErrorContext invocationContext = new TerminatingErrorContext(this);
 
-                parameters.viewName = this.View;
+                    parameters.mshParameterList = processor.ProcessParameters(new object[] { "*" }, invocationContext);
+                }
             }
         }
     }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs
index 95c58353457..498f6098a24 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/BaseFormattingCommandParameters.cs
@@ -70,6 +70,11 @@ internal sealed class FormattingCommandLineParameters
         /// Extension mechanism for shape specific parameters.
         /// </summary>
         internal ShapeSpecificParameters shapeParameters = null;
+
+        /// <summary>
+        /// Filter for excluding properties from formatting.
+        /// </summary>
+        internal PSPropertyExpressionFilter excludePropertyFilter = null;
     }
 
     /// <summary>
@@ -176,15 +181,13 @@ internal override object Verify(object val,
 
             // need to check the type:
             // it can be a string or a script block
-            ScriptBlock sb = val as ScriptBlock;
-            if (sb != null)
+            if (val is ScriptBlock sb)
             {
                 PSPropertyExpression ex = new PSPropertyExpression(sb);
                 return ex;
             }
 
-            string s = val as string;
-            if (s != null)
+            if (val is string s)
             {
                 if (string.IsNullOrEmpty(s))
                 {
diff --git a/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs b/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs
index 48ab1307681..113acf3fa6a 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/BaseOutputtingCommand.cs
@@ -3,7 +3,6 @@
 
 using System;
 using System.Collections.Generic;
-using System.Collections.Specialized;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 
@@ -129,15 +128,10 @@ private bool ProcessObject(PSObject so)
             }
 
             // instantiate the cache if not done yet
-            if (_cache == null)
-            {
-                _cache = new FormattedObjectsCache(this.LineOutput.RequiresBuffering);
-            }
+            _cache ??= new FormattedObjectsCache(this.LineOutput.RequiresBuffering);
 
             // no need for formatting, just process the object
-            FormatStartData formatStart = o as FormatStartData;
-
-            if (formatStart != null)
+            if (o is FormatStartData formatStart)
             {
                 // get autosize flag from object
                 // turn on group caching
@@ -149,8 +143,7 @@ private bool ProcessObject(PSObject so)
                 else
                 {
                     // If the format info doesn't define column widths, then auto-size based on the first ten elements
-                    TableHeaderInfo headerInfo = formatStart.shapeInfo as TableHeaderInfo;
-                    if ((headerInfo != null) &&
+                    if ((formatStart.shapeInfo is TableHeaderInfo headerInfo) &&
                         (headerInfo.tableColumnInfoList.Count > 0) &&
                         (headerInfo.tableColumnInfoList[0].width == 0))
                     {
@@ -262,8 +255,7 @@ private enum PreprocessingState { raw, processed, error }
         /// <returns>Whether the object needs to be shunted to preprocessing.</returns>
         private bool NeedsPreprocessing(object o)
         {
-            FormatEntryData fed = o as FormatEntryData;
-            if (fed != null)
+            if (o is FormatEntryData fed)
             {
                 // we got an already pre-processed object
                 if (!fed.outOfBand)
@@ -326,8 +318,7 @@ private void ValidateCurrentFormattingState(FormattingState expectedFormattingSt
                 // need to abort the command
 
                 string violatingCommand = "format-*";
-                StartData sdObj = obj as StartData;
-                if (sdObj != null)
+                if (obj is StartData sdObj)
                 {
                     if (sdObj.shapeInfo is WideViewHeaderInfo)
                     {
@@ -387,18 +378,16 @@ private FormatMessagesContextManager.OutputContext CreateOutputContext(
                                         FormatMessagesContextManager.OutputContext parentContext,
                                         FormatInfoData formatInfoData)
         {
-            FormatStartData formatStartData = formatInfoData as FormatStartData;
             // initialize the format context
-            if (formatStartData != null)
+            if (formatInfoData is FormatStartData formatStartData)
             {
                 FormatOutputContext foc = new FormatOutputContext(parentContext, formatStartData);
 
                 return foc;
             }
 
-            GroupStartData gsd = formatInfoData as GroupStartData;
             // we are starting a group, initialize the group context
-            if (gsd != null)
+            if (formatInfoData is GroupStartData gsd)
             {
                 GroupOutputContext goc = null;
 
@@ -460,9 +449,16 @@ private void ProcessFormatStart(FormatMessagesContextManager.OutputContext c)
         /// <param name="c">Current context, with Fs in it.</param>
         private void ProcessFormatEnd(FormatEndData fe, FormatMessagesContextManager.OutputContext c)
         {
-            // Console.WriteLine("ProcessFormatEnd");
-            // we just add an empty line to the display
-            this.LineOutput.WriteLine(string.Empty);
+            if (c is FormatOutputContext foContext
+                && foContext.Data.shapeInfo is ListViewHeaderInfo)
+            {
+                // Skip writing out a new line for List view, because we already wrote out
+                // an extra new line after displaying the last list entry.
+                return;
+            }
+
+            // We just add an empty line to the display.
+            LineOutput.WriteLine(string.Empty);
         }
 
         /// <summary>
@@ -541,8 +537,7 @@ private void ProcessPayload(FormatEntryData fed, FormatMessagesContextManager.Ou
         private void ProcessOutOfBandPayload(FormatEntryData fed)
         {
             // try if it is raw text
-            RawTextFormatEntry rte = fed.formatEntryInfo as RawTextFormatEntry;
-            if (rte != null)
+            if (fed.formatEntryInfo is RawTextFormatEntry rte)
             {
                 if (fed.isHelpObject)
                 {
@@ -553,15 +548,15 @@ private void ProcessOutOfBandPayload(FormatEntryData fed)
                 }
                 else
                 {
-                    _lo.WriteLine(rte.text);
+                    // Write out raw text without any changes to it.
+                    _lo.WriteRawText(rte.text);
                 }
 
                 return;
             }
 
             // try if it is a complex entry
-            ComplexViewEntry cve = fed.formatEntryInfo as ComplexViewEntry;
-            if (cve != null && cve.formatValueList != null)
+            if (fed.formatEntryInfo is ComplexViewEntry cve && cve.formatValueList != null)
             {
                 ComplexWriter complexWriter = new ComplexWriter();
 
@@ -571,8 +566,7 @@ private void ProcessOutOfBandPayload(FormatEntryData fed)
                 return;
             }
             // try if it is a list view
-            ListViewEntry lve = fed.formatEntryInfo as ListViewEntry;
-            if (lve != null && lve.listViewFieldList != null)
+            if (fed.formatEntryInfo is ListViewEntry lve && lve.listViewFieldList != null)
             {
                 ListWriter listWriter = new ListWriter();
 
@@ -624,9 +618,7 @@ private FormatOutputContext FormatContext
             {
                 for (FormatMessagesContextManager.OutputContext oc = _ctxManager.ActiveOutputContext; oc != null; oc = oc.ParentContext)
                 {
-                    FormatOutputContext foc = oc as FormatOutputContext;
-
-                    if (foc != null)
+                    if (oc is FormatOutputContext foc)
                         return foc;
                 }
 
@@ -651,17 +643,13 @@ private void ProcessCachedGroup(FormatStartData formatStartData, List<PacketInfo
         {
             _formattingHint = null;
 
-            TableHeaderInfo thi = formatStartData.shapeInfo as TableHeaderInfo;
-
-            if (thi != null)
+            if (formatStartData.shapeInfo is TableHeaderInfo thi)
             {
                 ProcessCachedGroupOnTable(thi, objects);
                 return;
             }
 
-            WideViewHeaderInfo wvhi = formatStartData.shapeInfo as WideViewHeaderInfo;
-
-            if (wvhi != null)
+            if (formatStartData.shapeInfo is WideViewHeaderInfo wvhi)
             {
                 ProcessCachedGroupOnWide(wvhi, objects);
                 return;
@@ -848,7 +836,7 @@ private FormattingHint RetrieveFormattingHint()
         /// <summary>
         /// Context for the outer scope of the format sequence.
         /// </summary>
-        private class FormatOutputContext : FormatMessagesContextManager.OutputContext
+        private sealed class FormatOutputContext : FormatMessagesContextManager.OutputContext
         {
             /// <summary>
             /// Construct a context to push on the stack.
@@ -978,11 +966,10 @@ internal TableOutputContext(OutCommandInner cmd,
             /// </summary>
             internal override void Initialize()
             {
-                TableFormattingHint tableHint = this.InnerCommand.RetrieveFormattingHint() as TableFormattingHint;
                 int[] columnWidthsHint = null;
-                // We expect that console width is less then 120.
+                // We expect that console width is less than 120.
 
-                if (tableHint != null)
+                if (this.InnerCommand.RetrieveFormattingHint() is TableFormattingHint tableHint)
                 {
                     columnWidthsHint = tableHint.columnWidths;
                 }
@@ -999,16 +986,18 @@ internal override void Initialize()
                 // create arrays for widths and alignment
                 Span<int> columnWidths = columns <= StackAllocThreshold ? stackalloc int[columns] : new int[columns];
                 Span<int> alignment = columns <= StackAllocThreshold ? stackalloc int[columns] : new int[columns];
+                Span<bool> headerMatchesProperty = columns <= StackAllocThreshold ? stackalloc bool[columns] : new bool[columns];
 
                 int k = 0;
                 foreach (TableColumnInfo tci in this.CurrentTableHeaderInfo.tableColumnInfoList)
                 {
                     columnWidths[k] = (columnWidthsHint != null) ? columnWidthsHint[k] : tci.width;
                     alignment[k] = tci.alignment;
+                    headerMatchesProperty[k] = tci.HeaderMatchesProperty;
                     k++;
                 }
 
-                this.Writer.Initialize(0, _consoleWidth, columnWidths, alignment, this.CurrentTableHeaderInfo.hideHeader);
+                this.Writer.Initialize(0, _consoleWidth, columnWidths, alignment, headerMatchesProperty, this.CurrentTableHeaderInfo.hideHeader);
             }
 
             /// <summary>
@@ -1117,33 +1106,40 @@ private void InternalInitialize(ListViewEntry lve)
 
             internal static string[] GetProperties(ListViewEntry lve)
             {
-                StringCollection props = new StringCollection();
-                foreach (ListViewField lvf in lve.listViewFieldList)
+                int count = lve.listViewFieldList.Count;
+
+                if (count == 0)
                 {
-                    props.Add(lvf.label ?? lvf.propertyName);
+                    return null;
                 }
 
-                if (props.Count == 0)
-                    return null;
-                string[] retVal = new string[props.Count];
-                props.CopyTo(retVal, 0);
-                return retVal;
+                string[] result = new string[count];
+                for (int index = 0; index < result.Length; ++index)
+                {
+                    ListViewField lvf = lve.listViewFieldList[index];
+                    result[index] = lvf.label ?? lvf.propertyName;
+                }
+
+                return result;
             }
 
             internal static string[] GetValues(ListViewEntry lve)
             {
-                StringCollection vals = new StringCollection();
+                int count = lve.listViewFieldList.Count;
 
-                foreach (ListViewField lvf in lve.listViewFieldList)
+                if (count == 0)
                 {
-                    vals.Add(lvf.formatPropertyField.propertyValue);
+                    return null;
                 }
 
-                if (vals.Count == 0)
-                    return null;
-                string[] retVal = new string[vals.Count];
-                vals.CopyTo(retVal, 0);
-                return retVal;
+                string[] result = new string[count];
+                for (int index = 0; index < result.Length; ++index)
+                {
+                    ListViewField lvf = lve.listViewFieldList[index];
+                    result[index] = lvf.formatPropertyField.propertyValue;
+                }
+
+                return result;
             }
 
             /// <summary>
@@ -1202,13 +1198,11 @@ internal override void Initialize()
                 // set the hard wider default, to be used if no other info is available
                 int itemsPerRow = 2;
 
-                // get the header info and the view hint
-                WideFormattingHint hint = this.InnerCommand.RetrieveFormattingHint() as WideFormattingHint;
-
+                // get the header info
                 int columnsOnTheScreen = GetConsoleWindowWidth(this.InnerCommand._lo.ColumnNumber);
 
                 // give a preference to the hint, if there
-                if (hint != null && hint.maxWidth > 0)
+                if (this.InnerCommand.RetrieveFormattingHint() is WideFormattingHint hint && hint.maxWidth > 0)
                 {
                     itemsPerRow = TableWriter.ComputeWideViewBestItemsPerRowFit(hint.maxWidth, columnsOnTheScreen);
                 }
@@ -1230,7 +1224,7 @@ internal override void Initialize()
                     alignment[k] = TextAlignment.Left;
                 }
 
-                this.Writer.Initialize(0, columnsOnTheScreen, columnWidths, alignment, false, GetConsoleWindowHeight(this.InnerCommand._lo.RowNumber));
+                this.Writer.Initialize(leftMarginIndent: 0, columnsOnTheScreen, columnWidths, alignment, headerMatchesProperty: null, suppressHeader: false, screenRows: GetConsoleWindowHeight(this.InnerCommand._lo.RowNumber));
             }
 
             /// <summary>
@@ -1296,7 +1290,7 @@ private void WriteStringBuffer()
             /// Helper class to accumulate the display values so that when the end
             /// of a line is reached, a full line can be composed.
             /// </summary>
-            private class StringValuesBuffer
+            private sealed class StringValuesBuffer
             {
                 /// <summary>
                 /// Construct the buffer.
@@ -1389,10 +1383,10 @@ internal override void Initialize()
             /// <param name="fed">FormatEntryData to process.</param>
             internal override void ProcessPayload(FormatEntryData fed)
             {
-                ComplexViewEntry cve = fed.formatEntryInfo as ComplexViewEntry;
-                if (cve == null || cve.formatValueList == null)
-                    return;
-                _writer.WriteObject(cve.formatValueList);
+                if (fed.formatEntryInfo is ComplexViewEntry cve && cve.formatValueList is not null)
+                {
+                    _writer.WriteObject(cve.formatValueList);
+                }
             }
 
             private readonly ComplexWriter _writer = new ComplexWriter();
diff --git a/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs
index e96115b78da..a69ad41c965 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/ComplexWriter.cs
@@ -6,6 +6,7 @@
 using System.Collections.ObjectModel;
 using System.Collections.Specialized;
 using System.Globalization;
+using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Text;
 
@@ -68,8 +69,7 @@ private void GenerateFormatEntryDisplay(FormatEntry fe, int currentDepth)
         {
             foreach (object obj in fe.formatValueList)
             {
-                FormatEntry feChild = obj as FormatEntry;
-                if (feChild != null)
+                if (obj is FormatEntry feChild)
                 {
                     if (currentDepth < maxRecursionDepth)
                     {
@@ -98,15 +98,13 @@ private void GenerateFormatEntryDisplay(FormatEntry fe, int currentDepth)
                     continue;
                 }
 
-                FormatTextField ftf = obj as FormatTextField;
-                if (ftf != null)
+                if (obj is FormatTextField ftf)
                 {
                     this.AddToBuffer(ftf.text);
                     continue;
                 }
 
-                FormatPropertyField fpf = obj as FormatPropertyField;
-                if (fpf != null)
+                if (obj is FormatPropertyField fpf)
                 {
                     this.AddToBuffer(fpf.propertyValue);
                 }
@@ -146,7 +144,7 @@ private void WriteToScreen()
             int indentationAbsoluteValue = (firstLineIndentation > 0) ? firstLineIndentation : -firstLineIndentation;
             if (indentationAbsoluteValue >= usefulWidth)
             {
-                // valu too big, we reset it to zero
+                // value too big, we reset it to zero
                 firstLineIndentation = 0;
             }
 
@@ -237,10 +235,7 @@ internal IndentationStackFrame(IndentationManager mgr)
 
             public void Dispose()
             {
-                if (_mgr != null)
-                {
-                    _mgr.RemoveStackFrame();
-                }
+                _mgr?.RemoveStackFrame();
             }
 
             private readonly IndentationManager _mgr;
@@ -321,6 +316,7 @@ internal struct GetWordsResult
     {
         internal string Word;
         internal string Delim;
+        internal bool VtResetAdded;
     }
 
     /// <summary>
@@ -328,9 +324,10 @@ internal struct GetWordsResult
     /// </summary>
     internal sealed class StringManipulationHelper
     {
-        private static readonly char s_softHyphen = '\u00AD';
-        private static readonly char s_hardHyphen = '\u2011';
-        private static readonly char s_nonBreakingSpace = '\u00A0';
+        private const char SoftHyphen = '\u00AD';
+        private const char HardHyphen = '\u2011';
+        private const char NonBreakingSpace = '\u00A0';
+
         private static readonly Collection<string> s_cultureCollection = new Collection<string>();
 
         static StringManipulationHelper()
@@ -353,27 +350,71 @@ static StringManipulationHelper()
         private static IEnumerable<GetWordsResult> GetWords(string s)
         {
             StringBuilder sb = new StringBuilder();
-            GetWordsResult result = new GetWordsResult();
+            StringBuilder vtSeqs = null;
+            Dictionary<int, int> vtRanges = null;
+
+            var valueStrDec = new ValueStringDecorated(s);
+            if (valueStrDec.IsDecorated)
+            {
+                vtSeqs = new StringBuilder();
+                vtRanges = valueStrDec.EscapeSequenceRanges;
+            }
 
+            bool wordHasVtSeqs = false;
             for (int i = 0; i < s.Length; i++)
             {
-                // Soft hyphen = \u00AD - Should break, and add a hyphen if needed. If not needed for a break, hyphen should be absent
-                if (s[i] == ' ' || s[i] == '\t' || s[i] == s_softHyphen)
+                if (vtRanges?.TryGetValue(i, out int len) == true)
                 {
-                    result.Word = sb.ToString();
-                    sb.Clear();
-                    result.Delim = new string(s[i], 1);
+                    var vtSpan = s.AsSpan(i, len);
+                    sb.Append(vtSpan);
 
-                    yield return result;
+                    if (vtSpan.SequenceEqual(PSStyle.Instance.Reset))
+                    {
+                        // The Reset sequence will void all previous VT sequences.
+                        vtSeqs.Clear();
+                        wordHasVtSeqs = false;
+                    }
+                    else
+                    {
+                        vtSeqs.Append(vtSpan);
+                        wordHasVtSeqs = true;
+                    }
+
+                    i += len - 1;
+                    continue;
                 }
-                // Non-breaking space = \u00A0 - ideally shouldn't wrap
-                // Hard hyphen = \u2011 - Should not break
-                else if (s[i] == s_hardHyphen || s[i] == s_nonBreakingSpace)
+
+                string delimiter = null;
+                if (s[i] is ' ' or '\t' or SoftHyphen)
                 {
-                    result.Word = sb.ToString();
-                    sb.Clear();
-                    result.Delim = string.Empty;
+                    // Soft hyphen = \u00AD - Should break, and add a hyphen if needed.
+                    // If not needed for a break, hyphen should be absent.
+                    delimiter = new string(s[i], 1);
+                }
+                else if (s[i] is HardHyphen or NonBreakingSpace)
+                {
+                    // Non-breaking space = \u00A0 - ideally shouldn't wrap.
+                    // Hard hyphen = \u2011 - Should not break.
+                    delimiter = string.Empty;
+                }
+
+                if (delimiter is not null)
+                {
+                    bool vtResetAdded = false;
+                    if (wordHasVtSeqs && !sb.EndsWith(PSStyle.Instance.Reset))
+                    {
+                        vtResetAdded = true;
+                        sb.Append(PSStyle.Instance.Reset);
+                    }
 
+                    var result = new GetWordsResult()
+                    {
+                        Word = sb.ToString(),
+                        Delim = delimiter,
+                        VtResetAdded = vtResetAdded
+                    };
+
+                    sb.Clear().Append(vtSeqs);
                     yield return result;
                 }
                 else
@@ -382,10 +423,23 @@ private static IEnumerable<GetWordsResult> GetWords(string s)
                 }
             }
 
-            result.Word = sb.ToString();
-            result.Delim = string.Empty;
+            if (wordHasVtSeqs)
+            {
+                if (sb.Length == vtSeqs.Length)
+                {
+                    // This indicates 'sb' only contains all VT sequences, which may happen when the string ends with a word delimiter.
+                    // For a word that contains VT sequence only, it's the same as an empty string to the formatting system,
+                    // because nothing will actually be rendered.
+                    // So, we use an empty string in this case to avoid unneeded string allocations.
+                    sb.Clear();
+                }
+                else if (!sb.EndsWith(PSStyle.Instance.Reset))
+                {
+                    sb.Append(PSStyle.Instance.Reset);
+                }
+            }
 
-            yield return result;
+            yield return new GetWordsResult() { Word = sb.ToString(), Delim = string.Empty };
         }
 
         internal static StringCollection GenerateLines(DisplayCells displayCells, string val, int firstLineLen, int followingLinesLen)
@@ -412,14 +466,16 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
             }
 
             // break string on newlines and process each line separately
-            string[] lines = SplitLines(val);
+            List<string> lines = SplitLines(val);
 
-            for (int k = 0; k < lines.Length; k++)
+            for (int k = 0; k < lines.Count; k++)
             {
-                if (lines[k] == null || displayCells.Length(lines[k]) <= firstLineLen)
+                string currentLine = lines[k];
+
+                if (currentLine == null || displayCells.Length(currentLine) <= firstLineLen)
                 {
                     // we do not need to split further, just add
-                    retVal.Add(lines[k]);
+                    retVal.Add(currentLine);
                     continue;
                 }
 
@@ -432,7 +488,7 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
 
                 int offset = 0; // offset into the line we are splitting
 
-                while (true)
+                while (offset < currentLine.Length)
                 {
                     // acquire the current active display line length (it can very from call to call)
                     int currentDisplayLen = accumulator.ActiveLen;
@@ -440,7 +496,7 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
                     // determine if the current tail would fit or not
 
                     // for the remaining part of the string, determine its display cell count
-                    int currentCellsToFit = displayCells.Length(lines[k], offset);
+                    int currentCellsToFit = displayCells.Length(currentLine, offset);
 
                     // determine if we fit into the line
                     int excessCells = currentCellsToFit - currentDisplayLen;
@@ -449,7 +505,7 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
                     {
                         // we are not at the end of the string, select a sub string
                         // that would fit in the remaining display length
-                        int charactersToAdd = displayCells.GetHeadSplitLength(lines[k], offset, currentDisplayLen);
+                        int charactersToAdd = displayCells.TruncateTail(currentLine, offset, currentDisplayLen);
 
                         if (charactersToAdd <= 0)
                         {
@@ -463,7 +519,7 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
                         else
                         {
                             // of the given length, add it to the accumulator
-                            accumulator.AddLine(lines[k].Substring(offset, charactersToAdd));
+                            accumulator.AddLine(currentLine.VtSubstring(offset, charactersToAdd));
                         }
 
                         // increase the offset by the # of characters added
@@ -472,7 +528,7 @@ private static StringCollection GenerateLinesWithoutWordWrap(DisplayCells displa
                     else
                     {
                         // we reached the last (partial) line, we add it all
-                        accumulator.AddLine(lines[k].Substring(offset));
+                        accumulator.AddLine(currentLine.VtSubstring(offset));
                         break;
                     }
                 }
@@ -528,9 +584,9 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
             }
 
             // break string on newlines and process each line separately
-            string[] lines = SplitLines(val);
+            List<string> lines = SplitLines(val);
 
-            for (int k = 0; k < lines.Length; k++)
+            for (int k = 0; k < lines.Count; k++)
             {
                 if (lines[k] == null || displayCells.Length(lines[k]) <= firstLineLen)
                 {
@@ -543,28 +599,34 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
                 int lineWidth = firstLineLen;
                 bool firstLine = true;
                 StringBuilder singleLine = new StringBuilder();
+                string resetStr = PSStyle.Instance.Reset;
 
                 foreach (GetWordsResult word in GetWords(lines[k]))
                 {
                     string wordToAdd = word.Word;
+                    string suffix = null;
 
                     // Handle soft hyphen
-                    if (word.Delim == s_softHyphen.ToString())
+                    if (word.Delim.Length == 1 && word.Delim[0] is SoftHyphen)
                     {
-                        int wordWidthWithHyphen = displayCells.Length(wordToAdd) + displayCells.Length(s_softHyphen.ToString());
+                        int wordWidthWithHyphen = displayCells.Length(wordToAdd) + displayCells.Length(SoftHyphen);
 
                         // Add hyphen only if necessary
                         if (wordWidthWithHyphen == spacesLeft)
                         {
-                            wordToAdd += "-";
+                            suffix = "-";
                         }
                     }
-                    else
+                    else if (!string.IsNullOrEmpty(word.Delim))
                     {
-                        if (!string.IsNullOrEmpty(word.Delim))
-                        {
-                            wordToAdd += word.Delim;
-                        }
+                        suffix = word.Delim;
+                    }
+
+                    if (suffix is not null)
+                    {
+                        wordToAdd = word.VtResetAdded
+                            ? wordToAdd.Insert(wordToAdd.Length - resetStr.Length, suffix)
+                            : wordToAdd + suffix;
                     }
 
                     int wordWidth = displayCells.Length(wordToAdd);
@@ -589,15 +651,35 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
                     // Word is wider than a single line
                     if (wordWidth > lineWidth)
                     {
-                        foreach (char c in wordToAdd)
+                        Dictionary<int, int> vtRanges = null;
+                        StringBuilder vtSeqs = null;
+
+                        var valueStrDec = new ValueStringDecorated(wordToAdd);
+                        if (valueStrDec.IsDecorated)
                         {
-                            char charToAdd = c;
-                            int charWidth = displayCells.Length(c);
+                            vtSeqs = new StringBuilder();
+                            vtRanges = valueStrDec.EscapeSequenceRanges;
+                        }
 
-                            // corner case: we have a two cell character and the current
-                            // display length is one.
-                            // add a single cell arbitrary character instead of the original
-                            // one and keep going
+                        bool hasEscSeqs = false;
+                        for (int i = 0; i < wordToAdd.Length; i++)
+                        {
+                            if (vtRanges?.TryGetValue(i, out int len) == true)
+                            {
+                                var vtSpan = wordToAdd.AsSpan(i, len);
+                                singleLine.Append(vtSpan);
+                                vtSeqs.Append(vtSpan);
+
+                                hasEscSeqs = true;
+                                i += len - 1;
+                                continue;
+                            }
+
+                            char charToAdd = wordToAdd[i];
+                            int charWidth = displayCells.Length(charToAdd);
+
+                            // Corner case: we have a two cell character and the current display length is one.
+                            // Add a single cell arbitrary character instead of the original one and keep going.
                             if (charWidth > lineWidth)
                             {
                                 charToAdd = '?';
@@ -606,9 +688,13 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
 
                             if (charWidth > spacesLeft)
                             {
+                                if (hasEscSeqs && !singleLine.EndsWith(resetStr))
+                                {
+                                    singleLine.Append(resetStr);
+                                }
+
                                 retVal.Add(singleLine.ToString());
-                                singleLine.Clear();
-                                singleLine.Append(charToAdd);
+                                singleLine.Clear().Append(vtSeqs).Append(charToAdd);
 
                                 if (firstLine)
                                 {
@@ -630,8 +716,7 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
                         if (wordWidth > spacesLeft)
                         {
                             retVal.Add(singleLine.ToString());
-                            singleLine.Clear();
-                            singleLine.Append(wordToAdd);
+                            singleLine.Clear().Append(wordToAdd);
 
                             if (firstLine)
                             {
@@ -661,49 +746,87 @@ private static StringCollection GenerateLinesWithWordWrap(DisplayCells displayCe
         /// </summary>
         /// <param name="s">String to split.</param>
         /// <returns>String array with the values.</returns>
-        internal static string[] SplitLines(string s)
+        internal static List<string> SplitLines(string s)
         {
-            if (string.IsNullOrEmpty(s))
-                return new string[1] { s };
+            if (string.IsNullOrEmpty(s) || !s.Contains('\n'))
+            {
+                return new List<string>(capacity: 1) { s?.Replace("\r", string.Empty) };
+            }
 
             StringBuilder sb = new StringBuilder();
+            List<string> list = new List<string>();
 
-            foreach (char c in s)
+            StringBuilder vtSeqs = null;
+            Dictionary<int, int> vtRanges = null;
+
+            var valueStrDec = new ValueStringDecorated(s);
+            if (valueStrDec.IsDecorated)
             {
-                if (c != '\r')
-                    sb.Append(c);
+                vtSeqs = new StringBuilder();
+                vtRanges = valueStrDec.EscapeSequenceRanges;
             }
 
-            return sb.ToString().Split(s_newLineChar);
-        }
-
-#if false
-        internal static string StripNewLines (string s)
-        {
-            if (string.IsNullOrEmpty (s))
-                return s;
+            bool hasVtSeqs = false;
+            for (int i = 0; i < s.Length; i++)
+            {
+                if (vtRanges?.TryGetValue(i, out int len) == true)
+                {
+                    var vtSpan = s.AsSpan(i, len);
+                    sb.Append(vtSpan);
 
-            string[] lines = SplitLines (s);
+                    if (vtSpan.SequenceEqual(PSStyle.Instance.Reset))
+                    {
+                        // The Reset sequence will void all previous VT sequences.
+                        vtSeqs.Clear();
+                        hasVtSeqs = false;
+                    }
+                    else
+                    {
+                        vtSeqs.Append(vtSpan);
+                        hasVtSeqs = true;
+                    }
 
-            if (lines.Length == 0)
-                return null;
+                    i += len - 1;
+                    continue;
+                }
 
-            if (lines.Length == 1)
-                return lines[0];
+                char c = s[i];
+                if (c == '\n')
+                {
+                    if (hasVtSeqs && !sb.EndsWith(PSStyle.Instance.Reset))
+                    {
+                        sb.Append(PSStyle.Instance.Reset);
+                    }
 
-            StringBuilder sb = new StringBuilder ();
+                    list.Add(sb.ToString());
+                    sb.Clear().Append(vtSeqs);
+                }
+                else if (c != '\r')
+                {
+                    sb.Append(c);
+                }
+            }
 
-            for (int k = 0; k < lines.Length; k++)
+            if (hasVtSeqs)
             {
-                if (k == 0)
-                    sb.Append (lines[k]);
-                else
-                    sb.Append (" " + lines[k]);
+                if (sb.Length == vtSeqs.Length)
+                {
+                    // This indicates 'sb' only contains all VT sequences, which may happen when the string ends with '\n'.
+                    // For a sub-string that contains VT sequence only, it's the same as an empty string to the formatting
+                    // system, because nothing will actually be rendered.
+                    // So, we use an empty string in this case to avoid unneeded string allocations.
+                    sb.Clear();
+                }
+                else if (!sb.EndsWith(PSStyle.Instance.Reset))
+                {
+                    sb.Append(PSStyle.Instance.Reset);
+                }
             }
 
-            return sb.ToString ();
+            list.Add(sb.ToString());
+            return list;
         }
-#endif
+
         internal static string TruncateAtNewLine(string s)
         {
             if (string.IsNullOrEmpty(s))
@@ -711,7 +834,7 @@ internal static string TruncateAtNewLine(string s)
                 return string.Empty;
             }
 
-            int lineBreak = s.IndexOfAny(s_lineBreakChars);
+            int lineBreak = s.AsSpan().IndexOfAny('\n', '\r');
 
             if (lineBreak < 0)
             {
@@ -725,8 +848,5 @@ internal static string PadLeft(string val, int count)
         {
             return StringUtil.Padding(count) + val;
         }
-
-        private static readonly char[] s_newLineChar = new char[] { '\n' };
-        private static readonly char[] s_lineBreakChars = new char[] { '\n', '\r' };
     }
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/FormatTable.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/FormatTable.cs
index 43cab48d003..2ae4ac2626e 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/FormatTable.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/FormatTable.cs
@@ -19,9 +19,8 @@ namespace System.Management.Automation.Runspaces
 {
     /// <summary>
     /// This exception is used by Formattable constructor to indicate errors
-    /// occured during construction time.
+    /// occurred during construction time.
     /// </summary>
-    [Serializable]
     [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "FormatTable")]
     public class FormatTableLoadException : RuntimeException
     {
@@ -70,7 +69,7 @@ public FormatTableLoadException(string message, Exception innerException)
         /// time.
         /// </summary>
         /// <param name="loadErrors">
-        /// The errors that occured
+        /// The errors that occurred.
         /// </param>
         internal FormatTableLoadException(ConcurrentBag<string> loadErrors)
             : base(StringUtil.Format(FormatAndOutXmlLoadingStrings.FormatTableLoadErrors))
@@ -84,55 +83,14 @@ internal FormatTableLoadException(ConcurrentBag<string> loadErrors)
         /// </summary>
         /// <param name="info"></param>
         /// <param name="context"></param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected FormatTableLoadException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            int errorCount = info.GetInt32("ErrorCount");
-            if (errorCount > 0)
-            {
-                _errors = new Collection<string>();
-                for (int index = 0; index < errorCount; index++)
-                {
-                    string key = string.Format(CultureInfo.InvariantCulture, "Error{0}", index);
-                    _errors.Add(info.GetString(key));
-                }
-            }
+            throw new NotSupportedException();
         }
 
         #endregion Constructors
 
-        /// <summary>
-        /// Serializes the exception data.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            // If there are simple fields, serialize them with info.AddValue
-            if (_errors != null)
-            {
-                int errorCount = _errors.Count;
-                info.AddValue("ErrorCount", errorCount);
-
-                for (int index = 0; index < errorCount; index++)
-                {
-                    string key = string.Format(CultureInfo.InvariantCulture, "Error{0}", index);
-                    info.AddValue(key, _errors[index]);
-                }
-            }
-        }
-
         /// <summary>
         /// Set the default ErrorRecord.
         /// </summary>
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/XmlLoaderBase.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/XmlLoaderBase.cs
index a7e7df0a5d7..9ebc79a762a 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/XmlLoaderBase.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/XmlLoaderBase.cs
@@ -384,14 +384,10 @@ private bool MatchNodeNameHelper(XmlNode n, string s, bool allowAttributes)
                 match = true;
             }
 
-            if (match && !allowAttributes)
+            if (match && !allowAttributes && n is XmlElement e && e.Attributes.Count > 0)
             {
-                XmlElement e = n as XmlElement;
-                if (e != null && e.Attributes.Count > 0)
-                {
-                    // Error at XPath {0} in file {1}: The XML Element {2} does not allow attributes.
-                    ReportError(StringUtil.Format(FormatAndOutXmlLoadingStrings.AttributesNotAllowed, ComputeCurrentXPath(), FilePath, n.Name));
-                }
+                // Error at XPath {0} in file {1}: The XML Element {2} does not allow attributes.
+                ReportError(StringUtil.Format(FormatAndOutXmlLoadingStrings.AttributesNotAllowed, ComputeCurrentXPath(), FilePath, n.Name));
             }
 
             return match;
@@ -600,8 +596,7 @@ protected string ComputeCurrentXPath()
                 path.Insert(0, "/");
                 if (sf.index != -1)
                 {
-                    path.Insert(1, string.Format(CultureInfo.InvariantCulture,
-                        "{0}[{1}]", sf.node.Name, sf.index + 1));
+                    path.Insert(1, string.Create(CultureInfo.InvariantCulture, $"{sf.node.Name}[{sf.index + 1}]"));
                 }
                 else
                 {
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs
index f126dddcadc..0190a31ddc9 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData.cs
@@ -361,6 +361,7 @@ internal sealed class FieldPropertyToken : PropertyTokenBase
     internal sealed class FieldFormattingDirective
     {
         internal string formatString = null; // optional
+        internal bool isTable = false;
     }
 
     #endregion Elementary Tokens
@@ -886,7 +887,7 @@ internal static EntrySelectedBy Get(List<TypeOrGroupReference> references)
                 {
                     if (tr.conditionToken != null)
                     {
-                        if (result.SelectionCondition == null) result.SelectionCondition = new List<DisplayEntry>();
+                        result.SelectionCondition ??= new List<DisplayEntry>();
 
                         result.SelectionCondition.Add(new DisplayEntry(tr.conditionToken));
                         continue;
@@ -895,7 +896,7 @@ internal static EntrySelectedBy Get(List<TypeOrGroupReference> references)
                     if (tr is TypeGroupReference)
                         continue;
 
-                    if (result.TypeNames == null) result.TypeNames = new List<string>();
+                    result.TypeNames ??= new List<string>();
 
                     result.TypeNames.Add(tr.name);
                 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs
index d3290c18752..822703fde21 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Complex.cs
@@ -179,14 +179,12 @@ internal static CustomItemBase Create(FormatToken token)
                 return new CustomItemNewline();
             }
 
-            var textToken = token as TextToken;
-            if (textToken != null)
+            if (token is TextToken textToken)
             {
                 return new CustomItemText { Text = textToken.text };
             }
 
-            var frameToken = token as FrameToken;
-            if (frameToken != null)
+            if (token is FrameToken frameToken)
             {
                 var frame = new CustomItemFrame
                 {
@@ -211,8 +209,7 @@ internal static CustomItemBase Create(FormatToken token)
                 return frame;
             }
 
-            var cpt = token as CompoundPropertyToken;
-            if (cpt != null)
+            if (token is CompoundPropertyToken cpt)
             {
                 var cie = new CustomItemExpression { EnumerateCollection = cpt.enumerateCollection };
 
@@ -226,19 +223,14 @@ internal static CustomItemBase Create(FormatToken token)
                     cie.Expression = new DisplayEntry(cpt.expression);
                 }
 
-                if (cpt.control != null)
+                if (cpt.control is ComplexControlBody complexControlBody)
                 {
-                    cie.CustomControl = new CustomControl((ComplexControlBody)cpt.control, null);
+                    cie.CustomControl = new CustomControl(complexControlBody, null);
                 }
 
                 return cie;
             }
 
-            var fpt = token as FieldPropertyToken;
-            if (fpt != null)
-            {
-            }
-
             Diagnostics.Assert(false, "Unexpected formatting token kind");
 
             return null;
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs
index 6025acfff44..293b4c5b82e 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_List.cs
@@ -208,8 +208,7 @@ public List<string> SelectedBy
         {
             get
             {
-                if (EntrySelectedBy == null)
-                    EntrySelectedBy = new EntrySelectedBy { TypeNames = new List<string>() };
+                EntrySelectedBy ??= new EntrySelectedBy { TypeNames = new List<string>() };
                 return EntrySelectedBy.TypeNames;
             }
         }
@@ -319,8 +318,7 @@ internal ListControlEntryItem(ListControlItemDefinition definition)
                 Label = definition.label.text;
             }
 
-            FieldPropertyToken fpt = definition.formatTokenList[0] as FieldPropertyToken;
-            if (fpt != null)
+            if (definition.formatTokenList[0] is FieldPropertyToken fpt)
             {
                 if (fpt.fieldFormattingDirective.formatString != null)
                 {
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs
index e509530538d..026b9b82f73 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Table.cs
@@ -446,10 +446,9 @@ internal TableControlRow(TableRowDefinition rowdefinition) : this()
 
             foreach (TableRowItemDefinition itemdef in rowdefinition.rowItemDefinitionList)
             {
-                FieldPropertyToken fpt = itemdef.formatTokenList[0] as FieldPropertyToken;
                 TableControlColumn column;
 
-                if (fpt != null)
+                if (itemdef.formatTokenList[0] is FieldPropertyToken fpt)
                 {
                     column = new TableControlColumn(fpt.expression.expressionValue, itemdef.alignment,
                                     fpt.expression.isScriptBlock, fpt.fieldFormattingDirective.formatString);
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Wide.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Wide.cs
index 4f87998fd1e..1f5b42fd262 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Wide.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayDescriptionData_Wide.cs
@@ -187,8 +187,7 @@ public List<string> SelectedBy
         {
             get
             {
-                if (EntrySelectedBy == null)
-                    EntrySelectedBy = new EntrySelectedBy { TypeNames = new List<string>() };
+                EntrySelectedBy ??= new EntrySelectedBy { TypeNames = new List<string>() };
                 return EntrySelectedBy.TypeNames;
             }
         }
@@ -205,8 +204,7 @@ internal WideControlEntryItem()
 
         internal WideControlEntryItem(WideControlEntryDefinition definition) : this()
         {
-            FieldPropertyToken fpt = definition.formatTokenList[0] as FieldPropertyToken;
-            if (fpt != null)
+            if (definition.formatTokenList[0] is FieldPropertyToken fpt)
             {
                 DisplayEntry = new DisplayEntry(fpt.expression);
                 FormatString = fpt.fieldFormattingDirective.formatString;
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs
index fbdd1287a02..b5eb4d456e8 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/displayResourceManagerCache.cs
@@ -142,7 +142,7 @@ private sealed class AssemblyLoadResult
         /// Helper class to resolve an assembly name to an assembly reference
         /// The class caches previous results for faster lookup.
         /// </summary>
-        private class AssemblyNameResolver
+        private sealed class AssemblyNameResolver
         {
             /// <summary>
             /// Resolve the assembly name against the set of loaded assemblies.
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs
index c42bd21adc7..629e419d5a2 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataManager.cs
@@ -409,7 +409,10 @@ private static TypeInfoDataBase LoadFromFileHelper(
                     continue;
                 }
 
-                if (etwEnabled) RunspaceEventSource.Log.ProcessFormatFileStart(file.FullPath);
+                if (etwEnabled)
+                {
+                    RunspaceEventSource.Log.ProcessFormatFileStart(file.FullPath);
+                }
 
                 if (!ProcessBuiltin(file, db, expressionFactory, logEntries, ref success))
                 {
@@ -428,7 +431,10 @@ private static TypeInfoDataBase LoadFromFileHelper(
                             {
                                 string mshsnapinMessage = StringUtil.Format(FormatAndOutXmlLoadingStrings.MshSnapinQualifiedError, info.psSnapinName, entry.message);
                                 info.errors.Add(mshsnapinMessage);
-                                if (entry.failToLoadFile) { file.FailToLoadFile = true; }
+                                if (entry.failToLoadFile)
+                                {
+                                    file.FailToLoadFile = true;
+                                }
                             }
                         }
                         // now aggregate the entries...
@@ -436,7 +442,10 @@ private static TypeInfoDataBase LoadFromFileHelper(
                     }
                 }
 
-                if (etwEnabled) RunspaceEventSource.Log.ProcessFormatFileStop(file.FullPath);
+                if (etwEnabled)
+                {
+                    RunspaceEventSource.Log.ProcessFormatFileStop(file.FullPath);
+                }
             }
 
             // add any sensible defaults to the database
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs
index 60953d22c26..de6df333951 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataQuery.cs
@@ -143,9 +143,8 @@ private int ComputeBestMatch(AppliesTo appliesTo, PSObject currentObject)
                 }
 
                 int currentMatch = BestMatchIndexUndefined;
-                TypeReference tr = r as TypeReference;
 
-                if (tr != null)
+                if (r is TypeReference tr)
                 {
                     // we have a type
                     currentMatch = MatchTypeIndex(tr.name, currentObject, ex);
@@ -486,18 +485,25 @@ private static void TraceHelper(ViewDefinition vd, bool isMatched)
                 foreach (TypeOrGroupReference togr in vd.appliesTo.referenceList)
                 {
                     StringBuilder sb = new StringBuilder();
-                    TypeReference tr = togr as TypeReference;
                     sb.Append(isMatched ? "MATCH FOUND" : "NOT MATCH");
-                    if (tr != null)
+                    if (togr is TypeReference tr)
                     {
-                        sb.AppendFormat(CultureInfo.InvariantCulture, " {0} NAME: {1}  TYPE: {2}",
-                            ControlBase.GetControlShapeName(vd.mainControl), vd.name, tr.name);
+                        sb.AppendFormat(
+                            CultureInfo.InvariantCulture,
+                            " {0} NAME: {1}  TYPE: {2}",
+                            ControlBase.GetControlShapeName(vd.mainControl),
+                            vd.name,
+                            tr.name);
                     }
                     else
                     {
                         TypeGroupReference tgr = togr as TypeGroupReference;
-                        sb.AppendFormat(CultureInfo.InvariantCulture, " {0} NAME: {1}  GROUP: {2}",
-                            ControlBase.GetControlShapeName(vd.mainControl), vd.name, tgr.name);
+                        sb.AppendFormat(
+                            CultureInfo.InvariantCulture,
+                            " {0} NAME: {1}  GROUP: {2}",
+                            ControlBase.GetControlShapeName(vd.mainControl),
+                            vd.name,
+                            tgr.name);
                     }
 
                     ActiveTracer.WriteLine(sb.ToString());
@@ -593,16 +599,14 @@ internal static AppliesTo GetAllApplicableTypes(TypeInfoDataBase db, AppliesTo a
             foreach (TypeOrGroupReference r in appliesTo.referenceList)
             {
                 // if it is a type reference, just add the type name
-                TypeReference tr = r as TypeReference;
-                if (tr != null)
+                if (r is TypeReference tr)
                 {
-                    if (!allTypes.Contains(tr.name))
-                        allTypes.Add(tr.name);
+                    allTypes.Add(tr.name);
                 }
                 else
                 {
                     // check if we have a type group reference
-                    if (!(r is TypeGroupReference tgr))
+                    if (r is not TypeGroupReference tgr)
                         continue;
 
                     // find the type group definition the reference points to
@@ -614,8 +618,7 @@ internal static AppliesTo GetAllApplicableTypes(TypeInfoDataBase db, AppliesTo a
                     // we found the group, go over it
                     foreach (TypeReference x in tgd.typeReferenceList)
                     {
-                        if (!allTypes.Contains(x.name))
-                            allTypes.Add(x.name);
+                        allTypes.Add(x.name);
                     }
                 }
             }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs
index 8c1c251f149..b8a25e5e207 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader.cs
@@ -277,7 +277,7 @@ internal bool LoadXmlFile(
         /// <param name="typeDefinition">The ExtendedTypeDefinition instance to load formatting data from.</param>
         /// <param name="db">Database instance to load the formatting data into.</param>
         /// <param name="expressionFactory">Expression factory to validate the script block.</param>
-        /// <param name="isBuiltInFormatData">Do we implicitly trust the script blocks (so they should run in full langauge mode)?</param>
+        /// <param name="isBuiltInFormatData">Do we implicitly trust the script blocks (so they should run in full language mode)?</param>
         /// <param name="isForHelp">True when the view is for help output.</param>
         /// <returns></returns>
         internal bool LoadFormattingData(
@@ -436,10 +436,13 @@ private void LoadData(ExtendedTypeDefinition typeDefinition, TypeInfoDataBase db
                 ViewDefinition view = LoadViewFromObjectModel(typeDefinition.TypeNames, formatView, viewIndex++);
                 if (view != null)
                 {
-                    ReportTrace(string.Format(CultureInfo.InvariantCulture,
+                    ReportTrace(string.Format(
+                        CultureInfo.InvariantCulture,
                         "{0} view {1} is loaded from the 'FormatViewDefinition' at index {2} in 'ExtendedTypeDefinition' with type name {3}",
                         ControlBase.GetControlShapeName(view.mainControl),
-                        view.name, viewIndex - 1, typeDefinition.TypeName));
+                        view.name,
+                        viewIndex - 1,
+                        typeDefinition.TypeName));
 
                     // we are fine, add the view to the list
                     db.viewDefinitionsSection.viewDefinitionList.Add(view);
@@ -1082,20 +1085,17 @@ private ComplexControlEntryDefinition LoadComplexControlEntryDefinitionFromObjec
 
         private FormatToken LoadFormatTokenFromObjectModel(CustomItemBase item, int viewIndex, string typeName)
         {
-            var newline = item as CustomItemNewline;
-            if (newline != null)
+            if (item is CustomItemNewline newline)
             {
                 return new NewLineToken { count = newline.Count };
             }
 
-            var text = item as CustomItemText;
-            if (text != null)
+            if (item is CustomItemText text)
             {
                 return new TextToken { text = text.Text };
             }
 
-            var expr = item as CustomItemExpression;
-            if (expr != null)
+            if (item is CustomItemExpression expr)
             {
                 var cpt = new CompoundPropertyToken { enumerateCollection = expr.EnumerateCollection };
 
@@ -1763,9 +1763,8 @@ private TextToken LoadTextToken(XmlNode n)
         private bool LoadStringResourceReference(XmlNode n, out StringResourceReference resource)
         {
             resource = null;
-            XmlElement e = n as XmlElement;
 
-            if (e == null)
+            if (n is not XmlElement e)
             {
                 // Error at XPath {0} in file {1}: Node should be an XmlElement.
                 this.ReportError(StringUtil.Format(FormatAndOutXmlLoadingStrings.NonXmlElementNode, ComputeCurrentXPath(), FilePath));
diff --git a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader_Views.cs b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader_Views.cs
index 505c766b9d1..c6d191284e6 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader_Views.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/DisplayDatabase/typeDataXmlLoader_Views.cs
@@ -27,10 +27,12 @@ private void LoadViewDefinitions(TypeInfoDataBase db, XmlNode viewDefinitionsNod
                         ViewDefinition view = LoadView(n, index++);
                         if (view != null)
                         {
-                            ReportTrace(string.Format(CultureInfo.InvariantCulture,
+                            ReportTrace(string.Format(
+                                CultureInfo.InvariantCulture,
                                 "{0} view {1} is loaded from file {2}",
                                 ControlBase.GetControlShapeName(view.mainControl),
-                                view.name, view.loadingInfo.filePath));
+                                view.name,
+                                view.loadingInfo.filePath));
                             // we are fine, add the view to the list
                             db.viewDefinitionsSection.viewDefinitionList.Add(view);
                         }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs
index 3eabcc975a0..1018936d2c1 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatMsgCtxManager.cs
@@ -68,8 +68,7 @@ internal OutputContext(OutputContext parentContextInStack)
         internal void Process(object o)
         {
             PacketInfoData formatData = o as PacketInfoData;
-            FormatEntryData fed = formatData as FormatEntryData;
-            if (fed != null)
+            if (formatData is FormatEntryData fed)
             {
                 OutputContext ctx = null;
 
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs
index f29033e3c8d..963b5a0f88b 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System.Collections.Generic;
+using System.Linq;
 using System.Collections.ObjectModel;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
@@ -141,13 +142,10 @@ private void InitializeAutoSize()
                 return;
             }
             // check if we have a view with autosize checked
-            if (this.dataBaseInfo.view != null && this.dataBaseInfo.view.mainControl != null)
+            if (this.dataBaseInfo.view != null && this.dataBaseInfo.view.mainControl != null
+                && this.dataBaseInfo.view.mainControl is ControlBody controlBody && controlBody.autosize.HasValue)
             {
-                ControlBody controlBody = this.dataBaseInfo.view.mainControl as ControlBody;
-                if (controlBody != null && controlBody.autosize.HasValue)
-                {
-                    _autosize = controlBody.autosize.Value;
-                }
+                _autosize = controlBody.autosize.Value;
             }
         }
 
@@ -219,7 +217,7 @@ internal GroupStartData GenerateGroupStartData(PSObject firstObjectInGroup, int
 
                 if (formatErrorObject != null && formatErrorObject.exception != null)
                 {
-                    // if we did no thave any errors in the expression evaluation
+                    // if we did not have any errors in the expression evaluation
                     // we might have errors in the formatting, if present
                     _errorManager.LogStringFormatError(formatErrorObject);
                     if (_errorManager.DisplayFormatErrorString)
@@ -350,8 +348,50 @@ protected class DataBaseInfo
 
         protected DataBaseInfo dataBaseInfo = new DataBaseInfo();
 
-        protected List<MshResolvedExpressionParameterAssociation> activeAssociationList = null;
-        protected FormattingCommandLineParameters inputParameters = null;
+        /// <summary>
+        /// Builds the raw association list for the given object.
+        /// Subclasses override this to provide cmdlet-specific property expansion logic.
+        /// </summary>
+        /// <param name="so">The object to build the association list for.</param>
+        /// <param name="propertyList">The list of properties specified by the user, or null if not specified.</param>
+        /// <returns>The raw association list, or null if not applicable.</returns>
+        protected virtual List<MshResolvedExpressionParameterAssociation> BuildRawAssociationList(PSObject so, List<MshParameter> propertyList)
+        {
+            return null;
+        }
+
+        /// <summary>
+        /// Builds the active association list for the given object, with ExcludeProperty filter applied.
+        /// </summary>
+        /// <param name="so">The object to build the association list for.</param>
+        /// <returns>The filtered association list.</returns>
+        protected List<MshResolvedExpressionParameterAssociation> BuildActiveAssociationList(PSObject so)
+        {
+            var propertyList = parameters?.mshParameterList;
+            var excludeFilter = parameters?.excludePropertyFilter;
+            var rawList = BuildRawAssociationList(so, propertyList);
+            return ApplyExcludeFilter(rawList, excludeFilter);
+        }
+
+        /// <summary>
+        /// Applies the ExcludeProperty filter to the given association list.
+        /// </summary>
+        /// <param name="associationList">The list to filter.</param>
+        /// <param name="excludeFilter">The exclude filter to apply.</param>
+        /// <returns>The filtered list, or the original list if no filter is specified.</returns>
+        internal static List<MshResolvedExpressionParameterAssociation> ApplyExcludeFilter(
+            List<MshResolvedExpressionParameterAssociation> associationList,
+            PSPropertyExpressionFilter excludeFilter)
+        {
+            if (associationList is null || excludeFilter is null)
+            {
+                return associationList;
+            }
+
+            return associationList
+                .Where(item => !excludeFilter.IsMatch(item.ResolvedExpression))
+                .ToList();
+        }
 
         protected string GetExpressionDisplayValue(PSObject so, int enumerationLimit, PSPropertyExpression ex,
                     FieldFormattingDirective directive)
@@ -387,7 +427,7 @@ protected string GetExpressionDisplayValue(PSObject so, int enumerationLimit, PS
                 }
                 else if (formatErrorObject != null && formatErrorObject.exception != null)
                 {
-                    // if we did no thave any errors in the expression evaluation
+                    // if we did not have any errors in the expression evaluation
                     // we might have errors in the formatting, if present
                     _errorManager.LogStringFormatError(formatErrorObject);
                     if (_errorManager.DisplayErrorStrings)
@@ -439,17 +479,14 @@ protected FormatPropertyField GenerateFormatPropertyField(List<FormatToken> form
             if (formatTokenList.Count != 0)
             {
                 FormatToken token = formatTokenList[0];
-                FieldPropertyToken fpt = token as FieldPropertyToken;
-                if (fpt != null)
+                if (token is FieldPropertyToken fpt)
                 {
                     PSPropertyExpression ex = this.expressionFactory.CreateFromExpressionToken(fpt.expression, this.dataBaseInfo.view.loadingInfo);
                     fpf.propertyValue = this.GetExpressionDisplayValue(so, enumerationLimit, ex, fpt.fieldFormattingDirective, out result);
                 }
-                else
+                else if (token is TextToken tt)
                 {
-                    TextToken tt = token as TextToken;
-                    if (tt != null)
-                        fpf.propertyValue = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
+                    fpf.propertyValue = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
                 }
             }
             else
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs
index c1645b09ad5..b81c0c0f860 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Complex.cs
@@ -16,7 +16,6 @@ internal override void Initialize(TerminatingErrorContext errorContext, PSProper
             PSObject so, TypeInfoDataBase db, FormattingCommandLineParameters parameters)
         {
             base.Initialize(errorContext, expressionFactory, so, db, parameters);
-            this.inputParameters = parameters;
         }
 
         internal override FormatStartData GenerateStartData(PSObject so)
@@ -40,7 +39,7 @@ internal override FormatEntryData GeneratePayload(PSObject so, int enumerationLi
         private ComplexViewEntry GenerateComplexViewEntryFromProperties(PSObject so, int enumerationLimit)
         {
             ComplexViewObjectBrowser browser = new ComplexViewObjectBrowser(this.ErrorManager, this.expressionFactory, enumerationLimit);
-            return browser.GenerateView(so, this.inputParameters);
+            return browser.GenerateView(so, this.parameters);
         }
 
         private ComplexViewEntry GenerateComplexViewEntryFromDataBaseInfo(PSObject so, int enumerationLimit)
@@ -107,8 +106,7 @@ private bool ExecuteFormatControl(TraversalInfo level, ControlBase control,
             ComplexControlBody complexBody = null;
 
             // we might have a reference
-            ControlReference controlReference = control as ControlReference;
-            if (controlReference != null && controlReference.controlType == typeof(ComplexControlBody))
+            if (control is ControlReference controlReference && controlReference.controlType == typeof(ComplexControlBody))
             {
                 // retrieve the reference
                 complexBody = DisplayDataQuery.ResolveControlReference(
@@ -205,8 +203,7 @@ private void ExecuteFormatTokenList(TraversalInfo level,
             #region foreach loop
             foreach (FormatToken t in formatTokenList)
             {
-                TextToken tt = t as TextToken;
-                if (tt != null)
+                if (t is TextToken tt)
                 {
                     FormatTextField ftf = new FormatTextField();
                     ftf.text = _db.displayResourceManagerCache.GetTextTokenString(tt);
@@ -214,8 +211,7 @@ private void ExecuteFormatTokenList(TraversalInfo level,
                     continue;
                 }
 
-                var newline = t as NewLineToken;
-                if (newline != null)
+                if (t is NewLineToken newline)
                 {
                     for (int i = 0; i < newline.count; i++)
                     {
@@ -225,8 +221,7 @@ private void ExecuteFormatTokenList(TraversalInfo level,
                     continue;
                 }
 
-                FrameToken ft = t as FrameToken;
-                if (ft != null)
+                if (t is FrameToken ft)
                 {
                     // instantiate a new entry and attach a frame info object
                     FormatEntry feFrame = new FormatEntry();
@@ -245,8 +240,7 @@ private void ExecuteFormatTokenList(TraversalInfo level,
                     continue;
                 }
                 #region CompoundPropertyToken
-                CompoundPropertyToken cpt = t as CompoundPropertyToken;
-                if (cpt != null)
+                if (t is CompoundPropertyToken cpt)
                 {
                     if (!EvaluateDisplayCondition(so, cpt.conditionToken))
                     {
@@ -283,10 +277,7 @@ private void ExecuteFormatTokenList(TraversalInfo level,
                     {
                         // Since it is a leaf node we just consider it an empty string and go
                         // on with formatting
-                        if (val == null)
-                        {
-                            val = string.Empty;
-                        }
+                        val ??= string.Empty;
 
                         FieldFormattingDirective fieldFormattingDirective = null;
                         StringFormatError formatErrorObject = null;
@@ -433,17 +424,18 @@ internal ComplexViewObjectBrowser(FormatErrorManager resultErrorManager, PSPrope
         /// of the object.
         /// </summary>
         /// <param name="so">Object to process.</param>
-        /// <param name="inputParameters">Parameters from the command line.</param>
+        /// <param name="parameters">Parameters from the command line.</param>
         /// <returns>Complex view entry to send to the output command.</returns>
-        internal ComplexViewEntry GenerateView(PSObject so, FormattingCommandLineParameters inputParameters)
+        internal ComplexViewEntry GenerateView(PSObject so, FormattingCommandLineParameters parameters)
         {
-            _complexSpecificParameters = (ComplexSpecificParameters)inputParameters.shapeParameters;
+            _parameters = parameters;
+            _complexSpecificParameters = (ComplexSpecificParameters)parameters.shapeParameters;
 
             int maxDepth = _complexSpecificParameters.maxDepth;
             TraversalInfo level = new TraversalInfo(0, maxDepth);
 
             List<MshParameter> mshParameterList = null;
-            mshParameterList = inputParameters.mshParameterList;
+            mshParameterList = parameters.mshParameterList;
 
             // create a top level entry as root of the tree
             ComplexViewEntry cve = new ComplexViewEntry();
@@ -494,7 +486,7 @@ private void DisplayRawObject(PSObject so, List<FormatValue> formatValueList)
 
             if (formatErrorObject != null && formatErrorObject.exception != null)
             {
-                // if we did no thave any errors in the expression evaluation
+                // if we did not have any errors in the expression evaluation
                 // we might have errors in the formatting, if present
                 _errorManager.LogStringFormatError(formatErrorObject);
                 if (_errorManager.DisplayFormatErrorString)
@@ -521,6 +513,9 @@ private void DisplayObject(PSObject so, TraversalInfo currentLevel, List<MshPara
             List<MshResolvedExpressionParameterAssociation> activeAssociationList =
                         AssociationManager.SetupActiveProperties(parameterList, so, _expressionFactory);
 
+            // Apply ExcludeProperty filter using the centralized method
+            activeAssociationList = ViewGenerator.ApplyExcludeFilter(activeAssociationList, _parameters?.excludePropertyFilter);
+
             // create a format entry
             FormatEntry fe = new FormatEntry();
             formatValueList.Add(fe);
@@ -717,7 +712,7 @@ private string GetObjectDisplayName(PSObject so)
             if (_complexSpecificParameters.classDisplay == ComplexSpecificParameters.ClassInfoDisplay.shortName)
             {
                 // get the last token in the full name
-                string[] arr = typeNames[0].Split(Utils.Separators.Dot);
+                string[] arr = typeNames[0].Split('.');
                 if (arr.Length > 0)
                     return arr[arr.Length - 1];
             }
@@ -766,6 +761,7 @@ private List<FormatValue> AddIndentationLevel(List<FormatValue> formatValueList)
             return feFrame.formatValueList;
         }
 
+        private FormattingCommandLineParameters _parameters;
         private ComplexSpecificParameters _complexSpecificParameters;
 
         /// <summary>
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_List.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_List.cs
index 1cee3067011..35287d7c2e4 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_List.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_List.cs
@@ -30,9 +30,14 @@ internal override void Initialize(TerminatingErrorContext errorContext, PSProper
             {
                 _listBody = (ListControlBody)this.dataBaseInfo.view.mainControl;
             }
+        }
 
-            this.inputParameters = parameters;
-            SetUpActiveProperties(so);
+        /// <summary>
+        /// Builds the raw association list for list formatting.
+        /// </summary>
+        protected override List<MshResolvedExpressionParameterAssociation> BuildRawAssociationList(PSObject so, List<MshParameter> propertyList)
+        {
+            return AssociationManager.SetupActiveProperties(propertyList, so, this.expressionFactory);
         }
 
         /// <summary>
@@ -114,20 +119,17 @@ private ListViewEntry GenerateListViewEntryFromDataBaseInfo(PSObject so, int enu
 
                     // we try to fall back and see if we have an un-resolved PSPropertyExpression
                     FormatToken token = listItem.formatTokenList[0];
-                    FieldPropertyToken fpt = token as FieldPropertyToken;
-                    if (fpt != null)
+                    if (token is FieldPropertyToken fpt)
                     {
                         PSPropertyExpression ex = this.expressionFactory.CreateFromExpressionToken(fpt.expression, this.dataBaseInfo.view.loadingInfo);
 
                         // use the un-resolved PSPropertyExpression string as a label
                         lvf.label = ex.ToString();
                     }
-                    else
+                    else if (token is TextToken tt)
                     {
-                        TextToken tt = token as TextToken;
-                        if (tt != null)
-                            // we had a text token, use it as a label (last resort...)
-                            lvf.label = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
+                        // we had a text token, use it as a label (last resort...)
+                        lvf.label = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
                     }
                 }
 
@@ -181,17 +183,14 @@ private ListControlEntryDefinition GetActiveListControlEntryDefinition(ListContr
 
         private ListViewEntry GenerateListViewEntryFromProperties(PSObject so, int enumerationLimit)
         {
-            // compute active properties every time
-            if (this.activeAssociationList == null)
-            {
-                SetUpActiveProperties(so);
-            }
+            // Build active association list (with ExcludeProperty filter applied)
+            var associationList = BuildActiveAssociationList(so);
 
             ListViewEntry lve = new ListViewEntry();
 
-            for (int k = 0; k < this.activeAssociationList.Count; k++)
+            for (int k = 0; k < associationList.Count; k++)
             {
-                MshResolvedExpressionParameterAssociation a = this.activeAssociationList[k];
+                MshResolvedExpressionParameterAssociation a = associationList[k];
                 ListViewField lvf = new ListViewField();
 
                 if (a.OriginatingParameter != null)
@@ -221,19 +220,7 @@ private ListViewEntry GenerateListViewEntryFromProperties(PSObject so, int enume
                 lvf.formatPropertyField.propertyValue = this.GetExpressionDisplayValue(so, enumerationLimit, a.ResolvedExpression, directive);
                 lve.listViewFieldList.Add(lvf);
             }
-
-            this.activeAssociationList = null;
             return lve;
         }
-
-        private void SetUpActiveProperties(PSObject so)
-        {
-            List<MshParameter> mshParameterList = null;
-
-            if (this.inputParameters != null)
-                mshParameterList = this.inputParameters.mshParameterList;
-
-            this.activeAssociationList = AssociationManager.SetupActiveProperties(mshParameterList, so, this.expressionFactory);
-        }
     }
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Table.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Table.cs
index bfd3291dd46..3b14c0754ba 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Table.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Table.cs
@@ -14,6 +14,8 @@ internal sealed class TableViewGenerator : ViewGenerator
         // tableBody to use for this instance of the ViewGenerator;
         private TableControlBody _tableBody;
 
+        private List<MshResolvedExpressionParameterAssociation> _activeAssociationList;
+
         internal override void Initialize(TerminatingErrorContext terminatingErrorContext, PSPropertyExpressionFactory mshExpressionFactory, TypeInfoDataBase db, ViewDefinition view, FormattingCommandLineParameters formatParameters)
         {
             base.Initialize(terminatingErrorContext, mshExpressionFactory, db, view, formatParameters);
@@ -34,46 +36,48 @@ internal override void Initialize(TerminatingErrorContext errorContext, PSProper
                 _tableBody = (TableControlBody)this.dataBaseInfo.view.mainControl;
             }
 
-            List<MshParameter> rawMshParameterList = null;
-
-            if (parameters != null)
-                rawMshParameterList = parameters.mshParameterList;
+            // Build the active association list (with ExcludeProperty filter applied)
+            _activeAssociationList = BuildActiveAssociationList(so);
+        }
 
+        /// <summary>
+        /// Builds the raw association list for table formatting.
+        /// </summary>
+        protected override List<MshResolvedExpressionParameterAssociation> BuildRawAssociationList(PSObject so, List<MshParameter> propertyList)
+        {
             // check if we received properties from the command line
-            if (rawMshParameterList != null && rawMshParameterList.Count > 0)
+            if (propertyList is not null && propertyList.Count > 0)
             {
-                this.activeAssociationList = AssociationManager.ExpandTableParameters(rawMshParameterList, so);
-                return;
+                return AssociationManager.ExpandTableParameters(propertyList, so);
             }
 
             // we did not get any properties:
             // try to get properties from the default property set of the object
-            this.activeAssociationList = AssociationManager.ExpandDefaultPropertySet(so, this.expressionFactory);
-            if (this.activeAssociationList.Count > 0)
+            var list = AssociationManager.ExpandDefaultPropertySet(so, this.expressionFactory);
+            if (list.Count > 0)
             {
                 // we got a valid set of properties from the default property set..add computername for
                 // remoteobjects (if available)
                 if (PSObjectHelper.ShouldShowComputerNameProperty(so))
                 {
-                    activeAssociationList.Add(new MshResolvedExpressionParameterAssociation(null,
+                    list.Add(new MshResolvedExpressionParameterAssociation(null,
                         new PSPropertyExpression(RemotingConstants.ComputerNameNoteProperty)));
                 }
 
-                return;
+                return list;
             }
 
             // we failed to get anything from the default property set
-            this.activeAssociationList = AssociationManager.ExpandAll(so);
-            if (this.activeAssociationList.Count > 0)
+            list = AssociationManager.ExpandAll(so);
+            if (list.Count > 0)
             {
                 // Remove PSComputerName and PSShowComputerName from the display as needed.
-                AssociationManager.HandleComputerNameProperties(so, activeAssociationList);
-                FilterActiveAssociationList();
-                return;
+                AssociationManager.HandleComputerNameProperties(so, list);
+                return LimitAssociationListSize(list);
             }
 
             // we were unable to retrieve any properties, so we leave an empty list
-            this.activeAssociationList = new List<MshResolvedExpressionParameterAssociation>();
+            return new List<MshResolvedExpressionParameterAssociation>();
         }
 
         /// <summary>
@@ -124,30 +128,29 @@ internal override FormatStartData GenerateStartData(PSObject so)
         }
 
         /// <summary>
-        /// Method to filter resolved expressions as per table view needs.
+        /// Limits the association list size for table view.
         /// For v1.0, table view supports only 10 properties.
-        ///
-        /// This method filters and updates "activeAssociationList" instance property.
         /// </summary>
-        /// <returns>None.</returns>
-        /// <remarks>This method updates "activeAssociationList" instance property.</remarks>
-        private void FilterActiveAssociationList()
+        /// <param name="list">The list to limit.</param>
+        /// <returns>The limited list.</returns>
+        private static List<MshResolvedExpressionParameterAssociation> LimitAssociationListSize(
+            List<MshResolvedExpressionParameterAssociation> list)
         {
-            // we got a valid set of properties from the default property set
-            // make sure we do not have too many properties
-
             // NOTE: this is an arbitrary number, chosen to be a sensitive default
-            const int nMax = 10;
+            const int maxCount = 10;
 
-            if (activeAssociationList.Count > nMax)
+            if (list.Count <= maxCount)
             {
-                List<MshResolvedExpressionParameterAssociation> tmp = this.activeAssociationList;
-                this.activeAssociationList = new List<MshResolvedExpressionParameterAssociation>();
-                for (int k = 0; k < nMax; k++)
-                    this.activeAssociationList.Add(tmp[k]);
+                return list;
             }
 
-            return;
+            var result = new List<MshResolvedExpressionParameterAssociation>(maxCount);
+            for (int k = 0; k < maxCount; k++)
+            {
+                result.Add(list[k]);
+            }
+
+            return result;
         }
 
         private TableHeaderInfo GenerateTableHeaderInfoFromDataBaseInfo(PSObject so)
@@ -172,7 +175,14 @@ private TableHeaderInfo GenerateTableHeaderInfoFromDataBaseInfo(PSObject so)
                     ci.width = colHeader.width;
                     ci.alignment = colHeader.alignment;
                     if (colHeader.label != null)
+                    {
+                        if (colHeader.label.text != string.Empty)
+                        {
+                            ci.HeaderMatchesProperty = so.Properties[colHeader.label.text] is not null;
+                        }
+
                         ci.label = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(colHeader.label);
+                    }
                 }
 
                 if (ci.alignment == TextAlignment.Undefined)
@@ -187,18 +197,13 @@ private TableHeaderInfo GenerateTableHeaderInfoFromDataBaseInfo(PSObject so)
                         token = rowItem.formatTokenList[0];
                     if (token != null)
                     {
-                        FieldPropertyToken fpt = token as FieldPropertyToken;
-                        if (fpt != null)
+                        if (token is FieldPropertyToken fpt)
                         {
                             ci.label = fpt.expression.expressionValue;
                         }
-                        else
+                        else if (token is TextToken tt)
                         {
-                            TextToken tt = token as TextToken;
-                            if (tt != null)
-                            {
-                                ci.label = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
-                            }
+                            ci.label = this.dataBaseInfo.db.displayResourceManagerCache.GetTextTokenString(tt);
                         }
                     }
                     else
@@ -219,10 +224,11 @@ private TableHeaderInfo GenerateTableHeaderInfoFromProperties(PSObject so)
             TableHeaderInfo thi = new TableHeaderInfo();
 
             thi.hideHeader = this.HideHeaders;
+            thi.repeatHeader = this.RepeatHeader;
 
-            for (int k = 0; k < this.activeAssociationList.Count; k++)
+            for (int k = 0; k < _activeAssociationList.Count; k++)
             {
-                MshResolvedExpressionParameterAssociation a = this.activeAssociationList[k];
+                MshResolvedExpressionParameterAssociation a = _activeAssociationList[k];
                 TableColumnInfo ci = new TableColumnInfo();
 
                 // set the label of the column
@@ -233,10 +239,7 @@ private TableHeaderInfo GenerateTableHeaderInfoFromProperties(PSObject so)
                         ci.propertyName = (string)key;
                 }
 
-                if (ci.propertyName == null)
-                {
-                    ci.propertyName = this.activeAssociationList[k].ResolvedExpression.ToString();
-                }
+                ci.propertyName ??= _activeAssociationList[k].ResolvedExpression.ToString();
 
                 // set the width of the table
                 if (a.OriginatingParameter != null)
@@ -391,10 +394,7 @@ private List<TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBod
                 }
             }
 
-            if (matchingRowDefinition == null)
-            {
-                matchingRowDefinition = match.BestMatch as TableRowDefinition;
-            }
+            matchingRowDefinition ??= match.BestMatch as TableRowDefinition;
 
             if (matchingRowDefinition == null)
             {
@@ -412,10 +412,7 @@ private List<TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBod
                         }
                     }
 
-                    if (matchingRowDefinition == null)
-                    {
-                        matchingRowDefinition = match.BestMatch as TableRowDefinition;
-                    }
+                    matchingRowDefinition ??= match.BestMatch as TableRowDefinition;
                 }
             }
 
@@ -474,16 +471,22 @@ private TableRowEntry GenerateTableRowEntryFromDataBaseInfo(PSObject so, int enu
         private TableRowEntry GenerateTableRowEntryFromFromProperties(PSObject so, int enumerationLimit)
         {
             TableRowEntry tre = new TableRowEntry();
-            for (int k = 0; k < this.activeAssociationList.Count; k++)
+            for (int k = 0; k < _activeAssociationList.Count; k++)
             {
                 FormatPropertyField fpf = new FormatPropertyField();
                 FieldFormattingDirective directive = null;
-                if (activeAssociationList[k].OriginatingParameter != null)
+                if (_activeAssociationList[k].OriginatingParameter != null)
+                {
+                    directive = _activeAssociationList[k].OriginatingParameter.GetEntry(FormatParameterDefinitionKeys.FormatStringEntryKey) as FieldFormattingDirective;
+                }
+
+                if (directive is null)
                 {
-                    directive = activeAssociationList[k].OriginatingParameter.GetEntry(FormatParameterDefinitionKeys.FormatStringEntryKey) as FieldFormattingDirective;
+                    directive = new FieldFormattingDirective();
+                    directive.isTable = true;
                 }
 
-                fpf.propertyValue = this.GetExpressionDisplayValue(so, enumerationLimit, this.activeAssociationList[k].ResolvedExpression, directive);
+                fpf.propertyValue = this.GetExpressionDisplayValue(so, enumerationLimit, _activeAssociationList[k].ResolvedExpression, directive);
                 tre.formatPropertyFieldList.Add(fpf);
             }
 
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Wide.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Wide.cs
index 26c0af670c7..bfa364cc450 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Wide.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewGenerator_Wide.cs
@@ -13,7 +13,40 @@ internal override void Initialize(TerminatingErrorContext errorContext, PSProper
                                 PSObject so, TypeInfoDataBase db, FormattingCommandLineParameters parameters)
         {
             base.Initialize(errorContext, expressionFactory, so, db, parameters);
-            this.inputParameters = parameters;
+        }
+
+        /// <summary>
+        /// Builds the raw association list for wide formatting.
+        /// </summary>
+        protected override List<MshResolvedExpressionParameterAssociation> BuildRawAssociationList(PSObject so, List<MshParameter> propertyList)
+        {
+            // check if we received properties from the command line
+            if (propertyList is not null && propertyList.Count > 0)
+            {
+                return AssociationManager.ExpandParameters(propertyList, so);
+            }
+
+            // we did not get any properties:
+            // try to get the display property of the object
+            PSPropertyExpression displayNameExpression = PSObjectHelper.GetDisplayNameExpression(so, this.expressionFactory);
+            if (displayNameExpression is not null)
+            {
+                return new List<MshResolvedExpressionParameterAssociation>
+                {
+                    new MshResolvedExpressionParameterAssociation(null, displayNameExpression)
+                };
+            }
+
+            // try to get the default property set (we will use the first property)
+            var list = AssociationManager.ExpandDefaultPropertySet(so, this.expressionFactory);
+            if (list.Count == 0)
+            {
+                // we failed to get anything from the default property set
+                // just get all the properties
+                list = AssociationManager.ExpandAll(so);
+            }
+
+            return list;
         }
 
         internal override FormatStartData GenerateStartData(PSObject so)
@@ -130,20 +163,17 @@ private WideControlEntryDefinition GetActiveWideControlEntryDefinition(WideContr
 
         private WideViewEntry GenerateWideViewEntryFromProperties(PSObject so, int enumerationLimit)
         {
-            // compute active properties every time
-            if (this.activeAssociationList == null)
-            {
-                SetUpActiveProperty(so);
-            }
+            // Build active association list (with ExcludeProperty filter applied)
+            var associationList = BuildActiveAssociationList(so);
 
             WideViewEntry wve = new WideViewEntry();
             FormatPropertyField fpf = new FormatPropertyField();
 
             wve.formatPropertyField = fpf;
-            if (this.activeAssociationList.Count > 0)
+            if (associationList.Count > 0)
             {
                 // get the first one
-                MshResolvedExpressionParameterAssociation a = this.activeAssociationList[0];
+                MshResolvedExpressionParameterAssociation a = associationList[0];
                 FieldFormattingDirective directive = null;
                 if (a.OriginatingParameter != null)
                 {
@@ -152,46 +182,7 @@ private WideViewEntry GenerateWideViewEntryFromProperties(PSObject so, int enume
 
                 fpf.propertyValue = this.GetExpressionDisplayValue(so, enumerationLimit, a.ResolvedExpression, directive);
             }
-
-            this.activeAssociationList = null;
             return wve;
         }
-
-        private void SetUpActiveProperty(PSObject so)
-        {
-            List<MshParameter> rawMshParameterList = null;
-
-            if (this.inputParameters != null)
-                rawMshParameterList = this.inputParameters.mshParameterList;
-
-            // check if we received properties from the command line
-            if (rawMshParameterList != null && rawMshParameterList.Count > 0)
-            {
-                this.activeAssociationList = AssociationManager.ExpandParameters(rawMshParameterList, so);
-                return;
-            }
-
-            // we did not get any properties:
-            // try to get the display property of the object
-            PSPropertyExpression displayNameExpression = PSObjectHelper.GetDisplayNameExpression(so, this.expressionFactory);
-            if (displayNameExpression != null)
-            {
-                this.activeAssociationList = new List<MshResolvedExpressionParameterAssociation>();
-                this.activeAssociationList.Add(new MshResolvedExpressionParameterAssociation(null, displayNameExpression));
-                return;
-            }
-
-            // try to get the default property set (we will use the first property)
-            this.activeAssociationList = AssociationManager.ExpandDefaultPropertySet(so, this.expressionFactory);
-            if (this.activeAssociationList.Count > 0)
-            {
-                // we got a valid set of properties from the default property set
-                return;
-            }
-
-            // we failed to get anything from the default property set
-            // just get all the properties
-            this.activeAssociationList = AssociationManager.ExpandAll(so);
-        }
     }
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatViewManager.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatViewManager.cs
index 0737e43476e..891dfce6829 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatViewManager.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatViewManager.cs
@@ -646,8 +646,7 @@ private static ErrorRecord GenerateErrorRecord(FormattingError error)
         {
             ErrorRecord errorRecord = null;
             string msg = null;
-            PSPropertyExpressionError psPropertyExpressionError = error as PSPropertyExpressionError;
-            if (psPropertyExpressionError != null)
+            if (error is PSPropertyExpressionError psPropertyExpressionError)
             {
                 errorRecord = new ErrorRecord(
                                 psPropertyExpressionError.result.Exception,
@@ -660,8 +659,7 @@ private static ErrorRecord GenerateErrorRecord(FormattingError error)
                 errorRecord.ErrorDetails = new ErrorDetails(msg);
             }
 
-            StringFormatError formattingError = error as StringFormatError;
-            if (formattingError != null)
+            if (error is StringFormatError formattingError)
             {
                 errorRecord = new ErrorRecord(
                                 formattingError.exception,
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
index bb2c8ff93e7..c8b077918fe 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
@@ -13,7 +13,7 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// Helper class for writing formatting directives to XML.
     /// </summary>
-    internal class FormatXmlWriter
+    internal sealed class FormatXmlWriter
     {
         private XmlWriter _writer;
         private bool _exportScriptBlock;
@@ -385,8 +385,7 @@ internal void WriteCustomControl(CustomControl customControl)
 
         internal void WriteCustomItem(CustomItemBase item)
         {
-            var newline = item as CustomItemNewline;
-            if (newline != null)
+            if (item is CustomItemNewline newline)
             {
                 for (int i = 0; i < newline.Count; i++)
                 {
@@ -396,15 +395,13 @@ internal void WriteCustomItem(CustomItemBase item)
                 return;
             }
 
-            var text = item as CustomItemText;
-            if (text != null)
+            if (item is CustomItemText text)
             {
                 _writer.WriteElementString("Text", text.Text);
                 return;
             }
 
-            var expr = item as CustomItemExpression;
-            if (expr != null)
+            if (item is CustomItemExpression expr)
             {
                 _writer.WriteStartElement("ExpressionBinding");
                 if (expr.EnumerateCollection)
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs
index f4ac55d1feb..4af1ee54d81 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjects.cs
@@ -18,7 +18,7 @@
 // representation that mig have been introduced by serialization.
 //
 // There is also the need to preserve type information across serialization
-// boundaries, therefore the objects provide a GUID based machanism to
+// boundaries, therefore the objects provide a GUID based mechanism to
 // preserve the information.
 //
 
@@ -207,6 +207,7 @@ internal sealed partial class TableColumnInfo : FormatInfoData
         public int alignment = TextAlignment.Left;
         public string label = null;
         public string propertyName = null;
+        public bool HeaderMatchesProperty = true;
     }
 
     internal sealed class ListViewHeaderInfo : ShapeInfo
diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjectsDeserializer.cs b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjectsDeserializer.cs
index 285e4d4c02b..7ae144702ba 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormattingObjectsDeserializer.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormattingObjectsDeserializer.cs
@@ -30,8 +30,7 @@ internal FormatObjectDeserializer(TerminatingErrorContext errorContext)
 
         internal bool IsFormatInfoData(PSObject so)
         {
-            var fid = PSObject.Base(so) as FormatInfoData;
-            if (fid != null)
+            if (PSObject.Base(so) is FormatInfoData fid)
             {
                 if (fid is FormatStartData ||
                     fid is FormatEndData ||
@@ -55,7 +54,7 @@ fid is GroupEndData ||
                 return false;
             }
 
-            if (!(GetProperty(so, FormatInfoData.classidProperty) is string classId))
+            if (GetProperty(so, FormatInfoData.classidProperty) is not string classId)
             {
                 // it's not one of the objects derived from FormatInfoData
                 return false;
@@ -86,8 +85,7 @@ fid is GroupEndData ||
         /// <returns>Deserialized object or null.</returns>
         internal object Deserialize(PSObject so)
         {
-            var fid = PSObject.Base(so) as FormatInfoData;
-            if (fid != null)
+            if (PSObject.Base(so) is FormatInfoData fid)
             {
                 if (fid is FormatStartData ||
                     fid is FormatEndData ||
@@ -111,7 +109,7 @@ fid is GroupEndData ||
                 return so;
             }
 
-            if (!(GetProperty(so, FormatInfoData.classidProperty) is string classId))
+            if (GetProperty(so, FormatInfoData.classidProperty) is not string classId)
             {
                 // it's not one of the objects derived from FormatInfoData,
                 // just return it as is
@@ -325,9 +323,7 @@ internal WriteStreamType DeserializeWriteStreamTypeMemberVariable(PSObject so)
         internal FormatInfoData DeserializeObject(PSObject so)
         {
             FormatInfoData fid = FormatInfoDataClassFactory.CreateInstance(so, this);
-
-            if (fid != null)
-                fid.Deserialize(so, this);
+            fid?.Deserialize(so, this);
             return fid;
         }
 
@@ -355,31 +351,31 @@ static FormatInfoDataClassFactory()
         {
             s_constructors = new Dictionary<string, Func<FormatInfoData>>
             {
-                {FormatStartData.CLSID,       () => new FormatStartData()},
-                {FormatEndData.CLSID,         () => new FormatEndData()},
-                {GroupStartData.CLSID,        () => new GroupStartData()},
-                {GroupEndData.CLSID,          () => new GroupEndData()},
-                {FormatEntryData.CLSID,       () => new FormatEntryData()},
-                {WideViewHeaderInfo.CLSID,    () => new WideViewHeaderInfo()},
-                {TableHeaderInfo.CLSID,       () => new TableHeaderInfo()},
-                {TableColumnInfo.CLSID,       () => new TableColumnInfo()},
-                {ListViewHeaderInfo.CLSID,    () => new ListViewHeaderInfo()},
-                {ListViewEntry.CLSID,         () => new ListViewEntry()},
-                {ListViewField.CLSID,         () => new ListViewField()},
-                {TableRowEntry.CLSID,         () => new TableRowEntry()},
-                {WideViewEntry.CLSID,         () => new WideViewEntry()},
-                {ComplexViewHeaderInfo.CLSID, () => new ComplexViewHeaderInfo()},
-                {ComplexViewEntry.CLSID,      () => new ComplexViewEntry()},
-                {GroupingEntry.CLSID,         () => new GroupingEntry()},
-                {PageHeaderEntry.CLSID,       () => new PageHeaderEntry()},
-                {PageFooterEntry.CLSID,       () => new PageFooterEntry()},
-                {AutosizeInfo.CLSID,          () => new AutosizeInfo()},
-                {FormatNewLine.CLSID,         () => new FormatNewLine()},
-                {FrameInfo.CLSID,             () => new FrameInfo()},
-                {FormatTextField.CLSID,       () => new FormatTextField()},
-                {FormatPropertyField.CLSID,   () => new FormatPropertyField()},
-                {FormatEntry.CLSID,           () => new FormatEntry()},
-                {RawTextFormatEntry.CLSID,    () => new RawTextFormatEntry()}
+                {FormatStartData.CLSID,       static () => new FormatStartData()},
+                {FormatEndData.CLSID,         static () => new FormatEndData()},
+                {GroupStartData.CLSID,        static () => new GroupStartData()},
+                {GroupEndData.CLSID,          static () => new GroupEndData()},
+                {FormatEntryData.CLSID,       static () => new FormatEntryData()},
+                {WideViewHeaderInfo.CLSID,    static () => new WideViewHeaderInfo()},
+                {TableHeaderInfo.CLSID,       static () => new TableHeaderInfo()},
+                {TableColumnInfo.CLSID,       static () => new TableColumnInfo()},
+                {ListViewHeaderInfo.CLSID,    static () => new ListViewHeaderInfo()},
+                {ListViewEntry.CLSID,         static () => new ListViewEntry()},
+                {ListViewField.CLSID,         static () => new ListViewField()},
+                {TableRowEntry.CLSID,         static () => new TableRowEntry()},
+                {WideViewEntry.CLSID,         static () => new WideViewEntry()},
+                {ComplexViewHeaderInfo.CLSID, static () => new ComplexViewHeaderInfo()},
+                {ComplexViewEntry.CLSID,      static () => new ComplexViewEntry()},
+                {GroupingEntry.CLSID,         static () => new GroupingEntry()},
+                {PageHeaderEntry.CLSID,       static () => new PageHeaderEntry()},
+                {PageFooterEntry.CLSID,       static () => new PageFooterEntry()},
+                {AutosizeInfo.CLSID,          static () => new AutosizeInfo()},
+                {FormatNewLine.CLSID,         static () => new FormatNewLine()},
+                {FrameInfo.CLSID,             static () => new FrameInfo()},
+                {FormatTextField.CLSID,       static () => new FormatTextField()},
+                {FormatPropertyField.CLSID,   static () => new FormatPropertyField()},
+                {FormatEntry.CLSID,           static () => new FormatEntry()},
+                {RawTextFormatEntry.CLSID,    static () => new RawTextFormatEntry()}
             };
         }
 
diff --git a/src/System.Management.Automation/FormatAndOutput/common/ILineOutput.cs b/src/System.Management.Automation/FormatAndOutput/common/ILineOutput.cs
index 32d4565da5d..7bca25ea828 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/ILineOutput.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/ILineOutput.cs
@@ -1,9 +1,11 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
 using System.Management.Automation;
+using System.Management.Automation.Host;
 using System.Management.Automation.Internal;
 using System.Text;
 
@@ -13,60 +15,112 @@ namespace Microsoft.PowerShell.Commands.Internal.Format
 {
     /// <summary>
     /// Base class providing support for string manipulation.
-    /// This class is a tear off class provided by the LineOutput class
-    ///
-    /// Assumptions (in addition to the assumptions made for LineOutput):
-    /// - characters map to one or more character cells
-    ///
-    /// NOTE: we provide a base class that is valid for devices that have a
-    /// 1:1 mapping between a UNICODE character and a display cell.
+    /// This class is a tear off class provided by the LineOutput class.
     /// </summary>
     internal class DisplayCells
     {
-        internal virtual int Length(string str)
+        /// <summary>
+        /// Calculate the buffer cell length of the given string.
+        /// </summary>
+        /// <param name="str">String that may contain VT escape sequences.</param>
+        /// <returns>Number of buffer cells the string needs to take.</returns>
+        internal int Length(string str)
         {
             return Length(str, 0);
         }
 
+        /// <summary>
+        /// Calculate the buffer cell length of the given string.
+        /// </summary>
+        /// <param name="str">String that may contain VT escape sequences.</param>
+        /// <param name="offset">
+        /// When the string doesn't contain VT sequences, it's the starting index.
+        /// When the string contains VT sequences, it means starting from the 'n-th' char that doesn't belong to a escape sequence.</param>
+        /// <returns>Number of buffer cells the string needs to take.</returns>
         internal virtual int Length(string str, int offset)
         {
-            int length = 0;
+            if (string.IsNullOrEmpty(str))
+            {
+                return 0;
+            }
 
-            foreach (char c in str)
+            var valueStrDec = new ValueStringDecorated(str);
+            if (valueStrDec.IsDecorated)
             {
-                length += LengthInBufferCells(c);
+                str = valueStrDec.ToString(OutputRendering.PlainText);
             }
 
-            return length - offset;
-        }
+            int length = 0;
+            for (; offset < str.Length; offset++)
+            {
+                length += CharLengthInBufferCells(str[offset]);
+            }
 
-        internal virtual int Length(char character) { return 1; }
+            return length;
+        }
 
-        internal virtual int GetHeadSplitLength(string str, int displayCells)
+        /// <summary>
+        /// Calculate the buffer cell length of the given character.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <returns>Number of buffer cells the character needs to take.</returns>
+        internal virtual int Length(char character)
         {
-            return GetHeadSplitLength(str, 0, displayCells);
+            return CharLengthInBufferCells(character);
         }
 
-        internal virtual int GetHeadSplitLength(string str, int offset, int displayCells)
+        /// <summary>
+        /// Truncate from the tail of the string.
+        /// </summary>
+        /// <param name="str">String that may contain VT escape sequences.</param>
+        /// <param name="displayCells">Number of buffer cells to fit in.</param>
+        /// <returns>Number of non-escape-sequence characters from head of the string that can fit in the space.</returns>
+        internal int TruncateTail(string str, int displayCells)
         {
-            int len = str.Length - offset;
-            return (len < displayCells) ? len : displayCells;
+            return TruncateTail(str, offset: 0, displayCells);
         }
 
-        internal virtual int GetTailSplitLength(string str, int displayCells)
+        /// <summary>
+        /// Truncate from the tail of the string.
+        /// </summary>
+        /// <param name="str">String that may contain VT escape sequences.</param>
+        /// <param name="offset">
+        /// When the string doesn't contain VT sequences, it's the starting index.
+        /// When the string contains VT sequences, it means starting from the 'n-th' char that doesn't belong to a escape sequence.</param>
+        /// <param name="displayCells">Number of buffer cells to fit in.</param>
+        /// <returns>Number of non-escape-sequence characters from head of the string that can fit in the space.</returns>
+        internal int TruncateTail(string str, int offset, int displayCells)
         {
-            return GetTailSplitLength(str, 0, displayCells);
+            var valueStrDec = new ValueStringDecorated(str);
+            if (valueStrDec.IsDecorated)
+            {
+                str = valueStrDec.ToString(OutputRendering.PlainText);
+            }
+
+            return GetFitLength(str, offset, displayCells, startFromHead: true);
         }
 
-        internal virtual int GetTailSplitLength(string str, int offset, int displayCells)
+        /// <summary>
+        /// Truncate from the head of the string.
+        /// </summary>
+        /// <param name="str">String that may contain VT escape sequences.</param>
+        /// <param name="displayCells">Number of buffer cells to fit in.</param>
+        /// <returns>Number of non-escape-sequence characters from head of the string that should be skipped.</returns>
+        internal int TruncateHead(string str, int displayCells)
         {
-            int len = str.Length - offset;
-            return (len < displayCells) ? len : displayCells;
+            var valueStrDec = new ValueStringDecorated(str);
+            if (valueStrDec.IsDecorated)
+            {
+                str = valueStrDec.ToString(OutputRendering.PlainText);
+            }
+
+            int tailCount = GetFitLength(str, offset: 0, displayCells, startFromHead: false);
+            return str.Length - tailCount;
         }
 
         #region Helpers
 
-        protected static int LengthInBufferCells(char c)
+        protected static int CharLengthInBufferCells(char c)
         {
             // The following is based on http://www.cl.cam.ac.uk/~mgk25/c/wcwidth.c
             // which is derived from https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
@@ -83,7 +137,7 @@ protected static int LengthInBufferCells(char c)
                  ((uint)(c - 0xffe0) <= (0xffe6 - 0xffe0)));
 
             // We can ignore these ranges because .Net strings use surrogate pairs
-            // for this range and we do not handle surrogage pairs.
+            // for this range and we do not handle surrogate pairs.
             // (c >= 0x20000 && c <= 0x2fffd) ||
             // (c >= 0x30000 && c <= 0x3fffd)
             return 1 + (isWide ? 1 : 0);
@@ -93,25 +147,26 @@ protected static int LengthInBufferCells(char c)
         /// Given a string and a number of display cells, it computes how many
         /// characters would fit starting from the beginning or end of the string.
         /// </summary>
-        /// <param name="str">String to be displayed.</param>
+        /// <param name="str">String to be displayed, which doesn't contain any VT sequences.</param>
         /// <param name="offset">Offset inside the string.</param>
         /// <param name="displayCells">Number of display cells.</param>
-        /// <param name="head">If true compute from the head (i.e. k++) else from the tail (i.e. k--).</param>
+        /// <param name="startFromHead">If true compute from the head (i.e. k++) else from the tail (i.e. k--).</param>
         /// <returns>Number of characters that would fit.</returns>
-        protected int GetSplitLengthInternalHelper(string str, int offset, int displayCells, bool head)
+        protected int GetFitLength(string str, int offset, int displayCells, bool startFromHead)
         {
             int filledDisplayCellsCount = 0; // number of cells that are filled in
             int charactersAdded = 0; // number of characters that fit
             int currCharDisplayLen; // scratch variable
 
-            int k = (head) ? offset : str.Length - 1;
-            int kFinal = (head) ? str.Length - 1 : offset;
+            int k = startFromHead ? offset : str.Length - 1;
+            int kFinal = startFromHead ? str.Length - 1 : offset;
             while (true)
             {
-                if ((head && (k > kFinal)) || ((!head) && (k < kFinal)))
+                if ((startFromHead && k > kFinal) || (!startFromHead && k < kFinal))
                 {
                     break;
                 }
+
                 // compute the cell number for the current character
                 currCharDisplayLen = this.Length(str[k]);
 
@@ -120,6 +175,7 @@ protected int GetSplitLengthInternalHelper(string str, int offset, int displayCe
                     // if we added this character it would not fit, we cannot continue
                     break;
                 }
+
                 // keep adding, we fit
                 filledDisplayCellsCount += currCharDisplayLen;
                 charactersAdded++;
@@ -131,13 +187,13 @@ protected int GetSplitLengthInternalHelper(string str, int offset, int displayCe
                     break;
                 }
 
-                k = (head) ? (k + 1) : (k - 1);
+                k = startFromHead ? (k + 1) : (k - 1);
             }
 
             return charactersAdded;
         }
-        #endregion
 
+        #endregion
     }
 
     /// <summary>
@@ -194,6 +250,13 @@ internal virtual void ExecuteBufferPlayBack(DoPlayBackCall playback) { }
         /// </param>
         internal abstract void WriteLine(string s);
 
+        /// <summary>
+        /// Write a line of string as raw text to the output device, with no change to the string.
+        /// For example, keeping VT escape sequences intact in it.
+        /// </summary>
+        /// <param name="s">The raw text to be written to the device.</param>
+        internal virtual void WriteRawText(string s) => WriteLine(s);
+
         internal WriteStreamType WriteStream
         {
             get;
@@ -324,10 +387,10 @@ private void WriteLineInternal(string val, int cols)
             }
 
             // check for line breaks
-            string[] lines = StringManipulationHelper.SplitLines(val);
+            List<string> lines = StringManipulationHelper.SplitLines(val);
 
             // process the substrings as separate lines
-            for (int k = 0; k < lines.Length; k++)
+            for (int k = 0; k < lines.Count; k++)
             {
                 // compute the display length of the string
                 int displayLength = _displayCells.Length(lines[k]);
@@ -353,11 +416,11 @@ private void WriteLineInternal(string val, int cols)
                 {
                     // the string is still too long to fit, write the first cols characters
                     // and go back for more wraparound
-                    int splitLen = _displayCells.GetHeadSplitLength(s, cols);
-                    WriteLineInternal(s.Substring(0, splitLen), cols);
+                    int headCount = _displayCells.TruncateTail(s, cols);
+                    WriteLineInternal(s.VtSubstring(0, headCount), cols);
 
                     // chop off the first fieldWidth characters, already printed
-                    s = s.Substring(splitLen);
+                    s = s.VtSubstring(headCount);
                     if (_displayCells.Length(s) <= cols)
                     {
                         // if we fit, print the tail of the string and we are done
@@ -375,7 +438,7 @@ private void WriteLineInternal(string val, int cols)
     /// Implementation of the ILineOutput interface accepting an instance of a
     /// TextWriter abstract class.
     /// </summary>
-    internal class TextWriterLineOutput : LineOutput
+    internal sealed class TextWriterLineOutput : LineOutput
     {
         #region ILineOutput methods
 
@@ -411,9 +474,17 @@ internal override int RowNumber
         /// <param name="s"></param>
         internal override void WriteLine(string s)
         {
-            CheckStopProcessing();
+            WriteRawText(PSHostUserInterface.GetOutputString(s, isHost: false));
+        }
 
-            s = Utils.GetOutputString(s, isHost: false);
+        /// <summary>
+        /// Write a raw text by delegating to the writer underneath, with no change to the text.
+        /// For example, keeping VT escape sequences intact in it.
+        /// </summary>
+        /// <param name="s">The raw text to be written to the device.</param>
+        internal override void WriteRawText(string s)
+        {
+            CheckStopProcessing();
 
             if (_suppressNewline)
             {
@@ -424,6 +495,7 @@ internal override void WriteLine(string s)
                 _writer.WriteLine(s);
             }
         }
+
         #endregion
 
         /// <summary>
diff --git a/src/System.Management.Automation/FormatAndOutput/common/ListWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/ListWriter.cs
index 91a7b8698a6..988b1133748 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/ListWriter.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/ListWriter.cs
@@ -2,9 +2,12 @@
 // Licensed under the MIT License.
 
 using System;
+using System.Collections.Generic;
 using System.Collections.Specialized;
 using System.Diagnostics;
+using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Text;
 
 namespace Microsoft.PowerShell.Commands.Internal.Format
 {
@@ -29,6 +32,11 @@ internal class ListWriter
         /// </summary>
         private int _columnWidth = 0;
 
+        /// <summary>
+        /// A cached string builder used within this type to reduce creation of temporary strings.
+        /// </summary>
+        private readonly StringBuilder _cachedBuilder = new();
+
         /// <summary>
         /// </summary>
         /// <param name="propertyNames">Names of the properties to display.</param>
@@ -59,6 +67,10 @@ internal void Initialize(string[] propertyNames, int screenColumnWidth, DisplayC
 
             // check if we have to truncate the labels
             int maxAllowableLabelLength = screenColumnWidth - Separator.Length - MinFieldWidth;
+            if (InternalTestHooks.ForceFormatListFixedLabelWidth)
+            {
+                maxAllowableLabelLength = 10;
+            }
 
             // find out the max display length (cell count) of the property names
             _propertyLabelsDisplayLength = 0; // reset max
@@ -83,19 +95,20 @@ internal void Initialize(string[] propertyNames, int screenColumnWidth, DisplayC
 
             for (int k = 0; k < propertyNames.Length; k++)
             {
+                string propertyName = propertyNames[k];
                 if (propertyNameCellCounts[k] < _propertyLabelsDisplayLength)
                 {
                     // shorter than the max, add padding
-                    _propertyLabels[k] = propertyNames[k] + StringUtil.Padding(_propertyLabelsDisplayLength - propertyNameCellCounts[k]);
+                    _propertyLabels[k] = propertyName + StringUtil.Padding(_propertyLabelsDisplayLength - propertyNameCellCounts[k]);
                 }
                 else if (propertyNameCellCounts[k] > _propertyLabelsDisplayLength)
                 {
                     // longer than the max, clip
-                    _propertyLabels[k] = propertyNames[k].Substring(0, dc.GetHeadSplitLength(propertyNames[k], _propertyLabelsDisplayLength));
+                    _propertyLabels[k] = propertyName.VtSubstring(0, dc.TruncateTail(propertyName, _propertyLabelsDisplayLength));
                 }
                 else
                 {
-                    _propertyLabels[k] = propertyNames[k];
+                    _propertyLabels[k] = propertyName;
                 }
 
                 _propertyLabels[k] += Separator;
@@ -164,16 +177,15 @@ internal void WriteProperties(string[] values, LineOutput lo)
         /// <param name="lo">LineOutput interface to write to.</param>
         private void WriteProperty(int k, string propertyValue, LineOutput lo)
         {
-            if (propertyValue == null)
-                propertyValue = string.Empty;
+            propertyValue ??= string.Empty;
 
             // make sure we honor embedded newlines
-            string[] lines = StringManipulationHelper.SplitLines(propertyValue);
+            List<string> lines = StringManipulationHelper.SplitLines(propertyValue);
 
             // padding to use in the lines after the first
             string padding = null;
 
-            for (int i = 0; i < lines.Length; i++)
+            for (int i = 0; i < lines.Count; i++)
             {
                 string prependString = null;
 
@@ -181,8 +193,7 @@ private void WriteProperty(int k, string propertyValue, LineOutput lo)
                     prependString = _propertyLabels[k];
                 else
                 {
-                    if (padding == null)
-                        padding = StringUtil.Padding(_propertyLabelsDisplayLength);
+                    padding ??= StringUtil.Padding(_propertyLabelsDisplayLength);
 
                     prependString = padding;
                 }
@@ -197,11 +208,10 @@ private void WriteProperty(int k, string propertyValue, LineOutput lo)
         /// </summary>
         /// <param name="prependString">String to add to the left.</param>
         /// <param name="line">Line to print.</param>
-        /// <param name="lo">LineOuput to write to.</param>
+        /// <param name="lo">LineOutput to write to.</param>
         private void WriteSingleLineHelper(string prependString, string line, LineOutput lo)
         {
-            if (line == null)
-                line = string.Empty;
+            line ??= string.Empty;
 
             // compute the width of the field for the value string (in screen cells)
             int fieldCellCount = _columnWidth - _propertyLabelsDisplayLength;
@@ -209,20 +219,52 @@ private void WriteSingleLineHelper(string prependString, string line, LineOutput
             // split the lines
             StringCollection sc = StringManipulationHelper.GenerateLines(lo.DisplayCells, line, fieldCellCount, fieldCellCount);
 
-            // padding to use in the lines after the first
-            string padding = StringUtil.Padding(_propertyLabelsDisplayLength);
+            // The padding to use in the lines after the first.
+            string headPadding = null;
+
+            // The VT style used for the list label.
+            string style = PSStyle.Instance.Formatting.FormatAccent;
+            string reset = PSStyle.Instance.Reset;
 
             // display the string collection
             for (int k = 0; k < sc.Count; k++)
             {
+                string str = sc[k];
+                _cachedBuilder.Clear();
+
                 if (k == 0)
                 {
-                    lo.WriteLine(prependString + sc[k]);
+                    if (string.IsNullOrWhiteSpace(prependString) || style == string.Empty)
+                    {
+                        // - Sometimes 'prependString' is just padding white spaces, and we don't
+                        //   need to add formatting escape sequences in such a case.
+                        // - Otherwise, if the style is an empty string, then the user has chosen
+                        //   to not apply a style to the list label.
+                        _cachedBuilder.Append(prependString).Append(str);
+                    }
+                    else
+                    {
+                        // Apply the style to the list label.
+                        _cachedBuilder
+                            .Append(style)
+                            .Append(prependString)
+                            .Append(reset)
+                            .Append(str);
+                    }
                 }
                 else
                 {
-                    lo.WriteLine(padding + sc[k]);
+                    // Lazily calculate the padding to use for the subsequent lines as it's quite often that only the first line exists.
+                    headPadding ??= StringUtil.Padding(_propertyLabelsDisplayLength);
+                    _cachedBuilder.Append(headPadding).Append(str);
+                }
+
+                if (str.Contains(ValueStringDecorated.ESC) && !str.AsSpan().TrimEnd().EndsWith(reset, StringComparison.Ordinal))
+                {
+                    _cachedBuilder.Append(reset);
                 }
+
+                lo.WriteLine(_cachedBuilder.ToString());
             }
         }
 
diff --git a/src/System.Management.Automation/FormatAndOutput/common/OutputManager.cs b/src/System.Management.Automation/FormatAndOutput/common/OutputManager.cs
index 41ea611f198..a551ef89bed 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/OutputManager.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/OutputManager.cs
@@ -92,19 +92,14 @@ internal override void ProcessRecord()
         internal override void EndProcessing()
         {
             // shut down only if we ever processed a pipeline object
-            if (_mgr != null)
-                _mgr.ShutDown();
+            _mgr?.ShutDown();
         }
 
         internal override void StopProcessing()
         {
             lock (_syncRoot)
             {
-                if (_lo != null)
-                {
-                    _lo.StopProcessing();
-                }
-
+                _lo?.StopProcessing();
                 _isStopped = true;
             }
         }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs b/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs
index 1909b03939c..333b0b42689 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/OutputQueue.cs
@@ -43,8 +43,7 @@ internal OutputGroupQueue(FormattedObjectsCache.ProcessCachedGroupNotification c
         /// <returns>Objects the cache needs to return. It can be null.</returns>
         internal List<PacketInfoData> Add(PacketInfoData o)
         {
-            FormatStartData fsd = o as FormatStartData;
-            if (fsd != null)
+            if (o is FormatStartData fsd)
             {
                 // just cache the reference (used during the notification call)
                 _formatStartData = fsd;
@@ -120,12 +119,10 @@ private void UpdateObjectCount(PacketInfoData o)
         {
             // add only of it's not a control message
             // and it's not out of band
-            FormatEntryData fed = o as FormatEntryData;
-
-            if (fed == null || fed.outOfBand)
-                return;
-
-            _currentObjectCount++;
+            if (o is FormatEntryData fed && !fed.outOfBand)
+            {
+                _currentObjectCount++;
+            }
         }
 
         private void Notify()
@@ -139,8 +136,7 @@ private void Notify()
 
             foreach (PacketInfoData x in _queue)
             {
-                FormatEntryData fed = x as FormatEntryData;
-                if (fed != null && fed.outOfBand)
+                if (x is FormatEntryData fed && fed.outOfBand)
                     continue;
 
                 validObjects.Add(x);
diff --git a/src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs b/src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs
index b8e1890b37f..534f9541195 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs
@@ -1,6 +1,10 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Collections;
+using System.Collections.Generic;
+using System.Management.Automation.Internal;
+
 namespace System.Management.Automation
 {
     #region OutputRendering
@@ -9,17 +13,14 @@ namespace System.Management.Automation
     /// </summary>
     public enum OutputRendering
     {
-        /// <summary>Automatic by PowerShell.</summary>
-        Automatic = 0,
+        /// <summary>Render ANSI only to host.</summary>
+        Host = 0,
 
         /// <summary>Render as plaintext.</summary>
         PlainText = 1,
 
         /// <summary>Render as ANSI.</summary>
         Ansi = 2,
-
-        /// <summary>Render ANSI only to host.</summary>
-        Host = 3,
     }
     #endregion OutputRendering
 
@@ -52,79 +53,79 @@ public sealed class ForegroundColor
             public string Black { get; } = "\x1b[30m";
 
             /// <summary>
-            /// Gets the color blue.
+            /// Gets the color red.
             /// </summary>
-            public string Blue { get; } = "\x1b[34m";
+            public string Red { get; } = "\x1b[31m";
 
             /// <summary>
-            /// Gets the color cyan.
+            /// Gets the color green.
             /// </summary>
-            public string Cyan { get; } = "\x1b[36m";
+            public string Green { get; } = "\x1b[32m";
 
             /// <summary>
-            /// Gets the color dark gray.
+            /// Gets the color yellow.
             /// </summary>
-            public string DarkGray { get; } = "\x1b[90m";
+            public string Yellow { get; } = "\x1b[33m";
 
             /// <summary>
-            /// Gets the color green.
+            /// Gets the color blue.
             /// </summary>
-            public string Green { get; } = "\x1b[32m";
+            public string Blue { get; } = "\x1b[34m";
 
             /// <summary>
-            /// Gets the color light blue.
+            /// Gets the color magenta.
             /// </summary>
-            public string LightBlue { get; } = "\x1b[94m";
+            public string Magenta { get; } = "\x1b[35m";
 
             /// <summary>
-            /// Gets the color light cyan.
+            /// Gets the color cyan.
             /// </summary>
-            public string LightCyan { get; } = "\x1b[96m";
+            public string Cyan { get; } = "\x1b[36m";
 
             /// <summary>
-            /// Gets the color light gray.
+            /// Gets the color white.
             /// </summary>
-            public string LightGray { get; } = "\x1b[97m";
+            public string White { get; } = "\x1b[37m";
 
             /// <summary>
-            /// Gets the color light green.
+            /// Gets the color bright black.
             /// </summary>
-            public string LightGreen { get; } = "\x1b[92m";
+            public string BrightBlack { get; } = "\x1b[90m";
 
             /// <summary>
-            /// Gets the color light magenta.
+            /// Gets the color bright red.
             /// </summary>
-            public string LightMagenta { get; } = "\x1b[95m";
+            public string BrightRed { get; } = "\x1b[91m";
 
             /// <summary>
-            /// Gets the color light red.
+            /// Gets the color bright green.
             /// </summary>
-            public string LightRed { get; } = "\x1b[91m";
+            public string BrightGreen { get; } = "\x1b[92m";
 
             /// <summary>
-            /// Gets the color light yellow.
+            /// Gets the color bright yellow.
             /// </summary>
-            public string LightYellow { get; } = "\x1b[93m";
+            public string BrightYellow { get; } = "\x1b[93m";
 
             /// <summary>
-            /// Gets the color magenta.
+            /// Gets the color bright blue.
             /// </summary>
-            public string Magenta { get; } = "\x1b[35m";
+            public string BrightBlue { get; } = "\x1b[94m";
 
             /// <summary>
-            /// Gets the color read.
+            /// Gets the color bright magenta.
             /// </summary>
-            public string Red { get; } = "\x1b[31m";
+            public string BrightMagenta { get; } = "\x1b[95m";
 
             /// <summary>
-            /// Gets the color white.
+            /// Gets the color bright cyan.
             /// </summary>
-            public string White { get; } = "\x1b[37m";
+            public string BrightCyan { get; } = "\x1b[96m";
 
             /// <summary>
-            /// Gets the color yellow.
+            /// Gets the color bright white.
             /// </summary>
-            public string Yellow { get; } = "\x1b[33m";
+            public string BrightWhite { get; } = "\x1b[97m";
 
             /// <summary>
             /// Set as RGB (Red, Green, Blue).
@@ -154,6 +155,16 @@ public string FromRgb(int rgb)
 
                 return FromRgb(red, green, blue);
             }
+
+            /// <summary>
+            /// Return the VT escape sequence for a foreground color.
+            /// </summary>
+            /// <param name="color">The foreground color to be mapped from.</param>
+            /// <returns>The VT escape sequence representing the foreground color.</returns>
+            public string FromConsoleColor(ConsoleColor color)
+            {
+                return MapForegroundColorToEscapeSequence(color);
+            }
         }
 
         /// <summary>
@@ -167,79 +178,79 @@ public sealed class BackgroundColor
             public string Black { get; } = "\x1b[40m";
 
             /// <summary>
-            /// Gets the color blue.
+            /// Gets the color red.
             /// </summary>
-            public string Blue { get; } = "\x1b[44m";
+            public string Red { get; } = "\x1b[41m";
 
             /// <summary>
-            /// Gets the color cyan.
+            /// Gets the color green.
             /// </summary>
-            public string Cyan { get; } = "\x1b[46m";
+            public string Green { get; } = "\x1b[42m";
 
             /// <summary>
-            /// Gets the color dark gray.
+            /// Gets the color yellow.
             /// </summary>
-            public string DarkGray { get; } = "\x1b[100m";
+            public string Yellow { get; } = "\x1b[43m";
 
             /// <summary>
-            /// Gets the color green.
+            /// Gets the color blue.
             /// </summary>
-            public string Green { get; } = "\x1b[42m";
+            public string Blue { get; } = "\x1b[44m";
 
             /// <summary>
-            /// Gets the color light blue.
+            /// Gets the color magenta.
             /// </summary>
-            public string LightBlue { get; } = "\x1b[104m";
+            public string Magenta { get; } = "\x1b[45m";
 
             /// <summary>
-            /// Gets the color light cyan.
+            /// Gets the color cyan.
             /// </summary>
-            public string LightCyan { get; } = "\x1b[106m";
+            public string Cyan { get; } = "\x1b[46m";
 
             /// <summary>
-            /// Gets the color light gray.
+            /// Gets the color white.
             /// </summary>
-            public string LightGray { get; } = "\x1b[107m";
+            public string White { get; } = "\x1b[47m";
 
             /// <summary>
-            /// Gets the color light green.
+            /// Gets the color bright black.
             /// </summary>
-            public string LightGreen { get; } = "\x1b[102m";
+            public string BrightBlack { get; } = "\x1b[100m";
 
             /// <summary>
-            /// Gets the color light magenta.
+            /// Gets the color bright red.
             /// </summary>
-            public string LightMagenta { get; } = "\x1b[105m";
+            public string BrightRed { get; } = "\x1b[101m";
 
             /// <summary>
-            /// Gets the color light red.
+            /// Gets the color bright green.
             /// </summary>
-            public string LightRed { get; } = "\x1b[101m";
+            public string BrightGreen { get; } = "\x1b[102m";
 
             /// <summary>
-            /// Gets the color light yellow.
+            /// Gets the color bright yellow.
             /// </summary>
-            public string LightYellow { get; } = "\x1b[103m";
+            public string BrightYellow { get; } = "\x1b[103m";
 
             /// <summary>
-            /// Gets the color magenta.
+            /// Gets the color bright blue.
             /// </summary>
-            public string Magenta { get; } = "\x1b[45m";
+            public string BrightBlue { get; } = "\x1b[104m";
 
             /// <summary>
-            /// Gets the color read.
+            /// Gets the color bright magenta.
             /// </summary>
-            public string Red { get; } = "\x1b[41m";
+            public string BrightMagenta { get; } = "\x1b[105m";
 
             /// <summary>
-            /// Gets the color white.
+            /// Gets the color bright cyan.
             /// </summary>
-            public string White { get; } = "\x1b[47m";
+            public string BrightCyan { get; } = "\x1b[106m";
 
             /// <summary>
-            /// Gets the color yellow.
+            /// Gets the color bright white.
             /// </summary>
-            public string Yellow { get; } = "\x1b[43m";
+            public string BrightWhite { get; } = "\x1b[107m";
 
             /// <summary>
             /// The color set as RGB (Red, Green, Blue).
@@ -269,6 +280,16 @@ public string FromRgb(int rgb)
 
                 return FromRgb(red, green, blue);
             }
+
+            /// <summary>
+            /// Return the VT escape sequence for a background color.
+            /// </summary>
+            /// <param name="color">The background color to be mapped from.</param>
+            /// <returns>The VT escape sequence representing the background color.</returns>
+            public string FromConsoleColor(ConsoleColor color)
+            {
+                return MapBackgroundColorToEscapeSequence(color);
+            }
         }
 
         /// <summary>
@@ -279,12 +300,33 @@ public sealed class ProgressConfiguration
             /// <summary>
             /// Gets or sets the style for progress bar.
             /// </summary>
-            public string Style { get; set; } = "\x1b[33;1m";
+            public string Style
+            {
+                get => _style;
+                set => _style = ValidateNoContent(value);
+            }
+
+            private string _style = "\x1b[33;1m";
 
             /// <summary>
             /// Gets or sets the max width of the progress bar.
             /// </summary>
-            public int MaxWidth { get; set; } = 120;
+            public int MaxWidth
+            {
+                get => _maxWidth;
+                set
+                {
+                    // Width less than 18 does not render correctly due to the different parts of the progress bar.
+                    if (value < 18)
+                    {
+                        throw new ArgumentOutOfRangeException(nameof(MaxWidth), PSStyleStrings.ProgressWidthTooSmall);
+                    }
+
+                    _maxWidth = value;
+                }
+            }
+
+            private int _maxWidth = 120;
 
             /// <summary>
             /// Gets or sets the view for progress bar.
@@ -305,38 +347,299 @@ public sealed class FormattingData
             /// <summary>
             /// Gets or sets the accent style for formatting.
             /// </summary>
-            public string FormatAccent { get; set; } = "\x1b[32;1m";
+            public string FormatAccent
+            {
+                get => _formatAccent;
+                set => _formatAccent = ValidateNoContent(value);
+            }
+
+            private string _formatAccent = "\x1b[32;1m";
+
+            /// <summary>
+            /// Gets or sets the style for table headers.
+            /// </summary>
+            public string TableHeader
+            {
+                get => _tableHeader;
+                set => _tableHeader = ValidateNoContent(value);
+            }
+
+            private string _tableHeader = "\x1b[32;1m";
+
+            /// <summary>
+            /// Gets or sets the style for custom table headers.
+            /// </summary>
+            public string CustomTableHeaderLabel
+            {
+                get => _customTableHeaderLabel;
+                set => _customTableHeaderLabel = ValidateNoContent(value);
+            }
+
+            private string _customTableHeaderLabel = "\x1b[32;1;3m";
 
             /// <summary>
             /// Gets or sets the accent style for errors.
             /// </summary>
-            public string ErrorAccent { get; set; } = "\x1b[36;1m";
+            public string ErrorAccent
+            {
+                get => _errorAccent;
+                set => _errorAccent = ValidateNoContent(value);
+            }
+
+            private string _errorAccent = "\x1b[36;1m";
 
             /// <summary>
             /// Gets or sets the style for error messages.
             /// </summary>
-            public string Error { get; set; } = "\x1b[31;1m";
+            public string Error
+            {
+                get => _error;
+                set => _error = ValidateNoContent(value);
+            }
+
+            private string _error = "\x1b[31;1m";
 
             /// <summary>
             /// Gets or sets the style for warning messages.
             /// </summary>
-            public string Warning { get; set; } = "\x1b[33;1m";
+            public string Warning
+            {
+                get => _warning;
+                set => _warning = ValidateNoContent(value);
+            }
+
+            private string _warning = "\x1b[33;1m";
 
             /// <summary>
             /// Gets or sets the style for verbose messages.
             /// </summary>
-            public string Verbose { get; set; } = "\x1b[33;1m";
+            public string Verbose
+            {
+                get => _verbose;
+                set => _verbose = ValidateNoContent(value);
+            }
+
+            private string _verbose = "\x1b[33;1m";
 
             /// <summary>
             /// Gets or sets the style for debug messages.
             /// </summary>
-            public string Debug { get; set; } = "\x1b[33;1m";
+            public string Debug
+            {
+                get => _debug;
+                set => _debug = ValidateNoContent(value);
+            }
+
+            private string _debug = "\x1b[33;1m";
+
+            /// <summary>
+            /// Gets or sets the style for rendering feedback provider names.
+            /// </summary>
+            public string FeedbackName
+            {
+                get => _feedbackName;
+                set => _feedbackName = ValidateNoContent(value);
+            }
+
+            // Yellow by default.
+            private string _feedbackName = "\x1b[33m";
+
+            /// <summary>
+            /// Gets or sets the style for rendering feedback message.
+            /// </summary>
+            public string FeedbackText
+            {
+                get => _feedbackText;
+                set => _feedbackText = ValidateNoContent(value);
+            }
+
+            // BrightCyan by default.
+            private string _feedbackText = "\x1b[96m";
+
+            /// <summary>
+            /// Gets or sets the style for rendering feedback actions.
+            /// </summary>
+            public string FeedbackAction
+            {
+                get => _feedbackAction;
+                set => _feedbackAction = ValidateNoContent(value);
+            }
+
+            // BrightWhite by default.
+            private string _feedbackAction = "\x1b[97m";
+        }
+
+        /// <summary>
+        /// Contains formatting styles for FileInfo objects.
+        /// </summary>
+        public sealed class FileInfoFormatting
+        {
+            /// <summary>
+            /// Gets or sets the style for directories.
+            /// </summary>
+            public string Directory
+            {
+                get => _directory;
+                set => _directory = ValidateNoContent(value);
+            }
+
+            private string _directory = "\x1b[44;1m";
+
+            /// <summary>
+            /// Gets or sets the style for symbolic links.
+            /// </summary>
+            public string SymbolicLink
+            {
+                get => _symbolicLink;
+                set => _symbolicLink = ValidateNoContent(value);
+            }
+
+            private string _symbolicLink = "\x1b[36;1m";
+
+            /// <summary>
+            /// Gets or sets the style for executables.
+            /// </summary>
+            public string Executable
+            {
+                get => _executable;
+                set => _executable = ValidateNoContent(value);
+            }
+
+            private string _executable = "\x1b[32;1m";
+
+            /// <summary>
+            /// Custom dictionary handling validation of extension and content.
+            /// </summary>
+            public sealed class FileExtensionDictionary
+            {
+                private static string ValidateExtension(string extension)
+                {
+                    if (!extension.StartsWith('.'))
+                    {
+                        throw new ArgumentException(PSStyleStrings.ExtensionNotStartingWithPeriod);
+                    }
+
+                    return extension;
+                }
+
+                private readonly Dictionary<string, string> _extensionDictionary = new(StringComparer.OrdinalIgnoreCase);
+
+                /// <summary>
+                /// Add new extension and decoration to dictionary.
+                /// </summary>
+                /// <param name="extension">Extension to add.</param>
+                /// <param name="decoration">ANSI string value to add.</param>
+                public void Add(string extension, string decoration)
+                {
+                    _extensionDictionary.Add(ValidateExtension(extension), ValidateNoContent(decoration));
+                }
+
+                /// <summary>
+                /// Add new extension and decoration to dictionary without validation.
+                /// </summary>
+                /// <param name="extension">Extension to add.</param>
+                /// <param name="decoration">ANSI string value to add.</param>
+                internal void AddWithoutValidation(string extension, string decoration)
+                {
+                    _extensionDictionary.Add(extension, decoration);
+                }
+
+                /// <summary>
+                /// Remove an extension from dictionary.
+                /// </summary>
+                /// <param name="extension">Extension to remove.</param>
+                public void Remove(string extension)
+                {
+                    _extensionDictionary.Remove(ValidateExtension(extension));
+                }
+
+                /// <summary>
+                /// Clear the dictionary.
+                /// </summary>
+                public void Clear()
+                {
+                    _extensionDictionary.Clear();
+                }
+
+                /// <summary>
+                /// Gets or sets the decoration by specified extension.
+                /// </summary>
+                /// <param name="extension">Extension to get decoration for.</param>
+                /// <returns>The decoration for specified extension.</returns>
+                public string this[string extension]
+                {
+                    get
+                    {
+                        return _extensionDictionary[ValidateExtension(extension)];
+                    }
+
+                    set
+                    {
+                        _extensionDictionary[ValidateExtension(extension)] = ValidateNoContent(value);
+                    }
+                }
+
+                /// <summary>
+                /// Gets whether the dictionary contains the specified extension.
+                /// </summary>
+                /// <param name="extension">Extension to check for.</param>
+                /// <returns>True if the dictionary contains the specified extension, otherwise false.</returns>
+                public bool ContainsKey(string extension)
+                {
+                    if (string.IsNullOrEmpty(extension))
+                    {
+                        return false;
+                    }
+
+                    return _extensionDictionary.ContainsKey(ValidateExtension(extension));
+                }
+
+                /// <summary>
+                /// Gets the extensions for the dictionary.
+                /// </summary>
+                /// <returns>The extensions for the dictionary.</returns>
+                public IEnumerable<string> Keys
+                {
+                    get
+                    {
+                        return _extensionDictionary.Keys;
+                    }
+                }
+            }
+
+            /// <summary>
+            /// Gets the style for archive.
+            /// </summary>
+            public FileExtensionDictionary Extension { get; }
+
+            /// <summary>
+            /// Initializes a new instance of the <see cref="FileInfoFormatting"/> class.
+            /// </summary>
+            public FileInfoFormatting()
+            {
+                Extension = new FileExtensionDictionary();
+
+                // archives
+                Extension.AddWithoutValidation(".zip", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".tgz", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".gz", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".tar", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".nupkg", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".cab", "\x1b[31;1m");
+                Extension.AddWithoutValidation(".7z", "\x1b[31;1m");
+
+                // powershell
+                Extension.AddWithoutValidation(".ps1", "\x1b[33;1m");
+                Extension.AddWithoutValidation(".psd1", "\x1b[33;1m");
+                Extension.AddWithoutValidation(".psm1", "\x1b[33;1m");
+                Extension.AddWithoutValidation(".ps1xml", "\x1b[33;1m");
+            }
         }
 
         /// <summary>
         /// Gets or sets the rendering mode for output.
         /// </summary>
-        public OutputRendering OutputRendering { get; set; } = OutputRendering.Automatic;
+        public OutputRendering OutputRendering { get; set; } = OutputRendering.Host;
 
         /// <summary>
         /// Gets value to turn off all attributes.
@@ -363,6 +666,16 @@ public sealed class FormattingData
         /// </summary>
         public string Bold { get; } = "\x1b[1m";
 
+        /// <summary>
+        /// Gets value to turn off dim.
+        /// </summary>
+        public string DimOff { get; } = "\x1b[22m";
+
+        /// <summary>
+        /// Gets value to turn on dim.
+        /// </summary>
+        public string Dim { get; } = "\x1b[2m";
+
         /// <summary>
         /// Gets value to turn on hidden.
         /// </summary>
@@ -444,6 +757,11 @@ public string FormatHyperlink(string text, Uri link)
         /// </summary>
         public BackgroundColor Background { get; }
 
+        /// <summary>
+        /// Gets FileInfo colors.
+        /// </summary>
+        public FileInfoFormatting FileInfo { get; }
+
         private static readonly PSStyle s_psstyle = new PSStyle();
 
         private PSStyle()
@@ -452,6 +770,20 @@ private PSStyle()
             Progress   = new ProgressConfiguration();
             Foreground = new ForegroundColor();
             Background = new BackgroundColor();
+            FileInfo = new FileInfoFormatting();
+        }
+
+        private static string ValidateNoContent(string text)
+        {
+            ArgumentNullException.ThrowIfNull(text);
+
+            var decorartedString = new ValueStringDecorated(text);
+            if (decorartedString.ContentLength > 0)
+            {
+                throw new ArgumentException(string.Format(PSStyleStrings.TextContainsContent, decorartedString.ToString(OutputRendering.PlainText)));
+            }
+
+            return text;
         }
 
         /// <summary>
@@ -464,6 +796,116 @@ public static PSStyle Instance
                 return s_psstyle;
             }
         }
+
+        /// <summary>
+        /// The map of background console colors to escape sequences.
+        /// </summary>
+        private static readonly string[] BackgroundColorMap =
+            {
+                "\x1b[40m", // Black
+                "\x1b[44m", // DarkBlue
+                "\x1b[42m", // DarkGreen
+                "\x1b[46m", // DarkCyan
+                "\x1b[41m", // DarkRed
+                "\x1b[45m", // DarkMagenta
+                "\x1b[43m", // DarkYellow
+                "\x1b[47m", // Gray
+                "\x1b[100m", // DarkGray
+                "\x1b[104m", // Blue
+                "\x1b[102m", // Green
+                "\x1b[106m", // Cyan
+                "\x1b[101m", // Red
+                "\x1b[105m", // Magenta
+                "\x1b[103m", // Yellow
+                "\x1b[107m", // White
+            };
+
+        /// <summary>
+        /// The map of foreground console colors to escape sequences.
+        /// </summary>
+        private static readonly string[] ForegroundColorMap =
+            {
+                "\x1b[30m", // Black
+                "\x1b[34m", // DarkBlue
+                "\x1b[32m", // DarkGreen
+                "\x1b[36m", // DarkCyan
+                "\x1b[31m", // DarkRed
+                "\x1b[35m", // DarkMagenta
+                "\x1b[33m", // DarkYellow
+                "\x1b[37m", // Gray
+                "\x1b[90m", // DarkGray
+                "\x1b[94m", // Blue
+                "\x1b[92m", // Green
+                "\x1b[96m", // Cyan
+                "\x1b[91m", // Red
+                "\x1b[95m", // Magenta
+                "\x1b[93m", // Yellow
+                "\x1b[97m", // White
+            };
+
+        /// <summary>
+        /// Return the VT escape sequence for a ConsoleColor.
+        /// </summary>
+        /// <param name="color">The <see cref="ConsoleColor"/> to be mapped from.</param>
+        /// <param name="isBackground">Whether or not it's a background color.</param>
+        /// <returns>The VT escape sequence representing the color.</returns>
+        internal static string MapColorToEscapeSequence(ConsoleColor color, bool isBackground)
+        {
+            int index = (int)color;
+            if (index < 0 || index >= ForegroundColorMap.Length)
+            {
+                throw new ArgumentOutOfRangeException(paramName: nameof(color));
+            }
+
+            return (isBackground ? BackgroundColorMap : ForegroundColorMap)[index];
+        }
+
+        /// <summary>
+        /// Return the VT escape sequence for a foreground color.
+        /// </summary>
+        /// <param name="foregroundColor">The foreground color to be mapped from.</param>
+        /// <returns>The VT escape sequence representing the foreground color.</returns>
+        public static string MapForegroundColorToEscapeSequence(ConsoleColor foregroundColor)
+            => MapColorToEscapeSequence(foregroundColor, isBackground: false);
+
+        /// <summary>
+        /// Return the VT escape sequence for a background color.
+        /// </summary>
+        /// <param name="backgroundColor">The background color to be mapped from.</param>
+        /// <returns>The VT escape sequence representing the background color.</returns>
+        public static string MapBackgroundColorToEscapeSequence(ConsoleColor backgroundColor)
+            => MapColorToEscapeSequence(backgroundColor, isBackground: true);
+
+        /// <summary>
+        /// Return the VT escape sequence for a pair of foreground and background colors.
+        /// </summary>
+        /// <param name="foregroundColor">The foreground color of the color pair.</param>
+        /// <param name="backgroundColor">The background color of the color pair.</param>
+        /// <returns>The VT escape sequence representing the foreground and background color pair.</returns>
+        public static string MapColorPairToEscapeSequence(ConsoleColor foregroundColor, ConsoleColor backgroundColor)
+        {
+            int foreIndex = (int)foregroundColor;
+            int backIndex = (int)backgroundColor;
+
+            if (foreIndex < 0 || foreIndex >= ForegroundColorMap.Length)
+            {
+                throw new ArgumentOutOfRangeException(paramName: nameof(foregroundColor));
+            }
+
+            if (backIndex < 0 || backIndex >= BackgroundColorMap.Length)
+            {
+                throw new ArgumentOutOfRangeException(paramName: nameof(backgroundColor));
+            }
+
+            string foreground = ForegroundColorMap[foreIndex];
+            string background = BackgroundColorMap[backIndex];
+
+            return string.Concat(
+                foreground.AsSpan(start: 0, length: foreground.Length - 1),
+                ";".AsSpan(),
+                background.AsSpan(start: 2));
+        }
     }
+
     #endregion PSStyle
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/StringDecorated.cs b/src/System.Management.Automation/FormatAndOutput/common/StringDecorated.cs
index 3c1041f9c47..c76d5ebc50e 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/StringDecorated.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/StringDecorated.cs
@@ -3,6 +3,7 @@
 
 #nullable enable
 
+using System.Collections.Generic;
 using System.Text.RegularExpressions;
 
 namespace System.Management.Automation.Internal
@@ -20,10 +21,7 @@ private string PlainText
         {
             get
             {
-                if (_plaintextcontent == null)
-                {
-                    _plaintextcontent = ValueStringDecorated.AnsiRegex.Replace(_text, string.Empty);
-                }
+                _plaintextcontent ??= ValueStringDecorated.AnsiRegex.Replace(_text, string.Empty);
 
                 return _plaintextcontent;
             }
@@ -55,7 +53,10 @@ public StringDecorated(string text)
         /// Render the decorarted string using automatic output rendering.
         /// </summary>
         /// <returns>Rendered string based on automatic output rendering.</returns>
-        public override string ToString() => _isDecorated ? ToString(OutputRendering.Automatic) : _text;
+        public override string ToString() => ToString(
+            PSStyle.Instance.OutputRendering == OutputRendering.PlainText
+                ? OutputRendering.PlainText
+                : OutputRendering.Ansi);
 
         /// <summary>
         /// Return string representation of content depending on output rendering mode.
@@ -64,28 +65,17 @@ public StringDecorated(string text)
         /// <returns>Rendered string based on outputRendering.</returns>
         public string ToString(OutputRendering outputRendering)
         {
-            if (!_isDecorated)
-            {
-                return _text;
-            }
-
-            if (outputRendering == OutputRendering.Automatic)
+            if (outputRendering == OutputRendering.Host)
             {
-                outputRendering = OutputRendering.Ansi;
-                if (PSStyle.Instance.OutputRendering == OutputRendering.PlainText)
-                {
-                    outputRendering = OutputRendering.PlainText;
-                }
+                throw new ArgumentException(StringDecoratedStrings.RequireExplicitRendering);
             }
 
-            if (outputRendering == OutputRendering.PlainText)
-            {
-                return PlainText;
-            }
-            else
+            if (!_isDecorated)
             {
                 return _text;
             }
+
+            return outputRendering == OutputRendering.PlainText ? PlainText : _text;
         }
     }
 
@@ -95,22 +85,53 @@ internal struct ValueStringDecorated
         private readonly bool _isDecorated;
         private readonly string _text;
         private string? _plaintextcontent;
+        private Dictionary<int, int>? _vtRanges;
 
         private string PlainText
         {
             get
             {
-                if (_plaintextcontent == null)
-                {
-                    _plaintextcontent = AnsiRegex.Replace(_text, string.Empty);
-                }
+                _plaintextcontent ??= AnsiRegex.Replace(_text, string.Empty);
 
                 return _plaintextcontent;
             }
         }
 
+        // graphics/color mode ESC[1;2;...m
+        private const string GraphicsRegex = @"(\x1b\[\d*(;\d+)*m)";
+
+        // CSI escape sequences
+        private const string CsiRegex = @"(\x1b\[\?\d+[hl])";
+
+        // Hyperlink escape sequences. Note: '.*?' makes '.*' do non-greedy match.
+        private const string HyperlinkRegex = @"(\x1b\]8;;.*?\x1b\\)";
+
         // replace regex with .NET 6 API once available
-        internal static readonly Regex AnsiRegex = new Regex(@"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])", RegexOptions.Compiled);
+        internal static readonly Regex AnsiRegex = new Regex($"{GraphicsRegex}|{CsiRegex}|{HyperlinkRegex}", RegexOptions.Compiled);
+
+        /// <summary>
+        /// Get the ranges of all escape sequences in the text.
+        /// </summary>
+        /// <returns>
+        /// A dictionary with the key being the starting index of an escape sequence,
+        /// and the value being the length of the escape sequence.
+        /// </returns>
+        internal Dictionary<int, int>? EscapeSequenceRanges
+        {
+            get
+            {
+                if (_isDecorated && _vtRanges is null)
+                {
+                    _vtRanges = new Dictionary<int, int>();
+                    foreach (Match match in AnsiRegex.Matches(_text))
+                    {
+                        _vtRanges.Add(match.Index, match.Length);
+                    }
+                }
+
+                return _vtRanges;
+            }
+        }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="ValueStringDecorated"/> struct.
@@ -120,7 +141,8 @@ public ValueStringDecorated(string text)
         {
             _text = text;
             _isDecorated = text.Contains(ESC);
-            _plaintextcontent = null;
+            _plaintextcontent = _isDecorated ? null : text;
+            _vtRanges = null;
         }
 
         /// <summary>
@@ -139,7 +161,10 @@ public ValueStringDecorated(string text)
         /// Render the decorarted string using automatic output rendering.
         /// </summary>
         /// <returns>Rendered string based on automatic output rendering.</returns>
-        public override string ToString() => _isDecorated ? ToString(OutputRendering.Automatic) : _text;
+        public override string ToString() => ToString(
+            PSStyle.Instance.OutputRendering == OutputRendering.PlainText
+                ? OutputRendering.PlainText
+                : OutputRendering.Ansi);
 
         /// <summary>
         /// Return string representation of content depending on output rendering mode.
@@ -148,28 +173,17 @@ public ValueStringDecorated(string text)
         /// <returns>Rendered string based on outputRendering.</returns>
         public string ToString(OutputRendering outputRendering)
         {
-            if (!_isDecorated)
+            if (outputRendering == OutputRendering.Host)
             {
-                return _text;
-            }
-
-            if (outputRendering == OutputRendering.Automatic)
-            {
-                outputRendering = OutputRendering.Ansi;
-                if (PSStyle.Instance.OutputRendering == OutputRendering.PlainText)
-                {
-                    outputRendering = OutputRendering.PlainText;
-                }
+                throw new ArgumentException(StringDecoratedStrings.RequireExplicitRendering);
             }
 
-            if (outputRendering == OutputRendering.PlainText)
-            {
-                return PlainText;
-            }
-            else
+            if (!_isDecorated)
             {
                 return _text;
             }
+
+            return outputRendering == OutputRendering.PlainText ? PlainText : _text;
         }
     }
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs
index 54aaa9438c5..49b9005a88e 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/TableWriter.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.Collections.Specialized;
+using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Text;
 
@@ -16,16 +17,17 @@ internal class TableWriter
         /// <summary>
         /// Information about each column boundaries.
         /// </summary>
-        private class ColumnInfo
+        private sealed class ColumnInfo
         {
             internal int startCol = 0;
             internal int width = 0;
             internal int alignment = TextAlignment.Left;
+            internal bool HeaderMatchesProperty = true;
         }
         /// <summary>
         /// Class containing information about the tabular layout.
         /// </summary>
-        private class ScreenInfo
+        private sealed class ScreenInfo
         {
             internal int screenColumns = 0;
             internal int screenRows = 0;
@@ -41,9 +43,6 @@ private class ScreenInfo
 
         private ScreenInfo _si;
 
-        private const char ESC = '\u001b';
-        private const string ResetConsoleVt100Code = "\u001b[m";
-
         private List<string> _header;
 
         internal static int ComputeWideViewBestItemsPerRowFit(int stringLen, int screenColumns)
@@ -84,9 +83,10 @@ internal static int ComputeWideViewBestItemsPerRowFit(int stringLen, int screenC
         /// <param name="screenColumns">Number of character columns on the screen.</param>
         /// <param name="columnWidths">Array of specified column widths.</param>
         /// <param name="alignment">Array of alignment flags.</param>
+        /// <param name="headerMatchesProperty">Array of flags where the header label matches a property name.</param>
         /// <param name="suppressHeader">If true, suppress header printing.</param>
         /// <param name="screenRows">Number of rows on the screen.</param>
-        internal void Initialize(int leftMarginIndent, int screenColumns, Span<int> columnWidths, ReadOnlySpan<int> alignment, bool suppressHeader, int screenRows = int.MaxValue)
+        internal void Initialize(int leftMarginIndent, int screenColumns, Span<int> columnWidths, ReadOnlySpan<int> alignment, ReadOnlySpan<bool> headerMatchesProperty, bool suppressHeader, int screenRows = int.MaxValue)
         {
             if (leftMarginIndent < 0)
             {
@@ -141,6 +141,11 @@ internal void Initialize(int leftMarginIndent, int screenColumns, Span<int> colu
                 _si.columnInfo[k].startCol = startCol;
                 _si.columnInfo[k].width = columnWidths[k];
                 _si.columnInfo[k].alignment = alignment[k];
+                if (!headerMatchesProperty.IsEmpty)
+                {
+                    _si.columnInfo[k].HeaderMatchesProperty = headerMatchesProperty[k];
+                }
+
                 startCol += columnWidths[k] + ScreenInfo.separatorCharacterCount;
             }
         }
@@ -153,6 +158,9 @@ internal int GenerateHeader(string[] values, LineOutput lo)
             }
             else if (_header != null)
             {
+                string style = PSStyle.Instance.Formatting.TableHeader;
+                string reset = PSStyle.Instance.Reset;
+
                 foreach (string line in _header)
                 {
                     lo.WriteLine(line);
@@ -164,7 +172,7 @@ internal int GenerateHeader(string[] values, LineOutput lo)
             _header = new List<string>();
 
             // generate the row with the header labels
-            GenerateRow(values, lo, true, null, lo.DisplayCells, _header);
+            GenerateRow(values, lo, true, null, lo.DisplayCells, _header, isHeader: true);
 
             // generate an array of "--" as header markers below
             // the column header labels
@@ -191,14 +199,16 @@ internal int GenerateHeader(string[] values, LineOutput lo)
                 breakLine[k] = StringUtil.DashPadding(count);
             }
 
-            GenerateRow(breakLine, lo, false, null, lo.DisplayCells, _header);
+            GenerateRow(breakLine, lo, false, null, lo.DisplayCells, _header, isHeader: true);
             return _header.Count;
         }
 
-        internal void GenerateRow(string[] values, LineOutput lo, bool multiLine, ReadOnlySpan<int> alignment, DisplayCells dc, List<string> generatedRows)
+        internal void GenerateRow(string[] values, LineOutput lo, bool multiLine, ReadOnlySpan<int> alignment, DisplayCells dc, List<string> generatedRows, bool isHeader = false)
         {
             if (_disabled)
+            {
                 return;
+            }
 
             // build the current row alignment settings
             int cols = _si.columnInfo.Length;
@@ -216,15 +226,22 @@ internal void GenerateRow(string[] values, LineOutput lo, bool multiLine, ReadOn
                 for (int i = 0; i < currentAlignment.Length; i++)
                 {
                     if (alignment[i] == TextAlignment.Undefined)
+                    {
                         currentAlignment[i] = _si.columnInfo[i].alignment;
+                    }
                     else
+                    {
                         currentAlignment[i] = alignment[i];
+                    }
                 }
             }
 
+            string style = PSStyle.Instance.Formatting.TableHeader;
+            string reset = PSStyle.Instance.Reset;
+
             if (multiLine)
             {
-                foreach (string line in GenerateTableRow(values, currentAlignment, lo.DisplayCells))
+                foreach (string line in GenerateTableRow(values, currentAlignment, lo.DisplayCells, isHeader))
                 {
                     generatedRows?.Add(line);
                     lo.WriteLine(line);
@@ -232,13 +249,13 @@ internal void GenerateRow(string[] values, LineOutput lo, bool multiLine, ReadOn
             }
             else
             {
-                string line = GenerateRow(values, currentAlignment, dc);
+                string line = GenerateRow(values, currentAlignment, dc, isHeader);
                 generatedRows?.Add(line);
                 lo.WriteLine(line);
             }
         }
 
-        private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment, DisplayCells ds)
+        private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment, DisplayCells ds, bool isHeader)
         {
             // select the active columns (skip hidden ones)
             Span<int> validColumnArray = _si.columnInfo.Length <= OutCommandInner.StackAllocThreshold ? stackalloc int[_si.columnInfo.Length] : new int[_si.columnInfo.Length];
@@ -267,8 +284,7 @@ private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment,
                 }
 
                 // obtain a set of tokens for each field
-                scArray[k] = GenerateMultiLineRowField(values[validColumnArray[k]], validColumnArray[k],
-                    alignment[validColumnArray[k]], ds, addPadding);
+                scArray[k] = GenerateMultiLineRowField(values[validColumnArray[k]], validColumnArray[k], alignment[validColumnArray[k]], ds, addPadding);
 
                 // NOTE: the following padding operations assume that we
                 // pad with a blank (or any character that ALWAYS maps to a single screen cell
@@ -299,7 +315,9 @@ private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment,
             for (int k = 0; k < scArray.Length; k++)
             {
                 if (scArray[k].Count > screenRows)
+                {
                     screenRows = scArray[k].Count;
+                }
             }
 
             // column headers can span multiple rows if the width of the column is shorter than the header text like:
@@ -311,7 +329,6 @@ private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment,
             // 1    2       3
             //
             // To ensure we don't add whitespace to the end, we need to determine the last column in each row with content
-
             System.Span<int> lastColWithContent = screenRows <= OutCommandInner.StackAllocThreshold ? stackalloc int[screenRows] : new int[screenRows];
             for (int row = 0; row < screenRows; row++)
             {
@@ -366,17 +383,36 @@ private string[] GenerateTableRow(string[] values, ReadOnlySpan<int> alignment,
             for (int row = 0; row < screenRows; row++)
             {
                 StringBuilder sb = new StringBuilder();
+
                 // for a given row, walk the columns
                 for (int col = 0; col < scArray.Length; col++)
                 {
+                    string value = scArray[col][row];
+
                     // if the column is the last column with content, we need to trim trailing whitespace, unless there is only one row
                     if (col == lastColWithContent[row] && screenRows > 1)
                     {
-                        sb.Append(scArray[col][row].TrimEnd());
+                        value = value.TrimEnd();
                     }
-                    else
+
+                    if (isHeader)
                     {
-                        sb.Append(scArray[col][row]);
+                        if (_si.columnInfo[col].HeaderMatchesProperty)
+                        {
+                            sb.Append(PSStyle.Instance.Formatting.TableHeader);
+                        }
+                        else if (value.Length > 0)
+                        {
+                            // after the first column, each additional column starts with a whitespace for separation
+                            value = value.Insert(col == 0 ? 0 : 1, PSStyle.Instance.Formatting.CustomTableHeaderLabel);
+                        }
+                    }
+
+                    sb.Append(value);
+
+                    if (isHeader)
+                    {
+                        sb.Append(PSStyle.Instance.Reset);
                     }
                 }
 
@@ -403,7 +439,7 @@ private StringCollection GenerateMultiLineRowField(string val, int k, int alignm
             return sc;
         }
 
-        private string GenerateRow(string[] values, ReadOnlySpan<int> alignment, DisplayCells dc)
+        private string GenerateRow(string[] values, ReadOnlySpan<int> alignment, DisplayCells dc, bool isHeader)
         {
             StringBuilder sb = new StringBuilder();
 
@@ -437,11 +473,18 @@ private string GenerateRow(string[] values, ReadOnlySpan<int> alignment, Display
                     }
                 }
 
-                sb.Append(GenerateRowField(values[k], _si.columnInfo[k].width, alignment[k], dc, addPadding));
-                if (values[k].Contains(ESC))
+                string rowField = GenerateRowField(values[k], _si.columnInfo[k].width, alignment[k], dc, addPadding);
+                if (isHeader)
+                {
+                    sb.Append(PSStyle.Instance.Formatting.TableHeader);
+                }
+
+                sb.Append(rowField);
+
+                if (isHeader || (rowField is not null && rowField.Contains(ValueStringDecorated.ESC) && !rowField.AsSpan().TrimEnd().EndsWith(PSStyle.Instance.Reset)))
                 {
                     // Reset the console output if the content of this column contains ESC
-                    sb.Append(ResetConsoleVt100Code);
+                    sb.Append(PSStyle.Instance.Reset);
                 }
             }
 
@@ -452,14 +495,12 @@ private static string GenerateRowField(string val, int width, int alignment, Dis
         {
             // make sure the string does not have any embedded <CR> in it
             string s = StringManipulationHelper.TruncateAtNewLine(val);
-
-            string currentValue = s;
-            int currentValueDisplayLength = dc.Length(currentValue);
+            int currentValueDisplayLength = dc.Length(s);
 
             if (currentValueDisplayLength < width)
             {
                 // the string is shorter than the width of the column
-                // need to pad with with blanks to reach the desired width
+                // need to pad with blanks to reach the desired width
                 int padCount = width - currentValueDisplayLength;
                 switch (alignment)
                 {
@@ -511,18 +552,10 @@ private static string GenerateRowField(string val, int width, int alignment, Dis
                         case TextAlignment.Right:
                             {
                                 // get from "abcdef" to "...f"
-                                int tailCount = dc.GetTailSplitLength(s, truncationDisplayLength);
-                                s = s.Substring(s.Length - tailCount);
-                                s = PSObjectHelper.Ellipsis + s;
-                            }
-
-                            break;
-
-                        case TextAlignment.Center:
-                            {
-                                // get from "abcdef" to "a..."
-                                s = s.Substring(0, dc.GetHeadSplitLength(s, truncationDisplayLength));
-                                s += PSObjectHelper.Ellipsis;
+                                s = s.VtSubstring(
+                                    startOffset: dc.TruncateHead(s, truncationDisplayLength),
+                                    prependStr: PSObjectHelper.EllipsisStr,
+                                    appendStr: null);
                             }
 
                             break;
@@ -531,8 +564,11 @@ private static string GenerateRowField(string val, int width, int alignment, Dis
                             {
                                 // left align is the default
                                 // get from "abcdef" to "a..."
-                                s = s.Substring(0, dc.GetHeadSplitLength(s, truncationDisplayLength));
-                                s += PSObjectHelper.Ellipsis;
+                                s = s.VtSubstring(
+                                    startOffset: 0,
+                                    length: dc.TruncateTail(s, truncationDisplayLength),
+                                    prependStr: null,
+                                    appendStr: PSObjectHelper.EllipsisStr);
                             }
 
                             break;
@@ -541,23 +577,12 @@ private static string GenerateRowField(string val, int width, int alignment, Dis
                 else
                 {
                     // not enough space for the ellipsis, just truncate at the width
-                    int len = width;
-
                     switch (alignment)
                     {
                         case TextAlignment.Right:
                             {
                                 // get from "abcdef" to "f"
-                                int tailCount = dc.GetTailSplitLength(s, len);
-                                s = s.Substring(s.Length - tailCount, tailCount);
-                            }
-
-                            break;
-
-                        case TextAlignment.Center:
-                            {
-                                // get from "abcdef" to "a"
-                                s = s.Substring(0, dc.GetHeadSplitLength(s, len));
+                                s = s.VtSubstring(startOffset: dc.TruncateHead(s, width));
                             }
 
                             break;
@@ -566,7 +591,7 @@ private static string GenerateRowField(string val, int width, int alignment, Dis
                             {
                                 // left align is the default
                                 // get from "abcdef" to "a"
-                                s = s.Substring(0, dc.GetHeadSplitLength(s, len));
+                                s = s.VtSubstring(startOffset: 0, length: dc.TruncateTail(s, width));
                             }
 
                             break;
diff --git a/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs b/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs
index 7760e86b13d..ea200bcb5f5 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/Utilities/MshObjectUtil.cs
@@ -26,6 +26,7 @@ internal static class PSObjectHelper
         #endregion tracer
 
         internal const char Ellipsis = '\u2026';
+        internal const string EllipsisStr = "\u2026";
 
         internal static string PSObjectIsOfExactType(Collection<string> typeNames)
         {
@@ -120,8 +121,7 @@ internal static PSPropertyExpressionResult GetDisplayName(PSObject target, PSPro
         /// <param name="obj">Object to extract the IEnumerable from.</param>
         internal static IEnumerable GetEnumerable(object obj)
         {
-            PSObject mshObj = obj as PSObject;
-            if (mshObj != null)
+            if (obj is PSObject mshObj)
             {
                 obj = mshObj.BaseObject;
             }
@@ -207,8 +207,9 @@ private static string GetObjectName(object x, PSPropertyExpressionFactory expres
         /// <param name="expressionFactory">Expression factory to create PSPropertyExpression.</param>
         /// <param name="enumerationLimit">Limit on IEnumerable enumeration.</param>
         /// <param name="formatErrorObject">Stores errors during string conversion.</param>
+        /// <param name="formatFloat">Determine if to format floating point numbers using current culture.</param>
         /// <returns>String representation.</returns>
-        internal static string SmartToString(PSObject so, PSPropertyExpressionFactory expressionFactory, int enumerationLimit, StringFormatError formatErrorObject)
+        internal static string SmartToString(PSObject so, PSPropertyExpressionFactory expressionFactory, int enumerationLimit, StringFormatError formatErrorObject, bool formatFloat = false)
         {
             if (so == null)
                 return string.Empty;
@@ -226,8 +227,7 @@ internal static string SmartToString(PSObject so, PSPropertyExpressionFactory ex
                     IEnumerator enumerator = e.GetEnumerator();
                     if (enumerator != null)
                     {
-                        IBlockingEnumerator<object> be = enumerator as IBlockingEnumerator<object>;
-                        if (be != null)
+                        if (enumerator is IBlockingEnumerator<object> be)
                         {
                             while (be.MoveNext(false))
                             {
@@ -293,7 +293,23 @@ internal static string SmartToString(PSObject so, PSPropertyExpressionFactory ex
                     return sb.ToString();
                 }
 
-                // take care of the case there is no base object
+                if (formatFloat && so.BaseObject is not null)
+                {
+                    // format numbers using the current culture
+                    if (so.BaseObject is double dbl)
+                    {
+                        return dbl.ToString("F");
+                    }
+                    else if (so.BaseObject is float f)
+                    {
+                        return f.ToString("F");
+                    }
+                    else if (so.BaseObject is decimal d)
+                    {
+                        return d.ToString("F");
+                    }
+                }
+
                 return so.ToString();
             }
             catch (Exception e) when (e is ExtendedTypeSystemException || e is InvalidOperationException)
@@ -332,43 +348,49 @@ internal static string FormatField(FieldFormattingDirective directive, object va
             StringFormatError formatErrorObject, PSPropertyExpressionFactory expressionFactory)
         {
             PSObject so = PSObjectHelper.AsPSObject(val);
-            if (directive != null && !string.IsNullOrEmpty(directive.formatString))
+            bool isTable = false;
+            if (directive is not null)
             {
-                // we have a formatting directive, apply it
-                // NOTE: with a format directive, we do not make any attempt
-                // to deal with IEnumerable
-                try
+                isTable = directive.isTable;
+                if (!string.IsNullOrEmpty(directive.formatString))
                 {
-                    // use some heuristics to determine if we have "composite formatting"
-                    // 2004/11/16-JonN This is heuristic but should be safe enough
-                    if (directive.formatString.Contains("{0") || directive.formatString.Contains('}'))
+                    // we have a formatting directive, apply it
+                    // NOTE: with a format directive, we do not make any attempt
+                    // to deal with IEnumerable
+                    try
                     {
-                        // we do have it, just use it
-                        return string.Format(CultureInfo.CurrentCulture, directive.formatString, so);
+                        // use some heuristics to determine if we have "composite formatting"
+                        // 2004/11/16-JonN This is heuristic but should be safe enough
+                        if (directive.formatString.Contains("{0") || directive.formatString.Contains('}'))
+                        {
+                            // we do have it, just use it
+                            return string.Format(CultureInfo.CurrentCulture, directive.formatString, so);
+                        }
+                        // we fall back to the PSObject's IFormattable.ToString()
+                        // pass a null IFormatProvider
+                        return so.ToString(directive.formatString, formatProvider: null);
                     }
-                    // we fall back to the PSObject's IFormattable.ToString()
-                    // pass a null IFormatProvider
-                    return so.ToString(directive.formatString, null);
-                }
-                catch (Exception e) // 2004/11/17-JonN This covers exceptions thrown in
-                                    // string.Format and PSObject.ToString().
-                                    // I think we can swallow these.
-                {
-                    // NOTE: we catch all the exceptions, since we do not know
-                    // what the underlying object access would throw
-                    if (formatErrorObject != null)
+                    catch (Exception e) // 2004/11/17-JonN This covers exceptions thrown in
+                                        // string.Format and PSObject.ToString().
+                                        // I think we can swallow these.
                     {
-                        formatErrorObject.sourceObject = so;
-                        formatErrorObject.exception = e;
-                        formatErrorObject.formatString = directive.formatString;
-                        return string.Empty;
+                        // NOTE: we catch all the exceptions, since we do not know
+                        // what the underlying object access would throw
+                        if (formatErrorObject is not null)
+                        {
+                            formatErrorObject.sourceObject = so;
+                            formatErrorObject.exception = e;
+                            formatErrorObject.formatString = directive.formatString;
+                            return string.Empty;
+                        }
                     }
                 }
             }
+
             // we do not have a formatting directive or we failed the formatting (fallback)
             // but we did not report as an error;
             // this call would deal with IEnumerable if the object implements it
-            return PSObjectHelper.SmartToString(so, expressionFactory, enumerationLimit, formatErrorObject);
+            return PSObjectHelper.SmartToString(so, expressionFactory, enumerationLimit, formatErrorObject, isTable);
         }
 
         private static PSMemberSet MaskDeserializedAndGetStandardMembers(PSObject so)
@@ -394,22 +416,18 @@ private static PSMemberSet MaskDeserializedAndGetStandardMembers(PSObject so)
 
         private static List<PSPropertyExpression> GetDefaultPropertySet(PSMemberSet standardMembersSet)
         {
-            if (standardMembersSet != null)
+            if (standardMembersSet != null && standardMembersSet.Members[TypeTable.DefaultDisplayPropertySet] is PSPropertySet defaultDisplayPropertySet)
             {
-                PSPropertySet defaultDisplayPropertySet = standardMembersSet.Members[TypeTable.DefaultDisplayPropertySet] as PSPropertySet;
-                if (defaultDisplayPropertySet != null)
+                List<PSPropertyExpression> retVal = new List<PSPropertyExpression>();
+                foreach (string prop in defaultDisplayPropertySet.ReferencedPropertyNames)
                 {
-                    List<PSPropertyExpression> retVal = new List<PSPropertyExpression>();
-                    foreach (string prop in defaultDisplayPropertySet.ReferencedPropertyNames)
+                    if (!string.IsNullOrEmpty(prop))
                     {
-                        if (!string.IsNullOrEmpty(prop))
-                        {
-                            retVal.Add(new PSPropertyExpression(prop));
-                        }
+                        retVal.Add(new PSPropertyExpression(prop));
                     }
-
-                    return retVal;
                 }
+
+                return retVal;
             }
 
             return new List<PSPropertyExpression>();
@@ -433,21 +451,17 @@ internal static List<PSPropertyExpression> GetDefaultPropertySet(PSObject so)
 
         private static PSPropertyExpression GetDefaultNameExpression(PSMemberSet standardMembersSet)
         {
-            if (standardMembersSet != null)
+            if (standardMembersSet != null && standardMembersSet.Members[TypeTable.DefaultDisplayProperty] is PSNoteProperty defaultDisplayProperty)
             {
-                PSNoteProperty defaultDisplayProperty = standardMembersSet.Members[TypeTable.DefaultDisplayProperty] as PSNoteProperty;
-                if (defaultDisplayProperty != null)
+                string expressionString = defaultDisplayProperty.Value.ToString();
+                if (string.IsNullOrEmpty(expressionString))
                 {
-                    string expressionString = defaultDisplayProperty.Value.ToString();
-                    if (string.IsNullOrEmpty(expressionString))
-                    {
-                        // invalid data, the PSObject is empty
-                        return null;
-                    }
-                    else
-                    {
-                        return new PSPropertyExpression(expressionString);
-                    }
+                    // invalid data, the PSObject is empty
+                    return null;
+                }
+                else
+                {
+                    return new PSPropertyExpression(expressionString);
                 }
             }
 
diff --git a/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs b/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs
index 68921ddb0e8..55ee3c30ddb 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/Utilities/Mshexpression.cs
@@ -215,8 +215,7 @@ public List<PSPropertyExpression> ResolveNames(PSObject target, bool expand)
             foreach (PSMemberInfo member in members)
             {
                 // it can be a property set
-                PSPropertySet propertySet = member as PSPropertySet;
-                if (propertySet != null)
+                if (member is PSPropertySet propertySet)
                 {
                     if (expand)
                     {
@@ -326,15 +325,12 @@ private PSPropertyExpressionResult GetValue(PSObject target, bool eatExceptions)
                 }
                 else
                 {
-                    if (_getValueDynamicSite == null)
-                    {
-                        _getValueDynamicSite =
-                            CallSite<Func<CallSite, object, object>>.Create(
-                                    PSGetMemberBinder.Get(
-                                        _stringValue,
-                                        classScope: (Type)null,
-                                        @static: false));
-                    }
+                    _getValueDynamicSite ??=
+                        CallSite<Func<CallSite, object, object>>.Create(
+                            PSGetMemberBinder.Get(
+                                _stringValue,
+                                classScope: (Type)null,
+                                @static: false));
 
                     result = _getValueDynamicSite.Target.Invoke(_getValueDynamicSite, target);
                 }
@@ -379,5 +375,42 @@ private static PSObject IfHashtableWrapAsPSCustomObject(PSObject target, out boo
         private bool _isResolved = false;
 
         #endregion Private Members
+
+    }
+
+    /// <summary>
+    /// Helper class to do wildcard matching on PSPropertyExpressions.
+    /// </summary>
+    internal sealed class PSPropertyExpressionFilter
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PSPropertyExpressionFilter"/> class
+        /// with the specified array of patterns.
+        /// </summary>
+        /// <param name="wildcardPatternsStrings">Array of pattern strings to use.</param>
+        internal PSPropertyExpressionFilter(string[] wildcardPatternsStrings)
+        {
+            ArgumentNullException.ThrowIfNull(wildcardPatternsStrings);
+
+            _wildcardPatterns = new WildcardPattern[wildcardPatternsStrings.Length];
+            for (int k = 0; k < wildcardPatternsStrings.Length; k++)
+            {
+                _wildcardPatterns[k] = WildcardPattern.Get(wildcardPatternsStrings[k], WildcardOptions.IgnoreCase);
+            }
+        }
+
+        /// <summary>
+        /// Try to match the expression against the array of wildcard patterns.
+        /// The first match short-circuits the search.
+        /// </summary>
+        /// <param name="expression">PSPropertyExpression to test against.</param>
+        /// <returns>True if there is a match, else false.</returns>
+        internal bool IsMatch(PSPropertyExpression expression)
+        {
+            string expressionString = expression.ToString();
+            return _wildcardPatterns.Any(pattern => pattern.IsMatch(expressionString));
+        }
+
+        private readonly WildcardPattern[] _wildcardPatterns;
     }
 }
diff --git a/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs b/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs
index 4750b099b01..f828b673de0 100644
--- a/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs
+++ b/src/System.Management.Automation/FormatAndOutput/out-console/ConsoleLineOutput.cs
@@ -1,11 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-// NOTE: define this if you want to test the output on US machine and ASCII
-// characters
-//#define TEST_MULTICELL_ON_SINGLE_CELL_LOCALE
-
 using System;
+using System.Collections.Generic;
 using System.Collections.Specialized;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
@@ -17,105 +14,50 @@
 
 namespace Microsoft.PowerShell.Commands.Internal.Format
 {
-#if TEST_MULTICELL_ON_SINGLE_CELL_LOCALE
-
-    /// <summary>
-    /// Test class to provide easily overridable behavior for testing on US machines
-    /// using US data.
-    /// NOTE: the class just forces any uppercase letter [A-Z] to be prepended
-    /// with an underscore (e.g. "A" becomes "_A", but "a" stays the same)
-    /// </summary>
-    internal class DisplayCellsTest : DisplayCells
-    {
-        internal override int Length(string str, int offset)
-        {
-            int len = 0;
-            for (int k = offset; k < str.Length; k++)
-            {
-                len += this.Length(str[k]);
-            }
-
-            return len;
-        }
-
-        internal override int Length(char character)
-        {
-            if (character >= 'A' && character <= 'Z')
-                return 2;
-            return 1;
-        }
-
-        internal override int GetHeadSplitLength(string str, int offset, int displayCells)
-        {
-            return GetSplitLengthInternalHelper(str, offset, displayCells, true);
-        }
-
-        internal override int GetTailSplitLength(string str, int offset, int displayCells)
-        {
-            return GetSplitLengthInternalHelper(str, offset, displayCells, false);
-        }
-
-        internal string GenerateTestString(string str)
-        {
-            StringBuilder sb = new StringBuilder();
-            for (int k = 0; k < str.Length; k++)
-            {
-                char ch = str[k];
-                if (this.Length(ch) == 2)
-                {
-                    sb.Append('_');
-                }
-
-                sb.Append(ch);
-            }
-
-            return sb.ToString();
-        }
-
-    }
-#endif
-
     /// <summary>
     /// Tear off class.
     /// </summary>
-    internal class DisplayCellsPSHost : DisplayCells
+    internal class DisplayCellsHost : DisplayCells
     {
-        internal DisplayCellsPSHost(PSHostRawUserInterface rawUserInterface)
+        internal DisplayCellsHost(PSHostRawUserInterface rawUserInterface)
         {
             _rawUserInterface = rawUserInterface;
         }
 
         internal override int Length(string str, int offset)
         {
-            Dbg.Assert(offset >= 0, "offset >= 0");
-            Dbg.Assert(string.IsNullOrEmpty(str) || (offset < str.Length), "offset < str.Length");
-
-            try
+            if (string.IsNullOrEmpty(str))
             {
-                return _rawUserInterface.LengthInBufferCells(str, offset);
+                return 0;
             }
-            catch
+
+            if (offset < 0 || offset >= str.Length)
             {
-                // thrown when external host rawui is not implemented, in which case
-                // we will fallback to the default value.
+                throw PSTraceSource.NewArgumentException(nameof(offset));
             }
 
-            return string.IsNullOrEmpty(str) ? 0 : str.Length - offset;
-        }
-
-        internal override int Length(string str)
-        {
             try
             {
-                return _rawUserInterface.LengthInBufferCells(str);
+                var valueStrDec = new ValueStringDecorated(str);
+                if (valueStrDec.IsDecorated)
+                {
+                    str = valueStrDec.ToString(OutputRendering.PlainText);
+                }
+
+                int length = 0;
+                for (; offset < str.Length; offset++)
+                {
+                    length += _rawUserInterface.LengthInBufferCells(str[offset]);
+                }
+
+                return length;
             }
             catch
             {
                 // thrown when external host rawui is not implemented, in which case
                 // we will fallback to the default value.
+                return base.Length(str, offset);
             }
-
-            return string.IsNullOrEmpty(str) ? 0 : str.Length;
         }
 
         internal override int Length(char character)
@@ -128,19 +70,8 @@ internal override int Length(char character)
             {
                 // thrown when external host rawui is not implemented, in which case
                 // we will fallback to the default value.
+                return base.Length(character);
             }
-
-            return 1;
-        }
-
-        internal override int GetHeadSplitLength(string str, int offset, int displayCells)
-        {
-            return GetSplitLengthInternalHelper(str, offset, displayCells, true);
-        }
-
-        internal override int GetTailSplitLength(string str, int offset, int displayCells)
-        {
-            return GetSplitLengthInternalHelper(str, offset, displayCells, false);
         }
 
         private readonly PSHostRawUserInterface _rawUserInterface;
@@ -156,6 +87,11 @@ internal sealed class ConsoleLineOutput : LineOutput
         internal static readonly PSTraceSource tracer = PSTraceSource.GetTracer("ConsoleLineOutput", "ConsoleLineOutput");
         #endregion tracer
 
+        /// <summary>
+        /// The default buffer cell calculation already works for the PowerShell console host and Visual studio code host.
+        /// </summary>
+        private static readonly HashSet<string> s_psHost = new(StringComparer.Ordinal) { "ConsoleHost", "Visual Studio Code Host" };
+
         #region LineOutput implementation
         /// <summary>
         /// The # of columns is just the width of the screen buffer (not the
@@ -234,12 +170,13 @@ internal override DisplayCells DisplayCells
             get
             {
                 CheckStopProcessing();
-                if (_displayCellsPSHost != null)
+                if (_displayCellsHost != null)
                 {
-                    return _displayCellsPSHost;
+                    return _displayCellsHost;
                 }
+
                 // fall back if we do not have a Msh host specific instance
-                return _displayCellsPSHost;
+                return _displayCellsDefault;
             }
         }
         #endregion
@@ -247,39 +184,38 @@ internal override DisplayCells DisplayCells
         /// <summary>
         /// Constructor for the ConsoleLineOutput.
         /// </summary>
-        /// <param name="hostConsole">PSHostUserInterface to wrap.</param>
+        /// <param name="host">PSHostUserInterface to wrap.</param>
         /// <param name="paging">True if we require prompting for page breaks.</param>
         /// <param name="errorContext">Error context to throw exceptions.</param>
-        internal ConsoleLineOutput(PSHostUserInterface hostConsole, bool paging, TerminatingErrorContext errorContext)
+        internal ConsoleLineOutput(PSHost host, bool paging, TerminatingErrorContext errorContext)
         {
-            if (hostConsole == null)
-                throw PSTraceSource.NewArgumentNullException(nameof(hostConsole));
+            if (host == null)
+            {
+                throw PSTraceSource.NewArgumentNullException(nameof(host));
+            }
+
             if (errorContext == null)
+            {
                 throw PSTraceSource.NewArgumentNullException(nameof(errorContext));
+            }
 
-            _console = hostConsole;
+            _console = host.UI;
             _errorContext = errorContext;
 
             if (paging)
             {
                 tracer.WriteLine("paging is needed");
-                // if we need to do paging, instantiate a prompt handler
-                // that will take care of the screen interaction
+
+                // If we need to do paging, instantiate a prompt handler that will take care of the screen interaction
                 string promptString = StringUtil.Format(FormatAndOut_out_xxx.ConsoleLineOutput_PagingPrompt);
                 _prompt = new PromptHandler(promptString, this);
             }
 
-            PSHostRawUserInterface raw = _console.RawUI;
-            if (raw != null)
+            if (!s_psHost.Contains(host.Name) && _console.RawUI is not null)
             {
-                tracer.WriteLine("there is a valid raw interface");
-#if TEST_MULTICELL_ON_SINGLE_CELL_LOCALE
-                // create a test instance with fake behavior
-                this._displayCellsPSHost = new DisplayCellsTest();
-#else
                 // set only if we have a valid raw interface
-                _displayCellsPSHost = new DisplayCellsPSHost(raw);
-#endif
+                tracer.WriteLine("there is a valid raw interface");
+                _displayCellsHost = new DisplayCellsHost(_console.RawUI);
             }
 
             // instantiate the helper to do the line processing when ILineOutput.WriteXXX() is called
@@ -302,9 +238,6 @@ internal ConsoleLineOutput(PSHostUserInterface hostConsole, bool paging, Termina
         /// <param name="s">String to write.</param>
         private void OnWriteLine(string s)
         {
-#if TEST_MULTICELL_ON_SINGLE_CELL_LOCALE
-            s = ((DisplayCellsTest)this._displayCellsPSHost).GenerateTestString(s);
-#endif
             // Do any default transcription.
             _console.TranscribeResult(s);
 
@@ -349,10 +282,6 @@ private void OnWriteLine(string s)
         /// <param name="s">String to write.</param>
         private void OnWrite(string s)
         {
-#if TEST_MULTICELL_ON_SINGLE_CELL_LOCALE
-            s = ((DisplayCellsTest)this._displayCellsPSHost).GenerateTestString(s);
-#endif
-
             switch (this.WriteStream)
             {
                 case WriteStreamType.Error:
@@ -466,7 +395,7 @@ private bool NeedToPrompt
         /// <summary>
         /// Object to manage prompting.
         /// </summary>
-        private class PromptHandler
+        private sealed class PromptHandler
         {
             /// <summary>
             /// Prompt handler with the given prompt.
@@ -591,7 +520,7 @@ internal PromptResponse PromptUser(PSHostUserInterface console)
         private readonly PromptHandler _prompt = null;
 
         /// <summary>
-        /// Conter for the # of lines written when prompting is on.
+        /// Counter for the # of lines written when prompting is on.
         /// </summary>
         private long _linesWritten = 0;
 
@@ -601,14 +530,14 @@ internal PromptResponse PromptUser(PSHostUserInterface console)
         private bool _disableLineWrittenEvent = false;
 
         /// <summary>
-        /// Refecence to the PSHostUserInterface interface we use.
+        /// Reference to the PSHostUserInterface interface we use.
         /// </summary>
         private readonly PSHostUserInterface _console = null;
 
         /// <summary>
         /// Msh host specific string manipulation helper.
         /// </summary>
-        private readonly DisplayCells _displayCellsPSHost;
+        private readonly DisplayCells _displayCellsHost;
 
         /// <summary>
         /// Reference to error context to throw Msh exceptions.
diff --git a/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs b/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs
index 2582a1e68db..20fcf54e593 100644
--- a/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs
+++ b/src/System.Management.Automation/FormatAndOutput/out-console/OutConsole.cs
@@ -14,7 +14,7 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// Null sink to absorb pipeline output.
     /// </summary>
-    [CmdletAttribute("Out", "Null", SupportsShouldProcess = false,
+    [Cmdlet("Out", "Null", SupportsShouldProcess = false,
         HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096792", RemotingCapability = RemotingCapability.None)]
     public class OutNullCommand : PSCmdlet
     {
@@ -49,7 +49,7 @@ public class OutDefaultCommand : FrontEndCommandBase
         /// invoked via API. This ensures that the objects pass through the formatting and output
         /// system, but can still make it to the API consumer.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Transcript { get; set; }
 
         /// <summary>
@@ -65,14 +65,11 @@ public OutDefaultCommand()
         /// </summary>
         protected override void BeginProcessing()
         {
-            PSHostUserInterface console = this.Host.UI;
-            ConsoleLineOutput lineOutput = new ConsoleLineOutput(console, false, new TerminatingErrorContext(this));
+            var lineOutput = new ConsoleLineOutput(Host, false, new TerminatingErrorContext(this));
 
             ((OutputManagerInner)this.implementation).LineOutput = lineOutput;
 
-            MshCommandRuntime mrt = this.CommandRuntime as MshCommandRuntime;
-
-            if (mrt != null)
+            if (this.CommandRuntime is MshCommandRuntime mrt)
             {
                 mrt.MergeUnclaimedPreviousErrorResults = true;
             }
@@ -206,8 +203,7 @@ public SwitchParameter Paging
         /// </summary>
         protected override void BeginProcessing()
         {
-            PSHostUserInterface console = this.Host.UI;
-            ConsoleLineOutput lineOutput = new ConsoleLineOutput(console, _paging, new TerminatingErrorContext(this));
+            var lineOutput = new ConsoleLineOutput(Host, _paging, new TerminatingErrorContext(this));
 
             ((OutputManagerInner)this.implementation).LineOutput = lineOutput;
             base.BeginProcessing();
diff --git a/src/System.Management.Automation/GlobalSuppressions.cs b/src/System.Management.Automation/GlobalSuppressions.cs
new file mode 100644
index 00000000000..99e9a7c98ac
--- /dev/null
+++ b/src/System.Management.Automation/GlobalSuppressions.cs
@@ -0,0 +1,8 @@
+using System.Diagnostics.CodeAnalysis;
+
+[assembly: SuppressMessage(
+    "Style",
+    "IDE0044:Add readonly modifier",
+    Justification = "see src/System.Management.Automation/engine/ComInterop/README.md",
+    Scope = "NamespaceAndDescendants",
+    Target = "~N:System.Management.Automation.ComInterop")]
diff --git a/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.cs b/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.cs
new file mode 100644
index 00000000000..29325d27899
--- /dev/null
+++ b/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.cs
@@ -0,0 +1,136 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System;
+using System.Globalization;
+using Microsoft.CodeAnalysis;
+
+namespace SMA
+{
+    /// <summary>
+    /// Source Code Generator to create partial PSVersionInfo class.
+    /// </summary>
+    [Generator]
+    public class PSVersionInfoGenerator : IIncrementalGenerator
+    {
+        /// <summary>
+        /// Not used.
+        /// </summary>
+        /// <param name="context">Generator initialization context.</param>
+        public void Initialize(IncrementalGeneratorInitializationContext context)
+        {
+            IncrementalValueProvider<BuildOptions> buildOptionsProvider = context.AnalyzerConfigOptionsProvider
+                .Select(static (provider, _) =>
+                {
+                    provider.GlobalOptions.TryGetValue("build_property.ProductVersion", out var productVersion);
+                    provider.GlobalOptions.TryGetValue("build_property.PSCoreBuildVersion", out var mainVersion);
+                    provider.GlobalOptions.TryGetValue("build_property.PowerShellVersion", out var gitDescribe);
+                    provider.GlobalOptions.TryGetValue("build_property.ReleaseTag", out var releaseTag);
+
+                    BuildOptions options = new()
+                    {
+                        ProductVersion = productVersion ?? string.Empty,
+                        MainVersion = mainVersion ?? string.Empty,
+                        GitDescribe = gitDescribe ?? string.Empty,
+                        ReleaseTag = releaseTag ?? string.Empty
+                    };
+
+                    return options;
+                });
+
+            context.RegisterSourceOutput(
+                buildOptionsProvider,
+                static (context, buildOptions) =>
+                {
+                    string gitCommitId = string.IsNullOrEmpty(buildOptions.ReleaseTag) ? buildOptions.GitDescribe : buildOptions.ReleaseTag;
+                    if (gitCommitId.StartsWith("v"))
+                    {
+                        gitCommitId = gitCommitId.Substring(1);
+                    }
+
+                    var versions = ParsePSVersion(buildOptions.MainVersion);
+                    string result = string.Format(
+                        CultureInfo.InvariantCulture,
+                        SourceTemplate,
+                        buildOptions.ProductVersion,
+                        gitCommitId,
+                        versions.major,
+                        versions.minor,
+                        versions.patch,
+                        versions.preReleaseLabel);
+
+                    // We must use specific file name suffix (*.g.cs,*.g, *.i.cs, *.generated.cs, *.designer.cs)
+                    // so that Roslyn analyzers skip the file.
+                    context.AddSource("PSVersionInfo.g.cs", result);
+                });
+        }
+
+        private struct BuildOptions
+        {
+            public string ProductVersion;
+            public string MainVersion;
+            public string GitDescribe;
+            public string ReleaseTag;
+        }
+
+        // We must put "<auto-generated" on first line so that Roslyng analyzers skip the file.
+        private const string SourceTemplate = @"// <auto-generated>
+// This file is auto-generated by PSVersionInfoGenerator.
+// </auto-generated>
+
+namespace System.Management.Automation
+{{
+    public static partial class PSVersionInfo
+    {{
+        // Defined in 'PowerShell.Common.props' as 'ProductVersion'
+        // Example:
+        //  - when built from a commit:              ProductVersion = '7.3.0-preview.8 Commits: 29 SHA: 52c6b...'
+        //  - when built from a preview release tag: ProductVersion = '7.3.0-preview.8 SHA: f1ec9...'
+        //  - when built from a stable release tag:  ProductVersion = '7.3.0 SHA: f1ec9...'
+        internal const string ProductVersion = ""{0}"";
+
+        // The git commit id that the build is based off.
+        // Defined in 'PowerShell.Common.props' as 'PowerShellVersion' or 'ReleaseTag',
+        // depending on whether the '-ReleaseTag' is specified when building.
+        // Example:
+        //  - when built from a commit:              GitCommitId = '7.3.0-preview.8-29-g52c6b...'
+        //  - when built from a preview release tag: GitCommitId = '7.3.0-preview.8'
+        //  - when built from a stable release tag:  GitCommitId = '7.3.0'
+        internal const string GitCommitId = ""{1}"";
+
+        // The PowerShell version components.
+        // The version string is defined in 'PowerShell.Common.props' as 'PSCoreBuildVersion',
+        // but we break it into components to save the overhead of parsing at runtime.
+        // Example:
+        //  - '7.3.0-preview.8' for preview release or private build
+        //  - '7.3.0' for stable release
+        private const int Version_Major = {2};
+        private const int Version_Minor = {3};
+        private const int Version_Patch = {4};
+        private const string Version_Label = ""{5}"";
+    }}
+}}";
+
+        private static (int major, int minor, int patch, string preReleaseLabel) ParsePSVersion(string mainVersion)
+        {
+            // We only handle the pre-defined PSVersion format here, e.g. 7.x.x or 7.x.x-preview.x
+            int dashIndex = mainVersion.IndexOf('-');
+            bool hasLabel = dashIndex != -1;
+            string preReleaseLabel = hasLabel ? mainVersion.Substring(dashIndex + 1) : string.Empty;
+
+            if (hasLabel)
+            {
+                mainVersion = mainVersion.Substring(0, dashIndex);
+            }
+
+            int majorEnd = mainVersion.IndexOf('.');
+            int minorEnd = mainVersion.LastIndexOf('.');
+
+            int major = int.Parse(mainVersion.Substring(0, majorEnd), NumberStyles.Integer, CultureInfo.InvariantCulture);
+            int minor = int.Parse(mainVersion.Substring(majorEnd + 1, minorEnd - majorEnd - 1), NumberStyles.Integer, CultureInfo.InvariantCulture);
+            int patch = int.Parse(mainVersion.Substring(minorEnd + 1), NumberStyles.Integer, CultureInfo.InvariantCulture);
+
+            return (major, minor, patch, preReleaseLabel);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.csproj b/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.csproj
new file mode 100644
index 00000000000..86dd852a8d8
--- /dev/null
+++ b/src/System.Management.Automation/SourceGenerators/PSVersionInfoGenerator/PSVersionInfoGenerator.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
+  <PropertyGroup>
+    <Description>Generate code for SMA using source generator</Description>
+    <AssemblyName>SMA.Generator</AssemblyName>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <!-- source generator project needs to target 'netstandard2.0' -->
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <LangVersion>preview</LangVersion>
+    <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
+    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="5.6.0" PrivateAssets="all" />
+    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="5.6.0" PrivateAssets="all" />
+  </ItemGroup>
+</Project>
diff --git a/src/System.Management.Automation/System.Management.Automation.csproj b/src/System.Management.Automation/System.Management.Automation.csproj
index 98231ee66bc..852b66e0efd 100644
--- a/src/System.Management.Automation/System.Management.Automation.csproj
+++ b/src/System.Management.Automation/System.Management.Automation.csproj
@@ -2,70 +2,62 @@
   <Import Project="..\..\PowerShell.Common.props" />
   <PropertyGroup>
     <Description>PowerShell's System.Management.Automation project</Description>
-    <NoWarn>$(NoWarn);CS1570;CS1734;CA1416</NoWarn>
+    <NoWarn>$(NoWarn);CS1570;CS1734;CA1416;CA2022</NoWarn>
     <AssemblyName>System.Management.Automation</AssemblyName>
   </PropertyGroup>
 
+  <PropertyGroup>
+    <!-- we persist source generator files under 'gen' folder so that they are visible to IDEs -->
+    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
+    <CompilerGeneratedFilesOutputPath>gen\SourceGenerated</CompilerGeneratedFilesOutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <!-- these properties are declared in 'PowerShell.Common.props' and used by source generator -->
+    <CompilerVisibleProperty Include="ProductVersion" />
+    <CompilerVisibleProperty Include="PSCoreBuildVersion" />
+    <CompilerVisibleProperty Include="PowerShellVersion" />
+    <CompilerVisibleProperty Include="ReleaseTag" />
+
+    <ProjectReference Include="SourceGenerators\PSVersionInfoGenerator\PSVersionInfoGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
+  </ItemGroup>
+
   <ItemGroup Condition=" '$(IsWindows)' == 'true' ">
     <ProjectReference Include="..\Microsoft.PowerShell.CoreCLR.Eventing\Microsoft.PowerShell.CoreCLR.Eventing.csproj" />
   </ItemGroup>
 
   <ItemGroup>
     <!-- the following package(s) are from https://github.com/JamesNK/Newtonsoft.Json -->
-    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
     <!-- the Application Insights package -->
-    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.17.0" />
+    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.23.0" />
     <!-- the following package(s) are from https://github.com/dotnet/corefx -->
-    <PackageReference Include="Microsoft.Win32.Registry.AccessControl" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.DirectoryServices" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.IO.FileSystem.AccessControl" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Management" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Security.AccessControl" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Security.Permissions" Version="6.0.0-preview.2.21154.6" />
-    <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0-preview.2.21154.6" />
+    <PackageReference Include="Microsoft.Win32.Registry.AccessControl" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.Configuration.ConfigurationManager" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.DirectoryServices" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.Management" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="11.0.0-preview.6.26359.118" />
+    <PackageReference Include="System.Security.Permissions" Version="11.0.0-preview.6.26359.118" />
     <!-- the following package(s) are from the powershell org -->
-    <PackageReference Include="Microsoft.Management.Infrastructure" Version="2.0.0" />
-    <PackageReference Include="Microsoft.PowerShell.Native" Version="7.2.0-preview.1" />
+    <PackageReference Include="Microsoft.Management.Infrastructure" Version="3.0.0" />
+    <PackageReference Include="Microsoft.PowerShell.Native" Version="700.0.0" />
+    <!-- Signing APIs -->
+    <PackageReference Include="Microsoft.Security.Extensions" Version="1.4.0" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <DefineConstants>$(DefineConstants);CORECLR</DefineConstants>
-  </PropertyGroup>
-
   <ItemGroup>
-    <Compile Remove="cimSupport\cmdletization\xml\cmdlets-over-objects.objectModel.autogen.cs" />
-    <Compile Remove="cimSupport\cmdletization\xml\cmdlets-over-objects.xmlSerializer.autogen.cs" />
-    <Compile Remove="engine\TransactedString.cs" />
-    <Compile Remove="engine\TransactionManager.cs" />
-    <Compile Remove="engine\hostifaces\NativeCultureResolver.cs" />
-    <Compile Remove="engine\hostifaces\RunspaceInvoke.cs" />
-    <Compile Remove="engine\remoting\commands\ResumeJob.cs" />
-    <Compile Remove="engine\remoting\commands\SuspendJob.cs" />
-    <Compile Remove="logging\eventlog\EventLogLogProvider.cs" />
-    <Compile Remove="namespaces\SafeTransactionHandle.cs" />
-    <Compile Remove="namespaces\SafeRegistryHandle.cs" />
-    <Compile Remove="namespaces\TransactedRegistry.cs" />
-    <Compile Remove="namespaces\TransactedRegistryKey.cs" />
-    <Compile Remove="namespaces\TransactedRegistrySecurity.cs" />
-    <Compile Remove="utils\BackgroundDispatcher.cs" />
-    <Compile Remove="utils\perfCounters\CounterSetInstanceBase.cs" />
-    <Compile Remove="utils\perfCounters\CounterSetRegistrarBase.cs" />
-    <Compile Remove="utils\perfCounters\PSPerfCountersMgr.cs" />
-    <Compile Remove="gen\CoreMshSnapinResources.cs" />
-    <Compile Remove="gen\ErrorPackageRemoting.cs" />
+    <!-- exclude code of source generators from compilation and IDEs (e.g. vscode and visual studio) -->
+    <Compile Remove="SourceGenerators\**\*.cs" />
+    <!-- exclude the generated code for EventResource.resx, which is not directly used -->
     <Compile Remove="gen\EventResource.cs" />
-
-    <EmbeddedResource Remove="resources\CoreMshSnapinResources.resx" />
-    <EmbeddedResource Remove="resources\ErrorPackageRemoting.resx" />
   </ItemGroup>
 
   <ItemGroup Condition=" '$(IsWindows)' != 'true' ">
+    <Compile Remove="engine\COM\**\*.cs" />
+    <Compile Remove="engine\ComInterop\**\*.cs" />
     <Compile Remove="engine\ExtraAdapter.cs" />
+    <Compile Remove="engine\Interop\Windows\**\*.cs" />
     <Compile Remove="engine\ManagementObjectAdapter.cs" />
-    <Compile Remove="engine\ComInterop\**\*.cs" />
     <Compile Remove="engine\remoting\commands\ConnectPSSession.cs" />
     <Compile Remove="engine\remoting\commands\CustomShellCommands.cs" />
     <Compile Remove="engine\remoting\commands\DisconnectPSSession.cs" />
@@ -73,4 +65,13 @@
     <Compile Remove="engine\remoting\commands\TestPSSessionConfigurationFile.cs" />
   </ItemGroup>
 
+  <ItemGroup Condition=" '$(IsWindows)' == 'true' ">
+    <Compile Remove="engine\Interop\Unix\**\*.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Update="resources\*\*.resx">
+      <ManifestResourceName>$(RootNamespace).resources.%(Filename)</ManifestResourceName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs b/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs
index 66649420101..77328bf0257 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/EnumWriter.cs
@@ -23,8 +23,8 @@ private static ModuleBuilder CreateModuleBuilder()
             return mb;
         }
 
-        private static Lazy<ModuleBuilder> s_moduleBuilder = new(CreateModuleBuilder, isThreadSafe: true);
-        private static object s_moduleBuilderUsageLock = new();
+        private static readonly Lazy<ModuleBuilder> s_moduleBuilder = new(CreateModuleBuilder, isThreadSafe: true);
+        private static readonly object s_moduleBuilderUsageLock = new();
 
         internal static string GetEnumFullName(EnumMetadataEnum enumMetadata)
         {
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/MethodInvocationInfo.cs b/src/System.Management.Automation/cimSupport/cmdletization/MethodInvocationInfo.cs
index 1640dec33b9..c2d30f6610e 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/MethodInvocationInfo.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/MethodInvocationInfo.cs
@@ -21,8 +21,8 @@ public sealed class MethodInvocationInfo
         /// <param name="returnValue">Return value of the method (ok to pass <see langword="null"/> if the method doesn't return anything).</param>
         public MethodInvocationInfo(string name, IEnumerable<MethodParameter> parameters, MethodParameter returnValue)
         {
-            if (name == null) throw new ArgumentNullException(nameof(name));
-            if (parameters == null) throw new ArgumentNullException(nameof(parameters));
+            ArgumentNullException.ThrowIfNull(name);
+            ArgumentNullException.ThrowIfNull(parameters);
             // returnValue can be null
 
             MethodName = name;
@@ -62,20 +62,17 @@ internal IEnumerable<T> GetArgumentsOfType<T>() where T : class
                     continue;
                 }
 
-                var objectInstance = methodParameter.Value as T;
-                if (objectInstance != null)
+                if (methodParameter.Value is T objectInstance)
                 {
                     result.Add(objectInstance);
                     continue;
                 }
 
-                var objectInstanceArray = methodParameter.Value as IEnumerable;
-                if (objectInstanceArray != null)
+                if (methodParameter.Value is IEnumerable objectInstanceArray)
                 {
                     foreach (object element in objectInstanceArray)
                     {
-                        var objectInstance2 = element as T;
-                        if (objectInstance2 != null)
+                        if (element is T objectInstance2)
                         {
                             result.Add(objectInstance2);
                         }
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/ObjectModelWrapper.cs b/src/System.Management.Automation/cimSupport/cmdletization/ObjectModelWrapper.cs
index a840ca527fd..082d7218023 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/ObjectModelWrapper.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/ObjectModelWrapper.cs
@@ -17,43 +17,26 @@ public abstract class CmdletAdapter<TObjectInstance>
     {
         internal void Initialize(PSCmdlet cmdlet, string className, string classVersion, IDictionary<string, string> privateData)
         {
-            if (cmdlet == null)
-            {
-                throw new ArgumentNullException(nameof(cmdlet));
-            }
-
-            if (string.IsNullOrEmpty(className))
-            {
-                throw new ArgumentNullException(nameof(className));
-            }
+            ArgumentNullException.ThrowIfNull(cmdlet);
+            ArgumentException.ThrowIfNullOrEmpty(className);
 
-            if (classVersion == null) // possible and ok to have classVersion==string.Empty
-            {
-                throw new ArgumentNullException(nameof(classVersion));
-            }
-
-            if (privateData == null)
-            {
-                throw new ArgumentNullException(nameof(privateData));
-            }
+            // possible and ok to have classVersion==string.Empty
+            ArgumentNullException.ThrowIfNull(classVersion);
+            ArgumentNullException.ThrowIfNull(privateData);
 
             _cmdlet = cmdlet;
             _className = className;
             _classVersion = classVersion;
             _privateData = privateData;
 
-            var compiledScript = this.Cmdlet as PSScriptCmdlet;
-            if (compiledScript != null)
+            if (this.Cmdlet is PSScriptCmdlet compiledScript)
             {
                 compiledScript.StoppingEvent += delegate { this.StopProcessing(); };
                 compiledScript.DisposingEvent +=
                         delegate
                         {
                             var disposable = this as IDisposable;
-                            if (disposable != null)
-                            {
-                                disposable.Dispose();
-                            }
+                            disposable?.Dispose();
                         };
             }
         }
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/QueryBuilder.cs b/src/System.Management.Automation/cimSupport/cmdletization/QueryBuilder.cs
index 36f781d98a0..e71e4c7c04f 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/QueryBuilder.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/QueryBuilder.cs
@@ -52,7 +52,7 @@ public abstract class QueryBuilder
         /// <param name="propertyName">Property name to query on.</param>
         /// <param name="allowedPropertyValues">Property values to accept in the query.</param>
         /// <param name="wildcardsEnabled">
-        /// <see langword="true"/> if <paramref name="allowedPropertyValues"/> should be treated as a <see cref="System.String"/> containing a wildcard pattern;
+        /// <see langword="true"/> if <paramref name="allowedPropertyValues"/> should be treated as a <see cref="string"/> containing a wildcard pattern;
         /// <see langword="false"/> otherwise.
         /// </param>
         /// <param name="behaviorOnNoMatch">
@@ -69,7 +69,7 @@ public virtual void FilterByProperty(string propertyName, IEnumerable allowedPro
         /// <param name="propertyName">Property name to query on.</param>
         /// <param name="excludedPropertyValues">Property values to reject in the query.</param>
         /// <param name="wildcardsEnabled">
-        /// <see langword="true"/> if <paramref name="excludedPropertyValues"/> should be treated as a <see cref="System.String"/> containing a wildcard pattern;
+        /// <see langword="true"/> if <paramref name="excludedPropertyValues"/> should be treated as a <see cref="string"/> containing a wildcard pattern;
         /// <see langword="false"/> otherwise.
         /// </param>
         /// <param name="behaviorOnNoMatch">
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs b/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs
index a663160645c..e0bbcaa3969 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/ScriptWriter.cs
@@ -100,14 +100,12 @@ internal ScriptWriter(
             }
             catch (InvalidOperationException e)
             {
-                XmlSchemaException schemaException = e.InnerException as XmlSchemaException;
-                if (schemaException != null)
+                if (e.InnerException is XmlSchemaException schemaException)
                 {
                     throw new XmlException(schemaException.Message, schemaException, schemaException.LineNumber, schemaException.LinePosition);
                 }
 
-                XmlException xmlException = e.InnerException as XmlException;
-                if (xmlException != null)
+                if (e.InnerException is XmlException xmlException)
                 {
                     throw xmlException;
                 }
@@ -240,7 +238,7 @@ private static string GetCmdletAttributes(CommonCmdletMetadata cmdletMetadata)
             StringBuilder attributes = new(150);
             if (cmdletMetadata.Aliases != null)
             {
-                attributes.Append("[Alias('" + string.Join("','", cmdletMetadata.Aliases.Select(alias => CodeGeneration.EscapeSingleQuotedStringContent(alias))) + "')]");
+                attributes.Append("[Alias('" + string.Join("','", cmdletMetadata.Aliases.Select(static alias => CodeGeneration.EscapeSingleQuotedStringContent(alias))) + "')]");
             }
 
             if (cmdletMetadata.Obsolete != null)
@@ -249,7 +247,7 @@ private static string GetCmdletAttributes(CommonCmdletMetadata cmdletMetadata)
                     ? ("'" + CodeGeneration.EscapeSingleQuotedStringContent(cmdletMetadata.Obsolete.Message) + "'")
                     : string.Empty;
                 string newline = (attributes.Length > 0) ? Environment.NewLine : string.Empty;
-                attributes.AppendFormat(CultureInfo.InvariantCulture, "{0}[Obsolete({1})]", newline, obsoleteMsg);
+                attributes.Append(CultureInfo.InvariantCulture, $"{newline}[Obsolete({obsoleteMsg})]");
             }
 
             return attributes.ToString();
@@ -386,7 +384,7 @@ private List<string> GetMethodParameterSets(StaticCmdletMetadata staticCmdlet)
             return new List<string>(parameterSetNames.Keys);
         }
 
-        private Dictionary<CommonMethodMetadata, int> _staticMethodMetadataToUniqueId = new();
+        private readonly Dictionary<CommonMethodMetadata, int> _staticMethodMetadataToUniqueId = new();
 
         private string GetMethodParameterSet(CommonMethodMetadata methodMetadata)
         {
@@ -517,13 +515,53 @@ private Type GetDotNetType(TypeMetadata typeMetadata)
             Dbg.Assert(typeMetadata != null, "Caller should verify typeMetadata != null");
 
             string psTypeText;
-            List<EnumMetadataEnum> matchingEnums = (_cmdletizationMetadata.Enums ?? Enumerable.Empty<EnumMetadataEnum>())
-                .Where(e => Regex.IsMatch(
-                    typeMetadata.PSType,
-                    string.Format(CultureInfo.InvariantCulture, @"\b{0}\b", Regex.Escape(e.EnumName)),
-                    RegexOptions.CultureInvariant))
-                .ToList();
-            EnumMetadataEnum matchingEnum = matchingEnums.Count == 1 ? matchingEnums[0] : null;
+            EnumMetadataEnum matchingEnum = null;
+
+            if (_cmdletizationMetadata.Enums is not null)
+            {
+                string psType = typeMetadata.PSType;
+                foreach (EnumMetadataEnum e in _cmdletizationMetadata.Enums)
+                {
+                    int index = psType.IndexOf(e.EnumName, StringComparison.Ordinal);
+                    if (index == -1)
+                    {
+                        // Fast return if 'PSType' doesn't contain the enum name at all.
+                        continue;
+                    }
+
+                    bool matchFound = false;
+                    if (index == 0)
+                    {
+                        // Handle 2 common cases here (cover over 99% of how enum name is used in 'PSType'):
+                        //  - 'PSType' is exactly the enum name.
+                        //  - 'PSType' is the array format of the enum.
+                        ReadOnlySpan<char> remains = psType.AsSpan(e.EnumName.Length);
+                        matchFound = remains.Length is 0 || remains.Equals("[]", StringComparison.Ordinal);
+                    }
+
+                    if (!matchFound)
+                    {
+                        // Now we have to fall back to the expensive regular expression matching, because 'PSType'
+                        // could be a composite type like 'Nullable<enum_name>' or 'Dictionary<enum_name, object>',
+                        // but we don't want the case where the enum name is part of another type's name.
+                        matchFound = Regex.IsMatch(psType, $@"\b{Regex.Escape(e.EnumName)}\b");
+                    }
+
+                    if (matchFound)
+                    {
+                        if (matchingEnum is null)
+                        {
+                            matchingEnum = e;
+                            continue;
+                        }
+
+                        // If more than one matching enum names were found, we treat it as no match found.
+                        matchingEnum = null;
+                        break;
+                    }
+                }
+            }
+
             if (matchingEnum != null)
             {
                 psTypeText = typeMetadata.PSType.Replace(matchingEnum.EnumName, EnumWriter.GetEnumFullName(matchingEnum));
@@ -788,8 +826,7 @@ private void SetParameters(CommandMetadata commandMetadata, params Dictionary<st
         private CommandMetadata GetCommandMetadata(CommonCmdletMetadata cmdletMetadata)
         {
             string defaultParameterSetName = null;
-            StaticCmdletMetadataCmdletMetadata staticCmdletMetadata = cmdletMetadata as StaticCmdletMetadataCmdletMetadata;
-            if (staticCmdletMetadata != null)
+            if (cmdletMetadata is StaticCmdletMetadataCmdletMetadata staticCmdletMetadata)
             {
                 if (!string.IsNullOrEmpty(staticCmdletMetadata.DefaultCmdletParameterSet))
                 {
@@ -1162,7 +1199,11 @@ string parameterSetName in
                             MultiplyParameterSets(
                                 GetMethodParameterSet(method), StaticMethodParameterSetTemplate, commonParameterSets))
                     {
-                        if (!firstParameterSet) output.Write(", ");
+                        if (!firstParameterSet)
+                        {
+                            output.Write(", ");
+                        }
+
                         firstParameterSet = false;
                         output.Write("'{0}'", CodeGeneration.EscapeSingleQuotedStringContent(parameterSetName));
                     }
@@ -1313,7 +1354,11 @@ private void GenerateMethodParametersProcessing(
             bool firstParameterSet = true;
             foreach (string parameterSetName in MultiplyParameterSets(GetMethodParameterSet(method), InstanceMethodParameterSetTemplate, commonParameterSets, queryParameterSets))
             {
-                if (!firstParameterSet) output.Write(", ");
+                if (!firstParameterSet)
+                {
+                    output.Write(", ");
+                }
+
                 firstParameterSet = false;
                 output.Write("'{0}'", CodeGeneration.EscapeSingleQuotedStringContent(parameterSetName));
             }
@@ -1455,7 +1500,11 @@ private static void GenerateIfBoundParameter(
             foreach (string queryParameterSetName in cmdletParameterMetadata.ParameterSets.Keys)
                 foreach (string parameterSetName in MultiplyParameterSets(queryParameterSetName, InstanceQueryParameterSetTemplate, commonParameterSets, methodParameterSets))
                 {
-                    if (!firstParameterSet) output.Write(", ");
+                    if (!firstParameterSet)
+                    {
+                        output.Write(", ");
+                    }
+
                     firstParameterSet = false;
                     output.Write("'{0}'", CodeGeneration.EscapeSingleQuotedStringContent(parameterSetName));
                 }
@@ -1622,7 +1671,7 @@ private void GenerateQueryParametersProcessing(
             GetCmdletParameters getCmdletParameters = GetGetCmdletParameters(instanceCmdlet);
             if (getCmdletParameters.QueryableProperties != null)
             {
-                foreach (PropertyMetadata property in getCmdletParameters.QueryableProperties.Where(p => p.Items != null))
+                foreach (PropertyMetadata property in getCmdletParameters.QueryableProperties.Where(static p => p.Items != null))
                 {
                     for (int i = 0; i < property.Items.Length; i++)
                     {
@@ -1681,7 +1730,7 @@ private void GenerateQueryParametersProcessing(
 
             if (getCmdletParameters.QueryableAssociations != null)
             {
-                foreach (Association association in getCmdletParameters.QueryableAssociations.Where(a => a.AssociatedInstance != null))
+                foreach (Association association in getCmdletParameters.QueryableAssociations.Where(static a => a.AssociatedInstance != null))
                 {
                     ParameterMetadata parameterMetadata = GenerateAssociationClause(
                         commonParameterSets, queryParameterSets, methodParameterSets, association, association.AssociatedInstance, output);
@@ -1983,7 +2032,7 @@ private void WriteCmdlet(TextWriter output, InstanceCmdletMetadata instanceCmdle
             }
             else if (queryParameterSets.Count == 1)
             {
-                commandMetadata.DefaultParameterSetName = queryParameterSets.Single();
+                commandMetadata.DefaultParameterSetName = queryParameterSets[0];
             }
 
             AddPassThruParameter(commonParameters, instanceCmdlet);
@@ -2100,7 +2149,7 @@ private void WriteGetCmdlet(TextWriter output)
                 /* 1 */ CodeGeneration.EscapeSingleQuotedStringContent(commandMetadata.Name));
         }
 
-        private static object s_enumCompilationLock = new();
+        private static readonly object s_enumCompilationLock = new();
 
         private static void CompileEnum(EnumMetadataEnum enumMetadata)
         {
@@ -2203,7 +2252,7 @@ internal void ReportExportedCommands(PSModuleInfo moduleInfo, string prefix)
                 {
                     cmdletMetadatas =
                         cmdletMetadatas.Concat(
-                            _cmdletizationMetadata.Class.InstanceCmdlets.Cmdlet.Select(c => c.CmdletMetadata));
+                            _cmdletizationMetadata.Class.InstanceCmdlets.Cmdlet.Select(static c => c.CmdletMetadata));
                 }
             }
 
@@ -2211,7 +2260,7 @@ internal void ReportExportedCommands(PSModuleInfo moduleInfo, string prefix)
             {
                 cmdletMetadatas =
                     cmdletMetadatas.Concat(
-                        _cmdletizationMetadata.Class.StaticCmdlets.Select(c => c.CmdletMetadata));
+                        _cmdletizationMetadata.Class.StaticCmdlets.Select(static c => c.CmdletMetadata));
             }
 
             foreach (CommonCmdletMetadata cmdletMetadata in cmdletMetadatas)
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.objectModel.autogen.cs b/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.objectModel.autogen.cs
index 8614c6a3994..76b7a3c2c52 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.objectModel.autogen.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.objectModel.autogen.cs
@@ -23,8 +23,8 @@ namespace Microsoft.PowerShell.Cmdletization.Xml
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IsNullable = false)]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlRoot(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IsNullable = false)]
     internal partial class PowerShellMetadata
     {
         private ClassMetadata _classField;
@@ -46,7 +46,7 @@ public ClassMetadata Class
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Enum", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Enum", IsNullable = false)]
         public EnumMetadataEnum[] Enums
         {
             get
@@ -64,7 +64,7 @@ public EnumMetadataEnum[] Enums
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class ClassMetadata
     {
         private string _versionField;
@@ -126,7 +126,7 @@ public ClassMetadataInstanceCmdlets InstanceCmdlets
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Cmdlet", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Cmdlet", IsNullable = false)]
         public StaticCmdletMetadata[] StaticCmdlets
         {
             get
@@ -141,7 +141,7 @@ public StaticCmdletMetadata[] StaticCmdlets
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Data", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Data", IsNullable = false)]
         public ClassMetadataData[] CmdletAdapterPrivateData
         {
             get
@@ -156,7 +156,7 @@ public ClassMetadataData[] CmdletAdapterPrivateData
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string CmdletAdapter
         {
             get
@@ -171,7 +171,7 @@ public string CmdletAdapter
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string ClassName
         {
             get
@@ -186,7 +186,7 @@ public string ClassName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string ClassVersion
         {
             get
@@ -204,7 +204,7 @@ public string ClassVersion
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class ClassMetadataInstanceCmdlets
     {
         private GetCmdletParameters _getCmdletParametersField;
@@ -242,7 +242,7 @@ public GetCmdletMetadata GetCmdlet
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Cmdlet")]
+        [System.Xml.Serialization.XmlElement("Cmdlet")]
         public InstanceCmdletMetadata[] Cmdlet
         {
             get
@@ -260,7 +260,7 @@ public InstanceCmdletMetadata[] Cmdlet
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class GetCmdletParameters
     {
         private PropertyMetadata[] _queryablePropertiesField;
@@ -272,7 +272,7 @@ internal partial class GetCmdletParameters
         private string _defaultCmdletParameterSetField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Property", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Property", IsNullable = false)]
         public PropertyMetadata[] QueryableProperties
         {
             get
@@ -287,7 +287,7 @@ public PropertyMetadata[] QueryableProperties
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem(IsNullable = false)]
         public Association[] QueryableAssociations
         {
             get
@@ -302,7 +302,7 @@ public Association[] QueryableAssociations
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Option", IsNullable = false)]
         public QueryOption[] QueryOptions
         {
             get
@@ -317,7 +317,7 @@ public QueryOption[] QueryOptions
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string DefaultCmdletParameterSet
         {
             get
@@ -335,7 +335,7 @@ public string DefaultCmdletParameterSet
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class PropertyMetadata
     {
         private TypeMetadata _typeField;
@@ -361,11 +361,11 @@ public TypeMetadata Type
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("ExcludeQuery", typeof(WildcardablePropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("MaxValueQuery", typeof(PropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("MinValueQuery", typeof(PropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("RegularQuery", typeof(WildcardablePropertyQuery))]
-        [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
+        [System.Xml.Serialization.XmlElement("ExcludeQuery", typeof(WildcardablePropertyQuery))]
+        [System.Xml.Serialization.XmlElement("MaxValueQuery", typeof(PropertyQuery))]
+        [System.Xml.Serialization.XmlElement("MinValueQuery", typeof(PropertyQuery))]
+        [System.Xml.Serialization.XmlElement("RegularQuery", typeof(WildcardablePropertyQuery))]
+        [System.Xml.Serialization.XmlChoiceIdentifier("ItemsElementName")]
         public PropertyQuery[] Items
         {
             get
@@ -380,8 +380,8 @@ public PropertyQuery[] Items
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlElement("ItemsElementName")]
+        [System.Xml.Serialization.XmlIgnore()]
         public ItemsChoiceType[] ItemsElementName
         {
             get
@@ -396,7 +396,7 @@ public ItemsChoiceType[] ItemsElementName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string PropertyName
         {
             get
@@ -414,7 +414,7 @@ public string PropertyName
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class TypeMetadata
     {
         private string _pSTypeField;
@@ -422,7 +422,7 @@ internal partial class TypeMetadata
         private string _eTSTypeField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string PSType
         {
             get
@@ -437,7 +437,7 @@ public string PSType
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string ETSType
         {
             get
@@ -455,7 +455,7 @@ public string ETSType
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class Association
     {
         private AssociationAssociatedInstance _associatedInstanceField;
@@ -481,7 +481,7 @@ public AssociationAssociatedInstance AssociatedInstance
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute("Association")]
+        [System.Xml.Serialization.XmlAttribute("Association")]
         public string Association1
         {
             get
@@ -496,7 +496,7 @@ public string Association1
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string SourceRole
         {
             get
@@ -511,7 +511,7 @@ public string SourceRole
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string ResultRole
         {
             get
@@ -529,7 +529,7 @@ public string ResultRole
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class AssociationAssociatedInstance
     {
         private TypeMetadata _typeField;
@@ -568,7 +568,7 @@ public CmdletParameterMetadataForGetCmdletFilteringParameter CmdletParameterMeta
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataForGetCmdletFilteringParameter : CmdletParameterMetadataForGetCmdletParameter
     {
         private bool _errorOnNoMatchField;
@@ -576,7 +576,7 @@ internal partial class CmdletParameterMetadataForGetCmdletFilteringParameter : C
         private bool _errorOnNoMatchFieldSpecified;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ErrorOnNoMatch
         {
             get
@@ -591,7 +591,7 @@ public bool ErrorOnNoMatch
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ErrorOnNoMatchSpecified
         {
             get
@@ -607,10 +607,10 @@ public bool ErrorOnNoMatchSpecified
     }
 
     /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
+    [System.Xml.Serialization.XmlInclude(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataForGetCmdletParameter : CmdletParameterMetadata
     {
         private bool _valueFromPipelineField;
@@ -624,7 +624,7 @@ internal partial class CmdletParameterMetadataForGetCmdletParameter : CmdletPara
         private string[] _cmdletParameterSetsField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ValueFromPipeline
         {
             get
@@ -639,7 +639,7 @@ public bool ValueFromPipeline
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ValueFromPipelineSpecified
         {
             get
@@ -654,7 +654,7 @@ public bool ValueFromPipelineSpecified
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ValueFromPipelineByPropertyName
         {
             get
@@ -669,7 +669,7 @@ public bool ValueFromPipelineByPropertyName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ValueFromPipelineByPropertyNameSpecified
         {
             get
@@ -684,7 +684,7 @@ public bool ValueFromPipelineByPropertyNameSpecified
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string[] CmdletParameterSets
         {
             get
@@ -700,13 +700,13 @@ public string[] CmdletParameterSets
     }
 
     /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForInstanceMethodParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForStaticMethodParameter))]
+    [System.Xml.Serialization.XmlInclude(typeof(CmdletParameterMetadataForGetCmdletParameter))]
+    [System.Xml.Serialization.XmlInclude(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
+    [System.Xml.Serialization.XmlInclude(typeof(CmdletParameterMetadataForInstanceMethodParameter))]
+    [System.Xml.Serialization.XmlInclude(typeof(CmdletParameterMetadataForStaticMethodParameter))]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadata
     {
         private object _allowEmptyCollectionField;
@@ -852,7 +852,7 @@ public CmdletParameterMetadataValidateRange ValidateRange
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("AllowedValue", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("AllowedValue", IsNullable = false)]
         public string[] ValidateSet
         {
             get
@@ -881,7 +881,7 @@ public ObsoleteAttributeMetadata Obsolete
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool IsMandatory
         {
             get
@@ -896,7 +896,7 @@ public bool IsMandatory
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool IsMandatorySpecified
         {
             get
@@ -911,7 +911,7 @@ public bool IsMandatorySpecified
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string[] Aliases
         {
             get
@@ -926,7 +926,7 @@ public string[] Aliases
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string PSName
         {
             get
@@ -941,7 +941,7 @@ public string PSName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "nonNegativeInteger")]
         public string Position
         {
             get
@@ -959,7 +959,7 @@ public string Position
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataValidateCount
     {
         private string _minField;
@@ -967,7 +967,7 @@ internal partial class CmdletParameterMetadataValidateCount
         private string _maxField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "nonNegativeInteger")]
         public string Min
         {
             get
@@ -982,7 +982,7 @@ public string Min
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "nonNegativeInteger")]
         public string Max
         {
             get
@@ -1000,7 +1000,7 @@ public string Max
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataValidateLength
     {
         private string _minField;
@@ -1008,7 +1008,7 @@ internal partial class CmdletParameterMetadataValidateLength
         private string _maxField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "nonNegativeInteger")]
         public string Min
         {
             get
@@ -1023,7 +1023,7 @@ public string Min
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "nonNegativeInteger")]
         public string Max
         {
             get
@@ -1041,7 +1041,7 @@ public string Max
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataValidateRange
     {
         private string _minField;
@@ -1049,7 +1049,7 @@ internal partial class CmdletParameterMetadataValidateRange
         private string _maxField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "integer")]
         public string Min
         {
             get
@@ -1064,7 +1064,7 @@ public string Min
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "integer")]
         public string Max
         {
             get
@@ -1082,13 +1082,13 @@ public string Max
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class ObsoleteAttributeMetadata
     {
         private string _messageField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string Message
         {
             get
@@ -1106,7 +1106,7 @@ public string Message
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataForInstanceMethodParameter : CmdletParameterMetadata
     {
         private bool _valueFromPipelineByPropertyNameField;
@@ -1114,7 +1114,7 @@ internal partial class CmdletParameterMetadataForInstanceMethodParameter : Cmdle
         private bool _valueFromPipelineByPropertyNameFieldSpecified;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ValueFromPipelineByPropertyName
         {
             get
@@ -1129,7 +1129,7 @@ public bool ValueFromPipelineByPropertyName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ValueFromPipelineByPropertyNameSpecified
         {
             get
@@ -1147,7 +1147,7 @@ public bool ValueFromPipelineByPropertyNameSpecified
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletParameterMetadataForStaticMethodParameter : CmdletParameterMetadata
     {
         private bool _valueFromPipelineField;
@@ -1159,7 +1159,7 @@ internal partial class CmdletParameterMetadataForStaticMethodParameter : CmdletP
         private bool _valueFromPipelineByPropertyNameFieldSpecified;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ValueFromPipeline
         {
             get
@@ -1174,7 +1174,7 @@ public bool ValueFromPipeline
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ValueFromPipelineSpecified
         {
             get
@@ -1189,7 +1189,7 @@ public bool ValueFromPipelineSpecified
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool ValueFromPipelineByPropertyName
         {
             get
@@ -1204,7 +1204,7 @@ public bool ValueFromPipelineByPropertyName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ValueFromPipelineByPropertyNameSpecified
         {
             get
@@ -1222,7 +1222,7 @@ public bool ValueFromPipelineByPropertyNameSpecified
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class QueryOption
     {
         private TypeMetadata _typeField;
@@ -1260,7 +1260,7 @@ public CmdletParameterMetadataForGetCmdletParameter CmdletParameterMetadata
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string OptionName
         {
             get
@@ -1278,7 +1278,7 @@ public string OptionName
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class GetCmdletMetadata
     {
         private CommonCmdletMetadata _cmdletMetadataField;
@@ -1317,7 +1317,7 @@ public GetCmdletParameters GetCmdletParameters
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CommonCmdletMetadata
     {
         private ObsoleteAttributeMetadata _obsoleteField;
@@ -1349,7 +1349,7 @@ public ObsoleteAttributeMetadata Obsolete
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string Verb
         {
             get
@@ -1364,7 +1364,7 @@ public string Verb
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string Noun
         {
             get
@@ -1379,7 +1379,7 @@ public string Noun
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string[] Aliases
         {
             get
@@ -1394,7 +1394,7 @@ public string[] Aliases
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public ConfirmImpact ConfirmImpact
         {
             get
@@ -1409,7 +1409,7 @@ public ConfirmImpact ConfirmImpact
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool ConfirmImpactSpecified
         {
             get
@@ -1424,7 +1424,7 @@ public bool ConfirmImpactSpecified
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "anyURI")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "anyURI")]
         public string HelpUri
         {
             get
@@ -1441,7 +1441,7 @@ public string HelpUri
 
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     public enum ConfirmImpact
     {
         /// <remarks/>
@@ -1460,7 +1460,7 @@ public enum ConfirmImpact
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class StaticCmdletMetadata
     {
         private StaticCmdletMetadataCmdletMetadata _cmdletMetadataField;
@@ -1482,7 +1482,7 @@ public StaticCmdletMetadataCmdletMetadata CmdletMetadata
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Method")]
+        [System.Xml.Serialization.XmlElement("Method")]
         public StaticMethodMetadata[] Method
         {
             get
@@ -1500,13 +1500,13 @@ public StaticMethodMetadata[] Method
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class StaticCmdletMetadataCmdletMetadata : CommonCmdletMetadata
     {
         private string _defaultCmdletParameterSetField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string DefaultCmdletParameterSet
         {
             get
@@ -1524,7 +1524,7 @@ public string DefaultCmdletParameterSet
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class StaticMethodMetadata : CommonMethodMetadata
     {
         private StaticMethodParameterMetadata[] _parametersField;
@@ -1532,7 +1532,7 @@ internal partial class StaticMethodMetadata : CommonMethodMetadata
         private string _cmdletParameterSetField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Parameter", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Parameter", IsNullable = false)]
         public StaticMethodParameterMetadata[] Parameters
         {
             get
@@ -1547,7 +1547,7 @@ public StaticMethodParameterMetadata[] Parameters
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string CmdletParameterSet
         {
             get
@@ -1565,7 +1565,7 @@ public string CmdletParameterSet
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class StaticMethodParameterMetadata : CommonMethodParameterMetadata
     {
         private CmdletParameterMetadataForStaticMethodParameter _cmdletParameterMetadataField;
@@ -1604,7 +1604,7 @@ public CmdletOutputMetadata CmdletOutputMetadata
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CmdletOutputMetadata
     {
         private object _errorCodeField;
@@ -1626,7 +1626,7 @@ public object ErrorCode
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string PSName
         {
             get
@@ -1642,11 +1642,11 @@ public string PSName
     }
 
     /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstanceMethodParameterMetadata))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StaticMethodParameterMetadata))]
+    [System.Xml.Serialization.XmlInclude(typeof(InstanceMethodParameterMetadata))]
+    [System.Xml.Serialization.XmlInclude(typeof(StaticMethodParameterMetadata))]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CommonMethodParameterMetadata
     {
         private TypeMetadata _typeField;
@@ -1670,7 +1670,7 @@ public TypeMetadata Type
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string ParameterName
         {
             get
@@ -1685,7 +1685,7 @@ public string ParameterName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string DefaultValue
         {
             get
@@ -1703,7 +1703,7 @@ public string DefaultValue
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class InstanceMethodParameterMetadata : CommonMethodParameterMetadata
     {
         private CmdletParameterMetadataForInstanceMethodParameter _cmdletParameterMetadataField;
@@ -1740,11 +1740,11 @@ public CmdletOutputMetadata CmdletOutputMetadata
     }
 
     /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstanceMethodMetadata))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StaticMethodMetadata))]
+    [System.Xml.Serialization.XmlInclude(typeof(InstanceMethodMetadata))]
+    [System.Xml.Serialization.XmlInclude(typeof(StaticMethodMetadata))]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CommonMethodMetadata
     {
         private CommonMethodMetadataReturnValue _returnValueField;
@@ -1766,7 +1766,7 @@ public CommonMethodMetadataReturnValue ReturnValue
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string MethodName
         {
             get
@@ -1784,7 +1784,7 @@ public string MethodName
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class CommonMethodMetadataReturnValue
     {
         private TypeMetadata _typeField;
@@ -1823,13 +1823,13 @@ public CmdletOutputMetadata CmdletOutputMetadata
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class InstanceMethodMetadata : CommonMethodMetadata
     {
         private InstanceMethodParameterMetadata[] _parametersField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Parameter", IsNullable = false)]
+        [System.Xml.Serialization.XmlArrayItem("Parameter", IsNullable = false)]
         public InstanceMethodParameterMetadata[] Parameters
         {
             get
@@ -1847,7 +1847,7 @@ public InstanceMethodParameterMetadata[] Parameters
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class InstanceCmdletMetadata
     {
         private CommonCmdletMetadata _cmdletMetadataField;
@@ -1900,10 +1900,10 @@ public GetCmdletParameters GetCmdletParameters
     }
 
     /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(WildcardablePropertyQuery))]
+    [System.Xml.Serialization.XmlInclude(typeof(WildcardablePropertyQuery))]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class PropertyQuery
     {
         private CmdletParameterMetadataForGetCmdletFilteringParameter _cmdletParameterMetadataField;
@@ -1926,7 +1926,7 @@ public CmdletParameterMetadataForGetCmdletFilteringParameter CmdletParameterMeta
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class WildcardablePropertyQuery : PropertyQuery
     {
         private bool _allowGlobbingField;
@@ -1934,7 +1934,7 @@ internal partial class WildcardablePropertyQuery : PropertyQuery
         private bool _allowGlobbingFieldSpecified;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool AllowGlobbing
         {
             get
@@ -1949,7 +1949,7 @@ public bool AllowGlobbing
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool AllowGlobbingSpecified
         {
             get
@@ -1966,7 +1966,7 @@ public bool AllowGlobbingSpecified
 
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IncludeInSchema = false)]
+    [System.Xml.Serialization.XmlType(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IncludeInSchema = false)]
     public enum ItemsChoiceType
     {
         /// <remarks/>
@@ -1985,7 +1985,7 @@ public enum ItemsChoiceType
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class ClassMetadataData
     {
         private string _nameField;
@@ -1993,7 +1993,7 @@ internal partial class ClassMetadataData
         private string _valueField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string Name
         {
             get
@@ -2008,7 +2008,7 @@ public string Name
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlTextAttribute()]
+        [System.Xml.Serialization.XmlText()]
         public string Value
         {
             get
@@ -2026,7 +2026,7 @@ public string Value
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class EnumMetadataEnum
     {
         private EnumMetadataEnumValue[] _valueField;
@@ -2040,7 +2040,7 @@ internal partial class EnumMetadataEnum
         private bool _bitwiseFlagsFieldSpecified;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Value")]
+        [System.Xml.Serialization.XmlElement("Value")]
         public EnumMetadataEnumValue[] Value
         {
             get
@@ -2055,7 +2055,7 @@ public EnumMetadataEnumValue[] Value
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string EnumName
         {
             get
@@ -2070,7 +2070,7 @@ public string EnumName
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string UnderlyingType
         {
             get
@@ -2085,7 +2085,7 @@ public string UnderlyingType
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public bool BitwiseFlags
         {
             get
@@ -2100,7 +2100,7 @@ public bool BitwiseFlags
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        [System.Xml.Serialization.XmlIgnore()]
         public bool BitwiseFlagsSpecified
         {
             get
@@ -2118,7 +2118,7 @@ public bool BitwiseFlagsSpecified
     /// <remarks/>
     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
+    [System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
     internal partial class EnumMetadataEnumValue
     {
         private string _nameField;
@@ -2126,7 +2126,7 @@ internal partial class EnumMetadataEnumValue
         private string _valueField;
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
+        [System.Xml.Serialization.XmlAttribute()]
         public string Name
         {
             get
@@ -2141,7 +2141,7 @@ public string Name
         }
 
         /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
+        [System.Xml.Serialization.XmlAttribute(DataType = "integer")]
         public string Value
         {
             get
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.xmlSerializer.autogen.cs b/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.xmlSerializer.autogen.cs
index 9c53032284e..6cfed8ebe2d 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.xmlSerializer.autogen.cs
+++ b/src/System.Management.Automation/cimSupport/cmdletization/xml/CoreCLR/cmdlets-over-objects.xmlSerializer.autogen.cs
@@ -289,12 +289,12 @@ protected Exception CreateUnknownNodeException()
 
         protected Exception CreateUnknownTypeException(XmlQualifiedName type)
         {
-            return new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "XmlUnknownType. Name: {0}, Namespace {1}, CurrentTag: {2}", type.Name, type.Namespace, CurrentTag()));
+            return new InvalidOperationException(string.Create(CultureInfo.CurrentCulture, $"XmlUnknownType. Name: {type.Name}, Namespace: {type.Namespace}, CurrentTag: {CurrentTag()}"));
         }
 
         protected Exception CreateUnknownConstantException(string value, Type enumType)
         {
-            return new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "XmlUnknownConstant. Value: {0}, EnumType: {1}", value, enumType.Name));
+            return new InvalidOperationException(string.Create(CultureInfo.CurrentCulture, $"XmlUnknownConstant. Value: {value}, EnumType: {enumType.Name}"));
         }
 
         protected Array ShrinkArray(Array a, int length, Type elementType, bool isNullable)
@@ -426,7 +426,7 @@ internal XmlQualifiedName ToXmlQualifiedName(string value, bool decodeName)
                 if (ns == null)
                 {
                     // Namespace prefix '{0}' is not defined.
-                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "XmlUndefinedAlias. Prefix: {0}", prefix));
+                    throw new InvalidOperationException(string.Create(CultureInfo.CurrentCulture, $"XmlUndefinedAlias. Prefix: {prefix}"));
                 }
 
                 return new XmlQualifiedName(_r.NameTable.Add(localName), ns);
@@ -6678,10 +6678,7 @@ internal sealed class PowerShellMetadataSerializer
     {
         internal object Deserialize(XmlReader reader)
         {
-            if (reader == null)
-            {
-                throw new ArgumentNullException("reader");
-            }
+            ArgumentNullException.ThrowIfNull(reader);
 
             XmlSerializationReader1 cdxmlSerializationReader = new XmlSerializationReader1(reader);
             return cdxmlSerializationReader.Read50_PowerShellMetadata();
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.objectModel.autogen.cs b/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.objectModel.autogen.cs
deleted file mode 100644
index e2b87d4adf9..00000000000
--- a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.objectModel.autogen.cs
+++ /dev/null
@@ -1,2240 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// PLEASE DO NOT EDIT THIS FILE BY HAND!!!
-//
-// This file has been generated
-// by D:\bluedev\admin\monad\src\cimSupport\cmdletization\xml\generate.ps1
-//
-// Generation timestamp: 10/21/2013 18:29:23
-
-#pragma warning disable
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.17929
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-//
-// This source code was auto-generated by xsd, Version=4.0.30319.17929.
-//
-
-namespace Microsoft.PowerShell.Cmdletization.Xml
-{
-    using System.Xml.Serialization;
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IsNullable = false)]
-    internal partial class PowerShellMetadata
-    {
-        private ClassMetadata _classField;
-
-        private EnumMetadataEnum[] _enumsField;
-
-        /// <remarks/>
-        public ClassMetadata Class
-        {
-            get
-            {
-                return this._classField;
-            }
-
-            set
-            {
-                this._classField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Enum", IsNullable = false)]
-        public EnumMetadataEnum[] Enums
-        {
-            get
-            {
-                return this._enumsField;
-            }
-
-            set
-            {
-                this._enumsField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class ClassMetadata
-    {
-        private string _versionField;
-
-        private string _defaultNounField;
-
-        private ClassMetadataInstanceCmdlets _instanceCmdletsField;
-
-        private StaticCmdletMetadata[] _staticCmdletsField;
-
-        private ClassMetadataData[] _cmdletAdapterPrivateDataField;
-
-        private string _cmdletAdapterField;
-
-        private string _classNameField;
-
-        private string _classVersionField;
-
-        /// <remarks/>
-        public string Version
-        {
-            get
-            {
-                return this._versionField;
-            }
-
-            set
-            {
-                this._versionField = value;
-            }
-        }
-
-        /// <remarks/>
-        public string DefaultNoun
-        {
-            get
-            {
-                return this._defaultNounField;
-            }
-
-            set
-            {
-                this._defaultNounField = value;
-            }
-        }
-
-        /// <remarks/>
-        public ClassMetadataInstanceCmdlets InstanceCmdlets
-        {
-            get
-            {
-                return this._instanceCmdletsField;
-            }
-
-            set
-            {
-                this._instanceCmdletsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Cmdlet", IsNullable = false)]
-        public StaticCmdletMetadata[] StaticCmdlets
-        {
-            get
-            {
-                return this._staticCmdletsField;
-            }
-
-            set
-            {
-                this._staticCmdletsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Data", IsNullable = false)]
-        public ClassMetadataData[] CmdletAdapterPrivateData
-        {
-            get
-            {
-                return this._cmdletAdapterPrivateDataField;
-            }
-
-            set
-            {
-                this._cmdletAdapterPrivateDataField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string CmdletAdapter
-        {
-            get
-            {
-                return this._cmdletAdapterField;
-            }
-
-            set
-            {
-                this._cmdletAdapterField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string ClassName
-        {
-            get
-            {
-                return this._classNameField;
-            }
-
-            set
-            {
-                this._classNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string ClassVersion
-        {
-            get
-            {
-                return this._classVersionField;
-            }
-
-            set
-            {
-                this._classVersionField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class ClassMetadataInstanceCmdlets
-    {
-        private GetCmdletParameters _getCmdletParametersField;
-
-        private GetCmdletMetadata _getCmdletField;
-
-        private InstanceCmdletMetadata[] _cmdletField;
-
-        /// <remarks/>
-        public GetCmdletParameters GetCmdletParameters
-        {
-            get
-            {
-                return this._getCmdletParametersField;
-            }
-
-            set
-            {
-                this._getCmdletParametersField = value;
-            }
-        }
-
-        /// <remarks/>
-        public GetCmdletMetadata GetCmdlet
-        {
-            get
-            {
-                return this._getCmdletField;
-            }
-
-            set
-            {
-                this._getCmdletField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Cmdlet")]
-        public InstanceCmdletMetadata[] Cmdlet
-        {
-            get
-            {
-                return this._cmdletField;
-            }
-
-            set
-            {
-                this._cmdletField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class GetCmdletParameters
-    {
-        private PropertyMetadata[] _queryablePropertiesField;
-
-        private Association[] _queryableAssociationsField;
-
-        private QueryOption[] _queryOptionsField;
-
-        private string _defaultCmdletParameterSetField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Property", IsNullable = false)]
-        public PropertyMetadata[] QueryableProperties
-        {
-            get
-            {
-                return this._queryablePropertiesField;
-            }
-
-            set
-            {
-                this._queryablePropertiesField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
-        public Association[] QueryableAssociations
-        {
-            get
-            {
-                return this._queryableAssociationsField;
-            }
-
-            set
-            {
-                this._queryableAssociationsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable = false)]
-        public QueryOption[] QueryOptions
-        {
-            get
-            {
-                return this._queryOptionsField;
-            }
-
-            set
-            {
-                this._queryOptionsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string DefaultCmdletParameterSet
-        {
-            get
-            {
-                return this._defaultCmdletParameterSetField;
-            }
-
-            set
-            {
-                this._defaultCmdletParameterSetField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class PropertyMetadata
-    {
-        private TypeMetadata _typeField;
-
-        private PropertyQuery[] _itemsField;
-
-        private ItemsChoiceType[] _itemsElementNameField;
-
-        private string _propertyNameField;
-
-        /// <remarks/>
-        public TypeMetadata Type
-        {
-            get
-            {
-                return this._typeField;
-            }
-
-            set
-            {
-                this._typeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("ExcludeQuery", typeof(WildcardablePropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("MaxValueQuery", typeof(PropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("MinValueQuery", typeof(PropertyQuery))]
-        [System.Xml.Serialization.XmlElementAttribute("RegularQuery", typeof(WildcardablePropertyQuery))]
-        [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
-        public PropertyQuery[] Items
-        {
-            get
-            {
-                return this._itemsField;
-            }
-
-            set
-            {
-                this._itemsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public ItemsChoiceType[] ItemsElementName
-        {
-            get
-            {
-                return this._itemsElementNameField;
-            }
-
-            set
-            {
-                this._itemsElementNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string PropertyName
-        {
-            get
-            {
-                return this._propertyNameField;
-            }
-
-            set
-            {
-                this._propertyNameField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class TypeMetadata
-    {
-        private string _pSTypeField;
-
-        private string _eTSTypeField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string PSType
-        {
-            get
-            {
-                return this._pSTypeField;
-            }
-
-            set
-            {
-                this._pSTypeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string ETSType
-        {
-            get
-            {
-                return this._eTSTypeField;
-            }
-
-            set
-            {
-                this._eTSTypeField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class Association
-    {
-        private AssociationAssociatedInstance _associatedInstanceField;
-
-        private string _association1Field;
-
-        private string _sourceRoleField;
-
-        private string _resultRoleField;
-
-        /// <remarks/>
-        public AssociationAssociatedInstance AssociatedInstance
-        {
-            get
-            {
-                return this._associatedInstanceField;
-            }
-
-            set
-            {
-                this._associatedInstanceField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute("Association")]
-        public string Association1
-        {
-            get
-            {
-                return this._association1Field;
-            }
-
-            set
-            {
-                this._association1Field = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string SourceRole
-        {
-            get
-            {
-                return this._sourceRoleField;
-            }
-
-            set
-            {
-                this._sourceRoleField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string ResultRole
-        {
-            get
-            {
-                return this._resultRoleField;
-            }
-
-            set
-            {
-                this._resultRoleField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class AssociationAssociatedInstance
-    {
-        private TypeMetadata _typeField;
-
-        private CmdletParameterMetadataForGetCmdletFilteringParameter _cmdletParameterMetadataField;
-
-        /// <remarks/>
-        public TypeMetadata Type
-        {
-            get
-            {
-                return this._typeField;
-            }
-
-            set
-            {
-                this._typeField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletParameterMetadataForGetCmdletFilteringParameter CmdletParameterMetadata
-        {
-            get
-            {
-                return this._cmdletParameterMetadataField;
-            }
-
-            set
-            {
-                this._cmdletParameterMetadataField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataForGetCmdletFilteringParameter : CmdletParameterMetadataForGetCmdletParameter
-    {
-        private bool _errorOnNoMatchField;
-
-        private bool _errorOnNoMatchFieldSpecified;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ErrorOnNoMatch
-        {
-            get
-            {
-                return this._errorOnNoMatchField;
-            }
-
-            set
-            {
-                this._errorOnNoMatchField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ErrorOnNoMatchSpecified
-        {
-            get
-            {
-                return this._errorOnNoMatchFieldSpecified;
-            }
-
-            set
-            {
-                this._errorOnNoMatchFieldSpecified = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataForGetCmdletParameter : CmdletParameterMetadata
-    {
-        private bool _valueFromPipelineField;
-
-        private bool _valueFromPipelineFieldSpecified;
-
-        private bool _valueFromPipelineByPropertyNameField;
-
-        private bool _valueFromPipelineByPropertyNameFieldSpecified;
-
-        private string[] _cmdletParameterSetsField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ValueFromPipeline
-        {
-            get
-            {
-                return this._valueFromPipelineField;
-            }
-
-            set
-            {
-                this._valueFromPipelineField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ValueFromPipelineSpecified
-        {
-            get
-            {
-                return this._valueFromPipelineFieldSpecified;
-            }
-
-            set
-            {
-                this._valueFromPipelineFieldSpecified = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ValueFromPipelineByPropertyName
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameField;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ValueFromPipelineByPropertyNameSpecified
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameFieldSpecified;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameFieldSpecified = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string[] CmdletParameterSets
-        {
-            get
-            {
-                return this._cmdletParameterSetsField;
-            }
-
-            set
-            {
-                this._cmdletParameterSetsField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForGetCmdletFilteringParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForInstanceMethodParameter))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CmdletParameterMetadataForStaticMethodParameter))]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadata
-    {
-        private object _allowEmptyCollectionField;
-
-        private object _allowEmptyStringField;
-
-        private object _allowNullField;
-
-        private object _validateNotNullField;
-
-        private object _validateNotNullOrEmptyField;
-
-        private CmdletParameterMetadataValidateCount _validateCountField;
-
-        private CmdletParameterMetadataValidateLength _validateLengthField;
-
-        private CmdletParameterMetadataValidateRange _validateRangeField;
-
-        private string[] _validateSetField;
-
-        private ObsoleteAttributeMetadata _obsoleteField;
-
-        private bool _isMandatoryField;
-
-        private bool _isMandatoryFieldSpecified;
-
-        private string[] _aliasesField;
-
-        private string _pSNameField;
-
-        private string _positionField;
-
-        /// <remarks/>
-        public object AllowEmptyCollection
-        {
-            get
-            {
-                return this._allowEmptyCollectionField;
-            }
-
-            set
-            {
-                this._allowEmptyCollectionField = value;
-            }
-        }
-
-        /// <remarks/>
-        public object AllowEmptyString
-        {
-            get
-            {
-                return this._allowEmptyStringField;
-            }
-
-            set
-            {
-                this._allowEmptyStringField = value;
-            }
-        }
-
-        /// <remarks/>
-        public object AllowNull
-        {
-            get
-            {
-                return this._allowNullField;
-            }
-
-            set
-            {
-                this._allowNullField = value;
-            }
-        }
-
-        /// <remarks/>
-        public object ValidateNotNull
-        {
-            get
-            {
-                return this._validateNotNullField;
-            }
-
-            set
-            {
-                this._validateNotNullField = value;
-            }
-        }
-
-        /// <remarks/>
-        public object ValidateNotNullOrEmpty
-        {
-            get
-            {
-                return this._validateNotNullOrEmptyField;
-            }
-
-            set
-            {
-                this._validateNotNullOrEmptyField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletParameterMetadataValidateCount ValidateCount
-        {
-            get
-            {
-                return this._validateCountField;
-            }
-
-            set
-            {
-                this._validateCountField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletParameterMetadataValidateLength ValidateLength
-        {
-            get
-            {
-                return this._validateLengthField;
-            }
-
-            set
-            {
-                this._validateLengthField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletParameterMetadataValidateRange ValidateRange
-        {
-            get
-            {
-                return this._validateRangeField;
-            }
-
-            set
-            {
-                this._validateRangeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("AllowedValue", IsNullable = false)]
-        public string[] ValidateSet
-        {
-            get
-            {
-                return this._validateSetField;
-            }
-
-            set
-            {
-                this._validateSetField = value;
-            }
-        }
-
-        /// <remarks/>
-        public ObsoleteAttributeMetadata Obsolete
-        {
-            get
-            {
-                return this._obsoleteField;
-            }
-
-            set
-            {
-                this._obsoleteField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool IsMandatory
-        {
-            get
-            {
-                return this._isMandatoryField;
-            }
-
-            set
-            {
-                this._isMandatoryField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool IsMandatorySpecified
-        {
-            get
-            {
-                return this._isMandatoryFieldSpecified;
-            }
-
-            set
-            {
-                this._isMandatoryFieldSpecified = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string[] Aliases
-        {
-            get
-            {
-                return this._aliasesField;
-            }
-
-            set
-            {
-                this._aliasesField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string PSName
-        {
-            get
-            {
-                return this._pSNameField;
-            }
-
-            set
-            {
-                this._pSNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
-        public string Position
-        {
-            get
-            {
-                return this._positionField;
-            }
-
-            set
-            {
-                this._positionField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataValidateCount
-    {
-        private string _minField;
-
-        private string _maxField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
-        public string Min
-        {
-            get
-            {
-                return this._minField;
-            }
-
-            set
-            {
-                this._minField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
-        public string Max
-        {
-            get
-            {
-                return this._maxField;
-            }
-
-            set
-            {
-                this._maxField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataValidateLength
-    {
-        private string _minField;
-
-        private string _maxField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
-        public string Min
-        {
-            get
-            {
-                return this._minField;
-            }
-
-            set
-            {
-                this._minField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "nonNegativeInteger")]
-        public string Max
-        {
-            get
-            {
-                return this._maxField;
-            }
-
-            set
-            {
-                this._maxField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataValidateRange
-    {
-        private string _minField;
-
-        private string _maxField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
-        public string Min
-        {
-            get
-            {
-                return this._minField;
-            }
-
-            set
-            {
-                this._minField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
-        public string Max
-        {
-            get
-            {
-                return this._maxField;
-            }
-
-            set
-            {
-                this._maxField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class ObsoleteAttributeMetadata
-    {
-        private string _messageField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string Message
-        {
-            get
-            {
-                return this._messageField;
-            }
-
-            set
-            {
-                this._messageField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataForInstanceMethodParameter : CmdletParameterMetadata
-    {
-        private bool _valueFromPipelineByPropertyNameField;
-
-        private bool _valueFromPipelineByPropertyNameFieldSpecified;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ValueFromPipelineByPropertyName
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameField;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ValueFromPipelineByPropertyNameSpecified
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameFieldSpecified;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameFieldSpecified = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletParameterMetadataForStaticMethodParameter : CmdletParameterMetadata
-    {
-        private bool _valueFromPipelineField;
-
-        private bool _valueFromPipelineFieldSpecified;
-
-        private bool _valueFromPipelineByPropertyNameField;
-
-        private bool _valueFromPipelineByPropertyNameFieldSpecified;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ValueFromPipeline
-        {
-            get
-            {
-                return this._valueFromPipelineField;
-            }
-
-            set
-            {
-                this._valueFromPipelineField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ValueFromPipelineSpecified
-        {
-            get
-            {
-                return this._valueFromPipelineFieldSpecified;
-            }
-
-            set
-            {
-                this._valueFromPipelineFieldSpecified = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool ValueFromPipelineByPropertyName
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameField;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ValueFromPipelineByPropertyNameSpecified
-        {
-            get
-            {
-                return this._valueFromPipelineByPropertyNameFieldSpecified;
-            }
-
-            set
-            {
-                this._valueFromPipelineByPropertyNameFieldSpecified = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class QueryOption
-    {
-        private TypeMetadata _typeField;
-
-        private CmdletParameterMetadataForGetCmdletParameter _cmdletParameterMetadataField;
-
-        private string _optionNameField;
-
-        /// <remarks/>
-        public TypeMetadata Type
-        {
-            get
-            {
-                return this._typeField;
-            }
-
-            set
-            {
-                this._typeField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletParameterMetadataForGetCmdletParameter CmdletParameterMetadata
-        {
-            get
-            {
-                return this._cmdletParameterMetadataField;
-            }
-
-            set
-            {
-                this._cmdletParameterMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string OptionName
-        {
-            get
-            {
-                return this._optionNameField;
-            }
-
-            set
-            {
-                this._optionNameField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class GetCmdletMetadata
-    {
-        private CommonCmdletMetadata _cmdletMetadataField;
-
-        private GetCmdletParameters _getCmdletParametersField;
-
-        /// <remarks/>
-        public CommonCmdletMetadata CmdletMetadata
-        {
-            get
-            {
-                return this._cmdletMetadataField;
-            }
-
-            set
-            {
-                this._cmdletMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        public GetCmdletParameters GetCmdletParameters
-        {
-            get
-            {
-                return this._getCmdletParametersField;
-            }
-
-            set
-            {
-                this._getCmdletParametersField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CommonCmdletMetadata
-    {
-        private ObsoleteAttributeMetadata _obsoleteField;
-
-        private string _verbField;
-
-        private string _nounField;
-
-        private string[] _aliasesField;
-
-        private ConfirmImpact _confirmImpactField;
-
-        private bool _confirmImpactFieldSpecified;
-
-        private string _helpUriField;
-
-        /// <remarks/>
-        public ObsoleteAttributeMetadata Obsolete
-        {
-            get
-            {
-                return this._obsoleteField;
-            }
-
-            set
-            {
-                this._obsoleteField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string Verb
-        {
-            get
-            {
-                return this._verbField;
-            }
-
-            set
-            {
-                this._verbField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string Noun
-        {
-            get
-            {
-                return this._nounField;
-            }
-
-            set
-            {
-                this._nounField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string[] Aliases
-        {
-            get
-            {
-                return this._aliasesField;
-            }
-
-            set
-            {
-                this._aliasesField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public ConfirmImpact ConfirmImpact
-        {
-            get
-            {
-                return this._confirmImpactField;
-            }
-
-            set
-            {
-                this._confirmImpactField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool ConfirmImpactSpecified
-        {
-            get
-            {
-                return this._confirmImpactFieldSpecified;
-            }
-
-            set
-            {
-                this._confirmImpactFieldSpecified = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "anyURI")]
-        public string HelpUri
-        {
-            get
-            {
-                return this._helpUriField;
-            }
-
-            set
-            {
-                this._helpUriField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    public enum ConfirmImpact
-    {
-        /// <remarks/>
-        None,
-
-        /// <remarks/>
-        Low,
-
-        /// <remarks/>
-        Medium,
-
-        /// <remarks/>
-        High,
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class StaticCmdletMetadata
-    {
-        private StaticCmdletMetadataCmdletMetadata _cmdletMetadataField;
-
-        private StaticMethodMetadata[] _methodField;
-
-        /// <remarks/>
-        public StaticCmdletMetadataCmdletMetadata CmdletMetadata
-        {
-            get
-            {
-                return this._cmdletMetadataField;
-            }
-
-            set
-            {
-                this._cmdletMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Method")]
-        public StaticMethodMetadata[] Method
-        {
-            get
-            {
-                return this._methodField;
-            }
-
-            set
-            {
-                this._methodField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class StaticCmdletMetadataCmdletMetadata : CommonCmdletMetadata
-    {
-        private string _defaultCmdletParameterSetField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string DefaultCmdletParameterSet
-        {
-            get
-            {
-                return this._defaultCmdletParameterSetField;
-            }
-
-            set
-            {
-                this._defaultCmdletParameterSetField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class StaticMethodMetadata : CommonMethodMetadata
-    {
-        private StaticMethodParameterMetadata[] _parametersField;
-
-        private string _cmdletParameterSetField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Parameter", IsNullable = false)]
-        public StaticMethodParameterMetadata[] Parameters
-        {
-            get
-            {
-                return this._parametersField;
-            }
-
-            set
-            {
-                this._parametersField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string CmdletParameterSet
-        {
-            get
-            {
-                return this._cmdletParameterSetField;
-            }
-
-            set
-            {
-                this._cmdletParameterSetField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class StaticMethodParameterMetadata : CommonMethodParameterMetadata
-    {
-        private CmdletParameterMetadataForStaticMethodParameter _cmdletParameterMetadataField;
-
-        private CmdletOutputMetadata _cmdletOutputMetadataField;
-
-        /// <remarks/>
-        public CmdletParameterMetadataForStaticMethodParameter CmdletParameterMetadata
-        {
-            get
-            {
-                return this._cmdletParameterMetadataField;
-            }
-
-            set
-            {
-                this._cmdletParameterMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletOutputMetadata CmdletOutputMetadata
-        {
-            get
-            {
-                return this._cmdletOutputMetadataField;
-            }
-
-            set
-            {
-                this._cmdletOutputMetadataField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CmdletOutputMetadata
-    {
-        private object _errorCodeField;
-
-        private string _pSNameField;
-
-        /// <remarks/>
-        public object ErrorCode
-        {
-            get
-            {
-                return this._errorCodeField;
-            }
-
-            set
-            {
-                this._errorCodeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string PSName
-        {
-            get
-            {
-                return this._pSNameField;
-            }
-
-            set
-            {
-                this._pSNameField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstanceMethodParameterMetadata))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StaticMethodParameterMetadata))]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CommonMethodParameterMetadata
-    {
-        private TypeMetadata _typeField;
-
-        private string _parameterNameField;
-
-        private string _defaultValueField;
-
-        /// <remarks/>
-        public TypeMetadata Type
-        {
-            get
-            {
-                return this._typeField;
-            }
-
-            set
-            {
-                this._typeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string ParameterName
-        {
-            get
-            {
-                return this._parameterNameField;
-            }
-
-            set
-            {
-                this._parameterNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string DefaultValue
-        {
-            get
-            {
-                return this._defaultValueField;
-            }
-
-            set
-            {
-                this._defaultValueField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class InstanceMethodParameterMetadata : CommonMethodParameterMetadata
-    {
-        private CmdletParameterMetadataForInstanceMethodParameter _cmdletParameterMetadataField;
-
-        private CmdletOutputMetadata _cmdletOutputMetadataField;
-
-        /// <remarks/>
-        public CmdletParameterMetadataForInstanceMethodParameter CmdletParameterMetadata
-        {
-            get
-            {
-                return this._cmdletParameterMetadataField;
-            }
-
-            set
-            {
-                this._cmdletParameterMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletOutputMetadata CmdletOutputMetadata
-        {
-            get
-            {
-                return this._cmdletOutputMetadataField;
-            }
-
-            set
-            {
-                this._cmdletOutputMetadataField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstanceMethodMetadata))]
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StaticMethodMetadata))]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CommonMethodMetadata
-    {
-        private CommonMethodMetadataReturnValue _returnValueField;
-
-        private string _methodNameField;
-
-        /// <remarks/>
-        public CommonMethodMetadataReturnValue ReturnValue
-        {
-            get
-            {
-                return this._returnValueField;
-            }
-
-            set
-            {
-                this._returnValueField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string MethodName
-        {
-            get
-            {
-                return this._methodNameField;
-            }
-
-            set
-            {
-                this._methodNameField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class CommonMethodMetadataReturnValue
-    {
-        private TypeMetadata _typeField;
-
-        private CmdletOutputMetadata _cmdletOutputMetadataField;
-
-        /// <remarks/>
-        public TypeMetadata Type
-        {
-            get
-            {
-                return this._typeField;
-            }
-
-            set
-            {
-                this._typeField = value;
-            }
-        }
-
-        /// <remarks/>
-        public CmdletOutputMetadata CmdletOutputMetadata
-        {
-            get
-            {
-                return this._cmdletOutputMetadataField;
-            }
-
-            set
-            {
-                this._cmdletOutputMetadataField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class InstanceMethodMetadata : CommonMethodMetadata
-    {
-        private InstanceMethodParameterMetadata[] _parametersField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlArrayItemAttribute("Parameter", IsNullable = false)]
-        public InstanceMethodParameterMetadata[] Parameters
-        {
-            get
-            {
-                return this._parametersField;
-            }
-
-            set
-            {
-                this._parametersField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class InstanceCmdletMetadata
-    {
-        private CommonCmdletMetadata _cmdletMetadataField;
-
-        private InstanceMethodMetadata _methodField;
-
-        private GetCmdletParameters _getCmdletParametersField;
-
-        /// <remarks/>
-        public CommonCmdletMetadata CmdletMetadata
-        {
-            get
-            {
-                return this._cmdletMetadataField;
-            }
-
-            set
-            {
-                this._cmdletMetadataField = value;
-            }
-        }
-
-        /// <remarks/>
-        public InstanceMethodMetadata Method
-        {
-            get
-            {
-                return this._methodField;
-            }
-
-            set
-            {
-                this._methodField = value;
-            }
-        }
-
-        /// <remarks/>
-        public GetCmdletParameters GetCmdletParameters
-        {
-            get
-            {
-                return this._getCmdletParametersField;
-            }
-
-            set
-            {
-                this._getCmdletParametersField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.Xml.Serialization.XmlIncludeAttribute(typeof(WildcardablePropertyQuery))]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class PropertyQuery
-    {
-        private CmdletParameterMetadataForGetCmdletFilteringParameter _cmdletParameterMetadataField;
-
-        /// <remarks/>
-        public CmdletParameterMetadataForGetCmdletFilteringParameter CmdletParameterMetadata
-        {
-            get
-            {
-                return this._cmdletParameterMetadataField;
-            }
-
-            set
-            {
-                this._cmdletParameterMetadataField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class WildcardablePropertyQuery : PropertyQuery
-    {
-        private bool _allowGlobbingField;
-
-        private bool _allowGlobbingFieldSpecified;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool AllowGlobbing
-        {
-            get
-            {
-                return this._allowGlobbingField;
-            }
-
-            set
-            {
-                this._allowGlobbingField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool AllowGlobbingSpecified
-        {
-            get
-            {
-                return this._allowGlobbingFieldSpecified;
-            }
-
-            set
-            {
-                this._allowGlobbingFieldSpecified = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11", IncludeInSchema = false)]
-    public enum ItemsChoiceType
-    {
-        /// <remarks/>
-        ExcludeQuery,
-
-        /// <remarks/>
-        MaxValueQuery,
-
-        /// <remarks/>
-        MinValueQuery,
-
-        /// <remarks/>
-        RegularQuery,
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class ClassMetadataData
-    {
-        private string _nameField;
-
-        private string _valueField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string Name
-        {
-            get
-            {
-                return this._nameField;
-            }
-
-            set
-            {
-                this._nameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlTextAttribute()]
-        public string Value
-        {
-            get
-            {
-                return this._valueField;
-            }
-
-            set
-            {
-                this._valueField = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class EnumMetadataEnum
-    {
-        private EnumMetadataEnumValue[] _valueField;
-
-        private string _enumNameField;
-
-        private string _underlyingTypeField;
-
-        private bool _bitwiseFlagsField;
-
-        private bool _bitwiseFlagsFieldSpecified;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlElementAttribute("Value")]
-        public EnumMetadataEnumValue[] Value
-        {
-            get
-            {
-                return this._valueField;
-            }
-
-            set
-            {
-                this._valueField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string EnumName
-        {
-            get
-            {
-                return this._enumNameField;
-            }
-
-            set
-            {
-                this._enumNameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string UnderlyingType
-        {
-            get
-            {
-                return this._underlyingTypeField;
-            }
-
-            set
-            {
-                this._underlyingTypeField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public bool BitwiseFlags
-        {
-            get
-            {
-                return this._bitwiseFlagsField;
-            }
-
-            set
-            {
-                this._bitwiseFlagsField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlIgnoreAttribute()]
-        public bool BitwiseFlagsSpecified
-        {
-            get
-            {
-                return this._bitwiseFlagsFieldSpecified;
-            }
-
-            set
-            {
-                this._bitwiseFlagsFieldSpecified = value;
-            }
-        }
-    }
-
-    /// <remarks/>
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
-    [System.SerializableAttribute()]
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.ComponentModel.DesignerCategoryAttribute("code")]
-    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.microsoft.com/cmdlets-over-objects/2009/11")]
-    internal partial class EnumMetadataEnumValue
-    {
-        private string _nameField;
-
-        private string _valueField;
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute()]
-        public string Name
-        {
-            get
-            {
-                return this._nameField;
-            }
-
-            set
-            {
-                this._nameField = value;
-            }
-        }
-
-        /// <remarks/>
-        [System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
-        public string Value
-        {
-            get
-            {
-                return this._valueField;
-            }
-
-            set
-            {
-                this._valueField = value;
-            }
-        }
-    }
-}
-
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xmlSerializer.autogen.cs b/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xmlSerializer.autogen.cs
deleted file mode 100644
index a05d597999a..00000000000
--- a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xmlSerializer.autogen.cs
+++ /dev/null
@@ -1,10023 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// PLEASE DO NOT EDIT THIS FILE BY HAND!!!
-//
-// This file has been generated
-// by D:\bluedev\admin\monad\src\cimSupport\cmdletization\xml\generate.ps1
-//
-// Generation timestamp: 10/21/2013 18:29:23
-
-#pragma warning disable
-#if _DYNAMIC_XMLSERIALIZER_COMPILATION
-
-#endif
-
-namespace Microsoft.PowerShell.Cmdletization.Xml
-{
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal class XmlSerializationWriter1 : System.Xml.Serialization.XmlSerializationWriter
-    {
-        public void Write50_PowerShellMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteEmptyTag(@"PowerShellMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                return;
-            }
-
-            TopLevelElement();
-            Write39_PowerShellMetadata(@"PowerShellMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata)o), false, false);
-        }
-
-        public void Write51_ClassMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"ClassMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write36_ClassMetadata(@"ClassMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata)o), true, false);
-        }
-
-        public void Write52_ClassMetadataInstanceCmdlets(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"ClassMetadataInstanceCmdlets", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write40_ClassMetadataInstanceCmdlets(@"ClassMetadataInstanceCmdlets", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets)o), true, false);
-        }
-
-        public void Write53_GetCmdletParameters(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"GetCmdletParameters", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write19_GetCmdletParameters(@"GetCmdletParameters", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o), true, false);
-        }
-
-        public void Write54_PropertyMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"PropertyMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write15_PropertyMetadata(@"PropertyMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)o), true, false);
-        }
-
-        public void Write55_TypeMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"TypeMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write2_TypeMetadata(@"TypeMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o), true, false);
-        }
-
-        public void Write56_Association(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"Association", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write17_Association(@"Association", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.Association)o), true, false);
-        }
-
-        public void Write57_AssociationAssociatedInstance(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"AssociationAssociatedInstance", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write41_AssociationAssociatedInstance(@"AssociationAssociatedInstance", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance)o), true, false);
-        }
-
-        public void Write58_CmdletParameterMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write10_CmdletParameterMetadata(@"CmdletParameterMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata)o), true, false);
-        }
-
-        public void Write59_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataForGetCmdletParameter", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write11_Item(@"CmdletParameterMetadataForGetCmdletParameter", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)o), true, false);
-        }
-
-        public void Write60_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataForGetCmdletFilteringParameter", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write12_Item(@"CmdletParameterMetadataForGetCmdletFilteringParameter", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o), true, false);
-        }
-
-        public void Write61_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataValidateCount", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write42_Item(@"CmdletParameterMetadataValidateCount", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o), true, false);
-        }
-
-        public void Write62_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataValidateLength", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write43_Item(@"CmdletParameterMetadataValidateLength", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o), true, false);
-        }
-
-        public void Write63_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataValidateRange", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write44_Item(@"CmdletParameterMetadataValidateRange", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o), true, false);
-        }
-
-        public void Write64_ObsoleteAttributeMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"ObsoleteAttributeMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write7_ObsoleteAttributeMetadata(@"ObsoleteAttributeMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o), true, false);
-        }
-
-        public void Write65_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataForInstanceMethodParameter", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write9_Item(@"CmdletParameterMetadataForInstanceMethodParameter", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)o), true, false);
-        }
-
-        public void Write66_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletParameterMetadataForStaticMethodParameter", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write8_Item(@"CmdletParameterMetadataForStaticMethodParameter", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)o), true, false);
-        }
-
-        public void Write67_QueryOption(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"QueryOption", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write18_QueryOption(@"QueryOption", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)o), true, false);
-        }
-
-        public void Write68_GetCmdletMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"GetCmdletMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write22_GetCmdletMetadata(@"GetCmdletMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)o), true, false);
-        }
-
-        public void Write69_CommonCmdletMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CommonCmdletMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write21_CommonCmdletMetadata(@"CommonCmdletMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)o), true, false);
-        }
-
-        public void Write70_ConfirmImpact(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteEmptyTag(@"ConfirmImpact", string.Empty);
-                return;
-            }
-
-            WriteElementString(@"ConfirmImpact", @"", Write20_ConfirmImpact(((global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)o)));
-        }
-
-        public void Write71_StaticCmdletMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"StaticCmdletMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write34_StaticCmdletMetadata(@"StaticCmdletMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)o), true, false);
-        }
-
-        public void Write72_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"StaticCmdletMetadataCmdletMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write45_Item(@"StaticCmdletMetadataCmdletMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)o), true, false);
-        }
-
-        public void Write73_CommonMethodMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CommonMethodMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write29_CommonMethodMetadata(@"CommonMethodMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata)o), true, false);
-        }
-
-        public void Write74_StaticMethodMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"StaticMethodMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write28_StaticMethodMetadata(@"StaticMethodMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)o), true, false);
-        }
-
-        public void Write75_CommonMethodParameterMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CommonMethodParameterMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write26_CommonMethodParameterMetadata(@"CommonMethodParameterMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata)o), true, false);
-        }
-
-        public void Write76_StaticMethodParameterMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"StaticMethodParameterMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write27_StaticMethodParameterMetadata(@"StaticMethodParameterMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)o), true, false);
-        }
-
-        public void Write77_CmdletOutputMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CmdletOutputMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write23_CmdletOutputMetadata(@"CmdletOutputMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o), true, false);
-        }
-
-        public void Write78_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"InstanceMethodParameterMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write25_Item(@"InstanceMethodParameterMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)o), true, false);
-        }
-
-        public void Write79_Item(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"CommonMethodMetadataReturnValue", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write46_Item(@"CommonMethodMetadataReturnValue", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)o), true, false);
-        }
-
-        public void Write80_InstanceMethodMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"InstanceMethodMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write30_InstanceMethodMetadata(@"InstanceMethodMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)o), true, false);
-        }
-
-        public void Write81_InstanceCmdletMetadata(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"InstanceCmdletMetadata", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write31_InstanceCmdletMetadata(@"InstanceCmdletMetadata", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)o), true, false);
-        }
-
-        public void Write82_PropertyQuery(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"PropertyQuery", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write14_PropertyQuery(@"PropertyQuery", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)o), true, false);
-        }
-
-        public void Write83_WildcardablePropertyQuery(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"WildcardablePropertyQuery", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write13_WildcardablePropertyQuery(@"WildcardablePropertyQuery", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)o), true, false);
-        }
-
-        public void Write84_ItemsChoiceType(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteEmptyTag(@"ItemsChoiceType", string.Empty);
-                return;
-            }
-
-            WriteElementString(@"ItemsChoiceType", @"", Write3_ItemsChoiceType(((global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)o)));
-        }
-
-        public void Write85_ClassMetadataData(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"ClassMetadataData", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write47_ClassMetadataData(@"ClassMetadataData", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)o), true, false);
-        }
-
-        public void Write86_EnumMetadataEnum(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"EnumMetadataEnum", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write48_EnumMetadataEnum(@"EnumMetadataEnum", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)o), true, false);
-        }
-
-        public void Write87_EnumMetadataEnumValue(object o)
-        {
-            WriteStartDocument();
-            if (o == null)
-            {
-                WriteNullTagLiteral(@"EnumMetadataEnumValue", string.Empty);
-                return;
-            }
-
-            TopLevelElement();
-            Write49_EnumMetadataEnumValue(@"EnumMetadataEnumValue", @"", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)o), true, false);
-        }
-
-        private void Write49_EnumMetadataEnumValue(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"EnumMetadataEnumValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Name", @"", ((global::System.String)o.@Name));
-            WriteAttribute(@"Value", @"", ((global::System.String)o.@Value));
-            WriteEndElement(o);
-        }
-
-        private void Write48_EnumMetadataEnum(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"EnumMetadataEnum", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"EnumName", @"", ((global::System.String)o.@EnumName));
-            WriteAttribute(@"UnderlyingType", @"", ((global::System.String)o.@UnderlyingType));
-            if (o.@BitwiseFlagsSpecified)
-            {
-                WriteAttribute(@"BitwiseFlags", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@BitwiseFlags)));
-            }
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])o.@Value;
-                if (a != null)
-                {
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write37_EnumMetadataEnumValue(@"Value", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)a[ia]), false, false);
-                    }
-                }
-            }
-
-            if (o.@BitwiseFlagsSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write37_EnumMetadataEnumValue(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Name", @"", ((global::System.String)o.@Name));
-            WriteAttribute(@"Value", @"", ((global::System.String)o.@Value));
-            WriteEndElement(o);
-        }
-
-        private void Write47_ClassMetadataData(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"ClassMetadataData", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Name", @"", ((global::System.String)o.@Name));
-            if ((object)(o.@Value) != null)
-            {
-                WriteValue(((global::System.String)o.@Value));
-            }
-
-            WriteEndElement(o);
-        }
-
-        private string Write3_ItemsChoiceType(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType v)
-        {
-            string s = null;
-            switch (v)
-            {
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@ExcludeQuery: s = @"ExcludeQuery"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MaxValueQuery: s = @"MaxValueQuery"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MinValueQuery: s = @"MinValueQuery"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@RegularQuery: s = @"RegularQuery"; break;
-                default: throw CreateInvalidEnumValueException(((System.Int64)v).ToString(System.Globalization.CultureInfo.InvariantCulture), @"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType");
-            }
-
-            return s;
-        }
-
-        private void Write13_WildcardablePropertyQuery(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"WildcardablePropertyQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@AllowGlobbingSpecified)
-            {
-                WriteAttribute(@"AllowGlobbing", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@AllowGlobbing)));
-            }
-
-            Write12_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o.@CmdletParameterMetadata), false, false);
-            if (o.@AllowGlobbingSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write12_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataForGetCmdletFilteringParameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@IsMandatorySpecified)
-            {
-                WriteAttribute(@"IsMandatory", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@IsMandatory)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            WriteAttribute(@"Position", @"", ((global::System.String)o.@Position));
-            if (o.@ValueFromPipelineSpecified)
-            {
-                WriteAttribute(@"ValueFromPipeline", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipeline)));
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-                WriteAttribute(@"ValueFromPipelineByPropertyName", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipelineByPropertyName)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@CmdletParameterSets;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"CmdletParameterSets", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            if (o.@ErrorOnNoMatchSpecified)
-            {
-                WriteAttribute(@"ErrorOnNoMatch", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ErrorOnNoMatch)));
-            }
-
-            Write1_Object(@"AllowEmptyCollection", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyCollection), false, false);
-            Write1_Object(@"AllowEmptyString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyString), false, false);
-            Write1_Object(@"AllowNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowNull), false, false);
-            Write1_Object(@"ValidateNotNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNull), false, false);
-            Write1_Object(@"ValidateNotNullOrEmpty", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNullOrEmpty), false, false);
-            Write4_Item(@"ValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o.@ValidateCount), false, false);
-            Write5_Item(@"ValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o.@ValidateLength), false, false);
-            Write6_Item(@"ValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o.@ValidateRange), false, false);
-            {
-                global::System.String[] a = (global::System.String[])((global::System.String[])o.@ValidateSet);
-                if (a != null)
-                {
-                    WriteStartElement(@"ValidateSet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@IsMandatorySpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineSpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-            }
-
-            if (o.@ErrorOnNoMatchSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write7_ObsoleteAttributeMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"ObsoleteAttributeMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Message", @"", ((global::System.String)o.@Message));
-            WriteEndElement(o);
-        }
-
-        private void Write6_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write5_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write4_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write1_Object(string n, string ns, global::System.Object o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::System.Object))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue))
-                {
-                    Write49_EnumMetadataEnumValue(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum))
-                {
-                    Write48_EnumMetadataEnum(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData))
-                {
-                    Write47_ClassMetadataData(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue))
-                {
-                    Write46_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange))
-                {
-                    Write44_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength))
-                {
-                    Write43_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount))
-                {
-                    Write42_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance))
-                {
-                    Write41_AssociationAssociatedInstance(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets))
-                {
-                    Write40_ClassMetadataInstanceCmdlets(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata))
-                {
-                    Write36_ClassMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata))
-                {
-                    Write34_StaticCmdletMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata))
-                {
-                    Write31_InstanceCmdletMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata))
-                {
-                    Write26_CommonMethodParameterMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata))
-                {
-                    Write27_StaticMethodParameterMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata))
-                {
-                    Write25_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata))
-                {
-                    Write29_CommonMethodMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata))
-                {
-                    Write30_InstanceMethodMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata))
-                {
-                    Write28_StaticMethodMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata))
-                {
-                    Write23_CmdletOutputMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata))
-                {
-                    Write22_GetCmdletMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata))
-                {
-                    Write21_CommonCmdletMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata))
-                {
-                    Write45_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters))
-                {
-                    Write19_GetCmdletParameters(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption))
-                {
-                    Write18_QueryOption(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association))
-                {
-                    Write17_Association(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.Association)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata))
-                {
-                    Write15_PropertyMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery))
-                {
-                    Write14_PropertyQuery(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery))
-                {
-                    Write13_WildcardablePropertyQuery(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata))
-                {
-                    Write10_CmdletParameterMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter))
-                {
-                    Write11_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter))
-                {
-                    Write12_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter))
-                {
-                    Write9_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter))
-                {
-                    Write8_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata))
-                {
-                    Write7_ObsoleteAttributeMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata))
-                {
-                    Write2_TypeMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ItemsChoiceType", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    Writer.WriteString(Write3_ItemsChoiceType((global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)o));
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::System.String[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::System.String[] a = (global::System.String[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfPropertyMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write15_PropertyMetadata(@"Property", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfAssociation", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.Association[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write17_Association(@"Association", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.Association)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfQueryOption", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write18_QueryOption(@"Option", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ConfirmImpact", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    Writer.WriteString(Write20_ConfirmImpact((global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)o));
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfStaticMethodParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write27_StaticMethodParameterMetadata(@"Parameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfInstanceMethodParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write25_Item(@"Parameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfStaticCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write34_StaticCmdletMetadata(@"Cmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfClassMetadataData", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write35_ClassMetadataData(@"Data", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[]))
-                {
-                    Writer.WriteStartElement(n, ns);
-                    WriteXsiType(@"ArrayOfEnumMetadataEnum", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])o;
-                        if (a != null)
-                        {
-                            for (int ia = 0; ia < a.Length; ia++)
-                            {
-                                Write38_EnumMetadataEnum(@"Enum", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)a[ia]), false, false);
-                            }
-                        }
-                    }
-
-                    Writer.WriteEndElement();
-                    return;
-                }
-                else
-                {
-                    WriteTypedPrimitive(n, ns, o, true);
-                    return;
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            WriteEndElement(o);
-        }
-
-        private void Write38_EnumMetadataEnum(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"EnumName", @"", ((global::System.String)o.@EnumName));
-            WriteAttribute(@"UnderlyingType", @"", ((global::System.String)o.@UnderlyingType));
-            if (o.@BitwiseFlagsSpecified)
-            {
-                WriteAttribute(@"BitwiseFlags", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@BitwiseFlags)));
-            }
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])o.@Value;
-                if (a != null)
-                {
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write37_EnumMetadataEnumValue(@"Value", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)a[ia]), false, false);
-                    }
-                }
-            }
-
-            if (o.@BitwiseFlagsSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write35_ClassMetadataData(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Name", @"", ((global::System.String)o.@Name));
-            if ((object)(o.@Value) != null)
-            {
-                WriteValue(((global::System.String)o.@Value));
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write34_StaticCmdletMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"StaticCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write33_Item(@"CmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)o.@CmdletMetadata), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[])o.@Method;
-                if (a != null)
-                {
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write28_StaticMethodMetadata(@"Method", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)a[ia]), false, false);
-                    }
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write28_StaticMethodMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"StaticMethodMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"MethodName", @"", ((global::System.String)o.@MethodName));
-            WriteAttribute(@"CmdletParameterSet", @"", ((global::System.String)o.@CmdletParameterSet));
-            Write24_Item(@"ReturnValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)o.@ReturnValue), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])o.@Parameters);
-                if (a != null)
-                {
-                    WriteStartElement(@"Parameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write27_StaticMethodParameterMetadata(@"Parameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write27_StaticMethodParameterMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"StaticMethodParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"ParameterName", @"", ((global::System.String)o.@ParameterName));
-            WriteAttribute(@"DefaultValue", @"", ((global::System.String)o.@DefaultValue));
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write8_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)o.@CmdletParameterMetadata), false, false);
-            Write23_CmdletOutputMetadata(@"CmdletOutputMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o.@CmdletOutputMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write23_CmdletOutputMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletOutputMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            Write1_Object(@"ErrorCode", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ErrorCode), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write8_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataForStaticMethodParameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@IsMandatorySpecified)
-            {
-                WriteAttribute(@"IsMandatory", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@IsMandatory)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            WriteAttribute(@"Position", @"", ((global::System.String)o.@Position));
-            if (o.@ValueFromPipelineSpecified)
-            {
-                WriteAttribute(@"ValueFromPipeline", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipeline)));
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-                WriteAttribute(@"ValueFromPipelineByPropertyName", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipelineByPropertyName)));
-            }
-
-            Write1_Object(@"AllowEmptyCollection", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyCollection), false, false);
-            Write1_Object(@"AllowEmptyString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyString), false, false);
-            Write1_Object(@"AllowNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowNull), false, false);
-            Write1_Object(@"ValidateNotNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNull), false, false);
-            Write1_Object(@"ValidateNotNullOrEmpty", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNullOrEmpty), false, false);
-            Write4_Item(@"ValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o.@ValidateCount), false, false);
-            Write5_Item(@"ValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o.@ValidateLength), false, false);
-            Write6_Item(@"ValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o.@ValidateRange), false, false);
-            {
-                global::System.String[] a = (global::System.String[])((global::System.String[])o.@ValidateSet);
-                if (a != null)
-                {
-                    WriteStartElement(@"ValidateSet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@IsMandatorySpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineSpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write2_TypeMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"TypeMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"PSType", @"", ((global::System.String)o.@PSType));
-            WriteAttribute(@"ETSType", @"", ((global::System.String)o.@ETSType));
-            WriteEndElement(o);
-        }
-
-        private void Write24_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write23_CmdletOutputMetadata(@"CmdletOutputMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o.@CmdletOutputMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write33_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Verb", @"", ((global::System.String)o.@Verb));
-            WriteAttribute(@"Noun", @"", ((global::System.String)o.@Noun));
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            if (o.@ConfirmImpactSpecified)
-            {
-                WriteAttribute(@"ConfirmImpact", @"", Write20_ConfirmImpact(((global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)o.@ConfirmImpact)));
-            }
-
-            WriteAttribute(@"HelpUri", @"", ((global::System.String)o.@HelpUri));
-            WriteAttribute(@"DefaultCmdletParameterSet", @"", ((global::System.String)o.@DefaultCmdletParameterSet));
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@ConfirmImpactSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private string Write20_ConfirmImpact(global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact v)
-        {
-            string s = null;
-            switch (v)
-            {
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@None: s = @"None"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@Low: s = @"Low"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@Medium: s = @"Medium"; break;
-                case global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@High: s = @"High"; break;
-                default: throw CreateInvalidEnumValueException(((System.Int64)v).ToString(System.Globalization.CultureInfo.InvariantCulture), @"Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact");
-            }
-
-            return s;
-        }
-
-        private void Write25_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"InstanceMethodParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"ParameterName", @"", ((global::System.String)o.@ParameterName));
-            WriteAttribute(@"DefaultValue", @"", ((global::System.String)o.@DefaultValue));
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write9_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)o.@CmdletParameterMetadata), false, false);
-            Write23_CmdletOutputMetadata(@"CmdletOutputMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o.@CmdletOutputMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write9_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataForInstanceMethodParameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@IsMandatorySpecified)
-            {
-                WriteAttribute(@"IsMandatory", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@IsMandatory)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            WriteAttribute(@"Position", @"", ((global::System.String)o.@Position));
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-                WriteAttribute(@"ValueFromPipelineByPropertyName", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipelineByPropertyName)));
-            }
-
-            Write1_Object(@"AllowEmptyCollection", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyCollection), false, false);
-            Write1_Object(@"AllowEmptyString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyString), false, false);
-            Write1_Object(@"AllowNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowNull), false, false);
-            Write1_Object(@"ValidateNotNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNull), false, false);
-            Write1_Object(@"ValidateNotNullOrEmpty", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNullOrEmpty), false, false);
-            Write4_Item(@"ValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o.@ValidateCount), false, false);
-            Write5_Item(@"ValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o.@ValidateLength), false, false);
-            Write6_Item(@"ValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o.@ValidateRange), false, false);
-            {
-                global::System.String[] a = (global::System.String[])((global::System.String[])o.@ValidateSet);
-                if (a != null)
-                {
-                    WriteStartElement(@"ValidateSet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@IsMandatorySpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write18_QueryOption(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"QueryOption", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"OptionName", @"", ((global::System.String)o.@OptionName));
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write11_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)o.@CmdletParameterMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write11_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter))
-                {
-                    Write12_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataForGetCmdletParameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@IsMandatorySpecified)
-            {
-                WriteAttribute(@"IsMandatory", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@IsMandatory)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            WriteAttribute(@"Position", @"", ((global::System.String)o.@Position));
-            if (o.@ValueFromPipelineSpecified)
-            {
-                WriteAttribute(@"ValueFromPipeline", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipeline)));
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-                WriteAttribute(@"ValueFromPipelineByPropertyName", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@ValueFromPipelineByPropertyName)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@CmdletParameterSets;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"CmdletParameterSets", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            Write1_Object(@"AllowEmptyCollection", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyCollection), false, false);
-            Write1_Object(@"AllowEmptyString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyString), false, false);
-            Write1_Object(@"AllowNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowNull), false, false);
-            Write1_Object(@"ValidateNotNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNull), false, false);
-            Write1_Object(@"ValidateNotNullOrEmpty", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNullOrEmpty), false, false);
-            Write4_Item(@"ValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o.@ValidateCount), false, false);
-            Write5_Item(@"ValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o.@ValidateLength), false, false);
-            Write6_Item(@"ValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o.@ValidateRange), false, false);
-            {
-                global::System.String[] a = (global::System.String[])((global::System.String[])o.@ValidateSet);
-                if (a != null)
-                {
-                    WriteStartElement(@"ValidateSet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@IsMandatorySpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineSpecified)
-            {
-            }
-
-            if (o.@ValueFromPipelineByPropertyNameSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write17_Association(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.Association o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"Association", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Association", @"", ((global::System.String)o.@Association1));
-            WriteAttribute(@"SourceRole", @"", ((global::System.String)o.@SourceRole));
-            WriteAttribute(@"ResultRole", @"", ((global::System.String)o.@ResultRole));
-            Write16_AssociationAssociatedInstance(@"AssociatedInstance", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance)o.@AssociatedInstance), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write16_AssociationAssociatedInstance(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write12_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o.@CmdletParameterMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write15_PropertyMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"PropertyMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"PropertyName", @"", ((global::System.String)o.@PropertyName));
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])o.@Items;
-                if (a != null)
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[] c = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])o.@ItemsElementName;
-                    if (c == null || c.Length < a.Length)
-                    {
-                        throw CreateInvalidChoiceIdentifierValueException(@"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType", @"ItemsElementName");
-                    }
-
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery ai = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)a[ia];
-                        global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType ci = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)c[ia];
-                        {
-                            if (ci == Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@RegularQuery && ((object)(ai) != null))
-                            {
-                                if (((object)ai) != null && ai is not global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery) throw CreateMismatchChoiceException(@"Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery", @"ItemsElementName", @"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@RegularQuery");
-                                Write13_WildcardablePropertyQuery(@"RegularQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)ai), false, false);
-                            }
-                            else if (ci == Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@ExcludeQuery && ((object)(ai) != null))
-                            {
-                                if (((object)ai) != null && ai is not global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery) throw CreateMismatchChoiceException(@"Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery", @"ItemsElementName", @"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@ExcludeQuery");
-                                Write13_WildcardablePropertyQuery(@"ExcludeQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)ai), false, false);
-                            }
-                            else if (ci == Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MaxValueQuery && ((object)(ai) != null))
-                            {
-                                if (((object)ai) != null && ai is not global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery) throw CreateMismatchChoiceException(@"Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery", @"ItemsElementName", @"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MaxValueQuery");
-                                Write14_PropertyQuery(@"MaxValueQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)ai), false, false);
-                            }
-                            else if (ci == Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MinValueQuery && ((object)(ai) != null))
-                            {
-                                if (((object)ai) != null && ai is not global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery) throw CreateMismatchChoiceException(@"Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery", @"ItemsElementName", @"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MinValueQuery");
-                                Write14_PropertyQuery(@"MinValueQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)ai), false, false);
-                            }
-                            else if ((object)(ai) != null)
-                            {
-                                throw CreateUnknownTypeException(ai);
-                            }
-                        }
-                    }
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write14_PropertyQuery(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery))
-                {
-                    Write13_WildcardablePropertyQuery(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"PropertyQuery", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write12_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o.@CmdletParameterMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write10_CmdletParameterMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter))
-                {
-                    Write11_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter))
-                {
-                    Write12_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter))
-                {
-                    Write9_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter))
-                {
-                    Write8_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            if (o.@IsMandatorySpecified)
-            {
-                WriteAttribute(@"IsMandatory", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@IsMandatory)));
-            }
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            WriteAttribute(@"PSName", @"", ((global::System.String)o.@PSName));
-            WriteAttribute(@"Position", @"", ((global::System.String)o.@Position));
-            Write1_Object(@"AllowEmptyCollection", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyCollection), false, false);
-            Write1_Object(@"AllowEmptyString", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowEmptyString), false, false);
-            Write1_Object(@"AllowNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@AllowNull), false, false);
-            Write1_Object(@"ValidateNotNull", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNull), false, false);
-            Write1_Object(@"ValidateNotNullOrEmpty", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.Object)o.@ValidateNotNullOrEmpty), false, false);
-            Write4_Item(@"ValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)o.@ValidateCount), false, false);
-            Write5_Item(@"ValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)o.@ValidateLength), false, false);
-            Write6_Item(@"ValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)o.@ValidateRange), false, false);
-            {
-                global::System.String[] a = (global::System.String[])((global::System.String[])o.@ValidateSet);
-                if (a != null)
-                {
-                    WriteStartElement(@"ValidateSet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        WriteElementString(@"AllowedValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)a[ia]));
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@IsMandatorySpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write19_GetCmdletParameters(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"GetCmdletParameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"DefaultCmdletParameterSet", @"", ((global::System.String)o.@DefaultCmdletParameterSet));
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])o.@QueryableProperties);
-                if (a != null)
-                {
-                    WriteStartElement(@"QueryableProperties", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write15_PropertyMetadata(@"Property", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.Association[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])((global::Microsoft.PowerShell.Cmdletization.Xml.Association[])o.@QueryableAssociations);
-                if (a != null)
-                {
-                    WriteStartElement(@"QueryableAssociations", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write17_Association(@"Association", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.Association)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])((global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])o.@QueryOptions);
-                if (a != null)
-                {
-                    WriteStartElement(@"QueryOptions", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write18_QueryOption(@"Option", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write45_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"StaticCmdletMetadataCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Verb", @"", ((global::System.String)o.@Verb));
-            WriteAttribute(@"Noun", @"", ((global::System.String)o.@Noun));
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            if (o.@ConfirmImpactSpecified)
-            {
-                WriteAttribute(@"ConfirmImpact", @"", Write20_ConfirmImpact(((global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)o.@ConfirmImpact)));
-            }
-
-            WriteAttribute(@"HelpUri", @"", ((global::System.String)o.@HelpUri));
-            WriteAttribute(@"DefaultCmdletParameterSet", @"", ((global::System.String)o.@DefaultCmdletParameterSet));
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@ConfirmImpactSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write21_CommonCmdletMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata))
-                {
-                    Write45_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CommonCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Verb", @"", ((global::System.String)o.@Verb));
-            WriteAttribute(@"Noun", @"", ((global::System.String)o.@Noun));
-            {
-                global::System.String[] a = (global::System.String[])o.@Aliases;
-                if (a != null)
-                {
-                    Writer.WriteStartAttribute(null, @"Aliases", string.Empty);
-                    for (int i = 0; i < a.Length; i++)
-                    {
-                        global::System.String ai = (global::System.String)a[i];
-                        if (i != 0) Writer.WriteString(" ");
-                        WriteValue(ai);
-                    }
-
-                    Writer.WriteEndAttribute();
-                }
-            }
-
-            if (o.@ConfirmImpactSpecified)
-            {
-                WriteAttribute(@"ConfirmImpact", @"", Write20_ConfirmImpact(((global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)o.@ConfirmImpact)));
-            }
-
-            WriteAttribute(@"HelpUri", @"", ((global::System.String)o.@HelpUri));
-            Write7_ObsoleteAttributeMetadata(@"Obsolete", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)o.@Obsolete), false, false);
-            if (o.@ConfirmImpactSpecified)
-            {
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write22_GetCmdletMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"GetCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write21_CommonCmdletMetadata(@"CmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)o.@CmdletMetadata), false, false);
-            Write19_GetCmdletParameters(@"GetCmdletParameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o.@GetCmdletParameters), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write30_InstanceMethodMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"InstanceMethodMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"MethodName", @"", ((global::System.String)o.@MethodName));
-            Write24_Item(@"ReturnValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)o.@ReturnValue), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])o.@Parameters);
-                if (a != null)
-                {
-                    WriteStartElement(@"Parameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write25_Item(@"Parameter", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write29_CommonMethodMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata))
-                {
-                    Write30_InstanceMethodMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata))
-                {
-                    Write28_StaticMethodMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CommonMethodMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"MethodName", @"", ((global::System.String)o.@MethodName));
-            Write24_Item(@"ReturnValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)o.@ReturnValue), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write26_CommonMethodParameterMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata))
-                {
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata))
-                {
-                    Write27_StaticMethodParameterMetadata(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata))
-                {
-                    Write25_Item(n, ns, (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)o, isNullable, true);
-                    return;
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CommonMethodParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"ParameterName", @"", ((global::System.String)o.@ParameterName));
-            WriteAttribute(@"DefaultValue", @"", ((global::System.String)o.@DefaultValue));
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write31_InstanceCmdletMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"InstanceCmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write21_CommonCmdletMetadata(@"CmdletMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)o.@CmdletMetadata), false, false);
-            Write30_InstanceMethodMetadata(@"Method", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)o.@Method), false, false);
-            Write19_GetCmdletParameters(@"GetCmdletParameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o.@GetCmdletParameters), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write36_ClassMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"ClassMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"CmdletAdapter", @"", ((global::System.String)o.@CmdletAdapter));
-            WriteAttribute(@"ClassName", @"", ((global::System.String)o.@ClassName));
-            WriteAttribute(@"ClassVersion", @"", ((global::System.String)o.@ClassVersion));
-            WriteElementString(@"Version", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)o.@Version));
-            WriteElementString(@"DefaultNoun", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::System.String)o.@DefaultNoun));
-            Write32_ClassMetadataInstanceCmdlets(@"InstanceCmdlets", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets)o.@InstanceCmdlets), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])o.@StaticCmdlets);
-                if (a != null)
-                {
-                    WriteStartElement(@"StaticCmdlets", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write34_StaticCmdletMetadata(@"Cmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])o.@CmdletAdapterPrivateData);
-                if (a != null)
-                {
-                    WriteStartElement(@"CmdletAdapterPrivateData", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write35_ClassMetadataData(@"Data", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write32_ClassMetadataInstanceCmdlets(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write19_GetCmdletParameters(@"GetCmdletParameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o.@GetCmdletParameters), false, false);
-            Write22_GetCmdletMetadata(@"GetCmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)o.@GetCmdlet), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])o.@Cmdlet;
-                if (a != null)
-                {
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write31_InstanceCmdletMetadata(@"Cmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)a[ia]), false, false);
-                    }
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write40_ClassMetadataInstanceCmdlets(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"ClassMetadataInstanceCmdlets", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write19_GetCmdletParameters(@"GetCmdletParameters", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)o.@GetCmdletParameters), false, false);
-            Write22_GetCmdletMetadata(@"GetCmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)o.@GetCmdlet), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])o.@Cmdlet;
-                if (a != null)
-                {
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write31_InstanceCmdletMetadata(@"Cmdlet", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)a[ia]), false, false);
-                    }
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        private void Write41_AssociationAssociatedInstance(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"AssociationAssociatedInstance", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write12_Item(@"CmdletParameterMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)o.@CmdletParameterMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write42_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataValidateCount", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write43_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataValidateLength", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write44_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CmdletParameterMetadataValidateRange", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            WriteAttribute(@"Min", @"", ((global::System.String)o.@Min));
-            WriteAttribute(@"Max", @"", ((global::System.String)o.@Max));
-            WriteEndElement(o);
-        }
-
-        private void Write46_Item(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(@"CommonMethodMetadataReturnValue", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write2_TypeMetadata(@"Type", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)o.@Type), false, false);
-            Write23_CmdletOutputMetadata(@"CmdletOutputMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)o.@CmdletOutputMetadata), false, false);
-            WriteEndElement(o);
-        }
-
-        private void Write39_PowerShellMetadata(string n, string ns, global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata o, bool isNullable, bool needType)
-        {
-            if ((object)o == null)
-            {
-                if (isNullable) WriteNullTagLiteral(n, ns);
-                return;
-            }
-
-            if (!needType)
-            {
-                System.Type t = o.GetType();
-                if (t == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata))
-                {
-                }
-                else
-                {
-                    throw CreateUnknownTypeException(o);
-                }
-            }
-
-            WriteStartElement(n, ns, o, false, null);
-            if (needType) WriteXsiType(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            Write36_ClassMetadata(@"Class", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata)o.@Class), false, false);
-            {
-                global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] a = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])o.@Enums);
-                if (a != null)
-                {
-                    WriteStartElement(@"Enums", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", null, false);
-                    for (int ia = 0; ia < a.Length; ia++)
-                    {
-                        Write38_EnumMetadataEnum(@"Enum", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11", ((global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)a[ia]), false, false);
-                    }
-
-                    WriteEndElement();
-                }
-            }
-
-            WriteEndElement(o);
-        }
-
-        protected override void InitCallbacks()
-        {
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal class XmlSerializationReader1 : System.Xml.Serialization.XmlSerializationReader
-    {
-        public object Read50_PowerShellMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id1_PowerShellMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                {
-                    o = Read39_PowerShellMetadata(false, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:PowerShellMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read51_ClassMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id3_ClassMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read36_ClassMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ClassMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read52_ClassMetadataInstanceCmdlets()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id5_ClassMetadataInstanceCmdlets && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read40_ClassMetadataInstanceCmdlets(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ClassMetadataInstanceCmdlets");
-            }
-
-            return (object)o;
-        }
-
-        public object Read53_GetCmdletParameters()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id6_GetCmdletParameters && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read19_GetCmdletParameters(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":GetCmdletParameters");
-            }
-
-            return (object)o;
-        }
-
-        public object Read54_PropertyMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id7_PropertyMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read15_PropertyMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":PropertyMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read55_TypeMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id8_TypeMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read2_TypeMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":TypeMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read56_Association()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id9_Association && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read17_Association(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":Association");
-            }
-
-            return (object)o;
-        }
-
-        public object Read57_AssociationAssociatedInstance()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id10_AssociationAssociatedInstance && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read41_AssociationAssociatedInstance(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":AssociationAssociatedInstance");
-            }
-
-            return (object)o;
-        }
-
-        public object Read58_CmdletParameterMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read10_CmdletParameterMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read59_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id12_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read11_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataForGetCmdletParameter");
-            }
-
-            return (object)o;
-        }
-
-        public object Read60_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id13_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read12_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataForGetCmdletFilteringParameter");
-            }
-
-            return (object)o;
-        }
-
-        public object Read61_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id14_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read42_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataValidateCount");
-            }
-
-            return (object)o;
-        }
-
-        public object Read62_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id15_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read43_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataValidateLength");
-            }
-
-            return (object)o;
-        }
-
-        public object Read63_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id16_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read44_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataValidateRange");
-            }
-
-            return (object)o;
-        }
-
-        public object Read64_ObsoleteAttributeMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id17_ObsoleteAttributeMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read7_ObsoleteAttributeMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ObsoleteAttributeMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read65_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id18_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read9_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataForInstanceMethodParameter");
-            }
-
-            return (object)o;
-        }
-
-        public object Read66_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id19_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read8_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletParameterMetadataForStaticMethodParameter");
-            }
-
-            return (object)o;
-        }
-
-        public object Read67_QueryOption()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id20_QueryOption && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read18_QueryOption(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":QueryOption");
-            }
-
-            return (object)o;
-        }
-
-        public object Read68_GetCmdletMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id21_GetCmdletMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read22_GetCmdletMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":GetCmdletMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read69_CommonCmdletMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id22_CommonCmdletMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read21_CommonCmdletMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CommonCmdletMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read70_ConfirmImpact()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id23_ConfirmImpact && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    {
-                        o = Read20_ConfirmImpact(Reader.ReadElementString());
-                    }
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ConfirmImpact");
-            }
-
-            return (object)o;
-        }
-
-        public object Read71_StaticCmdletMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id24_StaticCmdletMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read34_StaticCmdletMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":StaticCmdletMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read72_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id25_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read45_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":StaticCmdletMetadataCmdletMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read73_CommonMethodMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id26_CommonMethodMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read29_CommonMethodMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CommonMethodMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read74_StaticMethodMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id27_StaticMethodMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read28_StaticMethodMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":StaticMethodMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read75_CommonMethodParameterMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id28_CommonMethodParameterMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read26_CommonMethodParameterMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CommonMethodParameterMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read76_StaticMethodParameterMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id29_StaticMethodParameterMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read27_StaticMethodParameterMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":StaticMethodParameterMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read77_CmdletOutputMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id30_CmdletOutputMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read23_CmdletOutputMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CmdletOutputMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read78_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id31_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read25_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":InstanceMethodParameterMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read79_Item()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id32_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read46_Item(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":CommonMethodMetadataReturnValue");
-            }
-
-            return (object)o;
-        }
-
-        public object Read80_InstanceMethodMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id33_InstanceMethodMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read30_InstanceMethodMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":InstanceMethodMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read81_InstanceCmdletMetadata()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id34_InstanceCmdletMetadata && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read31_InstanceCmdletMetadata(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":InstanceCmdletMetadata");
-            }
-
-            return (object)o;
-        }
-
-        public object Read82_PropertyQuery()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id35_PropertyQuery && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read14_PropertyQuery(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":PropertyQuery");
-            }
-
-            return (object)o;
-        }
-
-        public object Read83_WildcardablePropertyQuery()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id36_WildcardablePropertyQuery && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read13_WildcardablePropertyQuery(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":WildcardablePropertyQuery");
-            }
-
-            return (object)o;
-        }
-
-        public object Read84_ItemsChoiceType()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id37_ItemsChoiceType && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    {
-                        o = Read3_ItemsChoiceType(Reader.ReadElementString());
-                    }
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ItemsChoiceType");
-            }
-
-            return (object)o;
-        }
-
-        public object Read85_ClassMetadataData()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id38_ClassMetadataData && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read47_ClassMetadataData(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":ClassMetadataData");
-            }
-
-            return (object)o;
-        }
-
-        public object Read86_EnumMetadataEnum()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id39_EnumMetadataEnum && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read48_EnumMetadataEnum(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":EnumMetadataEnum");
-            }
-
-            return (object)o;
-        }
-
-        public object Read87_EnumMetadataEnumValue()
-        {
-            object o = null;
-            Reader.MoveToContent();
-            if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-            {
-                if (((object)Reader.LocalName == (object)_id40_EnumMetadataEnumValue && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o = Read49_EnumMetadataEnumValue(true, true);
-                }
-                else
-                {
-                    throw CreateUnknownNodeException();
-                }
-            }
-            else
-            {
-                UnknownNode(null, @":EnumMetadataEnumValue");
-            }
-
-            return (object)o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue Read49_EnumMetadataEnumValue(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id40_EnumMetadataEnumValue && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id41_Name && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Name = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id42_Value && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Value = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Name, :Value");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations0 = 0;
-            int readerCount0 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations0, ref readerCount0);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum Read48_EnumMetadataEnum(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id39_EnumMetadataEnum && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum();
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[] a_0 = null;
-            int ca_0 = 0;
-            bool[] paramsRead = new bool[4];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id43_EnumName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@EnumName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id44_UnderlyingType && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@UnderlyingType = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id45_BitwiseFlags && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@BitwiseFlags = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@BitwiseFlagsSpecified = true;
-                    paramsRead[3] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":EnumName, :UnderlyingType, :BitwiseFlags");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Value = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])ShrinkArray(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations1 = 0;
-            int readerCount1 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (((object)Reader.LocalName == (object)_id42_Value && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])EnsureArrayIndex(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)); a_0[ca_0++] = Read37_EnumMetadataEnumValue(false, true);
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Value");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Value");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations1, ref readerCount1);
-            }
-
-            o.@Value = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])ShrinkArray(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue Read37_EnumMetadataEnumValue(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id41_Name && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Name = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id42_Value && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Value = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Name, :Value");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations2 = 0;
-            int readerCount2 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations2, ref readerCount2);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData Read47_ClassMetadataData(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id38_ClassMetadataData && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id41_Name && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Name = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Name");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations3 = 0;
-            int readerCount3 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                string tmp = null;
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else if (Reader.NodeType == System.Xml.XmlNodeType.Text ||
-                Reader.NodeType == System.Xml.XmlNodeType.CDATA ||
-                Reader.NodeType == System.Xml.XmlNodeType.Whitespace ||
-                Reader.NodeType == System.Xml.XmlNodeType.SignificantWhitespace)
-                {
-                    tmp = ReadString(tmp, false);
-                    o.@Value = tmp;
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations3, ref readerCount3);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType Read3_ItemsChoiceType(string s)
-        {
-            switch (s)
-            {
-                case @"ExcludeQuery": return global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@ExcludeQuery;
-                case @"MaxValueQuery": return global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MaxValueQuery;
-                case @"MinValueQuery": return global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MinValueQuery;
-                case @"RegularQuery": return global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@RegularQuery;
-                default: throw CreateUnknownConstantException(s, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType));
-            }
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery Read13_WildcardablePropertyQuery(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id36_WildcardablePropertyQuery && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id46_AllowGlobbing && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@AllowGlobbing = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@AllowGlobbingSpecified = true;
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":AllowGlobbing");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations4 = 0;
-            int readerCount4 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read12_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations4, ref readerCount4);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter Read12_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id13_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter();
-            global::System.String[] a_8 = null;
-            int ca_8 = 0;
-            global::System.String[] a_11 = null;
-            int ca_11 = 0;
-            global::System.String[] a_16 = null;
-            int ca_16 = 0;
-            bool[] paramsRead = new bool[18];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[10] && ((object)Reader.LocalName == (object)_id47_IsMandatory && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@IsMandatory = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@IsMandatorySpecified = true;
-                    paramsRead[10] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_11 = (global::System.String[])EnsureArrayIndex(a_11, ca_11, typeof(global::System.String)); a_11[ca_11++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[12] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[12] = true;
-                }
-                else if (!paramsRead[13] && ((object)Reader.LocalName == (object)_id50_Position && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Position = CollapseWhitespace(Reader.Value);
-                    paramsRead[13] = true;
-                }
-                else if (!paramsRead[14] && ((object)Reader.LocalName == (object)_id51_ValueFromPipeline && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipeline = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineSpecified = true;
-                    paramsRead[14] = true;
-                }
-                else if (!paramsRead[15] && ((object)Reader.LocalName == (object)_id52_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipelineByPropertyName = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineByPropertyNameSpecified = true;
-                    paramsRead[15] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id53_CmdletParameterSets && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_16 = (global::System.String[])EnsureArrayIndex(a_16, ca_16, typeof(global::System.String)); a_16[ca_16++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[17] && ((object)Reader.LocalName == (object)_id54_ErrorOnNoMatch && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ErrorOnNoMatch = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ErrorOnNoMatchSpecified = true;
-                    paramsRead[17] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":IsMandatory, :Aliases, :PSName, :Position, :ValueFromPipeline, :ValueFromPipelineByPropertyName, :CmdletParameterSets, :ErrorOnNoMatch");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-                o.@CmdletParameterSets = (global::System.String[])ShrinkArray(a_16, ca_16, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations5 = 0;
-            int readerCount5 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id55_AllowEmptyCollection && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyCollection = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id56_AllowEmptyString && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyString = Read1_Object(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id57_AllowNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowNull = Read1_Object(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id58_ValidateNotNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNull = Read1_Object(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id59_ValidateNotNullOrEmpty && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNullOrEmpty = Read1_Object(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id60_ValidateCount && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateCount = Read4_Item(false, true);
-                        paramsRead[5] = true;
-                    }
-                    else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id61_ValidateLength && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateLength = Read5_Item(false, true);
-                        paramsRead[6] = true;
-                    }
-                    else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id62_ValidateRange && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateRange = Read6_Item(false, true);
-                        paramsRead[7] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id63_ValidateSet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::System.String[] a_8_0 = null;
-                            int ca_8_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations6 = 0;
-                                int readerCount6 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            {
-                                                a_8_0 = (global::System.String[])EnsureArrayIndex(a_8_0, ca_8_0, typeof(global::System.String)); a_8_0[ca_8_0++] = Reader.ReadElementString();
-                                            }
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations6, ref readerCount6);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@ValidateSet = (global::System.String[])ShrinkArray(a_8_0, ca_8_0, typeof(global::System.String), false);
-                        }
-                    }
-                    else if (!paramsRead[9] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[9] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations5, ref readerCount5);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-            o.@CmdletParameterSets = (global::System.String[])ShrinkArray(a_16, ca_16, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata Read7_ObsoleteAttributeMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id17_ObsoleteAttributeMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata();
-            bool[] paramsRead = new bool[1];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id66_Message && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Message = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Message");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations7 = 0;
-            int readerCount7 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations7, ref readerCount7);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange Read6_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations8 = 0;
-            int readerCount8 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations8, ref readerCount8);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength Read5_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations9 = 0;
-            int readerCount9 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations9, ref readerCount9);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount Read4_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations10 = 0;
-            int readerCount10 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations10, ref readerCount10);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::System.Object Read1_Object(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (isNull)
-                {
-                    if (xsiType != null) return (global::System.Object)ReadTypedNull(xsiType);
-                    else return null;
-                }
-
-                if (xsiType == null)
-                {
-                    return ReadTypedPrimitive(new System.Xml.XmlQualifiedName("anyType", "http://www.w3.org/2001/XMLSchema"));
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id40_EnumMetadataEnumValue && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read49_EnumMetadataEnumValue(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id39_EnumMetadataEnum && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read48_EnumMetadataEnum(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id38_ClassMetadataData && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read47_ClassMetadataData(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id32_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read46_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id16_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read44_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id15_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read43_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id14_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read42_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id10_AssociationAssociatedInstance && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read41_AssociationAssociatedInstance(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id5_ClassMetadataInstanceCmdlets && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read40_ClassMetadataInstanceCmdlets(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id3_ClassMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read36_ClassMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id24_StaticCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read34_StaticCmdletMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id34_InstanceCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read31_InstanceCmdletMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id28_CommonMethodParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read26_CommonMethodParameterMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id29_StaticMethodParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read27_StaticMethodParameterMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id31_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read25_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id26_CommonMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read29_CommonMethodMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id33_InstanceMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read30_InstanceMethodMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id27_StaticMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read28_StaticMethodMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id30_CmdletOutputMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read23_CmdletOutputMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id21_GetCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read22_GetCmdletMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id22_CommonCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read21_CommonCmdletMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id25_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read45_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id6_GetCmdletParameters && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read19_GetCmdletParameters(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id20_QueryOption && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read18_QueryOption(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id9_Association && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read17_Association(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id7_PropertyMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read15_PropertyMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id35_PropertyQuery && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read14_PropertyQuery(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id36_WildcardablePropertyQuery && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read13_WildcardablePropertyQuery(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id11_CmdletParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read10_CmdletParameterMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id12_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read11_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id13_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read12_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id18_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read9_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id19_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read8_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id17_ObsoleteAttributeMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read7_ObsoleteAttributeMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id8_TypeMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read2_TypeMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id37_ItemsChoiceType && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    Reader.ReadStartElement();
-                    object e = Read3_ItemsChoiceType(CollapseWhitespace(Reader.ReadString()));
-                    ReadEndElement();
-                    return e;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id69_ArrayOfString && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::System.String[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::System.String[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations11 = 0;
-                            int readerCount11 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        {
-                                            z_0_0 = (global::System.String[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::System.String)); z_0_0[cz_0_0++] = Reader.ReadElementString();
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations11, ref readerCount11);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::System.String[])ShrinkArray(z_0_0, cz_0_0, typeof(global::System.String), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id70_ArrayOfPropertyMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations12 = 0;
-                            int readerCount12 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id71_Property && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)); z_0_0[cz_0_0++] = Read15_PropertyMetadata(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Property");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Property");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations12, ref readerCount12);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id72_ArrayOfAssociation && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.Association[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.Association[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations13 = 0;
-                            int readerCount13 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id9_Association && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association)); z_0_0[cz_0_0++] = Read17_Association(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Association");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Association");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations13, ref readerCount13);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id73_ArrayOfQueryOption && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations14 = 0;
-                            int readerCount14 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id74_Option && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)); z_0_0[cz_0_0++] = Read18_QueryOption(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Option");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Option");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations14, ref readerCount14);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id23_ConfirmImpact && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    Reader.ReadStartElement();
-                    object e = Read20_ConfirmImpact(CollapseWhitespace(Reader.ReadString()));
-                    ReadEndElement();
-                    return e;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id75_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations15 = 0;
-                            int readerCount15 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id76_Parameter && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)); z_0_0[cz_0_0++] = Read27_StaticMethodParameterMetadata(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations15, ref readerCount15);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id77_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations16 = 0;
-                            int readerCount16 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id76_Parameter && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)); z_0_0[cz_0_0++] = Read25_Item(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations16, ref readerCount16);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id78_ArrayOfStaticCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations17 = 0;
-                            int readerCount17 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id79_Cmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)); z_0_0[cz_0_0++] = Read34_StaticCmdletMetadata(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations17, ref readerCount17);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id80_ArrayOfClassMetadataData && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations18 = 0;
-                            int readerCount18 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id81_Data && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)); z_0_0[cz_0_0++] = Read35_ClassMetadataData(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Data");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Data");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations18, ref readerCount18);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData), false);
-                    }
-
-                    return a;
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id82_ArrayOfEnumMetadataEnum && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                    global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] a = null;
-                    if (!ReadNull())
-                    {
-                        global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] z_0_0 = null;
-                        int cz_0_0 = 0;
-                        if ((Reader.IsEmptyElement))
-                        {
-                            Reader.Skip();
-                        }
-                        else
-                        {
-                            Reader.ReadStartElement();
-                            Reader.MoveToContent();
-                            int whileIterations19 = 0;
-                            int readerCount19 = ReaderCount;
-                            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                            {
-                                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                {
-                                    if (((object)Reader.LocalName == (object)_id83_Enum && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                    {
-                                        z_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])EnsureArrayIndex(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)); z_0_0[cz_0_0++] = Read38_EnumMetadataEnum(false, true);
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enum");
-                                    }
-                                }
-                                else
-                                {
-                                    UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enum");
-                                }
-
-                                Reader.MoveToContent();
-                                CheckReaderCount(ref whileIterations19, ref readerCount19);
-                            }
-
-                            ReadEndElement();
-                        }
-
-                        a = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])ShrinkArray(z_0_0, cz_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum), false);
-                    }
-
-                    return a;
-                }
-                else
-                    return ReadTypedPrimitive((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::System.Object o;
-            o = new global::System.Object();
-            bool[] paramsRead = Array.Empty<bool>();
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations20 = 0;
-            int readerCount20 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations20, ref readerCount20);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum Read38_EnumMetadataEnum(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum();
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[] a_0 = null;
-            int ca_0 = 0;
-            bool[] paramsRead = new bool[4];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id43_EnumName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@EnumName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id44_UnderlyingType && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@UnderlyingType = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id45_BitwiseFlags && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@BitwiseFlags = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@BitwiseFlagsSpecified = true;
-                    paramsRead[3] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":EnumName, :UnderlyingType, :BitwiseFlags");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Value = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])ShrinkArray(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations21 = 0;
-            int readerCount21 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (((object)Reader.LocalName == (object)_id42_Value && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])EnsureArrayIndex(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)); a_0[ca_0++] = Read37_EnumMetadataEnumValue(false, true);
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Value");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Value");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations21, ref readerCount21);
-            }
-
-            o.@Value = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue[])ShrinkArray(a_0, ca_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData Read35_ClassMetadataData(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id41_Name && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Name = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Name");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations22 = 0;
-            int readerCount22 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                string tmp = null;
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else if (Reader.NodeType == System.Xml.XmlNodeType.Text ||
-                Reader.NodeType == System.Xml.XmlNodeType.CDATA ||
-                Reader.NodeType == System.Xml.XmlNodeType.Whitespace ||
-                Reader.NodeType == System.Xml.XmlNodeType.SignificantWhitespace)
-                {
-                    tmp = ReadString(tmp, false);
-                    o.@Value = tmp;
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations22, ref readerCount22);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata Read34_StaticCmdletMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id24_StaticCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[] a_1 = null;
-            int ca_1 = 0;
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Method = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[])ShrinkArray(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations23 = 0;
-            int readerCount23 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id84_CmdletMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletMetadata = Read33_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id85_Method && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[])EnsureArrayIndex(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)); a_1[ca_1++] = Read28_StaticMethodMetadata(false, true);
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Method");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Method");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations23, ref readerCount23);
-            }
-
-            o.@Method = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata[])ShrinkArray(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata Read28_StaticMethodMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id27_StaticMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] a_2 = null;
-            int ca_2 = 0;
-            bool[] paramsRead = new bool[4];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id86_MethodName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@MethodName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id87_CmdletParameterSet && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@CmdletParameterSet = Reader.Value;
-                    paramsRead[3] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":MethodName, :CmdletParameterSet");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations24 = 0;
-            int readerCount24 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id88_ReturnValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ReturnValue = Read24_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id89_Parameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[] a_2_0 = null;
-                            int ca_2_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations25 = 0;
-                                int readerCount25 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id76_Parameter && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_2_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])EnsureArrayIndex(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)); a_2_0[ca_2_0++] = Read27_StaticMethodParameterMetadata(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations25, ref readerCount25);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@Parameters = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata[])ShrinkArray(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata), false);
-                        }
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameters");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameters");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations24, ref readerCount24);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata Read27_StaticMethodParameterMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id29_StaticMethodParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata();
-            bool[] paramsRead = new bool[5];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id90_ParameterName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ParameterName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id91_DefaultValue && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultValue = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":ParameterName, :DefaultValue");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations26 = 0;
-            int readerCount26 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read8_Item(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id30_CmdletOutputMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletOutputMetadata = Read23_CmdletOutputMetadata(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations26, ref readerCount26);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata Read23_CmdletOutputMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id30_CmdletOutputMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":PSName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations27 = 0;
-            int readerCount27 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id93_ErrorCode && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ErrorCode = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ErrorCode");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ErrorCode");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations27, ref readerCount27);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter Read8_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id19_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter();
-            global::System.String[] a_8 = null;
-            int ca_8 = 0;
-            global::System.String[] a_11 = null;
-            int ca_11 = 0;
-            bool[] paramsRead = new bool[16];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[10] && ((object)Reader.LocalName == (object)_id47_IsMandatory && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@IsMandatory = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@IsMandatorySpecified = true;
-                    paramsRead[10] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_11 = (global::System.String[])EnsureArrayIndex(a_11, ca_11, typeof(global::System.String)); a_11[ca_11++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[12] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[12] = true;
-                }
-                else if (!paramsRead[13] && ((object)Reader.LocalName == (object)_id50_Position && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Position = CollapseWhitespace(Reader.Value);
-                    paramsRead[13] = true;
-                }
-                else if (!paramsRead[14] && ((object)Reader.LocalName == (object)_id51_ValueFromPipeline && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipeline = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineSpecified = true;
-                    paramsRead[14] = true;
-                }
-                else if (!paramsRead[15] && ((object)Reader.LocalName == (object)_id52_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipelineByPropertyName = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineByPropertyNameSpecified = true;
-                    paramsRead[15] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":IsMandatory, :Aliases, :PSName, :Position, :ValueFromPipeline, :ValueFromPipelineByPropertyName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations28 = 0;
-            int readerCount28 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id55_AllowEmptyCollection && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyCollection = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id56_AllowEmptyString && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyString = Read1_Object(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id57_AllowNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowNull = Read1_Object(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id58_ValidateNotNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNull = Read1_Object(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id59_ValidateNotNullOrEmpty && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNullOrEmpty = Read1_Object(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id60_ValidateCount && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateCount = Read4_Item(false, true);
-                        paramsRead[5] = true;
-                    }
-                    else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id61_ValidateLength && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateLength = Read5_Item(false, true);
-                        paramsRead[6] = true;
-                    }
-                    else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id62_ValidateRange && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateRange = Read6_Item(false, true);
-                        paramsRead[7] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id63_ValidateSet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::System.String[] a_8_0 = null;
-                            int ca_8_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations29 = 0;
-                                int readerCount29 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            {
-                                                a_8_0 = (global::System.String[])EnsureArrayIndex(a_8_0, ca_8_0, typeof(global::System.String)); a_8_0[ca_8_0++] = Reader.ReadElementString();
-                                            }
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations29, ref readerCount29);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@ValidateSet = (global::System.String[])ShrinkArray(a_8_0, ca_8_0, typeof(global::System.String), false);
-                        }
-                    }
-                    else if (!paramsRead[9] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[9] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations28, ref readerCount28);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata Read2_TypeMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id8_TypeMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id94_PSType && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSType = Reader.Value;
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id95_ETSType && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ETSType = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":PSType, :ETSType");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations30 = 0;
-            int readerCount30 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations30, ref readerCount30);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue Read24_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations31 = 0;
-            int readerCount31 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id30_CmdletOutputMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletOutputMetadata = Read23_CmdletOutputMetadata(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations31, ref readerCount31);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata Read33_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata();
-            global::System.String[] a_3 = null;
-            int ca_3 = 0;
-            bool[] paramsRead = new bool[7];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id96_Verb && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Verb = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id97_Noun && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Noun = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_3 = (global::System.String[])EnsureArrayIndex(a_3, ca_3, typeof(global::System.String)); a_3[ca_3++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id23_ConfirmImpact && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ConfirmImpact = Read20_ConfirmImpact(Reader.Value);
-                    o.@ConfirmImpactSpecified = true;
-                    paramsRead[4] = true;
-                }
-                else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id98_HelpUri && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@HelpUri = CollapseWhitespace(Reader.Value);
-                    paramsRead[5] = true;
-                }
-                else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id99_DefaultCmdletParameterSet && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultCmdletParameterSet = Reader.Value;
-                    paramsRead[6] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Verb, :Noun, :Aliases, :ConfirmImpact, :HelpUri, :DefaultCmdletParameterSet");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations32 = 0;
-            int readerCount32 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations32, ref readerCount32);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact Read20_ConfirmImpact(string s)
-        {
-            switch (s)
-            {
-                case @"None": return global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@None;
-                case @"Low": return global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@Low;
-                case @"Medium": return global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@Medium;
-                case @"High": return global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact.@High;
-                default: throw CreateUnknownConstantException(s, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact));
-            }
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata Read25_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id31_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata();
-            bool[] paramsRead = new bool[5];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id90_ParameterName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ParameterName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id91_DefaultValue && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultValue = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":ParameterName, :DefaultValue");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations33 = 0;
-            int readerCount33 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read9_Item(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id30_CmdletOutputMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletOutputMetadata = Read23_CmdletOutputMetadata(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations33, ref readerCount33);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter Read9_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id18_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter();
-            global::System.String[] a_8 = null;
-            int ca_8 = 0;
-            global::System.String[] a_11 = null;
-            int ca_11 = 0;
-            bool[] paramsRead = new bool[15];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[10] && ((object)Reader.LocalName == (object)_id47_IsMandatory && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@IsMandatory = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@IsMandatorySpecified = true;
-                    paramsRead[10] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_11 = (global::System.String[])EnsureArrayIndex(a_11, ca_11, typeof(global::System.String)); a_11[ca_11++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[12] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[12] = true;
-                }
-                else if (!paramsRead[13] && ((object)Reader.LocalName == (object)_id50_Position && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Position = CollapseWhitespace(Reader.Value);
-                    paramsRead[13] = true;
-                }
-                else if (!paramsRead[14] && ((object)Reader.LocalName == (object)_id52_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipelineByPropertyName = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineByPropertyNameSpecified = true;
-                    paramsRead[14] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":IsMandatory, :Aliases, :PSName, :Position, :ValueFromPipelineByPropertyName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations34 = 0;
-            int readerCount34 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id55_AllowEmptyCollection && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyCollection = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id56_AllowEmptyString && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyString = Read1_Object(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id57_AllowNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowNull = Read1_Object(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id58_ValidateNotNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNull = Read1_Object(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id59_ValidateNotNullOrEmpty && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNullOrEmpty = Read1_Object(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id60_ValidateCount && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateCount = Read4_Item(false, true);
-                        paramsRead[5] = true;
-                    }
-                    else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id61_ValidateLength && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateLength = Read5_Item(false, true);
-                        paramsRead[6] = true;
-                    }
-                    else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id62_ValidateRange && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateRange = Read6_Item(false, true);
-                        paramsRead[7] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id63_ValidateSet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::System.String[] a_8_0 = null;
-                            int ca_8_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations35 = 0;
-                                int readerCount35 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            {
-                                                a_8_0 = (global::System.String[])EnsureArrayIndex(a_8_0, ca_8_0, typeof(global::System.String)); a_8_0[ca_8_0++] = Reader.ReadElementString();
-                                            }
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations35, ref readerCount35);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@ValidateSet = (global::System.String[])ShrinkArray(a_8_0, ca_8_0, typeof(global::System.String), false);
-                        }
-                    }
-                    else if (!paramsRead[9] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[9] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations34, ref readerCount34);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption Read18_QueryOption(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id20_QueryOption && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption();
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id100_OptionName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@OptionName = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":OptionName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations36 = 0;
-            int readerCount36 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read11_Item(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations36, ref readerCount36);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter Read11_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id12_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id13_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read12_Item(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter();
-            global::System.String[] a_8 = null;
-            int ca_8 = 0;
-            global::System.String[] a_11 = null;
-            int ca_11 = 0;
-            global::System.String[] a_16 = null;
-            int ca_16 = 0;
-            bool[] paramsRead = new bool[17];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[10] && ((object)Reader.LocalName == (object)_id47_IsMandatory && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@IsMandatory = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@IsMandatorySpecified = true;
-                    paramsRead[10] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_11 = (global::System.String[])EnsureArrayIndex(a_11, ca_11, typeof(global::System.String)); a_11[ca_11++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[12] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[12] = true;
-                }
-                else if (!paramsRead[13] && ((object)Reader.LocalName == (object)_id50_Position && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Position = CollapseWhitespace(Reader.Value);
-                    paramsRead[13] = true;
-                }
-                else if (!paramsRead[14] && ((object)Reader.LocalName == (object)_id51_ValueFromPipeline && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipeline = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineSpecified = true;
-                    paramsRead[14] = true;
-                }
-                else if (!paramsRead[15] && ((object)Reader.LocalName == (object)_id52_Item && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ValueFromPipelineByPropertyName = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@ValueFromPipelineByPropertyNameSpecified = true;
-                    paramsRead[15] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id53_CmdletParameterSets && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_16 = (global::System.String[])EnsureArrayIndex(a_16, ca_16, typeof(global::System.String)); a_16[ca_16++] = vals[i];
-                    }
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":IsMandatory, :Aliases, :PSName, :Position, :ValueFromPipeline, :ValueFromPipelineByPropertyName, :CmdletParameterSets");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-                o.@CmdletParameterSets = (global::System.String[])ShrinkArray(a_16, ca_16, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations37 = 0;
-            int readerCount37 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id55_AllowEmptyCollection && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyCollection = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id56_AllowEmptyString && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyString = Read1_Object(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id57_AllowNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowNull = Read1_Object(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id58_ValidateNotNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNull = Read1_Object(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id59_ValidateNotNullOrEmpty && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNullOrEmpty = Read1_Object(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id60_ValidateCount && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateCount = Read4_Item(false, true);
-                        paramsRead[5] = true;
-                    }
-                    else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id61_ValidateLength && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateLength = Read5_Item(false, true);
-                        paramsRead[6] = true;
-                    }
-                    else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id62_ValidateRange && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateRange = Read6_Item(false, true);
-                        paramsRead[7] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id63_ValidateSet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::System.String[] a_8_0 = null;
-                            int ca_8_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations38 = 0;
-                                int readerCount38 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            {
-                                                a_8_0 = (global::System.String[])EnsureArrayIndex(a_8_0, ca_8_0, typeof(global::System.String)); a_8_0[ca_8_0++] = Reader.ReadElementString();
-                                            }
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations38, ref readerCount38);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@ValidateSet = (global::System.String[])ShrinkArray(a_8_0, ca_8_0, typeof(global::System.String), false);
-                        }
-                    }
-                    else if (!paramsRead[9] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[9] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations37, ref readerCount37);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-            o.@CmdletParameterSets = (global::System.String[])ShrinkArray(a_16, ca_16, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.Association Read17_Association(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id9_Association && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.Association o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.Association();
-            bool[] paramsRead = new bool[4];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id9_Association && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Association1 = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id101_SourceRole && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@SourceRole = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id102_ResultRole && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ResultRole = Reader.Value;
-                    paramsRead[3] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Association, :SourceRole, :ResultRole");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations39 = 0;
-            int readerCount39 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id103_AssociatedInstance && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AssociatedInstance = Read16_AssociationAssociatedInstance(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AssociatedInstance");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AssociatedInstance");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations39, ref readerCount39);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance Read16_AssociationAssociatedInstance(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations40 = 0;
-            int readerCount40 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read12_Item(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations40, ref readerCount40);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata Read15_PropertyMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id7_PropertyMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[] a_1 = null;
-            int ca_1 = 0;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[] choice_a_1 = null;
-            int cchoice_a_1 = 0;
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id104_PropertyName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PropertyName = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":PropertyName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Items = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])ShrinkArray(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery), true);
-                o.@ItemsElementName = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])ShrinkArray(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations41 = 0;
-            int readerCount41 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id105_MaxValueQuery && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])EnsureArrayIndex(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)); a_1[ca_1++] = Read14_PropertyQuery(false, true);
-                        choice_a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])EnsureArrayIndex(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)); choice_a_1[cchoice_a_1++] = global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MaxValueQuery;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id106_RegularQuery && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])EnsureArrayIndex(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)); a_1[ca_1++] = Read13_WildcardablePropertyQuery(false, true);
-                        choice_a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])EnsureArrayIndex(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)); choice_a_1[cchoice_a_1++] = global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@RegularQuery;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id107_ExcludeQuery && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])EnsureArrayIndex(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)); a_1[ca_1++] = Read13_WildcardablePropertyQuery(false, true);
-                        choice_a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])EnsureArrayIndex(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)); choice_a_1[cchoice_a_1++] = global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@ExcludeQuery;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id108_MinValueQuery && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])EnsureArrayIndex(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)); a_1[ca_1++] = Read14_PropertyQuery(false, true);
-                        choice_a_1 = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])EnsureArrayIndex(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)); choice_a_1[cchoice_a_1++] = global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType.@MinValueQuery;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:MaxValueQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:RegularQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ExcludeQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:MinValueQuery");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:MaxValueQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:RegularQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ExcludeQuery, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:MinValueQuery");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations41, ref readerCount41);
-            }
-
-            o.@Items = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery[])ShrinkArray(a_1, ca_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery), true);
-            o.@ItemsElementName = (global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType[])ShrinkArray(choice_a_1, cchoice_a_1, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery Read14_PropertyQuery(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id35_PropertyQuery && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id36_WildcardablePropertyQuery && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read13_WildcardablePropertyQuery(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery();
-            bool[] paramsRead = new bool[1];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations42 = 0;
-            int readerCount42 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read12_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations42, ref readerCount42);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata Read10_CmdletParameterMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id11_CmdletParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id12_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read11_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id13_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read12_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id18_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read9_Item(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id19_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read8_Item(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata();
-            global::System.String[] a_8 = null;
-            int ca_8 = 0;
-            global::System.String[] a_11 = null;
-            int ca_11 = 0;
-            bool[] paramsRead = new bool[14];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[10] && ((object)Reader.LocalName == (object)_id47_IsMandatory && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@IsMandatory = System.Xml.XmlConvert.ToBoolean(Reader.Value);
-                    o.@IsMandatorySpecified = true;
-                    paramsRead[10] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_11 = (global::System.String[])EnsureArrayIndex(a_11, ca_11, typeof(global::System.String)); a_11[ca_11++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[12] && ((object)Reader.LocalName == (object)_id49_PSName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@PSName = Reader.Value;
-                    paramsRead[12] = true;
-                }
-                else if (!paramsRead[13] && ((object)Reader.LocalName == (object)_id50_Position && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Position = CollapseWhitespace(Reader.Value);
-                    paramsRead[13] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":IsMandatory, :Aliases, :PSName, :Position");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations43 = 0;
-            int readerCount43 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id55_AllowEmptyCollection && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyCollection = Read1_Object(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id56_AllowEmptyString && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowEmptyString = Read1_Object(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id57_AllowNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@AllowNull = Read1_Object(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id58_ValidateNotNull && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNull = Read1_Object(false, true);
-                        paramsRead[3] = true;
-                    }
-                    else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id59_ValidateNotNullOrEmpty && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateNotNullOrEmpty = Read1_Object(false, true);
-                        paramsRead[4] = true;
-                    }
-                    else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id60_ValidateCount && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateCount = Read4_Item(false, true);
-                        paramsRead[5] = true;
-                    }
-                    else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id61_ValidateLength && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateLength = Read5_Item(false, true);
-                        paramsRead[6] = true;
-                    }
-                    else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id62_ValidateRange && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ValidateRange = Read6_Item(false, true);
-                        paramsRead[7] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id63_ValidateSet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::System.String[] a_8_0 = null;
-                            int ca_8_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations44 = 0;
-                                int readerCount44 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id64_AllowedValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            {
-                                                a_8_0 = (global::System.String[])EnsureArrayIndex(a_8_0, ca_8_0, typeof(global::System.String)); a_8_0[ca_8_0++] = Reader.ReadElementString();
-                                            }
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowedValue");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations44, ref readerCount44);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@ValidateSet = (global::System.String[])ShrinkArray(a_8_0, ca_8_0, typeof(global::System.String), false);
-                        }
-                    }
-                    else if (!paramsRead[9] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[9] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyCollection, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowEmptyString, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:AllowNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNull, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateNotNullOrEmpty, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateCount, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateLength, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateRange, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ValidateSet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations43, ref readerCount43);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_11, ca_11, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters Read19_GetCmdletParameters(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id6_GetCmdletParameters && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters();
-            global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] a_0 = null;
-            int ca_0 = 0;
-            global::Microsoft.PowerShell.Cmdletization.Xml.Association[] a_1 = null;
-            int ca_1 = 0;
-            global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] a_2 = null;
-            int ca_2 = 0;
-            bool[] paramsRead = new bool[4];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[3] && ((object)Reader.LocalName == (object)_id99_DefaultCmdletParameterSet && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultCmdletParameterSet = Reader.Value;
-                    paramsRead[3] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":DefaultCmdletParameterSet");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations45 = 0;
-            int readerCount45 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (((object)Reader.LocalName == (object)_id109_QueryableProperties && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[] a_0_0 = null;
-                            int ca_0_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations46 = 0;
-                                int readerCount46 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id71_Property && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_0_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])EnsureArrayIndex(a_0_0, ca_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)); a_0_0[ca_0_0++] = Read15_PropertyMetadata(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Property");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Property");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations46, ref readerCount46);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@QueryableProperties = (global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata[])ShrinkArray(a_0_0, ca_0_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata), false);
-                        }
-                    }
-                    else if (((object)Reader.LocalName == (object)_id110_QueryableAssociations && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.Association[] a_1_0 = null;
-                            int ca_1_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations47 = 0;
-                                int readerCount47 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id9_Association && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_1_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])EnsureArrayIndex(a_1_0, ca_1_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association)); a_1_0[ca_1_0++] = Read17_Association(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Association");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Association");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations47, ref readerCount47);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@QueryableAssociations = (global::Microsoft.PowerShell.Cmdletization.Xml.Association[])ShrinkArray(a_1_0, ca_1_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association), false);
-                        }
-                    }
-                    else if (((object)Reader.LocalName == (object)_id111_QueryOptions && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[] a_2_0 = null;
-                            int ca_2_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations48 = 0;
-                                int readerCount48 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id74_Option && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_2_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])EnsureArrayIndex(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)); a_2_0[ca_2_0++] = Read18_QueryOption(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Option");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Option");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations48, ref readerCount48);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@QueryOptions = (global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption[])ShrinkArray(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption), false);
-                        }
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryableProperties, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryableAssociations, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryOptions");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryableProperties, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryableAssociations, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:QueryOptions");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations45, ref readerCount45);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata Read45_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id25_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata();
-            global::System.String[] a_3 = null;
-            int ca_3 = 0;
-            bool[] paramsRead = new bool[7];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id96_Verb && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Verb = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id97_Noun && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Noun = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_3 = (global::System.String[])EnsureArrayIndex(a_3, ca_3, typeof(global::System.String)); a_3[ca_3++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id23_ConfirmImpact && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ConfirmImpact = Read20_ConfirmImpact(Reader.Value);
-                    o.@ConfirmImpactSpecified = true;
-                    paramsRead[4] = true;
-                }
-                else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id98_HelpUri && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@HelpUri = CollapseWhitespace(Reader.Value);
-                    paramsRead[5] = true;
-                }
-                else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id99_DefaultCmdletParameterSet && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultCmdletParameterSet = Reader.Value;
-                    paramsRead[6] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Verb, :Noun, :Aliases, :ConfirmImpact, :HelpUri, :DefaultCmdletParameterSet");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations49 = 0;
-            int readerCount49 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations49, ref readerCount49);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata Read21_CommonCmdletMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id22_CommonCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id25_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read45_Item(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata();
-            global::System.String[] a_3 = null;
-            int ca_3 = 0;
-            bool[] paramsRead = new bool[6];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id96_Verb && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Verb = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id97_Noun && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Noun = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (((object)Reader.LocalName == (object)_id48_Aliases && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    string listValues = Reader.Value;
-                    string[] vals = listValues.Split(null);
-                    for (int i = 0; i < vals.Length; i++)
-                    {
-                        a_3 = (global::System.String[])EnsureArrayIndex(a_3, ca_3, typeof(global::System.String)); a_3[ca_3++] = vals[i];
-                    }
-                }
-                else if (!paramsRead[4] && ((object)Reader.LocalName == (object)_id23_ConfirmImpact && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ConfirmImpact = Read20_ConfirmImpact(Reader.Value);
-                    o.@ConfirmImpactSpecified = true;
-                    paramsRead[4] = true;
-                }
-                else if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id98_HelpUri && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@HelpUri = CollapseWhitespace(Reader.Value);
-                    paramsRead[5] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Verb, :Noun, :Aliases, :ConfirmImpact, :HelpUri");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations50 = 0;
-            int readerCount50 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id65_Obsolete && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Obsolete = Read7_ObsoleteAttributeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Obsolete");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations50, ref readerCount50);
-            }
-
-            o.@Aliases = (global::System.String[])ShrinkArray(a_3, ca_3, typeof(global::System.String), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata Read22_GetCmdletMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id21_GetCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations51 = 0;
-            int readerCount51 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id84_CmdletMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletMetadata = Read21_CommonCmdletMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id6_GetCmdletParameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdletParameters = Read19_GetCmdletParameters(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations51, ref readerCount51);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata Read30_InstanceMethodMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id33_InstanceMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] a_2 = null;
-            int ca_2 = 0;
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id86_MethodName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@MethodName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":MethodName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations52 = 0;
-            int readerCount52 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id88_ReturnValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ReturnValue = Read24_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id89_Parameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[] a_2_0 = null;
-                            int ca_2_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations53 = 0;
-                                int readerCount53 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id76_Parameter && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_2_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])EnsureArrayIndex(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)); a_2_0[ca_2_0++] = Read25_Item(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameter");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations53, ref readerCount53);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@Parameters = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata[])ShrinkArray(a_2_0, ca_2_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata), false);
-                        }
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameters");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Parameters");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations52, ref readerCount52);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata Read29_CommonMethodMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id26_CommonMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id33_InstanceMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read30_InstanceMethodMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id27_StaticMethodMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read28_StaticMethodMetadata(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id86_MethodName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@MethodName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":MethodName");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations54 = 0;
-            int readerCount54 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id88_ReturnValue && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@ReturnValue = Read24_Item(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:ReturnValue");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations54, ref readerCount54);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata Read26_CommonMethodParameterMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id28_CommonMethodParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id29_StaticMethodParameterMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read27_StaticMethodParameterMetadata(isNullable, false);
-                else if (((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id31_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                    return Read25_Item(isNullable, false);
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata();
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id90_ParameterName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ParameterName = Reader.Value;
-                    paramsRead[1] = true;
-                }
-                else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id91_DefaultValue && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@DefaultValue = Reader.Value;
-                    paramsRead[2] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":ParameterName, :DefaultValue");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations55 = 0;
-            int readerCount55 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations55, ref readerCount55);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata Read31_InstanceCmdletMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id34_InstanceCmdletMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata();
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations56 = 0;
-            int readerCount56 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id84_CmdletMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletMetadata = Read21_CommonCmdletMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id85_Method && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Method = Read30_InstanceMethodMetadata(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id6_GetCmdletParameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdletParameters = Read19_GetCmdletParameters(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Method, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletMetadata, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Method, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations56, ref readerCount56);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata Read36_ClassMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id3_ClassMetadata && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] a_3 = null;
-            int ca_3 = 0;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] a_4 = null;
-            int ca_4 = 0;
-            bool[] paramsRead = new bool[8];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[5] && ((object)Reader.LocalName == (object)_id112_CmdletAdapter && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@CmdletAdapter = Reader.Value;
-                    paramsRead[5] = true;
-                }
-                else if (!paramsRead[6] && ((object)Reader.LocalName == (object)_id113_ClassName && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ClassName = Reader.Value;
-                    paramsRead[6] = true;
-                }
-                else if (!paramsRead[7] && ((object)Reader.LocalName == (object)_id114_ClassVersion && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@ClassVersion = Reader.Value;
-                    paramsRead[7] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":CmdletAdapter, :ClassName, :ClassVersion");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations57 = 0;
-            int readerCount57 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id115_Version && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        {
-                            o.@Version = Reader.ReadElementString();
-                        }
-
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id116_DefaultNoun && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        {
-                            o.@DefaultNoun = Reader.ReadElementString();
-                        }
-
-                        paramsRead[1] = true;
-                    }
-                    else if (!paramsRead[2] && ((object)Reader.LocalName == (object)_id117_InstanceCmdlets && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@InstanceCmdlets = Read32_ClassMetadataInstanceCmdlets(false, true);
-                        paramsRead[2] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id118_StaticCmdlets && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[] a_3_0 = null;
-                            int ca_3_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations58 = 0;
-                                int readerCount58 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id79_Cmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_3_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])EnsureArrayIndex(a_3_0, ca_3_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)); a_3_0[ca_3_0++] = Read34_StaticCmdletMetadata(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations58, ref readerCount58);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@StaticCmdlets = (global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata[])ShrinkArray(a_3_0, ca_3_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata), false);
-                        }
-                    }
-                    else if (((object)Reader.LocalName == (object)_id119_CmdletAdapterPrivateData && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[] a_4_0 = null;
-                            int ca_4_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations59 = 0;
-                                int readerCount59 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id81_Data && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_4_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])EnsureArrayIndex(a_4_0, ca_4_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)); a_4_0[ca_4_0++] = Read35_ClassMetadataData(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Data");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Data");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations59, ref readerCount59);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@CmdletAdapterPrivateData = (global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData[])ShrinkArray(a_4_0, ca_4_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData), false);
-                        }
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Version, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:DefaultNoun, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:InstanceCmdlets, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:StaticCmdlets, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletAdapterPrivateData");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Version, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:DefaultNoun, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:InstanceCmdlets, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:StaticCmdlets, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletAdapterPrivateData");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations57, ref readerCount57);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets Read32_ClassMetadataInstanceCmdlets(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets();
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[] a_2 = null;
-            int ca_2 = 0;
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Cmdlet = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])ShrinkArray(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations60 = 0;
-            int readerCount60 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id6_GetCmdletParameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdletParameters = Read19_GetCmdletParameters(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id120_GetCmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdlet = Read22_GetCmdletMetadata(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id79_Cmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_2 = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])EnsureArrayIndex(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)); a_2[ca_2++] = Read31_InstanceCmdletMetadata(false, true);
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdlet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdlet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations60, ref readerCount60);
-            }
-
-            o.@Cmdlet = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])ShrinkArray(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets Read40_ClassMetadataInstanceCmdlets(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id5_ClassMetadataInstanceCmdlets && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets();
-            global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[] a_2 = null;
-            int ca_2 = 0;
-            bool[] paramsRead = new bool[3];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                o.@Cmdlet = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])ShrinkArray(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata), true);
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations61 = 0;
-            int readerCount61 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id6_GetCmdletParameters && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdletParameters = Read19_GetCmdletParameters(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id120_GetCmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@GetCmdlet = Read22_GetCmdletMetadata(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id79_Cmdlet && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        a_2 = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])EnsureArrayIndex(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)); a_2[ca_2++] = Read31_InstanceCmdletMetadata(false, true);
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdlet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdletParameters, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:GetCmdlet, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Cmdlet");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations61, ref readerCount61);
-            }
-
-            o.@Cmdlet = (global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata[])ShrinkArray(a_2, ca_2, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata), true);
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance Read41_AssociationAssociatedInstance(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id10_AssociationAssociatedInstance && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations62 = 0;
-            int readerCount62 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id11_CmdletParameterMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletParameterMetadata = Read12_Item(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletParameterMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations62, ref readerCount62);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount Read42_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id14_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations63 = 0;
-            int readerCount63 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations63, ref readerCount63);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength Read43_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id15_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations64 = 0;
-            int readerCount64 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations64, ref readerCount64);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange Read44_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id16_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id67_Min && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Min = CollapseWhitespace(Reader.Value);
-                    paramsRead[0] = true;
-                }
-                else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id68_Max && (object)Reader.NamespaceURI == (object)_id4_Item))
-                {
-                    o.@Max = CollapseWhitespace(Reader.Value);
-                    paramsRead[1] = true;
-                }
-                else if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o, @":Min, :Max");
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations65 = 0;
-            int readerCount65 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-                else
-                {
-                    UnknownNode((object)o, string.Empty);
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations65, ref readerCount65);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue Read46_Item(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id32_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue();
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations66 = 0;
-            int readerCount66 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id92_Type && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Type = Read2_TypeMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (!paramsRead[1] && ((object)Reader.LocalName == (object)_id30_CmdletOutputMetadata && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@CmdletOutputMetadata = Read23_CmdletOutputMetadata(false, true);
-                        paramsRead[1] = true;
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Type, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:CmdletOutputMetadata");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations66, ref readerCount66);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        private global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata Read39_PowerShellMetadata(bool isNullable, bool checkType)
-        {
-            System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null;
-            bool isNull = false;
-            if (isNullable) isNull = ReadNull();
-            if (checkType)
-            {
-                if (xsiType == null || ((object)((System.Xml.XmlQualifiedName)xsiType).Name == (object)_id4_Item && (object)((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)_id2_Item))
-                {
-                }
-                else
-                    throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType);
-            }
-
-            if (isNull) return null;
-            global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata o;
-            o = new global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata();
-            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] a_1 = null;
-            int ca_1 = 0;
-            bool[] paramsRead = new bool[2];
-            while (Reader.MoveToNextAttribute())
-            {
-                if (!IsXmlnsAttribute(Reader.Name))
-                {
-                    UnknownNode((object)o);
-                }
-            }
-
-            Reader.MoveToElement();
-            if (Reader.IsEmptyElement)
-            {
-                Reader.Skip();
-                return o;
-            }
-
-            Reader.ReadStartElement();
-            Reader.MoveToContent();
-            int whileIterations67 = 0;
-            int readerCount67 = ReaderCount;
-            while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-            {
-                if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                {
-                    if (!paramsRead[0] && ((object)Reader.LocalName == (object)_id121_Class && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        o.@Class = Read36_ClassMetadata(false, true);
-                        paramsRead[0] = true;
-                    }
-                    else if (((object)Reader.LocalName == (object)_id122_Enums && (object)Reader.NamespaceURI == (object)_id2_Item))
-                    {
-                        if (!ReadNull())
-                        {
-                            global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[] a_1_0 = null;
-                            int ca_1_0 = 0;
-                            if ((Reader.IsEmptyElement))
-                            {
-                                Reader.Skip();
-                            }
-                            else
-                            {
-                                Reader.ReadStartElement();
-                                Reader.MoveToContent();
-                                int whileIterations68 = 0;
-                                int readerCount68 = ReaderCount;
-                                while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None)
-                                {
-                                    if (Reader.NodeType == System.Xml.XmlNodeType.Element)
-                                    {
-                                        if (((object)Reader.LocalName == (object)_id83_Enum && (object)Reader.NamespaceURI == (object)_id2_Item))
-                                        {
-                                            a_1_0 = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])EnsureArrayIndex(a_1_0, ca_1_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)); a_1_0[ca_1_0++] = Read38_EnumMetadataEnum(false, true);
-                                        }
-                                        else
-                                        {
-                                            UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enum");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        UnknownNode(null, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enum");
-                                    }
-
-                                    Reader.MoveToContent();
-                                    CheckReaderCount(ref whileIterations68, ref readerCount68);
-                                }
-
-                                ReadEndElement();
-                            }
-
-                            o.@Enums = (global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum[])ShrinkArray(a_1_0, ca_1_0, typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum), false);
-                        }
-                    }
-                    else
-                    {
-                        UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Class, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enums");
-                    }
-                }
-                else
-                {
-                    UnknownNode((object)o, @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Class, http://schemas.microsoft.com/cmdlets-over-objects/2009/11:Enums");
-                }
-
-                Reader.MoveToContent();
-                CheckReaderCount(ref whileIterations67, ref readerCount67);
-            }
-
-            ReadEndElement();
-            return o;
-        }
-
-        protected override void InitCallbacks()
-        {
-        }
-
-        private string _id72_ArrayOfAssociation;
-        private string _id46_AllowGlobbing;
-        private string _id6_GetCmdletParameters;
-        private string _id25_Item;
-        private string _id62_ValidateRange;
-        private string _id118_StaticCmdlets;
-        private string _id58_ValidateNotNull;
-        private string _id17_ObsoleteAttributeMetadata;
-        private string _id49_PSName;
-        private string _id116_DefaultNoun;
-        private string _id38_ClassMetadataData;
-        private string _id114_ClassVersion;
-        private string _id66_Message;
-        private string _id65_Obsolete;
-        private string _id51_ValueFromPipeline;
-        private string _id108_MinValueQuery;
-        private string _id119_CmdletAdapterPrivateData;
-        private string _id21_GetCmdletMetadata;
-        private string _id120_GetCmdlet;
-        private string _id67_Min;
-        private string _id56_AllowEmptyString;
-        private string _id30_CmdletOutputMetadata;
-        private string _id106_RegularQuery;
-        private string _id74_Option;
-        private string _id75_Item;
-        private string _id23_ConfirmImpact;
-        private string _id117_InstanceCmdlets;
-        private string _id83_Enum;
-        private string _id40_EnumMetadataEnumValue;
-        private string _id111_QueryOptions;
-        private string _id34_InstanceCmdletMetadata;
-        private string _id60_ValidateCount;
-        private string _id45_BitwiseFlags;
-        private string _id81_Data;
-        private string _id31_Item;
-        private string _id1_PowerShellMetadata;
-        private string _id98_HelpUri;
-        private string _id91_DefaultValue;
-        private string _id4_Item;
-        private string _id32_Item;
-        private string _id43_EnumName;
-        private string _id122_Enums;
-        private string _id82_ArrayOfEnumMetadataEnum;
-        private string _id14_Item;
-        private string _id48_Aliases;
-        private string _id115_Version;
-        private string _id11_CmdletParameterMetadata;
-        private string _id70_ArrayOfPropertyMetadata;
-        private string _id9_Association;
-        private string _id102_ResultRole;
-        private string _id29_StaticMethodParameterMetadata;
-        private string _id97_Noun;
-        private string _id47_IsMandatory;
-        private string _id35_PropertyQuery;
-        private string _id54_ErrorOnNoMatch;
-        private string _id3_ClassMetadata;
-        private string _id77_Item;
-        private string _id2_Item;
-        private string _id22_CommonCmdletMetadata;
-        private string _id37_ItemsChoiceType;
-        private string _id36_WildcardablePropertyQuery;
-        private string _id113_ClassName;
-        private string _id64_AllowedValue;
-        private string _id52_Item;
-        private string _id55_AllowEmptyCollection;
-        private string _id13_Item;
-        private string _id76_Parameter;
-        private string _id19_Item;
-        private string _id105_MaxValueQuery;
-        private string _id101_SourceRole;
-        private string _id5_ClassMetadataInstanceCmdlets;
-        private string _id112_CmdletAdapter;
-        private string _id10_AssociationAssociatedInstance;
-        private string _id93_ErrorCode;
-        private string _id41_Name;
-        private string _id68_Max;
-        private string _id50_Position;
-        private string _id100_OptionName;
-        private string _id84_CmdletMetadata;
-        private string _id87_CmdletParameterSet;
-        private string _id104_PropertyName;
-        private string _id28_CommonMethodParameterMetadata;
-        private string _id107_ExcludeQuery;
-        private string _id92_Type;
-        private string _id33_InstanceMethodMetadata;
-        private string _id63_ValidateSet;
-        private string _id53_CmdletParameterSets;
-        private string _id15_Item;
-        private string _id109_QueryableProperties;
-        private string _id57_AllowNull;
-        private string _id80_ArrayOfClassMetadataData;
-        private string _id99_DefaultCmdletParameterSet;
-        private string _id20_QueryOption;
-        private string _id89_Parameters;
-        private string _id90_ParameterName;
-        private string _id61_ValidateLength;
-        private string _id78_ArrayOfStaticCmdletMetadata;
-        private string _id16_Item;
-        private string _id39_EnumMetadataEnum;
-        private string _id7_PropertyMetadata;
-        private string _id110_QueryableAssociations;
-        private string _id86_MethodName;
-        private string _id8_TypeMetadata;
-        private string _id71_Property;
-        private string _id27_StaticMethodMetadata;
-        private string _id94_PSType;
-        private string _id44_UnderlyingType;
-        private string _id103_AssociatedInstance;
-        private string _id79_Cmdlet;
-        private string _id18_Item;
-        private string _id85_Method;
-        private string _id95_ETSType;
-        private string _id26_CommonMethodMetadata;
-        private string _id88_ReturnValue;
-        private string _id69_ArrayOfString;
-        private string _id24_StaticCmdletMetadata;
-        private string _id59_ValidateNotNullOrEmpty;
-        private string _id96_Verb;
-        private string _id121_Class;
-        private string _id73_ArrayOfQueryOption;
-        private string _id12_Item;
-        private string _id42_Value;
-
-        protected override void InitIDs()
-        {
-            _id72_ArrayOfAssociation = Reader.NameTable.Add(@"ArrayOfAssociation");
-            _id46_AllowGlobbing = Reader.NameTable.Add(@"AllowGlobbing");
-            _id6_GetCmdletParameters = Reader.NameTable.Add(@"GetCmdletParameters");
-            _id25_Item = Reader.NameTable.Add(@"StaticCmdletMetadataCmdletMetadata");
-            _id62_ValidateRange = Reader.NameTable.Add(@"ValidateRange");
-            _id118_StaticCmdlets = Reader.NameTable.Add(@"StaticCmdlets");
-            _id58_ValidateNotNull = Reader.NameTable.Add(@"ValidateNotNull");
-            _id17_ObsoleteAttributeMetadata = Reader.NameTable.Add(@"ObsoleteAttributeMetadata");
-            _id49_PSName = Reader.NameTable.Add(@"PSName");
-            _id116_DefaultNoun = Reader.NameTable.Add(@"DefaultNoun");
-            _id38_ClassMetadataData = Reader.NameTable.Add(@"ClassMetadataData");
-            _id114_ClassVersion = Reader.NameTable.Add(@"ClassVersion");
-            _id66_Message = Reader.NameTable.Add(@"Message");
-            _id65_Obsolete = Reader.NameTable.Add(@"Obsolete");
-            _id51_ValueFromPipeline = Reader.NameTable.Add(@"ValueFromPipeline");
-            _id108_MinValueQuery = Reader.NameTable.Add(@"MinValueQuery");
-            _id119_CmdletAdapterPrivateData = Reader.NameTable.Add(@"CmdletAdapterPrivateData");
-            _id21_GetCmdletMetadata = Reader.NameTable.Add(@"GetCmdletMetadata");
-            _id120_GetCmdlet = Reader.NameTable.Add(@"GetCmdlet");
-            _id67_Min = Reader.NameTable.Add(@"Min");
-            _id56_AllowEmptyString = Reader.NameTable.Add(@"AllowEmptyString");
-            _id30_CmdletOutputMetadata = Reader.NameTable.Add(@"CmdletOutputMetadata");
-            _id106_RegularQuery = Reader.NameTable.Add(@"RegularQuery");
-            _id74_Option = Reader.NameTable.Add(@"Option");
-            _id75_Item = Reader.NameTable.Add(@"ArrayOfStaticMethodParameterMetadata");
-            _id23_ConfirmImpact = Reader.NameTable.Add(@"ConfirmImpact");
-            _id117_InstanceCmdlets = Reader.NameTable.Add(@"InstanceCmdlets");
-            _id83_Enum = Reader.NameTable.Add(@"Enum");
-            _id40_EnumMetadataEnumValue = Reader.NameTable.Add(@"EnumMetadataEnumValue");
-            _id111_QueryOptions = Reader.NameTable.Add(@"QueryOptions");
-            _id34_InstanceCmdletMetadata = Reader.NameTable.Add(@"InstanceCmdletMetadata");
-            _id60_ValidateCount = Reader.NameTable.Add(@"ValidateCount");
-            _id45_BitwiseFlags = Reader.NameTable.Add(@"BitwiseFlags");
-            _id81_Data = Reader.NameTable.Add(@"Data");
-            _id31_Item = Reader.NameTable.Add(@"InstanceMethodParameterMetadata");
-            _id1_PowerShellMetadata = Reader.NameTable.Add(@"PowerShellMetadata");
-            _id98_HelpUri = Reader.NameTable.Add(@"HelpUri");
-            _id91_DefaultValue = Reader.NameTable.Add(@"DefaultValue");
-            _id4_Item = Reader.NameTable.Add(string.Empty);
-            _id32_Item = Reader.NameTable.Add(@"CommonMethodMetadataReturnValue");
-            _id43_EnumName = Reader.NameTable.Add(@"EnumName");
-            _id122_Enums = Reader.NameTable.Add(@"Enums");
-            _id82_ArrayOfEnumMetadataEnum = Reader.NameTable.Add(@"ArrayOfEnumMetadataEnum");
-            _id14_Item = Reader.NameTable.Add(@"CmdletParameterMetadataValidateCount");
-            _id48_Aliases = Reader.NameTable.Add(@"Aliases");
-            _id115_Version = Reader.NameTable.Add(@"Version");
-            _id11_CmdletParameterMetadata = Reader.NameTable.Add(@"CmdletParameterMetadata");
-            _id70_ArrayOfPropertyMetadata = Reader.NameTable.Add(@"ArrayOfPropertyMetadata");
-            _id9_Association = Reader.NameTable.Add(@"Association");
-            _id102_ResultRole = Reader.NameTable.Add(@"ResultRole");
-            _id29_StaticMethodParameterMetadata = Reader.NameTable.Add(@"StaticMethodParameterMetadata");
-            _id97_Noun = Reader.NameTable.Add(@"Noun");
-            _id47_IsMandatory = Reader.NameTable.Add(@"IsMandatory");
-            _id35_PropertyQuery = Reader.NameTable.Add(@"PropertyQuery");
-            _id54_ErrorOnNoMatch = Reader.NameTable.Add(@"ErrorOnNoMatch");
-            _id3_ClassMetadata = Reader.NameTable.Add(@"ClassMetadata");
-            _id77_Item = Reader.NameTable.Add(@"ArrayOfInstanceMethodParameterMetadata");
-            _id2_Item = Reader.NameTable.Add(@"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-            _id22_CommonCmdletMetadata = Reader.NameTable.Add(@"CommonCmdletMetadata");
-            _id37_ItemsChoiceType = Reader.NameTable.Add(@"ItemsChoiceType");
-            _id36_WildcardablePropertyQuery = Reader.NameTable.Add(@"WildcardablePropertyQuery");
-            _id113_ClassName = Reader.NameTable.Add(@"ClassName");
-            _id64_AllowedValue = Reader.NameTable.Add(@"AllowedValue");
-            _id52_Item = Reader.NameTable.Add(@"ValueFromPipelineByPropertyName");
-            _id55_AllowEmptyCollection = Reader.NameTable.Add(@"AllowEmptyCollection");
-            _id13_Item = Reader.NameTable.Add(@"CmdletParameterMetadataForGetCmdletFilteringParameter");
-            _id76_Parameter = Reader.NameTable.Add(@"Parameter");
-            _id19_Item = Reader.NameTable.Add(@"CmdletParameterMetadataForStaticMethodParameter");
-            _id105_MaxValueQuery = Reader.NameTable.Add(@"MaxValueQuery");
-            _id101_SourceRole = Reader.NameTable.Add(@"SourceRole");
-            _id5_ClassMetadataInstanceCmdlets = Reader.NameTable.Add(@"ClassMetadataInstanceCmdlets");
-            _id112_CmdletAdapter = Reader.NameTable.Add(@"CmdletAdapter");
-            _id10_AssociationAssociatedInstance = Reader.NameTable.Add(@"AssociationAssociatedInstance");
-            _id93_ErrorCode = Reader.NameTable.Add(@"ErrorCode");
-            _id41_Name = Reader.NameTable.Add(@"Name");
-            _id68_Max = Reader.NameTable.Add(@"Max");
-            _id50_Position = Reader.NameTable.Add(@"Position");
-            _id100_OptionName = Reader.NameTable.Add(@"OptionName");
-            _id84_CmdletMetadata = Reader.NameTable.Add(@"CmdletMetadata");
-            _id87_CmdletParameterSet = Reader.NameTable.Add(@"CmdletParameterSet");
-            _id104_PropertyName = Reader.NameTable.Add(@"PropertyName");
-            _id28_CommonMethodParameterMetadata = Reader.NameTable.Add(@"CommonMethodParameterMetadata");
-            _id107_ExcludeQuery = Reader.NameTable.Add(@"ExcludeQuery");
-            _id92_Type = Reader.NameTable.Add(@"Type");
-            _id33_InstanceMethodMetadata = Reader.NameTable.Add(@"InstanceMethodMetadata");
-            _id63_ValidateSet = Reader.NameTable.Add(@"ValidateSet");
-            _id53_CmdletParameterSets = Reader.NameTable.Add(@"CmdletParameterSets");
-            _id15_Item = Reader.NameTable.Add(@"CmdletParameterMetadataValidateLength");
-            _id109_QueryableProperties = Reader.NameTable.Add(@"QueryableProperties");
-            _id57_AllowNull = Reader.NameTable.Add(@"AllowNull");
-            _id80_ArrayOfClassMetadataData = Reader.NameTable.Add(@"ArrayOfClassMetadataData");
-            _id99_DefaultCmdletParameterSet = Reader.NameTable.Add(@"DefaultCmdletParameterSet");
-            _id20_QueryOption = Reader.NameTable.Add(@"QueryOption");
-            _id89_Parameters = Reader.NameTable.Add(@"Parameters");
-            _id90_ParameterName = Reader.NameTable.Add(@"ParameterName");
-            _id61_ValidateLength = Reader.NameTable.Add(@"ValidateLength");
-            _id78_ArrayOfStaticCmdletMetadata = Reader.NameTable.Add(@"ArrayOfStaticCmdletMetadata");
-            _id16_Item = Reader.NameTable.Add(@"CmdletParameterMetadataValidateRange");
-            _id39_EnumMetadataEnum = Reader.NameTable.Add(@"EnumMetadataEnum");
-            _id7_PropertyMetadata = Reader.NameTable.Add(@"PropertyMetadata");
-            _id110_QueryableAssociations = Reader.NameTable.Add(@"QueryableAssociations");
-            _id86_MethodName = Reader.NameTable.Add(@"MethodName");
-            _id8_TypeMetadata = Reader.NameTable.Add(@"TypeMetadata");
-            _id71_Property = Reader.NameTable.Add(@"Property");
-            _id27_StaticMethodMetadata = Reader.NameTable.Add(@"StaticMethodMetadata");
-            _id94_PSType = Reader.NameTable.Add(@"PSType");
-            _id44_UnderlyingType = Reader.NameTable.Add(@"UnderlyingType");
-            _id103_AssociatedInstance = Reader.NameTable.Add(@"AssociatedInstance");
-            _id79_Cmdlet = Reader.NameTable.Add(@"Cmdlet");
-            _id18_Item = Reader.NameTable.Add(@"CmdletParameterMetadataForInstanceMethodParameter");
-            _id85_Method = Reader.NameTable.Add(@"Method");
-            _id95_ETSType = Reader.NameTable.Add(@"ETSType");
-            _id26_CommonMethodMetadata = Reader.NameTable.Add(@"CommonMethodMetadata");
-            _id88_ReturnValue = Reader.NameTable.Add(@"ReturnValue");
-            _id69_ArrayOfString = Reader.NameTable.Add(@"ArrayOfString");
-            _id24_StaticCmdletMetadata = Reader.NameTable.Add(@"StaticCmdletMetadata");
-            _id59_ValidateNotNullOrEmpty = Reader.NameTable.Add(@"ValidateNotNullOrEmpty");
-            _id96_Verb = Reader.NameTable.Add(@"Verb");
-            _id121_Class = Reader.NameTable.Add(@"Class");
-            _id73_ArrayOfQueryOption = Reader.NameTable.Add(@"ArrayOfQueryOption");
-            _id12_Item = Reader.NameTable.Add(@"CmdletParameterMetadataForGetCmdletParameter");
-            _id42_Value = Reader.NameTable.Add(@"Value");
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal abstract class XmlSerializer1 : System.Xml.Serialization.XmlSerializer
-    {
-        protected override System.Xml.Serialization.XmlSerializationReader CreateReader()
-        {
-            return new XmlSerializationReader1();
-        }
-
-        protected override System.Xml.Serialization.XmlSerializationWriter CreateWriter()
-        {
-            return new XmlSerializationWriter1();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class PowerShellMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"PowerShellMetadata", @"http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write50_PowerShellMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read50_PowerShellMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ClassMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ClassMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write51_ClassMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read51_ClassMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ClassMetadataInstanceCmdletsSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ClassMetadataInstanceCmdlets", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write52_ClassMetadataInstanceCmdlets(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read52_ClassMetadataInstanceCmdlets();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class GetCmdletParametersSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"GetCmdletParameters", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write53_GetCmdletParameters(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read53_GetCmdletParameters();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class PropertyMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"PropertyMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write54_PropertyMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read54_PropertyMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class TypeMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"TypeMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write55_TypeMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read55_TypeMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class AssociationSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"Association", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write56_Association(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read56_Association();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class AssociationAssociatedInstanceSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"AssociationAssociatedInstance", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write57_AssociationAssociatedInstance(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read57_AssociationAssociatedInstance();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write58_CmdletParameterMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read58_CmdletParameterMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataForGetCmdletParameterSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataForGetCmdletParameter", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write59_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read59_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataForGetCmdletFilteringParameterSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataForGetCmdletFilteringParameter", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write60_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read60_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataValidateCountSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataValidateCount", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write61_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read61_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataValidateLengthSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataValidateLength", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write62_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read62_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataValidateRangeSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataValidateRange", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write63_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read63_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ObsoleteAttributeMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ObsoleteAttributeMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write64_ObsoleteAttributeMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read64_ObsoleteAttributeMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataForInstanceMethodParameterSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataForInstanceMethodParameter", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write65_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read65_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletParameterMetadataForStaticMethodParameterSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletParameterMetadataForStaticMethodParameter", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write66_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read66_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class QueryOptionSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"QueryOption", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write67_QueryOption(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read67_QueryOption();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class GetCmdletMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"GetCmdletMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write68_GetCmdletMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read68_GetCmdletMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CommonCmdletMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CommonCmdletMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write69_CommonCmdletMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read69_CommonCmdletMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ConfirmImpactSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ConfirmImpact", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write70_ConfirmImpact(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read70_ConfirmImpact();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class StaticCmdletMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"StaticCmdletMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write71_StaticCmdletMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read71_StaticCmdletMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class StaticCmdletMetadataCmdletMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"StaticCmdletMetadataCmdletMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write72_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read72_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CommonMethodMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CommonMethodMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write73_CommonMethodMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read73_CommonMethodMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class StaticMethodMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"StaticMethodMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write74_StaticMethodMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read74_StaticMethodMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CommonMethodParameterMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CommonMethodParameterMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write75_CommonMethodParameterMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read75_CommonMethodParameterMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class StaticMethodParameterMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"StaticMethodParameterMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write76_StaticMethodParameterMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read76_StaticMethodParameterMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CmdletOutputMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CmdletOutputMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write77_CmdletOutputMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read77_CmdletOutputMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class InstanceMethodParameterMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"InstanceMethodParameterMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write78_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read78_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class CommonMethodMetadataReturnValueSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"CommonMethodMetadataReturnValue", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write79_Item(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read79_Item();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class InstanceMethodMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"InstanceMethodMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write80_InstanceMethodMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read80_InstanceMethodMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class InstanceCmdletMetadataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"InstanceCmdletMetadata", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write81_InstanceCmdletMetadata(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read81_InstanceCmdletMetadata();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class PropertyQuerySerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"PropertyQuery", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write82_PropertyQuery(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read82_PropertyQuery();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class WildcardablePropertyQuerySerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"WildcardablePropertyQuery", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write83_WildcardablePropertyQuery(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read83_WildcardablePropertyQuery();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ItemsChoiceTypeSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ItemsChoiceType", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write84_ItemsChoiceType(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read84_ItemsChoiceType();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class ClassMetadataDataSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"ClassMetadataData", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write85_ClassMetadataData(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read85_ClassMetadataData();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class EnumMetadataEnumSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"EnumMetadataEnum", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write86_EnumMetadataEnum(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read86_EnumMetadataEnum();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal sealed class EnumMetadataEnumValueSerializer : XmlSerializer1
-    {
-        public override bool CanDeserialize(System.Xml.XmlReader xmlReader)
-        {
-            return xmlReader.IsStartElement(@"EnumMetadataEnumValue", string.Empty);
-        }
-
-        protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer)
-        {
-            ((XmlSerializationWriter1)writer).Write87_EnumMetadataEnumValue(objectToSerialize);
-        }
-
-        protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader)
-        {
-            return ((XmlSerializationReader1)reader).Read87_EnumMetadataEnumValue();
-        }
-    }
-
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("sgen", "4.0")]
-    internal class XmlSerializerContract : global::System.Xml.Serialization.XmlSerializerImplementation
-    {
-        public override global::System.Xml.Serialization.XmlSerializationReader Reader { get { return new XmlSerializationReader1(); } }
-
-        public override global::System.Xml.Serialization.XmlSerializationWriter Writer { get { return new XmlSerializationWriter1(); } }
-
-        private System.Collections.Hashtable _readMethods = null;
-        public override System.Collections.Hashtable ReadMethods
-        {
-            get
-            {
-                if (_readMethods == null)
-                {
-                    System.Collections.Hashtable _tmp = new System.Collections.Hashtable();
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata:http://schemas.microsoft.com/cmdlets-over-objects/2009/11::False:"] = @"Read50_PowerShellMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata::"] = @"Read51_ClassMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets::"] = @"Read52_ClassMetadataInstanceCmdlets";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters::"] = @"Read53_GetCmdletParameters";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata::"] = @"Read54_PropertyMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata::"] = @"Read55_TypeMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.Association::"] = @"Read56_Association";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance::"] = @"Read57_AssociationAssociatedInstance";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata::"] = @"Read58_CmdletParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter::"] = @"Read59_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter::"] = @"Read60_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount::"] = @"Read61_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength::"] = @"Read62_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange::"] = @"Read63_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata::"] = @"Read64_ObsoleteAttributeMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter::"] = @"Read65_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter::"] = @"Read66_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.QueryOption::"] = @"Read67_QueryOption";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata::"] = @"Read68_GetCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata::"] = @"Read69_CommonCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact::"] = @"Read70_ConfirmImpact";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata::"] = @"Read71_StaticCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata::"] = @"Read72_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata::"] = @"Read73_CommonMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata::"] = @"Read74_StaticMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata::"] = @"Read75_CommonMethodParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata::"] = @"Read76_StaticMethodParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata::"] = @"Read77_CmdletOutputMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata::"] = @"Read78_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue::"] = @"Read79_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata::"] = @"Read80_InstanceMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata::"] = @"Read81_InstanceCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery::"] = @"Read82_PropertyQuery";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery::"] = @"Read83_WildcardablePropertyQuery";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType::"] = @"Read84_ItemsChoiceType";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData::"] = @"Read85_ClassMetadataData";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum::"] = @"Read86_EnumMetadataEnum";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue::"] = @"Read87_EnumMetadataEnumValue";
-                    if (_readMethods == null) _readMethods = _tmp;
-                }
-
-                return _readMethods;
-            }
-        }
-
-        private System.Collections.Hashtable _writeMethods = null;
-        public override System.Collections.Hashtable WriteMethods
-        {
-            get
-            {
-                if (_writeMethods == null)
-                {
-                    System.Collections.Hashtable _tmp = new System.Collections.Hashtable();
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata:http://schemas.microsoft.com/cmdlets-over-objects/2009/11::False:"] = @"Write50_PowerShellMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata::"] = @"Write51_ClassMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets::"] = @"Write52_ClassMetadataInstanceCmdlets";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters::"] = @"Write53_GetCmdletParameters";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata::"] = @"Write54_PropertyMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata::"] = @"Write55_TypeMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.Association::"] = @"Write56_Association";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance::"] = @"Write57_AssociationAssociatedInstance";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata::"] = @"Write58_CmdletParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter::"] = @"Write59_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter::"] = @"Write60_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount::"] = @"Write61_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength::"] = @"Write62_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange::"] = @"Write63_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata::"] = @"Write64_ObsoleteAttributeMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter::"] = @"Write65_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter::"] = @"Write66_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.QueryOption::"] = @"Write67_QueryOption";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata::"] = @"Write68_GetCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata::"] = @"Write69_CommonCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact::"] = @"Write70_ConfirmImpact";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata::"] = @"Write71_StaticCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata::"] = @"Write72_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata::"] = @"Write73_CommonMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata::"] = @"Write74_StaticMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata::"] = @"Write75_CommonMethodParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata::"] = @"Write76_StaticMethodParameterMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata::"] = @"Write77_CmdletOutputMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata::"] = @"Write78_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue::"] = @"Write79_Item";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata::"] = @"Write80_InstanceMethodMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata::"] = @"Write81_InstanceCmdletMetadata";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery::"] = @"Write82_PropertyQuery";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery::"] = @"Write83_WildcardablePropertyQuery";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType::"] = @"Write84_ItemsChoiceType";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData::"] = @"Write85_ClassMetadataData";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum::"] = @"Write86_EnumMetadataEnum";
-                    _tmp[@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue::"] = @"Write87_EnumMetadataEnumValue";
-                    if (_writeMethods == null) _writeMethods = _tmp;
-                }
-
-                return _writeMethods;
-            }
-        }
-
-        private System.Collections.Hashtable _typedSerializers = null;
-        public override System.Collections.Hashtable TypedSerializers
-        {
-            get
-            {
-                if (_typedSerializers == null)
-                {
-                    System.Collections.Hashtable _tmp = new System.Collections.Hashtable();
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance::", new AssociationAssociatedInstanceSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.Association::", new AssociationSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets::", new ClassMetadataInstanceCmdletsSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata:http://schemas.microsoft.com/cmdlets-over-objects/2009/11::False:", new PowerShellMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue::", new EnumMetadataEnumValueSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata::", new StaticCmdletMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType::", new ItemsChoiceTypeSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery::", new PropertyQuerySerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata::", new CmdletParameterMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata::", new CommonMethodParameterMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata::", new StaticMethodMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata::", new ObsoleteAttributeMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata::", new InstanceCmdletMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue::", new CommonMethodMetadataReturnValueSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata::", new PropertyMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter::", new CmdletParameterMetadataForGetCmdletParameterSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata::", new CmdletOutputMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum::", new EnumMetadataEnumSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.QueryOption::", new QueryOptionSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata::", new InstanceMethodParameterMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange::", new CmdletParameterMetadataValidateRangeSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData::", new ClassMetadataDataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact::", new ConfirmImpactSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata::", new StaticCmdletMetadataCmdletMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata::", new GetCmdletMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength::", new CmdletParameterMetadataValidateLengthSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata::", new InstanceMethodMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata::", new CommonMethodMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount::", new CmdletParameterMetadataValidateCountSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters::", new GetCmdletParametersSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter::", new CmdletParameterMetadataForInstanceMethodParameterSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata::", new CommonCmdletMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata::", new TypeMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter::", new CmdletParameterMetadataForGetCmdletFilteringParameterSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata::", new StaticMethodParameterMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter::", new CmdletParameterMetadataForStaticMethodParameterSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata::", new ClassMetadataSerializer());
-                    _tmp.Add(@"Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery::", new WildcardablePropertyQuerySerializer());
-                    if (_typedSerializers == null) _typedSerializers = _tmp;
-                }
-
-                return _typedSerializers;
-            }
-        }
-
-        public override bool CanSerialize(System.Type type)
-        {
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)) return true;
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)) return true;
-            return false;
-        }
-
-        public override System.Xml.Serialization.XmlSerializer GetSerializer(System.Type type)
-        {
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PowerShellMetadata)) return new PowerShellMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadata)) return new ClassMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataInstanceCmdlets)) return new ClassMetadataInstanceCmdletsSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletParameters)) return new GetCmdletParametersSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyMetadata)) return new PropertyMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.TypeMetadata)) return new TypeMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.Association)) return new AssociationSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.AssociationAssociatedInstance)) return new AssociationAssociatedInstanceSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadata)) return new CmdletParameterMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletParameter)) return new CmdletParameterMetadataForGetCmdletParameterSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForGetCmdletFilteringParameter)) return new CmdletParameterMetadataForGetCmdletFilteringParameterSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateCount)) return new CmdletParameterMetadataValidateCountSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateLength)) return new CmdletParameterMetadataValidateLengthSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataValidateRange)) return new CmdletParameterMetadataValidateRangeSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ObsoleteAttributeMetadata)) return new ObsoleteAttributeMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForInstanceMethodParameter)) return new CmdletParameterMetadataForInstanceMethodParameterSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletParameterMetadataForStaticMethodParameter)) return new CmdletParameterMetadataForStaticMethodParameterSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.QueryOption)) return new QueryOptionSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.GetCmdletMetadata)) return new GetCmdletMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonCmdletMetadata)) return new CommonCmdletMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ConfirmImpact)) return new ConfirmImpactSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadata)) return new StaticCmdletMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticCmdletMetadataCmdletMetadata)) return new StaticCmdletMetadataCmdletMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadata)) return new CommonMethodMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodMetadata)) return new StaticMethodMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodParameterMetadata)) return new CommonMethodParameterMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.StaticMethodParameterMetadata)) return new StaticMethodParameterMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CmdletOutputMetadata)) return new CmdletOutputMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodParameterMetadata)) return new InstanceMethodParameterMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.CommonMethodMetadataReturnValue)) return new CommonMethodMetadataReturnValueSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceMethodMetadata)) return new InstanceMethodMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.InstanceCmdletMetadata)) return new InstanceCmdletMetadataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.PropertyQuery)) return new PropertyQuerySerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.WildcardablePropertyQuery)) return new WildcardablePropertyQuerySerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ItemsChoiceType)) return new ItemsChoiceTypeSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.ClassMetadataData)) return new ClassMetadataDataSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnum)) return new EnumMetadataEnumSerializer();
-            if (type == typeof(global::Microsoft.PowerShell.Cmdletization.Xml.EnumMetadataEnumValue)) return new EnumMetadataEnumValueSerializer();
-            return null;
-        }
-    }
-}
-
diff --git a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xsd b/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xsd
index 0766b785451..67ee8b0b0dc 100644
--- a/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xsd
+++ b/src/System.Management.Automation/cimSupport/cmdletization/xml/cmdlets-over-objects.xsd
@@ -9,10 +9,10 @@ Licensed under the MIT License.
   <!ENTITY csharpIdentifierOtherCharacterRegex "&csharpIdentifierLetterCharacterRegex;\p{Nd}_">
   <!ENTITY csharpIdentifierRegex "[&csharpIdentifierFirstCharacterRegex;][&csharpIdentifierOtherCharacterRegex;]{0,100}">
   <!ENTITY csharpNamespaceRegex "(&csharpIdentifierRegex;)(\.&csharpIdentifierRegex;){0,10}">
-  
+
   <!ENTITY clrTypeSpecialCharacterRegex "\,\=\ \+\&amp;\*\[\]\.\\\-\&quot;">
   <!ENTITY clrTypeRegex "[&csharpIdentifierOtherCharacterRegex;&clrTypeSpecialCharacterRegex;]{1,1000}">
-  
+
   <!ENTITY powerShellVerbCharacterRegex "\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}">
   <!ENTITY powerShellNounCharacterRegex "&powerShellVerbCharacterRegex;\p{Nd}">
   <!ENTITY powerShellAliasCharacterRegex "&powerShellNounCharacterRegex;_-">
@@ -25,16 +25,16 @@ Licensed under the MIT License.
 ]>
 <!--
  csharpIdentifierRegex based on C# Language Specification 3.0, section 2.4.2 Idenfifiers
- - the C# spec allows \p{Pc}\p{Cf}\p{Mn}\{Mc} in csharpIdentifierOtherCharacterRegex, 
+ - the C# spec allows \p{Pc}\p{Cf}\p{Mn}\{Mc} in csharpIdentifierOtherCharacterRegex,
    but those characters classes seem risky wrt code injection attacks, so they were
-   removed above.  
+   removed above.
    - '_' (ASCII 95) is the only character in \p{Pc} class out of the first 0..255 characters
    - No characters in the first 0..255 characters belong to \p{Cf}, \p{Mn}, \p{Mc}
- 
- clrTypeRegex and clrTypeSpecialCharacterRegex are based on https://docs.microsoft.com/dotnet/framework/reflection-and-codedom/specifying-fully-qualified-type-names
- 
+
+ clrTypeRegex and clrTypeSpecialCharacterRegex are based on https://learn.microsoft.com/dotnet/framework/reflection-and-codedom/specifying-fully-qualified-type-names
+
  clrTypeSpecialCharacterRegex includes the following characters;
- 
+
    - ',' - part of ReflectionDimension and TypeName productions in BNF
    - '=' - part of AssemblyProperty production in BNF
    - ' ' - unspecified in the docs, but apparently allowed (i.e. between NamespaceTypeName and AssemblyNameSpec in the TypeName production
@@ -44,17 +44,17 @@ Licensed under the MIT License.
    - '[' and ']' - part of ArrayTypeSpec production in BNF
    - '.' - part of ReflectionDimension and NamespaceTypeName productions in BNF
    - '\' - an escape character
-   - '-' - required for Culture property of an Assembly.  
+   - '-' - required for Culture property of an Assembly.
            RFC-1766 defines the format of a culture identifier as:
               Language-Tag = Primary-tag *( "-" Subtag )
               Primary-tag = 1*8ALPHA
               Subtag = 1*8ALPHA
    - '&quot;' - unspecified in the docs, but used in the examples (i.e. Culture="")
-        
-   
+
+
 
 -->
-<xsd:schema 
+<xsd:schema
     elementFormDefault="qualified"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:cps="http://schemas.microsoft.com/cmdlets-over-objects/2009/11"
@@ -63,8 +63,8 @@ Licensed under the MIT License.
   <xsd:annotation>
     <xsd:documentation xml:lang="en-us">
       This schema defines the format of PowerShell CIM Modules.
-      A PowerShell CIM Module defines a set of cmdlets that interact with a CIM class.      
-      
+      A PowerShell CIM Module defines a set of cmdlets that interact with a CIM class.
+
       A PowerShell CIM Module needs to be saved in a file with ".cdxml" extension.
       A ".cdxml" file can be imported into a PowerShell session directly by Import-Module cmdlet,
       or by referring to the ".cdxml" file from NestedModules or RootModule entry of
@@ -87,7 +87,7 @@ Licensed under the MIT License.
       <xsd:field xpath="@Aliases" />
     </xsd:unique>
   </xsd:element>
-  
+
   <!-- ############################################################ -->
   <!-- # ENUM ##################################################### -->
 
@@ -103,36 +103,36 @@ Licensed under the MIT License.
               </xsd:complexType>
             </xsd:element>
           </xsd:sequence>
-          
+
           <xsd:attribute name="EnumName" type="cps:EnumTypeName" use="required">
             <xsd:annotation>
               <xsd:documentation xml:lang="en-us">
                 EnumName attribute specifies the name of a .NET enum.
                 This is the name to use in a PSType attribute.
-                
-                The name should include a namespace to avoid naming conflicts 
+
+                The name should include a namespace to avoid naming conflicts
                 (i.e. the name should be "Networking.MyEnum" rather than "MyEnum").
-                
+
                 The system will prefix the name of the enum with the following namespace: "Microsoft.PowerShell.Cmdletization.GeneratedTypes"
                 (i.e. "Networking.MyEnum" will become "Microsoft.PowerShell.Cmdletization.GeneratedTypes.Networking.MyEnum").
                 When referring to the enum in types.ps1xml and format.ps1xml files, one has to use the full, prefixed name of the enum.
               </xsd:documentation>
             </xsd:annotation>
           </xsd:attribute>
-          
+
           <xsd:attribute name="UnderlyingType" type="cps:PowerShellTypeIdentifier" use="optional">
             <xsd:annotation>
               <xsd:documentation xml:lang="en-us">
                 Underlying type of the enum.
-                
+
                 C# Language Specification allows (in section 4.1.9 "Enumeration types") only the following
-                underlying types: 
-                byte (System.Byte), 
-                sbyte (System.SByte), 
-                short (System.Int16), 
-                ushort (System.UInt16), 
-                int (System.Int32), 
-                uint (System.UInt32), 
+                underlying types:
+                byte (System.Byte),
+                sbyte (System.SByte),
+                short (System.Int16),
+                ushort (System.UInt16),
+                int (System.Int32),
+                uint (System.UInt32),
                 long (System.Int64),
                 ulong (System.UInt64).
               </xsd:documentation>
@@ -142,7 +142,7 @@ Licensed under the MIT License.
           <xsd:attribute name="BitwiseFlags" type="xsd:boolean" use="optional">
             <xsd:annotation>
               <xsd:documentation xml:lang="en-us">
-                BitwiseFlags attribute specifies if the .NET enum will be decorated with a System.FlagsAttribute.                
+                BitwiseFlags attribute specifies if the .NET enum will be decorated with a System.FlagsAttribute.
               </xsd:documentation>
             </xsd:annotation>
           </xsd:attribute>
@@ -196,7 +196,7 @@ Licensed under the MIT License.
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
-      
+
       <xsd:element name="StaticCmdlets" minOccurs="0">
         <xsd:complexType>
           <xsd:choice maxOccurs="unbounded">
@@ -240,10 +240,10 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           CmdletAdapter attribute specifies which .NET class is responsible for translating
-          cmdlet invocations into queries and method invocations.  
-          
-          If this attribute is ommited, then by default the cmdlets are translated into WMI queries and method invocations. 
-          
+          cmdlet invocations into queries and method invocations.
+
+          If this attribute is ommited, then by default the cmdlets are translated into WMI queries and method invocations.
+
           The class specified here has to be derived from Microsoft.PowerShell.Cmdletization.CmdletAdapter class.
         </xsd:documentation>
       </xsd:annotation>
@@ -253,7 +253,7 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation>
           ClassName attribute specified the class that the cmdlets work against.
-          
+
           Example: "root/cimv2/Win32_Process"
         </xsd:documentation>
       </xsd:annotation>
@@ -282,8 +282,8 @@ Licensed under the MIT License.
     <xsd:annotation>
       <xsd:documentation xml:lang="en-us">
         Cmdlet element under InstanceCmdlets element defines a cmdlet that wraps an instance method.
-        
-        Cmdlet parameters of a cmdlet defined this way are a sum of 
+
+        Cmdlet parameters of a cmdlet defined this way are a sum of
         1) cmdlet parameters defined through GetCmdletParameters elements
         2) cmdlet parameters mapped to input parameters of the method defined by Method element
       </xsd:documentation>
@@ -313,7 +313,7 @@ Licensed under the MIT License.
     <xsd:annotation>
       <xsd:documentation xml:lang="en-us">
         Cmdlet element under StaticCmdlets element defines a cmdlet that wraps one or more static methods.
-        
+
         Cmdlet parameters of a cmdlet defined this way are mapped to input parameters of methods defined by Method element
         Each wrapped method corresponds to a parameter set of the cmdlet.
       </xsd:documentation>
@@ -341,9 +341,9 @@ Licensed under the MIT License.
     <xsd:annotation>
       <xsd:documentation xml:lang="en-us">
         GetCmdlet element defines cmdlet metadata for the cmdlet that queries for object instances.
-        
+
         If GetCmdlet element is ommited, then the default verb (&quot;Get&quot;) and noun (based on &lt;DefaultNoun&gt; element) are going to be used.
-        
+
         GetCmdlet element is typically used for one of the following items:
         - To allow the Get cmdlet to have different GetCmdletParameters than other cmdlets (for example to make all parameters optional for Get cmdlet, but make some parameters mandatory for other cmdlets)
         - To change the verb of the cmdlet (for example to use &quot;Find&quot; where appropriate)
@@ -365,19 +365,19 @@ Licensed under the MIT License.
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
-  
+
   <xsd:complexType name="CommonCmdletMetadata">
     <xsd:sequence>
       <xsd:element name="Obsolete" type="cps:ObsoleteAttributeMetadata" minOccurs="0" />
     </xsd:sequence>
-    
+
     <xsd:attribute name="Verb" type="cps:Verb" use="required">
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           Verb attribute specifies the verb of the cmdlet.
-          
+
           Please refer to Cmdlet Design Guidelines for a list of approved verbs.
-          
+
           Verb attribute is equivalent to the verbName parameter of System.Management.Automation.CmdletAttribute constructor.
         </xsd:documentation>
       </xsd:annotation>
@@ -387,9 +387,9 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           Noun attribute specifies the noun of the cmdlet.
-          
+
           If the Noun attribute is ommited, then contents of the DefaultNoun element are used.
-          
+
           Noun attribute is equivalent to the nounName parameter of System.Management.Automation.CmdletAttribute constructor.
         </xsd:documentation>
       </xsd:annotation>
@@ -407,9 +407,9 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           ConfirmImpact attribute specifies the impact of the cmdlet.
-          
+
           ConfirmImpact attribute determines the default -Confirm and -WhatIf behavior.
-          
+
           ConfirmImpact attribute is equivalent to the ConfirmImpact property of System.Management.Automation.CmdletAttribute.
           Presence of the ConfirmImpact attribute is equivalent to setting to true the SupportsShouldProcess property of System.Management.Automation.CmdletAttribute.
         </xsd:documentation>
@@ -420,11 +420,11 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           HelpUri attribute specifies the URI with the help content.
-          
+
           HelpUri attribute is used for the following help experience: Get-Help -Online &lt;cmdlet name&gt;
-          
+
           HelpUri attribute is equivalent to the HelpUri property of System.Management.Automation.CmdletAttribute
-          
+
           Example: "http://go.microsoft.com/fwlink/?LinkID=113309"
         </xsd:documentation>
       </xsd:annotation>
@@ -454,12 +454,12 @@ Licensed under the MIT License.
             </xsd:unique>
           </xsd:element>
         </xsd:sequence>
-        
+
         <xsd:attribute name="CmdletParameterSet" type="cps:ParameterSetName" use="optional">
           <xsd:annotation>
             <xsd:documentation xml:lang="en-us">
               CmdletParameterSet attribute specifies the name of a cmdlet parameter set associated with the static method.
-              
+
               If CmdletParameterSet is ommited, then the name of the cmdlet parameter set is auto-generated based on the name of the method.
             </xsd:documentation>
           </xsd:annotation>
@@ -467,7 +467,7 @@ Licensed under the MIT License.
       </xsd:extension>
     </xsd:complexContent>
   </xsd:complexType>
-  
+
   <xsd:complexType name="InstanceMethodMetadata">
     <xsd:complexContent>
       <xsd:extension base="cps:CommonMethodMetadata">
@@ -508,8 +508,8 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation>
           MethodName attribute specified the name of the method that the cmdlet invocations are mapped to.
-          
-          Some method names are recognized and handled in a special way. 
+
+          Some method names are recognized and handled in a special way.
           "cim:CreateInstance" is mapped to the WMI's static, intrinsic CreateInstance method.  Names of method parameters have to map to names of properties.
           "cim:ModifyInstance" is mapped to the WMI's instance, intrinsic ModifyInstance method.  Names of method parameters have to map to names of properties.
           "cim:DeleteInstance" is mapped to the WMI's instance, intrinsic DeleteInstance method.  All method parameters are ignored.
@@ -547,7 +547,7 @@ Licensed under the MIT License.
     <xsd:attribute name="ParameterName" type="cps:NonEmptyString" use="required" />
     <xsd:attribute name="DefaultValue" type="xsd:string" use="optional" />
   </xsd:complexType>
-  
+
   <!-- ############################################################ -->
   <!-- # PROPERTIES METADATA ###################################### -->
 
@@ -594,7 +594,7 @@ Licensed under the MIT License.
     </xsd:sequence>
     <xsd:attribute name="OptionName" type="cps:NonEmptyString" use="required" />
   </xsd:complexType>
-  
+
   <xsd:complexType name="Association">
     <xsd:sequence>
       <xsd:element name="AssociatedInstance">
@@ -606,12 +606,12 @@ Licensed under the MIT License.
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
-    
+
     <xsd:attribute name="Association" type="cps:NonEmptyString" use="required">
       <xsd:annotation>
         <xsd:documentation>
           Association attribute specifies the name of the association between the cmdlet argument and the instances the cmdlet acts against.
-          
+
           Association attribute is equivalent to the associationClassName parameter of EnumerateAssociatedInstances method of Microsoft.Management.Infrastructure.CimSession class.
         </xsd:documentation>
       </xsd:annotation>
@@ -627,7 +627,7 @@ Licensed under the MIT License.
         </xsd:documentation>
       </xsd:annotation>
     </xsd:attribute>
-    
+
     <xsd:attribute name="ResultRole" type="cps:NonEmptyString" use="required">
       <xsd:annotation>
         <xsd:documentation>
@@ -638,7 +638,7 @@ Licensed under the MIT License.
         </xsd:documentation>
       </xsd:annotation>
     </xsd:attribute>
-    
+
   </xsd:complexType>
 
   <xsd:complexType name="PropertyMetadata">
@@ -651,43 +651,43 @@ Licensed under the MIT License.
             <xsd:documentation xml:lang="en-us">
               RegularQuery element defines a cmdlet parameter that limits which objects will be processed by the cmdlet
               - only objects with a property value equal to the cmdlet parameter argument will be processed.
-              
+
               Comparison of strings and characters is always case-insensitive.
-              
+
               Example for &lt;RegularQuery&gt; element that is applied to an ObjectId property:
                 The following cmdlet invocation:
                   Get-MyObject -ObjectId 123,456
                 will be translated into the following WQL query:
-                  SELECT * FROM MyObject WHERE ((ObjectId = 123) OR (ObjectId = 456)) 
-                  
+                  SELECT * FROM MyObject WHERE ((ObjectId = 123) OR (ObjectId = 456))
+
               Example for &lt;RegularQuery AllowGlobbing=&quot;false&quot; &gt; element that is applied to a Name property:
                 The following cmdlet invocation:
-                  Get-MyObject -LiteralName p*,q* 
+                  Get-MyObject -LiteralName p*,q*
                 will be translated into the following WQL query:
-                  SELECT * FROM MyObject WHERE ((Name = &quot;p*&quot;) OR (Name = &quot;q*&quot;)) 
-                  
+                  SELECT * FROM MyObject WHERE ((Name = &quot;p*&quot;) OR (Name = &quot;q*&quot;))
+
               Example for &lt;RegularQuery AllowGlobbing=&quot;true&quot; &gt; element that is applied to a Name property:
                 The following cmdlet invocation:
-                  Get-MyObject -Name p*,q* 
+                  Get-MyObject -Name p*,q*
                 will be translated into the following WQL query:
-                  SELECT * FROM MyObject WHERE ((Name like &quot;p%&quot;) OR (Name like &quot;q%&quot;)) 
+                  SELECT * FROM MyObject WHERE ((Name like &quot;p%&quot;) OR (Name like &quot;q%&quot;))
             </xsd:documentation>
           </xsd:annotation>
         </xsd:element>
-        
+
         <xsd:element name="ExcludeQuery" type="cps:WildcardablePropertyQuery">
           <xsd:annotation>
             <xsd:documentation xml:lang="en-us">
               ExcludeQuery element defines a cmdlet parameter that limits which objects will be processed by the cmdlet
               - only objects with a property value *not* equal to the cmdlet parameter argument will be processed.
-              
+
               Comparison of strings and characters is always case-insensitive.
-              
+
               Example for &lt;ExcludeQuery&gt; element that is applied to an ObjectId property:
                 The following cmdlet invocation:
                   Get-MyObject -ExcludeObjectId 123,456
                 will be translated into the following WQL query:
-                  SELECT * FROM MyObject WHERE ((NOT Name = 123) AND (NOT Name = 456)) 
+                  SELECT * FROM MyObject WHERE ((NOT Name = 123) AND (NOT Name = 456))
             </xsd:documentation>
           </xsd:annotation>
         </xsd:element>
@@ -697,7 +697,7 @@ Licensed under the MIT License.
             <xsd:documentation xml:lang="en-us">
               MinValueQuery element defines a cmdlet parameter that limits which objects will be processed by the cmdlet
               - only objects with a property value greater than or equal to the cmdlet parameter argument will be processed.
-              
+
               Example for &lt;MinValueQuery&gt; element that is applied to an WorkingSet property:
                 The following cmdlet invocation:
                   Get-MyObject -MinWorkingSet 123
@@ -725,17 +725,17 @@ Licensed under the MIT License.
     </xsd:sequence>
     <xsd:attribute name="PropertyName" type="cps:NonEmptyString" use="required" />
   </xsd:complexType>
-  
+
   <xsd:complexType name="WildcardablePropertyQuery">
     <xsd:complexContent>
       <xsd:extension base="cps:PropertyQuery">
         <xsd:attribute name="AllowGlobbing" type="xsd:boolean" use="optional">
           <xsd:annotation>
             <xsd:documentation xml:lang="en-us">
-              AllowGlobbing attribute specifies if strings with globbing characters (wildcards) are supported.  
-              
+              AllowGlobbing attribute specifies if strings with globbing characters (wildcards) are supported.
+
               Example of a wildcard: "foo*" (matches all strings beginning with "foo")
-              
+
               If AllowGlobbing attribute is ommited then its value is based on the type of the filtered property.
             </xsd:documentation>
           </xsd:annotation>
@@ -777,19 +777,19 @@ Licensed under the MIT License.
       </xsd:extension>
     </xsd:complexContent>
   </xsd:complexType>
-  
+
   <xsd:complexType name="CmdletParameterMetadataForGetCmdletParameter">
     <xsd:complexContent>
       <xsd:extension base="cps:CmdletParameterMetadata">
         <xsd:attribute name="ValueFromPipeline" type="xsd:boolean" use="optional" />
         <xsd:attribute name="ValueFromPipelineByPropertyName" type="xsd:boolean" use="optional" />
-        
+
         <xsd:attribute name="CmdletParameterSets" type="cps:NonEmptyListOfParameterSetNames" use="optional">
           <xsd:annotation>
             <xsd:documentation xml:lang="en-us">
               CmdletParameterSets attribute is a whitespace-separated list of names of parameter sets,
               that the cmdlet parameter should belong to.
-              
+
               If this parameter is ommited, then the cmdlet parameter belongs to all parameter sets.
             </xsd:documentation>
           </xsd:annotation>
@@ -797,7 +797,7 @@ Licensed under the MIT License.
       </xsd:extension>
     </xsd:complexContent>
   </xsd:complexType>
-  
+
   <xsd:complexType name="CmdletParameterMetadata">
     <xsd:sequence>
       <xsd:element name="AllowEmptyCollection" minOccurs="0" />
@@ -817,14 +817,14 @@ Licensed under the MIT License.
           <xsd:attribute name="Max" type="xsd:nonNegativeInteger" use="required" />
         </xsd:complexType>
       </xsd:element>
-      <!-- ValidatePattern omitted - CDXML does not allow DOS attacks against PS client --> 
+      <!-- ValidatePattern omitted - CDXML does not allow DOS attacks against PS client -->
       <xsd:element name="ValidateRange" minOccurs="0">
         <xsd:complexType>
           <xsd:attribute name="Min" type="xsd:integer" use="required" />
           <xsd:attribute name="Max" type="xsd:integer" use="required" />
         </xsd:complexType>
       </xsd:element>
-      <!-- ValidateScript omitted - CDXML does not allow execution of arbitrary code in PS client --> 
+      <!-- ValidateScript omitted - CDXML does not allow execution of arbitrary code in PS client -->
       <xsd:element name="ValidateSet" minOccurs="0">
         <xsd:complexType>
           <xsd:sequence>
@@ -844,14 +844,14 @@ Licensed under the MIT License.
         </xsd:documentation>
       </xsd:annotation>
     </xsd:attribute>
-    
+
     <xsd:attribute name="PSName" type="cps:CmdletParameterName" use="optional">
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           PSName attribute specifies the name of a cmdlet parameter.
-          
+
           If PSName attribute is ommited then it is based on the contents of PropertyName or ParameterName or OptionName attribute (whichever one is applicable).
-          
+
           Example:
             &lt;Property PropertyName=&quot;Name&quot;&gt;
               ...
@@ -870,11 +870,11 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           Position attribute specifies position of the cmdlet parameter.
-          
+
           If Position attribute is ommited, then the cmdlet parameter cannot be used positionally - the user always has to explicitly specify the name of the parameter.
-          
+
           System may change relative parameter positions to guarantee that cmdlet parameters defined by GetCmdletParameters element are always
-          before cmdlet parameters defined under Method element. 
+          before cmdlet parameters defined under Method element.
         </xsd:documentation>
       </xsd:annotation>
     </xsd:attribute>
@@ -885,7 +885,7 @@ Licensed under the MIT License.
       <xsd:element name="ErrorCode" minOccurs="0">
       </xsd:element>
     </xsd:sequence>
-    
+
     <xsd:attribute name="PSName" type="cps:CmdletOutputName" use="optional" />
   </xsd:complexType>
 
@@ -898,19 +898,19 @@ Licensed under the MIT License.
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           PSType attribute specifies the name of the .NET type of the cmdlet parameter.
-          
+
           Example: "System.String"
         </xsd:documentation>
       </xsd:annotation>
     </xsd:attribute>
-    
+
     <xsd:attribute name="ETSType" type="cps:NonEmptyString" use="optional">
       <xsd:annotation>
         <xsd:documentation xml:lang="en-us">
           ETSType attribute specifies the PowerShell type name of the type of the cmdlet parameter.
-          
+
           ETSType attribute is equivalent to System.Management.Automation.PSTypeNameAttribute.
-          
+
           Example: "Microsoft.Management.Infrastructure.CimInstance#Win32_Process"
         </xsd:documentation>
       </xsd:annotation>
@@ -1011,7 +1011,7 @@ Licensed under the MIT License.
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="100" />
-      <xsd:pattern value="&powerShellParameterSetRegex;" /> 
+      <xsd:pattern value="&powerShellParameterSetRegex;" />
     </xsd:restriction>
   </xsd:simpleType>
 
@@ -1026,7 +1026,7 @@ Licensed under the MIT License.
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="100" />
-      <xsd:pattern value="&powerShellCmdletParameterRegex;" /> 
+      <xsd:pattern value="&powerShellCmdletParameterRegex;" />
     </xsd:restriction>
   </xsd:simpleType>
 
@@ -1034,7 +1034,7 @@ Licensed under the MIT License.
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="100" />
-      <xsd:pattern value="&powerShellCmdletParameterRegex;" /> 
+      <xsd:pattern value="&powerShellCmdletParameterRegex;" />
     </xsd:restriction>
   </xsd:simpleType>
 
diff --git a/src/System.Management.Automation/cimSupport/other/ciminstancetypeadapter.cs b/src/System.Management.Automation/cimSupport/other/ciminstancetypeadapter.cs
index f9aa9f9b73c..202c3e98e48 100644
--- a/src/System.Management.Automation/cimSupport/other/ciminstancetypeadapter.cs
+++ b/src/System.Management.Automation/cimSupport/other/ciminstancetypeadapter.cs
@@ -21,8 +21,6 @@ namespace Microsoft.PowerShell.Cim
     /// Implementing the PropertyOnlyAdapter for the time being as CimInstanceTypeAdapter currently
     /// supports only properties. If method support is needed in future, this should derive from
     /// Adapter class.
-    ///
-    /// The Adapter registration is done in monad\src\singleshell\installer\MshManagementMshSnapin.cs
     /// </remarks>
     public sealed class CimInstanceAdapter : PSPropertyAdapter
     {
@@ -63,8 +61,7 @@ private static PSAdaptedProperty GetPSComputerNameAdapter(CimInstance cimInstanc
         public override System.Collections.ObjectModel.Collection<PSAdaptedProperty> GetProperties(object baseObject)
         {
             // baseObject should never be null
-            CimInstance cimInstance = baseObject as CimInstance;
-            if (cimInstance == null)
+            if (baseObject is not CimInstance cimInstance)
             {
                 string msg = string.Format(CultureInfo.InvariantCulture,
                     CimInstanceTypeAdapterResources.BaseObjectNotCimInstance,
@@ -109,8 +106,7 @@ public override PSAdaptedProperty GetProperty(object baseObject, string property
             }
 
             // baseObject should never be null
-            CimInstance cimInstance = baseObject as CimInstance;
-            if (cimInstance == null)
+            if (baseObject is not CimInstance cimInstance)
             {
                 string msg = string.Format(CultureInfo.InvariantCulture,
                     CimInstanceTypeAdapterResources.BaseObjectNotCimInstance,
@@ -144,8 +140,7 @@ public override PSAdaptedProperty GetFirstPropertyOrDefault(object baseObject, M
             }
 
             // baseObject should never be null
-            CimInstance cimInstance = baseObject as CimInstance;
-            if (cimInstance == null)
+            if (baseObject is not CimInstance cimInstance)
             {
                 string msg = string.Format(
                     CultureInfo.InvariantCulture,
@@ -197,13 +192,9 @@ internal static string CimTypeToTypeNameDisplayString(CimType cimType)
         /// <returns></returns>
         public override string GetPropertyTypeName(PSAdaptedProperty adaptedProperty)
         {
-            if (adaptedProperty == null)
-            {
-                throw new ArgumentNullException(nameof(adaptedProperty));
-            }
+            ArgumentNullException.ThrowIfNull(adaptedProperty);
 
-            CimProperty cimProperty = adaptedProperty.Tag as CimProperty;
-            if (cimProperty != null)
+            if (adaptedProperty.Tag is CimProperty cimProperty)
             {
                 return CimTypeToTypeNameDisplayString(cimProperty.CimType);
             }
@@ -222,13 +213,9 @@ public override string GetPropertyTypeName(PSAdaptedProperty adaptedProperty)
         /// <returns></returns>
         public override object GetPropertyValue(PSAdaptedProperty adaptedProperty)
         {
-            if (adaptedProperty == null)
-            {
-                throw new ArgumentNullException(nameof(adaptedProperty));
-            }
+            ArgumentNullException.ThrowIfNull(adaptedProperty);
 
-            CimProperty cimProperty = adaptedProperty.Tag as CimProperty;
-            if (cimProperty != null)
+            if (adaptedProperty.Tag is CimProperty cimProperty)
             {
                 return cimProperty.Value;
             }
@@ -246,16 +233,11 @@ private static void AddTypeNameHierarchy(IList<string> typeNamesWithNamespace, I
         {
             if (!string.IsNullOrEmpty(namespaceName))
             {
-                string fullTypeName = string.Format(CultureInfo.InvariantCulture,
-                                        "Microsoft.Management.Infrastructure.CimInstance#{0}/{1}",
-                                        namespaceName,
-                                        className);
+                string fullTypeName = string.Create(CultureInfo.InvariantCulture, $"Microsoft.Management.Infrastructure.CimInstance#{namespaceName}/{className}");
                 typeNamesWithNamespace.Add(fullTypeName);
             }
 
-            typeNamesWithoutNamespace.Add(string.Format(CultureInfo.InvariantCulture,
-                                     "Microsoft.Management.Infrastructure.CimInstance#{0}",
-                                     className));
+            typeNamesWithoutNamespace.Add(string.Create(CultureInfo.InvariantCulture, $"Microsoft.Management.Infrastructure.CimInstance#{className}"));
         }
 
         private static List<CimClass> GetInheritanceChain(CimInstance cimInstance)
@@ -285,7 +267,7 @@ private static List<CimClass> GetInheritanceChain(CimInstance cimInstance)
         /// <returns></returns>
         public override Collection<string> GetTypeNameHierarchy(object baseObject)
         {
-            if (!(baseObject is CimInstance cimInstance))
+            if (baseObject is not CimInstance cimInstance)
             {
                 throw new ArgumentNullException(nameof(baseObject));
             }
@@ -361,7 +343,7 @@ public override bool IsSettable(PSAdaptedProperty adaptedProperty)
                 return false;
             }
 
-            if (!(adaptedProperty.Tag is CimProperty cimProperty))
+            if (adaptedProperty.Tag is not CimProperty cimProperty)
             {
                 return false;
             }
@@ -377,10 +359,7 @@ public override bool IsSettable(PSAdaptedProperty adaptedProperty)
         /// <param name="value"></param>
         public override void SetPropertyValue(PSAdaptedProperty adaptedProperty, object value)
         {
-            if (adaptedProperty == null)
-            {
-                throw new ArgumentNullException(nameof(adaptedProperty));
-            }
+            ArgumentNullException.ThrowIfNull(adaptedProperty);
 
             if (!IsSettable(adaptedProperty))
             {
diff --git a/src/System.Management.Automation/engine/ApplicationInfo.cs b/src/System.Management.Automation/engine/ApplicationInfo.cs
index 5fe76424f5a..ca46023b66b 100644
--- a/src/System.Management.Automation/engine/ApplicationInfo.cs
+++ b/src/System.Management.Automation/engine/ApplicationInfo.cs
@@ -8,7 +8,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Provides information for applications that are not directly executable by Monad.
+    /// Provides information for applications that are not directly executable by PowerShell.
     /// </summary>
     /// <remarks>
     /// An application is any file that is executable by Windows either directly or through
diff --git a/src/System.Management.Automation/engine/ArgumentToVersionTransformationAttribute.cs b/src/System.Management.Automation/engine/ArgumentToVersionTransformationAttribute.cs
new file mode 100644
index 00000000000..facaa9e3e1a
--- /dev/null
+++ b/src/System.Management.Automation/engine/ArgumentToVersionTransformationAttribute.cs
@@ -0,0 +1,58 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+
+namespace System.Management.Automation
+{
+    /// <summary>
+    /// To make it easier to specify a version, we add some conversions that wouldn't happen otherwise:
+    ///   * A simple integer, i.e. 2;
+    ///   * A string without a dot, i.e. "2".
+    /// </summary>
+    internal class ArgumentToVersionTransformationAttribute : ArgumentTransformationAttribute
+    {
+        /// <inheritdoc/>
+        public override object Transform(EngineIntrinsics engineIntrinsics, object inputData)
+        {
+            object version = PSObject.Base(inputData);
+
+            if (version is string versionStr)
+            {
+                if (TryConvertFromString(versionStr, out var convertedVersion))
+                {
+                    return convertedVersion;
+                }
+
+                if (versionStr.Contains('.'))
+                {
+                    // If the string contains a '.', let the Version constructor handle the conversion.
+                    return inputData;
+                }
+            }
+
+            if (version is double)
+            {
+                // The conversion to int below is wrong, but the usual conversions will turn
+                // the double into a string, so just return the original object.
+                return inputData;
+            }
+
+            if (LanguagePrimitives.TryConvertTo<int>(version, out var majorVersion))
+            {
+                return new Version(majorVersion, 0);
+            }
+
+            return inputData;
+        }
+
+        protected virtual bool TryConvertFromString(string versionString, [NotNullWhen(true)] out Version? version)
+        {
+            version = null;
+            return false;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/ArgumentTypeConverterAttribute.cs b/src/System.Management.Automation/engine/ArgumentTypeConverterAttribute.cs
index a2c2cd8321e..596a4142e93 100644
--- a/src/System.Management.Automation/engine/ArgumentTypeConverterAttribute.cs
+++ b/src/System.Management.Automation/engine/ArgumentTypeConverterAttribute.cs
@@ -65,7 +65,7 @@ internal object Transform(EngineIntrinsics engineIntrinsics, object inputData, b
                             else
                                 temp = result;
 
-                            if (!(temp is PSReference reference))
+                            if (temp is not PSReference reference)
                             {
                                 throw new PSInvalidCastException("InvalidCastExceptionReferenceTypeExpected", null,
                                                                    ExtendedTypeSystem.ReferenceTypeExpected);
diff --git a/src/System.Management.Automation/engine/AsyncByteStreamTransfer.cs b/src/System.Management.Automation/engine/AsyncByteStreamTransfer.cs
new file mode 100644
index 00000000000..f1391924d6b
--- /dev/null
+++ b/src/System.Management.Automation/engine/AsyncByteStreamTransfer.cs
@@ -0,0 +1,83 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Buffers;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Management.Automation;
+
+/// <summary>
+/// Represents the transfer of bytes from one <see cref="Stream" /> to another
+/// asynchronously.
+/// </summary>
+internal sealed class AsyncByteStreamTransfer : IDisposable
+{
+    private const int DefaultBufferSize = 1024;
+
+    private readonly BytePipe _bytePipe;
+
+    private readonly BytePipe _destinationPipe;
+
+    private readonly Memory<byte> _buffer;
+
+    private readonly CancellationTokenSource _cts = new();
+
+    private Task? _readToBufferTask;
+
+    public AsyncByteStreamTransfer(
+        BytePipe bytePipe,
+        BytePipe destinationPipe)
+    {
+        _bytePipe = bytePipe;
+        _destinationPipe = destinationPipe;
+        _buffer = new byte[DefaultBufferSize];
+    }
+
+    public Task EOF => _readToBufferTask ?? Task.CompletedTask;
+
+    public void BeginReadChunks()
+    {
+        _readToBufferTask = Task.Run(ReadBufferAsync);
+    }
+
+    public void Dispose() => _cts.Cancel();
+
+    private async Task ReadBufferAsync()
+    {
+        Stream stream;
+        Stream? destinationStream = null;
+        try
+        {
+            stream = await _bytePipe.GetStream(_cts.Token);
+            destinationStream = await _destinationPipe.GetStream(_cts.Token);
+
+            while (true)
+            {
+                int bytesRead;
+                bytesRead = await stream.ReadAsync(_buffer, _cts.Token);
+                if (bytesRead is 0)
+                {
+                    break;
+                }
+
+                destinationStream.Write(_buffer.Span.Slice(0, bytesRead));
+            }
+        }
+        catch (IOException)
+        {
+            return;
+        }
+        catch (OperationCanceledException)
+        {
+            return;
+        }
+        finally
+        {
+            destinationStream?.Close();
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Attributes.cs b/src/System.Management.Automation/engine/Attributes.cs
index 8ab2530b030..dac3a2ac377 100644
--- a/src/System.Management.Automation/engine/Attributes.cs
+++ b/src/System.Management.Automation/engine/Attributes.cs
@@ -9,6 +9,7 @@
 using System.Linq;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
+using System.Management.Automation.Security;
 using System.Runtime.CompilerServices;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
@@ -86,7 +87,7 @@ namespace System.Management.Automation
     /// <see cref="ValidateArgumentsAttribute"/> validates the argument as a whole. If the argument value may
     /// be an enumerable, you can derive from <see cref="ValidateEnumeratedArgumentsAttribute"/>
     /// which will take care of unrolling the enumerable and validate each element individually.
-    /// It is also recommended to override <see cref="System.Object.ToString"/> to return a readable string
+    /// It is also recommended to override <see cref="object.ToString"/> to return a readable string
     /// similar to the attribute declaration, for example "[ValidateRangeAttribute(5,10)]".
     /// If this attribute is applied to a string parameter, the string command argument will be validated.
     /// If this attribute is applied to a string[] parameter, the string[] command argument will be validated.
@@ -153,7 +154,7 @@ protected ValidateArgumentsAttribute()
     /// <seealso cref="ValidateEnumeratedArgumentsAttribute"/> and override the
     /// <seealso cref="ValidateEnumeratedArgumentsAttribute.ValidateElement"/>
     /// abstract method, after which they can apply the attribute to their parameters.
-    /// It is also recommended to override <see cref="System.Object.ToString"/> to return a readable string
+    /// It is also recommended to override <see cref="object.ToString"/> to return a readable string
     /// similar to the attribute declaration, for example "[ValidateRangeAttribute(5,10)]".
     /// If this attribute is applied to a string parameter, the string command argument will be validated.
     /// If this attribute is applied to a string[] parameter, each string command argument will be validated.
@@ -843,7 +844,7 @@ public sealed class ValidateLengthAttribute : ValidateEnumeratedArgumentsAttribu
         /// <exception cref="ArgumentException">For invalid arguments.</exception>
         protected override void ValidateElement(object element)
         {
-            if (!(element is string objectString))
+            if (element is not string objectString)
             {
                 throw new ValidationMetadataException(
                     "ValidateLengthNotString",
@@ -1088,6 +1089,12 @@ public ValidateRangeAttribute(ValidateRangeKind kind) : base()
 
         private static void ValidateRange(object element, ValidateRangeKind rangeKind)
         {
+            if (element is TimeSpan ts)
+            {
+                ValidateTimeSpanRange(ts, rangeKind);
+                return;
+            }
+
             Type commonType = GetCommonType(typeof(int), element.GetType());
             if (commonType == null)
             {
@@ -1212,6 +1219,59 @@ private void ValidateRange(object element)
             }
         }
 
+        private static void ValidateTimeSpanRange(TimeSpan element, ValidateRangeKind rangeKind)
+        {
+            TimeSpan zero = TimeSpan.Zero;
+
+            switch (rangeKind)
+            {
+                case ValidateRangeKind.Positive:
+                    if (zero.CompareTo(element) >= 0)
+                    {
+                        throw new ValidationMetadataException(
+                            "ValidateRangePositiveFailure",
+                            null,
+                            Metadata.ValidateRangePositiveFailure,
+                            element.ToString());
+                    }
+
+                    break;
+                case ValidateRangeKind.NonNegative:
+                    if (zero.CompareTo(element) > 0)
+                    {
+                        throw new ValidationMetadataException(
+                            "ValidateRangeNonNegativeFailure",
+                            null,
+                            Metadata.ValidateRangeNonNegativeFailure,
+                            element.ToString());
+                    }
+
+                    break;
+                case ValidateRangeKind.Negative:
+                    if (zero.CompareTo(element) <= 0)
+                    {
+                        throw new ValidationMetadataException(
+                            "ValidateRangeNegativeFailure",
+                            null,
+                            Metadata.ValidateRangeNegativeFailure,
+                            element.ToString());
+                    }
+
+                    break;
+                case ValidateRangeKind.NonPositive:
+                    if (zero.CompareTo(element) < 0)
+                    {
+                        throw new ValidationMetadataException(
+                            "ValidateRangeNonPositiveFailure",
+                            null,
+                            Metadata.ValidateRangeNonPositiveFailure,
+                            element.ToString());
+                    }
+
+                    break;
+            }
+        }
+
         private static Type GetCommonType(Type minType, Type maxType)
         {
             Type resultType = null;
@@ -1252,6 +1312,28 @@ private static Type GetCommonType(Type minType, Type maxType)
 
             return resultType;
         }
+
+        /// <summary>
+        /// Returns only the elements that passed the attribute's validation.
+        /// </summary>
+        /// <param name="elementsToValidate">The objects to validate.</param>
+        internal IEnumerable GetValidatedElements(IEnumerable elementsToValidate)
+        {
+            foreach (var el in elementsToValidate)
+            {
+                try
+                {
+                    ValidateElement(el);
+                }
+                catch (ValidationMetadataException)
+                {
+                    // Element was not in range - drop
+                    continue;
+                }
+
+                yield return el;
+            }
+        }
     }
 
     /// <summary>
@@ -1274,11 +1356,11 @@ public sealed class ValidatePatternAttribute : ValidateEnumeratedArgumentsAttrib
         /// Gets or sets the custom error message pattern that is displayed to the user.
         /// The text representation of the object being validated and the validating regex is passed as
         /// the first and second formatting parameters to the ErrorMessage formatting pattern.
-        /// <example>
+        /// <c>
         /// <code>
         /// [ValidatePattern("\s+", ErrorMessage="The text '{0}' did not pass validation of regex '{1}'")]
         /// </code>
-        /// </example>
+        /// </c>
         /// </summary>
         public string ErrorMessage { get; set; }
 
@@ -1340,11 +1422,11 @@ public sealed class ValidateScriptAttribute : ValidateEnumeratedArgumentsAttribu
         /// Gets or sets the custom error message that is displayed to the user.
         /// The item being validated and the validating scriptblock is passed as the first and second
         /// formatting argument.
-        /// <example>
+        /// <c>
         /// <code>
         /// [ValidateScript("$_ % 2", ErrorMessage = "The item '{0}' did not pass validation of script '{1}'")]
         /// </code>
-        /// </example>
+        /// </c>
         /// </summary>
         public string ErrorMessage { get; set; }
 
@@ -1605,11 +1687,11 @@ public sealed class ValidateSetAttribute : ValidateEnumeratedArgumentsAttribute
         /// Gets or sets the custom error message that is displayed to the user.
         /// The item being validated and a text representation of the validation set is passed as the
         /// first and second formatting argument to the <see cref="ErrorMessage"/> formatting pattern.
-        /// <example>
+        /// <c>
         /// <code>
         /// [ValidateSet("A","B","C", ErrorMessage="The item '{0}' is not part of the set '{1}'.")
         /// </code>
-        /// </example>
+        /// </c>
         /// </summary>
         public string ErrorMessage { get; set; }
 
@@ -1729,7 +1811,7 @@ public ValidateSetAttribute(Type valuesGeneratorType)
             // Add a valid values generator to the cache.
             // We don't cache valid values; we expect that valid values will be cached in the generator.
             validValuesGenerator = s_ValidValuesGeneratorCache.GetOrAdd(
-                valuesGeneratorType, (key) => (IValidateSetValuesGenerator)Activator.CreateInstance(key));
+                valuesGeneratorType, static (key) => (IValidateSetValuesGenerator)Activator.CreateInstance(key));
         }
     }
 
@@ -1770,11 +1852,21 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
             {
                 if (ExecutionContext.IsMarkedAsUntrusted(arguments))
                 {
-                    throw new ValidationMetadataException(
-                        "ValidateTrustedDataFailure",
-                        null,
-                        Metadata.ValidateTrustedDataFailure,
-                        arguments);
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        throw new ValidationMetadataException(
+                            "ValidateTrustedDataFailure",
+                            null,
+                            Metadata.ValidateTrustedDataFailure,
+                            arguments);
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: null,
+                        title: Metadata.WDACParameterArgNotTrustedLogTitle,
+                        message: StringUtil.Format(Metadata.WDACParameterArgNotTrustedMessage, arguments),
+                        fqid: "ParameterArgumentNotTrusted",
+                        dropIntoDebugger: true);
                 }
             }
         }
@@ -1785,7 +1877,7 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
     /// <summary>
     /// Allows a NULL as the argument to a mandatory parameter.
     /// </summary>
-    [AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Property)]
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
     public sealed class AllowNullAttribute : CmdletMetadataAttribute
     {
         /// <summary>
@@ -1797,7 +1889,7 @@ public AllowNullAttribute() { }
     /// <summary>
     /// Allows an empty string as the argument to a mandatory string parameter.
     /// </summary>
-    [AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Property)]
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
     public sealed class AllowEmptyStringAttribute : CmdletMetadataAttribute
     {
         /// <summary>
@@ -1809,7 +1901,7 @@ public AllowEmptyStringAttribute() { }
     /// <summary>
     /// Allows an empty collection as the argument to a mandatory collection parameter.
     /// </summary>
-    [AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Property)]
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
     public sealed class AllowEmptyCollectionAttribute : CmdletMetadataAttribute
     {
         /// <summary>
@@ -1864,7 +1956,7 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
                     Metadata.ValidateNotNullFailure);
             }
 
-            if (!(arguments is string path))
+            if (arguments is not string path)
             {
                 throw new ValidationMetadataException(
                     "PathArgumentIsNotValid",
@@ -1994,7 +2086,10 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
             {
                 // If the element of the collection is of value type, then no need to check for null
                 // because a value-type value cannot be null.
-                if (isElementValueType) { return; }
+                if (isElementValueType)
+                {
+                    return;
+                }
 
                 IEnumerator enumerator = LanguagePrimitives.GetEnumerator(arguments);
                 while (enumerator.MoveNext())
@@ -2013,15 +2108,30 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
     }
 
     /// <summary>
-    /// Validates that the parameters's argument is not null, is not an empty string, and is not
-    /// an empty collection.
+    /// Validates that the parameters's argument is not null, is not an empty string or a
+    /// string with white-space characters only, and is not an empty collection.
     /// </summary>
-    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
-    public sealed class ValidateNotNullOrEmptyAttribute : NullValidationAttributeBase
+    public abstract class ValidateNotNullOrAttributeBase : NullValidationAttributeBase
     {
+        /// <summary>
+        /// Used to check the type of string validation to perform.
+        /// </summary>
+        protected readonly bool _checkWhiteSpace;
+
+        /// <summary>
+        /// Validates that the parameters's argument is not null, is not an empty string or a
+        /// string with white-space characters only, and is not an empty collection.
+        /// </summary>
+        protected ValidateNotNullOrAttributeBase(bool checkWhiteSpace)
+        {
+            _checkWhiteSpace = checkWhiteSpace;
+        }
+
         /// <summary>
         /// Validates that the parameters's argument is not null, is not an empty string, and is
         /// not an empty collection. If argument is a collection, each argument is verified.
+        /// It can also validate that the parameters's argument is not a string that consists
+        /// only of white-space characters.
         /// </summary>
         /// <param name="arguments">The arguments to verify.</param>
         /// <param name="engineIntrinsics">
@@ -2041,7 +2151,17 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
             }
             else if (arguments is string str)
             {
-                if (string.IsNullOrEmpty(str))
+                if (_checkWhiteSpace)
+                {
+                    if (string.IsNullOrWhiteSpace(str))
+                    {
+                        throw new ValidationMetadataException(
+                            "ArgumentIsEmptyOrWhiteSpace",
+                            null,
+                            Metadata.ValidateNotNullOrWhiteSpaceFailure);
+                    }
+                }
+                else if (string.IsNullOrEmpty(str))
                 {
                     throw new ValidationMetadataException(
                         "ArgumentIsEmpty",
@@ -2053,7 +2173,10 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
             {
                 bool isEmpty = true;
                 IEnumerator enumerator = LanguagePrimitives.GetEnumerator(arguments);
-                if (enumerator.MoveNext()) { isEmpty = false; }
+                if (enumerator.MoveNext())
+                {
+                    isEmpty = false;
+                }
 
                 // If the element of the collection is of value type, then no need to check for null
                 // because a value-type value cannot be null.
@@ -2072,7 +2195,17 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
 
                         if (element is string elementAsString)
                         {
-                            if (string.IsNullOrEmpty(elementAsString))
+                            if (_checkWhiteSpace)
+                            {
+                                if (string.IsNullOrWhiteSpace(elementAsString))
+                                {
+                                    throw new ValidationMetadataException(
+                                        "ArgumentCollectionContainsEmptyOrWhiteSpace",
+                                        null,
+                                        Metadata.ValidateNotNullOrWhiteSpaceCollectionFailure);
+                                }
+                            }
+                            else if (string.IsNullOrEmpty(elementAsString))
                             {
                                 throw new ValidationMetadataException(
                                     "ArgumentCollectionContainsEmpty",
@@ -2104,6 +2237,42 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
         }
     }
 
+    /// <summary>
+    /// Validates that the parameters's argument is not null, is not an empty string, and is
+    /// not an empty collection. If argument is a collection, each argument is verified.
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+    public sealed class ValidateNotNullOrEmptyAttribute : ValidateNotNullOrAttributeBase
+    {
+        /// <summary>
+        /// Validates that the parameters's argument is not null, is not an empty string, and is
+        /// not an empty collection. If argument is a collection, each argument is verified.
+        /// </summary>
+        public ValidateNotNullOrEmptyAttribute()
+            : base(checkWhiteSpace: false)
+        {
+        }
+    }
+
+    /// <summary>
+    /// Validates that the parameters's argument is not null, is not an empty string, is not a string that
+    /// consists only of white-space characters, and is not an empty collection. If argument is a collection,
+    /// each argument is verified.
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+    public sealed class ValidateNotNullOrWhiteSpaceAttribute : ValidateNotNullOrAttributeBase
+    {
+        /// <summary>
+        /// Validates that the parameters's argument is not null, is not an empty string, is not a string that
+        /// consists only of white-space characters, and is not an empty collection. If argument is a collection,
+        /// each argument is verified.
+        /// </summary>
+        public ValidateNotNullOrWhiteSpaceAttribute()
+            : base(checkWhiteSpace: true)
+        {
+        }
+    }
+
     #endregion NULL validation attributes
 
     #endregion Data validate Attributes
@@ -2123,7 +2292,7 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
     /// <see cref="ArgumentTransformationAttribute"/> and override the
     /// <see cref="ArgumentTransformationAttribute.Transform"/> abstract method, after which they
     /// can apply the attribute to their parameters.
-    /// It is also recommended to override <see cref="System.Object.ToString"/> to return a readable
+    /// It is also recommended to override <see cref="object.ToString"/> to return a readable
     /// string similar to the attribute declaration, for example "[ValidateRangeAttribute(5,10)]".
     /// If multiple transformations are defined on a parameter, they will be invoked in series,
     /// each getting the output of the previous transformation.
diff --git a/src/System.Management.Automation/engine/AutomationEngine.cs b/src/System.Management.Automation/engine/AutomationEngine.cs
index 7da8f4200e5..592796d5bb0 100644
--- a/src/System.Management.Automation/engine/AutomationEngine.cs
+++ b/src/System.Management.Automation/engine/AutomationEngine.cs
@@ -1,10 +1,10 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System.Linq;
 using System.Management.Automation.Host;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Text;
 
 namespace System.Management.Automation
 {
@@ -14,8 +14,15 @@ namespace System.Management.Automation
     /// </summary>
     internal class AutomationEngine
     {
+        static AutomationEngine()
+        {
+            // Register the encoding provider to load encodings that are not supported by default,
+            // so as to allow them to be used in user's script/code.
+            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+        }
+
         // Holds the parser to use for this instance of the engine...
-        internal Language.Parser EngineParser;
+        internal Parser EngineParser;
 
         /// <summary>
         /// Returns the handle to the execution context
@@ -79,7 +86,7 @@ internal string Expand(string s)
         /// Compile a piece of text into a parse tree for later execution.
         /// </summary>
         /// <param name="script">The text to parse.</param>
-        /// <param name="addToHistory">True iff the scriptblock will be added to history.</param>
+        /// <param name="addToHistory">True if-and-only-if the scriptblock will be added to history.</param>
         /// <returns>The parse text as a parsetree node.</returns>
         internal ScriptBlock ParseScriptBlock(string script, bool addToHistory)
         {
@@ -98,12 +105,22 @@ internal ScriptBlock ParseScriptBlock(string script, string fileName, bool addTo
 
             if (errors.Length > 0)
             {
-                if (errors[0].IncompleteInput)
+                ParseException ex = errors[0].IncompleteInput
+                    ? new IncompleteParseException(errors[0].Message, errors[0].ErrorId)
+                    : new ParseException(errors);
+
+                if (addToHistory)
                 {
-                    throw new IncompleteParseException(errors[0].Message, errors[0].ErrorId);
+                    // Try associating the parsing error with the history item if we can.
+                    InvocationInfo invInfo = ex.ErrorRecord.InvocationInfo;
+                    LocalRunspace localRunspace = Context.CurrentRunspace as LocalRunspace;
+                    if (invInfo is not null && localRunspace?.History is not null)
+                    {
+                        invInfo.HistoryId = localRunspace.History.GetNextHistoryId();
+                    }
                 }
 
-                throw new ParseException(errors);
+                throw ex;
             }
 
             return new ScriptBlock(ast, isFilter: false);
diff --git a/src/System.Management.Automation/engine/AutomationNull.cs b/src/System.Management.Automation/engine/AutomationNull.cs
index 38016c3c513..7cf4742b7b4 100644
--- a/src/System.Management.Automation/engine/AutomationNull.cs
+++ b/src/System.Management.Automation/engine/AutomationNull.cs
@@ -9,7 +9,7 @@ namespace System.Management.Automation.Internal
     /// <remarks>
     /// It's a singleton class. Sealed to prevent subclassing. Any operation that
     /// returns no actual value should return this object AutomationNull.Value.
-    /// Anything that evaluates an MSH expression should be prepared to deal
+    /// Anything that evaluates a PowerShell expression should be prepared to deal
     /// with receiving this result and discarding it. When received in an
     /// evaluation where a value is required, it should be replaced with null.
     /// </remarks>
diff --git a/src/System.Management.Automation/engine/BytePipe.cs b/src/System.Management.Automation/engine/BytePipe.cs
new file mode 100644
index 00000000000..03eb827df98
--- /dev/null
+++ b/src/System.Management.Automation/engine/BytePipe.cs
@@ -0,0 +1,113 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Diagnostics;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.PowerShell.Telemetry;
+
+namespace System.Management.Automation;
+
+/// <summary>
+/// Represents a lazily retrieved <see cref="Stream" /> for transfering bytes
+/// to or from.
+/// </summary>
+internal abstract class BytePipe
+{
+    public abstract Task<Stream> GetStream(CancellationToken cancellationToken);
+
+    internal AsyncByteStreamTransfer Bind(BytePipe bytePipe)
+    {
+        Debug.Assert(bytePipe is not null);
+        return new AsyncByteStreamTransfer(bytePipe, destinationPipe: this);
+    }
+}
+
+/// <summary>
+/// Represents a <see cref="Stream" /> lazily retrieved from the underlying
+/// <see cref="NativeCommandProcessor" />.
+/// </summary>
+internal sealed class NativeCommandProcessorBytePipe : BytePipe
+{
+    private readonly NativeCommandProcessor _nativeCommand;
+
+    private readonly bool _stdout;
+
+    internal NativeCommandProcessorBytePipe(
+        NativeCommandProcessor nativeCommand,
+        bool stdout)
+    {
+        Debug.Assert(nativeCommand is not null);
+        _nativeCommand = nativeCommand;
+        _stdout = stdout;
+    }
+
+    public override async Task<Stream> GetStream(CancellationToken cancellationToken)
+    {
+        // If the native command we're wrapping is the upstream command then
+        // NativeCommandProcessor.Prepare will have already been called before
+        // the creation of this BytePipe.
+        if (_stdout)
+        {
+            return _nativeCommand.GetStream(stdout: true);
+        }
+
+        await _nativeCommand.WaitForProcessInitializationAsync(cancellationToken);
+        return _nativeCommand.GetStream(stdout: false);
+    }
+}
+
+/// <summary>
+/// Provides an byte pipe implementation representing a <see cref="FileStream" />.
+/// </summary>
+internal sealed class FileBytePipe : BytePipe
+{
+    private readonly Stream _stream;
+
+    private FileBytePipe(Stream stream)
+    {
+        Debug.Assert(stream is not null);
+        _stream = stream;
+    }
+
+    internal static FileBytePipe Create(string fileName, bool append)
+    {
+        FileStream fileStream;
+        try
+        {
+            PathUtils.MasterStreamOpen(
+                fileName,
+                resolvedEncoding: null,
+                defaultEncoding: false,
+                append,
+                Force: true,
+                NoClobber: false,
+                out fileStream,
+                streamWriter: out _,
+                readOnlyFileInfo: out _,
+                isLiteralPath: true);
+        }
+        catch (Exception e) when (e.Data.Contains(typeof(ErrorRecord)))
+        {
+            // The error record is attached to the exception when thrown to preserve
+            // the call stack.
+            ErrorRecord? errorRecord = e.Data[typeof(ErrorRecord)] as ErrorRecord;
+            if (errorRecord is null)
+            {
+                throw;
+            }
+
+            e.Data.Remove(typeof(ErrorRecord));
+            throw new RuntimeException(null, e, errorRecord);
+        }
+
+        ApplicationInsightsTelemetry.SendExperimentalUseData("PSNativeCommandPreserveBytePipe", "f");
+
+        return new FileBytePipe(fileStream);
+    }
+
+    public override Task<Stream> GetStream(CancellationToken cancellationToken) => Task.FromResult(_stream);
+}
diff --git a/src/System.Management.Automation/engine/COM/ComDispatch.cs b/src/System.Management.Automation/engine/COM/ComDispatch.cs
index 3f6afa6440e..8e0417e17cc 100644
--- a/src/System.Management.Automation/engine/COM/ComDispatch.cs
+++ b/src/System.Management.Automation/engine/COM/ComDispatch.cs
@@ -5,6 +5,7 @@
 
 using COM = System.Runtime.InteropServices.ComTypes;
 
+#nullable enable
 namespace System.Management.Automation
 {
     /// <summary>
@@ -19,7 +20,7 @@ internal interface IDispatch
         int GetTypeInfoCount(out int info);
 
         [PreserveSig]
-        int GetTypeInfo(int iTInfo, int lcid, out COM.ITypeInfo ppTInfo);
+        int GetTypeInfo(int iTInfo, int lcid, out COM.ITypeInfo? ppTInfo);
 
         void GetIDsOfNames(
             [MarshalAs(UnmanagedType.LPStruct)] Guid iid,
@@ -34,7 +35,7 @@ void Invoke(
             int lcid,
             COM.INVOKEKIND wFlags,
             [In, Out][MarshalAs(UnmanagedType.LPArray)] COM.DISPPARAMS[] paramArray,
-            out object pVarResult,
+            out object? pVarResult,
             out ComInvoker.EXCEPINFO pExcepInfo,
             out uint puArgErr);
     }
diff --git a/src/System.Management.Automation/engine/COM/ComInvoker.cs b/src/System.Management.Automation/engine/COM/ComInvoker.cs
index 3834be3de8e..ea8b8b96d79 100644
--- a/src/System.Management.Automation/engine/COM/ComInvoker.cs
+++ b/src/System.Management.Automation/engine/COM/ComInvoker.cs
@@ -7,9 +7,6 @@
 
 using COM = System.Runtime.InteropServices.ComTypes;
 
-// Disable obsolete warnings about VarEnum and COM-marshaling APIs in CoreCLR
-#pragma warning disable 618
-
 namespace System.Management.Automation
 {
     internal static class ComInvoker
@@ -280,7 +277,7 @@ internal static object Invoke(IDispatch target, int dispId, object[] args, bool[
                 {
                     for (int i = 0; i < argCount; i++)
                     {
-                        VariantClear(variantArgArray + s_variantSize * i);
+                        Interop.Windows.VariantClear(variantArgArray + s_variantSize * i);
                     }
 
                     Marshal.FreeCoTaskMem(variantArgArray);
@@ -297,7 +294,7 @@ internal static object Invoke(IDispatch target, int dispId, object[] args, bool[
                 {
                     for (int i = 0; i < refCount; i++)
                     {
-                        VariantClear(tmpVariants + s_variantSize * i);
+                        Interop.Windows.VariantClear(tmpVariants + s_variantSize * i);
                     }
 
                     Marshal.FreeCoTaskMem(tmpVariants);
@@ -305,13 +302,6 @@ internal static object Invoke(IDispatch target, int dispId, object[] args, bool[
             }
         }
 
-        /// <summary>
-        /// Clear variables of type VARIANTARG (or VARIANT) before the memory containing the VARIANTARG is freed.
-        /// </summary>
-        /// <param name="pVariant"></param>
-        [DllImport("oleaut32.dll")]
-        internal static extern void VariantClear(IntPtr pVariant);
-
         /// <summary>
         /// We have to declare 'bstrSource', 'bstrDescription' and 'bstrHelpFile' as pointers because
         /// CLR marshalling layer would try to free those BSTRs by default and that is not correct.
diff --git a/src/System.Management.Automation/engine/COM/ComTypeInfo.cs b/src/System.Management.Automation/engine/COM/ComTypeInfo.cs
index 851325e82ec..eab6122a002 100644
--- a/src/System.Management.Automation/engine/COM/ComTypeInfo.cs
+++ b/src/System.Management.Automation/engine/COM/ComTypeInfo.cs
@@ -105,7 +105,10 @@ private void Initialize()
                 for (int i = 0; i < typeattr.cFuncs; i++)
                 {
                     COM.FUNCDESC funcdesc = GetFuncDesc(_typeinfo, i);
-                    if (funcdesc.memid == DISPID_NEWENUM) { NewEnumInvokeKind = funcdesc.invkind; }
+                    if (funcdesc.memid == DISPID_NEWENUM)
+                    {
+                        NewEnumInvokeKind = funcdesc.invkind;
+                    }
 
                     if ((funcdesc.wFuncFlags & 0x1) == 0x1)
                     {
@@ -183,10 +186,7 @@ private void AddProperty(string strName, COM.FUNCDESC funcdesc, int index)
                 _properties[strName] = prop;
             }
 
-            if (prop != null)
-            {
-                prop.UpdateFuncDesc(funcdesc, index);
-            }
+            prop?.UpdateFuncDesc(funcdesc, index);
         }
 
         private void AddMethod(string strName, int index)
@@ -198,10 +198,7 @@ private void AddMethod(string strName, int index)
                 _methods[strName] = method;
             }
 
-            if (method != null)
-            {
-                method.AddFuncDesc(index);
-            }
+            method?.AddFuncDesc(index);
         }
 
         /// <summary>
@@ -209,7 +206,6 @@ private void AddMethod(string strName, int index)
         /// </summary>
         /// <param name="typeinfo">Reference to ITypeInfo from which to get TypeAttr.</param>
         /// <returns></returns>
-        [ArchitectureSensitive]
         internal static COM.TYPEATTR GetTypeAttr(COM.ITypeInfo typeinfo)
         {
             IntPtr pTypeAttr;
@@ -224,7 +220,6 @@ internal static COM.TYPEATTR GetTypeAttr(COM.ITypeInfo typeinfo)
         /// <param name="typeinfo"></param>
         /// <param name="index"></param>
         /// <returns></returns>
-        [ArchitectureSensitive]
         internal static COM.FUNCDESC GetFuncDesc(COM.ITypeInfo typeinfo, int index)
         {
             IntPtr pFuncDesc;
diff --git a/src/System.Management.Automation/engine/COM/ComUtil.cs b/src/System.Management.Automation/engine/COM/ComUtil.cs
index e244e4cdf3f..8cd5e73b835 100644
--- a/src/System.Management.Automation/engine/COM/ComUtil.cs
+++ b/src/System.Management.Automation/engine/COM/ComUtil.cs
@@ -141,9 +141,6 @@ private static string GetStringFromCustomType(COM.ITypeInfo typeinfo, IntPtr ref
             return "UnknownCustomtype";
         }
 
-        // Disable obsolete warning about VarEnum in CoreCLR
-#pragma warning disable 618
-
         /// <summary>
         /// This function gets a string representation of the Type Descriptor
         /// This is used in generating signature for Properties and Methods.
@@ -259,8 +256,6 @@ internal static Type GetTypeFromTypeDesc(COM.TYPEDESC typedesc)
             return VarEnumSelector.GetTypeForVarEnum(vt);
         }
 
-#pragma warning restore 618
-
         /// <summary>
         /// Converts a FuncDesc out of GetFuncDesc into a MethodInformation.
         /// </summary>
diff --git a/src/System.Management.Automation/engine/CmdletInfo.cs b/src/System.Management.Automation/engine/CmdletInfo.cs
index 05b7548f9fc..cf3ba1cab13 100644
--- a/src/System.Management.Automation/engine/CmdletInfo.cs
+++ b/src/System.Management.Automation/engine/CmdletInfo.cs
@@ -9,7 +9,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// The command information for MSH cmdlets that are directly executable by MSH.
+    /// The command information for cmdlets that are directly executable by PowerShell.
     /// </summary>
     public class CmdletInfo : CommandInfo
     {
@@ -380,11 +380,8 @@ public override ReadOnlyCollection<PSTypeName> OutputType
                         }
                     }
 
-                    if (provider == null)
-                    {
-                        // No path argument, so just use the current path to choose the provider.
-                        provider = Context.SessionState.Path.CurrentLocation.Provider;
-                    }
+                    // If no path argument, just use the current path to choose the provider.
+                    provider ??= Context.SessionState.Path.CurrentLocation.Provider;
 
                     provider.GetOutputTypes(Name, providerTypes);
                     if (providerTypes.Count > 0)
diff --git a/src/System.Management.Automation/engine/CmdletParameterBinderController.cs b/src/System.Management.Automation/engine/CmdletParameterBinderController.cs
index 440b9ead537..b9cf67b29e6 100644
--- a/src/System.Management.Automation/engine/CmdletParameterBinderController.cs
+++ b/src/System.Management.Automation/engine/CmdletParameterBinderController.cs
@@ -202,10 +202,7 @@ internal void BindCommandLineParameters(Collection<CommandParameterInternal> arg
         internal void BindCommandLineParametersNoValidation(Collection<CommandParameterInternal> arguments)
         {
             var psCompiledScriptCmdlet = this.Command as PSScriptCmdlet;
-            if (psCompiledScriptCmdlet != null)
-            {
-                psCompiledScriptCmdlet.PrepareForBinding(this.CommandLineParameters);
-            }
+            psCompiledScriptCmdlet?.PrepareForBinding(this.CommandLineParameters);
 
             InitUnboundArguments(arguments);
             CommandMetadata cmdletMetadata = _commandMetadata;
@@ -270,8 +267,7 @@ internal void BindCommandLineParametersNoValidation(Collection<CommandParameterI
 
             // If this generated an exception (but we didn't have one from the non-dynamic
             // parameters, report on this one.
-            if (reportedBindingException == null)
-                reportedBindingException = currentBindingException;
+            reportedBindingException ??= currentBindingException;
 
             // If the cmdlet implements a ValueFromRemainingArguments parameter (VarArgs)
             // bind the unbound arguments to that parameter.
@@ -626,7 +622,7 @@ private Dictionary<MergedCompiledCommandParameter, object> GetDefaultParameterVa
 
             foreach (DictionaryEntry entry in DefaultParameterValues)
             {
-                if (!(entry.Key is string key))
+                if (entry.Key is not string key)
                 {
                     continue;
                 }
@@ -1045,10 +1041,7 @@ private bool RestoreParameter(CommandParameterInternal argumentToBind, MergedCom
                         _commandMetadata.ImplementsDynamicParameters,
                         "The metadata for the dynamic parameters should only be available if the command supports IDynamicParameters");
 
-                    if (_dynamicParameterBinder != null)
-                    {
-                        _dynamicParameterBinder.BindParameter(argumentToBind.ParameterName, argumentToBind.ArgumentValue, parameter.Parameter);
-                    }
+                    _dynamicParameterBinder?.BindParameter(argumentToBind.ParameterName, argumentToBind.ArgumentValue, parameter.Parameter);
 
                     break;
             }
@@ -1452,8 +1445,7 @@ private bool BindParameter(
 
                     BoundObsoleteParameterNames.Add(parameter.Parameter.Name);
 
-                    if (ObsoleteParameterWarningList == null)
-                        ObsoleteParameterWarningList = new List<WarningRecord>();
+                    ObsoleteParameterWarningList ??= new List<WarningRecord>();
 
                     ObsoleteParameterWarningList.Add(warningRecord);
                 }
@@ -1628,7 +1620,10 @@ private void HandleCommandLineDynamicParameters(out ParameterBindingException ou
                             }
                             catch (Exception e) // Catch-all OK, this is a third-party callout
                             {
-                                if (e is ProviderInvocationException) { throw; }
+                                if (e is ProviderInvocationException)
+                                {
+                                    throw;
+                                }
 
                                 ParameterBindingException bindingException =
                                     new ParameterBindingException(
@@ -2661,7 +2656,7 @@ Cmdlet command
 
             IEnumerable<ParameterSetSpecificMetadata> allParameterSetMetadatas = boundParameters.Values
                 .Concat(unboundParameters)
-                .SelectMany(p => p.Parameter.ParameterSetData.Values);
+                .SelectMany(static p => p.Parameter.ParameterSetData.Values);
             uint allParameterSetFlags = 0;
             foreach (ParameterSetSpecificMetadata parameterSetMetadata in allParameterSetMetadatas)
             {
@@ -2675,8 +2670,8 @@ Cmdlet command
                 "This method should only be called when there is an ambiguity wrt parameter sets");
 
             IEnumerable<ParameterSetSpecificMetadata> parameterSetMetadatasForUnboundMandatoryParameters = unboundParameters
-                .SelectMany(p => p.Parameter.ParameterSetData.Values)
-                .Where(p => p.IsMandatory);
+                .SelectMany(static p => p.Parameter.ParameterSetData.Values)
+                .Where(static p => p.IsMandatory);
             foreach (ParameterSetSpecificMetadata parameterSetMetadata in parameterSetMetadatasForUnboundMandatoryParameters)
             {
                 remainingParameterSetsWithNoMandatoryUnboundParameters &= (~parameterSetMetadata.ParameterSetFlag);
@@ -2991,7 +2986,7 @@ internal static string BuildMissingParamsString(Collection<MergedCompiledCommand
 
             foreach (MergedCompiledCommandParameter missingParameter in missingMandatoryParameters)
             {
-                missingParameters.AppendFormat(CultureInfo.InvariantCulture, " {0}", missingParameter.Parameter.Name);
+                missingParameters.Append(CultureInfo.InvariantCulture, $" {missingParameter.Parameter.Name}");
             }
 
             return missingParameters.ToString();
@@ -3329,7 +3324,11 @@ private bool BindPipelineParametersPrivate(PSObject inputToOperateOn)
                 if (needToPrioritizeOneSpecificParameterSet && i == 0)
                 {
                     // If the prioritized set can be bound successfully, there is no need to do the second round binding
-                    if (_currentParameterSetFlag == _parameterSetToBePrioritizedInPipelineBinding) break;
+                    if (_currentParameterSetFlag == _parameterSetToBePrioritizedInPipelineBinding)
+                    {
+                        break;
+                    }
+
                     validParameterSets = _currentParameterSetFlag & (~_parameterSetToBePrioritizedInPipelineBinding);
                 }
             }
@@ -4047,7 +4046,7 @@ internal ReflectionParameterBinder CommonParametersBinder
 
         private ReflectionParameterBinder _commonParametersBinder;
 
-        private class DelayedScriptBlockArgument
+        private sealed class DelayedScriptBlockArgument
         {
             // Remember the parameter binder so we know when to invoke the script block
             // and when to use the evaluated argument.
@@ -4387,7 +4386,10 @@ public override bool ContainsKey(object key)
                 throw PSTraceSource.NewArgumentNullException(nameof(key));
             }
 
-            if (!(key is string strKey)) { return false; }
+            if (key is not string strKey)
+            {
+                return false;
+            }
 
             string keyAfterTrim = strKey.Trim();
             return base.ContainsKey(keyAfterTrim);
@@ -4413,7 +4415,7 @@ private void AddImpl(object key, object value, bool isSelfIndexing)
                 throw PSTraceSource.NewArgumentNullException(nameof(key));
             }
 
-            if (!(key is string strKey))
+            if (key is not string strKey)
             {
                 throw PSTraceSource.NewArgumentException(nameof(key), ParameterBinderStrings.StringValueKeyExpected, key, key.GetType().FullName);
             }
@@ -4456,9 +4458,15 @@ public override object this[object key]
         {
             get
             {
-                if (key == null) { throw PSTraceSource.NewArgumentNullException(nameof(key)); }
+                if (key == null)
+                {
+                    throw PSTraceSource.NewArgumentNullException(nameof(key));
+                }
 
-                if (!(key is string strKey)) { return null; }
+                if (key is not string strKey)
+                {
+                    return null;
+                }
 
                 string keyAfterTrim = strKey.Trim();
                 return base[keyAfterTrim];
@@ -4481,7 +4489,10 @@ public override void Remove(object key)
                 throw PSTraceSource.NewArgumentNullException(nameof(key));
             }
 
-            if (!(key is string strKey)) { return; }
+            if (key is not string strKey)
+            {
+                return;
+            }
 
             string keyAfterTrim = strKey.Trim();
             if (base.ContainsKey(keyAfterTrim))
diff --git a/src/System.Management.Automation/engine/ComInterop/BoundDispEvent.cs b/src/System.Management.Automation/engine/ComInterop/BoundDispEvent.cs
index 6965fa6e3b5..e6549b39d22 100644
--- a/src/System.Management.Automation/engine/ComInterop/BoundDispEvent.cs
+++ b/src/System.Management.Automation/engine/ComInterop/BoundDispEvent.cs
@@ -73,7 +73,7 @@ private static void VerifyHandler(object handler)
         /// <returns>The original event with handler added.</returns>
         private object InPlaceAdd(object handler)
         {
-            Requires.NotNull(handler, nameof(handler));
+            Requires.NotNull(handler);
             VerifyHandler(handler);
 
             ComEventsSink comEventSink = ComEventsSink.FromRuntimeCallableWrapper(_rcw, _sourceIid, true);
@@ -88,7 +88,7 @@ private object InPlaceAdd(object handler)
         /// <returns>The original event with handler removed.</returns>
         private object InPlaceSubtract(object handler)
         {
-            Requires.NotNull(handler, nameof(handler));
+            Requires.NotNull(handler);
             VerifyHandler(handler);
 
             ComEventsSink comEventSink = ComEventsSink.FromRuntimeCallableWrapper(_rcw, _sourceIid, false);
diff --git a/src/System.Management.Automation/engine/ComInterop/ComBinder.cs b/src/System.Management.Automation/engine/ComInterop/ComBinder.cs
index 726f336ec71..a88abc09f1e 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComBinder.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComBinder.cs
@@ -35,8 +35,8 @@ public static bool IsComObject(object value)
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindGetMember(GetMemberBinder binder, DynamicMetaObject instance, out DynamicMetaObject result, bool delayInvocation)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
 
             if (TryGetMetaObject(ref instance))
             {
@@ -66,9 +66,9 @@ public static bool TryBindGetMember(GetMemberBinder binder, DynamicMetaObject in
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindSetMember(SetMemberBinder binder, DynamicMetaObject instance, DynamicMetaObject value, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
-            Requires.NotNull(value, nameof(value));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
+            Requires.NotNull(value);
 
             if (TryGetMetaObject(ref instance))
             {
@@ -91,9 +91,9 @@ public static bool TryBindSetMember(SetMemberBinder binder, DynamicMetaObject in
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindInvoke(InvokeBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
-            Requires.NotNull(args, nameof(args));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
+            Requires.NotNull(args);
 
             if (TryGetMetaObjectInvoke(ref instance))
             {
@@ -116,9 +116,9 @@ public static bool TryBindInvoke(InvokeBinder binder, DynamicMetaObject instance
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindInvokeMember(InvokeMemberBinder binder, bool isSetProperty, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
-            Requires.NotNull(args, nameof(args));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
+            Requires.NotNull(args);
 
             if (TryGetMetaObject(ref instance))
             {
@@ -158,9 +158,9 @@ public static bool TryBindInvokeMember(InvokeMemberBinder binder, bool isSetProp
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
-            Requires.NotNull(args, nameof(args));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
+            Requires.NotNull(args);
 
             if (TryGetMetaObjectInvoke(ref instance))
             {
@@ -183,10 +183,10 @@ public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject inst
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryBindSetIndex(SetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, DynamicMetaObject value, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
-            Requires.NotNull(args, nameof(args));
-            Requires.NotNull(value, nameof(value));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
+            Requires.NotNull(args);
+            Requires.NotNull(value);
 
             if (TryGetMetaObjectInvoke(ref instance))
             {
@@ -208,8 +208,8 @@ public static bool TryBindSetIndex(SetIndexBinder binder, DynamicMetaObject inst
         /// <returns>True if operation was bound successfully; otherwise, false.</returns>
         public static bool TryConvert(ConvertBinder binder, DynamicMetaObject instance, out DynamicMetaObject result)
         {
-            Requires.NotNull(binder, nameof(binder));
-            Requires.NotNull(instance, nameof(instance));
+            Requires.NotNull(binder);
+            Requires.NotNull(instance);
 
             if (IsComObject(instance.Value))
             {
@@ -245,7 +245,7 @@ public static bool TryConvert(ConvertBinder binder, DynamicMetaObject instance,
         /// <returns>The collection of member names.</returns>
         internal static IList<string> GetDynamicDataMemberNames(object value)
         {
-            Requires.NotNull(value, nameof(value));
+            Requires.NotNull(value);
             Requires.Condition(IsComObject(value), nameof(value));
 
             return ComObject.ObjectToComObject(value).GetMemberNames(true);
@@ -260,7 +260,7 @@ internal static IList<string> GetDynamicDataMemberNames(object value)
         /// <returns>The collection of pairs that represent data member's names and their data.</returns>
         internal static IList<KeyValuePair<string, object>> GetDynamicDataMembers(object value, IEnumerable<string> names)
         {
-            Requires.NotNull(value, nameof(value));
+            Requires.NotNull(value);
             Requires.Condition(IsComObject(value), nameof(value));
 
             return ComObject.ObjectToComObject(value).GetMembers(names);
@@ -310,8 +310,8 @@ internal class ComGetMemberBinder : GetMemberBinder
             private readonly GetMemberBinder _originalBinder;
             internal bool _canReturnCallables;
 
-            internal ComGetMemberBinder(GetMemberBinder originalBinder, bool canReturnCallables) :
-                base(originalBinder.Name, originalBinder.IgnoreCase)
+            internal ComGetMemberBinder(GetMemberBinder originalBinder, bool canReturnCallables)
+             : base(originalBinder.Name, originalBinder.IgnoreCase)
             {
                 _originalBinder = originalBinder;
                 _canReturnCallables = canReturnCallables;
@@ -343,8 +343,8 @@ internal class ComInvokeMemberBinder : InvokeMemberBinder
             private readonly InvokeMemberBinder _originalBinder;
             internal bool IsPropertySet;
 
-            internal ComInvokeMemberBinder(InvokeMemberBinder originalBinder, bool isPropertySet) :
-                base(originalBinder.Name, originalBinder.IgnoreCase, originalBinder.CallInfo)
+            internal ComInvokeMemberBinder(InvokeMemberBinder originalBinder, bool isPropertySet)
+                : base(originalBinder.Name, originalBinder.IgnoreCase, originalBinder.CallInfo)
             {
                 _originalBinder = originalBinder;
                 this.IsPropertySet = isPropertySet;
diff --git a/src/System.Management.Automation/engine/ComInterop/ComEventsSink.Extended.cs b/src/System.Management.Automation/engine/ComInterop/ComEventsSink.Extended.cs
index f52ded959c2..0d63276a3ea 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComEventsSink.Extended.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComEventsSink.Extended.cs
@@ -18,10 +18,7 @@ private void Initialize(object rcw, Guid iid)
         public void AddHandler(int dispid, object func)
         {
             ComEventsMethod method = FindMethod(dispid);
-            if (method == null)
-            {
-                method = AddMethod(dispid);
-            }
+            method ??= AddMethod(dispid);
 
             if (func is Delegate d)
             {
diff --git a/src/System.Management.Automation/engine/ComInterop/ComFallbackMetaObject.cs b/src/System.Management.Automation/engine/ComInterop/ComFallbackMetaObject.cs
index 758281c7ac4..8a6e81f0800 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComFallbackMetaObject.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComFallbackMetaObject.cs
@@ -23,31 +23,31 @@ internal ComFallbackMetaObject(Expression expression, BindingRestrictions restri
 
         public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.FallbackGetIndex(UnwrapSelf(), indexes);
         }
 
         public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.FallbackSetIndex(UnwrapSelf(), indexes, value);
         }
 
         public override DynamicMetaObject BindGetMember(GetMemberBinder binder)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.FallbackGetMember(UnwrapSelf());
         }
 
         public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.FallbackInvokeMember(UnwrapSelf(), args);
         }
 
         public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.FallbackSetMember(UnwrapSelf(), value);
         }
 
diff --git a/src/System.Management.Automation/engine/ComInterop/ComInvokeBinder.cs b/src/System.Management.Automation/engine/ComInterop/ComInvokeBinder.cs
index 6876425acf7..3765f5ba68b 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComInvokeBinder.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComInvokeBinder.cs
@@ -114,10 +114,7 @@ private ParameterExpression ParamVariantsVariable
         {
             get
             {
-                if (_paramVariants == null)
-                {
-                    _paramVariants = Expression.Variable(VariantArray.GetStructType(_args.Length), "paramVariants");
-                }
+                _paramVariants ??= Expression.Variable(VariantArray.GetStructType(_args.Length), "paramVariants");
                 return _paramVariants;
             }
         }
@@ -140,10 +137,7 @@ private static Type MarshalType(DynamicMetaObject mo, bool isByRef)
             if (isByRef)
             {
                 // Null just means that null was supplied.
-                if (marshalType == null)
-                {
-                    marshalType = mo.Expression.Type;
-                }
+                marshalType ??= mo.Expression.Type;
                 marshalType = marshalType.MakeByRefType();
             }
             return marshalType;
@@ -173,7 +167,10 @@ internal DynamicMetaObject Invoke()
 
         private static void AddNotNull(List<ParameterExpression> list, ParameterExpression var)
         {
-            if (var != null) list.Add(var);
+            if (var != null)
+            {
+                list.Add(var);
+            }
         }
 
         private Expression CreateScope(Expression expression)
@@ -398,7 +395,7 @@ private Expression GenerateFinallyBlock()
         }
 
         /// <summary>
-        /// Create a stub for the target of the optimized lopop.
+        /// Create a stub for the target of the optimized loop.
         /// </summary>
         /// <returns></returns>
         private Expression MakeIDispatchInvokeTarget()
diff --git a/src/System.Management.Automation/engine/ComInterop/ComMetaObject.cs b/src/System.Management.Automation/engine/ComInterop/ComMetaObject.cs
index bc75f83ba0a..39c9d1dbe05 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComMetaObject.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComMetaObject.cs
@@ -16,37 +16,37 @@ internal ComMetaObject(Expression expression, BindingRestrictions restrictions,
 
         public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(args.AddFirst(WrapSelf()));
         }
 
         public override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(args.AddFirst(WrapSelf()));
         }
 
         public override DynamicMetaObject BindGetMember(GetMemberBinder binder)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(WrapSelf());
         }
 
         public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(WrapSelf(), value);
         }
 
         public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(WrapSelf(), indexes);
         }
 
         public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
             return binder.Defer(WrapSelf(), indexes.AddLast(value));
         }
 
diff --git a/src/System.Management.Automation/engine/ComInterop/ComMethodDesc.cs b/src/System.Management.Automation/engine/ComInterop/ComMethodDesc.cs
index 35b4c9fa25d..45932e1598a 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComMethodDesc.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComMethodDesc.cs
@@ -95,7 +95,9 @@ public bool IsPropertyPutRef
         }
 
         internal int ParamCount { get; }
+
         public Type ReturnType { get; set; }
+
         public Type InputType { get; set; }
 
         public ParameterInformation[] ParameterInformation
diff --git a/src/System.Management.Automation/engine/ComInterop/ComRuntimeHelpers.cs b/src/System.Management.Automation/engine/ComInterop/ComRuntimeHelpers.cs
index c10f1424cf5..5bd086874a6 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComRuntimeHelpers.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComRuntimeHelpers.cs
@@ -296,8 +296,15 @@ internal static class UnsafeMethods
     {
         #region public members
 
-        public static unsafe IntPtr ConvertInt32ByrefToPtr(ref int value) { return (IntPtr)System.Runtime.CompilerServices.Unsafe.AsPointer(ref value); }
-        public static unsafe IntPtr ConvertVariantByrefToPtr(ref Variant value) { return (IntPtr)System.Runtime.CompilerServices.Unsafe.AsPointer(ref value); }
+        public static unsafe IntPtr ConvertInt32ByrefToPtr(ref int value)
+        {
+            return (IntPtr)System.Runtime.CompilerServices.Unsafe.AsPointer(ref value);
+        }
+
+        public static unsafe IntPtr ConvertVariantByrefToPtr(ref Variant value)
+        {
+            return (IntPtr)System.Runtime.CompilerServices.Unsafe.AsPointer(ref value);
+        }
 
         internal static Variant GetVariantForObject(object obj)
         {
@@ -315,7 +322,7 @@ internal static void InitVariantForObject(object obj, ref Variant variant)
             Debug.Assert(obj != null);
 
             // GetNativeVariantForObject is very expensive for values that marshal as VT_DISPATCH
-            // also is is extremely common scenario when object at hand is an RCW.
+            // also is extremely common scenario when object at hand is an RCW.
             // Therefore we are going to test for IDispatch before defaulting to GetNativeVariantForObject.
             if (obj is IDispatch)
             {
@@ -365,8 +372,7 @@ public static unsafe int IDispatchInvoke(
             fixed (ExcepInfo* pExcepInfo = &excepInfo)
             fixed (uint* pArgErr = &argErr)
             {
-                var pfnIDispatchInvoke = (delegate* unmanaged<IntPtr, int, Guid*, int, ushort, ComTypes.DISPPARAMS*, Variant*, ExcepInfo*, uint*, int>)
-                    (*(*(void***)dispatchPointer + 6 /* IDispatch.Invoke slot */));
+                var pfnIDispatchInvoke = (delegate* unmanaged<IntPtr, int, Guid*, int, ushort, ComTypes.DISPPARAMS*, Variant*, ExcepInfo*, uint*, int>)(*(*(void***)dispatchPointer + 6 /* IDispatch.Invoke slot */));
 
                 int hresult = pfnIDispatchInvoke(dispatchPointer,
                     memberDispId, &IID_NULL, 0, (ushort)flags, pDispParams, pResult, pExcepInfo, pArgErr);
@@ -375,7 +381,7 @@ public static unsafe int IDispatchInvoke(
                     && (flags & ComTypes.INVOKEKIND.INVOKE_FUNC) != 0
                     && (flags & (ComTypes.INVOKEKIND.INVOKE_PROPERTYPUT | ComTypes.INVOKEKIND.INVOKE_PROPERTYPUTREF)) == 0)
                 {
-                    // Re-invoke with no result argument to accomodate Word
+                    // Re-invoke with no result argument to accommodate Word
                     hresult = pfnIDispatchInvoke(dispatchPointer,
                         memberDispId, &IID_NULL, 0, (ushort)ComTypes.INVOKEKIND.INVOKE_FUNC, pDispParams, null, pExcepInfo, pArgErr);
                 }
diff --git a/src/System.Management.Automation/engine/ComInterop/ComTypeClassDesc.cs b/src/System.Management.Automation/engine/ComInterop/ComTypeClassDesc.cs
index 1ff4fac18cf..2f2886d6555 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComTypeClassDesc.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComTypeClassDesc.cs
@@ -17,15 +17,11 @@ internal class ComTypeClassDesc : ComTypeDesc, IDynamicMetaObjectProvider
 
         public object CreateInstance()
         {
-            if (_typeObj == null)
-            {
-                _typeObj = Type.GetTypeFromCLSID(Guid);
-            }
+            _typeObj ??= Type.GetTypeFromCLSID(Guid);
             return Activator.CreateInstance(Type.GetTypeFromCLSID(Guid));
         }
 
-        internal ComTypeClassDesc(ComTypes.ITypeInfo typeInfo, ComTypeLibDesc typeLibDesc) :
-            base(typeInfo, typeLibDesc)
+        internal ComTypeClassDesc(ComTypes.ITypeInfo typeInfo, ComTypeLibDesc typeLibDesc) : base(typeInfo, typeLibDesc)
         {
             ComTypes.TYPEATTR typeAttr = ComRuntimeHelpers.GetTypeAttrForTypeInfo(typeInfo);
             Guid = typeAttr.guid;
@@ -47,19 +43,12 @@ private void AddInterface(ComTypes.ITypeInfo itfTypeInfo, bool isSourceItf)
 
             if (isSourceItf)
             {
-                if (_sourceItfs == null)
-                {
-                    _sourceItfs = new LinkedList<string>();
-                }
+                _sourceItfs ??= new LinkedList<string>();
                 _sourceItfs.AddLast(itfName);
             }
             else
             {
-                if (_itfs == null)
-                {
-                    _itfs = new LinkedList<string>();
-                }
-
+                _itfs ??= new LinkedList<string>();
                 _itfs.AddLast(itfName);
             }
         }
diff --git a/src/System.Management.Automation/engine/ComInterop/ComTypeDesc.cs b/src/System.Management.Automation/engine/ComInterop/ComTypeDesc.cs
index 92e9ea8ed6f..a4b90913e9b 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComTypeDesc.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComTypeDesc.cs
@@ -118,6 +118,7 @@ internal bool TryGetPutRef(string name, out ComMethodDesc method)
             method = null;
             return false;
         }
+
         internal void AddPutRef(string name, ComMethodDesc method)
         {
             name = name.ToUpper(System.Globalization.CultureInfo.InvariantCulture);
diff --git a/src/System.Management.Automation/engine/ComInterop/ComTypeEnumDesc.cs b/src/System.Management.Automation/engine/ComInterop/ComTypeEnumDesc.cs
index 5752fac1e5f..00fe57c2b44 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComTypeEnumDesc.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComTypeEnumDesc.cs
@@ -15,13 +15,9 @@ internal sealed class ComTypeEnumDesc : ComTypeDesc, IDynamicMetaObjectProvider
         private readonly string[] _memberNames;
         private readonly object[] _memberValues;
 
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "<enum '{0}'>", TypeName);
-        }
+        public override string ToString() => $"<enum '{TypeName}'>";
 
-        internal ComTypeEnumDesc(ComTypes.ITypeInfo typeInfo, ComTypeLibDesc typeLibDesc) :
-            base(typeInfo, typeLibDesc)
+        internal ComTypeEnumDesc(ComTypes.ITypeInfo typeInfo, ComTypeLibDesc typeLibDesc) : base(typeInfo, typeLibDesc)
         {
             ComTypes.TYPEATTR typeAttr = ComRuntimeHelpers.GetTypeAttrForTypeInfo(typeInfo);
             string[] memberNames = new string[typeAttr.cVars];
diff --git a/src/System.Management.Automation/engine/ComInterop/ComTypeLibDesc.cs b/src/System.Management.Automation/engine/ComInterop/ComTypeLibDesc.cs
index 2b81c76b6eb..8f373e52a72 100644
--- a/src/System.Management.Automation/engine/ComInterop/ComTypeLibDesc.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ComTypeLibDesc.cs
@@ -32,10 +32,7 @@ private ComTypeLibDesc()
             _classes = new LinkedList<ComTypeClassDesc>();
         }
 
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "<type library {0}>", Name);
-        }
+        public override string ToString() => $"<type library {Name}>";
 
         public string Documentation
         {
diff --git a/src/System.Management.Automation/engine/ComInterop/DispCallable.cs b/src/System.Management.Automation/engine/ComInterop/DispCallable.cs
index df0f54009ac..e99bdd3741f 100644
--- a/src/System.Management.Automation/engine/ComInterop/DispCallable.cs
+++ b/src/System.Management.Automation/engine/ComInterop/DispCallable.cs
@@ -19,10 +19,7 @@ internal DispCallable(IDispatchComObject dispatch, string memberName, int dispId
             DispId = dispId;
         }
 
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "<bound dispmethod {0}>", MemberName);
-        }
+        public override string ToString() => $"<bound dispmethod {MemberName}>";
 
         public IDispatchComObject DispatchComObject { get; }
 
diff --git a/src/System.Management.Automation/engine/ComInterop/ExcepInfo.cs b/src/System.Management.Automation/engine/ComInterop/ExcepInfo.cs
index 4f829b6241d..74314850a59 100644
--- a/src/System.Management.Automation/engine/ComInterop/ExcepInfo.cs
+++ b/src/System.Management.Automation/engine/ComInterop/ExcepInfo.cs
@@ -10,7 +10,7 @@
 namespace System.Management.Automation.ComInterop
 {
     /// <summary>
-    /// This is similar to ComTypes.EXCEPINFO, but lets us do our own custom marshaling.
+    /// This is similar to ComTypes.EXCEPINFO, but lets us do our own custom marshalling.
     /// </summary>
     [StructLayout(LayoutKind.Sequential)]
     internal struct ExcepInfo
diff --git a/src/System.Management.Automation/engine/ComInterop/Helpers.cs b/src/System.Management.Automation/engine/ComInterop/Helpers.cs
index 513c3126476..a780e095e20 100644
--- a/src/System.Management.Automation/engine/ComInterop/Helpers.cs
+++ b/src/System.Management.Automation/engine/ComInterop/Helpers.cs
@@ -1,8 +1,11 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+#nullable enable
+
 using System;
 using System.Linq.Expressions;
+using System.Runtime.CompilerServices;
 
 namespace System.Management.Automation.ComInterop
 {
@@ -33,12 +36,9 @@ internal static Expression Convert(Expression expression, Type type)
     internal static class Requires
     {
         [System.Diagnostics.Conditional("DEBUG")]
-        internal static void NotNull(object value, string paramName)
+        internal static void NotNull(object value, [CallerArgumentExpression("value")] string? paramName = null)
         {
-            if (value == null)
-            {
-                throw new ArgumentNullException(paramName);
-            }
+            ArgumentNullException.ThrowIfNull(value, paramName);
         }
 
         [System.Diagnostics.Conditional("DEBUG")]
diff --git a/src/System.Management.Automation/engine/ComInterop/IDispatchComObject.cs b/src/System.Management.Automation/engine/ComInterop/IDispatchComObject.cs
index c3a16639b62..7c2a3c106a7 100644
--- a/src/System.Management.Automation/engine/ComInterop/IDispatchComObject.cs
+++ b/src/System.Management.Automation/engine/ComInterop/IDispatchComObject.cs
@@ -22,7 +22,7 @@ namespace System.Management.Automation.ComInterop
     ///    default arguments?). So obj.foo() is ambiguous as it could mean invoking method foo,
     ///    or it could mean invoking the function pointer returned by property foo.
     ///    We are attempting to find whether we need to call a method or a property by examining
-    ///    the ITypeInfo associated with the IDispatch. ITypeInfo tell's use what parameters the method
+    ///    the ITypeInfo associated with the IDispatch. ITypeInfo tells us what parameters the method
     ///    expects, is it a method or a property, what is the default property of the object, how to
     ///    create an enumerator for collections etc.
     ///
@@ -99,7 +99,7 @@ public override string ToString()
                 typeName = "IDispatch";
             }
 
-            return string.Format(CultureInfo.CurrentCulture, "{0} ({1})", RuntimeCallableWrapper.ToString(), typeName);
+            return $"{RuntimeCallableWrapper} ({typeName})";
         }
 
         public ComTypeDesc ComTypeDesc
@@ -222,7 +222,7 @@ internal bool TryGetMemberMethodExplicit(string name, out ComMethodDesc method)
                 return false;
             }
 
-            throw Error.CouldNotGetDispId(name, string.Format(CultureInfo.InvariantCulture, "0x{0:X})", hresult));
+            throw Error.CouldNotGetDispId(name, string.Create(CultureInfo.InvariantCulture, $"0x{hresult:X})"));
         }
 
         internal bool TryGetPropertySetterExplicit(string name, out ComMethodDesc method, Type limitType, bool holdsNull)
@@ -258,7 +258,7 @@ internal bool TryGetPropertySetterExplicit(string name, out ComMethodDesc method
                 return false;
             }
 
-            throw Error.CouldNotGetDispId(name, string.Format(CultureInfo.InvariantCulture, "0x{0:X})", hresult));
+            throw Error.CouldNotGetDispId(name, string.Create(CultureInfo.InvariantCulture, $"0x{hresult:X})"));
         }
 
         internal override IList<string> GetMemberNames(bool dataOnly)
@@ -271,10 +271,7 @@ internal override IList<string> GetMemberNames(bool dataOnly)
 
         internal override IList<KeyValuePair<string, object>> GetMembers(IEnumerable<string> names)
         {
-            if (names == null)
-            {
-                names = GetMemberNames(true);
-            }
+            names ??= GetMemberNames(true);
 
             Type comType = RuntimeCallableWrapper.GetType();
 
diff --git a/src/System.Management.Automation/engine/ComInterop/IDispatchMetaObject.cs b/src/System.Management.Automation/engine/ComInterop/IDispatchMetaObject.cs
index b340cf54967..9826ac9d467 100644
--- a/src/System.Management.Automation/engine/ComInterop/IDispatchMetaObject.cs
+++ b/src/System.Management.Automation/engine/ComInterop/IDispatchMetaObject.cs
@@ -23,7 +23,7 @@ internal IDispatchMetaObject(Expression expression, IDispatchComObject self)
 
         public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             ComMethodDesc method = null;
 
@@ -63,7 +63,7 @@ public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, Dy
 
         public override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             if (_self.TryGetGetItem(out ComMethodDesc method))
             {
@@ -108,7 +108,7 @@ public override DynamicMetaObject BindGetMember(GetMemberBinder binder)
             ComBinder.ComGetMemberBinder comBinder = binder as ComBinder.ComGetMemberBinder;
             bool canReturnCallables = comBinder?._canReturnCallables ?? false;
 
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             // 1. Try methods
             if (_self.TryGetMemberMethod(binder.Name, out ComMethodDesc method))
@@ -187,7 +187,7 @@ private DynamicMetaObject BindEvent(ComEventDesc eventDesc)
 
         public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             if (_self.TryGetGetItem(out ComMethodDesc getItem))
             {
@@ -203,7 +203,7 @@ public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMet
 
         public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             if (_self.TryGetSetItem(out ComMethodDesc setItem))
             {
@@ -238,7 +238,7 @@ public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMet
 
         public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
         {
-            Requires.NotNull(binder, nameof(binder));
+            Requires.NotNull(binder);
 
             return
                 // 1. Check for simple property put
diff --git a/src/System.Management.Automation/engine/ComInterop/InteropServices/ComEventsMethod.cs b/src/System.Management.Automation/engine/ComInterop/InteropServices/ComEventsMethod.cs
index d31ca0299c9..f8ff1e09855 100644
--- a/src/System.Management.Automation/engine/ComInterop/InteropServices/ComEventsMethod.cs
+++ b/src/System.Management.Automation/engine/ComInterop/InteropServices/ComEventsMethod.cs
@@ -83,10 +83,7 @@ private void PreProcessSignature()
                         && pi.ParameterType.HasElementType
                         && pi.ParameterType.GetElementType()!.IsEnum)
                     {
-                        if (targetTypes == null)
-                        {
-                            targetTypes = new Type?[_expectedParamsCount];
-                        }
+                        targetTypes ??= new Type?[_expectedParamsCount];
 
                         targetTypes[i] = pi.ParameterType.GetElementType();
                     }
diff --git a/src/System.Management.Automation/engine/ComInterop/InteropServices/Variant.cs b/src/System.Management.Automation/engine/ComInterop/InteropServices/Variant.cs
index 24405957f72..941f471b666 100644
--- a/src/System.Management.Automation/engine/ComInterop/InteropServices/Variant.cs
+++ b/src/System.Management.Automation/engine/ComInterop/InteropServices/Variant.cs
@@ -276,9 +276,6 @@ public unsafe void CopyFromIndirect(object value)
             }
         }
 
-        [DllImport("oleaut32.dll")]
-        internal static extern void VariantClear(IntPtr variant);
-
         /// <summary>
         /// Release any unmanaged memory associated with the Variant
         /// </summary>
@@ -306,7 +303,7 @@ public void Clear()
                 {
                     fixed (void* pThis = &this)
                     {
-                        VariantClear((IntPtr)pThis);
+                        Interop.Windows.VariantClear((nint)pThis);
                     }
                 }
 
@@ -343,6 +340,7 @@ public sbyte AsI1
                 Debug.Assert(VariantType == VarEnum.VT_I1);
                 return _typeUnion._unionTypes._i1;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -360,6 +358,7 @@ public short AsI2
                 Debug.Assert(VariantType == VarEnum.VT_I2);
                 return _typeUnion._unionTypes._i2;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -377,6 +376,7 @@ public int AsI4
                 Debug.Assert(VariantType == VarEnum.VT_I4);
                 return _typeUnion._unionTypes._i4;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -394,6 +394,7 @@ public long AsI8
                 Debug.Assert(VariantType == VarEnum.VT_I8);
                 return _typeUnion._unionTypes._i8;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -411,6 +412,7 @@ public byte AsUi1
                 Debug.Assert(VariantType == VarEnum.VT_UI1);
                 return _typeUnion._unionTypes._ui1;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -428,6 +430,7 @@ public ushort AsUi2
                 Debug.Assert(VariantType == VarEnum.VT_UI2);
                 return _typeUnion._unionTypes._ui2;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -445,6 +448,7 @@ public uint AsUi4
                 Debug.Assert(VariantType == VarEnum.VT_UI4);
                 return _typeUnion._unionTypes._ui4;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -462,6 +466,7 @@ public ulong AsUi8
                 Debug.Assert(VariantType == VarEnum.VT_UI8);
                 return _typeUnion._unionTypes._ui8;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -479,6 +484,7 @@ public int AsInt
                 Debug.Assert(VariantType == VarEnum.VT_INT);
                 return _typeUnion._unionTypes._int;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -496,6 +502,7 @@ public uint AsUint
                 Debug.Assert(VariantType == VarEnum.VT_UINT);
                 return _typeUnion._unionTypes._uint;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -513,6 +520,7 @@ public bool AsBool
                 Debug.Assert(VariantType == VarEnum.VT_BOOL);
                 return _typeUnion._unionTypes._bool != 0;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -532,6 +540,7 @@ public int AsError
                 Debug.Assert(VariantType == VarEnum.VT_ERROR);
                 return _typeUnion._unionTypes._error;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -549,6 +558,7 @@ public float AsR4
                 Debug.Assert(VariantType == VarEnum.VT_R4);
                 return _typeUnion._unionTypes._r4;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -566,6 +576,7 @@ public double AsR8
                 Debug.Assert(VariantType == VarEnum.VT_R8);
                 return _typeUnion._unionTypes._r8;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -586,6 +597,7 @@ public decimal AsDecimal
                 v._typeUnion._vt = 0;
                 return v._decimal;
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -605,6 +617,7 @@ public decimal AsCy
                 Debug.Assert(VariantType == VarEnum.VT_CY);
                 return decimal.FromOACurrency(_typeUnion._unionTypes._cy);
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -622,6 +635,7 @@ public DateTime AsDate
                 Debug.Assert(VariantType == VarEnum.VT_DATE);
                 return DateTime.FromOADate(_typeUnion._unionTypes._date);
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -639,6 +653,7 @@ public string AsBstr
                 Debug.Assert(VariantType == VarEnum.VT_BSTR);
                 return (string)Marshal.PtrToStringBSTR(this._typeUnion._unionTypes._bstr);
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -660,6 +675,7 @@ public object? AsUnknown
                 }
                 return Marshal.GetObjectForIUnknown(_typeUnion._unionTypes._unknown);
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
@@ -688,6 +704,7 @@ public object? AsDispatch
                 }
                 return Marshal.GetObjectForIUnknown(_typeUnion._unionTypes._dispatch);
             }
+
             set
             {
                 Debug.Assert(IsEmpty);
diff --git a/src/System.Management.Automation/engine/ComInterop/SplatCallSite.cs b/src/System.Management.Automation/engine/ComInterop/SplatCallSite.cs
index 68c394033fc..926bb460a09 100644
--- a/src/System.Management.Automation/engine/ComInterop/SplatCallSite.cs
+++ b/src/System.Management.Automation/engine/ComInterop/SplatCallSite.cs
@@ -24,15 +24,13 @@ internal SplatCallSite(object callable)
         }
 
         public delegate object InvokeDelegate(object[] args);
+
         internal object Invoke(object[] args)
         {
             Debug.Assert(args != null);
 
             // Create a CallSite and invoke it.
-            if (_site == null)
-            {
-                _site = CallSite<Func<CallSite, object, object[], object>>.Create(SplatInvokeBinder.Instance);
-            }
+            _site ??= CallSite<Func<CallSite, object, object[], object>>.Create(SplatInvokeBinder.Instance);
 
             return _site.Target(_site, _callable, args);
         }
diff --git a/src/System.Management.Automation/engine/ComInterop/TypeUtils.cs b/src/System.Management.Automation/engine/ComInterop/TypeUtils.cs
index 0d4ee61dcf7..04217bd0bb6 100644
--- a/src/System.Management.Automation/engine/ComInterop/TypeUtils.cs
+++ b/src/System.Management.Automation/engine/ComInterop/TypeUtils.cs
@@ -38,6 +38,7 @@ internal static bool AreReferenceAssignable(Type dest, Type src)
             }
             return false;
         }
+
         //CONFORMING
         internal static bool AreAssignable(Type dest, Type src)
         {
@@ -101,11 +102,9 @@ internal static MethodInfo GetUserDefinedCoercionMethod(Type convertFrom, Type c
             // try lifted conversion
             if (nnExprType != convertFrom || nnConvType != convertToType)
             {
-                method = FindConversionOperator(eMethods, nnExprType, nnConvType, implicitOnly);
-                if (method == null)
-                {
-                    method = FindConversionOperator(cMethods, nnExprType, nnConvType, implicitOnly);
-                }
+                method =
+                    FindConversionOperator(eMethods, nnExprType, nnConvType, implicitOnly) ??
+                    FindConversionOperator(cMethods, nnExprType, nnConvType, implicitOnly);
                 if (method != null)
                 {
                     return method;
diff --git a/src/System.Management.Automation/engine/ComInterop/VarEnumSelector.cs b/src/System.Management.Automation/engine/ComInterop/VarEnumSelector.cs
index c7f6b120919..a9e1594ae1c 100644
--- a/src/System.Management.Automation/engine/ComInterop/VarEnumSelector.cs
+++ b/src/System.Management.Automation/engine/ComInterop/VarEnumSelector.cs
@@ -98,7 +98,7 @@ internal static Type GetTypeForVarEnum(VarEnum vt)
         }
 
         /// <summary>
-        /// Gets the managed type that an object needs to be coverted to in order for it to be able
+        /// Gets the managed type that an object needs to be converted to in order for it to be able
         /// to be represented as a Variant.
         ///
         /// In general, there is a many-to-many mapping between Type and VarEnum. However, this method
@@ -211,7 +211,7 @@ private static List<VarEnum> GetConversionsToComPrimitiveTypeFamilies(Type argum
                     if (TypeUtils.IsImplicitlyConvertible(argumentType, candidateManagedType, true))
                     {
                         compatibleComTypes.Add(candidateType);
-                        // Move on to the next type family. We need atmost one type from each family
+                        // Move on to the next type family. We need at most one type from each family
                         break;
                     }
                 }
@@ -352,7 +352,7 @@ private static bool TryGetPrimitiveComTypeViaConversion(Type argumentType, out V
         // We will try VT_DISPATCH and then call GetNativeVariantForObject.
         private const VarEnum VT_DEFAULT = VarEnum.VT_RECORD;
 
-        private VarEnum GetComType(ref Type argumentType)
+        private static VarEnum GetComType(ref Type argumentType)
         {
             if (argumentType == typeof(Missing))
             {
@@ -429,9 +429,9 @@ private VarEnum GetComType(ref Type argumentType)
         }
 
         /// <summary>
-        /// Get the COM Variant type that argument should be marshaled as for a call to COM.
+        /// Get the COM Variant type that argument should be marshalled as for a call to COM.
         /// </summary>
-        private VariantBuilder GetVariantBuilder(Type argumentType)
+        private static VariantBuilder GetVariantBuilder(Type argumentType)
         {
             //argumentType is coming from MarshalType, null means the dynamic object holds
             //a null value and not byref
@@ -455,7 +455,7 @@ private VariantBuilder GetVariantBuilder(Type argumentType)
                 if (elementType == typeof(object) || elementType == typeof(DBNull))
                 {
                     //no meaningful value to pass ByRef.
-                    //perhaps the calee will replace it with something.
+                    //perhaps the callee will replace it with something.
                     //need to pass as a variant reference
                     elementVarEnum = VarEnum.VT_VARIANT;
                 }
diff --git a/src/System.Management.Automation/engine/ComInterop/Variant.Extended.cs b/src/System.Management.Automation/engine/ComInterop/Variant.Extended.cs
index 3a47dbd2ba4..9cab38d0773 100644
--- a/src/System.Management.Automation/engine/ComInterop/Variant.Extended.cs
+++ b/src/System.Management.Automation/engine/ComInterop/Variant.Extended.cs
@@ -282,10 +282,7 @@ internal static System.Reflection.MethodInfo GetByrefSetter(VarEnum varType)
             }
         }
 
-        public override string ToString()
-        {
-            return string.Format(CultureInfo.CurrentCulture, "Variant ({0})", VariantType);
-        }
+        public override string ToString() => $"Variant ({VariantType})";
 
         public void SetAsIConvertible(IConvertible value)
         {
diff --git a/src/System.Management.Automation/engine/ComInterop/VariantArray.cs b/src/System.Management.Automation/engine/ComInterop/VariantArray.cs
index a196eb96079..d4f8af57b74 100644
--- a/src/System.Management.Automation/engine/ComInterop/VariantArray.cs
+++ b/src/System.Management.Automation/engine/ComInterop/VariantArray.cs
@@ -58,10 +58,25 @@ internal static MemberExpression GetStructField(ParameterExpression variantArray
         internal static Type GetStructType(int args)
         {
             Debug.Assert(args >= 0);
-            if (args <= 1) return typeof(VariantArray1);
-            if (args <= 2) return typeof(VariantArray2);
-            if (args <= 4) return typeof(VariantArray4);
-            if (args <= 8) return typeof(VariantArray8);
+            if (args <= 1)
+            {
+                return typeof(VariantArray1);
+            }
+
+            if (args <= 2)
+            {
+                return typeof(VariantArray2);
+            }
+
+            if (args <= 4)
+            {
+                return typeof(VariantArray4);
+            }
+
+            if (args <= 8)
+            {
+                return typeof(VariantArray8);
+            }
 
             int size = 1;
             while (args > size)
diff --git a/src/System.Management.Automation/engine/ComInterop/VariantBuilder.cs b/src/System.Management.Automation/engine/ComInterop/VariantBuilder.cs
index edcb0eb0f10..baabb25cd75 100644
--- a/src/System.Management.Automation/engine/ComInterop/VariantBuilder.cs
+++ b/src/System.Management.Automation/engine/ComInterop/VariantBuilder.cs
@@ -16,6 +16,7 @@ internal class VariantBuilder
         private MemberExpression _variant;
         private readonly ArgBuilder _argBuilder;
         private readonly VarEnum _targetComType;
+
         internal ParameterExpression TempVariable { get; private set; }
 
         internal VariantBuilder(VarEnum targetComType, ArgBuilder builder)
diff --git a/src/System.Management.Automation/engine/CommandBase.cs b/src/System.Management.Automation/engine/CommandBase.cs
index da2e97e516b..3708611df07 100644
--- a/src/System.Management.Automation/engine/CommandBase.cs
+++ b/src/System.Management.Automation/engine/CommandBase.cs
@@ -8,8 +8,7 @@
 using System.Management.Automation.Internal.Host;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
-
-using Dbg = System.Management.Automation.Diagnostics;
+using System.Threading;
 
 namespace System.Management.Automation.Internal
 {
@@ -132,6 +131,13 @@ internal bool IsStopping
             }
         }
 
+        /// <summary>
+        /// Gets the CancellationToken that is signaled when the pipeline is stopping.
+        /// </summary>
+        internal CancellationToken StopToken => commandRuntime is MshCommandRuntime mcr
+            ? mcr.PipelineProcessor.PipelineStopToken
+            : default;
+
         /// <summary>
         /// The information about the command.
         /// </summary>
@@ -233,6 +239,13 @@ internal virtual void DoStopProcessing()
         {
         }
 
+        /// <summary>
+        /// When overridden in the derived class, performs clean-up after the command execution.
+        /// </summary>
+        internal virtual void DoCleanResource()
+        {
+        }
+
         #endregion Override
 
         /// <summary>
@@ -272,6 +285,26 @@ internal void InternalDispose(bool isDisposing)
 
 namespace System.Management.Automation
 {
+    #region NativeArgumentPassingStyle
+    /// <summary>
+    /// Defines the different native command argument parsing options.
+    /// </summary>
+    public enum NativeArgumentPassingStyle
+    {
+        /// <summary>Use legacy argument parsing via ProcessStartInfo.Arguments.</summary>
+        Legacy = 0,
+
+        /// <summary>Use new style argument passing via ProcessStartInfo.ArgumentList.</summary>
+        Standard = 1,
+
+        /// <summary>
+        /// Use specific to Windows passing style which is Legacy for selected files on Windows, but
+        /// Standard for everything else. This is the default behavior for Windows.
+        /// </summary>
+        Windows = 2
+    }
+    #endregion NativeArgumentPassingStyle
+
     #region ErrorView
     /// <summary>
     /// Defines the potential ErrorView options.
@@ -286,6 +319,9 @@ public enum ErrorView
 
         /// <summary>Concise shows more information on the context of the error or just the message if not a script or parser error.</summary>
         ConciseView = 2,
+
+        /// <summary>Detailed will leverage Get-Error to get much more detailed information for the error.</summary>
+        DetailedView = 3,
     }
     #endregion ErrorView
 
@@ -367,11 +403,11 @@ public enum ConfirmImpact
     /// deriving from the PSCmdlet base class.  The Cmdlet base class is the primary means by
     /// which users create their own Cmdlets.  Extending this class provides support for the most
     /// common functionality, including object output and record processing.
-    /// If your Cmdlet requires access to the MSH Runtime (for example, variables in the session state,
+    /// If your Cmdlet requires access to the PowerShell Runtime (for example, variables in the session state,
     /// access to the host, or information about the current Cmdlet Providers,) then you should instead
     /// derive from the PSCmdlet base class.
     /// The public members defined by the PSCmdlet class are not designed to be overridden; instead, they
-    /// provided access to different aspects of the MSH runtime.
+    /// provided access to different aspects of the PowerShell runtime.
     /// In both cases, users should first develop and implement an object model to accomplish their
     /// task, extending the Cmdlet or PSCmdlet classes only as a thin management layer.
     /// </remarks>
diff --git a/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs b/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs
index f31065080c6..9956cf9fa92 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/CommandCompletion.cs
@@ -4,13 +4,11 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
-using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
-using System.Globalization;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
-using System.Text.RegularExpressions;
 #if LEGACYTELEMETRY
+using System.Diagnostics;
 using Microsoft.PowerShell.Telemetry.Internal;
 #endif
 
@@ -93,7 +91,7 @@ public static Tuple<Ast, Token[], IScriptPosition> MapStringInputToParsedInput(s
         /// <returns></returns>
         public static CommandCompletion CompleteInput(string input, int cursorIndex, Hashtable options)
         {
-            if (input == null)
+            if (input == null || input.Length == 0)
             {
                 return s_emptyCommandCompletion;
             }
@@ -126,12 +124,16 @@ public static CommandCompletion CompleteInput(Ast ast, Token[] tokens, IScriptPo
                 throw PSTraceSource.NewArgumentNullException(nameof(positionOfCursor));
             }
 
+            if (ast.Extent.Text.Length == 0)
+            {
+                return s_emptyCommandCompletion;
+            }
+
             return CompleteInputImpl(ast, tokens, positionOfCursor, options);
         }
 
         /// <summary>
         /// Invokes the script function TabExpansion2.
-        /// For legacy support, TabExpansion2 will indirectly call TabExpansion if it exists.
         /// </summary>
         /// <param name="input">The input script to complete.</param>
         /// <param name="cursorIndex">The offset in <paramref name="input"/> where completion is requested.</param>
@@ -141,7 +143,7 @@ public static CommandCompletion CompleteInput(Ast ast, Token[] tokens, IScriptPo
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "powershell")]
         public static CommandCompletion CompleteInput(string input, int cursorIndex, Hashtable options, PowerShell powershell)
         {
-            if (input == null)
+            if (input == null || input.Length == 0)
             {
                 return s_emptyCommandCompletion;
             }
@@ -180,21 +182,11 @@ public static CommandCompletion CompleteInput(string input, int cursorIndex, Has
                 if (!powershell.IsChild)
                 {
                     CheckScriptCallOnRemoteRunspace(remoteRunspace);
+
+                    // TabExpansion2 script is not available prior to PSv3.
                     if (remoteRunspace.GetCapabilities().Equals(Runspaces.RunspaceCapability.Default))
                     {
-                        // Capability:
-                        //      NamedPipeTransport (0x2)            -> If remoteMachine is Threshold or later
-                        //      SupportsDisconnect (0x1)            -> If remoteMachine is Win8 or later
-                        //      Default (0x0)                       -> If remoteMachine is Win7
-                        // Remoting to a Win7 machine. Use the legacy tab completion function from V1/V2
-                        int replacementIndex;
-                        int replacementLength;
-
-                        powershell.Commands.Clear();
-                        var results = InvokeLegacyTabExpansion(powershell, input, cursorIndex, true, out replacementIndex, out replacementLength);
-                        return new CommandCompletion(
-                            new Collection<CompletionResult>(results ?? EmptyCompletionResult),
-                            -1, replacementIndex, replacementLength);
+                        return s_emptyCommandCompletion;
                     }
                 }
             }
@@ -204,7 +196,6 @@ public static CommandCompletion CompleteInput(string input, int cursorIndex, Has
 
         /// <summary>
         /// Invokes the script function TabExpansion2.
-        /// For legacy support, TabExpansion2 will indirectly call TabExpansion if it exists.
         /// </summary>
         /// <param name="ast">The ast for pre-parsed input.</param>
         /// <param name="tokens"></param>
@@ -235,6 +226,11 @@ public static CommandCompletion CompleteInput(Ast ast, Token[] tokens, IScriptPo
                 throw PSTraceSource.NewArgumentNullException(nameof(powershell));
             }
 
+            if (ast.Extent.Text.Length == 0)
+            {
+                return s_emptyCommandCompletion;
+            }
+
             // If we are in a debugger stop, let the debugger do the command completion.
             var debugger = powershell.Runspace?.Debugger;
             if ((debugger != null) && debugger.InBreakpoint)
@@ -255,31 +251,17 @@ public static CommandCompletion CompleteInput(Ast ast, Token[] tokens, IScriptPo
                 if (!powershell.IsChild)
                 {
                     CheckScriptCallOnRemoteRunspace(remoteRunspace);
+
+                    // TabExpansion2 script is not available prior to PSv3.
                     if (remoteRunspace.GetCapabilities().Equals(Runspaces.RunspaceCapability.Default))
                     {
-                        // Capability:
-                        //      SupportsDisconnect (0x1)            -> If remoteMachine is Win8 or later
-                        //      Default (0x0)                       -> If remoteMachine is Win7
-                        // Remoting to a Win7 machine. Use the legacy tab completion function from V1/V2
-                        int replacementIndex;
-                        int replacementLength;
-
-                        // When call the win7 TabExpansion script, the input should be the single current line
-                        powershell.Commands.Clear();
-                        var inputAndCursor = GetInputAndCursorFromAst(cursorPosition);
-                        var results = InvokeLegacyTabExpansion(powershell, inputAndCursor.Item1, inputAndCursor.Item2, true, out replacementIndex, out replacementLength);
-                        return new CommandCompletion(
-                            new Collection<CompletionResult>(results ?? EmptyCompletionResult),
-                            -1, replacementIndex + inputAndCursor.Item3, replacementLength);
-                    }
-                    else
-                    {
-                        // Call script on a remote win8 machine
-                        // when call the win8 TabExpansion2 script, the input should be the whole script text
-                        string input = ast.Extent.Text;
-                        int cursorIndex = ((InternalScriptPosition)cursorPosition).Offset;
-                        return CallScriptWithStringParameterSet(input, cursorIndex, options, powershell);
+                        return s_emptyCommandCompletion;
                     }
+
+                    // When calling the TabExpansion2 script, the input should be the whole script text
+                    string input = ast.Extent.Text;
+                    int cursorIndex = ((InternalScriptPosition)cursorPosition).Offset;
+                    return CallScriptWithStringParameterSet(input, cursorIndex, options, powershell);
                 }
             }
 
@@ -526,810 +508,55 @@ private static CommandCompletion CompleteInputImpl(Ast ast, Token[] tokens, IScr
             {
                 var context = LocalPipeline.GetExecutionContextFromTLS();
 
-                bool cleanupModuleAnalysisAppDomain = context.TakeResponsibilityForModuleAnalysisAppDomain();
-
-                try
-                {
-                    // First, check if a V1/V2 implementation of TabExpansion exists.  If so, the user had overridden
-                    // the built-in version, so we should continue to use theirs.
-                    int replacementIndex = -1;
-                    int replacementLength = -1;
-                    List<CompletionResult> results = null;
-
-                    if (NeedToInvokeLegacyTabExpansion(powershell))
-                    {
-                        var inputAndCursor = GetInputAndCursorFromAst(positionOfCursor);
-                        results = InvokeLegacyTabExpansion(powershell, inputAndCursor.Item1, inputAndCursor.Item2, false, out replacementIndex, out replacementLength);
-                        replacementIndex += inputAndCursor.Item3;
-                    }
-
-                    if (results == null || results.Count == 0)
-                    {
-                        /* BROKEN code commented out, fix sometime
-                        // If we were invoked from TabExpansion2, we want to "remove" TabExpansion2 and anything it calls
-                        // from our results.  We do this by faking out the session so that TabExpansion2 isn't anywhere to be found.
-                        MutableTuple tupleForFrameToSkipPast = null;
-                        foreach (var stackEntry in context.Debugger.GetCallStack())
-                        {
-                            dynamic stackEntryAsPSObj = PSObject.AsPSObject(stackEntry);
-                            if (stackEntryAsPSObj.Command.Equals("TabExpansion2", StringComparison.OrdinalIgnoreCase))
-                            {
-                                tupleForFrameToSkipPast = stackEntry.FunctionContext._localsTuple;
-                                break;
-                            }
-                        }
+                int replacementIndex = -1;
+                int replacementLength = -1;
+                List<CompletionResult> results = null;
 
-                        SessionStateScope scopeToRestore = null;
-                        if (tupleForFrameToSkipPast != null)
-                        {
-                            // Find this tuple in the scope stack.
-                            scopeToRestore = context.EngineSessionState.CurrentScope;
-                            var scope = context.EngineSessionState.CurrentScope;
-                            while (scope != null && scope.LocalsTuple != tupleForFrameToSkipPast)
-                            {
-                                scope = scope.Parent;
-                            }
-
-                            if (scope != null)
-                            {
-                                context.EngineSessionState.CurrentScope = scope.Parent;
-                            }
-                        }
-
-                        try
-                        {
-                        */
-                        var completionAnalysis = new CompletionAnalysis(ast, tokens, positionOfCursor, options);
-                        results = completionAnalysis.GetResults(powershell, out replacementIndex, out replacementLength);
-                        /*
-                        }
-                        finally
-                        {
-                            if (scopeToRestore != null)
-                            {
-                                context.EngineSessionState.CurrentScope = scopeToRestore;
-                            }
-                        }
-                        */
-                    }
-
-                    var completionResults = results ?? EmptyCompletionResult;
-
-#if LEGACYTELEMETRY
-                    // no telemetry here. We don't capture tab completion performance.
-                    sw.Stop();
-                    TelemetryAPI.ReportTabCompletionTelemetry(sw.ElapsedMilliseconds, completionResults.Count,
-                        completionResults.Count > 0 ? completionResults[0].ResultType : CompletionResultType.Text);
-#endif
-                    return new CommandCompletion(
-                        new Collection<CompletionResult>(completionResults),
-                        -1,
-                        replacementIndex,
-                        replacementLength);
-                }
-                finally
                 {
-                    if (cleanupModuleAnalysisAppDomain)
+                    // If we were invoked from TabExpansion2, we want to "remove" TabExpansion2 and anything it calls
+                    // from our results.  We do this by faking out the session so that TabExpansion2 isn't anywhere to be found.
+                    SessionStateScope scopeToRestore;
+                    if (context.CurrentCommandProcessor is not null
+                        && context.CurrentCommandProcessor.Command.CommandInfo.Name.Equals("TabExpansion2", StringComparison.OrdinalIgnoreCase)
+                        && context.CurrentCommandProcessor.UseLocalScope
+                        && context.EngineSessionState.CurrentScope.Parent is not null)
                     {
-                        context.ReleaseResponsibilityForModuleAnalysisAppDomain();
-                    }
-                }
-            }
-        }
-
-        private static Tuple<string, int, int> GetInputAndCursorFromAst(IScriptPosition cursorPosition)
-        {
-            var line = cursorPosition.Line;
-            var cursor = cursorPosition.ColumnNumber - 1;
-            var adjustment = cursorPosition.Offset - cursor;
-            return Tuple.Create(line.Substring(0, cursor), cursor, adjustment);
-        }
-
-        private static bool NeedToInvokeLegacyTabExpansion(PowerShell powershell)
-        {
-            var executionContext = powershell.GetContextFromTLS();
-
-            // We don't want command discovery to search unloaded modules for TabExpansion.
-            var functionInfo = executionContext.EngineSessionState.GetFunction("TabExpansion");
-            if (functionInfo != null)
-                return true;
-
-            var aliasInfo = executionContext.EngineSessionState.GetAlias("TabExpansion");
-            if (aliasInfo != null)
-                return true;
-
-            return false;
-        }
-
-        private static List<CompletionResult> InvokeLegacyTabExpansion(PowerShell powershell, string input, int cursorIndex, bool remoteToWin7, out int replacementIndex, out int replacementLength)
-        {
-            List<CompletionResult> results = null;
-
-            var legacyInput = (cursorIndex != input.Length) ? input.Substring(0, cursorIndex) : input;
-            char quote;
-            var lastword = LastWordFinder.FindLastWord(legacyInput, out replacementIndex, out quote);
-            replacementLength = legacyInput.Length - replacementIndex;
-            var helper = new PowerShellExecutionHelper(powershell);
-
-            powershell.AddCommand("TabExpansion").AddArgument(legacyInput).AddArgument(lastword);
-
-            Exception exceptionThrown;
-            var oldResults = helper.ExecuteCurrentPowerShell(out exceptionThrown);
-            if (oldResults != null)
-            {
-                results = new List<CompletionResult>();
-                foreach (var oldResult in oldResults)
-                {
-                    var completionResult = PSObject.Base(oldResult) as CompletionResult;
-                    if (completionResult == null)
-                    {
-                        var oldResultStr = oldResult.ToString();
-
-                        // Add back the quotes we removed if the result isn't quoted
-                        if (quote != '\0')
-                        {
-                            if (oldResultStr.Length > 2 && oldResultStr[0] != quote)
-                            {
-                                oldResultStr = quote + oldResultStr + quote;
-                            }
-                        }
-
-                        completionResult = new CompletionResult(oldResultStr);
-                    }
-
-                    results.Add(completionResult);
-                }
-            }
-
-            if (remoteToWin7 && (results == null || results.Count == 0))
-            {
-                string quoteStr = quote == '\0' ? string.Empty : quote.ToString();
-                results = PSv2CompletionCompleter.PSv2GenerateMatchSetOfFiles(helper, lastword, replacementIndex == 0, quoteStr);
-                var cmdletResults = PSv2CompletionCompleter.PSv2GenerateMatchSetOfCmdlets(helper, lastword, quoteStr, replacementIndex == 0);
-
-                if (cmdletResults != null && cmdletResults.Count > 0)
-                {
-                    results.AddRange(cmdletResults);
-                }
-            }
-
-            return results;
-        }
-
-        /// <summary>
-        /// PSv2CompletionCompleter implements the algorithm we use to complete cmdlet/file names in PowerShell v2. This class
-        /// exists for legacy purpose only. It is used only in a remote interactive session from Win8 to Win7. V3 and forward
-        /// uses completely different completers.
-        /// </summary>
-        /// <remarks>
-        /// The implementation of file name completion is completely different on V2 and V3 for remote scenarios. On PSv3, the
-        /// CompletionResults are generated always on the target machine, and
-        /// </remarks>
-        private static class PSv2CompletionCompleter
-        {
-            private static readonly Regex s_cmdletTabRegex = new Regex(@"^[\w\*\?]+-[\w\*\?]*");
-            private static readonly char[] s_charsRequiringQuotedString = "`&@'#{}()$,;|<> \t".ToCharArray();
-
-            #region "Handle Command"
-
-            /// <summary>
-            /// Used when remoting from a win8 machine to a win7 machine.
-            /// </summary>
-            /// <param name="lastWord"></param>
-            /// <param name="isSnapinSpecified"></param>
-            /// <returns></returns>
-            private static bool PSv2IsCommandLikeCmdlet(string lastWord, out bool isSnapinSpecified)
-            {
-                isSnapinSpecified = false;
-
-                string[] cmdletParts = lastWord.Split(Utils.Separators.Backslash);
-                if (cmdletParts.Length == 1)
-                {
-                    return s_cmdletTabRegex.IsMatch(lastWord);
-                }
-
-                if (cmdletParts.Length == 2)
-                {
-                    isSnapinSpecified = PSSnapInInfo.IsPSSnapinIdValid(cmdletParts[0]);
-                    if (isSnapinSpecified)
-                    {
-                        return s_cmdletTabRegex.IsMatch(cmdletParts[1]);
-                    }
-                }
-
-                return false;
-            }
-
-            private readonly struct CommandAndName
-            {
-                internal readonly PSObject Command;
-                internal readonly PSSnapinQualifiedName CommandName;
-
-                internal CommandAndName(PSObject command, PSSnapinQualifiedName commandName)
-                {
-                    this.Command = command;
-                    this.CommandName = commandName;
-                }
-            }
-
-            /// <summary>
-            /// Used when remoting from a win8 machine to a win7 machine. Complete command names.
-            /// </summary>
-            /// <param name="helper"></param>
-            /// <param name="lastWord"></param>
-            /// <param name="quote"></param>
-            /// <param name="completingAtStartOfLine"></param>
-            /// <returns></returns>
-            internal static List<CompletionResult> PSv2GenerateMatchSetOfCmdlets(PowerShellExecutionHelper helper, string lastWord, string quote, bool completingAtStartOfLine)
-            {
-                var results = new List<CompletionResult>();
-                bool isSnapinSpecified;
-
-                if (!PSv2IsCommandLikeCmdlet(lastWord, out isSnapinSpecified))
-                    return results;
-
-                helper.CurrentPowerShell
-                    .AddCommand("Get-Command")
-                    .AddParameter("Name", lastWord + "*")
-                    .AddCommand("Sort-Object")
-                    .AddParameter("Property", "Name");
-
-                Exception exceptionThrown;
-                Collection<PSObject> commands = helper.ExecuteCurrentPowerShell(out exceptionThrown);
-
-                if (commands != null && commands.Count > 0)
-                {
-                    // convert the PSObjects into strings
-                    CommandAndName[] cmdlets = new CommandAndName[commands.Count];
-                    // if the command causes cmdlets from multiple mshsnapin is returned,
-                    // append the mshsnapin name to disambiguate the cmdlets.
-                    for (int i = 0; i < commands.Count; ++i)
-                    {
-                        PSObject command = commands[i];
-                        string cmdletFullName = CmdletInfo.GetFullName(command);
-                        cmdlets[i] = new CommandAndName(command, PSSnapinQualifiedName.GetInstance(cmdletFullName));
-                    }
-
-                    if (isSnapinSpecified)
-                    {
-                        foreach (CommandAndName cmdlet in cmdlets)
-                        {
-                            AddCommandResult(cmdlet, true, completingAtStartOfLine, quote, results);
-                        }
+                        scopeToRestore = context.EngineSessionState.CurrentScope;
+                        context.EngineSessionState.CurrentScope = scopeToRestore.Parent;
                     }
                     else
                     {
-                        PrependSnapInNameForSameCmdletNames(cmdlets, completingAtStartOfLine, quote, results);
-                    }
-                }
-
-                return results;
-            }
-
-            private static void AddCommandResult(CommandAndName commandAndName, bool useFullName, bool completingAtStartOfLine, string quote, List<CompletionResult> results)
-            {
-                Diagnostics.Assert(results != null, "Caller needs to make sure the result list is not null");
-
-                string name = useFullName ? commandAndName.CommandName.FullName : commandAndName.CommandName.ShortName;
-                string quotedFileName = AddQuoteIfNecessary(name, quote, completingAtStartOfLine);
-
-                var commandType = SafeGetProperty<CommandTypes?>(commandAndName.Command, "CommandType");
-                if (commandType == null)
-                {
-                    return;
-                }
-
-                string toolTip;
-                string displayName = SafeGetProperty<string>(commandAndName.Command, "Name");
-
-                if (commandType.Value == CommandTypes.Cmdlet || commandType.Value == CommandTypes.Application)
-                {
-                    toolTip = SafeGetProperty<string>(commandAndName.Command, "Definition");
-                }
-                else
-                {
-                    toolTip = displayName;
-                }
-
-                results.Add(new CompletionResult(quotedFileName, displayName, CompletionResultType.Command, toolTip));
-            }
-
-            private static void PrependSnapInNameForSameCmdletNames(CommandAndName[] cmdlets, bool completingAtStartOfLine, string quote, List<CompletionResult> results)
-            {
-                Diagnostics.Assert(cmdlets != null && cmdlets.Length > 0,
-                    "HasMultiplePSSnapIns must be called with a non-empty collection of PSObject");
-
-                int i = 0;
-                bool previousMatched = false;
-                while (true)
-                {
-                    CommandAndName commandAndName = cmdlets[i];
-
-                    int lookAhead = i + 1;
-                    if (lookAhead >= cmdlets.Length)
-                    {
-                        AddCommandResult(commandAndName, previousMatched, completingAtStartOfLine, quote, results);
-                        break;
+                        scopeToRestore = null;
                     }
 
-                    CommandAndName nextCommandAndName = cmdlets[lookAhead];
-
-                    if (string.Equals(
-                            commandAndName.CommandName.ShortName,
-                            nextCommandAndName.CommandName.ShortName,
-                            StringComparison.OrdinalIgnoreCase))
-                    {
-                        AddCommandResult(commandAndName, true, completingAtStartOfLine, quote, results);
-                        previousMatched = true;
-                    }
-                    else
+                    try
                     {
-                        AddCommandResult(commandAndName, previousMatched, completingAtStartOfLine, quote, results);
-                        previousMatched = false;
+                        var completionAnalysis = new CompletionAnalysis(ast, tokens, positionOfCursor, options);
+                        results = completionAnalysis.GetResults(powershell, out replacementIndex, out replacementLength);
                     }
-
-                    i++;
-                }
-            }
-
-            #endregion "Handle Command"
-
-            #region "Handle File Names"
-
-            internal static List<CompletionResult> PSv2GenerateMatchSetOfFiles(PowerShellExecutionHelper helper, string lastWord, bool completingAtStartOfLine, string quote)
-            {
-                var results = new List<CompletionResult>();
-
-                // lastWord is treated as an PSPath. The match set includes those items that match that
-                // path, namely, the union of:
-                //  (S1) the sorted set of items matching the last word
-                //  (S2) the sorted set of items matching the last word + *
-                // If the last word contains no wildcard characters, then S1 is the empty set.  S1 is always
-                // a subset of S2, but we want to present S1 first, then (S2 - S1) next.  The idea is that
-                // if the user typed some wildcard characters, they'd prefer to see those matches before
-                // all of the rest.
-
-                // Determine if we need to quote the paths we parse
-
-                lastWord ??= string.Empty;
-                bool isLastWordEmpty = string.IsNullOrEmpty(lastWord);
-                bool lastCharIsStar = !isLastWordEmpty && lastWord.EndsWith('*');
-                bool containsGlobChars = WildcardPattern.ContainsWildcardCharacters(lastWord);
-
-                string wildWord = lastWord + "*";
-                bool shouldFullyQualifyPaths = PSv2ShouldFullyQualifyPathsPath(helper, lastWord);
-
-                // NTRAID#Windows Out Of Band Releases-927933-2006/03/13-JeffJon
-                // Need to detect when the path is a provider-direct path and make sure
-                // to remove the provider-qualifier when the resolved path is returned.
-                bool isProviderDirectPath = lastWord.StartsWith(@"\\", StringComparison.Ordinal) ||
-                                            lastWord.StartsWith("//", StringComparison.Ordinal);
-
-                List<PathItemAndConvertedPath> s1 = null;
-                List<PathItemAndConvertedPath> s2 = null;
-
-                if (containsGlobChars && !isLastWordEmpty)
-                {
-                    s1 = PSv2FindMatches(
-                            helper,
-                            lastWord,
-                            shouldFullyQualifyPaths);
-                }
-
-                if (!lastCharIsStar)
-                {
-                    s2 = PSv2FindMatches(
-                            helper,
-                            wildWord,
-                            shouldFullyQualifyPaths);
-                }
-
-                IEnumerable<PathItemAndConvertedPath> combinedMatches = CombineMatchSets(s1, s2);
-
-                if (combinedMatches != null)
-                {
-                    foreach (var combinedMatch in combinedMatches)
+                    finally
                     {
-                        string combinedMatchPath = WildcardPattern.Escape(combinedMatch.Path);
-                        string combinedMatchConvertedPath = WildcardPattern.Escape(combinedMatch.ConvertedPath);
-                        string completionText = isProviderDirectPath ? combinedMatchConvertedPath : combinedMatchPath;
-
-                        completionText = AddQuoteIfNecessary(completionText, quote, completingAtStartOfLine);
-
-                        bool? isContainer = SafeGetProperty<bool?>(combinedMatch.Item, "PSIsContainer");
-                        string childName = SafeGetProperty<string>(combinedMatch.Item, "PSChildName");
-                        string toolTip = PowerShellExecutionHelper.SafeToString(combinedMatch.ConvertedPath);
-
-                        if (isContainer != null && childName != null && toolTip != null)
+                        if (scopeToRestore != null)
                         {
-                            CompletionResultType resultType = isContainer.Value
-                                                                  ? CompletionResultType.ProviderContainer
-                                                                  : CompletionResultType.ProviderItem;
-                            results.Add(new CompletionResult(completionText, childName, resultType, toolTip));
+                            context.EngineSessionState.CurrentScope = scopeToRestore;
                         }
                     }
                 }
 
-                return results;
-            }
-
-            private static string AddQuoteIfNecessary(string completionText, string quote, bool completingAtStartOfLine)
-            {
-                if (completionText.IndexOfAny(s_charsRequiringQuotedString) != -1)
-                {
-                    bool needAmpersand = quote.Length == 0 && completingAtStartOfLine;
-                    string quoteInUse = quote.Length == 0 ? "'" : quote;
-                    completionText = quoteInUse == "'" ? completionText.Replace("'", "''") : completionText;
-                    completionText = quoteInUse + completionText + quoteInUse;
-                    completionText = needAmpersand ? "& " + completionText : completionText;
-                }
-                else
-                {
-                    completionText = quote + completionText + quote;
-                }
-
-                return completionText;
-            }
-
-            private static IEnumerable<PathItemAndConvertedPath> CombineMatchSets(List<PathItemAndConvertedPath> s1, List<PathItemAndConvertedPath> s2)
-            {
-                if (s1 == null || s1.Count < 1)
-                {
-                    // only s2 contains results; which may be null or empty
-                    return s2;
-                }
-
-                if (s2 == null || s2.Count < 1)
-                {
-                    // only s1 contains results
-                    return s1;
-                }
-
-                // s1 and s2 contain results
-                Diagnostics.Assert(s1 != null && s1.Count > 0, "s1 should have results");
-                Diagnostics.Assert(s2 != null && s2.Count > 0, "if s1 has results, s2 must also");
-                Diagnostics.Assert(s1.Count <= s2.Count, "s2 should always be larger than s1");
-
-                var result = new List<PathItemAndConvertedPath>();
+                var completionResults = results ?? EmptyCompletionResult;
 
-                // we need to remove from s2 those items in s1.  Since the results from FindMatches will be sorted,
-                // just copy out the unique elements from s2 and s1.  We know that every element of S1 will be in S2,
-                // so the result set will be S1 + (S2 - S1), which is the same size as S2.
-                result.AddRange(s1);
-                for (int i = 0, j = 0; i < s2.Count; ++i)
-                {
-                    if (j < s1.Count && string.Equals(s2[i].Path, s1[j].Path, StringComparison.CurrentCultureIgnoreCase))
-                    {
-                        ++j;
-                        continue;
-                    }
-
-                    result.Add(s2[i]);
-                }
-
-#if DEBUG
-                Diagnostics.Assert(result.Count == s2.Count, "result should be the same size as s2, see the size comment above");
-                for (int i = 0; i < s1.Count; ++i)
-                {
-                    string path = result[i].Path;
-                    int j = result.FindLastIndex(item => item.Path == path);
-                    Diagnostics.Assert(j == i, "elements of s1 should only come at the start of the results");
-                }
+#if LEGACYTELEMETRY
+                // no telemetry here. We don't capture tab completion performance.
+                sw.Stop();
+                TelemetryAPI.ReportTabCompletionTelemetry(sw.ElapsedMilliseconds, completionResults.Count,
+                    completionResults.Count > 0 ? completionResults[0].ResultType : CompletionResultType.Text);
 #endif
-                return result;
-            }
-
-            private static T SafeGetProperty<T>(PSObject psObject, string propertyName)
-            {
-                if (psObject == null)
-                {
-                    return default(T);
-                }
-
-                PSPropertyInfo property = psObject.Properties[propertyName];
-                if (property == null)
-                {
-                    return default(T);
-                }
-
-                object propertyValue = property.Value;
-                if (propertyValue == null)
-                {
-                    return default(T);
-                }
-
-                T returnValue;
-                if (LanguagePrimitives.TryConvertTo(propertyValue, out returnValue))
-                {
-                    return returnValue;
-                }
-
-                return default(T);
-            }
-
-            private static bool PSv2ShouldFullyQualifyPathsPath(PowerShellExecutionHelper helper, string lastWord)
-            {
-                // These are special cases, as they represent cases where the user expects to
-                // see the full path.
-                if (lastWord.StartsWith('~') ||
-                    lastWord.StartsWith('\\') ||
-                    lastWord.StartsWith('/'))
-                {
-                    return true;
-                }
-
-                helper.CurrentPowerShell
-                    .AddCommand("Split-Path")
-                    .AddParameter("Path", lastWord)
-                    .AddParameter("IsAbsolute", true);
-
-                bool isAbsolute = helper.ExecuteCommandAndGetResultAsBool();
-                return isAbsolute;
-            }
-
-            private readonly struct PathItemAndConvertedPath
-            {
-                internal readonly string Path;
-                internal readonly PSObject Item;
-                internal readonly string ConvertedPath;
-
-                internal PathItemAndConvertedPath(string path, PSObject item, string convertedPath)
-                {
-                    this.Path = path;
-                    this.Item = item;
-                    this.ConvertedPath = convertedPath;
-                }
-            }
-
-            private static List<PathItemAndConvertedPath> PSv2FindMatches(PowerShellExecutionHelper helper, string path, bool shouldFullyQualifyPaths)
-            {
-                Diagnostics.Assert(!string.IsNullOrEmpty(path), "path should have a value");
-                var result = new List<PathItemAndConvertedPath>();
-
-                Exception exceptionThrown;
-                PowerShell powershell = helper.CurrentPowerShell;
-
-                // It's OK to use script, since tab completion is useless when the remote Win7 machine is in nolanguage mode
-                if (!shouldFullyQualifyPaths)
-                {
-                    powershell.AddScript(string.Format(
-                        CultureInfo.InvariantCulture,
-                        "& {{ trap {{ continue }} ; resolve-path {0} -Relative -WarningAction SilentlyContinue | ForEach-Object {{,($_,(get-item $_ -WarningAction SilentlyContinue),(convert-path $_ -WarningAction SilentlyContinue))}} }}",
-                        path));
-                }
-                else
-                {
-                    powershell.AddScript(string.Format(
-                        CultureInfo.InvariantCulture,
-                        "& {{ trap {{ continue }} ; resolve-path {0} -WarningAction SilentlyContinue | ForEach-Object {{,($_,(get-item $_ -WarningAction SilentlyContinue),(convert-path $_ -WarningAction SilentlyContinue))}} }}",
-                        path));
-                }
-
-                Collection<PSObject> paths = helper.ExecuteCurrentPowerShell(out exceptionThrown);
-                if (paths == null || paths.Count == 0)
-                {
-                    return null;
-                }
-
-                foreach (PSObject t in paths)
-                {
-                    var pathsArray = t.BaseObject as IList;
-                    if (pathsArray != null && pathsArray.Count == 3)
-                    {
-                        object objectPath = pathsArray[0];
-                        PSObject item = pathsArray[1] as PSObject;
-                        object convertedPath = pathsArray[1];
-
-                        if (objectPath == null || item == null || convertedPath == null)
-                        {
-                            continue;
-                        }
-
-                        result.Add(new PathItemAndConvertedPath(
-                                            PowerShellExecutionHelper.SafeToString(objectPath),
-                                            item,
-                                            PowerShellExecutionHelper.SafeToString(convertedPath)));
-                    }
-                }
-
-                if (result.Count == 0)
-                {
-                    return null;
-                }
-
-                result.Sort((PathItemAndConvertedPath x, PathItemAndConvertedPath y) =>
-                {
-                    Diagnostics.Assert(x.Path != null && y.Path != null, "SafeToString always returns a non-null string");
-                    return string.Compare(x.Path, y.Path, StringComparison.CurrentCultureIgnoreCase);
-                });
-
-                return result;
-            }
-
-            #endregion "Handle File Names"
-        }
-
-        /// <summary>
-        /// LastWordFinder implements the algorithm we use to search for the last word in a line of input taken from the console.
-        /// This class exists for legacy purposes only - V3 and forward uses a slightly different interface.
-        /// </summary>
-        private class LastWordFinder
-        {
-            internal static string FindLastWord(string sentence, out int replacementIndexOut, out char closingQuote)
-            {
-                return (new LastWordFinder(sentence)).FindLastWord(out replacementIndexOut, out closingQuote);
-            }
-
-            private LastWordFinder(string sentence)
-            {
-                _replacementIndex = 0;
-                Diagnostics.Assert(sentence != null, "need to provide an instance");
-                _sentence = sentence;
-            }
-
-            /// <summary>
-            /// Locates the last "word" in a string of text.  A word is a conguous sequence of characters that are not
-            /// whitespace, or a contiguous set grouped by single or double quotes.  Can be called by at most 1 thread at a time
-            /// per LastWordFinder instance.
-            /// </summary>
-            /// <param name="replacementIndexOut">
-            /// Receives the character index (from the front of the string) of the starting point of the located word, or 0 if
-            /// the word starts at the beginning of the sentence.
-            /// </param>
-            /// <param name="closingQuote">
-            /// Receives the quote character that would be needed to end the sentence with a balanced pair of quotes.  For
-            /// instance, if sentence is "foo then " is returned, if sentence if "foo" then nothing is returned, if sentence is
-            /// 'foo then ' is returned, if sentence is 'foo' then nothing is returned.
-            /// </param>
-            /// <returns>The last word located, or the empty string if no word could be found.</returns>
-            private string FindLastWord(out int replacementIndexOut, out char closingQuote)
-            {
-                bool inSingleQuote = false;
-                bool inDoubleQuote = false;
-
-                ReplacementIndex = 0;
-
-                for (_sentenceIndex = 0; _sentenceIndex < _sentence.Length; ++_sentenceIndex)
-                {
-                    Diagnostics.Assert(!(inSingleQuote && inDoubleQuote),
-                        "Can't be in both single and double quotes");
-
-                    char c = _sentence[_sentenceIndex];
-
-                    // there are 3 possibilities:
-                    // 1) a new sequence is starting,
-                    // 2) a sequence is ending, or
-                    // 3) a sequence is due to end on the next matching quote, end-of-sentence, or whitespace
-
-                    if (c == '\'')
-                    {
-                        HandleQuote(ref inSingleQuote, ref inDoubleQuote, c);
-                    }
-                    else if (c == '"')
-                    {
-                        HandleQuote(ref inDoubleQuote, ref inSingleQuote, c);
-                    }
-                    else if (c == '`')
-                    {
-                        Consume(c);
-                        if (++_sentenceIndex < _sentence.Length)
-                        {
-                            Consume(_sentence[_sentenceIndex]);
-                        }
-                    }
-                    else if (IsWhitespace(c))
-                    {
-                        if (_sequenceDueToEnd)
-                        {
-                            // we skipped a quote earlier, now end that sequence
-
-                            _sequenceDueToEnd = false;
-                            if (inSingleQuote)
-                            {
-                                inSingleQuote = false;
-                            }
-
-                            if (inDoubleQuote)
-                            {
-                                inDoubleQuote = false;
-                            }
-
-                            ReplacementIndex = _sentenceIndex + 1;
-                        }
-                        else if (inSingleQuote || inDoubleQuote)
-                        {
-                            // a sequence is started and we're in quotes
-
-                            Consume(c);
-                        }
-                        else
-                        {
-                            // no sequence is started, so ignore c
-
-                            ReplacementIndex = _sentenceIndex + 1;
-                        }
-                    }
-                    else
-                    {
-                        // a sequence is started and we're in it
-
-                        Consume(c);
-                    }
-                }
-
-                string result = new string(_wordBuffer, 0, _wordBufferIndex);
-
-                closingQuote = inSingleQuote ? '\'' : inDoubleQuote ? '"' : '\0';
-                replacementIndexOut = ReplacementIndex;
-                return result;
+                return new CommandCompletion(
+                    new Collection<CompletionResult>(completionResults),
+                    -1,
+                    replacementIndex,
+                    replacementLength);
             }
-
-            private void HandleQuote(ref bool inQuote, ref bool inOppositeQuote, char c)
-            {
-                if (inOppositeQuote)
-                {
-                    // a sequence is started, and we're in it.
-                    Consume(c);
-                    return;
-                }
-
-                if (inQuote)
-                {
-                    if (_sequenceDueToEnd)
-                    {
-                        // I've ended a sequence and am starting another; don't consume c, update replacementIndex
-                        ReplacementIndex = _sentenceIndex + 1;
-                    }
-
-                    _sequenceDueToEnd = !_sequenceDueToEnd;
-                }
-                else
-                {
-                    // I'm starting a sequence; don't consume c, update replacementIndex
-                    inQuote = true;
-                    ReplacementIndex = _sentenceIndex;
-                }
-            }
-
-            private void Consume(char c)
-            {
-                Diagnostics.Assert(_wordBuffer != null, "wordBuffer is not initialized");
-                Diagnostics.Assert(_wordBufferIndex < _wordBuffer.Length, "wordBufferIndex is out of range");
-
-                _wordBuffer[_wordBufferIndex++] = c;
-            }
-
-            private int ReplacementIndex
-            {
-                get
-                {
-                    return _replacementIndex;
-                }
-
-                set
-                {
-                    Diagnostics.Assert(value >= 0 && value < _sentence.Length + 1, "value out of range");
-
-                    // when we set the replacement index, that means we're also resetting our word buffer. we know wordBuffer
-                    // will never be longer than sentence.
-
-                    _wordBuffer = new char[_sentence.Length];
-                    _wordBufferIndex = 0;
-                    _replacementIndex = value;
-                }
-            }
-
-            private static bool IsWhitespace(char c)
-            {
-                return (c == ' ') || (c == '\x0009');
-            }
-
-            private readonly string _sentence;
-            private char[] _wordBuffer;
-            private int _wordBufferIndex;
-            private int _replacementIndex;
-            private int _sentenceIndex;
-            private bool _sequenceDueToEnd;
         }
 
         #endregion private methods
diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs
index f8961956a31..9c4a61a6833 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs
@@ -9,6 +9,8 @@
 using System.Reflection;
 using System.Text;
 using System.Text.RegularExpressions;
+using System.Management.Automation.Subsystem;
+using System.Management.Automation.Subsystem.DSC;
 
 namespace System.Management.Automation
 {
@@ -153,6 +155,19 @@ internal static AstAnalysisContext ExtractAstContext(Ast inputAst, Token[] input
                 ast => IsCursorWithinOrJustAfterExtent(positionForAstSearch, ast.Extent),
                 searchNestedScriptBlocks: true).ToList();
 
+            if (relatedAsts.Count == 0)
+            {
+                relatedAsts.Add(inputAst);
+            }
+
+            // If the last ast is an unnamed block that starts with "param" the cursor is inside a param block.
+            // To avoid adding special handling to all the completers that look at the last ast, we remove it here because it's not useful for completion.
+            if (relatedAsts[^1].Extent.Text.StartsWith("param", StringComparison.OrdinalIgnoreCase)
+                && relatedAsts[^1] is NamedBlockAst namedBlock && namedBlock.Unnamed)
+            {
+                relatedAsts.RemoveAt(relatedAsts.Count - 1);
+            }
+
             Diagnostics.Assert(tokenAtCursor == null || tokenBeforeCursor == null, "Only one of these tokens can be non-null");
 
             return new AstAnalysisContext(tokenAtCursor, tokenBeforeCursor, relatedAsts, replacementIndex);
@@ -173,10 +188,7 @@ private CompletionContext InitializeCompletionContext(TypeInferenceContext typeI
         {
             var astContext = ExtractAstContext(_ast, _tokens, _cursorPosition);
 
-            if (typeInferenceContext.CurrentTypeDefinitionAst == null)
-            {
-                typeInferenceContext.CurrentTypeDefinitionAst = Ast.GetAncestorTypeDefinitionAst(astContext.RelatedAsts.Last());
-            }
+            typeInferenceContext.CurrentTypeDefinitionAst ??= Ast.GetAncestorTypeDefinitionAst(astContext.RelatedAsts.Last());
 
             ExecutionContext executionContext = typeInferenceContext.ExecutionContext;
 
@@ -239,8 +251,7 @@ private static bool CompleteAgainstSwitchFile(Ast lastAst, Token tokenBeforeCurs
         {
             Tuple<Token, Ast> fileConditionTuple;
 
-            var errorStatement = lastAst as ErrorStatementAst;
-            if (errorStatement != null && errorStatement.Flags != null && errorStatement.Kind != null && tokenBeforeCursor != null &&
+            if (lastAst is ErrorStatementAst errorStatement && errorStatement.Flags is not null && errorStatement.Kind is not null && tokenBeforeCursor is not null &&
                 errorStatement.Kind.Kind.Equals(TokenKind.Switch) && errorStatement.Flags.TryGetValue("file", out fileConditionTuple))
             {
                 // Handle "switch -file <tab>"
@@ -250,24 +261,239 @@ private static bool CompleteAgainstSwitchFile(Ast lastAst, Token tokenBeforeCurs
             if (lastAst.Parent is CommandExpressionAst)
             {
                 // Handle "switch -file m<tab>" or "switch -file *.ps1<tab>"
-                if (!(lastAst.Parent.Parent is PipelineAst pipeline))
+                if (lastAst.Parent.Parent is not PipelineAst pipeline)
                 {
                     return false;
                 }
 
-                errorStatement = pipeline.Parent as ErrorStatementAst;
-                if (errorStatement == null || errorStatement.Kind == null || errorStatement.Flags == null)
+                if (pipeline.Parent is not ErrorStatementAst parentErrorStatement || parentErrorStatement.Kind is null || parentErrorStatement.Flags is null)
                 {
                     return false;
                 }
 
-                return (errorStatement.Kind.Kind.Equals(TokenKind.Switch) &&
-                        errorStatement.Flags.TryGetValue("file", out fileConditionTuple) && fileConditionTuple.Item2 == pipeline);
+                return (parentErrorStatement.Kind.Kind.Equals(TokenKind.Switch) &&
+                        parentErrorStatement.Flags.TryGetValue("file", out fileConditionTuple) && fileConditionTuple.Item2 == pipeline);
             }
 
             return false;
         }
 
+        /// <summary>
+        /// Check if we should complete parameter names for switch cases on $PSBoundParameters.Keys
+        /// </summary>
+        private static List<CompletionResult> CompleteAgainstSwitchCaseCondition(CompletionContext completionContext)
+        {
+            var lastAst = completionContext.RelatedAsts.Last();
+
+            PipelineAst conditionPipeline = null;
+            Ast switchAst = null;
+
+            // Check if we're in a switch statement (complete) or error statement (incomplete switch)
+            if (lastAst.Parent is SwitchStatementAst switchStatementAst)
+            {
+                // Verify that the lastAst is one of the clause conditions (not in the body)
+                bool isClauseCondition = switchStatementAst.Clauses.Any(clause => clause.Item1 == lastAst);
+
+                if (!isClauseCondition)
+                {
+                    return null;
+                }
+
+                conditionPipeline = switchStatementAst.Condition as PipelineAst;
+                switchAst = switchStatementAst;
+            }
+            else
+            {
+                // Check for incomplete switch parsed as ErrorStatementAst
+                if (lastAst.Parent is not ErrorStatementAst errorStatementAst || errorStatementAst.Kind is null ||
+                    errorStatementAst.Kind.Kind != TokenKind.Switch)
+                {
+                    return null;
+                }
+
+                // For ErrorStatementAst, the case value is in Bodies, condition is in Conditions
+                bool isInBodies = errorStatementAst.Bodies != null && errorStatementAst.Bodies.Any(body => body == lastAst);
+
+                if (!isInBodies)
+                {
+                    return null;
+                }
+
+                // Get the condition from ErrorStatementAst.Conditions
+                if (errorStatementAst.Conditions != null && errorStatementAst.Conditions.Count > 0)
+                {
+                    conditionPipeline = errorStatementAst.Conditions[0] as PipelineAst;
+                }
+                switchAst = errorStatementAst;
+            }
+
+            if (conditionPipeline == null || conditionPipeline.PipelineElements.Count != 1)
+            {
+                return null;
+            }
+
+            if (conditionPipeline.PipelineElements[0] is not CommandExpressionAst commandExpressionAst)
+            {
+                return null;
+            }
+
+            // Check if the expression is a member access on $PSBoundParameters.Keys
+            if (commandExpressionAst.Expression is not MemberExpressionAst memberExpressionAst)
+            {
+                return null;
+            }
+
+            // Check if the target is $PSBoundParameters
+            if (memberExpressionAst.Expression is not VariableExpressionAst variableExpressionAst ||
+                !variableExpressionAst.VariablePath.UserPath.Equals("PSBoundParameters", StringComparison.OrdinalIgnoreCase))
+            {
+                return null;
+            }
+
+            // Check if the member is "Keys"
+            if (memberExpressionAst.Member is not StringConstantExpressionAst memberNameAst ||
+                !memberNameAst.Value.Equals("Keys", StringComparison.OrdinalIgnoreCase))
+            {
+                return null;
+            }
+
+            // Find the nearest param block by traversing up the AST
+            var paramBlockAst = FindNearestParamBlock(switchAst.Parent);
+
+            if (paramBlockAst == null || paramBlockAst.Parameters.Count == 0)
+            {
+                return null;
+            }
+
+            // Generate completion results from parameter names
+            var wordToComplete = completionContext.WordToComplete ?? string.Empty;
+            return CreateParameterCompletionResults(paramBlockAst, wordToComplete);
+        }
+
+        /// <summary>
+        /// Check if we should complete parameter names for $PSBoundParameters access patterns
+        /// Supports: $PSBoundParameters.ContainsKey('...'), $PSBoundParameters['...'], $PSBoundParameters.Remove('...')
+        /// </summary>
+        private static List<CompletionResult> CompleteAgainstPSBoundParametersAccess(CompletionContext completionContext)
+        {
+            var lastAst = completionContext.RelatedAsts.Last();
+
+            // Must be a string constant
+            if (lastAst is not StringConstantExpressionAst stringAst)
+            {
+                return null;
+            }
+
+            ExpressionAst targetAst = null;
+
+            // Check for method invocation: $PSBoundParameters.ContainsKey('...') or $PSBoundParameters.Remove('...')
+            if (lastAst.Parent is InvokeMemberExpressionAst invokeMemberAst)
+            {
+                if (invokeMemberAst.Member is StringConstantExpressionAst memberName &&
+                    (memberName.Value.Equals("ContainsKey", StringComparison.OrdinalIgnoreCase) ||
+                     memberName.Value.Equals("Remove", StringComparison.OrdinalIgnoreCase)))
+                {
+                    targetAst = invokeMemberAst.Expression;
+                }
+            }
+            // Check for indexer: $PSBoundParameters['...']
+            else if (lastAst.Parent is IndexExpressionAst indexAst)
+            {
+                targetAst = indexAst.Target;
+            }
+
+            if (targetAst is null)
+            {
+                return null;
+            }
+
+            // Check if target is $PSBoundParameters
+            if (targetAst is not VariableExpressionAst variableAst ||
+                !variableAst.VariablePath.UserPath.Equals("PSBoundParameters", StringComparison.OrdinalIgnoreCase))
+            {
+                return null;
+            }
+
+            // Find the nearest param block
+            var paramBlockAst = FindNearestParamBlock(lastAst.Parent);
+
+            if (paramBlockAst == null || paramBlockAst.Parameters.Count == 0)
+            {
+                return null;
+            }
+
+            // Generate completion results from parameter names
+            var wordToComplete = completionContext.WordToComplete ?? string.Empty;
+
+            // Determine quote style based on the string constant type
+            string quoteChar = string.Empty;
+            if (stringAst.StringConstantType == StringConstantType.SingleQuoted)
+            {
+                quoteChar = "'";
+            }
+            else if (stringAst.StringConstantType == StringConstantType.DoubleQuoted)
+            {
+                quoteChar = "\"";
+            }
+
+            return CreateParameterCompletionResults(paramBlockAst, wordToComplete, quoteChar);
+        }
+
+        /// <summary>
+        /// Finds the nearest ParamBlockAst by traversing up the AST hierarchy.
+        /// </summary>
+        /// <param name="startAst">The AST node to start searching from.</param>
+        /// <returns>The nearest ParamBlockAst if found; otherwise, null.</returns>
+        private static ParamBlockAst FindNearestParamBlock(Ast startAst)
+        {
+            Ast current = startAst;
+            while (current != null)
+            {
+                if (current is FunctionDefinitionAst functionDefinitionAst)
+                {
+                    return functionDefinitionAst.Body?.ParamBlock;
+                }
+                else if (current is ScriptBlockAst scriptBlockAst)
+                {
+                    var paramBlock = scriptBlockAst.ParamBlock;
+                    if (paramBlock != null)
+                    {
+                        return paramBlock;
+                    }
+                }
+
+                current = current.Parent;
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// Creates completion results from parameter names with optional quote wrapping.
+        /// </summary>
+        /// <param name="paramBlockAst">The parameter block containing parameters to complete.</param>
+        /// <param name="wordToComplete">The partial word to match against parameter names.</param>
+        /// <param name="quoteChar">Optional quote character to wrap completion text (empty string for no quotes).</param>
+        /// <returns>A list of completion results, or null if no matches found.</returns>
+        private static List<CompletionResult> CreateParameterCompletionResults(
+            ParamBlockAst paramBlockAst,
+            string wordToComplete,
+            string quoteChar = "")
+        {
+            var result = paramBlockAst.Parameters
+                .Select(parameter => parameter.Name.VariablePath.UserPath)
+                .Where(parameterName => parameterName.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
+                .Select(parameterName =>
+                    new CompletionResult(
+                        quoteChar + parameterName + quoteChar,
+                        parameterName,
+                        CompletionResultType.ParameterValue,
+                        parameterName))
+                .ToList();
+
+            return result.Count > 0 ? result : null;
+        }
+
         private static bool CompleteOperator(Token tokenAtCursor, Ast lastAst)
         {
             if (tokenAtCursor.Kind == TokenKind.Minus)
@@ -375,7 +601,10 @@ internal List<CompletionResult> GetResults(PowerShell powerShell, out int replac
                     completionContext.ExecutionContext.LanguageMode = PSLanguageMode.ConstrainedLanguage;
                 }
 
-                return GetResultHelper(completionContext, out replacementIndex, out replacementLength, false);
+                List<CompletionResult> results = GetResultHelper(completionContext, out replacementIndex, out replacementLength);
+                CompletionCompleters.RemoveLastNullCompletionResult(results);
+
+                return results;
             }
             finally
             {
@@ -386,7 +615,7 @@ internal List<CompletionResult> GetResults(PowerShell powerShell, out int replac
             }
         }
 
-        internal List<CompletionResult> GetResultHelper(CompletionContext completionContext, out int replacementIndex, out int replacementLength, bool isQuotedString)
+        internal List<CompletionResult> GetResultHelper(CompletionContext completionContext, out int replacementIndex, out int replacementLength)
         {
             replacementIndex = -1;
             replacementLength = -1;
@@ -414,14 +643,20 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                     case TokenKind.Generic:
                     case TokenKind.MinusMinus: // for native commands '--'
                     case TokenKind.Identifier:
-                        result = GetResultForIdentifier(completionContext, ref replacementIndex, ref replacementLength, isQuotedString);
+                        if (!tokenAtCursor.TokenFlags.HasFlag(TokenFlags.TypeName))
+                        {
+                            result = CompleteUsingKeywords(completionContext.CursorPosition.Offset, _tokens, ref replacementIndex, ref replacementLength);
+                            if (result is not null)
+                            {
+                                return result;
+                            }
+
+                            result = GetResultForIdentifier(completionContext, ref replacementIndex, ref replacementLength);
+                        }
+
                         break;
 
                     case TokenKind.Parameter:
-                        // When it's the content of a quoted string, we only handle variable/member completion
-                        if (isQuotedString)
-                            break;
-
                         completionContext.WordToComplete = tokenAtCursor.Text;
                         var cmdAst = lastAst.Parent as CommandAst;
                         if (lastAst is StringConstantExpressionAst && cmdAst != null && cmdAst.CommandElements.Count == 1)
@@ -464,16 +699,13 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                     case TokenKind.QuestionDot:
                         replacementIndex += tokenAtCursor.Text.Length;
                         replacementLength = 0;
-                        result = CompletionCompleters.CompleteMember(completionContext, @static: tokenAtCursor.Kind == TokenKind.ColonColon);
+                        result = CompletionCompleters.CompleteMember(completionContext, @static: tokenAtCursor.Kind == TokenKind.ColonColon, ref replacementLength);
+
                         break;
 
                     case TokenKind.Comment:
-                        // When it's the content of a quoted string, we only handle variable/member completion
-                        if (isQuotedString)
-                            break;
-
                         completionContext.WordToComplete = tokenAtCursor.Text;
-                        result = CompletionCompleters.CompleteComment(completionContext);
+                        result = CompletionCompleters.CompleteComment(completionContext, ref replacementIndex, ref replacementLength);
                         break;
 
                     case TokenKind.StringExpandable:
@@ -488,8 +720,30 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                 return completions;
                             }
                         }
+                        else if (lastAst.Parent is BinaryExpressionAst binaryExpression)
+                        {
+                            completionContext.WordToComplete = (tokenAtCursor as StringToken).Value;
+                            result = CompletionCompleters.CompleteComparisonOperatorValues(completionContext, binaryExpression.Left);
+                            if (result.Count > 0)
+                            {
+                                return result;
+                            }
+                        }
+                        else if (lastAst.Parent is IndexExpressionAst indexExpressionAst)
+                        {
+                            // Handles quoted string inside index expression like: $PSVersionTable["<Tab>"]
+                            completionContext.WordToComplete = (tokenAtCursor as StringToken).Value;
+                            // Check for $PSBoundParameters indexer first
+                            var psBoundResult = CompleteAgainstPSBoundParametersAccess(completionContext);
+                            if (psBoundResult != null && psBoundResult.Count > 0)
+                            {
+                                return psBoundResult;
+                            }
+
+                            return CompletionCompleters.CompleteIndexExpression(completionContext, indexExpressionAst.Target);
+                        }
 
-                        result = GetResultForString(completionContext, ref replacementIndex, ref replacementLength, isQuotedString);
+                        result = GetResultForString(completionContext, ref replacementIndex, ref replacementLength);
                         break;
 
                     case TokenKind.RBracket:
@@ -517,9 +771,14 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                         break;
 
                     case TokenKind.Comma:
-                        // Handle array elements such as dir .\cd,<tab> || dir -Path: .\cd,<tab>
-                        if (lastAst is ErrorExpressionAst &&
-                            (lastAst.Parent is CommandAst || lastAst.Parent is CommandParameterAst))
+                        // Handle array elements such as the followings:
+                        //  - `dir .\cd,<tab>`
+                        //  - `dir -Path: .\cd,<tab>`
+                        //  - `dir .\abc.txt,<tab> -File`
+                        //  - `dir -Path .\abc.txt,<tab> -File`
+                        //  - `dir -Path: .\abc.txt,<tab> -File`
+                        if (lastAst is ErrorExpressionAst or ArrayLiteralAst &&
+                            lastAst.Parent is CommandAst or CommandParameterAst)
                         {
                             replacementIndex += replacementLength;
                             replacementLength = 0;
@@ -544,8 +803,7 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                             //     {
                             //         DependsOn=@('[user]x',|)
                             //
-                            bool unused;
-                            result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out unused);
+                            result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out _);
                         }
 
                         break;
@@ -659,6 +917,19 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                     return completions;
                                 }
                             }
+                            else if (lastAst is VariableExpressionAst && lastAst.Parent is ParameterAst paramAst && paramAst.Attributes.Count > 0)
+                            {
+                                foreach (AttributeBaseAst attribute in paramAst.Attributes)
+                                {
+                                    if (IsCursorWithinOrJustAfterExtent(_cursorPosition, attribute.Extent))
+                                    {
+                                        completionContext.ReplacementIndex = replacementIndex += tokenAtCursor.Text.Length;
+                                        completionContext.ReplacementLength = replacementLength = 0;
+                                        result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                                        break;
+                                    }
+                                }
+                            }
                             else
                             {
                                 // Handle scenarios such as 'configuration foo { File ab { Attributes ='
@@ -673,13 +944,82 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                 //         DependsOn=@(|)
                                 //         DependsOn=(|
                                 //
-                                bool unused;
-                                result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out unused);
+                                result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out _);
                             }
 
                             break;
                         }
+
+                    case TokenKind.Format:
+                    case TokenKind.Not:
+                    case TokenKind.Bnot:
+                    case TokenKind.And:
+                    case TokenKind.Or:
+                    case TokenKind.Xor:
+                    case TokenKind.Band:
+                    case TokenKind.Bor:
+                    case TokenKind.Bxor:
+                    case TokenKind.Join:
+                    case TokenKind.Ieq:
+                    case TokenKind.Ine:
+                    case TokenKind.Ige:
+                    case TokenKind.Igt:
+                    case TokenKind.Ilt:
+                    case TokenKind.Ile:
+                    case TokenKind.Ilike:
+                    case TokenKind.Inotlike:
+                    case TokenKind.Imatch:
+                    case TokenKind.Inotmatch:
+                    case TokenKind.Ireplace:
+                    case TokenKind.Icontains:
+                    case TokenKind.Inotcontains:
+                    case TokenKind.Iin:
+                    case TokenKind.Inotin:
+                    case TokenKind.Isplit:
+                    case TokenKind.Ceq:
+                    case TokenKind.Cne:
+                    case TokenKind.Cge:
+                    case TokenKind.Cgt:
+                    case TokenKind.Clt:
+                    case TokenKind.Cle:
+                    case TokenKind.Clike:
+                    case TokenKind.Cnotlike:
+                    case TokenKind.Cmatch:
+                    case TokenKind.Cnotmatch:
+                    case TokenKind.Creplace:
+                    case TokenKind.Ccontains:
+                    case TokenKind.Cnotcontains:
+                    case TokenKind.Cin:
+                    case TokenKind.Cnotin:
+                    case TokenKind.Csplit:
+                    case TokenKind.Is:
+                    case TokenKind.IsNot:
+                    case TokenKind.As:
+                    case TokenKind.Shl:
+                    case TokenKind.Shr:
+                        result = CompletionCompleters.CompleteOperator(tokenAtCursor.Text);
+                        break;
+
+                    case TokenKind.LBracket:
+                        if (lastAst.Parent is IndexExpressionAst indexExpression)
+                        {
+                            // Handles index expression with cursor right after lbracket like: $PSVersionTable[<Tab>]
+                            completionContext.WordToComplete = string.Empty;
+                            result = CompletionCompleters.CompleteIndexExpression(completionContext, indexExpression.Target);
+                            if (result.Count > 0)
+                            {
+                                replacementIndex++;
+                                replacementLength--;
+                            }
+                        }
+                        break;
                     default:
+                        result = CompleteUsingKeywords(completionContext.CursorPosition.Offset, _tokens, ref replacementIndex, ref replacementLength);
+                        if (result is not null)
+                        {
+                            return result;
+                        }
+
                         if ((tokenAtCursor.TokenFlags & TokenFlags.Keyword) != 0)
                         {
                             completionContext.WordToComplete = tokenAtCursor.Text;
@@ -728,8 +1068,7 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
 
                 bool skipAutoCompleteForCommandCall = isCursorLineEmpty && !isLineContinuationBeforeCursor;
                 bool lastAstIsExpressionAst = lastAst is ExpressionAst;
-                if (!isQuotedString &&
-                    !skipAutoCompleteForCommandCall &&
+                if (!skipAutoCompleteForCommandCall &&
                     (lastAst is CommandParameterAst || lastAst is CommandAst ||
                     (lastAstIsExpressionAst && lastAst.Parent is CommandAst) ||
                     (lastAstIsExpressionAst && lastAst.Parent is CommandParameterAst) ||
@@ -768,7 +1107,7 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                         replacementLength = completionContext.ReplacementLength;
                     }
                 }
-                else if (!isQuotedString)
+                else
                 {
                     //
                     // Handle completion of empty line within configuration statement
@@ -803,6 +1142,75 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                 result = GetResultForIdentifierInConfiguration(completionContext, configAst, keywordAst, out matched);
                             }
                         }
+
+                        // Handles following scenario where user is tab completing a member on an empty line:
+                        // "Hello".
+                        // <Tab>
+                        if ((result is null || result.Count == 0) && tokenBeforeCursor is not null)
+                        {
+                            switch (completionContext.TokenBeforeCursor.Kind)
+                            {
+
+                                case TokenKind.Dot:
+                                case TokenKind.ColonColon:
+                                case TokenKind.QuestionDot:
+                                    replacementIndex = cursor.Offset;
+                                    replacementLength = 0;
+                                    result = CompletionCompleters.CompleteMember(completionContext, @static: completionContext.TokenBeforeCursor.Kind == TokenKind.ColonColon, ref replacementLength);
+                                    break;
+
+                                case TokenKind.LParen:
+                                case TokenKind.Comma:
+                                    if (lastAst is AttributeAst)
+                                    {
+                                        result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                                    }
+
+                                    if (lastAst is VariableExpressionAst && lastAst.Parent is ParameterAst paramAst && paramAst.Attributes.Count > 0)
+                                    {
+                                        foreach (AttributeBaseAst attribute in paramAst.Attributes)
+                                        {
+                                            if (IsCursorWithinOrJustAfterExtent(_cursorPosition, attribute.Extent))
+                                            {
+                                                result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                                                break;
+                                            }
+                                        }
+                                    }
+                                    break;
+
+                                case TokenKind.Ieq:
+                                case TokenKind.Ceq:
+                                case TokenKind.Ine:
+                                case TokenKind.Cne:
+                                case TokenKind.Ilike:
+                                case TokenKind.Clike:
+                                case TokenKind.Inotlike:
+                                case TokenKind.Cnotlike:
+                                case TokenKind.Imatch:
+                                case TokenKind.Cmatch:
+                                case TokenKind.Inotmatch:
+                                case TokenKind.Cnotmatch:
+                                    if (lastAst is BinaryExpressionAst binaryExpression)
+                                    {
+                                        completionContext.WordToComplete = string.Empty;
+                                        result = CompletionCompleters.CompleteComparisonOperatorValues(completionContext, binaryExpression.Left);
+                                    }
+                                    break;
+
+                                case TokenKind.LBracket:
+                                    if (lastAst.Parent is IndexExpressionAst indexExpression)
+                                    {
+                                        // Handles index expression where cursor is on a new line after the lbracket like: $PSVersionTable[\n<Tab>]
+                                        completionContext.WordToComplete = string.Empty;
+                                        result = CompletionCompleters.CompleteIndexExpression(completionContext, indexExpression.Target);
+                                    }
+                                    break;
+
+                                default:
+                                    break;
+                            }
+                        }
                     }
                     else if (completionContext.TokenAtCursor == null)
                     {
@@ -836,7 +1244,7 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                                 break;
                                             }
                                         }
-                                        
+
                                         if (lastAst is AttributeAst)
                                         {
                                             completionContext.ReplacementLength = replacementLength = 0;
@@ -844,10 +1252,80 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                                             break;
                                         }
 
-                                        bool unused;
-                                        result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out unused);
+                                        if (lastAst is VariableExpressionAst && lastAst.Parent is ParameterAst paramAst && paramAst.Attributes.Count > 0)
+                                        {
+                                            foreach (AttributeBaseAst attribute in paramAst.Attributes)
+                                            {
+                                                if (IsCursorWithinOrJustAfterExtent(_cursorPosition, attribute.Extent))
+                                                {
+                                                    completionContext.ReplacementLength = replacementLength = 0;
+                                                    result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                                                    break;
+                                                }
+                                            }
+
+                                            break;
+                                        }
+
+                                        result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out _);
+                                        break;
+                                    }
+
+                                case TokenKind.Break:
+                                case TokenKind.Continue:
+                                    {
+                                        if ((lastAst is BreakStatementAst breakStatement && breakStatement.Label is null)
+                                            || (lastAst is ContinueStatementAst continueStatement && continueStatement.Label is null))
+                                        {
+                                            result = CompleteLoopLabel(completionContext);
+                                        }
                                         break;
                                     }
+
+                                case TokenKind.Using:
+                                    return CompleteUsingKeywords(completionContext.CursorPosition.Offset, _tokens, ref replacementIndex, ref replacementLength);
+
+                                case TokenKind.Dot:
+                                case TokenKind.ColonColon:
+                                case TokenKind.QuestionDot:
+                                    // Handles following scenario with whitespace after member access token: "Hello". <Tab>
+                                    replacementIndex = cursor.Offset;
+                                    replacementLength = 0;
+                                    result = CompletionCompleters.CompleteMember(completionContext, @static: tokenBeforeCursor.Kind == TokenKind.ColonColon, ref replacementLength);
+                                    if (result is not null && result.Count > 0)
+                                    {
+                                        return result;
+                                    }
+                                    break;
+
+                                case TokenKind.Ieq:
+                                case TokenKind.Ceq:
+                                case TokenKind.Ine:
+                                case TokenKind.Cne:
+                                case TokenKind.Ilike:
+                                case TokenKind.Clike:
+                                case TokenKind.Inotlike:
+                                case TokenKind.Cnotlike:
+                                case TokenKind.Imatch:
+                                case TokenKind.Cmatch:
+                                case TokenKind.Inotmatch:
+                                case TokenKind.Cnotmatch:
+                                    if (lastAst is BinaryExpressionAst binaryExpression)
+                                    {
+                                        completionContext.WordToComplete = string.Empty;
+                                        result = CompletionCompleters.CompleteComparisonOperatorValues(completionContext, binaryExpression.Left);
+                                    }
+                                    break;
+
+                                case TokenKind.LBracket:
+                                    if (lastAst.Parent is IndexExpressionAst indexExpression)
+                                    {
+                                        // Handles index expression with whitespace between lbracket and cursor like: $PSVersionTable[ <Tab>]
+                                        completionContext.WordToComplete = string.Empty;
+                                        result = CompletionCompleters.CompleteIndexExpression(completionContext, indexExpression.Target);
+                                    }
+                                    break;
+
                                 default:
                                     break;
                             }
@@ -902,6 +1380,11 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                     }
                 }
 
+                if (typeNameToComplete is null && tokenAtCursor?.TokenFlags.HasFlag(TokenFlags.TypeName) == true)
+                {
+                    typeNameToComplete = new TypeName(tokenAtCursor.Extent, tokenAtCursor.Text);
+                }
+
                 if (typeNameToComplete != null)
                 {
                     // See if the typename to complete really is within the typename, and if so, which one, in the case of generics.
@@ -909,13 +1392,19 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
                     replacementIndex = typeNameToComplete.Extent.StartOffset;
                     replacementLength = typeNameToComplete.Extent.EndOffset - replacementIndex;
                     completionContext.WordToComplete = typeNameToComplete.FullName;
-                    result = CompletionCompleters.CompleteType(completionContext);
+                    return CompletionCompleters.CompleteType(completionContext);
                 }
             }
 
             if (result == null || result.Count == 0)
             {
                 result = GetResultForHashtable(completionContext);
+                // Handles the following scenario: [ipaddress]@{Address=""; <Tab> }
+                if (result?.Count > 0)
+                {
+                    replacementIndex = completionContext.CursorPosition.Offset;
+                    replacementLength = 0;
+                }
             }
 
             if (result == null || result.Count == 0)
@@ -938,59 +1427,56 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
         // Helper method to auto complete hashtable key
         private static List<CompletionResult> GetResultForHashtable(CompletionContext completionContext)
         {
-            var lastAst = completionContext.RelatedAsts.Last();
-            HashtableAst tempHashtableAst = null;
-            IScriptPosition cursor = completionContext.CursorPosition;
-            var hashTableAst = lastAst as HashtableAst;
-            if (hashTableAst != null)
+            Ast lastRelatedAst = null;
+            var cursorPosition = completionContext.CursorPosition;
+
+            // Enumeration is used over the LastAst pattern because empty lines following a key-value pair will set LastAst to the value.
+            // Example:
+            // @{
+            //     Key1="Value1"
+            //     <Tab>
+            // }
+            // In this case the last 3 Asts will be StringConstantExpression, CommandExpression, and Pipeline instead of the expected Hashtable
+            for (int i = completionContext.RelatedAsts.Count - 1; i >= 0; i--)
+            {
+                Ast ast = completionContext.RelatedAsts[i];
+                if (cursorPosition.Offset >= ast.Extent.StartOffset && cursorPosition.Offset <= ast.Extent.EndOffset)
+                {
+                    lastRelatedAst = ast;
+                    break;
+                }
+            }
+
+            if (lastRelatedAst is HashtableAst hashtableAst)
             {
-                // Check if the cursor within the hashtable
-                if (cursor.Offset < hashTableAst.Extent.EndOffset)
+                // Cursor is just after the hashtable: @{}<Tab>
+                if (completionContext.TokenAtCursor is not null && completionContext.TokenAtCursor.Kind == TokenKind.RCurly)
                 {
-                    tempHashtableAst = hashTableAst;
+                    return null;
                 }
-                else if (cursor.Offset == hashTableAst.Extent.EndOffset)
+
+                bool cursorIsWithinOrOnSameLineAsKeypair = false;
+                foreach (var pair in hashtableAst.KeyValuePairs)
                 {
-                    // Exclude the scenario that cursor at the end of hashtable, i.e. after '}'
-                    if (completionContext.TokenAtCursor == null ||
-                        completionContext.TokenAtCursor.Kind != TokenKind.RCurly)
+                    if (cursorPosition.Offset >= pair.Item1.Extent.StartOffset
+                        && (cursorPosition.Offset <= pair.Item2.Extent.EndOffset || cursorPosition.LineNumber == pair.Item2.Extent.EndLineNumber))
                     {
-                        tempHashtableAst = hashTableAst;
+                        cursorIsWithinOrOnSameLineAsKeypair = true;
+                        break;
                     }
                 }
-            }
-            else
-            {
-                // Handle property completion on a blank line for DynamicKeyword statement
-                Ast lastChildofHashtableAst;
-                hashTableAst = Ast.GetAncestorHashtableAst(lastAst, out lastChildofHashtableAst);
 
-                // Check if the hashtable within a DynamicKeyword statement
-                if (hashTableAst != null)
+                if (cursorIsWithinOrOnSameLineAsKeypair)
                 {
-                    var keywordAst = Ast.GetAncestorAst<DynamicKeywordStatementAst>(hashTableAst);
-                    if (keywordAst != null)
+                    var tokenBeforeOrAtCursor = completionContext.TokenBeforeCursor ?? completionContext.TokenAtCursor;
+                    if (tokenBeforeOrAtCursor.Kind != TokenKind.Semi)
                     {
-                        // Handle only empty line
-                        if (string.IsNullOrWhiteSpace(cursor.Line))
-                        {
-                            // Check if the cursor outside of last child of hashtable and within the hashtable
-                            if (cursor.Offset > lastChildofHashtableAst.Extent.EndOffset &&
-                                cursor.Offset <= hashTableAst.Extent.EndOffset)
-                            {
-                                tempHashtableAst = hashTableAst;
-                            }
-                        }
+                        return null;
                     }
                 }
-            }
-
-            hashTableAst = tempHashtableAst;
-            if (hashTableAst != null)
-            {
                 completionContext.ReplacementIndex = completionContext.CursorPosition.Offset;
                 completionContext.ReplacementLength = 0;
-                return CompletionCompleters.CompleteHashtableKey(completionContext, hashTableAst);
+                return CompletionCompleters.CompleteHashtableKey(completionContext, hashtableAst);
             }
 
             return null;
@@ -1054,7 +1540,7 @@ private static string GetFirstLineSubString(string stringToComplete, out bool ha
             hasNewLine = false;
             if (!string.IsNullOrEmpty(stringToComplete))
             {
-                var index = stringToComplete.IndexOfAny(Utils.Separators.CrLf);
+                var index = stringToComplete.AsSpan().IndexOfAny('\r', '\n');
                 if (index >= 0)
                 {
                     stringToComplete = stringToComplete.Substring(0, index);
@@ -1195,6 +1681,121 @@ private static bool TryGetTypeConstraintOnVariable(
             return typeConstraint != null || setConstraint != null;
         }
 
+        private static List<CompletionResult> CompletePropertyAssignment(MemberExpressionAst memberExpression, CompletionContext context)
+        {
+            if (SafeExprEvaluator.TrySafeEval(memberExpression, context.ExecutionContext, out var evalValue))
+            {
+                if (evalValue is not null)
+                {
+                    Type type = evalValue.GetType();
+                    if (type.IsEnum)
+                    {
+                        return GetResultForEnum(type, context);
+                    }
+
+                    return null;
+                }
+            }
+
+            _ = TryGetInferredCompletionsForAssignment(memberExpression, context, out List<CompletionResult> result);
+            return result;
+        }
+
+        private static bool TryGetInferredCompletionsForAssignment(Ast expression, CompletionContext context, out List<CompletionResult> result)
+        {
+            result = null;
+            IList<PSTypeName> inferredTypes;
+            if (expression.Parent is ConvertExpressionAst convertExpression)
+            {
+                inferredTypes = new PSTypeName[] { new(convertExpression.Type.TypeName) };
+            }
+            else if (expression is MemberExpressionAst)
+            {
+                inferredTypes = AstTypeInference.InferTypeOf(expression);
+            }
+            else if (expression is VariableExpressionAst varExpression)
+            {
+                PSTypeName typeConstraint = CompletionCompleters.GetLastDeclaredTypeConstraint(varExpression, context.TypeInferenceContext);
+                if (typeConstraint is null)
+                {
+                    return false;
+                }
+
+                inferredTypes = new PSTypeName[] { typeConstraint };
+            }
+            else
+            {
+                return false;
+            }
+
+            if (inferredTypes.Count == 0)
+            {
+                return false;
+            }
+
+            var values = new SortedSet<string>();
+            foreach (PSTypeName type in inferredTypes)
+            {
+                Type loadedType = type.Type;
+                if (loadedType is not null)
+                {
+                    if (loadedType.IsEnum)
+                    {
+                        foreach (string value in Enum.GetNames(loadedType))
+                        {
+                            _ = values.Add(value);
+                        }
+                    }
+                }
+                else if (type is not null && type.TypeDefinitionAst.IsEnum)
+                {
+                    foreach (MemberAst member in type.TypeDefinitionAst.Members)
+                    {
+                        if (member is PropertyMemberAst property)
+                        {
+                            _ = values.Add(property.Name);
+                        }
+                    }
+                }
+            }
+
+            string wordToComplete;
+            if (string.IsNullOrEmpty(context.WordToComplete))
+            {
+                if (context.TokenAtCursor is not null && context.TokenAtCursor.Kind != TokenKind.Equals)
+                {
+                    wordToComplete = context.TokenAtCursor.Text + "*";
+                }
+                else
+                {
+                    wordToComplete = "*";
+                }
+            }
+            else
+            {
+                wordToComplete = context.WordToComplete + "*";
+            }
+
+            result = new List<CompletionResult>();
+            var pattern = new WildcardPattern(wordToComplete, WildcardOptions.IgnoreCase);
+            foreach (string name in values)
+            {
+                string quotedName = GetQuotedString(name, context);
+                if (pattern.IsMatch(quotedName))
+                {
+                    result.Add(new CompletionResult(quotedName, name, CompletionResultType.Property, name));
+                }
+            }
+
+            if (result.Count == 0)
+            {
+                result = null;
+                return false;
+            }
+
+            return true;
+        }
+
         private static bool TryGetCompletionsForVariableAssignment(
             CompletionContext completionContext,
             AssignmentStatementAst assignmentAst,
@@ -1226,6 +1827,12 @@ bool TryGetResultForSet(Type typeConstraint, ValidateSetAttribute setConstraint,
                 return false;
             }
 
+            if (assignmentAst.Left is MemberExpressionAst member)
+            {
+                completions = CompletePropertyAssignment(member, completionContext);
+                return completions is not null;
+            }
+
             completions = null;
 
             // Try to get the variable from the assignment, plus any type constraint on it
@@ -1255,7 +1862,7 @@ bool TryGetResultForSet(Type typeConstraint, ValidateSetAttribute setConstraint,
             // If the assignment itself was unconstrained, the variable still might be
             if (!TryGetTypeConstraintOnVariable(completionContext, variableAst.VariablePath.UserPath, out typeConstraint, out setConstraint))
             {
-                return false;
+                return TryGetInferredCompletionsForAssignment(variableAst, completionContext, out completions);
             }
 
             // Again try the [ValidateSet()] constraint first
@@ -1441,7 +2048,7 @@ private static List<CompletionResult> GetResultForEnumPropertyValueOfDSCResource
                                 Diagnostics.Assert(isCursorInString || (!hasNewLine), "hasNoQuote and hasNewLine cannot be true at the same time");
                                 if (property.ValueMap != null && property.ValueMap.Count > 0)
                                 {
-                                    IEnumerable<string> orderedValues = property.ValueMap.Keys.OrderBy(x => x).Where(v => !existingValues.Contains(v, StringComparer.OrdinalIgnoreCase));
+                                    IEnumerable<string> orderedValues = property.ValueMap.Keys.Order().Where(v => !existingValues.Contains(v, StringComparer.OrdinalIgnoreCase));
                                     var matchedResults = orderedValues.Where(v => wildcardPattern.IsMatch(v));
                                     if (matchedResults == null || !matchedResults.Any())
                                     {
@@ -1523,111 +2130,65 @@ private static List<CompletionResult> GetResultForEnumPropertyValueOfDSCResource
             return result;
         }
 
-        private List<CompletionResult> GetResultForString(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength, bool isQuotedString)
+        private static List<CompletionResult> GetResultForString(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength)
         {
-            // When it's the content of a quoted string, we only handle variable/member completion
-            if (isQuotedString) { return null; }
-
-            var tokenAtCursor = completionContext.TokenAtCursor;
             var lastAst = completionContext.RelatedAsts.Last();
-
-            List<CompletionResult> result = null;
             var expandableString = lastAst as ExpandableStringExpressionAst;
             var constantString = lastAst as StringConstantExpressionAst;
             if (constantString == null && expandableString == null) { return null; }
 
             string strValue = constantString != null ? constantString.Value : expandableString.Value;
-            StringConstantType strType = constantString != null ? constantString.StringConstantType : expandableString.StringConstantType;
-            string subInput = null;
 
-            bool shouldContinue;
-            result = GetResultForEnumPropertyValueOfDSCResource(completionContext, strValue, ref replacementIndex, ref replacementLength, out shouldContinue);
-            if (!shouldContinue || (result != null && result.Count > 0))
+            // Check for switch case completion on $PSBoundParameters.Keys
+            completionContext.WordToComplete = strValue;
+            var switchCaseResult = CompleteAgainstSwitchCaseCondition(completionContext);
+            if (switchCaseResult != null && switchCaseResult.Count > 0)
             {
-                return result;
+                return switchCaseResult;
             }
 
-            if (strType == StringConstantType.DoubleQuoted)
+            // Check for $PSBoundParameters access patterns (ContainsKey, indexer, Remove)
+            var psBoundResult = CompleteAgainstPSBoundParametersAccess(completionContext);
+            if (psBoundResult != null && psBoundResult.Count > 0)
             {
-                var match = Regex.Match(strValue, @"(\$[\w\d]+\.[\w\d\*]*)$");
-                if (match.Success)
-                {
-                    subInput = match.Groups[1].Value;
-                }
-                else if ((match = Regex.Match(strValue, @"(\[[\w\d\.]+\]::[\w\d\*]*)$")).Success)
-                {
-                    subInput = match.Groups[1].Value;
-                }
+                return psBoundResult;
             }
 
-            // Handle variable/member completion
-            if (subInput != null)
+            bool shouldContinue;
+            List<CompletionResult> result = GetResultForEnumPropertyValueOfDSCResource(completionContext, strValue, ref replacementIndex, ref replacementLength, out shouldContinue);
+            if (!shouldContinue || (result != null && result.Count > 0))
             {
-                int stringStartIndex = tokenAtCursor.Extent.StartScriptPosition.Offset;
-                int cursorIndexInString = _cursorPosition.Offset - stringStartIndex - 1;
-                if (cursorIndexInString >= strValue.Length)
-                    cursorIndexInString = strValue.Length;
+                return result;
+            }
 
-                var analysis = new CompletionAnalysis(_ast, _tokens, _cursorPosition, _options);
-                var subContext = analysis.CreateCompletionContext(completionContext.TypeInferenceContext);
+            var commandElementAst = lastAst as CommandElementAst;
+            string wordToComplete =
+                CompletionCompleters.ConcatenateStringPathArguments(commandElementAst, string.Empty, completionContext);
 
-                var subResult = analysis.GetResultHelper(subContext, out int subReplaceIndex, out _, true);
+            if (wordToComplete != null)
+            {
+                completionContext.WordToComplete = wordToComplete;
 
-                if (subResult != null && subResult.Count > 0)
+                // Handle scenarios like this: cd 'c:\windows\win'<tab>
+                if (lastAst.Parent is CommandAst || lastAst.Parent is CommandParameterAst)
                 {
-                    result = new List<CompletionResult>();
-                    replacementIndex = stringStartIndex + 1 + (cursorIndexInString - subInput.Length);
-                    replacementLength = subInput.Length;
-                    ReadOnlySpan<char> prefix = subInput.AsSpan(0, subReplaceIndex);
-
-                    foreach (CompletionResult entry in subResult)
-                    {
-                        string completionText = string.Concat(prefix, entry.CompletionText.AsSpan());
-                        if (entry.ResultType == CompletionResultType.Property)
-                        {
-                            completionText = TokenKind.DollarParen.Text() + completionText + TokenKind.RParen.Text();
-                        }
-                        else if (entry.ResultType == CompletionResultType.Method)
-                        {
-                            completionText = TokenKind.DollarParen.Text() + completionText;
-                        }
-
-                        completionText += "\"";
-                        result.Add(new CompletionResult(completionText, entry.ListItemText, entry.ResultType, entry.ToolTip));
-                    }
+                    result = CompletionCompleters.CompleteCommandArgument(completionContext);
+                    replacementIndex = completionContext.ReplacementIndex;
+                    replacementLength = completionContext.ReplacementLength;
                 }
-            }
-            else
-            {
-                var commandElementAst = lastAst as CommandElementAst;
-                string wordToComplete =
-                    CompletionCompleters.ConcatenateStringPathArguments(commandElementAst, string.Empty, completionContext);
-
-                if (wordToComplete != null)
+                // Handle scenarios like this: "c:\wind"<tab>. Treat the StringLiteral/StringExpandable as path/command
+                else
                 {
-                    completionContext.WordToComplete = wordToComplete;
+                    // Handle path/commandname completion for quoted string
+                    result = new List<CompletionResult>(CompletionCompleters.CompleteFilename(completionContext));
 
-                    // Handle scenarios like this: cd 'c:\windows\win'<tab>
-                    if (lastAst.Parent is CommandAst || lastAst.Parent is CommandParameterAst)
+                    // Try command name completion only if the text contains '-'
+                    if (wordToComplete.Contains('-'))
                     {
-                        result = CompletionCompleters.CompleteCommandArgument(completionContext);
-                        replacementIndex = completionContext.ReplacementIndex;
-                        replacementLength = completionContext.ReplacementLength;
-                    }
-                    // Handle scenarios like this: "c:\wind"<tab>. Treat the StringLiteral/StringExpandable as path/command
-                    else
-                    {
-                        // Handle path/commandname completion for quoted string
-                        result = new List<CompletionResult>(CompletionCompleters.CompleteFilename(completionContext));
-
-                        // Try command name completion only if the text contains '-'
-                        if (wordToComplete.Contains('-'))
+                        var commandNameResult = CompletionCompleters.CompleteCommand(completionContext);
+                        if (commandNameResult != null && commandNameResult.Count > 0)
                         {
-                            var commandNameResult = CompletionCompleters.CompleteCommand(completionContext);
-                            if (commandNameResult != null && commandNameResult.Count > 0)
-                            {
-                                result.AddRange(commandNameResult);
-                            }
+                            result.AddRange(commandNameResult);
                         }
                     }
                 }
@@ -1721,15 +2282,19 @@ private static List<CompletionResult> GetResultForIdentifierInConfiguration(
 
                 foreach (var keyword in matchedResults)
                 {
-                    string usageString = Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.NewApiIsUsed
-                        ? Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.GetDSCResourceUsageString(keyword)
-                        : Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache.GetDSCResourceUsageString(keyword);
-
-                    if (results == null)
+                    string usageString = string.Empty;
+                    ICrossPlatformDsc dscSubsystem = SubsystemManager.GetSubsystem<ICrossPlatformDsc>();
+                    if (dscSubsystem != null)
+                    {
+                        usageString = dscSubsystem.GetDSCResourceUsageString(keyword);
+                    }
+                    else
                     {
-                        results = new List<CompletionResult>();
+                        usageString = Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache.GetDSCResourceUsageString(keyword);
                     }
 
+                    results ??= new List<CompletionResult>();
+
                     results.Add(new CompletionResult(
                         keyword.Keyword,
                         keyword.Keyword,
@@ -1741,15 +2306,34 @@ private static List<CompletionResult> GetResultForIdentifierInConfiguration(
             return results;
         }
 
-        private List<CompletionResult> GetResultForIdentifier(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength, bool isQuotedString)
+        private static List<CompletionResult> GetResultForIdentifier(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength)
         {
+            List<CompletionResult> result = null;
             var tokenAtCursor = completionContext.TokenAtCursor;
             var lastAst = completionContext.RelatedAsts.Last();
 
-            List<CompletionResult> result = null;
             var tokenAtCursorText = tokenAtCursor.Text;
             completionContext.WordToComplete = tokenAtCursorText;
 
+            // Check for switch case completion on $PSBoundParameters.Keys
+            var switchCaseResult = CompleteAgainstSwitchCaseCondition(completionContext);
+            if (switchCaseResult != null && switchCaseResult.Count > 0)
+            {
+                return switchCaseResult;
+            }
+
+            // Check for $PSBoundParameters access patterns (ContainsKey, indexer, Remove)
+            var psBoundResult = CompleteAgainstPSBoundParametersAccess(completionContext);
+            if (psBoundResult != null && psBoundResult.Count > 0)
+            {
+                return psBoundResult;
+            }
+
+            if (lastAst.Parent is BreakStatementAst || lastAst.Parent is ContinueStatementAst)
+            {
+                return CompleteLoopLabel(completionContext);
+            }
+
             var strConst = lastAst as StringConstantExpressionAst;
             if (strConst != null)
             {
@@ -1769,7 +2353,12 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
                         switch (usingState.UsingStatementKind)
                         {
                             case UsingStatementKind.Assembly:
-                                break;
+                                HashSet<string> assemblyExtensions = new(StringComparer.OrdinalIgnoreCase)
+                                {
+                                    StringLiterals.PowerShellILAssemblyExtension
+                                };
+                                return CompletionCompleters.CompleteFilename(completionContext, containerOnly: false, assemblyExtensions).ToList();
+
                             case UsingStatementKind.Command:
                                 break;
                             case UsingStatementKind.Module:
@@ -1805,76 +2394,101 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
                 }
             }
 
-            result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
-            if (result != null) return result;
+            if (completionContext.TokenAtCursor.TokenFlags == TokenFlags.MemberName)
+            {
+                if (lastAst is NamedAttributeArgumentAst || lastAst.Parent is NamedAttributeArgumentAst)
+                {
+                    result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                }
+                else if (lastAst is VariableExpressionAst && lastAst.Parent is ParameterAst paramAst && paramAst.Attributes.Count > 0)
+                {
+                    foreach (AttributeBaseAst attribute in paramAst.Attributes)
+                    {
+                        if (IsCursorWithinOrJustAfterExtent(completionContext.CursorPosition, attribute.Extent))
+                        {
+                            result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
+                            break;
+                        }
+                    }
+                }
+
+                if (result is not null)
+                {
+                    return result;
+                }
+            }
 
             if ((tokenAtCursor.TokenFlags & TokenFlags.CommandName) != 0)
             {
                 // Handle completion for a path with variable, such as: $PSHOME\ty<tab>
                 if (completionContext.RelatedAsts.Count > 0 && completionContext.RelatedAsts[0] is ScriptBlockAst)
                 {
-                    Ast cursorAst = null;
-                    var cursorPosition = (InternalScriptPosition)_cursorPosition;
-                    int offsetBeforeCmdName = cursorPosition.Offset - tokenAtCursorText.Length;
-                    if (offsetBeforeCmdName >= 0)
-                    {
-                        var cursorBeforeCmdName = cursorPosition.CloneWithNewOffset(offsetBeforeCmdName);
-                        var scriptBlockAst = (ScriptBlockAst)completionContext.RelatedAsts[0];
-                        cursorAst = GetLastAstAtCursor(scriptBlockAst, cursorBeforeCmdName);
-                    }
+                    Ast cursorAst = completionContext.RelatedAsts[0].FindAll(
+                        ast => ast.Extent.EndOffset <= tokenAtCursor.Extent.StartOffset
+                            && ast.Extent is not EmptyScriptExtent,
+                        searchNestedScriptBlocks: true).LastOrDefault();
 
-                    if (cursorAst != null &&
-                        cursorAst.Extent.EndLineNumber == tokenAtCursor.Extent.StartLineNumber &&
-                        cursorAst.Extent.EndColumnNumber == tokenAtCursor.Extent.StartColumnNumber)
+                    if (cursorAst is not null)
                     {
-                        if (tokenAtCursorText.IndexOfAny(Utils.Separators.Directory) == 0)
+                        if (cursorAst.Extent.EndOffset == tokenAtCursor.Extent.StartOffset)
                         {
-                            string wordToComplete =
-                                CompletionCompleters.ConcatenateStringPathArguments(cursorAst as CommandElementAst, tokenAtCursorText, completionContext);
-                            if (wordToComplete != null)
+                            if (tokenAtCursorText.AsSpan().IndexOfAny('\\', '/') == 0)
                             {
-                                completionContext.WordToComplete = wordToComplete;
-                                result = new List<CompletionResult>(CompletionCompleters.CompleteFilename(completionContext));
-                                if (result.Count > 0)
+                                string wordToComplete =
+                                    CompletionCompleters.ConcatenateStringPathArguments(cursorAst as CommandElementAst, tokenAtCursorText, completionContext);
+                                if (wordToComplete != null)
+                                {
+                                    completionContext.WordToComplete = wordToComplete;
+                                    result = new List<CompletionResult>(CompletionCompleters.CompleteFilename(completionContext));
+                                    if (result.Count > 0)
+                                    {
+                                        replacementIndex = cursorAst.Extent.StartScriptPosition.Offset;
+                                        replacementLength += cursorAst.Extent.Text.Length;
+                                    }
+
+                                    return result;
+                                }
+                                else
                                 {
+                                    var variableAst = cursorAst as VariableExpressionAst;
+                                    string fullPath = variableAst != null
+                                        ? CompletionCompleters.CombineVariableWithPartialPath(
+                                            variableAst: variableAst,
+                                            extraText: tokenAtCursorText,
+                                            executionContext: completionContext.ExecutionContext)
+                                        : null;
+
+                                    if (fullPath == null) { return result; }
+
+                                    // Continue trying the filename/commandname completion for scenarios like this: $aa\d<tab>
+                                    completionContext.WordToComplete = fullPath;
                                     replacementIndex = cursorAst.Extent.StartScriptPosition.Offset;
                                     replacementLength += cursorAst.Extent.Text.Length;
-                                }
 
-                                return result;
+                                    completionContext.ReplacementIndex = replacementIndex;
+                                    completionContext.ReplacementLength = replacementLength;
+                                }
                             }
-                            else
+                            // Continue trying the filename/commandname completion for scenarios like this: $aa[get-<tab>
+                            else if (cursorAst is not ErrorExpressionAst || cursorAst.Parent is not IndexExpressionAst)
                             {
-                                var variableAst = cursorAst as VariableExpressionAst;
-                                string fullPath = variableAst != null
-                                    ? CompletionCompleters.CombineVariableWithPartialPath(
-                                        variableAst: variableAst,
-                                        extraText: tokenAtCursorText,
-                                        executionContext: completionContext.ExecutionContext)
-                                    : null;
-
-                                if (fullPath == null) { return result; }
-
-                                // Continue trying the filename/commandname completion for scenarios like this: $aa\d<tab>
-                                completionContext.WordToComplete = fullPath;
-                                replacementIndex = cursorAst.Extent.StartScriptPosition.Offset;
-                                replacementLength += cursorAst.Extent.Text.Length;
-
-                                completionContext.ReplacementIndex = replacementIndex;
-                                completionContext.ReplacementLength = replacementLength;
+                                return result;
                             }
                         }
-                        // Continue trying the filename/commandname completion for scenarios like this: $aa[get-<tab>
-                        else if (cursorAst is not ErrorExpressionAst || cursorAst.Parent is not IndexExpressionAst)
+
+                        if (cursorAst.Parent is IndexExpressionAst indexExpression && indexExpression.Index is ErrorExpressionAst)
                         {
-                            return result;
+                            if (completionContext.WordToComplete.EndsWith(']'))
+                            {
+                                completionContext.WordToComplete = completionContext.WordToComplete.Remove(completionContext.WordToComplete.Length - 1);
+                            }
+
+                            // Handles index expression with unquoted word like: $PSVersionTable[psver<Tab>]
+                            return CompletionCompleters.CompleteIndexExpression(completionContext, indexExpression.Target);
                         }
                     }
                 }
 
-                // When it's the content of a quoted string, we only handle variable/member completion
-                if (isQuotedString) { return result; }
-
                 // Handle the StringExpandableToken;
                 var strToken = tokenAtCursor as StringExpandableToken;
                 if (strToken != null && strToken.NestedTokens != null && strConst != null)
@@ -1944,8 +2558,6 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
                 // When it's the content of a quoted string, we only handle variable/member completion
                 if (isSingleDash)
                 {
-                    if (isQuotedString) { return result; }
-
                     var res = CompletionCompleters.CompleteCommandParameter(completionContext);
                     if (res.Count != 0)
                     {
@@ -1957,8 +2569,24 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
             }
 
             TokenKind memberOperator = TokenKind.Unknown;
-            bool isMemberCompletion = (lastAst.Parent is MemberExpressionAst);
-            bool isStatic = isMemberCompletion && ((MemberExpressionAst)lastAst.Parent).Static;
+            bool isMemberCompletion = lastAst.Parent is MemberExpressionAst;
+            bool isStatic = false;
+            if (isMemberCompletion)
+            {
+                var currentExpression = (MemberExpressionAst)lastAst.Parent;
+                // Handles following scenario with an incomplete member access token at the end of the statement:
+                // [System.IO.FileInfo]::new<Tab>().Directory.BaseName.Length.
+                // Traverses up the expressions until it finds one under at the cursor
+                while (currentExpression.Extent.EndOffset >= completionContext.CursorPosition.Offset
+                    && currentExpression.Expression is MemberExpressionAst memberExpression
+                    && memberExpression.Member.Extent.EndOffset >= completionContext.CursorPosition.Offset)
+                {
+                    currentExpression = memberExpression;
+                }
+
+                isStatic = currentExpression.Static;
+            }
+
             bool isWildcard = false;
 
             if (!isMemberCompletion)
@@ -2009,7 +2637,7 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
 
             if (isMemberCompletion)
             {
-                result = CompletionCompleters.CompleteMember(completionContext, @static: (isStatic || memberOperator == TokenKind.ColonColon));
+                result = CompletionCompleters.CompleteMember(completionContext, @static: (isStatic || memberOperator == TokenKind.ColonColon), ref replacementLength);
 
                 // If the last token was just a '.', we tried to complete members.  That may
                 // have failed because it wasn't really an attempt to complete a member, in
@@ -2035,9 +2663,6 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
                 }
             }
 
-            // When it's the content of a quoted string, we only handle variable/member completion
-            if (isQuotedString) { return result; }
-
             bool needFileCompletion = false;
             if (lastAst.Parent is FileRedirectionAst || CompleteAgainstSwitchFile(lastAst, completionContext.TokenBeforeCursor))
             {
@@ -2049,7 +2674,7 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
                     completionContext.WordToComplete = wordToComplete;
                 }
             }
-            else if (tokenAtCursorText.IndexOfAny(Utils.Separators.Directory) == 0)
+            else if (tokenAtCursorText.AsSpan().IndexOfAny('\\', '/') == 0)
             {
                 var command = lastAst.Parent as CommandBaseAst;
                 if (command != null && command.Redirections.Count > 0)
@@ -2093,6 +2718,7 @@ private List<CompletionResult> GetResultForIdentifier(CompletionContext completi
             result = CompletionCompleters.CompleteCommandArgument(completionContext);
             replacementIndex = completionContext.ReplacementIndex;
             replacementLength = completionContext.ReplacementLength;
+
             return result;
         }
 
@@ -2101,33 +2727,47 @@ private static List<CompletionResult> GetResultForAttributeArgument(CompletionCo
             // Attribute member arguments
             Type attributeType = null;
             string argName = string.Empty;
-            Ast argAst = completionContext.RelatedAsts.Find(ast => ast is NamedAttributeArgumentAst);
-            NamedAttributeArgumentAst namedArgAst = argAst as NamedAttributeArgumentAst;
-            if (argAst != null && namedArgAst != null)
+            Ast argAst = completionContext.RelatedAsts.Find(static ast => ast is NamedAttributeArgumentAst);
+            AttributeAst attAst;
+            if (argAst is NamedAttributeArgumentAst namedArgAst)
             {
-                attributeType = ((AttributeAst)namedArgAst.Parent).TypeName.GetReflectionAttributeType();
+                attAst = (AttributeAst)namedArgAst.Parent;
+                attributeType = attAst.TypeName.GetReflectionAttributeType();
                 argName = namedArgAst.ArgumentName;
                 replacementIndex = namedArgAst.Extent.StartOffset;
                 replacementLength = argName.Length;
             }
             else
             {
-                Ast astAtt = completionContext.RelatedAsts.Find(ast => ast is AttributeAst);
-                AttributeAst attAst = astAtt as AttributeAst;
-                if (astAtt != null && attAst != null)
+                Ast astAtt = completionContext.RelatedAsts.Find(static ast => ast is AttributeAst);
+                attAst = astAtt as AttributeAst;
+                if (attAst is not null)
                 {
                     attributeType = attAst.TypeName.GetReflectionAttributeType();
                 }
             }
 
-            if (attributeType != null)
+            if (attributeType is not null)
             {
+                int cursorPosition = completionContext.CursorPosition.Offset;
+                var existingArguments = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+                foreach (var namedArgument in attAst.NamedArguments)
+                {
+                    if (cursorPosition < namedArgument.Extent.StartOffset || cursorPosition > namedArgument.Extent.EndOffset)
+                    {
+                        existingArguments.Add(namedArgument.ArgumentName);
+                    }
+                }
+
                 PropertyInfo[] propertyInfos = attributeType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
                 List<CompletionResult> result = new List<CompletionResult>();
                 foreach (PropertyInfo property in propertyInfos)
                 {
-                    // Ignore getter-only properties, including 'TypeId' (all attributes inherit it).
-                    if (!property.CanWrite) { continue; }
+                    // Ignore getter-only properties and properties that have already been set.
+                    if (!property.CanWrite || existingArguments.Contains(property.Name))
+                    {
+                        continue;
+                    }
 
                     if (property.Name.StartsWith(argName, StringComparison.OrdinalIgnoreCase))
                     {
@@ -2191,5 +2831,116 @@ private static List<CompletionResult> CompleteFileNameAsCommand(CompletionContex
 
             return result;
         }
+
+        /// <summary>
+        /// Complete loop labels after labeled control flow statements such as Break and Continue.
+        /// </summary>
+        private static List<CompletionResult> CompleteLoopLabel(CompletionContext completionContext)
+        {
+            var result = new List<CompletionResult>();
+            foreach (Ast ast in completionContext.RelatedAsts)
+            {
+                if (ast is LabeledStatementAst labeledStatement
+                    && labeledStatement.Label is not null
+                    && (completionContext.WordToComplete is null || labeledStatement.Label.StartsWith(completionContext.WordToComplete, StringComparison.OrdinalIgnoreCase)))
+                {
+                    result.Add(new CompletionResult(labeledStatement.Label, labeledStatement.Label, CompletionResultType.Text, labeledStatement.Extent.Text));
+                }
+                else if (ast is ErrorStatementAst errorStatement)
+                {
+                    // Handles incomplete do/switch loops (other labeled statements do not need this special treatment)
+                    // The regex looks for the loopLabel of errorstatements that look like do/switch loops
+                    // For example in ":Label do " it will find "Label".
+                    var labelMatch = Regex.Match(errorStatement.Extent.Text, @"(?<=^:)\w+(?=\s+(do|switch)\b(?!-))", RegexOptions.IgnoreCase);
+                    if (labelMatch.Success)
+                    {
+                        result.Add(new CompletionResult(labelMatch.Value, labelMatch.Value, CompletionResultType.Text, errorStatement.Extent.Text));
+                    }
+                }
+            }
+
+            if (result.Count == 0)
+            {
+                return null;
+            }
+
+            return result;
+        }
+
+        private static List<CompletionResult> CompleteUsingKeywords(int cursorOffset, Token[] tokens, ref int replacementIndex, ref int replacementLength)
+        {
+            var result = new List<CompletionResult>();
+            Token tokenBeforeCursor = null;
+            Token tokenAtCursor = null;
+
+            for (int i = tokens.Length - 1; i >= 0; i--)
+            {
+                if (tokens[i].Extent.EndOffset < cursorOffset && tokens[i].Kind != TokenKind.LineContinuation)
+                {
+                    tokenBeforeCursor = tokens[i];
+                    break;
+                }
+                else if (tokens[i].Extent.StartOffset <= cursorOffset && tokens[i].Extent.EndOffset >= cursorOffset && tokens[i].Kind != TokenKind.LineContinuation)
+                {
+                    tokenAtCursor = tokens[i];
+                }
+            }
+
+            if (tokenBeforeCursor is not null && tokenBeforeCursor.Kind == TokenKind.Using)
+            {
+                string wordToComplete = null;
+                if (tokenAtCursor is not null)
+                {
+                    replacementIndex = tokenAtCursor.Extent.StartOffset;
+                    replacementLength = tokenAtCursor.Extent.Text.Length;
+                    wordToComplete = tokenAtCursor.Text;
+                }
+                else
+                {
+                    replacementIndex = cursorOffset;
+                    replacementLength = 0;
+                }
+
+                foreach (var keyword in s_usingKeywords)
+                {
+                    if (string.IsNullOrEmpty(wordToComplete) || keyword.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
+                    {
+                        result.Add(new CompletionResult(keyword, keyword, CompletionResultType.Keyword, GetUsingKeywordToolTip(keyword)));
+                    }
+                }
+            }
+
+            if (result.Count > 0)
+            {
+                return result;
+            }
+
+            return null;
+        }
+
+        private static string GetUsingKeywordToolTip(string keyword)
+        {
+            switch (keyword)
+            {
+                case "assembly":
+                    return TabCompletionStrings.AssemblyKeywordDescription;
+                case "module":
+                    return TabCompletionStrings.ModuleKeywordDescription;
+                case "namespace":
+                    return TabCompletionStrings.NamespaceKeywordDescription;
+                case "type":
+                    return TabCompletionStrings.TypeKeywordDescription;
+                default:
+                    return null;
+            }
+        }
+
+        private static readonly string[] s_usingKeywords = new string[]
+        {
+            "assembly",
+            "module",
+            "namespace",
+            "type"
+        };
     }
 }
diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
index 853b79e7843..80cead788d3 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Buffers;
 using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -12,6 +13,7 @@
 using System.Linq;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
+using System.Management.Automation.Provider;
 using System.Management.Automation.Runspaces;
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -24,6 +26,7 @@
 using Microsoft.PowerShell;
 using Microsoft.PowerShell.Cim;
 using Microsoft.PowerShell.Commands;
+using Microsoft.PowerShell.Commands.Internal.Format;
 
 namespace System.Management.Automation
 {
@@ -61,7 +64,6 @@ public static IEnumerable<CompletionResult> CompleteCommand(string commandName)
         /// <param name="moduleName"></param>
         /// <param name="commandTypes"></param>
         /// <returns></returns>
-        [SuppressMessage("Microsoft.Design", "CA1026:DefaultParametersShouldNotBeUsed")]
         public static IEnumerable<CompletionResult> CompleteCommand(string commandName, string moduleName, CommandTypes commandTypes = CommandTypes.All)
         {
             var runspace = Runspace.DefaultRunspace;
@@ -86,7 +88,7 @@ private static List<CompletionResult> CompleteCommand(CompletionContext context,
             var addAmpersandIfNecessary = IsAmpersandNeeded(context, false);
 
             string commandName = context.WordToComplete;
-            string quote = HandleDoubleAndSingleQuote(ref commandName);
+            string quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref commandName);
 
             List<CompletionResult> commandResults = null;
 
@@ -194,7 +196,7 @@ List<CompletionResult> ExecuteGetCommandCommand(bool useModulePrefix)
                 if (commandInfos != null && commandInfos.Count > 1)
                 {
                     // OrderBy is using stable sorting
-                    var sortedCommandInfos = commandInfos.OrderBy(a => a, new CommandNameComparer());
+                    var sortedCommandInfos = commandInfos.Order(new CommandNameComparer());
                     completionResults = MakeCommandsUnique(sortedCommandInfos, useModulePrefix, addAmpersandIfNecessary, quote);
                 }
                 else
@@ -231,7 +233,7 @@ internal static CompletionResult GetCommandNameCompletionResult(string name, obj
             syntax = string.IsNullOrEmpty(syntax) ? name : syntax;
             bool needAmpersand;
 
-            if (CompletionRequiresQuotes(name, false))
+            if (CompletionHelpers.CompletionRequiresQuotes(name))
             {
                 needAmpersand = quote == string.Empty && addAmpersandIfNecessary;
                 string quoteInUse = quote == string.Empty ? "'" : quote;
@@ -326,53 +328,72 @@ internal static List<CompletionResult> MakeCommandsUnique(IEnumerable<PSObject>
                 }
             }
 
-            List<CompletionResult> endResults = null;
             foreach (var keyValuePair in commandTable)
             {
-                var commandList = keyValuePair.Value as List<object>;
-                if (commandList != null)
+                if (keyValuePair.Value is List<object> commandList)
                 {
-                    if (endResults == null)
+                    var modulesWithCommand = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+                    var importedModules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+                    var commandInfoList = new List<CommandInfo>(commandList.Count);
+                    for (int i = 0; i < commandList.Count; i++)
                     {
-                        endResults = new List<CompletionResult>();
-                    }
+                        if (commandList[i] is not CommandInfo commandInfo)
+                        {
+                            continue;
+                        }
 
-                    // The first command might be an un-prefixed commandInfo that we get by importing a module with the -Prefix parameter,
-                    // in that case, we should add the module name qualification because if the module is not in the module path, calling
-                    // 'Get-Foo' directly doesn't work
-                    string completionName = keyValuePair.Key;
-                    if (!includeModulePrefix)
-                    {
-                        var commandInfo = commandList[0] as CommandInfo;
-                        if (commandInfo != null && !string.IsNullOrEmpty(commandInfo.Prefix))
+                        commandInfoList.Add(commandInfo);
+                        if (commandInfo.CommandType == CommandTypes.Application)
                         {
-                            Diagnostics.Assert(!string.IsNullOrEmpty(commandInfo.ModuleName), "the module name should exist if commandInfo.Prefix is not an empty string");
-                            if (!ModuleCmdletBase.IsPrefixedCommand(commandInfo))
-                            {
-                                completionName = commandInfo.ModuleName + "\\" + completionName;
-                            }
+                            continue;
+                        }
+
+                        modulesWithCommand.Add(commandInfo.ModuleName);
+                        if ((commandInfo.CommandType == CommandTypes.Cmdlet && commandInfo.CommandMetadata.CommandType is not null)
+                            || (commandInfo.CommandType is CommandTypes.Function or CommandTypes.Filter && commandInfo.Definition != string.Empty)
+                            || (commandInfo.CommandType == CommandTypes.Alias && commandInfo.Definition is not null))
+                        {
+                            // Checks if the command or source module has been imported.
+                            _ = importedModules.Add(commandInfo.ModuleName);
                         }
                     }
 
-                    results.Add(GetCommandNameCompletionResult(completionName, commandList[0], addAmpersandIfNecessary, quote));
+                    if (commandInfoList.Count == 0)
+                    {
+                        continue;
+                    }
 
-                    // For the other commands that are hidden, we need to disambiguate,
-                    // but put these at the end as it's less likely any of the hidden
-                    // commands are desired.  If we can't add anything to disambiguate,
-                    // then we'll skip adding a completion result.
-                    for (int index = 1; index < commandList.Count; index++)
+                    int moduleCount = modulesWithCommand.Count;
+                    modulesWithCommand.Clear();
+                    int index;
+                    if (commandInfoList[0].CommandType == CommandTypes.Application
+                        || importedModules.Count == 1
+                        || moduleCount < 2)
                     {
-                        var commandInfo = commandList[index] as CommandInfo;
-                        Diagnostics.Assert(commandInfo != null, "Elements should always be CommandInfo");
+                        // We can use the short name for this command because there's no ambiguity about which command it resolves to.
+                        // If the first element is an application then we know there's no conflicting commands/aliases (because of the command precedence).
+                        // If there's just 1 module imported then the short name refers to that module (and it will be the first element in the list)
+                        // If there's less than 2 unique modules exporting that command then we can use the short name because it can only refer to that module.
+                        index = 1;
+                        results.Add(GetCommandNameCompletionResult(keyValuePair.Key, commandInfoList[0], addAmpersandIfNecessary, quote));
+                        modulesWithCommand.Add(commandInfoList[0].ModuleName);
+                    }
+                    else
+                    {
+                        index = 0;
+                    }
 
+                    for (; index < commandInfoList.Count; index++)
+                    {
+                        CommandInfo commandInfo = commandInfoList[index];
                         if (commandInfo.CommandType == CommandTypes.Application)
                         {
-                            endResults.Add(GetCommandNameCompletionResult(commandInfo.Definition, commandInfo, addAmpersandIfNecessary, quote));
+                            results.Add(GetCommandNameCompletionResult(commandInfo.Definition, commandInfo, addAmpersandIfNecessary, quote));
                         }
-                        else if (!string.IsNullOrEmpty(commandInfo.ModuleName))
+                        else if (!string.IsNullOrEmpty(commandInfo.ModuleName) && modulesWithCommand.Add(commandInfo.ModuleName))
                         {
                             var name = commandInfo.ModuleName + "\\" + commandInfo.Name;
-                            endResults.Add(GetCommandNameCompletionResult(name, commandInfo, addAmpersandIfNecessary, quote));
+                            results.Add(GetCommandNameCompletionResult(name, commandInfo, addAmpersandIfNecessary, quote));
                         }
                     }
                 }
@@ -399,15 +420,10 @@ internal static List<CompletionResult> MakeCommandsUnique(IEnumerable<PSObject>
                 }
             }
 
-            if (endResults != null && endResults.Count > 0)
-            {
-                results.AddRange(endResults);
-            }
-
             return results;
         }
 
-        private class FindFunctionsVisitor : AstVisitor
+        private sealed class FindFunctionsVisitor : AstVisitor
         {
             internal readonly List<FunctionDefinitionAst> FunctionDefinitions = new List<FunctionDefinitionAst>();
 
@@ -424,16 +440,34 @@ public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst fun
 
         internal static List<CompletionResult> CompleteModuleName(CompletionContext context, bool loadedModulesOnly, bool skipEditionCheck = false)
         {
-            var moduleName = context.WordToComplete ?? string.Empty;
+            var wordToComplete = context.WordToComplete ?? string.Empty;
             var result = new List<CompletionResult>();
-            var quote = HandleDoubleAndSingleQuote(ref moduleName);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
+
+            // Indicates if we should search for modules where the last part of the name matches the input text
+            // eg: Host<Tab> finds Microsoft.PowerShell.Host
+            // If the user has entered a manual wildcard, or a module name that contains a "." we assume they only want results that matches the input exactly.
+            bool shortNameSearch = wordToComplete.Length > 0 && !WildcardPattern.ContainsWildcardCharacters(wordToComplete) && !wordToComplete.Contains('.');
+
+            if (!wordToComplete.EndsWith('*'))
+            {
+                wordToComplete += "*";
+            }
 
-            if (!moduleName.EndsWith('*'))
+            string[] moduleNames;
+            WildcardPattern shortNamePattern;
+            if (shortNameSearch)
+            {
+                moduleNames = new string[] { wordToComplete, "*." + wordToComplete };
+                shortNamePattern = new WildcardPattern(wordToComplete, WildcardOptions.IgnoreCase);
+            }
+            else
             {
-                moduleName += "*";
+                moduleNames = new string[] { wordToComplete };
+                shortNamePattern = null;
             }
 
-            var powershell = context.Helper.AddCommandWithPreferenceSetting("Get-Module", typeof(GetModuleCommand)).AddParameter("Name", moduleName);
+            var powershell = context.Helper.AddCommandWithPreferenceSetting("Get-Module", typeof(GetModuleCommand)).AddParameter("Name", moduleNames);
             if (!loadedModulesOnly)
             {
                 powershell.AddParameter("ListAvailable", true);
@@ -445,32 +479,58 @@ internal static List<CompletionResult> CompleteModuleName(CompletionContext cont
                 }
             }
 
-            Exception exceptionThrown;
-            var psObjects = context.Helper.ExecuteCurrentPowerShell(out exceptionThrown);
+            Collection<PSObject> psObjects = context.Helper.ExecuteCurrentPowerShell(out _);
 
             if (psObjects != null)
             {
-                foreach (dynamic moduleInfo in psObjects)
+                // When PowerShell is used interactively, completion is usually triggered by PSReadLine, with PSReadLine's SessionState
+                // as the engine session state. In that case, results from the module search may contain a nested module of PSReadLine,
+                // which should be filtered out below.
+                // When the completion is triggered from global session state, such as when running 'TabExpansion2' from command line,
+                // the module associated with engine session state will be null.
+                //
+                // Note that, it's intentional to not hard code the name 'PSReadLine' in the change, so that in case the tab completion
+                // is triggered from within a different module, its nested modules can also be filtered out.
+                HashSet<PSModuleInfo> nestedModulesToFilterOut = null;
+                PSModuleInfo currentModule = context.ExecutionContext.EngineSessionState.Module;
+                if (loadedModulesOnly && currentModule?.NestedModules.Count > 0)
                 {
-                    var completionText = moduleInfo.Name.ToString();
-                    var listItemText = completionText;
-                    var toolTip = "Description: " + moduleInfo.Description.ToString() + "\r\nModuleType: "
-                                  + moduleInfo.ModuleType.ToString() + "\r\nPath: "
-                                  + moduleInfo.Path.ToString();
+                    nestedModulesToFilterOut = new(currentModule.NestedModules);
+                }
+
+                var completedModules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+                foreach (PSObject item in psObjects)
+                {
+                    var moduleInfo = (PSModuleInfo)item.BaseObject;
+                    var completionText = moduleInfo.Name;
+                    if (!completedModules.Add(completionText))
+                    {
+                        continue;
+                    }
 
-                    if (CompletionRequiresQuotes(completionText, false))
+                    if (shortNameSearch
+                        && completionText.Contains('.')
+                        && !shortNamePattern.IsMatch(completionText.Substring(completionText.LastIndexOf('.') + 1))
+                        && !shortNamePattern.IsMatch(completionText))
                     {
-                        var quoteInUse = quote == string.Empty ? "'" : quote;
-                        if (quoteInUse == "'")
-                            completionText = completionText.Replace("'", "''");
-                        completionText = quoteInUse + completionText + quoteInUse;
+                        // This check is to make sure we don't return a module whose name only matches the user specified word in the middle.
+                        // For example, when user completes with 'gmo power', we should not return 'Microsoft.PowerShell.Utility'.
+                        continue;
                     }
-                    else
+
+                    if (nestedModulesToFilterOut is not null
+                        && nestedModulesToFilterOut.Contains(moduleInfo))
                     {
-                        completionText = quote + completionText + quote;
+                        continue;
                     }
 
-                    result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, toolTip));
+                    var toolTip = "Description: " + moduleInfo.Description + "\r\nModuleType: "
+                                  + moduleInfo.ModuleType.ToString() + "\r\nPath: "
+                                  + moduleInfo.Path;
+
+                    completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
+
+                    result.Add(new CompletionResult(completionText, listItemText: moduleInfo.Name, CompletionResultType.ParameterValue, toolTip));
                 }
             }
 
@@ -494,8 +554,7 @@ internal static List<CompletionResult> CompleteCommandParameter(CompletionContex
             DynamicKeywordStatementAst keywordAst = null;
             for (int i = context.RelatedAsts.Count - 1; i >= 0; i--)
             {
-                if (keywordAst == null)
-                    keywordAst = context.RelatedAsts[i] as DynamicKeywordStatementAst;
+                keywordAst ??= context.RelatedAsts[i] as DynamicKeywordStatementAst;
                 parameterAst = (context.RelatedAsts[i] as CommandParameterAst);
                 if (parameterAst != null) break;
             }
@@ -513,7 +572,7 @@ internal static List<CompletionResult> CompleteCommandParameter(CompletionContex
                 var lastAst = context.RelatedAsts.Last();
                 var wordToMatch = string.Concat(context.WordToComplete.AsSpan(1), "*");
                 var pattern = WildcardPattern.Get(wordToMatch, WildcardOptions.IgnoreCase);
-                var parameterNames = keywordAst.CommandElements.Where(ast => ast is CommandParameterAst).Select(ast => (ast as CommandParameterAst).ParameterName);
+                var parameterNames = keywordAst.CommandElements.Where(static ast => ast is CommandParameterAst).Select(static ast => (ast as CommandParameterAst).ParameterName);
                 foreach (var parameterName in s_parameterNamesOfImportDSCResource)
                 {
                     if (pattern.IsMatch(parameterName) && !parameterNames.Contains(parameterName, StringComparer.OrdinalIgnoreCase))
@@ -532,6 +591,7 @@ internal static List<CompletionResult> CompleteCommandParameter(CompletionContex
                 return result;
             }
 
+            bool bindPositionalParameters = true;
             if (parameterAst != null)
             {
                 // Parent must be a command
@@ -542,7 +602,7 @@ internal static List<CompletionResult> CompleteCommandParameter(CompletionContex
             else
             {
                 // No CommandParameterAst is found. It could be a StringConstantExpressionAst "-"
-                if (!(context.RelatedAsts[context.RelatedAsts.Count - 1] is StringConstantExpressionAst dashAst))
+                if (context.RelatedAsts[context.RelatedAsts.Count - 1] is not StringConstantExpressionAst dashAst)
                     return result;
                 if (!dashAst.Value.Trim().Equals("-", StringComparison.OrdinalIgnoreCase))
                     return result;
@@ -550,10 +610,24 @@ internal static List<CompletionResult> CompleteCommandParameter(CompletionContex
                 // Parent must be a command
                 commandAst = (CommandAst)dashAst.Parent;
                 partialName = string.Empty;
+
+                // If the user tries to tab complete a new parameter in front of a positional argument like: dir -<Tab> C:\
+                // the user may want to add the parameter name so we don't want to bind positional arguments
+                if (commandAst is not null)
+                {
+                    foreach (var element in commandAst.CommandElements)
+                    {
+                        if (element.Extent.StartOffset > context.TokenAtCursor.Extent.StartOffset)
+                        {
+                            bindPositionalParameters = element is CommandParameterAst;
+                            break;
+                        }
+                    }
+                }
             }
 
             PseudoBindingInfo pseudoBinding = new PseudoParameterBinder()
-                                                .DoPseudoParameterBinding(commandAst, null, parameterAst, PseudoParameterBinder.BindingType.ParameterCompletion);
+                                                .DoPseudoParameterBinding(commandAst, null, parameterAst, PseudoParameterBinder.BindingType.ParameterCompletion, bindPositionalParameters);
             // The command cannot be found or it's not a cmdlet, not a script cmdlet, not a function.
             // Try completing as if it the parameter is a command argument for native command completion.
             if (pseudoBinding == null)
@@ -595,6 +669,11 @@ private static List<CompletionResult> GetParameterCompletionResults(string param
         {
             Diagnostics.Assert(bindingInfo.InfoType.Equals(PseudoBindingInfoType.PseudoBindingSucceed), "The pseudo binding should succeed");
             List<CompletionResult> result = new List<CompletionResult>();
+            Assembly commandAssembly = null;
+            if (bindingInfo.CommandInfo is CmdletInfo cmdletInfo)
+            {
+                commandAssembly = cmdletInfo.CommandMetadata.CommandType.Assembly;
+            }
 
             if (parameterName == string.Empty)
             {
@@ -602,7 +681,8 @@ private static List<CompletionResult> GetParameterCompletionResults(string param
                     parameterName,
                     bindingInfo.ValidParameterSetsFlags,
                     bindingInfo.UnboundParameters,
-                    withColon);
+                    withColon,
+                    commandAssembly);
                 return result;
             }
 
@@ -624,7 +704,8 @@ private static List<CompletionResult> GetParameterCompletionResults(string param
                         parameterName,
                         bindingInfo.ValidParameterSetsFlags,
                         bindingInfo.UnboundParameters,
-                        withColon);
+                        withColon,
+                        commandAssembly);
                 }
 
                 return result;
@@ -639,7 +720,8 @@ private static List<CompletionResult> GetParameterCompletionResults(string param
                         parameterName,
                         bindingInfo.ValidParameterSetsFlags,
                         bindingInfo.BoundParameters.Values,
-                        withColon);
+                        withColon,
+                        commandAssembly);
                 }
 
                 return result;
@@ -695,29 +777,101 @@ private static List<CompletionResult> GetParameterCompletionResults(string param
                     break;
             }
 
-            Diagnostics.Assert(matchedParameterName != null, "we should find matchedParameterName from the BoundArguments");
+            if (matchedParameterName is null)
+            {
+                // The pseudo binder has skipped a parameter
+                // This will happen when completing parameters for commands with dynamic parameters.
+                result = GetParameterCompletionResults(
+                    parameterName,
+                    bindingInfo.ValidParameterSetsFlags,
+                    bindingInfo.UnboundParameters,
+                    withColon,
+                    commandAssembly);
+                return result;
+            }
+
             MergedCompiledCommandParameter param = bindingInfo.BoundParameters[matchedParameterName];
 
             WildcardPattern pattern = WildcardPattern.Get(parameterName + "*", WildcardOptions.IgnoreCase);
             string parameterType = "[" + ToStringCodeMethods.Type(param.Parameter.Type, dropNamespaces: true) + "] ";
+
+            string helpMessage = string.Empty;
+            if (param.Parameter.CompiledAttributes is not null)
+            {
+                foreach (Attribute attr in param.Parameter.CompiledAttributes)
+                {
+                    if (attr is ParameterAttribute pattr && TryGetParameterHelpMessage(pattr, commandAssembly, out string attrHelpMessage))
+                    {
+                        helpMessage = $" - {attrHelpMessage}";
+                        break;
+                    }
+                }
+            }
+
             string colonSuffix = withColon ? ":" : string.Empty;
             if (pattern.IsMatch(matchedParameterName))
             {
-                string completionText = "-" + matchedParameterName + colonSuffix;
-                string tooltip = parameterType + matchedParameterName;
+                string completionText = $"-{matchedParameterName}{colonSuffix}";
+                string tooltip = $"{parameterType}{matchedParameterName}{helpMessage}";
                 result.Add(new CompletionResult(completionText, matchedParameterName, CompletionResultType.ParameterName, tooltip));
             }
-
-            // Process alias when there is partial input
-            result.AddRange(from alias in param.Parameter.Aliases
-                            where pattern.IsMatch(alias)
-                            select
-                                new CompletionResult("-" + alias + colonSuffix, alias, CompletionResultType.ParameterName,
-                                                     parameterType + alias));
+            else
+            {
+                // Process alias when there is partial input
+                foreach (var alias in param.Parameter.Aliases)
+                {
+                    if (pattern.IsMatch(alias))
+                    {
+                        result.Add(new CompletionResult(
+                            $"-{alias}{colonSuffix}",
+                            alias,
+                            CompletionResultType.ParameterName,
+                            $"{parameterType}{alias}{helpMessage}"));
+                    }
+                }
+            }
 
             return result;
         }
 
+#nullable enable
+        /// <summary>
+        /// Try and get the help message text for the parameter attribute.
+        /// </summary>
+        /// <param name="attr">The attribute to check for the help message.</param>
+        /// <param name="assembly">The assembly to lookup resources messages, this should be the assembly the cmdlet is defined in.</param>
+        /// <param name="message">The help message if it was found otherwise null.</param>
+        /// <returns>True if the help message was set or false if not.></returns>
+        private static bool TryGetParameterHelpMessage(
+            ParameterAttribute attr,
+            Assembly? assembly,
+            [NotNullWhen(true)] out string? message)
+        {
+            message = null;
+
+            if (attr.HelpMessage is not null)
+            {
+                message = attr.HelpMessage;
+                return true;
+            }
+
+            if (assembly is null || attr.HelpMessageBaseName is null || attr.HelpMessageResourceId is null)
+            {
+                return false;
+            }
+
+            try
+            {
+                message = ResourceManagerCache.GetResourceString(assembly, attr.HelpMessageBaseName, attr.HelpMessageResourceId);
+                return message is not null;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+        }
+#nullable disable
+
         /// <summary>
         /// Get the parameter completion results by using the given valid parameter sets and available parameters.
         /// </summary>
@@ -725,12 +879,14 @@ where pattern.IsMatch(alias)
         /// <param name="validParameterSetFlags"></param>
         /// <param name="parameters"></param>
         /// <param name="withColon"></param>
+        /// <param name="commandAssembly">Optional assembly used to lookup parameter help messages.</param>
         /// <returns></returns>
         private static List<CompletionResult> GetParameterCompletionResults(
             string parameterName,
             uint validParameterSetFlags,
             IEnumerable<MergedCompiledCommandParameter> parameters,
-            bool withColon)
+            bool withColon,
+            Assembly commandAssembly = null)
         {
             var result = new List<CompletionResult>();
             var commonParamResult = new List<CompletionResult>();
@@ -746,6 +902,7 @@ private static List<CompletionResult> GetParameterCompletionResults(
 
                 string name = param.Parameter.Name;
                 string type = "[" + ToStringCodeMethods.Type(param.Parameter.Type, dropNamespaces: true) + "] ";
+                string helpMessage = null;
                 bool isCommonParameter = Cmdlet.CommonParameters.Contains(name, StringComparer.OrdinalIgnoreCase);
                 List<CompletionResult> listInUse = isCommonParameter ? commonParamResult : result;
 
@@ -761,33 +918,45 @@ private static List<CompletionResult> GetParameterCompletionResults(
                     {
                         foreach (var attr in compiledAttributes)
                         {
-                            var pattr = attr as ParameterAttribute;
-                            if (pattr != null && pattr.DontShow)
+                            if (attr is ParameterAttribute pattr)
                             {
-                                showToUser = false;
-                                addCommonParameters = false;
-                                break;
+                                if (pattr.DontShow)
+                                {
+                                    showToUser = false;
+                                    addCommonParameters = false;
+                                    break;
+                                }
+
+                                if (helpMessage is null && TryGetParameterHelpMessage(pattr, commandAssembly, out string attrHelpMessage))
+                                {
+                                    helpMessage = $" - {attrHelpMessage}";
+                                }
                             }
                         }
                     }
 
                     if (showToUser)
                     {
-                        string completionText = "-" + name + colonSuffix;
-                        string tooltip = type + name;
+                        string completionText = $"-{name}{colonSuffix}";
+                        string tooltip = $"{type}{name}{helpMessage}";
                         listInUse.Add(new CompletionResult(completionText, name, CompletionResultType.ParameterName,
                                                            tooltip));
                     }
                 }
-
-                if (parameterName != string.Empty)
+                else if (parameterName != string.Empty)
                 {
                     // Process alias when there is partial input
-                    listInUse.AddRange(from alias in param.Parameter.Aliases
-                                       where pattern.IsMatch(alias)
-                                       select
-                                         new CompletionResult("-" + alias + colonSuffix, alias, CompletionResultType.ParameterName,
-                                                              type + alias));
+                    foreach (var alias in param.Parameter.Aliases)
+                    {
+                        if (pattern.IsMatch(alias))
+                        {
+                            listInUse.Add(new CompletionResult(
+                                $"-{alias}{colonSuffix}",
+                                alias,
+                                CompletionResultType.ParameterName,
+                                type + alias));
+                        }
+                    }
                 }
             }
 
@@ -878,7 +1047,7 @@ internal static List<CompletionResult> CompleteCommandArgument(CompletionContext
                             partialPathAst.StringConstantType == StringConstantType.BareWord &&
                             secondToLastAst.Extent.EndLineNumber == partialPathAst.Extent.StartLineNumber &&
                             secondToLastAst.Extent.EndColumnNumber == partialPathAst.Extent.StartColumnNumber &&
-                            partialPathAst.Value.IndexOfAny(Utils.Separators.Directory) == 0)
+                            partialPathAst.Value.AsSpan().IndexOfAny('\\', '/') == 0)
                         {
                             var secondToLastStringConstantAst = secondToLastAst as StringConstantExpressionAst;
                             var secondToLastExpandableStringAst = secondToLastAst as ExpandableStringExpressionAst;
@@ -1209,7 +1378,7 @@ internal static List<CompletionResult> CompleteCommandArgument(CompletionContext
 
                     if (ret != null && ret.Count > 0)
                     {
-                        var prefix = TokenKind.LParen.Text() + input.Substring(0, fakeReplacementIndex);
+                        string prefix = string.Concat(TokenKind.LParen.Text(), input.AsSpan(0, fakeReplacementIndex));
                         foreach (CompletionResult entry in ret)
                         {
                             string completionText = prefix + entry.CompletionText;
@@ -1258,7 +1427,7 @@ internal static List<CompletionResult> CompleteCommandArgument(CompletionContext
                 // Treat it as the file name completion
                 // Handle this scenario: & 'c:\a b'\<tab>
                 string fileName = pathAst.Value;
-                if (commandAst.InvocationOperator != TokenKind.Unknown && fileName.IndexOfAny(Utils.Separators.Directory) == 0 &&
+                if (commandAst.InvocationOperator != TokenKind.Unknown && fileName.AsSpan().IndexOfAny('\\', '/') == 0 &&
                     commandAst.CommandElements.Count == 2 && commandAst.CommandElements[0] is StringConstantExpressionAst &&
                     commandAst.CommandElements[0].Extent.EndLineNumber == expressionAst.Extent.StartLineNumber &&
                     commandAst.CommandElements[0].Extent.EndColumnNumber == expressionAst.Extent.StartColumnNumber)
@@ -1328,7 +1497,8 @@ internal static List<CompletionResult> CompleteCommandArgument(CompletionContext
                         context.Options.Remove("LiteralPaths");
                 }
 
-                if (context.WordToComplete != string.Empty && context.WordToComplete.Contains('-'))
+                // The word to complete contains a dash and it's not the first character. We try command names in this case.
+                if (context.WordToComplete.IndexOf('-') > 0)
                 {
                     var commandResults = CompleteCommand(context);
                     if (commandResults != null)
@@ -1573,13 +1743,20 @@ private static void CompletePositionalArgument(
                                               (defaultParameterSetFlag & validParameterSetFlags) != 0;
             MergedCompiledCommandParameter positionalParam = null;
 
+            MergedCompiledCommandParameter bestMatchParam = null;
+            ParameterSetSpecificMetadata bestMatchSet = null;
+
+            // Finds the parameter with the position closest to the specified position
             foreach (MergedCompiledCommandParameter param in parameters)
             {
                 bool isInParameterSet = (param.Parameter.ParameterSetFlags & validParameterSetFlags) != 0 || param.Parameter.IsInAllSets;
                 if (!isInParameterSet)
+                {
                     continue;
+                }
 
                 var parameterSetDataCollection = param.Parameter.GetMatchingParameterSetData(validParameterSetFlags);
+
                 foreach (ParameterSetSpecificMetadata parameterSetData in parameterSetDataCollection)
                 {
                     // in the first pass, we skip the remaining argument ones
@@ -1591,36 +1768,45 @@ private static void CompletePositionalArgument(
                     // Check the position
                     int positionInParameterSet = parameterSetData.Position;
 
-                    if (positionInParameterSet == int.MinValue || positionInParameterSet != position)
+                    if (positionInParameterSet < position)
                     {
-                        // The parameter is not positional, or its position is not what we want
+                        // The parameter is not positional (position == int.MinValue), or its position is lower than what we want.
                         continue;
                     }
 
-                    if (isDefaultParameterSetValid)
+                    if (bestMatchSet is null
+                        || bestMatchSet.Position > positionInParameterSet
+                        || (isDefaultParameterSetValid && positionInParameterSet == bestMatchSet.Position && defaultParameterSetFlag == parameterSetData.ParameterSetFlag))
                     {
-                        if (parameterSetData.ParameterSetFlag == defaultParameterSetFlag)
+                        bestMatchParam = param;
+                        bestMatchSet = parameterSetData;
+                        if (positionInParameterSet == position)
                         {
-                            ProcessParameter(commandName, commandAst, context, result, param, boundArguments);
-                            isProcessedAsPositional = result.Count > 0;
                             break;
                         }
-                        else
-                        {
-                            if (positionalParam == null)
-                                positionalParam = param;
-                        }
+                    }
+                }
+            }
+
+            if (bestMatchParam is not null)
+            {
+                if (isDefaultParameterSetValid)
+                {
+                    if (bestMatchSet.ParameterSetFlag == defaultParameterSetFlag)
+                    {
+                        ProcessParameter(commandName, commandAst, context, result, bestMatchParam, boundArguments);
+                        isProcessedAsPositional = result.Count > 0;
                     }
                     else
                     {
-                        isProcessedAsPositional = true;
-                        ProcessParameter(commandName, commandAst, context, result, param, boundArguments);
-                        break;
+                        positionalParam ??= bestMatchParam;
                     }
                 }
-
-                if (isProcessedAsPositional)
-                    break;
+                else
+                {
+                    isProcessedAsPositional = true;
+                    ProcessParameter(commandName, commandAst, context, result, bestMatchParam, boundArguments);
+                }
             }
 
             if (!isProcessedAsPositional && positionalParam != null)
@@ -1656,9 +1842,9 @@ private static void CompletePositionalArgument(
         /// </summary>
         /// <remarks>
         /// If the argument completion falls into these pre-defined cases:
-        ///   1. The matching parameter is of type Enum
-        ///   2. The matching parameter is of type SwitchParameter
-        ///   3. The matching parameter is declared with ValidateSetAttribute
+        ///   1. The matching parameter is declared with ValidateSetAttribute
+        ///   2. The matching parameter is of type Enum
+        ///   3. The matching parameter is of type SwitchParameter
         ///   4. Falls into the native command argument completion
         /// a null instance of CompletionResult is added to the end of the
         /// "result" list, to indicate that this particular argument completion
@@ -1681,78 +1867,24 @@ private static void ProcessParameter(
                 parameterType = parameterType.GetElementType();
             }
 
-            if (parameterType.IsEnum)
-            {
-                RemoveLastNullCompletionResult(result);
-
-                string enumString = LanguagePrimitives.EnumSingleTypeConverter.EnumValues(parameterType);
-                string separator = CultureInfo.CurrentUICulture.TextInfo.ListSeparator;
-                string[] enumArray = enumString.Split(separator, StringSplitOptions.RemoveEmptyEntries);
-
-                string wordToComplete = context.WordToComplete;
-                string quote = HandleDoubleAndSingleQuote(ref wordToComplete);
-
-                var pattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
-                var enumList = new List<string>();
-
-                foreach (string value in enumArray)
-                {
-                    if (wordToComplete.Equals(value, StringComparison.OrdinalIgnoreCase))
-                    {
-                        string completionText = quote == string.Empty ? value : quote + value + quote;
-                        fullMatch = new CompletionResult(completionText, value, CompletionResultType.ParameterValue, value);
-                        continue;
-                    }
-
-                    if (pattern.IsMatch(value))
-                    {
-                        enumList.Add(value);
-                    }
-                }
-
-                if (fullMatch != null)
-                {
-                    result.Add(fullMatch);
-                }
-
-                enumList.Sort();
-                result.AddRange(from entry in enumList
-                                let completionText = quote == string.Empty ? entry : quote + entry + quote
-                                select new CompletionResult(completionText, entry, CompletionResultType.ParameterValue, entry));
-
-                result.Add(CompletionResult.Null);
-                return;
-            }
-
-            if (parameterType.Equals(typeof(SwitchParameter)))
-            {
-                RemoveLastNullCompletionResult(result);
-
-                if (context.WordToComplete == string.Empty || context.WordToComplete.Equals("$", StringComparison.Ordinal))
-                {
-                    result.Add(new CompletionResult("$true", "$true", CompletionResultType.ParameterValue, "$true"));
-                    result.Add(new CompletionResult("$false", "$false", CompletionResultType.ParameterValue, "$false"));
-                }
-
-                result.Add(CompletionResult.Null);
-                return;
-            }
-
             foreach (ValidateArgumentsAttribute att in parameter.Parameter.ValidationAttributes)
             {
                 if (att is ValidateSetAttribute setAtt)
                 {
                     RemoveLastNullCompletionResult(result);
 
-                    string wordToComplete = context.WordToComplete;
-                    string quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+                    string wordToComplete = context.WordToComplete ?? string.Empty;
+                    string quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
                     var pattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
                     var setList = new List<string>();
 
                     foreach (string value in setAtt.ValidValues)
                     {
-                        if (value == string.Empty) { continue; }
+                        if (value == string.Empty)
+                        {
+                            continue;
+                        }
 
                         if (wordToComplete.Equals(value, StringComparison.OrdinalIgnoreCase))
                         {
@@ -1777,23 +1909,8 @@ private static void ProcessParameter(
                     {
                         string realEntry = entry;
                         string completionText = entry;
-                        if (quote == string.Empty)
-                        {
-                            if (CompletionRequiresQuotes(entry, false))
-                            {
-                                realEntry = CodeGeneration.EscapeSingleQuotedStringContent(entry);
-                                completionText = "'" + realEntry + "'";
-                            }
-                        }
-                        else
-                        {
-                            if (quote.Equals("'", StringComparison.OrdinalIgnoreCase))
-                            {
-                                realEntry = CodeGeneration.EscapeSingleQuotedStringContent(entry);
-                            }
 
-                            completionText = quote + realEntry + quote;
-                        }
+                        completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                         result.Add(new CompletionResult(completionText, entry, CompletionResultType.ParameterValue, entry));
                     }
@@ -1803,52 +1920,117 @@ private static void ProcessParameter(
                 }
             }
 
-            NativeCommandArgumentCompletion(commandName, parameter.Parameter, result, commandAst, context, boundArguments);
-        }
-
-        private static IEnumerable<PSTypeName> NativeCommandArgumentCompletion_InferTypesOfArgument(
-            Dictionary<string, AstParameterArgumentPair> boundArguments,
-            CommandAst commandAst,
-            CompletionContext context,
-            string parameterName)
-        {
-            if (boundArguments == null)
+            if (parameterType.IsEnum)
             {
-                yield break;
-            }
+                RemoveLastNullCompletionResult(result);
 
-            AstParameterArgumentPair astParameterArgumentPair;
-            if (!boundArguments.TryGetValue(parameterName, out astParameterArgumentPair))
-            {
-                yield break;
-            }
+                IEnumerable enumValues = LanguagePrimitives.EnumSingleTypeConverter.GetEnumValues(parameterType);
 
-            Ast argumentAst = null;
-            switch (astParameterArgumentPair.ParameterArgumentType)
-            {
-                case AstParameterArgumentType.AstPair:
+                // Exclude values not accepted by ValidateRange-attributes
+                foreach (ValidateArgumentsAttribute att in parameter.Parameter.ValidationAttributes)
+                {
+                    if (att is ValidateRangeAttribute rangeAtt)
                     {
-                        AstPair astPair = (AstPair)astParameterArgumentPair;
-                        argumentAst = astPair.Argument;
+                        enumValues = rangeAtt.GetValidatedElements(enumValues);
                     }
+                }
 
-                    break;
+                string wordToComplete = context.WordToComplete ?? string.Empty;
+                string quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
-                case AstParameterArgumentType.PipeObject:
+                var pattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
+                var enumList = new List<string>();
+
+                foreach (Enum value in enumValues)
+                {
+                    string name = value.ToString();
+                    if (wordToComplete.Equals(name, StringComparison.OrdinalIgnoreCase))
                     {
-                        var pipelineAst = commandAst.Parent as PipelineAst;
-                        if (pipelineAst != null)
-                        {
-                            int i;
-                            for (i = 0; i < pipelineAst.PipelineElements.Count; i++)
-                            {
-                                if (pipelineAst.PipelineElements[i] == commandAst)
-                                    break;
-                            }
+                        string completionText = quote == string.Empty ? name : quote + name + quote;
+                        fullMatch = new CompletionResult(completionText, name, CompletionResultType.ParameterValue, name);
+                        continue;
+                    }
 
-                            if (i != 0)
-                            {
-                                argumentAst = pipelineAst.PipelineElements[i - 1];
+                    if (pattern.IsMatch(name))
+                    {
+                        enumList.Add(name);
+                    }
+                }
+
+                if (fullMatch != null)
+                {
+                    result.Add(fullMatch);
+                }
+
+                enumList.Sort();
+                result.AddRange(from entry in enumList
+                                let completionText = quote == string.Empty ? entry : quote + entry + quote
+                                select new CompletionResult(completionText, entry, CompletionResultType.ParameterValue, entry));
+
+                result.Add(CompletionResult.Null);
+                return;
+            }
+
+            if (parameterType.Equals(typeof(SwitchParameter)))
+            {
+                RemoveLastNullCompletionResult(result);
+
+                if (context.WordToComplete == string.Empty || context.WordToComplete.Equals("$", StringComparison.Ordinal))
+                {
+                    result.Add(new CompletionResult("$true", "$true", CompletionResultType.ParameterValue, "$true"));
+                    result.Add(new CompletionResult("$false", "$false", CompletionResultType.ParameterValue, "$false"));
+                }
+
+                result.Add(CompletionResult.Null);
+                return;
+            }
+
+            NativeCommandArgumentCompletion(commandName, parameter.Parameter, result, commandAst, context, boundArguments);
+        }
+
+        private static IEnumerable<PSTypeName> NativeCommandArgumentCompletion_InferTypesOfArgument(
+            Dictionary<string, AstParameterArgumentPair> boundArguments,
+            CommandAst commandAst,
+            CompletionContext context,
+            string parameterName)
+        {
+            if (boundArguments == null)
+            {
+                yield break;
+            }
+
+            AstParameterArgumentPair astParameterArgumentPair;
+            if (!boundArguments.TryGetValue(parameterName, out astParameterArgumentPair))
+            {
+                yield break;
+            }
+
+            Ast argumentAst = null;
+            switch (astParameterArgumentPair.ParameterArgumentType)
+            {
+                case AstParameterArgumentType.AstPair:
+                    {
+                        AstPair astPair = (AstPair)astParameterArgumentPair;
+                        argumentAst = astPair.Argument;
+                    }
+
+                    break;
+
+                case AstParameterArgumentType.PipeObject:
+                    {
+                        var pipelineAst = commandAst.Parent as PipelineAst;
+                        if (pipelineAst != null)
+                        {
+                            int i;
+                            for (i = 0; i < pipelineAst.PipelineElements.Count; i++)
+                            {
+                                if (pipelineAst.PipelineElements[i] == commandAst)
+                                    break;
+                            }
+
+                            if (i != 0)
+                            {
+                                argumentAst = pipelineAst.PipelineElements[i - 1];
                             }
                         }
                     }
@@ -1996,7 +2178,7 @@ private static void NativeCommandArgumentCompletion(
             string parameterName = parameter.Name;
 
             // Fall back to the commandAst command name if a command name is not found. This can be caused by a script block or AST with the matching function definition being passed to CompleteInput
-            // This allows for editors and other tools using CompleteInput with Script/AST definations to get values from RegisteredArgumentCompleters to better match the console experience.
+            // This allows for editors and other tools using CompleteInput with Script/AST definitions to get values from RegisteredArgumentCompleters to better match the console experience.
             // See issue https://github.com/PowerShell/PowerShell/issues/10567
             string actualCommandName = string.IsNullOrEmpty(commandName)
                         ? commandAst.GetCommandName()
@@ -2030,19 +2212,17 @@ private static void NativeCommandArgumentCompletion(
             {
                 try
                 {
-                    if (argumentCompleterAttribute.Type != null)
+                    var completer = argumentCompleterAttribute.CreateArgumentCompleter();
+
+                    if (completer != null)
                     {
-                        var completer = Activator.CreateInstance(argumentCompleterAttribute.Type) as IArgumentCompleter;
-                        if (completer != null)
+                        var customResults = completer.CompleteArgument(commandName, parameterName,
+                            context.WordToComplete, commandAst, GetBoundArgumentsAsHashtable(context));
+                        if (customResults != null)
                         {
-                            var customResults = completer.CompleteArgument(commandName, parameterName,
-                                context.WordToComplete, commandAst, GetBoundArgumentsAsHashtable(context));
-                            if (customResults != null)
-                            {
-                                result.AddRange(customResults);
-                                result.Add(CompletionResult.Null);
-                                return;
-                            }
+                            result.AddRange(customResults);
+                            result.Add(CompletionResult.Null);
+                            return;
                         }
                     }
                     else
@@ -2084,6 +2264,12 @@ private static void NativeCommandArgumentCompletion(
                             break;
                         }
 
+                        if (parameterName.Equals("ExcludeModule", StringComparison.OrdinalIgnoreCase))
+                        {
+                            NativeCompletionGetCommand(context, moduleName: null, parameterName, result);
+                            break;
+                        }
+
                         if (parameterName.Equals("Name", StringComparison.OrdinalIgnoreCase))
                         {
                             var moduleNames = NativeCommandArgumentCompletion_ExtractSecondaryArgument(boundArguments, "Module");
@@ -2122,6 +2308,22 @@ private static void NativeCommandArgumentCompletion(
                         NativeCompletionGetHelpCommand(context, parameterName, /* isHelpRelated: */ true, result);
                         break;
                     }
+                case "Save-Help":
+                    {
+                        if (parameterName.Equals("Module", StringComparison.OrdinalIgnoreCase))
+                        {
+                            CompleteModule(context, result);
+                        }
+                        break;
+                    }
+                case "Update-Help":
+                    {
+                        if (parameterName.Equals("Module", StringComparison.OrdinalIgnoreCase))
+                        {
+                            CompleteModule(context, result);
+                        }
+                        break;
+                    }
                 case "Invoke-Expression":
                     {
                         if (parameterName.Equals("Command", StringComparison.OrdinalIgnoreCase))
@@ -2275,7 +2477,7 @@ private static void NativeCommandArgumentCompletion(
                     {
                         if (parameterName.Equals("MemberName", StringComparison.OrdinalIgnoreCase))
                         {
-                            NativeCompletionMemberName(context, result, commandAst);
+                            NativeCompletionMemberName(context, result, commandAst, boundArguments?[parameterName], propertiesOnly: false);
                         }
 
                         break;
@@ -2284,14 +2486,32 @@ private static void NativeCommandArgumentCompletion(
                 case "Measure-Object":
                 case "Sort-Object":
                 case "Where-Object":
+                    {
+                        if (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase))
+                        {
+                            NativeCompletionMemberName(context, result, commandAst, boundArguments?[parameterName]);
+                        }
+                        else if (parameterName.Equals("Value", StringComparison.OrdinalIgnoreCase)
+                            && boundArguments?["Property"] is AstPair pair && pair.Argument is StringConstantExpressionAst stringAst)
+                        {
+                            NativeCompletionMemberValue(context, result, commandAst, stringAst.Value);
+                        }
+
+                        break;
+                    }
                 case "Format-Custom":
                 case "Format-List":
                 case "Format-Table":
                 case "Format-Wide":
                     {
-                        if (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase))
+                        if (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase)
+                         || parameterName.Equals("ExcludeProperty", StringComparison.OrdinalIgnoreCase))
+                        {
+                            NativeCompletionMemberName(context, result, commandAst, boundArguments?[parameterName]);
+                        }
+                        else if (parameterName.Equals("View", StringComparison.OrdinalIgnoreCase))
                         {
-                            NativeCompletionMemberName(context, result, commandAst);
+                            NativeCompletionFormatViewName(context, boundArguments, result, commandAst, commandName);
                         }
 
                         break;
@@ -2302,7 +2522,7 @@ private static void NativeCommandArgumentCompletion(
                          || parameterName.Equals("ExcludeProperty", StringComparison.OrdinalIgnoreCase)
                          || parameterName.Equals("ExpandProperty", StringComparison.OrdinalIgnoreCase))
                         {
-                            NativeCompletionMemberName(context, result, commandAst);
+                            NativeCompletionMemberName(context, result, commandAst, boundArguments?[parameterName]);
                         }
 
                         break;
@@ -2324,8 +2544,22 @@ private static void NativeCommandArgumentCompletion(
                 case "Invoke-CimMethod":
                 case "New-CimInstance":
                 case "Register-CimIndicationEvent":
+                case "Set-CimInstance":
                     {
-                        NativeCompletionCimCommands(parameterName, boundArguments, result, commandAst, context);
+                        // Avoids completion for parameters that expect a hashtable.
+                        if (parameterName.Equals("Arguments", StringComparison.OrdinalIgnoreCase)
+                            || (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase) && !commandName.Equals("Get-CimInstance")))
+                        {
+                            break;
+                        }
+
+                        HashSet<string> excludedValues = null;
+                        if (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase) && boundArguments["Property"] is AstPair pair)
+                        {
+                            excludedValues = GetParameterValues(pair, context.CursorPosition.Offset);
+                        }
+
+                        NativeCompletionCimCommands(parameterName, boundArguments, result, commandAst, context, excludedValues, commandName);
                         break;
                     }
 
@@ -2404,9 +2638,8 @@ private static ScriptBlock GetCustomArgumentCompleter(
                 }
             }
 
-            var registeredCompleters = optionKey.Equals("NativeArgumentCompleters", StringComparison.OrdinalIgnoreCase)
-                ? context.NativeArgumentCompleters
-                : context.CustomArgumentCompleters;
+            bool isNative = optionKey.Equals("NativeArgumentCompleters", StringComparison.OrdinalIgnoreCase);
+            var registeredCompleters = isNative ? context.NativeArgumentCompleters : context.CustomArgumentCompleters;
 
             if (registeredCompleters != null)
             {
@@ -2417,6 +2650,13 @@ private static ScriptBlock GetCustomArgumentCompleter(
                         return scriptBlock;
                     }
                 }
+
+                // For a native command, if a fallback completer is registered, then return it.
+                // For example, the 'Microsoft.PowerShell.UnixTabCompletion' module.
+                if (isNative && registeredCompleters.TryGetValue(RegisterArgumentCompleterCommand.FallbackCompleterKey, out scriptBlock))
+                {
+                    return scriptBlock;
+                }
             }
 
             return null;
@@ -2435,14 +2675,17 @@ private static bool InvokeScriptArgumentCompleter(
                 scriptBlock,
                 new object[] { commandName, parameterName, wordToComplete, commandAst, GetBoundArgumentsAsHashtable(context) },
                 resultList);
-            if (result)
-            {
-                resultList.Add(CompletionResult.Null);
-            }
 
             return result;
         }
 
+        /// <summary>
+        /// Invoke the custom argument completer and process its return values.
+        /// If we consider the completion successful, we add a null instance of the type 'CompletionResult'
+        /// to the end of the 'result' list to indicate that the argument completion has been processed, so we
+        /// will not go through the default argument completion even if the 'result' list is still empty.
+        /// </summary>
+        /// <returns>'true' if the argument completion was successful. 'false' otherwise.</returns>
         private static bool InvokeScriptArgumentCompleter(
             ScriptBlock scriptBlock,
             object[] argumentsToCompleter,
@@ -2462,20 +2705,44 @@ private static bool InvokeScriptArgumentCompleter(
                 return false;
             }
 
+            if (customResults.Count is 1 && customResults[0] is { BaseObject: "" } or null)
+            {
+                // If the script block returns a single empty string or a null value, we will treat it as if it has
+                // completed successfully but has no results to return.
+                // This allows a custom completer to suppress the default completions that we may fall back otherwise.
+                result.Add(CompletionResult.Null);
+                return true;
+            }
+
+            int initialCount = result.Count;
+
             foreach (var customResult in customResults)
             {
-                var resultAsCompletion = customResult.BaseObject as CompletionResult;
-                if (resultAsCompletion != null)
+                if (customResult is null)
+                {
+                    continue;
+                }
+
+                if (customResult.BaseObject is CompletionResult resultAsCompletion)
                 {
                     result.Add(resultAsCompletion);
                     continue;
                 }
 
                 var resultAsString = customResult.ToString();
-                result.Add(new CompletionResult(resultAsString));
+                if (!string.IsNullOrEmpty(resultAsString))
+                {
+                    result.Add(new CompletionResult(resultAsString));
+                }
             }
 
-            return true;
+            bool success = result.Count > initialCount;
+            if (success)
+            {
+                result.Add(CompletionResult.Null);
+            }
+
+            return success;
         }
 
         // All the methods for native command argument completion will add a null instance of the type CompletionResult to the end of the
@@ -2483,9 +2750,9 @@ private static bool InvokeScriptArgumentCompleter(
         // and has been processed already. So if the "result" list is still empty afterward, we will not go through the default argument completion anymore.
         #region Native Command Argument Completion
 
-        private static void RemoveLastNullCompletionResult(List<CompletionResult> result)
+        internal static void RemoveLastNullCompletionResult(List<CompletionResult> result)
         {
-            if (result.Count > 0 && result[result.Count - 1].Equals(CompletionResult.Null))
+            if (result?.Count > 0 && result[^1].Equals(CompletionResult.Null))
             {
                 result.RemoveAt(result.Count - 1);
             }
@@ -2496,7 +2763,9 @@ private static void NativeCompletionCimCommands(
             Dictionary<string, AstParameterArgumentPair> boundArguments,
             List<CompletionResult> result,
             CommandAst commandAst,
-            CompletionContext context)
+            CompletionContext context,
+            HashSet<string> excludedValues,
+            string commandName)
         {
             if (boundArguments != null)
             {
@@ -2517,6 +2786,7 @@ private static void NativeCompletionCimCommands(
                 }
             }
 
+            RemoveLastNullCompletionResult(result);
             if (parameter.Equals("Namespace", StringComparison.OrdinalIgnoreCase))
             {
                 NativeCompletionCimNamespace(result, context);
@@ -2562,6 +2832,16 @@ private static void NativeCompletionCimCommands(
                         {
                             NativeCompletionCimMethodName(pseudoboundCimNamespace, pseudoboundClassName, !gotInstance, result, context);
                         }
+                        else if (parameter.Equals("Arguments", StringComparison.OrdinalIgnoreCase))
+                        {
+                            string pseudoboundMethodName = NativeCommandArgumentCompletion_ExtractSecondaryArgument(boundArguments, "MethodName").FirstOrDefault();
+                            NativeCompletionCimMethodArgumentName(pseudoboundCimNamespace, pseudoboundClassName, pseudoboundMethodName, excludedValues, result, context);
+                        }
+                        else if (parameter.Equals("Property", StringComparison.OrdinalIgnoreCase))
+                        {
+                            bool includeReadOnly = !commandName.Equals("Set-CimInstance", StringComparison.OrdinalIgnoreCase);
+                            NativeCompletionCimPropertyName(pseudoboundCimNamespace, pseudoboundClassName, includeReadOnly, excludedValues, result, context);
+                        }
                     }
                 }
 
@@ -2598,7 +2878,7 @@ private static IEnumerable<string> NativeCompletionCimAssociationResultClassName
 
                     resultClassNames.AddRange(
                         cimSession.QueryInstances(cimNamespaceOfSource ?? "root/cimv2", "WQL", query)
-                            .Select(associationInstance => associationInstance.CimSystemProperties.ClassName));
+                            .Select(static associationInstance => associationInstance.CimSystemProperties.ClassName));
 
                     cimClass = cimClass.CimSuperClass;
                 }
@@ -2627,7 +2907,7 @@ private static void NativeCompletionCimAssociationResultClassName(
             WildcardPattern resultClassNamePattern = WildcardPattern.Get(context.WordToComplete + "*", WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
             result.AddRange(resultClassNames
                 .Where(resultClassNamePattern.IsMatch)
-                .Select(x => new CompletionResult(x, x, CompletionResultType.Type, string.Format(CultureInfo.InvariantCulture, "{0} -> {1}", pseudoboundClassName, x))));
+                .Select(x => new CompletionResult(x, x, CompletionResultType.Type, string.Create(CultureInfo.InvariantCulture, $"{pseudoboundClassName} -> {x}"))));
         }
 
         private static void NativeCompletionCimMethodName(
@@ -2658,7 +2938,7 @@ private static void NativeCompletionCimMethodName(
                     continue;
                 }
 
-                bool currentMethodIsStatic = methodDeclaration.Qualifiers.Any(q => q.Name.Equals("Static", StringComparison.OrdinalIgnoreCase));
+                bool currentMethodIsStatic = methodDeclaration.Qualifiers.Any(static q => q.Name.Equals("Static", StringComparison.OrdinalIgnoreCase));
                 if ((currentMethodIsStatic && !staticMethod) || (!currentMethodIsStatic && staticMethod))
                 {
                     continue;
@@ -2670,7 +2950,7 @@ private static void NativeCompletionCimMethodName(
                 bool gotFirstParameter = false;
                 foreach (var methodParameter in methodDeclaration.Parameters)
                 {
-                    bool outParameter = methodParameter.Qualifiers.Any(q => q.Name.Equals("Out", StringComparison.OrdinalIgnoreCase));
+                    bool outParameter = methodParameter.Qualifiers.Any(static q => q.Name.Equals("Out", StringComparison.OrdinalIgnoreCase));
 
                     if (!gotFirstParameter)
                     {
@@ -2701,7 +2981,83 @@ private static void NativeCompletionCimMethodName(
                 localResults.Add(new CompletionResult(methodName, methodName, CompletionResultType.Method, tooltipText.ToString()));
             }
 
-            result.AddRange(localResults.OrderBy(x => x.ListItemText, StringComparer.OrdinalIgnoreCase));
+            result.AddRange(localResults.OrderBy(static x => x.ListItemText, StringComparer.OrdinalIgnoreCase));
+        }
+
+        private static void NativeCompletionCimMethodArgumentName(
+            string pseudoboundNamespace,
+            string pseudoboundClassName,
+            string pseudoboundMethodName,
+            HashSet<string> excludedParameters,
+            List<CompletionResult> result,
+            CompletionContext context)
+        {
+            if (string.IsNullOrWhiteSpace(pseudoboundClassName) || string.IsNullOrWhiteSpace(pseudoboundMethodName))
+            {
+                return;
+            }
+
+            CimClass cimClass;
+            using (var cimSession = CimSession.Create(null))
+            {
+                using var options = new CimOperationOptions();
+                options.Flags |= CimOperationFlags.LocalizedQualifiers;
+                cimClass = cimSession.GetClass(pseudoboundNamespace ?? "root/cimv2", pseudoboundClassName, options);
+            }
+
+            var methodParameters = cimClass.CimClassMethods[pseudoboundMethodName]?.Parameters;
+            if (methodParameters is null)
+            {
+                return;
+            }
+
+            foreach (var parameter in methodParameters)
+            {
+                if ((string.IsNullOrEmpty(context.WordToComplete) || parameter.Name.StartsWith(context.WordToComplete, StringComparison.OrdinalIgnoreCase))
+                        && (excludedParameters is null || !excludedParameters.Contains(parameter.Name))
+                        && parameter.Qualifiers["In"]?.Value is true)
+                {
+                    string parameterDescription = parameter.Qualifiers["Description"]?.Value as string ?? string.Empty;
+                    string toolTip = $"[{CimInstanceAdapter.CimTypeToTypeNameDisplayString(parameter.CimType)}] {parameterDescription}";
+                    result.Add(new CompletionResult(parameter.Name, parameter.Name, CompletionResultType.Property, toolTip));
+                }
+            }
+        }
+
+        private static void NativeCompletionCimPropertyName(
+            string pseudoboundNamespace,
+            string pseudoboundClassName,
+            bool includeReadOnly,
+            HashSet<string> excludedProperties,
+            List<CompletionResult> result,
+            CompletionContext context)
+        {
+            if (string.IsNullOrWhiteSpace(pseudoboundClassName))
+            {
+                return;
+            }
+
+            CimClass cimClass;
+            using (var cimSession = CimSession.Create(null))
+            {
+                using var options = new CimOperationOptions();
+                options.Flags |= CimOperationFlags.LocalizedQualifiers;
+                cimClass = cimSession.GetClass(pseudoboundNamespace ?? "root/cimv2", pseudoboundClassName, options);
+            }
+
+            foreach (var property in cimClass.CimClassProperties)
+            {
+                bool isReadOnly = (property.Flags & CimFlags.ReadOnly) != 0;
+                if ((!isReadOnly || (isReadOnly && includeReadOnly))
+                    && (string.IsNullOrEmpty(context.WordToComplete) || property.Name.StartsWith(context.WordToComplete, StringComparison.OrdinalIgnoreCase))
+                    && (excludedProperties is null || !excludedProperties.Contains(property.Name)))
+                {
+                    string propertyDescription = property.Qualifiers["Description"]?.Value as string ?? string.Empty;
+                    string accessString = isReadOnly ? "{ get; }" : "{ get; set; }";
+                    string toolTip = $"[{CimInstanceAdapter.CimTypeToTypeNameDisplayString(property.CimType)}] {accessString} {propertyDescription}";
+                    result.Add(new CompletionResult(property.Name, property.Name, CompletionResultType.Property, toolTip));
+                }
+            }
         }
 
         private static readonly ConcurrentDictionary<string, IEnumerable<string>> s_cimNamespaceToClassNames =
@@ -2776,7 +3132,7 @@ private static void NativeCompletionCimNamespace(
             string prefixOfChildNamespace = string.Empty;
             if (!string.IsNullOrEmpty(context.WordToComplete))
             {
-                int lastSlashOrBackslash = context.WordToComplete.LastIndexOfAny(Utils.Separators.Directory);
+                int lastSlashOrBackslash = context.WordToComplete.AsSpan().LastIndexOfAny('\\', '/');
                 if (lastSlashOrBackslash != (-1))
                 {
                     containerNamespace = context.WordToComplete.Substring(0, lastSlashOrBackslash);
@@ -2802,7 +3158,7 @@ private static void NativeCompletionCimNamespace(
                             continue;
                         }
 
-                        if (!(namespaceNameProperty.Value is string childNamespace))
+                        if (namespaceNameProperty.Value is not string childNamespace)
                         {
                             continue;
                         }
@@ -2820,7 +3176,7 @@ private static void NativeCompletionCimNamespace(
                     }
             }
 
-            result.AddRange(namespaceResults.OrderBy(x => x.ListItemText, StringComparer.OrdinalIgnoreCase));
+            result.AddRange(namespaceResults.OrderBy(static x => x.ListItemText, StringComparer.OrdinalIgnoreCase));
         }
 
         private static void NativeCompletionGetCommand(CompletionContext context, string moduleName, string paramName, List<CompletionResult> result)
@@ -2847,39 +3203,46 @@ private static void NativeCompletionGetCommand(CompletionContext context, string
 
                 result.Add(CompletionResult.Null);
             }
-            else if (!string.IsNullOrEmpty(paramName) && paramName.Equals("Module", StringComparison.OrdinalIgnoreCase))
+            else if (!string.IsNullOrEmpty(paramName)
+                && (paramName.Equals("Module", StringComparison.OrdinalIgnoreCase)
+                || paramName.Equals("ExcludeModule", StringComparison.OrdinalIgnoreCase)))
             {
-                RemoveLastNullCompletionResult(result);
+                CompleteModule(context, result);
+            }
+        }
+
+        private static void CompleteModule(CompletionContext context, List<CompletionResult> result)
+        {
+            RemoveLastNullCompletionResult(result);
 
-                var modules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-                var moduleResults = CompleteModuleName(context, loadedModulesOnly: true);
-                if (moduleResults != null)
+            var modules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+            var moduleResults = CompleteModuleName(context, loadedModulesOnly: true);
+            if (moduleResults != null)
+            {
+                foreach (CompletionResult moduleResult in moduleResults)
                 {
-                    foreach (CompletionResult moduleResult in moduleResults)
+                    if (!modules.Contains(moduleResult.ToolTip))
                     {
-                        if (!modules.Contains(moduleResult.ToolTip))
-                        {
-                            modules.Add(moduleResult.ToolTip);
-                            result.Add(moduleResult);
-                        }
+                        modules.Add(moduleResult.ToolTip);
+                        result.Add(moduleResult);
                     }
                 }
+            }
 
-                moduleResults = CompleteModuleName(context, loadedModulesOnly: false);
-                if (moduleResults != null)
+            moduleResults = CompleteModuleName(context, loadedModulesOnly: false);
+            if (moduleResults != null)
+            {
+                foreach (CompletionResult moduleResult in moduleResults)
                 {
-                    foreach (CompletionResult moduleResult in moduleResults)
+                    if (!modules.Contains(moduleResult.ToolTip))
                     {
-                        if (!modules.Contains(moduleResult.ToolTip))
-                        {
-                            modules.Add(moduleResult.ToolTip);
-                            result.Add(moduleResult);
-                        }
+                        modules.Add(moduleResult.ToolTip);
+                        result.Add(moduleResult);
                     }
                 }
-
-                result.Add(CompletionResult.Null);
             }
+
+            result.Add(CompletionResult.Null);
         }
 
         private static void NativeCompletionGetHelpCommand(CompletionContext context, string paramName, bool isHelpRelated, List<CompletionResult> result)
@@ -2919,7 +3282,7 @@ private static void NativeCompletionEventLogCommands(CompletionContext context,
                 RemoveLastNullCompletionResult(result);
 
                 var logName = context.WordToComplete ?? string.Empty;
-                var quote = HandleDoubleAndSingleQuote(ref logName);
+                var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref logName);
 
                 if (!logName.EndsWith('*'))
                 {
@@ -2941,17 +3304,7 @@ private static void NativeCompletionEventLogCommands(CompletionContext context,
                         var completionText = eventLog.Log.ToString();
                         var listItemText = completionText;
 
-                        if (CompletionRequiresQuotes(completionText, false))
-                        {
-                            var quoteInUse = quote == string.Empty ? "'" : quote;
-                            if (quoteInUse == "'")
-                                completionText = completionText.Replace("'", "''");
-                            completionText = quoteInUse + completionText + quoteInUse;
-                        }
-                        else
-                        {
-                            completionText = quote + completionText + quote;
-                        }
+                        completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                         if (pattern.IsMatch(listItemText))
                         {
@@ -2970,7 +3323,7 @@ private static void NativeCompletionJobCommands(CompletionContext context, strin
                 return;
 
             var wordToComplete = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
             if (!wordToComplete.EndsWith('*'))
             {
@@ -3032,17 +3385,7 @@ private static void NativeCompletionJobCommands(CompletionContext context, strin
                     var completionText = psJob.Name;
                     var listItemText = completionText;
 
-                    if (CompletionRequiresQuotes(completionText, false))
-                    {
-                        var quoteInUse = quote == string.Empty ? "'" : quote;
-                        if (quoteInUse == "'")
-                            completionText = completionText.Replace("'", "''");
-                        completionText = quoteInUse + completionText + quoteInUse;
-                    }
-                    else
-                    {
-                        completionText = quote + completionText + quote;
-                    }
+                    completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                     result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                 }
@@ -3057,7 +3400,7 @@ private static void NativeCompletionScheduledJobCommands(CompletionContext conte
                 return;
 
             var wordToComplete = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
             if (!wordToComplete.EndsWith('*'))
             {
@@ -3107,17 +3450,7 @@ private static void NativeCompletionScheduledJobCommands(CompletionContext conte
                     var completionText = psJob.Name;
                     var listItemText = completionText;
 
-                    if (CompletionRequiresQuotes(completionText, false))
-                    {
-                        var quoteInUse = quote == string.Empty ? "'" : quote;
-                        if (quoteInUse == "'")
-                            completionText = completionText.Replace("'", "''");
-                        completionText = quoteInUse + completionText + quoteInUse;
-                    }
-                    else
-                    {
-                        completionText = quote + completionText + quote;
-                    }
+                    completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                     result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                 }
@@ -3191,7 +3524,7 @@ private static void NativeCompletionProcessCommands(CompletionContext context, s
                 return;
 
             var wordToComplete = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
             if (!wordToComplete.EndsWith('*'))
             {
@@ -3247,17 +3580,7 @@ private static void NativeCompletionProcessCommands(CompletionContext context, s
                         continue;
 
                     uniqueSet.Add(completionText);
-                    if (CompletionRequiresQuotes(completionText, false))
-                    {
-                        var quoteInUse = quote == string.Empty ? "'" : quote;
-                        if (quoteInUse == "'")
-                            completionText = completionText.Replace("'", "''");
-                        completionText = quoteInUse + completionText + quoteInUse;
-                    }
-                    else
-                    {
-                        completionText = quote + completionText + quote;
-                    }
+                    completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                     // on macOS, system processes names will be empty if PowerShell isn't run as `sudo`
                     if (string.IsNullOrEmpty(listItemText))
@@ -3282,7 +3605,7 @@ private static void NativeCompletionProviderCommands(CompletionContext context,
             RemoveLastNullCompletionResult(result);
 
             var providerName = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref providerName);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref providerName);
 
             if (!providerName.EndsWith('*'))
             {
@@ -3300,17 +3623,7 @@ private static void NativeCompletionProviderCommands(CompletionContext context,
                 var completionText = providerInfo.Name;
                 var listItemText = completionText;
 
-                if (CompletionRequiresQuotes(completionText, false))
-                {
-                    var quoteInUse = quote == string.Empty ? "'" : quote;
-                    if (quoteInUse == "'")
-                        completionText = completionText.Replace("'", "''");
-                    completionText = quoteInUse + completionText + quoteInUse;
-                }
-                else
-                {
-                    completionText = quote + completionText + quote;
-                }
+                completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                 result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
             }
@@ -3326,7 +3639,7 @@ private static void NativeCompletionDriveCommands(CompletionContext context, str
             RemoveLastNullCompletionResult(result);
 
             var wordToComplete = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
             if (!wordToComplete.EndsWith('*'))
             {
@@ -3348,17 +3661,7 @@ private static void NativeCompletionDriveCommands(CompletionContext context, str
                     var completionText = driveInfo.Name;
                     var listItemText = completionText;
 
-                    if (CompletionRequiresQuotes(completionText, false))
-                    {
-                        var quoteInUse = quote == string.Empty ? "'" : quote;
-                        if (quoteInUse == "'")
-                            completionText = completionText.Replace("'", "''");
-                        completionText = quoteInUse + completionText + quoteInUse;
-                    }
-                    else
-                    {
-                        completionText = quote + completionText + quote;
-                    }
+                    completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                     result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                 }
@@ -3373,7 +3676,7 @@ private static void NativeCompletionServiceCommands(CompletionContext context, s
                 return;
 
             var wordToComplete = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
             if (!wordToComplete.EndsWith('*'))
             {
@@ -3399,17 +3702,7 @@ private static void NativeCompletionServiceCommands(CompletionContext context, s
                         var completionText = serviceInfo.DisplayName;
                         var listItemText = completionText;
 
-                        if (CompletionRequiresQuotes(completionText, false))
-                        {
-                            var quoteInUse = quote == string.Empty ? "'" : quote;
-                            if (quoteInUse == "'")
-                                completionText = completionText.Replace("'", "''");
-                            completionText = quoteInUse + completionText + quoteInUse;
-                        }
-                        else
-                        {
-                            completionText = quote + completionText + quote;
-                        }
+                        completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                         result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                     }
@@ -3430,17 +3723,7 @@ private static void NativeCompletionServiceCommands(CompletionContext context, s
                         var completionText = serviceInfo.Name;
                         var listItemText = completionText;
 
-                        if (CompletionRequiresQuotes(completionText, false))
-                        {
-                            var quoteInUse = quote == string.Empty ? "'" : quote;
-                            if (quoteInUse == "'")
-                                completionText = completionText.Replace("'", "''");
-                            completionText = quoteInUse + completionText + quoteInUse;
-                        }
-                        else
-                        {
-                            completionText = quote + completionText + quote;
-                        }
+                        completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                         result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                     }
@@ -3460,7 +3743,7 @@ private static void NativeCompletionVariableCommands(CompletionContext context,
             RemoveLastNullCompletionResult(result);
 
             var variableName = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref variableName);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref variableName);
             if (!variableName.EndsWith('*'))
             {
                 variableName += "*";
@@ -3486,7 +3769,7 @@ private static void NativeCompletionVariableCommands(CompletionContext context,
                     completionText = completionText.Replace("*", "`*");
                 }
 
-                if (!completionText.Equals("$", StringComparison.Ordinal) && CompletionRequiresQuotes(completionText, false))
+                if (!completionText.Equals("$", StringComparison.Ordinal) && CompletionHelpers.CompletionRequiresQuotes(completionText))
                 {
                     var quoteInUse = effectiveQuote == string.Empty ? "'" : effectiveQuote;
                     if (quoteInUse == "'")
@@ -3519,7 +3802,7 @@ private static void NativeCompletionAliasCommands(CompletionContext context, str
             if (paramName.Equals("Name", StringComparison.OrdinalIgnoreCase))
             {
                 var commandName = context.WordToComplete ?? string.Empty;
-                var quote = HandleDoubleAndSingleQuote(ref commandName);
+                var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref commandName);
 
                 if (!commandName.EndsWith('*'))
                 {
@@ -3536,17 +3819,7 @@ private static void NativeCompletionAliasCommands(CompletionContext context, str
                         var completionText = aliasInfo.Name;
                         var listItemText = completionText;
 
-                        if (CompletionRequiresQuotes(completionText, false))
-                        {
-                            var quoteInUse = quote == string.Empty ? "'" : quote;
-                            if (quoteInUse == "'")
-                                completionText = completionText.Replace("'", "''");
-                            completionText = quoteInUse + completionText + quoteInUse;
-                        }
-                        else
-                        {
-                            completionText = quote + completionText + quote;
-                        }
+                        completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                         result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
                     }
@@ -3580,7 +3853,7 @@ private static void NativeCompletionTraceSourceCommands(CompletionContext contex
             RemoveLastNullCompletionResult(result);
 
             var traceSourceName = context.WordToComplete ?? string.Empty;
-            var quote = HandleDoubleAndSingleQuote(ref traceSourceName);
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref traceSourceName);
 
             if (!traceSourceName.EndsWith('*'))
             {
@@ -3599,17 +3872,7 @@ private static void NativeCompletionTraceSourceCommands(CompletionContext contex
                 var completionText = trace.Name;
                 var listItemText = completionText;
 
-                if (CompletionRequiresQuotes(completionText, false))
-                {
-                    var quoteInUse = quote == string.Empty ? "'" : quote;
-                    if (quoteInUse == "'")
-                        completionText = completionText.Replace("'", "''");
-                    completionText = quoteInUse + completionText + quoteInUse;
-                }
-                else
-                {
-                    completionText = quote + completionText + quote;
-                }
+                completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
 
                 result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, listItemText));
             }
@@ -3787,44 +4050,132 @@ private static void NativeCompletionPathArgument(CompletionContext context, stri
             result.Add(CompletionResult.Null);
         }
 
-        private static void NativeCompletionMemberName(CompletionContext context, List<CompletionResult> result, CommandAst commandAst)
+        private static IEnumerable<PSTypeName> GetInferenceTypes(CompletionContext context, CommandAst commandAst)
         {
             // Command is something like where-object/foreach-object/format-list/etc. where there is a parameter that is a property name
             // and we want member names based on the input object, which is either the parameter InputObject, or comes from the pipeline.
-            if (!(commandAst.Parent is PipelineAst pipelineAst))
-                return;
+            if (commandAst.Parent is not PipelineAst pipelineAst)
+            {
+                return null;
+            }
 
             int i;
             for (i = 0; i < pipelineAst.PipelineElements.Count; i++)
             {
                 if (pipelineAst.PipelineElements[i] == commandAst)
+                {
                     break;
+                }
             }
 
             IEnumerable<PSTypeName> prevType = null;
             if (i == 0)
             {
+                // based on a type of the argument which is binded to 'InputObject' parameter.
                 AstParameterArgumentPair pair;
                 if (!context.PseudoBindingInfo.BoundArguments.TryGetValue("InputObject", out pair)
                     || !pair.ArgumentSpecified)
                 {
-                    return;
+                    return null;
                 }
 
                 var astPair = pair as AstPair;
                 if (astPair == null || astPair.Argument == null)
                 {
-                    return;
+                    return null;
                 }
 
                 prevType = AstTypeInference.InferTypeOf(astPair.Argument, context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
             }
             else
             {
+                // based on OutputTypeAttribute() of the first cmdlet in pipeline.
                 prevType = AstTypeInference.InferTypeOf(pipelineAst.PipelineElements[i - 1], context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
             }
 
-            CompleteMemberByInferredType(context.TypeInferenceContext, prevType, result, context.WordToComplete + "*", filter: IsPropertyMember, isStatic: false);
+            return prevType;
+        }
+
+        private static void NativeCompletionMemberName(CompletionContext context, List<CompletionResult> result, CommandAst commandAst, AstParameterArgumentPair parameterInfo, bool propertiesOnly = true)
+        {
+            IEnumerable<PSTypeName> prevType = TypeInferenceVisitor.GetInferredEnumeratedTypes(GetInferenceTypes(context, commandAst));
+            if (prevType is not null)
+            {
+                HashSet<string> excludedMembers = null;
+                if (parameterInfo is AstPair pair)
+                {
+                    excludedMembers = GetParameterValues(pair, context.CursorPosition.Offset);
+                }
+
+                Func<object, bool> filter = propertiesOnly ? IsPropertyMember : null;
+                CompleteMemberByInferredType(context.TypeInferenceContext, prevType, result, context.WordToComplete + "*", filter, isStatic: false, excludedMembers, addMethodParenthesis: false);
+            }
+
+            result.Add(CompletionResult.Null);
+        }
+
+        private static void NativeCompletionMemberValue(CompletionContext context, List<CompletionResult> result, CommandAst commandAst, string propertyName)
+        {
+            string wordToComplete = context.WordToComplete.Trim('"', '\'');
+            IEnumerable<PSTypeName> prevTypes = GetInferenceTypes(context, commandAst);
+            if (prevTypes is not null)
+            {
+                foreach (var type in prevTypes)
+                {
+                    if (type.Type is null)
+                    {
+                        continue;
+                    }
+
+                    PropertyInfo property = type.Type.GetProperty(propertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
+                    if (property is not null && property.PropertyType.IsEnum)
+                    {
+                        foreach (var value in property.PropertyType.GetEnumNames())
+                        {
+                            if (value.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
+                            {
+                                result.Add(new CompletionResult(value, value, CompletionResultType.ParameterValue, value));
+                            }
+                        }
+
+                        break;
+                    }
+                }
+            }
+
+            result.Add(CompletionResult.Null);
+        }
+
+        /// <summary>
+        /// Returns all string values bound to a parameter except the one the cursor is currently at.
+        /// </summary>
+        private static HashSet<string>GetParameterValues(AstPair parameter, int cursorOffset)
+        {
+            var result = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+            var parameterValues = parameter.Argument.FindAll(ast => !(cursorOffset >= ast.Extent.StartOffset && cursorOffset <= ast.Extent.EndOffset) && ast is StringConstantExpressionAst, searchNestedScriptBlocks: false);
+            foreach (Ast ast in parameterValues)
+            {
+                result.Add(ast.Extent.Text);
+            }
+
+            return result;
+        }
+
+        private static void NativeCompletionFormatViewName(
+            CompletionContext context,
+            Dictionary<string, AstParameterArgumentPair> boundArguments,
+            List<CompletionResult> result,
+            CommandAst commandAst,
+            string commandName)
+        {
+            IEnumerable<PSTypeName> prevType = NativeCommandArgumentCompletion_InferTypesOfArgument(boundArguments, commandAst, context, "InputObject");
+
+            if (prevType is not null)
+            {
+                string[] inferTypeNames = prevType.Select(t => t.Name).ToArray();
+                CompleteFormatViewByInferredType(context, inferTypeNames, result, commandName);
+            }
+
             result.Add(CompletionResult.Null);
         }
 
@@ -3952,9 +4303,11 @@ private static ArgumentLocation FindTargetArgumentLocation(Collection<AstParamet
                                     return GenerateArgumentLocation(prevArg, position);
                                 }
 
-                                if (!arg.ParameterContainsArgument && arg.Argument.Extent.StartOffset > token.Extent.StartOffset)
+                                if ((token.Kind == TokenKind.Parameter && token.Extent.StartOffset == arg.Parameter.Extent.StartOffset)
+                                    || (token.Extent.StartOffset > arg.Argument.Extent.StartOffset && token.Extent.EndOffset < arg.Argument.Extent.EndOffset))
                                 {
-                                    // case: Get-Cmdlet -Param <tab> abc
+                                    // case 1: Get-Cmdlet -Param <tab> abc
+                                    // case 2: dir -Path .\abc.txt, <tab> -File
                                     return new ArgumentLocation() { Argument = arg, IsPositional = false, Position = -1 };
                                 }
                             }
@@ -4124,374 +4477,738 @@ internal static IEnumerable<CompletionResult> CompleteFilename(CompletionContext
         internal static IEnumerable<CompletionResult> CompleteFilename(CompletionContext context, bool containerOnly, HashSet<string> extension)
         {
             var wordToComplete = context.WordToComplete;
-            var quote = HandleDoubleAndSingleQuote(ref wordToComplete);
-            var results = new List<CompletionResult>();
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
 
-            // First, try to match \\server\share
-            var shareMatch = Regex.Match(wordToComplete, "^\\\\\\\\([^\\\\]+)\\\\([^\\\\]*)$");
+            // Matches file shares with and without the provider name and with either slash direction.
+            // Avoids matching Windows device paths like \\.\CDROM0 and \\?\Volume{b8f3fc1c-5cd6-4553-91e2-d6814c4cd375}\
+            var shareMatch = s_shareMatch.Match(wordToComplete);
             if (shareMatch.Success)
             {
                 // Only match share names, no filenames.
-                var server = shareMatch.Groups[1].Value;
-                var sharePattern = WildcardPattern.Get(shareMatch.Groups[2].Value + "*", WildcardOptions.IgnoreCase);
+                var provider = shareMatch.Groups[1].Value;
+                var server = shareMatch.Groups[2].Value;
+                var sharePattern = WildcardPattern.Get(shareMatch.Groups[3].Value + "*", WildcardOptions.IgnoreCase);
                 var ignoreHidden = context.GetOption("IgnoreHiddenShares", @default: false);
                 var shares = GetFileShares(server, ignoreHidden);
+                if (shares.Count == 0)
+                {
+                    return CommandCompletion.EmptyCompletionResult;
+                }
+
+                var shareResults = new List<CompletionResult>(shares.Count);
                 foreach (var share in shares)
                 {
                     if (sharePattern.IsMatch(share))
                     {
-                        string shareFullPath = "\\\\" + server + "\\" + share;
-                        if (quote != string.Empty)
+                        string sharePath = $"\\\\{server}\\{share}";
+                        string completionText;
+                        if (quote == string.Empty)
                         {
-                            shareFullPath = quote + shareFullPath + quote;
+                            completionText = share.Contains(' ')
+                                ? $"'{provider}{sharePath}'"
+                                : $"{provider}{sharePath}";
+                        }
+                        else
+                        {
+                            completionText = $"{quote}{provider}{sharePath}{quote}";
                         }
 
-                        results.Add(new CompletionResult(shareFullPath, shareFullPath, CompletionResultType.ProviderContainer, shareFullPath));
+                        shareResults.Add(new CompletionResult(completionText, share, CompletionResultType.ProviderContainer, sharePath));
                     }
                 }
+
+                return shareResults;
+            }
+
+            string filter;
+            string basePath;
+            int providerSeparatorIndex = -1;
+            bool defaultRelativePath = false;
+            bool inputUsedHomeChar = false;
+
+            if (string.IsNullOrEmpty(wordToComplete))
+            {
+                filter = "*";
+                basePath = ".";
+                defaultRelativePath = true;
             }
             else
             {
-                // We want to prefer relative paths in a completion result unless the user has already
-                // specified a drive or portion of the path.
-                var executionContext = context.ExecutionContext;
-                var defaultRelative = string.IsNullOrWhiteSpace(wordToComplete)
-                                      || (wordToComplete.IndexOfAny(Utils.Separators.Directory) != 0 &&
-                                          !Regex.Match(wordToComplete, @"^~[\\/]+.*").Success &&
-                                          !executionContext.LocationGlobber.IsAbsolutePath(wordToComplete, out _));
-                var relativePaths = context.GetOption("RelativePaths", @default: defaultRelative);
-                var useLiteralPath = context.GetOption("LiteralPaths", @default: false);
+                providerSeparatorIndex = wordToComplete.IndexOf("::", StringComparison.Ordinal);
+                int pathStartOffset = providerSeparatorIndex == -1 ? 0 : providerSeparatorIndex + 2;
+                inputUsedHomeChar = pathStartOffset + 2 <= wordToComplete.Length
+                    && wordToComplete[pathStartOffset] is '~'
+                    && wordToComplete[pathStartOffset + 1] is '/' or '\\';
 
-                if (useLiteralPath && LocationGlobber.StringContainsGlobCharacters(wordToComplete))
+                // This simple analysis is quick but doesn't handle scenarios where a separator character is not actually a separator
+                // For example "\" or ":" in *nix filenames. This is only a problem if it appears to be the last separator though.
+                int lastSeparatorIndex = wordToComplete.LastIndexOfAny(Utils.Separators.DirectoryOrDrive);
+                if (lastSeparatorIndex == -1)
                 {
-                    wordToComplete = WildcardPattern.Escape(wordToComplete, Utils.Separators.StarOrQuestion);
+                    // Input is a simple word with no path separators like: "Program Files"
+                    filter = $"{wordToComplete}*";
+                    basePath = ".";
+                    defaultRelativePath = true;
                 }
-
-                if (!defaultRelative && wordToComplete.Length >= 2 && wordToComplete[1] == ':' && char.IsLetter(wordToComplete[0]) && executionContext != null)
-                {
-                    // We don't actually need the drive, but the drive must be "mounted" in PowerShell before completion
-                    // can succeed.  This call will mount the drive if it wasn't already.
-                    executionContext.SessionState.Drive.GetAtScope(wordToComplete.Substring(0, 1), "global");
-                }
-
-                var powerShellExecutionHelper = context.Helper;
-                powerShellExecutionHelper
-                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Resolve-Path")
-                    .AddParameter("Path", wordToComplete + "*");
-
-                Exception exceptionThrown;
-                var psobjs = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-
-                if (psobjs != null)
+                else
                 {
-                    var isFileSystem = false;
-                    var wordContainsProviderId = ProviderSpecified(wordToComplete);
-
-                    if (psobjs.Count > 0)
+                    if (lastSeparatorIndex + 1 == wordToComplete.Length)
                     {
-                        dynamic firstObj = psobjs[0];
-                        var provider = firstObj.Provider as ProviderInfo;
-                        isFileSystem = provider != null &&
-                                       provider.Name.Equals(FileSystemProvider.ProviderName,
-                                                            StringComparison.OrdinalIgnoreCase);
+                        // Input ends with a separator like: "./", "filesystem::" or "C:"
+                        filter = "*";
+                        basePath = wordToComplete;
                     }
                     else
                     {
-                        try
-                        {
-                            ProviderInfo provider;
-                            if (defaultRelative)
-                            {
-                                provider = executionContext.EngineSessionState.CurrentDrive.Provider;
-                            }
-                            else
-                            {
-                                executionContext.LocationGlobber.GetProviderPath(wordToComplete, out provider);
-                            }
-
-                            isFileSystem = provider != null &&
-                                           provider.Name.Equals(FileSystemProvider.ProviderName,
-                                                                StringComparison.OrdinalIgnoreCase);
-                        }
-                        catch (Exception)
-                        {
-                        }
+                        // Input contains a separator, but doesn't end with one like: "C:\Program Fil" or "Registry::HKEY_LOC"
+                        filter = $"{wordToComplete.Substring(lastSeparatorIndex + 1)}*";
+                        basePath = wordToComplete.Substring(0, lastSeparatorIndex + 1);
                     }
 
-                    if (isFileSystem)
+                    if (!inputUsedHomeChar && basePath[0] is not '/' and not '\\')
                     {
-                        bool hiddenFilesAreHandled = false;
+                        defaultRelativePath = !context.ExecutionContext.LocationGlobber.IsAbsolutePath(wordToComplete, out _);
+                    }
+                }
+            }
 
-                        if (psobjs.Count > 0 && !LocationGlobber.StringContainsGlobCharacters(wordToComplete))
-                        {
-                            string leaf = null;
-                            string pathWithoutProvider = wordContainsProviderId
-                                    ? wordToComplete.Substring(wordToComplete.IndexOf(':') + 2)
-                                    : wordToComplete;
+            StringConstantType stringType;
+            switch (quote)
+            {
+                case "":
+                    stringType = StringConstantType.BareWord;
+                    break;
 
-                            try
-                            {
-                                leaf = Path.GetFileName(pathWithoutProvider);
-                            }
-                            catch (Exception)
-                            {
-                            }
+                case "\"":
+                    stringType = StringConstantType.DoubleQuoted;
+                    break;
+
+                default:
+                    stringType = StringConstantType.SingleQuoted;
+                    break;
+            }
 
-                            var notHiddenEntries = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-                            string providerPath = null;
+            var useLiteralPath = context.GetOption("LiteralPaths", @default: false);
+            if (useLiteralPath)
+            {
+                basePath = EscapePath(basePath, stringType, useLiteralPath, out _);
+            }
 
-                            foreach (dynamic entry in psobjs)
-                            {
-                                providerPath = entry.ProviderPath;
-                                if (string.IsNullOrEmpty(providerPath))
-                                {
-                                    // This is unexpected. ProviderPath should never be null or an empty string
-                                    leaf = null;
-                                    break;
-                                }
+            PowerShell currentPS = context.Helper
+                .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Resolve-Path")
+                .AddParameter("Path", basePath);
 
-                                if (!notHiddenEntries.Contains(providerPath))
-                                {
-                                    notHiddenEntries.Add(providerPath);
-                                }
-                            }
+            string relativeBasePath;
+            var useRelativePath = context.GetOption("RelativePaths", @default: defaultRelativePath);
+            if (useRelativePath)
+            {
+                if (providerSeparatorIndex != -1)
+                {
+                    // User must have requested relative paths but that's not valid with provider paths.
+                    return CommandCompletion.EmptyCompletionResult;
+                }
 
-                            if (leaf != null)
-                            {
-                                leaf += "*";
-                                var parentPath = Path.GetDirectoryName(providerPath);
+                var lastAst = context.RelatedAsts?[^1];
+                if (lastAst?.Parent is UsingStatementAst usingStatement
+                    && usingStatement.UsingStatementKind is UsingStatementKind.Module or UsingStatementKind.Assembly
+                    && lastAst.Extent.File is not null)
+                {
+                    relativeBasePath = Directory.GetParent(lastAst.Extent.File).FullName;
+                    _ = currentPS.AddParameter("RelativeBasePath", relativeBasePath);
+                }
+                else
+                {
+                    relativeBasePath = context.ExecutionContext.SessionState.Internal.CurrentLocation.ProviderPath;
+                }
+            }
+            else
+            {
+                relativeBasePath = string.Empty;
+            }
 
-                                // ProviderPath should be absolute path for FileSystem entries
-                                if (!string.IsNullOrEmpty(parentPath))
-                                {
-                                    string[] entries = null;
-                                    try
-                                    {
-                                        entries = Directory.GetFileSystemEntries(parentPath, leaf, _enumerationOptions);
-                                    }
-                                    catch (Exception)
-                                    {
-                                    }
+            var resolvedPaths = context.Helper.ExecuteCurrentPowerShell(out _);
+            if (resolvedPaths is null || resolvedPaths.Count == 0)
+            {
+                return CommandCompletion.EmptyCompletionResult;
+            }
 
-                                    if (entries != null)
-                                    {
-                                        hiddenFilesAreHandled = true;
+            var resolvedProvider = ((PathInfo)resolvedPaths[0].BaseObject).Provider;
+            string providerPrefix;
+            if (providerSeparatorIndex == -1)
+            {
+                providerPrefix = string.Empty;
+            }
+            else if (providerSeparatorIndex == resolvedProvider.Name.Length)
+            {
+                providerPrefix = $"{resolvedProvider.Name}::";
+            }
+            else
+            {
+                providerPrefix = $"{resolvedProvider.ModuleName}\\{resolvedProvider.Name}::";
+            }
 
-                                        if (entries.Length > notHiddenEntries.Count)
-                                        {
-                                            // Do the iteration only if there are hidden files
-                                            foreach (var entry in entries)
-                                            {
-                                                if (notHiddenEntries.Contains(entry))
-                                                    continue;
-
-                                                var fileInfo = new FileInfo(entry);
-                                                try
-                                                {
-                                                    if ((fileInfo.Attributes & FileAttributes.Hidden) != 0)
-                                                    {
-                                                        PSObject wrapper = PSObject.AsPSObject(entry);
-                                                        psobjs.Add(wrapper);
-                                                    }
-                                                }
-                                                catch
-                                                {
-                                                    // do nothing if can't get file attributes
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
+            List<CompletionResult> results;
+            switch (resolvedProvider.Name)
+            {
+                case FileSystemProvider.ProviderName:
+                    results = GetFileSystemProviderResults(
+                        context,
+                        resolvedProvider,
+                        resolvedPaths,
+                        filter,
+                        extension,
+                        containerOnly,
+                        useRelativePath,
+                        useLiteralPath,
+                        inputUsedHomeChar,
+                        providerPrefix,
+                        stringType,
+                        relativeBasePath);
+                    break;
 
-                        if (!hiddenFilesAreHandled)
-                        {
-                            powerShellExecutionHelper
-                                .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-ChildItem")
-                                .AddParameter("Path", wordToComplete + "*")
-                                .AddParameter("Hidden", true);
+                default:
+                    results = GetDefaultProviderResults(
+                        context,
+                        resolvedProvider,
+                        resolvedPaths,
+                        filter,
+                        containerOnly,
+                        useRelativePath,
+                        useLiteralPath,
+                        inputUsedHomeChar,
+                        providerPrefix,
+                        stringType);
+                    break;
+            }
 
-                            var hiddenItems = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-                            if (hiddenItems != null && hiddenItems.Count > 0)
-                            {
-                                foreach (var hiddenItem in hiddenItems)
-                                {
-                                    psobjs.Add(hiddenItem);
-                                }
-                            }
-                        }
-                    }
+            return results.OrderBy(x => x.ToolTip);
+        }
 
-                    // Sorting the results by the path
-                    var sortedPsobjs = psobjs.OrderBy(a => a, new ItemPathComparer());
+        /// <summary>
+        /// Helper method for generating path completion results for the file system provider.
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="provider"></param>
+        /// <param name="resolvedPaths"></param>
+        /// <param name="filterText"></param>
+        /// <param name="includedExtensions"></param>
+        /// <param name="containersOnly"></param>
+        /// <param name="relativePaths"></param>
+        /// <param name="literalPaths"></param>
+        /// <param name="inputUsedHome"></param>
+        /// <param name="providerPrefix"></param>
+        /// <param name="stringType"></param>
+        /// <param name="relativeBasePath"></param>
+        /// <returns></returns>
+        private static List<CompletionResult> GetFileSystemProviderResults(
+            CompletionContext context,
+            ProviderInfo provider,
+            Collection<PSObject> resolvedPaths,
+            string filterText,
+            HashSet<string> includedExtensions,
+            bool containersOnly,
+            bool relativePaths,
+            bool literalPaths,
+            bool inputUsedHome,
+            string providerPrefix,
+            StringConstantType stringType,
+            string relativeBasePath)
+        {
+#if DEBUG
+            Diagnostics.Assert(provider.Name.Equals(FileSystemProvider.ProviderName), "Provider should be filesystem provider.");
+#endif
+            var enumerationOptions = _enumerationOptions;
+            var results = new List<CompletionResult>();
+            string homePath = inputUsedHome && !string.IsNullOrEmpty(provider.Home) ? provider.Home : null;
 
-                    foreach (PSObject psobj in sortedPsobjs)
-                    {
-                        object baseObj = PSObject.Base(psobj);
-                        string path = null, providerPath = null;
+            WildcardPattern wildcardFilter;
+            if (WildcardPattern.ContainsRangeWildcard(filterText))
+            {
+                wildcardFilter = WildcardPattern.Get(filterText, WildcardOptions.IgnoreCase);
+                filterText = "*";
+            }
+            else
+            {
+                wildcardFilter = null;
+            }
 
-                        // Get the path, the PSObject could be:
-                        // 1. a PathInfo object -- results of Resolve-Path
-                        // 2. a FileSystemInfo Object -- results of Get-ChildItem
-                        // 3. a string -- the path results return by the direct .NET API invocation
-                        var baseObjAsPathInfo = baseObj as PathInfo;
-                        if (baseObjAsPathInfo != null)
-                        {
-                            path = baseObjAsPathInfo.Path;
-                            providerPath = baseObjAsPathInfo.ProviderPath;
-                        }
-                        else if (baseObj is FileSystemInfo)
-                        {
-                            // The target provider is the FileSystem
-                            dynamic dirResult = psobj;
-                            providerPath = dirResult.FullName;
-                            path = wordContainsProviderId ? dirResult.PSPath : providerPath;
-                        }
-                        else
-                        {
-                            var baseObjAsString = baseObj as string;
-                            if (baseObjAsString != null)
-                            {
-                                // The target provider is the FileSystem
-                                providerPath = baseObjAsString;
-                                path = wordContainsProviderId
-                                    ? FileSystemProvider.ProviderName + "::" + baseObjAsString
-                                    : providerPath;
-                            }
-                        }
+            foreach (var item in resolvedPaths)
+            {
+                var pathInfo = (PathInfo)item.BaseObject;
+                var dirInfo = new DirectoryInfo(pathInfo.ProviderPath);
 
-                        if (path == null) continue;
-                        if (isFileSystem && providerPath == null) continue;
+                bool baseQuotesNeeded = false;
+                string basePath;
+                if (!relativePaths)
+                {
+                    if (pathInfo.Drive is null)
+                    {
+                        basePath = dirInfo.FullName;
+                    }
+                    else
+                    {
+                        int stringStartIndex = pathInfo.Drive.Root.EndsWith(provider.ItemSeparator) && pathInfo.Drive.Root.Length > 1
+                            ? pathInfo.Drive.Root.Length - 1
+                            : pathInfo.Drive.Root.Length;
 
-                        string completionText;
-                        if (relativePaths)
-                        {
-                            try
-                            {
-                                var sessionStateInternal = executionContext.EngineSessionState;
-                                completionText = sessionStateInternal.NormalizeRelativePath(path, sessionStateInternal.CurrentLocation.ProviderPath);
-                                string parentDirectory = ".." + StringLiterals.DefaultPathSeparator;
-                                if (!completionText.StartsWith(parentDirectory, StringComparison.Ordinal))
-                                    completionText = Path.Combine(".", completionText);
-                            }
-                            catch (Exception)
-                            {
-                                // The object at the specified path is not accessable, such as c:\hiberfil.sys (for hibernation) or c:\pagefile.sys (for paging)
-                                // We ignore those files
-                                continue;
-                            }
-                        }
-                        else
-                        {
-                            completionText = path;
-                        }
+                        basePath = pathInfo.Drive.VolumeSeparatedByColon
+                            ? string.Concat(pathInfo.Drive.Name, ":", dirInfo.FullName.AsSpan(stringStartIndex))
+                            : string.Concat(pathInfo.Drive.Name, dirInfo.FullName.AsSpan(stringStartIndex));
+                    }
 
-                        if (ProviderSpecified(completionText) && !wordContainsProviderId)
-                        {
-                            // Remove the provider id from the path: cd \\scratch2\scratch\dongbw
-                            var index = completionText.IndexOf(':');
-                            completionText = completionText.Substring(index + 2);
-                        }
+                    basePath = basePath.EndsWith(provider.ItemSeparator)
+                        ? providerPrefix + basePath
+                        : providerPrefix + basePath + provider.ItemSeparator;
+                    basePath = RebuildPathWithVars(basePath, homePath, stringType, literalPaths, out baseQuotesNeeded);
+                }
+                else
+                {
+                    basePath = null;
+                }
+                IEnumerable <FileSystemInfo> fileSystemObjects = containersOnly
+                    ? dirInfo.EnumerateDirectories(filterText, enumerationOptions)
+                    : dirInfo.EnumerateFileSystemInfos(filterText, enumerationOptions);
 
-                        if (CompletionRequiresQuotes(completionText, !useLiteralPath))
-                        {
-                            var quoteInUse = quote == string.Empty ? "'" : quote;
-                            if (quoteInUse == "'")
-                            {
-                                completionText = completionText.Replace("'", "''");
-                            }
-                            else
-                            {
-                                // When double quote is in use, we have to escape the backtip and '$' even when using literal path
-                                //   Get-Content -LiteralPath ".\a``g.txt"
-                                completionText = completionText.Replace("`", "``");
-                                completionText = completionText.Replace("$", "`$");
-                            }
+                foreach (var entry in fileSystemObjects)
+                {
+                    bool isContainer = entry.Attributes.HasFlag(FileAttributes.Directory);
+                    if (!isContainer && includedExtensions is not null && !includedExtensions.Contains(entry.Extension))
+                    {
+                        continue;
+                    }
 
-                            if (!useLiteralPath)
-                            {
-                                if (quoteInUse == "'")
-                                {
-                                    completionText = completionText.Replace("[", "`[");
-                                    completionText = completionText.Replace("]", "`]");
-                                }
-                                else
-                                {
-                                    completionText = completionText.Replace("[", "``[");
-                                    completionText = completionText.Replace("]", "``]");
-                                }
-                            }
+                    var entryName = entry.Name;
+                    if (wildcardFilter is not null && !wildcardFilter.IsMatch(entryName))
+                    {
+                        continue;
+                    }
 
-                            completionText = quoteInUse + completionText + quoteInUse;
-                        }
-                        else if (quote != string.Empty)
+                    if (basePath is null)
+                    {
+                        basePath = context.ExecutionContext.EngineSessionState.NormalizeRelativePath(
+                            entry.FullName,
+                            relativeBasePath);
+                        if (!basePath.StartsWith($"..{provider.ItemSeparator}", StringComparison.Ordinal))
                         {
-                            completionText = quote + completionText + quote;
+                            basePath = $".{provider.ItemSeparator}{basePath}";
                         }
 
-                        if (isFileSystem)
+                        basePath = basePath.Remove(basePath.Length - entry.Name.Length);
+                        basePath = RebuildPathWithVars(basePath, homePath, stringType, literalPaths, out baseQuotesNeeded);
+                    }
+
+                    var resultType = isContainer
+                        ? CompletionResultType.ProviderContainer
+                        : CompletionResultType.ProviderItem;
+
+                    bool leafQuotesNeeded;
+                    var completionText = NewPathCompletionText(
+                        basePath,
+                        EscapePath(entryName, stringType, literalPaths, out leafQuotesNeeded),
+                        stringType,
+                        containsNestedExpressions: false,
+                        forceQuotes: baseQuotesNeeded || leafQuotesNeeded,
+                        addAmpersand: false);
+                    results.Add(new CompletionResult(completionText, entryName, resultType, entry.FullName));
+                }
+            }
+
+            return results;
+        }
+
+        /// <summary>
+        /// Helper method for generating path completion results standard providers that don't need any special treatment.
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="provider"></param>
+        /// <param name="resolvedPaths"></param>
+        /// <param name="filterText"></param>
+        /// <param name="containersOnly"></param>
+        /// <param name="relativePaths"></param>
+        /// <param name="literalPaths"></param>
+        /// <param name="inputUsedHome"></param>
+        /// <param name="providerPrefix"></param>
+        /// <param name="stringType"></param>
+        /// <returns></returns>
+        private static List<CompletionResult> GetDefaultProviderResults(
+            CompletionContext context,
+            ProviderInfo provider,
+            Collection<PSObject> resolvedPaths,
+            string filterText,
+            bool containersOnly,
+            bool relativePaths,
+            bool literalPaths,
+            bool inputUsedHome,
+            string providerPrefix,
+            StringConstantType stringType)
+        {
+            string homePath = inputUsedHome && !string.IsNullOrEmpty(provider.Home)
+                ? provider.Home
+                : null;
+
+            var pattern = WildcardPattern.Get(filterText, WildcardOptions.IgnoreCase);
+            var results = new List<CompletionResult>();
+
+            foreach (var item in resolvedPaths)
+            {
+                var pathInfo = (PathInfo)item.BaseObject;
+                string baseTooltip = pathInfo.ProviderPath.Equals(string.Empty, StringComparison.Ordinal)
+                    ? pathInfo.Path
+                    : pathInfo.ProviderPath;
+                if (baseTooltip[^1] is not '\\' and not '/' and not ':')
+                {
+                    baseTooltip += provider.ItemSeparator;
+                }
+
+                _ = context.Helper.CurrentPowerShell
+                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-ChildItem")
+                    .AddParameter("LiteralPath", pathInfo.Path);
+
+                bool hadErrors;
+                var childItemOutput = context.Helper.ExecuteCurrentPowerShell(out _, out hadErrors);
+
+                if (childItemOutput.Count == 1 &&
+                    (pathInfo.Provider.FullName + "::" + pathInfo.ProviderPath).EqualsOrdinalIgnoreCase(childItemOutput[0].Properties["PSPath"].Value as string))
+                {
+                    // Get-ChildItem returned the item itself instead of the children so there must be no child items to complete.
+                    continue;
+                }
+
+                var childrenInfoTable = new Dictionary<string, bool>(childItemOutput.Count);
+                var childNameList = new List<string>(childItemOutput.Count);
+
+                if (hadErrors)
+                {
+                    // Get-ChildItem failed to get some items (Access denied or something)
+                    // Save relevant info and try again to get just the names.
+                    foreach (dynamic child in childItemOutput)
+                    {
+                        childrenInfoTable.Add(GetChildNameFromPsObject(child, provider.ItemSeparator), child.PSIsContainer);
+                    }
+
+                    _ = context.Helper.CurrentPowerShell
+                        .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-ChildItem")
+                        .AddParameter("LiteralPath", pathInfo.Path)
+                        .AddParameter("Name");
+                    childItemOutput = context.Helper.ExecuteCurrentPowerShell(out _);
+                    foreach (var child in childItemOutput)
+                    {
+                        var childName = (string)child.BaseObject;
+                        childNameList.Add(childName);
+                    }
+                }
+                else
+                {
+                    foreach (dynamic child in childItemOutput)
+                    {
+                        var childName = GetChildNameFromPsObject(child, provider.ItemSeparator);
+                        childrenInfoTable.Add(childName, child.PSIsContainer);
+                        childNameList.Add(childName);
+                    }
+                }
+
+                if (childNameList.Count == 0)
+                {
+                    continue;
+                }
+
+                string basePath = providerPrefix.Length > 0
+                    ? string.Concat(providerPrefix, pathInfo.Path.AsSpan(providerPrefix.Length))
+                    : pathInfo.Path;
+                if (basePath[^1] is not '\\' and not '/' and not ':')
+                {
+                    basePath += provider.ItemSeparator;
+                }
+
+                if (relativePaths)
+                {
+                    basePath = context.ExecutionContext.EngineSessionState.NormalizeRelativePath(
+                        basePath + childNameList[0], context.ExecutionContext.SessionState.Internal.CurrentLocation.ProviderPath);
+                    if (!basePath.StartsWith($"..{provider.ItemSeparator}", StringComparison.Ordinal))
+                    {
+                        basePath = $".{provider.ItemSeparator}{basePath}";
+                    }
+
+                    basePath = basePath.Remove(basePath.Length - childNameList[0].Length);
+                }
+
+                bool baseQuotesNeeded;
+                basePath = RebuildPathWithVars(basePath, homePath, stringType, literalPaths, out baseQuotesNeeded);
+
+                foreach (var childName in childNameList)
+                {
+                    if (!pattern.IsMatch(childName))
+                    {
+                        continue;
+                    }
+
+                    CompletionResultType resultType;
+                    if (childrenInfoTable.TryGetValue(childName, out bool isContainer))
+                    {
+                        if (containersOnly && !isContainer)
                         {
-                            // Use .NET APIs directly to reduce the time overhead
-                            var isContainer = Directory.Exists(providerPath);
-                            if (containerOnly && !isContainer)
-                                continue;
+                            continue;
+                        }
 
-                            if (!containerOnly && !isContainer && !CheckFileExtension(providerPath, extension))
-                                continue;
+                        resultType = isContainer
+                            ? CompletionResultType.ProviderContainer
+                            : CompletionResultType.ProviderItem;
+                    }
+                    else
+                    {
+                        resultType = CompletionResultType.Text;
+                    }
+
+                    bool leafQuotesNeeded;
+                    var completionText = NewPathCompletionText(
+                        basePath,
+                        EscapePath(childName, stringType, literalPaths, out leafQuotesNeeded),
+                        stringType,
+                        containsNestedExpressions: false,
+                        forceQuotes: baseQuotesNeeded || leafQuotesNeeded,
+                        addAmpersand: false);
+                    results.Add(new CompletionResult(completionText, childName, resultType, baseTooltip + childName));
+                }
+            }
+
+            return results;
+        }
+
+        private static string GetChildNameFromPsObject(dynamic psObject, char separator)
+        {
+            if (((PSObject)psObject).BaseObject is string result)
+            {
+                // The "Get-ChildItem" call for this provider returned a string that we assume is the child name.
+                // This is what the SCCM provider returns.
+                return result;
+            }
+
+            string childName = psObject.PSChildName;
+            if (childName is not null)
+            {
+                return childName;
+            }
+
+            // Some providers (Like the variable provider) don't include a PSChildName property
+            // so we get the child name from the path instead.
+            childName = psObject.PSPath ?? string.Empty;
+            int ProviderSeparatorIndex = childName.IndexOf("::", StringComparison.Ordinal);
+            childName = childName.Substring(ProviderSeparatorIndex + 2);
+            int indexOfName = childName.LastIndexOf(separator);
+            if (indexOfName == -1 || indexOfName + 1 == childName.Length)
+            {
+                return childName;
+            }
+
+            return childName.Substring(indexOfName + 1);
+        }
+
+        /// <summary>
+        /// Takes a path and rebuilds it with the specified variable replacements.
+        /// Also escapes special characters as needed.
+        /// </summary>
+        private static string RebuildPathWithVars(
+            string path,
+            string homePath,
+            StringConstantType stringType,
+            bool literalPath,
+            out bool quotesAreNeeded)
+        {
+            var sb = new StringBuilder(path.Length);
+            int homeIndex = string.IsNullOrEmpty(homePath)
+                ? -1
+                : path.IndexOf(homePath, StringComparison.OrdinalIgnoreCase);
+            quotesAreNeeded = false;
+            bool useSingleQuoteEscapeRules = stringType is StringConstantType.SingleQuoted or StringConstantType.BareWord;
+
+            for (int i = 0; i < path.Length; i++)
+            {
+                // on Windows, we need to preserve the expanded home path as native commands don't understand it
+#if UNIX
+                if (i == homeIndex)
+                {
+                    _ = sb.Append('~');
+                    i += homePath.Length - 1;
+                    continue;
+                }
+#endif
+
+                EscapeCharIfNeeded(sb, path, i, stringType, literalPath, useSingleQuoteEscapeRules, ref quotesAreNeeded);
+                _ = sb.Append(path[i]);
+            }
+
+            return sb.ToString();
+        }
+
+        private static string EscapePath(string path, StringConstantType stringType, bool literalPath, out bool quotesAreNeeded)
+        {
+            var sb = new StringBuilder(path.Length);
+            bool useSingleQuoteEscapeRules = stringType is StringConstantType.SingleQuoted or StringConstantType.BareWord;
+            quotesAreNeeded = false;
+
+            for (int i = 0; i < path.Length; i++)
+            {
+                EscapeCharIfNeeded(sb, path, i, stringType, literalPath, useSingleQuoteEscapeRules, ref quotesAreNeeded);
+                _ = sb.Append(path[i]);
+            }
+
+            return sb.ToString();
+        }
+
+        private static void EscapeCharIfNeeded(
+            StringBuilder sb,
+            string path,
+            int index,
+            StringConstantType stringType,
+            bool literalPath,
+            bool useSingleQuoteEscapeRules,
+            ref bool quotesAreNeeded)
+        {
+            switch (path[index])
+            {
+                case '#':
+                case '-':
+                case '@':
+                    if (index == 0 && stringType == StringConstantType.BareWord)
+                    {
+                        // Chars that would start a new token when used as the first char in a bareword argument.
+                        quotesAreNeeded = true;
+                    }
+                    break;
 
-                            string tooltip = providerPath, listItemText = Path.GetFileName(providerPath);
-                            results.Add(new CompletionResult(completionText, listItemText,
-                                                             isContainer ? CompletionResultType.ProviderContainer : CompletionResultType.ProviderItem,
-                                                             tooltip));
+                case ' ':
+                case ',':
+                case ';':
+                case '(':
+                case ')':
+                case '{':
+                case '}':
+                case '|':
+                case '&':
+                    if (stringType == StringConstantType.BareWord)
+                    {
+                        // Chars that would start a new token when used anywhere in a bareword argument.
+                        quotesAreNeeded = true;
+                    }
+                    break;
+
+                case '[':
+                case ']':
+                    if (!literalPath)
+                    {
+                        // Wildcard characters that need to be escaped.
+                        int backtickCount;
+                        if (useSingleQuoteEscapeRules)
+                        {
+                            backtickCount = 1;
                         }
                         else
                         {
-                            powerShellExecutionHelper
-                                .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-Item")
-                                .AddParameter("LiteralPath", path);
-                            var items = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-                            if (items != null && items.Count == 1)
-                            {
-                                dynamic item = items[0];
-                                var isContainer = LanguagePrimitives.ConvertTo<bool>(item.PSIsContainer);
-
-                                if (containerOnly && !isContainer)
-                                    continue;
-
-                                powerShellExecutionHelper
-                                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Convert-Path")
-                                    .AddParameter("LiteralPath", item.PSPath);
-                                var tooltips = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-                                string tooltip = null, listItemText = item.PSChildName;
-                                if (tooltips != null && tooltips.Count == 1)
-                                {
-                                    tooltip = PSObject.Base(tooltips[0]) as string;
-                                }
+                            backtickCount = sb[^1] == '`' ? 4 : 2;
+                        }
 
-                                if (string.IsNullOrEmpty(listItemText))
-                                {
-                                    // For provider items that don't have PSChildName values, such as variable::error
-                                    listItemText = item.Name;
-                                }
+                        _ = sb.Append('`', backtickCount);
+                        quotesAreNeeded = true;
+                    }
+                    break;
 
-                                results.Add(new CompletionResult(completionText, listItemText,
-                                                                 isContainer ? CompletionResultType.ProviderContainer : CompletionResultType.ProviderItem,
-                                                                 tooltip ?? path));
-                            }
-                            else
-                            {
-                                // We can get here when get-item fails, perhaps due an acl or whatever.
-                                results.Add(new CompletionResult(completionText));
-                            }
+                case '`':
+                    // Literal backtick needs to be escaped to not be treated as an escape character
+                    if (useSingleQuoteEscapeRules)
+                    {
+                        if (!literalPath)
+                        {
+                            _ = sb.Append('`');
+                        }
+                    }
+                    else
+                    {
+                        int backtickCount = !literalPath && sb[^1] == '`' ? 3 : 1;
+                        _ = sb.Append('`', backtickCount);
+                    }
+
+                    if (stringType is StringConstantType.BareWord or StringConstantType.DoubleQuoted)
+                    {
+                        quotesAreNeeded = true;
+                    }
+                    break;
+
+                case '$':
+                    // $ needs to be escaped so following chars are not parsed as a variable/subexpression
+                    if (!useSingleQuoteEscapeRules)
+                    {
+                        _ = sb.Append('`');
+                    }
+
+                    if (stringType is StringConstantType.BareWord or StringConstantType.DoubleQuoted)
+                    {
+                        quotesAreNeeded = true;
+                    }
+                    break;
+
+                default:
+                    if (useSingleQuoteEscapeRules)
+                    {
+                        // Bareword or singlequoted input string.
+                        if (path[index].IsSingleQuote())
+                        {
+                            // SingleQuotes are escaped with more single quotes. quotesAreNeeded is set so bareword strings can quoted.
+                            _ = sb.Append('\'');
+                            quotesAreNeeded = true;
                         }
+                        else if (!quotesAreNeeded && stringType == StringConstantType.BareWord && path[index].IsDoubleQuote())
+                        {
+                            // Bareword string with double quote inside. Make sure to quote it so we don't need to escape it.
+                            quotesAreNeeded = true;
+                        }
+                    }
+                    else if (path[index].IsDoubleQuote())
+                    {
+                        // Double quoted or bareword with variables input string. Need to escape double quotes.
+                        _ = sb.Append('`');
+                        quotesAreNeeded = true;
+                    }
+                    break;
+            }
+        }
+
+        private static string NewPathCompletionText(string parent, string leaf, StringConstantType stringType, bool containsNestedExpressions, bool forceQuotes, bool addAmpersand)
+        {
+            string result;
+            if (stringType == StringConstantType.SingleQuoted)
+            {
+                result = addAmpersand ? $"& '{parent}{leaf}'" : $"'{parent}{leaf}'";
+            }
+            else if (stringType == StringConstantType.DoubleQuoted)
+            {
+                result = addAmpersand ? $"& \"{parent}{leaf}\"" : $"\"{parent}{leaf}\"";
+            }
+            else
+            {
+                if (forceQuotes)
+                {
+                    if (containsNestedExpressions)
+                    {
+                        result = addAmpersand ? $"& \"{parent}{leaf}\"" : $"\"{parent}{leaf}\"";
+                    }
+                    else
+                    {
+                        result = addAmpersand ? $"& '{parent}{leaf}'" : $"'{parent}{leaf}'";
                     }
                 }
+                else
+                {
+                    result = string.Concat(parent, leaf);
+                }
             }
 
-            return results;
+            return result;
         }
 
+        private static readonly Regex s_shareMatch = new(
+            @"(^Microsoft\.PowerShell\.Core\\FileSystem::|^FileSystem::|^)(?:\\\\|//)(?![.|?])([^\\/]+)(?:\\|/)([^\\/]*)$",
+            RegexOptions.IgnoreCase | RegexOptions.Compiled);
+
         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
         private struct SHARE_INFO_1
         {
@@ -4500,52 +5217,63 @@ private struct SHARE_INFO_1
             public string remark;
         }
 
-        private const int MAX_PREFERRED_LENGTH = -1;
-        private const int NERR_Success = 0;
-        private const int ERROR_MORE_DATA = 234;
-        private const int STYPE_DISKTREE = 0;
-        private const int STYPE_MASK = 0x000000FF;
-
         private static readonly System.IO.EnumerationOptions _enumerationOptions = new System.IO.EnumerationOptions
         {
             MatchCasing = MatchCasing.CaseInsensitive,
             AttributesToSkip = 0 // Default is to skip Hidden and System files, so we clear this to retain existing behavior
         };
 
-        [DllImport("Netapi32.dll", CharSet = CharSet.Unicode)]
-        private static extern int NetShareEnum(string serverName, int level, out IntPtr bufptr, int prefMaxLen,
-                                               out uint entriesRead, out uint totalEntries, ref uint resumeHandle);
-
         internal static List<string> GetFileShares(string machine, bool ignoreHidden)
         {
 #if UNIX
             return new List<string>();
 #else
-            IntPtr shBuf;
-            uint numEntries;
+            nint shBuf = nint.Zero;
+            uint numEntries = 0;
             uint totalEntries;
             uint resumeHandle = 0;
-            int result = NetShareEnum(machine, 1, out shBuf,
-                                        MAX_PREFERRED_LENGTH, out numEntries, out totalEntries,
-                                        ref resumeHandle);
-
-            var shares = new List<string>();
-            if (result == NERR_Success || result == ERROR_MORE_DATA)
+            try
             {
-                for (int i = 0; i < numEntries; ++i)
+                int result = Interop.Windows.NetShareEnum(
+                    machine,
+                    level: 1,
+                    out shBuf,
+                    Interop.Windows.MAX_PREFERRED_LENGTH,
+                    out numEntries,
+                    out totalEntries,
+                    ref resumeHandle);
+
+                var shares = new List<string>();
+                if (result == Interop.Windows.ERROR_SUCCESS || result == Interop.Windows.ERROR_MORE_DATA)
                 {
-                    IntPtr curInfoPtr = (IntPtr)((long)shBuf + (Marshal.SizeOf<SHARE_INFO_1>() * i));
-                    SHARE_INFO_1 shareInfo = Marshal.PtrToStructure<SHARE_INFO_1>(curInfoPtr);
+                    for (int i = 0; i < numEntries; ++i)
+                    {
+                        nint curInfoPtr = shBuf + (Marshal.SizeOf<SHARE_INFO_1>() * i);
+                        SHARE_INFO_1 shareInfo = Marshal.PtrToStructure<SHARE_INFO_1>(curInfoPtr);
 
-                    if ((shareInfo.type & STYPE_MASK) != STYPE_DISKTREE)
-                        continue;
-                    if (ignoreHidden && shareInfo.netname.EndsWith('$'))
-                        continue;
-                    shares.Add(shareInfo.netname);
+                        if ((shareInfo.type & Interop.Windows.STYPE_MASK) != Interop.Windows.STYPE_DISKTREE)
+                        {
+                            continue;
+                        }
+
+                        if (ignoreHidden && shareInfo.netname.EndsWith('$'))
+                        {
+                            continue;
+                        }
+
+                        shares.Add(shareInfo.netname);
+                    }
                 }
-            }
 
-            return shares;
+                return shares;
+            }
+            finally
+            {
+                if (shBuf != nint.Zero)
+                {
+                    Interop.Windows.NetApiBufferFree(shBuf);
+                }
+            }
 #endif
         }
 
@@ -4580,31 +5308,51 @@ public static IEnumerable<CompletionResult> CompleteVariable(string variableName
             return CompleteVariable(new CompletionContext { WordToComplete = variableName, Helper = helper, ExecutionContext = executionContext });
         }
 
-        private static readonly string[] s_variableScopes = new string[] { "Global:", "Local:", "Script:", "Private:" };
+        private static readonly string[] s_variableScopes = new string[] { "Global:", "Local:", "Script:", "Private:", "Using:" };
 
-        private static readonly char[] s_charactersRequiringQuotes = new char[] {
-            '-', '`', '&', '@', '\'', '"', '#', '{', '}', '(', ')', '$', ',', ';', '|', '<', '>', ' ', '.', '\\', '/', '\t', '^',
-        };
+        private static readonly SearchValues<char> s_charactersRequiringQuotes = SearchValues.Create("-`&@'\"#{}()$,;|<> .\\/ \t^");
+
+        private static bool ContainsCharactersRequiringQuotes(ReadOnlySpan<char> text)
+            => text.ContainsAny(s_charactersRequiringQuotes);
 
         internal static List<CompletionResult> CompleteVariable(CompletionContext context)
         {
-            HashSet<string> hashedResults = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-            List<CompletionResult> results = new List<CompletionResult>();
+            HashSet<string> hashedResults = new(StringComparer.OrdinalIgnoreCase);
+            List<CompletionResult> results = new();
+            List<CompletionResult> tempResults = new();
 
             var wordToComplete = context.WordToComplete;
+            string scopePrefix = string.Empty;
             var colon = wordToComplete.IndexOf(':');
+            if (colon >= 0)
+            {
+                scopePrefix = wordToComplete.Remove(colon + 1);
+                wordToComplete = wordToComplete.Substring(colon + 1);
+            }
 
-            var lastAst = context.RelatedAsts?.Last();
+            var lastAst = context.RelatedAsts?[^1];
             var variableAst = lastAst as VariableExpressionAst;
+            if (lastAst is PropertyMemberAst ||
+                (lastAst is not null && lastAst.Parent is ParameterAst parameter && parameter.DefaultValue != lastAst))
+            {
+                // User is adding a new parameter or a class member, variable tab completion is not useful.
+                return results;
+            }
             var prefix = variableAst != null && variableAst.Splatted ? "@" : "$";
+            bool tokenAtCursorUsedBraces = context.TokenAtCursor is not null && context.TokenAtCursor.Text.StartsWith("${");
 
             // Look for variables in the input (e.g. parameters, etc.) before checking session state - these
             // variables might not exist in session state yet.
             var wildcardPattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
-            if (lastAst != null)
+            if (lastAst is not null)
             {
                 Ast parent = lastAst.Parent;
-                var findVariablesVisitor = new FindVariablesVisitor { CompletionVariableAst = lastAst };
+                var findVariablesVisitor = new FindVariablesVisitor
+                {
+                    CompletionVariableAst = lastAst,
+                    StopSearchOffset = lastAst.Extent.StartOffset,
+                    Context = context.TypeInferenceContext
+                };
                 while (parent != null)
                 {
                     if (parent is IParameterMetadataProvider)
@@ -4616,216 +5364,740 @@ internal static List<CompletionResult> CompleteVariable(CompletionContext contex
                     parent = parent.Parent;
                 }
 
-                foreach (Tuple<string, Ast> varAst in findVariablesVisitor.VariableSources)
+                foreach (string varName in findVariablesVisitor.FoundVariables)
                 {
-                    Ast astTarget = null;
-                    string userPath = null;
+                    if (!wildcardPattern.IsMatch(varName))
+                    {
+                        continue;
+                    }
 
-                    VariableExpressionAst variableDefinitionAst = varAst.Item2 as VariableExpressionAst;
-                    if (variableDefinitionAst != null)
+                    VariableInfo varInfo = findVariablesVisitor.VariableInfoTable[varName];
+                    PSTypeName varType = varInfo.LastDeclaredConstraint ?? varInfo.LastAssignedType;
+                    string toolTip;
+                    if (varType is null)
                     {
-                        userPath = varAst.Item1;
-                        astTarget = varAst.Item2.Parent;
+                        toolTip = varName;
                     }
                     else
                     {
-                        CommandAst commandParameterAst = varAst.Item2 as CommandAst;
-                        if (commandParameterAst != null)
-                        {
-                            userPath = varAst.Item1;
-                            astTarget = varAst.Item2;
-                        }
+                        toolTip = varType.Type is not null
+                            ? StringUtil.Format("[{0}]${1}", ToStringCodeMethods.Type(varType.Type, dropNamespaces: true), varName)
+                            : varType.Name;
                     }
 
-                    if (string.IsNullOrEmpty(userPath))
-                    {
-                        Diagnostics.Assert(false, "Found a variable source but it was an unknown AST type.");
-                    }
+                    var completionText = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(varName)
+                        ? prefix + scopePrefix + varName
+                        : prefix + "{" + scopePrefix + varName + "}";
+                    AddUniqueVariable(hashedResults, results, completionText, varName, toolTip);
+                }
+            }
 
-                    if (wildcardPattern.IsMatch(userPath))
+            if (colon == -1)
+            {
+                var allVariables = context.ExecutionContext.SessionState.Internal.GetVariableTable();
+                foreach (var key in allVariables.Keys)
+                {
+                    if (wildcardPattern.IsMatch(key))
                     {
-                        var completedName = (userPath.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                                ? prefix + userPath
-                                                : prefix + "{" + userPath + "}";
-                        var tooltip = userPath;
-                        var ast = astTarget;
-
-                        while (ast != null)
+                        var variable = allVariables[key];
+                        var name = variable.Name;
+                        var value = variable.Value;
+                        var toolTip = value is null
+                            ? key
+                            : StringUtil.Format("[{0}]${1}", ToStringCodeMethods.Type(value.GetType(), dropNamespaces: true), key);
+                        if (!string.IsNullOrEmpty(variable.Description))
                         {
-                            var parameterAst = ast as ParameterAst;
-                            if (parameterAst != null)
-                            {
-                                var typeConstraint = parameterAst.Attributes.OfType<TypeConstraintAst>().FirstOrDefault();
-                                if (typeConstraint != null)
-                                {
-                                    tooltip = StringUtil.Format("{0}${1}", typeConstraint.Extent.Text, userPath);
-                                }
-
-                                break;
-                            }
-
-                            var assignmentAst = ast.Parent as AssignmentStatementAst;
-                            if (assignmentAst != null)
-                            {
-                                if (assignmentAst.Left == ast)
-                                {
-                                    tooltip = ast.Extent.Text;
-                                }
-
-                                break;
-                            }
-
-                            var commandAst = ast as CommandAst;
-                            if (commandAst != null)
-                            {
-                                PSTypeName discoveredType = AstTypeInference.InferTypeOf(ast, context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval).FirstOrDefault<PSTypeName>();
-                                if (discoveredType != null)
-                                {
-                                    tooltip = StringUtil.Format("[{0}]${1}", discoveredType.Name, userPath);
-                                }
-
-                                break;
-                            }
-
-                            ast = ast.Parent;
+                            toolTip += $" - {variable.Description}";
                         }
 
-                        AddUniqueVariable(hashedResults, results, completedName, userPath, tooltip);
+                        var completionText = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(name)
+                            ? prefix + name
+                            : prefix + "{" + name + "}";
+                        AddUniqueVariable(hashedResults, tempResults, completionText, key, toolTip);
                     }
                 }
-            }
 
-            string pattern;
-            string provider;
-            if (colon == -1)
-            {
-                pattern = "variable:" + wordToComplete + "*";
-                provider = string.Empty;
+                if (tempResults.Count > 0)
+                {
+                    results.AddRange(tempResults.OrderBy(item => item.ListItemText, StringComparer.OrdinalIgnoreCase));
+                    tempResults.Clear();
+                }
             }
             else
             {
-                provider = wordToComplete.Substring(0, colon + 1);
-                if (s_variableScopes.Contains(provider, StringComparer.OrdinalIgnoreCase))
+                string pattern;
+                if (s_variableScopes.Contains(scopePrefix, StringComparer.OrdinalIgnoreCase))
                 {
-                    pattern = string.Concat("variable:", wordToComplete.AsSpan(colon + 1), "*");
+                    pattern = string.Concat("variable:", wordToComplete, "*");
                 }
                 else
                 {
-                    pattern = wordToComplete + "*";
+                    pattern = scopePrefix + wordToComplete + "*";
                 }
-            }
-
-            var powerShellExecutionHelper = context.Helper;
-            powerShellExecutionHelper
-                .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-Item").AddParameter("Path", pattern)
-                .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object").AddParameter("Property", "Name");
 
-            Exception exceptionThrown;
-            var psobjs = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-            if (psobjs != null)
-            {
-                foreach (dynamic psobj in psobjs)
+                var powerShellExecutionHelper = context.Helper;
+                powerShellExecutionHelper
+                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-Item").AddParameter("Path", pattern)
+                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object").AddParameter("Property", "Name");
+
+                var psobjs = powerShellExecutionHelper.ExecuteCurrentPowerShell(out _);
+
+                if (psobjs is not null)
                 {
-                    var name = psobj.Name as string;
-                    if (!string.IsNullOrEmpty(name))
+                    foreach (dynamic psobj in psobjs)
                     {
-                        var tooltip = name;
-                        var variable = PSObject.Base(psobj) as PSVariable;
-                        if (variable != null)
+                        var name = psobj.Name as string;
+                        if (!string.IsNullOrEmpty(name))
                         {
-                            var value = variable.Value;
-                            if (value != null)
+                            var tooltip = name;
+                            var variable = PSObject.Base(psobj) as PSVariable;
+                            if (variable != null)
                             {
-                                tooltip = StringUtil.Format("[{0}]${1}",
-                                                            ToStringCodeMethods.Type(value.GetType(),
-                                                                                     dropNamespaces: true), name);
+                                var value = variable.Value;
+                                if (value != null)
+                                {
+                                    tooltip = StringUtil.Format("[{0}]${1}",
+                                                                ToStringCodeMethods.Type(value.GetType(),
+                                                                                         dropNamespaces: true), name);
+                                }
+
+                                if (!string.IsNullOrEmpty(variable.Description))
+                                {
+                                    tooltip += $" - {variable.Description}";
+                                }
                             }
-                        }
 
-                        var completedName = (name.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                                ? prefix + provider + name
-                                                : prefix + "{" + provider + name + "}";
-                        AddUniqueVariable(hashedResults, results, completedName, name, tooltip);
+                            var completedName = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(name)
+                                                    ? prefix + scopePrefix + name
+                                                    : prefix + "{" + scopePrefix + name + "}";
+                            AddUniqueVariable(hashedResults, results, completedName, name, tooltip);
+                        }
                     }
                 }
             }
 
             if (colon == -1 && "env".StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
             {
-                powerShellExecutionHelper
-                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-Item").AddParameter("Path", "env:*")
-                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object").AddParameter("Property", "Key");
+                var envVars = Environment.GetEnvironmentVariables();
+                foreach (var key in envVars.Keys)
+                {
+                    var name = "env:" + key;
+                    var completedName = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(name)
+                        ? prefix + name
+                        : prefix + "{" + name + "}";
+                    AddUniqueVariable(hashedResults, tempResults, completedName, name, "[string]" + name);
+                }
+
+                results.AddRange(tempResults.OrderBy(item => item.ListItemText, StringComparer.OrdinalIgnoreCase));
+                tempResults.Clear();
+            }
 
-                psobjs = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-                if (psobjs != null)
+            if (colon == -1)
+            {
+                // Return variables already in session state first, because we can sometimes give better information,
+                // like the variables type.
+                foreach (var specialVariable in s_specialVariablesCache.Value)
                 {
-                    foreach (dynamic psobj in psobjs)
+                    if (wildcardPattern.IsMatch(specialVariable))
                     {
-                        var name = psobj.Name as string;
-                        if (!string.IsNullOrEmpty(name))
-                        {
-                            name = "env:" + name;
-                            var completedName = (name.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                                    ? prefix + name
-                                                    : prefix + "{" + name + "}";
-                            AddUniqueVariable(hashedResults, results, completedName, name, "[string]" + name);
-                        }
+                        var completedName = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(specialVariable)
+                                                ? prefix + specialVariable
+                                                : prefix + "{" + specialVariable + "}";
+
+                        AddUniqueVariable(hashedResults, results, completedName, specialVariable, specialVariable);
+                    }
+                }
+
+                var allDrives = context.ExecutionContext.SessionState.Drive.GetAll();
+                foreach (var drive in allDrives)
+                {
+                    if (drive.Name.Length < 2
+                        || !wildcardPattern.IsMatch(drive.Name)
+                        || !drive.Provider.ImplementingType.IsAssignableTo(typeof(IContentCmdletProvider)))
+                    {
+                        continue;
                     }
+
+                    var completedName = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(drive.Name)
+                        ? prefix + drive.Name + ":"
+                        : prefix + "{" + drive.Name + ":}";
+                    var tooltip = string.IsNullOrEmpty(drive.Description)
+                        ? drive.Name
+                        : drive.Description;
+                    AddUniqueVariable(hashedResults, tempResults, completedName, drive.Name, tooltip);
+                }
+
+                if (tempResults.Count > 0)
+                {
+                    results.AddRange(tempResults.OrderBy(item => item.ListItemText, StringComparer.OrdinalIgnoreCase));
+                }
+
+                foreach (var scope in s_variableScopes)
+                {
+                    if (wildcardPattern.IsMatch(scope))
+                    {
+                        var completedName = !tokenAtCursorUsedBraces && !ContainsCharactersRequiringQuotes(scope)
+                            ? prefix + scope
+                            : prefix + "{" + scope + "}";
+                        AddUniqueVariable(hashedResults, results, completedName, scope, scope);
+                    }
+                }
+            }
+
+            return results;
+        }
+
+        private static void AddUniqueVariable(HashSet<string> hashedResults, List<CompletionResult> results, string completionText, string listItemText, string tooltip)
+        {
+            if (hashedResults.Add(completionText))
+            {
+                results.Add(new CompletionResult(completionText, listItemText, CompletionResultType.Variable, tooltip));
+            }
+        }
+
+        internal static readonly HashSet<string> s_varModificationCommands = new(StringComparer.OrdinalIgnoreCase)
+        {
+            "New-Variable",
+            "nv",
+            "Set-Variable",
+            "set",
+            "sv"
+        };
+
+        internal static readonly string[] s_varModificationParameters = new string[]
+        {
+            "Name",
+            "Value"
+        };
+
+        internal static readonly string[] s_outVarParameters = new string[]
+        {
+            "ErrorVariable",
+            "ev",
+            "WarningVariable",
+            "wv",
+            "InformationVariable",
+            "iv",
+            "OutVariable",
+            "ov",
+
+        };
+
+        internal static readonly string[] s_pipelineVariableParameters = new string[]
+        {
+            "PipelineVariable",
+            "pv"
+        };
+
+        internal static readonly HashSet<string> s_localScopeCommandNames = new(StringComparer.OrdinalIgnoreCase)
+        {
+            "Microsoft.PowerShell.Core\\ForEach-Object",
+            "ForEach-Object",
+            "foreach",
+            "%",
+            "Microsoft.PowerShell.Core\\Where-Object",
+            "Where-Object",
+            "where",
+            "?",
+            "BeforeAll",
+            "BeforeEach"
+        };
+
+        private sealed class VariableInfo
+        {
+            internal PSTypeName LastDeclaredConstraint;
+            internal PSTypeName LastAssignedType;
+        }
+
+        private sealed class FindVariablesVisitor : AstVisitor2
+        {
+            internal Ast Top;
+            internal Ast CompletionVariableAst;
+            internal readonly List<string> FoundVariables = new();
+            internal readonly Dictionary<string, VariableInfo> VariableInfoTable = new(StringComparer.OrdinalIgnoreCase);
+            internal int StopSearchOffset;
+            internal TypeInferenceContext Context;
+
+            private static PSTypeName GetInferredVarTypeFromAst(Ast ast)
+            {
+                PSTypeName type;
+                switch (ast)
+                {
+                    case ConstantExpressionAst constant:
+                        type = new PSTypeName(constant.StaticType);
+                        break;
+
+                    case ExpandableStringExpressionAst:
+                        type = new PSTypeName(typeof(string));
+                        break;
+
+                    case ConvertExpressionAst convertExpression:
+                        type = new PSTypeName(convertExpression.Type.TypeName);
+                        break;
+
+                    case HashtableAst:
+                        type = new PSTypeName(typeof(Hashtable));
+                        break;
+
+                    case ArrayExpressionAst:
+                    case ArrayLiteralAst:
+                        type = new PSTypeName(typeof(object[]));
+                        break;
+
+                    case ScriptBlockExpressionAst:
+                        type = new PSTypeName(typeof(ScriptBlock));
+                        break;
+
+                    default:
+                        type = null;
+                        break;
                 }
+
+                return type;
             }
 
-            // Return variables already in session state first, because we can sometimes give better information,
-            // like the variables type.
-            foreach (var specialVariable in s_specialVariablesCache.Value)
+            private void SaveVariableInfo(string variableName, PSTypeName variableType, bool isConstraint)
             {
-                if (wildcardPattern.IsMatch(specialVariable))
+                if (VariableInfoTable.TryGetValue(variableName, out VariableInfo varInfo))
                 {
-                    var completedName = (specialVariable.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                            ? prefix + specialVariable
-                                            : prefix + "{" + specialVariable + "}";
+                    if (isConstraint)
+                    {
+                        varInfo.LastDeclaredConstraint = variableType;
+                    }
+                    else
+                    {
+                        varInfo.LastAssignedType = variableType;
+                    }
+                }
+                else
+                {
+                    varInfo = isConstraint
+                        ? new VariableInfo() { LastDeclaredConstraint = variableType }
+                        : new VariableInfo() { LastAssignedType = variableType };
+                    VariableInfoTable.Add(variableName, varInfo);
+                    FoundVariables.Add(variableName);
+                }
+            }
 
-                    AddUniqueVariable(hashedResults, results, completedName, specialVariable, specialVariable);
+            public override AstVisitAction DefaultVisit(Ast ast)
+            {
+                if (ast.Extent.StartOffset > StopSearchOffset)
+                {
+                    // When visiting do while/until statements, the condition will be visited before the statement block.
+                    // The condition itself may not be interesting if it's after the cursor, but the statement block could be.
+                    return ast is PipelineBaseAst && ast.Parent is DoUntilStatementAst or DoWhileStatementAst
+                        ? AstVisitAction.SkipChildren
+                        : AstVisitAction.StopVisit;
                 }
+
+                return AstVisitAction.Continue;
             }
 
-            if (colon == -1)
+            public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
             {
-                // If no drive was specified, then look for matching drives/scopes
-                pattern = wordToComplete + "*";
-                powerShellExecutionHelper
-                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-PSDrive").AddParameter("Name", pattern)
-                    .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object").AddParameter("Property", "Name");
-                psobjs = powerShellExecutionHelper.ExecuteCurrentPowerShell(out exceptionThrown);
-                if (psobjs != null)
+                if (assignmentStatementAst.Extent.StartOffset > StopSearchOffset)
                 {
-                    foreach (var psobj in psobjs)
+                    return assignmentStatementAst.Parent is DoUntilStatementAst or DoWhileStatementAst ?
+                        AstVisitAction.SkipChildren
+                        : AstVisitAction.StopVisit;
+                }
+
+                ProcessAssignmentLeftSide(assignmentStatementAst.Left, assignmentStatementAst.Right);
+                return AstVisitAction.Continue;
+            }
+
+            private void ProcessAssignmentLeftSide(ExpressionAst left, StatementAst right)
+            {
+                if (left is AttributedExpressionAst attributedExpression)
+                {
+                    var firstConvertExpression = attributedExpression as ConvertExpressionAst;
+                    ExpressionAst child = attributedExpression.Child;
+                    while (child is AttributedExpressionAst attributeChild)
+                    {
+                        if (firstConvertExpression is null && attributeChild is ConvertExpressionAst convertExpression)
+                        {
+                            // Multiple type constraint can be set on a variable like this: [int] [string] $Var1 = 1
+                            // But it's the left most type constraint that determines the final type.
+                            firstConvertExpression = convertExpression;
+                        }
+
+                        child = attributeChild.Child;
+                    }
+
+                    if (child is VariableExpressionAst variableExpression)
+                    {
+                        if (variableExpression == CompletionVariableAst || s_specialVariablesCache.Value.Contains(variableExpression.VariablePath.UserPath))
+                        {
+                            return;
+                        }
+
+                        if (firstConvertExpression is not null)
+                        {
+                            SaveVariableInfo(variableExpression.VariablePath.UnqualifiedPath, new PSTypeName(firstConvertExpression.Type.TypeName), isConstraint: true);
+                        }
+                        else
+                        {
+                            PSTypeName lastAssignedType = right is CommandExpressionAst commandExpression
+                                ? GetInferredVarTypeFromAst(commandExpression.Expression)
+                                : null;
+                            SaveVariableInfo(variableExpression.VariablePath.UnqualifiedPath, lastAssignedType, isConstraint: false);
+                        }
+                    }
+                }
+                else if (left is VariableExpressionAst variableExpression)
+                {
+                    if (variableExpression == CompletionVariableAst || s_specialVariablesCache.Value.Contains(variableExpression.VariablePath.UserPath))
+                    {
+                        return;
+                    }
+
+                    PSTypeName lastAssignedType;
+                    if (right is CommandExpressionAst commandExpression)
+                    {
+                        lastAssignedType = GetInferredVarTypeFromAst(commandExpression.Expression);
+                    }
+                    else
+                    {
+                        lastAssignedType = null;
+                    }
+
+                    SaveVariableInfo(variableExpression.VariablePath.UnqualifiedPath, lastAssignedType, isConstraint: false);
+                }
+                else if (left is ArrayLiteralAst array)
+                {
+                    foreach (ExpressionAst expression in array.Elements)
+                    {
+                        ProcessAssignmentLeftSide(expression, right);
+                    }
+                }
+                else if (left is ParenExpressionAst parenExpression)
+                {
+                    ExpressionAst pureExpression = parenExpression.Pipeline.GetPureExpression();
+                    if (pureExpression is not null)
+                    {
+                        ProcessAssignmentLeftSide(pureExpression, right);
+                    }
+                }
+            }
+
+            public override AstVisitAction VisitCommand(CommandAst commandAst)
+            {
+                if (commandAst.Extent.StartOffset > StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                var commandName = commandAst.GetCommandName();
+                if (commandName is not null && s_varModificationCommands.Contains(commandName))
+                {
+                    StaticBindingResult bindingResult = StaticParameterBinder.BindCommand(commandAst, resolve: false, s_varModificationParameters);
+                    if (bindingResult is not null
+                        && bindingResult.BoundParameters.TryGetValue("Name", out ParameterBindingResult variableName))
+                    {
+                        var nameValue = variableName.ConstantValue as string;
+                        if (nameValue is not null)
+                        {
+                            PSTypeName variableType;
+                            if (bindingResult.BoundParameters.TryGetValue("Value", out ParameterBindingResult variableValue))
+                            {
+                                variableType = GetInferredVarTypeFromAst(variableValue.Value);
+                            }
+                            else
+                            {
+                                variableType = null;
+                            }
+
+                            SaveVariableInfo(nameValue, variableType, isConstraint: false);
+                        }
+                    }
+                }
+
+                var bindResult = StaticParameterBinder.BindCommand(commandAst, resolve: false);
+                if (bindResult is not null)
+                {
+                    foreach (var parameterName in s_outVarParameters)
                     {
-                        var driveInfo = PSObject.Base(psobj) as PSDriveInfo;
-                        if (driveInfo != null)
+                        if (bindResult.BoundParameters.TryGetValue(parameterName, out ParameterBindingResult outVarBind))
                         {
-                            var name = driveInfo.Name;
-                            if (name != null && !string.IsNullOrWhiteSpace(name) && name.Length > 1)
+                            var varName = outVarBind.ConstantValue as string;
+                            if (varName is not null)
                             {
-                                var completedName = (name.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                                        ? prefix + name + ":"
-                                                        : prefix + "{" + name + ":}";
+                                SaveVariableInfo(varName, new PSTypeName(typeof(ArrayList)), isConstraint: false);
+                            }
+                        }
+                    }
 
-                                var tooltip = string.IsNullOrEmpty(driveInfo.Description) ? name : driveInfo.Description;
-                                AddUniqueVariable(hashedResults, results, completedName, name, tooltip);
+                    if (commandAst.Parent is PipelineAst pipeline && pipeline.Extent.EndOffset > CompletionVariableAst.Extent.StartOffset)
+                    {
+                        foreach (var parameterName in s_pipelineVariableParameters)
+                        {
+                            if (bindResult.BoundParameters.TryGetValue(parameterName, out ParameterBindingResult pipeVarBind))
+                            {
+                                var varName = pipeVarBind.ConstantValue as string;
+                                if (varName is not null)
+                                {
+                                    var inferredTypes = AstTypeInference.InferTypeOf(commandAst, Context, TypeInferenceRuntimePermissions.AllowSafeEval);
+                                    PSTypeName varType = inferredTypes.Count == 0
+                                        ? null
+                                        : inferredTypes[0];
+                                    SaveVariableInfo(varName, varType, isConstraint: false);
+                                }
                             }
                         }
                     }
                 }
 
-                var scopePattern = WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase);
-                foreach (var scope in s_variableScopes)
+                foreach (RedirectionAst redirection in commandAst.Redirections)
                 {
-                    if (scopePattern.IsMatch(scope))
+                    if (redirection is FileRedirectionAst fileRedirection
+                        && fileRedirection.Location is StringConstantExpressionAst redirectTarget
+                        && redirectTarget.Value.StartsWith("variable:", StringComparison.OrdinalIgnoreCase)
+                        && redirectTarget.Value.Length > "variable:".Length)
                     {
-                        var completedName = (scope.IndexOfAny(s_charactersRequiringQuotes) == -1)
-                                                ? prefix + scope
-                                                : prefix + "{" + scope + "}";
-                        AddUniqueVariable(hashedResults, results, completedName, scope, scope);
+                        string varName = redirectTarget.Value.Substring("variable:".Length);
+                        PSTypeName varType;
+                        switch (fileRedirection.FromStream)
+                        {
+                            case RedirectionStream.Error:
+                                varType = new PSTypeName(typeof(ErrorRecord));
+                                break;
+
+                            case RedirectionStream.Warning:
+                                varType = new PSTypeName(typeof(WarningRecord));
+                                break;
+
+                            case RedirectionStream.Verbose:
+                                varType = new PSTypeName(typeof(VerboseRecord));
+                                break;
+
+                            case RedirectionStream.Debug:
+                                varType = new PSTypeName(typeof(DebugRecord));
+                                break;
+
+                            case RedirectionStream.Information:
+                                varType = new PSTypeName(typeof(InformationRecord));
+                                break;
+
+                            default:
+                                varType = null;
+                                break;
+                        }
+
+                        SaveVariableInfo(varName, varType, isConstraint: false);
+                    }
+                }
+
+                return AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitParameter(ParameterAst parameterAst)
+            {
+                if (parameterAst.Extent.StartOffset > StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                VariableExpressionAst variableExpression = parameterAst.Name;
+                if (variableExpression == CompletionVariableAst)
+                {
+                    return AstVisitAction.Continue;
+                }
+
+                SaveVariableInfo(variableExpression.VariablePath.UnqualifiedPath, new PSTypeName(parameterAst.StaticType), isConstraint: true);
+
+                return AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitForEachStatement(ForEachStatementAst forEachStatementAst)
+            {
+                if (forEachStatementAst.Extent.StartOffset > StopSearchOffset || forEachStatementAst.Variable == CompletionVariableAst)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                SaveVariableInfo(forEachStatementAst.Variable.VariablePath.UnqualifiedPath, variableType: null, isConstraint: false);
+                return AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitAttribute(AttributeAst attributeAst)
+            {
+                // Attributes can't assign values to variables so they aren't interesting.
+                return AstVisitAction.SkipChildren;
+            }
+
+            public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst)
+            {
+                return functionDefinitionAst != Top ? AstVisitAction.SkipChildren : AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
+            {
+                if (scriptBlockExpressionAst == Top)
+                {
+                    return AstVisitAction.Continue;
+                }
+
+                Ast parent = scriptBlockExpressionAst.Parent;
+                // This loop checks if the scriptblock is used as a command, or an argument for a command, eg: ForEach-Object -Process {$Var1 = "Hello"}, {Var2 = $true}
+                while (true)
+                {
+                    if (parent is CommandAst cmdAst)
+                    {
+                        string cmdName = cmdAst.GetCommandName();
+                        return s_localScopeCommandNames.Contains(cmdName)
+                            || (cmdAst.CommandElements[0] is ScriptBlockExpressionAst && cmdAst.InvocationOperator == TokenKind.Dot)
+                            ? AstVisitAction.Continue
+                            : AstVisitAction.SkipChildren;
+                    }
+
+                    if (parent is not CommandExpressionAst and not PipelineAst and not StatementBlockAst and not ArrayExpressionAst and not ArrayLiteralAst)
+                    {
+                        return AstVisitAction.SkipChildren;
+                    }
+
+                    parent = parent.Parent;
+                }
+            }
+
+            public override AstVisitAction VisitDataStatement(DataStatementAst dataStatementAst)
+            {
+                if (dataStatementAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                if (dataStatementAst.Variable is not null)
+                {
+                    SaveVariableInfo(dataStatementAst.Variable, variableType: null, isConstraint: false);
+                }
+
+                return AstVisitAction.SkipChildren;
+            }
+        }
+
+        private static readonly Lazy<SortedSet<string>> s_specialVariablesCache = new(BuildSpecialVariablesCache);
+
+        private static SortedSet<string> BuildSpecialVariablesCache()
+        {
+            var result = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
+            foreach (var member in typeof(SpecialVariables).GetFields(BindingFlags.NonPublic | BindingFlags.Static))
+            {
+                if (member.FieldType.Equals(typeof(string)))
+                {
+                    result.Add((string)member.GetValue(null));
+                }
+            }
+
+            return result;
+        }
+
+        internal static PSTypeName GetLastDeclaredTypeConstraint(VariableExpressionAst variableAst, TypeInferenceContext typeInferenceContext)
+        {
+            Ast parent = variableAst.Parent;
+            var findVariablesVisitor = new FindVariablesVisitor()
+            {
+                CompletionVariableAst = variableAst,
+                StopSearchOffset = variableAst.Extent.StartOffset,
+                Context = typeInferenceContext
+            };
+            while (parent != null)
+            {
+                if (parent is IParameterMetadataProvider)
+                {
+                    findVariablesVisitor.Top = parent;
+                    parent.Visit(findVariablesVisitor);
+                }
+
+                if (findVariablesVisitor.VariableInfoTable.TryGetValue(variableAst.VariablePath.UserPath, out VariableInfo varInfo)
+                    && varInfo.LastDeclaredConstraint is not null)
+                {
+                    return varInfo.LastDeclaredConstraint;
+                }
+
+                parent = parent.Parent;
+            }
+
+            return null;
+        }
+
+        #endregion Variables
+
+        #region Comments
+
+        internal static List<CompletionResult> CompleteComment(CompletionContext context, ref int replacementIndex, ref int replacementLength)
+        {
+            if (context.WordToComplete.StartsWith("<#", StringComparison.Ordinal))
+            {
+                return CompleteCommentHelp(context, ref replacementIndex, ref replacementLength);
+            }
+
+            // Complete #requires statements
+            if (context.WordToComplete.StartsWith("#requires ", StringComparison.OrdinalIgnoreCase))
+            {
+                return CompleteRequires(context, ref replacementIndex, ref replacementLength);
+            }
+
+            var results = new List<CompletionResult>();
+
+            // Complete the history entries
+            Match matchResult = Regex.Match(context.WordToComplete, @"^#([\w\-]*)$");
+            if (!matchResult.Success)
+            {
+                return results;
+            }
+
+            string wordToComplete = matchResult.Groups[1].Value;
+            Collection<PSObject> psobjs;
+
+            int entryId;
+            if (Regex.IsMatch(wordToComplete, @"^[0-9]+$") && LanguagePrimitives.TryConvertTo(wordToComplete, out entryId))
+            {
+                context.Helper.AddCommandWithPreferenceSetting("Get-History", typeof(GetHistoryCommand)).AddParameter("Id", entryId);
+                psobjs = context.Helper.ExecuteCurrentPowerShell(out _);
+
+                if (psobjs != null && psobjs.Count == 1)
+                {
+                    var historyInfo = PSObject.Base(psobjs[0]) as HistoryInfo;
+                    if (historyInfo != null)
+                    {
+                        var commandLine = historyInfo.CommandLine;
+                        if (!string.IsNullOrEmpty(commandLine))
+                        {
+                            // var tooltip = "Id: " + historyInfo.Id + "\n" +
+                            //               "ExecutionStatus: " + historyInfo.ExecutionStatus + "\n" +
+                            //               "StartExecutionTime: " + historyInfo.StartExecutionTime + "\n" +
+                            //               "EndExecutionTime: " + historyInfo.EndExecutionTime + "\n";
+                            // Use the commandLine as the Tooltip in case the commandLine is multiple lines of scripts
+                            results.Add(new CompletionResult(commandLine, commandLine, CompletionResultType.History, commandLine));
+                        }
+                    }
+                }
+
+                return results;
+            }
+
+            wordToComplete = "*" + wordToComplete + "*";
+            context.Helper.AddCommandWithPreferenceSetting("Get-History", typeof(GetHistoryCommand));
+
+            psobjs = context.Helper.ExecuteCurrentPowerShell(out _);
+            var pattern = WildcardPattern.Get(wordToComplete, WildcardOptions.IgnoreCase);
+
+            if (psobjs != null)
+            {
+                for (int index = psobjs.Count - 1; index >= 0; index--)
+                {
+                    var psobj = psobjs[index];
+                    if (PSObject.Base(psobj) is not HistoryInfo historyInfo) continue;
+
+                    var commandLine = historyInfo.CommandLine;
+                    if (!string.IsNullOrEmpty(commandLine) && pattern.IsMatch(commandLine))
+                    {
+                        // var tooltip = "Id: " + historyInfo.Id + "\n" +
+                        //               "ExecutionStatus: " + historyInfo.ExecutionStatus + "\n" +
+                        //               "StartExecutionTime: " + historyInfo.StartExecutionTime + "\n" +
+                        //               "EndExecutionTime: " + historyInfo.EndExecutionTime + "\n";
+                        // Use the commandLine as the Tooltip in case the commandLine is multiple lines of scripts
+                        results.Add(new CompletionResult(commandLine, commandLine, CompletionResultType.History, commandLine));
                     }
                 }
             }
@@ -4833,161 +6105,493 @@ internal static List<CompletionResult> CompleteVariable(CompletionContext contex
             return results;
         }
 
-        private static void AddUniqueVariable(HashSet<string> hashedResults, List<CompletionResult> results, string completionText, string listItemText, string tooltip)
+        private static List<CompletionResult> CompleteRequires(CompletionContext context, ref int replacementIndex, ref int replacementLength)
         {
-            if (!hashedResults.Contains(completionText))
+            var results = new List<CompletionResult>();
+
+            int cursorIndex = context.CursorPosition.ColumnNumber - 1;
+            string lineToCursor = context.CursorPosition.Line.Substring(0, cursorIndex);
+
+            // RunAsAdministrator must be the last parameter in a Requires statement so no completion if the cursor is after the parameter.
+            if (lineToCursor.Contains(" -RunAsAdministrator", StringComparison.OrdinalIgnoreCase))
             {
-                hashedResults.Add(completionText);
-                results.Add(new CompletionResult(completionText, listItemText, CompletionResultType.Variable, tooltip));
+                return results;
+            }
+
+            // Regex to find parameter like " -Parameter1" or " -"
+            MatchCollection hashtableKeyMatches = Regex.Matches(lineToCursor, @"\s+-([A-Za-z]+|$)");
+            if (hashtableKeyMatches.Count == 0)
+            {
+                return results;
+            }
+
+            Group currentParameterMatch = hashtableKeyMatches[^1].Groups[1];
+
+            // Complete the parameter if the cursor is at a parameter
+            if (currentParameterMatch.Index + currentParameterMatch.Length == cursorIndex)
+            {
+                string currentParameterPrefix = currentParameterMatch.Value;
+
+                replacementIndex = context.CursorPosition.Offset - currentParameterPrefix.Length;
+                replacementLength = currentParameterPrefix.Length;
+
+                // Produce completions for all parameters that begin with the prefix we've found,
+                // but which haven't already been specified in the line we need to complete
+                foreach (string parameter in s_requiresParameters)
+                {
+                    if (parameter.StartsWith(currentParameterPrefix, StringComparison.OrdinalIgnoreCase)
+                        && !context.CursorPosition.Line.Contains($" -{parameter}", StringComparison.OrdinalIgnoreCase))
+                    {
+                        string toolTip = GetRequiresParametersToolTip(parameter);
+                        results.Add(new CompletionResult(parameter, parameter, CompletionResultType.ParameterName, toolTip));
+                    }
+                }
+
+                return results;
+            }
+
+            // Regex to find parameter values (any text that appears after various delimiters)
+            hashtableKeyMatches = Regex.Matches(lineToCursor, @"(\s+|,|;|{|\""|'|=)(\w+|$)");
+            string currentValue;
+            if (hashtableKeyMatches.Count == 0)
+            {
+                currentValue = string.Empty;
+            }
+            else
+            {
+                currentValue = hashtableKeyMatches[^1].Groups[2].Value;
+            }
+
+            replacementIndex = context.CursorPosition.Offset - currentValue.Length;
+            replacementLength = currentValue.Length;
+
+            // Complete PSEdition parameter values
+            if (currentParameterMatch.Value.Equals("PSEdition", StringComparison.OrdinalIgnoreCase))
+            {
+                foreach (string psEditionEntry in s_requiresPSEditions)
+                {
+                    if (psEditionEntry.StartsWith(currentValue, StringComparison.OrdinalIgnoreCase))
+                    {
+                        string toolTip = GetRequiresPsEditionsToolTip(psEditionEntry);
+                        results.Add(new CompletionResult(psEditionEntry, psEditionEntry, CompletionResultType.ParameterValue, toolTip));
+                    }
+                }
+
+                return results;
+            }
+
+            // Complete Modules module specification values
+            if (currentParameterMatch.Value.Equals("Modules", StringComparison.OrdinalIgnoreCase))
+            {
+                int hashtableStart = lineToCursor.LastIndexOf("@{");
+                int hashtableEnd = lineToCursor.LastIndexOf('}');
+
+                bool insideHashtable = hashtableStart != -1 && (hashtableEnd == -1 || hashtableEnd < hashtableStart);
+
+                // If not inside a hashtable, try to complete a module simple name
+                if (!insideHashtable)
+                {
+                    context.WordToComplete = currentValue;
+                    return CompleteModuleName(context, true);
+                }
+
+                string hashtableString = lineToCursor.Substring(hashtableStart);
+
+                // Regex to find hashtable keys with or without quotes
+                hashtableKeyMatches = Regex.Matches(hashtableString, @"(@{|;)\s*(?:'|\""|\w*)\w*");
+
+                // Build the list of keys we might want to complete, based on what's already been provided
+                var moduleSpecKeysToComplete = new HashSet<string>(s_requiresModuleSpecKeys);
+                bool sawModuleNameLast = false;
+                foreach (Match existingHashtableKeyMatch in hashtableKeyMatches)
+                {
+                    string existingHashtableKey = existingHashtableKeyMatch.Value.TrimStart(s_hashtableKeyPrefixes);
+
+                    if (string.IsNullOrEmpty(existingHashtableKey))
+                    {
+                        continue;
+                    }
+
+                    // Remove the existing key we just saw
+                    moduleSpecKeysToComplete.Remove(existingHashtableKey);
+
+                    // We need to remember later if we saw "ModuleName" as the last hashtable key, for completions
+                    if (sawModuleNameLast = existingHashtableKey.Equals("ModuleName", StringComparison.OrdinalIgnoreCase))
+                    {
+                        continue;
+                    }
+
+                    // "RequiredVersion" is mutually exclusive with "ModuleVersion" and "MaximumVersion"
+                    if (existingHashtableKey.Equals("ModuleVersion", StringComparison.OrdinalIgnoreCase)
+                        || existingHashtableKey.Equals("MaximumVersion", StringComparison.OrdinalIgnoreCase))
+                    {
+                        moduleSpecKeysToComplete.Remove("RequiredVersion");
+                        continue;
+                    }
+
+                    if (existingHashtableKey.Equals("RequiredVersion", StringComparison.OrdinalIgnoreCase))
+                    {
+                        moduleSpecKeysToComplete.Remove("ModuleVersion");
+                        moduleSpecKeysToComplete.Remove("MaximumVersion");
+                        continue;
+                    }
+                }
+
+                Group lastHashtableKeyPrefixGroup = hashtableKeyMatches[^1].Groups[0];
+
+                // If we're not completing a key for the hashtable, try to complete module names, but nothing else
+                bool completingHashtableKey = lastHashtableKeyPrefixGroup.Index + lastHashtableKeyPrefixGroup.Length == hashtableString.Length;
+                if (!completingHashtableKey)
+                {
+                    if (sawModuleNameLast)
+                    {
+                        context.WordToComplete = currentValue;
+                        return CompleteModuleName(context, true);
+                    }
+
+                    return results;
+                }
+
+                // Now try to complete hashtable keys
+                foreach (string moduleSpecKey in moduleSpecKeysToComplete)
+                {
+                    if (moduleSpecKey.StartsWith(currentValue, StringComparison.OrdinalIgnoreCase))
+                    {
+                        string toolTip = GetRequiresModuleSpecKeysToolTip(moduleSpecKey);
+                        results.Add(new CompletionResult(moduleSpecKey, moduleSpecKey, CompletionResultType.ParameterValue, toolTip));
+                    }
+                }
             }
+
+            return results;
         }
 
-        private class FindVariablesVisitor : AstVisitor
+        private static readonly string[] s_requiresParameters = new string[]
+        {
+            "Modules",
+            "PSEdition",
+            "RunAsAdministrator",
+            "Version"
+        };
+
+        private static string GetRequiresParametersToolTip(string name) => name switch
+        {
+            "Modules" => TabCompletionStrings.RequiresModulesParameterDescription,
+            "PSEdition" => TabCompletionStrings.RequiresPSEditionParameterDescription,
+            "RunAsAdministrator" => TabCompletionStrings.RequiresRunAsAdministratorParameterDescription,
+            "Version" => TabCompletionStrings.RequiresVersionParameterDescription,
+            _ => string.Empty
+        };
+
+        private static readonly string[] s_requiresPSEditions = new string[]
+        {
+            "Core",
+            "Desktop"
+        };
+
+        private static string GetRequiresPsEditionsToolTip(string name) => name switch
+        {
+            "Core" => TabCompletionStrings.RequiresPsEditionCoreDescription,
+            "Desktop" => TabCompletionStrings.RequiresPsEditionDesktopDescription,
+            _ => string.Empty
+        };
+
+        private static readonly string[] s_requiresModuleSpecKeys = new string[]
+        {
+            "GUID",
+            "MaximumVersion",
+            "ModuleName",
+            "ModuleVersion",
+            "RequiredVersion"
+        };
+
+        private static string GetRequiresModuleSpecKeysToolTip(string name) => name switch
+        {
+            "GUID" => TabCompletionStrings.RequiresModuleSpecGUIDDescription,
+            "MaximumVersion" => TabCompletionStrings.RequiresModuleSpecMaximumVersionDescription,
+            "ModuleName" => TabCompletionStrings.RequiresModuleSpecModuleNameDescription,
+            "ModuleVersion" => TabCompletionStrings.RequiresModuleSpecModuleVersionDescription,
+            "RequiredVersion" => TabCompletionStrings.RequiresModuleSpecRequiredVersionDescription,
+            _ => string.Empty
+        };
+
+        private static readonly char[] s_hashtableKeyPrefixes = new[]
+        {
+            '@',
+            '{',
+            ';',
+            '"',
+            '\'',
+            ' ',
+        };
+
+        private static List<CompletionResult> CompleteCommentHelp(CompletionContext context, ref int replacementIndex, ref int replacementLength)
         {
-            internal Ast Top;
-            internal Ast CompletionVariableAst;
-            internal readonly List<Tuple<string, Ast>> VariableSources = new List<Tuple<string, Ast>>();
+            // Finds comment keywords like ".DESCRIPTION"
+            MatchCollection usedKeywords = Regex.Matches(context.TokenAtCursor.Text, @"(?<=^\s*\.)\w*", RegexOptions.Multiline);
+            if (usedKeywords.Count == 0)
+            {
+                return null;
+            }
 
-            public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst)
+            // Last keyword at or before the cursor
+            Match lineKeyword = null;
+            for (int i = usedKeywords.Count - 1; i >= 0; i--)
             {
-                if (variableExpressionAst != CompletionVariableAst)
+                Match keyword = usedKeywords[i];
+                if (context.CursorPosition.Offset >= keyword.Index + context.TokenAtCursor.Extent.StartOffset)
                 {
-                    VariableSources.Add(new Tuple<string, Ast>(variableExpressionAst.VariablePath.UserPath, variableExpressionAst));
+                    lineKeyword = keyword;
+                    break;
                 }
+            }
 
-                return AstVisitAction.Continue;
+            if (lineKeyword is null)
+            {
+                return null;
             }
 
-            public override AstVisitAction VisitCommand(CommandAst commandAst)
+            // Cursor is within or at the start/end of the keyword
+            if (context.CursorPosition.Offset <= lineKeyword.Index + lineKeyword.Length + context.TokenAtCursor.Extent.StartOffset)
             {
-                // MSFT: 784739 Stack overflow during tab completion of pipeline variable
-                // $null | % -pv p { $p<TAB> -> In this case $p is pipelinevariable
-                // and is used in the same command. PipelineVariables are not available
-                // in the command they are assigned in. Hence the following code ignores
-                // if the variable being completed is in the command extent.
-                if ((commandAst != CompletionVariableAst) && (!CompletionVariableAst.Extent.IsWithin(commandAst.Extent)))
-                {
-                    string[] desiredParameters = new string[] { "PV", "PipelineVariable", "OV", "OutVariable" };
+                replacementIndex = context.TokenAtCursor.Extent.StartOffset + lineKeyword.Index;
+                replacementLength = lineKeyword.Value.Length;
 
-                    StaticBindingResult bindingResult = StaticParameterBinder.BindCommand(commandAst, false, desiredParameters);
-                    if (bindingResult != null)
+                var validKeywords = new HashSet<string>(s_commentHelpKeywords, StringComparer.OrdinalIgnoreCase);
+                foreach (Match keyword in usedKeywords)
+                {
+                    if (keyword == lineKeyword || s_commentHelpAllowedDuplicateKeywords.Contains(keyword.Value))
                     {
-                        ParameterBindingResult parameterBindingResult;
+                        continue;
+                    }
 
-                        foreach (string commandVariableParameter in desiredParameters)
-                        {
-                            if (bindingResult.BoundParameters.TryGetValue(commandVariableParameter, out parameterBindingResult))
-                            {
-                                VariableSources.Add(new Tuple<string, Ast>((string)parameterBindingResult.ConstantValue, commandAst));
-                            }
-                        }
+                    validKeywords.Remove(keyword.Value);
+                }
+
+                var result = new List<CompletionResult>();
+                foreach (string keyword in validKeywords)
+                {
+                    if (keyword.StartsWith(lineKeyword.Value, StringComparison.OrdinalIgnoreCase))
+                    {
+                        string toolTip = GetCommentHelpKeywordsToolTip(keyword);
+                        result.Add(new CompletionResult(keyword, keyword, CompletionResultType.Keyword, toolTip));
                     }
                 }
 
-                return AstVisitAction.Continue;
+                return result.Count > 0 ? result : null;
             }
 
-            public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst)
+            // Finds the argument for the keyword (any characters following the keyword, ignoring leading/trailing whitespace). For example "C:\New folder"
+            Match keywordArgument = Regex.Match(context.CursorPosition.Line, @"(?<=^\s*\.\w+\s+)\S.*(?<=\S)");
+            int lineStartIndex = lineKeyword.Index - context.CursorPosition.Line.IndexOf(lineKeyword.Value) + context.TokenAtCursor.Extent.StartOffset;
+            int argumentIndex = keywordArgument.Success ? keywordArgument.Index : context.CursorPosition.ColumnNumber - 1;
+
+            replacementIndex = lineStartIndex + argumentIndex;
+            replacementLength = keywordArgument.Value.Length;
+
+            if (lineKeyword.Value.Equals("PARAMETER", StringComparison.OrdinalIgnoreCase))
             {
-                return functionDefinitionAst != Top ? AstVisitAction.SkipChildren : AstVisitAction.Continue;
+                return CompleteCommentParameterValue(context, keywordArgument.Value);
             }
 
-            public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
+            if (lineKeyword.Value.Equals("FORWARDHELPTARGETNAME", StringComparison.OrdinalIgnoreCase))
             {
-                return scriptBlockExpressionAst != Top ? AstVisitAction.SkipChildren : AstVisitAction.Continue;
+                var result = new List<CompletionResult>(CompleteCommand(keywordArgument.Value, "*", CommandTypes.All));
+                return result.Count > 0 ? result : null;
             }
 
-            public override AstVisitAction VisitScriptBlock(ScriptBlockAst scriptBlockAst)
+            if (lineKeyword.Value.Equals("FORWARDHELPCATEGORY", StringComparison.OrdinalIgnoreCase))
             {
-                return scriptBlockAst != Top ? AstVisitAction.SkipChildren : AstVisitAction.Continue;
+                var result = new List<CompletionResult>();
+                foreach (string category in s_commentHelpForwardCategories)
+                {
+                    if (category.StartsWith(keywordArgument.Value, StringComparison.OrdinalIgnoreCase))
+                    {
+                        result.Add(new CompletionResult(category));
+                    }
+                }
+                return result.Count > 0 ? result : null;
             }
-        }
 
-        private static readonly Lazy<SortedSet<string>> s_specialVariablesCache = new Lazy<SortedSet<string>>(BuildSpecialVariablesCache);
-
-        private static SortedSet<string> BuildSpecialVariablesCache()
-        {
-            var result = new SortedSet<string>();
-            foreach (var member in typeof(SpecialVariables).GetFields(BindingFlags.NonPublic | BindingFlags.Static))
+            if (lineKeyword.Value.Equals("REMOTEHELPRUNSPACE", StringComparison.OrdinalIgnoreCase))
             {
-                if (member.FieldType.Equals(typeof(string)))
+                var result = new List<CompletionResult>();
+                foreach (CompletionResult variable in CompleteVariable(keywordArgument.Value))
                 {
-                    result.Add((string)member.GetValue(null));
+                    // ListItemText is used because it excludes the "$" as expected by REMOTEHELPRUNSPACE.
+                    result.Add(new CompletionResult(variable.ListItemText, variable.ListItemText, variable.ResultType, variable.ToolTip));
                 }
+                return result.Count > 0 ? result : null;
             }
 
-            return result;
+            if (lineKeyword.Value.Equals("EXTERNALHELP", StringComparison.OrdinalIgnoreCase))
+            {
+                context.WordToComplete = keywordArgument.Value;
+                var result = new List<CompletionResult>(CompleteFilename(context, containerOnly: false, (new HashSet<string>() { ".xml" })));
+                return result.Count > 0 ? result : null;
+            }
+
+            return null;
         }
 
-        #endregion Variables
+        private static readonly string[] s_commentHelpKeywords = new string[]
+        {
+            "COMPONENT",
+            "DESCRIPTION",
+            "EXAMPLE",
+            "EXTERNALHELP",
+            "FORWARDHELPCATEGORY",
+            "FORWARDHELPTARGETNAME",
+            "FUNCTIONALITY",
+            "INPUTS",
+            "LINK",
+            "NOTES",
+            "OUTPUTS",
+            "PARAMETER",
+            "REMOTEHELPRUNSPACE",
+            "ROLE",
+            "SYNOPSIS"
+        };
 
-        #region Comments
+        private static string GetCommentHelpKeywordsToolTip(string name) => name switch
+        {
+            "COMPONENT" => TabCompletionStrings.CommentHelpCOMPONENTKeywordDescription,
+            "DESCRIPTION" => TabCompletionStrings.CommentHelpDESCRIPTIONKeywordDescription,
+            "EXAMPLE" => TabCompletionStrings.CommentHelpEXAMPLEKeywordDescription,
+            "EXTERNALHELP" => TabCompletionStrings.CommentHelpEXTERNALHELPKeywordDescription,
+            "FORWARDHELPCATEGORY" => TabCompletionStrings.CommentHelpFORWARDHELPCATEGORYKeywordDescription,
+            "FORWARDHELPTARGETNAME" => TabCompletionStrings.CommentHelpFORWARDHELPTARGETNAMEKeywordDescription,
+            "FUNCTIONALITY" => TabCompletionStrings.CommentHelpFUNCTIONALITYKeywordDescription,
+            "INPUTS" => TabCompletionStrings.CommentHelpINPUTSKeywordDescription,
+            "LINK" => TabCompletionStrings.CommentHelpLINKKeywordDescription,
+            "NOTES" => TabCompletionStrings.CommentHelpNOTESKeywordDescription,
+            "OUTPUTS" => TabCompletionStrings.CommentHelpOUTPUTSKeywordDescription,
+            "PARAMETER" => TabCompletionStrings.CommentHelpPARAMETERKeywordDescription,
+            "REMOTEHELPRUNSPACE" => TabCompletionStrings.CommentHelpREMOTEHELPRUNSPACEKeywordDescription,
+            "ROLE" => TabCompletionStrings.CommentHelpROLEKeywordDescription,
+            "SYNOPSIS" => TabCompletionStrings.CommentHelpSYNOPSISKeywordDescription,
+            _ => string.Empty
+        };
 
-        // Complete the history entries
-        internal static List<CompletionResult> CompleteComment(CompletionContext context)
+        private static readonly HashSet<string> s_commentHelpAllowedDuplicateKeywords = new(StringComparer.OrdinalIgnoreCase)
         {
-            List<CompletionResult> results = new List<CompletionResult>();
+            "EXAMPLE",
+            "LINK",
+            "PARAMETER"
+        };
 
-            Match matchResult = Regex.Match(context.WordToComplete, @"^#([\w\-]*)$");
-            if (!matchResult.Success) { return results; }
+        private static readonly string[] s_commentHelpForwardCategories = new string[]
+        {
+            "Alias",
+            "All",
+            "Cmdlet",
+            "ExternalScript",
+            "FAQ",
+            "Filter",
+            "Function",
+            "General",
+            "Glossary",
+            "HelpFile",
+            "Provider",
+            "ScriptCommand"
+        };
 
-            string wordToComplete = matchResult.Groups[1].Value;
-            Collection<PSObject> psobjs;
+        private static FunctionDefinitionAst GetCommentHelpFunctionTarget(CompletionContext context)
+        {
+            if (context.TokenAtCursor.Kind != TokenKind.Comment)
+            {
+                return null;
+            }
 
-            int entryId;
-            if (Regex.IsMatch(wordToComplete, @"^[0-9]+$") && LanguagePrimitives.TryConvertTo(wordToComplete, out entryId))
+            Ast lastAst = context.RelatedAsts[^1];
+            Ast firstAstAfterComment = lastAst.Find(ast => ast.Extent.StartOffset >= context.TokenAtCursor.Extent.EndOffset && ast is not NamedBlockAst, searchNestedScriptBlocks: false);
+
+            // Comment-based help can apply to a following function definition if it starts within 2 lines
+            int commentEndLine = context.TokenAtCursor.Extent.EndLineNumber + 2;
+
+            if (lastAst is NamedBlockAst)
             {
-                context.Helper.AddCommandWithPreferenceSetting("Get-History", typeof(GetHistoryCommand)).AddParameter("Id", entryId);
-                psobjs = context.Helper.ExecuteCurrentPowerShell(out _);
+                // Helpblock before function inside advanced function
+                if (firstAstAfterComment is not null
+                    && firstAstAfterComment.Extent.StartLineNumber <= commentEndLine
+                    && firstAstAfterComment is FunctionDefinitionAst outerHelpFunctionDefAst)
+                {
+                    return outerHelpFunctionDefAst;
+                }
 
-                if (psobjs != null && psobjs.Count == 1)
+                // Helpblock inside function
+                if (lastAst.Parent.Parent is FunctionDefinitionAst innerHelpFunctionDefAst)
                 {
-                    var historyInfo = PSObject.Base(psobjs[0]) as HistoryInfo;
-                    if (historyInfo != null)
-                    {
-                        var commandLine = historyInfo.CommandLine;
-                        if (!string.IsNullOrEmpty(commandLine))
-                        {
-                            // var tooltip = "Id: " + historyInfo.Id + "\n" +
-                            //               "ExecutionStatus: " + historyInfo.ExecutionStatus + "\n" +
-                            //               "StartExecutionTime: " + historyInfo.StartExecutionTime + "\n" +
-                            //               "EndExecutionTime: " + historyInfo.EndExecutionTime + "\n";
-                            // Use the commandLine as the Tooltip in case the commandLine is multiple lines of scripts
-                            results.Add(new CompletionResult(commandLine, commandLine, CompletionResultType.History, commandLine));
-                        }
-                    }
+                    return innerHelpFunctionDefAst;
                 }
+            }
 
-                return results;
+            if (lastAst is ScriptBlockAst)
+            {
+                // Helpblock before function
+                if (firstAstAfterComment is not null
+                    && firstAstAfterComment.Extent.StartLineNumber <= commentEndLine
+                    && firstAstAfterComment is FunctionDefinitionAst statement)
+                {
+                    return statement;
+                }
+
+                // Advanced function with help inside
+                if (lastAst.Parent is FunctionDefinitionAst advFuncDefAst)
+                {
+                    return advFuncDefAst;
+                }
             }
 
-            wordToComplete = "*" + wordToComplete + "*";
-            context.Helper.AddCommandWithPreferenceSetting("Get-History", typeof(GetHistoryCommand));
+            return null;
+        }
 
-            psobjs = context.Helper.ExecuteCurrentPowerShell(out _);
-            var pattern = WildcardPattern.Get(wordToComplete, WildcardOptions.IgnoreCase);
+        private static List<CompletionResult> CompleteCommentParameterValue(CompletionContext context, string wordToComplete)
+        {
+            FunctionDefinitionAst foundFunction = GetCommentHelpFunctionTarget(context);
 
-            if (psobjs != null)
+            ReadOnlyCollection<ParameterAst> foundParameters = null;
+            if (foundFunction is not null)
             {
-                for (int index = psobjs.Count - 1; index >= 0; index--)
+                foundParameters = foundFunction.Parameters ?? foundFunction.Body.ParamBlock?.Parameters;
+            }
+            else if (context.RelatedAsts[^1] is ScriptBlockAst scriptAst)
+            {
+                // The helpblock is for a script file
+                foundParameters = scriptAst.ParamBlock?.Parameters;
+            }
+
+            if (foundParameters is null || foundParameters.Count == 0)
+            {
+                return null;
+            }
+
+            var parametersToShow = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+            foreach (ParameterAst parameter in foundParameters)
+            {
+                if (parameter.Name.VariablePath.UserPath.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
                 {
-                    var psobj = psobjs[index];
-                    if (!(PSObject.Base(psobj) is HistoryInfo historyInfo)) continue;
+                    parametersToShow.Add(parameter.Name.VariablePath.UserPath);
+                }
+            }
 
-                    var commandLine = historyInfo.CommandLine;
-                    if (!string.IsNullOrEmpty(commandLine) && pattern.IsMatch(commandLine))
-                    {
-                        // var tooltip = "Id: " + historyInfo.Id + "\n" +
-                        //               "ExecutionStatus: " + historyInfo.ExecutionStatus + "\n" +
-                        //               "StartExecutionTime: " + historyInfo.StartExecutionTime + "\n" +
-                        //               "EndExecutionTime: " + historyInfo.EndExecutionTime + "\n";
-                        // Use the commandLine as the Tooltip in case the commandLine is multiple lines of scripts
-                        results.Add(new CompletionResult(commandLine, commandLine, CompletionResultType.History, commandLine));
-                    }
+            MatchCollection usedParameters = Regex.Matches(context.TokenAtCursor.Text, @"(?<=^\s*\.parameter\s+)\w.*(?<=\S)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
+            foreach (Match parameter in usedParameters)
+            {
+                if (wordToComplete.Equals(parameter.Value, StringComparison.OrdinalIgnoreCase))
+                {
+                    continue;
                 }
+                parametersToShow.Remove(parameter.Value);
             }
 
-            return results;
+            var result = new List<CompletionResult>();
+            foreach (string parameter in parametersToShow)
+            {
+                result.Add(new CompletionResult(parameter));
+            }
+
+            return result.Count > 0 ? result : null;
         }
 
         #endregion Comments
@@ -4999,17 +6603,19 @@ internal static List<CompletionResult> CompleteComment(CompletionContext context
             new List<Tuple<string, string>>
                 {
                     new Tuple<string, string>("Where", "Where({ expression } [, mode [, numberToReturn]])"),
-                    new Tuple<string, string>("ForEach", "ForEach(expression [, arguments...])")
+                    new Tuple<string, string>("ForEach", "ForEach(expression [, arguments...])"),
+                    new Tuple<string, string>("PSWhere", "PSWhere({ expression } [, mode [, numberToReturn]])"),
+                    new Tuple<string, string>("PSForEach", "PSForEach(expression [, arguments...])"),
                 };
 
         // List of DSC collection-value variables
         private static readonly HashSet<string> s_dscCollectionVariables =
             new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "SelectedNodes", "AllNodes" };
 
-        internal static List<CompletionResult> CompleteMember(CompletionContext context, bool @static)
+        internal static List<CompletionResult> CompleteMember(CompletionContext context, bool @static, ref int replacementLength)
         {
             // If we get here, we know that either:
-            //   * the cursor appeared immediately after a member access token ('.' or '::').
+            //   * the cursor appeared after a member access token ('.' or '::').
             //   * the parent of the ast on the cursor was a member expression.
             //
             // In the first case, we have 2 possibilities:
@@ -5017,31 +6623,35 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
             //   * the last ast is a string constant, with something like:   echo $foo.
 
             var results = new List<CompletionResult>();
-
             var lastAst = context.RelatedAsts.Last();
-            var lastAstAsMemberExpr = lastAst as MemberExpressionAst;
+            var memberName = "*";
             Ast memberNameCandidateAst = null;
             ExpressionAst targetExpr = null;
-            if (lastAstAsMemberExpr != null)
+
+            if (lastAst is MemberExpressionAst LastAstAsMemberExpression)
             {
                 // If the cursor is not inside the member name in the member expression, assume
                 // that the user had incomplete input, but the parser got lucky and succeeded parsing anyway.
-                if (context.TokenAtCursor.Extent.StartOffset >= lastAstAsMemberExpr.Member.Extent.StartOffset)
+                if (context.TokenAtCursor is not null && context.TokenAtCursor.Extent.StartOffset >= LastAstAsMemberExpression.Member.Extent.StartOffset)
                 {
-                    memberNameCandidateAst = lastAstAsMemberExpr.Member;
+                    memberNameCandidateAst = LastAstAsMemberExpression.Member;
                 }
 
-                targetExpr = lastAstAsMemberExpr.Expression;
+                targetExpr = LastAstAsMemberExpression.Expression;
+                // Handles scenario where the cursor is after the member access token but before the text
+                // like: "".<Tab>Le
+                // which completes the member using the partial text after the cursor.
+                if (LastAstAsMemberExpression.Member is StringConstantExpressionAst stringExpression && stringExpression.Extent.StartOffset <= context.CursorPosition.Offset)
+                {
+                    memberName = $"{stringExpression.Value}*";
+                }
             }
             else
             {
                 memberNameCandidateAst = lastAst;
             }
 
-            var memberNameAst = memberNameCandidateAst as StringConstantExpressionAst;
-
-            var memberName = "*";
-            if (memberNameAst != null)
+            if (memberNameCandidateAst is StringConstantExpressionAst memberNameAst)
             {
                 // Make sure to correctly handle: echo $foo.
                 if (!memberNameAst.Value.Equals(".", StringComparison.OrdinalIgnoreCase) && !memberNameAst.Value.Equals("::", StringComparison.OrdinalIgnoreCase))
@@ -5055,8 +6665,7 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
                 return results;
             }
 
-            var commandAst = lastAst.Parent as CommandAst;
-            if (commandAst != null)
+            if (lastAst.Parent is CommandAst commandAst)
             {
                 int i;
                 for (i = commandAst.CommandElements.Count - 1; i >= 0; --i)
@@ -5076,10 +6685,36 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
                     targetExpr = nextToLastAst as ExpressionAst;
                 }
             }
-            else if (lastAst.Parent is MemberExpressionAst)
+            else if (lastAst.Parent is MemberExpressionAst parentAsMemberExpression)
             {
+                if (lastAst is ErrorExpressionAst)
+                {
+                    // Handles scenarios like $PSVersionTable.PSVersi<tab>.Major.
+                    // where the cursor is moved back to a previous member expression while
+                    // there's an incomplete member expression at the end
+                    targetExpr = parentAsMemberExpression;
+                    do
+                    {
+                        if (targetExpr is MemberExpressionAst memberExpression)
+                        {
+                            targetExpr = memberExpression.Expression;
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    } while (targetExpr.Extent.EndOffset >= context.CursorPosition.Offset);
+
+                    if (targetExpr.Parent != parentAsMemberExpression
+                        && targetExpr.Parent is MemberExpressionAst memberAst
+                        && memberAst.Member is StringConstantExpressionAst stringExpression
+                        && stringExpression.Extent.StartOffset <= context.CursorPosition.Offset)
+                    {
+                        memberName = $"{stringExpression.Value}*";
+                    }
+                }
                 // If 'targetExpr' has already been set, we should skip this step. This is for some member completion
-                // cases in ISE. In ISE, we may add a new statement in the middle of existing statements as follows:
+                // cases in VSCode, where we may add a new statement in the middle of existing statements as follows:
                 //     $xml = New-Object Xml
                 //     $xml.
                 //     $xml.Save("C:\data.xml")
@@ -5087,24 +6722,45 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
                 // a MemberExpressionAst '$xml.$xml', whose parent is still a MemberExpressionAst '$xml.$xml.Save'.
                 // But here we DO NOT want to re-assign 'targetExpr' to be '$xml.$xml'. 'targetExpr' in this case
                 // should be '$xml'.
-                if (targetExpr == null)
+                else
                 {
-                    var memberExprAst = (MemberExpressionAst)lastAst.Parent;
-                    targetExpr = memberExprAst.Expression;
+                    targetExpr ??= parentAsMemberExpression.Expression;
                 }
             }
-            else if (lastAst.Parent is BinaryExpressionAst && context.TokenAtCursor.Kind.Equals(TokenKind.Multiply))
+            else if (lastAst.Parent is BinaryExpressionAst binaryExpression && context.TokenAtCursor.Kind.Equals(TokenKind.Multiply))
             {
-                var memberExprAst = ((BinaryExpressionAst)lastAst.Parent).Left as MemberExpressionAst;
-                if (memberExprAst != null)
+                if (binaryExpression.Left is MemberExpressionAst memberExpression)
                 {
-                    targetExpr = memberExprAst.Expression;
-                    if (memberExprAst.Member is StringConstantExpressionAst)
+                    targetExpr = memberExpression.Expression;
+                    if (memberExpression.Member is StringConstantExpressionAst stringExpression)
                     {
-                        memberName = ((StringConstantExpressionAst)memberExprAst.Member).Value + "*";
+                        memberName = $"{stringExpression.Value}*";
                     }
                 }
             }
+            else if (lastAst.Parent is ErrorStatementAst errorStatement)
+            {
+                // Handles switches like:
+                // switch ($x)
+                // {
+                //     'RandomString'.<tab>
+                //     { }
+                // }
+                Ast astBeforeMemberAccessToken = null;
+                for (int i = errorStatement.Bodies.Count - 1; i >= 0; i--)
+                {
+                    astBeforeMemberAccessToken = errorStatement.Bodies[i];
+                    if (astBeforeMemberAccessToken.Extent.EndOffset < lastAst.Extent.EndOffset)
+                    {
+                        break;
+                    }
+                }
+
+                if (astBeforeMemberAccessToken is ExpressionAst expression)
+                {
+                    targetExpr = expression;
+                }
+            }
 
             if (targetExpr == null)
             {
@@ -5137,6 +6793,11 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
                     inferredTypes = AstTypeInference.InferTypeOf(targetExpr, context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval).ToArray();
                 }
 
+                if (!@static && inferredTypes.Length == 1 && inferredTypes[0].Name.Equals("System.Void", StringComparison.OrdinalIgnoreCase))
+                {
+                    return results;
+                }
+
                 if (inferredTypes != null && inferredTypes.Length > 0)
                 {
                     // Use inferred types if we have any
@@ -5193,28 +6854,77 @@ internal static List<CompletionResult> CompleteMember(CompletionContext context,
                 }
             }
 
+            if (memberName != "*" && results.Count > 0)
+            {
+                // -1 because membername always has a trailing wildcard *
+                replacementLength = memberName.Length - 1;
+            }
+
             return results;
         }
 
+        internal static List<CompletionResult> CompleteComparisonOperatorValues(CompletionContext context, ExpressionAst operatorLeftValue)
+        {
+            var result = new List<CompletionResult>();
+            var resolvedTypes = new List<Type>();
+
+            if (SafeExprEvaluator.TrySafeEval(operatorLeftValue, context.ExecutionContext, out object value) && value is not null)
+            {
+                resolvedTypes.Add(value.GetType());
+            }
+            else
+            {
+                var inferredTypes = AstTypeInference.InferTypeOf(operatorLeftValue, context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
+                foreach (var type in inferredTypes)
+                {
+                    if (type.Type is not null)
+                    {
+                        resolvedTypes.Add(type.Type);
+                    }
+                }
+            }
+
+            foreach (var type in resolvedTypes)
+            {
+                if (type.IsEnum)
+                {
+                    foreach (var name in type.GetEnumNames())
+                    {
+                        if (name.StartsWith(context.WordToComplete, StringComparison.OrdinalIgnoreCase))
+                        {
+                            result.Add(new CompletionResult($"'{name}'", name, CompletionResultType.ParameterValue, name));
+                        }
+                    }
+
+                    break;
+                }
+            }
+
+            return result;
+        }
+
         /// <summary>
         /// Complete members against extension methods 'Where' and 'ForEach'
         /// </summary>
-        private static void CompleteExtensionMethods(string memberName, List<CompletionResult> results)
+        private static void CompleteExtensionMethods(string memberName, List<CompletionResult> results, bool addMethodParenthesis = true)
         {
             var pattern = WildcardPattern.Get(memberName, WildcardOptions.IgnoreCase);
-            CompleteExtensionMethods(pattern, results);
+            CompleteExtensionMethods(pattern, results, addMethodParenthesis);
         }
 
         /// <summary>
         /// Complete members against extension methods 'Where' and 'ForEach' based on the given pattern.
         /// </summary>
-        private static void CompleteExtensionMethods(WildcardPattern pattern, List<CompletionResult> results)
+        private static void CompleteExtensionMethods(WildcardPattern pattern, List<CompletionResult> results, bool addMethodParenthesis)
         {
-            results.AddRange(from member in s_extensionMethods
-                             where pattern.IsMatch(member.Item1)
-                             select
-                                 new CompletionResult(member.Item1 + "(", member.Item1,
-                                                      CompletionResultType.Method, member.Item2));
+            foreach (var member in s_extensionMethods)
+            {
+                if (pattern.IsMatch(member.Item1))
+                {
+                    string completionText = addMethodParenthesis ? $"{member.Item1}(" : member.Item1;
+                    results.Add(new CompletionResult(completionText, member.Item1, CompletionResultType.Method, member.Item2));
+                }
+            }
         }
 
         /// <summary>
@@ -5244,23 +6954,143 @@ private static bool IsInDscContext(ExpressionAst expression)
             return Ast.GetAncestorAst<ConfigurationDefinitionAst>(expression) != null;
         }
 
-        internal static void CompleteMemberByInferredType(TypeInferenceContext context, IEnumerable<PSTypeName> inferredTypes, List<CompletionResult> results, string memberName, Func<object, bool> filter, bool isStatic)
+        internal static List<CompletionResult> CompleteIndexExpression(CompletionContext context, ExpressionAst indexTarget)
+        {
+            var result = new List<CompletionResult>();
+            object value;
+            if (SafeExprEvaluator.TrySafeEval(indexTarget, context.ExecutionContext, out value)
+                && value is not null
+                && PSObject.Base(value) is IDictionary dictionary)
+            {
+                foreach (var key in dictionary.Keys)
+                {
+                    if (key is string keyAsString && keyAsString.StartsWith(context.WordToComplete, StringComparison.OrdinalIgnoreCase))
+                    {
+                        result.Add(new CompletionResult($"'{keyAsString}'", keyAsString, CompletionResultType.Property, keyAsString));
+                    }
+                }
+            }
+            else
+            {
+                var inferredTypes = AstTypeInference.InferTypeOf(indexTarget, context.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
+                foreach (var type in inferredTypes)
+                {
+                    if (type is PSSyntheticTypeName synthetic)
+                    {
+                        foreach (var member in synthetic.Members)
+                        {
+                            if (member.Name.StartsWith(context.WordToComplete, StringComparison.OrdinalIgnoreCase))
+                            {
+                                result.Add(new CompletionResult($"'{member.Name}'", member.Name, CompletionResultType.Property, member.Name));
+                            }
+                        }
+                    }
+                }
+            }
+            return result;
+        }
+
+        private static void CompleteFormatViewByInferredType(CompletionContext context, string[] inferredTypeNames, List<CompletionResult> results, string commandName)
+        {
+            var typeInfoDB = context.TypeInferenceContext.ExecutionContext.FormatDBManager.GetTypeInfoDataBase();
+
+            if (typeInfoDB is null)
+            {
+                return;
+            }
+
+            Type controlBodyType = commandName switch
+            {
+                "Format-Table" => typeof(TableControlBody),
+                "Format-List" => typeof(ListControlBody),
+                "Format-Wide" => typeof(WideControlBody),
+                "Format-Custom" => typeof(ComplexControlBody),
+                _ => null
+            };
+
+            Diagnostics.Assert(controlBodyType is not null, "This should never happen unless a new Format-* cmdlet is added");
+
+            var wordToComplete = context.WordToComplete;
+            var quote = CompletionHelpers.HandleDoubleAndSingleQuote(ref wordToComplete);
+            WildcardPattern viewPattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
+
+            var uniqueNames = new HashSet<string>();
+            foreach (ViewDefinition viewDefinition in typeInfoDB.viewDefinitionsSection.viewDefinitionList)
+            {
+                if (viewDefinition?.appliesTo is not null && controlBodyType == viewDefinition.mainControl.GetType())
+                {
+                    foreach (TypeOrGroupReference applyTo in viewDefinition.appliesTo.referenceList)
+                    {
+                        foreach (string inferredTypeName in inferredTypeNames)
+                        {
+                            // We use 'StartsWith()' because 'applyTo.Name' can look like "System.Diagnostics.Process#IncludeUserName".
+                            if (applyTo.name.StartsWith(inferredTypeName, StringComparison.OrdinalIgnoreCase)
+                                && uniqueNames.Add(viewDefinition.name)
+                                && viewPattern.IsMatch(viewDefinition.name))
+                            {
+                                string completionText = viewDefinition.name;
+                                // If the string is quoted or if it contains characters that need quoting, quote it in single quotes
+                                if (quote != string.Empty || ContainsCharactersRequiringQuotes(viewDefinition.name))
+                                {
+                                    completionText = "'" + completionText.Replace("'", "''") + "'";
+                                }
+
+                                results.Add(new CompletionResult(completionText, viewDefinition.name, CompletionResultType.Text, viewDefinition.name));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        internal static void CompleteMemberByInferredType(
+            TypeInferenceContext context,
+            IEnumerable<PSTypeName> inferredTypes,
+            List<CompletionResult> results,
+            string memberName,
+            Func<object, bool> filter,
+            bool isStatic,
+            HashSet<string> excludedMembers = null,
+            bool addMethodParenthesis = true,
+            bool ignoreTypesWithoutDefaultConstructor = false)
         {
             bool extensionMethodsAdded = false;
             HashSet<string> typeNameUsed = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
             WildcardPattern memberNamePattern = WildcardPattern.Get(memberName, WildcardOptions.IgnoreCase);
             foreach (var psTypeName in inferredTypes)
             {
-                if (typeNameUsed.Contains(psTypeName.Name))
+                if (!typeNameUsed.Add(psTypeName.Name)
+                    || (ignoreTypesWithoutDefaultConstructor && psTypeName.Type is not null && psTypeName.Type.GetConstructor(Type.EmptyTypes) is null && !psTypeName.Type.IsInterface))
                 {
                     continue;
                 }
 
-                typeNameUsed.Add(psTypeName.Name);
+                if (ignoreTypesWithoutDefaultConstructor && psTypeName.TypeDefinitionAst is not null)
+                {
+                    bool foundConstructor = false;
+                    bool foundDefaultConstructor = false;
+                    foreach (var member in psTypeName.TypeDefinitionAst.Members)
+                    {
+                        if (member is FunctionMemberAst methodDefinition && methodDefinition.IsConstructor)
+                        {
+                            foundConstructor = true;
+                            if (methodDefinition.Parameters.Count == 0)
+                            {
+                                foundDefaultConstructor = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (foundConstructor && !foundDefaultConstructor)
+                    {
+                        continue;
+                    }
+                }
+
                 var members = context.GetMembersByInferredType(psTypeName, isStatic, filter);
                 foreach (var member in members)
                 {
-                    AddInferredMember(member, memberNamePattern, results);
+                    AddInferredMember(member, memberNamePattern, results, excludedMembers, addMethodParenthesis);
                 }
 
                 // Check if we need to complete against the extension methods 'Where' and 'ForEach'
@@ -5268,7 +7098,7 @@ internal static void CompleteMemberByInferredType(TypeInferenceContext context,
                 {
                     // Complete extension methods 'Where' and 'ForEach' for Enumerable types
                     extensionMethodsAdded = true;
-                    CompleteExtensionMethods(memberNamePattern, results);
+                    CompleteExtensionMethods(memberNamePattern, results, addMethodParenthesis);
                 }
             }
 
@@ -5280,14 +7110,13 @@ internal static void CompleteMemberByInferredType(TypeInferenceContext context,
                     .AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object")
                     .AddParameter("Property", new[] { "ResultType", "ListItemText" })
                     .AddParameter("Unique");
-                Exception unused;
-                var sortedResults = powerShellExecutionHelper.ExecuteCurrentPowerShell(out unused, results);
+                var sortedResults = powerShellExecutionHelper.ExecuteCurrentPowerShell(out _, results);
                 results.Clear();
-                results.AddRange(sortedResults.Select(psobj => PSObject.Base(psobj) as CompletionResult));
+                results.AddRange(sortedResults.Select(static psobj => PSObject.Base(psobj) as CompletionResult));
             }
         }
 
-        private static void AddInferredMember(object member, WildcardPattern memberNamePattern, List<CompletionResult> results)
+        private static void AddInferredMember(object member, WildcardPattern memberNamePattern, List<CompletionResult> results, HashSet<string> excludedMembers, bool addMethodParenthesis)
         {
             string memberName = null;
             bool isMethod = false;
@@ -5313,7 +7142,7 @@ private static void AddInferredMember(object member, WildcardPattern memberNameP
             {
                 memberName = methodCacheEntry[0].method.Name;
                 isMethod = true;
-                getToolTip = () => string.Join("\n", methodCacheEntry.methodInformationStructures.Select(m => m.methodDefinition));
+                getToolTip = () => string.Join('\n', methodCacheEntry.methodInformationStructures.Select(static m => m.methodDefinition));
             }
 
             var psMemberInfo = member as PSMemberInfo;
@@ -5332,21 +7161,45 @@ private static void AddInferredMember(object member, WildcardPattern memberNameP
                 getToolTip = () => GetCimPropertyToString(cimProperty);
             }
 
-            var memberAst = member as MemberAst;
-            if (memberAst != null)
+            if (member is MemberAst memberAst)
             {
-                memberName = memberAst is CompilerGeneratedMemberFunctionAst ? "new" : memberAst.Name;
-                isMethod = memberAst is FunctionMemberAst || memberAst is CompilerGeneratedMemberFunctionAst;
+                if (memberAst is CompilerGeneratedMemberFunctionAst)
+                {
+                    memberName = "new";
+                    isMethod = true;
+                }
+                else if (memberAst is FunctionMemberAst functionMember)
+                {
+                    memberName = functionMember.IsConstructor ? "new" : functionMember.Name;
+                    isMethod = true;
+                }
+                else
+                {
+                    memberName = memberAst.Name;
+                    isMethod = false;
+                }
                 getToolTip = memberAst.GetTooltip;
             }
 
-            if (memberName == null || !memberNamePattern.IsMatch(memberName))
+            if (memberName == null || !memberNamePattern.IsMatch(memberName) || (excludedMembers is not null && excludedMembers.Contains(memberName)))
             {
                 return;
             }
 
             var completionResultType = isMethod ? CompletionResultType.Method : CompletionResultType.Property;
-            var completionText = isMethod ? memberName + "(" : memberName;
+            string completionText;
+            if (isMethod && addMethodParenthesis)
+            {
+                completionText = $"{memberName}(";
+            }
+            else if (ContainsCharactersRequiringQuotes(memberName))
+            {
+                completionText = $"'{memberName}'";
+            }
+            else
+            {
+                completionText = memberName;
+            }
 
             results.Add(new CompletionResult(completionText, memberName, completionResultType, getToolTip()));
         }
@@ -5388,6 +7241,12 @@ private static bool IsWriteablePropertyMember(object member)
                 return psPropertyInfo.IsSettable;
             }
 
+            if (member is PropertyMemberAst)
+            {
+                // Properties in PowerShell classes are always writeable
+                return true;
+            }
+
             return false;
         }
 
@@ -5539,7 +7398,7 @@ internal override CompletionResult GetCompletionResult(string keyMatched, string
         /// This type represents a generic type for type name completion. It only contains information that can be
         /// inferred from the full type name.
         /// </summary>
-        private class GenericTypeCompletionInStringFormat : TypeCompletionInStringFormat
+        private sealed class GenericTypeCompletionInStringFormat : TypeCompletionInStringFormat
         {
             /// <summary>
             /// Get the number of generic type arguments required by the type represented by this instance.
@@ -5591,7 +7450,7 @@ internal override CompletionResult GetCompletionResult(string keyMatched, string
                     if (i != 0) tooltip.Append(", ");
                     tooltip.Append(GenericArgumentCount == 1
                                        ? "T"
-                                       : string.Format(CultureInfo.InvariantCulture, "T{0}", i + 1));
+                                       : string.Create(CultureInfo.InvariantCulture, $"T{i + 1}"));
                 }
 
                 tooltip.Append(']');
@@ -5656,7 +7515,7 @@ internal override CompletionResult GetCompletionResult(string keyMatched, string
         /// <summary>
         /// This type represents a generic type for type name completion. It contains the actual type instance.
         /// </summary>
-        private class GenericTypeCompletion : TypeCompletion
+        private sealed class GenericTypeCompletion : TypeCompletion
         {
             internal override CompletionResult GetCompletionResult(string keyMatched, string prefix, string suffix)
             {
@@ -5693,7 +7552,7 @@ internal override CompletionResult GetCompletionResult(string keyMatched, string
         /// <summary>
         /// This type represents a namespace for namespace completion.
         /// </summary>
-        private class NamespaceCompletion : TypeCompletionBase
+        private sealed class NamespaceCompletion : TypeCompletionBase
         {
             internal string Namespace;
 
@@ -5715,7 +7574,7 @@ internal override CompletionResult GetCompletionResult(string keyMatched, string
             }
         }
 
-        private class TypeCompletionMapping
+        private sealed class TypeCompletionMapping
         {
             // The Key is the string we'll be searching on.  It could complete to various things.
             internal string Key;
@@ -5824,7 +7683,7 @@ private static TypeCompletionMapping[][] InitializeTypeCache()
 
             #endregion Process_LoadedAssemblies
 
-            var grouping = entries.Values.GroupBy(t => t.Key.Count(c => c == '.')).OrderBy(g => g.Key).ToArray();
+            var grouping = entries.Values.GroupBy(static t => t.Key.Count(c => c == '.')).OrderBy(static g => g.Key).ToArray();
             var localTypeCache = new TypeCompletionMapping[grouping.Last().Key + 1][];
             foreach (var group in grouping)
             {
@@ -5941,7 +7800,7 @@ internal static List<CompletionResult> CompleteNamespace(CompletionContext conte
             var localTypeCache = s_typeCache ?? InitializeTypeCache();
             var results = new List<CompletionResult>();
             var wordToComplete = context.WordToComplete;
-            var dots = wordToComplete.Count(c => c == '.');
+            var dots = wordToComplete.Count(static c => c == '.');
             if (dots >= localTypeCache.Length || localTypeCache[dots] == null)
             {
                 return results;
@@ -5957,7 +7816,7 @@ internal static List<CompletionResult> CompleteNamespace(CompletionContext conte
                 }
             }
 
-            results.Sort((c1, c2) => string.Compare(c1.ListItemText, c2.ListItemText, StringComparison.OrdinalIgnoreCase));
+            results.Sort(static (c1, c2) => string.Compare(c1.ListItemText, c2.ListItemText, StringComparison.OrdinalIgnoreCase));
             return results;
         }
 
@@ -5985,7 +7844,7 @@ internal static List<CompletionResult> CompleteType(CompletionContext context, s
             var results = new List<CompletionResult>();
             var completionTextSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
             var wordToComplete = context.WordToComplete;
-            var dots = wordToComplete.Count(c => c == '.');
+            var dots = wordToComplete.Count(static c => c == '.');
             if (dots >= localTypeCache.Length || localTypeCache[dots] == null)
             {
                 return results;
@@ -6016,7 +7875,7 @@ internal static List<CompletionResult> CompleteType(CompletionContext context, s
             if (context.RelatedAsts != null && context.RelatedAsts.Count > 0)
             {
                 var scriptBlockAst = (ScriptBlockAst)context.RelatedAsts[0];
-                var typeAsts = scriptBlockAst.FindAll(ast => ast is TypeDefinitionAst, false).Cast<TypeDefinitionAst>();
+                var typeAsts = scriptBlockAst.FindAll(static ast => ast is TypeDefinitionAst, false).Cast<TypeDefinitionAst>();
                 foreach (var typeAst in typeAsts.Where(ast => pattern.IsMatch(ast.Name)))
                 {
                     string toolTipPrefix = string.Empty;
@@ -6031,7 +7890,7 @@ internal static List<CompletionResult> CompleteType(CompletionContext context, s
                 }
             }
 
-            results.Sort((c1, c2) => string.Compare(c1.ListItemText, c2.ListItemText, StringComparison.OrdinalIgnoreCase));
+            results.Sort(static (c1, c2) => string.Compare(c1.ListItemText, c2.ListItemText, StringComparison.OrdinalIgnoreCase));
             return results;
         }
 
@@ -6071,67 +7930,31 @@ private static string GetNamespaceToRemove(CompletionContext context, TypeComple
 
         internal static List<CompletionResult> CompleteHelpTopics(CompletionContext context)
         {
-            var results = new List<CompletionResult>();
-            var searchPaths = new List<string>();
-            var currentCulture = CultureInfo.CurrentCulture.Name;
-
-            // Add the user scope path first, since it is searched in order.
-            var userHelpRoot = Path.Combine(HelpUtils.GetUserHomeHelpSearchPath(), currentCulture);
-
-            if (Directory.Exists(userHelpRoot))
-            {
-                searchPaths.Add(userHelpRoot);
-            }
-
-            var dirPath = Path.Combine(Utils.GetApplicationBase(Utils.DefaultPowerShellShellID), currentCulture);
-            searchPaths.Add(dirPath);
-
-            var wordToComplete = context.WordToComplete + "*";
-            var topicPattern = WildcardPattern.Get("about_*.help.txt", WildcardOptions.IgnoreCase);
-            List<string> files = new List<string>();
-
-            try
+            ArrayList helpProviders = context.ExecutionContext.HelpSystem.HelpProviders;
+            HelpFileHelpProvider helpFileProvider = null;
+            for (int i = helpProviders.Count - 1; i >= 0; i--)
             {
-                var wildcardPattern = WildcardPattern.Get(wordToComplete, WildcardOptions.IgnoreCase);
-
-                foreach (var dir in searchPaths)
+                if (helpProviders[i] is HelpFileHelpProvider provider)
                 {
-                    foreach (var file in Directory.EnumerateFiles(dir))
-                    {
-                        if (wildcardPattern.IsMatch(Path.GetFileName(file)))
-                        {
-                            files.Add(file);
-                        }
-                    }
+                    helpFileProvider = provider;
+                    break;
                 }
             }
-            catch (Exception)
+
+            if (helpFileProvider is null)
             {
+                return null;
             }
 
-            if (files != null)
+            List<CompletionResult> results = new();
+            Collection<string> filesMatched = MUIFileSearcher.SearchFiles($"{context.WordToComplete}*.help.txt", helpFileProvider.GetExtendedSearchPaths());
+            foreach (string path in filesMatched)
             {
-                foreach (string file in files)
+                string fileName = Path.GetFileName(path);
+                if (fileName.StartsWith("about_", StringComparison.OrdinalIgnoreCase))
                 {
-                    if (file == null)
-                    {
-                        continue;
-                    }
-
-                    try
-                    {
-                        var fileName = Path.GetFileName(file);
-                        if (fileName == null || !topicPattern.IsMatch(fileName))
-                            continue;
-
-                        // All topic files are ending with ".help.txt"
-                        var completionText = fileName.Substring(0, fileName.Length - 9);
-                        results.Add(new CompletionResult(completionText));
-                    }
-                    catch (Exception)
-                    {
-                        continue;
-                    }
+                    string topicName = fileName.Substring(0, fileName.Length - ".help.txt".Length);
+                    results.Add(new CompletionResult(topicName, topicName, CompletionResultType.ParameterValue, topicName));
                 }
             }
 
@@ -6153,9 +7976,7 @@ internal static List<CompletionResult> CompleteStatementFlags(TokenKind kind, st
                     bool withColon = wordToComplete.EndsWith(':');
                     wordToComplete = withColon ? wordToComplete.Remove(wordToComplete.Length - 1) : wordToComplete;
 
-                    string enumString = LanguagePrimitives.EnumSingleTypeConverter.EnumValues(typeof(SwitchFlags));
-                    string separator = CultureInfo.CurrentUICulture.TextInfo.ListSeparator;
-                    string[] enumArray = enumString.Split(separator, StringSplitOptions.RemoveEmptyEntries);
+                    string[] enumArray = LanguagePrimitives.EnumSingleTypeConverter.GetEnumNames(typeof(SwitchFlags));
 
                     var pattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
                     var enumList = new List<string>();
@@ -6285,162 +8106,469 @@ internal static List<CompletionResult> CompleteHashtableKeyForDynamicKeyword(
             return results;
         }
 
-        internal static List<CompletionResult> CompleteHashtableKey(CompletionContext completionContext, HashtableAst hashtableAst)
+        private static PSTypeName GetNestedHashtableKeyType(TypeInferenceContext typeContext, PSTypeName parentType, IList<string> nestedKeys)
         {
-            var typeAst = hashtableAst.Parent as ConvertExpressionAst;
-            if (typeAst != null)
+            var currentType = parentType;
+            // The nestedKeys list should have the outer most key as the last element, and the inner most key as the first element
+            // If we fail to resolve the type of any key we return null
+            for (int i = nestedKeys.Count - 1; i >= 0; i--)
             {
-                var result = new List<CompletionResult>();
-                CompleteMemberByInferredType(
-                    completionContext.TypeInferenceContext, AstTypeInference.InferTypeOf(typeAst, completionContext.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval),
-                    result, completionContext.WordToComplete + "*", IsWriteablePropertyMember, isStatic: false);
-                return result;
+                if (currentType is null)
+                {
+                    return null;
+                }
+
+                var typeMembers = typeContext.GetMembersByInferredType(currentType, false, null);
+                currentType = null;
+                foreach (var member in typeMembers)
+                {
+                    if (member is PropertyInfo propertyInfo)
+                    {
+                        if (propertyInfo.Name.Equals(nestedKeys[i], StringComparison.OrdinalIgnoreCase))
+                        {
+                            currentType = new PSTypeName(propertyInfo.PropertyType);
+                            break;
+                        }
+                    }
+                    else if (member is PropertyMemberAst memberAst && memberAst.Name.Equals(nestedKeys[i], StringComparison.OrdinalIgnoreCase))
+                    {
+                        if (memberAst.PropertyType is null)
+                        {
+                            return null;
+                        }
+                        else
+                        {
+                            if (memberAst.PropertyType.TypeName is ArrayTypeName arrayType)
+                            {
+                                currentType = new PSTypeName(arrayType.ElementType);
+                            }
+                            else
+                            {
+                                currentType = new PSTypeName(memberAst.PropertyType.TypeName);
+                            }
+                        }
+
+                        break;
+                    }
+                }
             }
 
-            // hashtable arguments sometimes have expected keys.  Examples:
-            //   new-object System.Drawing.Point -prop @{ X=1; Y=1 }
-            //   dir | sort-object -prop @{Expression=...   ; Ascending=... }
-            // format-table -Property
-            //     Expression
-            //     FormatString
-            //     Label
-            //     Width
-            //     Alignment
-            // format-list -Property
-            //     Expression
-            //     FormatString
-            //     Label
-            // format-custom -Property
-            //     Expression
-            //     Depth
-            // format-* -GroupBy
-            //     Expression
-            //     FormatString
-            //     Label
-            //
+            return currentType;
+        }
+
+        internal static List<CompletionResult> CompleteHashtableKey(CompletionContext completionContext, HashtableAst hashtableAst)
+        {
+            Ast previousAst = hashtableAst;
+            Ast parentAst = hashtableAst.Parent;
+            string parameterName = null;
+            var nestedHashtableKeys = new List<string>();
+
+            // This loop determines if it's a nested hashtable and what the outermost hashtable is used for (Dynamic keyword, command argument, etc.)
+            // Note this also considers hashtables with arrays of hashtables to be nested to support scenarios like this:
+            // class Level1
+            // {
+            //     [Level2[]] $Prop1
+            // }
+            // class Level2
+            // {
+            //     [string] $Prop2
+            // }
+            // [Level1] @{
+            //     Prop1 = @(
+            //         @{Prop2="Hello"}
+            //         @{Pro<Tab>}
+            //     )
+            // }
+            while (parentAst is not null)
+            {
+                switch (parentAst)
+                {
+                    case HashtableAst parentTable:
+                        foreach (var pair in parentTable.KeyValuePairs)
+                        {
+                            if (pair.Item2 == previousAst)
+                            {
+                                // Try to get the value of the hashtable key in the nested hashtable.
+                                // If we fail to get the value then return early because we can't generate any useful completions
+                                if (SafeExprEvaluator.TrySafeEval(pair.Item1, completionContext.ExecutionContext, out object value))
+                                {
+                                    if (value is not string stringValue)
+                                    {
+                                        return null;
+                                    }
+
+                                    nestedHashtableKeys.Add(stringValue);
+                                    break;
+                                }
+                                else
+                                {
+                                    return null;
+                                }
+                            }
+                        }
+                        break;
+
+                    case DynamicKeywordStatementAst dynamicKeyword:
+                        return CompleteHashtableKeyForDynamicKeyword(completionContext, dynamicKeyword, hashtableAst);
+
+                    case CommandParameterAst cmdParam:
+                        parameterName = cmdParam.ParameterName;
+                        parentAst = cmdParam.Parent;
+                        goto ExitWhileLoop;
+
+                    case AssignmentStatementAst assignment:
+                        if (assignment.Left is MemberExpressionAst or ConvertExpressionAst)
+                        {
+                            parentAst = assignment.Left;
+                        }
+                        goto ExitWhileLoop;
+
+                    case CommandAst:
+                    case ConvertExpressionAst:
+                    case UsingStatementAst:
+                        goto ExitWhileLoop;
+
+                    case CommandExpressionAst:
+                    case PipelineAst:
+                    case StatementBlockAst:
+                    case ArrayExpressionAst:
+                    case ArrayLiteralAst:
+                        break;
+
+                    default:
+                        return null;
+                }
 
-            // Find out if we are in a command argument.  Consider the following possibilities:
-            //     cmd @{}
-            //     cmd -foo @{}
-            //     cmd -foo:@{}
-            //     cmd @{},@{}
-            //     cmd -foo @{},@{}
-            //     cmd -foo:@{},@{}
+                previousAst = parentAst;
+                parentAst = parentAst.Parent;
+            }
 
-            var ast = hashtableAst.Parent;
+            ExitWhileLoop:
 
-            // Handle completion for hashtable within DynamicKeyword statement
-            var dynamicKeywordStatementAst = ast as DynamicKeywordStatementAst;
-            if (dynamicKeywordStatementAst != null)
+            bool hashtableIsNested = nestedHashtableKeys.Count > 0;
+            int cursorOffset = completionContext.CursorPosition.Offset;
+            string wordToComplete = completionContext.WordToComplete;
+            var excludedKeys = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+            // Filters out keys that have already been defined in the hashtable, except the one the cursor is at
+            foreach (var keyPair in hashtableAst.KeyValuePairs)
             {
-                return CompleteHashtableKeyForDynamicKeyword(completionContext, dynamicKeywordStatementAst, hashtableAst);
+                if (!(cursorOffset >= keyPair.Item1.Extent.StartOffset && cursorOffset <= keyPair.Item1.Extent.EndOffset))
+                {
+                    excludedKeys.Add(keyPair.Item1.Extent.Text);
+                }
             }
 
-            if (ast is ArrayLiteralAst)
+            if (parentAst is UsingStatementAst usingStatement)
             {
-                ast = ast.Parent;
+                if (hashtableIsNested || usingStatement.UsingStatementKind != UsingStatementKind.Module)
+                {
+                    return null;
+                }
+
+                var result = new List<CompletionResult>();
+                foreach (string key in s_requiresModuleSpecKeys)
+                {
+                    if (excludedKeys.Contains(key)
+                        || (wordToComplete is not null && !key.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
+                        || (key.Equals("RequiredVersion") && (excludedKeys.Contains("ModuleVersion") || excludedKeys.Contains("MaximumVersion")))
+                        || ((key.Equals("ModuleVersion") || key.Equals("MaximumVersion")) && excludedKeys.Contains("RequiredVersion")))
+                    {
+                        continue;
+                    }
+
+                    string toolTip = GetRequiresModuleSpecKeysToolTip(key);
+
+                    result.Add(new CompletionResult(key, key, CompletionResultType.Property, toolTip));
+                }
+
+                return result;
             }
 
-            if (ast is CommandParameterAst)
+            if (parentAst is MemberExpressionAst or ConvertExpressionAst)
             {
-                ast = ast.Parent;
+                IEnumerable<PSTypeName> inferredTypes;
+                if (hashtableIsNested)
+                {
+                    var nestedType = GetNestedHashtableKeyType(
+                        completionContext.TypeInferenceContext,
+                        AstTypeInference.InferTypeOf(parentAst, completionContext.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval)[0],
+                        nestedHashtableKeys);
+                    if (nestedType is null)
+                    {
+                        return null;
+                    }
+
+                    inferredTypes = TypeInferenceVisitor.GetInferredEnumeratedTypes(new PSTypeName[] { nestedType });
+                }
+                else
+                {
+                    inferredTypes = TypeInferenceVisitor.GetInferredEnumeratedTypes(
+                        AstTypeInference.InferTypeOf(parentAst, completionContext.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval));
+                }
+
+                var result = new List<CompletionResult>();
+                CompleteMemberByInferredType(
+                    completionContext.TypeInferenceContext,
+                    inferredTypes,
+                    result,
+                    wordToComplete + "*",
+                    IsWriteablePropertyMember,
+                    isStatic: false,
+                    excludedKeys,
+                    ignoreTypesWithoutDefaultConstructor: true);
+                return result;
             }
 
-            var commandAst = ast as CommandAst;
-            if (commandAst != null)
+            if (parentAst is CommandAst commandAst)
             {
                 var binding = new PseudoParameterBinder().DoPseudoParameterBinding(commandAst, null, null, bindingType: PseudoParameterBinder.BindingType.ArgumentCompletion);
-                if (binding == null)
+                if (binding is null)
                 {
                     return null;
                 }
 
-                string parameterName = null;
-                foreach (var boundArg in binding.BoundArguments)
+                if (parameterName is null)
                 {
-                    var astPair = boundArg.Value as AstPair;
-                    if (astPair != null)
+                    foreach (var boundArg in binding.BoundArguments)
                     {
-                        if (astPair.Argument == hashtableAst)
+                        if (boundArg.Value is AstPair pair && pair.Argument == previousAst)
                         {
                             parameterName = boundArg.Key;
-                            break;
                         }
-
-                        continue;
-                    }
-
-                    var astArrayPair = boundArg.Value as AstArrayPair;
-                    if (astArrayPair != null)
-                    {
-                        if (astArrayPair.Argument.Contains(hashtableAst))
+                        else if (boundArg.Value is AstArrayPair arrayPair && arrayPair.Argument.Contains(previousAst))
                         {
                             parameterName = boundArg.Key;
-                            break;
                         }
-
-                        continue;
                     }
                 }
 
-                if (parameterName != null)
+                if (parameterName is not null)
                 {
+                    List<CompletionResult> results;
                     if (parameterName.Equals("GroupBy", StringComparison.OrdinalIgnoreCase))
                     {
-                        switch (binding.CommandName)
+                        if (!hashtableIsNested)
                         {
-                            case "Format-Table":
-                            case "Format-List":
-                            case "Format-Wide":
-                            case "Format-Custom":
-                                return GetSpecialHashTableKeyMembers("Expression", "FormatString", "Label");
+                            switch (binding.CommandName)
+                            {
+                                case "Format-Table":
+                                case "Format-List":
+                                case "Format-Wide":
+                                case "Format-Custom":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "FormatString", "Label");
+                            }
                         }
 
                         return null;
                     }
 
                     if (parameterName.Equals("Property", StringComparison.OrdinalIgnoreCase))
+                    {
+                        if (!hashtableIsNested)
+                        {
+                            switch (binding.CommandName)
+                            {
+                                case "New-Object":
+                                    var inferredType = AstTypeInference.InferTypeOf(commandAst, completionContext.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
+                                    results = new List<CompletionResult>();
+                                    CompleteMemberByInferredType(
+                                        completionContext.TypeInferenceContext, inferredType,
+                                        results, completionContext.WordToComplete + "*", IsWriteablePropertyMember, isStatic: false, excludedKeys);
+                                    return results;
+                                case "Select-Object":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Name", "Expression");
+                                case "Sort-Object":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "Ascending", "Descending");
+                                case "Group-Object":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression");
+                                case "Format-Table":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "FormatString", "Label", "Width", "Alignment");
+                                case "Format-List":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "FormatString", "Label");
+                                case "Format-Wide":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "FormatString");
+                                case "Format-Custom":
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "Expression", "Depth");
+                                case "Set-CimInstance":
+                                case "New-CimInstance":
+                                    results = new List<CompletionResult>();
+                                    NativeCompletionCimCommands(parameterName, binding.BoundArguments, results, commandAst, completionContext, excludedKeys, binding.CommandName);
+                                    // this method adds a null CompletionResult to the list but we don't want that here.
+                                    if (results.Count > 1)
+                                    {
+                                        results.RemoveAt(results.Count - 1);
+                                        return results;
+                                    }
+                                    return null;
+                            }
+                            return null;
+                        }
+                    }
+
+                    if (parameterName.Equals("FilterHashtable", StringComparison.OrdinalIgnoreCase))
                     {
                         switch (binding.CommandName)
                         {
-                            case "New-Object":
-                                var inferredType = AstTypeInference.InferTypeOf(commandAst, completionContext.TypeInferenceContext, TypeInferenceRuntimePermissions.AllowSafeEval);
-                                var result = new List<CompletionResult>();
-                                CompleteMemberByInferredType(
-                                    completionContext.TypeInferenceContext, inferredType,
-                                    result, completionContext.WordToComplete + "*", IsWriteablePropertyMember, isStatic: false);
-                                return result;
-                            case "Select-Object":
-                                return GetSpecialHashTableKeyMembers("Name", "Expression");
-                            case "Sort-Object":
-                                return GetSpecialHashTableKeyMembers("Expression", "Ascending", "Descending");
-                            case "Group-Object":
-                                return GetSpecialHashTableKeyMembers("Expression");
-                            case "Format-Table":
-                                return GetSpecialHashTableKeyMembers("Expression", "FormatString", "Label", "Width", "Alignment");
-                            case "Format-List":
-                                return GetSpecialHashTableKeyMembers("Expression", "FormatString", "Label");
-                            case "Format-Wide":
-                                return GetSpecialHashTableKeyMembers("Expression", "FormatString");
-                            case "Format-Custom":
-                                return GetSpecialHashTableKeyMembers("Expression", "Depth");
+                            case "Get-WinEvent":
+                                if (nestedHashtableKeys.Count == 1
+                                    && nestedHashtableKeys[0].Equals("SuppressHashFilter", StringComparison.OrdinalIgnoreCase)
+                                    && hashtableAst.Parent.Parent.Parent is HashtableAst)
+                                {
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "LogName", "ProviderName", "Path", "Keywords", "ID", "Level",
+                                    "StartTime", "EndTime", "UserID", "Data");
+                                }
+                                else if (!hashtableIsNested)
+                                {
+                                    return GetSpecialHashTableKeyMembers(excludedKeys, wordToComplete, "LogName", "ProviderName", "Path", "Keywords", "ID", "Level",
+                                    "StartTime", "EndTime", "UserID", "Data", "SuppressHashFilter");
+                                }
+
+                                return null;
+                        }
+                    }
+
+                    if (parameterName.Equals("Arguments", StringComparison.OrdinalIgnoreCase))
+                    {
+                        if (!hashtableIsNested)
+                        {
+                            switch (binding.CommandName)
+                            {
+                                case "Invoke-CimMethod":
+                                    results = new List<CompletionResult>();
+                                    NativeCompletionCimCommands(parameterName, binding.BoundArguments, results, commandAst, completionContext, excludedKeys, binding.CommandName);
+                                    // this method adds a null CompletionResult to the list but we don't want that here.
+                                    if (results.Count > 1)
+                                    {
+                                        results.RemoveAt(results.Count - 1);
+                                        return results;
+                                    }
+                                    return null;
+                            }
+                        }
+                        return null;
+                    }
+
+                    IEnumerable<PSTypeName> inferredTypes;
+                    if (hashtableIsNested)
+                    {
+                        var nestedType = GetNestedHashtableKeyType(
+                            completionContext.TypeInferenceContext,
+                            new PSTypeName(binding.BoundParameters[parameterName].Parameter.Type),
+                            nestedHashtableKeys);
+                        if (nestedType is null)
+                        {
+                            return null;
+                        }
+                        inferredTypes = TypeInferenceVisitor.GetInferredEnumeratedTypes(new PSTypeName[] { nestedType });
+                    }
+                    else
+                    {
+                        inferredTypes = TypeInferenceVisitor.GetInferredEnumeratedTypes(new PSTypeName[] { new PSTypeName(binding.BoundParameters[parameterName].Parameter.Type) });
+                    }
+
+                    results = new List<CompletionResult>();
+                    CompleteMemberByInferredType(
+                        completionContext.TypeInferenceContext,
+                        inferredTypes,
+                        results,
+                        $"{wordToComplete}*",
+                        IsWriteablePropertyMember,
+                        isStatic: false,
+                        excludedKeys,
+                        ignoreTypesWithoutDefaultConstructor: true);
+                    return results;
+                }
+            }
+            else if (!hashtableIsNested && parentAst is AssignmentStatementAst assignment && assignment.Left is VariableExpressionAst assignmentVar)
+            {
+                var firstSplatUse = completionContext.RelatedAsts[0].Find(
+                    currentAst =>
+                        currentAst.Extent.StartOffset > hashtableAst.Extent.EndOffset
+                        && currentAst is VariableExpressionAst splatVar
+                        && splatVar.Splatted
+                        && splatVar.VariablePath.UserPath.Equals(assignmentVar.VariablePath.UserPath, StringComparison.OrdinalIgnoreCase),
+                    searchNestedScriptBlocks: true) as VariableExpressionAst;
+
+                if (firstSplatUse is not null && firstSplatUse.Parent is CommandAst command)
+                {
+                    var binding = new PseudoParameterBinder()
+                        .DoPseudoParameterBinding(
+                            command,
+                            pipeArgumentType: null,
+                            paramAstAtCursor: null,
+                            PseudoParameterBinder.BindingType.ParameterCompletion);
+
+                    if (binding is null)
+                    {
+                        return null;
+                    }
+
+                    var results = new List<CompletionResult>();
+                    foreach (var parameter in binding.UnboundParameters)
+                    {
+                        if (!excludedKeys.Contains(parameter.Parameter.Name)
+                            && (wordToComplete is null || parameter.Parameter.Name.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase)))
+                        {
+                            results.Add(new CompletionResult(parameter.Parameter.Name, parameter.Parameter.Name, CompletionResultType.ParameterName, $"[{parameter.Parameter.Type.Name}]"));
                         }
                     }
+
+                    if (results.Count > 0)
+                    {
+                        return results;
+                    }
                 }
             }
 
             return null;
         }
 
-        private static List<CompletionResult> GetSpecialHashTableKeyMembers(params string[] keys)
+        private static List<CompletionResult> GetSpecialHashTableKeyMembers(HashSet<string> excludedKeys, string wordToComplete, params string[] keys)
         {
-            // Resources were removed because they missed the deadline for loc.
-            // return keys.Select(key => new CompletionResult(key, key, CompletionResultType.Property,
-            //    ResourceManagerCache.GetResourceString(typeof(CompletionCompleters).Assembly,
-            //                                           "TabCompletionStrings", key + "HashKeyDescription"))).ToList();
-            return keys.Select(key => new CompletionResult(key, key, CompletionResultType.Property, key)).ToList();
+            var result = new List<CompletionResult>();
+            foreach (string key in keys)
+            {
+                if ((string.IsNullOrEmpty(wordToComplete) || key.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase)) && !excludedKeys.Contains(key))
+                {
+                    string toolTip = GetHashtableKeyDescriptionToolTip(key);
+
+                    result.Add(new CompletionResult(key, key, CompletionResultType.Property, toolTip));
+                }
+            }
+
+            if (result.Count == 0)
+            {
+                return null;
+            }
+
+            return result;
         }
 
+        private static string GetHashtableKeyDescriptionToolTip(string name) => name switch
+        {
+            "Alignment" => TabCompletionStrings.AlignmentHashtableKeyDescription,
+            "Ascending" => TabCompletionStrings.AscendingHashtableKeyDescription,
+            "Data" => TabCompletionStrings.DataHashtableKeyDescription,
+            "Depth" => TabCompletionStrings.DepthHashtableKeyDescription,
+            "Descending" => TabCompletionStrings.DescendingHashtableKeyDescription,
+            "EndTime" => TabCompletionStrings.EndTimeHashtableKeyDescription,
+            "Expression" => TabCompletionStrings.ExpressionHashtableKeyDescription,
+            "FormatString" => TabCompletionStrings.FormatStringHashtableKeyDescription,
+            "ID" => TabCompletionStrings.IDHashtableKeyDescription,
+            "Keywords" => TabCompletionStrings.KeywordsHashtableKeyDescription,
+            "Label" => TabCompletionStrings.LabelHashtableKeyDescription,
+            "Level" => TabCompletionStrings.LevelHashtableKeyDescription,
+            "LogName" => TabCompletionStrings.LogNameHashtableKeyDescription,
+            "Name" => TabCompletionStrings.NameHashtableKeyDescription,
+            "Path" => TabCompletionStrings.PathHashtableKeyDescription,
+            "ProviderName" => TabCompletionStrings.ProviderNameHashtableKeyDescription,
+            "StartTime" => TabCompletionStrings.StartTimeHashtableKeyDescription,
+            "SuppressHashFilter" => TabCompletionStrings.SuppressHashFilterHashtableKeyDescription,
+            "UserID" => TabCompletionStrings.UserIDHashtableKeyDescription,
+            "Width" => TabCompletionStrings.WidthHashtableKeyDescription,
+            _ => string.Empty
+        };
+
         #endregion Hashtable Keys
 
         #region Helpers
@@ -6460,7 +8588,7 @@ internal static bool IsPathSafelyExpandable(ExpandableStringExpressionAst expand
             var varValues = new List<string>();
             foreach (ExpressionAst nestedAst in expandableStringAst.NestedExpressions)
             {
-                if (!(nestedAst is VariableExpressionAst variableAst)) { return false; }
+                if (nestedAst is not VariableExpressionAst variableAst) { return false; }
 
                 string strValue = CombineVariableWithPartialPath(variableAst, null, executionContext);
                 if (strValue != null)
@@ -6483,66 +8611,69 @@ internal static bool IsPathSafelyExpandable(ExpandableStringExpressionAst expand
         internal static string CombineVariableWithPartialPath(VariableExpressionAst variableAst, string extraText, ExecutionContext executionContext)
         {
             var varPath = variableAst.VariablePath;
-            if (varPath.IsVariable || varPath.DriveName.Equals("env", StringComparison.OrdinalIgnoreCase))
+            if (!varPath.IsVariable && !varPath.DriveName.Equals("env", StringComparison.OrdinalIgnoreCase))
             {
-                try
-                {
-                    // We check the strict mode inside GetVariableValue
-                    object value = VariableOps.GetVariableValue(varPath, executionContext, variableAst);
-                    var strValue = (value == null) ? string.Empty : value as string;
+                return null;
+            }
 
-                    if (strValue == null)
-                    {
-                        object baseObj = PSObject.Base(value);
-                        if (baseObj is string || baseObj.GetType().IsPrimitive)
-                        {
-                            strValue = LanguagePrimitives.ConvertTo<string>(value);
-                        }
-                    }
+            if (varPath.UnqualifiedPath.Equals(SpecialVariables.PSScriptRoot, StringComparison.OrdinalIgnoreCase)
+                && !string.IsNullOrEmpty(variableAst.Extent.File))
+            {
+                return Path.GetDirectoryName(variableAst.Extent.File) + extraText;
+            }
+
+            try
+            {
+                // We check the strict mode inside GetVariableValue
+                object value = VariableOps.GetVariableValue(varPath, executionContext, variableAst);
+                var strValue = (value == null) ? string.Empty : value as string;
 
-                    if (strValue != null)
+                if (strValue == null)
+                {
+                    object baseObj = PSObject.Base(value);
+                    if (baseObj is string || baseObj?.GetType()?.IsPrimitive is true)
                     {
-                        return strValue + extraText;
+                        strValue = LanguagePrimitives.ConvertTo<string>(value);
                     }
                 }
-                catch (Exception)
+
+                if (strValue != null)
                 {
+                    return strValue + extraText;
                 }
             }
+            catch (Exception)
+            {
+            }
 
             return null;
         }
 
-        internal static string HandleDoubleAndSingleQuote(ref string wordToComplete)
+        /// <summary>
+        /// Calls Get-Command to get command info objects.
+        /// </summary>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <param name="parametersToAdd">The parameters to add.</param>
+        /// <returns>Collection of command info objects.</returns>
+        internal static Collection<CommandInfo> GetCommandInfo(
+            IDictionary fakeBoundParameters,
+            params string[] parametersToAdd)
         {
-            string quote = string.Empty;
+            using var ps = PowerShell.Create(RunspaceMode.CurrentRunspace);
 
-            if (!string.IsNullOrEmpty(wordToComplete) && (wordToComplete[0].IsSingleQuote() || wordToComplete[0].IsDoubleQuote()))
-            {
-                char frontQuote = wordToComplete[0];
-                int length = wordToComplete.Length;
+            ps.AddCommand("Get-Command");
 
-                if (length == 1)
-                {
-                    wordToComplete = string.Empty;
-                    quote = frontQuote.IsSingleQuote() ? "'" : "\"";
-                }
-                else if (length > 1)
+            foreach (string parameter in parametersToAdd)
+            {
+                if (fakeBoundParameters.Contains(parameter))
                 {
-                    if ((wordToComplete[length - 1].IsDoubleQuote() && frontQuote.IsDoubleQuote()) || (wordToComplete[length - 1].IsSingleQuote() && frontQuote.IsSingleQuote()))
-                    {
-                        wordToComplete = wordToComplete.Substring(1, length - 2);
-                        quote = frontQuote.IsSingleQuote() ? "'" : "\"";
-                    }
-                    else if (!wordToComplete[length - 1].IsDoubleQuote() && !wordToComplete[length - 1].IsSingleQuote())
-                    {
-                        wordToComplete = wordToComplete.Substring(1);
-                        quote = frontQuote.IsSingleQuote() ? "'" : "\"";
-                    }
+                    ps.AddParameter(parameter, fakeBoundParameters[parameter]);
                 }
             }
 
-            return quote;
+            Collection<CommandInfo> commands = ps.Invoke<CommandInfo>();
+
+            return commands;
         }
 
         internal static bool IsSplattedVariable(Ast targetExpr)
@@ -6585,7 +8716,7 @@ internal static void CompleteMemberHelper(
                 IEnumerable members;
                 if (@static)
                 {
-                    if (!(PSObject.Base(value) is Type type))
+                    if (PSObject.Base(value) is not Type type)
                     {
                         return;
                     }
@@ -6610,7 +8741,7 @@ internal static void CompleteMemberHelper(
                     var completionText = memberInfo.Name;
 
                     // Handle scenarios like this: $aa | add-member 'a b' 23; $aa.a<tab>
-                    if (completionText.IndexOfAny(s_charactersRequiringQuotes) != -1)
+                    if (ContainsCharactersRequiringQuotes(completionText))
                     {
                         completionText = completionText.Replace("'", "''");
                         completionText = "'" + completionText + "'";
@@ -6651,13 +8782,13 @@ internal static void CompleteMemberHelper(
                     var pattern = WildcardPattern.Get(memberName, WildcardOptions.IgnoreCase);
                     foreach (DictionaryEntry entry in dictionary)
                     {
-                        if (!(entry.Key is string key))
+                        if (entry.Key is not string key)
                             continue;
 
                         if (pattern.IsMatch(key))
                         {
                             // Handle scenarios like this: $hashtable["abc#d"] = 100; $hashtable.ab<tab>
-                            if (key.IndexOfAny(s_charactersRequiringQuotes) != -1)
+                            if (ContainsCharactersRequiringQuotes(key))
                             {
                                 key = key.Replace("'", "''");
                                 key = "'" + key + "'";
@@ -6715,32 +8846,6 @@ private static bool IsStaticTypeEnumerable(Type type)
             return false;
         }
 
-        private static bool CompletionRequiresQuotes(string completion, bool escape)
-        {
-            // If the tokenizer sees the completion as more than two tokens, or if there is some error, then
-            // some form of quoting is necessary (if it's a variable, we'd need ${}, filenames would need [], etc.)
-
-            Language.Token[] tokens;
-            ParseError[] errors;
-            Language.Parser.ParseInput(completion, out tokens, out errors);
-
-            char[] charToCheck = escape ? new[] { '$', '[', ']', '`' } : new[] { '$', '`' };
-
-            // Expect no errors and 2 tokens (1 is for our completion, the other is eof)
-            // Or if the completion is a keyword, we ignore the errors
-            bool requireQuote = !(errors.Length == 0 && tokens.Length == 2);
-            if ((!requireQuote && tokens[0] is StringToken) ||
-                (tokens.Length == 2 && (tokens[0].TokenFlags & TokenFlags.Keyword) != 0))
-            {
-                requireQuote = false;
-                var value = tokens[0].Text;
-                if (value.IndexOfAny(charToCheck) != -1)
-                    requireQuote = true;
-            }
-
-            return requireQuote;
-        }
-
         private static bool ProviderSpecified(string path)
         {
             var index = path.IndexOf(':');
@@ -6807,7 +8912,7 @@ internal static bool IsAmpersandNeeded(CompletionContext context, bool defaultCh
             return defaultChoice;
         }
 
-        private class ItemPathComparer : IComparer<PSObject>
+        private sealed class ItemPathComparer : IComparer<PSObject>
         {
             public int Compare(PSObject x, PSObject y)
             {
@@ -6842,7 +8947,7 @@ public int Compare(PSObject x, PSObject y)
             }
         }
 
-        private class CommandNameComparer : IComparer<PSObject>
+        private sealed class CommandNameComparer : IComparer<PSObject>
         {
             public int Compare(PSObject x, PSObject y)
             {
@@ -6869,7 +8974,7 @@ public int Compare(PSObject x, PSObject y)
     }
 
     /// <summary>
-    /// This class is very similar to the restricted langauge checker, but it is meant to allow more things, yet still
+    /// This class is very similar to the restricted language checker, but it is meant to allow more things, yet still
     /// be considered "safe", at least in the sense that tab completion can rely on it to not do bad things.  The primary
     /// use is for intellisense where you don't want to run arbitrary code, but you do want to know the values
     /// of various expressions so you can get the members.
@@ -7125,7 +9230,7 @@ public PropertyNameCompleter()
         /// <summary>
         /// Initializes a new instance of the <see cref="PropertyNameCompleter"/> class.
         /// </summary>
-        /// <param name="parameterNameOfInput">The name of the property of the input object for witch to complete with property names.</param>
+        /// <param name="parameterNameOfInput">The name of the property of the input object for which to complete with property names.</param>
         public PropertyNameCompleter(string parameterNameOfInput)
         {
             _parameterNameOfInput = parameterNameOfInput;
diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs
new file mode 100644
index 00000000000..edf31e8e97a
--- /dev/null
+++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs
@@ -0,0 +1,322 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System.Buffers;
+using System.Collections.Generic;
+using System.Management.Automation.Language;
+
+namespace System.Management.Automation
+{
+    /// <summary>
+    /// Shared helper class for common completion helper methods.
+    /// </summary>
+    internal static class CompletionHelpers
+    {
+        private static readonly SearchValues<char> s_defaultCharsToCheck = SearchValues.Create("$`");
+
+        private const string SingleQuote = "'";
+        private const string DoubleQuote = "\"";
+
+        /// <summary>
+        /// Get matching completions from word to complete.
+        /// This makes it easier to handle different variations of completions with consideration of quotes.
+        /// </summary>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="possibleCompletionValues">The possible completion values to iterate.</param>
+        /// <param name="displayInfoMapper">The optional completion display info mapper delegate for tool tip and list item text.</param>
+        /// <param name="resultType">The optional completion result type. Default is Text.</param>
+        /// <param name="matchStrategy">The optional match strategy delegate.</param>
+        /// <returns>List of matching completion results.</returns>
+        internal static IEnumerable<CompletionResult> GetMatchingResults(
+            string wordToComplete,
+            IEnumerable<string> possibleCompletionValues,
+            CompletionDisplayInfoMapper displayInfoMapper = null,
+            CompletionResultType resultType = CompletionResultType.Text,
+            MatchStrategy matchStrategy = null)
+        {
+            displayInfoMapper ??= DefaultDisplayInfoMapper;
+            matchStrategy ??= DefaultMatch;
+
+            string quote = HandleDoubleAndSingleQuote(ref wordToComplete);
+            if (quote != SingleQuote)
+            {
+                wordToComplete = NormalizeToExpandableString(wordToComplete);
+            }
+
+            foreach (string value in possibleCompletionValues)
+            {
+                if (matchStrategy(value, wordToComplete))
+                {
+                    string completionText = QuoteCompletionText(value, quote);
+
+                    (string toolTip, string listItemText) = displayInfoMapper(value);
+
+                    yield return new CompletionResult(completionText, listItemText, resultType, toolTip);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Provides the display information for a completion result.
+        /// This delegate is used to map a string value to its corresponding display information.
+        /// </summary>
+        /// <param name="value">The input value to be mapped</param>
+        /// <returns>Completion display info containing tool tip and list item text.</returns>
+        internal delegate (string ToolTip, string ListItemText) CompletionDisplayInfoMapper(string value);
+
+        /// <summary>
+        /// Provides the default display information for a completion result.
+        /// Defaults to using the input value for both the tool tip and list item text.
+        /// </summary>
+        /// <returns>Completion display info containing tool tip and list item text.</returns>
+        internal static readonly CompletionDisplayInfoMapper DefaultDisplayInfoMapper = value
+            => (value, value);
+
+        /// <summary>
+        /// Normalizes the input string to an expandable string format for PowerShell.
+        /// </summary>
+        /// <param name="value">The input string to be normalized.</param>
+        /// <returns>The normalized string with special characters replaced by their PowerShell escape sequences.</returns>
+        /// <remarks>
+        /// This method replaces special characters in the input string with their PowerShell equivalent escape sequences:
+        /// <list type="bullet">
+        ///     <item><description>Replaces "\r" (carriage return) with "`r".</description></item>
+        ///     <item><description>Replaces "\n" (newline) with "`n".</description></item>
+        ///     <item><description>Replaces "\t" (tab) with "`t".</description></item>
+        ///     <item><description>Replaces "\0" (null) with "`0".</description></item>
+        ///     <item><description>Replaces "\a" (bell) with "`a".</description></item>
+        ///     <item><description>Replaces "\b" (backspace) with "`b".</description></item>
+        ///     <item><description>Replaces "\u001b" (escape character) with "`e".</description></item>
+        ///     <item><description>Replaces "\f" (form feed) with "`f".</description></item>
+        ///     <item><description>Replaces "\v" (vertical tab) with "`v".</description></item>
+        /// </list>
+        /// </remarks>
+        internal static string NormalizeToExpandableString(string value)
+            => value
+                .Replace("\r", "`r")
+                .Replace("\n", "`n")
+                .Replace("\t", "`t")
+                .Replace("\0", "`0")
+                .Replace("\a", "`a")
+                .Replace("\b", "`b")
+                .Replace("\u001b", "`e")
+                .Replace("\f", "`f")
+                .Replace("\v", "`v");
+
+        /// <summary>
+        /// Defines a strategy for determining if a value matches a word or pattern.
+        /// </summary>
+        /// <param name="value">The input string to check for a match.</param>
+        /// <param name="wordToComplete">The word or pattern to match against.</param>
+        /// <returns>
+        /// <c>true</c> if the value matches the specified word or pattern; otherwise, <c>false</c>.
+        /// </returns>
+        internal delegate bool MatchStrategy(string value, string wordToComplete);
+
+        /// <summary>
+        /// Determines if the given value matches the specified word using a literal, case-insensitive prefix match.
+        /// </summary>
+        /// <returns>
+        /// <c>true</c> if the value starts with the word (case-insensitively); otherwise, <c>false</c>.
+        /// </returns>
+        internal static readonly MatchStrategy LiteralMatchOrdinalIgnoreCase = (value, wordToComplete)
+            => value.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase);
+
+        /// <summary>
+        /// Determines if the given value matches the specified word using wildcard pattern matching.
+        /// </summary>
+        /// <returns>
+        /// <c>true</c> if the value matches the word as a wildcard pattern; otherwise, <c>false</c>.
+        /// </returns>
+        /// <remarks>
+        /// Wildcard pattern matching allows for flexible matching, where wilcards can represent
+        /// multiple characters in the input. This strategy is case-insensitive.
+        /// </remarks>
+        internal static readonly MatchStrategy WildcardPatternMatchIgnoreCase = (value, wordToComplete)
+            => WildcardPattern
+                .Get(wordToComplete + "*", WildcardOptions.IgnoreCase)
+                .IsMatch(value);
+
+        /// <summary>
+        /// Determines if the given value matches the specified word considering wildcard characters literally.
+        /// </summary>
+        /// <returns>
+        /// <c>true</c> if the value matches either the literal normalized word or the wildcard pattern with escaping;
+        /// otherwise, <c>false</c>.
+        /// </returns>
+        /// <remarks>
+        /// This strategy first attempts a literal prefix match for performance and, if unsuccessful, escapes the word to complete to
+        /// handle any problematic wildcard characters before performing a wildcard match.
+        /// </remarks>
+        internal static readonly MatchStrategy WildcardPatternEscapeMatch = (value, wordToComplete)
+            => LiteralMatchOrdinalIgnoreCase(value, wordToComplete) ||
+               WildcardPatternMatchIgnoreCase(value, WildcardPattern.Escape(wordToComplete));
+
+        /// <summary>
+        /// Determines if the given value matches the specified word taking into account wildcard characters.
+        /// </summary>
+        /// <returns>
+        /// <c>true</c> if the value matches either the literal normalized word or the wildcard pattern; otherwise, <c>false</c>.
+        /// </returns>
+        /// <remarks>
+        /// This strategy attempts a literal match first for performance and, if unsuccessful, evaluates the word against a wildcard pattern.
+        /// </remarks>
+        internal static readonly MatchStrategy DefaultMatch = (value, wordToComplete)
+            => LiteralMatchOrdinalIgnoreCase(value, wordToComplete) ||
+               WildcardPatternMatchIgnoreCase(value, wordToComplete);
+
+        /// <summary>
+        /// Removes wrapping quotes from a string and returns the quote used, if present.
+        /// </summary>
+        /// <param name="wordToComplete">
+        /// The string to process, potentially surrounded by single or double quotes.
+        /// This parameter is updated in-place to exclude the removed quotes.
+        /// </param>
+        /// <returns>
+        /// The type of quote detected (single or double), or an empty string if no quote is found.
+        /// </returns>
+        /// <remarks>
+        /// This method checks for single or double quotes at the start and end of the string.
+        /// If wrapping quotes are detected and match, both are removed; otherwise, only the front quote is removed.
+        /// The string is updated in-place, and only matching front-and-back quotes are stripped.
+        /// If no quotes are detected or the input is empty, the original string remains unchanged.
+        /// </remarks>
+        internal static string HandleDoubleAndSingleQuote(ref string wordToComplete)
+        {
+            if (string.IsNullOrEmpty(wordToComplete))
+            {
+                return string.Empty;
+            }
+
+            char frontQuote = wordToComplete[0];
+            bool hasFrontSingleQuote = frontQuote.IsSingleQuote();
+            bool hasFrontDoubleQuote = frontQuote.IsDoubleQuote();
+
+            if (!hasFrontSingleQuote && !hasFrontDoubleQuote)
+            {
+                return string.Empty;
+            }
+
+            string quoteInUse = hasFrontSingleQuote ? SingleQuote : DoubleQuote;
+
+            int length = wordToComplete.Length;
+            if (length == 1)
+            {
+                wordToComplete = string.Empty;
+                return quoteInUse;
+            }
+
+            char backQuote = wordToComplete[length - 1];
+            bool hasBackSingleQuote = backQuote.IsSingleQuote();
+            bool hasBackDoubleQuote = backQuote.IsDoubleQuote();
+
+            bool hasBothFrontAndBackQuotes =
+                (hasFrontSingleQuote && hasBackSingleQuote) || (hasFrontDoubleQuote && hasBackDoubleQuote);
+
+            if (hasBothFrontAndBackQuotes)
+            {
+                wordToComplete = wordToComplete.Substring(1, length - 2);
+                return quoteInUse;
+            }
+
+            bool hasFrontQuoteAndNoBackQuote =
+                (hasFrontSingleQuote || hasFrontDoubleQuote) && !hasBackSingleQuote && !hasBackDoubleQuote;
+
+            if (hasFrontQuoteAndNoBackQuote)
+            {
+                wordToComplete = wordToComplete.Substring(1);
+                return quoteInUse;
+            }
+
+            return string.Empty;
+        }
+
+        /// <summary>
+        /// Determines whether the specified completion string requires quotes.
+        /// Quoting is required if:
+        /// <list type="bullet">
+        ///   <item><description>There are parsing errors in the input string.</description></item>
+        ///   <item><description>The parsed token count is not exactly two (the input token + EOF).</description></item>
+        ///   <item><description>The first token is a string or a PowerShell keyword containing special characters.</description></item>
+        ///   <item><description>The first token is a semi colon or comma token.</description></item>
+        /// </list>
+        /// </summary>
+        /// <param name="completion">The input string to analyze for quoting requirements.</param>
+        /// <returns><c>true</c> if the string requires quotes, <c>false</c> otherwise.</returns>
+        internal static bool CompletionRequiresQuotes(string completion)
+        {
+            Parser.ParseInput(completion, out Token[] tokens, out ParseError[] errors);
+
+            bool isExpectedTokenCount = tokens.Length == 2;
+
+            bool requireQuote = errors.Length > 0 || !isExpectedTokenCount;
+
+            Token firstToken = tokens[0];
+            bool isStringToken = firstToken is StringToken;
+            bool isKeywordToken = (firstToken.TokenFlags & TokenFlags.Keyword) != 0;
+            bool isSemiToken = firstToken.Kind == TokenKind.Semi;
+            bool isCommaToken = firstToken.Kind == TokenKind.Comma;
+
+            if ((!requireQuote && isStringToken) || (isExpectedTokenCount && isKeywordToken))
+            {
+                requireQuote = ContainsCharsToCheck(firstToken.Text);
+            }
+
+            else if (isExpectedTokenCount && (isSemiToken || isCommaToken))
+            {
+                requireQuote = true;
+            }
+
+            return requireQuote;
+        }
+
+        /// <summary>
+        /// Determines whether the given text contains an escaped newline string.
+        /// </summary>
+        /// <param name="text">The input string to check for escaped newlines.</param>
+        /// <returns>
+        /// <c>true</c> if the text contains the escaped Unix-style newline string ("`n") or
+        /// the Windows-style newline string ("`r`n"); otherwise, <c>false</c>.
+        /// </returns>
+        private static bool ContainsEscapedNewlineString(string text)
+            => text.Contains("`n", StringComparison.Ordinal);
+
+        private static bool ContainsCharsToCheck(ReadOnlySpan<char> text)
+            => text.ContainsAny(s_defaultCharsToCheck);
+
+        /// <summary>
+        /// Quotes a given completion text.
+        /// </summary>
+        /// <param name="completionText">
+        /// The text to be quoted.
+        /// </param>
+        /// <param name="quote">
+        /// The quote character to use for enclosing the text. Defaults to a single quote if not provided.
+        /// </param>
+        /// <returns>
+        /// The quoted <paramref name="completionText"/>.
+        /// </returns>
+        internal static string QuoteCompletionText(string completionText, string quote)
+        {
+            // Escaped newlines e.g. `r`n need be surrounded with double quotes
+            if (ContainsEscapedNewlineString(completionText))
+            {
+                return DoubleQuote + completionText + DoubleQuote;
+            }
+
+            if (!CompletionRequiresQuotes(completionText))
+            {
+                return quote + completionText + quote;
+            }
+
+            string quoteInUse = string.IsNullOrEmpty(quote) ? SingleQuote : quote;
+
+            if (quoteInUse == SingleQuote)
+            {
+                completionText = CodeGeneration.EscapeSingleQuotedStringContent(completionText);
+            }
+
+            return quoteInUse + completionText + quoteInUse;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionResult.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionResult.cs
index ffb09e2a50d..0554a52ba17 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/CompletionResult.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionResult.cs
@@ -168,26 +168,15 @@ internal static CompletionResult Null
         /// <param name="toolTip">The text for the tooltip with details to be displayed about the object.</param>
         public CompletionResult(string completionText, string listItemText, CompletionResultType resultType, string toolTip)
         {
-            if (string.IsNullOrEmpty(completionText))
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(completionText));
-            }
-
-            if (string.IsNullOrEmpty(listItemText))
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(listItemText));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(completionText);
+            ArgumentException.ThrowIfNullOrEmpty(listItemText);
+            ArgumentException.ThrowIfNullOrEmpty(toolTip);
 
             if (resultType < CompletionResultType.Text || resultType > CompletionResultType.DynamicKeyword)
             {
                 throw PSTraceSource.NewArgumentOutOfRangeException(nameof(resultType), resultType);
             }
 
-            if (string.IsNullOrEmpty(toolTip))
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(toolTip));
-            }
-
             _completionText = completionText;
             _listItemText = listItemText;
             _toolTip = toolTip;
diff --git a/src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs b/src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
index 777fc6c16f4..c63a8e7f92d 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/ExtensibleCompletion.cs
@@ -32,7 +32,7 @@ public class ArgumentCompleterAttribute : Attribute
         /// <param name="type">The type must implement <see cref="IArgumentCompleter"/> and have a default constructor.</param>
         public ArgumentCompleterAttribute(Type type)
         {
-            if (type == null || (type.GetInterfaces().All(t => t != typeof(IArgumentCompleter))))
+            if (type == null || (type.GetInterfaces().All(static t => t != typeof(IArgumentCompleter))))
             {
                 throw PSTraceSource.NewArgumentException(nameof(type));
             }
@@ -40,19 +40,40 @@ public ArgumentCompleterAttribute(Type type)
             Type = type;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ArgumentCompleterAttribute"/> class.
+        /// This constructor is used by derived attributes implementing <see cref="IArgumentCompleterFactory"/>.
+        /// </summary>
+        protected ArgumentCompleterAttribute()
+        {
+            if (this is not IArgumentCompleterFactory)
+            {
+                throw PSTraceSource.NewInvalidOperationException();
+            }
+        }
+
         /// <summary>
         /// This constructor is used primarily via PowerShell scripts.
         /// </summary>
         /// <param name="scriptBlock"></param>
         public ArgumentCompleterAttribute(ScriptBlock scriptBlock)
         {
-            if (scriptBlock == null)
+            if (scriptBlock is null)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(scriptBlock));
             }
 
             ScriptBlock = scriptBlock;
         }
+
+        internal IArgumentCompleter CreateArgumentCompleter()
+        {
+            return Type != null
+                ? Activator.CreateInstance(Type) as IArgumentCompleter
+                : this is IArgumentCompleterFactory factory
+                    ? factory.Create()
+                    : null;
+        }
     }
 
     /// <summary>
@@ -85,71 +106,176 @@ IEnumerable<CompletionResult> CompleteArgument(
     }
 #nullable restore
 
+    /// <summary>
+    /// Creates a new argument completer.
+    /// </summary>
+    /// <para>
+    /// If an attribute that derives from <see cref="ArgumentCompleterAttribute"/> implements this interface,
+    /// it will be used to create the <see cref="IArgumentCompleter"/>, thus giving a way to parameterize a completer.
+    /// The derived attribute can have properties or constructor arguments that are used when creating the completer.
+    /// </para>
+    /// <example>
+    /// This example shows the intended usage of <see cref="IArgumentCompleterFactory"/> to pass arguments to an argument completer.
+    /// <code>
+    /// public class NumberCompleterAttribute : ArgumentCompleterAttribute, IArgumentCompleterFactory {
+    ///    private readonly int _from;
+    ///    private readonly int _to;
+    ///
+    ///    public NumberCompleterAttribute(int from, int to){
+    ///       _from = from;
+    ///       _to = to;
+    ///    }
+    ///
+    ///    // use the attribute parameters to create a parameterized completer
+    ///    IArgumentCompleter Create() => new NumberCompleter(_from, _to);
+    /// }
+    ///
+    /// class NumberCompleter : IArgumentCompleter {
+    ///    private readonly int _from;
+    ///    private readonly int _to;
+    ///
+    ///    public NumberCompleter(int from, int to){
+    ///       _from = from;
+    ///       _to = to;
+    ///    }
+    ///
+    ///    IEnumerable{CompletionResult} CompleteArgument(string commandName, string parameterName, string wordToComplete,
+    ///       CommandAst commandAst, IDictionary fakeBoundParameters) {
+    ///       for(int i = _from; i &lt; _to; i++) {
+    ///           yield return new CompletionResult(i.ToString());
+    ///       }
+    ///    }
+    /// }
+    /// </code>
+    /// </example>
+    public interface IArgumentCompleterFactory
+    {
+        /// <summary>
+        /// Creates an instance of a class implementing the <see cref="IArgumentCompleter"/> interface.
+        /// </summary>
+        /// <returns>An IArgumentCompleter instance.</returns>
+        IArgumentCompleter Create();
+    }
+
+    /// <summary>
+    /// Base class for parameterized argument completer attributes.
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+    public abstract class ArgumentCompleterFactoryAttribute : ArgumentCompleterAttribute, IArgumentCompleterFactory
+    {
+        /// <inheritdoc />
+        public abstract IArgumentCompleter Create();
+    }
+
     /// <summary>
     /// </summary>
     [Cmdlet(VerbsLifecycle.Register, "ArgumentCompleter", HelpUri = "https://go.microsoft.com/fwlink/?LinkId=528576")]
     public class RegisterArgumentCompleterCommand : PSCmdlet
     {
+        private const string PowerShellSetName = "PowerShellSet";
+        private const string NativeCommandSetName = "NativeCommandSet";
+        private const string NativeFallbackSetName = "NativeFallbackSet";
+
+        // Use a key that is unlikely to be a file name or path to indicate the fallback completer for native commands.
+        internal const string FallbackCompleterKey = "___ps::<native_fallback_key>@@___";
+
         /// <summary>
+        /// Gets or sets the command names for which the argument completer is registered.
         /// </summary>
-        [Parameter(ParameterSetName = "NativeSet", Mandatory = true)]
-        [Parameter(ParameterSetName = "PowerShellSet")]
+        [Parameter(ParameterSetName = NativeCommandSetName, Mandatory = true)]
+        [Parameter(ParameterSetName = PowerShellSetName)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] CommandName { get; set; }
 
         /// <summary>
+        /// Gets or sets the name of the parameter for which the argument completer is registered.
         /// </summary>
-        [Parameter(ParameterSetName = "PowerShellSet", Mandatory = true)]
+        [Parameter(ParameterSetName = PowerShellSetName, Mandatory = true)]
         public string ParameterName { get; set; }
 
         /// <summary>
+        /// Gets or sets the script block that will be executed to provide argument completions.
         /// </summary>
         [Parameter(Mandatory = true)]
         [AllowNull()]
         public ScriptBlock ScriptBlock { get; set; }
 
         /// <summary>
+        /// Indicates the argument completer is for native commands.
         /// </summary>
-        [Parameter(ParameterSetName = "NativeSet")]
+        [Parameter(ParameterSetName = NativeCommandSetName)]
         public SwitchParameter Native { get; set; }
 
+        /// <summary>
+        /// Indicates the argument completer is a fallback for any native commands that don't have a completer registered.
+        /// </summary>
+        [Parameter(ParameterSetName = NativeFallbackSetName)]
+        public SwitchParameter NativeFallback { get; set; }
+
         /// <summary>
         /// </summary>
         protected override void EndProcessing()
         {
             Dictionary<string, ScriptBlock> completerDictionary;
-            if (ParameterName != null)
+
+            if (ParameterSetName is NativeFallbackSetName)
             {
-                completerDictionary = Context.CustomArgumentCompleters ??
-                                      (Context.CustomArgumentCompleters = new Dictionary<string, ScriptBlock>(StringComparer.OrdinalIgnoreCase));
+                completerDictionary = Context.NativeArgumentCompleters ??= new(StringComparer.OrdinalIgnoreCase);
+
+                SetKeyValue(completerDictionary, FallbackCompleterKey, ScriptBlock);
             }
-            else
+            else if (ParameterSetName is NativeCommandSetName)
             {
-                completerDictionary = Context.NativeArgumentCompleters ??
-                                      (Context.NativeArgumentCompleters = new Dictionary<string, ScriptBlock>(StringComparer.OrdinalIgnoreCase));
-            }
+                completerDictionary = Context.NativeArgumentCompleters ??= new(StringComparer.OrdinalIgnoreCase);
 
-            if (CommandName == null || CommandName.Length == 0)
+                foreach (string command in CommandName)
+                {
+                    var key = command?.Trim();
+                    if (string.IsNullOrEmpty(key))
+                    {
+                        continue;
+                    }
+
+                    SetKeyValue(completerDictionary, key, ScriptBlock);
+                }
+            }
+            else if (ParameterSetName is PowerShellSetName)
             {
-                CommandName = new[] { string.Empty };
+                completerDictionary = Context.CustomArgumentCompleters ??= new(StringComparer.OrdinalIgnoreCase);
+
+                string paramName = ParameterName.Trim();
+                if (paramName.Length is 0)
+                {
+                    return;
+                }
+
+                if (CommandName is null || CommandName.Length is 0)
+                {
+                    SetKeyValue(completerDictionary, paramName, ScriptBlock);
+                    return;
+                }
+
+                foreach (string command in CommandName)
+                {
+                    var key = command?.Trim();
+                    key = string.IsNullOrEmpty(key)
+                        ? paramName
+                        : $"{key}:{paramName}";
+
+                    SetKeyValue(completerDictionary, key, ScriptBlock);
+                }
             }
 
-            for (int i = 0; i < CommandName.Length; i++)
+            static void SetKeyValue(Dictionary<string, ScriptBlock> table, string key, ScriptBlock value)
             {
-                var key = CommandName[i];
-                if (!string.IsNullOrWhiteSpace(ParameterName))
+                if (value is null)
                 {
-                    if (!string.IsNullOrWhiteSpace(key))
-                    {
-                        key = key + ":" + ParameterName;
-                    }
-                    else
-                    {
-                        key = ParameterName;
-                    }
+                    table.Remove(key);
+                }
+                else
+                {
+                    table[key] = value;
                 }
-
-                completerDictionary[key] = ScriptBlock;
             }
         }
     }
diff --git a/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs b/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs
index 0d195280239..2e7457cd812 100644
--- a/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs
+++ b/src/System.Management.Automation/engine/CommandCompletion/PseudoParameterBinder.cs
@@ -949,8 +949,9 @@ internal enum BindingType
         /// <param name="pipeArgumentType">Indicate the type of the piped-in argument.</param>
         /// <param name="paramAstAtCursor">The CommandParameterAst the cursor is pointing at.</param>
         /// <param name="bindingType">Indicates whether pseudo binding is for argument binding, argument completion, or parameter completion.</param>
+        /// <param name="bindPositional">Indicates if the pseudo binding should bind positional parameters</param>
         /// <returns>PseudoBindingInfo.</returns>
-        internal PseudoBindingInfo DoPseudoParameterBinding(CommandAst command, Type pipeArgumentType, CommandParameterAst paramAstAtCursor, BindingType bindingType)
+        internal PseudoBindingInfo DoPseudoParameterBinding(CommandAst command, Type pipeArgumentType, CommandParameterAst paramAstAtCursor, BindingType bindingType, bool bindPositional = true)
         {
             if (command == null)
             {
@@ -981,7 +982,7 @@ internal PseudoBindingInfo DoPseudoParameterBinding(CommandAst command, Type pip
                             executionContext.LanguageMode = PSLanguageMode.ConstrainedLanguage;
                         }
 
-                        _bindingEffective = PrepareCommandElements(executionContext);
+                        _bindingEffective = PrepareCommandElements(executionContext, paramAstAtCursor);
                     }
                     finally
                     {
@@ -1008,12 +1009,15 @@ internal PseudoBindingInfo DoPseudoParameterBinding(CommandAst command, Type pip
                 unboundArguments = BindNamedParameters();
                 _bindingEffective = _currentParameterSetFlag != 0;
 
-                // positional binding
-                unboundArguments = BindPositionalParameter(
-                    unboundArguments,
-                    _currentParameterSetFlag,
-                    _defaultParameterSetFlag,
-                    bindingType);
+                if (bindPositional)
+                {
+                    // positional binding
+                    unboundArguments = BindPositionalParameter(
+                        unboundArguments,
+                        _currentParameterSetFlag,
+                        _defaultParameterSetFlag,
+                        bindingType);
+                }
 
                 // VFRA/pipeline binding if the given command is a binary cmdlet or a script cmdlet
                 if (!_function)
@@ -1185,7 +1189,7 @@ private void InitializeMembers()
             _duplicateParameters.Clear();
         }
 
-        private bool PrepareCommandElements(ExecutionContext context)
+        private bool PrepareCommandElements(ExecutionContext context, CommandParameterAst paramAtCursor)
         {
             int commandIndex = 0;
             bool dotSource = _commandAst.InvocationOperator == TokenKind.Dot;
@@ -1194,7 +1198,7 @@ private bool PrepareCommandElements(ExecutionContext context)
             string commandName = null;
             try
             {
-                processor = PrepareFromAst(context, out commandName) ?? context.CreateCommand(commandName, dotSource);
+                processor = PrepareFromAst(context, out commandName) ?? context.CreateCommand(commandName, dotSource, forCompletion:true);
             }
             catch (RuntimeException)
             {
@@ -1207,20 +1211,46 @@ private bool PrepareCommandElements(ExecutionContext context)
             bool implementsDynamicParameters = commandProcessor != null &&
                                                commandProcessor.CommandInfo.ImplementsDynamicParameters;
 
-            var argumentsToGetDynamicParameters = implementsDynamicParameters
-                                                      ? new List<object>(_commandElements.Count)
-                                                      : null;
             if (commandProcessor != null || scriptProcessor != null)
             {
                 // Pre-processing the arguments -- command arguments
                 for (commandIndex++; commandIndex < _commandElements.Count; commandIndex++)
                 {
+                    if (implementsDynamicParameters && _commandElements[commandIndex] == paramAtCursor)
+                    {
+                        // Commands with dynamic parameters will try to bind the command elements.
+                        // A partially complete parameter will most likely cause a binding error and negatively affect the results.
+                        continue;
+                    }
+
                     var parameter = _commandElements[commandIndex] as CommandParameterAst;
                     if (parameter != null)
                     {
-                        if (argumentsToGetDynamicParameters != null)
+                        if (implementsDynamicParameters)
                         {
-                            argumentsToGetDynamicParameters.Add(parameter.Extent.Text);
+                            CommandParameterInternal paramToAdd;
+                            if (parameter.Argument is null)
+                            {
+                                paramToAdd = CommandParameterInternal.CreateParameter(parameter.ParameterName, parameter.Extent.Text);
+                            }
+                            else
+                            {
+                                object value;
+                                if (!SafeExprEvaluator.TrySafeEval(parameter.Argument, context, out value))
+                                {
+                                    value = parameter.Argument.Extent.Text;
+                                }
+
+                                paramToAdd = CommandParameterInternal.CreateParameterWithArgument(
+                                    parameterAst: null,
+                                    parameterName: parameter.ParameterName,
+                                    parameterText: parameter.Extent.Text,
+                                    argumentAst: null,
+                                    value: value,
+                                    spaceAfterParameter: false);
+                            }
+
+                            commandProcessor.AddParameter(paramToAdd);
                         }
 
                         AstPair parameterArg = parameter.Argument != null
@@ -1231,21 +1261,40 @@ private bool PrepareCommandElements(ExecutionContext context)
                     }
                     else
                     {
-                        var dash = _commandElements[commandIndex] as StringConstantExpressionAst;
-                        if (dash != null && dash.Value.Trim().Equals("-", StringComparison.OrdinalIgnoreCase))
+                        object valueToAdd;
+                        ExpressionAst expressionToAdd;
+                        if (_commandElements[commandIndex] is ConstantExpressionAst constant)
                         {
-                            // "-" is represented by StringConstantExpressionAst. Most likely the user type a tab here,
-                            // and we don't want it be treated as an argument
-                            continue;
+                            if (constant.Extent.Text.Equals("-", StringComparison.Ordinal))
+                            {
+                                // A value of "-" is most likely the user trying to tab here,
+                                // and we don't want it be treated as an argument
+                                continue;
+                            }
+
+                            valueToAdd = constant.Value;
+                            expressionToAdd = constant;
                         }
+                        else if (_commandElements[commandIndex] is ExpressionAst expression)
+                        {
+                            if (!SafeExprEvaluator.TrySafeEval(expression, context, out valueToAdd))
+                            {
+                                valueToAdd = expression.Extent.Text;
+                            }
 
-                        var expressionArgument = _commandElements[commandIndex] as ExpressionAst;
-                        if (expressionArgument != null)
+                            expressionToAdd = expression;
+                        }
+                        else
                         {
-                            argumentsToGetDynamicParameters?.Add(expressionArgument.Extent.Text);
+                            continue;
+                        }
 
-                            _arguments.Add(new AstPair(null, expressionArgument));
+                        if (implementsDynamicParameters)
+                        {
+                            commandProcessor.AddParameter(CommandParameterInternal.CreateArgument(valueToAdd));
                         }
+
+                        _arguments.Add(new AstPair(null, expressionToAdd));
                     }
                 }
             }
@@ -1255,7 +1304,6 @@ private bool PrepareCommandElements(ExecutionContext context)
                 _function = false;
                 if (implementsDynamicParameters)
                 {
-                    ParameterBinderController.AddArgumentsToCommandProcessor(commandProcessor, argumentsToGetDynamicParameters.ToArray());
                     bool retryWithNoArgs = false, alreadyRetried = false;
 
                     do
@@ -1358,7 +1406,6 @@ private CommandProcessorBase PrepareFromAst(ExecutionContext context, out string
             }
 
             ast.Visit(exportVisitor);
-
             CommandProcessorBase commandProcessor = null;
 
             resolvedCommandName = _commandAst.GetCommandName();
@@ -1862,6 +1909,13 @@ private static AstParameterArgumentPair GetNextPositionalArgument(
             while (unboundArgumentsIndex < unboundArgumentsCollection.Count)
             {
                 AstParameterArgumentPair argument = unboundArgumentsCollection[unboundArgumentsIndex++];
+                if (argument is AstPair astPair
+                    && astPair.Argument is VariableExpressionAst argumentVariable
+                    && argumentVariable.Splatted)
+                {
+                    continue;
+                }
+
                 if (!argument.ParameterSpecified)
                 {
                     result = argument;
diff --git a/src/System.Management.Automation/engine/CommandCompletion/ScopeArgumentCompleter.cs b/src/System.Management.Automation/engine/CommandCompletion/ScopeArgumentCompleter.cs
new file mode 100644
index 00000000000..444ccf79adb
--- /dev/null
+++ b/src/System.Management.Automation/engine/CommandCompletion/ScopeArgumentCompleter.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Management.Automation.Language;
+
+namespace System.Management.Automation
+{
+    /// <summary>
+    /// Provides argument completion for Scope parameter.
+    /// </summary>
+    public class ScopeArgumentCompleter : IArgumentCompleter
+    {
+        private static readonly string[] s_Scopes = new string[] { "Global", "Local", "Script" };
+
+        /// <summary>
+        /// Returns completion results for scope parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of completion results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
+                => CompletionHelpers.GetMatchingResults(
+                    wordToComplete,
+                    possibleCompletionValues: s_Scopes);
+    }
+}
diff --git a/src/System.Management.Automation/engine/CommandDiscovery.cs b/src/System.Management.Automation/engine/CommandDiscovery.cs
index ee6e5943800..9ca87f4c834 100644
--- a/src/System.Management.Automation/engine/CommandDiscovery.cs
+++ b/src/System.Management.Automation/engine/CommandDiscovery.cs
@@ -55,7 +55,7 @@ internal CommandLookupEventArgs(string commandName, CommandOrigin commandOrigin,
         public bool StopSearch { get; set; }
 
         /// <summary>
-        /// The CommandInfo obejct for the command that was found.
+        /// The CommandInfo object for the command that was found.
         /// </summary>
         public CommandInfo Command { get; set; }
 
@@ -262,6 +262,9 @@ internal void AddSessionStateCmdletEntryToCache(SessionStateCmdletEntry entry, b
         /// False if not.  Null if command discovery should default to something reasonable
         /// for the command discovered.
         /// </param>
+        /// <param name="forCompletion">
+        /// True if this for parameter completion and script requirements should be ignored.
+        /// </param>
         /// <returns>
         /// </returns>
         /// <exception cref="CommandNotFoundException">
@@ -271,14 +274,15 @@ internal void AddSessionStateCmdletEntryToCache(SessionStateCmdletEntry entry, b
         /// If the security manager is preventing the command from running.
         /// </exception>
         internal CommandProcessorBase LookupCommandProcessor(string commandName,
-            CommandOrigin commandOrigin, bool? useLocalScope)
+            CommandOrigin commandOrigin, bool? useLocalScope, bool forCompletion = false)
         {
             CommandProcessorBase processor = null;
             CommandInfo commandInfo = LookupCommandInfo(commandName, commandOrigin);
 
             if (commandInfo != null)
             {
-                processor = LookupCommandProcessor(commandInfo, commandOrigin, useLocalScope, null);
+                processor = LookupCommandProcessor(commandInfo, commandOrigin, useLocalScope, null, forCompletion);
+
                 // commandInfo.Name might be different than commandName - restore the original invocation name
                 processor.Command.MyInvocation.InvocationName = commandName;
             }
@@ -286,7 +290,7 @@ internal CommandProcessorBase LookupCommandProcessor(string commandName,
             return processor;
         }
 
-        internal static void VerifyRequiredModules(ExternalScriptInfo scriptInfo, ExecutionContext context)
+        internal static void VerifyRequiredModules(ExternalScriptInfo scriptInfo, ExecutionContext context, bool forCompletion = false)
         {
             // Check Required Modules
             if (scriptInfo.RequiresModules != null)
@@ -301,12 +305,12 @@ internal static void VerifyRequiredModules(ExternalScriptInfo scriptInfo, Execut
                         moduleManifestPath: null,
                         manifestProcessingFlags: ModuleCmdletBase.ManifestProcessingFlags.LoadElements | ModuleCmdletBase.ManifestProcessingFlags.WriteErrors,
                         error: out error);
-                    if (error != null)
+                    if (!forCompletion && error is not null)
                     {
                         ScriptRequiresException scriptRequiresException =
                             new ScriptRequiresException(
                                 scriptInfo.Name,
-                                new Collection<string> { requiredModule.Name },
+                                new Collection<string> { requiredModule.GetRequiredModuleNotFoundVersionMessage() },
                                 "ScriptRequiresMissingModules",
                                 false,
                                 error);
@@ -316,113 +320,42 @@ internal static void VerifyRequiredModules(ExternalScriptInfo scriptInfo, Execut
             }
         }
 
-        private static Collection<string> GetPSSnapinNames(IEnumerable<PSSnapInSpecification> PSSnapins)
-        {
-            Collection<string> result = new Collection<string>();
-
-            foreach (var PSSnapin in PSSnapins)
-            {
-                result.Add(BuildPSSnapInDisplayName(PSSnapin));
-            }
-
-            return result;
-        }
-
-        private CommandProcessorBase CreateScriptProcessorForSingleShell(ExternalScriptInfo scriptInfo, ExecutionContext context, bool useLocalScope, SessionStateInternal sessionState)
+        private CommandProcessorBase CreateScriptProcessorForSingleShell(ExternalScriptInfo scriptInfo, ExecutionContext context, bool useLocalScope, SessionStateInternal sessionState, bool forCompletion = false)
         {
-            VerifyScriptRequirements(scriptInfo, Context);
+            VerifyScriptRequirements(scriptInfo, Context, forCompletion);
 
-            IEnumerable<PSSnapInSpecification> requiresPSSnapIns = scriptInfo.RequiresPSSnapIns;
-            if (requiresPSSnapIns != null && requiresPSSnapIns.Any())
+            if (!string.IsNullOrEmpty(scriptInfo.RequiresApplicationID))
             {
-                Collection<string> requiresMissingPSSnapIns = null;
-                VerifyRequiredSnapins(requiresPSSnapIns, context, out requiresMissingPSSnapIns);
-                if (requiresMissingPSSnapIns != null)
-                {
-                    ScriptRequiresException scriptRequiresException =
-                        new ScriptRequiresException(
-                            scriptInfo.Name,
-                            requiresMissingPSSnapIns,
-                            "ScriptRequiresMissingPSSnapIns",
-                            true);
-                    throw scriptRequiresException;
-                }
-            }
-            else
-            {
-                // If there were no PSSnapins required but there is a shellID required, then we need
-                // to error
+                ScriptRequiresException sre =
+                    new ScriptRequiresException(
+                        scriptInfo.Name,
+                        string.Empty,
+                        string.Empty,
+                        "RequiresShellIDInvalidForSingleShell");
 
-                if (!string.IsNullOrEmpty(scriptInfo.RequiresApplicationID))
-                {
-                    ScriptRequiresException sre =
-                      new ScriptRequiresException(
-                          scriptInfo.Name,
-                          string.Empty,
-                          string.Empty,
-                          "RequiresShellIDInvalidForSingleShell");
-
-                    throw sre;
-                }
+                throw sre;
             }
 
             return CreateCommandProcessorForScript(scriptInfo, Context, useLocalScope, sessionState);
         }
 
-        private static void VerifyRequiredSnapins(IEnumerable<PSSnapInSpecification> requiresPSSnapIns, ExecutionContext context, out Collection<string> requiresMissingPSSnapIns)
-        {
-            requiresMissingPSSnapIns = null;
-            Dbg.Assert(context.InitialSessionState != null, "PowerShell should be hosted with InitialSessionState");
-
-            foreach (var requiresPSSnapIn in requiresPSSnapIns)
-            {
-                IEnumerable<PSSnapInInfo> loadedPSSnapIns = null;
-                loadedPSSnapIns = context.InitialSessionState.GetPSSnapIn(requiresPSSnapIn.Name);
-                if (loadedPSSnapIns == null || !loadedPSSnapIns.Any())
-                {
-                    if (requiresMissingPSSnapIns == null)
-                    {
-                        requiresMissingPSSnapIns = new Collection<string>();
-                    }
-
-                    requiresMissingPSSnapIns.Add(BuildPSSnapInDisplayName(requiresPSSnapIn));
-                }
-                else
-                {
-                    // the requires PSSnapin is loaded. now check the PSSnapin version
-                    PSSnapInInfo loadedPSSnapIn = loadedPSSnapIns.First();
-                    Diagnostics.Assert(loadedPSSnapIn.Version != null,
-                        string.Format(
-                            CultureInfo.InvariantCulture,
-                            "Version is null for loaded PSSnapin {0}.", loadedPSSnapIn));
-                    if (requiresPSSnapIn.Version != null)
-                    {
-                        if (!AreInstalledRequiresVersionsCompatible(
-                            requiresPSSnapIn.Version, loadedPSSnapIn.Version))
-                        {
-                            if (requiresMissingPSSnapIns == null)
-                            {
-                                requiresMissingPSSnapIns = new Collection<string>();
-                            }
-
-                            requiresMissingPSSnapIns.Add(BuildPSSnapInDisplayName(requiresPSSnapIn));
-                        }
-                    }
-                }
-            }
-        }
-
         // This method verifies the following 3 elements of #Requires statement
         // #Requires -RunAsAdministrator
         // #Requires -PSVersion
         // #Requires -PSEdition
         // #Requires -Module
-        internal static void VerifyScriptRequirements(ExternalScriptInfo scriptInfo, ExecutionContext context)
+        internal static void VerifyScriptRequirements(ExternalScriptInfo scriptInfo, ExecutionContext context, bool forCompletion = false)
         {
-            VerifyElevatedPrivileges(scriptInfo);
-            VerifyPSVersion(scriptInfo);
-            VerifyPSEdition(scriptInfo);
-            VerifyRequiredModules(scriptInfo, context);
+            // When completing script parameters we don't care if these requirements are met.
+            // VerifyRequiredModules will attempt to load the required modules which is useful for completion (so the correct types are loaded).
+            if (!forCompletion)
+            {
+                VerifyElevatedPrivileges(scriptInfo);
+                VerifyPSVersion(scriptInfo);
+                VerifyPSEdition(scriptInfo);
+            }
+
+            VerifyRequiredModules(scriptInfo, context, forCompletion);
         }
 
         internal static void VerifyPSVersion(ExternalScriptInfo scriptInfo)
@@ -431,7 +364,7 @@ internal static void VerifyPSVersion(ExternalScriptInfo scriptInfo)
             // in single shell mode
             if (requiresPSVersion != null)
             {
-                if (!Utils.IsPSVersionSupported(requiresPSVersion))
+                if (!PSVersionInfo.IsValidPSVersion(requiresPSVersion))
                 {
                     ScriptRequiresException scriptRequiresException =
                         new ScriptRequiresException(
@@ -464,11 +397,11 @@ internal static void VerifyPSEdition(ExternalScriptInfo scriptInfo)
                 //
                 if (isRequiresPSEditionSpecified && !isCurrentEditionListed)
                 {
-                    var specifiedEditionsString = string.Join(",", scriptInfo.RequiresPSEditions);
+                    var specifiedEditionsString = string.Join(',', scriptInfo.RequiresPSEditions);
                     var message = StringUtil.Format(DiscoveryExceptions.RequiresPSEditionNotCompatible,
                         scriptInfo.Name,
                         specifiedEditionsString,
-                        PSVersionInfo.PSEdition);
+                        PSVersionInfo.PSEditionValue);
                     var ex = new RuntimeException(message);
                     ex.SetErrorId("ScriptRequiresUnmatchedPSEdition");
                     ex.SetTargetObject(scriptInfo.Name);
@@ -491,32 +424,6 @@ internal static void VerifyElevatedPrivileges(ExternalScriptInfo scriptInfo)
             }
         }
 
-        /// <summary>
-        /// Used to determine compatibility between the versions in the requires statement and
-        /// the installed version. The version can be PSSnapin or msh.
-        /// </summary>
-        /// <param name="requires">Versions in the requires statement.</param>
-        /// <param name="installed">Version installed.</param>
-        /// <returns>
-        /// true if requires and installed's major version match and requires' minor version
-        /// is smaller than or equal to installed's
-        /// </returns>
-        /// <remarks>
-        /// In PowerShell V2, script requiring PowerShell 1.0 will fail.
-        /// </remarks>
-        private static bool AreInstalledRequiresVersionsCompatible(Version requires, Version installed)
-        {
-            return requires.Major == installed.Major && requires.Minor <= installed.Minor;
-        }
-
-        private static string BuildPSSnapInDisplayName(PSSnapInSpecification PSSnapin)
-        {
-            return PSSnapin.Version == null ?
-                PSSnapin.Name :
-                StringUtil.Format(DiscoveryExceptions.PSSnapInNameVersion,
-                        PSSnapin.Name, PSSnapin.Version);
-        }
-
         /// <summary>
         /// Look up a command using a CommandInfo object and return its CommandProcessorBase.
         /// </summary>
@@ -529,6 +436,9 @@ private static string BuildPSSnapInDisplayName(PSSnapInSpecification PSSnapin)
         /// False if not.  Null if command discovery should default to something reasonable
         /// for the command discovered.
         /// </param>
+        /// <param name="forCompletion">
+        /// True if this for parameter completion and script requirements should be ignored.
+        /// </param>
         /// <param name="sessionState">The session state the commandInfo should be run in.</param>
         /// <returns>
         /// </returns>
@@ -539,7 +449,7 @@ private static string BuildPSSnapInDisplayName(PSSnapInSpecification PSSnapin)
         /// If the security manager is preventing the command from running.
         /// </exception>
         internal CommandProcessorBase LookupCommandProcessor(CommandInfo commandInfo,
-            CommandOrigin commandOrigin, bool? useLocalScope, SessionStateInternal sessionState)
+            CommandOrigin commandOrigin, bool? useLocalScope, SessionStateInternal sessionState, bool forCompletion = false)
         {
             CommandProcessorBase processor = null;
 
@@ -585,7 +495,7 @@ internal CommandProcessorBase LookupCommandProcessor(CommandInfo commandInfo,
                     scriptInfo.SignatureChecked = true;
                     try
                     {
-                        processor = CreateScriptProcessorForSingleShell(scriptInfo, Context, useLocalScope ?? true, sessionState);
+                        processor = CreateScriptProcessorForSingleShell(scriptInfo, Context, useLocalScope ?? true, sessionState, forCompletion);
                     }
                     catch (ScriptRequiresSyntaxException reqSyntaxException)
                     {
@@ -819,10 +729,7 @@ internal static CommandInfo LookupCommandInfo(
                     }
 
                     // Otherwise, invoke the CommandNotFound handler
-                    if (result == null)
-                    {
-                        result = InvokeCommandNotFoundHandler(commandName, context, originalCommandName, commandOrigin);
-                    }
+                    result ??= InvokeCommandNotFoundHandler(commandName, context, originalCommandName, commandOrigin);
                 } while (false);
             }
             else
@@ -1053,31 +960,26 @@ private static CommandInfo TryModuleAutoDiscovery(string commandName,
             if (etwEnabled) CommandDiscoveryEventSource.Log.ModuleAutoDiscoveryStart(commandName);
 
             CommandInfo result = null;
-            bool cleanupModuleAnalysisAppDomain = false;
             try
             {
                 // If commandName had a slash, it was module-qualified or path-qualified.
                 // In that case, we should not return anything (module-qualified is handled
                 // by the previous call to TryModuleAutoLoading().
-                int colonOrBackslash = commandName.IndexOfAny(Utils.Separators.ColonOrBackslash);
+                int colonOrBackslash = commandName.AsSpan().IndexOfAny('\\', ':');
                 if (colonOrBackslash != -1)
                     return null;
 
                 CmdletInfo cmdletInfo = context.SessionState.InvokeCommand.GetCmdlet("Microsoft.PowerShell.Core\\Get-Module");
-                if ((commandOrigin == CommandOrigin.Internal) ||
-                    ((cmdletInfo != null) && (cmdletInfo.Visibility == SessionStateEntryVisibility.Public)))
+                if (commandOrigin == CommandOrigin.Internal || cmdletInfo?.Visibility == SessionStateEntryVisibility.Public)
                 {
                     // Search for a module with a matching command, as long as the user would have the ability to
                     // import the module.
                     cmdletInfo = context.SessionState.InvokeCommand.GetCmdlet("Microsoft.PowerShell.Core\\Import-Module");
-                    if (((commandOrigin == CommandOrigin.Internal) ||
-                         ((cmdletInfo != null) && (cmdletInfo.Visibility == SessionStateEntryVisibility.Public))))
+                    if (commandOrigin == CommandOrigin.Internal || cmdletInfo?.Visibility == SessionStateEntryVisibility.Public)
                     {
                         discoveryTracer.WriteLine("Executing non module-qualified search: {0}", commandName);
                         context.CommandDiscovery.RegisterLookupCommandInfoAction("ActiveModuleSearch", commandName);
 
-                        cleanupModuleAnalysisAppDomain = context.TakeResponsibilityForModuleAnalysisAppDomain();
-
                         // Get the available module files, preferring modules from $PSHOME so that user modules don't
                         // override system modules during auto-loading
                         if (etwEnabled) CommandDiscoveryEventSource.Log.SearchingForModuleFilesStart();
@@ -1088,30 +990,33 @@ private static CommandInfo TryModuleAutoDiscovery(string commandName,
                         {
                             // WinBlue:69141 - We need to get the full path here because the module path might be C:\Users\User1\DOCUME~1
                             // While the exportedCommands are cached, they are cached with the full path
-                            string expandedModulePath = IO.Path.GetFullPath(modulePath);
-                            string moduleShortName = System.IO.Path.GetFileNameWithoutExtension(expandedModulePath);
+                            string expandedModulePath = Path.GetFullPath(modulePath);
+                            string moduleShortName = Path.GetFileNameWithoutExtension(expandedModulePath);
                             var exportedCommands = AnalysisCache.GetExportedCommands(expandedModulePath, false, context);
 
                             if (exportedCommands == null) { continue; }
 
-                            CommandTypes exportedCommandTypes;
                             // Skip if module only has class or other types and no commands.
-                            if (exportedCommands.TryGetValue(commandName, out exportedCommandTypes))
+                            if (exportedCommands.TryGetValue(commandName, out CommandTypes exportedCommandTypes))
                             {
-                                Exception exception;
                                 discoveryTracer.WriteLine("Found in module: {0}", expandedModulePath);
-                                Collection<PSModuleInfo> matchingModule = AutoloadSpecifiedModule(expandedModulePath, context,
+                                Collection<PSModuleInfo> matchingModule = AutoloadSpecifiedModule(
+                                    expandedModulePath,
+                                    context,
                                     cmdletInfo != null ? cmdletInfo.Visibility : SessionStateEntryVisibility.Private,
-                                        out exception);
-                                lastError = exception;
-                                if ((matchingModule == null) || (matchingModule.Count == 0))
+                                    out lastError);
+
+                                if (matchingModule is null || matchingModule.Count == 0)
                                 {
-                                    string error = StringUtil.Format(DiscoveryExceptions.CouldNotAutoImportMatchingModule, commandName, moduleShortName);
-                                    CommandNotFoundException commandNotFound = new CommandNotFoundException(
+                                    string errorMessage = lastError is null
+                                        ? StringUtil.Format(DiscoveryExceptions.CouldNotAutoImportMatchingModule, commandName, moduleShortName)
+                                        : StringUtil.Format(DiscoveryExceptions.CouldNotAutoImportMatchingModuleWithErrorMessage, commandName, moduleShortName, lastError.Message);
+
+                                    throw new CommandNotFoundException(
                                         originalCommandName,
                                         lastError,
-                                        "CouldNotAutoloadMatchingModule", error);
-                                    throw commandNotFound;
+                                        "CouldNotAutoloadMatchingModule",
+                                        errorMessage);
                                 }
 
                                 result = LookupCommandInfo(commandName, commandTypes, searchResolutionOptions, commandOrigin, context);
@@ -1142,10 +1047,6 @@ private static CommandInfo TryModuleAutoDiscovery(string commandName,
             finally
             {
                 context.CommandDiscovery.UnregisterLookupCommandInfoAction("ActiveModuleSearch", commandName);
-                if (cleanupModuleAnalysisAppDomain)
-                {
-                    context.ReleaseResponsibilityForModuleAnalysisAppDomain();
-                }
             }
 
             if (etwEnabled) CommandDiscoveryEventSource.Log.ModuleAutoDiscoveryStop(commandName);
@@ -1158,7 +1059,7 @@ private static CommandInfo TryModuleAutoLoading(string commandName, ExecutionCon
             CommandInfo result = null;
 
             // If commandName was module-qualified. In that case, we should load the module.
-            var colonOrBackslash = commandName.IndexOfAny(Utils.Separators.ColonOrBackslash);
+            var colonOrBackslash = commandName.AsSpan().IndexOfAny('\\', ':');
 
             // If we don't see '\', there is no module specified, so no module to load.
             // If we see ':' before '\', then we probably have a drive qualified path, not a module name
@@ -1169,7 +1070,7 @@ private static CommandInfo TryModuleAutoLoading(string commandName, ExecutionCon
             string moduleName;
 
             // Now we check if there exists the second '\'
-            var secondBackslash = moduleCommandName.IndexOfAny(Utils.Separators.Backslash);
+            var secondBackslash = moduleCommandName.IndexOf('\\');
             if (secondBackslash == -1)
             {
                 moduleName = commandName.Substring(0, colonOrBackslash);
@@ -1263,10 +1164,8 @@ internal void RegisterLookupCommandInfoAction(string currentAction, string comma
                 case "ActivePostCommand": currentActionSet = _activePostCommand; break;
             }
 
-            if (currentActionSet.Contains(command))
+            if (!currentActionSet.Add(command))
                 throw new InvalidOperationException();
-            else
-                currentActionSet.Add(command);
         }
 
         internal void UnregisterLookupCommandInfoAction(string currentAction, string command)
@@ -1280,8 +1179,7 @@ internal void UnregisterLookupCommandInfoAction(string currentAction, string com
                 case "ActivePostCommand": currentActionSet = _activePostCommand; break;
             }
 
-            if (currentActionSet.Contains(command))
-                currentActionSet.Remove(command);
+            currentActionSet.Remove(command);
         }
 
         private readonly HashSet<string> _activePreLookup = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
@@ -1325,7 +1223,7 @@ internal LookupPathCollection GetLookupDirectoryPaths()
 
                 if (_pathCacheKey != null)
                 {
-                    string[] tokenizedPath = _pathCacheKey.Split(Utils.Separators.PathSeparator, StringSplitOptions.RemoveEmptyEntries);
+                    string[] tokenizedPath = _pathCacheKey.Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries);
                     _cachedPath = new Collection<string>();
 
                     foreach (string directory in tokenizedPath)
@@ -1333,11 +1231,17 @@ internal LookupPathCollection GetLookupDirectoryPaths()
                         string tempDir = directory.TrimStart();
                         if (tempDir.EqualsOrdinalIgnoreCase("~"))
                         {
-                            tempDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+                            tempDir = Environment.GetFolderPath(
+                                Environment.SpecialFolder.UserProfile,
+                                Environment.SpecialFolderOption.DoNotVerify);
                         }
                         else if (tempDir.StartsWith("~" + Path.DirectorySeparatorChar))
                         {
-                            tempDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + Path.DirectorySeparatorChar + tempDir.Substring(2);
+                            tempDir = Environment.GetFolderPath(
+                                Environment.SpecialFolder.UserProfile,
+                                Environment.SpecialFolderOption.DoNotVerify)
+                                + Path.DirectorySeparatorChar
+                                + tempDir.Substring(2);
                         }
 
                         _cachedPath.Add(tempDir);
@@ -1417,7 +1321,7 @@ private static void InitPathExtCache(string pathExt)
             lock (s_lockObject)
             {
                 s_cachedPathExtCollection = pathExt != null
-                    ? pathExt.Split(Utils.Separators.PathSeparator, StringSplitOptions.RemoveEmptyEntries)
+                    ? pathExt.ToLower().Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries)
                     : Array.Empty<string>();
                 s_cachedPathExtCollectionWithPs1 = new string[s_cachedPathExtCollection.Length + 1];
                 s_cachedPathExtCollectionWithPs1[0] = StringLiterals.PowerShellScriptFileExtension;
@@ -1489,7 +1393,7 @@ internal IEnumerator<CmdletInfo> GetCmdletInfo(string cmdletName, bool searchAll
                         }
                         // The engine cmdlets get imported (via Import-Module) once when PowerShell starts and the cmdletInfo is added to PSSnapinHelpers._cmdletcache(static) with ModuleName
                         // as "System.Management.Automation.dll" instead of the actual snapin name. The next time we load something in an InitialSessionState, we look at this _cmdletcache and
-                        // if the the assembly is already loaded, we just return the cmdlets back. So, the CmdletInfo has moduleName has "System.Management.Automation.dll". So, when M3P Activity
+                        // if the assembly is already loaded, we just return the cmdlets back. So, the CmdletInfo has moduleName has "System.Management.Automation.dll". So, when M3P Activity
                         // tries to access Microsoft.PowerShell.Core\\Get-Command, it cannot. So, adding an additional check to return the correct cmdletInfo for cmdlets from core modules.
                         else if (InitialSessionState.IsEngineModule(cmdletInfo.ModuleName))
                         {
diff --git a/src/System.Management.Automation/engine/CommandInfo.cs b/src/System.Management.Automation/engine/CommandInfo.cs
index 7538d9fb19f..eb5fbf70f3b 100644
--- a/src/System.Management.Automation/engine/CommandInfo.cs
+++ b/src/System.Management.Automation/engine/CommandInfo.cs
@@ -17,33 +17,27 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Defines the types of commands that MSH can execute.
+    /// Defines the types of commands that PowerShell can execute.
     /// </summary>
     [Flags]
     public enum CommandTypes
     {
         /// <summary>
         /// Aliases create a name that refers to other command types.
-        /// </summary>
-        /// <remarks>
         /// Aliases are only persisted within the execution of a single engine.
-        /// </remarks>
+        /// </summary>
         Alias = 0x0001,
 
         /// <summary>
         /// Script functions that are defined by a script block.
-        /// </summary>
-        /// <remarks>
         /// Functions are only persisted within the execution of a single engine.
-        /// </remarks>
+        /// </summary>
         Function = 0x0002,
 
         /// <summary>
         /// Script filters that are defined by a script block.
-        /// </summary>
-        /// <remarks>
         /// Filters are only persisted within the execution of a single engine.
-        /// </remarks>
+        /// </summary>
         Filter = 0x0004,
 
         /// <summary>
@@ -52,17 +46,15 @@ public enum CommandTypes
         Cmdlet = 0x0008,
 
         /// <summary>
-        /// An MSH script (*.ps1 file)
+        /// An PowerShell script (*.ps1 file)
         /// </summary>
         ExternalScript = 0x0010,
 
         /// <summary>
         /// Any existing application (can be console or GUI).
-        /// </summary>
-        /// <remarks>
         /// An application can have any extension that can be executed either directly through CreateProcess
         /// or indirectly through ShellExecute.
-        /// </remarks>
+        /// </summary>
         Application = 0x0020,
 
         /// <summary>
@@ -77,11 +69,9 @@ public enum CommandTypes
 
         /// <summary>
         /// All possible command types.
+        /// NOTE: a CommandInfo instance will never specify All as its CommandType
+        /// but All can be used when filtering the CommandTypes.
         /// </summary>
-        /// <remarks>
-        /// Note, a CommandInfo instance will never specify
-        /// All as its CommandType but All can be used when filtering the CommandTypes.
-        /// </remarks>
         All = Alias | Function | Filter | Cmdlet | Script | ExternalScript | Application | Configuration,
     }
 
@@ -110,10 +100,7 @@ internal CommandInfo(string name, CommandTypes type)
             // The name can be empty for functions and filters but it
             // can't be null
 
-            if (name == null)
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
             Name = name;
             CommandType = type;
@@ -288,10 +275,7 @@ internal void SetCommandType(CommandTypes newType)
         /// </exception>
         internal void Rename(string newName)
         {
-            if (string.IsNullOrEmpty(newName))
-            {
-                throw new ArgumentNullException(nameof(newName));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(newName);
 
             Name = newName;
         }
@@ -467,11 +451,8 @@ private MergedCommandParameterMetadata GetMergedCommandParameterMetadataSafely()
                         processInCurrentThread: true,
                         waitForCompletionInCurrentThread: true);
 
-                    if (eventArgs.Exception != null)
-                    {
-                        // An exception happened on a different thread, rethrow it here on the correct thread.
-                        eventArgs.Exception.Throw();
-                    }
+                    // An exception happened on a different thread, rethrow it here on the correct thread.
+                    eventArgs.Exception?.Throw();
 
                     return eventArgs.Result;
                 }
@@ -481,7 +462,7 @@ private MergedCommandParameterMetadata GetMergedCommandParameterMetadataSafely()
             return result;
         }
 
-        private class GetMergedCommandParameterMetadataSafelyEventArgs : EventArgs
+        private sealed class GetMergedCommandParameterMetadataSafelyEventArgs : EventArgs
         {
             public MergedCommandParameterMetadata Result;
             public ExceptionDispatchInfo Exception;
@@ -529,7 +510,7 @@ private void GetMergedCommandParameterMetadata(out MergedCommandParameterMetadat
                 processor = scriptCommand != null
                     ? new CommandProcessor(scriptCommand, _context, useLocalScope: true, fromScriptFile: false,
                         sessionState: scriptCommand.ScriptBlock.SessionStateInternal ?? Context.EngineSessionState)
-                    : new CommandProcessor((CmdletInfo)this, _context) { UseLocalScope = true };
+                    : new CommandProcessor((CmdletInfo)this, _context);
 
                 ParameterBinderController.AddArgumentsToCommandProcessor(processor, Arguments);
                 CommandProcessorBase oldCurrentCommandProcessor = Context.CurrentCommandProcessor;
@@ -928,7 +909,7 @@ public PSMemberNameAndType(string name, PSTypeName typeName, object value = null
     /// but can be used where a real type might not be available, in which case the name of the type can be used.
     /// The type encodes the members of dynamic objects in the type name.
     /// </summary>
-    internal class PSSyntheticTypeName : PSTypeName
+    internal sealed class PSSyntheticTypeName : PSTypeName
     {
         internal static PSSyntheticTypeName Create(string typename, IList<PSMemberNameAndType> membersTypes) => Create(new PSTypeName(typename), membersTypes);
 
@@ -939,7 +920,7 @@ internal static PSSyntheticTypeName Create(PSTypeName typename, IList<PSMemberNa
             var typeName = GetMemberTypeProjection(typename.Name, membersTypes);
             var members = new List<PSMemberNameAndType>();
             members.AddRange(membersTypes);
-            members.Sort((c1, c2) => string.Compare(c1.Name, c2.Name, StringComparison.OrdinalIgnoreCase));
+            members.Sort(static (c1, c2) => string.Compare(c1.Name, c2.Name, StringComparison.OrdinalIgnoreCase));
             return new PSSyntheticTypeName(typeName, typename.Type, members);
         }
 
@@ -980,7 +961,7 @@ private static string GetMemberTypeProjection(string typename, IList<PSMemberNam
 
             var builder = new StringBuilder(typename, members.Count * 7);
             builder.Append('#');
-            foreach (var m in members.OrderBy(m => m.Name))
+            foreach (var m in members.OrderBy(static m => m.Name))
             {
                 if (!IsPSTypeName(m))
                 {
diff --git a/src/System.Management.Automation/engine/CommandMetadata.cs b/src/System.Management.Automation/engine/CommandMetadata.cs
index eb59f9140a2..df767f714b0 100644
--- a/src/System.Management.Automation/engine/CommandMetadata.cs
+++ b/src/System.Management.Automation/engine/CommandMetadata.cs
@@ -847,45 +847,40 @@ internal string GetProxyCommand(string helpComment, bool generateDynamicParamete
         {
             if (string.IsNullOrEmpty(helpComment))
             {
-                helpComment = string.Format(CultureInfo.InvariantCulture, @"
-.ForwardHelpTargetName {0}
-.ForwardHelpCategory {1}
-",
-                    _wrappedCommand, _wrappedCommandType);
+                helpComment = string.Create(CultureInfo.InvariantCulture, $@"
+.ForwardHelpTargetName {_wrappedCommand}
+.ForwardHelpCategory {_wrappedCommandType}
+");
             }
 
             string dynamicParamblock = string.Empty;
             if (generateDynamicParameters && this.ImplementsDynamicParameters)
             {
-                dynamicParamblock = string.Format(CultureInfo.InvariantCulture, @"
+                dynamicParamblock = string.Create(CultureInfo.InvariantCulture, $@"
 dynamicparam
-{{{0}}}
+{{{GetDynamicParamBlock()}}}
 
-", GetDynamicParamBlock());
+");
             }
 
-            string result = string.Format(CultureInfo.InvariantCulture, @"{0}
-param({1})
+            string result = string.Create(CultureInfo.InvariantCulture, $@"{GetDecl()}
+param({GetParamBlock()})
 
-{2}begin
-{{{3}}}
+{dynamicParamblock}begin
+{{{GetBeginBlock()}}}
 
 process
-{{{4}}}
+{{{GetProcessBlock()}}}
 
 end
-{{{5}}}
+{{{GetEndBlock()}}}
+
+clean
+{{{GetCleanBlock()}}}
 <#
-{6}
+{CodeGeneration.EscapeBlockCommentContent(helpComment)}
 #>
-",
-                GetDecl(),
-                GetParamBlock(),
-                dynamicParamblock,
-                GetBeginBlock(),
-                GetProcessBlock(),
-                GetEndBlock(),
-                CodeGeneration.EscapeBlockCommentContent(helpComment));
+");
 
             return result;
         }
@@ -1014,9 +1009,10 @@ internal string GetBeginBlock()
                 commandOrigin = string.Empty;
             }
 
+            string wrappedCommand = CodeGeneration.EscapeSingleQuotedStringContent(_wrappedCommand);
             if (_wrappedAnyCmdlet)
             {
-                result = string.Format(CultureInfo.InvariantCulture, @"
+                result = string.Create(CultureInfo.InvariantCulture, $@"
     try {{
         $outBuffer = $null
         if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
@@ -1024,38 +1020,30 @@ internal string GetBeginBlock()
             $PSBoundParameters['OutBuffer'] = 1
         }}
 
-        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('{0}', [System.Management.Automation.CommandTypes]::{1})
+        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('{wrappedCommand}', [System.Management.Automation.CommandTypes]::{_wrappedCommandType})
         $scriptCmd = {{& $wrappedCmd @PSBoundParameters }}
 
-        $steppablePipeline = $scriptCmd.GetSteppablePipeline({2})
+        $steppablePipeline = $scriptCmd.GetSteppablePipeline({commandOrigin})
         $steppablePipeline.Begin($PSCmdlet)
     }} catch {{
         throw
     }}
-",
-                    CodeGeneration.EscapeSingleQuotedStringContent(_wrappedCommand),
-                    _wrappedCommandType,
-                    commandOrigin
-                    );
+");
             }
             else
             {
-                result = string.Format(CultureInfo.InvariantCulture, @"
+                result = string.Create(CultureInfo.InvariantCulture, $@"
     try {{
-        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('{0}', [System.Management.Automation.CommandTypes]::{1})
+        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('{wrappedCommand}', [System.Management.Automation.CommandTypes]::{_wrappedCommandType})
         $PSBoundParameters.Add('$args', $args)
         $scriptCmd = {{& $wrappedCmd @PSBoundParameters }}
 
-        $steppablePipeline = $scriptCmd.GetSteppablePipeline({2})
+        $steppablePipeline = $scriptCmd.GetSteppablePipeline({commandOrigin})
         $steppablePipeline.Begin($myInvocation.ExpectingInput, $ExecutionContext)
     }} catch {{
         throw
     }}
-",
-                CodeGeneration.EscapeSingleQuotedStringContent(_wrappedCommand),
-                _wrappedCommandType,
-                commandOrigin
-                );
+");
             }
 
             return result;
@@ -1063,6 +1051,11 @@ internal string GetBeginBlock()
 
         internal string GetProcessBlock()
         {
+            // The reason we wrap scripts in 'try { } catch { throw }' (here and elsewhere) is to turn
+            // an exception that could be thrown from .NET method invocation into a terminating error
+            // that can be propagated up.
+            // By default, an exception thrown from .NET method is not terminating, but when enclosed
+            // in try/catch, it will be turned into a terminating error.
             return @"
     try {
         $steppablePipeline.Process($_)
@@ -1074,9 +1067,10 @@ internal string GetProcessBlock()
 
         internal string GetDynamicParamBlock()
         {
-            return string.Format(CultureInfo.InvariantCulture, @"
+            string wrappedCommand = CodeGeneration.EscapeSingleQuotedStringContent(_wrappedCommand);
+            return string.Create(CultureInfo.InvariantCulture, $@"
     try {{
-        $targetCmd = $ExecutionContext.InvokeCommand.GetCommand('{0}', [System.Management.Automation.CommandTypes]::{1}, $PSBoundParameters)
+        $targetCmd = $ExecutionContext.InvokeCommand.GetCommand('{wrappedCommand}', [System.Management.Automation.CommandTypes]::{_wrappedCommandType}, $PSBoundParameters)
         $dynamicParams = @($targetCmd.Parameters.GetEnumerator() | Microsoft.PowerShell.Core\Where-Object {{ $_.Value.IsDynamic }})
         if ($dynamicParams.Length -gt 0)
         {{
@@ -1097,9 +1091,7 @@ internal string GetDynamicParamBlock()
     }} catch {{
         throw
     }}
-",
-            CodeGeneration.EscapeSingleQuotedStringContent(_wrappedCommand),
-            _wrappedCommandType);
+");
         }
 
         internal string GetEndBlock()
@@ -1113,6 +1105,18 @@ internal string GetEndBlock()
 ";
         }
 
+        internal string GetCleanBlock()
+        {
+            // Here we don't need to enclose the script in a 'try/catch' like elsewhere, because
+            //  1. the 'Clean' block doesn't propagate up any exception (terminating error);
+            //  2. only one expression in the script, so nothing else needs to be stopped when invoking the method fails.
+            return @"
+    if ($null -ne $steppablePipeline) {
+        $steppablePipeline.Clean()
+    }
+";
+        }
+
         #endregion
 
         #region Helper methods for restricting commands needed by implicit and interactive remoting
@@ -1228,7 +1232,7 @@ private static CommandMetadata GetRestrictedGetHelp()
 
             // This should only be called with 1 valid category
             ParameterMetadata categoryParameter = new ParameterMetadata("Category", typeof(string[]));
-            categoryParameter.Attributes.Add(new ValidateSetAttribute(Enum.GetNames(typeof(HelpCategory))));
+            categoryParameter.Attributes.Add(new ValidateSetAttribute(Enum.GetNames<HelpCategory>()));
             categoryParameter.Attributes.Add(new ValidateCountAttribute(0, 1));
 
             return GetRestrictedCmdlet("Get-Help", null, "https://go.microsoft.com/fwlink/?LinkID=113316", nameParameter, categoryParameter);
diff --git a/src/System.Management.Automation/engine/CommandParameter.cs b/src/System.Management.Automation/engine/CommandParameter.cs
index e6752ff023b..1c58bb87e29 100644
--- a/src/System.Management.Automation/engine/CommandParameter.cs
+++ b/src/System.Management.Automation/engine/CommandParameter.cs
@@ -12,14 +12,14 @@ namespace System.Management.Automation
     [DebuggerDisplay("{ParameterName}")]
     internal sealed class CommandParameterInternal
     {
-        private class Parameter
+        private sealed class Parameter
         {
             internal Ast ast;
             internal string parameterName;
             internal string parameterText;
         }
 
-        private class Argument
+        private sealed class Argument
         {
             internal Ast ast;
             internal object value;
@@ -124,10 +124,7 @@ internal bool ArgumentToBeSplatted
         /// </summary>
         internal void SetArgumentValue(Ast ast, object value)
         {
-            if (_argument == null)
-            {
-                _argument = new Argument();
-            }
+            _argument ??= new Argument();
 
             _argument.value = value;
             _argument.ast = ast;
diff --git a/src/System.Management.Automation/engine/CommandPathSearch.cs b/src/System.Management.Automation/engine/CommandPathSearch.cs
index c00d02c5af2..12c494ad8ea 100644
--- a/src/System.Management.Automation/engine/CommandPathSearch.cs
+++ b/src/System.Management.Automation/engine/CommandPathSearch.cs
@@ -37,17 +37,17 @@ internal class CommandPathSearch : IEnumerable<string>, IEnumerator<string>
         /// <param name="acceptableCommandNames">
         /// The patterns to search for in the paths.
         /// </param>
-        /// <param name="useFuzzyMatch">
-        /// Use likely relevant search.
+        /// <param name="fuzzyMatcher">
+        /// The fuzzy matcher to use for fuzzy searching.
         /// </param>
         internal CommandPathSearch(
             string commandName,
             LookupPathCollection lookupPaths,
             ExecutionContext context,
             Collection<string>? acceptableCommandNames,
-            bool useFuzzyMatch)
+            FuzzyMatcher? fuzzyMatcher)
         {
-            _useFuzzyMatch = useFuzzyMatch;
+            _fuzzyMatcher = fuzzyMatcher;
             string[] commandPatterns;
             if (acceptableCommandNames != null)
             {
@@ -110,7 +110,17 @@ private void ResolveCurrentDirectoryInLookupPaths()
                 sessionState.CurrentDrive.Provider.NameEquals(fileSystemProviderName) &&
                 sessionState.IsProviderLoaded(fileSystemProviderName);
 
-            string environmentCurrentDirectory = Directory.GetCurrentDirectory();
+            string? environmentCurrentDirectory = null;
+
+            try
+            {
+                environmentCurrentDirectory = Directory.GetCurrentDirectory();
+            }
+            catch (FileNotFoundException)
+            {
+                // This can happen if the current working directory is deleted by another process on non-Windows
+                // In this case, we'll just ignore it and continue on with the current directory as null
+            }
 
             LocationGlobber pathResolver = _context.LocationGlobber;
 
@@ -346,9 +356,12 @@ public bool MoveNext()
         /// </summary>
         public void Reset()
         {
+            _lookupPathsEnumerator.Dispose();
             _lookupPathsEnumerator = _lookupPaths.GetEnumerator();
+            _patternEnumerator.Dispose();
             _patternEnumerator = _patterns.GetEnumerator();
             _currentDirectoryResults = Array.Empty<string>();
+            _currentDirectoryResultsEnumerator.Dispose();
             _currentDirectoryResultsEnumerator = _currentDirectoryResults.GetEnumerator();
             _justReset = true;
         }
@@ -421,13 +434,13 @@ private void GetNewDirectoryResults(string pattern, string directory)
                     // to forcefully use null if pattern is "."
                     if (pattern.Length != 1 || pattern[0] != '.')
                     {
-                        if (_useFuzzyMatch)
+                        if (_fuzzyMatcher is not null)
                         {
                             var files = new List<string>();
                             var matchingFiles = Directory.EnumerateFiles(directory);
                             foreach (string file in matchingFiles)
                             {
-                                if (FuzzyMatcher.IsFuzzyMatch(Path.GetFileName(file), pattern))
+                                if (_fuzzyMatcher.IsFuzzyMatch(Path.GetFileName(file), pattern))
                                 {
                                     files.Add(file);
                                 }
@@ -490,8 +503,7 @@ private void GetNewDirectoryResults(string pattern, string directory)
                         if (name.Equals(baseNames[i], StringComparison.OrdinalIgnoreCase)
                             || (!Platform.IsWindows && Platform.NonWindowsIsExecutable(name)))
                         {
-                            if (result == null)
-                                result = new Collection<string>();
+                            result ??= new Collection<string>();
                             result.Add(fileNames[i]);
                             break;
                         }
@@ -517,8 +529,7 @@ private void GetNewDirectoryResults(string pattern, string directory)
                     if (fileName.EndsWith(allowedExt, StringComparison.OrdinalIgnoreCase)
                         || (!Platform.IsWindows && Platform.NonWindowsIsExecutable(fileName)))
                     {
-                        if (result == null)
-                            result = new Collection<string>();
+                        result ??= new Collection<string>();
                         result.Add(fileName);
                     }
                 }
@@ -578,7 +589,7 @@ private void GetNewDirectoryResults(string pattern, string directory)
         private readonly string[] _orderedPathExt;
         private readonly Collection<string>? _acceptableCommandNames;
 
-        private readonly bool _useFuzzyMatch = false;
+        private readonly FuzzyMatcher? _fuzzyMatcher;
 
         #endregion private members
     }
diff --git a/src/System.Management.Automation/engine/CommandProcessor.cs b/src/System.Management.Automation/engine/CommandProcessor.cs
index fb1fe81fc54..c0765ca18b6 100644
--- a/src/System.Management.Automation/engine/CommandProcessor.cs
+++ b/src/System.Management.Automation/engine/CommandProcessor.cs
@@ -101,7 +101,7 @@ internal CommandProcessor(IScriptCommandInfo scriptCommandInfo, ExecutionContext
         /// </exception>
         internal ParameterBinderController NewParameterBinderController(InternalCommand command)
         {
-            if (!(command is Cmdlet cmdlet))
+            if (command is not Cmdlet cmdlet)
             {
                 throw PSTraceSource.NewArgumentException(nameof(command));
             }
@@ -227,6 +227,7 @@ internal override void Prepare(IDictionary psDefaultParameterValues)
                     Context.LanguageMode = scriptCmdletInfo.ScriptBlock.LanguageMode.Value;
 
                     // If it's from ConstrainedLanguage to FullLanguage, indicate the transition before parameter binding takes place.
+                    // When transitioning to FullLanguage mode, we don't want any ConstrainedLanguage restrictions or incorrect Audit messages.
                     if (oldLanguageMode == PSLanguageMode.ConstrainedLanguage && Context.LanguageMode == PSLanguageMode.FullLanguage)
                     {
                         oldLangModeTransitionStatus = Context.LanguageModeTransitionInParameterBinding;
@@ -309,13 +310,11 @@ internal override void DoBegin()
         internal override void ProcessRecord()
         {
             // Invoke the Command method with the request object
-
             if (!this.RanBeginAlready)
             {
                 RanBeginAlready = true;
                 try
                 {
-                    // NOTICE-2004/06/08-JonN 959638
                     using (commandRuntime.AllowThisCommandToWrite(true))
                     {
                         if (Context._debuggingMode > 0 && Command is not PSScriptCmdlet)
@@ -326,12 +325,9 @@ internal override void ProcessRecord()
                         Command.DoBeginProcessing();
                     }
                 }
-                // 2004/03/18-JonN This is understood to be
-                // an FXCOP violation, cleared by KCwalina.
-                catch (Exception e)  // Catch-all OK, 3rd party callout.
+                catch (Exception e)
                 {
-                    // This cmdlet threw an exception, so
-                    // wrap it and bubble it up.
+                    // This cmdlet threw an exception, so wrap it and bubble it up.
                     throw ManageInvocationException(e);
                 }
             }
@@ -366,6 +362,7 @@ internal override void ProcessRecord()
 
                     // NOTICE-2004/06/08-JonN 959638
                     using (commandRuntime.AllowThisCommandToWrite(true))
+                    using (ParameterBinderBase.bindingTracer.TraceScope("CALLING ProcessRecord"))
                     {
                         if (CmdletParameterBinderController.ObsoleteParameterWarningList != null &&
                             CmdletParameterBinderController.ObsoleteParameterWarningList.Count > 0)
@@ -400,14 +397,13 @@ internal override void ProcessRecord()
                 }
                 catch (LoopFlowException)
                 {
-                    // Win8:84066 - Don't wrap LoopFlowException, we incorrectly raise a PipelineStoppedException
+                    // Don't wrap LoopFlowException, we incorrectly raise a PipelineStoppedException
                     // which gets caught by a script try/catch if we wrap here.
                     throw;
                 }
-                // 2004/03/18-JonN This is understood to be
-                // an FXCOP violation, cleared by KCwalina.
-                catch (Exception e) // Catch-all OK, 3rd party callout.
+                catch (Exception e)
                 {
+                    // Catch-all OK, 3rd party callout.
                     exceptionToThrow = e;
                 }
                 finally
@@ -691,7 +687,7 @@ private static Cmdlet ConstructInstance(Type type)
         /// If the constructor for the cmdlet threw an exception.
         /// </exception>
         /// <exception cref="MemberAccessException">
-        /// The type referenced by <paramref name="cmdletInformation"/> refered to an
+        /// The type referenced by <paramref name="cmdletInformation"/> referred to an
         /// abstract type or them member was invoked via a late-binding mechanism.
         /// </exception>
         /// <exception cref="TypeLoadException">
@@ -782,9 +778,11 @@ private void Init(IScriptCommandInfo scriptCommandInfo)
             InitCommon();
 
             // If the script has been dotted, throw an error if it's from a different language mode.
-            if (!this.UseLocalScope)
+            // Unless it was a script loaded through -File, in which case the danger of dotting other
+            // language modes (getting internal functions in the user's state) isn't a danger.
+            if (!this.UseLocalScope && !scriptCmdlet.ShouldRethrowExitException)
             {
-                ValidateCompatibleLanguageMode(scriptCommandInfo.ScriptBlock, _context.LanguageMode, Command.MyInvocation);
+                ValidateCompatibleLanguageMode(scriptCommandInfo.ScriptBlock, _context, Command.MyInvocation);
             }
         }
 
diff --git a/src/System.Management.Automation/engine/CommandProcessorBase.cs b/src/System.Management.Automation/engine/CommandProcessorBase.cs
index c6825cc6925..ddadf9f7516 100644
--- a/src/System.Management.Automation/engine/CommandProcessorBase.cs
+++ b/src/System.Management.Automation/engine/CommandProcessorBase.cs
@@ -4,9 +4,8 @@
 using System.Collections;
 using System.Collections.ObjectModel;
 using System.Management.Automation.Internal;
-using System.Management.Automation.Language;
-
-using Dbg = System.Management.Automation.Diagnostics;
+using System.Management.Automation.Security;
+using System.Runtime.InteropServices;
 
 namespace System.Management.Automation
 {
@@ -46,6 +45,7 @@ internal CommandProcessorBase(CommandInfo commandInfo)
                     string errorTemplate = expAttribute.ExperimentAction == ExperimentAction.Hide
                         ? DiscoveryExceptions.ScriptDisabledWhenFeatureOn
                         : DiscoveryExceptions.ScriptDisabledWhenFeatureOff;
+
                     string errorMsg = StringUtil.Format(errorTemplate, expAttribute.ExperimentName);
                     ErrorRecord errorRecord = new ErrorRecord(
                         new InvalidOperationException(errorMsg),
@@ -54,6 +54,8 @@ internal CommandProcessorBase(CommandInfo commandInfo)
                         commandInfo);
                     throw new CmdletInvocationException(errorRecord);
                 }
+
+                HasCleanBlock = scriptCommand.ScriptBlock.HasCleanBlock;
             }
 
             CommandInfo = commandInfo;
@@ -87,6 +89,11 @@ internal bool AddedToPipelineAlready
         /// <value></value>
         internal CommandInfo CommandInfo { get; set; }
 
+        /// <summary>
+        /// Gets whether the command has a 'Clean' block defined.
+        /// </summary>
+        internal bool HasCleanBlock { get; }
+
         /// <summary>
         /// This indicates whether this command processor is created from
         /// a script file.
@@ -187,11 +194,11 @@ internal bool UseLocalScope
         /// be used when a script block is being dotted.
         /// </summary>
         /// <param name="scriptBlock">The script block being dotted.</param>
-        /// <param name="languageMode">The current language mode.</param>
+        /// <param name="context">The current execution context.</param>
         /// <param name="invocationInfo">The invocation info about the command.</param>
         protected static void ValidateCompatibleLanguageMode(
             ScriptBlock scriptBlock,
-            PSLanguageMode languageMode,
+            ExecutionContext context,
             InvocationInfo invocationInfo)
         {
             // If we are in a constrained language mode (Core or Restricted), block it.
@@ -200,10 +207,11 @@ protected static void ValidateCompatibleLanguageMode(
             //      functions that were never designed to handle untrusted data.
             // This function won't be called for NoLanguage mode so the only direction checked is trusted
             // (FullLanguage mode) script running in a constrained/restricted session.
-            if ((scriptBlock.LanguageMode.HasValue) &&
-                (scriptBlock.LanguageMode != languageMode) &&
-                ((languageMode == PSLanguageMode.RestrictedLanguage) ||
-                (languageMode == PSLanguageMode.ConstrainedLanguage)))
+            var languageMode = context.LanguageMode;
+            if (scriptBlock.LanguageMode.HasValue &&
+                scriptBlock.LanguageMode != languageMode &&
+                (languageMode == PSLanguageMode.RestrictedLanguage ||
+                 languageMode == PSLanguageMode.ConstrainedLanguage))
             {
                 // Finally check if script block is really just PowerShell commands plus parameters.
                 // If so then it is safe to dot source across language mode boundaries.
@@ -219,14 +227,24 @@ protected static void ValidateCompatibleLanguageMode(
 
                 if (!isSafeToDotSource)
                 {
-                    ErrorRecord errorRecord = new ErrorRecord(
-                    new NotSupportedException(
-                        DiscoveryExceptions.DotSourceNotSupported),
-                        "DotSourceNotSupported",
-                        ErrorCategory.InvalidOperation,
-                        null);
-                    errorRecord.SetInvocationInfo(invocationInfo);
-                    throw new CmdletInvocationException(errorRecord);
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        ErrorRecord errorRecord = new ErrorRecord(
+                            new NotSupportedException(DiscoveryExceptions.DotSourceNotSupported),
+                            "DotSourceNotSupported",
+                            ErrorCategory.InvalidOperation,
+                            targetObject: null);
+                        errorRecord.SetInvocationInfo(invocationInfo);
+                        throw new CmdletInvocationException(errorRecord);
+                    }
+
+                    string scriptBlockId = scriptBlock.GetFileName() ?? string.Empty;
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: CommandBaseStrings.WDACLogTitle,
+                        message: StringUtil.Format(CommandBaseStrings.WDACLogMessage, scriptBlockId, scriptBlock.LanguageMode, languageMode),
+                        fqid: "ScriptBlockDotSourceNotAllowed",
+                        dropIntoDebugger: true);
                 }
             }
         }
@@ -345,10 +363,7 @@ internal void SetCurrentScopeToExecutionScope()
             // Make sure we have a session state instance for this command.
             // If one hasn't been explicitly set, then use the session state
             // available on the engine execution context...
-            if (CommandSessionState == null)
-            {
-                CommandSessionState = Context.EngineSessionState;
-            }
+            CommandSessionState ??= Context.EngineSessionState;
 
             // Store off the current scope
             _previousScope = CommandSessionState.CurrentScope;
@@ -371,13 +386,10 @@ internal void RestorePreviousScope()
 
             Context.EngineSessionState = _previousCommandSessionState;
 
-            if (_previousScope != null)
-            {
-                // Restore the scope but use the same session state instance we
-                // got it from because the command may have changed the execution context
-                // session state...
-                CommandSessionState.CurrentScope = _previousScope;
-            }
+            // Restore the scope but use the same session state instance we
+            // got it from because the command may have changed the execution context
+            // session state...
+            CommandSessionState.CurrentScope = _previousScope;
         }
 
         private SessionStateScope _previousScope;
@@ -452,16 +464,14 @@ internal void DoPrepare(IDictionary psDefaultParameterValues)
                     HandleObsoleteCommand(ObsoleteAttribute);
                 }
             }
-            catch (Exception)
+            catch (InvalidComObjectException e)
             {
-                if (_useLocalScope)
-                {
-                    // If we had an exception during Prepare, we're done trying to execute the command
-                    // so the scope we created needs to release any resources it hold.s
-                    CommandSessionState.RemoveScope(CommandScope);
-                }
+                // This type of exception could be thrown from parameter binding.
+                string msg = StringUtil.Format(ParserStrings.InvalidComObjectException, e.Message);
+                var newEx = new RuntimeException(msg, e);
 
-                throw;
+                newEx.SetErrorId("InvalidComObjectException");
+                throw newEx;
             }
             finally
             {
@@ -508,26 +518,23 @@ internal virtual void DoBegin()
                     // The RedirectShellErrorOutputPipe flag is used by the V2 hosting API to force the
                     // redirection.
                     //
-                    if (this.RedirectShellErrorOutputPipe || _context.ShellFunctionErrorOutputPipe != null)
+                    if (RedirectShellErrorOutputPipe || _context.ShellFunctionErrorOutputPipe is not null)
                     {
-                        _context.ShellFunctionErrorOutputPipe = this.commandRuntime.ErrorOutputPipe;
+                        _context.ShellFunctionErrorOutputPipe = commandRuntime.ErrorOutputPipe;
                     }
 
                     _context.CurrentCommandProcessor = this;
+                    SetCurrentScopeToExecutionScope();
+
                     using (commandRuntime.AllowThisCommandToWrite(true))
+                    using (ParameterBinderBase.bindingTracer.TraceScope("CALLING BeginProcessing"))
                     {
-                        using (ParameterBinderBase.bindingTracer.TraceScope(
-                            "CALLING BeginProcessing"))
+                        if (Context._debuggingMode > 0 && Command is not PSScriptCmdlet)
                         {
-                            SetCurrentScopeToExecutionScope();
-
-                            if (Context._debuggingMode > 0 && Command is not PSScriptCmdlet)
-                            {
-                                Context.Debugger.CheckCommand(this.Command.MyInvocation);
-                            }
-
-                            Command.DoBeginProcessing();
+                            Context.Debugger.CheckCommand(Command.MyInvocation);
                         }
+
+                        Command.DoBeginProcessing();
                     }
                 }
                 catch (Exception e)
@@ -589,20 +596,14 @@ internal virtual void Complete()
             try
             {
                 using (commandRuntime.AllowThisCommandToWrite(true))
+                using (ParameterBinderBase.bindingTracer.TraceScope("CALLING EndProcessing"))
                 {
-                    using (ParameterBinderBase.bindingTracer.TraceScope(
-                        "CALLING EndProcessing"))
-                    {
-                        this.Command.DoEndProcessing();
-                    }
+                    this.Command.DoEndProcessing();
                 }
             }
-            // 2004/03/18-JonN This is understood to be
-            // an FXCOP violation, cleared by KCwalina.
             catch (Exception e)
             {
-                // This cmdlet threw an exception, so
-                // wrap it and bubble it up.
+                // This cmdlet threw an exception, wrap it as needed and bubble it up.
                 throw ManageInvocationException(e);
             }
         }
@@ -631,46 +632,121 @@ internal void DoComplete()
                 // The RedirectShellErrorOutputPipe flag is used by the V2 hosting API to force the
                 // redirection.
                 //
-                if (this.RedirectShellErrorOutputPipe || _context.ShellFunctionErrorOutputPipe != null)
+                if (RedirectShellErrorOutputPipe || _context.ShellFunctionErrorOutputPipe is not null)
                 {
-                    _context.ShellFunctionErrorOutputPipe = this.commandRuntime.ErrorOutputPipe;
+                    _context.ShellFunctionErrorOutputPipe = commandRuntime.ErrorOutputPipe;
                 }
 
                 _context.CurrentCommandProcessor = this;
-
                 SetCurrentScopeToExecutionScope();
                 Complete();
             }
             finally
             {
-                OnRestorePreviousScope();
-
                 _context.ShellFunctionErrorOutputPipe = oldErrorOutputPipe;
                 _context.CurrentCommandProcessor = oldCurrentCommandProcessor;
 
-                // Destroy the local scope at this point if there is one...
-                if (_useLocalScope && CommandScope != null)
-                {
-                    CommandSessionState.RemoveScope(CommandScope);
-                }
+                RestorePreviousScope();
+            }
+        }
 
-                // and the previous scope...
-                if (_previousScope != null)
+        protected virtual void CleanResource()
+        {
+            try
+            {
+                using (commandRuntime.AllowThisCommandToWrite(permittedToWriteToPipeline: true))
+                using (ParameterBinderBase.bindingTracer.TraceScope("CALLING CleanResource"))
                 {
-                    // Restore the scope but use the same session state instance we
-                    // got it from because the command may have changed the execution context
-                    // session state...
-                    CommandSessionState.CurrentScope = _previousScope;
+                    Command.DoCleanResource();
                 }
+            }
+            catch (HaltCommandException)
+            {
+                throw;
+            }
+            catch (FlowControlException)
+            {
+                throw;
+            }
+            catch (Exception e)
+            {
+                // This cmdlet threw an exception, so wrap it and bubble it up.
+                throw ManageInvocationException(e);
+            }
+        }
+
+        internal void DoCleanup()
+        {
+            // The property 'PropagateExceptionsToEnclosingStatementBlock' controls whether a general exception
+            // (an exception thrown from a .NET method invocation, or an expression like '1/0') will be turned
+            // into a terminating error, which will be propagated up and thus stop the rest of the running script.
+            // It is usually used by TryStatement and TrapStatement, which makes the general exception catch-able.
+            //
+            // For the 'Clean' block, we don't want to bubble up the general exception when the command is enclosed
+            // in a TryStatement or has TrapStatement accompanying, because no exception can escape from 'Clean' and
+            // thus it's pointless to bubble up the general exception in this case.
+            //
+            // Therefore we set this property to 'false' here to mask off the previous setting that could be from a
+            // TryStatement or TrapStatement. Example:
+            //   PS:1> function b { end {} clean { 1/0; Write-Host 'clean' } }
+            //   PS:2> b
+            //   RuntimeException: Attempted to divide by zero.
+            //   clean
+            //   ## Note that, outer 'try/trap' doesn't affect the general exception happens in 'Clean' block.
+            //   ## so its behavior is consistent regardless of whether the command is enclosed by 'try/catch' or not.
+            //   PS:3> try { b } catch { 'outer catch' }
+            //   RuntimeException: Attempted to divide by zero.
+            //   clean
+            //
+            // Be noted that, this doesn't affect the TryStatement/TrapStatement within the 'Clean' block. Example:
+            //   ## 'try/trap' within 'Clean' block makes the general exception catch-able.
+            //   PS:3> function a { end {} clean { try { 1/0; Write-Host 'clean' } catch { Write-Host "caught: $_" } } }
+            //   PS:4> a
+            //   caught: Attempted to divide by zero.
+            bool oldExceptionPropagationState = _context.PropagateExceptionsToEnclosingStatementBlock;
+            _context.PropagateExceptionsToEnclosingStatementBlock = false;
+
+            Pipe oldErrorOutputPipe = _context.ShellFunctionErrorOutputPipe;
+            CommandProcessorBase oldCurrentCommandProcessor = _context.CurrentCommandProcessor;
 
-                // Restore the previous session state
-                if (_previousCommandSessionState != null)
+            try
+            {
+                if (RedirectShellErrorOutputPipe || _context.ShellFunctionErrorOutputPipe is not null)
                 {
-                    Context.EngineSessionState = _previousCommandSessionState;
+                    _context.ShellFunctionErrorOutputPipe = commandRuntime.ErrorOutputPipe;
                 }
+
+                _context.CurrentCommandProcessor = this;
+                SetCurrentScopeToExecutionScope();
+                CleanResource();
+            }
+            finally
+            {
+                _context.PropagateExceptionsToEnclosingStatementBlock = oldExceptionPropagationState;
+                _context.ShellFunctionErrorOutputPipe = oldErrorOutputPipe;
+                _context.CurrentCommandProcessor = oldCurrentCommandProcessor;
+
+                RestorePreviousScope();
             }
         }
 
+        internal void ReportCleanupError(Exception exception)
+        {
+            var error = exception is IContainsErrorRecord icer
+                ? icer.ErrorRecord
+                : new ErrorRecord(exception, "Clean.ReportException", ErrorCategory.NotSpecified, targetObject: null);
+
+            PSObject errorWrap = PSObject.AsPSObject(error);
+            errorWrap.WriteStream = WriteStreamType.Error;
+
+            var errorPipe = commandRuntime.ErrorMergeTo == MshCommandRuntime.MergeDataStream.Output
+                ? commandRuntime.OutputPipe
+                : commandRuntime.ErrorOutputPipe;
+
+            errorPipe.Add(errorWrap);
+            _context.QuestionMarkVariableValue = false;
+        }
+
         /// <summary>
         /// For diagnostic purposes.
         /// </summary>
@@ -777,23 +853,16 @@ internal PipelineStoppedException ManageInvocationException(Exception e)
                 {
                     do // false loop
                     {
-                        ProviderInvocationException pie = e as ProviderInvocationException;
-                        if (pie != null)
+                        if (e is ProviderInvocationException pie)
                         {
-                            // If a ProviderInvocationException occurred,
-                            // discard the ProviderInvocationException and
-                            // re-wrap in CmdletProviderInvocationException
-                            e = new CmdletProviderInvocationException(
-                                pie,
-                                Command.MyInvocation);
+                            // If a ProviderInvocationException occurred, discard the ProviderInvocationException
+                            // and re-wrap it in CmdletProviderInvocationException.
+                            e = new CmdletProviderInvocationException(pie, Command.MyInvocation);
                             break;
                         }
 
-                        // 1021203-2005/05/09-JonN
-                        // HaltCommandException will cause the command
-                        // to stop, but not be reported as an error.
-                        // 906445-2005/05/16-JonN
-                        // FlowControlException should not be wrapped
+                        // HaltCommandException will cause the command to stop, but not be reported as an error.
+                        // FlowControlException should not be wrapped.
                         if (e is PipelineStoppedException
                             || e is CmdletInvocationException
                             || e is ActionPreferenceStopException
@@ -813,9 +882,7 @@ internal PipelineStoppedException ManageInvocationException(Exception e)
                         }
 
                         // wrap all other exceptions
-                        e = new CmdletInvocationException(
-                                    e,
-                                    Command.MyInvocation);
+                        e = new CmdletInvocationException(e, Command.MyInvocation);
                     } while (false);
 
                     // commandRuntime.ManageException will always throw PipelineStoppedException
@@ -943,15 +1010,27 @@ public void Dispose()
         private void Dispose(bool disposing)
         {
             if (_disposed)
+            {
                 return;
+            }
 
             if (disposing)
             {
-                // 2004/03/05-JonN Look into using metadata to check
-                // whether IDisposable is implemented, in order to avoid
-                // this expensive reflection cast.
-                IDisposable id = Command as IDisposable;
-                if (id != null)
+                if (UseLocalScope)
+                {
+                    // Clean up the PS drives that are associated with this local scope.
+                    // This operation may be needed at multiple stages depending on whether the 'clean' block is declared:
+                    //  1. when there is a 'clean' block, it needs to be done only after 'clean' block runs, because the scope
+                    //     needs to be preserved until the 'clean' block finish execution.
+                    //  2. when there is no 'clean' block, it needs to be done when
+                    //      (1) there is any exception thrown from 'DoPrepare()', 'DoBegin()', 'DoExecute()', or 'DoComplete';
+                    //      (2) OR, the command runs to the end successfully;
+                    // Doing this cleanup at those multiple stages is cumbersome. Since we will always dispose the command in
+                    // the end, doing this cleanup here will cover all the above cases.
+                    CommandSessionState.RemoveScope(CommandScope);
+                }
+
+                if (Command is IDisposable id)
                 {
                     id.Dispose();
                 }
diff --git a/src/System.Management.Automation/engine/CommandSearcher.cs b/src/System.Management.Automation/engine/CommandSearcher.cs
index 9745d2aa9ad..638ccd4ac79 100644
--- a/src/System.Management.Automation/engine/CommandSearcher.cs
+++ b/src/System.Management.Automation/engine/CommandSearcher.cs
@@ -9,6 +9,7 @@
 using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Security;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -24,29 +25,20 @@ internal class CommandSearcher : IEnumerable<CommandInfo>, IEnumerator<CommandIn
         /// Constructs a command searching enumerator that resolves the location
         /// to a command using a standard algorithm.
         /// </summary>
-        /// <param name="commandName">
-        /// The name of the command to look for.
-        /// </param>
-        /// <param name="options">
-        /// Determines which types of commands glob resolution of the name will take place on.
-        /// </param>
-        /// <param name="commandTypes">
-        /// The types of commands to look for.
-        /// </param>
-        /// <param name="context">
-        /// The execution context for this engine instance...
-        /// </param>
-        /// <exception cref="ArgumentNullException">
-        /// If <paramref name="context"/> is null.
-        /// </exception>
-        /// <exception cref="PSArgumentException">
-        /// If <paramref name="commandName"/> is null or empty.
-        /// </exception>
+        /// <param name="commandName">The name of the command to look for.</param>
+        /// <param name="options">Determines which types of commands glob resolution of the name will take place on.</param>
+        /// <param name="commandTypes">The types of commands to look for.</param>
+        /// <param name="context">The execution context for this engine instance.</param>
+        /// <param name="fuzzyMatcher">The fuzzy matcher to use for fuzzy searching.</param>
+        ///
+        /// <exception cref="ArgumentNullException">If <paramref name="context"/> is null.</exception>
+        /// <exception cref="PSArgumentException">If <paramref name="commandName"/> is null or empty.</exception>
         internal CommandSearcher(
             string commandName,
             SearchResolutionOptions options,
             CommandTypes commandTypes,
-            ExecutionContext context)
+            ExecutionContext context,
+            FuzzyMatcher? fuzzyMatcher = null)
         {
             Diagnostics.Assert(context != null, "caller to verify context is not null");
             Diagnostics.Assert(!string.IsNullOrEmpty(commandName), "caller to verify commandName is valid");
@@ -55,6 +47,7 @@ internal CommandSearcher(
             _context = context;
             _commandResolutionOptions = options;
             _commandTypes = commandTypes;
+            _fuzzyMatcher = fuzzyMatcher;
 
             // Initialize the enumerators
             this.Reset();
@@ -158,7 +151,7 @@ public bool MoveNext()
                     }
                     else
                     {
-                        // Ok see it it's in the applications list
+                        // Ok, see if it's in the applications list
                         foreach (string path in _context.EngineSessionState.Applications)
                         {
                             if (checkPath(path, _commandName))
@@ -705,8 +698,7 @@ private static bool checkPath(string path, string commandName)
                     foreach (KeyValuePair<string, AliasInfo> aliasEntry in _context.EngineSessionState.GetAliasTable())
                     {
                         if (aliasMatcher.IsMatch(aliasEntry.Key) ||
-                            (_commandResolutionOptions.HasFlag(SearchResolutionOptions.FuzzyMatch) &&
-                            FuzzyMatcher.IsFuzzyMatch(aliasEntry.Key, _commandName)))
+                            (_fuzzyMatcher is not null && _fuzzyMatcher.IsFuzzyMatch(aliasEntry.Key, _commandName)))
                         {
                             matchingAliases.Add(aliasEntry.Value);
                         }
@@ -785,8 +777,7 @@ private static bool checkPath(string path, string commandName)
                     foreach ((string functionName, FunctionInfo functionInfo) in _context.EngineSessionState.GetFunctionTable())
                     {
                         if (functionMatcher.IsMatch(functionName) ||
-                            (_commandResolutionOptions.HasFlag(SearchResolutionOptions.FuzzyMatch) &&
-                            FuzzyMatcher.IsFuzzyMatch(functionName, _commandName)))
+                            (_fuzzyMatcher is not null && _fuzzyMatcher.IsFuzzyMatch(functionName, _commandName)))
                         {
                             matchingFunction.Add(functionInfo);
                         }
@@ -849,11 +840,21 @@ private static bool ShouldSkipCommandResolutionForConstrainedLanguage(CommandInf
                 return false;
             }
 
-            // Don't return untrusted commands to trusted functions
-            if ((result.DefiningLanguageMode == PSLanguageMode.ConstrainedLanguage) &&
-                (executionContext.LanguageMode == PSLanguageMode.FullLanguage))
+            // Don't return untrusted commands to trusted functions.
+            if (result.DefiningLanguageMode == PSLanguageMode.ConstrainedLanguage && executionContext.LanguageMode == PSLanguageMode.FullLanguage)
             {
-                return true;
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    return true;
+                }
+
+                // This audit log message is to inform the user that an expected command will not be available because it is not trusted
+                // when the machine is in policy enforcement mode.
+                SystemPolicy.LogWDACAuditMessage(
+                    context: executionContext,
+                    title: CommandBaseStrings.SearcherWDACLogTitle,
+                    message: StringUtil.Format(CommandBaseStrings.SearcherWDACLogMessage, result.Name, result.ModuleName ?? string.Empty),
+                    fqid: "CommandSearchFailureForUntrustedCommand");
             }
 
             // Don't allow invocation of trusted functions from debug breakpoints.
@@ -928,10 +929,7 @@ private static bool ShouldSkipCommandResolutionForConstrainedLanguage(CommandInf
                     }
                 }
 
-                if (module == null)
-                {
-                    module = modules[0];
-                }
+                module ??= modules[0];
             }
 
             return module;
@@ -953,24 +951,13 @@ private static bool ShouldSkipCommandResolutionForConstrainedLanguage(CommandInf
 
             if (result != null)
             {
-                if (result is FilterInfo)
+                var formatString = result switch
                 {
-                    CommandDiscovery.discoveryTracer.WriteLine(
-                        "Filter found: {0}",
-                        function);
-                }
-                else if (result is ConfigurationInfo)
-                {
-                    CommandDiscovery.discoveryTracer.WriteLine(
-                        "Configuration found: {0}",
-                        function);
-                }
-                else
-                {
-                    CommandDiscovery.discoveryTracer.WriteLine(
-                        "Function found: {0}  {1}",
-                        function);
-                }
+                    FilterInfo => "Filter found: {0}",
+                    ConfigurationInfo => "Configuration found: {0}",
+                    _ => "Function found: {0}",
+                };
+                CommandDiscovery.discoveryTracer.WriteLine(formatString, function);
             }
             else
             {
@@ -1021,10 +1008,8 @@ private static bool ShouldSkipCommandResolutionForConstrainedLanguage(CommandInf
                     {
                         foreach (CmdletInfo cmdlet in cmdletList)
                         {
-                            if (cmdletMatcher != null &&
-                                cmdletMatcher.IsMatch(cmdlet.Name) ||
-                                (_commandResolutionOptions.HasFlag(SearchResolutionOptions.FuzzyMatch) &&
-                                 FuzzyMatcher.IsFuzzyMatch(cmdlet.Name, _commandName)))
+                            if ((cmdletMatcher is not null && cmdletMatcher.IsMatch(cmdlet.Name)) ||
+                                (_fuzzyMatcher is not null && _fuzzyMatcher.IsFuzzyMatch(cmdlet.Name, _commandName)))
                             {
                                 if (string.IsNullOrEmpty(moduleName) || moduleName.Equals(cmdlet.ModuleName, StringComparison.OrdinalIgnoreCase))
                                 {
@@ -1454,7 +1439,7 @@ private static CanDoPathLookupResult CanDoPathLookup(string possiblePath)
 
                 // If the command contains any path separators, we can't
                 // do the path lookup
-                if (possiblePath.IndexOfAny(Utils.Separators.Directory) != -1)
+                if (possiblePath.AsSpan().IndexOfAny('\\', '/') != -1)
                 {
                     result = CanDoPathLookupResult.DirectorySeparator;
                     break;
@@ -1463,7 +1448,7 @@ private static CanDoPathLookupResult CanDoPathLookup(string possiblePath)
                 // If the command contains any invalid path characters, we can't
                 // do the path lookup
 
-                if (possiblePath.IndexOfAny(Path.GetInvalidPathChars()) != -1)
+                if (PathUtils.ContainsInvalidPathChars(possiblePath))
                 {
                     result = CanDoPathLookupResult.IllegalCharacters;
                     break;
@@ -1499,6 +1484,11 @@ private static CanDoPathLookupResult CanDoPathLookup(string possiblePath)
         /// </summary>
         private readonly ExecutionContext _context;
 
+        /// <summary>
+        /// The fuzzy matcher to use for fuzzy searching.
+        /// </summary>
+        private readonly FuzzyMatcher? _fuzzyMatcher;
+
         /// <summary>
         /// A routine to initialize the path searcher...
         /// </summary>
@@ -1531,7 +1521,7 @@ private void setupPathSearcher()
                         _context.CommandDiscovery.GetLookupDirectoryPaths(),
                         _context,
                         acceptableCommandNames: null,
-                        useFuzzyMatch: _commandResolutionOptions.HasFlag(SearchResolutionOptions.FuzzyMatch));
+                        _fuzzyMatcher);
             }
             else
             {
@@ -1547,7 +1537,7 @@ private void setupPathSearcher()
                             _context.CommandDiscovery.GetLookupDirectoryPaths(),
                             _context,
                             ConstructSearchPatternsFromName(_commandName, commandDiscovery: true),
-                            useFuzzyMatch: false);
+                            fuzzyMatcher: null);
                 }
                 else if (_canDoPathLookupResult == CanDoPathLookupResult.PathIsRooted)
                 {
@@ -1571,7 +1561,7 @@ private void setupPathSearcher()
                                 directoryCollection,
                                 _context,
                                 ConstructSearchPatternsFromName(fileName, commandDiscovery: true),
-                                useFuzzyMatch: false);
+                                fuzzyMatcher: null);
                     }
                     else
                     {
@@ -1611,7 +1601,7 @@ private void setupPathSearcher()
                                     directoryCollection,
                                     _context,
                                     ConstructSearchPatternsFromName(fileName, commandDiscovery: true),
-                                    useFuzzyMatch: false);
+                                    fuzzyMatcher: null);
                         }
                         else
                         {
@@ -1730,17 +1720,14 @@ internal enum SearchResolutionOptions
         CommandNameIsPattern = 0x04,
         SearchAllScopes = 0x08,
 
-        /// <summary>Use fuzzy matching.</summary>
-        FuzzyMatch = 0x10,
-
         /// <summary>
         /// Enable searching for cmdlets/functions by abbreviation expansion.
         /// </summary>
-        UseAbbreviationExpansion = 0x20,
+        UseAbbreviationExpansion = 0x10,
 
         /// <summary>
         /// Enable resolving wildcard in paths.
         /// </summary>
-        ResolveLiteralThenPathPatterns = 0x40
+        ResolveLiteralThenPathPatterns = 0x20
     }
 }
diff --git a/src/System.Management.Automation/engine/CommonCommandParameters.cs b/src/System.Management.Automation/engine/CommonCommandParameters.cs
index 376b9d0adbf..9dc92d817aa 100644
--- a/src/System.Management.Automation/engine/CommonCommandParameters.cs
+++ b/src/System.Management.Automation/engine/CommonCommandParameters.cs
@@ -59,7 +59,7 @@ public SwitchParameter Verbose
         /// </summary>
         /// <remarks>
         /// This parameter tells the command to provide Programmer/Support type
-        /// messages to understand what is really occuring and give the user the
+        /// messages to understand what is really occurring and give the user the
         /// opportunity to stop or debug the situation.
         /// </remarks>
         [Parameter]
@@ -123,6 +123,27 @@ public ActionPreference InformationAction
             set { _commandRuntime.InformationPreference = value; }
         }
 
+        /// <summary>
+        /// Gets or sets the value of the ProgressAction parameter for the cmdlet.
+        /// </summary>
+        /// <remarks>
+        /// This parameter tells the command what to do when a progress record occurs.
+        /// </remarks>
+        /// <!--
+        /// NOTE: The "proga" alias name does not follow the same alias naming convention used
+        /// with other common parameter aliases that control stream functionality; however,
+        /// "pa" was already taken as a parameter alias in other commands when this parameter
+        /// was added to PowerShell, so "proga" was chosen instead.
+        /// -->
+        [Parameter]
+        [Alias("proga")]
+        public ActionPreference ProgressAction
+        {
+            get { return _commandRuntime.ProgressPreference; }
+
+            set { _commandRuntime.ProgressPreference = value; }
+        }
+
         /// <summary>
         /// Gets or sets the value of the ErrorVariable parameter for the cmdlet.
         /// </summary>
@@ -204,7 +225,7 @@ public string OutVariable
         /// This parameter configures the number of objects to buffer before calling the downstream Cmdlet
         /// </remarks>
         [Parameter]
-        [ValidateRangeAttribute(0, Int32.MaxValue)]
+        [ValidateRange(0, Int32.MaxValue)]
         [Alias("ob")]
         public int OutBuffer
         {
diff --git a/src/System.Management.Automation/engine/CompiledCommandParameter.cs b/src/System.Management.Automation/engine/CompiledCommandParameter.cs
index dc74210bda5..d2ca1aedd91 100644
--- a/src/System.Management.Automation/engine/CompiledCommandParameter.cs
+++ b/src/System.Management.Automation/engine/CompiledCommandParameter.cs
@@ -440,8 +440,7 @@ private void ProcessAttribute(
             ValidateArgumentsAttribute validateAttr = attribute as ValidateArgumentsAttribute;
             if (validateAttr != null)
             {
-                if (validationAttributes == null)
-                    validationAttributes = new Collection<ValidateArgumentsAttribute>();
+                validationAttributes ??= new Collection<ValidateArgumentsAttribute>();
                 validationAttributes.Add(validateAttr);
                 if ((attribute is ValidateNotNullAttribute) || (attribute is ValidateNotNullOrEmptyAttribute))
                 {
@@ -473,8 +472,7 @@ private void ProcessAttribute(
             ArgumentTransformationAttribute argumentAttr = attribute as ArgumentTransformationAttribute;
             if (argumentAttr != null)
             {
-                if (argTransformationAttributes == null)
-                    argTransformationAttributes = new Collection<ArgumentTransformationAttribute>();
+                argTransformationAttributes ??= new Collection<ArgumentTransformationAttribute>();
                 argTransformationAttributes.Add(argumentAttr);
                 return;
             }
@@ -649,7 +647,7 @@ internal ParameterCollectionTypeInformation(Type type)
             // to an ICollection<T> is via reflected calls to Add(T),
             // but the advantage over plain IList is that we can typecast the elements.
             Type interfaceICollection =
-                Array.Find(interfaces, i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ICollection<>));
+                Array.Find(interfaces, static i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ICollection<>));
             if (interfaceICollection != null)
             {
                 // We only deal with the first type for which ICollection<T> is implemented
diff --git a/src/System.Management.Automation/engine/CoreAdapter.cs b/src/System.Management.Automation/engine/CoreAdapter.cs
index 48077bbafd4..136083d04d7 100644
--- a/src/System.Management.Automation/engine/CoreAdapter.cs
+++ b/src/System.Management.Automation/engine/CoreAdapter.cs
@@ -38,7 +38,7 @@ namespace System.Management.Automation
     internal abstract class Adapter
     {
         /// <summary>
-        /// Tracer for this and derivate classes.
+        /// Tracer for this and derivative classes.
         /// </summary>
         [TraceSource("ETS", "Extended Type System")]
         protected static PSTraceSource tracer = PSTraceSource.GetTracer("ETS", "Extended Type System");
@@ -833,7 +833,7 @@ private static Type GetArgumentType(object argument, bool isByRefParameter)
                 return GetArgumentType(PSObject.Base(psref.Value), isByRefParameter: false);
             }
 
-            return argument.GetType();
+            return GetObjectType(argument, debase: false);
         }
 
         internal static ConversionRank GetArgumentConversionRank(object argument, Type parameterType, bool isByRef, bool allowCastingToByRefLikeType)
@@ -1157,8 +1157,8 @@ private static int CompareTypeSpecificity(OverloadCandidate candidate1, Overload
                 return 0;
             }
 
-            Type[] params1 = GetGenericMethodDefinitionIfPossible(candidate1.method.method).GetParameters().Select(p => p.ParameterType).ToArray();
-            Type[] params2 = GetGenericMethodDefinitionIfPossible(candidate2.method.method).GetParameters().Select(p => p.ParameterType).ToArray();
+            Type[] params1 = GetGenericMethodDefinitionIfPossible(candidate1.method.method).GetParameters().Select(static p => p.ParameterType).ToArray();
+            Type[] params2 = GetGenericMethodDefinitionIfPossible(candidate2.method.method).GetParameters().Select(static p => p.ParameterType).ToArray();
             return CompareTypeSpecificity(params1, params2);
         }
 
@@ -1177,7 +1177,7 @@ private static MethodBase GetGenericMethodDefinitionIfPossible(MethodBase method
         }
 
         [DebuggerDisplay("OverloadCandidate: {method.methodDefinition}")]
-        private class OverloadCandidate
+        private sealed class OverloadCandidate
         {
             internal MethodInformation method;
             internal ParameterInformation[] parameters;
@@ -1363,7 +1363,7 @@ internal static MethodInformation FindBestMethod(
                 Type targetType = methodInfo.method.DeclaringType;
                 if (targetType != invocationConstraints.MethodTargetType && targetType.IsSubclassOf(invocationConstraints.MethodTargetType))
                 {
-                    var parameterTypes = methodInfo.method.GetParameters().Select(parameter => parameter.ParameterType).ToArray();
+                    var parameterTypes = methodInfo.method.GetParameters().Select(static parameter => parameter.ParameterType).ToArray();
                     var targetTypeMethod = invocationConstraints.MethodTargetType.GetMethod(methodInfo.method.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, parameterTypes, null);
 
                     if (targetTypeMethod != null && (targetTypeMethod.IsPublic || targetTypeMethod.IsFamily || targetTypeMethod.IsFamilyOrAssembly))
@@ -1377,6 +1377,27 @@ internal static MethodInformation FindBestMethod(
             return methodInfo;
         }
 
+        private static Type[] ResolveGenericTypeParameters(object[] genericTypeParameters)
+        {
+            if (genericTypeParameters is null || genericTypeParameters.Length == 0)
+            {
+                return null;
+            }
+
+            Type[] genericParamTypes = new Type[genericTypeParameters.Length];
+            for (int i = 0; i < genericTypeParameters.Length; i++)
+            {
+                genericParamTypes[i] = genericTypeParameters[i] switch
+                {
+                    Type paramType => paramType,
+                    ITypeName paramTypeName => TypeOps.ResolveTypeName(paramTypeName, paramTypeName.Extent),
+                    _ => throw new ArgumentException("Unexpected value"),
+                };
+            }
+
+            return genericParamTypes;
+        }
+
         private static MethodInformation FindBestMethodImpl(
             MethodInformation[] methods,
             PSMethodInvocationConstraints invocationConstraints,
@@ -1394,59 +1415,84 @@ private static MethodInformation FindBestMethodImpl(
             // be turned into an array.
             // We also skip the optimization if the number of arguments and parameters is different
             // so we let the loop deal with possible optional parameters.
-            if ((methods.Length == 1) &&
-                (!methods[0].hasVarArgs) &&
-                (!methods[0].isGeneric) &&
-                (methods[0].method == null || !(methods[0].method.DeclaringType.IsGenericTypeDefinition)) &&
+            if (methods.Length == 1
+                && !methods[0].hasVarArgs
                 // generic methods need to be double checked in a loop below - generic methods can be rejected if type inference fails
-                (methods[0].parameters.Length == arguments.Length))
+                && !methods[0].isGeneric
+                && (methods[0].method is null || !methods[0].method.DeclaringType.IsGenericTypeDefinition)
+                && methods[0].parameters.Length == arguments.Length)
             {
                 return methods[0];
             }
 
-            Type[] argumentTypes = arguments.Select(EffectiveArgumentType).ToArray();
-            List<OverloadCandidate> candidates = new List<OverloadCandidate>();
+            Type[] genericParamTypes = ResolveGenericTypeParameters(invocationConstraints?.GenericTypeParameters);
+            var candidates = new List<OverloadCandidate>();
+
             for (int i = 0; i < methods.Length; i++)
             {
-                MethodInformation method = methods[i];
+                MethodInformation methodInfo = methods[i];
 
-                if (method.method != null && method.method.DeclaringType.IsGenericTypeDefinition)
+                if (methodInfo.method?.DeclaringType.IsGenericTypeDefinition == true
+                    || (!methodInfo.isGeneric && genericParamTypes is not null))
                 {
-                    continue; // skip methods defined by an *open* generic type
+                    // If method is defined by an *open* generic type, or
+                    // if generic parameters were provided and this method isn't generic, skip it.
+                    continue;
                 }
 
-                if (method.isGeneric)
+                if (methodInfo.isGeneric)
                 {
-                    Type[] argumentTypesForTypeInference = new Type[argumentTypes.Length];
-                    Array.Copy(argumentTypes, argumentTypesForTypeInference, argumentTypes.Length);
-                    if (invocationConstraints != null && invocationConstraints.ParameterTypes != null)
+                    if (genericParamTypes is not null)
+                    {
+                        try
+                        {
+                            // This cast is safe, because
+                            // 1. Only ConstructorInfo and MethodInfo derive from MethodBase
+                            // 2. ConstructorInfo.IsGenericMethod is always false
+                            var originalMethod = (MethodInfo)methodInfo.method;
+                            methodInfo = new MethodInformation(
+                                originalMethod.MakeGenericMethod(genericParamTypes),
+                                parametersToIgnore: 0);
+                        }
+                        catch (ArgumentException)
+                        {
+                            // Just skip this possibility if the generic type parameters can't be used to make
+                            // a valid generic method here.
+                            continue;
+                        }
+                    }
+                    else
                     {
-                        int parameterIndex = 0;
-                        foreach (Type typeConstraintFromCallSite in invocationConstraints.ParameterTypes)
+                        // Infer the generic method when generic parameter types are not specified.
+                        Type[] argumentTypes = arguments.Select(EffectiveArgumentType).ToArray();
+                        Type[] paramConstraintTypes = invocationConstraints?.ParameterTypes;
+
+                        if (paramConstraintTypes is not null)
                         {
-                            if (typeConstraintFromCallSite != null)
+                            for (int k = 0; k < paramConstraintTypes.Length; k++)
                             {
-                                argumentTypesForTypeInference[parameterIndex] = typeConstraintFromCallSite;
+                                if (paramConstraintTypes[k] is not null)
+                                {
+                                    argumentTypes[k] = paramConstraintTypes[k];
+                                }
                             }
-
-                            parameterIndex++;
                         }
-                    }
 
-                    method = TypeInference.Infer(method, argumentTypesForTypeInference);
-                    if (method == null)
-                    {
-                        // Skip generic methods for which we cannot infer type arguments
-                        continue;
+                        methodInfo = TypeInference.Infer(methodInfo, argumentTypes);
+                        if (methodInfo is null)
+                        {
+                            // Skip generic methods for which we cannot infer type arguments
+                            continue;
+                        }
                     }
                 }
 
-                if (!IsInvocationTargetConstraintSatisfied(method, invocationConstraints))
+                if (!IsInvocationTargetConstraintSatisfied(methodInfo, invocationConstraints))
                 {
                     continue;
                 }
 
-                ParameterInformation[] parameters = method.parameters;
+                ParameterInformation[] parameters = methodInfo.parameters;
                 if (arguments.Length != parameters.Length)
                 {
                     // Skip methods w/ an incorrect # of arguments.
@@ -1454,7 +1500,7 @@ private static MethodInformation FindBestMethodImpl(
                     if (arguments.Length > parameters.Length)
                     {
                         // If too many args,it's only OK if the method is varargs.
-                        if (!method.hasVarArgs)
+                        if (!methodInfo.hasVarArgs)
                         {
                             continue;
                         }
@@ -1462,12 +1508,12 @@ private static MethodInformation FindBestMethodImpl(
                     else
                     {
                         // Too few args, OK if there are optionals, or varargs with the param array omitted
-                        if (!method.hasOptional && (!method.hasVarArgs || (arguments.Length + 1) != parameters.Length))
+                        if (!methodInfo.hasOptional && (!methodInfo.hasVarArgs || (arguments.Length + 1) != parameters.Length))
                         {
                             continue;
                         }
 
-                        if (method.hasOptional)
+                        if (methodInfo.hasOptional)
                         {
                             // Count optionals.  This code is rarely hit, mainly when calling code in the
                             // assembly Microsoft.VisualBasic.  If it were more frequent, the optional count
@@ -1490,7 +1536,7 @@ private static MethodInformation FindBestMethodImpl(
                     }
                 }
 
-                OverloadCandidate candidate = new OverloadCandidate(method, arguments.Length);
+                OverloadCandidate candidate = new OverloadCandidate(methodInfo, arguments.Length);
                 for (int j = 0; candidate != null && j < parameters.Length; j++)
                 {
                     ParameterInformation parameter = parameters[j];
@@ -1581,7 +1627,7 @@ private static MethodInformation FindBestMethodImpl(
 
             if (candidates.Count == 0)
             {
-                if ((methods.Length > 0) && (methods.All(m => m.method != null && m.method.DeclaringType.IsGenericTypeDefinition && m.method.IsStatic)))
+                if (methods.Length > 0 && methods.All(static m => m.method != null && m.method.DeclaringType.IsGenericTypeDefinition && m.method.IsStatic))
                 {
                     errorId = "CannotInvokeStaticMethodOnUninstantiatedGenericType";
                     errorMsg = string.Format(
@@ -1590,6 +1636,16 @@ private static MethodInformation FindBestMethodImpl(
                         methods[0].method.DeclaringType.FullName);
                     return null;
                 }
+                else if (genericParamTypes is not null)
+                {
+                    errorId = "MethodCountCouldNotFindBestGeneric";
+                    errorMsg = string.Format(
+                        ExtendedTypeSystem.MethodGenericArgumentCountException,
+                        methods[0].method.Name,
+                        genericParamTypes.Length,
+                        arguments.Length);
+                    return null;
+                }
                 else
                 {
                     errorId = "MethodCountCouldNotFindBest";
@@ -1614,18 +1670,21 @@ private static MethodInformation FindBestMethodImpl(
 
         internal static Type EffectiveArgumentType(object arg)
         {
-            if (arg != null)
+            arg = PSObject.Base(arg);
+            if (arg is null)
+            {
+                return typeof(LanguagePrimitives.Null);
+            }
+
+            if (arg is object[] array && array.Length > 0)
             {
-                arg = PSObject.Base(arg);
-                object[] argAsArray = arg as object[];
-                if (argAsArray != null && argAsArray.Length > 0 && PSObject.Base(argAsArray[0]) != null)
+                Type firstType = GetObjectType(array[0], debase: true);
+                if (firstType is not null)
                 {
-                    Type firstType = PSObject.Base(argAsArray[0]).GetType();
                     bool allSameType = true;
-
-                    for (int j = 1; j < argAsArray.Length; ++j)
+                    for (int j = 1; j < array.Length; ++j)
                     {
-                        if (argAsArray[j] == null || firstType != PSObject.Base(argAsArray[j]).GetType())
+                        if (firstType != GetObjectType(array[j], debase: true))
                         {
                             allSameType = false;
                             break;
@@ -1637,13 +1696,19 @@ internal static Type EffectiveArgumentType(object arg)
                         return firstType.MakeArrayType();
                     }
                 }
-
-                return arg.GetType();
             }
-            else
+
+            return GetObjectType(arg, debase: false);
+        }
+
+        internal static Type GetObjectType(object obj, bool debase)
+        {
+            if (debase)
             {
-                return typeof(LanguagePrimitives.Null);
+                obj = PSObject.Base(obj);
             }
+
+            return obj == NullString.Value ? typeof(string) : obj?.GetType();
         }
 
         internal static void SetReferences(object[] arguments, MethodInformation methodInformation, object[] originalArguments)
@@ -1658,7 +1723,7 @@ internal static void SetReferences(object[] arguments, MethodInformation methodI
                     // It still might be an PSObject wrapping an PSReference
                     if (originalArgumentReference == null)
                     {
-                        if (!(originalArgument is PSObject originalArgumentObj))
+                        if (originalArgument is not PSObject originalArgumentObj)
                         {
                             continue;
                         }
@@ -1761,7 +1826,7 @@ internal static object[] GetMethodArgumentsBase(string methodName,
             }
 
             // We are going to put all the remaining arguments into an array
-            // and convert them to the propper type, if necessary to be the
+            // and convert them to the proper type, if necessary to be the
             // one argument for this last parameter
             int remainingArgumentCount = arguments.Length - parametersLength + 1;
             if (remainingArgumentCount == 1 && arguments[arguments.Length - 1] == null)
@@ -1813,7 +1878,7 @@ internal static object[] GetMethodArgumentsBase(string methodName,
         }
 
         /// <summary>
-        /// Auxiliary method in MethodInvoke to set newArguments[index] with the propper value.
+        /// Auxiliary method in MethodInvoke to set newArguments[index] with the proper value.
         /// </summary>
         /// <param name="methodName">Used for the MethodException that might be thrown.</param>
         /// <param name="arguments">The complete array of arguments.</param>
@@ -2165,7 +2230,7 @@ internal object Invoke(object target, object[] arguments)
             // be thrown when converting arguments to the ByRef-like parameter types.
             //
             // So when reaching here, we only care about (1) if the method return type is
-            // BeRef-like; (2) if it's a constrcutor of a ByRef-like type.
+            // BeRef-like; (2) if it's a constructor of a ByRef-like type.
 
             if (method is ConstructorInfo ctor)
             {
@@ -2202,10 +2267,7 @@ internal object Invoke(object target, object[] arguments)
 
             if (!_useReflection)
             {
-                if (_methodInvoker == null)
-                {
-                    _methodInvoker = GetMethodInvoker(methodInfo);
-                }
+                _methodInvoker ??= GetMethodInvoker(methodInfo);
 
                 if (_methodInvoker != null)
                 {
@@ -2616,7 +2678,7 @@ internal class MethodCacheEntry : CacheEntry
             /// </summary>
             internal Func<string, DotNetAdapter, object, DotNetAdapter.MethodCacheEntry, bool, bool, PSMethod> PSMethodCtor;
 
-            internal MethodCacheEntry(MethodBase[] methods)
+            internal MethodCacheEntry(IList<MethodBase> methods)
             {
                 methodInformationStructures = DotNetAdapter.GetMethodInformationArray(methods);
             }
@@ -2773,7 +2835,7 @@ internal PropertyCacheEntry(PropertyInfo property)
 
                 // Get the public or protected getter
                 MethodInfo propertyGetter = property.GetGetMethod(true);
-                if (propertyGetter != null && (propertyGetter.IsPublic || propertyGetter.IsFamily))
+                if (propertyGetter != null && (propertyGetter.IsPublic || propertyGetter.IsFamily || propertyGetter.IsFamilyOrAssembly))
                 {
                     this.isStatic = propertyGetter.IsStatic;
                     // Delegate is initialized later to avoid jit if it's not called
@@ -2785,7 +2847,7 @@ internal PropertyCacheEntry(PropertyInfo property)
 
                 // Get the public or protected setter
                 MethodInfo propertySetter = property.GetSetMethod(true);
-                if (propertySetter != null && (propertySetter.IsPublic || propertySetter.IsFamily))
+                if (propertySetter != null && (propertySetter.IsPublic || propertySetter.IsFamily || propertySetter.IsFamilyOrAssembly))
                 {
                     this.isStatic = propertySetter.IsStatic;
                 }
@@ -2991,10 +3053,7 @@ internal override bool IsHidden
             {
                 get
                 {
-                    if (_isHidden == null)
-                    {
-                        _isHidden = member.GetCustomAttributes(typeof(HiddenAttribute), inherit: false).Length != 0;
-                    }
+                    _isHidden ??= member.GetCustomAttributes(typeof(HiddenAttribute), inherit: false).Length != 0;
 
                     return _isHidden.Value;
                 }
@@ -3075,9 +3134,8 @@ private static void AddOverload(List<MethodBase> previousMethodEntry, MethodInfo
 
         private static void PopulateMethodReflectionTable(Type type, MethodInfo[] methods, CacheTable typeMethods)
         {
-            for (int i = 0; i < methods.Length; i++)
+            foreach (MethodInfo method in methods)
             {
-                MethodInfo method = methods[i];
                 if (method.DeclaringType == type)
                 {
                     string methodName = method.Name;
@@ -3102,7 +3160,7 @@ private static void PopulateMethodReflectionTable(Type type, MethodInfo[] method
 
         private static void PopulateMethodReflectionTable(ConstructorInfo[] ctors, CacheTable typeMethods)
         {
-            foreach (var ctor in ctors)
+            foreach (ConstructorInfo ctor in ctors)
             {
                 var previousMethodEntry = (List<MethodBase>)typeMethods["new"];
                 if (previousMethodEntry == null)
@@ -3127,26 +3185,14 @@ private static void PopulateMethodReflectionTable(ConstructorInfo[] ctors, Cache
         /// <param name="bindingFlags">BindingFlags to use.</param>
         private static void PopulateMethodReflectionTable(Type type, CacheTable typeMethods, BindingFlags bindingFlags)
         {
-            Type typeToGetMethod = type;
-
-            // Assemblies in CoreCLR might not allow reflection execution on their internal types. In such case, we walk up
-            // the derivation chain to find the first public parent, and use reflection methods on the public parent.
-            if (!TypeResolver.IsPublic(type) && DisallowPrivateReflection(type))
-            {
-                typeToGetMethod = GetFirstPublicParentType(type);
-            }
+            bool isStatic = bindingFlags.HasFlag(BindingFlags.Static);
 
-            // In CoreCLR, "GetFirstPublicParentType" may return null if 'type' is an interface
-            if (typeToGetMethod != null)
-            {
-                MethodInfo[] methods = typeToGetMethod.GetMethods(bindingFlags);
-                PopulateMethodReflectionTable(typeToGetMethod, methods, typeMethods);
-            }
+            MethodInfo[] methods = type.GetMethods(bindingFlags);
+            PopulateMethodReflectionTable(type, methods, typeMethods);
 
             Type[] interfaces = type.GetInterfaces();
-            for (int interfaceIndex = 0; interfaceIndex < interfaces.Length; interfaceIndex++)
+            foreach (Type interfaceType in interfaces)
             {
-                var interfaceType = interfaces[interfaceIndex];
                 if (!TypeResolver.IsPublic(interfaceType))
                 {
                     continue;
@@ -3154,41 +3200,50 @@ private static void PopulateMethodReflectionTable(Type type, CacheTable typeMeth
 
                 if (interfaceType.IsGenericType && type.IsArray)
                 {
-                    continue; // GetInterfaceMap is not supported in this scenario... not sure if we need to do something special here...
+                    // A bit of background: Array doesn't directly support any generic interface at all. Instead, a stub class
+                    // named 'SZArrayHelper' provides these generic interfaces at runtime for zero-based one-dimension arrays.
+                    // This is why '[object[]].GetInterfaceMap([ICollection[object]])' throws 'ArgumentException'.
+                    // (see https://stackoverflow.com/a/31883327)
+                    //
+                    // We had always been skipping generic interfaces for array types because 'GetInterfaceMap' doesn't work
+                    // for it. Today, even though we don't use 'GetInterfaceMap' anymore, the same code is kept here because
+                    // methods from generic interfaces of an array type could cause ambiguity in method overloads resolution.
+                    // For example, "$objs = @(1,2,3,4); $objs.Contains(1)" would fail because there would be 2 overloads of
+                    // the 'Contains' methods which are equally good matches for the call.
+                    //    bool IList.Contains(System.Object value)
+                    //    bool ICollection[Object].Contains(System.Object item)
+                    continue;
                 }
 
-                MethodInfo[] methods;
-                if (type.IsInterface)
-                {
-                    methods = interfaceType.GetMethods(bindingFlags);
-                }
-                else
-                {
-                    InterfaceMapping interfaceMapping = type.GetInterfaceMap(interfaceType);
-                    methods = interfaceMapping.InterfaceMethods;
-                }
+                methods = interfaceType.GetMethods(bindingFlags);
 
-                for (int methodIndex = 0; methodIndex < methods.Length; methodIndex++)
+                foreach (MethodInfo interfaceMethod in methods)
                 {
-                    MethodInfo interfaceMethodDefinition = methods[methodIndex];
-
-                    if ((!interfaceMethodDefinition.IsPublic) ||
-                        (interfaceMethodDefinition.IsStatic != ((BindingFlags.Static & bindingFlags) != 0)))
+                    if (isStatic && interfaceMethod.IsVirtual)
                     {
+                        // Ignore static virtual/abstract methods on an interface because:
+                        //  1. if it's implicitly implemented, which will be mostly the case, then the corresponding
+                        //     methods were already retrieved from the 'type.GetMethods' step above;
+                        //  2. if it's explicitly implemented, we cannot call 'Invoke(null, args)' on the static method,
+                        //     but have to use 'type.GetInterfaceMap(interfaceType)' to get the corresponding target
+                        //     methods, and call 'Invoke(null, args)' on them. The target methods will be non-public
+                        //     in this case, which we always ignore.
+                        //  3. The recommendation from .NET team is to ignore the static virtuals on interfaces,
+                        //     especially given that the APIs may change in .NET 7.
                         continue;
                     }
 
-                    var previousMethodEntry = (List<MethodBase>)typeMethods[interfaceMethodDefinition.Name];
+                    var previousMethodEntry = (List<MethodBase>)typeMethods[interfaceMethod.Name];
                     if (previousMethodEntry == null)
                     {
-                        var methodEntry = new List<MethodBase> { interfaceMethodDefinition };
-                        typeMethods.Add(interfaceMethodDefinition.Name, methodEntry);
+                        var methodEntry = new List<MethodBase> { interfaceMethod };
+                        typeMethods.Add(interfaceMethod.Name, methodEntry);
                     }
                     else
                     {
-                        if (!previousMethodEntry.Contains(interfaceMethodDefinition))
+                        if (!previousMethodEntry.Contains(interfaceMethod))
                         {
-                            previousMethodEntry.Add(interfaceMethodDefinition);
+                            previousMethodEntry.Add(interfaceMethod);
                         }
                     }
                 }
@@ -3211,7 +3266,7 @@ private static void PopulateMethodReflectionTable(Type type, CacheTable typeMeth
             for (int i = 0; i < typeMethods.memberCollection.Count; i++)
             {
                 typeMethods.memberCollection[i] =
-                    new MethodCacheEntry(((List<MethodBase>)typeMethods.memberCollection[i]).ToArray());
+                    new MethodCacheEntry((List<MethodBase>)typeMethods.memberCollection[i]);
             }
         }
 
@@ -3224,38 +3279,24 @@ private static void PopulateMethodReflectionTable(Type type, CacheTable typeMeth
         /// <param name="bindingFlags">BindingFlags to use.</param>
         private static void PopulateEventReflectionTable(Type type, Dictionary<string, EventCacheEntry> typeEvents, BindingFlags bindingFlags)
         {
-            // Assemblies in CoreCLR might not allow reflection execution on their internal types. In such case, we walk up
-            // the derivation chain to find the first public parent, and use reflection events on the public parent.
-            if (!TypeResolver.IsPublic(type) && DisallowPrivateReflection(type))
-            {
-                type = GetFirstPublicParentType(type);
-            }
+            EventInfo[] events = type.GetEvents(bindingFlags);
+            var tempTable = new Dictionary<string, List<EventInfo>>(StringComparer.OrdinalIgnoreCase);
 
-            // In CoreCLR, "GetFirstPublicParentType" may return null if 'type' is an interface
-            if (type != null)
+            foreach (EventInfo typeEvent in events)
             {
-                EventInfo[] events = type.GetEvents(bindingFlags);
-                var tempTable = new Dictionary<string, List<EventInfo>>(StringComparer.OrdinalIgnoreCase);
-                for (int i = 0; i < events.Length; i++)
+                string eventName = typeEvent.Name;
+                if (!tempTable.TryGetValue(eventName, out List<EventInfo> entryList))
                 {
-                    var typeEvent = events[i];
-                    string eventName = typeEvent.Name;
-                    List<EventInfo> previousEntry;
-                    if (!tempTable.TryGetValue(eventName, out previousEntry))
-                    {
-                        var eventEntry = new List<EventInfo> { typeEvent };
-                        tempTable.Add(eventName, eventEntry);
-                    }
-                    else
-                    {
-                        previousEntry.Add(typeEvent);
-                    }
+                    entryList = new List<EventInfo>();
+                    tempTable.Add(eventName, entryList);
                 }
 
-                foreach (var entry in tempTable)
-                {
-                    typeEvents.Add(entry.Key, new EventCacheEntry(entry.Value.ToArray()));
-                }
+                entryList.Add(typeEvent);
+            }
+
+            foreach (KeyValuePair<string, List<EventInfo>> entry in tempTable)
+            {
+                typeEvents.Add(entry.Key, new EventCacheEntry(entry.Value.ToArray()));
             }
         }
 
@@ -3270,9 +3311,8 @@ private static bool PropertyAlreadyPresent(List<PropertyInfo> previousProperties
             ParameterInfo[] propertyParameters = property.GetIndexParameters();
             int propertyIndexLength = propertyParameters.Length;
 
-            for (int propertyIndex = 0; propertyIndex < previousProperties.Count; propertyIndex++)
+            foreach (PropertyInfo previousProperty in previousProperties)
             {
-                var previousProperty = previousProperties[propertyIndex];
                 ParameterInfo[] previousParameters = previousProperty.GetIndexParameters();
                 if (previousParameters.Length == propertyIndexLength)
                 {
@@ -3308,79 +3348,81 @@ private static bool PropertyAlreadyPresent(List<PropertyInfo> previousProperties
         /// <param name="bindingFlags">BindingFlags to use.</param>
         private static void PopulatePropertyReflectionTable(Type type, CacheTable typeProperties, BindingFlags bindingFlags)
         {
+            bool isStatic = bindingFlags.HasFlag(BindingFlags.Static);
             var tempTable = new Dictionary<string, List<PropertyInfo>>(StringComparer.OrdinalIgnoreCase);
-            Type typeToGetPropertyAndField = type;
-
-            // Assemblies in CoreCLR might not allow reflection execution on their internal types. In such case, we walk up the
-            // derivation chain to find the first public parent, and use reflection properties/fields on the public parent.
-            if (!TypeResolver.IsPublic(type) && DisallowPrivateReflection(type))
-            {
-                typeToGetPropertyAndField = GetFirstPublicParentType(type);
-            }
 
-            // In CoreCLR, "GetFirstPublicParentType" may return null if 'type' is an interface
-            PropertyInfo[] properties;
-            if (typeToGetPropertyAndField != null)
+            PropertyInfo[] properties = type.GetProperties(bindingFlags);
+            foreach (PropertyInfo property in properties)
             {
-                properties = typeToGetPropertyAndField.GetProperties(bindingFlags);
-                for (int i = 0; i < properties.Length; i++)
-                {
-                    PopulateSingleProperty(type, properties[i], tempTable, properties[i].Name);
-                }
+                PopulateSingleProperty(type, property, tempTable, property.Name);
             }
 
             Type[] interfaces = type.GetInterfaces();
-            for (int interfaceIndex = 0; interfaceIndex < interfaces.Length; interfaceIndex++)
+            foreach (Type interfaceType in interfaces)
             {
-                Type interfaceType = interfaces[interfaceIndex];
                 if (!TypeResolver.IsPublic(interfaceType))
                 {
                     continue;
                 }
 
                 properties = interfaceType.GetProperties(bindingFlags);
-                for (int propertyIndex = 0; propertyIndex < properties.Length; propertyIndex++)
+                foreach (PropertyInfo property in properties)
                 {
-                    PopulateSingleProperty(type, properties[propertyIndex], tempTable, properties[propertyIndex].Name);
+                    if (isStatic &&
+                        (property.GetMethod?.IsVirtual == true || property.SetMethod?.IsVirtual == true))
+                    {
+                        // Ignore static virtual/abstract properties on an interface because:
+                        //  1. if it's implicitly implemented, which will be mostly the case, then the corresponding
+                        //     properties were already retrieved from the 'type.GetProperties' step above;
+                        //  2. if it's explicitly implemented, we cannot call 'GetValue(null)' on the static property,
+                        //     but have to use 'type.GetInterfaceMap(interfaceType)' to get the corresponding target
+                        //     get/set accessor methods, and call 'Invoke(null, args)' on them. The target methods will
+                        //     be non-public in this case, which we always ignore.
+                        //  3. The recommendation from .NET team is to ignore the static virtuals on interfaces,
+                        //     especially given that the APIs may change in .NET 7.
+                        continue;
+                    }
+
+                    PopulateSingleProperty(type, property, tempTable, property.Name);
                 }
             }
 
-            foreach (var pairs in tempTable)
+            foreach (KeyValuePair<string, List<PropertyInfo>> entry in tempTable)
             {
-                var propertiesList = pairs.Value;
+                List<PropertyInfo> propertiesList = entry.Value;
                 PropertyInfo firstProperty = propertiesList[0];
                 if ((propertiesList.Count > 1) || (firstProperty.GetIndexParameters().Length != 0))
                 {
-                    typeProperties.Add(pairs.Key, new ParameterizedPropertyCacheEntry(propertiesList));
+                    typeProperties.Add(entry.Key, new ParameterizedPropertyCacheEntry(propertiesList));
                 }
                 else
                 {
-                    typeProperties.Add(pairs.Key, new PropertyCacheEntry(firstProperty));
+                    typeProperties.Add(entry.Key, new PropertyCacheEntry(firstProperty));
                 }
             }
 
-            // In CoreCLR, "GetFirstPublicParentType" may return null if 'type' is an interface
-            if (typeToGetPropertyAndField != null)
+            FieldInfo[] fields = type.GetFields(bindingFlags);
+            foreach (FieldInfo field in fields)
             {
-                FieldInfo[] fields = typeToGetPropertyAndField.GetFields(bindingFlags);
-                for (int i = 0; i < fields.Length; i++)
+                string fieldName = field.Name;
+                var previousMember = (PropertyCacheEntry)typeProperties[fieldName];
+                if (previousMember == null)
                 {
-                    FieldInfo field = fields[i];
-                    string fieldName = field.Name;
-                    var previousMember = (PropertyCacheEntry)typeProperties[fieldName];
-                    if (previousMember == null)
-                    {
-                        typeProperties.Add(fieldName, new PropertyCacheEntry(field));
-                    }
-                    else
-                    {
-                        // A property/field declared with new in a derived class might appear twice
-                        if (!string.Equals(previousMember.member.Name, fieldName))
-                        {
-                            throw new ExtendedTypeSystemException("NotACLSComplaintField", null,
-                                ExtendedTypeSystem.NotAClsCompliantFieldProperty, fieldName, type.FullName, previousMember.member.Name);
-                        }
-                    }
+                    typeProperties.Add(fieldName, new PropertyCacheEntry(field));
+                }
+                else if (!string.Equals(previousMember.member.Name, fieldName))
+                {
+                    // A property/field declared with 'new' in a derived class might appear twice, and it's OK to ignore
+                    // the second property/field in that case.
+                    // However, if the names of two properties/fields are different only in letter casing, then it's not
+                    // CLS complaint and we throw an exception.
+                    throw new ExtendedTypeSystemException(
+                        "NotACLSComplaintField",
+                        innerException: null,
+                        ExtendedTypeSystem.NotAClsCompliantFieldProperty,
+                        fieldName,
+                        type.FullName,
+                        previousMember.member.Name);
                 }
             }
         }
@@ -3411,66 +3453,6 @@ private static void PopulateSingleProperty(Type type, PropertyInfo property, Dic
             }
         }
 
-        #region Handle_Internal_Type_Reflection_In_CoreCLR
-
-        /// <summary>
-        /// The dictionary cache about if an assembly supports reflection execution on its internal types.
-        /// </summary>
-        private static readonly ConcurrentDictionary<string, bool> s_disallowReflectionCache =
-            new ConcurrentDictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
-
-        /// <summary>
-        /// Check if the type is defined in an assembly that disallows reflection execution on internal types.
-        ///  - .NET Framework assemblies don't support reflection execution on their internal types.
-        /// </summary>
-        internal static bool DisallowPrivateReflection(Type type)
-        {
-            bool disallowReflection = false;
-            Assembly assembly = type.Assembly;
-            if (s_disallowReflectionCache.TryGetValue(assembly.FullName, out disallowReflection))
-            {
-                return disallowReflection;
-            }
-
-            var productAttribute = assembly.GetCustomAttribute<AssemblyProductAttribute>();
-            if (productAttribute != null && string.Equals(productAttribute.Product, "Microsoft® .NET Framework", StringComparison.OrdinalIgnoreCase))
-            {
-                disallowReflection = true;
-            }
-            else
-            {
-                // Check for 'DisablePrivateReflectionAttribute'. It's applied at the assembly level, and allow an assembly to opt-out of private/internal reflection.
-                var disablePrivateReflectionAttribute = assembly.GetCustomAttribute<System.Runtime.CompilerServices.DisablePrivateReflectionAttribute>();
-                disallowReflection = disablePrivateReflectionAttribute != null;
-            }
-
-            s_disallowReflectionCache.TryAdd(assembly.FullName, disallowReflection);
-            return disallowReflection;
-        }
-
-        /// <summary>
-        /// Walk up the derivation chain to find the first public parent type.
-        /// </summary>
-        internal static Type GetFirstPublicParentType(Type type)
-        {
-            Dbg.Assert(!TypeResolver.IsPublic(type), "type should not be public.");
-            Type parent = type.BaseType;
-            while (parent != null)
-            {
-                if (parent.IsPublic)
-                {
-                    return parent;
-                }
-
-                parent = parent.BaseType;
-            }
-
-            // Return null when type is an interface
-            return null;
-        }
-
-        #endregion Handle_Internal_Type_Reflection_In_CoreCLR
-
         /// <summary>
         /// Called from GetProperty and GetProperties to populate the
         /// typeTable with all public properties and fields
@@ -3878,7 +3860,7 @@ internal void AddAllDynamicMembers<T>(object obj, PSMemberInfoInternalCollection
 
         private static bool PropertyIsStatic(PSProperty property)
         {
-            if (!(property.adapterData is PropertyCacheEntry entry))
+            if (property.adapterData is not PropertyCacheEntry entry)
             {
                 return false;
             }
@@ -3886,6 +3868,33 @@ private static bool PropertyIsStatic(PSProperty property)
             return entry.isStatic;
         }
 
+        /// <summary>
+        /// Get the string representation of the default value of passed-in parameter.
+        /// </summary>
+        /// <param name="parameterInfo">ParameterInfo containing the parameter's default value.</param>
+        /// <returns>String representation of the parameter's default value.</returns>
+        private static string GetDefaultValueStringRepresentation(ParameterInfo parameterInfo)
+        {
+            var parameterType = parameterInfo.ParameterType;
+            var parameterDefaultValue = parameterInfo.DefaultValue;
+
+            if (parameterDefaultValue == null)
+            {
+                return (parameterType.IsValueType || parameterType.IsGenericMethodParameter)
+                    ? "default"
+                    : "null";
+            }
+
+            if (parameterType.IsEnum)
+            {
+                return string.Create(CultureInfo.InvariantCulture, $"{parameterType}.{parameterDefaultValue}");
+            }
+
+            return (parameterDefaultValue is string)
+                ? string.Create(CultureInfo.InvariantCulture, $"\"{parameterDefaultValue}\"")
+                : parameterDefaultValue.ToString();
+        }
+
         #endregion auxiliary methods and classes
 
         #region virtual
@@ -3911,11 +3920,11 @@ protected override ConsolidatedString GetInternedTypeNameHierarchy(object obj)
         /// <summary>
         /// Get the .NET member based on the given member name.
         /// </summary>
-        /// <remark>
+        /// <remarks>
         /// Dynamic members of an object that implements IDynamicMetaObjectProvider are not included because
         ///   1. Dynamic members cannot be invoked via reflection;
         ///   2. Access to dynamic members is handled by the DLR for free.
-        /// </remark>
+        /// </remarks>
         /// <param name="obj">Object to retrieve the PSMemberInfo from.</param>
         /// <param name="memberName">Name of the member to be retrieved.</param>
         /// <returns>
@@ -3948,10 +3957,10 @@ protected override T GetFirstMemberOrDefault<T>(object obj, MemberNamePredicate
         /// In the case of the DirectoryEntry adapter, this could be a cache of the objectClass
         /// to the properties available in it.
         /// </summary>
-        /// <remark>
+        /// <remarks>
         /// Dynamic members of an object that implements IDynamicMetaObjectProvider are included because
         /// we want to view the dynamic members via 'Get-Member' and be able to auto-complete those members.
-        /// </remark>
+        /// </remarks>
         /// <param name="obj">Object to get all the member information from.</param>
         /// <returns>All members in obj.</returns>
         protected override PSMemberInfoInternalCollection<T> GetMembers<T>(object obj)
@@ -4284,11 +4293,10 @@ internal static object AuxiliaryMethodInvoke(object target, object[] arguments,
         /// </summary>
         /// <param name="methods">The methods to be converted.</param>
         /// <returns>The MethodInformation[] corresponding to methods.</returns>
-        internal static MethodInformation[] GetMethodInformationArray(MethodBase[] methods)
+        internal static MethodInformation[] GetMethodInformationArray(IList<MethodBase> methods)
         {
-            int methodCount = methods.Length;
-            MethodInformation[] returnValue = new MethodInformation[methodCount];
-            for (int i = 0; i < methods.Length; i++)
+            var returnValue = new MethodInformation[methods.Count];
+            for (int i = 0; i < methods.Count; i++)
             {
                 returnValue[i] = new MethodInformation(methods[i], 0);
             }
@@ -4357,7 +4365,7 @@ private static object InvokeResolvedConstructor(MethodInformation bestMethod, ob
 
         /// <summary>
         /// This is a flavor of MethodInvokeDotNet to deal with a peculiarity of property setters:
-        /// Tthe setValue is always the last parameter. This enables a parameter after a varargs or optional
+        /// The setValue is always the last parameter. This enables a parameter after a varargs or optional
         /// parameters and GetBestMethodAndArguments is not prepared for that.
         /// This method disregards the last parameter in its call to GetBestMethodAndArguments used in this case
         /// more for its "Arguments" side than for its "BestMethod" side, since there is only one method.
@@ -4433,7 +4441,7 @@ internal static string GetMethodInfoOverloadDefinition(string memberName, Method
             }
 
             builder.Append(memberName ?? methodEntry.Name);
-            if (methodEntry.IsGenericMethodDefinition)
+            if (methodEntry.IsGenericMethodDefinition || methodEntry.IsGenericMethod)
             {
                 builder.Append('[');
 
@@ -4479,6 +4487,13 @@ internal static string GetMethodInfoOverloadDefinition(string memberName, Method
                     builder.Append(ToStringCodeMethods.Type(parameterType));
                     builder.Append(' ');
                     builder.Append(parameter.Name);
+
+                    if (parameter.HasDefaultValue)
+                    {
+                        builder.Append(" = ");
+                        builder.Append(GetDefaultValueStringRepresentation(parameter));
+                    }
+
                     builder.Append(", ");
                 }
 
@@ -4533,7 +4548,7 @@ protected override Collection<string> MethodDefinitions(PSMethod method)
             MethodCacheEntry methodEntry = (MethodCacheEntry)method.adapterData;
             IList<string> uniqueValues = methodEntry
                 .methodInformationStructures
-                .Select(m => m.methodDefinition)
+                .Select(static m => m.methodDefinition)
                 .Distinct(StringComparer.Ordinal)
                 .ToList();
             return new Collection<string>(uniqueValues);
@@ -4750,6 +4765,7 @@ protected override T GetFirstMemberOrDefault<T>(object obj, MemberNamePredicate
 
     #endregion
 
+#if !UNIX
     /// <summary>
     /// Used only to add a COM style type name to a COM interop .NET type.
     /// </summary>
@@ -4780,6 +4796,8 @@ protected override ConsolidatedString GetInternedTypeNameHierarchy(object obj)
             return new ConsolidatedString(GetTypeNameHierarchy(obj), interned: true);
         }
     }
+#endif
+
     /// <summary>
     /// Adapter used for GetMember and GetMembers only.
     /// All other methods will not be called.
@@ -5422,7 +5440,7 @@ private static object GetNodeObject(XmlNode node)
             }
 
             XmlNodeList nodeChildren = node.ChildNodes;
-            // nodeChildren will not be null as we already verified iff the node has children.
+            // nodeChildren will not be null as we already verified that the node has children.
             if ((nodeChildren.Count == 1) && (nodeChildren[0].NodeType == XmlNodeType.Text))
             {
                 return node.InnerText;
@@ -5903,7 +5921,7 @@ private static MethodInfo Infer(MethodInfo genericMethod, Type[] typesOfMethodAr
             }
 
             Type[] typeParameters = genericMethod.GetGenericArguments();
-            Type[] typesOfMethodParameters = genericMethod.GetParameters().Select(p => p.ParameterType).ToArray();
+            Type[] typesOfMethodParameters = genericMethod.GetParameters().Select(static p => p.ParameterType).ToArray();
 
             MethodInfo inferredMethod = Infer(genericMethod, typeParameters, typesOfMethodParameters, typesOfMethodArguments);
 
@@ -5944,7 +5962,7 @@ private static MethodInfo Infer(MethodInfo genericMethod, ICollection<Type> type
                 {
                     s_tracer.WriteLine(
                         "Types of method arguments: {0}",
-                        string.Join(", ", typesOfMethodArguments.Select(t => t.ToString()).ToArray()));
+                        string.Join(", ", typesOfMethodArguments.Select(static t => t.ToString()).ToArray()));
                 }
 
                 var typeInference = new TypeInference(typeParameters);
@@ -5954,7 +5972,7 @@ private static MethodInfo Infer(MethodInfo genericMethod, ICollection<Type> type
                 }
 
                 IEnumerable<Type> inferredTypeParameters = typeParameters.Select(typeInference.GetInferredType);
-                if (inferredTypeParameters.Any(inferredType => inferredType == null))
+                if (inferredTypeParameters.Any(static inferredType => inferredType == null))
                 {
                     return null;
                 }
@@ -5962,7 +5980,7 @@ private static MethodInfo Infer(MethodInfo genericMethod, ICollection<Type> type
                 try
                 {
                     MethodInfo instantiatedMethod = genericMethod.MakeGenericMethod(inferredTypeParameters.ToArray());
-                    s_tracer.WriteLine("Inference succesful: {0}", instantiatedMethod);
+                    s_tracer.WriteLine("Inference successful: {0}", instantiatedMethod);
                     return instantiatedMethod;
                 }
                 catch (ArgumentException e)
@@ -5990,7 +6008,7 @@ internal TypeInference(ICollection<Type> typeParameters)
 #endif
             _typeParameterIndexToSetOfInferenceCandidates = new HashSet<Type>[typeParameters.Count];
 #if DEBUG
-            List<int> listOfTypeParameterPositions = typeParameters.Select(t => t.GenericParameterPosition).ToList();
+            List<int> listOfTypeParameterPositions = typeParameters.Select(static t => t.GenericParameterPosition).ToList();
             listOfTypeParameterPositions.Sort();
             Dbg.Assert(
                 listOfTypeParameterPositions.Count == listOfTypeParameterPositions.Distinct().Count(),
@@ -6022,9 +6040,9 @@ internal Type GetInferredType(Type typeParameter)
             ICollection<Type> inferenceCandidates =
                 _typeParameterIndexToSetOfInferenceCandidates[typeParameter.GenericParameterPosition];
 
-            if ((inferenceCandidates != null) && (inferenceCandidates.Any(t => t == typeof(LanguagePrimitives.Null))))
+            if ((inferenceCandidates != null) && (inferenceCandidates.Any(static t => t == typeof(LanguagePrimitives.Null))))
             {
-                Type firstValueType = inferenceCandidates.FirstOrDefault(t => t.IsValueType);
+                Type firstValueType = inferenceCandidates.FirstOrDefault(static t => t.IsValueType);
                 if (firstValueType != null)
                 {
                     s_tracer.WriteLine("Cannot reconcile null and {0} (a value type)", firstValueType);
@@ -6033,7 +6051,7 @@ internal Type GetInferredType(Type typeParameter)
                 }
                 else
                 {
-                    inferenceCandidates = inferenceCandidates.Where(t => t != typeof(LanguagePrimitives.Null)).ToList();
+                    inferenceCandidates = inferenceCandidates.Where(static t => t != typeof(LanguagePrimitives.Null)).ToList();
                     if (inferenceCandidates.Count == 0)
                     {
                         inferenceCandidates = null;
diff --git a/src/System.Management.Automation/engine/Credential.cs b/src/System.Management.Automation/engine/Credential.cs
index 86557c922c6..c921b9a084d 100644
--- a/src/System.Management.Automation/engine/Credential.cs
+++ b/src/System.Management.Automation/engine/Credential.cs
@@ -10,13 +10,10 @@
 using System.Security.Cryptography;
 using Microsoft.PowerShell;
 
-// FxCop suppressions for resource strings:
-[module: SuppressMessage("Microsoft.Naming", "CA1703:ResourceStringsShouldBeSpelledCorrectly", Scope = "resource", Target = "Credential.resources", MessageId = "Cred")]
-
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Defines the valid types of MSH credentials.  Used by PromptForCredential calls.
+    /// Defines the valid types of PSCredentials.  Used by PromptForCredential calls.
     /// </summary>
     [Flags]
     public enum PSCredentialTypes
@@ -85,7 +82,7 @@ public enum PSCredentialUIOptions
     /// Offers a centralized way to manage usernames, passwords, and
     /// credentials.
     /// </summary>
-    [Serializable()]
+    [Serializable]
     public sealed class PSCredential : ISerializable
     {
         /// <summary>
diff --git a/src/System.Management.Automation/engine/DataStoreAdapter.cs b/src/System.Management.Automation/engine/DataStoreAdapter.cs
index 9bf7611d7ff..07c7cef4d01 100644
--- a/src/System.Management.Automation/engine/DataStoreAdapter.cs
+++ b/src/System.Management.Automation/engine/DataStoreAdapter.cs
@@ -26,7 +26,7 @@ public class PSDriveInfo : IComparable
         /// using "SessionState" as the category.
         /// This is the same category as the SessionState tracer class.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "PSDriveInfo",
              "The namespace navigation tracer")]
         private static readonly Dbg.PSTraceSource s_tracer =
@@ -289,7 +289,7 @@ protected PSDriveInfo(PSDriveInfo driveInfo)
         }
 
         /// <summary>
-        /// Constructs a drive that maps an MSH Path in
+        /// Constructs a drive that maps a PowerShell Path in
         /// the shell to a Cmdlet Provider.
         /// </summary>
         /// <param name="name">
@@ -366,7 +366,7 @@ public PSDriveInfo(
         }
 
         /// <summary>
-        /// Constructs a drive that maps an MSH Path in
+        /// Constructs a drive that maps a PowerShell Path in
         /// the shell to a Cmdlet Provider.
         /// </summary>
         /// <param name="name">
@@ -408,7 +408,7 @@ public PSDriveInfo(
         }
 
         /// <summary>
-        /// Constructs a drive that maps an MSH Path in
+        /// Constructs a drive that maps a PowerShell Path in
         /// the shell to a Cmdlet Provider.
         /// </summary>
         /// <param name="name">
diff --git a/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs b/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs
index 69202e6d20e..3ea2fd00fff 100644
--- a/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs
+++ b/src/System.Management.Automation/engine/DataStoreAdapterProvider.cs
@@ -201,7 +201,7 @@ public Provider.ProviderCapabilities Capabilities
         /// </summary>
         /// <remarks>
         /// The location can be either a fully qualified provider path
-        /// or an Msh path. This is the location that is substituted for the ~.
+        /// or a PowerShell path. This is the location that is substituted for the ~.
         /// </remarks>
         public string Home { get; set; }
 
@@ -368,7 +368,7 @@ internal ProviderInfo(
         /// The description of the provider.
         /// </param>
         /// <param name="home">
-        /// The home path for the provider. This must be an MSH path.
+        /// The home path for the provider. This must be a PowerShell path.
         /// </param>
         /// <param name="helpFile">
         /// The help file for the provider.
diff --git a/src/System.Management.Automation/engine/DefaultCommandRuntime.cs b/src/System.Management.Automation/engine/DefaultCommandRuntime.cs
index d45abaaffbc..746d809d831 100644
--- a/src/System.Management.Automation/engine/DefaultCommandRuntime.cs
+++ b/src/System.Management.Automation/engine/DefaultCommandRuntime.cs
@@ -21,8 +21,7 @@ internal class DefaultCommandRuntime : ICommandRuntime2
         /// </summary>
         public DefaultCommandRuntime(List<object> outputList)
         {
-            if (outputList == null)
-                throw new System.ArgumentNullException(nameof(outputList));
+            ArgumentNullException.ThrowIfNull(outputList);
 
             _output = outputList;
         }
@@ -65,7 +64,7 @@ public void WriteObject(object sendToPipeline)
 
         /// <summary>
         /// Default implementation of the enumerated WriteObject. Either way, the
-        /// objects are added to the list passed to this object in the constuctor.
+        /// objects are added to the list passed to this object in the constructor.
         /// </summary>
         /// <param name="sendToPipeline">Object to write.</param>
         /// <param name="enumerateCollection">If true, the collection is enumerated, otherwise
@@ -230,6 +229,7 @@ public PSTransactionContext CurrentPSTransaction
         /// if it exists, otherwise throw an invalid operation exception.
         /// </summary>
         /// <param name="errorRecord">The error record to throw.</param>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         public void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             if (errorRecord.Exception != null)
diff --git a/src/System.Management.Automation/engine/DriveInterfaces.cs b/src/System.Management.Automation/engine/DriveInterfaces.cs
index 299faa8b76e..c93e47d8c1c 100644
--- a/src/System.Management.Automation/engine/DriveInterfaces.cs
+++ b/src/System.Management.Automation/engine/DriveInterfaces.cs
@@ -70,7 +70,7 @@ public PSDriveInfo Current
         #region New
 
         /// <summary>
-        /// Creates a new MSH drive in session state.
+        /// Creates a new PSDrive in session state.
         /// </summary>
         /// <param name="drive">
         /// The drive to be created.
diff --git a/src/System.Management.Automation/engine/EngineIntrinsics.cs b/src/System.Management.Automation/engine/EngineIntrinsics.cs
index a492a5215fc..e2a63a527a9 100644
--- a/src/System.Management.Automation/engine/EngineIntrinsics.cs
+++ b/src/System.Management.Automation/engine/EngineIntrinsics.cs
@@ -35,10 +35,7 @@ private EngineIntrinsics()
         /// </exception>
         internal EngineIntrinsics(ExecutionContext context)
         {
-            if (context == null)
-            {
-                throw new ArgumentNullException(nameof(context));
-            }
+            ArgumentNullException.ThrowIfNull(context);
 
             _context = context;
             _host = context.EngineHostInterface;
diff --git a/src/System.Management.Automation/engine/ErrorPackage.cs b/src/System.Management.Automation/engine/ErrorPackage.cs
index 7d6a1f2759f..6dfaf34fbec 100644
--- a/src/System.Management.Automation/engine/ErrorPackage.cs
+++ b/src/System.Management.Automation/engine/ErrorPackage.cs
@@ -18,7 +18,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Errors reported by Monad will be in one of these categories.
+    /// Errors reported by PowerShell will be in one of these categories.
     /// </summary>
     /// <remarks>
     /// Do not specify ErrorCategory.NotSpecified when creating an
@@ -28,13 +28,15 @@ namespace System.Management.Automation
     public enum ErrorCategory
     {
         /// <summary>
+        /// <para>
         /// No error category is specified, or the error category is invalid.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// Do not specify ErrorCategory.NotSpecified when creating an
         /// <see cref="System.Management.Automation.ErrorRecord"/>.
         /// Choose the best match from among the other values.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         NotSpecified = 0,
 
         /// <summary>
@@ -132,14 +134,16 @@ public enum ErrorCategory
         WriteError = 23,
 
         /// <summary>
-        /// A non-Monad command reported an error to its STDERR pipe.
-        /// </summary>
-        /// <remarks>
+        /// <para>
+        /// A native command reported an error to its STDERR pipe.
+        /// </para>
+        /// <para>
         /// The Engine uses this ErrorCategory when it executes a native
         /// console applications and captures the errors reported by the
         /// native application.  Avoid using ErrorCategory.FromStdErr
         /// in other circumstances.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         FromStdErr = 24,
 
         /// <summary>
@@ -193,10 +197,7 @@ public class ErrorCategoryInfo
         #region ctor
         internal ErrorCategoryInfo(ErrorRecord errorRecord)
         {
-            if (errorRecord == null)
-            {
-                throw new ArgumentNullException(nameof(errorRecord));
-            }
+            ArgumentNullException.ThrowIfNull(errorRecord);
 
             _errorRecord = errorRecord;
         }
@@ -526,7 +527,6 @@ internal static string Ellipsize(CultureInfo uiCultureInfo, string original)
     /// It is permitted to subclass <see cref="ErrorDetails"/>
     /// but there is no established scenario for doing this, nor has it been tested.
     /// </remarks>
-    [Serializable]
     public class ErrorDetails : ISerializable
     {
         #region Constructor
@@ -562,7 +562,7 @@ public ErrorDetails(string message)
         /// <see cref="System.Resources.ResourceManager"/>
         /// </param>
         /// <param name="args">
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>
         /// insertion parameters
         /// </param>
         /// <remarks>
@@ -584,7 +584,7 @@ public ErrorDetails(string message)
         /// by overriding virtual method
         /// <see cref="Cmdlet.GetResourceString"/>.
         /// This constructor then inserts the specified args using
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>.
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>.
         /// </remarks>
         public ErrorDetails(
             Cmdlet cmdlet,
@@ -610,7 +610,7 @@ public ErrorDetails(
         /// <see cref="System.Resources.ResourceManager"/>
         /// </param>
         /// <param name="args">
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>
         /// insertion parameters
         /// </param>
         /// <remarks>
@@ -637,7 +637,7 @@ public ErrorDetails(
         /// will implement
         /// <see cref="IResourceSupplier"/>.
         /// The constructor then inserts the specified args using
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>.
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>.
         /// </remarks>
         public ErrorDetails(
             IResourceSupplier resourceSupplier,
@@ -663,7 +663,7 @@ public ErrorDetails(
         /// <see cref="System.Resources.ResourceManager"/>
         /// </param>
         /// <param name="args">
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>
         /// insertion parameters
         /// </param>
         /// <remarks>
@@ -678,7 +678,7 @@ public ErrorDetails(
         /// This constructor first loads a template string from the assembly using
         /// <see cref="System.Resources.ResourceManager.GetString(string)"/>.
         /// The constructor then inserts the specified args using
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>.
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>.
         /// </remarks>
         public ErrorDetails(
             System.Reflection.Assembly assembly,
@@ -796,7 +796,7 @@ internal Exception TextLookupError
 
         #region ToString
         /// <summary>
-        /// As <see cref="System.Object.ToString()"/>
+        /// As <see cref="object.ToString()"/>
         /// </summary>
         /// <returns>Developer-readable identifier.</returns>
         public override string ToString()
@@ -985,7 +985,6 @@ private string BuildMessage(
     /// <see cref="System.Management.Automation.ParentContainsErrorRecordException"/>.
     /// rather than the actual exception, to avoid the mutual references.
     /// </remarks>
-    [Serializable]
     public class ErrorRecord : ISerializable
     {
         #region Constructor
@@ -1026,10 +1025,7 @@ public ErrorRecord(
                 throw PSTraceSource.NewArgumentNullException(nameof(exception));
             }
 
-            if (errorId == null)
-            {
-                errorId = string.Empty;
-            }
+            errorId ??= string.Empty;
 
             // targetObject may be null
             _error = exception;
@@ -1669,7 +1665,7 @@ private string GetInvocationTypeName()
                 return commandInfo.Name;
             }
 
-            if (!(commandInfo is CmdletInfo cmdletInfo))
+            if (commandInfo is not CmdletInfo cmdletInfo)
             {
                 return string.Empty;
             }
@@ -1681,7 +1677,7 @@ private string GetInvocationTypeName()
 
         #region ToString
         /// <summary>
-        /// As <see cref="System.Object.ToString()"/>
+        /// As <see cref="object.ToString()"/>
         /// </summary>
         /// <returns>Developer-readable identifier.</returns>
         public override string ToString()
@@ -1693,12 +1689,7 @@ public override string ToString()
 
             if (Exception != null)
             {
-                if (!string.IsNullOrEmpty(Exception.Message))
-                {
-                    return Exception.Message;
-                }
-
-                return Exception.ToString();
+                return Exception.Message ?? Exception.ToString();
             }
 
             return base.ToString();
@@ -1726,10 +1717,10 @@ public ErrorRecord(Exception exception, string errorId, ErrorCategory errorCateg
     /// information.
     /// </summary>
     /// <remarks>
-    /// MSH defines certain exception classes which implement this interface.
+    /// PowerShell defines certain exception classes which implement this interface.
     /// This includes wrapper exceptions such as
     /// <see cref="System.Management.Automation.CmdletInvocationException"/>,
-    /// and also MSH engine errors such as
+    /// and also PowerShell engine errors such as
     /// <see cref="System.Management.Automation.GetValueException"/>.
     /// Cmdlets and providers should not define this interface;
     /// instead, they should use the
@@ -1815,6 +1806,7 @@ public interface IContainsErrorRecord
     /// since the improved
     /// information about the error may help enable future scenarios.
     /// </remarks>
+#nullable enable
     public interface IResourceSupplier
     {
         /// <summary>
@@ -1831,7 +1823,7 @@ public interface IResourceSupplier
         /// if you want more complex behavior.
         ///
         /// Insertions will be inserted into the string with
-        /// <see cref="System.String.Format(IFormatProvider,string,object[])"/>
+        /// <see cref="string.Format(IFormatProvider,string,object[])"/>
         /// to generate the final error message in
         /// <see cref="ErrorDetails.Message"/>.
         /// </remarks>
diff --git a/src/System.Management.Automation/engine/EventManager.cs b/src/System.Management.Automation/engine/EventManager.cs
index fd30298669e..1c5de607321 100644
--- a/src/System.Management.Automation/engine/EventManager.cs
+++ b/src/System.Management.Automation/engine/EventManager.cs
@@ -44,6 +44,7 @@ protected int GetNextEventId()
 
         /// <summary>
         /// Creates a PowerShell event.
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// An optional identifier that identifies the source event
         /// </param>
@@ -56,11 +57,11 @@ protected int GetNextEventId()
         /// <param name="extraData">
         /// Any additional data you wish to attach to the event
         /// </param>
-        /// </summary>
         protected abstract PSEventArgs CreateEvent(string sourceIdentifier, object sender, object[] args, PSObject extraData);
 
         /// <summary>
         /// Generate a PowerShell event.
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// An optional identifier that identifies the source event
         /// </param>
@@ -73,7 +74,6 @@ protected int GetNextEventId()
         /// <param name="extraData">
         /// Any additional data you wish to attach to the event
         /// </param>
-        /// </summary>
         public PSEventArgs GenerateEvent(string sourceIdentifier, object sender, object[] args, PSObject extraData)
         {
             return this.GenerateEvent(sourceIdentifier, sender, args, extraData, false, false);
@@ -81,6 +81,7 @@ public PSEventArgs GenerateEvent(string sourceIdentifier, object sender, object[
 
         /// <summary>
         /// Generate a PowerShell event.
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// An optional identifier that identifies the source event
         /// </param>
@@ -100,7 +101,6 @@ public PSEventArgs GenerateEvent(string sourceIdentifier, object sender, object[
         /// <param name="waitForCompletionInCurrentThread">
         /// Wait for the event and associated action to be processed and completed.
         /// </param>
-        /// </summary>
         public PSEventArgs GenerateEvent(string sourceIdentifier, object sender, object[] args, PSObject extraData,
             bool processInCurrentThread, bool waitForCompletionInCurrentThread)
         {
@@ -133,14 +133,15 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
 
         /// <summary>
         /// Get the event subscription that corresponds to an identifier
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// The identifier that identifies the source of the events
         /// </param>
-        /// </summary>
         public abstract IEnumerable<PSEventSubscriber> GetEventSubscribers(string sourceIdentifier);
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -162,12 +163,12 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public abstract PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent);
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -193,12 +194,12 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public abstract PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent, int maxTriggerCount);
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -220,12 +221,12 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public abstract PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent);
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -251,12 +252,12 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public abstract PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent, int maxTriggerCount);
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -286,7 +287,6 @@ protected internal virtual void ProcessNewEvent(PSEventArgs newEvent, bool proce
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// The default value is zero
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         internal virtual PSEventSubscriber SubscribeEvent(object source,
             string eventName,
@@ -303,10 +303,10 @@ internal virtual PSEventSubscriber SubscribeEvent(object source,
 
         /// <summary>
         /// Unsubscribes from an event on an object.
+        /// </summary>
         /// <param name="subscriber">
         /// The subscriber associated with the event subscription
         /// </param>
-        /// </summary>
         public abstract void UnsubscribeEvent(PSEventSubscriber subscriber);
 
         /// <summary>
@@ -367,6 +367,7 @@ public override List<PSEventSubscriber> Subscribers
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -388,7 +389,6 @@ public override List<PSEventSubscriber> Subscribers
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent)
         {
@@ -397,6 +397,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -422,7 +423,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent, int maxTriggerCount)
         {
@@ -436,6 +436,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -465,7 +466,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// The default value is zero
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         internal override PSEventSubscriber SubscribeEvent(object source,
             string eventName,
@@ -484,6 +484,7 @@ internal override PSEventSubscriber SubscribeEvent(object source,
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -505,7 +506,6 @@ internal override PSEventSubscriber SubscribeEvent(object source,
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent)
         {
@@ -514,6 +514,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -539,7 +540,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent, int maxTriggerCount)
         {
@@ -797,10 +797,10 @@ private void ProcessNewSubscriber(PSEventSubscriber subscriber, object source, s
 
         /// <summary>
         /// Unsubscribes from an event on an object.
+        /// </summary>
         /// <param name="subscriber">
         /// The subscriber associated with the event subscription
         /// </param>
-        /// </summary>
         public override void UnsubscribeEvent(PSEventSubscriber subscriber)
         {
             UnsubscribeEvent(subscriber, false);
@@ -808,19 +808,16 @@ public override void UnsubscribeEvent(PSEventSubscriber subscriber)
 
         /// <summary>
         /// Unsubscribes from an event on an object.
+        /// </summary>
         /// <param name="subscriber">
         /// The subscriber associated with the event subscription
         /// </param>
         /// <param name="skipDraining">
         /// Indicate if we should skip draining
         /// </param>
-        /// </summary>
         private void UnsubscribeEvent(PSEventSubscriber subscriber, bool skipDraining)
         {
-            if (subscriber == null)
-            {
-                throw new ArgumentNullException(nameof(subscriber));
-            }
+            ArgumentNullException.ThrowIfNull(subscriber);
 
             Delegate existingSubscriber = null;
             lock (_eventSubscribers)
@@ -862,10 +859,7 @@ private void UnsubscribeEvent(PSEventSubscriber subscriber, bool skipDraining)
             }
 
             // Stop the job
-            if (subscriber.Action != null)
-            {
-                subscriber.Action.NotifyJobStopped();
-            }
+            subscriber.Action?.NotifyJobStopped();
 
             lock (_eventSubscribers)
             {
@@ -882,6 +876,7 @@ private void UnsubscribeEvent(PSEventSubscriber subscriber, bool skipDraining)
 
         /// <summary>
         /// Creates a PowerShell event.
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// An optional identifier that identifies the source event
         /// </param>
@@ -894,7 +889,6 @@ private void UnsubscribeEvent(PSEventSubscriber subscriber, bool skipDraining)
         /// <param name="extraData">
         /// Any additional data you wish to attach to the event
         /// </param>
-        /// </summary>
         protected override PSEventArgs CreateEvent(string sourceIdentifier, object sender, object[] args, PSObject extraData)
         {
             return new PSEventArgs(null, _context.CurrentRunspace.InstanceId, GetNextEventId(), sourceIdentifier, sender, args, extraData);
@@ -1293,10 +1287,10 @@ internal bool IsExecutingEventAction
 
         /// <summary>
         /// Get the event subscription that corresponds to an identifier
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// The identifier that identifies the source of the events
         /// </param>
-        /// </summary>
         public override IEnumerable<PSEventSubscriber> GetEventSubscribers(string sourceIdentifier)
         {
             return GetEventSubscribers(sourceIdentifier, false);
@@ -1522,20 +1516,17 @@ public void Dispose()
         /// <summary>
         /// Stop the timer if it's not null.
         /// Unsubscribes from all events.
+        /// </summary>
         /// <param name="disposing">
         /// Whether to actually dispose the object.
         /// </param>
-        /// </summary>
         public void Dispose(bool disposing)
         {
             if (disposing)
             {
                 lock (_eventSubscribers)
                 {
-                    if (_timer != null)
-                    {
-                        _timer.Dispose();
-                    }
+                    _timer?.Dispose();
 
                     foreach (PSEventSubscriber currentSubscriber in _eventSubscribers.Keys.ToArray())
                     {
@@ -1589,6 +1580,7 @@ public override List<PSEventSubscriber> Subscribers
 
         /// <summary>
         /// Creates a PowerShell event.
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// An optional identifier that identifies the source event
         /// </param>
@@ -1601,7 +1593,6 @@ public override List<PSEventSubscriber> Subscribers
         /// <param name="extraData">
         /// Any additional data you wish to attach to the event
         /// </param>
-        /// </summary>
         protected override PSEventArgs CreateEvent(string sourceIdentifier, object sender, object[] args, PSObject extraData)
         {
             // note that this is a local call, so we use null for the computer name
@@ -1657,10 +1648,10 @@ protected internal override void ProcessNewEvent(PSEventArgs newEvent,
 
         /// <summary>
         /// Get the event subscription that corresponds to an identifier
+        /// </summary>
         /// <param name="sourceIdentifier">
         /// The identifier that identifies the source of the events
         /// </param>
-        /// </summary>
         public override IEnumerable<PSEventSubscriber> GetEventSubscribers(string sourceIdentifier)
         {
             throw new NotSupportedException(EventingResources.RemoteOperationNotSupported);
@@ -1668,6 +1659,7 @@ public override IEnumerable<PSEventSubscriber> GetEventSubscribers(string source
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -1689,7 +1681,6 @@ public override IEnumerable<PSEventSubscriber> GetEventSubscribers(string source
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent)
         {
@@ -1698,6 +1689,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -1723,7 +1715,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, ScriptBlock action, bool supportEvent, bool forwardEvent, int maxTriggerCount)
         {
@@ -1732,6 +1723,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -1753,7 +1745,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// <param name="forwardEvent">
         /// Whether events in this subscriber should be forwarded to the client PowerShell during remote executions
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent)
         {
@@ -1762,6 +1753,7 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Subscribes to an event on an object.
+        /// </summary>
         /// <param name="source">
         /// The source object that defines the event
         /// </param>
@@ -1787,7 +1779,6 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
         /// Indicate how many times the subscriber should be triggered before auto-unregister it
         /// If the value is equal or less than zero, there is no limit on the number of times the event can be triggered without being unregistered
         /// </param>
-        /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
         public override PSEventSubscriber SubscribeEvent(object source, string eventName, string sourceIdentifier, PSObject data, PSEventReceivedEventHandler handlerDelegate, bool supportEvent, bool forwardEvent, int maxTriggerCount)
         {
@@ -1796,10 +1787,10 @@ public override PSEventSubscriber SubscribeEvent(object source, string eventName
 
         /// <summary>
         /// Unsubscribes from an event on an object.
+        /// </summary>
         /// <param name="subscriber">
         /// The subscriber associated with the event subscription
         /// </param>
-        /// </summary>
         public override void UnsubscribeEvent(PSEventSubscriber subscriber)
         {
             throw new NotSupportedException(EventingResources.RemoteOperationNotSupported);
@@ -1839,6 +1830,11 @@ private PSEngineEvent() { }
         /// </summary>
         public const string OnIdle = "PowerShell.OnIdle";
 
+        /// <summary>
+        /// Called when <c>Debug-Runspace</c> has attached a debugger to the current runspace.
+        /// </summary>
+        public const string OnDebugAttach = "PowerShell.OnDebugAttach";
+
         /// <summary>
         /// Called during scriptblock invocation.
         /// </summary>
@@ -1852,7 +1848,7 @@ private PSEngineEvent() { }
         /// <summary>
         /// A HashSet that contains all engine event names.
         /// </summary>
-        internal static readonly HashSet<string> EngineEvents = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { Exiting, OnIdle, OnScriptBlockInvoke };
+        internal static readonly HashSet<string> EngineEvents = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { Exiting, OnIdle, OnDebugAttach, OnScriptBlockInvoke };
     }
 
     /// <summary>
@@ -2042,12 +2038,25 @@ private ScriptBlock CreateBoundScriptBlock(ScriptBlock scriptAction)
 
         #region IComparable<PSEventSubscriber> Members
 
+        /// <summary>
+        /// Determines whether the specified object is equal to the current object.
+        /// </summary>
+        /// <param name="obj">The object to compare with the current object.</param>
+        /// <returns>
+        /// <see langword="true"/> if the specified object is equal to the current object;
+        /// otherwise, <see langword="false"/>.
+        /// </returns>
+        public override bool Equals(object obj)
+        {
+            return obj is PSEventSubscriber es && Equals(es);
+        }
+
         /// <summary>
         /// Determines if two PSEventSubscriber instances are equal
+        /// </summary>
         /// <param name="other">
         /// The PSEventSubscriber to which to compare this instance
         /// </param>
-        /// </summary>
         public bool Equals(PSEventSubscriber other)
         {
             if (other == null)
@@ -2091,6 +2100,7 @@ public PSEventHandler()
         /// <summary>
         /// Creates a new instance of the PsEventHandler class for a given
         /// event manager, source identifier, and extra data
+        /// </summary>
         /// <param name="eventManager">
         /// The event manager to which we forward events.
         /// </param>
@@ -2104,7 +2114,6 @@ public PSEventHandler()
         /// <param name="extraData">
         /// Any additional data you wish to attach to the event
         /// </param>
-        /// </summary>
         public PSEventHandler(PSEventManager eventManager, object sender, string sourceIdentifier, PSObject extraData)
         {
             this.eventManager = eventManager;
@@ -2361,10 +2370,7 @@ public class PSEventArgsCollection : IEnumerable<PSEventArgs>
         /// <remarks>Don't add events to the collection directly; use the EventManager instead</remarks>
         internal void Add(PSEventArgs eventToAdd)
         {
-            if (eventToAdd == null)
-            {
-                throw new ArgumentNullException(nameof(eventToAdd));
-            }
+            ArgumentNullException.ThrowIfNull(eventToAdd);
 
             _eventCollection.Add(eventToAdd);
 
@@ -2459,6 +2465,7 @@ public class PSEventJob : Job
     {
         /// <summary>
         /// Creates a new instance of the PSEventJob class.
+        /// </summary>
         /// <param name="eventManager">
         /// The event manager that controls the event subscriptions
         /// </param>
@@ -2471,7 +2478,6 @@ public class PSEventJob : Job
         /// <param name="name">
         /// The name of the job
         /// </param>
-        /// </summary>
         public PSEventJob(
             PSEventManager eventManager,
             PSEventSubscriber subscriber,
@@ -2479,10 +2485,9 @@ public PSEventJob(
             string name)
             : base(action?.ToString(), name)
         {
-            if (eventManager == null)
-                throw new ArgumentNullException(nameof(eventManager));
-            if (subscriber == null)
-                throw new ArgumentNullException(nameof(subscriber));
+            ArgumentNullException.ThrowIfNull(eventManager);
+
+            ArgumentNullException.ThrowIfNull(subscriber);
 
             UsesResultsCollection = true;
             ScriptBlock = action;
@@ -2549,13 +2554,13 @@ public override string Location
 
         /// <summary>
         /// Invoke the script block
+        /// </summary>
         /// <param name="eventSubscriber">
         /// The subscriber that generated this event
         /// </param>
         /// <param name="eventArgs">
         /// The context of this event
         /// </param>
-        /// </summary>
         internal void Invoke(PSEventSubscriber eventSubscriber, PSEventArgs eventArgs)
         {
             if (IsFinishedState(JobStateInfo.State))
diff --git a/src/System.Management.Automation/engine/ExecutionContext.cs b/src/System.Management.Automation/engine/ExecutionContext.cs
index 3857de9ba38..ac39eade17b 100644
--- a/src/System.Management.Automation/engine/ExecutionContext.cs
+++ b/src/System.Management.Automation/engine/ExecutionContext.cs
@@ -53,22 +53,12 @@ internal ScriptDebugger Debugger
         /// </summary>
         internal void ResetManagers()
         {
-            if (_debugger != null)
-            {
-                _debugger.ResetDebugger();
-            }
-
-            if (Events != null)
-            {
-                Events.Dispose();
-            }
+            _debugger?.ResetDebugger();
 
+            Events?.Dispose();
             Events = new PSLocalEventManager(this);
-            if (this.transactionManager != null)
-            {
-                this.transactionManager.Dispose();
-            }
 
+            this.transactionManager?.Dispose();
             this.transactionManager = new PSTransactionManager();
         }
         /// <summary>
@@ -114,10 +104,7 @@ internal bool PSDebugTraceStep
         // Helper for generated code to handle running w/ no execution context
         internal static bool IsStrictVersion(ExecutionContext context, int majorVersion)
         {
-            if (context == null)
-            {
-                context = LocalPipeline.GetExecutionContextFromTLS();
-            }
+            context ??= LocalPipeline.GetExecutionContextFromTLS();
 
             return (context != null) && context.IsStrictVersion(majorVersion);
         }
@@ -205,40 +192,6 @@ internal bool ShouldTraceStatement
         /// </summary>
         internal string ModuleBeingProcessed { get; set; }
 
-        private bool _responsibilityForModuleAnalysisAppDomainOwned;
-
-        internal bool TakeResponsibilityForModuleAnalysisAppDomain()
-        {
-            if (_responsibilityForModuleAnalysisAppDomainOwned)
-            {
-                return false;
-            }
-
-            Diagnostics.Assert(AppDomainForModuleAnalysis == null, "Invalid module analysis app domain state");
-            _responsibilityForModuleAnalysisAppDomainOwned = true;
-            return true;
-        }
-
-        internal void ReleaseResponsibilityForModuleAnalysisAppDomain()
-        {
-            Diagnostics.Assert(_responsibilityForModuleAnalysisAppDomainOwned, "Invalid module analysis app domain state");
-
-            if (AppDomainForModuleAnalysis != null)
-            {
-                AppDomain.Unload(AppDomainForModuleAnalysis);
-                AppDomainForModuleAnalysis = null;
-            }
-
-            _responsibilityForModuleAnalysisAppDomainOwned = false;
-        }
-
-        /// <summary>
-        /// The AppDomain currently being used for module analysis.  It should only be created if needed,
-        /// but various callers need to take responsibility for unloading the domain via
-        /// the TakeResponsibilityForModuleAnalysisAppDomain.
-        /// </summary>
-        internal AppDomain AppDomainForModuleAnalysis { get; set; }
-
         /// <summary>
         /// Authorization manager for this runspace.
         /// </summary>
@@ -253,10 +206,7 @@ internal ProviderNames ProviderNames
         {
             get
             {
-                if (_providerNames == null)
-                {
-                    _providerNames = new SingleShellProviderNames();
-                }
+                _providerNames ??= new SingleShellProviderNames();
 
                 return _providerNames;
             }
@@ -413,8 +363,7 @@ internal static bool IsMarkedAsUntrusted(object value)
             var baseValue = PSObject.Base(value);
             if (baseValue != null && baseValue != NullString.Value)
             {
-                object unused;
-                result = UntrustedObjects.TryGetValue(baseValue, out unused);
+                result = UntrustedObjects.TryGetValue(baseValue, out _);
             }
 
             return result;
@@ -430,7 +379,7 @@ internal static void MarkObjectAsUntrusted(object value)
             if (baseValue != null && baseValue != NullString.Value)
             {
                 // It's actually setting a key value pair when the key doesn't exist
-                UntrustedObjects.GetValue(baseValue, key => null);
+                UntrustedObjects.GetValue(baseValue, static key => null);
 
                 try
                 {
@@ -528,7 +477,6 @@ internal LocationGlobber LocationGlobber
         /// The assemblies that have been loaded for this runspace.
         /// </summary>
         internal Dictionary<string, Assembly> AssemblyCache { get; private set; }
-
         #endregion Properties
 
         #region Engine State
@@ -559,9 +507,7 @@ internal object GetVariableValue(VariablePath path)
         /// </summary>
         internal object GetVariableValue(VariablePath path, object defaultValue)
         {
-            CmdletProviderContext context;
-            SessionStateScope scope;
-            return EngineSessionState.GetVariableValue(path, out context, out scope) ?? defaultValue;
+            return EngineSessionState.GetVariableValue(path, out _, out _) ?? defaultValue;
         }
 
         /// <summary>
@@ -646,19 +592,15 @@ private void CheckActionPreference(VariablePath preferenceVariablePath, ActionPr
         /// <returns></returns>
         internal bool GetBooleanPreference(VariablePath preferenceVariablePath, bool defaultPref, out bool defaultUsed)
         {
-            CmdletProviderContext context = null;
-            SessionStateScope scope = null;
-            object val = EngineSessionState.GetVariableValue(preferenceVariablePath, out context, out scope);
-            if (val == null)
+            object val = EngineSessionState.GetVariableValue(preferenceVariablePath, out _, out _);
+            if (val is null)
             {
                 defaultUsed = true;
                 return defaultPref;
             }
 
-            bool converted = defaultPref;
-            defaultUsed = !LanguagePrimitives.TryConvertTo<bool>
-                (val, out converted);
-            return (defaultUsed) ? defaultPref : converted;
+            defaultUsed = !LanguagePrimitives.TryConvertTo(val, out bool converted);
+            return defaultUsed ? defaultPref : converted;
         }
         #endregion GetSetVariable methods
 
@@ -691,12 +633,13 @@ internal HelpSystem HelpSystem
         /// </summary>
         /// <param name="command">The name of the command to lookup.</param>
         /// <param name="dotSource"></param>
+        /// <param name="forCompletion"></param>
         /// <returns>The command processor object.</returns>
-        internal CommandProcessorBase CreateCommand(string command, bool dotSource)
+        internal CommandProcessorBase CreateCommand(string command, bool dotSource, bool forCompletion = false)
         {
             CommandOrigin commandOrigin = this.EngineSessionState.CurrentScope.ScopeOrigin;
             CommandProcessorBase commandProcessor =
-                CommandDiscovery.LookupCommandProcessor(command, commandOrigin, !dotSource);
+                CommandDiscovery.LookupCommandProcessor(command, commandOrigin, !dotSource, forCompletion);
             // Reset the command origin for script commands... // BUGBUG - dotting can get around command origin checks???
             if (commandProcessor != null && commandProcessor is ScriptCommandProcessorBase)
             {
@@ -823,11 +766,6 @@ internal Pipe RedirectErrorPipe(Pipe newPipe)
             return oldPipe;
         }
 
-        internal void RestoreErrorPipe(Pipe pipe)
-        {
-            ShellFunctionErrorOutputPipe = pipe;
-        }
-
         /// <summary>
         /// Reset all of the redirection book keeping variables. This routine should be called when starting to
         /// execute a script.
@@ -880,15 +818,13 @@ internal void ResetRedirection()
         internal void AppendDollarError(object obj)
         {
             ErrorRecord objAsErrorRecord = obj as ErrorRecord;
-            if (objAsErrorRecord == null && obj is not Exception)
+            if (objAsErrorRecord is null && obj is not Exception)
             {
                 Diagnostics.Assert(false, "Object to append was neither an ErrorRecord nor an Exception in ExecutionContext.AppendDollarError");
                 return;
             }
 
-            object old = this.DollarErrorVariable;
-            ArrayList arraylist = old as ArrayList;
-            if (arraylist == null)
+            if (DollarErrorVariable is not ArrayList arraylist)
             {
                 Diagnostics.Assert(false, "$error should be a global constant ArrayList");
                 return;
@@ -1209,22 +1145,12 @@ internal void RunspaceClosingNotification()
         {
             EngineSessionState.RunspaceClosingNotification();
 
-            if (_debugger != null)
-            {
-                _debugger.Dispose();
-            }
-
-            if (Events != null)
-            {
-                Events.Dispose();
-            }
+            _debugger?.Dispose();
 
+            Events?.Dispose();
             Events = null;
-            if (this.transactionManager != null)
-            {
-                this.transactionManager.Dispose();
-            }
 
+            this.transactionManager?.Dispose();
             this.transactionManager = null;
         }
 
@@ -1316,55 +1242,151 @@ internal PSTransactionManager TransactionManager
 
         internal PSTransactionManager transactionManager;
 
-        internal Assembly AddAssembly(string name, string filename, out Exception error)
-        {
-            Assembly loadedAssembly = LoadAssembly(name, filename, out error);
-
-            if (loadedAssembly == null)
-                return null;
-
-            if (AssemblyCache.ContainsKey(loadedAssembly.FullName))
+        /// <summary>
+        /// This method is used for assembly loading requests stemmed from 'InitialSessionState' binding and module loading.
+        /// </summary>
+        /// <param name="source">Source of the assembly loading request, should be a module name when specified.</param>
+        /// <param name="assemblyName">Name of the assembly to be loaded.</param>
+        /// <param name="filePath">Path of the assembly to be loaded.</param>
+        /// <param name="error">Exception that is caught when the loading fails.</param>
+        internal Assembly AddAssembly(string source, string assemblyName, string filePath, out Exception error)
+        {
+            // Search the cache by the path, and return the assembly if we find it.
+            // It's common to have two loading requests for the same assembly when loading a module -- the first time for
+            // resolving a binary module path, and the second time for actually processing that module.
+            //
+            // That's not a problem when all the module assemblies are loaded into the default ALC. But in a scenario where
+            // a module tries to hide its nested/root binary modules in a custom ALC, that will become a problem. This is
+            // because:
+            // in that scenario, the module will usually setup a handler to load the specific assemblies to the custom ALC,
+            // and that will be how the first loading request gets served. However, after the module path is resolved with
+            // the first loading, the path will be used for the second loading upon real module processing. Since we prefer
+            // loading-by-path over loading-by-name in the 'LoadAssembly' call, we will end up loading the same assembly in
+            // the default ALC (because we use 'Assembly.LoadFrom' which always loads an assembly to the default ALC) if we
+            // do not search in the cache first. That will break the scenario, because the module means to isolate all its
+            // dependencies from the default ALC, and it failed to do so.
+            //
+            // Therefore, we need to search the cache first. The reason we use path as the key is to make sure the request
+            // is for exactly the same assembly. The same assembly file should not be loaded into different ALC's by module
+            // loading within the same PowerShell session (Runspace).
+            //
+            // An example module targeting the abovementioned scenario will likely have the following file structure:
+            // IsolatedModule
+            //  │   IsolatedModule.psd1 (has 'NestedModules = @('Test.Isolated.Init.dll', 'Test.Isolated.Nested.dll')')
+            //  │   Test.Isolated.Init.dll (contains the custom ALC and code to setup 'Resolving' handler)
+            //  └───Dependencies (folder under module base)
+            //         Newtonsoft.Json.dll (version 10.0.0.0 dependency)
+            //         Test.Isolated.Nested.dll (nested binary module referencing the particular dependency)
+            //
+            // In this example, the following events will happen in sequence:
+            //  1. PowerShell is able to find 'Test.Isolated.Init.dll' under module base folder, so it will be loaded into
+            //     the default ALC as expected and setup the 'Resolving' handler via the 'OnImport' call.
+            //  2. PowerShell cannot find 'Test.Isolated.Nested.dll' under the module base folder, so it will call the method
+            //     'FixFileName(.., bool canLoadAssembly)' to resolve the path of this binary module.
+            //     This particular overload will attempt to load the assembly by name, which will be served by the 'Resolving'
+            //     handler that was setup in the step 1. So, the assembly will be loaded into the custom ALC and insert to the
+            //     assembly cache.
+            //  3. Path of the nested module 'Test.Isolated.Init.dll' now has been resolved by the step 2 (assembly.Location).
+            //     Now it's time to actually load this binary module for processing in the method 'LoadBinaryModule', which
+            //     will make a call to this method with the resolved assembly file path.
+            // At this poin, we will have to query the cache first, instead of calling 'LoadAssembly' directly, to make sure
+            // that the assembly instance loaded in the custom ALC in step 2 gets returned back. Otherwise, the same assembly
+            // file will be loaded in the default ALC because 'Assembly.LoadFrom' is used in 'LoadAssembly' and that API will
+            // always load an assembly file to the default ALC, and that will break this scenario.
+            if (TryGetFromAssemblyCache(source, filePath, out Assembly loadedAssembly))
             {
-                // we should ignore this assembly.
+                error = null;
                 return loadedAssembly;
             }
-            // We will cache the assembly by both full name and
-            // file name
-            AssemblyCache.Add(loadedAssembly.FullName, loadedAssembly);
 
-            if (AssemblyCache.ContainsKey(loadedAssembly.GetName().Name))
+            // Attempt to load the requested assembly, first by path then by name.
+            loadedAssembly = LoadAssembly(assemblyName, filePath, out error);
+            if (loadedAssembly is not null)
             {
-                // we should ignore this assembly.
-                return loadedAssembly;
+                AddToAssemblyCache(source, loadedAssembly);
             }
 
-            AssemblyCache.Add(loadedAssembly.GetName().Name, loadedAssembly);
             return loadedAssembly;
         }
 
-        internal void RemoveAssembly(string name)
+        /// <summary>
+        /// Add a loaded assembly to the 'AssemblyCache'.
+        /// The <paramref name="source"/> is used as a prefix for the key to make it easy to remove all associated
+        /// assemblies from the cache when a module gets unloaded.
+        /// </summary>
+        /// <param name="source">The source where the assembly comes from, should be a module name when specified.</param>
+        /// <param name="assembly">The assembly we try to cache.</param>
+        internal void AddToAssemblyCache(string source, Assembly assembly)
         {
-            Assembly loadedAssembly;
-            if (AssemblyCache.TryGetValue(name, out loadedAssembly) && loadedAssembly != null)
+            // Try caching the assembly by its location if possible.
+            // When it's a dynamic assembly, we use it's full name. This could happen with 'Import-Module -Assembly'.
+            string key = string.IsNullOrEmpty(assembly.Location) ? assembly.FullName : assembly.Location;
+
+            // When the assembly is from a module loading, we prefix the key with the source,
+            // so we can remove it from the cache when the module gets unloaded.
+            if (!string.IsNullOrEmpty(source))
             {
-                AssemblyCache.Remove(name);
+                // Both 'source' and 'key' are of the string type, so no need to specify 'InvariantCulture'.
+                key = $"{source}@{key}";
+            }
 
-                AssemblyCache.Remove(loadedAssembly.GetName().Name);
+            AssemblyCache.TryAdd(key, assembly);
+        }
+
+        /// <summary>
+        /// Remove all cache entries that are associated with the specified source.
+        /// </summary>
+        internal void RemoveFromAssemblyCache(string source)
+        {
+            if (string.IsNullOrEmpty(source))
+            {
+                return;
             }
+
+            var keysToRemove = new List<string>();
+            string prefix = $"{source}@";
+
+            foreach (string key in AssemblyCache.Keys)
+            {
+                if (key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
+                {
+                    keysToRemove.Add(key);
+                }
+            }
+
+            foreach (string key in keysToRemove)
+            {
+                AssemblyCache.Remove(key);
+            }
+        }
+
+        /// <summary>
+        /// Try to get an assembly from the cache.
+        /// </summary>
+        private bool TryGetFromAssemblyCache(string source, string filePath, out Assembly assembly)
+        {
+            if (string.IsNullOrEmpty(filePath))
+            {
+                assembly = null;
+                return false;
+            }
+
+            // Both 'source' and 'filePath' are of the string type, so no need to specify 'InvariantCulture'.
+            string key = string.IsNullOrEmpty(source) ? filePath : $"{source}@{filePath}";
+            return AssemblyCache.TryGetValue(key, out assembly);
         }
 
-        [SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Reflection.Assembly.LoadWithPartialName")]
-        [SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Reflection.Assembly.LoadFrom")]
-        internal static Assembly LoadAssembly(string name, string filename, out Exception error)
+        private static Assembly LoadAssembly(string name, string filePath, out Exception error)
         {
             // First we try to load the assembly based on the filename
             Assembly loadedAssembly = null;
             error = null;
-            if (!string.IsNullOrEmpty(filename))
+            if (!string.IsNullOrEmpty(filePath))
             {
                 try
                 {
-                    loadedAssembly = Assembly.LoadFrom(filename);
+                    // codeql[cs/dll-injection-remote] - The dll is loaded during the initial state setup, which is expected behavior. This allows users hosting PowerShell to load additional C# types to enable their specific scenarios.
+                    loadedAssembly = Assembly.LoadFrom(filePath);
                     return loadedAssembly;
                 }
                 catch (FileNotFoundException fileNotFound)
@@ -1451,9 +1473,17 @@ internal void ReportEngineStartupError(string resourceString, params object[] ar
                 else
                 {
                     PSHost host = EngineHostInterface;
-                    if (host == null) return;
+                    if (host == null)
+                    {
+                        return;
+                    }
+
                     PSHostUserInterface ui = host.UI;
-                    if (ui == null) return;
+                    if (ui == null)
+                    {
+                        return;
+                    }
+
                     ui.WriteErrorLine(
                         StringUtil.Format(resourceString, arguments));
                 }
@@ -1481,9 +1511,17 @@ internal void ReportEngineStartupError(string error)
                 else
                 {
                     PSHost host = EngineHostInterface;
-                    if (host == null) return;
+                    if (host == null)
+                    {
+                        return;
+                    }
+
                     PSHostUserInterface ui = host.UI;
-                    if (ui == null) return;
+                    if (ui == null)
+                    {
+                        return;
+                    }
+
                     ui.WriteErrorLine(error);
                 }
             }
@@ -1516,9 +1554,17 @@ internal void ReportEngineStartupError(Exception e)
                 else
                 {
                     PSHost host = EngineHostInterface;
-                    if (host == null) return;
+                    if (host == null)
+                    {
+                        return;
+                    }
+
                     PSHostUserInterface ui = host.UI;
-                    if (ui == null) return;
+                    if (ui == null)
+                    {
+                        return;
+                    }
+
                     ui.WriteErrorLine(e.Message);
                 }
             }
@@ -1536,17 +1582,24 @@ internal void ReportEngineStartupError(ErrorRecord errorRecord)
             try
             {
                 Cmdlet currentRunningModuleCommand;
-                string unused;
-                if (IsModuleCommandCurrentlyRunning(out currentRunningModuleCommand, out unused))
+                if (IsModuleCommandCurrentlyRunning(out currentRunningModuleCommand, out _))
                 {
                     currentRunningModuleCommand.WriteError(errorRecord);
                 }
                 else
                 {
                     PSHost host = EngineHostInterface;
-                    if (host == null) return;
+                    if (host == null)
+                    {
+                        return;
+                    }
+
                     PSHostUserInterface ui = host.UI;
-                    if (ui == null) return;
+                    if (ui == null)
+                    {
+                        return;
+                    }
+
                     ui.WriteErrorLine(errorRecord.ToString());
                 }
             }
@@ -1602,23 +1655,6 @@ internal ExecutionContext(AutomationEngine engine, PSHost hostInterface, Initial
         private void InitializeCommon(AutomationEngine engine, PSHost hostInterface)
         {
             Engine = engine;
-#if !CORECLR// System.AppDomain is not in CoreCLR
-            // Set the assembly resolve handler if it isn't already set...
-            if (!_assemblyEventHandlerSet)
-            {
-                // we only want to set the event handler once for the entire app domain...
-                lock (lockObject)
-                {
-                    // Need to check again inside the lock due to possibility of a race condition...
-                    if (!_assemblyEventHandlerSet)
-                    {
-                        AppDomain currentAppDomain = AppDomain.CurrentDomain;
-                        currentAppDomain.AssemblyResolve += new ResolveEventHandler(PowerShellAssemblyResolveHandler);
-                        _assemblyEventHandlerSet = true;
-                    }
-                }
-            }
-#endif
             Events = new PSLocalEventManager(this);
             transactionManager = new PSTransactionManager();
             _debugger = new ScriptDebugger(this);
@@ -1626,52 +1662,20 @@ private void InitializeCommon(AutomationEngine engine, PSHost hostInterface)
             EngineHostInterface = hostInterface as InternalHost ?? new InternalHost(hostInterface, this);
 
             // Hook up the assembly cache
-            AssemblyCache = new Dictionary<string, Assembly>();
+            AssemblyCache = new Dictionary<string, Assembly>(StringComparer.OrdinalIgnoreCase);
 
             // Initialize the fixed toplevel session state and the current session state
             TopLevelSessionState = EngineSessionState = new SessionStateInternal(this);
 
-            if (AuthorizationManager == null)
-            {
-                // if authorizationmanager==null, this means the configuration
-                // explicitly asked for dummy authorization manager.
-                AuthorizationManager = new AuthorizationManager(null);
-            }
+            // if authorizationmanager==null, this means the configuration
+            // explicitly asked for dummy authorization manager.
+            AuthorizationManager ??= new AuthorizationManager(null);
 
             // Set up the module intrinsics
             Modules = new ModuleIntrinsics(this);
         }
 
         private static readonly object lockObject = new object();
-
-#if !CORECLR // System.AppDomain is not in CoreCLR
-        private static bool _assemblyEventHandlerSet = false;
-
-        /// <summary>
-        /// AssemblyResolve event handler that will look in the assembly cache to see
-        /// if the named assembly has been loaded. This is necessary so that assemblies loaded
-        /// with LoadFrom, which are in a different loaded context than Load, can still be used to
-        /// resolve types.
-        /// </summary>
-        /// <param name="sender">The event sender.</param>
-        /// <param name="args">The event args.</param>
-        /// <returns>The resolve assembly or null if not found.</returns>
-        private static Assembly PowerShellAssemblyResolveHandler(object sender, ResolveEventArgs args)
-        {
-            ExecutionContext ecFromTLS = Runspaces.LocalPipeline.GetExecutionContextFromTLS();
-            if (ecFromTLS != null)
-            {
-                if (ecFromTLS.AssemblyCache != null)
-                {
-                    Assembly assembly;
-                    ecFromTLS.AssemblyCache.TryGetValue(args.Name, out assembly);
-                    return assembly;
-                }
-            }
-
-            return null;
-        }
-#endif
     }
 
     /// <summary>
diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/EnableDisableExperimentalFeatureCommand.cs b/src/System.Management.Automation/engine/ExperimentalFeature/EnableDisableExperimentalFeatureCommand.cs
index 7a76a18ddb9..af09f427253 100644
--- a/src/System.Management.Automation/engine/ExperimentalFeature/EnableDisableExperimentalFeatureCommand.cs
+++ b/src/System.Management.Automation/engine/ExperimentalFeature/EnableDisableExperimentalFeatureCommand.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Globalization;
 using System.Linq;
 using System.Management.Automation;
@@ -112,26 +113,28 @@ public class ExperimentalFeatureNameCompleter : IArgumentCompleter
         /// <param name="commandAst">The command AST.</param>
         /// <param name="fakeBoundParameters">The fake bound parameters.</param>
         /// <returns>List of Completion Results.</returns>
-        public IEnumerable<CompletionResult> CompleteArgument(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
         {
-            if (fakeBoundParameters == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(fakeBoundParameters));
-            }
-
-            var commandInfo = new CmdletInfo("Get-ExperimentalFeature", typeof(GetExperimentalFeatureCommand));
-            var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace)
-                .AddCommand(commandInfo)
-                .AddParameter("Name", wordToComplete + "*");
+            SortedSet<string> expirmentalFeatures = new(StringComparer.OrdinalIgnoreCase);
 
-            HashSet<string> names = new HashSet<string>();
-            var results = ps.Invoke<ExperimentalFeature>();
-            foreach (var result in results)
+            foreach (ExperimentalFeature feature in GetExperimentalFeatures())
             {
-                names.Add(result.Name);
+                expirmentalFeatures.Add(feature.Name);
             }
 
-            return names.OrderBy(name => name).Select(name => new CompletionResult(name, name, CompletionResultType.Text, name));
+            return CompletionHelpers.GetMatchingResults(wordToComplete, expirmentalFeatures);
+        }
+
+        private static Collection<ExperimentalFeature> GetExperimentalFeatures()
+        {
+            using var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
+            ps.AddCommand("Get-ExperimentalFeature");
+            return ps.Invoke<ExperimentalFeature>();
         }
     }
 }
diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs
index 5eeaf814e10..7e17ec43137 100644
--- a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs
+++ b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System.Collections;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
@@ -21,7 +20,8 @@ public class ExperimentalFeature
         #region Const Members
 
         internal const string EngineSource = "PSEngine";
-        internal const string PSAnsiProgressFeatureName = "PSAnsiProgress";
+        internal const string PSSerializeJSONLongEnumAsNumber = nameof(PSSerializeJSONLongEnumAsNumber);
+        internal const string PSProfileDSCResource = "PSProfileDSCResource";
 
         #endregion
 
@@ -105,42 +105,22 @@ static ExperimentalFeature()
                     description: "Replace the old FileSystemProvider with cleaner design and faster code"),
                 */
                 new ExperimentalFeature(
-                    name: "PSImplicitRemotingBatching",
-                    description: "Batch implicit remoting proxy commands to improve performance"),
+                    name: "PSLoadAssemblyFromNativeCode",
+                    description: "Expose an API to allow assembly loading from native code"),
                 new ExperimentalFeature(
-                    name: "PSCommandNotFoundSuggestion",
-                    description: "Recommend potential commands based on fuzzy search on a CommandNotFoundException"),
-#if UNIX
+                    name: PSSerializeJSONLongEnumAsNumber,
+                    description: "Serialize enums based on long or ulong as an numeric value rather than the string representation when using ConvertTo-Json."
+                ),
                 new ExperimentalFeature(
-                    name: "PSUnixFileStat",
-                    description: "Provide unix permission information for files and directories"),
-#endif
-                new ExperimentalFeature(
-                    name: "PSCultureInvariantReplaceOperator",
-                    description: "Use culture invariant to-string convertor for lval in replace operator"),
-                new ExperimentalFeature(
-                    name: "PSNativePSPathResolution",
-                    description: "Convert PSPath to filesystem path, if possible, for native commands"),
-                new ExperimentalFeature(
-                    name: "PSNotApplyErrorActionToStderr",
-                    description: "Don't have $ErrorActionPreference affect stderr output"),
-                new ExperimentalFeature(
-                    name: "PS7DscSupport",
-                    description: "Support the cross-platform class-based DSC"),
-                new ExperimentalFeature(
-                    name: "PSSubsystemPluginModel",
-                    description: "A plugin model for registering and un-registering PowerShell subsystems"),
-                new ExperimentalFeature(
-                    name: "PSAnsiRendering",
-                    description: "Enable $PSStyle variable to control ANSI rendering of strings"),
-                new ExperimentalFeature(
-                    name: PSAnsiProgressFeatureName,
-                    description: "Enable lightweight progress bar that leverages ANSI codes for rendering"),
+                    name: PSProfileDSCResource,
+                    description: "DSC v3 resources for managing PowerShell profile."
+                )
             };
+
             EngineExperimentalFeatures = new ReadOnlyCollection<ExperimentalFeature>(engineFeatures);
 
             // Initialize the readonly dictionary 'EngineExperimentalFeatureMap'.
-            var engineExpFeatureMap = engineFeatures.ToDictionary(f => f.Name, StringComparer.OrdinalIgnoreCase);
+            var engineExpFeatureMap = engineFeatures.ToDictionary(static f => f.Name, StringComparer.OrdinalIgnoreCase);
             EngineExperimentalFeatureMap = new ReadOnlyDictionary<string, ExperimentalFeature>(engineExpFeatureMap);
 
             // Initialize the readonly hashset 'EnabledExperimentalFeatureNames'.
@@ -160,6 +140,20 @@ static ExperimentalFeature()
             EnabledExperimentalFeatureNames = ProcessEnabledFeatures(enabledFeatures);
         }
 
+        /// <summary>
+        /// We need to notify which features were not enabled.
+        /// </summary>
+        private static void SendTelemetryForDeactivatedFeatures(ReadOnlyBag<string> enabledFeatures)
+        {
+            foreach (var feature in EngineExperimentalFeatures)
+            {
+                if (!enabledFeatures.Contains(feature.Name))
+                {
+                    ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ExperimentalEngineFeatureDeactivation, feature.Name);
+                }
+            }
+        }
+
         /// <summary>
         /// Process the array of enabled feature names retrieved from configuration.
         /// Ignore invalid feature names and unavailable engine feature names, and
@@ -167,7 +161,10 @@ static ExperimentalFeature()
         /// </summary>
         private static ReadOnlyBag<string> ProcessEnabledFeatures(string[] enabledFeatures)
         {
-            if (enabledFeatures.Length == 0) { return ReadOnlyBag<string>.Empty; }
+            if (enabledFeatures.Length == 0)
+            {
+                return ReadOnlyBag<string>.Empty;
+            }
 
             var list = new List<string>(enabledFeatures.Length);
             foreach (string name in enabledFeatures)
@@ -198,7 +195,9 @@ private static ReadOnlyBag<string> ProcessEnabledFeatures(string[] enabledFeatur
                 }
             }
 
-            return new ReadOnlyBag<string>(new HashSet<string>(list, StringComparer.OrdinalIgnoreCase));
+            ReadOnlyBag<string> features = new(new HashSet<string>(list, StringComparer.OrdinalIgnoreCase));
+            SendTelemetryForDeactivatedFeatures(features);
+            return features;
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/GetExperimentalFeatureCommand.cs b/src/System.Management.Automation/engine/ExperimentalFeature/GetExperimentalFeatureCommand.cs
index d87669000de..38525cb54ef 100644
--- a/src/System.Management.Automation/engine/ExperimentalFeature/GetExperimentalFeatureCommand.cs
+++ b/src/System.Management.Automation/engine/ExperimentalFeature/GetExperimentalFeatureCommand.cs
@@ -88,17 +88,26 @@ private IEnumerable<string> GetValidModuleFiles(HashSet<string> moduleNamesToFin
             foreach (string path in ModuleIntrinsics.GetModulePath(includeSystemModulePath: false, Context))
             {
                 string uniquePath = path.TrimEnd(Utils.Separators.Directory);
-                if (!modulePaths.Add(uniquePath)) { continue; }
+                if (!modulePaths.Add(uniquePath))
+                {
+                    continue;
+                }
 
                 foreach (string moduleFile in ModuleUtils.GetDefaultAvailableModuleFiles(uniquePath))
                 {
                     // We only care about module manifest files because that's where experimental features are declared.
-                    if (!moduleFile.EndsWith(StringLiterals.PowerShellDataFileExtension, StringComparison.OrdinalIgnoreCase)) { continue; }
+                    if (!moduleFile.EndsWith(StringLiterals.PowerShellDataFileExtension, StringComparison.OrdinalIgnoreCase))
+                    {
+                        continue;
+                    }
 
                     if (moduleNamesToFind != null)
                     {
                         string currentModuleName = ModuleIntrinsics.GetModuleName(moduleFile);
-                        if (!moduleNamesToFind.Contains(currentModuleName)) { continue; }
+                        if (!moduleNamesToFind.Contains(currentModuleName))
+                        {
+                            continue;
+                        }
                     }
 
                     yield return moduleFile;
diff --git a/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs b/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs
index ac99127ab29..06271728e00 100644
--- a/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs
+++ b/src/System.Management.Automation/engine/ExtendedTypeSystemException.cs
@@ -10,7 +10,6 @@ namespace System.Management.Automation
     /// <summary>
     /// Defines the exception thrown for all Extended type system related errors.
     /// </summary>
-    [Serializable]
     public class ExtendedTypeSystemException : RuntimeException
     {
         #region ctor
@@ -36,7 +35,7 @@ public ExtendedTypeSystemException(string message)
         /// Initializes a new instance of ExtendedTypeSystemException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public ExtendedTypeSystemException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -67,8 +66,9 @@ internal ExtendedTypeSystemException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected ExtendedTypeSystemException(SerializationInfo info, StreamingContext context)
-                : base(info, context)
+            : base(info, context)
         {
         }
         #endregion Serialization
@@ -80,7 +80,6 @@ protected ExtendedTypeSystemException(SerializationInfo info, StreamingContext c
     /// <summary>
     /// Defines the exception thrown for Method related errors.
     /// </summary>
-    [Serializable]
     public class MethodException : ExtendedTypeSystemException
     {
         internal const string MethodArgumentCountExceptionMsg = "MethodArgumentCountException";
@@ -112,7 +111,7 @@ public MethodException(string message)
         /// Initializes a new instance of MethodException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public MethodException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -140,9 +139,10 @@ internal MethodException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected MethodException(SerializationInfo info, StreamingContext context)
-                : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -153,7 +153,6 @@ protected MethodException(SerializationInfo info, StreamingContext context)
     /// <summary>
     /// Defines the exception thrown for Method invocation exceptions.
     /// </summary>
-    [Serializable]
     public class MethodInvocationException : MethodException
     {
         internal const string MethodInvocationExceptionMsg = "MethodInvocationException";
@@ -183,7 +182,7 @@ public MethodInvocationException(string message)
         /// Initializes a new instance of MethodInvocationException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public MethodInvocationException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -211,9 +210,10 @@ internal MethodInvocationException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected MethodInvocationException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -224,7 +224,6 @@ protected MethodInvocationException(SerializationInfo info, StreamingContext con
     /// <summary>
     /// Defines the exception thrown for errors getting the value of properties.
     /// </summary>
-    [Serializable]
     public class GetValueException : ExtendedTypeSystemException
     {
         internal const string GetWithoutGetterExceptionMsg = "GetWithoutGetterException";
@@ -252,7 +251,7 @@ public GetValueException(string message)
         /// Initializes a new instance of GetValueException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public GetValueException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -280,9 +279,10 @@ internal GetValueException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected GetValueException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -293,7 +293,6 @@ protected GetValueException(SerializationInfo info, StreamingContext context)
     /// <summary>
     /// Defines the exception thrown for errors getting the value of properties.
     /// </summary>
-    [Serializable]
     public class PropertyNotFoundException : ExtendedTypeSystemException
     {
         #region ctor
@@ -319,7 +318,7 @@ public PropertyNotFoundException(string message)
         /// Initializes a new instance of GetValueException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public PropertyNotFoundException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -347,12 +346,12 @@ internal PropertyNotFoundException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PropertyNotFoundException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
-
         #endregion ctor
 
     }
@@ -360,7 +359,6 @@ protected PropertyNotFoundException(SerializationInfo info, StreamingContext con
     /// <summary>
     /// Defines the exception thrown for exceptions thrown by property getters.
     /// </summary>
-    [Serializable]
     public class GetValueInvocationException : GetValueException
     {
         internal const string ExceptionWhenGettingMsg = "ExceptionWhenGetting";
@@ -388,7 +386,7 @@ public GetValueInvocationException(string message)
         /// Initializes a new instance of GetValueInvocationException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public GetValueInvocationException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -416,9 +414,10 @@ internal GetValueInvocationException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected GetValueInvocationException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -429,7 +428,6 @@ protected GetValueInvocationException(SerializationInfo info, StreamingContext c
     /// <summary>
     /// Defines the exception thrown for errors setting the value of properties.
     /// </summary>
-    [Serializable]
     public class SetValueException : ExtendedTypeSystemException
     {
         #region ctor
@@ -455,7 +453,7 @@ public SetValueException(string message)
         /// Initializes a new instance of SetValueException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public SetValueException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -483,9 +481,10 @@ internal SetValueException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected SetValueException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -496,7 +495,6 @@ protected SetValueException(SerializationInfo info, StreamingContext context)
     /// <summary>
     /// Defines the exception thrown for exceptions thrown by property setters.
     /// </summary>
-    [Serializable]
     public class SetValueInvocationException : SetValueException
     {
         #region ctor
@@ -522,7 +520,7 @@ public SetValueInvocationException(string message)
         /// Initializes a new instance of SetValueInvocationException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public SetValueInvocationException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -550,9 +548,10 @@ internal SetValueInvocationException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected SetValueInvocationException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
@@ -563,40 +562,19 @@ protected SetValueInvocationException(SerializationInfo info, StreamingContext c
     /// <summary>
     /// Defines the exception thrown for type conversion errors.
     /// </summary>
-    [Serializable]
     public class PSInvalidCastException : InvalidCastException, IContainsErrorRecord
     {
-        #region Serialization
-
-        /// <summary>
-        /// Populates a <see cref="System.Runtime.Serialization.SerializationInfo"/> with the
-        /// data needed to serialize the PSInvalidCastException object.
-        /// </summary>
-        /// <param name="info">The <see cref="System.Runtime.Serialization.SerializationInfo"/> to populate with data.</param>
-        /// <param name="context">The destination for this serialization.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            info.AddValue("ErrorId", _errorId);
-        }
         /// <summary>
         /// Initializes a new instance of PSInvalidCastException with serialization parameters.
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PSInvalidCastException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            _errorId = info.GetString("ErrorId");
+            throw new NotSupportedException();
         }
 
-        #endregion Serialization
-
         /// <summary>
         /// Initializes a new instance of PSInvalidCastException with the message set
         /// to typeof(PSInvalidCastException).FullName.
@@ -617,7 +595,7 @@ public PSInvalidCastException(string message)
         /// Initializes a new instance of PSInvalidCastException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public PSInvalidCastException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -647,14 +625,11 @@ public ErrorRecord ErrorRecord
         {
             get
             {
-                if (_errorRecord == null)
-                {
-                    _errorRecord = new ErrorRecord(
-                        new ParentContainsErrorRecordException(this),
-                        _errorId,
-                        ErrorCategory.InvalidArgument,
-                        null);
-                }
+                _errorRecord ??= new ErrorRecord(
+                    new ParentContainsErrorRecordException(this),
+                    _errorId,
+                    ErrorCategory.InvalidArgument,
+                    null);
 
                 return _errorRecord;
             }
diff --git a/src/System.Management.Automation/engine/ExternalScriptInfo.cs b/src/System.Management.Automation/engine/ExternalScriptInfo.cs
index bbd49c76d36..e8c8c2b1d54 100644
--- a/src/System.Management.Automation/engine/ExternalScriptInfo.cs
+++ b/src/System.Management.Automation/engine/ExternalScriptInfo.cs
@@ -14,7 +14,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Provides information for MSH scripts that are directly executable by MSH
+    /// Provides information for scripts that are directly executable by PowerShell
     /// but are not built into the runspace configuration.
     /// </summary>
     public class ExternalScriptInfo : CommandInfo, IScriptCommandInfo
@@ -103,14 +103,21 @@ private void CommonInitialization()
                 // Get the lock down policy with no handle. This only impacts command discovery,
                 // as the real language mode assignment will be done when we read the script
                 // contents.
-                SystemEnforcementMode scriptSpecificPolicy = SystemPolicy.GetLockdownPolicy(_path, null);
-                if (scriptSpecificPolicy != SystemEnforcementMode.Enforce)
+                switch (SystemPolicy.GetLockdownPolicy(_path, null))
                 {
-                    this.DefiningLanguageMode = PSLanguageMode.FullLanguage;
-                }
-                else
-                {
-                    this.DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
+                    case SystemEnforcementMode.None:
+                        DefiningLanguageMode = PSLanguageMode.FullLanguage;
+                        break;
+
+                    case SystemEnforcementMode.Audit:
+                        // For policy audit mode, language mode is set to CL but audit messages are emitted to log
+                        // instead of applying restrictions.
+                        DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
+                        break;
+
+                    case SystemEnforcementMode.Enforce:
+                        DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
+                        break;
                 }
             }
         }
@@ -188,7 +195,10 @@ public override SessionStateEntryVisibility Visibility
         {
             get
             {
-                if (Context == null) return SessionStateEntryVisibility.Public;
+                if (Context == null)
+                {
+                    return SessionStateEntryVisibility.Public;
+                }
 
                 return Context.EngineSessionState.CheckScriptVisibility(_path);
             }
@@ -384,7 +394,7 @@ internal override bool ImplementsDynamicParameters
 
                 // If we got here, there was some sort of parsing exception.  We'll just
                 // ignore it and assume the script does not implement dynamic parameters.
-                // Futhermore, we'll clear out the fields so that the next attempt to
+                // Furthermore, we'll clear out the fields so that the next attempt to
                 // access ScriptBlock will result in an exception that doesn't get ignored.
                 _scriptBlock = null;
                 _scriptContents = null;
@@ -455,15 +465,6 @@ internal uint PSVersionLineNumber
             get { return 0; }
         }
 
-        internal IEnumerable<PSSnapInSpecification> RequiresPSSnapIns
-        {
-            get
-            {
-                var data = GetRequiresData();
-                return data?.RequiresPSSnapIns;
-            }
-        }
-
         /// <summary>
         /// Gets the original contents of the script.
         /// </summary>
@@ -515,33 +516,54 @@ private void ReadScriptContents()
                 {
                     using (FileStream readerStream = new FileStream(_path, FileMode.Open, FileAccess.Read))
                     {
-                        Encoding defaultEncoding = ClrFacade.GetDefaultEncoding();
-                        Microsoft.Win32.SafeHandles.SafeFileHandle safeFileHandle = readerStream.SafeFileHandle;
-
-                        using (StreamReader scriptReader = new StreamReader(readerStream, defaultEncoding))
+                        using (StreamReader scriptReader = new StreamReader(readerStream, Encoding.Default))
                         {
                             _scriptContents = scriptReader.ReadToEnd();
                             _originalEncoding = scriptReader.CurrentEncoding;
 
-                            // Check if this came from a trusted path. If so, set its language mode to FullLanguage.
-                            if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.None)
-                            {
-                                SystemEnforcementMode scriptSpecificPolicy = SystemPolicy.GetLockdownPolicy(_path, safeFileHandle);
-                                if (scriptSpecificPolicy != SystemEnforcementMode.Enforce)
-                                {
-                                    this.DefiningLanguageMode = PSLanguageMode.FullLanguage;
-                                }
-                                else
-                                {
-                                    this.DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
-                                }
-                            }
-                            else
+                            // Check this file against any system wide enforcement policies.
+                            SystemScriptFileEnforcement filePolicyEnforcement = SystemPolicy.GetFilePolicyEnforcement(_path, readerStream);
+                            switch (filePolicyEnforcement)
                             {
-                                if (this.Context != null)
-                                {
-                                    this.DefiningLanguageMode = this.Context.LanguageMode;
-                                }
+                                case SystemScriptFileEnforcement.None:
+                                    if (Context != null)
+                                    {
+                                        DefiningLanguageMode = Context.LanguageMode;
+                                    }
+                                    break;
+
+                                case SystemScriptFileEnforcement.Allow:
+                                    DefiningLanguageMode = PSLanguageMode.FullLanguage;
+                                    break;
+
+                                case SystemScriptFileEnforcement.AllowConstrained:
+                                    DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
+                                    break;
+
+                                case SystemScriptFileEnforcement.AllowConstrainedAudit:
+                                    SystemPolicy.LogWDACAuditMessage(
+                                        context: Context,
+                                        title: SecuritySupportStrings.ExternalScriptWDACLogTitle,
+                                        message: string.Format(Globalization.CultureInfo.CurrentUICulture, SecuritySupportStrings.ExternalScriptWDACLogMessage, _path),
+                                        fqid: "ScriptFileNotTrustedByPolicy");
+                                    // We set the language mode to Constrained Language, even though in policy audit mode no restrictions are applied
+                                    // and instead an audit log message is generated wherever a restriction would be applied.
+                                    DefiningLanguageMode = PSLanguageMode.ConstrainedLanguage;
+                                    break;
+
+                                case SystemScriptFileEnforcement.Block:
+                                    throw new PSSecurityException(
+                                        string.Format(
+                                            Globalization.CultureInfo.CurrentUICulture,
+                                            SecuritySupportStrings.ScriptFileBlockedBySystemPolicy,
+                                            _path));
+
+                                default:
+                                    throw new PSSecurityException(
+                                        string.Format(
+                                            Globalization.CultureInfo.CurrentUICulture,
+                                            SecuritySupportStrings.UnknownSystemScriptFileEnforcement,
+                                            filePolicyEnforcement));
                             }
                         }
                     }
@@ -589,7 +611,6 @@ internal ScriptRequiresSyntaxException(string message)
     /// <summary>
     /// Defines the name and version tuple of a PSSnapin.
     /// </summary>
-    [Serializable]
     public class PSSnapInSpecification
     {
         internal PSSnapInSpecification(string psSnapinName)
diff --git a/src/System.Management.Automation/engine/GetCommandCommand.cs b/src/System.Management.Automation/engine/GetCommandCommand.cs
index 9007bed247c..10e8334021b 100644
--- a/src/System.Management.Automation/engine/GetCommandCommand.cs
+++ b/src/System.Management.Automation/engine/GetCommandCommand.cs
@@ -12,6 +12,7 @@
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
+using static System.Management.Automation.Verbs;
 using Dbg = System.Management.Automation.Diagnostics;
 
 namespace Microsoft.PowerShell.Commands
@@ -71,6 +72,7 @@ public string[] Name
         /// Gets or sets the verb parameter to the cmdlet.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true, ParameterSetName = "CmdletSet")]
+        [ArgumentCompleter(typeof(VerbArgumentCompleter))]
         public string[] Verb
         {
             get
@@ -80,10 +82,7 @@ public string[] Verb
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _verbs = value;
                 _verbPatterns = null;
@@ -106,10 +105,7 @@ public string[] Noun
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _nouns = value;
                 _nounPatterns = null;
@@ -132,10 +128,7 @@ public string[] Module
 
             set
             {
-                if (value == null)
-                {
-                    value = Array.Empty<string>();
-                }
+                value ??= Array.Empty<string>();
 
                 _modules = value;
                 _modulePatterns = null;
@@ -147,6 +140,28 @@ public string[] Module
         private string[] _modules = Array.Empty<string>();
         private bool _isModuleSpecified = false;
 
+        /// <summary>
+        /// Gets or sets the ExcludeModule parameter to the cmdlet.
+        /// </summary>
+        [Parameter()]
+        public string[] ExcludeModule
+        {
+            get
+            {
+                return _excludedModules;
+            }
+
+            set
+            {
+                value ??= Array.Empty<string>();
+
+                _excludedModules = value;
+                _excludedModulePatterns = null;
+            }
+        }
+
+        private string[] _excludedModules = Array.Empty<string>();
+
         /// <summary>
         /// Gets or sets the FullyQualifiedModule parameter to the cmdlet.
         /// </summary>
@@ -287,10 +302,7 @@ public string[] ParameterName
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 _parameterNames = value;
                 _parameterNameWildcards = SessionStateUtilities.CreateWildcardsFromStrings(
@@ -317,10 +329,7 @@ public PSTypeName[] ParameterType
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 // if '...CimInstance#Win32_Process' is specified, then exclude '...CimInstance'
                 List<PSTypeName> filteredParameterTypes = new List<PSTypeName>(value.Length);
@@ -353,7 +362,14 @@ public PSTypeName[] ParameterType
         [Parameter(ParameterSetName = "AllCommandSet")]
         public SwitchParameter UseFuzzyMatching { get; set; }
 
-        private readonly List<CommandScore> _commandScores = new List<CommandScore>();
+        /// <summary>
+        /// Gets or sets the minimum fuzzy matching distance.
+        /// </summary>
+        [Parameter(ParameterSetName = "AllCommandSet")]
+        public uint FuzzyMinimumDistance { get; set; } = 5;
+
+        private FuzzyMatcher _fuzzyMatcher;
+        private List<CommandScore> _commandScores;
 
         /// <summary>
         /// Gets or sets the parameter that determines if return cmdlets based on abbreviation expansion.
@@ -375,7 +391,11 @@ protected override void BeginProcessing()
 #if LEGACYTELEMETRY
             _timer.Start();
 #endif
-            base.BeginProcessing();
+            if (UseFuzzyMatching)
+            {
+                _fuzzyMatcher = new FuzzyMatcher(FuzzyMinimumDistance);
+                _commandScores = new List<CommandScore>();
+            }
 
             if (ShowCommandInfo.IsPresent && Syntax.IsPresent)
             {
@@ -405,10 +425,8 @@ protected override void ProcessRecord()
             }
 
             // Initialize the module patterns
-            if (_modulePatterns == null)
-            {
-                _modulePatterns = SessionStateUtilities.CreateWildcardsFromStrings(Module, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
-            }
+            _modulePatterns ??= SessionStateUtilities.CreateWildcardsFromStrings(Module, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
+            _excludedModulePatterns ??= SessionStateUtilities.CreateWildcardsFromStrings(ExcludeModule, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
 
             switch (ParameterSetName)
             {
@@ -487,7 +505,7 @@ protected override void EndProcessing()
             if ((_names == null) || (_nameContainsWildcard))
             {
                 // Use the stable sorting to sort the result list
-                _accumulatedResults = _accumulatedResults.OrderBy(a => a, new CommandInfoComparer()).ToList();
+                _accumulatedResults = _accumulatedResults.Order(new CommandInfoComparer()).ToList();
             }
 
             OutputResultsHelper(_accumulatedResults);
@@ -514,17 +532,17 @@ protected override void EndProcessing()
 
         private void OutputResultsHelper(IEnumerable<CommandInfo> results)
         {
-            CommandOrigin origin = this.MyInvocation.CommandOrigin;
+            CommandOrigin origin = MyInvocation.CommandOrigin;
 
             if (UseFuzzyMatching)
             {
-                results = _commandScores.OrderBy(x => x.Score).Select(x => x.Command).ToList();
+                _commandScores = _commandScores.OrderBy(static x => x.Score).ToList();
+                results = _commandScores.Select(static x => x.Command);
             }
 
             int count = 0;
             foreach (CommandInfo result in results)
             {
-                count += 1;
                 // Only write the command if it is visible to the requestor
                 if (SessionState.IsVisible(origin, result))
                 {
@@ -549,11 +567,21 @@ private void OutputResultsHelper(IEnumerable<CommandInfo> results)
                         }
                         else
                         {
-                            // Write output as normal command info object.
-                            WriteObject(result);
+                            if (UseFuzzyMatching)
+                            {
+                                PSObject obj = new PSObject(result);
+                                obj.Properties.Add(new PSNoteProperty("Score", _commandScores[count].Score));
+                                WriteObject(obj);
+                            }
+                            else
+                            {
+                                WriteObject(result);
+                            }
                         }
                     }
                 }
+
+                count += 1;
             }
 
 #if LEGACYTELEMETRY
@@ -561,7 +589,7 @@ private void OutputResultsHelper(IEnumerable<CommandInfo> results)
 
             // No telemetry here - capturing the name of a command which we are not familiar with
             // may be confidential customer information
-            // We want telementry on commands people look for but don't exist - this should give us an idea
+            // We want telemetry on commands people look for but don't exist - this should give us an idea
             // what sort of commands people expect but either don't exist, or maybe should be installed by default.
             // The StartsWith is to avoid logging telemetry when suggestion mode checks the
             // current directory for scripts/exes in the current directory and '.' is not in the path.
@@ -650,7 +678,7 @@ private PSObject GetSyntaxObject(CommandInfo command)
         /// <summary>
         /// The comparer to sort CommandInfo objects in the result list.
         /// </summary>
-        private class CommandInfoComparer : IComparer<CommandInfo>
+        private sealed class CommandInfoComparer : IComparer<CommandInfo>
         {
             /// <summary>
             /// Compare two CommandInfo objects first by their command types, and if they
@@ -691,18 +719,19 @@ private bool IsNounVerbMatch(CommandInfo command)
 
             do // false loop
             {
-                if (_verbPatterns == null)
-                {
-                    _verbPatterns = SessionStateUtilities.CreateWildcardsFromStrings(Verb, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
-                }
+                _verbPatterns ??= SessionStateUtilities.CreateWildcardsFromStrings(Verb, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
 
-                if (_nounPatterns == null)
-                {
-                    _nounPatterns = SessionStateUtilities.CreateWildcardsFromStrings(Noun, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
-                }
+                _nounPatterns ??= SessionStateUtilities.CreateWildcardsFromStrings(Noun, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
 
                 if (!string.IsNullOrEmpty(command.ModuleName))
                 {
+                    if (_excludedModulePatterns is not null
+                        && _excludedModulePatterns.Count > 0
+                        && SessionStateUtilities.MatchesAnyWildcardPattern(command.ModuleName, _excludedModulePatterns, true))
+                    {
+                        break;
+                    }
+
                     if (_isFullyQualifiedModuleSpecified)
                     {
                         if (!_moduleSpecifications.Any(
@@ -788,11 +817,6 @@ private void AccumulateMatchingCommands(IEnumerable<string> commandNames)
                 options |= SearchResolutionOptions.UseAbbreviationExpansion;
             }
 
-            if (UseFuzzyMatching)
-            {
-                options |= SearchResolutionOptions.FuzzyMatch;
-            }
-
             if ((this.CommandType & CommandTypes.Alias) != 0)
             {
                 options |= SearchResolutionOptions.ResolveAliasPatterns;
@@ -865,24 +889,25 @@ private void AccumulateMatchingCommands(IEnumerable<string> commandNames)
                                 IEnumerable<CommandInfo> commands;
                                 if (UseFuzzyMatching)
                                 {
-                                    foreach (var commandScore in System.Management.Automation.Internal.ModuleUtils.GetFuzzyMatchingCommands(
+                                    foreach (var commandScore in ModuleUtils.GetFuzzyMatchingCommands(
                                         plainCommandName,
-                                        this.Context,
-                                        this.MyInvocation.CommandOrigin,
+                                        Context,
+                                        MyInvocation.CommandOrigin,
+                                        _fuzzyMatcher,
                                         rediscoverImportedModules: true,
                                         moduleVersionRequired: _isFullyQualifiedModuleSpecified))
                                     {
                                         _commandScores.Add(commandScore);
                                     }
 
-                                    commands = _commandScores.Select(x => x.Command).ToList();
+                                    commands = _commandScores.Select(static x => x.Command);
                                 }
                                 else
                                 {
-                                    commands = System.Management.Automation.Internal.ModuleUtils.GetMatchingCommands(
+                                    commands = ModuleUtils.GetMatchingCommands(
                                         plainCommandName,
-                                        this.Context,
-                                        this.MyInvocation.CommandOrigin,
+                                        Context,
+                                        MyInvocation.CommandOrigin,
                                         rediscoverImportedModules: true,
                                         moduleVersionRequired: _isFullyQualifiedModuleSpecified,
                                         useAbbreviationExpansion: UseAbbreviationExpansion);
@@ -943,12 +968,12 @@ private void AccumulateMatchingCommands(IEnumerable<string> commandNames)
 
         private bool FindCommandForName(SearchResolutionOptions options, string commandName, bool isPattern, bool emitErrors, ref int currentCount, out bool isDuplicate)
         {
-            CommandSearcher searcher =
-                    new CommandSearcher(
-                        commandName,
-                        options,
-                        this.CommandType,
-                        this.Context);
+            var searcher = new CommandSearcher(
+                commandName,
+                options,
+                CommandType,
+                Context,
+                _fuzzyMatcher);
 
             bool resultFound = false;
             isDuplicate = false;
@@ -1036,8 +1061,10 @@ private bool FindCommandForName(SearchResolutionOptions options, string commandN
 
                         if (UseFuzzyMatching)
                         {
-                            int score = FuzzyMatcher.GetDamerauLevenshteinDistance(current.Name, commandName);
-                            _commandScores.Add(new CommandScore(current, score));
+                            if (_fuzzyMatcher.IsFuzzyMatch(current.Name, commandName, out int score))
+                            {
+                                _commandScores.Add(new CommandScore(current, score));
+                            }
                         }
 
                         _accumulatedResults.Add(current);
@@ -1159,10 +1186,7 @@ private bool IsParameterMatch(CommandInfo commandInfo)
                 return true;
             }
 
-            if (_matchedParameterNames == null)
-            {
-                _matchedParameterNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-            }
+            _matchedParameterNames ??= new HashSet<string>(StringComparer.OrdinalIgnoreCase);
 
             IEnumerable<ParameterMetadata> commandParameters = null;
             try
@@ -1277,6 +1301,13 @@ private bool IsCommandMatch(ref CommandInfo current, out bool isDuplicate)
                 }
                 else
                 {
+                    if (_excludedModulePatterns is not null
+                        && _excludedModulePatterns.Count > 0
+                        && SessionStateUtilities.MatchesAnyWildcardPattern(current.ModuleName, _excludedModulePatterns, true))
+                    {
+                        return false;
+                    }
+
                     if (_isFullyQualifiedModuleSpecified)
                     {
                         bool foundModuleMatch = false;
@@ -1536,6 +1567,7 @@ private bool IsCommandInResult(CommandInfo command)
         private Collection<WildcardPattern> _verbPatterns;
         private Collection<WildcardPattern> _nounPatterns;
         private Collection<WildcardPattern> _modulePatterns;
+        private Collection<WildcardPattern> _excludedModulePatterns;
 
 #if LEGACYTELEMETRY
         private Stopwatch _timer = new Stopwatch();
@@ -1662,40 +1694,50 @@ private static PSObject GetParameterType(Type parameterType)
     }
 
     /// <summary>
+    /// Provides argument completion for Noun parameter.
     /// </summary>
     public class NounArgumentCompleter : IArgumentCompleter
     {
+        /// </summary>
+        /// Returns completion results for Noun parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of completion results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters) => CompletionHelpers.GetMatchingResults(
+                wordToComplete,
+                possibleCompletionValues: GetCommandNouns(fakeBoundParameters));
+
         /// <summary>
+        /// Get sorted set of command nouns using Get-Command.
         /// </summary>
-        public IEnumerable<CompletionResult> CompleteArgument(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>Sorted set of command nouns.</returns>
+        private static SortedSet<string> GetCommandNouns(IDictionary fakeBoundParameters)
         {
-            if (fakeBoundParameters == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(fakeBoundParameters));
-            }
-
-            var commandInfo = new CmdletInfo("Get-Command", typeof(GetCommandCommand));
-            var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace)
-                .AddCommand(commandInfo)
-                .AddParameter("Noun", wordToComplete + "*");
-
-            if (fakeBoundParameters.Contains("Module"))
-            {
-                ps.AddParameter("Module", fakeBoundParameters["Module"]);
-            }
+            Collection<CommandInfo> commands = CompletionCompleters.GetCommandInfo(fakeBoundParameters, "Module", "Verb");
+            SortedSet<string> nouns = new(StringComparer.OrdinalIgnoreCase);
 
-            HashSet<string> nouns = new HashSet<string>();
-            var results = ps.Invoke<CommandInfo>();
-            foreach (var result in results)
+            foreach (CommandInfo command in commands)
             {
-                var dash = result.Name.IndexOf('-');
-                if (dash != -1)
+                string commandName = command.Name;
+                int dashIndex = commandName.IndexOf('-');
+                if (dashIndex != -1)
                 {
-                    nouns.Add(result.Name.Substring(dash + 1));
+                    string noun = commandName.Substring(dashIndex + 1);
+                    nouns.Add(noun);
                 }
             }
 
-            return nouns.OrderBy(noun => noun).Select(noun => new CompletionResult(noun, noun, CompletionResultType.Text, noun));
+            return nouns;
         }
     }
 }
diff --git a/src/System.Management.Automation/engine/ICommandRuntime.cs b/src/System.Management.Automation/engine/ICommandRuntime.cs
index 6f0b3ce9d57..49b1104e047 100644
--- a/src/System.Management.Automation/engine/ICommandRuntime.cs
+++ b/src/System.Management.Automation/engine/ICommandRuntime.cs
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
+
 using System.Management.Automation.Host;
 
 namespace System.Management.Automation
@@ -13,8 +15,8 @@ namespace System.Management.Automation
     /// When a cmdlet is instantiated and run directly, all calls to the stream APIs will be proxied
     /// through to an instance of this class. For example, when a cmdlet calls WriteObject, the
     /// WriteObject implementation on the instance of the class implementing this interface will be
-    /// called. The Monad implementation provides a default implementation of this class for use with
-    /// standalone cmdlets as well as the implementation provided for running in the monad engine itself.
+    /// called. PowerShell implementation provides a default implementation of this class for use with
+    /// standalone cmdlets as well as the implementation provided for running in the engine itself.
     ///
     /// If you do want to run Cmdlet instances standalone and capture their output with more
     /// fidelity than is provided for with the default implementation, then you should create your own
@@ -26,7 +28,7 @@ public interface ICommandRuntime
         /// <summary>
         /// Returns an instance of the PSHost implementation for this environment.
         /// </summary>
-        PSHost Host { get; }
+        PSHost? Host { get; }
         #region Write
         /// <summary>
         /// Display debug information.
@@ -65,7 +67,7 @@ public interface ICommandRuntime
         /// When the cmdlet wants to write a single object out, it will call this
         /// API. It is up to the implementation to decide what to do with these objects.
         /// </remarks>
-        void WriteObject(object sendToPipeline);
+        void WriteObject(object? sendToPipeline);
 
         /// <summary>
         /// Called to write one or more objects to the output pipe.
@@ -83,7 +85,7 @@ public interface ICommandRuntime
         ///  When the cmdlet wants to write multiple objects out, it will call this
         /// API. It is up to the implementation to decide what to do with these objects.
         /// </remarks>
-        void WriteObject(object sendToPipeline, bool enumerateCollection);
+        void WriteObject(object? sendToPipeline, bool enumerateCollection);
 
         /// <summary>
         /// Called by the cmdlet to display progress information.
@@ -172,7 +174,7 @@ public interface ICommandRuntime
         /// pipeline execution log.
         ///
         /// If LogPipelineExecutionDetail is turned on, this information will be written
-        /// to monad log under log category "Pipeline execution detail"
+        /// to PowerShell log under log category "Pipeline execution detail"
         /// </remarks>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.WriteDebug(string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.WriteVerbose(string)"/>
@@ -219,7 +221,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string, out ShouldProcessReason)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string,ref bool,ref bool)"/>
-        bool ShouldProcess(string target);
+        bool ShouldProcess(string? target);
 
         /// <summary>
         /// Called by a cmdlet to confirm the operation with the user.  Cmdlets which make changes
@@ -265,7 +267,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string, out ShouldProcessReason)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string,ref bool,ref bool)"/>
-        bool ShouldProcess(string target, string action);
+        bool ShouldProcess(string? target, string? action);
 
         /// <summary>
         /// Called by a cmdlet to confirm the operation with the user.  Cmdlets which make changes
@@ -319,7 +321,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string, out ShouldProcessReason)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string,ref bool,ref bool)"/>
-        bool ShouldProcess(string verboseDescription, string verboseWarning, string caption);
+        bool ShouldProcess(string? verboseDescription, string? verboseWarning, string? caption);
 
         /// <summary>
         /// Called by a cmdlet to confirm the operation with the user.  Cmdlets which make changes
@@ -379,7 +381,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldContinue(string,string,ref bool,ref bool)"/>
-        bool ShouldProcess(string verboseDescription, string verboseWarning, string caption, out ShouldProcessReason shouldProcessReason);
+        bool ShouldProcess(string? verboseDescription, string? verboseWarning, string? caption, out ShouldProcessReason shouldProcessReason);
 
         /// <summary>
         /// Called by a cmdlet to confirm an operation or grouping of operations with the user.
@@ -436,7 +438,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string)"/>
-        bool ShouldContinue(string query, string caption);
+        bool ShouldContinue(string? query, string? caption);
 
         /// <summary>
         /// Called to confirm an operation or grouping of operations with the user.
@@ -455,11 +457,11 @@ public interface ICommandRuntime
         /// It may be displayed by some hosts, but not all.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <returns>
@@ -501,7 +503,7 @@ public interface ICommandRuntime
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.ShouldProcess(string,string,string)"/>
-        bool ShouldContinue(string query, string caption, ref bool yesToAll, ref bool noToAll);
+        bool ShouldContinue(string? query, string? caption, ref bool yesToAll, ref bool noToAll);
 
         #endregion Should
 
@@ -515,7 +517,7 @@ public interface ICommandRuntime
         /// Gets an object that surfaces the current PowerShell transaction.
         /// When this object is disposed, PowerShell resets the active transaction.
         /// </summary>
-        PSTransactionContext CurrentPSTransaction { get; }
+        PSTransactionContext? CurrentPSTransaction { get; }
         #endregion Transaction Support
 
         #region Misc
@@ -549,6 +551,7 @@ public interface ICommandRuntime
         /// if any information is to be added. It should encapsulate the
         /// error record into an exception and then throw that exception.
         /// </remarks>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         void ThrowTerminatingError(ErrorRecord errorRecord);
         #endregion ThrowTerminatingError
         #endregion misc
@@ -560,7 +563,6 @@ public interface ICommandRuntime
     /// execute an instance of a Cmdlet. ICommandRuntime2 extends the ICommandRuntime interface
     /// by adding support for the informational data stream.
     /// </summary>
-#nullable enable
     public interface ICommandRuntime2 : ICommandRuntime
     {
         /// <summary>
@@ -590,11 +592,11 @@ public interface ICommandRuntime2 : ICommandRuntime
         /// the default option selected in the selection menu is 'No'.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
diff --git a/src/System.Management.Automation/engine/InformationRecord.cs b/src/System.Management.Automation/engine/InformationRecord.cs
index 310c34a8809..87a3d9cda9d 100644
--- a/src/System.Management.Automation/engine/InformationRecord.cs
+++ b/src/System.Management.Automation/engine/InformationRecord.cs
@@ -14,7 +14,7 @@ namespace System.Management.Automation
     /// which, according to host or user preference, forwards that information on to the host for rendering to the user.
     /// </remarks>
     /// <seealso cref="System.Management.Automation.Cmdlet.WriteInformation(object, string[])"/>
-    [DataContract()]
+    [DataContract]
     public class InformationRecord
     {
         /// <summary>
@@ -96,15 +96,13 @@ public string User
         {
             get
             {
-                if (this._user == null)
-                {
-                    // domain\user on Windows, just user on Unix
+                // domain\user on Windows, just user on Unix
+                this._user ??=
 #if UNIX
-                    this._user = Environment.UserName;
+                    Environment.UserName;
 #else
-                    this._user = Environment.UserDomainName + "\\" + Environment.UserName;
+                    Environment.UserDomainName + "\\" + Environment.UserName;
 #endif
-                }
 
                 return _user;
             }
diff --git a/src/System.Management.Automation/engine/InitialSessionState.cs b/src/System.Management.Automation/engine/InitialSessionState.cs
index 257cb79ce7b..a6d50f47443 100644
--- a/src/System.Management.Automation/engine/InitialSessionState.cs
+++ b/src/System.Management.Automation/engine/InitialSessionState.cs
@@ -44,22 +44,28 @@ internal static void Init()
 
             // We shouldn't create too many tasks.
 #if !UNIX
-            // Amsi initialize can be a little slow
+            // Amsi initialize can be a little slow.
             Task.Run(() => AmsiUtils.WinScanContent(content: string.Empty, sourceMetadata: string.Empty, warmUp: true));
 #endif
+            // Initialize the types 'Compiler', 'CachedReflectionInfo', and 'ExpressionCache'.
+            // Their type initializers do a lot of reflection operations.
+            // We will access 'Compiler' members when creating the first session state.
+            Task.Run(() => _ = Compiler.DottedLocalsTupleType);
 
             // One other task for other stuff that's faster, but still a little slow.
             Task.Run(() =>
             {
-                // Loading the resources for System.Management.Automation can be expensive, so force that to
-                // happen early on a background thread.
+                // Loading the resources for System.Management.Automation can be expensive,
+                // so force that to happen early on a background thread.
                 _ = RunspaceInit.OutputEncodingDescription;
 
                 // This will init some tables and could load some assemblies.
-                _ = TypeAccelerators.builtinTypeAccelerators;
+                // We will access 'LanguagePrimitives' when binding built-in variables for the Runspace.
+                LanguagePrimitives.GetEnumerator(null);
 
                 // This will init some tables and could load some assemblies.
-                LanguagePrimitives.GetEnumerator(null);
+                // We will access 'TypeAccelerators' when auto-loading the PSReadLine module, which happens last.
+                _ = TypeAccelerators.builtinTypeAccelerators;
             });
         }
     }
@@ -410,7 +416,7 @@ public SessionStateAssemblyEntry(string name)
         /// <returns>The cloned object.</returns>
         public override InitialSessionStateEntry Clone()
         {
-            SessionStateAssemblyEntry entry = new SessionStateAssemblyEntry(Name, FileName);
+            var entry = new SessionStateAssemblyEntry(Name, FileName);
             entry.SetPSSnapIn(this.PSSnapIn);
             entry.SetModule(this.Module);
             return entry;
@@ -646,7 +652,7 @@ public override InitialSessionStateEntry Clone()
         public string Description { get; } = string.Empty;
 
         /// <summary>
-        /// Options controling scope visibility and setability for this entry.
+        /// Options controlling scope visibility and setability for this entry.
         /// </summary>
         public ScopedItemOptions Options { get; } = ScopedItemOptions.None;
     }
@@ -803,7 +809,7 @@ internal void SetHelpFile(string help)
         internal ScriptBlock ScriptBlock { get; set; }
 
         /// <summary>
-        /// Options controling scope visibility and setability for this entry.
+        /// Options controlling scope visibility and setability for this entry.
         /// </summary>
         public ScopedItemOptions Options { get; } = ScopedItemOptions.None;
 
@@ -974,10 +980,7 @@ public InitialSessionStateEntryCollection()
         /// <param name="items"></param>
         public InitialSessionStateEntryCollection(IEnumerable<T> items)
         {
-            if (items == null)
-            {
-                throw new ArgumentNullException(nameof(items));
-            }
+            ArgumentNullException.ThrowIfNull(items);
 
             _internalCollection = new Collection<T>();
 
@@ -1148,10 +1151,7 @@ public void Clear()
         /// <param name="type">The type of object to remove, can be null to remove any type.</param>
         public void Remove(string name, object type)
         {
-            if (name == null)
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
             lock (_syncObject)
             {
@@ -1186,10 +1186,7 @@ public void Remove(string name, object type)
         /// <param name="item">The item to add...</param>
         public void Add(T item)
         {
-            if (item == null)
-            {
-                throw new ArgumentNullException(nameof(item));
-            }
+            ArgumentNullException.ThrowIfNull(item);
 
             lock (_syncObject)
             {
@@ -1203,10 +1200,7 @@ public void Add(T item)
         /// <param name="items"></param>
         public void Add(IEnumerable<T> items)
         {
-            if (items == null)
-            {
-                throw new ArgumentNullException(nameof(items));
-            }
+            ArgumentNullException.ThrowIfNull(items);
 
             lock (_syncObject)
             {
@@ -1312,7 +1306,7 @@ private static void MakeDisallowedEntriesPrivate<T>(InitialSessionStateEntryColl
         /// Creates an initial session state from a PSSC configuration file.
         /// </summary>
         /// <param name="path">The path to the PSSC session configuration file.</param>
-        /// <returns></returns>
+        /// <returns>InitialSessionState object.</returns>
         public static InitialSessionState CreateFromSessionConfigurationFile(string path)
         {
             return CreateFromSessionConfigurationFile(path, null);
@@ -1327,10 +1321,48 @@ public static InitialSessionState CreateFromSessionConfigurationFile(string path
         /// target session. If you have a WindowsPrincipal for a user, for example, create a Function that
         /// checks windowsPrincipal.IsInRole().
         /// </param>
-        /// <returns></returns>
-        public static InitialSessionState CreateFromSessionConfigurationFile(string path, Func<string, bool> roleVerifier)
+        /// <returns>InitialSessionState object.</returns>
+        public static InitialSessionState CreateFromSessionConfigurationFile(
+            string path,
+            Func<string, bool> roleVerifier)
+        {
+            return CreateFromSessionConfigurationFile(path, roleVerifier, validateFile: false);
+        }
+
+        /// <summary>
+        /// Creates an initial session state from a PSSC configuration file.
+        /// </summary>
+        /// <param name="path">The path to the PSSC session configuration file.</param>
+        /// <param name="roleVerifier">
+        /// The verifier that PowerShell should call to determine if groups in the Role entry apply to the
+        /// target session. If you have a WindowsPrincipal for a user, for example, create a Function that
+        /// checks windowsPrincipal.IsInRole().
+        /// </param>
+        /// <param name="validateFile">Validates the file contents for supported SessionState options.</param>
+        /// <returns>InitialSessionState object.</returns>
+        public static InitialSessionState CreateFromSessionConfigurationFile(
+            string path,
+            Func<string, bool> roleVerifier,
+            bool validateFile)
         {
-            Remoting.DISCPowerShellConfiguration discConfiguration = new Remoting.DISCPowerShellConfiguration(path, roleVerifier);
+            if (path is null)
+            {
+                throw new PSArgumentNullException(nameof(path));
+            }
+
+            if (!File.Exists(path))
+            {
+                throw new PSInvalidOperationException(
+                    StringUtil.Format(ConsoleInfoErrorStrings.ConfigurationFileDoesNotExist, path));
+            }
+
+            if (!path.EndsWith(".pssc", StringComparison.OrdinalIgnoreCase))
+            {
+                throw new PSInvalidOperationException(
+                    StringUtil.Format(ConsoleInfoErrorStrings.NotConfigurationFile, path));
+            }
+
+            Remoting.DISCPowerShellConfiguration discConfiguration = new Remoting.DISCPowerShellConfiguration(path, roleVerifier, validateFile);
             return discConfiguration.GetInitialSessionState(null);
         }
 
@@ -1434,9 +1466,6 @@ private static InitialSessionState CreateRestrictedForRemoteServer()
             return iss;
         }
 
-        // Porting note: moved to Platform so we have one list to maintain
-        private static readonly string[] s_PSCoreFormatFileNames = Platform.FormatFileNames.ToArray();
-
         private static void IncludePowerShellCoreFormats(InitialSessionState iss)
         {
             string psHome = Utils.DefaultPowerShellAppBase;
@@ -1446,7 +1475,7 @@ private static void IncludePowerShellCoreFormats(InitialSessionState iss)
             }
 
             iss.Formats.Clear();
-            foreach (var coreFormat in s_PSCoreFormatFileNames)
+            foreach (var coreFormat in Platform.FormatFileNames)
             {
                 iss.Formats.Add(new SessionStateFormatEntry(Path.Combine(psHome, coreFormat)));
             }
@@ -1477,7 +1506,7 @@ public static InitialSessionState Create()
             // be causing test failures - i suspect due to lack test isolation - brucepay Mar 06/2008
 #if false
             // Add the default variables and make them private...
-            iss.Variables.Add(BuiltInVariables);
+            iss.AddVariables(BuiltInVariables);
             foreach (SessionStateVariableEntry v in iss.Variables)
             {
                 v.Visibility = SessionStateEntryVisibility.Private;
@@ -1540,14 +1569,10 @@ public static InitialSessionState CreateDefault()
                 string assembly = ss.Assemblies[i].FileName;
                 if (!string.IsNullOrEmpty(assembly))
                 {
-                    if (assemblyList.Contains(assembly))
+                    if (!assemblyList.Add(assembly))
                     {
                         ss.Assemblies.RemoveItem(i);
                     }
-                    else
-                    {
-                        assemblyList.Add(assembly);
-                    }
                 }
             }
 
@@ -1666,11 +1691,6 @@ public InitialSessionState Clone()
 
             ss.DisableFormatUpdates = this.DisableFormatUpdates;
 
-            foreach (var s in this.defaultSnapins)
-            {
-                ss.defaultSnapins.Add(s);
-            }
-
             foreach (var s in ImportedSnapins)
             {
                 ss.ImportedSnapins.Add(s.Key, s.Value);
@@ -1834,10 +1854,7 @@ public Microsoft.PowerShell.ExecutionPolicy ExecutionPolicy
         /// <returns></returns>
         public void ImportPSModule(params string[] name)
         {
-            if (name == null)
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
             foreach (string n in name)
             {
@@ -1862,10 +1879,7 @@ internal void ClearPSModules()
         /// </param>
         public void ImportPSModule(IEnumerable<ModuleSpecification> modules)
         {
-            if (modules == null)
-            {
-                throw new ArgumentNullException(nameof(modules));
-            }
+            ArgumentNullException.ThrowIfNull(modules);
 
             foreach (var moduleSpecification in modules)
             {
@@ -1893,10 +1907,7 @@ public void ImportPSModulesFromPath(string path)
         /// <returns></returns>
         internal void ImportPSCoreModule(string[] name)
         {
-            if (name == null)
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
+            ArgumentNullException.ThrowIfNull(name);
 
             foreach (string n in name)
             {
@@ -2113,7 +2124,7 @@ public virtual HashSet<string> StartupScripts
             }
         }
 
-        private HashSet<string> _startupScripts = new HashSet<string>();
+        private HashSet<string> _startupScripts;
 
         private readonly object _syncObject = new object();
 
@@ -2413,9 +2424,14 @@ private void Bind_LoadAssemblies(ExecutionContext context)
             // Load the assemblies and initialize the assembly cache...
             foreach (SessionStateAssemblyEntry ssae in Assemblies)
             {
-                if (etwEnabled) RunspaceEventSource.Log.LoadAssemblyStart(ssae.Name, ssae.FileName);
-                Exception error = null;
-                Assembly asm = context.AddAssembly(ssae.Name, ssae.FileName, out error);
+                if (etwEnabled)
+                {
+                    RunspaceEventSource.Log.LoadAssemblyStart(ssae.Name, ssae.FileName);
+                }
+
+                // Specify the source only if this is for module loading.
+                // The source is used for proper cleaning of the assembly cache when a module is unloaded.
+                Assembly asm = context.AddAssembly(ssae.Module?.Name, ssae.Name, ssae.FileName, out Exception error);
 
                 if (asm == null || error != null)
                 {
@@ -2740,7 +2756,7 @@ private static void ProcessCommandModification(Hashtable commandModification, Co
                         break;
 
                     case "ValidatePattern":
-                        string pattern = "^(" + string.Join("|", parameterValidationValues) + ")$";
+                        string pattern = "^(" + string.Join('|', parameterValidationValues) + ")$";
                         ValidatePatternAttribute validatePattern = new ValidatePatternAttribute(pattern);
                         metadata.Parameters[parameterName].Attributes.Add(validatePattern);
                         break;
@@ -2844,7 +2860,7 @@ private string MakeUserNamePath()
             // Ensure that user name contains no invalid path characters.
             // MSDN indicates that logon names cannot contain any of these invalid characters,
             // but this check will ensure safety.
-            if (userName.IndexOfAny(System.IO.Path.GetInvalidPathChars()) > -1)
+            if (PathUtils.ContainsInvalidPathChars(userName))
             {
                 throw new PSInvalidOperationException(RemotingErrorIdStrings.InvalidUserDriveName);
             }
@@ -2901,7 +2917,7 @@ private Exception ProcessPowerShellCommand(PowerShell psToInvoke, Runspace initi
             }
             finally
             {
-                // Restore the langauge mode, but not if it was altered by the startup script itself.
+                // Restore the language mode, but not if it was altered by the startup script itself.
                 if (initializedRunspace.SessionStateProxy.LanguageMode == PSLanguageMode.FullLanguage)
                 {
                     initializedRunspace.SessionStateProxy.LanguageMode = originalLanguageMode;
@@ -2946,13 +2962,20 @@ private RunspaceOpenModuleLoadException ProcessModulesToImport(
             HashSet<string> unresolvedCmdsToExpose)
         {
             RunspaceOpenModuleLoadException exceptionToReturn = null;
+            List<PSModuleInfo> processedModules = new List<PSModuleInfo>();
 
             foreach (object module in moduleList)
             {
                 string moduleName = module as string;
                 if (moduleName != null)
                 {
-                    exceptionToReturn = ProcessOneModule(initializedRunspace, moduleName, null, path, publicCommands);
+                    exceptionToReturn = ProcessOneModule(
+                        initializedRunspace: initializedRunspace,
+                        name: moduleName,
+                        moduleInfoToLoad: null,
+                        path: path,
+                        publicCommands: publicCommands,
+                        processedModules: processedModules);
                 }
                 else
                 {
@@ -2963,7 +2986,13 @@ private RunspaceOpenModuleLoadException ProcessModulesToImport(
                         {
                             // if only name is specified in the module spec, just try import the module
                             // ie., don't take the performance overhead of calling GetModule.
-                            exceptionToReturn = ProcessOneModule(initializedRunspace, moduleSpecification.Name, null, path, publicCommands);
+                            exceptionToReturn = ProcessOneModule(
+                                initializedRunspace: initializedRunspace,
+                                name: moduleSpecification.Name,
+                                moduleInfoToLoad: null,
+                                path: path,
+                                publicCommands: publicCommands,
+                                processedModules: processedModules);
                         }
                         else
                         {
@@ -2971,7 +3000,13 @@ private RunspaceOpenModuleLoadException ProcessModulesToImport(
 
                             if (moduleInfos != null && moduleInfos.Count > 0)
                             {
-                                exceptionToReturn = ProcessOneModule(initializedRunspace, moduleSpecification.Name, moduleInfos[0], path, publicCommands);
+                                exceptionToReturn = ProcessOneModule(
+                                    initializedRunspace: initializedRunspace,
+                                    name: moduleSpecification.Name,
+                                    moduleInfoToLoad: moduleInfos[0],
+                                    path: path,
+                                    publicCommands: publicCommands,
+                                    processedModules: processedModules);
                             }
                             else
                             {
@@ -3020,7 +3055,11 @@ private RunspaceOpenModuleLoadException ProcessModulesToImport(
                     string commandToMakeVisible = Utils.ParseCommandName(unresolvedCommand, out moduleName);
                     bool found = false;
 
-                    foreach (CommandInfo cmd in LookupCommands(commandToMakeVisible, moduleName, initializedRunspace.ExecutionContext))
+                    foreach (CommandInfo cmd in LookupCommands(
+                        commandPattern: commandToMakeVisible,
+                        moduleName: moduleName,
+                        context: initializedRunspace.ExecutionContext,
+                        processedModules: processedModules))
                     {
                         if (!found)
                         {
@@ -3071,11 +3110,13 @@ private RunspaceOpenModuleLoadException ProcessModulesToImport(
         /// <param name="commandPattern"></param>
         /// <param name="moduleName"></param>
         /// <param name="context"></param>
+        /// <param name="processedModules"></param>
         /// <returns></returns>
         private static IEnumerable<CommandInfo> LookupCommands(
             string commandPattern,
             string moduleName,
-            ExecutionContext context)
+            ExecutionContext context,
+            List<PSModuleInfo> processedModules)
         {
             bool isWildCardPattern = WildcardPattern.ContainsWildcardCharacters(commandPattern);
             var searchOptions = isWildCardPattern ?
@@ -3089,7 +3130,11 @@ private static IEnumerable<CommandInfo> LookupCommands(
             CommandOrigin cmdOrigin = CommandOrigin.Runspace;
             while (true)
             {
-                foreach (CommandInfo commandInfo in context.SessionState.InvokeCommand.GetCommands(commandPattern, CommandTypes.All, searchOptions, cmdOrigin))
+                foreach (CommandInfo commandInfo in context.SessionState.InvokeCommand.GetCommands(
+                    name: commandPattern,
+                    commandTypes: CommandTypes.All,
+                    options: searchOptions,
+                    commandOrigin: cmdOrigin))
                 {
                     // If module name is provided then use it to restrict returned results.
                     if (haveModuleName && !moduleName.Equals(commandInfo.ModuleName, StringComparison.OrdinalIgnoreCase))
@@ -3119,13 +3164,43 @@ private static IEnumerable<CommandInfo> LookupCommands(
                 // Next try internal search.
                 cmdOrigin = CommandOrigin.Internal;
             }
+
+            // If the command is associated with a module, try finding the command in the imported module list.
+            // The SessionState function table holds only one command name, and if two or more modules contain
+            // a command with the same name, only one of them will appear in the function table search above.
+            if (!found && haveModuleName)
+            {
+                var pattern = new WildcardPattern(commandPattern);
+
+                foreach (PSModuleInfo moduleInfo in processedModules)
+                {
+                    if (moduleInfo.Name.Equals(moduleName, StringComparison.OrdinalIgnoreCase))
+                    {
+                        foreach (var cmd in moduleInfo.ExportedCommands.Values)
+                        {
+                            if (pattern.IsMatch(cmd.Name))
+                            {
+                                yield return cmd;
+                            }
+                        }
+
+                        break;
+                    }
+                }
+            }
         }
 
         /// <summary>
         /// If <paramref name="moduleInfoToLoad"/> is null, import module using <paramref name="name"/>. Otherwise,
         /// import module using <paramref name="moduleInfoToLoad"/>
         /// </summary>
-        private RunspaceOpenModuleLoadException ProcessOneModule(Runspace initializedRunspace, string name, PSModuleInfo moduleInfoToLoad, string path, HashSet<CommandInfo> publicCommands)
+        private RunspaceOpenModuleLoadException ProcessOneModule(
+            Runspace initializedRunspace,
+            string name,
+            PSModuleInfo moduleInfoToLoad,
+            string path,
+            HashSet<CommandInfo> publicCommands,
+            List<PSModuleInfo> processedModules)
         {
             using (PowerShell pse = PowerShell.Create())
             {
@@ -3162,6 +3237,11 @@ private RunspaceOpenModuleLoadException ProcessOneModule(Runspace initializedRun
                     c = new CmdletInfo("Out-Default", typeof(OutDefaultCommand), null, null, initializedRunspace.ExecutionContext);
                     pse.AddCommand(new Command(c));
                 }
+                else
+                {
+                    // For runspace init module processing, pass back the PSModuleInfo to the output pipeline.
+                    cmd.Parameters.Add("PassThru");
+                }
 
                 pse.Runspace = initializedRunspace;
                 // Module import should be run in FullLanguage mode since it is running in
@@ -3170,7 +3250,10 @@ private RunspaceOpenModuleLoadException ProcessOneModule(Runspace initializedRun
                 pse.Runspace.ExecutionContext.LanguageMode = PSLanguageMode.FullLanguage;
                 try
                 {
-                    pse.Invoke();
+                    // For runspace init module processing, collect the imported PSModuleInfo returned in the output pipeline.
+                    // In other cases, this collection will be empty.
+                    Collection<PSModuleInfo> moduleInfos = pse.Invoke<PSModuleInfo>();
+                    processedModules.AddRange(moduleInfos);
                 }
                 finally
                 {
@@ -3365,8 +3448,7 @@ internal static void SetSessionStateDrive(ExecutionContext context, bool setLoca
                         {
                             // If we can't access the Environment.CurrentDirectory, we may be in an AppContainer. Set the
                             // default drive to $pshome
-                            System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
-                            string defaultPath = System.IO.Path.GetDirectoryName(PsUtils.GetMainModule(currentProcess).FileName);
+                            string defaultPath = System.IO.Path.GetDirectoryName(Environment.ProcessPath);
                             context.EngineSessionState.SetLocation(defaultPath, providerContext);
                         }
                     }
@@ -3383,105 +3465,6 @@ internal static void CreateQuestionVariable(ExecutionContext context)
             context.EngineSessionState.SetVariableAtScope(qv, "global", true, CommandOrigin.Internal);
         }
 
-        /// <summary>
-        /// Remove anything that would have been bound by this ISS instance.
-        /// At this point, it removes assemblies and cmdlet entries at the top level.
-        /// It also removes types and formats.
-        /// The other entry types - functions, variables, aliases
-        /// are not removed by this function.
-        /// </summary>
-        /// <param name="context"></param>
-        internal void Unbind(ExecutionContext context)
-        {
-            lock (_syncObject)
-            {
-                SessionStateInternal ss = context.EngineSessionState;
-
-                // Remove the assemblies from the assembly cache...
-                foreach (SessionStateAssemblyEntry ssae in Assemblies)
-                {
-                    context.RemoveAssembly(ssae.Name);
-                }
-
-                // Remove all of the commands from the top-level session state.
-                foreach (SessionStateCommandEntry cmd in Commands)
-                {
-                    SessionStateCmdletEntry ssce = cmd as SessionStateCmdletEntry;
-                    if (ssce != null)
-                    {
-                        List<CmdletInfo> matches;
-                        if (context.TopLevelSessionState.GetCmdletTable().TryGetValue(ssce.Name, out matches))
-                        {
-                            // Remove the name from the list...
-                            for (int i = matches.Count - 1; i >= 0; i--)
-                            {
-                                if (matches[i].ModuleName.Equals(cmd.PSSnapIn.Name))
-                                {
-                                    string name = matches[i].Name;
-                                    matches.RemoveAt(i);
-                                    context.TopLevelSessionState.RemoveCmdlet(name, i,  /*force*/ true);
-                                }
-                            }
-                            // And remove the entry if the list is now empty...
-                            if (matches.Count == 0)
-                            {
-                                context.TopLevelSessionState.RemoveCmdletEntry(ssce.Name, true);
-                            }
-                        }
-
-                        continue;
-                    }
-                }
-
-                // Remove all of the providers from the top-level provider table.
-                if (_providers != null && _providers.Count > 0)
-                {
-                    Dictionary<string, List<ProviderInfo>> providerTable = context.TopLevelSessionState.Providers;
-
-                    foreach (SessionStateProviderEntry sspe in _providers)
-                    {
-                        List<ProviderInfo> pl;
-                        if (providerTable.TryGetValue(sspe.Name, out pl))
-                        {
-                            Diagnostics.Assert(pl != null, "There should never be a null list of entries in the provider table");
-                            // For each provider with the same name...
-                            for (int i = pl.Count - 1; i >= 0; i--)
-                            {
-                                ProviderInfo pi = pl[i];
-
-                                // If it was implemented by this entry, remove it
-                                if (pi.ImplementingType == sspe.ImplementingType)
-                                {
-                                    RemoveAllDrivesForProvider(pi, context.TopLevelSessionState);
-                                    pl.RemoveAt(i);
-                                }
-                            }
-
-                            // If there are no providers left with this name, remove the key.
-                            if (pl.Count == 0)
-                            {
-                                providerTable.Remove(sspe.Name);
-                            }
-                        }
-                    }
-                }
-
-                List<string> formatFilesToRemove = new List<string>();
-                if (this.Formats != null)
-                {
-                    formatFilesToRemove.AddRange(this.Formats.Select(f => f.FileName));
-                }
-
-                List<string> typeFilesToRemove = new List<string>();
-                if (this.Types != null)
-                {
-                    typeFilesToRemove.AddRange(this.Types.Select(t => t.FileName));
-                }
-
-                RemoveTypesAndFormats(context, formatFilesToRemove, typeFilesToRemove);
-            }
-        }
-
         internal static void RemoveTypesAndFormats(ExecutionContext context, IList<string> formatFilesToRemove, IList<string> typeFilesToRemove)
         {
             // The formats and types tables are implemented in such a way that
@@ -3600,8 +3583,7 @@ internal void UpdateTypes(ExecutionContext context, bool updateOnly)
                             moduleName = sste.PSSnapIn.Name;
                         }
 
-                        bool unused;
-                        context.TypeTable.Update(moduleName, sste.FileName, errors, context.AuthorizationManager, context.EngineHostInterface, out unused);
+                        context.TypeTable.Update(moduleName, sste.FileName, errors, context.AuthorizationManager, context.EngineHostInterface, out _);
                     }
                 }
                 else if (sste.TypeTable != null)
@@ -3792,7 +3774,7 @@ public PSSnapInInfo ImportPSSnapIn(string name, out PSSnapInException warning)
             // implementation and should be refactored.
             PSSnapInInfo newPSSnapIn = PSSnapInReader.Read("2", name);
 
-            if (!Utils.IsPSVersionSupported(newPSSnapIn.PSVersion.ToString()))
+            if (!PSVersionInfo.IsValidPSVersion(newPSSnapIn.PSVersion))
             {
                 s_PSSnapInTracer.TraceError("MshSnapin {0} and current monad engine's versions don't match.", name);
 
@@ -3805,34 +3787,22 @@ public PSSnapInInfo ImportPSSnapIn(string name, out PSSnapInException warning)
 
             // Now actually load the snapin...
             PSSnapInInfo snapin = ImportPSSnapIn(newPSSnapIn, out warning);
-            if (snapin != null)
-            {
-                ImportedSnapins.Add(snapin.Name, snapin);
-            }
 
             return snapin;
         }
 
         internal PSSnapInInfo ImportCorePSSnapIn()
         {
-            // Load Microsoft.PowerShell.Core as a snapin
+            // Load Microsoft.PowerShell.Core as a snapin.
             PSSnapInInfo coreSnapin = PSSnapInReader.ReadCoreEngineSnapIn();
-            this.defaultSnapins.Add(coreSnapin);
-            try
-            {
-                PSSnapInException warning;
-                this.ImportPSSnapIn(coreSnapin, out warning);
-            }
-            catch (PSSnapInException)
-            {
-                throw;
-            }
-
+            ImportPSSnapIn(coreSnapin, out _);
             return coreSnapin;
         }
 
         internal PSSnapInInfo ImportPSSnapIn(PSSnapInInfo psSnapInInfo, out PSSnapInException warning)
         {
+            ArgumentNullException.ThrowIfNull(psSnapInInfo);
+
             // See if the snapin is already loaded. If has been then there will be an entry in the
             // Assemblies list for it already...
             bool reload = true;
@@ -3865,12 +3835,6 @@ internal PSSnapInInfo ImportPSSnapIn(PSSnapInInfo psSnapInInfo, out PSSnapInExce
             Dictionary<string, List<SessionStateAliasEntry>> aliases = null;
             Dictionary<string, SessionStateProviderEntry> providers = null;
 
-            if (psSnapInInfo == null)
-            {
-                ArgumentNullException e = new ArgumentNullException(nameof(psSnapInInfo));
-                throw e;
-            }
-
             Assembly assembly = null;
             string helpFile = null;
 
@@ -3927,18 +3891,9 @@ internal PSSnapInInfo ImportPSSnapIn(PSSnapInInfo psSnapInInfo, out PSSnapInExce
                 this.Formats.Add(formatEntry);
             }
 
-            SessionStateAssemblyEntry assemblyEntry = new SessionStateAssemblyEntry(psSnapInInfo.AssemblyName, psSnapInInfo.AbsoluteModulePath);
-
+            var assemblyEntry = new SessionStateAssemblyEntry(psSnapInInfo.AssemblyName, psSnapInInfo.AbsoluteModulePath);
             assemblyEntry.SetPSSnapIn(psSnapInInfo);
-
-            this.Assemblies.Add(assemblyEntry);
-
-            // entry from types.ps1xml references a type (Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase) in this assembly
-            if (psSnapInInfo.Name.Equals(CoreSnapin, StringComparison.OrdinalIgnoreCase))
-            {
-                assemblyEntry = new SessionStateAssemblyEntry("Microsoft.PowerShell.Security", null);
-                this.Assemblies.Add(assemblyEntry);
-            }
+            Assemblies.Add(assemblyEntry);
 
             if (cmdlets != null)
             {
@@ -3989,37 +3944,18 @@ internal PSSnapInInfo ImportPSSnapIn(PSSnapInInfo psSnapInInfo, out PSSnapInExce
                 }
             }
 
+            ImportedSnapins.Add(psSnapInInfo.Name, psSnapInInfo);
             return psSnapInInfo;
         }
 
-        internal List<PSSnapInInfo> GetPSSnapIn(string psSnapinName)
+        internal PSSnapInInfo GetPSSnapIn(string psSnapinName)
         {
-            List<PSSnapInInfo> loadedSnapins = null;
-            foreach (var defaultSnapin in defaultSnapins)
-            {
-                if (defaultSnapin.Name.Equals(psSnapinName, StringComparison.OrdinalIgnoreCase))
-                {
-                    if (loadedSnapins == null)
-                    {
-                        loadedSnapins = new List<PSSnapInInfo>();
-                    }
-
-                    loadedSnapins.Add(defaultSnapin);
-                }
-            }
-
-            PSSnapInInfo importedSnapin = null;
-            if (ImportedSnapins.TryGetValue(psSnapinName, out importedSnapin))
+            if (ImportedSnapins.TryGetValue(psSnapinName, out PSSnapInInfo importedSnapin))
             {
-                if (loadedSnapins == null)
-                {
-                    loadedSnapins = new List<PSSnapInInfo>();
-                }
-
-                loadedSnapins.Add(importedSnapin);
+                return importedSnapin;
             }
 
-            return loadedSnapins;
+            return null;
         }
 
         [SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Reflection.Assembly.LoadFrom")]
@@ -4041,26 +3977,18 @@ internal static Assembly LoadAssemblyFromFile(string fileName)
 
         internal void ImportCmdletsFromAssembly(Assembly assembly, PSModuleInfo module)
         {
-            if (assembly == null)
-            {
-                ArgumentNullException e = new ArgumentNullException(nameof(assembly));
-                throw e;
-            }
-
-            Dictionary<string, SessionStateCmdletEntry> cmdlets = null;
-            Dictionary<string, List<SessionStateAliasEntry>> aliases = null;
-            Dictionary<string, SessionStateProviderEntry> providers = null;
+            ArgumentNullException.ThrowIfNull(assembly);
 
             string assemblyPath = assembly.Location;
-            PSSnapInHelpers.AnalyzePSSnapInAssembly(assembly, assemblyPath, psSnapInInfo: null, module, out cmdlets, out aliases, out providers, helpFile: out _);
-
-            // If this is an in-memory assembly, don't added it to the list of AssemblyEntries
-            // since it can't be loaded by path or name
-            if (!string.IsNullOrEmpty(assembly.Location))
-            {
-                SessionStateAssemblyEntry assemblyEntry = new SessionStateAssemblyEntry(assembly.FullName, assemblyPath);
-                this.Assemblies.Add(assemblyEntry);
-            }
+            PSSnapInHelpers.AnalyzePSSnapInAssembly(
+                assembly,
+                assemblyPath,
+                psSnapInInfo: null,
+                module,
+                out Dictionary<string, SessionStateCmdletEntry> cmdlets,
+                out Dictionary<string, List<SessionStateAliasEntry>> aliases,
+                out Dictionary<string, SessionStateProviderEntry> providers,
+                helpFile: out _);
 
             if (cmdlets != null)
             {
@@ -4109,8 +4037,10 @@ internal void ImportCmdletsFromAssembly(Assembly assembly, PSModuleInfo module)
 #>
 
 [CmdletBinding(DefaultParameterSetName = 'ScriptInputSet')]
+[OutputType([System.Management.Automation.CommandCompletion])]
 Param(
     [Parameter(ParameterSetName = 'ScriptInputSet', Mandatory = $true, Position = 0)]
+    [AllowEmptyString()]
     [string] $inputScript,
 
     [Parameter(ParameterSetName = 'ScriptInputSet', Position = 1)]
@@ -4148,7 +4078,7 @@ internal void ImportCmdletsFromAssembly(Assembly assembly, PSModuleInfo module)
             <#options#>          $options)
     }
 }
-        ";
+";
 
         /// <summary>
         /// This is the default function to use for clear-host.
@@ -4183,16 +4113,16 @@ internal static string GetClearHostFunctionText()
             }
         }
 
-        /// <summary>
-        /// This is the default function to use for man/help. It uses
-        /// splatting to pass in the parameters.
-        /// </summary>
-        internal static string GetHelpPagingFunctionText()
+#if UNIX
+        internal static string GetExecFunctionText()
         {
-            // We used to generate the text for this function so you could add a parameter
-            // to Get-Help and not worry about adding it here.  That was a little slow at
-            // startup, so it's hard coded, with a test to make sure the parameters match.
             return @"
+Switch-Process -WithCommand $args
+";
+        }
+#endif
+
+        internal const string WindowsHelpFunctionText = @"
 <#
 .FORWARDHELPTARGETNAME Get-Help
 .FORWARDHELPCATEGORY Cmdlet
@@ -4266,14 +4196,132 @@ .FORWARDHELPCATEGORY Cmdlet
     elseif ($help -ne $null)
     {
         # By default use more on Windows and less on Linux.
-        if ($IsWindows) {
-            $pagerCommand = 'more.com'
-            $pagerArgs = $null
+        $pagerCommand = 'more.com'
+        $pagerArgs = $null
+
+        # Respect PAGER environment variable which allows user to specify a custom pager.
+        # Ignore a pure whitespace PAGER value as that would cause the tokenizer to return 0 tokens.
+        if (![string]::IsNullOrWhitespace($env:PAGER)) {
+            if (Get-Command $env:PAGER -ErrorAction Ignore) {
+                # Entire PAGER value corresponds to a single command.
+                $pagerCommand = $env:PAGER
+                $pagerArgs = $null
+            }
+            else {
+                # PAGER value is not a valid command, check if PAGER command and arguments have been specified.
+                # Tokenize the specified $env:PAGER value. Ignore tokenizing errors since any errors may be valid
+                # argument syntax for the paging utility.
+                $errs = $null
+                $tokens = [System.Management.Automation.PSParser]::Tokenize($env:PAGER, [ref]$errs)
+
+                $customPagerCommand = $tokens[0].Content
+                if (!(Get-Command $customPagerCommand -ErrorAction Ignore)) {
+                    # Custom pager command is invalid, issue a warning.
+                    Write-Warning ""Custom-paging utility command not found. Ignoring command specified in `$env:PAGER: $env:PAGER""
+                }
+                else {
+                    # This approach will preserve all the pagers args.
+                    $pagerCommand = $customPagerCommand
+                    $pagerArgs = if ($tokens.Count -gt 1) {
+                        $env:PAGER.Substring($tokens[1].Start)
+                    }
+                    else {
+                        $null
+                    }
+                }
+            }
+        }
+
+        $pagerCommandInfo = Get-Command -Name $pagerCommand -ErrorAction Ignore
+        if ($pagerCommandInfo -eq $null) {
+            $help
+        }
+        elseif ($pagerCommandInfo.CommandType -eq 'Application') {
+            # If the pager is an application, format the output width before sending to the app.
+            $consoleWidth = [System.Math]::Max([System.Console]::WindowWidth, 20)
+
+            if ($pagerArgs) {
+                $help | Out-String -Stream -Width ($consoleWidth - 1) | & $pagerCommand $pagerArgs
+            }
+            else {
+                $help | Out-String -Stream -Width ($consoleWidth - 1) | & $pagerCommand
+            }
         }
         else {
-            $pagerCommand = 'less'
-            $pagerArgs = '-Ps""Page %db?B of %D:.\. Press h for help or q to quit\.$""'
+            # The pager command is a PowerShell function, script or alias, so pipe directly into it.
+            $help | & $pagerCommand $pagerArgs
         }
+    }
+";
+
+        internal const string UnixHelpFunctionText = @"
+<#
+.FORWARDHELPTARGETNAME Get-Help
+.FORWARDHELPCATEGORY Cmdlet
+#>
+[CmdletBinding(DefaultParameterSetName='AllUsersView', HelpUri='https://go.microsoft.com/fwlink/?LinkID=113316')]
+param(
+    [Parameter(Position=0, ValueFromPipelineByPropertyName=$true)]
+    [string]
+    ${Name},
+
+    [string]
+    ${Path},
+
+    [ValidateSet('Alias','Cmdlet','Provider','General','FAQ','Glossary','HelpFile','ScriptCommand','Function','Filter','ExternalScript','All','DefaultHelp','DscResource','Class','Configuration')]
+    [string[]]
+    ${Category},
+
+    [Parameter(ParameterSetName='DetailedView', Mandatory=$true)]
+    [switch]
+    ${Detailed},
+
+    [Parameter(ParameterSetName='AllUsersView')]
+    [switch]
+    ${Full},
+
+    [Parameter(ParameterSetName='Examples', Mandatory=$true)]
+    [switch]
+    ${Examples},
+
+    [Parameter(ParameterSetName='Parameters', Mandatory=$true)]
+    [string[]]
+    ${Parameter},
+
+    [string[]]
+    ${Component},
+
+    [string[]]
+    ${Functionality},
+
+    [string[]]
+    ${Role},
+
+    [Parameter(ParameterSetName='Online', Mandatory=$true)]
+    [switch]
+    ${Online})
+
+    # Display the full help topic by default but only for the AllUsersView parameter set.
+    if (($psCmdlet.ParameterSetName -eq 'AllUsersView') -and !$Full) {
+        $PSBoundParameters['Full'] = $true
+    }
+
+    # Linux need the default
+    $OutputEncoding = [System.Console]::OutputEncoding
+
+    $help = Get-Help @PSBoundParameters
+
+    # If a list of help is returned or AliasHelpInfo (because it is small), don't pipe to more
+    $psTypeNames = ($help | Select-Object -First 1).PSTypeNames
+    if ($psTypeNames -Contains 'HelpInfoShort' -Or $psTypeNames -Contains 'AliasHelpInfo')
+    {
+        $help
+    }
+    elseif ($help -ne $null)
+    {
+        # By default use more on Windows and less on Linux.
+        $pagerCommand = 'less'
+        $pagerArgs = '-s','-P','Page %db?B of %D:.\. Press h for help or q to quit\.'
 
         # Respect PAGER environment variable which allows user to specify a custom pager.
         # Ignore a pure whitespace PAGER value as that would cause the tokenizer to return 0 tokens.
@@ -4312,10 +4360,7 @@ .FORWARDHELPCATEGORY Cmdlet
             $consoleWidth = [System.Math]::Max([System.Console]::WindowWidth, 20)
 
             if ($pagerArgs) {
-                # Supply pager arguments to an application without any PowerShell parsing of the arguments.
-                # Leave environment variable to help user debug arguments supplied in $env:PAGER.
-                $env:__PSPAGER_ARGS = $pagerArgs
-                $help | Out-String -Stream -Width ($consoleWidth - 1) | & $pagerCommand --% %__PSPAGER_ARGS%
+                $help | Out-String -Stream -Width ($consoleWidth - 1) | & $pagerCommand $pagerArgs
             }
             else {
                 $help | Out-String -Stream -Width ($consoleWidth - 1) | & $pagerCommand
@@ -4327,8 +4372,31 @@ .FORWARDHELPCATEGORY Cmdlet
         }
     }
 ";
+
+        /// <summary>
+        /// This is the default function to use for man/help. It uses
+        /// splatting to pass in the parameters.
+        /// </summary>
+#if !UNIX
+        internal static string GetHelpPagingFunctionText()
+        {
+            // We used to generate the text for this function so you could add a parameter
+            // to Get-Help and not worry about adding it here.  That was a little slow at
+            // startup, so it's hard coded, with a test to make sure the parameters match.
+            return WindowsHelpFunctionText;
         }
 
+#else
+        internal static string GetHelpPagingFunctionText()
+        {
+            // We used to generate the text for this function so you could add a parameter
+            // to Get-Help and not worry about adding it here.  That was a little slow at
+            // startup, so it's hard coded, with a test to make sure the parameters match.
+            // This version removes the -ShowWindow parameter since it is not supported on Linux.
+            return UnixHelpFunctionText;
+        }
+#endif
+
         internal static string GetMkdirFunctionText()
         {
             return @"
@@ -4432,154 +4500,199 @@ .ForwardHelpCategory Cmdlet
         internal const bool DefaultWhatIfPreference = false;
         internal const ConfirmImpact DefaultConfirmPreference = ConfirmImpact.High;
 
-        internal static readonly SessionStateVariableEntry[] BuiltInVariables = new SessionStateVariableEntry[]
-        {
-            // Engine variables that should be precreated before running profile
-            // Bug fix for Win7:2202228 Engine halts if initial command fulls up variable table
-            // Anytime a new variable that the engine depends on to run is added, this table
-            // must be updated...
-            new SessionStateVariableEntry(SpecialVariables.LastToken, null, string.Empty),
-            new SessionStateVariableEntry(SpecialVariables.FirstToken, null, string.Empty),
-            new SessionStateVariableEntry(SpecialVariables.StackTrace, null, string.Empty),
-
-            // Variable which controls the output rendering
-            new SessionStateVariableEntry(
-                SpecialVariables.PSStyle,
-                PSStyle.Instance,
-                RunspaceInit.PSStyleDescription,
-                ScopedItemOptions.None),
-
-            // Variable which controls the encoding for piping data to a NativeCommand
-            new SessionStateVariableEntry(
-                SpecialVariables.OutputEncoding,
-                Utils.utf8NoBom,
-                RunspaceInit.OutputEncodingDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(System.Text.Encoding))),
-
-            // Preferences
-            //
-            // NTRAID#Windows Out Of Band Releases-931461-2006/03/13
-            // ArgumentTypeConverterAttribute is applied to these variables,
-            // but this only reaches the global variable.  If these are
-            // redefined in script scope etc, the type conversion
-            // is not applicable.
-            //
-            // Variables typed to ActionPreference
-            new SessionStateVariableEntry(
-                SpecialVariables.ConfirmPreference,
-                DefaultConfirmPreference,
-                RunspaceInit.ConfirmPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ConfirmImpact))),
-            new SessionStateVariableEntry(
-                SpecialVariables.DebugPreference,
-                DefaultDebugPreference,
-                RunspaceInit.DebugPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.ErrorActionPreference,
-                DefaultErrorActionPreference,
-                RunspaceInit.ErrorActionPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.ProgressPreference,
-                DefaultProgressPreference,
-                RunspaceInit.ProgressPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.VerbosePreference,
-                DefaultVerbosePreference,
-                RunspaceInit.VerbosePreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.WarningPreference,
-                DefaultWarningPreference,
-                RunspaceInit.WarningPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.InformationPreference,
-                DefaultInformationPreference,
-                RunspaceInit.InformationPreferenceDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
-            new SessionStateVariableEntry(
-                SpecialVariables.ErrorView,
-                DefaultErrorView,
-                RunspaceInit.ErrorViewDescription,
-                ScopedItemOptions.None,
-                new ArgumentTypeConverterAttribute(typeof(ErrorView))),
-            new SessionStateVariableEntry(
-                SpecialVariables.NestedPromptLevel,
-                0,
-                RunspaceInit.NestedPromptLevelDescription),
-            new SessionStateVariableEntry(
-                SpecialVariables.WhatIfPreference,
-                DefaultWhatIfPreference,
-                RunspaceInit.WhatIfPreferenceDescription),
-            new SessionStateVariableEntry(
-                FormatEnumerationLimit,
-                DefaultFormatEnumerationLimit,
-                RunspaceInit.FormatEnumerationLimitDescription),
-
-             // variable for PSEmailServer
-            new SessionStateVariableEntry(
-                SpecialVariables.PSEmailServer,
-                string.Empty,
-                RunspaceInit.PSEmailServerDescription),
-
-            // Start: Variables which control remoting behavior
-            new SessionStateVariableEntry(
-                Microsoft.PowerShell.Commands.PSRemotingBaseCmdlet.DEFAULT_SESSION_OPTION,
-                new System.Management.Automation.Remoting.PSSessionOption(),
-                RemotingErrorIdStrings.PSDefaultSessionOptionDescription,
-                ScopedItemOptions.None),
-            new SessionStateVariableEntry(
-                SpecialVariables.PSSessionConfigurationName,
-                "http://schemas.microsoft.com/powershell/Microsoft.PowerShell",
-                RemotingErrorIdStrings.PSSessionConfigurationName,
-                ScopedItemOptions.None),
-            new SessionStateVariableEntry(
-                SpecialVariables.PSSessionApplicationName,
-                "wsman",
-                RemotingErrorIdStrings.PSSessionAppName,
-                ScopedItemOptions.None),
-            // End: Variables which control remoting behavior
-
-            #region Platform
-            new SessionStateVariableEntry(
-                SpecialVariables.IsLinux,
-                Platform.IsLinux,
-                string.Empty,
-                ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
-
-            new SessionStateVariableEntry(
-                SpecialVariables.IsMacOS,
-                Platform.IsMacOS,
-                string.Empty,
-                ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
-
-            new SessionStateVariableEntry(
-                SpecialVariables.IsWindows,
-                Platform.IsWindows,
-                string.Empty,
-                ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
-
-            new SessionStateVariableEntry(
-                SpecialVariables.IsCoreCLR,
-                Platform.IsCoreCLR,
-                string.Empty,
-                ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
-            #endregion
-        };
+        static InitialSessionState()
+        {
+            var builtinVariables = new List<SessionStateVariableEntry>()
+            {
+                // Engine variables that should be precreated before running profile
+                // Bug fix for Win7:2202228 Engine halts if initial command fulls up variable table
+                // Anytime a new variable that the engine depends on to run is added, this table
+                // must be updated...
+                new SessionStateVariableEntry(SpecialVariables.LastToken, null, string.Empty),
+                new SessionStateVariableEntry(SpecialVariables.FirstToken, null, string.Empty),
+                new SessionStateVariableEntry(SpecialVariables.StackTrace, null, string.Empty),
+
+                // Variable which controls the output rendering
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSStyle,
+                    PSStyle.Instance,
+                    RunspaceInit.PSStyleDescription,
+                    ScopedItemOptions.Constant),
+
+                // Variable which controls the encoding for piping data to a NativeCommand
+                new SessionStateVariableEntry(
+                    SpecialVariables.OutputEncoding,
+                    Encoding.Default,
+                    RunspaceInit.OutputEncodingDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(System.Text.Encoding))),
+
+                // Variable which controls the encoding for decoding data from a NativeCommand
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSApplicationOutputEncoding,
+                    null,
+                    RunspaceInit.PSApplicationOutputEncodingDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(Encoding))),
+
+                // Preferences
+                //
+                // NTRAID#Windows Out Of Band Releases-931461-2006/03/13
+                // ArgumentTypeConverterAttribute is applied to these variables,
+                // but this only reaches the global variable.  If these are
+                // redefined in script scope etc, the type conversion
+                // is not applicable.
+                //
+                // Variables typed to ActionPreference
+                new SessionStateVariableEntry(
+                    SpecialVariables.ConfirmPreference,
+                    DefaultConfirmPreference,
+                    RunspaceInit.ConfirmPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ConfirmImpact))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.DebugPreference,
+                    DefaultDebugPreference,
+                    RunspaceInit.DebugPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.ErrorActionPreference,
+                    DefaultErrorActionPreference,
+                    RunspaceInit.ErrorActionPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.ProgressPreference,
+                    DefaultProgressPreference,
+                    RunspaceInit.ProgressPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.VerbosePreference,
+                    DefaultVerbosePreference,
+                    RunspaceInit.VerbosePreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.WarningPreference,
+                    DefaultWarningPreference,
+                    RunspaceInit.WarningPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.InformationPreference,
+                    DefaultInformationPreference,
+                    RunspaceInit.InformationPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ActionPreference))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.ErrorView,
+                    DefaultErrorView,
+                    RunspaceInit.ErrorViewDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(ErrorView))),
+                new SessionStateVariableEntry(
+                    SpecialVariables.NestedPromptLevel,
+                    0,
+                    RunspaceInit.NestedPromptLevelDescription),
+                new SessionStateVariableEntry(
+                    SpecialVariables.WhatIfPreference,
+                    DefaultWhatIfPreference,
+                    RunspaceInit.WhatIfPreferenceDescription),
+                new SessionStateVariableEntry(
+                    FormatEnumerationLimit,
+                    DefaultFormatEnumerationLimit,
+                    RunspaceInit.FormatEnumerationLimitDescription),
+
+                // variable for PSEmailServer
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSEmailServer,
+                    string.Empty,
+                    RunspaceInit.PSEmailServerDescription),
+
+                // Start: Variables which control remoting behavior
+                new SessionStateVariableEntry(
+                    Microsoft.PowerShell.Commands.PSRemotingBaseCmdlet.DEFAULT_SESSION_OPTION,
+                    new System.Management.Automation.Remoting.PSSessionOption(),
+                    RemotingErrorIdStrings.PSDefaultSessionOptionDescription,
+                    ScopedItemOptions.None),
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSSessionConfigurationName,
+                    "http://schemas.microsoft.com/powershell/Microsoft.PowerShell",
+                    RemotingErrorIdStrings.PSSessionConfigurationName,
+                    ScopedItemOptions.None),
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSSessionApplicationName,
+                    "wsman",
+                    RemotingErrorIdStrings.PSSessionAppName,
+                    ScopedItemOptions.None),
+                // End: Variables which control remoting behavior
+
+                #region Platform
+                new SessionStateVariableEntry(
+                    SpecialVariables.IsLinux,
+                    Platform.IsLinux,
+                    string.Empty,
+                    ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
+
+                new SessionStateVariableEntry(
+                    SpecialVariables.IsMacOS,
+                    Platform.IsMacOS,
+                    string.Empty,
+                    ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
+
+                new SessionStateVariableEntry(
+                    SpecialVariables.IsWindows,
+                    Platform.IsWindows,
+                    string.Empty,
+                    ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
+
+                new SessionStateVariableEntry(
+                    SpecialVariables.IsCoreCLR,
+                    Platform.IsCoreCLR,
+                    string.Empty,
+                    ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope),
+                #endregion
+            };
+
+            builtinVariables.Add(
+                new SessionStateVariableEntry(
+                    SpecialVariables.PSNativeCommandUseErrorActionPreference,
+                    value: false,
+                    RunspaceInit.PSNativeCommandUseErrorActionPreferenceDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(bool))));
+
+            builtinVariables.Add(
+                new SessionStateVariableEntry(
+                    SpecialVariables.NativeArgumentPassing,
+                    GetPassingStyle(),
+                    RunspaceInit.NativeCommandArgumentPassingDescription,
+                    ScopedItemOptions.None,
+                    new ArgumentTypeConverterAttribute(typeof(NativeArgumentPassingStyle))));
+
+            BuiltInVariables = builtinVariables.ToArray();
+        }
 
         /// <summary>
-        /// Returns a new array of alias entries everytime it's called. This
+        /// Assigns the default behavior for native argument passing.
+        /// If the system is non-Windows, we will return Standard.
+        /// Otherwise, we will return Windows.
+        /// </summary>
+        private static NativeArgumentPassingStyle GetPassingStyle()
+        {
+#if UNIX
+            return NativeArgumentPassingStyle.Standard;
+#else
+            return NativeArgumentPassingStyle.Windows;
+#endif
+        }
+
+        internal static readonly SessionStateVariableEntry[] BuiltInVariables;
+
+        /// <summary>
+        /// Returns a new array of alias entries every time it's called. This
         /// can't be static because the elements may be mutated in different session
         /// state objects so each session state must have a copy of the entry.
         /// </summary>
@@ -4597,7 +4710,7 @@ internal static SessionStateAliasEntry[] BuiltInAliases
                 const ScopedItemOptions ReadOnly_AllScope = ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope;
                 const ScopedItemOptions ReadOnly = ScopedItemOptions.ReadOnly;
 
-                return new SessionStateAliasEntry[] {
+                var builtInAliases = new List<SessionStateAliasEntry> {
                     new SessionStateAliasEntry("foreach", "ForEach-Object", string.Empty, ReadOnly_AllScope),
                     new SessionStateAliasEntry("%", "ForEach-Object", string.Empty, ReadOnly_AllScope),
                     new SessionStateAliasEntry("where", "Where-Object", string.Empty, ReadOnly_AllScope),
@@ -4628,7 +4741,7 @@ internal static SessionStateAliasEntry[] BuiltInAliases
                     new SessionStateAliasEntry("gm", "Get-Member", string.Empty, ReadOnly),
                     new SessionStateAliasEntry("gmo", "Get-Module", string.Empty, ReadOnly),
                     new SessionStateAliasEntry("gp", "Get-ItemProperty", string.Empty, ReadOnly),
-                    new SessionStateAliasEntry("gpv", "Get-ItemPropertyValue", string.Empty,ReadOnly),
+                    new SessionStateAliasEntry("gpv", "Get-ItemPropertyValue", string.Empty, ReadOnly),
                     new SessionStateAliasEntry("gps", "Get-Process", string.Empty, ReadOnly),
                     new SessionStateAliasEntry("group", "Group-Object", string.Empty, ReadOnly),
                     new SessionStateAliasEntry("gu", "Get-Unique", string.Empty, ReadOnly),
@@ -4764,6 +4877,8 @@ internal static SessionStateAliasEntry[] BuiltInAliases
                     //   - do not use AllScope - this causes errors in profiles that set this somewhat commonly used alias.
                     new SessionStateAliasEntry("sls", "Select-String"),
                 };
+
+                return builtInAliases.ToArray();
             }
         }
 
@@ -4785,12 +4900,17 @@ internal static SessionStateAliasEntry[] BuiltInAliases
            // Functions that don't require full language mode
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("cd..", "Set-Location ..", isProductCode: true, languageMode: systemLanguageMode),
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("cd\\", "Set-Location \\", isProductCode: true, languageMode: systemLanguageMode),
-            // Win8: 320909. Retaining the original definition to ensure backward compatability.
+            SessionStateFunctionEntry.GetDelayParsedFunctionEntry("cd~", "Set-Location ~", isProductCode: true, languageMode: systemLanguageMode),
+            // Win8: 320909. Retaining the original definition to ensure backward compatibility.
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("Pause",
-                string.Concat("$null = Read-Host '", CodeGeneration.EscapeSingleQuotedStringContent(RunspaceInit.PauseDefinitionString),"'"), isProductCode: true, languageMode: systemLanguageMode),
+                string.Concat("$null = Read-Host '", CodeGeneration.EscapeSingleQuotedStringContent(RunspaceInit.PauseDefinitionString), "'"), isProductCode: true, languageMode: systemLanguageMode),
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("help", GetHelpPagingFunctionText(), isProductCode: true, languageMode: systemLanguageMode),
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("prompt", DefaultPromptFunctionText, isProductCode: true, languageMode: systemLanguageMode),
 
+#if UNIX
+            SessionStateFunctionEntry.GetDelayParsedFunctionEntry("exec", GetExecFunctionText(), isProductCode: true, languageMode: systemLanguageMode),
+#endif
+
             // Functions that require full language mode and are trusted
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("Clear-Host", GetClearHostFunctionText(), isProductCode: true, languageMode: PSLanguageMode.FullLanguage),
             SessionStateFunctionEntry.GetDelayParsedFunctionEntry("TabExpansion2", s_tabExpansionFunctionText, isProductCode: true, languageMode: PSLanguageMode.FullLanguage),
@@ -4849,7 +4969,6 @@ internal static void RemoveAllDrivesForProvider(ProviderInfo pi, SessionStateInt
 
         internal static readonly string CoreSnapin = "Microsoft.PowerShell.Core";
         internal static readonly string CoreModule = "Microsoft.PowerShell.Core";
-        internal Collection<PSSnapInInfo> defaultSnapins = new Collection<PSSnapInInfo>();
 
         // The list of engine modules to create warnings when you try to remove them
         internal static readonly HashSet<string> EngineModules = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
@@ -4998,10 +5117,8 @@ internal static void AnalyzePSSnapInAssembly(
             out string helpFile)
         {
             helpFile = null;
-            if (assembly == null)
-            {
-                throw new ArgumentNullException(nameof(assembly));
-            }
+
+            ArgumentNullException.ThrowIfNull(assembly);
 
             cmdlets = null;
             aliases = null;
@@ -5262,7 +5379,11 @@ private static void AnalyzeModuleAssemblyWithReflection(
                             // the users of the cmdlet, instead of the author, should have control of what options applied to an alias
                             // ('ScopedItemOptions.ReadOnly' and/or 'ScopedItemOptions.AllScopes').
                             var aliasEntry = new SessionStateAliasEntry(alias, cmdletName, description: string.Empty, ScopedItemOptions.None);
-                            if (psSnapInInfo != null) { aliasEntry.SetPSSnapIn(psSnapInInfo); }
+
+                            if (psSnapInInfo != null)
+                            {
+                                aliasEntry.SetPSSnapIn(psSnapInInfo);
+                            }
 
                             if (moduleInfo != null)
                             {
@@ -5333,7 +5454,6 @@ private static void InitializeCoreCmdletsAndProviders(
                 { "Enable-PSSessionConfiguration",     new SessionStateCmdletEntry("Enable-PSSessionConfiguration", typeof(EnablePSSessionConfigurationCommand), helpFile) },
                 { "Get-PSSessionCapability",           new SessionStateCmdletEntry("Get-PSSessionCapability", typeof(GetPSSessionCapabilityCommand), helpFile) },
                 { "Get-PSSessionConfiguration",        new SessionStateCmdletEntry("Get-PSSessionConfiguration", typeof(GetPSSessionConfigurationCommand), helpFile) },
-                { "New-PSSessionConfigurationFile",    new SessionStateCmdletEntry("New-PSSessionConfigurationFile", typeof(NewPSSessionConfigurationFileCommand), helpFile) },
                 { "Receive-PSSession",                 new SessionStateCmdletEntry("Receive-PSSession", typeof(ReceivePSSessionCommand), helpFile) },
                 { "Register-PSSessionConfiguration",   new SessionStateCmdletEntry("Register-PSSessionConfiguration", typeof(RegisterPSSessionConfigurationCommand), helpFile) },
                 { "Unregister-PSSessionConfiguration", new SessionStateCmdletEntry("Unregister-PSSessionConfiguration", typeof(UnregisterPSSessionConfigurationCommand), helpFile) },
@@ -5358,6 +5478,7 @@ private static void InitializeCoreCmdletsAndProviders(
                 { "Get-Module",                        new SessionStateCmdletEntry("Get-Module", typeof(GetModuleCommand), helpFile) },
                 { "Get-PSHostProcessInfo",             new SessionStateCmdletEntry("Get-PSHostProcessInfo", typeof(GetPSHostProcessInfoCommand), helpFile) },
                 { "Get-PSSession",                     new SessionStateCmdletEntry("Get-PSSession", typeof(GetPSSessionCommand), helpFile) },
+                { "Get-PSSubsystem",                   new SessionStateCmdletEntry("Get-PSSubsystem", typeof(Subsystem.GetPSSubsystemCommand), helpFile) },
                 { "Import-Module",                     new SessionStateCmdletEntry("Import-Module", typeof(ImportModuleCommand), helpFile) },
                 { "Invoke-Command",                    new SessionStateCmdletEntry("Invoke-Command", typeof(InvokeCommandCommand), helpFile) },
                 { "Invoke-History",                    new SessionStateCmdletEntry("Invoke-History", typeof(InvokeHistoryCommand), helpFile) },
@@ -5365,6 +5486,7 @@ private static void InitializeCoreCmdletsAndProviders(
                 { "New-ModuleManifest",                new SessionStateCmdletEntry("New-ModuleManifest", typeof(NewModuleManifestCommand), helpFile) },
                 { "New-PSRoleCapabilityFile",          new SessionStateCmdletEntry("New-PSRoleCapabilityFile", typeof(NewPSRoleCapabilityFileCommand), helpFile) },
                 { "New-PSSession",                     new SessionStateCmdletEntry("New-PSSession", typeof(NewPSSessionCommand), helpFile) },
+                { "New-PSSessionConfigurationFile",    new SessionStateCmdletEntry("New-PSSessionConfigurationFile", typeof(NewPSSessionConfigurationFileCommand), helpFile) },
                 { "New-PSSessionOption",               new SessionStateCmdletEntry("New-PSSessionOption", typeof(NewPSSessionOptionCommand), helpFile) },
                 { "New-PSTransportOption",             new SessionStateCmdletEntry("New-PSTransportOption", typeof(NewPSTransportOptionCommand), helpFile) },
                 { "Out-Default",                       new SessionStateCmdletEntry("Out-Default", typeof(OutDefaultCommand), helpFile) },
@@ -5397,10 +5519,9 @@ private static void InitializeCoreCmdletsAndProviders(
                 { "Format-Default",                    new SessionStateCmdletEntry("Format-Default", typeof(FormatDefaultCommand), helpFile) },
             };
 
-            if (ExperimentalFeature.IsEnabled("PSSubsystemPluginModel"))
-            {
-                cmdlets.Add("Get-PSSubsystem", new SessionStateCmdletEntry("Get-PSSubsystem", typeof(Subsystem.GetPSSubsystemCommand), helpFile));
-            }
+#if UNIX
+            cmdlets.Add("Switch-Process", new SessionStateCmdletEntry("Switch-Process", typeof(SwitchProcessCommand), helpFile));
+#endif
 
             foreach (var val in cmdlets.Values)
             {
@@ -5443,7 +5564,7 @@ internal static IEnumerable<Type> GetAssemblyTypes(Assembly assembly, string nam
             try
             {
                 // Return types that are public, non-abstract, non-interface and non-valueType.
-                return assembly.ExportedTypes.Where(t => !t.IsAbstract && !t.IsInterface && !t.IsValueType);
+                return assembly.ExportedTypes.Where(static t => !t.IsAbstract && !t.IsInterface && !t.IsValueType);
             }
             catch (ReflectionTypeLoadException e)
             {
diff --git a/src/System.Management.Automation/engine/InternalCommands.cs b/src/System.Management.Automation/engine/InternalCommands.cs
index b7b1d87cc82..4e50e2d130f 100644
--- a/src/System.Management.Automation/engine/InternalCommands.cs
+++ b/src/System.Management.Automation/engine/InternalCommands.cs
@@ -6,17 +6,19 @@
 using System.Collections.Generic;
 using System.Dynamic;
 using System.Globalization;
-using System.Linq;
 using System.Linq.Expressions;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
 using System.Management.Automation.PSTasks;
+using System.Management.Automation.Security;
 using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading;
+
 using CommonParamSet = System.Management.Automation.Internal.CommonParameters;
 using Dbg = System.Management.Automation.Diagnostics;
+using NotNullWhen = System.Diagnostics.CodeAnalysis.NotNullWhenAttribute;
 
 namespace Microsoft.PowerShell.Commands
 {
@@ -381,24 +383,14 @@ public void Dispose()
         private Exception _taskCollectionException;
         private string _currentLocationPath;
 
-        // List of Foreach-Object command names and aliases.
-        // TODO: Look into using SessionState.Internal.GetAliasTable() to find all user created aliases.
-        //       But update Alias command logic to maintain reverse table that lists all aliases mapping
-        //       to a single command definition, for performance.
-        private static string[] forEachNames = new string[]
-        {
-            "ForEach-Object",
-            "foreach",
-            "%"
-        };
-
         private void InitParallelParameterSet()
         {
             // The following common parameters are not (yet) supported in this parameter set.
-            //  ErrorAction, WarningAction, InformationAction, PipelineVariable.
+            //  ErrorAction, WarningAction, InformationAction, ProgressAction, PipelineVariable.
             if (MyInvocation.BoundParameters.ContainsKey(nameof(CommonParamSet.ErrorAction)) ||
                 MyInvocation.BoundParameters.ContainsKey(nameof(CommonParamSet.WarningAction)) ||
                 MyInvocation.BoundParameters.ContainsKey(nameof(CommonParamSet.InformationAction)) ||
+                MyInvocation.BoundParameters.ContainsKey(nameof(CommonParamSet.ProgressAction)) ||
                 MyInvocation.BoundParameters.ContainsKey(nameof(CommonParamSet.PipelineVariable)))
             {
                 ThrowTerminatingError(
@@ -422,15 +414,14 @@ private void InitParallelParameterSet()
             _usingValuesMap = ScriptBlockToPowerShellConverter.GetUsingValuesForEachParallel(
                 scriptBlock: Parallel,
                 isTrustedInput: allowUsingExpression,
-                context: this.Context,
-                foreachNames: forEachNames);
+                context: this.Context);
 
             // Validate using values map, which is a map of '$using:' variables referenced in the script.
             // Script block variables are not allowed since their behavior is undefined outside the runspace
             // in which they were created.
             foreach (object item in _usingValuesMap.Values)
             {
-                if (item is ScriptBlock)
+                if (item is ScriptBlock or PSObject { BaseObject: ScriptBlock })
                 {
                     ThrowTerminatingError(
                         new ErrorRecord(
@@ -695,7 +686,10 @@ private void ProcessPropertyAndMethodParameterSet()
             else
             {
                 // if inputObject is of IDictionary, get the value
-                if (GetValueFromIDictionaryInput()) { return; }
+                if (GetValueFromIDictionaryInput())
+                {
+                    return;
+                }
 
                 PSMemberInfo member = null;
                 if (WildcardPattern.ContainsWildcardCharacters(_propertyOrMethodName))
@@ -711,7 +705,7 @@ private void ProcessPropertyAndMethodParameterSet()
                         StringBuilder possibleMatches = new StringBuilder();
                         foreach (PSMemberInfo item in members)
                         {
-                            possibleMatches.AppendFormat(CultureInfo.InvariantCulture, " {0}", item.Name);
+                            possibleMatches.Append(CultureInfo.InvariantCulture, $" {item.Name}");
                         }
 
                         WriteError(GenerateNameParameterError("Name", InternalCommandStrings.AmbiguousPropertyOrMethodName,
@@ -930,17 +924,14 @@ private void ProcessScriptBlockParameterSet()
                 // because it allows you to parameterize a command - for example you might allow
                 // for actions before and after the main processing script. They could be null
                 // by default and therefore ignored then filled in later...
-                if (_scripts[i] != null)
-                {
-                    _scripts[i].InvokeUsingCmdlet(
-                        contextCmdlet: this,
-                        useLocalScope: false,
-                        errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
-                        dollarUnder: InputObject,
-                        input: new object[] { InputObject },
-                        scriptThis: AutomationNull.Value,
-                        args: Array.Empty<object>());
-                }
+                _scripts[i]?.InvokeUsingCmdlet(
+                    contextCmdlet: this,
+                    useLocalScope: false,
+                    errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
+                    dollarUnder: InputObject,
+                    input: new object[] { InputObject },
+                    scriptThis: AutomationNull.Value,
+                    args: Array.Empty<object>());
             }
         }
 
@@ -1032,7 +1023,7 @@ private void MethodCallWithArguments()
                 StringBuilder possibleMatches = new StringBuilder();
                 foreach (PSMemberInfo item in methods)
                 {
-                    possibleMatches.AppendFormat(CultureInfo.InvariantCulture, " {0}", item.Name);
+                    possibleMatches.Append(CultureInfo.InvariantCulture, $" {item.Name}");
                 }
 
                 WriteError(GenerateNameParameterError(
@@ -1062,7 +1053,7 @@ private void MethodCallWithArguments()
                 StringBuilder arglist = new StringBuilder(GetStringRepresentation(_arguments[0]));
                 for (int i = 1; i < _arguments.Length; i++)
                 {
-                    arglist.AppendFormat(CultureInfo.InvariantCulture, ", {0}", GetStringRepresentation(_arguments[i]));
+                    arglist.Append(CultureInfo.InvariantCulture, $", {GetStringRepresentation(_arguments[i])}");
                 }
 
                 string methodAction = string.Format(CultureInfo.InvariantCulture,
@@ -1215,14 +1206,25 @@ private bool BlockMethodInLanguageMode(object inputObject)
             if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage)
             {
                 object baseObject = PSObject.Base(inputObject);
+                var objectType = baseObject.GetType();
 
-                if (!CoreTypes.Contains(baseObject.GetType()))
+                if (!CoreTypes.Contains(objectType))
                 {
-                    PSInvalidOperationException exception =
-                        new PSInvalidOperationException(ParserStrings.InvokeMethodConstrainedLanguage);
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        PSInvalidOperationException exception =
+                            new PSInvalidOperationException(ParserStrings.InvokeMethodConstrainedLanguage);
 
-                    WriteError(new ErrorRecord(exception, "MethodInvocationNotSupportedInConstrainedLanguage", ErrorCategory.InvalidOperation, null));
-                    return true;
+                        WriteError(new ErrorRecord(exception, "MethodInvocationNotSupportedInConstrainedLanguage", ErrorCategory.InvalidOperation, null));
+                        return true;
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: Context,
+                        title: InternalCommandStrings.WDACLogTitle,
+                        message: StringUtil.Format(InternalCommandStrings.WDACLogMessage, objectType.FullName),
+                        fqid: "ForEachObjectCmdletMethodInvocationNotAllowed",
+                        dropIntoDebugger: true);
                 }
             }
 
@@ -1439,8 +1441,11 @@ public SwitchParameter EQ
 
             set
             {
-                _binaryOperator = TokenKind.Ieq;
-                _forceBooleanEvaluation = false;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ieq;
+                    _forceBooleanEvaluation = false;
+                }
             }
         }
 
@@ -1457,7 +1462,10 @@ public SwitchParameter CEQ
 
             set
             {
-                _binaryOperator = TokenKind.Ceq;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ceq;
+                }
             }
         }
 
@@ -1475,7 +1483,10 @@ public SwitchParameter NE
 
             set
             {
-                _binaryOperator = TokenKind.Ine;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ine;
+                }
             }
         }
 
@@ -1492,7 +1503,10 @@ public SwitchParameter CNE
 
             set
             {
-                _binaryOperator = TokenKind.Cne;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cne;
+                }
             }
         }
 
@@ -1510,7 +1524,10 @@ public SwitchParameter GT
 
             set
             {
-                _binaryOperator = TokenKind.Igt;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Igt;
+                }
             }
         }
 
@@ -1527,7 +1544,10 @@ public SwitchParameter CGT
 
             set
             {
-                _binaryOperator = TokenKind.Cgt;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cgt;
+                }
             }
         }
 
@@ -1545,12 +1565,15 @@ public SwitchParameter LT
 
             set
             {
-                _binaryOperator = TokenKind.Ilt;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ilt;
+                }
             }
         }
 
         /// <summary>
-        /// Gets -sets case sensitive binary operator -clt.
+        /// Gets or sets case sensitive binary operator -clt.
         /// </summary>
         [Parameter(Mandatory = true, ParameterSetName = "CaseSensitiveLessThanSet")]
         public SwitchParameter CLT
@@ -1562,7 +1585,10 @@ public SwitchParameter CLT
 
             set
             {
-                _binaryOperator = TokenKind.Clt;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Clt;
+                }
             }
         }
 
@@ -1580,7 +1606,10 @@ public SwitchParameter GE
 
             set
             {
-                _binaryOperator = TokenKind.Ige;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ige;
+                }
             }
         }
 
@@ -1597,7 +1626,10 @@ public SwitchParameter CGE
 
             set
             {
-                _binaryOperator = TokenKind.Cge;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cge;
+                }
             }
         }
 
@@ -1615,7 +1647,10 @@ public SwitchParameter LE
 
             set
             {
-                _binaryOperator = TokenKind.Ile;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ile;
+                }
             }
         }
 
@@ -1632,7 +1667,10 @@ public SwitchParameter CLE
 
             set
             {
-                _binaryOperator = TokenKind.Cle;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cle;
+                }
             }
         }
 
@@ -1650,7 +1688,10 @@ public SwitchParameter Like
 
             set
             {
-                _binaryOperator = TokenKind.Ilike;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ilike;
+                }
             }
         }
 
@@ -1667,7 +1708,10 @@ public SwitchParameter CLike
 
             set
             {
-                _binaryOperator = TokenKind.Clike;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Clike;
+                }
             }
         }
 
@@ -1685,7 +1729,10 @@ public SwitchParameter NotLike
 
             set
             {
-                _binaryOperator = TokenKind.Inotlike;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Inotlike;
+                }
             }
         }
 
@@ -1702,7 +1749,10 @@ public SwitchParameter CNotLike
 
             set
             {
-                _binaryOperator = TokenKind.Cnotlike;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cnotlike;
+                }
             }
         }
 
@@ -1720,7 +1770,10 @@ public SwitchParameter Match
 
             set
             {
-                _binaryOperator = TokenKind.Imatch;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Imatch;
+                }
             }
         }
 
@@ -1737,7 +1790,10 @@ public SwitchParameter CMatch
 
             set
             {
-                _binaryOperator = TokenKind.Cmatch;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cmatch;
+                }
             }
         }
 
@@ -1755,7 +1811,10 @@ public SwitchParameter NotMatch
 
             set
             {
-                _binaryOperator = TokenKind.Inotmatch;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Inotmatch;
+                }
             }
         }
 
@@ -1772,7 +1831,10 @@ public SwitchParameter CNotMatch
 
             set
             {
-                _binaryOperator = TokenKind.Cnotmatch;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cnotmatch;
+                }
             }
         }
 
@@ -1790,7 +1852,10 @@ public SwitchParameter Contains
 
             set
             {
-                _binaryOperator = TokenKind.Icontains;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Icontains;
+                }
             }
         }
 
@@ -1807,7 +1872,10 @@ public SwitchParameter CContains
 
             set
             {
-                _binaryOperator = TokenKind.Ccontains;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Ccontains;
+                }
             }
         }
 
@@ -1825,7 +1893,10 @@ public SwitchParameter NotContains
 
             set
             {
-                _binaryOperator = TokenKind.Inotcontains;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Inotcontains;
+                }
             }
         }
 
@@ -1842,7 +1913,10 @@ public SwitchParameter CNotContains
 
             set
             {
-                _binaryOperator = TokenKind.Cnotcontains;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cnotcontains;
+                }
             }
         }
 
@@ -1860,7 +1934,10 @@ public SwitchParameter In
 
             set
             {
-                _binaryOperator = TokenKind.In;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.In;
+                }
             }
         }
 
@@ -1877,7 +1954,10 @@ public SwitchParameter CIn
 
             set
             {
-                _binaryOperator = TokenKind.Cin;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cin;
+                }
             }
         }
 
@@ -1895,7 +1975,10 @@ public SwitchParameter NotIn
 
             set
             {
-                _binaryOperator = TokenKind.Inotin;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Inotin;
+                }
             }
         }
 
@@ -1912,7 +1995,10 @@ public SwitchParameter CNotIn
 
             set
             {
-                _binaryOperator = TokenKind.Cnotin;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Cnotin;
+                }
             }
         }
 
@@ -1929,7 +2015,10 @@ public SwitchParameter Is
 
             set
             {
-                _binaryOperator = TokenKind.Is;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Is;
+                }
             }
         }
 
@@ -1946,7 +2035,10 @@ public SwitchParameter IsNot
 
             set
             {
-                _binaryOperator = TokenKind.IsNot;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.IsNot;
+                }
             }
         }
 
@@ -1963,7 +2055,10 @@ public SwitchParameter Not
 
             set
             {
-                _binaryOperator = TokenKind.Not;
+                if (value)
+                {
+                    _binaryOperator = TokenKind.Not;
+                }
             }
         }
 
@@ -2016,7 +2111,7 @@ private void CheckLanguageMode()
 
         private object GetLikeRHSOperand(object operand)
         {
-            if (!(operand is string val))
+            if (operand is not string val)
             {
                 return operand;
             }
@@ -2368,7 +2463,7 @@ private object GetValue(ref bool error)
                 StringBuilder possibleMatches = new StringBuilder();
                 foreach (PSMemberInfo item in members)
                 {
-                    possibleMatches.AppendFormat(CultureInfo.InvariantCulture, " {0}", item.Name);
+                    possibleMatches.Append(CultureInfo.InvariantCulture, $" {item.Name}");
                 }
 
                 WriteError(
@@ -2647,46 +2742,19 @@ public SwitchParameter Off
         private SwitchParameter _off;
 
         /// <summary>
-        /// To make it easier to specify a version, we add some conversions that wouldn't happen otherwise:
-        ///   * A simple integer, i.e. 2
-        ///   * A string without a dot, i.e. "2"
-        ///   * The string 'latest', which we interpret to be the current version of PowerShell.
+        /// Handle 'latest', which we interpret to be the current version of PowerShell.
         /// </summary>
-        private sealed class ArgumentToVersionTransformationAttribute : ArgumentTransformationAttribute
+        private sealed class ArgumentToPSVersionTransformationAttribute : ArgumentToVersionTransformationAttribute
         {
-            public override object Transform(EngineIntrinsics engineIntrinsics, object inputData)
+            protected override bool TryConvertFromString(string versionString, [NotNullWhen(true)] out Version version)
             {
-                object version = PSObject.Base(inputData);
-
-                string versionStr = version as string;
-                if (versionStr != null)
-                {
-                    if (versionStr.Equals("latest", StringComparison.OrdinalIgnoreCase))
-                    {
-                        return PSVersionInfo.PSVersion;
-                    }
-
-                    if (versionStr.Contains('.'))
-                    {
-                        // If the string contains a '.', let the Version constructor handle the conversion.
-                        return inputData;
-                    }
-                }
-
-                if (version is double)
-                {
-                    // The conversion to int below is wrong, but the usual conversions will turn
-                    // the double into a string, so just return the original object.
-                    return inputData;
-                }
-
-                int majorVersion;
-                if (LanguagePrimitives.TryConvertTo<int>(version, out majorVersion))
+                if (string.Equals("latest", versionString, StringComparison.OrdinalIgnoreCase))
                 {
-                    return new Version(majorVersion, 0);
+                    version = PSVersionInfo.PSVersion;
+                    return true;
                 }
 
-                return inputData;
+                return base.TryConvertFromString(versionString, out version);
             }
         }
 
@@ -2695,7 +2763,7 @@ private sealed class ValidateVersionAttribute : ValidateArgumentsAttribute
             protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics)
             {
                 Version version = arguments as Version;
-                if (version == null || !PSVersionInfo.IsValidPSVersion(version))
+                if (!PSVersionInfo.IsValidPSVersion(version))
                 {
                     // No conversion succeeded so throw and exception...
                     throw new ValidationMetadataException(
@@ -2711,7 +2779,8 @@ protected override void Validate(object arguments, EngineIntrinsics engineIntrin
         /// Gets or sets strict mode in the current scope.
         /// </summary>
         [Parameter(ParameterSetName = "Version", Mandatory = true)]
-        [ArgumentToVersionTransformation]
+        [ArgumentCompleter(typeof(StrictModeVersionArgumentCompleter))]
+        [ArgumentToPSVersionTransformation]
         [ValidateVersion]
         [Alias("v")]
         public Version Version
@@ -2742,6 +2811,34 @@ protected override void EndProcessing()
             Context.EngineSessionState.CurrentScope.StrictModeVersion = _version;
         }
     }
+
+    /// <summary>
+    /// Provides argument completion for StrictMode Version parameter.
+    /// </summary>
+    public class StrictModeVersionArgumentCompleter : IArgumentCompleter
+    {
+        private static readonly string[] s_strictModeVersions = new string[] { "Latest", "3.0", "2.0", "1.0" };
+
+        /// <summary>
+        /// Returns completion results for version parameter.
+        /// </summary>
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of Completion Results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
+                => CompletionHelpers.GetMatchingResults(
+                    wordToComplete,
+                    possibleCompletionValues: s_strictModeVersions);
+    }
+
     #endregion Set-StrictMode
 
     #endregion Built-in cmdlets that are used by or require direct access to the engine.
diff --git a/src/System.Management.Automation/engine/Interop/Windows/AllocConsole.cs b/src/System.Management.Automation/engine/Interop/Windows/AllocConsole.cs
new file mode 100644
index 00000000000..072e5d1b18e
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/AllocConsole.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("kernel32.dll")]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool AllocConsole();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/AssignProcessToJobObject.cs b/src/System.Management.Automation/engine/Interop/Windows/AssignProcessToJobObject.cs
new file mode 100644
index 00000000000..7605420dab4
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/AssignProcessToJobObject.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+using Microsoft.Win32.SafeHandles;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport("kernel32.dll", SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool AssignProcessToJobObject(
+            SafeJobHandle hJob,
+            SafeProcessHandle hProcess);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CloseHandle.cs b/src/System.Management.Automation/engine/Interop/Windows/CloseHandle.cs
new file mode 100644
index 00000000000..6832268272a
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CloseHandle.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-handle-l1-1-0.dll")]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool CloseHandle(nint hObject);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CoInitializeEx.cs b/src/System.Management.Automation/engine/Interop/Windows/CoInitializeEx.cs
new file mode 100644
index 00000000000..a3eae4fd596
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CoInitializeEx.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        internal const int COINIT_APARTMENTTHREADED = 0x2;
+        internal const int E_NOTIMPL = unchecked((int)0X80004001);
+
+        [LibraryImport("api-ms-win-core-com-l1-1-0.dll")]
+        internal static partial int CoInitializeEx(nint reserve, int coinit);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CoUninitialize.cs b/src/System.Management.Automation/engine/Interop/Windows/CoUninitialize.cs
new file mode 100644
index 00000000000..d872cf17f3e
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CoUninitialize.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-com-l1-1-0.dll")]
+        internal static partial void CoUninitialize();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CreateFile.cs b/src/System.Management.Automation/engine/Interop/Windows/CreateFile.cs
new file mode 100644
index 00000000000..fa1552c91c5
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CreateFile.cs
@@ -0,0 +1,95 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.IO;
+using System.Management.Automation;
+using System.Runtime.InteropServices;
+
+using Microsoft.Win32.SafeHandles;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        // dwDesiredAccess of CreateFile
+        [Flags]
+        internal enum FileDesiredAccess : uint
+        {
+            GenericZero = 0,
+            GenericRead = 0x80000000,
+            GenericWrite = 0x40000000,
+            GenericExecute = 0x20000000,
+            GenericAll = 0x10000000,
+        }
+
+        // dwFlagsAndAttributes
+        [Flags]
+        internal enum FileAttributes : uint
+        {
+            Readonly = 0x00000001,
+            Hidden = 0x00000002,
+            System = 0x00000004,
+            Archive = 0x00000020,
+            Encrypted = 0x00004000,
+            Write_Through = 0x80000000,
+            Overlapped = 0x40000000,
+            NoBuffering = 0x20000000,
+            RandomAccess = 0x10000000,
+            SequentialScan = 0x08000000,
+            DeleteOnClose = 0x04000000,
+            BackupSemantics = 0x02000000,
+            PosixSemantics = 0x01000000,
+            OpenReparsePoint = 0x00200000,
+            OpenNoRecall = 0x00100000,
+            SessionAware = 0x00800000,
+            Normal = 0x00000080
+        }
+
+        // WARNING: This method does not implicitly handle long paths. Use CreateFile.
+        [LibraryImport("api-ms-win-core-file-l1-1-0.dll", EntryPoint = "CreateFileW", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)]
+        private static unsafe partial SafeFileHandle CreateFilePrivate(
+            string lpFileName,
+            uint dwDesiredAccess,
+            FileShare dwShareMode,
+            nint lpSecurityAttributes,
+            FileMode dwCreationDisposition,
+            FileAttributes dwFlagsAndAttributes,
+            IntPtr hTemplateFile);
+
+        [LibraryImport("api-ms-win-core-file-l1-1-0.dll", EntryPoint = "CreateFileW", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)]
+        private static unsafe partial nint CreateFileWithPipeHandlePrivate(
+            string lpFileName,
+            uint dwDesiredAccess,
+            FileShare dwShareMode,
+            nint lpSecurityAttributes,
+            FileMode dwCreationDisposition,
+            FileAttributes dwFlagsAndAttributes,
+            IntPtr hTemplateFile);
+
+        internal static unsafe SafeFileHandle CreateFileWithSafeFileHandle(
+            string lpFileName,
+            FileAccess dwDesiredAccess,
+            FileShare dwShareMode,
+            FileMode dwCreationDisposition,
+            FileAttributes dwFlagsAndAttributes)
+        {
+            lpFileName = Path.TrimEndingDirectorySeparator(lpFileName);
+            lpFileName = PathUtils.EnsureExtendedPrefixIfNeeded(lpFileName);
+
+            return CreateFilePrivate(lpFileName, (uint)dwDesiredAccess, dwShareMode, nint.Zero, dwCreationDisposition, dwFlagsAndAttributes, nint.Zero);
+        }
+
+        internal static unsafe nint CreateFileWithPipeHandle(
+            string lpFileName,
+            FileAccess dwDesiredAccess,
+            FileShare dwShareMode,
+            FileMode dwCreationDisposition,
+            FileAttributes dwFlagsAndAttributes)
+        {
+            return CreateFileWithPipeHandlePrivate(lpFileName, (uint)dwDesiredAccess, dwShareMode, nint.Zero, dwCreationDisposition, dwFlagsAndAttributes, nint.Zero);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CreateHardLink.cs b/src/System.Management.Automation/engine/Interop/Windows/CreateHardLink.cs
new file mode 100644
index 00000000000..f27f095fc1a
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CreateHardLink.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-file-l2-1-0.dll", EntryPoint = "CreateHardLinkW", StringMarshalling = StringMarshalling.Utf16, SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool CreateHardLink(string name, string existingFileName, nint securityAttributes);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CreateIoCompletionPort.cs b/src/System.Management.Automation/engine/Interop/Windows/CreateIoCompletionPort.cs
new file mode 100644
index 00000000000..0b877fcdaea
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CreateIoCompletionPort.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        internal sealed class SafeIoCompletionPort : SafeHandle
+        {
+            public SafeIoCompletionPort() : base(invalidHandleValue: nint.Zero, ownsHandle: true) { }
+
+            public override bool IsInvalid => handle == nint.Zero;
+
+            protected override bool ReleaseHandle()
+                => Windows.CloseHandle(handle);
+        }
+
+        [LibraryImport("kernel32.dll", SetLastError = true)]
+        private static partial SafeIoCompletionPort CreateIoCompletionPort(
+            nint FileHandle,
+            nint ExistingCompletionPort,
+            nint CompletionKey,
+            int NumberOfConcurrentThreads);
+
+        internal static SafeIoCompletionPort CreateIoCompletionPort()
+        {
+            return CreateIoCompletionPort(
+                FileHandle: -1,
+                ExistingCompletionPort: nint.Zero,
+                CompletionKey: nint.Zero,
+                NumberOfConcurrentThreads: 1);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CreateJobObject.cs b/src/System.Management.Automation/engine/Interop/Windows/CreateJobObject.cs
new file mode 100644
index 00000000000..fee16b813aa
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CreateJobObject.cs
@@ -0,0 +1,30 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        internal sealed class SafeJobHandle : SafeHandle
+        {
+            public SafeJobHandle() : base(invalidHandleValue: nint.Zero, ownsHandle: true) { }
+
+            public override bool IsInvalid => handle == nint.Zero;
+
+            protected override bool ReleaseHandle()
+                => Windows.CloseHandle(handle);
+        }
+
+        [LibraryImport("kernel32.dll", EntryPoint = "CreateJobObjectW", SetLastError = true)]
+        private static partial SafeJobHandle CreateJobObject(
+            nint lpJobAttributes,
+            nint lpName);
+
+        internal static SafeJobHandle CreateJobObject()
+            => CreateJobObject(nint.Zero, nint.Zero);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/CreateSymbolicLink.cs b/src/System.Management.Automation/engine/Interop/Windows/CreateSymbolicLink.cs
new file mode 100644
index 00000000000..c6519f94ec4
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/CreateSymbolicLink.cs
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [Flags]
+        internal enum SymbolicLinkFlags
+        {
+            File = 0,
+            Directory = 1,
+            AllowUnprivilegedCreate = 2,
+        }
+
+        [LibraryImport("api-ms-win-core-file-l2-1-0.dll", EntryPoint = "CreateSymbolicLinkW", StringMarshalling = StringMarshalling.Utf16, SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.I1)]
+        internal static partial bool CreateSymbolicLink(string name, string destination, SymbolicLinkFlags symbolicLinkFlags);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/Errors.cs b/src/System.Management.Automation/engine/Interop/Windows/Errors.cs
new file mode 100644
index 00000000000..bef9e172193
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/Errors.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        // List of error constants https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes
+        internal const int ERROR_SUCCESS = 0;
+        internal const int ERROR_FILE_NOT_FOUND = 2;
+        internal const int ERROR_GEN_FAILURE = 31;
+        internal const int ERROR_NOT_SUPPORTED = 50;
+        internal const int ERROR_NO_NETWORK = 1222;
+        internal const int ERROR_MORE_DATA = 234;
+        internal const int ERROR_CONNECTION_UNAVAIL = 1201;
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/EventActivityIdControl.cs b/src/System.Management.Automation/engine/Interop/Windows/EventActivityIdControl.cs
new file mode 100644
index 00000000000..8152a793149
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/EventActivityIdControl.cs
@@ -0,0 +1,54 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+#if !UNIX
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        internal enum ActivityControl : uint
+        {
+            /// <summary>
+            /// Gets the ActivityId from thread local storage.
+            /// </summary>
+            Get = 1,
+
+            /// <summary>
+            /// Sets the ActivityId in the thread local storage.
+            /// </summary>
+            Set = 2,
+
+            /// <summary>
+            /// Creates a new activity id.
+            /// </summary>
+            Create = 3,
+
+            /// <summary>
+            /// Sets the activity id in thread local storage and returns the previous value.
+            /// </summary>
+            GetSet = 4,
+
+            /// <summary>
+            /// Creates a new activity id, sets thread local storage, and returns the previous value.
+            /// </summary>
+            CreateSet = 5
+        }
+
+        [LibraryImport("api-ms-win-eventing-provider-l1-1-0.dll")]
+        internal static unsafe partial int EventActivityIdControl(ActivityControl controlCode, Guid* activityId);
+
+        internal static unsafe int GetEventActivityIdControl(ref Guid activityId)
+        {
+            fixed (Guid* guidPtr = &activityId)
+            {
+                return EventActivityIdControl(ActivityControl.Get, guidPtr);
+            }
+        }
+    }
+}
+#endif
diff --git a/src/System.Management.Automation/engine/Interop/Windows/FindClose.cs b/src/System.Management.Automation/engine/Interop/Windows/FindClose.cs
new file mode 100644
index 00000000000..a5903c72c70
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/FindClose.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-file-l1-1-0.dll")]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool FindClose(nint handle);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/FindExecutable.cs b/src/System.Management.Automation/engine/Interop/Windows/FindExecutable.cs
new file mode 100644
index 00000000000..2184e57a519
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/FindExecutable.cs
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+#if !UNIX
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        // The FindExecutable API is defined in shellapi.h as
+        // SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, __out_ecount(MAX_PATH) LPWSTR lpResult);
+        // HINSTANCE is void* so we need to use IntPtr (nint) as API return value.
+        [LibraryImport("shell32.dll", EntryPoint = "FindExecutableW", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial nint FindExecutableW(string fileName, string directoryPath, char* pathFound);
+
+        internal static string? FindExecutable(string filename)
+        {
+            string? result = null;
+
+            // HINSTANCE == PVOID == nint
+            nint resultCode = 0;
+
+            Span<char> buffer = stackalloc char[MAX_PATH];
+            unsafe
+            {
+                fixed (char* lpBuffer = buffer)
+                {
+                    resultCode = FindExecutableW(filename, string.Empty, lpBuffer);
+
+                    // If FindExecutable returns a result > 32, then it succeeded
+                    // and we return the string that was found, otherwise we
+                    // return null.
+                    if (resultCode > 32)
+                    {
+                        result = Marshal.PtrToStringUni((IntPtr)lpBuffer);
+                        return result;
+                    }
+                }
+            }
+
+            return null;
+        }
+    }
+}
+#endif
diff --git a/src/System.Management.Automation/engine/Interop/Windows/FindFirstFile.cs b/src/System.Management.Automation/engine/Interop/Windows/FindFirstFile.cs
new file mode 100644
index 00000000000..e53b0985cb6
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/FindFirstFile.cs
@@ -0,0 +1,66 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.Management.Automation;
+using System.Runtime.InteropServices;
+
+using Microsoft.Win32.SafeHandles;
+
+internal static partial class Interop
+{
+    [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Keep native struct names.")]
+    [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Keep native struct names.")]
+    internal static unsafe partial class Windows
+    {
+        internal const int MAX_PATH = 260;
+
+        internal struct FILE_TIME
+        {
+            public uint dwLowDateTime;
+            public uint dwHighDateTime;
+        }
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+        internal unsafe struct WIN32_FIND_DATA
+        {
+            internal uint dwFileAttributes;
+            internal FILE_TIME ftCreationTime;
+            internal FILE_TIME ftLastAccessTime;
+            internal FILE_TIME ftLastWriteTime;
+            internal uint nFileSizeHigh;
+            internal uint nFileSizeLow;
+            internal uint dwReserved0;
+            internal uint dwReserved1;
+            internal fixed char cFileName[MAX_PATH];
+            internal fixed char cAlternateFileName[14];
+        }
+
+        internal sealed class SafeFindHandle : SafeHandleZeroOrMinusOneIsInvalid
+        {
+            // .NET 8 requires the default constructor to be public
+            public SafeFindHandle() : base(true) { }
+
+            protected override bool ReleaseHandle()
+            {
+                return Interop.Windows.FindClose(this.handle);
+            }
+        }
+
+        // We use 'FindFirstFileW' instead of 'FindFirstFileExW' because the latter doesn't work correctly with Unicode file names on FAT32.
+        // See https://github.com/PowerShell/PowerShell/issues/16804
+        [LibraryImport("api-ms-win-core-file-l1-1-0.dll", EntryPoint = "FindFirstFileW", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)]
+        private static partial SafeFindHandle FindFirstFileW(string lpFileName, ref WIN32_FIND_DATA lpFindFileData);
+
+        internal static SafeFindHandle FindFirstFile(string lpFileName, ref WIN32_FIND_DATA lpFindFileData)
+        {
+            lpFileName = Path.TrimEndingDirectorySeparator(lpFileName);
+            lpFileName = PathUtils.EnsureExtendedPrefixIfNeeded(lpFileName);
+
+            return FindFirstFileW(lpFileName, ref lpFindFileData);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/GetConsoleWindow.cs b/src/System.Management.Automation/engine/Interop/Windows/GetConsoleWindow.cs
new file mode 100644
index 00000000000..60d9229ea64
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/GetConsoleWindow.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("Kernel32.dll")]
+        internal static partial nint GetConsoleWindow();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/GetCurrentThreadId.cs b/src/System.Management.Automation/engine/Interop/Windows/GetCurrentThreadId.cs
new file mode 100644
index 00000000000..80a0c7a4c43
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/GetCurrentThreadId.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-processthreads-l1-1-0.dll")]
+        internal static partial uint GetCurrentThreadId();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/GetForegroundWindow.cs b/src/System.Management.Automation/engine/Interop/Windows/GetForegroundWindow.cs
new file mode 100644
index 00000000000..2ba57535162
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/GetForegroundWindow.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("user32.dll")]
+        internal static partial nint GetForegroundWindow();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/GetOEMCP.cs b/src/System.Management.Automation/engine/Interop/Windows/GetOEMCP.cs
new file mode 100644
index 00000000000..4267deb1167
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/GetOEMCP.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("api-ms-win-core-localization-l1-2-0.dll")]
+        internal static partial uint GetOEMCP();
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/GetQueuedCompletionStatus.cs b/src/System.Management.Automation/engine/Interop/Windows/GetQueuedCompletionStatus.cs
new file mode 100644
index 00000000000..d23234e850b
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/GetQueuedCompletionStatus.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        public const int INFINITE = -1;
+
+        [LibraryImport("kernel32.dll", SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        private static partial bool GetQueuedCompletionStatus(
+            SafeIoCompletionPort CompletionPort,
+            out int lpNumberOfBytesTransferred,
+            out nint lpCompletionKey,
+            out nint lpOverlapped,
+            int dwMilliseconds);
+
+        internal static bool GetQueuedCompletionStatus(
+            SafeIoCompletionPort completionPort,
+            int timeoutMilliseconds,
+            out int status)
+        {
+            return GetQueuedCompletionStatus(
+                completionPort,
+                out status,
+                lpCompletionKey: out _,
+                lpOverlapped: out _,
+                timeoutMilliseconds);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/NetApiBufferFree.cs b/src/System.Management.Automation/engine/Interop/Windows/NetApiBufferFree.cs
new file mode 100644
index 00000000000..4f7d0541872
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/NetApiBufferFree.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+
+        [LibraryImport("Netapi32.dll")]
+        internal static partial uint NetApiBufferFree(nint Buffer);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/NetShareEnum.cs b/src/System.Management.Automation/engine/Interop/Windows/NetShareEnum.cs
new file mode 100644
index 00000000000..7efad887f1a
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/NetShareEnum.cs
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        internal const int MAX_PREFERRED_LENGTH = -1;
+        internal const int STYPE_DISKTREE = 0;
+        internal const int STYPE_MASK = 0x000000FF;
+
+        [LibraryImport("Netapi32.dll", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial int NetShareEnum(
+            string serverName,
+            int level,
+            out nint bufptr,
+            int prefMaxLen,
+            out uint entriesRead,
+            out uint totalEntries,
+            ref uint resumeHandle);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/NtQueryInformationProcess.cs b/src/System.Management.Automation/engine/Interop/Windows/NtQueryInformationProcess.cs
new file mode 100644
index 00000000000..1a839529737
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/NtQueryInformationProcess.cs
@@ -0,0 +1,31 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [StructLayout(LayoutKind.Sequential)]
+        internal struct PROCESS_BASIC_INFORMATION
+        {
+            public nint ExitStatus;
+            public nint PebBaseAddress;
+            public nint AffinityMask;
+            public nint BasePriority;
+            public nint UniqueProcessId;
+            public nint InheritedFromUniqueProcessId;
+        }
+
+        [LibraryImport("ntdll.dll")]
+        internal static partial int NtQueryInformationProcess(
+                nint processHandle,
+                int processInformationClass,
+                out PROCESS_BASIC_INFORMATION processInformation,
+                int processInformationLength,
+                out int returnLength);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/PostQueuedCompletionStatus.cs b/src/System.Management.Automation/engine/Interop/Windows/PostQueuedCompletionStatus.cs
new file mode 100644
index 00000000000..714eedcc3e5
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/PostQueuedCompletionStatus.cs
@@ -0,0 +1,27 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("kernel32.dll", SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        private static partial bool PostQueuedCompletionStatus(
+            SafeIoCompletionPort CompletionPort,
+            int lpNumberOfBytesTransferred,
+            nint lpCompletionKey,
+            nint lpOverlapped);
+
+        internal static bool PostQueuedCompletionStatus(
+            SafeIoCompletionPort completionPort,
+            int status)
+        {
+            return PostQueuedCompletionStatus(completionPort, status, nint.Zero, nint.Zero);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/QueryDosDevice.cs b/src/System.Management.Automation/engine/Interop/Windows/QueryDosDevice.cs
new file mode 100644
index 00000000000..d23899e8ef7
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/QueryDosDevice.cs
@@ -0,0 +1,124 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Buffers;
+using System.ComponentModel;
+using System.Management.Automation;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport(PinvokeDllNames.QueryDosDeviceDllName, EntryPoint = "QueryDosDeviceW", StringMarshalling = StringMarshalling.Utf16, SetLastError = true)]
+        internal static partial int QueryDosDevice(Span<char> lpDeviceName, Span<char> lpTargetPath, uint ucchMax);
+
+        internal static string GetDosDeviceForNetworkPath(char deviceName)
+        {
+            // By default buffer size is set to 300 which would generally be sufficient in most of the cases.
+            const int StartLength =
+#if DEBUG
+                // In debug, validate ArrayPool growth.
+                1;
+#else
+                300;
+#endif
+
+            Span<char> buffer = stackalloc char[StartLength + 1];
+            Span<char> fullDeviceName = [deviceName, ':', '\0'];
+            char[]? rentedArray = null;
+
+            try
+            {
+                while (true)
+                {
+                    uint length = (uint)buffer.Length;
+                    int retValue = QueryDosDevice(fullDeviceName, buffer, length);
+                    if (retValue > 0)
+                    {
+                        if (buffer.StartsWith("\\??\\"))
+                        {
+                            // QueryDosDevice always return array of NULL-terminating strings with additional final NULL
+                            // so the buffer has always two NULL-s on end.
+                            //
+                            // "\\??\\UNC\\localhost\\c$\\tmp\0\0" -> "UNC\\localhost\\c$\\tmp\0\0"
+                            Span<char> res = buffer.Slice(4);
+                            if (res.StartsWith("UNC"))
+                            {
+                                // -> "C\\localhost\\c$\\tmp\0\0" -> "\\\\localhost\\c$\\tmp"
+                                //
+                                // We need to take only first null-terminated string as QueryDosDevice() docs say.
+                                int i = 3;
+                                for (; i < res.Length; i++)
+                                {
+                                    if (res[i] == '\0')
+                                    {
+                                        break;
+                                    }
+                                }
+
+                                Diagnostics.Assert(i < res.Length, "Broken QueryDosDevice() buffer.");
+
+                                res = res.Slice(2, i);
+                                res[0] = '\\';
+
+                                // If we want always to have terminating slash -> "\\\\localhost\\c$\\tmp\\"
+                                // res = res.Slice(2, retValue - 3);
+                                // res[0] = '\\';
+                                // res[^1] = '\\';
+                            }
+                            // else if (res[^3] == ':')
+                            // {
+                            //     Diagnostics.Assert(false, "Really it is a dead code since GetDosDevice() is called only if PSDrive.DriveType == DriveType.Network");
+
+                            //     // The substed path is the root path of a drive. For example: subst Y: C:\
+                            //     // -> "C:\0\0" -> "C:\"
+                            //     res = res.Slice(0, retValue - 1);
+                            //     res[^1] = '\\';
+                            // }
+                            else
+                            {
+                                throw new Exception("GetDosDeviceForNetworkPath() can be called only if PSDrive.DriveType == DriveType.Network.");
+                            }
+
+                            return res.ToString();
+                        }
+                        else
+                        {
+                            Diagnostics.Assert(false, "Really it is a dead code since GetDosDevice() is called only if PSDrive.DriveType == DriveType.Network");
+
+                            // The drive name is not a substed path, then we return the root path of the drive
+                            // "C:\0" -> "C:\\"
+                            fullDeviceName[^1] = '\\';
+                            return fullDeviceName.ToString();
+                        }
+                    }
+
+                    const int ERROR_INSUFFICIENT_BUFFER = 122;
+                    int errorCode = Marshal.GetLastPInvokeError();
+                    if (errorCode != ERROR_INSUFFICIENT_BUFFER)
+                    {
+                        throw new Win32Exception((int)errorCode);
+                    }
+
+                    char[]? toReturn = rentedArray;
+                    buffer = rentedArray = ArrayPool<char>.Shared.Rent(buffer.Length * 2);
+                    if (toReturn is not null)
+                    {
+                        ArrayPool<char>.Shared.Return(toReturn);
+                    }
+                }
+            }
+            finally
+            {
+                if (rentedArray is not null)
+                {
+                    ArrayPool<char>.Shared.Return(rentedArray);
+                }
+            }
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/RtlQueryProcessPlaceholderCompatibilityMode.cs b/src/System.Management.Automation/engine/Interop/Windows/RtlQueryProcessPlaceholderCompatibilityMode.cs
new file mode 100644
index 00000000000..9e82f2c66c1
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/RtlQueryProcessPlaceholderCompatibilityMode.cs
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        internal const sbyte PHCM_APPLICATION_DEFAULT = 0;
+        internal const sbyte PHCM_DISGUISE_PLACEHOLDER = 1;
+        internal const sbyte PHCM_EXPOSE_PLACEHOLDERS = 2;
+        internal const sbyte PHCM_MAX = 2;
+        internal const sbyte PHCM_ERROR_INVALID_PARAMETER = -1;
+        internal const sbyte PHCM_ERROR_NO_TEB = -2;
+
+        [LibraryImport("ntdll.dll")]
+        internal static partial sbyte RtlQueryProcessPlaceholderCompatibilityMode();
+
+        [LibraryImport("ntdll.dll")]
+        internal static partial sbyte RtlSetProcessPlaceholderCompatibilityMode(sbyte pcm);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/SHGetFileInfo.cs b/src/System.Management.Automation/engine/Interop/Windows/SHGetFileInfo.cs
new file mode 100644
index 00000000000..a6deaa39c41
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/SHGetFileInfo.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Diagnostics.CodeAnalysis;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Keep native struct names.")]
+    [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Keep native struct names.")]
+    internal static partial class Windows
+    {
+        [StructLayout(LayoutKind.Sequential)]
+        internal unsafe struct SHFILEINFO
+        {
+            internal nint hIcon;
+            internal int iIcon;
+            internal uint dwAttributes;
+            internal fixed char szDisplayName[260];
+            internal fixed char szTypeName[80];
+
+            public static readonly uint s_Size = (uint)sizeof(SHFILEINFO);
+        }
+
+        [LibraryImport("shell32.dll", EntryPoint = "SHGetFileInfoW", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial nint SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
+
+        internal static int SHGetFileInfo(string pszPath)
+        {
+            // flag used to ask to return exe type
+            const uint SHGFI_EXETYPE = 0x000002000;
+            var shinfo = new SHFILEINFO();
+            return (int)SHGetFileInfo(pszPath, 0, ref shinfo, SHFILEINFO.s_Size, SHGFI_EXETYPE);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/SetForegroundWindow.cs b/src/System.Management.Automation/engine/Interop/Windows/SetForegroundWindow.cs
new file mode 100644
index 00000000000..5945fac9608
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/SetForegroundWindow.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("user32.dll")]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool SetForegroundWindow(nint hWnd);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/SetInformationJobObject.cs b/src/System.Management.Automation/engine/Interop/Windows/SetInformationJobObject.cs
new file mode 100644
index 00000000000..37d0e74f1f8
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/SetInformationJobObject.cs
@@ -0,0 +1,46 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        internal const int JobObjectAssociateCompletionPortInformation = 7;
+        internal const int JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO = 4;
+
+        [StructLayout(LayoutKind.Sequential)]
+        internal struct JOBOBJECT_ASSOCIATE_COMPLETION_PORT
+        {
+            public nint CompletionKey;
+            public nint CompletionPort;
+        }
+
+        [LibraryImport("kernel32.dll", SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        private static partial bool SetInformationJobObject(
+            SafeJobHandle hJob,
+            int JobObjectInformationClass,
+            ref JOBOBJECT_ASSOCIATE_COMPLETION_PORT lpJobObjectInformation,
+            int cbJobObjectInformationLength);
+
+        internal static bool SetInformationJobObject(
+            SafeJobHandle jobHandle,
+            SafeIoCompletionPort completionPort)
+        {
+            JOBOBJECT_ASSOCIATE_COMPLETION_PORT objectInfo = new()
+            {
+                CompletionKey = jobHandle.DangerousGetHandle(),
+                CompletionPort = completionPort.DangerousGetHandle(),
+            };
+            return SetInformationJobObject(
+                jobHandle,
+                JobObjectAssociateCompletionPortInformation,
+                ref objectInfo,
+                Marshal.SizeOf<JOBOBJECT_ASSOCIATE_COMPLETION_PORT>());
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/ShowWindow.cs b/src/System.Management.Automation/engine/Interop/Windows/ShowWindow.cs
new file mode 100644
index 00000000000..d33b0a0e244
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/ShowWindow.cs
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        internal const int SW_HIDE = 0;
+        internal const int SW_SHOWNORMAL = 1;
+        internal const int SW_NORMAL = 1;
+        internal const int SW_SHOWMINIMIZED = 2;
+        internal const int SW_SHOWMAXIMIZED = 3;
+        internal const int SW_MAXIMIZE = 3;
+        internal const int SW_SHOWNOACTIVATE = 4;
+        internal const int SW_SHOW = 5;
+        internal const int SW_MINIMIZE = 6;
+        internal const int SW_SHOWMINNOACTIVE = 7;
+        internal const int SW_SHOWNA = 8;
+        internal const int SW_RESTORE = 9;
+        internal const int SW_SHOWDEFAULT = 10;
+        internal const int SW_FORCEMINIMIZE = 11;
+        internal const int SW_MAX = 11;
+
+        [LibraryImport("user32.dll")]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        internal static partial bool ShowWindow(nint hWnd, int nCmdShow);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/VariantClear.cs b/src/System.Management.Automation/engine/Interop/Windows/VariantClear.cs
new file mode 100644
index 00000000000..414a0912c81
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/VariantClear.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        [LibraryImport("oleaut32.dll")]
+        internal static partial void VariantClear(nint pVariant);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/WNetAddConnection2.cs b/src/System.Management.Automation/engine/Interop/Windows/WNetAddConnection2.cs
new file mode 100644
index 00000000000..df66e743897
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/WNetAddConnection2.cs
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Windows
+    {
+        internal const int CONNECT_NOPERSIST = 0x00000000;
+        internal const int CONNECT_UPDATE_PROFILE = 0x00000001;
+        internal const int RESOURCE_GLOBALNET = 0x00000002;
+        internal const int RESOURCETYPE_ANY = 0x00000000;
+        internal const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;
+        internal const int RESOURCEUSAGE_CONNECTABLE = 0x00000001;
+
+        [StructLayout(LayoutKind.Sequential)]
+        internal unsafe struct NETRESOURCEW
+        {
+            public int Scope;
+            public int Type;
+            public int DisplayType;
+            public int Usage;
+            public char* LocalName;
+            public char* RemoteName;
+            public char* Comment;
+            public char* Provider;
+        }
+
+        [LibraryImport("mpr.dll", EntryPoint = "WNetAddConnection2W", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial int WNetAddConnection2(ref NETRESOURCEW netResource, byte[] password, string userName, int flags);
+
+        internal static unsafe int WNetAddConnection2(string localName, string remoteName, byte[] password, string userName, int connectType)
+        {
+            if (s_WNetApiNotAvailable)
+            {
+                return ERROR_NOT_SUPPORTED;
+            }
+
+            int errorCode = ERROR_NO_NETWORK;
+
+            fixed (char* pinnedLocalName = localName)
+            fixed (char* pinnedRemoteName = remoteName)
+            {
+                NETRESOURCEW resource = new NETRESOURCEW()
+                {
+                    Comment = null,
+                    DisplayType = RESOURCEDISPLAYTYPE_GENERIC,
+                    LocalName = pinnedLocalName,
+                    Provider = null,
+                    RemoteName = pinnedRemoteName,
+                    Scope = RESOURCE_GLOBALNET,
+                    Type = RESOURCETYPE_ANY,
+                    Usage = RESOURCEUSAGE_CONNECTABLE
+                };
+
+                try
+                {
+                    errorCode = WNetAddConnection2(ref resource, password, userName, connectType);
+                }
+                catch (System.DllNotFoundException)
+                {
+                    s_WNetApiNotAvailable = true;
+                    return ERROR_NOT_SUPPORTED;
+                }
+            }
+
+            return errorCode;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/WNetCancelConnection2.cs b/src/System.Management.Automation/engine/Interop/Windows/WNetCancelConnection2.cs
new file mode 100644
index 00000000000..0ff720ffd3e
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/WNetCancelConnection2.cs
@@ -0,0 +1,37 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        [LibraryImport("mpr.dll", EntryPoint = "WNetCancelConnection2W", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial int WNetCancelConnection2W(string driveName, int flags, [MarshalAs(UnmanagedType.Bool)] bool force);
+
+        internal static int WNetCancelConnection2(string driveName, int flags, bool force)
+        {
+            if (s_WNetApiNotAvailable)
+            {
+                return ERROR_NOT_SUPPORTED;
+            }
+
+            int errorCode = ERROR_NO_NETWORK;
+
+            try
+            {
+                errorCode = WNetCancelConnection2W(driveName, flags, force: true);
+            }
+            catch (System.DllNotFoundException)
+            {
+                s_WNetApiNotAvailable = true;
+                return ERROR_NOT_SUPPORTED;
+            }
+
+            return errorCode;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Interop/Windows/WNetGetConnection.cs b/src/System.Management.Automation/engine/Interop/Windows/WNetGetConnection.cs
new file mode 100644
index 00000000000..01667fb4274
--- /dev/null
+++ b/src/System.Management.Automation/engine/Interop/Windows/WNetGetConnection.cs
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Buffers;
+using System.Runtime.InteropServices;
+using System.Management.Automation.Internal;
+
+internal static partial class Interop
+{
+    internal static unsafe partial class Windows
+    {
+        private static bool s_WNetApiNotAvailable;
+
+        [LibraryImport("mpr.dll", EntryPoint = "WNetGetConnectionW", StringMarshalling = StringMarshalling.Utf16)]
+        internal static partial int WNetGetConnection(ReadOnlySpan<char> localName, Span<char> remoteName, ref int remoteNameLength);
+
+        internal static int GetUNCForNetworkDrive(char drive, out string? uncPath)
+        {
+            uncPath = null;
+            if (s_WNetApiNotAvailable)
+            {
+                return ERROR_NOT_SUPPORTED;
+            }
+
+            ReadOnlySpan<char> driveName = [drive, ':', '\0'];
+            int bufferSize = MAX_PATH;
+            Span<char> uncBuffer = stackalloc char[MAX_PATH];
+            if (InternalTestHooks.WNetGetConnectionBufferSize > 0 && InternalTestHooks.WNetGetConnectionBufferSize <= MAX_PATH)
+            {
+                bufferSize = InternalTestHooks.WNetGetConnectionBufferSize;
+                uncBuffer = uncBuffer.Slice(0, bufferSize);
+            }
+
+            char[]? rentedArray = null;
+            while (true)
+            {
+                int errorCode;
+                try
+                {
+                    try
+                    {
+                        errorCode = WNetGetConnection(driveName, uncBuffer, ref bufferSize);
+                    }
+                    catch (DllNotFoundException)
+                    {
+                        s_WNetApiNotAvailable = true;
+                        return ERROR_NOT_SUPPORTED;
+                    }
+
+                    if (errorCode == ERROR_SUCCESS)
+                    {
+                        // Cannot rely on bufferSize as it's only set if
+                        // the first call ended with ERROR_MORE_DATA,
+                        // instead slice at the null terminator.
+                        unsafe
+                        {
+                            fixed (char* uncBufferPtr = uncBuffer)
+                            {
+                                uncPath = new string(uncBufferPtr);
+                            }
+                        }
+                    }
+                }
+                finally
+                {
+                    if (rentedArray is not null)
+                    {
+                        ArrayPool<char>.Shared.Return(rentedArray);
+                    }
+                }
+
+                if (errorCode == ERROR_MORE_DATA)
+                {
+                    uncBuffer = rentedArray = ArrayPool<char>.Shared.Rent(bufferSize);
+                }
+                else
+                {
+                    return errorCode;
+                }
+            }
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/InvocationInfo.cs b/src/System.Management.Automation/engine/InvocationInfo.cs
index 6020b6e53a0..402d7c8d4a6 100644
--- a/src/System.Management.Automation/engine/InvocationInfo.cs
+++ b/src/System.Management.Automation/engine/InvocationInfo.cs
@@ -271,6 +271,18 @@ public string Line
             }
         }
 
+        /// <summary>
+        /// The full text of the invocation statement, may span multiple lines.
+        /// </summary>
+        /// <value>Statement that was entered to invoke this command.</value>
+        public string Statement
+        {
+            get
+            {
+                return ScriptPosition.Text;
+            }
+        }
+
         /// <summary>
         /// Formatted message indicating where the cmdlet appeared
         /// in the line.
@@ -440,11 +452,11 @@ internal void ToPSObjectForRemoting(PSObject psObject)
             if (extent != null)
             {
                 extent.ToPSObjectForRemoting(psObject);
-                RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", () => true);
+                RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", static () => true);
             }
             else
             {
-                RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", () => false);
+                RemotingEncoder.AddNoteProperty(psObject, "SerializeExtent", static () => false);
             }
 
             RemoteCommandInfo.ToPSObjectForRemoting(this.MyCommand, psObject);
diff --git a/src/System.Management.Automation/engine/LanguagePrimitives.cs b/src/System.Management.Automation/engine/LanguagePrimitives.cs
index 83361fe9662..13d8f66e5e9 100644
--- a/src/System.Management.Automation/engine/LanguagePrimitives.cs
+++ b/src/System.Management.Automation/engine/LanguagePrimitives.cs
@@ -9,11 +9,11 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Linq.Expressions;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
 using System.Numerics;
 using System.Reflection;
 using System.Reflection.Emit;
@@ -21,12 +21,12 @@
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Xml;
+using System.Security;
 
 using Dbg = System.Management.Automation.Diagnostics;
 using MethodCacheEntry = System.Management.Automation.DotNetAdapter.MethodCacheEntry;
 #if !UNIX
 using System.DirectoryServices;
-using System.Management;
 #endif
 
 #pragma warning disable 1634, 1691 // Stops compiler from warning about unknown warnings
@@ -202,7 +202,6 @@ public override object ConvertFrom(object sourceValue, Type destinationType, IFo
             string sourceAsString = (string)LanguagePrimitives.ConvertTo(sourceValue, typeof(string), formatProvider);
             return LanguagePrimitives.ConvertTo(sourceAsString, destinationType, formatProvider);
         }
-
         /// <summary>
         /// Returns false, since this converter is not designed to be used to
         /// convert from the type associated with the converted to other types.
@@ -311,9 +310,11 @@ public static class LanguagePrimitives
 
         internal static void CreateMemberNotFoundError(PSObject pso, DictionaryEntry property, Type resultType)
         {
-            string availableProperties = GetAvailableProperties(pso);
+            string settableProperties = GetSettableProperties(pso);
 
-            string message = StringUtil.Format(ExtendedTypeSystem.PropertyNotFound, property.Key.ToString(), resultType.FullName, availableProperties);
+            string message = settableProperties == string.Empty
+                ? StringUtil.Format(ExtendedTypeSystem.NoSettableProperty, property.Key.ToString(), resultType.FullName)
+                : StringUtil.Format(ExtendedTypeSystem.PropertyNotFound, property.Key.ToString(), resultType.FullName, settableProperties);
 
             typeConversion.WriteLine("Issuing an error message about not being able to create an object from hashtable.");
             throw new InvalidOperationException(message);
@@ -339,12 +340,13 @@ internal static void UpdateTypeConvertFromTypeTable(string typeName)
         {
             lock (s_converterCache)
             {
-                var toRemove = s_converterCache.Keys.Where(
-                    conv => string.Equals(conv.to.FullName, typeName, StringComparison.OrdinalIgnoreCase) ||
-                            string.Equals(conv.from.FullName, typeName, StringComparison.OrdinalIgnoreCase)).ToArray();
-                foreach (var k in toRemove)
+                foreach (var key in s_converterCache.Keys)
                 {
-                    s_converterCache.Remove(k);
+                    if (string.Equals(key.to.FullName, typeName, StringComparison.OrdinalIgnoreCase)
+                        || string.Equals(key.from.FullName, typeName, StringComparison.OrdinalIgnoreCase))
+                    {
+                        s_converterCache.Remove(key);
+                    }
                 }
 
                 // Note we do not clear possibleTypeConverter even when removing.
@@ -362,7 +364,7 @@ internal static void UpdateTypeConvertFromTypeTable(string typeName)
         /// implementation of an object when we can't use it's non-generic
         /// implementation.
         /// </summary>
-        private class EnumerableTWrapper : IEnumerable
+        private sealed class EnumerableTWrapper : IEnumerable
         {
             private readonly object _enumerable;
             private readonly Type _enumerableType;
@@ -632,12 +634,9 @@ public static bool Equals(object first, object second, bool ignoreCase, IFormatP
             // If second can be converted to the type of the first, it does so and returns first.Equals(secondConverted)
             // Otherwise false is returned
 
-            if (formatProvider == null)
-            {
-                formatProvider = CultureInfo.InvariantCulture;
-            }
+            formatProvider ??= CultureInfo.InvariantCulture;
 
-            if (!(formatProvider is CultureInfo culture))
+            if (formatProvider is not CultureInfo culture)
             {
                 throw PSTraceSource.NewArgumentException(nameof(formatProvider));
             }
@@ -779,12 +778,9 @@ public static int Compare(object first, object second, bool ignoreCase)
         /// </exception>
         public static int Compare(object first, object second, bool ignoreCase, IFormatProvider formatProvider)
         {
-            if (formatProvider == null)
-            {
-                formatProvider = CultureInfo.InvariantCulture;
-            }
+            formatProvider ??= CultureInfo.InvariantCulture;
 
-            if (!(formatProvider is CultureInfo culture))
+            if (formatProvider is not CultureInfo culture)
             {
                 throw PSTraceSource.NewArgumentException(nameof(formatProvider));
             }
@@ -899,10 +895,7 @@ public static bool TryCompare(object first, object second, bool ignoreCase, out
         public static bool TryCompare(object first, object second, bool ignoreCase, IFormatProvider formatProvider, out int result)
         {
             result = 0;
-            if (formatProvider == null)
-            {
-                formatProvider = CultureInfo.InvariantCulture;
-            }
+            formatProvider ??= CultureInfo.InvariantCulture;
 
             if (formatProvider is not CultureInfo culture)
             {
@@ -1043,7 +1036,7 @@ internal static bool IsTrue(IList objectArray)
                     // but since we don't want this to recurse indefinitely
                     // we explicitly check the case where it would recurse
                     // and deal with it.
-                    if (!(PSObject.Base(objectArray[0]) is IList firstElement))
+                    if (PSObject.Base(objectArray[0]) is not IList firstElement)
                     {
                         return IsTrue(objectArray[0]);
                     }
@@ -1889,7 +1882,7 @@ public override object ConvertFrom(object sourceValue, Type destinationType, IFo
 
         internal class EnumSingleTypeConverter : PSTypeConverter
         {
-            private class EnumHashEntry
+            private sealed class EnumHashEntry
             {
                 internal EnumHashEntry(string[] names, Array values, UInt64 allValues, bool hasNegativeValue, bool hasFlagsAttribute)
                 {
@@ -2083,6 +2076,22 @@ internal static string EnumValues(Type enumType)
                 return string.Join(CultureInfo.CurrentUICulture.TextInfo.ListSeparator, enumHashEntry.names);
             }
 
+            /// <summary>
+            /// Returns all names for the provided enum type.
+            /// </summary>
+            /// <param name="enumType">The enum type to retrieve names from.</param>
+            /// <returns>Array of enum names for the specified type.</returns>
+            internal static string[] GetEnumNames(Type enumType)
+                => EnumSingleTypeConverter.GetEnumHashEntry(enumType).names;
+
+            /// <summary>
+            /// Returns all values for the provided enum type.
+            /// </summary>
+            /// <param name="enumType">The enum type to retrieve values from.</param>
+            /// <returns>Array of enum values for the specified type.</returns>
+            internal static Array GetEnumValues(Type enumType)
+                => EnumSingleTypeConverter.GetEnumHashEntry(enumType).values;
+
             public override object ConvertFrom(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
             {
                 return EnumSingleTypeConverter.BaseConvertFrom(sourceValue, destinationType, formatProvider, ignoreCase, false);
@@ -2091,7 +2100,7 @@ public override object ConvertFrom(object sourceValue, Type destinationType, IFo
             protected static object BaseConvertFrom(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase, bool multipleValues)
             {
                 Diagnostics.Assert(sourceValue != null, "the type converter has a special case for null source values");
-                if (!(sourceValue is string sourceValueString))
+                if (sourceValue is not string sourceValueString)
                 {
                     throw new PSInvalidCastException("InvalidCastEnumFromTypeNotAString", null,
                         ExtendedTypeSystem.InvalidCastException,
@@ -2153,7 +2162,7 @@ protected static object BaseConvertFrom(object sourceValue, Type destinationType
                 }
                 else
                 {
-                    sourceValueEntries = sourceValueString.Split(Utils.Separators.Comma);
+                    sourceValueEntries = sourceValueString.Split(',');
                     fromValuePatterns = new WildcardPattern[sourceValueEntries.Length];
                     for (int i = 0; i < sourceValueEntries.Length; i++)
                     {
@@ -2933,17 +2942,12 @@ private static object ConvertStringToInteger(
                     return result;
                 }
 
-                if (resultType == typeof(BigInteger))
-                {
-                    // Fallback for BigInteger: manual parsing using any common format.
-                    NumberStyles style = NumberStyles.AllowLeadingSign
-                        | NumberStyles.AllowDecimalPoint
-                        | NumberStyles.AllowExponent
-                        | NumberStyles.AllowHexSpecifier;
+               if (resultType == typeof(BigInteger))
+               {
+                    NumberStyles style = NumberStyles.Integer | NumberStyles.AllowThousands;
 
                     return BigInteger.Parse(strToConvert, style, NumberFormatInfo.InvariantInfo);
                 }
-
                 // Fallback conversion for regular numeric types.
                 return GetIntegerSystemConverter(resultType).ConvertFrom(strToConvert);
             }
@@ -3684,7 +3688,7 @@ private static object ConvertEnumerableToEnum(object valueToConvert,
             return ConvertStringToEnum(sbResult.ToString(), resultType, recursion, originalValueToConvert, formatProvider, backupTable);
         }
 
-        private class PSMethodToDelegateConverter
+        private sealed class PSMethodToDelegateConverter
         {
             // Index of the matching overload method.
             private readonly int _matchIndex;
@@ -3744,7 +3748,7 @@ internal Delegate Convert(object valueToConvert,
             }
         }
 
-        private class ConvertViaParseMethod
+        private sealed class ConvertViaParseMethod
         {
             // TODO - use an ETS wrapper that generates a dynamic method
             internal MethodInfo parse;
@@ -3810,7 +3814,7 @@ internal object ConvertWithoutCulture(object valueToConvert,
             }
         }
 
-        private class ConvertViaConstructor
+        private sealed class ConvertViaConstructor
         {
             internal Func<object, object> TargetCtorLambda;
 
@@ -3849,12 +3853,12 @@ internal object Convert(object valueToConvert,
         /// Create a IList to hold all elements, and use the IList to create the object of the resultType.
         /// The reason for using IList is that it can work on constructors that takes IEnumerable[T], ICollection[T] or IList[T].
         /// </summary>
-        /// <remark>
+        /// <remarks>
         /// When get to this method, we know the fromType and the toType meet the following two conditions:
         /// 1. toType is a closed generic type and it has a constructor that takes IEnumerable[T], ICollection[T] or IList[T]
         /// 2. fromType is System.Array, System.Object[] or it's the same as the element type of toType
-        /// </remark>
-        private class ConvertViaIEnumerableConstructor
+        /// </remarks>
+        private sealed class ConvertViaIEnumerableConstructor
         {
             internal Func<int, IList> ListCtorLambda;
             internal Func<IList, object> TargetCtorLambda;
@@ -3947,7 +3951,7 @@ internal object Convert(object valueToConvert,
             }
         }
 
-        private class ConvertViaNoArgumentConstructor
+        private sealed class ConvertViaNoArgumentConstructor
         {
             private readonly Func<object> _constructor;
 
@@ -3984,32 +3988,46 @@ internal object Convert(object valueToConvert,
                     //  - It's in FullLanguage but not because it's part of a parameter binding that is transitioning from ConstrainedLanguage to FullLanguage
                     // When this is invoked from a parameter binding in transition from ConstrainedLanguage environment to FullLanguage command, we disallow
                     // the property conversion because it's dangerous.
-                    if (ecFromTLS == null || (ecFromTLS.LanguageMode == PSLanguageMode.FullLanguage && !ecFromTLS.LanguageModeTransitionInParameterBinding))
+                    bool canProceedWithConversion = ecFromTLS == null || (ecFromTLS.LanguageMode == PSLanguageMode.FullLanguage && !ecFromTLS.LanguageModeTransitionInParameterBinding);
+                    if (!canProceedWithConversion)
                     {
-                        result = _constructor();
-                        var psobject = valueToConvert as PSObject;
-                        if (psobject != null)
-                        {
-                            // Use PSObject properties to perform conversion.
-                            SetObjectProperties(result, psobject, resultType, CreateMemberNotFoundError, CreateMemberSetValueError, formatProvider, recursion, ignoreUnknownMembers);
-                        }
-                        else
+                        if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
                         {
-                            // Use provided property dictionary to perform conversion.
-                            // The method invocation is disabled for "Hashtable to Object conversion" (Win8:649519), but we need to keep it enabled for New-Object for compatibility to PSv2
-                            IDictionary properties = valueToConvert as IDictionary;
-                            SetObjectProperties(result, properties, resultType, CreateMemberNotFoundError, CreateMemberSetValueError, enableMethodCall: false);
+                            throw InterpreterError.NewInterpreterException(
+                                valueToConvert,
+                                typeof(RuntimeException),
+                                errorPosition: null,
+                                "HashtableToObjectConversionNotSupportedInDataSection",
+                                ParserStrings.HashtableToObjectConversionNotSupportedInDataSection,
+                                resultType.ToString());
                         }
 
-                        typeConversion.WriteLine("Constructor result: \"{0}\".", result);
+                        // When in audit mode, we report but don't enforce, so we will proceed with the conversion.
+                        SystemPolicy.LogWDACAuditMessage(
+                                context: ecFromTLS,
+                                title: ExtendedTypeSystem.WDACHashTypeLogTitle,
+                                message: StringUtil.Format(ExtendedTypeSystem.WDACHashTypeLogMessage, resultType.FullName),
+                                fqid: "LanguageHashtableConversionNotAllowed",
+                                dropIntoDebugger: true);
+                    }
+
+                    result = _constructor();
+                    var psobject = valueToConvert as PSObject;
+                    if (psobject != null)
+                    {
+                        // Use PSObject properties to perform conversion.
+                        SetObjectProperties(result, psobject, resultType, CreateMemberNotFoundError, CreateMemberSetValueError, formatProvider, recursion, ignoreUnknownMembers);
                     }
                     else
                     {
-                        RuntimeException rte = InterpreterError.NewInterpreterException(valueToConvert, typeof(RuntimeException), null,
-                            "HashtableToObjectConversionNotSupportedInDataSection", ParserStrings.HashtableToObjectConversionNotSupportedInDataSection, resultType.ToString());
-                        throw rte;
+                        // Use provided property dictionary to perform conversion.
+                        // The method invocation is disabled for "Hashtable to Object conversion" (Win8:649519), but we need to keep it enabled for New-Object for compatibility to PSv2
+                        IDictionary properties = valueToConvert as IDictionary;
+                        SetObjectProperties(result, properties, resultType, CreateMemberNotFoundError, CreateMemberSetValueError, enableMethodCall: false);
                     }
 
+                    typeConversion.WriteLine("Constructor result: \"{0}\".", result);
+
                     return result;
                 }
                 catch (TargetInvocationException ex)
@@ -4050,7 +4068,7 @@ internal object Convert(object valueToConvert,
             }
         }
 
-        private class ConvertViaCast
+        private sealed class ConvertViaCast
         {
             internal MethodInfo cast;
 
@@ -4130,7 +4148,7 @@ private static object ConvertNumericIConvertible(object valueToConvert,
             }
         }
 
-        private class ConvertCheckingForCustomConverter
+        private sealed class ConvertCheckingForCustomConverter
         {
             internal PSConverter<object> tryfirstConverter;
             internal PSConverter<object> fallbackConverter;
@@ -4673,7 +4691,7 @@ internal static PSObject SetObjectProperties(object o, IDictionary properties, T
                                     Type propType;
                                     if (TypeResolver.TryResolveType(property.TypeNameOfValue, out propType))
                                     {
-                                        if (formatProvider == null) { formatProvider = CultureInfo.InvariantCulture; }
+                                        formatProvider ??= CultureInfo.InvariantCulture;
 
                                         try
                                         {
@@ -4698,6 +4716,12 @@ internal static PSObject SetObjectProperties(object o, IDictionary properties, T
                                     }
                                 }
 
+                                // treat AutomationNull.Value as null for consistency
+                                if (propValue == AutomationNull.Value)
+                                {
+                                    propValue = null;
+                                }
+
                                 property.Value = propValue;
                             }
                             else
@@ -4735,18 +4759,23 @@ internal static PSObject SetObjectProperties(object o, IDictionary properties, T
             return pso;
         }
 
-        private static string GetAvailableProperties(PSObject pso)
+        private static string GetSettableProperties(PSObject pso)
         {
+            if (pso is null || pso.Properties is null)
+            {
+                return string.Empty;
+            }
+
             StringBuilder availableProperties = new StringBuilder();
             bool first = true;
 
-            if (pso != null && pso.Properties != null)
+            foreach (PSPropertyInfo p in pso.Properties)
             {
-                foreach (PSPropertyInfo p in pso.Properties)
+                if (p.IsSettable)
                 {
                     if (!first)
                     {
-                        availableProperties.Append(" , ");
+                        availableProperties.Append(", ");
                     }
 
                     availableProperties.Append("[" + p.Name + " <" + p.TypeNameOfValue + ">]");
@@ -4894,8 +4923,26 @@ internal static Tuple<string, string> GetInvalidCastMessages(object valueToConve
 
             typeConversion.WriteLine("Type Conversion failed.");
             errorId = "ConvertToFinalInvalidCastException";
-            errorMsg = StringUtil.Format(ExtendedTypeSystem.InvalidCastException, valueToConvert.ToString(),
-                                         ObjectToTypeNameString(valueToConvert), resultType.ToString());
+
+            string valueToConvertTypeName = ObjectToTypeNameString(valueToConvert);
+            string resultTypeName = resultType.ToString();
+
+            if (resultType == typeof(SecureString) || resultType == typeof(PSCredential))
+            {
+                errorMsg = StringUtil.Format(
+                    ExtendedTypeSystem.InvalidCastExceptionWithoutValue,
+                    valueToConvertTypeName,
+                    resultTypeName);
+            }
+            else
+            {
+                errorMsg = StringUtil.Format(
+                    ExtendedTypeSystem.InvalidCastException,
+                    valueToConvert.ToString(),
+                    valueToConvertTypeName,
+                    resultTypeName);
+            }
+
             return Tuple.Create(errorId, errorMsg);
         }
 
@@ -5633,33 +5680,33 @@ internal static IConversionData FigureConversion(Type fromType, Type toType)
             PSConverter<object> converter = null;
             ConversionRank rank = ConversionRank.None;
 
-            // If we've ever used ConstrainedLanguage, check if the target type is allowed
+            // If we've ever used ConstrainedLanguage, check if the target type is allowed.
             if (ExecutionContext.HasEverUsedConstrainedLanguage)
             {
                 var context = LocalPipeline.GetExecutionContextFromTLS();
-
-                if ((context != null) && (context.LanguageMode == PSLanguageMode.ConstrainedLanguage))
+                if (context?.LanguageMode == PSLanguageMode.ConstrainedLanguage)
                 {
-                    if ((toType != typeof(object)) &&
-                        (toType != typeof(object[])) &&
-                        (!CoreTypes.Contains(toType)))
+                    if (toType != typeof(object) &&
+                        toType != typeof(object[]) &&
+                        !CoreTypes.Contains(toType))
                     {
-                        converter = ConvertNotSupportedConversion;
-                        rank = ConversionRank.None;
-                        return CacheConversion(fromType, toType, converter, rank);
+                        if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                        {
+                            converter = ConvertNotSupportedConversion;
+                            rank = ConversionRank.None;
+                            return CacheConversion(fromType, toType, converter, rank);
+                        }
+
+                        SystemPolicy.LogWDACAuditMessage(
+                            context: context,
+                            title: ExtendedTypeSystem.WDACTypeConversionLogTitle,
+                            message: StringUtil.Format(ExtendedTypeSystem.WDACTypeConversionLogMessage, fromType.FullName, toType.FullName),
+                            fqid: "LanguageTypeConversionNotAllowed",
+                            dropIntoDebugger: true);
                     }
                 }
             }
 
-            // Assemblies in CoreCLR might not allow reflection execution on their internal types.
-            if (!TypeResolver.IsPublic(toType) && DotNetAdapter.DisallowPrivateReflection(toType))
-            {
-                // If the type is non-public and reflection execution is not allowed on it, then we return
-                // 'ConvertNoConversion', because we won't be able to invoke constructor, methods or set
-                // properties on an instance of this type through reflection.
-                return CacheConversion(fromType, toType, ConvertNoConversion, ConversionRank.None);
-            }
-
             PSConverter<object> valueDependentConversion = null;
             ConversionRank valueDependentRank = ConversionRank.None;
             IConversionData conversionData = FigureLanguageConversion(fromType, toType, out valueDependentConversion, out valueDependentRank);
@@ -5745,10 +5792,7 @@ internal static IConversionData FigureConversion(Type fromType, Type toType)
                 }
             }
 
-            if (converter == null)
-            {
-                converter = FigurePropertyConversion(fromType, toType, ref rank);
-            }
+            converter ??= FigurePropertyConversion(fromType, toType, ref rank);
 
             if (TypeConverterPossiblyExists(fromType) || TypeConverterPossiblyExists(toType)
                 || (converter != null && valueDependentConversion != null))
diff --git a/src/System.Management.Automation/engine/ManagementObjectAdapter.cs b/src/System.Management.Automation/engine/ManagementObjectAdapter.cs
index c591a6963ec..9b69ee168d7 100644
--- a/src/System.Management.Automation/engine/ManagementObjectAdapter.cs
+++ b/src/System.Management.Automation/engine/ManagementObjectAdapter.cs
@@ -172,7 +172,7 @@ protected override T GetMember<T>(object obj, string memberName)
         {
             tracer.WriteLine("Getting member with name {0}", memberName);
 
-            if (!(obj is ManagementBaseObject mgmtObject))
+            if (obj is not ManagementBaseObject mgmtObject)
             {
                 return null;
             }
@@ -364,7 +364,7 @@ protected override object PropertyGet(PSProperty property)
         /// <param name="convertIfPossible">Instructs the adapter to convert before setting, if the adapter supports conversion.</param>
         protected override void PropertySet(PSProperty property, object setValue, bool convertIfPossible)
         {
-            if (!(property.baseObject is ManagementBaseObject mObj))
+            if (property.baseObject is not ManagementBaseObject mObj)
             {
                 throw new SetValueInvocationException("CannotSetNonManagementObjectMsg",
                     null,
@@ -454,7 +454,7 @@ protected static CacheTable GetInstanceMethodTable(ManagementBaseObject wmiObjec
 
                 // unique identifier for identifying this ManagementObject's type
                 ManagementPath classPath = wmiObject.ClassPath;
-                string key = string.Format(CultureInfo.InvariantCulture, "{0}#{1}", classPath.Path, staticBinding.ToString());
+                string key = string.Create(CultureInfo.InvariantCulture, $"{classPath.Path}#{staticBinding}");
 
                 typeTable = (CacheTable)s_instanceMethodCacheTable[key];
                 if (typeTable != null)
@@ -577,8 +577,11 @@ protected static string GetEmbeddedObjectTypeName(PropertyData pData)
             try
             {
                 string cimType = (string)pData.Qualifiers["cimtype"].Value;
-                result = string.Format(CultureInfo.InvariantCulture, "{0}#{1}",
-                    typeof(ManagementObject).FullName, cimType.Replace("object:", string.Empty));
+                result = string.Format(
+                    CultureInfo.InvariantCulture,
+                    "{0}#{1}",
+                    typeof(ManagementObject).FullName,
+                    cimType.Replace("object:", string.Empty));
             }
             catch (ManagementException)
             {
@@ -1162,9 +1165,7 @@ protected override PSProperty DoGetProperty(ManagementBaseObject wmiObject, stri
                                     PSLevel.Informational,
                                     PSTask.None,
                                     PSKeyword.UseAlwaysOperational,
-                                    string.Format(CultureInfo.InvariantCulture,
-                                                  "ManagementBaseObjectAdapter::DoGetProperty::PropertyName:{0}, Exception:{1}, StackTrace:{2}",
-                                                  propertyName, e.Message, e.StackTrace),
+                                    string.Create(CultureInfo.InvariantCulture, $"ManagementBaseObjectAdapter::DoGetProperty::PropertyName:{propertyName}, Exception:{e.Message}, StackTrace:{e.StackTrace}"),
                                     string.Empty,
                                     string.Empty);
                 // ignore the exception.
diff --git a/src/System.Management.Automation/engine/MergedCommandParameterMetadata.cs b/src/System.Management.Automation/engine/MergedCommandParameterMetadata.cs
index f2d20c68ec9..d2b972a118d 100644
--- a/src/System.Management.Automation/engine/MergedCommandParameterMetadata.cs
+++ b/src/System.Management.Automation/engine/MergedCommandParameterMetadata.cs
@@ -163,6 +163,13 @@ internal Collection<MergedCompiledCommandParameter> AddMetadataForBinder(
         /// </summary>
         private uint _nextAvailableParameterSetIndex;
 
+        /// <summary>
+        /// The maximum number of parameter sets allowed. Limit is set by the use
+        /// of a uint bitmask to store which parameter sets a parameter is included in.
+        /// See <see cref="ParameterSetSpecificMetadata.ParameterSetFlag"/>.
+        /// </summary>
+        private const uint MaxParameterSetCount = 32;
+
         /// <summary>
         /// Gets the number of parameter sets that were declared for the command.
         /// </summary>
@@ -228,7 +235,7 @@ private int AddParameterSetToMap(string parameterSetName)
                 // A parameter set name should only be added once
                 if (index == -1)
                 {
-                    if (_nextAvailableParameterSetIndex == uint.MaxValue)
+                    if (_nextAvailableParameterSetIndex >= MaxParameterSetCount)
                     {
                         // Don't let the parameter set index overflow
                         ParsingMetadataException parsingException =
diff --git a/src/System.Management.Automation/engine/Modules/AnalysisCache.cs b/src/System.Management.Automation/engine/Modules/AnalysisCache.cs
index 084c8c4674e..8a5f29e2b16 100644
--- a/src/System.Management.Automation/engine/Modules/AnalysisCache.cs
+++ b/src/System.Management.Automation/engine/Modules/AnalysisCache.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Buffers;
 using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -33,13 +34,12 @@ internal static class AnalysisCache
 
         // This dictionary shouldn't see much use, so low concurrency and capacity
         private static readonly ConcurrentDictionary<string, string> s_modulesBeingAnalyzed =
-            new ConcurrentDictionary<string, string>( /*concurrency*/1, /*capacity*/2, StringComparer.OrdinalIgnoreCase);
+            new(concurrencyLevel: 1, capacity: 2, StringComparer.OrdinalIgnoreCase);
 
-        internal static readonly char[] InvalidCommandNameCharacters = new[]
-        {
-            '#', ',', '(', ')', '{', '}', '[', ']', '&', '/', '\\', '$', '^', ';', ':',
-            '"', '\'', '<', '>', '|', '?', '@', '`', '*', '%', '+', '=', '~'
-        };
+        internal static readonly SearchValues<char> InvalidCommandNameCharacters = SearchValues.Create("#,(){}[]&/\\$^;:\"'<>|?@`*%+=~");
+
+        internal static bool ContainsInvalidCommandNameCharacters(ReadOnlySpan<char> text)
+            => text.ContainsAny(InvalidCommandNameCharacters);
 
         internal static ConcurrentDictionary<string, CommandTypes> GetExportedCommands(string modulePath, bool testOnly, ExecutionContext context)
         {
@@ -194,7 +194,7 @@ internal static bool ModuleIsEditionIncompatible(string modulePath, Hashtable mo
 
         internal static bool ModuleAnalysisViaGetModuleRequired(object modulePathObj, bool hadCmdlets, bool hadFunctions, bool hadAliases)
         {
-            if (!(modulePathObj is string modulePath))
+            if (modulePathObj is not string modulePath)
                 return true;
 
             if (modulePath.EndsWith(StringLiterals.PowerShellModuleFileExtension, StringComparison.OrdinalIgnoreCase))
@@ -256,7 +256,7 @@ private static bool CheckModulesTypesInManifestAgainstExportedCommands(Hashtable
                     return ModuleAnalysisViaGetModuleRequired(nestedModule, hadCmdlets, hadFunctions, hadAliases);
                 }
 
-                if (!(nestedModules is object[] nestedModuleArray))
+                if (nestedModules is not object[] nestedModuleArray)
                     return true;
 
                 foreach (var element in nestedModuleArray)
@@ -345,7 +345,7 @@ private static ConcurrentDictionary<string, CommandTypes> AnalyzeScriptModule(st
             {
                 if (SessionStateUtilities.MatchesAnyWildcardPattern(command, scriptAnalysisPatterns, true))
                 {
-                    if (command.IndexOfAny(InvalidCommandNameCharacters) < 0)
+                    if (!ContainsInvalidCommandNameCharacters(command))
                     {
                         result[command] = CommandTypes.Function;
                     }
@@ -357,10 +357,10 @@ private static ConcurrentDictionary<string, CommandTypes> AnalyzeScriptModule(st
             {
                 var commandName = pair.Key;
                 // These are already filtered
-                if (commandName.IndexOfAny(InvalidCommandNameCharacters) < 0)
+                if (!ContainsInvalidCommandNameCharacters(commandName))
                 {
                     result.AddOrUpdate(commandName, CommandTypes.Alias,
-                        (_, existingCommandType) => existingCommandType | CommandTypes.Alias);
+                        static (_, existingCommandType) => existingCommandType | CommandTypes.Alias);
                 }
             }
 
@@ -375,7 +375,7 @@ private static ConcurrentDictionary<string, CommandTypes> AnalyzeScriptModule(st
                     {
                         var command = Path.GetFileNameWithoutExtension(item);
                         result.AddOrUpdate(command, CommandTypes.ExternalScript,
-                            (_, existingCommandType) => existingCommandType | CommandTypes.ExternalScript);
+                            static (_, existingCommandType) => existingCommandType | CommandTypes.ExternalScript);
                     }
                 }
                 catch (UnauthorizedAccessException)
@@ -384,8 +384,10 @@ private static ConcurrentDictionary<string, CommandTypes> AnalyzeScriptModule(st
                 }
             }
 
-            var exportedClasses = new ConcurrentDictionary<string, TypeAttributes>( /*concurrency*/
-                1, scriptAnalysis.DiscoveredClasses.Count, StringComparer.OrdinalIgnoreCase);
+            ConcurrentDictionary<string, TypeAttributes> exportedClasses = new(
+                concurrencyLevel: 1,
+                capacity: scriptAnalysis.DiscoveredClasses.Count,
+                StringComparer.OrdinalIgnoreCase);
             foreach (var exportedClass in scriptAnalysis.DiscoveredClasses)
             {
                 exportedClasses[exportedClass.Name] = exportedClass.TypeAttributes;
@@ -640,7 +642,7 @@ private static bool GetModuleEntryFromCache(string modulePath, out DateTime last
         }
     }
 
-    internal class AnalysisCacheData
+    internal sealed class AnalysisCacheData
     {
         private static byte[] GetHeader()
         {
@@ -662,6 +664,11 @@ private static byte[] GetHeader()
 
         public void QueueSerialization()
         {
+            if (string.IsNullOrEmpty(s_cacheStoreLocation))
+            {
+                return;
+            }
+
             // We expect many modules to rapidly call for serialization.
             // Instead of doing it right away, we'll queue a task that starts writing
             // after it seems like we've stopped adding stuff to write out.  This is
@@ -1090,7 +1097,7 @@ static AnalysisCacheData()
             // When multiple copies of pwsh are on the system, they should use their own copy of the cache.
             // Append hash of `$PSHOME` to cacheFileName.
             string hashString = CRC32Hash.ComputeHash(Utils.DefaultPowerShellAppBase);
-            cacheFileName = string.Format(CultureInfo.InvariantCulture, "{0}-{1}", cacheFileName, hashString);
+            cacheFileName = string.Create(CultureInfo.InvariantCulture, $"{cacheFileName}-{hashString}");
 
             if (ExperimentalFeature.EnabledExperimentalFeatureNames.Count > 0)
             {
@@ -1116,10 +1123,10 @@ static AnalysisCacheData()
                 // Use CRC32 because it's faster.
                 // It's very unlikely to get collision from hashing the combinations of enabled features names.
                 hashString = CRC32Hash.ComputeHash(allNames);
-                cacheFileName = string.Format(CultureInfo.InvariantCulture, "{0}-{1}", cacheFileName, hashString);
+                cacheFileName = string.Create(CultureInfo.InvariantCulture, $"{cacheFileName}-{hashString}");
             }
 
-            s_cacheStoreLocation = Path.Combine(Platform.CacheDirectory, cacheFileName);
+            Platform.TryDeriveFromCache(cacheFileName, out s_cacheStoreLocation);
         }
     }
 
diff --git a/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs b/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs
index 8520e39258b..3b47bc37f10 100644
--- a/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/ExportModuleMemberCommand.cs
@@ -6,6 +6,7 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Management.Automation;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Security;
 
 //
 // Now define the set of commands for manipulating modules.
@@ -167,9 +168,19 @@ protected override void ProcessRecord()
             if (Context.EngineSessionState.Module?.LanguageMode != null &&
                 Context.LanguageMode != Context.EngineSessionState.Module.LanguageMode)
             {
-                var se = new PSSecurityException(Modules.CannotExportMembersAccrossLanguageBoundaries);
-                var er = new ErrorRecord(se, "Modules_CannotExportMembersAccrossLanguageBoundaries", ErrorCategory.SecurityError, this);
-                ThrowTerminatingError(er);
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    var se = new PSSecurityException(Modules.CannotExportMembersAccrossLanguageBoundaries);
+                    var er = new ErrorRecord(se, "Modules_CannotExportMembersAccrossLanguageBoundaries", ErrorCategory.SecurityError, this);
+                    ThrowTerminatingError(er);
+                }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Context,
+                    title: Modules.WDACExportModuleCommandLogTitle,
+                    message: StringUtil.Format(Modules.WDACExportModuleCommandLogMessage, Context.EngineSessionState.Module.Name, Context.EngineSessionState.Module.LanguageMode, Context.LanguageMode),
+                    fqid: "ExportModuleMemberCmdletNotAllowed",
+                    dropIntoDebugger: true);
             }
 
             ModuleIntrinsics.ExportModuleMembers(this,
diff --git a/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs b/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs
index 663e1f4b0fe..caf7527d73e 100644
--- a/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/GetModuleCommand.cs
@@ -265,7 +265,7 @@ private IEnumerable<PSModuleInfo> GetAvailableViaCimSessionCore(IEnumerable<stri
 
             IEnumerable<PSModuleInfo> remoteModuleInfos = remoteModules
                 .Select(cimModule => this.ConvertCimModuleInfoToPSModuleInfo(cimModule, cimSession.ComputerName))
-                .Where(moduleInfo => moduleInfo != null);
+                .Where(static moduleInfo => moduleInfo != null);
 
             return remoteModuleInfos;
         }
@@ -297,29 +297,17 @@ protected override void StopProcessing()
         #region IDisposable Members
 
         /// <summary>
-        /// Releases resources associated with this object.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
-        {
-            this.Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Releases resources associated with this object.
-        /// </summary>
-        private void Dispose(bool disposing)
         {
             if (_disposed)
             {
                 return;
             }
 
-            if (disposing)
-            {
-                _cancellationTokenSource.Dispose();
-            }
-
+            _cancellationTokenSource.Dispose();
+            
             _disposed = true;
         }
 
@@ -382,8 +370,8 @@ protected override void ProcessRecord()
                     FullyQualifiedName[modSpecIndex] = FullyQualifiedName[modSpecIndex].WithNormalizedName(Context, SessionState.Path.CurrentLocation.Path);
                 }
 
-                moduleSpecTable = FullyQualifiedName.ToDictionary(moduleSpecification => moduleSpecification.Name, StringComparer.OrdinalIgnoreCase);
-                strNames.AddRange(FullyQualifiedName.Select(spec => spec.Name));
+                moduleSpecTable = FullyQualifiedName.ToDictionary(static moduleSpecification => moduleSpecification.Name, StringComparer.OrdinalIgnoreCase);
+                strNames.AddRange(FullyQualifiedName.Select(static spec => spec.Name));
             }
 
             string[] names = strNames.Count > 0 ? strNames.ToArray() : null;
@@ -515,7 +503,7 @@ private IEnumerable<PSModuleInfo> FilterModulesForEditionAndSpecification(
             // Edition check only applies to Windows System32 module path
             if (!SkipEditionCheck && ListAvailable && !All)
             {
-                modules = modules.Where(module => module.IsConsideredEditionCompatible);
+                modules = modules.Where(static module => module.IsConsideredEditionCompatible);
             }
 #endif
 
@@ -586,24 +574,25 @@ private static IEnumerable<ModuleSpecification> GetCandidateModuleSpecs(
     }
 
     /// <summary>
-    /// PSEditionArgumentCompleter for PowerShell Edition names.
+    /// Provides argument completion for PSEdition parameter.
     /// </summary>
     public class PSEditionArgumentCompleter : IArgumentCompleter
     {
         /// <summary>
-        /// CompleteArgument.
+        /// Returns completion results for PSEdition parameter.
         /// </summary>
-        public IEnumerable<CompletionResult> CompleteArgument(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
-        {
-            var wordToCompletePattern = WildcardPattern.Get(string.IsNullOrWhiteSpace(wordToComplete) ? "*" : wordToComplete + "*", WildcardOptions.IgnoreCase);
-
-            foreach (var edition in Utils.AllowedEditionValues)
-            {
-                if (wordToCompletePattern.IsMatch(edition))
-                {
-                    yield return new CompletionResult(edition, edition, CompletionResultType.Text, edition);
-                }
-            }
-        }
+        /// <param name="commandName">The command name.</param>
+        /// <param name="parameterName">The parameter name.</param>
+        /// <param name="wordToComplete">The word to complete.</param>
+        /// <param name="commandAst">The command AST.</param>
+        /// <param name="fakeBoundParameters">The fake bound parameters.</param>
+        /// <returns>List of completion results.</returns>
+        public IEnumerable<CompletionResult> CompleteArgument(
+            string commandName,
+            string parameterName,
+            string wordToComplete,
+            CommandAst commandAst,
+            IDictionary fakeBoundParameters)
+                => CompletionHelpers.GetMatchingResults(wordToComplete, possibleCompletionValues: Utils.AllowedEditionValues);
     }
 }
diff --git a/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs b/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs
index 365d6e7642c..532079d1a77 100644
--- a/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/ImportModuleCommand.cs
@@ -548,32 +548,15 @@ private void ImportModule_ViaLocalModuleInfo(ImportModuleOptions importModuleOpt
         private void ImportModule_ViaAssembly(ImportModuleOptions importModuleOptions, Assembly suppliedAssembly)
         {
             bool moduleLoaded = false;
+            string moduleName = "dynamic_code_module_" + suppliedAssembly.FullName;
+
             // Loop through Module Cache to ensure that the module is not already imported.
-            if (suppliedAssembly != null && Context.Modules.ModuleTable != null)
+            foreach (KeyValuePair<string, PSModuleInfo> pair in Context.Modules.ModuleTable)
             {
-                foreach (KeyValuePair<string, PSModuleInfo> pair in Context.Modules.ModuleTable)
+                if (pair.Value.Path == string.Empty)
                 {
-                    // if the module in the moduleTable is an assembly module without path, the moduleName is the key.
-                    string moduleName = "dynamic_code_module_" + suppliedAssembly;
-                    if (pair.Value.Path == string.Empty)
-                    {
-                        if (pair.Key.Equals(moduleName, StringComparison.OrdinalIgnoreCase))
-                        {
-                            moduleLoaded = true;
-                            if (BasePassThru)
-                            {
-                                WriteObject(pair.Value);
-                            }
-
-                            break;
-                        }
-                        else
-                        {
-                            continue;
-                        }
-                    }
-
-                    if (pair.Value.Path.Equals(suppliedAssembly.Location, StringComparison.OrdinalIgnoreCase))
+                    // If the module in the moduleTable is an assembly module without path, the moduleName is the key.
+                    if (pair.Key.Equals(moduleName, StringComparison.OrdinalIgnoreCase))
                     {
                         moduleLoaded = true;
                         if (BasePassThru)
@@ -583,13 +566,26 @@ private void ImportModule_ViaAssembly(ImportModuleOptions importModuleOptions, A
 
                         break;
                     }
+
+                    continue;
+                }
+
+                if (pair.Value.Path.Equals(suppliedAssembly.Location, StringComparison.OrdinalIgnoreCase))
+                {
+                    moduleLoaded = true;
+                    if (BasePassThru)
+                    {
+                        WriteObject(pair.Value);
+                    }
+
+                    break;
                 }
             }
 
             if (!moduleLoaded)
             {
                 PSModuleInfo module = LoadBinaryModule(
-                    trySnapInName: false,
+                    parentModule: null,
                     moduleName: null,
                     fileName: null,
                     suppliedAssembly,
@@ -597,15 +593,13 @@ private void ImportModule_ViaAssembly(ImportModuleOptions importModuleOptions, A
                     ss: null,
                     importModuleOptions,
                     ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                    this.BasePrefix,
-                    loadTypes: false,
-                    loadFormats: false,
+                    BasePrefix,
                     out bool found);
 
-                if (found && module != null)
+                if (found && module is not null)
                 {
                     // Add it to all module tables ...
-                    AddModuleToModuleTables(this.Context, this.TargetSessionState.Internal, module);
+                    AddModuleToModuleTables(Context, TargetSessionState.Internal, module);
                     if (BasePassThru)
                     {
                         WriteObject(module);
@@ -625,7 +619,7 @@ private PSModuleInfo ImportModule_LocallyViaName_WithTelemetry(ImportModuleOptio
                 // avoid double reporting for WinCompat modules that go through CommandDiscovery\AutoloadSpecifiedModule
                 if (!foundModule.IsWindowsPowerShellCompatModule)
                 {
-                    ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, foundModule.Name);
+                    ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, foundModule);
 #if LEGACYTELEMETRY
                     TelemetryAPI.ReportModuleLoad(foundModule);
 #endif
@@ -637,6 +631,8 @@ private PSModuleInfo ImportModule_LocallyViaName_WithTelemetry(ImportModuleOptio
 
         private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModuleOptions, string name)
         {
+            bool shallWriteError = !importModuleOptions.SkipSystem32ModulesAndSuppressError;
+
             try
             {
                 bool found = false;
@@ -665,21 +661,18 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                     }
                 }
 
-                if (rootedPath == null)
+                // If null check for full-qualified paths - either absolute or relative
+                rootedPath ??= ResolveRootedFilePath(name, this.Context);
+
+                bool alreadyLoaded = false;
+                var manifestProcessingFlags = ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.NullOnFirstError;
+                if (shallWriteError)
                 {
-                    // Check for full-qualified paths - either absolute or relative
-                    rootedPath = ResolveRootedFilePath(name, this.Context);
+                    manifestProcessingFlags |= ManifestProcessingFlags.WriteErrors;
                 }
 
-                bool alreadyLoaded = false;
                 if (!string.IsNullOrEmpty(rootedPath))
                 {
-                    // TODO/FIXME: use IsModuleAlreadyLoaded to get consistent behavior
-                    // TODO/FIXME: (for example checking ModuleType != Manifest below seems incorrect - cdxml modules also declare their own version)
-                    // PSModuleInfo alreadyLoadedModule = null;
-                    // TryGetFromModuleTable(rootedPath, out alreadyLoadedModule);
-                    // if (!BaseForce && IsModuleAlreadyLoaded(alreadyLoadedModule))
-
                     // If the module has already been loaded, just emit it and continue...
                     if (!BaseForce && TryGetFromModuleTable(rootedPath, out PSModuleInfo module))
                     {
@@ -726,9 +719,14 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                                 RemoveModule(moduleToRemove);
                             }
 
-                            foundModule = LoadModule(rootedPath, null, this.BasePrefix, null, ref importModuleOptions,
-                                                     ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                                                     out found);
+                            foundModule = LoadModule(
+                                fileName: rootedPath,
+                                moduleBase: null,
+                                prefix: BasePrefix,
+                                ss: null, /*SessionState*/
+                                ref importModuleOptions,
+                                manifestProcessingFlags,
+                                out found);
                         }
                         else if (Directory.Exists(rootedPath))
                         {
@@ -739,21 +737,24 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                             }
 
                             // Load the latest valid version if it is a multi-version module directory
-                            foundModule = LoadUsingMultiVersionModuleBase(rootedPath,
-                                                                            ManifestProcessingFlags.LoadElements |
-                                                                            ManifestProcessingFlags.WriteErrors |
-                                                                            ManifestProcessingFlags.NullOnFirstError,
-                                                                            importModuleOptions, out found);
+                            foundModule = LoadUsingMultiVersionModuleBase(rootedPath, manifestProcessingFlags, importModuleOptions, out found);
 
                             if (!found)
                             {
                                 // If the path is a directory, double up the end of the string
                                 // then try to load that using extensions...
                                 rootedPath = Path.Combine(rootedPath, Path.GetFileName(rootedPath));
-                                foundModule = LoadUsingExtensions(null, rootedPath, rootedPath, null, null, this.BasePrefix, /*SessionState*/ null,
-                                                                  importModuleOptions,
-                                                                  ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                                                                  out found);
+                                foundModule = LoadUsingExtensions(
+                                    parentModule: null,
+                                    moduleName: rootedPath,
+                                    fileBaseName: rootedPath,
+                                    extension: null,
+                                    moduleBase: null,
+                                    prefix: BasePrefix,
+                                    ss: null, /*SessionState*/
+                                    importModuleOptions,
+                                    manifestProcessingFlags,
+                                    out found);
                             }
                         }
                     }
@@ -763,7 +764,7 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                     // Check if module could be a snapin. This was the case for PowerShell version 2 engine modules.
                     if (InitialSessionState.IsEngineModule(name))
                     {
-                        PSSnapInInfo snapin = ModuleCmdletBase.GetEngineSnapIn(Context, name);
+                        PSSnapInInfo snapin = Context.CurrentRunspace.InitialSessionState.GetPSSnapIn(name);
 
                         // Return the command if we found a module
                         if (snapin != null)
@@ -787,16 +788,28 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                         // If there is no extension, we'll have to search using the extensions
                         if (!string.IsNullOrEmpty(Path.GetExtension(name)))
                         {
-                            foundModule = LoadModule(name, null, this.BasePrefix, null, ref importModuleOptions,
-                                                     ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                                                     out found);
+                            foundModule = LoadModule(
+                                fileName: name,
+                                moduleBase: null,
+                                prefix: BasePrefix,
+                                ss: null, /*SessionState*/
+                                ref importModuleOptions,
+                                manifestProcessingFlags,
+                                out found);
                         }
                         else
                         {
-                            foundModule = LoadUsingExtensions(null, name, name, null, null, this.BasePrefix, /*SessionState*/ null,
-                                                              importModuleOptions,
-                                                              ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                                                              out found);
+                            foundModule = LoadUsingExtensions(
+                                parentModule: null,
+                                moduleName: name,
+                                fileBaseName: name,
+                                extension: null,
+                                moduleBase: null,
+                                prefix: BasePrefix,
+                                ss: null, /*SessionState*/
+                                importModuleOptions,
+                                manifestProcessingFlags,
+                                out found);
                         }
                     }
                     else
@@ -808,14 +821,17 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
                             this.AddToAppDomainLevelCache = true;
                         }
 
-                        found = LoadUsingModulePath(found, modulePath, name, /* SessionState*/ null,
-                                                    importModuleOptions,
-                                                    ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors | ManifestProcessingFlags.NullOnFirstError,
-                                                    out foundModule);
+                        found = LoadUsingModulePath(
+                            modulePath,
+                            name,
+                            ss: null, /* SessionState*/
+                            importModuleOptions,
+                            manifestProcessingFlags,
+                            out foundModule);
                     }
                 }
 
-                if (!found)
+                if (!found && shallWriteError)
                 {
                     ErrorRecord er = null;
                     string message = null;
@@ -857,8 +873,10 @@ private PSModuleInfo ImportModule_LocallyViaName(ImportModuleOptions importModul
             }
             catch (PSInvalidOperationException e)
             {
-                ErrorRecord er = new ErrorRecord(e.ErrorRecord, e);
-                WriteError(er);
+                if (shallWriteError)
+                {
+                    WriteError(new ErrorRecord(e.ErrorRecord, e));
+                }
             }
 
             return null;
@@ -875,7 +893,7 @@ private PSModuleInfo ImportModule_LocallyViaFQName(ImportModuleOptions importMod
 
             if (foundModule != null)
             {
-                ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, foundModule.Name);
+                ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, foundModule);
                 SetModuleBaseForEngineModules(foundModule.Name, this.Context);
             }
 
@@ -917,7 +935,7 @@ private IList<PSModuleInfo> ImportModule_RemotelyViaPsrpSession(
             // Send telemetry on the imported modules
             foreach (PSModuleInfo moduleInfo in remotelyImportedModules)
             {
-                ApplicationInsightsTelemetry.SendTelemetryMetric(usingWinCompat ? TelemetryType.WinCompatModuleLoad : TelemetryType.ModuleLoad, moduleInfo.Name);
+                ApplicationInsightsTelemetry.SendModuleTelemetryMetric(usingWinCompat ? TelemetryType.WinCompatModuleLoad : TelemetryType.ModuleLoad, moduleInfo);
             }
 
             return remotelyImportedModules;
@@ -977,7 +995,7 @@ private IList<PSModuleInfo> ImportModule_RemotelyViaPsrpSession(
                 string errorMessageTemplate = string.Format(
                     CultureInfo.InvariantCulture,
                     Modules.RemoteDiscoveryRemotePsrpCommandFailed,
-                    string.Format(CultureInfo.InvariantCulture, "Import-Module -Name '{0}'", moduleName));
+                    string.Create(CultureInfo.InvariantCulture, $"Import-Module -Name '{moduleName}'"));
                 remotelyImportedModules = RemoteDiscoveryHelper.InvokePowerShell(
                     powerShell,
                     this,
@@ -1308,8 +1326,8 @@ private void ImportModule_RemotelyViaCimSession(
                 this,
                 this.CancellationToken).ToList();
 
-            IEnumerable<RemoteDiscoveryHelper.CimModule> remotePsCimModules = remoteModules.Where(cimModule => cimModule.IsPsCimModule);
-            IEnumerable<string> remotePsrpModuleNames = remoteModules.Where(cimModule => !cimModule.IsPsCimModule).Select(cimModule => cimModule.ModuleName);
+            IEnumerable<RemoteDiscoveryHelper.CimModule> remotePsCimModules = remoteModules.Where(static cimModule => cimModule.IsPsCimModule);
+            IEnumerable<string> remotePsrpModuleNames = remoteModules.Where(static cimModule => !cimModule.IsPsCimModule).Select(static cimModule => cimModule.ModuleName);
             foreach (string psrpModuleName in remotePsrpModuleNames)
             {
                 string errorMessage = string.Format(
@@ -1327,7 +1345,7 @@ private void ImportModule_RemotelyViaCimSession(
             //
             // report an error if some modules were not found
             //
-            IEnumerable<string> allFoundModuleNames = remoteModules.Select(cimModule => cimModule.ModuleName).ToList();
+            IEnumerable<string> allFoundModuleNames = remoteModules.Select(static cimModule => cimModule.ModuleName).ToList();
             foreach (string requestedModuleName in moduleNames)
             {
                 var wildcardPattern = WildcardPattern.Get(requestedModuleName, WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
@@ -1348,20 +1366,32 @@ private void ImportModule_RemotelyViaCimSession(
             foreach (RemoteDiscoveryHelper.CimModule remoteCimModule in remotePsCimModules)
             {
                 ImportModule_RemotelyViaCimModuleData(importModuleOptions, remoteCimModule, cimSession);
-                ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, remoteCimModule.ModuleName);
+                // we don't know the version of the module
+                ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, remoteCimModule.ModuleName);
             }
         }
 
-        private bool IsPs1xmlFileHelper_IsPresentInEntries(RemoteDiscoveryHelper.CimModuleFile cimModuleFile, IEnumerable<string> manifestEntries)
+        private bool IsPs1xmlFileHelper_IsPresentInEntries(RemoteDiscoveryHelper.CimModuleFile cimModuleFile, List<string> manifestEntries)
         {
-            if (manifestEntries.Any(s => s.EndsWith(cimModuleFile.FileName, StringComparison.OrdinalIgnoreCase)))
+            const string ps1xmlExt = ".ps1xml";
+            string fileName = cimModuleFile.FileName;
+
+            foreach (string entry in manifestEntries)
             {
-                return true;
+                if (entry.EndsWith(fileName, StringComparison.OrdinalIgnoreCase))
+                {
+                    return true;
+                }
             }
 
-            if (manifestEntries.Any(s => FixupFileName(string.Empty, s, ".ps1xml", isImportingModule: true).EndsWith(cimModuleFile.FileName, StringComparison.OrdinalIgnoreCase)))
+            foreach (string entry in manifestEntries)
             {
-                return true;
+                string tempName = entry.EndsWith(ps1xmlExt, StringComparison.OrdinalIgnoreCase) ? entry : entry + ps1xmlExt;
+                string resolvedPath = ResolveRootedFilePath(tempName, Context);
+                if (resolvedPath is not null && resolvedPath.EndsWith(fileName, StringComparison.OrdinalIgnoreCase))
+                {
+                    return true;
+                }
             }
 
             return false;
@@ -1380,10 +1410,7 @@ private bool IsPs1xmlFileHelper(RemoteDiscoveryHelper.CimModuleFile cimModuleFil
                 goodEntries = new List<string>();
             }
 
-            if (goodEntries == null)
-            {
-                goodEntries = new List<string>();
-            }
+            goodEntries ??= new List<string>();
 
             List<string> badEntries;
             if (!this.GetListOfStringsFromData(manifestData, null, badKey, 0, out badEntries))
@@ -1391,10 +1418,7 @@ private bool IsPs1xmlFileHelper(RemoteDiscoveryHelper.CimModuleFile cimModuleFil
                 badEntries = new List<string>();
             }
 
-            if (badEntries == null)
-            {
-                badEntries = new List<string>();
-            }
+            badEntries ??= new List<string>();
 
             bool presentInGoodEntries = IsPs1xmlFileHelper_IsPresentInEntries(cimModuleFile, goodEntries);
             bool presentInBadEntries = IsPs1xmlFileHelper_IsPresentInEntries(cimModuleFile, badEntries);
@@ -1756,28 +1780,16 @@ protected override void StopProcessing()
         #region IDisposable Members
 
         /// <summary>
-        /// Releases resources associated with this object.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
-        {
-            this.Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Releases resources associated with this object.
-        /// </summary>
-        private void Dispose(bool disposing)
         {
             if (_disposed)
             {
                 return;
             }
 
-            if (disposing)
-            {
-                _cancellationTokenSource.Dispose();
-            }
+            _cancellationTokenSource.Dispose();
 
             _disposed = true;
         }
@@ -1842,7 +1854,7 @@ protected override void ProcessRecord()
                 // of doing Get-Module -list
                 foreach (PSModuleInfo module in ModuleInfo)
                 {
-                    ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, module.Name);
+                    ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, module);
                     RemoteDiscoveryHelper.DispatchModuleInfoProcessing(
                         module,
                         localAction: () =>
@@ -1868,13 +1880,11 @@ protected override void ProcessRecord()
             else if (this.ParameterSetName.Equals(ParameterSet_Assembly, StringComparison.OrdinalIgnoreCase))
             {
                 // Now load all of the supplied assemblies...
-                if (Assembly != null)
+                foreach (Assembly suppliedAssembly in Assembly)
                 {
-                    foreach (Assembly suppliedAssembly in Assembly)
-                    {
-                        ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, suppliedAssembly.GetName().Name);
-                        ImportModule_ViaAssembly(importModuleOptions, suppliedAssembly);
-                    }
+                    // we don't know what the version of the module is.
+                    ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, suppliedAssembly.GetName().Name);
+                    ImportModule_ViaAssembly(importModuleOptions, suppliedAssembly);
                 }
             }
             else if (this.ParameterSetName.Equals(ParameterSet_Name, StringComparison.OrdinalIgnoreCase))
@@ -1904,7 +1914,7 @@ protected override void ProcessRecord()
                 ImportModule_RemotelyViaPsrpSession(importModuleOptions, null, FullyQualifiedName, this.PSSession);
                 foreach (ModuleSpecification modulespec in FullyQualifiedName)
                 {
-                    ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ModuleLoad, modulespec.Name);
+                    ApplicationInsightsTelemetry.SendModuleTelemetryMetric(TelemetryType.ModuleLoad, modulespec.Name);
                 }
             }
             else if (this.ParameterSetName.Equals(ParameterSet_ViaWinCompat, StringComparison.OrdinalIgnoreCase)
@@ -1946,27 +1956,26 @@ private bool IsModuleInDenyList(string[] moduleDenyList, string moduleName, Modu
             return match;
         }
 
-        private List<T> FilterModuleCollection<T>(IEnumerable<T> moduleCollection)
+        private IEnumerable<T> FilterModuleCollection<T>(IEnumerable<T> moduleCollection)
         {
-            List<T> filteredModuleCollection = null;
-            if (moduleCollection != null)
+            if (moduleCollection is null)
             {
-                // the ModuleDeny list is cached in PowerShellConfig object
-                string[] moduleDenyList = PowerShellConfig.Instance.GetWindowsPowerShellCompatibilityModuleDenyList();
-                if (moduleDenyList?.Any() != true)
-                {
-                    filteredModuleCollection = new List<T>(moduleCollection);
-                }
-                else
+                return null;
+            }
+
+            // The ModuleDeny list is cached in PowerShellConfig object
+            string[] moduleDenyList = PowerShellConfig.Instance.GetWindowsPowerShellCompatibilityModuleDenyList();
+            if (moduleDenyList is null || moduleDenyList.Length == 0)
+            {
+                return moduleCollection;
+            }
+
+            var filteredModuleCollection = new List<T>();
+            foreach (var module in moduleCollection)
+            {
+                if (!IsModuleInDenyList(moduleDenyList, module as string, module as ModuleSpecification))
                 {
-                    filteredModuleCollection = new List<T>();
-                    foreach (var module in moduleCollection)
-                    {
-                        if (!IsModuleInDenyList(moduleDenyList, module as string, module as ModuleSpecification))
-                        {
-                            filteredModuleCollection.Add(module);
-                        }
-                    }
+                    filteredModuleCollection.Add(module);
                 }
             }
 
@@ -1978,38 +1987,73 @@ private void PrepareNoClobberWinCompatModuleImport(string moduleName, ModuleSpec
             Debug.Assert(string.IsNullOrEmpty(moduleName) ^ (moduleSpec == null), "Either moduleName or moduleSpec must be specified");
 
             // moduleName can be just a module name and it also can be a full path to psd1 from which we need to extract the module name
-            string coreModuleToLoad = ModuleIntrinsics.GetModuleName(moduleSpec == null ? moduleName : moduleSpec.Name);
+            string moduleToLoad = ModuleIntrinsics.GetModuleName(moduleSpec is null ? moduleName : moduleSpec.Name);
+
+            var isBuiltInModule = BuiltInModules.TryGetValue(moduleToLoad, out string normalizedName);
+            if (isBuiltInModule)
+            {
+                moduleToLoad = normalizedName;
+            }
 
-            var isModuleToLoadEngineModule = InitialSessionState.IsEngineModule(coreModuleToLoad);
             string[] noClobberModuleList = PowerShellConfig.Instance.GetWindowsPowerShellCompatibilityNoClobberModuleList();
-            if (isModuleToLoadEngineModule || ((noClobberModuleList != null) && noClobberModuleList.Contains(coreModuleToLoad, StringComparer.OrdinalIgnoreCase)))
+            if (isBuiltInModule || noClobberModuleList?.Contains(moduleToLoad, StringComparer.OrdinalIgnoreCase) == true)
             {
-                // if it is one of engine modules - first try to load it from $PSHOME\Modules
-                // otherwise rely on $env:PSModulePath (in which WinPS module location has to go after CorePS module location)
-                if (isModuleToLoadEngineModule)
+                bool shouldLoadModuleLocally = true;
+                if (isBuiltInModule)
                 {
-                    string expectedCoreModulePath = Path.Combine(ModuleIntrinsics.GetPSHomeModulePath(), coreModuleToLoad);
-                    if (Directory.Exists(expectedCoreModulePath))
+                    PSSnapInInfo loadedSnapin = Context.CurrentRunspace.InitialSessionState.GetPSSnapIn(moduleToLoad);
+                    shouldLoadModuleLocally = loadedSnapin is null;
+
+                    if (shouldLoadModuleLocally)
                     {
-                        coreModuleToLoad = expectedCoreModulePath;
+                        // If it is one of built-in modules, first try loading it from $PSHOME\Modules, otherwise rely on $env:PSModulePath.
+                        string expectedCoreModulePath = Path.Combine(ModuleIntrinsics.GetPSHomeModulePath(), moduleToLoad);
+                        if (Directory.Exists(expectedCoreModulePath))
+                        {
+                            moduleToLoad = expectedCoreModulePath;
+                        }
                     }
                 }
 
-                if (moduleSpec == null)
+                if (shouldLoadModuleLocally)
                 {
-                    ImportModule_LocallyViaName_WithTelemetry(importModuleOptions, coreModuleToLoad);
-                }
-                else
-                {
-                    ModuleSpecification tmpModuleSpec = new ModuleSpecification()
+                    // Here we want to load a core-edition compatible version of the module, so the loading procedure will skip
+                    // the 'System32' module path when searching. Also, we want to suppress writing out errors in case that a
+                    // core-compatible version of the module cannot be found, because:
+                    //  1. that's OK as long as it's not a PowerShell built-in module such as the 'Utility' moudle;
+                    //  2. the error message will be confusing to the user.
+                    bool savedValue = importModuleOptions.SkipSystem32ModulesAndSuppressError;
+                    importModuleOptions.SkipSystem32ModulesAndSuppressError = true;
+
+                    PSModuleInfo moduleInfo = moduleSpec is null
+                        ? ImportModule_LocallyViaName_WithTelemetry(importModuleOptions, moduleToLoad)
+                        : ImportModule_LocallyViaFQName(
+                            importModuleOptions,
+                            new ModuleSpecification()
+                            {
+                                Guid = moduleSpec.Guid,
+                                MaximumVersion = moduleSpec.MaximumVersion,
+                                Version = moduleSpec.Version,
+                                RequiredVersion = moduleSpec.RequiredVersion,
+                                Name = moduleToLoad
+                            });
+
+                    // If we failed to load a core-compatible version of a built-in module, we should stop trying to load the
+                    // module in 'WinCompat' mode and report an error. This could happen when a user didn't correctly deploy
+                    // the built-in modules, which would result in very confusing errors when the module auto-loading silently
+                    // attempts to load those built-in modules in 'WinCompat' mode from the 'System32' module path.
+                    //
+                    // If the loading failed but it's NOT a built-in module, then it's fine to ignore this failure and continue
+                    // to load the module in 'WinCompat' mode.
+                    if (moduleInfo is null && isBuiltInModule)
                     {
-                        Guid = moduleSpec.Guid,
-                        MaximumVersion = moduleSpec.MaximumVersion,
-                        Version = moduleSpec.Version,
-                        RequiredVersion = moduleSpec.RequiredVersion,
-                        Name = coreModuleToLoad
-                    };
-                    ImportModule_LocallyViaFQName(importModuleOptions, tmpModuleSpec);
+                        throw new InvalidOperationException(
+                            StringUtil.Format(
+                                Modules.CannotFindCoreCompatibleBuiltInModule,
+                                moduleToLoad));
+                    }
+
+                    importModuleOptions.SkipSystem32ModulesAndSuppressError = savedValue;
                 }
 
                 importModuleOptions.NoClobberExportPSSession = true;
@@ -2021,28 +2065,15 @@ internal override IList<PSModuleInfo> ImportModulesUsingWinCompat(IEnumerable<st
             IList<PSModuleInfo> moduleProxyList = new List<PSModuleInfo>();
 #if !UNIX
             // one of the two parameters can be passed: either ModuleNames (most of the time) or ModuleSpecifications (they are used in different parameter sets)
-            List<string> filteredModuleNames = FilterModuleCollection(moduleNames);
-            List<ModuleSpecification> filteredModuleFullyQualifiedNames = FilterModuleCollection(moduleFullyQualifiedNames);
+            IEnumerable<string> filteredModuleNames = FilterModuleCollection(moduleNames);
+            IEnumerable<ModuleSpecification> filteredModuleFullyQualifiedNames = FilterModuleCollection(moduleFullyQualifiedNames);
 
             // do not setup WinCompat resources if we have no modules to import
-            if ((filteredModuleNames?.Any() != true) && (filteredModuleFullyQualifiedNames?.Any() != true))
+            if (filteredModuleNames?.Any() != true && filteredModuleFullyQualifiedNames?.Any() != true)
             {
                 return moduleProxyList;
             }
 
-            var winPSVersionString = Utils.GetWindowsPowerShellVersionFromRegistry();
-            if (!winPSVersionString.StartsWith("5.1", StringComparison.OrdinalIgnoreCase))
-            {
-                string errorMessage = string.Format(CultureInfo.InvariantCulture, Modules.WinCompatRequredVersionError, winPSVersionString);
-                throw new InvalidOperationException(errorMessage);
-            }
-
-            PSSession WindowsPowerShellCompatRemotingSession = CreateWindowsPowerShellCompatResources();
-            if (WindowsPowerShellCompatRemotingSession == null)
-            {
-                return new List<PSModuleInfo>();
-            }
-
             // perform necessary preparations if module has to be imported with NoClobber mode
             if (filteredModuleNames != null)
             {
@@ -2060,13 +2091,26 @@ internal override IList<PSModuleInfo> ImportModulesUsingWinCompat(IEnumerable<st
                 }
             }
 
+            var winPSVersionString = Utils.GetWindowsPowerShellVersionFromRegistry();
+            if (!winPSVersionString.StartsWith("5.1", StringComparison.OrdinalIgnoreCase))
+            {
+                string errorMessage = string.Format(CultureInfo.InvariantCulture, Modules.WinCompatRequredVersionError, winPSVersionString);
+                throw new InvalidOperationException(errorMessage);
+            }
+
+            PSSession WindowsPowerShellCompatRemotingSession = CreateWindowsPowerShellCompatResources();
+            if (WindowsPowerShellCompatRemotingSession == null)
+            {
+                return new List<PSModuleInfo>();
+            }
+
             // perform the module import / proxy generation
             moduleProxyList = ImportModule_RemotelyViaPsrpSession(importModuleOptions, filteredModuleNames, filteredModuleFullyQualifiedNames, WindowsPowerShellCompatRemotingSession, usingWinCompat: true);
 
             foreach (PSModuleInfo moduleProxy in moduleProxyList)
             {
                 moduleProxy.IsWindowsPowerShellCompatModule = true;
-                System.Threading.Interlocked.Increment(ref s_WindowsPowerShellCompatUsageCounter);
+                Interlocked.Increment(ref s_WindowsPowerShellCompatUsageCounter);
 
                 string message = StringUtil.Format(Modules.WinCompatModuleWarning, moduleProxy.Name, WindowsPowerShellCompatRemotingSession.Name);
                 WriteWarning(message);
diff --git a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs
index 7e7549c6589..0a1d0bfc04f 100644
--- a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs
+++ b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs
@@ -16,6 +16,7 @@
 using System.Management.Automation.Runspaces;
 using System.Management.Automation.Security;
 using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Xml;
 using System.Diagnostics;
@@ -105,6 +106,12 @@ protected internal struct ImportModuleOptions
             /// Historically -AllowClobber in these scenarios was set as True.
             /// </summary>
             internal bool NoClobberExportPSSession;
+
+            /// <summary>
+            /// Flag that controls skipping the System32 module path when searching a module in module paths. It also suppresses
+            /// writing out errors when specified.
+            /// </summary>
+            internal bool SkipSystem32ModulesAndSuppressError;
         }
 
         /// <summary>
@@ -280,6 +287,21 @@ internal List<WildcardPattern> MatchAll
             "ModuleVersion"
         };
 
+        /// <summary>
+        /// List of PowerShell built-in modules that are shipped with PowerShell only, not on PS Gallery.
+        /// </summary>
+        protected static readonly HashSet<string> BuiltInModules = new(StringComparer.OrdinalIgnoreCase)
+        {
+            "CimCmdlets",
+            "Microsoft.PowerShell.Diagnostics",
+            "Microsoft.PowerShell.Host",
+            "Microsoft.PowerShell.Management",
+            "Microsoft.PowerShell.Security",
+            "Microsoft.PowerShell.Utility",
+            "Microsoft.WSMan.Management",
+            "PSDiagnostics",
+        };
+
         /// <summary>
         /// When module manifests lack a CompatiblePSEditions field,
         /// they will be treated as if they have this value.
@@ -307,14 +329,25 @@ internal List<WildcardPattern> MatchAll
 
         private readonly Dictionary<string, PSModuleInfo> _currentlyProcessingModules = new Dictionary<string, PSModuleInfo>();
 
-        internal bool LoadUsingModulePath(bool found, IEnumerable<string> modulePath, string name, SessionState ss,
-            ImportModuleOptions options, ManifestProcessingFlags manifestProcessingFlags, out PSModuleInfo module)
+        internal bool LoadUsingModulePath(
+            IEnumerable<string> modulePath,
+            string name,
+            SessionState ss,
+            ImportModuleOptions options,
+            ManifestProcessingFlags manifestProcessingFlags,
+            out PSModuleInfo module)
         {
-            return LoadUsingModulePath(null, found, modulePath, name, ss, options, manifestProcessingFlags, out module);
+            return LoadUsingModulePath(parentModule: null, modulePath, name, ss, options, manifestProcessingFlags, out module);
         }
 
-        internal bool LoadUsingModulePath(PSModuleInfo parentModule, bool found, IEnumerable<string> modulePath, string name, SessionState ss,
-            ImportModuleOptions options, ManifestProcessingFlags manifestProcessingFlags, out PSModuleInfo module)
+        internal bool LoadUsingModulePath(
+            PSModuleInfo parentModule,
+            IEnumerable<string> modulePath,
+            string name,
+            SessionState ss,
+            ImportModuleOptions options,
+            ManifestProcessingFlags manifestProcessingFlags,
+            out PSModuleInfo module)
         {
             string extension = Path.GetExtension(name);
             string fileBaseName;
@@ -325,11 +358,18 @@ internal bool LoadUsingModulePath(PSModuleInfo parentModule, bool found, IEnumer
                 extension = null;
             }
             else
+            {
                 fileBaseName = name.Substring(0, name.Length - extension.Length);
+            }
 
             // Now search using the module path...
+            bool found = false;
             foreach (string path in modulePath)
             {
+                if (options.SkipSystem32ModulesAndSuppressError && ModuleUtils.IsOnSystem32ModulePath(path))
+                {
+                    continue;
+                }
 #if UNIX
                 foreach (string folder in Directory.EnumerateDirectories(path))
                 {
@@ -342,7 +382,7 @@ internal bool LoadUsingModulePath(PSModuleInfo parentModule, bool found, IEnumer
                 module = LoadUsingMultiVersionModuleBase(qualifiedPath, manifestProcessingFlags, options, out found);
                 if (!found)
                 {
-                    if (name.IndexOfAny(Utils.Separators.Directory) == -1)
+                    if (name.AsSpan().IndexOfAny('\\', '/') == -1)
                     {
                         qualifiedPath = Path.Combine(qualifiedPath, fileBaseName);
                     }
@@ -643,9 +683,19 @@ private bool ValidateManifestHash(
             return result;
         }
 
-        private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, ModuleSpecification moduleSpecification, string moduleBase, bool searchModulePath,
-            string prefix, SessionState ss, ImportModuleOptions options, ManifestProcessingFlags manifestProcessingFlags, bool loadTypes,
-            bool loadFormats, object privateData, out bool found, string shortModuleName, PSLanguageMode? manifestLanguageMode)
+        private PSModuleInfo LoadModuleNamedInManifest(
+            PSModuleInfo parentModule,
+            ModuleSpecification moduleSpecification,
+            string moduleBase,
+            bool searchModulePath,
+            string prefix,
+            SessionState ss,
+            ImportModuleOptions options,
+            ManifestProcessingFlags manifestProcessingFlags,
+            object privateData,
+            out bool found,
+            string shortModuleName,
+            PSLanguageMode? manifestLanguageMode)
         {
             PSModuleInfo module = null;
             PSModuleInfo tempModuleInfoFromVerification = null;
@@ -659,11 +709,16 @@ private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, Module
 
             var importingModule = manifestProcessingFlags.HasFlag(ManifestProcessingFlags.LoadElements);
             string extension = Path.GetExtension(moduleSpecification.Name);
+
             // First check for fully-qualified paths - either absolute or relative
             string rootedPath = ResolveRootedFilePath(moduleSpecification.Name, this.Context);
             if (string.IsNullOrEmpty(rootedPath))
             {
-                rootedPath = FixupFileName(moduleBase, moduleSpecification.Name, extension, importingModule);
+                // Use the name of the parent module if it's specified, otherwise, use the current module name.
+                //  - If the current module is a nested module, then the parent module will be specified.
+                //  - If the current module is a root module, then the parent module will not be specified.
+                string moduleName = parentModule?.Name ?? ModuleIntrinsics.GetModuleName(moduleSpecification.Name);
+                rootedPath = FixFileName(moduleName, moduleBase, moduleSpecification.Name, extension: null, canLoadAssembly: importingModule);
             }
             else
             {
@@ -823,7 +878,7 @@ private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, Module
                         }
 
                         // Otherwise try the module path
-                        found = LoadUsingModulePath(parentModule, found, modulePath,
+                        found = LoadUsingModulePath(parentModule, modulePath,
                                                     moduleSpecification.Name, ss,
                                                     options, manifestProcessingFlags, out module);
                     }
@@ -836,11 +891,21 @@ private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, Module
                     // Constrained Language session.
                     if (module.LanguageMode != manifestLanguageMode)
                     {
-                        var languageModeError = PSTraceSource.NewInvalidOperationException(
-                            Modules.MismatchedLanguageModes,
-                            module.Name, manifestLanguageMode, module.LanguageMode);
-                        languageModeError.SetErrorId("Modules_MismatchedLanguageModes");
-                        throw languageModeError;
+                        if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                        {
+                            var languageModeError = PSTraceSource.NewInvalidOperationException(
+                                Modules.MismatchedLanguageModes,
+                                module.Name, manifestLanguageMode, module.LanguageMode);
+                            languageModeError.SetErrorId("Modules_MismatchedLanguageModes");
+                            throw languageModeError;
+                        }
+
+                        SystemPolicy.LogWDACAuditMessage(
+                            context: Context,
+                            title: Modules.WDACMismatchedLanguageModesTitle,
+                            message: Modules.WDACMismatchedLanguageModesMessage,
+                            fqid: "ModulesMismatchedLanguageModes",
+                            dropIntoDebugger: true);
                     }
                 }
 
@@ -878,7 +943,6 @@ private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, Module
                             // At this point, we are already exhaust all possible ways to load the nested module. The last option is to load it as a binary module/snapin.
                             module = LoadBinaryModule(
                                 parentModule,
-                                trySnapInName: true,
                                 moduleSpecification.Name,
                                 fileName: null,
                                 assemblyToLoad: null,
@@ -887,8 +951,6 @@ private PSModuleInfo LoadModuleNamedInManifest(PSModuleInfo parentModule, Module
                                 options,
                                 manifestProcessingFlags,
                                 prefix,
-                                loadTypes,
-                                loadFormats,
                                 out found,
                                 shortModuleName,
                                 disableFormatUpdates: false);
@@ -963,7 +1025,7 @@ private IEnumerable<PSModuleInfo> GetModuleForRootedPaths(List<string> modulePat
             {
                 bool containsWildCards = false;
 
-                string modulePath = mp.TrimEnd(Utils.Separators.Backslash);
+                string modulePath = mp.TrimEnd('\\');
 
                 // If the given path contains wildcards, we won't throw error if no match module path is found.
                 if (WildcardPattern.ContainsWildcardCharacters(modulePath))
@@ -986,9 +1048,8 @@ private IEnumerable<PSModuleInfo> GetModuleForRootedPaths(List<string> modulePat
                             PSModuleInfo module = CreateModuleInfoForGetModule(resolvedModulePath, refresh);
                             if (module != null)
                             {
-                                if (!modules.Contains(resolvedModulePath))
+                                if (modules.Add(resolvedModulePath))
                                 {
-                                    modules.Add(resolvedModulePath);
                                     yield return module;
                                 }
                             }
@@ -1017,9 +1078,8 @@ private IEnumerable<PSModuleInfo> GetModuleForRootedPaths(List<string> modulePat
                                         foundModule = true;
                                         // We need to list all versions of the module.
                                         string subModulePath = Path.GetDirectoryName(file);
-                                        if (!modules.Contains(subModulePath))
+                                        if (modules.Add(subModulePath))
                                         {
-                                            modules.Add(subModulePath);
                                             yield return module;
                                         }
                                     }
@@ -1056,35 +1116,27 @@ private IEnumerable<PSModuleInfo> GetModuleForNames(List<string> names, bool all
         {
             IEnumerable<PSModuleInfo> allModules = null;
             HashSet<string> modulePathSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-            bool cleanupModuleAnalysisAppDomain = Context.TakeResponsibilityForModuleAnalysisAppDomain();
 
-            try
+            foreach (string path in ModuleIntrinsics.GetModulePath(false, Context))
             {
-                foreach (string path in ModuleIntrinsics.GetModulePath(false, Context))
-                {
-                    string uniquePath = path.TrimEnd(Utils.Separators.Directory);
+                string uniquePath = path.TrimEnd(Utils.Separators.Directory);
 
-                    // Ignore repeated module path.
-                    if (!modulePathSet.Add(uniquePath)) { continue; }
+                // Ignore repeated module path.
+                if (!modulePathSet.Add(uniquePath))
+                {
+                    continue;
+                }
 
-                    try
-                    {
-                        IEnumerable<PSModuleInfo> modulesFound = GetModulesFromOneModulePath(
-                            names, uniquePath, all, refresh).OrderBy(m => m.Name);
-                        allModules = allModules == null ? modulesFound : allModules.Concat(modulesFound);
-                    }
-                    catch (Exception e) when (e is IOException || e is UnauthorizedAccessException)
-                    {
-                        // ignore directories that can't be accessed
-                        continue;
-                    }
+                try
+                {
+                    IEnumerable<PSModuleInfo> modulesFound = GetModulesFromOneModulePath(
+                        names, uniquePath, all, refresh).OrderBy(static m => m.Name);
+                    allModules = allModules == null ? modulesFound : allModules.Concat(modulesFound);
                 }
-            }
-            finally
-            {
-                if (cleanupModuleAnalysisAppDomain)
+                catch (Exception e) when (e is IOException || e is UnauthorizedAccessException)
                 {
-                    Context.ReleaseResponsibilityForModuleAnalysisAppDomain();
+                    // ignore directories that can't be accessed
+                    continue;
                 }
             }
 
@@ -1146,7 +1198,7 @@ internal static Version GetMaximumVersion(string stringVersion)
                 {
                     stringVersion = stringVersion.Substring(0, stringVersion.Length - 1);
                     stringVersion += maxRange;
-                    int starNum = stringVersion.Count(x => x == '.');
+                    int starNum = stringVersion.Count(static x => x == '.');
                     for (int i = 0; i < (3 - starNum); i++)
                     {
                         stringVersion = stringVersion + '.' + maxRange;
@@ -1494,6 +1546,7 @@ internal PSModuleInfo LoadModuleManifest(
 
             Dbg.Assert(moduleManifestPath != null, "moduleManifestPath for module (.psd1) can't be null");
             string moduleBase = Path.GetDirectoryName(moduleManifestPath);
+            string moduleName = ModuleIntrinsics.GetModuleName(moduleManifestPath);
 
             if ((manifestProcessingFlags &
                  (ManifestProcessingFlags.LoadElements | ManifestProcessingFlags.WriteErrors |
@@ -1594,24 +1647,32 @@ internal PSModuleInfo LoadModuleManifest(
                     invalidOperation.SetErrorId("Modules_WildCardNotAllowedInModuleToProcessAndInNestedModules");
                     throw invalidOperation;
                 }
+
                 // See if this module is already loaded. Since the manifest entry may not
                 // have an extension and the module table is indexed by full names, we
                 // may have search through all the extensions.
                 PSModuleInfo loadedModule = null;
-                string rootedPath = this.FixupFileName(moduleBase, actualRootModule, extension: null, importingModule);
-                string mtpExtension = Path.GetExtension(rootedPath);
-                if (!string.IsNullOrEmpty(mtpExtension) && ModuleIntrinsics.IsPowerShellModuleExtension(mtpExtension))
+                string rootedPath = null;
+
+                // For a root module, we use its own module name instead of the manifest module name when calling 'FixFileName'.
+                // This is because when actually loading the root module later, it won't have access to the parent manifest module,
+                // and we will use its own name to query for already loaded assemblies from 'Context.AssemblyCache'.
+                string rootModuleName = ModuleIntrinsics.GetModuleName(actualRootModule);
+                string extension = Path.GetExtension(actualRootModule);
+                if (!string.IsNullOrEmpty(extension) && ModuleIntrinsics.IsPowerShellModuleExtension(extension))
                 {
+                    rootedPath = FixFileName(rootModuleName, moduleBase, actualRootModule, extension: null, canLoadAssembly: importingModule);
                     TryGetFromModuleTable(rootedPath, out loadedModule);
                 }
                 else
                 {
                     foreach (string extensionToTry in ModuleIntrinsics.PSModuleExtensions)
                     {
-                        rootedPath = this.FixupFileName(moduleBase, actualRootModule, extensionToTry, importingModule);
-                        TryGetFromModuleTable(rootedPath, out loadedModule);
-                        if (loadedModule != null)
+                        rootedPath = FixFileName(rootModuleName, moduleBase, actualRootModule, extensionToTry, canLoadAssembly: importingModule);
+                        if (TryGetFromModuleTable(rootedPath, out loadedModule))
+                        {
                             break;
+                        }
                     }
                 }
 
@@ -1860,9 +1921,12 @@ internal PSModuleInfo LoadModuleManifest(
             else if ((requiredProcessorArchitecture != ProcessorArchitecture.None) &&
                      (requiredProcessorArchitecture != ProcessorArchitecture.MSIL))
             {
-                ProcessorArchitecture currentArchitecture = typeof(object).Assembly.GetName().ProcessorArchitecture;
+                Architecture currentArchitecture = RuntimeInformation.ProcessArchitecture;
 
-                if (currentArchitecture != requiredProcessorArchitecture)
+                if ((requiredProcessorArchitecture == ProcessorArchitecture.X86 && currentArchitecture != Architecture.X86) ||
+                    (requiredProcessorArchitecture == ProcessorArchitecture.Amd64 && currentArchitecture != Architecture.X64) ||
+                    (requiredProcessorArchitecture == ProcessorArchitecture.Arm && (currentArchitecture != Architecture.Arm && currentArchitecture != Architecture.Arm64)) ||
+                    requiredProcessorArchitecture == ProcessorArchitecture.IA64)
                 {
                     containedErrors = true;
                     if (writingErrors)
@@ -2017,7 +2081,6 @@ internal PSModuleInfo LoadModuleManifest(
                 {
                     bool nameMissingOrEmpty = false;
                     var invalidNames = new List<string>();
-                    string moduleName = ModuleIntrinsics.GetModuleName(moduleManifestPath);
                     expFeatureList = new List<ExperimentalFeature>(features.Length);
 
                     foreach (Hashtable feature in features)
@@ -2130,61 +2193,72 @@ internal PSModuleInfo LoadModuleManifest(
             // Indicates the ISS.Bind() should be called...
             bool doBind = false;
 
-            // Set up to load any required assemblies that have been specified...
-            List<string> tmpAssemblyList;
-            List<string> assemblyList = new List<string>();
-            List<string> fixedUpAssemblyPathList = new List<string>();
-
-            if (
-                !GetListOfStringsFromData(data, moduleManifestPath, "RequiredAssemblies", manifestProcessingFlags,
-                    out tmpAssemblyList))
+            if (!GetListOfStringsFromData(
+                    data,
+                    moduleManifestPath,
+                    "RequiredAssemblies",
+                    manifestProcessingFlags,
+                    out List<string> assemblyList))
             {
                 containedErrors = true;
-                if (bailOnFirstError) return null;
+                if (bailOnFirstError)
+                {
+                    return null;
+                }
             }
-            else
+            else if (assemblyList != null && importingModule)
             {
-                if (tmpAssemblyList != null && tmpAssemblyList.Count > 0)
+                foreach (string assembly in assemblyList)
                 {
-                    foreach (string assembly in tmpAssemblyList)
+                    if (WildcardPattern.ContainsWildcardCharacters(assembly))
                     {
-                        assemblyList.Add(assembly);
+                        PSInvalidOperationException invalidOperation = PSTraceSource.NewInvalidOperationException(
+                            Modules.WildCardNotAllowedInRequiredAssemblies,
+                            moduleManifestPath);
+                        invalidOperation.SetErrorId("Modules_WildCardNotAllowedInRequiredAssemblies");
+                        throw invalidOperation;
                     }
-                }
-
-                if ((assemblyList != null) && importingModule)
-                {
-                    foreach (string assembly in assemblyList)
+                    else
                     {
-                        if (WildcardPattern.ContainsWildcardCharacters(assembly))
+                        string fileName = null;
+                        string ext = Path.GetExtension(assembly);
+
+                        // Note that we don't need to load the required assemblies eagerly because they will be loaded before
+                        // processing type and format data. So, when calling 'FixupFileName', we only attempt to resolve the
+                        // path, and avoid triggering the loading of the assembly.
+                        if (ModuleIntrinsics.ProcessableAssemblyExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
                         {
-                            PSInvalidOperationException invalidOperation = PSTraceSource.NewInvalidOperationException(
-                                Modules.WildCardNotAllowedInRequiredAssemblies,
-                                moduleManifestPath);
-                            invalidOperation.SetErrorId("Modules_WildCardNotAllowedInRequiredAssemblies");
-                            throw invalidOperation;
+                            fileName = FixFileNameWithoutLoadingAssembly(moduleBase, assembly, extension: null);
                         }
                         else
                         {
-                            string fileName = FixupFileName(moduleBase, assembly, StringLiterals.PowerShellNgenAssemblyExtension, importingModule, out bool pathIsResolved);
-                            if (!pathIsResolved)
+                            bool isPathResolved = false;
+                            foreach (string extToTry in ModuleIntrinsics.ProcessableAssemblyExtensions)
                             {
-                                fileName = FixupFileName(moduleBase, assembly, StringLiterals.PowerShellILAssemblyExtension, importingModule);
+                                fileName = FixFileNameWithoutLoadingAssembly(moduleBase, assembly, extToTry, out isPathResolved);
+                                if (isPathResolved)
+                                {
+                                    break;
+                                }
                             }
 
-                            string loadMessage = StringUtil.Format(Modules.LoadingFile, "Assembly", fileName);
-                            WriteVerbose(loadMessage);
-                            iss.Assemblies.Add(new SessionStateAssemblyEntry(assembly, fileName));
-                            fixedUpAssemblyPathList.Add(fileName);
+                            if (!isPathResolved)
+                            {
+                                // We didn't resolve the assembly path, so remove the '.exe' extension that was added in the
+                                // last iteration of the above loop.
+                                int index = fileName.LastIndexOf('.');
+                                fileName = fileName.Substring(0, index);
+                            }
+                        }
 
-                            fileName = FixupFileName(moduleBase, assembly, StringLiterals.PowerShellILExecutableExtension, importingModule);
-                            loadMessage = StringUtil.Format(Modules.LoadingFile, "Executable", fileName);
-                            WriteVerbose(loadMessage);
-                            iss.Assemblies.Add(new SessionStateAssemblyEntry(assembly, fileName));
-                            fixedUpAssemblyPathList.Add(fileName);
+                        WriteVerbose(StringUtil.Format(Modules.LoadingFile, "Assembly", fileName));
 
-                            doBind = true;
-                        }
+                        // Set a fake PSModuleInfo object to indicate the module it comes from.
+                        var assemblyEntry = new SessionStateAssemblyEntry(assembly, fileName);
+                        assemblyEntry.SetModule(new PSModuleInfo(moduleName, path: null, context: null, sessionState: null));
+
+                        iss.Assemblies.Add(assemblyEntry);
+                        doBind = true;
                     }
                 }
             }
@@ -2221,8 +2295,7 @@ internal PSModuleInfo LoadModuleManifest(
                                 continue;
                             }
 
-                            string resolvedEntryFileName = ResolveRootedFilePath(entry.FileName, Context) ??
-                                                            entry.FileName;
+                            string resolvedEntryFileName = ResolveRootedFilePath(entry.FileName, Context) ?? entry.FileName;
                             if (resolvedEntryFileName.Equals(resolvedFileName, StringComparison.OrdinalIgnoreCase))
                             {
                                 isAlreadyLoaded = true;
@@ -2345,7 +2418,7 @@ internal PSModuleInfo LoadModuleManifest(
                 key: "FileList",
                 manifestProcessingFlags,
                 moduleBase,
-                extension: string.Empty,
+                extension: null,
                 // Don't check file existence - don't want to change current behavior without feature team discussion.
                 verifyFilesExist: false,
                 out List<string> fileList))
@@ -2384,17 +2457,13 @@ internal PSModuleInfo LoadModuleManifest(
                 {
                     if (importingModule)
                     {
-                        IList<PSModuleInfo> moduleProxies = ImportModulesUsingWinCompat(new string[] { moduleManifestPath }, null, options);
+                        IList<PSModuleInfo> moduleProxies = ImportModulesUsingWinCompat(
+                            moduleNames: new string[] { moduleManifestPath },
+                            moduleFullyQualifiedNames: null,
+                            importModuleOptions: options);
 
-                        // we are loading by a single ManifestPath so expect max of 1
-                        if (moduleProxies.Count > 0)
-                        {
-                            return moduleProxies[0];
-                        }
-                        else
-                        {
-                            return null;
-                        }
+                        // We are loading by a single ManifestPath so expect max of 1
+                        return moduleProxies.Count > 0 ? moduleProxies[0] : null;
                     }
                 }
                 else
@@ -2489,38 +2558,27 @@ internal PSModuleInfo LoadModuleManifest(
             // If there is a session state, set up to import/export commands and variables
             if (ss != null)
             {
-                ss.Internal.SetVariable(SpecialVariables.PSScriptRootVarPath, Path.GetDirectoryName(moduleManifestPath),
-                    true, CommandOrigin.Internal);
-                ss.Internal.SetVariable(SpecialVariables.PSCommandPathVarPath, moduleManifestPath, true,
+                ss.Internal.SetVariable(
+                    SpecialVariables.PSScriptRootVarPath,
+                    moduleBase,
+                    asValue: true,
                     CommandOrigin.Internal);
+
+                ss.Internal.SetVariable(
+                    SpecialVariables.PSCommandPathVarPath,
+                    moduleManifestPath,
+                    asValue: true,
+                    CommandOrigin.Internal);
+
                 ss.Internal.Module = manifestInfo;
 
                 // without ModuleToProcess a manifest will export everything by default
                 // (otherwise we want to honour exports from ModuleToProcess)
-                if (exportedFunctions == null)
-                {
-                    exportedFunctions = MatchAll;
-                }
-
-                if (exportedCmdlets == null)
-                {
-                    exportedCmdlets = MatchAll;
-                }
-
-                if (exportedVariables == null)
-                {
-                    exportedVariables = MatchAll;
-                }
-
-                if (exportedAliases == null)
-                {
-                    exportedAliases = MatchAll;
-                }
-
-                if (exportedDscResources == null)
-                {
-                    exportedDscResources = MatchAll;
-                }
+                exportedAliases ??= MatchAll;
+                exportedCmdlets ??= MatchAll;
+                exportedDscResources ??= MatchAll;
+                exportedFunctions ??= MatchAll;
+                exportedVariables ??= MatchAll;
             }
 
             manifestInfo.Description = description;
@@ -2946,8 +3004,6 @@ internal PSModuleInfo LoadModuleManifest(
                             ss: null,
                             options: nestedModuleOptions,
                             manifestProcessingFlags: manifestProcessingFlags,
-                            loadTypes: true,
-                            loadFormats: true,
                             privateData: privateData,
                             found: out found,
                             shortModuleName: null,
@@ -3049,8 +3105,6 @@ internal PSModuleInfo LoadModuleManifest(
                         ss: ss,
                         options: options,
                         manifestProcessingFlags: manifestProcessingFlags,
-                        loadTypes: (exportedTypeFiles == null || exportedTypeFiles.Count == 0),        // If types files already loaded, don't load snapin files
-                        loadFormats: (exportedFormatFiles == null || exportedFormatFiles.Count == 0),   // if format files already loaded, don't load snapin files
                         privateData: privateData,
                         found: out found,
                         shortModuleName: null,
@@ -3155,16 +3209,10 @@ internal PSModuleInfo LoadModuleManifest(
                     }
                 }
 
-                if (newManifestInfo.RootModule == null)
-                {
-                    newManifestInfo.RootModule = manifestInfo.RootModule;
-                }
+                newManifestInfo.RootModule ??= manifestInfo.RootModule;
                 // If may be the case that a script has already set the PrivateData field in the module
                 // info object, in which case we won't overwrite it.
-                if (newManifestInfo.PrivateData == null)
-                {
-                    newManifestInfo.PrivateData = manifestInfo.PrivateData;
-                }
+                newManifestInfo.PrivateData ??= manifestInfo.PrivateData;
 
                 // Assign the PowerShellGet related properties from the module manifest
                 foreach (var tag in manifestInfo.Tags)
@@ -3289,10 +3337,7 @@ internal PSModuleInfo LoadModuleManifest(
                     }
                 }
 
-                if (newManifestInfo.RootModuleForManifest == null)
-                {
-                    newManifestInfo.RootModuleForManifest = manifestInfo.RootModuleForManifest;
-                }
+                newManifestInfo.RootModuleForManifest ??= manifestInfo.RootModuleForManifest;
 
                 if (newManifestInfo.DeclaredCmdletExports == null || newManifestInfo.DeclaredCmdletExports.Count == 0)
                 {
@@ -3384,13 +3429,25 @@ internal PSModuleInfo LoadModuleManifest(
                     if ((ss != null) && (!ss.Internal.UseExportList))
                     {
                         // For cross language boundaries, implicitly import all functions only if
-                        // this manifest *does* exort functions explicitly.
+                        // this manifest *does* export functions explicitly.
                         List<WildcardPattern> fnMatchPattern = (
                                                                 (manifestScriptInfo.DefiningLanguageMode == PSLanguageMode.FullLanguage) &&
                                                                 (Context.LanguageMode != PSLanguageMode.FullLanguage) &&
                                                                 (exportedFunctions == null)
                                                                 ) ? null : MatchAll;
 
+                        // If the system is in WDAC policy AUDIT mode, then an export functions restriction should be reported but not applied.
+                        if (fnMatchPattern == null && SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Audit)
+                        {
+                            SystemPolicy.LogWDACAuditMessage(
+                                context: Context,
+                                title: Modules.WDACImplicitFunctionExportLogTitle,
+                                message: StringUtil.Format(Modules.WDACImplicitFunctionExportLogMessage, manifestScriptInfo.ModuleName),
+                                fqid: "ModuleImplicitFunctionExportNotAllowed",
+                                dropIntoDebugger: true);
+                            fnMatchPattern = MatchAll;
+                        }
+
                         ModuleIntrinsics.ExportModuleMembers(cmdlet: this,
                                                              sessionState: ss.Internal,
                                                              functionPatterns: fnMatchPattern,
@@ -3715,7 +3772,7 @@ internal static object IsModuleLoaded(ExecutionContext context, ModuleSpecificat
             // If the RequiredModule is one of the Engine modules, then they could have been loaded as snapins (using InitialSessionState.CreateDefault())
             if (result == null && InitialSessionState.IsEngineModule(requiredModule.Name))
             {
-                result = ModuleCmdletBase.GetEngineSnapIn(context, requiredModule.Name);
+                result = context.CurrentRunspace.InitialSessionState.GetPSSnapIn(requiredModule.Name);
                 if (result != null)
                 {
                     loaded = true;
@@ -4375,8 +4432,6 @@ private bool GetListOfFilesFromData(
             out List<string> list)
         {
             list = null;
-
-            bool importingModule = manifestProcessingFlags.HasFlag(ManifestProcessingFlags.LoadElements);
             if (!GetListOfStringsFromData(data, moduleManifestPath, key, manifestProcessingFlags, out List<string> listOfStrings))
             {
                 return false;
@@ -4398,7 +4453,7 @@ private bool GetListOfFilesFromData(
                 {
                     try
                     {
-                        string fixedFileName = FixupFileName(moduleBase, s, extension, importingModule, skipLoading: true);
+                        string fixedFileName = FixFileNameWithoutLoadingAssembly(moduleBase, s, extension);
                         var dir = Path.GetDirectoryName(fixedFileName);
 
                         if (string.Equals(psHome, dir, StringComparison.OrdinalIgnoreCase) ||
@@ -4509,7 +4564,7 @@ internal static ModuleLoggingGroupPolicyStatus GetModuleLoggingInformation(out I
         /// <summary>
         /// Checks to see if the module manifest contains the specified key.
         /// If it does and it can be converted to the expected type, then it returns <see langword="true"/> and sets <paramref name="result"/> to the value.
-        /// If the key is missing it returns <see langword="true"/> and sets <paramref name="result"/> to <c>default(<typeparam name="T"/>)</c>.
+        /// If the key is missing it returns <see langword="true"/> and sets <paramref name="result"/> to <c>default(<typeparamref name="T"/>)</c>.
         /// If the key is invalid then it returns <see langword="false"/>.
         /// </summary>
         /// <param name="data">The hashtable to look for the key in.</param>
@@ -4553,39 +4608,58 @@ internal bool GetScalarFromData<T>(
             }
         }
 
+        private string FixFileNameWithoutLoadingAssembly(string moduleBase, string fileName, string extension)
+        {
+            return FixFileName(moduleName: null, moduleBase, fileName, extension, canLoadAssembly: false, pathIsResolved: out _);
+        }
+
+        private string FixFileNameWithoutLoadingAssembly(string moduleBase, string fileName, string extension, out bool pathIsResolved)
+        {
+            return FixFileName(moduleName: null, moduleBase, fileName, extension, canLoadAssembly: false, out pathIsResolved);
+        }
+
         /// <summary>
         /// A utility routine to fix up a file name so it's rooted and has an extension.
         /// </summary>
-        internal string FixupFileName(string moduleBase, string name, string extension, bool isImportingModule, bool skipLoading = false)
+        private string FixFileName(string moduleName, string moduleBase, string fileName, string extension, bool canLoadAssembly)
         {
-            return FixupFileName(moduleBase, name, extension, isImportingModule, pathIsResolved: out _, skipLoading);
+            return FixFileName(moduleName, moduleBase, fileName, extension, canLoadAssembly, pathIsResolved: out _);
         }
 
         /// <summary>
         /// A utility routine to fix up a file name so it's rooted and has an extension.
         /// </summary>
         /// <remarks>
-        /// When fixing up an assembly file, this method loads the resovled assembly if it's in the process of actually loading a module.
+        /// When fixing up an assembly file, this method loads the resolved assembly if it's in the process of actually loading a module.
         /// Read the comments in the method for the detailed information.
         /// </remarks>
+        /// <param name="moduleName">Name of the module that we are processing, used for caching purpose when we need to load an assembly.</param>
         /// <param name="moduleBase">The base path to use if the file is not rooted.</param>
-        /// <param name="name">The file name to resolve.</param>
-        /// <param name="extension">The extension to use in case the given name has no extension.</param>
-        /// <param name="isImportingModule">Indicate if we are loading a module.</param>
+        /// <param name="fileName">The file name to resolve.</param>
+        /// <param name="extension">The extension to use for the look up.</param>
+        /// <param name="canLoadAssembly">Indicate if we can load assembly for the resolution.</param>
         /// <param name="pathIsResolved">Indicate if the returned path is fully resolved.</param>
-        /// <param name="skipLoading">Indicate if the resolved module should be loaded.</param>
         /// <returns>
-        /// The resolved file path. Or, the combined path of <paramref name="moduleBase"/> and <paramref name="name"/> when the file path cannot be resolved.
+        /// The resolved file path. Or, the combined path of <paramref name="moduleBase"/> and <paramref name="fileName"/> when the file path cannot be resolved.
         /// </returns>
-        internal string FixupFileName(string moduleBase, string name, string extension, bool isImportingModule, out bool pathIsResolved, bool skipLoading = false)
+        private string FixFileName(string moduleName, string moduleBase, string fileName, string extension, bool canLoadAssembly, out bool pathIsResolved)
         {
             pathIsResolved = false;
-            string originalName = name;
-            string originalExt = Path.GetExtension(name);
 
-            if (string.IsNullOrEmpty(originalExt))
+            string originalName = fileName;
+            string originalExt = Path.GetExtension(fileName);
+
+            if (string.IsNullOrEmpty(extension))
             {
-                name += extension;
+                // When 'extension' is not explicitly specified, we honor the original extension.
+                extension = originalExt;
+            }
+            else if (!extension.Equals(originalExt, StringComparison.OrdinalIgnoreCase))
+            {
+                // When 'extension' is explicitly specified, append it if the original extension is different.
+                // Note: the original extension could actually be part of the file name. For example, the name
+                // is `Microsoft.PowerShell.Command.Utility`, in which case the extension is `.Utility`.
+                fileName += extension;
             }
 
             // Try to get the resolved fully qualified path to the file.
@@ -4597,24 +4671,24 @@ internal string FixupFileName(string moduleBase, string name, string extension,
             //    Check for combinedPath in this case will get us the normalized rooted path 'C:\Windows\System32\WindowsPowerShell\v1.0\WSMan.format.ps1xml'.
             // The 'Microsoft.WSMan.Management' module in PowerShell was updated to not use the relative path for 'FormatsToProcess' entry,
             // but it's safer to keep the original behavior to avoid unexpected breaking changes.
-            string combinedPath = Path.Combine(moduleBase, name);
-            string resolvedPath = IsRooted(name)
-                ? ResolveRootedFilePath(name, Context) ?? ResolveRootedFilePath(combinedPath, Context)
+            string combinedPath = Path.Combine(moduleBase, fileName);
+            string resolvedPath = IsRooted(fileName)
+                ? ResolveRootedFilePath(fileName, Context) ?? ResolveRootedFilePath(combinedPath, Context)
                 : ResolveRootedFilePath(combinedPath, Context);
 
             // Return the path if successfully resolved.
-            if (resolvedPath != null)
+            if (resolvedPath is not null)
             {
-                if (isImportingModule && resolvedPath.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && !skipLoading)
+                if (canLoadAssembly && resolvedPath.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
                 {
                     // If we are fixing up an assembly file path and we are actually loading the module, then we load the resolved assembly file here.
-                    // This is because we process type/format ps1xml files before 'RootModule' and 'NestedModules' entries during the module loading.
-                    // A types.ps1xml file could refer to a type defined in the assembly that is specified in the 'RootModule' or 'NestedModule', and
-                    // in that case, processing the types.ps1xml file would fail because it happens before processing the 'RootModule', which loads
-                    // the assembly. We cannot move the processing of types.ps1xml file after processing 'RootModule' either, because the 'RootModule'
-                    // might refer to members defined in the types.ps1xml file. In order to make it work for this paradox, we have to load the resolved
-                    // assembly when we are actually loading the module. However, when it's module analysis, there is no need to load the assembly.
-                    ExecutionContext.LoadAssembly(name: null, filename: resolvedPath, error: out _);
+                    // This is because we process type/format ps1xml files before 'RootModule' during the module loading. A types.ps1xml file could
+                    // refer to a type defined in the assembly that is specified in the 'RootModule', and in that case, processing the types.ps1xml file
+                    // would fail because it happens before processing the 'RootModule', which loads the assembly.
+                    // We cannot move the processing of types.ps1xml file after processing 'RootModule' either, because the 'RootModule' might refer to
+                    // members defined in the types.ps1xml file. In order to make it work for this paradox, we have to load the resolved assembly when
+                    // we are actually loading the module. However, when it's module analysis, there is no need to load the assembly.
+                    Context.AddAssembly(source: moduleName, assemblyName: null, filePath: resolvedPath, error: out _);
                 }
 
                 pathIsResolved = true;
@@ -4627,12 +4701,12 @@ internal string FixupFileName(string moduleBase, string name, string extension,
             // For dlls, we cannot get the path from the provider.
             // We need to load the assembly and then get the path.
             // If the module is already loaded, this is not expensive since the assembly is already loaded in the AppDomain
-            if (!string.IsNullOrEmpty(extension) &&
+            if (canLoadAssembly && !string.IsNullOrEmpty(extension) &&
                 (extension.Equals(StringLiterals.PowerShellILAssemblyExtension, StringComparison.OrdinalIgnoreCase) ||
-                extension.Equals(StringLiterals.PowerShellILExecutableExtension, StringComparison.OrdinalIgnoreCase)))
+                 extension.Equals(StringLiterals.PowerShellILExecutableExtension, StringComparison.OrdinalIgnoreCase)))
             {
-                Assembly assembly = ExecutionContext.LoadAssembly(name: originalName, filename: null, error: out _);
-                if (assembly != null)
+                Assembly assembly = Context.AddAssembly(source: moduleName, assemblyName: originalName, filePath: null, error: out _);
+                if (assembly is not null)
                 {
                     pathIsResolved = true;
                     result = assembly.Location;
@@ -4887,12 +4961,12 @@ internal static void SyncCurrentLocationHandler(object sender, LocationChangedEv
                 using var ps = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
                 ps.AddCommand(new CmdletInfo("Invoke-Command", typeof(InvokeCommandCommand)));
                 ps.AddParameter("Session", compatSession);
-                ps.AddParameter("ScriptBlock", ScriptBlock.Create(string.Format("Set-Location -Path '{0}'", args.NewPath.Path)));
+                ps.AddParameter("ScriptBlock", ScriptBlock.Create(string.Create(CultureInfo.InvariantCulture, $"Set-Location -Path '{args.NewPath.Path}'")));
                 ps.Invoke();
             }
         }
 
-        internal static System.EventHandler<LocationChangedEventArgs> SyncCurrentLocationDelegate;
+        internal static EventHandler<LocationChangedEventArgs> SyncCurrentLocationDelegate;
 
         internal virtual IList<PSModuleInfo> ImportModulesUsingWinCompat(IEnumerable<string> moduleNames, IEnumerable<ModuleSpecification> moduleFullyQualifiedNames, ImportModuleOptions importModuleOptions) { throw new System.NotImplementedException(); }
 
@@ -4946,8 +5020,6 @@ internal void RemoveModule(PSModuleInfo module)
         /// <param name="moduleNameInRemoveModuleCmdlet">Module name specified in the cmdlet.</param>
         internal void RemoveModule(PSModuleInfo module, string moduleNameInRemoveModuleCmdlet)
         {
-            bool isTopLevelModule = false;
-
             // if the module path is empty string, means it is a dynamically generated assembly.
             // We have set the module path to be module name as key to make it unique, we need update here as well in case the module can be removed.
             if (module.Path == string.Empty)
@@ -4955,7 +5027,7 @@ internal void RemoveModule(PSModuleInfo module, string moduleNameInRemoveModuleC
                 module.Path = module.Name;
             }
 
-            bool shouldModuleBeRemoved = ShouldModuleBeRemoved(module, moduleNameInRemoveModuleCmdlet, out isTopLevelModule);
+            bool shouldModuleBeRemoved = ShouldModuleBeRemoved(module, moduleNameInRemoveModuleCmdlet, out bool isTopLevelModule);
 
             if (shouldModuleBeRemoved)
             {
@@ -4963,17 +5035,14 @@ internal void RemoveModule(PSModuleInfo module, string moduleNameInRemoveModuleC
                 if (Context.Modules.ModuleTable.ContainsKey(module.Path))
                 {
                     // We should try to run OnRemove as the very first thing
-                    if (module.OnRemove != null)
-                    {
-                        module.OnRemove.InvokeUsingCmdlet(
-                            contextCmdlet: this,
-                            useLocalScope: true,
-                            errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
-                            dollarUnder: AutomationNull.Value,
-                            input: AutomationNull.Value,
-                            scriptThis: AutomationNull.Value,
-                            args: new object[] { module });
-                    }
+                    module.OnRemove?.InvokeUsingCmdlet(
+                        contextCmdlet: this,
+                        useLocalScope: true,
+                        errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
+                        dollarUnder: AutomationNull.Value,
+                        input: AutomationNull.Value,
+                        scriptThis: AutomationNull.Value,
+                        args: new object[] { module });
 
                     if (module.ImplementingAssembly != null && !module.ImplementingAssembly.IsDynamic)
                     {
@@ -5187,19 +5256,13 @@ internal void RemoveModule(PSModuleInfo module, string moduleNameInRemoveModuleC
                     // And the appdomain level module path cache.
                     PSModuleInfo.RemoveFromAppDomainLevelCache(module.Name);
 
-                    // Update implicit module loaded property
-                    if (Context.Modules.IsImplicitRemotingModuleLoaded)
+                    // And remove the module assembly entries that may have been added from the assembly cache.
+                    Context.RemoveFromAssemblyCache(source: module.Name);
+                    if (module.ModuleType == ModuleType.Binary && !string.IsNullOrEmpty(module.RootModule))
                     {
-                        Context.Modules.IsImplicitRemotingModuleLoaded = false;
-                        foreach (var modInfo in Context.Modules.ModuleTable.Values)
-                        {
-                            var privateData = modInfo.PrivateData as Hashtable;
-                            if ((privateData != null) && privateData.ContainsKey("ImplicitRemoting"))
-                            {
-                                Context.Modules.IsImplicitRemotingModuleLoaded = true;
-                                break;
-                            }
-                        }
+                        // We also need to clean up the cache entries that are possibly referenced by the root module in this case.
+                        string rootModuleName = ModuleIntrinsics.GetModuleName(module.RootModule);
+                        Context.RemoveFromAssemblyCache(source: rootModuleName);
                     }
                 }
             }
@@ -5333,9 +5396,8 @@ internal PSModuleInfo LoadUsingExtensions(PSModuleInfo parentModule,
             string moduleName, string fileBaseName, string extension, string moduleBase,
             string prefix, SessionState ss, ImportModuleOptions options, ManifestProcessingFlags manifestProcessingFlags, out bool found)
         {
-            bool throwAwayModuleFileFound = false;
             return LoadUsingExtensions(parentModule, moduleName, fileBaseName, extension, moduleBase, prefix, ss,
-                                       options, manifestProcessingFlags, out found, out throwAwayModuleFileFound);
+                                       options, manifestProcessingFlags, out found, out _);
         }
 
         /// <summary>
@@ -5436,7 +5498,6 @@ internal PSModuleInfo LoadUsingExtensions(PSModuleInfo parentModule,
                 }
                 else if (File.Exists(fileName))
                 {
-                    moduleFileFound = true;
                     // Win8: 325243 - Added the version check so that we do not unload modules with the same name but different version
                     if (BaseForce && DoesAlreadyLoadedModuleSatisfyConstraints(module))
                     {
@@ -5592,12 +5653,23 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
             PSModuleInfo module = null;
 
             // Block ps1 files from being imported in constrained language.
-            if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage && ext.Equals(StringLiterals.PowerShellScriptFileExtension, StringComparison.OrdinalIgnoreCase))
+            if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage &&
+                ext.Equals(StringLiterals.PowerShellScriptFileExtension, StringComparison.OrdinalIgnoreCase))
             {
-                InvalidOperationException invalidOp = new InvalidOperationException(Modules.ImportPSFileNotAllowedInConstrainedLanguage);
-                ErrorRecord er = new ErrorRecord(invalidOp, "Modules_ImportPSFileNotAllowedInConstrainedLanguage",
-                                                 ErrorCategory.PermissionDenied, null);
-                ThrowTerminatingError(er);
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    InvalidOperationException invalidOp = new InvalidOperationException(Modules.ImportPSFileNotAllowedInConstrainedLanguage);
+                    ErrorRecord er = new ErrorRecord(invalidOp, "Modules_ImportPSFileNotAllowedInConstrainedLanguage",
+                                                    ErrorCategory.PermissionDenied, null);
+                    ThrowTerminatingError(er);
+                }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Context,
+                    title: Modules.WDACScriptFileImportLogTitle,
+                    message: StringUtil.Format(Modules.WDACScriptFileImportLogMessage, fileName),
+                    fqid: "ModuleImportScriptFilesNotAllowed",
+                    dropIntoDebugger: true);
             }
 
             // If MinimumVersion/RequiredVersion/MaximumVersion has been specified, then only try to process manifest modules...
@@ -5681,19 +5753,31 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
 
                                 // If the script didn't call Export-ModuleMember explicitly, then
                                 // implicitly export functions and cmdlets.
+                                var systemLockdownPolicy = SystemPolicy.GetSystemLockdownPolicy();
                                 if (!module.SessionState.Internal.UseExportList)
                                 {
                                     // For cross language boundaries don't implicitly export all functions, unless they are allowed nested modules.
-                                    // Implict function export is allowed when any of the following is true:
+                                    // Implicit function export is allowed when any of the following is true:
                                     //  - Nested modules are allowed by module manifest
                                     //  - The import context language mode is FullLanguage
-                                    //  - This script module not running as trusted (FullLanguage)
+                                    //  - This script module is not running as trusted (FullLanguage)
                                     module.ModuleAutoExportsAllFunctions = options.AllowNestedModuleFunctionsToExport ||
                                                                            Context.LanguageMode == PSLanguageMode.FullLanguage ||
                                                                            psm1ScriptInfo.DefiningLanguageMode != PSLanguageMode.FullLanguage;
-
                                     List<WildcardPattern> fnMatchPattern = module.ModuleAutoExportsAllFunctions ? MatchAll : null;
 
+                                    // If the system is in WDAC policy AUDIT mode, then an export functions restriction should be reported but not applied.
+                                    if (fnMatchPattern == null && systemLockdownPolicy == SystemEnforcementMode.Audit)
+                                    {
+                                        SystemPolicy.LogWDACAuditMessage(
+                                            context: Context,
+                                            title: Modules.WDACImplicitFunctionExportLogTitle,
+                                            message: StringUtil.Format(Modules.WDACImplicitFunctionExportLogMessage, module.Name),
+                                            fqid: "ModuleImplicitFunctionExportNotAllowed",
+                                            dropIntoDebugger: true);
+                                        fnMatchPattern = MatchAll;
+                                    }
+
                                     ModuleIntrinsics.ExportModuleMembers(
                                         cmdlet: this,
                                         sessionState: module.SessionState.Internal,
@@ -5703,8 +5787,8 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
                                         variablePatterns: null,
                                         doNotExportCmdlets: null);
                                 }
-                                else if ((SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce) &&
-                                         (module.LanguageMode == PSLanguageMode.FullLanguage) &&
+                                else if ((systemLockdownPolicy == SystemEnforcementMode.Enforce || systemLockdownPolicy == SystemEnforcementMode.Audit) &&
+                                         module.LanguageMode == PSLanguageMode.FullLanguage &&
                                          module.SessionState.Internal.FunctionsExportedWithWildcard &&
                                          !module.SessionState.Internal.ManifestWithExplicitFunctionExport)
                                 {
@@ -5712,10 +5796,10 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
                                     // exported functions only come from this module and not from any imported nested modules.
                                     // Unless there is a parent manifest that explicitly filters all exported functions (no wildcards).
                                     // This prevents unintended public exposure of imported functions running in FullLanguage.
-                                    ModuleIntrinsics.RemoveNestedModuleFunctions(module);
+                                    RemoveNestedModuleFunctions(Context, module, systemLockdownPolicy);
                                 }
 
-                                CheckForDisallowedDotSourcing(module.SessionState, psm1ScriptInfo, options);
+                                CheckForDisallowedDotSourcing(module, psm1ScriptInfo, options);
 
                                 // Add it to the all module tables
                                 ImportModuleMembers(module, prefix, options);
@@ -5869,7 +5953,7 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
 
                     if (module != null)
                     {
-                        CheckForDisallowedDotSourcing(module.SessionState, psd1ScriptInfo, options);
+                        CheckForDisallowedDotSourcing(module, psd1ScriptInfo, options);
 
                         if (importingModule)
                         {
@@ -5892,7 +5976,7 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
                          ext.Equals(StringLiterals.PowerShellILExecutableExtension, StringComparison.OrdinalIgnoreCase))
                 {
                     module = LoadBinaryModule(
-                        trySnapInName: false,
+                        parentModule,
                         ModuleIntrinsics.GetModuleName(fileName),
                         fileName,
                         assemblyToLoad: null,
@@ -5901,8 +5985,6 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
                         options,
                         manifestProcessingFlags,
                         prefix,
-                        loadTypes: true,
-                        loadFormats: true,
                         out found);
 
                     if (found && module != null)
@@ -6036,25 +6118,28 @@ internal PSModuleInfo LoadModule(PSModuleInfo parentModule, string fileName, str
         }
 
         private void CheckForDisallowedDotSourcing(
-            SessionState ss,
+            PSModuleInfo moduleInfo,
             ExternalScriptInfo scriptInfo,
             ImportModuleOptions options)
         {
-            if (ss == null || ss.Internal == null)
-            { return; }
+            if (moduleInfo.SessionState == null || moduleInfo.SessionState.Internal == null)
+            {
+                return;
+            }
 
             // A manifest with explicit function export is detected through a shared session state or the nested module options, because nested
             // module processing does not use a shared session state.
-            var manifestWithExplicitFunctionExport = ss.Internal.ManifestWithExplicitFunctionExport || options.AllowNestedModuleFunctionsToExport;
+            var manifestWithExplicitFunctionExport = moduleInfo.SessionState.Internal.ManifestWithExplicitFunctionExport || options.AllowNestedModuleFunctionsToExport;
 
             // If system is in lock down mode, we disallow trusted modules that use the dotsource operator while simultaneously using
             // wild cards for exporting module functions, unless there is an overriding manifest that explicitly exports functions
             // without wild cards.
             // This is because dotsourcing brings functions into module scope and it is too easy to inadvertently or maliciously
             // expose harmful private functions that run in trusted (FullLanguage) mode.
-            if (!manifestWithExplicitFunctionExport && ss.Internal.FunctionsExportedWithWildcard &&
-                (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce) &&
-                (scriptInfo.DefiningLanguageMode == PSLanguageMode.FullLanguage))
+            var systemLockdownPolicy = SystemPolicy.GetSystemLockdownPolicy();
+            if (!manifestWithExplicitFunctionExport && moduleInfo.SessionState.Internal.FunctionsExportedWithWildcard &&
+                (systemLockdownPolicy == SystemEnforcementMode.Enforce || systemLockdownPolicy == SystemEnforcementMode.Audit) &&
+                scriptInfo.DefiningLanguageMode == PSLanguageMode.FullLanguage)
             {
                 var dotSourceOperator = scriptInfo.GetScriptBlockAst().FindAll(ast =>
                 {
@@ -6065,15 +6150,50 @@ private void CheckForDisallowedDotSourcing(
 
                 if (dotSourceOperator != null)
                 {
-                    var errorRecord = new ErrorRecord(
-                        new PSSecurityException(Modules.CannotUseDotSourceWithWildCardFunctionExport),
-                        "Modules_SystemLockDown_CannotUseDotSourceWithWildCardFunctionExport",
-                        ErrorCategory.SecurityError, null);
-                    ThrowTerminatingError(errorRecord);
+                    if (systemLockdownPolicy != SystemEnforcementMode.Audit)
+                    {
+                        var errorRecord = new ErrorRecord(
+                            new PSSecurityException(Modules.CannotUseDotSourceWithWildCardFunctionExport),
+                            "Modules_SystemLockDown_CannotUseDotSourceWithWildCardFunctionExport",
+                            ErrorCategory.SecurityError, null);
+                        ThrowTerminatingError(errorRecord);
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: Context,
+                        title: Modules.WDACModuleDotSourceLogTitle,
+                        message: StringUtil.Format(Modules.WDACModuleDotSourceLogMessage, moduleInfo.Name),
+                        fqid: "ModuleImportDotSourceNotAllowed",
+                        dropIntoDebugger: true);
                 }
             }
         }
 
+        private static void RemoveNestedModuleFunctions(
+            ExecutionContext context,
+            PSModuleInfo module,
+            SystemEnforcementMode systemLockdownPolicy)
+        {
+            var input = module.SessionState?.Internal?.ExportedFunctions;
+            if (input == null || input.Count == 0)
+            {
+                return;
+            }
+
+            if (systemLockdownPolicy != SystemEnforcementMode.Audit)
+            {
+                input.RemoveAll(fnInfo => !module.Name.Equals(fnInfo.ModuleName, StringComparison.OrdinalIgnoreCase));
+                return;
+            }
+
+            SystemPolicy.LogWDACAuditMessage(
+                context: context,
+                title: Modules.WDACModuleFnExportWithNestedModulesLogTitle,
+                message: StringUtil.Format(Modules.WDACModuleFnExportWithNestedModulesLogMessage, module.Name),
+                fqid: "ModuleExportWithWildcardCharactersNotAllowed",
+                dropIntoDebugger: true);
+        }
+
         private static bool ShouldProcessScriptModule(PSModuleInfo parentModule, ref bool found)
         {
             bool shouldProcessModule = true;
@@ -6117,7 +6237,6 @@ private static void ClearAnalysisCaches()
         private static readonly Dictionary<string, Tuple<BinaryAnalysisResult, Version>> s_binaryAnalysisCache =
             new Dictionary<string, Tuple<BinaryAnalysisResult, Version>>();
 
-#if CORECLR
         /// <summary>
         /// Analyze the module assembly to find out all cmdlets and aliases defined in that assembly.
         /// </summary>
@@ -6157,155 +6276,6 @@ private static BinaryAnalysisResult GetCmdletsFromBinaryModuleImplementation(str
 
             return resultToReturn;
         }
-#else
-        /// <summary>
-        /// Analyze the module assembly to find out all cmdlets and aliases defined in that assembly.
-        /// </summary>
-        private BinaryAnalysisResult GetCmdletsFromBinaryModuleImplementation(string path, ManifestProcessingFlags manifestProcessingFlags, out Version assemblyVersion)
-        {
-            Tuple<BinaryAnalysisResult, Version> tuple = null;
-
-            lock (s_lockObject)
-            {
-                s_binaryAnalysisCache.TryGetValue(path, out tuple);
-            }
-
-            if (tuple != null)
-            {
-                assemblyVersion = tuple.Item2;
-                return tuple.Item1;
-            }
-
-            assemblyVersion = new Version("0.0.0.0");
-
-            bool cleanupModuleAnalysisAppDomain = false;
-            AppDomain tempDomain = Context.AppDomainForModuleAnalysis;
-            if (tempDomain == null)
-            {
-                cleanupModuleAnalysisAppDomain = Context.TakeResponsibilityForModuleAnalysisAppDomain();
-                tempDomain = Context.AppDomainForModuleAnalysis = AppDomain.CreateDomain("ReflectionDomain");
-            }
-
-            try
-            {
-                // create temp appdomain if one is not passed in
-                tempDomain.SetData("PathToProcess", path);
-                tempDomain.SetData("IsModuleLoad", 0 != (manifestProcessingFlags & ManifestProcessingFlags.LoadElements));
-
-                // reset DetectedCmdlets and AssemblyVersion from previous invocation
-                tempDomain.SetData("DetectedCmdlets", null);
-                tempDomain.SetData("DetectedAliases", null);
-                tempDomain.SetData("AssemblyVersion", assemblyVersion);
-
-                tempDomain.DoCallBack(AnalyzeSnapinDomainHelper);
-                List<string> detectedCmdlets = (List<string>)tempDomain.GetData("DetectedCmdlets");
-                List<Tuple<string, string>> detectedAliases = (List<Tuple<string, string>>)tempDomain.GetData("DetectedAliases");
-                assemblyVersion = (Version)tempDomain.GetData("AssemblyVersion");
-
-                if ((detectedCmdlets.Count == 0) && (System.IO.Path.IsPathRooted(path)))
-                {
-                    // If we couldn't load it from a file, try loading from the GAC
-                    string assemblyname = Path.GetFileName(path);
-                    BinaryAnalysisResult gacResult = GetCmdletsFromBinaryModuleImplementation(assemblyname, manifestProcessingFlags, out assemblyVersion);
-                    detectedCmdlets = gacResult.DetectedCmdlets;
-                    detectedAliases = gacResult.DetectedAliases;
-                }
-
-                BinaryAnalysisResult result = new BinaryAnalysisResult();
-                result.DetectedCmdlets = detectedCmdlets;
-                result.DetectedAliases = detectedAliases;
-
-                lock (s_lockObject)
-                {
-                    s_binaryAnalysisCache[path] = Tuple.Create(result, assemblyVersion);
-                }
-
-                return result;
-            }
-            finally
-            {
-                if (cleanupModuleAnalysisAppDomain)
-                {
-                    Context.ReleaseResponsibilityForModuleAnalysisAppDomain();
-                }
-            }
-        }
-
-        private static void AnalyzeSnapinDomainHelper()
-        {
-            string path = (string)AppDomain.CurrentDomain.GetData("PathToProcess");
-            bool isModuleLoad = (bool)AppDomain.CurrentDomain.GetData("IsModuleLoad");
-            Dictionary<string, SessionStateCmdletEntry> cmdlets = null;
-            Dictionary<string, List<SessionStateAliasEntry>> aliases = null;
-            Dictionary<string, SessionStateProviderEntry> providers = null;
-            string throwAwayHelpFile = null;
-            Version assemblyVersion = new Version("0.0.0.0");
-
-            try
-            {
-                Assembly assembly = null;
-
-                try
-                {
-                    // If this is a fully-qualified search, load it from the file
-                    if (Path.IsPathRooted(path))
-                    {
-                        assembly = InitialSessionState.LoadAssemblyFromFile(path);
-                    }
-                    else
-                    {
-                        // Otherwise, load it from the GAC
-                        Exception ignored = null;
-                        assembly = ExecutionContext.LoadAssembly(path, null, out ignored);
-                    }
-
-                    if (assembly != null)
-                    {
-                        assemblyVersion = GetAssemblyVersionNumber(assembly);
-                    }
-                }
-                // Catch-all OK, analyzing user code.
-                catch (Exception)
-                {
-                }
-
-                if (assembly != null)
-                {
-                    PSSnapInHelpers.AnalyzePSSnapInAssembly(assembly, assembly.Location, null, null, isModuleLoad, out cmdlets, out aliases, out providers, out throwAwayHelpFile);
-                }
-            }
-            // Catch-all OK, analyzing user code.
-            catch (Exception)
-            {
-            }
-
-            List<string> detectedCmdlets = new List<string>();
-            List<Tuple<string, string>> detectedAliases = new List<Tuple<string, string>>();
-
-            if (cmdlets != null)
-            {
-                foreach (SessionStateCmdletEntry cmdlet in cmdlets.Values)
-                {
-                    detectedCmdlets.Add(cmdlet.Name);
-                }
-            }
-
-            if (aliases != null)
-            {
-                foreach (List<SessionStateAliasEntry> aliasList in aliases.Values)
-                {
-                    foreach (SessionStateAliasEntry alias in aliasList)
-                    {
-                        detectedAliases.Add(new Tuple<string, string>(alias.Name, alias.Definition));
-                    }
-                }
-            }
-
-            AppDomain.CurrentDomain.SetData("DetectedCmdlets", detectedCmdlets);
-            AppDomain.CurrentDomain.SetData("DetectedAliases", detectedAliases);
-            AppDomain.CurrentDomain.SetData("AssemblyVersion", assemblyVersion);
-        }
-#endif
 
         // Analyzes a script module implementation for its exports.
         private static readonly Dictionary<string, PSModuleInfo> s_scriptAnalysisCache = new Dictionary<string, PSModuleInfo>();
@@ -6435,7 +6405,7 @@ private PSModuleInfo AnalyzeScriptFile(string filename, bool force, ExecutionCon
 
                 // If this has an extension, and it's a relative path,
                 // then we need to ensure it's a fully-qualified path
-                if ((moduleToProcess.IndexOfAny(Path.GetInvalidPathChars()) == -1) &&
+                if ((!PathUtils.ContainsInvalidPathChars(moduleToProcess)) &&
                     Path.HasExtension(moduleToProcess) &&
                     (!Path.IsPathRooted(moduleToProcess)))
                 {
@@ -6524,7 +6494,7 @@ private PSModuleInfo AnalyzeScriptFile(string filename, bool force, ExecutionCon
         /// <summary>
         /// Load a binary module. A binary module is an assembly that should contain cmdlets.
         /// </summary>
-        /// <param name="trySnapInName">If true, then the registered snapins will also be searched when loading.</param>
+        /// <param name="parentModule">The parent module for which this module is a nested module.</param>
         /// <param name="moduleName">The name of the snapin or assembly to load.</param>
         /// <param name="fileName">The path to the assembly to load.</param>
         /// <param name="assemblyToLoad">The assembly to load so no lookup need be done.</param>
@@ -6536,13 +6506,11 @@ private PSModuleInfo AnalyzeScriptFile(string filename, bool force, ExecutionCon
         /// </param>
         /// <param name="options">The set of options that are used while importing a module.</param>
         /// <param name="manifestProcessingFlags">The manifest processing flags to use when processing the module.</param>
-        /// <param name="loadTypes">Load the types files mentioned in the snapin registration.</param>
-        /// <param name="loadFormats">Load the formst files mentioned in the snapin registration.</param>
         /// <param name="prefix">Command name prefix.</param>
         /// <param name="found">Sets this to true if an assembly was found.</param>
         /// <returns>THe module info object that was created...</returns>
         internal PSModuleInfo LoadBinaryModule(
-            bool trySnapInName,
+            PSModuleInfo parentModule,
             string moduleName,
             string fileName,
             Assembly assemblyToLoad,
@@ -6551,13 +6519,10 @@ internal PSModuleInfo LoadBinaryModule(
             ImportModuleOptions options,
             ManifestProcessingFlags manifestProcessingFlags,
             string prefix,
-            bool loadTypes,
-            bool loadFormats,
             out bool found)
         {
             return LoadBinaryModule(
-                parentModule: null,
-                trySnapInName,
+                parentModule,
                 moduleName,
                 fileName,
                 assemblyToLoad,
@@ -6566,8 +6531,6 @@ internal PSModuleInfo LoadBinaryModule(
                 options,
                 manifestProcessingFlags,
                 prefix,
-                loadTypes,
-                loadFormats,
                 out found,
                 shortModuleName: null,
                 disableFormatUpdates: false);
@@ -6577,7 +6540,6 @@ internal PSModuleInfo LoadBinaryModule(
         /// Load a binary module. A binary module is an assembly that should contain cmdlets.
         /// </summary>
         /// <param name="parentModule">The parent module for which this module is a nested module.</param>
-        /// <param name="trySnapInName">If true, then the registered snapins will also be searched when loading.</param>
         /// <param name="moduleName">The name of the snapin or assembly to load.</param>
         /// <param name="fileName">The path to the assembly to load.</param>
         /// <param name="assemblyToLoad">The assembly to load so no lookup need be done.</param>
@@ -6590,15 +6552,12 @@ internal PSModuleInfo LoadBinaryModule(
         /// <param name="options">The set of options that are used while importing a module.</param>
         /// <param name="manifestProcessingFlags">The manifest processing flags to use when processing the module.</param>
         /// <param name="prefix">Command name prefix.</param>
-        /// <param name="loadTypes">Load the types files mentioned in the snapin registration.</param>
-        /// <param name="loadFormats">Load the formst files mentioned in the snapin registration.</param>
         /// <param name="found">Sets this to true if an assembly was found.</param>
         /// <param name="shortModuleName">Short name for module.</param>
         /// <param name="disableFormatUpdates"></param>
         /// <returns>THe module info object that was created...</returns>
         internal PSModuleInfo LoadBinaryModule(
             PSModuleInfo parentModule,
-            bool trySnapInName,
             string moduleName,
             string fileName,
             Assembly assemblyToLoad,
@@ -6607,45 +6566,36 @@ internal PSModuleInfo LoadBinaryModule(
             ImportModuleOptions options,
             ManifestProcessingFlags manifestProcessingFlags,
             string prefix,
-            bool loadTypes,
-            bool loadFormats,
             out bool found,
             string shortModuleName,
             bool disableFormatUpdates)
         {
-            PSModuleInfo module = null;
-
             if (string.IsNullOrEmpty(moduleName) && string.IsNullOrEmpty(fileName) && assemblyToLoad == null)
+            {
                 throw PSTraceSource.NewArgumentNullException("moduleName,fileName,assemblyToLoad");
+            }
+
+            bool isParentEngineModule = parentModule != null && InitialSessionState.IsEngineModule(parentModule.Name);
 
             // Load the dll and process any cmdlets it might contain...
             InitialSessionState iss = InitialSessionState.Create();
             List<string> detectedCmdlets = null;
             List<Tuple<string, string>> detectedAliases = null;
             Assembly assembly = null;
-            Exception error = null;
-            bool importSuccessful = false;
             string modulePath = string.Empty;
             Version assemblyVersion = new Version(0, 0, 0, 0);
-            var importingModule = (manifestProcessingFlags & ManifestProcessingFlags.LoadElements) != 0;
+            bool importingModule = (manifestProcessingFlags & ManifestProcessingFlags.LoadElements) != 0;
 
             // See if we're loading a straight assembly...
             if (assemblyToLoad != null)
             {
                 // Figure out what to use for a module path...
-                if (!string.IsNullOrEmpty(fileName))
-                {
-                    modulePath = fileName;
-                }
-                else
-                {
-                    modulePath = assemblyToLoad.Location;
-                }
+                modulePath = string.IsNullOrEmpty(fileName) ? assemblyToLoad.Location : fileName;
 
                 // And what to use for a module name...
                 if (string.IsNullOrEmpty(moduleName))
                 {
-                    moduleName = "dynamic_code_module_" + assemblyToLoad.GetName();
+                    moduleName = "dynamic_code_module_" + assemblyToLoad.FullName;
                 }
 
                 if (importingModule)
@@ -6653,191 +6603,73 @@ internal PSModuleInfo LoadBinaryModule(
                     // Passing module as a parameter here so that the providers can have the module property populated.
                     // For engine providers, the module should point to top-level module name
                     // For FileSystem, the module is Microsoft.PowerShell.Core and not System.Management.Automation
-                    if (parentModule != null && InitialSessionState.IsEngineModule(parentModule.Name))
-                    {
-                        iss.ImportCmdletsFromAssembly(assemblyToLoad, parentModule);
-                    }
-                    else
-                    {
-                        iss.ImportCmdletsFromAssembly(assemblyToLoad, null);
-                    }
+                    iss.ImportCmdletsFromAssembly(assemblyToLoad, isParentEngineModule ? parentModule : null);
                 }
 
                 assemblyVersion = GetAssemblyVersionNumber(assemblyToLoad);
                 assembly = assemblyToLoad;
-                // If this is an in-memory only assembly, add it directly to the assembly cache if
-                // it isn't already there.
-                if (string.IsNullOrEmpty(assembly.Location))
-                {
-                    if (!Context.AssemblyCache.ContainsKey(assembly.FullName))
-                    {
-                        Context.AssemblyCache.Add(assembly.FullName, assembly);
-                    }
-                }
+
+                // Use the parent module name for caching if there is one.
+                string source = parentModule?.Name ?? moduleName;
+                // Add it to the assembly cache if it isn't already there.
+                Context.AddToAssemblyCache(source, assembly);
             }
-            else
+            else if (importingModule)
             {
-                // Avoid trying to import a PowerShell assembly as Snapin as it results in PSArgumentException
-                if ((moduleName != null) && Utils.IsPowerShellAssembly(moduleName))
-                {
-                    trySnapInName = false;
-                }
+                // Use the parent module name for caching if there is one.
+                string source = parentModule?.Name ?? moduleName;
+                assembly = Context.AddAssembly(source, moduleName, fileName, out Exception error);
 
-                if (trySnapInName && PSSnapInInfo.IsPSSnapinIdValid(moduleName))
+                if (assembly == null)
                 {
-                    PSSnapInInfo snapin = null;
-
-#if !CORECLR
-                    // Avoid trying to load SnapIns with Import-Module
-                    PSSnapInException warning;
-                    try
+                    if (error != null)
                     {
-                        if (importingModule)
-                        {
-                            snapin = iss.ImportPSSnapIn(moduleName, out warning);
-                        }
-                    }
-                    catch (PSArgumentException)
-                    {
-                        // BUGBUG - brucepay - probably want to have a verbose message here...
+                        throw error;
                     }
-#endif
-
-                    if (snapin != null)
-                    {
-                        importSuccessful = true;
-                        if (string.IsNullOrEmpty(fileName))
-                            modulePath = snapin.AbsoluteModulePath;
-                        else
-                            modulePath = fileName;
-                        assemblyVersion = snapin.Version;
-                        // If we're not supposed to load the types files from the snapin
-                        // clear the iss member
-                        if (!loadTypes)
-                        {
-                            iss.Types.Reset();
-                        }
-                        // If we're not supposed to load the format files from the snapin,
-                        // clear the iss member
-                        if (!loadFormats)
-                        {
-                            iss.Formats.Reset();
-                        }
 
-                        foreach (var a in ClrFacade.GetAssemblies())
-                        {
-                            if (a.GetName().FullName.Equals(snapin.AssemblyName, StringComparison.Ordinal))
-                            {
-                                assembly = a;
-                                break;
-                            }
-                        }
-                    }
+                    found = false;
+                    return null;
                 }
 
-                if (!importSuccessful)
-                {
-                    if (importingModule)
-                    {
-                        assembly = Context.AddAssembly(moduleName, fileName, out error);
-
-                        if (assembly == null)
-                        {
-                            if (error != null)
-                                throw error;
-
-                            found = false;
-                            return null;
-                        }
-
-                        assemblyVersion = GetAssemblyVersionNumber(assembly);
+                assemblyVersion = GetAssemblyVersionNumber(assembly);
+                modulePath = string.IsNullOrEmpty(fileName) ? assembly.Location : fileName;
 
-                        if (string.IsNullOrEmpty(fileName))
-                            modulePath = assembly.Location;
-                        else
-                            modulePath = fileName;
-
-                        // Passing module as a parameter here so that the providers can have the module property populated.
-                        // For engine providers, the module should point to top-level module name
-                        // For FileSystem, the module is Microsoft.PowerShell.Core and not System.Management.Automation
-                        if (parentModule != null && InitialSessionState.IsEngineModule(parentModule.Name))
-                        {
-                            iss.ImportCmdletsFromAssembly(assembly, parentModule);
-                        }
-                        else
-                        {
-                            iss.ImportCmdletsFromAssembly(assembly, null);
-                        }
-                    }
-                    else
-                    {
-                        string binaryPath = fileName;
-                        modulePath = fileName;
-                        if (binaryPath == null)
-                        {
-                            binaryPath = System.IO.Path.Combine(moduleBase, moduleName);
-                        }
+                // Passing module as a parameter here so that the providers can have the module property populated.
+                // For engine providers, the module should point to top-level module name
+                // For FileSystem, the module is Microsoft.PowerShell.Core and not System.Management.Automation
+                iss.ImportCmdletsFromAssembly(assembly, isParentEngineModule ? parentModule : null);
+            }
+            else
+            {
+                string binaryPath = fileName;
+                modulePath = fileName;
+                binaryPath ??= System.IO.Path.Combine(moduleBase, moduleName);
 
-                        BinaryAnalysisResult analysisResult = GetCmdletsFromBinaryModuleImplementation(binaryPath, manifestProcessingFlags, out assemblyVersion);
-                        detectedCmdlets = analysisResult.DetectedCmdlets;
-                        detectedAliases = analysisResult.DetectedAliases;
-                    }
-                }
+                BinaryAnalysisResult analysisResult = GetCmdletsFromBinaryModuleImplementation(binaryPath, manifestProcessingFlags, out assemblyVersion);
+                detectedCmdlets = analysisResult.DetectedCmdlets;
+                detectedAliases = analysisResult.DetectedAliases;
             }
 
             found = true;
-            if (string.IsNullOrEmpty(shortModuleName))
-                module = new PSModuleInfo(moduleName, modulePath, Context, ss);
-            else
-                module = new PSModuleInfo(shortModuleName, modulePath, Context, ss);
+            string nameToUse = string.IsNullOrEmpty(shortModuleName) ? moduleName : shortModuleName;
+            PSModuleInfo module = new PSModuleInfo(nameToUse, modulePath, Context, ss);
 
             module.SetModuleType(ModuleType.Binary);
             module.SetModuleBase(moduleBase);
             module.SetVersion(assemblyVersion);
-            module.ImplementingAssembly = assemblyToLoad ?? assembly;
+            module.ImplementingAssembly = assembly;
 
             if (importingModule)
             {
                 SetModuleLoggingInformation(module);
             }
 
-            // Add the types table entries
-            List<string> typesFileNames = new List<string>();
-            foreach (SessionStateTypeEntry sste in iss.Types)
-            {
-                typesFileNames.Add(sste.FileName);
-            }
-
-            if (typesFileNames.Count > 0)
-            {
-                module.SetExportedTypeFiles(new ReadOnlyCollection<string>(typesFileNames));
-            }
-
-            // Add the format file entries
-            List<string> formatsFileNames = new List<string>();
-            foreach (SessionStateFormatEntry ssfe in iss.Formats)
-            {
-                formatsFileNames.Add(ssfe.FileName);
-            }
-
-            if (formatsFileNames.Count > 0)
-            {
-                module.SetExportedFormatFiles(new ReadOnlyCollection<string>(formatsFileNames));
-            }
-
             // Add the module info the providers...
             foreach (SessionStateProviderEntry sspe in iss.Providers)
             {
                 // For engine providers, the module should point to top-level module name
                 // For FileSystem, the module is Microsoft.PowerShell.Core and not System.Management.Automation
-                if (parentModule != null && InitialSessionState.IsEngineModule(parentModule.Name))
-                {
-                    sspe.SetModule(parentModule);
-                }
-                else
-                {
-                    sspe.SetModule(module);
-                }
+                sspe.SetModule(isParentEngineModule ? parentModule : module);
             }
 
             // Add all of the exported cmdlets to the module object...
@@ -6951,16 +6783,7 @@ internal PSModuleInfo LoadBinaryModule(
                     iss.Bind(Context, updateOnly: true, module, options.NoClobber, options.Local, setLocation: false);
 
                     // Scan all of the types in the assembly to register JobSourceAdapters.
-                    IEnumerable<Type> allTypes = Array.Empty<Type>();
-                    if (assembly != null)
-                    {
-                        allTypes = assembly.ExportedTypes;
-                    }
-                    else if (assemblyToLoad != null)
-                    {
-                        allTypes = assemblyToLoad.ExportedTypes;
-                    }
-
+                    IEnumerable<Type> allTypes = assembly?.ExportedTypes ?? Array.Empty<Type>();
                     foreach (Type type in allTypes)
                     {
                         // If it derives from JobSourceAdapter and it's not already registered, register it...
@@ -7150,17 +6973,7 @@ internal static void AddModuleToModuleTables(ExecutionContext context, SessionSt
                 targetSessionState.ModuleTableKeys.Add(moduleTableKey);
             }
 
-            if (targetSessionState.Module != null)
-            {
-                targetSessionState.Module.AddNestedModule(module);
-            }
-
-            var privateDataHashTable = module.PrivateData as Hashtable;
-            if (!context.Modules.IsImplicitRemotingModuleLoaded &&
-                privateDataHashTable != null && privateDataHashTable.ContainsKey("ImplicitRemoting"))
-            {
-                context.Modules.IsImplicitRemotingModuleLoaded = true;
-            }
+            targetSessionState.Module?.AddNestedModule(module);
         }
 
         /// <summary>
@@ -7462,6 +7275,9 @@ private static void ImportFunctions(FunctionInfo func, SessionStateInternal targ
                     CommandOrigin.Internal,
                     targetSessionState.ExecutionContext);
 
+                // Note that the module 'func' and the function table 'functionInfo' instances are now linked
+                // together (see 'CopiedCommand' in CommandInfo class), so setting visibility on one also
+                // sets it on the other.
                 SetCommandVisibility(isImportModulePrivate, functionInfo);
                 functionInfo.Module = sourceModule;
 
@@ -7611,29 +7427,6 @@ private static void ValidateCommandName(ModuleCmdletBase cmdlet,
             }
         }
 
-        /// <summary>
-        /// Search a PSSnapin with the specified name.
-        /// </summary>
-        internal static PSSnapInInfo GetEngineSnapIn(ExecutionContext context, string name)
-        {
-            HashSet<PSSnapInInfo> snapinSet = new HashSet<PSSnapInInfo>();
-            List<CmdletInfo> cmdlets = context.SessionState.InvokeCommand.GetCmdlets();
-            foreach (CmdletInfo cmdlet in cmdlets)
-            {
-                PSSnapInInfo snapin = cmdlet.PSSnapIn;
-                if (snapin != null && !snapinSet.Contains(snapin))
-                    snapinSet.Add(snapin);
-            }
-
-            foreach (PSSnapInInfo snapin in snapinSet)
-            {
-                if (string.Equals(snapin.Name, name, StringComparison.OrdinalIgnoreCase))
-                    return snapin;
-            }
-
-            return null;
-        }
-
         /// <summary>
         /// Returns the context cached ModuleTable module for import only if found and has safe language boundaries while
         /// exporting all functions by default.
@@ -7646,7 +7439,7 @@ internal static PSSnapInInfo GetEngineSnapIn(ExecutionContext context, string na
         ///
         /// Note that module loading order is important with this check when the system is *locked down with DeviceGuard*.
         /// If a submodule that does not explicitly export any functions is imported from the command line, its useless
-        /// because no functions are exported (default fn export is explictly disallowed on locked down systems).
+        /// because no functions are exported (default fn export is explicitly disallowed on locked down systems).
         /// But if a parentmodule that imports the submodule is then imported, it will get the useless version of the
         /// module from the ModuleTable and the parent module will not work.
         ///   $mSub = import-module SubModule  # No functions exported, useless
@@ -7654,7 +7447,7 @@ internal static PSSnapInInfo GetEngineSnapIn(ExecutionContext context, string na
         ///   $mParent.DoSomething  # This will likely be broken because SubModule functions are not accessible
         /// But this is not a realistic scenario because SubModule is useless with DeviceGuard lock down and must explicitly
         /// export its functions to become useful, at which point this check is no longer in effect and there is no issue.
-        ///   $mSub = import-module SubModule  # Explictly exports functions, useful
+        ///   $mSub = import-module SubModule  # Explicitly exports functions, useful
         ///   $mParent = import-module ParentModule  # This internally imports SubModule
         ///   $mParent.DoSomething  # This works because SubModule functions are exported and accessible.
         /// </summary>
diff --git a/src/System.Management.Automation/engine/Modules/ModuleIntrinsics.cs b/src/System.Management.Automation/engine/Modules/ModuleIntrinsics.cs
index 9d5af609710..538c4775f0a 100644
--- a/src/System.Management.Automation/engine/Modules/ModuleIntrinsics.cs
+++ b/src/System.Management.Automation/engine/Modules/ModuleIntrinsics.cs
@@ -10,9 +10,7 @@
 using System.Management.Automation.Language;
 using System.Text;
 using System.Threading;
-
 using Microsoft.PowerShell.Commands;
-using Microsoft.Win32;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -39,30 +37,25 @@ public class ModuleIntrinsics
         private static readonly string s_windowsPowerShellPSHomeModulePath =
             Path.Combine(System.Environment.SystemDirectory, "WindowsPowerShell", "v1.0", "Modules");
 
+        static ModuleIntrinsics()
+        {
+            // Initialize the module path.
+            SetModulePath();
+        }
+
         internal ModuleIntrinsics(ExecutionContext context)
         {
             _context = context;
-
-            // And initialize the module path...
-            SetModulePath();
+            ModuleTable = new Dictionary<string, PSModuleInfo>(StringComparer.OrdinalIgnoreCase);
         }
 
         private readonly ExecutionContext _context;
 
         // Holds the module collection...
-        internal Dictionary<string, PSModuleInfo> ModuleTable { get; } = new Dictionary<string, PSModuleInfo>(StringComparer.OrdinalIgnoreCase);
+        internal Dictionary<string, PSModuleInfo> ModuleTable { get; }
 
         private const int MaxModuleNestingDepth = 10;
 
-        /// <summary>
-        /// Gets and sets boolean that indicates when an implicit remoting module is loaded.
-        /// </summary>
-        internal bool IsImplicitRemotingModuleLoaded
-        {
-            get;
-            set;
-        }
-
         internal void IncrementModuleNestingDepth(PSCmdlet cmdlet, string path)
         {
             if (++ModuleNestingDepth > MaxModuleNestingDepth)
@@ -150,10 +143,7 @@ private PSModuleInfo CreateModuleImplementation(string name, string path, object
             // script scope for the ss.
 
             // Allocate the session state instance for this module.
-            if (ss == null)
-            {
-                ss = new SessionState(_context, true, true);
-            }
+            ss ??= new SessionState(_context, true, true);
 
             // Now set up the module's session state to be the current session state
             SessionStateInternal oldSessionState = _context.EngineSessionState;
@@ -188,11 +178,9 @@ private PSModuleInfo CreateModuleImplementation(string name, string path, object
 
                         sb.SessionState = ss;
                     }
-                    else
+                    else if (moduleCode is string sbText)
                     {
-                        var sbText = moduleCode as string;
-                        if (sbText != null)
-                            sb = ScriptBlock.Create(_context, sbText);
+                        sb = ScriptBlock.Create(_context, sbText);
                     }
                 }
 
@@ -279,7 +267,7 @@ internal List<PSModuleInfo> GetModules(string[] patterns, bool all)
 
         internal List<PSModuleInfo> GetExactMatchModules(string moduleName, bool all, bool exactMatch)
         {
-            if (moduleName == null) { moduleName = string.Empty; }
+            moduleName ??= string.Empty;
 
             return GetModuleCore(new string[] { moduleName }, all, exactMatch);
         }
@@ -296,10 +284,7 @@ private List<PSModuleInfo> GetModuleCore(string[] patterns, bool all, bool exact
             }
             else
             {
-                if (patterns == null)
-                {
-                    patterns = new string[] { "*" };
-                }
+                patterns ??= new string[] { "*" };
 
                 foreach (string pattern in patterns)
                 {
@@ -358,7 +343,7 @@ private List<PSModuleInfo> GetModuleCore(string[] patterns, bool all, bool exact
                 }
             }
 
-            return modulesMatched.OrderBy(m => m.Name).ToList();
+            return modulesMatched.OrderBy(static m => m.Name).ToList();
         }
 
         internal List<PSModuleInfo> GetModules(ModuleSpecification[] fullyQualifiedName, bool all)
@@ -417,7 +402,7 @@ internal List<PSModuleInfo> GetModules(ModuleSpecification[] fullyQualifiedName,
                 }
             }
 
-            return modulesMatched.OrderBy(m => m.Name).ToList();
+            return modulesMatched.OrderBy(static m => m.Name).ToList();
         }
 
         /// <summary>
@@ -730,7 +715,7 @@ internal static bool MatchesModulePath(string modulePath, string requiredPath)
             string moduleDirPath = Path.GetDirectoryName(modulePath);
 
             // The module itself may be in a versioned directory (case 3)
-            if (Version.TryParse(Path.GetFileName(moduleDirPath), out Version unused))
+            if (Version.TryParse(Path.GetFileName(moduleDirPath), out _))
             {
                 moduleDirPath = Path.GetDirectoryName(moduleDirPath);
             }
@@ -874,7 +859,10 @@ internal static ExperimentalFeature[] GetExperimentalFeature(string manifestPath
                         foreach (Hashtable feature in features)
                         {
                             string featureName = feature["Name"] as string;
-                            if (string.IsNullOrEmpty(featureName)) { continue; }
+                            if (string.IsNullOrEmpty(featureName))
+                            {
+                                continue;
+                            }
 
                             if (ExperimentalFeature.IsModuleFeatureName(featureName, moduleName))
                             {
@@ -894,25 +882,35 @@ internal static ExperimentalFeature[] GetExperimentalFeature(string manifestPath
         }
 
         // The extensions of all of the files that can be processed with Import-Module, put the ni.dll in front of .dll to have higher priority to be loaded.
-        internal static readonly string[] PSModuleProcessableExtensions = new string[] {
-                            StringLiterals.PowerShellDataFileExtension,
-                            StringLiterals.PowerShellScriptFileExtension,
-                            StringLiterals.PowerShellModuleFileExtension,
-                            StringLiterals.PowerShellCmdletizationFileExtension,
-                            StringLiterals.PowerShellNgenAssemblyExtension,
-                            StringLiterals.PowerShellILAssemblyExtension,
-                            StringLiterals.PowerShellILExecutableExtension,
-                        };
+        internal static readonly string[] PSModuleProcessableExtensions = new string[]
+        {
+            StringLiterals.PowerShellDataFileExtension,
+            StringLiterals.PowerShellScriptFileExtension,
+            StringLiterals.PowerShellModuleFileExtension,
+            StringLiterals.PowerShellCmdletizationFileExtension,
+            StringLiterals.PowerShellNgenAssemblyExtension,
+            StringLiterals.PowerShellILAssemblyExtension,
+            StringLiterals.PowerShellILExecutableExtension,
+        };
 
         // A list of the extensions to check for implicit module loading and discovery, put the ni.dll in front of .dll to have higher priority to be loaded.
-        internal static readonly string[] PSModuleExtensions = new string[] {
-                            StringLiterals.PowerShellDataFileExtension,
-                            StringLiterals.PowerShellModuleFileExtension,
-                            StringLiterals.PowerShellCmdletizationFileExtension,
-                            StringLiterals.PowerShellNgenAssemblyExtension,
-                            StringLiterals.PowerShellILAssemblyExtension,
-                            StringLiterals.PowerShellILExecutableExtension,
-                        };
+        internal static readonly string[] PSModuleExtensions = new string[]
+        {
+            StringLiterals.PowerShellDataFileExtension,
+            StringLiterals.PowerShellModuleFileExtension,
+            StringLiterals.PowerShellCmdletizationFileExtension,
+            StringLiterals.PowerShellNgenAssemblyExtension,
+            StringLiterals.PowerShellILAssemblyExtension,
+            StringLiterals.PowerShellILExecutableExtension,
+        };
+
+        // A list of the extensions to check for required assemblies.
+        internal static readonly string[] ProcessableAssemblyExtensions = new string[]
+        {
+            StringLiterals.PowerShellNgenAssemblyExtension,
+            StringLiterals.PowerShellILAssemblyExtension,
+            StringLiterals.PowerShellILExecutableExtension
+        };
 
         /// <summary>
         /// Returns true if the extension is one of the module extensions...
@@ -924,7 +922,9 @@ internal static bool IsPowerShellModuleExtension(string extension)
             foreach (string ext in PSModuleProcessableExtensions)
             {
                 if (extension.Equals(ext, StringComparison.OrdinalIgnoreCase))
+                {
                     return true;
+                }
             }
 
             return false;
@@ -967,7 +967,10 @@ internal static string GetPersonalModulePath()
 #if UNIX
             return Platform.SelectProductNameForDirectory(Platform.XDG_Type.USER_MODULES);
 #else
-            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Utils.ModuleDirectory);
+            string myDocumentsPath = InternalTestHooks.SetMyDocumentsSpecialFolderToBlank
+                ? string.Empty
+                : Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments, Environment.SpecialFolderOption.DoNotVerify);
+            return string.IsNullOrEmpty(myDocumentsPath) ? null : Path.Combine(myDocumentsPath, Utils.ModuleDirectory);
 #endif
         }
 
@@ -985,20 +988,17 @@ internal static string GetPSHomeModulePath()
             try
             {
                 string psHome = Utils.DefaultPowerShellAppBase;
-                if (!string.IsNullOrEmpty(psHome))
-                {
-                    // Win8: 584267 Powershell Modules are listed twice in x86, and cannot be removed
-                    // This happens because ModuleTable uses Path as the key and CBS installer
-                    // expands the path to include "SysWOW64" (for
-                    // HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\3\PowerShellEngine ApplicationBase).
-                    // Because of this, the module that is getting loaded during startup (through LocalRunspace)
-                    // is using "SysWow64" in the key. Later, when Import-Module is called, it loads the
-                    // module using ""System32" in the key.
 #if !UNIX
-                    psHome = psHome.ToLowerInvariant().Replace("\\syswow64\\", "\\system32\\");
+                // Win8: 584267 Powershell Modules are listed twice in x86, and cannot be removed.
+                // This happens because 'ModuleTable' uses Path as the key and x86 WinPS has "SysWOW64" in its $PSHOME.
+                // Because of this, the module that is getting loaded during startup (through LocalRunspace) is using
+                // "SysWow64" in the key. Later, when 'Import-Module' is called, it loads the module using ""System32"
+                // in the key.
+                // For the cross-platform PowerShell, a user can choose to install it under "C:\Windows\SysWOW64", and
+                // thus it may have the same problem as described above. So we keep this line of code.
+                psHome = psHome.ToLowerInvariant().Replace(@"\syswow64\", @"\system32\");
 #endif
-                    Interlocked.CompareExchange(ref s_psHomeModulePath, Path.Combine(psHome, "Modules"), null);
-                }
+                Interlocked.CompareExchange(ref s_psHomeModulePath, Path.Combine(psHome, "Modules"), null);
             }
             catch (System.Security.SecurityException)
             {
@@ -1085,86 +1085,118 @@ internal static string GetExpandedEnvironmentVariable(string name, EnvironmentVa
         }
 
         /// <summary>
-        /// Checks if a particular string (path) is a member of 'combined path' string (like %Path% or %PSModulePath%)
+        /// Adds paths to a 'combined path' string (like %Path% or %PSModulePath%) if they are not already there.
         /// </summary>
-        /// <param name="pathToScan">'Combined path' string to analyze; can not be null.</param>
-        /// <param name="pathToLookFor">Path to search for; can not be another 'combined path' (semicolon-separated); can not be null.</param>
-        /// <returns>Index of pathToLookFor in pathToScan; -1 if not found.</returns>
-        private static int PathContainsSubstring(string pathToScan, string pathToLookFor)
+        /// <param name="basePath">Path string (like %Path% or %PSModulePath%).</param>
+        /// <param name="pathToAdd">An individual path to add, or multiple paths separated by the path separator character.</param>
+        /// <param name="insertPosition">-1 to append to the end; 0 to insert in the beginning of the string; etc...</param>
+        /// <returns>Result string.</returns>
+        private static string UpdatePath(string basePath, string pathToAdd, ref int insertPosition)
         {
             // we don't support if any of the args are null - parent function should ensure this; empty values are ok
-            Diagnostics.Assert(pathToScan != null, "pathToScan should not be null according to contract of the function");
-            Diagnostics.Assert(pathToLookFor != null, "pathToLookFor should not be null according to contract of the function");
+            Dbg.Assert(basePath != null, "basePath should not be null according to contract of the function");
+            Dbg.Assert(pathToAdd != null, "pathToAdd should not be null according to contract of the function");
+
+            // The 'pathToAdd' could be a 'combined path' (path-separator-separated).
+            string[] newPaths = pathToAdd.Split(
+                Path.PathSeparator,
+                StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
 
-            int pos = 0; // position of the current substring in pathToScan
-            string[] substrings = pathToScan.Split(Utils.Separators.PathSeparator, StringSplitOptions.None); // we want to process empty entries
-            string goodPathToLookFor = pathToLookFor.Trim().TrimEnd(Path.DirectorySeparatorChar); // trailing backslashes and white-spaces will mess up equality comparison
-            foreach (string substring in substrings)
+            if (newPaths.Length is 0)
             {
-                string goodSubstring = substring.Trim().TrimEnd(Path.DirectorySeparatorChar);  // trailing backslashes and white-spaces will mess up equality comparison
+                // The 'pathToAdd' doesn't really contain any paths to add.
+                return basePath;
+            }
 
-                // We have to use equality comparison on individual substrings (as opposed to simple 'string.IndexOf' or 'string.Contains')
-                // because of cases like { pathToScan="C:\Temp\MyDir\MyModuleDir", pathToLookFor="C:\Temp" }
+            var result = new StringBuilder(basePath, capacity: basePath.Length + pathToAdd.Length + newPaths.Length);
+            var addedPaths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+            string[] initialPaths = basePath.Split(
+                Path.PathSeparator,
+                StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
 
-                if (string.Equals(goodSubstring, goodPathToLookFor, StringComparison.OrdinalIgnoreCase))
+            foreach (string p in initialPaths)
+            {
+                // Remove the trailing directory separators.
+                // Trailing white spaces were already removed by 'StringSplitOptions.TrimEntries'.
+                addedPaths.Add(Path.TrimEndingDirectorySeparator(p));
+            }
+
+            foreach (string subPathToAdd in newPaths)
+            {
+                // Remove the trailing directory separators.
+                // Trailing white spaces were already removed by 'StringSplitOptions.TrimEntries'.
+                string normalizedPath = Path.TrimEndingDirectorySeparator(subPathToAdd);
+                if (addedPaths.Contains(normalizedPath))
                 {
-                    return pos; // match found - return index of it in the 'pathToScan' string
+                    // The normalized sub path was already added - skip it.
+                    continue;
+                }
+
+                // The normalized sub path was not found - add it.
+                if (insertPosition is -1 || insertPosition >= result.Length)
+                {
+                    // Append the normalized sub path to the end.
+                    if (result.Length > 0 && result[^1] != Path.PathSeparator)
+                    {
+                        result.Append(Path.PathSeparator);
+                    }
+
+                    result.Append(normalizedPath);
+                    // Next insertion should happen at the end.
+                    insertPosition = result.Length;
                 }
                 else
                 {
-                    pos += substring.Length + 1; // '1' is for trailing semicolon
+                    // Insert at the requested location.
+                    // This is used by the user-specific module path, the shared module path (<Program Files> location), and the PSHome module path.
+                    string strToInsert = normalizedPath + Path.PathSeparator;
+                    result.Insert(insertPosition, strToInsert);
+
+                    // Next insertion should happen after the just inserted string.
+                    insertPosition += strToInsert.Length;
                 }
+
+                // Add it to the set.
+                addedPaths.Add(normalizedPath);
             }
-            // if we are here, that means a match was not found
-            return -1;
+
+            return result.ToString();
         }
 
         /// <summary>
-        /// Adds paths to a 'combined path' string (like %Path% or %PSModulePath%) if they are not already there.
+        /// The available module path scopes.
         /// </summary>
-        /// <param name="basePath">Path string (like %Path% or %PSModulePath%).</param>
-        /// <param name="pathToAdd">Collection of individual paths to add.</param>
-        /// <param name="insertPosition">-1 to append to the end; 0 to insert in the beginning of the string; etc...</param>
-        /// <returns>Result string.</returns>
-        private static string AddToPath(string basePath, string pathToAdd, int insertPosition)
+        public enum PSModulePathScope
         {
-            // we don't support if any of the args are null - parent function should ensure this; empty values are ok
-            Diagnostics.Assert(basePath != null, "basePath should not be null according to contract of the function");
-            Diagnostics.Assert(pathToAdd != null, "pathToAdd should not be null according to contract of the function");
+            /// <summary>The users module path.</summary>
+            User,
 
-            StringBuilder result = new StringBuilder(basePath);
+            /// <summary>The Builtin module path. This is where PowerShell is installed (PSHOME).</summary>
+            Builtin,
 
-            if (!string.IsNullOrEmpty(pathToAdd)) // we don't want to append empty paths
-            {
-                foreach (string subPathToAdd in pathToAdd.Split(Utils.Separators.PathSeparator, StringSplitOptions.RemoveEmptyEntries)) // in case pathToAdd is a 'combined path' (semicolon-separated)
-                {
-                    int position = PathContainsSubstring(result.ToString(), subPathToAdd); // searching in effective 'result' value ensures that possible duplicates in pathsToAdd are handled correctly
-                    if (position == -1) // subPathToAdd not found - add it
-                    {
-                        if (insertPosition == -1) // append subPathToAdd to the end
-                        {
-                            bool endsWithPathSeparator = false;
-                            if (result.Length > 0) endsWithPathSeparator = (result[result.Length - 1] == Path.PathSeparator);
+            /// <summary>The machine module path. This is the shared location for all users of the system.</summary>
+            Machine
+        }
 
-                            if (endsWithPathSeparator)
-                                result.Append(subPathToAdd);
-                            else
-                                result.Append(Path.PathSeparator + subPathToAdd);
-                        }
-                        else if (insertPosition > result.Length)
-                        {
-                            // handle case where path is a singleton with no path seperator already
-                            result.Append(Path.PathSeparator).Append(subPathToAdd);
-                        }
-                        else // insert at the requested location (this is used by DSC (<Program Files> location) and by 'user-specific location' (SpecialFolder.MyDocuments or EVT.User))
-                        {
-                            result.Insert(insertPosition, subPathToAdd + Path.PathSeparator);
-                        }
-                    }
-                }
+        /// <summary>
+        /// Retrieve the current PSModulePath for the specified scope.
+        /// </summary>
+        /// <param name="scope">The scope of module path to retrieve. This can be User, Builtin, or Machine.</param>
+        /// <returns>The string representing the requested module path type.</returns>
+        public static string GetPSModulePath(PSModulePathScope scope)
+        {
+            if (scope == PSModulePathScope.User)
+            {
+                return GetPersonalModulePath();
+            }
+            else if (scope == PSModulePathScope.Builtin)
+            {
+                return GetPSHomeModulePath();
+            }
+            else
+            {
+                return GetSharedModulePath();
             }
-
-            return result.ToString();
         }
 
         /// <summary>
@@ -1177,7 +1209,7 @@ public static string GetModulePath(string currentProcessModulePath, string hklmM
             string psHomeModulePath = GetPSHomeModulePath(); // $PSHome\Modules location
 
             // If the variable isn't set, then set it to the default value
-            if (currentProcessModulePath == null)  // EVT.Process does Not exist - really corner case
+            if (string.IsNullOrEmpty(currentProcessModulePath))  // EVT.Process does Not exist - really corner case
             {
                 // Handle the default case...
                 if (string.IsNullOrEmpty(hkcuUserModulePath)) // EVT.User does Not exist -> set to <SpecialFolder.MyDocuments> location
@@ -1189,7 +1221,15 @@ public static string GetModulePath(string currentProcessModulePath, string hklmM
                     currentProcessModulePath = hkcuUserModulePath; // = EVT.User
                 }
 
-                currentProcessModulePath += Path.PathSeparator;
+                if (string.IsNullOrEmpty(currentProcessModulePath))
+                {
+                    currentProcessModulePath ??= string.Empty;
+                }
+                else
+                {
+                    currentProcessModulePath += Path.PathSeparator;
+                }
+
                 if (string.IsNullOrEmpty(hklmMachineModulePath)) // EVT.Machine does Not exist
                 {
                     currentProcessModulePath += CombineSystemModulePaths(); // += (SharedModulePath + $PSHome\Modules)
@@ -1210,11 +1250,12 @@ public static string GetModulePath(string currentProcessModulePath, string hklmM
                 // personalModulePath
                 // sharedModulePath
                 // systemModulePath
-                currentProcessModulePath = AddToPath(currentProcessModulePath, personalModulePathToUse, 0);
-                int insertIndex = PathContainsSubstring(currentProcessModulePath, personalModulePathToUse) + personalModulePathToUse.Length + 1;
-                currentProcessModulePath = AddToPath(currentProcessModulePath, sharedModulePath, insertIndex);
-                insertIndex = PathContainsSubstring(currentProcessModulePath, sharedModulePath) + sharedModulePath.Length + 1;
-                currentProcessModulePath = AddToPath(currentProcessModulePath, systemModulePathToUse, insertIndex);
+
+                int insertIndex = 0;
+
+                currentProcessModulePath = UpdatePath(currentProcessModulePath, personalModulePathToUse, ref insertIndex);
+                currentProcessModulePath = UpdatePath(currentProcessModulePath, sharedModulePath, ref insertIndex);
+                currentProcessModulePath = UpdatePath(currentProcessModulePath, systemModulePathToUse, ref insertIndex);
             }
 
             return currentProcessModulePath;
@@ -1233,7 +1274,7 @@ internal static string GetModulePath()
 
 #if !UNIX
         /// <summary>
-        /// Returns a PSModulePath suiteable for Windows PowerShell by removing PowerShell's specific
+        /// Returns a PSModulePath suitable for Windows PowerShell by removing PowerShell's specific
         /// paths from current PSModulePath.
         /// </summary>
         /// <returns>
@@ -1258,24 +1299,23 @@ internal static string GetWindowsPowerShellModulePath()
             };
 
             var modulePathList = new List<string>();
-            foreach (var path in currentModulePath.Split(';'))
+            foreach (var path in currentModulePath.Split(';', StringSplitOptions.TrimEntries))
             {
-                var trimmedPath = path.Trim();
-                if (!excludeModulePaths.Contains(trimmedPath))
+                if (!excludeModulePaths.Contains(path))
                 {
                     // make sure this module path is Not part of other PS Core installation
-                    var possiblePwshDir = Path.GetDirectoryName(trimmedPath);
+                    var possiblePwshDir = Path.GetDirectoryName(path);
 
                     if (string.IsNullOrEmpty(possiblePwshDir))
                     {
                         // i.e. module dir is in the drive root
-                        modulePathList.Add(trimmedPath);
+                        modulePathList.Add(path);
                     }
                     else
                     {
                         if (!File.Exists(Path.Combine(possiblePwshDir, "pwsh.dll")))
                         {
-                            modulePathList.Add(trimmedPath);
+                            modulePathList.Add(path);
                         }
                     }
                 }
@@ -1294,11 +1334,16 @@ private static string SetModulePath()
         {
             string currentModulePath = GetExpandedEnvironmentVariable(Constants.PSModulePathEnvVar, EnvironmentVariableTarget.Process);
 #if !UNIX
-            // if the current process and user env vars are the same, it means we need to append the machine one as it's incomplete
-            // otherwise, the user modified it and we should use the process one
+            // if the current process and user env vars are the same, it means we need to append the machine one as it's incomplete.
+            // Otherwise, the user modified it and we should use the process one.
             if (string.CompareOrdinal(GetExpandedEnvironmentVariable(Constants.PSModulePathEnvVar, EnvironmentVariableTarget.User), currentModulePath) == 0)
             {
-                currentModulePath = currentModulePath + Path.PathSeparator + GetExpandedEnvironmentVariable(Constants.PSModulePathEnvVar, EnvironmentVariableTarget.Machine);
+                string machineScopeValue = GetExpandedEnvironmentVariable(Constants.PSModulePathEnvVar, EnvironmentVariableTarget.Machine);
+                currentModulePath = string.IsNullOrEmpty(currentModulePath)
+                    ? machineScopeValue
+                    : string.IsNullOrEmpty(machineScopeValue)
+                        ? currentModulePath
+                        : string.Concat(currentModulePath, Path.PathSeparator, machineScopeValue);
             }
 #endif
             string allUsersModulePath = PowerShellConfig.Instance.GetModulePath(ConfigScope.AllUsers);
@@ -1336,7 +1381,7 @@ internal static IEnumerable<string> GetModulePath(bool includeSystemModulePath,
 
             if (!string.IsNullOrWhiteSpace(modulePathString))
             {
-                foreach (string envPath in modulePathString.Split(Utils.Separators.PathSeparator, StringSplitOptions.RemoveEmptyEntries))
+                foreach (string envPath in modulePathString.Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries))
                 {
                     var processedPath = ProcessOneModulePath(context, envPath, processedPathSet);
                     if (processedPath != null)
@@ -1422,32 +1467,10 @@ private static string ProcessOneModulePath(ExecutionContext context, string envP
             return null;
         }
 
-        /// <summary>
-        /// Removes all functions not belonging to the parent module.
-        /// </summary>
-        /// <param name="module">Parent module.</param>
-        internal static void RemoveNestedModuleFunctions(PSModuleInfo module)
-        {
-            var input = module.SessionState?.Internal?.ExportedFunctions;
-            if ((input == null) || (input.Count == 0))
-            { return; }
-
-            List<FunctionInfo> output = new List<FunctionInfo>(input.Count);
-            foreach (var fnInfo in input)
-            {
-                if (module.Name.Equals(fnInfo.ModuleName, StringComparison.OrdinalIgnoreCase))
-                {
-                    output.Add(fnInfo);
-                }
-            }
-
-            input.Clear();
-            input.AddRange(output);
-        }
-
+#nullable enable
         private static void SortAndRemoveDuplicates<T>(List<T> input, Func<T, string> keyGetter)
         {
-            Dbg.Assert(input != null, "Caller should verify that input != null");
+            Dbg.Assert(input is not null, "Caller should verify that input != null");
 
             input.Sort(
                 (T x, T y) =>
@@ -1458,24 +1481,19 @@ private static void SortAndRemoveDuplicates<T>(List<T> input, Func<T, string> ke
                 }
             );
 
-            bool firstItem = true;
-            string previousKey = null;
-            List<T> output = new List<T>(input.Count);
-            foreach (T item in input)
+            string? previousKey = null;
+            input.RemoveAll(ShouldRemove);
+
+            bool ShouldRemove(T item)
             {
                 string currentKey = keyGetter(item);
-                if ((firstItem) || !currentKey.Equals(previousKey, StringComparison.OrdinalIgnoreCase))
-                {
-                    output.Add(item);
-                }
-
+                bool match = previousKey is not null
+                    && currentKey.Equals(previousKey, StringComparison.OrdinalIgnoreCase);
                 previousKey = currentKey;
-                firstItem = false;
+                return match;
             }
-
-            input.Clear();
-            input.AddRange(output);
         }
+#nullable restore
 
         /// <summary>
         /// Mark stuff to be exported from the current environment using the various patterns.
@@ -1527,7 +1545,7 @@ internal static void ExportModuleMembers(
                     }
                 }
 
-                SortAndRemoveDuplicates(sessionState.ExportedFunctions, (FunctionInfo ci) => ci.Name);
+                SortAndRemoveDuplicates(sessionState.ExportedFunctions, static (FunctionInfo ci) => ci.Name);
             }
 
             if (cmdletPatterns != null)
@@ -1582,7 +1600,7 @@ internal static void ExportModuleMembers(
                     }
                 }
 
-                SortAndRemoveDuplicates(sessionState.Module.CompiledExports, (CmdletInfo ci) => ci.Name);
+                SortAndRemoveDuplicates(sessionState.Module.CompiledExports, static (CmdletInfo ci) => ci.Name);
             }
 
             if (variablePatterns != null)
@@ -1605,7 +1623,7 @@ internal static void ExportModuleMembers(
                     }
                 }
 
-                SortAndRemoveDuplicates(sessionState.ExportedVariables, (PSVariable v) => v.Name);
+                SortAndRemoveDuplicates(sessionState.ExportedVariables, static (PSVariable v) => v.Name);
             }
 
             if (aliasPatterns != null)
@@ -1645,7 +1663,7 @@ internal static void ExportModuleMembers(
                     }
                 }
 
-                SortAndRemoveDuplicates(sessionState.ExportedAliases, (AliasInfo ci) => ci.Name);
+                SortAndRemoveDuplicates(sessionState.ExportedAliases, static (AliasInfo ci) => ci.Name);
             }
         }
 
@@ -1711,10 +1729,11 @@ internal enum ModuleMatchFailure
         /// <summary>Module version was greater than the maximum version.</summary>
         MaximumVersion,
 
-        /// <summary>The module specifcation passed in was null.</summary>
+        /// <summary>The module specification passed in was null.</summary>
         NullModuleSpecification,
     }
 
+#nullable enable
     /// <summary>
     /// Used by Modules/Snapins to provide a hook to the engine for startup initialization
     /// w.r.t compiled assembly loading.
diff --git a/src/System.Management.Automation/engine/Modules/ModuleSpecification.cs b/src/System.Management.Automation/engine/Modules/ModuleSpecification.cs
index 315cf3aaf64..3c06ee856f3 100644
--- a/src/System.Management.Automation/engine/Modules/ModuleSpecification.cs
+++ b/src/System.Management.Automation/engine/Modules/ModuleSpecification.cs
@@ -44,12 +44,10 @@ public ModuleSpecification()
         /// <param name="moduleName">The module name.</param>
         public ModuleSpecification(string moduleName)
         {
-            if (string.IsNullOrEmpty(moduleName))
-            {
-                throw new ArgumentNullException(nameof(moduleName));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(moduleName);
 
             this.Name = moduleName;
+
             // Alias name of miniumVersion
             this.Version = null;
             this.RequiredVersion = null;
@@ -67,10 +65,7 @@ public ModuleSpecification(string moduleName)
         /// <param name="moduleSpecification">The module specification as a hashtable.</param>
         public ModuleSpecification(Hashtable moduleSpecification)
         {
-            if (moduleSpecification == null)
-            {
-                throw new ArgumentNullException(nameof(moduleSpecification));
-            }
+            ArgumentNullException.ThrowIfNull(moduleSpecification);
 
             var exception = ModuleSpecificationInitHelper(this, moduleSpecification);
             if (exception != null)
@@ -130,7 +125,7 @@ internal static Exception ModuleSpecificationInitHelper(ModuleSpecification modu
                 }
             }
             // catch all exceptions here, we are going to report them via return value.
-            // Example of catched exception: one of conversions to Version failed.
+            // Example of caught exception: one of conversions to Version failed.
             catch (Exception e)
             {
                 return e;
@@ -170,13 +165,53 @@ internal static Exception ModuleSpecificationInitHelper(ModuleSpecification modu
             return null;
         }
 
-        internal ModuleSpecification(PSModuleInfo moduleInfo)
+        internal string GetRequiredModuleNotFoundVersionMessage()
         {
-            if (moduleInfo == null)
+            if (RequiredVersion is not null)
             {
-                throw new ArgumentNullException(nameof(moduleInfo));
+                return StringUtil.Format(
+                    Modules.RequiredModuleNotFoundRequiredVersion,
+                    Name,
+                    RequiredVersion);
             }
 
+            bool hasVersion = Version is not null;
+            bool hasMaximumVersion = MaximumVersion is not null;
+
+            if (hasVersion && hasMaximumVersion)
+            {
+                return StringUtil.Format(
+                    Modules.RequiredModuleNotFoundModuleAndMaximumVersion,
+                    Name,
+                    Version,
+                    MaximumVersion);
+            }
+
+            if (hasVersion)
+            {
+                return StringUtil.Format(
+                    Modules.RequiredModuleNotFoundModuleVersion,
+                    Name,
+                    Version);
+            }
+
+            if (hasMaximumVersion)
+            {
+                return StringUtil.Format(
+                    Modules.RequiredModuleNotFoundMaximumVersion,
+                    Name,
+                    MaximumVersion);
+            }
+
+            return StringUtil.Format(
+                Modules.RequiredModuleNotFoundWithoutVersion,
+                Name);
+        }
+
+        internal ModuleSpecification(PSModuleInfo moduleInfo)
+        {
+            ArgumentNullException.ThrowIfNull(moduleInfo);
+
             this.Name = moduleInfo.Name;
             this.Version = moduleInfo.Version;
             this.Guid = moduleInfo.Guid;
diff --git a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs
index b2ee85a1b03..41bf4ac3521 100644
--- a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs
+++ b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs
@@ -13,22 +13,39 @@ namespace System.Management.Automation.Internal
 {
     internal static class ModuleUtils
     {
+        // These are documented members FILE_ATTRIBUTE, they just have not yet been
+        // added to System.IO.FileAttributes yet.
+        private const int FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x400000;
+
+        private const int FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x40000;
+
         // Default option for local file system enumeration:
         //  - Ignore files/directories when access is denied;
         //  - Search top directory only.
         private static readonly System.IO.EnumerationOptions s_defaultEnumerationOptions =
-                                        new System.IO.EnumerationOptions() { AttributesToSkip = FileAttributes.Hidden };
+                                        new System.IO.EnumerationOptions() { AttributesToSkip = FileAttributesToSkip };
+
+        private static readonly FileAttributes FileAttributesToSkip;
 
         // Default option for UNC path enumeration. Same as above plus a large buffer size.
         // For network shares, a large buffer may result in better performance as more results can be batched over the wire.
         // The buffer size 16K is recommended in the comment of the 'BufferSize' property:
         //    "A "large" buffer, for example, would be 16K. Typical is 4K."
         private static readonly System.IO.EnumerationOptions s_uncPathEnumerationOptions =
-                                        new System.IO.EnumerationOptions() { AttributesToSkip = FileAttributes.Hidden, BufferSize = 16384 };
+                                        new System.IO.EnumerationOptions() { AttributesToSkip = FileAttributesToSkip, BufferSize = 16384 };
 
         private static readonly string EnCulturePath = Path.DirectorySeparatorChar + "en";
         private static readonly string EnUsCulturePath = Path.DirectorySeparatorChar + "en-us";
 
+        static ModuleUtils()
+        {
+            FileAttributesToSkip = FileAttributes.Hidden
+                // Skip OneDrive files/directories that are not fully on disk.
+                | FileAttributes.Offline
+                | (FileAttributes)FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
+                | (FileAttributes)FILE_ATTRIBUTE_RECALL_ON_OPEN;
+        }
+
         /// <summary>
         /// Check if a directory is likely a localized resources folder.
         /// </summary>
@@ -81,8 +98,7 @@ internal static IEnumerable<string> GetAllAvailableModuleFiles(string topDirecto
                 string directoryToCheck = directoriesToCheck.Dequeue();
                 try
                 {
-                    string[] subDirectories = Directory.GetDirectories(directoryToCheck, "*", options);
-                    foreach (string toAdd in subDirectories)
+                    foreach (string toAdd in Directory.EnumerateDirectories(directoryToCheck, "*", options))
                     {
                         if (firstSubDirs || !IsPossibleResourceDirectory(toAdd))
                         {
@@ -94,8 +110,7 @@ internal static IEnumerable<string> GetAllAvailableModuleFiles(string topDirecto
                 catch (UnauthorizedAccessException) { }
 
                 firstSubDirs = false;
-                string[] files = Directory.GetFiles(directoryToCheck, "*", options);
-                foreach (string moduleFile in files)
+                foreach (string moduleFile in Directory.EnumerateFiles(directoryToCheck, "*", options))
                 {
                     foreach (string ext in ModuleIntrinsics.PSModuleExtensions)
                     {
@@ -123,7 +138,7 @@ internal static bool IsPSEditionCompatible(
 #if UNIX
             return true;
 #else
-            if (!ModuleUtils.IsOnSystem32ModulePath(moduleManifestPath))
+            if (!IsOnSystem32ModulePath(moduleManifestPath))
             {
                 return true;
             }
@@ -278,6 +293,11 @@ internal static IEnumerable<string> GetDefaultAvailableModuleFiles(string topDir
                     manifestPath += StringLiterals.PowerShellDataFileExtension;
                     if (File.Exists(manifestPath))
                     {
+                        if (HasSkippedFileAttribute(manifestPath))
+                        {
+                            continue;
+                        }
+
                         isModuleDirectory = true;
                         yield return manifestPath;
                     }
@@ -290,6 +310,11 @@ internal static IEnumerable<string> GetDefaultAvailableModuleFiles(string topDir
                         string moduleFile = Path.Combine(directoryToCheck, proposedModuleName) + ext;
                         if (File.Exists(moduleFile))
                         {
+                            if (HasSkippedFileAttribute(moduleFile))
+                            {
+                                continue;
+                            }
+
                             isModuleDirectory = true;
                             yield return moduleFile;
 
@@ -332,14 +357,33 @@ internal static List<Version> GetModuleVersionSubfolders(string moduleBase)
             if (!string.IsNullOrWhiteSpace(moduleBase) && Directory.Exists(moduleBase))
             {
                 var options = Utils.PathIsUnc(moduleBase) ? s_uncPathEnumerationOptions : s_defaultEnumerationOptions;
-                string[] subdirectories = Directory.GetDirectories(moduleBase, "*", options);
+                IEnumerable<string> subdirectories = Directory.EnumerateDirectories(moduleBase, "*", options);
                 ProcessPossibleVersionSubdirectories(subdirectories, versionFolders);
             }
 
             return versionFolders;
         }
 
-        private static void ProcessPossibleVersionSubdirectories(string[] subdirectories, List<Version> versionFolders)
+        private static bool HasSkippedFileAttribute(string path)
+        {
+            try
+            {
+                FileAttributes attributes = File.GetAttributes(path);
+                if ((attributes & FileAttributesToSkip) is not 0)
+                {
+                    return true;
+                }
+            }
+            catch
+            {
+                // Ignore failures so that we keep the current behavior of failing
+                // later in the search.
+            }
+
+            return false;
+        }
+
+        private static void ProcessPossibleVersionSubdirectories(IEnumerable<string> subdirectories, List<Version> versionFolders)
         {
             foreach (string subdir in subdirectories)
             {
@@ -352,7 +396,7 @@ private static void ProcessPossibleVersionSubdirectories(string[] subdirectories
 
             if (versionFolders.Count > 1)
             {
-                versionFolders.Sort((x, y) => y.CompareTo(x));
+                versionFolders.Sort(static (x, y) => y.CompareTo(x));
             }
         }
 
@@ -387,15 +431,15 @@ internal static bool IsOnSystem32ModulePath(string path)
         /// <param name="pattern">Command pattern.</param>
         /// <param name="context">Execution context.</param>
         /// <param name="commandOrigin">Command origin.</param>
+        /// <param name="fuzzyMatcher">Fuzzy matcher to use.</param>
         /// <param name="rediscoverImportedModules">If true, rediscovers imported modules.</param>
         /// <param name="moduleVersionRequired">Specific module version to be required.</param>
         /// <returns>IEnumerable tuple containing the CommandInfo and the match score.</returns>
-        internal static IEnumerable<CommandScore> GetFuzzyMatchingCommands(string pattern, ExecutionContext context, CommandOrigin commandOrigin, bool rediscoverImportedModules = false, bool moduleVersionRequired = false)
+        internal static IEnumerable<CommandScore> GetFuzzyMatchingCommands(string pattern, ExecutionContext context, CommandOrigin commandOrigin, FuzzyMatcher fuzzyMatcher, bool rediscoverImportedModules = false, bool moduleVersionRequired = false)
         {
-            foreach (CommandInfo command in GetMatchingCommands(pattern, context, commandOrigin, rediscoverImportedModules, moduleVersionRequired, useFuzzyMatching: true))
+            foreach (CommandInfo command in GetMatchingCommands(pattern, context, commandOrigin, rediscoverImportedModules, moduleVersionRequired, fuzzyMatcher: fuzzyMatcher))
             {
-                int score = FuzzyMatcher.GetDamerauLevenshteinDistance(command.Name, pattern);
-                if (score <= FuzzyMatcher.MinimumDistance)
+                if (fuzzyMatcher.IsFuzzyMatch(command.Name, pattern, out int score))
                 {
                     yield return new CommandScore(command, score);
                 }
@@ -410,10 +454,10 @@ internal static IEnumerable<CommandScore> GetFuzzyMatchingCommands(string patter
         /// <param name="commandOrigin">Command origin.</param>
         /// <param name="rediscoverImportedModules">If true, rediscovers imported modules.</param>
         /// <param name="moduleVersionRequired">Specific module version to be required.</param>
-        /// <param name="useFuzzyMatching">Use fuzzy matching.</param>
+        /// <param name="fuzzyMatcher">Fuzzy matcher for fuzzy searching.</param>
         /// <param name="useAbbreviationExpansion">Use abbreviation expansion for matching.</param>
         /// <returns>Returns matching CommandInfo IEnumerable.</returns>
-        internal static IEnumerable<CommandInfo> GetMatchingCommands(string pattern, ExecutionContext context, CommandOrigin commandOrigin, bool rediscoverImportedModules = false, bool moduleVersionRequired = false, bool useFuzzyMatching = false, bool useAbbreviationExpansion = false)
+        internal static IEnumerable<CommandInfo> GetMatchingCommands(string pattern, ExecutionContext context, CommandOrigin commandOrigin, bool rediscoverImportedModules = false, bool moduleVersionRequired = false, FuzzyMatcher fuzzyMatcher = null, bool useAbbreviationExpansion = false)
         {
             // Otherwise, if it had wildcards, just return the "AvailableCommand"
             // type of command info.
@@ -437,7 +481,7 @@ internal static IEnumerable<CommandInfo> GetMatchingCommands(string pattern, Exe
                         // 1. We continue to the next module path if we don't want to re-discover those imported modules
                         // 2. If we want to re-discover the imported modules, but one or more commands from the module were made private,
                         //    then we don't do re-discovery
-                        if (!rediscoverImportedModules || modules.Exists(module => module.ModuleHasPrivateMembers))
+                        if (!rediscoverImportedModules || modules.Exists(static module => module.ModuleHasPrivateMembers))
                         {
                             continue;
                         }
@@ -451,7 +495,7 @@ internal static IEnumerable<CommandInfo> GetMatchingCommands(string pattern, Exe
                             foreach (KeyValuePair<string, CommandInfo> entry in psModule.ExportedCommands)
                             {
                                 if (commandPattern.IsMatch(entry.Value.Name) ||
-                                    (useFuzzyMatching && FuzzyMatcher.IsFuzzyMatch(entry.Value.Name, pattern)) ||
+                                    (fuzzyMatcher is not null && fuzzyMatcher.IsFuzzyMatch(entry.Value.Name, pattern)) ||
                                     (useAbbreviationExpansion && string.Equals(pattern, AbbreviateName(entry.Value.Name), StringComparison.OrdinalIgnoreCase)))
                                 {
                                     CommandInfo current = null;
@@ -511,7 +555,7 @@ internal static IEnumerable<CommandInfo> GetMatchingCommands(string pattern, Exe
                         CommandTypes commandTypes = pair.Value;
 
                         if (commandPattern.IsMatch(commandName) ||
-                            (useFuzzyMatching && FuzzyMatcher.IsFuzzyMatch(commandName, pattern)) ||
+                            (fuzzyMatcher is not null && fuzzyMatcher.IsFuzzyMatch(commandName, pattern)) ||
                             (useAbbreviationExpansion && string.Equals(pattern, AbbreviateName(commandName), StringComparison.OrdinalIgnoreCase)))
                         {
                             bool shouldExportCommand = true;
diff --git a/src/System.Management.Automation/engine/Modules/NewModuleCommand.cs b/src/System.Management.Automation/engine/Modules/NewModuleCommand.cs
index d47681166a0..ceb5dd3c2e3 100644
--- a/src/System.Management.Automation/engine/Modules/NewModuleCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/NewModuleCommand.cs
@@ -5,6 +5,7 @@
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.Management.Automation;
+using System.Management.Automation.Security;
 
 //
 // Now define the set of commands for manipulating modules.
@@ -168,15 +169,24 @@ protected override void EndProcessing()
             {
                 // Check ScriptBlock language mode.  If it is different than the context language mode
                 // then throw error since private trusted script functions may be exposed.
-                if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage &&
-                    _scriptBlock.LanguageMode == PSLanguageMode.FullLanguage)
+                if (Context.LanguageMode == PSLanguageMode.ConstrainedLanguage && _scriptBlock.LanguageMode == PSLanguageMode.FullLanguage)
                 {
-                    this.ThrowTerminatingError(
-                        new ErrorRecord(
-                            new PSSecurityException(Modules.CannotCreateModuleWithScriptBlock),
-                            "Modules_CannotCreateModuleWithFullLanguageScriptBlock",
-                            ErrorCategory.SecurityError,
-                            null));
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        this.ThrowTerminatingError(
+                            new ErrorRecord(
+                                new PSSecurityException(Modules.CannotCreateModuleWithScriptBlock),
+                                "Modules_CannotCreateModuleWithFullLanguageScriptBlock",
+                                ErrorCategory.SecurityError,
+                                targetObject: null));
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: Context,
+                        title: Modules.WDACNewModuleCommandLogTitle,
+                        message: Modules.WDACNewModuleCommandLogMessage,
+                        fqid: "NewModuleCmdletWitFullLanguageScriptblockNotAllowed",
+                        dropIntoDebugger: true);
                 }
 
                 string gs = System.Guid.NewGuid().ToString();
diff --git a/src/System.Management.Automation/engine/Modules/NewModuleManifestCommand.cs b/src/System.Management.Automation/engine/Modules/NewModuleManifestCommand.cs
index 30036e035e2..9346e7caa97 100644
--- a/src/System.Management.Automation/engine/Modules/NewModuleManifestCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/NewModuleManifestCommand.cs
@@ -160,7 +160,7 @@ public string Description
         [Parameter]
         public ProcessorArchitecture ProcessorArchitecture
         {
-            get { return _processorArchitecture.HasValue ? _processorArchitecture.Value : ProcessorArchitecture.None; }
+            get { return _processorArchitecture ?? ProcessorArchitecture.None; }
 
             set { _processorArchitecture = value; }
         }
@@ -886,14 +886,12 @@ private List<string> TryResolveFilePath(string filePath)
         /// <returns></returns>
         private string ManifestFragment(string key, string resourceString, string value, StreamWriter streamWriter)
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0}# {1}{2}{0}{3:19} = {4}{2}{2}",
-                _indent, resourceString, streamWriter.NewLine, key, value);
+            return string.Format(CultureInfo.InvariantCulture, "{0}# {1}{2}{0}{3:19} = {4}{2}{2}", _indent, resourceString, streamWriter.NewLine, key, value);
         }
 
         private string ManifestFragmentForNonSpecifiedManifestMember(string key, string resourceString, string value, StreamWriter streamWriter)
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0}# {1}{2}{0}# {3:19} = {4}{2}{2}",
-                _indent, resourceString, streamWriter.NewLine, key, value);
+            return string.Format(CultureInfo.InvariantCulture, "{0}# {1}{2}{0}# {3:19} = {4}{2}{2}", _indent, resourceString, streamWriter.NewLine, key, value);
         }
 
         private static string ManifestComment(string insert, StreamWriter streamWriter)
@@ -948,12 +946,9 @@ protected override void EndProcessing()
             // wildcards for exported commands that weren't specified on the command line.
             if (_rootModule != null || _nestedModules != null || _requiredModules != null)
             {
-                if (_exportedFunctions == null)
-                    _exportedFunctions = new string[] { "*" };
-                if (_exportedAliases == null)
-                    _exportedAliases = new string[] { "*" };
-                if (_exportedCmdlets == null)
-                    _exportedCmdlets = new string[] { "*" };
+                _exportedAliases ??= new string[] { "*" };
+                _exportedCmdlets ??= new string[] { "*" };
+                _exportedFunctions ??= new string[] { "*" };
             }
 
             ValidateUriParameterValue(ProjectUri, "ProjectUri");
@@ -966,7 +961,7 @@ protected override void EndProcessing()
 
             if (CompatiblePSEditions != null && (CompatiblePSEditions.Distinct(StringComparer.OrdinalIgnoreCase).Count() != CompatiblePSEditions.Length))
             {
-                string message = StringUtil.Format(Modules.DuplicateEntriesInCompatiblePSEditions, string.Join(",", CompatiblePSEditions));
+                string message = StringUtil.Format(Modules.DuplicateEntriesInCompatiblePSEditions, string.Join(',', CompatiblePSEditions));
                 var ioe = new InvalidOperationException(message);
                 var er = new ErrorRecord(ioe, "Modules_DuplicateEntriesInCompatiblePSEditions", ErrorCategory.InvalidArgument, CompatiblePSEditions);
                 ThrowTerminatingError(er);
@@ -1030,8 +1025,7 @@ protected override void EndProcessing()
                     result.Append(streamWriter.NewLine);
                     result.Append(streamWriter.NewLine);
 
-                    if (_rootModule == null)
-                        _rootModule = string.Empty;
+                    _rootModule ??= string.Empty;
 
                     BuildModuleManifest(result, nameof(RootModule), Modules.RootModule, !string.IsNullOrEmpty(_rootModule), () => QuoteName(_rootModule), streamWriter);
 
diff --git a/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs b/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs
index f8625697800..4315f8bcb2b 100644
--- a/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs
+++ b/src/System.Management.Automation/engine/Modules/PSModuleInfo.cs
@@ -453,7 +453,7 @@ internal void SetVersion(Version version)
         public ModuleType ModuleType { get; private set; } = ModuleType.Script;
 
         /// <summary>
-        /// This this module as being a compiled module...
+        /// This module as being a compiled module...
         /// </summary>
         internal void SetModuleType(ModuleType moduleType) { ModuleType = moduleType; }
 
@@ -545,7 +545,10 @@ public Dictionary<string, FunctionInfo> ExportedFunctions
                 // If the module is not binary, it may also have functions...
                 if (DeclaredFunctionExports != null)
                 {
-                    if (DeclaredFunctionExports.Count == 0) { return exports; }
+                    if (DeclaredFunctionExports.Count == 0)
+                    {
+                        return exports;
+                    }
 
                     foreach (string fn in DeclaredFunctionExports)
                     {
@@ -661,16 +664,16 @@ internal void CreateExportedTypeDefinitions(ScriptBlockAst moduleContentScriptBl
             else
             {
                 this._exportedTypeDefinitionsNoNested = new ReadOnlyDictionary<string, TypeDefinitionAst>(
-                    moduleContentScriptBlockAsts.FindAll(a => (a is TypeDefinitionAst), false)
+                    moduleContentScriptBlockAsts.FindAll(static a => (a is TypeDefinitionAst), false)
                         .OfType<TypeDefinitionAst>()
-                        .ToDictionary(a => a.Name, StringComparer.OrdinalIgnoreCase));
+                        .ToDictionary(static a => a.Name, StringComparer.OrdinalIgnoreCase));
             }
         }
 
         internal void AddDetectedTypeExports(List<TypeDefinitionAst> typeDefinitions)
         {
             this._exportedTypeDefinitionsNoNested = new ReadOnlyDictionary<string, TypeDefinitionAst>(
-                typeDefinitions.ToDictionary(a => a.Name, StringComparer.OrdinalIgnoreCase));
+                typeDefinitions.ToDictionary(static a => a.Name, StringComparer.OrdinalIgnoreCase));
         }
 
         /// <summary>
@@ -707,7 +710,10 @@ public Dictionary<string, CmdletInfo> ExportedCmdlets
 
                 if (DeclaredCmdletExports != null)
                 {
-                    if (DeclaredCmdletExports.Count == 0) { return exports; }
+                    if (DeclaredCmdletExports.Count == 0)
+                    {
+                        return exports;
+                    }
 
                     foreach (string fn in DeclaredCmdletExports)
                     {
@@ -1302,10 +1308,7 @@ public object Invoke(ScriptBlock sb, params object[] args)
         /// <returns></returns>
         public PSVariable GetVariableFromCallersModule(string variableName)
         {
-            if (string.IsNullOrEmpty(variableName))
-            {
-                throw new ArgumentNullException(nameof(variableName));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(variableName);
 
             var context = LocalPipeline.GetExecutionContextFromTLS();
             SessionState callersSessionState = null;
@@ -1437,8 +1440,8 @@ internal void SetExportedTypeFiles(ReadOnlyCollection<string> files)
 
         /// <summary>
         /// Implements deep copy of a PSModuleInfo instance.
-        /// <returns>A new PSModuleInfo instance.</returns>
         /// </summary>
+        /// <returns>A new PSModuleInfo instance.</returns>
         public PSModuleInfo Clone()
         {
             PSModuleInfo clone = (PSModuleInfo)this.MemberwiseClone();
diff --git a/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs b/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs
index c52a752c640..18e12541528 100644
--- a/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs
+++ b/src/System.Management.Automation/engine/Modules/RemoteDiscoveryHelper.cs
@@ -43,9 +43,9 @@ private static Collection<string> RehydrateHashtableKeys(PSObject pso, string pr
                 List<string> list = hashtable
                     .Keys
                     .Cast<object>()
-                    .Where(k => k != null)
-                    .Select(k => k.ToString())
-                    .Where(s => s != null)
+                    .Where(static k => k != null)
+                    .Select(static k => k.ToString())
+                    .Where(static s => s != null)
                     .ToList();
                 return new Collection<string>(list);
             }
@@ -683,13 +683,13 @@ internal void FetchAllModuleFiles(CimSession cimSession, string cimNamespace, Ci
                     "Dependent",
                     operationOptions);
 
-                IEnumerable<CimModuleFile> associatedFiles = associatedInstances.Select(i => new CimModuleImplementationFile(i));
+                IEnumerable<CimModuleFile> associatedFiles = associatedInstances.Select(static i => new CimModuleImplementationFile(i));
                 _moduleFiles = associatedFiles.ToList();
             }
 
             private List<CimModuleFile> _moduleFiles;
 
-            private class CimModuleManifestFile : CimModuleFile
+            private sealed class CimModuleManifestFile : CimModuleFile
             {
                 internal CimModuleManifestFile(string fileName, byte[] rawFileData)
                 {
@@ -705,7 +705,7 @@ internal CimModuleManifestFile(string fileName, byte[] rawFileData)
                 internal override byte[] RawFileDataCore { get; }
             }
 
-            private class CimModuleImplementationFile : CimModuleFile
+            private sealed class CimModuleImplementationFile : CimModuleFile
             {
                 private readonly CimInstance _baseObject;
 
@@ -795,7 +795,7 @@ private static IEnumerable<CimModule> GetCimModules(
                 options);
             // TODO/FIXME: ETW for method results
             IEnumerable<CimModule> cimModules = syncResults
-                .Select(cimInstance => new CimModule(cimInstance))
+                .Select(static cimInstance => new CimModule(cimInstance))
                 .Where(cimModule => wildcardPattern.IsMatch(cimModule.ModuleName));
 
             if (!onlyManifests)
diff --git a/src/System.Management.Automation/engine/Modules/RemoveModuleCommand.cs b/src/System.Management.Automation/engine/Modules/RemoveModuleCommand.cs
index 182e535604c..52fa4879f41 100644
--- a/src/System.Management.Automation/engine/Modules/RemoveModuleCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/RemoveModuleCommand.cs
@@ -291,7 +291,7 @@ private bool ModuleProvidesCurrentSessionDrive(PSModuleInfo module)
             return false;
         }
 
-        private void GetAllNestedModules(PSModuleInfo module, ref List<PSModuleInfo> nestedModulesWithNoCircularReference)
+        private static void GetAllNestedModules(PSModuleInfo module, ref List<PSModuleInfo> nestedModulesWithNoCircularReference)
         {
             List<PSModuleInfo> nestedModules = new List<PSModuleInfo>();
             if (module.NestedModules != null && module.NestedModules.Count > 0)
@@ -362,7 +362,7 @@ protected override void EndProcessing()
                         hasWildcards = false;
                 }
 
-                if (FullyQualifiedName != null && (FullyQualifiedName.Any(moduleSpec => !InitialSessionState.IsEngineModule(moduleSpec.Name))))
+                if (FullyQualifiedName != null && (FullyQualifiedName.Any(static moduleSpec => !InitialSessionState.IsEngineModule(moduleSpec.Name))))
                 {
                     isEngineModule = false;
                 }
diff --git a/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs b/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs
index f2005400c9d..892d7375387 100644
--- a/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs
+++ b/src/System.Management.Automation/engine/Modules/ScriptAnalysis.cs
@@ -14,7 +14,6 @@ namespace System.Management.Automation
     /// <summary>
     /// Class describing a PowerShell module...
     /// </summary>
-    [Serializable]
     internal class ScriptAnalysis
     {
         internal static ScriptAnalysis Analyze(string path, ExecutionContext context)
@@ -41,7 +40,7 @@ internal static ScriptAnalysis Analyze(string path, ExecutionContext context)
                 // So eat the invalid operation
             }
 
-            string scriptContent = ReadScript(path);
+            string scriptContent = File.ReadAllText(path, Encoding.Default);
 
             ParseError[] errors;
             var moduleAst = (new Parser()).Parse(path, scriptContent, null, out errors, ParseMode.ModuleAnalysis);
@@ -90,20 +89,6 @@ internal static ScriptAnalysis Analyze(string path, ExecutionContext context)
             return result;
         }
 
-        internal static string ReadScript(string path)
-        {
-            using (FileStream readerStream = new FileStream(path, FileMode.Open, FileAccess.Read))
-            {
-                Encoding defaultEncoding = ClrFacade.GetDefaultEncoding();
-                Microsoft.Win32.SafeHandles.SafeFileHandle safeFileHandle = readerStream.SafeFileHandle;
-
-                using (StreamReader scriptReader = new StreamReader(readerStream, defaultEncoding))
-                {
-                    return scriptReader.ReadToEnd();
-                }
-            }
-        }
-
         internal List<string> DiscoveredExports { get; set; }
 
         internal Dictionary<string, string> DiscoveredAliases { get; set; }
@@ -279,10 +264,22 @@ public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst a
         //  - Exporting module members
         public override AstVisitAction VisitCommand(CommandAst commandAst)
         {
-            string commandName =
-                commandAst.GetCommandName() ??
-                GetSafeValueVisitor.GetSafeValue(commandAst.CommandElements[0], null, GetSafeValueVisitor.SafeValueContext.ModuleAnalysis) as string;
+            string commandName = commandAst.GetCommandName();
+            if (commandName is null)
+            {
+                // GetCommandName only works if the name is a string constant. GetSafeValueVistor can evaluate some safe dynamic expressions
+                try
+                {
+                    commandName = GetSafeValueVisitor.GetSafeValue(commandAst.CommandElements[0], null, GetSafeValueVisitor.SafeValueContext.ModuleAnalysis) as string;
+                }
+                catch (ParseException)
+                {
+                    // The script is invalid so we can't use GetSafeValue to get the name either.
+                }
+            }
 
+            // We couldn't get the name of the command. Either it's an anonymous scriptblock: & {"Some script"}
+            // Or it's a dynamic expression we couldn't safely resolve.
             if (commandName == null)
                 return AstVisitAction.SkipChildren;
 
@@ -433,9 +430,12 @@ public override AstVisitAction VisitCommand(CommandAst commandAst)
             return AstVisitAction.SkipChildren;
         }
 
-        private void ProcessCmdletArguments(object value, Action<string> onEachArgument)
+        private static void ProcessCmdletArguments(object value, Action<string> onEachArgument)
         {
-            if (value == null) return;
+            if (value == null)
+            {
+                return;
+            }
 
             var commandName = value as string;
             if (commandName != null)
@@ -557,7 +557,7 @@ private static Hashtable DoPsuedoParameterBinding(CommandAst commandAst, string
 
         private static readonly Dictionary<string, ParameterBindingInfo> s_parameterBindingInfoTable;
 
-        private class ParameterBindingInfo
+        private sealed class ParameterBindingInfo
         {
             internal ParameterInfo[] parameterInfo;
         }
@@ -571,7 +571,6 @@ private struct ParameterInfo
 
     // Class to keep track of modules we need to import, and commands that should
     // be filtered out of them.
-    [Serializable]
     internal class RequiredModuleInfo
     {
         internal string Name { get; set; }
diff --git a/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs b/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs
new file mode 100644
index 00000000000..84d14939356
--- /dev/null
+++ b/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs
@@ -0,0 +1,134 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Management.Automation;
+using System.Runtime.InteropServices;
+
+using Dbg = System.Management.Automation.Diagnostics;
+
+#if UNIX
+
+namespace Microsoft.PowerShell.Commands
+{
+    /// <summary>
+    /// Implements a cmdlet that allows use of execv API.
+    /// </summary>
+    [Cmdlet(VerbsCommon.Switch, "Process", HelpUri = "https://go.microsoft.com/fwlink/?linkid=2181448")]
+    public sealed class SwitchProcessCommand : PSCmdlet
+    {
+        /// <summary>
+        /// Get or set the command and arguments to replace the current pwsh process.
+        /// </summary>
+        [Parameter(Position = 0, Mandatory = false, ValueFromRemainingArguments = true)]
+        public string[] WithCommand { get; set; } = Array.Empty<string>();
+
+        /// <summary>
+        /// Execute the command and arguments
+        /// </summary>
+        protected override void EndProcessing()
+        {
+            if (WithCommand.Length == 0)
+            {
+                return;
+            }
+
+            // execv requires command to be full path so resolve command to first match
+            var command = this.SessionState.InvokeCommand.GetCommand(WithCommand[0], CommandTypes.Application);
+            if (command is null)
+            {
+                ThrowTerminatingError(
+                    new ErrorRecord(
+                        new CommandNotFoundException(
+                            string.Format(
+                                System.Globalization.CultureInfo.InvariantCulture,
+                                CommandBaseStrings.NativeCommandNotFound,
+                                WithCommand[0]
+                            )
+                        ),
+                        "CommandNotFound",
+                        ErrorCategory.InvalidArgument,
+                        WithCommand[0]
+                    )
+                );
+            }
+
+            var execArgs = new string?[WithCommand.Length + 1];
+
+            // execv convention is the first arg is the program name
+            execArgs[0] = command.Name;
+
+            for (int i = 1; i < WithCommand.Length; i++)
+            {
+                execArgs[i] = WithCommand[i];
+            }
+
+            // need null terminator at end
+            execArgs[execArgs.Length - 1] = null;
+
+            var env = Environment.GetEnvironmentVariables();
+            var envBlock = new string?[env.Count + 1];
+            int j = 0;
+            foreach (DictionaryEntry entry in env)
+            {
+                envBlock[j++] = entry.Key + "=" + entry.Value;
+            }
+
+            envBlock[envBlock.Length - 1] = null;
+
+            // setup termios for a child process as .NET modifies termios dynamically for use with ReadKey()
+            ConfigureTerminalForChildProcess(true);
+            int exitCode = Exec(command.Source, execArgs, envBlock);
+            if (exitCode < 0)
+            {
+                ConfigureTerminalForChildProcess(false);
+                ThrowTerminatingError(
+                    new ErrorRecord(
+                        new Exception(
+                            string.Format(
+                                System.Globalization.CultureInfo.InvariantCulture,
+                                CommandBaseStrings.ExecFailed,
+                                Marshal.GetLastPInvokeError(),
+                                string.Join(' ', WithCommand)
+                            )
+                        ),
+                        "ExecutionFailed",
+                        ErrorCategory.InvalidOperation,
+                        WithCommand
+                    )
+                );
+            }
+        }
+
+        /// <summary>
+        /// The `execv` POSIX syscall we use to exec /bin/sh.
+        /// </summary>
+        /// <param name="path">The path to the executable to exec.</param>
+        /// <param name="args">
+        /// The arguments to send through to the executable.
+        /// Array must have its final element be null.
+        /// </param>
+        /// <param name="env">
+        /// The environment variables to send through to the executable in the form of "key=value".
+        /// Array must have its final element be null.
+        /// <returns>
+        /// An exit code if exec failed, but if successful the calling process will be overwritten.
+        /// </returns>
+        [DllImport("libc",
+            EntryPoint = "execve",
+            CallingConvention = CallingConvention.Cdecl,
+            CharSet = CharSet.Ansi,
+            SetLastError = true)]
+        private static extern int Exec(string path, string?[] args, string?[] env);
+
+        // leverage .NET runtime's native library which abstracts the need to handle different OS and architectures for termios api
+        [DllImport("libSystem.Native", EntryPoint = "SystemNative_ConfigureTerminalForChildProcess")]
+        private static extern void ConfigureTerminalForChildProcess([MarshalAs(UnmanagedType.Bool)] bool childUsesTerminal);
+    }
+}
+
+#endif
diff --git a/src/System.Management.Automation/engine/Modules/TestModuleManifestCommand.cs b/src/System.Management.Automation/engine/Modules/TestModuleManifestCommand.cs
index 265287a010f..650588c32e4 100644
--- a/src/System.Management.Automation/engine/Modules/TestModuleManifestCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/TestModuleManifestCommand.cs
@@ -294,7 +294,7 @@ protected override void ProcessRecord()
 
         // All module extensions except ".psd1" are valid RootModule extensions
         private static readonly IReadOnlyList<string> s_validRootModuleExtensions = ModuleIntrinsics.PSModuleExtensions
-            .Where(ext => !string.Equals(ext, StringLiterals.PowerShellDataFileExtension, StringComparison.OrdinalIgnoreCase))
+            .Where(static ext => !string.Equals(ext, StringLiterals.PowerShellDataFileExtension, StringComparison.OrdinalIgnoreCase))
             .ToArray();
 
         /// <summary>
@@ -374,7 +374,9 @@ private bool IsValidFilePath(string path, PSModuleInfo module, bool verifyPathSc
                     ThrowTerminatingError(er);
                 }
 
-                path = pathInfos[0].Path;
+                // `Path` returns the PSProviderPath which is fully qualified to the provider and the filesystem APIs
+                // don't understand this.  Instead `ProviderPath` returns the path that the FileSystemProvider understands.
+                path = pathInfos[0].ProviderPath;
 
                 // First, we validate if the path does exist.
                 if (!File.Exists(path) && !Directory.Exists(path))
diff --git a/src/System.Management.Automation/engine/MshCmdlet.cs b/src/System.Management.Automation/engine/MshCmdlet.cs
index a2a7023b2d0..40095ad1472 100644
--- a/src/System.Management.Automation/engine/MshCmdlet.cs
+++ b/src/System.Management.Automation/engine/MshCmdlet.cs
@@ -14,6 +14,7 @@
 namespace System.Management.Automation
 {
     #region Auxiliary
+
     /// <summary>
     /// An interface that a
     /// <see cref="Cmdlet"/> or <see cref="Provider.CmdletProvider"/>
@@ -31,6 +32,7 @@ namespace System.Management.Automation
     /// <seealso cref="PSCmdlet"/>
     /// <seealso cref="RuntimeDefinedParameter"/>
     /// <seealso cref="RuntimeDefinedParameterDictionary"/>
+#nullable enable
     public interface IDynamicParameters
     {
         /// <summary>
@@ -62,8 +64,10 @@ public interface IDynamicParameters
         /// may not be set at the time this method is called,
         /// even if the parameters are mandatory.
         /// </returns>
-        object GetDynamicParameters();
+        object? GetDynamicParameters();
     }
+#nullable restore
+
     /// <summary>
     /// Type used to define a parameter on a cmdlet script of function that
     /// can only be used as a switch.
@@ -112,7 +116,7 @@ public bool ToBool()
         /// Construct a SwitchParameter instance with a particular value.
         /// </summary>
         /// <param name="isPresent">
-        /// If true, it indicates that the switch is present, flase otherwise.
+        /// If true, it indicates that the switch is present, false otherwise.
         /// </param>
         public SwitchParameter(bool isPresent)
         {
@@ -279,8 +283,7 @@ public bool HasErrors
         /// </exception>
         public string ExpandString(string source)
         {
-            if (_cmdlet != null)
-                _cmdlet.ThrowIfStopping();
+            _cmdlet?.ThrowIfStopping();
             return _context.Engine.Expand(source);
         }
 
@@ -359,7 +362,7 @@ public CommandInfo GetCommand(string commandName, CommandTypes type, object[] ar
         public System.EventHandler<CommandLookupEventArgs> PostCommandLookupAction { get; set; }
 
         /// <summary>
-        /// Gets or sets the action that is invoked everytime the runspace location (cwd) is changed.
+        /// Gets or sets the action that is invoked every time the runspace location (cwd) is changed.
         /// </summary>
         public System.EventHandler<LocationChangedEventArgs> LocationChangedAction { get; set; }
 
@@ -670,40 +673,46 @@ internal IEnumerable<CommandInfo> GetCommands(string name, CommandTypes commandT
         }
 
         /// <summary>
-        /// Executes a piece of text as a script synchronously.
+        /// Executes a piece of text as a script synchronously in the caller's session state.
+        /// The given text will be executed in a child scope rather than dot-sourced.
         /// </summary>
         /// <param name="script">The script text to evaluate.</param>
-        /// <returns>A collection of MshCobjects generated by the script.</returns>
+        /// <returns>A collection of PSObjects generated by the script. Never null, but may be empty.</returns>
         /// <exception cref="ParseException">Thrown if there was a parsing error in the script.</exception>
         /// <exception cref="RuntimeException">Represents a script-level exception.</exception>
         /// <exception cref="FlowControlException"></exception>
         public Collection<PSObject> InvokeScript(string script)
         {
-            return InvokeScript(script, true, PipelineResultTypes.None, null);
+            return InvokeScript(script, useNewScope: true, PipelineResultTypes.None, input: null);
         }
 
         /// <summary>
-        /// Executes a piece of text as a script synchronously.
+        /// Executes a piece of text as a script synchronously in the caller's session state.
+        /// The given text will be executed in a child scope rather than dot-sourced.
         /// </summary>
         /// <param name="script">The script text to evaluate.</param>
-        /// <param name="args">The arguments to the script.</param>
-        /// <returns>A collection of MshCobjects generated by the script.</returns>
+        /// <param name="args">The arguments to the script, available as $args.</param>
+        /// <returns>A collection of PSObjects generated by the script. Never null, but may be empty.</returns>
         /// <exception cref="ParseException">Thrown if there was a parsing error in the script.</exception>
         /// <exception cref="RuntimeException">Represents a script-level exception.</exception>
         /// <exception cref="FlowControlException"></exception>
         public Collection<PSObject> InvokeScript(string script, params object[] args)
         {
-            return InvokeScript(script, true, PipelineResultTypes.None, null, args);
+            return InvokeScript(script, useNewScope: true, PipelineResultTypes.None, input: null, args);
         }
 
         /// <summary>
+        /// Executes a given scriptblock synchronously in the given session state.
+        /// The scriptblock will be executed in the calling scope (dot-sourced) rather than in a new child scope.
         /// </summary>
-        /// <param name="sessionState"></param>
-        /// <param name="scriptBlock"></param>
-        /// <param name="args"></param>
-        /// <returns></returns>
+        /// <param name="sessionState">The session state in which to execute the scriptblock.</param>
+        /// <param name="scriptBlock">The scriptblock to execute.</param>
+        /// <param name="args">The arguments to the scriptblock, available as $args.</param>
+        /// <returns>A collection of the PSObjects emitted by the executing scriptblock. Never null, but may be empty.</returns>
         public Collection<PSObject> InvokeScript(
-            SessionState sessionState, ScriptBlock scriptBlock, params object[] args)
+            SessionState sessionState,
+            ScriptBlock scriptBlock,
+            params object[] args)
         {
             if (scriptBlock == null)
             {
@@ -735,13 +744,18 @@ public Collection<PSObject> InvokeScript(
         /// <summary>
         /// Invoke a scriptblock in the current runspace, controlling if it gets a new scope.
         /// </summary>
-        /// <param name="useLocalScope">If true, a new scope will be created.</param>
+        /// <param name="useLocalScope">If true, executes the scriptblock in a new child scope, otherwise the scriptblock is dot-sourced into the calling scope.</param>
         /// <param name="scriptBlock">The scriptblock to execute.</param>
-        /// <param name="input">Optionall input to the command.</param>
+        /// <param name="input">Optional input to the command.</param>
         /// <param name="args">Arguments to pass to the scriptblock.</param>
-        /// <returns>The result of the evaluation.</returns>
+        /// <returns>
+        /// A collection of the PSObjects generated by executing the script. Never null, but may be empty.
+        /// </returns>
         public Collection<PSObject> InvokeScript(
-            bool useLocalScope, ScriptBlock scriptBlock, IList input, params object[] args)
+            bool useLocalScope,
+            ScriptBlock scriptBlock,
+            IList input,
+            params object[] args)
         {
             if (scriptBlock == null)
             {
@@ -767,24 +781,27 @@ public Collection<PSObject> InvokeScript(
         /// </summary>
         /// <param name="script">The script to evaluate.</param>
         /// <param name="useNewScope">If true, evaluate the script in its own scope.
-        /// If false, the script will be evaluated in the current scope i.e. it will be "dotted"</param>
+        /// If false, the script will be evaluated in the current scope i.e. it will be dot-sourced.</param>
         /// <param name="writeToPipeline">If set to Output, all output will be streamed
         /// to the output pipe of the calling cmdlet. If set to None, the result will be returned
         /// to the caller as a collection of PSObjects. No other flags are supported at this time and
         /// will result in an exception if used.</param>
         /// <param name="input">The list of objects to use as input to the script.</param>
-        /// <param name="args">The array of arguments to the command.</param>
-        /// <returns>A collection of MshCobjects generated by the script. This will be
-        /// empty if output was redirected.</returns>
+        /// <param name="args">The array of arguments to the command, available as $args.</param>
+        /// <returns>A collection of PSObjects generated by the script. This will be
+        /// empty if output was redirected. Never null.</returns>
         /// <exception cref="ParseException">Thrown if there was a parsing error in the script.</exception>
         /// <exception cref="RuntimeException">Represents a script-level exception.</exception>
         /// <exception cref="NotImplementedException">Thrown if any redirect other than output is attempted.</exception>
         /// <exception cref="FlowControlException"></exception>
-        public Collection<PSObject> InvokeScript(string script, bool useNewScope,
-            PipelineResultTypes writeToPipeline, IList input, params object[] args)
+        public Collection<PSObject> InvokeScript(
+            string script,
+            bool useNewScope,
+            PipelineResultTypes writeToPipeline,
+            IList input,
+            params object[] args)
         {
-            if (script == null)
-                throw new ArgumentNullException(nameof(script));
+            ArgumentNullException.ThrowIfNull(script);
 
             // Compile the script text into an executable script block.
             ScriptBlock sb = ScriptBlock.Create(_context, script);
@@ -792,11 +809,14 @@ public Collection<PSObject> InvokeScript(string script, bool useNewScope,
             return InvokeScript(sb, useNewScope, writeToPipeline, input, args);
         }
 
-        private Collection<PSObject> InvokeScript(ScriptBlock sb, bool useNewScope,
-            PipelineResultTypes writeToPipeline, IList input, params object[] args)
+        private Collection<PSObject> InvokeScript(
+            ScriptBlock sb,
+            bool useNewScope,
+            PipelineResultTypes writeToPipeline,
+            IList input,
+            params object[] args)
         {
-            if (_cmdlet != null)
-                _cmdlet.ThrowIfStopping();
+            _cmdlet?.ThrowIfStopping();
 
             Cmdlet cmdletToUse = null;
             ScriptBlock.ErrorHandlingBehavior errorHandlingBehavior = ScriptBlock.ErrorHandlingBehavior.WriteToExternalErrorPipe;
@@ -887,8 +907,7 @@ private Collection<PSObject> InvokeScript(ScriptBlock sb, bool useNewScope,
         /// <exception cref="ParseException"></exception>
         public ScriptBlock NewScriptBlock(string scriptText)
         {
-            if (_commandRuntime != null)
-                _commandRuntime.ThrowIfStopping();
+            _commandRuntime?.ThrowIfStopping();
 
             ScriptBlock result = ScriptBlock.Create(_context, scriptText);
             return result;
diff --git a/src/System.Management.Automation/engine/MshCommandRuntime.cs b/src/System.Management.Automation/engine/MshCommandRuntime.cs
index e43e49631aa..e674cb1c5eb 100644
--- a/src/System.Management.Automation/engine/MshCommandRuntime.cs
+++ b/src/System.Management.Automation/engine/MshCommandRuntime.cs
@@ -390,6 +390,9 @@ public void WriteProgress(
             WriteProgress(sourceId, progressRecord, false);
         }
 
+        internal bool IsWriteProgressEnabled()
+            => WriteHelper_ShouldWrite(ProgressPreference, lastProgressContinueStatus);
+
         internal void WriteProgress(
                 Int64 sourceId,
                 ProgressRecord progressRecord,
@@ -472,6 +475,9 @@ public void WriteDebug(string text)
             WriteDebug(new DebugRecord(text));
         }
 
+        internal bool IsWriteDebugEnabled()
+            => WriteHelper_ShouldWrite(DebugPreference, lastDebugContinueStatus);
+
         /// <summary>
         /// Display debug information.
         /// </summary>
@@ -566,6 +572,9 @@ public void WriteVerbose(string text)
             WriteVerbose(new VerboseRecord(text));
         }
 
+        internal bool IsWriteVerboseEnabled()
+            => WriteHelper_ShouldWrite(VerbosePreference, lastVerboseContinueStatus);
+
         /// <summary>
         /// Display verbose information.
         /// </summary>
@@ -660,6 +669,9 @@ public void WriteWarning(string text)
             WriteWarning(new WarningRecord(text));
         }
 
+        internal bool IsWriteWarningEnabled()
+            => WriteHelper_ShouldWrite(WarningPreference, lastWarningContinueStatus);
+
         /// <summary>
         /// Display warning information.
         /// </summary>
@@ -733,6 +745,9 @@ public void WriteInformation(InformationRecord informationRecord)
             WriteInformation(informationRecord, false);
         }
 
+        internal bool IsWriteInformationEnabled()
+            => WriteHelper_ShouldWrite(InformationPreference, lastInformationContinueStatus);
+
         /// <summary>
         /// Display tagged object information.
         /// </summary>
@@ -876,7 +891,7 @@ internal void WriteInformation(InformationRecord record, bool overrideInquire =
         /// pipeline execution log.
         ///
         /// If LogPipelineExecutionDetail is turned on, this information will be written
-        /// to monad log under log category "Pipeline execution detail"
+        /// to PowerShell log under log category "Pipeline execution detail"
         /// </remarks>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.WriteDebug(string)"/>
         /// <seealso cref="System.Management.Automation.ICommandRuntime.WriteVerbose(string)"/>
@@ -928,7 +943,8 @@ private bool InitShouldLogPipelineExecutionDetail()
         /// </summary>
         internal string PipelineVariable { get; set; }
 
-        private PSVariable _pipelineVarReference = null;
+        private PSVariable _pipelineVarReference;
+        private bool _shouldRemovePipelineVariable;
 
         internal void SetupOutVariable()
         {
@@ -941,13 +957,10 @@ internal void SetupOutVariable()
 
             // Handle the creation of OutVariable in the case of Out-Default specially,
             // as it needs to handle much of its OutVariable support itself.
-            if (
-                (!string.IsNullOrEmpty(this.OutVariable)) &&
-                (!(this.OutVariable.StartsWith('+'))) &&
-                string.Equals("Out-Default", _thisCommand.CommandInfo.Name, StringComparison.OrdinalIgnoreCase))
+            if (!OutVariable.StartsWith('+') &&
+                string.Equals("Out-Default", _commandInfo.Name, StringComparison.OrdinalIgnoreCase))
             {
-                if (_state == null)
-                    _state = new SessionState(Context.EngineSessionState);
+                _state ??= new SessionState(Context.EngineSessionState);
 
                 IList oldValue = null;
                 oldValue = PSObject.Base(_state.PSVariable.GetValue(this.OutVariable)) as IList;
@@ -972,23 +985,34 @@ internal void SetupPipelineVariable()
             // This can't use the common SetupVariable implementation, as this needs to persist for an entire
             // pipeline.
 
-            if (string.IsNullOrEmpty(this.PipelineVariable))
+            if (string.IsNullOrEmpty(PipelineVariable))
             {
                 return;
             }
 
             EnsureVariableParameterAllowed();
 
-            if (_state == null)
-                _state = new SessionState(Context.EngineSessionState);
+            _state ??= new SessionState(Context.EngineSessionState);
 
             // Create the pipeline variable
-            _pipelineVarReference = new PSVariable(this.PipelineVariable);
-            _state.PSVariable.Set(_pipelineVarReference);
+            _pipelineVarReference = new PSVariable(PipelineVariable);
+            object varToUse = _state.Internal.SetVariable(
+                _pipelineVarReference,
+                force: false,
+                CommandOrigin.Internal);
 
-            // Get the reference again in case we re-used one from the
-            // same scope.
-            _pipelineVarReference = _state.PSVariable.Get(this.PipelineVariable);
+            if (ReferenceEquals(_pipelineVarReference, varToUse))
+            {
+                // The returned variable is the exact same instance, which means we set a new variable.
+                // In this case, we will try removing the pipeline variable in the end.
+                _shouldRemovePipelineVariable = true;
+            }
+            else
+            {
+                // A variable with the same name already exists in the same scope and it was returned.
+                // In this case, we update the reference and don't remove the variable in the end.
+                _pipelineVarReference = (PSVariable)varToUse;
+            }
 
             if (_thisCommand is not PSScriptCmdlet)
             {
@@ -996,6 +1020,15 @@ internal void SetupPipelineVariable()
             }
         }
 
+        internal void RemovePipelineVariable()
+        {
+            if (_shouldRemovePipelineVariable)
+            {
+                // Remove pipeline variable when a pipeline is being torn down.
+                _state.PSVariable.Remove(PipelineVariable);
+            }
+        }
+
         /// <summary>
         /// Configures the number of objects to buffer before calling the downstream Cmdlet.
         /// </summary>
@@ -1063,8 +1096,8 @@ internal int OutBuffer
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype1")]
         ///             public class RemoveMyObjectType1 : PSCmdlet
@@ -1086,7 +1119,7 @@ internal int OutBuffer
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string,string)"/>
@@ -1157,8 +1190,8 @@ public bool ShouldProcess(string target)
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype2")]
         ///             public class RemoveMyObjectType2 : PSCmdlet
@@ -1180,7 +1213,7 @@ public bool ShouldProcess(string target)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string,string)"/>
@@ -1260,8 +1293,8 @@ public bool ShouldProcess(string target, string action)
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype3")]
         ///             public class RemoveMyObjectType3 : PSCmdlet
@@ -1277,8 +1310,8 @@ public bool ShouldProcess(string target, string action)
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}?", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}?"),
         ///                         "Delete file"))
         ///                     {
         ///                         // delete the object
@@ -1286,7 +1319,7 @@ public bool ShouldProcess(string target, string action)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
@@ -1375,8 +1408,8 @@ public bool ShouldProcess(
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype3")]
         ///             public class RemoveMyObjectType3 : PSCmdlet
@@ -1393,8 +1426,8 @@ public bool ShouldProcess(
         ///                 {
         ///                     ShouldProcessReason shouldProcessReason;
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}?", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}?"),
         ///                         "Delete file",
         ///                         out shouldProcessReason))
         ///                     {
@@ -1403,7 +1436,7 @@ public bool ShouldProcess(
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
@@ -1465,7 +1498,7 @@ private bool CanShouldProcessAutoConfirm()
         /// <see cref="System.Management.Automation.ShouldProcessReason"/>
         /// are returned.
         /// </param>
-        /// <remarks>true iff the action should be performed</remarks>
+        /// <remarks>true if-and-only-if the action should be performed</remarks>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
         /// The pipeline has already been terminated, or was terminated
         /// during the execution of this method.
@@ -1681,8 +1714,8 @@ internal ShouldProcessPossibleOptimization CalculatePossibleShouldProcessOptimiz
         /// to ShouldProcess for the Cmdlet instance.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype4")]
         ///             public class RemoveMyObjectType4 : PSCmdlet
@@ -1706,14 +1739,14 @@ internal ShouldProcessPossibleOptimization CalculatePossibleShouldProcessOptimiz
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}"),
         ///                         "Delete file"))
         ///                     {
         ///                         if (IsReadOnly(filename))
         ///                         {
         ///                             if (!Force &amp;&amp; !ShouldContinue(
-        ///                                     string.Format("File {0} is read-only.  Are you sure you want to delete read-only file {0}?", filename),
+        ///                                     string.Format($"File {filename} is read-only.  Are you sure you want to delete read-only file {filename}?"),
         ///                                     "Delete file"))
         ///                                     )
         ///                             {
@@ -1725,7 +1758,7 @@ internal ShouldProcessPossibleOptimization CalculatePossibleShouldProcessOptimiz
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldContinue(string,string,ref bool,ref bool)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
@@ -1765,11 +1798,11 @@ public bool ShouldContinue(string query, string caption)
         /// the default option selected in the selection menu is 'No'.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
@@ -1812,11 +1845,11 @@ public bool ShouldContinue(
         /// It may be displayed by some hosts, but not all.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
@@ -1863,8 +1896,8 @@ public bool ShouldContinue(
         /// to ShouldProcess for the Cmdlet instance.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype4")]
         ///             public class RemoveMyObjectType5 : PSCmdlet
@@ -1891,14 +1924,14 @@ public bool ShouldContinue(
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}"),
         ///                         "Delete file"))
         ///                     {
         ///                         if (IsReadOnly(filename))
         ///                         {
         ///                             if (!Force &amp;&amp; !ShouldContinue(
-        ///                                     string.Format("File {0} is read-only.  Are you sure you want to delete read-only file {0}?", filename),
+        ///                                     string.Format($"File {filename} is read-only.  Are you sure you want to delete read-only file {filename}?"),
         ///                                     "Delete file"),
         ///                                     ref yesToAll,
         ///                                     ref noToAll
@@ -1912,7 +1945,7 @@ public bool ShouldContinue(
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
@@ -2055,6 +2088,7 @@ public PSTransactionContext CurrentPSTransaction
         /// <see cref="System.Management.Automation.Cmdlet.ProcessRecord"/>.
         /// etc.
         /// </remarks>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         public void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             ThrowIfStopping();
@@ -2317,7 +2351,7 @@ internal IDisposable AllowThisCommandToWrite(bool permittedToWriteToPipeline)
             return new AllowWrite(_thisCommand, permittedToWriteToPipeline);
         }
 
-        private class AllowWrite : IDisposable
+        private sealed class AllowWrite : IDisposable
         {
             /// <summary>
             /// Begin the scope where WriteObject/WriteError is permitted.
@@ -2326,7 +2360,7 @@ internal AllowWrite(InternalCommand permittedToWrite, bool permittedToWriteToPip
             {
                 if (permittedToWrite == null)
                     throw PSTraceSource.NewArgumentNullException(nameof(permittedToWrite));
-                if (!(permittedToWrite.commandRuntime is MshCommandRuntime mcr))
+                if (permittedToWrite.commandRuntime is not MshCommandRuntime mcr)
                     throw PSTraceSource.NewArgumentNullException("permittedToWrite.CommandRuntime");
                 _pp = mcr.PipelineProcessor;
                 if (_pp == null)
@@ -2338,19 +2372,18 @@ internal AllowWrite(InternalCommand permittedToWrite, bool permittedToWriteToPip
                 _pp._permittedToWriteToPipeline = permittedToWriteToPipeline;
                 _pp._permittedToWriteThread = Thread.CurrentThread;
             }
+            
             /// <summary>
-            /// End the scope where WriteObject/WriteError is permitted.
+            /// Release all resources.
             /// </summary>
-            /// <!--
-            /// Not a true public, since the class is internal.
-            /// This is public only due to C# interface rules.
-            /// -->
+            /// <remarks>
+            /// End the scope where WriteObject/WriteError is permitted.
+            /// </remarks>
             public void Dispose()
             {
                 _pp._permittedToWrite = _wasPermittedToWrite;
                 _pp._permittedToWriteToPipeline = _wasPermittedToWriteToPipeline;
                 _pp._permittedToWriteThread = _wasPermittedToWriteThread;
-                GC.SuppressFinalize(this);
             }
 
             // There is no finalizer, by design.  This class relies on always
@@ -2376,10 +2409,7 @@ public Exception ManageException(Exception e)
             if (e == null)
                 throw PSTraceSource.NewArgumentNullException(nameof(e));
 
-            if (PipelineProcessor != null)
-            {
-                PipelineProcessor.RecordFailure(e, _thisCommand);
-            }
+            PipelineProcessor?.RecordFailure(e, _thisCommand);
 
             // 1021203-2005/05/09-JonN
             // HaltCommandException will cause the command
@@ -2403,7 +2433,6 @@ public Exception ManageException(Exception e)
                 }
 
                 // Log a command health event
-
                 MshLog.LogCommandHealthEvent(
                     Context,
                     e,
@@ -2542,8 +2571,7 @@ internal void SetupVariable(VariableStreamKind streamKind, string variableName,
 
             EnsureVariableParameterAllowed();
 
-            if (_state == null)
-                _state = new SessionState(Context.EngineSessionState);
+            _state ??= new SessionState(Context.EngineSessionState);
 
             if (variableName.StartsWith('+'))
             {
@@ -2803,8 +2831,16 @@ private void DoWriteError(object obj)
             _WriteErrorSkipAllowCheck(errorRecord, preference);
         }
 
-        // NOTICE-2004/06/08-JonN 959638
-        // Use this variant to skip the ThrowIfWriteNotPermitted check
+        /// <summary>
+        /// Write an error, skipping the ThrowIfWriteNotPermitted check.
+        /// </summary>
+        /// <param name="errorRecord">The error record to write.</param>
+        /// <param name="actionPreference">The configured error action preference.</param>
+        /// <param name="isFromNativeStdError">
+        /// True when this method is called to write from a native command's stderr stream.
+        /// When errors are written through a native stderr stream, they do not interact with the error preference system,
+        /// but must still present as errors in PowerShell.
+        /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
         /// The pipeline has already been terminated, or was terminated
         /// during the execution of this method.
@@ -2818,7 +2854,7 @@ private void DoWriteError(object obj)
         /// but the command failure will ultimately be
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
-        internal void _WriteErrorSkipAllowCheck(ErrorRecord errorRecord, ActionPreference? actionPreference = null, bool isNativeError = false)
+        internal void _WriteErrorSkipAllowCheck(ErrorRecord errorRecord, ActionPreference? actionPreference = null, bool isFromNativeStdError = false)
         {
             ThrowIfStopping();
 
@@ -2838,7 +2874,7 @@ internal void _WriteErrorSkipAllowCheck(ErrorRecord errorRecord, ActionPreferenc
                 this.PipelineProcessor.LogExecutionError(_thisCommand.MyInvocation, errorRecord);
             }
 
-            if (!(ExperimentalFeature.IsEnabled("PSNotApplyErrorActionToStderr") && isNativeError))
+            if (!isFromNativeStdError)
             {
                 this.PipelineProcessor.ExecutionFailed = true;
 
@@ -2904,7 +2940,7 @@ internal void _WriteErrorSkipAllowCheck(ErrorRecord errorRecord, ActionPreferenc
             // when tracing), so don't add the member again.
 
             // We don't add a note property on messages that comes from stderr stream.
-            if (!isNativeError)
+            if (!isFromNativeStdError)
             {
                 errorWrap.WriteStream = WriteStreamType.Error;
             }
@@ -2955,21 +2991,19 @@ internal ConfirmImpact ConfirmPreference
             {
                 // WhatIf not relevant, it never gets this far in that case
                 if (Confirm)
-                    return ConfirmImpact.Low;
-                if (Debug)
                 {
-                    if (IsConfirmFlagSet) // -Debug -Confirm:$false
-                        return ConfirmImpact.None;
                     return ConfirmImpact.Low;
                 }
 
-                if (IsConfirmFlagSet) // -Confirm:$false
+                if (IsConfirmFlagSet)
+                {
+                    // -Confirm:$false
                     return ConfirmImpact.None;
+                }
 
                 if (!_isConfirmPreferenceCached)
                 {
-                    bool defaultUsed = false;
-                    _confirmPreference = Context.GetEnumPreference(SpecialVariables.ConfirmPreferenceVarPath, _confirmPreference, out defaultUsed);
+                    _confirmPreference = Context.GetEnumPreference(SpecialVariables.ConfirmPreferenceVarPath, _confirmPreference, out _);
                     _isConfirmPreferenceCached = true;
                 }
 
@@ -3204,7 +3238,7 @@ internal SwitchParameter UseTransaction
         private bool _debugFlag = false;
 
         /// <summary>
-        /// Debug tell the command system to provide Programmer/Support type messages to understand what is really occuring
+        /// Debug tell the command system to provide Programmer/Support type messages to understand what is really occurring
         /// and give the user the opportunity to stop or debug the situation.
         /// </summary>
         /// <remarks>
@@ -3241,8 +3275,7 @@ internal SwitchParameter WhatIf
             {
                 if (!IsWhatIfFlagSet && !_isWhatIfPreferenceCached)
                 {
-                    bool defaultUsed = false;
-                    _whatIfFlag = Context.GetBooleanPreference(SpecialVariables.WhatIfPreferenceVarPath, _whatIfFlag, out defaultUsed);
+                    _whatIfFlag = Context.GetBooleanPreference(SpecialVariables.WhatIfPreferenceVarPath, _whatIfFlag, out _);
                     _isWhatIfPreferenceCached = true;
                 }
 
@@ -3309,7 +3342,7 @@ internal ActionPreference ProgressPreference
         {
             get
             {
-                if (_isProgressPreferenceSet)
+                if (IsProgressActionSet)
                     return _progressPreference;
 
                 if (!_isProgressPreferenceCached)
@@ -3330,12 +3363,14 @@ internal ActionPreference ProgressPreference
                 }
 
                 _progressPreference = value;
-                _isProgressPreferenceSet = true;
+                IsProgressActionSet = true;
             }
         }
 
         private ActionPreference _progressPreference = InitialSessionState.DefaultProgressPreference;
-        private bool _isProgressPreferenceSet = false;
+
+        internal bool IsProgressActionSet { get; private set; } = false;
+
         private bool _isProgressPreferenceCached = false;
 
         /// <summary>
@@ -3735,8 +3770,10 @@ internal void SetVariableListsInPipe()
         {
             Diagnostics.Assert(_thisCommand is PSScriptCmdlet, "this is only done for script cmdlets");
 
-            if (_outVarList != null)
+            if (_outVarList != null && !OutputPipe.IgnoreOutVariableList)
             {
+                // A null pipe is used when executing the 'Clean' block of a PSScriptCmdlet.
+                // In such a case, we don't capture output to the out variable list.
                 this.OutputPipe.AddVariableList(VariableStreamKind.Output, _outVarList);
             }
 
@@ -3757,26 +3794,13 @@ internal void SetVariableListsInPipe()
 
             if (this.PipelineVariable != null)
             {
-                // _state can be null if the current script block is dynamicparam, etc.
-                if (_state != null)
-                {
-                    // Create the pipeline variable
-                    _state.PSVariable.Set(_pipelineVarReference);
-
-                    // Get the reference again in case we re-used one from the
-                    // same scope.
-                    _pipelineVarReference = _state.PSVariable.Get(this.PipelineVariable);
-                }
-
                 this.OutputPipe.SetPipelineVariable(_pipelineVarReference);
             }
         }
 
         internal void RemoveVariableListsInPipe()
         {
-            // Diagnostics.Assert(thisCommand is PSScriptCmdlet, "this is only done for script cmdlets");
-
-            if (_outVarList != null)
+            if (_outVarList != null && !OutputPipe.IgnoreOutVariableList)
             {
                 this.OutputPipe.RemoveVariableList(VariableStreamKind.Output, _outVarList);
             }
@@ -3799,9 +3823,6 @@ internal void RemoveVariableListsInPipe()
             if (this.PipelineVariable != null)
             {
                 this.OutputPipe.RemovePipelineVariable();
-                // '_state' could be null when a 'DynamicParam' block runs because the 'DynamicParam' block runs in 'DoPrepare',
-                // before 'PipelineProcessor.SetupParameterVariables' is called, where '_state' is initialized.
-                _state?.PSVariable.Remove(this.PipelineVariable);
             }
         }
     }
diff --git a/src/System.Management.Automation/engine/MshMemberInfo.cs b/src/System.Management.Automation/engine/MshMemberInfo.cs
index 73ee243f6e8..4bde286d165 100644
--- a/src/System.Management.Automation/engine/MshMemberInfo.cs
+++ b/src/System.Management.Automation/engine/MshMemberInfo.cs
@@ -28,8 +28,8 @@ namespace System.Management.Automation
     /// <summary>
     /// Enumerates all possible types of members.
     /// </summary>
-    [TypeConverterAttribute(typeof(LanguagePrimitives.EnumMultipleTypeConverter))]
-    [FlagsAttribute()]
+    [TypeConverter(typeof(LanguagePrimitives.EnumMultipleTypeConverter))]
+    [Flags]
     public enum PSMemberTypes
     {
         /// <summary>
@@ -120,8 +120,8 @@ public enum PSMemberTypes
     /// <summary>
     /// Enumerator for all possible views available on a PSObject.
     /// </summary>
-    [TypeConverterAttribute(typeof(LanguagePrimitives.EnumMultipleTypeConverter))]
-    [FlagsAttribute()]
+    [TypeConverter(typeof(LanguagePrimitives.EnumMultipleTypeConverter))]
+    [Flags]
     public enum PSMemberViewTypes
     {
         /// <summary>
@@ -148,7 +148,7 @@ public enum PSMemberViewTypes
     /// <summary>
     /// Match options.
     /// </summary>
-    [FlagsAttribute]
+    [Flags]
     internal enum MshMemberMatchOptions
     {
         /// <summary>
@@ -1909,9 +1909,18 @@ internal class PSMethodInvocationConstraints
         internal PSMethodInvocationConstraints(
             Type methodTargetType,
             Type[] parameterTypes)
+            : this(methodTargetType, parameterTypes, genericTypeParameters: null)
         {
-            this.MethodTargetType = methodTargetType;
-            _parameterTypes = parameterTypes;
+        }
+
+        internal PSMethodInvocationConstraints(
+            Type methodTargetType,
+            Type[] parameterTypes,
+            object[] genericTypeParameters)
+        {
+            MethodTargetType = methodTargetType;
+            ParameterTypes = parameterTypes;
+            GenericTypeParameters = genericTypeParameters;
         }
 
         /// <remarks>
@@ -1922,9 +1931,12 @@ internal PSMethodInvocationConstraints(
         /// <remarks>
         /// If <see langword="null"/> then there are no constraints
         /// </remarks>
-        public IEnumerable<Type> ParameterTypes => _parameterTypes;
+        public Type[] ParameterTypes { get; }
 
-        private readonly Type[] _parameterTypes;
+        /// <summary>
+        /// Gets the generic type parameters for the method invocation.
+        /// </summary>
+        public object[] GenericTypeParameters { get; }
 
         internal static bool EqualsForCollection<T>(ICollection<T> xs, ICollection<T> ys)
         {
@@ -1946,8 +1958,6 @@ internal static bool EqualsForCollection<T>(ICollection<T> xs, ICollection<T> ys
             return xs.SequenceEqual(ys);
         }
 
-        // TODO: IEnumerable<Type> genericTypeParameters { get; private set; }
-
         public bool Equals(PSMethodInvocationConstraints other)
         {
             if (other is null)
@@ -1965,7 +1975,12 @@ public bool Equals(PSMethodInvocationConstraints other)
                 return false;
             }
 
-            if (!EqualsForCollection(_parameterTypes, other._parameterTypes))
+            if (!EqualsForCollection(ParameterTypes, other.ParameterTypes))
+            {
+                return false;
+            }
+
+            if (!EqualsForCollection(GenericTypeParameters, other.GenericTypeParameters))
             {
                 return false;
             }
@@ -1994,36 +2009,53 @@ public override bool Equals(object obj)
         }
 
         public override int GetHashCode()
-        {
-            // algorithm based on https://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode
-            unchecked
-            {
-                int result = 61;
-
-                result = result * 397 + (MethodTargetType != null ? MethodTargetType.GetHashCode() : 0);
-                result = result * 397 + ParameterTypes.SequenceGetHashCode();
-
-                return result;
-            }
-        }
+            => HashCode.Combine(MethodTargetType, ParameterTypes.SequenceGetHashCode(), GenericTypeParameters.SequenceGetHashCode());
 
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             string separator = string.Empty;
-            if (MethodTargetType != null)
+            if (MethodTargetType is not null)
             {
                 sb.Append("this: ");
                 sb.Append(ToStringCodeMethods.Type(MethodTargetType, dropNamespaces: true));
                 separator = " ";
             }
 
-            if (_parameterTypes != null)
+            if (GenericTypeParameters is not null)
+            {
+                sb.Append(separator);
+                sb.Append("genericTypeParams: ");
+
+                separator = string.Empty;
+                foreach (object parameter in GenericTypeParameters)
+                {
+                    sb.Append(separator);
+
+                    switch (parameter)
+                    {
+                        case Type paramType:
+                            sb.Append(ToStringCodeMethods.Type(paramType, dropNamespaces: true));
+                            break;
+                        case ITypeName paramTypeName:
+                            sb.Append(paramTypeName.ToString());
+                            break;
+                        default:
+                            throw new ArgumentException("Unexpected value");
+                    }
+
+                    separator = ", ";
+                }
+
+                separator = " ";
+            }
+
+            if (ParameterTypes is not null)
             {
                 sb.Append(separator);
                 sb.Append("args: ");
                 separator = string.Empty;
-                foreach (var p in _parameterTypes)
+                foreach (var p in ParameterTypes)
                 {
                     sb.Append(separator);
                     sb.Append(ToStringCodeMethods.Type(p, dropNamespaces: true));
@@ -2244,10 +2276,7 @@ public override object Invoke(params object[] arguments)
                 newArguments[i + 1] = arguments[i];
             }
 
-            if (_codeReferenceMethodInformation == null)
-            {
-                _codeReferenceMethodInformation = DotNetAdapter.GetMethodInformationArray(new[] { CodeReference });
-            }
+            _codeReferenceMethodInformation ??= DotNetAdapter.GetMethodInformationArray(new[] { CodeReference });
 
             Adapter.GetBestMethodAndArguments(CodeReference.Name, _codeReferenceMethodInformation, newArguments, out object[] convertedArguments);
 
@@ -2600,10 +2629,7 @@ internal static PSMethod Create(string name, DotNetAdapter dotNetInstanceAdapter
                 return new PSMethod(name, dotNetInstanceAdapter, baseObject, method, isSpecial, isHidden);
             }
 
-            if (method.PSMethodCtor == null)
-            {
-                method.PSMethodCtor = CreatePSMethodConstructor(method.methodInformationStructures);
-            }
+            method.PSMethodCtor ??= CreatePSMethodConstructor(method.methodInformationStructures);
 
             return method.PSMethodCtor.Invoke(name, dotNetInstanceAdapter, baseObject, method, isSpecial, isHidden);
         }
@@ -2659,7 +2685,7 @@ private static Type GetMethodGroupType(MethodInfo methodInfo)
 
                 return DelegateHelpers.MakeDelegate(methodTypes);
             }
-            catch (TypeLoadException)
+            catch (Exception)
             {
                 return typeof(Func<PSNonBindableType>);
             }
@@ -3339,8 +3365,7 @@ internal override PSMemberInfoInternalCollection<PSMemberInfo> InternalMembers
                                     break;
                                 default:
                                     Diagnostics.Assert(false,
-                                        string.Format(CultureInfo.InvariantCulture,
-                                            "PSInternalMemberSet cannot process {0}", name));
+                                        string.Create(CultureInfo.InvariantCulture, $"PSInternalMemberSet cannot process {name}"));
                                     break;
                             }
                         }
@@ -5035,7 +5060,7 @@ internal struct Enumerator : IEnumerator<T>
             private readonly PSMemberInfoInternalCollection<T> _allMembers;
 
             /// <summary>
-            /// Constructs this instance to enumerate over members.
+            /// Initializes a new instance of the <see cref="Enumerator"/> class to enumerate over members.
             /// </summary>
             /// <param name="integratingCollection">Members we are enumerating.</param>
             internal Enumerator(PSMemberInfoIntegratingCollection<T> integratingCollection)
@@ -5063,8 +5088,8 @@ internal Enumerator(PSMemberInfoIntegratingCollection<T> integratingCollection)
             /// Moves to the next element in the enumeration.
             /// </summary>
             /// <returns>
-            /// false if there are no more elements to enumerate
-            /// true otherwise
+            /// If there are no more elements to enumerate, returns false.
+            /// Returns true otherwise.
             /// </returns>
             public bool MoveNext()
             {
@@ -5093,7 +5118,7 @@ public bool MoveNext()
             }
 
             /// <summary>
-            /// Current PSMemberInfo in the enumeration.
+            /// Gets the current PSMemberInfo in the enumeration.
             /// </summary>
             /// <exception cref="ArgumentException">For invalid arguments.</exception>
             T IEnumerator<T>.Current
diff --git a/src/System.Management.Automation/engine/MshObject.cs b/src/System.Management.Automation/engine/MshObject.cs
index 7ea7ef1bd72..c5e8bbac443 100644
--- a/src/System.Management.Automation/engine/MshObject.cs
+++ b/src/System.Management.Automation/engine/MshObject.cs
@@ -44,7 +44,6 @@ namespace System.Management.Automation
     /// but there is no established scenario for doing this, nor has it been tested.
     /// </remarks>
     [TypeDescriptionProvider(typeof(PSObjectTypeDescriptionProvider))]
-    [Serializable]
     public class PSObject : IFormattable, IComparable, ISerializable, IDynamicMetaObjectProvider
     {
         #region constructors
@@ -490,6 +489,7 @@ internal static AdapterSet GetMappedAdapter(object obj, TypeTable typeTable)
 
             if (result == null)
             {
+#if !UNIX
                 if (objectType.IsCOMObject)
                 {
                     // All WinRT types are COM types.
@@ -526,6 +526,9 @@ internal static AdapterSet GetMappedAdapter(object obj, TypeTable typeTable)
                 {
                     result = PSObject.s_dotNetInstanceAdapterSet;
                 }
+#else
+                result = PSObject.s_dotNetInstanceAdapterSet;
+#endif
             }
 
             var existingOrNew = s_adapterMapping.GetOrAdd(objectType, result);
@@ -589,7 +592,7 @@ protected PSObject(SerializationInfo info, StreamingContext context)
                 throw PSTraceSource.NewArgumentNullException(nameof(info));
             }
 
-            if (!(info.GetValue("CliXml", typeof(string)) is string serializedData))
+            if (info.GetValue("CliXml", typeof(string)) is not string serializedData)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(info));
             }
@@ -674,13 +677,10 @@ internal PSMemberInfoInternalCollection<PSMemberInfo> InstanceMembers
                 {
                     lock (_lockObject)
                     {
-                        if (_instanceMembers == null)
-                        {
-                            _instanceMembers =
-                                s_instanceMembersResurrectionTable.GetValue(
-                                    GetKeyForResurrectionTables(this),
-                                    _ => new PSMemberInfoInternalCollection<PSMemberInfo>());
-                        }
+                        _instanceMembers ??=
+                            s_instanceMembersResurrectionTable.GetValue(
+                                GetKeyForResurrectionTables(this),
+                                _ => new PSMemberInfoInternalCollection<PSMemberInfo>());
                     }
                 }
 
@@ -721,10 +721,7 @@ private AdapterSet InternalAdapterSet
                 {
                     lock (_lockObject)
                     {
-                        if (_adapterSet == null)
-                        {
-                            _adapterSet = GetMappedAdapter(_immediateBaseObject, GetTypeTable());
-                        }
+                        _adapterSet ??= GetMappedAdapter(_immediateBaseObject, GetTypeTable());
                     }
                 }
 
@@ -743,10 +740,7 @@ public PSMemberInfoCollection<PSMemberInfo> Members
                 {
                     lock (_lockObject)
                     {
-                        if (_members == null)
-                        {
-                            _members = new PSMemberInfoIntegratingCollection<PSMemberInfo>(this, s_memberCollection);
-                        }
+                        _members ??= new PSMemberInfoIntegratingCollection<PSMemberInfo>(this, s_memberCollection);
                     }
                 }
 
@@ -765,10 +759,7 @@ public PSMemberInfoCollection<PSPropertyInfo> Properties
                 {
                     lock (_lockObject)
                     {
-                        if (_properties == null)
-                        {
-                            _properties = new PSMemberInfoIntegratingCollection<PSPropertyInfo>(this, s_propertyCollection);
-                        }
+                        _properties ??= new PSMemberInfoIntegratingCollection<PSPropertyInfo>(this, s_propertyCollection);
                     }
                 }
 
@@ -787,10 +778,7 @@ public PSMemberInfoCollection<PSMethodInfo> Methods
                 {
                     lock (_lockObject)
                     {
-                        if (_methods == null)
-                        {
-                            _methods = new PSMemberInfoIntegratingCollection<PSMethodInfo>(this, s_methodCollection);
-                        }
+                        _methods ??= new PSMemberInfoIntegratingCollection<PSMethodInfo>(this, s_methodCollection);
                     }
                 }
 
@@ -992,7 +980,7 @@ public static implicit operator PSObject(bool valueToConvert)
         /// </summary>
         internal static object Base(object obj)
         {
-            if (!(obj is PSObject mshObj))
+            if (obj is not PSObject mshObj)
             {
                 return obj;
             }
@@ -1076,7 +1064,7 @@ internal static PSObject AsPSObject(object obj, bool storeTypeNameAndInstanceMem
         /// <returns></returns>
         internal static object GetKeyForResurrectionTables(object obj)
         {
-            if (!(obj is PSObject pso))
+            if (obj is not PSObject pso)
             {
                 return obj;
             }
@@ -1623,7 +1611,7 @@ public virtual PSObject Copy()
             bool needToReAddInstanceMembersAndTypeNames = !object.ReferenceEquals(GetKeyForResurrectionTables(this), GetKeyForResurrectionTables(returnValue));
             if (needToReAddInstanceMembersAndTypeNames)
             {
-                Diagnostics.Assert(!returnValue.InstanceMembers.Any(), "needToReAddInstanceMembersAndTypeNames should mean that the new object has a fresh/empty list of instance members");
+                Diagnostics.Assert(returnValue.InstanceMembers.Count == 0, "needToReAddInstanceMembersAndTypeNames should mean that the new object has a fresh/empty list of instance members");
                 foreach (PSMemberInfo member in this.InstanceMembers)
                 {
                     if (member.IsHidden)
@@ -1863,7 +1851,7 @@ internal static object GetNoteSettingValue(PSMemberSet settings, string noteName
                 settings.ReplicateInstance(ownerObject);
             }
 
-            if (!(settings.Members[noteName] is PSNoteProperty note))
+            if (settings.Members[noteName] is not PSNoteProperty note)
             {
                 return defaultValue;
             }
@@ -2059,7 +2047,7 @@ internal static void CopyDeserializerFields(PSObject source, PSObject target)
         /// </summary>
         /// <param name="value">Object which is set as core.</param>
         /// <param name="overrideTypeInfo">If true, overwrite the type information.</param>
-        ///<remarks>This method is to be used only by Serialization code</remarks>
+        /// <remarks>This method is to be used only by Serialization code</remarks>
         internal void SetCoreOnDeserialization(object value, bool overrideTypeInfo)
         {
             Diagnostics.Assert(this.ImmediateBaseObjectIsEmpty, "BaseObject should be PSCustomObject for deserialized objects");
diff --git a/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs b/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs
index 6e941b4c5f1..113161748c9 100644
--- a/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs
+++ b/src/System.Management.Automation/engine/MshObjectTypeDescriptor.cs
@@ -219,7 +219,7 @@ private static PSObject GetComponentPSObject(object component)
             PSObject mshObj = component as PSObject;
             if (mshObj == null)
             {
-                if (!(component is PSObjectTypeDescriptor descriptor))
+                if (component is not PSObjectTypeDescriptor descriptor)
                 {
                     throw PSTraceSource.NewArgumentException(nameof(component), ExtendedTypeSystem.InvalidComponent,
                                                              "component",
@@ -410,10 +410,7 @@ private void CheckAndAddProperty(PSPropertyInfo propertyInfo, Attribute[] attrib
                     }
                 }
 
-                if (propertyAttributes == null)
-                {
-                    propertyAttributes = new AttributeCollection();
-                }
+                propertyAttributes ??= new AttributeCollection();
 
                 typeDescriptor.WriteLine("Adding property \"{0}\".", propertyInfo.Name);
 
@@ -467,7 +464,7 @@ public override PropertyDescriptorCollection GetProperties(Attribute[] attribute
         /// <returns>True if the Instance property of <paramref name="obj"/> is equal to the current Instance; otherwise, false.</returns>
         public override bool Equals(object obj)
         {
-            if (!(obj is PSObjectTypeDescriptor other))
+            if (obj is not PSObjectTypeDescriptor other)
             {
                 return false;
             }
diff --git a/src/System.Management.Automation/engine/MshReference.cs b/src/System.Management.Automation/engine/MshReference.cs
index a021e09f794..fa8b6f13583 100644
--- a/src/System.Management.Automation/engine/MshReference.cs
+++ b/src/System.Management.Automation/engine/MshReference.cs
@@ -8,7 +8,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// Define type for a reference object in Monad scripting language.
+    /// Define type for a reference object in PowerShell scripting language.
     /// </summary>
     /// <remarks>
     /// This class is used to describe both kinds of references:
diff --git a/src/System.Management.Automation/engine/MshSecurityException.cs b/src/System.Management.Automation/engine/MshSecurityException.cs
index 6ba04e4af7c..07c70ec7317 100644
--- a/src/System.Management.Automation/engine/MshSecurityException.cs
+++ b/src/System.Management.Automation/engine/MshSecurityException.cs
@@ -8,7 +8,6 @@ namespace System.Management.Automation
     /// <summary>
     /// This is a wrapper for exception class SecurityException.
     /// </summary>
-    [Serializable]
     public class PSSecurityException : RuntimeException
     {
         #region ctor
@@ -34,19 +33,11 @@ public PSSecurityException()
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
         /// <returns>Constructed object.</returns>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PSSecurityException(SerializationInfo info,
                            StreamingContext context)
-            : base(info, context)
         {
-            _errorRecord = new ErrorRecord(
-                new ParentContainsErrorRecordException(this),
-                "UnauthorizedAccess",
-                ErrorCategory.SecurityError,
-                null);
-            _errorRecord.ErrorDetails = new ErrorDetails(SessionStateStrings.CanNotRun);
-            _message = _errorRecord.ErrorDetails.Message;
-            // no fields, nothing more to serialize
-            // no need for a GetObjectData implementation
+            throw new NotSupportedException();
         }
 
         /// <summary>
@@ -93,14 +84,11 @@ public override ErrorRecord ErrorRecord
         {
             get
             {
-                if (_errorRecord == null)
-                {
-                    _errorRecord = new ErrorRecord(
-                        new ParentContainsErrorRecordException(this),
-                        "UnauthorizedAccess",
-                        ErrorCategory.SecurityError,
-                        null);
-                }
+                _errorRecord ??= new ErrorRecord(
+                    new ParentContainsErrorRecordException(this),
+                    "UnauthorizedAccess",
+                    ErrorCategory.SecurityError,
+                    null);
 
                 return _errorRecord;
             }
diff --git a/src/System.Management.Automation/engine/MshSnapinQualifiedName.cs b/src/System.Management.Automation/engine/MshSnapinQualifiedName.cs
index a74cae5252d..b4cf7c16eef 100644
--- a/src/System.Management.Automation/engine/MshSnapinQualifiedName.cs
+++ b/src/System.Management.Automation/engine/MshSnapinQualifiedName.cs
@@ -10,7 +10,7 @@ namespace System.Management.Automation
     /// <summary>
     /// A class representing a name that is qualified by the PSSnapin name.
     /// </summary>
-    internal class PSSnapinQualifiedName
+    internal sealed class PSSnapinQualifiedName
     {
         private PSSnapinQualifiedName(string[] splitName)
         {
@@ -68,7 +68,7 @@ private PSSnapinQualifiedName(string[] splitName)
         {
             if (name == null)
                 return null;
-            string[] splitName = name.Split(Utils.Separators.Backslash);
+            string[] splitName = name.Split('\\');
             if (splitName.Length == 0 || splitName.Length > 2)
                 return null;
             var result = new PSSnapinQualifiedName(splitName);
diff --git a/src/System.Management.Automation/engine/NativeCommand.cs b/src/System.Management.Automation/engine/NativeCommand.cs
index 822d4cf82d9..80748605a98 100644
--- a/src/System.Management.Automation/engine/NativeCommand.cs
+++ b/src/System.Management.Automation/engine/NativeCommand.cs
@@ -26,8 +26,7 @@ internal override void DoStopProcessing()
         {
             try
             {
-                if (_myCommandProcessor != null)
-                    _myCommandProcessor.StopProcessing();
+                _myCommandProcessor?.StopProcessing();
             }
             catch (Exception)
             {
diff --git a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs
index e0c643c3d3b..31ac506c86a 100644
--- a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs
+++ b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System.Collections;
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.IO;
 using System.Linq;
@@ -82,7 +83,7 @@ internal void BindParameters(Collection<CommandParameterInternal> parameters)
                 if (parameter.ParameterNameSpecified)
                 {
                     Diagnostics.Assert(!parameter.ParameterText.Contains(' '), "Parameters cannot have whitespace");
-                    PossiblyGlobArg(parameter.ParameterText, StringConstantType.BareWord);
+                    PossiblyGlobArg(parameter.ParameterText, parameter, usedQuotes: false);
 
                     if (parameter.SpaceAfterParameter)
                     {
@@ -107,30 +108,22 @@ internal void BindParameters(Collection<CommandParameterInternal> parameters)
                         //    windbg  -k com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect
                         // The parser produced an array of strings but marked the parameter so we
                         // can properly reconstruct the correct command line.
-                        StringConstantType stringConstantType = StringConstantType.BareWord;
+                        bool usedQuotes = false;
                         ArrayLiteralAst arrayLiteralAst = null;
                         switch (parameter?.ArgumentAst)
                         {
                             case StringConstantExpressionAst sce:
-                                stringConstantType = sce.StringConstantType;
+                                usedQuotes = sce.StringConstantType != StringConstantType.BareWord;
                                 break;
                             case ExpandableStringExpressionAst ese:
-                                stringConstantType = ese.StringConstantType;
+                                usedQuotes = ese.StringConstantType != StringConstantType.BareWord;
                                 break;
                             case ArrayLiteralAst ala:
                                 arrayLiteralAst = ala;
                                 break;
                         }
 
-                        // Prior to PSNativePSPathResolution experimental feature, a single quote worked the same as a double quote
-                        // so if the feature is not enabled, we treat any quotes as double quotes.  When this feature is no longer
-                        // experimental, this code here needs to be removed.
-                        if (!ExperimentalFeature.IsEnabled("PSNativePSPathResolution") && stringConstantType == StringConstantType.SingleQuoted)
-                        {
-                            stringConstantType = StringConstantType.DoubleQuoted;
-                        }
-
-                        AppendOneNativeArgument(Context, argValue, arrayLiteralAst, sawVerbatimArgumentMarker, stringConstantType);
+                        AppendOneNativeArgument(Context, parameter, argValue, arrayLiteralAst, sawVerbatimArgumentMarker, usedQuotes);
                     }
                 }
             }
@@ -151,6 +144,69 @@ internal string Arguments
 
         private readonly StringBuilder _arguments = new StringBuilder();
 
+        internal string[] ArgumentList
+        {
+            get
+            {
+                return _argumentList.ToArray();
+            }
+        }
+
+        /// <summary>
+        /// Add an argument to the ArgumentList.
+        /// We may need to construct the argument out of the parameter text and the argument
+        /// in the case that we have a parameter that appears as "-switch:value".
+        /// </summary>
+        /// <param name="parameter">The parameter associated with the operation.</param>
+        /// <param name="argument">The value used with parameter.</param>
+        internal void AddToArgumentList(CommandParameterInternal parameter, string argument)
+        {
+            if (parameter.ParameterNameSpecified && parameter.ParameterText.EndsWith(':'))
+            {
+                if (argument != parameter.ParameterText)
+                {
+                    // Only combine the text and argument if there was no space after the parameter,
+                    // otherwise, add the parameter and arguments as separate elements.
+                    if (parameter.SpaceAfterParameter)
+                    {
+                        _argumentList.Add(parameter.ParameterText);
+                        _argumentList.Add(argument);
+                    }
+                    else
+                    {
+                        _argumentList.Add(parameter.ParameterText + argument);
+                    }
+                }
+            }
+            else
+            {
+                _argumentList.Add(argument);
+            }
+        }
+
+        private readonly List<string> _argumentList = new List<string>();
+
+        /// <summary>
+        /// Gets a value indicating whether to use an ArgumentList or string for arguments when invoking a native executable.
+        /// </summary>
+        internal NativeArgumentPassingStyle ArgumentPassingStyle
+        {
+            get
+            {
+                try
+                {
+                    var preference = LanguagePrimitives.ConvertTo<NativeArgumentPassingStyle>(
+                        Context.GetVariableValue(SpecialVariables.NativeArgumentPassingVarPath, NativeArgumentPassingStyle.Standard));
+                    return preference;
+                }
+                catch
+                {
+                    // The value is not convertible send back Legacy
+                    return NativeArgumentPassingStyle.Legacy;
+                }
+            }
+        }
+
         #endregion internal members
 
         #region private members
@@ -161,24 +217,27 @@ internal string Arguments
         /// each of which will be stringized.
         /// </summary>
         /// <param name="context">Execution context instance.</param>
+        /// <param name="parameter">The parameter associated with the operation.</param>
         /// <param name="obj">The object to append.</param>
         /// <param name="argArrayAst">If the argument was an array literal, the Ast, otherwise null.</param>
         /// <param name="sawVerbatimArgumentMarker">True if the argument occurs after --%.</param>
-        /// <param name="stringConstantType">Bare, SingleQuoted, or DoubleQuoted.</param>
-        private void AppendOneNativeArgument(ExecutionContext context, object obj, ArrayLiteralAst argArrayAst, bool sawVerbatimArgumentMarker, StringConstantType stringConstantType)
+        /// <param name="usedQuotes">True if the argument was a quoted string (single or double).</param>
+        private void AppendOneNativeArgument(ExecutionContext context, CommandParameterInternal parameter, object obj, ArrayLiteralAst argArrayAst, bool sawVerbatimArgumentMarker, bool usedQuotes)
         {
             IEnumerator list = LanguagePrimitives.GetEnumerator(obj);
 
-            Diagnostics.Assert((argArrayAst == null) || obj is object[] && ((object[])obj).Length == argArrayAst.Elements.Count, "array argument and ArrayLiteralAst differ in number of elements");
+            Diagnostics.Assert((argArrayAst == null) || (obj is object[] && ((object[])obj).Length == argArrayAst.Elements.Count), "array argument and ArrayLiteralAst differ in number of elements");
 
             int currentElement = -1;
             string separator = string.Empty;
             do
             {
                 string arg;
+                object currentObj;
                 if (list == null)
                 {
                     arg = PSObject.ToStringParser(context, obj);
+                    currentObj = obj;
                 }
                 else
                 {
@@ -187,7 +246,8 @@ private void AppendOneNativeArgument(ExecutionContext context, object obj, Array
                         break;
                     }
 
-                    arg = PSObject.ToStringParser(context, ParserOps.Current(null, list));
+                    currentObj = ParserOps.Current(null, list);
+                    arg = PSObject.ToStringParser(context, currentObj);
 
                     currentElement += 1;
                     if (currentElement != 0)
@@ -198,12 +258,16 @@ private void AppendOneNativeArgument(ExecutionContext context, object obj, Array
 
                 if (!string.IsNullOrEmpty(arg))
                 {
+                    // Only add the separator to the argument string rather than adding a separator to the ArgumentList.
                     _arguments.Append(separator);
 
                     if (sawVerbatimArgumentMarker)
                     {
                         arg = Environment.ExpandEnvironmentVariables(arg);
                         _arguments.Append(arg);
+
+                        // we need to split the argument on spaces
+                        _argumentList.AddRange(arg.Split(' ', StringSplitOptions.RemoveEmptyEntries));
                     }
                     else
                     {
@@ -223,18 +287,11 @@ private void AppendOneNativeArgument(ExecutionContext context, object obj, Array
                         if (NeedQuotes(arg))
                         {
                             _arguments.Append('"');
-
-                            if (stringConstantType == StringConstantType.DoubleQuoted)
-                            {
-                                _arguments.Append(ResolvePath(arg, Context));
-                            }
-                            else
-                            {
-                                _arguments.Append(arg);
-                            }
+                            AddToArgumentList(parameter, arg);
 
                             // need to escape all trailing backslashes so the native command receives it correctly
                             // according to http://www.daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULESDOC
+                            _arguments.Append(arg);
                             for (int i = arg.Length - 1; i >= 0 && arg[i] == '\\'; i--)
                             {
                                 _arguments.Append('\\');
@@ -244,179 +301,149 @@ private void AppendOneNativeArgument(ExecutionContext context, object obj, Array
                         }
                         else
                         {
-                            PossiblyGlobArg(arg, stringConstantType);
+                            if (argArrayAst != null && ArgumentPassingStyle != NativeArgumentPassingStyle.Legacy)
+                            {
+                                // We have a literal array, so take the extent, break it on spaces and add them to the argument list.
+                                foreach (string element in argArrayAst.Extent.Text.Split(' ', StringSplitOptions.RemoveEmptyEntries))
+                                {
+                                    PossiblyGlobArg(element, parameter, usedQuotes);
+                                }
+
+                                break;
+                            }
+                            else
+                            {
+                                PossiblyGlobArg(arg, parameter, usedQuotes);
+                            }
                         }
                     }
                 }
+                else if (ArgumentPassingStyle != NativeArgumentPassingStyle.Legacy && currentObj != null)
+                {
+                    // add empty strings to arglist, but not nulls
+                    AddToArgumentList(parameter, arg);
+                }
             }
             while (list != null);
         }
 
         /// <summary>
-        /// On Windows, just append <paramref name="arg"/>.
+        /// On Windows, do tilde expansion, otherwise just append <paramref name="arg"/>.
         /// On Unix, do globbing as appropriate, otherwise just append <paramref name="arg"/>.
         /// </summary>
         /// <param name="arg">The argument that possibly needs expansion.</param>
-        /// <param name="stringConstantType">Bare, SingleQuoted, or DoubleQuoted.</param>
-        private void PossiblyGlobArg(string arg, StringConstantType stringConstantType)
+        /// <param name="parameter">The parameter associated with the operation.</param>
+        /// <param name="usedQuotes">True if the argument was a quoted string (single or double).</param>
+        private void PossiblyGlobArg(string arg, CommandParameterInternal parameter, bool usedQuotes)
         {
             var argExpanded = false;
 
 #if UNIX
             // On UNIX systems, we expand arguments containing wildcard expressions against
             // the file system just like bash, etc.
-
-            if (stringConstantType == StringConstantType.BareWord)
+            if (!usedQuotes && WildcardPattern.ContainsWildcardCharacters(arg))
             {
-                if (WildcardPattern.ContainsWildcardCharacters(arg))
+                // See if the current working directory is a filesystem provider location
+                // We won't do the expansion if it isn't since native commands can only access the file system.
+                var cwdinfo = Context.EngineSessionState.CurrentLocation;
+
+                // If it's a filesystem location then expand the wildcards
+                if (cwdinfo.Provider.Name.Equals(FileSystemProvider.ProviderName, StringComparison.OrdinalIgnoreCase))
                 {
-                    // See if the current working directory is a filesystem provider location
-                    // We won't do the expansion if it isn't since native commands can only access the file system.
-                    var cwdinfo = Context.EngineSessionState.CurrentLocation;
+                    // On UNIX, paths starting with ~ or absolute paths are not normalized
+                    bool normalizePath = arg.Length == 0 || !(arg[0] == '~' || arg[0] == '/');
 
-                    // If it's a filesystem location then expand the wildcards
-                    if (cwdinfo.Provider.Name.Equals(FileSystemProvider.ProviderName, StringComparison.OrdinalIgnoreCase))
+                    // See if there are any matching paths otherwise just add the pattern as the argument
+                    Collection<PSObject> paths = null;
+                    try
                     {
-                        // On UNIX, paths starting with ~ or absolute paths are not normalized
-                        bool normalizePath = arg.Length == 0 || !(arg[0] == '~' || arg[0] == '/');
-
-                        // See if there are any matching paths otherwise just add the pattern as the argument
-                        Collection<PSObject> paths = null;
-                        try
-                        {
-                            paths = Context.EngineSessionState.InvokeProvider.ChildItem.Get(arg, false);
-                        }
-                        catch
-                        {
-                            // Fallthrough will append the pattern unchanged.
-                        }
+                        paths = Context.EngineSessionState.InvokeProvider.ChildItem.Get(arg, false);
+                    }
+                    catch
+                    {
+                        // Fallthrough will append the pattern unchanged.
+                    }
 
-                        // Expand paths, but only from the file system.
-                        if (paths?.Count > 0 && paths.All(p => p.BaseObject is FileSystemInfo))
+                    // Expand paths, but only from the file system.
+                    if (paths?.Count > 0 && paths.All(p => p.BaseObject is FileSystemInfo))
+                    {
+                        var sep = string.Empty;
+                        foreach (var path in paths)
                         {
-                            var sep = string.Empty;
-                            foreach (var path in paths)
+                            _arguments.Append(sep);
+                            sep = " ";
+                            var expandedPath = (path.BaseObject as FileSystemInfo).FullName;
+                            if (normalizePath)
                             {
-                                _arguments.Append(sep);
-                                sep = " ";
-                                var expandedPath = (path.BaseObject as FileSystemInfo).FullName;
-                                if (normalizePath)
-                                {
-                                    expandedPath =
-                                        Context.SessionState.Path.NormalizeRelativePath(expandedPath, cwdinfo.ProviderPath);
-                                }
-                                // If the path contains spaces, then add quotes around it.
-                                if (NeedQuotes(expandedPath))
-                                {
-                                    _arguments.Append('"');
-                                    _arguments.Append(expandedPath);
-                                    _arguments.Append('"');
-                                }
-                                else
-                                {
-                                    _arguments.Append(expandedPath);
-                                }
-
-                                argExpanded = true;
+                                expandedPath =
+                                    Context.SessionState.Path.NormalizeRelativePath(expandedPath, cwdinfo.ProviderPath);
+                            }
+                            // If the path contains spaces, then add quotes around it.
+                            if (NeedQuotes(expandedPath))
+                            {
+                                _arguments.Append('"');
+                                _arguments.Append(expandedPath);
+                                _arguments.Append('"');
+                            }
+                            else
+                            {
+                                _arguments.Append(expandedPath);
                             }
+
+                            AddToArgumentList(parameter, expandedPath);
+                            argExpanded = true;
                         }
                     }
                 }
-                else
+            }
+            else if (!usedQuotes)
+            {
+                // Even if there are no wildcards, we still need to possibly
+                // expand ~ into the filesystem provider home directory path
+                if (ExpandTilde(arg, parameter))
                 {
-                    // Even if there are no wildcards, we still need to possibly
-                    // expand ~ into the filesystem provider home directory path
-                    ProviderInfo fileSystemProvider = Context.EngineSessionState.GetSingleProvider(FileSystemProvider.ProviderName);
-                    string home = fileSystemProvider.Home;
-                    if (string.Equals(arg, "~"))
-                    {
-                        _arguments.Append(home);
-                        argExpanded = true;
-                    }
-                    else if (arg.StartsWith("~/", StringComparison.OrdinalIgnoreCase))
-                    {
-                        var replacementString = home + arg.Substring(1);
-                        _arguments.Append(replacementString);
-                        argExpanded = true;
-                    }
+                    argExpanded = true;
                 }
             }
-#endif // UNIX
-
-            if (stringConstantType != StringConstantType.SingleQuoted)
+#else
+            if (!usedQuotes && ExpandTilde(arg, parameter))
             {
-                arg = ResolvePath(arg, Context);
+                argExpanded = true;
             }
+#endif
 
             if (!argExpanded)
             {
                 _arguments.Append(arg);
+                AddToArgumentList(parameter, arg);
             }
         }
 
         /// <summary>
-        /// Check if string is prefixed by psdrive, if so, expand it if filesystem path.
+        /// Replace tilde for unquoted arguments in the form ~ and ~/. For windows, ~\ is also expanded.
         /// </summary>
-        /// <param name="path">The potential PSPath to resolve.</param>
-        /// <param name="context">The current ExecutionContext.</param>
-        /// <returns>Resolved PSPath if applicable otherwise the original path</returns>
-        internal static string ResolvePath(string path, ExecutionContext context)
+        /// <param name="arg">The argument that possibly needs expansion.</param>
+        /// <param name="parameter">The parameter associated with the operation.</param>
+        /// <returns>True if tilde expansion occurred.</returns>
+        private bool ExpandTilde(string arg, CommandParameterInternal parameter)
         {
-            if (ExperimentalFeature.IsEnabled("PSNativePSPathResolution"))
+            var fileSystemProvider = Context.EngineSessionState.GetSingleProvider(FileSystemProvider.ProviderName);
+            var home = fileSystemProvider.Home;
+            if (string.Equals(arg, "~"))
             {
-#if !UNIX
-                // on Windows, we need to expand ~ to point to user's home path
-                if (string.Equals(path, "~", StringComparison.Ordinal) || path.StartsWith(TildeDirectorySeparator, StringComparison.Ordinal) || path.StartsWith(TildeAltDirectorySeparator, StringComparison.Ordinal))
-                {
-                    try
-                    {
-                        ProviderInfo fileSystemProvider = context.EngineSessionState.GetSingleProvider(FileSystemProvider.ProviderName);
-                        return new StringBuilder(fileSystemProvider.Home)
-                            .Append(path.Substring(1))
-                            .Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar)
-                            .ToString();
-                    }
-                    catch
-                    {
-                        return path;
-                    }
-                }
-
-                // check if the driveName is an actual disk drive on Windows, if so, no expansion
-                if (path.Length >= 2 && path[1] == ':')
-                {
-                    foreach (var drive in DriveInfo.GetDrives())
-                    {
-                        if (drive.Name.StartsWith(new string(path[0], 1), StringComparison.OrdinalIgnoreCase))
-                        {
-                            return path;
-                        }
-                    }
-                }
-#endif
-
-                if (path.Contains(':'))
-                {
-                    LocationGlobber globber = new LocationGlobber(context.SessionState);
-                    try
-                    {
-                        ProviderInfo providerInfo;
-
-                        // replace the argument with resolved path if it's a filesystem path
-                        string pspath = globber.GetProviderPath(path, out providerInfo);
-                        if (string.Equals(providerInfo.Name, FileSystemProvider.ProviderName, StringComparison.OrdinalIgnoreCase))
-                        {
-                            path = pspath;
-                        }
-                    }
-                    catch
-                    {
-                        // if it's not a provider path, do nothing
-                    }
-                }
+                _arguments.Append(home);
+                AddToArgumentList(parameter, home);
+                return true;
+            }
+            else if (arg.StartsWith("~/") || (OperatingSystem.IsWindows() && arg.StartsWith(@"~\")))
+            {
+                var replacementString = string.Concat(home, arg.AsSpan(1));
+                _arguments.Append(replacementString);
+                AddToArgumentList(parameter, replacementString);
+                return true;
             }
 
-            return path;
+            return false;
         }
 
         /// <summary>
@@ -446,7 +473,10 @@ internal static bool NeedQuotes(string stringToCheck)
 
         private static string GetEnumerableArgSeparator(ArrayLiteralAst arrayLiteralAst, int index)
         {
-            if (arrayLiteralAst == null) return " ";
+            if (arrayLiteralAst == null)
+            {
+                return " ";
+            }
 
             // index points to the *next* element, so we're looking for space between
             // it and the previous element.
@@ -458,14 +488,25 @@ private static string GetEnumerableArgSeparator(ArrayLiteralAst arrayLiteralAst,
             var afterPrev = prev.Extent.EndOffset;
             var beforeNext = next.Extent.StartOffset - 1;
 
-            if (afterPrev == beforeNext) return ",";
+            if (afterPrev == beforeNext)
+            {
+                return ",";
+            }
 
             var arrayText = arrayExtent.Text;
             afterPrev -= arrayExtent.StartOffset;
             beforeNext -= arrayExtent.StartOffset;
 
-            if (arrayText[afterPrev] == ',') return ", ";
-            if (arrayText[beforeNext] == ',') return " ,";
+            if (arrayText[afterPrev] == ',')
+            {
+                return ", ";
+            }
+
+            if (arrayText[beforeNext] == ',')
+            {
+                return " ,";
+            }
+
             return " , ";
         }
 
@@ -473,8 +514,6 @@ private static string GetEnumerableArgSeparator(ArrayLiteralAst arrayLiteralAst,
         /// The native command to bind to.
         /// </summary>
         private readonly NativeCommand _nativeCommand;
-        private static readonly string TildeDirectorySeparator = $"~{Path.DirectorySeparatorChar}";
-        private static readonly string TildeAltDirectorySeparator = $"~{Path.AltDirectorySeparatorChar}";
 
         #endregion private members
     }
diff --git a/src/System.Management.Automation/engine/NativeCommandParameterBinderController.cs b/src/System.Management.Automation/engine/NativeCommandParameterBinderController.cs
index ecdd4554abe..9a1dab71beb 100644
--- a/src/System.Management.Automation/engine/NativeCommandParameterBinderController.cs
+++ b/src/System.Management.Automation/engine/NativeCommandParameterBinderController.cs
@@ -38,6 +38,28 @@ internal string Arguments
             }
         }
 
+        /// <summary>
+        /// Gets the value of the command arguments as an array of strings.
+        /// </summary>
+        internal string[] ArgumentList
+        {
+            get
+            {
+                return ((NativeCommandParameterBinder)DefaultParameterBinder).ArgumentList;
+            }
+        }
+
+        /// <summary>
+        /// Gets the value indicating what type of native argument binding to use.
+        /// </summary>
+        internal NativeArgumentPassingStyle ArgumentPassingStyle
+        {
+            get
+            {
+                return ((NativeCommandParameterBinder)DefaultParameterBinder).ArgumentPassingStyle;
+            }
+        }
+
         /// <summary>
         /// Passes the binding directly through to the parameter binder.
         /// It does no verification against metadata.
@@ -49,8 +71,7 @@ internal string Arguments
         /// Ignored.
         /// </param>
         /// <returns>
-        /// True if the parameter was successfully bound. Any error condition
-        /// produces an exception.
+        /// True if the parameter was successfully bound. Any error condition produces an exception.
         /// </returns>
         internal override bool BindParameter(
             CommandParameterInternal argument,
diff --git a/src/System.Management.Automation/engine/NativeCommandProcessor.cs b/src/System.Management.Automation/engine/NativeCommandProcessor.cs
index 96ad84a6c46..145fe968fda 100644
--- a/src/System.Management.Automation/engine/NativeCommandProcessor.cs
+++ b/src/System.Management.Automation/engine/NativeCommandProcessor.cs
@@ -3,21 +3,26 @@
 
 #pragma warning disable 1634, 1691
 
+using System.Collections;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.ComponentModel;
 using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
 using System.IO;
-using System.ComponentModel;
+using System.Linq;
+using System.Management.Automation.Internal;
+using System.Runtime.CompilerServices;
+using System.Runtime.Serialization;
 using System.Text;
-using System.Collections;
 using System.Threading;
-using System.Management.Automation.Internal;
+using System.Threading.Tasks;
 using System.Xml;
-using System.Runtime.InteropServices;
+using Microsoft.PowerShell.Commands;
+using Microsoft.PowerShell.Telemetry;
+using Microsoft.Win32;
 using Dbg = System.Management.Automation.Diagnostics;
-using System.Runtime.Serialization;
-using System.Globalization;
-using System.Diagnostics.CodeAnalysis;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
 
 namespace System.Management.Automation
 {
@@ -130,11 +135,273 @@ internal ProcessOutputObject(object data, MinishellStream stream)
         }
     }
 
+#nullable enable
+    /// <summary>
+    /// This exception is used by the NativeCommandProcessor to indicate an error
+    /// when a native command returns a non-zero exit code.
+    /// </summary>
+    public sealed class NativeCommandExitException : RuntimeException
+    {
+        // NOTE:
+        // When implementing the native error action preference integration,
+        // reusing ApplicationFailedException was rejected.
+        // Instead of reusing a type already used in another scenario
+        // it was decided instead to use a fresh type to avoid conflating the two scenarios:
+        // * ApplicationFailedException: PowerShell was not able to complete execution of the application.
+        // * NativeCommandExitException: the application completed execution but returned a non-zero exit code.
+
+        #region Constructors
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="NativeCommandExitException"/> class with information on the native
+        /// command, a specified error message and a specified error ID.
+        /// </summary>
+        /// <param name="path">The full path of the native command.</param>
+        /// <param name="exitCode">The exit code returned by the native command.</param>
+        /// <param name="processId">The process ID of the process before it ended.</param>
+        /// <param name="message">The error message.</param>
+        /// <param name="errorId">The PowerShell runtime error ID.</param>
+        internal NativeCommandExitException(string path, int exitCode, int processId, string message, string errorId)
+            : base(message)
+        {
+            SetErrorId(errorId);
+            SetErrorCategory(ErrorCategory.NotSpecified);
+            Path = path;
+            ExitCode = exitCode;
+            ProcessId = processId;
+        }
+
+        #endregion Constructors
+
+        /// <summary>
+        /// Gets the path of the native command.
+        /// </summary>
+        public string? Path { get; }
+
+        /// <summary>
+        /// Gets the exit code returned by the native command.
+        /// </summary>
+        public int ExitCode { get; }
+
+        /// <summary>
+        /// Gets the native command's process ID.
+        /// </summary>
+        public int ProcessId { get; }
+
+    }
+#nullable restore
+
     /// <summary>
     /// Provides way to create and execute native commands.
     /// </summary>
     internal class NativeCommandProcessor : CommandProcessorBase
     {
+        /// <summary>
+        /// This is the list of files which will trigger Legacy behavior if 'PSNativeCommandArgumentPassing' is set to "Windows".
+        /// </summary>
+        private static readonly HashSet<string> s_legacyFileExtensions = new(StringComparer.OrdinalIgnoreCase)
+            {
+                ".js",
+                ".wsf",
+                ".cmd",
+                ".bat",
+                ".vbs",
+            };
+
+        /// <summary>
+        /// This is the list of native commands that have non-standard behavior with regard to argument passing.
+        /// We use Legacy argument parsing for them when 'PSNativeCommandArgumentPassing' is set to "Windows".
+        /// </summary>
+        private static readonly HashSet<string> s_legacyCommands = new(StringComparer.OrdinalIgnoreCase)
+            {
+                "cmd",
+                "cscript",
+                "find",
+                "sqlcmd",
+                "wscript",
+            };
+
+#if !UNIX
+        /// <summary>
+        /// List of known package managers pulled from the registry.
+        /// </summary>
+        private static readonly HashSet<string> s_knownPackageManagers = GetPackageManagerListFromRegistry();
+
+        /// <summary>
+        /// Indicates whether the Path Update feature is enabled in a given session.
+        /// PowerShell sessions could reuse the same thread, so we cannot cache the value with a thread static variable.
+        /// </summary>
+        private static readonly ConditionalWeakTable<ExecutionContext, string> s_pathUpdateFeatureEnabled = new();
+
+        private readonly bool _isPackageManager;
+        private string _originalUserEnvPath;
+        private string _originalSystemEnvPath;
+
+        /// <summary>
+        /// Gets the known package managers from the registry.
+        /// </summary>
+        private static HashSet<string> GetPackageManagerListFromRegistry()
+        {
+            // We only account for the first 8 package managers. This is the same behavior as in CMD.
+            const int MaxPackageManagerCount = 8;
+            const string RegKeyPath = @"Software\Microsoft\Command Processor\KnownPackageManagers";
+
+            string[] subKeyNames = null;
+            HashSet<string> retSet = null;
+
+            try
+            {
+                using RegistryKey key = Registry.LocalMachine.OpenSubKey(RegKeyPath);
+                subKeyNames = key?.GetSubKeyNames();
+            }
+            catch
+            {
+                return null;
+            }
+
+            if (subKeyNames is { Length: > 0 })
+            {
+                IEnumerable<string> names = subKeyNames.Length <= MaxPackageManagerCount
+                    ? subKeyNames
+                    : subKeyNames.Take(MaxPackageManagerCount);
+
+                retSet = new(names, StringComparer.OrdinalIgnoreCase);
+            }
+
+            return retSet;
+        }
+
+        /// <summary>
+        /// Check if the given name is a known package manager from the registry list.
+        /// </summary>
+        private static bool IsKnownPackageManager(string name)
+        {
+            if (s_knownPackageManagers is null)
+            {
+                return false;
+            }
+
+            if (s_knownPackageManagers.Contains(name))
+            {
+                return true;
+            }
+
+            int lastDotIndex = name.LastIndexOf('.');
+            if (lastDotIndex > 0)
+            {
+                string nameWithoutExt = name[..lastDotIndex];
+                if (s_knownPackageManagers.Contains(nameWithoutExt))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        /// <summary>
+        /// Check if the Path Update feature is enabled for the given session.
+        /// </summary>
+        private static bool IsPathUpdateFeatureEnabled(ExecutionContext context)
+        {
+            // We check only once per session.
+            if (s_pathUpdateFeatureEnabled.TryGetValue(context, out string value))
+            {
+                // The feature is enabled if the value is not null.
+                return value is { };
+            }
+
+            // Disable Path Update if 'EnvironmentProvider' is disabled in the current session, or the current session is restricted.
+            bool enabled = context.EngineSessionState.Providers.ContainsKey(EnvironmentProvider.ProviderName)
+                && !Utils.IsSessionRestricted(context);
+
+            // - Use the static empty string instance to indicate that the feature is enabled.
+            // - Use the null value to indicate that the feature is disabled.
+            s_pathUpdateFeatureEnabled.TryAdd(context, enabled ? string.Empty : null);
+            return enabled;
+        }
+
+        /// <summary>
+        /// Gets the added part of the new string compared to the old string.
+        /// </summary>
+        private static ReadOnlySpan<char> GetAddedPartOfString(string oldString, string newString)
+        {
+            if (oldString.Length >= newString.Length)
+            {
+                // Nothing added or something removed.
+                return ReadOnlySpan<char>.Empty;
+            }
+
+            int index = newString.IndexOf(oldString);
+            if (index is -1)
+            {
+                // The new and old strings are drastically different. Stop trying in this case.
+                return ReadOnlySpan<char>.Empty;
+            }
+
+            if (index > 0)
+            {
+                // Found the old string at non-zero offset, so something was prepended to the old string.
+                return newString.AsSpan(0, index);
+            }
+            else
+            {
+                // Found the old string at the beginning of the new string, so something was appended to the old string.
+                return newString.AsSpan(oldString.Length);
+            }
+        }
+
+        /// <summary>
+        /// Update the process-scope environment variable Path based on the changes in the user-scope and system-scope Path.
+        /// </summary>
+        /// <param name="oldUserPath">The old value of the user-scope Path retrieved from registry.</param>
+        /// <param name="oldSystemPath">The old value of the system-scope Path retrieved from registry.</param>
+        private static void UpdateProcessEnvPath(string oldUserPath, string oldSystemPath)
+        {
+            string newUserEnvPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.User);
+            string newSystemEnvPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
+            string procEnvPath = Environment.GetEnvironmentVariable("Path");
+
+            ReadOnlySpan<char> userPathChange = GetAddedPartOfString(oldUserPath, newUserEnvPath).Trim(';');
+            ReadOnlySpan<char> systemPathChange = GetAddedPartOfString(oldSystemPath, newSystemEnvPath).Trim(';');
+
+            // Add 2 to account for the path separators we may need to add.
+            int maxLength = procEnvPath.Length + userPathChange.Length + systemPathChange.Length + 2;
+            StringBuilder newPath = null;
+
+            if (userPathChange.Length > 0)
+            {
+                CreateNewProcEnvPath(userPathChange);
+            }
+
+            if (systemPathChange.Length > 0)
+            {
+                CreateNewProcEnvPath(systemPathChange);
+            }
+
+            if (newPath is { Length: > 0 })
+            {
+                // Update the process env Path.
+                Environment.SetEnvironmentVariable("Path", newPath.ToString());
+            }
+
+            // Helper method to create a new env Path string.
+            void CreateNewProcEnvPath(ReadOnlySpan<char> newChange)
+            {
+                newPath ??= new StringBuilder(procEnvPath, capacity: maxLength);
+
+                if (newPath.Length is 0 || newPath[^1] is ';')
+                {
+                    newPath.Append(newChange);
+                }
+                else
+                {
+                    newPath.Append(';').Append(newChange);
+                }
+            }
+        }
+#endif
+
         #region ctor/native command properties
 
         /// <summary>
@@ -181,7 +448,11 @@ internal NativeCommandProcessor(ApplicationInfo applicationInfo, ExecutionContex
             // Create input writer for providing input to the process.
             _inputWriter = new ProcessInputWriter(Command);
 
-            _isTranscribing = this.Command.Context.EngineHostInterface.UI.IsTranscribing;
+            _isTranscribing = context.EngineHostInterface.UI.IsTranscribing;
+
+#if !UNIX
+            _isPackageManager = IsKnownPackageManager(_applicationInfo.Name) && IsPathUpdateFeatureEnabled(context);
+#endif
         }
 
         /// <summary>
@@ -221,16 +492,16 @@ private string Path
             }
         }
 
+        internal NativeCommandProcessor DownStreamNativeCommand { get; set; }
+
+        internal bool UpstreamIsNativeCommand { get; set; }
+
+        internal BytePipe StdOutDestination { get; set; }
+
         #endregion ctor/native command properties
 
         #region parameter binder
 
-        /// <summary>
-        /// Variable which is set to true when prepare is called.
-        /// Parameter Binder should only be created after Prepare method is called.
-        /// </summary>
-        private bool _isPreparedCalled = false;
-
         /// <summary>
         /// Parameter binder used by this command processor.
         /// </summary>
@@ -247,8 +518,6 @@ private string Path
         /// </returns>
         internal ParameterBinderController NewParameterBinderController(InternalCommand command)
         {
-            Dbg.Assert(_isPreparedCalled, "parameter binder should not be created before prepared is called");
-
             if (_isMiniShell)
             {
                 _nativeParameterBinderController =
@@ -287,8 +556,6 @@ internal NativeCommandParameterBinderController NativeParameterBinderController
         /// </summary>
         internal override void Prepare(IDictionary psDefaultParameterValues)
         {
-            _isPreparedCalled = true;
-
             // Check if the application is minishell
             _isMiniShell = IsMiniShell();
 
@@ -306,7 +573,7 @@ internal override void Prepare(IDictionary psDefaultParameterValues)
             catch (Exception)
             {
                 // Do cleanup in case of exception
-                CleanUp();
+                CleanUp(killBackgroundProcess: true);
                 throw;
             }
         }
@@ -318,9 +585,14 @@ internal override void ProcessRecord()
         {
             try
             {
-                while (Read())
+                // If upstream is a native command it'll be writing directly to our stdin stream
+                // so we can skip reading here.
+                if (!UpstreamIsNativeCommand)
                 {
-                    _inputWriter.Add(Command.CurrentPipelineObject);
+                    while (Read())
+                    {
+                        _inputWriter.Add(Command.CurrentPipelineObject);
+                    }
                 }
 
                 ConsumeAvailableNativeProcessOutput(blocking: false);
@@ -328,7 +600,7 @@ internal override void ProcessRecord()
             catch (Exception)
             {
                 // Do cleanup in case of exception
-                CleanUp();
+                CleanUp(killBackgroundProcess: true);
                 throw;
             }
         }
@@ -336,7 +608,7 @@ internal override void ProcessRecord()
         /// <summary>
         /// Process object for the invoked application.
         /// </summary>
-        private System.Diagnostics.Process _nativeProcess;
+        private Process _nativeProcess;
 
         /// <summary>
         /// This is used for writing input to the process.
@@ -357,7 +629,7 @@ internal override void ProcessRecord()
 
         /// <summary>
         /// Indicate if we have called 'NotifyBeginApplication()' on the host, so that
-        /// we can call the counterpart 'NotifyEndApplication' as approriate.
+        /// we can call the counterpart 'NotifyEndApplication' as appropriate.
         /// </summary>
         private bool _hasNotifiedBeginApplication;
 
@@ -378,6 +650,59 @@ internal override void ProcessRecord()
         /// </summary>
         private readonly object _sync = new object();
 
+        private SemaphoreSlim _processInitialized;
+
+        internal async Task WaitForProcessInitializationAsync(CancellationToken cancellationToken)
+        {
+            SemaphoreSlim processInitialized = _processInitialized;
+            if (processInitialized is null)
+            {
+                lock (_sync)
+                {
+                    processInitialized = _processInitialized ??= new SemaphoreSlim(0, 1);
+                }
+            }
+
+            try
+            {
+                await processInitialized.WaitAsync(cancellationToken);
+            }
+            finally
+            {
+                processInitialized.Release();
+            }
+        }
+
+        /// <summary>
+        /// Creates a pipe representing the streaming of unprocessed bytes.
+        /// </summary>
+        /// <param name="stdout">
+        /// The stream that the pipe should represent. <see langword="true" />
+        /// for stdout, <see langword="false" /> for stdin.
+        /// </param>
+        /// <returns>A new byte pipe representing the specified stream.</returns>
+        internal BytePipe CreateBytePipe(bool stdout) => new NativeCommandProcessorBytePipe(this, stdout);
+
+        /// <summary>
+        /// Gets the specified base <see cref="Stream" /> for the underlying
+        /// <see cref="Process" />.
+        /// </summary>
+        /// <param name="stdout">
+        /// The stream that should be retrieved. <see langword="true" /> for
+        /// stdout, <see langword="false" /> for stdin.
+        /// </param>
+        /// <returns>The specified <see cref="Stream" />.</returns>
+        internal Stream GetStream(bool stdout)
+        {
+            Debug.Assert(
+                _nativeProcess is not null,
+                "Caller should verify that initialization has completed before attempting to get the underlying stream.");
+
+            return stdout
+                ? _nativeProcess.StandardOutput.BaseStream
+                : _nativeProcess.StandardInput.BaseStream;
+        }
+
         /// <summary>
         /// Executes the native command once all of the input has been gathered.
         /// </summary>
@@ -409,6 +734,11 @@ private void InitNativeProcess()
             // Get the start info for the process.
             ProcessStartInfo startInfo = GetProcessStartInfo(redirectOutput, redirectError, redirectInput, soloCommand);
 
+            // Send Telemetry indicating what argument passing mode we are in.
+            ApplicationInsightsTelemetry.SendExperimentalUseData(
+                "PSWindowsNativeCommandArgPassing",
+                NativeParameterBinderController.ArgumentPassingStyle.ToString());
+
 #if !UNIX
             string commandPath = this.Path.ToLowerInvariant();
             if (commandPath.EndsWith("powershell.exe") || commandPath.EndsWith("powershell_ise.exe"))
@@ -420,6 +750,12 @@ private void InitNativeProcess()
                 // must set UseShellExecute to false if we modify the environment block
                 startInfo.UseShellExecute = false;
             }
+
+            if (_isPackageManager)
+            {
+                _originalUserEnvPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.User);
+                _originalSystemEnvPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
+            }
 #endif
 
             if (this.Command.Context.CurrentPipelineStopping)
@@ -430,15 +766,14 @@ private void InitNativeProcess()
             Exception exceptionToRethrow = null;
             try
             {
-                // If this process is being run standalone, tell the host, which might want
-                // to save off the window title or other such state as might be tweaked by
-                // the native process
+                // Before start the executable, tell the host, which might want to save off the
+                // window title or other such state as might be tweaked by the native process.
+                Command.Context.EngineHostInterface.NotifyBeginApplication();
+                _hasNotifiedBeginApplication = true;
+
                 if (_runStandAlone)
                 {
-                    this.Command.Context.EngineHostInterface.NotifyBeginApplication();
-                    _hasNotifiedBeginApplication = true;
-
-                    // Also, store the Raw UI coordinates so that we can scrape the screen after
+                    // Store the Raw UI coordinates so that we can scrape the screen after
                     // if we are transcribing.
                     if (_isTranscribing && (s_supportScreenScrape == true))
                     {
@@ -467,13 +802,20 @@ private void InitNativeProcess()
                     }
                     catch (Win32Exception)
                     {
-                        // On Unix platforms, nothing can be further done, so just throw
+#if UNIX
+                        // On Unix platforms, nothing can be further done, so just throw.
+                        throw;
+#else
                         // On headless Windows SKUs, there is no shell to fall back to, so just throw
-                        if (!Platform.IsWindowsDesktop) { throw; }
+                        if (!Platform.IsWindowsDesktop)
+                        {
+                            throw;
+                        }
 
                         // on Windows desktops, see if there is a file association for this command. If so then we'll use that.
-                        string executable = FindExecutable(startInfo.FileName);
+                        string executable = Interop.Windows.FindExecutable(startInfo.FileName);
                         bool notDone = true;
+                        // check to see what mode we should be in for argument passing
                         if (!string.IsNullOrEmpty(executable))
                         {
                             isWindowsApplication = IsWindowsApplication(executable);
@@ -485,7 +827,17 @@ private void InitNativeProcess()
 
                             string oldArguments = startInfo.Arguments;
                             string oldFileName = startInfo.FileName;
-                            startInfo.Arguments = "\"" + startInfo.FileName + "\" " + startInfo.Arguments;
+                            // Check to see whether this executable should be using Legacy mode argument parsing
+                            bool useSpecialArgumentPassing = UseSpecialArgumentPassing(oldFileName);
+                            if (useSpecialArgumentPassing)
+                            {
+                                // codeql[cs/microsoft/command-line-injection] - This is expected PowerShell behavior where user inputted paths are supported for the context of this method and the path portion of the argument is escaped. The user assumes trust for the file path specified on the user's system to start process for, and in the case of remoting, restricted remoting security guidelines should be used.
+                                startInfo.Arguments = "\"" + oldFileName + "\" " + startInfo.Arguments;
+                            }
+                            else
+                            {
+                                startInfo.ArgumentList.Insert(0, oldFileName);
+                            }
                             startInfo.FileName = executable;
                             try
                             {
@@ -495,7 +847,16 @@ private void InitNativeProcess()
                             catch (Win32Exception)
                             {
                                 // Restore the old filename and arguments to try shell execute last...
-                                startInfo.Arguments = oldArguments;
+                                if (useSpecialArgumentPassing)
+                                {
+                                    startInfo.Arguments = oldArguments;
+                                }
+                                else
+                                {
+                                    startInfo.ArgumentList.RemoveAt(0);
+                                }
+
+                                // codeql[cs/microsoft/command-line-injection-shell-execution] - This is expected PowerShell behavior where user inputted paths are supported for the context of this method. The user assumes trust for the file path specified on the user's system to retrieve process info for, and in the case of remoting, restricted remoting security guidelines should be used.
                                 startInfo.FileName = oldFileName;
                             }
                         }
@@ -517,6 +878,13 @@ private void InitNativeProcess()
                                 throw;
                             }
                         }
+#endif
+                    }
+
+                    if (UpstreamIsNativeCommand)
+                    {
+                        _processInitialized ??= new SemaphoreSlim(0, 1);
+                        _processInitialized.Release();
                     }
                 }
 
@@ -550,7 +918,7 @@ private void InitNativeProcess()
 
                         lock (_sync)
                         {
-                            if (!_stopped)
+                            if (!_stopped && !UpstreamIsNativeCommand)
                             {
                                 _inputWriter.Start(_nativeProcess, inputFormat);
                             }
@@ -599,6 +967,8 @@ private void InitNativeProcess()
             }
         }
 
+        private AsyncByteStreamTransfer _stdOutByteTransfer;
+
         private void InitOutputQueue()
         {
             // if output is redirected, start reading output of process in queue.
@@ -608,9 +978,32 @@ private void InitOutputQueue()
                 {
                     if (!_stopped)
                     {
+                        if (CommandRuntime.ErrorMergeTo is MshCommandRuntime.MergeDataStream.Output)
+                        {
+                            StdOutDestination = null;
+                            if (DownStreamNativeCommand is not null)
+                            {
+                                DownStreamNativeCommand.UpstreamIsNativeCommand = false;
+                                DownStreamNativeCommand = null;
+                            }
+                        }
+
                         _nativeProcessOutputQueue = new BlockingCollection<ProcessOutputObject>();
                         // we don't assign the handler to anything, because it's used only for objects marshaling
-                        new ProcessOutputHandler(_nativeProcess, _nativeProcessOutputQueue);
+                        BytePipe stdOutDestination = StdOutDestination ?? DownStreamNativeCommand?.CreateBytePipe(stdout: false);
+
+                        BytePipe stdOutSource = null;
+                        if (stdOutDestination is not null)
+                        {
+                            stdOutSource = CreateBytePipe(stdout: true);
+                        }
+
+                        _ = new ProcessOutputHandler(
+                            _nativeProcess,
+                            _nativeProcessOutputQueue,
+                            stdOutDestination,
+                            stdOutSource,
+                            out _stdOutByteTransfer);
                     }
                 }
             }
@@ -641,12 +1034,9 @@ private ProcessOutputObject DequeueProcessOutput(bool blocking)
 
                 return null;
             }
-            else
-            {
-                ProcessOutputObject record = null;
-                _nativeProcessOutputQueue.TryTake(out record);
-                return record;
-            }
+
+            _nativeProcessOutputQueue.TryTake(out ProcessOutputObject record);
+            return record;
         }
 
         /// <summary>
@@ -654,21 +1044,38 @@ private ProcessOutputObject DequeueProcessOutput(bool blocking)
         /// </summary>
         private void ConsumeAvailableNativeProcessOutput(bool blocking)
         {
-            if (!_isRunningInBackground)
+            if (_isRunningInBackground)
+            {
+                return;
+            }
+
+            bool stdOutRedirected = _nativeProcess.StartInfo.RedirectStandardOutput;
+            bool stdErrRedirected = _nativeProcess.StartInfo.RedirectStandardError;
+            if (stdOutRedirected && _stdOutByteTransfer is not null)
             {
-                if (_nativeProcess.StartInfo.RedirectStandardOutput || _nativeProcess.StartInfo.RedirectStandardError)
+                if (blocking)
                 {
-                    ProcessOutputObject record;
-                    while ((record = DequeueProcessOutput(blocking)) != null)
-                    {
-                        if (this.Command.Context.CurrentPipelineStopping)
-                        {
-                            this.StopProcessing();
-                            return;
-                        }
+                    _stdOutByteTransfer.EOF.GetAwaiter().GetResult();
+                }
+
+                if (!stdErrRedirected)
+                {
+                    return;
+                }
+            }
 
-                        ProcessOutputRecord(record);
+            if (stdOutRedirected || stdErrRedirected)
+            {
+                ProcessOutputObject record;
+                while ((record = DequeueProcessOutput(blocking)) != null)
+                {
+                    if (this.Command.Context.CurrentPipelineStopping)
+                    {
+                        this.StopProcessing();
+                        return;
                     }
+
+                    ProcessOutputRecord(record);
                 }
             }
         }
@@ -681,12 +1088,22 @@ internal override void Complete()
                 if (!_isRunningInBackground)
                 {
                     // Wait for input writer to finish.
-                    _inputWriter.Done();
+                    if (!UpstreamIsNativeCommand || _nativeProcess.StartInfo.RedirectStandardError)
+                    {
+                        _inputWriter.Done();
+                    }
 
                     // read all the available output in the blocking way
                     ConsumeAvailableNativeProcessOutput(blocking: true);
                     _nativeProcess.WaitForExit();
 
+#if !UNIX
+                    if (_isPackageManager)
+                    {
+                        UpdateProcessEnvPath(_originalUserEnvPath, _originalSystemEnvPath);
+                    }
+#endif
+
                     // Capture screen output if we are transcribing and running stand alone
                     if (_isTranscribing && (s_supportScreenScrape == true) && _runStandAlone)
                     {
@@ -725,8 +1142,63 @@ internal override void Complete()
                     }
 
                     this.Command.Context.SetVariable(SpecialVariables.LastExitCodeVarPath, _nativeProcess.ExitCode);
-                    if (_nativeProcess.ExitCode != 0)
-                        this.commandRuntime.PipelineProcessor.ExecutionFailed = true;
+                    if (_nativeProcess.ExitCode == 0)
+                    {
+                        return;
+                    }
+
+                    this.commandRuntime.PipelineProcessor.ExecutionFailed = true;
+
+                    // We send telemetry information only if the feature is enabled.
+                    // This shouldn't be done once, because it's a run-time check we should send telemetry every time.
+                    // Report on the following conditions:
+                    // - The variable is not present
+                    // - The value is not set (variable is null)
+                    // - The value is set to true or false
+                    bool useDefaultSetting;
+                    bool nativeErrorActionPreferenceSetting = Command.Context.GetBooleanPreference(
+                        SpecialVariables.PSNativeCommandUseErrorActionPreferenceVarPath,
+                        defaultPref: false,
+                        out useDefaultSetting);
+
+                    // The variable is unset
+                    if (useDefaultSetting)
+                    {
+                        ApplicationInsightsTelemetry.SendExperimentalUseData("PSNativeCommandErrorActionPreference", "unset");
+                        return;
+                    }
+
+                    // Send the value that was set.
+                    ApplicationInsightsTelemetry.SendExperimentalUseData("PSNativeCommandErrorActionPreference", nativeErrorActionPreferenceSetting.ToString());
+
+                    // if it was explicitly set to false, return
+                    if (!nativeErrorActionPreferenceSetting)
+                    {
+                        return;
+                    }
+
+                    const string errorId = nameof(CommandBaseStrings.ProgramExitedWithNonZeroCode);
+#if UNIX
+                    string hexFormatStr = "0x{0:X2}";
+#else
+                    string hexFormatStr = "0x{0:X8}";
+#endif
+
+                    string errorMsg = StringUtil.Format(
+                        CommandBaseStrings.ProgramExitedWithNonZeroCode,
+                        NativeCommandName,
+                        _nativeProcess.ExitCode,
+                        string.Format(CultureInfo.InvariantCulture, hexFormatStr, _nativeProcess.ExitCode));
+
+                    var exception = new NativeCommandExitException(
+                        Path,
+                        _nativeProcess.ExitCode,
+                        _nativeProcess.Id,
+                        errorMsg,
+                        errorId);
+
+                    var errorRecord = new ErrorRecord(exception, errorId, ErrorCategory.NotSpecified, targetObject: Path);
+                    this.commandRuntime._WriteErrorSkipAllowCheck(errorRecord);
                 }
             }
             catch (Win32Exception e)
@@ -745,7 +1217,7 @@ internal override void Complete()
             finally
             {
                 // Do some cleanup
-                CleanUp();
+                CleanUp(killBackgroundProcess: false);
             }
 
             // An exception was thrown while attempting to run the program
@@ -936,27 +1408,19 @@ private static void KillChildProcesses(int parentId, ProcessWithParentId[] curre
         /// </summary>
         /// <param name="fileName"></param>
         /// <returns></returns>
-        [ArchitectureSensitive]
         private static bool IsWindowsApplication(string fileName)
         {
 #if UNIX
             return false;
 #else
-            if (!Platform.IsWindowsDesktop) { return false; }
-
-            // SHGetFileInfo() does not understand reparse points and returns 0 ("non exe or error")
-            // so we are trying to get a real path before.
-            // It is a workaround for Microsoft Store applications.
-            string realPath = Microsoft.PowerShell.Commands.InternalSymbolicLinkLinkCodeMethods.WinInternalGetTarget(fileName);
-            if (realPath is not null)
+            if (!Platform.IsWindowsDesktop)
             {
-                fileName = realPath;
+                return false;
             }
 
-            SHFILEINFO shinfo = new SHFILEINFO();
-            IntPtr type = SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_EXETYPE);
+            int type = Interop.Windows.SHGetFileInfo(fileName);
 
-            switch ((int)type)
+            switch (type)
             {
                 case 0x0:
                     // 0x0 = not an exe
@@ -987,7 +1451,11 @@ internal void StopProcessing()
         {
             lock (_sync)
             {
-                if (_stopped) return;
+                if (_stopped)
+                {
+                    return;
+                }
+
                 _stopped = true;
             }
 
@@ -996,8 +1464,12 @@ internal void StopProcessing()
                 if (!_runStandAlone)
                 {
                     // Stop input writer
-                    _inputWriter.Stop();
+                    if (!UpstreamIsNativeCommand)
+                    {
+                        _inputWriter.Stop();
+                    }
 
+                    _stdOutByteTransfer?.Dispose();
                     KillProcess(_nativeProcess);
                 }
             }
@@ -1008,21 +1480,34 @@ internal void StopProcessing()
         /// <summary>
         /// Aggressively clean everything up...
         /// </summary>
-        private void CleanUp()
+        /// <param name="killBackgroundProcess">If set, also terminate background process.</param>
+        private void CleanUp(bool killBackgroundProcess)
         {
             // We need to call 'NotifyEndApplication' as appropriate during cleanup
             if (_hasNotifiedBeginApplication)
             {
-                this.Command.Context.EngineHostInterface.NotifyEndApplication();
+                Command.Context.EngineHostInterface.NotifyEndApplication();
             }
 
             try
             {
-                // Dispose the process if it's already created
-                if (_nativeProcess != null)
+                // on Unix, we need to kill the process (if not running in background) to ensure it terminates,
+                // as Dispose() merely closes the redirected streams and the process does not exit.
+                // However, on Windows, a winexe like notepad should continue running so we don't want to kill it.
+#if UNIX
+                if (killBackgroundProcess || !_isRunningInBackground)
                 {
-                    _nativeProcess.Dispose();
+                    try
+                    {
+                        _nativeProcess?.Kill();
+                    }
+                    catch
+                    {
+                        // Ignore all exceptions since it is cleanup.
+                    }
                 }
+#endif
+                _nativeProcess?.Dispose();
             }
             catch (Exception)
             {
@@ -1038,7 +1523,7 @@ private void ProcessOutputRecord(ProcessOutputObject outputValue)
                 ErrorRecord record = outputValue.Data as ErrorRecord;
                 Dbg.Assert(record != null, "ProcessReader should ensure that data is ErrorRecord");
                 record.SetInvocationInfo(this.Command.MyInvocation);
-                this.commandRuntime._WriteErrorSkipAllowCheck(record, isNativeError: true);
+                this.commandRuntime._WriteErrorSkipAllowCheck(record, isFromNativeStdError: true);
             }
             else if (outputValue.Stream == MinishellStream.Output)
             {
@@ -1096,56 +1581,83 @@ private void ProcessOutputRecord(ProcessOutputObject outputValue)
         }
 
         /// <summary>
-        /// Gets the start info for process.
+        /// Get whether we should treat this executable with special handling and use the legacy passing style.
         /// </summary>
-        /// <param name="redirectOutput"></param>
-        /// <param name="redirectError"></param>
-        /// <param name="redirectInput"></param>
-        /// <param name="soloCommand"></param>
-        /// <returns></returns>
-        private ProcessStartInfo GetProcessStartInfo(bool redirectOutput, bool redirectError, bool redirectInput, bool soloCommand)
+        /// <param name="filePath"></param>
+        private bool UseSpecialArgumentPassing(string filePath) =>
+            NativeParameterBinderController.ArgumentPassingStyle switch
+            {
+                NativeArgumentPassingStyle.Legacy => true,
+                NativeArgumentPassingStyle.Windows => ShouldUseLegacyPassingStyle(filePath),
+                _ => false
+            };
+
+        /// <summary>
+        /// Gets the ProcessStartInfo for process.
+        /// </summary>
+        /// <param name="redirectOutput">A boolean that indicates that, when true, output from the process is redirected to a stream, and otherwise is sent to stdout.</param>
+        /// <param name="redirectError">A boolean that indicates that, when true, error output from the process is redirected to a stream, and otherwise is sent to stderr.</param>
+        /// <param name="redirectInput">A boolean that indicates that, when true, input to the process is taken from a stream, and otherwise is taken from stdin.</param>
+        /// <param name="soloCommand">A boolean that indicates, when true, that the command to be executed is not part of a pipeline, and otherwise indicates that it is.</param>
+        /// <returns>A ProcessStartInfo object which is the base of the native invocation.</returns>
+        private ProcessStartInfo GetProcessStartInfo(
+            bool redirectOutput,
+            bool redirectError,
+            bool redirectInput,
+            bool soloCommand)
         {
-            ProcessStartInfo startInfo = new ProcessStartInfo();
-            startInfo.FileName = this.Path;
+            var startInfo = new ProcessStartInfo
+            {
+                // codeql[cs/microsoft/command-line-injection-shell-execution] - This is expected PowerShell behavior where user inputted paths are supported for the context of this method. The user assumes trust for the file path specified on the user's system to retrieve process info for, and in the case of remoting, restricted remoting security guidelines should be used.
+                FileName = this.Path
+            };
 
-            if (IsExecutable(this.Path))
+            if (!IsExecutable(this.Path))
             {
-                startInfo.UseShellExecute = false;
-                if (redirectInput)
+                if (Platform.IsNanoServer || Platform.IsIoT)
                 {
-                    startInfo.RedirectStandardInput = true;
+                    // Shell doesn't exist on headless SKUs, so documents cannot be associated with an application.
+                    // Therefore, we cannot run document in this case.
+                    throw InterpreterError.NewInterpreterException(
+                        this.Path,
+                        typeof(RuntimeException),
+                        this.Command.InvocationExtent,
+                        "CantActivateDocumentInPowerShellCore",
+                        ParserStrings.CantActivateDocumentInPowerShellCore,
+                        this.Path);
                 }
 
-                if (redirectOutput)
+                // We only want to ShellExecute something that is standalone...
+                if (!soloCommand)
                 {
-                    startInfo.RedirectStandardOutput = true;
-                    startInfo.StandardOutputEncoding = Console.OutputEncoding;
+                    throw InterpreterError.NewInterpreterException(
+                        this.Path,
+                        typeof(RuntimeException),
+                        this.Command.InvocationExtent,
+                        "CantActivateDocumentInPipeline",
+                        ParserStrings.CantActivateDocumentInPipeline,
+                        this.Path);
                 }
 
-                if (redirectError)
-                {
-                    startInfo.RedirectStandardError = true;
-                    startInfo.StandardErrorEncoding = Console.OutputEncoding;
-                }
+                startInfo.UseShellExecute = true;
             }
             else
             {
-                if (Platform.IsNanoServer || Platform.IsIoT)
+                startInfo.UseShellExecute = false;
+                startInfo.RedirectStandardInput = redirectInput;
+
+                Encoding outputEncoding = GetOutputEncoding();
+                if (redirectOutput)
                 {
-                    // Shell doesn't exist on headless SKUs, so documents cannot be associated with an application.
-                    // Therefore, we cannot run document in this case.
-                    throw InterpreterError.NewInterpreterException(this.Path, typeof(RuntimeException),
-                        this.Command.InvocationExtent, "CantActivateDocumentInPowerShellCore", ParserStrings.CantActivateDocumentInPowerShellCore, this.Path);
+                    startInfo.RedirectStandardOutput = true;
+                    startInfo.StandardOutputEncoding = outputEncoding;
                 }
 
-                // We only want to ShellExecute something that is standalone...
-                if (!soloCommand)
+                if (redirectError)
                 {
-                    throw InterpreterError.NewInterpreterException(this.Path, typeof(RuntimeException),
-                        this.Command.InvocationExtent, "CantActivateDocumentInPipeline", ParserStrings.CantActivateDocumentInPipeline, this.Path);
+                    startInfo.RedirectStandardError = true;
+                    startInfo.StandardErrorEncoding = outputEncoding;
                 }
-
-                startInfo.UseShellExecute = true;
             }
 
             // For minishell value of -outoutFormat parameter depends on value of redirectOutput.
@@ -1153,22 +1665,86 @@ private ProcessStartInfo GetProcessStartInfo(bool redirectOutput, bool redirectE
             if (_isMiniShell)
             {
                 MinishellParameterBinderController mpc = (MinishellParameterBinderController)NativeParameterBinderController;
-                mpc.BindParameters(arguments, redirectOutput, this.Command.Context.EngineHostInterface.Name);
+                mpc.BindParameters(arguments, startInfo.RedirectStandardOutput, this.Command.Context.EngineHostInterface.Name);
                 startInfo.CreateNoWindow = mpc.NonInteractive;
             }
 
-            startInfo.Arguments = NativeParameterBinderController.Arguments;
-
             ExecutionContext context = this.Command.Context;
 
+            // We provide the user a way to select the new behavior via a new preference variable
+            using (ParameterBinderBase.bindingTracer.TraceScope("BIND NAMED native application line args [{0}]", this.Path))
+            {
+                // We need to check if we're using legacy argument passing or it's a special case.
+                if (UseSpecialArgumentPassing(startInfo.FileName))
+                {
+                    using (ParameterBinderBase.bindingTracer.TraceScope("BIND argument [{0}]", NativeParameterBinderController.Arguments))
+                    {
+                        // codeql[cs/microsoft/command-line-injection ] - This is intended PowerShell behavior as NativeParameterBinderController.Arguments is what the native parameter binder generates based on the user input when invoking the command and cannot be injected externally.
+                        startInfo.Arguments = NativeParameterBinderController.Arguments;
+                    }
+                }
+                else
+                {
+                    // Use new API for running native application
+                    int position = 0;
+                    foreach (string nativeArgument in NativeParameterBinderController.ArgumentList)
+                    {
+                        if (nativeArgument != null)
+                        {
+                            using (ParameterBinderBase.bindingTracer.TraceScope("BIND cmd line arg [{0}] to position [{1}]", nativeArgument, position++))
+                            {
+                                startInfo.ArgumentList.Add(nativeArgument);
+                            }
+                        }
+                    }
+                }
+            }
+
             // Start command in the current filesystem directory
             string rawPath =
                 context.EngineSessionState.GetNamespaceCurrentLocation(
                     context.ProviderNames.FileSystem).ProviderPath;
-            startInfo.WorkingDirectory = WildcardPattern.Unescape(rawPath);
+
+            // Only set this if the PowerShell's current working directory still exists.
+            if (Directory.Exists(rawPath))
+            {
+                startInfo.WorkingDirectory = WildcardPattern.Unescape(rawPath);
+            }
+
             return startInfo;
         }
 
+#nullable enable
+        /// <summary>
+        /// Gets the encoding to use for a process' output/error pipes.
+        /// </summary>
+        /// <returns>The encoding to use for the process output.</returns>
+        private Encoding GetOutputEncoding()
+        {
+            Encoding? applicationOutputEncoding = Context.GetVariableValue(
+                    SpecialVariables.PSApplicationOutputEncodingVarPath) as Encoding;
+
+            return applicationOutputEncoding ?? Console.OutputEncoding;
+        }
+#nullable disable
+
+        /// <summary>
+        /// Determine if we have a special file which will change the way native argument passing
+        /// is done on Windows. We use legacy behavior for cmd.exe, .bat, .cmd files.
+        /// </summary>
+        /// <param name="filePath">The file to use when checking how to pass arguments.</param>
+        /// <returns>A boolean indicating what passing style should be used.</returns>
+        private static bool ShouldUseLegacyPassingStyle(string filePath)
+        {
+            if (string.IsNullOrEmpty(filePath))
+            {
+                return false;
+            }
+
+            return s_legacyFileExtensions.Contains(IO.Path.GetExtension(filePath))
+                || s_legacyCommands.Contains(IO.Path.GetFileNameWithoutExtension(filePath));
+        }
+
         private static bool IsDownstreamOutDefault(Pipe downstreamPipe)
         {
             Diagnostics.Assert(downstreamPipe != null, "Caller makes sure the passed-in parameter is not null.");
@@ -1224,15 +1800,19 @@ private void CalculateIORedirection(bool isWindowsApplication, out bool redirect
                 //    $powershell.AddScript('ipconfig.exe')
                 //    $powershell.AddCommand('Out-Default')
                 //    $powershell.Invoke())
-                // we should not count it as a redirection.
-                if (IsDownstreamOutDefault(this.commandRuntime.OutputPipe))
+                // we should not count it as a redirection. Unless the native command has its stdout redirected
+                // for example:
+                //    cmd.exe /c "echo test" > somefile.log
+                // in that case we want to keep output redirection even though Out-Default is the only
+                // downstream command.
+                if (IsDownstreamOutDefault(this.commandRuntime.OutputPipe) && StdOutDestination is null)
                 {
                     redirectOutput = false;
                 }
             }
 
             // See if the error output stream has been redirected, either through an explicit 2> foo.txt or
-            // my merging error into output through 2>&1.
+            // by merging error into output through 2>&1.
             if (CommandRuntime.ErrorMergeTo != MshCommandRuntime.MergeDataStream.Output)
             {
                 // If the error output pipe is the default outputter, for example, calling the native command from command-line host,
@@ -1242,7 +1822,9 @@ private void CalculateIORedirection(bool isWindowsApplication, out bool redirect
                 //    $powershell.AddScript('ipconfig.exe')
                 //    $powershell.AddCommand('Out-Default')
                 //    $powershell.Invoke())
-                // we should not count that as a redirection.
+                // we should not count that as a redirection. We do not need to worry
+                // about StdOutDestination here as if error is redirected then it's assumed
+                // to be text based and Out-File will be added to the pipeline instead.
                 if (IsDownstreamOutDefault(this.commandRuntime.ErrorOutputPipe))
                 {
                     redirectError = false;
@@ -1290,6 +1872,9 @@ private void CalculateIORedirection(bool isWindowsApplication, out bool redirect
             {
                 if (s_supportScreenScrape == null)
                 {
+#if UNIX
+                    s_supportScreenScrape = false;
+#else
                     try
                     {
                         _startPosition = this.Command.Context.EngineHostInterface.UI.RawUI.CursorPosition;
@@ -1301,6 +1886,7 @@ private void CalculateIORedirection(bool isWindowsApplication, out bool redirect
                     {
                         s_supportScreenScrape = false;
                     }
+#endif
                 }
 
                 // if screen scraping isn't supported, we enable redirection so that the output is still transcribed
@@ -1336,7 +1922,7 @@ private bool IsExecutable(string path)
             }
             else
             {
-                extensionList = pathext.Split(Utils.Separators.Semicolon);
+                extensionList = pathext.Split(';');
             }
 
             foreach (string extension in extensionList)
@@ -1351,91 +1937,10 @@ private bool IsExecutable(string path)
 #endif
         }
 
-        #region Interop for FindExecutable...
-
-        // Constant used to determine the buffer size for a path
-        // when looking for an executable. MAX_PATH is defined as 260
-        // so this is much larger than what should be permitted
-        private const int MaxExecutablePath = 1024;
-
-        // The FindExecutable API is defined in shellapi.h as
-        // SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, __out_ecount(MAX_PATH) LPWSTR lpResult);
-        // HINSTANCE is void* so we need to use IntPtr as API return value.
-
-        [DllImport("shell32.dll", EntryPoint = "FindExecutable")]
-        [SuppressMessage("Microsoft.Globalization", "CA2101:SpecifyMarshalingForPInvokeStringArguments", MessageId = "0")]
-        [SuppressMessage("Microsoft.Globalization", "CA2101:SpecifyMarshalingForPInvokeStringArguments", MessageId = "1")]
-        [SuppressMessage("Microsoft.Globalization", "CA2101:SpecifyMarshalingForPInvokeStringArguments", MessageId = "2")]
-        private static extern IntPtr FindExecutableW(
-          string fileName, string directoryPath, StringBuilder pathFound);
-
-        [ArchitectureSensitive]
-        private static string FindExecutable(string filename)
-        {
-            // Preallocate a
-            StringBuilder objResultBuffer = new StringBuilder(MaxExecutablePath);
-            IntPtr resultCode = (IntPtr)0;
-
-            try
-            {
-                resultCode = FindExecutableW(filename, string.Empty, objResultBuffer);
-            }
-            catch (System.IndexOutOfRangeException e)
-            {
-                // If we got an index-out-of-range exception here, it's because
-                // of a buffer overrun error so we fail fast instead of
-                // continuing to run in an possibly unstable environment....
-                Environment.FailFast(e.Message, e);
-            }
-
-            // If FindExecutable returns a result >= 32, then it succeeded
-            // and we return the string that was found, otherwise we
-            // return null.
-            if ((long)resultCode >= 32)
-            {
-                return objResultBuffer.ToString();
-            }
-
-            return null;
-        }
-
-        #endregion
-
-        #region Interop for SHGetFileInfo
-
-        private const int SCS_32BIT_BINARY = 0;  // A 32-bit Windows-based application
-        private const int SCS_DOS_BINARY = 1;  // An MS-DOS - based application
-        private const int SCS_WOW_BINARY = 2;  // A 16-bit Windows-based application
-        private const int SCS_PIF_BINARY = 3;  // A PIF file that executes an MS-DOS - based application
-        private const int SCS_POSIX_BINARY = 4;  // A POSIX - based application
-        private const int SCS_OS216_BINARY = 5;  // A 16-bit OS/2-based application
-        private const int SCS_64BIT_BINARY = 6;  // A 64-bit Windows-based application.
-
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-        private struct SHFILEINFO
-        {
-            public IntPtr hIcon;
-            public int iIcon;
-            public uint dwAttributes;
-
-            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
-            public string szDisplayName;
-
-            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
-            public string szTypeName;
-        }
-
-        private const uint SHGFI_EXETYPE = 0x000002000; // flag used to ask to return exe type
-
-        [DllImport("shell32.dll", CharSet = CharSet.Unicode)]
-        private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes,
-            ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
-
-        #endregion
-
         #region Minishell Interop
 
         private bool _isMiniShell = false;
+
         /// <summary>
         /// Returns true if native command being invoked is mini-shell.
         /// </summary>
@@ -1478,7 +1983,19 @@ internal class ProcessOutputHandler
         private bool _isXmlCliError;
         private readonly string _processFileName;
 
+        private readonly AsyncByteStreamTransfer _stdOutDrainer;
+
         public ProcessOutputHandler(Process process, BlockingCollection<ProcessOutputObject> queue)
+            : this(process, queue, null, null, out _)
+        {
+        }
+
+        public ProcessOutputHandler(
+            Process process,
+            BlockingCollection<ProcessOutputObject> queue,
+            BytePipe stdOutDestination,
+            BytePipe stdOutSource,
+            out AsyncByteStreamTransfer stdOutDrainer)
         {
             Debug.Assert(process.StartInfo.RedirectStandardOutput || process.StartInfo.RedirectStandardError, "Caller should redirect at least one stream");
             _refCount = 0;
@@ -1487,19 +2004,17 @@ public ProcessOutputHandler(Process process, BlockingCollection<ProcessOutputObj
 
             // we incrementing refCount on the same thread and before running any processing
             // so it's safe to do it without Interlocked.
-            if (process.StartInfo.RedirectStandardOutput) { _refCount++; }
-
-            if (process.StartInfo.RedirectStandardError) { _refCount++; }
+            if (process.StartInfo.RedirectStandardOutput && stdOutDestination is null)
+            {
+                _refCount++;
+            }
 
-            // once we have _refCount, we can start processing
-            if (process.StartInfo.RedirectStandardOutput)
+            if (process.StartInfo.RedirectStandardError)
             {
-                _isFirstOutput = true;
-                _isXmlCliOutput = false;
-                process.OutputDataReceived += OutputHandler;
-                process.BeginOutputReadLine();
+                _refCount++;
             }
 
+            // once we have _refCount, we can start processing
             if (process.StartInfo.RedirectStandardError)
             {
                 _isFirstError = true;
@@ -1507,6 +2022,25 @@ public ProcessOutputHandler(Process process, BlockingCollection<ProcessOutputObj
                 process.ErrorDataReceived += ErrorHandler;
                 process.BeginErrorReadLine();
             }
+
+            stdOutDrainer = null;
+
+            if (!process.StartInfo.RedirectStandardOutput)
+            {
+                return;
+            }
+
+            if (stdOutDestination is null)
+            {
+                _isFirstOutput = true;
+                _isXmlCliOutput = false;
+                process.OutputDataReceived += OutputHandler;
+                process.BeginOutputReadLine();
+                return;
+            }
+
+            stdOutDrainer = _stdOutDrainer = stdOutDestination.Bind(stdOutSource);
+            stdOutDrainer.BeginReadChunks();
         }
 
         private void decrementRefCount()
@@ -1745,14 +2279,27 @@ internal void Add(object input)
                 return;
             }
 
-            if (_inputFormat == NativeCommandIOFormat.Text)
+            if (_inputFormat is not NativeCommandIOFormat.Text)
             {
-                AddTextInput(input);
+                AddXmlInput(input);
+                return;
             }
-            else // Xml
+
+            object baseObjInput = PSObject.Base(input);
+
+            if (baseObjInput is byte[] bytes)
             {
-                AddXmlInput(input);
+                _streamWriter.BaseStream.Write(bytes, 0, bytes.Length);
+                return;
+            }
+
+            if (baseObjInput is byte b)
+            {
+                _streamWriter.BaseStream.WriteByte(b);
+                return;
             }
+
+            AddTextInput(input);
         }
 
         private void AddTextInput(object input)
@@ -1821,11 +2368,12 @@ internal void Start(Process process, NativeCommandIOFormat inputFormat)
             // Get the encoding for writing to native command. Note we get the Encoding
             // from the current scope so a script or function can use a different encoding
             // than global value.
-            Encoding pipeEncoding = _command.Context.GetVariableValue(SpecialVariables.OutputEncodingVarPath) as System.Text.Encoding ??
-                                    Utils.utf8NoBom;
+            Encoding outputEncoding = _command.Context.GetVariableValue(SpecialVariables.OutputEncodingVarPath) as Encoding;
 
-            _streamWriter = new StreamWriter(process.StandardInput.BaseStream, pipeEncoding);
-            _streamWriter.AutoFlush = true;
+            _streamWriter = new StreamWriter(process.StandardInput.BaseStream, outputEncoding ?? Encoding.Default)
+            {
+                AutoFlush = true
+            };
 
             _inputFormat = inputFormat;
 
@@ -1892,10 +2440,7 @@ internal void Done()
         {
             if (_inputFormat == NativeCommandIOFormat.Xml)
             {
-                if (_xmlSerializer != null)
-                {
-                    _xmlSerializer.Done();
-                }
+                _xmlSerializer?.Done();
             }
             else // Text
             {
@@ -1923,58 +2468,6 @@ internal static class ConsoleVisibility
         /// </summary>
         public static bool AlwaysCaptureApplicationIO { get; set; }
 
-        [DllImport("Kernel32.dll")]
-        internal static extern IntPtr GetConsoleWindow();
-
-        internal const int SW_HIDE = 0;
-        internal const int SW_SHOWNORMAL = 1;
-        internal const int SW_NORMAL = 1;
-        internal const int SW_SHOWMINIMIZED = 2;
-        internal const int SW_SHOWMAXIMIZED = 3;
-        internal const int SW_MAXIMIZE = 3;
-        internal const int SW_SHOWNOACTIVATE = 4;
-        internal const int SW_SHOW = 5;
-        internal const int SW_MINIMIZE = 6;
-        internal const int SW_SHOWMINNOACTIVE = 7;
-        internal const int SW_SHOWNA = 8;
-        internal const int SW_RESTORE = 9;
-        internal const int SW_SHOWDEFAULT = 10;
-        internal const int SW_FORCEMINIMIZE = 11;
-        internal const int SW_MAX = 11;
-
-        /// <summary>
-        /// Code to control the display properties of the a window...
-        /// </summary>
-        /// <param name="hWnd">The window to show...</param>
-        /// <param name="nCmdShow">The command to do.</param>
-        /// <returns>True if it was successful.</returns>
-        [DllImport("user32.dll")]
-        internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
-
-        /// <summary>
-        /// Code to allocate a console...
-        /// </summary>
-        /// <returns>True if a console was created...</returns>
-        [DllImport("kernel32.dll", SetLastError = true)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool AllocConsole();
-
-        /// <summary>
-        /// Called to save the foreground window before allocating a hidden console window.
-        /// </summary>
-        /// <returns>A handle to the foreground window.</returns>
-        [DllImport("user32.dll")]
-        private static extern IntPtr GetForegroundWindow();
-
-        /// <summary>
-        /// Called to restore the foreground window after allocating a hidden console window.
-        /// </summary>
-        /// <param name="hWnd">A handle to the window that should be activated and brought to the foreground.</param>
-        /// <returns>True if the window was brought to the foreground.</returns>
-        [DllImport("user32.dll")]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool SetForegroundWindow(IntPtr hWnd);
-
         /// <summary>
         /// If no console window is attached to this process, then allocate one,
         /// hide it and return true. If there's already a console window attached, then
@@ -1983,90 +2476,55 @@ internal static class ConsoleVisibility
         /// <returns></returns>
         internal static bool AllocateHiddenConsole()
         {
+#if UNIX
+            return false;
+#else
             // See if there is already a console attached.
-            IntPtr hwnd = ConsoleVisibility.GetConsoleWindow();
-            if (hwnd != IntPtr.Zero)
+            IntPtr hwnd = Interop.Windows.GetConsoleWindow();
+            if (hwnd != nint.Zero)
             {
                 return false;
             }
 
             // save the foreground window since allocating a console window might remove focus from it
-            IntPtr savedForeground = ConsoleVisibility.GetForegroundWindow();
+            IntPtr savedForeground = Interop.Windows.GetForegroundWindow();
 
             // Since there is no console window, allocate and then hide it...
             // Suppress the PreFAST warning about not using Marshal.GetLastWin32Error() to
             // get the error code.
-#pragma warning disable 56523
-            ConsoleVisibility.AllocConsole();
-            hwnd = ConsoleVisibility.GetConsoleWindow();
+            Interop.Windows.AllocConsole();
+            hwnd = Interop.Windows.GetConsoleWindow();
 
             bool returnValue;
-            if (hwnd == IntPtr.Zero)
+            if (hwnd == nint.Zero)
             {
                 returnValue = false;
             }
             else
             {
                 returnValue = true;
-                ConsoleVisibility.ShowWindow(hwnd, ConsoleVisibility.SW_HIDE);
+                Interop.Windows.ShowWindow(hwnd, Interop.Windows.SW_HIDE);
                 AlwaysCaptureApplicationIO = true;
             }
 
-            if (savedForeground != IntPtr.Zero && ConsoleVisibility.GetForegroundWindow() != savedForeground)
+            if (savedForeground != nint.Zero && Interop.Windows.GetForegroundWindow() != savedForeground)
             {
-                ConsoleVisibility.SetForegroundWindow(savedForeground);
+                Interop.Windows.SetForegroundWindow(savedForeground);
             }
 
             return returnValue;
-        }
-
-        /// <summary>
-        /// If there is a console attached, then make it visible
-        /// and allow interactive console applications to be run.
-        /// </summary>
-        public static void Show()
-        {
-            IntPtr hwnd = GetConsoleWindow();
-            if (hwnd != IntPtr.Zero)
-            {
-                ShowWindow(hwnd, SW_SHOW);
-                AlwaysCaptureApplicationIO = false;
-            }
-            else
-            {
-                throw PSTraceSource.NewInvalidOperationException();
-            }
-        }
-
-        /// <summary>
-        /// If there is a console attached, then hide it and always capture
-        /// output from the child process.
-        /// </summary>
-        public static void Hide()
-        {
-            IntPtr hwnd = GetConsoleWindow();
-            if (hwnd != IntPtr.Zero)
-            {
-                ShowWindow(hwnd, SW_HIDE);
-                AlwaysCaptureApplicationIO = true;
-            }
-            else
-            {
-                throw PSTraceSource.NewInvalidOperationException();
-            }
+#endif
         }
     }
 
     /// <summary>
     /// Exception used to wrap the error coming from
-    /// remote instance of Msh.
+    /// remote instance of PowerShell.
     /// </summary>
     /// <remarks>
-    /// This remote instance of Msh can be in a separate process,
+    /// This remote instance of PowerShell can be in a separate process,
     /// appdomain or machine.
     /// </remarks>
-    [Serializable]
-    [SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly")]
     public class RemoteException : RuntimeException
     {
         /// <summary>
@@ -2142,9 +2600,10 @@ PSObject serializedRemoteInvocationInfo
         /// The <see cref="StreamingContext"/> that contains contextual information
         /// about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected RemoteException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -2156,7 +2615,7 @@ protected RemoteException(SerializationInfo info, StreamingContext context)
         private readonly PSObject _serializedRemoteInvocationInfo;
 
         /// <summary>
-        /// Original Serialized Exception from remote msh.
+        /// Original Serialized Exception from remote PowerShell.
         /// </summary>
         /// <remarks>This is the exception which was thrown in remote.
         /// </remarks>
@@ -2172,7 +2631,7 @@ public PSObject SerializedRemoteException
         /// InvocationInfo, if any, associated with the SerializedRemoteException.
         /// </summary>
         /// <remarks>
-        /// This is the serialized InvocationInfo from the remote msh.
+        /// This is the serialized InvocationInfo from the remote PowerShell.
         /// </remarks>
         public PSObject SerializedRemoteInvocationInfo
         {
diff --git a/src/System.Management.Automation/engine/OrderedHashtable.cs b/src/System.Management.Automation/engine/OrderedHashtable.cs
new file mode 100644
index 00000000000..fd41d0b3ffd
--- /dev/null
+++ b/src/System.Management.Automation/engine/OrderedHashtable.cs
@@ -0,0 +1,236 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Runtime.Serialization;
+
+#nullable enable
+
+namespace System.Management.Automation
+{
+    /// <summary>
+    /// OrderedHashtable is a hashtable that preserves the order of the keys.
+    /// </summary>
+    public sealed class OrderedHashtable : Hashtable, IEnumerable
+    {
+        private readonly OrderedDictionary _orderedDictionary;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="OrderedHashtable"/> class.
+        /// </summary>
+        public OrderedHashtable()
+        {
+            _orderedDictionary = new OrderedDictionary();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="OrderedHashtable"/> class.
+        /// </summary>
+        /// <param name="capacity">The capacity.</param>
+        public OrderedHashtable(int capacity) : base(capacity)
+        {
+            _orderedDictionary = new OrderedDictionary(capacity);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="OrderedHashtable"/> class.
+        /// </summary>
+        /// <param name="dictionary">The dictionary to use for initialization.</param>
+        public OrderedHashtable(IDictionary dictionary)
+        {
+            _orderedDictionary = new OrderedDictionary(dictionary.Count);
+            foreach (DictionaryEntry entry in dictionary)
+            {
+                _orderedDictionary.Add(entry.Key, entry.Value);
+            }
+        }
+
+        /// <summary>
+        /// Get the number of items in the hashtable.
+        /// </summary>
+        public override int Count
+        {
+            get
+            {
+                return _orderedDictionary.Count;
+            }
+        }
+
+        /// <summary>
+        /// Get if the hashtable is a fixed size.
+        /// </summary>
+        public override bool IsFixedSize
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// Get if the hashtable is read-only.
+        /// </summary>
+        public override bool IsReadOnly
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// Get if the hashtable is synchronized.
+        /// </summary>
+        public override bool IsSynchronized
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// Gets the keys in the hashtable.
+        /// </summary>
+        public override ICollection Keys
+        {
+            get
+            {
+                return _orderedDictionary.Keys;
+            }
+        }
+
+        /// <summary>
+        /// Gets the values in the hashtable.
+        /// </summary>
+        public override ICollection Values
+        {
+            get
+            {
+                return _orderedDictionary.Values;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the value associated with the specified key.
+        /// </summary>
+        /// <param name="key">The key.</param>
+        /// <returns>The value associated with the key.</returns>
+        public override object? this[object key]
+        {
+            get
+            {
+                return _orderedDictionary[key];
+            }
+
+            set
+            {
+                _orderedDictionary[key] = value;
+            }
+        }
+
+        /// <summary>
+        /// Adds the specified key and value to the hashtable.
+        /// </summary>
+        /// <param name="key">The key.</param>
+        /// <param name="value">The value.</param>
+        public override void Add(object key, object? value)
+        {
+            _orderedDictionary.Add(key, value);
+        }
+
+        /// <summary>
+        /// Removes all keys and values from the hashtable.
+        /// </summary>
+        public override void Clear()
+        {
+            _orderedDictionary.Clear();
+        }
+
+        /// <summary>
+        /// Get a shallow clone of the hashtable.
+        /// </summary>
+        /// <returns>A shallow clone of the hashtable.</returns>
+        public override object Clone()
+        {
+            return new OrderedHashtable(_orderedDictionary);
+        }
+
+        /// <summary>
+        /// Determines whether the hashtable contains a specific key.
+        /// </summary>
+        /// <param name="key">The key to locate in the hashtable.</param>
+        /// <returns>true if the hashtable contains an element with the specified key; otherwise, false.</returns>
+        public override bool Contains(object key)
+        {
+            return _orderedDictionary.Contains(key);
+        }
+
+        /// <summary>
+        /// Determines whether the hashtable contains a specific key.
+        /// </summary>
+        /// <param name="key">The key to locate in the hashtable.</param>
+        /// <returns>true if the hashtable contains an element with the specified key; otherwise, false.</returns>
+        public override bool ContainsKey(object key)
+        {
+            return _orderedDictionary.Contains(key);
+        }
+
+        /// <summary>
+        /// Determines whether the hashtable contains a specific value.
+        /// </summary>
+        /// <param name="value">The value to locate in the hashtable.</param>
+        /// <returns>true if the hashtable contains an element with the specified value; otherwise, false.</returns>
+        public override bool ContainsValue(object? value)
+        {
+            foreach (DictionaryEntry entry in _orderedDictionary)
+            {
+                if (Equals(entry.Value, value))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        /// <summary>
+        /// Copies the elements of the hashtable to an array of type object, starting at the specified array index.
+        /// </summary>
+        /// <param name="array">The one-dimensional array that is the destination of the elements copied from the hashtable. The array must have zero-based indexing.</param>
+        /// <param name="arrayIndex">The zero-based index in array at which copying begins.</param>
+        public override void CopyTo(Array array, int arrayIndex)
+        {
+            _orderedDictionary.CopyTo(array, arrayIndex);
+        }
+
+        /// <summary>
+        /// Get the enumerator.
+        /// </summary>
+        /// <returns>The enumerator.</returns>
+        public override IDictionaryEnumerator GetEnumerator()
+        {
+            return _orderedDictionary.GetEnumerator();
+        }
+
+        /// <summary>
+        /// Get the enumerator.
+        /// </summary>
+        /// <returns>The enumerator.</returns>
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+
+        /// <summary>
+        /// Removes the specified key from the hashtable.
+        /// </summary>
+        /// <param name="key">The key to remove.</param>
+        public override void Remove(object key)
+        {
+            _orderedDictionary.Remove(key);
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/PSClassInfo.cs b/src/System.Management.Automation/engine/PSClassInfo.cs
index fd0ca8d8936..10b2cf1101d 100644
--- a/src/System.Management.Automation/engine/PSClassInfo.cs
+++ b/src/System.Management.Automation/engine/PSClassInfo.cs
@@ -61,8 +61,7 @@ public sealed class PSClassMemberInfo
         /// </summary>
         internal PSClassMemberInfo(string name, string memberType, string defaultValue)
         {
-            if (string.IsNullOrEmpty(name))
-                throw new ArgumentNullException(nameof(name));
+            ArgumentException.ThrowIfNullOrEmpty(name);
 
             this.Name = name;
             this.TypeName = memberType;
diff --git a/src/System.Management.Automation/engine/PSConfiguration.cs b/src/System.Management.Automation/engine/PSConfiguration.cs
index 16273979a69..419a4cae95f 100644
--- a/src/System.Management.Automation/engine/PSConfiguration.cs
+++ b/src/System.Management.Automation/engine/PSConfiguration.cs
@@ -89,7 +89,10 @@ private PowerShellConfig()
             // Note: This directory may or may not exist depending upon the execution scenario.
             // Writes will attempt to create the directory if it does not already exist.
             perUserConfigDirectory = Platform.ConfigDirectory;
-            perUserConfigFile = Path.Combine(perUserConfigDirectory, ConfigFileName);
+            if (!string.IsNullOrEmpty(perUserConfigDirectory))
+            {
+                perUserConfigFile = Path.Combine(perUserConfigDirectory, ConfigFileName);
+            }
 
             emptyConfig = new JObject();
             configRoots = new JObject[2];
@@ -181,6 +184,7 @@ private static string GetExecutionPolicySettingKey(string shellId)
                 : string.Concat(shellId, ":", "ExecutionPolicy");
         }
 
+        /// <summary>
         /// Get the names of experimental features enabled in the config file.
         /// </summary>
         internal string[] GetExperimentalFeatures()
@@ -386,6 +390,11 @@ internal PSKeyword GetLogKeywords()
         private T ReadValueFromFile<T>(ConfigScope scope, string key, T defaultValue = default)
         {
             string fileName = GetConfigFilePath(scope);
+            if (string.IsNullOrEmpty(fileName))
+            {
+                return defaultValue;
+            }
+
             JObject configData = configRoots[(int)scope];
 
             if (configData == null)
diff --git a/src/System.Management.Automation/engine/PSVersionInfo.cs b/src/System.Management.Automation/engine/PSVersionInfo.cs
index 5830cdc7f02..eef9819a568 100644
--- a/src/System.Management.Automation/engine/PSVersionInfo.cs
+++ b/src/System.Management.Automation/engine/PSVersionInfo.cs
@@ -3,7 +3,6 @@
 
 using System.Collections;
 using System.Globalization;
-using System.Reflection;
 using System.Text;
 using System.Text.RegularExpressions;
 
@@ -27,7 +26,7 @@ namespace System.Management.Automation
     /// The above statement retrieves the PowerShell edition.
     /// </para>
     /// </summary>
-    public class PSVersionInfo
+    public static partial class PSVersionInfo
     {
         internal const string PSVersionTableName = "PSVersionTable";
         internal const string PSRemotingProtocolVersionName = "PSRemotingProtocolVersion";
@@ -42,6 +41,18 @@ public class PSVersionInfo
 
         private static readonly PSVersionHashTable s_psVersionTable;
 
+        /*
+            The following constants are generated by the source generator 'PSVersionInfoGenerator':
+
+                internal const string ProductVersion;
+                internal const string GitCommitId;
+
+                private const int Version_Major
+                private const int Version_Minor;
+                private const int Version_Patch;
+                private const string Version_Label;
+        */
+
         /// <summary>
         /// A constant to track current PowerShell Version.
         /// </summary>
@@ -53,19 +64,16 @@ public class PSVersionInfo
         /// For each later release of PowerShell, this constant needs to
         /// be updated to reflect the right version.
         /// </remarks>
-        private static readonly Version s_psV1Version = new Version(1, 0);
-        private static readonly Version s_psV2Version = new Version(2, 0);
-        private static readonly Version s_psV3Version = new Version(3, 0);
-        private static readonly Version s_psV4Version = new Version(4, 0);
-        private static readonly Version s_psV5Version = new Version(5, 0);
-        private static readonly Version s_psV51Version = new Version(5, 1, NTVerpVars.PRODUCTBUILD, NTVerpVars.PRODUCTBUILD_QFE);
-        private static readonly SemanticVersion s_psV6Version = new SemanticVersion(6, 0, 0, preReleaseLabel: null, buildLabel: null);
-        private static readonly SemanticVersion s_psV61Version = new SemanticVersion(6, 1, 0, preReleaseLabel: null, buildLabel: null);
-        private static readonly SemanticVersion s_psV62Version = new SemanticVersion(6, 2, 0, preReleaseLabel: null, buildLabel: null);
-        private static readonly SemanticVersion s_psV7Version = new SemanticVersion(7, 0, 0, preReleaseLabel: null, buildLabel: null);
-        private static readonly SemanticVersion s_psV71Version = new SemanticVersion(7, 1, 0, preReleaseLabel: null, buildLabel: null);
-        private static readonly SemanticVersion s_psSemVersion;
+        private static readonly Version s_psV1Version = new(1, 0);
+        private static readonly Version s_psV2Version = new(2, 0);
+        private static readonly Version s_psV3Version = new(3, 0);
+        private static readonly Version s_psV4Version = new(4, 0);
+        private static readonly Version s_psV5Version = new(5, 0);
+        private static readonly Version s_psV51Version = new(5, 1);
+        private static readonly Version s_psV6Version = new(6, 0);
+        private static readonly Version s_psV7Version = new(7, 0);
         private static readonly Version s_psVersion;
+        private static readonly SemanticVersion s_psSemVersion;
 
         /// <summary>
         /// A constant to track current PowerShell Edition.
@@ -77,43 +85,18 @@ static PSVersionInfo()
         {
             s_psVersionTable = new PSVersionHashTable(StringComparer.OrdinalIgnoreCase);
 
-            Assembly currentAssembly = typeof(PSVersionInfo).Assembly;
-            string productVersion = currentAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
-
-            // Get 'GitCommitId' and 'PSVersion' from the 'productVersion' assembly attribute.
-            //
-            // The strings can be one of the following format examples:
-            //    when powershell is built from a commit:
-            //      productVersion = '6.0.0-beta.7 Commits: 29 SHA: 52c6b...' convert to GitCommitId = 'v6.0.0-beta.7-29-g52c6b...'
-            //                                                                           PSVersion   = '6.0.0-beta.7'
-            //    when powershell is built from a release tag:
-            //      productVersion = '6.0.0-beta.7 SHA: f1ec9...'             convert to GitCommitId = 'v6.0.0-beta.7'
-            //                                                                           PSVersion   = '6.0.0-beta.7'
-            //    when powershell is built from a release tag for RTM:
-            //      productVersion = '6.0.0 SHA: f1ec9...'                    convert to GitCommitId = 'v6.0.0'
-            //                                                                           PSVersion   = '6.0.0'
-            string rawGitCommitId;
-            string mainVersion = productVersion.Substring(0, productVersion.IndexOf(' '));
-
-            if (productVersion.Contains(" Commits: "))
-            {
-                rawGitCommitId = productVersion.Replace(" Commits: ", "-").Replace(" SHA: ", "-g");
-            }
-            else
-            {
-                rawGitCommitId = mainVersion;
-            }
-
-            s_psSemVersion = new SemanticVersion(mainVersion);
+            s_psSemVersion = Version_Label == string.Empty
+                ? new SemanticVersion(Version_Major, Version_Minor, Version_Patch)
+                : new SemanticVersion(Version_Major, Version_Minor, Version_Patch, Version_Label, buildLabel: null);
             s_psVersion = (Version)s_psSemVersion;
 
-            s_psVersionTable[PSVersionInfo.PSVersionName] = s_psSemVersion;
-            s_psVersionTable[PSVersionInfo.PSEditionName] = PSEditionValue;
-            s_psVersionTable[PSGitCommitIdName] = rawGitCommitId;
-            s_psVersionTable[PSCompatibleVersionsName] = new Version[] { s_psV1Version, s_psV2Version, s_psV3Version, s_psV4Version, s_psV5Version, s_psV51Version, s_psV6Version, s_psV61Version, s_psV62Version, s_psV7Version, s_psV71Version, s_psVersion };
-            s_psVersionTable[PSVersionInfo.SerializationVersionName] = new Version(InternalSerializer.DefaultVersion);
-            s_psVersionTable[PSVersionInfo.PSRemotingProtocolVersionName] = RemotingConstants.ProtocolVersion;
-            s_psVersionTable[PSVersionInfo.WSManStackVersionName] = GetWSManStackVersion();
+            s_psVersionTable[PSVersionName] = s_psSemVersion;
+            s_psVersionTable[PSEditionName] = PSEditionValue;
+            s_psVersionTable[PSGitCommitIdName] = GitCommitId;
+            s_psVersionTable[PSCompatibleVersionsName] = new Version[] { s_psV1Version, s_psV2Version, s_psV3Version, s_psV4Version, s_psV5Version, s_psV51Version, s_psV6Version, s_psV7Version };
+            s_psVersionTable[SerializationVersionName] = new Version(InternalSerializer.DefaultVersion);
+            s_psVersionTable[PSRemotingProtocolVersionName] = RemotingConstants.ProtocolVersion;
+            s_psVersionTable[WSManStackVersionName] = GetWSManStackVersion();
             s_psVersionTable[PSPlatformName] = Environment.OSVersion.Platform.ToString();
             s_psVersionTable[PSOSName] = Runtime.InteropServices.RuntimeInformation.OSDescription;
         }
@@ -182,22 +165,6 @@ public static Version PSVersion
             }
         }
 
-        internal static string GitCommitId
-        {
-            get
-            {
-                return (string)s_psVersionTable[PSGitCommitIdName];
-            }
-        }
-
-        internal static Version[] PSCompatibleVersions
-        {
-            get
-            {
-                return (Version[])s_psVersionTable[PSCompatibleVersionsName];
-            }
-        }
-
         /// <summary>
         /// Gets the edition of PowerShell.
         /// </summary>
@@ -205,7 +172,7 @@ public static string PSEdition
         {
             get
             {
-                return (string)s_psVersionTable[PSVersionInfo.PSEditionName];
+                return PSEditionValue;
             }
         }
 
@@ -217,21 +184,6 @@ internal static Version SerializationVersion
             }
         }
 
-        /// <summary>
-        /// </summary>
-        /// <remarks>
-        /// For 2.0 PowerShell, we still use "1" as the registry version key.
-        /// For >=3.0 PowerShell, we still use "1" as the registry version key for
-        /// Snapin and Custom shell lookup/discovery.
-        /// </remarks>
-        internal static string RegistryVersion1Key
-        {
-            get
-            {
-                return "1";
-            }
-        }
-
         /// <summary>
         /// </summary>
         /// <remarks>
@@ -267,76 +219,32 @@ internal static string GetRegistryVersionKeyForSnapinDiscovery(string majorVersi
             return null;
         }
 
-        internal static string FeatureVersionString
-        {
-            get
-            {
-                return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}.{1}", PSVersionInfo.PSVersion.Major, PSVersionInfo.PSVersion.Minor);
-            }
-        }
-
         internal static bool IsValidPSVersion(Version version)
         {
-            if (version.Major == s_psSemVersion.Major)
-            {
-                return version.Minor == s_psSemVersion.Minor;
-            }
-
-            if (version.Major == s_psV6Version.Major)
+            if (version is null)
             {
-                return version.Minor == s_psV6Version.Minor;
-            }
-
-            if (version.Major == s_psV5Version.Major)
-            {
-                return (version.Minor == s_psV5Version.Minor || version.Minor == s_psV51Version.Minor);
+                return false;
             }
 
-            if (version.Major == s_psV4Version.Major)
-            {
-                return (version.Minor == s_psV4Version.Minor);
-            }
-            else if (version.Major == s_psV3Version.Major)
-            {
-                return version.Minor == s_psV3Version.Minor;
-            }
-            else if (version.Major == s_psV2Version.Major)
-            {
-                return version.Minor == s_psV2Version.Minor;
-            }
-            else if (version.Major == s_psV1Version.Major)
+            int minor = version.Minor;
+            switch (version.Major)
             {
-                return version.Minor == s_psV1Version.Minor;
+                case 1:
+                case 2:
+                case 3:
+                case 4:
+                    return minor == 0;
+                case 5:
+                    return minor == 0 || minor == 1;
+                case 6:
+                    return minor >= 0 && minor <= 2;
+                case 7:
+                    return minor >= 0 && minor <= s_psVersion.Minor;
             }
 
             return false;
         }
 
-        internal static Version PSV4Version
-        {
-            get { return s_psV4Version; }
-        }
-
-        internal static Version PSV5Version
-        {
-            get { return s_psV5Version; }
-        }
-
-        internal static Version PSV51Version
-        {
-            get { return s_psV51Version; }
-        }
-
-        internal static SemanticVersion PSV6Version
-        {
-            get { return s_psV6Version; }
-        }
-
-        internal static SemanticVersion PSV7Version
-        {
-            get { return s_psV7Version; }
-        }
-
         internal static SemanticVersion PSCurrentVersion
         {
             get { return s_psSemVersion; }
@@ -374,7 +282,7 @@ public override ICollection Keys
             }
         }
 
-        private class PSVersionTableComparer : IComparer
+        private sealed class PSVersionTableComparer : IComparer
         {
             public int Compare(object x, object y)
             {
@@ -427,8 +335,9 @@ IEnumerator IEnumerable.GetEnumerator()
     public sealed class SemanticVersion : IComparable, IComparable<SemanticVersion>, IEquatable<SemanticVersion>
     {
         private const string VersionSansRegEx = @"^(?<major>\d+)(\.(?<minor>\d+))?(\.(?<patch>\d+))?$";
-        private const string LabelRegEx = @"^((?<preLabel>[0-9A-Za-z][0-9A-Za-z\-\.]*))?(\+(?<buildLabel>[0-9A-Za-z][0-9A-Za-z\-\.]*))?$";
-        private const string LabelUnitRegEx = @"^[0-9A-Za-z][0-9A-Za-z\-\.]*$";
+        private const string LabelRegEx = @"^(?<preLabel>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(?:\+(?<buildLabel>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$";
+        private const string LabelUnitRegEx = @"^((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)$";
+        private const string BuildUnitRegEx = @"^([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*)$";
         private const string PreLabelPropertyName = "PSSemVerPreReleaseLabel";
         private const string BuildLabelPropertyName = "PSSemVerBuildLabel";
         private const string TypeNameForVersionWithLabel = "System.Version#IncludeLabel";
@@ -462,21 +371,27 @@ public SemanticVersion(string version)
         /// <param name="buildLabel">The build metadata for the version.</param>
         /// <exception cref="FormatException">
         /// If <paramref name="preReleaseLabel"/> don't match 'LabelUnitRegEx'.
-        /// If <paramref name="buildLabel"/> don't match 'LabelUnitRegEx'.
+        /// If <paramref name="buildLabel"/> don't match 'BuildUnitRegEx'.
         /// </exception>
         public SemanticVersion(int major, int minor, int patch, string preReleaseLabel, string buildLabel)
             : this(major, minor, patch)
         {
             if (!string.IsNullOrEmpty(preReleaseLabel))
             {
-                if (!Regex.IsMatch(preReleaseLabel, LabelUnitRegEx)) throw new FormatException(nameof(preReleaseLabel));
+                if (!Regex.IsMatch(preReleaseLabel, LabelUnitRegEx))
+                {
+                    throw new FormatException(nameof(preReleaseLabel));
+                }
 
                 PreReleaseLabel = preReleaseLabel;
             }
 
             if (!string.IsNullOrEmpty(buildLabel))
             {
-                if (!Regex.IsMatch(buildLabel, LabelUnitRegEx)) throw new FormatException(nameof(buildLabel));
+                if (!Regex.IsMatch(buildLabel, BuildUnitRegEx))
+                {
+                    throw new FormatException(nameof(buildLabel));
+                }
 
                 BuildLabel = buildLabel;
             }
@@ -496,13 +411,16 @@ public SemanticVersion(int major, int minor, int patch, string preReleaseLabel,
         public SemanticVersion(int major, int minor, int patch, string label)
             : this(major, minor, patch)
         {
-            // We presume the SymVer :
+            // We presume the SemVer :
             // 1) major.minor.patch-label
             // 2) 'label' starts with letter or digit.
             if (!string.IsNullOrEmpty(label))
             {
                 var match = Regex.Match(label, LabelRegEx);
-                if (!match.Success) throw new FormatException(nameof(label));
+                if (!match.Success)
+                {
+                    throw new FormatException(nameof(label));
+                }
 
                 PreReleaseLabel = match.Groups["preLabel"].Value;
                 BuildLabel = match.Groups["buildLabel"].Value;
@@ -520,9 +438,20 @@ public SemanticVersion(int major, int minor, int patch, string label)
         /// </exception>
         public SemanticVersion(int major, int minor, int patch)
         {
-            if (major < 0) throw PSTraceSource.NewArgumentException(nameof(major));
-            if (minor < 0) throw PSTraceSource.NewArgumentException(nameof(minor));
-            if (patch < 0) throw PSTraceSource.NewArgumentException(nameof(patch));
+            if (major < 0)
+            {
+                throw PSTraceSource.NewArgumentException(nameof(major));
+            }
+
+            if (minor < 0)
+            {
+                throw PSTraceSource.NewArgumentException(nameof(minor));
+            }
+
+            if (patch < 0)
+            {
+                throw PSTraceSource.NewArgumentException(nameof(patch));
+            }
 
             Major = major;
             Minor = minor;
@@ -564,8 +493,15 @@ public SemanticVersion(int major) : this(major, 0, 0) { }
         /// </exception>
         public SemanticVersion(Version version)
         {
-            if (version == null) throw PSTraceSource.NewArgumentNullException(nameof(version));
-            if (version.Revision > 0) throw PSTraceSource.NewArgumentException(nameof(version));
+            if (version == null)
+            {
+                throw PSTraceSource.NewArgumentNullException(nameof(version));
+            }
+
+            if (version.Revision > 0)
+            {
+                throw PSTraceSource.NewArgumentException(nameof(version));
+            }
 
             Major = version.Major;
             Minor = version.Minor;
@@ -633,12 +569,12 @@ public static implicit operator Version(SemanticVersion semver)
         public int Patch { get; }
 
         /// <summary>
-        /// PreReleaseLabel position in the SymVer string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
+        /// PreReleaseLabel position in the SemVer string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
         /// </summary>
         public string PreReleaseLabel { get; }
 
         /// <summary>
-        /// BuildLabel position in the SymVer string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
+        /// BuildLabel position in the SemVer string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
         /// </summary>
         public string BuildLabel { get; }
 
@@ -652,8 +588,15 @@ public static implicit operator Version(SemanticVersion semver)
         /// <exception cref="OverflowException"></exception>
         public static SemanticVersion Parse(string version)
         {
-            if (version == null) throw PSTraceSource.NewArgumentNullException(nameof(version));
-            if (version == string.Empty) throw new FormatException(nameof(version));
+            if (version == null)
+            {
+                throw PSTraceSource.NewArgumentNullException(nameof(version));
+            }
+
+            if (version == string.Empty)
+            {
+                throw new FormatException(nameof(version));
+            }
 
             var r = new VersionResult();
             r.Init(true);
@@ -701,7 +644,7 @@ private static bool TryParseVersion(string version, ref VersionResult result)
             string preLabel = null;
             string buildLabel = null;
 
-            // We parse the SymVer 'version' string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
+            // We parse the SemVer 'version' string 'major.minor.patch-PreReleaseLabel+BuildLabel'.
             var dashIndex = version.IndexOf('-');
             var plusIndex = version.IndexOf('+');
 
@@ -726,7 +669,7 @@ private static bool TryParseVersion(string version, ref VersionResult result)
             }
             else
             {
-                if (dashIndex == -1)
+                if (plusIndex == -1)
                 {
                     // Here dashIndex == plusIndex == -1
                     // No preLabel - preLabel == null;
@@ -734,6 +677,13 @@ private static bool TryParseVersion(string version, ref VersionResult result)
                     // Format is 'major.minor.patch'
                     versionSansLabel = version;
                 }
+                else if (dashIndex == -1)
+                {
+                    // No PreReleaseLabel: preLabel == null
+                    // Format is 'major.minor.patch+BuildLabel'
+                    buildLabel = version.Substring(plusIndex + 1);
+                    versionSansLabel = version.Substring(0, plusIndex);
+                }
                 else
                 {
                     // Format is 'major.minor.patch-PreReleaseLabel+BuildLabel'
@@ -780,7 +730,7 @@ private static bool TryParseVersion(string version, ref VersionResult result)
             }
 
             if (preLabel != null && !Regex.IsMatch(preLabel, LabelUnitRegEx) ||
-               (buildLabel != null && !Regex.IsMatch(buildLabel, LabelUnitRegEx)))
+               (buildLabel != null && !Regex.IsMatch(buildLabel, BuildUnitRegEx)))
             {
                 result.SetFailure(ParseFailureKind.FormatException);
                 return false;
@@ -799,7 +749,7 @@ public override string ToString()
             {
                 StringBuilder result = new StringBuilder();
 
-                result.Append(Major).Append(Utils.Separators.Dot).Append(Minor).Append(Utils.Separators.Dot).Append(Patch);
+                result.Append(Major).Append('.').Append(Minor).Append('.').Append(Patch);
 
                 if (!string.IsNullOrEmpty(PreReleaseLabel))
                 {
@@ -845,7 +795,7 @@ public int CompareTo(object version)
                 return 1;
             }
 
-            if (!(version is SemanticVersion v))
+            if (version is not SemanticVersion v)
             {
                 throw PSTraceSource.NewArgumentException(nameof(version));
             }
@@ -855,7 +805,7 @@ public int CompareTo(object version)
 
         /// <summary>
         /// Implement <see cref="IComparable{T}.CompareTo"/>.
-        /// Meets SymVer 2.0 p.11 https://semver.org/
+        /// Meets SemVer 2.0 p.11 https://semver.org/
         /// </summary>
         public int CompareTo(SemanticVersion value)
         {
@@ -871,7 +821,7 @@ public int CompareTo(SemanticVersion value)
             if (Patch != value.Patch)
                 return Patch > value.Patch ? 1 : -1;
 
-            // SymVer 2.0 standard requires to ignore 'BuildLabel' (Build metadata).
+            // SemVer 2.0 standard requires to ignore 'BuildLabel' (Build metadata).
             return ComparePreLabel(this.PreReleaseLabel, value.PreReleaseLabel);
         }
 
@@ -888,7 +838,7 @@ public override bool Equals(object obj)
         /// </summary>
         public bool Equals(SemanticVersion other)
         {
-            // SymVer 2.0 standard requires to ignore 'BuildLabel' (Build metadata).
+            // SemVer 2.0 standard requires to ignore 'BuildLabel' (Build metadata).
             return other != null &&
                    (Major == other.Major) && (Minor == other.Minor) && (Patch == other.Patch) &&
                    string.Equals(PreReleaseLabel, other.PreReleaseLabel, StringComparison.Ordinal);
@@ -957,7 +907,7 @@ public override int GetHashCode()
 
         private static int ComparePreLabel(string preLabel1, string preLabel2)
         {
-            // Symver 2.0 standard p.9
+            // SemVer 2.0 standard p.9
             // Pre-release versions have a lower precedence than the associated normal version.
             // Comparing each dot separated identifier from left to right
             // until a difference is found as follows:
@@ -966,9 +916,15 @@ private static int ComparePreLabel(string preLabel1, string preLabel2)
             // Numeric identifiers always have lower precedence than non-numeric identifiers.
             // A larger set of pre-release fields has a higher precedence than a smaller set,
             // if all of the preceding identifiers are equal.
-            if (string.IsNullOrEmpty(preLabel1)) { return string.IsNullOrEmpty(preLabel2) ? 0 : 1; }
+            if (string.IsNullOrEmpty(preLabel1))
+            {
+                return string.IsNullOrEmpty(preLabel2) ? 0 : 1;
+            }
 
-            if (string.IsNullOrEmpty(preLabel2)) { return -1; }
+            if (string.IsNullOrEmpty(preLabel2))
+            {
+                return -1;
+            }
 
             var units1 = preLabel1.Split('.');
             var units2 = preLabel2.Split('.');
@@ -985,16 +941,28 @@ private static int ComparePreLabel(string preLabel1, string preLabel2)
 
                 if (isNumber1 && isNumber2)
                 {
-                    if (number1 != number2) { return number1 < number2 ? -1 : 1; }
+                    if (number1 != number2)
+                    {
+                        return number1 < number2 ? -1 : 1;
+                    }
                 }
                 else
                 {
-                    if (isNumber1) { return -1; }
+                    if (isNumber1)
+                    {
+                        return -1;
+                    }
 
-                    if (isNumber2) { return 1; }
+                    if (isNumber2)
+                    {
+                        return 1;
+                    }
 
                     int result = string.CompareOrdinal(ac, bc);
-                    if (result != 0) { return result; }
+                    if (result != 0)
+                    {
+                        return result;
+                    }
                 }
             }
 
diff --git a/src/System.Management.Automation/engine/ParameterBinderBase.cs b/src/System.Management.Automation/engine/ParameterBinderBase.cs
index ee7028c3865..21868b1a28d 100644
--- a/src/System.Management.Automation/engine/ParameterBinderBase.cs
+++ b/src/System.Management.Automation/engine/ParameterBinderBase.cs
@@ -559,15 +559,13 @@ internal virtual bool BindParameter(
                             parameterMetadata.ObsoleteAttribute.Message);
 
                         var mshCommandRuntime = this.Command.commandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            // Write out warning only if we are in the context of MshCommandRuntime.
-                            // This is because
-                            //  1. The overload method WriteWarning(WarningRecord) is only available in MshCommandRuntime;
-                            //  2. We write out warnings for obsolete commands and obsolete cmdlet parameters only when in
-                            //     the context of MshCommandRuntime. So we do it here to keep consistency.
-                            mshCommandRuntime.WriteWarning(new WarningRecord(FQIDParameterObsolete, obsoleteWarning));
-                        }
+
+                        // Write out warning only if we are in the context of MshCommandRuntime.
+                        // This is because
+                        //  1. The overload method WriteWarning(WarningRecord) is only available in MshCommandRuntime;
+                        //  2. We write out warnings for obsolete commands and obsolete cmdlet parameters only when in
+                        //     the context of MshCommandRuntime. So we do it here to keep consistency.
+                        mshCommandRuntime?.WriteWarning(new WarningRecord(FQIDParameterObsolete, obsoleteWarning));
                     }
 
                     // Finally bind the argument to the parameter
@@ -772,7 +770,10 @@ private void ValidateNullOrEmptyArgument(
 
             // Note - we explicitly don't pass the context here because we don't want
             // the overhead of the calls that check for stopping.
-            if (ParserOps.MoveNext(null, null, ienum)) { isEmpty = false; }
+            if (ParserOps.MoveNext(null, null, ienum))
+            {
+                isEmpty = false;
+            }
 
             // If the element of the collection is of value type, then no need to check for null
             // because a value-type value cannot be null.
@@ -999,10 +1000,7 @@ private object CoerceTypeAsNeeded(
 
             // Construct the collection type information if it wasn't passed in.
 
-            if (collectionTypeInfo == null)
-            {
-                collectionTypeInfo = new ParameterCollectionTypeInformation(toType);
-            }
+            collectionTypeInfo ??= new ParameterCollectionTypeInformation(toType);
 
             object originalValue = currentValue;
             object result = currentValue;
@@ -1246,8 +1244,9 @@ private object CoerceTypeAsNeeded(
                         // However, we don't allow Hashtable-to-Object conversion (PSObject and IDictionary) because
                         // those can lead to property setters that probably aren't expected. This is enforced by
                         // setting 'Context.LanguageModeTransitionInParameterBinding' to true before the conversion.
+                        var currentLanguageMode = Context.LanguageMode;
                         bool changeLanguageModeForTrustedCommand =
-                            Context.LanguageMode == PSLanguageMode.ConstrainedLanguage &&
+                            currentLanguageMode == PSLanguageMode.ConstrainedLanguage &&
                             this.Command.CommandInfo.DefiningLanguageMode == PSLanguageMode.FullLanguage;
                         bool oldLangModeTransitionStatus = Context.LanguageModeTransitionInParameterBinding;
 
@@ -1265,7 +1264,7 @@ private object CoerceTypeAsNeeded(
                         {
                             if (changeLanguageModeForTrustedCommand)
                             {
-                                Context.LanguageMode = PSLanguageMode.ConstrainedLanguage;
+                                Context.LanguageMode = currentLanguageMode;
                                 Context.LanguageModeTransitionInParameterBinding = oldLangModeTransitionStatus;
                             }
                         }
@@ -1452,7 +1451,7 @@ private object HandleNullParameterForSpecialTypes(
         /// could not be created.
         /// </exception>
         [SuppressMessage("Microsoft.Maintainability", "CA1505:AvoidUnmaintainableCode")]
-        [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "Consider Simplyfing it")]
+        [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "Consider Simplifying it")]
         private object EncodeCollection(
             CommandParameterInternal argument,
             string parameterName,
diff --git a/src/System.Management.Automation/engine/ParameterBinderController.cs b/src/System.Management.Automation/engine/ParameterBinderController.cs
index e6a7153a879..f9781a99435 100644
--- a/src/System.Management.Automation/engine/ParameterBinderController.cs
+++ b/src/System.Management.Automation/engine/ParameterBinderController.cs
@@ -616,7 +616,7 @@ protected Collection<CommandParameterInternal> BindNamedParameters(uint paramete
                         {
                             // This named parameter from splatting is also explicitly specified by the user,
                             // which was successfully bound, so we ignore the one from splatting because it
-                            // is superceded by the explicit one. For example:
+                            // is superseded by the explicit one. For example:
                             //   $splat = @{ Path = $path1 }
                             //   dir @splat -Path $path2
                             continue;
@@ -1029,7 +1029,7 @@ protected void ThrowElaboratedBindingException(ParameterBindingException pbex)
             StringBuilder defaultParamsGetBound = new StringBuilder();
             foreach (string paramName in BoundDefaultParameters)
             {
-                defaultParamsGetBound.AppendFormat(CultureInfo.InvariantCulture, " -{0}", paramName);
+                defaultParamsGetBound.Append(CultureInfo.InvariantCulture, $" -{paramName}");
             }
 
             string resourceString = ParameterBinderStrings.DefaultBindingErrorElaborationSingle;
diff --git a/src/System.Management.Automation/engine/ParameterSetInfo.cs b/src/System.Management.Automation/engine/ParameterSetInfo.cs
index 74745fca6da..5d81b8553cf 100644
--- a/src/System.Management.Automation/engine/ParameterSetInfo.cs
+++ b/src/System.Management.Automation/engine/ParameterSetInfo.cs
@@ -246,15 +246,19 @@ private static void AppendFormatCommandParameterInfo(CommandParameterInfo parame
 
                 if (parameter.IsMandatory)
                 {
-                    result.AppendFormat(CultureInfo.InvariantCulture,
-                                        parameter.Position != int.MinValue ? "[-{0}] <{1}>" : "-{0} <{1}>",
-                                        parameter.Name, parameterTypeString);
+                    result.AppendFormat(
+                        CultureInfo.InvariantCulture,
+                        parameter.Position != int.MinValue ? "[-{0}] <{1}>" : "-{0} <{1}>",
+                        parameter.Name,
+                        parameterTypeString);
                 }
                 else
                 {
-                    result.AppendFormat(CultureInfo.InvariantCulture,
-                                        parameter.Position != int.MinValue ? "[[-{0}] <{1}>]" : "[-{0} <{1}>]",
-                                        parameter.Name, parameterTypeString);
+                    result.AppendFormat(
+                        CultureInfo.InvariantCulture,
+                        parameter.Position != int.MinValue ? "[[-{0}] <{1}>]" : "[-{0} <{1}>]",
+                        parameter.Name,
+                        parameterTypeString);
                 }
             }
         }
@@ -284,7 +288,7 @@ internal static string GetParameterTypeString(Type type, IEnumerable<Attribute>
                     parameterTypeString = typeName.PSTypeName;
 
                     // Drop the namespace from the typename, if any.
-                    var lastDotIndex = parameterTypeString.LastIndexOfAny(Utils.Separators.Dot);
+                    var lastDotIndex = parameterTypeString.LastIndexOf('.');
                     if (lastDotIndex != -1 && lastDotIndex + 1 < parameterTypeString.Length)
                     {
                         parameterTypeString = parameterTypeString.Substring(lastDotIndex + 1);
diff --git a/src/System.Management.Automation/engine/PathInterfaces.cs b/src/System.Management.Automation/engine/PathInterfaces.cs
index 9a604829295..1cc9c6c173c 100644
--- a/src/System.Management.Automation/engine/PathInterfaces.cs
+++ b/src/System.Management.Automation/engine/PathInterfaces.cs
@@ -379,7 +379,7 @@ public PathInfoStack SetDefaultLocationStack(string stackName)
         /// characters which will get resolved.
         /// </param>
         /// <returns>
-        /// An array of Msh paths that resolved from the given path.
+        /// An array of PowerShell paths that resolved from the given path.
         /// </returns>
         /// <exception cref="ArgumentNullException">
         /// If <paramref name="path"/> is null.
@@ -728,7 +728,7 @@ public string GetUnresolvedProviderPathFromPSPath(string path)
         /// The information for the provider for which the returned path should be used.
         /// </param>
         /// <param name="drive">
-        /// The drive of the Msh path that was used to convert the path. Note, this may be null
+        /// The drive of the PowerShell path that was used to convert the path. Note, this may be null
         /// if the <paramref name="path"/> was a provider-qualified path.
         /// </param>
         /// <returns>
@@ -834,7 +834,7 @@ internal string GetUnresolvedProviderPathFromPSPath(
         }
 
         /// <summary>
-        /// Determines if the give path is an Msh provider-qualified path.
+        /// Determines if the give path is a PowerShell provider-qualified path.
         /// </summary>
         /// <param name="path">
         /// The path to check.
@@ -863,11 +863,11 @@ public bool IsProviderQualified(string path)
         /// The path to check.
         /// </param>
         /// <param name="driveName">
-        /// If the path is an Msh absolute path then the returned value is
+        /// If the path is an absolute path then the returned value is
         /// the name of the drive that the path is absolute to.
         /// </param>
         /// <returns>
-        /// True if the specified path is an Msh absolute drive-qualified path.
+        /// True if the specified path is an absolute drive-qualified path.
         /// False otherwise.
         /// </returns>
         /// <remarks>
@@ -1232,7 +1232,7 @@ internal string ParseChildName(
         /// as a relative path to the basePath that was passed.
         /// </summary>
         /// <param name="path">
-        /// An MSH path to an item. The item should exist
+        /// A PowerShell path to an item. The item should exist
         /// or the provider should write out an error.
         /// </param>
         /// <param name="basePath">
@@ -1312,7 +1312,7 @@ internal string NormalizeRelativePath(
         #region IsValid
 
         /// <summary>
-        /// Determines if the MSH path is a syntactically and semantically valid path for the provider.
+        /// Determines if the path is a syntactically and semantically valid path for the provider.
         /// </summary>
         /// <param name="path">
         /// The path to validate.
diff --git a/src/System.Management.Automation/engine/Pipe.cs b/src/System.Management.Automation/engine/Pipe.cs
index 8ee000a4faf..d43a0f96a5d 100644
--- a/src/System.Management.Automation/engine/Pipe.cs
+++ b/src/System.Management.Automation/engine/Pipe.cs
@@ -109,6 +109,13 @@ public override string ToString()
         /// </summary>
         internal int OutBufferCount { get; set; } = 0;
 
+        /// <summary>
+        /// Gets whether the out variable list should be ignored.
+        /// This is used for scenarios like the `clean` block, where writing to output stream is intentionally
+        /// disabled and thus out variables should also be ignored.
+        /// </summary>
+        internal bool IgnoreOutVariableList { get; set; }
+
         /// <summary>
         /// If true, then all input added to this pipe will simply be discarded...
         /// </summary>
@@ -226,34 +233,22 @@ internal void AddVariableList(VariableStreamKind kind, IList list)
             switch (kind)
             {
                 case VariableStreamKind.Error:
-                    if (_errorVariableList == null)
-                    {
-                        _errorVariableList = new List<IList>();
-                    }
+                    _errorVariableList ??= new List<IList>();
 
                     _errorVariableList.Add(list);
                     break;
                 case VariableStreamKind.Warning:
-                    if (_warningVariableList == null)
-                    {
-                        _warningVariableList = new List<IList>();
-                    }
+                    _warningVariableList ??= new List<IList>();
 
                     _warningVariableList.Add(list);
                     break;
                 case VariableStreamKind.Output:
-                    if (_outVariableList == null)
-                    {
-                        _outVariableList = new List<IList>();
-                    }
+                    _outVariableList ??= new List<IList>();
 
                     _outVariableList.Add(list);
                     break;
                 case VariableStreamKind.Information:
-                    if (_informationVariableList == null)
-                    {
-                        _informationVariableList = new List<IList>();
-                    }
+                    _informationVariableList ??= new List<IList>();
 
                     _informationVariableList.Add(list);
                     break;
@@ -552,15 +547,28 @@ internal object Retrieve()
             else if (_enumeratorToProcess != null)
             {
                 if (_enumeratorToProcessIsEmpty)
-                    return AutomationNull.Value;
-
-                if (!ParserOps.MoveNext(_context, null, _enumeratorToProcess))
                 {
-                    _enumeratorToProcessIsEmpty = true;
                     return AutomationNull.Value;
                 }
 
-                return ParserOps.Current(null, _enumeratorToProcess);
+                while (true)
+                {
+                    if (!ParserOps.MoveNext(_context, errorPosition: null, _enumeratorToProcess))
+                    {
+                        _enumeratorToProcessIsEmpty = true;
+                        return AutomationNull.Value;
+                    }
+
+                    object retValue = ParserOps.Current(errorPosition: null, _enumeratorToProcess);
+                    if (retValue == AutomationNull.Value)
+                    {
+                        // 'AutomationNull.Value' from the enumerator won't be sent to the pipeline.
+                        // We try to get the next value in this case.
+                        continue;
+                    }
+
+                    return retValue;
+                }
             }
             else if (ExternalReader != null)
             {
@@ -595,11 +603,7 @@ internal object Retrieve()
         /// <summary>
         /// Removes all the objects from the Pipe.
         /// </summary>
-        internal void Clear()
-        {
-            if (ObjectQueue != null)
-                ObjectQueue.Clear();
-        }
+        internal void Clear() => ObjectQueue?.Clear();
 
         /// <summary>
         /// Returns the currently queued items in the pipe.  Note that this will
diff --git a/src/System.Management.Automation/engine/ProcessCodeMethods.cs b/src/System.Management.Automation/engine/ProcessCodeMethods.cs
index 604ac3787ad..68d47fbec71 100644
--- a/src/System.Management.Automation/engine/ProcessCodeMethods.cs
+++ b/src/System.Management.Automation/engine/ProcessCodeMethods.cs
@@ -61,32 +61,12 @@ internal static int GetParentPid(Process process)
         internal static int GetParentPid(Process process)
         {
             Diagnostics.Assert(process != null, "Ensure process is not null before calling");
-            PROCESS_BASIC_INFORMATION pbi;
+            Interop.Windows.PROCESS_BASIC_INFORMATION pbi;
             int size;
-            var res = NtQueryInformationProcess(process.Handle, 0, out pbi, Marshal.SizeOf<PROCESS_BASIC_INFORMATION>(), out size);
+            var res = Interop.Windows.NtQueryInformationProcess(process.Handle, 0, out pbi, Marshal.SizeOf<Interop.Windows.PROCESS_BASIC_INFORMATION>(), out size);
 
             return res != 0 ? InvalidProcessId : pbi.InheritedFromUniqueProcessId.ToInt32();
         }
-
-        [StructLayout(LayoutKind.Sequential)]
-        private struct PROCESS_BASIC_INFORMATION
-        {
-            public IntPtr ExitStatus;
-            public IntPtr PebBaseAddress;
-            public IntPtr AffinityMask;
-            public IntPtr BasePriority;
-            public IntPtr UniqueProcessId;
-            public IntPtr InheritedFromUniqueProcessId;
-        }
-
-        [DllImport("ntdll.dll", SetLastError = true)]
-        private static extern int NtQueryInformationProcess(
-                IntPtr processHandle,
-                int processInformationClass,
-                out PROCESS_BASIC_INFORMATION processInformation,
-                int processInformationLength,
-                out int returnLength);
 #endif
-
     }
 }
diff --git a/src/System.Management.Automation/engine/ProgressRecord.cs b/src/System.Management.Automation/engine/ProgressRecord.cs
index b721b4003d9..b3139dc8e6e 100644
--- a/src/System.Management.Automation/engine/ProgressRecord.cs
+++ b/src/System.Management.Automation/engine/ProgressRecord.cs
@@ -15,7 +15,7 @@ namespace System.Management.Automation
     /// which, according to user preference, forwards that information on to the host for rendering to the user.
     /// </remarks>
     /// <seealso cref="System.Management.Automation.Cmdlet.WriteProgress(ProgressRecord)"/>
-    [DataContract()]
+    [DataContract]
     public
     class ProgressRecord
     {
@@ -59,6 +59,25 @@ class ProgressRecord
             this.status = statusDescription;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the ProgressRecord class and defines the activity Id.
+        /// </summary>
+        /// <param name="activityId">
+        /// A unique numeric key that identifies the activity to which this record applies.
+        /// </param>
+        public
+        ProgressRecord(int activityId)
+        {
+            if (activityId < 0)
+            {
+                // negative Ids are reserved to indicate "no id" for parent Ids.
+
+                throw PSTraceSource.NewArgumentOutOfRangeException(nameof(activityId), activityId, ProgressRecordStrings.ArgMayNotBeNegative, "activityId");
+            }
+
+            this.id = activityId;
+        }
+
         /// <summary>
         /// Cloning constructor (all fields are value types - can treat our implementation of cloning as "deep" copy)
         /// </summary>
@@ -230,7 +249,7 @@ internal ProgressRecord(ProgressRecord other)
         ///
         /// Normally displayed beside the progress bar, as "N seconds remaining."
         /// </summary>
-        ///<remarks>
+        /// <remarks>
         /// A value less than 0 means "don't display a time remaining."
         /// </remarks>
         public
@@ -274,7 +293,7 @@ internal ProgressRecord(ProgressRecord other)
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.ToString"/>
+        /// Overrides <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "parent = a id = b act = c stat = d cur = e pct = f sec = g type = h" where
@@ -360,15 +379,8 @@ internal static int GetPercentageComplete(DateTime startTime, TimeSpan expectedD
                 startTime.Kind == DateTimeKind.Utc,
                 "DateTime arithmetic should always be done in utc mode [to avoid problems when some operands are calculated right before and right after switching to /from a daylight saving time");
 
-            if (startTime > now)
-            {
-                throw new ArgumentOutOfRangeException(nameof(startTime));
-            }
-
-            if (expectedDuration <= TimeSpan.Zero)
-            {
-                throw new ArgumentOutOfRangeException(nameof(expectedDuration));
-            }
+            ArgumentOutOfRangeException.ThrowIfGreaterThan(startTime, now);
+            ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(expectedDuration, TimeSpan.Zero);
 
             /*
              * According to the spec of Checkpoint-Computer
@@ -417,28 +429,28 @@ internal static int GetPercentageComplete(DateTime startTime, TimeSpan expectedD
 
         #region DO NOT REMOVE OR RENAME THESE FIELDS - it will break remoting compatibility with Windows PowerShell
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly int id;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private int parentId = -1;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private string activity;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private string status;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private string currentOperation;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private int percent = -1;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private int secondsRemaining = -1;
 
-        [DataMemberAttribute()]
+        [DataMember]
         private ProgressRecordType type = ProgressRecordType.Processing;
 
         #endregion
@@ -488,9 +500,13 @@ internal static ProgressRecord FromPSObjectForRemoting(PSObject progressAsPSObje
         /// <returns>This object as a PSObject property bag.</returns>
         internal PSObject ToPSObjectForRemoting()
         {
+            // Activity used to be mandatory but that's no longer the case.
+            // We ensure the string has a value to maintain compatibility with older versions.
+            string activity = string.IsNullOrEmpty(Activity) ? " " : Activity;
+
             PSObject progressAsPSObject = RemotingEncoder.CreateEmptyPSObject();
 
-            progressAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.ProgressRecord_Activity, this.Activity));
+            progressAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.ProgressRecord_Activity, activity));
             progressAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.ProgressRecord_ActivityId, this.ActivityId));
             progressAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.ProgressRecord_StatusDescription, this.StatusDescription));
 
@@ -512,10 +528,11 @@ internal PSObject ToPSObjectForRemoting()
     public
     enum ProgressRecordType
     {
-        ///<summary>
+        /// <summary>
+        /// <para>
         /// Operation just started or is not yet complete.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// A cmdlet can call WriteProgress with ProgressRecordType.Processing
         /// as many times as it wishes.  However, at the end of the operation,
         /// it should call once more with ProgressRecordType.Completed.
@@ -526,17 +543,20 @@ enum ProgressRecordType
         /// of the same Id, the host will update that display.
         /// Finally, when the host receives a 'completed' record
         /// for that activity, it will remove the progress indicator.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         Processing,
 
         /// <summary>
+        /// <para>
         /// Operation is complete.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// If a cmdlet uses WriteProgress, it should use
         /// ProgressRecordType.Completed exactly once, in the last call
         /// to WriteProgress.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         Completed
     }
 }
diff --git a/src/System.Management.Automation/engine/ProxyCommand.cs b/src/System.Management.Automation/engine/ProxyCommand.cs
index 5703adec664..80d70377e87 100644
--- a/src/System.Management.Automation/engine/ProxyCommand.cs
+++ b/src/System.Management.Automation/engine/ProxyCommand.cs
@@ -247,6 +247,30 @@ public static string GetEnd(CommandMetadata commandMetadata)
             return commandMetadata.GetEndBlock();
         }
 
+        /// <summary>
+        /// This method constructs a string representing the clean block of the command
+        /// specified by <paramref name="commandMetadata"/>. The returned string only contains the
+        /// script, it is not enclosed in "clean { }".
+        /// </summary>
+        /// <param name="commandMetadata">
+        /// An instance of CommandMetadata representing a command.
+        /// </param>
+        /// <returns>
+        /// A string representing the end block of the command.
+        /// </returns>
+        /// <exception cref="ArgumentNullException">
+        /// If <paramref name="commandMetadata"/> is null.
+        /// </exception>
+        public static string GetClean(CommandMetadata commandMetadata)
+        {
+            if (commandMetadata == null)
+            {
+                throw PSTraceSource.NewArgumentNullException(nameof(commandMetadata));
+            }
+
+            return commandMetadata.GetCleanBlock();
+        }
+
         private static T GetProperty<T>(PSObject obj, string property) where T : class
         {
             T result = null;
@@ -352,10 +376,7 @@ private static void AppendType(StringBuilder sb, string section, PSObject parent
         /// <exception cref="System.InvalidOperationException">When the help argument is not recognized as a HelpInfo object.</exception>
         public static string GetHelpComments(PSObject help)
         {
-            if (help == null)
-            {
-                throw new ArgumentNullException(nameof(help));
-            }
+            ArgumentNullException.ThrowIfNull(help);
 
             bool isHelpObject = false;
             foreach (string typeName in help.InternalTypeNames)
diff --git a/src/System.Management.Automation/engine/PseudoParameters.cs b/src/System.Management.Automation/engine/PseudoParameters.cs
index 97b1d60e8ad..a3703a63d90 100644
--- a/src/System.Management.Automation/engine/PseudoParameters.cs
+++ b/src/System.Management.Automation/engine/PseudoParameters.cs
@@ -174,14 +174,20 @@ internal bool IsDisabled()
             {
                 if (!hasSeenExpAttribute && attr is ExperimentalAttribute expAttribute)
                 {
-                    if (expAttribute.ToHide) { return true; }
+                    if (expAttribute.ToHide)
+                    {
+                        return true;
+                    }
 
                     hasSeenExpAttribute = true;
                 }
                 else if (attr is ParameterAttribute paramAttribute)
                 {
                     hasParameterAttribute = true;
-                    if (paramAttribute.ToHide) { continue; }
+                    if (paramAttribute.ToHide)
+                    {
+                        continue;
+                    }
 
                     hasEnabledParamAttribute = true;
                 }
@@ -208,7 +214,6 @@ internal bool IsDisabled()
     /// <seealso cref="RuntimeDefinedParameter"/>
     /// <seealso cref="IDynamicParameters"/>
     /// <seealso cref="IDynamicParameters.GetDynamicParameters"/>
-    [Serializable]
     public class RuntimeDefinedParameterDictionary : Dictionary<string, RuntimeDefinedParameter>
     {
         /// <summary>
diff --git a/src/System.Management.Automation/engine/ReflectionParameterBinder.cs b/src/System.Management.Automation/engine/ReflectionParameterBinder.cs
index 6488dbcee90..5ee84f4c42f 100644
--- a/src/System.Management.Automation/engine/ReflectionParameterBinder.cs
+++ b/src/System.Management.Automation/engine/ReflectionParameterBinder.cs
@@ -155,39 +155,39 @@ internal override void BindParameter(string name, object value, CompiledCommandP
         static ReflectionParameterBinder()
         {
             // Statically add delegates that we typically need on startup or every time we run PowerShell - this avoids the JIT
-            s_getterMethods.TryAdd(Tuple.Create(typeof(OutDefaultCommand), "InputObject"), o => ((OutDefaultCommand)o).InputObject);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(OutDefaultCommand), "InputObject"), (o, v) => ((OutDefaultCommand)o).InputObject = (PSObject)v);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(OutDefaultCommand), "InputObject"), static o => ((OutDefaultCommand)o).InputObject);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(OutDefaultCommand), "InputObject"), static (o, v) => ((OutDefaultCommand)o).InputObject = (PSObject)v);
 
-            s_getterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "InputObject"), o => ((OutLineOutputCommand)o).InputObject);
-            s_getterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "LineOutput"), o => ((OutLineOutputCommand)o).LineOutput);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "InputObject"), (o, v) => ((OutLineOutputCommand)o).InputObject = (PSObject)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "LineOutput"), (o, v) => ((OutLineOutputCommand)o).LineOutput = v);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "InputObject"), static o => ((OutLineOutputCommand)o).InputObject);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "LineOutput"), static o => ((OutLineOutputCommand)o).LineOutput);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "InputObject"), static (o, v) => ((OutLineOutputCommand)o).InputObject = (PSObject)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(OutLineOutputCommand), "LineOutput"), static (o, v) => ((OutLineOutputCommand)o).LineOutput = v);
 
-            s_getterMethods.TryAdd(Tuple.Create(typeof(FormatDefaultCommand), "InputObject"), o => ((FormatDefaultCommand)o).InputObject);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(FormatDefaultCommand), "InputObject"), (o, v) => ((FormatDefaultCommand)o).InputObject = (PSObject)v);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(FormatDefaultCommand), "InputObject"), static o => ((FormatDefaultCommand)o).InputObject);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(FormatDefaultCommand), "InputObject"), static (o, v) => ((FormatDefaultCommand)o).InputObject = (PSObject)v);
 
-            s_setterMethods.TryAdd(Tuple.Create(typeof(SetStrictModeCommand), "Off"), (o, v) => ((SetStrictModeCommand)o).Off = (SwitchParameter)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(SetStrictModeCommand), "Version"), (o, v) => ((SetStrictModeCommand)o).Version = (Version)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(SetStrictModeCommand), "Off"), static (o, v) => ((SetStrictModeCommand)o).Off = (SwitchParameter)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(SetStrictModeCommand), "Version"), static (o, v) => ((SetStrictModeCommand)o).Version = (Version)v);
 
-            s_getterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "InputObject"), o => ((ForEachObjectCommand)o).InputObject);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "InputObject"), (o, v) => ((ForEachObjectCommand)o).InputObject = (PSObject)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "Process"), (o, v) => ((ForEachObjectCommand)o).Process = (ScriptBlock[])v);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "InputObject"), static o => ((ForEachObjectCommand)o).InputObject);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "InputObject"), static (o, v) => ((ForEachObjectCommand)o).InputObject = (PSObject)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ForEachObjectCommand), "Process"), static (o, v) => ((ForEachObjectCommand)o).Process = (ScriptBlock[])v);
 
-            s_getterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "InputObject"), o => ((WhereObjectCommand)o).InputObject);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "InputObject"), (o, v) => ((WhereObjectCommand)o).InputObject = (PSObject)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "FilterScript"), (o, v) => ((WhereObjectCommand)o).FilterScript = (ScriptBlock)v);
+            s_getterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "InputObject"), static o => ((WhereObjectCommand)o).InputObject);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "InputObject"), static (o, v) => ((WhereObjectCommand)o).InputObject = (PSObject)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(WhereObjectCommand), "FilterScript"), static (o, v) => ((WhereObjectCommand)o).FilterScript = (ScriptBlock)v);
 
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "Name"), (o, v) => ((ImportModuleCommand)o).Name = (string[])v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "ModuleInfo"), (o, v) => ((ImportModuleCommand)o).ModuleInfo = (PSModuleInfo[])v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "Scope"), (o, v) => ((ImportModuleCommand)o).Scope = (string)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "PassThru"), (o, v) => ((ImportModuleCommand)o).PassThru = (SwitchParameter)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "Name"), static (o, v) => ((ImportModuleCommand)o).Name = (string[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "ModuleInfo"), static (o, v) => ((ImportModuleCommand)o).ModuleInfo = (PSModuleInfo[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "Scope"), static (o, v) => ((ImportModuleCommand)o).Scope = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(ImportModuleCommand), "PassThru"), static (o, v) => ((ImportModuleCommand)o).PassThru = (SwitchParameter)v);
 
-            s_setterMethods.TryAdd(Tuple.Create(typeof(GetCommandCommand), "Name"), (o, v) => ((GetCommandCommand)o).Name = (string[])v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(GetCommandCommand), "Module"), (o, v) => ((GetCommandCommand)o).Module = (string[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(GetCommandCommand), "Name"), static (o, v) => ((GetCommandCommand)o).Name = (string[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(GetCommandCommand), "Module"), static (o, v) => ((GetCommandCommand)o).Module = (string[])v);
 
-            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "Name"), (o, v) => ((GetModuleCommand)o).Name = (string[])v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "ListAvailable"), (o, v) => ((GetModuleCommand)o).ListAvailable = (SwitchParameter)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "FullyQualifiedName"), (o, v) => ((GetModuleCommand)o).FullyQualifiedName = (ModuleSpecification[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "Name"), static (o, v) => ((GetModuleCommand)o).Name = (string[])v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "ListAvailable"), static (o, v) => ((GetModuleCommand)o).ListAvailable = (SwitchParameter)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(GetModuleCommand), "FullyQualifiedName"), static (o, v) => ((GetModuleCommand)o).FullyQualifiedName = (ModuleSpecification[])v);
 
             s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "ErrorAction"),
                 (o, v) =>
@@ -207,14 +207,20 @@ static ReflectionParameterBinder()
                     v ??= LanguagePrimitives.ThrowInvalidCastException(null, typeof(ActionPreference));
                     ((CommonParameters)o).InformationAction = (ActionPreference)v;
                 });
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "Verbose"), (o, v) => ((CommonParameters)o).Verbose = (SwitchParameter)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "Debug"), (o, v) => ((CommonParameters)o).Debug = (SwitchParameter)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "ErrorVariable"), (o, v) => ((CommonParameters)o).ErrorVariable = (string)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "WarningVariable"), (o, v) => ((CommonParameters)o).WarningVariable = (string)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "InformationVariable"), (o, v) => ((CommonParameters)o).InformationVariable = (string)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "OutVariable"), (o, v) => ((CommonParameters)o).OutVariable = (string)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "OutBuffer"), (o, v) => ((CommonParameters)o).OutBuffer = (int)v);
-            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "PipelineVariable"), (o, v) => ((CommonParameters)o).PipelineVariable = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "ProgressAction"),
+                (o, v) =>
+                {
+                    v ??= LanguagePrimitives.ThrowInvalidCastException(null, typeof(ActionPreference));
+                    ((CommonParameters)o).ProgressAction = (ActionPreference)v;
+                });
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "Verbose"), static (o, v) => ((CommonParameters)o).Verbose = (SwitchParameter)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "Debug"), static (o, v) => ((CommonParameters)o).Debug = (SwitchParameter)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "ErrorVariable"), static (o, v) => ((CommonParameters)o).ErrorVariable = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "WarningVariable"), static (o, v) => ((CommonParameters)o).WarningVariable = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "InformationVariable"), static (o, v) => ((CommonParameters)o).InformationVariable = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "OutVariable"), static (o, v) => ((CommonParameters)o).OutVariable = (string)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "OutBuffer"), static (o, v) => ((CommonParameters)o).OutBuffer = (int)v);
+            s_setterMethods.TryAdd(Tuple.Create(typeof(CommonParameters), "PipelineVariable"), static (o, v) => ((CommonParameters)o).PipelineVariable = (string)v);
         }
 
         private static readonly ConcurrentDictionary<Tuple<Type, string>, Func<object, object>> s_getterMethods
diff --git a/src/System.Management.Automation/engine/ScriptCommandProcessor.cs b/src/System.Management.Automation/engine/ScriptCommandProcessor.cs
index 99b685e07d2..32bec9fd5a9 100644
--- a/src/System.Management.Automation/engine/ScriptCommandProcessor.cs
+++ b/src/System.Management.Automation/engine/ScriptCommandProcessor.cs
@@ -6,6 +6,7 @@
 using System.Diagnostics;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
+using System.Management.Automation.Runspaces;
 using System.Reflection;
 
 using Dbg = System.Management.Automation.Diagnostics;
@@ -47,7 +48,7 @@ protected ScriptCommandProcessorBase(IScriptCommandInfo commandInfo, ExecutionCo
         protected bool _dontUseScopeCommandOrigin;
 
         /// <summary>
-        /// If true, then an exit exception will be rethrown to instead of caught and processed...
+        /// If true, then an exit exception will be rethrown instead of caught and processed...
         /// </summary>
         protected bool _rethrowExitException;
 
@@ -121,7 +122,7 @@ protected void CommonInitialization(ScriptBlock scriptBlock, ExecutionContext co
             // language modes (getting internal functions in the user's state) isn't a danger
             if ((!this.UseLocalScope) && (!this._rethrowExitException))
             {
-                ValidateCompatibleLanguageMode(_scriptBlock, context.LanguageMode, Command.MyInvocation);
+                ValidateCompatibleLanguageMode(_scriptBlock, context, Command.MyInvocation);
             }
         }
 
@@ -142,9 +143,8 @@ internal override bool IsHelpRequested(out string helpTarget, out HelpCategory h
                     if (parameter.IsDashQuestion())
                     {
                         Dictionary<Ast, Token[]> scriptBlockTokenCache = new Dictionary<Ast, Token[]>();
-                        string unused;
                         HelpInfo helpInfo = _scriptBlock.GetHelpInfo(context: Context, commandInfo: CommandInfo,
-                            dontSearchOnRemoteComputer: false, scriptBlockTokenCache: scriptBlockTokenCache, helpFile: out unused, helpUriFromDotLink: out unused);
+                            dontSearchOnRemoteComputer: false, scriptBlockTokenCache: scriptBlockTokenCache, helpFile: out _, helpUriFromDotLink: out _);
                         if (helpInfo == null)
                         {
                             break;
@@ -237,6 +237,7 @@ internal sealed class DlrScriptCommandProcessor : ScriptCommandProcessorBase
         private MutableTuple _localsTuple;
         private bool _runOptimizedCode;
         private bool _argsBound;
+        private bool _anyClauseExecuted;
         private FunctionContext _functionContext;
 
         internal DlrScriptCommandProcessor(ScriptBlock scriptBlock, ExecutionContext context, bool useNewScope, CommandOrigin origin, SessionStateInternal sessionState, object dollarUnderbar)
@@ -327,8 +328,7 @@ internal override void DoBegin()
 
                 ScriptBlock.LogScriptBlockStart(_scriptBlock, Context.CurrentRunspace.InstanceId);
 
-                // Even if there is no begin, we need to set up the execution scope for this
-                // script...
+                // Even if there is no begin, we need to set up the execution scope for this script...
                 SetCurrentScopeToExecutionScope();
                 CommandProcessorBase oldCurrentCommandProcessor = Context.CurrentCommandProcessor;
                 try
@@ -410,6 +410,7 @@ internal override void Complete()
                 if (_scriptBlock.HasEndBlock)
                 {
                     var endBlock = _runOptimizedCode ? _scriptBlock.EndBlock : _scriptBlock.UnoptimizedEndBlock;
+
                     if (this.CommandRuntime.InputPipe.ExternalReader == null)
                     {
                         if (IsPipelineInputExpected())
@@ -433,7 +434,33 @@ internal override void Complete()
             }
             finally
             {
-                ScriptBlock.LogScriptBlockEnd(_scriptBlock, Context.CurrentRunspace.InstanceId);
+                if (!_scriptBlock.HasCleanBlock)
+                {
+                    ScriptBlock.LogScriptBlockEnd(_scriptBlock, Context.CurrentRunspace.InstanceId);
+                }
+            }
+        }
+
+        protected override void CleanResource()
+        {
+            if (_scriptBlock.HasCleanBlock && _anyClauseExecuted)
+            {
+                // The 'Clean' block doesn't write to pipeline.
+                Pipe oldOutputPipe = _functionContext._outputPipe;
+                _functionContext._outputPipe = new Pipe { NullPipe = true };
+
+                try
+                {
+                    RunClause(
+                        clause: _runOptimizedCode ? _scriptBlock.CleanBlock : _scriptBlock.UnoptimizedCleanBlock,
+                        dollarUnderbar: AutomationNull.Value,
+                        inputToProcess: AutomationNull.Value);
+                }
+                finally
+                {
+                    _functionContext._outputPipe = oldOutputPipe;
+                    ScriptBlock.LogScriptBlockEnd(_scriptBlock, Context.CurrentRunspace.InstanceId);
+                }
             }
         }
 
@@ -459,6 +486,7 @@ private void RunClause(Action<FunctionContext> clause, object dollarUnderbar, ob
         {
             ExecutionContext.CheckStackDepth();
 
+            _anyClauseExecuted = true;
             Pipe oldErrorOutputPipe = this.Context.ShellFunctionErrorOutputPipe;
 
             // If the script block has a different language mode than the current,
@@ -553,7 +581,7 @@ private void RunClause(Action<FunctionContext> clause, object dollarUnderbar, ob
                 }
                 finally
                 {
-                    this.Context.RestoreErrorPipe(oldErrorOutputPipe);
+                    Context.ShellFunctionErrorOutputPipe = oldErrorOutputPipe;
 
                     if (oldLanguageMode.HasValue)
                     {
@@ -584,15 +612,12 @@ private void RunClause(Action<FunctionContext> clause, object dollarUnderbar, ob
             }
             catch (RuntimeException e)
             {
-                ManageScriptException(e); // always throws
-                // This quiets the compiler which wants to see a return value
-                // in all codepaths.
-                throw;
+                // This method always throws.
+                ManageScriptException(e);
             }
             catch (Exception e)
             {
-                // This cmdlet threw an exception, so
-                // wrap it and bubble it up.
+                // This cmdlet threw an exception, so wrap it and bubble it up.
                 throw ManageInvocationException(e);
             }
         }
diff --git a/src/System.Management.Automation/engine/ScriptInfo.cs b/src/System.Management.Automation/engine/ScriptInfo.cs
index af91867c452..1abdc1424bf 100644
--- a/src/System.Management.Automation/engine/ScriptInfo.cs
+++ b/src/System.Management.Automation/engine/ScriptInfo.cs
@@ -7,7 +7,7 @@
 namespace System.Management.Automation
 {
     /// <summary>
-    /// The command information for MSH scripts that are directly executable by MSH.
+    /// The command information for scripts that are directly executable by PowerShell.
     /// </summary>
     public class ScriptInfo : CommandInfo, IScriptCommandInfo
     {
diff --git a/src/System.Management.Automation/engine/SecurityManagerBase.cs b/src/System.Management.Automation/engine/SecurityManagerBase.cs
index 31712949cf7..0e4f3359704 100644
--- a/src/System.Management.Automation/engine/SecurityManagerBase.cs
+++ b/src/System.Management.Automation/engine/SecurityManagerBase.cs
@@ -18,7 +18,7 @@ public enum CommandOrigin
         Runspace,
 
         /// <summary>
-        /// The command was dispatched by the msh engine as a result of
+        /// The command was dispatched by the engine as a result of
         /// a dispatch request from an already running command.
         /// </summary>
         Internal
diff --git a/src/System.Management.Automation/engine/SessionState.cs b/src/System.Management.Automation/engine/SessionState.cs
index e0bdbd23ee0..a53c211beb2 100644
--- a/src/System.Management.Automation/engine/SessionState.cs
+++ b/src/System.Management.Automation/engine/SessionState.cs
@@ -27,7 +27,7 @@ internal sealed partial class SessionStateInternal
         /// An instance of the PSTraceSource class used for trace output
         /// using "SessionState" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "SessionState",
              "SessionState Class")]
         private static readonly Dbg.PSTraceSource s_tracer =
@@ -337,10 +337,9 @@ internal void InitializeFixedVariables()
             this.GlobalScope.SetVariable(v.Name, v, asValue: false, force: true, this, CommandOrigin.Internal, fastPath: true);
 
             // $PID
-            Process currentProcess = Process.GetCurrentProcess();
             v = new PSVariable(
                     SpecialVariables.PID,
-                    currentProcess.Id,
+                    Environment.ProcessId,
                     ScopedItemOptions.Constant | ScopedItemOptions.AllScope,
                     RunspaceInit.PIDDescription);
             this.GlobalScope.SetVariable(v.Name, v, asValue: false, force: true, this, CommandOrigin.Internal, fastPath: true);
@@ -391,14 +390,27 @@ internal SessionStateEntryVisibility CheckApplicationVisibility(string applicati
 
         private static SessionStateEntryVisibility checkPathVisibility(List<string> list, string path)
         {
-            if (list == null || list.Count == 0) return SessionStateEntryVisibility.Private;
-            if (string.IsNullOrEmpty(path)) return SessionStateEntryVisibility.Private;
+            if (list == null || list.Count == 0)
+            {
+                return SessionStateEntryVisibility.Private;
+            }
+
+            if (string.IsNullOrEmpty(path))
+            {
+                return SessionStateEntryVisibility.Private;
+            }
+
+            if (list.Contains("*"))
+            {
+                return SessionStateEntryVisibility.Public;
+            }
 
-            if (list.Contains("*")) return SessionStateEntryVisibility.Public;
             foreach (string p in list)
             {
                 if (string.Equals(p, path, StringComparison.OrdinalIgnoreCase))
+                {
                     return SessionStateEntryVisibility.Public;
+                }
 
                 if (WildcardPattern.ContainsWildcardCharacters(p))
                 {
diff --git a/src/System.Management.Automation/engine/SessionStateCmdletAPIs.cs b/src/System.Management.Automation/engine/SessionStateCmdletAPIs.cs
index f14c25f7420..5afa8f0169f 100644
--- a/src/System.Management.Automation/engine/SessionStateCmdletAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateCmdletAPIs.cs
@@ -35,7 +35,7 @@ internal CmdletInfo GetCmdlet(string cmdletName)
         /// The name of the cmdlet value to retrieve.
         /// </param>
         /// <param name="origin">
-        /// The origin of hte command trying to retrieve this cmdlet.
+        /// The origin of the command trying to retrieve this cmdlet.
         /// </param>
         /// <returns>
         /// The CmdletInfo representing the cmdlet.
diff --git a/src/System.Management.Automation/engine/SessionStateContainer.cs b/src/System.Management.Automation/engine/SessionStateContainer.cs
index ca7f03a42ca..fa8884b92e8 100644
--- a/src/System.Management.Automation/engine/SessionStateContainer.cs
+++ b/src/System.Management.Automation/engine/SessionStateContainer.cs
@@ -1324,8 +1324,8 @@ internal void GetChildItems(
                 try
                 {
                     // If we're recursing, do some path fixups to match user
-                    // expectations:
-                    if (recurse)
+                    // expectations, but only if the last part is a file and not a directory:
+                    if (recurse && !path.EndsWith(Path.DirectorySeparatorChar) && !path.EndsWith(Path.AltDirectorySeparatorChar))
                     {
                         string childName = GetChildName(path, context);
 
@@ -1434,8 +1434,7 @@ internal void GetChildItems(
                                 return;
                             }
 
-                            int unUsedChildrenNotMatchingFilterCriteria = 0;
-                            ProcessPathItems(providerInstance, providerPath, recurse, depth, context, out unUsedChildrenNotMatchingFilterCriteria, ProcessMode.Enumerate);
+                            ProcessPathItems(providerInstance, providerPath, recurse, depth, context, out _, ProcessMode.Enumerate);
                         }
                     }
                     else
@@ -1496,12 +1495,11 @@ internal void GetChildItems(
                 {
                     // Do the recursion manually so that we can apply the
                     // include and exclude filters
-                    int unUsedChildrenNotMatchingFilterCriteria = 0;
                     try
                     {
-                        // Temeporary set literal path as false to apply filter
+                        // Temporary set literal path as false to apply filter
                         context.SuppressWildcardExpansion = false;
-                        ProcessPathItems(providerInstance, path, recurse, depth, context, out unUsedChildrenNotMatchingFilterCriteria, ProcessMode.Enumerate);
+                        ProcessPathItems(providerInstance, path, recurse, depth, context, out _, ProcessMode.Enumerate);
                     }
                     finally
                     {
@@ -1841,7 +1839,7 @@ private void ProcessPathItems(
                         return;
                     }
 
-                    if (!(childNameObjects[index].BaseObject is string childName))
+                    if (childNameObjects[index].BaseObject is not string childName)
                     {
                         continue;
                     }
@@ -2586,7 +2584,7 @@ private void DoGetChildNamesManually(
                         return;
                     }
 
-                    if (!(result.BaseObject is string name))
+                    if (result.BaseObject is not string name)
                     {
                         continue;
                     }
@@ -2634,7 +2632,7 @@ private void DoGetChildNamesManually(
                                 return;
                             }
 
-                            if (!(result.BaseObject is string name))
+                            if (result.BaseObject is not string name)
                             {
                                 continue;
                             }
@@ -3499,37 +3497,7 @@ internal void NewItem(
                             throw PSTraceSource.NewArgumentNullException(nameof(content), SessionStateStrings.NewLinkTargetNotSpecified, path);
                         }
 
-                        ProviderInfo targetProvider = null;
-                        CmdletProvider targetProviderInstance = null;
-
-                        var globbedTarget = Globber.GetGlobbedProviderPathsFromMonadPath(
-                            targetPath,
-                            allowNonexistingPath,
-                            context,
-                            out targetProvider,
-                            out targetProviderInstance);
-
-                        if (!string.Equals(targetProvider.Name, "filesystem", StringComparison.OrdinalIgnoreCase))
-                        {
-                            throw PSTraceSource.NewNotSupportedException(SessionStateStrings.MustBeFileSystemPath);
-                        }
-
-                        if (globbedTarget.Count > 1)
-                        {
-                            throw PSTraceSource.NewInvalidOperationException(SessionStateStrings.PathResolvedToMultiple, targetPath);
-                        }
-
-                        if (globbedTarget.Count == 0)
-                        {
-                            throw PSTraceSource.NewInvalidOperationException(SessionStateStrings.PathNotFound, targetPath);
-                        }
-
-                        // If the original target was a relative path, we want to leave it as relative if it did not require
-                        // globbing to resolve.
-                        if (WildcardPattern.ContainsWildcardCharacters(targetPath))
-                        {
-                            content = globbedTarget[0];
-                        }
+                        content = targetPath;
                     }
 
                     NewItemPrivate(providerInstance, composedPath, type, content, context);
@@ -4089,10 +4057,7 @@ internal Collection<PSObject> CopyItem(string[] paths,
                 throw PSTraceSource.NewArgumentNullException(nameof(paths));
             }
 
-            if (copyPath == null)
-            {
-                copyPath = string.Empty;
-            }
+            copyPath ??= string.Empty;
 
             CmdletProviderContext context = new CmdletProviderContext(this.ExecutionContext);
             context.Force = force;
@@ -4155,14 +4120,10 @@ internal void CopyItem(
                 throw PSTraceSource.NewArgumentNullException(nameof(paths));
             }
 
-            if (copyPath == null)
-            {
-                copyPath = string.Empty;
-            }
+            copyPath ??= string.Empty;
 
             // Get the provider specific path for the destination
 
-            PSDriveInfo unusedDrive = null;
             ProviderInfo destinationProvider = null;
             Microsoft.PowerShell.Commands.CopyItemDynamicParameters dynamicParams = context.DynamicParameters as Microsoft.PowerShell.Commands.CopyItemDynamicParameters;
             bool destinationIsRemote = false;
@@ -4213,7 +4174,7 @@ internal void CopyItem(
                        copyPath,
                        context,
                        out destinationProvider,
-                       out unusedDrive);
+                       out _);
             }
             else
             {
@@ -4681,7 +4642,7 @@ internal object CopyItemDynamicParameters(
                 }
             }
 
-            if (providerPath != null)
+            if (providerInstance != null)
             {
                 // Get the dynamic parameters for the first resolved path
                 return CopyItemDynamicParameters(providerInstance, providerPath, destination, recurse, newContext);
@@ -4733,10 +4694,6 @@ private object CopyItemDynamicParameters(
                 providerInstance != null,
                 "Caller should validate providerInstance before calling this method");
 
-            Dbg.Diagnostics.Assert(
-                path != null,
-                "Caller should validate path before calling this method");
-
             Dbg.Diagnostics.Assert(
                 context != null,
                 "Caller should validate context before calling this method");
diff --git a/src/System.Management.Automation/engine/SessionStateDriveAPIs.cs b/src/System.Management.Automation/engine/SessionStateDriveAPIs.cs
index b8a89b9b31f..d01d4c63f5d 100644
--- a/src/System.Management.Automation/engine/SessionStateDriveAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateDriveAPIs.cs
@@ -231,28 +231,12 @@ internal void NewDrive(PSDriveInfo drive, string scopeID, CmdletProviderContext
 
         private static bool IsValidDriveName(string name)
         {
-            bool result = true;
+            const string CharactersInvalidInDriveName = ":/\\.~";
 
-            do
-            {
-                if (string.IsNullOrEmpty(name))
-                {
-                    result = false;
-                    break;
-                }
-
-                if (name.IndexOfAny(s_charactersInvalidInDriveName) >= 0)
-                {
-                    result = false;
-                    break;
-                }
-            } while (false);
-
-            return result;
+            return !string.IsNullOrEmpty(name)
+                && name.AsSpan().IndexOfAny(CharactersInvalidInDriveName) < 0;
         }
 
-        private static readonly char[] s_charactersInvalidInDriveName = new char[] { ':', '/', '\\', '.', '~' };
-
         /// <summary>
         /// Tries to resolve the drive root as an MSH path. If it successfully resolves
         /// to a single path then the resolved provider internal path is returned. If it
@@ -1450,4 +1434,3 @@ internal PSDriveInfo CurrentDrive
 }
 
 #pragma warning restore 56500
-
diff --git a/src/System.Management.Automation/engine/SessionStateFunctionAPIs.cs b/src/System.Management.Automation/engine/SessionStateFunctionAPIs.cs
index f444f46d2c3..5ef285ddcec 100644
--- a/src/System.Management.Automation/engine/SessionStateFunctionAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateFunctionAPIs.cs
@@ -5,6 +5,7 @@
 using System.Collections.Generic;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -184,7 +185,7 @@ private bool IsFunctionVisibleInDebugger(FunctionInfo fnInfo, CommandOrigin orig
 
             // Early out.
             // Always allow built-in functions needed for command line debugging.
-            if ((this.ExecutionContext.LanguageMode == PSLanguageMode.FullLanguage) ||
+            if (this.ExecutionContext.LanguageMode == PSLanguageMode.FullLanguage ||
                 (fnInfo == null) ||
                 (fnInfo.Name.Equals("prompt", StringComparison.OrdinalIgnoreCase)) ||
                 (fnInfo.Name.Equals("TabExpansion2", StringComparison.OrdinalIgnoreCase)) ||
diff --git a/src/System.Management.Automation/engine/SessionStateItem.cs b/src/System.Management.Automation/engine/SessionStateItem.cs
index 3d5262bf6c0..173043515ba 100644
--- a/src/System.Management.Automation/engine/SessionStateItem.cs
+++ b/src/System.Management.Automation/engine/SessionStateItem.cs
@@ -1375,4 +1375,3 @@ private object InvokeDefaultActionDynamicParameters(
 }
 
 #pragma warning restore 56500
-
diff --git a/src/System.Management.Automation/engine/SessionStateLocationAPIs.cs b/src/System.Management.Automation/engine/SessionStateLocationAPIs.cs
index 6869f5071fb..56de07b8871 100644
--- a/src/System.Management.Automation/engine/SessionStateLocationAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateLocationAPIs.cs
@@ -316,10 +316,7 @@ internal PathInfo SetLocation(string path, CmdletProviderContext context, bool l
                 }
             }
 
-            if (context == null)
-            {
-                context = new CmdletProviderContext(this.ExecutionContext);
-            }
+            context ??= new CmdletProviderContext(this.ExecutionContext);
 
             if (CurrentDrive != null)
             {
diff --git a/src/System.Management.Automation/engine/SessionStateNavigation.cs b/src/System.Management.Automation/engine/SessionStateNavigation.cs
index f6d1a28eb1c..d2d27ec2d83 100644
--- a/src/System.Management.Automation/engine/SessionStateNavigation.cs
+++ b/src/System.Management.Automation/engine/SessionStateNavigation.cs
@@ -1458,7 +1458,6 @@ internal void MoveItem(
                     }
                     else
                     {
-                        PSDriveInfo unusedPSDriveInfo = null;
                         ProviderInfo destinationProvider = null;
 
                         CmdletProviderContext destinationContext = new CmdletProviderContext(this.ExecutionContext);
@@ -1472,7 +1471,7 @@ internal void MoveItem(
                                     providerDestinationPaths[0].Path,
                                     destinationContext,
                                     out destinationProvider,
-                                    out unusedPSDriveInfo);
+                                    out _);
                         }
                         else
                         {
@@ -1484,7 +1483,7 @@ internal void MoveItem(
                                     destination,
                                     destinationContext,
                                     out destinationProvider,
-                                    out unusedPSDriveInfo);
+                                    out _);
                         }
 
                         // Now verify the providers are the same.
@@ -1749,4 +1748,3 @@ private object MoveItemDynamicParameters(
 }
 
 #pragma warning restore 56500
-
diff --git a/src/System.Management.Automation/engine/SessionStateProperty.cs b/src/System.Management.Automation/engine/SessionStateProperty.cs
index d4568d2ebb3..9f621fa2f7a 100644
--- a/src/System.Management.Automation/engine/SessionStateProperty.cs
+++ b/src/System.Management.Automation/engine/SessionStateProperty.cs
@@ -1116,4 +1116,3 @@ private object ClearPropertyDynamicParameters(
 }
 
 #pragma warning restore 56500
-
diff --git a/src/System.Management.Automation/engine/SessionStateProviderAPIs.cs b/src/System.Management.Automation/engine/SessionStateProviderAPIs.cs
index a6a7d2efc7f..3ad2ed99e31 100644
--- a/src/System.Management.Automation/engine/SessionStateProviderAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateProviderAPIs.cs
@@ -350,7 +350,7 @@ internal DriveCmdletProvider GetDriveProviderInstance(string providerId)
                 throw PSTraceSource.NewArgumentNullException(nameof(providerId));
             }
 
-            if (!(GetProviderInstance(providerId) is DriveCmdletProvider driveCmdletProvider))
+            if (GetProviderInstance(providerId) is not DriveCmdletProvider driveCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.DriveCmdletProvider_NotSupported);
@@ -382,7 +382,7 @@ internal DriveCmdletProvider GetDriveProviderInstance(ProviderInfo provider)
                 throw PSTraceSource.NewArgumentNullException(nameof(provider));
             }
 
-            if (!(GetProviderInstance(provider) is DriveCmdletProvider driveCmdletProvider))
+            if (GetProviderInstance(provider) is not DriveCmdletProvider driveCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.DriveCmdletProvider_NotSupported);
@@ -414,7 +414,7 @@ private static DriveCmdletProvider GetDriveProviderInstance(CmdletProvider provi
                 throw PSTraceSource.NewArgumentNullException(nameof(providerInstance));
             }
 
-            if (!(providerInstance is DriveCmdletProvider driveCmdletProvider))
+            if (providerInstance is not DriveCmdletProvider driveCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.DriveCmdletProvider_NotSupported);
@@ -449,7 +449,7 @@ internal ItemCmdletProvider GetItemProviderInstance(string providerId)
                 throw PSTraceSource.NewArgumentNullException(nameof(providerId));
             }
 
-            if (!(GetProviderInstance(providerId) is ItemCmdletProvider itemCmdletProvider))
+            if (GetProviderInstance(providerId) is not ItemCmdletProvider itemCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ItemCmdletProvider_NotSupported);
@@ -481,7 +481,7 @@ internal ItemCmdletProvider GetItemProviderInstance(ProviderInfo provider)
                 throw PSTraceSource.NewArgumentNullException(nameof(provider));
             }
 
-            if (!(GetProviderInstance(provider) is ItemCmdletProvider itemCmdletProvider))
+            if (GetProviderInstance(provider) is not ItemCmdletProvider itemCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ItemCmdletProvider_NotSupported);
@@ -513,7 +513,7 @@ private static ItemCmdletProvider GetItemProviderInstance(CmdletProvider provide
                 throw PSTraceSource.NewArgumentNullException(nameof(providerInstance));
             }
 
-            if (!(providerInstance is ItemCmdletProvider itemCmdletProvider))
+            if (providerInstance is not ItemCmdletProvider itemCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ItemCmdletProvider_NotSupported);
@@ -548,7 +548,7 @@ internal ContainerCmdletProvider GetContainerProviderInstance(string providerId)
                 throw PSTraceSource.NewArgumentNullException(nameof(providerId));
             }
 
-            if (!(GetProviderInstance(providerId) is ContainerCmdletProvider containerCmdletProvider))
+            if (GetProviderInstance(providerId) is not ContainerCmdletProvider containerCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ContainerCmdletProvider_NotSupported);
@@ -580,7 +580,7 @@ internal ContainerCmdletProvider GetContainerProviderInstance(ProviderInfo provi
                 throw PSTraceSource.NewArgumentNullException(nameof(provider));
             }
 
-            if (!(GetProviderInstance(provider) is ContainerCmdletProvider containerCmdletProvider))
+            if (GetProviderInstance(provider) is not ContainerCmdletProvider containerCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ContainerCmdletProvider_NotSupported);
@@ -612,7 +612,7 @@ private static ContainerCmdletProvider GetContainerProviderInstance(CmdletProvid
                 throw PSTraceSource.NewArgumentNullException(nameof(providerInstance));
             }
 
-            if (!(providerInstance is ContainerCmdletProvider containerCmdletProvider))
+            if (providerInstance is not ContainerCmdletProvider containerCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.ContainerCmdletProvider_NotSupported);
@@ -644,7 +644,7 @@ internal NavigationCmdletProvider GetNavigationProviderInstance(ProviderInfo pro
                 throw PSTraceSource.NewArgumentNullException(nameof(provider));
             }
 
-            if (!(GetProviderInstance(provider) is NavigationCmdletProvider navigationCmdletProvider))
+            if (GetProviderInstance(provider) is not NavigationCmdletProvider navigationCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(SessionStateStrings.NavigationCmdletProvider_NotSupported);
@@ -960,10 +960,7 @@ internal void InitializeProvider(
                 throw PSTraceSource.NewArgumentNullException(nameof(provider));
             }
 
-            if (context == null)
-            {
-                context = new CmdletProviderContext(this.ExecutionContext);
-            }
+            context ??= new CmdletProviderContext(this.ExecutionContext);
 
             // Initialize the provider so that it can add any drives
             // that it needs.
diff --git a/src/System.Management.Automation/engine/SessionStateScope.cs b/src/System.Management.Automation/engine/SessionStateScope.cs
index fc5dff00784..03ab9bdfb4b 100644
--- a/src/System.Management.Automation/engine/SessionStateScope.cs
+++ b/src/System.Management.Automation/engine/SessionStateScope.cs
@@ -6,6 +6,7 @@
 using System.Linq;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
 
 namespace System.Management.Automation
 {
@@ -421,7 +422,10 @@ internal PSVariable SetVariable(string name, object value, bool asValue, bool fo
             bool varExists = TryGetVariable(name, origin, true, out variable);
 
             // Initialize the private variable dictionary if it's not yet
-            if (_variables == null) { GetPrivateVariables(); }
+            if (_variables == null)
+            {
+                GetPrivateVariables();
+            }
 
             if (!asValue && variableToSet != null)
             {
@@ -1245,11 +1249,18 @@ internal FunctionInfo SetFunction(
                 name != null,
                 "The caller should verify the name");
 
-            var functionInfos = GetFunctions();
-            FunctionInfo existingValue;
+            Dictionary<string, FunctionInfo> functionInfos = GetFunctions();
             FunctionInfo result;
-            if (!functionInfos.TryGetValue(name, out existingValue))
+
+            // Functions are equal only if they have the same name and if they come from the same module (if any).
+            // If the function is not associated with a module then the info 'ModuleName' property is set to empty string.
+            // If the new function has the same name of an existing function, but different module names, then the
+            // existing table function is replaced with the new function.
+            if (!functionInfos.TryGetValue(name, out FunctionInfo existingValue) ||
+                (originalFunction != null &&
+                    !existingValue.ModuleName.Equals(originalFunction.ModuleName, StringComparison.OrdinalIgnoreCase)))
             {
+                // Add new function info to function table and return.
                 result = functionFactory(name, function, originalFunction, options, context, helpFile);
                 functionInfos[name] = result;
 
@@ -1257,81 +1268,78 @@ internal FunctionInfo SetFunction(
                 {
                     GetAllScopeFunctions()[name] = result;
                 }
-            }
-            else
-            {
-                // Make sure the function isn't constant or readonly
 
-                SessionState.ThrowIfNotVisible(origin, existingValue);
-
-                if (IsFunctionOptionSet(existingValue, ScopedItemOptions.Constant) ||
-                    (!force && IsFunctionOptionSet(existingValue, ScopedItemOptions.ReadOnly)))
-                {
-                    SessionStateUnauthorizedAccessException e =
-                        new SessionStateUnauthorizedAccessException(
-                                name,
-                                SessionStateCategory.Function,
-                                "FunctionNotWritable",
-                                SessionStateStrings.FunctionNotWritable);
+                return result;
+            }
 
-                    throw e;
-                }
+            // Update the existing function.
 
-                // Ensure we are not trying to set the function to constant as this can only be
-                // done at creation time.
+            // Make sure the function isn't constant or readonly.
+            SessionState.ThrowIfNotVisible(origin, existingValue);
 
-                if ((options & ScopedItemOptions.Constant) != 0)
-                {
-                    SessionStateUnauthorizedAccessException e =
-                        new SessionStateUnauthorizedAccessException(
-                                name,
-                                SessionStateCategory.Function,
-                                "FunctionCannotBeMadeConstant",
-                                SessionStateStrings.FunctionCannotBeMadeConstant);
+            if (IsFunctionOptionSet(existingValue, ScopedItemOptions.Constant) ||
+                (!force && IsFunctionOptionSet(existingValue, ScopedItemOptions.ReadOnly)))
+            {
+                SessionStateUnauthorizedAccessException e =
+                    new SessionStateUnauthorizedAccessException(
+                            name,
+                            SessionStateCategory.Function,
+                            "FunctionNotWritable",
+                            SessionStateStrings.FunctionNotWritable);
 
-                    throw e;
-                }
+                throw e;
+            }
 
-                // Ensure we are not trying to remove the AllScope option
+            // Ensure we are not trying to set the function to constant as this can only be
+            // done at creation time.
+            if ((options & ScopedItemOptions.Constant) != 0)
+            {
+                SessionStateUnauthorizedAccessException e =
+                    new SessionStateUnauthorizedAccessException(
+                            name,
+                            SessionStateCategory.Function,
+                            "FunctionCannotBeMadeConstant",
+                            SessionStateStrings.FunctionCannotBeMadeConstant);
 
-                if ((options & ScopedItemOptions.AllScope) == 0 &&
-                    IsFunctionOptionSet(existingValue, ScopedItemOptions.AllScope))
-                {
-                    SessionStateUnauthorizedAccessException e =
-                        new SessionStateUnauthorizedAccessException(
-                                name,
-                                SessionStateCategory.Function,
-                                "FunctionAllScopeOptionCannotBeRemoved",
-                                SessionStateStrings.FunctionAllScopeOptionCannotBeRemoved);
+                throw e;
+            }
 
-                    throw e;
-                }
+            // Ensure we are not trying to remove the AllScope option.
+            if ((options & ScopedItemOptions.AllScope) == 0 &&
+                IsFunctionOptionSet(existingValue, ScopedItemOptions.AllScope))
+            {
+                SessionStateUnauthorizedAccessException e =
+                    new SessionStateUnauthorizedAccessException(
+                            name,
+                            SessionStateCategory.Function,
+                            "FunctionAllScopeOptionCannotBeRemoved",
+                            SessionStateStrings.FunctionAllScopeOptionCannotBeRemoved);
 
-                FunctionInfo existingFunction = existingValue;
-                FunctionInfo newValue = null;
+                throw e;
+            }
 
-                // If the function type changes (i.e.: function to workflow or back)
-                // then we need to blast what was there
-                newValue = functionFactory(name, function, originalFunction, options, context, helpFile);
+            FunctionInfo existingFunction = existingValue;
 
-                bool changesFunctionType = existingFunction.GetType() != newValue.GetType();
+            // If the function type changes (i.e.: function to workflow or back)
+            // then we need to replace what was there.
+            FunctionInfo newValue = functionFactory(name, function, originalFunction, options, context, helpFile);
 
-                // Since the options are set after the script block, we have to
-                // forcefully apply the script block if the options will be
-                // set to not being ReadOnly
-                if (changesFunctionType ||
-                    ((existingFunction.Options & ScopedItemOptions.ReadOnly) != 0 && force))
-                {
-                    result = newValue;
-                    functionInfos[name] = newValue;
-                }
-                else
-                {
-                    bool applyForce = force || (options & ScopedItemOptions.ReadOnly) == 0;
+            bool changesFunctionType = existingFunction.GetType() != newValue.GetType();
 
-                    existingFunction.Update(newValue, applyForce, options, helpFile);
-                    result = existingFunction;
-                }
+            // Since the options are set after the script block, we have to
+            // forcefully apply the script block if the options will be
+            // set to not being ReadOnly.
+            if (changesFunctionType ||
+                ((existingFunction.Options & ScopedItemOptions.ReadOnly) != 0 && force))
+            {
+                result = newValue;
+                functionInfos[name] = newValue;
+            }
+            else
+            {
+                bool applyForce = force || (options & ScopedItemOptions.ReadOnly) == 0;
+                existingFunction.Update(newValue, applyForce, options, helpFile);
+                result = existingFunction;
             }
 
             return result;
@@ -1628,19 +1636,21 @@ internal Language.TypeResolutionState TypeResolutionState
 
         internal void AddType(string name, Type type)
         {
-            if (TypeTable == null)
-            {
-                TypeTable = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);
-            }
+            TypeTable ??= new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);
 
             TypeTable[name] = type;
         }
 
         internal Type LookupType(string name)
         {
-            if (TypeTable == null) return null;
+            if (TypeTable == null)
+            {
+                return null;
+            }
+
             Type result;
             TypeTable.TryGetValue(name, out result);
+
             return result;
         }
 
@@ -1681,12 +1691,18 @@ private static FunctionInfo CreateFunction(string name, ScriptBlock function, Fu
 
             // Then use the creation constructors - workflows don't get here because the workflow info
             // is created during compilation.
-            else if (function.IsFilter) { newValue = new FilterInfo(name, function, options, context, helpFile); }
+            else if (function.IsFilter)
+            {
+                newValue = new FilterInfo(name, function, options, context, helpFile);
+            }
             else if (function.IsConfiguration)
             {
                 newValue = new ConfigurationInfo(name, function, options, context, helpFile, function.IsMetaConfiguration());
             }
-            else newValue = new FunctionInfo(name, function, options, context, helpFile);
+            else
+            {
+                newValue = new FunctionInfo(name, function, options, context, helpFile);
+            }
 
             return newValue;
         }
@@ -1969,11 +1985,21 @@ private void CheckVariableChangeInConstrainedLanguage(PSVariable variable)
             var context = LocalPipeline.GetExecutionContextFromTLS();
             if (context?.LanguageMode == PSLanguageMode.ConstrainedLanguage)
             {
-                if ((variable.Options & ScopedItemOptions.AllScope) == ScopedItemOptions.AllScope)
+                if (variable.Options.HasFlag(ScopedItemOptions.AllScope))
                 {
-                    // Don't let people set AllScope variables in ConstrainedLanguage, as they can be used to
-                    // interfere with the session state of trusted commands.
-                    throw new PSNotSupportedException();
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        // Don't let people set AllScope variables in ConstrainedLanguage, as they can be used to
+                        // interfere with the session state of trusted commands.
+                        throw new PSNotSupportedException();
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: SessionStateStrings.WDACSessionStateVarLogTitle,
+                        message: StringUtil.Format(SessionStateStrings.WDACSessionStateVarLogMessage, variable.Name),
+                        fqid: "AllScopeVariableNotAllowed",
+                        dropIntoDebugger: true);
                 }
 
                 // Mark untrusted values for assignments to 'Global:' variables, and 'Script:' variables in
diff --git a/src/System.Management.Automation/engine/SessionStateSecurityDescriptorInterface.cs b/src/System.Management.Automation/engine/SessionStateSecurityDescriptorInterface.cs
index 16ebe0fc3b5..08635c7efe1 100644
--- a/src/System.Management.Automation/engine/SessionStateSecurityDescriptorInterface.cs
+++ b/src/System.Management.Automation/engine/SessionStateSecurityDescriptorInterface.cs
@@ -35,7 +35,7 @@ internal static ISecurityDescriptorCmdletProvider GetPermissionProviderInstance(
                 throw PSTraceSource.NewArgumentNullException(nameof(providerInstance));
             }
 
-            if (!(providerInstance is ISecurityDescriptorCmdletProvider permissionCmdletProvider))
+            if (providerInstance is not ISecurityDescriptorCmdletProvider permissionCmdletProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
diff --git a/src/System.Management.Automation/engine/SessionStateUtils.cs b/src/System.Management.Automation/engine/SessionStateUtils.cs
index 754f228633a..6bdc29da198 100644
--- a/src/System.Management.Automation/engine/SessionStateUtils.cs
+++ b/src/System.Management.Automation/engine/SessionStateUtils.cs
@@ -151,10 +151,7 @@ internal static Collection<T> ConvertArrayToCollection<T>(T[] array)
         /// </exception>
         internal static bool CollectionContainsValue(IEnumerable collection, object value, IComparer comparer)
         {
-            if (collection == null)
-            {
-                throw new ArgumentNullException(nameof(collection));
-            }
+            ArgumentNullException.ThrowIfNull(collection);
 
             bool result = false;
 
diff --git a/src/System.Management.Automation/engine/SessionStateVariableAPIs.cs b/src/System.Management.Automation/engine/SessionStateVariableAPIs.cs
index 8cc9e4bafa4..336c2b77952 100644
--- a/src/System.Management.Automation/engine/SessionStateVariableAPIs.cs
+++ b/src/System.Management.Automation/engine/SessionStateVariableAPIs.cs
@@ -352,8 +352,7 @@ internal object GetVariableValueFromProvider(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderCannotBeUsedAsVariable",
@@ -368,8 +367,7 @@ internal object GetVariableValueFromProvider(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderCannotBeUsedAsVariable",
@@ -407,8 +405,7 @@ internal object GetVariableValueFromProvider(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderVariableSyntaxInvalid",
@@ -445,8 +442,7 @@ internal object GetVariableValueFromProvider(
                 {
                     // First get the provider for the path.
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     ProviderInvocationException providerException =
                         new ProviderInvocationException(
@@ -741,8 +737,7 @@ internal object GetVariableValueAtScope(string name, string scopeID)
                         // First get the provider for the path.
 
                         ProviderInfo providerInfo = null;
-                        string unused =
-                            this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                        _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                         throw NewProviderInvocationException(
                             "ProviderCannotBeUsedAsVariable",
@@ -757,8 +752,7 @@ internal object GetVariableValueAtScope(string name, string scopeID)
                         // First get the provider for the path.
 
                         ProviderInfo providerInfo = null;
-                        string unused =
-                            this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                        _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                         throw NewProviderInvocationException(
                             "ProviderCannotBeUsedAsVariable",
@@ -796,8 +790,7 @@ internal object GetVariableValueAtScope(string name, string scopeID)
                         // First get the provider for the path.
 
                         ProviderInfo providerInfo = null;
-                        string unused =
-                            this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                        _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                         throw NewProviderInvocationException(
                             "ProviderVariableSyntaxInvalid",
@@ -835,8 +828,7 @@ internal object GetVariableValueAtScope(string name, string scopeID)
                         // First get the provider for the path.
 
                         ProviderInfo providerInfo = null;
-                        string unused =
-                            this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                        _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                         ProviderInvocationException providerException =
                             new ProviderInvocationException(
@@ -1245,8 +1237,7 @@ internal object SetVariable(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderCannotBeUsedAsVariable",
@@ -1261,8 +1252,7 @@ internal object SetVariable(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderCannotBeUsedAsVariable",
@@ -1301,8 +1291,7 @@ internal object SetVariable(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     throw NewProviderInvocationException(
                         "ProviderVariableSyntaxInvalid",
@@ -1325,8 +1314,7 @@ internal object SetVariable(
                     // First get the provider for the path.
 
                     ProviderInfo providerInfo = null;
-                    string unused =
-                        this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
+                    _ = this.Globber.GetProviderPath(variablePath.QualifiedName, out providerInfo);
 
                     ProviderInvocationException providerException =
                         new ProviderInvocationException(
@@ -1839,10 +1827,7 @@ private static void GetScopeVariableTable(SessionStateScope scope, Dictionary<st
                 dottedScope.GetVariableTable(result, includePrivate);
             }
 
-            if (scope.LocalsTuple != null)
-            {
-                scope.LocalsTuple.GetVariableTable(result, includePrivate);
-            }
+            scope.LocalsTuple?.GetVariableTable(result, includePrivate);
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/ShellVariable.cs b/src/System.Management.Automation/engine/ShellVariable.cs
index 424be295346..8440845a32d 100644
--- a/src/System.Management.Automation/engine/ShellVariable.cs
+++ b/src/System.Management.Automation/engine/ShellVariable.cs
@@ -244,6 +244,14 @@ internal void DebuggerCheckVariableWrite()
             }
         }
 
+        /// <summary>
+        /// Gets the value without triggering debugger check.
+        /// </summary>
+        internal virtual object GetValueRaw()
+        {
+            return _value;
+        }
+
         /// <summary>
         /// Gets or sets the value of the variable.
         /// </summary>
@@ -796,6 +804,11 @@ public override object Value
             }
         }
 
+        internal override object GetValueRaw()
+        {
+            return _tuple.GetValue(_tupleSlot);
+        }
+
         internal override void SetValueRaw(object newValue, bool preserveValueTypeSemantics)
         {
             if (preserveValueTypeSemantics)
diff --git a/src/System.Management.Automation/engine/SpecialVariables.cs b/src/System.Management.Automation/engine/SpecialVariables.cs
index ba757722e91..51419a0d5c2 100644
--- a/src/System.Management.Automation/engine/SpecialVariables.cs
+++ b/src/System.Management.Automation/engine/SpecialVariables.cs
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 using System.Collections.Generic;
+using System.Management.Automation.Internal;
 
 namespace System.Management.Automation
 {
@@ -40,6 +41,10 @@ internal static class SpecialVariables
 
         internal static readonly VariablePath OutputEncodingVarPath = new VariablePath(OutputEncoding);
 
+        internal const string PSApplicationOutputEncoding = nameof(PSApplicationOutputEncoding);
+
+        internal static readonly VariablePath PSApplicationOutputEncodingVarPath = new VariablePath(PSApplicationOutputEncoding);
+
         internal const string VerboseHelpErrors = "VerboseHelpErrors";
 
         internal static readonly VariablePath VerboseHelpErrorsVarPath = new VariablePath(VerboseHelpErrors);
@@ -204,6 +209,7 @@ internal static class SpecialVariables
         internal static readonly VariablePath PSModuleAutoLoadingPreferenceVarPath = new VariablePath("global:" + PSModuleAutoLoading);
 
         #region Platform Variables
+
         internal const string IsLinux = "IsLinux";
 
         internal static readonly VariablePath IsLinuxPath = new VariablePath("IsLinux");
@@ -221,6 +227,7 @@ internal static class SpecialVariables
         internal static readonly VariablePath IsCoreCLRPath = new VariablePath("IsCoreCLR");
 
         #endregion
+
         #region Preference Variables
 
         internal const string DebugPreference = "DebugPreference";
@@ -257,6 +264,16 @@ internal static class SpecialVariables
 
         #endregion Preference Variables
 
+        internal const string PSNativeCommandUseErrorActionPreference = nameof(PSNativeCommandUseErrorActionPreference);
+
+        internal static readonly VariablePath PSNativeCommandUseErrorActionPreferenceVarPath =
+            new(PSNativeCommandUseErrorActionPreference);
+
+        // Native command argument passing style
+        internal const string NativeArgumentPassing = "PSNativeCommandArgumentPassing";
+
+        internal static readonly VariablePath NativeArgumentPassingVarPath = new VariablePath(NativeArgumentPassing);
+
         internal const string ErrorView = "ErrorView";
 
         internal static readonly VariablePath ErrorViewVarPath = new VariablePath(ErrorView);
@@ -316,46 +333,53 @@ internal static class SpecialVariables
                                                                    /* PSCommandPath */     typeof(string),
                                                                  };
 
-        internal static readonly string[] PreferenceVariables = {
-                                                                    SpecialVariables.DebugPreference,
-                                                                    SpecialVariables.VerbosePreference,
-                                                                    SpecialVariables.ErrorActionPreference,
-                                                                    SpecialVariables.WhatIfPreference,
-                                                                    SpecialVariables.WarningPreference,
-                                                                    SpecialVariables.InformationPreference,
-                                                                    SpecialVariables.ConfirmPreference,
-                                                                };
-
-        internal static readonly Type[] PreferenceVariableTypes = {
-                                                                    /* DebugPreference */       typeof(ActionPreference),
-                                                                    /* VerbosePreference */     typeof(ActionPreference),
-                                                                    /* ErrorPreference */       typeof(ActionPreference),
-                                                                    /* WhatIfPreference */      typeof(SwitchParameter),
-                                                                    /* WarningPreference */     typeof(ActionPreference),
-                                                                    /* InformationPreference */ typeof(ActionPreference),
-                                                                    /* ConfirmPreference */     typeof(ConfirmImpact),
-                                                                  };
+        // This array and the one below it exist to optimize the way common parameters work in advanced functions.
+        // Common parameters work by setting preference variables in the scope of the function and restoring the old value afterward.
+        // Variables that don't correspond to common cmdlet parameters don't need to be added here.
+        internal static readonly string[] PreferenceVariables =
+        {
+            SpecialVariables.DebugPreference,
+            SpecialVariables.VerbosePreference,
+            SpecialVariables.ErrorActionPreference,
+            SpecialVariables.WhatIfPreference,
+            SpecialVariables.WarningPreference,
+            SpecialVariables.InformationPreference,
+            SpecialVariables.ConfirmPreference,
+            SpecialVariables.ProgressPreference,
+        };
+
+        internal static readonly Type[] PreferenceVariableTypes =
+        {
+            /* DebugPreference */                         typeof(ActionPreference),
+            /* VerbosePreference */                       typeof(ActionPreference),
+            /* ErrorPreference */                         typeof(ActionPreference),
+            /* WhatIfPreference */                        typeof(SwitchParameter),
+            /* WarningPreference */                       typeof(ActionPreference),
+            /* InformationPreference */                   typeof(ActionPreference),
+            /* ConfirmPreference */                       typeof(ConfirmImpact),
+            /* ProgressPreference */                      typeof(ActionPreference),
+        };
 
         // The following variables are created in every session w/ AllScope.  We avoid creating local slots when we
         // see an assignment to any of these variables so that they get handled properly (either throwing an exception
         // because they are constant/readonly, or having the value persist in parent scopes where the allscope variable
         // also exists.
-        internal static readonly string[] AllScopeVariables = {
-                                                                  SpecialVariables.Question,
-                                                                  SpecialVariables.ExecutionContext,
-                                                                  SpecialVariables.False,
-                                                                  SpecialVariables.Home,
-                                                                  SpecialVariables.Host,
-                                                                  SpecialVariables.PID,
-                                                                  SpecialVariables.PSCulture,
-                                                                  SpecialVariables.PSHome,
-                                                                  SpecialVariables.PSUICulture,
-                                                                  SpecialVariables.PSVersionTable,
-                                                                  SpecialVariables.PSEdition,
-                                                                  SpecialVariables.ShellId,
-                                                                  SpecialVariables.True,
-                                                                  SpecialVariables.EnabledExperimentalFeatures,
-                                                              };
+        internal static readonly Dictionary<string, Type> AllScopeVariables = new(StringComparer.OrdinalIgnoreCase) {
+            { Question, typeof(bool) },
+            { ExecutionContext, typeof(EngineIntrinsics) },
+            { False, typeof(bool) },
+            { Home, typeof(string) },
+            { Host, typeof(object) },
+            { PID, typeof(int) },
+            { PSCulture, typeof(string) },
+            { PSHome, typeof(string) },
+            { PSUICulture, typeof(string) },
+            { PSVersionTable, typeof(PSVersionHashTable) },
+            { PSEdition, typeof(string) },
+            { ShellId, typeof(string) },
+            { True, typeof(bool) },
+            { EnabledExperimentalFeatures, typeof(ReadOnlyBag<string>) }
+        };
 
         private static readonly HashSet<string> s_classMethodsAccessibleVariables = new HashSet<string>
             (
@@ -368,6 +392,7 @@ internal static class SpecialVariables
                     SpecialVariables.NestedPromptLevel,
                     SpecialVariables.pwd,
                     SpecialVariables.Matches,
+                    SpecialVariables.PSApplicationOutputEncoding,
                 },
                 StringComparer.OrdinalIgnoreCase
             );
@@ -401,5 +426,6 @@ internal enum PreferenceVariable
         Warning = 13,
         Information = 14,
         Confirm = 15,
+        Progress = 16,
     }
 }
diff --git a/src/System.Management.Automation/engine/Subsystem/CommandPrediction/CommandPrediction.cs b/src/System.Management.Automation/engine/Subsystem/CommandPrediction/CommandPrediction.cs
deleted file mode 100644
index edc8fb272a2..00000000000
--- a/src/System.Management.Automation/engine/Subsystem/CommandPrediction/CommandPrediction.cs
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#nullable enable
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation.Internal;
-using System.Management.Automation.Language;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace System.Management.Automation.Subsystem
-{
-    /// <summary>
-    /// The class represents the prediction result from a predictor.
-    /// </summary>
-    public sealed class PredictionResult
-    {
-        /// <summary>
-        /// Gets the Id of the predictor.
-        /// </summary>
-        public Guid Id { get; }
-
-        /// <summary>
-        /// Gets the name of the predictor.
-        /// </summary>
-        public string Name { get; }
-
-        /// <summary>
-        /// Gets the mini-session id that represents a specific invocation to the <see cref="ICommandPredictor.GetSuggestion"/> API of the predictor.
-        /// When it's not specified, it's considered by a client that the predictor doesn't expect feedback.
-        /// </summary>
-        public uint? Session { get; }
-
-        /// <summary>
-        /// Gets the suggestions.
-        /// </summary>
-        public IReadOnlyList<PredictiveSuggestion> Suggestions { get; }
-
-        internal PredictionResult(Guid id, string name, uint? session, List<PredictiveSuggestion> suggestions)
-        {
-            Id = id;
-            Name = name;
-            Session = session;
-            Suggestions = suggestions;
-        }
-    }
-
-    /// <summary>
-    /// Provides a set of possible predictions for given input.
-    /// </summary>
-    public static class CommandPrediction
-    {
-        /// <summary>
-        /// Collect the predictive suggestions from registered predictors using the default timeout.
-        /// </summary>
-        /// <param name="client">Represents the client that initiates the call.</param>
-        /// <param name="ast">The <see cref="Ast"/> object from parsing the current command line input.</param>
-        /// <param name="astTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
-        /// <returns>A list of <see cref="PredictionResult"/> objects.</returns>
-        public static Task<List<PredictionResult>?> PredictInput(string client, Ast ast, Token[] astTokens)
-        {
-            return PredictInput(client, ast, astTokens, millisecondsTimeout: 20);
-        }
-
-        /// <summary>
-        /// Collect the predictive suggestions from registered predictors using the specified timeout.
-        /// </summary>
-        /// <param name="client">Represents the client that initiates the call.</param>
-        /// <param name="ast">The <see cref="Ast"/> object from parsing the current command line input.</param>
-        /// <param name="astTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
-        /// <param name="millisecondsTimeout">The milliseconds to timeout.</param>
-        /// <returns>A list of <see cref="PredictionResult"/> objects.</returns>
-        public static async Task<List<PredictionResult>?> PredictInput(string client, Ast ast, Token[] astTokens, int millisecondsTimeout)
-        {
-            Requires.Condition(millisecondsTimeout > 0, nameof(millisecondsTimeout));
-
-            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
-            if (predictors.Count == 0)
-            {
-                return null;
-            }
-
-            var context = new PredictionContext(ast, astTokens);
-            var tasks = new Task<PredictionResult?>[predictors.Count];
-            using var cancellationSource = new CancellationTokenSource();
-
-            for (int i = 0; i < predictors.Count; i++)
-            {
-                ICommandPredictor predictor = predictors[i];
-
-                tasks[i] = Task.Factory.StartNew(
-                    state =>
-                    {
-                        var predictor = (ICommandPredictor)state!;
-                        SuggestionPackage pkg = predictor.GetSuggestion(client, context, cancellationSource.Token);
-                        return pkg.SuggestionEntries?.Count > 0 ? new PredictionResult(predictor.Id, predictor.Name, pkg.Session, pkg.SuggestionEntries) : null;
-                    },
-                    predictor,
-                    cancellationSource.Token,
-                    TaskCreationOptions.DenyChildAttach,
-                    TaskScheduler.Default);
-            }
-
-            await Task.WhenAny(
-                Task.WhenAll(tasks),
-                Task.Delay(millisecondsTimeout, cancellationSource.Token)).ConfigureAwait(false);
-            cancellationSource.Cancel();
-
-            var resultList = new List<PredictionResult>(predictors.Count);
-            foreach (Task<PredictionResult?> task in tasks)
-            {
-                if (task.IsCompletedSuccessfully)
-                {
-                    PredictionResult? result = task.Result;
-                    if (result != null)
-                    {
-                        resultList.Add(result);
-                    }
-                }
-            }
-
-            return resultList;
-        }
-
-        /// <summary>
-        /// Allow registered predictors to do early processing when a command line is accepted.
-        /// </summary>
-        /// <param name="client">Represents the client that initiates the call.</param>
-        /// <param name="history">History command lines provided as references for prediction.</param>
-        public static void OnCommandLineAccepted(string client, IReadOnlyList<string> history)
-        {
-            Requires.NotNull(history, nameof(history));
-
-            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
-            if (predictors.Count == 0)
-            {
-                return;
-            }
-
-            foreach (ICommandPredictor predictor in predictors)
-            {
-                if (predictor.SupportEarlyProcessing)
-                {
-                    ThreadPool.QueueUserWorkItem<ICommandPredictor>(
-                        state => state.StartEarlyProcessing(client, history),
-                        predictor,
-                        preferLocal: false);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Send feedback to a predictor when one or more suggestions from it were displayed to the user.
-        /// </summary>
-        /// <param name="client">Represents the client that initiates the call.</param>
-        /// <param name="predictorId">The identifier of the predictor whose prediction result was accepted.</param>
-        /// <param name="session">The mini-session where the displayed suggestions came from.</param>
-        /// <param name="countOrIndex">
-        /// When the value is greater than 0, it's the number of displayed suggestions from the list returned in <paramref name="session"/>, starting from the index 0.
-        /// When the value is less than or equal to 0, it means a single suggestion from the list got displayed, and the index is the absolute value.
-        /// </param>
-        public static void OnSuggestionDisplayed(string client, Guid predictorId, uint session, int countOrIndex)
-        {
-            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
-            if (predictors.Count == 0)
-            {
-                return;
-            }
-
-            foreach (ICommandPredictor predictor in predictors)
-            {
-                if (predictor.AcceptFeedback && predictor.Id == predictorId)
-                {
-                    ThreadPool.QueueUserWorkItem<ICommandPredictor>(
-                        state => state.OnSuggestionDisplayed(client, session, countOrIndex),
-                        predictor,
-                        preferLocal: false);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Send feedback to a predictor when a suggestion from it was accepted.
-        /// </summary>
-        /// <param name="client">Represents the client that initiates the call.</param>
-        /// <param name="predictorId">The identifier of the predictor whose prediction result was accepted.</param>
-        /// <param name="session">The mini-session where the accepted suggestion came from.</param>
-        /// <param name="suggestionText">The accepted suggestion text.</param>
-        public static void OnSuggestionAccepted(string client, Guid predictorId, uint session, string suggestionText)
-        {
-            Requires.NotNullOrEmpty(suggestionText, nameof(suggestionText));
-
-            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
-            if (predictors.Count == 0)
-            {
-                return;
-            }
-
-            foreach (ICommandPredictor predictor in predictors)
-            {
-                if (predictor.AcceptFeedback && predictor.Id == predictorId)
-                {
-                    ThreadPool.QueueUserWorkItem<ICommandPredictor>(
-                        state => state.OnSuggestionAccepted(client, session, suggestionText),
-                        predictor,
-                        preferLocal: false);
-                }
-            }
-        }
-    }
-}
diff --git a/src/System.Management.Automation/engine/Subsystem/CommandPrediction/ICommandPredictor.cs b/src/System.Management.Automation/engine/Subsystem/CommandPrediction/ICommandPredictor.cs
deleted file mode 100644
index d55d37a90df..00000000000
--- a/src/System.Management.Automation/engine/Subsystem/CommandPrediction/ICommandPredictor.cs
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#nullable enable
-
-using System;
-using System.Collections.Generic;
-using System.Management.Automation.Internal;
-using System.Management.Automation.Language;
-using System.Threading;
-
-namespace System.Management.Automation.Subsystem
-{
-    /// <summary>
-    /// Interface for implementing a predictor plugin.
-    /// </summary>
-    public interface ICommandPredictor : ISubsystem
-    {
-        /// <summary>
-        /// Default implementation. No function is required for a predictor.
-        /// </summary>
-        Dictionary<string, string>? ISubsystem.FunctionsToDefine => null;
-
-        /// <summary>
-        /// Default implementation for `ISubsystem.Kind`.
-        /// </summary>
-        SubsystemKind ISubsystem.Kind => SubsystemKind.CommandPredictor;
-
-        /// <summary>
-        /// Gets a value indicating whether the predictor supports early processing.
-        /// </summary>
-        bool SupportEarlyProcessing { get; }
-
-        /// <summary>
-        /// Gets a value indicating whether the predictor accepts feedback about the previous suggestion.
-        /// </summary>
-        bool AcceptFeedback { get; }
-
-        /// <summary>
-        /// A command line was accepted to execute.
-        /// The predictor can start processing early as needed with the latest history.
-        /// </summary>
-        /// <param name="clientId">Represents the client that initiates the call.</param>
-        /// <param name="history">History command lines provided as references for prediction.</param>
-        void StartEarlyProcessing(string clientId, IReadOnlyList<string> history);
-
-        /// <summary>
-        /// Get the predictive suggestions. It indicates the start of a suggestion rendering session.
-        /// </summary>
-        /// <param name="clientId">Represents the client that initiates the call.</param>
-        /// <param name="context">The <see cref="PredictionContext"/> object to be used for prediction.</param>
-        /// <param name="cancellationToken">The cancellation token to cancel the prediction.</param>
-        /// <returns>An instance of <see cref="SuggestionPackage"/>.</returns>
-        SuggestionPackage GetSuggestion(string clientId, PredictionContext context, CancellationToken cancellationToken);
-
-        /// <summary>
-        /// One or more suggestions provided by the predictor were displayed to the user.
-        /// </summary>
-        /// <param name="clientId">Represents the client that initiates the call.</param>
-        /// <param name="session">The mini-session where the displayed suggestions came from.</param>
-        /// <param name="countOrIndex">
-        /// When the value is greater than 0, it's the number of displayed suggestions from the list returned in <paramref name="session"/>, starting from the index 0.
-        /// When the value is less than or equal to 0, it means a single suggestion from the list got displayed, and the index is the absolute value.
-        /// </param>
-        void OnSuggestionDisplayed(string clientId, uint session, int countOrIndex);
-
-        /// <summary>
-        /// The suggestion provided by the predictor was accepted.
-        /// </summary>
-        /// <param name="clientId">Represents the client that initiates the call.</param>
-        /// <param name="session">Represents the mini-session where the accepted suggestion came from.</param>
-        /// <param name="acceptedSuggestion">The accepted suggestion text.</param>
-        void OnSuggestionAccepted(string clientId, uint session, string acceptedSuggestion);
-    }
-
-    /// <summary>
-    /// Context information about the user input.
-    /// </summary>
-    public class PredictionContext
-    {
-        /// <summary>
-        /// Gets the abstract syntax tree (AST) generated from parsing the user input.
-        /// </summary>
-        public Ast InputAst { get; }
-
-        /// <summary>
-        /// Gets the tokens generated from parsing the user input.
-        /// </summary>
-        public IReadOnlyList<Token> InputTokens { get; }
-
-        /// <summary>
-        /// Gets the cursor position, which is assumed always at the end of the input line.
-        /// </summary>
-        public IScriptPosition CursorPosition { get; }
-
-        /// <summary>
-        /// Gets the token at the cursor.
-        /// </summary>
-        public Token? TokenAtCursor { get; }
-
-        /// <summary>
-        /// Gets all ASTs that are related to the cursor position,
-        /// which is assumed always at the end of the input line.
-        /// </summary>
-        public IReadOnlyList<Ast> RelatedAsts { get; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PredictionContext"/> class from the AST and tokens that represent the user input.
-        /// </summary>
-        /// <param name="inputAst">The <see cref="Ast"/> object from parsing the current command line input.</param>
-        /// <param name="inputTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
-        public PredictionContext(Ast inputAst, Token[] inputTokens)
-        {
-            Requires.NotNull(inputAst, nameof(inputAst));
-            Requires.NotNull(inputTokens, nameof(inputTokens));
-
-            var cursor = inputAst.Extent.EndScriptPosition;
-            var astContext = CompletionAnalysis.ExtractAstContext(inputAst, inputTokens, cursor);
-
-            InputAst = inputAst;
-            InputTokens = inputTokens;
-            CursorPosition = cursor;
-            TokenAtCursor = astContext.TokenAtCursor;
-            RelatedAsts = astContext.RelatedAsts;
-        }
-
-        /// <summary>
-        /// Creates a context instance from the user input line.
-        /// </summary>
-        /// <param name="input">The user input.</param>
-        /// <returns>A <see cref="PredictionContext"/> object.</returns>
-        public static PredictionContext Create(string input)
-        {
-            Requires.NotNullOrEmpty(input, nameof(input));
-
-            Ast ast = Parser.ParseInput(input, out Token[] tokens, out _);
-            return new PredictionContext(ast, tokens);
-        }
-    }
-
-    /// <summary>
-    /// The class represents a predictive suggestion generated by a predictor.
-    /// </summary>
-    public sealed class PredictiveSuggestion
-    {
-        /// <summary>
-        /// Gets the suggestion.
-        /// </summary>
-        public string SuggestionText { get; }
-
-        /// <summary>
-        /// Gets the tooltip of the suggestion.
-        /// </summary>
-        public string? ToolTip { get; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PredictiveSuggestion"/> class.
-        /// </summary>
-        /// <param name="suggestion">The predictive suggestion text.</param>
-        public PredictiveSuggestion(string suggestion)
-            : this(suggestion, toolTip: null)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PredictiveSuggestion"/> class.
-        /// </summary>
-        /// <param name="suggestion">The predictive suggestion text.</param>
-        /// <param name="toolTip">The tooltip of the suggestion.</param>
-        public PredictiveSuggestion(string suggestion, string? toolTip)
-        {
-            Requires.NotNullOrEmpty(suggestion, nameof(suggestion));
-
-            SuggestionText = suggestion;
-            ToolTip = toolTip;
-        }
-    }
-
-    /// <summary>
-    /// A package returned from <see cref="ICommandPredictor.GetSuggestion"/>.
-    /// </summary>
-    public struct SuggestionPackage
-    {
-        /// <summary>
-        /// Gets the mini-session that represents a specific invocation to <see cref="ICommandPredictor.GetSuggestion"/>.
-        /// When it's not specified, it's considered by a client that the predictor doesn't expect feedback.
-        /// </summary>
-        public uint? Session { get; }
-
-        /// <summary>
-        /// Gets the suggestion entries returned from that mini-session.
-        /// </summary>
-        public List<PredictiveSuggestion>? SuggestionEntries { get; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="SuggestionPackage"/> struct without providing a session id.
-        /// Note that, when a session id is not specified, it's considered by a client that the predictor doesn't expect feedback.
-        /// </summary>
-        /// <param name="suggestionEntries">The suggestions to return.</param>
-        public SuggestionPackage(List<PredictiveSuggestion> suggestionEntries)
-        {
-            Requires.NotNullOrEmpty(suggestionEntries, nameof(suggestionEntries));
-
-            Session = null;
-            SuggestionEntries = suggestionEntries;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="SuggestionPackage"/> struct with the mini-session id and the suggestions.
-        /// </summary>
-        /// <param name="session">The mini-session where suggestions came from.</param>
-        /// <param name="suggestionEntries">The suggestions to return.</param>
-        public SuggestionPackage(uint session, List<PredictiveSuggestion> suggestionEntries)
-        {
-            Requires.NotNullOrEmpty(suggestionEntries, nameof(suggestionEntries));
-
-            Session = session;
-            SuggestionEntries = suggestionEntries;
-        }
-    }
-}
diff --git a/src/System.Management.Automation/engine/Subsystem/Commands/GetPSSubsystemCommand.cs b/src/System.Management.Automation/engine/Subsystem/Commands/GetPSSubsystemCommand.cs
index 1ad79404f51..df828c724a2 100644
--- a/src/System.Management.Automation/engine/Subsystem/Commands/GetPSSubsystemCommand.cs
+++ b/src/System.Management.Automation/engine/Subsystem/Commands/GetPSSubsystemCommand.cs
@@ -8,7 +8,6 @@ namespace System.Management.Automation.Subsystem
     /// <summary>
     /// Implementation of 'Get-PSSubsystem' cmdlet.
     /// </summary>
-    [Experimental("PSSubsystemPluginModel", ExperimentAction.Show)]
     [Cmdlet(VerbsCommon.Get, "PSSubsystem", DefaultParameterSetName = AllSet)]
     [OutputType(typeof(SubsystemInfo))]
     public sealed class GetPSSubsystemCommand : PSCmdlet
diff --git a/src/System.Management.Automation/engine/Subsystem/DscSubsystem/ICrossPlatformDsc.cs b/src/System.Management.Automation/engine/Subsystem/DscSubsystem/ICrossPlatformDsc.cs
new file mode 100644
index 00000000000..d1fe2234309
--- /dev/null
+++ b/src/System.Management.Automation/engine/Subsystem/DscSubsystem/ICrossPlatformDsc.cs
@@ -0,0 +1,48 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Collections.ObjectModel;
+using System.Collections.Generic;
+using System.Management.Automation.Language;
+
+namespace System.Management.Automation.Subsystem.DSC
+{
+    /// <summary>
+    /// Interface for implementing a cross platform desired state configuration component.
+    /// </summary>
+    public interface ICrossPlatformDsc : ISubsystem
+    {
+        /// <summary>
+        /// Default implementation. No function is required for this subsystem.
+        /// </summary>
+        Dictionary<string, string>? ISubsystem.FunctionsToDefine => null;
+
+        /// <summary>
+        /// DSC initializer function.
+        /// </summary>
+        void LoadDefaultKeywords(Collection<Exception> errors);
+
+        /// <summary>
+        /// Clear internal class caches.
+        /// </summary>
+        void ClearCache();
+
+        /// <summary>
+        /// Returns resource usage string.
+        /// </summary>
+        string GetDSCResourceUsageString(DynamicKeyword keyword);
+
+        /// <summary>
+        /// Checks if a string is one of dynamic keywords that can be used in both configuration and meta configuration.
+        /// </summary>
+        bool IsSystemResourceName(string name);
+
+        /// <summary>
+        /// Checks if a string matches default module name used for meta configuration resources.
+        /// </summary>
+        bool IsDefaultModuleNameForMetaConfigResource(string name);
+    }
+}
diff --git a/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/FeedbackHub.cs b/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/FeedbackHub.cs
new file mode 100644
index 00000000000..b1aa781fea7
--- /dev/null
+++ b/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/FeedbackHub.cs
@@ -0,0 +1,315 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Management.Automation.Language;
+using System.Management.Automation.Runspaces;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.PowerShell.Commands;
+
+namespace System.Management.Automation.Subsystem.Feedback
+{
+    /// <summary>
+    /// The class represents a result from a feedback provider.
+    /// </summary>
+    public class FeedbackResult
+    {
+        /// <summary>
+        /// Gets the Id of the feedback provider.
+        /// </summary>
+        public Guid Id { get; }
+
+        /// <summary>
+        /// Gets the name of the feedback provider.
+        /// </summary>
+        public string Name { get; }
+
+        /// <summary>
+        /// Gets the feedback item.
+        /// </summary>
+        public FeedbackItem Item { get; }
+
+        internal FeedbackResult(Guid id, string name, FeedbackItem item)
+        {
+            Id = id;
+            Name = name;
+            Item = item;
+        }
+    }
+
+    /// <summary>
+    /// Provides a set of feedbacks for given input.
+    /// </summary>
+    public static class FeedbackHub
+    {
+        /// <summary>
+        /// Collect the feedback from registered feedback providers using the default timeout.
+        /// </summary>
+        public static List<FeedbackResult>? GetFeedback(Runspace runspace)
+        {
+            return GetFeedback(runspace, millisecondsTimeout: 1000);
+        }
+
+        /// <summary>
+        /// Collect the feedback from registered feedback providers using the specified timeout.
+        /// </summary>
+        public static List<FeedbackResult>? GetFeedback(Runspace runspace, int millisecondsTimeout)
+        {
+            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(millisecondsTimeout);
+
+            if (runspace is not LocalRunspace localRunspace)
+            {
+                return null;
+            }
+
+            var providers = SubsystemManager.GetSubsystems<IFeedbackProvider>();
+            if (providers.Count is 0)
+            {
+                return null;
+            }
+
+            ExecutionContext executionContext = localRunspace.ExecutionContext;
+            bool questionMarkValue = executionContext.QuestionMarkVariableValue;
+
+            // The command line would have run successfully in most cases during an interactive use of the shell.
+            // So, we do a quick check to see whether we can skip proceeding, so as to avoid unneeded allocations
+            // from the 'TryGetFeedbackContext' call below.
+            if (questionMarkValue && CanSkip(providers))
+            {
+                return null;
+            }
+
+            // Get the last history item
+            HistoryInfo[] histories = localRunspace.History.GetEntries(id: 0, count: 1, newest: true);
+            if (histories.Length is 0)
+            {
+                return null;
+            }
+
+            // Try creating the feedback context object.
+            if (!TryGetFeedbackContext(executionContext, questionMarkValue, histories[0], out FeedbackContext? feedbackContext))
+            {
+                return null;
+            }
+
+            int count = providers.Count;
+            IFeedbackProvider? generalFeedback = null;
+            List<Task<FeedbackResult?>>? tasks = null;
+            CancellationTokenSource? cancellationSource = null;
+            Func<object?, FeedbackResult?>? callBack = null;
+
+            foreach (IFeedbackProvider provider in providers)
+            {
+                if (!provider.Trigger.HasFlag(feedbackContext.Trigger))
+                {
+                    continue;
+                }
+
+                if (provider is GeneralCommandErrorFeedback)
+                {
+                    // This built-in feedback provider needs to run on the target Runspace.
+                    generalFeedback = provider;
+                    continue;
+                }
+
+                if (tasks is null)
+                {
+                    tasks = new List<Task<FeedbackResult?>>(capacity: count);
+                    cancellationSource = new CancellationTokenSource();
+                    callBack = GetCallBack(feedbackContext, cancellationSource);
+                }
+
+                // Other feedback providers will run on background threads in parallel.
+                tasks.Add(Task.Factory.StartNew(
+                    callBack!,
+                    provider,
+                    cancellationSource!.Token,
+                    TaskCreationOptions.DenyChildAttach,
+                    TaskScheduler.Default));
+            }
+
+            Task<Task>? waitTask = null;
+            if (tasks is not null)
+            {
+                waitTask = Task.WhenAny(
+                    Task.WhenAll(tasks),
+                    Task.Delay(millisecondsTimeout, cancellationSource!.Token));
+            }
+
+            List<FeedbackResult>? resultList = null;
+            if (generalFeedback is not null)
+            {
+                FeedbackResult? builtInResult = GetBuiltInFeedback(generalFeedback, localRunspace, feedbackContext, questionMarkValue);
+                if (builtInResult is not null)
+                {
+                    resultList ??= new List<FeedbackResult>(count);
+                    resultList.Add(builtInResult);
+                }
+            }
+
+            if (waitTask is not null)
+            {
+                try
+                {
+                    waitTask.Wait();
+                    cancellationSource!.Cancel();
+
+                    foreach (Task<FeedbackResult?> task in tasks!)
+                    {
+                        if (task.IsCompletedSuccessfully)
+                        {
+                            FeedbackResult? result = task.Result;
+                            if (result is not null)
+                            {
+                                resultList ??= new List<FeedbackResult>(count);
+                                resultList.Add(result);
+                            }
+                        }
+                    }
+                }
+                finally
+                {
+                    cancellationSource!.Dispose();
+                }
+            }
+
+            return resultList;
+        }
+
+        private static bool CanSkip(IEnumerable<IFeedbackProvider> providers)
+        {
+            bool canSkip = true;
+            foreach (IFeedbackProvider provider in providers)
+            {
+                if (provider.Trigger.HasFlag(FeedbackTrigger.Success))
+                {
+                    canSkip = false;
+                    break;
+                }
+            }
+
+            return canSkip;
+        }
+
+        private static FeedbackResult? GetBuiltInFeedback(
+            IFeedbackProvider builtInFeedback,
+            LocalRunspace localRunspace,
+            FeedbackContext feedbackContext,
+            bool questionMarkValue)
+        {
+            bool changedDefault = false;
+            Runspace? oldDefault = Runspace.DefaultRunspace;
+
+            try
+            {
+                if (oldDefault != localRunspace)
+                {
+                    changedDefault = true;
+                    Runspace.DefaultRunspace = localRunspace;
+                }
+
+                FeedbackItem? item = builtInFeedback.GetFeedback(feedbackContext, CancellationToken.None);
+                if (item is not null)
+                {
+                    return new FeedbackResult(builtInFeedback.Id, builtInFeedback.Name, item);
+                }
+            }
+            finally
+            {
+                if (changedDefault)
+                {
+                    Runspace.DefaultRunspace = oldDefault;
+                }
+
+                // Restore $? for the target Runspace.
+                localRunspace.ExecutionContext.QuestionMarkVariableValue = questionMarkValue;
+            }
+
+            return null;
+        }
+
+        private static bool TryGetFeedbackContext(
+            ExecutionContext executionContext,
+            bool questionMarkValue,
+            HistoryInfo lastHistory,
+            [NotNullWhen(true)] out FeedbackContext? feedbackContext)
+        {
+            feedbackContext = null;
+            Ast ast = Parser.ParseInput(lastHistory.CommandLine, out Token[] tokens, out _);
+
+            FeedbackTrigger trigger;
+            ErrorRecord? lastError = null;
+
+            if (IsPureComment(tokens))
+            {
+                // Don't trigger anything in this case.
+                return false;
+            }
+            else if (questionMarkValue)
+            {
+                trigger = FeedbackTrigger.Success;
+            }
+            else if (TryGetLastError(executionContext, lastHistory, out lastError))
+            {
+                trigger = lastError.FullyQualifiedErrorId is "CommandNotFoundException"
+                    ? FeedbackTrigger.CommandNotFound
+                    : FeedbackTrigger.Error;
+            }
+            else
+            {
+                return false;
+            }
+
+            PathInfo cwd = executionContext.SessionState.Path.CurrentLocation;
+            feedbackContext = new(trigger, ast, tokens, cwd, lastError);
+            return true;
+        }
+
+        private static bool IsPureComment(Token[] tokens)
+        {
+            return tokens.Length is 2 && tokens[0].Kind is TokenKind.Comment && tokens[1].Kind is TokenKind.EndOfInput;
+        }
+
+        private static bool TryGetLastError(ExecutionContext context, HistoryInfo lastHistory, [NotNullWhen(true)] out ErrorRecord? lastError)
+        {
+            lastError = null;
+            ArrayList errorList = (ArrayList)context.DollarErrorVariable;
+            if (errorList.Count == 0)
+            {
+                return false;
+            }
+
+            lastError = errorList[0] as ErrorRecord;
+            if (lastError is null && errorList[0] is RuntimeException rtEx)
+            {
+                lastError = rtEx.ErrorRecord;
+            }
+
+            if (lastError?.InvocationInfo is null || lastError.InvocationInfo.HistoryId != lastHistory.Id)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // A local helper function to avoid creating an instance of the generated delegate helper class
+        // when no feedback provider is registered.
+        private static Func<object?, FeedbackResult?> GetCallBack(
+            FeedbackContext feedbackContext,
+            CancellationTokenSource cancellationSource)
+        {
+            return state =>
+            {
+                var provider = (IFeedbackProvider)state!;
+                var item = provider.GetFeedback(feedbackContext, cancellationSource.Token);
+                return item is null ? null : new FeedbackResult(provider.Id, provider.Name, item);
+            };
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/IFeedbackProvider.cs b/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/IFeedbackProvider.cs
new file mode 100644
index 00000000000..0af184f4e99
--- /dev/null
+++ b/src/System.Management.Automation/engine/Subsystem/FeedbackSubsystem/IFeedbackProvider.cs
@@ -0,0 +1,303 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System.Collections.Generic;
+using System.IO;
+using System.Management.Automation.Internal;
+using System.Management.Automation.Language;
+using System.Management.Automation.Runspaces;
+using System.Threading;
+using Microsoft.PowerShell.Telemetry;
+
+namespace System.Management.Automation.Subsystem.Feedback
+{
+    /// <summary>
+    /// Types of trigger for the feedback provider.
+    /// </summary>
+    [Flags]
+    public enum FeedbackTrigger
+    {
+        /// <summary>
+        /// The last command line executed successfully.
+        /// </summary>
+        Success = 0x0001,
+
+        /// <summary>
+        /// The last command line failed due to a command-not-found error.
+        /// This is a special case of <see cref="Error"/>.
+        /// </summary>
+        CommandNotFound = 0x0002,
+
+        /// <summary>
+        /// The last command line failed with an error record.
+        /// This includes the case of command-not-found error.
+        /// </summary>
+        Error = CommandNotFound | 0x0004,
+
+        /// <summary>
+        /// All possible triggers.
+        /// </summary>
+        All = Success | Error
+    }
+
+    /// <summary>
+    /// Layout for displaying the recommended actions.
+    /// </summary>
+    public enum FeedbackDisplayLayout
+    {
+        /// <summary>
+        /// Display one recommended action per row.
+        /// </summary>
+        Portrait,
+
+        /// <summary>
+        /// Display all recommended actions in the same row.
+        /// </summary>
+        Landscape,
+    }
+
+    /// <summary>
+    /// Context information about the last command line.
+    /// </summary>
+    public sealed class FeedbackContext
+    {
+        /// <summary>
+        /// Gets the feedback trigger.
+        /// </summary>
+        public FeedbackTrigger Trigger { get; }
+
+        /// <summary>
+        /// Gets the last command line that was just executed.
+        /// </summary>
+        public string CommandLine { get; }
+
+        /// <summary>
+        /// Gets the abstract syntax tree (AST) generated from parsing the last command line.
+        /// </summary>
+        public Ast CommandLineAst { get; }
+
+        /// <summary>
+        /// Gets the tokens generated from parsing the last command line.
+        /// </summary>
+        public IReadOnlyList<Token> CommandLineTokens { get; }
+
+        /// <summary>
+        /// Gets the current location of the default session.
+        /// </summary>
+        public PathInfo CurrentLocation { get; }
+
+        /// <summary>
+        /// Gets the last error record generated from executing the last command line.
+        /// </summary>
+        public ErrorRecord? LastError { get; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FeedbackContext"/> class.
+        /// </summary>
+        /// <param name="trigger">The trigger of this feedback call.</param>
+        /// <param name="commandLine">The command line that was just executed.</param>
+        /// <param name="cwd">The current location of the default session.</param>
+        /// <param name="lastError">The error that was triggerd by the last command line.</param>
+        public FeedbackContext(FeedbackTrigger trigger, string commandLine, PathInfo cwd, ErrorRecord? lastError)
+        {
+            ArgumentException.ThrowIfNullOrEmpty(commandLine);
+            ArgumentNullException.ThrowIfNull(cwd);
+
+            Trigger = trigger;
+            CommandLine = commandLine;
+            CommandLineAst = Parser.ParseInput(commandLine, out Token[] tokens, out _);
+            CommandLineTokens = tokens;
+            LastError = lastError;
+            CurrentLocation = cwd;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FeedbackContext"/> class.
+        /// </summary>
+        /// <param name="trigger">The trigger of this feedback call.</param>
+        /// <param name="commandLineAst">The abstract syntax tree (AST) from parsing the last command line.</param>
+        /// <param name="commandLineTokens">The tokens from parsing the last command line.</param>
+        /// <param name="cwd">The current location of the default session.</param>
+        /// <param name="lastError">The error that was triggerd by the last command line.</param>
+        public FeedbackContext(FeedbackTrigger trigger, Ast commandLineAst, Token[] commandLineTokens, PathInfo cwd, ErrorRecord? lastError)
+        {
+            ArgumentNullException.ThrowIfNull(commandLineAst);
+            ArgumentNullException.ThrowIfNull(commandLineTokens);
+            ArgumentNullException.ThrowIfNull(cwd);
+
+            Trigger = trigger;
+            CommandLine = commandLineAst.Extent.Text;
+            CommandLineAst = commandLineAst;
+            CommandLineTokens = commandLineTokens;
+            LastError = lastError;
+            CurrentLocation = cwd;
+        }
+    }
+
+    /// <summary>
+    /// The class represents a feedback item generated by the feedback provider.
+    /// </summary>
+    public sealed class FeedbackItem
+    {
+        /// <summary>
+        /// Gets the description message about this feedback.
+        /// </summary>
+        public string Header { get; }
+
+        /// <summary>
+        /// Gets the footer message about this feedback.
+        /// </summary>
+        public string? Footer { get; }
+
+        /// <summary>
+        /// Gets the recommended actions -- command lines or even code snippets to run.
+        /// </summary>
+        public List<string>? RecommendedActions { get; }
+
+        /// <summary>
+        /// Gets the layout to use for displaying the recommended actions.
+        /// </summary>
+        public FeedbackDisplayLayout Layout { get; }
+
+        /// <summary>
+        /// Gets or sets the next feedback item, if there is one.
+        /// </summary>
+        public FeedbackItem? Next { get; set; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FeedbackItem"/> class.
+        /// </summary>
+        /// <param name="header">The description message (must be not null or empty).</param>
+        /// <param name="actions">The recommended actions to take (optional).</param>
+        public FeedbackItem(string header, List<string>? actions)
+            : this(header, actions, footer: null, FeedbackDisplayLayout.Portrait)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FeedbackItem"/> class.
+        /// </summary>
+        /// <param name="header">The description message (must be not null or empty).</param>
+        /// <param name="actions">The recommended actions to take (optional).</param>
+        /// <param name="layout">The layout for displaying the actions.</param>
+        public FeedbackItem(string header, List<string>? actions, FeedbackDisplayLayout layout)
+            : this(header, actions, footer: null, layout)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="FeedbackItem"/> class.
+        /// </summary>
+        /// <param name="header">The description message (must be not null or empty).</param>
+        /// <param name="actions">The recommended actions to take (optional).</param>
+        /// <param name="footer">The footer message (optional).</param>
+        /// <param name="layout">The layout for displaying the actions.</param>
+        public FeedbackItem(string header, List<string>? actions, string? footer, FeedbackDisplayLayout layout)
+        {
+            ArgumentException.ThrowIfNullOrEmpty(header);
+
+            Header = header;
+            RecommendedActions = actions;
+            Footer = footer;
+            Layout = layout;
+        }
+    }
+
+    /// <summary>
+    /// Interface for implementing a feedback provider on command failures.
+    /// </summary>
+    public interface IFeedbackProvider : ISubsystem
+    {
+        /// <summary>
+        /// Default implementation. No function is required for a feedback provider.
+        /// </summary>
+        Dictionary<string, string>? ISubsystem.FunctionsToDefine => null;
+
+        /// <summary>
+        /// Gets the types of trigger for this feedback provider.
+        /// </summary>
+        /// <remarks>
+        /// The default implementation triggers a feedback provider by <see cref="FeedbackTrigger.CommandNotFound"/> only.
+        /// </remarks>
+        FeedbackTrigger Trigger => FeedbackTrigger.CommandNotFound;
+
+        /// <summary>
+        /// Gets feedback based on the given commandline and error record.
+        /// </summary>
+        /// <param name="context">The context for the feedback call.</param>
+        /// <param name="token">The cancellation token to cancel the operation.</param>
+        /// <returns>The feedback item.</returns>
+        FeedbackItem? GetFeedback(FeedbackContext context, CancellationToken token);
+    }
+
+    internal sealed class GeneralCommandErrorFeedback : IFeedbackProvider
+    {
+        private readonly Guid _guid;
+
+        internal GeneralCommandErrorFeedback()
+        {
+            _guid = new Guid("A3C6B07E-4A89-40C9-8BE6-2A9AAD2786A4");
+        }
+
+        public Guid Id => _guid;
+
+        public string Name => "General Feedback";
+
+        public string Description => "The built-in general feedback source for command errors.";
+
+        public FeedbackItem? GetFeedback(FeedbackContext context, CancellationToken token)
+        {
+            var rsToUse = Runspace.DefaultRunspace;
+            if (rsToUse is null)
+            {
+                return null;
+            }
+
+            // This feedback provider is only triggered by 'CommandNotFound' error, so the
+            // 'LastError' property is guaranteed to be not null.
+            ErrorRecord lastError = context.LastError!;
+            SessionState sessionState = rsToUse.ExecutionContext.SessionState;
+
+            var target = (string)lastError.TargetObject;
+            CommandInvocationIntrinsics invocation = sessionState.InvokeCommand;
+
+            // See if target is actually an executable file in current directory.
+            var localTarget = Path.Combine(".", target);
+            var command = invocation.GetCommand(
+                localTarget,
+                CommandTypes.Application | CommandTypes.ExternalScript);
+
+            if (command is not null)
+            {
+                return new FeedbackItem(
+                    StringUtil.Format(SuggestionStrings.Suggestion_CommandExistsInCurrentDirectory, target),
+                    new List<string> { localTarget });
+            }
+
+            // Check fuzzy matching command names.
+            var pwsh = PowerShell.Create(RunspaceMode.CurrentRunspace);
+            var results = pwsh.AddCommand("Get-Command")
+                    .AddParameter("UseFuzzyMatching")
+                    .AddParameter("FuzzyMinimumDistance", 1)
+                    .AddParameter("Name", target)
+                .AddCommand("Select-Object")
+                    .AddParameter("First", 5)
+                    .AddParameter("Unique")
+                    .AddParameter("ExpandProperty", "Name")
+                .Invoke<string>();
+
+			if (results.Count > 0)
+			{
+				ApplicationInsightsTelemetry.SendUseTelemetry("FuzzyMatching", "CommandNotFound");
+				return new FeedbackItem(
+					SuggestionStrings.Suggestion_CommandNotFound,
+					new List<string>(results),
+					FeedbackDisplayLayout.Landscape);
+			}
+
+            return null;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Subsystem/ISubsystem.cs b/src/System.Management.Automation/engine/Subsystem/ISubsystem.cs
index e19f37f06c7..72b8a55d148 100644
--- a/src/System.Management.Automation/engine/Subsystem/ISubsystem.cs
+++ b/src/System.Management.Automation/engine/Subsystem/ISubsystem.cs
@@ -11,12 +11,26 @@ namespace System.Management.Automation.Subsystem
     /// <summary>
     /// Define the kinds of subsystems.
     /// </summary>
-    public enum SubsystemKind
+    /// <remarks>
+    /// This enum uses power of 2 as the values for the enum elements, so as to make sure
+    /// the bitwise 'or' operation of the elements always results in an invalid value.
+    /// </remarks>
+    public enum SubsystemKind : uint
     {
         /// <summary>
         /// Component that provides predictive suggestions to commandline input.
         /// </summary>
         CommandPredictor = 1,
+
+        /// <summary>
+        /// Cross platform desired state configuration component.
+        /// </summary>
+        CrossPlatformDsc = 2,
+
+        /// <summary>
+        /// Component that provides feedback when a command fails interactively.
+        /// </summary>
+        FeedbackProvider = 4,
     }
 
     /// <summary>
@@ -24,12 +38,8 @@ public enum SubsystemKind
     /// The API contracts for specific subsystems are defined within the specific interfaces/abstract classes that implements this interface.
     /// </summary>
     /// <remarks>
-    /// There are two purposes to have the internal member `Kind` declared in 'ISubsystem':
-    /// 1. Make the mapping from an `ISubsystem` implementation to the `SubsystemKind` easy;
-    /// 2. Make sure a user cannot directly implement 'ISubsystem', but have to derive from one of the concrete subsystem interface or abstract class.
-    /// <para/>
-    /// The internal member needs to have a default implementation defined by the specific subsystem interfaces or abstract class,
-    /// because it should be the same for a specific kind of subsystem.
+    /// A user should not directly implement <see cref="ISubsystem"/>, but instead should derive from one of the concrete subsystem interfaces or abstract classes.
+    /// The instance of a type that only implements 'ISubsystem' cannot be registered to the <see cref="SubsystemManager"/>.
     /// </remarks>
     public interface ISubsystem
     {
@@ -53,10 +63,5 @@ public interface ISubsystem
         /// Key: function name; Value: function script.
         /// </summary>
         Dictionary<string, string>? FunctionsToDefine { get; }
-
-        /// <summary>
-        /// Gets the subsystem kind.
-        /// </summary>
-        internal SubsystemKind Kind { get; }
     }
 }
diff --git a/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/CommandPrediction.cs b/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/CommandPrediction.cs
new file mode 100644
index 00000000000..edb46960612
--- /dev/null
+++ b/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/CommandPrediction.cs
@@ -0,0 +1,281 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Collections.Generic;
+using System.Management.Automation.Language;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Management.Automation.Subsystem.Prediction
+{
+    /// <summary>
+    /// The class represents the prediction result from a predictor.
+    /// </summary>
+    public sealed class PredictionResult
+    {
+        /// <summary>
+        /// Gets the Id of the predictor.
+        /// </summary>
+        public Guid Id { get; }
+
+        /// <summary>
+        /// Gets the name of the predictor.
+        /// </summary>
+        public string Name { get; }
+
+        /// <summary>
+        /// Gets the mini-session id that represents a specific invocation to the <see cref="ICommandPredictor.GetSuggestion"/> API of the predictor.
+        /// When it's not specified, it's considered by a client that the predictor doesn't expect feedback.
+        /// </summary>
+        public uint? Session { get; }
+
+        /// <summary>
+        /// Gets the suggestions.
+        /// </summary>
+        public IReadOnlyList<PredictiveSuggestion> Suggestions { get; }
+
+        internal PredictionResult(Guid id, string name, uint? session, List<PredictiveSuggestion> suggestions)
+        {
+            Id = id;
+            Name = name;
+            Session = session;
+            Suggestions = suggestions;
+        }
+    }
+
+    /// <summary>
+    /// Provides a set of possible predictions for given input.
+    /// </summary>
+    public static class CommandPrediction
+    {
+        /// <summary>
+        /// Collect the predictive suggestions from registered predictors using the default timeout.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="ast">The <see cref="Ast"/> object from parsing the current command line input.</param>
+        /// <param name="astTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
+        /// <returns>A list of <see cref="PredictionResult"/> objects.</returns>
+        public static Task<List<PredictionResult>?> PredictInputAsync(PredictionClient client, Ast ast, Token[] astTokens)
+        {
+            return PredictInputAsync(client, ast, astTokens, millisecondsTimeout: 20);
+        }
+
+        /// <summary>
+        /// Collect the predictive suggestions from registered predictors using the specified timeout.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="ast">The <see cref="Ast"/> object from parsing the current command line input.</param>
+        /// <param name="astTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
+        /// <param name="millisecondsTimeout">The milliseconds to timeout.</param>
+        /// <returns>A list of <see cref="PredictionResult"/> objects.</returns>
+        public static async Task<List<PredictionResult>?> PredictInputAsync(PredictionClient client, Ast ast, Token[] astTokens, int millisecondsTimeout)
+        {
+            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(millisecondsTimeout);
+
+            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
+            if (predictors.Count == 0)
+            {
+                return null;
+            }
+
+            var context = new PredictionContext(ast, astTokens);
+            var tasks = new Task<PredictionResult?>[predictors.Count];
+            using var cancellationSource = new CancellationTokenSource();
+
+            Func<object?, PredictionResult?> callBack = GetCallBack(client, context, cancellationSource);
+
+            for (int i = 0; i < predictors.Count; i++)
+            {
+                ICommandPredictor predictor = predictors[i];
+                tasks[i] = Task.Factory.StartNew(
+                    callBack,
+                    predictor,
+                    cancellationSource.Token,
+                    TaskCreationOptions.DenyChildAttach,
+                    TaskScheduler.Default);
+            }
+
+            await Task.WhenAny(
+                Task.WhenAll(tasks),
+                Task.Delay(millisecondsTimeout, cancellationSource.Token)).ConfigureAwait(false);
+            cancellationSource.Cancel();
+
+            var resultList = new List<PredictionResult>(predictors.Count);
+            foreach (Task<PredictionResult?> task in tasks)
+            {
+                if (task.IsCompletedSuccessfully)
+                {
+                    PredictionResult? result = task.Result;
+                    if (result != null)
+                    {
+                        resultList.Add(result);
+                    }
+                }
+            }
+
+            return resultList;
+
+            // A local helper function to avoid creating an instance of the generated delegate helper class
+            // when no predictor is registered.
+            static Func<object?, PredictionResult?> GetCallBack(
+                PredictionClient client,
+                PredictionContext context,
+                CancellationTokenSource cancellationSource)
+            {
+                return state =>
+                {
+                    var predictor = (ICommandPredictor)state!;
+                    SuggestionPackage pkg = predictor.GetSuggestion(client, context, cancellationSource.Token);
+                    return pkg.SuggestionEntries?.Count > 0 ? new PredictionResult(predictor.Id, predictor.Name, pkg.Session, pkg.SuggestionEntries) : null;
+                };
+            }
+        }
+
+        /// <summary>
+        /// Allow registered predictors to do early processing when a command line is accepted.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="history">History command lines provided as references for prediction.</param>
+        public static void OnCommandLineAccepted(PredictionClient client, IReadOnlyList<string> history)
+        {
+            ArgumentNullException.ThrowIfNull(history);
+
+            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
+            if (predictors.Count == 0)
+            {
+                return;
+            }
+
+            Action<ICommandPredictor>? callBack = null;
+            foreach (ICommandPredictor predictor in predictors)
+            {
+                if (predictor.CanAcceptFeedback(client, PredictorFeedbackKind.CommandLineAccepted))
+                {
+                    callBack ??= GetCallBack(client, history);
+                    ThreadPool.QueueUserWorkItem<ICommandPredictor>(callBack, predictor, preferLocal: false);
+                }
+            }
+
+            // A local helper function to avoid creating an instance of the generated delegate helper class
+            // when no predictor is registered, or no registered predictor accepts this feedback.
+            static Action<ICommandPredictor> GetCallBack(PredictionClient client, IReadOnlyList<string> history)
+            {
+                return predictor => predictor.OnCommandLineAccepted(client, history);
+            }
+        }
+
+        /// <summary>
+        /// Allow registered predictors to know the execution result (success/failure) of the last accepted command line.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="commandLine">The last accepted command line.</param>
+        /// <param name="success">Whether the execution of the last command line was successful.</param>
+        public static void OnCommandLineExecuted(PredictionClient client, string commandLine, bool success)
+        {
+            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
+            if (predictors.Count == 0)
+            {
+                return;
+            }
+
+            Action<ICommandPredictor>? callBack = null;
+            foreach (ICommandPredictor predictor in predictors)
+            {
+                if (predictor.CanAcceptFeedback(client, PredictorFeedbackKind.CommandLineExecuted))
+                {
+                    callBack ??= GetCallBack(client, commandLine, success);
+                    ThreadPool.QueueUserWorkItem<ICommandPredictor>(callBack, predictor, preferLocal: false);
+                }
+            }
+
+            // A local helper function to avoid creating an instance of the generated delegate helper class
+            // when no predictor is registered, or no registered predictor accepts this feedback.
+            static Action<ICommandPredictor> GetCallBack(PredictionClient client, string commandLine, bool success)
+            {
+                return predictor => predictor.OnCommandLineExecuted(client, commandLine, success);
+            }
+        }
+
+        /// <summary>
+        /// Send feedback to a predictor when one or more suggestions from it were displayed to the user.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="predictorId">The identifier of the predictor whose prediction result was accepted.</param>
+        /// <param name="session">The mini-session where the displayed suggestions came from.</param>
+        /// <param name="countOrIndex">
+        /// When the value is greater than 0, it's the number of displayed suggestions from the list returned in <paramref name="session"/>, starting from the index 0.
+        /// When the value is less than or equal to 0, it means a single suggestion from the list got displayed, and the index is the absolute value.
+        /// </param>
+        public static void OnSuggestionDisplayed(PredictionClient client, Guid predictorId, uint session, int countOrIndex)
+        {
+            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
+            if (predictors.Count == 0)
+            {
+                return;
+            }
+
+            foreach (ICommandPredictor predictor in predictors)
+            {
+                if (predictor.Id == predictorId)
+                {
+                    if (predictor.CanAcceptFeedback(client, PredictorFeedbackKind.SuggestionDisplayed))
+                    {
+                        Action<ICommandPredictor> callBack = GetCallBack(client, session, countOrIndex);
+                        ThreadPool.QueueUserWorkItem<ICommandPredictor>(callBack, predictor, preferLocal: false);
+                    }
+
+                    break;
+                }
+            }
+
+            // A local helper function to avoid creating an instance of the generated delegate helper class
+            // when no predictor is registered, or no registered predictor accepts this feedback.
+            static Action<ICommandPredictor> GetCallBack(PredictionClient client, uint session, int countOrIndex)
+            {
+                return predictor => predictor.OnSuggestionDisplayed(client, session, countOrIndex);
+            }
+        }
+
+        /// <summary>
+        /// Send feedback to a predictor when a suggestion from it was accepted.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="predictorId">The identifier of the predictor whose prediction result was accepted.</param>
+        /// <param name="session">The mini-session where the accepted suggestion came from.</param>
+        /// <param name="suggestionText">The accepted suggestion text.</param>
+        public static void OnSuggestionAccepted(PredictionClient client, Guid predictorId, uint session, string suggestionText)
+        {
+            ArgumentException.ThrowIfNullOrEmpty(suggestionText);
+
+            var predictors = SubsystemManager.GetSubsystems<ICommandPredictor>();
+            if (predictors.Count == 0)
+            {
+                return;
+            }
+
+            foreach (ICommandPredictor predictor in predictors)
+            {
+                if (predictor.Id == predictorId)
+                {
+                    if (predictor.CanAcceptFeedback(client, PredictorFeedbackKind.SuggestionAccepted))
+                    {
+                        Action<ICommandPredictor> callBack = GetCallBack(client, session, suggestionText);
+                        ThreadPool.QueueUserWorkItem<ICommandPredictor>(callBack, predictor, preferLocal: false);
+                    }
+
+                    break;
+                }
+            }
+
+            // A local helper function to avoid creating an instance of the generated delegate helper class
+            // when no predictor is registered, or no registered predictor accepts this feedback.
+            static Action<ICommandPredictor> GetCallBack(PredictionClient client, uint session, string suggestionText)
+            {
+                return predictor => predictor.OnSuggestionAccepted(client, session, suggestionText);
+            }
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/ICommandPredictor.cs b/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/ICommandPredictor.cs
new file mode 100644
index 00000000000..275dc1733b6
--- /dev/null
+++ b/src/System.Management.Automation/engine/Subsystem/PredictionSubsystem/ICommandPredictor.cs
@@ -0,0 +1,297 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#nullable enable
+
+using System;
+using System.Collections.Generic;
+using System.Management.Automation.Internal;
+using System.Management.Automation.Language;
+using System.Threading;
+
+namespace System.Management.Automation.Subsystem.Prediction
+{
+    /// <summary>
+    /// Interface for implementing a predictor plugin.
+    /// </summary>
+    public interface ICommandPredictor : ISubsystem
+    {
+        /// <summary>
+        /// Default implementation. No function is required for a predictor.
+        /// </summary>
+        Dictionary<string, string>? ISubsystem.FunctionsToDefine => null;
+
+        /// <summary>
+        /// Get the predictive suggestions. It indicates the start of a suggestion rendering session.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="context">The <see cref="PredictionContext"/> object to be used for prediction.</param>
+        /// <param name="cancellationToken">The cancellation token to cancel the prediction.</param>
+        /// <returns>An instance of <see cref="SuggestionPackage"/>.</returns>
+        SuggestionPackage GetSuggestion(PredictionClient client, PredictionContext context, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// Gets a value indicating whether the predictor accepts a specific kind of feedback.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="feedback">A specific type of feedback.</param>
+        /// <returns>True or false, to indicate whether the specific feedback is accepted.</returns>
+        bool CanAcceptFeedback(PredictionClient client, PredictorFeedbackKind feedback) => false;
+
+        /// <summary>
+        /// One or more suggestions provided by the predictor were displayed to the user.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="session">The mini-session where the displayed suggestions came from.</param>
+        /// <param name="countOrIndex">
+        /// When the value is greater than 0, it's the number of displayed suggestions from the list returned in <paramref name="session"/>, starting from the index 0.
+        /// When the value is less than or equal to 0, it means a single suggestion from the list got displayed, and the index is the absolute value.
+        /// </param>
+        void OnSuggestionDisplayed(PredictionClient client, uint session, int countOrIndex) { }
+
+        /// <summary>
+        /// The suggestion provided by the predictor was accepted.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="session">Represents the mini-session where the accepted suggestion came from.</param>
+        /// <param name="acceptedSuggestion">The accepted suggestion text.</param>
+        void OnSuggestionAccepted(PredictionClient client, uint session, string acceptedSuggestion) { }
+
+        /// <summary>
+        /// A command line was accepted to execute.
+        /// The predictor can start processing early as needed with the latest history.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="history">History command lines provided as references for prediction.</param>
+        void OnCommandLineAccepted(PredictionClient client, IReadOnlyList<string> history) { }
+
+        /// <summary>
+        /// A command line was done execution.
+        /// </summary>
+        /// <param name="client">Represents the client that initiates the call.</param>
+        /// <param name="commandLine">The last accepted command line.</param>
+        /// <param name="success">Shows whether the execution was successful.</param>
+        void OnCommandLineExecuted(PredictionClient client, string commandLine, bool success) { }
+    }
+
+    /// <summary>
+    /// Kinds of feedback a predictor can choose to accept.
+    /// </summary>
+    public enum PredictorFeedbackKind
+    {
+        /// <summary>
+        /// Feedback when one or more suggestions are displayed to the user.
+        /// </summary>
+        SuggestionDisplayed,
+
+        /// <summary>
+        /// Feedback when a suggestion is accepted by the user.
+        /// </summary>
+        SuggestionAccepted,
+
+        /// <summary>
+        /// Feedback when a command line is accepted by the user.
+        /// </summary>
+        CommandLineAccepted,
+
+        /// <summary>
+        /// Feedback when the accepted command line finishes its execution.
+        /// </summary>
+        CommandLineExecuted,
+    }
+
+    /// <summary>
+    /// Kinds of prediction clients.
+    /// </summary>
+    public enum PredictionClientKind
+    {
+        /// <summary>
+        /// A terminal client, representing the command-line experience.
+        /// </summary>
+        Terminal,
+
+        /// <summary>
+        /// An editor client, representing the editor experience.
+        /// </summary>
+        Editor,
+    }
+
+    /// <summary>
+    /// The class represents a client that interacts with predictors.
+    /// </summary>
+    public sealed class PredictionClient
+    {
+        /// <summary>
+        /// Gets the client name.
+        /// </summary>
+        public string Name { get; }
+
+        /// <summary>
+        /// Gets the client kind.
+        /// </summary>
+        public PredictionClientKind Kind { get; }
+
+        /// <summary>
+        /// Gets the current location of the default session.
+        /// It returns null if there is no default Runspace or if the default is a remote Runspace.
+        /// </summary>
+        public PathInfo? CurrentLocation { get; set; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PredictionClient"/> class.
+        /// </summary>
+        /// <param name="name">Name of the interactive client.</param>
+        /// <param name="kind">Kind of the interactive client.</param>
+        public PredictionClient(string name, PredictionClientKind kind)
+        {
+            Name = name;
+            Kind = kind;
+        }
+    }
+
+    /// <summary>
+    /// Context information about the user input.
+    /// </summary>
+    public sealed class PredictionContext
+    {
+        /// <summary>
+        /// Gets the abstract syntax tree (AST) generated from parsing the user input.
+        /// </summary>
+        public Ast InputAst { get; }
+
+        /// <summary>
+        /// Gets the tokens generated from parsing the user input.
+        /// </summary>
+        public IReadOnlyList<Token> InputTokens { get; }
+
+        /// <summary>
+        /// Gets the cursor position, which is assumed always at the end of the input line.
+        /// </summary>
+        public IScriptPosition CursorPosition { get; }
+
+        /// <summary>
+        /// Gets the token at the cursor.
+        /// </summary>
+        public Token? TokenAtCursor { get; }
+
+        /// <summary>
+        /// Gets all ASTs that are related to the cursor position,
+        /// which is assumed always at the end of the input line.
+        /// </summary>
+        public IReadOnlyList<Ast> RelatedAsts { get; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PredictionContext"/> class from the AST and tokens that represent the user input.
+        /// </summary>
+        /// <param name="inputAst">The <see cref="Ast"/> object from parsing the current command line input.</param>
+        /// <param name="inputTokens">The <see cref="Token"/> objects from parsing the current command line input.</param>
+        public PredictionContext(Ast inputAst, Token[] inputTokens)
+        {
+            ArgumentNullException.ThrowIfNull(inputAst);
+            ArgumentNullException.ThrowIfNull(inputTokens);
+
+            var cursor = inputAst.Extent.EndScriptPosition;
+            var astContext = CompletionAnalysis.ExtractAstContext(inputAst, inputTokens, cursor);
+
+            InputAst = inputAst;
+            InputTokens = inputTokens;
+            CursorPosition = cursor;
+            TokenAtCursor = astContext.TokenAtCursor;
+            RelatedAsts = astContext.RelatedAsts;
+        }
+
+        /// <summary>
+        /// Creates a context instance from the user input line.
+        /// </summary>
+        /// <param name="input">The user input.</param>
+        /// <returns>A <see cref="PredictionContext"/> object.</returns>
+        public static PredictionContext Create(string input)
+        {
+            ArgumentException.ThrowIfNullOrEmpty(input);
+
+            Ast ast = Parser.ParseInput(input, out Token[] tokens, out _);
+            return new PredictionContext(ast, tokens);
+        }
+    }
+
+    /// <summary>
+    /// The class represents a predictive suggestion generated by a predictor.
+    /// </summary>
+    public sealed class PredictiveSuggestion
+    {
+        /// <summary>
+        /// Gets the suggestion.
+        /// </summary>
+        public string SuggestionText { get; }
+
+        /// <summary>
+        /// Gets the tooltip of the suggestion.
+        /// </summary>
+        public string? ToolTip { get; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PredictiveSuggestion"/> class.
+        /// </summary>
+        /// <param name="suggestion">The predictive suggestion text.</param>
+        public PredictiveSuggestion(string suggestion)
+            : this(suggestion, toolTip: null)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PredictiveSuggestion"/> class.
+        /// </summary>
+        /// <param name="suggestion">The predictive suggestion text.</param>
+        /// <param name="toolTip">The tooltip of the suggestion.</param>
+        public PredictiveSuggestion(string suggestion, string? toolTip)
+        {
+            ArgumentException.ThrowIfNullOrEmpty(suggestion);
+
+            SuggestionText = suggestion;
+            ToolTip = toolTip;
+        }
+    }
+
+    /// <summary>
+    /// A package returned from <see cref="ICommandPredictor.GetSuggestion"/>.
+    /// </summary>
+    public struct SuggestionPackage
+    {
+        /// <summary>
+        /// Gets the mini-session that represents a specific invocation to <see cref="ICommandPredictor.GetSuggestion"/>.
+        /// When it's not specified, it's considered by a client that the predictor doesn't expect feedback.
+        /// </summary>
+        public uint? Session { get; }
+
+        /// <summary>
+        /// Gets the suggestion entries returned from that mini-session.
+        /// </summary>
+        public List<PredictiveSuggestion>? SuggestionEntries { get; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SuggestionPackage"/> struct without providing a session id.
+        /// Note that, when a session id is not specified, it's considered by a client that the predictor doesn't expect feedback.
+        /// </summary>
+        /// <param name="suggestionEntries">The suggestions to return.</param>
+        public SuggestionPackage(List<PredictiveSuggestion> suggestionEntries)
+        {
+            Requires.NotNullOrEmpty(suggestionEntries, nameof(suggestionEntries));
+
+            Session = null;
+            SuggestionEntries = suggestionEntries;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SuggestionPackage"/> struct with the mini-session id and the suggestions.
+        /// </summary>
+        /// <param name="session">The mini-session where suggestions came from.</param>
+        /// <param name="suggestionEntries">The suggestions to return.</param>
+        public SuggestionPackage(uint session, List<PredictiveSuggestion> suggestionEntries)
+        {
+            Requires.NotNullOrEmpty(suggestionEntries, nameof(suggestionEntries));
+
+            Session = session;
+            SuggestionEntries = suggestionEntries;
+        }
+    }
+}
diff --git a/src/System.Management.Automation/engine/Subsystem/SubsystemInfo.cs b/src/System.Management.Automation/engine/Subsystem/SubsystemInfo.cs
index 24adf990d9e..8756fd69c9b 100644
--- a/src/System.Management.Automation/engine/Subsystem/SubsystemInfo.cs
+++ b/src/System.Management.Automation/engine/Subsystem/SubsystemInfo.cs
@@ -7,6 +7,7 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Management.Automation.Internal;
+using Microsoft.PowerShell.Telemetry;
 
 namespace System.Management.Automation.Subsystem
 {
@@ -18,22 +19,22 @@ public abstract class SubsystemInfo
         #region "Metadata of a Subsystem (public)"
 
         /// <summary>
-        /// The kind of a concrete subsystem.
+        /// Gets the kind of a concrete subsystem.
         /// </summary>
         public SubsystemKind Kind { get; }
 
         /// <summary>
-        /// The type of a concrete subsystem.
+        /// Gets the type of a concrete subsystem.
         /// </summary>
         public Type SubsystemType { get; }
 
         /// <summary>
-        /// Indicate whether the subsystem allows to unregister an implementation.
+        /// Gets a value indicating whether the subsystem allows to unregister an implementation.
         /// </summary>
         public bool AllowUnregistration { get; private set; }
 
         /// <summary>
-        /// Indicate whether the subsystem allows to have multiple implementations registered.
+        /// Gets a value indicating whether the subsystem allows to have multiple implementations registered.
         /// </summary>
         public bool AllowMultipleRegistration { get; private set; }
 
@@ -96,6 +97,7 @@ private protected SubsystemInfo(SubsystemKind kind, Type subsystemType)
         internal void RegisterImplementation(ISubsystem impl)
         {
             AddImplementation(impl);
+            ApplicationInsightsTelemetry.SendUseTelemetry(ApplicationInsightsTelemetry.s_subsystemRegistration, impl.Name);
         }
 
         internal ISubsystem UnregisterImplementation(Guid id)
@@ -159,10 +161,10 @@ internal static SubsystemInfo Create<TConcreteSubsystem>(
         /// </summary>
         public class ImplementationInfo
         {
-            internal ImplementationInfo(ISubsystem implementation)
+            internal ImplementationInfo(SubsystemKind kind, ISubsystem implementation)
             {
                 Id = implementation.Id;
-                Kind = implementation.Kind;
+                Kind = kind;
                 Name = implementation.Name;
                 Description = implementation.Description;
                 ImplementationType = implementation.GetType();
@@ -217,6 +219,7 @@ internal SubsystemInfoImpl(SubsystemKind kind)
         /// In the subsystem scenario, registration operations will be minimum, and in most cases, the registered
         /// implementation will never be unregistered, so optimization for reading is more important.
         /// </remarks>
+        /// <param name="rawImpl">The subsystem implementation to be added.</param>
         private protected override void AddImplementation(ISubsystem rawImpl)
         {
             lock (_syncObj)
@@ -226,7 +229,7 @@ private protected override void AddImplementation(ISubsystem rawImpl)
                 if (_registeredImpls.Count == 0)
                 {
                     _registeredImpls = new ReadOnlyCollection<TConcreteSubsystem>(new[] { impl });
-                    _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(new[] { new ImplementationInfo(impl) });
+                    _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(new[] { new ImplementationInfo(Kind, impl) });
                     return;
                 }
 
@@ -250,12 +253,17 @@ private protected override void AddImplementation(ISubsystem rawImpl)
                     }
                 }
 
-                var list = new List<TConcreteSubsystem>(_registeredImpls.Count + 1);
-                list.AddRange(_registeredImpls);
-                list.Add(impl);
+                int newCapacity = _registeredImpls.Count + 1;
+                var implList = new List<TConcreteSubsystem>(newCapacity);
+                implList.AddRange(_registeredImpls);
+                implList.Add(impl);
 
-                _registeredImpls = new ReadOnlyCollection<TConcreteSubsystem>(list);
-                _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(list.ConvertAll(s => new ImplementationInfo(s)));
+                var implInfo = new List<ImplementationInfo>(newCapacity);
+                implInfo.AddRange(_cachedImplInfos);
+                implInfo.Add(new ImplementationInfo(Kind, impl));
+
+                _registeredImpls = new ReadOnlyCollection<TConcreteSubsystem>(implList);
+                _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(implInfo);
             }
         }
 
@@ -268,6 +276,8 @@ private protected override void AddImplementation(ISubsystem rawImpl)
         /// In the subsystem scenario, registration operations will be minimum, and in most cases, the registered
         /// implementation will never be unregistered, so optimization for reading is more important.
         /// </remarks>
+        /// <param name="id">The id of the subsystem implementation to be removed.</param>
+        /// <returns>The subsystem implementation that was removed.</returns>
         private protected override ISubsystem RemoveImplementation(Guid id)
         {
             if (!AllowUnregistration)
@@ -314,7 +324,10 @@ private protected override ISubsystem RemoveImplementation(Guid id)
                 }
                 else
                 {
-                    var list = new List<TConcreteSubsystem>(_registeredImpls.Count - 1);
+                    int newCapacity = _registeredImpls.Count - 1;
+                    var implList = new List<TConcreteSubsystem>(newCapacity);
+                    var implInfo = new List<ImplementationInfo>(newCapacity);
+
                     for (int i = 0; i < _registeredImpls.Count; i++)
                     {
                         if (index == i)
@@ -322,11 +335,12 @@ private protected override ISubsystem RemoveImplementation(Guid id)
                             continue;
                         }
 
-                        list.Add(_registeredImpls[i]);
+                        implList.Add(_registeredImpls[i]);
+                        implInfo.Add(_cachedImplInfos[i]);
                     }
 
-                    _registeredImpls = new ReadOnlyCollection<TConcreteSubsystem>(list);
-                    _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(list.ConvertAll(s => new ImplementationInfo(s)));
+                    _registeredImpls = new ReadOnlyCollection<TConcreteSubsystem>(implList);
+                    _cachedImplInfos = new ReadOnlyCollection<ImplementationInfo>(implInfo);
                 }
 
                 return target;
diff --git a/src/System.Management.Automation/engine/Subsystem/SubsystemManager.cs b/src/System.Management.Automation/engine/Subsystem/SubsystemManager.cs
index 81a27f61279..e389040899e 100644
--- a/src/System.Management.Automation/engine/Subsystem/SubsystemManager.cs
+++ b/src/System.Management.Automation/engine/Subsystem/SubsystemManager.cs
@@ -6,8 +6,10 @@
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
-using System.Linq;
 using System.Management.Automation.Internal;
+using System.Management.Automation.Subsystem.DSC;
+using System.Management.Automation.Subsystem.Feedback;
+using System.Management.Automation.Subsystem.Prediction;
 
 namespace System.Management.Automation.Subsystem
 {
@@ -28,6 +30,16 @@ static SubsystemManager()
                     SubsystemKind.CommandPredictor,
                     allowUnregistration: true,
                     allowMultipleRegistration: true),
+
+                SubsystemInfo.Create<ICrossPlatformDsc>(
+                    SubsystemKind.CrossPlatformDsc,
+                    allowUnregistration: true,
+                    allowMultipleRegistration: false),
+
+                SubsystemInfo.Create<IFeedbackProvider>(
+                    SubsystemKind.FeedbackProvider,
+                    allowUnregistration: true,
+                    allowMultipleRegistration: true),
             };
 
             var subSystemTypeMap = new Dictionary<Type, SubsystemInfo>(subsystems.Length);
@@ -42,6 +54,9 @@ static SubsystemManager()
             s_subsystems = new ReadOnlyCollection<SubsystemInfo>(subsystems);
             s_subSystemTypeMap = new ReadOnlyDictionary<Type, SubsystemInfo>(subSystemTypeMap);
             s_subSystemKindMap = new ReadOnlyDictionary<SubsystemKind, SubsystemInfo>(subSystemKindMap);
+
+            // Register built-in suggestion providers.
+            RegisterSubsystem(SubsystemKind.FeedbackProvider, new GeneralCommandErrorFeedback());
         }
 
         #region internal - Retrieve subsystem proxy object
@@ -52,14 +67,14 @@ static SubsystemManager()
         /// </summary>
         /// <remarks>
         /// Design point:
-        /// The implemnentation proxy object is not supposed to expose to users.
+        /// The implementation proxy object is not supposed to expose to users.
         /// Users shouldn't depend on a implementation proxy object directly, but instead should depend on PowerShell APIs.
         /// <para/>
         /// Example: if a user want to use prediction functionality, he/she should use the PowerShell prediction API instead of
         /// directly interacting with the implementation proxy object of `IPrediction`.
         /// </remarks>
         /// <typeparam name="TConcreteSubsystem">The concrete subsystem base type.</typeparam>
-        /// <returns>The most recently registered implmentation object of the concrete subsystem.</returns>
+        /// <returns>The most recently registered implementation object of the concrete subsystem.</returns>
         internal static TConcreteSubsystem? GetSubsystem<TConcreteSubsystem>()
             where TConcreteSubsystem : class, ISubsystem
         {
@@ -80,7 +95,7 @@ static SubsystemManager()
         /// Return an empty collection when the given subsystem is not registered.
         /// </summary>
         /// <typeparam name="TConcreteSubsystem">The concrete subsystem base type.</typeparam>
-        /// <returns>A readonly collection of all implmentation objects registered for the concrete subsystem.</returns>
+        /// <returns>A readonly collection of all implementation objects registered for the concrete subsystem.</returns>
         internal static ReadOnlyCollection<TConcreteSubsystem> GetSubsystems<TConcreteSubsystem>()
             where TConcreteSubsystem : class, ISubsystem
         {
@@ -116,7 +131,7 @@ public static ReadOnlyCollection<SubsystemInfo> GetAllSubsystemInfo()
         /// <returns>The <see cref="SubsystemInfo"/> object that represents the concrete subsystem.</returns>
         public static SubsystemInfo GetSubsystemInfo(Type subsystemType)
         {
-            Requires.NotNull(subsystemType, nameof(subsystemType));
+            ArgumentNullException.ThrowIfNull(subsystemType);
 
             if (s_subSystemTypeMap.TryGetValue(subsystemType, out SubsystemInfo? subsystemInfo))
             {
@@ -124,9 +139,12 @@ public static SubsystemInfo GetSubsystemInfo(Type subsystemType)
             }
 
             throw new ArgumentException(
-                StringUtil.Format(
-                    SubsystemStrings.SubsystemTypeUnknown,
-                    subsystemType.FullName));
+                subsystemType == typeof(ISubsystem)
+                    ? SubsystemStrings.MustUseConcreteSubsystemType
+                    : StringUtil.Format(
+                        SubsystemStrings.SubsystemTypeUnknown,
+                        subsystemType.FullName),
+                nameof(subsystemType));
         }
 
         /// <summary>
@@ -144,7 +162,8 @@ public static SubsystemInfo GetSubsystemInfo(SubsystemKind kind)
             throw new ArgumentException(
                 StringUtil.Format(
                     SubsystemStrings.SubsystemKindUnknown,
-                    kind.ToString()));
+                    kind.ToString()),
+                nameof(kind));
         }
 
         #endregion
@@ -161,7 +180,7 @@ public static void RegisterSubsystem<TConcreteSubsystem, TImplementation>(TImple
             where TConcreteSubsystem : class, ISubsystem
             where TImplementation : class, TConcreteSubsystem
         {
-            Requires.NotNull(proxy, nameof(proxy));
+            ArgumentNullException.ThrowIfNull(proxy);
 
             RegisterSubsystem(GetSubsystemInfo(typeof(TConcreteSubsystem)), proxy);
         }
@@ -173,19 +192,20 @@ public static void RegisterSubsystem<TConcreteSubsystem, TImplementation>(TImple
         /// <param name="proxy">An instance of the implementation.</param>
         public static void RegisterSubsystem(SubsystemKind kind, ISubsystem proxy)
         {
-            Requires.NotNull(proxy, nameof(proxy));
+            ArgumentNullException.ThrowIfNull(proxy);
 
-            if (kind != proxy.Kind)
+            SubsystemInfo info = GetSubsystemInfo(kind);
+            if (!info.SubsystemType.IsAssignableFrom(proxy.GetType()))
             {
                 throw new ArgumentException(
                     StringUtil.Format(
-                        SubsystemStrings.ImplementationMismatch,
-                        proxy.Kind.ToString(),
-                        kind.ToString()),
+                        SubsystemStrings.ConcreteSubsystemNotImplemented,
+                        kind.ToString(),
+                        info.SubsystemType.Name),
                     nameof(proxy));
             }
 
-            RegisterSubsystem(GetSubsystemInfo(kind), proxy);
+            RegisterSubsystem(info, proxy);
         }
 
         private static void RegisterSubsystem(SubsystemInfo subsystemInfo, ISubsystem proxy)
@@ -273,7 +293,14 @@ private static void UnregisterSubsystem(SubsystemInfo subsystemInfo, Guid id)
             ISubsystem impl = subsystemInfo.UnregisterImplementation(id);
             if (impl is IDisposable disposable)
             {
-                disposable.Dispose();
+                try
+                {
+                    disposable.Dispose();
+                }
+                catch
+                {
+                    // It's OK to ignore all exceptions when disposing the object.
+                }
             }
         }
 
diff --git a/src/System.Management.Automation/engine/ThirdPartyAdapter.cs b/src/System.Management.Automation/engine/ThirdPartyAdapter.cs
index bde0c0f3483..d77e700e90e 100644
--- a/src/System.Management.Automation/engine/ThirdPartyAdapter.cs
+++ b/src/System.Management.Automation/engine/ThirdPartyAdapter.cs
@@ -296,10 +296,7 @@ public abstract class PSPropertyAdapter
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "object")]
         public virtual Collection<string> GetTypeNameHierarchy(object baseObject)
         {
-            if (baseObject == null)
-            {
-                throw new ArgumentNullException(nameof(baseObject));
-            }
+            ArgumentNullException.ThrowIfNull(baseObject);
 
             Collection<string> types = new Collection<string>();
 
diff --git a/src/System.Management.Automation/engine/TransactedString.cs b/src/System.Management.Automation/engine/TransactedString.cs
deleted file mode 100644
index 948cf1d9d81..00000000000
--- a/src/System.Management.Automation/engine/TransactedString.cs
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Text;
-using System.Transactions;
-
-namespace Microsoft.PowerShell.Commands.Management
-{
-    /// <summary>
-    /// Represents a a string that can be used in transactions.
-    /// </summary>
-    public class TransactedString : IEnlistmentNotification
-    {
-        private StringBuilder _value;
-        private StringBuilder _temporaryValue;
-        private Transaction _enlistedTransaction = null;
-
-        /// <summary>
-        /// Constructor for the TransactedString class.
-        /// </summary>
-        public TransactedString() : this(string.Empty)
-        {
-        }
-
-        /// <summary>
-        /// Constructor for the TransactedString class.
-        /// <param name="value">
-        /// The initial value of the transacted string.
-        /// </param>
-        /// </summary>
-        public TransactedString(string value)
-        {
-            _value = new StringBuilder(value);
-            _temporaryValue = null;
-        }
-
-        /// <summary>
-        /// Make the transacted changes permanent.
-        /// </summary>
-        void IEnlistmentNotification.Commit(Enlistment enlistment)
-        {
-            _value = new StringBuilder(_temporaryValue.ToString());
-            _temporaryValue = null;
-            _enlistedTransaction = null;
-            enlistment.Done();
-        }
-
-        /// <summary>
-        /// Discard the transacted changes.
-        /// </summary>
-        void IEnlistmentNotification.Rollback(Enlistment enlistment)
-        {
-            _temporaryValue = null;
-            _enlistedTransaction = null;
-            enlistment.Done();
-        }
-
-        /// <summary>
-        /// Discard the transacted changes.
-        /// </summary>
-        void IEnlistmentNotification.InDoubt(Enlistment enlistment)
-        {
-            enlistment.Done();
-        }
-
-        void IEnlistmentNotification.Prepare(PreparingEnlistment preparingEnlistment)
-        {
-            preparingEnlistment.Prepared();
-        }
-
-        /// <summary>
-        /// Append text to the transacted string.
-        /// <param name="text">
-        /// The text to append.
-        /// </param>
-        /// </summary>
-        public void Append(string text)
-        {
-            ValidateTransactionOrEnlist();
-
-            if (_enlistedTransaction != null)
-            {
-                _temporaryValue.Append(text);
-            }
-            else
-            {
-                _value.Append(text);
-            }
-        }
-
-        /// <summary>
-        /// Remove text from the transacted string.
-        /// <param name="startIndex">
-        /// The position in the string from which to start removing.
-        /// </param>
-        /// <param name="length">
-        /// The length of text to remove.
-        /// </param>
-        /// </summary>
-        public void Remove(int startIndex, int length)
-        {
-            ValidateTransactionOrEnlist();
-
-            if (_enlistedTransaction != null)
-            {
-                _temporaryValue.Remove(startIndex, length);
-            }
-            else
-            {
-                _value.Remove(startIndex, length);
-            }
-        }
-
-        /// <summary>
-        /// Gets the length of the transacted string. If this is
-        /// called within the transaction, it returns the length of
-        /// the transacted value. Otherwise, it returns the length of
-        /// the original value.
-        /// </summary>
-        public int Length
-        {
-            get
-            {
-                // If we're not in a transaction, or we are in a different transaction than the one we
-                // enlisted to, return the publicly visible state.
-                if (
-                    (Transaction.Current == null) ||
-                    (_enlistedTransaction != Transaction.Current))
-                {
-                    return _value.Length;
-                }
-                else
-                {
-                    return _temporaryValue.Length;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Gets the System.String that represents the transacted
-        /// transacted string. If this is called within the
-        /// transaction, it returns the transacted value.
-        /// Otherwise, it returns the original value.
-        /// </summary>
-        public override string ToString()
-        {
-            // If we're not in a transaction, or we are in a different transaction than the one we
-            // enlisted to, return the publicly visible state.
-            if (
-               (Transaction.Current == null) ||
-               (_enlistedTransaction != Transaction.Current))
-            {
-                return _value.ToString();
-            }
-            else
-            {
-                return _temporaryValue.ToString();
-            }
-        }
-
-        private void ValidateTransactionOrEnlist()
-        {
-            // We're in a transaction
-            if (Transaction.Current != null)
-            {
-                // We haven't yet been called inside of a transaction. So enlist
-                // in the transaction, and store our save point
-                if (_enlistedTransaction == null)
-                {
-                    Transaction.Current.EnlistVolatile(this, EnlistmentOptions.None);
-                    _enlistedTransaction = Transaction.Current;
-
-                    _temporaryValue = new StringBuilder(_value.ToString());
-                }
-                // We're already enlisted in a transaction
-                else
-                {
-                    // And we're in that transaction
-                    if (Transaction.Current != _enlistedTransaction)
-                    {
-                        throw new InvalidOperationException("Cannot modify string. It has been modified by another transaction.");
-                    }
-                }
-            }
-            // We're not in a transaction
-            else
-            {
-                // If we're not subscribed to a transaction, modify the underlying value
-                if (_enlistedTransaction != null)
-                {
-                    throw new InvalidOperationException("Cannot modify string. It has been modified by another transaction.");
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/System.Management.Automation/engine/TransactionManager.cs b/src/System.Management.Automation/engine/TransactionManager.cs
deleted file mode 100644
index bf86d90e812..00000000000
--- a/src/System.Management.Automation/engine/TransactionManager.cs
+++ /dev/null
@@ -1,709 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma warning disable 1634, 1691
-
-using System.Collections.Generic;
-using System.Transactions;
-using System.Management.Automation.Internal;
-
-namespace System.Management.Automation
-{
-    /// <summary>
-    /// The status of a PowerShell transaction.
-    /// </summary>
-    public enum PSTransactionStatus
-    {
-        /// <summary>
-        /// The transaction has been rolled back.
-        /// </summary>
-        RolledBack = 0,
-
-        /// <summary>
-        /// The transaction has been committed.
-        /// </summary>
-        Committed = 1,
-
-        /// <summary>
-        /// The transaction is currently active.
-        /// </summary>
-        Active = 2
-    }
-
-    /// <summary>
-    /// Represents an active transaction.
-    /// </summary>
-    public sealed class PSTransaction : IDisposable
-    {
-        /// <summary>
-        /// Initializes a new instance of the PSTransaction class.
-        /// </summary>
-        internal PSTransaction(RollbackSeverity rollbackPreference, TimeSpan timeout)
-        {
-            _transaction = new CommittableTransaction(timeout);
-            RollbackPreference = rollbackPreference;
-            _subscriberCount = 1;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the PSTransaction class using a CommittableTransaction.
-        /// </summary>
-        internal PSTransaction(CommittableTransaction transaction, RollbackSeverity severity)
-        {
-            _transaction = transaction;
-            RollbackPreference = severity;
-            _subscriberCount = 1;
-        }
-
-        private CommittableTransaction _transaction;
-
-        /// <summary>
-        /// Gets the rollback preference for this transaction.
-        /// </summary>
-        public RollbackSeverity RollbackPreference { get; }
-
-        /// <summary>
-        /// Gets the number of subscribers to this transaction.
-        /// </summary>
-        public int SubscriberCount
-        {
-            get
-            {
-                // Verify the transaction hasn't been rolled back beneath us
-                if (this.IsRolledBack)
-                {
-                    this.SubscriberCount = 0;
-                }
-
-                return _subscriberCount;
-            }
-
-            set { _subscriberCount = value; }
-        }
-
-        private int _subscriberCount;
-
-        /// <summary>
-        /// Returns the status of this transaction.
-        /// </summary>
-        public PSTransactionStatus Status
-        {
-            get
-            {
-                if (IsRolledBack)
-                {
-                    return PSTransactionStatus.RolledBack;
-                }
-                else if (IsCommitted)
-                {
-                    return PSTransactionStatus.Committed;
-                }
-                else
-                {
-                    return PSTransactionStatus.Active;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Activates the transaction held by this PSTransaction.
-        /// </summary>
-        internal void Activate()
-        {
-            Transaction.Current = _transaction;
-        }
-
-        /// <summary>
-        /// Commits the transaction held by this PSTransaction.
-        /// </summary>
-        internal void Commit()
-        {
-            _transaction.Commit();
-            IsCommitted = true;
-        }
-
-        /// <summary>
-        /// Rolls back the transaction held by this PSTransaction.
-        /// </summary>
-        internal void Rollback()
-        {
-            _transaction.Rollback();
-            _isRolledBack = true;
-        }
-
-        /// <summary>
-        /// Determines whether this PSTransaction has been
-        /// rolled back or not.
-        /// </summary>
-        internal bool IsRolledBack
-        {
-            get
-            {
-                // Check if it's been aborted underneath us
-                if (
-                    (!_isRolledBack) &&
-                    (_transaction != null) &&
-                    (_transaction.TransactionInformation.Status == TransactionStatus.Aborted))
-                {
-                    _isRolledBack = true;
-                }
-
-                return _isRolledBack;
-            }
-
-            set
-            {
-                _isRolledBack = value;
-            }
-        }
-
-        private bool _isRolledBack = false;
-
-        /// <summary>
-        /// Determines whether this PSTransaction
-        /// has been committed or not.
-        /// </summary>
-        internal bool IsCommitted { get; set; } = false;
-
-        /// <summary>
-        /// Destructor for the PSTransaction class.
-        /// </summary>
-        ~PSTransaction()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransaction object.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransaction object, which disposes the
-        /// underlying transaction.
-        /// <param name="disposing">
-        /// Whether to actually dispose the object.
-        /// </param>
-        /// </summary>
-        public void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                if (_transaction != null)
-                {
-                    _transaction.Dispose();
-                }
-            }
-        }
-    }
-
-    /// <summary>
-    /// Supports the transaction management infrastructure for the PowerShell engine.
-    /// </summary>
-    public sealed class PSTransactionContext : IDisposable
-    {
-        /// <summary>
-        /// Initializes a new instance of the PSTransactionManager class.
-        /// </summary>
-        internal PSTransactionContext(PSTransactionManager transactionManager)
-        {
-            _transactionManager = transactionManager;
-            transactionManager.SetActive();
-        }
-
-        private PSTransactionManager _transactionManager;
-
-        /// <summary>
-        /// Destructor for the PSTransactionManager class.
-        /// </summary>
-        ~PSTransactionContext()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransactionContext object.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransactionContext object, which resets the
-        /// active PSTransaction.
-        /// <param name="disposing">
-        /// Whether to actually dispose the object.
-        /// </param>
-        /// </summary>
-        private void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                _transactionManager.ResetActive();
-            }
-        }
-    }
-
-    /// <summary>
-    /// The severity of error that causes PowerShell to automatically
-    /// rollback the transaction.
-    /// </summary>
-    public enum RollbackSeverity
-    {
-        /// <summary>
-        /// Non-terminating errors or worse.
-        /// </summary>
-        Error,
-
-        /// <summary>
-        /// Terminating errors or worse.
-        /// </summary>
-        TerminatingError,
-
-        /// <summary>
-        /// Do not rollback the transaction on error.
-        /// </summary>
-        Never
-    }
-}
-
-namespace System.Management.Automation.Internal
-{
-    /// <summary>
-    /// Supports the transaction management infrastructure for the PowerShell engine.
-    /// </summary>
-    internal sealed class PSTransactionManager : IDisposable
-    {
-        /// <summary>
-        /// Initializes a new instance of the PSTransactionManager class.
-        /// </summary>
-        internal PSTransactionManager()
-        {
-            _transactionStack = new Stack<PSTransaction>();
-            _transactionStack.Push(null);
-        }
-
-        /// <summary>
-        /// Called by engine APIs to ensure they are protected from
-        /// ambient transactions.
-        /// </summary>
-        internal static IDisposable GetEngineProtectionScope()
-        {
-            if (s_engineProtectionEnabled && (Transaction.Current != null))
-            {
-                return new System.Transactions.TransactionScope(
-                    System.Transactions.TransactionScopeOption.Suppress);
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// Called by the transaction manager to enable engine
-        /// protection the first time a transaction is activated.
-        /// Engine protection APIs remain protected from this point on.
-        /// </summary>
-        internal static void EnableEngineProtection()
-        {
-            s_engineProtectionEnabled = true;
-        }
-
-        private static bool s_engineProtectionEnabled = false;
-
-        /// <summary>
-        /// Gets the rollback preference for the active transaction.
-        /// </summary>
-        internal RollbackSeverity RollbackPreference
-        {
-            get
-            {
-                PSTransaction currentTransaction = _transactionStack.Peek();
-
-                if (currentTransaction == null)
-                {
-                    string error = TransactionStrings.NoTransactionActive;
-
-                    // This is not an expected condition, and is just protective
-                    // coding.
-#pragma warning suppress 56503
-                    throw new InvalidOperationException(error);
-                }
-
-                return currentTransaction.RollbackPreference;
-            }
-        }
-
-        /// <summary>
-        /// Creates a new Transaction if none are active. Otherwise, increments
-        /// the subscriber count for the active transaction.
-        /// </summary>
-        internal void CreateOrJoin()
-        {
-            CreateOrJoin(RollbackSeverity.Error, TimeSpan.FromMinutes(1));
-        }
-
-        /// <summary>
-        /// Creates a new Transaction if none are active. Otherwise, increments
-        /// the subscriber count for the active transaction.
-        /// </summary>
-        internal void CreateOrJoin(RollbackSeverity rollbackPreference, TimeSpan timeout)
-        {
-            PSTransaction currentTransaction = _transactionStack.Peek();
-
-            // There is a transaction on the stack
-            if (currentTransaction != null)
-            {
-                // If you are already in a transaction that has been aborted, or committed,
-                // create it.
-                if (currentTransaction.IsRolledBack || currentTransaction.IsCommitted)
-                {
-                    // Clean up the "used" one
-                    _transactionStack.Pop().Dispose();
-
-                    // And add a new one to the stack
-                    _transactionStack.Push(new PSTransaction(rollbackPreference, timeout));
-                }
-                else
-                {
-                    // This is a usable one. Add a subscriber to it.
-                    currentTransaction.SubscriberCount++;
-                }
-            }
-            else
-            {
-                // Add a new transaction to the stack
-                _transactionStack.Push(new PSTransaction(rollbackPreference, timeout));
-            }
-        }
-
-        /// <summary>
-        /// Creates a new Transaction that should be managed independently of
-        /// any parent transactions.
-        /// </summary>
-        internal void CreateNew()
-        {
-            CreateNew(RollbackSeverity.Error, TimeSpan.FromMinutes(1));
-        }
-
-        /// <summary>
-        /// Creates a new Transaction that should be managed independently of
-        /// any parent transactions.
-        /// </summary>
-        internal void CreateNew(RollbackSeverity rollbackPreference, TimeSpan timeout)
-        {
-            _transactionStack.Push(new PSTransaction(rollbackPreference, timeout));
-        }
-
-        /// <summary>
-        /// Completes the current transaction. If only one subscriber is active, this
-        /// commits the transaction. Otherwise, it reduces the subscriber count by one.
-        /// </summary>
-        internal void Commit()
-        {
-            PSTransaction currentTransaction = _transactionStack.Peek();
-
-            // Should not be able to commit a transaction that is not active
-            if (currentTransaction == null)
-            {
-                string error = TransactionStrings.NoTransactionActiveForCommit;
-                throw new InvalidOperationException(error);
-            }
-
-            // If you are already in a transaction that has been aborted
-            if (currentTransaction.IsRolledBack)
-            {
-                string error = TransactionStrings.TransactionRolledBackForCommit;
-                throw new TransactionAbortedException(error);
-            }
-
-            // If you are already in a transaction that has been committed
-            if (currentTransaction.IsCommitted)
-            {
-                string error = TransactionStrings.CommittedTransactionForCommit;
-                throw new InvalidOperationException(error);
-            }
-
-            if (currentTransaction.SubscriberCount == 1)
-            {
-                currentTransaction.Commit();
-                currentTransaction.SubscriberCount = 0;
-            }
-            else
-            {
-                currentTransaction.SubscriberCount--;
-            }
-
-            // Now that we've committed, go back to the last available transaction
-            while ((_transactionStack.Count > 2) &&
-                (_transactionStack.Peek().IsRolledBack || _transactionStack.Peek().IsCommitted))
-            {
-                _transactionStack.Pop().Dispose();
-            }
-        }
-
-        /// <summary>
-        /// Aborts the current transaction, no matter how many subscribers are part of it.
-        /// </summary>
-        internal void Rollback()
-        {
-            Rollback(false);
-        }
-
-        /// <summary>
-        /// Aborts the current transaction, no matter how many subscribers are part of it.
-        /// </summary>
-        internal void Rollback(bool suppressErrors)
-        {
-            PSTransaction currentTransaction = _transactionStack.Peek();
-
-            // Should not be able to roll back a transaction that is not active
-            if (currentTransaction == null)
-            {
-                string error = TransactionStrings.NoTransactionActiveForRollback;
-                throw new InvalidOperationException(error);
-            }
-
-            // If you are already in a transaction that has been aborted
-            if (currentTransaction.IsRolledBack)
-            {
-                if (!suppressErrors)
-                {
-                    // Otherwise, you should not be able to roll it back.
-                    string error = TransactionStrings.TransactionRolledBackForRollback;
-                    throw new TransactionAbortedException(error);
-                }
-            }
-
-            // See if they've already committed the transaction
-            if (currentTransaction.IsCommitted)
-            {
-                if (!suppressErrors)
-                {
-                    string error = TransactionStrings.CommittedTransactionForRollback;
-                    throw new InvalidOperationException(error);
-                }
-            }
-
-            // Roll back the transaction if it hasn't been rolled back
-            currentTransaction.SubscriberCount = 0;
-            currentTransaction.Rollback();
-
-            // Now that we've rolled back, go back to the last available transaction
-            while ((_transactionStack.Count > 2) &&
-                (_transactionStack.Peek().IsRolledBack || _transactionStack.Peek().IsCommitted))
-            {
-                _transactionStack.Pop().Dispose();
-            }
-        }
-
-        /// <summary>
-        /// Sets the base transaction; any transactions created thereafter will be nested to this instance.
-        /// </summary>
-        internal void SetBaseTransaction(CommittableTransaction transaction, RollbackSeverity severity)
-        {
-            if (this.HasTransaction)
-            {
-                throw new InvalidOperationException(TransactionStrings.BaseTransactionMustBeFirst);
-            }
-
-            PSTransaction currentTransaction = _transactionStack.Peek();
-
-            // If there is a "used" transaction at the top of the stack, clean it up
-            while (_transactionStack.Peek() != null &&
-                (_transactionStack.Peek().IsRolledBack || _transactionStack.Peek().IsCommitted))
-            {
-                _transactionStack.Pop().Dispose();
-            }
-
-            _baseTransaction = new PSTransaction(transaction, severity);
-            _transactionStack.Push(_baseTransaction);
-        }
-
-        /// <summary>
-        /// Removes the transaction added by SetBaseTransaction.
-        /// </summary>
-        internal void ClearBaseTransaction()
-        {
-            if (_baseTransaction == null)
-            {
-                throw new InvalidOperationException(TransactionStrings.BaseTransactionNotSet);
-            }
-
-            if (_transactionStack.Peek() != _baseTransaction)
-            {
-                throw new InvalidOperationException(TransactionStrings.BaseTransactionNotActive);
-            }
-
-            _transactionStack.Pop().Dispose();
-            _baseTransaction = null;
-        }
-
-        private Stack<PSTransaction> _transactionStack;
-        private PSTransaction _baseTransaction;
-
-        /// <summary>
-        /// Returns the current engine transaction.
-        /// </summary>
-        internal PSTransaction GetCurrent()
-        {
-            return _transactionStack.Peek();
-        }
-
-        /// <summary>
-        /// Activates the current transaction, both in the engine, and in the Ambient.
-        /// </summary>
-        internal void SetActive()
-        {
-            PSTransactionManager.EnableEngineProtection();
-
-            PSTransaction currentTransaction = _transactionStack.Peek();
-
-            // Should not be able to activate a transaction that is not active
-            if (currentTransaction == null)
-            {
-                string error = TransactionStrings.NoTransactionForActivation;
-                throw new InvalidOperationException(error);
-            }
-
-            // If you are already in a transaction that has been aborted, you should
-            // not be able to activate it.
-            if (currentTransaction.IsRolledBack)
-            {
-                string error = TransactionStrings.NoTransactionForActivationBecauseRollback;
-                throw new TransactionAbortedException(error);
-            }
-
-            _previousActiveTransaction = Transaction.Current;
-            currentTransaction.Activate();
-        }
-
-        private Transaction _previousActiveTransaction;
-
-        /// <summary>
-        /// Deactivates the current transaction in the engine, and restores the
-        /// ambient transaction.
-        /// </summary>
-        internal void ResetActive()
-        {
-            // Even if you are in a transaction that has been aborted, you
-            // should still be able to restore the current transaction.
-
-            Transaction.Current = _previousActiveTransaction;
-            _previousActiveTransaction = null;
-        }
-
-        /// <summary>
-        /// Determines if you have a transaction that you can set active and work on.
-        /// </summary>
-        internal bool HasTransaction
-        {
-            get
-            {
-                PSTransaction currentTransaction = _transactionStack.Peek();
-
-                if ((currentTransaction != null) &&
-                    (!currentTransaction.IsCommitted) &&
-                    (!currentTransaction.IsRolledBack))
-                {
-                    return true;
-                }
-                else
-                {
-                    return false;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Determines if the last transaction has been committed.
-        /// </summary>
-        internal bool IsLastTransactionCommitted
-        {
-            get
-            {
-                PSTransaction currentTransaction = _transactionStack.Peek();
-
-                if (currentTransaction != null)
-                {
-                    return currentTransaction.IsCommitted;
-                }
-                else
-                {
-                    return false;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Determines if the last transaction has been rolled back.
-        /// </summary>
-        internal bool IsLastTransactionRolledBack
-        {
-            get
-            {
-                PSTransaction currentTransaction = _transactionStack.Peek();
-
-                if (currentTransaction != null)
-                {
-                    return currentTransaction.IsRolledBack;
-                }
-                else
-                {
-                    return false;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Destructor for the PSTransactionManager class.
-        /// </summary>
-        ~PSTransactionManager()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransactionManager object.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Disposes the PSTransactionContext object, which resets the
-        /// active PSTransaction.
-        /// <param name="disposing">
-        /// Whether to actually dispose the object.
-        /// </param>
-        /// </summary>
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "baseTransaction", Justification = "baseTransaction should not be disposed since we do not own it - it belongs to the caller")]
-        public void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                ResetActive();
-
-                while (_transactionStack.Peek() != null)
-                {
-                    PSTransaction currentTransaction = _transactionStack.Pop();
-
-                    if (currentTransaction != _baseTransaction)
-                    {
-                        currentTransaction.Dispose();
-                    }
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/System.Management.Automation/engine/TypeMetadata.cs b/src/System.Management.Automation/engine/TypeMetadata.cs
index 31a6adeab73..926b07fb15a 100644
--- a/src/System.Management.Automation/engine/TypeMetadata.cs
+++ b/src/System.Management.Automation/engine/TypeMetadata.cs
@@ -761,6 +761,7 @@ internal bool IsMatchingType(PSTypeName psTypeName)
         private const string AliasesFormat = @"{0}[Alias({1})]";
         private const string ValidateLengthFormat = @"{0}[ValidateLength({1}, {2})]";
         private const string ValidateRangeRangeKindFormat = @"{0}[ValidateRange([System.Management.Automation.ValidateRangeKind]::{1})]";
+        private const string ValidateRangeEnumFormat = @"{0}[ValidateRange([{3}]::{1}, [{3}]::{2})]";
         private const string ValidateRangeFloatFormat = @"{0}[ValidateRange({1:R}, {2:R})]";
         private const string ValidateRangeFormat = @"{0}[ValidateRange({1}, {2})]";
         private const string ValidatePatternFormat = "{0}[ValidatePattern('{1}')]";
@@ -769,6 +770,7 @@ internal bool IsMatchingType(PSTypeName psTypeName)
         private const string ValidateSetFormat = @"{0}[ValidateSet({1})]";
         private const string ValidateNotNullFormat = @"{0}[ValidateNotNull()]";
         private const string ValidateNotNullOrEmptyFormat = @"{0}[ValidateNotNullOrEmpty()]";
+        private const string ValidateNotNullOrWhiteSpaceFormat = @"{0}[ValidateNotNullOrWhiteSpace()]";
         private const string AllowNullFormat = @"{0}[AllowNull()]";
         private const string AllowEmptyStringFormat = @"{0}[AllowEmptyString()]";
         private const string AllowEmptyCollectionFormat = @"{0}[AllowEmptyCollection()]";
@@ -931,6 +933,10 @@ private static string GetProxyAttributeData(Attribute attrib, string prefix)
                     {
                         format = ValidateRangeFloatFormat;
                     }
+                    else if (rangeType.IsEnum)
+                    {
+                        format = ValidateRangeEnumFormat;
+                    }
                     else
                     {
                         format = ValidateRangeFormat;
@@ -941,7 +947,8 @@ private static string GetProxyAttributeData(Attribute attrib, string prefix)
                         format,
                         prefix,
                         validRangeAttrib.MinRange,
-                        validRangeAttrib.MaxRange);
+                        validRangeAttrib.MaxRange,
+                        rangeType.FullName);
                     return result;
                 }
             }
@@ -976,7 +983,7 @@ private static string GetProxyAttributeData(Attribute attrib, string prefix)
                 /* TODO: Validate Pattern dont support Options in ScriptCmdletText.
                 StringBuilder regexOps = new System.Text.StringBuilder();
                 string or = string.Empty;
-                string[] regexOptionEnumValues = Enum.GetNames(typeof(System.Text.RegularExpressions.RegexOptions));
+                string[] regexOptionEnumValues = Enum.GetNames<System.Text.RegularExpressions.RegexOptions>();
 
                 foreach (string regexOption in regexOptionEnumValues)
                 {
@@ -1025,6 +1032,14 @@ private static string GetProxyAttributeData(Attribute attrib, string prefix)
                 return result;
             }
 
+            ValidateNotNullOrWhiteSpaceAttribute notNullWhiteSpaceAttrib = attrib as ValidateNotNullOrWhiteSpaceAttribute;
+            if (notNullWhiteSpaceAttrib != null)
+            {
+                result = string.Format(CultureInfo.InvariantCulture,
+                    ValidateNotNullOrWhiteSpaceFormat, prefix);
+                return result;
+            }
+
             ValidateSetAttribute setAttrib = attrib as ValidateSetAttribute;
             if (setAttrib != null)
             {
diff --git a/src/System.Management.Automation/engine/TypeTable.cs b/src/System.Management.Automation/engine/TypeTable.cs
index 0e407d57ac4..a0eead95e23 100644
--- a/src/System.Management.Automation/engine/TypeTable.cs
+++ b/src/System.Management.Automation/engine/TypeTable.cs
@@ -139,17 +139,17 @@ private void UnknownNode(string node, string expectedNodes)
             else
             {
                 _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.UnknownNode, _reader.LocalName, expectedNodes);
-                SkipUntillNodeEnd(_reader.LocalName);
+                SkipUntilNodeEnd(_reader.LocalName);
             }
         }
 
-        private void SkipUntillNodeEnd(string nodeName)
+        private void SkipUntilNodeEnd(string nodeName)
         {
             while (_reader.Read())
             {
                 if (_reader.IsStartElement() && _reader.LocalName.Equals(nodeName))
                 {
-                    SkipUntillNodeEnd(nodeName);
+                    SkipUntilNodeEnd(nodeName);
                 }
                 else if ((_reader.NodeType == XmlNodeType.EndElement) && _reader.LocalName.Equals(nodeName))
                 {
@@ -459,7 +459,7 @@ private TypeData Read_Type()
                 {
                     if (m.Name.Equals(TypeTable.DefaultDisplayProperty, StringComparison.OrdinalIgnoreCase))
                     {
-                        CheckStandardNote(m, typeData, (t, v) => t.DefaultDisplayProperty = v, Converter<string>);
+                        CheckStandardNote(m, typeData, static (t, v) => t.DefaultDisplayProperty = v, Converter<string>);
                     }
                     else if (m.Name.Equals(TypeTable.DefaultDisplayPropertySet, StringComparison.OrdinalIgnoreCase))
                     {
@@ -477,11 +477,11 @@ private TypeData Read_Type()
                     }
                     else if (m.Name.Equals(TypeTable.SerializationMethodNode, StringComparison.OrdinalIgnoreCase))
                     {
-                        CheckStandardNote(m, typeData, (t, v) => t.SerializationMethod = v, Converter<string>);
+                        CheckStandardNote(m, typeData, static (t, v) => t.SerializationMethod = v, Converter<string>);
                     }
                     else if (m.Name.Equals(TypeTable.SerializationDepth, StringComparison.OrdinalIgnoreCase))
                     {
-                        CheckStandardNote(m, typeData, (t, v) => t.SerializationDepth = v, Converter<uint>);
+                        CheckStandardNote(m, typeData, static (t, v) => t.SerializationDepth = v, Converter<uint>);
                     }
                     else if (m.Name.Equals(TypeTable.StringSerializationSource, StringComparison.OrdinalIgnoreCase))
                     {
@@ -504,11 +504,11 @@ private TypeData Read_Type()
                     }
                     else if (m.Name.Equals(TypeTable.InheritPropertySerializationSet, StringComparison.OrdinalIgnoreCase))
                     {
-                        CheckStandardNote(m, typeData, (t, v) => t.InheritPropertySerializationSet = v, BoolConverter);
+                        CheckStandardNote(m, typeData, static (t, v) => t.InheritPropertySerializationSet = v, BoolConverter);
                     }
                     else if (m.Name.Equals(TypeTable.TargetTypeForDeserialization, StringComparison.OrdinalIgnoreCase))
                     {
-                        CheckStandardNote(m, typeData, (t, v) => t.TargetTypeForDeserialization = v, Converter<Type>);
+                        CheckStandardNote(m, typeData, static (t, v) => t.TargetTypeForDeserialization = v, Converter<Type>);
                     }
                     else
                     {
@@ -771,10 +771,7 @@ private MemberSetData Read_MemberSet()
             }
 
             // Somewhat pointlessly (backcompat), we allow a missing Member node
-            if (members == null)
-            {
-                members = new Collection<TypeMemberData>();
-            }
+            members ??= new Collection<TypeMemberData>();
 
             if (_context.errors.Count != errorCount)
             {
@@ -841,10 +838,7 @@ private PropertySetData Read_PropertySet()
                                     {
                                         if ((object)_reader.LocalName == (object)_idName)
                                         {
-                                            if (referencedProperties == null)
-                                            {
-                                                referencedProperties = new List<string>(8);
-                                            }
+                                            referencedProperties ??= new List<string>(8);
 
                                             referencedProperties.Add(ReadElementString(_idName));
                                         }
@@ -1683,7 +1677,7 @@ public ConsolidatedString(IEnumerable<string> strings)
 
         internal static readonly IEqualityComparer<ConsolidatedString> EqualityComparer = new ConsolidatedStringEqualityComparer();
 
-        private class ConsolidatedStringEqualityComparer : IEqualityComparer<ConsolidatedString>
+        private sealed class ConsolidatedStringEqualityComparer : IEqualityComparer<ConsolidatedString>
         {
             bool IEqualityComparer<ConsolidatedString>.Equals(ConsolidatedString x, ConsolidatedString y)
             {
@@ -1747,9 +1741,8 @@ internal void AddError(string typeName, int errorLineNumber, string resourceStri
 
     /// <summary>
     /// This exception is used by TypeTable constructor to indicate errors
-    /// occured during construction time.
+    /// occurred during construction time.
     /// </summary>
-    [Serializable]
     public class TypeTableLoadException : RuntimeException
     {
         private readonly Collection<string> _errors;
@@ -1796,7 +1789,7 @@ public TypeTableLoadException(string message, Exception innerException)
         /// time.
         /// </summary>
         /// <param name="loadErrors">
-        /// The errors that occured
+        /// The errors that occurred
         /// </param>
         internal TypeTableLoadException(ConcurrentBag<string> loadErrors)
             : base(TypesXmlStrings.TypeTableLoadErrors)
@@ -1811,56 +1804,14 @@ internal TypeTableLoadException(ConcurrentBag<string> loadErrors)
         /// </summary>
         /// <param name="info"></param>
         /// <param name="context"></param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected TypeTableLoadException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            int errorCount = info.GetInt32("ErrorCount");
-            if (errorCount > 0)
-            {
-                _errors = new Collection<string>();
-                for (int index = 0; index < errorCount; index++)
-                {
-                    string key = string.Format(CultureInfo.InvariantCulture, "Error{0}", index);
-                    _errors.Add(info.GetString(key));
-                }
-            }
+            throw new NotSupportedException();
         }
 
         #endregion Constructors
 
-        /// <summary>
-        /// Serializes the exception data.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-
-            // If there are simple fields, serialize them with info.AddValue
-            if (_errors != null)
-            {
-                int errorCount = _errors.Count;
-                info.AddValue("ErrorCount", errorCount);
-
-                for (int index = 0; index < errorCount; index++)
-                {
-                    string key = string.Format(CultureInfo.InvariantCulture, "Error{0}", index);
-                    info.AddValue(key, _errors[index]);
-                }
-            }
-        }
-
         /// <summary>
         /// Set the default ErrorRecord.
         /// </summary>
@@ -3042,7 +2993,7 @@ private static bool GetCheckMemberType(ConcurrentBag<string> errors, string type
         /// <summary>
         /// Issue appropriate errors and remove members as necessary if:
         ///     - The serialization settings do not fall into one of the combinations of the table below
-        ///     - If the serialization settings notes' values cannot be converted to the propper type
+        ///     - If the serialization settings notes' values cannot be converted to the proper type
         ///     - If serialization settings members are of the wrong member type
         ///     - DefaultDisplayPropertySet is not an PSPropertySet
         ///     - DefaultDisplayProperty is not an PSPropertyInfo
@@ -3724,10 +3675,7 @@ private void ProcessTypeDataToAdd(ConcurrentBag<string> errors, TypeData typeDat
 
             if (hasStandardMembers)
             {
-                if (typeMembers == null)
-                {
-                    typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1));
-                }
+                typeMembers ??= _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1));
 
                 ProcessStandardMembers(errors, typeName, typeData.StandardMembers, propertySets, typeMembers, typeData.IsOverride);
             }
@@ -3937,8 +3885,7 @@ internal TypeTable(IEnumerable<string> typeFiles, AuthorizationManager authoriza
                     throw PSTraceSource.NewArgumentException("typeFile", TypesXmlStrings.TypeFileNotRooted, typefile);
                 }
 
-                bool unused;
-                Initialize(string.Empty, typefile, errors, authorizationManager, host, out unused);
+                Initialize(string.Empty, typefile, errors, authorizationManager, host, out _);
                 _typeFileList.Add(typefile);
             }
 
@@ -3975,7 +3922,7 @@ internal Collection<string> GetSpecificProperties(ConsolidatedString types)
                     }
 
                     PSMemberSet settings = typeMembers[PSStandardMembers] as PSMemberSet;
-                    if (!(settings?.Members[PropertySerializationSet] is PSPropertySet typeProperties))
+                    if (settings?.Members[PropertySerializationSet] is not PSPropertySet typeProperties)
                     {
                         continue;
                     }
@@ -4151,7 +4098,7 @@ internal PSObject.AdapterSet GetTypeAdapter(Type type)
 #endif
         }
 
-        private TypeMemberData GetTypeMemberDataFromPSMemberInfo(PSMemberInfo member)
+        private static TypeMemberData GetTypeMemberDataFromPSMemberInfo(PSMemberInfo member)
         {
             var note = member as PSNoteProperty;
             if (note != null)
@@ -4218,7 +4165,7 @@ private TypeMemberData GetTypeMemberDataFromPSMemberInfo(PSMemberInfo member)
         /// </summary>
         /// <param name="member"></param>
         /// <param name="typeData"></param>
-        private void LoadMembersToTypeData(PSMemberInfo member, TypeData typeData)
+        private static void LoadMembersToTypeData(PSMemberInfo member, TypeData typeData)
         {
             Dbg.Assert(member != null, "caller should guarantee that member is not null");
             Dbg.Assert(typeData != null, "caller should guarantee that typeData is not null");
@@ -4254,7 +4201,7 @@ private static T GetParameterType<T>(object sourceValue)
         /// <summary>
         /// Load the standard members into the passed-in TypeData.
         /// </summary>
-        private void LoadStandardMembersToTypeData(PSMemberSet memberSet, TypeData typeData)
+        private static void LoadStandardMembersToTypeData(PSMemberSet memberSet, TypeData typeData)
         {
             foreach (PSMemberInfo member in memberSet.InternalMembers)
             {
@@ -4742,15 +4689,9 @@ internal void Update(
             PSHost host,
             out bool failToLoadFile)
         {
-            if (filePath == null)
-            {
-                throw new ArgumentNullException(nameof(filePath));
-            }
+            ArgumentNullException.ThrowIfNull(filePath);
 
-            if (errors == null)
-            {
-                throw new ArgumentNullException(nameof(errors));
-            }
+            ArgumentNullException.ThrowIfNull(errors);
 
             if (isShared)
             {
@@ -4820,10 +4761,9 @@ internal void Update(
             ConcurrentBag<string> errors,
             bool isRemove)
         {
-            if (type == null)
-                throw new ArgumentNullException(nameof(type));
-            if (errors == null)
-                throw new ArgumentNullException(nameof(errors));
+            ArgumentNullException.ThrowIfNull(type);
+
+            ArgumentNullException.ThrowIfNull(errors);
 
             if (isShared)
             {
diff --git a/src/System.Management.Automation/engine/TypeTable_Types_Ps1Xml.cs b/src/System.Management.Automation/engine/TypeTable_Types_Ps1Xml.cs
index 5a7133b7cd3..26e3621c240 100644
--- a/src/System.Management.Automation/engine/TypeTable_Types_Ps1Xml.cs
+++ b/src/System.Management.Automation/engine/TypeTable_Types_Ps1Xml.cs
@@ -17,10 +17,7 @@ public sealed partial class TypeTable
 
         private static Func<string, PSMemberInfoInternalCollection<PSMemberInfo>> GetValueFactoryBasedOnInitCapacity(int capacity)
         {
-            if (capacity <= 0)
-            {
-                throw new ArgumentOutOfRangeException(nameof(capacity));
-            }
+            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(capacity);
 
             if (capacity > ValueFactoryCacheCount)
             {
@@ -568,9 +565,7 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
                 typeName,
                 new PSScriptProperty(
                     @"DisplayName",
-                    GetScriptBlock(@"if ($this.Name.IndexOf('-') -lt 0)
-          {
-          if ($null -ne $this.ResolvedCommand)
+                    GetScriptBlock(@"if ($null -ne $this.ResolvedCommand)
           {
           $this.Name + "" -> "" + $this.ResolvedCommand.Name
           }
@@ -578,11 +573,7 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
           {
           $this.Name + "" -> "" + $this.Definition
           }
-          }
-          else
-          {
-          $this.Name
-          }"),
+          "),
                     setterScript: null,
                     shouldCloneOnAccess: true),
                 typeMembers,
@@ -639,7 +630,7 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
             #region System.IO.DirectoryInfo
 
             typeName = @"System.IO.DirectoryInfo";
-            typeMembers = _extendedMembers.GetOrAdd(typeName, key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 9));
+            typeMembers = _extendedMembers.GetOrAdd(typeName, static key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 9));
 
             // Process regular members.
             newMembers.Add(@"Mode");
@@ -676,17 +667,25 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
                 typeMembers,
                 isOverride: false);
 
-            newMembers.Add(@"Target");
+            newMembers.Add(@"ResolvedTarget");
             AddMember(
                 errors,
                 typeName,
                 new PSCodeProperty(
-                    @"Target",
-                    GetMethodInfo(typeof(Microsoft.PowerShell.Commands.InternalSymbolicLinkLinkCodeMethods), @"GetTarget"),
+                    @"ResolvedTarget",
+                    GetMethodInfo(typeof(Microsoft.PowerShell.Commands.InternalSymbolicLinkLinkCodeMethods), @"ResolvedTarget"),
                     setterCodeReference: null),
                 typeMembers,
                 isOverride: false);
 
+            newMembers.Add(@"Target");
+            AddMember(
+                errors,
+                typeName,
+                new PSAliasProperty(@"Target", @"LinkTarget", conversionType: null),
+                typeMembers,
+                isOverride: false);
+
             newMembers.Add(@"LinkType");
             AddMember(
                 errors,
@@ -755,7 +754,7 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
             #region System.IO.FileInfo
 
             typeName = @"System.IO.FileInfo";
-            typeMembers = _extendedMembers.GetOrAdd(typeName, key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 10));
+            typeMembers = _extendedMembers.GetOrAdd(typeName, static key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 10));
 
             // Process regular members.
             newMembers.Add(@"Mode");
@@ -804,17 +803,25 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
                 typeMembers,
                 isOverride: false);
 
-            newMembers.Add(@"Target");
+            newMembers.Add(@"ResolvedTarget");
             AddMember(
                 errors,
                 typeName,
                 new PSCodeProperty(
-                    @"Target",
-                    GetMethodInfo(typeof(Microsoft.PowerShell.Commands.InternalSymbolicLinkLinkCodeMethods), @"GetTarget"),
+                    @"ResolvedTarget",
+                    GetMethodInfo(typeof(Microsoft.PowerShell.Commands.InternalSymbolicLinkLinkCodeMethods), @"ResolvedTarget"),
                     setterCodeReference: null),
                 typeMembers,
                 isOverride: false);
 
+            newMembers.Add(@"Target");
+            AddMember(
+                errors,
+                typeName,
+                new PSAliasProperty(@"Target", @"LinkTarget", conversionType: null),
+                typeMembers,
+                isOverride: false);
+
             newMembers.Add(@"LinkType");
             AddMember(
                 errors,
@@ -1047,7 +1054,7 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
             #region System.Diagnostics.Process
 
             typeName = @"System.Diagnostics.Process";
-            typeMembers = _extendedMembers.GetOrAdd(typeName, key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 19));
+            typeMembers = _extendedMembers.GetOrAdd(typeName, static key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 19));
 
             // Process regular members.
             newMembers.Add(@"PSConfiguration");
@@ -1148,7 +1155,8 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
                         if ($IsWindows) {
                             (Get-CimInstance Win32_Process -Filter ""ProcessId = $($this.Id)"").CommandLine
                         } elseif ($IsLinux) {
-                            Get-Content -LiteralPath ""/proc/$($this.Id)/cmdline""
+                            $rawCmd = Get-Content -LiteralPath ""/proc/$($this.Id)/cmdline""
+                            $rawCmd.Substring(0, $rawCmd.Length - 1) -replace ""`0"", "" ""
                         }
                     "),
                     setterScript: null,
@@ -4065,152 +4073,6 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
 
             #endregion System.Management.ManagementObject
 
-            #region System.Security.AccessControl.ObjectSecurity
-
-            typeName = @"System.Security.AccessControl.ObjectSecurity";
-            typeMembers = _extendedMembers.GetOrAdd(typeName, key => new PSMemberInfoInternalCollection<PSMemberInfo>(capacity: 7));
-            Type securityDescriptorCommandsBaseType = TypeResolver.ResolveType("Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase", exception: out _);
-
-            // Process regular members.
-            newMembers.Add(@"Path");
-            AddMember(
-                errors,
-                typeName,
-                new PSCodeProperty(
-                    @"Path",
-                    GetMethodInfo(securityDescriptorCommandsBaseType, @"GetPath"),
-                    setterCodeReference: null),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"Owner");
-            AddMember(
-                errors,
-                typeName,
-                new PSCodeProperty(
-                    @"Owner",
-                    GetMethodInfo(securityDescriptorCommandsBaseType, @"GetOwner"),
-                    setterCodeReference: null),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"Group");
-            AddMember(
-                errors,
-                typeName,
-                new PSCodeProperty(
-                    @"Group",
-                    GetMethodInfo(securityDescriptorCommandsBaseType, @"GetGroup"),
-                    setterCodeReference: null),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"Access");
-            AddMember(
-                errors,
-                typeName,
-                new PSCodeProperty(
-                    @"Access",
-                    GetMethodInfo(securityDescriptorCommandsBaseType, @"GetAccess"),
-                    setterCodeReference: null),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"Sddl");
-            AddMember(
-                errors,
-                typeName,
-                new PSCodeProperty(
-                    @"Sddl",
-                    GetMethodInfo(securityDescriptorCommandsBaseType, @"GetSddl"),
-                    setterCodeReference: null),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"AccessToString");
-            AddMember(
-                errors,
-                typeName,
-                new PSScriptProperty(
-                    @"AccessToString",
-                    GetScriptBlock(@"$toString = """";
-          $first = $true;
-          if ( ! $this.Access ) { return """" }
-
-          foreach($ace in $this.Access)
-          {
-          if($first)
-          {
-          $first = $false;
-          }
-          else
-          {
-          $tostring += ""`n"";
-          }
-
-          $toString += $ace.IdentityReference.ToString();
-          $toString += "" "";
-          $toString += $ace.AccessControlType.ToString();
-          $toString += ""  "";
-          if($ace -is [System.Security.AccessControl.FileSystemAccessRule])
-          {
-          $toString += $ace.FileSystemRights.ToString();
-          }
-          elseif($ace -is  [System.Security.AccessControl.RegistryAccessRule])
-          {
-          $toString += $ace.RegistryRights.ToString();
-          }
-          }
-
-          return $toString;"),
-                    setterScript: null,
-                    shouldCloneOnAccess: true),
-                typeMembers,
-                isOverride: false);
-
-            newMembers.Add(@"AuditToString");
-            AddMember(
-                errors,
-                typeName,
-                new PSScriptProperty(
-                    @"AuditToString",
-                    GetScriptBlock(@"$toString = """";
-          $first = $true;
-          if ( ! (& { Set-StrictMode -Version 1; $this.audit }) ) { return """" }
-
-          foreach($ace in (& { Set-StrictMode -Version 1; $this.audit }))
-          {
-          if($first)
-          {
-          $first = $false;
-          }
-          else
-          {
-          $tostring += ""`n"";
-          }
-
-          $toString += $ace.IdentityReference.ToString();
-          $toString += "" "";
-          $toString += $ace.AuditFlags.ToString();
-          $toString += ""  "";
-          if($ace -is [System.Security.AccessControl.FileSystemAuditRule])
-          {
-          $toString += $ace.FileSystemRights.ToString();
-          }
-          elseif($ace -is [System.Security.AccessControl.RegistryAuditRule])
-          {
-          $toString += $ace.RegistryRights.ToString();
-          }
-          }
-
-          return $toString;"),
-                    setterScript: null,
-                    shouldCloneOnAccess: true),
-                typeMembers,
-                isOverride: false);
-
-            #endregion System.Security.AccessControl.ObjectSecurity
-
             #region Microsoft.PowerShell.Commands.HistoryInfo
 
             typeName = @"Microsoft.PowerShell.Commands.HistoryInfo";
@@ -9227,45 +9089,42 @@ private void Process_Types_Ps1Xml(string filePath, ConcurrentBag<string> errors)
 #if UNIX
             #region UnixStat
 
-            if (ExperimentalFeature.IsEnabled("PSUnixFileStat"))
-            {
-                typeName = @"System.IO.FileSystemInfo";
-                typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1));
-
-                // Where we have a method to invoke below, first check to be sure that the object is present
-                // to avoid null reference issues
-                newMembers.Add(@"UnixMode");
-                AddMember(
-                    errors,
-                    typeName,
-                    new PSScriptProperty(@"UnixMode", GetScriptBlock(@"if ($this.UnixStat) { $this.UnixStat.GetModeString() }")),
-                    typeMembers,
-                    isOverride: false);
-
-                newMembers.Add(@"User");
-                AddMember(
-                    errors,
-                    typeName,
-                    new PSScriptProperty(@"User", GetScriptBlock(@" if ($this.UnixStat) { $this.UnixStat.GetUserName() } ")),
-                    typeMembers,
-                    isOverride: false);
-
-                newMembers.Add(@"Group");
-                AddMember(
-                    errors,
-                    typeName,
-                    new PSScriptProperty(@"Group", GetScriptBlock(@" if ($this.UnixStat) { $this.UnixStat.GetGroupName() } ")),
-                    typeMembers,
-                    isOverride: false);
-
-                newMembers.Add(@"Size");
-                AddMember(
-                    errors,
-                    typeName,
-                    new PSScriptProperty(@"Size", GetScriptBlock(@"$this.UnixStat.Size")),
-                    typeMembers,
-                    isOverride: false);
-            }
+            typeName = @"System.IO.FileSystemInfo";
+            typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1));
+
+            // Where we have a method to invoke below, first check to be sure that the object is present
+            // to avoid null reference issues
+            newMembers.Add(@"UnixMode");
+            AddMember(
+                errors,
+                typeName,
+                new PSScriptProperty(@"UnixMode", GetScriptBlock(@"if ($this.UnixStat) { $this.UnixStat.GetModeString() }")),
+                typeMembers,
+                isOverride: false);
+
+            newMembers.Add(@"User");
+            AddMember(
+                errors,
+                typeName,
+                new PSScriptProperty(@"User", GetScriptBlock(@" if ($this.UnixStat) { $this.UnixStat.GetUserName() } ")),
+                typeMembers,
+                isOverride: false);
+
+            newMembers.Add(@"Group");
+            AddMember(
+                errors,
+                typeName,
+                new PSScriptProperty(@"Group", GetScriptBlock(@" if ($this.UnixStat) { $this.UnixStat.GetGroupName() } ")),
+                typeMembers,
+                isOverride: false);
+
+            newMembers.Add(@"Size");
+            AddMember(
+                errors,
+                typeName,
+                new PSScriptProperty(@"Size", GetScriptBlock(@"$this.UnixStat.Size")),
+                typeMembers,
+                isOverride: false);
 
             #endregion
 #endif
diff --git a/src/System.Management.Automation/engine/Utils.cs b/src/System.Management.Automation/engine/Utils.cs
index 94957ced8b8..0de9fe0d5cc 100644
--- a/src/System.Management.Automation/engine/Utils.cs
+++ b/src/System.Management.Automation/engine/Utils.cs
@@ -5,21 +5,16 @@
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.IO;
 using System.Linq;
 using System.Management.Automation.Configuration;
 using System.Management.Automation.Internal;
-using System.Management.Automation.Language;
 using System.Management.Automation.Remoting;
-using System.Management.Automation.Runspaces;
 using System.Management.Automation.Security;
 using System.Numerics;
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Security;
 #if !UNIX
@@ -29,7 +24,6 @@
 using System.Threading;
 using Microsoft.PowerShell.Commands;
 using Microsoft.Win32;
-using Microsoft.Win32.SafeHandles;
 
 using TypeTable = System.Management.Automation.Runspaces.TypeTable;
 
@@ -307,9 +301,9 @@ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int
         /// <summary>
         /// Helper fn to check byte[] arg for null.
         /// </summary>
-        ///<param name="arg"> arg to check </param>
-        ///<param name="argName"> name of the arg </param>
-        ///<returns> Does not return a value.</returns>
+        /// <param name="arg"> arg to check </param>
+        /// <param name="argName"> name of the arg </param>
+        /// <returns> Does not return a value.</returns>
         internal static void CheckKeyArg(byte[] arg, string argName)
         {
             if (arg == null)
@@ -334,9 +328,9 @@ internal static void CheckKeyArg(byte[] arg, string argName)
         /// Helper fn to check arg for empty or null.
         /// Throws ArgumentNullException on either condition.
         /// </summary>
-        ///<param name="arg"> arg to check </param>
-        ///<param name="argName"> name of the arg </param>
-        ///<returns> Does not return a value.</returns>
+        /// <param name="arg"> arg to check </param>
+        /// <param name="argName"> name of the arg </param>
+        /// <returns> Does not return a value.</returns>
         internal static void CheckArgForNullOrEmpty(string arg, string argName)
         {
             if (arg == null)
@@ -353,9 +347,9 @@ internal static void CheckArgForNullOrEmpty(string arg, string argName)
         /// Helper fn to check arg for null.
         /// Throws ArgumentNullException on either condition.
         /// </summary>
-        ///<param name="arg"> arg to check </param>
-        ///<param name="argName"> name of the arg </param>
-        ///<returns> Does not return a value.</returns>
+        /// <param name="arg"> arg to check </param>
+        /// <param name="argName"> name of the arg </param>
+        /// <returns> Does not return a value.</returns>
         internal static void CheckArgForNull(object arg, string argName)
         {
             if (arg == null)
@@ -367,9 +361,9 @@ internal static void CheckArgForNull(object arg, string argName)
         /// <summary>
         /// Helper fn to check arg for null.
         /// </summary>
-        ///<param name="arg"> arg to check </param>
-        ///<param name="argName"> name of the arg </param>
-        ///<returns> Does not return a value.</returns>
+        /// <param name="arg"> arg to check </param>
+        /// <param name="argName"> name of the arg </param>
+        /// <returns> Does not return a value.</returns>
         internal static void CheckSecureStringArg(SecureString arg, string argName)
         {
             if (arg == null)
@@ -378,7 +372,6 @@ internal static void CheckSecureStringArg(SecureString arg, string argName)
             }
         }
 
-        [ArchitectureSensitive]
         internal static string GetStringFromSecureString(SecureString ss)
         {
             IntPtr p = IntPtr.Zero;
@@ -488,9 +481,16 @@ internal static string GetWindowsPowerShellVersionFromRegistry()
 
         internal static string GetApplicationBase(string shellId)
         {
-            // Use the location of SMA.dll as the application base.
-            Assembly assembly = typeof(PSObject).Assembly;
-            return Path.GetDirectoryName(assembly.Location);
+            // Use the location of SMA.dll as the application base if it exists,
+            // otherwise, use the base directory from `AppContext`.
+            var baseDirectory = Path.GetDirectoryName(typeof(PSObject).Assembly.Location);
+            if (string.IsNullOrEmpty(baseDirectory))
+            {
+                // Need to remove any trailing directory separator characters
+                baseDirectory = AppContext.BaseDirectory.TrimEnd(Path.DirectorySeparatorChar);
+            }
+
+            return baseDirectory;
         }
 
         private static string[] s_productFolderDirectories;
@@ -576,10 +576,7 @@ internal static bool IsWinPEHost()
             catch (ObjectDisposedException) { }
             finally
             {
-                if (winPEKey != null)
-                {
-                    winPEKey.Dispose();
-                }
+                winPEKey?.Dispose();
             }
 #endif
             return false;
@@ -645,41 +642,6 @@ internal static Version StringToVersion(string versionString)
             return null;
         }
 
-        /// <summary>
-        /// Checks whether current monad session supports version specified
-        /// by ver.
-        /// </summary>
-        /// <param name="ver">Version to check.</param>
-        /// <returns>True if supported, false otherwise.</returns>
-        internal static bool IsPSVersionSupported(string ver)
-        {
-            // Convert version to supported format ie., x.x
-            Version inputVersion = StringToVersion(ver);
-            return IsPSVersionSupported(inputVersion);
-        }
-
-        /// <summary>
-        /// Checks whether current monad session supports version specified
-        /// by checkVersion.
-        /// </summary>
-        /// <param name="checkVersion">Version to check.</param>
-        /// <returns>True if supported, false otherwise.</returns>
-        internal static bool IsPSVersionSupported(Version checkVersion)
-        {
-            if (checkVersion == null)
-            {
-                return false;
-            }
-
-            foreach (Version compatibleVersion in PSVersionInfo.PSCompatibleVersions)
-            {
-                if (checkVersion.Major == compatibleVersion.Major && checkVersion.Minor <= compatibleVersion.Minor)
-                    return true;
-            }
-
-            return false;
-        }
-
         /// <summary>
         /// Checks whether current PowerShell session supports edition specified
         /// by checkEdition.
@@ -688,7 +650,7 @@ internal static bool IsPSVersionSupported(Version checkVersion)
         /// <returns>True if supported, false otherwise.</returns>
         internal static bool IsPSEditionSupported(string checkEdition)
         {
-            return PSVersionInfo.PSEdition.Equals(checkEdition, StringComparison.OrdinalIgnoreCase);
+            return PSVersionInfo.PSEditionValue.Equals(checkEdition, StringComparison.OrdinalIgnoreCase);
         }
 
         /// <summary>
@@ -698,7 +660,7 @@ internal static bool IsPSEditionSupported(string checkEdition)
         /// <returns>True if the edition is supported by this runtime, false otherwise.</returns>
         internal static bool IsPSEditionSupported(IEnumerable<string> editions)
         {
-            string currentPSEdition = PSVersionInfo.PSEdition;
+            string currentPSEdition = PSVersionInfo.PSEditionValue;
             foreach (string edition in editions)
             {
                 if (currentPSEdition.Equals(edition, StringComparison.OrdinalIgnoreCase))
@@ -1069,10 +1031,7 @@ internal static void EnsureModuleLoaded(string module, ExecutionContext context)
                     finally
                     {
                         context.AutoLoadingModuleInProgress.Remove(module);
-                        if (ps != null)
-                        {
-                            ps.Dispose();
-                        }
+                        ps?.Dispose();
                     }
                 }
             }
@@ -1129,10 +1088,7 @@ internal static List<PSModuleInfo> GetModules(string module, ExecutionContext co
             }
             finally
             {
-                if (ps != null)
-                {
-                    ps.Dispose();
-                }
+                ps?.Dispose();
             }
 
             return result;
@@ -1190,10 +1146,7 @@ internal static List<PSModuleInfo> GetModules(ModuleSpecification fullyQualified
             }
             finally
             {
-                if (ps != null)
-                {
-                    ps.Dispose();
-                }
+                ps?.Dispose();
             }
 
             return result;
@@ -1283,7 +1236,7 @@ internal static bool IsReservedDeviceName(string destinationPath)
             return false;
         }
 
-        internal static bool PathIsUnc(string path)
+        internal static bool PathIsUnc(string path, bool networkOnly = false)
         {
 #if UNIX
             return false;
@@ -1293,8 +1246,8 @@ internal static bool PathIsUnc(string path)
                 return false;
             }
 
-            // handle special cases like \\wsl$\ubuntu which isn't a UNC path, but we can say it is so the filesystemprovider can use it
-            if (path.StartsWith(WslRootPath, StringComparison.OrdinalIgnoreCase))
+            // handle special cases like '\\wsl$\ubuntu', '\\?\', and '\\.\pipe\' which aren't a UNC path, but we can say it is so the filesystemprovider can use it
+            if (!networkOnly && (path.StartsWith(WslRootPath, StringComparison.OrdinalIgnoreCase) || PathIsDevicePath(path)))
             {
                 return true;
             }
@@ -1304,6 +1257,16 @@ internal static bool PathIsUnc(string path)
 #endif
         }
 
+        internal static bool PathIsDevicePath(string path)
+        {
+#if UNIX
+            return false;
+#else
+            // device paths can be network paths, we would need windows to parse it.
+            return path.StartsWith(@"\\.\") || path.StartsWith(@"\\?\") || path.StartsWith(@"\\;");
+#endif
+        }
+
         internal static readonly string PowerShellAssemblyStrongNameFormat =
             "{0}, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
 
@@ -1397,9 +1360,6 @@ internal static bool Succeeded(int hresult)
         //     Add-Member ScriptProperty Preamble { $this.GetEncoding().GetPreamble() -join "-" } -PassThru |
         //     Format-Table -Auto
 
-        internal static readonly UTF8Encoding utf8NoBom =
-            new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
-
 #if !UNIX
         /// <summary>
         /// Queues a CLR worker thread with impersonation of provided Windows identity.
@@ -1447,7 +1407,7 @@ private static void WorkItemCallback(object callBackArgs)
         /// <returns>Command name and as appropriate Module name in out parameter.</returns>
         internal static string ParseCommandName(string commandName, out string moduleName)
         {
-            var names = commandName.Split(Separators.Backslash, 2);
+            var names = commandName.Split('\\', 2);
             if (names.Length == 2)
             {
                 moduleName = names[0];
@@ -1474,22 +1434,8 @@ internal static class Separators
             internal static readonly char[] Backslash = new char[] { '\\' };
             internal static readonly char[] Directory = new char[] { '\\', '/' };
             internal static readonly char[] DirectoryOrDrive = new char[] { '\\', '/', ':' };
-
-            internal static readonly char[] Colon = new char[] { ':' };
-            internal static readonly char[] Dot = new char[] { '.' };
-            internal static readonly char[] Pipe = new char[] { '|' };
-            internal static readonly char[] Comma = new char[] { ',' };
-            internal static readonly char[] Semicolon = new char[] { ';' };
-            internal static readonly char[] StarOrQuestion = new char[] { '*', '?' };
-            internal static readonly char[] ColonOrBackslash = new char[] { '\\', ':' };
-            internal static readonly char[] PathSeparator = new char[] { Path.PathSeparator };
-
-            internal static readonly char[] QuoteChars = new char[] { '\'', '"' };
-            internal static readonly char[] Space = new char[] { ' ' };
-            internal static readonly char[] QuotesSpaceOrTab = new char[] { ' ', '\t', '\'', '"' };
             internal static readonly char[] SpaceOrTab = new char[] { ' ', '\t' };
-            internal static readonly char[] Newline = new char[] { '\n' };
-            internal static readonly char[] CrLf = new char[] { '\r', '\n' };
+            internal static readonly char[] StarOrQuestion = new char[] { '*', '?' };
 
             // (Copied from System.IO.Path so we can call TrimEnd in the same way that Directory.EnumerateFiles would on the search patterns).
             // Trim trailing white spaces, tabs etc but don't be aggressive in removing everything that has UnicodeCategory of trailing space.
@@ -1528,535 +1474,146 @@ internal static bool IsComObject(object obj)
         ///     NoLanguage          ->  NoLanguage.
         /// </summary>
         /// <param name="context">ExecutionContext.</param>
-        /// <returns>Previous language mode or null for no language mode change.</returns>
-        internal static PSLanguageMode? EnforceSystemLockDownLanguageMode(ExecutionContext context)
-        {
-            PSLanguageMode? oldMode = null;
-
-            if (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce)
-            {
-                switch (context.LanguageMode)
-                {
-                    case PSLanguageMode.FullLanguage:
-                        oldMode = context.LanguageMode;
-                        context.LanguageMode = PSLanguageMode.ConstrainedLanguage;
-                        break;
-
-                    case PSLanguageMode.RestrictedLanguage:
-                        oldMode = context.LanguageMode;
-                        context.LanguageMode = PSLanguageMode.NoLanguage;
-                        break;
-
-                    case PSLanguageMode.ConstrainedLanguage:
-                    case PSLanguageMode.NoLanguage:
-                        break;
-
-                    default:
-                        Diagnostics.Assert(false, "Unexpected PSLanguageMode");
-                        oldMode = context.LanguageMode;
-                        context.LanguageMode = PSLanguageMode.NoLanguage;
-                        break;
-                }
-            }
-
-            return oldMode;
-        }
-
-        #region Implicit Remoting Batching
-
-        // Commands allowed to run on target remote session along with implicit remote commands
-        private static readonly HashSet<string> AllowedCommands = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
-        {
-            "ForEach-Object",
-            "Measure-Command",
-            "Measure-Object",
-            "Sort-Object",
-            "Where-Object"
-        };
-
-        // Determines if the typed command invokes implicit remoting module proxy functions in such
-        // a way as to allow simple batching, to reduce round trips between client and server sessions.
-        // Requirements:
-        //  a. All commands must be implicit remoting module proxy commands targeted to the same remote session
-        //  b. Except for *allowed* commands that can be safely run on remote session rather than client session
-        //  c. Commands must be in a simple pipeline
-        internal static bool TryRunAsImplicitBatch(string command, Runspace runspace)
+        /// <returns>The current ExecutionContext language mode.</returns>
+        internal static PSLanguageMode EnforceSystemLockDownLanguageMode(ExecutionContext context)
         {
-            using (var ps = System.Management.Automation.PowerShell.Create())
+            switch (SystemPolicy.GetSystemLockdownPolicy())
             {
-                ps.Runspace = runspace;
-
-                try
-                {
-                    var scriptBlock = ScriptBlock.Create(command);
-                    if (!(scriptBlock.Ast is ScriptBlockAst scriptBlockAst))
-                    {
-                        return false;
-                    }
-
-                    // Make sure that this is a simple pipeline
-                    string errorId;
-                    string errorMsg;
-                    scriptBlockAst.GetSimplePipeline(true, out errorId, out errorMsg);
-                    if (errorId != null)
-                    {
-                        WriteVerbose(ps, ParserStrings.ImplicitRemotingPipelineBatchingNotASimplePipeline);
-                        return false;
-                    }
-
-                    // Run checker
-                    var checker = new PipelineForBatchingChecker { ScriptBeingConverted = scriptBlockAst };
-                    scriptBlockAst.InternalVisit(checker);
-
-                    // If this is just a single command, there is no point in batching it
-                    if (checker.Commands.Count < 2)
-                    {
-                        return false;
-                    }
-
-                    // We have a valid batching candidate
-
-                    // Check commands
-                    if (!TryGetCommandInfoList(ps, checker.Commands, out Collection<CommandInfo> cmdInfoList))
+                case SystemEnforcementMode.Enforce:
+                    switch (context.LanguageMode)
                     {
-                        return false;
-                    }
-
-                    // All command modules must be implicit remoting modules from the same PSSession
-                    var success = true;
-                    var psSessionId = Guid.Empty;
-                    foreach (var cmdInfo in cmdInfoList)
-                    {
-                        // Check for allowed command
-                        string cmdName = (cmdInfo is AliasInfo aliasInfo) ? aliasInfo.ReferencedCommand.Name : cmdInfo.Name;
-                        if (AllowedCommands.Contains(cmdName))
-                        {
-                            continue;
-                        }
+                        case PSLanguageMode.FullLanguage:
+                            context.LanguageMode = PSLanguageMode.ConstrainedLanguage;
+                            break;
 
-                        // Commands must be from implicit remoting module
-                        if (cmdInfo.Module == null || string.IsNullOrEmpty(cmdInfo.ModuleName))
-                        {
-                            WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, ParserStrings.ImplicitRemotingPipelineBatchingNotImplicitCommand, cmdInfo.Name));
-                            success = false;
+                        case PSLanguageMode.RestrictedLanguage:
+                            context.LanguageMode = PSLanguageMode.NoLanguage;
                             break;
-                        }
 
-                        // Commands must be from modules imported into the same remote session
-                        if (cmdInfo.Module.PrivateData is System.Collections.Hashtable privateData)
-                        {
-                            var sessionIdString = privateData["ImplicitSessionId"] as string;
-                            if (string.IsNullOrEmpty(sessionIdString))
-                            {
-                                WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, ParserStrings.ImplicitRemotingPipelineBatchingNotImplicitCommand, cmdInfo.Name));
-                                success = false;
-                                break;
-                            }
+                        case PSLanguageMode.ConstrainedLanguage:
+                        case PSLanguageMode.NoLanguage:
+                            break;
 
-                            var sessionId = new Guid(sessionIdString);
-                            if (psSessionId == Guid.Empty)
-                            {
-                                psSessionId = sessionId;
-                            }
-                            else if (psSessionId != sessionId)
-                            {
-                                WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, ParserStrings.ImplicitRemotingPipelineBatchingWrongSession, cmdInfo.Name));
-                                success = false;
-                                break;
-                            }
-                        }
-                        else
-                        {
-                            WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, ParserStrings.ImplicitRemotingPipelineBatchingNotImplicitCommand, cmdInfo.Name));
-                            success = false;
+                        default:
+                            Diagnostics.Assert(false, "Unexpected PSLanguageMode");
+                            context.LanguageMode = PSLanguageMode.NoLanguage;
                             break;
-                        }
                     }
+                    break;
 
-                    if (success)
+                case SystemEnforcementMode.Audit:
+                    switch (context.LanguageMode)
                     {
-                        //
-                        // Invoke command pipeline as entire pipeline on remote session
-                        //
-
-                        // Update script to declare variables via Using keyword
-                        if (checker.ValidVariables.Count > 0)
-                        {
-                            foreach (var variableName in checker.ValidVariables)
-                            {
-                                command = command.Replace(variableName, ("Using:" + variableName), StringComparison.OrdinalIgnoreCase);
-                            }
-
-                            scriptBlock = ScriptBlock.Create(command);
-                        }
-
-                        // Retrieve the PSSession runspace in which to run the batch script on
-                        ps.Commands.Clear();
-                        ps.Commands.AddCommand("Get-PSSession").AddParameter("InstanceId", psSessionId);
-                        var psSession = ps.Invoke<System.Management.Automation.Runspaces.PSSession>().FirstOrDefault();
-                        if (psSession == null || (ps.Streams.Error.Count > 0) || (psSession.Availability != RunspaceAvailability.Available))
-                        {
-                            WriteVerbose(ps, ParserStrings.ImplicitRemotingPipelineBatchingNoPSSession);
-                            return false;
-                        }
-
-                        WriteVerbose(ps, ParserStrings.ImplicitRemotingPipelineBatchingSuccess);
-
-                        // Create and invoke implicit remoting command pipeline
-                        ps.Commands.Clear();
-                        ps.AddCommand("Invoke-Command").AddParameter("Session", psSession).AddParameter("ScriptBlock", scriptBlock).AddParameter("HideComputerName", true)
-                            .AddCommand("Out-Default");
-                        foreach (var cmd in ps.Commands.Commands)
-                        {
-                            cmd.MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
-                        }
-
-                        try
-                        {
-                            ps.Invoke();
-                        }
-                        catch (Exception ex)
-                        {
-                            var errorRecord = new ErrorRecord(ex, "ImplicitRemotingBatchExecutionTerminatingError", ErrorCategory.InvalidOperation, null);
-
-                            ps.Commands.Clear();
-                            ps.AddCommand("Write-Error").AddParameter("InputObject", errorRecord).Invoke();
-                        }
-
-                        return true;
+                        case PSLanguageMode.FullLanguage:
+                            // Set to ConstrainedLanguage mode.  But no restrictions are applied in audit mode
+                            // and only audit messages will be emitted to logs.
+                            context.LanguageMode = PSLanguageMode.ConstrainedLanguage;
+                            break;
                     }
-                }
-                catch (ImplicitRemotingBatchingNotSupportedException ex)
-                {
-                    WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, "{0} : {1}", ex.Message, ex.ErrorId));
-                }
-                catch (Exception ex)
-                {
-                    WriteVerbose(ps, string.Format(CultureInfo.CurrentCulture, ParserStrings.ImplicitRemotingPipelineBatchingException, ex.Message));
-                }
+                    break;
             }
 
-            return false;
+            return context.LanguageMode;
         }
 
-        private static void WriteVerbose(PowerShell ps, string msg)
+        internal static string DisplayHumanReadableFileSize(long bytes)
         {
-            ps.Commands.Clear();
-            ps.AddCommand("Write-Verbose").AddParameter("Message", msg).Invoke();
+            return bytes switch
+            {
+                < 1024 and >= 0 => $"{bytes} Bytes",
+                < 1048576 and >= 1024 => $"{(bytes / 1024.0).ToString("0.0")} KB",
+                < 1073741824 and >= 1048576 => $"{(bytes / 1048576.0).ToString("0.0")} MB",
+                < 1099511627776 and >= 1073741824 => $"{(bytes / 1073741824.0).ToString("0.000")} GB",
+                < 1125899906842624 and >= 1099511627776 => $"{(bytes / 1099511627776.0).ToString("0.00000")} TB",
+                < 1152921504606847000 and >= 1125899906842624 => $"{(bytes / 1125899906842624.0).ToString("0.0000000")} PB",
+                >= 1152921504606847000 => $"{(bytes / 1152921504606847000.0).ToString("0.000000000")} EB",
+                _ => $"0 Bytes",
+            };
         }
 
-        private const string WhereObjectCommandAlias = "?";
-
-        private static bool TryGetCommandInfoList(PowerShell ps, HashSet<string> commandNames, out Collection<CommandInfo> cmdInfoList)
+        /// <summary>
+        /// Returns true if the current session is restricted (JEA or similar sessions)
+        /// </summary>
+        /// <param name="context">ExecutionContext.</param>
+        /// <returns>True if the session is restricted.</returns>
+        internal static bool IsSessionRestricted(ExecutionContext context)
         {
-            if (commandNames.Count == 0)
-            {
-                cmdInfoList = null;
-                return false;
-            }
-
-            bool specialCaseWhereCommandAlias = commandNames.Contains(WhereObjectCommandAlias);
-            if (specialCaseWhereCommandAlias)
-            {
-                commandNames.Remove(WhereObjectCommandAlias);
-            }
-
-            // Use Get-Command to collect CommandInfo from candidate commands, with correct precedence so
-            // that implicit remoting proxy commands will appear when available.
-            ps.Commands.Clear();
-            ps.Commands.AddCommand("Get-Command").AddParameter("Name", commandNames.ToArray());
-            cmdInfoList = ps.Invoke<CommandInfo>();
-            if (ps.Streams.Error.Count > 0)
+            CmdletInfo cmdletInfo = context.SessionState.InvokeCommand.GetCmdlet("Microsoft.PowerShell.Core\\Import-Module");
+            // if import-module is visible, then the session is not restricted,
+            // because the user can load arbitrary code.
+            if (cmdletInfo != null && cmdletInfo.Visibility == SessionStateEntryVisibility.Public)
             {
                 return false;
             }
-
-            // For special case '?' alias don't use Get-Command to retrieve command info, and instead
-            // use the GetCommand API.
-            if (specialCaseWhereCommandAlias)
-            {
-                var cmdInfo = ps.Runspace.ExecutionContext.SessionState.InvokeCommand.GetCommand(WhereObjectCommandAlias, CommandTypes.Alias);
-                if (cmdInfo == null)
-                {
-                    return false;
-                }
-
-                cmdInfoList.Add(cmdInfo);
-            }
-
             return true;
         }
 
-        internal static bool ShouldOutputPlainText(bool isHost, bool? supportsVirtualTerminal)
-        {
-            var outputRendering = OutputRendering.Ansi;
-
-            if (ExperimentalFeature.IsEnabled("PSAnsiRendering"))
-            {
-                if (supportsVirtualTerminal != false)
-                {
-                    switch (PSStyle.Instance.OutputRendering)
-                    {
-                        case OutputRendering.Automatic:
-                            outputRendering = OutputRendering.Ansi;
-                            break;
-                        case OutputRendering.Host:
-                            outputRendering = isHost ? OutputRendering.Ansi : OutputRendering.PlainText;
-                            break;
-                        default:
-                            outputRendering = PSStyle.Instance.OutputRendering;
-                            break;
-                    }
-                }
-            }
-
-            return outputRendering == OutputRendering.PlainText;
-        }
-
-        internal static string GetOutputString(string s, bool isHost, bool? supportsVirtualTerminal = null, bool isOutputRedirected = false)
+        /// <summary>
+        /// Determine whether the environment variable is set and how.
+        /// </summary>
+        /// <param name="name">The name of the environment variable.</param>
+        /// <param name="defaultValue">If the environment variable is not set, use this as the default value.</param>
+        /// <returns>A boolean representing the value of the environment variable.</returns>
+        internal static bool GetEnvironmentVariableAsBool(string name, bool defaultValue)
         {
-            if (ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+            var str = Environment.GetEnvironmentVariable(name);
+            if (string.IsNullOrEmpty(str))
             {
-                var sd = new ValueStringDecorated(s);
-
-                if (sd.IsDecorated)
-                {
-                    var outputRendering = OutputRendering.Ansi;
-                    if (InternalTestHooks.BypassOutputRedirectionCheck)
-                    {
-                        isOutputRedirected = false;
-                    }
-
-                    if (isOutputRedirected || ShouldOutputPlainText(isHost, supportsVirtualTerminal))
-                    {
-                        outputRendering = OutputRendering.PlainText;
-                    }
-
-                    s = sd.ToString(outputRendering);
-                }
+                return defaultValue;
             }
 
-            return s;
-        }
+            var boolStr = str.AsSpan();
 
-        internal enum FormatStyle
-        {
-            Reset,
-            FormatAccent,
-            ErrorAccent,
-            Error,
-            Warning,
-            Verbose,
-            Debug,
-        }
-
-        internal static string GetFormatStyleString(FormatStyle formatStyle)
-        {
-            // redirected console gets plaintext output to preserve existing behavior
-            if (!InternalTestHooks.BypassOutputRedirectionCheck &&
-                ((PSStyle.Instance.OutputRendering == OutputRendering.PlainText) ||
-                (formatStyle == FormatStyle.Error && Console.IsErrorRedirected) ||
-                (formatStyle != FormatStyle.Error && Console.IsOutputRedirected)))
+            if (boolStr.Length == 1)
             {
-                return string.Empty;
-            }
-
-            if (ExperimentalFeature.IsEnabled("PSAnsiRendering"))
-            {
-                PSStyle psstyle = PSStyle.Instance;                
-                switch (formatStyle)
+                if (boolStr[0] == '1')
                 {
-                    case FormatStyle.Reset:
-                        return psstyle.Reset;
-                    case FormatStyle.FormatAccent:
-                        return psstyle.Formatting.FormatAccent;
-                    case FormatStyle.ErrorAccent:
-                        return psstyle.Formatting.ErrorAccent;
-                    case FormatStyle.Error:
-                        return psstyle.Formatting.Error;
-                    case FormatStyle.Warning:
-                        return psstyle.Formatting.Warning;
-                    case FormatStyle.Verbose:
-                        return psstyle.Formatting.Verbose;
-                    case FormatStyle.Debug:
-                        return psstyle.Formatting.Debug;
-                    default:
-                        return string.Empty;
+                    return true;
                 }
-            }
-
-            return string.Empty;
-        }
-
-        #endregion
-    }
-
-    #region ImplicitRemotingBatching
-
-    // A visitor to walk an AST and validate that it is a candidate for implicit remoting batching.
-    // Based on ScriptBlockToPowerShellChecker.
-    internal class PipelineForBatchingChecker : AstVisitor
-    {
-        internal readonly HashSet<string> ValidVariables = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-        internal readonly HashSet<string> Commands = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
-
-        internal ScriptBlockAst ScriptBeingConverted { get; set; }
-
-        public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst)
-        {
-            if (!variableExpressionAst.VariablePath.IsAnyLocal())
-            {
-                ThrowError(
-                        new ImplicitRemotingBatchingNotSupportedException(
-                            "VariableTypeNotSupported"),
-                        variableExpressionAst);
-            }
-
-            if (variableExpressionAst.VariablePath.UnqualifiedPath != "_")
-            {
-                ValidVariables.Add(variableExpressionAst.VariablePath.UnqualifiedPath);
-            }
-
-            return AstVisitAction.Continue;
-        }
-
-        public override AstVisitAction VisitPipeline(PipelineAst pipelineAst)
-        {
-            if (pipelineAst.PipelineElements[0] is CommandExpressionAst)
-            {
-                // If the first element is a CommandExpression, this pipeline should be the value
-                // of a parameter. We want to avoid a scriptblock that contains only a pure expression.
-                // The check "pipelineAst.Parent.Parent == ScriptBeingConverted" guarantees we throw
-                // error on that kind of scriptblock.
 
-                // Disallow pure expressions at the "top" level, but allow them otherwise.
-                // We want to catch:
-                //     1 | echo
-                // But we don't want to error out on:
-                //     echo $(1)
-                // See the comment in VisitCommand on why it's safe to check Parent.Parent, we
-                // know that we have at least:
-                //     * a NamedBlockAst (the end block)
-                //     * a ScriptBlockAst (the ast we're comparing to)
-                if (pipelineAst.GetPureExpression() == null || pipelineAst.Parent.Parent == ScriptBeingConverted)
+                if (boolStr[0] == '0')
                 {
-                    ThrowError(
-                        new ImplicitRemotingBatchingNotSupportedException(
-                            "PipelineStartingWithExpressionNotSupported"),
-                        pipelineAst);
+                    return false;
                 }
             }
 
-            return AstVisitAction.Continue;
-        }
-
-        public override AstVisitAction VisitCommand(CommandAst commandAst)
-        {
-            if (commandAst.InvocationOperator == TokenKind.Dot)
+            if (boolStr.Length == 3 &&
+                (boolStr[0] == 'y' || boolStr[0] == 'Y') &&
+                (boolStr[1] == 'e' || boolStr[1] == 'E') &&
+                (boolStr[2] == 's' || boolStr[2] == 'S'))
             {
-                ThrowError(
-                    new ImplicitRemotingBatchingNotSupportedException(
-                        "DotSourcingNotSupported"),
-                    commandAst);
-            }
-
-            /*
-            // Up front checking ensures that we have a simple script block,
-            // so we can safely assume that the parents are:
-            //     * a PipelineAst
-            //     * a NamedBlockAst (the end block)
-            //     * a ScriptBlockAst (the ast we're comparing to)
-            // If that isn't the case, the conversion isn't allowed.  It
-            // is also safe to assume that we have at least 3 parents, a script block can't be simpler.
-            if (commandAst.Parent.Parent.Parent != ScriptBeingConverted)
-            {
-                ThrowError(
-                    new ImplicitRemotingBatchingNotSupportedException(
-                        "CantConvertWithCommandInvocations not supported"),
-                    commandAst);
+                return true;
             }
-            */
 
-            if (commandAst.CommandElements[0] is ScriptBlockExpressionAst)
+            if (boolStr.Length == 2 &&
+                (boolStr[0] == 'n' || boolStr[0] == 'N') &&
+                (boolStr[1] == 'o' || boolStr[1] == 'O'))
             {
-                ThrowError(
-                    new ImplicitRemotingBatchingNotSupportedException(
-                        "ScriptBlockInvocationNotSupported"),
-                    commandAst);
+                return false;
             }
 
-            var commandName = commandAst.GetCommandName();
-            if (commandName != null)
+            if (boolStr.Length == 4 &&
+                (boolStr[0] == 't' || boolStr[0] == 'T') &&
+                (boolStr[1] == 'r' || boolStr[1] == 'R') &&
+                (boolStr[2] == 'u' || boolStr[2] == 'U') &&
+                (boolStr[3] == 'e' || boolStr[3] == 'E'))
             {
-                Commands.Add(commandName);
+                return true;
             }
 
-            return AstVisitAction.Continue;
-        }
-
-        public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst)
-        {
-            if (redirectionAst.ToStream != RedirectionStream.Output)
+            if (boolStr.Length == 5 &&
+                (boolStr[0] == 'f' || boolStr[0] == 'F') &&
+                (boolStr[1] == 'a' || boolStr[1] == 'A') &&
+                (boolStr[2] == 'l' || boolStr[2] == 'L') &&
+                (boolStr[3] == 's' || boolStr[3] == 'S') &&
+                (boolStr[4] == 'e' || boolStr[4] == 'E'))
             {
-                ThrowError(
-                    new ImplicitRemotingBatchingNotSupportedException(
-                        "MergeRedirectionNotSupported"),
-                    redirectionAst);
+                return false;
             }
 
-            return AstVisitAction.Continue;
-        }
-
-        public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst)
-        {
-            ThrowError(
-                new ImplicitRemotingBatchingNotSupportedException(
-                    "FileRedirectionNotSupported"),
-                redirectionAst);
-
-            return AstVisitAction.Continue;
-        }
-
-        /*
-        public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
-        {
-            ThrowError(new ImplicitRemotingBatchingNotSupportedException(
-                           "ScriptBlocks not supported"),
-                       scriptBlockExpressionAst);
-
-            return AstVisitAction.SkipChildren;
-        }
-        */
-
-        public override AstVisitAction VisitUsingExpression(UsingExpressionAst usingExpressionAst)
-        {
-            // Using expressions are not expected in Implicit remoting commands.
-            ThrowError(new ImplicitRemotingBatchingNotSupportedException(
-                "UsingExpressionNotSupported"),
-                usingExpressionAst);
-
-            return AstVisitAction.SkipChildren;
-        }
-
-        internal static void ThrowError(ImplicitRemotingBatchingNotSupportedException ex, Ast ast)
-        {
-            InterpreterError.UpdateExceptionErrorRecordPosition(ex, ast.Extent);
-            throw ex;
-        }
-    }
-
-    internal class ImplicitRemotingBatchingNotSupportedException : Exception
-    {
-        internal string ErrorId { get; }
-
-        internal ImplicitRemotingBatchingNotSupportedException(string errorId) : base(
-            ParserStrings.ImplicitRemotingPipelineBatchingNotSupported)
-        {
-            ErrorId = errorId;
+            return defaultValue;
         }
     }
-
-    #endregion
 }
 
 namespace System.Management.Automation.Internal
@@ -2071,8 +1628,12 @@ public static class InternalTestHooks
         internal static bool BypassAppLockerPolicyCaching;
         internal static bool BypassOnlineHelpRetrieval;
         internal static bool ForcePromptForChoiceDefaultOption;
-        internal static bool BypassOutputRedirectionCheck;
         internal static bool NoPromptForPassword;
+        internal static bool ForceFormatListFixedLabelWidth;
+
+        // Update-Help tests
+        internal static bool ThrowHelpCultureNotSupported;
+        internal static CultureInfo CurrentUICulture;
 
         // Stop/Restart/Rename Computer tests
         internal static bool TestStopComputer;
@@ -2089,6 +1650,11 @@ public static class InternalTestHooks
         internal static bool SetConsoleWidthToZero;
         internal static bool SetConsoleHeightToZero;
 
+        // Simulate 'MyDocuments' returning empty string
+        internal static bool SetMyDocumentsSpecialFolderToBlank;
+
+        internal static bool SetDate;
+
         // A location to test PSEdition compatibility functionality for Windows PowerShell modules with
         // since we can't manipulate the System32 directory in a test
         internal static string TestWindowsPowerShellPSHomeLocation;
@@ -2100,27 +1666,22 @@ public static class InternalTestHooks
 
         internal static bool ThrowExdevErrorOnMoveDirectory;
 
+        // To emulate OneDrive behavior we use the hard-coded symlink.
+        // If OneDriveTestRecurseOn is false then the symlink works as regular symlink.
+        // If OneDriveTestRecurseOn is true then we recurse into the symlink as OneDrive should work.
+        // OneDriveTestSymlinkName defines the symlink name used in tests.
+        internal static bool OneDriveTestOn;
+        internal static bool OneDriveTestRecurseOn;
+        internal static string OneDriveTestSymlinkName = "link-Beta";
+
+        // Test out smaller connection buffer size when calling WNetGetConnection.
+        internal static int WNetGetConnectionBufferSize = -1;
+
         /// <summary>This member is used for internal test purposes.</summary>
         public static void SetTestHook(string property, object value)
         {
             var fieldInfo = typeof(InternalTestHooks).GetField(property, BindingFlags.Static | BindingFlags.NonPublic);
-            if (fieldInfo != null)
-            {
-                fieldInfo.SetValue(null, value);
-            }
-        }
-
-        /// <summary>
-        /// Test hook used to test implicit remoting batching.  A local runspace must be provided that has imported a
-        /// remote session, i.e., has run the Import-PSSession cmdlet.  This hook will return true if the provided commandPipeline
-        /// is successfully batched and run in the remote session, and false if it is rejected for batching.
-        /// </summary>
-        /// <param name="commandPipeline">Command pipeline to test.</param>
-        /// <param name="runspace">Runspace with imported remote session.</param>
-        /// <returns>True if commandPipeline is batched successfully.</returns>
-        public static bool TestImplicitRemotingBatching(string commandPipeline, System.Management.Automation.Runspaces.Runspace runspace)
-        {
-            return Utils.TryRunAsImplicitBatch(commandPipeline, runspace);
+            fieldInfo?.SetValue(null, value);
         }
 
         /// <summary>
@@ -2258,10 +1819,7 @@ internal sealed class ReadOnlyBag<T> : IEnumerable
         /// </summary>
         internal ReadOnlyBag(HashSet<T> hashset)
         {
-            if (hashset == null)
-            {
-                throw new ArgumentNullException(nameof(hashset));
-            }
+            ArgumentNullException.ThrowIfNull(hashset);
 
             _hashset = hashset;
         }
@@ -2297,36 +1855,12 @@ internal ReadOnlyBag(HashSet<T> hashset)
     /// </summary>
     internal static class Requires
     {
-        internal static void NotNull(object value, string paramName)
-        {
-            if (value == null)
-            {
-                throw new ArgumentNullException(paramName);
-            }
-        }
-
-        internal static void NotNullOrEmpty(string value, string paramName)
-        {
-            if (string.IsNullOrEmpty(value))
-            {
-                throw new ArgumentNullException(paramName);
-            }
-        }
-
         internal static void NotNullOrEmpty(ICollection value, string paramName)
         {
-            if (value == null || value.Count == 0)
+            if (value is null || value.Count == 0)
             {
                 throw new ArgumentNullException(paramName);
             }
         }
-
-        internal static void Condition([DoesNotReturnIf(false)] bool precondition, string paramName)
-        {
-            if (!precondition)
-            {
-                throw new ArgumentException(paramName);
-            }
-        }
     }
 }
diff --git a/src/System.Management.Automation/engine/WinRT/IInspectable.cs b/src/System.Management.Automation/engine/WinRT/IInspectable.cs
index abc589b4875..28544d42af4 100644
--- a/src/System.Management.Automation/engine/WinRT/IInspectable.cs
+++ b/src/System.Management.Automation/engine/WinRT/IInspectable.cs
@@ -4,6 +4,7 @@
 using System.Reflection;
 using System.Runtime.InteropServices;
 
+#nullable enable
 namespace System.Management.Automation
 {
     /// <summary>
diff --git a/src/System.Management.Automation/engine/cmdlet.cs b/src/System.Management.Automation/engine/cmdlet.cs
index b049193fd87..db2233d44a9 100644
--- a/src/System.Management.Automation/engine/cmdlet.cs
+++ b/src/System.Management.Automation/engine/cmdlet.cs
@@ -10,7 +10,7 @@
 using System.Reflection;
 using System.Resources;
 using System.Management.Automation.Internal;
-using Dbg = System.Management.Automation.Diagnostics;
+using System.Threading;
 
 namespace System.Management.Automation
 {
@@ -23,7 +23,7 @@ namespace System.Management.Automation
     /// deriving from the PSCmdlet base class.  The Cmdlet base class is the primary means by
     /// which users create their own Cmdlets.  Extending this class provides support for the most
     /// common functionality, including object output and record processing.
-    /// If your Cmdlet requires access to the MSH Runtime (for example, variables in the session state,
+    /// If your Cmdlet requires access to the PowerShell Runtime (for example, variables in the session state,
     /// access to the host, or information about the current Cmdlet Providers,) then you should instead
     /// derive from the PSCmdlet base class.
     /// In both cases, users should first develop and implement an object model to accomplish their
@@ -50,7 +50,7 @@ public static HashSet<string> CommonParameters
             () =>
             {
                 return new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
-                    "Verbose", "Debug", "ErrorAction", "WarningAction", "InformationAction",
+                    "Verbose", "Debug", "ErrorAction", "WarningAction", "InformationAction", "ProgressAction",
                     "ErrorVariable", "WarningVariable", "OutVariable",
                     "OutBuffer", "PipelineVariable", "InformationVariable" };
             }
@@ -100,6 +100,11 @@ public bool Stopping
             }
         }
 
+        /// <summary>
+        /// Gets the CancellationToken that is signaled when the pipeline is stopping.
+        /// </summary>
+        public CancellationToken PipelineStopToken => StopToken;
+
         /// <summary>
         /// The name of the parameter set in effect.
         /// </summary>
@@ -453,6 +458,9 @@ public void WriteVerbose(string text)
             }
         }
 
+        internal bool IsWriteVerboseEnabled()
+            => commandRuntime is not MshCommandRuntime mshRuntime || mshRuntime.IsWriteVerboseEnabled();
+
         /// <summary>
         /// Display warning information.
         /// </summary>
@@ -490,6 +498,9 @@ public void WriteWarning(string text)
             }
         }
 
+        internal bool IsWriteWarningEnabled()
+            => commandRuntime is not MshCommandRuntime mshRuntime || mshRuntime.IsWriteWarningEnabled();
+
         /// <summary>
         /// Write text into pipeline execution log.
         /// </summary>
@@ -511,7 +522,7 @@ public void WriteWarning(string text)
         /// pipeline execution log.
         ///
         /// If LogPipelineExecutionDetail is turned on, this information will be written
-        /// to monad log under log category "Pipeline execution detail"
+        /// to PowerShell log under log category "Pipeline execution detail"
         /// </remarks>
         /// <seealso cref="System.Management.Automation.Cmdlet.WriteDebug(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.WriteVerbose(string)"/>
@@ -598,6 +609,9 @@ internal void WriteProgress(
                 throw new System.NotImplementedException("WriteProgress");
         }
 
+        internal bool IsWriteProgressEnabled()
+            => commandRuntime is not MshCommandRuntime mshRuntime || mshRuntime.IsWriteProgressEnabled();
+
         /// <summary>
         /// Display debug information.
         /// </summary>
@@ -641,6 +655,9 @@ public void WriteDebug(string text)
             }
         }
 
+        internal bool IsWriteDebugEnabled()
+            => commandRuntime is not MshCommandRuntime mshRuntime || mshRuntime.IsWriteDebugEnabled();
+
         /// <summary>
         /// Route information to the user or host.
         /// </summary>
@@ -748,6 +765,9 @@ public void WriteInformation(InformationRecord informationRecord)
             }
         }
 
+        internal bool IsWriteInformationEnabled()
+            => commandRuntime is not MshCommandRuntime mshRuntime || mshRuntime.IsWriteInformationEnabled();
+
         #endregion Write
 
         #region ShouldProcess
@@ -801,8 +821,8 @@ public void WriteInformation(InformationRecord informationRecord)
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype1")]
         ///             public class RemoveMyObjectType1 : Cmdlet
@@ -824,7 +844,7 @@ public void WriteInformation(InformationRecord informationRecord)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string,string)"/>
@@ -897,8 +917,8 @@ public bool ShouldProcess(string target)
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype2")]
         ///             public class RemoveMyObjectType2 : Cmdlet
@@ -920,7 +940,7 @@ public bool ShouldProcess(string target)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string,string)"/>
@@ -1001,8 +1021,8 @@ public bool ShouldProcess(string target, string action)
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype3")]
         ///             public class RemoveMyObjectType3 : Cmdlet
@@ -1018,8 +1038,8 @@ public bool ShouldProcess(string target, string action)
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}?", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}?"),
         ///                         "Delete file"))
         ///                     {
         ///                         // delete the object
@@ -1027,7 +1047,7 @@ public bool ShouldProcess(string target, string action)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
@@ -1117,8 +1137,8 @@ public bool ShouldProcess(
         /// <see cref="System.Management.Automation.ActionPreferenceStopException"/>,
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype3")]
         ///             public class RemoveMyObjectType3 : Cmdlet
@@ -1135,8 +1155,8 @@ public bool ShouldProcess(
         ///                 {
         ///                     ShouldProcessReason shouldProcessReason;
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}?", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}?"),
         ///                         "Delete file",
         ///                         out shouldProcessReason))
         ///                     {
@@ -1145,7 +1165,7 @@ public bool ShouldProcess(
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string,string)"/>
@@ -1233,8 +1253,8 @@ public bool ShouldProcess(
         /// to ShouldProcess for the Cmdlet instance.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype4")]
         ///             public class RemoveMyObjectType4 : Cmdlet
@@ -1258,14 +1278,14 @@ public bool ShouldProcess(
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}"),
         ///                         "Delete file"))
         ///                     {
         ///                         if (IsReadOnly(filename))
         ///                         {
         ///                             if (!Force &amp;&amp; !ShouldContinue(
-        ///                                     string.Format("File {0} is read-only.  Are you sure you want to delete read-only file {0}?", filename),
+        ///                                     string.Format($"File {filename} is read-only.  Are you sure you want to delete read-only file {filename}?"),
         ///                                     "Delete file"))
         ///                                     )
         ///                             {
@@ -1277,7 +1297,7 @@ public bool ShouldProcess(
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldContinue(string,string,ref bool,ref bool)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
@@ -1311,11 +1331,11 @@ public bool ShouldContinue(string query, string caption)
         /// It may be displayed by some hosts, but not all.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
@@ -1362,8 +1382,8 @@ public bool ShouldContinue(string query, string caption)
         /// to ShouldProcess for the Cmdlet instance.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype4")]
         ///             public class RemoveMyObjectType5 : Cmdlet
@@ -1390,14 +1410,14 @@ public bool ShouldContinue(string query, string caption)
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}"),
         ///                         "Delete file"))
         ///                     {
         ///                         if (IsReadOnly(filename))
         ///                         {
         ///                             if (!Force &amp;&amp; !ShouldContinue(
-        ///                                     string.Format("File {0} is read-only.  Are you sure you want to delete read-only file {0}?", filename),
+        ///                                     string.Format($"File {filename} is read-only.  Are you sure you want to delete read-only file {filename}?"),
         ///                                     "Delete file"),
         ///                                     ref yesToAll,
         ///                                     ref noToAll
@@ -1411,7 +1431,7 @@ public bool ShouldContinue(string query, string caption)
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
@@ -1451,11 +1471,11 @@ public bool ShouldContinue(
         /// the default option selected in the selection menu is 'No'.
         /// </param>
         /// <param name="yesToAll">
-        /// true iff user selects YesToAll.  If this is already true,
+        /// true if-and-only-if user selects YesToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return true.
         /// </param>
         /// <param name="noToAll">
-        /// true iff user selects NoToAll.  If this is already true,
+        /// true if-and-only-if user selects NoToAll.  If this is already true,
         /// ShouldContinue will bypass the prompt and return false.
         /// </param>
         /// <exception cref="System.Management.Automation.PipelineStoppedException">
@@ -1502,8 +1522,8 @@ public bool ShouldContinue(
         /// to ShouldProcess for the Cmdlet instance.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///     <code>
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet(VerbsCommon.Remove,"myobjecttype4")]
         ///             public class RemoveMyObjectType5 : Cmdlet
@@ -1530,14 +1550,14 @@ public bool ShouldContinue(
         ///                 public override void ProcessRecord()
         ///                 {
         ///                     if (ShouldProcess(
-        ///                         string.Format("Deleting file {0}",filename),
-        ///                         string.Format("Are you sure you want to delete file {0}", filename),
+        ///                         string.Format($"Deleting file {filename}"),
+        ///                         string.Format($"Are you sure you want to delete file {filename}"),
         ///                         "Delete file"))
         ///                     {
         ///                         if (IsReadOnly(filename))
         ///                         {
         ///                             if (!Force &amp;&amp; !ShouldContinue(
-        ///                                     string.Format("File {0} is read-only.  Are you sure you want to delete read-only file {0}?", filename),
+        ///                                     string.Format($"File {filename} is read-only.  Are you sure you want to delete read-only file {filename}?"),
         ///                                     "Delete file"),
         ///                                     ref yesToAll,
         ///                                     ref noToAll
@@ -1551,7 +1571,7 @@ public bool ShouldContinue(
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldContinue(string,string)"/>
         /// <seealso cref="System.Management.Automation.Cmdlet.ShouldProcess(string)"/>
@@ -1714,12 +1734,12 @@ public PSTransactionContext CurrentPSTransaction
         /// <see cref="System.Management.Automation.Cmdlet.ProcessRecord"/>.
         /// etc.
         /// </remarks>
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         public void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             using (PSTransactionManager.GetEngineProtectionScope())
             {
-                if (errorRecord == null)
-                    throw new ArgumentNullException(nameof(errorRecord));
+                ArgumentNullException.ThrowIfNull(errorRecord);
 
                 if (commandRuntime != null)
                 {
@@ -1820,14 +1840,16 @@ public enum ShouldProcessReason
         None = 0x0,
 
         /// <summary>
+        /// <para>
         /// WhatIf behavior was requested.
-        /// </summary>
-        /// <remarks>
-        /// In the MSH host, WhatIf behavior can be requested explicitly
+        /// </para>
+        /// <para>
+        /// In the host, WhatIf behavior can be requested explicitly
         /// for one cmdlet instance using the -WhatIf commandline parameter,
         /// or implicitly for all SupportsShouldProcess cmdlets with $WhatIfPreference.
         /// Other hosts may have other ways to request WhatIf behavior.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         WhatIf = 0x1,
     }
 }
diff --git a/src/System.Management.Automation/engine/debugger/Breakpoint.cs b/src/System.Management.Automation/engine/debugger/Breakpoint.cs
index ca1c9818206..c4b699bd152 100644
--- a/src/System.Management.Automation/engine/debugger/Breakpoint.cs
+++ b/src/System.Management.Automation/engine/debugger/Breakpoint.cs
@@ -439,7 +439,7 @@ public override string ToString()
 
         internal BitArray BreakpointBitArray { get; set; }
 
-        private class CheckBreakpointInScript : AstVisitor
+        private sealed class CheckBreakpointInScript : AstVisitor
         {
             public static bool IsInNestedScriptBlock(Ast ast, LineBreakpoint breakpoint)
             {
@@ -482,9 +482,6 @@ internal bool TrySetBreakpoint(string scriptFile, FunctionContext functionContex
         {
             Diagnostics.Assert(SequencePointIndex == -1, "shouldn't be trying to set on a pending breakpoint");
 
-            if (!scriptFile.Equals(this.Script, StringComparison.OrdinalIgnoreCase))
-                return false;
-
             // A quick check to see if the breakpoint is within the scriptblock.
             bool couldBeInNestedScriptBlock;
             var scriptBlock = functionContext._scriptBlock;
@@ -531,15 +528,16 @@ internal bool TrySetBreakpoint(string scriptFile, FunctionContext functionContex
 
             // Not found.  First, we check if the line/column is before any real code.  If so, we'll
             // move the breakpoint to the first interesting sequence point (could be a dynamicparam,
-            // begin, process, or end block.)
+            // begin, process, end, or clean block.)
             if (scriptBlock != null)
             {
                 var ast = scriptBlock.Ast;
                 var bodyAst = ((IParameterMetadataProvider)ast).Body;
-                if ((bodyAst.DynamicParamBlock == null || bodyAst.DynamicParamBlock.Extent.IsAfter(Line, Column)) &&
-                    (bodyAst.BeginBlock == null || bodyAst.BeginBlock.Extent.IsAfter(Line, Column)) &&
-                    (bodyAst.ProcessBlock == null || bodyAst.ProcessBlock.Extent.IsAfter(Line, Column)) &&
-                    (bodyAst.EndBlock == null || bodyAst.EndBlock.Extent.IsAfter(Line, Column)))
+                if ((bodyAst.DynamicParamBlock == null || bodyAst.DynamicParamBlock.Extent.IsAfter(Line, Column))
+                    && (bodyAst.BeginBlock == null || bodyAst.BeginBlock.Extent.IsAfter(Line, Column))
+                    && (bodyAst.ProcessBlock == null || bodyAst.ProcessBlock.Extent.IsAfter(Line, Column))
+                    && (bodyAst.EndBlock == null || bodyAst.EndBlock.Extent.IsAfter(Line, Column))
+                    && (bodyAst.CleanBlock == null || bodyAst.CleanBlock.Extent.IsAfter(Line, Column)))
                 {
                     SetBreakpoint(functionContext, 0);
                     return true;
@@ -594,11 +592,11 @@ internal override bool RemoveSelf(ScriptDebugger debugger)
                 var boundBreakPoints = debugger.GetBoundBreakpoints(this.SequencePoints);
                 if (boundBreakPoints != null)
                 {
-                    Diagnostics.Assert(boundBreakPoints.Contains(this),
+                    Diagnostics.Assert(boundBreakPoints[this.SequencePointIndex].Contains(this),
                                        "If we set _scriptBlock, we should have also added the breakpoint to the bound breakpoint list");
-                    boundBreakPoints.Remove(this);
+                    boundBreakPoints[this.SequencePointIndex].Remove(this);
 
-                    if (boundBreakPoints.All(breakpoint => breakpoint.SequencePointIndex != this.SequencePointIndex))
+                    if (boundBreakPoints[this.SequencePointIndex].All(breakpoint => breakpoint.SequencePointIndex != this.SequencePointIndex))
                     {
                         // No other line breakpoints are at the same sequence point, so disable the breakpoint so
                         // we don't go looking for breakpoints the next time we hit the sequence point.
diff --git a/src/System.Management.Automation/engine/debugger/debugger.cs b/src/System.Management.Automation/engine/debugger/debugger.cs
index 30e83c38f90..985d90ab3ec 100644
--- a/src/System.Management.Automation/engine/debugger/debugger.cs
+++ b/src/System.Management.Automation/engine/debugger/debugger.cs
@@ -790,6 +790,16 @@ internal virtual void Break(object triggerObject = null)
             throw new PSNotImplementedException();
         }
 
+        /// <summary>
+        /// Returns script position message of current execution stack item.
+        /// This is used for WDAC audit mode logging for script information enhancement.
+        /// </summary>
+        /// <returns>Script position message string.</returns>
+        internal virtual string GetCurrentScriptPosition()
+        {
+            throw new PSNotImplementedException();
+        }
+
         /// <summary>
         /// Passes the debugger command to the internal script debugger command processor.  This
         /// is used internally to handle debugger commands such as list, help, etc.
@@ -971,7 +981,8 @@ internal ScriptDebugger(ExecutionContext context)
             _context = context;
             _inBreakpoint = false;
             _idToBreakpoint = new ConcurrentDictionary<int, Breakpoint>();
-            _pendingBreakpoints = new ConcurrentDictionary<int, LineBreakpoint>();
+            // The string key is function context file path. The int key is sequencePoint index.
+            _pendingBreakpoints = new ConcurrentDictionary<string, ConcurrentDictionary<int, LineBreakpoint>>(StringComparer.OrdinalIgnoreCase);
             _boundBreakpoints = new ConcurrentDictionary<string, Tuple<WeakReference, ConcurrentDictionary<int, LineBreakpoint>>>(StringComparer.OrdinalIgnoreCase);
             _commandBreakpoints = new ConcurrentDictionary<int, CommandBreakpoint>();
             _variableBreakpoints = new ConcurrentDictionary<string, ConcurrentDictionary<int, VariableBreakpoint>>(StringComparer.OrdinalIgnoreCase);
@@ -1057,12 +1068,9 @@ private bool IsLocalSession
         {
             get
             {
-                if (_isLocalSession == null)
-                {
-                    // Remote debug sessions always have a ServerRemoteHost.  Otherwise it is a local session.
-                    _isLocalSession = !(((_context.InternalHost.ExternalHost != null) &&
-                                         (_context.InternalHost.ExternalHost is System.Management.Automation.Remoting.ServerRemoteHost)));
-                }
+                // Remote debug sessions always have a ServerRemoteHost.  Otherwise it is a local session.
+                _isLocalSession ??= !((_context.InternalHost.ExternalHost != null) &&
+                    (_context.InternalHost.ExternalHost is System.Management.Automation.Remoting.ServerRemoteHost));
 
                 return _isLocalSession.Value;
             }
@@ -1177,7 +1185,7 @@ internal void EnterScriptFunction(FunctionContext functionContext)
         private void SetupBreakpoints(FunctionContext functionContext)
         {
             var scriptDebugData = _mapScriptToBreakpoints.GetValue(functionContext._sequencePoints,
-                                                                   _ => Tuple.Create(new List<LineBreakpoint>(),
+                                                                   _ => Tuple.Create(new Dictionary<int, List<LineBreakpoint>>(),
                                                                                      new BitArray(functionContext._sequencePoints.Length)));
             functionContext._boundBreakpoints = scriptDebugData.Item1;
             functionContext._breakPoints = scriptDebugData.Item2;
@@ -1257,10 +1265,19 @@ private CommandBreakpoint AddCommandBreakpoint(CommandBreakpoint breakpoint)
         private LineBreakpoint AddLineBreakpoint(LineBreakpoint breakpoint)
         {
             AddBreakpointCommon(breakpoint);
-            _pendingBreakpoints[breakpoint.Id] = breakpoint;
+            AddPendingBreakpoint(breakpoint);
+
             return breakpoint;
         }
 
+        private void AddPendingBreakpoint(LineBreakpoint breakpoint)
+        {
+            _pendingBreakpoints.AddOrUpdate(
+                breakpoint.Script,
+                new ConcurrentDictionary<int, LineBreakpoint> { [breakpoint.Id] = breakpoint },
+                (_, dictionary) => { dictionary.TryAdd(breakpoint.Id, breakpoint); return dictionary; });
+        }
+
         private void AddNewBreakpoint(Breakpoint breakpoint)
         {
             LineBreakpoint lineBreakpoint = breakpoint as LineBreakpoint;
@@ -1313,13 +1330,9 @@ private void UpdateBreakpoints(FunctionContext functionContext)
                     return;
                 }
 
-                foreach ((int breakpointId, LineBreakpoint item) in _pendingBreakpoints)
+                if (_pendingBreakpoints.TryGetValue(functionContext._file, out var dictionary) && !dictionary.IsEmpty)
                 {
-                    if (item.IsScriptBreakpoint && item.Script.Equals(functionContext._file, StringComparison.OrdinalIgnoreCase))
-                    {
-                        SetPendingBreakpoints(functionContext);
-                        break;
-                    }
+                    SetPendingBreakpoints(functionContext);
                 }
             }
         }
@@ -1345,7 +1358,11 @@ internal bool RemoveCommandBreakpoint(CommandBreakpoint breakpoint) =>
 
         internal bool RemoveLineBreakpoint(LineBreakpoint breakpoint)
         {
-            bool removed = _pendingBreakpoints.Remove(breakpoint.Id, out _);
+            bool removed = false;
+            if (_pendingBreakpoints.TryGetValue(breakpoint.Script, out var dictionary))
+            {
+                removed = dictionary.Remove(breakpoint.Id, out _);
+            }
 
             Tuple<WeakReference, ConcurrentDictionary<int, LineBreakpoint>> value;
             if (_boundBreakpoints.TryGetValue(breakpoint.Script, out value))
@@ -1363,8 +1380,8 @@ internal bool RemoveLineBreakpoint(LineBreakpoint breakpoint)
         // The bit array is used to detect if a breakpoint is set or not for a given scriptblock.  This bit array
         // is checked when hitting sequence points.  Enabling/disabling a line breakpoint is as simple as flipping
         // the bit.
-        private readonly ConditionalWeakTable<IScriptExtent[], Tuple<List<LineBreakpoint>, BitArray>> _mapScriptToBreakpoints =
-            new ConditionalWeakTable<IScriptExtent[], Tuple<List<LineBreakpoint>, BitArray>>();
+        private readonly ConditionalWeakTable<IScriptExtent[], Tuple<Dictionary<int, List<LineBreakpoint>>, BitArray>> _mapScriptToBreakpoints =
+            new ConditionalWeakTable<IScriptExtent[], Tuple<Dictionary<int, List<LineBreakpoint>>, BitArray>>();
 
         /// <summary>
         /// Checks for command breakpoints.
@@ -1465,9 +1482,9 @@ internal void TriggerVariableBreakpoints(List<VariableBreakpoint> breakpoints)
 
         // Return the line breakpoints bound in a specific script block (used when a sequence point
         // is hit, to find which breakpoints are set on that sequence point.)
-        internal List<LineBreakpoint> GetBoundBreakpoints(IScriptExtent[] sequencePoints)
+        internal Dictionary<int, List<LineBreakpoint>> GetBoundBreakpoints(IScriptExtent[] sequencePoints)
         {
-            Tuple<List<LineBreakpoint>, BitArray> tuple;
+            Tuple<Dictionary<int, List<LineBreakpoint>>, BitArray> tuple;
             if (_mapScriptToBreakpoints.TryGetValue(sequencePoints, out tuple))
             {
                 return tuple.Item1;
@@ -1519,7 +1536,16 @@ private List<Breakpoint> TriggerBreakpoints(List<Breakpoint> breakpoints)
 
         internal void OnSequencePointHit(FunctionContext functionContext)
         {
-            if (_context.ShouldTraceStatement && !_callStack.Last().IsFrameHidden && !functionContext._debuggerStepThrough)
+            // TraceLine uses ColumnNumber and expects it to be 1 based. For
+            // extents added by the engine and not user code the value can be
+            // set to 0 causing an exception. This skips those types of extents
+            // as tracing them wouldn't be useful for the end user anyway.
+            if (_context.ShouldTraceStatement &&
+                !_callStack.Last().IsFrameHidden &&
+                !functionContext._debuggerStepThrough &&
+                functionContext.CurrentPosition is not EmptyScriptExtent &&
+                (functionContext.CurrentPosition is InternalScriptExtent ||
+                   functionContext.CurrentPosition.StartColumnNumber > 0))
             {
                 TraceLine(functionContext.CurrentPosition);
             }
@@ -1553,16 +1579,25 @@ internal void OnSequencePointHit(FunctionContext functionContext)
             {
                 if (functionContext._breakPoints[functionContext._currentSequencePointIndex])
                 {
-                    var breakpoints = (from breakpoint in functionContext._boundBreakpoints
-                                       where
-                                           breakpoint.SequencePointIndex == functionContext._currentSequencePointIndex &&
-                                           breakpoint.Enabled
-                                       select breakpoint).ToList<Breakpoint>();
-
-                    breakpoints = TriggerBreakpoints(breakpoints);
-                    if (breakpoints.Count > 0)
+                    if (functionContext._boundBreakpoints.TryGetValue(functionContext._currentSequencePointIndex, out var sequencePointBreakpoints))
                     {
-                        StopOnSequencePoint(functionContext, breakpoints);
+                        var enabledBreakpoints = new List<Breakpoint>();
+                        foreach (Breakpoint breakpoint in sequencePointBreakpoints)
+                        {
+                            if (breakpoint.Enabled)
+                            {
+                                enabledBreakpoints.Add(breakpoint);
+                            }
+                        }
+
+                        if (enabledBreakpoints.Count > 0)
+                        {
+                            enabledBreakpoints = TriggerBreakpoints(enabledBreakpoints);
+                            if (enabledBreakpoints.Count > 0)
+                            {
+                                StopOnSequencePoint(functionContext, enabledBreakpoints);
+                            }
+                        }
                     }
                 }
             }
@@ -1575,7 +1610,7 @@ internal void OnSequencePointHit(FunctionContext functionContext)
         #region private members
 
         [DebuggerDisplay("{FunctionContext.CurrentPosition}")]
-        private class CallStackInfo
+        private sealed class CallStackInfo
         {
             internal InvocationInfo InvocationInfo { get; set; }
 
@@ -1676,7 +1711,7 @@ internal void Clear()
         }
 
         private readonly ExecutionContext _context;
-        private ConcurrentDictionary<int, LineBreakpoint> _pendingBreakpoints;
+        private readonly ConcurrentDictionary<string, ConcurrentDictionary<int, LineBreakpoint>> _pendingBreakpoints;
         private readonly ConcurrentDictionary<string, Tuple<WeakReference, ConcurrentDictionary<int, LineBreakpoint>>> _boundBreakpoints;
         private readonly ConcurrentDictionary<int, CommandBreakpoint> _commandBreakpoints;
         private readonly ConcurrentDictionary<string, ConcurrentDictionary<int, VariableBreakpoint>> _variableBreakpoints;
@@ -1807,7 +1842,8 @@ private void OnDebuggerStop(InvocationInfo invocationInfo, List<Breakpoint> brea
                 {
                     // Fix up prompt.
                     ++index;
-                    string debugPrompt = "\"[DBG]: " + originalPromptString.Substring(index, originalPromptString.Length - index);
+                    string debugPrompt = string.Concat("\"[DBG]: ", originalPromptString.AsSpan(index, originalPromptString.Length - index));
+
                     defaultPromptInfo.Update(
                         ScriptBlock.Create(debugPrompt), true, ScopedItemOptions.Unspecified);
                 }
@@ -1948,10 +1984,7 @@ private bool WaitForDebugStopSubscriber()
                 if (_preserveUnhandledDebugStopEvent)
                 {
                     // Lazily create the event object.
-                    if (_preserveDebugStopEvent == null)
-                    {
-                        _preserveDebugStopEvent = new ManualResetEventSlim(true);
-                    }
+                    _preserveDebugStopEvent ??= new ManualResetEventSlim(true);
 
                     // Set the event handle to non-signaled.
                     if (!_preserveDebugStopEvent.IsSet)
@@ -1986,16 +2019,20 @@ private void UnbindBoundBreakpoints(List<LineBreakpoint> boundBreakpoints)
             foreach (var breakpoint in boundBreakpoints)
             {
                 // Also remove unbound breakpoints from the script to breakpoint map.
-                Tuple<List<LineBreakpoint>, BitArray> lineBreakTuple;
+                Tuple<Dictionary<int, List<LineBreakpoint>>, BitArray> lineBreakTuple;
                 if (_mapScriptToBreakpoints.TryGetValue(breakpoint.SequencePoints, out lineBreakTuple))
                 {
-                    lineBreakTuple.Item1.Remove(breakpoint);
+                    if (lineBreakTuple.Item1.TryGetValue(breakpoint.SequencePointIndex, out var lineBreakList))
+                    {
+                        lineBreakList.Remove(breakpoint);
+                    }
                 }
 
                 breakpoint.SequencePoints = null;
                 breakpoint.SequencePointIndex = -1;
                 breakpoint.BreakpointBitArray = null;
-                _pendingBreakpoints[breakpoint.Id] = breakpoint;
+
+                AddPendingBreakpoint(breakpoint);
             }
 
             boundBreakpoints.Clear();
@@ -2003,23 +2040,24 @@ private void UnbindBoundBreakpoints(List<LineBreakpoint> boundBreakpoints)
 
         private void SetPendingBreakpoints(FunctionContext functionContext)
         {
-            if (_pendingBreakpoints.IsEmpty)
-                return;
-
-            var newPendingBreakpoints = new Dictionary<int, LineBreakpoint>();
             var currentScriptFile = functionContext._file;
 
             // If we're not in a file, we can't have any line breakpoints.
             if (currentScriptFile == null)
                 return;
 
+            if (!_pendingBreakpoints.TryGetValue(currentScriptFile, out var breakpoints) || breakpoints.IsEmpty)
+            {
+                return;
+            }
+
             // Normally we register a script file when the script is run or the module is imported,
             // but if there weren't any breakpoints when the script was run and the script was dotted,
             // we will end up here with pending breakpoints, but we won't have cached the list of
             // breakpoints in the script.
             RegisterScriptFile(currentScriptFile, functionContext.CurrentPosition.StartScriptPosition.GetFullScript());
 
-            Tuple<List<LineBreakpoint>, BitArray> tuple;
+            Tuple<Dictionary<int, List<LineBreakpoint>>, BitArray> tuple;
             if (!_mapScriptToBreakpoints.TryGetValue(functionContext._sequencePoints, out tuple))
             {
                 Diagnostics.Assert(false, "If the script block is still alive, the entry should not be collected.");
@@ -2027,7 +2065,7 @@ private void SetPendingBreakpoints(FunctionContext functionContext)
 
             Diagnostics.Assert(tuple.Item1 == functionContext._boundBreakpoints, "What's up?");
 
-            foreach ((int breakpointId, LineBreakpoint breakpoint) in _pendingBreakpoints)
+            foreach ((int breakpointId, LineBreakpoint breakpoint) in breakpoints)
             {
                 bool bound = false;
                 if (breakpoint.TrySetBreakpoint(currentScriptFile, functionContext))
@@ -2038,7 +2076,15 @@ private void SetPendingBreakpoints(FunctionContext functionContext)
                     }
 
                     bound = true;
-                    tuple.Item1.Add(breakpoint);
+
+                    if (tuple.Item1.TryGetValue(breakpoint.SequencePointIndex, out var list))
+                    {
+                        list.Add(breakpoint);
+                    }
+                    else
+                    {
+                        tuple.Item1.Add(breakpoint.SequencePointIndex, new List<LineBreakpoint> { breakpoint });
+                    }
 
                     // We need to keep track of any breakpoints that are bound in each script because they may
                     // need to be rebound if the script changes.
@@ -2046,13 +2092,16 @@ private void SetPendingBreakpoints(FunctionContext functionContext)
                     boundBreakpoints[breakpoint.Id] = breakpoint;
                 }
 
-                if (!bound)
+                if (bound)
                 {
-                    newPendingBreakpoints.Add(breakpoint.Id, breakpoint);
+                    breakpoints.TryRemove(breakpointId, out _);
                 }
             }
 
-            _pendingBreakpoints = new ConcurrentDictionary<int, LineBreakpoint>(newPendingBreakpoints);
+            // Here could check if all breakpoints for the current functionContext were bound, but because there is no atomic
+            // api for conditional removal we either need to lock, or do some trickery that has possibility of race conditions.
+            // Instead we keep the item in the dictionary with 0 breakpoint count. This should not be a big issue,
+            // because it is single entry per file that had breakpoints, so there won't be thousands of files in a session.
         }
 
         private void StopOnSequencePoint(FunctionContext functionContext, List<Breakpoint> breakpoints)
@@ -2134,7 +2183,7 @@ private bool CanDisableDebugger
         {
             get
             {
-                // The debugger can be disbled if there are no breakpoints
+                // The debugger can be disabled if there are no breakpoints
                 // left and if we are not currently stepping in the debugger.
                 return _idToBreakpoint.IsEmpty &&
                        _currentDebuggerAction != DebuggerResumeAction.StepInto &&
@@ -2151,11 +2200,8 @@ private bool IsSystemLockedDown
                 {
                     lock (_syncObject)
                     {
-                        if (_isSystemLockedDown == null)
-                        {
-                            _isSystemLockedDown = (System.Management.Automation.Security.SystemPolicy.GetSystemLockdownPolicy() ==
-                                System.Management.Automation.Security.SystemEnforcementMode.Enforce);
-                        }
+                        _isSystemLockedDown ??= (System.Management.Automation.Security.SystemPolicy.GetSystemLockdownPolicy() ==
+                            System.Management.Automation.Security.SystemEnforcementMode.Enforce);
                     }
                 }
 
@@ -2322,7 +2368,7 @@ public override DebuggerCommandResults ProcessCommand(PSCommand command, PSDataC
             //
             // Otherwise let root script debugger handle it.
             //
-            if (!(_context.CurrentRunspace is LocalRunspace localRunspace))
+            if (_context.CurrentRunspace is not LocalRunspace localRunspace)
             {
                 throw new PSInvalidOperationException(
                     DebuggerStrings.CannotProcessDebuggerCommandNotStopped,
@@ -2394,10 +2440,7 @@ public override void StopProcessCommand()
             }
 
             PowerShell ps = _psDebuggerCommand;
-            if (ps != null)
-            {
-                ps.BeginStop(null, null);
-            }
+            ps?.BeginStop(null, null);
         }
 
         /// <summary>
@@ -2530,6 +2573,29 @@ internal override void Break(object triggerObject = null)
             }
         }
 
+        /// <summary>
+        /// Returns script position message of current execution stack item.
+        /// This is used for WDAC audit mode logging for script information enhancement.
+        /// </summary>
+        /// <returns>Script position message string.</returns>
+        internal override string GetCurrentScriptPosition()
+        {
+            using (IEnumerator<CallStackFrame> enumerator = GetCallStack().GetEnumerator())
+            {
+                if (enumerator.MoveNext())
+                {
+                    var functionContext = enumerator.Current.FunctionContext;
+                    if (functionContext is not null)
+                    {
+                        var invocationInfo = new InvocationInfo(commandInfo: null, functionContext.CurrentPosition, _context);
+                        return $"\n{invocationInfo.PositionMessage}";
+                    }
+                }
+            }
+
+            return null;
+        }
+
         /// <summary>
         /// Passes the debugger command to the internal script debugger command processor.  This
         /// is used internally to handle debugger commands such as list, help, etc.
@@ -3248,11 +3314,7 @@ private void SetRunspaceListToStep(bool enableStepping)
                 try
                 {
                     Debugger nestedDebugger = item.NestedDebugger;
-
-                    if (nestedDebugger != null)
-                    {
-                        nestedDebugger.SetDebuggerStepMode(enableStepping);
-                    }
+                    nestedDebugger?.SetDebuggerStepMode(enableStepping);
                 }
                 catch (PSNotImplementedException) { }
             }
@@ -3554,7 +3616,7 @@ private DebuggerCommandResults ProcessCommandForActiveDebugger(PSCommand command
                 else if ((command.Commands.Count > 0) &&
                          (command.Commands[0].CommandText.IndexOf(".EnterNestedPrompt()", StringComparison.OrdinalIgnoreCase) > 0))
                 {
-                    // Prevent a host EnterNestedPrompt() call from occuring in an active debugger.
+                    // Prevent a host EnterNestedPrompt() call from occurring in an active debugger.
                     // Host nested prompt makes no sense in this case and can cause host to stop responding depending on host implementation.
                     throw new PSNotSupportedException();
                 }
@@ -3767,7 +3829,7 @@ private void HandleMonitorRunningRSDebuggerStop(object sender, DebuggerStopEvent
                 }
 
                 // Get nested debugger runspace info.
-                if (!(senderDebugger is NestedRunspaceDebugger nestedDebugger)) { return; }
+                if (senderDebugger is not NestedRunspaceDebugger nestedDebugger) { return; }
 
                 PSMonitorRunspaceType runspaceType = nestedDebugger.RunspaceType;
 
@@ -4505,7 +4567,7 @@ protected virtual bool HandleListCommand(PSDataCollection<PSObject> output)
         /// <summary>
         /// Attempts to fix up the debugger stop invocation information so that
         /// the correct stack and source can be displayed in the debugger, for
-        /// cases where the debugged runspace is called inside a parent sccript,
+        /// cases where the debugged runspace is called inside a parent script,
         /// such as with script Invoke-Command cases.
         /// </summary>
         /// <param name="debugStopInvocationInfo"></param>
@@ -4544,10 +4606,7 @@ internal void CheckStateAndRaiseStopEvent()
                 // If this is a remote server debugger then we want to convert the pending remote
                 // debugger stop to a local debugger stop event for this Debug-Runspace to handle.
                 ServerRemoteDebugger serverRemoteDebugger = this._wrappedDebugger as ServerRemoteDebugger;
-                if (serverRemoteDebugger != null)
-                {
-                    serverRemoteDebugger.ReleaseAndRaiseDebugStopLocal();
-                }
+                serverRemoteDebugger?.ReleaseAndRaiseDebugStopLocal();
             }
         }
 
@@ -4627,7 +4686,7 @@ protected override void HandleDebuggerStop(object sender, DebuggerStopEventArgs
         private object DrainAndBlockRemoteOutput()
         {
             // We do this only for remote runspaces.
-            if (!(_runspace is RemoteRunspace remoteRunspace)) { return null; }
+            if (_runspace is not RemoteRunspace remoteRunspace) { return null; }
 
             var runningPowerShell = remoteRunspace.GetCurrentBasePowerShell();
             if (runningPowerShell != null)
@@ -4779,7 +4838,7 @@ protected override bool HandleListCommand(PSDataCollection<PSObject> output)
         /// <summary>
         /// Attempts to fix up the debugger stop invocation information so that
         /// the correct stack and source can be displayed in the debugger, for
-        /// cases where the debugged runspace is called inside a parent sccript,
+        /// cases where the debugged runspace is called inside a parent script,
         /// such as with script Invoke-Command cases.
         /// </summary>
         /// <param name="debugStopInvocationInfo">Invocation information from debugger stop.</param>
@@ -4959,10 +5018,7 @@ private static void RestoreRemoteOutput(object runningCmd)
             else
             {
                 Pipeline pipelineCommand = runningCmd as Pipeline;
-                if (pipelineCommand != null)
-                {
-                    pipelineCommand.ResumeIncomingData();
-                }
+                pipelineCommand?.ResumeIncomingData();
             }
         }
 
@@ -5322,10 +5378,9 @@ private void DisplayScript(PSHost host, IList<PSObject> output, InvocationInfo i
             for (int lineNumber = start; lineNumber <= _lines.Length && lineNumber < start + count; lineNumber++)
             {
                 WriteLine(
-                    lineNumber == invocationInfo.ScriptLineNumber ?
-                    string.Format(CultureInfo.CurrentCulture, "{0,5}:* {1}", lineNumber, _lines[lineNumber - 1])
-                    :
-                    string.Format(CultureInfo.CurrentCulture, "{0,5}:  {1}", lineNumber, _lines[lineNumber - 1]),
+                    lineNumber == invocationInfo.ScriptLineNumber
+                        ? string.Format(CultureInfo.CurrentCulture, "{0,5}:* {1}", lineNumber, _lines[lineNumber - 1])
+                        : string.Format(CultureInfo.CurrentCulture, "{0,5}:  {1}", lineNumber, _lines[lineNumber - 1]),
                     host,
                     output);
 
@@ -5337,47 +5392,29 @@ private void DisplayScript(PSHost host, IList<PSObject> output, InvocationInfo i
 
         private static void WriteLine(string line, PSHost host, IList<PSObject> output)
         {
-            if (host != null)
-            {
-                host.UI.WriteLine(line);
-            }
+            host?.UI.WriteLine(line);
 
-            if (output != null)
-            {
-                output.Add(new PSObject(line));
-            }
+            output?.Add(new PSObject(line));
         }
 
         private static void WriteCR(PSHost host, IList<PSObject> output)
         {
-            if (host != null)
-            {
-                host.UI.WriteLine();
-            }
+            host?.UI.WriteLine();
 
-            if (output != null)
-            {
-                output.Add(new PSObject(Crlf));
-            }
+            output?.Add(new PSObject(Crlf));
         }
 
         private static void WriteErrorLine(string error, PSHost host, IList<PSObject> output)
         {
-            if (host != null)
-            {
-                host.UI.WriteErrorLine(error);
-            }
+            host?.UI.WriteErrorLine(error);
 
-            if (output != null)
-            {
-                output.Add(
-                    new PSObject(
-                        new ErrorRecord(
-                            new RuntimeException(error),
-                            "DebuggerError",
-                            ErrorCategory.InvalidOperation,
-                            null)));
-            }
+            output?.Add(
+                new PSObject(
+                    new ErrorRecord(
+                        new RuntimeException(error),
+                        "DebuggerError",
+                        ErrorCategory.InvalidOperation,
+                        null)));
         }
     }
 
@@ -5686,7 +5723,7 @@ public static void StartMonitoringRunspace(Debugger debugger, PSMonitorRunspaceI
         }
 
         /// <summary>
-        /// End monitoring a runspace on the target degbugger.
+        /// End monitoring a runspace on the target debugger.
         /// </summary>
         /// <param name="debugger">Target debugger.</param>
         /// <param name="runspaceInfo">PSMonitorRunspaceInfo.</param>
diff --git a/src/System.Management.Automation/engine/hostifaces/AsyncResult.cs b/src/System.Management.Automation/engine/hostifaces/AsyncResult.cs
index f1e57e6fe39..74bcefae2a8 100644
--- a/src/System.Management.Automation/engine/hostifaces/AsyncResult.cs
+++ b/src/System.Management.Automation/engine/hostifaces/AsyncResult.cs
@@ -16,7 +16,7 @@ internal class AsyncResult : IAsyncResult
         #region Private Data
 
         private ManualResetEvent _completedWaitHandle;
-        // exception occured in the async thread.
+        // exception occurred in the async thread.
         // user supplied state object
 
         // Invoke on thread (remote debugging support).
@@ -85,10 +85,7 @@ public WaitHandle AsyncWaitHandle
                 {
                     lock (SyncObject)
                     {
-                        if (_completedWaitHandle == null)
-                        {
-                            _completedWaitHandle = new ManualResetEvent(IsCompleted);
-                        }
+                        _completedWaitHandle ??= new ManualResetEvent(IsCompleted);
                     }
                 }
 
@@ -125,7 +122,7 @@ public WaitHandle AsyncWaitHandle
         /// Marks the async operation as completed.
         /// </summary>
         /// <param name="exception">
-        /// Exception occured. null if no exception occured
+        /// Exception occurred. null if no exception occurred
         /// </param>
         internal void SetAsCompleted(Exception exception)
         {
@@ -178,10 +175,7 @@ internal void SignalWaitHandle()
         {
             lock (SyncObject)
             {
-                if (_completedWaitHandle != null)
-                {
-                    _completedWaitHandle.Set();
-                }
+                _completedWaitHandle?.Set();
             }
         }
 
@@ -222,7 +216,7 @@ internal void EndInvoke()
             _invokeOnThreadEvent.Dispose();
             _invokeOnThreadEvent = null;  // Allow early GC
 
-            // Operation is done: if an exception occured, throw it
+            // Operation is done: if an exception occurred, throw it
             if (Exception != null)
             {
                 throw Exception;
diff --git a/src/System.Management.Automation/engine/hostifaces/ChoiceDescription.cs b/src/System.Management.Automation/engine/hostifaces/ChoiceDescription.cs
index 1b55485afdc..0cac1d02b6f 100644
--- a/src/System.Management.Automation/engine/hostifaces/ChoiceDescription.cs
+++ b/src/System.Management.Automation/engine/hostifaces/ChoiceDescription.cs
@@ -6,8 +6,8 @@
 namespace System.Management.Automation.Host
 {
     /// <summary>
-    /// Provides a description of a choice for use by <seealso cref="System.Management.Automation.Host.PSHostUserInterface.PromptForChoice"/>.
-    /// <!--Used by the Msh engine to describe cmdlet parameters.-->
+    /// Provides a description of a choice for use by <see cref="System.Management.Automation.Host.PSHostUserInterface.PromptForChoice"/>.
+    /// <!--Used by the engine to describe cmdlet parameters.-->
     /// </summary>
     public sealed
     class ChoiceDescription
@@ -84,7 +84,7 @@ class ChoiceDescription
         /// <remarks>
         /// Note that the special character &amp; (ampersand) may be embedded in the label string to identify the next character in the label
         /// as a "hot key" (aka "keyboard accelerator") that the Console.PromptForChoice implementation may use to allow the user to
-        /// quickly set input focus to this choice.  The implementation of <seealso cref="System.Management.Automation.Host.PSHostUserInterface.PromptForChoice"/>
+        /// quickly set input focus to this choice.  The implementation of <see cref="System.Management.Automation.Host.PSHostUserInterface.PromptForChoice"/>
         /// is responsible for parsing the label string for this special character and rendering it accordingly.
         ///
         /// For examples, a choice named "Yes to All" might have "Yes to &amp;All" as it's label.
diff --git a/src/System.Management.Automation/engine/hostifaces/Command.cs b/src/System.Management.Automation/engine/hostifaces/Command.cs
index 6d8cd526486..3de339ff112 100644
--- a/src/System.Management.Automation/engine/hostifaces/Command.cs
+++ b/src/System.Management.Automation/engine/hostifaces/Command.cs
@@ -662,7 +662,7 @@ internal PSObject ToPSObjectForRemoting(Version psRPVersion)
             commandAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.MergeUnclaimedPreviousCommandResults, this.MergeUnclaimedPreviousCommandResults));
 
             if (psRPVersion != null &&
-                psRPVersion >= RemotingConstants.ProtocolVersionWin10RTM)
+                psRPVersion >= RemotingConstants.ProtocolVersion_2_3)
             {
                 // V5 merge instructions
                 commandAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.MergeError, MergeInstructions[(int)MergeType.Error]));
@@ -672,7 +672,7 @@ internal PSObject ToPSObjectForRemoting(Version psRPVersion)
                 commandAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.MergeInformation, MergeInstructions[(int)MergeType.Information]));
             }
             else if (psRPVersion != null &&
-                psRPVersion >= RemotingConstants.ProtocolVersionWin8RTM)
+                psRPVersion >= RemotingConstants.ProtocolVersion_2_2)
             {
                 // V3 merge instructions.
                 commandAsPSObject.Properties.Add(new PSNoteProperty(RemoteDataNameStrings.MergeError, MergeInstructions[(int)MergeType.Error]));
diff --git a/src/System.Management.Automation/engine/hostifaces/Connection.cs b/src/System.Management.Automation/engine/hostifaces/Connection.cs
index 5af011adb82..ccb918c7dd9 100644
--- a/src/System.Management.Automation/engine/hostifaces/Connection.cs
+++ b/src/System.Management.Automation/engine/hostifaces/Connection.cs
@@ -19,7 +19,6 @@ namespace System.Management.Automation.Runspaces
     /// Exception thrown when state of the runspace is different from
     /// expected state of runspace.
     /// </summary>
-    [Serializable]
     public class InvalidRunspaceStateException : SystemException
     {
         /// <summary>
@@ -96,9 +95,10 @@ RunspaceState expectedState
         /// The <see cref="StreamingContext"/> that contains contextual information
         /// about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected InvalidRunspaceStateException(SerializationInfo info, StreamingContext context)
-        : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -219,12 +219,9 @@ public enum PSThreadOptions
         ReuseThread = 2,
 
         /// <summary>
-        /// Doesn't create a new thread; the execution occurs on the
-        /// thread that calls Invoke.
+        /// Doesn't create a new thread; the execution occurs on the thread
+        /// that calls Invoke. This option is not valid for asynchronous calls.
         /// </summary>
-        /// <remarks>
-        /// This option is not valid for asynchronous calls
-        /// </remarks>
         UseCurrentThread = 3
     }
 
@@ -414,7 +411,7 @@ internal RunspaceAvailabilityEventArgs(RunspaceAvailability runspaceAvailability
     public enum RunspaceCapability
     {
         /// <summary>
-        /// No additional capabilities beyond a default runspace.
+        /// Legacy capabilities for WinRM only, from Win7 timeframe.
         /// </summary>
         Default = 0x0,
 
@@ -436,13 +433,18 @@ public enum RunspaceCapability
         /// <summary>
         /// Runspace is based on SSH transport.
         /// </summary>
-        SSHTransport = 0x8
+        SSHTransport = 0x8,
+
+        /// <summary>
+        /// Runspace is based on open custom connection/transport support.
+        /// </summary>
+        CustomTransport = 0x100
     }
 
     #endregion
 
     /// <summary>
-    /// Public interface to Msh Runtime. Provides APIs for creating pipelines,
+    /// Public interface to PowerShell Runtime. Provides APIs for creating pipelines,
     /// access session state etc.
     /// </summary>
     public abstract class Runspace : IDisposable
@@ -698,7 +700,7 @@ public Guid InstanceId
         /// </summary>
         /// <exception cref="InvalidRunspaceStateException">Runspace is not opened.
         /// </exception>
-        internal System.Management.Automation.ExecutionContext ExecutionContext
+        internal ExecutionContext ExecutionContext
         {
             get
             {
@@ -759,6 +761,12 @@ public string Name
         /// Gets the Runspace Id.
         /// </summary>
         public int Id { get; }
+        
+        /// <summary>
+        /// Gets and sets a boolean indicating whether the runspace has a
+        /// debugger attached with <c>Debug-Runspace</c>.
+        /// </summary>
+        public bool IsRemoteDebuggerAttached { get; internal set; }
 
         /// <summary>
         /// Returns protocol version that the remote server uses for PS remoting.
@@ -1508,7 +1516,10 @@ internal PowerShell PopRunningPowerShell()
 
                 if (count > 0)
                 {
-                    if (count == 1) { _baseRunningPowerShell = null; }
+                    if (count == 1)
+                    {
+                        _baseRunningPowerShell = null;
+                    }
 
                     return _runningPowerShells.Pop();
                 }
@@ -1569,7 +1580,7 @@ protected virtual void Dispose(bool disposing)
         /// <summary>
         /// Gets the execution context.
         /// </summary>
-        internal abstract System.Management.Automation.ExecutionContext GetExecutionContext
+        internal abstract ExecutionContext GetExecutionContext
         {
             get;
         }
@@ -1615,8 +1626,8 @@ public abstract PSEventManager Events
         /// <summary>
         /// Sets the base transaction for the runspace; any transactions created on this runspace will be nested to this instance.
         /// </summary>
-        ///<param name="transaction">The base transaction</param>
-        ///<remarks>This overload uses RollbackSeverity.Error; i.e. the transaction will be rolled back automatically on a non-terminating error or worse</remarks>
+        /// <param name="transaction">The base transaction</param>
+        /// <remarks>This overload uses RollbackSeverity.Error; i.e. the transaction will be rolled back automatically on a non-terminating error or worse</remarks>
         public void SetBaseTransaction(System.Transactions.CommittableTransaction transaction)
         {
             this.ExecutionContext.TransactionManager.SetBaseTransaction(transaction, RollbackSeverity.Error);
@@ -1625,8 +1636,8 @@ public void SetBaseTransaction(System.Transactions.CommittableTransaction transa
         /// <summary>
         /// Sets the base transaction for the runspace; any transactions created on this runspace will be nested to this instance.
         /// </summary>
-        ///<param name="transaction">The base transaction</param>
-        ///<param name="severity">The severity of error that causes PowerShell to automatically rollback the transaction</param>
+        /// <param name="transaction">The base transaction</param>
+        /// <param name="severity">The severity of error that causes PowerShell to automatically rollback the transaction</param>
         public void SetBaseTransaction(System.Transactions.CommittableTransaction transaction, RollbackSeverity severity)
         {
             this.ExecutionContext.TransactionManager.SetBaseTransaction(transaction, severity);
diff --git a/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs b/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs
index 99151b7b0d4..0969d7b08c6 100644
--- a/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs
+++ b/src/System.Management.Automation/engine/hostifaces/ConnectionBase.cs
@@ -25,6 +25,28 @@ internal abstract class RunspaceBase : Runspace
     {
         #region constructors
 
+        /// <summary>
+        /// Initialize powershell AssemblyLoadContext and register the 'Resolving' event, if it's not done already.
+        /// If powershell is hosted by a native host such as DSC, then PS ALC may be initialized via 'SetPowerShellAssemblyLoadContext' before loading S.M.A.
+        /// </summary>
+        /// <remarks>
+        /// We do this both here and during the initialization of the 'ClrFacade' type.
+        /// This is because we want to make sure the assembly/library resolvers are:
+        ///  1. registered before any script/cmdlet can run.
+        ///  2. registered before 'ClrFacade' gets used for assembly related operations.
+        ///
+        /// The 'ClrFacade' type may be used without a Runspace created, for example, by calling type conversion methods in the 'LanguagePrimitive' type.
+        /// And at the mean time, script or cmdlet may run without the 'ClrFacade' type initialized.
+        /// That's why we attempt to create the singleton of 'PowerShellAssemblyLoadContext' at both places.
+        /// </remarks>
+        static RunspaceBase()
+        {
+            if (PowerShellAssemblyLoadContext.Instance is null)
+            {
+                PowerShellAssemblyLoadContext.InitializeSingleton(string.Empty, throwOnReentry: false);
+            }
+        }
+
         /// <summary>
         /// Construct an instance of an Runspace using a custom
         /// implementation of PSHost.
@@ -237,7 +259,11 @@ public override void OpenAsync()
         private void CoreOpen(bool syncCall)
         {
             bool etwEnabled = RunspaceEventSource.Log.IsEnabled();
-            if (etwEnabled) RunspaceEventSource.Log.OpenRunspaceStart();
+            if (etwEnabled)
+            {
+                RunspaceEventSource.Log.OpenRunspaceStart();
+            }
+
             lock (SyncRoot)
             {
                 // Call fails if RunspaceState is not BeforeOpen.
@@ -260,10 +286,13 @@ private void CoreOpen(bool syncCall)
             RaiseRunspaceStateEvents();
 
             OpenHelper(syncCall);
-            if (etwEnabled) RunspaceEventSource.Log.OpenRunspaceStop();
+            if (etwEnabled)
+            {
+                RunspaceEventSource.Log.OpenRunspaceStop();
+            }
 
 #if LEGACYTELEMETRY
-            // We report startup telementry when opening the runspace - because this is the first time
+            // We report startup telemetry when opening the runspace - because this is the first time
             // we are really using PowerShell. This isn't the cleanest place though, because
             // sometimes there are many runspaces created - the callee ensures telemetry is only
             // reported once. Note that if the host implements IHostProvidesTelemetryData, we rely
@@ -661,7 +690,7 @@ protected RunspaceState RunspaceState
         }
 
         /// <summary>
-        /// This is queue of all the state change event which have occured for
+        /// This is queue of all the state change event which have occurred for
         /// this runspace. RaiseRunspaceStateEvents raises event for each
         /// item in this queue. We don't raise events from with SetRunspaceState
         /// because SetRunspaceState is often called from with in the a lock.
@@ -670,7 +699,7 @@ protected RunspaceState RunspaceState
         /// </summary>
         private Queue<RunspaceEventQueueItem> _runspaceEventQueue = new Queue<RunspaceEventQueueItem>();
 
-        private class RunspaceEventQueueItem
+        private sealed class RunspaceEventQueueItem
         {
             public RunspaceEventQueueItem(RunspaceStateInfo runspaceStateInfo, RunspaceAvailability currentAvailability, RunspaceAvailability newAvailability)
             {
diff --git a/src/System.Management.Automation/engine/hostifaces/ConnectionFactory.cs b/src/System.Management.Automation/engine/hostifaces/ConnectionFactory.cs
index b812e8fe82b..45591ee2906 100644
--- a/src/System.Management.Automation/engine/hostifaces/ConnectionFactory.cs
+++ b/src/System.Management.Automation/engine/hostifaces/ConnectionFactory.cs
@@ -476,58 +476,64 @@ connectionInfo is not VMConnectionInfo &&
         #region Runspace - Remote Factory
 
         /// <summary>
+        /// Creates a remote Runspace.
         /// </summary>
+        /// <param name="connectionInfo">It defines connection path to a remote runspace that needs to be created.</param>
+        /// <param name="host">The explicit PSHost implementation.</param>
         /// <param name="typeTable">
         /// The TypeTable to use while deserializing/serializing remote objects.
         /// TypeTable has the following information used by serializer:
         ///   1. SerializationMethod
         ///   2. SerializationDepth
         ///   3. SpecificSerializationProperties
+        ///
         /// TypeTable has the following information used by deserializer:
         ///   1. TargetTypeForDeserialization
         ///   2. TypeConverter
         /// </param>
-        /// <param name="host"></param>
-        /// <param name="connectionInfo"></param>
-        /// <returns></returns>
+        /// <returns>A remote Runspace.</returns>
         public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo, PSHost host, TypeTable typeTable)
         {
             return CreateRunspace(connectionInfo, host, typeTable, null, null);
         }
 
         /// <summary>
+        /// Creates a remote Runspace.
         /// </summary>
+        /// <param name="connectionInfo">It defines connection path to a remote runspace that needs to be created.</param>
+        /// <param name="host">The explicit PSHost implementation.</param>
         /// <param name="typeTable">
         /// The TypeTable to use while deserializing/serializing remote objects.
         /// TypeTable has the following information used by serializer:
         ///   1. SerializationMethod
         ///   2. SerializationDepth
         ///   3. SpecificSerializationProperties
+        ///
         /// TypeTable has the following information used by deserializer:
         ///   1. TargetTypeForDeserialization
         ///   2. TypeConverter
         /// </param>
-        /// <param name="host"></param>
-        /// <param name="connectionInfo"></param>
         /// <param name="applicationArguments">
         /// Application arguments the server can see in <see cref="System.Management.Automation.Remoting.PSSenderInfo.ApplicationArguments"/>
         /// </param>
-        /// <returns></returns>
+        /// <returns>A remote Runspace.</returns>
         public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo, PSHost host, TypeTable typeTable, PSPrimitiveDictionary applicationArguments)
         {
             return CreateRunspace(connectionInfo, host, typeTable, applicationArguments, null);
         }
 
         /// <summary>
+        /// Creates a remote Runspace.
         /// </summary>
-        /// <param name="connectionInfo"></param>
-        /// <param name="host"></param>
+        /// <param name="connectionInfo">It defines connection path to a remote runspace that needs to be created.</param>
+        /// <param name="host">The explicit PSHost implementation.</param>
         /// <param name="typeTable">
         /// The TypeTable to use while deserializing/serializing remote objects.
         /// TypeTable has the following information used by serializer:
         ///   1. SerializationMethod
         ///   2. SerializationDepth
         ///   3. SpecificSerializationProperties
+        ///
         /// TypeTable has the following information used by deserializer:
         ///   1. TargetTypeForDeserialization
         ///   2. TypeConverter
@@ -536,19 +542,9 @@ public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo, PSH
         /// Application arguments the server can see in <see cref="System.Management.Automation.Remoting.PSSenderInfo.ApplicationArguments"/>
         /// </param>
         /// <param name="name">Name for remote runspace.</param>
-        /// <returns></returns>
+        /// <returns>A remote Runspace.</returns>
         public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo, PSHost host, TypeTable typeTable, PSPrimitiveDictionary applicationArguments, string name)
         {
-            if (connectionInfo is not WSManConnectionInfo &&
-                connectionInfo is not NewProcessConnectionInfo &&
-                connectionInfo is not NamedPipeConnectionInfo &&
-                connectionInfo is not SSHConnectionInfo &&
-                connectionInfo is not VMConnectionInfo &&
-                connectionInfo is not ContainerConnectionInfo)
-            {
-                throw new NotSupportedException();
-            }
-
             if (connectionInfo is WSManConnectionInfo)
             {
                 RemotingCommandUtil.CheckHostRemotingPrerequisites();
@@ -558,19 +554,21 @@ connectionInfo is not VMConnectionInfo &&
         }
 
         /// <summary>
+        /// Creates a remote Runspace.
         /// </summary>
-        /// <param name="host"></param>
-        /// <param name="connectionInfo"></param>
-        /// <returns></returns>
+        /// <param name="host">The explicit PSHost implementation.</param>
+        /// <param name="connectionInfo">It defines connection path to a remote runspace that needs to be created.</param>
+        /// <returns>A remote Runspace.</returns>
         public static Runspace CreateRunspace(PSHost host, RunspaceConnectionInfo connectionInfo)
         {
             return CreateRunspace(connectionInfo, host, null);
         }
 
         /// <summary>
+        /// Creates a remote Runspace.
         /// </summary>
-        /// <param name="connectionInfo"></param>
-        /// <returns></returns>
+        /// <param name="connectionInfo">It defines connection path to a remote runspace that needs to be created.</param>
+        /// <returns>A remote Runspace.</returns>
         public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo)
         {
             return CreateRunspace(null, connectionInfo);
@@ -581,9 +579,20 @@ public static Runspace CreateRunspace(RunspaceConnectionInfo connectionInfo)
         #region V3 Extensions
 
         /// <summary>
+        /// Creates an out-of-process remote Runspace.
         /// </summary>
-        /// <param name="typeTable"></param>
-        /// <returns></returns>
+        /// <param name="typeTable">
+        /// The TypeTable to use while deserializing/serializing remote objects.
+        /// TypeTable has the following information used by serializer:
+        ///   1. SerializationMethod
+        ///   2. SerializationDepth
+        ///   3. SpecificSerializationProperties
+        ///
+        /// TypeTable has the following information used by deserializer:
+        ///   1. TargetTypeForDeserialization
+        ///   2. TypeConverter
+        /// </param>
+        /// <returns>An out-of-process remote Runspace.</returns>
         public static Runspace CreateOutOfProcessRunspace(TypeTable typeTable)
         {
             NewProcessConnectionInfo connectionInfo = new NewProcessConnectionInfo(null);
@@ -592,10 +601,21 @@ public static Runspace CreateOutOfProcessRunspace(TypeTable typeTable)
         }
 
         /// <summary>
+        /// Creates an out-of-process remote Runspace.
         /// </summary>
-        /// <param name="typeTable"></param>
-        /// <param name="processInstance"></param>
-        /// <returns></returns>
+        /// <param name="typeTable">
+        /// The TypeTable to use while deserializing/serializing remote objects.
+        /// TypeTable has the following information used by serializer:
+        ///   1. SerializationMethod
+        ///   2. SerializationDepth
+        ///   3. SpecificSerializationProperties
+        ///
+        /// TypeTable has the following information used by deserializer:
+        ///   1. TargetTypeForDeserialization
+        ///   2. TypeConverter
+        /// </param>
+        /// <param name="processInstance">It represents a PowerShell process that is used for an out-of-process remote Runspace</param>
+        /// <returns>An out-of-process remote Runspace.</returns>
         public static Runspace CreateOutOfProcessRunspace(TypeTable typeTable, PowerShellProcessInstance processInstance)
         {
             NewProcessConnectionInfo connectionInfo = new NewProcessConnectionInfo(null) { Process = processInstance };
diff --git a/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs b/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs
index 75987cc463a..3f47fedb55e 100644
--- a/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs
+++ b/src/System.Management.Automation/engine/hostifaces/FieldDescription.cs
@@ -16,7 +16,7 @@ namespace System.Management.Automation.Host
 {
     /// <summary>
     /// Provides a description of a field for use by <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/>.
-    /// <!--Used by the Msh engine to describe cmdlet parameters.-->
+    /// <!--Used by the engine to describe cmdlet parameters.-->
     /// </summary>
     /// <remarks>
     /// It is permitted to subclass <see cref="System.Management.Automation.Host.FieldDescription"/>
@@ -89,7 +89,7 @@ public string Name
         /// </value>
         /// <remarks>
         /// If not already set by a call to <see cref="System.Management.Automation.Host.FieldDescription.SetParameterType"/>,
-        /// <see cref="System.String"/> will be used as the type.
+        /// <see cref="string"/> will be used as the type.
         /// <!--The value of ParameterTypeName is the string value returned.
         /// by System.Type.Name.-->
         /// </remarks>
@@ -115,7 +115,7 @@ public string Name
         /// </summary>
         /// <remarks>
         /// If not already set by a call to <see cref="System.Management.Automation.Host.FieldDescription.SetParameterType"/>,
-        /// <see cref="System.String"/> will be used as the type.
+        /// <see cref="string"/> will be used as the type.
         /// <!--The value of ParameterTypeName is the string value returned.
         /// by System.Type.Name.-->
         /// </remarks>
@@ -144,7 +144,7 @@ public string Name
         /// to load the containing assembly to access the type information. AssemblyName is used for this purpose.
         ///
         /// If not already set by a call to <see cref="System.Management.Automation.Host.FieldDescription.SetParameterType"/>,
-        /// <see cref="System.String"/> will be used as the type.
+        /// <see cref="string"/> will be used as the type.
         /// </remarks>
         public
         string
@@ -165,7 +165,7 @@ public string Name
 
         /// <summary>
         /// A short, human-presentable message to describe and identify the field.  If supplied, a typical implementation of
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> will use this value instead of
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> will use this value instead of
         /// the field name to identify the field to the user.
         /// </summary>
         /// <exception cref="System.Management.Automation.PSArgumentNullException">
@@ -174,9 +174,9 @@ public string Name
         /// <remarks>
         /// Note that the special character &amp; (ampersand) may be embedded in the label string to identify the next
         /// character in the label as a "hot key" (aka "keyboard accelerator") that the
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> implementation may use
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> implementation may use
         /// to allow the user to quickly set input focus to this field.  The implementation of
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> is responsible for parsing
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> is responsible for parsing
         /// the label string for this special character and rendering it accordingly.
         ///
         /// For example, a field named "SSN" might have "&amp;Social Security Number" as it's label.
@@ -256,15 +256,15 @@ public string Name
         }
 
         /// <summary>
-        /// Gets and sets the default value, if any, for the implementation of <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/>
+        /// Gets and sets the default value, if any, for the implementation of <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/>
         /// to pre-populate its UI with. This is a PSObject instance so that the value can be serialized, converted,
         /// manipulated like any pipeline object.
         /// </summary>
-        ///<remarks>
-        /// It is up to the implementer of <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> to decide if it
+        /// <remarks>
+        /// It is up to the implementer of <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/> to decide if it
         /// can make use of the object in its presentation of the fields prompt.
         ///
-        ///</remarks>
+        /// </remarks>
         public
         PSObject
         DefaultValue
@@ -283,8 +283,8 @@ public string Name
         }
 
         /// <summary>
-        /// Gets the Attribute classes that apply to the field. In the case that <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/>
-        /// is being called from the MSH engine, this will contain the set of prompting attributes that are attached to a
+        /// Gets the Attribute classes that apply to the field. In the case that <see cref="System.Management.Automation.Host.PSHostUserInterface.Prompt"/>
+        /// is being called from the engine, this will contain the set of prompting attributes that are attached to a
         /// cmdlet parameter declaration.
         /// </summary>
         public
diff --git a/src/System.Management.Automation/engine/hostifaces/History.cs b/src/System.Management.Automation/engine/hostifaces/History.cs
index e1100b97487..00a090d4b22 100644
--- a/src/System.Management.Automation/engine/hostifaces/History.cs
+++ b/src/System.Management.Automation/engine/hostifaces/History.cs
@@ -5,6 +5,7 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
 using System.IO;
 using System.Management.Automation;
 using System.Management.Automation.Host;
@@ -509,7 +510,7 @@ internal HistoryInfo[] GetEntries(WildcardPattern wildcardpattern, long count, S
                         long id = _countEntriesAdded;
                         for (long i = 0; i <= count - 1;)
                         {
-                            // if buffersize is changed,we have to loop from max entry to min entry thats not cleared
+                            // if buffersize is changed,we have to loop from max entry to min entry that's not cleared
                             if (_capacity != DefaultHistorySize)
                             {
                                 if (_countEntriesAdded > _capacity)
@@ -580,10 +581,10 @@ internal void ClearEntry(long id)
             }
         }
 
-        ///<summary>
+        /// <summary>
         /// gets the total number of entries added
-        ///</summary>
-        ///<returns>count of total entries added.</returns>
+        /// </summary>
+        /// <returns>count of total entries added.</returns>
         internal int Buffercapacity()
         {
             return _capacity;
@@ -858,7 +859,7 @@ public class GetHistoryCommand : PSCmdlet
         /// </summary>
         /// <value></value>
         [Parameter(Position = 0, ValueFromPipeline = true)]
-        [ValidateRangeAttribute((long)1, long.MaxValue)]
+        [ValidateRange((long)1, long.MaxValue)]
         public long[] Id
         {
             get
@@ -886,7 +887,7 @@ public long[] Id
         /// No of History Entries (starting from last) that are to be displayed.
         /// </summary>
         [Parameter(Position = 1)]
-        [ValidateRangeAttribute(0, (int)Int16.MaxValue)]
+        [ValidateRange(0, (int)Int16.MaxValue)]
         public int Count
         {
             get
@@ -1345,7 +1346,7 @@ public class AddHistoryCommand : PSCmdlet
         /// A Boolean that indicates whether history objects should be
         /// passed to the next element in the pipeline.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Passthru
         {
             get { return _passthru; }
@@ -1435,7 +1436,7 @@ void ProcessRecord()
                 }
 
                 // Read CommandLine property
-                if (!(GetPropertyValue(mshObject, "CommandLine") is string commandLine))
+                if (GetPropertyValue(mshObject, "CommandLine") is not string commandLine)
                 {
                     break;
                 }
@@ -1449,14 +1450,14 @@ void ProcessRecord()
 
                 // Read StartExecutionTime property
                 object temp = GetPropertyValue(mshObject, "StartExecutionTime");
-                if (temp == null || !LanguagePrimitives.TryConvertTo<DateTime>(temp, out DateTime startExecutionTime))
+                if (temp == null || !LanguagePrimitives.TryConvertTo<DateTime>(temp, CultureInfo.CurrentCulture, out DateTime startExecutionTime))
                 {
                     break;
                 }
 
                 // Read EndExecutionTime property
                 temp = GetPropertyValue(mshObject, "EndExecutionTime");
-                if (temp == null || !LanguagePrimitives.TryConvertTo<DateTime>(temp, out DateTime endExecutionTime))
+                if (temp == null || !LanguagePrimitives.TryConvertTo<DateTime>(temp, CultureInfo.CurrentCulture, out DateTime endExecutionTime))
                 {
                     break;
                 }
@@ -1470,7 +1471,7 @@ void ProcessRecord()
                 );
             } while (false);
 
-            // If we are here, an error has occured.
+            // If we are here, an error has occurred.
             Exception ex =
                 new InvalidDataException
                 (
@@ -1503,9 +1504,9 @@ private static
         }
     }
 
-    ///<summary>
+    /// <summary>
     /// This Class implements the Clear History cmdlet
-    ///</summary>
+    /// </summary>
     [Cmdlet(VerbsCommon.Clear, "History", SupportsShouldProcess = true, DefaultParameterSetName = "IDParameter", HelpUri = "https://go.microsoft.com/fwlink/?LinkID=2096691")]
     public class ClearHistoryCommand : PSCmdlet
     {
@@ -1517,7 +1518,7 @@ public class ClearHistoryCommand : PSCmdlet
         /// </summary>
         [Parameter(ParameterSetName = "IDParameter", Position = 0,
            HelpMessage = "Specifies the ID of a command in the session history.Clear history clears only the specified command")]
-        [ValidateRangeAttribute((int)1, int.MaxValue)]
+        [ValidateRange((int)1, int.MaxValue)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public int[] Id
         {
@@ -1541,7 +1542,7 @@ public int[] Id
         /// Command line name of an entry in the session history.
         /// </summary>
         [Parameter(ParameterSetName = "CommandLineParameter", HelpMessage = "Specifies the name of a command in the session history")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] CommandLine
         {
@@ -1561,11 +1562,11 @@ public string[] CommandLine
         /// </summary>
         private string[] _commandline = null;
 
-        ///<summary>
+        /// <summary>
         /// Clears the specified number of history entries
-        ///</summary>
+        /// </summary>
         [Parameter(Mandatory = false, Position = 1, HelpMessage = "Clears the specified number of history entries")]
-        [ValidateRangeAttribute((int)1, int.MaxValue)]
+        [ValidateRange((int)1, int.MaxValue)]
         public int Count
         {
             get
@@ -1650,8 +1651,8 @@ protected override void ProcessRecord()
         /// <summary>
         /// Clears the session history based on the id parameter
         /// takes no parameters
-        /// <returns>Nothing.</returns>
         /// </summary>
+        /// <returns>Nothing.</returns>
         private void ClearHistoryByID()
         {
             if (_countParameterSpecified && Count < 0)
@@ -1758,8 +1759,8 @@ private void ClearHistoryByID()
         /// <summary>
         /// Clears the session history based on the Commandline parameter
         /// takes no parameters
-        /// <returns>Nothing.</returns>
         /// </summary>
+        /// <returns>Nothing.</returns>
         private void ClearHistoryByCmdLine()
         {
             // throw an exception for invalid count values
@@ -1821,12 +1822,12 @@ private void ClearHistoryByCmdLine()
 
         /// <summary>
         /// Clears the session history based on the input parameter
+        /// </summary>
+        /// <returns>Nothing.</returns>
         /// <param name="id">Id of the entry to be cleared.</param>
         /// <param name="count">Count of entries to be cleared.</param>
         /// <param name="cmdline">Cmdline string to be cleared.</param>
         /// <param name="newest">Order of the entries.</param>
-        /// <returns>Nothing.</returns>
-        /// </summary>
         private void ClearHistoryEntries(long id, int count, string cmdline, SwitchParameter newest)
         {
             // if cmdline is null,use default parameter set notion.
diff --git a/src/System.Management.Automation/engine/hostifaces/HostUtilities.cs b/src/System.Management.Automation/engine/hostifaces/HostUtilities.cs
index b3e29423a83..8e5d30be71f 100644
--- a/src/System.Management.Automation/engine/hostifaces/HostUtilities.cs
+++ b/src/System.Management.Automation/engine/hostifaces/HostUtilities.cs
@@ -1,38 +1,19 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System.Collections;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
-using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.Management.Automation.Host;
 using System.Management.Automation.Internal;
-using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Subsystem.Feedback;
 using System.Runtime.InteropServices;
-using System.Security;
 using System.Text;
-using System.Text.RegularExpressions;
-
-using Microsoft.PowerShell.Commands;
 using Microsoft.PowerShell.Commands.Internal.Format;
 
 namespace System.Management.Automation
 {
-    internal enum SuggestionMatchType
-    {
-        /// <summary>Match on a command.</summary>
-        Command = 0,
-        /// <summary>Match based on exception message.</summary>
-        Error = 1,
-        /// <summary>Match by running a script block.</summary>
-        Dynamic = 2,
-
-        /// <summary>Match by fully qualified ErrorId.</summary>
-        ErrorId = 3
-    }
-
     #region Public HostUtilities Class
 
     /// <summary>
@@ -42,81 +23,25 @@ public static class HostUtilities
     {
         #region Internal Access
 
-        private static readonly string s_checkForCommandInCurrentDirectoryScript = @"
-            [System.Diagnostics.DebuggerHidden()]
-            param()
-
-            $foundSuggestion = $false
-
-            if($lastError -and
-                ($lastError.Exception -is ""System.Management.Automation.CommandNotFoundException""))
-            {
-                $escapedCommand = [System.Management.Automation.WildcardPattern]::Escape($lastError.TargetObject)
-                $foundSuggestion = @(Get-Command ($ExecutionContext.SessionState.Path.Combine(""."", $escapedCommand)) -ErrorAction Ignore).Count -gt 0
-            }
-
-            $foundSuggestion
-        ";
-
-        private static readonly string s_createCommandExistsInCurrentDirectoryScript = @"
-            [System.Diagnostics.DebuggerHidden()]
-            param([string] $formatString)
-
-            $formatString -f $lastError.TargetObject,"".\$($lastError.TargetObject)""
-        ";
-
-        private static readonly string s_getFuzzyMatchedCommands = @"
-            [System.Diagnostics.DebuggerHidden()]
-            param([string] $formatString)
+        private static readonly char s_actionIndicator = HostSupportUnicode() ? '\u27a4' : '>';
 
-            $formatString -f [string]::Join(', ', (Get-Command $lastError.TargetObject -UseFuzzyMatch | Select-Object -First 10 -Unique -ExpandProperty Name))
-        ";
-
-        private static readonly List<Hashtable> s_suggestions = InitializeSuggestions();
-
-        private static List<Hashtable> InitializeSuggestions()
+        private static bool HostSupportUnicode()
         {
-            var suggestions = new List<Hashtable>(
-                new Hashtable[]
-                {
-                    NewSuggestion(
-                        id: 1,
-                        category: "Transactions",
-                        matchType: SuggestionMatchType.Command,
-                        rule: "^Start-Transaction",
-                        suggestion: SuggestionStrings.Suggestion_StartTransaction,
-                        enabled: true),
-                    NewSuggestion(
-                        id: 2,
-                        category: "Transactions",
-                        matchType: SuggestionMatchType.Command,
-                        rule: "^Use-Transaction",
-                        suggestion: SuggestionStrings.Suggestion_UseTransaction,
-                        enabled: true),
-                    NewSuggestion(
-                        id: 3,
-                        category: "General",
-                        matchType: SuggestionMatchType.Dynamic,
-                        rule: ScriptBlock.CreateDelayParsedScriptBlock(s_checkForCommandInCurrentDirectoryScript, isProductCode: true),
-                        suggestion: ScriptBlock.CreateDelayParsedScriptBlock(s_createCommandExistsInCurrentDirectoryScript, isProductCode: true),
-                        suggestionArgs: new object[] { CodeGeneration.EscapeSingleQuotedStringContent(SuggestionStrings.Suggestion_CommandExistsInCurrentDirectory) },
-                        enabled: true)
-                });
-
-            if (ExperimentalFeature.IsEnabled("PSCommandNotFoundSuggestion"))
+            // Reference: https://github.com/zkat/supports-unicode/blob/main/src/lib.rs
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
             {
-                suggestions.Add(
-                    NewSuggestion(
-                        id: 4,
-                        category: "General",
-                        matchType: SuggestionMatchType.ErrorId,
-                        rule: "CommandNotFoundException",
-                        suggestion: ScriptBlock.CreateDelayParsedScriptBlock(s_getFuzzyMatchedCommands, isProductCode: true),
-                        suggestionArgs: new object[] { CodeGeneration.EscapeSingleQuotedStringContent(SuggestionStrings.Suggestion_CommandNotFound) },
-                        enabled: true));
+                return Environment.GetEnvironmentVariable("WT_SESSION") is not null ||
+                    Environment.GetEnvironmentVariable("TERM_PROGRAM") is "vscode" ||
+                    Environment.GetEnvironmentVariable("ConEmuTask") is "{cmd:Cmder}" ||
+                    Environment.GetEnvironmentVariable("TERM") is "xterm-256color" or "alacritty";
             }
 
-            return suggestions;
+            string ctype = Environment.GetEnvironmentVariable("LC_ALL") ??
+                Environment.GetEnvironmentVariable("LC_CTYPE") ??
+                Environment.GetEnvironmentVariable("LANG") ??
+                string.Empty;
+
+            return ctype.EndsWith("UTF8") || ctype.EndsWith("UTF-8");
         }
 
         #region GetProfileCommands
@@ -138,16 +63,6 @@ internal static PSObject GetDollarProfile(string allUsersAllHosts, string allUse
             return returnValue;
         }
 
-        /// <summary>
-        /// Gets an array of commands that can be run sequentially to set $profile and run the profile commands.
-        /// </summary>
-        /// <param name="shellId">The id identifying the host or shell used in profile file names.</param>
-        /// <returns></returns>
-        internal static PSCommand[] GetProfileCommands(string shellId)
-        {
-            return HostUtilities.GetProfileCommands(shellId, false);
-        }
-
         /// <summary>
         /// Gets the object that serves as a value to $profile and the paths on it.
         /// </summary>
@@ -233,10 +148,11 @@ internal static string GetFullProfileFileName(string shellId, bool forCurrentUse
             else
             {
                 basePath = GetAllUsersFolderPath(shellId);
-                if (string.IsNullOrEmpty(basePath))
-                {
-                    return string.Empty;
-                }
+            }
+
+            if (string.IsNullOrEmpty(basePath))
+            {
+                return string.Empty;
             }
 
             string profileName = useTestProfile ? "profile_test.ps1" : "profile.ps1";
@@ -307,375 +223,6 @@ internal static string GetMaxLines(string source, int maxLines)
             return returnValue.ToString();
         }
 
-        internal static List<string> GetSuggestion(Runspace runspace)
-        {
-            if (!(runspace is LocalRunspace localRunspace)) { return new List<string>(); }
-
-            // Get the last value of $?
-            bool questionMarkVariableValue = localRunspace.ExecutionContext.QuestionMarkVariableValue;
-
-            // Get the last history item
-            History history = localRunspace.History;
-            HistoryInfo[] entries = history.GetEntries(-1, 1, true);
-
-            if (entries.Length == 0)
-                return new List<string>();
-
-            HistoryInfo lastHistory = entries[0];
-
-            // Get the last error
-            ArrayList errorList = (ArrayList)localRunspace.GetExecutionContext.DollarErrorVariable;
-            object lastError = null;
-
-            if (errorList.Count > 0)
-            {
-                lastError = errorList[0] as Exception;
-                ErrorRecord lastErrorRecord = null;
-
-                // The error was an actual ErrorRecord
-                if (lastError == null)
-                {
-                    lastErrorRecord = errorList[0] as ErrorRecord;
-                }
-                else if (lastError is RuntimeException)
-                {
-                    lastErrorRecord = ((RuntimeException)lastError).ErrorRecord;
-                }
-
-                // If we got information about the error invocation,
-                // we can be more careful with the errors we pass along
-                if ((lastErrorRecord != null) && (lastErrorRecord.InvocationInfo != null))
-                {
-                    if (lastErrorRecord.InvocationInfo.HistoryId == lastHistory.Id)
-                        lastError = lastErrorRecord;
-                    else
-                        lastError = null;
-                }
-            }
-
-            Runspace oldDefault = null;
-            bool changedDefault = false;
-            if (Runspace.DefaultRunspace != runspace)
-            {
-                oldDefault = Runspace.DefaultRunspace;
-                changedDefault = true;
-                Runspace.DefaultRunspace = runspace;
-            }
-
-            List<string> suggestions = null;
-
-            try
-            {
-                suggestions = GetSuggestion(lastHistory, lastError, errorList);
-            }
-            finally
-            {
-                if (changedDefault)
-                {
-                    Runspace.DefaultRunspace = oldDefault;
-                }
-            }
-
-            // Restore $?
-            localRunspace.ExecutionContext.QuestionMarkVariableValue = questionMarkVariableValue;
-            return suggestions;
-        }
-
-        [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
-        internal static List<string> GetSuggestion(HistoryInfo lastHistory, object lastError, ArrayList errorList)
-        {
-            var returnSuggestions = new List<string>();
-
-            PSModuleInfo invocationModule = new PSModuleInfo(true);
-            invocationModule.SessionState.PSVariable.Set("lastHistory", lastHistory);
-            invocationModule.SessionState.PSVariable.Set("lastError", lastError);
-
-            int initialErrorCount = 0;
-
-            // Go through all of the suggestions
-            foreach (Hashtable suggestion in s_suggestions)
-            {
-                initialErrorCount = errorList.Count;
-
-                // Make sure the rule is enabled
-                if (!LanguagePrimitives.IsTrue(suggestion["Enabled"]))
-                    continue;
-
-                SuggestionMatchType matchType = (SuggestionMatchType)LanguagePrimitives.ConvertTo(
-                    suggestion["MatchType"],
-                    typeof(SuggestionMatchType),
-                    CultureInfo.InvariantCulture);
-
-                // If this is a dynamic match, evaluate the ScriptBlock
-                if (matchType == SuggestionMatchType.Dynamic)
-                {
-                    object result = null;
-
-                    ScriptBlock evaluator = suggestion["Rule"] as ScriptBlock;
-                    if (evaluator == null)
-                    {
-                        suggestion["Enabled"] = false;
-
-                        throw new ArgumentException(
-                            SuggestionStrings.RuleMustBeScriptBlock, "Rule");
-                    }
-
-                    try
-                    {
-                        result = invocationModule.Invoke(evaluator, null);
-                    }
-                    catch (Exception)
-                    {
-                        // Catch-all OK. This is a third-party call-out.
-                        suggestion["Enabled"] = false;
-                        continue;
-                    }
-
-                    // If it returned results, evaluate its suggestion
-                    if (LanguagePrimitives.IsTrue(result))
-                    {
-                        string suggestionText = GetSuggestionText(suggestion["Suggestion"], (object[])suggestion["SuggestionArgs"], invocationModule);
-
-                        if (!string.IsNullOrEmpty(suggestionText))
-                        {
-                            string returnString = string.Format(
-                                CultureInfo.CurrentCulture,
-                                "Suggestion [{0},{1}]: {2}",
-                                (int)suggestion["Id"],
-                                (string)suggestion["Category"],
-                                suggestionText);
-
-                            returnSuggestions.Add(returnString);
-                        }
-                    }
-                }
-                else
-                {
-                    string matchText = string.Empty;
-
-                    // Otherwise, this is a Regex match against the
-                    // command or error
-                    if (matchType == SuggestionMatchType.Command)
-                    {
-                        matchText = lastHistory.CommandLine;
-                    }
-                    else if (matchType == SuggestionMatchType.Error)
-                    {
-                        if (lastError != null)
-                        {
-                            Exception lastException = lastError as Exception;
-                            if (lastException != null)
-                            {
-                                matchText = lastException.Message;
-                            }
-                            else
-                            {
-                                matchText = lastError.ToString();
-                            }
-                        }
-                    }
-                    else if (matchType == SuggestionMatchType.ErrorId)
-                    {
-                        if (lastError != null && lastError is ErrorRecord errorRecord)
-                        {
-                            matchText = errorRecord.FullyQualifiedErrorId;
-                        }
-                    }
-                    else
-                    {
-                        suggestion["Enabled"] = false;
-
-                        throw new ArgumentException(
-                            SuggestionStrings.InvalidMatchType,
-                            "MatchType");
-                    }
-
-                    // If the text matches, evaluate the suggestion
-                    if (Regex.IsMatch(matchText, (string)suggestion["Rule"], RegexOptions.IgnoreCase))
-                    {
-                        string suggestionText = GetSuggestionText(suggestion["Suggestion"], (object[])suggestion["SuggestionArgs"], invocationModule);
-
-                        if (!string.IsNullOrEmpty(suggestionText))
-                        {
-                            string returnString = string.Format(
-                                CultureInfo.CurrentCulture,
-                                "Suggestion [{0},{1}]: {2}",
-                                (int)suggestion["Id"],
-                                (string)suggestion["Category"],
-                                suggestionText);
-
-                            returnSuggestions.Add(returnString);
-                        }
-                    }
-                }
-
-                // If the rule generated an error, disable it
-                if (errorList.Count != initialErrorCount)
-                {
-                    suggestion["Enabled"] = false;
-                }
-            }
-
-            return returnSuggestions;
-        }
-
-        /// <summary>
-        /// Remove the GUID from the message if the message is in the pre-defined format.
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="matchPattern"></param>
-        /// <returns></returns>
-        internal static string RemoveGuidFromMessage(string message, out bool matchPattern)
-        {
-            matchPattern = false;
-            if (string.IsNullOrEmpty(message))
-                return message;
-
-            const string pattern = @"^([\d\w]{8}\-[\d\w]{4}\-[\d\w]{4}\-[\d\w]{4}\-[\d\w]{12}:).*";
-            Match matchResult = Regex.Match(message, pattern);
-            if (matchResult.Success)
-            {
-                string partToRemove = matchResult.Groups[1].Captures[0].Value;
-                message = message.Remove(0, partToRemove.Length);
-                matchPattern = true;
-            }
-
-            return message;
-        }
-
-        internal static string RemoveIdentifierInfoFromMessage(string message, out bool matchPattern)
-        {
-            matchPattern = false;
-            if (string.IsNullOrEmpty(message))
-                return message;
-
-            const string pattern = @"^([\d\w]{8}\-[\d\w]{4}\-[\d\w]{4}\-[\d\w]{4}\-[\d\w]{12}:\[.*\]:).*";
-            Match matchResult = Regex.Match(message, pattern);
-            if (matchResult.Success)
-            {
-                string partToRemove = matchResult.Groups[1].Captures[0].Value;
-                message = message.Remove(0, partToRemove.Length);
-                matchPattern = true;
-            }
-
-            return message;
-        }
-
-        /// <summary>
-        /// Create suggestion with string rule and suggestion.
-        /// </summary>
-        /// <param name="id">Identifier for the suggestion.</param>
-        /// <param name="category">Category for the suggestion.</param>
-        /// <param name="matchType">Suggestion match type.</param>
-        /// <param name="rule">Rule to match.</param>
-        /// <param name="suggestion">Suggestion to return.</param>
-        /// <param name="enabled">True if the suggestion is enabled.</param>
-        /// <returns>Hashtable representing the suggestion.</returns>
-        private static Hashtable NewSuggestion(int id, string category, SuggestionMatchType matchType, string rule, string suggestion, bool enabled)
-        {
-            Hashtable result = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
-
-            result["Id"] = id;
-            result["Category"] = category;
-            result["MatchType"] = matchType;
-            result["Rule"] = rule;
-            result["Suggestion"] = suggestion;
-            result["Enabled"] = enabled;
-
-            return result;
-        }
-
-        /// <summary>
-        /// Create suggestion with string rule and scriptblock suggestion.
-        /// </summary>
-        /// <param name="id">Identifier for the suggestion.</param>
-        /// <param name="category">Category for the suggestion.</param>
-        /// <param name="matchType">Suggestion match type.</param>
-        /// <param name="rule">Rule to match.</param>
-        /// <param name="suggestion">Scriptblock to run that returns the suggestion.</param>
-        /// <param name="suggestionArgs">Arguments to pass to suggestion scriptblock.</param>
-        /// <param name="enabled">True if the suggestion is enabled.</param>
-        /// <returns>Hashtable representing the suggestion.</returns>
-        private static Hashtable NewSuggestion(int id, string category, SuggestionMatchType matchType, string rule, ScriptBlock suggestion, object[] suggestionArgs, bool enabled)
-        {
-            Hashtable result = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
-
-            result["Id"] = id;
-            result["Category"] = category;
-            result["MatchType"] = matchType;
-            result["Rule"] = rule;
-            result["Suggestion"] = suggestion;
-            result["SuggestionArgs"] = suggestionArgs;
-            result["Enabled"] = enabled;
-
-            return result;
-        }
-
-        /// <summary>
-        /// Create suggestion with scriptblock rule and suggestion.
-        /// </summary>
-        private static Hashtable NewSuggestion(int id, string category, SuggestionMatchType matchType, ScriptBlock rule, ScriptBlock suggestion, bool enabled)
-        {
-            Hashtable result = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
-
-            result["Id"] = id;
-            result["Category"] = category;
-            result["MatchType"] = matchType;
-            result["Rule"] = rule;
-            result["Suggestion"] = suggestion;
-            result["Enabled"] = enabled;
-
-            return result;
-        }
-
-        /// <summary>
-        /// Create suggestion with scriptblock rule and scriptblock suggestion with arguments.
-        /// </summary>
-        private static Hashtable NewSuggestion(int id, string category, SuggestionMatchType matchType, ScriptBlock rule, ScriptBlock suggestion, object[] suggestionArgs, bool enabled)
-        {
-            Hashtable result = NewSuggestion(id, category, matchType, rule, suggestion, enabled);
-            result.Add("SuggestionArgs", suggestionArgs);
-
-            return result;
-        }
-
-        /// <summary>
-        /// Get suggestion text from suggestion scriptblock.
-        /// </summary>
-        [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Need to keep this for legacy reflection based use")]
-        private static string GetSuggestionText(object suggestion, PSModuleInfo invocationModule)
-        {
-            return GetSuggestionText(suggestion, null, invocationModule);
-        }
-
-        /// <summary>
-        /// Get suggestion text from suggestion scriptblock with arguments.
-        /// </summary>
-        private static string GetSuggestionText(object suggestion, object[] suggestionArgs, PSModuleInfo invocationModule)
-        {
-            if (suggestion is ScriptBlock)
-            {
-                ScriptBlock suggestionScript = (ScriptBlock)suggestion;
-
-                object result = null;
-                try
-                {
-                    result = invocationModule.Invoke(suggestionScript, suggestionArgs);
-                }
-                catch (Exception)
-                {
-                    // Catch-all OK. This is a third-party call-out.
-                    return string.Empty;
-                }
-
-                return (string)LanguagePrimitives.ConvertTo(result, typeof(string), CultureInfo.CurrentCulture);
-            }
-            else
-            {
-                return (string)LanguagePrimitives.ConvertTo(suggestion, typeof(string), CultureInfo.CurrentCulture);
-            }
-        }
-
         /// <summary>
         /// Returns the prompt used in remote sessions: "[machine]: basePrompt"
         /// </summary>
@@ -696,47 +243,19 @@ runspace.ConnectionInfo is VMConnectionInfo ||
                 !string.IsNullOrEmpty(sshConnectionInfo.UserName) &&
                 !System.Environment.UserName.Equals(sshConnectionInfo.UserName, StringComparison.Ordinal))
             {
-                return string.Format(CultureInfo.InvariantCulture, "[{0}@{1}]: {2}", sshConnectionInfo.UserName, sshConnectionInfo.ComputerName, basePrompt);
-            }
-
-            return string.Format(CultureInfo.InvariantCulture, "[{0}]: {1}", runspace.ConnectionInfo.ComputerName, basePrompt);
-        }
-
-        internal static bool IsProcessInteractive(InvocationInfo invocationInfo)
-        {
-#if CORECLR
-            return false;
-#else
-            // CommandOrigin != Runspace means it is in a script
-            if (invocationInfo.CommandOrigin != CommandOrigin.Runspace)
-                return false;
-
-            // If we don't own the window handle, we've been invoked
-            // from another process that just calls "PowerShell -Command"
-            if (System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle == IntPtr.Zero)
-                return false;
-
-            // If the window has been idle for less than two seconds,
-            // they're probably still calling "PowerShell -Command"
-            // but from Start-Process, or the StartProcess API
-            try
-            {
-                System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
-                TimeSpan timeSinceStart = DateTime.Now - currentProcess.StartTime;
-                TimeSpan idleTime = timeSinceStart - currentProcess.TotalProcessorTime;
-
-                // Making it 2 seconds because of things like delayed prompt
-                if (idleTime.TotalSeconds > 2)
-                    return true;
-            }
-            catch (System.ComponentModel.Win32Exception)
-            {
-                // Don't have access to the properties
-                return false;
+                return string.Format(
+                    CultureInfo.InvariantCulture,
+                    "[{0}@{1}]: {2}",
+                    sshConnectionInfo.UserName,
+                    sshConnectionInfo.ComputerName,
+                    basePrompt);
             }
 
-            return false;
-#endif
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "[{0}]: {1}",
+                runspace.ConnectionInfo.ComputerName,
+                basePrompt);
         }
 
         /// <summary>
@@ -896,6 +415,189 @@ public static Collection<PSObject> InvokeOnRunspace(PSCommand command, Runspace
 
         #endregion
 
+        #region Feedback Rendering
+
+        /// <summary>
+        /// Render the feedbacks to the specified host.
+        /// </summary>
+        /// <param name="feedbacks">The feedback results.</param>
+        /// <param name="ui">The host to render to.</param>
+        public static void RenderFeedback(List<FeedbackResult> feedbacks, PSHostUserInterface ui)
+        {
+            // Caption style is dimmed bright white with italic effect, used for fixed captions, such as '[' and ']'.
+            string captionStyle = "\x1b[97;2;3m";
+            string italics = "\x1b[3m";
+            string nameStyle = PSStyle.Instance.Formatting.FeedbackName;
+            string textStyle = PSStyle.Instance.Formatting.FeedbackText;
+            string actionStyle = PSStyle.Instance.Formatting.FeedbackAction;
+            string ansiReset = PSStyle.Instance.Reset;
+
+            if (!ui.SupportsVirtualTerminal)
+            {
+                captionStyle = string.Empty;
+                italics = string.Empty;
+                nameStyle = string.Empty;
+                textStyle = string.Empty;
+                actionStyle = string.Empty;
+                ansiReset = string.Empty;
+            }
+
+            var output = new StringBuilder();
+            var chkset = new HashSet<FeedbackItem>();
+
+            foreach (FeedbackResult entry in feedbacks)
+            {
+                output.AppendLine();
+                output.Append($"{captionStyle}[{ansiReset}")
+                    .Append($"{nameStyle}{italics}{entry.Name}{ansiReset}")
+                    .Append($"{captionStyle}]{ansiReset}");
+
+                FeedbackItem item = entry.Item;
+                chkset.Add(item);
+
+                do
+                {
+                    RenderText(output, item.Header, textStyle, ansiReset, indent: 2, startOnNewLine: true);
+                    RenderActions(output, item, textStyle, actionStyle, ansiReset);
+                    RenderText(output, item.Footer, textStyle, ansiReset, indent: 2, startOnNewLine: true);
+
+                    // A feedback provider may return multiple feedback items, though that may be rare.
+                    item = item.Next;
+                }
+                while (item is not null && chkset.Add(item));
+
+                ui.Write(output.ToString());
+                output.Clear();
+                chkset.Clear();
+            }
+
+            // Feedback section ends with a new line.
+            ui.WriteLine();
+        }
+
+        /// <summary>
+        /// Helper function to render feedback message.
+        /// </summary>
+        /// <param name="output">The output string builder to write to.</param>
+        /// <param name="text">The text to be rendered.</param>
+        /// <param name="style">The style to be used.</param>
+        /// <param name="ansiReset">The ANSI code to reset.</param>
+        /// <param name="indent">The number of spaces for indentation.</param>
+        /// <param name="startOnNewLine">Indicates whether to start writing from a new line.</param>
+        internal static void RenderText(StringBuilder output, string text, string style, string ansiReset, int indent, bool startOnNewLine)
+        {
+            if (text is null)
+            {
+                return;
+            }
+
+            if (startOnNewLine)
+            {
+                // Start writing the text on the next line.
+                output.AppendLine();
+            }
+
+            // Apply the style.
+            output.Append(style);
+
+            int count = 0;
+            var trimChars = "\r\n".AsSpan();
+            var span = text.AsSpan().Trim(trimChars);
+
+            // This loop renders the text with minimal allocation.
+            while (true)
+            {
+                int index = span.IndexOf('\n');
+                var line = index is -1 ? span : span.Slice(0, index);
+
+                if (startOnNewLine || count > 0)
+                {
+                    output.Append(' ', indent);
+                }
+
+                output.Append(line.TrimEnd('\r')).AppendLine();
+
+                // Break out the loop if we are done with the last line.
+                if (index is -1)
+                {
+                    break;
+                }
+
+                // Point to the rest of feedback text.
+                span = span.Slice(index + 1);
+                count++;
+            }
+
+            output.Append(ansiReset);
+        }
+
+        /// <summary>
+        /// Helper function to render feedback actions.
+        /// </summary>
+        /// <param name="output">The output string builder to write to.</param>
+        /// <param name="item">The feedback item to be rendered.</param>
+        /// <param name="textStyle">The style used for feedback messages.</param>
+        /// <param name="actionStyle">The style used for feedback actions.</param>
+        /// <param name="ansiReset">The ANSI code to reset.</param>
+        internal static void RenderActions(StringBuilder output, FeedbackItem item, string textStyle, string actionStyle, string ansiReset)
+        {
+            if (item.RecommendedActions is null || item.RecommendedActions.Count is 0)
+            {
+                return;
+            }
+
+            List<string> actions = item.RecommendedActions;
+            if (item.Layout is FeedbackDisplayLayout.Landscape)
+            {
+                // Add 4-space indentation and write the indicator.
+                output.Append($"    {textStyle}{s_actionIndicator}{ansiReset} ");
+
+                // Then concatenate the action texts.
+                for (int i = 0; i < actions.Count; i++)
+                {
+                    string action = actions[i];
+                    if (i > 0)
+                    {
+                        output.Append(", ");
+                    }
+
+                    output.Append(actionStyle).Append(action).Append(ansiReset);
+                }
+
+                output.AppendLine();
+            }
+            else
+            {
+                int lastIndex = actions.Count - 1;
+                for (int i = 0; i < actions.Count; i++)
+                {
+                    string action = actions[i];
+
+                    // Add 4-space indentation and write the indicator, then write the action.
+                    output.Append($"    {textStyle}{s_actionIndicator}{ansiReset} ");
+
+                    if (action.Contains('\n'))
+                    {
+                        // If the action is a code snippet, properly render it with the right indentation.
+                        RenderText(output, action, actionStyle, ansiReset, indent: 6, startOnNewLine: false);
+
+                        // Append an extra line unless it's the last action.
+                        if (i != lastIndex)
+                        {
+                            output.AppendLine();
+                        }
+                    }
+                    else
+                    {
+                        output.Append(actionStyle).Append(action).Append(ansiReset)
+                            .AppendLine();
+                    }
+                }
+            }
+        }
+
+        #endregion
+
         #endregion
     }
 
diff --git a/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs b/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs
index 3fdba5569c3..f8196167c32 100644
--- a/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs
+++ b/src/System.Management.Automation/engine/hostifaces/InformationalRecord.cs
@@ -13,7 +13,7 @@ namespace System.Management.Automation
     /// A PSInformationalRecord consists of a string Message and the InvocationInfo and pipeline state corresponding
     /// to the command that created the record.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public abstract class InformationalRecord
     {
         /// <remarks>
@@ -159,7 +159,7 @@ internal virtual void ToPSObjectForRemoting(PSObject psObject)
             }
         }
 
-        [DataMember()]
+        [DataMember]
         private string _message;
 
         private InvocationInfo _invocationInfo;
@@ -170,7 +170,7 @@ internal virtual void ToPSObjectForRemoting(PSObject psObject)
     /// <summary>
     /// A warning record in the PSInformationalBuffers.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class WarningRecord : InformationalRecord
     {
         /// <summary>
@@ -226,7 +226,7 @@ public string FullyQualifiedWarningId
     /// <summary>
     /// A debug record in the PSInformationalBuffers.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class DebugRecord : InformationalRecord
     {
         /// <summary>
@@ -247,7 +247,7 @@ public DebugRecord(PSObject record)
     /// <summary>
     /// A verbose record in the PSInformationalBuffers.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class VerboseRecord : InformationalRecord
     {
         /// <summary>
diff --git a/src/System.Management.Automation/engine/hostifaces/InternalHost.cs b/src/System.Management.Automation/engine/hostifaces/InternalHost.cs
index e9a4b0e86e3..c60bff90303 100644
--- a/src/System.Management.Automation/engine/hostifaces/InternalHost.cs
+++ b/src/System.Management.Automation/engine/hostifaces/InternalHost.cs
@@ -448,7 +448,7 @@ public override void NotifyEndApplication()
         /// </summary>
         private IHostSupportsInteractiveSession GetIHostSupportsInteractiveSession()
         {
-            if (!(_externalHostRef.Value is IHostSupportsInteractiveSession host))
+            if (_externalHostRef.Value is not IHostSupportsInteractiveSession host)
             {
                 throw new PSNotImplementedException();
             }
@@ -537,7 +537,10 @@ internal void SetHostRef(PSHost psHost)
         internal void RevertHostRef()
         {
             // nothing to revert if Host reference is not set.
-            if (!IsHostRefSet) { return; }
+            if (!IsHostRefSet)
+            {
+                return;
+            }
 
             _externalHostRef.Revert();
             _internalUIRef.Revert();
diff --git a/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs
index 57f3f675ffc..d8f2ef0bf90 100644
--- a/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs
+++ b/src/System.Management.Automation/engine/hostifaces/InternalHostUserInterface.cs
@@ -209,7 +209,14 @@ public override
                 return;
             }
 
-            _externalUI.Write(foregroundColor, backgroundColor, value);
+            if (PSStyle.Instance.OutputRendering == OutputRendering.PlainText)
+            {
+                _externalUI.Write(value);
+            }
+            else
+            {
+                _externalUI.Write(foregroundColor, backgroundColor, value);
+            }
         }
 
         /// <summary>
@@ -303,7 +310,14 @@ public override
                 return;
             }
 
-            _externalUI.WriteLine(foregroundColor, backgroundColor, value);
+            if (PSStyle.Instance.OutputRendering == OutputRendering.PlainText)
+            {
+                _externalUI.WriteLine(value);
+            }
+            else
+            {
+                _externalUI.WriteLine(foregroundColor, backgroundColor, value);
+            }
         }
 
         /// <summary>
@@ -338,13 +352,7 @@ internal void WriteDebugRecord(DebugRecord record)
         /// Writes the DebugRecord to informational buffers.
         /// </summary>
         /// <param name="record">DebugRecord.</param>
-        internal void WriteDebugInfoBuffers(DebugRecord record)
-        {
-            if (_informationalBuffers != null)
-            {
-                _informationalBuffers.AddDebug(record);
-            }
-        }
+        internal void WriteDebugInfoBuffers(DebugRecord record) => _informationalBuffers?.AddDebug(record);
 
         /// <summary>
         /// Helper function for WriteDebugLine.
@@ -501,7 +509,7 @@ internal PSInformationalBuffers GetInformationalMessageBuffers()
                         break;
 
                     case 3:
-                        // No to All means that we want to stop everytime WriteDebug is called. Since No throws an error, I
+                        // No to All means that we want to stop every time WriteDebug is called. Since No throws an error, I
                         // think that ordinarily, the caller will terminate.  So I don't think the caller will ever get back
                         // calling WriteDebug again, and thus "No to All" might not be a useful option to have.
 
@@ -538,10 +546,7 @@ public override
             }
 
             // Write to Information Buffers
-            if (_informationalBuffers != null)
-            {
-                _informationalBuffers.AddProgress(record);
-            }
+            _informationalBuffers?.AddProgress(record);
 
             if (_externalUI == null)
             {
@@ -588,13 +593,7 @@ internal void WriteVerboseRecord(VerboseRecord record)
         /// Writes the VerboseRecord to informational buffers.
         /// </summary>
         /// <param name="record">VerboseRecord.</param>
-        internal void WriteVerboseInfoBuffers(VerboseRecord record)
-        {
-            if (_informationalBuffers != null)
-            {
-                _informationalBuffers.AddVerbose(record);
-            }
-        }
+        internal void WriteVerboseInfoBuffers(VerboseRecord record) => _informationalBuffers?.AddVerbose(record);
 
         /// <summary>
         /// See base class.
@@ -631,13 +630,7 @@ internal void WriteWarningRecord(WarningRecord record)
         /// Writes the WarningRecord to informational buffers.
         /// </summary>
         /// <param name="record">WarningRecord.</param>
-        internal void WriteWarningInfoBuffers(WarningRecord record)
-        {
-            if (_informationalBuffers != null)
-            {
-                _informationalBuffers.AddWarning(record);
-            }
-        }
+        internal void WriteWarningInfoBuffers(WarningRecord record) => _informationalBuffers?.AddWarning(record);
 
         /// <summary>
         /// </summary>
@@ -657,13 +650,7 @@ internal void WriteInformationRecord(InformationRecord record)
         /// Writes the InformationRecord to informational buffers.
         /// </summary>
         /// <param name="record">WarningRecord.</param>
-        internal void WriteInformationInfoBuffers(InformationRecord record)
-        {
-            if (_informationalBuffers != null)
-            {
-                _informationalBuffers.AddInformation(record);
-            }
-        }
+        internal void WriteInformationInfoBuffers(InformationRecord record) => _informationalBuffers?.AddInformation(record);
 
         internal static Type GetFieldType(FieldDescription field)
         {
@@ -954,8 +941,7 @@ private Collection<int> EmulatePromptForMultipleChoice(string caption,
                         defaultStr = hotkeysAndPlainLabels[1, defaultChoice];
                     }
 
-                    defaultChoicesBuilder.Append(string.Format(Globalization.CultureInfo.InvariantCulture,
-                        "{0}{1}", prepend, defaultStr));
+                    defaultChoicesBuilder.Append(Globalization.CultureInfo.InvariantCulture, $"{prepend}{defaultStr}");
                     prepend = ",";
                 }
 
@@ -963,8 +949,7 @@ private Collection<int> EmulatePromptForMultipleChoice(string caption,
 
                 if (defaultChoiceKeys.Count == 1)
                 {
-                    defaultPrompt = StringUtil.Format(InternalHostUserInterfaceStrings.DefaultChoice,
-                        defaultChoicesStr);
+                    defaultPrompt = StringUtil.Format(InternalHostUserInterfaceStrings.DefaultChoice, defaultChoicesStr);
                 }
                 else
                 {
diff --git a/src/System.Management.Automation/engine/hostifaces/ListModifier.cs b/src/System.Management.Automation/engine/hostifaces/ListModifier.cs
index 4723db9a1d7..aab1cb2e777 100644
--- a/src/System.Management.Automation/engine/hostifaces/ListModifier.cs
+++ b/src/System.Management.Automation/engine/hostifaces/ListModifier.cs
@@ -212,14 +212,11 @@ public void ApplyTo(IList collectionToUpdate)
         /// <param name="collectionToUpdate">The collection to update.</param>
         public void ApplyTo(object collectionToUpdate)
         {
-            if (collectionToUpdate == null)
-            {
-                throw new ArgumentNullException(nameof(collectionToUpdate));
-            }
+            ArgumentNullException.ThrowIfNull(collectionToUpdate);
 
             collectionToUpdate = PSObject.Base(collectionToUpdate);
 
-            if (!(collectionToUpdate is IList list))
+            if (collectionToUpdate is not IList list)
             {
                 throw PSTraceSource.NewInvalidOperationException(PSListModifierStrings.UpdateFailed);
             }
diff --git a/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs b/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs
index 7f10b75525c..822dc552204 100644
--- a/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs
+++ b/src/System.Management.Automation/engine/hostifaces/LocalConnection.cs
@@ -84,10 +84,7 @@ public override PSPrimitiveDictionary GetApplicationPrivateData()
             {
                 lock (this.SyncRoot)
                 {
-                    if (_applicationPrivateData == null)
-                    {
-                        _applicationPrivateData = new PSPrimitiveDictionary();
-                    }
+                    _applicationPrivateData ??= new PSPrimitiveDictionary();
                 }
             }
 
@@ -240,7 +237,7 @@ protected override Pipeline CoreCreatePipeline(string command, bool addToHistory
         /// <summary>
         /// Gets the execution context.
         /// </summary>
-        internal override System.Management.Automation.ExecutionContext GetExecutionContext
+        internal override ExecutionContext GetExecutionContext
         {
             get
             {
@@ -363,7 +360,7 @@ public override Debugger Debugger
             }
         }
 
-        private static readonly string s_debugPreferenceCachePath = Path.Combine(Path.Combine(Platform.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "WindowsPowerShell"), "DebugPreference.clixml");
+        private static readonly string s_debugPreferenceCachePath = Path.Combine(Platform.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "WindowsPowerShell", "DebugPreference.clixml");
         private static readonly object s_debugPreferenceLockObject = new object();
 
         /// <summary>
@@ -768,10 +765,7 @@ internal void LogEngineHealthEvent(Exception exception,
         /// </remarks>
         internal PipelineThread GetPipelineThread()
         {
-            if (_pipelineThread == null)
-            {
-                _pipelineThread = new PipelineThread(this.ApartmentState);
-            }
+            _pipelineThread ??= new PipelineThread(this.ApartmentState);
 
             return _pipelineThread;
         }
@@ -840,18 +834,14 @@ private void DoCloseHelper()
                 if (executionContext != null)
                 {
                     PSHostUserInterface hostUI = executionContext.EngineHostInterface.UI;
-                    if (hostUI != null)
-                    {
-                        hostUI.StopAllTranscribing();
-                    }
+                    hostUI?.StopAllTranscribing();
                 }
 
                 AmsiUtils.Uninitialize();
             }
 
             // Generate the shutdown event
-            if (Events != null)
-                Events.GenerateEvent(PSEngineEvent.Exiting, null, Array.Empty<object>(), null, true, false);
+            Events?.GenerateEvent(PSEngineEvent.Exiting, null, Array.Empty<object>(), null, true, false);
 
             // Stop all running pipelines
             // Note:Do not perform the Cancel in lock. Reason is
@@ -884,7 +874,7 @@ private void DoCloseHelper()
                     return runspaces;
                 });
 
-            // Notify Engine components that that runspace is closing.
+            // Notify Engine components that runspace is closing.
             _engine.Context.RunspaceClosingNotification();
 
             // Log engine lifecycle event.
@@ -944,7 +934,10 @@ private void DoCloseHelper()
         private static void CloseOrDisconnectAllRemoteRunspaces(Func<List<RemoteRunspace>> getRunspaces)
         {
             List<RemoteRunspace> runspaces = getRunspaces();
-            if (runspaces.Count == 0) { return; }
+            if (runspaces.Count == 0)
+            {
+                return;
+            }
 
             // whether the close of all remoterunspaces completed
             using (ManualResetEvent remoteRunspaceCloseCompleted = new ManualResetEvent(false))
@@ -969,7 +962,10 @@ private static void CloseOrDisconnectAllRemoteRunspaces(Func<List<RemoteRunspace
         /// </summary>
         private void StopOrDisconnectAllJobs()
         {
-            if (JobRepository.Jobs.Count == 0) { return; }
+            if (JobRepository.Jobs.Count == 0)
+            {
+                return;
+            }
 
             List<RemoteRunspace> disconnectRunspaces = new List<RemoteRunspace>();
 
@@ -1242,8 +1238,6 @@ protected override void Dispose(bool disposing)
                         RunspaceOpening = null;
                     }
 
-                    Platform.RemoveTemporaryDirectory();
-
                     // Dispose the event manager
                     if (this.ExecutionContext != null && this.ExecutionContext.Events != null)
                     {
@@ -1274,10 +1268,7 @@ public override void Close()
 
             base.Close(); // call base.Close() first to make it stop the pipeline
 
-            if (_pipelineThread != null)
-            {
-                _pipelineThread.Close();
-            }
+            _pipelineThread?.Close();
         }
 
         #endregion IDisposable Members
@@ -1500,7 +1491,6 @@ private void RaiseOperationCompleteEvent()
     /// Defines the exception thrown an error loading modules occurs while opening the runspace. It
     /// contains a list of all of the module errors that have occurred.
     /// </summary>
-    [Serializable]
     public class RunspaceOpenModuleLoadException : RuntimeException
     {
         #region ctor
@@ -1527,7 +1517,7 @@ public RunspaceOpenModuleLoadException(string message)
         /// Initializes a new instance of ScriptBlockToPowerShellNotSupportedException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public RunspaceOpenModuleLoadException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -1567,27 +1557,11 @@ public PSDataCollection<ErrorRecord> ErrorRecords
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected RunspaceOpenModuleLoadException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
-
-        /// <summary>
-        /// Populates a <see cref="SerializationInfo"/> with the
-        /// data needed to serialize the RunspaceOpenModuleLoadException object.
-        /// </summary>
-        /// <param name="info">The <see cref="SerializationInfo"/> to populate with data.</param>
-        /// <param name="context">The destination for this serialization.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-        }
-
         #endregion Serialization
     }
 
diff --git a/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs b/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs
index ab430decb50..a9a3a66b859 100644
--- a/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs
+++ b/src/System.Management.Automation/engine/hostifaces/LocalPipeline.cs
@@ -12,9 +12,6 @@
 #endif
 using System.Threading;
 using Microsoft.PowerShell.Commands;
-using Microsoft.Win32;
-
-using Dbg = System.Management.Automation.Diagnostics;
 
 namespace System.Management.Automation.Runspaces
 {
@@ -192,7 +189,7 @@ protected override void StartPipelineExecution()
                         }
 
 #if !UNIX
-                        if (apartmentState != ApartmentState.Unknown && !Platform.IsNanoServer && !Platform.IsIoT)
+                        if (apartmentState != ApartmentState.Unknown && Platform.IsStaSupported)
                         {
                             invokeThread.SetApartmentState(apartmentState);
                         }
@@ -272,61 +269,60 @@ private void SetupInvokeThread(Thread invokeThread, bool changeName)
             }
         }
 
-        ///<summary>
+        /// <summary>
         /// Helper method for asynchronous invoke
-        ///<returns>Unhandled FlowControl exception if InvocationSettings.ExposeFlowControlExceptions is true.</returns>
-        ///</summary>
+        /// </summary>
+        /// <returns>Unhandled FlowControl exception if InvocationSettings.ExposeFlowControlExceptions is true.</returns>
         private FlowControlException InvokeHelper()
         {
             FlowControlException flowControlException = null;
-
             PipelineProcessor pipelineProcessor = null;
+
             try
             {
-#if TRANSACTIONS_SUPPORTED
-                // 2004/11/08-JeffJon
-                // Transactions will not be supported for the Exchange release
-
-                // Add the transaction to this thread
-                System.Transactions.Transaction.Current = this.LocalRunspace.ExecutionContext.CurrentTransaction;
-#endif
                 // Raise the event for Pipeline.Running
                 RaisePipelineStateEvents();
 
                 // Add this pipeline to history
                 RecordPipelineStartTime();
 
-                // Add automatic transcription, but don't transcribe nested commands
-                if (this.AddToHistory || !IsNested)
+                // Add automatic transcription when it's NOT a pulse pipeline, but don't transcribe nested commands.
+                if (!IsPulsePipeline && (AddToHistory || !IsNested))
                 {
-                    bool needToAddOutDefault = true;
-                    CommandInfo outDefaultCommandInfo = new CmdletInfo("Out-Default", typeof(Microsoft.PowerShell.Commands.OutDefaultCommand), null, null, null);
-
-                    foreach (Command command in this.Commands)
+                    foreach (Command command in Commands)
                     {
-                        if (command.IsScript && (!this.IsPulsePipeline))
+                        if (command.IsScript)
                         {
                             // Transcribe scripts, unless they are the pulse pipeline.
-                            this.Runspace.GetExecutionContext.EngineHostInterface.UI.TranscribeCommand(command.CommandText, null);
+                            Runspace.GetExecutionContext.EngineHostInterface.UI.TranscribeCommand(command.CommandText, invocation: null);
                         }
+                    }
+
+                    if (Runspace.GetExecutionContext.EngineHostInterface.UI.IsTranscribing)
+                    {
+                        bool needToAddOutDefault = true;
+                        Command lastCommand = Commands[Commands.Count - 1];
 
                         // Don't need to add Out-Default if the pipeline already has it, or we've got a pipeline evaluating
-                        // the PSConsoleHostReadLine command.
-                        if (
-                            string.Equals(outDefaultCommandInfo.Name, command.CommandText, StringComparison.OrdinalIgnoreCase) ||
-                            string.Equals("PSConsoleHostReadLine", command.CommandText, StringComparison.OrdinalIgnoreCase) ||
-                            string.Equals("TabExpansion2", command.CommandText, StringComparison.OrdinalIgnoreCase) ||
-                            this.IsPulsePipeline)
+                        // the PSConsoleHostReadLine or the TabExpansion2 commands.
+                        if (string.Equals("Out-Default", lastCommand.CommandText, StringComparison.OrdinalIgnoreCase) ||
+                            string.Equals("PSConsoleHostReadLine", lastCommand.CommandText, StringComparison.OrdinalIgnoreCase) ||
+                            string.Equals("TabExpansion2", lastCommand.CommandText, StringComparison.OrdinalIgnoreCase) ||
+                            (lastCommand.CommandInfo is CmdletInfo cmdlet && cmdlet.ImplementingType == typeof(OutDefaultCommand)))
                         {
                             needToAddOutDefault = false;
                         }
-                    }
 
-                    if (this.Runspace.GetExecutionContext.EngineHostInterface.UI.IsTranscribing)
-                    {
                         if (needToAddOutDefault)
                         {
-                            Command outDefaultCommand = new Command(outDefaultCommandInfo);
+                            var outDefaultCommand = new Command(
+                                new CmdletInfo(
+                                    "Out-Default",
+                                    typeof(OutDefaultCommand),
+                                    helpFile: null,
+                                    PSSnapin: null,
+                                    context: null));
+
                             outDefaultCommand.Parameters.Add(new CommandParameter("Transcript", true));
                             outDefaultCommand.Parameters.Add(new CommandParameter("OutVariable", null));
 
@@ -491,10 +487,7 @@ private FlowControlException InvokeHelper()
                     }
 
                     PSLocalEventManager eventManager = LocalRunspace.Events as PSLocalEventManager;
-                    if (eventManager != null)
-                    {
-                        eventManager.ProcessPendingActions();
-                    }
+                    eventManager?.ProcessPendingActions();
 
                     // restore the trap state...
                     this.LocalRunspace.ExecutionContext.PropagateExceptionsToEnclosingStatementBlock = oldTrapState;
@@ -737,7 +730,7 @@ private void InvokeThreadProc()
         /// <summary>
         /// Stop the running pipeline.
         /// </summary>
-        /// <param name="syncCall">If true pipeline is stoped synchronously
+        /// <param name="syncCall">If true pipeline is stopped synchronously
         /// else asynchronously.</param>
         protected override void ImplementStop(bool syncCall)
         {
@@ -976,7 +969,7 @@ private void InitStreams()
         }
 
         /// <summary>
-        /// This method sets streams to their orignal states from execution context.
+        /// This method sets streams to their original states from execution context.
         /// This is done when Pipeline is completed/failed/stopped ie., termination state.
         /// </summary>
         private void ClearStreams()
@@ -1074,9 +1067,9 @@ internal override void SetHistoryString(string historyString)
         /// ExecutionContext, if it available in TLS
         /// Null, if ExecutionContext is not available in TLS
         /// </returns>
-        internal static System.Management.Automation.ExecutionContext GetExecutionContextFromTLS()
+        internal static ExecutionContext GetExecutionContextFromTLS()
         {
-            System.Management.Automation.Runspaces.Runspace runspace = Runspace.DefaultRunspace;
+            Runspace runspace = Runspace.DefaultRunspace;
             if (runspace == null)
             {
                 return null;
@@ -1165,7 +1158,7 @@ internal PipelineThread(ApartmentState apartmentState)
             _closed = false;
 
 #if !UNIX
-            if (apartmentState != ApartmentState.Unknown && !Platform.IsNanoServer && !Platform.IsIoT)
+            if (apartmentState != ApartmentState.Unknown && Platform.IsStaSupported)
             {
                 _worker.SetApartmentState(apartmentState);
             }
diff --git a/src/System.Management.Automation/engine/hostifaces/MshHost.cs b/src/System.Management.Automation/engine/hostifaces/MshHost.cs
index 7ee89d14b12..bfa79e89f13 100644
--- a/src/System.Management.Automation/engine/hostifaces/MshHost.cs
+++ b/src/System.Management.Automation/engine/hostifaces/MshHost.cs
@@ -7,7 +7,7 @@
 namespace System.Management.Automation.Host
 {
     /// <summary>
-    /// Defines the properties and facilities providing by an application hosting an MSH <see
+    /// Defines the properties and facilities providing by an application hosting PowerShell <see
     /// cref="System.Management.Automation.Runspaces.Runspace"/>.
     /// </summary>
     /// <remarks>
@@ -15,7 +15,7 @@ namespace System.Management.Automation.Host
     /// overrides the abstract methods and properties.  The hosting application creates an instance of its derived class and
     /// passes it to the <see cref="System.Management.Automation.Runspaces.RunspaceFactory"/> CreateRunspace method.
     ///
-    /// From the moment that the instance of the derived class (the "host class") is passed to CreateRunspace, the MSH runtime
+    /// From the moment that the instance of the derived class (the "host class") is passed to CreateRunspace, the PowerShell runtime
     /// can call any of the methods of that class.  The instance must not be destroyed until after the Runspace is closed.
     ///
     /// There is a 1:1 relationship between the instance of the host class and the Runspace instance to which it is passed.  In
@@ -64,9 +64,9 @@ protected PSHost()
         /// The name identifier of the hosting application.
         /// </value>
         /// <example>
-        ///     <MSH>
+        ///     <code>
         ///         if ($Host.Name -ieq "ConsoleHost") { write-host "I'm running in the Console Host" }
-        ///     </MSH>
+        ///     </code>
         /// </example>
         public abstract string Name
         {
@@ -79,7 +79,7 @@ public abstract string Name
         /// </summary>
         /// <remarks>
         /// When implementing this member, it should return the product version number for the product
-        /// that is hosting the Monad engine.
+        /// that is hosting the PowerShell engine.
         /// </remarks>
         /// <value>
         /// The version number of the hosting application.
@@ -296,6 +296,11 @@ public interface IHostSupportsInteractiveSession
         /// <summary>
         /// Called by the engine to notify the host that a runspace push has been requested.
         /// </summary>
+        /// <param name="runspace">
+        /// The runspace to push. This runspace must be a remote runspace and
+        /// not a locally created runspace.
+        /// </param>
+        /// <exception cref="ArgumentException">The specified runspace is not a remote runspace.</exception>
         /// <seealso cref="System.Management.Automation.Host.IHostSupportsInteractiveSession.PushRunspace"/>
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Runspace")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "runspace")]
diff --git a/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs
index f4c3aedfb69..64b200b7d61 100644
--- a/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs
+++ b/src/System.Management.Automation/engine/hostifaces/MshHostRawUserInterface.cs
@@ -62,7 +62,7 @@ public int Y
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.ToString"/>
+        /// Overrides <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "a,b" where a and b are the values of the X and Y properties.
@@ -71,11 +71,11 @@ public override
         string
         ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0},{1}", X, Y);
+            return string.Create(CultureInfo.InvariantCulture, $"{X},{Y}");
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.Equals(object)"/>
+        /// Overrides <see cref="object.Equals(object)"/>
         /// </summary>
         /// <param name="obj">
         /// object to be compared for equality.
@@ -99,7 +99,7 @@ public override
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.GetHashCode"/>
+        /// Overrides <see cref="object.GetHashCode"/>
         /// </summary>
         /// <returns>
         /// Hash code for this instance.
@@ -248,7 +248,7 @@ public int Height
         }
 
         /// <summary>
-        /// Overloads <see cref="System.Object.ToString"/>
+        /// Overloads <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "a,b" where a and b are the values of the Width and Height properties.
@@ -257,11 +257,11 @@ public override
         string
         ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0},{1}", Width, Height);
+            return string.Create(CultureInfo.InvariantCulture, $"{Width},{Height}");
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.Equals(object)"/>
+        /// Overrides <see cref="object.Equals(object)"/>
         /// </summary>
         /// <param name="obj">
         /// object to be compared for equality.
@@ -285,7 +285,7 @@ public override
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.GetHashCode"/>
+        /// Overrides <see cref="object.GetHashCode"/>
         /// </summary>
         /// <returns>
         /// Hash code for this instance.
@@ -557,7 +557,7 @@ bool keyDown
         }
 
         /// <summary>
-        /// Overloads <see cref="System.Object.ToString"/>
+        /// Overloads <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "a,b,c,d" where a, b, c, and d are the values of the VirtualKeyCode, Character, ControlKeyState, and KeyDown properties.
@@ -566,10 +566,10 @@ public override
         string
         ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3}", VirtualKeyCode, Character, ControlKeyState, KeyDown);
+            return string.Create(CultureInfo.InvariantCulture, $"{VirtualKeyCode},{Character},{ControlKeyState},{KeyDown}");
         }
         /// <summary>
-        /// Overrides <see cref="System.Object.Equals(object)"/>
+        /// Overrides <see cref="object.Equals(object)"/>
         /// </summary>
         /// <param name="obj">
         /// object to be compared for equality.
@@ -593,7 +593,7 @@ public override
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.GetHashCode"/>
+        /// Overrides <see cref="object.GetHashCode"/>
         /// </summary>
         /// <returns>
         /// Hash code for this instance.
@@ -787,7 +787,7 @@ public int Bottom
         }
 
         /// <summary>
-        /// Overloads <see cref="System.Object.ToString"/>
+        /// Overloads <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "a,b ; c,d" where a, b, c, and d are values of the Left, Top, Right, and Bottom properties.
@@ -796,11 +796,11 @@ public override
         string
         ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0},{1} ; {2},{3}", Left, Top, Right, Bottom);
+            return string.Create(CultureInfo.InvariantCulture, $"{Left},{Top} ; {Right},{Bottom}");
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.Equals(object)"/>
+        /// Overrides <see cref="object.Equals(object)"/>
         /// </summary>
         /// <param name="obj">
         /// object to be compared for equality.
@@ -824,7 +824,7 @@ public override
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.GetHashCode"/>
+        /// Overrides <see cref="object.GetHashCode"/>
         /// </summary>
         /// <returns>
         /// Hash code for this instance.
@@ -1015,7 +1015,7 @@ public BufferCellType BufferCellType
         }
 
         /// <summary>
-        /// Overloads <see cref="System.Object.ToString"/>
+        /// Overloads <see cref="object.ToString"/>
         /// </summary>
         /// <returns>
         /// "'a' b c d" where a, b, c, and d are the values of the Character, ForegroundColor, BackgroundColor, and Type properties.
@@ -1024,11 +1024,11 @@ public override
         string
         ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "'{0}' {1} {2} {3}", Character, ForegroundColor, BackgroundColor, BufferCellType);
+            return string.Create(CultureInfo.InvariantCulture, $"'{Character}' {ForegroundColor} {BackgroundColor} {BufferCellType}");
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.Equals(object)"/>
+        /// Overrides <see cref="object.Equals(object)"/>
         /// </summary>
         /// <param name="obj">
         /// object to be compared for equality.
@@ -1052,14 +1052,14 @@ public override
         }
 
         /// <summary>
-        /// Overrides <see cref="System.Object.GetHashCode"/>
+        /// Overrides <see cref="object.GetHashCode"/>
         /// <!-- consider (ForegroundColor XOR BackgroundColor) the high-order part of a 32-bit int,
         ///      and Character the lower order half.  Then use the int32.GetHashCode.-->
         /// </summary>
         /// <returns>
         /// Hash code for this instance.
         ///
-        ///</returns>
+        /// </returns>
         public override
         int
         GetHashCode()
@@ -1150,7 +1150,7 @@ public enum
     #endregion Ancillary types
 
     /// <summary>
-    /// Defines the lowest-level user interface functions that an interactive application hosting an MSH
+    /// Defines the lowest-level user interface functions that an interactive application hosting PowerShell
     /// <see cref="System.Management.Automation.Runspaces.Runspace"/> can choose to implement if it wants to
     /// support any cmdlet that does character-mode interaction with the user.
     /// </summary>
@@ -1340,9 +1340,9 @@ public abstract
         /// Key stroke when a key is pressed.
         /// </returns>
         /// <example>
-        ///     <MSH>
+        ///     <code>
         ///         $Host.UI.RawUI.ReadKey()
-        ///     </MSH>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.ReadKey(ReadKeyOptions)"/>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.FlushInputBuffer"/>
@@ -1370,10 +1370,10 @@ public abstract
         /// Neither ReadKeyOptions.IncludeKeyDown nor ReadKeyOptions.IncludeKeyUp is specified.
         /// </exception>
         /// <example>
-        ///     <MSH>
+        ///     <code>
         ///         $option = [System.Management.Automation.Host.ReadKeyOptions]"IncludeKeyDown";
         ///         $host.UI.RawUI.ReadKey($option)
-        ///     </MSH>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Host.ReadKeyOptions"/>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.ReadKey()"/>
@@ -1458,11 +1458,11 @@ public abstract
         /// Provided for clearing regions -- less chatty than passing an array of cells.
         /// </remarks>
         /// <example>
-        ///     <snippet Code="C#">
+        ///     <code>
         ///         using System;
         ///         using System.Management.Automation;
         ///         using System.Management.Automation.Host;
-        ///         namespace Microsoft.Samples.MSH.Cmdlet
+        ///         namespace Microsoft.Samples.Cmdlet
         ///         {
         ///             [Cmdlet("Clear","Screen")]
         ///             public class ClearScreen : PSCmdlet
@@ -1474,7 +1474,7 @@ public abstract
         ///                 }
         ///             }
         ///         }
-        ///     </snippet>
+        ///     </code>
         /// </example>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.NewBufferCellArray(int, int, BufferCell)"/>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.NewBufferCellArray(Size, BufferCell)"/>
@@ -1687,7 +1687,7 @@ char source
         /// <paramref name="contents"/> is null;
         /// Any string in <paramref name="contents"/> is null or empty
         /// </exception>
-        /// <remark>
+        /// <remarks>
         /// If a character C takes one BufferCell to display as determined by LengthInBufferCells,
         /// one BufferCell is allocated with its Character set to C and BufferCellType to BufferCell.Complete.
         /// On the other hand, if C takes two BufferCell, two adjacent BufferCells on a row in
@@ -1701,7 +1701,7 @@ char source
         /// <paramref name="foregroundColor"/> and <paramref name="backgroundColor"/>, respectively.
         /// The resulting array is suitable for use with <see cref="PSHostRawUserInterface.SetBufferContents(Rectangle, BufferCell)"/>
         /// and <see cref="PSHostRawUserInterface.SetBufferContents(Coordinates, BufferCell[,])"/>.
-        /// </remark>
+        /// </remarks>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.NewBufferCellArray(int, int, BufferCell)"/>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.NewBufferCellArray(Size, BufferCell)"/>
         /// <seealso cref="System.Management.Automation.Host.PSHostRawUserInterface.LengthInBufferCells(char)"/>
@@ -1784,7 +1784,7 @@ char source
 
         /// <summary>
         /// Creates a 2D array of BufferCells by examining <paramref name="contents"/>.Character.
-        /// <seealso cref="PSHostRawUserInterface"/>
+        /// <see cref="PSHostRawUserInterface"/>
         /// </summary>
         /// <param name="width">
         /// The number of columns of the resulting array
diff --git a/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs b/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs
index e6d40c72419..5f51ba15751 100644
--- a/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs
+++ b/src/System.Management.Automation/engine/hostifaces/MshHostUserInterface.cs
@@ -112,10 +112,10 @@ public abstract System.Management.Automation.Host.PSHostRawUserInterface RawUI
 
         /// <summary>
         /// The default implementation writes a carriage return to the screen buffer.
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Write(string)"/>
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Write(System.ConsoleColor, System.ConsoleColor, string)"/>
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(string)"/>
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(System.ConsoleColor, System.ConsoleColor, string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Write(string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Write(System.ConsoleColor, System.ConsoleColor, string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(System.ConsoleColor, System.ConsoleColor, string)"/>
         /// </summary>
         public virtual void WriteLine()
         {
@@ -170,10 +170,10 @@ public virtual void WriteLine(ConsoleColor foregroundColor, ConsoleColor backgro
         /// <summary>
         /// Writes a line to the "error display" of the host, as opposed to the "output display," which is
         /// written to by the variants of
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Write(string)"/>
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.Write(System.ConsoleColor, System.ConsoleColor, string)"/>
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine()"/> and
-        /// <seealso cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Write(string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.Write(System.ConsoleColor, System.ConsoleColor, string)"/>
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine()"/> and
+        /// <see cref="System.Management.Automation.Host.PSHostUserInterface.WriteLine(string)"/>
         /// </summary>
         /// <param name="value">
         /// The characters to be written.
@@ -232,6 +232,147 @@ public virtual void WriteLine(ConsoleColor foregroundColor, ConsoleColor backgro
         /// </summary>
         public virtual void WriteInformation(InformationRecord record) { }
 
+        private static bool ShouldOutputPlainText(bool isHost, bool? supportsVirtualTerminal)
+        {
+            var outputRendering = OutputRendering.PlainText;
+
+            if (supportsVirtualTerminal != false)
+            {
+                switch (PSStyle.Instance.OutputRendering)
+                {
+                    case OutputRendering.Host:
+                        outputRendering = isHost ? OutputRendering.Ansi : OutputRendering.PlainText;
+                        break;
+                    default:
+                        outputRendering = PSStyle.Instance.OutputRendering;
+                        break;
+                }
+            }
+
+            return outputRendering == OutputRendering.PlainText;
+        }
+
+        /// <summary>
+        /// The format styles that are supported by the host.
+        /// </summary>
+        public enum FormatStyle
+        {
+            /// <summary>
+            /// Reset the formatting to the default.
+            /// </summary>
+            Reset,
+
+            /// <summary>
+            /// Highlight text used in output formatting.
+            /// </summary>
+            FormatAccent,
+
+            /// <summary>
+            /// Highlight for table headers.
+            /// </summary>
+            TableHeader,
+
+            /// <summary>
+            /// Highlight for detailed error view.
+            /// </summary>
+            ErrorAccent,
+
+            /// <summary>
+            /// Style for error messages.
+            /// </summary>
+            Error,
+
+            /// <summary>
+            /// Style for warning messages.
+            /// </summary>
+            Warning,
+
+            /// <summary>
+            /// Style for verbose messages.
+            /// </summary>
+            Verbose,
+
+            /// <summary>
+            /// Style for debug messages.
+            /// </summary>
+            Debug,
+        }
+
+        /// <summary>
+        /// Get the ANSI escape sequence for the given format style.
+        /// </summary>
+        /// <param name="formatStyle">
+        /// The format style to get the escape sequence for.
+        /// </param>
+        /// <returns>
+        /// The ANSI escape sequence for the given format style.
+        /// </returns>
+        public static string GetFormatStyleString(FormatStyle formatStyle)
+        {
+            if (PSStyle.Instance.OutputRendering == OutputRendering.PlainText)
+            {
+                return string.Empty;
+            }
+
+            PSStyle psstyle = PSStyle.Instance;
+            switch (formatStyle)
+            {
+                case FormatStyle.Reset:
+                    return psstyle.Reset;
+                case FormatStyle.FormatAccent:
+                    return psstyle.Formatting.FormatAccent;
+                case FormatStyle.TableHeader:
+                    return psstyle.Formatting.TableHeader;
+                case FormatStyle.ErrorAccent:
+                    return psstyle.Formatting.ErrorAccent;
+                case FormatStyle.Error:
+                    return psstyle.Formatting.Error;
+                case FormatStyle.Warning:
+                    return psstyle.Formatting.Warning;
+                case FormatStyle.Verbose:
+                    return psstyle.Formatting.Verbose;
+                case FormatStyle.Debug:
+                    return psstyle.Formatting.Debug;
+                default:
+                    return string.Empty;
+            }
+        }
+
+        /// <summary>
+        /// Get the appropriate output string based on different criteria.
+        /// </summary>
+        /// <param name="text">
+        /// The text to format.
+        /// </param>
+        /// <param name="supportsVirtualTerminal">
+        /// True if the host supports virtual terminal.
+        /// </param>
+        /// <returns>
+        /// The formatted text.
+        /// </returns>
+        public static string GetOutputString(string text, bool supportsVirtualTerminal)
+        {
+            return GetOutputString(text, isHost: true, supportsVirtualTerminal: supportsVirtualTerminal);
+        }
+
+        internal static string GetOutputString(string text, bool isHost, bool? supportsVirtualTerminal = null)
+        {
+            var sd = new ValueStringDecorated(text);
+
+            if (sd.IsDecorated)
+            {
+                var outputRendering = OutputRendering.Ansi;
+                if (ShouldOutputPlainText(isHost, supportsVirtualTerminal))
+                {
+                    outputRendering = OutputRendering.PlainText;
+                }
+
+                text = sd.ToString(outputRendering);
+            }
+
+            return text;
+        }
+
         // Gets the state associated with PowerShell transcription.
         //
         // Ideally, this would be associated with the host instance, but remoting recycles host instances
@@ -438,7 +579,7 @@ private void CheckSystemTranscript()
             {
                 if (TranscriptionData.SystemTranscript == null)
                 {
-                    TranscriptionData.SystemTranscript = PSHostUserInterface.GetSystemTranscriptOption(TranscriptionData.SystemTranscript);
+                    TranscriptionData.SystemTranscript = GetSystemTranscriptOption(TranscriptionData.SystemTranscript);
                     if (TranscriptionData.SystemTranscript != null)
                     {
                         LogTranscriptHeader(null, TranscriptionData.SystemTranscript);
@@ -620,13 +761,10 @@ internal void TranscribeResult(Runspace sourceRunspace, string resultText)
 
                     resultText = resultText.TrimEnd();
 
-                    if (ExperimentalFeature.IsEnabled("PSAnsiRendering"))
+                    var text = new ValueStringDecorated(resultText);
+                    if (text.IsDecorated)
                     {
-                        var text = new ValueStringDecorated(resultText);
-                        if (text.IsDecorated)
-                        {
-                            resultText = text.ToString(OutputRendering.PlainText);
-                        }
+                        resultText = text.ToString(OutputRendering.PlainText);
                     }
 
                     foreach (TranscriptionOption transcript in TranscriptionData.Transcripts.Prepend<TranscriptionOption>(TranscriptionData.SystemTranscript))
@@ -754,7 +892,7 @@ private void FlushPendingOutput()
                     {
                         // System transcripts can have high contention. Do exponential back-off on writing
                         // if needed.
-                        int delay = new Random().Next(10) + 1;
+                        int delay = Random.Shared.Next(10) + 1;
                         bool written = false;
 
                         while (!written)
@@ -952,10 +1090,7 @@ internal static TranscriptionOption GetSystemTranscriptOption(TranscriptionOptio
                 // This way, multiple runspaces opened by the same process will share the same transcript.
                 lock (s_systemTranscriptLock)
                 {
-                    if (systemTranscript == null)
-                    {
-                        systemTranscript = PSHostUserInterface.GetTranscriptOptionFromSettings(transcription, currentTranscript);
-                    }
+                    systemTranscript ??= PSHostUserInterface.GetTranscriptOptionFromSettings(transcription, currentTranscript);
                 }
             }
 
@@ -966,7 +1101,7 @@ internal static TranscriptionOption GetSystemTranscriptOption(TranscriptionOptio
         private static readonly object s_systemTranscriptLock = new object();
 
         private static readonly Lazy<Transcription> s_transcriptionSettingCache = new Lazy<Transcription>(
-            () => Utils.GetPolicySetting<Transcription>(Utils.SystemWideThenCurrentUserConfig),
+            static () => Utils.GetPolicySetting<Transcription>(Utils.SystemWideThenCurrentUserConfig),
             isThreadSafe: true);
 
         private static TranscriptionOption GetTranscriptOptionFromSettings(Transcription transcriptConfig, TranscriptionOption currentTranscript)
@@ -1021,6 +1156,11 @@ internal static string GetTranscriptPath(string baseDirectory, bool includeDate)
                 }
             }
 
+            if (string.IsNullOrEmpty(baseDirectory))
+            {
+                return string.Empty;
+            }
+
             if (includeDate)
             {
                 baseDirectory = Path.Combine(baseDirectory, DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture));
@@ -1032,8 +1172,8 @@ internal static string GetTranscriptPath(string baseDirectory, bool includeDate)
             // bytes of randomness (2^48 = 2.8e14) would take an attacker about 891 years to guess
             // a filename (assuming they knew the time the transcript was started).
             // (5 bytes = 3 years, 4 bytes = about a month)
-            byte[] randomBytes = new byte[6];
-            System.Security.Cryptography.RandomNumberGenerator.Create().GetBytes(randomBytes);
+            Span<byte> randomBytes = stackalloc byte[6];
+            System.Security.Cryptography.RandomNumberGenerator.Fill(randomBytes);
             string filename = string.Format(
                         Globalization.CultureInfo.InvariantCulture,
                         "PowerShell_transcript.{0}.{1}.{2:yyyyMMddHHmmss}.txt",
@@ -1108,7 +1248,7 @@ internal void FlushContentToDisk()
         {
             static Encoding GetPathEncoding(string path)
             {
-                using StreamReader reader = new StreamReader(path, Utils.utf8NoBom, detectEncodingFromByteOrderMarks: true);
+                using StreamReader reader = new StreamReader(path, Encoding.Default, detectEncodingFromByteOrderMarks: true);
                 _ = reader.Read();
                 return reader.CurrentEncoding;
             }
@@ -1136,7 +1276,7 @@ static Encoding GetPathEncoding(string path)
                             // file permissions.
                             _contentWriter = new StreamWriter(
                                 new FileStream(this.Path, FileMode.Append, FileAccess.Write, FileShare.Read),
-                                Utils.utf8NoBom);
+                                Encoding.Default);
                         }
 
                         _contentWriter.AutoFlush = true;
@@ -1159,7 +1299,10 @@ static Encoding GetPathEncoding(string path)
         /// </summary>
         public void Dispose()
         {
-            if (_disposed) { return; }
+            if (_disposed)
+            {
+                return;
+            }
 
             // Wait for any pending output to be flushed to disk so that Stop-Transcript
             // can be trusted to immediately have all content from that session in the file)
@@ -1262,7 +1405,7 @@ internal static void BuildHotkeysAndPlainLabels(Collection<ChoiceDescription> ch
                     Text.StringBuilder splitLabel = new Text.StringBuilder(choices[i].Label.Substring(0, andPos), choices[i].Label.Length);
                     if (andPos + 1 < choices[i].Label.Length)
                     {
-                        splitLabel.Append(choices[i].Label.Substring(andPos + 1));
+                        splitLabel.Append(choices[i].Label.AsSpan(andPos + 1));
                         hotkeysAndPlainLabels[0, i] = CultureInfo.CurrentCulture.TextInfo.ToUpper(choices[i].Label.AsSpan(andPos + 1, 1).Trim().ToString());
                     }
 
@@ -1278,7 +1421,7 @@ internal static void BuildHotkeysAndPlainLabels(Collection<ChoiceDescription> ch
                 if (string.Equals(hotkeysAndPlainLabels[0, i], "?", StringComparison.Ordinal))
                 {
                     Exception e = PSTraceSource.NewArgumentException(
-                        string.Format(Globalization.CultureInfo.InvariantCulture, "choices[{0}].Label", i),
+                        string.Create(Globalization.CultureInfo.InvariantCulture, $"choices[{i}].Label"),
                         InternalHostUserInterfaceStrings.InvalidChoiceHotKeyError);
                     throw e;
                 }
@@ -1295,7 +1438,7 @@ internal static void BuildHotkeysAndPlainLabels(Collection<ChoiceDescription> ch
         /// <param name="hotkeysAndPlainLabels"></param>
         /// <returns>
         /// Returns the index into the choices array matching the response string, or -1 if there is no match.
-        ///</returns>
+        /// </returns>
         internal static int DetermineChoicePicked(string response, Collection<ChoiceDescription> choices, string[,] hotkeysAndPlainLabels)
         {
             Diagnostics.Assert(choices != null, "choices: expected a value");
diff --git a/src/System.Management.Automation/engine/hostifaces/NativeCultureResolver.cs b/src/System.Management.Automation/engine/hostifaces/NativeCultureResolver.cs
deleted file mode 100644
index 74306b822df..00000000000
--- a/src/System.Management.Automation/engine/hostifaces/NativeCultureResolver.cs
+++ /dev/null
@@ -1,489 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-/********************************************************************++
-
-Description:
-
-Windows Vista and later support non-traditional UI fallback ie., a
-user on an Arabic machine can choose either French or English(US) as
-UI fallback language.
-
-CLR does not support this (non-traditional) fallback mechanism. So
-the static methods in this class calculate appropriate UI Culture
-natively. ConsoleHot uses this API to set correct Thread UICulture.
-
-Dependent on:
-GetThreadPreferredUILanguages
-SetThreadPreferredUILanguages
-
-These methods are available on Windows Vista and later.
-
---********************************************************************/
-
-using System;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Text;
-using Dbg = System.Management.Automation.Diagnostics;
-using WORD = System.UInt16;
-
-namespace Microsoft.PowerShell
-{
-    /// <summary>
-    /// Custom culture.
-    /// </summary>
-    internal class VistaCultureInfo : CultureInfo
-    {
-        private string[] _fallbacks;
-        // Cache the immediate parent and immediate fallback
-        private VistaCultureInfo _parentCI = null;
-        private object _syncObject = new object();
-
-        /// <summary>
-        /// Constructs a CultureInfo that keeps track of fallbacks.
-        /// </summary>
-        /// <param name="name">Name of the culture to construct.</param>
-        /// <param name="fallbacks">
-        /// ordered,null-delimited list of fallbacks
-        /// </param>
-        public VistaCultureInfo(string name,
-            string[] fallbacks)
-            : base(name)
-        {
-            _fallbacks = fallbacks;
-        }
-
-        /// <summary>
-        /// Returns Parent culture for the current CultureInfo.
-        /// If Parent.Name is null or empty, then chooses the immediate fallback
-        /// If it is not empty, otherwise just returns Parent.
-        /// </summary>
-        public override CultureInfo Parent
-        {
-            get
-            {
-                // First traverse the parent hierarchy as established by CLR.
-                // This is required because there is difference in the parent hierarchy
-                // between CLR and Windows for Chinese. Ex: Native windows has
-                // zh-CN->zh-Hans->neutral whereas CLR has zh-CN->zh-CHS->zh-Hans->neutral
-                if ((base.Parent != null) && (!string.IsNullOrEmpty(base.Parent.Name)))
-                {
-                    return ImmediateParent;
-                }
-
-                // Check whether we have any fallback specified
-                // MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
-                // returns fallback cultures (specified by the user)
-                // and also adds neutral culture where appropriate.
-                // Ex: ja-jp ja en-us en
-                while ((_fallbacks != null) && (_fallbacks.Length > 0))
-                {
-                    string fallback = _fallbacks[0];
-                    string[] fallbacksForParent = null;
-
-                    if (_fallbacks.Length > 1)
-                    {
-                        fallbacksForParent = new string[_fallbacks.Length - 1];
-                        Array.Copy(_fallbacks, 1, fallbacksForParent, 0, _fallbacks.Length - 1);
-                    }
-
-                    try
-                    {
-                        return new VistaCultureInfo(fallback, fallbacksForParent);
-                    }
-                    // if there is any exception constructing the culture..catch..and go to
-                    // the next culture in the list.
-                    catch (ArgumentException)
-                    {
-                        _fallbacks = fallbacksForParent;
-                    }
-                }
-
-                // no fallbacks..just return base parent
-                return base.Parent;
-            }
-        }
-
-        /// <summary>
-        /// This is called to create the parent culture (as defined by CLR)
-        /// of the current culture.
-        /// </summary>
-        private VistaCultureInfo ImmediateParent
-        {
-            get
-            {
-                if (_parentCI == null)
-                {
-                    lock (_syncObject)
-                    {
-                        if (_parentCI == null)
-                        {
-                            string parentCulture = base.Parent.Name;
-                            // remove the parentCulture from the m_fallbacks list.
-                            // ie., remove duplicates from the parent hierarchy.
-                            string[] fallbacksForTheParent = null;
-                            if (_fallbacks != null)
-                            {
-                                fallbacksForTheParent = new string[_fallbacks.Length];
-                                int currentIndex = 0;
-                                foreach (string culture in _fallbacks)
-                                {
-                                    if (!parentCulture.Equals(culture, StringComparison.OrdinalIgnoreCase))
-                                    {
-                                        fallbacksForTheParent[currentIndex] = culture;
-                                        currentIndex++;
-                                    }
-                                }
-
-                                // There is atleast 1 duplicate in m_fallbacks which was not added to
-                                // fallbacksForTheParent array. Resize the array to take care of this.
-                                if (_fallbacks.Length != currentIndex)
-                                {
-                                    Array.Resize<string>(ref fallbacksForTheParent, currentIndex);
-                                }
-                            }
-
-                            _parentCI = new VistaCultureInfo(parentCulture, fallbacksForTheParent);
-                        }
-                    }
-                }
-
-                return _parentCI;
-            }
-        }
-
-        /// <summary>
-        /// Clones the custom CultureInfo retaining the fallbacks.
-        /// </summary>
-        /// <returns>Cloned custom CultureInfo.</returns>
-        public override object Clone()
-        {
-            return new VistaCultureInfo(base.Name, _fallbacks);
-        }
-    }
-
-    /// <summary>
-    /// Static wrappers to get User chosen UICulture (for Vista and later)
-    /// </summary>
-    internal static class NativeCultureResolver
-    {
-        private static CultureInfo s_uiCulture = null;
-        private static CultureInfo s_culture = null;
-        private static object s_syncObject = new object();
-
-        /// <summary>
-        /// Gets the UICulture to be used by console host.
-        /// </summary>
-        internal static CultureInfo UICulture
-        {
-            get
-            {
-                if (s_uiCulture == null)
-                {
-                    lock (s_syncObject)
-                    {
-                        if (s_uiCulture == null)
-                        {
-                            s_uiCulture = GetUICulture();
-                        }
-                    }
-                }
-
-                return (CultureInfo)s_uiCulture.Clone();
-            }
-        }
-
-        internal static CultureInfo Culture
-        {
-            get
-            {
-                if (s_culture == null)
-                {
-                    lock (s_syncObject)
-                    {
-                        if (s_culture == null)
-                        {
-                            s_culture = GetCulture();
-                        }
-                    }
-                }
-
-                return s_culture;
-            }
-        }
-
-        internal static CultureInfo GetUICulture()
-        {
-            return GetUICulture(true);
-        }
-
-        internal static CultureInfo GetCulture()
-        {
-            return GetCulture(true);
-        }
-
-        internal static CultureInfo GetUICulture(bool filterOutNonConsoleCultures)
-        {
-            if (!IsVistaAndLater())
-            {
-                s_uiCulture = EmulateDownLevel();
-                return s_uiCulture;
-            }
-
-            // We are running on Vista
-            string langBuffer = GetUserPreferredUILangs(filterOutNonConsoleCultures);
-            if (!string.IsNullOrEmpty(langBuffer))
-            {
-                try
-                {
-                    string[] fallbacks = langBuffer.Split('\0', StringSplitOptions.RemoveEmptyEntries);
-                    string fallback = fallbacks[0];
-                    string[] fallbacksForParent = null;
-
-                    if (fallbacks.Length > 1)
-                    {
-                        fallbacksForParent = new string[fallbacks.Length - 1];
-                        Array.Copy(fallbacks, 1, fallbacksForParent, 0, fallbacks.Length - 1);
-                    }
-
-                    s_uiCulture = new VistaCultureInfo(fallback, fallbacksForParent);
-                    return s_uiCulture;
-                }
-                catch (ArgumentException)
-                {
-                }
-            }
-
-            s_uiCulture = EmulateDownLevel();
-            return s_uiCulture;
-        }
-
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("GoldMan", "#pw17903:UseOfLCID", Justification = "In XP and below GetUserDefaultLocaleName is not available")]
-        internal static CultureInfo GetCulture(bool filterOutNonConsoleCultures)
-        {
-            CultureInfo returnValue;
-            try
-            {
-                if (!IsVistaAndLater())
-                {
-                    int lcid = GetUserDefaultLCID();
-                    returnValue = new CultureInfo(lcid);
-                }
-                else
-                {
-                    // Vista and above
-                    StringBuilder name = new StringBuilder(16);
-                    if (0 == GetUserDefaultLocaleName(name, 16))
-                    {
-                        // ther is an error retrieving the culture,
-                        // just use the current thread's culture
-                        returnValue = CultureInfo.CurrentCulture;
-                    }
-                    else
-                    {
-                        returnValue = new CultureInfo(name.ToString().Trim());
-                    }
-                }
-
-                if (filterOutNonConsoleCultures)
-                {
-                    // filter out languages that console cannot display..
-                    // Sometimes GetConsoleFallbackUICulture returns neutral cultures
-                    // like "en" on "ar-SA". However neutral culture cannot be
-                    // assigned as CurrentCulture. CreateSpecificCulture fixes
-                    // this problem.
-                    returnValue = CultureInfo.CreateSpecificCulture(
-                        returnValue.GetConsoleFallbackUICulture().Name);
-                }
-            }
-            catch (ArgumentException)
-            {
-                // if there is any exception retrieving the
-                // culture, just use the current thread's culture.
-                returnValue = CultureInfo.CurrentCulture;
-            }
-
-            return returnValue;
-        }
-
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        internal static extern WORD GetUserDefaultUILanguage();
-
-        /// <summary>
-        /// Constructs CultureInfo object without considering any Vista and later
-        /// custom culture fallback logic.
-        /// </summary>
-        /// <returns>A CultureInfo object.</returns>
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("GoldMan", "#pw17903:UseOfLCID", Justification = "This is only called In XP and below where GetUserDefaultLocaleName is not available, or as a fallback when GetThreadPreferredUILanguages fails")]
-        private static CultureInfo EmulateDownLevel()
-        {
-            // GetConsoleFallbackUICulture is not required.
-            // This is retained in order not to break existing code.
-            ushort langId = NativeCultureResolver.GetUserDefaultUILanguage();
-            CultureInfo ci = new CultureInfo((int)langId);
-            return ci.GetConsoleFallbackUICulture();
-        }
-
-        /// <summary>
-        /// Checks if the current operating system is Vista or later.
-        /// </summary>
-        /// <returns>
-        /// true, if vista and above
-        /// false, otherwise.
-        /// </returns>
-        private static bool IsVistaAndLater()
-        {
-            // The version number is obtained from MSDN
-            // 4 - Windows NT 4.0, Windows Me, Windows 98, or Windows 95.
-            // 5 - Windows Server 2003 R2, Windows Server 2003, Windows XP, or Windows 2000.
-            // 6 - Windows Vista or Windows Server "Longhorn".
-
-            if (Environment.OSVersion.Version.Major >= 6)
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// This method is called on vista and above.
-        /// Using GetThreadPreferredUILanguages this method gets
-        /// the UI languages a user has chosen.
-        /// </summary>
-        /// <returns>
-        /// List of ThreadPreferredUILanguages.
-        /// </returns>
-        /// <remarks>
-        /// This method will work only on Vista and later.
-        /// </remarks>
-        private static string GetUserPreferredUILangs(bool filterOutNonConsoleCultures)
-        {
-            long numberLangs = 0;
-            int bufferSize = 0;
-            string returnval = string.Empty;
-
-            if (filterOutNonConsoleCultures)
-            {
-                // Filter out languages that do not support console.
-                // The third parameter should be null otherwise this API will not
-                // set Console CodePage filter.
-                // The MSDN documentation does not call this out explicitly. Opened
-                // Bug 950 (Windows Developer Content) to track this.
-                if (!SetThreadPreferredUILanguages(s_MUI_CONSOLE_FILTER, null, IntPtr.Zero))
-                {
-                    return returnval;
-                }
-            }
-
-            // calculate buffer size required
-            // MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
-            // returns fallback cultures (specified by the user)
-            // and also adds neutral culture where appropriate.
-            // Ex: ja-jp ja en-us en
-            if (!GetThreadPreferredUILanguages(
-                s_MUI_LANGUAGE_NAME | s_MUI_MERGE_SYSTEM_FALLBACK | s_MUI_MERGE_USER_FALLBACK,
-                out numberLangs,
-                null,
-                out bufferSize))
-            {
-                return returnval;
-            }
-
-            // calculate space required to store output.
-            // StringBuilder will not work for this case as CLR
-            // does not copy the entire string if there are delimiter ('\0')
-            // in the middle of a string.
-            byte[] langBufferPtr = new byte[bufferSize * 2];
-
-            // Now get the actual value
-            if (!GetThreadPreferredUILanguages(
-                s_MUI_LANGUAGE_NAME | s_MUI_MERGE_SYSTEM_FALLBACK | s_MUI_MERGE_USER_FALLBACK,
-                out numberLangs,
-                langBufferPtr, // Pointer to a buffer in which this function retrieves an ordered, null-delimited list.
-                out bufferSize))
-            {
-                return returnval;
-            }
-
-            try
-            {
-                string langBuffer = Encoding.Unicode.GetString(langBufferPtr);
-                returnval = langBuffer.Trim().ToLowerInvariant();
-                return returnval;
-            }
-            catch (ArgumentNullException)
-            {
-            }
-            catch (System.Text.DecoderFallbackException)
-            {
-            }
-
-            return returnval;
-        }
-
-        #region Dll Import data
-
-        /// <summary>
-        /// Returns the locale identifier for the user default locale.
-        /// </summary>
-        /// <returns></returns>
-        /// <remarks>
-        /// This function can return data from custom locales. Locales are not
-        /// guaranteed to be the same from computer to computer or between runs
-        /// of an application. If your application must persist or transmit data,
-        /// see Using Persistent Locale Data.
-        /// Applications that are intended to run only on Windows Vista and later
-        /// should use GetUserDefaultLocaleName in preference to this function.
-        /// GetUserDefaultLocaleName provides good support for supplemental locales.
-        /// However, GetUserDefaultLocaleName is not supported for versions of Windows
-        /// prior to Windows Vista.
-        /// </remarks>
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        private static extern int GetUserDefaultLCID();
-
-        /// <summary>
-        /// Retrieves the user default locale name.
-        /// </summary>
-        /// <param name="lpLocaleName"></param>
-        /// <param name="cchLocaleName"></param>
-        /// <returns>
-        /// Returns the size of the buffer containing the locale name, including
-        /// the terminating null character, if successful. The function returns 0
-        /// if it does not succeed. To get extended error information, the application
-        /// can call GetLastError. Possible returns from GetLastError
-        /// include ERR_INSUFFICIENT_BUFFER.
-        /// </returns>
-        /// <remarks>
-        /// </remarks>
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        private static extern int GetUserDefaultLocaleName(
-            [MarshalAs(UnmanagedType.LPWStr)]
-            StringBuilder lpLocaleName,
-            int cchLocaleName);
-
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        private static extern bool SetThreadPreferredUILanguages(int dwFlags,
-            StringBuilder pwszLanguagesBuffer,
-            IntPtr pulNumLanguages);
-
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        private static extern bool GetThreadPreferredUILanguages(int dwFlags,
-            out long pulNumLanguages,
-            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)]
-            byte[] pwszLanguagesBuffer,
-            out int pcchLanguagesBuffer);
-
-        [DllImport("kernel32.dll", SetLastError = false, CharSet = CharSet.Unicode)]
-        internal static extern Int16 SetThreadUILanguage(Int16 langId);
-
-        // private static int MUI_LANGUAGE_ID = 0x4;
-        private static int s_MUI_LANGUAGE_NAME = 0x8;
-        private static int s_MUI_CONSOLE_FILTER = 0x100;
-        private static int s_MUI_MERGE_USER_FALLBACK = 0x20;
-        private static int s_MUI_MERGE_SYSTEM_FALLBACK = 0x10;
-
-        #endregion
-    }
-}
diff --git a/src/System.Management.Automation/engine/hostifaces/PSCommand.cs b/src/System.Management.Automation/engine/hostifaces/PSCommand.cs
index 77bf704f383..6db40850381 100644
--- a/src/System.Management.Automation/engine/hostifaces/PSCommand.cs
+++ b/src/System.Management.Automation/engine/hostifaces/PSCommand.cs
@@ -77,7 +77,7 @@ internal PSCommand(Command command)
         /// current state.
         /// </exception>
         /// <returns>
-        /// A PSCommand instance with <paramref name="cmdlet"/> added.
+        /// A PSCommand instance with <paramref name="command"/> added.
         /// </returns>
         /// <remarks>
         /// This method is not thread safe.
@@ -89,13 +89,10 @@ public PSCommand AddCommand(string command)
         {
             if (command == null)
             {
-                throw PSTraceSource.NewArgumentNullException("cmdlet");
+                throw PSTraceSource.NewArgumentNullException(nameof(command));
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand = new Command(command, false);
             _commands.Add(_currentCommand);
@@ -136,10 +133,7 @@ public PSCommand AddCommand(string cmdlet, bool useLocalScope)
                 throw PSTraceSource.NewArgumentNullException(nameof(cmdlet));
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand = new Command(cmdlet, false, useLocalScope);
             _commands.Add(_currentCommand);
@@ -151,15 +145,15 @@ public PSCommand AddCommand(string cmdlet, bool useLocalScope)
         /// Add a piece of script to construct a command pipeline.
         /// For example, to construct a command string "get-process | foreach { $_.Name }"
         ///     <code>
-        ///         PSCommand command = new PSCommand("get-process").
-        ///                                     AddCommand("foreach { $_.Name }", true);
+        ///         PSCommand command = new PSCommand("get-process")
+        ///             .AddScript("foreach { $_.Name }", true);
         ///     </code>
         /// </summary>
         /// <param name="script">
         /// A string representing the script.
         /// </param>
         /// <returns>
-        /// A PSCommand instance with <paramref name="command"/> added.
+        /// A PSCommand instance with <paramref name="script"/> added.
         /// </returns>
         /// <remarks>
         /// This method is not thread-safe.
@@ -178,10 +172,7 @@ public PSCommand AddScript(string script)
                 throw PSTraceSource.NewArgumentNullException(nameof(script));
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand = new Command(script, true);
             _commands.Add(_currentCommand);
@@ -193,8 +184,8 @@ public PSCommand AddScript(string script)
         /// Add a piece of script to construct a command pipeline.
         /// For example, to construct a command string "get-process | foreach { $_.Name }"
         ///     <code>
-        ///         PSCommand command = new PSCommand("get-process").
-        ///                                     AddCommand("foreach { $_.Name }", true);
+        ///         PSCommand command = new PSCommand("get-process")
+        ///             .AddScript("foreach { $_.Name }", true);
         ///     </code>
         /// </summary>
         /// <param name="script">
@@ -204,7 +195,7 @@ public PSCommand AddScript(string script)
         /// if true local scope is used to run the script command.
         /// </param>
         /// <returns>
-        /// A PSCommand instance with <paramref name="command"/> added.
+        /// A PSCommand instance with <paramref name="script"/> added.
         /// </returns>
         /// <remarks>
         /// This method is not thread-safe.
@@ -223,10 +214,7 @@ public PSCommand AddScript(string script, bool useLocalScope)
                 throw PSTraceSource.NewArgumentNullException(nameof(script));
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand = new Command(script, true, useLocalScope);
             _commands.Add(_currentCommand);
@@ -261,10 +249,7 @@ public PSCommand AddCommand(Command command)
                 throw PSTraceSource.NewArgumentNullException(nameof(command));
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand = command;
             _commands.Add(_currentCommand);
@@ -276,8 +261,9 @@ public PSCommand AddCommand(Command command)
         /// Add a parameter to the last added command.
         /// For example, to construct a command string "get-process | select-object -property name"
         ///     <code>
-        ///         PSCommand command = new PSCommand("get-process").
-        ///                                     AddCommand("select-object").AddParameter("property","name");
+        ///         PSCommand command = new PSCommand("get-process")
+        ///             .AddCommand("select-object")
+        ///             .AddParameter("property", "name");
         ///     </code>
         /// </summary>
         /// <param name="parameterName">
@@ -308,10 +294,7 @@ public PSCommand AddParameter(string parameterName, object value)
                                                                  new object[] { "PSCommand" });
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand.Parameters.Add(parameterName, value);
             return this;
@@ -321,8 +304,9 @@ public PSCommand AddParameter(string parameterName, object value)
         /// Adds a switch parameter to the last added command.
         /// For example, to construct a command string "get-process | sort-object -descending"
         ///     <code>
-        ///         PSCommand command = new PSCommand("get-process").
-        ///                                     AddCommand("sort-object").AddParameter("descending");
+        ///         PSCommand command = new PSCommand("get-process")
+        ///             .AddCommand("sort-object")
+        ///             .AddParameter("descending");
         ///     </code>
         /// </summary>
         /// <param name="parameterName">
@@ -350,10 +334,7 @@ public PSCommand AddParameter(string parameterName)
                                                                  new object[] { "PSCommand" });
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand.Parameters.Add(parameterName, true);
             return this;
@@ -370,10 +351,7 @@ internal PSCommand AddParameter(CommandParameter parameter)
                                                                  new object[] { "PSCommand" });
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand.Parameters.Add(parameter);
             return this;
@@ -383,8 +361,9 @@ internal PSCommand AddParameter(CommandParameter parameter)
         /// Adds an argument to the last added command.
         /// For example, to construct a command string "get-process | select-object name"
         ///     <code>
-        ///         PSCommand command = new PSCommand("get-process").
-        ///                                     AddCommand("select-object").AddParameter("name");
+        ///         PSCommand command = new PSCommand("get-process")
+        ///             .AddCommand("select-object")
+        ///             .AddArgument("name");
         ///     </code>
         /// This will add the value "name" to the positional parameter list of "select-object"
         /// cmdlet. When the command is invoked, this value will get bound to positional parameter 0
@@ -412,10 +391,7 @@ public PSCommand AddArgument(object value)
                                                                  new object[] { "PSCommand" });
             }
 
-            if (_owner != null)
-            {
-                _owner.AssertChangesAreAccepted();
-            }
+            _owner?.AssertChangesAreAccepted();
 
             _currentCommand.Parameters.Add(null, value);
             return this;
diff --git a/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs b/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs
index d51c96a33e0..a0945e21df1 100644
--- a/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs
+++ b/src/System.Management.Automation/engine/hostifaces/PSDataCollection.cs
@@ -116,7 +116,6 @@ internal DataAddingEventArgs(Guid psInstanceId, object itemAdded)
     /// <summary>build
     /// Thread Safe buffer used with PowerShell Hosting interfaces.
     /// </summary>
-    [Serializable]
     public class PSDataCollection<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable, IDisposable, ISerializable
     {
         #region Private Data
@@ -336,7 +335,7 @@ protected PSDataCollection(SerializationInfo info, StreamingContext context)
                 throw PSTraceSource.NewArgumentNullException(nameof(info));
             }
 
-            if (!(info.GetValue("Data", typeof(IList<T>)) is IList<T> listToUse))
+            if (info.GetValue("Data", typeof(IList<T>)) is not IList<T> listToUse)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(info));
             }
@@ -553,11 +552,8 @@ public void Complete()
                 // raise the events outside of the lock.
                 if (raiseEvents)
                 {
-                    if (_readWaitHandle != null)
-                    {
-                        // unblock any readers waiting on the handle
-                        _readWaitHandle.Set();
-                    }
+                    // unblock any readers waiting on the handle
+                    _readWaitHandle?.Set();
 
                     // A temporary variable is used as the Completed may
                     // reach null (because of -='s) after the null check
@@ -798,10 +794,7 @@ public void Clear()
         {
             lock (SyncObject)
             {
-                if (_data != null)
-                {
-                    _data.Clear();
-                }
+                _data?.Clear();
             }
         }
 
@@ -1322,12 +1315,9 @@ internal WaitHandle WaitHandle
                 {
                     lock (SyncObject)
                     {
-                        if (_readWaitHandle == null)
-                        {
-                            // Create the handle signaled if there are objects in the buffer
-                            // or the buffer has been closed.
-                            _readWaitHandle = new ManualResetEvent(_data.Count > 0 || !_isOpen);
-                        }
+                        // Create the handle signaled if there are objects in the buffer
+                        // or the buffer has been closed.
+                        _readWaitHandle ??= new ManualResetEvent(_data.Count > 0 || !_isOpen);
                     }
                 }
 
@@ -1522,7 +1512,7 @@ internal void InternalAddRange(Guid psInstanceId, ICollection collection)
                 {
                     InsertItem(psInstanceId, _data.Count, (T)o);
 
-                    // set raise events if atleast one item is
+                    // set raise events if at least one item is
                     // added.
                     raiseEvents = true;
                 }
@@ -1557,14 +1547,14 @@ internal void DecrementRef()
                 Dbg.Assert(_refCount > 0, "RefCount cannot be <= 0");
 
                 _refCount--;
-                if (_refCount != 0 && (!_blockingEnumerator || _refCount != 1)) return;
-
-                // release threads blocked on waithandle
-                if (_readWaitHandle != null)
+                if (_refCount != 0 && (!_blockingEnumerator || _refCount != 1))
                 {
-                    _readWaitHandle.Set();
+                    return;
                 }
 
+                // release threads blocked on waithandle
+                _readWaitHandle?.Set();
+
                 // release any threads to notify refCount is 0. Enumerator
                 // blocks on this syncObject and it needs to be notified
                 // when the count becomes 0.
@@ -1795,10 +1785,7 @@ protected void Dispose(bool disposing)
                         _readWaitHandle = null;
                     }
 
-                    if (_data != null)
-                    {
-                        _data.Clear();
-                    }
+                    _data?.Clear();
                 }
             }
         }
@@ -2099,65 +2086,35 @@ internal PSDataCollection<DebugRecord> Debug
         /// The item is added to the buffer along with PowerShell InstanceId.
         /// </summary>
         /// <param name="item"></param>
-        internal void AddProgress(ProgressRecord item)
-        {
-            if (progress != null)
-            {
-                progress.InternalAdd(_psInstanceId, item);
-            }
-        }
+        internal void AddProgress(ProgressRecord item) => progress?.InternalAdd(_psInstanceId, item);
 
         /// <summary>
         /// Adds item to the verbose buffer.
         /// The item is added to the buffer along with PowerShell InstanceId.
         /// </summary>
         /// <param name="item"></param>
-        internal void AddVerbose(VerboseRecord item)
-        {
-            if (verbose != null)
-            {
-                verbose.InternalAdd(_psInstanceId, item);
-            }
-        }
+        internal void AddVerbose(VerboseRecord item) => verbose?.InternalAdd(_psInstanceId, item);
 
         /// <summary>
         /// Adds item to the debug buffer.
         /// The item is added to the buffer along with PowerShell InstanceId.
         /// </summary>
         /// <param name="item"></param>
-        internal void AddDebug(DebugRecord item)
-        {
-            if (debug != null)
-            {
-                debug.InternalAdd(_psInstanceId, item);
-            }
-        }
+        internal void AddDebug(DebugRecord item) => debug?.InternalAdd(_psInstanceId, item);
 
         /// <summary>
         /// Adds item to the warning buffer.
         /// The item is added to the buffer along with PowerShell InstanceId.
         /// </summary>
         /// <param name="item"></param>
-        internal void AddWarning(WarningRecord item)
-        {
-            if (Warning != null)
-            {
-                Warning.InternalAdd(_psInstanceId, item);
-            }
-        }
+        internal void AddWarning(WarningRecord item) => Warning?.InternalAdd(_psInstanceId, item);
 
         /// <summary>
         /// Adds item to the information buffer.
         /// The item is added to the buffer along with PowerShell InstanceId.
         /// </summary>
         /// <param name="item"></param>
-        internal void AddInformation(InformationRecord item)
-        {
-            if (Information != null)
-            {
-                Information.InternalAdd(_psInstanceId, item);
-            }
-        }
+        internal void AddInformation(InformationRecord item) => Information?.InternalAdd(_psInstanceId, item);
 
         #endregion
     }
diff --git a/src/System.Management.Automation/engine/hostifaces/PSTask.cs b/src/System.Management.Automation/engine/hostifaces/PSTask.cs
index 5f05d267fcd..56bdabbff14 100644
--- a/src/System.Management.Automation/engine/hostifaces/PSTask.cs
+++ b/src/System.Management.Automation/engine/hostifaces/PSTask.cs
@@ -68,6 +68,7 @@ protected override void InitializePowershell()
             _powershell.Streams.Warning.DataAdded += (sender, args) => HandleWarningData();
             _powershell.Streams.Verbose.DataAdded += (sender, args) => HandleVerboseData();
             _powershell.Streams.Debug.DataAdded += (sender, args) => HandleDebugData();
+            _powershell.Streams.Progress.DataAdded += (sender, args) => HandleProgressData();
             _powershell.Streams.Information.DataAdded += (sender, args) => HandleInformationData();
 
             // State change handler
@@ -132,6 +133,15 @@ private void HandleInformationData()
             }
         }
 
+        private void HandleProgressData()
+        {
+            foreach (var item in _powershell.Streams.Progress.ReadAll())
+            {
+                _dataStreamWriter.Add(
+                    new PSStreamObject(PSStreamObjectType.Progress, item));
+            }
+        }
+
         #endregion
 
         #region Event handlers
@@ -486,13 +496,7 @@ public void Start(Runspace runspace)
         /// <summary>
         /// Signals the running task to stop.
         /// </summary>
-        public void SignalStop()
-        {
-            if (_powershell != null)
-            {
-                _powershell.BeginStop(null, null);
-            }
-        }
+        public void SignalStop() => _powershell?.BeginStop(null, null);
 
         #endregion
     }
@@ -908,7 +912,7 @@ private void CheckForComplete()
 
         private Runspace GetRunspace(int taskId)
         {
-            var runspaceName = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", PSTask.RunspaceName, taskId);
+            var runspaceName = string.Create(CultureInfo.InvariantCulture, $"{PSTask.RunspaceName}:{taskId}");
 
             if (_useRunspacePool && _runspacePool.TryDequeue(out Runspace runspace))
             {
@@ -932,8 +936,23 @@ private Runspace GetRunspace(int taskId)
 
             // Create and initialize a new Runspace
             var iss = InitialSessionState.CreateDefault2();
-            iss.LanguageMode = (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Enforce)
-                ? PSLanguageMode.ConstrainedLanguage : PSLanguageMode.FullLanguage;
+            switch (SystemPolicy.GetSystemLockdownPolicy())
+            {
+                case SystemEnforcementMode.Enforce:
+                    iss.LanguageMode = PSLanguageMode.ConstrainedLanguage;
+                    break;
+
+                case SystemEnforcementMode.Audit:
+                    // In audit mode, CL restrictions are not enforced and instead audit
+                    // log entries are created.
+                    iss.LanguageMode = PSLanguageMode.ConstrainedLanguage;
+                    break;
+
+                case SystemEnforcementMode.None:
+                    iss.LanguageMode = PSLanguageMode.FullLanguage;
+                    break;
+            }
+
             runspace = RunspaceFactory.CreateRunspace(iss);
             runspace.Name = runspaceName;
             _activeRunspaces.TryAdd(runspace.Id, runspace);
@@ -1526,12 +1545,9 @@ public Debugger Debugger
         {
             get
             {
-                if (_jobDebuggerWrapper == null)
-                {
-                    _jobDebuggerWrapper = new PSTaskChildDebugger(
-                        _task.Debugger,
-                        this.Name);
-                }
+                _jobDebuggerWrapper ??= new PSTaskChildDebugger(
+                    _task.Debugger,
+                    this.Name);
 
                 return _jobDebuggerWrapper;
             }
diff --git a/src/System.Management.Automation/engine/hostifaces/Pipeline.cs b/src/System.Management.Automation/engine/hostifaces/Pipeline.cs
index 874691852cb..f7bca01fe7b 100644
--- a/src/System.Management.Automation/engine/hostifaces/Pipeline.cs
+++ b/src/System.Management.Automation/engine/hostifaces/Pipeline.cs
@@ -16,7 +16,6 @@ namespace System.Management.Automation.Runspaces
     /// Defines exception which is thrown when state of the pipeline is different
     /// from expected state.
     /// </summary>
-    [Serializable]
     public class InvalidPipelineStateException : SystemException
     {
         /// <summary>
@@ -86,9 +85,10 @@ internal InvalidPipelineStateException(string message, PipelineState currentStat
         /// The <see cref="StreamingContext"/> that contains contextual information
         /// about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         private InvalidPipelineStateException(SerializationInfo info, StreamingContext context)
-        : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -445,7 +445,7 @@ internal void SetHadErrors(bool status)
         ///
         /// This flag is used to force the redirection. By default it is false to maintain compatibility with
         /// V1, but the V2 hosting interface (PowerShell class) sets this flag to true to ensure the global
-        /// error output pipe is always set and $ErrorActionPreference when invoking the Pipeline.
+        /// error output pipe is always set and $ErrorActionPreference is checked when invoking the Pipeline.
         /// </summary>
         internal bool RedirectShellErrorOutputPipe { get; set; } = false;
 
diff --git a/src/System.Management.Automation/engine/hostifaces/PowerShell.cs b/src/System.Management.Automation/engine/hostifaces/PowerShell.cs
index 3829634c8c8..3af978ea165 100644
--- a/src/System.Management.Automation/engine/hostifaces/PowerShell.cs
+++ b/src/System.Management.Automation/engine/hostifaces/PowerShell.cs
@@ -31,7 +31,6 @@ namespace System.Management.Automation
     /// Defines exception which is thrown when state of the PowerShell is different
     /// from the expected state.
     /// </summary>
-    [Serializable]
     public class InvalidPowerShellStateException : SystemException
     {
         /// <summary>
@@ -97,10 +96,11 @@ internal InvalidPowerShellStateException(PSInvocationState currentState)
         /// The <see cref="StreamingContext"/> that contains contextual information
         /// about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected
         InvalidPowerShellStateException(SerializationInfo info, StreamingContext context)
-        : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -762,10 +762,7 @@ internal void InitForRemotePipeline(CommandCollection command, ObjectStreamBase
 
             // create the client remote powershell for remoting
             // communications
-            if (RemotePowerShell == null)
-            {
-                RemotePowerShell = new ClientRemotePowerShell(this, ((RunspacePool)_rsConnection).RemoteRunspacePoolInternal);
-            }
+            RemotePowerShell ??= new ClientRemotePowerShell(this, ((RunspacePool)_rsConnection).RemoteRunspacePoolInternal);
 
             // If we get here, we don't call 'Invoke' or any of it's friends on 'this', instead we serialize 'this' in PowerShell.ToPSObjectForRemoting.
             // Without the following two steps, we'll be missing the 'ExtraCommands' on the serialized instance of 'this'.
@@ -804,10 +801,7 @@ internal void InitForRemotePipelineConnect(ObjectStreamBase inputstream, ObjectS
 
             RedirectShellErrorOutputPipe = redirectShellErrorOutputPipe;
 
-            if (RemotePowerShell == null)
-            {
-                RemotePowerShell = new ClientRemotePowerShell(this, ((RunspacePool)_rsConnection).RemoteRunspacePoolInternal);
-            }
+            RemotePowerShell ??= new ClientRemotePowerShell(this, ((RunspacePool)_rsConnection).RemoteRunspacePoolInternal);
 
             if (!RemotePowerShell.Initialized)
             {
@@ -952,9 +946,11 @@ private static PowerShell Create(bool isNested, PSCommand psCommand, Collection<
 
         /// <summary>
         /// Add a cmdlet to construct a command pipeline.
-        /// For example, to construct a command string "get-process | sort-object",
+        /// For example, to construct a command string "Get-Process | Sort-Object",
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").AddCommand("sort-object");
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddCommand("Get-Process")
+        ///             .AddCommand("Sort-Object");
         ///     </code>
         /// </summary>
         /// <param name="cmdlet">
@@ -990,9 +986,11 @@ public PowerShell AddCommand(string cmdlet)
 
         /// <summary>
         /// Add a cmdlet to construct a command pipeline.
-        /// For example, to construct a command string "get-process | sort-object",
+        /// For example, to construct a command string "Get-Process | Sort-Object",
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").AddCommand("sort-object");
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddCommand("Get-Process", true)
+        ///             .AddCommand("Sort-Object", true);
         ///     </code>
         /// </summary>
         /// <param name="cmdlet">
@@ -1031,10 +1029,10 @@ public PowerShell AddCommand(string cmdlet, bool useLocalScope)
 
         /// <summary>
         /// Add a piece of script to construct a command pipeline.
-        /// For example, to construct a command string "get-process | foreach { $_.Name }"
+        /// For example, to construct a command string "Get-Process | ForEach-Object { $_.Name }"
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").
-        ///                                     AddCommand("foreach { $_.Name }", true);
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddScript("Get-Process | ForEach-Object { $_.Name }");
         ///     </code>
         /// </summary>
         /// <param name="script">
@@ -1070,10 +1068,10 @@ public PowerShell AddScript(string script)
 
         /// <summary>
         /// Add a piece of script to construct a command pipeline.
-        /// For example, to construct a command string "get-process | foreach { $_.Name }"
+        /// For example, to construct a command string "Get-Process | ForEach-Object { $_.Name }"
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").
-        ///                                     AddCommand("foreach { $_.Name }", true);
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddScript("Get-Process | ForEach-Object { $_.Name }", true);
         ///     </code>
         /// </summary>
         /// <param name="script">
@@ -1179,10 +1177,11 @@ public PowerShell AddCommand(CommandInfo commandInfo)
 
         /// <summary>
         /// Add a parameter to the last added command.
-        /// For example, to construct a command string "get-process | select-object -property name"
+        /// For example, to construct a command string "Get-Process | Select-Object -Property Name"
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").
-        ///                                     AddCommand("select-object").AddParameter("property","name");
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddCommand("Get-Process")
+        ///             .AddCommand("Select-Object").AddParameter("Property", "Name");
         ///     </code>
         /// </summary>
         /// <param name="parameterName">
@@ -1370,7 +1369,7 @@ public PowerShell AddParameters(IDictionary parameters)
 
                 foreach (DictionaryEntry entry in parameters)
                 {
-                    if (!(entry.Key is string parameterName))
+                    if (entry.Key is not string parameterName)
                     {
                         throw PSTraceSource.NewArgumentException(nameof(parameters), PowerShellStrings.KeyMustBeString);
                     }
@@ -1384,10 +1383,11 @@ public PowerShell AddParameters(IDictionary parameters)
 
         /// <summary>
         /// Adds an argument to the last added command.
-        /// For example, to construct a command string "get-process | select-object name"
+        /// For example, to construct a command string "Get-Process | Select-Object Name"
         ///     <code>
-        ///         PowerShell shell = PowerShell.Create("get-process").
-        ///                                     AddCommand("select-object").AddParameter("name");
+        ///         PowerShell shell = PowerShell.Create()
+        ///             .AddCommand("Get-Process")
+        ///             .AddCommand("Select-Object").AddArgument("Name");
         ///     </code>
         /// This will add the value "name" to the positional parameter list of "select-object"
         /// cmdlet. When the command is invoked, this value will get bound to positional parameter 0
@@ -2236,10 +2236,7 @@ internal void InvokeWithDebugger(
             {
                 if (addToHistory)
                 {
-                    if (settings == null)
-                    {
-                        settings = new PSInvocationSettings();
-                    }
+                    settings ??= new PSInvocationSettings();
 
                     settings.AddToHistory = true;
                 }
@@ -3079,6 +3076,10 @@ public IAsyncResult BeginInvoke<TInput, TOutput>(PSDataCollection<TInput> input,
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// </exception>
         public Task<PSDataCollection<PSObject>> InvokeAsync()
             => Task<PSDataCollection<PSObject>>.Factory.FromAsync(BeginInvoke(), _endInvokeMethod);
 
@@ -3120,6 +3121,10 @@ public Task<PSDataCollection<PSObject>> InvokeAsync()
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// </exception>
         public Task<PSDataCollection<PSObject>> InvokeAsync<T>(PSDataCollection<T> input)
             => Task<PSDataCollection<PSObject>>.Factory.FromAsync(BeginInvoke<T>(input), _endInvokeMethod);
 
@@ -3174,6 +3179,10 @@ public Task<PSDataCollection<PSObject>> InvokeAsync<T>(PSDataCollection<T> input
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// </exception>
         public Task<PSDataCollection<PSObject>> InvokeAsync<T>(PSDataCollection<T> input, PSInvocationSettings settings, AsyncCallback callback, object state)
             => Task<PSDataCollection<PSObject>>.Factory.FromAsync(BeginInvoke<T>(input, settings, callback, state), _endInvokeMethod);
 
@@ -3222,6 +3231,14 @@ public Task<PSDataCollection<PSObject>> InvokeAsync<T>(PSDataCollection<T> input
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// To collect partial output in this scenario,
+        /// supply a <see cref="System.Management.Automation.PSDataCollection{T}" /> for the <paramref name="output"/> parameter,
+        /// and either add a handler for the <see cref="System.Management.Automation.PSDataCollection{T}.DataAdding"/> event
+        /// or catch the exception and enumerate the object supplied for <paramref name="output"/>.
+        /// </exception>
         public Task<PSDataCollection<PSObject>> InvokeAsync<TInput, TOutput>(PSDataCollection<TInput> input, PSDataCollection<TOutput> output)
             => Task<PSDataCollection<PSObject>>.Factory.FromAsync(BeginInvoke<TInput, TOutput>(input, output), _endInvokeMethod);
 
@@ -3284,6 +3301,14 @@ public Task<PSDataCollection<PSObject>> InvokeAsync<TInput, TOutput>(PSDataColle
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// To collect partial output in this scenario,
+        /// supply a <see cref="System.Management.Automation.PSDataCollection{T}" /> for the <paramref name="output"/> parameter,
+        /// and either add a handler for the <see cref="System.Management.Automation.PSDataCollection{T}.DataAdding"/> event
+        /// or catch the exception and use object supplied for <paramref name="output"/>.
+        /// </exception>
         public Task<PSDataCollection<PSObject>> InvokeAsync<TInput, TOutput>(PSDataCollection<TInput> input, PSDataCollection<TOutput> output, PSInvocationSettings settings, AsyncCallback callback, object state)
             => Task<PSDataCollection<PSObject>>.Factory.FromAsync(BeginInvoke<TInput, TOutput>(input, output, settings, callback, state), _endInvokeMethod);
 
@@ -3323,7 +3348,7 @@ public Task<PSDataCollection<PSObject>> InvokeAsync<TInput, TOutput>(PSDataColle
         /// </exception>
         private IAsyncResult BeginBatchInvoke<TInput, TOutput>(PSDataCollection<TInput> input, PSDataCollection<TOutput> output, PSInvocationSettings settings, AsyncCallback callback, object state)
         {
-            if (!((object)output is PSDataCollection<PSObject> asyncOutput))
+            if ((object)output is not PSDataCollection<PSObject> asyncOutput)
             {
                 throw PSTraceSource.NewInvalidOperationException();
             }
@@ -3493,9 +3518,7 @@ private void BatchInvocationCallback(IAsyncResult result)
                 ActionPreference preference;
                 if (_batchInvocationSettings != null)
                 {
-                    preference = (_batchInvocationSettings.ErrorActionPreference.HasValue) ?
-                        _batchInvocationSettings.ErrorActionPreference.Value
-                        : ActionPreference.Continue;
+                    preference = _batchInvocationSettings.ErrorActionPreference ?? ActionPreference.Continue;
                 }
                 else
                 {
@@ -3518,10 +3541,7 @@ private void BatchInvocationCallback(IAsyncResult result)
                         break;
                 }
 
-                if (objs == null)
-                {
-                    objs = _batchAsyncResult.Output;
-                }
+                objs ??= _batchAsyncResult.Output;
 
                 DoRemainingBatchCommands(objs);
             }
@@ -3655,6 +3675,14 @@ private void AppendExceptionToErrorStream(Exception e)
         /// asyncResult object was not created by calling BeginInvoke
         /// on this PowerShell instance.
         /// </exception>
+        /// <exception cref="System.Management.Automation.PipelineStoppedException">
+        /// The running PowerShell pipeline was stopped.
+        /// This occurs when <see cref="PowerShell.Stop"/> or <see cref="PowerShell.StopAsync(AsyncCallback, object)"/> is called.
+        /// To collect partial output in this scenario,
+        /// supply a <see cref="System.Management.Automation.PSDataCollection{T}" /> to <see cref="PowerShell.BeginInvoke"/> for the <paramref name="output"/> parameter
+        /// and either add a handler for the <see cref="System.Management.Automation.PSDataCollection{T}.DataAdding"/> event
+        /// or catch the exception and enumerate the object supplied.
+        /// </exception>
         public PSDataCollection<PSObject> EndInvoke(IAsyncResult asyncResult)
         {
             try
@@ -3706,6 +3734,10 @@ public PSDataCollection<PSObject> EndInvoke(IAsyncResult asyncResult)
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <remarks>
+        /// When used with <see cref="PowerShell.Invoke()"/>, that call will return a partial result.
+        /// When used with <see cref="PowerShell.InvokeAsync"/>, that call will throw a <see cref="System.Management.Automation.PipelineStoppedException"/>.
+        /// </remarks>
         public void Stop()
         {
             try
@@ -3762,6 +3794,10 @@ public IAsyncResult BeginStop(AsyncCallback callback, object state)
         /// asyncResult object was not created by calling BeginStop
         /// on this PowerShell instance.
         /// </exception>
+        /// <remarks>
+        /// When used with <see cref="PowerShell.Invoke()"/>, that call will return a partial result.
+        /// When used with <see cref="PowerShell.InvokeAsync"/>, that call will throw a <see cref="System.Management.Automation.PipelineStoppedException"/>.
+        /// </remarks>
         public void EndStop(IAsyncResult asyncResult)
         {
             if (asyncResult == null)
@@ -3812,6 +3848,10 @@ public void EndStop(IAsyncResult asyncResult)
         /// <exception cref="ObjectDisposedException">
         /// Object is disposed.
         /// </exception>
+        /// <remarks>
+        /// When used with <see cref="PowerShell.Invoke()"/>, that call will return a partial result.
+        /// When used with <see cref="PowerShell.InvokeAsync"/>, that call will throw a <see cref="System.Management.Automation.PipelineStoppedException"/>.
+        /// </remarks>
         public Task StopAsync(AsyncCallback callback, object state)
             => Task.Factory.FromAsync(BeginStop(callback, state), _endStopMethod);
 
@@ -3840,15 +3880,50 @@ private void PipelineStateChanged(object source, PipelineStateEventArgs stateEve
         #region IDisposable Overrides
 
         /// <summary>
-        /// Dispose all managed resources. This will suppress finalizer on the object from getting called by
-        /// calling System.GC.SuppressFinalize(this).
+        /// Release all resources.
         /// </summary>
         public void Dispose()
         {
-            Dispose(true);
-            // To prevent derived types with finalizers from having to re-implement System.IDisposable to call it,
-            // unsealed types without finalizers should still call SuppressFinalize.
-            System.GC.SuppressFinalize(this);
+            lock (_syncObject)
+            {
+                // if already disposed return
+                if (_isDisposed)
+                {
+                    return;
+                }
+            }
+
+            // Stop the currently running command outside of the lock
+            if (InvocationStateInfo.State == PSInvocationState.Running ||
+                InvocationStateInfo.State == PSInvocationState.Stopping)
+            {
+                Stop();
+            }
+
+            lock (_syncObject)
+            {
+                _isDisposed = true;
+            }
+
+            if (OutputBuffer != null && OutputBufferOwner)
+            {
+                OutputBuffer.Dispose();
+            }
+
+            if (_errorBuffer != null && ErrorBufferOwner)
+            {
+                _errorBuffer.Dispose();
+            }
+
+            if (IsRunspaceOwner)
+            {
+                _runspace.Dispose();
+            }
+
+            RemotePowerShell?.Dispose();
+
+            _invokeAsyncResult = null;
+            _stopAsyncResult = null;
         }
 
         #endregion
@@ -4081,62 +4156,6 @@ private void AssertNotDisposed()
             }
         }
 
-        /// <summary>
-        /// Release all the resources.
-        /// </summary>
-        /// <param name="disposing">
-        /// if true, release all the managed objects.
-        /// </param>
-        private void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                lock (_syncObject)
-                {
-                    // if already disposed return
-                    if (_isDisposed)
-                    {
-                        return;
-                    }
-                }
-
-                // Stop the currently running command outside of the lock
-                if (InvocationStateInfo.State == PSInvocationState.Running ||
-                    InvocationStateInfo.State == PSInvocationState.Stopping)
-                {
-                    Stop();
-                }
-
-                lock (_syncObject)
-                {
-                    _isDisposed = true;
-                }
-
-                if (OutputBuffer != null && OutputBufferOwner)
-                {
-                    OutputBuffer.Dispose();
-                }
-
-                if (_errorBuffer != null && ErrorBufferOwner)
-                {
-                    _errorBuffer.Dispose();
-                }
-
-                if (IsRunspaceOwner)
-                {
-                    _runspace.Dispose();
-                }
-
-                if (RemotePowerShell != null)
-                {
-                    RemotePowerShell.Dispose();
-                }
-
-                _invokeAsyncResult = null;
-                _stopAsyncResult = null;
-            }
-        }
-
         /// <summary>
         /// Clear the internal elements.
         /// </summary>
@@ -4144,10 +4163,7 @@ private void InternalClearSuppressExceptions()
         {
             lock (_syncObject)
             {
-                if (_worker != null)
-                {
-                    _worker.InternalClearSuppressExceptions();
-                }
+                _worker?.InternalClearSuppressExceptions();
             }
         }
 
@@ -4273,10 +4289,7 @@ internal void SetStateChanged(PSInvocationStateInfo stateInfo)
                     {
                         if (RunningExtraCommands)
                         {
-                            if (tempInvokeAsyncResult != null)
-                            {
-                                tempInvokeAsyncResult.SetAsCompleted(InvocationStateInfo.Reason);
-                            }
+                            tempInvokeAsyncResult?.SetAsCompleted(InvocationStateInfo.Reason);
 
                             RaiseStateChangeEvent(InvocationStateInfo.Clone());
                         }
@@ -4284,16 +4297,10 @@ internal void SetStateChanged(PSInvocationStateInfo stateInfo)
                         {
                             RaiseStateChangeEvent(InvocationStateInfo.Clone());
 
-                            if (tempInvokeAsyncResult != null)
-                            {
-                                tempInvokeAsyncResult.SetAsCompleted(InvocationStateInfo.Reason);
-                            }
+                            tempInvokeAsyncResult?.SetAsCompleted(InvocationStateInfo.Reason);
                         }
 
-                        if (tempStopAsyncResult != null)
-                        {
-                            tempStopAsyncResult.SetAsCompleted(null);
-                        }
+                        tempStopAsyncResult?.SetAsCompleted(null);
                     }
                     catch (Exception)
                     {
@@ -4305,7 +4312,7 @@ internal void SetStateChanged(PSInvocationStateInfo stateInfo)
                     }
                     finally
                     {
-                        // takes care exception occured with invokeAsyncResult
+                        // takes care exception occurred with invokeAsyncResult
                         if (isExceptionOccured && (tempStopAsyncResult != null))
                         {
                             tempStopAsyncResult.Release();
@@ -4332,10 +4339,7 @@ internal void SetStateChanged(PSInvocationStateInfo stateInfo)
                         // This object can be disconnected even if "BeginStop" was called if it is a remote object
                         // and robust connections is retrying a failed network connection.
                         // In this case release the stop wait handle to prevent not responding.
-                        if (tempStopAsyncResult != null)
-                        {
-                            tempStopAsyncResult.SetAsCompleted(null);
-                        }
+                        tempStopAsyncResult?.SetAsCompleted(null);
 
                         // Only raise the Disconnected state changed event if the PowerShell state
                         // actually transitions to Disconnected from some other state.  This condition
@@ -4356,7 +4360,7 @@ internal void SetStateChanged(PSInvocationStateInfo stateInfo)
                     }
                     finally
                     {
-                        // takes care exception occured with invokeAsyncResult
+                        // takes care exception occurred with invokeAsyncResult
                         if (isExceptionOccured && (tempStopAsyncResult != null))
                         {
                             tempStopAsyncResult.Release();
@@ -4401,10 +4405,7 @@ internal void ClearRemotePowerShell()
         {
             lock (_syncObject)
             {
-                if (RemotePowerShell != null)
-                {
-                    RemotePowerShell.Clear();
-                }
+                RemotePowerShell?.Clear();
             }
         }
 
@@ -5118,11 +5119,8 @@ private IAsyncResult CoreStop(bool isSyncCall, AsyncCallback callback, object st
             // cannot complete with this object.
             if (isDisconnected)
             {
-                if (_invokeAsyncResult != null)
-                {
-                    // Since object is stopped, allow result wait to end.
-                    _invokeAsyncResult.SetAsCompleted(null);
-                }
+                // Since object is stopped, allow result wait to end.
+                _invokeAsyncResult?.SetAsCompleted(null);
 
                 _stopAsyncResult.SetAsCompleted(null);
 
@@ -5183,10 +5181,7 @@ private IAsyncResult CoreStop(bool isSyncCall, AsyncCallback callback, object st
         private void ReleaseDebugger()
         {
             LocalRunspace localRunspace = _runspace as LocalRunspace;
-            if (localRunspace != null)
-            {
-                localRunspace.ReleaseDebugger();
-            }
+            localRunspace?.ReleaseDebugger();
         }
 
         /// <summary>
@@ -5258,7 +5253,7 @@ private bool ServerSupportsBatchInvocation()
             if (_runspace != null)
             {
                 return _runspace.RunspaceStateInfo.State != RunspaceState.BeforeOpen &&
-                       _runspace.GetRemoteProtocolVersion() >= RemotingConstants.ProtocolVersionWin8RTM;
+                       _runspace.GetRemoteProtocolVersion() >= RemotingConstants.ProtocolVersion_2_2;
             }
 
             RemoteRunspacePoolInternal remoteRunspacePoolInternal = null;
@@ -5272,7 +5267,7 @@ private bool ServerSupportsBatchInvocation()
             }
 
             return remoteRunspacePoolInternal != null &&
-                   remoteRunspacePoolInternal.PSRemotingProtocolVersion >= RemotingConstants.ProtocolVersionWin8RTM;
+                   remoteRunspacePoolInternal.PSRemotingProtocolVersion >= RemotingConstants.ProtocolVersion_2_2;
         }
 
         /// <summary>
@@ -5287,10 +5282,7 @@ private void AddToRemoteRunspaceRunningList()
             else
             {
                 RemoteRunspacePoolInternal remoteRunspacePoolInternal = GetRemoteRunspacePoolInternal();
-                if (remoteRunspacePoolInternal != null)
-                {
-                    remoteRunspacePoolInternal.PushRunningPowerShell(this);
-                }
+                remoteRunspacePoolInternal?.PushRunningPowerShell(this);
             }
         }
 
@@ -5306,10 +5298,7 @@ private void RemoveFromRemoteRunspaceRunningList()
             else
             {
                 RemoteRunspacePoolInternal remoteRunspacePoolInternal = GetRemoteRunspacePoolInternal();
-                if (remoteRunspacePoolInternal != null)
-                {
-                    remoteRunspacePoolInternal.PopRunningPowerShell();
-                }
+                remoteRunspacePoolInternal?.PopRunningPowerShell();
             }
         }
 
@@ -5678,10 +5667,7 @@ internal void InternalClearSuppressExceptions()
                     else
                     {
                         RunspacePool pool = _shell._rsConnection as RunspacePool;
-                        if (pool != null)
-                        {
-                            pool.ReleaseRunspace(CurrentlyRunningPipeline.Runspace);
-                        }
+                        pool?.ReleaseRunspace(CurrentlyRunningPipeline.Runspace);
                     }
 
                     CurrentlyRunningPipeline.Dispose();
@@ -5852,10 +5838,7 @@ internal void SuspendIncomingData()
                 throw new PSNotSupportedException();
             }
 
-            if (RemotePowerShell.DataStructureHandler != null)
-            {
-                RemotePowerShell.DataStructureHandler.TransportManager.SuspendQueue(true);
-            }
+            RemotePowerShell.DataStructureHandler?.TransportManager.SuspendQueue(true);
         }
 
         /// <summary>
@@ -5868,10 +5851,7 @@ internal void ResumeIncomingData()
                 throw new PSNotSupportedException();
             }
 
-            if (RemotePowerShell.DataStructureHandler != null)
-            {
-                RemotePowerShell.DataStructureHandler.TransportManager.ResumeQueue();
-            }
+            RemotePowerShell.DataStructureHandler?.TransportManager.ResumeQueue();
         }
 
         /// <summary>
@@ -6165,15 +6145,9 @@ internal class PowerShellStopper : IDisposable
 
         internal PowerShellStopper(ExecutionContext context, PowerShell powerShell)
         {
-            if (context == null)
-            {
-                throw new ArgumentNullException(nameof(context));
-            }
+            ArgumentNullException.ThrowIfNull(context);
 
-            if (powerShell == null)
-            {
-                throw new ArgumentNullException(nameof(powerShell));
-            }
+            ArgumentNullException.ThrowIfNull(powerShell);
 
             _powerShell = powerShell;
 
diff --git a/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs b/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs
index 3f4dcf40744..f86d2c00a54 100644
--- a/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs
+++ b/src/System.Management.Automation/engine/hostifaces/PowerShellProcessInstance.cs
@@ -11,6 +11,7 @@
 namespace System.Management.Automation.Runspaces
 {
     /// <summary>
+    /// This class represents a PowerShell process that is used for an out-of-process remote Runspace.
     /// </summary>
     public sealed class PowerShellProcessInstance : IDisposable
     {
@@ -30,8 +31,6 @@ public sealed class PowerShellProcessInstance : IDisposable
 
         #region Constructors
 
-        /// <summary>
-        /// </summary>
         static PowerShellProcessInstance()
         {
 #if UNIX
@@ -145,10 +144,10 @@ public PowerShellProcessInstance(Version powerShellVersion, PSCredential credent
         /// <summary>
         /// Initializes a new instance of the <see cref="PowerShellProcessInstance"/> class. Initializes the underlying dotnet process class.
         /// </summary>
-        /// <param name="powerShellVersion"></param>
-        /// <param name="credential"></param>
-        /// <param name="initializationScript"></param>
-        /// <param name="useWow64"></param>
+        /// <param name="powerShellVersion">Specifies the version of powershell.</param>
+        /// <param name="credential">Specifies a user account credentials.</param>
+        /// <param name="initializationScript">Specifies a script that will be executed when the powershell process is initialized.</param>
+        /// <param name="useWow64">Specifies if the powershell process will be 32-bit.</param>
         public PowerShellProcessInstance(Version powerShellVersion, PSCredential credential, ScriptBlock initializationScript, bool useWow64) : this(powerShellVersion, credential, initializationScript, useWow64, workingDirectory: null)
         {
         }
@@ -178,49 +177,49 @@ public bool HasExited
         #endregion Constructors
 
         #region Dispose
-        /// <summary>
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
 
         /// <summary>
+        /// Release all resources.
         /// </summary>
-        /// <param name="disposing"></param>
-        private void Dispose(bool disposing)
+        public void Dispose()
         {
-            if (_isDisposed) return;
-            lock (_syncObject)
+            if (_isDisposed)
             {
-                if (_isDisposed) return;
-                _isDisposed = true;
+                return;
             }
 
-            if (disposing)
+            lock (_syncObject)
             {
-                try
-                {
-                    if (Process != null && !Process.HasExited)
-                        Process.Kill();
-                }
-                catch (InvalidOperationException)
-                {
-                }
-                catch (Win32Exception)
-                {
-                }
-                catch (NotSupportedException)
+                if (_isDisposed)
                 {
+                    return;
                 }
+
+                _isDisposed = true;
+            }
+            
+            try
+            {
+                if (Process != null && !Process.HasExited)
+                    Process.Kill();
+            }
+            catch (InvalidOperationException)
+            {
+            }
+            catch (Win32Exception)
+            {
+            }
+            catch (NotSupportedException)
+            {
             }
         }
 
         #endregion Dispose
 
         #region Public Properties
+
         /// <summary>
+        /// Gets the process object of the remote target.
         /// </summary>
         public Process Process { get; }
 
diff --git a/src/System.Management.Automation/engine/hostifaces/RunspaceInvoke.cs b/src/System.Management.Automation/engine/hostifaces/RunspaceInvoke.cs
deleted file mode 100644
index 25c611eba0e..00000000000
--- a/src/System.Management.Automation/engine/hostifaces/RunspaceInvoke.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-namespace System.Management.Automation
-{
-    using System;
-    using System.Collections;
-    using System.Collections.ObjectModel;
-    using System.Management.Automation.Runspaces;
-
-    /// <summary>
-    /// Defines a class which allows simple execution of commands from CLR languages.
-    /// </summary>
-    public class RunspaceInvoke : IDisposable
-    {
-        #region constructors
-
-        /// <summary>
-        /// Runspace on which commands are invoked.
-        /// </summary>
-        private Runspace _runspace;
-
-        /// <summary>
-        /// Create a RunspaceInvoke for invoking commands. This uses
-        /// a runspace with default PSSnapins.
-        /// </summary>
-        public RunspaceInvoke()
-        {
-            _runspace = RunspaceFactory.CreateRunspace();
-            _runspace.Open();
-            if (Runspace.DefaultRunspace == null)
-            {
-                Runspace.DefaultRunspace = _runspace;
-            }
-        }
-
-        /// <summary>
-        /// Create RunspaceInvoke for invoking command in specified
-        /// runspace.
-        /// </summary>
-        /// <param name="runspace"></param>
-        /// <remarks>Runspace must be opened state</remarks>
-        public RunspaceInvoke(Runspace runspace)
-        {
-            if (runspace == null)
-            {
-                throw PSTraceSource.NewArgumentNullException("runspace");
-            }
-
-            _runspace = runspace;
-            if (Runspace.DefaultRunspace == null)
-            {
-                Runspace.DefaultRunspace = _runspace;
-            }
-        }
-
-        #endregion constructors
-
-        #region invoke
-
-        /// <summary>
-        /// Invoke the specified script.
-        /// </summary>
-        /// <param name="script">Msh script to invoke.</param>
-        /// <returns>Output of invocation.</returns>
-        public Collection<PSObject> Invoke(string script)
-        {
-            return Invoke(script, null);
-        }
-
-        /// <summary>
-        /// Invoke the specified script and passes specified input to the script.
-        /// </summary>
-        /// <param name="script">Msh script to invoke.</param>
-        /// <param name="input">Input to script.</param>
-        /// <returns>Output of invocation.</returns>
-        public Collection<PSObject> Invoke(string script, IEnumerable input)
-        {
-            if (_disposed == true)
-            {
-                throw PSTraceSource.NewObjectDisposedException("runspace");
-            }
-
-            if (script == null)
-            {
-                throw PSTraceSource.NewArgumentNullException("script");
-            }
-
-            Pipeline p = _runspace.CreatePipeline(script);
-            return p.Invoke(input);
-        }
-
-        /// <summary>
-        /// Invoke the specified script and passes specified input to the script.
-        /// </summary>
-        /// <param name="script">Msh script to invoke.</param>
-        /// <param name="input">Input to script.</param>
-        /// <param name="errors">This gets errors from script.</param>
-        /// <returns>Output of invocation.</returns>
-        /// <remarks>
-        /// <paramref name="errors"/> is the non-terminating error stream
-        /// from the command.
-        /// In this release, the objects read from this PipelineReader
-        /// are PSObjects wrapping ErrorRecords.
-        /// </remarks>
-        public Collection<PSObject> Invoke(string script, IEnumerable input, out IList errors)
-        {
-            if (_disposed == true)
-            {
-                throw PSTraceSource.NewObjectDisposedException("runspace");
-            }
-
-            if (script == null)
-            {
-                throw PSTraceSource.NewArgumentNullException("script");
-            }
-
-            Pipeline p = _runspace.CreatePipeline(script);
-            Collection<PSObject> output = p.Invoke(input);
-            // 2004/06/30-JonN was ReadAll() which was non-blocking
-            errors = p.Error.NonBlockingRead();
-            return output;
-        }
-
-        #endregion invoke
-
-        #region IDisposable Members
-
-        /// <summary>
-        /// Set to true when object is disposed.
-        /// </summary>
-        private bool _disposed;
-
-        /// <summary>
-        /// Dispose underlying Runspace.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Protected dispose which can be overridden by derived classes.
-        /// </summary>
-        /// <param name="disposing"></param>
-        protected virtual void Dispose(bool disposing)
-        {
-            if (_disposed == false)
-            {
-                if (disposing)
-                {
-                    _runspace.Close();
-                    _runspace = null;
-                }
-            }
-
-            _disposed = true;
-        }
-
-        #endregion IDisposable Members
-    }
-}
-
diff --git a/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs b/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs
index 5f814e0428b..e7cfb888a88 100644
--- a/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs
+++ b/src/System.Management.Automation/engine/hostifaces/RunspacePool.cs
@@ -16,7 +16,6 @@ namespace System.Management.Automation.Runspaces
     /// Exception thrown when state of the runspace pool is different from
     /// expected state of runspace pool.
     /// </summary>
-    [Serializable]
     public class InvalidRunspacePoolStateException : SystemException
     {
         /// <summary>
@@ -91,10 +90,11 @@ RunspacePoolState expectedState
         /// The <see cref="StreamingContext"/> that contains
         /// contextual information about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected
         InvalidRunspacePoolStateException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -1003,7 +1003,7 @@ public Collection<PowerShell> CreateDisconnectedPowerShells()
             return _internalPool.CreateDisconnectedPowerShells(this);
         }
 
-        ///<summary>
+        /// <summary>
         /// Returns RunspacePool capabilities.
         /// </summary>
         /// <returns>RunspacePoolCapability.</returns>
@@ -1199,13 +1199,11 @@ public void EndClose(IAsyncResult asyncResult)
         }
 
         /// <summary>
-        /// Dispose the current runspacepool.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
         {
-            _internalPool.Dispose(true);
-
-            GC.SuppressFinalize(this);
+            _internalPool.Dispose();
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs b/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs
index aac3acfbdf8..1b20fc4c85f 100644
--- a/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs
+++ b/src/System.Management.Automation/engine/hostifaces/RunspacePoolInternal.cs
@@ -16,7 +16,7 @@ namespace System.Management.Automation.Runspaces.Internal
     /// <summary>
     /// Class which supports pooling local powerShell runspaces.
     /// </summary>
-    internal class RunspacePoolInternal
+    internal class RunspacePoolInternal : IDisposable
     {
         #region Private data
 
@@ -231,10 +231,7 @@ internal virtual PSPrimitiveDictionary GetApplicationPrivateData()
             {
                 lock (this.syncObject)
                 {
-                    if (_applicationPrivateData == null)
-                    {
-                        _applicationPrivateData = new PSPrimitiveDictionary();
-                    }
+                    _applicationPrivateData ??= new PSPrimitiveDictionary();
                 }
             }
 
@@ -816,13 +813,23 @@ public void ReleaseRunspace(Runspace runspace)
             }
         }
 
+        /// <summary>
+        /// Release all resources.
+        /// </summary>
+        public void Dispose()
+        {
+            Dispose(true);
+
+            GC.SuppressFinalize(this);
+        }
+
         /// <summary>
         /// Dispose off the current runspace pool.
         /// </summary>
         /// <param name="disposing">
         /// true to release all the internal resources.
         /// </param>
-        public virtual void Dispose(bool disposing)
+        protected virtual void Dispose(bool disposing)
         {
             if (!_isDisposed)
             {
@@ -1306,7 +1313,7 @@ protected void DestroyRunspace(Runspace runspace)
         /// <summary>
         /// Cleans the pool closing the runspaces that are idle.
         /// This method is called as part of a timer callback.
-        /// This method will make sure atleast minPoolSz number
+        /// This method will make sure at least minPoolSz number
         /// of Runspaces are active.
         /// </summary>
         /// <param name="state"></param>
diff --git a/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs b/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs
index 2d74430a40a..f144ff7f506 100644
--- a/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs
+++ b/src/System.Management.Automation/engine/hostifaces/pipelinebase.cs
@@ -282,7 +282,7 @@ public override void StopAsync()
         /// <summary>
         /// Stop the running pipeline.
         /// </summary>
-        /// <param name="syncCall">If true pipeline is stoped synchronously
+        /// <param name="syncCall">If true pipeline is stopped synchronously
         /// else asynchronously.</param>
         private void CoreStop(bool syncCall)
         {
@@ -298,7 +298,7 @@ private void CoreStop(bool syncCall)
                         break;
 
                     // If pipeline execution has failed or completed or
-                    // stoped, return silently.
+                    // stopped, return silently.
                     case PipelineState.Stopped:
                     case PipelineState.Completed:
                     case PipelineState.Failed:
@@ -331,7 +331,7 @@ private void CoreStop(bool syncCall)
             // Raise the event outside the lock
             RaisePipelineStateEvents();
 
-            // A pipeline can be stoped before it is started. See NotStarted
+            // A pipeline can be stopped before it is started. See NotStarted
             // case in above switch statement. This is done to allow stoping a pipeline
             // in another thread before it has been started.
             lock (SyncRoot)
@@ -515,7 +515,7 @@ private void CoreInvoke(IEnumerable input, bool syncCall)
                 SyncInvokeCall = syncCall;
 
                 // Create event which will be signalled when pipeline execution
-                // is completed/failed/stoped.
+                // is completed/failed/stopped.
                 // Note:Runspace.Close waits for all the running pipeline
                 // to finish.  This Event must be created before pipeline is
                 // added to list of running pipelines. This avoids the race condition
@@ -760,7 +760,7 @@ protected bool IsPipelineFinished()
         }
 
         /// <summary>
-        /// This is queue of all the state change event which have occured for
+        /// This is queue of all the state change event which have occurred for
         /// this pipeline. RaisePipelineStateEvents raises event for each
         /// item in this queue. We don't raise the event with in SetPipelineState
         /// because often SetPipelineState is called with in a lock.
@@ -768,7 +768,7 @@ protected bool IsPipelineFinished()
         /// </summary>
         private Queue<ExecutionEventQueueItem> _executionEventQueue = new Queue<ExecutionEventQueueItem>();
 
-        private class ExecutionEventQueueItem
+        private sealed class ExecutionEventQueueItem
         {
             public ExecutionEventQueueItem(PipelineStateInfo pipelineStateInfo, RunspaceAvailability currentAvailability, RunspaceAvailability newAvailability)
             {
@@ -891,7 +891,7 @@ protected void RaisePipelineStateEvents()
 
         /// <summary>
         /// ManualResetEvent which is signaled when pipeline execution is
-        /// completed/failed/stoped.
+        /// completed/failed/stopped.
         /// </summary>
         internal ManualResetEvent PipelineFinishedEvent { get; private set; }
 
diff --git a/src/System.Management.Automation/engine/interpreter/BranchLabel.cs b/src/System.Management.Automation/engine/interpreter/BranchLabel.cs
index 08af974416c..1bae16783a9 100644
--- a/src/System.Management.Automation/engine/interpreter/BranchLabel.cs
+++ b/src/System.Management.Automation/engine/interpreter/BranchLabel.cs
@@ -110,10 +110,7 @@ internal void AddBranch(InstructionList instructions, int branchIndex)
 
             if (_targetIndex == UnknownIndex)
             {
-                if (_forwardBranchFixups == null)
-                {
-                    _forwardBranchFixups = new List<int>();
-                }
+                _forwardBranchFixups ??= new List<int>();
 
                 _forwardBranchFixups.Add(branchIndex);
             }
diff --git a/src/System.Management.Automation/engine/interpreter/CallInstruction.cs b/src/System.Management.Automation/engine/interpreter/CallInstruction.cs
index 88ff4bc1357..f7173c745ff 100644
--- a/src/System.Management.Automation/engine/interpreter/CallInstruction.cs
+++ b/src/System.Management.Automation/engine/interpreter/CallInstruction.cs
@@ -222,7 +222,11 @@ private static bool IndexIsNotReturnType(int index, MethodInfo target, Parameter
         private static CallInstruction SlowCreate(MethodInfo info, ParameterInfo[] pis)
         {
             List<Type> types = new List<Type>();
-            if (!info.IsStatic) types.Add(info.DeclaringType);
+            if (!info.IsStatic)
+            {
+                types.Add(info.DeclaringType);
+            }
+
             foreach (ParameterInfo pi in pis)
             {
                 types.Add(pi.ParameterType);
diff --git a/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs b/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs
index 0fddd203346..5d994d934c5 100644
--- a/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs
+++ b/src/System.Management.Automation/engine/interpreter/ControlFlowInstructions.cs
@@ -157,10 +157,7 @@ public override Instruction[] Cache
         {
             get
             {
-                if (s_caches == null)
-                {
-                    s_caches = new Instruction[2][][] { new Instruction[2][], new Instruction[2][] };
-                }
+                s_caches ??= new Instruction[2][][] { new Instruction[2][], new Instruction[2][] };
 
                 return s_caches[ConsumedStack][ProducedStack] ?? (s_caches[ConsumedStack][ProducedStack] = new Instruction[CacheSize]);
             }
@@ -509,7 +506,7 @@ public override int Run(InterpretedFrame frame)
             frame.PopPendingContinuation();
 
             // If _pendingContinuation == -1 then we were getting into the finally block because an exception was thrown
-            // In this case we just return 1, and the the real instruction index will be calculated by GotoHandler later
+            // In this case we just return 1, and the real instruction index will be calculated by GotoHandler later
             if (!frame.IsJumpHappened()) { return 1; }
             // jump to goto target or to the next finally:
             return frame.YieldToPendingContinuation();
diff --git a/src/System.Management.Automation/engine/interpreter/DynamicInstructions.Generated.cs b/src/System.Management.Automation/engine/interpreter/DynamicInstructions.Generated.cs
index ad10413f9d0..abe64c471af 100644
--- a/src/System.Management.Automation/engine/interpreter/DynamicInstructions.Generated.cs
+++ b/src/System.Management.Automation/engine/interpreter/DynamicInstructions.Generated.cs
@@ -22,7 +22,11 @@ namespace System.Management.Automation.Interpreter {
     internal partial class DynamicInstructionN {
         internal static Type GetDynamicInstructionType(Type delegateType) {
             Type[] argTypes = delegateType.GetGenericArguments();
-            if (argTypes.Length == 0) return null;
+            if (argTypes.Length == 0)
+            {
+                return null;
+            }
+
             Type genericType;
             Type[] newArgTypes = argTypes.Skip(1).ToArray();
             switch (newArgTypes.Length) {
diff --git a/src/System.Management.Automation/engine/interpreter/ILightCallSiteBinder.cs b/src/System.Management.Automation/engine/interpreter/ILightCallSiteBinder.cs
index 49fbfdb0f8e..9f24d14fa14 100644
--- a/src/System.Management.Automation/engine/interpreter/ILightCallSiteBinder.cs
+++ b/src/System.Management.Automation/engine/interpreter/ILightCallSiteBinder.cs
@@ -13,6 +13,7 @@
  *
  * ***************************************************************************/
 
+#nullable enable
 #if !CLR2
 #else
 using Microsoft.Scripting.Ast;
diff --git a/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs b/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs
index 4a707201eb6..839ccd6f905 100644
--- a/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs
+++ b/src/System.Management.Automation/engine/interpreter/InstructionFactory.cs
@@ -119,10 +119,7 @@ protected internal override Instruction NewArrayInit(int elementCount)
         {
             if (elementCount < MaxArrayInitElementCountCache)
             {
-                if (_newArrayInit == null)
-                {
-                    _newArrayInit = new Instruction[MaxArrayInitElementCountCache];
-                }
+                _newArrayInit ??= new Instruction[MaxArrayInitElementCountCache];
 
                 return _newArrayInit[elementCount] ?? (_newArrayInit[elementCount] = new NewArrayInitInstruction<T>(elementCount));
             }
diff --git a/src/System.Management.Automation/engine/interpreter/InstructionList.cs b/src/System.Management.Automation/engine/interpreter/InstructionList.cs
index 3c810d186e0..93946bfd2c3 100644
--- a/src/System.Management.Automation/engine/interpreter/InstructionList.cs
+++ b/src/System.Management.Automation/engine/interpreter/InstructionList.cs
@@ -95,7 +95,9 @@ internal sealed class InstructionList
         private List<BranchLabel> _labels;
 
         // list of (instruction index, cookie) sorted by instruction index:
+#pragma warning disable IDE0044 // Add readonly modifier
         private List<KeyValuePair<int, object>> _debugCookies = null;
+#pragma warning restore IDE0044 // Variable is assigned when DEBUG is defined.
 
         #region Debug View
 
@@ -231,10 +233,7 @@ private void UpdateStackDepth(Instruction instruction)
         public void SetDebugCookie(object cookie)
         {
 #if DEBUG
-            if (_debugCookies == null)
-            {
-                _debugCookies = new List<KeyValuePair<int, object>>();
-            }
+            _debugCookies ??= new List<KeyValuePair<int, object>>();
 
             Debug.Assert(Count > 0);
             _debugCookies.Add(new KeyValuePair<int, object>(Count - 1, cookie));
@@ -273,7 +272,7 @@ internal Instruction GetInstruction(int index)
         static InstructionList() {
             AppDomain.CurrentDomain.ProcessExit += new EventHandler((_, __) => {
                 PerfTrack.DumpHistogram(_executedInstructions);
-                Console.WriteLine("-- Total executed: {0}", _executedInstructions.Values.Aggregate(0, (sum, value) => sum + value));
+                Console.WriteLine("-- Total executed: {0}", _executedInstructions.Values.Aggregate(0, static (sum, value) => sum + value));
                 Console.WriteLine("-----");
 
                 var referenced = new Dictionary<string, int>();
@@ -370,10 +369,7 @@ public void EmitLoad(object value, Type type)
                     int i = (int)value;
                     if (i >= PushIntMinCachedValue && i <= PushIntMaxCachedValue)
                     {
-                        if (s_ints == null)
-                        {
-                            s_ints = new Instruction[PushIntMaxCachedValue - PushIntMinCachedValue + 1];
-                        }
+                        s_ints ??= new Instruction[PushIntMaxCachedValue - PushIntMinCachedValue + 1];
 
                         i -= PushIntMinCachedValue;
                         Emit(s_ints[i] ?? (s_ints[i] = new LoadObjectInstruction(value)));
@@ -385,10 +381,7 @@ public void EmitLoad(object value, Type type)
             if (_objects == null)
             {
                 _objects = new List<object>();
-                if (s_loadObjectCached == null)
-                {
-                    s_loadObjectCached = new Instruction[CachedObjectCount];
-                }
+                s_loadObjectCached ??= new Instruction[CachedObjectCount];
             }
 
             if (_objects.Count < s_loadObjectCached.Length)
@@ -449,10 +442,7 @@ internal void SwitchToBoxed(int index, int instructionIndex)
 
         public void EmitLoadLocal(int index)
         {
-            if (s_loadLocal == null)
-            {
-                s_loadLocal = new Instruction[LocalInstrCacheSize];
-            }
+            s_loadLocal ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_loadLocal.Length)
             {
@@ -471,10 +461,7 @@ public void EmitLoadLocalBoxed(int index)
 
         internal static Instruction LoadLocalBoxed(int index)
         {
-            if (s_loadLocalBoxed == null)
-            {
-                s_loadLocalBoxed = new Instruction[LocalInstrCacheSize];
-            }
+            s_loadLocalBoxed ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_loadLocalBoxed.Length)
             {
@@ -488,10 +475,7 @@ internal static Instruction LoadLocalBoxed(int index)
 
         public void EmitLoadLocalFromClosure(int index)
         {
-            if (s_loadLocalFromClosure == null)
-            {
-                s_loadLocalFromClosure = new Instruction[LocalInstrCacheSize];
-            }
+            s_loadLocalFromClosure ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_loadLocalFromClosure.Length)
             {
@@ -505,10 +489,7 @@ public void EmitLoadLocalFromClosure(int index)
 
         public void EmitLoadLocalFromClosureBoxed(int index)
         {
-            if (s_loadLocalFromClosureBoxed == null)
-            {
-                s_loadLocalFromClosureBoxed = new Instruction[LocalInstrCacheSize];
-            }
+            s_loadLocalFromClosureBoxed ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_loadLocalFromClosureBoxed.Length)
             {
@@ -522,10 +503,7 @@ public void EmitLoadLocalFromClosureBoxed(int index)
 
         public void EmitAssignLocal(int index)
         {
-            if (s_assignLocal == null)
-            {
-                s_assignLocal = new Instruction[LocalInstrCacheSize];
-            }
+            s_assignLocal ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_assignLocal.Length)
             {
@@ -539,10 +517,7 @@ public void EmitAssignLocal(int index)
 
         public void EmitStoreLocal(int index)
         {
-            if (s_storeLocal == null)
-            {
-                s_storeLocal = new Instruction[LocalInstrCacheSize];
-            }
+            s_storeLocal ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_storeLocal.Length)
             {
@@ -561,10 +536,7 @@ public void EmitAssignLocalBoxed(int index)
 
         internal static Instruction AssignLocalBoxed(int index)
         {
-            if (s_assignLocalBoxed == null)
-            {
-                s_assignLocalBoxed = new Instruction[LocalInstrCacheSize];
-            }
+            s_assignLocalBoxed ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_assignLocalBoxed.Length)
             {
@@ -583,10 +555,7 @@ public void EmitStoreLocalBoxed(int index)
 
         internal static Instruction StoreLocalBoxed(int index)
         {
-            if (s_storeLocalBoxed == null)
-            {
-                s_storeLocalBoxed = new Instruction[LocalInstrCacheSize];
-            }
+            s_storeLocalBoxed ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_storeLocalBoxed.Length)
             {
@@ -600,10 +569,7 @@ internal static Instruction StoreLocalBoxed(int index)
 
         public void EmitAssignLocalToClosure(int index)
         {
-            if (s_assignLocalToClosure == null)
-            {
-                s_assignLocalToClosure = new Instruction[LocalInstrCacheSize];
-            }
+            s_assignLocalToClosure ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_assignLocalToClosure.Length)
             {
@@ -645,10 +611,7 @@ internal void EmitInitializeParameter(int index)
 
         internal static Instruction Parameter(int index)
         {
-            if (s_parameter == null)
-            {
-                s_parameter = new Instruction[LocalInstrCacheSize];
-            }
+            s_parameter ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_parameter.Length)
             {
@@ -660,10 +623,7 @@ internal static Instruction Parameter(int index)
 
         internal static Instruction ParameterBox(int index)
         {
-            if (s_parameterBox == null)
-            {
-                s_parameterBox = new Instruction[LocalInstrCacheSize];
-            }
+            s_parameterBox ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_parameterBox.Length)
             {
@@ -675,10 +635,7 @@ internal static Instruction ParameterBox(int index)
 
         internal static Instruction InitReference(int index)
         {
-            if (s_initReference == null)
-            {
-                s_initReference = new Instruction[LocalInstrCacheSize];
-            }
+            s_initReference ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_initReference.Length)
             {
@@ -690,10 +647,7 @@ internal static Instruction InitReference(int index)
 
         internal static Instruction InitImmutableRefBox(int index)
         {
-            if (s_initImmutableRefBox == null)
-            {
-                s_initImmutableRefBox = new Instruction[LocalInstrCacheSize];
-            }
+            s_initImmutableRefBox ??= new Instruction[LocalInstrCacheSize];
 
             if (index < s_initImmutableRefBox.Length)
             {
@@ -1125,10 +1079,7 @@ private RuntimeLabel[] BuildRuntimeLabels()
 
         public BranchLabel MakeLabel()
         {
-            if (_labels == null)
-            {
-                _labels = new List<BranchLabel>();
-            }
+            _labels ??= new List<BranchLabel>();
 
             var label = new BranchLabel();
             _labels.Add(label);
diff --git a/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs b/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs
index 4b084ba72a8..977fee85803 100644
--- a/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs
+++ b/src/System.Management.Automation/engine/interpreter/InterpretedFrame.cs
@@ -27,23 +27,19 @@ namespace System.Management.Automation.Interpreter
 {
     internal sealed class InterpretedFrame
     {
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
         public static readonly ThreadLocal<InterpretedFrame> CurrentFrame = new ThreadLocal<InterpretedFrame>();
 
         internal readonly Interpreter Interpreter;
         internal InterpretedFrame _parent;
 
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
         private readonly int[] _continuations;
 
         private int _continuationIndex;
         private int _pendingContinuation;
         private object _pendingValue;
 
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
         public readonly object[] Data;
 
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
         public readonly StrongBox<object>[] Closure;
 
         public int StackIndex;
diff --git a/src/System.Management.Automation/engine/interpreter/LabelInfo.cs b/src/System.Management.Automation/engine/interpreter/LabelInfo.cs
index a8518099824..8d501987c3d 100644
--- a/src/System.Management.Automation/engine/interpreter/LabelInfo.cs
+++ b/src/System.Management.Automation/engine/interpreter/LabelInfo.cs
@@ -80,7 +80,7 @@ internal void Define(LabelScopeInfo block)
             {
                 if (j.ContainsTarget(_node))
                 {
-                    throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Label target already defined: {0}", _node.Name));
+                    throw new InvalidOperationException(string.Create(CultureInfo.InvariantCulture, $"Label target already defined: {_node.Name}"));
                 }
             }
 
@@ -132,12 +132,12 @@ private void ValidateJump(LabelScopeInfo reference)
 
             if (HasMultipleDefinitions)
             {
-                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Ambiguous jump {0}", _node.Name));
+                throw new InvalidOperationException(string.Create(CultureInfo.InvariantCulture, $"Ambiguous jump {_node.Name}"));
             }
 
             // We didn't find an outward jump. Look for a jump across blocks
             LabelScopeInfo def = FirstDefinition();
-            LabelScopeInfo common = CommonNode(def, reference, b => b.Parent);
+            LabelScopeInfo common = CommonNode(def, reference, static b => b.Parent);
 
             // Validate that we aren't jumping across a finally
             for (LabelScopeInfo j = reference; j != common; j = j.Parent)
@@ -176,10 +176,7 @@ internal void ValidateFinish()
 
         private void EnsureLabel(LightCompiler compiler)
         {
-            if (_label == null)
-            {
-                _label = compiler.Instructions.MakeLabel();
-            }
+            _label ??= compiler.Instructions.MakeLabel();
         }
 
         private bool DefinedIn(LabelScopeInfo scope)
@@ -359,10 +356,7 @@ internal void AddLabelInfo(LabelTarget target, LabelInfo info)
         {
             Debug.Assert(CanJumpInto);
 
-            if (_labels == null)
-            {
-                _labels = new HybridReferenceDictionary<LabelTarget, LabelInfo>();
-            }
+            _labels ??= new HybridReferenceDictionary<LabelTarget, LabelInfo>();
 
             _labels[target] = info;
         }
diff --git a/src/System.Management.Automation/engine/interpreter/LightCompiler.cs b/src/System.Management.Automation/engine/interpreter/LightCompiler.cs
index 85f97ee7d40..c117fbff33a 100644
--- a/src/System.Management.Automation/engine/interpreter/LightCompiler.cs
+++ b/src/System.Management.Automation/engine/interpreter/LightCompiler.cs
@@ -68,7 +68,10 @@ public bool Matches(Type exceptionType)
 
         public bool IsBetterThan(ExceptionHandler other)
         {
-            if (other == null) return true;
+            if (other == null)
+            {
+                return true;
+            }
 
             Debug.Assert(StartIndex == other.StartIndex && EndIndex == other.EndIndex, "we only need to compare handlers for the same try block");
             return HandlerStartIndex < other.HandlerStartIndex;
@@ -92,11 +95,14 @@ internal bool IsInsideFinallyBlock(int index)
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0} [{1}-{2}] [{3}->{4}]",
-                (IsFault ? "fault" : "catch(" + ExceptionType.Name + ")"),
-                StartIndex, EndIndex,
-                HandlerStartIndex, HandlerEndIndex
-            );
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0} [{1}-{2}] [{3}->{4}]",
+                IsFault ? "fault" : "catch(" + ExceptionType.Name + ")",
+                StartIndex,
+                EndIndex,
+                HandlerStartIndex,
+                HandlerEndIndex);
         }
     }
 
@@ -181,7 +187,6 @@ internal sealed class RethrowException : SystemException
     {
     }
 
-    [Serializable]
     internal class DebugInfo
     {
         // TODO: readonly
@@ -192,7 +197,7 @@ internal class DebugInfo
         public bool IsClear;
         private static readonly DebugInfoComparer s_debugComparer = new DebugInfoComparer();
 
-        private class DebugInfoComparer : IComparer<DebugInfo>
+        private sealed class DebugInfoComparer : IComparer<DebugInfo>
         {
             // We allow comparison between int and DebugInfo here
             int IComparer<DebugInfo>.Compare(DebugInfo d1, DebugInfo d2)
@@ -242,7 +247,6 @@ public override string ToString()
 
     // TODO:
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes")]
-    [Serializable]
     internal readonly struct InterpretedFrameInfo
     {
         public readonly string MethodName;
@@ -1063,7 +1067,7 @@ private void CompileSwitchExpression(Expression expr)
             }
 
             // Test values must be constant
-            if (!node.Cases.All(c => c.TestValues.All(t => t is ConstantExpression)))
+            if (!node.Cases.All(static c => c.TestValues.All(t => t is ConstantExpression)))
             {
                 throw new NotImplementedException();
             }
@@ -1132,10 +1136,7 @@ private void CompileLabelExpression(Expression expr)
                 Debug.Assert(label != null);
             }
 
-            if (label == null)
-            {
-                label = DefineLabel(node.Target);
-            }
+            label ??= DefineLabel(node.Target);
 
             if (node.DefaultValue != null)
             {
@@ -1297,7 +1298,7 @@ private bool TryPushLabelBlock(Expression node)
 
         private void DefineBlockLabels(Expression node)
         {
-            if (!(node is BlockExpression block))
+            if (node is not BlockExpression block)
             {
                 return;
             }
@@ -1356,7 +1357,7 @@ private void CompileThrowUnaryExpression(Expression expr, bool asVoid)
         }
 
         // TODO: remove (replace by true fault support)
-        private bool EndsWithRethrow(Expression expr)
+        private static bool EndsWithRethrow(Expression expr)
         {
             if (expr.NodeType == ExpressionType.Throw)
             {
@@ -1573,7 +1574,7 @@ private void CompileMethodCallExpression(Expression expr)
             // also could be a mutable value type, Delegate.CreateDelegate and MethodInfo.Invoke both can't handle this, we
             // need to generate code.
             var declaringType = node.Method.DeclaringType;
-            if (!parameters.TrueForAll(p => !p.ParameterType.IsByRef) ||
+            if (!parameters.TrueForAll(static p => !p.ParameterType.IsByRef) ||
                 (!node.Method.IsStatic && declaringType.IsValueType && !declaringType.IsPrimitive))
             {
                 _forceCompile = true;
@@ -1600,7 +1601,7 @@ private void CompileNewExpression(Expression expr)
             if (node.Constructor != null)
             {
                 var parameters = node.Constructor.GetParameters();
-                if (!parameters.TrueForAll(p => !p.ParameterType.IsByRef))
+                if (!parameters.TrueForAll(static p => !p.ParameterType.IsByRef))
                 {
                     _forceCompile = true;
                 }
diff --git a/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs b/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs
index 0df528b94bb..6f9497db987 100644
--- a/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs
+++ b/src/System.Management.Automation/engine/interpreter/LightDelegateCreator.cs
@@ -196,7 +196,7 @@ private static Type GetFuncOrAction(LambdaExpression lambda)
             //    lambda.Parameters[0].IsByRef && lambda.Parameters[1].IsByRef) {
             //    return typeof(ActionRef<,>).MakeGenericType(lambda.Parameters.Map(p => p.Type));
             // } else {
-            Type[] types = lambda.Parameters.Map(p => p.IsByRef ? p.Type.MakeByRefType() : p.Type);
+            Type[] types = lambda.Parameters.Map(static p => p.IsByRef ? p.Type.MakeByRefType() : p.Type);
             if (isVoid)
             {
                 if (Expression.TryGetActionType(types, out delegateType))
diff --git a/src/System.Management.Automation/engine/interpreter/LocalVariables.cs b/src/System.Management.Automation/engine/interpreter/LocalVariables.cs
index d52f1fc6840..0c1f6416741 100644
--- a/src/System.Management.Automation/engine/interpreter/LocalVariables.cs
+++ b/src/System.Management.Automation/engine/interpreter/LocalVariables.cs
@@ -163,10 +163,7 @@ public LocalDefinition DefineLocal(ParameterExpression variable, int start)
             if (_variables.TryGetValue(variable, out existing))
             {
                 newScope = new VariableScope(result, start, existing);
-                if (existing.ChildScopes == null)
-                {
-                    existing.ChildScopes = new List<VariableScope>();
-                }
+                existing.ChildScopes ??= new List<VariableScope>();
 
                 existing.ChildScopes.Add(newScope);
             }
@@ -296,10 +293,7 @@ internal Dictionary<ParameterExpression, LocalVariable> ClosureVariables
 
         internal LocalVariable AddClosureVariable(ParameterExpression variable)
         {
-            if (_closureVariables == null)
-            {
-                _closureVariables = new Dictionary<ParameterExpression, LocalVariable>();
-            }
+            _closureVariables ??= new Dictionary<ParameterExpression, LocalVariable>();
 
             LocalVariable result = new LocalVariable(_closureVariables.Count, true, false);
             _closureVariables.Add(variable, result);
diff --git a/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs b/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs
index 6ff0e36f5c3..78c5534a132 100644
--- a/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs
+++ b/src/System.Management.Automation/engine/interpreter/LoopCompiler.cs
@@ -374,10 +374,7 @@ private Expression VisitVariable(ParameterExpression node, ExpressionAccess acce
 
         private ParameterExpression AddTemp(ParameterExpression variable)
         {
-            if (_temps == null)
-            {
-                _temps = new List<ParameterExpression>();
-            }
+            _temps ??= new List<ParameterExpression>();
 
             _temps.Add(variable);
             return variable;
diff --git a/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs b/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs
index 926f558a72b..5592af6f526 100644
--- a/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs
+++ b/src/System.Management.Automation/engine/interpreter/PowerShellInstructions.cs
@@ -15,7 +15,7 @@
 
 namespace System.Management.Automation.Interpreter
 {
-    internal class UpdatePositionInstruction : Instruction
+    internal sealed class UpdatePositionInstruction : Instruction
     {
         private readonly int _sequencePoint;
         private readonly bool _checkBreakpoints;
diff --git a/src/System.Management.Automation/engine/interpreter/Utilities.cs b/src/System.Management.Automation/engine/interpreter/Utilities.cs
index be7bb1935c7..0eef4728e46 100644
--- a/src/System.Management.Automation/engine/interpreter/Utilities.cs
+++ b/src/System.Management.Automation/engine/interpreter/Utilities.cs
@@ -147,7 +147,7 @@ internal static Type MakeDelegate(Type[] types)
 
             // Can only used predefined delegates if we have no byref types and
             // the arity is small enough to fit in Func<...> or Action<...>
-            if (types.Length > MaximumArity || types.Any(t => t.IsByRef))
+            if (types.Length > MaximumArity || types.Any(static t => t.IsByRef))
             {
                 throw Assert.Unreachable;
                 // return MakeCustomDelegate(types);
@@ -1078,7 +1078,10 @@ internal static bool TrueForAll<T>(this IEnumerable<T> collection, Predicate<T>
 
             foreach (T item in collection)
             {
-                if (!predicate(item)) return false;
+                if (!predicate(item))
+                {
+                    return false;
+                }
             }
 
             return true;
diff --git a/src/System.Management.Automation/engine/lang/interface/PSToken.cs b/src/System.Management.Automation/engine/lang/interface/PSToken.cs
index 048de2facac..306a64a0b61 100644
--- a/src/System.Management.Automation/engine/lang/interface/PSToken.cs
+++ b/src/System.Management.Automation/engine/lang/interface/PSToken.cs
@@ -370,223 +370,275 @@ public enum PSTokenType
         /// <summary>
         /// Unknown token.
         /// </summary>
-        /// <remarks>
-        /// </remarks>
         Unknown,
 
         /// <summary>
+        /// <para>
         /// Command.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// </para>
         /// For example, 'get-process' in
         ///
-        ///     get-process -name foo
-        /// </remarks>
+        ///     <c><code>get-process -name foo</code></c>
+        /// </para>
+        /// </summary>
         Command,
 
         /// <summary>
+        /// <para>
         /// Command Parameter.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, '-name' in
         ///
-        ///     get-process -name foo
-        /// </remarks>
+        ///     <c><code>get-process -name foo</code></c>
+        /// </para>
+        /// </summary>
         CommandParameter,
 
         /// <summary>
+        /// <para>
         /// Command Argument.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, 'foo' in
         ///
-        ///     get-process -name foo
-        /// </remarks>
+        ///     <c><code>get-process -name foo</code></c>
+        /// </para>
+        /// </summary>
         CommandArgument,
 
         /// <summary>
+        /// <para>
         /// Number.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, 12 in
         ///
-        ///     $a=12
-        /// </remarks>
+        ///     <c><code>$a=12</code></c>
+        /// </para>
+        /// </summary>
         Number,
 
         /// <summary>
+        /// <para>
         /// String.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, "12" in
         ///
-        ///     $a="12"
-        /// </remarks>
+        ///     <c><code>$a="12"</code></c>
+        /// </para>
+        /// </summary>
         String,
 
         /// <summary>
+        /// <para>
         /// Variable.
-        /// </summary>
+        /// </para>
+        /// <para>
         /// <remarks>
         /// For example, $a in
         ///
-        ///     $a="12"
-        /// </remarks>
+        ///     <c><code>$a="12"</code></c>
+        /// <para>
+        /// </summary>
         Variable,
 
         /// <summary>
+        /// <para>
         /// Property name or method name.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, Name in
         ///
-        ///     $a.Name
-        /// </remarks>
+        ///     <c><code>$a.Name</code></c>
+        /// </para>
+        /// </summary>
         Member,
 
         /// <summary>
+        /// <para>
         /// Loop label.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, :loop in
         ///
+        /// <c><code>
         ///     :loop
         ///     foreach($a in $b)
         ///     {
         ///         $a
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </summary>
         LoopLabel,
 
         /// <summary>
+        /// <para>
         /// Attributes.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, Mandatory in
         ///
-        ///     param([Mandatory] $a)
-        /// </remarks>
+        ///     <c><code>param([Mandatory] $a)</code></c>
+        /// </para>
+        /// </summary>
         Attribute,
 
         /// <summary>
+        /// <para>
         /// Types.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, [string] in
         ///
-        ///     $a = [string] 12
-        /// </remarks>
+        ///     <c><code>$a = [string] 12</code></c>
+        /// </para>
+        /// </summary>
         Type,
 
         /// <summary>
+        /// <para>
         /// Operators.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, + in
         ///
-        ///     $a = 1 + 2
-        /// </remarks>
+        ///     <c><code>$a = 1 + 2</code></c>
+        /// </para>
+        /// </summary>
         Operator,
 
         /// <summary>
+        /// <para>
         /// Group Starter.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, { in
         ///
+        /// <c><code>
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         GroupStart,
 
         /// <summary>
+        /// <para>
         /// Group Ender.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, } in
         ///
+        /// <c><code>
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         GroupEnd,
 
         /// <summary>
+        /// <para>
         /// Keyword.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, if in
         ///
+        /// <c><code>
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         Keyword,
 
         /// <summary>
+        /// <para>
         /// Comment.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, #here in
         ///
+        /// <c><code>
         ///     #here
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         Comment,
 
         /// <summary>
+        /// <para>
         /// Statement separator. This is ';'
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, ; in
         ///
+        /// <c><code>
         ///     #here
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         StatementSeparator,
 
         /// <summary>
+        /// <para>
         /// New line. This is '\n'
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, \n in
         ///
+        /// <c><code>
         ///     #here
         ///     if ($a -gt 4)
         ///     {
         ///         $a++;
         ///     }
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         NewLine,
 
         /// <summary>
+        /// <para>
         /// Line continuation.
-        /// </summary>
-        /// <remarks>
+        /// </para>
+        /// <para>
         /// For example, ` in
         ///
+        /// <c><code>
         ///     get-command -name `
         ///     foo
-        /// </remarks>
+        /// </code></c>
+        /// </para>
+        /// </summary>
         LineContinuation,
 
         /// <summary>
+        /// <para>
         /// Position token.
-        /// </summary>
-        /// <remarks>
-        /// Position token are bogus tokens generated for identifying a location
+        /// </para>
+        /// <para>
+        /// Position tokens are bogus tokens generated for identifying a location
         /// in the script.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         Position
     }
 }
diff --git a/src/System.Management.Automation/engine/lang/parserutils.cs b/src/System.Management.Automation/engine/lang/parserutils.cs
index 52c64400ccd..184c82c6815 100644
--- a/src/System.Management.Automation/engine/lang/parserutils.cs
+++ b/src/System.Management.Automation/engine/lang/parserutils.cs
@@ -28,11 +28,6 @@ namespace System.Management.Automation
     public abstract class FlowControlException : SystemException
     {
         internal FlowControlException() { }
-
-        internal FlowControlException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-        }
     }
 
     /// <summary>
@@ -45,11 +40,6 @@ internal LoopFlowException(string label)
             this.Label = label ?? string.Empty;
         }
 
-        internal LoopFlowException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-        }
-
         internal LoopFlowException() { }
 
         /// <summary>
@@ -95,11 +85,6 @@ internal BreakException(string label, Exception innerException)
             : base(label)
         {
         }
-
-        private BreakException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-        }
     }
 
     /// <summary>
@@ -121,11 +106,6 @@ internal ContinueException(string label, Exception innerException)
             : base(label)
         {
         }
-
-        private ContinueException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-        }
     }
 
     internal class ReturnException : FlowControlException
@@ -156,12 +136,6 @@ internal ExitException(object argument)
 
         [SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Justification = "This exception should only be thrown from SMA.dll")]
         internal ExitException() { }
-
-        [SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors", Justification = "This exception should only be thrown from SMA.dll")]
-        private ExitException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
-        {
-        }
     }
 
     /// <summary>
@@ -251,7 +225,7 @@ public enum SplitOptions
     internal delegate object PowerShellBinaryOperator(ExecutionContext context, IScriptExtent errorPosition, object lval, object rval);
 
     /// <summary>
-    /// A static class holding various operations specific to the msh interpreter such as
+    /// A static class holding various operations specific to the PowerShell interpreter such as
     /// various math operations, ToString() and a routine to extract the base object from an
     /// PSObject in a canonical fashion.
     /// </summary>
@@ -969,15 +943,7 @@ internal static object ReplaceOperator(ExecutionContext context, IScriptExtent e
             IEnumerator list = LanguagePrimitives.GetEnumerator(lval);
             if (list == null)
             {
-                string lvalString;
-                if (ExperimentalFeature.IsEnabled("PSCultureInvariantReplaceOperator"))
-                {
-                    lvalString = PSObject.ToStringParser(context, lval) ?? string.Empty;
-                }
-                else
-                {
-                    lvalString = lval?.ToString() ?? string.Empty;
-                }
+                string lvalString = PSObject.ToStringParser(context, lval) ?? string.Empty;
 
                 return replacer.Replace(lvalString);
             }
@@ -1500,7 +1466,7 @@ internal static string GetTypeFullName(object obj)
                 return string.Empty;
             }
 
-            if (!(obj is PSObject mshObj))
+            if (obj is not PSObject mshObj)
             {
                 return obj.GetType().FullName;
             }
@@ -1518,7 +1484,7 @@ internal static string GetTypeFullName(object obj)
         /// methods and ScriptBlock notes. Native methods currently take precedence over notes...
         /// </summary>
         /// <param name="errorPosition">The position to use for error reporting.</param>
-        /// <param name="target">The object to call the method on. It shouldn't be an msh object.</param>
+        /// <param name="target">The object to call the method on. It shouldn't be a PSObject.</param>
         /// <param name="methodName">The name of the method to call.</param>
         /// <param name="invocationConstraints">Invocation constraints.</param>
         /// <param name="paramArray">The arguments to pass to the method.</param>
@@ -1604,7 +1570,7 @@ internal static object CallMethod(
                 // not really a method call.
                 if (valueToSet != AutomationNull.Value)
                 {
-                    if (!(targetMethod is PSParameterizedProperty propertyToSet))
+                    if (targetMethod is not PSParameterizedProperty propertyToSet)
                     {
                         throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), errorPosition,
                                                                        "ParameterizedPropertyAssignmentFailed", ParserStrings.ParameterizedPropertyAssignmentFailed, GetTypeFullName(target), methodName);
@@ -1981,6 +1947,22 @@ internal static void UpdateExceptionErrorRecordPosition(Exception exception, ISc
                 }
             }
         }
+
+        internal static void UpdateExceptionErrorRecordHistoryId(RuntimeException exception, ExecutionContext context)
+        {
+            InvocationInfo invInfo = exception.ErrorRecord.InvocationInfo;
+            if (invInfo is not { HistoryId: -1 })
+            {
+                return;
+            }
+
+            if (context?.CurrentCommandProcessor is null)
+            {
+                return;
+            }
+
+            invInfo.HistoryId = context.CurrentCommandProcessor.Command.MyInvocation.HistoryId;
+        }
     }
     #endregion InterpreterError
 
diff --git a/src/System.Management.Automation/engine/lang/scriptblock.cs b/src/System.Management.Automation/engine/lang/scriptblock.cs
index 765809be306..06fa66d0f7c 100644
--- a/src/System.Management.Automation/engine/lang/scriptblock.cs
+++ b/src/System.Management.Automation/engine/lang/scriptblock.cs
@@ -104,7 +104,7 @@ internal static ScriptBlock Create(ExecutionContext context, string script)
         /// </summary>
         /// <param name="script">The string to compile.</param>
         public static ScriptBlock Create(string script) => Create(
-            parser: new Language.Parser(),
+            parser: new Parser(),
             fileName: null,
             fileContents: script);
 
@@ -545,7 +545,7 @@ internal T InvokeAsMemberFunctionT<T>(object instance, object[] args)
             // is a pipeline that emits nothing then result.Count will
             // be zero so we catch that and "convert" it to null. Note that
             // the return statement is still required in the method, it
-            // just recieves nothing from it's argument.
+            // just receives nothing from it's argument.
             if (result.Count == 0)
             {
                 return default(T);
@@ -778,7 +778,7 @@ internal Delegate CreateDelegate(Type delegateType)
                 CachedReflectionInfo.ScriptBlock_InvokeAsDelegateHelper,
                 dollarUnderExpr,
                 dollarThisExpr,
-                Expression.NewArrayInit(typeof(object), parameterExprs.Select(p => p.Cast(typeof(object)))));
+                Expression.NewArrayInit(typeof(object), parameterExprs.Select(static p => p.Cast(typeof(object)))));
             if (returnsSomething)
             {
                 call = DynamicExpression.Dynamic(
@@ -1035,10 +1035,7 @@ internal void InvokeWithPipe(
                     processInCurrentThread: true,
                     waitForCompletionInCurrentThread: true);
 
-                if (scriptBlockInvocationEventArgs.Exception != null)
-                {
-                    scriptBlockInvocationEventArgs.Exception.Throw();
-                }
+                scriptBlockInvocationEventArgs.Exception?.Throw();
             }
         }
 
@@ -1099,15 +1096,9 @@ public sealed class SteppablePipeline : IDisposable
     {
         internal SteppablePipeline(ExecutionContext context, PipelineProcessor pipeline)
         {
-            if (pipeline == null)
-            {
-                throw new ArgumentNullException(nameof(pipeline));
-            }
+            ArgumentNullException.ThrowIfNull(pipeline);
 
-            if (context == null)
-            {
-                throw new ArgumentNullException(nameof(context));
-            }
+            ArgumentNullException.ThrowIfNull(context);
 
             _pipeline = pipeline;
             _context = context;
@@ -1131,10 +1122,7 @@ internal SteppablePipeline(ExecutionContext context, PipelineProcessor pipeline)
         /// <param name="contextToRedirectTo">Context used to figure out how to route the output and errors.</param>
         public void Begin(bool expectInput, EngineIntrinsics contextToRedirectTo)
         {
-            if (contextToRedirectTo == null)
-            {
-                throw new ArgumentNullException(nameof(contextToRedirectTo));
-            }
+            ArgumentNullException.ThrowIfNull(contextToRedirectTo);
 
             ExecutionContext executionContext = contextToRedirectTo.SessionState.Internal.ExecutionContext;
             CommandProcessorBase commandProcessor = executionContext.CurrentCommandProcessor;
@@ -1150,7 +1138,7 @@ public void Begin(bool expectInput, EngineIntrinsics contextToRedirectTo)
         /// <param name="command">The command you're calling this from (i.e. instance of PSCmdlet or value of $PSCmdlet variable).</param>
         public void Begin(InternalCommand command)
         {
-            if (command == null || command.MyInvocation == null)
+            if (command is null || command.MyInvocation is null)
             {
                 throw new ArgumentNullException(nameof(command));
             }
@@ -1280,7 +1268,44 @@ public Array End()
             {
                 // then pop this pipeline and dispose it...
                 _context.PopPipelineProcessor(true);
-                _pipeline.Dispose();
+                Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Clean resources for script commands of this steppable pipeline.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// The way we handle 'Clean' blocks in a steppable pipeline makes sure that:</para>
+        /// <para>1. The 'Clean' blocks get to run if any exception is thrown from 'Begin/Process/End'.</para>
+        /// <para>2. The 'Clean' blocks get to run if 'End' finished successfully.</para>
+        /// <para>
+        /// However, this is not enough for a steppable pipeline, because the function, where the steppable
+        /// pipeline gets used, may fail (think about a proxy function). And that may lead to the situation
+        /// where "no exception was thrown from the steppable pipeline" but "the steppable pipeline didn't
+        /// run to the end". In that case, 'Clean' won't run unless it's triggered explicitly on the steppable
+        /// pipeline. This method allows a user to do that from the 'Clean' block of the proxy function.</para>
+        /// </remarks>
+        public void Clean()
+        {
+            if (_pipeline.Commands is null)
+            {
+                // The pipeline commands have been disposed. In this case, 'Clean'
+                // should have already been called on the pipeline processor.
+                return;
+            }
+
+            try
+            {
+                _context.PushPipelineProcessor(_pipeline);
+                _pipeline.DoCleanup();
+            }
+            finally
+            {
+                // then pop this pipeline and dispose it...
+                _context.PopPipelineProcessor(true);
+                Dispose();
             }
         }
 
@@ -1293,23 +1318,13 @@ public Array End()
         /// When this object is disposed, the contained pipeline should also be disposed.
         /// </summary>
         public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool disposing)
         {
             if (_disposed)
             {
                 return;
             }
 
-            if (disposing)
-            {
-                _pipeline.Dispose();
-            }
-
+            _pipeline.Dispose();
             _disposed = true;
         }
 
@@ -1320,7 +1335,6 @@ private void Dispose(bool disposing)
     /// Defines the exception thrown when conversion from ScriptBlock to PowerShell is forbidden
     /// (i.e. when the script block has undeclared variables or more than one statement)
     /// </summary>
-    [Serializable]
     public class ScriptBlockToPowerShellNotSupportedException : RuntimeException
     {
         #region ctor
@@ -1347,7 +1361,7 @@ public ScriptBlockToPowerShellNotSupportedException(string message)
         /// Initializes a new instance of ScriptBlockToPowerShellNotSupportedException setting the message and innerException.
         /// </summary>
         /// <param name="message">The exception's message.</param>
-        /// <param name="innerException">The exceptions's inner exception.</param>
+        /// <param name="innerException">The exception's inner exception.</param>
         public ScriptBlockToPowerShellNotSupportedException(string message, Exception innerException)
             : base(message, innerException)
         {
@@ -1374,9 +1388,10 @@ internal ScriptBlockToPowerShellNotSupportedException(
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected ScriptBlockToPowerShellNotSupportedException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
         #endregion Serialization
 
diff --git a/src/System.Management.Automation/engine/parser/AstVisitor.cs b/src/System.Management.Automation/engine/parser/AstVisitor.cs
index 5c09ee78dc6..03b234cf41f 100644
--- a/src/System.Management.Automation/engine/parser/AstVisitor.cs
+++ b/src/System.Management.Automation/engine/parser/AstVisitor.cs
@@ -10,195 +10,197 @@ namespace System.Management.Automation.Language
 {
     /// <summary>
     /// </summary>
+#nullable enable
     public interface ICustomAstVisitor
     {
         /// <summary/>
-        object DefaultVisit(Ast ast) => null;
+        object? DefaultVisit(Ast ast) => null;
 
         /// <summary/>
-        object VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);
+        object? VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);
 
         /// <summary/>
-        object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);
+        object? VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);
 
         #region Script Blocks
 
         /// <summary/>
-        object VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);
+        object? VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);
 
         /// <summary/>
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
-        object VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);
+        object? VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);
 
         /// <summary/>
-        object VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);
+        object? VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);
 
         /// <summary/>
-        object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
+        object? VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
 
         /// <summary/>
-        object VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);
+        object? VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);
 
         /// <summary/>
-        object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);
+        object? VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);
 
         /// <summary/>
-        object VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);
+        object? VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);
 
         #endregion Script Blocks
 
         #region Statements
 
         /// <summary/>
-        object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
+        object? VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
 
         /// <summary/>
-        object VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);
+        object? VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);
 
         /// <summary/>
-        object VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);
+        object? VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);
 
         /// <summary/>
-        object VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);
+        object? VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);
 
         /// <summary/>
-        object VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);
+        object? VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);
 
         /// <summary/>
-        object VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);
+        object? VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);
 
         /// <summary/>
-        object VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);
+        object? VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);
 
         /// <summary/>
-        object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);
+        object? VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);
 
         /// <summary/>
-        object VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);
+        object? VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);
 
         /// <summary/>
-        object VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);
+        object? VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);
 
         /// <summary/>
-        object VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);
+        object? VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);
 
         /// <summary/>
-        object VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);
+        object? VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);
 
         /// <summary/>
-        object VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);
+        object? VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);
 
         /// <summary/>
-        object VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);
+        object? VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);
 
         /// <summary/>
-        object VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
+        object? VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
 
         /// <summary/>
-        object VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);
+        object? VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);
 
         /// <summary/>
-        object VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);
+        object? VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);
 
         /// <summary/>
-        object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);
+        object? VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);
 
         /// <summary/>
-        object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
+        object? VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
 
         #endregion Statements
 
         #region Pipelines
 
         /// <summary/>
-        object VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);
+        object? VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);
 
         /// <summary/>
-        object VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);
+        object? VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);
 
         /// <summary/>
-        object VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);
+        object? VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);
 
         /// <summary/>
-        object VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);
+        object? VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);
 
         /// <summary/>
-        object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);
+        object? VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);
 
         /// <summary/>
-        object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);
+        object? VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);
 
         #endregion Pipelines
 
         #region Expressions
 
         /// <summary/>
-        object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);
+        object? VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);
 
         /// <summary/>
-        object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
+        object? VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
 
         /// <summary/>
-        object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);
+        object? VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);
 
         /// <summary/>
-        object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);
+        object? VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);
 
         /// <summary/>
-        object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);
+        object? VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);
 
         /// <summary/>
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]
-        object VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);
+        object? VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);
 
         /// <summary/>
-        object VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);
+        object? VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);
 
         /// <summary/>
-        object VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);
+        object? VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);
 
         /// <summary/>
-        object VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);
+        object? VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);
 
         /// <summary/>
-        object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
+        object? VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
 
         /// <summary/>
-        object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);
+        object? VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);
 
         /// <summary/>
-        object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);
+        object? VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);
 
         /// <summary/>
-        object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);
+        object? VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);
 
         /// <summary/>
-        object VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);
+        object? VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);
 
         /// <summary/>
-        object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
+        object? VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
 
         /// <summary/>
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]
-        object VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);
+        object? VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);
 
         /// <summary/>
-        object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);
+        object? VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);
 
         /// <summary/>
-        object VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);
+        object? VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);
 
         /// <summary/>
-        object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);
+        object? VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);
 
         /// <summary/>
-        object VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);
+        object? VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);
 
         #endregion Expressions
     }
+#nullable restore
 
     /// <summary/>
 #nullable enable
diff --git a/src/System.Management.Automation/engine/parser/Compiler.cs b/src/System.Management.Automation/engine/parser/Compiler.cs
index 794b2834331..5ce6a6c6dc8 100644
--- a/src/System.Management.Automation/engine/parser/Compiler.cs
+++ b/src/System.Management.Automation/engine/parser/Compiler.cs
@@ -39,6 +39,9 @@ internal static class CachedReflectionInfo
         internal static readonly MethodInfo ObjectList_ToArray =
             typeof(List<object>).GetMethod(nameof(List<object>.ToArray), Type.EmptyTypes);
 
+        internal static readonly MethodInfo ArrayOps_AddObject =
+            typeof(ArrayOps).GetMethod(nameof(ArrayOps.AddObjectArray), StaticFlags);
+
         internal static readonly MethodInfo ArrayOps_GetMDArrayValue =
             typeof(ArrayOps).GetMethod(nameof(ArrayOps.GetMDArrayValue), StaticFlags);
 
@@ -252,6 +255,9 @@ internal static class CachedReflectionInfo
                 new Type[] { typeof(int), typeof(IEqualityComparer) },
                 null);
 
+        internal static readonly MethodInfo ByRefOps_GetByRefPropertyValue =
+            typeof(ByRefOps).GetMethod(nameof(ByRefOps.GetByRefPropertyValue), StaticFlags);
+
         internal static readonly MethodInfo HashtableOps_Add =
             typeof(HashtableOps).GetMethod(nameof(HashtableOps.Add), StaticFlags);
 
@@ -432,8 +438,8 @@ internal static class CachedReflectionInfo
         internal static readonly MethodInfo PSInvokeMemberBinder_IsHeterogeneousArray =
             typeof(PSInvokeMemberBinder).GetMethod(nameof(PSInvokeMemberBinder.IsHeterogeneousArray), StaticFlags);
 
-        internal static readonly MethodInfo PSInvokeMemberBinder_IsHomogenousArray =
-            typeof(PSInvokeMemberBinder).GetMethod(nameof(PSInvokeMemberBinder.IsHomogenousArray), StaticFlags);
+        internal static readonly MethodInfo PSInvokeMemberBinder_IsHomogeneousArray =
+            typeof(PSInvokeMemberBinder).GetMethod(nameof(PSInvokeMemberBinder.IsHomogeneousArray), StaticFlags);
 
         internal static readonly MethodInfo PSInvokeMemberBinder_TryGetInstanceMethod =
             typeof(PSInvokeMemberBinder).GetMethod(nameof(PSInvokeMemberBinder.TryGetInstanceMethod), StaticFlags);
@@ -471,6 +477,9 @@ internal static class CachedReflectionInfo
         internal static readonly MethodInfo PSSetMemberBinder_SetAdaptedValue =
             typeof(PSSetMemberBinder).GetMethod(nameof(PSSetMemberBinder.SetAdaptedValue), StaticFlags);
 
+        internal static readonly MethodInfo PSTraceSource_WriteLine =
+            typeof(PSTraceSource).GetMethod(nameof(PSTraceSource.WriteLine), InstanceFlags, new[] { typeof(string), typeof(object) });
+
         internal static readonly MethodInfo PSVariableAssignmentBinder_CopyInstanceMembersOfValueType =
             typeof(PSVariableAssignmentBinder).GetMethod(nameof(PSVariableAssignmentBinder.CopyInstanceMembersOfValueType), StaticFlags);
 
@@ -639,7 +648,9 @@ internal static class CachedReflectionInfo
 
         internal static readonly MethodInfo ArgumentTransformationAttribute_Transform =
             typeof(ArgumentTransformationAttribute).GetMethod(nameof(ArgumentTransformationAttribute.Transform), InstancePublicFlags);
-        // ReSharper restore InconsistentNaming
+
+        internal static readonly MethodInfo MemberInvocationLoggingOps_LogMemberInvocation =
+            typeof(MemberInvocationLoggingOps).GetMethod(nameof(MemberInvocationLoggingOps.LogMemberInvocation), StaticFlags);
     }
 
     internal static class ExpressionCache
@@ -777,7 +788,7 @@ internal class FunctionContext
         internal ExecutionContext _executionContext;
         internal Pipe _outputPipe;
         internal BitArray _breakPoints;
-        internal List<LineBreakpoint> _boundBreakpoints;
+        internal Dictionary<int, List<LineBreakpoint>> _boundBreakpoints;
         internal int _currentSequencePointIndex;
         internal MutableTuple _localsTuple;
         internal List<Tuple<Type[], Action<FunctionContext>[], Type[]>> _traps = new List<Tuple<Type[], Action<FunctionContext>[], Type[]>>();
@@ -825,6 +836,14 @@ internal class Compiler : ICustomAstVisitor2
 
         static Compiler()
         {
+            Diagnostics.Assert(SpecialVariables.AutomaticVariables.Length == (int)AutomaticVariable.NumberOfAutomaticVariables
+                && SpecialVariables.AutomaticVariableTypes.Length == (int)AutomaticVariable.NumberOfAutomaticVariables,
+                "The 'AutomaticVariable' enum length does not match both 'AutomaticVariables' and 'AutomaticVariableTypes' length.");
+
+            Diagnostics.Assert(Enum.GetNames(typeof(PreferenceVariable)).Length == SpecialVariables.PreferenceVariables.Length
+                && Enum.GetNames(typeof(PreferenceVariable)).Length == SpecialVariables.PreferenceVariableTypes.Length,
+                "The 'PreferenceVariable' enum length does not match both 'PreferenceVariables' and 'PreferenceVariableTypes' length.");
+
             s_functionContext = Expression.Parameter(typeof(FunctionContext), "funcContext");
             s_executionContextParameter = Expression.Variable(typeof(ExecutionContext), "context");
 
@@ -1059,7 +1078,7 @@ internal static Expression CallSetVariable(Expression variablePath, Expression r
 
         internal Expression GetAutomaticVariable(VariableExpressionAst varAst)
         {
-            // Generate, in psuedo code:
+            // Generate, in pseudo code:
             //
             //     return (localsTuple.IsValueSet(tupleIndex)
             //          ? localsTuple.ItemXXX
@@ -1069,7 +1088,7 @@ internal Expression GetAutomaticVariable(VariableExpressionAst varAst)
             //
             //     * $PSCmdlet - always set if the script uses cmdletbinding.
             //     * $_ - always set in process and end block, otherwise need dynamic checks.
-            //     * $this - can never know if it's set, always need above psuedo code.
+            //     * $this - can never know if it's set, always need above pseudo code.
             //     * $input - also can never know - it's always set from a command process, but not necessarily set from ScriptBlock.Invoke.
             //
             // These optimizations are not yet performed.
@@ -1105,10 +1124,7 @@ internal static Expression CallStringEquals(Expression left, Expression right, b
 
         internal static Expression IsStrictMode(int version, Expression executionContext = null)
         {
-            if (executionContext == null)
-            {
-                executionContext = ExpressionCache.NullExecutionContext;
-            }
+            executionContext ??= ExpressionCache.NullExecutionContext;
 
             return Expression.Call(
                 CachedReflectionInfo.ExecutionContext_IsStrictVersion,
@@ -1147,7 +1163,7 @@ private Expression UpdatePosition(Ast ast)
 
         internal ParameterExpression NewTemp(Type type, string name)
         {
-            return Expression.Variable(type, string.Format(CultureInfo.InvariantCulture, "{0}{1}", name, _tempCounter++));
+            return Expression.Variable(type, string.Create(CultureInfo.InvariantCulture, $"{name}{_tempCounter++}"));
         }
 
         internal static Type GetTypeConstraintForMethodResolution(ExpressionAst expr)
@@ -1174,7 +1190,7 @@ internal static Type GetTypeConstraintForMethodResolution(ExpressionAst expr)
 
         internal static PSMethodInvocationConstraints CombineTypeConstraintForMethodResolution(Type targetType, Type argType)
         {
-            if (targetType == null && argType == null)
+            if (targetType is null && argType is null)
             {
                 return null;
             }
@@ -1182,14 +1198,19 @@ internal static PSMethodInvocationConstraints CombineTypeConstraintForMethodReso
             return new PSMethodInvocationConstraints(targetType, new[] { argType });
         }
 
-        internal static PSMethodInvocationConstraints CombineTypeConstraintForMethodResolution(Type targetType, Type[] argTypes)
+        internal static PSMethodInvocationConstraints CombineTypeConstraintForMethodResolution(
+            Type targetType,
+            Type[] argTypes,
+            object[] genericArguments = null)
         {
-            if (targetType == null && (argTypes == null || argTypes.Length == 0))
+            if (targetType is null
+                && (argTypes is null || argTypes.Length == 0)
+                && (genericArguments is null || genericArguments.Length == 0))
             {
                 return null;
             }
 
-            return new PSMethodInvocationConstraints(targetType, argTypes);
+            return new PSMethodInvocationConstraints(targetType, argTypes, genericArguments);
         }
 
         internal static Expression ConvertValue(TypeConstraintAst typeConstraint, Expression expr)
@@ -1257,7 +1278,7 @@ internal static RuntimeDefinedParameterDictionary GetParameterMetaData(ReadOnlyC
                 for (int index = 0; index < runtimeDefinedParamList.Count; index++)
                 {
                     var rdp = runtimeDefinedParamList[index];
-                    var paramAttribute = (ParameterAttribute)rdp.Attributes.First(attr => attr is ParameterAttribute);
+                    var paramAttribute = (ParameterAttribute)rdp.Attributes.First(static attr => attr is ParameterAttribute);
                     if (rdp.ParameterType != typeof(SwitchParameter))
                     {
                         paramAttribute.Position = pos++;
@@ -1558,7 +1579,15 @@ private static Attribute NewOutputTypeAttribute(AttributeAst ast)
 
                 if (args[0] is Type)
                 {
-                    result = new OutputTypeAttribute(LanguagePrimitives.ConvertTo<Type[]>(args));
+                    // We avoid `ConvertTo<Type[]>(args)` here as CLM would throw due to `Type[]`
+                    // being a "non-core" type. NOTE: This doesn't apply to `string[]`.
+                    Type[] types = new Type[args.Length];
+                    for (int i = 0; i < args.Length; i++)
+                    {
+                        types[i] = LanguagePrimitives.ConvertTo<Type>(args[i]);
+                    }
+
+                    result = new OutputTypeAttribute(types);
                 }
                 else
                 {
@@ -1719,7 +1748,7 @@ internal static Attribute GetAttribute(AttributeAst attributeAst)
             }
 
             var positionalArgCount = attributeAst.PositionalArguments.Count;
-            var argumentNames = attributeAst.NamedArguments.Select(name => name.ArgumentName).ToArray();
+            var argumentNames = attributeAst.NamedArguments.Select(static name => name.ArgumentName).ToArray();
             var totalArgCount = positionalArgCount + argumentNames.Length;
             var callInfo = new CallInfo(totalArgCount, argumentNames);
 
@@ -1748,18 +1777,15 @@ internal static Attribute GetAttribute(AttributeAst attributeAst)
                 // Unwrap the wrapped exception
                 var innerException = tie.InnerException;
                 var rte = innerException as RuntimeException;
-                if (rte == null)
-                {
-                    rte = InterpreterError.NewInterpreterExceptionWithInnerException(
-                        null,
-                        typeof(RuntimeException),
-                        attributeAst.Extent,
-                        "ExceptionConstructingAttribute",
-                        ExtendedTypeSystem.ExceptionConstructingAttribute,
-                        innerException,
-                        innerException.Message,
-                        attributeAst.TypeName.FullName);
-                }
+                rte ??= InterpreterError.NewInterpreterExceptionWithInnerException(
+                    null,
+                    typeof(RuntimeException),
+                    attributeAst.Extent,
+                    "ExceptionConstructingAttribute",
+                    ExtendedTypeSystem.ExceptionConstructingAttribute,
+                    innerException,
+                    innerException.Message,
+                    attributeAst.TypeName.FullName);
 
                 InterpreterError.UpdateExceptionErrorRecordPosition(rte, attributeAst.Extent);
                 throw rte;
@@ -2026,6 +2052,7 @@ internal void Compile(CompiledScriptBlockData scriptBlock, bool optimize)
                 scriptBlock.BeginBlock = CompileTree(_beginBlockLambda, compileInterpretChoice);
                 scriptBlock.ProcessBlock = CompileTree(_processBlockLambda, compileInterpretChoice);
                 scriptBlock.EndBlock = CompileTree(_endBlockLambda, compileInterpretChoice);
+                scriptBlock.CleanBlock = CompileTree(_cleanBlockLambda, compileInterpretChoice);
                 scriptBlock.LocalsMutableTupleType = LocalVariablesTupleType;
                 scriptBlock.LocalsMutableTupleCreator = MutableTuple.TupleCreator(LocalVariablesTupleType);
                 scriptBlock.NameToIndexMap = nameToIndexMap;
@@ -2036,16 +2063,14 @@ internal void Compile(CompiledScriptBlockData scriptBlock, bool optimize)
                 scriptBlock.UnoptimizedBeginBlock = CompileTree(_beginBlockLambda, compileInterpretChoice);
                 scriptBlock.UnoptimizedProcessBlock = CompileTree(_processBlockLambda, compileInterpretChoice);
                 scriptBlock.UnoptimizedEndBlock = CompileTree(_endBlockLambda, compileInterpretChoice);
+                scriptBlock.UnoptimizedCleanBlock = CompileTree(_cleanBlockLambda, compileInterpretChoice);
                 scriptBlock.UnoptimizedLocalsMutableTupleType = LocalVariablesTupleType;
                 scriptBlock.UnoptimizedLocalsMutableTupleCreator = MutableTuple.TupleCreator(LocalVariablesTupleType);
             }
 
             // The sequence points are identical optimized or not.  Regardless, we want to ensure
             // that the list is unique no matter when the property is accessed, so make sure it is set just once.
-            if (scriptBlock.SequencePoints == null)
-            {
-                scriptBlock.SequencePoints = _sequencePoints.ToArray();
-            }
+            scriptBlock.SequencePoints ??= _sequencePoints.ToArray();
         }
 
         private static Action<FunctionContext> CompileTree(Expression<Action<FunctionContext>> lambda, CompileInterpretChoice compileInterpretChoice)
@@ -2114,10 +2139,7 @@ private static object GetExpressionValue(
 
             // Can't be exposed to untrusted input - invoking arbitrary code could result in remote code
             // execution.
-            if (lambda == null)
-            {
-                lambda = (new Compiler()).CompileSingleExpression(expressionAst, out sequencePoints, out localsTupleType);
-            }
+            lambda ??= (new Compiler()).CompileSingleExpression(expressionAst, out sequencePoints, out localsTupleType);
 
             SessionStateInternal oldSessionState = context.EngineSessionState;
             try
@@ -2200,7 +2222,7 @@ private Func<FunctionContext, object> CompileSingleExpression(ExpressionAst expr
             return Expression.Lambda<Func<FunctionContext, object>>(body, parameters).Compile();
         }
 
-        private class LoopGotoTargets
+        private sealed class LoopGotoTargets
         {
             internal LoopGotoTargets(string label, LabelTarget breakLabel, LabelTarget continueLabel)
             {
@@ -2221,6 +2243,7 @@ internal LoopGotoTargets(string label, LabelTarget breakLabel, LabelTarget conti
         private Expression<Action<FunctionContext>> _beginBlockLambda;
         private Expression<Action<FunctionContext>> _processBlockLambda;
         private Expression<Action<FunctionContext>> _endBlockLambda;
+        private Expression<Action<FunctionContext>> _cleanBlockLambda;
 
         private readonly List<LoopGotoTargets> _loopTargets = new List<LoopGotoTargets>();
         private bool _generatingWhileOrDoLoop;
@@ -2284,17 +2307,17 @@ private Expression CaptureAstResults(
                     if (context == CaptureAstContext.AssignmentWithoutResultPreservation)
                     {
                         var catchExprs = new List<Expression>
-                                         {
-                                             Expression.Call(CachedReflectionInfo.PipelineOps_ClearPipe, resultList),
-                                             Expression.Rethrow(),
-                                             Expression.Constant(null, typeof(object))
-                                         };
+                        {
+                            Expression.Call(CachedReflectionInfo.PipelineOps_ClearPipe, resultList),
+                            Expression.Rethrow(),
+                            Expression.Constant(null, typeof(object))
+                        };
 
                         catches.Add(Expression.Catch(typeof(RuntimeException), Expression.Block(typeof(object), catchExprs)));
                     }
 
-                    // PipelineResult might get skipped in some circumstances due to a FlowControlException thrown out, in which case
-                    // we write to the oldPipe. This can happen in cases like:
+                    // PipelineResult might get skipped in some circumstances due to an early return or a FlowControlException thrown out,
+                    // in which case we write to the oldPipe. This can happen in cases like:
                     //     $(1;2;return 3)
                     finallyExprs.Add(Expression.Call(CachedReflectionInfo.PipelineOps_FlushPipe, oldPipe, resultList));
                     break;
@@ -2386,7 +2409,7 @@ private Expression CaptureStatementResults(
             // We do this after evaluating the condition so that you could do something like:
             //    if ((dir file1,file2 -ea SilentlyContinue) -and $?) { <# files both exist, otherwise $? would be $false if 0 or 1 files existed #> }
             //
-            if (context == CaptureAstContext.Condition && AstSearcher.FindFirst(stmt, ast => ast is CommandAst, searchNestedScriptBlocks: false) != null)
+            if (context == CaptureAstContext.Condition && AstSearcher.FindFirst(stmt, static ast => ast is CommandAst, searchNestedScriptBlocks: false) != null)
             {
                 var tmp = NewTemp(result.Type, "condTmp");
                 result = Expression.Block(
@@ -2426,7 +2449,7 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
             var funcDefn = scriptBlockAst.Parent as FunctionDefinitionAst;
             var funcName = (funcDefn != null) ? funcDefn.Name : "<ScriptBlock>";
 
-            var rootForDefiningTypesAndUsings = scriptBlockAst.Find(ast => ast is TypeDefinitionAst || ast is UsingStatementAst, true) != null
+            var rootForDefiningTypesAndUsings = scriptBlockAst.Find(static ast => ast is TypeDefinitionAst || ast is UsingStatementAst, true) != null
                 ? scriptBlockAst
                 : null;
 
@@ -2463,6 +2486,13 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
                 }
 
                 _endBlockLambda = CompileNamedBlock(scriptBlockAst.EndBlock, funcName, rootForDefiningTypesAndUsings);
+                rootForDefiningTypesAndUsings = null;
+            }
+
+            if (scriptBlockAst.CleanBlock != null)
+            {
+                _cleanBlockLambda = CompileNamedBlock(scriptBlockAst.CleanBlock, funcName + "<Clean>", rootForDefiningTypesAndUsings);
+                rootForDefiningTypesAndUsings = null;
             }
 
             return null;
@@ -2566,7 +2596,7 @@ private Expression<Action<FunctionContext>> CompileSingleLambda(
             // to the right place.  We can avoid also avoid generating the catch if we know there aren't any traps.
             if (!_compilingTrap &&
                 ((traps != null && traps.Count > 0)
-                || statements.Any(stmt => AstSearcher.Contains(stmt, ast => ast is TrapStatementAst, searchNestedScriptBlocks: false))))
+                || statements.Any(static stmt => AstSearcher.Contains(stmt, static ast => ast is TrapStatementAst, searchNestedScriptBlocks: false))))
             {
                 body = Expression.Block(
                     new[] { s_executionContextParameter },
@@ -2605,12 +2635,12 @@ private static void GenerateTypesAndUsings(ScriptBlockAst rootForDefiningTypesAn
             {
                 if (rootForDefiningTypesAndUsings.UsingStatements.Count > 0)
                 {
-                    bool allUsingsAreNamespaces = rootForDefiningTypesAndUsings.UsingStatements.All(us => us.UsingStatementKind == UsingStatementKind.Namespace);
+                    bool allUsingsAreNamespaces = rootForDefiningTypesAndUsings.UsingStatements.All(static us => us.UsingStatementKind == UsingStatementKind.Namespace);
                     GenerateLoadUsings(rootForDefiningTypesAndUsings.UsingStatements, allUsingsAreNamespaces, exprs);
                 }
 
                 TypeDefinitionAst[] typeAsts =
-                    rootForDefiningTypesAndUsings.FindAll(ast => ast is TypeDefinitionAst, true)
+                    rootForDefiningTypesAndUsings.FindAll(static ast => ast is TypeDefinitionAst, true)
                         .Cast<TypeDefinitionAst>()
                         .ToArray();
 
@@ -2628,9 +2658,9 @@ private static void GenerateTypesAndUsings(ScriptBlockAst rootForDefiningTypesAn
             }
 
             Dictionary<string, TypeDefinitionAst> typesToAddToScope =
-                rootForDefiningTypesAndUsings.FindAll(ast => ast is TypeDefinitionAst, false)
+                rootForDefiningTypesAndUsings.FindAll(static ast => ast is TypeDefinitionAst, false)
                     .Cast<TypeDefinitionAst>()
-                    .ToDictionary(type => type.Name);
+                    .ToDictionary(static type => type.Name);
             if (typesToAddToScope.Count > 0)
             {
                 exprs.Add(
@@ -2794,15 +2824,9 @@ private static Assembly LoadAssembly(string assemblyName, string scriptFileName)
             {
                 if (!string.IsNullOrEmpty(scriptFileName) && !Path.IsPathRooted(assemblyFileName))
                 {
-                    assemblyFileName = Path.GetDirectoryName(scriptFileName) + "\\" + assemblyFileName;
+                    assemblyFileName = Path.Combine(Path.GetDirectoryName(scriptFileName), assemblyFileName);
                 }
 
-#if !CORECLR
-                if (!File.Exists(assemblyFileName))
-                {
-                    Microsoft.CodeAnalysis.GlobalAssemblyCache.ResolvePartialName(assemblyName, out assemblyFileName);
-                }
-#endif
                 if (File.Exists(assemblyFileName))
                 {
                     assembly = Assembly.LoadFrom(assemblyFileName);
@@ -3279,9 +3303,9 @@ private bool ShouldSetExecutionStatusToSuccess(StatementAst statementAst)
         /// <returns>True is the compiler should add the success setting, false otherwise.</returns>
         private bool ShouldSetExecutionStatusToSuccess(PipelineAst pipelineAst)
         {
-            ExpressionAst expressionAst = pipelineAst.GetPureExpression();
+            ExpressionAst expressionAst = GetSingleExpressionFromPipeline(pipelineAst);
 
-            // If the pipeline is not a simple expression, it will set $?
+            // If the pipeline is not a single expression, it will set $?
             if (expressionAst == null)
             {
                 return false;
@@ -3291,6 +3315,22 @@ private bool ShouldSetExecutionStatusToSuccess(PipelineAst pipelineAst)
             return ShouldSetExecutionStatusToSuccess(expressionAst);
         }
 
+        /// <summary>
+        /// If the pipeline contains a single expression, the expression is returned, otherwise null is returned.
+        /// This method is different from <see cref="PipelineAst.GetPureExpression"/> in that it allows the single
+        /// expression to have redirections.
+        /// </summary>
+        private static ExpressionAst GetSingleExpressionFromPipeline(PipelineAst pipelineAst)
+        {
+            var pipelineElements = pipelineAst.PipelineElements;
+            if (pipelineElements.Count == 1 && pipelineElements[0] is CommandExpressionAst expr)
+            {
+                return expr.Expression;
+            }
+
+            return null;
+        }
+
         /// <summary>
         /// Determines whether an assignment statement must have an explicit setting
         /// for $? = $true after it by the compiler.
@@ -3584,7 +3624,7 @@ public object VisitPipelineChain(PipelineChainAst pipelineChainAst)
             var dispatchTargets = new List<LabelTarget>();
             var tryBodyExprs = new List<Expression>()
             {
-                null, // Add a slot for the inital switch/case that we'll come back to
+                null, // Add a slot for the initial switch/case that we'll come back to
             };
 
             // L0: dispatchIndex = 1; pipeline1
@@ -3778,20 +3818,20 @@ public object VisitPipeline(PipelineAst pipelineAst)
                     // one dimension because each command may have multiple redirections.  Here we create the array for
                     // each command in the pipe, either a compile time constant or created at runtime if necessary.
                     Expression redirectionExpr;
-                    if (commandRedirections.Any(r => r is Expression))
+                    if (commandRedirections.Any(static r => r is Expression))
                     {
                         // If any command redirections are non-constant, commandRedirections will have a Linq.Expression in it,
                         // in which case we must create the array at runtime
                         redirectionExpr =
                             Expression.NewArrayInit(
                                 typeof(CommandRedirection[]),
-                                commandRedirections.Select(r => (r as Expression) ?? Expression.Constant(r, typeof(CommandRedirection[]))));
+                                commandRedirections.Select(static r => (r as Expression) ?? Expression.Constant(r, typeof(CommandRedirection[]))));
                     }
-                    else if (commandRedirections.Any(r => r != null))
+                    else if (commandRedirections.Any(static r => r != null))
                     {
                         // There were redirections, but all were compile time constant, so build the array at compile time.
                         redirectionExpr =
-                            Expression.Constant(commandRedirections.Map(r => r as CommandRedirection[]));
+                            Expression.Constant(commandRedirections.Map(static r => r as CommandRedirection[]));
                     }
                     else
                     {
@@ -3839,15 +3879,15 @@ private object GetCommandRedirections(CommandBaseAst command)
             }
 
             // If there were any non-constant expressions, we must generate the array at runtime.
-            if (compiledRedirections.Any(r => r is Expression))
+            if (compiledRedirections.Any(static r => r is Expression))
             {
                 return Expression.NewArrayInit(
                     typeof(CommandRedirection),
-                    compiledRedirections.Select(r => (r as Expression) ?? Expression.Constant(r)));
+                    compiledRedirections.Select(static r => (r as Expression) ?? Expression.Constant(r)));
             }
 
             // Otherwise, we can use a compile time constant array.
-            return compiledRedirections.Map(r => (CommandRedirection)r);
+            return compiledRedirections.Map(static r => (CommandRedirection)r);
         }
 
         // A redirected expression requires extra work because there is no CommandProcessor or PipelineProcessor
@@ -3871,7 +3911,7 @@ private Expression GetRedirectedExpression(CommandExpressionAst commandExpr, boo
             //       funcContext.OutputPipe = oldPipe;
             //   }
             //
-            // In the above psuedo-code, any of {outputFileRedirection, nonOutputFileRedirection, mergingRedirection} may
+            // In the above pseudo-code, any of {outputFileRedirection, nonOutputFileRedirection, mergingRedirection} may
             // not exist, but the order is preserved, so that file redirections go before merging redirections (so that
             // funcContext.OutputPipe has the correct value when setting up merging.)
             //
@@ -3882,7 +3922,7 @@ private Expression GetRedirectedExpression(CommandExpressionAst commandExpr, boo
             // For the output stream, we change funcContext.OutputPipe so all output goes to the file.
             // Currently output can only be redirected to a file stream.
             bool outputRedirected =
-                commandExpr.Redirections.Any(r => r is FileRedirectionAst &&
+                commandExpr.Redirections.Any(static r => r is FileRedirectionAst &&
                                                   (r.FromStream == RedirectionStream.Output || r.FromStream == RedirectionStream.All));
 
             ParameterExpression resultList = null;
@@ -3910,10 +3950,7 @@ private Expression GetRedirectedExpression(CommandExpressionAst commandExpr, boo
                 // This will simply return a Linq.Expression representing the redirection.
                 var compiledRedirection = VisitFileRedirection(fileRedirectionAst);
 
-                if (extraFileRedirectExprs == null)
-                {
-                    extraFileRedirectExprs = new List<Expression>(commandExpr.Redirections.Count);
-                }
+                extraFileRedirectExprs ??= new List<Expression>(commandExpr.Redirections.Count);
 
                 // Hold the current 'FileRedirection' instance for later use
                 var redirectionExpr = NewTemp(typeof(FileRedirection), "fileRedirection");
@@ -4277,7 +4314,7 @@ internal static Expression ThrowRuntimeError(string errorID, string resourceStri
         internal static Expression ThrowRuntimeError(Type exceptionType, string errorID, string resourceString, Type throwResultType, params Expression[] exceptionArgs)
         {
             var exceptionArgArray = exceptionArgs != null
-                                        ? Expression.NewArrayInit(typeof(object), exceptionArgs.Select(e => e.Cast(typeof(object))))
+                                        ? Expression.NewArrayInit(typeof(object), exceptionArgs.Select(static e => e.Cast(typeof(object))))
                                         : ExpressionCache.NullConstant;
             Expression[] argExprs = new Expression[]
             {
@@ -5142,7 +5179,7 @@ public object VisitCatchClause(CatchClauseAst catchClauseAst)
         // If the automatic var has no value in the current frame, then we set the variable's value to $null
         // after leaving the stmt.
         //
-        // The psuedo-code:
+        // The pseudo-code:
         //
         //    try {
         //        oldValue = (localSet.Get(automaticVar)) ? locals.ItemNNN : null;
@@ -5154,7 +5191,7 @@ public object VisitCatchClause(CatchClauseAst catchClauseAst)
         //    }
         //
         // This is a little convoluted because an automatic variable isn't necessarily set.
-        private class AutomaticVarSaver
+        private sealed class AutomaticVarSaver
         {
             private readonly Compiler _compiler;
             private readonly int _automaticVar;
@@ -5581,7 +5618,9 @@ public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
                 return Expression.Block(returnValue, returnExpr);
             }
 
-            return returnExpr;
+            return Expression.Block(
+                UpdatePosition(returnStatementAst),
+                returnExpr);
         }
 
         public object VisitExitStatement(ExitStatementAst exitStatementAst)
@@ -6097,9 +6136,7 @@ public object VisitConvertExpression(ConvertExpressionAst convertExpressionAst)
                 {
                     // We'll wrap the variable in a PSReference, but not the constant variables ($true, $false, $null) because those
                     // can't be changed.
-                    IEnumerable<PropertyInfo> unused1;
-                    bool unused2;
-                    var varType = varExpr.GetVariableType(this, out unused1, out unused2);
+                    var varType = varExpr.GetVariableType(this, out _, out _);
                     return Expression.Call(
                         CachedReflectionInfo.VariableOps_GetVariableAsRef,
                         Expression.Constant(varExpr.VariablePath),
@@ -6110,10 +6147,7 @@ public object VisitConvertExpression(ConvertExpressionAst convertExpressionAst)
                 }
             }
 
-            if (childExpr == null)
-            {
-                childExpr = Compile(convertExpressionAst.Child);
-            }
+            childExpr ??= Compile(convertExpressionAst.Child);
 
             if (typeName.FullName.Equals("PSCustomObject", StringComparison.OrdinalIgnoreCase))
             {
@@ -6310,17 +6344,48 @@ public object VisitMemberExpression(MemberExpressionAst memberExpressionAst)
 
         internal static PSMethodInvocationConstraints GetInvokeMemberConstraints(InvokeMemberExpressionAst invokeMemberExpressionAst)
         {
-            var arguments = invokeMemberExpressionAst.Arguments;
+            ReadOnlyCollection<ExpressionAst> arguments = invokeMemberExpressionAst.Arguments;
+            Type[] argumentTypes = null;
+            if (arguments is not null)
+            {
+                argumentTypes = new Type[arguments.Count];
+                for (var i = 0; i < arguments.Count; i++)
+                {
+                    argumentTypes[i] = GetTypeConstraintForMethodResolution(arguments[i]);
+                }
+            }
+
             var targetTypeConstraint = GetTypeConstraintForMethodResolution(invokeMemberExpressionAst.Expression);
-            return CombineTypeConstraintForMethodResolution(
-                    targetTypeConstraint,
-                    arguments?.Select(Compiler.GetTypeConstraintForMethodResolution).ToArray());
+
+            ReadOnlyCollection<ITypeName> genericArguments = invokeMemberExpressionAst.GenericTypeArguments;
+            object[] genericTypeArguments = null;
+            if (genericArguments is not null)
+            {
+                genericTypeArguments = new object[genericArguments.Count];
+                for (var i = 0; i < genericArguments.Count; i++)
+                {
+                    Type type = genericArguments[i].GetReflectionType();
+                    genericTypeArguments[i] = (object)type ?? genericArguments[i];
+                }
+            }
+
+            return CombineTypeConstraintForMethodResolution(targetTypeConstraint, argumentTypes, genericTypeArguments);
         }
 
         internal static PSMethodInvocationConstraints GetInvokeMemberConstraints(BaseCtorInvokeMemberExpressionAst invokeMemberExpressionAst)
         {
             Type targetTypeConstraint = null;
-            var arguments = invokeMemberExpressionAst.Arguments;
+            ReadOnlyCollection<ExpressionAst> arguments = invokeMemberExpressionAst.Arguments;
+            Type[] argumentTypes = null;
+            if (arguments is not null)
+            {
+                argumentTypes = new Type[arguments.Count];
+                for (var i = 0; i < arguments.Count; i++)
+                {
+                    argumentTypes[i] = GetTypeConstraintForMethodResolution(arguments[i]);
+                }
+            }
+
             TypeDefinitionAst typeDefinitionAst = Ast.GetAncestorTypeDefinitionAst(invokeMemberExpressionAst);
             if (typeDefinitionAst != null)
             {
@@ -6331,9 +6396,7 @@ internal static PSMethodInvocationConstraints GetInvokeMemberConstraints(BaseCto
                 Diagnostics.Assert(false, "BaseCtorInvokeMemberExpressionAst must be used only inside TypeDefinitionAst");
             }
 
-            return CombineTypeConstraintForMethodResolution(
-                    targetTypeConstraint,
-                    arguments?.Select(Compiler.GetTypeConstraintForMethodResolution).ToArray());
+            return CombineTypeConstraintForMethodResolution(targetTypeConstraint, argumentTypes, genericArguments: null);
         }
 
         internal Expression InvokeMember(
@@ -6705,8 +6768,8 @@ public Expression GetValue(Compiler compiler, List<Expression> exprs, List<Param
             int exprsIndex = exprs.Count;
 
             var args = GetArgumentExprs(compiler);
-            _argExprTemps = args.Select(arg => Expression.Variable(arg.Type)).ToArray();
-            exprs.AddRange(args.Zip(_argExprTemps, (arg, temp) => Expression.Assign(temp, arg)));
+            _argExprTemps = args.Select(static arg => Expression.Variable(arg.Type)).ToArray();
+            exprs.AddRange(args.Zip(_argExprTemps, static (arg, temp) => Expression.Assign(temp, arg)));
 
             temps.Add(_targetExprTemp);
             int tempsIndex = temps.Count;
@@ -6918,10 +6981,7 @@ public void AddInstructions(LightCompiler compiler)
             compiler.PopLabelBlock(LabelScopeKind.Statement);
 
             // If enterLoop is null, we will never JIT compile the loop.
-            if (enterLoop != null)
-            {
-                enterLoop.FinishLoop(compiler.Instructions.Count);
-            }
+            enterLoop?.FinishLoop(compiler.Instructions.Count);
         }
     }
 
diff --git a/src/System.Management.Automation/engine/parser/ConstantValues.cs b/src/System.Management.Automation/engine/parser/ConstantValues.cs
index a8ada5f96d5..d580148ddd2 100644
--- a/src/System.Management.Automation/engine/parser/ConstantValues.cs
+++ b/src/System.Management.Automation/engine/parser/ConstantValues.cs
@@ -148,8 +148,16 @@ public static bool IsConstant(Ast ast, out object constantValue, bool forAttribu
 
         public object VisitStatementBlock(StatementBlockAst statementBlockAst)
         {
-            if (statementBlockAst.Traps != null) return false;
-            if (statementBlockAst.Statements.Count > 1) return false;
+            if (statementBlockAst.Traps != null) 
+            {
+                return false;
+            }
+
+            if (statementBlockAst.Statements.Count > 1)
+            {
+                return false;
+            }
+
             var pipeline = statementBlockAst.Statements.FirstOrDefault();
             return pipeline != null && (bool)pipeline.Accept(this);
         }
diff --git a/src/System.Management.Automation/engine/parser/DebugViewWriter.cs b/src/System.Management.Automation/engine/parser/DebugViewWriter.cs
index 69e8aae634b..cb280bdaf61 100644
--- a/src/System.Management.Automation/engine/parser/DebugViewWriter.cs
+++ b/src/System.Management.Automation/engine/parser/DebugViewWriter.cs
@@ -985,7 +985,7 @@ protected override Expression VisitBlock(BlockExpression node) {
             // Display <type> if the type of the BlockExpression is different from the
             // last expression's type in the block.
             if (node.Type != node.Expressions[node.Expressions.Count - 1].Type) {
-                Out(string.Format(CultureInfo.CurrentCulture, "<{0}>", node.Type.ToString()));
+                Out(string.Create(CultureInfo.CurrentCulture, $"<{node.Type}>"));
             }
 
             VisitDeclarations(node.Variables);
@@ -1124,7 +1124,7 @@ protected override Expression VisitIndex(IndexExpression node) {
         }
 
         protected override Expression VisitExtension(Expression node) {
-            Out(string.Format(CultureInfo.CurrentCulture, ".Extension<{0}>", node.GetType().ToString()));
+            Out(string.Create(CultureInfo.CurrentCulture, $".Extension<{node.GetType()}>"));
 
             if (node.CanReduce) {
                 Out(Flow.Space, "{", Flow.NewLine);
@@ -1151,13 +1151,13 @@ protected override Expression VisitDebugInfo(DebugInfoExpression node) {
         }
 
         private void DumpLabel(LabelTarget target) {
-            Out(string.Format(CultureInfo.CurrentCulture, ".LabelTarget {0}:", GetLabelTargetName(target)));
+            Out(string.Create(CultureInfo.CurrentCulture, $".LabelTarget {GetLabelTargetName(target)}:"));
         }
 
         private string GetLabelTargetName(LabelTarget target) {
             if (string.IsNullOrEmpty(target.Name)) {
                 // Create the label target name as #Label1, #Label2, etc.
-                return string.Format(CultureInfo.CurrentCulture, "#Label{0}", GetLabelTargetId(target));
+                return string.Create(CultureInfo.CurrentCulture, $"#Label{GetLabelTargetId(target)}");
             } else {
                 return GetDisplayName(target.Name);
             }
@@ -1165,11 +1165,7 @@ private string GetLabelTargetName(LabelTarget target) {
 
         private void WriteLambda(LambdaExpression lambda) {
             Out(
-                string.Format(
-                    CultureInfo.CurrentCulture,
-                    ".Lambda {0}<{1}>",
-                    GetLambdaName(lambda),
-                    lambda.Type.ToString())
+                string.Create(CultureInfo.CurrentCulture, $".Lambda {GetLambdaName(lambda)}<{lambda.Type}>")
             );
 
             VisitDeclarations(lambda.Parameters);
@@ -1205,7 +1201,7 @@ private static bool ContainsWhiteSpace(string name) {
         }
 
         private static string QuoteName(string name) {
-            return string.Format(CultureInfo.CurrentCulture, "'{0}'", name);
+            return string.Create(CultureInfo.CurrentCulture, $"'{name}'");
         }
 
         private static string GetDisplayName(string name) {
diff --git a/src/System.Management.Automation/engine/parser/FusionAssemblyIdentity.cs b/src/System.Management.Automation/engine/parser/FusionAssemblyIdentity.cs
deleted file mode 100644
index 79df05d09f4..00000000000
--- a/src/System.Management.Automation/engine/parser/FusionAssemblyIdentity.cs
+++ /dev/null
@@ -1,316 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// Code in this file was copied from https://github.com/dotnet/roslyn
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-#if !CORECLR
-namespace Microsoft.CodeAnalysis
-{
-    internal sealed class FusionAssemblyIdentity
-    {
-        [Flags]
-        internal enum ASM_DISPLAYF
-        {
-            VERSION = 0x01,
-            CULTURE = 0x02,
-            PUBLIC_KEY_TOKEN = 0x04,
-            PUBLIC_KEY = 0x08,
-            CUSTOM = 0x10,
-            PROCESSORARCHITECTURE = 0x20,
-            LANGUAGEID = 0x40,
-            RETARGET = 0x80,
-            CONFIG_MASK = 0x100,
-            MVID = 0x200,
-            CONTENT_TYPE = 0x400,
-            FULL = VERSION | CULTURE | PUBLIC_KEY_TOKEN | RETARGET | PROCESSORARCHITECTURE | CONTENT_TYPE
-        }
-
-        internal enum PropertyId
-        {
-            PUBLIC_KEY = 0,        // 0
-            PUBLIC_KEY_TOKEN,      // 1
-            HASH_VALUE,            // 2
-            NAME,                  // 3
-            MAJOR_VERSION,         // 4
-            MINOR_VERSION,         // 5
-            BUILD_NUMBER,          // 6
-            REVISION_NUMBER,       // 7
-            CULTURE,               // 8
-            PROCESSOR_ID_ARRAY,    // 9
-            OSINFO_ARRAY,          // 10
-            HASH_ALGID,            // 11
-            ALIAS,                 // 12
-            CODEBASE_URL,          // 13
-            CODEBASE_LASTMOD,      // 14
-            NULL_PUBLIC_KEY,       // 15
-            NULL_PUBLIC_KEY_TOKEN, // 16
-            CUSTOM,                // 17
-            NULL_CUSTOM,           // 18
-            MVID,                  // 19
-            FILE_MAJOR_VERSION,    // 20
-            FILE_MINOR_VERSION,    // 21
-            FILE_BUILD_NUMBER,     // 22
-            FILE_REVISION_NUMBER,  // 23
-            RETARGET,              // 24
-            SIGNATURE_BLOB,        // 25
-            CONFIG_MASK,           // 26
-            ARCHITECTURE,          // 27
-            CONTENT_TYPE,          // 28
-            MAX_PARAMS             // 29
-        }
-
-        private static class CANOF
-        {
-            public const uint PARSE_DISPLAY_NAME = 0x1;
-            public const uint SET_DEFAULT_VALUES = 0x2;
-        }
-
-        [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("CD193BC0-B4BC-11d2-9833-00C04FC31D2E")]
-        internal unsafe interface IAssemblyName
-        {
-            void SetProperty(PropertyId id, void* data, uint size);
-
-            [PreserveSig]
-            int GetProperty(PropertyId id, void* data, ref uint size);
-
-            [PreserveSig]
-            int Finalize();
-
-            [PreserveSig]
-            int GetDisplayName(byte* buffer, ref uint characterCount, ASM_DISPLAYF dwDisplayFlags);
-
-            [PreserveSig]
-            int __BindToObject(/*...*/);
-
-            [PreserveSig]
-            int __GetName(/*...*/);
-
-            [PreserveSig]
-            int GetVersion(out uint versionHi, out uint versionLow);
-
-            [PreserveSig]
-            int IsEqual(IAssemblyName pName, uint dwCmpFlags);
-
-            [PreserveSig]
-            int Clone(out IAssemblyName pName);
-        }
-
-        [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("7c23ff90-33af-11d3-95da-00a024a85b51")]
-        internal interface IApplicationContext
-        {
-        }
-
-        // NOTE: The CLR caches assembly identities, but doesn't do so in a threadsafe manner.
-        // Wrap all calls to this with a lock.
-        private static object s_assemblyIdentityGate = new object();
-        private static int CreateAssemblyNameObject(out IAssemblyName ppEnum, string szAssemblyName, uint dwFlags, IntPtr pvReserved)
-        {
-            lock (s_assemblyIdentityGate)
-            {
-                return RealCreateAssemblyNameObject(out ppEnum, szAssemblyName, dwFlags, pvReserved);
-            }
-        }
-
-        [DllImport("clr", EntryPoint = "CreateAssemblyNameObject", CharSet = CharSet.Unicode, PreserveSig = true)]
-        private static extern int RealCreateAssemblyNameObject(out IAssemblyName ppEnum, [MarshalAs(UnmanagedType.LPWStr)]string szAssemblyName, uint dwFlags, IntPtr pvReserved);
-
-        private const int ERROR_INSUFFICIENT_BUFFER = unchecked((int)0x8007007A);
-        private const int FUSION_E_INVALID_NAME = unchecked((int)0x80131047);
-
-        internal static unsafe string GetDisplayName(IAssemblyName nameObject, ASM_DISPLAYF displayFlags)
-        {
-            int hr;
-            uint characterCountIncludingTerminator = 0;
-
-            hr = nameObject.GetDisplayName(null, ref characterCountIncludingTerminator, displayFlags);
-            if (hr == 0)
-            {
-                return string.Empty;
-            }
-
-            if (hr != ERROR_INSUFFICIENT_BUFFER)
-            {
-                Marshal.ThrowExceptionForHR(hr);
-            }
-
-            byte[] data = new byte[(int)characterCountIncludingTerminator * 2];
-            fixed (byte* p = data)
-            {
-                hr = nameObject.GetDisplayName(p, ref characterCountIncludingTerminator, displayFlags);
-                Marshal.ThrowExceptionForHR(hr);
-
-                return Marshal.PtrToStringUni((IntPtr)p, (int)characterCountIncludingTerminator - 1);
-            }
-        }
-
-        internal static unsafe byte[] GetPropertyBytes(IAssemblyName nameObject, PropertyId propertyId)
-        {
-            int hr;
-            uint size = 0;
-
-            hr = nameObject.GetProperty(propertyId, null, ref size);
-            if (hr == 0)
-            {
-                return null;
-            }
-
-            if (hr != ERROR_INSUFFICIENT_BUFFER)
-            {
-                Marshal.ThrowExceptionForHR(hr);
-            }
-
-            byte[] data = new byte[(int)size];
-            fixed (byte* p = data)
-            {
-                hr = nameObject.GetProperty(propertyId, p, ref size);
-                Marshal.ThrowExceptionForHR(hr);
-            }
-
-            return data;
-        }
-
-        internal static unsafe string GetPropertyString(IAssemblyName nameObject, PropertyId propertyId)
-        {
-            byte[] data = GetPropertyBytes(nameObject, propertyId);
-            if (data == null)
-            {
-                return null;
-            }
-
-            fixed (byte* p = data)
-            {
-                return Marshal.PtrToStringUni((IntPtr)p, (data.Length / 2) - 1);
-            }
-        }
-
-        internal static unsafe Version GetVersion(IAssemblyName nameObject)
-        {
-            uint hi, lo;
-            int hr = nameObject.GetVersion(out hi, out lo);
-            if (hr != 0)
-            {
-                Debug.Assert(hr == FUSION_E_INVALID_NAME);
-                return null;
-            }
-
-            return new Version((int)(hi >> 16), (int)(hi & 0xffff), (int)(lo >> 16), (int)(lo & 0xffff));
-        }
-
-        internal static unsafe uint? GetPropertyWord(IAssemblyName nameObject, PropertyId propertyId)
-        {
-            uint result;
-            uint size = sizeof(uint);
-            int hr = nameObject.GetProperty(propertyId, &result, ref size);
-            Marshal.ThrowExceptionForHR(hr);
-
-            if (size == 0)
-            {
-                return null;
-            }
-
-            return result;
-        }
-
-        internal static string GetCulture(IAssemblyName nameObject)
-        {
-            return GetPropertyString(nameObject, PropertyId.CULTURE);
-        }
-
-        internal static ProcessorArchitecture GetProcessorArchitecture(IAssemblyName nameObject)
-        {
-            return (ProcessorArchitecture)(GetPropertyWord(nameObject, PropertyId.ARCHITECTURE) ?? 0);
-        }
-
-        /// <summary>
-        /// Creates <see cref="IAssemblyName"/> object by parsing given display name.
-        /// </summary>
-        internal static IAssemblyName ToAssemblyNameObject(string displayName)
-        {
-            // CLR doesn't handle \0 in the display name well:
-            if (displayName.IndexOf('\0') >= 0)
-            {
-                return null;
-            }
-
-            Debug.Assert(displayName != null);
-            IAssemblyName result;
-            int hr = CreateAssemblyNameObject(out result, displayName, CANOF.PARSE_DISPLAY_NAME, IntPtr.Zero);
-            if (hr != 0)
-            {
-                return null;
-            }
-
-            Debug.Assert(result != null);
-            return result;
-        }
-
-        /// <summary>
-        /// Selects the candidate assembly with the largest version number.  Uses culture as a tie-breaker if it is provided.
-        /// All candidates are assumed to have the same name and must include versions and cultures.
-        /// </summary>
-        internal static IAssemblyName GetBestMatch(IEnumerable<IAssemblyName> candidates, string preferredCultureOpt)
-        {
-            IAssemblyName bestCandidate = null;
-            Version bestVersion = null;
-            string bestCulture = null;
-            foreach (var candidate in candidates)
-            {
-                if (bestCandidate != null)
-                {
-                    Version candidateVersion = GetVersion(candidate);
-                    Debug.Assert(candidateVersion != null);
-
-                    if (bestVersion == null)
-                    {
-                        bestVersion = GetVersion(bestCandidate);
-                        Debug.Assert(bestVersion != null);
-                    }
-
-                    int cmp = bestVersion.CompareTo(candidateVersion);
-                    if (cmp == 0)
-                    {
-                        if (preferredCultureOpt != null)
-                        {
-                            string candidateCulture = GetCulture(candidate);
-                            Debug.Assert(candidateCulture != null);
-
-                            if (bestCulture == null)
-                            {
-                                bestCulture = GetCulture(candidate);
-                                Debug.Assert(bestCulture != null);
-                            }
-
-                            // we have exactly the preferred culture or
-                            // we have neutral culture and the best candidate's culture isn't the preferred one:
-                            if (StringComparer.OrdinalIgnoreCase.Equals(candidateCulture, preferredCultureOpt) ||
-                                candidateCulture.Length == 0 && !StringComparer.OrdinalIgnoreCase.Equals(bestCulture, preferredCultureOpt))
-                            {
-                                bestCandidate = candidate;
-                                bestVersion = candidateVersion;
-                                bestCulture = candidateCulture;
-                            }
-                        }
-                    }
-                    else if (cmp < 0)
-                    {
-                        bestCandidate = candidate;
-                        bestVersion = candidateVersion;
-                    }
-                }
-                else
-                {
-                    bestCandidate = candidate;
-                }
-            }
-
-            return bestCandidate;
-        }
-    }
-}
-#endif // !CORECLR
diff --git a/src/System.Management.Automation/engine/parser/GlobalAssemblyCache.cs b/src/System.Management.Automation/engine/parser/GlobalAssemblyCache.cs
deleted file mode 100644
index 3761c55d3dc..00000000000
--- a/src/System.Management.Automation/engine/parser/GlobalAssemblyCache.cs
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// Code in this file was copied from https://github.com/dotnet/roslyn
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-#if !CORECLR // Only enable/port what is needed by CORE CLR.
-namespace Microsoft.CodeAnalysis
-{
-    /// <summary>
-    /// Provides APIs to enumerate and look up assemblies stored in the Global Assembly Cache.
-    /// </summary>
-    internal static class GlobalAssemblyCache
-    {
-        /// <summary>
-        /// Represents the current Processor architecture.
-        /// </summary>
-        public static readonly ProcessorArchitecture[] CurrentArchitectures = (IntPtr.Size == 4)
-            ? new[] { ProcessorArchitecture.None, ProcessorArchitecture.MSIL, ProcessorArchitecture.X86 }
-
-            : new[] { ProcessorArchitecture.None, ProcessorArchitecture.MSIL, ProcessorArchitecture.Amd64 };
-
-#region Interop
-
-        private const int MAX_PATH = 260;
-
-        [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("21b8916c-f28e-11d2-a473-00c04f8ef448")]
-        private interface IAssemblyEnum
-        {
-            [PreserveSig]
-            int GetNextAssembly(out FusionAssemblyIdentity.IApplicationContext ppAppCtx, out FusionAssemblyIdentity.IAssemblyName ppName, uint dwFlags);
-
-            [PreserveSig]
-            int Reset();
-
-            [PreserveSig]
-            int Clone(out IAssemblyEnum ppEnum);
-        }
-
-        [ComImport, Guid("e707dcde-d1cd-11d2-bab9-00c04f8eceae"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
-        private interface IAssemblyCache
-        {
-            void UninstallAssembly();
-
-            void QueryAssemblyInfo(uint dwFlags, [MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName, ref ASSEMBLY_INFO pAsmInfo);
-
-            void CreateAssemblyCacheItem();
-            void CreateAssemblyScavenger();
-            void InstallAssembly();
-        }
-
-        [StructLayout(LayoutKind.Sequential)]
-        private unsafe struct ASSEMBLY_INFO
-        {
-            public uint cbAssemblyInfo;
-            public uint dwAssemblyFlags;
-            public ulong uliAssemblySizeInKB;
-            public char* pszCurrentAssemblyPathBuf;
-            public uint cchBuf;
-        }
-
-        private enum ASM_CACHE
-        {
-            ZAP = 0x1,
-            GAC = 0x2,                // C:\Windows\Assembly\GAC
-            DOWNLOAD = 0x4,
-            ROOT = 0x8,               // C:\Windows\Assembly
-            GAC_MSIL = 0x10,
-            GAC_32 = 0x20,            // C:\Windows\Assembly\GAC_32
-            GAC_64 = 0x40,            // C:\Windows\Assembly\GAC_64
-            ROOT_EX = 0x80,           // C:\Windows\Microsoft.NET\assembly
-        }
-
-        [DllImport("clr", CharSet = CharSet.Auto, PreserveSig = true)]
-        private static extern int CreateAssemblyEnum(out IAssemblyEnum ppEnum, FusionAssemblyIdentity.IApplicationContext pAppCtx, FusionAssemblyIdentity.IAssemblyName pName, ASM_CACHE dwFlags, IntPtr pvReserved);
-
-        [DllImport("clr", CharSet = CharSet.Auto, PreserveSig = false)]
-        private static extern void CreateAssemblyCache(out IAssemblyCache ppAsmCache, uint dwReserved);
-
-#endregion
-
-        private const int S_OK = 0;
-        private const int S_FALSE = 1;
-
-        // Internal for testing.
-        internal static IEnumerable<FusionAssemblyIdentity.IAssemblyName> GetAssemblyObjects(
-            FusionAssemblyIdentity.IAssemblyName partialNameFilter,
-            ProcessorArchitecture[] architectureFilter)
-        {
-            IAssemblyEnum enumerator;
-
-            int hr = CreateAssemblyEnum(out enumerator, null, partialNameFilter, ASM_CACHE.GAC, IntPtr.Zero);
-            if (hr == S_FALSE)
-            {
-                // no assembly found
-                yield break;
-            }
-
-            if (hr != S_OK)
-            {
-                Exception e = Marshal.GetExceptionForHR(hr);
-                if (e is FileNotFoundException)
-                {
-                    // invalid assembly name:
-                    yield break;
-                }
-
-                if (e != null)
-                {
-                    throw e;
-                }
-                // for some reason it might happen that CreateAssemblyEnum returns non-zero HR that doesn't correspond to any exception:
-                throw new ArgumentException("Invalid assembly name");
-            }
-
-            while (true)
-            {
-                FusionAssemblyIdentity.IAssemblyName nameObject;
-
-                FusionAssemblyIdentity.IApplicationContext applicationContext;
-                hr = enumerator.GetNextAssembly(out applicationContext, out nameObject, 0);
-                if (hr != 0)
-                {
-                    if (hr < 0)
-                    {
-                        Marshal.ThrowExceptionForHR(hr);
-                    }
-
-                    break;
-                }
-
-                if (architectureFilter != null)
-                {
-                    var assemblyArchitecture = FusionAssemblyIdentity.GetProcessorArchitecture(nameObject);
-                    if (!architectureFilter.Contains(assemblyArchitecture))
-                    {
-                        continue;
-                    }
-                }
-
-                yield return nameObject;
-            }
-        }
-
-        /// <summary>
-        /// Looks up specified partial assembly name in the GAC and returns the best matching full assembly name/>.
-        /// </summary>
-        /// <param name="displayName">The display name of an assembly.</param>
-        /// <param name="location">Full path name of the resolved assembly.</param>
-        /// <param name="architectureFilter">The optional processor architecture.</param>
-        /// <param name="preferredCulture">The optional preferred culture information.</param>
-        /// <returns>An assembly identity or null, if <paramref name="displayName"/> can't be resolved.</returns>
-        /// <exception cref="ArgumentNullException"><paramref name="displayName"/> is null.</exception>
-        public static unsafe string ResolvePartialName(
-            string displayName,
-            out string location,
-            ProcessorArchitecture[] architectureFilter = null,
-            CultureInfo preferredCulture = null)
-        {
-            if (displayName == null)
-            {
-                throw new ArgumentNullException("displayName");
-            }
-
-            location = null;
-            FusionAssemblyIdentity.IAssemblyName nameObject = FusionAssemblyIdentity.ToAssemblyNameObject(displayName);
-            if (nameObject == null)
-            {
-                return null;
-            }
-
-            var candidates = GetAssemblyObjects(nameObject, architectureFilter);
-            string cultureName = (preferredCulture != null && !preferredCulture.IsNeutralCulture) ? preferredCulture.Name : null;
-
-            var bestMatch = FusionAssemblyIdentity.GetBestMatch(candidates, cultureName);
-            if (bestMatch == null)
-            {
-                return null;
-            }
-
-            string fullName = FusionAssemblyIdentity.GetDisplayName(bestMatch, FusionAssemblyIdentity.ASM_DISPLAYF.FULL);
-
-            fixed (char* p = new char[MAX_PATH])
-            {
-                ASSEMBLY_INFO info = new ASSEMBLY_INFO
-                {
-                    cbAssemblyInfo = (uint)Marshal.SizeOf(typeof(ASSEMBLY_INFO)),
-                    pszCurrentAssemblyPathBuf = p,
-                    cchBuf = (uint)MAX_PATH
-                };
-
-                IAssemblyCache assemblyCacheObject;
-                CreateAssemblyCache(out assemblyCacheObject, 0);
-                assemblyCacheObject.QueryAssemblyInfo(0, fullName, ref info);
-                Debug.Assert(info.pszCurrentAssemblyPathBuf != null);
-                Debug.Assert(info.pszCurrentAssemblyPathBuf[info.cchBuf - 1] == '\0');
-
-                var result = Marshal.PtrToStringUni((IntPtr)info.pszCurrentAssemblyPathBuf, (int)info.cchBuf - 1);
-                Debug.Assert(result.IndexOf('\0') == -1);
-                location = result;
-            }
-
-            return fullName;
-        }
-    }
-}
-#endif // !CORECLR
diff --git a/src/System.Management.Automation/engine/parser/PSType.cs b/src/System.Management.Automation/engine/parser/PSType.cs
index 7a60d06a6be..06f978a51ce 100644
--- a/src/System.Management.Automation/engine/parser/PSType.cs
+++ b/src/System.Management.Automation/engine/parser/PSType.cs
@@ -3,6 +3,7 @@
 
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
+using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.Linq;
 using System.Management.Automation.Internal;
@@ -265,7 +266,7 @@ internal static void DefineCustomAttributes(EnumBuilder member, ReadOnlyCollecti
             }
         }
 
-        private class DefineTypeHelper
+        private sealed class DefineTypeHelper
         {
             private readonly Parser _parser;
             internal readonly TypeDefinitionAst _typeDefinitionAst;
@@ -276,7 +277,7 @@ private class DefineTypeHelper
             internal readonly TypeBuilder _staticHelpersTypeBuilder;
             private readonly Dictionary<string, PropertyMemberAst> _definedProperties;
             private readonly Dictionary<string, List<Tuple<FunctionMemberAst, Type[]>>> _definedMethods;
-            private HashSet<Tuple<string, Type>> _interfaceProperties;
+            private Dictionary<Tuple<string, Type>, PropertyInfo> _abstractProperties;
             internal readonly List<(string fieldName, IParameterMetadataProvider bodyAst, bool isStatic)> _fieldsToInitForMemberFunctions;
             private bool _baseClassHasDefaultCtor;
 
@@ -296,7 +297,7 @@ public DefineTypeHelper(Parser parser, ModuleBuilder module, TypeDefinitionAst t
                 var baseClass = this.GetBaseTypes(parser, typeDefinitionAst, out interfaces);
 
                 _typeBuilder = module.DefineType(typeName, Reflection.TypeAttributes.Class | Reflection.TypeAttributes.Public, baseClass, interfaces.ToArray());
-                _staticHelpersTypeBuilder = module.DefineType(string.Format(CultureInfo.InvariantCulture, "{0}_<staticHelpers>", typeName), Reflection.TypeAttributes.Class);
+                _staticHelpersTypeBuilder = module.DefineType(string.Create(CultureInfo.InvariantCulture, $"{typeName}_<staticHelpers>"), Reflection.TypeAttributes.Class);
                 DefineCustomAttributes(_typeBuilder, typeDefinitionAst.Attributes, _parser, AttributeTargets.Class);
                 _typeDefinitionAst.Type = _typeBuilder;
 
@@ -444,11 +445,11 @@ private Type GetBaseTypes(Parser parser, TypeDefinitionAst typeDefinitionAst, ou
                 return baseClass ?? typeof(object);
             }
 
-            private bool ShouldImplementProperty(string name, Type type)
+            private bool ShouldImplementProperty(string name, Type type, [NotNullWhen(true)] out PropertyInfo interfaceProperty)
             {
-                if (_interfaceProperties == null)
+                if (_abstractProperties == null)
                 {
-                    _interfaceProperties = new HashSet<Tuple<string, Type>>();
+                    _abstractProperties = new Dictionary<Tuple<string, Type>, PropertyInfo>();
                     var allInterfaces = new HashSet<Type>();
 
                     // TypeBuilder.GetInterfaces() returns only the interfaces that was explicitly passed to its constructor.
@@ -467,12 +468,23 @@ private bool ShouldImplementProperty(string name, Type type)
                     {
                         foreach (var property in interfaceType.GetProperties())
                         {
-                            _interfaceProperties.Add(Tuple.Create(property.Name, property.PropertyType));
+                            _abstractProperties.Add(Tuple.Create(property.Name, property.PropertyType), property);
+                        }
+                    }
+
+                    if (_typeBuilder.BaseType.IsAbstract)
+                    {
+                        foreach (var property in _typeBuilder.BaseType.GetProperties())
+                        {
+                            if (property.GetAccessors().Any(m => m.IsAbstract))
+                            {
+                                _abstractProperties.Add(Tuple.Create(property.Name, property.PropertyType), property);
+                            }
                         }
                     }
                 }
 
-                return _interfaceProperties.Contains(Tuple.Create(name, type));
+                return _abstractProperties.TryGetValue(Tuple.Create(name, type), out interfaceProperty);
             }
 
             public void DefineMembers()
@@ -618,9 +630,19 @@ private PropertyBuilder EmitPropertyIl(PropertyMemberAst propertyMemberAst, Type
                 // The property set and property get methods require a special set of attributes.
                 var getSetAttributes = Reflection.MethodAttributes.SpecialName | Reflection.MethodAttributes.HideBySig;
                 getSetAttributes |= propertyMemberAst.IsPublic ? Reflection.MethodAttributes.Public : Reflection.MethodAttributes.Private;
-                if (ShouldImplementProperty(propertyMemberAst.Name, type))
+                MethodInfo implementingGetter = null;
+                MethodInfo implementingSetter = null;
+                if (ShouldImplementProperty(propertyMemberAst.Name, type, out PropertyInfo interfaceProperty))
                 {
-                    getSetAttributes |= Reflection.MethodAttributes.Virtual;
+                    if (propertyMemberAst.IsStatic)
+                    {
+                        implementingGetter = interfaceProperty.GetGetMethod();
+                        implementingSetter = interfaceProperty.GetSetMethod();
+                    }
+                    else
+                    {
+                        getSetAttributes |= Reflection.MethodAttributes.Virtual;
+                    }
                 }
 
                 if (propertyMemberAst.IsStatic)
@@ -629,7 +651,7 @@ private PropertyBuilder EmitPropertyIl(PropertyMemberAst propertyMemberAst, Type
                     getSetAttributes |= Reflection.MethodAttributes.Static;
                 }
                 // C# naming convention for backing fields.
-                string backingFieldName = string.Format(CultureInfo.InvariantCulture, "<{0}>k__BackingField", propertyMemberAst.Name);
+                string backingFieldName = string.Create(CultureInfo.InvariantCulture, $"<{propertyMemberAst.Name}>k__BackingField");
                 var backingField = _typeBuilder.DefineField(backingFieldName, type, backingFieldAttributes);
 
                 bool hasValidateAttributes = false;
@@ -666,6 +688,11 @@ private PropertyBuilder EmitPropertyIl(PropertyMemberAst propertyMemberAst, Type
                     getIlGen.Emit(OpCodes.Ret);
                 }
 
+                if (implementingGetter != null)
+                {
+                    _typeBuilder.DefineMethodOverride(getMethod, implementingGetter);
+                }
+
                 // Define the "set" accessor method.
                 MethodBuilder setMethod = _typeBuilder.DefineMethod(string.Concat("set_", propertyMemberAst.Name), getSetAttributes, null, new Type[] { type });
                 ILGenerator setIlGen = setMethod.GetILGenerator();
@@ -699,6 +726,11 @@ private PropertyBuilder EmitPropertyIl(PropertyMemberAst propertyMemberAst, Type
 
                 setIlGen.Emit(OpCodes.Ret);
 
+                if (implementingSetter != null)
+                {
+                    _typeBuilder.DefineMethodOverride(setMethod, implementingSetter);
+                }
+
                 // Map the two methods created above to our PropertyBuilder to
                 // their corresponding behaviors, "get" and "set" respectively.
                 property.SetGetMethod(getMethod);
@@ -937,7 +969,7 @@ private void DefineMethodBody(
                 Type returnType,
                 Action<int, string> parameterNameSetter)
             {
-                var wrapperFieldName = string.Format(CultureInfo.InvariantCulture, "<{0}>", metadataToken);
+                var wrapperFieldName = string.Create(CultureInfo.InvariantCulture, $"<{metadataToken}>");
                 var scriptBlockWrapperField = _staticHelpersTypeBuilder.DefineField(wrapperFieldName,
                                                                        typeof(ScriptBlockMemberMethodWrapper),
                                                                        FieldAttributes.Assembly | FieldAttributes.Static);
@@ -1007,7 +1039,7 @@ private void DefineMethodBody(
             }
         }
 
-        private class DefineEnumHelper
+        private sealed class DefineEnumHelper
         {
             private readonly Parser _parser;
             private readonly TypeDefinitionAst _enumDefinitionAst;
@@ -1082,7 +1114,7 @@ internal static List<DefineEnumHelper> Sort(List<DefineEnumHelper> defineEnumHel
                         }
 
                         // The expression may have multiple member expressions, e.g. [E]::e1 + [E]::e2
-                        foreach (var memberExpr in initExpr.FindAll(ast => ast is MemberExpressionAst, false))
+                        foreach (var memberExpr in initExpr.FindAll(static ast => ast is MemberExpressionAst, false))
                         {
                             var typeExpr = ((MemberExpressionAst)memberExpr).Expression as TypeExpressionAst;
                             if (typeExpr != null)
@@ -1321,9 +1353,8 @@ internal static Assembly DefineTypes(Parser parser, Ast rootAst, TypeDefinitionA
             foreach (var typeDefinitionAst in typeDefinitions)
             {
                 var typeName = GetClassNameInAssembly(typeDefinitionAst);
-                if (!definedTypes.Contains(typeName))
+                if (definedTypes.Add(typeName))
                 {
-                    definedTypes.Add(typeName);
                     if ((typeDefinitionAst.TypeAttributes & TypeAttributes.Class) == TypeAttributes.Class)
                     {
                         defineTypeHelpers.Add(new DefineTypeHelper(parser, module, typeDefinitionAst, typeName));
@@ -1434,7 +1465,7 @@ private static string GetClassNameInAssembly(TypeDefinitionAst typeDefinitionAst
 
             nameParts.Reverse();
             nameParts.Add(typeDefinitionAst.Name);
-            return string.Join(".", nameParts);
+            return string.Join('.', nameParts);
         }
 
         private static readonly OpCode[] s_ldc =
@@ -1472,4 +1503,18 @@ private static void EmitLdarg(ILGenerator emitter, int c)
             }
         }
     }
+
+    /// <summary>
+    /// The attribute for a PowerShell class to not affiliate with a particular Runspace\SessionState.
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Class)]
+    public sealed class NoRunspaceAffinityAttribute : ParsingBaseAttribute
+    {
+        /// <summary>
+        /// Initializes a new instance of the attribute.
+        /// </summary>
+        public NoRunspaceAffinityAttribute()
+        {
+        }
+    }
 }
diff --git a/src/System.Management.Automation/engine/parser/Parser.cs b/src/System.Management.Automation/engine/parser/Parser.cs
index 5b8ca433454..1592d2e7e7d 100644
--- a/src/System.Management.Automation/engine/parser/Parser.cs
+++ b/src/System.Management.Automation/engine/parser/Parser.cs
@@ -9,6 +9,9 @@
 using System.IO;
 using System.Linq;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
+using System.Management.Automation.Subsystem;
+using System.Management.Automation.Subsystem.DSC;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Threading.Tasks;
@@ -140,6 +143,8 @@ public static ScriptBlockAst ParseInput(string input, out Token[] tokens, out Pa
         /// <returns>The <see cref="ScriptBlockAst"/> that represents the input script file.</returns>
         public static ScriptBlockAst ParseInput(string input, string fileName, out Token[] tokens, out ParseError[] errors)
         {
+            ArgumentNullException.ThrowIfNull(input);
+
             Parser parser = new Parser();
             List<Token> tokenList = new List<Token>();
             ScriptBlockAst result;
@@ -273,11 +278,10 @@ internal static ITypeName ScanType(string typename, bool ignoreErrors)
             var parser = new Parser();
             var tokenizer = parser._tokenizer;
             tokenizer.Initialize(null, typename, null);
-            Token unused;
-            var result = parser.TypeNameRule(allowAssemblyQualifiedNames: true, firstTypeNameToken: out unused);
+            var result = parser.TypeNameRule(allowAssemblyQualifiedNames: true, firstTypeNameToken: out _);
 
             SemanticChecks.CheckArrayTypeNameDepth(result, PositionUtilities.EmptyExtent, parser);
-            if (!ignoreErrors && parser.ErrorList.Count > 0)
+            if (!ignoreErrors && result is not null && (parser.ErrorList.Count > 0 || !result.Extent.Text.Equals(typename, StringComparison.OrdinalIgnoreCase)))
             {
                 result = null;
             }
@@ -437,8 +441,7 @@ private Token NextToken()
         private Token PeekToken()
         {
             Token token = _ungotToken ?? _tokenizer.NextToken();
-            if (_ungotToken == null)
-                _ungotToken = token;
+            _ungotToken ??= token;
             return token;
         }
 
@@ -717,12 +720,13 @@ internal static bool TryParseAsConstantHashtable(string input, out Hashtable res
             ParseError[] parseErrors;
             var ast = Parser.ParseInput(input, out throwAwayTokens, out parseErrors);
 
-            if ((ast == null) ||
-                parseErrors.Length > 0 ||
-                ast.BeginBlock != null ||
-                ast.ProcessBlock != null ||
-                ast.DynamicParamBlock != null ||
-                ast.EndBlock.Traps != null)
+            if (ast == null
+                || parseErrors.Length > 0
+                || ast.BeginBlock != null
+                || ast.ProcessBlock != null
+                || ast.CleanBlock != null
+                || ast.DynamicParamBlock != null
+                || ast.EndBlock.Traps != null)
             {
                 return false;
             }
@@ -816,10 +820,7 @@ private List<UsingStatementAst> UsingStatementsRule()
                     SkipToken();
                     var statement = UsingStatementRule(token);
                     SkipNewlinesAndSemicolons();
-                    if (result == null)
-                    {
-                        result = new List<UsingStatementAst>();
-                    }
+                    result ??= new List<UsingStatementAst>();
 
                     var usingStatement = statement as UsingStatementAst;
                     // otherwise returned statement is ErrorStatementAst.
@@ -1346,11 +1347,11 @@ private ITypeName FinishTypeNameRule(Token typeName, bool unBracketedGenericArg
                     case TokenKind.RBracket:
                     case TokenKind.Comma:
                         var elementType = new TypeName(typeName.Extent, typeName.Text);
-                        return CompleteArrayTypeName(elementType, elementType, token);
+                        return CompleteArrayTypeName(elementType, elementType, token, unBracketedGenericArg);
 
                     case TokenKind.LBracket:
                     case TokenKind.Identifier:
-                        return GenericTypeArgumentsRule(typeName, token, unBracketedGenericArg);
+                        return GenericTypeNameRule(typeName, token, unBracketedGenericArg);
 
                     default:
                         // ErrorRecovery: sync to ']', and return non-null to avoid cascading errors.
@@ -1430,7 +1431,7 @@ private ITypeName GetSingleGenericArgument(Token firstToken)
             return typeName;
         }
 
-        private ITypeName GenericTypeArgumentsRule(Token genericTypeName, Token firstToken, bool unBracketedGenericArg)
+        private List<ITypeName> GenericTypeArgumentsRule(Token firstToken, out Token lastToken)
         {
             Diagnostics.Assert(firstToken.Kind == TokenKind.Identifier || firstToken.Kind == TokenKind.LBracket, "unexpected first token");
             RuntimeHelpers.EnsureSufficientExecutionStack();
@@ -1439,20 +1440,18 @@ private ITypeName GenericTypeArgumentsRule(Token genericTypeName, Token firstTok
             ITypeName typeName = GetSingleGenericArgument(firstToken);
             genericArguments.Add(typeName);
 
-            Token commaOrRBracketToken;
-            Token token;
             while (true)
             {
                 SkipNewlines();
-                commaOrRBracketToken = NextToken();
-                if (commaOrRBracketToken.Kind != TokenKind.Comma)
+                lastToken = NextToken();
+                if (lastToken.Kind != TokenKind.Comma)
                 {
                     break;
                 }
 
                 SkipNewlines();
 
-                token = PeekToken();
+                Token token = PeekToken();
                 if (token.Kind == TokenKind.Identifier || token.Kind == TokenKind.LBracket)
                 {
                     SkipToken();
@@ -1460,43 +1459,55 @@ private ITypeName GenericTypeArgumentsRule(Token genericTypeName, Token firstTok
                 }
                 else
                 {
-                    ReportIncompleteInput(After(commaOrRBracketToken),
+                    ReportIncompleteInput(
+                        After(lastToken),
                         nameof(ParserStrings.MissingTypename),
                         ParserStrings.MissingTypename);
-                    typeName = new TypeName(commaOrRBracketToken.Extent, ":ErrorTypeName:");
+                    typeName = new TypeName(lastToken.Extent, ":ErrorTypeName:");
                 }
 
                 genericArguments.Add(typeName);
             }
 
-            if (commaOrRBracketToken.Kind != TokenKind.RBracket)
+            return genericArguments;
+        }
+
+        private ITypeName GenericTypeNameRule(Token genericTypeName, Token firstToken, bool unbracketedGenericArg)
+        {
+            List<ITypeName> genericArguments = GenericTypeArgumentsRule(firstToken, out Token rBracketToken);
+
+            if (rBracketToken.Kind != TokenKind.RBracket)
             {
                 // ErrorRecovery: pretend we had the closing bracket and just continue on.
-
-                UngetToken(commaOrRBracketToken);
-                ReportIncompleteInput(Before(commaOrRBracketToken),
+                UngetToken(rBracketToken);
+                ReportIncompleteInput(
+                    Before(rBracketToken),
                     nameof(ParserStrings.EndSquareBracketExpectedAtEndOfAttribute),
                     ParserStrings.EndSquareBracketExpectedAtEndOfAttribute);
-                commaOrRBracketToken = null;
+                rBracketToken = null;
             }
 
-            var openGenericType = new TypeName(genericTypeName.Extent, genericTypeName.Text);
-            var result = new GenericTypeName(ExtentOf(genericTypeName.Extent, ExtentFromFirstOf(commaOrRBracketToken, genericArguments.LastOrDefault(), firstToken)),
-                openGenericType, genericArguments);
-            token = PeekToken();
+            var openGenericType = new TypeName(genericTypeName.Extent, genericTypeName.Text, genericArguments.Count);
+            var result = new GenericTypeName(
+                ExtentOf(genericTypeName.Extent, ExtentFromFirstOf(rBracketToken, genericArguments.LastOrDefault(), firstToken)),
+                openGenericType,
+                genericArguments);
+
+            Token token = PeekToken();
             if (token.Kind == TokenKind.LBracket)
             {
                 SkipToken();
-                return CompleteArrayTypeName(result, openGenericType, NextToken());
+                return CompleteArrayTypeName(result, openGenericType, NextToken(), unbracketedGenericArg);
             }
 
-            if (token.Kind == TokenKind.Comma && !unBracketedGenericArg)
+            if (token.Kind == TokenKind.Comma && !unbracketedGenericArg)
             {
                 SkipToken();
                 string assemblyNameSpec = _tokenizer.GetAssemblyNameSpec();
                 if (string.IsNullOrEmpty(assemblyNameSpec))
                 {
-                    ReportError(After(token),
+                    ReportError(
+                        After(token),
                         nameof(ParserStrings.MissingAssemblyNameSpecification),
                         ParserStrings.MissingAssemblyNameSpecification);
                 }
@@ -1509,7 +1520,7 @@ private ITypeName GenericTypeArgumentsRule(Token genericTypeName, Token firstTok
             return result;
         }
 
-        private ITypeName CompleteArrayTypeName(ITypeName elementType, TypeName typeForAssemblyQualification, Token firstTokenAfterLBracket)
+        private ITypeName CompleteArrayTypeName(ITypeName elementType, TypeName typeForAssemblyQualification, Token firstTokenAfterLBracket, bool unBracketedGenericArg)
         {
             while (true)
             {
@@ -1527,6 +1538,25 @@ private ITypeName CompleteArrayTypeName(ITypeName elementType, TypeName typeForA
                             token = NextToken();
                         } while (token.Kind == TokenKind.Comma);
 
+                        // The dimensions for an array must be less than or equal to 32.
+                        // Search the doc for 'Type.MakeArrayType(int rank)' for more details.
+                        if (dim > 32)
+                        {
+                            // If the next token is right bracket, we swallow it to make it easier to parse the rest of script.
+                            // Otherwise, we unget the token for the subsequent parsing to consume.
+                            if (token.Kind != TokenKind.RBracket)
+                            {
+                                UngetToken(token);
+                            }
+
+                            ReportError(
+                                ExtentOf(firstTokenAfterLBracket, lastComma),
+                                nameof(ParserStrings.ArrayHasTooManyDimensions),
+                                ParserStrings.ArrayHasTooManyDimensions,
+                                arg: dim);
+                            break;
+                        }
+
                         if (token.Kind != TokenKind.RBracket)
                         {
                             // ErrorRecovery: just pretend we saw a ']'.
@@ -1563,7 +1593,9 @@ private ITypeName CompleteArrayTypeName(ITypeName elementType, TypeName typeForA
                 }
 
                 token = PeekToken();
-                if (token.Kind == TokenKind.Comma)
+
+                // An array declared inside an unbracketed generic type argument cannot be assembly qualified
+                if (!unBracketedGenericArg && token.Kind == TokenKind.Comma)
                 {
                     SkipToken();
                     var assemblyName = _tokenizer.GetAssemblyNameSpec();
@@ -1706,9 +1738,9 @@ private ScriptBlockAst NamedBlockListRule(Token lCurly, List<UsingStatementAst>
             NamedBlockAst beginBlock = null;
             NamedBlockAst processBlock = null;
             NamedBlockAst endBlock = null;
-            IScriptExtent startExtent = lCurly != null
-                                            ? lCurly.Extent
-                                            : paramBlockAst?.Extent;
+            NamedBlockAst cleanBlock = null;
+
+            IScriptExtent startExtent = lCurly?.Extent ?? paramBlockAst?.Extent;
             IScriptExtent endExtent = null;
             IScriptExtent extent = null;
             IScriptExtent scriptBlockExtent = null;
@@ -1750,13 +1782,11 @@ private ScriptBlockAst NamedBlockListRule(Token lCurly, List<UsingStatementAst>
                     case TokenKind.Begin:
                     case TokenKind.Process:
                     case TokenKind.End:
+                    case TokenKind.Clean:
                         break;
                 }
 
-                if (startExtent == null)
-                {
-                    startExtent = blockNameToken.Extent;
-                }
+                startExtent ??= blockNameToken.Extent;
 
                 endExtent = blockNameToken.Extent;
 
@@ -1790,6 +1820,10 @@ private ScriptBlockAst NamedBlockListRule(Token lCurly, List<UsingStatementAst>
                 {
                     endBlock = new NamedBlockAst(extent, TokenKind.End, statementBlock, false);
                 }
+                else if (blockNameToken.Kind == TokenKind.Clean && cleanBlock == null)
+                {
+                    cleanBlock = new NamedBlockAst(extent, TokenKind.Clean, statementBlock, false);
+                }
                 else if (blockNameToken.Kind == TokenKind.Dynamicparam && dynamicParamBlock == null)
                 {
                     dynamicParamBlock = new NamedBlockAst(extent, TokenKind.Dynamicparam, statementBlock, false);
@@ -1811,7 +1845,14 @@ private ScriptBlockAst NamedBlockListRule(Token lCurly, List<UsingStatementAst>
             CompleteScriptBlockBody(lCurly, ref extent, out scriptBlockExtent);
 
         return_script_block_ast:
-            return new ScriptBlockAst(scriptBlockExtent, usingStatements, paramBlockAst, beginBlock, processBlock, endBlock,
+            return new ScriptBlockAst(
+                scriptBlockExtent,
+                usingStatements,
+                paramBlockAst,
+                beginBlock,
+                processBlock,
+                endBlock,
+                cleanBlock,
                 dynamicParamBlock);
         }
 
@@ -1886,10 +1927,7 @@ private IScriptExtent StatementListRule(List<StatementAst> statements, List<Trap
                 // Track the last statement inside our loop so we don't use the EmptyPipeline
                 // as our last statement.  The last statement is used to track the extent of
                 // this statement list.
-                if (firstStatement == null)
-                {
-                    firstStatement = statement;
-                }
+                firstStatement ??= statement;
 
                 lastStatement = statement;
 
@@ -1972,7 +2010,7 @@ private StatementAst StatementRule()
                     }
                     else if ((token.TokenFlags & TokenFlags.Keyword) != 0)
                     {
-                        foreach (var attr in attributes.Where(attr => attr is not AttributeAst))
+                        foreach (var attr in attributes.Where(static attr => attr is not AttributeAst))
                         {
                             ReportError(attr.Extent,
                                 nameof(ParserStrings.TypeNotAllowedBeforeStatement),
@@ -2884,7 +2922,7 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
                 return null;
             }
 
-            if (configurationNameToken.Kind == TokenKind.EndOfInput)
+            if (configurationNameToken.Kind is TokenKind.EndOfInput or TokenKind.Comma)
             {
                 UngetToken(configurationNameToken);
 
@@ -2933,7 +2971,6 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
             //
             Runspaces.Runspace localRunspace = null;
             bool topLevel = false;
-            bool useCrossPlatformSchema = false;
             try
             {
                 // At this point, we'll need a runspace to use to hold the metadata for the parse. If there is no
@@ -2947,13 +2984,34 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
                     Runspaces.Runspace.DefaultRunspace = localRunspace;
                 }
 
-                // Configuration is not supported on ARM or in ConstrainedLanguage
-                if (PsUtils.IsRunningOnProcessorArchitectureARM() || Runspace.DefaultRunspace.ExecutionContext.LanguageMode == PSLanguageMode.ConstrainedLanguage)
+                // Configuration is not supported in ConstrainedLanguage
+                if (Runspace.DefaultRunspace?.ExecutionContext?.LanguageMode == PSLanguageMode.ConstrainedLanguage)
                 {
-                    ReportError(configurationToken.Extent,
-                                nameof(ParserStrings.ConfigurationNotAllowedInConstrainedLanguage),
-                                ParserStrings.ConfigurationNotAllowedInConstrainedLanguage,
-                                configurationToken.Kind.Text());
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        ReportError(configurationToken.Extent,
+                                    nameof(ParserStrings.ConfigurationNotAllowedInConstrainedLanguage),
+                                    ParserStrings.ConfigurationNotAllowedInConstrainedLanguage,
+                                    configurationToken.Kind.Text());
+                        return null;
+                    }
+
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: Runspace.DefaultRunspace?.ExecutionContext,
+                        title: ParserStrings.WDACParserConfigKeywordLogTitle,
+                        message: ParserStrings.WDACParserConfigKeywordLogMessage,
+                        fqid: "ConfigurationLanguageKeywordNotAllowed",
+                        dropIntoDebugger: true);
+                }
+
+                // Configuration is not supported for ARM or ARM64 process architecture.
+                if (PsUtils.IsRunningOnProcessArchitectureARM())
+                {
+                    ReportError(
+                        configurationToken.Extent,
+                        nameof(ParserStrings.ConfigurationNotAllowedOnArm64),
+                        ParserStrings.ConfigurationNotAllowedOnArm64,
+                        configurationToken.Kind.Text());
                     return null;
                 }
 
@@ -2996,38 +3054,13 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
                         {
                             // Load the default CIM keywords
                             Collection<Exception> CIMKeywordErrors = new Collection<Exception>();
-                            if (ExperimentalFeature.IsEnabled(Dsc.CrossPlatform.DscClassCache.DscExperimentalFeatureName))
-                            {
-                                // In addition to checking if experimental feature is enabled
-                                // also check if PSDesiredStateConfiguration is already loaded
-                                // if pre-v3 is already loaded then use old mof-based APIs
-                                // otherwise use json-based APIs
-
-                                p.AddCommand(new CmdletInfo("Get-Module", typeof(Microsoft.PowerShell.Commands.GetModuleCommand)));
-                                p.AddParameter("Name", "PSDesiredStateConfiguration");
-                                
-                                bool prev3IsLoaded = false;
-                                foreach (PSModuleInfo moduleInfo in p.Invoke<PSModuleInfo>())
-                                {
-                                    if (moduleInfo.Version.Major < 3)
-                                    {
-                                        prev3IsLoaded = true;
-                                        break;
-                                    }
-                                }
-
-                                p.Commands.Clear();
-                                
-                                useCrossPlatformSchema = !prev3IsLoaded;
 
-                                if (useCrossPlatformSchema)
-                                {
-                                    Dsc.CrossPlatform.DscClassCache.LoadDefaultCimKeywords(CIMKeywordErrors);
-                                }
-                                else
-                                {
-                                    Dsc.DscClassCache.LoadDefaultCimKeywords(CIMKeywordErrors);
-                                }
+                            // DscSubsystem is auto-registered when PSDesiredStateConfiguration v3 module is loaded
+                            // so if DscSubsystem is registered that means user intention to use v3 APIs.
+                            ICrossPlatformDsc dscSubsystem = SubsystemManager.GetSubsystem<ICrossPlatformDsc>();
+                            if (dscSubsystem != null)
+                            {
+                                dscSubsystem.LoadDefaultKeywords(CIMKeywordErrors);
                             }
                             else
                             {
@@ -3068,10 +3101,7 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
                 }
                 finally
                 {
-                    if (p != null)
-                    {
-                        p.Dispose();
-                    }
+                    p?.Dispose();
 
                     //
                     // Put the parser back...
@@ -3209,10 +3239,7 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
 
                     if (topLevel)
                     {
-                        if (_configurationKeywordsDefinedInThisFile == null)
-                        {
-                            _configurationKeywordsDefinedInThisFile = new Dictionary<string, DynamicKeyword>();
-                        }
+                        _configurationKeywordsDefinedInThisFile ??= new Dictionary<string, DynamicKeyword>();
 
                         _configurationKeywordsDefinedInThisFile[keywordToAddForThisConfigurationStatement.Keyword] = keywordToAddForThisConfigurationStatement;
                     }
@@ -3274,9 +3301,10 @@ private StatementAst ConfigurationStatementRule(IEnumerable<AttributeAst> custom
                     // Clear out all of the cached classes and keywords.
                     // They will need to be reloaded when the generated function is actually run.
                     //
-                    if (useCrossPlatformSchema)
+                    ICrossPlatformDsc dscSubsystem = SubsystemManager.GetSubsystem<ICrossPlatformDsc>();
+                    if (dscSubsystem != null)
                     {
-                        Dsc.CrossPlatform.DscClassCache.ClearCache();
+                        dscSubsystem.ClearCache();
                     }
                     else
                     {
@@ -3566,10 +3594,7 @@ private StatementAst ForStatementRule(LabelToken labelToken, Token forToken)
                 // ErrorRecovery: don't continue parsing the for statement.
 
                 UngetToken(rParen);
-                if (endErrorStatement == null)
-                {
-                    endErrorStatement = lParen.Extent;
-                }
+                endErrorStatement ??= lParen.Extent;
 
                 ReportIncompleteInput(After(endErrorStatement),
                     nameof(ParserStrings.MissingEndParenthesisAfterStatement),
@@ -3878,10 +3903,7 @@ private StatementAst DynamicKeywordStatementRule(Token functionName, DynamicKeyw
                 // we aren't expecting a name, we still do this so that the signature of the implementing function remains
                 // the same.
                 ExpressionAst originalInstanceName = instanceName;
-                if (instanceName == null)
-                {
-                    instanceName = new StringConstantExpressionAst(nameToken.Extent, elementName, StringConstantType.BareWord);
-                }
+                instanceName ??= new StringConstantExpressionAst(nameToken.Extent, elementName, StringConstantType.BareWord);
 
                 SkipNewlines();
 
@@ -4203,12 +4225,22 @@ private StatementAst ClassDefinitionRule(List<AttributeBaseAst> customAttributes
             // PowerShell classes are not supported in ConstrainedLanguage
             if (Runspace.DefaultRunspace?.ExecutionContext?.LanguageMode == PSLanguageMode.ConstrainedLanguage)
             {
-                ReportError(classToken.Extent,
-                            nameof(ParserStrings.ClassesNotAllowedInConstrainedLanguage),
-                            ParserStrings.ClassesNotAllowedInConstrainedLanguage,
-                            classToken.Kind.Text());
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    ReportError(classToken.Extent,
+                                nameof(ParserStrings.ClassesNotAllowedInConstrainedLanguage),
+                                ParserStrings.ClassesNotAllowedInConstrainedLanguage,
+                                classToken.Kind.Text());
 
-                return null;
+                    return null;
+                }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: Runspace.DefaultRunspace?.ExecutionContext,
+                    title: ParserStrings.WDACParserClassKeywordLogTitle,
+                    message: ParserStrings.WDACParserClassKeywordLogMessage,
+                    fqid: "ClassLanguageKeywordNotAllowed",
+                    dropIntoDebugger: true);
             }
 
             SkipNewlines();
@@ -4241,11 +4273,10 @@ private StatementAst ClassDefinitionRule(List<AttributeBaseAst> customAttributes
                     this.SkipToken();
                     SkipNewlines();
                     ITypeName superClass;
-                    Token unused;
                     Token commaToken = null;
                     while (true)
                     {
-                        superClass = this.TypeNameRule(allowAssemblyQualifiedNames: false, firstTypeNameToken: out unused);
+                        superClass = this.TypeNameRule(allowAssemblyQualifiedNames: false, firstTypeNameToken: out _);
                         if (superClass == null)
                         {
                             ReportIncompleteInput(After(ExtentFromFirstOf(commaToken, colonToken)),
@@ -4299,10 +4330,7 @@ private StatementAst ClassDefinitionRule(List<AttributeBaseAst> customAttributes
 
                     if (astsOnError != null && astsOnError.Count > 0)
                     {
-                        if (nestedAsts == null)
-                        {
-                            nestedAsts = new List<Ast>();
-                        }
+                        nestedAsts ??= new List<Ast>();
 
                         nestedAsts.AddRange(astsOnError);
                         lastExtent = astsOnError.Last().Extent;
@@ -4331,10 +4359,7 @@ private StatementAst ClassDefinitionRule(List<AttributeBaseAst> customAttributes
                 var classDefn = new TypeDefinitionAst(extent, name.Value, customAttributes?.OfType<AttributeAst>(), members, TypeAttributes.Class, superClassesList);
                 if (customAttributes != null && customAttributes.OfType<TypeConstraintAst>().Any())
                 {
-                    if (nestedAsts == null)
-                    {
-                        nestedAsts = new List<Ast>();
-                    }
+                    nestedAsts ??= new List<Ast>();
                     // no need to report error since the error is reported in method StatementRule
                     nestedAsts.AddRange(customAttributes.OfType<TypeConstraintAst>());
                     nestedAsts.Add(classDefn);
@@ -4398,10 +4423,7 @@ private MemberAst ClassMemberRule(string className, out List<Ast> astsOnError)
                 if (attribute != null)
                 {
                     lastAttribute = attribute;
-                    if (startExtent == null)
-                    {
-                        startExtent = attribute.Extent;
-                    }
+                    startExtent ??= attribute.Extent;
 
                     var attributeAst = attribute as AttributeAst;
                     if (attributeAst != null)
@@ -4421,10 +4443,7 @@ private MemberAst ClassMemberRule(string className, out List<Ast> astsOnError)
                 }
 
                 token = PeekToken();
-                if (startExtent == null)
-                {
-                    startExtent = token.Extent;
-                }
+                startExtent ??= token.Extent;
 
                 switch (token.Kind)
                 {
@@ -4639,10 +4658,7 @@ private static void RecordErrorAsts(Ast errAst, ref List<Ast> astsOnError)
                 return;
             }
 
-            if (astsOnError == null)
-            {
-                astsOnError = new List<Ast>();
-            }
+            astsOnError ??= new List<Ast>();
 
             astsOnError.Add(errAst);
         }
@@ -4654,10 +4670,7 @@ private static void RecordErrorAsts(IEnumerable<Ast> errAsts, ref List<Ast> asts
                 return;
             }
 
-            if (astsOnError == null)
-            {
-                astsOnError = new List<Ast>();
-            }
+            astsOnError ??= new List<Ast>();
 
             astsOnError.AddRange(errAsts);
         }
@@ -4687,19 +4700,19 @@ private Token NextTypeIdentifierToken()
 
         private StatementAst EnumDefinitionRule(List<AttributeBaseAst> customAttributes, Token enumToken)
         {
-            //G  enum-statement:
-            //G      'enum'   new-lines:opt   enum-name   '{'   enum-member-list   '}'
-            //G      'enum'   new-lines:opt   enum-name   ':'  enum-underlying-type  '{'   enum-member-list   '}'
-            //G
-            //G  enum-name:
-            //G      simple-name
-            //G
-            //G  enum-underlying-type:
-            //G      new-lines:opt   valid-type-name   new-lines:opt
-            //G
-            //G  enum-member-list:
-            //G      enum-member  new-lines:opt
-            //G      enum-member-list   enum-member
+            // G  enum-statement:
+            // G      'enum'   new-lines:opt   enum-name   '{'   enum-member-list   '}'
+            // G      'enum'   new-lines:opt   enum-name   ':'  enum-underlying-type  '{'   enum-member-list   '}'
+            // G
+            // G  enum-name:
+            // G      simple-name
+            // G
+            // G  enum-underlying-type:
+            // G      new-lines:opt   valid-type-name   new-lines:opt
+            // G
+            // G  enum-member-list:
+            // G      enum-member  new-lines:opt
+            // G      enum-member-list   enum-member
 
             const TypeCode ValidUnderlyingTypeCodes = TypeCode.Byte | TypeCode.Int16 | TypeCode.Int32 | TypeCode.Int64 | TypeCode.SByte | TypeCode.UInt16 | TypeCode.UInt32 | TypeCode.UInt64;
 
@@ -4726,8 +4739,7 @@ private StatementAst EnumDefinitionRule(List<AttributeBaseAst> customAttributes,
                     this.SkipToken();
                     SkipNewlines();
                     ITypeName underlyingType;
-                    Token unused;
-                    underlyingType = this.TypeNameRule(allowAssemblyQualifiedNames: false, firstTypeNameToken: out unused);
+                    underlyingType = this.TypeNameRule(allowAssemblyQualifiedNames: false, firstTypeNameToken: out _);
                     if (underlyingType == null)
                     {
                         ReportIncompleteInput(
@@ -4996,7 +5008,7 @@ private StatementAst UsingStatementRule(Token usingToken)
                     SkipToken();
 
                     var aliasToken = NextToken();
-                    if (aliasToken.Kind == TokenKind.EndOfInput)
+                    if (aliasToken.Kind is TokenKind.EndOfInput or TokenKind.NewLine or TokenKind.Semi)
                     {
                         UngetToken(aliasToken);
                         ReportIncompleteInput(After(equalsToken),
@@ -5005,6 +5017,12 @@ private StatementAst UsingStatementRule(Token usingToken)
                         return new ErrorStatementAst(ExtentOf(usingToken, equalsToken));
                     }
 
+                    if (aliasToken.Kind == TokenKind.Comma)
+                    {
+                        ReportError(aliasToken.Extent, nameof(ParserStrings.UnexpectedUnaryOperator), ParserStrings.UnexpectedUnaryOperator, aliasToken.Text);
+                        return new ErrorStatementAst(ExtentOf(usingToken, aliasToken));
+                    }
+
                     var aliasAst = GetCommandArgument(CommandArgumentContext.CommandArgument, aliasToken);
                     if (kind == UsingStatementKind.Module && aliasAst is HashtableAst)
                     {
@@ -5012,7 +5030,19 @@ private StatementAst UsingStatementRule(Token usingToken)
                     }
                     else if (aliasAst is not StringConstantExpressionAst)
                     {
-                        return new ErrorStatementAst(ExtentOf(usingToken, aliasAst), new Ast[] { itemAst, aliasAst });
+                        var errorExtent = ExtentFromFirstOf(aliasAst, aliasToken);
+                        Ast[] nestedAsts;
+                        if (aliasAst is null)
+                        {
+                            nestedAsts = new Ast[] { itemAst };
+                        }
+                        else
+                        {
+                            nestedAsts = new Ast[] { itemAst, aliasAst };
+                        }
+
+                        ReportError(errorExtent, nameof(ParserStrings.InvalidValueForUsingItemName), ParserStrings.InvalidValueForUsingItemName, errorExtent.Text);
+                        return new ErrorStatementAst(ExtentOf(usingToken, errorExtent), nestedAsts);
                     }
 
                     RequireStatementTerminator();
@@ -5114,15 +5144,8 @@ private StringConstantExpressionAst ResolveUsingAssembly(StringConstantExpressio
                             workingDirectory = Path.GetDirectoryName(scriptFileName);
                         }
 
-                        assemblyFileName = workingDirectory + @"\" + assemblyFileName;
+                        assemblyFileName = Path.Combine(workingDirectory, assemblyFileName);
                     }
-
-#if !CORECLR
-                    if (!File.Exists(assemblyFileName))
-                    {
-                        GlobalAssemblyCache.ResolvePartialName(assemblyName, out assemblyFileName);
-                    }
-#endif
                 }
                 catch
                 {
@@ -5202,7 +5225,7 @@ private StatementAst MethodDeclarationRule(Token functionNameToken, string class
                                 SkipToken();
                                 // we don't allow syntax
                                 // : base{ script }
-                                // as a short for for
+                                // as a short for
                                 // : base( { script } )
                                 baseCtorCallParams = InvokeParamParenListRule(lParen, out baseCallLastExtent);
                                 this.SkipNewlines();
@@ -5229,11 +5252,9 @@ private StatementAst MethodDeclarationRule(Token functionNameToken, string class
                     SetTokenizerMode(oldTokenizerMode);
                 }
 
-                if (baseCtorCallParams == null)
-                {
+                baseCtorCallParams ??=
                     // Assuming implicit default ctor
-                    baseCtorCallParams = new List<ExpressionAst>();
-                }
+                    new List<ExpressionAst>();
             }
 
             Token lCurly = NextToken();
@@ -5522,10 +5543,7 @@ private CatchClauseAst CatchBlockRule(ref IScriptExtent endErrorStatement, ref L
                     break;
                 }
 
-                if (exceptionTypes == null)
-                {
-                    exceptionTypes = new List<TypeConstraintAst>();
-                }
+                exceptionTypes ??= new List<TypeConstraintAst>();
 
                 exceptionTypes.Add(typeConstraintAst);
 
@@ -5766,7 +5784,7 @@ private PipelineBaseAst PipelineChainRule()
             // just look for pipelines as before.
             RuntimeHelpers.EnsureSufficientExecutionStack();
 
-            // First look for assignment, since PipelineRule once handled that and this supercedes that.
+            // First look for assignment, since PipelineRule once handled that and this supersedes that.
             // We may end up with an expression here as a result,
             // in which case we hang on to it to pass it into the first pipeline rule call.
             Token assignToken = null;
@@ -6028,10 +6046,7 @@ private PipelineBaseAst PipelineRule(
                     {
                         SkipToken();
 
-                        if (redirections == null)
-                        {
-                            redirections = new RedirectionAst[CommandBaseAst.MaxRedirections];
-                        }
+                        redirections ??= new RedirectionAst[CommandBaseAst.MaxRedirections];
 
                         IScriptExtent unused = null;
                         lastRedirection = RedirectionRule(redirectionToken, redirections, ref unused);
@@ -6043,7 +6058,7 @@ private PipelineBaseAst PipelineRule(
                     commandAst = new CommandExpressionAst(
                         exprExtent,
                         expr,
-                        redirections?.Where(r => r != null));
+                        redirections?.Where(static r => r != null));
                 }
                 else
                 {
@@ -6052,10 +6067,7 @@ private PipelineBaseAst PipelineRule(
 
                 if (commandAst != null)
                 {
-                    if (startExtent == null)
-                    {
-                        startExtent = commandAst.Extent;
-                    }
+                    startExtent ??= commandAst.Extent;
 
                     pipelineElements.Add(commandAst);
                 }
@@ -6408,10 +6420,7 @@ private ExpressionAst GetCommandArgument(CommandArgumentContext context, Token t
                 }
 
                 commaToken = token;
-                if (commandArgs == null)
-                {
-                    commandArgs = new List<ExpressionAst>();
-                }
+                commandArgs ??= new List<ExpressionAst>();
 
                 commandArgs.Add(exprAst);
 
@@ -6579,10 +6588,7 @@ internal Ast CommandRule(bool forDynamicKeyword)
                         case TokenKind.RedirectInStd:
                             if ((context & CommandArgumentContext.CommandName) == 0)
                             {
-                                if (redirections == null)
-                                {
-                                    redirections = new RedirectionAst[CommandBaseAst.MaxRedirections];
-                                }
+                                redirections ??= new RedirectionAst[CommandBaseAst.MaxRedirections];
 
                                 RedirectionRule((RedirectionToken)token, redirections, ref endExtent);
                             }
@@ -6674,7 +6680,7 @@ internal Ast CommandRule(bool forDynamicKeyword)
 
             return new CommandAst(ExtentOf(firstToken, endExtent), elements,
                                   dotSource || ampersand ? firstToken.Kind : TokenKind.Unknown,
-                                  redirections?.Where(r => r != null));
+                                  redirections?.Where(static r => r != null));
         }
 
         #endregion Pipelines
@@ -6721,7 +6727,7 @@ private ExpressionAst ExpressionRule(bool endNumberOnTernaryOpChars = false)
                 SkipToken();
                 SkipNewlines();
 
-                // We have seen the ternary operator '?' and now expecting the 'IfFalse' expression.
+                // We have seen the ternary operator '?' and now expecting the 'IfTrue' expression.
                 ExpressionAst ifTrue = ExpressionRule(endNumberOnTernaryOpChars: true);
                 if (ifTrue == null)
                 {
@@ -7148,7 +7154,7 @@ private ExpressionAst UnaryExpressionRule(bool endNumberOnTernaryOpChars = false
                             ParserStrings.UnexpectedAttribute,
                             lastAttribute.TypeName.FullName);
 
-                        return new ErrorExpressionAst(ExtentOf(token, lastAttribute));
+                        return new ErrorExpressionAst(ExtentOf(token, lastAttribute), attributes);
                     }
 
                     expr = new AttributedExpressionAst(ExtentOf(lastAttribute, child), lastAttribute, child);
@@ -7184,10 +7190,7 @@ private ExpressionAst UnaryExpressionRule(bool endNumberOnTernaryOpChars = false
                         }
                     }
 
-                    if (expr == null)
-                    {
-                        expr = new TypeExpressionAst(lastAttribute.Extent, lastAttribute.TypeName);
-                    }
+                    expr ??= new TypeExpressionAst(lastAttribute.Extent, lastAttribute.TypeName);
                 }
 
                 for (int i = attributes.Count - 2; i >= 0; --i)
@@ -7733,34 +7736,128 @@ private ExpressionAst MemberAccessRule(ExpressionAst targetExpr, Token operatorT
                 member = GetSingleCommandArgument(CommandArgumentContext.CommandArgument) ??
                     new ErrorExpressionAst(ExtentOf(targetExpr, operatorToken));
             }
-            else
+            else if (_ungotToken == null)
             {
+                // Member name may be an incomplete token like `$a.$(Command-Name`, in which case, '_ungotToken != null'.
+                // We do not look for generic args or invocation token if the member name token is recognisably incomplete.
+                int resyncIndex = _tokenizer.GetRestorePoint();
+                List<ITypeName> genericTypeArguments = GenericMethodArgumentsRule(resyncIndex, out Token rBracket);
                 Token lParen = NextInvokeMemberToken();
+
                 if (lParen != null)
                 {
+                    // When we reach here, we either had a legit section of generic arguments (in which case, `rBracket`
+                    // won't be null), or we saw `lParen` directly following the member token (in which case, `rBracket`
+                    // will be null).
+                    int endColumnNumber = rBracket is null ? member.Extent.EndColumnNumber : rBracket.Extent.EndColumnNumber;
+
                     Diagnostics.Assert(lParen.Kind == TokenKind.LParen || lParen.Kind == TokenKind.LCurly, "token kind incorrect");
-                    Diagnostics.Assert(member.Extent.EndColumnNumber == lParen.Extent.StartColumnNumber,
-                                       "member and paren must be adjacent");
-                    return MemberInvokeRule(targetExpr, lParen, operatorToken, member);
+                    Diagnostics.Assert(
+                        endColumnNumber == lParen.Extent.StartColumnNumber,
+                        "member and paren must be adjacent when the method is not generic");
+                    return MemberInvokeRule(targetExpr, lParen, operatorToken, member, genericTypeArguments);
+                }
+                else if (rBracket != null)
+                {
+                    // We had a legit section of generic arguments but no 'lParen' following that, so this is not a method
+                    // invocation, but an invalid indexing operation. Resync the tokenizer back to before the generic arg
+                    // parsing and then continue.
+                    Resync(resyncIndex);
                 }
             }
 
             return new MemberExpressionAst(
-                    ExtentOf(targetExpr, member),
-                    targetExpr,
-                    member,
-                    @static: operatorToken.Kind == TokenKind.ColonColon,
-                    nullConditional: operatorToken.Kind == TokenKind.QuestionDot);
+                ExtentOf(targetExpr, member),
+                targetExpr,
+                member,
+                @static: operatorToken.Kind == TokenKind.ColonColon,
+                nullConditional: operatorToken.Kind == TokenKind.QuestionDot);
         }
 
-        private ExpressionAst MemberInvokeRule(ExpressionAst targetExpr, Token lBracket, Token operatorToken, CommandElementAst member)
+        private List<ITypeName> GenericMethodArgumentsRule(int resyncIndex, out Token rBracketToken)
+        {
+            List<ITypeName> genericTypes = null;
+
+            Token lBracket = NextToken();
+            rBracketToken = null;
+
+            if (lBracket.Kind != TokenKind.LBracket)
+            {
+                // We cannot avoid this Resync(); if we use PeekToken() to try to avoid a Resync(), the method called
+                // after this [`NextInvokeMemberToken()` or `NextMemberAccessToken()`] will note that an _ungotToken
+                // is present and assume an error state. That will cause any property accesses or non-generic method
+                // calls to throw a parse error.
+                Resync(resyncIndex);
+                return null;
+            }
+
+            // This is either a InvokeMember expression with generic type arguments, or some sort of collection index
+            // on a property.
+            TokenizerMode oldTokenizerMode = _tokenizer.Mode;
+            try
+            {
+                // Switch to typename mode to avoid aggressive argument tokenization.
+                SetTokenizerMode(TokenizerMode.TypeName);
+
+                SkipNewlines();
+                Token firstToken = NextToken();
+
+                // For method generic arguments, we only support the syntax `$var.Method[TypeName1 <, TypeName2 ...>]`,
+                // not the syntax `$var.Method[[TypeName1] <, [TypeName2] ...>]`.
+                // The latter syntax has been supported for type expression since the beginning, but it's ambiguous in
+                // this scenario because we could be looking at an indexing operation on a property like:
+                //    `$var.Property[<expression>]`
+                // and the `<expression>` could start with a type expression like `[TypeName]::Method()`, or even just
+                // a single type expression acting as a key to a hashtable property. Such cases will cause ambiguities.
+                //
+                // It could be possible to write code that sorts out the ambiguity and continue to support the latter
+                // syntax for method generic arguments, and thus to allow assembly-qualified type names. But we choose
+                // not to do so because:
+                //   1. that will definitely increase the complexity of the parsing code and also make it fragile;
+                //   2. the latter syntax hurts readability a lot due to the number of opening/closing brackets.
+                // The downside is that the assembly-qualified type names won't be supported for method generic args,
+                // but that's likely not a problem in practice, and we can revisit if it turns out otherwise.
+                if (firstToken.Kind == TokenKind.Identifier)
+                {
+                    resyncIndex = -1;
+                    genericTypes = GenericTypeArgumentsRule(firstToken, out rBracketToken);
+
+                    if (rBracketToken.Kind != TokenKind.RBracket)
+                    {
+                        UngetToken(rBracketToken);
+                        ReportIncompleteInput(
+                            Before(rBracketToken),
+                            nameof(ParserStrings.EndSquareBracketExpectedAtEndOfType),
+                            ParserStrings.EndSquareBracketExpectedAtEndOfType);
+                        rBracketToken = null;
+                    }
+                }
+            }
+            finally
+            {
+                SetTokenizerMode(oldTokenizerMode);
+
+                if (resyncIndex > 0)
+                {
+                    Resync(resyncIndex);
+                }
+            }
+
+            return genericTypes;
+        }
+
+        private ExpressionAst MemberInvokeRule(
+            ExpressionAst targetExpr,
+            Token lBracket,
+            Token operatorToken,
+            CommandElementAst member,
+            IList<ITypeName> genericTypes)
         {
             // G  invocation-expression: target-expression passed as a parameter. lBracket can be '(' or '{'.
             // G      target-expression   member-name   invoke-param-list
             // G  invoke-param-list:
             // G      '('   invoke-param-paren-list
             // G      script-block
-
             IScriptExtent lastExtent = null;
 
             List<ExpressionAst> arguments;
@@ -7771,6 +7868,7 @@ private ExpressionAst MemberInvokeRule(ExpressionAst targetExpr, Token lBracket,
             else
             {
                 arguments = new List<ExpressionAst>();
+
                 // handle the construct $x.methodName{2+2} as through it had been written $x.methodName({2+2})
                 SkipNewlines();
                 ExpressionAst argument = ScriptBlockExpressionRule(lBracket);
@@ -7784,7 +7882,8 @@ private ExpressionAst MemberInvokeRule(ExpressionAst targetExpr, Token lBracket,
                 member,
                 arguments,
                 operatorToken.Kind == TokenKind.ColonColon,
-                operatorToken.Kind == TokenKind.QuestionDot);
+                operatorToken.Kind == TokenKind.QuestionDot,
+                genericTypes);
         }
 
         private List<ExpressionAst> InvokeParamParenListRule(Token lParen, out IScriptExtent lastExtent)
@@ -7874,7 +7973,18 @@ private ExpressionAst ElementAccessRule(ExpressionAst primaryExpression, Token l
             // G      primary-expression   '['   new-lines:opt   expression   new-lines:opt   ']'
 
             SkipNewlines();
-            ExpressionAst indexExpr = ExpressionRule();
+            bool oldDisableCommaOperator = _disableCommaOperator;
+            _disableCommaOperator = false;
+            ExpressionAst indexExpr = null;
+            try
+            {
+                indexExpr = ExpressionRule();
+            }
+            finally
+            {
+                _disableCommaOperator = oldDisableCommaOperator;
+            }
+
             if (indexExpr == null)
             {
                 // ErrorRecovery: hope we see a closing bracket.  If we don't, we'll pretend we saw
@@ -7979,7 +8089,7 @@ private static void AssertErrorIdCorrespondsToMsgString(string errorId, string e
                 }
             }
 
-            Diagnostics.Assert(msgCorrespondsToString, string.Format("Parser error ID \"{0}\" must correspond to the error message \"{1}\"", errorId, errorMsg));
+            Diagnostics.Assert(msgCorrespondsToString, $"Parser error ID \"{errorId}\" must correspond to the error message \"{errorMsg}\"");
         }
 
         private static object[] arrayOfOneArg
diff --git a/src/System.Management.Automation/engine/parser/Position.cs b/src/System.Management.Automation/engine/parser/Position.cs
index 54f4c3eccbe..9e1363e4a53 100644
--- a/src/System.Management.Automation/engine/parser/Position.cs
+++ b/src/System.Management.Automation/engine/parser/Position.cs
@@ -15,12 +15,13 @@ namespace System.Management.Automation.Language
     /// <summary>
     /// Represents a single point in a script.  The script may come from a file or interactive input.
     /// </summary>
+#nullable enable
     public interface IScriptPosition
     {
         /// <summary>
         /// The name of the file, or if the script did not come from a file, then null.
         /// </summary>
-        string File { get; }
+        string? File { get; }
 
         /// <summary>
         /// The line number of the position, with the value 1 being the first line.
@@ -45,8 +46,9 @@ public interface IScriptPosition
         /// <summary>
         /// The complete script that this position is included in.
         /// </summary>
-        string GetFullScript();
+        string? GetFullScript();
     }
+#nullable restore
 
     /// <summary>
     /// Represents the a span of text in a script.
@@ -336,10 +338,7 @@ internal static bool IsAfter(this IScriptExtent extentToTest, IScriptExtent endE
 
         internal static bool IsWithin(this IScriptExtent extentToTest, IScriptExtent extent)
         {
-            return extentToTest.StartLineNumber >= extent.StartLineNumber &&
-                   extentToTest.EndLineNumber <= extent.EndLineNumber &&
-                   extentToTest.StartColumnNumber >= extent.StartColumnNumber &&
-                   extentToTest.EndColumnNumber <= extent.EndColumnNumber;
+            return extentToTest.StartOffset >= extent.StartOffset && extentToTest.EndOffset <= extent.EndOffset;
         }
 
         internal static bool IsAfter(this IScriptExtent extent, int line, int column)
@@ -354,10 +353,18 @@ internal static bool ContainsLineAndColumn(this IScriptExtent extent, int line,
         {
             if (extent.StartLineNumber == line)
             {
-                if (column == 0) return true;
+                if (column == 0)
+                {
+                    return true;
+                }
+
                 if (column >= extent.StartColumnNumber)
                 {
-                    if (extent.EndLineNumber != extent.StartLineNumber) return true;
+                    if (extent.EndLineNumber != extent.StartLineNumber)
+                    {
+                        return true;
+                    }
+
                     return (column < extent.EndColumnNumber);
                 }
 
@@ -764,9 +771,9 @@ public string Text
                                                              _endPosition.ColumnNumber - _startPosition.ColumnNumber);
                     }
 
-                    return string.Format(CultureInfo.InvariantCulture, "{0}...{1}",
-                                         _startPosition.Line.Substring(_startPosition.ColumnNumber),
-                                         _endPosition.Line.Substring(0, _endPosition.ColumnNumber));
+                    var start = _startPosition.Line.AsSpan(_startPosition.ColumnNumber);
+                    var end = _endPosition.Line.AsSpan(0, _endPosition.ColumnNumber);
+                    return string.Create(CultureInfo.InvariantCulture, $"{start}...{end}");
                 }
                 else
                 {
diff --git a/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs b/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
index 33b2fadec64..675e53394c6 100644
--- a/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
+++ b/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
@@ -6,7 +6,7 @@
 namespace System.Management.Automation.Language
 {
     /// <summary>
-    /// Each Visit* method in <see ref="AstVisitor"/> returns one of these values to control
+    /// Each Visit* method in <see cref="AstVisitor" /> returns one of these values to control
     /// how visiting nodes in the AST should proceed.
     /// </summary>
     public enum AstVisitAction
@@ -37,10 +37,7 @@ public abstract class AstVisitor
         internal AstVisitAction CheckForPostAction(Ast ast, AstVisitAction action)
         {
             var postActionHandler = this as IAstPostVisitHandler;
-            if (postActionHandler != null)
-            {
-                postActionHandler.PostVisit(ast);
-            }
+            postActionHandler?.PostVisit(ast);
 
             return action;
         }
diff --git a/src/System.Management.Automation/engine/parser/SafeValues.cs b/src/System.Management.Automation/engine/parser/SafeValues.cs
index a727ae1d287..38181168a66 100644
--- a/src/System.Management.Automation/engine/parser/SafeValues.cs
+++ b/src/System.Management.Automation/engine/parser/SafeValues.cs
@@ -47,11 +47,15 @@ public static bool IsAstSafe(Ast ast, GetSafeValueVisitor.SafeValueContext safeV
         internal IsSafeValueVisitor(GetSafeValueVisitor.SafeValueContext safeValueContext)
         {
             _safeValueContext = safeValueContext;
+
+            bool skipSizeCheck = safeValueContext is GetSafeValueVisitor.SafeValueContext.SkipHashtableSizeCheck;
+            _maxVisitCount = skipSizeCheck ? uint.MaxValue : 5000;
+            _maxHashtableKeyCount = skipSizeCheck ? int.MaxValue : 500;
         }
 
         internal bool IsAstSafe(Ast ast)
         {
-            if ((bool)ast.Accept(this) && _visitCount < MaxVisitCount)
+            if ((bool)ast.Accept(this) && _visitCount < _maxVisitCount)
             {
                 return true;
             }
@@ -65,8 +69,8 @@ internal bool IsAstSafe(Ast ast)
         // This is a check of the number of visits
         private uint _visitCount = 0;
 
-        private const uint MaxVisitCount = 5000;
-        private const int MaxHashtableKeyCount = 500;
+        private readonly uint _maxVisitCount;
+        private readonly int _maxHashtableKeyCount;
 
         // Used to determine if we are being called within a GetPowerShell() context,
         // which does some additional security verification outside of the scope of
@@ -330,7 +334,7 @@ public object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst)
 
         public object VisitHashtable(HashtableAst hashtableAst)
         {
-            if (hashtableAst.KeyValuePairs.Count > MaxHashtableKeyCount)
+            if (hashtableAst.KeyValuePairs.Count > _maxHashtableKeyCount)
             {
                 return false;
             }
@@ -356,7 +360,7 @@ public object VisitParenExpression(ParenExpressionAst parenExpressionAst)
      * except in the case of handling the unary operator
      * ExecutionContext is provided to ensure we can resolve variables
      */
-    internal class GetSafeValueVisitor : ICustomAstVisitor2
+    internal sealed class GetSafeValueVisitor : ICustomAstVisitor2
     {
         internal enum SafeValueContext
         {
@@ -373,7 +377,7 @@ public static object GetSafeValue(Ast ast, ExecutionContext context, SafeValueCo
         {
             t_context = context;
 
-            if (safeValueContext == SafeValueContext.SkipHashtableSizeCheck || IsSafeValueVisitor.IsAstSafe(ast, safeValueContext))
+            if (IsSafeValueVisitor.IsAstSafe(ast, safeValueContext))
             {
                 return ast.Accept(new GetSafeValueVisitor());
             }
@@ -530,7 +534,8 @@ public object VisitIndexExpression(IndexExpressionAst indexExpressionAst)
             // Get the value of the index and value and call the compiler
             var index = indexExpressionAst.Index.Accept(this);
             var target = indexExpressionAst.Target.Accept(this);
-            if (index == null || target == null)
+
+            if (index is null || target is null)
             {
                 throw new ArgumentNullException(nameof(indexExpressionAst));
             }
@@ -548,10 +553,7 @@ public object VisitExpandableStringExpression(ExpandableStringExpressionAst expa
                 ofs = t_context.SessionState.PSVariable.GetValue("OFS") as string;
             }
 
-            if (ofs == null)
-            {
-                ofs = " ";
-            }
+            ofs ??= " ";
 
             for (int offset = 0; offset < safeValues.Length; offset++)
             {
diff --git a/src/System.Management.Automation/engine/parser/SemanticChecks.cs b/src/System.Management.Automation/engine/parser/SemanticChecks.cs
index 3afd10ff6e2..4a2a3bb626c 100644
--- a/src/System.Management.Automation/engine/parser/SemanticChecks.cs
+++ b/src/System.Management.Automation/engine/parser/SemanticChecks.cs
@@ -5,17 +5,20 @@
 using System.Collections.ObjectModel;
 using System.Diagnostics.CodeAnalysis;
 using System.Linq;
-using System.Linq.Expressions;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Text;
+using System.Text.RegularExpressions;
 
 using Microsoft.PowerShell;
+using System.Management.Automation.Security;
+using System.Management.Automation.Subsystem;
+using System.Management.Automation.Subsystem.DSC;
 using Microsoft.PowerShell.DesiredStateConfiguration.Internal;
 
 namespace System.Management.Automation.Language
 {
-    internal class SemanticChecks : AstVisitor2, IAstPostVisitHandler
+    internal sealed partial class SemanticChecks : AstVisitor2, IAstPostVisitHandler
     {
         private readonly Parser _parser;
 
@@ -87,20 +90,16 @@ private void CheckForDuplicateParameters(ReadOnlyCollection<ParameterAst> parame
                 foreach (var parameter in parameters)
                 {
                     string parameterName = parameter.Name.VariablePath.UserPath;
-                    if (parametersSet.Contains(parameterName))
+                    if (!parametersSet.Add(parameterName))
                     {
                         _parser.ReportError(parameter.Name.Extent,
                             nameof(ParserStrings.DuplicateFormalParameter),
                             ParserStrings.DuplicateFormalParameter,
                             parameterName);
                     }
-                    else
-                    {
-                        parametersSet.Add(parameterName);
-                    }
 
                     var voidConstraint =
-                        parameter.Attributes.OfType<TypeConstraintAst>().FirstOrDefault(t => typeof(void) == t.TypeName.GetReflectionType());
+                        parameter.Attributes.OfType<TypeConstraintAst>().FirstOrDefault(static t => typeof(void) == t.TypeName.GetReflectionType());
 
                     if (voidConstraint != null)
                     {
@@ -239,7 +238,7 @@ public override AstVisitAction VisitAttribute(AttributeAst attributeAst)
             foreach (var namedArg in attributeAst.NamedArguments)
             {
                 string name = namedArg.ArgumentName;
-                if (names.Contains(name))
+                if (!names.Add(name))
                 {
                     _parser.ReportError(namedArg.Extent,
                         nameof(ParserStrings.DuplicateNamedArgument),
@@ -248,8 +247,6 @@ public override AstVisitAction VisitAttribute(AttributeAst attributeAst)
                 }
                 else
                 {
-                    names.Add(name);
-
                     if (!namedArg.ExpressionOmitted && !IsValidAttributeArgument(namedArg.Argument, constantValueVisitor))
                     {
                         var error = GetNonConstantAttributeArgErrorExpr(constantValueVisitor);
@@ -404,10 +401,11 @@ public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMem
                     ParserStrings.ParamBlockNotAllowedInMethod);
             }
 
-            if (body.BeginBlock != null ||
-                body.ProcessBlock != null ||
-                body.DynamicParamBlock != null ||
-                !body.EndBlock.Unnamed)
+            if (body.BeginBlock != null
+                || body.ProcessBlock != null
+                || body.CleanBlock != null
+                || body.DynamicParamBlock != null
+                || !body.EndBlock.Unnamed)
             {
                 _parser.ReportError(Parser.ExtentFromFirstOf(body.DynamicParamBlock, body.BeginBlock, body.ProcessBlock, body.EndBlock),
                     nameof(ParserStrings.NamedBlockNotAllowedInMethod),
@@ -530,7 +528,10 @@ public override AstVisitAction VisitForEachStatement(ForEachStatementAst forEach
 
         public override AstVisitAction VisitTryStatement(TryStatementAst tryStatementAst)
         {
-            if (tryStatementAst.CatchClauses.Count <= 1) return AstVisitAction.Continue;
+            if (tryStatementAst.CatchClauses.Count <= 1)
+            {
+                return AstVisitAction.Continue;
+            }
 
             for (int i = 0; i < tryStatementAst.CatchClauses.Count - 1; ++i)
             {
@@ -547,7 +548,10 @@ public override AstVisitAction VisitTryStatement(TryStatementAst tryStatementAst
                         break;
                     }
 
-                    if (block2.IsCatchAll) continue;
+                    if (block2.IsCatchAll)
+                    {
+                        continue;
+                    }
 
                     foreach (TypeConstraintAst typeLiteral1 in block1.CatchTypes)
                     {
@@ -917,6 +921,13 @@ public override AstVisitAction VisitConvertExpression(ConvertExpressionAst conve
                         ParserStrings.OrderedAttributeOnlyOnHashLiteralNode,
                         convertExpressionAst.Type.TypeName.FullName);
                 }
+
+                // Currently, the type name '[ordered]' is handled specially in PowerShell.
+                // When used in a conversion expression, it's only allowed on a hashliteral node, and it's
+                // always interpreted as an initializer for a case-insensitive
+                // 'System.Collections.Specialized.OrderedDictionary' by the compiler.
+                // So, we can return early from here.
+                return AstVisitAction.Continue;
             }
 
             if (typeof(PSReference) == convertExpressionAst.Type.TypeName.GetReflectionType())
@@ -1017,7 +1028,7 @@ public override AstVisitAction VisitUsingExpression(UsingExpressionAst usingExpr
             return AstVisitAction.Continue;
         }
 
-        private ExpressionAst CheckUsingExpression(ExpressionAst exprAst)
+        private static ExpressionAst CheckUsingExpression(ExpressionAst exprAst)
         {
             RuntimeHelpers.EnsureSufficientExecutionStack();
             if (exprAst is VariableExpressionAst)
@@ -1107,7 +1118,7 @@ public override AstVisitAction VisitHashtable(HashtableAst hashtableAst)
                 if (keyStrAst != null)
                 {
                     var keyStr = keyStrAst.Value.ToString();
-                    if (keys.Contains(keyStr))
+                    if (!keys.Add(keyStr))
                     {
                         string errorId;
                         string errorMsg;
@@ -1124,10 +1135,6 @@ public override AstVisitAction VisitHashtable(HashtableAst hashtableAst)
 
                         _parser.ReportError(entry.Item1.Extent, errorId, errorMsg, keyStr);
                     }
-                    else
-                    {
-                        keys.Add(keyStr);
-                    }
                 }
             }
 
@@ -1303,20 +1310,50 @@ public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionA
 
         public override AstVisitAction VisitUsingStatement(UsingStatementAst usingStatementAst)
         {
-            bool usingKindSupported = usingStatementAst.UsingStatementKind == UsingStatementKind.Namespace ||
-                                      usingStatementAst.UsingStatementKind == UsingStatementKind.Assembly ||
-                                      usingStatementAst.UsingStatementKind == UsingStatementKind.Module;
-            if (!usingKindSupported ||
-                usingStatementAst.Alias != null)
+            UsingStatementKind kind = usingStatementAst.UsingStatementKind;
+            bool usingKindSupported = kind is UsingStatementKind.Namespace or UsingStatementKind.Assembly or UsingStatementKind.Module;
+            if (!usingKindSupported || usingStatementAst.Alias != null)
             {
-                _parser.ReportError(usingStatementAst.Extent,
+                _parser.ReportError(
+                    usingStatementAst.Extent,
                     nameof(ParserStrings.UsingStatementNotSupported),
                     ParserStrings.UsingStatementNotSupported);
             }
 
+            if (kind is UsingStatementKind.Namespace)
+            {
+                Regex nsPattern = NamespacePattern();
+                if (!nsPattern.IsMatch(usingStatementAst.Name.Value))
+                {
+                    _parser.ReportError(
+                        usingStatementAst.Name.Extent,
+                        nameof(ParserStrings.InvalidNamespaceValue),
+                        ParserStrings.InvalidNamespaceValue);
+                }
+            }
+
             return AstVisitAction.Continue;
         }
 
+        /// <summary>
+        /// This regular expression is for validating if a namespace string is valid.
+        ///
+        /// In C#, a legit namespace is defined as `identifier ('.' identifier)*` [see https://learn.microsoft.com/dotnet/csharp/language-reference/language-specification/namespaces#143-namespace-declarations].
+        /// And `identifier` is defined in https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/identifier-names#naming-rules, summarized below:
+        ///   - Identifiers must start with a letter or underscore (_).
+        ///   - Identifiers can contain
+        ///     * Unicode letter characters (categories: Lu, Ll, Lt, Lm, Lo or Nl);
+        ///     * decimal digit characters (category: Nd);
+        ///     * Unicode connecting characters (category: Pc);
+        ///     * Unicode combining characters (categories: Mn, Mc);
+        ///     * Unicode formatting characters (category: Cf).
+        ///
+        /// For details about how Unicode categories are represented in regular expression, see the "Unicode Categories" section in the following article:
+        ///   - https://www.regular-expressions.info/unicode.html
+        /// </summary>
+        [GeneratedRegex(@"^[\p{L}\p{Nl}_][\p{L}\p{Nl}\p{Nd}\p{Pc}\p{Mn}\p{Mc}\p{Cf}_]*(?:\.[\p{L}\p{Nl}_][\p{L}\p{Nl}\p{Nd}\p{Pc}\p{Mn}\p{Mc}\p{Cf}_]*)*$")]
+        private static partial Regex NamespacePattern();
+
         public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
         {
             //
@@ -1386,7 +1423,7 @@ public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatem
                     else if (!keyword.Properties.ContainsKey(propName.Value))
                     {
                         IOrderedEnumerable<string> tableKeys = keyword.Properties.Keys
-                            .OrderBy(key => key, StringComparer.OrdinalIgnoreCase);
+                            .Order(StringComparer.OrdinalIgnoreCase);
 
                         _parser.ReportError(propName.Extent,
                             nameof(ParserStrings.InvalidInstanceProperty),
@@ -1405,7 +1442,10 @@ public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatem
             {
                 StringConstantExpressionAst nameAst = dynamicKeywordStatementAst.CommandElements[0] as StringConstantExpressionAst;
                 Diagnostics.Assert(nameAst != null, "nameAst should never be null");
-                if (!DscClassCache.SystemResourceNames.Contains(nameAst.Extent.Text.Trim()))
+                var extentText = nameAst.Extent.Text.Trim();
+                ICrossPlatformDsc dscSubsystem = SubsystemManager.GetSubsystem<ICrossPlatformDsc>();
+                var extentTextIsASystemResourceName = (dscSubsystem != null) ? dscSubsystem.IsSystemResourceName(extentText) : DscClassCache.SystemResourceNames.Contains(extentText);
+                if (!extentTextIsASystemResourceName)
                 {
                     if (configAst.ConfigurationType == ConfigurationType.Meta && !dynamicKeywordStatementAst.Keyword.IsMetaDSCResource())
                     {
@@ -1676,7 +1716,11 @@ private static void CheckGet(Parser parser, FunctionMemberAst functionMemberAst,
         /// <param name="hasTest">True if it is a Test method with qualified return type and signature; otherwise, false.</param>
         private static void CheckTest(FunctionMemberAst functionMemberAst, ref bool hasTest)
         {
-            if (hasTest) return;
+            if (hasTest)
+            {
+                return;
+            }
+
             hasTest = (functionMemberAst.Name.Equals("Test", StringComparison.OrdinalIgnoreCase) &&
                     functionMemberAst.Parameters.Count == 0 &&
                     functionMemberAst.ReturnType != null &&
@@ -1689,7 +1733,11 @@ private static void CheckTest(FunctionMemberAst functionMemberAst, ref bool hasT
         /// <param name="hasSet">True if it is a Set method with qualified return type and signature; otherwise, false.</param>
         private static void CheckSet(FunctionMemberAst functionMemberAst, ref bool hasSet)
         {
-            if (hasSet) return;
+            if (hasSet)
+            {
+                return;
+            }
+
             hasSet = (functionMemberAst.Name.Equals("Set", StringComparison.OrdinalIgnoreCase) &&
                     functionMemberAst.Parameters.Count == 0 &&
                     functionMemberAst.IsReturnTypeVoid());
@@ -1805,11 +1853,21 @@ internal static void CheckDataStatementLanguageModeAtRuntime(DataStatementAst da
             // we only need to check the language mode.
             if (executionContext.LanguageMode == PSLanguageMode.ConstrainedLanguage)
             {
-                var parser = new Parser();
-                parser.ReportError(dataStatementAst.CommandsAllowed[0].Extent,
-                    nameof(ParserStrings.DataSectionAllowedCommandDisallowed),
-                    ParserStrings.DataSectionAllowedCommandDisallowed);
-                throw new ParseException(parser.ErrorList.ToArray());
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    var parser = new Parser();
+                    parser.ReportError(dataStatementAst.CommandsAllowed[0].Extent,
+                        nameof(ParserStrings.DataSectionAllowedCommandDisallowed),
+                        ParserStrings.DataSectionAllowedCommandDisallowed);
+                    throw new ParseException(parser.ErrorList.ToArray());
+                }
+
+                SystemPolicy.LogWDACAuditMessage(
+                    context: executionContext,
+                    title: ParserStrings.WDACParserDSSupportedCommandLogTitle,
+                    message: ParserStrings.WDACParserDSSupportedCommandLogMessage,
+                    fqid: "SupportedCommandInDataSectionNotSupported",
+                    dropIntoDebugger: true);
             }
         }
 
diff --git a/src/System.Management.Automation/engine/parser/SymbolResolver.cs b/src/System.Management.Automation/engine/parser/SymbolResolver.cs
index 2da38a4ed06..097bcabac3b 100644
--- a/src/System.Management.Automation/engine/parser/SymbolResolver.cs
+++ b/src/System.Management.Automation/engine/parser/SymbolResolver.cs
@@ -111,11 +111,8 @@ internal void AddTypeFromUsingModule(Parser parser, TypeDefinitionAst typeDefini
             TypeLookupResult result;
             if (_typeTable.TryGetValue(typeDefinitionAst.Name, out result))
             {
-                if (result.ExternalNamespaces != null)
-                {
-                    // override external type by the type defined in the current namespace
-                    result.ExternalNamespaces.Add(moduleInfo.Name);
-                }
+                // override external type by the type defined in the current namespace
+                result.ExternalNamespaces?.Add(moduleInfo.Name);
             }
             else
             {
@@ -179,7 +176,7 @@ internal void AddTypesInScope(Ast ast)
             //     class C1 { [C2]$x }
             //     class C2 { [C1]$c1 }
 
-            var types = ast.FindAll(x => x is TypeDefinitionAst, searchNestedScriptBlocks: false);
+            var types = ast.FindAll(static x => x is TypeDefinitionAst, searchNestedScriptBlocks: false);
             foreach (var type in types)
             {
                 AddType((TypeDefinitionAst)type);
@@ -275,7 +272,7 @@ public bool IsInMethodScope()
         }
     }
 
-    internal class SymbolResolver : AstVisitor2, IAstPostVisitHandler
+    internal sealed class SymbolResolver : AstVisitor2, IAstPostVisitHandler
     {
         private readonly SymbolResolvePostActionVisitor _symbolResolvePostActionVisitor;
         internal readonly SymbolTable _symbolTable;
@@ -302,7 +299,7 @@ private static PowerShell UsingStatementResolvePowerShell
                         InitialSessionState iss = InitialSessionState.Create();
                         iss.Commands.Add(new SessionStateCmdletEntry("Get-Module", typeof(GetModuleCommand), null));
                         var sessionStateProviderEntry = new SessionStateProviderEntry(FileSystemProvider.ProviderName, typeof(FileSystemProvider), null);
-                        var snapin = PSSnapInReader.ReadEnginePSSnapIns().FirstOrDefault(snapIn => snapIn.Name.Equals("Microsoft.PowerShell.Core", StringComparison.OrdinalIgnoreCase));
+                        var snapin = PSSnapInReader.ReadEnginePSSnapIns().FirstOrDefault(static snapIn => snapIn.Name.Equals("Microsoft.PowerShell.Core", StringComparison.OrdinalIgnoreCase));
                         sessionStateProviderEntry.SetPSSnapIn(snapin);
                         iss.Providers.Add(sessionStateProviderEntry);
                         t_usingStatementResolvePowerShell = PowerShell.Create(iss);
@@ -407,7 +404,7 @@ public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst a
                                 var typeAst = _symbolTable.GetCurrentTypeDefinitionAst();
                                 Diagnostics.Assert(typeAst != null, "Method scopes can exist only inside type definitions.");
 
-                                string typeString = string.Format(CultureInfo.InvariantCulture, "[{0}]::", typeAst.Name);
+                                string typeString = string.Create(CultureInfo.InvariantCulture, $"[{typeAst.Name}]::");
                                 _parser.ReportError(variableExpressionAst.Extent,
                                     nameof(ParserStrings.MissingTypeInStaticPropertyAssignment),
                                     ParserStrings.MissingTypeInStaticPropertyAssignment,
diff --git a/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs b/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs
index 45f278b6b5a..a7744ac6411 100644
--- a/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs
+++ b/src/System.Management.Automation/engine/parser/TypeInferenceVisitor.cs
@@ -150,6 +150,8 @@ public TypeInferenceContext(PowerShell powerShell)
 
         public TypeDefinitionAst CurrentTypeDefinitionAst { get; set; }
 
+        public HashSet<IParameterMetadataProvider> AnalyzedCommands { get; } = new HashSet<IParameterMetadataProvider>();
+
         public TypeInferenceRuntimePermissions RuntimePermissions { get; set; }
 
         internal PowerShellExecutionHelper Helper { get; }
@@ -195,7 +197,25 @@ internal IList<object> GetMembersByInferredType(PSTypeName typename, bool isStat
                 // Look in the type table first.
                 if (!isStatic)
                 {
-                    var consolidatedString = new ConsolidatedString(new[] { typename.Name });
+                    // The Ciminstance type adapter adds the full typename with and without a namespace to the list of type names.
+                    // So if we see one with a full typename we need to also get the types for the short version.
+                    // For example: "CimInstance#root/standardcimv2/MSFT_NetFirewallRule" and "CimInstance#MSFT_NetFirewallRule"
+                    int namespaceSeparator = typename.Name.LastIndexOf('/');
+                    ConsolidatedString consolidatedString;
+                    if (namespaceSeparator != -1
+                        && typename.Name.StartsWith("Microsoft.Management.Infrastructure.CimInstance#", StringComparison.OrdinalIgnoreCase))
+                    {
+                        consolidatedString = new ConsolidatedString(new[]
+                        {
+                            typename.Name,
+                            string.Concat("Microsoft.Management.Infrastructure.CimInstance#", typename.Name.AsSpan(namespaceSeparator + 1))
+                        });
+                    }
+                    else
+                    {
+                        consolidatedString = new ConsolidatedString(new[] { typename.Name });
+                    }
+
                     results.AddRange(ExecutionContext.TypeTable.GetMembers<PSMemberInfo>(consolidatedString));
                 }
 
@@ -298,7 +318,7 @@ internal void AddMembersByInferredTypeDefinitionAst(
                 else
                 {
                     var functionMember = (FunctionMemberAst)member;
-                    add = functionMember.IsStatic == isStatic;
+                    add = (functionMember.IsConstructor && isStatic) || (!functionMember.IsConstructor && functionMember.IsStatic == isStatic);
                     foundConstructor |= functionMember.IsConstructor;
                 }
 
@@ -322,7 +342,18 @@ internal void AddMembersByInferredTypeDefinitionAst(
                 }
 
                 var baseTypeDefinitionAst = baseTypeName._typeDefinitionAst;
-                results.AddRange(GetMembersByInferredType(new PSTypeName(baseTypeDefinitionAst), isStatic, filterToCall));
+                if (baseTypeDefinitionAst is null)
+                {
+                    var baseReflectionType = baseTypeName.GetReflectionType();
+                    if (baseReflectionType is not null)
+                    {
+                        results.AddRange(GetMembersByInferredType(new PSTypeName(baseReflectionType), isStatic, filterToCall));
+                    }
+                }
+                else
+                {
+                    results.AddRange(GetMembersByInferredType(new PSTypeName(baseTypeDefinitionAst), isStatic, filterToCall));
+                }
             }
 
             // Add stuff from our base class System.Object.
@@ -353,7 +384,22 @@ internal void AddMembersByInferredTypeDefinitionAst(
                 filterToCall = filter;
             }
 
-            results.AddRange(GetMembersByInferredType(new PSTypeName(typeof(object)), isStatic, filterToCall));
+            PSTypeName baseMembersType;
+            if (typename.TypeDefinitionAst.IsEnum)
+            {
+                if (!isStatic)
+                {
+                    results.Add(new PSInferredProperty("value__", new PSTypeName(typeof(int))));
+                }
+
+                baseMembersType = new PSTypeName(typeof(Enum));
+            }
+            else
+            {
+                baseMembersType = new PSTypeName(typeof(object));
+            }
+
+            results.AddRange(GetMembersByInferredType(baseMembersType, isStatic, filterToCall));
         }
 
         internal void AddMembersByInferredTypeCimType(PSTypeName typename, List<object> results, Func<object, bool> filterToCall)
@@ -416,7 +462,29 @@ private static bool TryGetRepresentativeTypeNameFromValue(object value, out PSTy
                 value = PSObject.Base(value);
                 if (value != null)
                 {
-                    type = new PSTypeName(value.GetType());
+                    var typeObject = value.GetType();
+                    
+                    if (typeObject.FullName.Equals("System.Management.Automation.PSObject", StringComparison.Ordinal))
+                    {
+                        var psobjectPropertyList = new List<PSMemberNameAndType>();
+                        foreach (var property in ((PSObject)value).Properties)
+                        {
+                            if (property.IsHidden)
+                            {
+                                continue;
+                            }
+
+                            var propertyTypeName = new PSTypeName(property.TypeNameOfValue);
+                            psobjectPropertyList.Add(new PSMemberNameAndType(property.Name, propertyTypeName, property.Value));
+                        }
+
+                        type = PSSyntheticTypeName.Create(typeObject, psobjectPropertyList);
+                    }
+                    else
+                    {
+                        type = new PSTypeName(typeObject);
+                    }
+                    
                     return true;
                 }
             }
@@ -536,11 +604,24 @@ object ICustomAstVisitor.VisitHashtable(HashtableAst hashtableAst)
             if (hashtableAst.KeyValuePairs.Count > 0)
             {
                 var properties = new List<PSMemberNameAndType>();
+                void AddInferredTypes(Ast ast, string keyName)
+                {
+                    bool foundAnyTypes = false;
+                    foreach (PSTypeName item in InferTypes(ast))
+                    {
+                        foundAnyTypes = true;
+                        properties.Add(new PSMemberNameAndType(keyName, item));
+                    }
+
+                    if (!foundAnyTypes)
+                    {
+                        properties.Add(new PSMemberNameAndType(keyName, new PSTypeName("System.Object")));
+                    }
+                }
 
                 foreach (var kv in hashtableAst.KeyValuePairs)
                 {
                     string name = null;
-                    string typeName = null;
                     if (kv.Item1 is StringConstantExpressionAst stringConstantExpressionAst)
                     {
                         name = stringConstantExpressionAst.Value;
@@ -554,32 +635,33 @@ object ICustomAstVisitor.VisitHashtable(HashtableAst hashtableAst)
                         name = nameValue.ToString();
                     }
 
-                    if (name != null)
+                    if (name is not null)
                     {
-                        object value = null;
                         if (kv.Item2 is PipelineAst pipelineAst && pipelineAst.GetPureExpression() is ExpressionAst expression)
                         {
-                            switch (expression)
+                            object value;
+                            if (expression is ConstantExpressionAst constant)
                             {
-                                case ConstantExpressionAst constantExpression:
-                                    value = constantExpression.Value;
-                                    break;
-                                default:
-                                    typeName = InferTypes(kv.Item2).FirstOrDefault()?.Name;
-                                    if (typeName == null)
-                                    {
-                                        if (SafeExprEvaluator.TrySafeEval(expression, _context.ExecutionContext, out object safeValue))
-                                        {
-                                            value = safeValue;
-                                        }
-                                    }
+                                value = constant.Value;
+                            }
+                            else
+                            {
+                                _ = SafeExprEvaluator.TrySafeEval(expression, _context.ExecutionContext, out value);
+                            }
 
-                                    break;
+                            if (value is null)
+                            {
+                                AddInferredTypes(expression, name);
+                                continue;
                             }
-                        }
 
-                        var pstypeName = value != null ? new PSTypeName(value.GetType()) : new PSTypeName(typeName ?? "System.Object");
-                        properties.Add(new PSMemberNameAndType(name, pstypeName, value));
+                            PSTypeName valueType = new(value.GetType());
+                            properties.Add(new PSMemberNameAndType(name, valueType, value));
+                        }
+                        else
+                        {
+                            AddInferredTypes(kv.Item2, name);
+                        }
                     }
                 }
 
@@ -638,7 +720,176 @@ object ICustomAstVisitor.VisitMergingRedirection(MergingRedirectionAst mergingRe
 
         object ICustomAstVisitor.VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst)
         {
-            return InferTypes(binaryExpressionAst.Left);
+            switch (binaryExpressionAst.Operator)
+            {
+                case TokenKind.And:
+                case TokenKind.Ccontains:
+                case TokenKind.Cin:
+                case TokenKind.Cnotcontains:
+                case TokenKind.Cnotin:
+                case TokenKind.Icontains:
+                case TokenKind.Iin:
+                case TokenKind.Inotcontains:
+                case TokenKind.Inotin:
+                case TokenKind.Is:
+                case TokenKind.IsNot:
+                case TokenKind.Or:
+                case TokenKind.Xor:
+                    // Always returns a bool
+                    return BinaryExpressionAst.BoolTypeNameArray;
+
+                case TokenKind.As:
+                    // TODO: Handle other kinds of expressions on the right side.
+                    if (binaryExpressionAst.Right is TypeExpressionAst typeExpression)
+                    {
+                        var type = typeExpression.TypeName.GetReflectionType();
+                        var psTypeName = type != null ? new PSTypeName(type) : new PSTypeName(typeExpression.TypeName.FullName);
+                        return new[] { psTypeName };
+                    }
+                    break;
+
+                case TokenKind.Ceq:
+                case TokenKind.Cge:
+                case TokenKind.Cgt:
+                case TokenKind.Cle:
+                case TokenKind.Clike:
+                case TokenKind.Clt:
+                case TokenKind.Cmatch:
+                case TokenKind.Cne:
+                case TokenKind.Cnotlike:
+                case TokenKind.Cnotmatch:
+                case TokenKind.Ieq:
+                case TokenKind.Ige:
+                case TokenKind.Igt:
+                case TokenKind.Ile:
+                case TokenKind.Ilike:
+                case TokenKind.Ilt:
+                case TokenKind.Imatch:
+                case TokenKind.Ine:
+                case TokenKind.Inotlike:
+                case TokenKind.Inotmatch:
+                    // Returns a bool or filtered output from the left hand side if it's enumerable
+                    var comparisonOutput = new List<PSTypeName>() { new(typeof(bool)) };
+                    comparisonOutput.AddRange(InferTypes(binaryExpressionAst.Left));
+                    return comparisonOutput;
+
+                case TokenKind.Creplace:
+                case TokenKind.Format:
+                case TokenKind.Ireplace:
+                case TokenKind.Join:
+                    // Always returns a string
+                    return BinaryExpressionAst.StringTypeNameArray;
+
+                case TokenKind.Csplit:
+                case TokenKind.Isplit:
+                    // Always returns a string array
+                    return BinaryExpressionAst.StringArrayTypeNameArray;
+
+                case TokenKind.QuestionQuestion:
+                    // Can return left or right hand side
+                    var nullCoalescingOutput = InferTypes(binaryExpressionAst.Left).ToList();
+                    nullCoalescingOutput.AddRange(InferTypes(binaryExpressionAst.Right));
+                    return nullCoalescingOutput.Distinct();
+
+                default:
+                    break;
+            }
+
+            List<PSTypeName> lhsTypes = InferTypes(binaryExpressionAst.Left).ToList();
+            if (lhsTypes.Count == 0)
+            {
+                return lhsTypes;
+            }
+
+            string methodName;
+            switch (binaryExpressionAst.Operator)
+            {
+                case TokenKind.Divide:
+                    methodName = "op_Division";
+                    break;
+
+                case TokenKind.Minus:
+                    methodName = "op_Subtraction";
+                    break;
+
+                case TokenKind.Multiply:
+                    methodName = "op_Multiply";
+                    break;
+
+                case TokenKind.Plus:
+                    methodName = "op_Addition";
+                    break;
+
+                case TokenKind.Rem:
+                    methodName = "op_Modulus";
+                    break;
+
+                case TokenKind.Shl:
+                    methodName = "op_LeftShift";
+                    break;
+
+                case TokenKind.Shr:
+                    methodName = "op_RightShift";
+                    break;
+
+                default:
+                    return lhsTypes;
+            }
+
+            List<PSTypeName> rhsTypes = InferTypes(binaryExpressionAst.Right).ToList();
+            HashSet<string> addedReturnTypes = new HashSet<string>();
+            List<PSTypeName> result = new List<PSTypeName>();
+            foreach (PSTypeName lType in lhsTypes)
+            {
+                if (lType.Type is null)
+                {
+                    continue;
+                }
+
+                foreach (MethodInfo method in lType.Type.GetMethods(BindingFlags.Public | BindingFlags.Static))
+                {
+                    if (!method.Name.Equals(methodName, StringComparison.Ordinal))
+                    {
+                        continue;
+                    }
+
+                    if (rhsTypes.Count == 0)
+                    {
+                        if (addedReturnTypes.Add(method.ReturnType.FullName))
+                        {
+                            result.Add(new PSTypeName(method.ReturnType));
+                        }
+
+                        continue;
+                    }
+
+                    ParameterInfo[] methodParams = method.GetParameters();
+                    if (methodParams.Length != 2)
+                    {
+                        continue;
+                    }
+
+                    foreach (PSTypeName rType in rhsTypes)
+                    {
+                        if (rType.Type is not null && rType.Type.IsAssignableTo(methodParams[1].ParameterType))
+                        {
+                            if (addedReturnTypes.Add(method.ReturnType.FullName))
+                            {
+                                result.Add(new PSTypeName(method.ReturnType));
+                            }
+
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (result.Count == 0)
+            {
+                result.AddRange(lhsTypes);
+            }
+
+            return result;
         }
 
         object ICustomAstVisitor.VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst)
@@ -655,6 +906,11 @@ object ICustomAstVisitor.VisitConvertExpression(ConvertExpressionAst convertExpr
             // [PSObject] @{ Key = "Value" } and the [PSCustomObject] @{ Key = "Value" } case.
             var type = convertExpressionAst.Type.TypeName.GetReflectionType();
 
+            if (type is null && convertExpressionAst.Type.TypeName is TypeName unavailableType && unavailableType._typeDefinitionAst is not null)
+            {
+                return new[] { new PSTypeName(unavailableType._typeDefinitionAst) };
+            }
+
             if (type == typeof(PSObject) && convertExpressionAst.Child is HashtableAst hashtableAst)
             {
                 if (InferTypes(hashtableAst).FirstOrDefault() is PSSyntheticTypeName syntheticTypeName)
@@ -686,19 +942,28 @@ object ICustomAstVisitor.VisitSubExpression(SubExpressionAst subExpressionAst)
         object ICustomAstVisitor.VisitErrorStatement(ErrorStatementAst errorStatementAst)
         {
             var inferredTypes = new List<PSTypeName>();
-            foreach (var ast in errorStatementAst.Conditions)
+            if (errorStatementAst.Conditions is not null)
             {
-                inferredTypes.AddRange(InferTypes(ast));
+                foreach (var ast in errorStatementAst.Conditions)
+                {
+                    inferredTypes.AddRange(InferTypes(ast));
+                }
             }
 
-            foreach (var ast in errorStatementAst.Bodies)
+            if (errorStatementAst.Bodies is not null)
             {
-                inferredTypes.AddRange(InferTypes(ast));
+                foreach (var ast in errorStatementAst.Bodies)
+                {
+                    inferredTypes.AddRange(InferTypes(ast));
+                }
             }
 
-            foreach (var ast in errorStatementAst.NestedAst)
+            if (errorStatementAst.NestedAst is not null)
             {
-                inferredTypes.AddRange(InferTypes(ast));
+                foreach (var ast in errorStatementAst.NestedAst)
+                {
+                    inferredTypes.AddRange(InferTypes(ast));
+                }
             }
 
             return inferredTypes;
@@ -749,9 +1014,20 @@ object ICustomAstVisitor.VisitParamBlock(ParamBlockAst paramBlockAst)
         object ICustomAstVisitor.VisitNamedBlock(NamedBlockAst namedBlockAst)
         {
             var inferredTypes = new List<PSTypeName>();
-            for (var index = 0; index < namedBlockAst.Statements.Count; index++)
+            for (int index = 0; index < namedBlockAst.Statements.Count; index++)
             {
-                var ast = namedBlockAst.Statements[index];
+                StatementAst ast = namedBlockAst.Statements[index];
+                if (ast is AssignmentStatementAst
+                    || (ast is PipelineAst pipe && pipe.PipelineElements.Count == 1 && pipe.PipelineElements[0] is CommandExpressionAst cmd
+                    && cmd.Redirections.Count == 0 && cmd.Expression is UnaryExpressionAst unary
+                    && unary.TokenKind is TokenKind.PostfixPlusPlus or TokenKind.PlusPlus or TokenKind.PostfixMinusMinus or TokenKind.MinusMinus))
+                {
+                    // Assignments don't output anything to the named block unless they are wrapped in parentheses.
+                    // When they are wrapped in parentheses, they are seen as PipelineAst.
+                    // Increment/decrement operators like $i++ also don't output anything unless there's a redirection, or they are wrapped in parentheses.
+                    continue;
+                }
+
                 inferredTypes.AddRange(InferTypes(ast));
             }
 
@@ -820,8 +1096,19 @@ object ICustomAstVisitor.VisitFunctionDefinition(FunctionDefinitionAst functionD
         object ICustomAstVisitor.VisitStatementBlock(StatementBlockAst statementBlockAst)
         {
             var inferredTypes = new List<PSTypeName>();
-            foreach (var ast in statementBlockAst.Statements)
+            foreach (StatementAst ast in statementBlockAst.Statements)
             {
+                if (ast is AssignmentStatementAst
+                    || (ast is PipelineAst pipe && pipe.PipelineElements.Count == 1 && pipe.PipelineElements[0] is CommandExpressionAst cmd
+                    && cmd.Redirections.Count == 0 && cmd.Expression is UnaryExpressionAst unary
+                    && unary.TokenKind is TokenKind.PostfixPlusPlus or TokenKind.PlusPlus or TokenKind.PostfixMinusMinus or TokenKind.MinusMinus))
+                {
+                    // Assignments don't output anything to the statement block unless they are wrapped in parentheses.
+                    // When they are wrapped in parentheses, they are seen as PipelineAst.
+                    // Increment operators like $i++ also don't output anything unless there's a redirection, or they are wrapped in parentheses.
+                    continue;
+                }
+
                 inferredTypes.AddRange(InferTypes(ast));
             }
 
@@ -929,6 +1216,11 @@ object ICustomAstVisitor.VisitContinueStatement(ContinueStatementAst continueSta
 
         object ICustomAstVisitor.VisitReturnStatement(ReturnStatementAst returnStatementAst)
         {
+            if (returnStatementAst.Pipeline is null)
+            {
+                return TypeInferenceContext.EmptyPSTypeNameArray;
+            }
+
             return returnStatementAst.Pipeline.Accept(this);
         }
 
@@ -949,7 +1241,18 @@ object ICustomAstVisitor.VisitDoUntilStatement(DoUntilStatementAst doUntilStatem
 
         object ICustomAstVisitor.VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
         {
-            return assignmentStatementAst.Left.Accept(this);
+            ExpressionAst child = assignmentStatementAst.Left;
+            while (child is AttributedExpressionAst attributeChild)
+            {
+                if (attributeChild is ConvertExpressionAst convert)
+                {
+                    return new List<PSTypeName>() { new(convert.Type.TypeName) };
+                }
+
+                child = attributeChild.Child;
+            }
+
+            return assignmentStatementAst.Right.Accept(this);
         }
 
         object ICustomAstVisitor.VisitPipeline(PipelineAst pipelineAst)
@@ -980,13 +1283,111 @@ object ICustomAstVisitor.VisitFileRedirection(FileRedirectionAst fileRedirection
             return TypeInferenceContext.EmptyPSTypeNameArray;
         }
 
-        private void InferTypesFrom(CommandAst commandAst, List<PSTypeName> inferredTypes)
+        private void InferTypesFrom(CommandAst commandAst, List<PSTypeName> inferredTypes, bool forRedirection = false)
         {
+            if (commandAst.Redirections.Count > 0)
+            {
+                var mergedStreams = new HashSet<RedirectionStream>();
+                bool allStreamsMerged = false;
+                foreach (RedirectionAst streamRedirection in commandAst.Redirections)
+                {
+                    if (streamRedirection is FileRedirectionAst fileRedirection)
+                    {
+                        if (!forRedirection && fileRedirection.FromStream is RedirectionStream.All or RedirectionStream.Output)
+                        {
+                            // command output is redirected so it returns nothing.
+                            return;
+                        }
+                    }
+                    else if (streamRedirection is MergingRedirectionAst mergeRedirection && mergeRedirection.ToStream == RedirectionStream.Output)
+                    {
+                        if (mergeRedirection.FromStream == RedirectionStream.All)
+                        {
+                            allStreamsMerged = true;
+                            continue;
+                        }
+
+                        _ = mergedStreams.Add(mergeRedirection.FromStream);
+                    }
+                }
+
+                if (allStreamsMerged)
+                {
+                    inferredTypes.Add(new PSTypeName(typeof(ErrorRecord)));
+                    inferredTypes.Add(new PSTypeName(typeof(WarningRecord)));
+                    inferredTypes.Add(new PSTypeName(typeof(VerboseRecord)));
+                    inferredTypes.Add(new PSTypeName(typeof(DebugRecord)));
+                    inferredTypes.Add(new PSTypeName(typeof(InformationRecord)));
+                }
+                else
+                {
+                    foreach (RedirectionStream value in mergedStreams)
+                    {
+                        switch (value)
+                        {
+                            case RedirectionStream.Error:
+                                inferredTypes.Add(new PSTypeName(typeof(ErrorRecord)));
+                                break;
+
+                            case RedirectionStream.Warning:
+                                inferredTypes.Add(new PSTypeName(typeof(WarningRecord)));
+                                break;
+
+                            case RedirectionStream.Verbose:
+                                inferredTypes.Add(new PSTypeName(typeof(VerboseRecord)));
+                                break;
+
+                            case RedirectionStream.Debug:
+                                inferredTypes.Add(new PSTypeName(typeof(DebugRecord)));
+                                break;
+
+                            case RedirectionStream.Information:
+                                inferredTypes.Add(new PSTypeName(typeof(InformationRecord)));
+                                break;
+
+                            default:
+                                break;
+                        }
+                    }
+                }
+            }
+
+            if (commandAst.CommandElements[0] is ScriptBlockExpressionAst scriptBlock)
+            {
+                // An anonymous function like: & {"Do Something"}
+                inferredTypes.AddRange(InferTypes(scriptBlock.ScriptBlock));
+                return;
+            }
+
             PseudoBindingInfo pseudoBinding = new PseudoParameterBinder()
             .DoPseudoParameterBinding(commandAst, null, null, PseudoParameterBinder.BindingType.ParameterCompletion);
 
-            if (pseudoBinding?.CommandInfo == null)
+            if (pseudoBinding?.CommandInfo is null)
             {
+                var commandName = commandAst.GetCommandName();
+                if (string.IsNullOrEmpty(commandName))
+                {
+                    return;
+                }
+
+                try
+                {
+                    var foundCommand = CommandDiscovery.LookupCommandInfo(
+                        commandName,
+                        CommandTypes.Application,
+                        SearchResolutionOptions.ResolveLiteralThenPathPatterns,
+                        CommandOrigin.Internal,
+                        _context.ExecutionContext);
+
+                    // There's no way to know whether or not an application outputs anything
+                    // but when they do, PowerShell will treat it as string data.
+                    inferredTypes.Add(new PSTypeName(typeof(string)));
+                }
+                catch
+                {
+                    // The command wasn't found so we can't infer anything.
+                }
+
                 return;
             }
 
@@ -1023,10 +1424,40 @@ private void InferTypesFrom(CommandAst commandAst, List<PSTypeName> inferredType
                     inferredTypes.AddRange(inferTypesFromObjectCmdlets);
                     return;
                 }
+
+                if (cmdletInfo.ImplementingType.FullName.EqualsOrdinalIgnoreCase("Microsoft.PowerShell.Commands.GetRandomCommand")
+                    && pseudoBinding.BoundArguments.TryGetValue("InputObject", out var value))
+                {
+                    if (value.ParameterArgumentType == AstParameterArgumentType.PipeObject)
+                    {
+                        InferTypesFromPreviousCommand(commandAst, inferredTypes);
+                    }
+                    else if (value.ParameterArgumentType == AstParameterArgumentType.AstPair)
+                    {
+                        inferredTypes.AddRange(InferTypes(((AstPair)value).Argument));
+                    }
+
+                    return;
+                }
+            }
+
+            if ((commandInfo.OutputType.Count == 0
+                || (commandInfo.OutputType.Count == 1
+                && (commandInfo.OutputType[0].Name.EqualsOrdinalIgnoreCase(typeof(PSObject).FullName)
+                || commandInfo.OutputType[0].Name.EqualsOrdinalIgnoreCase(typeof(object).FullName))))
+                && commandInfo is IScriptCommandInfo scriptCommandInfo
+                && scriptCommandInfo.ScriptBlock.Ast is IParameterMetadataProvider scriptBlockWithParams
+                && _context.AnalyzedCommands.Add(scriptBlockWithParams))
+            {
+                // This is a function without an output type defined (or it's too generic to be useful)
+                // We can analyze the code inside the function to find out what it actually outputs
+                // The purpose of the hashset is to avoid infinite loops with functions that call themselves.
+                inferredTypes.AddRange(InferTypes(scriptBlockWithParams.Body));
+                return;
             }
 
             // The OutputType property ignores the parameter set specified in the OutputTypeAttribute.
-            // With psuedo-binding, we actually know the candidate parameter sets, so we could take
+            // With pseudo-binding, we actually know the candidate parameter sets, so we could take
             // advantage of it here, but I opted for the simpler code because so few cmdlets use
             // ParameterSetName in OutputType and of the ones I know about, it isn't that useful.
             inferredTypes.AddRange(commandInfo.OutputType);
@@ -1177,7 +1608,7 @@ private void InferTypesFromGroupCommand(PseudoBindingInfo pseudoBinding, Command
                             properties = new[] { stringConstant.Value };
                             break;
                         case ArrayLiteralAst arrayLiteral:
-                            properties = arrayLiteral.Elements.OfType<StringConstantExpressionAst>().Select(c => c.Value).ToArray();
+                            properties = arrayLiteral.Elements.OfType<StringConstantExpressionAst>().Select(static c => c.Value).ToArray();
                             scriptBlockProperty = arrayLiteral.Elements.OfType<StringConstantExpressionAst>().Any();
                             break;
                         case CommandElementAst _:
@@ -1281,7 +1712,7 @@ private void InferTypesFromPreviousCommand(CommandAst commandAst, List<PSTypeNam
 
                 if (i > 0)
                 {
-                    inferredTypes.AddRange(InferTypes(parentPipeline.PipelineElements[i - 1]));
+                    inferredTypes.AddRange(GetInferredEnumeratedTypes(InferTypes(parentPipeline.PipelineElements[i - 1])));
                 }
             }
         }
@@ -1292,7 +1723,7 @@ void InferFromSelectProperties(AstParameterArgumentPair astParameterArgumentPair
             {
                 if (astParameterArgumentPair is AstPair astPair)
                 {
-                    object ToWildCardOrString(string value) => WildcardPattern.ContainsWildcardCharacters(value) ? (object)new WildcardPattern(value) : value;
+                    static object ToWildCardOrString(string value) => WildcardPattern.ContainsWildcardCharacters(value) ? (object)new WildcardPattern(value) : value;
                     object[] properties = null;
                     switch (astPair.Argument)
                     {
@@ -1300,7 +1731,7 @@ void InferFromSelectProperties(AstParameterArgumentPair astParameterArgumentPair
                             properties = new[] { ToWildCardOrString(stringConstant.Value) };
                             break;
                         case ArrayLiteralAst arrayLiteral:
-                            properties = arrayLiteral.Elements.OfType<StringConstantExpressionAst>().Select(c => ToWildCardOrString(c.Value)).ToArray();
+                            properties = arrayLiteral.Elements.OfType<StringConstantExpressionAst>().Select(static c => ToWildCardOrString(c.Value)).ToArray();
                             break;
                     }
 
@@ -1494,8 +1925,16 @@ private IEnumerable<PSTypeName> InferTypesFrom(MemberExpressionAst memberExpress
                 return Array.Empty<PSTypeName>();
             }
 
+            bool isInvokeMemberExpressionAst = false;
             var res = new List<PSTypeName>(10);
-            bool isInvokeMemberExpressionAst = memberExpressionAst is InvokeMemberExpressionAst;
+            IList<ITypeName> genericTypeArguments = null;
+
+            if (memberExpressionAst is InvokeMemberExpressionAst invokeMemberExpression)
+            {
+                isInvokeMemberExpressionAst = true;
+                genericTypeArguments = invokeMemberExpression.GenericTypeArguments;
+            }
+
             var maybeWantDefaultCtor = isStatic
                                        && isInvokeMemberExpressionAst
                                        && memberAsStringConst.Value.EqualsOrdinalIgnoreCase("new");
@@ -1505,14 +1944,14 @@ private IEnumerable<PSTypeName> InferTypesFrom(MemberExpressionAst memberExpress
             var memberNameList = new List<string> { memberAsStringConst.Value };
             foreach (var type in exprType)
             {
-                if (type.Type == typeof(PSObject))
+                if (type.Type == typeof(PSObject) && type is not PSSyntheticTypeName)
                 {
                     continue;
                 }
 
                 var members = _context.GetMembersByInferredType(type, isStatic, filter: null);
 
-                AddTypesOfMembers(type, memberNameList, members, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, res);
+                AddTypesOfMembers(type, memberNameList, members, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, genericTypeArguments, res);
 
                 // We didn't find any constructors but they used [T]::new() syntax
                 if (maybeWantDefaultCtor)
@@ -1524,6 +1963,36 @@ private IEnumerable<PSTypeName> InferTypesFrom(MemberExpressionAst memberExpress
             return res;
         }
 
+        private static IEnumerable<PSTypeName> InferTypeFromRef(InvokeMemberExpressionAst invokeMember, ExpressionAst refArgument)
+        {
+            Type expressionClrType = (invokeMember.Expression as TypeExpressionAst)?.TypeName.GetReflectionType();
+            string memberName = (invokeMember.Member as StringConstantExpressionAst)?.Value;
+            int argumentIndex = invokeMember.Arguments.IndexOf(refArgument);
+            if (expressionClrType is null || string.IsNullOrEmpty(memberName) || argumentIndex == -1)
+            {
+                yield break;
+            }
+
+            foreach (MemberInfo memberInfo in expressionClrType.GetMember(memberName))
+            {
+                if (memberInfo.MemberType == MemberTypes.Method)
+                {
+                    var methodInfo = memberInfo as MethodInfo;
+                    ParameterInfo[] methodParams = methodInfo.GetParameters();
+                    if (methodParams.Length < argumentIndex)
+                    {
+                        continue;
+                    }
+
+                    ParameterInfo paramCandidate = methodParams[argumentIndex];
+                    if (paramCandidate.IsOut)
+                    {
+                        yield return new PSTypeName(paramCandidate.ParameterType.GetElementType());
+                    }
+                }
+            }
+        }
+
         private void GetTypesOfMembers(
             PSTypeName thisType,
             string memberName,
@@ -1533,7 +2002,7 @@ private void GetTypesOfMembers(
             List<PSTypeName> inferredTypes)
         {
             var memberNamesToCheck = new List<string> { memberName };
-            AddTypesOfMembers(thisType, memberNamesToCheck, members, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, inferredTypes);
+            AddTypesOfMembers(thisType, memberNamesToCheck, members, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, genericTypeArguments: null, inferredTypes);
         }
 
         private void AddTypesOfMembers(
@@ -1542,6 +2011,7 @@ private void AddTypesOfMembers(
             IList<object> members,
             ref bool maybeWantDefaultCtor,
             bool isInvokeMemberExpressionAst,
+            IList<ITypeName> genericTypeArguments,
             List<PSTypeName> result)
         {
             for (int i = 0; i < memberNamesToCheck.Count; i++)
@@ -1549,7 +2019,7 @@ private void AddTypesOfMembers(
                 string memberNameToCheck = memberNamesToCheck[i];
                 foreach (var member in members)
                 {
-                    if (TryGetTypeFromMember(currentType, member, memberNameToCheck, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, result, memberNamesToCheck))
+                    if (TryGetTypeFromMember(currentType, member, memberNameToCheck, ref maybeWantDefaultCtor, isInvokeMemberExpressionAst, genericTypeArguments, result, memberNamesToCheck))
                     {
                         break;
                     }
@@ -1563,6 +2033,7 @@ private bool TryGetTypeFromMember(
             string memberName,
             ref bool maybeWantDefaultCtor,
             bool isInvokeMemberExpressionAst,
+            IList<ITypeName> genericTypeArguments,
             List<PSTypeName> result,
             List<string> memberNamesToCheck)
         {
@@ -1588,7 +2059,7 @@ private bool TryGetTypeFromMember(
                     if (methodCacheEntry[0].method.Name.Equals(memberName, StringComparison.OrdinalIgnoreCase))
                     {
                         maybeWantDefaultCtor = false;
-                        AddTypesFromMethodCacheEntry(methodCacheEntry, result, isInvokeMemberExpressionAst);
+                        AddTypesFromMethodCacheEntry(methodCacheEntry, genericTypeArguments, result, isInvokeMemberExpressionAst);
                         return true;
                     }
 
@@ -1637,7 +2108,7 @@ private bool TryGetTypeFromMember(
                         case PSMethod m:
                             if (m.adapterData is DotNetAdapter.MethodCacheEntry methodCacheEntry)
                             {
-                                AddTypesFromMethodCacheEntry(methodCacheEntry, result, isInvokeMemberExpressionAst);
+                                AddTypesFromMethodCacheEntry(methodCacheEntry, genericTypeArguments, result, isInvokeMemberExpressionAst);
                                 return true;
                             }
 
@@ -1701,21 +2172,63 @@ private bool TryGetTypeFromMember(
 
         private static void AddTypesFromMethodCacheEntry(
             DotNetAdapter.MethodCacheEntry methodCacheEntry,
+            IList<ITypeName> genericTypeArguments,
             List<PSTypeName> result,
             bool isInvokeMemberExpressionAst)
         {
             if (isInvokeMemberExpressionAst)
             {
-                foreach (var method in methodCacheEntry.methodInformationStructures)
+                Type[] resolvedTypeArguments = null;
+                if (genericTypeArguments is not null)
                 {
-                    if (method.method is MethodInfo methodInfo && !methodInfo.ReturnType.ContainsGenericParameters)
+                    resolvedTypeArguments = new Type[genericTypeArguments.Count];
+                    for (int i = 0; i < genericTypeArguments.Count; i++)
                     {
-                        result.Add(new PSTypeName(methodInfo.ReturnType));
+                        Type resolvedType = genericTypeArguments[i].GetReflectionType();
+                        if (resolvedType is null)
+                        {
+                            // If any generic type argument cannot be resolved yet,
+                            // we simply assume this information is unavailable.
+                            resolvedTypeArguments = null;
+                            break;
+                        }
+
+                        resolvedTypeArguments[i] = resolvedType;
                     }
                 }
 
-                return;
-            }
+                var tempResult = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "System.Void" };
+                foreach (var method in methodCacheEntry.methodInformationStructures)
+                {
+                    if (method.method is MethodInfo methodInfo)
+                    {
+                        Type retType = null;
+                        if (!methodInfo.ReturnType.ContainsGenericParameters)
+                        {
+                            retType = methodInfo.ReturnType;
+                        }
+                        else if (resolvedTypeArguments is not null)
+                        {
+                            try
+                            {
+                                retType = methodInfo.MakeGenericMethod(resolvedTypeArguments).ReturnType;
+                            }
+                            catch
+                            {
+                                // If we can't build the generic method then just skip it to retain other completion results.
+                                continue;
+                            }
+                        }
+
+                        if (retType is not null && tempResult.Add(retType.FullName))
+                        {
+                            result.Add(new PSTypeName(retType));
+                        }
+                    }
+                }
+
+                return;
+            }
 
             // Accessing a method as a property, we'd return a wrapper over the method.
             result.Add(new PSTypeName(typeof(PSMethod)));
@@ -1769,245 +2282,247 @@ private void InferTypeFrom(VariableExpressionAst variableExpressionAst, List<PST
             // We don't need to handle drive qualified variables, we can usually get those values
             // without needing to "guess" at the type.
             var astVariablePath = variableExpressionAst.VariablePath;
-            if (!astVariablePath.IsVariable)
+            if (!astVariablePath.IsVariable || astVariablePath.UserPath.EqualsOrdinalIgnoreCase(SpecialVariables.Null))
             {
                 // Not a variable - the caller should have already tried going to session state
                 // to get the item and hence it's type, but that must have failed.  Don't try again.
                 return;
             }
 
-            Ast parent = variableExpressionAst.Parent;
+            Ast currentAst = variableExpressionAst.Parent;
             if (astVariablePath.IsUnqualified &&
                 (SpecialVariables.IsUnderbar(astVariablePath.UserPath)
                  || astVariablePath.UserPath.EqualsOrdinalIgnoreCase(SpecialVariables.PSItem)))
             {
-                // $_ is special, see if we're used in a script block in some pipeline.
-                while (parent != null)
-                {
-                    if (parent is ScriptBlockExpressionAst || parent is CatchClauseAst)
+                // The automatic variable $_ is assigned a value in scriptblocks, Switch loops and Catch/Trap statements
+                // This loop will find whichever Ast that determines the value of $_
+                // The value in scriptblocks is determined by the parents of that scriptblock, the only interesting scenarios are:
+                // 1: MemberInvocation like: $Collection.Where({$_})
+                // 2: Command pipelines like: dir | where {$_}
+                // The value in a Switch loop is whichever item is in the condition part of the statement.
+                // The value in Catch/Trap statements is always an error record.
+                bool hasSeenScriptBlock = false;
+                while (currentAst is not null)
+                {
+                    if (currentAst is CatchClauseAst or TrapStatementAst)
                     {
                         break;
                     }
-
-                    parent = parent.Parent;
-                }
-
-                if (parent != null)
-                {
-                    if (parent.Parent is CommandExpressionAst && parent.Parent.Parent is PipelineAst)
-                    {
-                        // Script block in a hash table, could be something like:
-                        //     dir | ft @{ Expression = { $_ } }
-
-                        if (parent.Parent.Parent.Parent is HashtableAst)
-                        {
-                            parent = parent.Parent.Parent.Parent;
-                        }
-                        else if (parent.Parent.Parent.Parent is ArrayLiteralAst && parent.Parent.Parent.Parent.Parent is HashtableAst)
-                        {
-                            parent = parent.Parent.Parent.Parent.Parent;
-                        }
-                    }
-
-                    if (parent.Parent is CommandParameterAst)
+                    else if (currentAst is SwitchStatementAst switchStatement
+                        && switchStatement.Condition.Extent.EndOffset < variableExpressionAst.Extent.StartOffset)
                     {
-                        parent = parent.Parent;
+                        currentAst = switchStatement.Condition;
+                        break;
                     }
-
-                    if (parent is CatchClauseAst catchBlock)
+                    else if (currentAst is ErrorStatementAst switchErrorStatement && switchErrorStatement.Kind?.Kind == TokenKind.Switch)
                     {
-                        if (catchBlock.CatchTypes.Count > 0)
+                        if (switchErrorStatement.Conditions?.Count > 0)
                         {
-                            foreach (TypeConstraintAst catchType in catchBlock.CatchTypes)
+                            if (switchErrorStatement.Conditions[0].Extent.EndOffset < variableExpressionAst.Extent.StartOffset)
                             {
-                                Type exceptionType = catchType.TypeName.GetReflectionType();
-                                if (exceptionType != null && typeof(Exception).IsAssignableFrom(exceptionType))
-                                {
-                                    inferredTypes.Add(new PSTypeName(typeof(ErrorRecord<>).MakeGenericType(exceptionType)));
-                                }
+                                currentAst = switchErrorStatement.Conditions[0];
+                                break;
+                            }
+                            else
+                            {
+                                // $_ is inside the condition that is being declared, eg: Get-Process | Sort-Object -Property {switch ($_.Proc<Tab>
+                                currentAst = switchErrorStatement.Parent;
+                                continue;
                             }
-                        }
-                        else
-                        {
-                            inferredTypes.Add(new PSTypeName(typeof(ErrorRecord)));
                         }
 
-                        return;
+                        break;
                     }
-
-                    if (parent.Parent is CommandAst commandAst)
+                    else if (currentAst is ScriptBlockExpressionAst)
+                    {
+                        hasSeenScriptBlock = true;
+                    }
+                    else if (hasSeenScriptBlock)
                     {
-                        // We found a command, see if there is a previous command in the pipeline.
-                        PipelineAst pipelineAst = (PipelineAst)commandAst.Parent;
-                        var previousCommandIndex = pipelineAst.PipelineElements.IndexOf(commandAst) - 1;
-                        if (previousCommandIndex < 0)
+                        if (currentAst is InvokeMemberExpressionAst invokeMember)
                         {
-                            return;
+                            currentAst = invokeMember.Expression;
+                            break;
                         }
-
-                        foreach (var result in InferTypes(pipelineAst.PipelineElements[0]))
+                        else if (currentAst is CommandAst cmdAst && cmdAst.Parent is PipelineAst pipeline && pipeline.PipelineElements.Count > 1)
                         {
-                            if (result.Type != null)
+                            // We've found a pipeline with multiple commands, now we need to determine what command came before the command with the scriptblock:
+                            // eg Get-Partition in this example: Get-Disk | Get-Partition | Where {$_}
+                            var indexOfPreviousCommand = pipeline.PipelineElements.IndexOf(cmdAst) - 1;
+                            if (indexOfPreviousCommand >= 0)
                             {
-                                // Assume (because we're looking at $_ and we're inside a script block that is an
-                                // argument to some command) that the type we're getting is actually unrolled.
-                                // This might not be right in all cases, but with our simple analysis, it's
-                                // right more often than it's wrong.
-                                if (result.Type.IsArray)
-                                {
-                                    inferredTypes.Add(new PSTypeName(result.Type.GetElementType()));
-                                    continue;
-                                }
-
-                                if (typeof(IEnumerable).IsAssignableFrom(result.Type))
-                                {
-                                    // We can't deduce much from IEnumerable, but we can if it's generic.
-                                    var enumerableInterfaces = result.Type.GetInterfaces();
-                                    foreach (var t in enumerableInterfaces)
-                                    {
-                                        if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
-                                        {
-                                            inferredTypes.Add(new PSTypeName(t.GetGenericArguments()[0]));
-                                        }
-                                    }
-
-                                    continue;
-                                }
+                                currentAst = pipeline.PipelineElements[indexOfPreviousCommand];
+                                break;
                             }
-
-                            inferredTypes.Add(result);
                         }
-
-                        return;
                     }
+
+                    currentAst = currentAst.Parent;
                 }
-            }
 
-            // For certain variables, we always know their type, well at least we can assume we know.
-            if (astVariablePath.IsUnqualified)
-            {
-                var isThis = astVariablePath.UserPath.EqualsOrdinalIgnoreCase(SpecialVariables.This);
-                if (!isThis || (_context.CurrentTypeDefinitionAst == null && _context.CurrentThisType == null))
+                if (currentAst is CatchClauseAst catchBlock)
                 {
-                    for (int i = 0; i < SpecialVariables.AutomaticVariables.Length; i++)
+                    if (catchBlock.CatchTypes.Count > 0)
                     {
-                        if (!astVariablePath.UserPath.EqualsOrdinalIgnoreCase(SpecialVariables.AutomaticVariables[i]))
+                        foreach (TypeConstraintAst catchType in catchBlock.CatchTypes)
                         {
-                            continue;
+                            Type exceptionType = catchType.TypeName.GetReflectionType();
+                            if (typeof(Exception).IsAssignableFrom(exceptionType))
+                            {
+                                inferredTypes.Add(new PSTypeName(typeof(ErrorRecord<>).MakeGenericType(exceptionType)));
+                            }
                         }
+                    }
 
-                        var type = SpecialVariables.AutomaticVariableTypes[i];
-                        if (type != typeof(object))
+                    // Either no type constraint was specified, or all the specified catch types were unavailable but we still know it's an error record.
+                    if (inferredTypes.Count == 0)
+                    {
+                        inferredTypes.Add(new PSTypeName(typeof(ErrorRecord)));
+                    }
+                }
+                else if (currentAst is TrapStatementAst trap)
+                {
+                    if (trap.TrapType is not null)
+                    {
+                        Type exceptionType = trap.TrapType.TypeName.GetReflectionType();
+                        if (typeof(Exception).IsAssignableFrom(exceptionType))
                         {
-                            inferredTypes.Add(new PSTypeName(type));
+                            inferredTypes.Add(new PSTypeName(typeof(ErrorRecord<>).MakeGenericType(exceptionType)));
                         }
-
-                        break;
+                    }
+                    if (inferredTypes.Count == 0)
+                    {
+                        inferredTypes.Add(new PSTypeName(typeof(ErrorRecord)));
                     }
                 }
-                else
+                else if (currentAst is not null)
                 {
-                    var typeName = _context.CurrentThisType ?? new PSTypeName(_context.CurrentTypeDefinitionAst);
-                    inferredTypes.Add(typeName);
-                    return;
+                    inferredTypes.AddRange(GetInferredEnumeratedTypes(InferTypes(currentAst)));
                 }
-            }
-            else
-            {
-                inferredTypes.Add(new PSTypeName(_context.CurrentTypeDefinitionAst));
+
                 return;
             }
 
-            // Look for our variable as a parameter or on the lhs of an assignment - hopefully we'll find either
-            // a type constraint or at least we can use the rhs to infer the type.
-            while (parent?.Parent != null)
+            // Process the well known variable $this
+            if (astVariablePath.IsUnqualified
+                && astVariablePath.UnqualifiedPath.EqualsOrdinalIgnoreCase(SpecialVariables.This)
+                && (_context.CurrentTypeDefinitionAst is not null || _context.CurrentThisType is not null))
             {
-                parent = parent.Parent;
+                // $this is special in script properties and in PowerShell classes
+                PSTypeName typeName = _context.CurrentThisType ?? new PSTypeName(_context.CurrentTypeDefinitionAst);
+                inferredTypes.Add(typeName);
+                return;
             }
 
-            if (parent?.Parent is FunctionDefinitionAst)
+            // Process other well known variables like $true and $pshome
+            if (SpecialVariables.AllScopeVariables.TryGetValue(astVariablePath.UnqualifiedPath, out Type knownType))
             {
-                parent = parent.Parent;
-            }
-
-            int startOffset = variableExpressionAst.Extent.StartOffset;
-            var targetAsts = (List<Ast>)AstSearcher.FindAll(
-                parent,
-                ast =>
+                if (knownType == typeof(object))
                 {
-                    if (ast is ParameterAst || ast is AssignmentStatementAst || ast is CommandAst)
+                    if (_context.TryGetRepresentativeTypeNameFromExpressionSafeEval(variableExpressionAst, out var psType))
                     {
-                        return variableExpressionAst.AstAssignsToSameVariable(ast)
-                            && ast.Extent.EndOffset < startOffset;
-                    }
-
-                    if (ast is ForEachStatementAst)
-                    {
-                        return variableExpressionAst.AstAssignsToSameVariable(ast)
-                            && ast.Extent.StartOffset < startOffset;
+                        inferredTypes.Add(psType);
                     }
+                }
+                else
+                {
+                    inferredTypes.Add(new PSTypeName(knownType));
+                }
 
-                    return false;
-                },
-                searchNestedScriptBlocks: true);
+                return;
+            }
 
-            foreach (var ast in targetAsts)
+            // Process automatic variables like $MyInvocation and $PSBoundParameters
+            for (int i = 0; i < SpecialVariables.AutomaticVariables.Length; i++)
             {
-                if (ast is ParameterAst parameterAst)
+                if (!astVariablePath.UnqualifiedPath.EqualsOrdinalIgnoreCase(SpecialVariables.AutomaticVariables[i]))
                 {
-                    var currentCount = inferredTypes.Count;
-                    inferredTypes.AddRange(InferTypes(parameterAst));
+                    continue;
+                }
 
-                    if (inferredTypes.Count != currentCount)
-                    {
-                        return;
-                    }
+                Type type = SpecialVariables.AutomaticVariableTypes[i];
+                if (type != typeof(object))
+                {
+                    inferredTypes.Add(new PSTypeName(type));
                 }
-            }
 
-            var assignAsts = targetAsts.OfType<AssignmentStatementAst>().ToArray();
+                return;
+            }
 
-            // If any of the assignments lhs use a type constraint, then we use that.
-            // Otherwise, we use the rhs of the "nearest" assignment
-            foreach (var assignAst in assignAsts)
+            // This visitor + loop finds the start of the current scope and traverses top to bottom to find the nearest variable assignment.
+            // Then repeats the process for each parent scope.
+            var assignmentVisitor = new VariableAssignmentVisitor()
             {
-                if (assignAst.Left is ConvertExpressionAst lhsConvert)
+                ScopeIsLocal = true,
+                LocalScopeOnly = variableExpressionAst.VariablePath.IsLocal || variableExpressionAst.VariablePath.IsPrivate,
+                StopSearchOffset = variableExpressionAst.Extent.StartOffset,
+                VariableTarget = variableExpressionAst
+            };
+            while (currentAst is not null)
+            {
+                if (currentAst is IParameterMetadataProvider)
                 {
-                    inferredTypes.Add(new PSTypeName(lhsConvert.Type.TypeName));
-                    return;
+                    if (currentAst is ScriptBlockAst && currentAst.Parent is FunctionDefinitionAst)
+                    {
+                        // If this scriptblock belongs to a function we want to visit that instead so we can get the parameters
+                        // function X ($Param1){}
+                        currentAst = currentAst.Parent;
+                    }
+
+                    assignmentVisitor.ScopeDefinitionAst = currentAst;
+                    currentAst.Visit(assignmentVisitor);
+
+                    if (assignmentVisitor.LocalScopeOnly
+                        || assignmentVisitor.LastConstraint is not null
+                        || ((assignmentVisitor.LastAssignment is not null || assignmentVisitor.LastAssignmentType is not null)
+                        && (currentAst.Parent is not ScriptBlockExpressionAst scriptBlock || !scriptBlock.IsDotsourced())))
+                    {
+                        // We only care about the parent scopes if no assignment has been made in the current scope
+                        // or if it's a dot sourced scriptblock where an earlier defined type constraint could influence the final type
+                        break;
+                    }
+
+                    assignmentVisitor.ScopeIsLocal = false;
+                    assignmentVisitor.StopSearchOffset = currentAst.Extent.StartOffset;
                 }
-            }
 
-            var foreachAst = targetAsts.OfType<ForEachStatementAst>().FirstOrDefault();
-            if (foreachAst != null)
-            {
-                inferredTypes.AddRange(
-                    GetInferredEnumeratedTypes(InferTypes(foreachAst.Condition)));
-                return;
+                currentAst = currentAst.Parent;
             }
 
-            var commandCompletionAst = targetAsts.OfType<CommandAst>().FirstOrDefault();
-            if (commandCompletionAst != null)
+            // The visitor is done finding the last assignment, now we need to infer the type of that assignment.
+            if (assignmentVisitor.LastConstraint is not null)
             {
-                inferredTypes.AddRange(InferTypes(commandCompletionAst));
-                return;
+                inferredTypes.Add(new PSTypeName(assignmentVisitor.LastConstraint));
             }
-
-            int smallestDiff = int.MaxValue;
-            AssignmentStatementAst closestAssignment = null;
-            foreach (var assignAst in assignAsts)
+            else if (assignmentVisitor.LastAssignment is not null)
             {
-                var endOffset = assignAst.Extent.EndOffset;
-                if ((startOffset - endOffset) < smallestDiff)
+                if (assignmentVisitor.EnumerateAssignment)
+                {
+                    inferredTypes.AddRange(GetInferredEnumeratedTypes(InferTypes(assignmentVisitor.LastAssignment)));
+                }
+                else
                 {
-                    smallestDiff = startOffset - endOffset;
-                    closestAssignment = assignAst;
+                    if (assignmentVisitor.LastAssignment is ConvertExpressionAst convertExpression
+                        && convertExpression.IsRef())
+                    {
+                        if (convertExpression.Parent is InvokeMemberExpressionAst memberInvoke)
+                        {
+                            inferredTypes.AddRange(InferTypeFromRef(memberInvoke, convertExpression));
+                        }
+                    }
+                    else if (assignmentVisitor.RedirectionAssignment && assignmentVisitor.LastAssignment is CommandAst cmdAst)
+                    {
+                        InferTypesFrom(cmdAst, inferredTypes, forRedirection: true);
+                    }
+                    else
+                    {
+                        inferredTypes.AddRange(InferTypes(assignmentVisitor.LastAssignment));
+                    }
                 }
             }
-
-            if (closestAssignment != null)
+            else if (assignmentVisitor.LastAssignmentType is not null)
             {
-                inferredTypes.AddRange(InferTypes(closestAssignment.Right));
+                inferredTypes.Add(assignmentVisitor.LastAssignmentType);
             }
 
             if (_context.TryGetRepresentativeTypeNameFromExpressionSafeEval(variableExpressionAst, out var evalTypeName))
@@ -2193,6 +2708,16 @@ private IEnumerable<PSTypeName> InferTypeFrom(IndexExpressionAst indexExpression
             bool foundAny = false;
             foreach (var psType in targetTypes)
             {
+                if (psType is PSSyntheticTypeName syntheticType)
+                {
+                    foreach (var member in syntheticType.Members)
+                    {
+                        yield return member.PSTypeName;
+                    }
+
+                    continue;
+                }
+
                 var type = psType.Type;
                 if (type != null)
                 {
@@ -2202,6 +2727,17 @@ private IEnumerable<PSTypeName> InferTypeFrom(IndexExpressionAst indexExpression
 
                         continue;
                     }
+                    
+                    if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IList<>))
+                    {
+                        var valueType = type.GetGenericArguments()[0];
+                        if (!valueType.ContainsGenericParameters)
+                        {
+                            foundAny = true;
+                            yield return new PSTypeName(valueType);
+                        }
+                        continue;
+                    }
 
                     foreach (var iface in type.GetInterfaces())
                     {
@@ -2257,7 +2793,7 @@ private IEnumerable<PSTypeName> InferTypeFrom(IndexExpressionAst indexExpression
         /// The potentially enumerable types to infer enumerated type from.
         /// </param>
         /// <returns>The enumerated item types.</returns>
-        private static IEnumerable<PSTypeName> GetInferredEnumeratedTypes(IEnumerable<PSTypeName> enumerableTypes)
+        internal static IEnumerable<PSTypeName> GetInferredEnumeratedTypes(IEnumerable<PSTypeName> enumerableTypes)
         {
             foreach (PSTypeName maybeEnumerableType in enumerableTypes)
             {
@@ -2332,7 +2868,7 @@ object ICustomAstVisitor2.VisitPipelineChain(PipelineChainAst pipelineChainAst)
             var types = new List<PSTypeName>();
             types.AddRange(InferTypes(pipelineChainAst.LhsPipelineChain));
             types.AddRange(InferTypes(pipelineChainAst.RhsPipeline));
-            return GetArrayType(types);
+            return types.Distinct();
         }
 
         private static CommandBaseAst GetPreviousPipelineCommand(CommandAst commandAst)
@@ -2341,93 +2877,459 @@ private static CommandBaseAst GetPreviousPipelineCommand(CommandAst commandAst)
             var i = pipe.PipelineElements.IndexOf(commandAst);
             return i != 0 ? pipe.PipelineElements[i - 1] : null;
         }
-    }
 
-    internal static class TypeInferenceExtension
-    {
-        public static bool EqualsOrdinalIgnoreCase(this string s, string t)
-        {
-            return string.Equals(s, t, StringComparison.OrdinalIgnoreCase);
-        }
+        private sealed class VariableAssignmentVisitor : AstVisitor2
+        {
+            /// <summary>
+            /// If set, we only look for local/private assignments in the scope of the variable we are inferring.
+            /// </summary>
+            internal bool LocalScopeOnly;
+            
+            /// <summary>
+            /// The current scope is local to the variable that is being inferred.
+            /// </summary>
+            internal bool ScopeIsLocal;
+            
+            /// <summary>
+            /// The variable that we are trying to determine the type of.
+            /// </summary>
+            internal VariableExpressionAst VariableTarget;
+
+            /// <summary>
+            /// The last type constraint applied to the variable. This takes priority when determining the type of the variable.
+            /// </summary>
+            internal ITypeName LastConstraint;
+            
+            /// <summary>
+            /// The last ast that assigned a value to the variable. This determines the value of the variable unless a type constraint has been applied.
+            /// </summary>
+            internal Ast LastAssignment;
+            
+            /// <summary>
+            /// The inferred type from the most recent assignment. This is only used for stream redirections to variables, or the special OutVariable common parameters.
+            /// </summary>
+            internal PSTypeName LastAssignmentType;
+            
+            /// <summary>
+            /// Whether or not the types from the last assignment should be enumerated.
+            /// For assignments made by the PipelineVariable parameter or the foreach statement.
+            /// </summary>
+            internal bool EnumerateAssignment;
+            
+            /// <summary>
+            /// Whether or not the last assignment was via command redirection.
+            /// </summary>
+            internal bool RedirectionAssignment;
+
+            /// <summary>
+            /// The Ast of the scope we are currently analyzing.
+            /// </summary>
+            internal Ast ScopeDefinitionAst;
+            internal int StopSearchOffset;
+            private int LastAssignmentOffset = -1;
+
+            private void SetLastAssignment(Ast ast, bool enumerate = false, bool redirectionAssignment = false)
+            {
+                if (LastAssignmentOffset < ast.Extent.StartOffset && !VariableTarget.Extent.IsWithin(ast.Extent))
+                {
+                    // If the variable we are inferring the value of is inside this assignment then the assignment is invalid
+                    // For example: $x = Get-Random; $x = $x.Where{$_.<Tab>} here the value should be inferred based on Get-Random and not $x = $x...
+                    ClearAssignmentData();
+                    LastAssignment = ast;
+                    EnumerateAssignment = enumerate;
+                    RedirectionAssignment = redirectionAssignment;
+                    LastAssignmentOffset = ast.Extent.StartOffset;
+                }
+            }
+
+            private void SetLastAssignmentType(PSTypeName typeName, IScriptExtent assignmentExtent)
+            {
+                if (LastAssignmentOffset < assignmentExtent.StartOffset && !VariableTarget.Extent.IsWithin(assignmentExtent))
+                {
+                    // If the variable we are inferring the value of is inside this assignment then the assignment is invalid
+                    // For example: $x = 1..10; Get-Random 2>variable:x -InputObject ($x.<Tab>) here the variable should be inferred based on the initial 1..10 assignment
+                    // and not the error redirected variable.
+                    ClearAssignmentData();
+                    LastAssignmentType = typeName;
+                    LastAssignmentOffset = assignmentExtent.StartOffset;
+                }
+            }
+
+            private void ClearAssignmentData()
+            {
+                LastAssignment = null;
+                LastAssignmentType = null;
+                EnumerateAssignment = false;
+                RedirectionAssignment = false;
+            }
+
+            private bool AssignsToTargetVar(VariableExpressionAst foundVar)
+            {
+                if (!foundVar.VariablePath.UnqualifiedPath.EqualsOrdinalIgnoreCase(VariableTarget.VariablePath.UnqualifiedPath))
+                {
+                    return false;
+                }
 
-        public static IEnumerable<MethodInfo> GetGetterProperty(this Type type, string propertyName)
-        {
-            var res = new List<MethodInfo>();
-            foreach (var m in type.GetMethods(BindingFlags.Public | BindingFlags.Instance))
+                int scopeIndex = foundVar.VariablePath.UserPath.IndexOf(':');
+                string scopeName = scopeIndex == -1 ? string.Empty : foundVar.VariablePath.UserPath.Remove(scopeIndex);
+                return AssignsToTargetScope(scopeName);
+            }
+
+            private bool AssignsToTargetVar(string userPath)
             {
-                var name = m.Name;
-                if (name.Length == propertyName.Length + 4
-                    && name.StartsWith("get_")
-                    && propertyName.IndexOf(name, 4, StringComparison.Ordinal) == 4)
+                if (string.IsNullOrEmpty(userPath))
                 {
-                    res.Add(m);
+                    return false;
                 }
+
+                string scopeName;
+                string varName;
+                int scopeIndex = userPath.IndexOf(':');
+                if (scopeIndex == -1)
+                {
+                    scopeName = string.Empty;
+                    varName = userPath;
+                }
+                else
+                {
+                    scopeName = userPath.Remove(scopeIndex);
+                    varName = userPath.Substring(scopeIndex + 1);
+                }
+
+                if (!varName.EqualsOrdinalIgnoreCase(VariableTarget.VariablePath.UnqualifiedPath))
+                {
+                    return false;
+                }
+
+                return AssignsToTargetScope(scopeName);
             }
 
-            return res;
-        }
+            private bool AssignsToTargetScope(string scopeName)
+                => LocalScopeOnly
+                    ? string.IsNullOrEmpty(scopeName) || scopeName.EqualsOrdinalIgnoreCase("Local") || scopeName.EqualsOrdinalIgnoreCase("Private")
+                    : ScopeIsLocal || !(scopeName.EqualsOrdinalIgnoreCase("Local") || scopeName.EqualsOrdinalIgnoreCase("Private"));
 
-        public static bool AstAssignsToSameVariable(this VariableExpressionAst variableAst, Ast ast)
-        {
-            var parameterAst = ast as ParameterAst;
-            var variableAstVariablePath = variableAst.VariablePath;
-            if (parameterAst != null)
+            public override AstVisitAction DefaultVisit(Ast ast)
             {
-                return variableAstVariablePath.IsUnscopedVariable &&
-                       parameterAst.Name.VariablePath.UnqualifiedPath.Equals(variableAstVariablePath.UnqualifiedPath, StringComparison.OrdinalIgnoreCase);
+                if (ast.Extent.StartOffset >= StopSearchOffset)
+                {
+                    // When visiting do while/until statements, the condition will be visited before the statement block
+                    // The condition itself may not be interesting if it's after the cursor, but the statement block could be
+                    // Example:
+                    // do
+                    // {
+                    //     $Var = gci
+                    //     $Var.<Tab>
+                    // }
+                    // until($false)
+                    return ast is PipelineBaseAst && ast.Parent is DoUntilStatementAst or DoWhileStatementAst
+                        ? AstVisitAction.SkipChildren
+                        : AstVisitAction.StopVisit;
+                }
+
+                return AstVisitAction.Continue;
             }
 
-            if (ast is ForEachStatementAst foreachAst)
+            public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst)
             {
-                return variableAstVariablePath.IsUnscopedVariable &&
-                       foreachAst.Variable.VariablePath.UnqualifiedPath.Equals(variableAstVariablePath.UnqualifiedPath, StringComparison.OrdinalIgnoreCase);
+                if (assignmentStatementAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return assignmentStatementAst.Parent is DoUntilStatementAst or DoWhileStatementAst
+                        ? AstVisitAction.SkipChildren
+                        : AstVisitAction.StopVisit;
+                }
+
+                if (assignmentStatementAst.Left is AttributedExpressionAst attributedExpression)
+                {
+                    var firstConvertExpression = attributedExpression as ConvertExpressionAst;
+                    ExpressionAst child = attributedExpression.Child;
+                    while (child is AttributedExpressionAst attributeChild)
+                    {
+                        if (firstConvertExpression is null && attributeChild is ConvertExpressionAst convertExpression)
+                        {
+                            // Multiple type constraint can be set on a variable like this: [int] [string] $Var1 = 1
+                            // But it's the left most type constraint that determines the final type.
+                            firstConvertExpression = convertExpression;
+                        }
+
+                        child = attributeChild.Child;
+                    }
+
+                    if (child is VariableExpressionAst variableExpression && AssignsToTargetVar(variableExpression))
+                    {
+                        if (firstConvertExpression is not null)
+                        {
+                            LastConstraint = firstConvertExpression.Type.TypeName;
+                        }
+                        else
+                        {
+                            SetLastAssignment(assignmentStatementAst.Right);
+                        }
+                    }
+                }
+                else if (assignmentStatementAst.Left is VariableExpressionAst variableExpression && AssignsToTargetVar(variableExpression))
+                {
+                    SetLastAssignment(assignmentStatementAst.Right);
+                }
+
+                return AstVisitAction.Continue;
             }
 
-            if (ast is CommandAst commandAst)
+            public override AstVisitAction VisitCommand(CommandAst commandAst)
             {
-                string[] variableParameters = { "PV", "PipelineVariable", "OV", "OutVariable" };
-                StaticBindingResult bindingResult = StaticParameterBinder.BindCommand(commandAst, false, variableParameters);
+                if (commandAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
 
-                if (bindingResult != null)
+                string commandName = commandAst.GetCommandName();
+                if (commandName is not null && CompletionCompleters.s_varModificationCommands.Contains(commandName))
                 {
-                    foreach (string commandVariableParameter in variableParameters)
+                    StaticBindingResult bindingResult = StaticParameterBinder.BindCommand(commandAst, resolve: false, CompletionCompleters.s_varModificationParameters);
+                    if (bindingResult is not null
+                        && bindingResult.BoundParameters.TryGetValue("Name", out ParameterBindingResult variableName)
+                        && variableName.ConstantValue is string nameValue
+                        && AssignsToTargetVar(nameValue)
+                        && bindingResult.BoundParameters.TryGetValue("Value", out ParameterBindingResult variableValue))
                     {
-                        if (bindingResult.BoundParameters.TryGetValue(commandVariableParameter, out ParameterBindingResult parameterBindingResult))
+                        SetLastAssignment(variableValue.Value);
+                        return AstVisitAction.Continue;
+                    }
+                }
+
+                StaticBindingResult bindResult = StaticParameterBinder.BindCommand(commandAst, resolve: false);
+                if (bindResult is not null)
+                {
+                    foreach (string parameterName in CompletionCompleters.s_outVarParameters)
+                    {
+                        if (bindResult.BoundParameters.TryGetValue(parameterName, out ParameterBindingResult outVarBind)
+                            && outVarBind.ConstantValue is string varName
+                            && AssignsToTargetVar(varName))
                         {
-                            if (string.Equals(variableAstVariablePath.UnqualifiedPath, (string)parameterBindingResult.ConstantValue, StringComparison.OrdinalIgnoreCase))
+                            // The *Variable parameters actually always results in an ArrayList
+                            // But to make type inference of individual elements better, we say it's a generic list.
+                            switch (parameterName)
                             {
-                                return true;
+                                case "ErrorVariable":
+                                case "ev":
+                                    SetLastAssignmentType(new PSTypeName(typeof(List<ErrorRecord>)), commandAst.Extent);
+                                    break;
+
+                                case "WarningVariable":
+                                case "wv":
+                                    SetLastAssignmentType(new PSTypeName(typeof(List<WarningRecord>)), commandAst.Extent);
+                                    break;
+
+                                case "InformationVariable":
+                                case "iv":
+                                    SetLastAssignmentType(new PSTypeName(typeof(List<InformationalRecord>)), commandAst.Extent);
+                                    break;
+
+                                case "OutVariable":
+                                case "ov":
+                                    SetLastAssignment(commandAst);
+                                    break;
+
+                                default:
+                                    break;
+                            }
+
+                            return AstVisitAction.Continue;
+                        }
+                    }
+
+                    if (commandAst.Parent is PipelineAst pipeline && pipeline.Extent.EndOffset > VariableTarget.Extent.StartOffset)
+                    {
+                        foreach (string parameterName in CompletionCompleters.s_pipelineVariableParameters)
+                        {
+                            if (bindResult.BoundParameters.TryGetValue(parameterName, out ParameterBindingResult pipeVarBind)
+                                && pipeVarBind.ConstantValue is string varName
+                                && AssignsToTargetVar(varName))
+                            {
+                                SetLastAssignment(commandAst, enumerate: true);
+                                return AstVisitAction.Continue;
                             }
                         }
                     }
                 }
 
-                return false;
+                foreach (RedirectionAst redirection in commandAst.Redirections)
+                {
+                    if (redirection is FileRedirectionAst fileRedirection
+                        && fileRedirection.Location is StringConstantExpressionAst redirectTarget
+                        && redirectTarget.Value.StartsWith("variable:", StringComparison.OrdinalIgnoreCase)
+                        && redirectTarget.Value.Length > "variable:".Length)
+                    {
+                        string varName = redirectTarget.Value.Substring("variable:".Length);
+                        if (!AssignsToTargetVar(varName))
+                        {
+                            continue;
+                        }
+
+                        switch (fileRedirection.FromStream)
+                        {
+                            case RedirectionStream.Error:
+                                SetLastAssignmentType(new PSTypeName(typeof(ErrorRecord)), commandAst.Extent);
+                                break;
+
+                            case RedirectionStream.Warning:
+                                SetLastAssignmentType(new PSTypeName(typeof(WarningRecord)), commandAst.Extent);
+                                break;
+
+                            case RedirectionStream.Verbose:
+                                SetLastAssignmentType(new PSTypeName(typeof(VerboseRecord)), commandAst.Extent);
+                                break;
+
+                            case RedirectionStream.Debug:
+                                SetLastAssignmentType(new PSTypeName(typeof(DebugRecord)), commandAst.Extent);
+                                break;
+
+                            case RedirectionStream.Information:
+                                SetLastAssignmentType(new PSTypeName(typeof(InformationRecord)), commandAst.Extent);
+                                break;
+
+                            default:
+                                SetLastAssignment(commandAst, redirectionAssignment: true);
+                                break;
+                        }
+                    }
+                }
+
+                return AstVisitAction.Continue;
             }
 
-            var assignmentAst = (AssignmentStatementAst)ast;
-            var lhs = assignmentAst.Left;
-            if (lhs is ConvertExpressionAst convertExpr)
+            public override AstVisitAction VisitParameter(ParameterAst parameterAst)
             {
-                lhs = convertExpr.Child;
+                if (parameterAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                if (AssignsToTargetVar(parameterAst.Name))
+                {
+                    foreach (AttributeBaseAst attribute in parameterAst.Attributes)
+                    {
+                        if (attribute is TypeConstraintAst typeConstraint)
+                        {
+                            LastConstraint = typeConstraint.TypeName;
+                            return AstVisitAction.Continue;
+                        }
+                    }
+                }
+
+                return AstVisitAction.Continue;
             }
 
-            if (lhs is not VariableExpressionAst varExpr)
+            public override AstVisitAction VisitForEachStatement(ForEachStatementAst forEachStatementAst)
             {
-                return false;
+                if (forEachStatementAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                if (AssignsToTargetVar(forEachStatementAst.Variable) && forEachStatementAst.Condition.Extent.EndOffset < VariableTarget.Extent.StartOffset)
+                {
+                    SetLastAssignment(forEachStatementAst.Condition, enumerate: true);
+                }
+
+                return AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitConvertExpression(ConvertExpressionAst convertExpressionAst)
+            {
+                if (convertExpressionAst.IsRef()
+                    && convertExpressionAst.Child is VariableExpressionAst varAst
+                    && AssignsToTargetVar(varAst))
+                {
+                    SetLastAssignment(convertExpressionAst);
+                }
+
+                return AstVisitAction.Continue;
+            }
+
+            public override AstVisitAction VisitAttribute(AttributeAst attributeAst)
+            {
+                // Attributes can't assign values to variables so they aren't interesting.
+                return AstVisitAction.SkipChildren;
+            }
+
+            public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
+            {
+                return scriptBlockExpressionAst.IsDotsourced()
+                    ? AstVisitAction.Continue
+                    : AstVisitAction.SkipChildren;
+            }
+
+            public override AstVisitAction VisitDataStatement(DataStatementAst dataStatementAst)
+            {
+                if (dataStatementAst.Extent.StartOffset >= StopSearchOffset)
+                {
+                    return AstVisitAction.StopVisit;
+                }
+
+                if (AssignsToTargetVar(dataStatementAst.Variable) && dataStatementAst.Extent.EndOffset < VariableTarget.Extent.StartOffset)
+                {
+                    SetLastAssignment(dataStatementAst.Body);
+                }
+
+                return AstVisitAction.SkipChildren;
             }
 
-            var candidateVarPath = varExpr.VariablePath;
-            if (candidateVarPath.UserPath.Equals(variableAstVariablePath.UserPath, StringComparison.OrdinalIgnoreCase))
+            public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst)
             {
-                return true;
+                return functionDefinitionAst == ScopeDefinitionAst
+                    ? AstVisitAction.Continue
+                    : AstVisitAction.SkipChildren;
             }
+        }
+    }
+
+    internal static class TypeInferenceExtension
+    {
+        public static bool EqualsOrdinalIgnoreCase(this string s, string t)
+        {
+            return string.Equals(s, t, StringComparison.OrdinalIgnoreCase);
+        }
 
-            // The following condition is making an assumption that at script scope, we didn't use $script:, but in the local scope, we did
-            // If we are searching anything other than script scope, this is wrong.
-            if (variableAstVariablePath.IsScript && variableAstVariablePath.UnqualifiedPath.Equals(candidateVarPath.UnqualifiedPath, StringComparison.OrdinalIgnoreCase))
+        public static IEnumerable<MethodInfo> GetGetterProperty(this Type type, string propertyName)
+        {
+            var res = new List<MethodInfo>();
+            foreach (var m in type.GetMethods(BindingFlags.Public | BindingFlags.Instance))
             {
-                return true;
+                var name = m.Name;
+                // Equals without string allocation
+                if (name.Length == propertyName.Length + 4
+                    && name.StartsWith("get_")
+                    && name.IndexOf(propertyName, 4, StringComparison.Ordinal) == 4)
+                {
+                    res.Add(m);
+                }
+            }
+
+            return res;
+        }
+
+        public static bool IsDotsourced(this ScriptBlockExpressionAst scriptBlockExpressionAst)
+        {
+            Ast parent = scriptBlockExpressionAst.Parent;
+
+            // This loop checks if the scriptblock is used as a dot sourced command
+            // or an argument for a command that uses the local scope eg: ForEach-Object -Process {$Var1 = "Hello"}, {Var2 = $true}
+            while (parent is not null)
+            {
+                if (parent is CommandAst cmdAst)
+                {
+                    string cmdName = cmdAst.GetCommandName();
+                    return CompletionCompleters.s_localScopeCommandNames.Contains(cmdName)
+                        || (cmdAst.CommandElements[0] is ScriptBlockExpressionAst && cmdAst.InvocationOperator == TokenKind.Dot);
+                }
+
+                if (parent is not CommandExpressionAst and not PipelineAst and not StatementBlockAst and not ArrayExpressionAst and not ArrayLiteralAst)
+                {
+                    break;
+                }
+
+                parent = parent.Parent;
             }
 
             return false;
diff --git a/src/System.Management.Automation/engine/parser/TypeResolver.cs b/src/System.Management.Automation/engine/parser/TypeResolver.cs
index 8843ff5cd31..73d44e94fbe 100644
--- a/src/System.Management.Automation/engine/parser/TypeResolver.cs
+++ b/src/System.Management.Automation/engine/parser/TypeResolver.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.Collections.Specialized;
 #if !UNIX
 using System.DirectoryServices;
 #endif
@@ -79,7 +80,10 @@ private static Type LookForTypeInAssemblies(TypeName typeName,
             foreach (Assembly assembly in assemblies)
             {
                 // Skip the assemblies that we already searched and found no matching type.
-                if (searchedAssemblies.Contains(assembly)) { continue; }
+                if (searchedAssemblies.Contains(assembly))
+                {
+                    continue;
+                }
 
                 try
                 {
@@ -370,10 +374,7 @@ internal static Type ResolveTypeNameWithContext(TypeName typeName, out Exception
                 return typeName._typeDefinitionAst.Type;
             }
 
-            if (context == null)
-            {
-                context = LocalPipeline.GetExecutionContextFromTLS();
-            }
+            context ??= LocalPipeline.GetExecutionContextFromTLS();
 
             // Use the explicitly passed-in assembly list when it's specified by the caller.
             // Otherwise, retrieve all currently loaded assemblies.
@@ -582,10 +583,7 @@ private TypeResolutionState(TypeResolutionState other, HashSet<string> typesDefi
 
         internal static TypeResolutionState GetDefaultUsingState(ExecutionContext context)
         {
-            if (context == null)
-            {
-                context = LocalPipeline.GetExecutionContextFromTLS();
-            }
+            context ??= LocalPipeline.GetExecutionContextFromTLS();
 
             if (context != null)
             {
@@ -673,7 +671,7 @@ public override int GetHashCode()
 
     internal static class TypeCache
     {
-        private class KeyComparer : IEqualityComparer<Tuple<ITypeName, TypeResolutionState>>
+        private sealed class KeyComparer : IEqualityComparer<Tuple<ITypeName, TypeResolutionState>>
         {
             public bool Equals(Tuple<ITypeName, TypeResolutionState> x,
                                Tuple<ITypeName, TypeResolutionState> y)
@@ -747,7 +745,7 @@ internal static class CoreTypes
                     { typeof(Guid),                                        new[] { "guid" } },
                     { typeof(Hashtable),                                   new[] { "hashtable" } },
                     { typeof(int),                                         new[] { "int", "int32" } },
-                    { typeof(Int16),                                       new[] { "short", "int16" } },
+                    { typeof(short),                                       new[] { "short", "int16" } },
                     { typeof(long),                                        new[] { "long", "int64" } },
                     { typeof(CimInstance),                                 new[] { "ciminstance" } },
                     { typeof(CimClass),                                    new[] { "cimclass" } },
@@ -755,10 +753,12 @@ internal static class CoreTypes
                     { typeof(CimConverter),                                new[] { "cimconverter" } },
                     { typeof(ModuleSpecification),                         null },
                     { typeof(IPEndPoint),                                  new[] { "IPEndpoint" } },
+                    { typeof(NoRunspaceAffinityAttribute),                 new[] { "NoRunspaceAffinity" } },
                     { typeof(NullString),                                  new[] { "NullString" } },
                     { typeof(OutputTypeAttribute),                         new[] { "OutputType" } },
                     { typeof(object[]),                                    null },
                     { typeof(ObjectSecurity),                              new[] { "ObjectSecurity" } },
+                    { typeof(OrderedDictionary),                           new[] { "ordered" } },
                     { typeof(ParameterAttribute),                          new[] { "Parameter" } },
                     { typeof(PhysicalAddress),                             new[] { "PhysicalAddress" } },
                     { typeof(PSCredential),                                new[] { "pscredential" } },
@@ -778,15 +778,16 @@ internal static class CoreTypes
                     { typeof(BigInteger),                                  new[] { "bigint" } },
                     { typeof(SecureString),                                new[] { "securestring" } },
                     { typeof(TimeSpan),                                    new[] { "timespan" } },
-                    { typeof(UInt16),                                      new[] { "ushort", "uint16" } },
-                    { typeof(UInt32),                                      new[] { "uint", "uint32" } },
-                    { typeof(UInt64),                                      new[] { "ulong", "uint64" } },
+                    { typeof(ushort),                                      new[] { "ushort", "uint16" } },
+                    { typeof(uint),                                        new[] { "uint", "uint32" } },
+                    { typeof(ulong),                                       new[] { "ulong", "uint64" } },
                     { typeof(Uri),                                         new[] { "uri" } },
                     { typeof(ValidateCountAttribute),                      new[] { "ValidateCount" } },
                     { typeof(ValidateDriveAttribute),                      new[] { "ValidateDrive" } },
                     { typeof(ValidateLengthAttribute),                     new[] { "ValidateLength" } },
                     { typeof(ValidateNotNullAttribute),                    new[] { "ValidateNotNull" } },
                     { typeof(ValidateNotNullOrEmptyAttribute),             new[] { "ValidateNotNullOrEmpty" } },
+                    { typeof(ValidateNotNullOrWhiteSpaceAttribute),        new[] { "ValidateNotNullOrWhiteSpace" } },
                     { typeof(ValidatePatternAttribute),                    new[] { "ValidatePattern" } },
                     { typeof(ValidateRangeAttribute),                      new[] { "ValidateRange" } },
                     { typeof(ValidateScriptAttribute),                     new[] { "ValidateScript" } },
@@ -933,10 +934,7 @@ public static void Add(string typeName, Type type)
         public static bool Remove(string typeName)
         {
             userTypeAccelerators.Remove(typeName);
-            if (s_allTypeAccelerators != null)
-            {
-                s_allTypeAccelerators.Remove(typeName);
-            }
+            s_allTypeAccelerators?.Remove(typeName);
 
             return true;
         }
diff --git a/src/System.Management.Automation/engine/parser/VariableAnalysis.cs b/src/System.Management.Automation/engine/parser/VariableAnalysis.cs
index 4cc8e98a2c0..8bf14d79aac 100644
--- a/src/System.Management.Automation/engine/parser/VariableAnalysis.cs
+++ b/src/System.Management.Automation/engine/parser/VariableAnalysis.cs
@@ -41,7 +41,7 @@ internal VariableAnalysisDetails()
         public List<Ast> AssociatedAsts { get; }
     }
 
-    internal class FindAllVariablesVisitor : AstVisitor
+    internal sealed class FindAllVariablesVisitor : AstVisitor
     {
         private static readonly HashSet<string> s_hashOfPessimizingCmdlets = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
 
@@ -110,7 +110,7 @@ internal static Dictionary<string, VariableAnalysisDetails> Visit(IParameterMeta
                 visitor.VisitParameters(ast.Parameters);
             }
 
-            localsAllocated = visitor._variables.Count(details => details.Value.LocalTupleIndex != VariableAnalysis.Unanalyzed);
+            localsAllocated = visitor._variables.Count(static details => details.Value.LocalTupleIndex != VariableAnalysis.Unanalyzed);
             return visitor._variables;
         }
 
@@ -185,8 +185,7 @@ private void VisitParameters(ReadOnlyCollection<ParameterAst> parameters)
                         // valuetype because the parameter has no value yet.  For example:
                         //     & { param([System.Reflection.MemberTypes]$m) ($null -eq $m) }
 
-                        object unused;
-                        if (!Compiler.TryGetDefaultParameterValue(analysisDetails.Type, out unused))
+                        if (!Compiler.TryGetDefaultParameterValue(analysisDetails.Type, out _))
                         {
                             analysisDetails.LocalTupleIndex = VariableAnalysis.ForceDynamic;
                         }
@@ -338,7 +337,7 @@ internal class VariableAnalysis : ICustomAstVisitor2
         // in these cases, we rely on the setter PSVariable.Value to handle those attributes.
         internal const int ForceDynamic = -2;
 
-        private class LoopGotoTargets
+        private sealed class LoopGotoTargets
         {
             internal LoopGotoTargets(string label, Block breakTarget, Block continueTarget)
             {
@@ -354,7 +353,7 @@ internal LoopGotoTargets(string label, Block breakTarget, Block continueTarget)
             internal Block ContinueTarget { get; }
         }
 
-        private class Block
+        private sealed class Block
         {
             internal readonly List<Ast> _asts = new List<Ast>();
             private readonly List<Block> _successors = new List<Block>();
@@ -439,7 +438,7 @@ private static void VisitDepthFirstOrder(Block block, List<Block> visitData)
             }
         }
 
-        private class AssignmentTarget : Ast
+        private sealed class AssignmentTarget : Ast
         {
             internal readonly ExpressionAst _targetAst;
             internal readonly string _variableName;
@@ -502,7 +501,7 @@ internal static void NoteAllScopeVariable(string variableName)
 
         internal static bool AnyVariablesCouldBeAllScope(Dictionary<string, int> variableNames)
         {
-            return variableNames.Any(keyValuePair => s_allScopeVariables.ContainsKey(keyValuePair.Key));
+            return variableNames.Any(static keyValuePair => s_allScopeVariables.ContainsKey(keyValuePair.Key));
         }
 
         private Dictionary<string, VariableAnalysisDetails> _variables;
@@ -581,7 +580,7 @@ internal static bool AnalyzeMemberFunction(FunctionMemberAst ast)
         {
             VariableAnalysis va = (new VariableAnalysis());
             va.AnalyzeImpl(ast, false, false);
-            return va._exitBlock._predecessors.All(b => b._returns || b._throws || b._unreachable);
+            return va._exitBlock._predecessors.All(static b => b._returns || b._throws || b._unreachable);
         }
 
         private Tuple<Type, Dictionary<string, int>> AnalyzeImpl(IParameterMetadataProvider ast, bool disableOptimizations, bool scriptCmdlet)
@@ -945,25 +944,11 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
         {
             _currentBlock = _entryBlock;
 
-            if (scriptBlockAst.DynamicParamBlock != null)
-            {
-                scriptBlockAst.DynamicParamBlock.Accept(this);
-            }
-
-            if (scriptBlockAst.BeginBlock != null)
-            {
-                scriptBlockAst.BeginBlock.Accept(this);
-            }
-
-            if (scriptBlockAst.ProcessBlock != null)
-            {
-                scriptBlockAst.ProcessBlock.Accept(this);
-            }
-
-            if (scriptBlockAst.EndBlock != null)
-            {
-                scriptBlockAst.EndBlock.Accept(this);
-            }
+            scriptBlockAst.DynamicParamBlock?.Accept(this);
+            scriptBlockAst.BeginBlock?.Accept(this);
+            scriptBlockAst.ProcessBlock?.Accept(this);
+            scriptBlockAst.EndBlock?.Accept(this);
+            scriptBlockAst.CleanBlock?.Accept(this);
 
             _currentBlock.FlowsTo(_exitBlock);
 
@@ -1317,10 +1302,7 @@ public object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst)
 
         public object VisitForStatement(ForStatementAst forStatementAst)
         {
-            if (forStatementAst.Initializer != null)
-            {
-                forStatementAst.Initializer.Accept(this);
-            }
+            forStatementAst.Initializer?.Accept(this);
 
             var generateCondition = forStatementAst.Condition != null
                 ? () => forStatementAst.Condition.Accept(this)
@@ -1456,22 +1438,19 @@ where t.Label.Equals(labelStrAst.Value, StringComparison.OrdinalIgnoreCase)
 
         public object VisitBreakStatement(BreakStatementAst breakStatementAst)
         {
-            BreakOrContinue(breakStatementAst.Label, t => t.BreakTarget);
+            BreakOrContinue(breakStatementAst.Label, static t => t.BreakTarget);
             return null;
         }
 
         public object VisitContinueStatement(ContinueStatementAst continueStatementAst)
         {
-            BreakOrContinue(continueStatementAst.Label, t => t.ContinueTarget);
+            BreakOrContinue(continueStatementAst.Label, static t => t.ContinueTarget);
             return null;
         }
 
         private Block ControlFlowStatement(PipelineBaseAst pipelineAst)
         {
-            if (pipelineAst != null)
-            {
-                pipelineAst.Accept(this);
-            }
+            pipelineAst?.Accept(this);
 
             _currentBlock.FlowsTo(_exitBlock);
             var lastBlockInStatement = _currentBlock;
@@ -1642,11 +1621,7 @@ public object VisitCommandExpression(CommandExpressionAst commandExpressionAst)
 
         public object VisitCommandParameter(CommandParameterAst commandParameterAst)
         {
-            if (commandParameterAst.Argument != null)
-            {
-                commandParameterAst.Argument.Accept(this);
-            }
-
+            commandParameterAst.Argument?.Accept(this);
             return null;
         }
 
diff --git a/src/System.Management.Automation/engine/parser/ast.cs b/src/System.Management.Automation/engine/parser/ast.cs
index 56693513b75..ba5c48a2752 100644
--- a/src/System.Management.Automation/engine/parser/ast.cs
+++ b/src/System.Management.Automation/engine/parser/ast.cs
@@ -36,8 +36,6 @@ internal interface ISupportsAssignment
         IAssignableValue GetAssignableValue();
     }
 
-#nullable restore
-
     internal interface IAssignableValue
     {
         /// <summary>
@@ -45,7 +43,7 @@ internal interface IAssignableValue
         /// It returns the expressions that holds the value of the ast.  It may append the exprs or temps lists if the return
         /// value relies on temps and other expressions.
         /// </summary>
-        Expression GetValue(Compiler compiler, List<Expression> exprs, List<ParameterExpression> temps);
+        Expression? GetValue(Compiler compiler, List<Expression> exprs, List<ParameterExpression> temps);
 
         /// <summary>
         /// SetValue is called to set the result of an assignment (=) or to write back the result of
@@ -53,6 +51,7 @@ internal interface IAssignableValue
         /// </summary>
         Expression SetValue(Compiler compiler, Expression rhs);
     }
+#nullable restore
 
     internal interface IParameterMetadataProvider
     {
@@ -321,20 +320,20 @@ internal bool IsInWorkflow()
 
             while (current != null && !stopScanning)
             {
-                ScriptBlockAst scriptBlock = current as ScriptBlockAst;
-                if (scriptBlock != null)
+                if (current is ScriptBlockAst scriptBlock)
                 {
                     // See if this uses the workflow keyword
-                    FunctionDefinitionAst functionDefinition = scriptBlock.Parent as FunctionDefinitionAst;
-                    if ((functionDefinition != null))
+                    if (scriptBlock.Parent is FunctionDefinitionAst functionDefinition)
                     {
                         stopScanning = true;
-                        if (functionDefinition.IsWorkflow) { return true; }
+                        if (functionDefinition.IsWorkflow)
+                        {
+                            return true;
+                        }
                     }
                 }
 
-                CommandAst commandAst = current as CommandAst;
-                if (commandAst != null &&
+                if (current is CommandAst commandAst &&
                     string.Equals(TokenKind.InlineScript.Text(), commandAst.GetCommandName(), StringComparison.OrdinalIgnoreCase) &&
                     this != commandAst)
                 {
@@ -389,8 +388,7 @@ internal static TypeDefinitionAst GetAncestorTypeDefinitionAst(Ast ast)
 
                 // Nested function isn't really a member of the type so stop looking
                 // Anonymous script blocks are though
-                var functionDefinitionAst = ast as FunctionDefinitionAst;
-                if (functionDefinitionAst != null && functionDefinitionAst.Parent is not FunctionMemberAst)
+                if (ast is FunctionDefinitionAst functionDefinitionAst && functionDefinitionAst.Parent is not FunctionMemberAst)
                     break;
                 ast = ast.Parent;
             }
@@ -522,7 +520,7 @@ internal ErrorStatementAst(IScriptExtent extent, Token kind, IEnumerable<KeyValu
         }
 
         /// <summary>
-        /// Indicate the kind of the ErrorStatement. e.g. Kind == Switch means that this error statment is generated
+        /// Indicate the kind of the ErrorStatement. e.g. Kind == Switch means that this error statement is generated
         /// when parsing a switch statement.
         /// </summary>
         public Token Kind { get; }
@@ -755,14 +753,6 @@ public class ScriptRequirements
         /// </summary>
         public ReadOnlyCollection<ModuleSpecification> RequiredModules { get; internal set; }
 
-        /// <summary>
-        /// The snapins this script requires, specified like:
-        ///     <code>#requires -PSSnapin Snapin</code>
-        ///     <code>#requires -PSSnapin Snapin -Version 2</code>
-        /// If no snapins are required, this property is an empty collection.
-        /// </summary>
-        public ReadOnlyCollection<PSSnapInSpecification> RequiresPSSnapIns { get; internal set; }
-
         /// <summary>
         /// The assemblies this script requires, specified like:
         ///     <code>#requires -Assembly path\to\foo.dll</code>
@@ -800,7 +790,7 @@ public class ScriptBlockAst : Ast, IParameterMetadataProvider
         /// Construct a ScriptBlockAst that uses explicitly named begin/process/end blocks.
         /// </summary>
         /// <param name="extent">The extent of the script block.</param>
-        /// <param name="usingStatements">The list of using statments, may be null.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
         /// <param name="attributes">The set of attributes for the script block.</param>
         /// <param name="paramBlock">The ast for the param block, may be null.</param>
         /// <param name="beginBlock">The ast for the begin block, may be null.</param>
@@ -819,6 +809,46 @@ public ScriptBlockAst(IScriptExtent extent,
                               NamedBlockAst processBlock,
                               NamedBlockAst endBlock,
                               NamedBlockAst dynamicParamBlock)
+            : this(
+                extent,
+                usingStatements,
+                attributes,
+                paramBlock,
+                beginBlock,
+                processBlock,
+                endBlock,
+                cleanBlock: null,
+                dynamicParamBlock)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ScriptBlockAst"/> class.
+        /// This construction uses explicitly named begin/process/end/clean blocks.
+        /// </summary>
+        /// <param name="extent">The extent of the script block.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
+        /// <param name="attributes">The set of attributes for the script block.</param>
+        /// <param name="paramBlock">The ast for the param block, may be null.</param>
+        /// <param name="beginBlock">The ast for the begin block, may be null.</param>
+        /// <param name="processBlock">The ast for the process block, may be null.</param>
+        /// <param name="endBlock">The ast for the end block, may be null.</param>
+        /// <param name="cleanBlock">The ast for the clean block, may be null.</param>
+        /// <param name="dynamicParamBlock">The ast for the dynamicparam block, may be null.</param>
+        /// <exception cref="PSArgumentNullException">
+        /// If <paramref name="extent"/> is null.
+        /// </exception>
+        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
+        public ScriptBlockAst(
+            IScriptExtent extent,
+            IEnumerable<UsingStatementAst> usingStatements,
+            IEnumerable<AttributeAst> attributes,
+            ParamBlockAst paramBlock,
+            NamedBlockAst beginBlock,
+            NamedBlockAst processBlock,
+            NamedBlockAst endBlock,
+            NamedBlockAst cleanBlock,
+            NamedBlockAst dynamicParamBlock)
             : base(extent)
         {
             SetUsingStatements(usingStatements);
@@ -857,6 +887,12 @@ public ScriptBlockAst(IScriptExtent extent,
                 SetParent(endBlock);
             }
 
+            if (cleanBlock != null)
+            {
+                this.CleanBlock = cleanBlock;
+                SetParent(cleanBlock);
+            }
+
             if (dynamicParamBlock != null)
             {
                 this.DynamicParamBlock = dynamicParamBlock;
@@ -868,7 +904,7 @@ public ScriptBlockAst(IScriptExtent extent,
         /// Construct a ScriptBlockAst that uses explicitly named begin/process/end blocks.
         /// </summary>
         /// <param name="extent">The extent of the script block.</param>
-        /// <param name="usingStatements">The list of using statments, may be null.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
         /// <param name="paramBlock">The ast for the param block, may be null.</param>
         /// <param name="beginBlock">The ast for the begin block, may be null.</param>
         /// <param name="processBlock">The ast for the process block, may be null.</param>
@@ -889,6 +925,35 @@ public ScriptBlockAst(IScriptExtent extent,
         {
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ScriptBlockAst"/> class.
+        /// This construction uses explicitly named begin/process/end/clean blocks.
+        /// </summary>
+        /// <param name="extent">The extent of the script block.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
+        /// <param name="paramBlock">The ast for the param block, may be null.</param>
+        /// <param name="beginBlock">The ast for the begin block, may be null.</param>
+        /// <param name="processBlock">The ast for the process block, may be null.</param>
+        /// <param name="endBlock">The ast for the end block, may be null.</param>
+        /// <param name="cleanBlock">The ast for the clean block, may be null.</param>
+        /// <param name="dynamicParamBlock">The ast for the dynamicparam block, may be null.</param>
+        /// <exception cref="PSArgumentNullException">
+        /// If <paramref name="extent"/> is null.
+        /// </exception>
+        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
+        public ScriptBlockAst(
+            IScriptExtent extent,
+            IEnumerable<UsingStatementAst> usingStatements,
+            ParamBlockAst paramBlock,
+            NamedBlockAst beginBlock,
+            NamedBlockAst processBlock,
+            NamedBlockAst endBlock,
+            NamedBlockAst cleanBlock,
+            NamedBlockAst dynamicParamBlock)
+            : this(extent, usingStatements, null, paramBlock, beginBlock, processBlock, endBlock, cleanBlock, dynamicParamBlock)
+        {
+        }
+
         /// <summary>
         /// Construct a ScriptBlockAst that uses explicitly named begin/process/end blocks.
         /// </summary>
@@ -912,11 +977,38 @@ public ScriptBlockAst(IScriptExtent extent,
         {
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ScriptBlockAst"/> class.
+        /// This construction uses explicitly named begin/process/end/clean blocks.
+        /// </summary>
+        /// <param name="extent">The extent of the script block.</param>
+        /// <param name="paramBlock">The ast for the param block, may be null.</param>
+        /// <param name="beginBlock">The ast for the begin block, may be null.</param>
+        /// <param name="processBlock">The ast for the process block, may be null.</param>
+        /// <param name="endBlock">The ast for the end block, may be null.</param>
+        /// <param name="cleanBlock">The ast for the clean block, may be null.</param>
+        /// <param name="dynamicParamBlock">The ast for the dynamicparam block, may be null.</param>
+        /// <exception cref="PSArgumentNullException">
+        /// If <paramref name="extent"/> is null.
+        /// </exception>
+        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
+        public ScriptBlockAst(
+            IScriptExtent extent,
+            ParamBlockAst paramBlock,
+            NamedBlockAst beginBlock,
+            NamedBlockAst processBlock,
+            NamedBlockAst endBlock,
+            NamedBlockAst cleanBlock,
+            NamedBlockAst dynamicParamBlock)
+            : this(extent, null, paramBlock, beginBlock, processBlock, endBlock, cleanBlock, dynamicParamBlock)
+        {
+        }
+
         /// <summary>
         /// Construct a ScriptBlockAst that does not use explicitly named blocks.
         /// </summary>
         /// <param name="extent">The extent of the script block.</param>
-        /// <param name="usingStatements">The list of using statments, may be null.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
         /// <param name="paramBlock">The ast for the param block, may be null.</param>
         /// <param name="statements">
         /// The statements that go in the end block if <paramref name="isFilter"/> is false, or the
@@ -975,7 +1067,7 @@ public ScriptBlockAst(IScriptExtent extent, ParamBlockAst paramBlock, StatementB
         /// Construct a ScriptBlockAst that does not use explicitly named blocks.
         /// </summary>
         /// <param name="extent">The extent of the script block.</param>
-        /// <param name="usingStatements">The list of using statments, may be null.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
         /// <param name="paramBlock">The ast for the param block, may be null.</param>
         /// <param name="statements">
         /// The statements that go in the end block if <paramref name="isFilter"/> is false, or the
@@ -1017,7 +1109,7 @@ public ScriptBlockAst(IScriptExtent extent, IEnumerable<AttributeAst> attributes
         /// Construct a ScriptBlockAst that does not use explicitly named blocks.
         /// </summary>
         /// <param name="extent">The extent of the script block.</param>
-        /// <param name="usingStatements">The list of using statments, may be null.</param>
+        /// <param name="usingStatements">The list of using statements, may be null.</param>
         /// <param name="attributes">The attributes for the script block.</param>
         /// <param name="paramBlock">The ast for the param block, may be null.</param>
         /// <param name="statements">
@@ -1116,6 +1208,11 @@ private void SetUsingStatements(IEnumerable<UsingStatementAst> usingStatements)
         /// </summary>
         public NamedBlockAst EndBlock { get; }
 
+        /// <summary>
+        /// Gets the ast representing the clean block for a script block, or null if no clean block was specified.
+        /// </summary>
+        public NamedBlockAst CleanBlock { get; }
+
         /// <summary>
         /// The ast representing the dynamicparam block for a script block, or null if no dynamicparam block was specified.
         /// </summary>
@@ -1195,17 +1292,25 @@ public override Ast Copy()
             var newBeginBlock = CopyElement(this.BeginBlock);
             var newProcessBlock = CopyElement(this.ProcessBlock);
             var newEndBlock = CopyElement(this.EndBlock);
+            var newCleanBlock = CopyElement(this.CleanBlock);
             var newDynamicParamBlock = CopyElement(this.DynamicParamBlock);
             var newAttributes = CopyElements(this.Attributes);
             var newUsingStatements = CopyElements(this.UsingStatements);
 
-            var scriptBlockAst = new ScriptBlockAst(this.Extent, newUsingStatements, newAttributes, newParamBlock, newBeginBlock, newProcessBlock,
-                                                    newEndBlock, newDynamicParamBlock)
+            return new ScriptBlockAst(
+                this.Extent,
+                newUsingStatements,
+                newAttributes,
+                newParamBlock,
+                newBeginBlock,
+                newProcessBlock,
+                newEndBlock,
+                newCleanBlock,
+                newDynamicParamBlock)
             {
                 IsConfiguration = this.IsConfiguration,
                 ScriptRequirements = this.ScriptRequirements
             };
-            return scriptBlockAst;
         }
 
         internal string ToStringForSerialization()
@@ -1249,7 +1354,7 @@ internal string ToStringForSerialization(Tuple<List<VariableExpressionAst>, stri
             string script = this.ToString();
             var newScript = new StringBuilder();
 
-            foreach (var ast in astElements.OrderBy(ast => ast.Extent.StartOffset))
+            foreach (var ast in astElements.OrderBy(static ast => ast.Extent.StartOffset))
             {
                 int astStartOffset = ast.Extent.StartOffset - indexOffset;
                 int astEndOffset = ast.Extent.EndOffset - indexOffset;
@@ -1259,10 +1364,10 @@ internal string ToStringForSerialization(Tuple<List<VariableExpressionAst>, stri
                 // We are done processing the section that we care about
                 if (astStartOffset >= endOffset) { break; }
 
-                var varAst = ast as VariableExpressionAst;
-                if (varAst != null)
+                if (ast is VariableExpressionAst varAst)
                 {
-                    string varName = varAst.VariablePath.UserPath;
+                    VariablePath varPath = varAst.VariablePath;
+                    string varName = varPath.IsDriveQualified ? $"{varPath.DriveName}_{varPath.UnqualifiedPath}" : $"{varPath.UnqualifiedPath}";
                     string varSign = varAst.Splatted ? "@" : "$";
                     string newVarName = varSign + UsingExpressionAst.UsingPrefix + varName;
 
@@ -1339,8 +1444,7 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor)
             if (action == AstVisitAction.SkipChildren)
                 return visitor.CheckForPostAction(this, AstVisitAction.Continue);
 
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 if (action == AstVisitAction.Continue)
                 {
@@ -1367,17 +1471,27 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor)
                 }
             }
 
-            if (action == AstVisitAction.Continue && ParamBlock != null)
-                action = ParamBlock.InternalVisit(visitor);
-            if (action == AstVisitAction.Continue && DynamicParamBlock != null)
-                action = DynamicParamBlock.InternalVisit(visitor);
-            if (action == AstVisitAction.Continue && BeginBlock != null)
-                action = BeginBlock.InternalVisit(visitor);
-            if (action == AstVisitAction.Continue && ProcessBlock != null)
-                action = ProcessBlock.InternalVisit(visitor);
-            if (action == AstVisitAction.Continue && EndBlock != null)
-                action = EndBlock.InternalVisit(visitor);
+            if (action == AstVisitAction.Continue)
+            {
+                _ = VisitAndShallContinue(ParamBlock) &&
+                    VisitAndShallContinue(DynamicParamBlock) &&
+                    VisitAndShallContinue(BeginBlock) &&
+                    VisitAndShallContinue(ProcessBlock) &&
+                    VisitAndShallContinue(EndBlock) &&
+                    VisitAndShallContinue(CleanBlock);
+            }
+
             return visitor.CheckForPostAction(this, action);
+
+            bool VisitAndShallContinue(Ast ast)
+            {
+                if (ast is not null)
+                {
+                    action = ast.InternalVisit(visitor);
+                }
+
+                return action == AstVisitAction.Continue;
+            }
         }
 
         #endregion Visitors
@@ -1514,9 +1628,7 @@ Tuple<string, string> IParameterMetadataProvider.GetWithInputHandlingForInvokeCo
         private string GetWithInputHandlingForInvokeCommandImpl(Tuple<List<VariableExpressionAst>, string> usingVariablesTuple)
         {
             // do not add "$input |" to complex pipelines
-            string unused1;
-            string unused2;
-            var pipelineAst = GetSimplePipeline(false, out unused1, out unused2);
+            var pipelineAst = GetSimplePipeline(false, out _, out _);
             if (pipelineAst == null)
             {
                 return (usingVariablesTuple == null)
@@ -1567,7 +1679,7 @@ bool IParameterMetadataProvider.UsesCmdletBinding()
 
             if (ParamBlock != null)
             {
-                usesCmdletBinding = this.ParamBlock.Attributes.Any(attribute => typeof(CmdletBindingAttribute) == attribute.TypeName.GetReflectionAttributeType());
+                usesCmdletBinding = this.ParamBlock.Attributes.Any(static attribute => typeof(CmdletBindingAttribute) == attribute.TypeName.GetReflectionAttributeType());
                 if (!usesCmdletBinding)
                 {
                     usesCmdletBinding = ParamBlockAst.UsesCmdletBinding(ParamBlock.Parameters);
@@ -1581,9 +1693,12 @@ bool IParameterMetadataProvider.UsesCmdletBinding()
 
         internal PipelineAst GetSimplePipeline(bool allowMultiplePipelines, out string errorId, out string errorMsg)
         {
-            if (BeginBlock != null || ProcessBlock != null || DynamicParamBlock != null)
+            if (BeginBlock != null
+                || ProcessBlock != null
+                || CleanBlock != null
+                || DynamicParamBlock != null)
             {
-                errorId = "CanConvertOneClauseOnly";
+                errorId = nameof(AutomationExceptions.CanConvertOneClauseOnly);
                 errorMsg = AutomationExceptions.CanConvertOneClauseOnly;
                 return null;
             }
@@ -1749,7 +1864,7 @@ internal static bool UsesCmdletBinding(IEnumerable<ParameterAst> parameters)
     public class NamedBlockAst : Ast
     {
         /// <summary>
-        /// Construct the ast for a begin, process, end, or dynamic param block.
+        /// Construct the ast for a begin, process, end, clean, or dynamic param block.
         /// </summary>
         /// <param name="extent">
         /// The extent of the block.  If <paramref name="unnamed"/> is false, the extent includes
@@ -1761,6 +1876,7 @@ public class NamedBlockAst : Ast
         /// <item><see cref="TokenKind.Begin"/></item>
         /// <item><see cref="TokenKind.Process"/></item>
         /// <item><see cref="TokenKind.End"/></item>
+        /// <item><see cref="TokenKind.Clean"/></item>
         /// <item><see cref="TokenKind.Dynamicparam"/></item>
         /// </list>
         /// </param>
@@ -1779,8 +1895,7 @@ public NamedBlockAst(IScriptExtent extent, TokenKind blockName, StatementBlockAs
         {
             // Validate the block name.  If the block is unnamed, it must be an End block (for a function)
             // or Process block (for a filter).
-            if (!blockName.HasTrait(TokenFlags.ScriptBlockBlockName)
-                || (unnamed && (blockName == TokenKind.Begin || blockName == TokenKind.Dynamicparam)))
+            if (HasInvalidBlockName(blockName, unnamed))
             {
                 throw PSTraceSource.NewArgumentException(nameof(blockName));
             }
@@ -1817,8 +1932,7 @@ public NamedBlockAst(IScriptExtent extent, TokenKind blockName, StatementBlockAs
 
             if (!unnamed)
             {
-                var statementsExtent = statementBlock.Extent as InternalScriptExtent;
-                if (statementsExtent != null)
+                if (statementBlock.Extent is InternalScriptExtent statementsExtent)
                 {
                     this.OpenCurlyExtent = new InternalScriptExtent(statementsExtent.PositionHelper, statementsExtent.StartOffset, statementsExtent.StartOffset + 1);
                     this.CloseCurlyExtent = new InternalScriptExtent(statementsExtent.PositionHelper, statementsExtent.EndOffset - 1, statementsExtent.EndOffset);
@@ -1838,6 +1952,7 @@ public NamedBlockAst(IScriptExtent extent, TokenKind blockName, StatementBlockAs
         /// <item><see cref="TokenKind.Begin"/></item>
         /// <item><see cref="TokenKind.Process"/></item>
         /// <item><see cref="TokenKind.End"/></item>
+        /// <item><see cref="TokenKind.Clean"/></item>
         /// <item><see cref="TokenKind.Dynamicparam"/></item>
         /// </list>
         /// </summary>
@@ -1877,6 +1992,14 @@ public override Ast Copy()
             return new NamedBlockAst(this.Extent, this.BlockKind, statementBlock, this.Unnamed);
         }
 
+        private static bool HasInvalidBlockName(TokenKind blockName, bool unnamed)
+        {
+            return !blockName.HasTrait(TokenFlags.ScriptBlockBlockName)
+                || (unnamed
+                    && blockName != TokenKind.Process
+                    && blockName != TokenKind.End);
+        }
+
         // Used by the debugger for command breakpoints
         internal IScriptExtent OpenCurlyExtent { get; }
 
@@ -2330,7 +2453,8 @@ internal string GetParamTextWithDollarUsingHandling(IEnumerator<VariableExpressi
                 // We are done processing the current ParameterAst
                 if (astStartOffset >= endOffset) { break; }
 
-                string varName = varAst.VariablePath.UserPath;
+                VariablePath varPath = varAst.VariablePath;
+                string varName = varPath.IsDriveQualified ? $"{varPath.DriveName}_{varPath.UnqualifiedPath}" : $"{varPath.UnqualifiedPath}";
                 string varSign = varAst.Splatted ? "@" : "$";
                 string newVarName = varSign + UsingExpressionAst.UsingPrefix + varName;
 
@@ -2684,8 +2808,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitTypeDefinition(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -2932,8 +3055,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitUsingStatement(this);
                 if (action != AstVisitAction.Continue)
@@ -3160,8 +3282,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitPropertyMember(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -3176,7 +3297,10 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor)
                     {
                         var attributeAst = Attributes[index];
                         action = attributeAst.InternalVisit(visitor);
-                        if (action != AstVisitAction.Continue) break;
+                        if (action != AstVisitAction.Continue)
+                        {
+                            break;
+                        }
                     }
                 }
 
@@ -3331,6 +3455,8 @@ public bool IsConstructor
 
         internal IScriptExtent NameExtent { get { return _functionDefinitionAst.NameExtent; } }
 
+        private string _toolTip;
+
         /// <summary>
         /// Copy a function member ast.
         /// </summary>
@@ -3345,28 +3471,56 @@ public override Ast Copy()
 
         internal override string GetTooltip()
         {
-            var sb = new StringBuilder();
-            if (IsStatic)
+            if (!string.IsNullOrEmpty(_toolTip))
             {
-                sb.Append("static ");
+                return _toolTip;
             }
 
-            sb.Append(IsReturnTypeVoid() ? "void" : ReturnType.TypeName.FullName);
-            sb.Append(' ');
-            sb.Append(Name);
-            sb.Append('(');
-            for (int i = 0; i < Parameters.Count; i++)
+            var sb = new StringBuilder();
+            var classMembers = ((TypeDefinitionAst)Parent).Members;
+            for (int i = 0; i < classMembers.Count; i++)
             {
-                if (i > 0)
+                var methodMember = classMembers[i] as FunctionMemberAst;
+                if (methodMember is null ||
+                    !Name.Equals(methodMember.Name) ||
+                    IsStatic != methodMember.IsStatic)
+                {
+                    continue;
+                }
+
+                if (sb.Length > 0)
                 {
-                    sb.Append(", ");
+                    sb.AppendLine();
                 }
 
-                sb.Append(Parameters[i].GetTooltip());
+                if (methodMember.IsStatic)
+                {
+                    sb.Append("static ");
+                }
+
+                if (!methodMember.IsConstructor)
+                {
+                    sb.Append(methodMember.IsReturnTypeVoid() ? "void" : methodMember.ReturnType.TypeName.FullName);
+                    sb.Append(' ');
+                }
+
+                sb.Append(methodMember.Name);
+                sb.Append('(');
+                for (int j = 0; j < methodMember.Parameters.Count; j++)
+                {
+                    if (j > 0)
+                    {
+                        sb.Append(", ");
+                    }
+
+                    sb.Append(methodMember.Parameters[j].GetTooltip());
+                }
+
+                sb.Append(')');
             }
 
-            sb.Append(')');
-            return sb.ToString();
+            _toolTip = sb.ToString();
+            return _toolTip;
         }
 
         #region Visitors
@@ -3380,8 +3534,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitFunctionMember(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -3392,7 +3545,10 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor)
                     {
                         var attributeAst = Attributes[index];
                         action = attributeAst.InternalVisit(visitor);
-                        if (action != AstVisitAction.Continue) break;
+                        if (action != AstVisitAction.Continue)
+                        {
+                            break;
+                        }
                     }
                 }
 
@@ -3718,10 +3874,7 @@ public CommentHelpInfo GetHelpContent()
         /// <returns></returns>
         public CommentHelpInfo GetHelpContent(Dictionary<Ast, Token[]> scriptBlockTokenCache)
         {
-            if (scriptBlockTokenCache == null)
-            {
-                throw new ArgumentNullException(nameof(scriptBlockTokenCache));
-            }
+            ArgumentNullException.ThrowIfNull(scriptBlockTokenCache);
 
             var commentTokens = HelpCommentsParser.GetHelpCommentTokens(this, scriptBlockTokenCache);
             if (commentTokens != null)
@@ -3754,7 +3907,7 @@ internal string GetParamTextFromParameterList(Tuple<List<VariableExpressionAst>,
                 Diagnostics.Assert(
                     usingVariablesTuple.Item1 != null && usingVariablesTuple.Item1.Count > 0 && !string.IsNullOrEmpty(usingVariablesTuple.Item2),
                     "Caller makes sure the value passed in is not null or empty.");
-                orderedUsingVars = usingVariablesTuple.Item1.OrderBy(varAst => varAst.Extent.StartOffset).GetEnumerator();
+                orderedUsingVars = usingVariablesTuple.Item1.OrderBy(static varAst => varAst.Extent.StartOffset).GetEnumerator();
                 additionalNewUsingParams = usingVariablesTuple.Item2;
             }
 
@@ -4041,7 +4194,7 @@ public DataStatementAst(IScriptExtent extent,
             {
                 this.CommandsAllowed = new ReadOnlyCollection<ExpressionAst>(commandsAllowed.ToArray());
                 SetParents(CommandsAllowed);
-                this.HasNonConstantAllowedCommand = CommandsAllowed.Any(ast => ast is not StringConstantExpressionAst);
+                this.HasNonConstantAllowedCommand = CommandsAllowed.Any(static ast => ast is not StringConstantExpressionAst);
             }
             else
             {
@@ -4425,7 +4578,7 @@ public class DoWhileStatementAst : LoopStatementAst
         /// <summary>
         /// Construct a do/while statement.
         /// </summary>
-        /// <param name="extent">The extent of the do/while statment from the label or do keyword to the closing curly brace.</param>
+        /// <param name="extent">The extent of the do/while statement from the label or do keyword to the closing curly brace.</param>
         /// <param name="label">The optionally null label.</param>
         /// <param name="condition">The condition tested on each iteration of the loop.</param>
         /// <param name="body">The body executed on each iteration of the loop.</param>
@@ -5411,15 +5564,9 @@ public PipelineChainAst(
             bool background = false)
             : base(extent)
         {
-            if (lhsChain == null)
-            {
-                throw new ArgumentNullException(nameof(lhsChain));
-            }
+            ArgumentNullException.ThrowIfNull(lhsChain);
 
-            if (rhsPipeline == null)
-            {
-                throw new ArgumentNullException(nameof(rhsPipeline));
-            }
+            ArgumentNullException.ThrowIfNull(rhsPipeline);
 
             if (chainOperator != TokenKind.AndAnd && chainOperator != TokenKind.OrOr)
             {
@@ -5891,8 +6038,8 @@ public CommandAst(IScriptExtent extent,
         /// <para>Returns the name of the command invoked by this ast.</para>
         /// <para>This command name may not be known statically, in which case null is returned.</para>
         /// <para>
-        /// For example, if the command name is in a variable: <example>&amp; $foo</example>, then the parser cannot know which command is executed.
-        /// Similarly, if the command is being invoked in a module: <example>&amp; (gmo SomeModule) Bar</example>, then the parser does not know the
+        /// For example, if the command name is in a variable: <code>&amp; $foo</code>, then the parser cannot know which command is executed.
+        /// Similarly, if the command is being invoked in a module: <code>&amp; (gmo SomeModule) Bar</code>, then the parser does not know the
         /// command name is Bar because the parser can't determine that the expression <code>(gmo SomeModule)</code> returns a module instead
         /// of a string.
         /// </para>
@@ -6258,19 +6405,13 @@ public AssignmentStatementAst(IScriptExtent extent, ExpressionAst left, TokenKin
 
             // If the assignment is just an expression and the expression is not backgrounded then
             // remove the pipeline wrapping the expression.
-            var pipelineAst = right as PipelineAst;
-            if (pipelineAst != null && !pipelineAst.Background)
+            if (right is PipelineAst pipelineAst
+                && !pipelineAst.Background
+                && pipelineAst.PipelineElements.Count == 1
+                && pipelineAst.PipelineElements[0] is CommandExpressionAst commandExpressionAst)
             {
-                if (pipelineAst.PipelineElements.Count == 1)
-                {
-                    var commandExpressionAst = pipelineAst.PipelineElements[0] as CommandExpressionAst;
-
-                    if (commandExpressionAst != null)
-                    {
-                        right = commandExpressionAst;
-                        right.ClearParent();
-                    }
-                }
+                right = commandExpressionAst;
+                right.ClearParent();
             }
 
             this.Operator = @operator;
@@ -6319,8 +6460,7 @@ public override Ast Copy()
         /// <returns>All of the expressions assigned by the assignment statement.</returns>
         public IEnumerable<ExpressionAst> GetAssignmentTargets()
         {
-            var arrayExpression = Left as ArrayLiteralAst;
-            if (arrayExpression != null)
+            if (Left is ArrayLiteralAst arrayExpression)
             {
                 foreach (var element in arrayExpression.Elements)
                 {
@@ -6444,7 +6584,7 @@ public override Ast Copy()
             {
                 LCurlyToken = this.LCurlyToken,
                 ConfigurationToken = this.ConfigurationToken,
-                CustomAttributes = this.CustomAttributes?.Select(e => (AttributeAst)e.Copy())
+                CustomAttributes = this.CustomAttributes?.Select(static e => (AttributeAst)e.Copy())
             };
         }
 
@@ -6459,8 +6599,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitConfigurationDefinition(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -6545,7 +6684,7 @@ internal PipelineAst GenerateSetItemPipelineAst()
             cea.Add(new CommandParameterAst(PositionUtilities.EmptyExtent, "ResourceModuleTuplesToImport", new ConstantExpressionAst(PositionUtilities.EmptyExtent, resourceModulePairsToImport), PositionUtilities.EmptyExtent));
 
             var scriptBlockBody = new ScriptBlockAst(Body.Extent,
-                CustomAttributes?.Select(att => (AttributeAst)att.Copy()).ToList(),
+                CustomAttributes?.Select(static att => (AttributeAst)att.Copy()).ToList(),
                 null,
                 new StatementBlockAst(Body.Extent, resourceBody, null),
                 false, false);
@@ -6578,9 +6717,9 @@ internal PipelineAst GenerateSetItemPipelineAst()
             //        )
             //
             var attribAsts =
-                ConfigurationBuildInParameterAttribAsts.Select(attribAst => (AttributeAst)attribAst.Copy()).ToList();
+                ConfigurationBuildInParameterAttribAsts.Select(static attribAst => (AttributeAst)attribAst.Copy()).ToList();
 
-            var paramAsts = ConfigurationBuildInParameters.Select(paramAst => (ParameterAst)paramAst.Copy()).ToList();
+            var paramAsts = ConfigurationBuildInParameters.Select(static paramAst => (ParameterAst)paramAst.Copy()).ToList();
 
             // the parameters defined in the configuration keyword will be combined with above parameters
             // it will be used to construct $ArgsToBody in the set-item created function boby using below statement
@@ -6591,7 +6730,7 @@ internal PipelineAst GenerateSetItemPipelineAst()
             //         $Outputpath = $psboundparameters[""Outputpath""]
             if (Body.ScriptBlock.ParamBlock != null)
             {
-                paramAsts.AddRange(Body.ScriptBlock.ParamBlock.Parameters.Select(parameterAst => (ParameterAst)parameterAst.Copy()));
+                paramAsts.AddRange(Body.ScriptBlock.ParamBlock.Parameters.Select(static parameterAst => (ParameterAst)parameterAst.Copy()));
             }
 
             var paramBlockAst = new ParamBlockAst(this.Extent, attribAsts, paramAsts);
@@ -6599,12 +6738,12 @@ internal PipelineAst GenerateSetItemPipelineAst()
             var cmdAst = new CommandAst(this.Extent, cea, TokenKind.Unknown, null);
 
             var pipeLineAst = new PipelineAst(this.Extent, cmdAst, background: false);
-            var funcStatements = ConfigurationExtraParameterStatements.Select(statement => (StatementAst)statement.Copy()).ToList();
+            var funcStatements = ConfigurationExtraParameterStatements.Select(static statement => (StatementAst)statement.Copy()).ToList();
             funcStatements.Add(pipeLineAst);
             var statmentBlockAst = new StatementBlockAst(this.Extent, funcStatements, null);
 
             var funcBody = new ScriptBlockAst(Body.Extent,
-                CustomAttributes?.Select(att => (AttributeAst)att.Copy()).ToList(),
+                CustomAttributes?.Select(static att => (AttributeAst)att.Copy()).ToList(),
                 paramBlockAst, statmentBlockAst, false, true);
             var funcBodyExp = new ScriptBlockExpressionAst(this.Extent, funcBody);
 
@@ -6928,8 +7067,7 @@ internal override object Accept(ICustomAstVisitor visitor)
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             var action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitDynamicKeywordStatement(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -7031,7 +7169,6 @@ internal PipelineAst GenerateCommandCallPipelineAst()
             }
 
             ExpressionAst expr = BodyExpression;
-            HashtableAst hashtable = expr as HashtableAst;
             if (Keyword.DirectCall)
             {
                 // If this keyword takes a name, then add it as the parameter -InstanceName
@@ -7050,7 +7187,7 @@ internal PipelineAst GenerateCommandCallPipelineAst()
                 // in the hash literal expression and map them to parameters.
                 // We've already checked to make sure that they're all valid names.
                 //
-                if (hashtable != null)
+                if (expr is HashtableAst hashtable)
                 {
                     bool isHashtableValid = true;
                     //
@@ -7126,7 +7263,7 @@ internal PipelineAst GenerateCommandCallPipelineAst()
                         FunctionName.Extent,
                         new TypeName(
                             FunctionName.Extent,
-                            typeof(System.Management.Automation.Language.DynamicKeyword).FullName)),
+                            typeof(DynamicKeyword).FullName)),
                     new StringConstantExpressionAst(
                         FunctionName.Extent,
                         "GetKeyword",
@@ -7234,10 +7371,7 @@ protected ExpressionAst(IScriptExtent extent)
         /// <returns></returns>
         internal virtual bool ShouldPreserveOutputInCaseOfException()
         {
-            var parenExpr = this as ParenExpressionAst;
-            var subExpr = this as SubExpressionAst;
-
-            if (parenExpr == null && subExpr == null)
+            if (this is not ParenExpressionAst and not SubExpressionAst)
             {
                 PSTraceSource.NewInvalidOperationException();
             }
@@ -7253,8 +7387,7 @@ internal virtual bool ShouldPreserveOutputInCaseOfException()
                 return false;
             }
 
-            var parenExpressionAst = pipelineAst.Parent as ParenExpressionAst;
-            if (parenExpressionAst != null)
+            if (pipelineAst.Parent is ParenExpressionAst parenExpressionAst)
             {
                 return parenExpressionAst.ShouldPreserveOutputInCaseOfException();
             }
@@ -7307,9 +7440,9 @@ public TernaryExpressionAst(IScriptExtent extent, ExpressionAst condition, Expre
         /// <summary>
         /// Copy the TernaryExpressionAst instance.
         /// </summary>
-        /// <return>
-        /// Retirns a copy of the ast.
-        /// </return>
+        /// <returns>
+        /// Returns a copy of the ast.
+        /// </returns>
         public override Ast Copy()
         {
             ExpressionAst newCondition = CopyElement(this.Condition);
@@ -7458,6 +7591,8 @@ public override Type StaticType
         }
 
         internal static readonly PSTypeName[] BoolTypeNameArray = new PSTypeName[] { new PSTypeName(typeof(bool)) };
+        internal static readonly PSTypeName[] StringTypeNameArray = new PSTypeName[] { new PSTypeName(typeof(string)) };
+        internal static readonly PSTypeName[] StringArrayTypeNameArray = new PSTypeName[] { new PSTypeName(typeof(string[])) };
 
         #region Visitors
 
@@ -7804,7 +7939,7 @@ public override Ast Copy()
 
         /// <summary>
         /// The static type produced after the cast is normally the type named by <see cref="Type"/>, but in some cases
-        /// it may not be, in which, <see cref="Object"/> is assumed.
+        /// it may not be, in which, <see cref="object"/> is assumed.
         /// </summary>
         public override Type StaticType
         {
@@ -7836,8 +7971,7 @@ internal override AstVisitAction InternalVisit(AstVisitor visitor)
 
         IAssignableValue ISupportsAssignment.GetAssignableValue()
         {
-            var varExpr = Child as VariableExpressionAst;
-            if (varExpr != null && varExpr.TupleIndex >= 0)
+            if (Child is VariableExpressionAst varExpr && varExpr.TupleIndex >= 0)
             {
                 // In the common case of a single cast on the lhs of an assignment, we may have saved the type of the
                 // variable in the mutable tuple, so conversions will get generated elsewhere, and we can just use
@@ -7863,7 +7997,7 @@ internal bool IsRef()
     public class MemberExpressionAst : ExpressionAst, ISupportsAssignment
     {
         /// <summary>
-        /// Construct an ast to reference a property.
+        /// Initializes a new instance of the <see cref="MemberExpressionAst"/> class.
         /// </summary>
         /// <param name="extent">
         /// The extent of the expression, starting with the expression before the operator '.' or '::' and ending after
@@ -7939,7 +8073,13 @@ public override Ast Copy()
         {
             var newExpression = CopyElement(this.Expression);
             var newMember = CopyElement(this.Member);
-            return new MemberExpressionAst(this.Extent, newExpression, newMember, this.Static, this.NullConditional);
+
+            return new MemberExpressionAst(
+                this.Extent,
+                newExpression,
+                newMember,
+                this.Static,
+                this.NullConditional);
         }
 
         #region Visitors
@@ -7975,7 +8115,7 @@ IAssignableValue ISupportsAssignment.GetAssignableValue()
     public class InvokeMemberExpressionAst : MemberExpressionAst, ISupportsAssignment
     {
         /// <summary>
-        /// Construct an instance of a method invocation expression.
+        /// Initializes a new instance of the <see cref="InvokeMemberExpressionAst"/> class.
         /// </summary>
         /// <param name="extent">
         /// The extent of the expression, starting with the expression before the invocation operator and ending with the
@@ -7987,10 +8127,17 @@ public class InvokeMemberExpressionAst : MemberExpressionAst, ISupportsAssignmen
         /// <param name="static">
         /// True if the invocation is for a static method, using '::', false if invoking a method on an instance using '.'.
         /// </param>
+        /// <param name="genericTypes">The generic type arguments passed to the method.</param>
         /// <exception cref="PSArgumentNullException">
         /// If <paramref name="extent"/> is null.
         /// </exception>
-        public InvokeMemberExpressionAst(IScriptExtent extent, ExpressionAst expression, CommandElementAst method, IEnumerable<ExpressionAst> arguments, bool @static)
+        public InvokeMemberExpressionAst(
+            IScriptExtent extent,
+            ExpressionAst expression,
+            CommandElementAst method,
+            IEnumerable<ExpressionAst> arguments,
+            bool @static,
+            IList<ITypeName> genericTypes)
             : base(extent, expression, method, @static)
         {
             if (arguments != null && arguments.Any())
@@ -7998,6 +8145,37 @@ public InvokeMemberExpressionAst(IScriptExtent extent, ExpressionAst expression,
                 this.Arguments = new ReadOnlyCollection<ExpressionAst>(arguments.ToArray());
                 SetParents(Arguments);
             }
+
+            if (genericTypes != null && genericTypes.Count > 0)
+            {
+                this.GenericTypeArguments = new ReadOnlyCollection<ITypeName>(genericTypes);
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="InvokeMemberExpressionAst"/> class.
+        /// </summary>
+        /// <param name="extent">
+        /// The extent of the expression, starting with the expression before the invocation operator and ending with the
+        /// closing paren after the arguments.
+        /// </param>
+        /// <param name="expression">The expression before the invocation operator ('.', '::').</param>
+        /// <param name="method">The method to invoke.</param>
+        /// <param name="arguments">The arguments to pass to the method.</param>
+        /// <param name="static">
+        /// True if the invocation is for a static method, using '::', false if invoking a method on an instance using '.'.
+        /// </param>
+        /// <exception cref="PSArgumentNullException">
+        /// If <paramref name="extent"/> is null.
+        /// </exception>
+        public InvokeMemberExpressionAst(
+            IScriptExtent extent,
+            ExpressionAst expression,
+            CommandElementAst method,
+            IEnumerable<ExpressionAst> arguments,
+            bool @static)
+            : this(extent, expression, method, arguments, @static, genericTypes: null)
+        {
         }
 
         /// <summary>
@@ -8014,15 +8192,56 @@ public InvokeMemberExpressionAst(IScriptExtent extent, ExpressionAst expression,
         /// True if the invocation is for a static method, using '::', false if invoking a method on an instance using '.' or '?.'.
         /// </param>
         /// <param name="nullConditional">True if the operator used is '?.'.</param>
+        /// <param name="genericTypes">The generic type arguments passed to the method.</param>
         /// <exception cref="PSArgumentNullException">
         /// If <paramref name="extent"/> is null.
         /// </exception>
-        public InvokeMemberExpressionAst(IScriptExtent extent, ExpressionAst expression, CommandElementAst method, IEnumerable<ExpressionAst> arguments, bool @static, bool nullConditional)
-            : this(extent, expression, method, arguments, @static)
+        public InvokeMemberExpressionAst(
+            IScriptExtent extent,
+            ExpressionAst expression,
+            CommandElementAst method,
+            IEnumerable<ExpressionAst> arguments,
+            bool @static,
+            bool nullConditional,
+            IList<ITypeName> genericTypes)
+            : this(extent, expression, method, arguments, @static, genericTypes)
         {
             this.NullConditional = nullConditional;
         }
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="InvokeMemberExpressionAst"/> class.
+        /// </summary>
+        /// <param name="extent">
+        /// The extent of the expression, starting with the expression before the invocation operator and ending with the
+        /// closing paren after the arguments.
+        /// </param>
+        /// <param name="expression">The expression before the invocation operator ('.', '::' or '?.').</param>
+        /// <param name="method">The method to invoke.</param>
+        /// <param name="arguments">The arguments to pass to the method.</param>
+        /// <param name="static">
+        /// True if the invocation is for a static method, using '::', false if invoking a method on an instance using '.' or '?.'.
+        /// </param>
+        /// <param name="nullConditional">True if the operator used is '?.'.</param>
+        /// <exception cref="PSArgumentNullException">
+        /// If <paramref name="extent"/> is null.
+        /// </exception>
+        public InvokeMemberExpressionAst(
+            IScriptExtent extent,
+            ExpressionAst expression,
+            CommandElementAst method,
+            IEnumerable<ExpressionAst> arguments,
+            bool @static,
+            bool nullConditional)
+            : this(extent, expression, method, arguments, @static, nullConditional, genericTypes: null)
+        {
+        }
+
+        /// <summary>
+        /// Gets a list of generic type arguments passed to this method invocation.
+        /// </summary>
+        public ReadOnlyCollection<ITypeName> GenericTypeArguments { get; }
+
         /// <summary>
         /// The non-empty collection of arguments to pass when invoking the method, or null if no arguments were specified.
         /// </summary>
@@ -8036,7 +8255,15 @@ public override Ast Copy()
             var newExpression = CopyElement(this.Expression);
             var newMethod = CopyElement(this.Member);
             var newArguments = CopyElements(this.Arguments);
-            return new InvokeMemberExpressionAst(this.Extent, newExpression, newMethod, newArguments, this.Static, this.NullConditional);
+
+            return new InvokeMemberExpressionAst(
+                this.Extent,
+                newExpression,
+                newMethod,
+                newArguments,
+                this.Static,
+                this.NullConditional,
+                this.GenericTypeArguments);
         }
 
         #region Visitors
@@ -8116,8 +8343,7 @@ public BaseCtorInvokeMemberExpressionAst(IScriptExtent baseKeywordExtent, IScrip
         internal override AstVisitAction InternalVisit(AstVisitor visitor)
         {
             AstVisitAction action = AstVisitAction.Continue;
-            var visitor2 = visitor as AstVisitor2;
-            if (visitor2 != null)
+            if (visitor is AstVisitor2 visitor2)
             {
                 action = visitor2.VisitBaseCtorInvokeMemberExpression(this);
                 if (action == AstVisitAction.SkipChildren)
@@ -8139,6 +8365,7 @@ internal override object Accept(ICustomAstVisitor visitor)
     /// <summary>
     /// The name and attributes of a type.
     /// </summary>
+#nullable enable
     public interface ITypeName
     {
         /// <summary>
@@ -8154,7 +8381,7 @@ public interface ITypeName
         /// <summary>
         /// The name of the assembly, if specified, otherwise null.
         /// </summary>
-        string AssemblyName { get; }
+        string? AssemblyName { get; }
 
         /// <summary>
         /// Returns true if the type names an array, false otherwise.
@@ -8169,20 +8396,21 @@ public interface ITypeName
         /// <summary>
         /// Returns the <see cref="System.Type"/> that this typename represents, if such a type exists, null otherwise.
         /// </summary>
-        Type GetReflectionType();
+        Type? GetReflectionType();
 
         /// <summary>
         /// Assuming the typename is an attribute, returns the <see cref="System.Type"/> that this typename represents.
         /// By convention, the typename may omit the suffix "Attribute".  Lookup will attempt to resolve the type as is,
         /// and if that fails, the suffix "Attribute" will be appended.
         /// </summary>
-        Type GetReflectionAttributeType();
+        Type? GetReflectionAttributeType();
 
         /// <summary>
         /// The extent of the typename.
         /// </summary>
         IScriptExtent Extent { get; }
     }
+#nullable restore
 
 #nullable enable
     internal interface ISupportsTypeCaching
@@ -8196,9 +8424,11 @@ internal interface ISupportsTypeCaching
     /// </summary>
     public sealed class TypeName : ITypeName, ISupportsTypeCaching
     {
-        internal readonly string _name;
-        internal Type _type;
-        internal readonly IScriptExtent _extent;
+        private readonly string _name;
+        private readonly IScriptExtent _extent;
+        private readonly int _genericArgumentCount;
+        private Type _type;
+
         internal TypeDefinitionAst _typeDefinitionAst;
 
         /// <summary>
@@ -8225,8 +8455,7 @@ public TypeName(IScriptExtent extent, string name)
                 throw PSTraceSource.NewArgumentException(nameof(name));
             }
 
-            int backtick = name.IndexOf('`');
-            if (backtick != -1)
+            if (name.Contains('`'))
             {
                 name = name.Replace("``", "`");
             }
@@ -8258,6 +8487,23 @@ public TypeName(IScriptExtent extent, string name, string assembly)
             AssemblyName = assembly;
         }
 
+        /// <summary>
+        /// Construct a typename that represents a generic type definition.
+        /// </summary>
+        /// <param name="extent">The extent of the typename.</param>
+        /// <param name="name">The name of the type.</param>
+        /// <param name="genericArgumentCount">The number of generic arguments.</param>
+        internal TypeName(IScriptExtent extent, string name, int genericArgumentCount)
+            : this(extent, name)
+        {
+            ArgumentOutOfRangeException.ThrowIfLessThan(genericArgumentCount, 0);
+
+            if (genericArgumentCount > 0 && !_name.Contains('`'))
+            {
+                _genericArgumentCount = genericArgumentCount;
+            }
+        }
+
         /// <summary>
         /// Returns the full name of the type.
         /// </summary>
@@ -8305,8 +8551,7 @@ internal bool HasDefaultCtor()
             bool hasExplicitCtor = false;
             foreach (var member in _typeDefinitionAst.Members)
             {
-                var function = member as FunctionMemberAst;
-                if (function != null)
+                if (member is FunctionMemberAst function)
                 {
                     if (function.IsConstructor)
                     {
@@ -8335,8 +8580,25 @@ public Type GetReflectionType()
         {
             if (_type == null)
             {
-                Exception e;
-                Type type = _typeDefinitionAst != null ? _typeDefinitionAst.Type : TypeResolver.ResolveTypeName(this, out e);
+                Type type = _typeDefinitionAst != null ? _typeDefinitionAst.Type : TypeResolver.ResolveTypeName(this, out _);
+
+                if (type is null && _genericArgumentCount > 0)
+                {
+                    // We try an alternate name only if it failed to resolve with the original name.
+                    // This is because for a generic type like `System.Tuple<type1, type2>`, the original name `System.Tuple`
+                    // can be resolved and hence `genericTypeName.TypeName.GetReflectionType()` in that case has always been
+                    // returning the type `System.Tuple`. If we change to directly use the alternate name for resolution, the
+                    // return value will become 'System.Tuple`1' in that case, and that's a breaking change.
+                    TypeName newTypeName = new(
+                        _extent,
+                        string.Create(CultureInfo.InvariantCulture, $"{_name}`{_genericArgumentCount}"))
+                    {
+                        AssemblyName = AssemblyName
+                    };
+
+                    type = TypeResolver.ResolveTypeName(newTypeName, out _);
+                }
+
                 if (type != null)
                 {
                     try
@@ -8371,7 +8633,11 @@ public Type GetReflectionAttributeType()
             var result = GetReflectionType();
             if (result == null || !typeof(Attribute).IsAssignableFrom(result))
             {
-                var attrTypeName = new TypeName(_extent, FullName + "Attribute");
+                TypeName attrTypeName = new(_extent, $"{_name}Attribute", _genericArgumentCount)
+                {
+                    AssemblyName = AssemblyName
+                };
+
                 result = attrTypeName.GetReflectionType();
                 if (result != null && !typeof(Attribute).IsAssignableFrom(result))
                 {
@@ -8664,8 +8930,13 @@ internal Type GetGenericType(Type generic)
             {
                 if (!TypeName.FullName.Contains('`'))
                 {
-                    var newTypeName = new TypeName(Extent,
-                        string.Format(CultureInfo.InvariantCulture, "{0}`{1}", TypeName.FullName, GenericArguments.Count));
+                    TypeName newTypeName = new(
+                        Extent,
+                        string.Create(CultureInfo.InvariantCulture, $"{TypeName.Name}`{GenericArguments.Count}"))
+                    {
+                        AssemblyName = TypeName.AssemblyName
+                    };
+
                     generic = newTypeName.GetReflectionType();
                 }
             }
@@ -8691,8 +8962,13 @@ public Type GetReflectionAttributeType()
                 {
                     if (!TypeName.FullName.Contains('`'))
                     {
-                        var newTypeName = new TypeName(Extent,
-                            string.Format(CultureInfo.InvariantCulture, "{0}Attribute`{1}", TypeName.FullName, GenericArguments.Count));
+                        TypeName newTypeName = new(
+                            Extent,
+                            string.Create(CultureInfo.InvariantCulture, $"{TypeName.Name}Attribute`{GenericArguments.Count}"))
+                        {
+                            AssemblyName = TypeName.AssemblyName
+                        };
+
                         generic = newTypeName.GetReflectionType();
                     }
                 }
@@ -9579,8 +9855,7 @@ public ExpandableStringExpressionAst(IScriptExtent extent,
             }
 
             var ast = Language.Parser.ScanString(value);
-            var expandableStringAst = ast as ExpandableStringExpressionAst;
-            if (expandableStringAst != null)
+            if (ast is ExpandableStringExpressionAst expandableStringAst)
             {
                 this.FormatExpression = expandableStringAst.FormatExpression;
                 this.NestedExpressions = expandableStringAst.NestedExpressions;
@@ -10201,10 +10476,7 @@ public override Ast Copy()
         [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "We want to get the underlying variable only for the UsingExpressionAst.")]
         public static VariableExpressionAst ExtractUsingVariable(UsingExpressionAst usingExpressionAst)
         {
-            if (usingExpressionAst == null)
-            {
-                throw new ArgumentNullException(nameof(usingExpressionAst));
-            }
+            ArgumentNullException.ThrowIfNull(usingExpressionAst);
 
             return ExtractUsingVariableImpl(usingExpressionAst);
         }
@@ -10216,10 +10488,9 @@ public static VariableExpressionAst ExtractUsingVariable(UsingExpressionAst usin
         /// <returns></returns>
         private static VariableExpressionAst ExtractUsingVariableImpl(ExpressionAst expression)
         {
-            var usingExpr = expression as UsingExpressionAst;
             VariableExpressionAst variableExpr;
 
-            if (usingExpr != null)
+            if (expression is UsingExpressionAst usingExpr)
             {
                 variableExpr = usingExpr.SubExpression as VariableExpressionAst;
                 if (variableExpr != null)
@@ -10230,8 +10501,7 @@ private static VariableExpressionAst ExtractUsingVariableImpl(ExpressionAst expr
                 return ExtractUsingVariableImpl(usingExpr.SubExpression);
             }
 
-            var indexExpr = expression as IndexExpressionAst;
-            if (indexExpr != null)
+            if (expression is IndexExpressionAst indexExpr)
             {
                 variableExpr = indexExpr.Target as VariableExpressionAst;
                 if (variableExpr != null)
@@ -10242,8 +10512,7 @@ private static VariableExpressionAst ExtractUsingVariableImpl(ExpressionAst expr
                 return ExtractUsingVariableImpl(indexExpr.Target);
             }
 
-            var memberExpr = expression as MemberExpressionAst;
-            if (memberExpr != null)
+            if (expression is MemberExpressionAst memberExpr)
             {
                 variableExpr = memberExpr.Expression as VariableExpressionAst;
                 if (variableExpr != null)
diff --git a/src/System.Management.Automation/engine/parser/token.cs b/src/System.Management.Automation/engine/parser/token.cs
index 893ec9fc8e0..3cee7580ff9 100644
--- a/src/System.Management.Automation/engine/parser/token.cs
+++ b/src/System.Management.Automation/engine/parser/token.cs
@@ -200,7 +200,7 @@ public enum TokenKind
         /// <summary>The addition operator '+'.</summary>
         Plus = 40,
 
-        /// <summary>The substraction operator '-'.</summary>
+        /// <summary>The subtraction operator '-'.</summary>
         Minus = 41,
 
         /// <summary>The assignment operator '='.</summary>
@@ -588,6 +588,9 @@ public enum TokenKind
         /// <summary>The 'default' keyword</summary>
         Default = 169,
 
+        /// <summary>The 'clean' keyword.</summary>
+        Clean = 170,
+
         #endregion Keywords
     }
 
@@ -659,7 +662,7 @@ public enum TokenFlags
         Keyword = 0x00000010,
 
         /// <summary>
-        /// The token one of the keywords that is a part of a script block: 'begin', 'process', 'end', or 'dynamicparam'.
+        /// The token is one of the keywords that is a part of a script block: 'begin', 'process', 'end', 'clean', or 'dynamicparam'.
         /// </summary>
         ScriptBlockBlockName = 0x00000020,
 
@@ -948,6 +951,7 @@ public static class TokenTraits
             /*               Hidden */ TokenFlags.Keyword,
             /*                 Base */ TokenFlags.Keyword,
             /*              Default */ TokenFlags.Keyword,
+            /*                Clean */ TokenFlags.Keyword | TokenFlags.ScriptBlockBlockName,
 
             #endregion Flags for keywords
         };
@@ -1147,6 +1151,7 @@ public static class TokenTraits
             /*               Hidden */ "hidden",
             /*                 Base */ "base",
             /*              Default */ "default",
+            /*                Clean */ "clean",
 
             #endregion Text for keywords
         };
@@ -1154,10 +1159,12 @@ public static class TokenTraits
 #if DEBUG
         static TokenTraits()
         {
-            Diagnostics.Assert(s_staticTokenFlags.Length == ((int)TokenKind.Default + 1),
-                               "Table size out of sync with enum - _staticTokenFlags");
-            Diagnostics.Assert(s_tokenText.Length == ((int)TokenKind.Default + 1),
-                               "Table size out of sync with enum - _tokenText");
+            Diagnostics.Assert(
+                s_staticTokenFlags.Length == ((int)TokenKind.Clean + 1),
+                "Table size out of sync with enum - _staticTokenFlags");
+            Diagnostics.Assert(
+                s_tokenText.Length == ((int)TokenKind.Clean + 1),
+                "Table size out of sync with enum - _tokenText");
             // Some random assertions to make sure the enum and the traits are in sync
             Diagnostics.Assert(GetTraits(TokenKind.Begin) == (TokenFlags.Keyword | TokenFlags.ScriptBlockBlockName),
                                "Table out of sync with enum - flags Begin");
@@ -1173,7 +1180,7 @@ static TokenTraits()
 #endif
 
         /// <summary>
-        /// Return all the flags for a given <ref>TokenKind</ref>.
+        /// Return all the flags for a given <see cref="TokenKind" />.
         /// </summary>
         public static TokenFlags GetTraits(this TokenKind kind)
         {
@@ -1181,7 +1188,7 @@ public static TokenFlags GetTraits(this TokenKind kind)
         }
 
         /// <summary>
-        /// Return true if the <ref>TokenKind</ref> has the given trait.
+        /// Return true if the <see cref="TokenKind" /> has the given trait.
         /// </summary>
         public static bool HasTrait(this TokenKind kind, TokenFlags flag)
         {
@@ -1195,7 +1202,7 @@ internal static int GetBinaryPrecedence(this TokenKind kind)
         }
 
         /// <summary>
-        /// Return the text for a given <ref>TokenKind</ref>.
+        /// Return the text for a given <see cref="TokenKind" />.
         /// </summary>
         public static string Text(this TokenKind kind)
         {
@@ -1264,7 +1271,7 @@ public override string ToString()
 
         internal virtual string ToDebugString(int indent)
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0}{1}: <{2}>", StringUtil.Padding(indent), _kind, Text);
+            return string.Create(CultureInfo.InvariantCulture, $"{StringUtil.Padding(indent)}{_kind}: <{Text}>");
         }
     }
 
@@ -1283,8 +1290,14 @@ internal NumberToken(InternalScriptExtent scriptExtent, object value, TokenFlags
 
         internal override string ToDebugString(int indent)
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "{0}{1}: <{2}> Value:<{3}> Type:<{4}>", StringUtil.Padding(indent), Kind, Text, _value, _value.GetType().Name);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}{1}: <{2}> Value:<{3}> Type:<{4}>",
+                StringUtil.Padding(indent),
+                Kind,
+                Text,
+                _value,
+                _value.GetType().Name);
         }
 
         /// <summary>
@@ -1325,8 +1338,13 @@ internal ParameterToken(InternalScriptExtent scriptExtent, string parameterName,
 
         internal override string ToDebugString(int indent)
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "{0}{1}: <-{2}{3}>", StringUtil.Padding(indent), Kind, _parameterName, _usedColon ? ":" : string.Empty);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}{1}: <-{2}{3}>",
+                StringUtil.Padding(indent),
+                Kind,
+                _parameterName,
+                _usedColon ? ":" : string.Empty);
         }
     }
 
@@ -1353,8 +1371,13 @@ internal VariableToken(InternalScriptExtent scriptExtent, VariablePath path, Tok
 
         internal override string ToDebugString(int indent)
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "{0}{1}: <{2}> Name:<{3}>", StringUtil.Padding(indent), Kind, Text, Name);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}{1}: <{2}> Name:<{3}>",
+                StringUtil.Padding(indent),
+                Kind,
+                Text,
+                Name);
         }
     }
 
@@ -1376,8 +1399,13 @@ internal StringToken(InternalScriptExtent scriptExtent, TokenKind kind, TokenFla
 
         internal override string ToDebugString(int indent)
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "{0}{1}: <{2}> Value:<{3}>", StringUtil.Padding(indent), Kind, Text, Value);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}{1}: <{2}> Value:<{3}>",
+                StringUtil.Padding(indent),
+                Kind,
+                Text,
+                Value);
         }
     }
 
diff --git a/src/System.Management.Automation/engine/parser/tokenizer.cs b/src/System.Management.Automation/engine/parser/tokenizer.cs
index 5ab09c0a40f..e2aed94cc98 100644
--- a/src/System.Management.Automation/engine/parser/tokenizer.cs
+++ b/src/System.Management.Automation/engine/parser/tokenizer.cs
@@ -12,6 +12,8 @@
 using System.Text;
 
 using Microsoft.PowerShell.Commands;
+using System.Management.Automation.Subsystem;
+using System.Management.Automation.Subsystem.DSC;
 using Microsoft.PowerShell.DesiredStateConfiguration.Internal;
 
 namespace System.Management.Automation.Language
@@ -312,7 +314,7 @@ public DynamicKeyword Copy()
         public bool HasReservedProperties { get; set; }
 
         /// <summary>
-        /// A list of the properties allowed for this constuctor.
+        /// A list of the properties allowed for this constructor.
         /// </summary>
         public Dictionary<string, DynamicKeywordProperty> Properties
         {
@@ -325,7 +327,7 @@ public Dictionary<string, DynamicKeywordProperty> Properties
         private Dictionary<string, DynamicKeywordProperty> _properties;
 
         /// <summary>
-        /// A list of the parameters allowed for this constuctor.
+        /// A list of the parameters allowed for this constructor.
         /// </summary>
         public Dictionary<string, DynamicKeywordParameter> Parameters
         {
@@ -361,7 +363,15 @@ internal static bool IsMetaDSCResource(this DynamicKeyword keyword)
             string implementingModule = keyword.ImplementingModule;
             if (implementingModule != null)
             {
-                return implementingModule.Equals(DscClassCache.DefaultModuleInfoForMetaConfigResource.Item1, StringComparison.OrdinalIgnoreCase);
+                ICrossPlatformDsc dscSubsystem = SubsystemManager.GetSubsystem<ICrossPlatformDsc>();
+                if (dscSubsystem != null)
+                {
+                    dscSubsystem.IsDefaultModuleNameForMetaConfigResource(implementingModule);
+                }
+                else
+                {
+                    return implementingModule.Equals(DscClassCache.DefaultModuleInfoForMetaConfigResource.Item1, StringComparison.OrdinalIgnoreCase);
+                }
             }
 
             return false;
@@ -625,23 +635,23 @@ private static readonly Dictionary<string, TokenKind> s_operatorTable
         /*A*/    "configuration",           "public",           "private",          "static",                     /*A*/
         /*B*/    "interface",               "enum",             "namespace",        "module",                     /*B*/
         /*C*/    "type",                    "assembly",         "command",          "hidden",                     /*C*/
-        /*D*/    "base",                    "default",                                                            /*D*/
+        /*D*/    "base",                    "default",          "clean",                                          /*D*/
         };
 
         private static readonly TokenKind[] s_keywordTokenKind = new TokenKind[] {
-        /*1*/    TokenKind.ElseIf,          TokenKind.If,       TokenKind.Else,     TokenKind.Switch,             /*1*/
-        /*2*/    TokenKind.Foreach,         TokenKind.From,     TokenKind.In,       TokenKind.For,                /*2*/
-        /*3*/    TokenKind.While,           TokenKind.Until,    TokenKind.Do,       TokenKind.Try,                /*3*/
-        /*4*/    TokenKind.Catch,           TokenKind.Finally,  TokenKind.Trap,     TokenKind.Data,               /*4*/
-        /*5*/    TokenKind.Return,          TokenKind.Continue, TokenKind.Break,    TokenKind.Exit,               /*5*/
-        /*6*/    TokenKind.Throw,           TokenKind.Begin,    TokenKind.Process,  TokenKind.End,                /*6*/
-        /*7*/    TokenKind.Dynamicparam,    TokenKind.Function, TokenKind.Filter,   TokenKind.Param,              /*7*/
-        /*8*/    TokenKind.Class,           TokenKind.Define,   TokenKind.Var,      TokenKind.Using,              /*8*/
-        /*9*/    TokenKind.Workflow,        TokenKind.Parallel, TokenKind.Sequence, TokenKind.InlineScript,       /*9*/
-        /*A*/    TokenKind.Configuration,   TokenKind.Public,   TokenKind.Private,  TokenKind.Static,             /*A*/
-        /*B*/    TokenKind.Interface,       TokenKind.Enum,     TokenKind.Namespace,TokenKind.Module,             /*B*/
-        /*C*/    TokenKind.Type,            TokenKind.Assembly, TokenKind.Command,  TokenKind.Hidden,             /*C*/
-        /*D*/    TokenKind.Base,            TokenKind.Default,                                                    /*D*/
+        /*1*/    TokenKind.ElseIf,          TokenKind.If,       TokenKind.Else,      TokenKind.Switch,             /*1*/
+        /*2*/    TokenKind.Foreach,         TokenKind.From,     TokenKind.In,        TokenKind.For,                /*2*/
+        /*3*/    TokenKind.While,           TokenKind.Until,    TokenKind.Do,        TokenKind.Try,                /*3*/
+        /*4*/    TokenKind.Catch,           TokenKind.Finally,  TokenKind.Trap,      TokenKind.Data,               /*4*/
+        /*5*/    TokenKind.Return,          TokenKind.Continue, TokenKind.Break,     TokenKind.Exit,               /*5*/
+        /*6*/    TokenKind.Throw,           TokenKind.Begin,    TokenKind.Process,   TokenKind.End,                /*6*/
+        /*7*/    TokenKind.Dynamicparam,    TokenKind.Function, TokenKind.Filter,    TokenKind.Param,              /*7*/
+        /*8*/    TokenKind.Class,           TokenKind.Define,   TokenKind.Var,       TokenKind.Using,              /*8*/
+        /*9*/    TokenKind.Workflow,        TokenKind.Parallel, TokenKind.Sequence,  TokenKind.InlineScript,       /*9*/
+        /*A*/    TokenKind.Configuration,   TokenKind.Public,   TokenKind.Private,   TokenKind.Static,             /*A*/
+        /*B*/    TokenKind.Interface,       TokenKind.Enum,     TokenKind.Namespace, TokenKind.Module,             /*B*/
+        /*C*/    TokenKind.Type,            TokenKind.Assembly, TokenKind.Command,   TokenKind.Hidden,             /*C*/
+        /*D*/    TokenKind.Base,            TokenKind.Default,  TokenKind.Clean,                                   /*D*/
         };
 
         internal static readonly string[] _operatorText = new string[] {
@@ -704,7 +714,7 @@ static Tokenizer()
             // The hash we compute is intentionally dumb, we want collisions to catch similar strings,
             // so we just sum up the characters.
             const string beginSig = "sig#beginsignatureblock";
-            beginSig.Aggregate(0, (current, t) => current + t);
+            beginSig.Aggregate(0, static (current, t) => current + t);
 
             // Spot check to help make sure the arrays are in sync
             Diagnostics.Assert(s_keywordTable["using"] == TokenKind.Using, "Keyword table out of sync w/ enum");
@@ -1208,10 +1218,7 @@ private Token NewCommentToken()
 
         private T SaveToken<T>(T token) where T : Token
         {
-            if (TokenList != null)
-            {
-                TokenList.Add(token);
-            }
+            TokenList?.Add(token);
 
             // Keep track of the first and last token even if we're not saving tokens
             // for the special variables $$ and $^.
@@ -1224,10 +1231,7 @@ private T SaveToken<T>(T token) where T : Token
                     // Don't remember these tokens, they aren't useful in $$ and $^.
                     break;
                 default:
-                    if (FirstToken == null)
-                    {
-                        FirstToken = token;
-                    }
+                    FirstToken ??= token;
 
                     LastToken = token;
                     break;
@@ -1269,7 +1273,7 @@ private StringToken NewStringExpandableToken(string value, string formatString,
             }
             else if ((flags & TokenFlags.TokenInError) == 0)
             {
-                if (nestedTokens.Any(tok => tok.HasError))
+                if (nestedTokens.Any(static tok => tok.HasError))
                 {
                     flags |= TokenFlags.TokenInError;
                 }
@@ -1797,8 +1801,7 @@ private void ScanLineComment()
             }
             else if (matchedRequires && _nestedTokensAdjustment == 0)
             {
-                if (RequiresTokens == null)
-                    RequiresTokens = new List<Token>();
+                RequiresTokens ??= new List<Token>();
                 RequiresTokens.Add(token);
             }
         }
@@ -1935,10 +1938,7 @@ internal ScriptRequirements GetScriptRequirements()
                             PSSnapinToken.StartsWith(parameter.ParameterName, StringComparison.OrdinalIgnoreCase))
                         {
                             snapinSpecified = true;
-                            if (requiredSnapins == null)
-                            {
-                                requiredSnapins = new List<PSSnapInSpecification>();
-                            }
+                            requiredSnapins ??= new List<PSSnapInSpecification>();
 
                             break;
                         }
@@ -1976,9 +1976,6 @@ internal ScriptRequirements GetScriptRequirements()
                 RequiredPSEditions = requiredEditions != null
                                                     ? new ReadOnlyCollection<string>(requiredEditions)
                                                     : ScriptRequirements.EmptyEditionCollection,
-                RequiresPSSnapIns = requiredSnapins != null
-                                                   ? new ReadOnlyCollection<PSSnapInSpecification>(requiredSnapins)
-                                                   : ScriptRequirements.EmptySnapinCollection,
                 RequiredAssemblies = requiredAssemblies != null
                                                     ? new ReadOnlyCollection<string>(requiredAssemblies)
                                                     : ScriptRequirements.EmptyAssemblyCollection,
@@ -2204,8 +2201,7 @@ private void HandleRequiresParameter(CommandParameterAst parameter,
                         return;
                     }
 
-                    if (requiredModules == null)
-                        requiredModules = new List<ModuleSpecification>();
+                    requiredModules ??= new List<ModuleSpecification>();
                     requiredModules.Add(moduleSpecification);
                 }
             }
@@ -2228,8 +2224,7 @@ private List<string> HandleRequiresAssemblyArgument(Ast argumentAst, object arg,
             }
             else
             {
-                if (requiredAssemblies == null)
-                    requiredAssemblies = new List<string>();
+                requiredAssemblies ??= new List<string>();
 
                 if (!requiredAssemblies.Contains((string)arg))
                 {
@@ -2251,8 +2246,7 @@ private List<string> HandleRequiresPSEditionArgument(Ast argumentAst, object arg
             }
             else
             {
-                if (requiredEditions == null)
-                    requiredEditions = new List<string>();
+                requiredEditions ??= new List<string>();
 
                 var edition = (string)arg;
                 if (!Utils.IsValidPSEditionValue(edition))
@@ -2566,7 +2560,7 @@ private bool ScanDollarInStringExpandable(StringBuilder sb, StringBuilder format
 
             // Make sure we didn't consume anything because we didn't find
             // any nested tokens (no variable or subexpression.)
-            Diagnostics.Assert(PeekChar() == c1, "We accidently consumed a character we shouldn't have.");
+            Diagnostics.Assert(PeekChar() == c1, "We accidentally consumed a character we shouldn't have.");
 
             return false;
         }
@@ -3913,7 +3907,8 @@ private Token ScanNumber(char firstChar)
                     return ScanGenericToken(GetStringBuilder());
                 }
 
-                ReportError(_currentIndex,
+                ReportError(
+                    NewScriptExtent(_tokenStart, _currentIndex),
                     nameof(ParserStrings.BadNumericConstant),
                     ParserStrings.BadNumericConstant,
                     _script.Substring(_tokenStart, _currentIndex - _tokenStart));
diff --git a/src/System.Management.Automation/engine/pipeline.cs b/src/System.Management.Automation/engine/pipeline.cs
index 14837fd1c5c..191f80e1d89 100644
--- a/src/System.Management.Automation/engine/pipeline.cs
+++ b/src/System.Management.Automation/engine/pipeline.cs
@@ -7,6 +7,7 @@
 using System.Management.Automation.Tracing;
 using System.Reflection;
 using System.Runtime.ExceptionServices;
+using System.Threading;
 using Microsoft.PowerShell.Telemetry;
 
 using Dbg = System.Management.Automation.Diagnostics;
@@ -29,6 +30,7 @@ internal class PipelineProcessor : IDisposable
     {
         #region private_members
 
+        private readonly CancellationTokenSource _pipelineStopTokenSource = new CancellationTokenSource();
         private List<CommandProcessorBase> _commands = new List<CommandProcessorBase>();
         private List<PipelineProcessor> _redirectionPipes;
         private PipelineReader<object> _externalInputPipe;
@@ -43,6 +45,10 @@ internal class PipelineProcessor : IDisposable
         private bool _linkedSuccessOutput = false;
         private bool _linkedErrorOutput = false;
 
+        private NativeCommandProcessor _lastNativeCommand;
+
+        private bool _haveReportedNativePipeUsage;
+
 #if !CORECLR // Impersonation Not Supported On CSS
         // This is the security context when the pipeline was allocated
         internal System.Security.SecurityContext SecurityContext =
@@ -66,7 +72,6 @@ internal class PipelineProcessor : IDisposable
         public void Dispose()
         {
             Dispose(true);
-            GC.SuppressFinalize(this);
         }
 
         private void Dispose(bool disposing)
@@ -82,6 +87,7 @@ private void Dispose(bool disposing)
                 _externalErrorOutput = null;
                 _executionScope = null;
                 _eventLogBuffer = null;
+                _pipelineStopTokenSource.Dispose();
 #if !CORECLR // Impersonation Not Supported On CSS
                 SecurityContext.Dispose();
                 SecurityContext = null;
@@ -115,6 +121,11 @@ internal bool ExecutionFailed
             }
         }
 
+        /// <summary>
+        /// Gets the CancellationToken that is signaled when the pipeline is stopping.
+        /// </summary>
+        internal CancellationToken PipelineStopToken => _pipelineStopTokenSource.Token;
+
         internal void LogExecutionInfo(InvocationInfo invocationInfo, string text)
         {
             string message = StringUtil.Format(PipelineStrings.PipelineExecutionInformation, GetCommand(invocationInfo), text);
@@ -214,50 +225,36 @@ private void Log(string logElement, InvocationInfo invocation, PipelineExecution
             // Log the cmdlet invocation execution details if we didn't have an associated script line with it.
             if ((invocation == null) || string.IsNullOrEmpty(invocation.Line))
             {
-                if (hostInterface != null)
-                {
-                    hostInterface.TranscribeCommand(logElement, invocation);
-                }
+                hostInterface?.TranscribeCommand(logElement, invocation);
             }
 
-            if (!string.IsNullOrEmpty(logElement))
+            if (_needToLog && !string.IsNullOrEmpty(logElement))
             {
+                _eventLogBuffer ??= new List<string>();
                 _eventLogBuffer.Add(logElement);
             }
         }
 
-        internal void LogToEventLog()
-        {
-            if (NeedToLog())
-            {
-                // We check to see if the command is needs writing (or if there is anything in the buffer)
-                // before we flush it. Flushing the empty buffer causes a measurable performance degradation.
-                if (_commands == null || _commands.Count == 0 || _eventLogBuffer.Count == 0)
-                    return;
-
-                MshLog.LogPipelineExecutionDetailEvent(_commands[0].Command.Context,
-                                                       _eventLogBuffer,
-                                                       _commands[0].Command.MyInvocation);
-            }
-        }
-
-        private bool NeedToLog()
+        private void LogToEventLog()
         {
-            if (_commands == null)
-                return false;
-
-            foreach (CommandProcessorBase commandProcessor in _commands)
+            // We check to see if there is anything in the buffer before we flush it.
+            // Flushing the empty buffer causes a measurable performance degradation.
+            if (_commands?.Count > 0 && _eventLogBuffer?.Count > 0)
             {
-                MshCommandRuntime cmdRuntime = commandProcessor.Command.commandRuntime as MshCommandRuntime;
-
-                if (cmdRuntime != null && cmdRuntime.LogPipelineExecutionDetail)
-                    return true;
+                InternalCommand firstCmd = _commands[0].Command;
+                MshLog.LogPipelineExecutionDetailEvent(
+                    firstCmd.Context,
+                    _eventLogBuffer,
+                    firstCmd.MyInvocation);
             }
 
-            return false;
+            // Clear the log buffer after writing the event.
+            _eventLogBuffer?.Clear();
         }
 
-        private List<string> _eventLogBuffer = new List<string>();
+        private bool _needToLog = false;
+        private List<string> _eventLogBuffer;
+
         #endregion
 
         #region public_methods
@@ -272,15 +269,40 @@ private bool NeedToLog()
         /// <exception cref="ObjectDisposedException"></exception>
         internal int Add(CommandProcessorBase commandProcessor)
         {
+            if (commandProcessor is NativeCommandProcessor nativeCommand)
+            {
+                if (_lastNativeCommand is not null)
+                {
+                    // Only report experimental feature usage once per pipeline.
+                    if (!_haveReportedNativePipeUsage)
+                    {
+                        ApplicationInsightsTelemetry.SendExperimentalUseData("PSNativeCommandPreserveBytePipe", "p");
+                        _haveReportedNativePipeUsage = true;
+                    }
+
+                    _lastNativeCommand.DownStreamNativeCommand = nativeCommand;
+                    nativeCommand.UpstreamIsNativeCommand = true;
+                }
+
+                _lastNativeCommand = nativeCommand;
+            }
+            else
+            {
+                _lastNativeCommand = null;
+            }
+
             commandProcessor.CommandRuntime.PipelineProcessor = this;
-            return AddCommand(commandProcessor, _commands.Count, false);
+            return AddCommand(commandProcessor, _commands.Count, readErrorQueue: false);
         }
 
         internal void AddRedirectionPipe(PipelineProcessor pipelineProcessor)
         {
-            if (pipelineProcessor == null) throw PSTraceSource.NewArgumentNullException(nameof(pipelineProcessor));
-            if (_redirectionPipes == null)
-                _redirectionPipes = new List<PipelineProcessor>();
+            if (pipelineProcessor is null)
+            {
+                throw PSTraceSource.NewArgumentNullException(nameof(pipelineProcessor));
+            }
+
+            _redirectionPipes ??= new List<PipelineProcessor>();
             _redirectionPipes.Add(pipelineProcessor);
         }
 
@@ -306,7 +328,7 @@ internal void AddRedirectionPipe(PipelineProcessor pipelineProcessor)
         /// PipeAlreadyTaken: the downstream pipe of command <paramref name="readFromCommand"/>
         ///   is already taken
         /// </exception>
-        internal int AddCommand(CommandProcessorBase commandProcessor, int readFromCommand, bool readErrorQueue)
+        private int AddCommand(CommandProcessorBase commandProcessor, int readFromCommand, bool readErrorQueue)
         {
             if (commandProcessor == null)
             {
@@ -358,18 +380,15 @@ internal int AddCommand(CommandProcessorBase commandProcessor, int readFromComma
             }
             else
             {
-                CommandProcessorBase prevcommandProcessor = _commands[readFromCommand - 1] as CommandProcessorBase;
-                if (prevcommandProcessor == null || prevcommandProcessor.CommandRuntime == null)
-                {
-                    // "PipelineProcessor.AddCommand(): previous request object == null"
-                    throw PSTraceSource.NewInvalidOperationException();
-                }
+                var prevcommandProcessor = _commands[readFromCommand - 1] as CommandProcessorBase;
+                ValidateCommandProcessorNotNull(prevcommandProcessor, errorMessage: null);
+
+                Pipe UpstreamPipe = (readErrorQueue)
+                    ? prevcommandProcessor.CommandRuntime.ErrorOutputPipe
+                    : prevcommandProcessor.CommandRuntime.OutputPipe;
 
-                Pipe UpstreamPipe = (readErrorQueue) ?
-                    prevcommandProcessor.CommandRuntime.ErrorOutputPipe : prevcommandProcessor.CommandRuntime.OutputPipe;
                 if (UpstreamPipe == null)
                 {
-                    // "PipelineProcessor.AddCommand(): UpstreamPipe == null"
                     throw PSTraceSource.NewInvalidOperationException();
                 }
 
@@ -392,11 +411,8 @@ internal int AddCommand(CommandProcessorBase commandProcessor, int readFromComma
                     for (int i = 0; i < _commands.Count; i++)
                     {
                         prevcommandProcessor = _commands[i];
-                        if (prevcommandProcessor == null || prevcommandProcessor.CommandRuntime == null)
-                        {
-                            // "PipelineProcessor.AddCommand(): previous request object == null"
-                            throw PSTraceSource.NewInvalidOperationException();
-                        }
+                        ValidateCommandProcessorNotNull(prevcommandProcessor, errorMessage: null);
+
                         // check whether the error output is already claimed
                         if (prevcommandProcessor.CommandRuntime.ErrorOutputPipe.DownstreamCmdlet != null)
                             continue;
@@ -412,6 +428,9 @@ internal int AddCommand(CommandProcessorBase commandProcessor, int readFromComma
 
             _commands.Add(commandProcessor);
 
+            // We will log event(s) about the pipeline execution details if any command in the pipeline requests that.
+            _needToLog |= commandProcessor.CommandRuntime.LogPipelineExecutionDetail;
+
             // We give the Command a pointer back to the
             // PipelineProcessor so that it can check whether the
             // command has been stopped.
@@ -478,192 +497,303 @@ internal Array SynchronousExecuteEnumerate(object input)
                 throw new PipelineStoppedException();
             }
 
-            ExceptionDispatchInfo toRethrowInfo;
+            bool pipelineSucceeded = false;
+            ExceptionDispatchInfo toRethrowInfo = null;
+            CommandProcessorBase commandRequestingUpstreamCommandsToStop = null;
+
             try
             {
-                CommandProcessorBase commandRequestingUpstreamCommandsToStop = null;
                 try
                 {
-                    // If the caller specified an input object array,
-                    // we run assuming there is an incoming "stream"
-                    // of objects. This will prevent the one default call
-                    // to ProcessRecord on the first command.
-                    Start(input != AutomationNull.Value);
+                    try
+                    {
+                        // If the caller specified an input object array, we run assuming there is an incoming "stream"
+                        // of objects. This will prevent the one default call to ProcessRecord on the first command.
+                        Start(incomingStream: input != AutomationNull.Value);
 
-                    // Start has already validated firstcommandProcessor
-                    CommandProcessorBase firstCommandProcessor = _commands[0];
+                        // Start has already validated firstcommandProcessor
+                        CommandProcessorBase firstCommandProcessor = _commands[0];
 
-                    // Add any input to the first command.
-                    if (ExternalInput != null)
+                        // Add any input to the first command.
+                        if (ExternalInput is not null)
+                        {
+                            firstCommandProcessor.CommandRuntime.InputPipe.ExternalReader = ExternalInput;
+                        }
+
+                        Inject(input, enumerate: true);
+                    }
+                    catch (PipelineStoppedException)
                     {
-                        firstCommandProcessor.CommandRuntime.InputPipe.ExternalReader
-                            = ExternalInput;
+                        if (_firstTerminatingError?.SourceException is StopUpstreamCommandsException exception)
+                        {
+                            _firstTerminatingError = null;
+                            commandRequestingUpstreamCommandsToStop = exception.RequestingCommandProcessor;
+                        }
+                        else
+                        {
+                            throw;
+                        }
                     }
 
-                    Inject(input, enumerate: true);
+                    DoCompleteCore(commandRequestingUpstreamCommandsToStop);
+                    pipelineSucceeded = true;
                 }
-                catch (PipelineStoppedException)
+                finally
                 {
-                    StopUpstreamCommandsException stopUpstreamCommandsException =
-                        _firstTerminatingError != null
-                            ? _firstTerminatingError.SourceException as StopUpstreamCommandsException
-                            : null;
-                    if (stopUpstreamCommandsException == null)
-                    {
-                        throw;
-                    }
-                    else
-                    {
-                        _firstTerminatingError = null;
-                        commandRequestingUpstreamCommandsToStop = stopUpstreamCommandsException.RequestingCommandProcessor;
-                    }
+                    // Clean up resources for script commands, no matter the pipeline succeeded or not.
+                    // This method catches and handles all exceptions inside, so it will never throw.
+                    Clean();
                 }
 
-                DoCompleteCore(commandRequestingUpstreamCommandsToStop);
-
-                // By this point, we are sure all commandProcessors hosted by the current pipelineProcess are done execution,
-                // so if there are any redirection pipelineProcessors associated with any of those commandProcessors, we should
-                // call DoComplete on them.
-                if (_redirectionPipes != null)
+                if (pipelineSucceeded)
                 {
-                    foreach (PipelineProcessor redirectPipelineProcessor in _redirectionPipes)
+                    // Now, we are sure all 'commandProcessors' hosted by the current 'pipelineProcessor' are done execution,
+                    // so if there are any redirection 'pipelineProcessors' associated with any of those 'commandProcessors',
+                    // they must have successfully executed 'StartStepping' and 'Step', and thus we should call 'DoComplete'
+                    // on them for completeness.
+                    if (_redirectionPipes is not null)
                     {
-                        redirectPipelineProcessor.DoCompleteCore(null);
+                        foreach (PipelineProcessor redirectPipelineProcessor in _redirectionPipes)
+                        {
+                            // The 'Clean' block for each 'commandProcessor' might still write to a pipe that is associated
+                            // with the redirection 'pipelineProcessor' (e.g. a redirected error pipe), which would trigger
+                            // the call to 'pipelineProcessor.Step'.
+                            // It's possible (though very unlikely) that the call to 'pipelineProcessor.Step' failed with an
+                            // exception, and in such case, the 'pipelineProcessor' would have been disposed, and therefore
+                            // the call to 'DoComplete' will simply return, because '_commands' was already set to null.
+                            redirectPipelineProcessor.DoCompleteCore(null);
+                        }
                     }
-                }
 
-                return RetrieveResults();
+                    // The 'Clean' blocks write nothing to the output pipe, so the results won't be affected by them.
+                    return RetrieveResults();
+                }
             }
             catch (RuntimeException e)
             {
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                toRethrowInfo = _firstTerminatingError ?? ExceptionDispatchInfo.Capture(e);
-                this.LogExecutionException(toRethrowInfo.SourceException);
-            }
-            // NTRAID#Windows Out Of Band Releases-929020-2006/03/14-JonN
-            catch (System.Runtime.InteropServices.InvalidComObjectException comException)
-            {
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                if (_firstTerminatingError != null)
-                {
-                    toRethrowInfo = _firstTerminatingError;
-                }
-                else
-                {
-                    string message = StringUtil.Format(ParserStrings.InvalidComObjectException, comException.Message);
-                    var rte = new RuntimeException(message, comException);
-                    rte.SetErrorId("InvalidComObjectException");
-                    toRethrowInfo = ExceptionDispatchInfo.Capture(rte);
-                }
-
-                this.LogExecutionException(toRethrowInfo.SourceException);
+                toRethrowInfo = GetFirstError(e);
             }
             finally
             {
                 DisposeCommands();
             }
 
-            // By rethrowing the exception outside of the handler,
-            // we allow the CLR on X64/IA64 to free from the stack
-            // the exception records related to this exception.
+            // By rethrowing the exception outside of the handler, we allow the CLR on X64/IA64 to free from
+            // the stack the exception records related to this exception.
 
-            // The only reason we should get here is if
-            // an exception should be rethrown.
+            // The only reason we should get here is if an exception should be rethrown.
             Diagnostics.Assert(toRethrowInfo != null, "Alternate protocol path failure");
             toRethrowInfo.Throw();
-            return null; // UNREACHABLE
+
+            // UNREACHABLE
+            return null;
+        }
+
+        private ExceptionDispatchInfo GetFirstError(RuntimeException e)
+        {
+            // The error we want to report is the first terminating error which occurred during pipeline execution,
+            // regardless of whether other errors occurred afterward.
+            var firstError = _firstTerminatingError ?? ExceptionDispatchInfo.Capture(e);
+            LogExecutionException(firstError.SourceException);
+            return firstError;
+        }
+
+        private void ThrowFirstErrorIfExisting(bool logException)
+        {
+            if (_firstTerminatingError != null)
+            {
+                if (logException)
+                {
+                    LogExecutionException(_firstTerminatingError.SourceException);
+                }
+
+                _firstTerminatingError.Throw();
+            }
         }
 
         private void DoCompleteCore(CommandProcessorBase commandRequestingUpstreamCommandsToStop)
         {
-            // Call DoComplete() for all the commands. DoComplete() will internally call Complete()
+            if (_commands is null)
+            {
+                // This could happen to a redirection pipeline, either for an expression (e.g. 1 > a.txt)
+                // or for a command (e.g. command > a.txt).
+                // An exception may be thrown from the call to 'StartStepping' or 'Step' on the pipeline,
+                // which causes the pipeline commands to be disposed.
+                return;
+            }
+
+            // Call DoComplete() for all the commands, which will internally call Complete()
             MshCommandRuntime lastCommandRuntime = null;
 
-            if (_commands != null)
+            for (int i = 0; i < _commands.Count; i++)
             {
-                for (int i = 0; i < _commands.Count; i++)
-                {
-                    CommandProcessorBase commandProcessor = _commands[i];
+                CommandProcessorBase commandProcessor = _commands[i];
 
-                    if (commandProcessor == null)
-                    {
-                        // "null command " + i
-                        throw PSTraceSource.NewInvalidOperationException();
-                    }
+                if (commandProcessor is null)
+                {
+                    // An internal error that should not happen.
+                    throw PSTraceSource.NewInvalidOperationException();
+                }
 
-                    if (object.ReferenceEquals(commandRequestingUpstreamCommandsToStop, commandProcessor))
-                    {
-                        commandRequestingUpstreamCommandsToStop = null;
-                        continue; // do not call DoComplete/EndProcessing on the command that initiated stopping
-                    }
+                if (object.ReferenceEquals(commandRequestingUpstreamCommandsToStop, commandProcessor))
+                {
+                    // Do not call DoComplete/EndProcessing on the command that initiated stopping.
+                    commandRequestingUpstreamCommandsToStop = null;
+                    continue;
+                }
 
-                    if (commandRequestingUpstreamCommandsToStop != null)
-                    {
-                        continue; // do not call DoComplete/EndProcessing on commands that were stopped upstream
-                    }
+                if (commandRequestingUpstreamCommandsToStop is not null)
+                {
+                    // Do not call DoComplete/EndProcessing on commands that were stopped upstream.
+                    continue;
+                }
 
-                    try
+                try
+                {
+                    commandProcessor.DoComplete();
+                }
+                catch (PipelineStoppedException)
+                {
+                    if (_firstTerminatingError?.SourceException is StopUpstreamCommandsException exception)
                     {
-                        commandProcessor.DoComplete();
+                        _firstTerminatingError = null;
+                        commandRequestingUpstreamCommandsToStop = exception.RequestingCommandProcessor;
                     }
-                    catch (PipelineStoppedException)
+                    else
                     {
-                        StopUpstreamCommandsException stopUpstreamCommandsException =
-                            _firstTerminatingError != null
-                                ? _firstTerminatingError.SourceException as StopUpstreamCommandsException
-                                : null;
-                        if (stopUpstreamCommandsException == null)
-                        {
-                            throw;
-                        }
-                        else
-                        {
-                            _firstTerminatingError = null;
-                            commandRequestingUpstreamCommandsToStop = stopUpstreamCommandsException.RequestingCommandProcessor;
-                        }
+                        throw;
                     }
+                }
 
-                    EtwActivity.SetActivityId(commandProcessor.PipelineActivityId);
-
-                    // Log a command stopped event
-                    MshLog.LogCommandLifecycleEvent(
-                        commandProcessor.Command.Context,
-                        CommandState.Stopped,
-                        commandProcessor.Command.MyInvocation);
+                EtwActivity.SetActivityId(commandProcessor.PipelineActivityId);
 
-                    // Log the execution of a command (not script chunks, as they
-                    // are not commands in and of themselves)
-                    if (commandProcessor.CommandInfo.CommandType != CommandTypes.Script)
-                    {
-                        commandProcessor.CommandRuntime.PipelineProcessor.LogExecutionComplete(
-                            commandProcessor.Command.MyInvocation, commandProcessor.CommandInfo.Name);
-                    }
+                // Log a command stopped event
+                MshLog.LogCommandLifecycleEvent(
+                    commandProcessor.Command.Context,
+                    CommandState.Stopped,
+                    commandProcessor.Command.MyInvocation);
 
-                    lastCommandRuntime = commandProcessor.CommandRuntime;
+                // Log the execution of a command (not script chunks, as they are not commands in and of themselves).
+                if (commandProcessor.CommandInfo.CommandType != CommandTypes.Script)
+                {
+                    LogExecutionComplete(commandProcessor.Command.MyInvocation, commandProcessor.CommandInfo.Name);
                 }
+
+                lastCommandRuntime = commandProcessor.CommandRuntime;
             }
 
             // Log the pipeline completion.
-            if (lastCommandRuntime != null)
+            if (lastCommandRuntime is not null)
             {
                 // Only log the pipeline completion if this wasn't a nested pipeline, as
                 // pipeline state in transcription is associated with the toplevel pipeline
-                if ((this.LocalPipeline == null) || (!this.LocalPipeline.IsNested))
+                if (LocalPipeline is null || !LocalPipeline.IsNested)
                 {
                     lastCommandRuntime.PipelineProcessor.LogPipelineComplete();
                 }
             }
 
             // If a terminating error occurred, report it now.
-            if (_firstTerminatingError != null)
+            // This pipeline could have been stopped asynchronously, by 'Ctrl+c' manually or
+            // 'PowerShell.Stop' programatically. We need to check and see if that's the case.
+            // An example:
+            // - 'Start-Sleep' is running in this pipeline, and 'pipelineProcessor.Stop' gets
+            //   called on a different thread, which sets a 'PipelineStoppedException' object
+            //   to '_firstTerminatingError' and runs 'StopProcessing' on 'Start-Sleep'.
+            // - The 'StopProcessing' will cause 'Start-Sleep' to return from 'ProcessRecord'
+            //   call, and thus the pipeline execution will move forward to run 'DoComplete'
+            //   for the 'Start-Sleep' command and thus the code flow will reach here.
+            // For this given example, we need to check '_firstTerminatingError' and throw out
+            // the 'PipelineStoppedException' if the pipeline was indeed being stopped.
+            ThrowFirstErrorIfExisting(logException: true);
+        }
+
+        /// <summary>
+        /// Clean up resources for script commands in this pipeline processor.
+        /// </summary>
+        /// <remarks>
+        /// Exception from a 'Clean' block is not allowed to propagate up and terminate the pipeline
+        /// so that other 'Clean' blocks can run without being affected. Therefore, this method will
+        /// catch and handle all exceptions inside, and it will never throw.
+        /// </remarks>
+        private void Clean()
+        {
+            if (!_executionStarted || _commands is null)
             {
-                this.LogExecutionException(_firstTerminatingError.SourceException);
-                _firstTerminatingError.Throw();
+                // Simply return if the pipeline execution wasn't even started, or the commands of
+                // the pipeline have already been disposed.
+                return;
             }
+
+            // So far, if '_firstTerminatingError' is not null, then it must be a terminating error
+            // thrown from one of 'Begin/Process/End' blocks. There can be terminating error thrown
+            // from 'Clean' block as well, which needs to be handled in this method.
+            // In order to capture the subsequent first terminating error thrown from 'Clean', we
+            // need to forget the previous '_firstTerminatingError' value before calling 'DoClean'
+            // on each command processor, so we have to save the old value here and restore later.
+            ExceptionDispatchInfo oldFirstTerminatingError = _firstTerminatingError;
+
+            // Suspend a stopping pipeline by setting 'IsStopping' to false and restore it afterwards.
+            bool oldIsStopping = ExceptionHandlingOps.SuspendStoppingPipelineImpl(LocalPipeline);
+
+            try
+            {
+                foreach (CommandProcessorBase commandProcessor in _commands)
+                {
+                    if (commandProcessor is null || !commandProcessor.HasCleanBlock)
+                    {
+                        continue;
+                    }
+
+                    try
+                    {
+                        // Forget the terminating error we saw before, so a terminating error thrown
+                        // from the subsequent 'Clean' block can be recorded and handled properly.
+                        _firstTerminatingError = null;
+                        commandProcessor.DoCleanup();
+                    }
+                    catch (RuntimeException e)
+                    {
+                        // Retrieve and report the terminating error that was thrown in the 'Clean' block.
+                        ExceptionDispatchInfo firstError = GetFirstError(e);
+                        commandProcessor.ReportCleanupError(firstError.SourceException);
+                    }
+                    catch (Exception ex)
+                    {
+                        // Theoretically, only 'RuntimeException' could be thrown out, but we catch
+                        // all and log them here just to be safe.
+                        // Skip special flow control exceptions and log others.
+                        if (ex is not FlowControlException && ex is not HaltCommandException)
+                        {
+                            MshLog.LogCommandHealthEvent(commandProcessor.Context, ex, Severity.Warning);
+                        }
+                    }
+                }
+            }
+            finally
+            {
+                _firstTerminatingError = oldFirstTerminatingError;
+                ExceptionHandlingOps.RestoreStoppingPipelineImpl(LocalPipeline, oldIsStopping);
+            }
+        }
+
+        /// <summary>
+        /// Clean up resources for the script commands of a steppable pipeline.
+        /// </summary>
+        /// <remarks>
+        /// The way we handle 'Clean' blocks in 'StartStepping', 'Step', and 'DoComplete' makes sure that:
+        ///  1. The 'Clean' blocks get to run if any exception is thrown from the pipeline execution.
+        ///  2. The 'Clean' blocks get to run if the pipeline runs to the end successfully.
+        /// However, this is not enough for a steppable pipeline, because the function, where the steppable
+        /// pipeline gets used, may fail (think about a proxy function). And that may lead to the situation
+        /// where "no exception was thrown from the steppable pipeline" but "the steppable pipeline didn't
+        /// run to the end". In that case, 'Clean' won't run unless it's triggered explicitly on the steppable
+        /// pipeline. This method is how we will expose this functionality to 'SteppablePipeline'.
+        /// </remarks>
+        internal void DoCleanup()
+        {
+            Clean();
+            DisposeCommands();
         }
 
         /// <summary>
@@ -673,98 +803,79 @@ private void DoCompleteCore(CommandProcessorBase commandRequestingUpstreamComman
         /// <returns>The results of the execution.</returns>
         internal Array DoComplete()
         {
-            if (Stopping)
-            {
-                throw new PipelineStoppedException();
-            }
-
             if (!_executionStarted)
             {
                 throw PSTraceSource.NewInvalidOperationException(
                     PipelineStrings.PipelineNotStarted);
             }
 
-            ExceptionDispatchInfo toRethrowInfo;
             try
             {
-                DoCompleteCore(null);
+                if (Stopping)
+                {
+                    throw new PipelineStoppedException();
+                }
 
-                return RetrieveResults();
-            }
-            catch (RuntimeException e)
-            {
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                toRethrowInfo = _firstTerminatingError ?? ExceptionDispatchInfo.Capture(e);
-                this.LogExecutionException(toRethrowInfo.SourceException);
-            }
-            // NTRAID#Windows Out Of Band Releases-929020-2006/03/14-JonN
-            catch (System.Runtime.InteropServices.InvalidComObjectException comException)
-            {
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                if (_firstTerminatingError != null)
+                ExceptionDispatchInfo toRethrowInfo;
+                try
                 {
-                    toRethrowInfo = _firstTerminatingError;
+                    DoCompleteCore(null);
+                    return RetrieveResults();
                 }
-                else
+                catch (RuntimeException e)
                 {
-                    string message = StringUtil.Format(ParserStrings.InvalidComObjectException, comException.Message);
-                    var rte = new RuntimeException(message, comException);
-                    rte.SetErrorId("InvalidComObjectException");
-                    toRethrowInfo = ExceptionDispatchInfo.Capture(rte);
+                    toRethrowInfo = GetFirstError(e);
                 }
 
-                this.LogExecutionException(toRethrowInfo.SourceException);
+                // By rethrowing the exception outside of the handler, we allow the CLR on X64/IA64 to free from the stack
+                // the exception records related to this exception.
+
+                // The only reason we should get here is an exception should be rethrown.
+                Diagnostics.Assert(toRethrowInfo != null, "Alternate protocol path failure");
+                toRethrowInfo.Throw();
+
+                // UNREACHABLE
+                return null;
             }
             finally
             {
+                Clean();
                 DisposeCommands();
             }
-
-            // By rethrowing the exception outside of the handler,
-            // we allow the CLR on X64/IA64 to free from the stack
-            // the exception records related to this exception.
-
-            // The only reason we should get here is if
-            // an exception should be rethrown.
-            Diagnostics.Assert(toRethrowInfo != null, "Alternate protocol path failure");
-            toRethrowInfo.Throw();
-            return null; // UNREACHABLE
         }
 
         /// <summary>
-        /// This routine starts the stepping process. It is optional to
-        /// call this but can be useful if you want the begin clauses
-        /// of the pipeline to be run even when there may not be any input
-        /// to process as is the case for I/O redirection into a file. We
-        /// still want the file opened, even if there was nothing to write to it.
+        /// This routine starts the stepping process. It is optional to call this but can be useful
+        /// if you want the begin clauses of the pipeline to be run even when there may not be any
+        /// input to process as is the case for I/O redirection into a file. We still want the file
+        /// opened, even if there was nothing to write to it.
         /// </summary>
         /// <param name="expectInput">True if you want to write to this pipeline.</param>
         internal void StartStepping(bool expectInput)
         {
+            bool startSucceeded = false;
             try
             {
                 Start(expectInput);
+                startSucceeded = true;
 
-                // If a terminating error occurred, report it now.
-                if (_firstTerminatingError != null)
-                {
-                    _firstTerminatingError.Throw();
-                }
+                // Check if this pipeline is being stopped asynchronously.
+                ThrowFirstErrorIfExisting(logException: false);
             }
-            catch (PipelineStoppedException)
+            catch (Exception e)
             {
+                Clean();
                 DisposeCommands();
 
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                if (_firstTerminatingError != null)
+                if (!startSucceeded && e is PipelineStoppedException)
                 {
-                    _firstTerminatingError.Throw();
+                    // When a terminating error happens during command execution, PowerShell will first save it
+                    // to '_firstTerminatingError', and then throw a 'PipelineStoppedException' to tear down the
+                    // pipeline. So when the caught exception here is 'PipelineStoppedException', it may not be
+                    // the actual original terminating error.
+                    // In this case, we want to report the first terminating error which occurred during pipeline
+                    // execution, regardless of whether other errors occurred afterward.
+                    ThrowFirstErrorIfExisting(logException: false);
                 }
 
                 throw;
@@ -781,35 +892,37 @@ internal void Stop()
             // Only call StopProcessing if the pipeline is being stopped
             // for the first time
 
-            if (!RecordFailure(new PipelineStoppedException(), null))
+            if (!RecordFailure(new PipelineStoppedException(), command: null))
+            {
                 return;
+            }
 
             // Retain copy of _commands in case Dispose() is called
             List<CommandProcessorBase> commands = _commands;
-            if (commands == null)
+            if (commands is null)
+            {
                 return;
+            }
+
+            _pipelineStopTokenSource.Cancel();
 
             // Call StopProcessing() for all the commands.
-            for (int i = 0; i < commands.Count; i++)
+            foreach (CommandProcessorBase commandProcessor in commands)
             {
-                CommandProcessorBase commandProcessor = commands[i];
-
                 if (commandProcessor == null)
                 {
                     throw PSTraceSource.NewInvalidOperationException();
                 }
-#pragma warning disable 56500
+
                 try
                 {
                     commandProcessor.Command.DoStopProcessing();
                 }
                 catch (Exception)
                 {
-                    // 2004/04/26-JonN We swallow exceptions
-                    // which occur during StopProcessing.
+                    // We swallow exceptions which occur during StopProcessing.
                     continue;
                 }
-#pragma warning restore 56500
             }
         }
 
@@ -852,43 +965,35 @@ internal void Stop()
         /// </exception>
         internal Array Step(object input)
         {
-            if (Stopping)
-            {
-                throw new PipelineStoppedException();
-            }
-
+            bool injectSucceeded = false;
             try
             {
                 Start(true);
                 Inject(input, enumerate: false);
+                injectSucceeded = true;
 
-                // If a terminating error occurred, report it now.
-                if (_firstTerminatingError != null)
-                {
-                    _firstTerminatingError.Throw();
-                }
-
+                // Check if this pipeline is being stopped asynchronously.
+                ThrowFirstErrorIfExisting(logException: false);
                 return RetrieveResults();
             }
-            catch (PipelineStoppedException)
+            catch (Exception e)
             {
+                Clean();
                 DisposeCommands();
 
-                // The error we want to report is the first terminating error
-                // which occurred during pipeline execution, regardless
-                // of whether other errors occurred afterward.
-                if (_firstTerminatingError != null)
+                if (!injectSucceeded && e is PipelineStoppedException)
                 {
-                    _firstTerminatingError.Throw();
+                    // When a terminating error happens during command execution, PowerShell will first save it
+                    // to '_firstTerminatingError', and then throw a 'PipelineStoppedException' to tear down the
+                    // pipeline. So when the caught exception here is 'PipelineStoppedException', it may not be
+                    // the actual original terminating error.
+                    // In this case, we want to report the first terminating error which occurred during pipeline
+                    // execution, regardless of whether other errors occurred afterward.
+                    ThrowFirstErrorIfExisting(logException: false);
                 }
 
                 throw;
             }
-            catch (Exception)
-            {
-                DisposeCommands();
-                throw;
-            }
         }
 
         /// <summary>
@@ -935,7 +1040,9 @@ private void Start(bool incomingStream)
             }
 
             if (_executionStarted)
+            {
                 return;
+            }
 
             if (_commands == null || _commands.Count == 0)
             {
@@ -944,32 +1051,18 @@ private void Start(bool incomingStream)
             }
 
             CommandProcessorBase firstcommandProcessor = _commands[0];
-            if (firstcommandProcessor == null
-                || firstcommandProcessor.CommandRuntime == null)
-            {
-                throw PSTraceSource.NewInvalidOperationException(
-                    PipelineStrings.PipelineExecuteRequiresAtLeastOneCommand);
-            }
+            ValidateCommandProcessorNotNull(firstcommandProcessor, PipelineStrings.PipelineExecuteRequiresAtLeastOneCommand);
 
             // Set the execution scope using the current scope
-            if (_executionScope == null)
-            {
-                _executionScope = firstcommandProcessor.Context.EngineSessionState.CurrentScope;
-            }
+            _executionScope ??= firstcommandProcessor.Context.EngineSessionState.CurrentScope;
 
             // add ExternalSuccessOutput to the last command
             CommandProcessorBase LastCommandProcessor = _commands[_commands.Count - 1];
-            if (LastCommandProcessor == null
-                || LastCommandProcessor.CommandRuntime == null)
-            {
-                // "PipelineProcessor.Start(): LastCommandProcessor == null"
-                throw PSTraceSource.NewInvalidOperationException();
-            }
+            ValidateCommandProcessorNotNull(LastCommandProcessor, errorMessage: null);
 
             if (ExternalSuccessOutput != null)
             {
-                LastCommandProcessor.CommandRuntime.OutputPipe.ExternalWriter
-                    = ExternalSuccessOutput;
+                LastCommandProcessor.CommandRuntime.OutputPipe.ExternalWriter = ExternalSuccessOutput;
             }
 
             // add ExternalErrorOutput to all commands whose error
@@ -983,20 +1076,17 @@ private void Start(bool incomingStream)
             }
 
             // We want the value of PSDefaultParameterValues before possibly changing to the commands scopes.
-            // This ensures we use the value from the callers scope, not the callees scope.
+            // This ensures we use the value from the caller's scope, not the callee's scope.
             IDictionary psDefaultParameterValues =
                 firstcommandProcessor.Context.GetVariableValue(SpecialVariables.PSDefaultParameterValuesVarPath, false) as IDictionary;
 
             _executionStarted = true;
 
-            //
             // Allocate the pipeline iteration array; note that the pipeline position for
             // each command starts at 1 so we need to allocate _commands.Count + 1 items.
-            //
             int[] pipelineIterationInfo = new int[_commands.Count + 1];
 
-            // Prepare all commands from Engine's side,
-            // and make sure they are all valid
+            // Prepare all commands from Engine's side, and make sure they are all valid
             for (int i = 0; i < _commands.Count; i++)
             {
                 CommandProcessorBase commandProcessor = _commands[i];
@@ -1008,8 +1098,6 @@ private void Start(bool incomingStream)
 
                 // Generate new Activity Id for the thread
                 Guid pipelineActivityId = EtwActivity.CreateActivityId();
-
-                // commandProcess.PipelineActivityId = new Activity id
                 EtwActivity.SetActivityId(pipelineActivityId);
                 commandProcessor.PipelineActivityId = pipelineActivityId;
 
@@ -1019,20 +1107,14 @@ private void Start(bool incomingStream)
                     CommandState.Started,
                     commandProcessor.Command.MyInvocation);
 
-                // Telemetry here
-                // the type of command should be sent along
-                // commandProcessor.CommandInfo.CommandType
-                ApplicationInsightsTelemetry.SendTelemetryMetric(TelemetryType.ApplicationType, commandProcessor.Command.CommandInfo.CommandType.ToString());
 #if LEGACYTELEMETRY
                 Microsoft.PowerShell.Telemetry.Internal.TelemetryAPI.TraceExecutedCommand(commandProcessor.Command.CommandInfo, commandProcessor.Command.CommandOrigin);
 #endif
 
-                // Log the execution of a command (not script chunks, as they
-                // are not commands in and of themselves)
+                // Log the execution of a command (not script chunks, as they are not commands in and of themselves)
                 if (commandProcessor.CommandInfo.CommandType != CommandTypes.Script)
                 {
-                    commandProcessor.CommandRuntime.PipelineProcessor.LogExecutionInfo(
-                        commandProcessor.Command.MyInvocation, commandProcessor.CommandInfo.Name);
+                    LogExecutionInfo(commandProcessor.Command.MyInvocation, commandProcessor.CommandInfo.Name);
                 }
 
                 InvocationInfo myInfo = commandProcessor.Command.MyInvocation;
@@ -1065,8 +1147,7 @@ private void Start(bool incomingStream)
         }
 
         /// <summary>
-        /// Add ExternalErrorOutput to all commands whose error
-        /// output is not yet claimed.
+        /// Add ExternalErrorOutput to all commands whose error output is not yet claimed.
         /// </summary>
         private void SetExternalErrorOutput()
         {
@@ -1075,14 +1156,12 @@ private void SetExternalErrorOutput()
                 for (int i = 0; i < _commands.Count; i++)
                 {
                     CommandProcessorBase commandProcessor = _commands[i];
-                    Pipe UpstreamPipe =
-                        commandProcessor.CommandRuntime.ErrorOutputPipe;
+                    Pipe errorPipe = commandProcessor.CommandRuntime.ErrorOutputPipe;
 
                     // check whether a cmdlet is consuming the error pipe
-                    if (!UpstreamPipe.IsRedirected)
+                    if (!errorPipe.IsRedirected)
                     {
-                        UpstreamPipe.ExternalWriter =
-                            ExternalErrorOutput;
+                        errorPipe.ExternalWriter = ExternalErrorOutput;
                     }
                 }
             }
@@ -1093,14 +1172,9 @@ private void SetExternalErrorOutput()
         /// </summary>
         private void SetupParameterVariables()
         {
-            for (int i = 0; i < _commands.Count; i++)
+            foreach (CommandProcessorBase commandProcessor in _commands)
             {
-                CommandProcessorBase commandProcessor = _commands[i];
-                if (commandProcessor == null || commandProcessor.CommandRuntime == null)
-                {
-                    // "null command " + i
-                    throw PSTraceSource.NewInvalidOperationException();
-                }
+                ValidateCommandProcessorNotNull(commandProcessor, errorMessage: null);
 
                 commandProcessor.CommandRuntime.SetupOutVariable();
                 commandProcessor.CommandRuntime.SetupErrorVariable();
@@ -1110,6 +1184,16 @@ private void SetupParameterVariables()
             }
         }
 
+        private static void ValidateCommandProcessorNotNull(CommandProcessorBase commandProcessor, string errorMessage)
+        {
+            if (commandProcessor?.CommandRuntime is null)
+            {
+                throw errorMessage is null
+                    ? PSTraceSource.NewInvalidOperationException()
+                    : PSTraceSource.NewInvalidOperationException(errorMessage, Array.Empty<object>());
+            }
+        }
+
         /// <summary>
         /// Partially execute the pipeline.  The output remains in
         /// the pipes.
@@ -1139,12 +1223,7 @@ private void Inject(object input, bool enumerate)
         {
             // Add any input to the first command.
             CommandProcessorBase firstcommandProcessor = _commands[0];
-            if (firstcommandProcessor == null
-                || firstcommandProcessor.CommandRuntime == null)
-            {
-                throw PSTraceSource.NewInvalidOperationException(
-                    PipelineStrings.PipelineExecuteRequiresAtLeastOneCommand);
-            }
+            ValidateCommandProcessorNotNull(firstcommandProcessor, PipelineStrings.PipelineExecuteRequiresAtLeastOneCommand);
 
             if (input != AutomationNull.Value)
             {
@@ -1182,27 +1261,26 @@ private void Inject(object input, bool enumerate)
         /// </returns>
         private Array RetrieveResults()
         {
+            if (_commands is null)
+            {
+                // This could happen to an expression redirection pipeline (e.g. 1 > a.txt).
+                // An exception may be thrown from the call to 'StartStepping' or 'Step' on the pipeline,
+                // which causes the pipeline commands to be disposed.
+                return MshCommandRuntime.StaticEmptyArray;
+            }
+
             // If the error queue has been linked, it's up to the link to
             // deal with the output. Don't do anything here...
             if (!_linkedErrorOutput)
             {
-                // Retrieve any accumulated error objects from each of the pipes
-                // and add them to the error results hash table.
-                for (int i = 0; i < _commands.Count; i++)
+                foreach (CommandProcessorBase commandProcessor in _commands)
                 {
-                    CommandProcessorBase commandProcessor = _commands[i];
-                    if (commandProcessor == null
-                        || commandProcessor.CommandRuntime == null)
-                    {
-                        // "null command or request or ErrorOutputPipe " + i
-                        throw PSTraceSource.NewInvalidOperationException();
-                    }
+                    ValidateCommandProcessorNotNull(commandProcessor, errorMessage: null);
 
                     Pipe ErrorPipe = commandProcessor.CommandRuntime.ErrorOutputPipe;
                     if (ErrorPipe.DownstreamCmdlet == null && !ErrorPipe.Empty)
                     {
-                        // 2003/10/02-JonN
-                        // Do not return the same error results more than once
+                        // Clear the error pipe if it's not empty and will not be consumed.
                         ErrorPipe.Clear();
                     }
                 }
@@ -1211,26 +1289,18 @@ private Array RetrieveResults()
             // If the success queue has been linked, it's up to the link to
             // deal with the output. Don't do anything here...
             if (_linkedSuccessOutput)
+            {
                 return MshCommandRuntime.StaticEmptyArray;
+            }
 
             CommandProcessorBase LastCommandProcessor = _commands[_commands.Count - 1];
-            if (LastCommandProcessor == null
-                || LastCommandProcessor.CommandRuntime == null)
-            {
-                // "PipelineProcessor.RetrieveResults(): LastCommandProcessor == null"
-                throw PSTraceSource.NewInvalidOperationException();
-            }
+            ValidateCommandProcessorNotNull(LastCommandProcessor, errorMessage: null);
 
-            Array results =
-                LastCommandProcessor.CommandRuntime.GetResultsAsArray();
+            Array results = LastCommandProcessor.CommandRuntime.GetResultsAsArray();
 
-            // 2003/10/02-JonN
             // Do not return the same results more than once
             LastCommandProcessor.CommandRuntime.OutputPipe.Clear();
-
-            if (results == null)
-                return MshCommandRuntime.StaticEmptyArray;
-            return results;
+            return results is null ? MshCommandRuntime.StaticEmptyArray : results;
         }
 
         /// <summary>
@@ -1244,12 +1314,7 @@ internal void LinkPipelineSuccessOutput(Pipe pipeToUse)
             Dbg.Assert(pipeToUse != null, "Caller should verify pipeToUse != null");
 
             CommandProcessorBase LastCommandProcessor = _commands[_commands.Count - 1];
-            if (LastCommandProcessor == null
-                || LastCommandProcessor.CommandRuntime == null)
-            {
-                // "PipelineProcessor.RetrieveResults(): LastCommandProcessor == null"
-                throw PSTraceSource.NewInvalidOperationException();
-            }
+            ValidateCommandProcessorNotNull(LastCommandProcessor, errorMessage: null);
 
             LastCommandProcessor.CommandRuntime.OutputPipe = pipeToUse;
             _linkedSuccessOutput = true;
@@ -1259,15 +1324,9 @@ internal void LinkPipelineErrorOutput(Pipe pipeToUse)
         {
             Dbg.Assert(pipeToUse != null, "Caller should verify pipeToUse != null");
 
-            for (int i = 0; i < _commands.Count; i++)
+            foreach (CommandProcessorBase commandProcessor in _commands)
             {
-                CommandProcessorBase commandProcessor = _commands[i];
-                if (commandProcessor == null
-                    || commandProcessor.CommandRuntime == null)
-                {
-                    // "null command or request or ErrorOutputPipe " + i
-                    throw PSTraceSource.NewInvalidOperationException();
-                }
+                ValidateCommandProcessorNotNull(commandProcessor, errorMessage: null);
 
                 if (commandProcessor.CommandRuntime.ErrorOutputPipe.DownstreamCmdlet == null)
                 {
@@ -1288,62 +1347,65 @@ internal void LinkPipelineErrorOutput(Pipe pipeToUse)
         private void DisposeCommands()
         {
             // Note that this is not in a lock.
-            // We do not make Dispose() wait until StopProcessing()
-            // has completed.
+            // We do not make Dispose() wait until StopProcessing() has completed.
             _stopping = true;
 
+            if (_commands is null && _redirectionPipes is null)
+            {
+                // Commands were already disposed.
+                return;
+            }
+
             LogToEventLog();
 
-            if (_commands != null)
+            if (_commands is not null)
             {
-                for (int i = 0; i < _commands.Count; i++)
+                foreach (CommandProcessorBase commandProcessor in _commands)
                 {
-                    CommandProcessorBase commandProcessor = _commands[i];
-                    if (commandProcessor != null)
+                    if (commandProcessor is null)
                     {
-#pragma warning disable 56500
-                        // If Dispose throws an exception, record it as a
-                        // pipeline failure and continue disposing cmdlets.
-                        try
-                        {
-                            commandProcessor.CommandRuntime.RemoveVariableListsInPipe();
-                            commandProcessor.Dispose();
-                        }
-                        // 2005/04/13-JonN: The only vaguely plausible reason
-                        // for a failure here is an exception in Command.Dispose.
-                        // As such, this should be covered by the overall
-                        // exemption.
-                        catch (Exception e) // Catch-all OK, 3rd party callout.
-                        {
-                            InvocationInfo myInvocation = null;
-                            if (commandProcessor.Command != null)
-                                myInvocation = commandProcessor.Command.MyInvocation;
+                        continue;
+                    }
 
-                            ProviderInvocationException pie =
-                                e as ProviderInvocationException;
-                            if (pie != null)
+                    // If Dispose throws an exception, record it as a pipeline failure and continue disposing cmdlets.
+                    try
+                    {
+                        // Only cmdlets can have variables defined via the common parameters.
+                        // We handle the cleanup of those variables only if we need to.
+                        if (commandProcessor is CommandProcessor)
+                        {
+                            if (commandProcessor.Command is not PSScriptCmdlet)
                             {
-                                e = new CmdletProviderInvocationException(
-                                    pie,
-                                    myInvocation);
+                                // For script cmdlets, the variable lists were already removed when exiting a scope.
+                                // So we only need to take care of binary cmdlets here.
+                                commandProcessor.CommandRuntime.RemoveVariableListsInPipe();
                             }
-                            else
-                            {
-                                e = new CmdletInvocationException(
-                                    e,
-                                    myInvocation);
 
-                                // Log a command health event
+                            // Remove the pipeline variable if we need to.
+                            commandProcessor.CommandRuntime.RemovePipelineVariable();
+                        }
 
-                                MshLog.LogCommandHealthEvent(
-                                    commandProcessor.Command.Context,
-                                    e,
-                                    Severity.Warning);
-                            }
+                        commandProcessor.Dispose();
+                    }
+                    catch (Exception e)
+                    {
+                        // The only vaguely plausible reason for a failure here is an exception in 'Command.Dispose'.
+                        // As such, this should be covered by the overall exemption.
+                        InvocationInfo myInvocation = commandProcessor.Command?.MyInvocation;
 
-                            RecordFailure(e, commandProcessor.Command);
+                        if (e is ProviderInvocationException pie)
+                        {
+                            e = new CmdletProviderInvocationException(pie, myInvocation);
                         }
-#pragma warning restore 56500
+                        else
+                        {
+                            e = new CmdletInvocationException(e, myInvocation);
+
+                            // Log a command health event
+                            MshLog.LogCommandHealthEvent(commandProcessor.Command.Context, e, Severity.Warning);
+                        }
+
+                        RecordFailure(e, commandProcessor.Command);
                     }
                 }
             }
@@ -1351,25 +1413,31 @@ private void DisposeCommands()
             _commands = null;
 
             // Now dispose any pipes that were used for redirection...
-            if (_redirectionPipes != null)
+            if (_redirectionPipes is not null)
             {
                 foreach (PipelineProcessor redirPipe in _redirectionPipes)
                 {
-#pragma warning disable 56500
+                    if (redirPipe is null)
+                    {
+                        continue;
+                    }
+
+                    // Clean resources for script commands.
+                    // It is possible (though very unlikely) that the call to 'Step' on the redirection pipeline failed.
+                    // In such a case, 'Clean' would have run and the 'pipelineProcessor' would have been disposed.
+                    // Therefore, calling 'Clean' again will simply return, because '_commands' was already set to null.
+                    redirPipe.Clean();
+
                     // The complicated logic of disposing the commands is taken care
                     // of through recursion, this routine should not be getting any
                     // exceptions...
                     try
                     {
-                        if (redirPipe != null)
-                        {
-                            redirPipe.Dispose();
-                        }
+                        redirPipe.Dispose();
                     }
                     catch (Exception)
                     {
                     }
-#pragma warning restore 56500
                 }
             }
 
@@ -1383,7 +1451,7 @@ private void DisposeCommands()
         /// </summary>
         /// <param name="e">Error which terminated the pipeline.</param>
         /// <param name="command">Command against which to log SecondFailure.</param>
-        /// <returns>True iff the pipeline was not already stopped.</returns>
+        /// <returns>True if-and-only-if the pipeline was not already stopped.</returns>
         internal bool RecordFailure(Exception e, InternalCommand command)
         {
             bool wasStopping = false;
@@ -1393,11 +1461,9 @@ internal bool RecordFailure(Exception e, InternalCommand command)
                 {
                     _firstTerminatingError = ExceptionDispatchInfo.Capture(e);
                 }
-                // 905900-2005/05/12
-                // Drop5: Error Architecture: Log/trace second and subsequent RecordFailure
-                // Note that the pipeline could have been stopped asynchronously
-                // before hitting the error, therefore we check whether
-                // firstTerminatingError is PipelineStoppedException.
+                // Error Architecture: Log/trace second and subsequent RecordFailure.
+                // Note that the pipeline could have been stopped asynchronously before hitting the error,
+                // therefore we check whether '_firstTerminatingError' is 'PipelineStoppedException'.
                 else if (_firstTerminatingError.SourceException is not PipelineStoppedException
                     && command?.Context != null)
                 {
@@ -1416,11 +1482,10 @@ internal bool RecordFailure(Exception e, InternalCommand command)
                             ex.GetType().Name,
                             ex.StackTrace
                         );
-                        InvalidOperationException ioe
-                            = new InvalidOperationException(message, ex);
+
                         MshLog.LogCommandHealthEvent(
                             command.Context,
-                            ioe,
+                            new InvalidOperationException(message, ex),
                             Severity.Warning);
                     }
                 }
diff --git a/src/System.Management.Automation/engine/regex.cs b/src/System.Management.Automation/engine/regex.cs
index 3f827dc08f8..6e0ef9741d6 100644
--- a/src/System.Management.Automation/engine/regex.cs
+++ b/src/System.Management.Automation/engine/regex.cs
@@ -57,12 +57,12 @@ public sealed class WildcardPattern
         // The size is less than MaxShortPath = 260.
         private const int StackAllocThreshold = 256;
 
+        // chars that are considered special in a wildcard pattern
+        private const string SpecialChars = "*?[]`";
+
         // we convert a wildcard pattern to a predicate
         private Predicate<string> _isMatch;
 
-        // chars that are considered special in a wildcard pattern
-        private static readonly char[] s_specialChars = new[] { '*', '?', '[', ']', '`' };
-
         // static match-all delegate that is shared by all WildcardPattern instances
         private static readonly Predicate<string> s_matchAll = _ => true;
 
@@ -73,18 +73,6 @@ public sealed class WildcardPattern
         // Default is WildcardOptions.None.
         internal WildcardOptions Options { get; }
 
-        /// <summary>
-        /// Wildcard pattern converted to regex pattern.
-        /// </summary>
-        internal string PatternConvertedToRegex
-        {
-            get
-            {
-                var patternRegex = WildcardPatternToRegexParser.Parse(this);
-                return patternRegex.ToString();
-            }
-        }
-
         /// <summary>
         /// Initializes and instance of the WildcardPattern class
         /// for the specified wildcard pattern.
@@ -173,8 +161,8 @@ StringComparison GetStringComparison()
                 return;
             }
 
-            int index = Pattern.IndexOfAny(s_specialChars);
-            if (index == -1)
+            int index = Pattern.AsSpan().IndexOfAny(SpecialChars);
+            if (index < 0)
             {
                 // No special characters present in the pattern, so we can just do a string comparison.
                 _isMatch = str => string.Equals(str, Pattern, GetStringComparison());
@@ -205,6 +193,35 @@ public bool IsMatch(string input)
             return input != null && _isMatch(input);
         }
 
+        /// <summary>
+        /// Converts the wildcard pattern to its regular expression equivalent.
+        /// </summary>
+        /// <returns>
+        /// A <see cref="Regex"/> object that represents the regular expression equivalent of the wildcard pattern.
+        /// The regex is configured with options matching the wildcard pattern's options.
+        /// </returns>
+        /// <remarks>
+        /// This method converts a wildcard pattern to a regular expression.
+        /// The conversion follows these rules:
+        /// <list type="bullet">
+        /// <item><description>* (asterisk) converts to .* (matches any string)</description></item>
+        /// <item><description>? (question mark) converts to . (matches any single character)</description></item>
+        /// <item><description>[abc] (bracket expression) converts to [abc] (matches any character in the set)</description></item>
+        /// <item><description>Literal characters are escaped as needed for regex</description></item>
+        /// </list>
+        /// </remarks>
+        /// <example>
+        /// <code>
+        /// var pattern = new WildcardPattern("*.txt");
+        /// Regex regex = pattern.ToRegex();
+        /// // regex.ToString() returns: "\.txt$"
+        /// </code>
+        /// </example>
+        public Regex ToRegex()
+        {
+            return WildcardPatternToRegexParser.Parse(this);
+        }
+
         /// <summary>
         /// Escape special chars, except for those specified in <paramref name="charsNotToEscape"/>, in a string by replacing them with their escape codes.
         /// </summary>
@@ -238,9 +255,9 @@ internal static string Escape(string pattern, char[] charsNotToEscape)
                 char ch = pattern[i];
 
                 //
-                // if it is a wildcard char, escape it
+                // if it is a special char, escape it
                 //
-                if (IsWildcardChar(ch) && !charsNotToEscape.Contains(ch))
+                if (SpecialChars.Contains(ch) && !charsNotToEscape.Contains(ch))
                 {
                     temp[tempIndex++] = escapeChar;
                 }
@@ -314,6 +331,43 @@ public static bool ContainsWildcardCharacters(string pattern)
             return result;
         }
 
+        /// <summary>
+        /// Checks if the string contains a left bracket "[" followed by a right bracket "]" after any number of characters.
+        /// </summary>
+        /// <param name="pattern"> The string to check.</param>
+        /// <returns>Returns true if the string contains both a left and right bracket "[" "]" and if the right bracket comes after the left bracket.</returns>
+        internal static bool ContainsRangeWildcard(string pattern)
+        {
+            if (string.IsNullOrEmpty(pattern))
+            {
+                return false;
+            }
+
+            bool foundStart = false;
+            bool result = false;
+            for (int index = 0; index < pattern.Length; ++index)
+            {
+                if (pattern[index] is '[')
+                {
+                    foundStart = true;
+                    continue;
+                }
+
+                if (foundStart && pattern[index] is ']')
+                {
+                    result = true;
+                    break;
+                }
+
+                if (pattern[index] == escapeChar)
+                {
+                    ++index;
+                }
+            }
+
+            return result;
+        }
+
         /// <summary>
         /// Unescapes any escaped characters in the input string.
         /// </summary>
@@ -432,7 +486,6 @@ public string ToWql()
     /// <summary>
     /// Thrown when a wildcard pattern is invalid.
     /// </summary>
-    [Serializable]
     public class WildcardPatternException : RuntimeException
     {
         /// <summary>
@@ -447,10 +500,7 @@ public class WildcardPatternException : RuntimeException
         internal WildcardPatternException(ErrorRecord errorRecord)
             : base(RetrieveMessage(errorRecord))
         {
-            if (errorRecord == null)
-            {
-                throw new ArgumentNullException(nameof(errorRecord));
-            }
+            ArgumentNullException.ThrowIfNull(errorRecord);
 
             _errorRecord = errorRecord;
         }
@@ -491,10 +541,11 @@ public WildcardPatternException(string message,
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected WildcardPatternException(SerializationInfo info,
                                         StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
     }
 
@@ -1001,7 +1052,7 @@ internal bool IsMatch(string str)
             }
         }
 
-        private class PatternPositionsVisitor : IDisposable
+        private sealed class PatternPositionsVisitor : IDisposable
         {
             private readonly int _lengthOfPattern;
 
@@ -1122,7 +1173,7 @@ public override void ProcessEndOfString(
             }
         }
 
-        private class LiteralCharacterElement : QuestionMarkElement
+        private sealed class LiteralCharacterElement : QuestionMarkElement
         {
             private readonly char _literalCharacter;
 
@@ -1148,7 +1199,7 @@ public override void ProcessStringCharacter(
             }
         }
 
-        private class BracketExpressionElement : QuestionMarkElement
+        private sealed class BracketExpressionElement : QuestionMarkElement
         {
             private readonly Regex _regex;
 
@@ -1173,7 +1224,7 @@ public override void ProcessStringCharacter(
             }
         }
 
-        private class AsterixElement : PatternElement
+        private sealed class AsterixElement : PatternElement
         {
             public override void ProcessStringCharacter(
                             char currentStringCharacter,
@@ -1197,7 +1248,7 @@ public override void ProcessEndOfString(
             }
         }
 
-        private class MyWildcardPatternParser : WildcardPatternParser
+        private sealed class MyWildcardPatternParser : WildcardPatternParser
         {
             private readonly List<PatternElement> _patternElements = new List<PatternElement>();
             private CharacterNormalizer _characterNormalizer;
diff --git a/src/System.Management.Automation/engine/remoting/client/ClientMethodExecutor.cs b/src/System.Management.Automation/engine/remoting/client/ClientMethodExecutor.cs
index 120ca07a5af..9d52bcb4dc9 100644
--- a/src/System.Management.Automation/engine/remoting/client/ClientMethodExecutor.cs
+++ b/src/System.Management.Automation/engine/remoting/client/ClientMethodExecutor.cs
@@ -13,7 +13,7 @@ namespace System.Management.Automation.Remoting
     /// <summary>
     /// Executes methods on the client.
     /// </summary>
-    internal class ClientMethodExecutor
+    internal sealed class ClientMethodExecutor
     {
         /// <summary>
         /// Transport manager.
@@ -133,7 +133,10 @@ internal static void Dispatch(
         /// </summary>
         private static bool IsRunspacePushed(PSHost host)
         {
-            if (!(host is IHostSupportsInteractiveSession host2)) { return false; }
+            if (host is not IHostSupportsInteractiveSession host2)
+            {
+                return false;
+            }
 
             // IsRunspacePushed can throw (not implemented exception)
             try
@@ -159,10 +162,7 @@ internal void Execute(PSDataCollectionStream<ErrorRecord> errorStream)
                 {
                     try
                     {
-                        if (_clientHost.UI != null)
-                        {
-                            _clientHost.UI.WriteErrorLine(errorRecord.ToString());
-                        }
+                        _clientHost.UI?.WriteErrorLine(errorRecord.ToString());
                     }
                     catch (Exception)
                     {
diff --git a/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs b/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs
index 4ea06ea2feb..631e49fc189 100644
--- a/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs
+++ b/src/System.Management.Automation/engine/remoting/client/ClientRemotePowerShell.cs
@@ -15,11 +15,11 @@ namespace System.Management.Automation.Runspaces.Internal
     /// PowerShell client side proxy base which handles invocation
     /// of powershell on a remote machine.
     /// </summary>
-    internal class ClientRemotePowerShell : IDisposable
+    internal sealed class ClientRemotePowerShell : IDisposable
     {
         #region Tracer
 
-        [TraceSourceAttribute("CRPS", "ClientRemotePowerShell")]
+        [TraceSource("CRPS", "ClientRemotePowerShell")]
         private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("CRPS", "ClientRemotePowerShellBase");
 
         #endregion Tracer
@@ -166,10 +166,7 @@ internal void UnblockCollections()
 
             outputstream.Close();
             errorstream.Close();
-            if (inputstream != null)
-            {
-                inputstream.Close();
-            }
+            inputstream?.Close();
         }
 
         /// <summary>
@@ -902,28 +899,28 @@ private void HandleRobustConnectionNotification(
 
         #endregion Private Methods
 
-        #region Protected Members
-
-        protected ObjectStreamBase inputstream;
-        protected ObjectStreamBase errorstream;
-        protected PSInformationalBuffers informationalBuffers;
-        protected PowerShell shell;
-        protected Guid clientRunspacePoolId;
-        protected bool noInput;
-        protected PSInvocationSettings settings;
-        protected ObjectStreamBase outputstream;
-        protected string computerName;
-        protected ClientPowerShellDataStructureHandler dataStructureHandler;
-        protected bool stopCalled = false;
-        protected PSHost hostToUse;
-        protected RemoteRunspacePoolInternal runspacePool;
-
-        protected const string WRITE_DEBUG_LINE = "WriteDebugLine";
-        protected const string WRITE_VERBOSE_LINE = "WriteVerboseLine";
-        protected const string WRITE_WARNING_LINE = "WriteWarningLine";
-        protected const string WRITE_PROGRESS = "WriteProgress";
-
-        protected bool initialized = false;
+        #region Private Fields
+
+        private ObjectStreamBase inputstream;
+        private ObjectStreamBase errorstream;
+        private PSInformationalBuffers informationalBuffers;
+        private readonly PowerShell shell;
+        private readonly Guid clientRunspacePoolId;
+        private bool noInput;
+        private PSInvocationSettings settings;
+        private ObjectStreamBase outputstream;
+        private readonly string computerName;
+        private ClientPowerShellDataStructureHandler dataStructureHandler;
+        private bool stopCalled = false;
+        private PSHost hostToUse;
+        private readonly RemoteRunspacePoolInternal runspacePool;
+
+        private const string WRITE_DEBUG_LINE = "WriteDebugLine";
+        private const string WRITE_VERBOSE_LINE = "WriteVerboseLine";
+        private const string WRITE_WARNING_LINE = "WriteWarningLine";
+        private const string WRITE_PROGRESS = "WriteProgress";
+
+        private bool initialized = false;
         /// <summary>
         /// This queue is for the state change events that resulted in closing the underlying
         /// datastructure handler. We cannot send the state back to the upper layers until
@@ -933,33 +930,20 @@ private void HandleRobustConnectionNotification(
 
         private PSConnectionRetryStatus _connectionRetryStatus = PSConnectionRetryStatus.None;
 
-        #endregion Protected Members
+        #endregion Private Fields
 
         #region IDisposable
 
         /// <summary>
-        /// Public interface for dispose.
+        /// Release all resources.
         /// </summary>
         public void Dispose()
         {
-            Dispose(true);
-
-            GC.SuppressFinalize(this);
+            // inputstream.Dispose();
+            // outputstream.Dispose();
+            // errorstream.Dispose();
         }
 
-        /// <summary>
-        /// Release all resources.
-        /// </summary>
-        /// <param name="disposing">If true, release all managed resources.</param>
-        protected void Dispose(bool disposing)
-        {
-            if (disposing)
-            {
-                // inputstream.Dispose();
-                // outputstream.Dispose();
-                // errorstream.Dispose();
-            }
-        }
         #endregion IDisposable
     }
 
diff --git a/src/System.Management.Automation/engine/remoting/client/Job.cs b/src/System.Management.Automation/engine/remoting/client/Job.cs
index 657b72bef7a..adf47d04cab 100644
--- a/src/System.Management.Automation/engine/remoting/client/Job.cs
+++ b/src/System.Management.Automation/engine/remoting/client/Job.cs
@@ -93,7 +93,6 @@ public enum JobState
     /// Defines exception which is thrown when state of the PSJob is different
     /// from the expected state.
     /// </summary>
-    [Serializable]
     public class InvalidJobStateException : SystemException
     {
         /// <summary>
@@ -191,10 +190,11 @@ internal InvalidJobStateException(JobState currentState)
         /// The <see cref="StreamingContext"/> that contains contextual information
         /// about the source or destination.
         /// </param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")] 
         protected
         InvalidJobStateException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -633,10 +633,7 @@ public IList<Job> ChildJobs
                 {
                     lock (syncObject)
                     {
-                        if (_childJobs == null)
-                        {
-                            _childJobs = new List<Job>();
-                        }
+                        _childJobs ??= new List<Job>();
                     }
                 }
 
@@ -644,7 +641,7 @@ public IList<Job> ChildJobs
             }
         }
 
-        ///<summary>
+        /// <summary>
         /// Success status of the command execution.
         /// </summary>
         public abstract string StatusMessage { get; }
@@ -755,10 +752,10 @@ private void WriteError(Cmdlet cmdlet, ErrorRecord errorRecord)
 
         private static Exception GetExceptionFromErrorRecord(ErrorRecord errorRecord)
         {
-            if (!(errorRecord.Exception is RuntimeException runtimeException))
+            if (errorRecord.Exception is not RuntimeException runtimeException)
                 return null;
 
-            if (!(runtimeException is RemoteException remoteException))
+            if (runtimeException is not RemoteException remoteException)
                 return null;
 
             PSPropertyInfo wasThrownFromThrow =
@@ -1014,11 +1011,17 @@ protected virtual void DoUnloadJobStreams()
         /// </summary>
         public void LoadJobStreams()
         {
-            if (_jobStreamsLoaded) return;
+            if (_jobStreamsLoaded)
+            {
+                return;
+            }
 
             lock (syncObject)
             {
-                if (_jobStreamsLoaded) return;
+                if (_jobStreamsLoaded)
+                {
+                    return;
+                }
 
                 _jobStreamsLoaded = true;
             }
@@ -1451,10 +1454,7 @@ internal void SetJobState(JobState state, Exception reason)
                 {
                     lock (syncObject)
                     {
-                        if (_finished != null)
-                        {
-                            _finished.Set();
-                        }
+                        _finished?.Set();
                     }
                 }
 #pragma warning restore 56500
@@ -1911,7 +1911,7 @@ internal List<Job> GetJobsForComputer(string computerName)
 
             foreach (Job j in ChildJobs)
             {
-                if (!(j is PSRemotingChildJob child)) continue;
+                if (j is not PSRemotingChildJob child) continue;
                 if (string.Equals(child.Runspace.ConnectionInfo.ComputerName, computerName,
                                 StringComparison.OrdinalIgnoreCase))
                 {
@@ -1934,7 +1934,7 @@ internal List<Job> GetJobsForRunspace(PSSession runspace)
 
             foreach (Job j in ChildJobs)
             {
-                if (!(j is PSRemotingChildJob child)) continue;
+                if (j is not PSRemotingChildJob child) continue;
                 if (child.Runspace.InstanceId.Equals(runspace.InstanceId))
                 {
                     returnJobList.Add(child);
@@ -1957,7 +1957,7 @@ internal List<Job> GetJobsForOperation(IThrottleOperation operation)
 
             foreach (Job j in ChildJobs)
             {
-                if (!(j is PSRemotingChildJob child)) continue;
+                if (j is not PSRemotingChildJob child) continue;
                 if (child.Helper.Equals(helper))
                 {
                     returnJobList.Add(child);
@@ -2048,7 +2048,7 @@ private static void SubmitAndWaitForConnect(List<IThrottleOperation> connectJobO
         /// <summary>
         /// Simple throttle operation class for connecting jobs.
         /// </summary>
-        private class ConnectJobOperation : IThrottleOperation
+        private sealed class ConnectJobOperation : IThrottleOperation
         {
             private readonly PSRemotingChildJob _psRemoteChildJob;
 
@@ -2360,7 +2360,7 @@ private void SetStatusMessage()
 
         #region finish logic
 
-        // This variable is set to true if atleast one child job failed.
+        // This variable is set to true if at least one child job failed.
         private bool _atleastOneChildJobFailed = false;
 
         // count of number of child jobs which have finished
@@ -3226,7 +3226,7 @@ protected virtual void HandleOperationComplete(object sender, OperationStateEven
             // no pipeline is created and no pipeline state changed event is raised.
             // We can wait for throttle complete, but it is raised only when all the
             // operations are completed and this means that status of job is not updated
-            // untill Operation Complete.
+            // until Operation Complete.
             ExecutionCmdletHelper helper = sender as ExecutionCmdletHelper;
             Dbg.Assert(helper != null, "Sender of OperationComplete has to be ExecutionCmdletHelper");
 
@@ -3313,8 +3313,7 @@ protected void ProcessJobFailure(ExecutionCmdletHelper helper, out Exception fai
                     errorId = "InvalidSessionState";
                     if (!string.IsNullOrEmpty(failureException.Source))
                     {
-                        errorId = string.Format(System.Globalization.CultureInfo.InvariantCulture,
-                            "{0},{1}", errorId, failureException.Source);
+                        errorId = string.Create(System.Globalization.CultureInfo.InvariantCulture, $"{errorId},{failureException.Source}");
                     }
                 }
 
@@ -3371,13 +3370,10 @@ protected void ProcessJobFailure(ExecutionCmdletHelper helper, out Exception fai
                     }
                 }
 
-                if (failureException == null)
-                {
-                    failureException = new RuntimeException(
-                        PSRemotingErrorInvariants.FormatResourceString(
-                            RemotingErrorIdStrings.RemoteRunspaceOpenUnknownState,
-                            runspace.RunspaceStateInfo.State));
-                }
+                failureException ??= new RuntimeException(
+                    PSRemotingErrorInvariants.FormatResourceString(
+                        RemotingErrorIdStrings.RemoteRunspaceOpenUnknownState,
+                        runspace.RunspaceStateInfo.State));
 
                 failureErrorRecord = new ErrorRecord(failureException, targetObject,
                                 fullyQualifiedErrorId, ErrorCategory.OpenError,
@@ -3926,7 +3922,7 @@ public override void SetBreakpoints(IEnumerable<Breakpoint> breakpoints, int? ru
         /// </summary>
         /// <param name="id">Id of the breakpoint you want.</param>
         /// <param name="runspaceId">The runspace id of the runspace you want to interact with. A null value will use the current runspace.</param>
-        /// <returns>A a breakpoint with the specified id.</returns>
+        /// <returns>A breakpoint with the specified id.</returns>
         public override Breakpoint GetBreakpoint(int id, int? runspaceId) =>
             _wrappedDebugger.GetBreakpoint(id, runspaceId);
 
@@ -4080,10 +4076,7 @@ public override void SetDebuggerStepMode(bool enabled)
         internal void CheckStateAndRaiseStopEvent()
         {
             RemoteDebugger remoteDebugger = _wrappedDebugger as RemoteDebugger;
-            if (remoteDebugger != null)
-            {
-                remoteDebugger.CheckStateAndRaiseStopEvent();
-            }
+            remoteDebugger?.CheckStateAndRaiseStopEvent();
         }
 
         /// <summary>
@@ -4131,13 +4124,7 @@ private Pipeline DrainAndBlockRemoteOutput()
             return null;
         }
 
-        private static void RestoreRemoteOutput(Pipeline runningCmd)
-        {
-            if (runningCmd != null)
-            {
-                runningCmd.ResumeIncomingData();
-            }
-        }
+        private static void RestoreRemoteOutput(Pipeline runningCmd) => runningCmd?.ResumeIncomingData();
 
         private void HandleBreakpointUpdated(object sender, BreakpointUpdatedEventArgs e)
         {
diff --git a/src/System.Management.Automation/engine/remoting/client/Job2.cs b/src/System.Management.Automation/engine/remoting/client/Job2.cs
index ae5976ec9f8..a5ac9e5ec0b 100644
--- a/src/System.Management.Automation/engine/remoting/client/Job2.cs
+++ b/src/System.Management.Automation/engine/remoting/client/Job2.cs
@@ -93,8 +93,7 @@ public List<CommandParameterCollection> StartParameters
                 {
                     lock (_syncobject)
                     {
-                        if (_parameters == null)
-                            _parameters = new List<CommandParameterCollection>();
+                        _parameters ??= new List<CommandParameterCollection>();
                     }
                 }
 
@@ -506,7 +505,7 @@ public sealed class ContainerParentJob : Job2
 
         private const int DisposedTrue = 1;
         private const int DisposedFalse = 0;
-        // This variable is set to true if atleast one child job failed.
+        // This variable is set to true if at least one child job failed.
 
         // count of number of child jobs which have finished
         private int _finishedChildJobsCount = 0;
@@ -707,10 +706,8 @@ public ContainerParentJob(string command, string name, string jobType)
         public void AddChildJob(Job2 childJob)
         {
             AssertNotDisposed();
-            if (childJob == null)
-            {
-                throw new ArgumentNullException(nameof(childJob));
-            }
+
+            ArgumentNullException.ThrowIfNull(childJob);
 
             _tracer.WriteMessage(TraceClassName, "AddChildJob", Guid.Empty, childJob, "Adding Child to Parent with InstanceId : ", InstanceId.ToString());
 
@@ -2022,11 +2019,8 @@ protected override void Dispose(bool disposing)
                     job.Dispose();
                 }
 
-                if (_jobRunning != null)
-                    _jobRunning.Dispose();
-
-                if (_jobSuspendedOrAborted != null)
-                    _jobSuspendedOrAborted.Dispose();
+                _jobRunning?.Dispose();
+                _jobSuspendedOrAborted?.Dispose();
             }
             finally
             {
@@ -2038,7 +2032,7 @@ private string ConstructLocation()
         {
             if (ChildJobs == null || ChildJobs.Count == 0)
                 return string.Empty;
-            string location = ChildJobs.Select((job) => job.Location).Aggregate((s1, s2) => s1 + ',' + s2);
+            string location = ChildJobs.Select(static (job) => job.Location).Aggregate((s1, s2) => s1 + ',' + s2);
             return location;
         }
 
@@ -2112,7 +2106,6 @@ private void UnregisterAllJobEvents()
     /// Container exception for jobs that can map errors and exceptions
     /// to specific lines in their input.
     /// </summary>
-    [Serializable]
     public class JobFailedException : SystemException
     {
         /// <summary>
@@ -2157,11 +2150,10 @@ public JobFailedException(Exception innerException, ScriptExtent displayScriptPo
         /// </summary>
         /// <param name="serializationInfo">Serialization info.</param>
         /// <param name="streamingContext">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")] 
         protected JobFailedException(SerializationInfo serializationInfo, StreamingContext streamingContext)
-            : base(serializationInfo, streamingContext)
         {
-            _reason = (Exception)serializationInfo.GetValue("Reason", typeof(Exception));
-            _displayScriptPosition = (ScriptExtent)serializationInfo.GetValue("DisplayScriptPosition", typeof(ScriptExtent));
+            throw new NotSupportedException();
         }
 
         /// <summary>
@@ -2178,22 +2170,6 @@ protected JobFailedException(SerializationInfo serializationInfo, StreamingConte
 
         private readonly ScriptExtent _displayScriptPosition;
 
-        /// <summary>
-        /// Gets the information for serialization.
-        /// </summary>
-        /// <param name="info">The standard SerializationInfo.</param>
-        /// <param name="context">The standard StreaminContext.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-                throw new ArgumentNullException(nameof(info));
-
-            base.GetObjectData(info, context);
-
-            info.AddValue("Reason", _reason);
-            info.AddValue("DisplayScriptPosition", _displayScriptPosition);
-        }
-
         /// <summary>
         /// Returns the reason for this exception.
         /// </summary>
diff --git a/src/System.Management.Automation/engine/remoting/client/JobManager.cs b/src/System.Management.Automation/engine/remoting/client/JobManager.cs
index f907cf922d8..3b2baec6654 100644
--- a/src/System.Management.Automation/engine/remoting/client/JobManager.cs
+++ b/src/System.Management.Automation/engine/remoting/client/JobManager.cs
@@ -158,7 +158,11 @@ internal static void SaveJobId(Guid instanceId, int id, string typeName)
         {
             lock (s_syncObject)
             {
-                if (s_jobIdsForReuse.ContainsKey(instanceId)) return;
+                if (s_jobIdsForReuse.ContainsKey(instanceId))
+                {
+                    return;
+                }
+
                 s_jobIdsForReuse.Add(instanceId, new KeyValuePair<int, string>(id, typeName));
             }
         }
@@ -176,10 +180,7 @@ internal static void SaveJobId(Guid instanceId, int id, string typeName)
         /// </exception>
         public Job2 NewJob(JobDefinition definition)
         {
-            if (definition == null)
-            {
-                throw new ArgumentNullException(nameof(definition));
-            }
+            ArgumentNullException.ThrowIfNull(definition);
 
             JobSourceAdapter sourceAdapter = GetJobSourceAdapter(definition);
             Job2 newJob;
@@ -216,10 +217,7 @@ public Job2 NewJob(JobDefinition definition)
         /// </exception>
         public Job2 NewJob(JobInvocationInfo specification)
         {
-            if (specification == null)
-            {
-                throw new ArgumentNullException(nameof(specification));
-            }
+            ArgumentNullException.ThrowIfNull(specification);
 
             if (specification.Definition == null)
             {
@@ -593,7 +591,11 @@ private List<Job2> GetFilteredJobs(
                     }
 #pragma warning restore 56500
 
-                    if (jobs == null) continue;
+                    if (jobs == null)
+                    {
+                        continue;
+                    }
+
                     allJobs.AddRange(jobs);
                 }
             }
@@ -758,7 +760,10 @@ private Job2 GetJobThroughId<T>(Guid guid, int id, Cmdlet cmdlet, bool writeErro
                         WriteErrorOrWarning(writeErrorOnException, cmdlet, exception, "JobSourceAdapterGetJobByInstanceIdError", sourceAdapter);
                     }
 
-                    if (job == null) continue;
+                    if (job == null)
+                    {
+                        continue;
+                    }
 
                     if (writeObject)
                     {
@@ -934,12 +939,20 @@ internal bool RemoveJob(Job2 job, Cmdlet cmdlet, bool writeErrorOnException, boo
 
                         // sourceAdapter.GetJobByInstanceId() threw unknown exception.
                         _tracer.TraceException(exception);
-                        if (throwExceptions) throw;
+                        if (throwExceptions)
+                        {
+                            throw;
+                        }
+
                         WriteErrorOrWarning(writeErrorOnException, cmdlet, exception, "JobSourceAdapterGetJobError", sourceAdapter);
                     }
 #pragma warning restore 56500
 
-                    if (foundJob == null) continue;
+                    if (foundJob == null)
+                    {
+                        continue;
+                    }
+
                     jobFound = true;
                     RemoveJobIdForReuse(foundJob);
 
@@ -957,7 +970,11 @@ internal bool RemoveJob(Job2 job, Cmdlet cmdlet, bool writeErrorOnException, boo
                         // sourceAdapter.RemoveJob() threw unknown exception.
 
                         _tracer.TraceException(exception);
-                        if (throwExceptions) throw;
+                        if (throwExceptions)
+                        {
+                            throw;
+                        }
+
                         WriteErrorOrWarning(writeErrorOnException, cmdlet, exception, "JobSourceAdapterRemoveJobError", sourceAdapter);
                     }
 #pragma warning restore 56500
diff --git a/src/System.Management.Automation/engine/remoting/client/JobSourceAdapter.cs b/src/System.Management.Automation/engine/remoting/client/JobSourceAdapter.cs
index f5a5022d705..85cd6c7ba1f 100644
--- a/src/System.Management.Automation/engine/remoting/client/JobSourceAdapter.cs
+++ b/src/System.Management.Automation/engine/remoting/client/JobSourceAdapter.cs
@@ -20,7 +20,6 @@ namespace System.Management.Automation
     /// </summary>
     /// <remarks>The actual implementation of this class will
     /// happen in M2</remarks>
-    [Serializable]
     public class JobDefinition : ISerializable
     {
         private string _name;
@@ -172,7 +171,6 @@ public virtual void GetObjectData(SerializationInfo info, StreamingContext conte
     /// CommandParameterCollection adds a public
     /// constructor.The actual implementation of
     /// this class will happen in M2</remarks>
-    [Serializable]
     public class JobInvocationInfo : ISerializable
     {
         /// <summary>
@@ -361,7 +359,7 @@ private static CommandParameterCollection ConvertDictionaryToParameterCollection
                 return null;
             CommandParameterCollection paramCollection = new CommandParameterCollection();
             foreach (CommandParameter paramItem in
-                parameters.Select(param => new CommandParameter(param.Key, param.Value)))
+                parameters.Select(static param => new CommandParameter(param.Key, param.Value)))
             {
                 paramCollection.Add(paramItem);
             }
@@ -415,7 +413,7 @@ public void StoreJobIdForReuse(Job2 job, bool recurse)
                 duplicateDetector.Add(job.InstanceId, job.InstanceId);
                 foreach (Job child in job.ChildJobs)
                 {
-                    if (!(child is Job2 childJob)) continue;
+                    if (child is not Job2 childJob) continue;
                     StoreJobIdForReuseHelper(duplicateDetector, childJob, true);
                 }
             }
@@ -431,7 +429,7 @@ private void StoreJobIdForReuseHelper(Hashtable duplicateDetector, Job2 job, boo
             if (!recurse || job.ChildJobs == null) return;
             foreach (Job child in job.ChildJobs)
             {
-                if (!(child is Job2 childJob)) continue;
+                if (child is not Job2 childJob) continue;
                 StoreJobIdForReuseHelper(duplicateDetector, childJob, recurse);
             }
         }
diff --git a/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs b/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs
index 94584c613f5..983180bd5ca 100644
--- a/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs
+++ b/src/System.Management.Automation/engine/remoting/client/RemoteRunspacePoolInternal.cs
@@ -23,7 +23,7 @@ namespace System.Management.Automation.Runspaces.Internal
     /// Class which supports pooling remote powerShell runspaces
     /// on the client.
     /// </summary>
-    internal class RemoteRunspacePoolInternal : RunspacePoolInternal, IDisposable
+    internal sealed class RemoteRunspacePoolInternal : RunspacePoolInternal
     {
         #region Constructor
 
@@ -81,7 +81,7 @@ internal RemoteRunspacePoolInternal(int minRunspaces,
                     minPoolSz.ToString(CultureInfo.InvariantCulture),
                     maxPoolSz.ToString(CultureInfo.InvariantCulture));
 
-            _connectionInfo = connectionInfo.InternalCopy();
+            _connectionInfo = connectionInfo.Clone();
 
             this.host = host;
             ApplicationArguments = applicationArguments;
@@ -128,7 +128,7 @@ internal RemoteRunspacePoolInternal(Guid instanceId, string name, bool isDisconn
 
             if (connectionInfo is WSManConnectionInfo)
             {
-                _connectionInfo = connectionInfo.InternalCopy();
+                _connectionInfo = connectionInfo.Clone();
             }
             else
             {
@@ -291,7 +291,7 @@ internal override bool ResetRunspaceState()
             // version 2.3 or greater.
             Version remoteProtocolVersionDeclaredByServer = PSRemotingProtocolVersion;
             if ((remoteProtocolVersionDeclaredByServer == null) ||
-                (remoteProtocolVersionDeclaredByServer < RemotingConstants.ProtocolVersionWin10RTM))
+                (remoteProtocolVersionDeclaredByServer < RemotingConstants.ProtocolVersion_2_3))
             {
                 throw PSTraceSource.NewInvalidOperationException(RunspacePoolStrings.ResetRunspaceStateNotSupportedOnServer);
             }
@@ -347,7 +347,7 @@ internal override bool SetMaxRunspaces(int maxRunspaces)
                     return true;
                 }
 
-                // sending the message should be done withing the lock
+                // sending the message should be done within the lock
                 // to ensure that multiple calls to SetMaxRunspaces
                 // will be executed on the server in the order in which
                 // they were called in the client
@@ -410,7 +410,7 @@ internal override bool SetMinRunspaces(int minRunspaces)
                     return true;
                 }
 
-                // sending the message should be done withing the lock
+                // sending the message should be done within the lock
                 // to ensure that multiple calls to SetMinRunspaces
                 // will be executed on the server in the order in which
                 // they were called in the client
@@ -452,7 +452,7 @@ internal override int GetAvailableRunspaces()
                 // return maxrunspaces
                 if (stateInfo.State == RunspacePoolState.Opened)
                 {
-                    // sending the message should be done withing the lock
+                    // sending the message should be done within the lock
                     // to ensure that multiple calls to GetAvailableRunspaces
                     // will be executed on the server in the order in which
                     // they were called in the client
@@ -733,7 +733,7 @@ internal bool CanDisconnect
                 {
                     // Disconnect/Connect support is currently only provided by the WSMan transport
                     // that is running PSRP protocol version 2.2 and greater.
-                    return (remoteProtocolVersionDeclaredByServer >= RemotingConstants.ProtocolVersionWin8RTM &&
+                    return (remoteProtocolVersionDeclaredByServer >= RemotingConstants.ProtocolVersion_2_2 &&
                             DataStructureHandler.EndpointSupportsDisconnect);
                 }
 
@@ -1215,7 +1215,7 @@ public override Collection<PowerShell> CreateDisconnectedPowerShells(RunspacePoo
             return psCollection;
         }
 
-        ///<summary>
+        /// <summary>
         /// Returns RunspacePool capabilities.
         /// </summary>
         /// <returns>RunspacePoolCapability.</returns>
@@ -1237,7 +1237,7 @@ public override RunspacePoolCapability GetCapabilities()
 
         internal static RunspacePool[] GetRemoteRunspacePools(RunspaceConnectionInfo connectionInfo, PSHost host, TypeTable typeTable)
         {
-            if (!(connectionInfo is WSManConnectionInfo wsmanConnectionInfoParam))
+            if (connectionInfo is not WSManConnectionInfo wsmanConnectionInfoParam)
             {
                 // Disconnect-Connect currently only supported by WSMan.
                 throw new NotSupportedException();
@@ -1826,20 +1826,14 @@ private void ResetDisconnectedOnExpiresOn()
         {
             // Reset DisconnectedOn/ExpiresOn
             WSManConnectionInfo wsManConnectionInfo = _connectionInfo as WSManConnectionInfo;
-            if (wsManConnectionInfo != null)
-            {
-                wsManConnectionInfo.NullDisconnectedExpiresOn();
-            }
+            wsManConnectionInfo?.NullDisconnectedExpiresOn();
         }
 
         private void UpdateDisconnectedExpiresOn()
         {
             // Set DisconnectedOn/ExpiresOn for disconnected session.
             WSManConnectionInfo wsManConnectionInfo = _connectionInfo as WSManConnectionInfo;
-            if (wsManConnectionInfo != null)
-            {
-                wsManConnectionInfo.SetDisconnectedExpiresOnToNow();
-            }
+            wsManConnectionInfo?.SetDisconnectedExpiresOnToNow();
         }
 
         /// <summary>
@@ -1899,21 +1893,11 @@ private void WaitAndRaiseConnectEventsProc(object state)
 
         #region IDisposable
 
-        /// <summary>
-        /// Public method for Dispose.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-
-            GC.SuppressFinalize(this);
-        }
-
         /// <summary>
         /// Release all resources.
         /// </summary>
         /// <param name="disposing">If true, release all managed resources.</param>
-        public override void Dispose(bool disposing)
+        protected override void Dispose(bool disposing)
         {
             // dispose the base class before disposing dataStructure handler.
             base.Dispose(disposing);
@@ -2039,7 +2023,7 @@ internal static Collection<PSObject> GetRemoteCommands(Guid shellId, WSManConnec
                 powerShell.AddCommand("Get-WSManInstance");
 
                 // Add parameters to enumerate commands.
-                string filterStr = string.Format(CultureInfo.InvariantCulture, "ShellId='{0}'", shellId.ToString().ToUpperInvariant());
+                string filterStr = string.Create(CultureInfo.InvariantCulture, $"ShellId='{shellId.ToString().ToUpperInvariant()}'");
                 powerShell.AddParameter("ResourceURI", @"Shell/Command");
                 powerShell.AddParameter("Enumerate", true);
                 powerShell.AddParameter("Dialect", "Selector");
diff --git a/src/System.Management.Automation/engine/remoting/client/RemotingErrorRecord.cs b/src/System.Management.Automation/engine/remoting/client/RemotingErrorRecord.cs
index 0de48ff6dfc..527bdcf9e21 100644
--- a/src/System.Management.Automation/engine/remoting/client/RemotingErrorRecord.cs
+++ b/src/System.Management.Automation/engine/remoting/client/RemotingErrorRecord.cs
@@ -11,7 +11,6 @@ namespace System.Management.Automation.Runspaces
     /// <summary>
     /// Error record in remoting cases.
     /// </summary>
-    [Serializable]
     public class RemotingErrorRecord : ErrorRecord
     {
         /// <summary>
@@ -57,32 +56,15 @@ private RemotingErrorRecord(
 
         #region ISerializable implementation
 
-        /// <summary>
-        /// Serializer method for class.
-        /// </summary>
-        /// <param name="info">Serializer information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-
-            info.AddValue("RemoteErrorRecord_OriginInfo", _originInfo);
-        }
-
         /// <summary>
         /// Deserializer constructor.
         /// </summary>
         /// <param name="info">Serializer information.</param>
         /// <param name="context">Streaming context.</param>
-        protected RemotingErrorRecord(SerializationInfo info, StreamingContext context)
-            : base(info, context)
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
+        protected RemotingErrorRecord(SerializationInfo info, StreamingContext context) : base(info, context)
         {
-            _originInfo = (OriginInfo)info.GetValue("RemoteErrorRecord_OriginInfo", typeof(OriginInfo));
+            throw new NotSupportedException();
         }
 
         #endregion
@@ -108,7 +90,7 @@ internal override ErrorRecord WrapException(Exception replaceParentContainsError
     /// <summary>
     /// Progress record containing origin information.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class RemotingProgressRecord : ProgressRecord
     {
         /// <summary>
@@ -119,7 +101,7 @@ public OriginInfo OriginInfo
             get { return _originInfo; }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly OriginInfo _originInfo;
 
         /// <summary>
@@ -149,7 +131,7 @@ public RemotingProgressRecord(ProgressRecord progressRecord, OriginInfo originIn
 
         private static ProgressRecord Validate(ProgressRecord progressRecord)
         {
-            if (progressRecord == null) throw new ArgumentNullException(nameof(progressRecord));
+            ArgumentNullException.ThrowIfNull(progressRecord);
             return progressRecord;
         }
     }
@@ -157,7 +139,7 @@ private static ProgressRecord Validate(ProgressRecord progressRecord)
     /// <summary>
     /// Warning record containing origin information.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class RemotingWarningRecord : WarningRecord
     {
         /// <summary>
@@ -168,7 +150,7 @@ public OriginInfo OriginInfo
             get { return _originInfo; }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly OriginInfo _originInfo;
 
         /// <summary>
@@ -199,7 +181,7 @@ internal RemotingWarningRecord(
     /// <summary>
     /// Debug record containing origin information.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class RemotingDebugRecord : DebugRecord
     {
         /// <summary>
@@ -210,7 +192,7 @@ public OriginInfo OriginInfo
             get { return _originInfo; }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly OriginInfo _originInfo;
 
         /// <summary>
@@ -228,7 +210,7 @@ public RemotingDebugRecord(string message, OriginInfo originInfo)
     /// <summary>
     /// Verbose record containing origin information.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class RemotingVerboseRecord : VerboseRecord
     {
         /// <summary>
@@ -239,7 +221,7 @@ public OriginInfo OriginInfo
             get { return _originInfo; }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly OriginInfo _originInfo;
 
         /// <summary>
@@ -257,7 +239,7 @@ public RemotingVerboseRecord(string message, OriginInfo originInfo)
     /// <summary>
     /// Information record containing origin information.
     /// </summary>
-    [DataContract()]
+    [DataContract]
     public class RemotingInformationRecord : InformationRecord
     {
         /// <summary>
@@ -268,7 +250,7 @@ public OriginInfo OriginInfo
             get { return _originInfo; }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly OriginInfo _originInfo;
 
         /// <summary>
@@ -294,8 +276,7 @@ namespace System.Management.Automation.Remoting
     /// In case of output objects, the information
     /// should directly be added to the object as
     /// properties</remarks>
-    [Serializable]
-    [DataContract()]
+    [DataContract]
     public class OriginInfo
     {
         /// <summary>
@@ -311,7 +292,7 @@ public string PSComputerName
             }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly string _computerName;
 
         /// <summary>
@@ -326,7 +307,7 @@ public Guid RunspaceID
             }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private readonly Guid _runspaceID;
 
         /// <summary>
@@ -346,7 +327,7 @@ public Guid InstanceID
             }
         }
 
-        [DataMemberAttribute()]
+        [DataMember]
         private Guid _instanceId;
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
index 8b8908b6e61..441a3f62fed 100644
--- a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
+++ b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
@@ -19,7 +19,7 @@ namespace System.Management.Automation.Internal
     /// Handles all PowerShell data structure handler communication with the
     /// server side RunspacePool.
     /// </summary>
-    internal class ClientRunspacePoolDataStructureHandler : IDisposable
+    internal sealed class ClientRunspacePoolDataStructureHandler : IDisposable
     {
         private bool _reconnecting = false;
 
@@ -275,10 +275,7 @@ internal void DispatchMessageToPowerShell(RemoteDataObject<PSObject> rcvdData)
             // if a data structure handler does not exist it means
             // the association has been removed -
             // discard messages
-            if (dsHandler != null)
-            {
-                dsHandler.ProcessReceivedData(rcvdData);
-            }
+            dsHandler?.ProcessReceivedData(rcvdData);
         }
 
         /// <summary>
@@ -800,10 +797,7 @@ private void HandleReadyForDisconnect(object sender, EventArgs args)
                     return;
                 }
 
-                if (_preparingForDisconnectList.Contains(bcmdTM))
-                {
-                    _preparingForDisconnectList.Remove(bcmdTM);
-                }
+                _preparingForDisconnectList.Remove(bcmdTM);
 
                 if (_preparingForDisconnectList.Count == 0)
                 {
@@ -813,7 +807,7 @@ private void HandleReadyForDisconnect(object sender, EventArgs args)
                     // what thread this callback is made from.  If it was made from a transport
                     // callback event then a deadlock may occur when DisconnectAsync is called on
                     // that same thread.
-                    ThreadPool.QueueUserWorkItem(new WaitCallback(StartDisconnectAsync), RemoteSession);
+                    ThreadPool.QueueUserWorkItem(new WaitCallback(StartDisconnectAsync));
                 }
             }
         }
@@ -821,10 +815,18 @@ private void HandleReadyForDisconnect(object sender, EventArgs args)
         /// <summary>
         /// WaitCallback method to start an asynchronous disconnect.
         /// </summary>
-        /// <param name="remoteSession"></param>
-        private void StartDisconnectAsync(object remoteSession)
+        /// <param name="state"></param>
+        private void StartDisconnectAsync(object state)
         {
-            ((ClientRemoteSession)remoteSession).DisconnectAsync();
+            var remoteSession = RemoteSession;
+            try
+            {
+                remoteSession?.DisconnectAsync();
+            }
+            catch
+            {
+                // remoteSession may have already been disposed resulting in unexpected exceptions.
+            }
         }
 
         /// <summary>
@@ -979,7 +981,7 @@ public void Dispose(bool disposing)
     /// Base class for ClientPowerShellDataStructureHandler to handle all
     /// references.
     /// </summary>
-    internal class ClientPowerShellDataStructureHandler
+    internal sealed class ClientPowerShellDataStructureHandler
     {
         #region Data Structure Handler events
 
@@ -1150,8 +1152,8 @@ internal void SendHostResponseToServer(RemoteHostResponse hostResponse)
             RemoteDataObject<PSObject> dataToBeSent =
                 RemoteDataObject<PSObject>.CreateFrom(RemotingDestination.Server,
                 RemotingDataType.RemotePowerShellHostResponseData,
-                clientRunspacePoolId,
-                clientPowerShellId,
+                _clientRunspacePoolId,
+                _clientPowerShellId,
                 hostResponse.Encode());
 
             TransportManager.DataToBeSentCollection.Add<PSObject>(dataToBeSent,
@@ -1173,7 +1175,7 @@ internal void SendInput(ObjectStreamBase inputstream)
                 {
                     // send input closed information to server
                     SendDataAsync(RemotingEncoder.GeneratePowerShellInputEnd(
-                        clientRunspacePoolId, clientPowerShellId));
+                        _clientRunspacePoolId, _clientPowerShellId));
                 }
             }
             else
@@ -1202,10 +1204,10 @@ internal void SendInput(ObjectStreamBase inputstream)
         internal void ProcessReceivedData(RemoteDataObject<PSObject> receivedData)
         {
             // verify if this data structure handler is the intended recipient
-            if (receivedData.PowerShellId != clientPowerShellId)
+            if (receivedData.PowerShellId != _clientPowerShellId)
             {
                 throw new PSRemotingDataStructureException(RemotingErrorIdStrings.PipelineIdsDoNotMatch,
-                                receivedData.PowerShellId, clientPowerShellId);
+                                receivedData.PowerShellId, _clientPowerShellId);
             }
 
             // decode the message and take appropriate action
@@ -1425,7 +1427,7 @@ internal void ProcessDisconnect(RunspacePoolStateInfo rsStateInfo)
 
         /// <summary>
         /// This does not ensure that the corresponding session/runspacepool is in connected stated
-        /// Its the caller responsiblity to ensure that this is the case
+        /// It's the caller responsibility to ensure that this is the case
         /// At the protocols layers, this logic is delegated to the transport layer.
         /// WSMan transport ensures that WinRS commands cannot be reconnected when the parent shell is not in connected state.
         /// </summary>
@@ -1468,13 +1470,6 @@ internal void ProcessRobustConnectionNotification(
 
         #endregion Data Structure Handler Methods
 
-        #region Protected Members
-
-        protected Guid clientRunspacePoolId;
-        protected Guid clientPowerShellId;
-
-        #endregion Protected Members
-
         #region Constructors
 
         /// <summary>
@@ -1491,8 +1486,8 @@ internal ClientPowerShellDataStructureHandler(BaseClientCommandTransportManager
                     Guid clientRunspacePoolId, Guid clientPowerShellId)
         {
             TransportManager = transportManager;
-            this.clientRunspacePoolId = clientRunspacePoolId;
-            this.clientPowerShellId = clientPowerShellId;
+            _clientRunspacePoolId = clientRunspacePoolId;
+            _clientPowerShellId = clientPowerShellId;
             transportManager.SignalCompleted += OnSignalCompleted;
         }
 
@@ -1508,7 +1503,7 @@ internal Guid PowerShellId
         {
             get
             {
-                return clientPowerShellId;
+                return _clientPowerShellId;
             }
         }
 
@@ -1556,23 +1551,23 @@ private void HandleInputDataReady(object sender, EventArgs e)
         /// <param name="inputstream"></param>
         private void WriteInput(ObjectStreamBase inputstream)
         {
-            Collection<object> inputObjects = inputstream.ObjectReader.NonBlockingRead(Int32.MaxValue);
+            Collection<object> inputObjects = inputstream.ObjectReader.NonBlockingRead(int.MaxValue);
 
             foreach (object inputObject in inputObjects)
             {
                 SendDataAsync(RemotingEncoder.GeneratePowerShellInput(inputObject,
-                    clientRunspacePoolId, clientPowerShellId));
+                    _clientRunspacePoolId, _clientPowerShellId));
             }
 
             if (!inputstream.IsOpen)
             {
                 // Write any data written after the NonBlockingRead call above.
-                inputObjects = inputstream.ObjectReader.NonBlockingRead(Int32.MaxValue);
+                inputObjects = inputstream.ObjectReader.NonBlockingRead(int.MaxValue);
 
                 foreach (object inputObject in inputObjects)
                 {
                     SendDataAsync(RemotingEncoder.GeneratePowerShellInput(inputObject,
-                        clientRunspacePoolId, clientPowerShellId));
+                        _clientRunspacePoolId, _clientPowerShellId));
                 }
 
                 // we are sending input end to the server. Ignore the future
@@ -1581,7 +1576,7 @@ private void WriteInput(ObjectStreamBase inputstream)
                 inputstream.DataReady -= HandleInputDataReady;
                 // stream close: send end of input
                 SendDataAsync(RemotingEncoder.GeneratePowerShellInputEnd(
-                    clientRunspacePoolId, clientPowerShellId));
+                    _clientRunspacePoolId, _clientPowerShellId));
             }
         }
 
@@ -1603,6 +1598,9 @@ private void SetupTransportManager(bool inDisconnectMode)
 
         #region Private Members
 
+        private readonly Guid _clientRunspacePoolId;
+        private readonly Guid _clientPowerShellId;
+
         // object for synchronizing input to be sent
         // to server powershell
         private readonly object _inputSyncObject = new object();
@@ -1621,7 +1619,7 @@ private enum connectionStates
         #endregion Private Members
     }
 
-    internal class InformationalMessage
+    internal sealed class InformationalMessage
     {
         internal object Message { get; }
 
diff --git a/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs b/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs
index dfd1cd3bf7f..91cf4161a99 100644
--- a/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs
+++ b/src/System.Management.Automation/engine/remoting/client/RunspaceRef.cs
@@ -5,6 +5,7 @@
 using System.Management.Automation.Internal;
 using System.Management.Automation.Runspaces;
 using System.Management.Automation.Runspaces.Internal;
+using System.Management.Automation.Security;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -94,7 +95,22 @@ private PSCommand ParsePsCommandUsingScriptBlock(string line, bool? useLocalScop
                 // to be parsed and evaluated on the remote session (not in the current local session).
                 RemoteRunspace remoteRunspace = _runspaceRef.Value as RemoteRunspace;
                 bool isConfiguredLoopback = remoteRunspace != null && remoteRunspace.IsConfiguredLoopBack;
-                bool isTrustedInput = !isConfiguredLoopback && (localRunspace.ExecutionContext.LanguageMode == PSLanguageMode.FullLanguage);
+
+                bool inFullLanguage = context.LanguageMode == PSLanguageMode.FullLanguage;
+                if (context.LanguageMode == PSLanguageMode.ConstrainedLanguage
+                    && SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Audit)
+                {
+                    // In audit mode, report but don't enforce.
+                    inFullLanguage = true;
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: RemotingErrorIdStrings.WDACGetPowerShellLogTitle,
+                        message: RemotingErrorIdStrings.WDACGetPowerShellLogMessage,
+                        fqid: "GetPowerShellMayFail",
+                        dropIntoDebugger: true);
+                }
+
+                bool isTrustedInput = !isConfiguredLoopback && inFullLanguage;
 
                 // Create PowerShell from ScriptBlock.
                 ScriptBlock scriptBlock = ScriptBlock.Create(context, line);
@@ -208,12 +224,9 @@ internal Pipeline CreatePipeline(string line, bool addToHistory, bool useNestedP
             }
 
             // If that didn't work out fall-back to the traditional approach.
-            if (pipeline == null)
-            {
-                pipeline = useNestedPipelines ?
-                    _runspaceRef.Value.CreateNestedPipeline(line, addToHistory) :
-                    _runspaceRef.Value.CreatePipeline(line, addToHistory);
-            }
+            pipeline ??= useNestedPipelines ?
+                _runspaceRef.Value.CreateNestedPipeline(line, addToHistory) :
+                _runspaceRef.Value.CreatePipeline(line, addToHistory);
 
             // Add robust connection callback if this is a pushed runspace.
             RemotePipeline remotePipeline = pipeline as RemotePipeline;
@@ -313,7 +326,7 @@ internal void Override(RemoteRunspace remoteRunspace, object syncObject, out boo
                     powerShell.AddParameter("Name", new string[] { "Out-Default", "Exit-PSSession" });
                     powerShell.Runspace = _runspaceRef.Value;
 
-                    bool isReleaseCandidateBackcompatibilityMode = _runspaceRef.Value.GetRemoteProtocolVersion() == RemotingConstants.ProtocolVersionWin7RC;
+                    bool isReleaseCandidateBackcompatibilityMode = _runspaceRef.Value.GetRemoteProtocolVersion() == RemotingConstants.ProtocolVersion_2_0;
                     powerShell.IsGetCommandMetadataSpecialPipeline = !isReleaseCandidateBackcompatibilityMode;
                     int expectedNumberOfResults = isReleaseCandidateBackcompatibilityMode ? 2 : 3;
 
@@ -353,7 +366,7 @@ internal void Override(RemoteRunspace remoteRunspace, object syncObject, out boo
         /// <param name="eventArgs"></param>
         private void HandleHostCall(object sender, RemoteDataEventArgs<RemoteHostCall> eventArgs)
         {
-            System.Management.Automation.Runspaces.Internal.ClientRemotePowerShell.ExitHandler(sender, eventArgs);
+            ClientRemotePowerShell.ExitHandler(sender, eventArgs);
         }
 
         #region Robust Connection Support
diff --git a/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs b/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs
index a00fdee17c2..59f4fb5135d 100644
--- a/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs
+++ b/src/System.Management.Automation/engine/remoting/client/ThrottlingJob.cs
@@ -53,11 +53,7 @@ protected override void Dispose(bool disposing)
                         childJob.Dispose();
                     }
 
-                    if (_jobResultsThrottlingSemaphore != null)
-                    {
-                        _jobResultsThrottlingSemaphore.Dispose();
-                    }
-
+                    _jobResultsThrottlingSemaphore?.Dispose();
                     _cancellationTokenSource.Dispose();
                 }
             }
@@ -298,7 +294,7 @@ internal void AddChildJobAndPotentiallyBlock(
         {
             using (var jobGotEnqueued = new ManualResetEventSlim(initialState: false))
             {
-                if (childJob == null) throw new ArgumentNullException(nameof(childJob));
+                ArgumentNullException.ThrowIfNull(childJob);
 
                 this.AddChildJobWithoutBlocking(childJob, flags, jobGotEnqueued.Set);
                 jobGotEnqueued.Wait();
@@ -312,7 +308,7 @@ internal void AddChildJobAndPotentiallyBlock(
         {
             using (var forwardingCancellation = new CancellationTokenSource())
             {
-                if (childJob == null) throw new ArgumentNullException(nameof(childJob));
+                ArgumentNullException.ThrowIfNull(childJob);
 
                 this.AddChildJobWithoutBlocking(childJob, flags, forwardingCancellation.Cancel);
                 this.ForwardAllResultsToCmdlet(cmdlet, forwardingCancellation.Token);
@@ -372,15 +368,26 @@ internal void DisableFlowControlForPendingCmdletActionsQueue()
         /// </exception>
         internal void AddChildJobWithoutBlocking(StartableJob childJob, ChildJobFlags flags, Action jobEnqueuedAction = null)
         {
-            if (childJob == null) throw new ArgumentNullException(nameof(childJob));
-            if (childJob.JobStateInfo.State != JobState.NotStarted) throw new ArgumentException(RemotingErrorIdStrings.ThrottlingJobChildAlreadyRunning, nameof(childJob));
+            ArgumentNullException.ThrowIfNull(childJob);
+            if (childJob.JobStateInfo.State != JobState.NotStarted)
+            {
+                throw new ArgumentException(RemotingErrorIdStrings.ThrottlingJobChildAlreadyRunning, nameof(childJob));
+            }
+                
             this.AssertNotDisposed();
 
             JobStateInfo newJobStateInfo = null;
             lock (_lockObject)
             {
-                if (this.IsEndOfChildJobs) throw new InvalidOperationException(RemotingErrorIdStrings.ThrottlingJobChildAddedAfterEndOfChildJobs);
-                if (_isStopping) { return; }
+                if (this.IsEndOfChildJobs)
+                {
+                    throw new InvalidOperationException(RemotingErrorIdStrings.ThrottlingJobChildAddedAfterEndOfChildJobs);
+                }
+
+                if (_isStopping)
+                {
+                    return;
+                }
 
                 if (_countOfAllChildJobs == 0)
                 {
@@ -541,10 +548,7 @@ private void StartChildJobIfPossible()
                 } while (false);
             }
 
-            if (readyToRunChildJob != null)
-            {
-                readyToRunChildJob.StartJob();
-            }
+            readyToRunChildJob?.StartJob();
         }
 
         private void EnqueueReadyToRunChildJob(StartableJob childJob)
@@ -784,7 +788,7 @@ public override bool HasMoreData
         {
             get
             {
-                return this.GetChildJobsSnapshot().Any(childJob => childJob.HasMoreData) || (this.Results.Count != 0);
+                return this.GetChildJobsSnapshot().Any(static childJob => childJob.HasMoreData) || (this.Results.Count != 0);
             }
         }
 
@@ -846,7 +850,7 @@ internal override void ForwardAvailableResultsToCmdlet(Cmdlet cmdlet)
             }
         }
 
-        private class ForwardingHelper : IDisposable
+        private sealed class ForwardingHelper : IDisposable
         {
             // This is higher than 1000 used in
             //      RxExtensionMethods+ToEnumerableObserver<T>.BlockingCollectionCapacity
@@ -1227,10 +1231,7 @@ public static void ForwardAllResultsToCmdlet(ThrottlingJob throttlingJob, Cmdlet
                             }
                             finally
                             {
-                                if (cancellationTokenRegistration != null)
-                                {
-                                    cancellationTokenRegistration.Dispose();
-                                }
+                                cancellationTokenRegistration?.Dispose();
                             }
                         }
                         finally
diff --git a/src/System.Management.Automation/engine/remoting/client/clientremotesession.cs b/src/System.Management.Automation/engine/remoting/client/clientremotesession.cs
index 772beb61040..499062d7a18 100644
--- a/src/System.Management.Automation/engine/remoting/client/clientremotesession.cs
+++ b/src/System.Management.Automation/engine/remoting/client/clientremotesession.cs
@@ -55,7 +55,7 @@ internal class ClientRemoteSessionContext
     /// </summary>
     internal abstract class ClientRemoteSession : RemoteSession
     {
-        [TraceSourceAttribute("CRSession", "ClientRemoteSession")]
+        [TraceSource("CRSession", "ClientRemoteSession")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("CRSession", "ClientRemoteSession");
 
         #region Public_Method_API
@@ -177,7 +177,7 @@ internal RemoteRunspacePoolInternal GetRunspacePool(Guid clientRunspacePoolId)
     /// </summary>
     internal class ClientRemoteSessionImpl : ClientRemoteSession, IDisposable
     {
-        [TraceSourceAttribute("CRSessionImpl", "ClientRemoteSessionImpl")]
+        [TraceSource("CRSessionImpl", "ClientRemoteSessionImpl")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("CRSessionImpl", "ClientRemoteSessionImpl");
 
         private PSRemotingCryptoHelperClient _cryptoHelper = null;
@@ -505,20 +505,11 @@ private bool RunClientNegotiationAlgorithm(RemoteSessionCapability serverRemoteS
             _serverProtocolVersion = serverProtocolVersion;
             Version clientProtocolVersion = Context.ClientCapability.ProtocolVersion;
 
-            if (
-                clientProtocolVersion.Equals(serverProtocolVersion)
-                || (clientProtocolVersion == RemotingConstants.ProtocolVersionWin7RTM &&
-                    serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RC)
-                || (clientProtocolVersion == RemotingConstants.ProtocolVersionWin8RTM &&
-                    (serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RC ||
-                     serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RTM
-                     ))
-                || (clientProtocolVersion == RemotingConstants.ProtocolVersionWin10RTM &&
-                    (serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RC ||
-                     serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RTM ||
-                     serverProtocolVersion == RemotingConstants.ProtocolVersionWin8RTM
-                     ))
-                 )
+            if (clientProtocolVersion == serverProtocolVersion ||
+                serverProtocolVersion == RemotingConstants.ProtocolVersion_2_0 ||
+                serverProtocolVersion == RemotingConstants.ProtocolVersion_2_1 ||
+                serverProtocolVersion == RemotingConstants.ProtocolVersion_2_2 ||
+                serverProtocolVersion == RemotingConstants.ProtocolVersion_2_3)
             {
                 // passed negotiation check
             }
diff --git a/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs b/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs
index d035ce6e820..2dea06d8ced 100644
--- a/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs
+++ b/src/System.Management.Automation/engine/remoting/client/clientremotesessionprotocolstatemachine.cs
@@ -31,7 +31,7 @@ namespace System.Management.Automation.Remoting
     /// </summary>
     internal class ClientRemoteSessionDSHandlerStateMachine
     {
-        [TraceSourceAttribute("CRSessionFSM", "CRSessionFSM")]
+        [TraceSource("CRSessionFSM", "CRSessionFSM")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("CRSessionFSM", "CRSessionFSM");
 
         /// <summary>
@@ -254,10 +254,7 @@ private void SetStateHandler(object sender, RemoteSessionStateMachineEventArgs e
                         if (_state == RemoteSessionState.EstablishedAndKeySent)
                         {
                             Timer tmp = Interlocked.Exchange(ref _keyExchangeTimer, null);
-                            if (tmp != null)
-                            {
-                                tmp.Dispose();
-                            }
+                            tmp?.Dispose();
 
                             _keyExchanged = true;
                             SetState(RemoteSessionState.Established, eventArgs.Reason);
@@ -339,10 +336,7 @@ private void HandleKeyExchangeTimeout(object sender)
             Dbg.Assert(_state == RemoteSessionState.EstablishedAndKeySent, "timeout should only happen when waiting for a key");
 
             Timer tmp = Interlocked.Exchange(ref _keyExchangeTimer, null);
-            if (tmp != null)
-            {
-                tmp.Dispose();
-            }
+            tmp?.Dispose();
 
             PSRemotingDataStructureException exception =
                 new PSRemotingDataStructureException(RemotingErrorIdStrings.ClientKeyExchangeFailed);
@@ -456,7 +450,7 @@ internal ClientRemoteSessionDSHandlerStateMachine()
             _stateMachineHandle[(int)RemoteSessionState.EstablishedAndKeyRequested, (int)RemoteSessionEvent.KeySendFailed] += SetStateToClosedHandler;
 
             // TODO: All these are potential unexpected state transitions.. should have a way to track these calls..
-            // should atleast put a dbg assert in this handler
+            // should at least put a dbg assert in this handler
             for (int i = 0; i < _stateMachineHandle.GetLength(0); i++)
             {
                 for (int j = 0; j < _stateMachineHandle.GetLength(1); j++)
diff --git a/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs b/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs
index c791d728809..cf476cec226 100644
--- a/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs
+++ b/src/System.Management.Automation/engine/remoting/client/remotepipeline.cs
@@ -34,7 +34,7 @@ internal class RemotePipeline : Pipeline
         private readonly ConnectCommandInfo _connectCmdInfo = null;
 
         /// <summary>
-        /// This is queue of all the state change event which have occured for
+        /// This is queue of all the state change event which have occurred for
         /// this pipeline. RaisePipelineStateEvents raises event for each
         /// item in this queue. We don't raise the event with in SetPipelineState
         /// because often SetPipelineState is called with in a lock.
@@ -42,7 +42,7 @@ internal class RemotePipeline : Pipeline
         /// </summary>
         private Queue<ExecutionEventQueueItem> _executionEventQueue = new Queue<ExecutionEventQueueItem>();
 
-        private class ExecutionEventQueueItem
+        private sealed class ExecutionEventQueueItem
         {
             public ExecutionEventQueueItem(PipelineStateInfo pipelineStateInfo, RunspaceAvailability currentAvailability, RunspaceAvailability newAvailability)
             {
@@ -95,7 +95,7 @@ private RemotePipeline(RemoteRunspace runspace, bool addToHistory, bool isNested
             SetCommandCollection(_commands);
 
             // Create event which will be signalled when pipeline execution
-            // is completed/failed/stoped.
+            // is completed/failed/stopped.
             // Note:Runspace.Close waits for all the running pipeline
             // to finish.  This Event must be created before pipeline is
             // added to list of running pipelines. This avoids the race condition
@@ -599,7 +599,7 @@ private bool CanStopPipeline(out bool isAlreadyStopping)
                         break;
 
                     // If pipeline execution has failed or completed or
-                    // stoped, return silently.
+                    // stopped, return silently.
                     case PipelineState.Stopped:
                     case PipelineState.Completed:
                     case PipelineState.Failed:
@@ -1018,7 +1018,7 @@ private void Cleanup()
 
         /// <summary>
         /// ManualResetEvent which is signaled when pipeline execution is
-        /// completed/failed/stoped.
+        /// completed/failed/stopped.
         /// </summary>
         internal ManualResetEvent PipelineFinishedEvent { get; }
 
diff --git a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs
index 7ddd657872e..8448007025f 100644
--- a/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs
+++ b/src/System.Management.Automation/engine/remoting/client/remoterunspace.cs
@@ -48,7 +48,7 @@ internal class RemoteRunspace : Runspace, IDisposable
         private long _currentLocalPipelineId = 0;
 
         /// <summary>
-        /// This is queue of all the state change event which have occured for
+        /// This is queue of all the state change event which have occurred for
         /// this runspace. RaiseRunspaceStateEvents raises event for each
         /// item in this queue. We don't raise events from with SetRunspaceState
         /// because SetRunspaceState is often called from with in the a lock.
@@ -137,8 +137,8 @@ internal RemoteRunspace(TypeTable typeTable, RunspaceConnectionInfo connectionIn
                         PSTask.CreateRunspace, PSKeyword.UseAlwaysOperational,
                         InstanceId.ToString());
 
-            _connectionInfo = connectionInfo.InternalCopy();
-            OriginalConnectionInfo = connectionInfo.InternalCopy();
+            _connectionInfo = connectionInfo.Clone();
+            OriginalConnectionInfo = connectionInfo.Clone();
 
             RunspacePool = new RunspacePool(1, 1, typeTable, host, applicationArguments, connectionInfo, name);
 
@@ -170,7 +170,7 @@ internal RemoteRunspace(RunspacePool runspacePool)
             RunspacePool.RemoteRunspacePoolInternal.SetMinRunspaces(1);
             RunspacePool.RemoteRunspacePoolInternal.SetMaxRunspaces(1);
 
-            _connectionInfo = runspacePool.ConnectionInfo.InternalCopy();
+            _connectionInfo = runspacePool.ConnectionInfo.Clone();
 
             // Update runspace DisconnectedOn and ExpiresOn property from WSManConnectionInfo
             UpdateDisconnectExpiresOn();
@@ -221,11 +221,7 @@ public override InitialSessionState InitialSessionState
         {
             get
             {
-#pragma warning disable 56503
-
                 throw PSTraceSource.NewNotImplementedException();
-
-#pragma warning restore 56503
             }
         }
 
@@ -236,11 +232,7 @@ public override JobManager JobManager
         {
             get
             {
-#pragma warning disable 56503
-
                 throw PSTraceSource.NewNotImplementedException();
-
-#pragma warning restore 56503
             }
         }
 
@@ -642,11 +634,8 @@ protected override void Dispose(bool disposing)
                         //
                     }
 
-                    if (_remoteDebugger != null)
-                    {
-                        // Release RunspacePool event forwarding handlers.
-                        _remoteDebugger.Dispose();
-                    }
+                    // Release RunspacePool event forwarding handlers.
+                    _remoteDebugger?.Dispose();
 
                     try
                     {
@@ -946,6 +935,11 @@ public override RunspaceCapability GetCapabilities()
                 returnCaps |= RunspaceCapability.SupportsDisconnect;
             }
 
+            if (_connectionInfo is WSManConnectionInfo)
+            {
+                return returnCaps;
+            }
+
             if (_connectionInfo is NamedPipeConnectionInfo)
             {
                 returnCaps |= RunspaceCapability.NamedPipeTransport;
@@ -958,16 +952,20 @@ public override RunspaceCapability GetCapabilities()
             {
                 returnCaps |= RunspaceCapability.SSHTransport;
             }
-            else
+            else if (_connectionInfo is ContainerConnectionInfo containerConnectionInfo)
             {
-                ContainerConnectionInfo containerConnectionInfo = _connectionInfo as ContainerConnectionInfo;
-
                 if ((containerConnectionInfo != null) &&
                     (containerConnectionInfo.ContainerProc.RuntimeId == Guid.Empty))
                 {
                     returnCaps |= RunspaceCapability.NamedPipeTransport;
                 }
             }
+            else
+            {
+                // Unknown connection info type means a custom connection/transport, which at
+                // minimum supports remote runspace capability starting from PowerShell v7.x.
+                returnCaps |= RunspaceCapability.CustomTransport;
+            }
 
             return returnCaps;
         }
@@ -1731,10 +1729,7 @@ internal void AbortOpen()
             System.Management.Automation.Remoting.Client.NamedPipeClientSessionTransportManager transportManager =
                 RunspacePool.RemoteRunspacePoolInternal.DataStructureHandler.TransportManager as System.Management.Automation.Remoting.Client.NamedPipeClientSessionTransportManager;
 
-            if (transportManager != null)
-            {
-                transportManager.AbortConnect();
-            }
+            transportManager?.AbortConnect();
         }
 
         #endregion Internal Methods
@@ -2785,8 +2780,8 @@ private void CheckForValidateState()
             {
                 throw new PSInvalidOperationException(
                     // The remote session to which you are connected does not support remote debugging.
-                    // You must connect to a remote computer that is running PowerShell {0} or greater.
-                    StringUtil.Format(RemotingErrorIdStrings.RemoteDebuggingEndpointVersionError, PSVersionInfo.PSV4Version),
+                    // You must connect to a remote computer that is running PowerShell 4.0 or greater.
+                    RemotingErrorIdStrings.RemoteDebuggingEndpointVersionError,
                     null,
                     "RemoteDebugger:RemoteDebuggingNotSupported",
                     ErrorCategory.NotImplemented,
@@ -2910,10 +2905,7 @@ private T InvokeRemoteBreakpointFunction<T>(string functionName, Dictionary<stri
 
         private void CheckRemoteBreakpointManagementSupport(string breakpointCommandNameToCheck)
         {
-            if (_remoteBreakpointManagementIsSupported == null)
-            {
-                _remoteBreakpointManagementIsSupported = _remoteDebuggingCapability.IsCommandSupported(breakpointCommandNameToCheck);
-            }
+            _remoteBreakpointManagementIsSupported ??= _remoteDebuggingCapability.IsCommandSupported(breakpointCommandNameToCheck);
 
             if (!_remoteBreakpointManagementIsSupported.Value)
             {
diff --git a/src/System.Management.Automation/engine/remoting/client/remoterunspaceinfo.cs b/src/System.Management.Automation/engine/remoting/client/remoterunspaceinfo.cs
index 1fa03edf25b..c1b34691104 100644
--- a/src/System.Management.Automation/engine/remoting/client/remoterunspaceinfo.cs
+++ b/src/System.Management.Automation/engine/remoting/client/remoterunspaceinfo.cs
@@ -44,6 +44,7 @@ public sealed class PSSession
         #region Private Members
 
         private RemoteRunspace _remoteRunspace;
+        private string _transportName;
 
         /// <summary>
         /// Static variable which is incremented to generate id.
@@ -302,7 +303,8 @@ internal PSSession(RemoteRunspace remoteRunspace)
                     break;
 
                 default:
-                    Dbg.Assert(false, "Invalid Runspace");
+                    // Default for custom connection and transports.
+                    ComputerType = TargetMachineType.RemoteMachine;
                     break;
             }
         }
@@ -338,7 +340,7 @@ private string GetTransportName()
                     return "VMBus";
 
                 default:
-                    return "Unknown";
+                    return string.IsNullOrEmpty(_transportName) ? "Custom" : _transportName;
             }
         }
 
@@ -359,6 +361,34 @@ private static string GetDisplayShellName(string shell)
 
         #region Static Methods
 
+        /// <summary>
+        /// Creates a PSSession object from the provided remote runspace object.
+        /// If psCmdlet argument is non-null, then the new PSSession object is added to the
+        /// session runspace repository (Get-PSSession).
+        /// </summary>
+        /// <param name="runspace">Runspace for the new PSSession.</param>
+        /// <param name="transportName">Optional transport name.</param>
+        /// <param name="psCmdlet">Optional cmdlet associated with the PSSession creation.</param>
+        public static PSSession Create(
+            Runspace runspace,
+            string transportName,
+            PSCmdlet psCmdlet)
+        {
+            if (runspace is not RemoteRunspace remoteRunspace)
+            {
+                throw new PSArgumentException(RemotingErrorIdStrings.InvalidPSSessionArgument);
+            }
+
+            var psSession = new PSSession(remoteRunspace)
+            {
+                _transportName = transportName
+            };
+
+            psCmdlet?.RunspaceRepository.Add(psSession);
+
+            return psSession;
+        }
+
         /// <summary>
         /// Generates a unique runspace id.
         /// </summary>
diff --git a/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs b/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs
index d8800311127..d36ddff8be3 100644
--- a/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs
+++ b/src/System.Management.Automation/engine/remoting/client/remotingprotocolimplementation.cs
@@ -13,9 +13,9 @@ namespace System.Management.Automation.Remoting
     /// <summary>
     /// Implements ServerRemoteSessionDataStructureHandler.
     /// </summary>
-    internal class ClientRemoteSessionDSHandlerImpl : ClientRemoteSessionDataStructureHandler, IDisposable
+    internal sealed class ClientRemoteSessionDSHandlerImpl : ClientRemoteSessionDataStructureHandler, IDisposable
     {
-        [TraceSourceAttribute("CRSDSHdlerImpl", "ClientRemoteSessionDSHandlerImpl")]
+        [TraceSource("CRSDSHdlerImpl", "ClientRemoteSessionDSHandlerImpl")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("CRSDSHdlerImpl", "ClientRemoteSessionDSHandlerImpl");
 
         private const string resBaseName = "remotingerroridstrings";
@@ -329,7 +329,7 @@ private void HandleStateChanged(object sender, RemoteSessionStateEventArgs arg)
         }
 
         /// <summary>
-        /// Clubing negotiation packet + runspace creation and then doing transportManager.ConnectAsync().
+        /// Clubbing negotiation packet + runspace creation and then doing transportManager.ConnectAsync().
         /// This will save us 2 network calls by doing all the work in one network call.
         /// </summary>
         private void HandleNegotiationSendingStateChange()
@@ -735,26 +735,12 @@ internal void ProcessNonSessionMessages(RemoteDataObject<PSObject> rcvdData)
 
         #region IDisposable
 
-        /// <summary>
-        /// Public method for dispose.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-
-            GC.SuppressFinalize(this);
-        }
-
         /// <summary>
         /// Release all resources.
         /// </summary>
-        /// <param name="disposing">If true, release all managed resources.</param>
-        protected void Dispose(bool disposing)
+        public void Dispose()
         {
-            if (disposing)
-            {
-                _transportManager.Dispose();
-            }
+            _transportManager.Dispose();
         }
 
         #endregion IDisposable
diff --git a/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs b/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs
index f58aa35632e..b7474fe34c2 100644
--- a/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/ConnectPSSession.cs
@@ -83,7 +83,7 @@ public class ConnectPSSessionCommand : PSRunspaceCmdlet, IDisposable
         /// <summary>
         /// This parameters specifies the appname which identifies the connection
         /// end point on the remote machine. If this parameter is not specified
-        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If thats
+        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If that's
         /// not specified as well, then "WSMAN" will be used.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
@@ -92,7 +92,10 @@ public class ConnectPSSessionCommand : PSRunspaceCmdlet, IDisposable
                    ParameterSetName = ConnectPSSessionCommand.ComputerNameGuidParameterSet)]
         public string ApplicationName
         {
-            get { return _appName; }
+            get
+            {
+                return _appName;
+            }
 
             set
             {
@@ -117,7 +120,10 @@ public string ApplicationName
                    ParameterSetName = ConnectPSSessionCommand.ConnectionUriGuidParameterSet)]
         public string ConfigurationName
         {
-            get { return _shell; }
+            get
+            {
+                return _shell;
+            }
 
             set
             {
@@ -199,10 +205,13 @@ public override string[] Name
         [Parameter(ParameterSetName = ConnectPSSessionCommand.ComputerNameGuidParameterSet)]
         [Parameter(ParameterSetName = ConnectPSSessionCommand.ConnectionUriParameterSet)]
         [Parameter(ParameterSetName = ConnectPSSessionCommand.ConnectionUriGuidParameterSet)]
-        [Credential()]
+        [Credential]
         public PSCredential Credential
         {
-            get { return _psCredential; }
+            get
+            {
+                return _psCredential;
+            }
 
             set
             {
@@ -223,7 +232,10 @@ public PSCredential Credential
         [Parameter(ParameterSetName = ConnectPSSessionCommand.ConnectionUriGuidParameterSet)]
         public AuthenticationMechanism Authentication
         {
-            get { return _authentication; }
+            get
+            {
+                return _authentication;
+            }
 
             set
             {
@@ -245,7 +257,10 @@ public AuthenticationMechanism Authentication
         [Parameter(ParameterSetName = ConnectPSSessionCommand.ConnectionUriGuidParameterSet)]
         public string CertificateThumbprint
         {
-            get { return _thumbprint; }
+            get
+            {
+                return _thumbprint;
+            }
 
             set
             {
@@ -472,7 +487,7 @@ protected override void StopProcessing()
         /// <summary>
         /// Throttle class to perform a remoterunspace connect operation.
         /// </summary>
-        private class ConnectRunspaceOperation : IThrottleOperation
+        private sealed class ConnectRunspaceOperation : IThrottleOperation
         {
             private PSSession _session;
             private PSSession _oldSession;
@@ -554,10 +569,7 @@ internal override void StartOperation()
 
             internal override void StopOperation()
             {
-                if (_queryRunspaces != null)
-                {
-                    _queryRunspaces.StopAllOperations();
-                }
+                _queryRunspaces?.StopAllOperations();
 
                 _session.Runspace.StateChanged -= StateCallBackHandler;
                 SendStopComplete();
diff --git a/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs b/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs
index aa90fca60a4..1d88210e7b6 100644
--- a/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/CustomShellCommands.cs
@@ -52,7 +52,8 @@ function Register-PSSessionConfiguration
       [system.security.securestring] $runAsPassword,
       [System.Management.Automation.Runspaces.PSSessionConfigurationAccessMode] $accessMode,
       [bool] $isSddlSpecified,
-      [string] $configTableSddl
+      [string] $configTableSddl,
+      [bool] $noRestart
     )
 
     begin
@@ -139,7 +140,7 @@ function Register-PSSessionConfiguration
         ## Replace the SDDL with any groups or restrictions defined in the PSSessionConfigurationFile
         if($? -and $configTableSddl -and (-not $isSddlSpecified))
         {{
-            $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $configTableSddl -Force:$force
+            $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $configTableSddl -NoServiceRestart:$noRestart -Force:$force
         }}
 
         if ($? -and $shouldShowUI)
@@ -227,11 +228,11 @@ function Register-PSSessionConfiguration
                 if ($runAsUserName)
                 {{
                     $runAsCredential = new-object system.management.automation.PSCredential($runAsUserName, $runAsPassword)
-                    $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $newSDDL -NoServiceRestart -force -WarningAction 0 -RunAsCredential $runAsCredential
+                    $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $newSDDL -NoServiceRestart:$noRestart -Force:$force -WarningAction 0 -RunAsCredential $runAsCredential
                 }}
                 else
                 {{
-                    $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $newSDDL -NoServiceRestart -force -WarningAction 0
+                    $null = Set-PSSessionConfiguration -Name $pluginName -SecurityDescriptorSddl $newSDDL -NoServiceRestart:$noRestart -Force:$force -WarningAction 0
                 }}
 
             }} catch {{
@@ -262,13 +263,13 @@ function Register-PSSessionConfiguration
     }}
 }}
 
-if ($null -eq $args[14])
+if ($null -eq $args[15])
 {{
-    Register-PSSessionConfiguration -filepath $args[0] -pluginName $args[1] -shouldShowUI $args[2] -force $args[3] -whatif:$args[4] -confirm:$args[5] -restartWSManTarget $args[6] -restartWSManAction $args[7] -restartWSManRequired $args[8] -runAsUserName $args[9] -runAsPassword $args[10] -accessMode $args[11] -isSddlSpecified $args[12] -configTableSddl $args[13]
+    Register-PSSessionConfiguration -filepath $args[0] -pluginName $args[1] -shouldShowUI $args[2] -force $args[3] -whatif:$args[4] -confirm:$args[5] -restartWSManTarget $args[6] -restartWSManAction $args[7] -restartWSManRequired $args[8] -runAsUserName $args[9] -runAsPassword $args[10] -accessMode $args[11] -isSddlSpecified $args[12] -configTableSddl $args[13] -noRestart $args[14]
 }}
 else
 {{
-    Register-PSSessionConfiguration -filepath $args[0] -pluginName $args[1] -shouldShowUI $args[2] -force $args[3] -whatif:$args[4] -confirm:$args[5] -restartWSManTarget $args[6] -restartWSManAction $args[7] -restartWSManRequired $args[8] -runAsUserName $args[9] -runAsPassword $args[10] -accessMode $args[11] -isSddlSpecified $args[12] -configTableSddl $args[13] -erroraction $args[14]
+    Register-PSSessionConfiguration -filepath $args[0] -pluginName $args[1] -shouldShowUI $args[2] -force $args[3] -whatif:$args[4] -confirm:$args[5] -restartWSManTarget $args[6] -restartWSManAction $args[7] -restartWSManRequired $args[8] -runAsUserName $args[9] -runAsPassword $args[10] -accessMode $args[11] -isSddlSpecified $args[12] -configTableSddl $args[13] -noRestart $args[14] -erroraction $args[15]
 }}
 ";
 
@@ -348,7 +349,7 @@ static RegisterPSSessionConfigurationCommand()
             string localSDDL = GetLocalSddl();
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             string newPluginSbString = string.Format(CultureInfo.InvariantCulture,
                 newPluginSbFormat,
                 WSManNativeApi.ResourceURIPrefix, localSDDL, RemoteManagementUsersSID, InteractiveUsersSID);
@@ -544,9 +545,7 @@ protected override void ProcessRecord()
                 string restartServiceTarget = StringUtil.Format(RemotingErrorIdStrings.RestartWSManServiceTarget, "WinRM");
 
                 string restartWSManRequiredForUI = StringUtil.Format(RemotingErrorIdStrings.RestartWSManRequiredShowUI,
-                    string.Format(CultureInfo.InvariantCulture,
-                        "Set-PSSessionConfiguration {0} -ShowSecurityDescriptorUI",
-                        shellName));
+                    string.Create(CultureInfo.InvariantCulture, $"Set-PSSessionConfiguration {shellName} -ShowSecurityDescriptorUI"));
 
                 // gather -WhatIf, -Confirm parameter data and pass it to the script block
                 bool whatIf = false;
@@ -594,6 +593,7 @@ protected override void ProcessRecord()
                                             AccessMode,
                                             isSddlSpecified,
                                             _configTableSDDL,
+                                            noRestart,
                                             errorAction
                                        });
 
@@ -1373,7 +1373,7 @@ internal static PSCredential CreateGMSAAccountCredentials(string gmsaAccount)
             Dbg.Assert(!string.IsNullOrEmpty(gmsaAccount), "Should not be null or empty string.");
 
             // Validate account name form (must be DomainName\UserName)
-            var parts = gmsaAccount.Split(Utils.Separators.Backslash);
+            var parts = gmsaAccount.Split('\\');
             if ((parts.Length != 2) ||
                 (string.IsNullOrEmpty(parts[0])) ||
                 (string.IsNullOrEmpty(parts[1]))
@@ -1462,7 +1462,7 @@ internal static string GetRunAsVirtualAccountGroupsString(string[] groups)
         {
             if (groups == null) { return string.Empty; }
 
-            return string.Join(";", groups);
+            return string.Join(';', groups);
         }
 
         /// <summary>
@@ -1753,7 +1753,7 @@ internal static string CreateConditionalACEFromConfig(
             }
 
             StringBuilder conditionalACE = new StringBuilder();
-            if (!(configTable[ConfigFileConstants.RequiredGroups] is Hashtable requiredGroupsHash))
+            if (configTable[ConfigFileConstants.RequiredGroups] is not Hashtable requiredGroupsHash)
             {
                 throw new PSInvalidOperationException(RemotingErrorIdStrings.RequiredGroupsNotHashTable);
             }
@@ -1962,7 +1962,10 @@ public string Name
         [Parameter(Position = 1, Mandatory = true, ParameterSetName = PSSessionConfigurationCommandBase.AssemblyNameParameterSetName)]
         public string AssemblyName
         {
-            get { return assemblyName; }
+            get
+            {
+                return assemblyName;
+            }
 
             set
             {
@@ -1984,7 +1987,10 @@ public string AssemblyName
         [Parameter(ParameterSetName = AssemblyNameParameterSetName)]
         public string ApplicationBase
         {
-            get { return applicationBase; }
+            get
+            {
+                return applicationBase;
+            }
 
             set
             {
@@ -2004,7 +2010,10 @@ public string ApplicationBase
         [Parameter(Position = 2, Mandatory = true, ParameterSetName = PSSessionConfigurationCommandBase.AssemblyNameParameterSetName)]
         public string ConfigurationTypeName
         {
-            get { return configurationTypeName; }
+            get
+            {
+                return configurationTypeName;
+            }
 
             set
             {
@@ -2053,7 +2062,10 @@ public ApartmentState ThreadApartmentState
                 return ApartmentState.Unknown;
             }
 
-            set { threadAptState = value; }
+            set
+            {
+                threadAptState = value;
+            }
         }
 
         internal ApartmentState? threadAptState;
@@ -2074,7 +2086,10 @@ public PSThreadOptions ThreadOptions
                 return PSThreadOptions.UseCurrentThread;
             }
 
-            set { threadOptions = value; }
+            set
+            {
+                threadOptions = value;
+            }
         }
 
         internal PSThreadOptions? threadOptions;
@@ -2085,7 +2100,10 @@ public PSThreadOptions ThreadOptions
         [Parameter]
         public PSSessionConfigurationAccessMode AccessMode
         {
-            get { return _accessMode; }
+            get
+            {
+                return _accessMode;
+            }
 
             set
             {
@@ -2124,7 +2142,10 @@ public SwitchParameter UseSharedProcess
         [Parameter()]
         public string StartupScript
         {
-            get { return configurationScript; }
+            get
+            {
+                return configurationScript;
+            }
 
             set
             {
@@ -2144,7 +2165,10 @@ public string StartupScript
         [AllowNull]
         public double? MaximumReceivedDataSizePerCommandMB
         {
-            get { return maxCommandSizeMB; }
+            get
+            {
+                return maxCommandSizeMB;
+            }
 
             set
             {
@@ -2171,7 +2195,10 @@ public double? MaximumReceivedDataSizePerCommandMB
         [AllowNull]
         public double? MaximumReceivedObjectSizeMB
         {
-            get { return maxObjectSizeMB; }
+            get
+            {
+                return maxObjectSizeMB;
+            }
 
             set
             {
@@ -2198,7 +2225,10 @@ public double? MaximumReceivedObjectSizeMB
         [Parameter()]
         public string SecurityDescriptorSddl
         {
-            get { return sddl; }
+            get
+            {
+                return sddl;
+            }
 
             set
             {
@@ -2228,7 +2258,10 @@ public string SecurityDescriptorSddl
         [Parameter()]
         public SwitchParameter ShowSecurityDescriptorUI
         {
-            get { return _showUI; }
+            get
+            {
+                return _showUI;
+            }
 
             set
             {
@@ -2280,17 +2313,15 @@ public SwitchParameter NoServiceRestart
         [ValidateNotNullOrEmpty]
         public Version PSVersion
         {
-            get { return psVersion; }
+            get
+            {
+                return psVersion;
+            }
 
             set
             {
-                RemotingCommandUtil.CheckPSVersion(value);
-
-                // Check if specified version of PowerShell is installed
-                RemotingCommandUtil.CheckIfPowerShellVersionIsInstalled(value);
-
-                psVersion = value;
-                isPSVersionSpecified = true;
+                // PowerShell 7 remoting endpoints do not support PSVersion.
+                throw new PSNotSupportedException(RemotingErrorIdStrings.PowerShellVersionNotSupported);
             }
         }
 
@@ -2589,7 +2620,7 @@ static UnregisterPSSessionConfigurationCommand()
                 removePluginSbFormat,
                 RemotingConstants.PSPluginDLLName);
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_removePluginSb = ScriptBlock.Create(removePluginScript);
             s_removePluginSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -2805,7 +2836,7 @@ static GetPSSessionConfigurationCommand()
                 PSSessionConfigurationCommandUtilities.PSCustomShellTypeName,
                 RemotingConstants.PSPluginDLLName);
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_getPluginSb = ScriptBlock.Create(scriptToRun);
             s_getPluginSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -3229,7 +3260,7 @@ static SetPSSessionConfigurationCommand()
                 RemotingConstants.PSPluginDLLName, localSDDL, RemoteManagementUsersSID, InteractiveUsersSID);
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_setPluginSb = ScriptBlock.Create(setPluginScript);
             s_setPluginSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -3962,7 +3993,7 @@ public sealed class EnablePSSessionConfigurationCommand : PSCmdlet
 
 function Test-WinRMQuickConfigNeeded
 {{
-    # see issue #11005 - Function Test-WinRMQuickConfigNeeded needs to be updated: 
+    # see issue #11005 - Function Test-WinRMQuickConfigNeeded needs to be updated:
     # 1) currently this function always returns $True
     # 2) checking for a firewall rule using Get-NetFirewallRule engages WinCompat code and has significant perf impact on Enable-PSRemoting; maybe change to Get-CimInstance -ClassName MSFT_NetFirewallRule
     return $True
@@ -4179,7 +4210,7 @@ static EnablePSSessionConfigurationCommand()
                 enablePluginSbFormat, setWSManConfigCommand, PSSessionConfigurationCommandBase.RemoteManagementUsersSID, PSSessionConfigurationCommandBase.InteractiveUsersSID);
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_enablePluginSb = ScriptBlock.Create(enablePluginScript);
             s_enablePluginSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -4466,7 +4497,7 @@ static DisablePSSessionConfigurationCommand()
                 disablePluginSbFormat);
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_disablePluginSb = ScriptBlock.Create(disablePluginScript);
             s_disablePluginSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -4873,7 +4904,7 @@ static EnablePSRemotingCommand()
                 RemotingConstants.MaxIdleTimeoutMS, RemotingConstants.PSPluginDLLName);
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_enableRemotingSb = ScriptBlock.Create(enableRemotingScript);
             s_enableRemotingSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -5097,7 +5128,7 @@ static DisablePSRemotingCommand()
             string disableRemotingScript = string.Format(CultureInfo.InvariantCulture, disablePSRemotingFormat, localSDDL);
 
             // compile the script block statically and reuse the same instance
-            // everytime the command is run..This will save on parsing time.
+            // every time the command is run..This will save on parsing time.
             s_disableRemotingSb = ScriptBlock.Create(disableRemotingScript);
             s_disableRemotingSb.LanguageMode = PSLanguageMode.FullLanguage;
         }
@@ -5233,7 +5264,7 @@ protected override void BeginProcessing()
             }
 
             // The validator that will be applied to the role lookup
-            Func<string, bool> validator = (role) => true;
+            Func<string, bool> validator = static (role) => true;
 
             if (!string.IsNullOrEmpty(this.Username))
             {
@@ -5242,7 +5273,7 @@ protected override void BeginProcessing()
                     validator = null;
 
                     // Convert DOMAIN\user to the upn (user@DOMAIN)
-                    string[] upnComponents = this.Username.Split(Utils.Separators.Backslash);
+                    string[] upnComponents = this.Username.Split('\\');
                     if (upnComponents.Length == 2)
                     {
                         this.Username = upnComponents[1] + "@" + upnComponents[0];
diff --git a/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs b/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs
index 777f56807fe..ece0ce45dbf 100644
--- a/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/DebugJob.cs
@@ -100,7 +100,6 @@ public Guid InstanceId
         /// <summary>
         /// Gets or sets a flag that tells PowerShell to automatically perform a BreakAll when the debugger is attached to the remote target.
         /// </summary>
-        [Experimental("Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace", ExperimentAction.Show)]
         [Parameter]
         public SwitchParameter BreakAll { get; set; }
 
@@ -204,10 +203,7 @@ protected override void StopProcessing()
 
             // Unblock the data collection.
             PSDataCollection<PSStreamObject> debugCollection = _debugCollection;
-            if (debugCollection != null)
-            {
-                debugCollection.Complete();
-            }
+            debugCollection?.Complete();
         }
 
         #endregion
@@ -230,7 +226,10 @@ private bool CheckForDebuggableJob()
                 foreach (var cJob in _job.ChildJobs)
                 {
                     debuggableJobFound = GetJobDebuggable(cJob);
-                    if (debuggableJobFound) { break; }
+                    if (debuggableJobFound)
+                    {
+                        break;
+                    }
                 }
             }
 
@@ -261,10 +260,7 @@ private void WaitAndReceiveJobOutput()
                 // or this command is cancelled.
                 foreach (var streamItem in _debugCollection)
                 {
-                    if (streamItem != null)
-                    {
-                        streamItem.WriteStreamObject(this);
-                    }
+                    streamItem?.WriteStreamObject(this);
                 }
             }
             catch (Exception)
diff --git a/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs b/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs
index 0e2458daba0..74bcbac2c33 100644
--- a/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/DisconnectPSSession.cs
@@ -392,7 +392,7 @@ private static string GetLocalhostWithNetworkAccessEnabled(Dictionary<Guid, PSSe
         /// <summary>
         /// Throttle class to perform a remoterunspace disconnect operation.
         /// </summary>
-        private class DisconnectRunspaceOperation : IThrottleOperation
+        private sealed class DisconnectRunspaceOperation : IThrottleOperation
         {
             private readonly PSSession _remoteSession;
             private readonly ObjectStream _writeStream;
diff --git a/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs b/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs
index 756250eb8d7..f7aef0530b8 100644
--- a/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/EnterPSHostProcessCommand.cs
@@ -54,7 +54,7 @@ public sealed class EnterPSHostProcessCommand : PSCmdlet
         /// Process to enter.
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = EnterPSHostProcessCommand.ProcessParameterSet)]
-        [ValidateNotNull()]
+        [ValidateNotNull]
         public Process Process
         {
             get;
@@ -76,7 +76,7 @@ public int Id
         /// Name of process to enter.  An error will result if more than one such process exists.
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ParameterSetName = EnterPSHostProcessCommand.ProcessNameParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string Name
         {
             get;
@@ -87,7 +87,7 @@ public string Name
         /// Host Process Info object that describes a connectible process.
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = EnterPSHostProcessCommand.PSHostProcessInfoParameterSet)]
-        [ValidateNotNull()]
+        [ValidateNotNull]
         public PSHostProcessInfo HostProcessInfo
         {
             get;
@@ -212,10 +212,7 @@ protected override void EndProcessing()
         protected override void StopProcessing()
         {
             RemoteRunspace connectingRunspace = _connectingRemoteRunspace;
-            if (connectingRunspace != null)
-            {
-                connectingRunspace.AbortOpen();
-            }
+            connectingRunspace?.AbortOpen();
         }
 
         #endregion
@@ -318,22 +315,19 @@ private static void PrepareRunspace(Runspace runspace)
 
         private Process GetProcessById(int procId)
         {
-            try
-            {
-                return Process.GetProcessById(procId);
-            }
-            catch (System.ArgumentException)
+            var process = PSHostProcessUtils.GetProcessById(procId);
+            if (process is null)
             {
                 ThrowTerminatingError(
-                        new ErrorRecord(
-                            new PSArgumentException(StringUtil.Format(RemotingErrorIdStrings.EnterPSHostProcessNoProcessFoundWithId, procId)),
-                            "EnterPSHostProcessNoProcessFoundWithId",
-                            ErrorCategory.InvalidArgument,
-                            this)
-                        );
-
-                return null;
+                    new ErrorRecord(
+                        new PSArgumentException(StringUtil.Format(RemotingErrorIdStrings.EnterPSHostProcessNoProcessFoundWithId, procId)),
+                        "EnterPSHostProcessNoProcessFoundWithId",
+                        ErrorCategory.InvalidArgument,
+                        this)
+                    );
             }
+
+            return process;
         }
 
         private Process GetProcessByHostProcessInfo(PSHostProcessInfo hostProcessInfo)
@@ -403,7 +397,7 @@ private void VerifyProcess(Process process)
             {
                 ThrowTerminatingError(
                         new ErrorRecord(
-                            new PSInvalidOperationException(StringUtil.Format(RemotingErrorIdStrings.EnterPSHostProcessNoPowerShell, Process.ProcessName)),
+                            new PSInvalidOperationException(StringUtil.Format(RemotingErrorIdStrings.EnterPSHostProcessNoPowerShell, Process.Id)),
                             "EnterPSHostProcessNoPowerShell",
                             ErrorCategory.InvalidOperation,
                             this)
@@ -506,7 +500,7 @@ public sealed class GetPSHostProcessInfoCommand : PSCmdlet
         /// </summary>
         [Parameter(Position = 0, ParameterSetName = GetPSHostProcessInfoCommand.ProcessNameParameterSet)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public string[] Name
         {
             get;
@@ -518,7 +512,7 @@ public string[] Name
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = GetPSHostProcessInfoCommand.ProcessParameterSet)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public Process[] Process
         {
             get;
@@ -530,7 +524,7 @@ public Process[] Process
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ParameterSetName = GetPSHostProcessInfoCommand.ProcessIdParameterSet)]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public int[] Id
         {
             get;
@@ -599,9 +593,22 @@ private static int[] GetProcIdsFromNames(string[] names)
                 WildcardPattern namePattern = WildcardPattern.Get(name, WildcardOptions.IgnoreCase);
                 foreach (var proc in processes)
                 {
-                    if (namePattern.IsMatch(proc.ProcessName))
+                    // Skip processes that have already terminated.
+                    if (proc.HasExited)
                     {
-                        returnIds.Add(proc.Id);
+                        continue;
+                    }
+
+                    try
+                    {
+                        if (namePattern.IsMatch(proc.ProcessName))
+                        {
+                            returnIds.Add(proc.Id);
+                        }
+                    }
+                    catch (InvalidOperationException)
+                    {
+                        // Ignore if process has exited in the mean time.
                     }
                 }
             }
@@ -665,7 +672,10 @@ internal static IReadOnlyCollection<PSHostProcessInfo> GetAppDomainNamesFromProc
                                             }
                                         }
 
-                                        if (!found) { continue; }
+                                        if (!found)
+                                        {
+                                            continue;
+                                        }
                                     }
                                 }
                                 else
@@ -681,10 +691,9 @@ internal static IReadOnlyCollection<PSHostProcessInfo> GetAppDomainNamesFromProc
                                     string pName = namedPipe.Substring(pNameIndex + 1);
 
                                     Process process = null;
-
                                     try
                                     {
-                                        process = System.Diagnostics.Process.GetProcessById(id);
+                                        process = PSHostProcessUtils.GetProcessById(id);
                                     }
                                     catch (Exception)
                                     {
@@ -704,10 +713,20 @@ internal static IReadOnlyCollection<PSHostProcessInfo> GetAppDomainNamesFromProc
                                             // best effort to cleanup
                                         }
                                     }
-                                    else if (process.ProcessName.Equals(pName, StringComparison.Ordinal))
+                                    else
                                     {
-                                        // only add if the process name matches
-                                        procAppDomainInfo.Add(new PSHostProcessInfo(pName, id, appDomainName, namedPipe));
+                                        try
+                                        {
+                                            if (process.ProcessName.Equals(pName, StringComparison.Ordinal))
+                                            {
+                                                // only add if the process name matches
+                                                procAppDomainInfo.Add(new PSHostProcessInfo(pName, id, appDomainName, namedPipe));
+                                            }
+                                        }
+                                        catch (InvalidOperationException)
+                                        {
+                                            // Ignore if process has exited in the mean time.
+                                        }
                                     }
                                 }
                             }
@@ -796,8 +815,8 @@ internal PSHostProcessInfo(
             MainWindowTitle = string.Empty;
             try
             {
-                var proc = Process.GetProcessById(processId);
-                MainWindowTitle = proc.MainWindowTitle ?? string.Empty;
+                var process = PSHostProcessUtils.GetProcessById(processId);
+                MainWindowTitle = process?.MainWindowTitle ?? string.Empty;
             }
             catch (ArgumentException)
             {
@@ -831,4 +850,30 @@ public string GetPipeNameFilePath()
     }
 
     #endregion
+
+    #region PSHostProcessUtils
+
+    internal static class PSHostProcessUtils
+    {
+        /// <summary>
+        /// Return a System.Diagnostics.Process object by process Id,
+        /// or null if not found or process has exited.
+        /// </summary>
+        /// <param name="procId">Process of Id to find.</param>
+        /// <returns>Process object or null.</returns>
+        public static Process GetProcessById(int procId)
+        {
+            try
+            {
+                var process = Process.GetProcessById(procId);
+                return process.HasExited ? null : process;
+            }
+            catch (System.ArgumentException)
+            {
+                return null;
+            }
+        }
+    }
+
+    #endregion
 }
diff --git a/src/System.Management.Automation/engine/remoting/commands/GetJob.cs b/src/System.Management.Automation/engine/remoting/commands/GetJob.cs
index 17ee25c52cf..fe5946f44f0 100644
--- a/src/System.Management.Automation/engine/remoting/commands/GetJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/GetJob.cs
@@ -110,7 +110,7 @@ protected override void ProcessRecord()
         {
             List<Job> jobList = FindJobs();
 
-            jobList.Sort((x, y) => x != null ? x.Id.CompareTo(y != null ? y.Id : 1) : -1);
+            jobList.Sort(static (x, y) => x != null ? x.Id.CompareTo(y != null ? y.Id : 1) : -1);
             WriteObject(jobList, true);
         }
 
@@ -256,7 +256,10 @@ private List<Job> FindChildJobs(List<Job> jobList)
                 {
                     foreach (Job childJob in job.ChildJobs)
                     {
-                        if (childJob.JobStateInfo.State != ChildJobState) continue;
+                        if (childJob.JobStateInfo.State != ChildJobState)
+                        {
+                            continue;
+                        }
 
                         matches.Add(childJob);
                     }
diff --git a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs
index b60f3131f24..e340a1acbdb 100644
--- a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs
@@ -198,7 +198,7 @@ public override string[] ComputerName
                    ParameterSetName = InvokeCommandCommand.FilePathVMIdParameterSet)]
         [Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true,
                    ParameterSetName = InvokeCommandCommand.FilePathVMNameParameterSet)]
-        [Credential()]
+        [Credential]
         public override PSCredential Credential
         {
             get
@@ -226,7 +226,7 @@ public override PSCredential Credential
         [Parameter(ParameterSetName = InvokeCommandCommand.ComputerNameParameterSet)]
         [Parameter(ParameterSetName = InvokeCommandCommand.FilePathComputerNameParameterSet)]
         [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
-        [ValidateRange((int)1, (int)UInt16.MaxValue)]
+        [ValidateRange((int)1, (int)ushort.MaxValue)]
         public override int Port
         {
             get
@@ -308,7 +308,7 @@ public override string ConfigurationName
         /// <summary>
         /// This parameters specifies the appname which identifies the connection
         /// end point on the remote machine. If this parameter is not specified
-        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If thats
+        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If that's
         /// not specified as well, then "WSMAN" will be used.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
@@ -702,7 +702,7 @@ public override SwitchParameter RunAsAdministrator
             ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
         [Parameter(Mandatory = true,
             ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public override string[] HostName
         {
             get { return base.HostName; }
@@ -715,7 +715,7 @@ public override string[] HostName
         /// </summary>
         [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
         [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public override string UserName
         {
             get { return base.UserName; }
@@ -728,7 +728,7 @@ public override string UserName
         /// </summary>
         [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
         [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         [Alias("IdentityFilePath")]
         public override string KeyFilePath
         {
@@ -737,6 +737,30 @@ public override string KeyFilePath
             set { base.KeyFilePath = value; }
         }
 
+        /// <summary>
+        /// Gets and sets a value for the SSH subsystem to use for the remote connection.
+        /// </summary>
+        [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
+        [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
+        public override string Subsystem
+        {
+            get { return base.Subsystem; }
+
+            set { base.Subsystem = value; }
+        }
+
+        /// <summary>
+        /// Gets and sets a value in milliseconds that limits the time allowed for an SSH connection to be established.
+        /// </summary>
+        [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
+        [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
+        public override int ConnectingTimeout
+        {
+            get { return base.ConnectingTimeout; }
+            
+            set { base.ConnectingTimeout = value; }
+        }
+
         /// <summary>
         /// This parameter specifies that SSH is used to establish the remote
         /// connection and act as the remoting transport.  By default WinRM is used
@@ -761,13 +785,32 @@ public override SwitchParameter SSHTransport
         /// </summary>
         [Parameter(ParameterSetName = PSRemotingBaseCmdlet.SSHHostHashParameterSet, Mandatory = true)]
         [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostHashParameterSet, Mandatory = true)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public override Hashtable[] SSHConnection
         {
             get;
             set;
         }
 
+        /// <summary>
+        /// Hashtable containing options to be passed to OpenSSH.
+        /// </summary>
+        [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
+        [Parameter(ParameterSetName = InvokeCommandCommand.FilePathSSHHostParameterSet)]
+        [ValidateNotNullOrEmpty]
+        public override Hashtable Options
+        {
+            get 
+            {
+                return base.Options;
+            }
+
+            set 
+            {
+                base.Options = value;
+            }
+        }
+
         #endregion
 
         #region Remote Debug Parameters
@@ -983,7 +1026,7 @@ protected override void BeginProcessing()
                                 {
                                     // In order to support foreach remoting properly ( icm | % { icm } ), the server must
                                     // be using protocol version 2.2. Otherwise, we skip this and assume the old behavior.
-                                    if (version >= RemotingConstants.ProtocolVersionWin8RTM)
+                                    if (version >= RemotingConstants.ProtocolVersion_2_2)
                                     {
                                         // Suppress collection behavior
                                         _needToCollect = false;
@@ -1007,7 +1050,7 @@ protected override void BeginProcessing()
                 // create collection of input writers here
                 foreach (IThrottleOperation operation in Operations)
                 {
-                    if (!(operation is ExecutionCmdletHelperRunspace ecHelper))
+                    if (operation is not ExecutionCmdletHelperRunspace ecHelper)
                     {
                         // either all the operations will be of type ExecutionCmdletHelperRunspace
                         // or not...there is no mix.
@@ -1420,10 +1463,7 @@ private void HandleRunspaceDebugStop(object sender, StartRunspaceDebugProcessing
             operation.RunspaceDebugStop -= HandleRunspaceDebugStop;
 
             var hostDebugger = GetHostDebugger();
-            if (hostDebugger != null)
-            {
-                hostDebugger.QueueRunspaceForDebug(args.Runspace);
-            }
+            hostDebugger?.QueueRunspaceForDebug(args.Runspace);
         }
 
         private void HandleJobStateChanged(object sender, JobStateEventArgs e)
@@ -1440,10 +1480,7 @@ private void HandleJobStateChanged(object sender, JobStateEventArgs e)
                 // Signal that this job has been disconnected, or has ended.
                 lock (_jobSyncObject)
                 {
-                    if (_disconnectComplete != null)
-                    {
-                        _disconnectComplete.Set();
-                    }
+                    _disconnectComplete?.Set();
                 }
             }
         }
@@ -2047,11 +2084,8 @@ private void Dispose(bool disposing)
 
                 if (!_asjob)
                 {
-                    if (_job != null)
-                    {
-                        // job will be null in the "InProcess" case
-                        _job.Dispose();
-                    }
+                    // job will be null in the "InProcess" case
+                    _job?.Dispose();
 
                     _throttleManager.ThrottleComplete -= HandleThrottleComplete;
                     _throttleManager.Dispose();
@@ -2133,10 +2167,7 @@ public void StartProgress(
                 return;
             }
 
-            if (string.IsNullOrEmpty(computerName))
-            {
-                throw new ArgumentNullException(nameof(computerName));
-            }
+            ArgumentException.ThrowIfNullOrEmpty(computerName);
 
             lock (_syncObject)
             {
diff --git a/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs b/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs
index 7bb52abcb1e..29d107a074f 100644
--- a/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/JobRepository.cs
@@ -19,10 +19,7 @@ public abstract class Repository<T> where T : class
         /// <param name="item">Object to add.</param>
         public void Add(T item)
         {
-            if (item == null)
-            {
-                throw new ArgumentNullException(_identifier);
-            }
+            ArgumentNullException.ThrowIfNull(item, _identifier);
 
             lock (_syncObject)
             {
@@ -45,10 +42,7 @@ public void Add(T item)
         /// <param name="item">Object to remove.</param>
         public void Remove(T item)
         {
-            if (item == null)
-            {
-                throw new ArgumentNullException(_identifier);
-            }
+            ArgumentNullException.ThrowIfNull(item, _identifier);
 
             lock (_syncObject)
             {
diff --git a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs
index 56bd72e90d8..4e669e891f2 100644
--- a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionConfigurationFile.cs
@@ -15,7 +15,6 @@
 
 namespace Microsoft.PowerShell.Commands
 {
-#if !UNIX
     /// <summary>
     /// New-PSSessionConfigurationFile command implementation
     ///
@@ -49,7 +48,7 @@ public string Path
         /// <summary>
         /// Configuration file schema version.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [ValidateNotNull]
         public Version SchemaVersion
         {
@@ -69,7 +68,7 @@ public Version SchemaVersion
         /// <summary>
         /// Configuration file GUID.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public Guid Guid
         {
             get
@@ -88,7 +87,7 @@ public Guid Guid
         /// <summary>
         /// Author of the configuration file.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Author
         {
             get
@@ -107,7 +106,7 @@ public string Author
         /// <summary>
         /// Description.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Description
         {
             get
@@ -126,7 +125,7 @@ public string Description
         /// <summary>
         /// Company name.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string CompanyName
         {
             get
@@ -145,7 +144,7 @@ public string CompanyName
         /// <summary>
         /// Copyright information.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Copyright
         {
             get
@@ -164,7 +163,7 @@ public string Copyright
         /// <summary>
         /// Specifies type of initial session state to use.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SessionType SessionType
         {
             get
@@ -183,7 +182,7 @@ public SessionType SessionType
         /// <summary>
         /// Specifies the directory for transcripts to be placed.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string TranscriptDirectory
         {
             get
@@ -202,13 +201,13 @@ public string TranscriptDirectory
         /// <summary>
         /// Specifies whether to run this configuration under a virtual account.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter RunAsVirtualAccount { get; set; }
 
         /// <summary>
         /// Specifies groups a virtual account is part of.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] RunAsVirtualAccountGroups { get; set; }
 
@@ -217,7 +216,7 @@ public string TranscriptDirectory
         /// The User drive is used with Copy-Item for file transfer when the FileSystem provider is
         /// not visible in the session.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter MountUserDrive
         {
             get;
@@ -229,7 +228,7 @@ public SwitchParameter MountUserDrive
         /// MountUserDrive parameter.
         /// If no maximum size is specified then the default drive maximum size is 50MB.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public long UserDriveMaximumSize { get; set; }
 
         // Temporarily removed until script input parameter validation is implemented.
@@ -240,7 +239,7 @@ public SwitchParameter MountUserDrive
         /// If a MountUserDrive is specified for the PSSession then input parameter validation will be
         /// enabled automatically.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter EnforceInputParameterValidation { get; set; }
         */
 
@@ -248,13 +247,13 @@ public SwitchParameter MountUserDrive
         /// Optional parameter that specifies a Group Managed Service Account name in which the configuration
         /// is run.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string GroupManagedServiceAccount { get; set; }
 
         /// <summary>
         /// Scripts to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] ScriptsToProcess
         {
@@ -274,7 +273,7 @@ public string[] ScriptsToProcess
         /// <summary>
         /// Role definitions for this session configuration (Role name -> Role capability)
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
         public IDictionary RoleDefinitions
         {
@@ -294,7 +293,7 @@ public IDictionary RoleDefinitions
         /// <summary>
         /// Specifies account groups that are membership requirements for this session.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
         public IDictionary RequiredGroups
         {
@@ -308,7 +307,7 @@ public IDictionary RequiredGroups
         /// <summary>
         /// Language mode.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public PSLanguageMode LanguageMode
         {
             get
@@ -329,7 +328,7 @@ public PSLanguageMode LanguageMode
         /// <summary>
         /// Execution policy.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public ExecutionPolicy ExecutionPolicy
         {
             get
@@ -348,7 +347,7 @@ public ExecutionPolicy ExecutionPolicy
         /// <summary>
         /// PowerShell version.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public Version PowerShellVersion
         {
             get
@@ -367,7 +366,7 @@ public Version PowerShellVersion
         /// <summary>
         /// A list of modules to import.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] ModulesToImport
         {
@@ -387,7 +386,7 @@ public object[] ModulesToImport
         /// <summary>
         /// A list of visible aliases.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleAliases
         {
@@ -407,7 +406,7 @@ public string[] VisibleAliases
         /// <summary>
         /// A list of visible cmdlets.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] VisibleCmdlets
         {
@@ -427,7 +426,7 @@ public object[] VisibleCmdlets
         /// <summary>
         /// A list of visible functions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] VisibleFunctions
         {
@@ -447,7 +446,7 @@ public object[] VisibleFunctions
         /// <summary>
         /// A list of visible external commands (scripts and applications)
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleExternalCommands
         {
@@ -467,7 +466,7 @@ public string[] VisibleExternalCommands
         /// <summary>
         /// A list of providers.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleProviders
         {
@@ -487,7 +486,7 @@ public string[] VisibleProviders
         /// <summary>
         /// A list of aliases.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public IDictionary[] AliasDefinitions
         {
@@ -507,7 +506,7 @@ public IDictionary[] AliasDefinitions
         /// <summary>
         /// A list of functions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public IDictionary[] FunctionDefinitions
         {
@@ -527,7 +526,7 @@ public IDictionary[] FunctionDefinitions
         /// <summary>
         /// A list of variables.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object VariableDefinitions
         {
@@ -547,7 +546,7 @@ public object VariableDefinitions
         /// <summary>
         /// A list of environment variables.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
         public IDictionary EnvironmentVariables
@@ -568,7 +567,7 @@ public IDictionary EnvironmentVariables
         /// <summary>
         /// A list of types to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] TypesToProcess
         {
@@ -588,7 +587,7 @@ public string[] TypesToProcess
         /// <summary>
         /// A list of format data to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] FormatsToProcess
         {
@@ -608,7 +607,7 @@ public string[] FormatsToProcess
         /// <summary>
         /// A list of assemblies to load.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] AssembliesToLoad
         {
@@ -629,7 +628,7 @@ public string[] AssembliesToLoad
         /// Gets or sets whether to include a full expansion of all possible session configuration
         /// keys as comments when creating the session configuration file.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Full { get; set; }
 
         #endregion
@@ -1126,7 +1125,6 @@ private bool ShouldGenerateConfigurationSnippet(string parameterName)
 
         #endregion
     }
-#endif
 
     /// <summary>
     /// New-PSRoleCapabilityFile command implementation
@@ -1161,7 +1159,7 @@ public string Path
         /// <summary>
         /// Configuration file GUID.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public Guid Guid
         {
             get
@@ -1180,7 +1178,7 @@ public Guid Guid
         /// <summary>
         /// Author of the configuration file.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Author
         {
             get
@@ -1199,7 +1197,7 @@ public string Author
         /// <summary>
         /// Description.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Description
         {
             get
@@ -1218,7 +1216,7 @@ public string Description
         /// <summary>
         /// Company name.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string CompanyName
         {
             get
@@ -1237,7 +1235,7 @@ public string CompanyName
         /// <summary>
         /// Copyright information.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public string Copyright
         {
             get
@@ -1256,7 +1254,7 @@ public string Copyright
         /// <summary>
         /// A list of modules to import.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] ModulesToImport
         {
@@ -1276,7 +1274,7 @@ public object[] ModulesToImport
         /// <summary>
         /// A list of visible aliases.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleAliases
         {
@@ -1296,7 +1294,7 @@ public string[] VisibleAliases
         /// <summary>
         /// A list of visible cmdlets.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] VisibleCmdlets
         {
@@ -1316,7 +1314,7 @@ public object[] VisibleCmdlets
         /// <summary>
         /// A list of visible functions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object[] VisibleFunctions
         {
@@ -1336,7 +1334,7 @@ public object[] VisibleFunctions
         /// <summary>
         /// A list of visible external commands (scripts and applications)
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleExternalCommands
         {
@@ -1356,7 +1354,7 @@ public string[] VisibleExternalCommands
         /// <summary>
         /// A list of providers.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] VisibleProviders
         {
@@ -1376,7 +1374,7 @@ public string[] VisibleProviders
         /// <summary>
         /// Scripts to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] ScriptsToProcess
         {
@@ -1396,7 +1394,7 @@ public string[] ScriptsToProcess
         /// <summary>
         /// A list of aliases.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public IDictionary[] AliasDefinitions
         {
@@ -1416,7 +1414,7 @@ public IDictionary[] AliasDefinitions
         /// <summary>
         /// A list of functions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public IDictionary[] FunctionDefinitions
         {
@@ -1436,7 +1434,7 @@ public IDictionary[] FunctionDefinitions
         /// <summary>
         /// A list of variables.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public object VariableDefinitions
         {
@@ -1456,7 +1454,7 @@ public object VariableDefinitions
         /// <summary>
         /// A list of environment variables.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
         public IDictionary EnvironmentVariables
@@ -1477,7 +1475,7 @@ public IDictionary EnvironmentVariables
         /// <summary>
         /// A list of types to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] TypesToProcess
         {
@@ -1497,7 +1495,7 @@ public string[] TypesToProcess
         /// <summary>
         /// A list of format data to process.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] FormatsToProcess
         {
@@ -1517,7 +1515,7 @@ public string[] FormatsToProcess
         /// <summary>
         /// A list of assemblies to load.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] AssembliesToLoad
         {
@@ -1868,12 +1866,10 @@ internal static string ConfigFragment(string key, string resourceString, string
 
             if (isExample)
             {
-                return string.Format(CultureInfo.InvariantCulture, "# {0}{1}# {2:19} = {3}{4}{5}",
-                    resourceString, nl, key, value, nl, nl);
+                return string.Format(CultureInfo.InvariantCulture, "# {0}{1}# {2:19} = {3}{4}{5}", resourceString, nl, key, value, nl, nl);
             }
 
-            return string.Format(CultureInfo.InvariantCulture, "# {0}{1}{2:19} = {3}{4}{5}",
-                resourceString, nl, key, value, nl, nl);
+            return string.Format(CultureInfo.InvariantCulture, "# {0}{1}{2:19} = {3}{4}{5}", resourceString, nl, key, value, nl, nl);
         }
 
         /// <summary>
@@ -1884,7 +1880,10 @@ internal static string ConfigFragment(string key, string resourceString, string
         internal static string QuoteName(object name)
         {
             if (name == null)
+            {
                 return "''";
+            }
+
             return "'" + System.Management.Automation.Language.CodeGeneration.EscapeSingleQuotedStringContent(name.ToString()) + "'";
         }
 
@@ -1944,7 +1943,7 @@ internal static string CombineHashtable(IDictionary table, StreamWriter writer,
 
             sb.Append("@{");
 
-            var keys = table.Keys.Cast<string>().OrderBy(x => x);
+            var keys = table.Keys.Cast<string>().Order();
             foreach (var key in keys)
             {
                 sb.Append(writer.NewLine);
diff --git a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionOptionCommand.cs b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionOptionCommand.cs
index 2a6dbc30679..bb7641d2e5b 100644
--- a/src/System.Management.Automation/engine/remoting/commands/NewPSSessionOptionCommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/NewPSSessionOptionCommand.cs
@@ -136,11 +136,13 @@ public int OpenTimeout
         {
             get
             {
-                return _openTimeout.HasValue ? _openTimeout.Value :
-                    RunspaceConnectionInfo.DefaultOpenTimeout;
+                return _openTimeout ?? RunspaceConnectionInfo.DefaultOpenTimeout;
             }
 
-            set { _openTimeout = value; }
+            set
+            {
+                _openTimeout = value;
+            }
         }
 
         private int? _openTimeout;
@@ -161,11 +163,13 @@ public int CancelTimeout
         {
             get
             {
-                return _cancelTimeout.HasValue ? _cancelTimeout.Value :
-                    BaseTransportManager.ClientCloseTimeoutMs;
+                return _cancelTimeout ?? BaseTransportManager.ClientCloseTimeoutMs;
             }
 
-            set { _cancelTimeout = value; }
+            set
+            {
+                _cancelTimeout = value;
+            }
         }
 
         private int? _cancelTimeout;
@@ -183,11 +187,13 @@ public int IdleTimeout
         {
             get
             {
-                return _idleTimeout.HasValue ? _idleTimeout.Value
-                    : RunspaceConnectionInfo.DefaultIdleTimeout;
+                return _idleTimeout ?? RunspaceConnectionInfo.DefaultIdleTimeout;
             }
 
-            set { _idleTimeout = value; }
+            set
+            {
+                _idleTimeout = value;
+            }
         }
 
         private int? _idleTimeout;
@@ -290,11 +296,13 @@ public int OperationTimeout
         {
             get
             {
-                return (_operationtimeout.HasValue ? _operationtimeout.Value :
-                    BaseTransportManager.ClientDefaultOperationTimeoutMs);
+                return _operationtimeout ?? BaseTransportManager.ClientDefaultOperationTimeoutMs;
             }
 
-            set { _operationtimeout = value; }
+            set
+            {
+                _operationtimeout = value;
+            }
         }
 
         private int? _operationtimeout;
@@ -308,7 +316,10 @@ public int OperationTimeout
         [Parameter]
         public SwitchParameter NoEncryption
         {
-            get { return _noencryption; }
+            get
+            {
+                return _noencryption;
+            }
 
             set
             {
@@ -327,7 +338,10 @@ public SwitchParameter NoEncryption
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "UTF")]
         public SwitchParameter UseUTF16
         {
-            get { return _useutf16; }
+            get
+            {
+                return _useutf16;
+            }
 
             set
             {
diff --git a/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs b/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs
index 9fafd34eec4..ee06dc22130 100644
--- a/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/PSRemotingCmdlet.cs
@@ -15,6 +15,7 @@
 using System.Management.Automation.Remoting;
 using System.Management.Automation.Remoting.Client;
 using System.Management.Automation.Runspaces;
+using System.Threading;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -202,7 +203,7 @@ internal string GetMessage(string resourceString, params object[] args)
         /// <summary>
         /// Default shellname.
         /// </summary>
-        protected const string DefaultPowerShellRemoteShellName = System.Management.Automation.Remoting.Client.WSManNativeApi.ResourceURIPrefix + "Microsoft.PowerShell";
+        protected const string DefaultPowerShellRemoteShellName = WSManNativeApi.ResourceURIPrefix + "Microsoft.PowerShell";
 
         /// <summary>
         /// Default application name for the connection uri.
@@ -285,6 +286,8 @@ internal struct SSHConnection
         public string KeyFilePath;
         public int Port;
         public string Subsystem;
+        public int ConnectingTimeout;
+        public Hashtable Options;
     }
 
     /// <summary>
@@ -442,6 +445,37 @@ internal enum VMState
             FastSavingCritical,
         }
 
+#nullable enable
+        /// <summary>
+        /// Get the State property from Get-VM result.
+        /// </summary>
+        /// <param name="value">The raw PSObject as returned by Get-VM.</param>
+        /// <returns>The VMState value of the State property if present and parsable, otherwise null.</returns>
+        internal VMState? GetVMStateProperty(PSObject value)
+        {
+            object? rawState = value.Properties["State"].Value;
+            if (rawState is Enum enumState)
+            {
+                // If the Hyper-V module was directly importable we have the VMState enum
+                // value which we can just cast to our VMState type.
+                return (VMState)enumState;
+            }
+            else if (rawState is string stringState && Enum.TryParse(stringState, true, out VMState result))
+            {
+                // If the Hyper-V module was imported through implicit remoting on old
+                // Windows versions we get a string back which we will try and parse
+                // as the enum label.
+                return result;
+            }
+
+            // Unknown scenario, this should not happen.
+            string message = PSRemotingErrorInvariants.FormatResourceString(
+                RemotingErrorIdStrings.HyperVFailedToGetStateUnknownType,
+                rawState?.GetType()?.FullName ?? "null");
+            throw new InvalidOperationException(message);
+        }
+#nullable disable
+
         #endregion
 
         #region Tracer
@@ -572,7 +606,7 @@ public virtual PSCredential Credential
         /// </remarks>
         [Parameter(ParameterSetName = PSRemotingBaseCmdlet.ComputerNameParameterSet)]
         [Parameter(ParameterSetName = PSRemotingBaseCmdlet.SSHHostParameterSet)]
-        [ValidateRange((int)1, (int)UInt16.MaxValue)]
+        [ValidateRange((int)1, (int)ushort.MaxValue)]
         public virtual int Port { get; set; }
 
         /// <summary>
@@ -589,7 +623,7 @@ public virtual PSCredential Credential
         /// <summary>
         /// This parameters specifies the appname which identifies the connection
         /// end point on the remote machine. If this parameter is not specified
-        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If thats
+        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If that's
         /// not specified as well, then "WSMAN" will be used.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
@@ -761,6 +795,20 @@ public virtual string KeyFilePath
             set;
         }
 
+        /// <summary>
+        /// Gets or sets a value for the SSH subsystem to use for the remote connection.
+        /// </summary>
+        [Parameter(ValueFromPipelineByPropertyName = true,
+                   ParameterSetName = PSRemotingBaseCmdlet.SSHHostParameterSet)]
+        public virtual string Subsystem { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value in milliseconds that limits the time allowed for an SSH connection to be established.
+        /// Default timeout value is infinite.
+        /// </summary>
+        [Parameter(ParameterSetName = PSRemotingBaseCmdlet.SSHHostParameterSet)]
+        public virtual int ConnectingTimeout { get; set; } = Timeout.Infinite;
+
         /// <summary>
         /// This parameter specifies that SSH is used to establish the remote
         /// connection and act as the remoting transport.  By default WinRM is used
@@ -790,11 +838,11 @@ public virtual Hashtable[] SSHConnection
         }
 
         /// <summary>
-        /// This parameter specifies the SSH subsystem to use for the remote connection.
+        /// Gets or sets the Hashtable containing options to be passed to OpenSSH.
         /// </summary>
-        [Parameter(ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
-        public virtual string Subsystem { get; set; }
+        [Parameter(ParameterSetName = InvokeCommandCommand.SSHHostParameterSet)]
+        [ValidateNotNullOrEmpty]
+        public virtual Hashtable Options { get; set; }
 
         #endregion
 
@@ -856,6 +904,8 @@ internal static void ValidateSpecifiedAuthentication(PSCredential credential, st
         private const string IdentityFilePathAlias = "IdentityFilePath";
         private const string PortParameter = "Port";
         private const string SubsystemParameter = "Subsystem";
+        private const string ConnectingTimeoutParameter = "ConnectingTimeout";
+        private const string OptionsParameter = "Options";
 
         #endregion
 
@@ -902,7 +952,7 @@ protected void ParseSshHostName(string hostname, out string host, out string use
         /// <returns>Array of SSHConnection objects.</returns>
         internal SSHConnection[] ParseSSHConnectionHashTable()
         {
-            List<SSHConnection> connections = new List<SSHConnection>();
+            List<SSHConnection> connections = new();
             foreach (var item in this.SSHConnection)
             {
                 if (item.ContainsKey(ComputerNameParameter) && item.ContainsKey(HostNameAlias))
@@ -915,7 +965,7 @@ internal SSHConnection[] ParseSSHConnectionHashTable()
                     throw new PSArgumentException(RemotingErrorIdStrings.SSHConnectionDuplicateKeyPath);
                 }
 
-                SSHConnection connectionInfo = new SSHConnection();
+                SSHConnection connectionInfo = new();
                 foreach (var key in item.Keys)
                 {
                     string paramName = key as string;
@@ -955,6 +1005,14 @@ internal SSHConnection[] ParseSSHConnectionHashTable()
                     {
                         connectionInfo.Subsystem = GetSSHConnectionStringParameter(item[paramName]);
                     }
+                    else if (paramName.Equals(ConnectingTimeoutParameter, StringComparison.OrdinalIgnoreCase))
+                    {
+                        connectionInfo.ConnectingTimeout = GetSSHConnectionIntParameter(item[paramName]);
+                    }
+                    else if (paramName.Equals(OptionsParameter, StringComparison.OrdinalIgnoreCase))
+                    {
+                        connectionInfo.Options = item[paramName] as Hashtable;
+                    }
                     else
                     {
                         throw new PSArgumentException(
@@ -1448,9 +1506,9 @@ protected void CreateHelpersForSpecifiedSSHComputerNames()
             {
                 ParseSshHostName(computerName, out string host, out string userName, out int port);
 
-                var sshConnectionInfo = new SSHConnectionInfo(userName, host, this.KeyFilePath, port, this.Subsystem);
+                var sshConnectionInfo = new SSHConnectionInfo(userName, host, KeyFilePath, port, Subsystem, ConnectingTimeout, Options);
                 var typeTable = TypeTable.LoadDefaultTypeFiles();
-                var remoteRunspace = RunspaceFactory.CreateRunspace(sshConnectionInfo, this.Host, typeTable) as RemoteRunspace;
+                var remoteRunspace = RunspaceFactory.CreateRunspace(sshConnectionInfo, Host, typeTable) as RemoteRunspace;
                 var pipeline = CreatePipeline(remoteRunspace);
 
                 var operation = new ExecutionCmdletHelperComputerName(remoteRunspace, pipeline);
@@ -1471,7 +1529,8 @@ protected void CreateHelpersForSpecifiedSSHHashComputerNames()
                     sshConnection.ComputerName,
                     sshConnection.KeyFilePath,
                     sshConnection.Port,
-                    sshConnection.Subsystem);
+                    sshConnection.Subsystem,
+                    sshConnection.ConnectingTimeout);
                 var typeTable = TypeTable.LoadDefaultTypeFiles();
                 var remoteRunspace = RunspaceFactory.CreateRunspace(sshConnectionInfo, this.Host, typeTable) as RemoteRunspace;
                 var pipeline = CreatePipeline(remoteRunspace);
@@ -1630,7 +1689,7 @@ protected virtual void CreateHelpersForSpecifiedVMSession()
                     {
                         this.VMName[index] = (string)results[0].Properties["VMName"].Value;
 
-                        if ((VMState)results[0].Properties["State"].Value == VMState.Running)
+                        if (GetVMStateProperty(results[0]) == VMState.Running)
                         {
                             vmIsRunning[index] = true;
                         }
@@ -1679,7 +1738,7 @@ protected virtual void CreateHelpersForSpecifiedVMSession()
                         this.VMId[index] = (Guid)results[0].Properties["VMId"].Value;
                         this.VMName[index] = (string)results[0].Properties["VMName"].Value;
 
-                        if ((VMState)results[0].Properties["State"].Value == VMState.Running)
+                        if (GetVMStateProperty(results[0]) == VMState.Running)
                         {
                             vmIsRunning[index] = true;
                         }
@@ -1864,9 +1923,7 @@ internal Pipeline CreatePipeline(RemoteRunspace remoteRunspace)
             // the array-form using values if all UsingExpressions are in the same scope, otherwise, we handle the UsingExpression as
             // if the remote end is PSv2.
             string serverPsVersion = GetRemoteServerPsVersion(remoteRunspace);
-            System.Management.Automation.PowerShell powershellToUse = (serverPsVersion == PSv2)
-                                                                          ? GetPowerShellForPSv2()
-                                                                          : GetPowerShellForPSv3OrLater(serverPsVersion);
+            System.Management.Automation.PowerShell powershellToUse = GetPowerShellForPSv3OrLater(serverPsVersion);
             Pipeline pipeline =
                 remoteRunspace.CreatePipeline(powershellToUse.Commands.Commands[0].CommandText, true);
 
@@ -1887,9 +1944,9 @@ internal Pipeline CreatePipeline(RemoteRunspace remoteRunspace)
         /// </summary>
         private static string GetRemoteServerPsVersion(RemoteRunspace remoteRunspace)
         {
-            if (remoteRunspace.ConnectionInfo is NewProcessConnectionInfo)
+            if (remoteRunspace.ConnectionInfo is not WSManConnectionInfo)
             {
-                // This is for Start-Job. The remote end is actually a child local powershell process, so it must be PSv5 or later
+                // All transport types except for WSManConnectionInfo work with 5.1 or later.
                 return PSv5OrLater;
             }
 
@@ -1898,45 +1955,25 @@ private static string GetRemoteServerPsVersion(RemoteRunspace remoteRunspace)
             {
                 // The remote runspace is not opened yet, or it's disconnected before the private data is retrieved.
                 // In this case we cannot validate if the remote server is running PSv5 or later, so for safety purpose,
-                // we will handle the $using expressions as if the remote server is PSv2.
-                return PSv2;
+                // we will handle the $using expressions as if the remote server is PSv3Orv4.
+                return PSv3Orv4;
             }
 
-            // Unfortunately, the PSVersion value in the private data from PSv3 and PSv4 server is always 2.0.
-            // This got fixed in PSv5, so a PSv5 server will return 5.0. That means we need other way to tell
-            // if the remote server is PSv2 or PSv3+. After PSv3, remote runspace supports connect/disconnect,
-            // so we can use it to differentiate PSv2 from PSv3+.
-            if (remoteRunspace.CanDisconnect)
-            {
-                Version serverPsVersion = null;
-                PSPrimitiveDictionary.TryPathGet(
-                    psApplicationPrivateData,
-                    out serverPsVersion,
-                    PSVersionInfo.PSVersionTableName,
-                    PSVersionInfo.PSVersionName);
-
-                if (serverPsVersion != null)
-                {
-                    return serverPsVersion.Major >= 5 ? PSv5OrLater : PSv3Orv4;
-                }
-
-                // The private data is available but we failed to get the server powershell version.
-                // This should never happen, but in case it happens, handle the $using expressions
-                // as if the remote server is PSv2.
-                Dbg.Assert(false, "Application private data is available but we failed to get the server powershell version. This should never happen.");
-            }
+            PSPrimitiveDictionary.TryPathGet(
+                psApplicationPrivateData,
+                out Version serverPsVersion,
+                PSVersionInfo.PSVersionTableName,
+                PSVersionInfo.PSVersionName);
 
-            return PSv2;
+            // PSv5 server will return 5.0 whereas older versions will always be 2.0. As we don't care about v2
+            // anymore we can use a simple ternary check here to differenciate v5 using behaviour vs v3/4.
+            return serverPsVersion != null && serverPsVersion.Major >= 5 ? PSv5OrLater : PSv3Orv4;
         }
 
         /// <summary>
         /// Adds forwarded events to the local queue.
         /// </summary>
-        internal void OnRunspacePSEventReceived(object sender, PSEventArgs e)
-        {
-            if (this.Events != null)
-                this.Events.AddForwardedEvent(e);
-        }
+        internal void OnRunspacePSEventReceived(object sender, PSEventArgs e) => this.Events?.AddForwardedEvent(e);
 
         #endregion Private Methods
 
@@ -2004,7 +2041,6 @@ private void WriteErrorCreateRemoteRunspaceFailed(Exception e, Uri uri)
         /// </summary>
         private const string PSv5OrLater = "PSv5OrLater";
         private const string PSv3Orv4 = "PSv3Orv4";
-        private const string PSv2 = "PSv2";
 
         private System.Management.Automation.PowerShell _powershellV2;
         private System.Management.Automation.PowerShell _powershellV3;
@@ -2254,7 +2290,7 @@ private System.Management.Automation.PowerShell GetPowerShellForPSv3OrLater(stri
             // Semantic checks on the using statement have already validated that there are no arbitrary expressions,
             // so we'll allow these expressions in everything but NoLanguage mode.
 
-            bool allowUsingExpressions = (Context.SessionState.LanguageMode != PSLanguageMode.NoLanguage);
+            bool allowUsingExpressions = Context.SessionState.LanguageMode != PSLanguageMode.NoLanguage;
             object[] usingValuesInArray = null;
             IDictionary usingValuesInDict = null;
 
@@ -2308,7 +2344,7 @@ private System.Management.Automation.PowerShell ConvertToPowerShell()
             try
             {
                 // This is trusted input as long as we're in FullLanguage mode
-                bool isTrustedInput = (Context.LanguageMode == PSLanguageMode.FullLanguage);
+                bool isTrustedInput = Context.LanguageMode == PSLanguageMode.FullLanguage;
                 powershell = _scriptBlock.GetPowerShell(isTrustedInput, _args);
             }
             catch (ScriptBlockToPowerShellNotSupportedException)
@@ -2359,7 +2395,8 @@ private string GetConvertedScript(out List<string> newParameterNames, out List<o
 
                 foreach (var varAst in usingVariables)
                 {
-                    string varName = varAst.VariablePath.UserPath;
+                    VariablePath varPath = varAst.VariablePath;
+                    string varName = varPath.IsDriveQualified ? $"{varPath.DriveName}_{varPath.UnqualifiedPath}" : $"{varPath.UnqualifiedPath}";
                     string paramName = UsingExpressionAst.UsingPrefix + varName;
                     string paramNameWithDollar = "$" + paramName;
 
@@ -2403,7 +2440,7 @@ private List<object> GetUsingVariableValues(List<VariableExpressionAst> paramUsi
                 // GetExpressionValue ensures that it only does variable access when supplied a VariableExpressionAst.
                 // So, this is still safe to use in ConstrainedLanguage and will not result in arbitrary code
                 // execution.
-                bool allowVariableAccess = (Context.SessionState.LanguageMode != PSLanguageMode.NoLanguage);
+                bool allowVariableAccess = Context.SessionState.LanguageMode != PSLanguageMode.NoLanguage;
 
                 foreach (var varAst in paramUsingVars)
                 {
@@ -2435,13 +2472,10 @@ private List<object> GetUsingVariableValues(List<VariableExpressionAst> paramUsi
         /// <returns>A list of UsingExpressionAsts ordered by the StartOffset.</returns>
         private static List<VariableExpressionAst> GetUsingVariables(ScriptBlock localScriptBlock)
         {
-            if (localScriptBlock == null)
-            {
-                throw new ArgumentNullException(nameof(localScriptBlock), "Caller needs to make sure the parameter value is not null");
-            }
+            ArgumentNullException.ThrowIfNull(localScriptBlock, "Caller needs to make sure the parameter value is not null");
 
             var allUsingExprs = UsingExpressionAstSearcher.FindAllUsingExpressions(localScriptBlock.Ast);
-            return allUsingExprs.Select(usingExpr => UsingExpressionAst.ExtractUsingVariable((UsingExpressionAst)usingExpr)).ToList();
+            return allUsingExprs.Select(static usingExpr => UsingExpressionAst.ExtractUsingVariable((UsingExpressionAst)usingExpr)).ToList();
         }
 
         #endregion "UsingExpression Utilities"
@@ -3452,10 +3486,7 @@ private void RaiseOperationCompleteEvent(EventArgs baseEventArgs)
                     OperationState.StopComplete;
             operationStateEventArgs.BaseEvent = baseEventArgs;
 
-            if (OperationComplete != null)
-            {
-                OperationComplete.SafeInvoke(this, operationStateEventArgs);
-            }
+            OperationComplete?.SafeInvoke(this, operationStateEventArgs);
         }
     }
 
@@ -3650,11 +3681,7 @@ private void HandlePipelineStateChanged(object sender,
                 case PipelineState.Completed:
                 case PipelineState.Stopped:
                 case PipelineState.Failed:
-                    if (RemoteRunspace != null)
-                    {
-                        RemoteRunspace.CloseAsync();
-                    }
-
+                    RemoteRunspace?.CloseAsync();
                     break;
             }
         }
@@ -3925,9 +3952,9 @@ internal Collection<PSSession> GetDisconnectedSessions(Collection<WSManConnectio
                     string shellUri = null;
                     if (!string.IsNullOrEmpty(configurationName))
                     {
-                        shellUri = (configurationName.IndexOf(
-                                    System.Management.Automation.Remoting.Client.WSManNativeApi.ResourceURIPrefix, StringComparison.OrdinalIgnoreCase) != -1) ?
-                                    configurationName : System.Management.Automation.Remoting.Client.WSManNativeApi.ResourceURIPrefix + configurationName;
+                        shellUri = configurationName.Contains(WSManNativeApi.ResourceURIPrefix, StringComparison.OrdinalIgnoreCase)
+                            ? configurationName
+                            : WSManNativeApi.ResourceURIPrefix + configurationName;
                     }
 
                     foreach (Runspace runspace in runspaces)
@@ -4122,7 +4149,7 @@ internal static string ExtractMessage(
                                     try
                                     {
                                         // WinRM returns both signed and unsigned 32 bit string values.  Convert to signed 32 bit integer.
-                                        Int64 eCode = Convert.ToInt64(errorCodeString, System.Globalization.NumberFormatInfo.InvariantInfo);
+                                        long eCode = Convert.ToInt64(errorCodeString, System.Globalization.NumberFormatInfo.InvariantInfo);
                                         unchecked
                                         {
                                             errorCode = (int)eCode;
@@ -4204,10 +4231,7 @@ internal static TypeTable BuiltInTypesTable
                 {
                     lock (s_SyncObject)
                     {
-                        if (s_TypeTable == null)
-                        {
-                            s_TypeTable = TypeTable.LoadDefaultTypeFiles();
-                        }
+                        s_TypeTable ??= TypeTable.LoadDefaultTypeFiles();
                     }
                 }
 
diff --git a/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs b/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs
index cbc5f82742b..bf456e85db2 100644
--- a/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/PushRunspaceCommand.cs
@@ -55,9 +55,27 @@ public class EnterPSSessionCommand : PSRemotingBaseCmdlet
         /// </summary>
         [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true,
             ParameterSetName = PSRemotingBaseCmdlet.SSHHostParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public new string HostName { get; set; }
 
+        /// <summary>
+        /// Gets or sets the Hashtable containing options to be passed to OpenSSH.
+        /// </summary>
+        [Parameter(ParameterSetName = PSRemotingBaseCmdlet.SSHHostParameterSet)]
+        [ValidateNotNullOrEmpty]
+        public override Hashtable Options 
+        { 
+            get 
+            {
+                return base.Options;
+            }
+
+            set
+            {
+                base.Options = value;
+            }
+        }
+
         #endregion
 
         /// <summary>
@@ -152,7 +170,7 @@ public class EnterPSSessionCommand : PSRemotingBaseCmdlet
                    ParameterSetName = VMIdParameterSet)]
         [Parameter(Position = 1, Mandatory = true, ValueFromPipelineByPropertyName = true,
                    ParameterSetName = VMNameParameterSet)]
-        [Credential()]
+        [Credential]
         public override PSCredential Credential
         {
             get { return base.Credential; }
@@ -247,7 +265,7 @@ protected override void ProcessRecord()
             }
 
             // for the console host and Graphical PowerShell host
-            // we want to skip pushing into the the runspace if
+            // we want to skip pushing into the runspace if
             // the host is in a nested prompt
             System.Management.Automation.Internal.Host.InternalHost chost =
                 this.Host as System.Management.Automation.Internal.Host.InternalHost;
@@ -314,7 +332,10 @@ protected override void ProcessRecord()
             }
 
             // If runspace is null then the error record has already been written and we can exit.
-            if (remoteRunspace == null) { return; }
+            if (remoteRunspace == null)
+            {
+                return;
+            }
 
             // If the runspace is in a disconnected state try to connect.
             bool runspaceConnected = false;
@@ -1004,7 +1025,7 @@ private RemoteRunspace GetRunspaceForVMSession()
             //
             // VM should be in running state.
             //
-            if ((VMState)results[0].Properties["State"].Value != VMState.Running)
+            if (GetVMStateProperty(results[0]) != VMState.Running)
             {
                 WriteError(
                     new ErrorRecord(
@@ -1262,7 +1283,7 @@ private RemoteRunspace GetRunspaceForContainerSession()
         private RemoteRunspace GetRunspaceForSSHSession()
         {
             ParseSshHostName(HostName, out string host, out string userName, out int port);
-            var sshConnectionInfo = new SSHConnectionInfo(userName, host, this.KeyFilePath, port, this.Subsystem);
+            var sshConnectionInfo = new SSHConnectionInfo(userName, host, KeyFilePath, port, Subsystem, ConnectingTimeout, Options);
             var typeTable = TypeTable.LoadDefaultTypeFiles();
 
             // Use the class _tempRunspace field while the runspace is being opened so that StopProcessing can be handled at that time.
diff --git a/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs b/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs
index 97585f1de1b..b1759d6a88e 100644
--- a/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/ReceiveJob.cs
@@ -171,7 +171,7 @@ public PSSession[] Session
         /// If the results need to be not removed from the store
         /// after being written. Default is results are removed.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Keep
         {
             get
@@ -190,7 +190,7 @@ public SwitchParameter Keep
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter NoRecurse
         {
             get
@@ -208,7 +208,7 @@ public SwitchParameter NoRecurse
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Force
         { get; set; }
 
@@ -245,7 +245,7 @@ public override string[] Command
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter Wait
         {
             get
@@ -262,7 +262,7 @@ public SwitchParameter Wait
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter AutoRemoveJob
         {
             get
@@ -278,7 +278,7 @@ public SwitchParameter AutoRemoveJob
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter WriteEvents
         {
             get
@@ -294,7 +294,7 @@ public SwitchParameter WriteEvents
 
         /// <summary>
         /// </summary>
-        [Parameter()]
+        [Parameter]
         public SwitchParameter WriteJobInResults
         {
             get
@@ -823,10 +823,7 @@ private void WriteJobResults(Job job)
                 {
                     if (v == null) continue;
                     MshCommandRuntime mshCommandRuntime = CommandRuntime as MshCommandRuntime;
-                    if (mshCommandRuntime != null)
-                    {
-                        mshCommandRuntime.WriteVerbose(v, true);
-                    }
+                    mshCommandRuntime?.WriteVerbose(v, true);
                 }
 
                 Collection<DebugRecord> debugRecords = ReadAll(job.Debug);
@@ -835,10 +832,7 @@ private void WriteJobResults(Job job)
                 {
                     if (d == null) continue;
                     MshCommandRuntime mshCommandRuntime = CommandRuntime as MshCommandRuntime;
-                    if (mshCommandRuntime != null)
-                    {
-                        mshCommandRuntime.WriteDebug(d, true);
-                    }
+                    mshCommandRuntime?.WriteDebug(d, true);
                 }
 
                 Collection<WarningRecord> warningRecords = ReadAll(job.Warning);
@@ -847,10 +841,7 @@ private void WriteJobResults(Job job)
                 {
                     if (w == null) continue;
                     MshCommandRuntime mshCommandRuntime = CommandRuntime as MshCommandRuntime;
-                    if (mshCommandRuntime != null)
-                    {
-                        mshCommandRuntime.WriteWarning(w, true);
-                    }
+                    mshCommandRuntime?.WriteWarning(w, true);
                 }
 
                 Collection<ProgressRecord> progressRecords = ReadAll(job.Progress);
@@ -859,10 +850,7 @@ private void WriteJobResults(Job job)
                 {
                     if (p == null) continue;
                     MshCommandRuntime mshCommandRuntime = CommandRuntime as MshCommandRuntime;
-                    if (mshCommandRuntime != null)
-                    {
-                        mshCommandRuntime.WriteProgress(p, true);
-                    }
+                    mshCommandRuntime?.WriteProgress(p, true);
                 }
 
                 Collection<InformationRecord> informationRecords = ReadAll(job.Information);
@@ -871,10 +859,7 @@ private void WriteJobResults(Job job)
                 {
                     if (p == null) continue;
                     MshCommandRuntime mshCommandRuntime = CommandRuntime as MshCommandRuntime;
-                    if (mshCommandRuntime != null)
-                    {
-                        mshCommandRuntime.WriteInformation(p, true);
-                    }
+                    mshCommandRuntime?.WriteInformation(p, true);
                 }
             }
 
@@ -1065,10 +1050,7 @@ private void AggregateResultsFromJob(Job job)
                 {
                     lock (_syncObject)
                     {
-                        if (_outputProcessingNotification == null)
-                        {
-                            _outputProcessingNotification = new OutputProcessingState();
-                        }
+                        _outputProcessingNotification ??= new OutputProcessingState();
                     }
                 }
 
@@ -1181,14 +1163,21 @@ private void Error_DataAdded(object sender, DataAddedEventArgs e)
         {
             lock (_syncObject)
             {
-                if (_isDisposed) return;
+                if (_isDisposed)
+                {
+                    return;
+                }
             }
 
             _writeExistingData.WaitOne();
             _resultsReaderWriterLock.EnterReadLock();
             try
             {
-                if (!_results.IsOpen) return;
+                if (!_results.IsOpen)
+                {
+                    return;
+                }
+
                 PSDataCollection<ErrorRecord> errorRecords = sender as PSDataCollection<ErrorRecord>;
                 Diagnostics.Assert(errorRecords != null, "PSDataCollection is raising an inappropriate event");
                 ErrorRecord errorRecord = GetData(errorRecords, e.Index);
diff --git a/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs b/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs
index 12cced4ae91..67477e5b36f 100644
--- a/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/ReceivePSSession.cs
@@ -36,7 +36,7 @@ namespace Microsoft.PowerShell.Commands
     ///
     /// The user can specify how command output data is returned by using the public
     /// OutTarget enumeration (Host, Job).
-    /// The default actions of this cmdlet is to always direct ouput to host unless
+    /// The default actions of this cmdlet is to always direct output to host unless
     /// a job object already exists on the client that is associated with the running
     /// command.  In this case the existing job object is connected to the running
     /// command and returned.
@@ -116,7 +116,7 @@ public class ReceivePSSessionCommand : PSRemotingCmdlet
         /// <summary>
         /// This parameters specifies the appname which identifies the connection
         /// end point on the remote machine. If this parameter is not specified
-        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If thats
+        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If that's
         /// not specified as well, then "WSMAN" will be used.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
@@ -125,7 +125,10 @@ public class ReceivePSSessionCommand : PSRemotingCmdlet
                    ParameterSetName = ReceivePSSessionCommand.ComputerInstanceIdParameterSet)]
         public string ApplicationName
         {
-            get { return _appName; }
+            get
+            {
+                return _appName;
+            }
 
             set
             {
@@ -150,7 +153,10 @@ public string ApplicationName
                    ParameterSetName = ReceivePSSessionCommand.ConnectionUriInstanceIdParameterSet)]
         public string ConfigurationName
         {
-            get { return _shell; }
+            get
+            {
+                return _shell;
+            }
 
             set
             {
@@ -254,10 +260,13 @@ public SwitchParameter AllowRedirection
         [Parameter(ParameterSetName = ReceivePSSessionCommand.ComputerSessionNameParameterSet)]
         [Parameter(ParameterSetName = ReceivePSSessionCommand.ConnectionUriSessionNameParameterSet)]
         [Parameter(ParameterSetName = ReceivePSSessionCommand.ConnectionUriInstanceIdParameterSet)]
-        [Credential()]
+        [Credential]
         public PSCredential Credential
         {
-            get { return _psCredential; }
+            get
+            {
+                return _psCredential;
+            }
 
             set
             {
@@ -278,7 +287,10 @@ public PSCredential Credential
         [Parameter(ParameterSetName = ReceivePSSessionCommand.ConnectionUriInstanceIdParameterSet)]
         public AuthenticationMechanism Authentication
         {
-            get { return _authentication; }
+            get
+            {
+                return _authentication;
+            }
 
             set
             {
@@ -300,7 +312,10 @@ public AuthenticationMechanism Authentication
         [Parameter(ParameterSetName = ReceivePSSessionCommand.ConnectionUriInstanceIdParameterSet)]
         public string CertificateThumbprint
         {
-            get { return _thumbprint; }
+            get
+            {
+                return _thumbprint;
+            }
 
             set
             {
@@ -389,15 +404,8 @@ protected override void StopProcessing()
                 tmpJob = _job;
             }
 
-            if (tmpPipeline != null)
-            {
-                tmpPipeline.StopAsync();
-            }
-
-            if (tmpJob != null)
-            {
-                tmpJob.StopJob();
-            }
+            tmpPipeline?.StopAsync();
+            tmpJob?.StopJob();
         }
 
         #endregion
@@ -438,9 +446,9 @@ private void QueryForAndConnectCommands(string name, Guid instanceId)
             string shellUri = null;
             if (!string.IsNullOrEmpty(ConfigurationName))
             {
-                shellUri = (ConfigurationName.IndexOf(
-                            System.Management.Automation.Remoting.Client.WSManNativeApi.ResourceURIPrefix, StringComparison.OrdinalIgnoreCase) != -1) ?
-                            ConfigurationName : System.Management.Automation.Remoting.Client.WSManNativeApi.ResourceURIPrefix + ConfigurationName;
+                shellUri = ConfigurationName.Contains(WSManNativeApi.ResourceURIPrefix, StringComparison.OrdinalIgnoreCase)
+                    ? ConfigurationName
+                    : WSManNativeApi.ResourceURIPrefix + ConfigurationName;
             }
 
             // Connect selected runspace/command and direct command output to host
@@ -803,19 +811,13 @@ private void DisconnectAndStopRunningCmds(RemoteRunspace remoteRunspace)
 
                 remoteRunspace.Disconnect();
 
-                if (stopPipelineReceive != null)
+                try
                 {
-                    try
-                    {
-                        stopPipelineReceive.Set();
-                    }
-                    catch (ObjectDisposedException) { }
+                    stopPipelineReceive?.Set();
                 }
+                catch (ObjectDisposedException) { }
 
-                if (job != null)
-                {
-                    job.StopJob();
-                }
+                job?.StopJob();
             }
         }
 
@@ -849,7 +851,10 @@ private void ConnectSessionToHost(PSSession session, PSRemotingJob job = null)
                 {
                     Job childJob = job.ChildJobs[0];
                     job.ConnectJobs();
-                    if (CheckForDebugMode(session, true)) { return; }
+                    if (CheckForDebugMode(session, true))
+                    {
+                        return;
+                    }
 
                     do
                     {
@@ -861,10 +866,7 @@ private void ConnectSessionToHost(PSSession session, PSRemotingJob job = null)
 
                         foreach (var result in childJob.ReadAll())
                         {
-                            if (result != null)
-                            {
-                                result.WriteStreamObject(this);
-                            }
+                            result?.WriteStreamObject(this);
                         }
 
                         if (index == 0)
@@ -922,7 +924,10 @@ private void ConnectSessionToHost(PSSession session, PSRemotingJob job = null)
 
                     pipelineConnectedEvent = null;
 
-                    if (CheckForDebugMode(session, true)) { return; }
+                    if (CheckForDebugMode(session, true))
+                    {
+                        return;
+                    }
 
                     // Wait for remote command to complete, while writing any available data.
                     while (!_remotePipeline.Output.EndOfPipeline)
@@ -1101,7 +1106,10 @@ private void ConnectSessionToJob(PSSession session, PSRemotingJob job = null)
                 }
             }
 
-            if (CheckForDebugMode(session, true)) { return; }
+            if (CheckForDebugMode(session, true))
+            {
+                return;
+            }
 
             // Write the job object to output.
             WriteObject(job);
@@ -1158,7 +1166,7 @@ private static PSSession ConnectSession(PSSession session, out Exception ex)
         /// <returns>PSSession disconnected runspace object.</returns>
         private PSSession TryGetSessionFromServer(PSSession session)
         {
-            if (!(session.Runspace is RemoteRunspace remoteRunspace))
+            if (session.Runspace is not RemoteRunspace remoteRunspace)
             {
                 return null;
             }
@@ -1325,7 +1333,7 @@ public enum OutTarget
         Host = 1,
 
         /// <summary>
-        /// Asynchronous mode.  Receive-PSSession ouput data goes to returned job object.
+        /// Asynchronous mode.  Receive-PSSession output data goes to returned job object.
         /// </summary>
         Job = 2
     }
diff --git a/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs b/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs
index f8c0a71a0df..af98749c4e5 100644
--- a/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/RemoveJob.cs
@@ -61,12 +61,17 @@ internal List<Job> FindJobsMatchingByName(
             List<Job> matches = new List<Job>();
             Hashtable duplicateDetector = new Hashtable();
 
-            if (_names == null) return matches;
+            if (_names == null)
+            {
+                return matches;
+            }
 
             foreach (string name in _names)
             {
                 if (string.IsNullOrEmpty(name))
+                {
                     continue;
+                }
 
                 // search all jobs in repository.
                 bool jobFound = false;
@@ -94,7 +99,10 @@ internal List<Job> FindJobsMatchingByName(
                 jobFound = jobFound || job2Found;
 
                 // if a match is not found, write an error)
-                if (jobFound || !writeErrorOnNoMatch || WildcardPattern.ContainsWildcardCharacters(name)) continue;
+                if (jobFound || !writeErrorOnNoMatch || WildcardPattern.ContainsWildcardCharacters(name))
+                {
+                    continue;
+                }
 
                 Exception ex = PSTraceSource.NewArgumentException(NameParameter, RemotingErrorIdStrings.JobWithSpecifiedNameNotFound, name);
                 WriteError(new ErrorRecord(ex, "JobWithSpecifiedNameNotFound", ErrorCategory.ObjectNotFound, name));
@@ -191,7 +199,10 @@ internal List<Job> FindJobsMatchingByInstanceId(bool recurse, bool writeobject,
 
             Hashtable duplicateDetector = new Hashtable();
 
-            if (_instanceIds == null) return matches;
+            if (_instanceIds == null)
+            {
+                return matches;
+            }
 
             foreach (Guid id in _instanceIds)
             {
@@ -217,7 +228,10 @@ internal List<Job> FindJobsMatchingByInstanceId(bool recurse, bool writeobject,
 
                 jobFound = jobFound || job2Found;
 
-                if (jobFound || !writeErrorOnNoMatch) continue;
+                if (jobFound || !writeErrorOnNoMatch)
+                {
+                    continue;
+                }
 
                 Exception ex = PSTraceSource.NewArgumentException(InstanceIdParameter,
                                                                   RemotingErrorIdStrings.JobWithSpecifiedInstanceIdNotFound,
@@ -306,7 +320,10 @@ internal List<Job> FindJobsMatchingBySessionId(bool recurse, bool writeobject, b
         {
             List<Job> matches = new List<Job>();
 
-            if (_sessionIds == null) return matches;
+            if (_sessionIds == null)
+            {
+                return matches;
+            }
 
             Hashtable duplicateDetector = new Hashtable();
 
@@ -331,7 +348,10 @@ internal List<Job> FindJobsMatchingBySessionId(bool recurse, bool writeobject, b
 
                 jobFound = jobFound || job2Found;
 
-                if (jobFound || !writeErrorOnNoMatch) continue;
+                if (jobFound || !writeErrorOnNoMatch)
+                {
+                    continue;
+                }
 
                 Exception ex = PSTraceSource.NewArgumentException(SessionIdParameter, RemotingErrorIdStrings.JobWithSpecifiedSessionIdNotFound, id);
                 WriteError(new ErrorRecord(ex, "JobWithSpecifiedSessionNotFound", ErrorCategory.ObjectNotFound, id));
@@ -408,7 +428,10 @@ internal List<Job> FindJobsMatchingByCommand(
         {
             List<Job> matches = new List<Job>();
 
-            if (_commands == null) return matches;
+            if (_commands == null)
+            {
+                return matches;
+            }
 
             List<Job> jobs = new List<Job>();
 
@@ -476,7 +499,10 @@ internal List<Job> FindJobsMatchingByState(
 
             foreach (Job job in jobs)
             {
-                if (job.JobStateInfo.State != _jobstate) continue;
+                if (job.JobStateInfo.State != _jobstate)
+                {
+                    continue;
+                }
 
                 if (writeobject)
                 {
@@ -558,7 +584,10 @@ private static bool FindJobsMatchingByFilterHelper(List<Job> matches, List<Job>
         internal List<Job> CopyJobsToList(Job[] jobs, bool writeobject, bool checkIfJobCanBeRemoved)
         {
             List<Job> matches = new List<Job>();
-            if (jobs == null) return matches;
+            if (jobs == null)
+            {
+                return matches;
+            }
 
             foreach (Job job in jobs)
             {
@@ -890,10 +919,12 @@ protected override void ProcessRecord()
             // Now actually remove the jobs
             foreach (Job job in listOfJobsToRemove)
             {
-                string message = GetMessage(RemotingErrorIdStrings.StopPSJobWhatIfTarget,
-                        job.Command, job.Id);
+                string message = GetMessage(RemotingErrorIdStrings.StopPSJobWhatIfTarget, job.Command, job.Id);
 
-                if (!ShouldProcess(message, VerbsCommon.Remove)) continue;
+                if (!ShouldProcess(message, VerbsCommon.Remove))
+                {
+                    continue;
+                }
 
                 Job2 job2 = job as Job2;
                 if (!job.IsFinishedState(job.JobStateInfo.State))
@@ -1037,7 +1068,11 @@ public void Dispose()
         /// <param name="disposing"></param>
         protected void Dispose(bool disposing)
         {
-            if (!disposing) return;
+            if (!disposing)
+            {
+                return;
+            }
+
             foreach (var pair in _cleanUpActions)
             {
                 pair.Key.StopJobCompleted -= pair.Value;
diff --git a/src/System.Management.Automation/engine/remoting/commands/ResumeJob.cs b/src/System.Management.Automation/engine/remoting/commands/ResumeJob.cs
deleted file mode 100644
index 1b5fcd7bbe4..00000000000
--- a/src/System.Management.Automation/engine/remoting/commands/ResumeJob.cs
+++ /dev/null
@@ -1,280 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Management.Automation;
-using System.Management.Automation.Remoting;
-using System.Threading;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// This cmdlet resumes the jobs that are Job2. Errors are added for each Job that is not Job2.
-    /// </summary>
-#if !CORECLR
-    [SuppressMessage("Microsoft.PowerShell", "PS1012:CallShouldProcessOnlyIfDeclaringSupport")]
-    [Cmdlet(VerbsLifecycle.Resume, "Job", SupportsShouldProcess = true, DefaultParameterSetName = JobCmdletBase.SessionIdParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=210611")]
-#endif
-    [OutputType(typeof(Job))]
-    public class ResumeJobCommand : JobCmdletBase, IDisposable
-    {
-        #region Parameters
-        /// <summary>
-        /// Specifies the Jobs objects which need to be
-        /// suspended.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = JobParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Job[] Job
-        {
-            get
-            {
-                return _jobs;
-            }
-
-            set
-            {
-                _jobs = value;
-            }
-        }
-
-        private Job[] _jobs;
-
-        /// <summary>
-        /// </summary>
-        public override string[] Command
-        {
-            get
-            {
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// Specifies whether to delay returning from the cmdlet until all jobs reach a running state.
-        /// This could take significant time due to workflow throttling.
-        /// </summary>
-        [Parameter(ParameterSetName = ParameterAttribute.AllParameterSets)]
-        public SwitchParameter Wait { get; set; }
-
-        #endregion Parameters
-
-        #region Overrides
-
-        /// <summary>
-        /// Resume the Job.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // List of jobs to resume
-            List<Job> jobsToResume = null;
-
-            switch (ParameterSetName)
-            {
-                case NameParameterSet:
-                    {
-                        jobsToResume = FindJobsMatchingByName(true, false, true, false);
-                    }
-
-                    break;
-
-                case InstanceIdParameterSet:
-                    {
-                        jobsToResume = FindJobsMatchingByInstanceId(true, false, true, false);
-                    }
-
-                    break;
-
-                case SessionIdParameterSet:
-                    {
-                        jobsToResume = FindJobsMatchingBySessionId(true, false, true, false);
-                    }
-
-                    break;
-
-                case StateParameterSet:
-                    {
-                        jobsToResume = FindJobsMatchingByState(false);
-                    }
-
-                    break;
-
-                case FilterParameterSet:
-                    {
-                        jobsToResume = FindJobsMatchingByFilter(false);
-                    }
-
-                    break;
-
-                default:
-                    {
-                        jobsToResume = CopyJobsToList(_jobs, false, false);
-                    }
-
-                    break;
-            }
-
-            _allJobsToResume.AddRange(jobsToResume);
-
-            // Blue: 151804 When resuming a single suspended workflow job, Resume-job cmdlet doesn't wait for the job to be in running state
-            // Setting Wait to true so that this cmdlet will wait for the running job state.
-            if (_allJobsToResume.Count == 1)
-                Wait = true;
-
-            foreach (Job job in jobsToResume)
-            {
-                var job2 = job as Job2;
-
-                // If the job is not Job2, the resume operation is not supported.
-                if (job2 == null)
-                {
-                    WriteError(new ErrorRecord(PSTraceSource.NewNotSupportedException(RemotingErrorIdStrings.JobResumeNotSupported, job.Id), "Job2OperationNotSupportedOnJob", ErrorCategory.InvalidType, (object)job));
-                    continue;
-                }
-
-                string targetString = PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemovePSJobWhatIfTarget, job.Command, job.Id);
-                if (ShouldProcess(targetString, VerbsLifecycle.Resume))
-                {
-                    _cleanUpActions.Add(job2, HandleResumeJobCompleted);
-                    job2.ResumeJobCompleted += HandleResumeJobCompleted;
-
-                    lock (_syncObject)
-                    {
-                        if (!_pendingJobs.Contains(job2.InstanceId))
-                        {
-                            _pendingJobs.Add(job2.InstanceId);
-                        }
-                    }
-
-                    job2.ResumeJobAsync();
-                }
-            }
-        }
-
-        private bool _warnInvalidState = false;
-        private readonly HashSet<Guid> _pendingJobs = new HashSet<Guid>();
-        private readonly ManualResetEvent _waitForJobs = new ManualResetEvent(false);
-        private readonly Dictionary<Job2, EventHandler<AsyncCompletedEventArgs>> _cleanUpActions =
-            new Dictionary<Job2, EventHandler<AsyncCompletedEventArgs>>();
-        private readonly List<ErrorRecord> _errorsToWrite = new List<ErrorRecord>();
-        private readonly List<Job> _allJobsToResume = new List<Job>();
-        private readonly object _syncObject = new object();
-        private bool _needToCheckForWaitingJobs;
-
-        private void HandleResumeJobCompleted(object sender, AsyncCompletedEventArgs eventArgs)
-        {
-            Job job = sender as Job;
-
-            if (eventArgs.Error != null && eventArgs.Error is InvalidJobStateException)
-            {
-                _warnInvalidState = true;
-            }
-
-            var parentJob = job as ContainerParentJob;
-            if (parentJob != null && parentJob.ExecutionError.Count > 0)
-            {
-                foreach (
-                    var e in
-                        parentJob.ExecutionError.Where(e => e.FullyQualifiedErrorId == "ContainerParentJobResumeAsyncError")
-                    )
-                {
-                    if (e.Exception is InvalidJobStateException)
-                    {
-                        // if any errors were invalid job state exceptions, warn the user.
-                        // This is to support Get-Job | Resume-Job scenarios when many jobs
-                        // are Completed, etc.
-                        _warnInvalidState = true;
-                    }
-                    else
-                    {
-                        _errorsToWrite.Add(e);
-                    }
-                }
-
-                parentJob.ExecutionError.Clear();
-            }
-
-            bool releaseWait = false;
-            lock (_syncObject)
-            {
-                if (_pendingJobs.Contains(job.InstanceId))
-                {
-                    _pendingJobs.Remove(job.InstanceId);
-                }
-
-                if (_needToCheckForWaitingJobs && _pendingJobs.Count == 0)
-                    releaseWait = true;
-            }
-            // end processing has been called
-            // set waithandle if this is the last one
-            if (releaseWait)
-                _waitForJobs.Set();
-        }
-
-        /// <summary>
-        /// End Processing.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            bool jobsPending = false;
-            lock (_syncObject)
-            {
-                _needToCheckForWaitingJobs = true;
-                if (_pendingJobs.Count > 0)
-                    jobsPending = true;
-            }
-
-            if (Wait && jobsPending)
-                _waitForJobs.WaitOne();
-
-            if (_warnInvalidState) WriteWarning(RemotingErrorIdStrings.ResumeJobInvalidJobState);
-            foreach (var e in _errorsToWrite) WriteError(e);
-            foreach (var j in _allJobsToResume) WriteObject(j);
-            base.EndProcessing();
-        }
-
-        /// <summary>
-        /// </summary>
-        protected override void StopProcessing()
-        {
-            _waitForJobs.Set();
-        }
-
-        #endregion Overrides
-
-        #region Dispose
-
-        /// <summary>
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// </summary>
-        /// <param name="disposing"></param>
-        protected void Dispose(bool disposing)
-        {
-            if (!disposing) return;
-            foreach (var pair in _cleanUpActions)
-            {
-                pair.Key.ResumeJobCompleted -= pair.Value;
-            }
-
-            _waitForJobs.Dispose();
-        }
-        #endregion Dispose
-    }
-}
diff --git a/src/System.Management.Automation/engine/remoting/commands/StartJob.cs b/src/System.Management.Automation/engine/remoting/commands/StartJob.cs
index 90e10bb8f44..9913ec64ced 100644
--- a/src/System.Management.Automation/engine/remoting/commands/StartJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/StartJob.cs
@@ -222,7 +222,7 @@ public override string Subsystem
         [Parameter(ParameterSetName = StartJobCommand.FilePathComputerNameParameterSet)]
         [Parameter(ParameterSetName = StartJobCommand.ComputerNameParameterSet)]
         [Parameter(ParameterSetName = StartJobCommand.LiteralFilePathComputerNameParameterSet)]
-        [Credential()]
+        [Credential]
         public override PSCredential Credential
         {
             get
@@ -277,7 +277,7 @@ public override string ConfigurationName
         /// <summary>
         /// Overriding to suppress this parameter.
         /// </summary>
-        public override Int32 ThrottleLimit
+        public override int ThrottleLimit
         {
             get
             {
@@ -484,7 +484,7 @@ public virtual ScriptBlock InitializationScript
         /// Gets or sets an initial working directory for the powershell background job.
         /// </summary>
         [Parameter]
-        [ValidateNotNullOrEmpty]
+        [ValidateNotNullOrWhiteSpace]
         public string WorkingDirectory { get; set; }
 
         /// <summary>
@@ -512,10 +512,12 @@ public virtual Version PSVersion
 
             set
             {
-                RemotingCommandUtil.CheckPSVersion(value);
-
-                // Check if specified version of PowerShell is installed
-                RemotingCommandUtil.CheckIfPowerShellVersionIsInstalled(value);
+                // PSVersion value can only be 5.1 for Start-Job.
+                if (!(value.Major == 5 && value.Minor == 1))
+                {
+                    throw new ArgumentException(
+                        StringUtil.Format(RemotingErrorIdStrings.PSVersionParameterOutOfRange, value, "PSVersion"));
+                }
 
                 _psVersion = value;
             }
@@ -599,7 +601,7 @@ protected override void BeginProcessing()
                 ThrowTerminatingError(errorRecord);
             }
 
-            if (WorkingDirectory != null && !Directory.Exists(WorkingDirectory))
+            if (WorkingDirectory != null && !InvokeProvider.Item.IsContainer(WorkingDirectory))
             {
                 string message = StringUtil.Format(RemotingErrorIdStrings.StartJobWorkingDirectoryNotFound, WorkingDirectory);
                 var errorRecord = new ErrorRecord(
@@ -644,7 +646,7 @@ protected override void CreateHelpersForSpecifiedComputerNames()
         {
             // If we're in ConstrainedLanguage mode and the system is in lockdown mode,
             // ensure that they haven't specified a ScriptBlock or InitScript - as
-            // we can't protect that boundary
+            // we can't protect that boundary.
             if ((Context.LanguageMode == PSLanguageMode.ConstrainedLanguage) &&
                 (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Enforce) &&
                 ((ScriptBlock != null) || (InitializationScript != null)))
diff --git a/src/System.Management.Automation/engine/remoting/commands/StopJob.cs b/src/System.Management.Automation/engine/remoting/commands/StopJob.cs
index 7890bdc54f0..c298b495bb9 100644
--- a/src/System.Management.Automation/engine/remoting/commands/StopJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/StopJob.cs
@@ -137,7 +137,11 @@ protected override void ProcessRecord()
 
             foreach (Job job in jobsToStop)
             {
-                if (this.Stopping) return;
+                if (this.Stopping)
+                {
+                    return;
+                }
+
                 if (job.IsFinishedState(job.JobStateInfo.State))
                 {
                     continue;
@@ -280,7 +284,11 @@ public void Dispose()
         /// <param name="disposing"></param>
         protected void Dispose(bool disposing)
         {
-            if (!disposing) return;
+            if (!disposing)
+            {
+                return;
+            }
+
             foreach (var pair in _cleanUpActions)
             {
                 pair.Key.StopJobCompleted -= pair.Value;
diff --git a/src/System.Management.Automation/engine/remoting/commands/SuspendJob.cs b/src/System.Management.Automation/engine/remoting/commands/SuspendJob.cs
deleted file mode 100644
index 1c729d8df74..00000000000
--- a/src/System.Management.Automation/engine/remoting/commands/SuspendJob.cs
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Management.Automation;
-using System.Management.Automation.Remoting;
-using System.Threading;
-
-namespace Microsoft.PowerShell.Commands
-{
-    /// <summary>
-    /// This cmdlet suspends the jobs that are Job2. Errors are added for each Job that is not Job2.
-    /// </summary>
-#if !CORECLR
-    [SuppressMessage("Microsoft.PowerShell", "PS1012:CallShouldProcessOnlyIfDeclaringSupport")]
-    [Cmdlet(VerbsLifecycle.Suspend, "Job", SupportsShouldProcess = true, DefaultParameterSetName = JobCmdletBase.SessionIdParameterSet,
-        HelpUri = "https://go.microsoft.com/fwlink/?LinkID=210613")]
-    [OutputType(typeof(Job))]
-#endif
-    public class SuspendJobCommand : JobCmdletBase, IDisposable
-    {
-        #region Parameters
-        /// <summary>
-        /// Specifies the Jobs objects which need to be
-        /// suspended.
-        /// </summary>
-        [Parameter(Mandatory = true,
-                   Position = 0,
-                   ValueFromPipeline = true,
-                   ValueFromPipelineByPropertyName = true,
-                   ParameterSetName = JobParameterSet)]
-        [ValidateNotNullOrEmpty]
-        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
-        public Job[] Job
-        {
-            get
-            {
-                return _jobs;
-            }
-
-            set
-            {
-                _jobs = value;
-            }
-        }
-
-        private Job[] _jobs;
-
-        /// <summary>
-        /// </summary>
-        public override string[] Command
-        {
-            get
-            {
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// If state of the job is running , this will forcefully suspend it.
-        /// </summary>
-        [Parameter(ParameterSetName = RemoveJobCommand.InstanceIdParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobCommand.JobParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobCommand.NameParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobCommand.SessionIdParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobCommand.FilterParameterSet)]
-        [Parameter(ParameterSetName = RemoveJobCommand.StateParameterSet)]
-        [Alias("F")]
-        public SwitchParameter Force
-        {
-            get
-            {
-                return _force;
-            }
-
-            set
-            {
-                _force = value;
-            }
-        }
-
-        private bool _force = false;
-
-        /// <summary>
-        /// </summary>
-        [Parameter()]
-        public SwitchParameter Wait
-        {
-            get
-            {
-                return _wait;
-            }
-
-            set
-            {
-                _wait = value;
-            }
-        }
-
-        private bool _wait = false;
-
-        #endregion Parameters
-
-        #region Overrides
-
-        /// <summary>
-        /// Suspend the Job.
-        /// </summary>
-        protected override void ProcessRecord()
-        {
-            // List of jobs to suspend
-            List<Job> jobsToSuspend = null;
-
-            switch (ParameterSetName)
-            {
-                case NameParameterSet:
-                    {
-                        jobsToSuspend = FindJobsMatchingByName(true, false, true, false);
-                    }
-
-                    break;
-
-                case InstanceIdParameterSet:
-                    {
-                        jobsToSuspend = FindJobsMatchingByInstanceId(true, false, true, false);
-                    }
-
-                    break;
-
-                case SessionIdParameterSet:
-                    {
-                        jobsToSuspend = FindJobsMatchingBySessionId(true, false, true, false);
-                    }
-
-                    break;
-
-                case StateParameterSet:
-                    {
-                        jobsToSuspend = FindJobsMatchingByState(false);
-                    }
-
-                    break;
-
-                case FilterParameterSet:
-                    {
-                        jobsToSuspend = FindJobsMatchingByFilter(false);
-                    }
-
-                    break;
-
-                default:
-                    {
-                        jobsToSuspend = CopyJobsToList(_jobs, false, false);
-                    }
-
-                    break;
-            }
-
-            _allJobsToSuspend.AddRange(jobsToSuspend);
-
-            foreach (Job job in jobsToSuspend)
-            {
-                var job2 = job as Job2;
-
-                // If the job is not Job2, the suspend operation is not supported.
-                if (job2 == null)
-                {
-                    WriteError(
-                        new ErrorRecord(
-                            PSTraceSource.NewNotSupportedException(RemotingErrorIdStrings.JobSuspendNotSupported, job.Id),
-                            "Job2OperationNotSupportedOnJob", ErrorCategory.InvalidType, (object)job));
-                    continue;
-                }
-
-                string targetString =
-                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemovePSJobWhatIfTarget,
-                                                                   job.Command, job.Id);
-                if (ShouldProcess(targetString, VerbsLifecycle.Suspend))
-                {
-                    if (_wait)
-                    {
-                        _cleanUpActions.Add(job2, HandleSuspendJobCompleted);
-                    }
-                    else
-                    {
-                        if (job2.IsFinishedState(job2.JobStateInfo.State) || job2.JobStateInfo.State == JobState.Stopping)
-                        {
-                            _warnInvalidState = true;
-                            continue;
-                        }
-
-                        if (job2.JobStateInfo.State == JobState.Suspending || job2.JobStateInfo.State == JobState.Suspended)
-                            continue;
-
-                        job2.StateChanged += noWait_Job2_StateChanged;
-                    }
-
-                    job2.SuspendJobCompleted += HandleSuspendJobCompleted;
-
-                    lock (_syncObject)
-                    {
-                        if (!_pendingJobs.Contains(job2.InstanceId))
-                        {
-                            _pendingJobs.Add(job2.InstanceId);
-                        }
-                    }
-
-                    // there could be possibility that the job gets completed before or after the
-                    // subscribing to nowait_job2_statechanged event so checking it again.
-                    if (!_wait && (job2.IsFinishedState(job2.JobStateInfo.State) || job2.JobStateInfo.State == JobState.Suspending || job2.JobStateInfo.State == JobState.Suspended))
-                    {
-                        this.ProcessExecutionErrorsAndReleaseWaitHandle(job2);
-                    }
-
-                    job2.SuspendJobAsync(_force, RemotingErrorIdStrings.ForceSuspendJob);
-                }
-            }
-        }
-
-        private bool _warnInvalidState = false;
-        private readonly HashSet<Guid> _pendingJobs = new HashSet<Guid>();
-        private readonly ManualResetEvent _waitForJobs = new ManualResetEvent(false);
-        private readonly Dictionary<Job2, EventHandler<AsyncCompletedEventArgs>> _cleanUpActions =
-            new Dictionary<Job2, EventHandler<AsyncCompletedEventArgs>>();
-        private readonly List<ErrorRecord> _errorsToWrite = new List<ErrorRecord>();
-        private readonly List<Job> _allJobsToSuspend = new List<Job>();
-        private readonly object _syncObject = new object();
-        private bool _needToCheckForWaitingJobs;
-
-        private void noWait_Job2_StateChanged(object sender, JobStateEventArgs e)
-        {
-            Job job = sender as Job;
-
-            switch (e.JobStateInfo.State)
-            {
-                case JobState.Completed:
-                case JobState.Stopped:
-                case JobState.Failed:
-                case JobState.Suspended:
-                case JobState.Suspending:
-                    this.ProcessExecutionErrorsAndReleaseWaitHandle(job);
-                    break;
-            }
-        }
-
-        private void HandleSuspendJobCompleted(object sender, AsyncCompletedEventArgs eventArgs)
-        {
-            Job job = sender as Job;
-
-            if (eventArgs.Error != null && eventArgs.Error is InvalidJobStateException)
-            {
-                _warnInvalidState = true;
-            }
-
-            this.ProcessExecutionErrorsAndReleaseWaitHandle(job);
-        }
-
-        private void ProcessExecutionErrorsAndReleaseWaitHandle(Job job)
-        {
-            bool releaseWait = false;
-            lock (_syncObject)
-            {
-                if (_pendingJobs.Contains(job.InstanceId))
-                {
-                    _pendingJobs.Remove(job.InstanceId);
-                }
-                else
-                {
-                    // there could be a possibility of race condition where this function is getting called twice
-                    // so if job doesn't present in the _pendingJobs then just return
-                    return;
-                }
-
-                if (_needToCheckForWaitingJobs && _pendingJobs.Count == 0)
-                    releaseWait = true;
-            }
-
-            if (!_wait)
-            {
-                job.StateChanged -= noWait_Job2_StateChanged;
-                Job2 job2 = job as Job2;
-                if (job2 != null)
-                    job2.SuspendJobCompleted -= HandleSuspendJobCompleted;
-            }
-
-            var parentJob = job as ContainerParentJob;
-            if (parentJob != null && parentJob.ExecutionError.Count > 0)
-            {
-                foreach (
-                    var e in
-                        parentJob.ExecutionError.Where(e => e.FullyQualifiedErrorId == "ContainerParentJobSuspendAsyncError")
-                    )
-                {
-                    if (e.Exception is InvalidJobStateException)
-                    {
-                        // if any errors were invalid job state exceptions, warn the user.
-                        // This is to support Get-Job | Resume-Job scenarios when many jobs
-                        // are Completed, etc.
-                        _warnInvalidState = true;
-                    }
-                    else
-                    {
-                        _errorsToWrite.Add(e);
-                    }
-                }
-            }
-
-            // end processing has been called
-            // set waithandle if this is the last one
-            if (releaseWait)
-                _waitForJobs.Set();
-        }
-
-        /// <summary>
-        /// End Processing.
-        /// </summary>
-        protected override void EndProcessing()
-        {
-            bool haveToWait = false;
-            lock (_syncObject)
-            {
-                _needToCheckForWaitingJobs = true;
-                if (_pendingJobs.Count > 0)
-                    haveToWait = true;
-            }
-
-            if (haveToWait)
-                _waitForJobs.WaitOne();
-
-            if (_warnInvalidState) WriteWarning(RemotingErrorIdStrings.SuspendJobInvalidJobState);
-            foreach (var e in _errorsToWrite) WriteError(e);
-            foreach (var j in _allJobsToSuspend) WriteObject(j);
-            base.EndProcessing();
-        }
-
-        /// <summary>
-        /// </summary>
-        protected override void StopProcessing()
-        {
-            _waitForJobs.Set();
-        }
-
-        #endregion Overrides
-
-        #region Dispose
-
-        /// <summary>
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// </summary>
-        /// <param name="disposing"></param>
-        protected void Dispose(bool disposing)
-        {
-            if (!disposing) return;
-            foreach (var pair in _cleanUpActions)
-            {
-                pair.Key.SuspendJobCompleted -= pair.Value;
-            }
-
-            _waitForJobs.Dispose();
-        }
-        #endregion Dispose
-    }
-}
diff --git a/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs b/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs
index 796e97513bd..6964a1154b5 100644
--- a/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/WaitJob.cs
@@ -46,7 +46,7 @@ public class WaitJobCommand : JobCmdletBase, IDisposable
         /// </summary>
         [Parameter]
         [Alias("TimeoutSec")]
-        [ValidateRangeAttribute(-1, Int32.MaxValue)]
+        [ValidateRange(-1, int.MaxValue)]
         public int Timeout
         {
             get
@@ -244,7 +244,7 @@ private Job GetOneBlockedJob()
         {
             lock (_jobTrackingLock)
             {
-                return _jobsToWaitFor.Find(j => j.JobStateInfo.State == JobState.Blocked);
+                return _jobsToWaitFor.Find(static j => j.JobStateInfo.State == JobState.Blocked);
             }
         }
 
diff --git a/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs b/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs
index d1fc8ef531a..22af9adf9ff 100644
--- a/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/getrunspacecommand.cs
@@ -8,6 +8,7 @@
 using System.Management.Automation.Internal;
 using System.Management.Automation.Remoting;
 using System.Management.Automation.Runspaces;
+using System.Runtime.InteropServices;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -69,7 +70,7 @@ public class GetPSSessionCommand : PSRunspaceCmdlet, IDisposable
         /// <summary>
         /// This parameters specifies the appname which identifies the connection
         /// end point on the remote machine. If this parameter is not specified
-        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If thats
+        /// then the value specified in DEFAULTREMOTEAPPNAME will be used. If that's
         /// not specified as well, then "WSMAN" will be used.
         /// </summary>
         [Parameter(ValueFromPipelineByPropertyName = true,
@@ -161,7 +162,7 @@ public SwitchParameter AllowRedirection
         [Parameter(ParameterSetName = GetPSSessionCommand.ContainerIdParameterSet)]
         [Parameter(ParameterSetName = GetPSSessionCommand.VMIdParameterSet)]
         [Parameter(ParameterSetName = GetPSSessionCommand.VMNameParameterSet)]
-        [ValidateNotNullOrEmpty()]
+        [ValidateNotNullOrEmpty]
         public override string[] Name
         {
             get { return base.Name; }
@@ -202,7 +203,7 @@ public override Guid[] InstanceId
         [Parameter(ParameterSetName = GetPSSessionCommand.ComputerInstanceIdParameterSet)]
         [Parameter(ParameterSetName = GetPSSessionCommand.ConnectionUriParameterSet)]
         [Parameter(ParameterSetName = GetPSSessionCommand.ConnectionUriInstanceIdParameterSet)]
-        [Credential()]
+        [Credential]
         public PSCredential Credential
         {
             get
@@ -282,7 +283,7 @@ public string CertificateThumbprint
         /// </remarks>
         [Parameter(ParameterSetName = GetPSSessionCommand.ComputerNameParameterSet)]
         [Parameter(ParameterSetName = GetPSSessionCommand.ComputerInstanceIdParameterSet)]
-        [ValidateRange((int)1, (int)UInt16.MaxValue)]
+        [ValidateRange((int)1, (int)ushort.MaxValue)]
         public int Port { get; set; }
 
         /// <summary>
@@ -341,12 +342,23 @@ public string CertificateThumbprint
         /// </summary>
         protected override void BeginProcessing()
         {
-            base.BeginProcessing();
-
-            if (ConfigurationName == null)
+#if UNIX
+            if (ComputerName?.Length > 0)
             {
-                ConfigurationName = string.Empty;
+                ErrorRecord err = new(
+                    new NotImplementedException(
+                        PSRemotingErrorInvariants.FormatResourceString(
+                            RemotingErrorIdStrings.UnsupportedOSForRemoteEnumeration,
+                            RuntimeInformation.OSDescription)),
+                    "PSSessionComputerNameUnix",
+                    ErrorCategory.NotImplemented,
+                    null);
+                ThrowTerminatingError(err);
             }
+#endif
+
+            base.BeginProcessing();
+            ConfigurationName ??= string.Empty;
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs b/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs
index 625bb86fd64..60ca0c35e50 100644
--- a/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/newrunspacecommand.cs
@@ -88,7 +88,7 @@ public class NewPSSessionCommand : PSRemotingBaseCmdlet, IDisposable
         [Parameter(Mandatory = true,
                    ValueFromPipelineByPropertyName = true,
                    ParameterSetName = PSRemotingBaseCmdlet.VMNameParameterSet)]
-        [Credential()]
+        [Credential]
         public override PSCredential Credential
         {
             get
@@ -129,7 +129,7 @@ public override PSSession[] Session
         /// <summary>
         /// Friendly names for the new PSSessions.
         /// </summary>
-        [Parameter()]
+        [Parameter]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public string[] Name { get; set; }
 
@@ -267,7 +267,16 @@ protected override void ProcessRecord()
 
                 case NewPSSessionCommand.UseWindowsPowerShellParameterSet:
                     {
-                        remoteRunspaces = CreateRunspacesForUseWindowsPowerShellParameterSet();
+                        if (UseWindowsPowerShell)
+                        {
+                            remoteRunspaces = CreateRunspacesForUseWindowsPowerShellParameterSet();
+                        }
+                        else
+                        {
+                            // When -UseWindowsPowerShell:$false is explicitly specified,
+                            // fall back to the default ComputerName parameter set behavior
+                            goto case NewPSSessionCommand.ComputerNameParameterSet;
+                        }
                     }
 
                     break;
@@ -385,11 +394,7 @@ public void Dispose()
         /// <summary>
         /// Adds forwarded events to the local queue.
         /// </summary>
-        private void OnRunspacePSEventReceived(object sender, PSEventArgs e)
-        {
-            if (this.Events != null)
-                this.Events.AddForwardedEvent(e);
-        }
+        private void OnRunspacePSEventReceived(object sender, PSEventArgs e) => this.Events?.AddForwardedEvent(e);
 
         /// <summary>
         /// When the client remote session reports a URI redirection, this method will report the
@@ -524,10 +529,7 @@ private void HandleRunspaceStateChanged(object sender, OperationStateEventArgs s
                             }
                         }
 
-                        if (reason == null)
-                        {
-                            reason = new RuntimeException(this.GetMessage(RemotingErrorIdStrings.RemoteRunspaceOpenUnknownState, state));
-                        }
+                        reason ??= new RuntimeException(this.GetMessage(RemotingErrorIdStrings.RemoteRunspaceOpenUnknownState, state));
 
                         string fullyQualifiedErrorId = WSManTransportManagerUtils.GetFQEIDFromTransportError(
                             transErrorCode,
@@ -647,11 +649,11 @@ private List<RemoteRunspace> CreateRunspacesWhenRunspaceParameterSpecified()
 
                         if (remoteRunspace.ConnectionInfo is VMConnectionInfo)
                         {
-                            newConnectionInfo = remoteRunspace.ConnectionInfo.InternalCopy();
+                            newConnectionInfo = remoteRunspace.ConnectionInfo.Clone();
                         }
                         else if (remoteRunspace.ConnectionInfo is ContainerConnectionInfo)
                         {
-                            ContainerConnectionInfo newContainerConnectionInfo = remoteRunspace.ConnectionInfo.InternalCopy() as ContainerConnectionInfo;
+                            ContainerConnectionInfo newContainerConnectionInfo = remoteRunspace.ConnectionInfo.Clone() as ContainerConnectionInfo;
                             newContainerConnectionInfo.CreateContainerProcess();
                             newConnectionInfo = newContainerConnectionInfo;
                         }
@@ -939,7 +941,7 @@ private List<RemoteRunspace> CreateRunspacesWhenVMParameterSpecified()
                     //
                     // VM should be in running state.
                     //
-                    if ((VMState)results[0].Properties["State"].Value != VMState.Running)
+                    if (GetVMStateProperty(results[0]) != VMState.Running)
                     {
                         WriteError(
                             new ErrorRecord(
@@ -1092,7 +1094,9 @@ private List<RemoteRunspace> CreateRunspacesForSSHHostParameterSet()
                     host,
                     this.KeyFilePath,
                     port,
-                    Subsystem);
+                    Subsystem,
+                    ConnectingTimeout,
+                    Options);
                 var typeTable = TypeTable.LoadDefaultTypeFiles();
                 string rsName = GetRunspaceName(index, out int rsIdUnused);
                 index++;
@@ -1118,7 +1122,9 @@ private List<RemoteRunspace> CreateRunspacesForSSHHostHashParameterSet()
                     sshConnection.ComputerName,
                     sshConnection.KeyFilePath,
                     sshConnection.Port,
-                    sshConnection.Subsystem);
+                    sshConnection.Subsystem,
+                    sshConnection.ConnectingTimeout,
+                    sshConnection.Options);
                 var typeTable = TypeTable.LoadDefaultTypeFiles();
                 string rsName = GetRunspaceName(index, out int rsIdUnused);
                 index++;
@@ -1388,7 +1394,7 @@ internal override event EventHandler<OperationStateEventArgs> OperationComplete
         /// <remarks>
         /// There are two problems that need to be handled.
         /// 1) We need to make sure that the ThrottleManager StartComplete and StopComplete
-        ///    operation events are called or the ThrottleManager will never end (will stop reponding).
+        ///    operation events are called or the ThrottleManager will never end (will stop responding).
         /// 2) The HandleRunspaceStateChanged event handler remains in the Runspace
         ///    StateChanged event call chain until this object is disposed.  We have to
         ///    disallow the HandleRunspaceStateChanged event from running and throwing
diff --git a/src/System.Management.Automation/engine/remoting/commands/remotingcommandutil.cs b/src/System.Management.Automation/engine/remoting/commands/remotingcommandutil.cs
index 094dcedc6ad..3e2603a36fe 100644
--- a/src/System.Management.Automation/engine/remoting/commands/remotingcommandutil.cs
+++ b/src/System.Management.Automation/engine/remoting/commands/remotingcommandutil.cs
@@ -93,7 +93,7 @@ internal static void CheckRemotingCmdletPrerequisites()
 
             try
             {
-                // the following registry key defines WSMan compatability
+                // the following registry key defines WSMan compatibility
                 // HKLM\Software\Microsoft\Windows\CurrentVersion\WSMAN\ServiceStackVersion
                 string wsManStackValue = null;
                 RegistryKey wsManKey = Registry.LocalMachine.OpenSubKey(WSManKeyPath);
@@ -165,60 +165,5 @@ internal static void CheckHostRemotingPrerequisites()
                 throw new InvalidOperationException(errorRecord.ToString());
             }
         }
-
-        internal static void CheckPSVersion(Version version)
-        {
-            // PSVersion value can only be 2.0, 3.0, 4.0, 5.0, or 5.1
-            if (version != null)
-            {
-                // PSVersion value can only be 2.0, 3.0, 4.0, 5.0, or 5.1
-                if (!(version.Major >= 2 && version.Major <= 4 && version.Minor == 0) &&
-                    !(version.Major == 5 && version.Minor <= 1))
-                {
-                    throw new ArgumentException(
-                       StringUtil.Format(RemotingErrorIdStrings.PSVersionParameterOutOfRange, version, "PSVersion"));
-                }
-            }
-        }
-
-        /// <summary>
-        /// Checks if the specified version of PowerShell is installed.
-        /// </summary>
-        /// <param name="version"></param>
-        internal static void CheckIfPowerShellVersionIsInstalled(Version version)
-        {
-            // Check if PowerShell 2.0 is installed
-            if (version != null && version.Major == 2)
-            {
-#if CORECLR
-                // PowerShell 2.0 is not available for CoreCLR
-                throw new ArgumentException(
-                    PSRemotingErrorInvariants.FormatResourceString(
-                        RemotingErrorIdStrings.PowerShellNotInstalled,
-                        version, "PSVersion"));
-#else
-                // Because of app-compat issues, in Win8, we will have PS 2.0 installed by default but not .NET 2.0
-                // In such a case, it is not enough if we check just PowerShell registry keys. We also need to check if .NET 2.0 is installed.
-                try
-                {
-                    RegistryKey engineKey = PSSnapInReader.GetPSEngineKey(PSVersionInfo.RegistryVersion1Key);
-                    // Also check for .NET 2.0 installation
-                    if (!PsUtils.FrameworkRegistryInstallation.IsFrameworkInstalled(2, 0, 0))
-                    {
-                        throw new ArgumentException(
-                            PSRemotingErrorInvariants.FormatResourceString(
-                                RemotingErrorIdStrings.NetFrameWorkV2NotInstalled));
-                    }
-                }
-                catch (PSArgumentException)
-                {
-                    throw new ArgumentException(
-                        PSRemotingErrorInvariants.FormatResourceString(
-                            RemotingErrorIdStrings.PowerShellNotInstalled,
-                            version, "PSVersion"));
-                }
-#endif
-            }
-        }
     }
 }
diff --git a/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs b/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs
index 5eb9c5fc338..989ad33e987 100644
--- a/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs
+++ b/src/System.Management.Automation/engine/remoting/common/PSETWTracer.cs
@@ -158,11 +158,17 @@ internal enum PSEventId : int
         Provider_Lifecycle = 0x1F03,
         Settings = 0x1F04,
         Engine_Trace = 0x1F06,
+        Amsi_Init = 0x4001,
+        WDAC_Query = 0x4002,
+        WDAC_Audit = 0x4003,
 
         // Experimental Features
         ExperimentalFeature_InvalidName = 0x3001,
         ExperimentalFeature_ReadConfig_Error = 0x3002,
 
+        // Windows Diagnostics And Usage Data Settings
+        Telemetry_Setting_Error = 0x3011,
+
         // Scheduled Jobs
         ScheduledJob_Start = 0xD001,
         ScheduledJob_Complete = 0xD002,
@@ -237,9 +243,13 @@ internal enum PSTask : int
         ProviderStop = 0x69,
         ExecutePipeline = 0x6A,
         ExperimentalFeature = 0x6B,
+        Telemetry = 0x6C,
         ScheduledJob = 0x6E,
         NamedPipe = 0x6F,
-        ISEOperation = 0x78
+        ISEOperation = 0x78,
+        Amsi = 0X82,
+        WDAC = 0x83,
+        WDACAudit = 0x84
     }
 
     /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs b/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs
index 42d04a9e23e..8d53adf0ca8 100644
--- a/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs
+++ b/src/System.Management.Automation/engine/remoting/common/RemoteSessionHyperVSocket.cs
@@ -7,12 +7,14 @@
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
+using System.Buffers;
 
 using Dbg = System.Diagnostics.Debug;
+using SMA = System.Management.Automation;
 
 namespace System.Management.Automation.Remoting
 {
-    [SerializableAttribute]
+    [Serializable]
     internal class HyperVSocketEndPoint : EndPoint
     {
         #region Members
@@ -53,7 +55,7 @@ public Guid ServiceId
         {
             get { return _serviceId; }
 
-            set { _vmId = value; }
+            set { _serviceId = value; }
         }
 
         #endregion
@@ -140,6 +142,10 @@ internal sealed class RemoteSessionHyperVSocketServer : IDisposable
         private readonly object _syncObject;
         private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource();
 
+        // This is to prevent persistent replay attacks.
+        // it is not meant to ensure all replay attacks are impossible.
+        private const int MAX_TOKEN_LIFE_MINUTES = 10;
+
         #endregion
 
         #region Properties
@@ -175,64 +181,74 @@ internal sealed class RemoteSessionHyperVSocketServer : IDisposable
 
         public RemoteSessionHyperVSocketServer(bool LoopbackMode)
         {
-            // TODO: uncomment below code when .NET supports Hyper-V socket duplication
-            /*
-            NamedPipeClientStream clientPipeStream;
-            byte[] buffer = new byte[1000];
-            int bytesRead;
-            */
             _syncObject = new object();
 
             Exception ex = null;
 
             try
             {
-                // TODO: uncomment below code when .NET supports Hyper-V socket duplication
-                /*
-                if (!LoopbackMode)
-                {
-                    //
-                    // Create named pipe client.
-                    //
-                    using (clientPipeStream = new NamedPipeClientStream(".",
-                                                                        "PS_VMSession",
-                                                                        PipeDirection.InOut,
-                                                                        PipeOptions.None,
-                                                                        TokenImpersonationLevel.None))
-                    {
-                        //
-                        // Connect to named pipe server.
-                        //
-                        clientPipeStream.Connect(10*1000);
-
-                        //
-                        // Read LPWSAPROTOCOL_INFO.
-                        //
-                        bytesRead = clientPipeStream.Read(buffer, 0, 1000);
-                    }
-                }
+                Guid serviceId = new Guid("a5201c21-2770-4c11-a68e-f182edb29220"); // HV_GUID_VM_SESSION_SERVICE_ID_2
+                Guid loopbackId = new Guid("e0e16197-dd56-4a10-9195-5ee7a155a838"); // HV_GUID_LOOPBACK
+                Guid parentId = new Guid("a42e7cda-d03f-480c-9cc2-a4de20abb878"); // HV_GUID_PARENT
+                Guid vmId = LoopbackMode ? loopbackId : parentId;
+                HyperVSocketEndPoint endpoint = new HyperVSocketEndPoint(HyperVSocketEndPoint.AF_HYPERV, vmId, serviceId);
+
+                Socket listenSocket = new Socket(endpoint.AddressFamily, SocketType.Stream, (System.Net.Sockets.ProtocolType)1);
+                listenSocket.Bind(endpoint);
+
+                listenSocket.Listen(1);
+                HyperVSocket = listenSocket.Accept();
+
+                Stream = new NetworkStream(HyperVSocket, true);
+
+                // Create reader/writer streams.
+                TextReader = new StreamReader(Stream);
+                TextWriter = new StreamWriter(Stream);
+                TextWriter.AutoFlush = true;
 
                 //
-                // Create duplicate socket.
+                // listenSocket is not closed when it goes out of scope here. Sometimes it is
+                // closed later in this thread, while other times it is not closed at all. This will
+                // cause problem when we set up a second PowerShell Direct session. Let's
+                // explicitly close listenSocket here for safe.
                 //
-                byte[] protocolInfo = new byte[bytesRead];
-                Array.Copy(buffer, protocolInfo, bytesRead);
+                if (listenSocket != null)
+                {
+                    try { listenSocket.Dispose(); }
+                    catch (ObjectDisposedException) { }
+                }
+            }
+            catch (Exception e)
+            {
+                ex = e;
+            }
 
-                SocketInformation sockInfo = new SocketInformation();
-                sockInfo.ProtocolInformation = protocolInfo;
-                sockInfo.Options = SocketInformationOptions.Connected;
+            if (ex != null)
+            {
+                Dbg.Fail("Unexpected error in RemoteSessionHyperVSocketServer.");
 
-                socket = new Socket(sockInfo);
-                if (socket == null)
-                {
-                    Dbg.Assert(false, "Unexpected error in RemoteSessionHyperVSocketServer.");
+                // Unexpected error.
+                string errorMessage = !string.IsNullOrEmpty(ex.Message) ? ex.Message : string.Empty;
+                _tracer.WriteMessage("RemoteSessionHyperVSocketServer", "RemoteSessionHyperVSocketServer", Guid.Empty,
+                    "Unexpected error in constructor: {0}", errorMessage);
 
-                    tracer.WriteMessage("RemoteSessionHyperVSocketServer", "RemoteSessionHyperVSocketServer", Guid.Empty,
-                        "Unexpected error in constructor: {0}", "socket duplication failure");
-                }
-                */
+                throw new PSInvalidOperationException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemoteSessionHyperVSocketServerConstructorFailure),
+                    ex,
+                    nameof(PSRemotingErrorId.RemoteSessionHyperVSocketServerConstructorFailure),
+                    ErrorCategory.InvalidOperation,
+                    null);
+            }
+        }
+
+        public RemoteSessionHyperVSocketServer(bool LoopbackMode, string token, DateTimeOffset tokenCreationTime)
+        {
+            _syncObject = new object();
+
+            Exception ex = null;
 
-                // TODO: remove below 6 lines of code when .NET supports Hyper-V socket duplication
+            try
+            {
                 Guid serviceId = new Guid("a5201c21-2770-4c11-a68e-f182edb29220"); // HV_GUID_VM_SESSION_SERVICE_ID_2
                 HyperVSocketEndPoint endpoint = new HyperVSocketEndPoint(HyperVSocketEndPoint.AF_HYPERV, Guid.Empty, serviceId);
 
@@ -242,6 +258,8 @@ public RemoteSessionHyperVSocketServer(bool LoopbackMode)
                 listenSocket.Listen(1);
                 HyperVSocket = listenSocket.Accept();
 
+                ValidateToken(HyperVSocket, token, tokenCreationTime, MAX_TOKEN_LIFE_MINUTES * 60);
+
                 Stream = new NetworkStream(HyperVSocket, true);
 
                 // Create reader/writer streams.
@@ -257,8 +275,13 @@ public RemoteSessionHyperVSocketServer(bool LoopbackMode)
                 //
                 if (listenSocket != null)
                 {
-                    try { listenSocket.Dispose(); }
-                    catch (ObjectDisposedException) { }
+                    try
+                    {
+                        listenSocket.Dispose();
+                    }
+                    catch (ObjectDisposedException)
+                    {
+                    }
                 }
             }
             catch (Exception e)
@@ -272,8 +295,12 @@ public RemoteSessionHyperVSocketServer(bool LoopbackMode)
 
                 // Unexpected error.
                 string errorMessage = !string.IsNullOrEmpty(ex.Message) ? ex.Message : string.Empty;
-                _tracer.WriteMessage("RemoteSessionHyperVSocketServer", "RemoteSessionHyperVSocketServer", Guid.Empty,
-                    "Unexpected error in constructor: {0}", errorMessage);
+                _tracer.WriteMessage(
+                    "RemoteSessionHyperVSocketServer",
+                    "RemoteSessionHyperVSocketServer",
+                    Guid.Empty,
+                    "Unexpected error in constructor: {0}",
+                    errorMessage);
 
                 throw new PSInvalidOperationException(
                     PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemoteSessionHyperVSocketServerConstructorFailure),
@@ -283,7 +310,6 @@ public RemoteSessionHyperVSocketServer(bool LoopbackMode)
                     null);
             }
         }
-
         #endregion
 
         #region IDisposable
@@ -295,7 +321,10 @@ public void Dispose()
         {
             lock (_syncObject)
             {
-                if (IsDisposed) { return; }
+                if (IsDisposed)
+                {
+                    return;
+                }
 
                 IsDisposed = true;
             }
@@ -330,6 +359,107 @@ public void Dispose()
         }
 
         #endregion
+
+        /// <summary>
+        /// Validates the token received from the client over the HyperVSocket.
+        /// Throws PSDirectException if the token is invalid or not received in time.
+        /// </summary>
+        /// <param name="socket">The connected HyperVSocket.</param>
+        /// <param name="token">The expected token string.</param>
+        /// <param name="tokenCreationTime">The creation time of the token.</param>
+        /// <param name="maxTokenLifeSeconds">The maximum lifetime of the token in seconds.</param>
+        internal static void ValidateToken(Socket socket, string token, DateTimeOffset tokenCreationTime, int maxTokenLifeSeconds)
+        {
+            TimeSpan timeout = TimeSpan.FromSeconds(maxTokenLifeSeconds);
+            DateTimeOffset timeoutExpiry = tokenCreationTime.Add(timeout);
+            DateTimeOffset now = DateTimeOffset.UtcNow;
+
+            // Calculate remaining time and create cancellation token
+            TimeSpan remainingTime = timeoutExpiry - now;
+
+            // Check if the token has already expired
+            if (remainingTime <= TimeSpan.Zero)
+            {
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential, "Token has expired"));
+            }
+
+            // Create a cancellation token that will be cancelled when the timeout expires
+            using var cancellationTokenSource = new CancellationTokenSource(remainingTime);
+            CancellationToken cancellationToken = cancellationTokenSource.Token;
+
+            // Set socket timeout for receive operations to prevent indefinite blocking
+            int timeoutMs = (int)remainingTime.TotalMilliseconds;
+            socket.ReceiveTimeout = timeoutMs;
+            socket.SendTimeout = timeoutMs;
+
+            // Check for cancellation before starting validation
+            cancellationToken.ThrowIfCancellationRequested();
+
+            // We should move to this pattern and
+            // in the tests I found I needed to get a bigger buffer than the token length
+            // and test length of the received data similar to this pattern.
+            string responseString = RemoteSessionHyperVSocketClient.ReceiveResponse(socket, RemoteSessionHyperVSocketClient.VERSION_REQUEST.Length + 4);
+            if (string.IsNullOrEmpty(responseString) || responseString.Length != RemoteSessionHyperVSocketClient.VERSION_REQUEST.Length)
+            {
+                socket.Send("FAIL"u8);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Client", "Version Request: " + responseString));
+            }
+
+            cancellationToken.ThrowIfCancellationRequested();
+
+            socket.Send(Encoding.UTF8.GetBytes(RemoteSessionHyperVSocketClient.CLIENT_VERSION));
+            responseString = RemoteSessionHyperVSocketClient.ReceiveResponse(socket, RemoteSessionHyperVSocketClient.CLIENT_VERSION.Length + 4);
+
+            // In the future we may need to handle different versions, differently.
+            // For now, we are just checking that we exchanged versions correctly.
+            if (string.IsNullOrEmpty(responseString) || !responseString.StartsWith(RemoteSessionHyperVSocketClient.VERSION_PREFIX, StringComparison.Ordinal))
+            {
+                socket.Send("FAIL"u8);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Client", "Version Response: " + responseString));
+            }
+
+            cancellationToken.ThrowIfCancellationRequested();
+
+            socket.Send("PASS"u8);
+
+            // The client should send the token in the format TOKEN <token>
+            // the token should be up to 256 bits, which is less than 50 characters.
+            // I'll double that to 100 characters to be safe, plus the "TOKEN " prefix.
+            // So we expect a response of length 6 + 100 = 106 characters.
+            responseString = RemoteSessionHyperVSocketClient.ReceiveResponse(socket, 110);
+
+            // Final check if we got the token before the timeout
+            cancellationToken.ThrowIfCancellationRequested();
+
+            ReadOnlySpan<byte> responseBytes = Encoding.UTF8.GetBytes(responseString);
+            string responseToken = RemoteSessionHyperVSocketClient.ExtractToken(responseBytes);
+
+            if (responseToken == null)
+            {
+                socket.Send("FAIL"u8);
+                // If the response is not in the expected format, we throw an exception.
+                // This is a failure to authenticate the client.
+                // don't send this response for risk of information disclosure.
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Client", "Token Response"));
+            }
+
+            if (!string.Equals(responseToken, token, StringComparison.Ordinal))
+            {
+                socket.Send("FAIL"u8);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential));
+            }
+
+            // Acknowledge the token is valid with "PASS".
+            socket.Send("PASS"u8);
+
+            socket.ReceiveTimeout = 0; // Disable the timeout after successful validation
+            socket.SendTimeout = 0;
+        }
     }
 
     internal sealed class RemoteSessionHyperVSocketClient : IDisposable
@@ -337,7 +467,15 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable
         #region Members
 
         private readonly object _syncObject;
-        private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource();
+
+        #region tracer
+        /// <summary>
+        /// An instance of the PSTraceSource class used for trace output.
+        /// </summary>
+        [SMA.TraceSource("RemoteSessionHyperVSocketClient", "Class that has PowerShell Direct Client implementation")]
+        private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("RemoteSessionHyperVSocketClient", "Class that has PowerShell Direct Client implementation");
+
+        #endregion tracer
 
         private static readonly ManualResetEvent s_connectDone =
                 new ManualResetEvent(false);
@@ -351,6 +489,14 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable
 
         #endregion
 
+        #region version constants
+
+        internal const string VERSION_REQUEST = "VERSION";
+        internal const string CLIENT_VERSION = "VERSION_2";
+        internal const string VERSION_PREFIX = "VERSION_";
+
+        #endregion
+
         #region Properties
 
         /// <summary>
@@ -361,7 +507,7 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable
         /// <summary>
         /// Returns the Hyper-V socket object.
         /// </summary>
-        public Socket HyperVSocket { get; }
+        public Socket HyperVSocket { get; private set; }
 
         /// <summary>
         /// Returns the network stream object.
@@ -378,6 +524,37 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable
         /// </summary>
         public StreamWriter TextWriter { get; private set; }
 
+        /// <summary>
+        /// True if the client is a Hyper-V container.
+        /// </summary>
+        public bool IsContainer { get; }
+
+        /// <summary>
+        /// True if the client is using backwards compatible mode.
+        /// This is used to determine if the client should use
+        /// the backwards compatible or not.
+        /// In modern mode, the vmicvmsession service will
+        /// hand off the socket to the PowerShell process
+        /// inside the VM automatically.
+        /// In backwards compatible mode, the vmicvmsession
+        /// service create a new socket to the PowerShell process
+        /// inside the VM.
+        /// </summary>
+        public bool UseBackwardsCompatibleMode { get; private set; }
+
+        /// <summary>
+        /// The authentication token used for the session.
+        /// This token is provided by the broker and provided to the server to authenticate the server session.
+        /// This protocol uses two connections:
+        /// 1. The first is to the broker or vmicvmsession service to exchange credentials and configuration.
+        ///    The broker will respond with an authentication token.  The broker also launches a PowerShell
+        ///    server process with the authentication token.
+        /// 2. The second is to the server process, that was launched by the broker,
+        ///    inside the VM, which uses the authentication token to verify that the client is the same client
+        ///    that connected to the broker.
+        /// </summary>
+        public string AuthenticationToken { get; private set; }
+
         /// <summary>
         /// Returns true if object is currently disposed.
         /// </summary>
@@ -390,7 +567,9 @@ internal sealed class RemoteSessionHyperVSocketClient : IDisposable
         internal RemoteSessionHyperVSocketClient(
             Guid vmId,
             bool isFirstConnection,
-            bool isContainer = false)
+            bool useBackwardsCompatibleMode = false,
+            bool isContainer = false,
+            string authenticationToken = null)
         {
             Guid serviceId;
 
@@ -409,28 +588,16 @@ internal RemoteSessionHyperVSocketClient(
 
             EndPoint = new HyperVSocketEndPoint(HyperVSocketEndPoint.AF_HYPERV, vmId, serviceId);
 
-            HyperVSocket = new Socket(EndPoint.AddressFamily, SocketType.Stream, (System.Net.Sockets.ProtocolType)1);
+            IsContainer = isContainer;
 
-            //
-            // We need to call SetSocketOption() in order to set up Hyper-V socket connection between container host and Hyper-V container.
-            // Here is the scenario: the Hyper-V container is inside a utility vm, which is inside the container host
-            //
-            if (isContainer)
-            {
-                var value = new byte[sizeof(uint)];
-                value[0] = 1;
+            UseBackwardsCompatibleMode = useBackwardsCompatibleMode;
 
-                try
-                {
-                    HyperVSocket.SetSocketOption((System.Net.Sockets.SocketOptionLevel)HV_PROTOCOL_RAW,
-                                            (System.Net.Sockets.SocketOptionName)HVSOCKET_CONTAINER_PASSTHRU,
-                                            (byte[])value);
-                }
-                catch
-                {
-                    throw new PSDirectException(
-                        PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure));
-                }
+            if (!isFirstConnection && !useBackwardsCompatibleMode && !string.IsNullOrEmpty(authenticationToken))
+            {
+                // If this is not the first connection and we are using backwards compatible mode,
+                // we should not set the authentication token here.
+                // The authentication token will be set during the Connect method.
+                AuthenticationToken = authenticationToken;
             }
         }
 
@@ -445,7 +612,10 @@ public void Dispose()
         {
             lock (_syncObject)
             {
-                if (IsDisposed) { return; }
+                if (IsDisposed)
+                {
+                    return;
+                }
 
                 IsDisposed = true;
             }
@@ -483,6 +653,81 @@ public void Dispose()
 
         #region Public Methods
 
+        private void ShutdownSocket()
+        {
+            if (HyperVSocket != null)
+            {
+                // Ensure the socket is disposed properly.
+                try
+                {
+                    s_tracer.WriteLine("ShutdownSocket: Disposing of the HyperVSocket.");
+                    HyperVSocket.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    s_tracer.WriteLine("ShutdownSocket: Exception while disposing the socket: {0}", ex.Message);
+                }
+            }
+
+            // Dispose of the existing stream if it exists.
+            if (Stream != null)
+            {
+                try
+                {
+                    Stream.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    s_tracer.WriteLine("ShutdownSocket: Exception while disposing the stream: {0}", ex.Message);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Recreates the HyperVSocket and connects it to the endpoint, updating the Stream if successful.
+        /// </summary>
+        private bool ConnectSocket()
+        {
+            HyperVSocket = new Socket(EndPoint.AddressFamily, SocketType.Stream, (System.Net.Sockets.ProtocolType)1);
+
+            //
+            // We need to call SetSocketOption() in order to set up Hyper-V socket connection between container host and Hyper-V container.
+            // Here is the scenario: the Hyper-V container is inside a utility vm, which is inside the container host
+            //
+            if (IsContainer)
+            {
+                var value = new byte[sizeof(uint)];
+                value[0] = 1;
+
+                try
+                {
+                    HyperVSocket.SetSocketOption(
+                        (System.Net.Sockets.SocketOptionLevel)HV_PROTOCOL_RAW,
+                        (System.Net.Sockets.SocketOptionName)HVSOCKET_CONTAINER_PASSTHRU,
+                        value);
+                }
+                catch
+                {
+                    throw new PSDirectException(
+                        PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure));
+                }
+            }
+
+            s_tracer.WriteLine("Connect: Client connecting, to {0}; isContainer: {1}.", EndPoint.ServiceId.ToString(), IsContainer);
+            HyperVSocket.Connect(EndPoint);
+
+            // Check if the socket is connected.
+            // If it is connected, create a NetworkStream.
+            if (HyperVSocket.Connected)
+            {
+                s_tracer.WriteLine("Connect: Client connected, to {0}; isContainer: {1}.", EndPoint.ServiceId.ToString(), IsContainer);
+                Stream = new NetworkStream(HyperVSocket, true);
+                return true;
+            }
+
+            return false;
+        }
+
         /// <summary>
         /// Connect to Hyper-V socket server.  This is a blocking call until a
         /// connection occurs or the timeout time has elapsed.
@@ -510,100 +755,51 @@ public bool Connect(
                 }
             }
 
-            HyperVSocket.Connect(EndPoint);
-
-            if (HyperVSocket.Connected)
+            if (ConnectSocket())
             {
-                _tracer.WriteMessage("RemoteSessionHyperVSocketClient", "Connect", Guid.Empty,
-                    "Client connected.");
-
-                Stream = new NetworkStream(HyperVSocket, true);
-
                 if (isFirstConnection)
                 {
-                    if (string.IsNullOrEmpty(networkCredential.Domain))
+                    var exchangeResult = ExchangeCredentialsAndConfiguration(networkCredential, configurationName, HyperVSocket, this.UseBackwardsCompatibleMode);
+                    if (!exchangeResult.success)
                     {
-                        networkCredential.Domain = "localhost";
-                    }
+                        // We will not block here for a container because a container does not have a broker.
+                        if (IsRequirePsDirectAuthenticationEnabled(@"SOFTWARE\\Microsoft\\PowerShell", Microsoft.Win32.RegistryHive.LocalMachine))
+                        {
+                            s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: RequirePsDirectAuthentication is enabled, requiring latest transport version.");
+                            throw new PSDirectException(
+                                PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVNegotiationFailed));
+                        }
 
-                    bool emptyPassword = string.IsNullOrEmpty(networkCredential.Password);
-                    bool emptyConfiguration = string.IsNullOrEmpty(configurationName);
-
-                    byte[] domain = Encoding.Unicode.GetBytes(networkCredential.Domain);
-                    byte[] userName = Encoding.Unicode.GetBytes(networkCredential.UserName);
-                    byte[] password = Encoding.Unicode.GetBytes(networkCredential.Password);
-                    byte[] response = new byte[4]; // either "PASS" or "FAIL"
-                    string responseString;
-
-                    //
-                    // Send credential to VM so that PowerShell process inside VM can be
-                    // created under the correct security context.
-                    //
-                    HyperVSocket.Send(domain);
-                    HyperVSocket.Receive(response);
-
-                    HyperVSocket.Send(userName);
-                    HyperVSocket.Receive(response);
-
-                    //
-                    // We cannot simply send password because if it is empty,
-                    // the vmicvmsession service in VM will block in recv method.
-                    //
-                    if (emptyPassword)
-                    {
-                        HyperVSocket.Send(Encoding.ASCII.GetBytes("EMPTYPW"));
-                        HyperVSocket.Receive(response);
-                        responseString = Encoding.ASCII.GetString(response);
+                        this.UseBackwardsCompatibleMode = true;
+                        s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: Using backwards compatible mode.");
+
+                        // If the first connection fails in modern mode, fall back to backwards compatible mode.
+                        ShutdownSocket(); // will terminate the broker
+                        ConnectSocket();  // restart the broker
+                        exchangeResult = ExchangeCredentialsAndConfiguration(networkCredential, configurationName, HyperVSocket, this.UseBackwardsCompatibleMode);
+                        if (!exchangeResult.success)
+                        {
+                            s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: Failed to exchange credentials and configuration in backwards compatible mode.");
+                            throw new PSDirectException(
+                                PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Broker", "Credential"));
+                        }
                     }
                     else
                     {
-                        HyperVSocket.Send(Encoding.ASCII.GetBytes("NONEMPTYPW"));
-                        HyperVSocket.Receive(response);
-
-                        HyperVSocket.Send(password);
-                        HyperVSocket.Receive(response);
-                        responseString = Encoding.ASCII.GetString(response);
+                        this.AuthenticationToken = exchangeResult.authenticationToken;
                     }
+                }
 
-                    //
-                    // There are 3 cases for the responseString received above.
-                    // - "FAIL": credential is invalid
-                    // - "PASS": credential is valid, but PowerShell Direct in VM does not support configuration (Server 2016 TP4 and before)
-                    // - "CONF": credential is valid, and PowerShell Direct in VM supports configuration (Server 2016 TP5 and later)
-                    //
-
-                    //
-                    // Credential is invalid.
-                    //
-                    if (string.Equals(responseString, "FAIL", StringComparison.Ordinal))
+                if (!isFirstConnection)
+                {
+                    if (!this.UseBackwardsCompatibleMode)
                     {
-                        HyperVSocket.Send(response);
-
-                        throw new PSDirectException(
-                            PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential));
-                    }
-
-                    //
-                    // If PowerShell Direct in VM supports configuration, send configuration name.
-                    //
-                    if (string.Equals(responseString, "CONF", StringComparison.Ordinal))
-                    {
-                        if (emptyConfiguration)
-                        {
-                            HyperVSocket.Send(Encoding.ASCII.GetBytes("EMPTYCF"));
-                        }
-                        else
-                        {
-                            HyperVSocket.Send(Encoding.ASCII.GetBytes("NONEMPTYCF"));
-                            HyperVSocket.Receive(response);
-
-                            byte[] configName = Encoding.Unicode.GetBytes(configurationName);
-                            HyperVSocket.Send(configName);
-                        }
+                        s_tracer.WriteLine("Connect-Server: Performing transport version and token exchange for Hyper-V socket.  isFirstConnection: {0}, UseBackwardsCompatibleMode: {1}", isFirstConnection, this.UseBackwardsCompatibleMode);
+                        RemoteSessionHyperVSocketClient.PerformTransportVersionAndTokenExchange(HyperVSocket, this.AuthenticationToken);
                     }
                     else
                     {
-                        HyperVSocket.Send(response);
+                        s_tracer.WriteLine("Connect-Server: Skipping transport version and token exchange for backwards compatible mode.");
                     }
                 }
 
@@ -615,8 +811,7 @@ public bool Connect(
             }
             else
             {
-                _tracer.WriteMessage("RemoteSessionHyperVSocketClient", "Connect", Guid.Empty,
-                    "Client unable to connect.");
+                s_tracer.WriteLine("Connect: Client unable to connect.");
 
                 result = false;
             }
@@ -624,12 +819,341 @@ public bool Connect(
             return result;
         }
 
+        /// <summary>
+        /// Performs the transport version and token exchange sequence for the Hyper-V socket connection.
+        /// Throws PSDirectException on failure.
+        /// </summary>
+        /// <param name="socket">The socket to use for communication.</param>
+        /// <param name="authenticationToken">The authentication token to send.</param>
+        public static void PerformTransportVersionAndTokenExchange(Socket socket, string authenticationToken)
+        {
+            if (string.IsNullOrEmpty(authenticationToken))
+            {
+                s_tracer.WriteLine("PerformTransportVersionAndTokenExchange: Authentication token is null or empty. Aborting transport version and token exchange.");
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential));
+            }
+
+            socket.Send(Encoding.UTF8.GetBytes(VERSION_REQUEST));
+            string responseStr = ReceiveResponse(socket, 16);
+
+            // Check if the response starts with the expected version prefix.
+            // We will rely on the broker to determine if the two can communicate.
+            // At least, for now.
+            if (!responseStr.StartsWith(VERSION_PREFIX, StringComparison.Ordinal))
+            {
+                s_tracer.WriteLine("PerformTransportVersionAndTokenExchange: Server responded with an invalid response of {0}. Notifying the transport manager to downgrade if allowed.", responseStr);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Server", "TransportVersion"));
+            }
+
+            socket.Send(Encoding.UTF8.GetBytes(CLIENT_VERSION));
+            string response = ReceiveResponse(socket, 4); // either "PASS" or "FAIL"
+
+            if (!string.Equals(response, "PASS", StringComparison.Ordinal))
+            {
+                s_tracer.WriteLine(
+                    "PerformTransportVersionAndTokenExchange: Transport version negotiation with server failed. Response: {0}", response);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Server", "TransportVersion"));
+            }
+
+            byte[] tokenBytes = Encoding.UTF8.GetBytes("TOKEN " + authenticationToken);
+            socket.Send(tokenBytes);
+
+            // This is the opportunity for the server to tell the client to go away.
+            string tokenResponse = ReceiveResponse(socket, 256); // either "PASS" or "FAIL", but get a little more buffer to allow for better error in the future
+            if (!string.Equals(tokenResponse, "PASS", StringComparison.Ordinal))
+            {
+                s_tracer.WriteLine(
+                    "PerformTransportVersionAndTokenExchange: Server Authentication Token exchange failed. Response: {0}", tokenResponse);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential));
+            }
+        }
+
+        /// <summary>
+        /// Checks if the registry key RequirePsDirectAuthentication is set to 1.
+        /// Returns true if fallback should be aborted.
+        /// Uses the 64-bit registry view on 64-bit systems to ensure consistent behavior regardless of process architecture.
+        /// On 32-bit systems, uses the default registry view since there is no WOW64 redirection.
+        /// </summary>
+        internal static bool IsRequirePsDirectAuthenticationEnabled(string keyPath, Microsoft.Win32.RegistryHive registryHive)
+        {
+            const string regValueName = "RequirePsDirectAuthentication";
+
+            try
+            {
+                Microsoft.Win32.RegistryView registryView = Environment.Is64BitOperatingSystem
+                    ? Microsoft.Win32.RegistryView.Registry64
+                    : Microsoft.Win32.RegistryView.Default;
+
+                using (Microsoft.Win32.RegistryKey baseKey = Microsoft.Win32.RegistryKey.OpenBaseKey(
+                    registryHive,
+                    registryView))
+                {
+                    using (Microsoft.Win32.RegistryKey key = baseKey.OpenSubKey(keyPath))
+                    {
+                        if (key != null)
+                        {
+                            var value = key.GetValue(regValueName);
+                            if (value is int intValue && intValue != 0)
+                            {
+                                return true;
+                            }
+                        }
+
+                        return false;
+                    }
+                }
+            }
+            catch (Exception regEx)
+            {
+                s_tracer.WriteLine("IsRequirePsDirectAuthenticationEnabled: Exception while checking registry key: {0}", regEx.Message);
+                return false; // If we cannot read the registry, assume the feature is not enabled.
+            }
+        }
+
+        /// <summary>
+        /// Handles credential and configuration exchange with the VM for the first connection.
+        /// </summary>
+        public static (bool success, string authenticationToken) ExchangeCredentialsAndConfiguration(NetworkCredential networkCredential, string configurationName, Socket HyperVSocket, bool useBackwardsCompatibleMode)
+        {
+            // Encoding for the Hyper-V socket communication
+            // To send the domain, username, password, and configuration name, use UTF-16 (Encoding.Unicode)
+            // All other sends use UTF-8 (Encoding.UTF8)
+            // Receiving uses ASCII encoding
+            // NOT CONFUSING AT ALL
+
+            if (!useBackwardsCompatibleMode)
+            {
+                HyperVSocket.Send(Encoding.UTF8.GetBytes(VERSION_REQUEST));
+                // vmicvmsession service in VM will respond with "VERSION_2" or newer
+                // Version 1 protocol will respond with "PASS" or "FAIL"
+                // Receive the response and check for VERSION_2 or newer
+                string responseStr = ReceiveResponse(HyperVSocket, 16);
+                if (!responseStr.StartsWith(VERSION_PREFIX, StringComparison.Ordinal))
+                {
+                    s_tracer.WriteLine("When asking for version the server responded with an invalid response of {0}.", responseStr);
+                    s_tracer.WriteLine("Session is invalid, continuing session with a fake user to close the session with the broker for stability.");
+                    // If not the new protocol, finish the conversation
+                    // Send a fake user
+                    // Use ? <> that are illegal in user names so no one can create the user
+                    string probeUserName = "?<PSDirectVMLegacy>"; // must be less than or equal to 20 characters for Windows Server 2016
+                    s_tracer.WriteLine("probeUserName (static): length: {0}", probeUserName.Length);
+                    SendUserData(probeUserName, HyperVSocket);
+                    responseStr = ReceiveResponse(HyperVSocket, 4); // either "PASS" or "FAIL"
+                    s_tracer.WriteLine("When sending user {0}.", responseStr);
+
+                    // Send that the password is empty
+                    HyperVSocket.Send("EMPTYPW"u8);
+                    responseStr = ReceiveResponse(HyperVSocket, 4); // either "CONF", "PASS" or "FAIL"
+                    s_tracer.WriteLine("When sending EMPTYPW: {0}.", responseStr); // server responds with FAIL so we respond with FAIL and the conversation is done
+                    HyperVSocket.Send("FAIL"u8);
+
+                    s_tracer.WriteLine("Notifying the transport manager to downgrade if allowed.");
+                    // end new code
+                    return (false, null);
+                }
+
+                HyperVSocket.Send(Encoding.UTF8.GetBytes(CLIENT_VERSION));
+                ReceiveResponse(HyperVSocket, 4); // either "PASS" or "FAIL"
+            }
+
+            if (string.IsNullOrEmpty(networkCredential.Domain))
+            {
+                networkCredential.Domain = "localhost";
+            }
+
+            System.Security.SecureString securePassword = networkCredential.SecurePassword;
+            int passwordLength = securePassword.Length;
+            bool emptyPassword = (passwordLength <= 0);
+            bool emptyConfiguration = string.IsNullOrEmpty(configurationName);
+
+            string responseString;
+
+            // Send credential to VM so that PowerShell process inside VM can be
+            // created under the correct security context.
+            SendUserData(networkCredential.Domain, HyperVSocket);
+            ReceiveResponse(HyperVSocket, 4); // only "PASS" is expected
+
+            SendUserData(networkCredential.UserName, HyperVSocket);
+            ReceiveResponse(HyperVSocket, 4); // only "PASS" is expected
+
+            // We cannot simply send password because if it is empty,
+            // the vmicvmsession service in VM will block in recv method.
+            if (emptyPassword)
+            {
+                HyperVSocket.Send("EMPTYPW"u8);
+                responseString = ReceiveResponse(HyperVSocket, 4); // either "CONF", "PASS" or "FAIL" (note, "PASS" is not used in VERSION_2 or newer mode)
+            }
+            else
+            {
+                HyperVSocket.Send("NONEMPTYPW"u8);
+                ReceiveResponse(HyperVSocket, 4); // only "PASS" is expected
+
+                // Get the password bytes from the SecureString, send them, and then zero out the byte array.
+                byte[] passwordBytes = Microsoft.PowerShell.SecureStringHelper.GetData(securePassword);
+                try
+                {
+                    HyperVSocket.Send(passwordBytes);
+                }
+                finally
+                {
+                    // Zero out the byte array for security
+                    Array.Clear(passwordBytes);
+                }
+
+                responseString = ReceiveResponse(HyperVSocket, 4); // either "CONF", "PASS" or "FAIL" (note, "PASS" is not used in VERSION_2 or newer mode)
+            }
+
+            // Check for invalid response from server
+            if (!string.Equals(responseString, "FAIL", StringComparison.Ordinal) &&
+                !string.Equals(responseString, "PASS", StringComparison.Ordinal) &&
+                !string.Equals(responseString, "CONF", StringComparison.Ordinal))
+            {
+                s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: Server responded with an invalid response of {0} for credentials.", responseString);
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Broker", "Credential"));
+            }
+
+            // Credential is invalid.
+            if (string.Equals(responseString, "FAIL", StringComparison.Ordinal))
+            {
+                HyperVSocket.Send("FAIL"u8);
+                // should we be doing this?  Disabling the test for now
+                // HyperVSocket.Shutdown(SocketShutdown.Both);
+                s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: Server responded with FAIL for credentials.");
+                throw new PSDirectException(
+                    PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.InvalidCredential));
+            }
+
+            // If PowerShell Direct in VM supports configuration, send configuration name.
+            if (string.Equals(responseString, "CONF", StringComparison.Ordinal))
+            {
+                if (emptyConfiguration)
+                {
+                    HyperVSocket.Send("EMPTYCF"u8);
+                }
+                else
+                {
+                    HyperVSocket.Send("NONEMPTYCF"u8);
+                    ReceiveResponse(HyperVSocket, 4); // only "PASS" is expected
+
+                    SendUserData(configurationName, HyperVSocket);
+                }
+            }
+            else
+            {
+                HyperVSocket.Send("PASS"u8);
+            }
+
+            if (!useBackwardsCompatibleMode)
+            {
+                // Receive the token from the server
+                // Getting 1024 bytes because it is well above the expected token size
+                // The expected size at the time of writing this would be about 50 based64 characters,
+                // plus the 6 characters for the "TOKEN " prefix.
+                // The 50 character size is designed to last 10 years of cryptographic changes.
+                // Since the broker completely controls the cryptographic portion here,
+                // allowing a significant larger size, allows the broker to make almost arbitrary changes,
+                // without breaking the client.
+                string token = ReceiveResponse(HyperVSocket, 1024); // either "PASS" or "FAIL"
+
+                ReadOnlySpan<byte> tokenResponseBytes = Encoding.UTF8.GetBytes(token);
+                string extractedToken = ExtractToken(tokenResponseBytes);
+
+                if (extractedToken == null)
+                {
+                    s_tracer.WriteLine("ExchangeCredentialsAndConfiguration: Server did not respond with a valid token. Response: {0}", token);
+                    throw new PSDirectException(
+                        PSRemotingErrorInvariants.FormatResourceString(RemotingErrorIdStrings.HyperVInvalidResponse, "Broker", "Token " + token));
+                }
+
+                token = extractedToken;
+
+                HyperVSocket.Send("PASS"u8); // acknowledge the token
+                return (true, token);
+            }
+
+            return (true, null);
+        }
+
         public void Close()
         {
             Stream.Dispose();
             HyperVSocket.Dispose();
         }
 
+        /// <summary>
+        /// Receives a response from the socket and decodes it.
+        /// </summary>
+        /// <param name="socket">The socket to receive from.</param>
+        /// <param name="bufferSize">The size of the buffer to use for receiving data.</param>
+        /// <returns>The decoded response string.</returns>
+        internal static string ReceiveResponse(Socket socket, int bufferSize)
+        {
+            System.Buffers.ArrayPool<byte> pool = System.Buffers.ArrayPool<byte>.Shared;
+            byte[] responseBuffer = pool.Rent(bufferSize);
+            int bytesReceived = 0;
+            try
+            {
+                bytesReceived = socket.Receive(responseBuffer);
+                if (bytesReceived == 0)
+                {
+                    return null;
+                }
+
+                string response = Encoding.ASCII.GetString(responseBuffer, 0, bytesReceived);
+
+                // Handle null terminators and log if found
+                if (response.EndsWith('\0'))
+                {
+                    int originalLength = response.Length;
+                    response = response.TrimEnd('\0');
+                    // Cannot log actual response, because we don't know if it is sensitive
+                    s_tracer.WriteLine(
+                        "ReceiveResponse: Removed null terminator(s). Original length: {0}, New length: {1}",
+                        originalLength,
+                        response.Length);
+                }
+
+                return response;
+            }
+            finally
+            {
+                pool.Return(responseBuffer);
+            }
+        }
+
+        internal static string ExtractToken(ReadOnlySpan<byte> tokenResponse)
+        {
+            string token = Encoding.UTF8.GetString(tokenResponse);
+
+            if (token == null || !token.StartsWith("TOKEN ", StringComparison.Ordinal))
+            {
+                return null; // caller method will write trace (and determine when to expose token info as appropriate)
+            }
+
+            token = token.Substring(6).Trim(); // remove "TOKEN " prefix
+
+            if (token.Length == 0)
+            {
+                return null;
+            }
+
+            return token;
+        }
+
+        /// <summary>
+        /// Sends user data (domain, username, etc.) over the HyperVSocket using Unicode encoding.
+        /// </summary>
+        private static void SendUserData(string data, Socket socket)
+        {
+            // this encodes the data in UTF-16 (Unicode)
+            byte[] buffer = Encoding.Unicode.GetBytes(data);
+            socket.Send(buffer);
+        }
         #endregion
     }
 }
diff --git a/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs b/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs
index 7593bbcc3b0..fc5226a007e 100644
--- a/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs
+++ b/src/System.Management.Automation/engine/remoting/common/RemoteSessionNamedPipe.cs
@@ -12,7 +12,6 @@
 using System.Security.AccessControl;
 using System.Security.Principal;
 using System.Threading;
-using System.Threading.Tasks;
 
 using Microsoft.Win32.SafeHandles;
 
@@ -110,7 +109,7 @@ internal static string CreateProcessPipeName(
                 // There is a limit of 104 characters in total including the temp path to the named pipe file
                 // on non-Windows systems, so we'll convert the starttime to hex and just take the first 8 characters.
 #if UNIX
-                .Append(proc.StartTime.ToFileTime().ToString("X8").Substring(1,8))
+                .Append(proc.StartTime.ToFileTime().ToString("X8").AsSpan(1, 8))
 #else
                 .Append(proc.StartTime.ToFileTime().ToString(CultureInfo.InvariantCulture))
 #endif
@@ -190,26 +189,6 @@ internal static class NamedPipeNative
         internal const uint ERROR_IO_INCOMPLETE = 996;
         internal const uint ERROR_IO_PENDING = 997;
 
-        // File function constants
-        internal const uint GENERIC_READ = 0x80000000;
-        internal const uint GENERIC_WRITE = 0x40000000;
-        internal const uint GENERIC_EXECUTE = 0x20000000;
-        internal const uint GENERIC_ALL = 0x10000000;
-
-        internal const uint CREATE_NEW = 1;
-        internal const uint CREATE_ALWAYS = 2;
-        internal const uint OPEN_EXISTING = 3;
-        internal const uint OPEN_ALWAYS = 4;
-        internal const uint TRUNCATE_EXISTING = 5;
-
-        internal const uint SECURITY_IMPERSONATIONLEVEL_ANONYMOUS = 0;
-        internal const uint SECURITY_IMPERSONATIONLEVEL_IDENTIFICATION = 1;
-        internal const uint SECURITY_IMPERSONATIONLEVEL_IMPERSONATION = 2;
-        internal const uint SECURITY_IMPERSONATIONLEVEL_DELEGATION = 3;
-
-        // Infinite timeout
-        internal const uint INFINITE = 0xFFFFFFFF;
-
         #endregion
 
         #region Data structures
@@ -265,28 +244,6 @@ internal static SECURITY_ATTRIBUTES GetSecurityAttributes(GCHandle securityDescr
             return securityAttributes;
         }
 
-        [DllImport(PinvokeDllNames.CreateFileDllName, SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
-        internal static extern SafePipeHandle CreateFile(
-              string lpFileName,
-              uint dwDesiredAccess,
-              uint dwShareMode,
-              IntPtr SecurityAttributes,
-              uint dwCreationDisposition,
-              uint dwFlagsAndAttributes,
-              IntPtr hTemplateFile);
-
-        [DllImport(PinvokeDllNames.WaitNamedPipeDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool WaitNamedPipe(string lpNamedPipeName, uint nTimeOut);
-
-        [DllImport(PinvokeDllNames.ImpersonateNamedPipeClientDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool ImpersonateNamedPipeClient(IntPtr hNamedPipe);
-
-        [DllImport(PinvokeDllNames.RevertToSelfDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-        [return: MarshalAs(UnmanagedType.Bool)]
-        internal static extern bool RevertToSelf();
-
         #endregion
     }
 
@@ -496,7 +453,7 @@ private static NamedPipeServerStream CreateNamedPipe(
             SafePipeHandle pipeHandle = NamedPipeNative.CreateNamedPipe(
                 fullPipeName,
                 NamedPipeNative.PIPE_ACCESS_DUPLEX | NamedPipeNative.FILE_FLAG_FIRST_PIPE_INSTANCE | NamedPipeNative.FILE_FLAG_OVERLAPPED,
-                NamedPipeNative.PIPE_TYPE_MESSAGE | NamedPipeNative.PIPE_READMODE_MESSAGE,
+                NamedPipeNative.PIPE_TYPE_MESSAGE | NamedPipeNative.PIPE_READMODE_MESSAGE | NamedPipeNative.PIPE_REJECT_REMOTE_CLIENTS,
                 1,
                 _namedPipeBufferSizeForRemoting,
                 _namedPipeBufferSizeForRemoting,
@@ -504,10 +461,7 @@ private static NamedPipeServerStream CreateNamedPipe(
                 securityAttributes);
 
             int lastError = Marshal.GetLastWin32Error();
-            if (securityDescHandle != null)
-            {
-                securityDescHandle.Value.Free();
-            }
+            securityDescHandle?.Free();
 
             if (pipeHandle.IsInvalid)
             {
@@ -545,13 +499,14 @@ static RemoteSessionNamedPipeServer()
         {
             s_syncObject = new object();
 
-            // All PowerShell instances will start with the named pipe
-            // and listener created and running.
-            IPCNamedPipeServerEnabled = true;
-
-            CreateIPCNamedPipeServerSingleton();
+            // Unless opt-out, all PowerShell instances will start with the named-pipe listener created and running.
+            IPCNamedPipeServerEnabled = !Utils.GetEnvironmentVariableAsBool(name: "POWERSHELL_DIAGNOSTICS_OPTOUT", defaultValue: false);
 
-            CreateProcessExitHandler();
+            if (IPCNamedPipeServerEnabled)
+            {
+                CreateIPCNamedPipeServerSingleton();
+                CreateProcessExitHandler();
+            }
         }
 
         #endregion
@@ -1009,8 +964,6 @@ internal class NamedPipeClientBase : IDisposable
         private NamedPipeClientStream _clientPipeStream;
         private readonly PowerShellTraceSource _tracer = PowerShellTraceSourceFactory.GetTraceSource();
 
-        protected string _pipeName;
-
         #endregion
 
         #region Properties
@@ -1030,25 +983,30 @@ internal class NamedPipeClientBase : IDisposable
         /// </summary>
         public string PipeName
         {
-            get { return _pipeName; }
+            get;
+            internal set;
         }
 
         #endregion
 
-        #region Constructor
-
-        public NamedPipeClientBase()
-        { }
-
-        #endregion
-
         #region IDisposable
 
         /// <summary>
-        /// Dispose.
+        /// Dispose object.
         /// </summary>
         public void Dispose()
         {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        private void Dispose(bool disposing)
+        {
+            if (!disposing)
+            {
+                return;
+            }
+
             if (TextReader != null)
             {
                 try { TextReader.Dispose(); }
@@ -1093,23 +1051,23 @@ public void Connect(
             TextWriter.AutoFlush = true;
 
             _tracer.WriteMessage("NamedPipeClientBase", "Connect", Guid.Empty,
-                "Connection started on pipe: {0}", _pipeName);
+                "Connection started on pipe: {0}", PipeName);
         }
 
         /// <summary>
         /// Closes the named pipe.
         /// </summary>
-        public void Close()
-        {
-            if (_clientPipeStream != null)
-            {
-                _clientPipeStream.Dispose();
-            }
-        }
+        public void Close() => _clientPipeStream?.Dispose();
 
+        /// <summary>
+        /// Abort connection attempt.
+        /// </summary>
         public virtual void AbortConnect()
         { }
 
+        /// <summary>
+        /// Begin connection attempt.
+        /// </summary>
         protected virtual NamedPipeClientStream DoConnect(int timeout)
         {
             return null;
@@ -1166,7 +1124,7 @@ internal RemoteSessionNamedPipeClient(
                 throw new PSArgumentNullException(nameof(pipeName));
             }
 
-            _pipeName = pipeName;
+            PipeName = pipeName;
 
             // Defer creating the .Net NamedPipeClientStream object until we connect.
             // _clientPipeStream == null.
@@ -1189,7 +1147,7 @@ internal RemoteSessionNamedPipeClient(
 
             if (coreName == null) { throw new PSArgumentNullException(nameof(coreName)); }
 
-            _pipeName = @"\\" + serverName + @"\" + namespaceName + @"\" + coreName;
+            PipeName = @"\\" + serverName + @"\" + namespaceName + @"\" + coreName;
 
             // Defer creating the .Net NamedPipeClientStream object until we connect.
             // _clientPipeStream == null.
@@ -1211,6 +1169,9 @@ public override void AbortConnect()
 
         #region Protected Methods
 
+        /// <summary>
+        /// Begin connection attempt.
+        /// </summary>
         protected override NamedPipeClientStream DoConnect(int timeout)
         {
             // Repeatedly attempt connection to pipe until timeout expires.
@@ -1220,11 +1181,11 @@ protected override NamedPipeClientStream DoConnect(int timeout)
 
             NamedPipeClientStream namedPipeClientStream = new NamedPipeClientStream(
                 serverName: ".",
-                pipeName: _pipeName,
+                pipeName: PipeName,
                 direction: PipeDirection.InOut,
                 options: PipeOptions.Asynchronous);
 
-            namedPipeClientStream.Connect();
+            namedPipeClientStream.ConnectAsync(timeout);
 
             do
             {
@@ -1275,7 +1236,7 @@ public ContainerSessionNamedPipeClient(
             //
             // Named pipe inside Windows Server container is under different name space.
             //
-            _pipeName = containerObRoot + @"\Device\NamedPipe\" +
+            PipeName = containerObRoot + @"\Device\NamedPipe\" +
                 NamedPipeUtils.CreateProcessPipeName(procId, appDomainName);
         }
 
@@ -1289,30 +1250,34 @@ public ContainerSessionNamedPipeClient(
         /// </summary>
         protected override NamedPipeClientStream DoConnect(int timeout)
         {
+#if UNIX
+            // TODO: `CreateFileWithSafePipeHandle` pinvoke below clearly says
+            // that the code is only for Windows and we could exclude
+            // a lot of code from compilation on Unix.
+            throw new NotSupportedException(nameof(DoConnect));
+#else
             //
             // WaitNamedPipe API is not supported by Windows Server container now, so we need to repeatedly
             // attempt connection to pipe server until timeout expires.
             //
             int startTime = Environment.TickCount;
             int elapsedTime = 0;
-            SafePipeHandle pipeHandle = null;
+            nint handle;
 
             do
             {
                 // Get handle to pipe.
-                pipeHandle = NamedPipeNative.CreateFile(
-                    lpFileName: _pipeName,
-                    dwDesiredAccess: NamedPipeNative.GENERIC_READ | NamedPipeNative.GENERIC_WRITE,
-                    dwShareMode: 0,
-                    SecurityAttributes: IntPtr.Zero,
-                    dwCreationDisposition: NamedPipeNative.OPEN_EXISTING,
-                    dwFlagsAndAttributes: NamedPipeNative.FILE_FLAG_OVERLAPPED,
-                    hTemplateFile: IntPtr.Zero);
-
-                int lastError = Marshal.GetLastWin32Error();
-                if (pipeHandle.IsInvalid)
+                handle = Interop.Windows.CreateFileWithPipeHandle(
+                    lpFileName: PipeName,
+                    FileAccess.ReadWrite,
+                    FileShare.None,
+                    FileMode.Open,
+                    Interop.Windows.FileAttributes.Overlapped);
+
+                if (handle == nint.Zero || handle == (nint)(-1))
                 {
-                    if (lastError == NamedPipeNative.ERROR_FILE_NOT_FOUND)
+                    int lastError = Marshal.GetLastPInvokeError();
+                    if (lastError == Interop.Windows.ERROR_FILE_NOT_FOUND)
                     {
                         elapsedTime = unchecked(Environment.TickCount - startTime);
                         Thread.Sleep(100);
@@ -1330,19 +1295,21 @@ protected override NamedPipeClientStream DoConnect(int timeout)
                 }
             } while (elapsedTime < timeout);
 
+            SafePipeHandle pipeHandle = null;
             try
             {
+                pipeHandle = new SafePipeHandle(handle, ownsHandle: true);
                 return new NamedPipeClientStream(
                     PipeDirection.InOut,
-                    true,
-                    true,
+                    isAsync: true,
                     pipeHandle);
             }
             catch (Exception)
             {
-                pipeHandle.Dispose();
+                pipeHandle?.Dispose();
                 throw;
             }
+#endif
         }
 
         #endregion
diff --git a/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs b/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs
index ea8a9c1a9d0..475dc705674 100644
--- a/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs
+++ b/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel; // Win32Exception
 using System.Diagnostics;
@@ -17,6 +18,7 @@
 using System.Reflection;
 using System.Runtime.InteropServices;
 using System.Security.AccessControl;
+using System.Text;
 using System.Threading;
 
 using Microsoft.Win32.SafeHandles;
@@ -166,10 +168,7 @@ public CultureInfo Culture
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 _culture = value;
             }
@@ -189,10 +188,7 @@ public CultureInfo UICulture
 
             set
             {
-                if (value == null)
-                {
-                    throw new ArgumentNullException("value");
-                }
+                ArgumentNullException.ThrowIfNull(value);
 
                 _uiCulture = value;
             }
@@ -229,7 +225,7 @@ public int OpenTimeout
                     // The timer constructor will throw an exception
                     // for any value greater than Int32.MaxValue
                     // hence this is the maximum possible limit
-                    _openTimeout = Int32.MaxValue;
+                    _openTimeout = int.MaxValue;
                 }
             }
         }
@@ -274,7 +270,7 @@ public int OpenTimeout
         /// The maximum allowed idle timeout duration (in ms) that can be set on a Runspace.  This is a read-only property
         /// that is set once the Runspace is successfully created and opened.
         /// </summary>
-        public int MaxIdleTimeout { get; internal set; } = Int32.MaxValue;
+        public int MaxIdleTimeout { get; internal set; } = int.MaxValue;
 
         /// <summary>
         /// Populates session options from a PSSessionOption instance.
@@ -282,10 +278,7 @@ public int OpenTimeout
         /// <param name="options"></param>
         public virtual void SetSessionOptions(PSSessionOption options)
         {
-            if (options == null)
-            {
-                throw new ArgumentNullException(nameof(options));
-            }
+            ArgumentNullException.ThrowIfNull(options);
 
             if (options.Culture != null)
             {
@@ -325,13 +318,33 @@ internal int TimeSpanToTimeOutMs(TimeSpan t)
             }
         }
 
+        /// <summary>
+        /// Validates port number is in range.
+        /// </summary>
+        /// <param name="port">Port number to validate.</param>
+        internal virtual void ValidatePortInRange(int port)
+        {
+            if ((port < MinPort || port > MaxPort))
+            {
+                string message =
+                    PSRemotingErrorInvariants.FormatResourceString(
+                        RemotingErrorIdStrings.PortIsOutOfRange, port);
+                ArgumentException e = new ArgumentException(message);
+                throw e;
+            }
+        }
+
+        #endregion
+
+        #region Public methods
+
         /// <summary>
         /// Creates the appropriate client session transportmanager.
         /// </summary>
         /// <param name="instanceId">Runspace/Pool instance Id.</param>
         /// <param name="sessionName">Session name.</param>
         /// <param name="cryptoHelper">PSRemotingCryptoHelper.</param>
-        internal virtual BaseClientSessionTransportManager CreateClientSessionTransportManager(
+        public virtual BaseClientSessionTransportManager CreateClientSessionTransportManager(
             Guid instanceId,
             string sessionName,
             PSRemotingCryptoHelper cryptoHelper)
@@ -343,27 +356,11 @@ internal virtual BaseClientSessionTransportManager CreateClientSessionTransportM
         /// Create a copy of the connection info object.
         /// </summary>
         /// <returns>Copy of the connection info object.</returns>
-        internal virtual RunspaceConnectionInfo InternalCopy()
+        public virtual RunspaceConnectionInfo Clone()
         {
             throw new PSNotImplementedException();
         }
 
-        /// <summary>
-        /// Validates port number is in range.
-        /// </summary>
-        /// <param name="port">Port number to validate.</param>
-        internal virtual void ValidatePortInRange(int port)
-        {
-            if ((port < MinPort || port > MaxPort))
-            {
-                string message =
-                    PSRemotingErrorInvariants.FormatResourceString(
-                        RemotingErrorIdStrings.PortIsOutOfRange, port);
-                ArgumentException e = new ArgumentException(message);
-                throw e;
-            }
-        }
-
         #endregion
 
         #region Constants
@@ -1023,10 +1020,7 @@ public WSManConnectionInfo(Uri uri)
         /// </exception>
         public override void SetSessionOptions(PSSessionOption options)
         {
-            if (options == null)
-            {
-                throw new ArgumentNullException(nameof(options));
-            }
+            ArgumentNullException.ThrowIfNull(options);
 
             if ((options.ProxyAccessType == ProxyAccessType.None) && (options.ProxyCredential != null))
             {
@@ -1062,10 +1056,10 @@ public override void SetSessionOptions(PSSessionOption options)
         }
 
         /// <summary>
-        /// Shallow copy of the current instance.
+        /// Create a copy of the connection info object.
         /// </summary>
-        /// <returns>RunspaceConnectionInfo.</returns>
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             return Copy();
         }
@@ -1133,7 +1127,14 @@ public WSManConnectionInfo Copy()
 
         #region Internal Methods
 
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <summary>
+        /// Creates the appropriate client session transportmanager.
+        /// </summary>
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper instance.</param>
+        /// <returns>Instance of WSManClientSessionTransportManager</returns>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             return new WSManClientSessionTransportManager(
                 instanceId,
@@ -1173,7 +1174,7 @@ private static string ResolveShellUri(string shell)
         internal static T ExtractPropertyAsWsManConnectionInfo<T>(RunspaceConnectionInfo rsCI,
             string property, T defaultValue)
         {
-            if (!(rsCI is WSManConnectionInfo wsCI))
+            if (rsCI is not WSManConnectionInfo wsCI)
             {
                 return defaultValue;
             }
@@ -1374,7 +1375,7 @@ private void UpdateUri(Uri uri)
         private string _appName = s_defaultAppName;
         private Uri _connectionUri = new Uri(LocalHostUriString);          // uri of this connection
         private PSCredential _credential;    // credentials to be used for this connection
-        private string _shellUri = DefaultShellUri;            // shell thats specified by the user
+        private string _shellUri = DefaultShellUri;            // shell that's specified by the user
         private string _thumbPrint;
         private AuthenticationMechanism _proxyAuthentication;
         private PSCredential _proxyCredential;
@@ -1653,12 +1654,23 @@ public NewProcessConnectionInfo Copy()
             return result;
         }
 
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <summary>
+        /// Create a copy of the connection info object.
+        /// </summary>
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             return Copy();
         }
 
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <summary>
+        /// Creates the appropriate client session transportmanager.
+        /// </summary>
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper object.</param>
+        /// <returns>Instance of OutOfProcessClientSessionTransportManager</returns>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             return new OutOfProcessClientSessionTransportManager(
                 instanceId,
@@ -1873,10 +1885,10 @@ public override string CertificateThumbprint
         }
 
         /// <summary>
-        /// Shallow copy of current instance.
+        /// Create a copy of the connection info object.
         /// </summary>
-        /// <returns>NamedPipeConnectionInfo.</returns>
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             NamedPipeConnectionInfo newCopy = new NamedPipeConnectionInfo();
             newCopy._authMechanism = this.AuthenticationMechanism;
@@ -1889,7 +1901,14 @@ internal override RunspaceConnectionInfo InternalCopy()
             return newCopy;
         }
 
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <summary>
+        /// Creates the appropriate client session transportmanager.
+        /// </summary>
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper object.</param>
+        /// <returns>Instance of NamedPipeClientSessionTransportManager</returns>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             return new NamedPipeClientSessionTransportManager(
                 this,
@@ -1907,6 +1926,20 @@ internal override BaseClientSessionTransportManager CreateClientSessionTransport
     /// </summary>
     public sealed class SSHConnectionInfo : RunspaceConnectionInfo
     {
+        #region Constants
+
+        /// <summary>
+        /// Default value for subsystem.
+        /// </summary>
+        private const string DefaultSubsystem = "powershell";
+
+        /// <summary>
+        /// Default value is infinite timeout.
+        /// </summary>
+        private const int DefaultConnectingTimeoutTime = Timeout.Infinite;
+
+        #endregion
+
         #region Properties
 
         /// <summary>
@@ -1921,7 +1954,7 @@ public string UserName
         /// <summary>
         /// Key File Path.
         /// </summary>
-        private string KeyFilePath
+        public string KeyFilePath
         {
             get;
             set;
@@ -1930,7 +1963,7 @@ private string KeyFilePath
         /// <summary>
         /// Port for connection.
         /// </summary>
-        private int Port
+        public int Port
         {
             get;
             set;
@@ -1939,7 +1972,27 @@ private int Port
         /// <summary>
         /// Subsystem to use.
         /// </summary>
-        private string Subsystem
+        public string Subsystem
+        {
+            get;
+            set;
+        }
+
+        /// <summary>
+        /// Gets or sets a time in milliseconds after which a connection attempt is terminated.
+        /// Default value (-1) never times out and a connection attempt waits indefinitely.
+        /// </summary>
+        public int ConnectingTimeout
+        {
+            get;
+            set;
+        }
+
+        /// <summary>
+        /// The SSH options to pass to OpenSSH.
+        /// Gets or sets the SSH options to pass to OpenSSH.
+        /// </summary>
+        private Hashtable Options
         {
             get;
             set;
@@ -1950,13 +2003,13 @@ private string Subsystem
         #region Constructors
 
         /// <summary>
-        /// Constructor.
+        /// Initializes a new instance of the <see cref="SSHConnectionInfo" /> class.
         /// </summary>
         private SSHConnectionInfo()
         { }
 
         /// <summary>
-        /// Constructor.
+        /// Initializes a new instance of the <see cref="SSHConnectionInfo" /> class.
         /// </summary>
         /// <param name="userName">User Name.</param>
         /// <param name="computerName">Computer Name.</param>
@@ -1966,17 +2019,21 @@ public SSHConnectionInfo(
             string computerName,
             string keyFilePath)
         {
-            if (computerName == null) { throw new PSArgumentNullException(nameof(computerName)); }
+            if (computerName == null)
+            {
+                throw new PSArgumentNullException(nameof(computerName));
+            }
 
-            this.UserName = userName;
-            this.ComputerName = computerName;
-            this.KeyFilePath = keyFilePath;
-            this.Port = 0;
-            this.Subsystem = DefaultSubsystem;
+            UserName = userName;
+            ComputerName = computerName;
+            KeyFilePath = keyFilePath;
+            Port = 0;
+            Subsystem = DefaultSubsystem;
+            ConnectingTimeout = DefaultConnectingTimeoutTime;
         }
 
         /// <summary>
-        /// Constructor.
+        /// Initializes a new instance of the <see cref="SSHConnectionInfo" /> class.
         /// </summary>
         /// <param name="userName">User Name.</param>
         /// <param name="computerName">Computer Name.</param>
@@ -1989,12 +2046,11 @@ public SSHConnectionInfo(
             int port) : this(userName, computerName, keyFilePath)
         {
             ValidatePortInRange(port);
-
-            this.Port = port;
+            Port = port;
         }
 
         /// <summary>
-        /// Constructor.
+        /// Initializes a new instance of the <see cref="SSHConnectionInfo" /> class.
         /// </summary>
         /// <param name="userName">User Name.</param>
         /// <param name="computerName">Computer Name.</param>
@@ -2006,12 +2062,51 @@ public SSHConnectionInfo(
             string computerName,
             string keyFilePath,
             int port,
-            string subsystem) : this(userName, computerName, keyFilePath)
+            string subsystem) : this(userName, computerName, keyFilePath, port)
         {
-            ValidatePortInRange(port);
+            Subsystem = string.IsNullOrEmpty(subsystem) ? DefaultSubsystem : subsystem;
+        }
 
-            this.Port = port;
-            this.Subsystem = (string.IsNullOrEmpty(subsystem)) ? DefaultSubsystem : subsystem;
+        /// <summary>
+        /// Initializes a new instance of SSHConnectionInfo.
+        /// </summary>
+        /// <param name="userName">Name of user.</param>
+        /// <param name="computerName">Name of computer.</param>
+        /// <param name="keyFilePath">Path of key file.</param>
+        /// <param name="port">Port number for connection (default 22).</param>
+        /// <param name="subsystem">Subsystem to use (default 'powershell').</param>
+        /// <param name="connectingTimeout">Timeout time for terminating connection attempt.</param>
+        public SSHConnectionInfo(
+            string userName,
+            string computerName,
+            string keyFilePath,
+            int port,
+            string subsystem,
+            int connectingTimeout) : this(userName, computerName, keyFilePath, port, subsystem)
+        {
+            ConnectingTimeout = connectingTimeout;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SSHConnectionInfo" /> class.
+        /// </summary>
+        /// <param name="userName">User Name.</param>
+        /// <param name="computerName">Computer Name.</param>
+        /// <param name="keyFilePath">Key File Path.</param>
+        /// <param name="port">Port number for connection (default 22).</param>
+        /// <param name="subsystem">Subsystem to use (default 'powershell').</param>
+        /// <param name="connectingTimeout">Timeout time for terminating connection attempt.</param>
+        /// <param name="options">Options for the SSH connection.</param>
+        public SSHConnectionInfo(
+            string userName,
+            string computerName,
+            string keyFilePath,
+            int port,
+            string subsystem,
+            int connectingTimeout,
+            Hashtable options) : this(userName, computerName, keyFilePath, port, subsystem, connectingTimeout)
+        {
+           Options = options;
         }
 
         #endregion
@@ -2058,29 +2153,30 @@ public override string CertificateThumbprint
         }
 
         /// <summary>
-        /// Shallow copy of current instance.
+        /// Create a copy of the connection info object.
         /// </summary>
-        /// <returns>NamedPipeConnectionInfo.</returns>
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             SSHConnectionInfo newCopy = new SSHConnectionInfo();
-            newCopy.ComputerName = this.ComputerName;
-            newCopy.UserName = this.UserName;
-            newCopy.KeyFilePath = this.KeyFilePath;
-            newCopy.Port = this.Port;
-            newCopy.Subsystem = this.Subsystem;
+            newCopy.ComputerName = ComputerName;
+            newCopy.UserName = UserName;
+            newCopy.KeyFilePath = KeyFilePath;
+            newCopy.Port = Port;
+            newCopy.Subsystem = Subsystem;
+            newCopy.ConnectingTimeout = ConnectingTimeout;
+            newCopy.Options = Options;
 
             return newCopy;
         }
 
         /// <summary>
-        /// CreateClientSessionTransportManager.
+        /// Creates the appropriate client session transportmanager.
         /// </summary>
-        /// <param name="instanceId"></param>
-        /// <param name="sessionName"></param>
-        /// <param name="cryptoHelper"></param>
-        /// <returns></returns>
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper.</param>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             return new SSHClientSessionTransportManager(
                 this,
@@ -2110,20 +2206,62 @@ internal int StartSSHProcess(
             var context = Runspaces.LocalPipeline.GetExecutionContextFromTLS();
             if (context != null)
             {
-                var cmdInfo = context.CommandDiscovery.LookupCommandInfo(sshCommand, CommandOrigin.Internal) as ApplicationInfo;
-                if (cmdInfo != null)
+                var cmdInfo = CommandDiscovery.LookupCommandInfo(
+                    sshCommand,
+                    CommandTypes.Application,
+                    SearchResolutionOptions.None,
+                    CommandOrigin.Internal,
+                    context);
+
+                if (cmdInfo is ApplicationInfo appInfo)
                 {
-                    filePath = cmdInfo.Path;
+                    filePath = appInfo.Path;
+                }
+            }
+            else
+            {
+                // A Runspace may not be present in the TLS in SDK hosted apps
+                // or if running in another thread without a Runspace. While
+                // 'ProcessStartInfo' can lookup the full path in PATH, it searches
+                // the process' working directory first. 'LookupCommandInfo' does
+                // not search the process' working directory and we want to keep that
+                // behavior. We also get the parent dir of the full path to set as the
+                // new WorkingDirectory. So, we do a manual lookup here only in PATH.
+                string[] entries = Environment.GetEnvironmentVariable("PATH")?.Split(
+                    Path.PathSeparator,
+                    StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) ?? [];
+                foreach (var path in entries)
+                {
+                    if (!Path.IsPathFullyQualified(path))
+                    {
+                        continue;
+                    }
+
+                    var sshCommandPath = Path.Combine(path, sshCommand);
+                    if (File.Exists(sshCommandPath))
+                    {
+                        filePath = sshCommandPath;
+                        break;
+                    }
                 }
             }
+            
+            if (string.IsNullOrEmpty(filePath))
+            {
+                throw new CommandNotFoundException(
+                    sshCommand,
+                    null,
+                    "CommandNotFoundException",
+                    DiscoveryExceptions.CommandNotFoundException);
+            }
 
-            // Create a local ssh process (client) that conects to a remote sshd process (server) using a 'powershell' subsystem.
+            // Create a local ssh process (client) that connects to a remote sshd process (server) using a 'powershell' subsystem.
             //
             // Local ssh invoked as:
             //   windows:
-            //     ssh.exe [-i identity_file] [-l login_name] [-p port] -s <destination> <command>
+            //     ssh.exe [-i identity_file] [-l login_name] [-p port] [-o option] -s <destination> <command>
             //   linux|macos:
-            //     ssh [-i identity_file] [-l login_name] [-p port] -s <destination> <command>
+            //     ssh [-i identity_file] [-l login_name] [-p port] [-o option] -s <destination> <command>
             // where <command> is interpreted as the subsystem due to the -s flag.
             //
             // Remote sshd configured for PowerShell Remoting Protocol (PSRP) over Secure Shell Protocol (SSH)
@@ -2134,36 +2272,37 @@ internal int StartSSHProcess(
             //   linux|macos:
             //     Subsystem powershell /usr/local/bin/pwsh -SSHServerMode -NoLogo -NoProfile
 
-            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(filePath);
+            // codeql[cs/microsoft/command-line-injection-shell-execution] - This is expected Poweshell behavior where user inputted paths are supported for the context of this method. The user assumes trust for the file path specified, so any file executed in the runspace would be in the user's local system/process or a system they have access to in which case restricted remoting security guidelines should be used.
+            ProcessStartInfo startInfo = new(filePath);
 
             // pass "-i identity_file" command line argument to ssh if KeyFilePath is set
             // if KeyFilePath is not set, then ssh will use IdentityFile / IdentityAgent from ssh_config if defined else none by default
             if (!string.IsNullOrEmpty(this.KeyFilePath))
             {
-                if (!System.IO.File.Exists(this.KeyFilePath))
+                if (!File.Exists(this.KeyFilePath))
                 {
                     throw new FileNotFoundException(
                         StringUtil.Format(RemotingErrorIdStrings.KeyFileNotFound, this.KeyFilePath));
                 }
 
-                startInfo.ArgumentList.Add(string.Format(CultureInfo.InvariantCulture, @"-i ""{0}""", this.KeyFilePath));
+                startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-i ""{this.KeyFilePath}"""));
             }
 
-            // pass "-l login_name" commmand line argument to ssh if UserName is set
+            // pass "-l login_name" command line argument to ssh if UserName is set
             // if UserName is not set, then ssh will use User from ssh_config if defined else the environment user by default
             if (!string.IsNullOrEmpty(this.UserName))
             {
-                var parts = this.UserName.Split(Utils.Separators.Backslash);
+                var parts = this.UserName.Split('\\');
                 if (parts.Length == 2)
                 {
                     // convert DOMAIN\user to user@DOMAIN
                     var domainName = parts[0];
                     var userName = parts[1];
-                    startInfo.ArgumentList.Add(string.Format(CultureInfo.InvariantCulture, @"-l {0}@{1}", userName, domainName));
+                    startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-l {userName}@{domainName}"));
                 }
                 else
                 {
-                    startInfo.ArgumentList.Add(string.Format(CultureInfo.InvariantCulture, @"-l {0}", this.UserName));
+                    startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-l {this.UserName}"));
                 }
             }
 
@@ -2171,28 +2310,37 @@ internal int StartSSHProcess(
             // if Port is not set, then ssh will use Port from ssh_config if defined else 22 by default
             if (this.Port != 0)
             {
-                startInfo.ArgumentList.Add(string.Format(CultureInfo.InvariantCulture, @"-p {0}", this.Port));
+                startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-p {this.Port}"));
+            }
+
+            // pass "-o option=value" command line argument to ssh if options are provided
+            if (this.Options != null)
+            {
+                foreach (DictionaryEntry pair in this.Options)
+                {
+                    startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-o {pair.Key}={pair.Value}"));
+                }
             }
 
             // pass "-s destination command" command line arguments to ssh where command is the subsystem to invoke on the destination
             // note that ssh expects IPv6 addresses to not be enclosed in square brackets so trim them if present
-            startInfo.ArgumentList.Add(string.Format(CultureInfo.InvariantCulture, @"-s {0} {1}", this.ComputerName.TrimStart('[').TrimEnd(']'), this.Subsystem));
+            startInfo.ArgumentList.Add(string.Create(CultureInfo.InvariantCulture, $@"-s {this.ComputerName.TrimStart('[').TrimEnd(']')} {this.Subsystem}"));
 
-            startInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(filePath);
+            startInfo.WorkingDirectory = Path.GetDirectoryName(filePath);
             startInfo.CreateNoWindow = true;
             startInfo.UseShellExecute = false;
 
             return StartSSHProcessImpl(startInfo, out stdInWriterVar, out stdOutReaderVar, out stdErrReaderVar);
         }
 
-        #endregion
-
-        #region Constants
-
         /// <summary>
-        /// Default value for subsystem.
+        /// Terminates the SSH process by process Id.
         /// </summary>
-        private const string DefaultSubsystem = "powershell";
+        /// <param name="pid">Process id.</param>
+        internal void KillSSHProcess(int pid)
+        {
+            KillSSHProcessImpl(pid);
+        }
 
         #endregion
 
@@ -2232,6 +2380,16 @@ private static int StartSSHProcessImpl(
             return pid;
         }
 
+        private static void KillSSHProcessImpl(int pid)
+        {
+            // killing a zombie might or might not return ESRCH, so we ignore kill's return value
+            Platform.NonWindowsKillProcess(pid);
+
+            // block while waiting for process to die
+            // shouldn't take long after SIGKILL
+            Platform.NonWindowsWaitPid(pid, false);
+        }
+
         #region UNIX Create Process
 
         //
@@ -2282,23 +2440,31 @@ internal static int StartSSHProcess(
             if (startInfo.RedirectStandardInput)
             {
                 Debug.Assert(stdinFd >= 0, "Invalid Fd");
-                standardInput = new StreamWriter(OpenStream(stdinFd, FileAccess.Write),
-                    Utils.utf8NoBom, StreamBufferSize)
+                standardInput = new StreamWriter(
+                    OpenStream(stdinFd, FileAccess.Write),
+                    Encoding.Default,
+                    StreamBufferSize)
                 { AutoFlush = true };
             }
 
             if (startInfo.RedirectStandardOutput)
             {
                 Debug.Assert(stdoutFd >= 0, "Invalid Fd");
-                standardOutput = new StreamReader(OpenStream(stdoutFd, FileAccess.Read),
-                    startInfo.StandardOutputEncoding ?? Utils.utf8NoBom, true, StreamBufferSize);
+                standardOutput = new StreamReader(
+                    OpenStream(stdoutFd, FileAccess.Read),
+                    startInfo.StandardOutputEncoding ?? Encoding.Default,
+                    detectEncodingFromByteOrderMarks: true,
+                    StreamBufferSize);
             }
 
             if (startInfo.RedirectStandardError)
             {
                 Debug.Assert(stderrFd >= 0, "Invalid Fd");
-                standardError = new StreamReader(OpenStream(stderrFd, FileAccess.Read),
-                    startInfo.StandardErrorEncoding ?? Utils.utf8NoBom, true, StreamBufferSize);
+                standardError = new StreamReader(
+                    OpenStream(stderrFd, FileAccess.Read),
+                    startInfo.StandardErrorEncoding ?? Encoding.Default,
+                    detectEncodingFromByteOrderMarks: true,
+                    StreamBufferSize);
             }
 
             return childPid;
@@ -2339,7 +2505,7 @@ private static string[] ParseArgv(ProcessStartInfo psi)
             var argvList = new List<string>();
             argvList.Add(psi.FileName);
 
-            var argsToParse = String.Join(" ", psi.ArgumentList).Trim();
+            var argsToParse = string.Join(' ', psi.ArgumentList).Trim();
             var argsLength = argsToParse.Length;
             for (int i = 0; i < argsLength; )
             {
@@ -2414,7 +2580,7 @@ private static unsafe void AllocNullTerminatedArray(string[] arr, ref byte** arr
             // Allocate the unmanaged array to hold each string pointer.
             // It needs to have an extra element to null terminate the array.
             arrPtr = (byte**)Marshal.AllocHGlobal(sizeof(IntPtr) * arrLength);
-            System.Diagnostics.Debug.Assert(arrPtr != null, "Invalid array ptr");
+            Debug.Assert(arrPtr != null, "Invalid array ptr");
 
             // Zero the memory so that if any of the individual string allocations fails,
             // we can loop through the array to free any that succeeded.
@@ -2431,7 +2597,7 @@ private static unsafe void AllocNullTerminatedArray(string[] arr, ref byte** arr
                 byte[] byteArr = System.Text.Encoding.UTF8.GetBytes(arr[i]);
 
                 arrPtr[i] = (byte*)Marshal.AllocHGlobal(byteArr.Length + 1); // +1 for null termination
-                System.Diagnostics.Debug.Assert(arrPtr[i] != null, "Invalid array ptr");
+                Debug.Assert(arrPtr[i] != null, "Invalid array ptr");
 
                 Marshal.Copy(byteArr, 0, (IntPtr)arrPtr[i], byteArr.Length); // copy over the data from the managed byte array
                 arrPtr[i][byteArr.Length] = (byte)'\0'; // null terminate
@@ -2475,13 +2641,13 @@ internal static extern unsafe int ForkAndExecProcess(
         /// P-Invoking native APIs.
         /// </summary>
         private static int StartSSHProcessImpl(
-            System.Diagnostics.ProcessStartInfo startInfo,
+            ProcessStartInfo startInfo,
             out StreamWriter stdInWriterVar,
             out StreamReader stdOutReaderVar,
             out StreamReader stdErrReaderVar)
         {
             Exception ex = null;
-            System.Diagnostics.Process sshProcess = null;
+            Process sshProcess = null;
             //
             // These std pipe handles are bound to managed Reader/Writer objects and returned to the transport
             // manager object, which uses them for PSRP communication.  The lifetime of these handles are then
@@ -2502,7 +2668,7 @@ private static int StartSSHProcessImpl(
             catch (InvalidOperationException e) { ex = e; }
             catch (ArgumentException e) { ex = e; }
             catch (FileNotFoundException e) { ex = e; }
-            catch (System.ComponentModel.Win32Exception e) { ex = e; }
+            catch (Win32Exception e) { ex = e; }
 
             if ((ex != null) ||
                 (sshProcess == null) ||
@@ -2527,9 +2693,9 @@ private static int StartSSHProcessImpl(
             {
                 if (stdInWriterVar != null) { stdInWriterVar.Dispose(); } else { stdInPipeServer.Dispose(); }
 
-                if (stdOutReaderVar != null) { stdInWriterVar.Dispose(); } else { stdOutPipeServer.Dispose(); }
+                if (stdOutReaderVar != null) { stdOutReaderVar.Dispose(); } else { stdOutPipeServer.Dispose(); }
 
-                if (stdErrReaderVar != null) { stdInWriterVar.Dispose(); } else { stdErrPipeServer.Dispose(); }
+                if (stdErrReaderVar != null) { stdErrReaderVar.Dispose(); } else { stdErrPipeServer.Dispose(); }
 
                 throw;
             }
@@ -2537,6 +2703,17 @@ private static int StartSSHProcessImpl(
             return sshProcess.Id;
         }
 
+        private static void KillSSHProcessImpl(int pid)
+        {
+            using (var sshProcess = Process.GetProcessById(pid))
+            {
+                if ((sshProcess != null) && (sshProcess.Handle != IntPtr.Zero) && !sshProcess.HasExited)
+                {
+                    sshProcess.Kill();
+                }
+            }
+        }
+
         // Process creation flags
         private const int CREATE_NEW_PROCESS_GROUP = 0x00000200;
         private const int CREATE_SUSPENDED = 0x00000004;
@@ -2556,10 +2733,10 @@ private static Process CreateProcessWithRedirectedStd(
             stdInPipeServer = null;
             stdOutPipeServer = null;
             stdErrPipeServer = null;
-            SafePipeHandle stdInPipeClient = null;
-            SafePipeHandle stdOutPipeClient = null;
-            SafePipeHandle stdErrPipeClient = null;
-            string randomName = System.IO.Path.GetFileNameWithoutExtension(System.IO.Path.GetRandomFileName());
+            SafeFileHandle stdInPipeClient = null;
+            SafeFileHandle stdOutPipeClient = null;
+            SafeFileHandle stdErrPipeClient = null;
+            string randomName = Path.GetFileNameWithoutExtension(Path.GetRandomFileName());
 
             try
             {
@@ -2580,17 +2757,12 @@ private static Process CreateProcessWithRedirectedStd(
             }
             catch (Exception)
             {
-                if (stdInPipeServer != null) { stdInPipeServer.Dispose(); }
-
-                if (stdInPipeClient != null) { stdInPipeClient.Dispose(); }
-
-                if (stdOutPipeServer != null) { stdOutPipeServer.Dispose(); }
-
-                if (stdOutPipeClient != null) { stdOutPipeClient.Dispose(); }
-
-                if (stdErrPipeServer != null) { stdErrPipeServer.Dispose(); }
-
-                if (stdErrPipeClient != null) { stdErrPipeClient.Dispose(); }
+                stdInPipeServer?.Dispose();
+                stdInPipeClient?.Dispose();
+                stdOutPipeServer?.Dispose();
+                stdOutPipeClient?.Dispose();
+                stdErrPipeServer?.Dispose();
+                stdErrPipeClient?.Dispose();
 
                 throw;
             }
@@ -2609,9 +2781,9 @@ private static Process CreateProcessWithRedirectedStd(
                     startInfo.FileName,
                     string.Join(' ', startInfo.ArgumentList));
 
-                lpStartupInfo.hStdInput = new SafeFileHandle(stdInPipeClient.DangerousGetHandle(), false);
-                lpStartupInfo.hStdOutput = new SafeFileHandle(stdOutPipeClient.DangerousGetHandle(), false);
-                lpStartupInfo.hStdError = new SafeFileHandle(stdErrPipeClient.DangerousGetHandle(), false);
+                lpStartupInfo.hStdInput = stdInPipeClient;
+                lpStartupInfo.hStdOutput = stdOutPipeClient;
+                lpStartupInfo.hStdError = stdErrPipeClient;
                 lpStartupInfo.dwFlags = 0x100;
 
                 // No new window: Inherit the parent process's console window
@@ -2656,45 +2828,23 @@ private static Process CreateProcessWithRedirectedStd(
             }
             catch (Exception)
             {
-                if (stdInPipeServer != null) { stdInPipeServer.Dispose(); }
-
-                if (stdInPipeClient != null) { stdInPipeClient.Dispose(); }
-
-                if (stdOutPipeServer != null) { stdOutPipeServer.Dispose(); }
-
-                if (stdOutPipeClient != null) { stdOutPipeClient.Dispose(); }
-
-                if (stdErrPipeServer != null) { stdErrPipeServer.Dispose(); }
-
-                if (stdErrPipeClient != null) { stdErrPipeClient.Dispose(); }
+                stdInPipeServer?.Dispose();
+                stdOutPipeServer?.Dispose();
+                stdErrPipeServer?.Dispose();
 
                 throw;
             }
             finally
             {
+                lpStartupInfo.Dispose();
                 lpProcessInformation.Dispose();
             }
         }
 
-        private static SafePipeHandle GetNamedPipeHandle(string pipeName)
+        private static SafeFileHandle GetNamedPipeHandle(string pipeName)
         {
-            // Get handle to pipe.
-            var fileHandle = PlatformInvokes.CreateFileW(
-                lpFileName: pipeName,
-                dwDesiredAccess: NamedPipeNative.GENERIC_READ | NamedPipeNative.GENERIC_WRITE,
-                dwShareMode: 0,
-                lpSecurityAttributes: new PlatformInvokes.SECURITY_ATTRIBUTES(), // Create an inheritable handle.
-                dwCreationDisposition: NamedPipeNative.OPEN_EXISTING,
-                dwFlagsAndAttributes: NamedPipeNative.FILE_FLAG_OVERLAPPED, // Open in asynchronous mode.
-                hTemplateFile: IntPtr.Zero);
-
-            int lastError = Marshal.GetLastWin32Error();
-            if (fileHandle == PlatformInvokes.INVALID_HANDLE_VALUE)
-            {
-                throw new System.ComponentModel.Win32Exception(lastError);
-            }
-
-            return new SafePipeHandle(fileHandle, true);
+            SafeFileHandle sf = File.OpenHandle(pipeName, FileMode.Open, FileAccess.ReadWrite, FileShare.Inheritable, FileOptions.Asynchronous);
+            return sf;
         }
 
         private static SafePipeHandle CreateNamedPipe(
@@ -2724,10 +2874,7 @@ private static SafePipeHandle CreateNamedPipe(
                 securityAttributes);
 
             int lastError = Marshal.GetLastWin32Error();
-            if (securityDescHandle != null)
-            {
-                securityDescHandle.Value.Free();
-            }
+            securityDescHandle?.Free();
 
             if (pipeHandle.IsInvalid)
             {
@@ -2831,13 +2978,24 @@ public override PSCredential Credential
         /// </summary>
         public override string ComputerName { get; set; }
 
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <summary>
+        /// Create a copy of the connection info object.
+        /// </summary>
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             VMConnectionInfo result = new VMConnectionInfo(Credential, VMGuid, ComputerName, ConfigurationName);
             return result;
         }
 
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <summary>
+        /// Creates the appropriate client session transportmanager.
+        /// </summary>
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper instance.</param>
+        /// <returns>Instance of VMHyperVSocketClientSessionTransportManager.</returns>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             return new VMHyperVSocketClientSessionTransportManager(
                 this,
@@ -2964,13 +3122,24 @@ public override string ComputerName
             set { throw new PSNotSupportedException(); }
         }
 
-        internal override RunspaceConnectionInfo InternalCopy()
+        /// <summary>
+        /// Create a copy of the connection info object.
+        /// </summary>
+        /// <returns>Copy of the connection info object.</returns>
+        public override RunspaceConnectionInfo Clone()
         {
             ContainerConnectionInfo newCopy = new ContainerConnectionInfo(ContainerProc);
             return newCopy;
         }
 
-        internal override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
+        /// <summary>
+        /// Creates the appropriate client session transportmanager.
+        /// </summary>
+        /// <param name="instanceId">Runspace/Pool instance Id.</param>
+        /// <param name="sessionName">Session name.</param>
+        /// <param name="cryptoHelper">PSRemotingCryptoHelper object.</param>
+        /// <returns>Instance of ContainerHyperVSocketClientSessionTransportManager</returns>
+        public override BaseClientSessionTransportManager CreateClientSessionTransportManager(Guid instanceId, string sessionName, PSRemotingCryptoHelper cryptoHelper)
         {
             if (ContainerProc.RuntimeId != Guid.Empty)
             {
diff --git a/src/System.Management.Automation/engine/remoting/common/RunspacePoolStateInfo.cs b/src/System.Management.Automation/engine/remoting/common/RunspacePoolStateInfo.cs
index e863a7c795e..fb4807351c3 100644
--- a/src/System.Management.Automation/engine/remoting/common/RunspacePoolStateInfo.cs
+++ b/src/System.Management.Automation/engine/remoting/common/RunspacePoolStateInfo.cs
@@ -17,7 +17,7 @@ namespace System.Management.Automation
     public sealed class RunspacePoolStateInfo
     {
         /// <summary>
-        /// State of the runspace pool when this event occured.
+        /// State of the runspace pool when this event occurred.
         /// </summary>
         public RunspacePoolState State { get; }
 
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs
index d99fbe21126..e26f3421cda 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/EncodeAndDecode.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.Globalization;
+using System.Management.Automation;
 using System.Management.Automation.Host;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Remoting;
@@ -73,12 +74,13 @@ public RemotingEncodingException(string message, Exception innerException, Error
     /// </summary>
     internal static class RemotingConstants
     {
-        internal static readonly Version HostVersion = new Version(1, 0, 0, 0);
+        internal static readonly Version HostVersion = PSVersionInfo.PSVersion;
 
-        internal static readonly Version ProtocolVersionWin7RC = new Version(2, 0);
-        internal static readonly Version ProtocolVersionWin7RTM = new Version(2, 1);
-        internal static readonly Version ProtocolVersionWin8RTM = new Version(2, 2);
-        internal static readonly Version ProtocolVersionWin10RTM = new Version(2, 3);
+        internal static readonly Version ProtocolVersion_2_0 = new(2, 0); // Window 7 RC
+        internal static readonly Version ProtocolVersion_2_1 = new(2, 1); // Window 7 RTM
+        internal static readonly Version ProtocolVersion_2_2 = new(2, 2); // Window 8 RTM
+        internal static readonly Version ProtocolVersion_2_3 = new(2, 3); // Window 10 RTM
+        internal static readonly Version ProtocolVersion_2_4 = new(2, 4); // PowerShell 7.6
 
         // Minor will be incremented for each change in PSRP client/server stack and new versions will be
         // forked on early major release/drop changes history.
@@ -86,7 +88,15 @@ internal static class RemotingConstants
         //      2.102 to 2.103 - Key exchange protocol changes in M3
         //      2.103 to 2.2   - Final ship protocol version value, no change to protocol
         //      2.2 to 2.3     - Enabling informational stream
-        internal static readonly Version ProtocolVersionCurrent = new Version(2, 3);
+        //      2.3 to 2.4     - Deprecate the 'Session_Key' exchange. The following messages are obsolete when both server and client are v2.4+:
+        //                        - PUBLIC_KEY
+        //                        - PUBLIC_KEY_REQUEST
+        //                        - ENCRYPTED_SESSION_KEY
+        //                       The padding algorithm 'RSAEncryptionPadding.Pkcs1' used in the 'Session_Key' exchange is NOT secure, and therefore,
+        //                       PSRP needs to be used on top of a secure transport and the 'Session_Key' doesn't add any extra security.
+        //                       So, we decided to deprecate the 'Session_Key' exchange in PSRP and skip encryption and decryption for 'SecureString'
+        //                       objects. Instead, we require the transport to be secure for secure data transfer between PSRP clients and servers.
+        internal static readonly Version ProtocolVersionCurrent = new(2, 4);
         internal static readonly Version ProtocolVersion = ProtocolVersionCurrent;
         // Used by remoting commands to add remoting specific note properties.
         internal static readonly string ComputerNameNoteProperty = "PSComputerName";
@@ -124,234 +134,6 @@ internal static class RemoteDataNameStrings
         // to client to let client know if the negotiation succeeded.
         internal const string IsNegotiationSucceeded = "IsNegotiationSucceeded";
 
-        #region "PSv2 Tab Expansion Function"
-
-        internal const string PSv2TabExpansionFunction = "TabExpansion";
-
-        /// <summary>
-        /// This is the PSv2 function for tab expansion. It's only for legacy purpose - used in
-        /// an interactive remote session from a win7 machine to a win8 machine (or later).
-        /// </summary>
-        internal const string PSv2TabExpansionFunctionText = @"
-            param($line, $lastWord)
-            & {
-                function Write-Members ($sep='.')
-                {
-                    Invoke-Expression ('$_val=' + $_expression)
-
-                    $_method = [Management.Automation.PSMemberTypes] `
-                        'Method,CodeMethod,ScriptMethod,ParameterizedProperty'
-                    if ($sep -eq '.')
-                    {
-                        $params = @{view = 'extended','adapted','base'}
-                    }
-                    else
-                    {
-                        $params = @{static=$true}
-                    }
-
-                    foreach ($_m in ,$_val | Get-Member @params $_pat |
-                        Sort-Object membertype,name)
-                    {
-                        if ($_m.MemberType -band $_method)
-                        {
-                            # Return a method...
-                            $_base + $_expression + $sep + $_m.name + '('
-                        }
-                        else {
-                            # Return a property...
-                            $_base + $_expression + $sep + $_m.name
-                        }
-                    }
-                }
-
-                # If a command name contains any of these chars, it needs to be quoted
-                $_charsRequiringQuotes = ('`&@''#{}()$,;|<> ' + ""`t"").ToCharArray()
-
-                # If a variable name contains any of these characters it needs to be in braces
-                $_varsRequiringQuotes = ('-`&@''#{}()$,;|<> .\/' + ""`t"").ToCharArray()
-
-                switch -regex ($lastWord)
-                {
-                    # Handle property and method expansion rooted at variables...
-                    # e.g. $a.b.<tab>
-                    '(^.*)(\$(\w|:|\.)+)\.([*\w]*)$' {
-                        $_base = $matches[1]
-                        $_expression = $matches[2]
-                        $_pat = $matches[4] + '*'
-                        Write-Members
-                        break;
-                    }
-
-                    # Handle simple property and method expansion on static members...
-                    # e.g. [datetime]::n<tab>
-                    '(^.*)(\[(\w|\.|\+)+\])(\:\:|\.){0,1}([*\w]*)$' {
-                        $_base = $matches[1]
-                        $_expression = $matches[2]
-                        $_pat = $matches[5] + '*'
-                        Write-Members $(if (! $matches[4]) {'::'} else {$matches[4]})
-                        break;
-                    }
-
-                    # Handle complex property and method expansion on static members
-                    # where there are intermediate properties...
-                    # e.g. [datetime]::now.d<tab>
-                    '(^.*)(\[(\w|\.|\+)+\](\:\:|\.)(\w+\.)+)([*\w]*)$' {
-                        $_base = $matches[1]  # everything before the expression
-                        $_expression = $matches[2].TrimEnd('.') # expression less trailing '.'
-                        $_pat = $matches[6] + '*'  # the member to look for...
-                        Write-Members
-                        break;
-                    }
-
-                    # Handle variable name expansion...
-                    '(^.*\$)([*\w:]+)$' {
-                        $_prefix = $matches[1]
-                        $_varName = $matches[2]
-                        $_colonPos = $_varname.IndexOf(':')
-                        if ($_colonPos -eq -1)
-                        {
-                            $_varName = 'variable:' + $_varName
-                            $_provider = ''
-                        }
-                        else
-                        {
-                            $_provider = $_varname.Substring(0, $_colonPos+1)
-                        }
-
-                        foreach ($_v in Get-ChildItem ($_varName + '*') | sort Name)
-                        {
-                            $_nameFound = $_v.name
-                            $(if ($_nameFound.IndexOfAny($_varsRequiringQuotes) -eq -1) {'{0}{1}{2}'}
-                            else {'{0}{{{1}{2}}}'}) -f $_prefix, $_provider, $_nameFound
-                        }
-
-                        break;
-                    }
-
-                    # Do completion on parameters...
-                    '^-([*\w0-9]*)' {
-                        $_pat = $matches[1] + '*'
-
-                        # extract the command name from the string
-                        # first split the string into statements and pipeline elements
-                        # This doesn't handle strings however.
-                        $_command = [regex]::Split($line, '[|;=]')[-1]
-
-                        #  Extract the trailing unclosed block e.g. ls | foreach { cp
-                        if ($_command -match '\{([^\{\}]*)$')
-                        {
-                            $_command = $matches[1]
-                        }
-
-                        # Extract the longest unclosed parenthetical expression...
-                        if ($_command -match '\(([^()]*)$')
-                        {
-                            $_command = $matches[1]
-                        }
-
-                        # take the first space separated token of the remaining string
-                        # as the command to look up. Trim any leading or trailing spaces
-                        # so you don't get leading empty elements.
-                        $_command = $_command.TrimEnd('-')
-                        $_command,$_arguments = $_command.Trim().Split()
-
-                        # now get the info object for it, -ArgumentList will force aliases to be resolved
-                        # it also retrieves dynamic parameters
-                        try
-                        {
-                            $_command = @(Get-Command -type 'Alias,Cmdlet,Function,Filter,ExternalScript' `
-                                -Name $_command -ArgumentList $_arguments)[0]
-                        }
-                        catch
-                        {
-                            # see if the command is an alias. If so, resolve it to the real command
-                            if(Test-Path alias:\$_command)
-                            {
-                                $_command = @(Get-Command -Type Alias $_command)[0].Definition
-                            }
-
-                            # If we were unsuccessful retrieving the command, try again without the parameters
-                            $_command = @(Get-Command -type 'Cmdlet,Function,Filter,ExternalScript' `
-                                -Name $_command)[0]
-                        }
-
-                        # remove errors generated by the command not being found, and break
-                        if(-not $_command) { $error.RemoveAt(0); break; }
-
-                        # expand the parameter sets and emit the matching elements
-                        # need to use psbase.Keys in case 'keys' is one of the parameters
-                        # to the cmdlet
-                        foreach ($_n in $_command.Parameters.psbase.Keys)
-                        {
-                            if ($_n -like $_pat) { '-' + $_n }
-                        }
-
-                        break;
-                    }
-
-                    # Tab complete against history either #<pattern> or #<id>
-                    '^#(\w*)' {
-                        $_pattern = $matches[1]
-                        if ($_pattern -match '^[0-9]+$')
-                        {
-                            Get-History -ea SilentlyContinue -Id $_pattern | ForEach-Object { $_.CommandLine }
-                        }
-                        else
-                        {
-                            $_pattern = '*' + $_pattern + '*'
-                            Get-History -Count 32767 | Sort-Object -Descending Id| ForEach-Object { $_.CommandLine } | where { $_ -like $_pattern }
-                        }
-
-                        break;
-                    }
-
-                    # try to find a matching command...
-                    default {
-                        # parse the script...
-                        $_tokens = [System.Management.Automation.PSParser]::Tokenize($line,
-                            [ref] $null)
-
-                        if ($_tokens)
-                        {
-                            $_lastToken = $_tokens[$_tokens.count - 1]
-                            if ($_lastToken.Type -eq 'Command')
-                            {
-                                $_cmd = $_lastToken.Content
-
-                                # don't look for paths...
-                                if ($_cmd.IndexOfAny('/\:') -eq -1)
-                                {
-                                    # handle parsing errors - the last token string should be the last
-                                    # string in the line...
-                                    if ($lastword.Length -ge $_cmd.Length -and
-                                        $lastword.substring($lastword.length-$_cmd.length) -eq $_cmd)
-                                    {
-                                        $_pat = $_cmd + '*'
-                                        $_base = $lastword.substring(0, $lastword.length-$_cmd.length)
-
-                                        # get files in current directory first, then look for commands...
-                                        $( try {Resolve-Path -ea SilentlyContinue -Relative $_pat } catch {} ;
-                                           try { $ExecutionContext.InvokeCommand.GetCommandName($_pat, $true, $false) |
-                                               Sort-Object -Unique } catch {} ) |
-                                                   # If the command contains non-word characters (space, ) ] ; ) etc.)
-                                                   # then it needs to be quoted and prefixed with &
-                                                   ForEach-Object {
-                                                        if ($_.IndexOfAny($_charsRequiringQuotes) -eq -1) { $_ }
-                                                        elseif ($_.IndexOf('''') -ge 0) {'& ''{0}''' -f $_.Replace('''','''''') }
-                                                        else { '& ''{0}''' -f $_ }} |
-                                                   ForEach-Object {'{0}{1}' -f $_base,$_ }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        ";
-
-        #endregion "PSv2 Tab Expansion Function"
-
         #region Host Related Strings
 
         internal const string CallId = "ci";
@@ -1600,8 +1382,6 @@ internal static RemoteDataObject GenerateClientSessionCapability(RemoteSessionCa
                 Guid runspacePoolId)
         {
             PSObject temp = GenerateSessionCapability(capability);
-            temp.Properties.Add(
-                new PSNoteProperty(RemoteDataNameStrings.TimeZone, RemoteSessionCapability.GetCurrentTimeZoneInByteFormat()));
             return RemoteDataObject.CreateFrom(capability.RemotingDestination,
                 RemotingDataType.SessionCapability, runspacePoolId, Guid.Empty, temp);
         }
@@ -2089,7 +1869,7 @@ internal static object GetPowerShellOutput(object data)
         /// <returns>PSInvocationInfo.</returns>
         internal static PSInvocationStateInfo GetPowerShellStateInfo(object data)
         {
-            if (!(data is PSObject dataAsPSObject))
+            if (data is not PSObject dataAsPSObject)
             {
                 throw new PSRemotingDataStructureException(
                     RemotingErrorIdStrings.DecodingErrorForPowerShellStateInfo);
@@ -2357,7 +2137,7 @@ internal static RemoteStreamOptions GetRemoteStreamOptions(object data)
         /// <returns>RemoteSessionCapability object.</returns>
         internal static RemoteSessionCapability GetSessionCapability(object data)
         {
-            if (!(data is PSObject dataAsPSObject))
+            if (data is not PSObject dataAsPSObject)
             {
                 throw new PSRemotingDataStructureException(
                     RemotingErrorIdStrings.CantCastRemotingDataToPSObject, data.GetType().FullName);
@@ -2372,24 +2152,6 @@ internal static RemoteSessionCapability GetSessionCapability(object data)
                 RemotingDestination.InvalidDestination,
                 protocolVersion, psVersion, serializationVersion);
 
-            if (dataAsPSObject.Properties[RemoteDataNameStrings.TimeZone] != null)
-            {
-                // Binary deserialization of timezone info via BinaryFormatter is unsafe,
-                // so don't deserialize any untrusted client data using this API.
-                //
-                // In addition, the binary data being sent by the client doesn't represent
-                // the client's current TimeZone unless they somehow accessed the
-                // StandardName and DaylightName. These properties are initialized lazily
-                // by the .NET Framework, and would be populated by the server with local
-                // values anyways.
-                //
-                // So just return the CurrentTimeZone.
-
-#if !CORECLR // TimeZone Not In CoreCLR
-                result.TimeZone = TimeZone.CurrentTimeZone;
-#endif
-            }
-
             return result;
         }
 
@@ -2405,7 +2167,7 @@ internal static bool ServerSupportsBatchInvocation(Runspace runspace)
                 return false;
             }
 
-            return (runspace.GetRemoteProtocolVersion() >= RemotingConstants.ProtocolVersionWin8RTM);
+            return (runspace.GetRemoteProtocolVersion() >= RemotingConstants.ProtocolVersion_2_2);
         }
     }
 }
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs
index ee993615029..2c670b1eaaa 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteDebuggingCapability.cs
@@ -13,7 +13,7 @@ namespace System.Management.Automation.Remoting
     /// version on the server. These capabilities will be used in remote debugging sessions to
     /// determine what is supported by the server.
     /// </summary>
-    internal class RemoteDebuggingCapability
+    internal sealed class RemoteDebuggingCapability
     {
         private readonly HashSet<string> _supportedCommands = new HashSet<string>();
 
@@ -43,14 +43,14 @@ private RemoteDebuggingCapability(Version powerShellVersion)
             }
 
             // Commands added in v5
-            if (PSVersion.Major >= PSVersionInfo.PSV5Version.Major)
+            if (PSVersion.Major >= 5)
             {
                 _supportedCommands.Add(RemoteDebuggingCommands.SetDebuggerStepMode);
                 _supportedCommands.Add(RemoteDebuggingCommands.SetUnhandledBreakpointMode);
             }
 
             // Commands added in v7
-            if (PSVersion.Major >= PSVersionInfo.PSV7Version.Major)
+            if (PSVersion.Major >= 7)
             {
                 _supportedCommands.Add(RemoteDebuggingCommands.GetBreakpoint);
                 _supportedCommands.Add(RemoteDebuggingCommands.SetBreakpoint);
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHost.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHost.cs
index c29be13487b..79b920c22b5 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHost.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHost.cs
@@ -188,10 +188,7 @@ internal void ExecuteVoidMethod(PSHost clientHost)
             }
             finally
             {
-                if (remoteRunspaceToClose != null)
-                {
-                    remoteRunspaceToClose.Close();
-                }
+                remoteRunspaceToClose?.Close();
             }
         }
 
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHostEncoder.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHostEncoder.cs
index 3ffc278a817..cdaceda1610 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHostEncoder.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteHostEncoder.cs
@@ -7,6 +7,7 @@
 using System.Globalization;
 using System.Management.Automation.Host;
 using System.Reflection;
+using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
 using System.Security;
 
@@ -87,7 +88,7 @@ private static PSObject EncodeClassOrStruct(object obj)
         /// </summary>
         private static object DecodeClassOrStruct(PSObject psObject, Type type)
         {
-            object obj = FormatterServices.GetUninitializedObject(type);
+            object obj = RuntimeHelpers.GetUninitializedObject(type);
 
             // Field values cannot be null - because for null fields we simply don't transport them.
             foreach (PSPropertyInfo propertyInfo in psObject.Properties)
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs
index 0cddf7d8524..add424b8703 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemoteSessionCapability.cs
@@ -5,7 +5,6 @@
 using System.IO;
 using System.Management.Automation.Host;
 using System.Management.Automation.Internal.Host;
-using System.Runtime.Serialization.Formatters.Binary;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -25,8 +24,6 @@ internal class RemoteSessionCapability
         private readonly Version _serversion;
         private Version _protocolVersion;
         private readonly RemotingDestination _remotingDestination;
-        private static byte[] _timeZoneInByteFormat;
-        private TimeZoneInfo _timeZone;
 
         #endregion
 
@@ -91,64 +88,6 @@ internal static RemoteSessionCapability CreateServerCapability()
         {
             return new RemoteSessionCapability(RemotingDestination.Client);
         }
-
-        /// <summary>
-        /// This is static property which gets Current TimeZone in byte format
-        /// by using ByteFormatter.
-        /// This is static to make client generate this only once.
-        /// </summary>
-        internal static byte[] GetCurrentTimeZoneInByteFormat()
-        {
-            if (_timeZoneInByteFormat == null)
-            {
-                Exception e = null;
-                try
-                {
-                    BinaryFormatter formatter = new BinaryFormatter();
-                    using (MemoryStream stream = new MemoryStream())
-                    {
-#pragma warning disable SYSLIB0011
-                        formatter.Serialize(stream, TimeZoneInfo.Local);
-#pragma warning restore SYSLIB0011
-                        stream.Seek(0, SeekOrigin.Begin);
-                        byte[] result = new byte[stream.Length];
-                        stream.Read(result, 0, (int)stream.Length);
-                        _timeZoneInByteFormat = result;
-                    }
-                }
-                catch (ArgumentNullException ane)
-                {
-                    e = ane;
-                }
-                catch (System.Runtime.Serialization.SerializationException sre)
-                {
-                    e = sre;
-                }
-                catch (System.Security.SecurityException se)
-                {
-                    e = se;
-                }
-
-                // if there is any exception serializing the timezone information
-                // ignore it and dont try to serialize again.
-                if (e != null)
-                {
-                    _timeZoneInByteFormat = Array.Empty<byte>();
-                }
-            }
-
-            return _timeZoneInByteFormat;
-        }
-
-        /// <summary>
-        /// Gets the TimeZone of the destination machine. This may be null.
-        /// </summary>
-        internal TimeZoneInfo TimeZone
-        {
-            get { return _timeZone; }
-
-            set { _timeZone = value; }
-        }
     }
 
     /// <summary>
@@ -171,7 +110,7 @@ internal enum HostDefaultDataId
     /// <summary>
     /// The HostDefaultData class.
     /// </summary>
-    internal class HostDefaultData
+    internal sealed class HostDefaultData
     {
         /// <summary>
         /// Data.
@@ -448,12 +387,18 @@ private static void CheckHostChain(PSHost host, ref bool isHostNull, ref bool is
             isHostNull = false;
 
             // Verify that the UI is not null.
-            if (host.UI == null) { return; }
+            if (host.UI == null)
+            {
+                return;
+            }
 
             isHostUINull = false;
 
             // Verify that the raw UI is not null.
-            if (host.UI.RawUI == null) { return; }
+            if (host.UI.RawUI == null)
+            {
+                return;
+            }
 
             isHostRawUINull = false;
         }
diff --git a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs
index 0fed6cc759d..14cad7613b8 100644
--- a/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs
+++ b/src/System.Management.Automation/engine/remoting/common/WireDataFormat/RemotingDataObject.cs
@@ -7,11 +7,11 @@
 
 namespace System.Management.Automation.Remoting
 {
-    ///<summary>
+    /// <summary>
     /// This is the object used by Runspace,pipeline,host to send data
     /// to remote end. Transport layer owns breaking this into fragments
     /// and sending to other end
-    ///</summary>
+    /// </summary>
     internal class RemoteDataObject<T>
     {
         #region Private Members
@@ -267,7 +267,7 @@ private static Guid DeserializeGuid(Stream serializedDataStream)
         #endregion
     }
 
-    internal class RemoteDataObject : RemoteDataObject<object>
+    internal sealed class RemoteDataObject : RemoteDataObject<object>
     {
         #region Constructors / Factory
 
diff --git a/src/System.Management.Automation/engine/remoting/common/fragmentor.cs b/src/System.Management.Automation/engine/remoting/common/fragmentor.cs
index 8517fb059f5..c451ba32f45 100644
--- a/src/System.Management.Automation/engine/remoting/common/fragmentor.cs
+++ b/src/System.Management.Automation/engine/remoting/common/fragmentor.cs
@@ -432,7 +432,7 @@ internal static int GetBlobLength(byte[] fragmentBytes, int startIndex)
     /// </summary>
     internal class SerializedDataStream : Stream, IDisposable
     {
-        [TraceSourceAttribute("SerializedDataStream", "SerializedDataStream")]
+        [TraceSource("SerializedDataStream", "SerializedDataStream")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("SerializedDataStream", "SerializedDataStream");
         #region Global Constants
 
@@ -757,11 +757,11 @@ private void WriteCurrentFragmentAndReset()
             PSEtwLog.LogAnalyticVerbose(
                 PSEventId.SentRemotingFragment, PSOpcode.Send, PSTask.None,
                 PSKeyword.Transport | PSKeyword.UseAlwaysAnalytic,
-                (Int64)(_currentFragment.ObjectId),
-                (Int64)(_currentFragment.FragmentId),
+                (long)(_currentFragment.ObjectId),
+                (long)(_currentFragment.FragmentId),
                 _currentFragment.IsStartFragment ? 1 : 0,
                 _currentFragment.IsEndFragment ? 1 : 0,
-                (UInt32)(_currentFragment.BlobLength),
+                (uint)(_currentFragment.BlobLength),
                 new PSETWBinaryBlob(_currentFragment.Blob, 0, _currentFragment.BlobLength));
 
             // finally write into memory stream
diff --git a/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs b/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs
index 4e755893886..f97b2b21d1f 100644
--- a/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs
+++ b/src/System.Management.Automation/engine/remoting/common/psstreamobject.cs
@@ -120,10 +120,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                             ErrorRecord errorRecord = (ErrorRecord)this.Value;
                             errorRecord.PreserveInvocationInfoOnce = true;
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteError(errorRecord, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteError(errorRecord, overrideInquire);
                         }
 
                         break;
@@ -133,10 +130,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                             string debug = (string)Value;
                             DebugRecord debugRecord = new DebugRecord(debug);
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteDebug(debugRecord, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteDebug(debugRecord, overrideInquire);
                         }
 
                         break;
@@ -146,10 +140,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                             string warning = (string)Value;
                             WarningRecord warningRecord = new WarningRecord(warning);
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteWarning(warningRecord, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteWarning(warningRecord, overrideInquire);
                         }
 
                         break;
@@ -159,10 +150,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                             string verbose = (string)Value;
                             VerboseRecord verboseRecord = new VerboseRecord(verbose);
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteVerbose(verboseRecord, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteVerbose(verboseRecord, overrideInquire);
                         }
 
                         break;
@@ -170,10 +158,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                     case PSStreamObjectType.Progress:
                         {
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteProgress((ProgressRecord)Value, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteProgress((ProgressRecord)Value, overrideInquire);
                         }
 
                         break;
@@ -181,10 +166,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                     case PSStreamObjectType.Information:
                         {
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.WriteInformation((InformationRecord)Value, overrideInquire);
-                            }
+                            mshCommandRuntime?.WriteInformation((InformationRecord)Value, overrideInquire);
                         }
 
                         break;
@@ -193,10 +175,7 @@ public void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false)
                         {
                             WarningRecord warningRecord = (WarningRecord)Value;
                             MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                            if (mshCommandRuntime != null)
-                            {
-                                mshCommandRuntime.AppendWarningVarList(warningRecord);
-                            }
+                            mshCommandRuntime?.AppendWarningVarList(warningRecord);
                         }
 
                         break;
@@ -246,13 +225,22 @@ private static void GetIdentifierInfo(string message, out Guid jobInstanceId, ou
             jobInstanceId = Guid.Empty;
             computerName = string.Empty;
 
-            if (message == null) return;
-            string[] parts = message.Split(Utils.Separators.Colon, 3);
+            if (message == null)
+            {
+                return;
+            }
+
+            string[] parts = message.Split(':', 3);
 
-            if (parts.Length != 3) return;
+            if (parts.Length != 3)
+            {
+                return;
+            }
 
             if (!Guid.TryParse(parts[0], out jobInstanceId))
+            {
                 jobInstanceId = Guid.Empty;
+            }
 
             computerName = parts[1];
         }
@@ -311,10 +299,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
 
                         errorRecord.PreserveInvocationInfoOnce = true;
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteError(errorRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteError(errorRecord, overrideInquire);
                     }
 
                     break;
@@ -324,10 +309,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
                         string warning = (string)Value;
                         WarningRecord warningRecord = new WarningRecord(warning);
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteWarning(warningRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteWarning(warningRecord, overrideInquire);
                     }
 
                     break;
@@ -337,10 +319,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
                         string verbose = (string)Value;
                         VerboseRecord verboseRecord = new VerboseRecord(verbose);
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteVerbose(verboseRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteVerbose(verboseRecord, overrideInquire);
                     }
 
                     break;
@@ -365,10 +344,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
                         }
 
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteProgress(progressRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteProgress(progressRecord, overrideInquire);
                     }
 
                     break;
@@ -378,10 +354,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
                         string debug = (string)Value;
                         DebugRecord debugRecord = new DebugRecord(debug);
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteDebug(debugRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteDebug(debugRecord, overrideInquire);
                     }
 
                     break;
@@ -411,10 +384,7 @@ internal void WriteStreamObject(Cmdlet cmdlet, Guid instanceId, bool overrideInq
                         }
 
                         MshCommandRuntime mshCommandRuntime = cmdlet.CommandRuntime as MshCommandRuntime;
-                        if (mshCommandRuntime != null)
-                        {
-                            mshCommandRuntime.WriteInformation(informationRecord, overrideInquire);
-                        }
+                        mshCommandRuntime?.WriteInformation(informationRecord, overrideInquire);
                     }
 
                     break;
@@ -470,10 +440,7 @@ private static void InvokeCmdletMethodAndWaitForResults<T>(CmdletMethodInvoker<T
             }
             finally
             {
-                if (cmdletMethodInvoker.Finished != null)
-                {
-                    cmdletMethodInvoker.Finished.Set();
-                }
+                cmdletMethodInvoker.Finished?.Set();
             }
         }
 
@@ -493,14 +460,20 @@ internal static string CreateInformationalMessage(Guid instanceId, string messag
             var newMessage = new StringBuilder(instanceId.ToString());
             newMessage.Append(':');
             newMessage.Append(message);
+
             return newMessage.ToString();
         }
 
         internal static ErrorRecord AddSourceTagToError(ErrorRecord errorRecord, Guid sourceId)
         {
-            if (errorRecord == null) return null;
-            if (errorRecord.ErrorDetails == null) errorRecord.ErrorDetails = new ErrorDetails(string.Empty);
+            if (errorRecord == null)
+            {
+                return null;
+            }
+
+            errorRecord.ErrorDetails ??= new ErrorDetails(string.Empty);
             errorRecord.ErrorDetails.RecommendedAction = CreateInformationalMessage(sourceId, errorRecord.ErrorDetails.RecommendedAction);
+
             return errorRecord;
         }
     }
diff --git a/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs b/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs
index 9e92c045896..8830bb32152 100644
--- a/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs
+++ b/src/System.Management.Automation/engine/remoting/common/remotingexceptions.cs
@@ -18,6 +18,7 @@ internal enum PSRemotingErrorId : uint
         // OS related 1-9
         DefaultRemotingExceptionMessage = 0,
         OutOfMemory = 1,
+        UnsupportedOSForRemoteEnumeration = 2,
 
         // Pipeline related range: 10-99
         PipelineIdsDoNotMatch = 10,
@@ -266,7 +267,7 @@ internal static class PSRemotingErrorInvariants
         /// This parameter holds the string in the resource file.
         /// </param>
         /// <param name="args">
-        /// Optional parameters required by the resource string formating information.
+        /// Optional parameters required by the resource string formatting information.
         /// </param>
         /// <returns>
         /// The formatted localized string.
@@ -282,7 +283,6 @@ internal static string FormatResourceString(string resourceString, params object
     /// <summary>
     /// This exception is used by remoting code to indicated a data structure handler related error.
     /// </summary>
-    [Serializable]
     public class PSRemotingDataStructureException : RuntimeException
     {
         #region Constructors
@@ -297,7 +297,7 @@ public PSRemotingDataStructureException()
         }
 
         /// <summary>
-        /// This constuctor takes a localized string as the error message.
+        /// This constructor takes a localized string as the error message.
         /// </summary>
         /// <param name="message">
         /// A localized string as an error message.
@@ -309,7 +309,7 @@ public PSRemotingDataStructureException(string message)
         }
 
         /// <summary>
-        /// This constuctor takes a localized string as the error message, and an inner exception.
+        /// This constructor takes a localized string as the error message, and an inner exception.
         /// </summary>
         /// <param name="message">
         /// A localized string as an error message.
@@ -339,7 +339,7 @@ internal PSRemotingDataStructureException(string resourceString, params object[]
         }
 
         /// <summary>
-        /// This constuctor takes an inner exception and an error id.
+        /// This constructor takes an inner exception and an error id.
         /// </summary>
         /// <param name="innerException">
         /// Inner exception.
@@ -361,9 +361,10 @@ internal PSRemotingDataStructureException(Exception innerException, string resou
         /// </summary>
         /// <param name="info"></param>
         /// <param name="context"></param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PSRemotingDataStructureException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
+            throw new NotSupportedException();
         }
 
         #endregion Constructors
@@ -381,7 +382,6 @@ private void SetDefaultErrorRecord()
     /// <summary>
     /// This exception is used by remoting code to indicate an error condition in network operations.
     /// </summary>
-    [Serializable]
     public class PSRemotingTransportException : RuntimeException
     {
         private int _errorCode;
@@ -445,7 +445,7 @@ internal PSRemotingTransportException(PSRemotingErrorId errorId, string resource
         }
 
         /// <summary>
-        /// This constuctor takes an inner exception and an error id.
+        /// This constructor takes an inner exception and an error id.
         /// </summary>
         /// <param name="innerException">
         /// Inner exception.
@@ -470,38 +470,14 @@ internal PSRemotingTransportException(Exception innerException, string resourceS
         /// <exception cref="ArgumentNullException">
         /// 1. info is null.
         /// </exception>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PSRemotingTransportException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            _errorCode = info.GetInt32("ErrorCode");
-            _transportMessage = info.GetString("TransportMessage");
+            throw new NotSupportedException();
         }
 
         #endregion Constructors
 
-        /// <summary>
-        /// Serializes the exception data.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            // If there are simple fields, serialize them with info.AddValue
-            info.AddValue("ErrorCode", _errorCode);
-            info.AddValue("TransportMessage", _transportMessage);
-        }
-
         /// <summary>
         /// Set the default ErrorRecord.
         /// </summary>
@@ -548,7 +524,6 @@ public string TransportMessage
     /// This exception is used by PowerShell's remoting infrastructure to notify a URI redirection
     /// exception.
     /// </summary>
-    [Serializable]
     public class PSRemotingTransportRedirectException : PSRemotingTransportException
     {
         #region Constructor
@@ -588,7 +563,7 @@ public PSRemotingTransportRedirectException(string message, Exception innerExcep
         }
 
         /// <summary>
-        /// This constuctor takes an inner exception and an error id.
+        /// This constructor takes an inner exception and an error id.
         /// </summary>
         /// <param name="innerException">
         /// Inner exception.
@@ -612,15 +587,10 @@ internal PSRemotingTransportRedirectException(Exception innerException, string r
         /// <exception cref="ArgumentNullException">
         /// 1. info is null.
         /// </exception>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected PSRemotingTransportRedirectException(SerializationInfo info, StreamingContext context)
-            : base(info, context)
         {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            RedirectLocation = info.GetString("RedirectLocation");
+            throw new NotSupportedException();
         }
 
         /// <summary>
@@ -646,27 +616,6 @@ internal PSRemotingTransportRedirectException(string redirectLocation, PSRemotin
 
         #endregion
 
-        #region Public overrides
-
-        /// <summary>
-        /// Serializes the exception data.
-        /// </summary>
-        /// <param name="info">Serialization information.</param>
-        /// <param name="context">Streaming context.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new PSArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-            // If there are simple fields, serialize them with info.AddValue
-            info.AddValue("RedirectLocation", RedirectLocation);
-        }
-
-        #endregion
-
         #region Properties
         /// <summary>
         /// String specifying a redirect location.
@@ -679,13 +628,12 @@ public override void GetObjectData(SerializationInfo info, StreamingContext cont
     /// <summary>
     /// This exception is used by PowerShell Direct errors.
     /// </summary>
-    [Serializable]
     public class PSDirectException : RuntimeException
     {
         #region Constructor
 
         /// <summary>
-        /// This constuctor takes a localized string as the error message.
+        /// This constructor takes a localized string as the error message.
         /// </summary>
         /// <param name="message">
         /// A localized string as an error message.
diff --git a/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs b/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs
index afccc28362a..7d4a88e98bd 100644
--- a/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs
+++ b/src/System.Management.Automation/engine/remoting/common/throttlemanager.cs
@@ -117,7 +117,7 @@ internal abstract class IThrottleOperation
         /// need not be called on the operation (this can be when the
         /// operation has stop completed or stop has been called and is
         /// pending)
-        ///</remarks>
+        /// </remarks>
         internal bool IgnoreStop
         {
             get
@@ -532,10 +532,7 @@ private void StartOneOperationFromQueue()
                 }
             }
 
-            if (operation != null)
-            {
-                operation.StartOperation();
-            }
+            operation?.StartOperation();
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs
index 5d12914074c..c3cf3b278aa 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/BaseTransportManager.cs
@@ -33,27 +33,81 @@ namespace System.Management.Automation.Remoting
 {
     #region TransportErrorOccuredEventArgs
 
-    internal enum TransportMethodEnum
+    /// <summary>
+    /// Transport method for error reporting.
+    /// </summary>
+    public enum TransportMethodEnum
     {
+        /// <summary>
+        /// CreateShellEx
+        /// </summary>
         CreateShellEx = 0,
+
+        /// <summary>
+        /// RunShellCommandEx
+        /// </summary>
         RunShellCommandEx = 1,
+
+        /// <summary>
+        /// SendShellInputEx
+        /// </summary>
         SendShellInputEx = 2,
+
+        /// <summary>
+        /// ReceiveShellOutputEx
+        /// </summary>
         ReceiveShellOutputEx = 3,
+
+        /// <summary>
+        /// CloseShellOperationEx
+        /// </summary>
         CloseShellOperationEx = 4,
+
+        /// <summary>
+        /// CommandInputEx
+        /// </summary>
         CommandInputEx = 5,
+
+        /// <summary>
+        /// ReceiveCommandOutputEx
+        /// </summary>
         ReceiveCommandOutputEx = 6,
+
+        /// <summary>
+        /// DisconnectShellEx
+        /// </summary>
         DisconnectShellEx = 7,
+
+        /// <summary>
+        /// ReconnectShellEx
+        /// </summary>
         ReconnectShellEx = 8,
+        
+        /// <summary>
+        /// ConnectShellEx
+        /// </summary>
         ConnectShellEx = 9,
+
+        /// <summary>
+        /// ReconnectShellCommandEx
+        /// </summary>
         ReconnectShellCommandEx = 10,
+
+        /// <summary>
+        /// ConnectShellCommandEx
+        /// </summary>
         ConnectShellCommandEx = 11,
+
+        /// <summary>
+        /// Unknown
+        /// </summary>
         Unknown = 12,
     }
 
     /// <summary>
-    /// Event arguments passed to TransportErrorOccured handlers.
+    /// Event arguments passed to TransportErrorOccurred handlers.
     /// </summary>
-    internal class TransportErrorOccuredEventArgs : EventArgs
+    public sealed class TransportErrorOccuredEventArgs : EventArgs
     {
         /// <summary>
         /// Constructor.
@@ -62,9 +116,10 @@ internal class TransportErrorOccuredEventArgs : EventArgs
         /// Error occurred.
         /// </param>
         /// <param name="m">
-        /// The transport method that raised the error
+        /// The transport method that raised the error.
         /// </param>
-        internal TransportErrorOccuredEventArgs(PSRemotingTransportException e,
+        public TransportErrorOccuredEventArgs(
+            PSRemotingTransportException e,
             TransportMethodEnum m)
         {
             Exception = e;
@@ -136,11 +191,11 @@ internal CreateCompleteEventArgs(
     /// Contains implementation that is common to both client and server
     /// transport managers.
     /// </summary>
-    internal abstract class BaseTransportManager : IDisposable
+    public abstract class BaseTransportManager : IDisposable
     {
         #region tracer
 
-        [TraceSourceAttribute("Transport", "Traces BaseWSManTransportManager")]
+        [TraceSource("Transport", "Traces BaseWSManTransportManager")]
         private static readonly PSTraceSource s_baseTracer = PSTraceSource.GetTracer("Transport", "Traces BaseWSManTransportManager");
 
         #endregion
@@ -158,7 +213,7 @@ internal abstract class BaseTransportManager : IDisposable
 
         // This value instructs the server to use whatever setting it has for idle timeout.
         internal const int UseServerDefaultIdleTimeout = -1;
-        internal const uint UseServerDefaultIdleTimeoutUInt = UInt32.MaxValue;
+        internal const uint UseServerDefaultIdleTimeoutUInt = uint.MaxValue;
 
         // Minimum allowed idle timeout time is 60 seconds.
         internal const int MinimumIdleTimeout = 60 * 1000;
@@ -206,7 +261,7 @@ internal abstract class BaseTransportManager : IDisposable
 
         #region Constructor
 
-        protected BaseTransportManager(PSRemotingCryptoHelper cryptoHelper)
+        internal BaseTransportManager(PSRemotingCryptoHelper cryptoHelper)
         {
             CryptoHelper = cryptoHelper;
             // create a common fragmentor used by this transport manager to send and receive data.
@@ -308,8 +363,9 @@ internal void ProcessRawData(byte[] data,
             if (!shouldProcess)
             {
                 // we dont support this stream..so ignore the data
-                Dbg.Assert(false,
-                    string.Format(CultureInfo.InvariantCulture, "Data should be from one of the streams : {0} or {1} or {2}",
+                Dbg.Assert(false, string.Format(
+                    CultureInfo.InvariantCulture,
+                    "Data should be from one of the streams : {0} or {1} or {2}",
                     WSManNativeApi.WSMAN_STREAM_ID_STDIN,
                     WSManNativeApi.WSMAN_STREAM_ID_STDOUT,
                     WSManNativeApi.WSMAN_STREAM_ID_PROMPTRESPONSE));
@@ -334,9 +390,9 @@ internal void OnDataAvailableCallback(RemoteDataObject<PSObject> remoteObject)
                                                   PSKeyword.Transport | PSKeyword.UseAlwaysAnalytic,
                                                   remoteObject.RunspacePoolId.ToString(),
                                                   remoteObject.PowerShellId.ToString(),
-                                                  (UInt32)(remoteObject.Destination),
-                                                  (UInt32)(remoteObject.DataType),
-                                                  (UInt32)(remoteObject.TargetInterface));
+                                                  (uint)(remoteObject.Destination),
+                                                  (uint)(remoteObject.DataType),
+                                                  (uint)(remoteObject.TargetInterface));
 
             // This might throw exceptions which the caller handles.
             PowerShellGuidObserver.SafeInvoke(remoteObject.PowerShellId, EventArgs.Empty);
@@ -361,7 +417,7 @@ public void MigrateDataReadyEventHandlers(BaseTransportManager transportManager)
         /// Raise the error handlers.
         /// </summary>
         /// <param name="eventArgs"></param>
-        internal virtual void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
+        public virtual void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
         {
             WSManTransportErrorOccured.SafeInvoke(this, eventArgs);
         }
@@ -393,7 +449,10 @@ public void Dispose()
             System.GC.SuppressFinalize(this);
         }
 
-        internal virtual void Dispose(bool isDisposing)
+        /// <summary>
+        /// Dispose resources.
+        /// </summary>
+        protected virtual void Dispose(bool isDisposing)
         {
             if (isDisposing)
             {
@@ -407,18 +466,21 @@ internal virtual void Dispose(bool isDisposing)
 
 namespace System.Management.Automation.Remoting.Client
 {
-    internal abstract class BaseClientTransportManager : BaseTransportManager, IDisposable
+    /// <summary>
+    /// Remoting base client transport manager.
+    /// </summary>
+    public abstract class BaseClientTransportManager : BaseTransportManager, IDisposable
     {
         #region Tracer
-        [TraceSourceAttribute("ClientTransport", "Traces ClientTransportManager")]
-        protected static PSTraceSource tracer = PSTraceSource.GetTracer("ClientTransport", "Traces ClientTransportManager");
+        [TraceSource("ClientTransport", "Traces ClientTransportManager")]
+        internal static PSTraceSource tracer = PSTraceSource.GetTracer("ClientTransport", "Traces ClientTransportManager");
         #endregion
 
         #region Data
 
-        protected bool isClosed;
-        protected object syncObject = new object();
-        protected PrioritySendDataCollection dataToBeSent;
+        internal bool isClosed;
+        internal object syncObject = new object();
+        internal PrioritySendDataCollection dataToBeSent;
         // used to handle callbacks from the server..these are used to synchronize received callbacks
         private readonly Queue<CallbackNotificationInformation> _callbackNotificationQueue;
         private readonly ReceiveDataCollection.OnDataAvailableCallback _onDataAvailableCallback;
@@ -429,13 +491,13 @@ internal abstract class BaseClientTransportManager : BaseTransportManager, IDisp
         // this is used log crimson messages.
 
         // keeps track of whether a receive request has been placed on transport
-        protected bool receiveDataInitiated;
+        internal bool receiveDataInitiated;
 
         #endregion
 
         #region Constructors
 
-        protected BaseClientTransportManager(Guid runspaceId, PSRemotingCryptoHelper cryptoHelper)
+        internal BaseClientTransportManager(Guid runspaceId, PSRemotingCryptoHelper cryptoHelper)
             : base(cryptoHelper)
         {
             RunspacePoolInstanceId = runspaceId;
@@ -933,14 +995,17 @@ internal class CallbackNotificationInformation
 
         #region Abstract / Virtual methods
 
-        internal abstract void CreateAsync();
+        /// <summary>
+        /// Create the transport manager and initiate connection.
+        /// </summary>
+        public abstract void CreateAsync();
 
         internal abstract void ConnectAsync();
 
         /// <summary>
         /// The caller should make sure the call is synchronized.
         /// </summary>
-        internal virtual void CloseAsync()
+        public virtual void CloseAsync()
         {
             // Clear the send collection
             dataToBeSent.Clear();
@@ -998,7 +1063,10 @@ internal virtual void PrepareForConnect()
             }
         }
 
-        internal override void Dispose(bool isDisposing)
+        /// <summary>
+        /// Dispose resources.
+        /// </summary>
+        protected override void Dispose(bool isDisposing)
         {
             // clear event handlers
             this.CreateCompleted = null;
@@ -1014,11 +1082,14 @@ internal override void Dispose(bool isDisposing)
         #endregion
     }
 
-    internal abstract class BaseClientSessionTransportManager : BaseClientTransportManager, IDisposable
+    /// <summary>
+    /// Remoting base client session transport manager.
+    /// </summary>
+    public abstract class BaseClientSessionTransportManager : BaseClientTransportManager, IDisposable
     {
         #region Constructors
 
-        protected BaseClientSessionTransportManager(Guid runspaceId, PSRemotingCryptoHelper cryptoHelper)
+        internal BaseClientSessionTransportManager(Guid runspaceId, PSRemotingCryptoHelper cryptoHelper)
             : base(runspaceId, cryptoHelper)
         {
         }
@@ -1167,7 +1238,7 @@ internal void RaiseSignalCompleted()
 
         #region Overrides
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
 
@@ -1289,10 +1360,7 @@ internal void SendDataToClient<T>(RemoteDataObject<T> data, bool flush, bool rep
                                                                             data.Data);
                 if (_isSerializing)
                 {
-                    if (_dataToBeSentQueue == null)
-                    {
-                        _dataToBeSentQueue = new Queue<Tuple<RemoteDataObject, bool, bool>>();
-                    }
+                    _dataToBeSentQueue ??= new Queue<Tuple<RemoteDataObject, bool, bool>>();
 
                     _dataToBeSentQueue.Enqueue(new Tuple<RemoteDataObject, bool, bool>(dataToBeSent, flush, reportPending));
                     return;
@@ -1346,8 +1414,8 @@ private void OnDataAvailable(byte[] dataToSend, bool isEndFragment)
                 _runspacePoolInstanceId.ToString(),
                 _powerShellInstanceId.ToString(),
                 dataToSend.Length.ToString(CultureInfo.InvariantCulture),
-                (UInt32)_dataType,
-                (UInt32)_targetInterface);
+                (uint)_dataType,
+                (uint)_targetInterface);
 
             SendDataToClient(dataToSend, isEndFragment && _shouldFlushData, _reportAsPending, isEndFragment);
         }
diff --git a/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs b/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs
index 6cde06cea36..07e17e8b63a 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/InitialSessionStateProvider.cs
@@ -22,6 +22,8 @@
 
 namespace System.Management.Automation.Remoting
 {
+    #region WSMan endpoint configuration
+
     /// <summary>
     /// This struct is used to represent contents from configuration xml. The
     /// XML is passed to plugins by WSMan API.
@@ -56,6 +58,8 @@ internal class ConfigurationDataFromXML
 
         #endregion
 
+        #region Fields
+
         internal string StartupScript;
         // this field is used only by an Out-Of-Process (IPC) server process
         internal string InitializationScriptForOutOfProcessRunspace;
@@ -71,6 +75,10 @@ internal class ConfigurationDataFromXML
         internal PSSessionConfigurationData SessionConfigurationData;
         internal string ConfigFilePath;
 
+        #endregion
+
+        #region Methods
+
         /// <summary>
         /// Using optionName and optionValue updates the current object.
         /// </summary>
@@ -278,15 +286,9 @@ internal static ConfigurationDataFromXML Create(string initializationParameters)
             }
 
             // assign defaults after parsing the xml content.
-            if (result.MaxReceivedObjectSizeMB == null)
-            {
-                result.MaxReceivedObjectSizeMB = BaseTransportManager.MaximumReceivedObjectSize;
-            }
+            result.MaxReceivedObjectSizeMB ??= BaseTransportManager.MaximumReceivedObjectSize;
 
-            if (result.MaxReceivedCommandSizeMB == null)
-            {
-                result.MaxReceivedCommandSizeMB = BaseTransportManager.MaximumReceivedDataSize;
-            }
+            result.MaxReceivedCommandSizeMB ??= BaseTransportManager.MaximumReceivedDataSize;
 
             return result;
         }
@@ -324,6 +326,8 @@ internal PSSessionConfiguration CreateEndPointConfigurationInstance()
             throw PSTraceSource.NewArgumentException("typeToLoad", RemotingErrorIdStrings.UnableToLoadType,
                     EndPointConfigurationTypeName, ConfigurationDataFromXML.INITPARAMETERSTOKEN);
         }
+
+        #endregion
     }
 
     /// <summary>
@@ -336,7 +340,7 @@ public abstract class PSSessionConfiguration : IDisposable
         /// <summary>
         /// Tracer for Server Remote session.
         /// </summary>
-        [TraceSourceAttribute("ServerRemoteSession", "ServerRemoteSession")]
+        [TraceSource("ServerRemoteSession", "ServerRemoteSession")]
         private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("ServerRemoteSession", "ServerRemoteSession");
         #endregion tracer
 
@@ -450,7 +454,8 @@ protected virtual void Dispose(bool isDisposing)
                     ...
                   </InitializationParameters>
          */
-        internal static ConfigurationDataFromXML LoadEndPointConfiguration(string shellId,
+        internal static ConfigurationDataFromXML LoadEndPointConfiguration(
+            string shellId,
             string initializationParameters)
         {
             ConfigurationDataFromXML configData = null;
@@ -798,6 +803,8 @@ private static string
     /// </summary>
     internal sealed class DefaultRemotePowerShellConfiguration : PSSessionConfiguration
     {
+        #region Method overrides
+
         /// <summary>
         /// </summary>
         /// <param name="senderInfo"></param>
@@ -805,22 +812,23 @@ internal sealed class DefaultRemotePowerShellConfiguration : PSSessionConfigurat
         public override InitialSessionState GetInitialSessionState(PSSenderInfo senderInfo)
         {
             InitialSessionState result = InitialSessionState.CreateDefault2();
+
             // TODO: Remove this after RDS moved to $using
-            if (senderInfo.ConnectionString != null && senderInfo.ConnectionString.Contains("MSP=7a83d074-bb86-4e52-aa3e-6cc73cc066c8")) { PSSessionConfigurationData.IsServerManager = true; }
+            if (senderInfo.ConnectionString != null && senderInfo.ConnectionString.Contains("MSP=7a83d074-bb86-4e52-aa3e-6cc73cc066c8"))
+            {
+                PSSessionConfigurationData.IsServerManager = true;
+            }
 
             return result;
         }
 
         public override InitialSessionState GetInitialSessionState(PSSessionConfigurationData sessionConfigurationData, PSSenderInfo senderInfo, string configProviderId)
         {
-            if (sessionConfigurationData == null)
-                throw new ArgumentNullException(nameof(sessionConfigurationData));
+            ArgumentNullException.ThrowIfNull(sessionConfigurationData);
 
-            if (senderInfo == null)
-                throw new ArgumentNullException(nameof(senderInfo));
+            ArgumentNullException.ThrowIfNull(senderInfo);
 
-            if (configProviderId == null)
-                throw new ArgumentNullException(nameof(configProviderId));
+            ArgumentNullException.ThrowIfNull(configProviderId);
 
             InitialSessionState sessionState = InitialSessionState.CreateDefault2();
             // now get all the modules in the specified path and import the same
@@ -848,13 +856,22 @@ public override InitialSessionState GetInitialSessionState(PSSessionConfiguratio
             }
 
             // TODO: Remove this after RDS moved to $using
-            if (senderInfo.ConnectionString != null && senderInfo.ConnectionString.Contains("MSP=7a83d074-bb86-4e52-aa3e-6cc73cc066c8")) { PSSessionConfigurationData.IsServerManager = true; }
+            if (senderInfo.ConnectionString != null && senderInfo.ConnectionString.Contains("MSP=7a83d074-bb86-4e52-aa3e-6cc73cc066c8"))
+            {
+                PSSessionConfigurationData.IsServerManager = true;
+            }
 
             return sessionState;
         }
+
+        #endregion
     }
 
-    #region Declarative Initial Session Configuration
+    #endregion
+
+    #region Declarative InitialSession Configuration
+
+    #region Supporting types
 
     /// <summary>
     /// Specifies type of initial session state to use. Valid values are Empty and Default.
@@ -898,6 +915,10 @@ internal ConfigTypeEntry(string key, TypeValidationCallback callback)
         }
     }
 
+    #endregion
+
+    #region ConfigFileConstants
+
     /// <summary>
     /// Configuration file constants.
     /// </summary>
@@ -949,41 +970,41 @@ internal static class ConfigFileConstants
         internal static readonly string VisibleExternalCommands = "VisibleExternalCommands";
 
         internal static readonly ConfigTypeEntry[] ConfigFileKeys = new ConfigTypeEntry[] {
-            new ConfigTypeEntry(AliasDefinitions,               new ConfigTypeEntry.TypeValidationCallback(AliasDefinitionsTypeValidationCallback)),
-            new ConfigTypeEntry(AssembliesToLoad,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(Author,                         new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(CompanyName,                    new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(Copyright,                      new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(Description,                    new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(EnforceInputParameterValidation,new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
-            new ConfigTypeEntry(EnvironmentVariables,           new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
-            new ConfigTypeEntry(ExecutionPolicy,                new ConfigTypeEntry.TypeValidationCallback(ExecutionPolicyValidationCallback)),
-            new ConfigTypeEntry(FormatsToProcess,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(FunctionDefinitions,            new ConfigTypeEntry.TypeValidationCallback(FunctionDefinitionsTypeValidationCallback)),
-            new ConfigTypeEntry(GMSAAccount,                    new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(Guid,                           new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(LanguageMode,                   new ConfigTypeEntry.TypeValidationCallback(LanguageModeValidationCallback)),
-            new ConfigTypeEntry(ModulesToImport,                new ConfigTypeEntry.TypeValidationCallback(StringOrHashtableArrayTypeValidationCallback)),
-            new ConfigTypeEntry(MountUserDrive,                 new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
-            new ConfigTypeEntry(PowerShellVersion,              new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(RequiredGroups,                 new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
-            new ConfigTypeEntry(RoleCapabilities,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(RoleCapabilityFiles,            new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(RoleDefinitions,                new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
-            new ConfigTypeEntry(RunAsVirtualAccount,            new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
-            new ConfigTypeEntry(RunAsVirtualAccountGroups,      new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(SchemaVersion,                  new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(ScriptsToProcess,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(SessionType,                    new ConfigTypeEntry.TypeValidationCallback(ISSValidationCallback)),
-            new ConfigTypeEntry(TranscriptDirectory,            new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
-            new ConfigTypeEntry(TypesToProcess,                 new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(UserDriveMaxSize,               new ConfigTypeEntry.TypeValidationCallback(IntegerTypeValidationCallback)),
-            new ConfigTypeEntry(VariableDefinitions,            new ConfigTypeEntry.TypeValidationCallback(VariableDefinitionsTypeValidationCallback)),
-            new ConfigTypeEntry(VisibleAliases,                 new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(VisibleCmdlets,                 new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(VisibleFunctions,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(VisibleProviders,               new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
-            new ConfigTypeEntry(VisibleExternalCommands,        new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(AliasDefinitions,                new ConfigTypeEntry.TypeValidationCallback(AliasDefinitionsTypeValidationCallback)),
+            new ConfigTypeEntry(AssembliesToLoad,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(Author,                          new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(CompanyName,                     new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(Copyright,                       new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(Description,                     new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(EnforceInputParameterValidation, new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
+            new ConfigTypeEntry(EnvironmentVariables,            new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
+            new ConfigTypeEntry(ExecutionPolicy,                 new ConfigTypeEntry.TypeValidationCallback(ExecutionPolicyValidationCallback)),
+            new ConfigTypeEntry(FormatsToProcess,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(FunctionDefinitions,             new ConfigTypeEntry.TypeValidationCallback(FunctionDefinitionsTypeValidationCallback)),
+            new ConfigTypeEntry(GMSAAccount,                     new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(Guid,                            new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(LanguageMode,                    new ConfigTypeEntry.TypeValidationCallback(LanguageModeValidationCallback)),
+            new ConfigTypeEntry(ModulesToImport,                 new ConfigTypeEntry.TypeValidationCallback(StringOrHashtableArrayTypeValidationCallback)),
+            new ConfigTypeEntry(MountUserDrive,                  new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
+            new ConfigTypeEntry(PowerShellVersion,               new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(RequiredGroups,                  new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
+            new ConfigTypeEntry(RoleCapabilities,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(RoleCapabilityFiles,             new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(RoleDefinitions,                 new ConfigTypeEntry.TypeValidationCallback(HashtableTypeValidationCallback)),
+            new ConfigTypeEntry(RunAsVirtualAccount,             new ConfigTypeEntry.TypeValidationCallback(BooleanTypeValidationCallback)),
+            new ConfigTypeEntry(RunAsVirtualAccountGroups,       new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(SchemaVersion,                   new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(ScriptsToProcess,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(SessionType,                     new ConfigTypeEntry.TypeValidationCallback(ISSValidationCallback)),
+            new ConfigTypeEntry(TranscriptDirectory,             new ConfigTypeEntry.TypeValidationCallback(StringTypeValidationCallback)),
+            new ConfigTypeEntry(TypesToProcess,                  new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(UserDriveMaxSize,                new ConfigTypeEntry.TypeValidationCallback(IntegerTypeValidationCallback)),
+            new ConfigTypeEntry(VariableDefinitions,             new ConfigTypeEntry.TypeValidationCallback(VariableDefinitionsTypeValidationCallback)),
+            new ConfigTypeEntry(VisibleAliases,                  new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(VisibleCmdlets,                  new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(VisibleFunctions,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(VisibleProviders,                new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
+            new ConfigTypeEntry(VisibleExternalCommands,         new ConfigTypeEntry.TypeValidationCallback(StringArrayTypeValidationCallback)),
         };
 
         /// <summary>
@@ -1355,6 +1376,8 @@ private static bool StringOrHashtableArrayTypeValidationCallback(string key, obj
         }
     }
 
+    #endregion
+
     #region DISC Utilities
 
     /// <summary>
@@ -1681,6 +1704,8 @@ internal static void ValidateRoleDefinitions(IDictionary roleDefinitions)
 
     #endregion
 
+    #region DISCPowerShellConfiguration
+
     /// <summary>
     /// Creates an initial session state based on the configuration language for PSSC files.
     /// </summary>
@@ -1706,13 +1731,14 @@ internal Hashtable ConfigHash
         /// target session. If you have a WindowsPrincipal for a user, for example, create a Function that
         /// checks windowsPrincipal.IsInRole().
         /// </param>
-        internal DISCPowerShellConfiguration(string configFile, Func<string, bool> roleVerifier)
+        /// <param name="validateFile">Validate file for supported configuration options.</param>
+        internal DISCPowerShellConfiguration(
+            string configFile,
+            Func<string, bool> roleVerifier,
+            bool validateFile = false)
         {
             _configFile = configFile;
-            if (roleVerifier == null)
-            {
-                roleVerifier = (role) => false;
-            }
+            roleVerifier ??= static (role) => false;
 
             Runspace backupRunspace = Runspace.DefaultRunspace;
 
@@ -1726,6 +1752,12 @@ internal DISCPowerShellConfiguration(string configFile, Func<string, bool> roleV
                     configFile, out scriptName);
 
                 _configHash = DISCUtils.LoadConfigFile(Runspace.DefaultRunspace.ExecutionContext, script);
+
+                if (validateFile)
+                {
+                    DISCFileValidation.ValidateContents(_configHash);
+                }
+
                 MergeRoleRulesIntoConfigHash(roleVerifier);
                 MergeRoleCapabilitiesIntoConfigHash();
 
@@ -1901,13 +1933,13 @@ private static string GetRoleCapabilityPath(string roleCapability)
             string moduleName = "*";
             if (roleCapability.Contains('\\'))
             {
-                string[] components = roleCapability.Split(Utils.Separators.Backslash, 2);
+                string[] components = roleCapability.Split('\\', 2);
                 moduleName = components[0];
                 roleCapability = components[1];
             }
 
             // Go through each directory in the module path
-            string[] modulePaths = ModuleIntrinsics.GetModulePath().Split(Utils.Separators.PathSeparator);
+            string[] modulePaths = ModuleIntrinsics.GetModulePath().Split(Path.PathSeparator);
             foreach (string path in modulePaths)
             {
                 try
@@ -2446,7 +2478,7 @@ private static void ProcessVisibleCommands(InitialSessionState iss, object[] com
             // Parameters = A dictionary of parameter names -> Modifications
             // Modifications = A dictionary of modification types (ValidatePattern, ValidateSet) to the interim value
             //  for that attribute, as a HashSet of strings. For ValidateSet, this will be used as a collection of strings
-            //  directly during proxy generation. For For ValidatePattern, it will be combined into a regex
+            //  directly during proxy generation. For ValidatePattern, it will be combined into a regex
             //  like: '^(Pattern1|Pattern2|Pattern3)$' during proxy generation.
             Dictionary<string, Hashtable> commandModifications = new Dictionary<string, Hashtable>(StringComparer.OrdinalIgnoreCase);
 
@@ -2804,7 +2836,7 @@ internal static Hashtable[] TryGetHashtableArray(object hashObj)
 
                     for (int i = 0; i < hashArray.Length; i++)
                     {
-                        if (!(objArray[i] is Hashtable hash))
+                        if (objArray[i] is not Hashtable hash)
                         {
                             return null;
                         }
@@ -2890,4 +2922,110 @@ internal static T[] TryGetObjectsOfType<T>(object hashObj, IEnumerable<Type> typ
         }
     }
     #endregion
+
+    #region DISCFileValidation
+
+    internal static class DISCFileValidation
+    {
+        // Set of supported configuration options for a PowerShell InitialSessionState.
+#if UNIX
+        private static readonly HashSet<string> SupportedConfigOptions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
+        {
+            "AliasDefinitions",
+            "AssembliesToLoad",
+            "Author",
+            "CompanyName",
+            "Copyright",
+            "Description",
+            "EnvironmentVariables",
+            "FormatsToProcess",
+            "FunctionDefinitions",
+            "GUID",
+            "LanguageMode",
+            "ModulesToImport",
+            "MountUserDrive",
+            "SchemaVersion",
+            "ScriptsToProcess",
+            "SessionType",
+            "TranscriptDirectory",
+            "TypesToProcess",
+            "UserDriveMaximumSize",
+            "VisibleAliases",
+            "VisibleCmdlets",
+            "VariableDefinitions",
+            "VisibleExternalCommands",
+            "VisibleFunctions",
+            "VisibleProviders"
+        };
+#else
+        private static readonly HashSet<string> SupportedConfigOptions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
+        {
+            "AliasDefinitions",
+            "AssembliesToLoad",
+            "Author",
+            "CompanyName",
+            "Copyright",
+            "Description",
+            "EnvironmentVariables",
+            "ExecutionPolicy",
+            "FormatsToProcess",
+            "FunctionDefinitions",
+            "GUID",
+            "LanguageMode",
+            "ModulesToImport",
+            "MountUserDrive",
+            "SchemaVersion",
+            "ScriptsToProcess",
+            "SessionType",
+            "TranscriptDirectory",
+            "TypesToProcess",
+            "UserDriveMaximumSize",
+            "VisibleAliases",
+            "VisibleCmdlets",
+            "VariableDefinitions",
+            "VisibleExternalCommands",
+            "VisibleFunctions",
+            "VisibleProviders"
+        };
+#endif
+
+        // These are configuration options for WSMan (WinRM) endpoint configurations, that
+        // appear in .pssc files, but are not part of PowerShell InitialSessionState.
+        private static readonly HashSet<string> UnsupportedConfigOptions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
+        {
+            "GroupManagedServiceAccount",
+            "PowerShellVersion",
+            "RequiredGroups",
+            "RoleDefinitions",
+            "RunAsVirtualAccount",
+            "RunAsVirtualAccountGroups"
+        };
+
+        internal static void ValidateContents(Hashtable configHash)
+        {
+            foreach (var key in configHash.Keys)
+            {
+                if (key is not string keyName)
+                {
+                    throw new PSInvalidOperationException(RemotingErrorIdStrings.DISCInvalidConfigKeyType);
+                }
+
+                if (UnsupportedConfigOptions.Contains(keyName))
+                {
+                    throw new PSInvalidOperationException(
+                        StringUtil.Format(RemotingErrorIdStrings.DISCUnsupportedConfigName, keyName));
+                }
+
+                if (!SupportedConfigOptions.Contains(keyName))
+                {
+                    throw new PSInvalidOperationException(
+                        StringUtil.Format(RemotingErrorIdStrings.DISCUnknownConfigName, keyName));
+                }
+            }
+        }
+    }
+
+    #endregion
+
+    #endregion
 }
diff --git a/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs
index b8f6da13c17..47ff6270dba 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs
@@ -75,7 +75,8 @@ static OutOfProcessUtils()
 
         internal static string CreateDataPacket(byte[] data, DataPriorityType streamType, Guid psGuid)
         {
-            string result = string.Format(CultureInfo.InvariantCulture,
+            string result = string.Format(
+                CultureInfo.InvariantCulture,
                 "<{0} {1}='{2}' {3}='{4}'>{5}</{0}>",
                 PS_OUT_OF_PROC_DATA_TAG,
                 PS_OUT_OF_PROC_STREAM_ATTRIBUTE,
@@ -131,7 +132,8 @@ internal static string CreateSignalAckPacket(Guid psGuid)
         /// <returns></returns>
         private static string CreatePSGuidPacket(string element, Guid psGuid)
         {
-            string result = string.Format(CultureInfo.InvariantCulture,
+            string result = string.Format(
+                CultureInfo.InvariantCulture,
                 "<{0} {1}='{2}' />",
                 element,
                 PS_OUT_OF_PROC_PSGUID_ATTRIBUTE,
@@ -412,6 +414,19 @@ internal class OutOfProcessTextWriter
         private readonly TextWriter _writer;
         private bool _isStopped;
         private readonly object _syncObject = new object();
+        private const string _errorPrepend = "__NamedPipeError__:";
+
+        #endregion
+
+        #region Properties
+
+        /// <summary>
+        /// Prefix for transport error message.
+        /// </summary>
+        public static string ErrorPrefix
+        {
+            get => _errorPrepend;
+        }
 
         #endregion
 
@@ -421,9 +436,13 @@ internal class OutOfProcessTextWriter
         /// Constructs the wrapper.
         /// </summary>
         /// <param name="writerToWrap"></param>
-        internal OutOfProcessTextWriter(TextWriter writerToWrap)
+        public OutOfProcessTextWriter(TextWriter writerToWrap)
         {
-            Dbg.Assert(writerToWrap != null, "Cannot wrap a null writer.");
+            if (writerToWrap is null)
+            {
+                throw new PSArgumentNullException(nameof(writerToWrap));
+            }
+
             _writer = writerToWrap;
         }
 
@@ -435,7 +454,7 @@ internal OutOfProcessTextWriter(TextWriter writerToWrap)
         /// Calls writer.WriteLine() with data.
         /// </summary>
         /// <param name="data"></param>
-        internal virtual void WriteLine(string data)
+        public virtual void WriteLine(string data)
         {
             if (_isStopped)
             {
@@ -467,7 +486,10 @@ internal void StopWriting()
 
 namespace System.Management.Automation.Remoting.Client
 {
-    internal abstract class OutOfProcessClientSessionTransportManagerBase : BaseClientSessionTransportManager
+    /// <summary>
+    /// Client session transport manager abstract base class.
+    /// </summary>
+    public abstract class ClientSessionTransportManagerBase : BaseClientSessionTransportManager
     {
         #region Data
 
@@ -477,15 +499,17 @@ internal abstract class OutOfProcessClientSessionTransportManagerBase : BaseClie
         private OutOfProcessUtils.DataProcessingDelegates _dataProcessingCallbacks;
         private readonly Dictionary<Guid, OutOfProcessClientCommandTransportManager> _cmdTransportManagers;
         private readonly Timer _closeTimeOutTimer;
-
-        protected OutOfProcessTextWriter stdInWriter;
-        protected PowerShellTraceSource _tracer;
+        internal PowerShellTraceSource _tracer;
+        internal OutOfProcessTextWriter _messageWriter;
 
         #endregion
 
         #region Constructor
 
-        internal OutOfProcessClientSessionTransportManagerBase(
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        protected ClientSessionTransportManagerBase(
             Guid runspaceId,
             PSRemotingCryptoHelper cryptoHelper)
             : base(runspaceId, cryptoHelper)
@@ -505,7 +529,7 @@ internal OutOfProcessClientSessionTransportManagerBase(
             _dataProcessingCallbacks.ClosePacketReceived += new OutOfProcessUtils.ClosePacketReceived(OnClosePacketReceived);
             _dataProcessingCallbacks.CloseAckPacketReceived += new OutOfProcessUtils.CloseAckPacketReceived(OnCloseAckReceived);
 
-            dataToBeSent.Fragmentor = base.Fragmentor;
+            dataToBeSent.Fragmentor = Fragmentor;
             // session transport manager can receive unlimited data..however each object is limited
             // by maxRecvdObjectSize. this is to allow clients to use a session for an unlimited time..
             // also the messages that can be sent to a session are limited and very controlled.
@@ -546,7 +570,7 @@ internal override void ConnectAsync()
         /// <summary>
         /// Closes the server process.
         /// </summary>
-        internal override void CloseAsync()
+        public override void CloseAsync()
         {
             bool shouldRaiseCloseCompleted = false;
             lock (syncObject)
@@ -560,7 +584,7 @@ internal override void CloseAsync()
                 // will know that we are closing.
                 isClosed = true;
 
-                if (stdInWriter == null)
+                if (_messageWriter == null)
                 {
                     // this will happen if CloseAsync() is called
                     // before ConnectAsync()..in which case we
@@ -586,12 +610,12 @@ internal override void CloseAsync()
             try
             {
                 // send Close signal to the server and let it die gracefully.
-                stdInWriter.WriteLine(OutOfProcessUtils.CreateClosePacket(Guid.Empty));
+                _messageWriter.WriteLine(OutOfProcessUtils.CreateClosePacket(Guid.Empty));
 
                 // start the timer..so client can fail deterministically
                 _closeTimeOutTimer.Change(60 * 1000, Timeout.Infinite);
             }
-            catch (IOException)
+            catch (Exception ex) when (ex is IOException || ex is ObjectDisposedException)
             {
                 // Cannot communicate with server.  Allow client to complete close operation.
                 shouldRaiseCloseCompleted = true;
@@ -618,7 +642,7 @@ internal override BaseClientCommandTransportManager CreateClientCommandTransport
             Dbg.Assert(cmd != null, "Cmd cannot be null");
 
             OutOfProcessClientCommandTransportManager result = new
-                OutOfProcessClientCommandTransportManager(cmd, noInput, this, stdInWriter);
+                OutOfProcessClientCommandTransportManager(cmd, noInput, this, _messageWriter);
             AddCommandTransportManager(cmd.InstanceId, result);
 
             return result;
@@ -628,37 +652,14 @@ internal override BaseClientCommandTransportManager CreateClientCommandTransport
         /// Terminates the server process and disposes other resources.
         /// </summary>
         /// <param name="isDisposing"></param>
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
             if (isDisposing)
             {
                 _cmdTransportManagers.Clear();
                 _closeTimeOutTimer.Dispose();
-
-                // Stop session processing thread.
-                try
-                {
-                    _sessionMessageQueue.CompleteAdding();
-                }
-                catch (ObjectDisposedException)
-                {
-                    // Object already disposed.
-                }
-
-                _sessionMessageQueue.Dispose();
-
-                // Stop command processing thread.
-                try
-                {
-                    _commandMessageQueue.CompleteAdding();
-                }
-                catch (ObjectDisposedException)
-                {
-                    // Object already disposed.
-                }
-
-                _commandMessageQueue.Dispose();
+                DisposeMessageQueue();
             }
         }
 
@@ -716,6 +717,9 @@ private void OnCloseSessionCompleted()
             CleanupConnection();
         }
 
+        /// <summary>
+        /// Optional additional connection clean up after a connection is closed.
+        /// </summary>
         protected abstract void CleanupConnection();
 
         private void ProcessMessageProc(object state)
@@ -754,6 +758,9 @@ private void ProcessMessageProc(object state)
 
         private const string SESSIONDMESSAGETAG = "PSGuid='00000000-0000-0000-0000-000000000000'";
 
+        /// <summary>
+        /// Handles protocol output data from a transport.
+        /// </summary>
         protected void HandleOutputDataReceived(string data)
         {
             if (string.IsNullOrEmpty(data))
@@ -785,6 +792,9 @@ protected void HandleOutputDataReceived(string data)
             }
         }
 
+        /// <summary>
+        /// Handles protocol error data.
+        /// </summary>
         protected void HandleErrorDataReceived(string data)
         {
             lock (syncObject)
@@ -801,57 +811,13 @@ protected void HandleErrorDataReceived(string data)
             RaiseErrorHandler(new TransportErrorOccuredEventArgs(psrte, TransportMethodEnum.Unknown));
         }
 
-        protected void OnExited(object sender, EventArgs e)
-        {
-            TransportMethodEnum transportMethod = TransportMethodEnum.Unknown;
-            lock (syncObject)
-            {
-                // There is no need to return when IsClosed==true here as in a legitimate case process exits
-                // after Close is called..In that legitimate case, Exit handler is removed before
-                // calling Exit..So, this Exit must have been called abnormally.
-                if (isClosed)
-                {
-                    transportMethod = TransportMethodEnum.CloseShellOperationEx;
-                }
-
-                // dont let the writer write new data as the process is exited.
-                // Not assigning null to stdInWriter to fix the race condition between OnExited() and CloseAsync() methods.
-                //
-                stdInWriter.StopWriting();
-            }
-
-            // Try to get details about why the process exited
-            // and if they're not available, give information as to why
-            string processDiagnosticMessage;
-            try
-            {
-                var jobProcess = (Process)sender;
-                processDiagnosticMessage = StringUtil.Format(
-                    RemotingErrorIdStrings.ProcessExitInfo,
-                    jobProcess.ExitCode,
-                    jobProcess.StandardOutput.ReadToEnd(),
-                    jobProcess.StandardError.ReadToEnd());
-            }
-            catch (Exception exception)
-            {
-                processDiagnosticMessage = StringUtil.Format(
-                    RemotingErrorIdStrings.ProcessInfoNotRecoverable,
-                    exception.Message);
-            }
-
-            string exitErrorMsg = StringUtil.Format(
-                RemotingErrorIdStrings.IPCServerProcessExited,
-                processDiagnosticMessage);
-            var psrte = new PSRemotingTransportException(
-                PSRemotingErrorId.IPCServerProcessExited,
-                exitErrorMsg);
-            RaiseErrorHandler(new TransportErrorOccuredEventArgs(psrte, transportMethod));
-        }
-
         #endregion
 
         #region Sending Data related Methods
 
+        /// <summary>
+        /// Send any data packet in the queue.
+        /// </summary>
         protected void SendOneItem()
         {
             DataPriorityType priorityType;
@@ -888,7 +854,7 @@ private void SendData(byte[] data, DataPriorityType priorityType)
                     return;
                 }
 
-                stdInWriter.WriteLine(OutOfProcessUtils.CreateDataPacket(data,
+                _messageWriter.WriteLine(OutOfProcessUtils.CreateDataPacket(data,
                     priorityType,
                     Guid.Empty));
             }
@@ -931,13 +897,11 @@ private void OnDataPacketReceived(byte[] rawData, string stream, Guid psGuid)
             {
                 // this is for a command
                 OutOfProcessClientCommandTransportManager cmdTM = GetCommandTransportManager(psGuid);
-                if (cmdTM != null)
-                {
-                    // not throwing the exception in null case as the command might have already
-                    // closed. The RS data structure handler does not wait for the close ack before
-                    // it clears the command transport manager..so this might happen.
-                    cmdTM.OnRemoteCmdDataReceived(rawData, streamTemp);
-                }
+
+                // not throwing the exception in null case as the command might have already
+                // closed. The RS data structure handler does not wait for the close ack before
+                // it clears the command transport manager..so this might happen.
+                cmdTM?.OnRemoteCmdDataReceived(rawData, streamTemp);
             }
         }
 
@@ -952,13 +916,11 @@ private void OnDataAckPacketReceived(Guid psGuid)
             {
                 // this is for a command
                 OutOfProcessClientCommandTransportManager cmdTM = GetCommandTransportManager(psGuid);
-                if (cmdTM != null)
-                {
-                    // not throwing the exception in null case as the command might have already
-                    // closed. The RS data structure handler does not wait for the close ack before
-                    // it clears the command transport manager..so this might happen.
-                    cmdTM.OnRemoteCmdSendCompleted();
-                }
+
+                // not throwing the exception in null case as the command might have already
+                // closed. The RS data structure handler does not wait for the close ack before
+                // it clears the command transport manager..so this might happen.
+                cmdTM?.OnRemoteCmdSendCompleted();
             }
         }
 
@@ -986,7 +948,8 @@ private void OnCommandCreationAckReceived(Guid psGuid)
 
         private void OnSignalPacketReceived(Guid psGuid)
         {
-            throw new PSRemotingTransportException(PSRemotingErrorId.IPCUnknownElementReceived,
+            throw new PSRemotingTransportException(
+                PSRemotingErrorId.IPCUnknownElementReceived,
                 RemotingErrorIdStrings.IPCUnknownElementReceived,
                    OutOfProcessUtils.PS_OUT_OF_PROC_SIGNAL_TAG);
         }
@@ -995,17 +958,15 @@ private void OnSignalAckPacketReceived(Guid psGuid)
         {
             if (psGuid == Guid.Empty)
             {
-                throw new PSRemotingTransportException(PSRemotingErrorId.IPCNoSignalForSession,
+                throw new PSRemotingTransportException(
+                    PSRemotingErrorId.IPCNoSignalForSession,
                     RemotingErrorIdStrings.IPCNoSignalForSession,
                     OutOfProcessUtils.PS_OUT_OF_PROC_SIGNAL_ACK_TAG);
             }
             else
             {
                 OutOfProcessClientCommandTransportManager cmdTM = GetCommandTransportManager(psGuid);
-                if (cmdTM != null)
-                {
-                    cmdTM.OnRemoteCmdSignalCompleted();
-                }
+                cmdTM?.OnRemoteCmdSignalCompleted();
             }
         }
 
@@ -1035,12 +996,10 @@ private void OnCloseAckReceived(Guid psGuid)
                 _tracer.WriteMessage("OutOfProcessClientSessionTransportManager.OnCloseAckReceived, in progress command count should be greater than zero: " + commandCount + ", RunSpacePool Id : " + this.RunspacePoolInstanceId + ", psGuid : " + psGuid.ToString());
 
                 OutOfProcessClientCommandTransportManager cmdTM = GetCommandTransportManager(psGuid);
-                if (cmdTM != null)
-                {
-                    // this might legitimately happen if cmd is already closed before we get an
-                    // ACK back from server.
-                    cmdTM.OnCloseCmdCompleted();
-                }
+
+                // this might legitimately happen if cmd is already closed before we get an
+                // ACK back from server.
+                cmdTM?.OnCloseCmdCompleted();
             }
         }
 
@@ -1055,9 +1014,71 @@ internal void OnCloseTimeOutTimerElapsed(object source)
         }
 
         #endregion
+
+        #region Protected Methods
+
+        /// <summary>
+        /// Standard handler for data received, to be used by custom transport implementations.
+        /// </summary>
+        /// <param name="data">Protocol text data received by custom transport.</param>
+        protected void HandleDataReceived(string data)
+        {
+            if (data.StartsWith(OutOfProcessTextWriter.ErrorPrefix, StringComparison.OrdinalIgnoreCase))
+            {
+                // Error message from the server.
+                string errorData = data.Substring(OutOfProcessTextWriter.ErrorPrefix.Length);
+                HandleErrorDataReceived(errorData);
+            }
+            else
+            {
+                // Normal output data.
+                HandleOutputDataReceived(data);
+            }
+        }
+
+        /// <summary>
+        /// Creates the transport message writer from the provided TexWriter object.
+        /// </summary>
+        /// <param name"textWriter">TextWriter object to be used in the message writer.</param>
+        protected void SetMessageWriter(TextWriter textWriter)
+        {
+            _messageWriter = new OutOfProcessTextWriter(textWriter);
+        }
+
+        /// <summary>
+        /// Disposes message queue components.
+        /// </summary>
+        protected void DisposeMessageQueue()
+        {
+            // Stop session processing thread.
+            try
+            {
+                _sessionMessageQueue.CompleteAdding();
+            }
+            catch (ObjectDisposedException)
+            {
+                // Object already disposed.
+            }
+
+            _sessionMessageQueue.Dispose();
+
+            // Stop command processing thread.
+            try
+            {
+                _commandMessageQueue.CompleteAdding();
+            }
+            catch (ObjectDisposedException)
+            {
+                // Object already disposed.
+            }
+
+            _commandMessageQueue.Dispose();
+        }
+
+        #endregion
     }
 
-    internal class OutOfProcessClientSessionTransportManager : OutOfProcessClientSessionTransportManagerBase
+    internal class OutOfProcessClientSessionTransportManager : ClientSessionTransportManagerBase
     {
         #region Private Data
 
@@ -1085,14 +1106,14 @@ internal OutOfProcessClientSessionTransportManager(Guid runspaceId,
         /// <summary>
         /// Launch a new Process (pwsh -s) to perform remoting. This is used by *-Job cmdlets
         /// to support background jobs without depending on WinRM (WinRM has complex requirements like
-        /// elevation to support local machine remoting)
+        /// elevation to support local machine remoting).
         /// </summary>
         /// <exception cref="System.InvalidOperationException">
         /// </exception>
         /// <exception cref="System.ComponentModel.Win32Exception">
         /// 1. There was an error in opening the associated file.
         /// </exception>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             if (_connectionInfo != null)
             {
@@ -1133,8 +1154,8 @@ internal override void CreateAsync()
                     _processInstance.Start();
 
                     StartRedirectionReaderThreads(_serverProcess);
-                    stdInWriter = new OutOfProcessTextWriter(_serverProcess.StandardInput);
-                    _processInstance.StdInWriter = stdInWriter;
+                    SetMessageWriter(_serverProcess.StandardInput);
+                    _processInstance.StdInWriter = _messageWriter;
                 }
             }
             catch (System.ComponentModel.Win32Exception w32e)
@@ -1244,7 +1265,7 @@ private void ProcessErrorData(object arg)
         /// Kills the server process and disposes other resources.
         /// </summary>
         /// <param name="isDisposing"></param>
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
             if (isDisposing)
@@ -1308,10 +1329,57 @@ private void KillServerProcess()
             }
         }
 
+        private void OnExited(object sender, EventArgs e)
+        {
+            TransportMethodEnum transportMethod = TransportMethodEnum.Unknown;
+            lock (syncObject)
+            {
+                // There is no need to return when IsClosed==true here as in a legitimate case process exits
+                // after Close is called..In that legitimate case, Exit handler is removed before
+                // calling Exit..So, this Exit must have been called abnormally.
+                if (isClosed)
+                {
+                    transportMethod = TransportMethodEnum.CloseShellOperationEx;
+                }
+
+                // dont let the writer write new data as the process is exited.
+                // Not assigning null to stdInWriter to fix the race condition between OnExited() and CloseAsync() methods.
+                //
+                _messageWriter.StopWriting();
+            }
+
+            // Try to get details about why the process exited
+            // and if they're not available, give information as to why
+            string processDiagnosticMessage;
+            try
+            {
+                var jobProcess = (Process)sender;
+                processDiagnosticMessage = StringUtil.Format(
+                    RemotingErrorIdStrings.ProcessExitInfo,
+                    jobProcess.ExitCode,
+                    jobProcess.StandardOutput.ReadToEnd(),
+                    jobProcess.StandardError.ReadToEnd());
+            }
+            catch (Exception exception)
+            {
+                processDiagnosticMessage = StringUtil.Format(
+                    RemotingErrorIdStrings.ProcessInfoNotRecoverable,
+                    exception.Message);
+            }
+
+            string exitErrorMsg = StringUtil.Format(
+                RemotingErrorIdStrings.IPCServerProcessExited,
+                processDiagnosticMessage);
+            var psrte = new PSRemotingTransportException(
+                PSRemotingErrorId.IPCServerProcessExited,
+                exitErrorMsg);
+            RaiseErrorHandler(new TransportErrorOccuredEventArgs(psrte, transportMethod));
+        }
+
         #endregion
     }
 
-    internal abstract class HyperVSocketClientSessionTransportManagerBase : OutOfProcessClientSessionTransportManagerBase
+    internal abstract class HyperVSocketClientSessionTransportManagerBase : ClientSessionTransportManagerBase
     {
         #region Data
 
@@ -1333,16 +1401,13 @@ internal HyperVSocketClientSessionTransportManagerBase(
 
         #region Overrides
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
 
             if (isDisposing)
             {
-                if (_client != null)
-                {
-                    _client.Dispose();
-                }
+                _client?.Dispose();
             }
         }
 
@@ -1411,10 +1476,10 @@ protected void ProcessReaderThread(object state)
             {
                 if (e is ArgumentOutOfRangeException)
                 {
-                    Dbg.Assert(false, "Need to adjust transport fragmentor to accomodate read buffer size.");
+                    Dbg.Assert(false, "Need to adjust transport fragmentor to accommodate read buffer size.");
                 }
 
-                string errorMsg = (e.Message != null) ? e.Message : string.Empty;
+                string errorMsg = e.Message ?? string.Empty;
                 _tracer.WriteMessage("HyperVSocketClientSessionTransportManager", "StartReaderThread", Guid.Empty,
                     "Transport manager reader thread ended with error: {0}", errorMsg);
 
@@ -1477,10 +1542,11 @@ internal VMHyperVSocketClientSessionTransportManager(
         /// Create a Hyper-V socket connection to the target process and set up
         /// transport reader/writer.
         /// </summary>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
-            _client = new RemoteSessionHyperVSocketClient(_vmGuid, true);
-            if (!_client.Connect(_networkCredential, _configurationName, true))
+            // isFirstConnection: true - specifies to use VM_SESSION_SERVICE_ID socket.
+            _client = new RemoteSessionHyperVSocketClient(_vmGuid, useBackwardsCompatibleMode: false, isFirstConnection: true);
+            if (!_client.Connect(_networkCredential, _configurationName, isFirstConnection: true))
             {
                 _client.Dispose();
                 throw new PSInvalidOperationException(
@@ -1490,11 +1556,14 @@ internal override void CreateAsync()
                     ErrorCategory.InvalidOperation,
                     null);
             }
+            bool useBackwardsCompatibleMode = _client.UseBackwardsCompatibleMode;
+            string token = _client.AuthenticationToken;
 
-            // TODO: remove below 3 lines when Hyper-V socket duplication is supported in .NET framework.
             _client.Dispose();
-            _client = new RemoteSessionHyperVSocketClient(_vmGuid, false);
-            if (!_client.Connect(_networkCredential, _configurationName, false))
+
+            // isFirstConnection: false - specifies to use the SESSION_SERVICE_ID_2 socket.
+            _client = new RemoteSessionHyperVSocketClient(_vmGuid, useBackwardsCompatibleMode: useBackwardsCompatibleMode, isFirstConnection: false, authenticationToken: token);
+            if (!_client.Connect(_networkCredential, _configurationName, isFirstConnection: false))
             {
                 _client.Dispose();
                 throw new PSInvalidOperationException(
@@ -1506,7 +1575,7 @@ internal override void CreateAsync()
             }
 
             // Create writer for Hyper-V socket.
-            stdInWriter = new OutOfProcessTextWriter(_client.TextWriter);
+            SetMessageWriter(_client.TextWriter);
 
             // Create reader thread for Hyper-V socket.
             StartReaderThread(_client.TextReader);
@@ -1550,9 +1619,11 @@ internal ContainerHyperVSocketClientSessionTransportManager(
         /// Create a Hyper-V socket connection to the target process and set up
         /// transport reader/writer.
         /// </summary>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
-            _client = new RemoteSessionHyperVSocketClient(_targetGuid, false, true);
+            // Container scenario is not working.
+            // When we fix it we need to setup the token in ContainerConnectionInfo and use it here.
+            _client = new RemoteSessionHyperVSocketClient(_targetGuid, isFirstConnection: false, useBackwardsCompatibleMode: false, isContainer: true);
             if (!_client.Connect(null, string.Empty, false))
             {
                 _client.Dispose();
@@ -1565,7 +1636,7 @@ internal override void CreateAsync()
             }
 
             // Create writer for Hyper-V socket.
-            stdInWriter = new OutOfProcessTextWriter(_client.TextWriter);
+            SetMessageWriter(_client.TextWriter);
 
             // Create reader thread for Hyper-V socket.
             StartReaderThread(_client.TextReader);
@@ -1574,7 +1645,7 @@ internal override void CreateAsync()
         #endregion
     }
 
-    internal sealed class SSHClientSessionTransportManager : OutOfProcessClientSessionTransportManagerBase
+    internal sealed class SSHClientSessionTransportManager : ClientSessionTransportManagerBase
     {
         #region Data
 
@@ -1584,6 +1655,7 @@ internal sealed class SSHClientSessionTransportManager : OutOfProcessClientSessi
         private StreamReader _stdOutReader;
         private StreamReader _stdErrReader;
         private bool _connectionEstablished;
+        private Timer _connectionTimer;
 
         private const string _threadName = "SSHTransport Reader Thread";
 
@@ -1606,7 +1678,7 @@ internal SSHClientSessionTransportManager(
 
         #region Overrides
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
 
@@ -1625,7 +1697,7 @@ protected override void CleanupConnection()
         /// Create an SSH connection to the target host and set up
         /// transport reader/writer.
         /// </summary>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             // Create the ssh client process with connection to host target.
             _sshProcessId = _connectionInfo.StartSSHProcess(
@@ -1637,13 +1709,56 @@ internal override void CreateAsync()
             StartErrorThread(_stdErrReader);
 
             // Create writer for named pipe.
-            stdInWriter = new OutOfProcessTextWriter(_stdInWriter);
+            SetMessageWriter(_stdInWriter);
 
             // Create reader thread and send first PSRP message.
             StartReaderThread(_stdOutReader);
+
+            if (_connectionInfo.ConnectingTimeout < 0)
+            {
+                return;
+            }
+
+            // Start connection timeout timer if requested.
+            // Timer callback occurs only once after timeout time.
+            _connectionTimer = new Timer(
+                callback: (_) =>
+                {
+                    if (_connectionEstablished)
+                    {
+                        return;
+                    }
+
+                    // Detect if SSH client process terminates prematurely.
+                    bool sshTerminated = false;
+                    try
+                    {
+                        using (var sshProcess = Process.GetProcessById(_sshProcessId))
+                        {
+                            sshTerminated = sshProcess == null || sshProcess.Handle == IntPtr.Zero || sshProcess.HasExited;
+                        }
+                    }
+                    catch
+                    {
+                        sshTerminated = true;
+                    }
+
+                    var errorMessage = StringUtil.Format(RemotingErrorIdStrings.SSHClientConnectTimeout, _connectionInfo.ConnectingTimeout / 1000);
+                    if (sshTerminated)
+                    {
+                        errorMessage += RemotingErrorIdStrings.SSHClientConnectProcessTerminated;
+                    }
+
+                    // Report error and terminate connection attempt.
+                    HandleSSHError(
+                        new PSRemotingTransportException(errorMessage));
+                },
+                state: null,
+                dueTime: _connectionInfo.ConnectingTimeout,
+                period: Timeout.Infinite);
         }
 
-        internal override void CloseAsync()
+        public override void CloseAsync()
         {
             base.CloseAsync();
 
@@ -1660,14 +1775,20 @@ internal override void CloseAsync()
 
         private void CloseConnection()
         {
+            // Ensure message queue is disposed.
+            DisposeMessageQueue();
+
+            var connectionTimer = Interlocked.Exchange(ref _connectionTimer, null);
+            connectionTimer?.Dispose();
+
             var stdInWriter = Interlocked.Exchange(ref _stdInWriter, null);
-            if (stdInWriter != null) { stdInWriter.Dispose(); }
+            stdInWriter?.Dispose();
 
             var stdOutReader = Interlocked.Exchange(ref _stdOutReader, null);
-            if (stdOutReader != null) { stdOutReader.Dispose(); }
+            stdOutReader?.Dispose();
 
             var stdErrReader = Interlocked.Exchange(ref _stdErrReader, null);
-            if (stdErrReader != null) { stdErrReader.Dispose(); }
+            stdErrReader?.Dispose();
 
             // The CloseConnection() method can be called multiple times from multiple places.
             // Set the _sshProcessId to zero here so that we go through the work of finding
@@ -1677,11 +1798,7 @@ private void CloseConnection()
             {
                 try
                 {
-                    var sshProcess = System.Diagnostics.Process.GetProcessById(sshProcessId);
-                    if ((sshProcess != null) && (sshProcess.Handle != IntPtr.Zero) && !sshProcess.HasExited)
-                    {
-                        sshProcess.Kill();
-                    }
+                    _connectionInfo.KillSSHProcess(sshProcessId);
                 }
                 catch (ArgumentException) { }
                 catch (InvalidOperationException) { }
@@ -1708,7 +1825,16 @@ private void ProcessErrorThread(object state)
 
                 while (true)
                 {
-                    string error = ReadError(reader);
+                    string error;
+
+                    // Blocking read from StdError stream
+                    error = reader.ReadLine();
+
+                    if (error == null)
+                    {
+                        // Stream is closed unexpectedly.
+                        throw new PSInvalidOperationException(RemotingErrorIdStrings.SSHAbruptlyTerminated);
+                    }
 
                     if (error.Length == 0)
                     {
@@ -1716,12 +1842,15 @@ private void ProcessErrorThread(object state)
                         continue;
                     }
 
-                    // Any SSH client error results in a broken session.
-                    PSRemotingTransportException psrte = new PSRemotingTransportException(
-                        PSRemotingErrorId.IPCServerProcessReportedError,
-                        RemotingErrorIdStrings.IPCServerProcessReportedError,
-                        StringUtil.Format(RemotingErrorIdStrings.SSHClientEndWithErrorMessage, error));
-                    HandleSSHError(psrte);
+                    try
+                    {
+                        // Messages in error stream from ssh are unreliable, and may just be warnings or
+                        // banner text.
+                        // So just report the messages but don't act on them.
+                        Console.WriteLine(error);
+                    }
+                    catch (IOException)
+                    { }
                 }
             }
             catch (ObjectDisposedException)
@@ -1730,7 +1859,7 @@ private void ProcessErrorThread(object state)
             }
             catch (Exception e)
             {
-                string errorMsg = (e.Message != null) ? e.Message : string.Empty;
+                string errorMsg = e.Message ?? string.Empty;
                 _tracer.WriteMessage("SSHClientSessionTransportManager", "ProcessErrorThread", Guid.Empty,
                     "Transport manager error thread ended with error: {0}", errorMsg);
 
@@ -1747,55 +1876,6 @@ private void HandleSSHError(PSRemotingTransportException psrte)
             CloseConnection();
         }
 
-        private static string ReadError(StreamReader reader)
-        {
-            // Blocking read from StdError stream
-            string error = reader.ReadLine();
-
-            if (error == null)
-            {
-                // Stream is closed unexpectedly.
-                throw new PSInvalidOperationException(RemotingErrorIdStrings.SSHAbruptlyTerminated);
-            }
-
-            if ((error.Length == 0) ||
-                error.Contains("WARNING:", StringComparison.OrdinalIgnoreCase))
-            {
-                // Handle as interactive warning message
-                Console.WriteLine(error);
-                return string.Empty;
-            }
-
-            // SSH may return a multi-line error message.
-            // The StdError pipe stream is open ended causing StreamReader read operations to block
-            // if there is no incoming data.  Since we don't know how many error message lines there
-            // will be we use an asynchronous read with timeout to prevent blocking indefinitely.
-            System.Text.StringBuilder sb = new Text.StringBuilder(error);
-            var running = true;
-            while (running)
-            {
-                try
-                {
-                    var task = reader.ReadLineAsync();
-                    if (task.Wait(1000) && (task.Result != null))
-                    {
-                        sb.Append(Environment.NewLine);
-                        sb.Append(task.Result);
-                    }
-                    else
-                    {
-                        running = false;
-                    }
-                }
-                catch (Exception)
-                {
-                    running = false;
-                }
-            }
-
-            return sb.ToString();
-        }
-
         private void StartReaderThread(
             StreamReader reader)
         {
@@ -1827,10 +1907,10 @@ private void ProcessReaderThread(object state)
                         break;
                     }
 
-                    if (data.StartsWith(System.Management.Automation.Remoting.Server.NamedPipeErrorTextWriter.ErrorPrepend, StringComparison.OrdinalIgnoreCase))
+                    if (data.StartsWith(OutOfProcessTextWriter.ErrorPrefix, StringComparison.OrdinalIgnoreCase))
                     {
                         // Error message from the server.
-                        string errorData = data.Substring(System.Management.Automation.Remoting.Server.NamedPipeErrorTextWriter.ErrorPrepend.Length);
+                        string errorData = data.Substring(OutOfProcessTextWriter.ErrorPrefix.Length);
                         HandleErrorDataReceived(errorData);
                     }
                     else
@@ -1851,10 +1931,10 @@ private void ProcessReaderThread(object state)
             {
                 if (e is ArgumentOutOfRangeException)
                 {
-                    Dbg.Assert(false, "Need to adjust transport fragmentor to accomodate read buffer size.");
+                    Dbg.Assert(false, "Need to adjust transport fragmentor to accommodate read buffer size.");
                 }
 
-                string errorMsg = (e.Message != null) ? e.Message : string.Empty;
+                string errorMsg = e.Message ?? string.Empty;
                 _tracer.WriteMessage("SSHClientSessionTransportManager", "ProcessReaderThread", Guid.Empty,
                     "Transport manager reader thread ended with error: {0}", errorMsg);
             }
@@ -1863,7 +1943,7 @@ private void ProcessReaderThread(object state)
         #endregion
     }
 
-    internal abstract class NamedPipeClientSessionTransportManagerBase : OutOfProcessClientSessionTransportManagerBase
+    internal abstract class NamedPipeClientSessionTransportManagerBase : ClientSessionTransportManagerBase
     {
         #region Data
 
@@ -1896,16 +1976,13 @@ internal NamedPipeClientSessionTransportManagerBase(
 
         #region Overrides
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
 
             if (isDisposing)
             {
-                if (_clientPipe != null)
-                {
-                    _clientPipe.Dispose();
-                }
+                _clientPipe?.Dispose();
             }
         }
 
@@ -1957,17 +2034,7 @@ private void ProcessReaderThread(object state)
                         break;
                     }
 
-                    if (data.StartsWith(System.Management.Automation.Remoting.Server.NamedPipeErrorTextWriter.ErrorPrepend, StringComparison.OrdinalIgnoreCase))
-                    {
-                        // Error message from the server.
-                        string errorData = data.Substring(System.Management.Automation.Remoting.Server.NamedPipeErrorTextWriter.ErrorPrepend.Length);
-                        HandleErrorDataReceived(errorData);
-                    }
-                    else
-                    {
-                        // Normal output data.
-                        HandleOutputDataReceived(data);
-                    }
+                    HandleDataReceived(data);
                 }
             }
             catch (ObjectDisposedException)
@@ -1981,7 +2048,7 @@ private void ProcessReaderThread(object state)
                     Dbg.Assert(false, "Need to adjust transport fragmentor to accommodate read buffer size.");
                 }
 
-                string errorMsg = (e.Message != null) ? e.Message : string.Empty;
+                string errorMsg = e.Message ?? string.Empty;
                 _tracer.WriteMessage("NamedPipeClientSessionTransportManager", "StartReaderThread", Guid.Empty,
                     "Transport manager reader thread ended with error: {0}", errorMsg);
             }
@@ -2024,7 +2091,7 @@ internal NamedPipeClientSessionTransportManager(
         /// Create a named pipe connection to the target process and set up
         /// transport reader/writer.
         /// </summary>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             _clientPipe = string.IsNullOrEmpty(_connectionInfo.CustomPipeName) ?
                 new RemoteSessionNamedPipeClient(_connectionInfo.ProcessId, _connectionInfo.AppDomainName) :
@@ -2034,7 +2101,7 @@ internal override void CreateAsync()
             _clientPipe.Connect(_connectionInfo.OpenTimeout);
 
             // Create writer for named pipe.
-            stdInWriter = new OutOfProcessTextWriter(_clientPipe.TextWriter);
+            SetMessageWriter(_clientPipe.TextWriter);
 
             // Create reader thread for named pipe.
             StartReaderThread(_clientPipe.TextReader);
@@ -2047,13 +2114,7 @@ internal override void CreateAsync()
         /// <summary>
         /// Aborts an existing connection attempt.
         /// </summary>
-        public void AbortConnect()
-        {
-            if (_clientPipe != null)
-            {
-                _clientPipe.AbortConnect();
-            }
-        }
+        public void AbortConnect() => _clientPipe?.AbortConnect();
 
         #endregion
     }
@@ -2092,7 +2153,7 @@ internal ContainerNamedPipeClientSessionTransportManager(
         /// Create a named pipe connection to the target process in target container and set up
         /// transport reader/writer.
         /// </summary>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             _clientPipe = new ContainerSessionNamedPipeClient(
                 _connectionInfo.ContainerProc.ProcessId,
@@ -2103,7 +2164,7 @@ internal override void CreateAsync()
             _clientPipe.Connect(_connectionInfo.OpenTimeout);
 
             // Create writer for named pipe.
-            stdInWriter = new OutOfProcessTextWriter(_clientPipe.TextWriter);
+            SetMessageWriter(_clientPipe.TextWriter);
 
             // Create reader thread for named pipe.
             StartReaderThread(_clientPipe.TextReader);
@@ -2142,7 +2203,7 @@ internal class OutOfProcessClientCommandTransportManager : BaseClientCommandTran
         internal OutOfProcessClientCommandTransportManager(
             ClientRemotePowerShell cmd,
             bool noInput,
-            OutOfProcessClientSessionTransportManagerBase sessnTM,
+            ClientSessionTransportManagerBase sessnTM,
             OutOfProcessTextWriter stdInWriter) : base(cmd, sessnTM.CryptoHelper, sessnTM)
         {
             _stdInWriter = stdInWriter;
@@ -2160,7 +2221,7 @@ internal override void ConnectAsync()
             throw new NotImplementedException(RemotingErrorIdStrings.IPCTransportConnectError);
         }
 
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             PSEtwLog.LogAnalyticInformational(PSEventId.WSManCreateCommand, PSOpcode.Connect,
                                 PSTask.CreateRunspace,
@@ -2170,7 +2231,7 @@ internal override void CreateAsync()
             _stdInWriter.WriteLine(OutOfProcessUtils.CreateCommandPacket(powershellInstanceId));
         }
 
-        internal override void CloseAsync()
+        public override void CloseAsync()
         {
             lock (syncObject)
             {
@@ -2224,7 +2285,7 @@ internal override void SendStopSignal()
             _signalTimeOutTimer.Change(60 * 1000, Timeout.Infinite);
         }
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             base.Dispose(isDisposing);
             if (isDisposing)
@@ -2449,6 +2510,12 @@ internal OutOfProcessServerSessionTransportManager(OutOfProcessTextWriter outWri
             _stdOutWriter = outWriter;
             _stdErrWriter = errWriter;
             _cmdTransportManagers = new Dictionary<Guid, OutOfProcessServerTransportManager>();
+
+            this.WSManTransportErrorOccured += (object sender, TransportErrorOccuredEventArgs e) =>
+            {
+                string msg = e.Exception.TransportMessage ?? e.Exception.InnerException?.Message ?? string.Empty;
+                _stdErrWriter.WriteLine(StringUtil.Format(RemotingErrorIdStrings.RemoteTransportError, msg));
+            };
         }
 
         #endregion
diff --git a/src/System.Management.Automation/engine/remoting/fanin/PSPrincipal.cs b/src/System.Management.Automation/engine/remoting/fanin/PSPrincipal.cs
index 1341c9e0a83..b6a3f212b33 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/PSPrincipal.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/PSPrincipal.cs
@@ -18,11 +18,9 @@ namespace System.Management.Automation.Remoting
     /// <summary>
     /// This class is used in the server side remoting scenarios. This class
     /// holds information about the incoming connection like:
-    /// (a) Client's TimeZone
-    /// (b) Connecting User information
-    /// (c) Connection String used by the user to connect to the server.
+    /// (a) Connecting User information
+    /// (b) Connection String used by the user to connect to the server.
     /// </summary>
-    [Serializable]
     public sealed class PSSenderInfo : ISerializable
     {
         #region Private Data
@@ -81,8 +79,6 @@ private PSSenderInfo(SerializationInfo info, StreamingContext context)
                 UserInfo = senderInfo.UserInfo;
                 ConnectionString = senderInfo.ConnectionString;
                 _applicationArguments = senderInfo._applicationArguments;
-
-                ClientTimeZone = senderInfo.ClientTimeZone;
             }
             catch (Exception)
             {
@@ -129,11 +125,7 @@ public PSPrincipal UserInfo
         /// <summary>
         /// Contains the TimeZone information from the client machine.
         /// </summary>
-        public TimeZoneInfo ClientTimeZone
-        {
-            get;
-            internal set;
-        }
+        public TimeZoneInfo ClientTimeZone => null;
 
         /// <summary>
         /// Connection string used by the client to connect to the server. This is
diff --git a/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs b/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs
index 6da557cca40..1d5f6916981 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/PSSessionConfigurationData.cs
@@ -80,7 +80,10 @@ internal static PSSessionConfigurationData Create(string configurationData)
         {
             PSSessionConfigurationData configuration = new PSSessionConfigurationData();
 
-            if (string.IsNullOrEmpty(configurationData)) return configuration;
+            if (string.IsNullOrEmpty(configurationData))
+            {
+                return configuration;
+            }
 
             configurationData = Unescape(configurationData);
 
@@ -224,8 +227,8 @@ private void Update(string optionName, string optionValue)
 
         private void CreateCollectionIfNecessary()
         {
-            if (_modulesToImport == null) _modulesToImport = new List<string>();
-            if (_modulesToImportInternal == null) _modulesToImportInternal = new List<object>();
+            _modulesToImport ??= new List<string>();
+            _modulesToImportInternal ??= new List<object>();
         }
 
         private const string SessionConfigToken = "SessionConfigurationData";
diff --git a/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs b/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs
index 7baebdc98ae..a0f38a78a07 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/PriorityCollection.cs
@@ -98,7 +98,7 @@ internal Fragmentor Fragmentor
                 Dbg.Assert(value != null, "Fragmentor cannot be null.");
                 _fragmentor = value;
                 // create serialized streams using fragment size.
-                string[] names = Enum.GetNames(typeof(DataPriorityType));
+                string[] names = Enum.GetNames<DataPriorityType>();
                 _dataToBeSent = new SerializedDataStream[names.Length];
                 _dataSyncObjects = new object[names.Length];
                 for (int i = 0; i < names.Length; i++)
@@ -220,21 +220,29 @@ internal byte[] ReadOrRegisterCallback(OnDataAvailableCallback callback,
             lock (_readSyncObject)
             {
                 priorityType = DataPriorityType.Default;
-
-                // send data from which ever stream that has data directly.
+                // Send data from which ever stream that has data directly.
                 byte[] result = null;
-                result = _dataToBeSent[(int)DataPriorityType.PromptResponse].ReadOrRegisterCallback(_onSendCollectionDataAvailable);
-                priorityType = DataPriorityType.PromptResponse;
+                SerializedDataStream promptDataToBeSent = _dataToBeSent[(int)DataPriorityType.PromptResponse];
+                if (promptDataToBeSent is not null)
+                {
+                    result = promptDataToBeSent.ReadOrRegisterCallback(_onSendCollectionDataAvailable);
+                    priorityType = DataPriorityType.PromptResponse;
+                }
 
                 if (result == null)
                 {
-                    result = _dataToBeSent[(int)DataPriorityType.Default].ReadOrRegisterCallback(_onSendCollectionDataAvailable);
-                    priorityType = DataPriorityType.Default;
+                    SerializedDataStream defaultDataToBeSent = _dataToBeSent[(int)DataPriorityType.Default];
+                    if (defaultDataToBeSent is not null)
+                    {
+                        result = defaultDataToBeSent.ReadOrRegisterCallback(_onSendCollectionDataAvailable);
+                        priorityType = DataPriorityType.Default;
+                    }
                 }
-                // no data to return..so register the callback.
+
+                // No data to return..so register the callback.
                 if (result == null)
                 {
-                    // register callback.
+                    // Register callback.
                     _onDataAvailableCallback = callback;
                 }
 
@@ -293,7 +301,7 @@ internal class ReceiveDataCollection : IDisposable
     {
         #region tracer
 
-        [TraceSourceAttribute("Transport", "Traces BaseWSManTransportManager")]
+        [TraceSource("Transport", "Traces BaseWSManTransportManager")]
         private static readonly PSTraceSource s_baseTracer = PSTraceSource.GetTracer("Transport", "Traces BaseWSManTransportManager");
 
         #endregion
@@ -553,11 +561,11 @@ internal void ProcessRawData(byte[] data, OnDataAvailableCallback callback)
                     PSEtwLog.LogAnalyticVerbose(
                         PSEventId.ReceivedRemotingFragment, PSOpcode.Receive, PSTask.None,
                         PSKeyword.Transport | PSKeyword.UseAlwaysAnalytic,
-                        (Int64)objectId,
-                        (Int64)fragmentId,
+                        (long)objectId,
+                        (long)fragmentId,
                         sFlag ? 1 : 0,
                         eFlag ? 1 : 0,
-                        (UInt32)blobLength,
+                        (uint)blobLength,
                         new PSETWBinaryBlob(oneFragment, FragmentedRemoteObject.HeaderLength, blobLength));
 
                     byte[] extraData = null;
@@ -676,10 +684,7 @@ internal void ProcessRawData(byte[] data, OnDataAvailableCallback callback)
         private void ResetReceiveData()
         {
             // reset resources used to store incoming data (for a single object)
-            if (_dataToProcessStream != null)
-            {
-                _dataToProcessStream.Dispose();
-            }
+            _dataToProcessStream?.Dispose();
 
             _currentObjectId = 0;
             _currentFrgId = 0;
@@ -760,7 +765,7 @@ internal class PriorityReceiveDataCollection : IDisposable
         internal PriorityReceiveDataCollection(Fragmentor defragmentor, bool createdByClientTM)
         {
             _defragmentor = defragmentor;
-            string[] names = Enum.GetNames(typeof(DataPriorityType));
+            string[] names = Enum.GetNames<DataPriorityType>();
             _recvdData = new ReceiveDataCollection[names.Length];
             for (int index = 0; index < names.Length; index++)
             {
diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs
index 6dd3614a62f..d7bce634620 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/WSManNativeAPI.cs
@@ -304,7 +304,6 @@ internal struct WSManUserNameCredentialStruct
                 /// <summary>
                 /// Making password secure.
                 /// </summary>
-                [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
                 internal IntPtr password;
             }
 
@@ -626,7 +625,6 @@ internal class WSManBinaryOrTextDataStruct
         {
             internal int bufferLength;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr data;
         }
 
@@ -637,10 +635,8 @@ internal class WSManData_ManToUn : IDisposable
         {
             private readonly WSManDataStruct _internalData;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             private IntPtr _marshalledObject = IntPtr.Zero;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             private IntPtr _marshalledBuffer = IntPtr.Zero;
 
             /// <summary>
@@ -933,7 +929,6 @@ internal struct WSManStreamIDSetStruct
         {
             internal int streamIDsCount;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr streamIDs;
         }
 
@@ -1085,7 +1080,6 @@ internal struct WSManOptionSetStruct
             /// <summary>
             /// Pointer to an array of WSManOption objects.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr options;
 
             internal bool optionsMustUnderstand;
@@ -1223,13 +1217,11 @@ internal struct WSManCommandArgSetInternal
             {
                 internal int argsCount;
 
-                [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
                 internal IntPtr args;
             }
 
             private WSManCommandArgSetInternal _internalData;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             private MarshalledObject _data;
 
             #region Managed to Unmanaged
@@ -1404,7 +1396,7 @@ internal struct WSManShellStartupInfoStruct
         /// <summary>
         /// Managed to unmanaged representation of WSMAN_SHELL_STARTUP_INFO.
         /// It converts managed values into an unmanaged compatible WSManShellStartupInfoStruct that
-        /// is marshaled into unmanaged memory.
+        /// is marshalled into unmanaged memory.
         /// </summary>
         internal struct WSManShellStartupInfo_ManToUn : IDisposable
         {
@@ -1733,7 +1725,6 @@ internal struct WSManShellAsyncCallback
             // GC handle which prevents garbage collector from collecting this delegate.
             private GCHandle _gcHandle;
 
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             private readonly IntPtr _asyncCallback;
 
             internal WSManShellAsyncCallback(WSManShellCompletionFunction callback)
@@ -2006,13 +1997,13 @@ private struct WSManBinaryDataInternal
         internal class WSManPluginRequest
         {
             /// <summary>
-            /// Unmarshaled WSMAN_SENDER_DETAILS struct.
+            /// Unmarshalled WSMAN_SENDER_DETAILS struct.
             /// </summary>
             internal WSManSenderDetails senderDetails;
             internal string locale;
             internal string resourceUri;
             /// <summary>
-            /// Unmarshaled WSMAN_OPERATION_INFO struct.
+            /// Unmarshalled WSMAN_OPERATION_INFO struct.
             /// </summary>
             internal WSManOperationInfo operationInfo;
 
@@ -2100,7 +2091,7 @@ internal class WSManSenderDetails
             internal string senderName;
             internal string authenticationMechanism;
             internal WSManCertificateDetails certificateDetails;
-            internal IntPtr clientToken; // TODO: How should this be marshaled?????
+            internal IntPtr clientToken; // TODO: How should this be marshalled?????
             internal string httpUrl;
 
             /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs
index 9382beb9b31..79d583e063f 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs
@@ -306,10 +306,16 @@ internal void CreateShell(
                     PSOpcode.Connect, PSTask.None,
                     PSKeyword.ManagedPlugin | PSKeyword.UseAlwaysAnalytic,
                     requestDetails.ToString(), senderInfo.UserInfo.Identity.Name, requestDetails.resourceUri);
-                ServerRemoteSession remoteShellSession = ServerRemoteSession.CreateServerRemoteSession(senderInfo,
-                requestDetails.resourceUri,
-                extraInfo,
-                serverTransportMgr);
+
+                ServerRemoteSession remoteShellSession = ServerRemoteSession.CreateServerRemoteSession(
+                    senderInfo: senderInfo,
+                    configurationProviderId: requestDetails.resourceUri,
+                    initializationParameters: extraInfo,
+                    transportManager: serverTransportMgr,
+                    initialCommand: null,       // Not used by WinRM endpoint.
+                    configurationName: null,    // Not used by WinRM endpoint, which has its own configuration.
+                    configurationFile: null,    // Same.
+                    initialLocation: null);     // Same.
 
                 if (remoteShellSession == null)
                 {
diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs
index e2679fcdf44..2d99a42cfb9 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginFacade.cs
@@ -33,7 +33,7 @@ namespace System.Management.Automation.Remoting
     /// <param name="extraInfo">PCWSTR.</param>
     /// <param name="startupInfo">WSMAN_SHELL_STARTUP_INFO*.</param>
     /// <param name="inboundShellInformation">WSMAN_DATA*.</param>
-    internal delegate void WSMPluginShellDelegate( // TODO: Rename to WSManPluginShellDelegate once I remove the MC++ module.
+    internal delegate void WSManPluginShellDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -45,7 +45,7 @@ internal delegate void WSMPluginShellDelegate( // TODO: Rename to WSManPluginShe
     /// </summary>
     /// <param name="pluginContext">PVOID.</param>
     /// <param name="shellContext">PVOID.</param>
-    internal delegate void WSMPluginReleaseShellContextDelegate(
+    internal delegate void WSManPluginReleaseShellContextDelegate(
         IntPtr pluginContext,
         IntPtr shellContext);
 
@@ -57,7 +57,7 @@ internal delegate void WSMPluginReleaseShellContextDelegate(
     /// <param name="shellContext">PVOID.</param>
     /// <param name="commandContext">PVOID optional.</param>
     /// <param name="inboundConnectInformation">WSMAN_DATA* optional.</param>
-    internal delegate void WSMPluginConnectDelegate(
+    internal delegate void WSManPluginConnectDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -73,7 +73,7 @@ internal delegate void WSMPluginConnectDelegate(
     /// <param name="shellContext">PVOID.</param>
     /// <param name="commandLine">PCWSTR.</param>
     /// <param name="arguments">WSMAN_COMMAND_ARG_SET*.</param>
-    internal delegate void WSMPluginCommandDelegate(
+    internal delegate void WSManPluginCommandDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -85,7 +85,7 @@ internal delegate void WSMPluginCommandDelegate(
     /// Delegate that is passed to native layer for callback on operation shutdown notifications.
     /// </summary>
     /// <param name="shutdownContext">IntPtr.</param>
-    internal delegate void WSMPluginOperationShutdownDelegate(
+    internal delegate void WSManPluginOperationShutdownDelegate(
            IntPtr shutdownContext);
 
     /// <summary>
@@ -93,7 +93,7 @@ internal delegate void WSMPluginOperationShutdownDelegate(
     /// <param name="pluginContext">PVOID.</param>
     /// <param name="shellContext">PVOID.</param>
     /// <param name="commandContext">PVOID.</param>
-    internal delegate void WSMPluginReleaseCommandContextDelegate(
+    internal delegate void WSManPluginReleaseCommandContextDelegate(
         IntPtr pluginContext,
         IntPtr shellContext,
         IntPtr commandContext);
@@ -107,7 +107,7 @@ internal delegate void WSMPluginReleaseCommandContextDelegate(
     /// <param name="commandContext">PVOID.</param>
     /// <param name="stream">PCWSTR.</param>
     /// <param name="inboundData">WSMAN_DATA*.</param>
-    internal delegate void WSMPluginSendDelegate(
+    internal delegate void WSManPluginSendDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -124,7 +124,7 @@ internal delegate void WSMPluginSendDelegate(
     /// <param name="shellContext">PVOID.</param>
     /// <param name="commandContext">PVOID optional.</param>
     /// <param name="streamSet">WSMAN_STREAM_ID_SET* optional.</param>
-    internal delegate void WSMPluginReceiveDelegate(
+    internal delegate void WSManPluginReceiveDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -140,7 +140,7 @@ internal delegate void WSMPluginReceiveDelegate(
     /// <param name="shellContext">PVOID.</param>
     /// <param name="commandContext">PVOID optional.</param>
     /// <param name="code">PCWSTR.</param>
-    internal delegate void WSMPluginSignalDelegate(
+    internal delegate void WSManPluginSignalDelegate(
         IntPtr pluginContext,
         IntPtr requestDetails,
         int flags,
@@ -160,7 +160,7 @@ internal delegate void WaitOrTimerCallbackDelegate(
     /// <summary>
     /// </summary>
     /// <param name="pluginContext">PVOID.</param>
-    internal delegate void WSMShutdownPluginDelegate(
+    internal delegate void WSManShutdownPluginDelegate(
         IntPtr pluginContext);
 
     /// <summary>
@@ -192,7 +192,7 @@ internal WSManPluginEntryDelegatesInternal UnmanagedStruct
         private GCHandle _pluginSignalGCHandle;
         private GCHandle _pluginConnectGCHandle;
         private GCHandle _shutdownPluginGCHandle;
-        private GCHandle _WSMPluginOperationShutdownGCHandle;
+        private GCHandle _WSManPluginOperationShutdownGCHandle;
 
         #endregion
 
@@ -255,57 +255,57 @@ private void populateDelegates()
             // disposal. Using GCHandle without pinning reduces fragmentation potential
             // of the managed heap.
             {
-                WSMPluginShellDelegate pluginShell = new WSMPluginShellDelegate(WSManPluginManagedEntryWrapper.WSManPluginShell);
+                WSManPluginShellDelegate pluginShell = new WSManPluginShellDelegate(WSManPluginManagedEntryWrapper.WSManPluginShell);
                 _pluginShellGCHandle = GCHandle.Alloc(pluginShell);
                 // marshal the delegate to a unmanaged function pointer so that AppDomain reference is stored correctly.
                 // Populate the outgoing structure so the caller has access to the entry points
                 _unmanagedStruct.wsManPluginShellCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShell);
             }
             {
-                WSMPluginReleaseShellContextDelegate pluginReleaseShellContext = new WSMPluginReleaseShellContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseShellContext);
+                WSManPluginReleaseShellContextDelegate pluginReleaseShellContext = new WSManPluginReleaseShellContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseShellContext);
                 _pluginReleaseShellContextGCHandle = GCHandle.Alloc(pluginReleaseShellContext);
                 _unmanagedStruct.wsManPluginReleaseShellContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseShellContext);
             }
             {
-                WSMPluginCommandDelegate pluginCommand = new WSMPluginCommandDelegate(WSManPluginManagedEntryWrapper.WSManPluginCommand);
+                WSManPluginCommandDelegate pluginCommand = new WSManPluginCommandDelegate(WSManPluginManagedEntryWrapper.WSManPluginCommand);
                 _pluginCommandGCHandle = GCHandle.Alloc(pluginCommand);
                 _unmanagedStruct.wsManPluginCommandCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginCommand);
             }
             {
-                WSMPluginReleaseCommandContextDelegate pluginReleaseCommandContext = new WSMPluginReleaseCommandContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseCommandContext);
+                WSManPluginReleaseCommandContextDelegate pluginReleaseCommandContext = new WSManPluginReleaseCommandContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseCommandContext);
                 _pluginReleaseCommandContextGCHandle = GCHandle.Alloc(pluginReleaseCommandContext);
                 _unmanagedStruct.wsManPluginReleaseCommandContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseCommandContext);
             }
             {
-                WSMPluginSendDelegate pluginSend = new WSMPluginSendDelegate(WSManPluginManagedEntryWrapper.WSManPluginSend);
+                WSManPluginSendDelegate pluginSend = new WSManPluginSendDelegate(WSManPluginManagedEntryWrapper.WSManPluginSend);
                 _pluginSendGCHandle = GCHandle.Alloc(pluginSend);
                 _unmanagedStruct.wsManPluginSendCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSend);
             }
             {
-                WSMPluginReceiveDelegate pluginReceive = new WSMPluginReceiveDelegate(WSManPluginManagedEntryWrapper.WSManPluginReceive);
+                WSManPluginReceiveDelegate pluginReceive = new WSManPluginReceiveDelegate(WSManPluginManagedEntryWrapper.WSManPluginReceive);
                 _pluginReceiveGCHandle = GCHandle.Alloc(pluginReceive);
                 _unmanagedStruct.wsManPluginReceiveCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReceive);
             }
             {
-                WSMPluginSignalDelegate pluginSignal = new WSMPluginSignalDelegate(WSManPluginManagedEntryWrapper.WSManPluginSignal);
+                WSManPluginSignalDelegate pluginSignal = new WSManPluginSignalDelegate(WSManPluginManagedEntryWrapper.WSManPluginSignal);
                 _pluginSignalGCHandle = GCHandle.Alloc(pluginSignal);
                 _unmanagedStruct.wsManPluginSignalCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSignal);
             }
             {
-                WSMPluginConnectDelegate pluginConnect = new WSMPluginConnectDelegate(WSManPluginManagedEntryWrapper.WSManPluginConnect);
+                WSManPluginConnectDelegate pluginConnect = new WSManPluginConnectDelegate(WSManPluginManagedEntryWrapper.WSManPluginConnect);
                 _pluginConnectGCHandle = GCHandle.Alloc(pluginConnect);
                 _unmanagedStruct.wsManPluginConnectCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginConnect);
             }
             {
-                WSMShutdownPluginDelegate shutdownPlugin = new WSMShutdownPluginDelegate(WSManPluginManagedEntryWrapper.ShutdownPlugin);
+                WSManShutdownPluginDelegate shutdownPlugin = new WSManShutdownPluginDelegate(WSManPluginManagedEntryWrapper.ShutdownPlugin);
                 _shutdownPluginGCHandle = GCHandle.Alloc(shutdownPlugin);
                 _unmanagedStruct.wsManPluginShutdownPluginCallbackNative = Marshal.GetFunctionPointerForDelegate(shutdownPlugin);
             }
 
             if (!Platform.IsWindows)
             {
-                WSMPluginOperationShutdownDelegate pluginShutDownDelegate = new WSMPluginOperationShutdownDelegate(WSManPluginManagedEntryWrapper.WSManPSShutdown);
-                _WSMPluginOperationShutdownGCHandle = GCHandle.Alloc(pluginShutDownDelegate);
+                WSManPluginOperationShutdownDelegate pluginShutDownDelegate = new WSManPluginOperationShutdownDelegate(WSManPluginManagedEntryWrapper.WSManPSShutdown);
+                _WSManPluginOperationShutdownGCHandle = GCHandle.Alloc(pluginShutDownDelegate);
                 _unmanagedStruct.wsManPluginShutdownCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShutDownDelegate);
             }
         }
@@ -328,7 +328,7 @@ private void CleanUpDelegates()
                 _shutdownPluginGCHandle.Free();
                 if (!Platform.IsWindows)
                 {
-                    _WSMPluginOperationShutdownGCHandle.Free();
+                    _WSManPluginOperationShutdownGCHandle.Free();
                 }
             }
         }
@@ -343,61 +343,51 @@ internal class WSManPluginEntryDelegatesInternal
             /// <summary>
             /// WsManPluginShutdownPluginCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginShutdownPluginCallbackNative;
 
             /// <summary>
             /// WSManPluginShellCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginShellCallbackNative;
 
             /// <summary>
             /// WSManPluginReleaseShellContextCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginReleaseShellContextCallbackNative;
 
             /// <summary>
             /// WSManPluginCommandCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginCommandCallbackNative;
 
             /// <summary>
             /// WSManPluginReleaseCommandContextCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginReleaseCommandContextCallbackNative;
 
             /// <summary>
             /// WSManPluginSendCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginSendCallbackNative;
 
             /// <summary>
             /// WSManPluginReceiveCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginReceiveCallbackNative;
 
             /// <summary>
             /// WSManPluginSignalCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginSignalCallbackNative;
 
             /// <summary>
             /// WSManPluginConnectCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginConnectCallbackNative;
 
             /// <summary>
             /// WSManPluginCommandCallbackNative.
             /// </summary>
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             internal IntPtr wsManPluginShutdownCallbackNative;
         }
     }
@@ -446,11 +436,7 @@ public static void ShutdownPlugin(
             IntPtr pluginContext)
         {
             WSManPluginInstance.PerformShutdown(pluginContext);
-
-            if (workerPtrs != null)
-            {
-                workerPtrs.Dispose();
-            }
+            workerPtrs?.Dispose();
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs
index 51635922e0b..54a7b66d0c1 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs
@@ -468,11 +468,12 @@ internal override void ExecuteConnect(
                     _remoteSession.ExecuteConnect(inputData, out outputData);
 
                     // construct Xml to send back
-                    string responseData = string.Format(System.Globalization.CultureInfo.InvariantCulture,
-                                    "<{0} xmlns=\"{1}\">{2}</{0}>",
-                                    WSManNativeApi.PS_CONNECTRESPONSE_XML_TAG,
-                                    WSManNativeApi.PS_XML_NAMESPACE,
-                                    Convert.ToBase64String(outputData));
+                    string responseData = string.Format(
+                        System.Globalization.CultureInfo.InvariantCulture,
+                        "<{0} xmlns=\"{1}\">{2}</{0}>",
+                        WSManNativeApi.PS_CONNECTRESPONSE_XML_TAG,
+                        WSManNativeApi.PS_XML_NAMESPACE,
+                        Convert.ToBase64String(outputData));
 
                     // TODO: currently using OperationComplete to report back the responseXml. This will need to change to use WSManReportObject
                     // that is currently internal.
@@ -769,7 +770,7 @@ internal bool ProcessArguments(
         internal void Stop(
             WSManNativeApi.WSManPluginRequest requestDetails)
         {
-            // stop the command..command will be stoped if we raise ClosingEvent on
+            // stop the command..command will be stopped if we raise ClosingEvent on
             // transport manager.
             transportMgr.PerformStop();
             WSManPluginInstance.ReportWSManOperationComplete(requestDetails, null);
diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs
index 99b2d4848bd..d4ee779b5a2 100644
--- a/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs
+++ b/src/System.Management.Automation/engine/remoting/fanin/WSManTransportManager.cs
@@ -202,8 +202,7 @@ internal static string ParseEscapeWSManErrorMessage(string errorMessage)
                 Collection<PSToken> tokens = PSParser.Tokenize(errorMessage, out parserErrors);
                 if (parserErrors.Count > 0)
                 {
-                    tracer.WriteLine(string.Format(CultureInfo.InvariantCulture,
-                        "There were errors parsing string '{0}'", errorMessage);
+                    tracer.WriteLine(string.Create(CultureInfo.InvariantCulture, $"There were errors parsing string '{errorMessage}'");
                     return errorMessage;
                 }
 
@@ -305,7 +304,7 @@ private enum CompletionNotification
 
         #region CompletionEventArgs
 
-        private class CompletionEventArgs : EventArgs
+        private sealed class CompletionEventArgs : EventArgs
         {
             internal CompletionEventArgs(CompletionNotification notification)
             {
@@ -318,18 +317,13 @@ internal CompletionEventArgs(CompletionNotification notification)
         #endregion
 
         #region Private Data
+
         // operation handles are owned by WSMan
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManSessionHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManShellOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManReceiveOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManSendOperationHandle;
+
         // this is used with WSMan callbacks to represent a session transport manager.
         private long _sessionContextID;
 
@@ -926,7 +920,9 @@ internal override void ConnectAsync()
                 {
                     // WSMan expects the data to be in XML format (which is text + xml tags)
                     // so convert byte[] into base64 encoded format
-                    string base64EncodedDataInXml = string.Format(CultureInfo.InvariantCulture, "<{0} xmlns=\"{1}\">{2}</{0}>",
+                    string base64EncodedDataInXml = string.Format(
+                        CultureInfo.InvariantCulture,
+                        "<{0} xmlns=\"{1}\">{2}</{0}>",
                         WSManNativeApi.PS_CONNECT_XML_TAG,
                         WSManNativeApi.PS_XML_NAMESPACE,
                         Convert.ToBase64String(additionalData));
@@ -1034,7 +1030,7 @@ internal override void StartReceivingData()
         /// <exception cref="PSRemotingTransportException">
         /// WSManCreateShellEx failed.
         /// </exception>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             Dbg.Assert(!isClosed, "object already disposed");
             Dbg.Assert(!string.IsNullOrEmpty(ConnectionInfo.ShellUri), "shell uri cannot be null or empty.");
@@ -1097,7 +1093,9 @@ internal override void CreateAsync()
                 {
                     // WSMan expects the data to be in XML format (which is text + xml tags)
                     // so convert byte[] into base64 encoded format
-                    string base64EncodedDataInXml = string.Format(CultureInfo.InvariantCulture, "<{0} xmlns=\"{1}\">{2}</{0}>",
+                    string base64EncodedDataInXml = string.Format(
+                        CultureInfo.InvariantCulture,
+                        "<{0} xmlns=\"{1}\">{2}</{0}>",
                         WSManNativeApi.PS_CREATION_XML_TAG,
                         WSManNativeApi.PS_XML_NAMESPACE,
                         Convert.ToBase64String(additionalData));
@@ -1189,7 +1187,7 @@ internal override void CreateAsync()
         /// Closes the pending Create,Send,Receive operations and then closes the shell and release all the resources.
         /// The caller should make sure this method is called only after calling ConnectAsync.
         /// </summary>
-        internal override void CloseAsync()
+        public override void CloseAsync()
         {
             bool shouldRaiseCloseCompleted = false;
             // let other threads release the lock before we clean up the resources.
@@ -1255,7 +1253,7 @@ internal override void CloseAsync()
         /// <param name="serverProtocolVersion">Server negotiated protocol version.</param>
         internal void AdjustForProtocolVariations(Version serverProtocolVersion)
         {
-            if (serverProtocolVersion <= RemotingConstants.ProtocolVersionWin7RTM)
+            if (serverProtocolVersion <= RemotingConstants.ProtocolVersion_2_1)
             {
                 int maxEnvSize;
                 WSManNativeApi.WSManGetSessionOptionAsDword(_wsManSessionHandle,
@@ -1399,7 +1397,8 @@ private void Initialize(Uri connectionUri, WSManConnectionInfo connectionInfo)
             if (string.IsNullOrEmpty(connectionUri.Query))
             {
                 // if there is no query string already, create one..see RFC 3986
-                connectionStr = string.Format(CultureInfo.InvariantCulture,
+                connectionStr = string.Format(
+                    CultureInfo.InvariantCulture,
                     "{0}?PSVersion={1}{2}",
                     // Trimming the last '/' as this will allow WSMan to
                     // properly apply URLPrefix.
@@ -1413,11 +1412,12 @@ private void Initialize(Uri connectionUri, WSManConnectionInfo connectionInfo)
             else
             {
                 // if there is already a query string, append using & .. see RFC 3986
-                connectionStr = string.Format(CultureInfo.InvariantCulture,
-                       "{0};PSVersion={1}{2}",
-                       connectionStr,
-                       PSVersionInfo.PSVersion,
-                       additionalUriSuffixString);
+                connectionStr = string.Format(
+                    CultureInfo.InvariantCulture,
+                    "{0};PSVersion={1}{2}",
+                    connectionStr,
+                    PSVersionInfo.PSVersion,
+                    additionalUriSuffixString);
             }
 
             WSManNativeApi.BaseWSManAuthenticationCredentials authCredentials;
@@ -1492,20 +1492,9 @@ private void Initialize(Uri connectionUri, WSManConnectionInfo connectionInfo)
             finally
             {
                 // release resources
-                if (proxyAuthCredentials != null)
-                {
-                    proxyAuthCredentials.Dispose();
-                }
-
-                if (proxyInfo != null)
-                {
-                    proxyInfo.Dispose();
-                }
-
-                if (authCredentials != null)
-                {
-                    authCredentials.Dispose();
-                }
+                proxyAuthCredentials?.Dispose();
+                proxyInfo?.Dispose();
+                authCredentials?.Dispose();
             }
 
             if (result != 0)
@@ -1640,7 +1629,7 @@ internal void ProcessWSManTransportError(TransportErrorOccuredEventArgs eventArg
         /// Log the error message in the Crimson logger and raise error handler.
         /// </summary>
         /// <param name="eventArgs"></param>
-        internal override void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
+        public override void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
         {
             // Look for a valid stack trace.
             string stackTrace;
@@ -1790,7 +1779,10 @@ internal IntPtr SessionHandle
         /// <returns>True if a session create retry has been started.</returns>
         private bool RetrySessionCreation(int sessionCreateErrorCode)
         {
-            if (_connectionRetryCount >= ConnectionInfo.MaxConnectionRetryCount) { return false; }
+            if (_connectionRetryCount >= ConnectionInfo.MaxConnectionRetryCount)
+            {
+                return false;
+            }
 
             bool retryConnect;
             switch (sessionCreateErrorCode)
@@ -2543,7 +2535,7 @@ private void SendData(byte[] data, DataPriorityType priorityType)
         #region Dispose / Destructor pattern
 
         [SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed")]
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             tracer.WriteLine("Disposing session with session context: {0} Operation Context: {1}", _sessionContextID, _wsManShellOperationHandle);
 
@@ -2623,7 +2615,10 @@ private void CloseSessionAndClearResources()
         private void DisposeWSManAPIDataAsync()
         {
             WSManAPIDataCommon tempWSManApiData = WSManAPIData;
-            if (tempWSManApiData == null) { return; }
+            if (tempWSManApiData == null)
+            {
+                return;
+            }
 
             WSManAPIData = null;
 
@@ -2643,7 +2638,6 @@ private void DisposeWSManAPIDataAsync()
         /// </summary>
         internal class WSManAPIDataCommon : IDisposable
         {
-            [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
             private IntPtr _handle;
             // if any
             private WSManNativeApi.WSManStreamIDSet_ManToUn _inputStreamSet;
@@ -2726,7 +2720,10 @@ public void Dispose()
             {
                 lock (_syncObject)
                 {
-                    if (_isDisposed) { return; }
+                    if (_isDisposed)
+                    {
+                        return;
+                    }
 
                     _isDisposed = true;
                 }
@@ -2788,18 +2785,11 @@ internal sealed class WSManClientCommandTransportManager : BaseClientCommandTran
 
         // operation handles
         private readonly IntPtr _wsManShellOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManCmdOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _cmdSignalOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManReceiveOperationHandle;
-
-        [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private IntPtr _wsManSendOperationHandle;
+
         // this is used with WSMan callbacks to represent a command transport manager.
         private long _cmdContextId;
 
@@ -2833,7 +2823,7 @@ internal sealed class WSManClientCommandTransportManager : BaseClientCommandTran
         private readonly string _cmdLine;
         private readonly WSManClientSessionTransportManager _sessnTm;
 
-        private class SendDataChunk
+        private sealed class SendDataChunk
         {
             public SendDataChunk(byte[] data, DataPriorityType type)
             {
@@ -3013,11 +3003,12 @@ internal override void ConnectAsync()
         }
 
         /// <summary>
+        /// Begin connection creation.
         /// </summary>
         /// <exception cref="PSRemotingTransportException">
         /// WSManRunShellCommandEx failed.
         /// </exception>
-        internal override void CreateAsync()
+        public override void CreateAsync()
         {
             byte[] cmdPart1 = serializedPipeline.ReadOrRegisterCallback(null);
             if (cmdPart1 != null)
@@ -3146,7 +3137,7 @@ internal override void SendStopSignal()
         /// <summary>
         /// Closes the pending Create,Send,Receive operations and then closes the shell and release all the resources.
         /// </summary>
-        internal override void CloseAsync()
+        public override void CloseAsync()
         {
             tracer.WriteLine("Closing command with command context: {0} Operation Context {1}", _cmdContextId, _wsManCmdOperationHandle);
 
@@ -3213,7 +3204,7 @@ internal void ProcessWSManTransportError(TransportErrorOccuredEventArgs eventArg
         /// Log the error message in the Crimson logger and raise error handler.
         /// </summary>
         /// <param name="eventArgs"></param>
-        internal override void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
+        public override void RaiseErrorHandler(TransportErrorOccuredEventArgs eventArgs)
         {
             // Look for a valid stack trace.
             string stackTrace;
@@ -4086,7 +4077,7 @@ internal override void StartReceivingData()
 
         #region Dispose / Destructor pattern
 
-        internal override void Dispose(bool isDisposing)
+        protected override void Dispose(bool isDisposing)
         {
             tracer.WriteLine("Disposing command with command context: {0} Operation Context: {1}", _cmdContextId, _wsManCmdOperationHandle);
             base.Dispose(isDisposing);
diff --git a/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs b/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs
index 1c2728cc6d6..6c794e21b24 100644
--- a/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs
+++ b/src/System.Management.Automation/engine/remoting/server/OutOfProcServerMediator.cs
@@ -8,7 +8,6 @@
 #if !UNIX
 using System.Security.Principal;
 #endif
-using Microsoft.Win32.SafeHandles;
 
 using Dbg = System.Management.Automation.Diagnostics;
 
@@ -73,14 +72,6 @@ protected void ProcessingThreadStart(object state)
         {
             try
             {
-#if !CORECLR
-                // CurrentUICulture is not available in Thread Class in CSS
-                // WinBlue: 621775. Thread culture is not properly set
-                // for local background jobs causing experience differences
-                // between local console and local background jobs.
-                Thread.CurrentThread.CurrentUICulture = Microsoft.PowerShell.NativeCultureResolver.UICulture;
-                Thread.CurrentThread.CurrentCulture = Microsoft.PowerShell.NativeCultureResolver.Culture;
-#endif
                 string data = state as string;
                 OutOfProcessUtils.ProcessData(data, callbacks);
             }
@@ -209,10 +200,7 @@ protected void OnSignalPacketReceived(Guid psGuid)
                     }
 
                     // dont throw if there is no cmdTM as it might have legitimately closed
-                    if (cmdTM != null)
-                    {
-                        cmdTM.Close(null);
-                    }
+                    cmdTM?.Close(null);
                 }
                 finally
                 {
@@ -253,12 +241,9 @@ protected void OnClosePacketReceived(Guid psGuid)
                 {
                     tracer.WriteMessage("OnClosePacketReceived, in progress commands count should be zero : " + _inProgressCommandsCount + ", psGuid : " + psGuid.ToString());
 
-                    if (sessionTM != null)
-                    {
-                        // it appears that when closing PowerShell ISE, therefore closing OutOfProcServerMediator, there are 2 Close command requests
-                        // changing PSRP/IPC at this point is too risky, therefore protecting about this duplication
-                        sessionTM.Close(null);
-                    }
+                    // it appears that when closing PowerShell ISE, therefore closing OutOfProcServerMediator, there are 2 Close command requests
+                    // changing PSRP/IPC at this point is too risky, therefore protecting about this duplication
+                    sessionTM?.Close(null);
 
                     tracer.WriteMessage("END calling close on session transport manager");
                     sessionTM = null;
@@ -277,10 +262,7 @@ protected void OnClosePacketReceived(Guid psGuid)
                 }
 
                 // dont throw if there is no cmdTM as it might have legitimately closed
-                if (cmdTM != null)
-                {
-                    cmdTM.Close(null);
-                }
+                cmdTM?.Close(null);
 
                 lock (_syncObject)
                 {
@@ -307,7 +289,11 @@ protected void OnCloseAckPacketReceived(Guid psGuid)
 
         #region Methods
 
-        protected OutOfProcessServerSessionTransportManager CreateSessionTransportManager(string configurationName, PSRemotingCryptoHelperServer cryptoHelper, string workingDirectory)
+        protected OutOfProcessServerSessionTransportManager CreateSessionTransportManager(
+            string configurationName,
+            string configurationFile,
+            PSRemotingCryptoHelperServer cryptoHelper,
+            string workingDirectory)
         {
             PSSenderInfo senderInfo;
 #if !UNIX
@@ -323,23 +309,38 @@ protected OutOfProcessServerSessionTransportManager CreateSessionTransportManage
             senderInfo = new PSSenderInfo(userPrincipal, "http://localhost");
 #endif
 
-            OutOfProcessServerSessionTransportManager tm = new OutOfProcessServerSessionTransportManager(originalStdOut, originalStdErr, cryptoHelper);
+            var tm = new OutOfProcessServerSessionTransportManager(
+                originalStdOut,
+                originalStdErr,
+                cryptoHelper);
 
             ServerRemoteSession.CreateServerRemoteSession(
-                senderInfo,
-                _initialCommand,
-                tm,
-                configurationName,
-                workingDirectory);
+                senderInfo: senderInfo,
+                configurationProviderId: "Microsoft.PowerShell",
+                initializationParameters: string.Empty,
+                transportManager: tm,
+                initialCommand: _initialCommand,
+                configurationName: configurationName,
+                configurationFile: configurationFile,
+                initialLocation: workingDirectory);
 
             return tm;
         }
 
-        protected void Start(string initialCommand, PSRemotingCryptoHelperServer cryptoHelper, string workingDirectory = null, string configurationName = null)
+        protected void Start(
+            string initialCommand,
+            PSRemotingCryptoHelperServer cryptoHelper,
+            string workingDirectory,
+            string configurationName,
+            string configurationFile)
         {
             _initialCommand = initialCommand;
 
-            sessionTM = CreateSessionTransportManager(configurationName, cryptoHelper, workingDirectory);
+            sessionTM = CreateSessionTransportManager(
+                configurationName: configurationName,
+                configurationFile: configurationFile,
+                cryptoHelper: cryptoHelper,
+                workingDirectory: workingDirectory);
 
             try
             {
@@ -348,10 +349,11 @@ protected void Start(string initialCommand, PSRemotingCryptoHelperServer cryptoH
                     string data = originalStdIn.ReadLine();
                     lock (_syncObject)
                     {
-                        if (sessionTM == null)
-                        {
-                            sessionTM = CreateSessionTransportManager(configurationName, cryptoHelper, workingDirectory);
-                        }
+                        sessionTM ??= CreateSessionTransportManager(
+                            configurationName: configurationName,
+                            configurationFile: configurationFile,
+                            cryptoHelper: cryptoHelper,
+                            workingDirectory: workingDirectory);
                     }
 
                     if (string.IsNullOrEmpty(data))
@@ -417,35 +419,13 @@ protected void Start(string initialCommand, PSRemotingCryptoHelperServer cryptoH
         }
 
         #endregion
-
-        #region Static Methods
-
-        internal static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs args)
-        {
-            // args can never be null.
-            Exception exception = (Exception)args.ExceptionObject;
-            // log the exception to crimson event logs
-            PSEtwLog.LogOperationalError(PSEventId.AppDomainUnhandledException,
-                PSOpcode.Close, PSTask.None,
-                PSKeyword.UseAlwaysOperational,
-                exception.GetType().ToString(), exception.Message,
-                exception.StackTrace);
-
-            PSEtwLog.LogAnalyticError(PSEventId.AppDomainUnhandledException_Analytic,
-                    PSOpcode.Close, PSTask.None,
-                    PSKeyword.ManagedPlugin | PSKeyword.UseAlwaysAnalytic,
-                    exception.GetType().ToString(), exception.Message,
-                    exception.StackTrace);
-        }
-
-        #endregion
     }
 
-    internal sealed class OutOfProcessMediator : OutOfProcessMediatorBase
+    internal sealed class StdIOProcessMediator : OutOfProcessMediatorBase
     {
         #region Private Data
 
-        private static OutOfProcessMediator s_singletonInstance;
+        private static StdIOProcessMediator s_singletonInstance;
 
         #endregion
 
@@ -453,10 +433,11 @@ internal sealed class OutOfProcessMediator : OutOfProcessMediatorBase
 
         /// <summary>
         /// The mediator will take actions from the StdIn stream and responds to them.
-        /// It will replace StdIn,StdOut and StdErr stream with TextWriter.Null's. This is
+        /// It will replace StdIn,StdOut and StdErr stream with TextWriter.Null. This is
         /// to make sure these streams are totally used by our Mediator.
         /// </summary>
-        private OutOfProcessMediator() : base(true)
+        /// <param name="combineErrOutStream">Redirects remoting errors to the Out stream.</param>
+        private StdIOProcessMediator(bool combineErrOutStream) : base(exitProcessOnError: true)
         {
             // Create input stream reader from Console standard input stream.
             // We don't use the provided Console.In TextReader because it can have
@@ -466,18 +447,22 @@ private OutOfProcessMediator() : base(true)
             // stream BOM as needed.
             originalStdIn = new StreamReader(Console.OpenStandardInput(), true);
 
-            // replacing StdIn with Null so that no other app messes with the
-            // original stream.
-            Console.SetIn(TextReader.Null);
-
-            // replacing StdOut with Null so that no other app messes with the
-            // original stream
+            // Remoting errors can optionally be written to stdErr or stdOut with
+            // special formatting.
             originalStdOut = new OutOfProcessTextWriter(Console.Out);
-            Console.SetOut(TextWriter.Null);
+            if (combineErrOutStream)
+            {
+                originalStdErr = new FormattedErrorTextWriter(Console.Out);
+            }
+            else
+            {
+                originalStdErr = new OutOfProcessTextWriter(Console.Error);
+            }
 
-            // replacing StdErr with Null so that no other app messes with the
-            // original stream
-            originalStdErr = new OutOfProcessTextWriter(Console.Error);
+            // Replacing StdIn, StdOut, StdErr with Null so that no other app messes with the
+            // original streams.
+            Console.SetIn(TextReader.Null);
+            Console.SetOut(TextWriter.Null);
             Console.SetError(TextWriter.Null);
         }
 
@@ -490,72 +475,15 @@ private OutOfProcessMediator() : base(true)
         /// </summary>
         /// <param name="initialCommand">Specifies the initialization script.</param>
         /// <param name="workingDirectory">Specifies the initial working directory. The working directory is set before the initial command.</param>
-        internal static void Run(string initialCommand, string workingDirectory)
-        {
-            lock (SyncObject)
-            {
-                if (s_singletonInstance != null)
-                {
-                    Dbg.Assert(false, "Run should not be called multiple times");
-                    return;
-                }
-
-                s_singletonInstance = new OutOfProcessMediator();
-            }
-
-#if !CORECLR // AppDomain is not available in CoreCLR
-            // Setup unhandled exception to log events
-            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomainUnhandledException);
-#endif
-            s_singletonInstance.Start(initialCommand, new PSRemotingCryptoHelperServer(), workingDirectory);
-        }
-
-        #endregion
-    }
-
-    internal sealed class SSHProcessMediator : OutOfProcessMediatorBase
-    {
-        #region Private Data
-
-        private static SSHProcessMediator s_singletonInstance;
-
-        #endregion
-
-        #region Constructors
-
-        private SSHProcessMediator() : base(true)
-        {
-#if !UNIX
-            var inputHandle = PlatformInvokes.GetStdHandle((uint)PlatformInvokes.StandardHandleId.Input);
-            originalStdIn = new StreamReader(
-                new FileStream(new SafeFileHandle(inputHandle, false), FileAccess.Read));
-
-            var outputHandle = PlatformInvokes.GetStdHandle((uint)PlatformInvokes.StandardHandleId.Output);
-            originalStdOut = new OutOfProcessTextWriter(
-                new StreamWriter(
-                    new FileStream(new SafeFileHandle(outputHandle, false), FileAccess.Write)));
-
-            var errorHandle = PlatformInvokes.GetStdHandle((uint)PlatformInvokes.StandardHandleId.Error);
-            originalStdErr = new OutOfProcessTextWriter(
-                new StreamWriter(
-                    new FileStream(new SafeFileHandle(errorHandle, false), FileAccess.Write)));
-#else
-            originalStdIn = new StreamReader(Console.OpenStandardInput(), true);
-            originalStdOut = new OutOfProcessTextWriter(
-                new StreamWriter(Console.OpenStandardOutput()));
-            originalStdErr = new OutOfProcessTextWriter(
-                new StreamWriter(Console.OpenStandardError()));
-#endif
-        }
-
-        #endregion
-
-        #region Static Methods
-
-        /// <summary>
-        /// </summary>
-        /// <param name="initialCommand"></param>
-        internal static void Run(string initialCommand)
+        /// <param name="configurationName">Specifies an optional configuration name that configures the endpoint session.</param>
+        /// <param name="configurationFile">Specifies an optional path to a configuration (.pssc) file for the session.</param>
+        /// <param name="combineErrOutStream">Specifies the option to write remoting errors to stdOut stream, with special formatting.</param>
+        internal static void Run(
+            string initialCommand,
+            string workingDirectory,
+            string configurationName,
+            string configurationFile,
+            bool combineErrOutStream)
         {
             lock (SyncObject)
             {
@@ -565,10 +493,15 @@ internal static void Run(string initialCommand)
                     return;
                 }
 
-                s_singletonInstance = new SSHProcessMediator();
+                s_singletonInstance = new StdIOProcessMediator(combineErrOutStream);
             }
 
-            s_singletonInstance.Start(initialCommand, new PSRemotingCryptoHelperServer());
+            s_singletonInstance.Start(
+                initialCommand: initialCommand,
+                cryptoHelper: new PSRemotingCryptoHelperServer(),
+                workingDirectory: workingDirectory,
+                configurationName: configurationName,
+                configurationFile: configurationFile);
         }
 
         #endregion
@@ -610,7 +543,7 @@ private NamedPipeProcessMediator(
             // Create transport reader/writers from named pipe.
             originalStdIn = namedPipeServer.TextReader;
             originalStdOut = new OutOfProcessTextWriter(namedPipeServer.TextWriter);
-            originalStdErr = new NamedPipeErrorTextWriter(namedPipeServer.TextWriter);
+            originalStdErr = new FormattedErrorTextWriter(namedPipeServer.TextWriter);
 
 #if !UNIX
             // Flow impersonation as needed.
@@ -637,36 +570,22 @@ internal static void Run(
                 s_singletonInstance = new NamedPipeProcessMediator(namedPipeServer);
             }
 
-#if !CORECLR
-            // AppDomain is not available in CoreCLR
-            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomainUnhandledException);
-#endif
-            s_singletonInstance.Start(initialCommand, new PSRemotingCryptoHelperServer(), namedPipeServer.ConfigurationName);
+            s_singletonInstance.Start(
+                initialCommand: initialCommand,
+                cryptoHelper: new PSRemotingCryptoHelperServer(),
+                workingDirectory: null,
+                configurationName: namedPipeServer.ConfigurationName,
+                configurationFile: null);
         }
 
         #endregion
     }
 
-    internal sealed class NamedPipeErrorTextWriter : OutOfProcessTextWriter
+    internal sealed class FormattedErrorTextWriter : OutOfProcessTextWriter
     {
-        #region Private Members
-
-        private const string _errorPrepend = "__NamedPipeError__:";
-
-        #endregion
-
-        #region Properties
-
-        internal static string ErrorPrepend
-        {
-            get { return _errorPrepend; }
-        }
-
-        #endregion
-
         #region Constructors
 
-        internal NamedPipeErrorTextWriter(
+        internal FormattedErrorTextWriter(
             TextWriter textWriter) : base(textWriter)
         { }
 
@@ -674,9 +593,11 @@ internal NamedPipeErrorTextWriter(
 
         #region Base class overrides
 
-        internal override void WriteLine(string data)
+        // Write error data to stream with 'ErrorPrefix' prefix that will
+        // be interpreted by the client.
+        public override void WriteLine(string data)
         {
-            string dataToWrite = (data != null) ? _errorPrepend + data : null;
+            string dataToWrite = (data != null) ? ErrorPrefix + data : null;
             base.WriteLine(dataToWrite);
         }
 
@@ -714,6 +635,16 @@ private HyperVSocketMediator()
             originalStdErr = new HyperVSocketErrorTextWriter(_hypervSocketServer.TextWriter);
         }
 
+        private HyperVSocketMediator(string token,
+            DateTimeOffset tokenCreationTime)
+            : base(false)
+        {
+            _hypervSocketServer = new RemoteSessionHyperVSocketServer(false, token: token, tokenCreationTime: tokenCreationTime);
+
+            originalStdIn = _hypervSocketServer.TextReader;
+            originalStdOut = new OutOfProcessTextWriter(_hypervSocketServer.TextWriter);
+            originalStdErr = new HyperVSocketErrorTextWriter(_hypervSocketServer.TextWriter);
+        }
         #endregion
 
         #region Static Methods
@@ -727,14 +658,32 @@ internal static void Run(
                 s_instance = new HyperVSocketMediator();
             }
 
-#if !CORECLR
-            // AppDomain is not available in CoreCLR
-            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomainUnhandledException);
-#endif
-
-            s_instance.Start(initialCommand, new PSRemotingCryptoHelperServer(), configurationName);
+            s_instance.Start(
+                initialCommand: initialCommand,
+                cryptoHelper: new PSRemotingCryptoHelperServer(),
+                workingDirectory: null,
+                configurationName: configurationName,
+                configurationFile: null);
         }
 
+        internal static void Run(
+            string initialCommand,
+            string configurationName,
+            string token,
+            DateTimeOffset tokenCreationTime)
+        {
+            lock (SyncObject)
+            {
+                s_instance = new HyperVSocketMediator(token, tokenCreationTime);
+            }
+
+            s_instance.Start(
+                initialCommand: initialCommand,
+                cryptoHelper: new PSRemotingCryptoHelperServer(),
+                workingDirectory: null,
+                configurationName: configurationName,
+                configurationFile: null);
+        }
         #endregion
     }
 
@@ -766,7 +715,7 @@ internal HyperVSocketErrorTextWriter(
 
         #region Base class overrides
 
-        internal override void WriteLine(string data)
+        public override void WriteLine(string data)
         {
             string dataToWrite = (data != null) ? _errorPrepend + data : null;
             base.WriteLine(dataToWrite);
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs
index 6a49d6f3a4a..ddeb81aae17 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerPowerShellDriver.cs
@@ -427,7 +427,10 @@ private void HandlePowerShellInvocationStateChanged(object sender,
                         if (LocalPowerShell.RunningExtraCommands)
                         {
                             // If completed successfully then allow extra commands to run.
-                            if (state == PSInvocationState.Completed) { return; }
+                            if (state == PSInvocationState.Completed)
+                            {
+                                return;
+                            }
 
                             // For failed or stopped state, extra commands cannot run and
                             // we allow this command invocation to finish.
@@ -798,11 +801,9 @@ private void HandleSessionConnected(object sender, EventArgs eventArgs)
         {
             // Close input if its active. no need to synchronize as input stream would have already been processed
             // when connect call came into PS plugin
-            if (InputCollection != null)
-            {
-                // TODO: Post an ETW event
-                InputCollection.Complete();
-            }
+
+            // TODO: Post an ETW event
+            InputCollection?.Complete();
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs
index ca7ff805c02..71dda0d0b7a 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHost.cs
@@ -327,7 +327,7 @@ public override void PushRunspace(Runspace runspace)
                 throw new PSInvalidOperationException(RemotingErrorIdStrings.ServerDriverRemoteHostAlreadyPushed);
             }
 
-            if (!(runspace is RemoteRunspace remoteRunspace))
+            if (runspace is not RemoteRunspace remoteRunspace)
             {
                 throw new PSInvalidOperationException(RemotingErrorIdStrings.ServerDriverRemoteHostNotRemoteRunspace);
             }
@@ -352,10 +352,7 @@ public override void PopRunspace()
         {
             if (_pushedRunspace != null)
             {
-                if (_debugger != null)
-                {
-                    _debugger.PopDebugger();
-                }
+                _debugger?.PopDebugger();
 
                 if (_hostSupportsPSEdit)
                 {
@@ -410,7 +407,10 @@ internal bool PropagatePop
 
         private void AddPSEditForRunspace(RemoteRunspace remoteRunspace)
         {
-            if (remoteRunspace.Events == null) { return; }
+            if (remoteRunspace.Events == null)
+            {
+                return;
+            }
 
             // Add event handler.
             remoteRunspace.Events.ReceivedEvents.PSEventReceived += HandleRemoteSessionForwardedEvent;
@@ -430,7 +430,10 @@ private void AddPSEditForRunspace(RemoteRunspace remoteRunspace)
 
         private void RemovePSEditFromRunspace(RemoteRunspace remoteRunspace)
         {
-            if (remoteRunspace.Events == null) { return; }
+            if (remoteRunspace.Events == null)
+            {
+                return;
+            }
 
             // It is possible for the popped runspace to be in a bad state after an error.
             if ((remoteRunspace.RunspaceStateInfo.State != RunspaceState.Opened) || (remoteRunspace.RunspaceAvailability != RunspaceAvailability.Available))
@@ -456,7 +459,10 @@ private void RemovePSEditFromRunspace(RemoteRunspace remoteRunspace)
 
         private void HandleRemoteSessionForwardedEvent(object sender, PSEventArgs args)
         {
-            if ((Runspace == null) || (Runspace.Events == null)) { return; }
+            if ((Runspace == null) || (Runspace.Events == null))
+            {
+                return;
+            }
 
             // Forward events from nested pushed session to parent session.
             try
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostRawUserInterface.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostRawUserInterface.cs
index 05448d02d9b..34c10e0a9a0 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostRawUserInterface.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostRawUserInterface.cs
@@ -343,10 +343,7 @@ public override void SetBufferContents(Coordinates origin, BufferCell[,] content
         // to keep the other overload in sync: LengthInBufferCells(string, int)
         public override int LengthInBufferCells(string source)
         {
-            if (source == null)
-            {
-                throw new ArgumentNullException(nameof(source));
-            }
+            ArgumentNullException.ThrowIfNull(source);
 
             return source.Length;
         }
@@ -354,10 +351,7 @@ public override int LengthInBufferCells(string source)
         // more performant than the default implementation provided by PSHostRawUserInterface
         public override int LengthInBufferCells(string source, int offset)
         {
-            if (source == null)
-            {
-                throw new ArgumentNullException(nameof(source));
-            }
+            ArgumentNullException.ThrowIfNull(source);
 
             Dbg.Assert(offset >= 0, "offset >= 0");
             Dbg.Assert(string.IsNullOrEmpty(source) || (offset < source.Length), "offset < source.Length");
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostUserInterface.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostUserInterface.cs
index 314fc25587f..76265089677 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostUserInterface.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerRemoteHostUserInterface.cs
@@ -122,6 +122,7 @@ public override Dictionary<string, PSObject> Prompt(string caption, string messa
         /// </summary>
         public override void Write(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.Write1, new object[] { message });
         }
 
@@ -130,6 +131,7 @@ public override void Write(string message)
         /// </summary>
         public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.Write2, new object[] { foregroundColor, backgroundColor, message });
         }
 
@@ -146,6 +148,7 @@ public override void WriteLine()
         /// </summary>
         public override void WriteLine(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteLine2, new object[] { message });
         }
 
@@ -154,6 +157,7 @@ public override void WriteLine(string message)
         /// </summary>
         public override void WriteLine(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteLine3, new object[] { foregroundColor, backgroundColor, message });
         }
 
@@ -162,6 +166,7 @@ public override void WriteLine(ConsoleColor foregroundColor, ConsoleColor backgr
         /// </summary>
         public override void WriteErrorLine(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteErrorLine, new object[] { message });
         }
 
@@ -170,6 +175,7 @@ public override void WriteErrorLine(string message)
         /// </summary>
         public override void WriteDebugLine(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteDebugLine, new object[] { message });
         }
 
@@ -186,6 +192,7 @@ public override void WriteProgress(long sourceId, ProgressRecord record)
         /// </summary>
         public override void WriteVerboseLine(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteVerboseLine, new object[] { message });
         }
 
@@ -194,6 +201,7 @@ public override void WriteVerboseLine(string message)
         /// </summary>
         public override void WriteWarningLine(string message)
         {
+            message = GetOutputString(message, supportsVirtualTerminal: true);
             _serverMethodExecutor.ExecuteVoidMethod(RemoteHostMethodId.WriteWarningLine, new object[] { message });
         }
 
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs b/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs
index f87f89b5bac..11761c25af8 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerRemotingProtocol2.cs
@@ -266,10 +266,7 @@ internal void DispatchMessageToPowerShell(RemoteDataObject<PSObject> rcvdData)
 
             // if data structure handler is not found, then association has already been
             // removed, discard message
-            if (dsHandler != null)
-            {
-                dsHandler.ProcessReceivedData(rcvdData);
-            }
+            dsHandler?.ProcessReceivedData(rcvdData);
         }
 
         /// <summary>
@@ -351,7 +348,7 @@ internal TypeTable TypeTable
         /// </summary>
         /// <param name="data">Data to send.</param>
         /// <remarks>This overload takes a RemoteDataObject and should
-        /// be the one thats used to send data from within this
+        /// be the one that's used to send data from within this
         /// data structure handler class</remarks>
         private void SendDataAsync(RemoteDataObject data)
         {
@@ -788,7 +785,7 @@ internal Runspace RunspaceUsedToInvokePowerShell
         /// </summary>
         /// <param name="data">Data to send.</param>
         /// <remarks>This overload takes a RemoteDataObject and should
-        /// be the one thats used to send data from within this
+        /// be the one that's used to send data from within this
         /// data structure handler class</remarks>
         private void SendDataAsync(RemoteDataObject data)
         {
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs
index 2f2675e61d0..a5e0da4968e 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerRunspacePoolDriver.cs
@@ -168,7 +168,7 @@ internal ServerRunspacePoolDriver(
             // The default server settings is to make new commands execute in the calling thread...this saves
             // thread switching time and thread pool pressure on the service.
             // Users can override the server settings only if they are administrators
-            PSThreadOptions serverThreadOptions = configData.ShellThreadOptions.HasValue ? configData.ShellThreadOptions.Value : PSThreadOptions.UseCurrentThread;
+            PSThreadOptions serverThreadOptions = configData.ShellThreadOptions ?? PSThreadOptions.UseCurrentThread;
             if (threadOptions == PSThreadOptions.Default || threadOptions == serverThreadOptions)
             {
                 RunspacePool.ThreadOptions = serverThreadOptions;
@@ -184,7 +184,7 @@ internal ServerRunspacePoolDriver(
             }
 
             // Set Thread ApartmentState for this RunspacePool
-            ApartmentState serverApartmentState = configData.ShellThreadApartmentState.HasValue ? configData.ShellThreadApartmentState.Value : Runspace.DefaultApartmentState;
+            ApartmentState serverApartmentState = configData.ShellThreadApartmentState ?? Runspace.DefaultApartmentState;
 
             if (apartmentState == ApartmentState.Unknown || apartmentState == serverApartmentState)
             {
@@ -271,10 +271,7 @@ internal void Start()
         internal void SendApplicationPrivateDataToClient()
         {
             // Include Debug mode information.
-            if (_applicationPrivateData == null)
-            {
-                _applicationPrivateData = new PSPrimitiveDictionary();
-            }
+            _applicationPrivateData ??= new PSPrimitiveDictionary();
 
             if (_serverRemoteDebugger != null)
             {
@@ -350,10 +347,7 @@ internal void Close()
                 {
                     Runspace runspaceToDispose = _remoteHost.PushedRunspace;
                     _remoteHost.PopRunspace();
-                    if (runspaceToDispose != null)
-                    {
-                        runspaceToDispose.Dispose();
-                    }
+                    runspaceToDispose?.Dispose();
                 }
 
                 DisposeRemoteDebugger();
@@ -478,7 +472,7 @@ private void SetupRemoteDebugger(Runspace runspace)
             // Remote debugger is created only when client version is PSVersion (4.0)
             // or greater, and remote session supports debugging.
             if ((_driverNestedInvoker != null) &&
-                (_clientPSVersion != null && _clientPSVersion >= PSVersionInfo.PSV4Version) &&
+                (_clientPSVersion != null && _clientPSVersion.Major >= 4) &&
                 (runspace != null && runspace.Debugger != null))
             {
                 _serverRemoteDebugger = new ServerRemoteDebugger(this, runspace, runspace.Debugger);
@@ -486,13 +480,7 @@ private void SetupRemoteDebugger(Runspace runspace)
             }
         }
 
-        private void DisposeRemoteDebugger()
-        {
-            if (_serverRemoteDebugger != null)
-            {
-                _serverRemoteDebugger.Dispose();
-            }
-        }
+        private void DisposeRemoteDebugger() => _serverRemoteDebugger?.Dispose();
 
         /// <summary>
         /// Invokes a script.
@@ -561,7 +549,7 @@ private PSDataCollection<PSObject> InvokePowerShell(PowerShell powershell, Runsp
                     Exception lastException = errorList[0] as Exception;
                     if (lastException != null)
                     {
-                        exceptionThrown = (lastException.Message != null) ? lastException.Message : string.Empty;
+                        exceptionThrown = lastException.Message ?? string.Empty;
                     }
                     else
                     {
@@ -728,7 +716,7 @@ private void HandleCreateAndInvokePowerShell(object _, RemoteDataEventArgs<Remot
             bool isNested = false;
 
             // The server would've dropped the protocol version of an older client was connecting
-            if (_serverCapability.ProtocolVersion >= RemotingConstants.ProtocolVersionWin8RTM)
+            if (_serverCapability.ProtocolVersion >= RemotingConstants.ProtocolVersion_2_2)
             {
                 isNested = RemotingDecoder.GetIsNested(data.Data);
             }
@@ -812,10 +800,7 @@ private void HandleCreateAndInvokePowerShell(object _, RemoteDataEventArgs<Remot
             {
                 // If we have a pushed runspace then execute there.
                 // Ensure debugger is enabled to the original mode it was set to.
-                if (_serverRemoteDebugger != null)
-                {
-                    _serverRemoteDebugger.CheckDebuggerState();
-                }
+                _serverRemoteDebugger?.CheckDebuggerState();
 
                 StartPowerShellCommandOnPushedRunspace(
                     powershell,
@@ -923,10 +908,7 @@ private void HandleCreateAndInvokePowerShell(object _, RemoteDataEventArgs<Remot
 
             // Invoke command normally.  Ensure debugger is enabled to the
             // original mode it was set to.
-            if (_serverRemoteDebugger != null)
-            {
-                _serverRemoteDebugger.CheckDebuggerState();
-            }
+            _serverRemoteDebugger?.CheckDebuggerState();
 
             // Invoke PowerShell on driver runspace pool.
             ServerPowerShellDriver driver = new ServerPowerShellDriver(
@@ -964,7 +946,7 @@ private bool DoesInitialSessionStateIncludeGetCommandWithListImportedSwitch()
                         {
                             IEnumerable<SessionStateCommandEntry> publicGetCommandEntries = iss
                                 .Commands["Get-Command"]
-                                .Where(entry => entry.Visibility == SessionStateEntryVisibility.Public);
+                                .Where(static entry => entry.Visibility == SessionStateEntryVisibility.Public);
                             SessionStateFunctionEntry getCommandProxy = publicGetCommandEntries.OfType<SessionStateFunctionEntry>().FirstOrDefault();
                             if (getCommandProxy != null)
                             {
@@ -1252,7 +1234,7 @@ private enum PreProcessCommandResult
             BreakpointManagement,
         }
 
-        private class DebuggerCommandArgument
+        private sealed class DebuggerCommandArgument
         {
             public DebugModes? Mode { get; set; }
 
@@ -2004,10 +1986,7 @@ public override DebuggerCommandResults ProcessCommand(PSCommand command, PSDataC
                     StringUtil.Format(DebuggerStrings.CannotProcessDebuggerCommandNotStopped));
             }
 
-            if (_processCommandCompleteEvent == null)
-            {
-                _processCommandCompleteEvent = new ManualResetEventSlim(false);
-            }
+            _processCommandCompleteEvent ??= new ManualResetEventSlim(false);
 
             _threadCommandProcessing = new ThreadCommandProcessing(command, output, _wrappedDebugger.Value, _processCommandCompleteEvent);
             try
@@ -2031,10 +2010,7 @@ public override void StopProcessCommand()
             }
 
             ThreadCommandProcessing threadCommandProcessing = _threadCommandProcessing;
-            if (threadCommandProcessing != null)
-            {
-                threadCommandProcessing.Stop();
-            }
+            threadCommandProcessing?.Stop();
         }
 
         /// <summary>
@@ -2232,15 +2208,8 @@ public void Dispose()
                 ExitDebugMode(DebuggerResumeAction.Stop);
             }
 
-            if (_nestedDebugStopCompleteEvent != null)
-            {
-                _nestedDebugStopCompleteEvent.Dispose();
-            }
-
-            if (_processCommandCompleteEvent != null)
-            {
-                _processCommandCompleteEvent.Dispose();
-            }
+            _nestedDebugStopCompleteEvent?.Dispose();
+            _processCommandCompleteEvent?.Dispose();
         }
 
         #endregion
@@ -2312,10 +2281,7 @@ public DebuggerCommandResults Invoke(ManualResetEventSlim startInvokeEvent)
             public void Stop()
             {
                 Debugger debugger = _wrappedDebugger;
-                if (debugger != null)
-                {
-                    debugger.StopProcessCommand();
-                }
+                debugger?.StopProcessCommand();
             }
 
             internal void DoInvoke()
@@ -2420,7 +2386,10 @@ private void RemoveDebuggerCallbacks()
         private void HandleDebuggerStop(object sender, DebuggerStopEventArgs e)
         {
             // Ignore if we are in restricted mode.
-            if (!IsDebuggingSupported()) { return; }
+            if (!IsDebuggingSupported())
+            {
+                return;
+            }
 
             if (LocalDebugMode)
             {
@@ -2476,7 +2445,10 @@ private void HandleDebuggerStop(object sender, DebuggerStopEventArgs e)
         private void HandleBreakpointUpdated(object sender, BreakpointUpdatedEventArgs e)
         {
             // Ignore if we are in restricted mode.
-            if (!IsDebuggingSupported()) { return; }
+            if (!IsDebuggingSupported())
+            {
+                return;
+            }
 
             if (LocalDebugMode)
             {
@@ -2527,10 +2499,7 @@ private void EnterDebugMode(bool isNestedStop)
                 {
                     // Blocking call for nested debugger execution (Debug-Runspace) stop events.
                     // The root debugger never makes two EnterDebugMode calls without an ExitDebugMode.
-                    if (_nestedDebugStopCompleteEvent == null)
-                    {
-                        _nestedDebugStopCompleteEvent = new ManualResetEventSlim(false);
-                    }
+                    _nestedDebugStopCompleteEvent ??= new ManualResetEventSlim(false);
 
                     _nestedDebugging = true;
                     OnEnterDebugMode(_nestedDebugStopCompleteEvent);
@@ -2799,7 +2768,10 @@ internal void PushDebugger(Debugger debugger)
 
         internal void PopDebugger()
         {
-            if (!_wrappedDebugger.IsOverridden) { return; }
+            if (!_wrappedDebugger.IsOverridden)
+            {
+                return;
+            }
 
             // Swap wrapped debugger.
             UnsubscribeWrappedDebugger(_wrappedDebugger.Value);
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs
index 66fe9d92730..3a9388625e6 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineDriver.cs
@@ -14,7 +14,7 @@ namespace System.Management.Automation
     /// <summary>
     /// Execution context used for stepping.
     /// </summary>
-    internal class ExecutionContextForStepping : IDisposable
+    internal sealed class ExecutionContextForStepping : IDisposable
     {
         private readonly ExecutionContext _executionContext;
         private PSInformationalBuffers _originalInformationalBuffers;
@@ -241,10 +241,7 @@ internal void Start()
 
             _eventSubscriber.FireStartSteppablePipeline(this);
 
-            if (_powershellInput != null)
-            {
-                _powershellInput.Pulse();
-            }
+            _powershellInput?.Pulse();
         }
 
         #endregion Internal Methods
@@ -262,20 +259,14 @@ internal void HandleInputEndReceived(object sender, EventArgs eventArgs)
 
             CheckAndPulseForProcessing(true);
 
-            if (_powershellInput != null)
-            {
-                _powershellInput.Pulse();
-            }
+            _powershellInput?.Pulse();
         }
 
         private void HandleSessionConnected(object sender, EventArgs eventArgs)
         {
             // Close input if its active. no need to synchronize as input stream would have already been processed
             // when connect call came into PS plugin
-            if (Input != null)
-            {
-                Input.Complete();
-            }
+            Input?.Complete();
         }
 
         /// <summary>
@@ -302,10 +293,7 @@ private void HandleStopReceived(object sender, EventArgs eventArgs)
 
             PerformStop();
 
-            if (_powershellInput != null)
-            {
-                _powershellInput.Pulse();
-            }
+            _powershellInput?.Pulse();
         }
 
         /// <summary>
@@ -326,10 +314,7 @@ private void HandleInputReceived(object sender, RemoteDataEventArgs<object> even
 
                 CheckAndPulseForProcessing(false);
 
-                if (_powershellInput != null)
-                {
-                    _powershellInput.Pulse();
-                }
+                _powershellInput?.Pulse();
             }
         }
 
diff --git a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs
index 328571647cb..cce8b0bbcd3 100644
--- a/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs
+++ b/src/System.Management.Automation/engine/remoting/server/ServerSteppablePipelineSubscriber.cs
@@ -162,7 +162,7 @@ private void HandleProcessRecord(object sender, PSEventArgs args)
                             if (!driver.NoInput || isProcessCalled)
                             {
                                 // if there is noInput then we
-                                // need to call process atleast once
+                                // need to call process at least once
                                 break;
                             }
                         }
@@ -274,11 +274,8 @@ internal void FireStartSteppablePipeline(ServerSteppablePipelineDriver driver)
         {
             lock (_syncObject)
             {
-                if (_eventManager != null)
-                {
-                    _eventManager.GenerateEvent(_startSubscriber.SourceIdentifier, this,
-                        new object[1] { new ServerSteppablePipelineDriverEventArg(driver) }, null, true, false);
-                }
+                _eventManager?.GenerateEvent(_startSubscriber.SourceIdentifier, this,
+                    new object[1] { new ServerSteppablePipelineDriverEventArg(driver) }, null, true, false);
             }
         }
 
@@ -290,11 +287,8 @@ internal void FireHandleProcessRecord(ServerSteppablePipelineDriver driver)
         {
             lock (_syncObject)
             {
-                if (_eventManager != null)
-                {
-                    _eventManager.GenerateEvent(_processSubscriber.SourceIdentifier, this,
-                        new object[1] { new ServerSteppablePipelineDriverEventArg(driver) }, null, true, false);
-                }
+                _eventManager?.GenerateEvent(_processSubscriber.SourceIdentifier, this,
+                    new object[1] { new ServerSteppablePipelineDriverEventArg(driver) }, null, true, false);
             }
         }
 
diff --git a/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs b/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs
index 7b08c674301..b1e05909d2c 100644
--- a/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs
+++ b/src/System.Management.Automation/engine/remoting/server/serverremotesession.cs
@@ -69,7 +69,7 @@ internal ServerRemoteSessionContext()
     /// </summary>
     internal class ServerRemoteSession : RemoteSession
     {
-        [TraceSourceAttribute("ServerRemoteSession", "ServerRemoteSession")]
+        [TraceSource("ServerRemoteSession", "ServerRemoteSession")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("ServerRemoteSession", "ServerRemoteSession");
 
         private readonly PSSenderInfo _senderInfo;
@@ -89,6 +89,10 @@ internal class ServerRemoteSession : RemoteSession
         // Creates a pushed remote runspace session created with this configuration name.
         private string _configurationName;
 
+        // Specifies an optional .pssc configuration file path for out-of-proc session use.
+        // The .pssc file is used to configure the runspace for the endpoint session.
+        private string _configurationFile;
+
         // Specifies an initial location of the powershell session.
         private string _initialLocation;
 
@@ -173,7 +177,9 @@ internal ServerRemoteSession(PSSenderInfo senderInfo,
         /// xml.
         /// </param>
         /// <param name="transportManager"></param>
+        /// <param name="initialCommand">Optional initial command used for OutOfProc sessions.</param>
         /// <param name="configurationName">Optional configuration endpoint name for OutOfProc sessions.</param>
+        /// <param name="configurationFile">Optional configuration file (.pssc) path for OutOfProc sessions.</param>
         /// <param name="initialLocation">Optional configuration initial location of the powershell session.</param>
         /// <returns></returns>
         /// <exception cref="InvalidOperationException">
@@ -192,8 +198,10 @@ internal static ServerRemoteSession CreateServerRemoteSession(
             string configurationProviderId,
             string initializationParameters,
             AbstractServerSessionTransportManager transportManager,
-            string configurationName = null,
-            string initialLocation = null)
+            string initialCommand,
+            string configurationName,
+            string configurationFile,
+            string initialLocation)
         {
             Dbg.Assert(
                 (senderInfo != null) && (senderInfo.UserInfo != null),
@@ -215,7 +223,9 @@ internal static ServerRemoteSession CreateServerRemoteSession(
                 initializationParameters,
                 transportManager)
             {
+                _initScriptForOutOfProcRS = initialCommand,
                 _configurationName = configurationName,
+                _configurationFile = configurationFile,
                 _initialLocation = initialLocation
             };
 
@@ -226,33 +236,6 @@ internal static ServerRemoteSession CreateServerRemoteSession(
             return result;
         }
 
-        /// <summary>
-        /// Used by OutOfProcessServerMediator to create a remote session.
-        /// </summary>
-        /// <param name="senderInfo"></param>
-        /// <param name="initializationScriptForOutOfProcessRunspace"></param>
-        /// <param name="transportManager"></param>
-        /// <param name="configurationName"></param>
-        /// <param name="initialLocation"></param>
-        /// <returns></returns>
-        internal static ServerRemoteSession CreateServerRemoteSession(
-            PSSenderInfo senderInfo,
-            string initializationScriptForOutOfProcessRunspace,
-            AbstractServerSessionTransportManager transportManager,
-            string configurationName,
-            string initialLocation)
-        {
-            ServerRemoteSession result = CreateServerRemoteSession(
-                senderInfo,
-                "Microsoft.PowerShell",
-                string.Empty,
-                transportManager,
-                configurationName: configurationName,
-                initialLocation: initialLocation);
-            result._initScriptForOutOfProcRS = initializationScriptForOutOfProcessRunspace;
-            return result;
-        }
-
         #endregion
 
         #region Overrides
@@ -723,13 +706,7 @@ internal void ExecuteConnect(byte[] connectData, out byte[] connectResponseData)
         }
 
         // pass on application private data when session is connected from new client
-        internal void HandlePostConnect()
-        {
-            if (_runspacePoolDriver != null)
-            {
-                _runspacePoolDriver.SendApplicationPrivateDataToClient();
-            }
-        }
+        internal void HandlePostConnect() => _runspacePoolDriver?.SendApplicationPrivateDataToClient();
 
         /// <summary>
         /// </summary>
@@ -749,20 +726,12 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
             RemoteDataObject<PSObject> rcvdData = createRunspaceEventArg.ReceivedData;
             Dbg.Assert(rcvdData != null, "rcvdData must be non-null");
 
-            // set the PSSenderInfo sent in the first packets
-            // This is used by the initial session state configuration providers like Exchange.
-            if (Context != null)
-            {
-                _senderInfo.ClientTimeZone = Context.ClientCapability.TimeZone;
-            }
-
             _senderInfo.ApplicationArguments = RemotingDecoder.GetApplicationArguments(rcvdData.Data);
 
             // Get Initial Session State from custom session config suppliers
             // like Exchange.
             ConfigurationDataFromXML configurationData =
-                PSSessionConfiguration.LoadEndPointConfiguration(_configProviderId,
-                    _initParameters);
+                PSSessionConfiguration.LoadEndPointConfiguration(_configProviderId, _initParameters);
             // used by Out-Of-Proc (IPC) runspace.
             configurationData.InitializationScriptForOutOfProcessRunspace = _initScriptForOutOfProcRS;
             // start with data from configuration XML and then override with data
@@ -770,8 +739,6 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
             _maxRecvdObjectSize = configurationData.MaxReceivedObjectSizeMB;
             _maxRecvdDataSizeCommand = configurationData.MaxReceivedCommandSizeMB;
 
-            DISCPowerShellConfiguration discProvider = null;
-
             if (string.IsNullOrEmpty(configurationData.ConfigFilePath))
             {
                 _sessionConfigProvider = configurationData.CreateEndPointConfigurationInstance();
@@ -779,11 +746,8 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
             else
             {
                 System.Security.Principal.WindowsPrincipal windowsPrincipal = new System.Security.Principal.WindowsPrincipal(_senderInfo.UserInfo.WindowsIdentity);
-
                 Func<string, bool> validator = (role) => windowsPrincipal.IsInRole(role);
-
-                discProvider = new DISCPowerShellConfiguration(configurationData.ConfigFilePath, validator);
-                _sessionConfigProvider = discProvider;
+                _sessionConfigProvider = new DISCPowerShellConfiguration(configurationData.ConfigFilePath, validator);
             }
 
             // exchange of ApplicationArguments and ApplicationPrivateData is be done as early as possible
@@ -794,6 +758,7 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
 
             if (configurationData.SessionConfigurationData != null)
             {
+                // Use the provided WinRM endpoint runspace configuration information.
                 try
                 {
                     rsSessionStateToUse =
@@ -804,8 +769,21 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
                     rsSessionStateToUse = _sessionConfigProvider.GetInitialSessionState(_senderInfo);
                 }
             }
+            else if (!string.IsNullOrEmpty(_configurationFile))
+            {
+                // Use the optional _configurationFile parameter to create the endpoint runspace configuration.
+                // This parameter is only used by Out-Of-Proc transports (not WinRM transports).
+                var discConfiguration = new Remoting.DISCPowerShellConfiguration(
+                    configFile: _configurationFile,
+                    roleVerifier: null, 
+                    validateFile: true);
+                rsSessionStateToUse = discConfiguration.GetInitialSessionState(_senderInfo);
+            }
             else
             {
+                // Create a runspace configuration based on the provided PSSessionConfiguration provider.
+                // This can be either a 'default' configuration, or third party configuration PSSessionConfiguration provider object.
+                // So far, only Exchange provides a custom PSSessionConfiguration provider implementation.
                 rsSessionStateToUse = _sessionConfigProvider.GetInitialSessionState(_senderInfo);
             }
 
@@ -824,32 +802,14 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
                     RemotingErrorIdStrings.PSSenderInfoDescription),
                 ScopedItemOptions.ReadOnly));
 
-            // check if the current scenario is Win7(client) to Win8(server). Add back the PSv2 version TabExpansion
-            // function if necessary.
+            // Get client PS version from PSSenderInfo.
             Version psClientVersion = null;
             if (_senderInfo.ApplicationArguments != null && _senderInfo.ApplicationArguments.ContainsKey("PSversionTable"))
             {
                 var value = PSObject.Base(_senderInfo.ApplicationArguments["PSversionTable"]) as PSPrimitiveDictionary;
-                if (value != null)
+                if (value != null && value.ContainsKey("PSVersion"))
                 {
-                    if (value.ContainsKey("WSManStackVersion"))
-                    {
-                        var wsmanStackVersion = PSObject.Base(value["WSManStackVersion"]) as Version;
-                        if (wsmanStackVersion != null && wsmanStackVersion.Major < 3)
-                        {
-                            // The client side is PSv2. This is the Win7 to Win8 scenario. We need to add the PSv2
-                            // TabExpansion function back in to keep the tab expansion functionable on the client side.
-                            rsSessionStateToUse.Commands.Add(
-                                new SessionStateFunctionEntry(
-                                    RemoteDataNameStrings.PSv2TabExpansionFunction,
-                                    RemoteDataNameStrings.PSv2TabExpansionFunctionText));
-                        }
-                    }
-
-                    if (value.ContainsKey("PSVersion"))
-                    {
-                        psClientVersion = PSObject.Base(value["PSVersion"]) as Version;
-                    }
+                    psClientVersion = PSObject.Base(value["PSVersion"]) as Version;
                 }
             }
 
@@ -907,7 +867,7 @@ private void HandleCreateRunspacePool(object sender, RemoteDataEventArgs createR
         }
 
         /// <summary>
-        /// This handler method runs the negotiation algorithm. It decides if the negotiation is succesful,
+        /// This handler method runs the negotiation algorithm. It decides if the negotiation is successful,
         /// or fails.
         /// </summary>
         /// <param name="sender"></param>
@@ -961,10 +921,7 @@ private void HandleNegotiationReceived(object sender, RemoteSessionNegotiationEv
         /// <param name="eventArgs"></param>
         private void HandleSessionDSHandlerClosing(object sender, EventArgs eventArgs)
         {
-            if (_runspacePoolDriver != null)
-            {
-                _runspacePoolDriver.Close();
-            }
+            _runspacePoolDriver?.Close();
 
             // dispose the session configuration object..this will let them
             // clean their resources.
@@ -1016,35 +973,21 @@ private bool RunServerNegotiationAlgorithm(RemoteSessionCapability clientCapabil
 
             if (onConnect)
             {
-                bool connectSupported = false;
-
-                // Win10 server can support reconstruct/reconnect for all 2.x protocol versions
-                // that support reconstruct/reconnect, Protocol 2.2+
-                // Major protocol version differences (2.x -> 3.x) are not supported.
-                // A reconstruct can only be initiated by a client that understands disconnect (2.2+),
-                // so we only need to check major versions from client and this server for compatibility.
-                if (clientProtocolVersion.Major == RemotingConstants.ProtocolVersion.Major)
+                // PS v7.6 server can support reconstruct/reconnect for all 2.x protocol versions that support reconstruct/reconnect (v2.2+).
+                // Major protocol version differences (2.x -> 3.x) are not supported. A reconstruct can only be initiated by a client that understands disconnect (v2.2+).
+                if (clientProtocolVersion == RemotingConstants.ProtocolVersion_2_2 ||
+                    clientProtocolVersion == RemotingConstants.ProtocolVersion_2_3)
                 {
-                    if (clientProtocolVersion.Minor == RemotingConstants.ProtocolVersionWin8RTM.Minor)
-                    {
-                        // Report that server is Win8 version to the client
-                        // Protocol: 2.2
-                        connectSupported = true;
-                        serverProtocolVersion = RemotingConstants.ProtocolVersionWin8RTM;
-                        Context.ServerCapability.ProtocolVersion = serverProtocolVersion;
-                    }
-                    else if (clientProtocolVersion.Minor > RemotingConstants.ProtocolVersionWin8RTM.Minor)
-                    {
-                        // All other minor versions are supported and the server returns its full capability
-                        // Protocol: 2.3, 2.4, 2.5 ...
-                        connectSupported = true;
-                    }
+                    // Report the server as the same version to the client.
+                    // Client protocol: v2.2, v2.3
+                    serverProtocolVersion = clientProtocolVersion;
+                    Context.ServerCapability.ProtocolVersion = serverProtocolVersion;
                 }
-
-                if (!connectSupported)
+                else if (!(clientProtocolVersion.Major == serverProtocolVersion.Major &&
+                           clientProtocolVersion.Minor >= serverProtocolVersion.Minor))
                 {
                     // Throw for protocol versions 2.x that don't support disconnect/reconnect.
-                    // Protocol: < 2.2
+                    // Client protocol: < 2.2
                     PSRemotingDataStructureException reasonOfFailure =
                         new PSRemotingDataStructureException(RemotingErrorIdStrings.ServerConnectFailedOnNegotiation,
                             RemoteDataNameStrings.PS_STARTUP_PROTOCOL_VERSION_NAME,
@@ -1053,47 +996,23 @@ private bool RunServerNegotiationAlgorithm(RemoteSessionCapability clientCapabil
                             RemotingConstants.ProtocolVersion);
                     throw reasonOfFailure;
                 }
+
+                // All other minor versions are supported and the server returns its full capability.
+                // Client protocol: v2.4, v2.5 ...
             }
             else
             {
-                // Win10 server can support Win8 client
-                if (clientProtocolVersion == RemotingConstants.ProtocolVersionWin8RTM &&
-                    (
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin10RTM)
-                    ))
-                {
-                    // - report that server is Win8 version to the client
-                    serverProtocolVersion = RemotingConstants.ProtocolVersionWin8RTM;
-                    Context.ServerCapability.ProtocolVersion = serverProtocolVersion;
-                }
-
-                // Win8, Win10 server can support Win7 client
-                if (clientProtocolVersion == RemotingConstants.ProtocolVersionWin7RTM &&
-                    (
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin8RTM) ||
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin10RTM)
-                    ))
+                if (clientProtocolVersion == RemotingConstants.ProtocolVersion_2_0 ||
+                    clientProtocolVersion == RemotingConstants.ProtocolVersion_2_1 ||
+                    clientProtocolVersion == RemotingConstants.ProtocolVersion_2_2 ||
+                    clientProtocolVersion == RemotingConstants.ProtocolVersion_2_3)
                 {
-                    // - report that server is Win7 version to the client
-                    serverProtocolVersion = RemotingConstants.ProtocolVersionWin7RTM;
+                    // We support the those client versions and report the server as the same version to the client.
+                    serverProtocolVersion = clientProtocolVersion;
                     Context.ServerCapability.ProtocolVersion = serverProtocolVersion;
                 }
-
-                // Win7, Win8, Win10 server can support Win7 RC client
-                if (clientProtocolVersion == RemotingConstants.ProtocolVersionWin7RC &&
-                    (
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin7RTM) ||
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin8RTM) ||
-                        (serverProtocolVersion == RemotingConstants.ProtocolVersionWin10RTM)
-                    ))
-                {
-                    // - report that server is RC version to the client
-                    serverProtocolVersion = RemotingConstants.ProtocolVersionWin7RC;
-                    Context.ServerCapability.ProtocolVersion = serverProtocolVersion;
-                }
-
-                if (!((clientProtocolVersion.Major == serverProtocolVersion.Major) &&
-                      (clientProtocolVersion.Minor >= serverProtocolVersion.Minor)))
+                else if (!(clientProtocolVersion.Major == serverProtocolVersion.Major &&
+                           clientProtocolVersion.Minor >= serverProtocolVersion.Minor))
                 {
                     PSRemotingDataStructureException reasonOfFailure =
                         new PSRemotingDataStructureException(RemotingErrorIdStrings.ServerNegotiationFailed,
diff --git a/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs b/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs
index 732e5a836ab..67d47ea404c 100644
--- a/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs
+++ b/src/System.Management.Automation/engine/remoting/server/serverremotesessionstatemachine.cs
@@ -31,7 +31,7 @@ namespace System.Management.Automation.Remoting
     /// </summary>
     internal class ServerRemoteSessionDSHandlerStateMachine
     {
-        [TraceSourceAttribute("ServerRemoteSessionDSHandlerStateMachine", "ServerRemoteSessionDSHandlerStateMachine")]
+        [TraceSource("ServerRemoteSessionDSHandlerStateMachine", "ServerRemoteSessionDSHandlerStateMachine")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("ServerRemoteSessionDSHandlerStateMachine", "ServerRemoteSessionDSHandlerStateMachine");
 
         private readonly ServerRemoteSession _session;
@@ -913,10 +913,7 @@ private void DoKeyExchange(object sender, RemoteSessionStateMachineEventArgs eve
                         {
                             // reset the timer
                             Timer tmp = Interlocked.Exchange(ref _keyExchangeTimer, null);
-                            if (tmp != null)
-                            {
-                                tmp.Dispose();
-                            }
+                            tmp?.Dispose();
                         }
 
                         // the key import would have been done
@@ -984,10 +981,7 @@ private void HandleKeyExchangeTimeout(object sender)
             Dbg.Assert(_state == RemoteSessionState.EstablishedAndKeyRequested, "timeout should only happen when waiting for a key");
 
             Timer tmp = Interlocked.Exchange(ref _keyExchangeTimer, null);
-            if (tmp != null)
-            {
-                tmp.Dispose();
-            }
+            tmp?.Dispose();
 
             PSRemotingDataStructureException exception =
                 new PSRemotingDataStructureException(RemotingErrorIdStrings.ServerKeyExchangeFailed);
diff --git a/src/System.Management.Automation/engine/runtime/Binding/Binders.cs b/src/System.Management.Automation/engine/runtime/Binding/Binders.cs
index 275529b7b3f..027c4886380 100644
--- a/src/System.Management.Automation/engine/runtime/Binding/Binders.cs
+++ b/src/System.Management.Automation/engine/runtime/Binding/Binders.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Buffers;
 using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -12,6 +13,7 @@
 using System.Linq.Expressions;
 using System.Management.Automation.Internal;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
@@ -94,7 +96,7 @@ internal static BindingRestrictions PSGetMethodArgumentRestriction(this DynamicM
             {
                 var effectiveArgType = Adapter.EffectiveArgumentType(obj.Value);
                 var methodInfo = effectiveArgType != typeof(object[])
-                    ? CachedReflectionInfo.PSInvokeMemberBinder_IsHomogenousArray.MakeGenericMethod(effectiveArgType.GetElementType())
+                    ? CachedReflectionInfo.PSInvokeMemberBinder_IsHomogeneousArray.MakeGenericMethod(effectiveArgType.GetElementType())
                     : CachedReflectionInfo.PSInvokeMemberBinder_IsHeterogeneousArray;
 
                 BindingRestrictions restrictions;
@@ -513,7 +515,7 @@ internal static BindingRestrictions GetOptionalVersionAndLanguageCheckForType(Dy
     /// The standard interop ConvertBinder is used to allow third party dynamic objects to get the first chance
     /// at the conversion in case they do support enumeration, but do not implement IEnumerable directly.
     /// </summary>
-    internal class PSEnumerableBinder : ConvertBinder
+    internal sealed class PSEnumerableBinder : ConvertBinder
     {
         private static readonly PSEnumerableBinder s_binder = new PSEnumerableBinder();
 
@@ -550,7 +552,7 @@ private DynamicMetaObject NullResult(DynamicMetaObject target)
             // The object is not enumerable from PowerShell's perspective.  Rather than raise an exception, we let the
             // caller check for null and take the appropriate action.
             return new DynamicMetaObject(
-                MaybeDebase(this, e => ExpressionCache.NullEnumerator, target),
+                MaybeDebase(this, static e => ExpressionCache.NullEnumerator, target),
                 GetRestrictions(target));
         }
 
@@ -599,7 +601,7 @@ public override DynamicMetaObject FallbackConvert(DynamicMetaObject target, Dyna
             if (targetValue.GetType().IsArray)
             {
                 return (new DynamicMetaObject(
-                    MaybeDebase(this, e => Expression.Call(Expression.Convert(e, typeof(Array)), typeof(Array).GetMethod("GetEnumerator")),
+                    MaybeDebase(this, static e => Expression.Call(Expression.Convert(e, typeof(Array)), typeof(Array).GetMethod("GetEnumerator")),
                         target),
                     GetRestrictions(target))).WriteToDebugLog(this);
             }
@@ -674,7 +676,7 @@ public override DynamicMetaObject FallbackConvert(DynamicMetaObject target, Dyna
                 }
 
                 return (new DynamicMetaObject(
-                    MaybeDebase(this, e => Expression.Call(CachedReflectionInfo.EnumerableOps_GetEnumerator, Expression.Convert(e, typeof(IEnumerable))),
+                    MaybeDebase(this, static e => Expression.Call(CachedReflectionInfo.EnumerableOps_GetEnumerator, Expression.Convert(e, typeof(IEnumerable))),
                         target),
                     GetRestrictions(target))).WriteToDebugLog(this);
             }
@@ -683,7 +685,7 @@ public override DynamicMetaObject FallbackConvert(DynamicMetaObject target, Dyna
             if (enumerator != null)
             {
                 return (new DynamicMetaObject(
-                    MaybeDebase(this, e => e.Cast(typeof(IEnumerator)), target),
+                    MaybeDebase(this, static e => e.Cast(typeof(IEnumerator)), target),
                     GetRestrictions(target))).WriteToDebugLog(this);
             }
 
@@ -780,7 +782,7 @@ private static IEnumerator PSObjectStringRule(CallSite site, object obj)
     /// <summary>
     /// This binder is used for the @() operator.
     /// </summary>
-    internal class PSToObjectArrayBinder : DynamicMetaObjectBinder
+    internal sealed class PSToObjectArrayBinder : DynamicMetaObjectBinder
     {
         private static readonly PSToObjectArrayBinder s_binder = new PSToObjectArrayBinder();
 
@@ -825,7 +827,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
             if (value is List<object>)
             {
                 return new DynamicMetaObject(
-                    Expression.Call(PSEnumerableBinder.MaybeDebase(this, e => e.Cast(typeof(List<object>)), target), CachedReflectionInfo.ObjectList_ToArray),
+                    Expression.Call(PSEnumerableBinder.MaybeDebase(this, static e => e.Cast(typeof(List<object>)), target), CachedReflectionInfo.ObjectList_ToArray),
                     PSEnumerableBinder.GetRestrictions(target)).WriteToDebugLog(this);
             }
 
@@ -836,7 +838,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
         }
     }
 
-    internal class PSPipeWriterBinder : DynamicMetaObjectBinder
+    internal sealed class PSPipeWriterBinder : DynamicMetaObjectBinder
     {
         private static readonly PSPipeWriterBinder s_binder = new PSPipeWriterBinder();
 
@@ -930,7 +932,7 @@ private static void AutomationNullRule(CallSite site, object obj, Pipe pipe, Exe
     /// The target in this binder is the RHS, the result expression is an IList where the Count matches the
     /// number of values assigned (_elements) on the left hand side of the assign.
     /// </summary>
-    internal class PSArrayAssignmentRHSBinder : DynamicMetaObjectBinder
+    internal sealed class PSArrayAssignmentRHSBinder : DynamicMetaObjectBinder
     {
         private static readonly List<PSArrayAssignmentRHSBinder> s_binders = new List<PSArrayAssignmentRHSBinder>();
         private readonly int _elements;
@@ -955,7 +957,7 @@ private PSArrayAssignmentRHSBinder(int elements)
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "MultiAssignRHSBinder {0}", _elements);
+            return string.Create(CultureInfo.InvariantCulture, $"MultiAssignRHSBinder {_elements}");
         }
 
         public override Type ReturnType { get { return typeof(IList); } }
@@ -1043,13 +1045,13 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
     /// This binder is used to convert objects to string in specific circumstances, including:
     ///
     ///     * The LHS of a format expression.  The arguments (the RHS objects) of the format
-    ///       expression are not converted to string here, that is defered to string.Format which
+    ///       expression are not converted to string here, that is deferred to string.Format which
     ///       may have some custom formatting to apply.
     ///     * The objects passed to the format expression as part of an expandable string.  In this
     ///       case, the format string is generated by the parser, so we know that there is no custom
     ///       formatting to consider.
     /// </summary>
-    internal class PSToStringBinder : DynamicMetaObjectBinder
+    internal sealed class PSToStringBinder : DynamicMetaObjectBinder
     {
         private static readonly PSToStringBinder s_binder = new PSToStringBinder();
 
@@ -1114,7 +1116,7 @@ internal static Expression InvokeToString(Expression context, Expression target)
     /// <summary>
     /// This binder is used to optimize the conversion of the result.
     /// </summary>
-    internal class PSPipelineResultToBoolBinder : DynamicMetaObjectBinder
+    internal sealed class PSPipelineResultToBoolBinder : DynamicMetaObjectBinder
     {
         private static readonly PSPipelineResultToBoolBinder s_binder = new PSPipelineResultToBoolBinder();
 
@@ -1175,9 +1177,9 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
         }
     }
 
-    internal class PSInvokeDynamicMemberBinder : DynamicMetaObjectBinder
+    internal sealed class PSInvokeDynamicMemberBinder : DynamicMetaObjectBinder
     {
-        private class KeyComparer : IEqualityComparer<PSInvokeDynamicMemberBinderKeyType>
+        private sealed class KeyComparer : IEqualityComparer<PSInvokeDynamicMemberBinderKeyType>
         {
             public bool Equals(PSInvokeDynamicMemberBinderKeyType x, PSInvokeDynamicMemberBinderKeyType y)
             {
@@ -1286,7 +1288,7 @@ public int GetHashCode(PSGetOrSetDynamicMemberBinderKeyType obj)
         }
     }
 
-    internal class PSGetDynamicMemberBinder : DynamicMetaObjectBinder
+    internal sealed class PSGetDynamicMemberBinder : DynamicMetaObjectBinder
     {
         private static readonly Dictionary<PSGetOrSetDynamicMemberBinderKeyType, PSGetDynamicMemberBinder> s_binderCache =
             new Dictionary<PSGetOrSetDynamicMemberBinderKeyType, PSGetDynamicMemberBinder>(new PSDynamicGetOrSetBinderKeyComparer());
@@ -1396,7 +1398,7 @@ internal static object GetIDictionaryMember(IDictionary hash, object key)
         }
     }
 
-    internal class PSSetDynamicMemberBinder : DynamicMetaObjectBinder
+    internal sealed class PSSetDynamicMemberBinder : DynamicMetaObjectBinder
     {
         private static readonly Dictionary<PSGetOrSetDynamicMemberBinderKeyType, PSSetDynamicMemberBinder> s_binderCache =
             new Dictionary<PSGetOrSetDynamicMemberBinderKeyType, PSSetDynamicMemberBinder>(new PSDynamicGetOrSetBinderKeyComparer());
@@ -1488,7 +1490,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
         }
     }
 
-    internal class PSSwitchClauseEvalBinder : DynamicMetaObjectBinder
+    internal sealed class PSSwitchClauseEvalBinder : DynamicMetaObjectBinder
     {
         // Increase this cache size if we add a new flag to the switch statement that:
         //    - Influences evaluation of switch elements
@@ -1608,7 +1610,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
 
     // This class implements the standard binder CreateInstanceBinder, but this binder handles the CallInfo a little differently.
     // The ArgumentNames are not used to invoke a constructor, instead they are used to set properties/fields in the attribute.
-    internal class PSAttributeGenerator : CreateInstanceBinder
+    internal sealed class PSAttributeGenerator : CreateInstanceBinder
     {
         private static readonly Dictionary<CallInfo, PSAttributeGenerator> s_binderCache =
             new Dictionary<CallInfo, PSAttributeGenerator>();
@@ -1653,7 +1655,7 @@ public override DynamicMetaObject FallbackCreateInstance(DynamicMetaObject targe
                 newConstructors,
                 invocationConstraints: null,
                 allowCastingToByRefLikeType: false,
-                args.Take(positionalArgCount).Select(arg => arg.Value).ToArray(),
+                args.Take(positionalArgCount).Select(static arg => arg.Value).ToArray(),
                 ref errorId,
                 ref errorMsg,
                 out expandParamsOnBest,
@@ -1789,7 +1791,7 @@ public override DynamicMetaObject FallbackCreateInstance(DynamicMetaObject targe
         }
     }
 
-    internal class PSCustomObjectConverter : DynamicMetaObjectBinder
+    internal sealed class PSCustomObjectConverter : DynamicMetaObjectBinder
     {
         private static readonly PSCustomObjectConverter s_binder = new PSCustomObjectConverter();
 
@@ -1825,7 +1827,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
         }
     }
 
-    internal class PSDynamicConvertBinder : DynamicMetaObjectBinder
+    internal sealed class PSDynamicConvertBinder : DynamicMetaObjectBinder
     {
         private static readonly PSDynamicConvertBinder s_binder = new PSDynamicConvertBinder();
 
@@ -1863,7 +1865,7 @@ public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObje
     /// <summary>
     /// This binder is used to copy mutable value types when assigning to variables, otherwise just assigning the target object directly.
     /// </summary>
-    internal class PSVariableAssignmentBinder : DynamicMetaObjectBinder
+    internal sealed class PSVariableAssignmentBinder : DynamicMetaObjectBinder
     {
         private static readonly PSVariableAssignmentBinder s_binder = new PSVariableAssignmentBinder();
         internal static int s_mutableValueWithInstanceMemberVersion;
@@ -2089,9 +2091,7 @@ internal static void NoteTypeHasInstanceMemberOrTypeName(Type type)
 
         internal static object CopyInstanceMembersOfValueType<T>(T t, object boxedT) where T : struct
         {
-            PSMemberInfoInternalCollection<PSMemberInfo> unused1;
-            ConsolidatedString unused2;
-            if (PSObject.HasInstanceMembers(boxedT, out unused1) || PSObject.HasInstanceTypeName(boxedT, out unused2))
+            if (PSObject.HasInstanceMembers(boxedT, out _) || PSObject.HasInstanceTypeName(boxedT, out _))
             {
                 var psobj = PSObject.AsPSObject(boxedT);
                 return PSObject.Base(psobj.Copy());
@@ -2116,7 +2116,7 @@ internal static BindingRestrictions GetVersionCheck(int expectedVersionNumber)
     /// <summary>
     /// The binder for common binary operators.  PowerShell specific binary operators are handled elsewhere.
     /// </summary>
-    internal class PSBinaryOperationBinder : BinaryOperationBinder
+    internal sealed class PSBinaryOperationBinder : BinaryOperationBinder
     {
         #region Constructors and factory methods
 
@@ -2241,7 +2241,12 @@ public override DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject targ
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "PSBinaryOperationBinder {0}{1} ver:{2}", GetOperatorText(), _scalarCompare ? " scalarOnly" : string.Empty, _version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSBinaryOperationBinder {0}{1} ver:{2}",
+                GetOperatorText(),
+                _scalarCompare ? " scalarOnly" : string.Empty,
+                _version);
         }
 
         internal static void InvalidateCache()
@@ -2713,6 +2718,14 @@ private DynamicMetaObject BinaryAdd(DynamicMetaObject target, DynamicMetaObject
                                            lhsEnumerator.Expression.Cast(typeof(IEnumerator)),
                                            rhsEnumerator.Expression.Cast(typeof(IEnumerator)));
                 }
+                else if (target.Value is object[] targetArray)
+                {
+                    // Adding 1 item to an object[]
+                    // This is an optimisation over the default EnumerableOps_AddObject.
+                    call = Expression.Call(CachedReflectionInfo.ArrayOps_AddObject,
+                                           target.Expression.Cast(typeof(object[])),
+                                           arg.Expression.Cast(typeof(object)));
+                }
                 else
                 {
                     // Adding 1 item to a list
@@ -3187,7 +3200,7 @@ private DynamicMetaObject CompareLT(DynamicMetaObject target,
             }
 
             return BinaryComparisonCommon(enumerable, target, arg)
-                ?? BinaryComparison(target, arg, e => Expression.LessThan(e, ExpressionCache.Constant(0)));
+                ?? BinaryComparison(target, arg, static e => Expression.LessThan(e, ExpressionCache.Constant(0)));
         }
 
         private DynamicMetaObject CompareLE(DynamicMetaObject target,
@@ -3207,7 +3220,7 @@ private DynamicMetaObject CompareLE(DynamicMetaObject target,
             }
 
             return BinaryComparisonCommon(enumerable, target, arg)
-                ?? BinaryComparison(target, arg, e => Expression.LessThanOrEqual(e, ExpressionCache.Constant(0)));
+                ?? BinaryComparison(target, arg, static e => Expression.LessThanOrEqual(e, ExpressionCache.Constant(0)));
         }
 
         private DynamicMetaObject CompareGT(DynamicMetaObject target,
@@ -3229,7 +3242,7 @@ private DynamicMetaObject CompareGT(DynamicMetaObject target,
             }
 
             return BinaryComparisonCommon(enumerable, target, arg)
-                ?? BinaryComparison(target, arg, e => Expression.GreaterThan(e, ExpressionCache.Constant(0)));
+                ?? BinaryComparison(target, arg, static e => Expression.GreaterThan(e, ExpressionCache.Constant(0)));
         }
 
         private DynamicMetaObject CompareGE(DynamicMetaObject target,
@@ -3251,7 +3264,7 @@ private DynamicMetaObject CompareGE(DynamicMetaObject target,
             }
 
             return BinaryComparisonCommon(enumerable, target, arg)
-                ?? BinaryComparison(target, arg, e => Expression.GreaterThanOrEqual(e, ExpressionCache.Constant(0)));
+                ?? BinaryComparison(target, arg, static e => Expression.GreaterThanOrEqual(e, ExpressionCache.Constant(0)));
         }
 
         private DynamicMetaObject BinaryComparison(DynamicMetaObject target, DynamicMetaObject arg, Func<Expression, Expression> toResult)
@@ -3411,7 +3424,7 @@ private DynamicMetaObject BinaryComparisonCommon(DynamicMetaObject targetAsEnume
     /// <summary>
     /// The binder for unary operators like !, -, or +.
     /// </summary>
-    internal class PSUnaryOperationBinder : UnaryOperationBinder
+    internal sealed class PSUnaryOperationBinder : UnaryOperationBinder
     {
         private static PSUnaryOperationBinder s_notBinder;
         private static PSUnaryOperationBinder s_bnotBinder;
@@ -3490,7 +3503,7 @@ public override DynamicMetaObject FallbackUnaryOperation(DynamicMetaObject targe
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "PSUnaryOperationBinder {0}", this.Operation);
+            return string.Create(CultureInfo.InvariantCulture, $"PSUnaryOperationBinder {this.Operation}");
         }
 
         internal DynamicMetaObject Not(DynamicMetaObject target, DynamicMetaObject errorSuggestion)
@@ -3727,7 +3740,7 @@ private DynamicMetaObject IncrDecr(DynamicMetaObject target, int valueToAdd, Dyn
     /// <summary>
     /// The binder for converting a value, e.g. [int]"42"
     /// </summary>
-    internal class PSConvertBinder : ConvertBinder
+    internal sealed class PSConvertBinder : ConvertBinder
     {
         private static readonly Dictionary<Type, PSConvertBinder> s_binderCache = new Dictionary<Type, PSConvertBinder>();
         internal int _version;
@@ -3792,7 +3805,11 @@ public override DynamicMetaObject FallbackConvert(DynamicMetaObject target, Dyna
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "PSConvertBinder [{0}]  ver:{1}", Microsoft.PowerShell.ToStringCodeMethods.Type(this.Type, true), _version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSConvertBinder [{0}]  ver:{1}",
+                Microsoft.PowerShell.ToStringCodeMethods.Type(this.Type, true),
+                _version);
         }
 
         internal static void InvalidateCache()
@@ -3926,7 +3943,7 @@ private static string StringToStringRule(CallSite site, object obj)
     /// <summary>
     /// The binder to get the value of an indexable object, e.g. $x[1]
     /// </summary>
-    internal class PSGetIndexBinder : GetIndexBinder
+    internal sealed class PSGetIndexBinder : GetIndexBinder
     {
         private static readonly Dictionary<Tuple<CallInfo, PSMethodInvocationConstraints, bool>, PSGetIndexBinder> s_binderCache
                 = new Dictionary<Tuple<CallInfo, PSMethodInvocationConstraints, bool>, PSGetIndexBinder>();
@@ -3961,12 +3978,13 @@ private PSGetIndexBinder(Tuple<CallInfo, PSMethodInvocationConstraints, bool> tu
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                                 "PSGetIndexBinder indexCount={0}{1}{2} ver:{3}",
-                                 this.CallInfo.ArgumentCount,
-                                 _allowSlicing ? string.Empty : " slicing disallowed",
-                                 _constraints == null ? string.Empty : " constraints: " + _constraints,
-                                 _version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSGetIndexBinder indexCount={0}{1}{2} ver:{3}",
+                this.CallInfo.ArgumentCount,
+                _allowSlicing ? string.Empty : " slicing disallowed",
+                _constraints == null ? string.Empty : " constraints: " + _constraints,
+                _version);
         }
 
         internal static void InvalidateCache()
@@ -3983,13 +4001,13 @@ internal static void InvalidateCache()
 
         public override DynamicMetaObject FallbackGetIndex(DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject errorSuggestion)
         {
-            if (!target.HasValue || indexes.Any(mo => !mo.HasValue))
+            if (!target.HasValue || indexes.Any(static mo => !mo.HasValue))
             {
                 return Defer(indexes.Prepend(target).ToArray()).WriteToDebugLog(this);
             }
 
             if ((target.Value is PSObject && (PSObject.Base(target.Value) != target.Value)) ||
-                indexes.Any(mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
+                indexes.Any(static mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
             {
                 return this.DeferForPSObject(indexes.Prepend(target).ToArray()).WriteToDebugLog(this);
             }
@@ -4084,7 +4102,7 @@ private DynamicMetaObject CannotIndexTarget(DynamicMetaObject target, DynamicMet
             bindingRestrictions = bindingRestrictions.Merge(BinderUtils.GetLanguageModeCheckIfHasEverUsedConstrainedLanguage());
 
             var call = Expression.Call(CachedReflectionInfo.ArrayOps_GetNonIndexable, target.Expression.Cast(typeof(object)),
-                                       Expression.NewArrayInit(typeof(object), indexes.Select(d => d.Expression.Cast(typeof(object)))));
+                                       Expression.NewArrayInit(typeof(object), indexes.Select(static d => d.Expression.Cast(typeof(object)))));
             return new DynamicMetaObject(call, bindingRestrictions);
         }
 
@@ -4267,7 +4285,7 @@ private DynamicMetaObject GetIndexArray(DynamicMetaObject target, DynamicMetaObj
                 new DynamicMetaObject(target.Expression.Cast(target.LimitType), target.PSGetTypeRestriction()),
                 new DynamicMetaObject(indexAsInt, indexes[0].PSGetTypeRestriction()),
                 target.LimitType.GetProperty("Length"),
-                (t, i) => Expression.ArrayIndex(t, i).Cast(typeof(object)));
+                static (t, i) => Expression.ArrayIndex(t, i).Cast(typeof(object)));
         }
 
         private DynamicMetaObject GetIndexMultiDimensionArray(DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject errorSuggestion)
@@ -4313,7 +4331,7 @@ private DynamicMetaObject GetIndexMultiDimensionArray(DynamicMetaObject target,
                     target.CombineRestrictions(indexes));
             }
 
-            var intIndexes = indexes.Select(index => ConvertIndex(index, typeof(int))).Where(i => i != null).ToArray();
+            var intIndexes = indexes.Select(static index => ConvertIndex(index, typeof(int))).Where(static i => i != null).ToArray();
             if (intIndexes.Length != indexes.Length)
             {
                 if (!_allowSlicing)
@@ -4477,7 +4495,7 @@ private DynamicMetaObject InvokeSlicingIndexer(DynamicMetaObject target, Dynamic
                 Expression.Call(CachedReflectionInfo.ArrayOps_SlicingIndex,
                                 target.Expression.Cast(typeof(object)),
                                 Expression.NewArrayInit(typeof(object),
-                                                        indexes.Select(dmo => dmo.Expression.Cast(typeof(object)))),
+                                                        indexes.Select(static dmo => dmo.Expression.Cast(typeof(object)))),
                                 Expression.Constant(GetNonSlicingIndexer())),
                 target.CombineRestrictions(indexes));
         }
@@ -4517,7 +4535,7 @@ private Func<object, object, object> GetNonSlicingIndexer()
     /// <summary>
     /// The binder for setting the value of an indexable element, like $x[1] = 5.
     /// </summary>
-    internal class PSSetIndexBinder : SetIndexBinder
+    internal sealed class PSSetIndexBinder : SetIndexBinder
     {
         private static readonly Dictionary<Tuple<CallInfo, PSMethodInvocationConstraints>, PSSetIndexBinder> s_binderCache
                 = new Dictionary<Tuple<CallInfo, PSMethodInvocationConstraints>, PSSetIndexBinder>();
@@ -4550,8 +4568,12 @@ private PSSetIndexBinder(Tuple<CallInfo, PSMethodInvocationConstraints> tuple)
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "PSSetIndexBinder indexCnt={0}{1} ver:{2}",
-                CallInfo.ArgumentCount, _constraints == null ? string.Empty : " constraints: " + _constraints, _version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSSetIndexBinder indexCnt={0}{1} ver:{2}",
+                CallInfo.ArgumentCount,
+                _constraints == null ? string.Empty : " constraints: " + _constraints,
+                _version);
         }
 
         internal static void InvalidateCache()
@@ -4572,13 +4594,13 @@ public override DynamicMetaObject FallbackSetIndex(
             DynamicMetaObject value,
             DynamicMetaObject errorSuggestion)
         {
-            if (!target.HasValue || indexes.Any(mo => !mo.HasValue) || !value.HasValue)
+            if (!target.HasValue || indexes.Any(static mo => !mo.HasValue) || !value.HasValue)
             {
                 return Defer(indexes.Prepend(target).Append(value).ToArray()).WriteToDebugLog(this);
             }
 
             if (target.Value is PSObject && (PSObject.Base(target.Value) != target.Value) ||
-                indexes.Any(mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
+                indexes.Any(static mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
             {
                 return this.DeferForPSObject(indexes.Prepend(target).Append(value).ToArray()).WriteToDebugLog(this);
             }
@@ -4794,7 +4816,7 @@ private DynamicMetaObject SetIndexArray(DynamicMetaObject target,
                                                 ParserStrings.ArraySliceAssignmentFailed,
                                                 Expression.Call(CachedReflectionInfo.ArrayOps_IndexStringMessage,
                                                                 Expression.NewArrayInit(typeof(object),
-                                                                                        indexes.Select(i => i.Expression.Cast(typeof(object))))));
+                                                                                        indexes.Select(static i => i.Expression.Cast(typeof(object))))));
             }
 
             var intIndex = PSGetIndexBinder.ConvertIndex(indexes[0], typeof(int));
@@ -4816,7 +4838,7 @@ private DynamicMetaObject SetIndexArray(DynamicMetaObject target,
                 new DynamicMetaObject(target.Expression.Cast(target.LimitType), target.PSGetTypeRestriction()),
                 new DynamicMetaObject(intIndex, indexes[0].PSGetTypeRestriction()),
                 new DynamicMetaObject(valueExpr, value.PSGetTypeRestriction()), target.LimitType.GetProperty("Length"),
-                (t, i, v) => Expression.Assign(Expression.ArrayAccess(t, i), v));
+                static (t, i, v) => Expression.Assign(Expression.ArrayAccess(t, i), v));
         }
 
         private DynamicMetaObject SetIndexMultiDimensionArray(DynamicMetaObject target,
@@ -4859,7 +4881,7 @@ private DynamicMetaObject SetIndexMultiDimensionArray(DynamicMetaObject target,
                                                 ExpressionCache.Constant(array.Rank),
                                                 Expression.Call(CachedReflectionInfo.ArrayOps_IndexStringMessage,
                                                                 Expression.NewArrayInit(typeof(object),
-                                                                                        indexes.Select(i => i.Expression.Cast(typeof(object))))));
+                                                                                        indexes.Select(static i => i.Expression.Cast(typeof(object))))));
             }
 
             var indexExprs = new Expression[indexes.Length];
@@ -4887,7 +4909,7 @@ private DynamicMetaObject SetIndexMultiDimensionArray(DynamicMetaObject target,
     /// </summary>
     internal class PSGetMemberBinder : GetMemberBinder
     {
-        private class KeyComparer : IEqualityComparer<PSGetMemberBinderKeyType>
+        private sealed class KeyComparer : IEqualityComparer<PSGetMemberBinderKeyType>
         {
             public bool Equals(PSGetMemberBinderKeyType x, PSGetMemberBinderKeyType y)
             {
@@ -4911,7 +4933,7 @@ public int GetHashCode(PSGetMemberBinderKeyType obj)
             }
         }
 
-        private class ReservedMemberBinder : PSGetMemberBinder
+        private sealed class ReservedMemberBinder : PSGetMemberBinder
         {
             internal ReservedMemberBinder(string name, bool ignoreCase, bool @static) : base(name, null, ignoreCase, @static, nonEnumerating: false)
             {
@@ -5007,7 +5029,7 @@ internal static void SetHasInstanceMember(string memberName)
             // This way, we can avoid the call to TryGetInstanceMember for binders when we know there aren't any instance
             // members, yet invalidate those rules once somebody adds an instance member.
 
-            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, _ => new List<PSGetMemberBinder>());
+            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, static _ => new List<PSGetMemberBinder>());
 
             lock (binderList)
             {
@@ -5038,7 +5060,7 @@ internal static void SetHasInstanceMember(string memberName)
 
         internal static void TypeTableMemberAdded(string memberName)
         {
-            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, _ => new List<PSGetMemberBinder>());
+            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, static _ => new List<PSGetMemberBinder>());
 
             lock (binderList)
             {
@@ -5061,7 +5083,7 @@ internal static void TypeTableMemberAdded(string memberName)
 
         internal static void TypeTableMemberPossiblyUpdated(string memberName)
         {
-            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, _ => new List<PSGetMemberBinder>());
+            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, static _ => new List<PSGetMemberBinder>());
 
             lock (binderList)
             {
@@ -5109,7 +5131,7 @@ private static PSGetMemberBinder Get(string memberName, Type classScope, bool @s
                         result = new PSGetMemberBinder(memberName, classScope, true, @static, nonEnumerating);
                         if (!@static)
                         {
-                            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, _ => new List<PSGetMemberBinder>());
+                            var binderList = s_binderCacheIgnoringCase.GetOrAdd(memberName, static _ => new List<PSGetMemberBinder>());
                             lock (binderList)
                             {
                                 if (binderList.Count > 0)
@@ -5146,8 +5168,13 @@ private PSGetMemberBinder(string name, Type classScope, bool ignoreCase, bool @s
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "GetMember: {0}{1}{2} ver:{3}",
-                Name, _static ? " static" : string.Empty, _nonEnumerating ? " nonEnumerating" : string.Empty, _version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "GetMember: {0}{1}{2} ver:{3}",
+                Name,
+                _static ? " static" : string.Empty,
+                _nonEnumerating ? " nonEnumerating" : string.Empty,
+                _version);
         }
 
         public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion)
@@ -5271,13 +5298,24 @@ public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, Dy
                             var propertyAccessor = adapterData.member as PropertyInfo;
                             if (propertyAccessor != null)
                             {
-                                if (propertyAccessor.GetMethod.IsFamily &&
+                                var propertyGetter = propertyAccessor.GetMethod;
+                                if ((propertyGetter.IsFamily || propertyGetter.IsFamilyOrAssembly) &&
                                     (_classScope == null || !_classScope.IsSubclassOf(propertyAccessor.DeclaringType)))
                                 {
                                     return GenerateGetPropertyException(restrictions).WriteToDebugLog(this);
                                 }
 
-                                expr = Expression.Property(targetExpr, propertyAccessor);
+                                if (propertyAccessor.PropertyType.IsByRef)
+                                {
+                                    expr = Expression.Call(
+                                        CachedReflectionInfo.ByRefOps_GetByRefPropertyValue,
+                                        targetExpr,
+                                        Expression.Constant(propertyAccessor));
+                                }
+                                else
+                                {
+                                    expr = Expression.Property(targetExpr, propertyAccessor);
+                                }
                             }
                             else
                             {
@@ -5335,13 +5373,9 @@ public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, Dy
                 if (!isGeneric || genericTypeArg != null)
                 {
                     var temp = Expression.Variable(typeof(object));
-                    if (expr == null)
-                    {
-                        // If expr is not null, it's the fallback when no member exists.  If it is null,
-                        // the fallback is the result from PropertyDoesntExist.
-
-                        expr = (errorSuggestion ?? PropertyDoesntExist(target, restrictions)).Expression;
-                    }
+                    // If expr is not null, it's the fallback when no member exists.  If it is null,
+                    // the fallback is the result from PropertyDoesntExist.
+                    expr ??= (errorSuggestion ?? PropertyDoesntExist(target, restrictions)).Expression;
 
                     var method = isGeneric
                         ? CachedReflectionInfo.PSGetMemberBinder_TryGetGenericDictionaryValue.MakeGenericMethod(genericTypeArg)
@@ -5407,18 +5441,6 @@ internal static Expression GetTargetExpr(DynamicMetaObject target, Type castToTy
 
             var type = castToType ?? ((value != null) ? value.GetType() : typeof(object));
 
-            // Assemblies in CoreCLR might not allow reflection execution on their internal types. In such case, we walk up
-            // the derivation chain to find the first public parent, and use reflection methods on the public parent.
-            if (!TypeResolver.IsPublic(type) && DotNetAdapter.DisallowPrivateReflection(type))
-            {
-                var publicType = DotNetAdapter.GetFirstPublicParentType(type);
-                if (publicType != null)
-                {
-                    type = publicType;
-                }
-                // else we'll probably fail, but the error message might be more helpful than NullReferenceException
-            }
-
             if (expr.Type != type)
             {
                 // Unbox value types (or use Nullable<T>.Value) to avoid a copy in case the value is mutated.
@@ -5495,15 +5517,30 @@ private Expression ThrowPropertyNotFoundStrict()
                                         new object[] { Name });
         }
 
-        internal static DynamicMetaObject EnsureAllowedInLanguageMode(ExecutionContext context, DynamicMetaObject target, object targetValue,
+        internal static DynamicMetaObject EnsureAllowedInLanguageMode(DynamicMetaObject target, object targetValue,
             string name, bool isStatic, DynamicMetaObject[] args, BindingRestrictions moreTests, string errorID, string resourceString)
         {
-            if (context != null && context.LanguageMode == PSLanguageMode.ConstrainedLanguage)
+            var context = LocalPipeline.GetExecutionContextFromTLS();
+            if (context == null)
             {
-                if (!IsAllowedInConstrainedLanguage(targetValue, name, isStatic))
+                return null;
+            }
+
+            if (context.LanguageMode == PSLanguageMode.ConstrainedLanguage &&
+                !IsAllowedInConstrainedLanguage(targetValue, name, isStatic))
+            {
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
                 {
                     return target.ThrowRuntimeError(args, moreTests, errorID, resourceString);
                 }
+
+                string targetName = (targetValue as Type)?.FullName ?? targetValue?.GetType().FullName;
+                SystemPolicy.LogWDACAuditMessage(
+                    context: context,
+                    title: ParameterBinderStrings.WDACBinderInvocationLogTitle,
+                    message: StringUtil.Format(ParameterBinderStrings.WDACBinderInvocationLogMessage, name, targetName ?? string.Empty),
+                    fqid: "MethodOrPropertyInvocationNotAllowed",
+                    dropIntoDebugger: true);
             }
 
             return null;
@@ -5625,8 +5662,7 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
 
             canOptimize = false;
 
-            PSMemberInfo unused;
-            Diagnostics.Assert(!TryGetInstanceMember(target.Value, Name, out unused),
+            Diagnostics.Assert(!TryGetInstanceMember(target.Value, Name, out _),
                                 "shouldn't get here if there is an instance member");
 
             PSMemberInfo memberInfo = null;
@@ -5687,19 +5723,13 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
             restrictions = versionRestriction;
 
             // When returning aliasRestrictions always include the version restriction
-            if (aliasRestrictions != null)
-            {
-                aliasRestrictions.Add(versionRestriction);
-            }
+            aliasRestrictions?.Add(versionRestriction);
 
             var alias = memberInfo as PSAliasProperty;
             if (alias != null)
             {
                 aliasConversionType = alias.ConversionType;
-                if (aliasRestrictions == null)
-                {
-                    aliasRestrictions = new List<BindingRestrictions>();
-                }
+                aliasRestrictions ??= new List<BindingRestrictions>();
 
                 memberInfo = ResolveAlias(alias, target, aliases, aliasRestrictions);
                 if (memberInfo == null)
@@ -5729,8 +5759,8 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
                             var getMethod = propertyInfo.GetGetMethod(nonPublic: true);
                             var setMethod = propertyInfo.GetSetMethod(nonPublic: true);
 
-                            if ((getMethod == null || getMethod.IsFamily || getMethod.IsPublic) &&
-                                (setMethod == null || setMethod.IsFamily || setMethod.IsPublic))
+                            if ((getMethod == null || getMethod.IsPublic || getMethod.IsFamily || getMethod.IsFamilyOrAssembly) &&
+                                (setMethod == null || setMethod.IsPublic || setMethod.IsFamily || setMethod.IsFamilyOrAssembly))
                             {
                                 memberInfo = new PSProperty(this.Name, PSObject.DotNetInstanceAdapter, target.Value, new DotNetAdapter.PropertyCacheEntry(propertyInfo));
                             }
@@ -5740,7 +5770,7 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
                             var fieldInfo = member as FieldInfo;
                             if (fieldInfo != null)
                             {
-                                if (fieldInfo.IsFamily)
+                                if (fieldInfo.IsFamily || fieldInfo.IsFamilyOrAssembly)
                                 {
                                     memberInfo = new PSProperty(this.Name, PSObject.DotNetInstanceAdapter, target.Value, new DotNetAdapter.PropertyCacheEntry(fieldInfo));
                                 }
@@ -5748,12 +5778,9 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
                             else
                             {
                                 var methodInfo = member as MethodInfo;
-                                if (methodInfo != null && (methodInfo.IsPublic || methodInfo.IsFamily))
+                                if (methodInfo != null && (methodInfo.IsPublic || methodInfo.IsFamily || methodInfo.IsFamilyOrAssembly))
                                 {
-                                    if (candidateMethods == null)
-                                    {
-                                        candidateMethods = new List<MethodBase>();
-                                    }
+                                    candidateMethods ??= new List<MethodBase>();
 
                                     candidateMethods.Add(methodInfo);
                                 }
@@ -5768,7 +5795,7 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
                     if (psMethodInfo != null)
                     {
                         var cacheEntry = (DotNetAdapter.MethodCacheEntry)psMethodInfo.adapterData;
-                        candidateMethods.AddRange(cacheEntry.methodInformationStructures.Select(e => e.method));
+                        candidateMethods.AddRange(cacheEntry.methodInformationStructures.Select(static e => e.method));
                         memberInfo = null;
                     }
 
@@ -5779,7 +5806,7 @@ internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target,
                     }
                     else
                     {
-                        DotNetAdapter.MethodCacheEntry method = new DotNetAdapter.MethodCacheEntry(candidateMethods.ToArray());
+                        DotNetAdapter.MethodCacheEntry method = new DotNetAdapter.MethodCacheEntry(candidateMethods);
                         memberInfo = PSMethod.Create(this.Name, PSObject.DotNetInstanceAdapter, null, method);
                     }
                 }
@@ -5846,10 +5873,7 @@ internal static object GetAdaptedValue(object obj, string member)
             }
 
             var adapterSet = PSObject.GetMappedAdapter(obj, context?.TypeTable);
-            if (memberInfo == null)
-            {
-                memberInfo = adapterSet.OriginalAdapter.BaseGetMember<PSMemberInfo>(obj, member);
-            }
+            memberInfo ??= adapterSet.OriginalAdapter.BaseGetMember<PSMemberInfo>(obj, member);
 
             if (memberInfo == null && adapterSet.DotNetAdapter != null)
             {
@@ -5936,7 +5960,7 @@ internal static bool TryGetGenericDictionaryValue<T>(IDictionary<string, T> hash
     /// </summary>
     internal class PSSetMemberBinder : SetMemberBinder
     {
-        private class KeyComparer : IEqualityComparer<PSSetMemberBinderKeyType>
+        private sealed class KeyComparer : IEqualityComparer<PSSetMemberBinderKeyType>
         {
             public bool Equals(PSSetMemberBinderKeyType x, PSSetMemberBinderKeyType y)
             {
@@ -5998,7 +6022,12 @@ public PSSetMemberBinder(string name, bool ignoreCase, bool @static, Type classS
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "SetMember: {0}{1} ver:{2}", _static ? "static " : string.Empty, Name, _getMemberBinder._version);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "SetMember: {0}{1} ver:{2}",
+                _static ? "static " : string.Empty,
+                Name,
+                _getMemberBinder._version);
         }
 
         private static Expression GetTransformedExpression(IEnumerable<ArgumentTransformationAttribute> transformationAttributes, Expression originalExpression)
@@ -6165,10 +6194,9 @@ public override DynamicMetaObject FallbackSetMember(DynamicMetaObject target, Dy
             {
                 restrictions = restrictions.Merge(BinderUtils.GetLanguageModeCheckIfHasEverUsedConstrainedLanguage());
 
-                // Validate that this is allowed in the current language mode
-                var context = LocalPipeline.GetExecutionContextFromTLS();
+                // Validate that this is allowed in the current language mode.
                 DynamicMetaObject runtimeError = PSGetMemberBinder.EnsureAllowedInLanguageMode(
-                    context, target, targetValue, Name, _static, new[] { value }, restrictions,
+                    target, targetValue, Name, _static, new[] { value }, restrictions,
                     "PropertySetterNotSupportedInConstrainedLanguage", ParserStrings.PropertySetConstrainedLanguage);
                 if (runtimeError != null)
                 {
@@ -6265,7 +6293,8 @@ public override DynamicMetaObject FallbackSetMember(DynamicMetaObject target, Dy
                         var targetExpr = _static ? null : PSGetMemberBinder.GetTargetExpr(target, data.member.DeclaringType);
                         if (propertyInfo != null)
                         {
-                            if (propertyInfo.SetMethod.IsFamily &&
+                            var propertySetter = propertyInfo.SetMethod;
+                            if ((propertySetter.IsFamily || propertySetter.IsFamilyOrAssembly) &&
                                 (_classScope == null || !_classScope.IsSubclassOf(propertyInfo.DeclaringType)))
                             {
                                 return GeneratePropertyAssignmentException(restrictions).WriteToDebugLog(this);
@@ -6450,10 +6479,7 @@ internal static object SetAdaptedValue(object obj, string member, object value)
                 }
 
                 var adapterSet = PSObject.GetMappedAdapter(obj, context?.TypeTable);
-                if (memberInfo == null)
-                {
-                    memberInfo = adapterSet.OriginalAdapter.BaseGetMember<PSMemberInfo>(obj, member);
-                }
+                memberInfo ??= adapterSet.OriginalAdapter.BaseGetMember<PSMemberInfo>(obj, member);
 
                 if (memberInfo == null && adapterSet.DotNetAdapter != null)
                 {
@@ -6508,8 +6534,23 @@ public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, Dynam
         }
     }
 
-    internal class PSInvokeMemberBinder : InvokeMemberBinder
+    internal sealed class PSInvokeMemberBinder : InvokeMemberBinder
     {
+        [TraceSource("MethodInvocation", "Traces the invocation of .NET methods.")]
+        internal static readonly PSTraceSource MethodInvocationTracer =
+            PSTraceSource.GetTracer(
+                "MethodInvocation",
+                "Traces the invocation of .NET methods.",
+                false);
+
+        private static readonly SearchValues<string> s_whereSearchValues = SearchValues.Create(
+            ["Where", "PSWhere"],
+            StringComparison.OrdinalIgnoreCase);
+
+        private static readonly SearchValues<string> s_foreachSearchValues = SearchValues.Create(
+            ["ForEach", "PSForEach"],
+            StringComparison.OrdinalIgnoreCase);
+
         internal enum MethodInvocationType
         {
             Ordinary,
@@ -6519,7 +6560,7 @@ internal enum MethodInvocationType
             NonVirtual,
         }
 
-        private class KeyComparer : IEqualityComparer<PSInvokeMemberBinderKeyType>
+        private sealed class KeyComparer : IEqualityComparer<PSInvokeMemberBinderKeyType>
         {
             public bool Equals(PSInvokeMemberBinderKeyType x, PSInvokeMemberBinderKeyType y)
             {
@@ -6605,21 +6646,27 @@ private PSInvokeMemberBinder(string name,
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "PSInvokeMember: {0}{1}{2} ver:{3} args:{4} constraints:<{5}>", _static ? "static " : string.Empty, _propertySetter ? "propset " : string.Empty,
-                Name, _getMemberBinder._version, CallInfo.ArgumentCount, _invocationConstraints != null ? _invocationConstraints.ToString() : string.Empty);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSInvokeMember: {0}{1}{2} ver:{3} args:{4} constraints:<{5}>",
+                _static ? "static " : string.Empty,
+                _propertySetter ? "propset " : string.Empty,
+                Name,
+                _getMemberBinder._version,
+                CallInfo.ArgumentCount,
+                _invocationConstraints != null ? _invocationConstraints.ToString() : string.Empty);
         }
 
         public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion)
         {
-            if (!target.HasValue || args.Any(arg => !arg.HasValue))
+            if (!target.HasValue || args.Any(static arg => !arg.HasValue))
             {
                 return Defer(args.Prepend(target).ToArray());
             }
 
             // Defer COM objects or arguments wrapped in PSObjects
             if ((target.Value is PSObject && (PSObject.Base(target.Value) != target.Value)) ||
-                args.Any(mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
+                args.Any(static mo => mo.Value is PSObject && (PSObject.Base(mo.Value) != mo.Value)))
             {
                 object baseObject = PSObject.Base(target.Value);
                 if (baseObject != null && Marshal.IsComObject(baseObject))
@@ -6650,14 +6697,16 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
                         Expression.Call(Expression.NewArrayInit(typeof(object)), CachedReflectionInfo.IEnumerable_GetEnumerator),
                         BindingRestrictions.GetInstanceRestriction(Expression.Call(CachedReflectionInfo.PSObject_Base, target.Expression), null))
                         .WriteToDebugLog(this);
-                    BindingRestrictions argRestrictions = args.Aggregate(BindingRestrictions.Empty, (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
+                    BindingRestrictions argRestrictions = args.Aggregate(BindingRestrictions.Empty, static (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
 
-                    if (string.Equals(Name, "Where", StringComparison.OrdinalIgnoreCase))
+                    // We need to pass the empty enumerator to the ForEach/Where operators, so that they can return an empty collection.
+                    // The ForEach/Where operators will not be able to call the script block if the enumerator is empty.
+                    if (s_whereSearchValues.Contains(Name))
                     {
                         return InvokeWhereOnCollection(emptyEnumerator, args, argRestrictions).WriteToDebugLog(this);
                     }
 
-                    if (string.Equals(Name, "ForEach", StringComparison.OrdinalIgnoreCase))
+                    if (s_foreachSearchValues.Contains(Name))
                     {
                         return InvokeForEachOnCollection(emptyEnumerator, args, argRestrictions).WriteToDebugLog(this);
                     }
@@ -6695,7 +6744,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
                     Expression.Call(CachedReflectionInfo.PSInvokeMemberBinder_TryGetInstanceMethod,
                                     target.Expression.Cast(typeof(object)), Expression.Constant(Name), methodInfoVar),
                     Expression.Call(methodInfoVar, CachedReflectionInfo.PSMethodInfo_Invoke,
-                                    Expression.NewArrayInit(typeof(object), args.Select(dmo => dmo.Expression.Cast(typeof(object))))),
+                                    Expression.NewArrayInit(typeof(object), args.Select(static dmo => dmo.Expression.Cast(typeof(object))))),
                     this.GetUpdateExpression(typeof(object)));
 
                 return (new DynamicMetaObject(Expression.Block(new[] { methodInfoVar }, expr),
@@ -6706,7 +6755,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
             bool canOptimize;
             Type aliasConversionType;
             var methodInfo = _getMemberBinder.GetPSMemberInfo(target, out restrictions, out canOptimize, out aliasConversionType, MemberTypes.Method) as PSMethodInfo;
-            restrictions = args.Aggregate(restrictions, (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
+            restrictions = args.Aggregate(restrictions, static (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
 
             // If the process has ever used ConstrainedLanguage, then we need to add the language mode
             // to the binding restrictions, and check whether it is allowed. We can't limit
@@ -6715,10 +6764,9 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
             {
                 restrictions = restrictions.Merge(BinderUtils.GetLanguageModeCheckIfHasEverUsedConstrainedLanguage());
 
-                // Validate that this is allowed in the current language mode
-                var context = LocalPipeline.GetExecutionContextFromTLS();
+                // Validate that this is allowed in the current language mode.
                 DynamicMetaObject runtimeError = PSGetMemberBinder.EnsureAllowedInLanguageMode(
-                    context, target, targetValue, Name, _static, args, restrictions,
+                    target, targetValue, Name, _static, args, restrictions,
                     "MethodInvocationNotSupportedInConstrainedLanguage", ParserStrings.InvokeMethodConstrainedLanguage);
                 if (runtimeError != null)
                 {
@@ -6738,7 +6786,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
                         PSGetMemberBinder.GetTargetExpr(target, typeof(object)),
                         Expression.Constant(Name),
                         Expression.NewArrayInit(typeof(object),
-                                                args.Take(args.Length - 1).Select(arg => arg.Expression.Cast(typeof(object)))),
+                                                args.Take(args.Length - 1).Select(static arg => arg.Expression.Cast(typeof(object)))),
                         args.Last().Expression.Cast(typeof(object)));
                 }
                 else
@@ -6748,7 +6796,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
                         PSGetMemberBinder.GetTargetExpr(target, typeof(object)),
                         Expression.Constant(Name),
                         Expression.NewArrayInit(typeof(object),
-                                                args.Select(arg => arg.Expression.Cast(typeof(object)))));
+                                                args.Select(static arg => arg.Expression.Cast(typeof(object)))));
                 }
 
                 return new DynamicMetaObject(call, restrictions).WriteToDebugLog(this);
@@ -6800,7 +6848,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
                                     Expression.Constant(scriptMethod.Script),
                                     target.Expression.Cast(typeof(object)),
                                     Expression.NewArrayInit(typeof(object),
-                                                            args.Select(e => e.Expression.Cast(typeof(object))))),
+                                                            args.Select(static e => e.Expression.Cast(typeof(object))))),
                     restrictions).WriteToDebugLog(this);
             }
 
@@ -6838,12 +6886,12 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
             if (!_static && !_nonEnumerating && target.Value != AutomationNull.Value)
             {
                 // Invoking Where and ForEach operators on collections.
-                if (string.Equals(Name, "Where", StringComparison.OrdinalIgnoreCase))
+                if (s_whereSearchValues.Contains(Name))
                 {
                     return InvokeWhereOnCollection(target, args, restrictions).WriteToDebugLog(this);
                 }
 
-                if (string.Equals(Name, "ForEach", StringComparison.OrdinalIgnoreCase))
+                if (s_foreachSearchValues.Contains(Name))
                 {
                     return InvokeForEachOnCollection(target, args, restrictions).WriteToDebugLog(this);
                 }
@@ -6915,6 +6963,17 @@ internal static DynamicMetaObject InvokeDotNetMethod(
                     expr = Expression.Block(expr, ExpressionCache.AutomationNullConstant);
                 }
 
+                if (MethodInvocationTracer.IsEnabled)
+                {
+                    expr = Expression.Block(
+                        Expression.Call(
+                            Expression.Constant(MethodInvocationTracer),
+                            CachedReflectionInfo.PSTraceSource_WriteLine,
+                            Expression.Constant("Invoking method: {0}"),
+                            Expression.Constant(result.methodDefinition)),
+                        expr);
+                }
+
                 // If we're calling SteppablePipeline.{Begin|Process|End}, we don't want
                 // to wrap exceptions - this is very much a special case to help error
                 // propagation and ensure errors are attributed to the correct code (the
@@ -6967,7 +7026,7 @@ public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target,
                 DynamicExpression.Dynamic(
                     new PSInvokeBinder(CallInfo),
                     typeof(object),
-                    args.Prepend(target).Select(dmo => dmo.Expression)
+                    args.Prepend(target).Select(static dmo => dmo.Expression)
                 ),
                 target.Restrictions.Merge(BindingRestrictions.Combine(args))
             ));
@@ -6995,7 +7054,7 @@ internal static MethodInfo FindBestMethod(DynamicMetaObject target,
                     data.methodInformationStructures,
                     invocationConstraints,
                     allowCastingToByRefLikeType: true,
-                    args.Select(arg => arg.Value == AutomationNull.Value ? null : arg.Value).ToArray(),
+                    args.Select(static arg => arg.Value == AutomationNull.Value ? null : arg.Value).ToArray(),
                     ref errorId,
                     ref errorMsg,
                     out expandParameters,
@@ -7077,6 +7136,7 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                 invocationType != MethodInvocationType.NonVirtual;
             var parameters = mi.GetParameters();
             var argExprs = new Expression[parameters.Length];
+            var argsToLog = new List<Expression>(Math.Max(parameters.Length, args.Length));
 
             for (int i = 0; i < parameters.Length; ++i)
             {
@@ -7101,16 +7161,21 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
 
                     if (expandParameters)
                     {
-                        argExprs[i] = Expression.NewArrayInit(
-                            paramElementType,
-                            args.Skip(i).Select(
-                                a => a.CastOrConvertMethodArgument(
+                        IEnumerable<Expression> elements = args
+                            .Skip(i)
+                            .Select(a =>
+                                a.CastOrConvertMethodArgument(
                                     paramElementType,
                                     paramName,
                                     mi.Name,
                                     allowCastingToByRefLikeType: false,
                                     temps,
-                                    initTemps)));
+                                    initTemps))
+                            .ToList();
+
+                        argExprs[i] = Expression.NewArrayInit(paramElementType, elements);
+                        // User specified the element arguments, so we log them instead of the compiler-created array.
+                        argsToLog.AddRange(elements);
                     }
                     else
                     {
@@ -7121,16 +7186,35 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                             allowCastingToByRefLikeType: false,
                             temps,
                             initTemps);
+
                         argExprs[i] = arg;
+                        argsToLog.Add(arg);
                     }
                 }
                 else if (i >= args.Length)
                 {
-                    Diagnostics.Assert(parameters[i].IsOptional,
+                    // We don't log the default value for an optional parameter, as it's not specified by the user.
+                    Diagnostics.Assert(
+                        parameters[i].IsOptional,
                         "if there are too few arguments, FindBestMethod should only succeed if parameters are optional");
+
                     var argValue = parameters[i].DefaultValue;
                     if (argValue == null)
                     {
+                        if (parameterType.IsByRef)
+                        {
+                            // When the default value is null for a ByRef parameter (e.g. an optional `in` parameter
+                            // using `default`), expression trees cannot create Expression.Default for the T& type.
+                            // In that case we switch to the element type and use Default(TElement) instead.
+                            parameterType = parameterType.GetElementType();
+                        }
+                        argExprs[i] = Expression.Default(parameterType);
+                    }
+                    else if (!parameters[i].HasDefaultValue && parameterType != typeof(object) && argValue == Type.Missing)
+                    {
+                        // If the method contains just [Optional] without a default value set then we cannot use
+                        // Type.Missing as a placeholder. Instead we use the default value for that type. Only
+                        // exception to this rule is when the parameter type is object.
                         argExprs[i] = Expression.Default(parameterType);
                     }
                     else
@@ -7158,17 +7242,25 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                         var psRefValue = Expression.Property(args[i].Expression.Cast(typeof(PSReference)), CachedReflectionInfo.PSReference_Value);
                         initTemps.Add(Expression.Assign(temp, psRefValue.Convert(temp.Type)));
                         copyOutTemps.Add(Expression.Assign(psRefValue, temp.Cast(typeof(object))));
+
                         argExprs[i] = temp;
+                        argsToLog.Add(temp);
                     }
                     else
                     {
-                        argExprs[i] = args[i].CastOrConvertMethodArgument(
+                        var convertedArg = args[i].CastOrConvertMethodArgument(
                             parameterType,
                             paramName,
                             mi.Name,
                             allowCastingToByRefLikeType,
                             temps,
                             initTemps);
+
+                        argExprs[i] = convertedArg;
+                        // If the converted arg is a byref-like type, then we log the original arg.
+                        argsToLog.Add(convertedArg.Type.IsByRefLike
+                            ? args[i].Expression
+                            : convertedArg);
                     }
                 }
             }
@@ -7185,7 +7277,7 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                         CachedReflectionInfo.ClassOps_CallBaseCtor,
                         targetExpr,
                         Expression.Constant(constructorInfo, typeof(ConstructorInfo)),
-                        Expression.NewArrayInit(typeof(object), argExprs.Select(x => x.Cast(typeof(object)))));
+                        Expression.NewArrayInit(typeof(object), argExprs.Select(static x => x.Cast(typeof(object)))));
                 }
                 else
                 {
@@ -7202,7 +7294,7 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                             : CachedReflectionInfo.ClassOps_CallMethodNonVirtually,
                         PSGetMemberBinder.GetTargetExpr(target, methodInfo.DeclaringType),
                         Expression.Constant(methodInfo, typeof(MethodInfo)),
-                        Expression.NewArrayInit(typeof(object), argExprs.Select(x => x.Cast(typeof(object)))));
+                        Expression.NewArrayInit(typeof(object), argExprs.Select(static x => x.Cast(typeof(object)))));
                 }
                 else
                 {
@@ -7214,6 +7306,12 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                 }
             }
 
+            // We need to add one expression to log the .NET invocation before actually invoking:
+            //  - Log method invocation to AMSI Notifications (can throw PSSecurityException)
+            //  - Invoke method
+            string targetName = mi.ReflectedType?.FullName ?? string.Empty;
+            string methodName = mi.Name is ".ctor" ? "new" : mi.Name;
+
             if (temps.Count > 0)
             {
                 if (call.Type != typeof(void) && copyOutTemps.Count > 0)
@@ -7224,22 +7322,27 @@ internal static Expression InvokeMethod(MethodBase mi, DynamicMetaObject target,
                     copyOutTemps.Add(retValue);
                 }
 
+                AddMemberInvocationLogging(initTemps, targetName, methodName, argsToLog);
                 call = Expression.Block(call.Type, temps, initTemps.Append(call).Concat(copyOutTemps));
             }
+            else
+            {
+                call = AddMemberInvocationLogging(call, targetName, methodName, argsToLog);
+            }
 
             return call;
         }
 
         private DynamicMetaObject InvokeMemberOnCollection(DynamicMetaObject targetEnumerator, DynamicMetaObject[] args, Type typeForMessage, BindingRestrictions restrictions)
         {
-            var d = DynamicExpression.Dynamic(this, this.ReturnType, args.Select(a => a.Expression).Prepend(ExpressionCache.NullConstant));
+            var d = DynamicExpression.Dynamic(this, this.ReturnType, args.Select(static a => a.Expression).Prepend(ExpressionCache.NullConstant));
             return new DynamicMetaObject(
                 Expression.Call(CachedReflectionInfo.EnumerableOps_MethodInvoker,
                                 Expression.Constant(this.GetNonEnumeratingBinder()),
                                 Expression.Constant(d.DelegateType, typeof(Type)),
                                 targetEnumerator.Expression,
                                 Expression.NewArrayInit(typeof(object),
-                                                        args.Select(a => a.Expression.Cast(typeof(object)))),
+                                                        args.Select(static a => a.Expression.Cast(typeof(object)))),
                                 Expression.Constant(typeForMessage, typeof(Type))
                                 ),
                 targetEnumerator.Restrictions.Merge(restrictions));
@@ -7248,14 +7351,11 @@ private DynamicMetaObject InvokeMemberOnCollection(DynamicMetaObject targetEnume
         private static DynamicMetaObject GetTargetAsEnumerable(DynamicMetaObject target)
         {
             var enumerableTarget = PSEnumerableBinder.IsEnumerable(target);
-            if (enumerableTarget == null)
-            {
-                // Wrap the target in an array.
-                enumerableTarget = PSEnumerableBinder.IsEnumerable(
-                    new DynamicMetaObject(
-                        Expression.NewArrayInit(typeof(object), target.Expression.Cast(typeof(object))),
-                        target.GetSimpleTypeRestriction()));
-            }
+            // If null wrap the target in an array.
+            enumerableTarget ??= PSEnumerableBinder.IsEnumerable(
+                new DynamicMetaObject(
+                    Expression.NewArrayInit(typeof(object), target.Expression.Cast(typeof(object))),
+                    target.GetSimpleTypeRestriction()));
 
             return enumerableTarget;
         }
@@ -7340,7 +7440,7 @@ private DynamicMetaObject InvokeForEachOnCollection(DynamicMetaObject targetEnum
             if (args.Length > 1)
             {
                 argsToPass = Expression.NewArrayInit(typeof(object),
-                                      args.Skip(1).Select(a => a.Expression.Cast(typeof(object))));
+                                      args.Skip(1).Select(static a => a.Expression.Cast(typeof(object))));
             }
             else
             {
@@ -7355,18 +7455,22 @@ private DynamicMetaObject InvokeForEachOnCollection(DynamicMetaObject targetEnum
 
         #region Runtime helpers
 
-        internal static bool IsHomogenousArray<T>(object[] args)
+        internal static bool IsHomogeneousArray<T>(object[] args)
         {
             if (args.Length == 0)
             {
                 return false;
             }
 
-            return args.All(element =>
-                            {
-                                var obj = PSObject.Base(element);
-                                return obj != null && obj.GetType().Equals(typeof(T));
-                            });
+            foreach (object element in args)
+            {
+                if (Adapter.GetObjectType(element, debase: true) != typeof(T))
+                {
+                    return false;
+                }
+            }
+
+            return true;
         }
 
         internal static bool IsHeterogeneousArray(object[] args)
@@ -7394,11 +7498,15 @@ internal static bool IsHeterogeneousArray(object[] args)
                 return true;
             }
 
-            return args.Skip(1).Any(element =>
-                                    {
-                                        var obj = PSObject.Base(element);
-                                        return obj == null || !firstType.Equals(obj.GetType());
-                                    });
+            for (int i = 1; i < args.Length; i++)
+            {
+                if (Adapter.GetObjectType(args[i], debase: true) != firstType)
+                {
+                    return true;
+                }
+            }
+
+            return false;
         }
 
         internal static object InvokeAdaptedMember(object obj, string methodName, object[] args)
@@ -7420,7 +7528,7 @@ internal static object InvokeAdaptedMember(object obj, string methodName, object
             // As a last resort, we invoke 'Where' and 'ForEach' operators on singletons like
             //    ([pscustomobject]@{ foo = 'bar' }).Foreach({$_})
             //    ([pscustomobject]@{ foo = 'bar' }).Where({1})
-            if (string.Equals(methodName, "Where", StringComparison.OrdinalIgnoreCase))
+            if (s_whereSearchValues.Contains(methodName))
             {
                 var enumerator = (new object[] { obj }).GetEnumerator();
                 switch (args.Length)
@@ -7436,10 +7544,23 @@ internal static object InvokeAdaptedMember(object obj, string methodName, object
                 }
             }
 
-            if (string.Equals(methodName, "Foreach", StringComparison.OrdinalIgnoreCase))
+            if (s_foreachSearchValues.Contains(methodName))
             {
                 var enumerator = (new object[] { obj }).GetEnumerator();
-                return EnumerableOps.ForEach(enumerator, args[0], Array.Empty<object>());
+                object[] argsToPass;
+
+                if (args.Length > 1)
+                {
+                    int length = args.Length - 1;
+                    argsToPass = new object[length];
+                    Array.Copy(args, sourceIndex: 1, argsToPass, destinationIndex: 0, length: length);
+                }
+                else
+                {
+                    argsToPass = Array.Empty<object>();
+                }
+
+                return EnumerableOps.ForEach(enumerator, args[0], argsToPass);
             }
 
             throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), null,
@@ -7499,6 +7620,55 @@ internal static void InvalidateCache()
             }
         }
 
+#nullable enable
+        private static Expression AddMemberInvocationLogging(
+            Expression expr,
+            string targetName,
+            string name,
+            List<Expression> args)
+        {
+#if UNIX
+            // For efficiency this is a no-op on non-Windows platforms.
+            return expr;
+#else
+            Expression[] invocationArgs = new Expression[args.Count];
+            for (int i = 0; i < args.Count; i++)
+            {
+                invocationArgs[i] = args[i].Cast(typeof(object));
+            }
+
+            return Expression.Block(
+                Expression.Call(
+                    CachedReflectionInfo.MemberInvocationLoggingOps_LogMemberInvocation,
+                    Expression.Constant(targetName),
+                    Expression.Constant(name),
+                    Expression.NewArrayInit(typeof(object), invocationArgs)),
+                expr);
+#endif
+        }
+
+        private static void AddMemberInvocationLogging(
+            List<Expression> exprs,
+            string targetName,
+            string name,
+            List<Expression> args)
+        {
+#if !UNIX
+            Expression[] invocationArgs = new Expression[args.Count];
+            for (int i = 0; i < args.Count; i++)
+            {
+                invocationArgs[i] = args[i].Cast(typeof(object));
+            }
+
+            exprs.Add(Expression.Call(
+                CachedReflectionInfo.MemberInvocationLoggingOps_LogMemberInvocation,
+                Expression.Constant(targetName),
+                Expression.Constant(name),
+                Expression.NewArrayInit(typeof(object), invocationArgs)));
+#endif
+        }
+#nullable disable
+
         #endregion
     }
 
@@ -7509,7 +7679,7 @@ internal class PSCreateInstanceBinder : CreateInstanceBinder
         private readonly bool _publicTypeOnly;
         private int _version;
 
-        private class KeyComparer : IEqualityComparer<Tuple<CallInfo, PSMethodInvocationConstraints, bool>>
+        private sealed class KeyComparer : IEqualityComparer<Tuple<CallInfo, PSMethodInvocationConstraints, bool>>
         {
             public bool Equals(Tuple<CallInfo, PSMethodInvocationConstraints, bool> x,
                                Tuple<CallInfo, PSMethodInvocationConstraints, bool> y)
@@ -7569,13 +7739,17 @@ internal PSCreateInstanceBinder(CallInfo callInfo, PSMethodInvocationConstraints
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture,
-                "PSCreateInstanceBinder: ver:{0} args:{1} constraints:<{2}>", _version, _callInfo.ArgumentCount, _constraints != null ? _constraints.ToString() : string.Empty);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "PSCreateInstanceBinder: ver:{0} args:{1} constraints:<{2}>",
+                _version,
+                _callInfo.ArgumentCount,
+                _constraints != null ? _constraints.ToString() : string.Empty);
         }
 
         public override DynamicMetaObject FallbackCreateInstance(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion)
         {
-            if (!target.HasValue || args.Any(arg => !arg.HasValue))
+            if (!target.HasValue || args.Any(static arg => !arg.HasValue))
             {
                 return Defer(args.Prepend(target).ToArray());
             }
@@ -7636,10 +7810,21 @@ public override DynamicMetaObject FallbackCreateInstance(DynamicMetaObject targe
             var context = LocalPipeline.GetExecutionContextFromTLS();
             if (context != null && context.LanguageMode == PSLanguageMode.ConstrainedLanguage && !CoreTypes.Contains(instanceType))
             {
-                return target.ThrowRuntimeError(restrictions, "CannotCreateTypeConstrainedLanguage", ParserStrings.CannotCreateTypeConstrainedLanguage).WriteToDebugLog(this);
+                if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                {
+                    return target.ThrowRuntimeError(restrictions, "CannotCreateTypeConstrainedLanguage", ParserStrings.CannotCreateTypeConstrainedLanguage).WriteToDebugLog(this);
+                }
+
+                string targetName = instanceType?.FullName;
+                SystemPolicy.LogWDACAuditMessage(
+                    context: context,
+                    title: ParameterBinderStrings.WDACBinderTypeCreationLogTitle,
+                    message: StringUtil.Format(ParameterBinderStrings.WDACBinderTypeCreationLogMessage, targetName ?? string.Empty),
+                    fqid: "TypeCreationNotAllowed",
+                    dropIntoDebugger: true);
             }
 
-            restrictions = args.Aggregate(restrictions, (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
+            restrictions = args.Aggregate(restrictions, static (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
             var newConstructors = DotNetAdapter.GetMethodInformationArray(ctors);
             return PSInvokeMemberBinder.InvokeDotNetMethod(_callInfo, "new", _constraints, PSInvokeMemberBinder.MethodInvocationType.Ordinary,
                                                            target, args, restrictions, newConstructors, typeof(MethodException)).WriteToDebugLog(this);
@@ -7687,7 +7872,7 @@ internal class PSInvokeBaseCtorBinder : InvokeMemberBinder
         private readonly CallInfo _callInfo;
         private readonly PSMethodInvocationConstraints _constraints;
 
-        private class KeyComparer : IEqualityComparer<Tuple<CallInfo, PSMethodInvocationConstraints>>
+        private sealed class KeyComparer : IEqualityComparer<Tuple<CallInfo, PSMethodInvocationConstraints>>
         {
             public bool Equals(Tuple<CallInfo, PSMethodInvocationConstraints> x,
                                Tuple<CallInfo, PSMethodInvocationConstraints> y)
@@ -7733,7 +7918,7 @@ internal PSInvokeBaseCtorBinder(CallInfo callInfo, PSMethodInvocationConstraints
 
         public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion)
         {
-            if (!target.HasValue || args.Any(arg => !arg.HasValue))
+            if (!target.HasValue || args.Any(static arg => !arg.HasValue))
             {
                 return Defer(args.Prepend(target).ToArray());
             }
@@ -7743,8 +7928,8 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target,
             var restrictions = target.Value is PSObject
                 ? BindingRestrictions.GetTypeRestriction(target.Expression, target.Value.GetType())
                 : target.PSGetTypeRestriction();
-            restrictions = args.Aggregate(restrictions, (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
-            var newConstructors = DotNetAdapter.GetMethodInformationArray(ctors.Where(c => c.IsPublic || c.IsFamily).ToArray());
+            restrictions = args.Aggregate(restrictions, static (current, arg) => current.Merge(arg.PSGetMethodArgumentRestriction()));
+            var newConstructors = DotNetAdapter.GetMethodInformationArray(ctors.Where(static c => c.IsPublic || c.IsFamily || c.IsFamilyOrAssembly).ToArray());
             return PSInvokeMemberBinder.InvokeDotNetMethod(_callInfo, "new", _constraints, PSInvokeMemberBinder.MethodInvocationType.BaseCtor,
                                                            target, args, restrictions, newConstructors, typeof(MethodException));
         }
@@ -7755,7 +7940,7 @@ public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, Dynam
                 DynamicExpression.Dynamic(
                     new PSInvokeBinder(CallInfo),
                     typeof(object),
-                    args.Prepend(target).Select(dmo => dmo.Expression)
+                    args.Prepend(target).Select(static dmo => dmo.Expression)
                 ),
                 target.Restrictions.Merge(BindingRestrictions.Combine(args))
             ));
diff --git a/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs b/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs
index 6478e9b091d..8899c0e0c14 100644
--- a/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs
+++ b/src/System.Management.Automation/engine/runtime/CompiledScriptBlock.cs
@@ -10,13 +10,12 @@
 using System.Management.Automation.Internal;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
 using System.Management.Automation.Tracing;
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
 using System.Security.Cryptography.X509Certificates;
 using System.Text;
-using System.Threading.Tasks;
 #if LEGACYTELEMETRY
 using Microsoft.PowerShell.Telemetry.Internal;
 #endif
@@ -35,6 +34,7 @@ internal enum ScriptBlockClauseToInvoke
         Begin,
         Process,
         End,
+        Clean,
         ProcessBlockOnly,
     }
 
@@ -188,12 +188,15 @@ private void ReallyCompile(bool optimize)
                 TelemetryAPI.ReportScriptTelemetry((Ast)_ast, !optimize, sw.ElapsedMilliseconds);
             }
 #endif
-            if (etwEnabled) ParserEventSource.Log.CompileStop();
+            if (etwEnabled)
+            {
+                ParserEventSource.Log.CompileStop();
+            }
         }
 
         private void PerformSecurityChecks()
         {
-            if (!(Ast is ScriptBlockAst scriptBlockAst))
+            if (Ast is not ScriptBlockAst scriptBlockAst)
             {
                 // Checks are only needed at the top level.
                 return;
@@ -247,6 +250,7 @@ bool IsScriptBlockInFactASafeHashtable()
 
                 if (scriptBlockAst.BeginBlock != null
                     || scriptBlockAst.ProcessBlock != null
+                    || scriptBlockAst.CleanBlock != null
                     || scriptBlockAst.ParamBlock != null
                     || scriptBlockAst.DynamicParamBlock != null
                     || scriptBlockAst.ScriptRequirements != null
@@ -262,12 +266,12 @@ bool IsScriptBlockInFactASafeHashtable()
                     return false;
                 }
 
-                if (!(endBlock.Statements[0] is PipelineAst pipelineAst))
+                if (endBlock.Statements[0] is not PipelineAst pipelineAst)
                 {
                     return false;
                 }
 
-                if (!(pipelineAst.GetPureExpression() is HashtableAst hashtableAst))
+                if (pipelineAst.GetPureExpression() is not HashtableAst hashtableAst)
                 {
                     return false;
                 }
@@ -316,6 +320,8 @@ private IParameterMetadataProvider DelayParseScriptText()
 
         internal Dictionary<string, int> NameToIndexMap { get; set; }
 
+        #region Named Blocks
+
         internal Action<FunctionContext> DynamicParamBlock { get; set; }
 
         internal Action<FunctionContext> UnoptimizedDynamicParamBlock { get; set; }
@@ -332,6 +338,12 @@ private IParameterMetadataProvider DelayParseScriptText()
 
         internal Action<FunctionContext> UnoptimizedEndBlock { get; set; }
 
+        internal Action<FunctionContext> CleanBlock { get; set; }
+
+        internal Action<FunctionContext> UnoptimizedCleanBlock { get; set; }
+
+        #endregion Named Blocks
+
         internal IScriptExtent[] SequencePoints { get; set; }
 
         private RuntimeDefinedParameterDictionary _runtimeDefinedParameterDictionary;
@@ -358,10 +370,7 @@ internal bool IsProductCode
         {
             get
             {
-                if (_isProductCode == null)
-                {
-                    _isProductCode = SecuritySupport.IsProductBinary(((Ast)_ast).Extent.File);
-                }
+                _isProductCode ??= SecuritySupport.IsProductBinary(((Ast)_ast).Extent.File);
 
                 return _isProductCode.Value;
             }
@@ -440,7 +449,7 @@ internal CmdletBindingAttribute CmdletBindingAttribute
                 }
 
                 return _usesCmdletBinding
-                    ? (CmdletBindingAttribute)Array.Find(_attributes, attr => attr is CmdletBindingAttribute)
+                    ? (CmdletBindingAttribute)Array.Find(_attributes, static attr => attr is CmdletBindingAttribute)
                     : null;
             }
         }
@@ -454,7 +463,7 @@ internal ObsoleteAttribute ObsoleteAttribute
                     InitializeMetadata();
                 }
 
-                return (ObsoleteAttribute)Array.Find(_attributes, attr => attr is ObsoleteAttribute);
+                return (ObsoleteAttribute)Array.Find(_attributes, static attr => attr is ObsoleteAttribute);
             }
         }
 
@@ -530,8 +539,7 @@ public override string ToString()
         }
     }
 
-    [Serializable]
-    public partial class ScriptBlock : ISerializable
+    public partial class ScriptBlock
     {
         private readonly CompiledScriptBlockData _scriptBlockData;
 
@@ -564,6 +572,7 @@ private ScriptBlock(CompiledScriptBlockData scriptBlockData)
         /// <summary>
         /// Protected constructor to support ISerializable.
         /// </summary>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]
         protected ScriptBlock(SerializationInfo info, StreamingContext context)
         {
         }
@@ -612,8 +621,8 @@ internal static void CacheScriptBlock(ScriptBlock scriptBlock, string fileName,
             // TODO(sevoroby): we can optimize it to ignore 'using' if there are no actual type usage in locally defined types.
 
             // using is always a top-level statements in scriptBlock, we don't need to search in child blocks.
-            if (scriptBlock.Ast.Find(ast => IsUsingTypes(ast), false) != null
-                || scriptBlock.Ast.Find(ast => IsDynamicKeyword(ast), true) != null)
+            if (scriptBlock.Ast.Find(static ast => IsUsingTypes(ast), false) != null
+                || scriptBlock.Ast.Find(static ast => IsDynamicKeyword(ast), true) != null)
             {
                 return;
             }
@@ -703,21 +712,6 @@ internal string ToStringWithDollarUsingHandling(
             return sbText;
         }
 
-        /// <summary>
-        /// Support for <see cref="ISerializable"/>.
-        /// </summary>
-        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(info));
-            }
-
-            string serializedContent = this.ToString();
-            info.AddValue("ScriptText", serializedContent);
-            info.SetType(typeof(ScriptBlockSerializationHelper));
-        }
-
         internal PowerShell GetPowerShellImpl(
             ExecutionContext context,
             Dictionary<string, object> variables,
@@ -751,9 +745,9 @@ internal SteppablePipeline GetSteppablePipelineImpl(CommandOrigin commandOrigin,
 
         private PipelineAst GetSimplePipeline(Func<string, PipelineAst> errorHandler)
         {
-            errorHandler ??= (_ => null);
+            errorHandler ??= (static _ => null);
 
-            if (HasBeginBlock || HasProcessBlock)
+            if (HasBeginBlock || HasProcessBlock || HasCleanBlock)
             {
                 return errorHandler(AutomationExceptions.CanConvertOneClauseOnly);
             }
@@ -775,7 +769,7 @@ private PipelineAst GetSimplePipeline(Func<string, PipelineAst> errorHandler)
                 return errorHandler(AutomationExceptions.CantConvertScriptBlockWithTrap);
             }
 
-            if (!(statements[0] is PipelineAst pipeAst))
+            if (statements[0] is not PipelineAst pipeAst)
             {
                 return errorHandler(AutomationExceptions.CanOnlyConvertOnePipeline);
             }
@@ -891,7 +885,10 @@ public void CheckRestrictedLanguage(
             Parser parser = new Parser();
 
             var ast = AstInternal;
-            if (HasBeginBlock || HasProcessBlock || ast.Body.ParamBlock != null)
+            if (HasBeginBlock
+                || HasProcessBlock
+                || HasCleanBlock
+                || ast.Body.ParamBlock is not null)
             {
                 Ast errorAst = ast.Body.BeginBlock ?? (Ast)ast.Body.ProcessBlock ?? ast.Body.ParamBlock;
                 parser.ReportError(
@@ -974,6 +971,11 @@ internal void InvokeWithPipeImpl(
             InvocationInfo invocationInfo,
             params object[] args)
         {
+            if (clauseToInvoke == ScriptBlockClauseToInvoke.Clean)
+            {
+                throw new PSNotSupportedException(ParserStrings.InvokingCleanBlockNotSupported);
+            }
+
             if ((clauseToInvoke == ScriptBlockClauseToInvoke.Begin && !HasBeginBlock)
                 || (clauseToInvoke == ScriptBlockClauseToInvoke.Process && !HasProcessBlock)
                 || (clauseToInvoke == ScriptBlockClauseToInvoke.End && !HasEndBlock))
@@ -991,7 +993,7 @@ internal void InvokeWithPipeImpl(
                 throw new PipelineStoppedException();
             }
 
-            // Validate at the arguments are consistent. The only public API that gets you here never sets createLocalScope to false...
+            // Validate that the arguments are consistent. The only public API that gets you here never sets createLocalScope to false...
             Diagnostics.Assert(
                 createLocalScope || functionsToDefine == null,
                 "When calling ScriptBlock.InvokeWithContext(), if 'functionsToDefine' != null then 'createLocalScope' must be true");
@@ -999,10 +1001,7 @@ internal void InvokeWithPipeImpl(
                 createLocalScope || variablesToDefine == null,
                 "When calling ScriptBlock.InvokeWithContext(), if 'variablesToDefine' != null then 'createLocalScope' must be true");
 
-            if (args == null)
-            {
-                args = Array.Empty<object>();
-            }
+            args ??= Array.Empty<object>();
 
             bool runOptimized = context._debuggingMode <= 0 && createLocalScope;
             var codeToInvoke = GetCodeToInvoke(ref runOptimized, clauseToInvoke);
@@ -1011,11 +1010,8 @@ internal void InvokeWithPipeImpl(
                 return;
             }
 
-            if (outputPipe == null)
-            {
-                // If we don't have a pipe to write to, we need to discard all results.
-                outputPipe = new Pipe { NullPipe = true };
-            }
+            // If we don't have a pipe to write to, we need to discard all results.
+            outputPipe ??= new Pipe { NullPipe = true };
 
             var locals = MakeLocalsTuple(runOptimized);
 
@@ -1041,12 +1037,11 @@ internal void InvokeWithPipeImpl(
             var oldScopeOrigin = context.EngineSessionState.CurrentScope.ScopeOrigin;
             var oldSessionState = context.EngineSessionState;
 
-            // If the script block has a different language mode than the current,
+            // If the script block has a different language mode than the current context,
             // change the language mode.
             PSLanguageMode? oldLanguageMode = null;
             PSLanguageMode? newLanguageMode = null;
-            if (this.LanguageMode.HasValue
-                && this.LanguageMode != context.LanguageMode)
+            if (this.LanguageMode.HasValue && this.LanguageMode != context.LanguageMode)
             {
                 // Don't allow context: ConstrainedLanguage -> FullLanguage transition if
                 // this is dot sourcing into the current scope, unless it is within a trusted module scope.
@@ -1057,6 +1052,20 @@ internal void InvokeWithPipeImpl(
                     oldLanguageMode = context.LanguageMode;
                     newLanguageMode = this.LanguageMode;
                 }
+                else if (SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Audit)
+                {
+                    string scriptBlockId = this.GetFileName() ?? string.Empty;
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: AutomationExceptions.WDACCompiledScriptBlockLogTitle,
+                        message: StringUtil.Format(AutomationExceptions.WDACCompiledScriptBlockLogMessage, scriptBlockId, this.LanguageMode, context.LanguageMode),
+                        fqid: "ScriptBlockDotSourceNotAllowed",
+                        dropIntoDebugger: true);
+
+                    // Since we are in audit mode, go ahead and allow the language transition.
+                    oldLanguageMode = context.LanguageMode;
+                    newLanguageMode = this.LanguageMode;
+                }
             }
 
             Dictionary<string, PSVariable> backupWhenDotting = null;
@@ -1195,7 +1204,7 @@ internal void InvokeWithPipeImpl(
                     _sequencePoints = SequencePoints,
                 };
 
-                ScriptBlock.LogScriptBlockStart(this, context.CurrentRunspace.InstanceId);
+                LogScriptBlockStart(this, context.CurrentRunspace.InstanceId);
 
                 try
                 {
@@ -1203,7 +1212,7 @@ internal void InvokeWithPipeImpl(
                 }
                 finally
                 {
-                    ScriptBlock.LogScriptBlockEnd(this, context.CurrentRunspace.InstanceId);
+                    LogScriptBlockEnd(this, context.CurrentRunspace.InstanceId);
                 }
             }
             catch (TargetInvocationException tie)
@@ -1362,7 +1371,7 @@ internal static void SetAutomaticVariable(AutomaticVariable variable, object val
         private Action<FunctionContext> GetCodeToInvoke(ref bool optimized, ScriptBlockClauseToInvoke clauseToInvoke)
         {
             if (clauseToInvoke == ScriptBlockClauseToInvoke.ProcessBlockOnly
-                && (HasBeginBlock || (HasEndBlock && HasProcessBlock)))
+                && (HasBeginBlock || HasCleanBlock || (HasEndBlock && HasProcessBlock)))
             {
                 throw PSTraceSource.NewInvalidOperationException(AutomationExceptions.ScriptBlockInvokeOnOneClauseOnly);
             }
@@ -1379,6 +1388,8 @@ private Action<FunctionContext> GetCodeToInvoke(ref bool optimized, ScriptBlockC
                         return _scriptBlockData.ProcessBlock;
                     case ScriptBlockClauseToInvoke.End:
                         return _scriptBlockData.EndBlock;
+                    case ScriptBlockClauseToInvoke.Clean:
+                        return _scriptBlockData.CleanBlock;
                     default:
                         return HasProcessBlock ? _scriptBlockData.ProcessBlock : _scriptBlockData.EndBlock;
                 }
@@ -1392,6 +1403,8 @@ private Action<FunctionContext> GetCodeToInvoke(ref bool optimized, ScriptBlockC
                     return _scriptBlockData.UnoptimizedProcessBlock;
                 case ScriptBlockClauseToInvoke.End:
                     return _scriptBlockData.UnoptimizedEndBlock;
+                case ScriptBlockClauseToInvoke.Clean:
+                    return _scriptBlockData.UnoptimizedCleanBlock;
                 default:
                     return HasProcessBlock ? _scriptBlockData.UnoptimizedProcessBlock : _scriptBlockData.UnoptimizedEndBlock;
             }
@@ -1438,7 +1451,7 @@ internal static void LogScriptBlockCreation(ScriptBlock scriptBlock, bool force)
                     // But split the segments into random sizes (10k + between 0 and 10kb extra)
                     // so that attackers can't creatively force their scripts to span well-known
                     // segments (making simple rules less reliable).
-                    int segmentSize = 10000 + (new Random()).Next(10000);
+                    int segmentSize = 10000 + Random.Shared.Next(10000);
                     int segments = (int)Math.Floor((double)(scriptBlockText.Length / segmentSize)) + 1;
                     int currentLocation = 0;
                     int currentSegmentSize = 0;
@@ -1733,7 +1746,7 @@ private static bool GetAndValidateEncryptionRecipients(
         private static CmsMessageRecipient[] s_encryptionRecipients = null;
 
         private static readonly Lazy<ScriptBlockLogging> s_sbLoggingSettingCache = new Lazy<ScriptBlockLogging>(
-            () => Utils.GetPolicySetting<ScriptBlockLogging>(Utils.SystemWideThenCurrentUserConfig),
+            static () => Utils.GetPolicySetting<ScriptBlockLogging>(Utils.SystemWideThenCurrentUserConfig),
             isThreadSafe: true);
 
         // Reset any static caches if the certificate has changed
@@ -1957,7 +1970,7 @@ private static string LookupHash(uint h)
             ///
             /// If a hash matches, we ignore the possibility of a
             /// collision. If the hash is acceptable, collisions will
-            /// be infrequent and we'll just log an occasionaly script
+            /// be infrequent and we'll just log an occasional script
             /// that isn't really suspicious.
             /// </summary>
             /// <returns>The string matching the hash, or null.</returns>
@@ -2022,7 +2035,7 @@ public static string Match(string text)
                         continue;
                     }
 
-                    for (int j = Math.Min(i, runningHash.Length) - 1; j > 0; j--)
+                    for (int j = Math.Min(i, runningHash.Length - 1); j > 0; j--)
                     {
                         // Say our input is: `Emit` (our shortest pattern, len 4).
                         // Towards the end just before matching, we will:
@@ -2043,7 +2056,10 @@ public static string Match(string text)
                     if (++longestPossiblePattern >= 4)
                     {
                         var result = CheckForMatches(runningHash, longestPossiblePattern);
-                        if (result != null) return result;
+                        if (result != null)
+                        {
+                            return result;
+                        }
                     }
                 }
 
@@ -2147,46 +2163,17 @@ internal static void LogScriptBlockEnd(ScriptBlock scriptBlock, Guid runspaceId)
 
         internal Action<FunctionContext> UnoptimizedEndBlock { get => _scriptBlockData.UnoptimizedEndBlock; }
 
+        internal Action<FunctionContext> CleanBlock { get => _scriptBlockData.CleanBlock; }
+
+        internal Action<FunctionContext> UnoptimizedCleanBlock { get => _scriptBlockData.UnoptimizedCleanBlock; }
+
         internal bool HasBeginBlock { get => AstInternal.Body.BeginBlock != null; }
 
         internal bool HasProcessBlock { get => AstInternal.Body.ProcessBlock != null; }
 
         internal bool HasEndBlock { get => AstInternal.Body.EndBlock != null; }
-    }
-
-    [Serializable]
-    internal class ScriptBlockSerializationHelper : ISerializable, IObjectReference
-    {
-        private readonly string _scriptText;
 
-        private ScriptBlockSerializationHelper(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw new ArgumentNullException(nameof(info));
-            }
-
-            _scriptText = info.GetValue("ScriptText", typeof(string)) as string;
-            if (_scriptText == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(info));
-            }
-        }
-
-        /// <summary>
-        /// Returns a script block that corresponds to the version deserialized.
-        /// </summary>
-        /// <param name="context">The streaming context for this instance.</param>
-        /// <returns>A script block that corresponds to the version deserialized.</returns>
-        public object GetRealObject(StreamingContext context) => ScriptBlock.Create(_scriptText);
-
-        /// <summary>
-        /// Implements the ISerializable contract for serializing a scriptblock.
-        /// </summary>
-        /// <param name="info">Serialization information for this instance.</param>
-        /// <param name="context">The streaming context for this instance.</param>
-        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
-            => throw new NotSupportedException();
+        internal bool HasCleanBlock { get => AstInternal.Body.CleanBlock != null; }
     }
 
     internal sealed class PSScriptCmdlet : PSCmdlet, IDynamicParameters, IDisposable
@@ -2197,11 +2184,15 @@ internal sealed class PSScriptCmdlet : PSCmdlet, IDynamicParameters, IDisposable
         private readonly bool _useLocalScope;
         private readonly bool _runOptimized;
         private readonly bool _rethrowExitException;
-        private MshCommandRuntime _commandRuntime;
         private readonly MutableTuple _localsTuple;
-        private bool _exitWasCalled;
         private readonly FunctionContext _functionContext;
 
+        private MshCommandRuntime _commandRuntime;
+        private bool _exitWasCalled;
+        private bool _anyClauseExecuted;
+
+        internal bool ShouldRethrowExitException => _rethrowExitException;
+
         public PSScriptCmdlet(ScriptBlock scriptBlock, bool useNewScope, bool fromScriptFile, ExecutionContext context)
         {
             _scriptBlock = scriptBlock;
@@ -2291,6 +2282,34 @@ internal override void DoEndProcessing()
             }
         }
 
+        internal override void DoCleanResource()
+        {
+            if (_scriptBlock.HasCleanBlock && _anyClauseExecuted)
+            {
+                // The 'Clean' block doesn't write any output to pipeline, so we use a 'NullPipe' here and
+                // disallow the output to be collected by an 'out' variable. However, the error, warning,
+                // and information records should still be collectable by the corresponding variables.
+                Pipe oldOutputPipe = _commandRuntime.OutputPipe;
+                _functionContext._outputPipe = _commandRuntime.OutputPipe = new Pipe
+                {
+                    NullPipe = true,
+                    IgnoreOutVariableList = true,
+                };
+
+                try
+                {
+                    RunClause(
+                        clause: _runOptimized ? _scriptBlock.CleanBlock : _scriptBlock.UnoptimizedCleanBlock,
+                        dollarUnderbar: AutomationNull.Value,
+                        inputToProcess: AutomationNull.Value);
+                }
+                finally
+                {
+                    _functionContext._outputPipe = _commandRuntime.OutputPipe = oldOutputPipe;
+                }
+            }
+        }
+
         private void EnterScope()
         {
             _commandRuntime.SetVariableListsInPipe();
@@ -2303,14 +2322,15 @@ private void ExitScope()
 
         private void RunClause(Action<FunctionContext> clause, object dollarUnderbar, object inputToProcess)
         {
+            _anyClauseExecuted = true;
             Pipe oldErrorOutputPipe = this.Context.ShellFunctionErrorOutputPipe;
 
             // If the script block has a different language mode than the current,
             // change the language mode.
             PSLanguageMode? oldLanguageMode = null;
             PSLanguageMode? newLanguageMode = null;
-            if (_scriptBlock.LanguageMode.HasValue
-                && _scriptBlock.LanguageMode != Context.LanguageMode)
+            if (_scriptBlock.LanguageMode.HasValue &&
+                _scriptBlock.LanguageMode != Context.LanguageMode)
             {
                 oldLanguageMode = Context.LanguageMode;
                 newLanguageMode = _scriptBlock.LanguageMode;
@@ -2356,9 +2376,9 @@ private void RunClause(Action<FunctionContext> clause, object dollarUnderbar, ob
                 }
                 finally
                 {
-                    this.Context.RestoreErrorPipe(oldErrorOutputPipe);
+                    Context.ShellFunctionErrorOutputPipe = oldErrorOutputPipe;
 
-                    // Set the language mode
+                    // Restore the language mode
                     if (oldLanguageMode.HasValue)
                     {
                         Context.LanguageMode = oldLanguageMode.Value;
@@ -2471,6 +2491,11 @@ private void SetPreferenceVariables()
                 _localsTuple.SetPreferenceVariable(PreferenceVariable.Information, _commandRuntime.InformationPreference);
             }
 
+            if (_commandRuntime.IsProgressActionSet)
+            {
+                _localsTuple.SetPreferenceVariable(PreferenceVariable.Progress, _commandRuntime.ProgressPreference);
+            }
+
             if (_commandRuntime.IsWhatIfFlagSet)
             {
                 _localsTuple.SetPreferenceVariable(PreferenceVariable.WhatIf, _commandRuntime.WhatIf);
@@ -2518,9 +2543,6 @@ public void Dispose()
             commandRuntime = null;
             currentObjectInPipeline = null;
             _input.Clear();
-            // _scriptBlock = null;
-            // _localsTuple = null;
-            // _functionContext = null;
 
             base.InternalDispose(true);
             _disposed = true;
diff --git a/src/System.Management.Automation/engine/runtime/MutableTuple.cs b/src/System.Management.Automation/engine/runtime/MutableTuple.cs
index e7ee0d615df..53c40ef3810 100644
--- a/src/System.Management.Automation/engine/runtime/MutableTuple.cs
+++ b/src/System.Management.Automation/engine/runtime/MutableTuple.cs
@@ -281,7 +281,11 @@ public static int GetSize(Type tupleType)
             // ContractUtils.RequiresNotNull(tupleType, "tupleType");
 
             int count = 0;
-            lock (s_sizeDict) if (s_sizeDict.TryGetValue(tupleType, out count)) return count;
+            lock (s_sizeDict) if (s_sizeDict.TryGetValue(tupleType, out count))
+            {
+                return count;
+            }
+
             Stack<Type> types = new Stack<Type>(tupleType.GetGenericArguments());
 
             while (types.Count != 0)
@@ -298,7 +302,10 @@ public static int GetSize(Type tupleType)
                     continue;
                 }
 
-                if (t == typeof(DynamicNull)) continue;
+                if (t == typeof(DynamicNull))
+                {
+                    continue;
+                }
 
                 count++;
             }
@@ -369,7 +376,7 @@ internal static IEnumerable<PropertyInfo> GetAccessProperties(Type tupleType, in
 
             foreach (int curIndex in GetAccessPath(size, index))
             {
-                PropertyInfo pi = tupleType.GetProperty("Item" + string.Format(CultureInfo.InvariantCulture, "{0:D3}", curIndex));
+                PropertyInfo pi = tupleType.GetProperty("Item" + string.Create(CultureInfo.InvariantCulture, $"{curIndex:D3}"));
                 Diagnostics.Assert(pi != null, "reflection should always find Item");
                 yield return pi;
                 tupleType = pi.PropertyType;
@@ -440,7 +447,7 @@ private static MutableTuple MakeTuple(Func<MutableTuple> creator, Type tupleType
 
                 for (int i = 0; i < size; i++)
                 {
-                    PropertyInfo pi = tupleType.GetProperty("Item" + string.Format(CultureInfo.InvariantCulture, "{0:D3}", i));
+                    PropertyInfo pi = tupleType.GetProperty("Item" + string.Create(CultureInfo.InvariantCulture, $"{i:D3}"));
                     res.SetValueImpl(i, MakeTuple(pi.PropertyType, null, null));
                 }
             }
@@ -504,7 +511,7 @@ public abstract int Capacity
         /// </summary>
         public static Expression Create(params Expression[] values)
         {
-            return CreateNew(MakeTupleType(values.Select(x => x.Type).ToArray()), 0, values.Length, values);
+            return CreateNew(MakeTupleType(values.Select(static x => x.Type).ToArray()), 0, values.Length, values);
         }
 
         private static int PowerOfTwoRound(int value)
@@ -540,7 +547,7 @@ internal static Expression CreateNew(Type tupleType, int start, int end, Express
                     int newStart = start + (i * multiplier);
                     int newEnd = System.Math.Min(end, start + ((i + 1) * multiplier));
 
-                    PropertyInfo pi = tupleType.GetProperty("Item" + string.Format(CultureInfo.InvariantCulture, "{0:D3}", i));
+                    PropertyInfo pi = tupleType.GetProperty("Item" + string.Create(CultureInfo.InvariantCulture, $"{i:D3}"));
 
                     newValues[i] = CreateNew(pi.PropertyType, newStart, newEnd, values);
                 }
@@ -564,7 +571,7 @@ internal static Expression CreateNew(Type tupleType, int start, int end, Express
                 }
             }
 
-            return Expression.New(tupleType.GetConstructor(newValues.Select(x => x.Type).ToArray()), newValues);
+            return Expression.New(tupleType.GetConstructor(newValues.Select(static x => x.Type).ToArray()), newValues);
         }
     }
 
diff --git a/src/System.Management.Automation/engine/runtime/Operations/ArrayOps.cs b/src/System.Management.Automation/engine/runtime/Operations/ArrayOps.cs
index fa4c2c2b565..4fd68cdd201 100644
--- a/src/System.Management.Automation/engine/runtime/Operations/ArrayOps.cs
+++ b/src/System.Management.Automation/engine/runtime/Operations/ArrayOps.cs
@@ -12,6 +12,15 @@ namespace System.Management.Automation
 {
     internal static class ArrayOps
     {
+        internal static object AddObjectArray(object[] lhs, object rhs)
+        {
+            int newIdx = lhs.Length;
+            Array.Resize(ref lhs, newIdx + 1);
+            lhs[newIdx] = rhs;
+
+            return lhs;
+        }
+
         internal static object[] SlicingIndex(object target, object[] indexes, Func<object, object, object> indexer)
         {
             var result = new object[indexes.Length];
diff --git a/src/System.Management.Automation/engine/runtime/Operations/ClassOps.cs b/src/System.Management.Automation/engine/runtime/Operations/ClassOps.cs
index 5afe23a6362..2b741a29c31 100644
--- a/src/System.Management.Automation/engine/runtime/Operations/ClassOps.cs
+++ b/src/System.Management.Automation/engine/runtime/Operations/ClassOps.cs
@@ -22,7 +22,7 @@ namespace System.Management.Automation.Internal
     /// <summary>
     /// Every Runspace in one process contains SessionStateInternal per module (module SessionState).
     /// Every RuntimeType is associated to only one SessionState in the Runspace, which creates it:
-    /// it's ever global state or a module state.
+    /// it's either global state or a module state.
     /// In the former case, module can be imported from the different runspaces in the same process.
     /// And so runspaces will share RuntimeType. But in every runspace, Type is associated with just one SessionState.
     /// We want type methods to be able access $script: variables and module-specific methods.
@@ -115,10 +115,10 @@ public class ScriptBlockMemberMethodWrapper
         /// We use WeakReference object to point to the default SessionState because if GC already collect the SessionState,
         /// or the Runspace it chains to is closed and disposed, then we cannot run the static method there anyways.
         /// </summary>
-        /// <remakr>
+        /// <remarks>
         /// The default SessionState is used only if a static method is called from a Runspace where the PowerShell class is
         /// never defined, or is called on a thread without a default Runspace. Usage like those should be rare.
-        /// </remakr>
+        /// </remarks>
         private readonly WeakReference<SessionStateInternal> _defaultSessionStateToUse;
 
         /// <summary>
@@ -162,7 +162,7 @@ internal ScriptBlockMemberMethodWrapper(IParameterMetadataProvider ast)
         /// Initialization happens when the script that defines PowerShell class is executed.
         /// This initialization is required only if this wrapper is for a static method.
         /// </summary>
-        /// <remark>
+        /// <remarks>
         /// When the same script file gets executed multiple times, the .NET type generated from the PowerShell class
         /// defined in the file will be shared in those executions, and thus this method will be called multiple times
         /// possibly in the contexts of different Runspace/SessionState.
@@ -174,7 +174,7 @@ internal ScriptBlockMemberMethodWrapper(IParameterMetadataProvider ast)
         /// is declared, and thus we can always get the correct SessionState to use by querying the 'SessionStateKeeper'.
         /// The default SessionState is used only if a static method is called from a Runspace where the class is never
         /// defined, or is called on a thread without a default Runspace.
-        /// </remark>
+        /// </remarks>
         internal void InitAtRuntime()
         {
             if (_isStatic)
@@ -356,7 +356,7 @@ private static DynamicMethod CreateDynamicMethod(MethodInfo mi)
         {
             // Pass in the declaring type because instance method has a hidden parameter 'this' as the first parameter.
             var paramTypes = new List<Type> { mi.DeclaringType };
-            paramTypes.AddRange(mi.GetParameters().Select(x => x.ParameterType));
+            paramTypes.AddRange(mi.GetParameters().Select(static x => x.ParameterType));
 
             var dm = new DynamicMethod("PSNonVirtualCall_" + mi.Name, mi.ReturnType, paramTypes.ToArray(), mi.DeclaringType);
             ILGenerator il = dm.GetILGenerator();
diff --git a/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs b/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs
index df8b36eb40f..d584666ab62 100644
--- a/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs
+++ b/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs
@@ -13,6 +13,8 @@
 using System.Management.Automation.Internal.Host;
 using System.Management.Automation.Language;
 using System.Management.Automation.Runspaces;
+using System.Management.Automation.Security;
+using System.Numerics;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Text.RegularExpressions;
@@ -53,13 +55,24 @@ private static CommandProcessorBase AddCommand(PipelineProcessor pipe,
                     throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException),
                         null, "CantInvokeInNonImportedModule", ParserStrings.CantInvokeInNonImportedModule, mi.Name);
                 }
-                else if (((invocationToken == TokenKind.Ampersand) || (invocationToken == TokenKind.Dot)) && (mi.LanguageMode != context.LanguageMode))
+                else if ((invocationToken == TokenKind.Ampersand || invocationToken == TokenKind.Dot) && mi.LanguageMode != context.LanguageMode)
                 {
-                    // Disallow FullLanguage "& (Get-Module MyModule) MyPrivateFn" from ConstrainedLanguage because it always
-                    // runs "internal" origin and so has access to all functions, including non-exported functions.
-                    // Otherwise we end up leaking non-exported functions that run in FullLanguage.
-                    throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException), null,
-                        "CantInvokeCallOperatorAcrossLanguageBoundaries", ParserStrings.CantInvokeCallOperatorAcrossLanguageBoundaries);
+                    if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                    {
+                        // Disallow FullLanguage "& (Get-Module MyModule) MyPrivateFn" from ConstrainedLanguage because it always
+                        // runs "internal" origin and so has access to all functions, including non-exported functions.
+                        // Otherwise we end up leaking non-exported functions that run in FullLanguage.
+                        throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException), null,
+                            "CantInvokeCallOperatorAcrossLanguageBoundaries", ParserStrings.CantInvokeCallOperatorAcrossLanguageBoundaries);
+                    }
+
+                    // In audit mode, report but don't enforce.
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: ParserStrings.WDACParserModuleScopeCallOperatorLogTitle,
+                        message: ParserStrings.WDACParserModuleScopeCallOperatorLogMessage,
+                        fqid: "ModuleScopeCallOperatorNotAllowed",
+                        dropIntoDebugger: true);
                 }
 
                 commandSessionState = mi.SessionState.Internal;
@@ -161,6 +174,7 @@ private static CommandProcessorBase AddCommand(PipelineProcessor pipe,
                                              (cmd is ScriptCommand || cmd is PSScriptCmdlet);
 
             bool isNativeCommand = commandProcessor is NativeCommandProcessor;
+
             for (int i = commandIndex + 1; i < commandElements.Length; ++i)
             {
                 var cpi = commandElements[i];
@@ -207,9 +221,24 @@ private static CommandProcessorBase AddCommand(PipelineProcessor pipe,
             bool redirectedInformation = false;
             if (redirections != null)
             {
-                foreach (var redirection in redirections)
+                if (isNativeCommand)
                 {
-                    redirection.Bind(pipe, commandProcessor, context);
+                    foreach (CommandRedirection redirection in redirections)
+                    {
+                        if (redirection is MergingRedirection)
+                        {
+                            redirection.Bind(pipe, commandProcessor, context);
+                        }
+                    }
+                }
+
+                foreach (CommandRedirection redirection in redirections)
+                {
+                    if (!isNativeCommand || redirection is not MergingRedirection)
+                    {
+                        redirection.Bind(pipe, commandProcessor, context);
+                    }
+
                     switch (redirection.FromStream)
                     {
                         case RedirectionStream.Error:
@@ -426,10 +455,7 @@ internal static void InvokePipeline(object input,
 
             try
             {
-                if (context.Events != null)
-                {
-                    context.Events.ProcessPendingActions();
-                }
+                context.Events?.ProcessPendingActions();
 
                 if (input == AutomationNull.Value && !ignoreInput)
                 {
@@ -519,24 +545,17 @@ internal static void InvokePipelineInBackground(
 
             try
             {
-                if (context.Events != null)
-                {
-                    context.Events.ProcessPendingActions();
-                }
+                context.Events?.ProcessPendingActions();
 
                 CommandProcessorBase commandProcessor = null;
 
                 // For background jobs rewrite the pipeline as a Start-Job command
                 var scriptblockBodyString = pipelineAst.Extent.Text;
                 var pipelineOffset = pipelineAst.Extent.StartOffset;
-                var variables = pipelineAst.FindAll(x => x is VariableExpressionAst, true);
-
-                // Used to make sure that the job runs in the current directory
-                const string cmdPrefix = @"Microsoft.PowerShell.Management\Set-Location -LiteralPath $using:pwd ; ";
+                var variables = pipelineAst.FindAll(static x => x is VariableExpressionAst, true);
 
-                // Minimize allocations by initializing the stringbuilder to the size of the source string + prefix + space for ${using:} * 2
-                System.Text.StringBuilder updatedScriptblock = new System.Text.StringBuilder(cmdPrefix.Length + scriptblockBodyString.Length + 18);
-                updatedScriptblock.Append(cmdPrefix);
+                // Minimize allocations by initializing the stringbuilder to the size of the source string + space for ${using:} * 2
+                System.Text.StringBuilder updatedScriptblock = new System.Text.StringBuilder(scriptblockBodyString.Length + 18);
                 int position = 0;
 
                 // Prefix variables in the scriptblock with $using:
@@ -568,14 +587,25 @@ internal static void InvokePipelineInBackground(
                 var sb = ScriptBlock.Create(updatedScriptblock.ToString());
                 var commandInfo = new CmdletInfo("Start-Job", typeof(StartJobCommand));
                 commandProcessor = context.CommandDiscovery.LookupCommandProcessor(commandInfo, CommandOrigin.Internal, false, context.EngineSessionState);
-                var parameter = CommandParameterInternal.CreateParameterWithArgument(
+
+                var workingDirectoryParameter = CommandParameterInternal.CreateParameterWithArgument(
                     parameterAst: pipelineAst,
-                    "ScriptBlock",
-                    null,
+                    parameterName: "WorkingDirectory",
+                    parameterText: null,
                     argumentAst: pipelineAst,
-                    sb,
-                    false);
-                commandProcessor.AddParameter(parameter);
+                    value: context.SessionState.Path.CurrentLocation.Path,
+                    spaceAfterParameter: false);
+
+                var scriptBlockParameter = CommandParameterInternal.CreateParameterWithArgument(
+                    parameterAst: pipelineAst,
+                    parameterName: "ScriptBlock",
+                    parameterText: null,
+                    argumentAst: pipelineAst,
+                    value: sb,
+                    spaceAfterParameter: false);
+
+                commandProcessor.AddParameter(workingDirectoryParameter);
+                commandProcessor.AddParameter(scriptBlockParameter);
                 pipelineProcessor.Add(commandProcessor);
                 pipelineProcessor.LinkPipelineSuccessOutput(outputPipe ?? new Pipe(new List<object>()));
 
@@ -684,6 +714,18 @@ internal static SteppablePipeline GetSteppablePipeline(PipelineAst pipelineAst,
                 // of invoking it. So the trustworthiness is defined by the trustworthiness of the
                 // script block's language mode.
                 bool isTrusted = scriptBlock.LanguageMode == PSLanguageMode.FullLanguage;
+                if (scriptBlock.LanguageMode == PSLanguageMode.ConstrainedLanguage
+                    && SystemPolicy.GetSystemLockdownPolicy() == SystemEnforcementMode.Audit)
+                {
+                    // In audit mode, report but don't enforce.
+                    isTrusted = true;
+                    SystemPolicy.LogWDACAuditMessage(
+                        context: context,
+                        title: ParserStrings.WDACGetSteppablePipelineLogTitle,
+                        message: ParserStrings.WDACGetSteppablePipelineLogMessage,
+                        fqid: "GetSteppablePipelineMayFail",
+                        dropIntoDebugger: true);
+                }
 
                 foreach (var commandAst in pipelineAst.PipelineElements.Cast<CommandAst>())
                 {
@@ -699,7 +741,7 @@ internal static SteppablePipeline GetSteppablePipeline(PipelineAst pipelineAst,
 
                         var exprAst = (ExpressionAst)commandElement;
                         var argument = Compiler.GetExpressionValue(exprAst, isTrusted, context);
-                        var splatting = (exprAst is VariableExpressionAst && ((VariableExpressionAst)exprAst).Splatted);
+                        var splatting = exprAst is VariableExpressionAst && ((VariableExpressionAst)exprAst).Splatted;
                         commandParameters.Add(CommandParameterInternal.CreateArgument(argument, exprAst, splatting));
                     }
 
@@ -767,8 +809,8 @@ private static CommandParameterInternal GetCommandParameter(CommandParameterAst
             }
 
             object argumentValue = Compiler.GetExpressionValue(argumentAst, isTrusted, context);
-            bool spaceAfterParameter = (errorPos.EndLineNumber != argumentAst.Extent.StartLineNumber ||
-                                        errorPos.EndColumnNumber != argumentAst.Extent.StartColumnNumber);
+            bool spaceAfterParameter = errorPos.EndLineNumber != argumentAst.Extent.StartLineNumber ||
+                                       errorPos.EndColumnNumber != argumentAst.Extent.StartColumnNumber;
             return CommandParameterInternal.CreateParameterWithArgument(commandParameterAst, commandParameterAst.ParameterName,
                                                                         errorPos.Text, argumentAst, argumentValue,
                                                                         spaceAfterParameter);
@@ -834,10 +876,7 @@ internal static ExitException GetExitException(object exitCodeObj)
 
         internal static void CheckForInterrupts(ExecutionContext context)
         {
-            if (context.Events != null)
-            {
-                context.Events.ProcessPendingActions();
-            }
+            context.Events?.ProcessPendingActions();
 
             if (context.CurrentPipelineStopping)
             {
@@ -923,7 +962,7 @@ public override string ToString()
         {
             return FromStream == RedirectionStream.All
                        ? "*>&1"
-                       : string.Format(CultureInfo.InvariantCulture, "{0}>&1", (int)FromStream);
+                       : string.Create(CultureInfo.InvariantCulture, $"{(int)FromStream}>&1");
         }
 
         // private RedirectionStream ToStream { get; set; }
@@ -1032,11 +1071,13 @@ internal FileRedirection(RedirectionStream from, bool appending, string file)
 
         public override string ToString()
         {
-            return string.Format(CultureInfo.InvariantCulture, "{0}> {1}",
-                                 FromStream == RedirectionStream.All
-                                     ? "*"
-                                     : ((int)FromStream).ToString(CultureInfo.InvariantCulture),
-                                 File);
+            return string.Format(
+                CultureInfo.InvariantCulture,
+                "{0}> {1}",
+                FromStream == RedirectionStream.All
+                    ? "*"
+                    : ((int)FromStream).ToString(CultureInfo.InvariantCulture),
+                File);
         }
 
         internal string File { get; }
@@ -1049,6 +1090,25 @@ public override string ToString()
         //    dir > out
         internal override void Bind(PipelineProcessor pipelineProcessor, CommandProcessorBase commandProcessor, ExecutionContext context)
         {
+            // Check first to see if File is a variable path. If so, we'll not create the FileBytePipe
+            bool redirectToVariable = false;
+
+            context.SessionState.Path.GetUnresolvedProviderPathFromPSPath(File, out ProviderInfo p, out _);
+            if (p != null && p.NameEquals(context.ProviderNames.Variable))
+            {
+                redirectToVariable = true;
+            }
+
+            if (commandProcessor is NativeCommandProcessor nativeCommand
+                && nativeCommand.CommandRuntime.ErrorMergeTo is not MshCommandRuntime.MergeDataStream.Output
+                && FromStream is RedirectionStream.Output
+                && !string.IsNullOrWhiteSpace(File)
+                && !redirectToVariable)
+            {
+                nativeCommand.StdOutDestination = FileBytePipe.Create(File, Appending);
+                return;
+            }
+
             Pipe pipe = GetRedirectionPipe(context, pipelineProcessor);
 
             switch (FromStream)
@@ -1058,10 +1118,7 @@ internal override void Bind(PipelineProcessor pipelineProcessor, CommandProcesso
                     // Normally, context.CurrentCommandProcessor will not be null. But in legacy DRTs from ParserTest.cs,
                     // a scriptblock may be invoked through 'DoInvokeReturnAsIs' using .NET reflection. In that case,
                     // context.CurrentCommandProcessor will be null. We don't try passing along variable lists in such case.
-                    if (context.CurrentCommandProcessor != null)
-                    {
-                        context.CurrentCommandProcessor.CommandRuntime.OutputPipe.SetVariableListForTemporaryPipe(pipe);
-                    }
+                    context.CurrentCommandProcessor?.CommandRuntime.OutputPipe.SetVariableListForTemporaryPipe(pipe);
 
                     commandProcessor.CommandRuntime.OutputPipe = pipe;
                     commandProcessor.CommandRuntime.ErrorOutputPipe = pipe;
@@ -1072,10 +1129,7 @@ internal override void Bind(PipelineProcessor pipelineProcessor, CommandProcesso
                     break;
                 case RedirectionStream.Output:
                     // Since a temp output pipe is going to be used, we should pass along the error and warning variable list.
-                    if (context.CurrentCommandProcessor != null)
-                    {
-                        context.CurrentCommandProcessor.CommandRuntime.OutputPipe.SetVariableListForTemporaryPipe(pipe);
-                    }
+                    context.CurrentCommandProcessor?.CommandRuntime.OutputPipe.SetVariableListForTemporaryPipe(pipe);
 
                     commandProcessor.CommandRuntime.OutputPipe = pipe;
                     break;
@@ -1164,26 +1218,49 @@ internal Pipe GetRedirectionPipe(ExecutionContext context, PipelineProcessor par
                 return new Pipe { NullPipe = true };
             }
 
-            CommandProcessorBase commandProcessor = context.CreateCommand("out-file", false);
-            Diagnostics.Assert(commandProcessor != null, "CreateCommand returned null");
-
-            // Previously, we mandated Unicode encoding here
-            // Now, We can take what ever has been set if PSDefaultParameterValues
-            // Unicode is still the default, but now may be overridden
+            // determine whether we're trying to set a variable by inspecting the file path
+            // if we can determine that it's a variable, we'll use Set-Variable rather than Out-File
+            CommandProcessorBase commandProcessor;
+            var name = context.SessionState.Path.GetUnresolvedProviderPathFromPSPath(File, out ProviderInfo p, out _);
 
-            var cpi = CommandParameterInternal.CreateParameterWithArgument(
-                /*parameterAst*/null, "Filepath", "-Filepath:",
-                /*argumentAst*/null, File,
-                false);
-            commandProcessor.AddParameter(cpi);
+            if (p != null && p.NameEquals(context.ProviderNames.Variable))
+            {
+                commandProcessor = context.CreateCommand("Set-Variable", false);
+                Diagnostics.Assert(commandProcessor != null, "CreateCommand returned null");
+                var cpi = CommandParameterInternal.CreateParameterWithArgument(
+                    /*parameterAst*/null, "Name", "-Name:",
+                    /*argumentAst*/null, name,
+                    false);
+                commandProcessor.AddParameter(cpi);
 
-            if (this.Appending)
+                if (this.Appending)
+                {
+                    commandProcessor.AddParameter(CommandParameterInternal.CreateParameter("Append", "-Append", null));
+                }
+            }
+            else
             {
-                cpi = CommandParameterInternal.CreateParameterWithArgument(
-                    /*parameterAst*/null, "Append", "-Append:",
-                    /*argumentAst*/null, true,
+                commandProcessor = context.CreateCommand("out-file", false);
+                Diagnostics.Assert(commandProcessor != null, "CreateCommand returned null");
+
+                // Previously, we mandated Unicode encoding here
+                // Now, We can take what ever has been set if PSDefaultParameterValues
+                // Unicode is still the default, but now may be overridden
+
+                var cpi = CommandParameterInternal.CreateParameterWithArgument(
+                    /*parameterAst*/null, "Filepath", "-Filepath:",
+                    /*argumentAst*/null, File,
                     false);
                 commandProcessor.AddParameter(cpi);
+
+                if (this.Appending)
+                {
+                    cpi = CommandParameterInternal.CreateParameterWithArgument(
+                        /*parameterAst*/null, "Append", "-Append:",
+                        /*argumentAst*/null, true,
+                        false);
+                    commandProcessor.AddParameter(cpi);
+                }
             }
 
             PipelineProcessor = new PipelineProcessor();
@@ -1199,19 +1276,22 @@ internal Pipe GetRedirectionPipe(ExecutionContext context, PipelineProcessor par
                 // is more specific tp the redirection operation...
                 if (rte.ErrorRecord.Exception is System.ArgumentException)
                 {
-                    throw InterpreterError.NewInterpreterExceptionWithInnerException(null,
-                        typeof(RuntimeException), null, "RedirectionFailed", ParserStrings.RedirectionFailed,
-                            rte.ErrorRecord.Exception, File, rte.ErrorRecord.Exception.Message);
+                    throw InterpreterError.NewInterpreterExceptionWithInnerException(
+                        null,
+                        typeof(RuntimeException),
+                        null,
+                        "RedirectionFailed",
+                        ParserStrings.RedirectionFailed,
+                        rte.ErrorRecord.Exception,
+                        File,
+                        rte.ErrorRecord.Exception.Message);
                 }
 
                 throw;
             }
 
-            if (parentPipelineProcessor != null)
-            {
-                // I think this is only necessary for calling Dispose on the commands in the redirection pipe.
-                parentPipelineProcessor.AddRedirectionPipe(PipelineProcessor);
-            }
+            // I think this is only necessary for calling Dispose on the commands in the redirection pipe.
+            parentPipelineProcessor?.AddRedirectionPipe(PipelineProcessor);
 
             return new Pipe(context, PipelineProcessor);
         }
@@ -1220,17 +1300,14 @@ internal Pipe GetRedirectionPipe(ExecutionContext context, PipelineProcessor par
         /// After file redirection is done, we need to call 'DoComplete' on the pipeline processor,
         /// so that 'EndProcessing' of Out-File can be called to wrap up the file write operation.
         /// </summary>
-        /// <remark>
+        /// <remarks>
         /// 'StartStepping' is called after creating the pipeline processor.
         /// 'Step' is called when an object is added to the pipe created with the pipeline processor.
-        /// </remark>
+        /// </remarks>
         internal void CallDoCompleteForExpression()
         {
             // The pipe returned from 'GetRedirectionPipe' could be a NullPipe
-            if (PipelineProcessor != null)
-            {
-                PipelineProcessor.DoComplete();
-            }
+            PipelineProcessor?.DoComplete();
         }
 
         private bool _disposed;
@@ -1248,10 +1325,7 @@ private void Dispose(bool disposing)
 
             if (disposing)
             {
-                if (PipelineProcessor != null)
-                {
-                    PipelineProcessor.Dispose();
-                }
+                PipelineProcessor?.Dispose();
             }
 
             _disposed = true;
@@ -1280,7 +1354,7 @@ internal static void DefineFunction(ExecutionContext context,
             }
             catch (Exception exception)
             {
-                if (!(exception is RuntimeException rte))
+                if (exception is not RuntimeException rte)
                 {
                     throw ExceptionHandlingOps.ConvertToRuntimeException(exception, functionDefinitionAst.Extent);
                 }
@@ -1314,6 +1388,17 @@ internal ScriptBlock GetScriptBlock(ExecutionContext context, bool isFilter)
         }
     }
 
+    internal static class ByRefOps
+    {
+        /// <summary>
+        /// There is no way to directly work with ByRef type in the expression tree, so we turn to reflection in this case.
+        /// </summary>
+        internal static object GetByRefPropertyValue(object target, PropertyInfo property)
+        {
+            return property.GetValue(target);
+        }
+    }
+
     internal static class HashtableOps
     {
         internal static void AddKeyValuePair(IDictionary hashtable, object key, object value, IScriptExtent errorExtent)
@@ -1379,7 +1464,7 @@ internal class CatchAll { }
         /// <summary>
         /// Represent a handler search result.
         /// </summary>
-        private class HandlerSearchResult
+        private sealed class HandlerSearchResult
         {
             internal HandlerSearchResult()
             {
@@ -1447,7 +1532,10 @@ private static void FindAndProcessHandler(Type[] types, int[] ranks,
             int handler = FindMatchingHandlerByType(exception.GetType(), types);
 
             // If no handler was found, return without changing the current result.
-            if (handler == -1) { return; }
+            if (handler == -1)
+            {
+                return;
+            }
 
             // New handler was found.
             //  - If new-rank is less than current-rank -- meaning the new handler is more specific,
@@ -1481,7 +1569,7 @@ internal static int FindMatchingHandler(MutableTuple tuple, RuntimeException rte
 
             do
             {
-                // Always assume no need to repeat the search for another interation
+                // Always assume no need to repeat the search for another iteration
                 continueToSearch = false;
                 // The 'ErrorRecord' of the current RuntimeException would be passed to $_
                 ErrorRecord errorRecordToPass = rte.ErrorRecord;
@@ -1578,23 +1666,33 @@ private static int FindMatchingHandlerByType(Type exceptionType, Type[] types)
 
         internal static bool SuspendStoppingPipeline(ExecutionContext context)
         {
-            LocalPipeline lpl = (LocalPipeline)context.CurrentRunspace.GetCurrentlyRunningPipeline();
-            if (lpl != null)
+            var localPipeline = (LocalPipeline)context.CurrentRunspace.GetCurrentlyRunningPipeline();
+            return SuspendStoppingPipelineImpl(localPipeline);
+        }
+
+        internal static void RestoreStoppingPipeline(ExecutionContext context, bool oldIsStopping)
+        {
+            var localPipeline = (LocalPipeline)context.CurrentRunspace.GetCurrentlyRunningPipeline();
+            RestoreStoppingPipelineImpl(localPipeline, oldIsStopping);
+        }
+
+        internal static bool SuspendStoppingPipelineImpl(LocalPipeline localPipeline)
+        {
+            if (localPipeline is not null)
             {
-                bool oldIsStopping = lpl.Stopper.IsStopping;
-                lpl.Stopper.IsStopping = false;
+                bool oldIsStopping = localPipeline.Stopper.IsStopping;
+                localPipeline.Stopper.IsStopping = false;
                 return oldIsStopping;
             }
 
             return false;
         }
 
-        internal static void RestoreStoppingPipeline(ExecutionContext context, bool oldIsStopping)
+        internal static void RestoreStoppingPipelineImpl(LocalPipeline localPipeline, bool oldIsStopping)
         {
-            LocalPipeline lpl = (LocalPipeline)context.CurrentRunspace.GetCurrentlyRunningPipeline();
-            if (lpl != null)
+            if (localPipeline is not null)
             {
-                lpl.Stopper.IsStopping = oldIsStopping;
+                localPipeline.Stopper.IsStopping = oldIsStopping;
             }
         }
 
@@ -1616,6 +1714,9 @@ internal static void CheckActionPreference(FunctionContext funcContext, Exceptio
                 InterpreterError.UpdateExceptionErrorRecordPosition(rte, funcContext.CurrentPosition);
             }
 
+            // Update the history id if needed to associate the exception with the right history item.
+            InterpreterError.UpdateExceptionErrorRecordHistoryId(rte, funcContext._executionContext);
+
             var context = funcContext._executionContext;
             var outputPipe = funcContext._outputPipe;
 
@@ -1726,10 +1827,7 @@ private static ActionPreference ProcessTraps(FunctionContext funcContext,
                     ErrorRecord err = rte.ErrorRecord;
                     // CurrentCommandProcessor is normally not null, but it is null
                     // when executing some unit tests through reflection.
-                    if (context.CurrentCommandProcessor != null)
-                    {
-                        context.CurrentCommandProcessor.ForgetScriptException();
-                    }
+                    context.CurrentCommandProcessor?.ForgetScriptException();
 
                     try
                     {
@@ -1923,10 +2021,7 @@ internal static void SetErrorVariables(IScriptExtent extent, RuntimeException rt
 
             if (rte is not PipelineStoppedException)
             {
-                if (outputPipe != null)
-                {
-                    outputPipe.AppendVariableList(VariableStreamKind.Error, errRec);
-                }
+                outputPipe?.AppendVariableList(VariableStreamKind.Error, errRec);
 
                 context.AppendDollarError(errRec);
             }
@@ -2301,8 +2396,13 @@ internal static void InitPowerShellTypesAtRuntime(TypeDefinitionAst[] types)
                 Diagnostics.Assert(t.Type != null, "TypeDefinitionAst.Type cannot be null");
                 if (t.IsClass)
                 {
-                    var helperType =
-                        t.Type.Assembly.GetType(t.Type.FullName + "_<staticHelpers>");
+                    if (t.Type.IsDefined(typeof(NoRunspaceAffinityAttribute), inherit: true))
+                    {
+                        // Skip the initialization for session state affinity.
+                        continue;
+                    }
+
+                    var helperType = t.Type.Assembly.GetType(t.Type.FullName + "_<staticHelpers>");
                     Diagnostics.Assert(helperType != null, "no corresponding " + t.Type.FullName + "_<staticHelpers> type found");
                     foreach (var p in helperType.GetFields(BindingFlags.Static | BindingFlags.NonPublic))
                     {
@@ -2773,10 +2873,8 @@ internal static object ForEach(IEnumerator enumerator, object expression, object
         {
             Diagnostics.Assert(enumerator != null, "The ForEach() operator should never receive a null enumerator value from the runtime.");
             Diagnostics.Assert(arguments != null, "The ForEach() operator should never receive a null value for the 'arguments' parameter from the runtime.");
-            if (expression == null)
-            {
-                throw new ArgumentNullException(nameof(expression));
-            }
+
+            ArgumentNullException.ThrowIfNull(expression);
 
             var context = Runspace.DefaultRunspace.ExecutionContext;
 
@@ -2855,6 +2953,11 @@ internal static object ForEach(IEnumerator enumerator, object expression, object
             ScriptBlock sb = expression as ScriptBlock;
             if (sb != null)
             {
+                if (sb.HasCleanBlock)
+                {
+                    throw new PSNotSupportedException(ParserStrings.ForEachNotSupportCleanBlock);
+                }
+
                 Pipe outputPipe = new Pipe(result);
                 if (sb.HasBeginBlock)
                 {
@@ -2979,8 +3082,18 @@ internal static object ForEach(IEnumerator enumerator, object expression, object
                                 {
                                     if (!CoreTypes.Contains(basedCurrent.GetType()))
                                     {
-                                        throw InterpreterError.NewInterpreterException(current, typeof(PSInvalidOperationException),
-                                            null, "MethodInvocationNotSupportedInConstrainedLanguage", ParserStrings.InvokeMethodConstrainedLanguage);
+                                        if (SystemPolicy.GetSystemLockdownPolicy() != SystemEnforcementMode.Audit)
+                                        {
+                                            throw InterpreterError.NewInterpreterException(current, typeof(PSInvalidOperationException),
+                                                null, "MethodInvocationNotSupportedInConstrainedLanguage", ParserStrings.InvokeMethodConstrainedLanguage);
+                                        }
+
+                                        SystemPolicy.LogWDACAuditMessage(
+                                            context: context,
+                                            title: ParserStrings.WDACParserForEachOperatorLogTitle,
+                                            message: StringUtil.Format(ParserStrings.WDACParserForEachOperatorLogMessage, method.Name ?? string.Empty),
+                                            fqid: "ForEachOperatorMethodInvocationNotAllowed",
+                                            dropIntoDebugger: true);
                                     }
                                 }
 
@@ -3497,10 +3610,7 @@ internal static void WriteEnumerableToPipe(IEnumerator enumerator, Pipe pipe, Ex
                 if (dispose)
                 {
                     var disposable = enumerator as IDisposable;
-                    if (disposable != null)
-                    {
-                        disposable.Dispose();
-                    }
+                    disposable?.Dispose();
                 }
             }
         }
@@ -3531,4 +3641,111 @@ internal static object[] GetSlice(IList list, int startIndex)
             return result;
         }
     }
+
+    internal static class MemberInvocationLoggingOps
+    {
+#if DEBUG
+        private static readonly Lazy<bool> DumpLogAMSIContent = new Lazy<bool>(
+            () => {
+                object result = Environment.GetEnvironmentVariable("__PSDumpAMSILogContent");
+                if (result != null && LanguagePrimitives.TryConvertTo(result, out int value))
+                {
+                    return value == 1;
+                }
+                return false;
+            }
+        );
+#endif
+
+        private static string ArgumentToString(object arg)
+        {
+            object baseObj = PSObject.Base(arg);
+            if (baseObj is null)
+            {
+                // The argument is null or AutomationNull.Value.
+                return "null";
+            }
+
+            // The comparisons below are ordered by the likelihood of arguments being of those types.
+            if (baseObj is string str)
+            {
+                return str;
+            }
+
+            // Special case some types to call 'ToString' on the object. For the rest, we return its
+            // full type name to avoid calling a potentially expensive 'ToString' implementation.
+            Type baseType = baseObj.GetType();
+            if (baseType.IsEnum || baseType.IsPrimitive
+                || baseType == typeof(Guid)
+                || baseType == typeof(Uri)
+                || baseType == typeof(Version)
+                || baseType == typeof(SemanticVersion)
+                || baseType == typeof(BigInteger)
+                || baseType == typeof(decimal))
+            {
+                return baseObj.ToString();
+            }
+
+            return baseType.FullName;
+        }
+
+        internal static void LogMemberInvocation(string targetName, string name, object[] args)
+        {
+            try
+            {
+                var contentName = "PowerShellMemberInvocation";
+                var argsBuilder = new Text.StringBuilder();
+
+                for (int i = 0; i < args.Length; i++)
+                {
+                    string value = ArgumentToString(args[i]);
+
+                    if (i > 0)
+                    {
+                        argsBuilder.Append(", ");
+                    }
+
+                    argsBuilder.Append($"<{value}>");
+                }
+
+                string content = $"<{targetName}>.{name}({argsBuilder})";
+
+#if DEBUG
+                if (DumpLogAMSIContent.Value)
+                {
+                    Console.WriteLine("\n=== Amsi notification report content ===");
+                    Console.WriteLine(content);
+                }
+#endif
+
+                var success = AmsiUtils.ReportContent(
+                    name: contentName,
+                    content: content);
+
+#if DEBUG
+                if (DumpLogAMSIContent.Value)
+                {
+                    Console.WriteLine($"=== Amsi notification report success: {success} ===");
+                }
+#endif
+            }
+            catch (PSSecurityException)
+            {
+                // ReportContent() will throw PSSecurityException if AMSI detects malware, which
+                // must be propagated.
+                throw;
+            }
+#pragma warning disable CS0168 // variable declared but never used
+            catch (Exception ex)
+#pragma warning restore CS0168
+            {
+#if DEBUG
+                if (DumpLogAMSIContent.Value)
+                {
+                    Console.WriteLine($"!!! Amsi notification report exception: {ex} !!!");
+                }
+#endif
+            }
+        }
+    }
 }
diff --git a/src/System.Management.Automation/engine/runtime/Operations/StringOps.cs b/src/System.Management.Automation/engine/runtime/Operations/StringOps.cs
index 0c4658cc14d..0ac1db53ff9 100644
--- a/src/System.Management.Automation/engine/runtime/Operations/StringOps.cs
+++ b/src/System.Management.Automation/engine/runtime/Operations/StringOps.cs
@@ -28,11 +28,8 @@ internal static string Multiply(string s, int times)
         {
             Diagnostics.Assert(s != null, "caller to verify argument is not null");
 
-            if (times < 0)
-            {
-                // TODO: this should be a runtime error.
-                throw new ArgumentOutOfRangeException(nameof(times));
-            }
+            // TODO: this should be a runtime error.
+            ArgumentOutOfRangeException.ThrowIfNegative(times);
 
             if (times == 0 || s.Length == 0)
             {
diff --git a/src/System.Management.Automation/engine/runtime/Operations/VariableOps.cs b/src/System.Management.Automation/engine/runtime/Operations/VariableOps.cs
index d337c56ab2b..72126c726c9 100644
--- a/src/System.Management.Automation/engine/runtime/Operations/VariableOps.cs
+++ b/src/System.Management.Automation/engine/runtime/Operations/VariableOps.cs
@@ -46,6 +46,13 @@ internal static object SetVariableValue(VariablePath variablePath, object value,
                                      : GetAttributeCollection(attributeAsts);
                 var = new PSVariable(variablePath.UnqualifiedPath, value, ScopedItemOptions.None, attributes);
 
+                if (attributes.Count > 0)
+                {
+                    // When there are any attributes, it's possible the value was converted/transformed.
+                    // Use 'GetValueRaw' here so the debugger check won't be triggered.
+                    value = var.GetValueRaw();
+                }
+
                 // Marking untrusted values for assignments in 'ConstrainedLanguage' mode is done in
                 // SessionStateScope.SetVariable.
                 sessionState.SetVariable(variablePath, var, false, origin);
@@ -81,7 +88,7 @@ internal static object SetVariableValue(VariablePath variablePath, object value,
                             null,
                             Metadata.InvalidValueFailure,
                             var.Name,
-                            ((value != null) ? value.ToString() : "$null"));
+                            (value != null) ? value.ToString() : "$null");
 
                         throw e;
                     }
@@ -277,7 +284,7 @@ private static UsingResult GetUsingValueFromTuple(MutableTuple tuple, string usi
             return null;
         }
 
-        private class UsingResult
+        private sealed class UsingResult
         {
             public object Value { get; set; }
         }
diff --git a/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs b/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs
index 93394be6808..defd87662e8 100644
--- a/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs
+++ b/src/System.Management.Automation/engine/runtime/ScriptBlockToPowerShell.cs
@@ -172,7 +172,7 @@ internal static void ThrowError(ScriptBlockToPowerShellNotSupportedException ex,
         }
     }
 
-    internal class UsingExpressionAstSearcher : AstSearcher
+    internal sealed class UsingExpressionAstSearcher : AstSearcher
     {
         internal static IEnumerable<Ast> FindAllUsingExpressions(Ast ast)
         {
@@ -207,7 +207,7 @@ public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast
     /// Converts a ScriptBlock to a PowerShell object by traversing the
     /// given Ast.
     /// </summary>
-    internal class ScriptBlockToPowerShellConverter
+    internal sealed class ScriptBlockToPowerShellConverter
     {
         private readonly PowerShell _powershell;
         private ExecutionContext _context;
@@ -230,10 +230,7 @@ internal static PowerShell Convert(ScriptBlockAst body,
         {
             ExecutionContext.CheckStackDepth();
 
-            if (args == null)
-            {
-                args = Array.Empty<object>();
-            }
+            args ??= Array.Empty<object>();
 
             // Perform validations on the ScriptBlock.  GetSimplePipeline can allow for more than one
             // pipeline if the first parameter is true, but Invoke-Command doesn't yet support multiple
@@ -324,16 +321,14 @@ internal static PowerShell Convert(ScriptBlockAst body,
         /// <param name = "scriptBlock">Scriptblock to search.</param>
         /// <param name = "isTrustedInput">True when input is trusted.</param>
         /// <param name = "context">Execution context.</param>
-        /// <param name = "foreachNames">List of foreach command names and aliases.</param>
         /// <returns>Dictionary of using variable map.</returns>
         internal static Dictionary<string, object> GetUsingValuesForEachParallel(
             ScriptBlock scriptBlock,
             bool isTrustedInput,
-            ExecutionContext context,
-            string[] foreachNames)
+            ExecutionContext context)
         {
-            // Using variables for Foreach-Object -Parallel use are restricted to be within the 
-            // Foreach-Object -Parallel call scope. This will filter the using variable map to variables 
+            // Using variables for Foreach-Object -Parallel use are restricted to be within the
+            // Foreach-Object -Parallel call scope. This will filter the using variable map to variables
             // only within the current (outer) Foreach-Object -Parallel call scope.
             var usingAsts = UsingExpressionAstSearcher.FindAllUsingExpressions(scriptBlock.Ast).ToList();
             UsingExpressionAst usingAst = null;
@@ -350,7 +345,7 @@ internal static Dictionary<string, object> GetUsingValuesForEachParallel(
                 for (int i = 0; i < usingAsts.Count; ++i)
                 {
                     usingAst = (UsingExpressionAst)usingAsts[i];
-                    if (IsInForeachParallelCallingScope(usingAst, foreachNames))
+                    if (IsInForeachParallelCallingScope(scriptBlock.Ast, usingAst))
                     {
                         var value = Compiler.GetExpressionValue(usingAst.SubExpression, isTrustedInput, context);
                         string usingAstKey = PsUtils.GetUsingExpressionKey(usingAst);
@@ -363,11 +358,11 @@ internal static Dictionary<string, object> GetUsingValuesForEachParallel(
                 if (rte.ErrorRecord.FullyQualifiedErrorId.Equals("VariableIsUndefined", StringComparison.Ordinal))
                 {
                     throw InterpreterError.NewInterpreterException(
-                        targetObject: null, 
+                        targetObject: null,
                         exceptionType: typeof(RuntimeException),
-                        errorPosition: usingAst.Extent, 
+                        errorPosition: usingAst.Extent,
                         resourceIdAndErrorId: "UsingVariableIsUndefined",
-                        resourceString: AutomationExceptions.UsingVariableIsUndefined, 
+                        resourceString: AutomationExceptions.UsingVariableIsUndefined,
                         args: rte.ErrorRecord.TargetObject);
                 }
             }
@@ -382,21 +377,65 @@ internal static Dictionary<string, object> GetUsingValuesForEachParallel(
             return usingValueMap;
         }
 
+        // List of Foreach-Object command names and aliases.
+        // TODO: Look into using SessionState.Internal.GetAliasTable() to find all user created aliases.
+        //       But update Alias command logic to maintain reverse table that lists all aliases mapping
+        //       to a single command definition, for performance.
+        private static readonly string[] forEachNames = new string[]
+        {
+            "ForEach-Object",
+            "foreach",
+            "%"
+        };
+
+        private static bool FindForEachInCommand(CommandAst commandAst)
+        {
+            // Command name is always the first element in the CommandAst.
+            //  e.g., 'foreach -parallel {}'
+            var commandNameElement = (commandAst.CommandElements.Count > 0) ? commandAst.CommandElements[0] : null;
+            if (commandNameElement is StringConstantExpressionAst commandName)
+            {
+                bool found = false;
+                foreach (var foreachName in forEachNames)
+                {
+                    if (commandName.Value.Equals(foreachName, StringComparison.OrdinalIgnoreCase))
+                    {
+                        found = true;
+                        break;
+                    }
+                }
+
+                if (found)
+                {
+                    // Verify this is foreach-object with parallel parameter set.
+                    var bindingResult = StaticParameterBinder.BindCommand(commandAst);
+                    if (bindingResult.BoundParameters.ContainsKey("Parallel"))
+                    {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
         /// <summary>
         /// Walks the using Ast to verify it is used within a foreach-object -parallel command
         /// and parameter set scope, and not from within a nested foreach-object -parallel call.
         /// </summary>
+        /// <param name="scriptblockAst">Scriptblock Ast containing this using Ast</param>
         /// <param name="usingAst">Using Ast to check.</param>
-        /// <param name-"foreachNames">List of foreach-object command names.</param>
         /// <returns>True if using expression is in current call scope.</returns>
         private static bool IsInForeachParallelCallingScope(
-            UsingExpressionAst usingAst,
-            string[] foreachNames)
+            Ast scriptblockAst,
+            UsingExpressionAst usingAst)
         {
+            Diagnostics.Assert(usingAst != null, "usingAst argument cannot be null.");
+
             /*
                 Example:
                 $Test1 = "Hello"
-                1 | ForEach-Object -Parallel { 
+                1 | ForEach-Object -Parallel {
                    $using:Test1
                    $Test2 = "Goodbye"
                    1 | ForEach-Object -Parallel {
@@ -405,54 +444,23 @@ private static bool IsInForeachParallelCallingScope(
                    }
                 }
             */
-            Diagnostics.Assert(usingAst != null, "usingAst argument cannot be null.");
 
             // Search up the parent Ast chain for 'Foreach-Object -Parallel' commands.
             Ast currentParent = usingAst.Parent;
-            int foreachNestedCount = 0;
-            while (currentParent != null)
+            while (currentParent != scriptblockAst)
             {
                 // Look for Foreach-Object outer commands
-                if (currentParent is CommandAst commandAst)
-                {
-                    foreach (var commandElement in commandAst.CommandElements)
-                    {
-                        if (commandElement is StringConstantExpressionAst commandName)
-                        {
-                            bool found = false;
-                            foreach (var foreachName in foreachNames)
-                            {
-                                if (commandName.Value.Equals(foreachName, StringComparison.OrdinalIgnoreCase))
-                                {
-                                    found = true;
-                                    break;
-                                }
-                            }
-                            
-                            if (found)
-                            {
-                                // Verify this is foreach-object with parallel parameter set.
-                                var bindingResult = StaticParameterBinder.BindCommand(commandAst);
-                                if (bindingResult.BoundParameters.ContainsKey("Parallel"))
-                                {
-                                    foreachNestedCount++;
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if (foreachNestedCount > 1)
+                if (currentParent is CommandAst commandAst &&
+                    FindForEachInCommand(commandAst))
                 {
-                    // This using expression Ast is outside the original calling scope.
+                    // Using Ast is outside the invoking foreach scope.
                     return false;
                 }
 
                 currentParent = currentParent.Parent;
             }
 
-            return foreachNestedCount == 1;
+            return true;
         }
 
         /// <summary>
@@ -534,7 +542,7 @@ private static Tuple<Dictionary<string, object>, object[]> GetUsingValues(
 
                     if (variables != null)
                     {
-                        if (!(usingAst.SubExpression is VariableExpressionAst variableAst))
+                        if (usingAst.SubExpression is not VariableExpressionAst variableAst)
                         {
                             throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException),
                                 usingAst.Extent, "CantGetUsingExpressionValueWithSpecifiedVariableDictionary", AutomationExceptions.CantGetUsingExpressionValueWithSpecifiedVariableDictionary, usingAst.Extent.Text);
@@ -938,7 +946,7 @@ private void AddParameter(CommandParameterAst commandParameterAst, bool isTruste
 
             // first character in parameter name must be a dash
             _powershell.AddParameter(
-                string.Format(CultureInfo.InvariantCulture, "-{0}{1}", commandParameterAst.ParameterName, nameSuffix),
+                string.Create(CultureInfo.InvariantCulture, $"-{commandParameterAst.ParameterName}{nameSuffix}"),
                 argument);
         }
     }
diff --git a/src/System.Management.Automation/engine/serialization.cs b/src/System.Management.Automation/engine/serialization.cs
index b4115de05cb..add0eab25dc 100644
--- a/src/System.Management.Automation/engine/serialization.cs
+++ b/src/System.Management.Automation/engine/serialization.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.Specialized;
 using System.Collections.ObjectModel;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
@@ -82,10 +83,8 @@ internal SerializationContext(int depth, SerializationOptions options, PSRemotin
     /// <summary>
     /// This class provides public functionality for serializing a PSObject.
     /// </summary>
-    public class PSSerializer
+    public static class PSSerializer
     {
-        internal PSSerializer() { }
-
         /// <summary>
         /// Serializes an object into PowerShell CliXml.
         /// </summary>
@@ -123,6 +122,45 @@ public static string Serialize(object source, int depth)
             return sb.ToString();
         }
 
+        /// <summary>
+        /// Serializes list of objects into PowerShell CliXml.
+        /// </summary>
+        /// <param name="source">The input objects to serialize.</param>
+        /// <param name="depth">The depth of the members to serialize.</param>
+        /// <param name="enumerate">Enumerates input objects and serializes one at a time.</param>
+        /// <returns>The serialized object, as CliXml.</returns>
+        internal static string Serialize(IList<object> source, int depth, bool enumerate)
+        {
+            StringBuilder sb = new();
+
+            XmlWriterSettings xmlSettings = new()
+            {
+                CloseOutput = true,
+                Encoding = Encoding.Unicode,
+                Indent = true,
+                OmitXmlDeclaration = true
+            };
+
+            XmlWriter xw = XmlWriter.Create(sb, xmlSettings);
+            Serializer serializer = new(xw, depth, useDepthFromTypes: true);
+
+            if (enumerate)
+            {
+                foreach (object item in source)
+                {
+                    serializer.Serialize(item);
+                }
+            }
+            else
+            {
+                serializer.Serialize(source);
+            }
+
+            serializer.Done();
+
+            return sb.ToString();
+        }
+
         /// <summary>
         /// Deserializes PowerShell CliXml into an object.
         /// </summary>
@@ -734,7 +772,7 @@ internal static string MaskDeserializationPrefix(string typeName)
 
         /// <summary>
         /// Gets a new collection of typenames without "Deserialization." prefix
-        /// in the typename. This will allow to map type info/format info of the orignal type
+        /// in the typename. This will allow to map type info/format info of the original type
         /// for deserialized objects.
         /// </summary>
         /// <param name="typeNames"></param>
@@ -1610,8 +1648,8 @@ private void PrepareCimInstanceForSerialization(PSObject psObject, CimInstance c
             // ATTACH INSTANCE METADATA TO THE OBJECT BEING SERIALIZED
             List<string> namesOfModifiedProperties = cimInstance
                 .CimInstanceProperties
-                .Where(p => p.IsValueModified)
-                .Select(p => p.Name)
+                .Where(static p => p.IsValueModified)
+                .Select(static p => p.Name)
                 .ToList();
             if (namesOfModifiedProperties.Count != 0)
             {
@@ -1633,7 +1671,7 @@ private void PrepareCimInstanceForSerialization(PSObject psObject, CimInstance c
                 instanceMetadata.Properties.Add(
                     new PSNoteProperty(
                         InternalDeserializer.CimModifiedProperties,
-                        string.Join(" ", namesOfModifiedProperties)));
+                        string.Join(' ', namesOfModifiedProperties)));
             }
         }
 
@@ -1980,7 +2018,7 @@ int depth
 
             foreach (PSMemberInfo info in propertyCollection)
             {
-                if (!(info is PSProperty prop))
+                if (info is not PSProperty prop)
                 {
                     continue;
                 }
@@ -2160,7 +2198,10 @@ int depth
                     }
 
                     Dbg.Assert(key != null, "Dictionary keys should never be null");
-                    if (key == null) break;
+                    if (key == null)
+                    {
+                        break;
+                    }
 
                     WriteStartElement(SerializationStrings.DictionaryEntryTag);
                     WriteOneObject(key, null, SerializationStrings.DictionaryKey, depth);
@@ -3332,28 +3373,28 @@ private CimClass RehydrateCimClass(PSPropertyInfo classMetadataProperty)
 
                 PSObject psoDeserializedClass = PSObject.AsPSObject(deserializedClass);
 
-                if (!(psoDeserializedClass.InstanceMembers[InternalDeserializer.CimNamespaceProperty] is PSPropertyInfo namespaceProperty))
+                if (psoDeserializedClass.InstanceMembers[InternalDeserializer.CimNamespaceProperty] is not PSPropertyInfo namespaceProperty)
                 {
                     return null;
                 }
 
                 string cimNamespace = namespaceProperty.Value as string;
 
-                if (!(psoDeserializedClass.InstanceMembers[InternalDeserializer.CimClassNameProperty] is PSPropertyInfo classNameProperty))
+                if (psoDeserializedClass.InstanceMembers[InternalDeserializer.CimClassNameProperty] is not PSPropertyInfo classNameProperty)
                 {
                     return null;
                 }
 
                 string cimClassName = classNameProperty.Value as string;
 
-                if (!(psoDeserializedClass.InstanceMembers[InternalDeserializer.CimServerNameProperty] is PSPropertyInfo computerNameProperty))
+                if (psoDeserializedClass.InstanceMembers[InternalDeserializer.CimServerNameProperty] is not PSPropertyInfo computerNameProperty)
                 {
                     return null;
                 }
 
                 string computerName = computerNameProperty.Value as string;
 
-                if (!(psoDeserializedClass.InstanceMembers[InternalDeserializer.CimHashCodeProperty] is PSPropertyInfo hashCodeProperty))
+                if (psoDeserializedClass.InstanceMembers[InternalDeserializer.CimHashCodeProperty] is not PSPropertyInfo hashCodeProperty)
                 {
                     return null;
                 }
@@ -3458,7 +3499,7 @@ private PSObject RehydrateCimInstance(PSObject deserializedObject)
                 if ((modifiedPropertiesProperty != null) && (modifiedPropertiesProperty.Value != null))
                 {
                     string modifiedPropertiesString = modifiedPropertiesProperty.Value.ToString();
-                    foreach (string nameOfModifiedProperty in modifiedPropertiesString.Split(Utils.Separators.Space))
+                    foreach (string nameOfModifiedProperty in modifiedPropertiesString.Split(' '))
                     {
                         namesOfModifiedProperties.Add(nameOfModifiedProperty);
                     }
@@ -3470,7 +3511,7 @@ private PSObject RehydrateCimInstance(PSObject deserializedObject)
             {
                 foreach (PSMemberInfo deserializedMemberInfo in deserializedObject.AdaptedMembers)
                 {
-                    if (!(deserializedMemberInfo is PSPropertyInfo deserializedProperty))
+                    if (deserializedMemberInfo is not PSPropertyInfo deserializedProperty)
                     {
                         continue;
                     }
@@ -3490,7 +3531,7 @@ private PSObject RehydrateCimInstance(PSObject deserializedObject)
             // process properties that were originally "extended" properties
             foreach (PSMemberInfo deserializedMemberInfo in deserializedObject.InstanceMembers)
             {
-                if (!(deserializedMemberInfo is PSPropertyInfo deserializedProperty))
+                if (deserializedMemberInfo is not PSPropertyInfo deserializedProperty)
                 {
                     continue;
                 }
@@ -3670,7 +3711,7 @@ private PSObject ReadPSObject()
                     else if (IsKnownContainerTag(out ct))
                     {
                         s_trace.WriteLine("Found container node {0}", ct);
-                        baseObject = ReadKnownContainer(ct);
+                        baseObject = ReadKnownContainer(ct, dso.InternalTypeNames);
                     }
                     else if (IsNextElement(SerializationStrings.PSObjectTag))
                     {
@@ -3934,12 +3975,12 @@ private bool IsKnownContainerTag(out ContainerType ct)
             return ct != ContainerType.None;
         }
 
-        private object ReadKnownContainer(ContainerType ct)
+        private object ReadKnownContainer(ContainerType ct, ConsolidatedString InternalTypeNames)
         {
             switch (ct)
             {
                 case ContainerType.Dictionary:
-                    return ReadDictionary(ct);
+                    return ReadDictionary(ct, InternalTypeNames);
 
                 case ContainerType.Enumerable:
                 case ContainerType.List:
@@ -3988,19 +4029,81 @@ private object ReadListContainer(ContainerType ct)
             return list;
         }
 
+        /// <summary>
+        /// Utility class for ReadDictionary(), supporting ordered or non-ordered Dictionary methods.
+        /// </summary>
+        private class PSDictionary
+        {
+            private IDictionary dict;
+            private readonly bool _isOrdered;
+            private int _keyClashFoundIteration = 0;
+
+            public PSDictionary(bool isOrdered) {
+                _isOrdered = isOrdered;
+
+                // By default use a non case-sensitive comparer
+                if (_isOrdered) {
+                    dict = new OrderedDictionary(StringComparer.CurrentCultureIgnoreCase);
+                } else {
+                    dict = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
+                }
+            }
+
+            public object DictionaryObject { get { return dict; } }
+
+            public void Add(object key, object value) {
+                // On the first collision, copy the hash table to one that uses the `key` object's default comparer.
+                if (_keyClashFoundIteration == 0 && dict.Contains(key))
+                {
+                    _keyClashFoundIteration++;
+                    IDictionary newDict = _isOrdered ? new OrderedDictionary(dict.Count) : new Hashtable(dict.Count);
+
+                    foreach (DictionaryEntry entry in dict) {
+                        newDict.Add(entry.Key, entry.Value);
+                    }
+
+                    dict = newDict;
+                }
+
+                // win8: 389060. If there are still collisions even with case-sensitive default comparer,
+                // use an IEqualityComparer that does object ref equality.
+                if (_keyClashFoundIteration == 1 && dict.Contains(key))
+                {
+                    _keyClashFoundIteration++;
+                    IEqualityComparer equalityComparer = new ReferenceEqualityComparer();
+                    IDictionary newDict = _isOrdered ?
+                                            new OrderedDictionary(dict.Count, equalityComparer) :
+                                            new Hashtable(dict.Count, equalityComparer);
+
+                    foreach (DictionaryEntry entry in dict) {
+                        newDict.Add(entry.Key, entry.Value);
+                    }
+
+                    dict = newDict;
+                }
+
+                dict.Add(key, value);
+            }
+        }
+
         /// <summary>
         /// Deserialize Dictionary.
         /// </summary>
         /// <returns></returns>
-        private object ReadDictionary(ContainerType ct)
+        private object ReadDictionary(ContainerType ct, ConsolidatedString InternalTypeNames)
         {
             Dbg.Assert(ct == ContainerType.Dictionary, "Unrecognized ContainerType enum");
 
             // We assume the hash table is a PowerShell hash table and hence uses
             // a case insensitive string comparer.  If we discover a key collision,
             // we'll revert back to the default comparer.
-            Hashtable table = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
-            int keyClashFoundIteration = 0;
+
+            // Find whether original directory was ordered
+            bool isOrdered = InternalTypeNames.Count > 0 &&
+                (Deserializer.MaskDeserializationPrefix(InternalTypeNames[0]) == typeof(OrderedDictionary).FullName);
+
+            PSDictionary dictionary = new PSDictionary(isOrdered);
+
             if (ReadStartElementAndHandleEmpty(SerializationStrings.DictionaryTag))
             {
                 while (_reader.NodeType == XmlNodeType.Element)
@@ -4039,38 +4142,10 @@ private object ReadDictionary(ContainerType ct)
 
                     object value = ReadOneObject();
 
-                    // On the first collision, copy the hash table to one that uses the default comparer.
-                    if (table.ContainsKey(key) && (keyClashFoundIteration == 0))
-                    {
-                        keyClashFoundIteration++;
-                        Hashtable newHashTable = new Hashtable();
-                        foreach (DictionaryEntry entry in table)
-                        {
-                            newHashTable.Add(entry.Key, entry.Value);
-                        }
-
-                        table = newHashTable;
-                    }
-
-                    // win8: 389060. If there are still collisions even with case-sensitive default comparer,
-                    // use an IEqualityComparer that does object ref equality.
-                    if (table.ContainsKey(key) && (keyClashFoundIteration == 1))
-                    {
-                        keyClashFoundIteration++;
-                        IEqualityComparer equalityComparer = new ReferenceEqualityComparer();
-                        Hashtable newHashTable = new Hashtable(equalityComparer);
-                        foreach (DictionaryEntry entry in table)
-                        {
-                            newHashTable.Add(entry.Key, entry.Value);
-                        }
-
-                        table = newHashTable;
-                    }
-
                     try
                     {
                         // Add entry to hashtable
-                        table.Add(key, value);
+                        dictionary.Add(key, value);
                     }
                     catch (ArgumentException e)
                     {
@@ -4083,7 +4158,7 @@ private object ReadDictionary(ContainerType ct)
                 ReadEndElement();
             }
 
-            return table;
+            return dictionary.DictionaryObject;
         }
 
         #endregion known containers
@@ -4916,7 +4991,7 @@ private static string DecodeString(string s)
 
         #endregion misc
 
-        [TraceSourceAttribute("InternalDeserializer", "InternalDeserializer class")]
+        [TraceSource("InternalDeserializer", "InternalDeserializer class")]
         private static readonly PSTraceSource s_trace = PSTraceSource.GetTracer("InternalDeserializer", "InternalDeserializer class");
     }
 
@@ -5086,7 +5161,7 @@ internal TypeSerializationInfo(Type type, string itemTag, string propertyTag, Ty
 
     /// <summary>
     /// A class for identifying types which are treated as KnownType by Monad.
-    /// A KnownType is guranteed to be available on machine on which monad is
+    /// A KnownType is guaranteed to be available on machine on which monad is
     /// running.
     /// </summary>
     internal static class KnownTypes
@@ -5639,7 +5714,7 @@ internal static object GetPropertyValueInThreadSafeManner(PSPropertyInfo propert
     /// <typeparam name="T">type of dictionary values</typeparam>
     internal class WeakReferenceDictionary<T> : IDictionary<object, T>
     {
-        private class WeakReferenceEqualityComparer : IEqualityComparer<WeakReference>
+        private sealed class WeakReferenceEqualityComparer : IEqualityComparer<WeakReference>
         {
             public bool Equals(WeakReference x, WeakReference y)
             {
@@ -5874,7 +5949,6 @@ IEnumerator IEnumerable.GetEnumerator()
     /// 2) values that can be serialized and deserialized during PowerShell remoting handshake
     ///    (in major-version compatible versions of PowerShell remoting)
     /// </summary>
-    [Serializable]
     public sealed class PSPrimitiveDictionary : Hashtable
     {
         #region Constructors
@@ -5900,10 +5974,7 @@ public PSPrimitiveDictionary()
         public PSPrimitiveDictionary(Hashtable other)
             : base(StringComparer.OrdinalIgnoreCase)
         {
-            if (other == null)
-            {
-                throw new ArgumentNullException(nameof(other));
-            }
+            ArgumentNullException.ThrowIfNull(other);
 
             foreach (DictionaryEntry entry in other)
             {
@@ -5975,7 +6046,7 @@ private static string VerifyKey(object key)
                 typeof(PSPrimitiveDictionary)
             };
 
-        private void VerifyValue(object value)
+        private static void VerifyValue(object value)
         {
             // null is a primitive type
             if (value == null)
@@ -6033,7 +6104,7 @@ private void VerifyValue(object value)
         public override void Add(object key, object value)
         {
             string keyAsString = VerifyKey(key);
-            this.VerifyValue(value);
+            VerifyValue(value);
             base.Add(keyAsString, value);
         }
 
@@ -6061,7 +6132,7 @@ public override object this[object key]
             set
             {
                 string keyAsString = VerifyKey(key);
-                this.VerifyValue(value);
+                VerifyValue(value);
                 base[keyAsString] = value;
             }
         }
@@ -6089,7 +6160,7 @@ public object this[string key]
 
             set
             {
-                this.VerifyValue(value);
+                VerifyValue(value);
                 base[key] = value;
             }
         }
@@ -6493,7 +6564,7 @@ public void Add(string key, PSPrimitiveDictionary[] value)
 
         /// <summary>
         /// If originalHash contains PSVersionTable, then just returns the Cloned copy of
-        /// the original hash. Othewise, creates a clone copy and add PSVersionInfo.GetPSVersionTable
+        /// the original hash. Otherwise, creates a clone copy and add PSVersionInfo.GetPSVersionTable
         /// to the clone and returns.
         /// </summary>
         /// <param name="originalHash"></param>
@@ -6595,7 +6666,6 @@ namespace Microsoft.PowerShell
     ///       - PropertySerializationSet=<empty>
     ///     - TargetTypeForDeserialization=DeserializingTypeConverter
     ///   - Add a field of that type in unit tests / S.M.A.Test.SerializationTest+RehydratedType
-    ///     (testsrc\admintest\monad\DRT\engine\UnitTests\SerializationTest.cs)
     /// -->
     public sealed class DeserializingTypeConverter : PSTypeConverter
     {
@@ -7214,7 +7284,6 @@ internal static PSSenderInfo RehydratePSSenderInfo(PSObject pso)
 
             PSSenderInfo senderInfo = new PSSenderInfo(psPrincipal, GetPropertyValue<string>(pso, "ConnectionString"));
 
-            senderInfo.ClientTimeZone = TimeZoneInfo.Local;
             senderInfo.ApplicationArguments = GetPropertyValue<PSPrimitiveDictionary>(pso, "ApplicationArguments");
 
             return senderInfo;
@@ -7223,7 +7292,9 @@ internal static PSSenderInfo RehydratePSSenderInfo(PSObject pso)
         private static System.Security.Cryptography.X509Certificates.X509Certificate2 RehydrateX509Certificate2(PSObject pso)
         {
             byte[] rawData = GetPropertyValue<byte[]>(pso, "RawData");
+            #pragma warning disable SYSLIB0057
             return new System.Security.Cryptography.X509Certificates.X509Certificate2(rawData);
+            #pragma warning restore SYSLIB0057
         }
 
         private static System.Security.Cryptography.X509Certificates.X500DistinguishedName RehydrateX500DistinguishedName(PSObject pso)
@@ -7274,7 +7345,7 @@ public static UInt32 GetParameterSetMetadataFlags(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is ParameterSetMetadata parameterSetMetadata))
+            if (instance.BaseObject is not ParameterSetMetadata parameterSetMetadata)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
@@ -7295,7 +7366,7 @@ public static PSObject GetInvocationInfo(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is DebuggerStopEventArgs dbgStopEventArgs))
+            if (instance.BaseObject is not DebuggerStopEventArgs dbgStopEventArgs)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
@@ -7554,7 +7625,7 @@ public static Guid GetFormatViewDefinitionInstanceId(PSObject instance)
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
 
-            if (!(instance.BaseObject is FormatViewDefinition formatViewDefinition))
+            if (instance.BaseObject is not FormatViewDefinition formatViewDefinition)
             {
                 throw PSTraceSource.NewArgumentNullException(nameof(instance));
             }
diff --git a/src/System.Management.Automation/help/AliasHelpInfo.cs b/src/System.Management.Automation/help/AliasHelpInfo.cs
index 57cb7fdd184..5d02e754397 100644
--- a/src/System.Management.Automation/help/AliasHelpInfo.cs
+++ b/src/System.Management.Automation/help/AliasHelpInfo.cs
@@ -8,7 +8,7 @@ namespace System.Management.Automation
     /// <summary>
     /// Stores help information related to Alias Commands.
     /// </summary>
-    internal class AliasHelpInfo : HelpInfo
+    internal sealed class AliasHelpInfo : HelpInfo
     {
         /// <summary>
         /// Initializes a new instance of the AliasHelpInfo class.
@@ -40,8 +40,7 @@ private AliasHelpInfo(AliasInfo aliasInfo)
             }
 
             _fullHelpObject.TypeNames.Clear();
-            _fullHelpObject.TypeNames.Add(string.Format(Globalization.CultureInfo.InvariantCulture,
-                "AliasHelpInfo#{0}", Name));
+            _fullHelpObject.TypeNames.Add(string.Create(Globalization.CultureInfo.InvariantCulture, $"AliasHelpInfo#{Name}"));
             _fullHelpObject.TypeNames.Add("AliasHelpInfo");
             _fullHelpObject.TypeNames.Add("HelpInfo");
         }
diff --git a/src/System.Management.Automation/help/AliasHelpProvider.cs b/src/System.Management.Automation/help/AliasHelpProvider.cs
index f14f815891a..d93aa76b2f3 100644
--- a/src/System.Management.Automation/help/AliasHelpProvider.cs
+++ b/src/System.Management.Automation/help/AliasHelpProvider.cs
@@ -161,7 +161,7 @@ internal override IEnumerable<HelpInfo> SearchHelp(HelpRequest helpRequest, bool
                         foreach (HelpInfo helpInfo in ExactMatchHelp(exactMatchHelpRequest))
                         {
                             // Component/Role/Functionality match is done only for SearchHelp
-                            // as "get-help * -category alias" should not forwad help to
+                            // as "get-help * -category alias" should not forward help to
                             // CommandHelpProvider..(ExactMatchHelp does forward help to
                             // CommandHelpProvider)
                             if (!Match(helpInfo, helpRequest))
@@ -208,7 +208,7 @@ internal override IEnumerable<HelpInfo> SearchHelp(HelpRequest helpRequest, bool
                         foreach (HelpInfo helpInfo in ExactMatchHelp(exactMatchHelpRequest))
                         {
                             // Component/Role/Functionality match is done only for SearchHelp
-                            // as "get-help * -category alias" should not forwad help to
+                            // as "get-help * -category alias" should not forward help to
                             // CommandHelpProvider..(ExactMatchHelp does forward help to
                             // CommandHelpProvider)
                             if (!Match(helpInfo, helpRequest))
diff --git a/src/System.Management.Automation/help/BaseCommandHelpInfo.cs b/src/System.Management.Automation/help/BaseCommandHelpInfo.cs
index 0c70b815928..c24e45ee788 100644
--- a/src/System.Management.Automation/help/BaseCommandHelpInfo.cs
+++ b/src/System.Management.Automation/help/BaseCommandHelpInfo.cs
@@ -214,8 +214,7 @@ internal Uri LookupUriFromCommandInfo()
             string commandToSearch = commandName;
             if (!string.IsNullOrEmpty(moduleName))
             {
-                commandToSearch = string.Format(CultureInfo.InvariantCulture,
-                    "{0}\\{1}", moduleName, commandName);
+                commandToSearch = string.Create(CultureInfo.InvariantCulture, $"{moduleName}\\{commandName}");
             }
 
             ExecutionContext context = LocalPipeline.GetExecutionContextFromTLS();
@@ -252,7 +251,7 @@ internal Uri LookupUriFromCommandInfo()
                         // Split the string based on <s> (space). We decided to go with this approach as
                         // UX localization authors use spaces. Correctly extracting only the wellformed URI
                         // is out-of-scope for this fix.
-                        string[] tempUriSplitArray = uriString.Split(Utils.Separators.Space);
+                        string[] tempUriSplitArray = uriString.Split(' ');
                         uriString = tempUriSplitArray[0];
                     }
 
@@ -319,7 +318,7 @@ internal static Uri GetUriFromCommandPSObject(PSObject commandFullHelp)
                             // Split the string based on <s> (space). We decided to go with this approach as
                             // UX localization authors use spaces. Correctly extracting only the wellformed URI
                             // is out-of-scope for this fix.
-                            string[] tempUriSplitArray = uriString.Split(Utils.Separators.Space);
+                            string[] tempUriSplitArray = uriString.Split(' ');
                             uriString = tempUriSplitArray[0];
                         }
 
@@ -356,15 +355,9 @@ internal override bool MatchPatternInContent(WildcardPattern pattern)
             string synopsis = Synopsis;
             string detailedDescription = DetailedDescription;
 
-            if (synopsis == null)
-            {
-                synopsis = string.Empty;
-            }
+            synopsis ??= string.Empty;
 
-            if (detailedDescription == null)
-            {
-                detailedDescription = string.Empty;
-            }
+            detailedDescription ??= string.Empty;
 
             return pattern.IsMatch(synopsis) || pattern.IsMatch(detailedDescription);
         }
@@ -462,7 +455,7 @@ internal string DetailedDescription
                     return string.Empty;
                 }
 
-                // I think every cmdlet description should atleast have 400 characters...
+                // I think every cmdlet description should at least have 400 characters...
                 // so starting with this assumption..I did an average of all the cmdlet
                 // help content available at the time of writing this code and came up
                 // with this number.
diff --git a/src/System.Management.Automation/help/CabinetNativeApi.cs b/src/System.Management.Automation/help/CabinetNativeApi.cs
index 76e8fe853a4..fd369ca03be 100644
--- a/src/System.Management.Automation/help/CabinetNativeApi.cs
+++ b/src/System.Management.Automation/help/CabinetNativeApi.cs
@@ -70,10 +70,7 @@ protected override void Dispose(bool disposing)
             }
 
             // Free managed objects within 'if (disposing)' if needed
-            if (fdiContext != null)
-            {
-                fdiContext.Dispose();
-            }
+            fdiContext?.Dispose();
             // Free unmanaged objects here
             this.CleanUpDelegates();
 
@@ -546,7 +543,7 @@ internal static FileShare ConvertPermissionModeToFileShare(int pmode)
 
         #region IO classes, structures, and enums
 
-        [FlagsAttribute]
+        [Flags]
         internal enum PermissionMode : int
         {
             None = 0x0000,
@@ -554,7 +551,7 @@ internal enum PermissionMode : int
             Read = 0x0100
         }
 
-        [FlagsAttribute]
+        [Flags]
         internal enum OpFlags : int
         {
             RdOnly = 0x0000,
diff --git a/src/System.Management.Automation/help/CommandHelpProvider.cs b/src/System.Management.Automation/help/CommandHelpProvider.cs
index d5863f31819..15af80745db 100644
--- a/src/System.Management.Automation/help/CommandHelpProvider.cs
+++ b/src/System.Management.Automation/help/CommandHelpProvider.cs
@@ -879,7 +879,7 @@ private HelpInfo GetFromCommandCacheOrCmdletInfo(CmdletInfo cmdletInfo)
         /// <summary>
         /// Used to retrieve helpinfo by removing the prefix from the noun portion of a command name.
         /// Import-Module and Import-PSSession supports changing the name of a command
-        /// by suppling a custom prefix. In those cases, the help content is stored by using the
+        /// by supplying a custom prefix. In those cases, the help content is stored by using the
         /// original command name (without prefix) as the key.
         ///
         /// This method retrieves the help content by suppressing the prefix and then making a copy
@@ -950,15 +950,21 @@ private void AddToCommandCache(string mshSnapInId, string cmdletName, MamlComman
 
             // Add snapin qualified type name for this command at the top..
             // this will enable customizations of the help object.
-            helpInfo.FullHelp.TypeNames.Insert(0, string.Format(CultureInfo.InvariantCulture,
-                "MamlCommandHelpInfo#{0}#{1}", mshSnapInId, cmdletName));
+            helpInfo.FullHelp.TypeNames.Insert(
+                index: 0,
+                string.Create(
+                    CultureInfo.InvariantCulture,
+                    $"MamlCommandHelpInfo#{mshSnapInId}#{cmdletName}"));
 
             if (!string.IsNullOrEmpty(mshSnapInId))
             {
                 key = mshSnapInId + "\\" + key;
                 // Add snapin name to the typenames of this object
-                helpInfo.FullHelp.TypeNames.Insert(1, string.Format(CultureInfo.InvariantCulture,
-                    "MamlCommandHelpInfo#{0}", mshSnapInId));
+                helpInfo.FullHelp.TypeNames.Insert(
+                    index: 1,
+                    string.Create(
+                        CultureInfo.InvariantCulture,
+                        $"MamlCommandHelpInfo#{mshSnapInId}"));
             }
 
             AddCache(key, helpInfo);
@@ -1075,10 +1081,7 @@ internal override IEnumerable<HelpInfo> SearchHelp(HelpRequest helpRequest, bool
                         {
                             // this command is not visible to the user (from CommandOrigin) so
                             // dont show help topic for it.
-                            if (!hiddenCommands.Contains(helpName))
-                            {
-                                hiddenCommands.Add(helpName);
-                            }
+                            hiddenCommands.Add(helpName);
 
                             continue;
                         }
@@ -1275,7 +1278,7 @@ internal override IEnumerable<HelpInfo> ProcessForwardedHelp(HelpInfo helpInfo,
                     }
                     catch (CommandNotFoundException)
                     {
-                        // ignore errors for aliases pointing to non-existant commands
+                        // ignore errors for aliases pointing to non-existent commands
                     }
                 }
 
@@ -1359,7 +1362,7 @@ internal virtual CommandSearcher GetCommandSearcherForSearch(string pattern, Exe
     /// Legally, user-defined Help Data should be within the same file as the corresponding
     /// commandHelp and it should appear after the commandHelp.
     /// </summary>
-    internal class UserDefinedHelpData
+    internal sealed class UserDefinedHelpData
     {
         private UserDefinedHelpData()
         {
diff --git a/src/System.Management.Automation/help/DefaultCommandHelpObjectBuilder.cs b/src/System.Management.Automation/help/DefaultCommandHelpObjectBuilder.cs
index 34b1bd84cef..bce76b005a2 100644
--- a/src/System.Management.Automation/help/DefaultCommandHelpObjectBuilder.cs
+++ b/src/System.Management.Automation/help/DefaultCommandHelpObjectBuilder.cs
@@ -57,8 +57,8 @@ internal static PSObject GetPSObjectFromCmdletInfo(CommandInfo input)
             PSObject obj = new PSObject();
 
             obj.TypeNames.Clear();
-            obj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#{1}#command", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp, commandInfo.ModuleName));
-            obj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#{1}", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp, commandInfo.ModuleName));
+            obj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#{commandInfo.ModuleName}#command"));
+            obj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#{commandInfo.ModuleName}"));
             obj.TypeNames.Add(DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp);
             obj.TypeNames.Add("CmdletHelpInfo");
             obj.TypeNames.Add("HelpInfo");
@@ -160,7 +160,7 @@ internal static void AddDetailsProperties(PSObject obj, string name, string noun
             PSObject mshObject = new PSObject();
 
             mshObject.TypeNames.Clear();
-            mshObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#details", typeNameForHelp));
+            mshObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{typeNameForHelp}#details"));
 
             mshObject.Properties.Add(new PSNoteProperty("name", name));
             mshObject.Properties.Add(new PSNoteProperty("noun", noun));
@@ -192,7 +192,7 @@ internal static void AddSyntaxProperties(PSObject obj, string cmdletName, ReadOn
             PSObject mshObject = new PSObject();
 
             mshObject.TypeNames.Clear();
-            mshObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#syntax", typeNameForHelp));
+            mshObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{typeNameForHelp}#syntax"));
 
             AddSyntaxItemProperties(mshObject, cmdletName, parameterSets, common, typeNameForHelp);
 
@@ -216,7 +216,7 @@ private static void AddSyntaxItemProperties(PSObject obj, string cmdletName, Rea
                 PSObject mshObject = new PSObject();
 
                 mshObject.TypeNames.Clear();
-                mshObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#syntaxItem", typeNameForHelp));
+                mshObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{typeNameForHelp}#syntaxItem"));
 
                 mshObject.Properties.Add(new PSNoteProperty("name", cmdletName));
                 mshObject.Properties.Add(new PSNoteProperty("CommonParameters", common));
@@ -263,7 +263,7 @@ private static void AddSyntaxParametersProperties(PSObject obj, IEnumerable<Comm
                 PSObject mshObject = new PSObject();
 
                 mshObject.TypeNames.Clear();
-                mshObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#parameter", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+                mshObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#parameter"));
 
                 Collection<Attribute> attributes = new Collection<Attribute>(parameter.Attributes);
 
@@ -339,7 +339,7 @@ private static void AddParameterValueGroupProperties(PSObject obj, string[] valu
             PSObject paramValueGroup = new PSObject();
 
             paramValueGroup.TypeNames.Clear();
-            paramValueGroup.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#parameterValueGroup", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            paramValueGroup.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#parameterValueGroup"));
 
             ArrayList paramValue = new ArrayList(values);
 
@@ -359,7 +359,7 @@ internal static void AddParametersProperties(PSObject obj, Dictionary<string, Pa
             PSObject paramsObject = new PSObject();
 
             paramsObject.TypeNames.Clear();
-            paramsObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#parameters", typeNameForHelp));
+            paramsObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{typeNameForHelp}#parameters"));
 
             ArrayList paramObjects = new ArrayList();
 
@@ -385,7 +385,7 @@ internal static void AddParametersProperties(PSObject obj, Dictionary<string, Pa
                 PSObject paramObject = new PSObject();
 
                 paramObject.TypeNames.Clear();
-                paramObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#parameter", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+                paramObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#parameter"));
 
                 AddParameterProperties(paramObject, parameter, parameters[parameter].Aliases,
                     parameters[parameter].IsDynamic, parameters[parameter].ParameterType, parameters[parameter].Attributes);
@@ -551,7 +551,7 @@ private static void AddParameterTypeProperties(PSObject obj, Type parameterType,
             PSObject mshObject = new PSObject();
 
             mshObject.TypeNames.Clear();
-            mshObject.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#type", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            mshObject.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#type"));
 
             var parameterTypeString = CommandParameterSetInfo.GetParameterTypeString(parameterType, attributes);
             mshObject.Properties.Add(new PSNoteProperty("name", parameterTypeString));
@@ -605,9 +605,7 @@ internal static void AddInputTypesProperties(PSObject obj, Dictionary<string, Pa
 
                     foreach (ParameterAttribute attrib in attribs)
                     {
-                        if (attrib.ValueFromPipeline ||
-                            attrib.ValueFromPipelineByPropertyName ||
-                            attrib.ValueFromRemainingArguments)
+                        if (attrib.ValueFromPipeline || attrib.ValueFromPipelineByPropertyName)
                         {
                             if (!inputs.Contains(parameter.Value.ParameterType.FullName))
                             {
@@ -633,17 +631,17 @@ internal static void AddInputTypesProperties(PSObject obj, Dictionary<string, Pa
             PSObject inputTypesObj = new PSObject();
 
             inputTypesObj.TypeNames.Clear();
-            inputTypesObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#inputTypes", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            inputTypesObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#inputTypes"));
 
             PSObject inputTypeObj = new PSObject();
 
             inputTypeObj.TypeNames.Clear();
-            inputTypeObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#inputType", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            inputTypeObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#inputType"));
 
             PSObject typeObj = new PSObject();
 
             typeObj.TypeNames.Clear();
-            typeObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#type", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            typeObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#type"));
 
             typeObj.Properties.Add(new PSNoteProperty("name", sb.ToString()));
             inputTypeObj.Properties.Add(new PSNoteProperty("type", typeObj));
@@ -661,17 +659,17 @@ private static void AddOutputTypesProperties(PSObject obj, ReadOnlyCollection<PS
             PSObject returnValuesObj = new PSObject();
 
             returnValuesObj.TypeNames.Clear();
-            returnValuesObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#returnValues", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            returnValuesObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#returnValues"));
 
             PSObject returnValueObj = new PSObject();
 
             returnValueObj.TypeNames.Clear();
-            returnValueObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#returnValue", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            returnValueObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#returnValue"));
 
             PSObject typeObj = new PSObject();
 
             typeObj.TypeNames.Clear();
-            typeObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#type", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+            typeObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#type"));
 
             if (outputTypes.Count == 0)
             {
@@ -753,7 +751,7 @@ internal static void AddRelatedLinksProperties(PSObject obj, string relatedLink)
                 PSObject navigationLinkObj = new PSObject();
 
                 navigationLinkObj.TypeNames.Clear();
-                navigationLinkObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#navigationLinks", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+                navigationLinkObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#navigationLinks"));
 
                 navigationLinkObj.Properties.Add(new PSNoteProperty("uri", relatedLink));
 
@@ -789,7 +787,7 @@ internal static void AddRelatedLinksProperties(PSObject obj, string relatedLink)
                 PSObject relatedLinksObj = new PSObject();
 
                 relatedLinksObj.TypeNames.Clear();
-                relatedLinksObj.TypeNames.Add(string.Format(CultureInfo.InvariantCulture, "{0}#relatedLinks", DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp));
+                relatedLinksObj.TypeNames.Add(string.Create(CultureInfo.InvariantCulture, $"{DefaultCommandHelpObjectBuilder.TypeNameForDefaultHelp}#relatedLinks"));
                 relatedLinksObj.Properties.Add(new PSNoteProperty("navigationLink", navigationLinkValues.ToArray()));
 
                 obj.Properties.Add(new PSNoteProperty("relatedLinks", relatedLinksObj));
diff --git a/src/System.Management.Automation/help/DscResourceHelpProvider.cs b/src/System.Management.Automation/help/DscResourceHelpProvider.cs
index c29ed02b456..c33a03dc899 100644
--- a/src/System.Management.Automation/help/DscResourceHelpProvider.cs
+++ b/src/System.Management.Automation/help/DscResourceHelpProvider.cs
@@ -141,7 +141,7 @@ private IEnumerable<HelpInfo> GetHelpInfo(DscResourceSearcher searcher)
                 }
                 else if (!string.IsNullOrEmpty(moduleDir))
                 {
-                    string[] splitPath = moduleDir.Split(Utils.Separators.Backslash);
+                    string[] splitPath = moduleDir.Split('\\');
                     moduleName = splitPath[splitPath.Length - 1];
                 }
 
@@ -279,7 +279,7 @@ private void LoadHelpFile(string helpFile, string helpFileIdentifier, string com
             }
 
             if (e != null)
-                s_tracer.WriteLine("Error occured in DscResourceHelpProvider {0}", e.Message);
+                s_tracer.WriteLine("Error occurred in DscResourceHelpProvider {0}", e.Message);
 
             if (reportErrors && (e != null))
             {
diff --git a/src/System.Management.Automation/help/HelpCategoryInvalidException.cs b/src/System.Management.Automation/help/HelpCategoryInvalidException.cs
index d9ccee7bae6..8ab4fa37ca6 100644
--- a/src/System.Management.Automation/help/HelpCategoryInvalidException.cs
+++ b/src/System.Management.Automation/help/HelpCategoryInvalidException.cs
@@ -16,7 +16,6 @@ namespace Microsoft.PowerShell.Commands
     /// The exception that is thrown when there is no help category matching
     /// a specific input string.
     /// </summary>
-    [Serializable]
     public class HelpCategoryInvalidException : ArgumentException, IContainsErrorRecord
     {
         /// <summary>
@@ -113,30 +112,11 @@ public override string Message
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")] 
         protected HelpCategoryInvalidException(SerializationInfo info,
-                                        StreamingContext context)
-            : base(info, context)
+                                        StreamingContext context)            
         {
-            _helpCategory = info.GetString("HelpCategory");
-            CreateErrorRecord();
-        }
-
-        /// <summary>
-        /// Populates a <see cref="System.Runtime.Serialization.SerializationInfo"/> with the
-        /// data needed to serialize the HelpCategoryInvalidException object.
-        /// </summary>
-        /// <param name="info">The <see cref="System.Runtime.Serialization.SerializationInfo"/> to populate with data.</param>
-        /// <param name="context">The destination for this serialization.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-
-            info.AddValue("HelpCategory", this._helpCategory);
+            throw new NotSupportedException();
         }
 
         #endregion Serialization
diff --git a/src/System.Management.Automation/help/HelpCommands.cs b/src/System.Management.Automation/help/HelpCommands.cs
index edf8d9e4355..3bed2a26820 100644
--- a/src/System.Management.Automation/help/HelpCommands.cs
+++ b/src/System.Management.Automation/help/HelpCommands.cs
@@ -231,8 +231,8 @@ public SwitchParameter ShowWindow
         // The following variable controls the view.
         private HelpView _viewTokenToAdd = HelpView.Default;
 
-        private readonly Stopwatch _timer = new Stopwatch();
 #if LEGACYTELEMETRY
+        private readonly Stopwatch _timer = new Stopwatch();
         private bool _updatedHelp;
 #endif
 
@@ -245,7 +245,9 @@ public SwitchParameter ShowWindow
         /// </summary>
         protected override void BeginProcessing()
         {
+#if LEGACYTELEMETRY
             _timer.Start();
+#endif
         }
 
         /// <summary>
@@ -253,6 +255,17 @@ protected override void BeginProcessing()
         /// </summary>
         protected override void ProcessRecord()
         {
+#if !UNIX
+            string fileSystemPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(this.Name);
+            string normalizedName = FileSystemProvider.NormalizePath(fileSystemPath);
+            // In a restricted session, do not allow help on network paths or device paths, because device paths can be used to bypass the restrictions.
+            if (Utils.IsSessionRestricted(this.Context) && (FileSystemProvider.PathIsNetworkPath(normalizedName) || Utils.PathIsDevicePath(normalizedName))) {
+                Exception e = new ArgumentException(HelpErrors.NoNetworkCommands, "Name");
+                ErrorRecord errorRecord = new ErrorRecord(e, "CommandNameNotAllowed", ErrorCategory.InvalidArgument, null);
+                this.ThrowTerminatingError(errorRecord);
+            }
+#endif
+
             HelpSystem helpSystem = this.Context.HelpSystem;
             try
             {
@@ -321,9 +334,9 @@ protected override void ProcessRecord()
                     countOfHelpInfos++;
                 }
 
+#if LEGACYTELEMETRY
                 _timer.Stop();
 
-#if LEGACYTELEMETRY
                 if (!string.IsNullOrEmpty(Name))
                     Microsoft.PowerShell.Telemetry.Internal.TelemetryAPI.ReportGetHelpTelemetry(Name, countOfHelpInfos, _timer.ElapsedMilliseconds, _updatedHelp);
 #endif
@@ -422,7 +435,7 @@ private PSObject TransformView(PSObject originalHelpObject)
 
             if (originalHelpObject.TypeNames.Count == 0)
             {
-                string typeToAdd = string.Format(CultureInfo.InvariantCulture, "HelpInfo#{0}", tokenToAdd);
+                string typeToAdd = string.Create(CultureInfo.InvariantCulture, $"HelpInfo#{tokenToAdd}");
                 objectToReturn.TypeNames.Add(typeToAdd);
             }
             else
@@ -438,7 +451,7 @@ private PSObject TransformView(PSObject originalHelpObject)
                         continue;
                     }
 
-                    string typeToAdd = string.Format(CultureInfo.InvariantCulture, "{0}#{1}", typeName, tokenToAdd);
+                    string typeToAdd = string.Create(CultureInfo.InvariantCulture, $"{typeName}#{tokenToAdd}");
                     s_tracer.WriteLine("Adding type {0}", typeToAdd);
                     objectToReturn.TypeNames.Add(typeToAdd);
                 }
@@ -502,11 +515,11 @@ private void GetAndWriteParameterInfo(HelpInfo helpInfo)
         }
 
         /// <summary>
-        /// Validates input parameters.
+        /// Validates input parameters. 
         /// </summary>
         /// <param name="cat">Category specified by the user.</param>
         /// <exception cref="ArgumentException">
-        /// If the request cant be serviced.
+        /// If the request can't be serviced.
         /// </exception>
         private void ValidateAndThrowIfError(HelpCategory cat)
         {
@@ -721,10 +734,8 @@ internal static void VerifyParameterForbiddenInRemoteRunspace(Cmdlet cmdlet, str
         #endregion
 
         #region trace
-
-        [TraceSourceAttribute("GetHelpCommand ", "GetHelpCommand ")]
-        private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("GetHelpCommand ", "GetHelpCommand ");
-
+        [TraceSource("GetHelpCommand", "GetHelpCommand")]
+        private static readonly PSTraceSource s_tracer = PSTraceSource.GetTracer("GetHelpCommand", "GetHelpCommand");
         #endregion
     }
 
@@ -735,8 +746,8 @@ public static class GetHelpCodeMethods
     {
         /// <summary>
         /// Checks whether the default runspace associated with the current thread has the standard Get-Help cmdlet.
-        /// <summary>
-        /// <return>True if Get-Help is found, false otherwise.</return>
+        /// </summary>
+        /// <returns>True if Get-Help is found, false otherwise.</returns>
         private static bool DoesCurrentRunspaceIncludeCoreHelpCmdlet()
         {
             InitialSessionState iss = Runspace.DefaultRunspace.InitialSessionState;
@@ -819,8 +830,7 @@ public static string GetHelpUri(PSObject commandInfoPSObject)
             string cmdName = cmdInfo.Name;
             if (!string.IsNullOrEmpty(cmdInfo.ModuleName))
             {
-                cmdName = string.Format(CultureInfo.InvariantCulture,
-                                        "{0}\\{1}", cmdInfo.ModuleName, cmdInfo.Name);
+                cmdName = string.Create(CultureInfo.InvariantCulture, $"{cmdInfo.ModuleName}\\{cmdInfo.Name}");
             }
 
             if (DoesCurrentRunspaceIncludeCoreHelpCmdlet())
@@ -839,7 +849,7 @@ public static string GetHelpUri(PSObject commandInfoPSObject)
                     foreach (
                         Uri result in
                             currentContext.HelpSystem.ExactMatchHelp(helpRequest).Select(
-                                helpInfo => helpInfo.GetUriForOnlineHelp()).Where(result => result != null))
+                                helpInfo => helpInfo.GetUriForOnlineHelp()).Where(static result => result != null))
                     {
                         return result.OriginalString;
                     }
diff --git a/src/System.Management.Automation/help/HelpCommentsParser.cs b/src/System.Management.Automation/help/HelpCommentsParser.cs
index 7b853381d4d..b4a21e04d69 100644
--- a/src/System.Management.Automation/help/HelpCommentsParser.cs
+++ b/src/System.Management.Automation/help/HelpCommentsParser.cs
@@ -20,7 +20,7 @@ namespace System.Management.Automation
     /// <summary>
     /// Parses help comments and turns them into HelpInfo objects.
     /// </summary>
-    internal class HelpCommentsParser
+    internal sealed class HelpCommentsParser
     {
         private HelpCommentsParser()
         {
@@ -482,7 +482,7 @@ private void BuildSyntaxForParameterSet(XmlElement command, XmlElement syntax, M
                 CompiledCommandParameter parameter = mergedParameter.Parameter;
                 ParameterSetSpecificMetadata parameterSetData = parameter.GetParameterSetData(1u << i);
                 string description = GetParameterDescription(parameter.Name);
-                bool supportsWildcards = parameter.CompiledAttributes.Any(attribute => attribute is SupportsWildcardsAttribute);
+                bool supportsWildcards = parameter.CompiledAttributes.Any(static attribute => attribute is SupportsWildcardsAttribute);
                 XmlElement parameterElement = BuildXmlForParameter(parameter.Name,
                     parameterSetData.IsMandatory, parameterSetData.ValueFromPipeline,
                     parameterSetData.ValueFromPipelineByPropertyName,
@@ -628,7 +628,7 @@ private static string GetSection(List<string> commentLines, ref int i)
                     start++;
                 }
 
-                sb.Append(line.Substring(start));
+                sb.Append(line.AsSpan(start));
                 sb.Append('\n');
             }
 
@@ -951,7 +951,7 @@ internal static bool IsCommentHelpText(List<Token> commentBlock)
             var result = new List<Language.Token>();
 
             // Any whitespace between the token and the first comment is allowed.
-            int nextMaxStartLine = Int32.MaxValue;
+            int nextMaxStartLine = int.MaxValue;
 
             for (int i = startIndex; i < tokens.Length; i++)
             {
diff --git a/src/System.Management.Automation/help/HelpFileHelpInfo.cs b/src/System.Management.Automation/help/HelpFileHelpInfo.cs
index adb2afac47f..104111777ef 100644
--- a/src/System.Management.Automation/help/HelpFileHelpInfo.cs
+++ b/src/System.Management.Automation/help/HelpFileHelpInfo.cs
@@ -9,7 +9,7 @@ namespace System.Management.Automation
     /// Class HelpFileHelpInfo keeps track of help information to be returned by
     /// command help provider.
     /// </summary>
-    internal class HelpFileHelpInfo : HelpInfo
+    internal sealed class HelpFileHelpInfo : HelpInfo
     {
         /// <summary>
         /// Constructor for HelpFileHelpInfo.
diff --git a/src/System.Management.Automation/help/HelpFileHelpProvider.cs b/src/System.Management.Automation/help/HelpFileHelpProvider.cs
index 8900a7167b3..a6c21a3bacc 100644
--- a/src/System.Management.Automation/help/HelpFileHelpProvider.cs
+++ b/src/System.Management.Automation/help/HelpFileHelpProvider.cs
@@ -170,11 +170,7 @@ private Collection<string> FilterToLatestModuleVersion(Collection<string> filesM
             {
                 string fileName = Path.GetFileName(file);
 
-                if (!fileNameHash.Contains(fileName))
-                {
-                    fileNameHash.Add(fileName);
-                }
-                else
+                if (!fileNameHash.Add(fileName))
                 {
                     // If the file need to be removed, add it to matchedFilesToRemove, if not already present.
                     if (!matchedFilesToRemove.Contains(file))
@@ -275,9 +271,8 @@ private static void GetModuleNameAndVersion(string psmodulePathRoot, string file
 
             if (filePath.StartsWith(psmodulePathRoot, StringComparison.OrdinalIgnoreCase))
             {
-                var moduleRootSubPath = filePath.Remove(0, psmodulePathRoot.Length).TrimStart(Utils.Separators.Directory);
+                var moduleRootSubPath = filePath.Remove(0, psmodulePathRoot.Length);
                 var pathParts = moduleRootSubPath.Split(Utils.Separators.Directory, StringSplitOptions.RemoveEmptyEntries);
-
                 moduleName = pathParts[0];
                 var potentialVersion = pathParts[1];
                 Version result;
@@ -368,9 +363,9 @@ internal Collection<string> GetExtendedSearchPaths()
                     {
                         // Get all the directories under the module path
                         // * and SearchOption.AllDirectories gets all the version directories.
-                        string[] directories = Directory.GetDirectories(psModulePath, "*", SearchOption.AllDirectories);
+                        IEnumerable<string> directories = Directory.EnumerateDirectories(psModulePath, "*", SearchOption.AllDirectories);
 
-                        var possibleModuleDirectories = directories.Where(directory => !ModuleUtils.IsPossibleResourceDirectory(directory));
+                        var possibleModuleDirectories = directories.Where(static directory => !ModuleUtils.IsPossibleResourceDirectory(directory));
 
                         foreach (string directory in possibleModuleDirectories)
                         {
diff --git a/src/System.Management.Automation/help/HelpNotFoundException.cs b/src/System.Management.Automation/help/HelpNotFoundException.cs
index 6008b4afbc1..109cd21dbd9 100644
--- a/src/System.Management.Automation/help/HelpNotFoundException.cs
+++ b/src/System.Management.Automation/help/HelpNotFoundException.cs
@@ -15,7 +15,6 @@ namespace Microsoft.PowerShell.Commands
     /// <summary>
     /// The exception that is thrown when there is no help found for a topic.
     /// </summary>
-    [Serializable]
     public class HelpNotFoundException : SystemException, IContainsErrorRecord
     {
         /// <summary>
@@ -119,32 +118,13 @@ public override string Message
         /// </summary>
         /// <param name="info">Serialization information.</param>
         /// <param name="context">Streaming context.</param>
+        [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")] 
         protected HelpNotFoundException(SerializationInfo info,
                                         StreamingContext context)
-            : base(info, context)
         {
-            _helpTopic = info.GetString("HelpTopic");
-            CreateErrorRecord();
+            throw new NotSupportedException();
         }
-
-        /// <summary>
-        /// Populates a <see cref="System.Runtime.Serialization.SerializationInfo"/> with the
-        /// data needed to serialize the HelpNotFoundException object.
-        /// </summary>
-        /// <param name="info">The <see cref="System.Runtime.Serialization.SerializationInfo"/> to populate with data.</param>
-        /// <param name="context">The destination for this serialization.</param>
-        public override void GetObjectData(SerializationInfo info, StreamingContext context)
-        {
-            if (info == null)
-            {
-                throw PSTraceSource.NewArgumentNullException(nameof(info));
-            }
-
-            base.GetObjectData(info, context);
-
-            info.AddValue("HelpTopic", this._helpTopic);
-        }
-
+        
         #endregion Serialization
     }
 }
diff --git a/src/System.Management.Automation/help/HelpProvider.cs b/src/System.Management.Automation/help/HelpProvider.cs
index 7e2adbe552f..3280a8d2540 100644
--- a/src/System.Management.Automation/help/HelpProvider.cs
+++ b/src/System.Management.Automation/help/HelpProvider.cs
@@ -226,8 +226,7 @@ internal string GetDefaultShellSearchPath()
             string shellID = this.HelpSystem.ExecutionContext.ShellID;
             // Beginning in PowerShell 6.0.0.12, the $pshome is no longer registry specified, we search the application base instead.
             // We use executing assemblies location in case registry entry not found
-            return Utils.GetApplicationBase(shellID)
-                ?? Path.GetDirectoryName(PsUtils.GetMainModule(System.Diagnostics.Process.GetCurrentProcess()).FileName);
+            return Utils.GetApplicationBase(shellID) ?? Path.GetDirectoryName(Environment.ProcessPath);
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/help/HelpSystem.cs b/src/System.Management.Automation/help/HelpSystem.cs
index a7c86bd5ebd..8880e022cac 100644
--- a/src/System.Management.Automation/help/HelpSystem.cs
+++ b/src/System.Management.Automation/help/HelpSystem.cs
@@ -903,12 +903,12 @@ internal enum HelpCategory
         /// </summary>
         All = 0xFFFFF,
 
-        ///<summary>
+        /// <summary>
         /// Default Help.
         /// </summary>
         DefaultHelp = 0x1000,
 
-        ///<summary>
+        /// <summary>
         /// Help for a Configuration.
         /// </summary>
         Configuration = 0x4000,
diff --git a/src/System.Management.Automation/help/HelpUtils.cs b/src/System.Management.Automation/help/HelpUtils.cs
index d4f2abe255b..ab4a39f362a 100644
--- a/src/System.Management.Automation/help/HelpUtils.cs
+++ b/src/System.Management.Automation/help/HelpUtils.cs
@@ -41,7 +41,7 @@ internal static string GetModuleBaseForUserHelp(string moduleBase, string module
             // In case of other modules, the help is under moduleBase/<current_culture> or
             // under moduleBase/<Version>/<current_culture>.
             // The code below creates a similar layout for CurrentUser scope.
-            // If the the scope is AllUsers, then the help goes under moduleBase.
+            // If the scope is AllUsers, then the help goes under moduleBase.
 
             var userHelpPath = GetUserHomeHelpSearchPath();
             string moduleBaseParent = Directory.GetParent(moduleBase).Name;
diff --git a/src/System.Management.Automation/help/MUIFileSearcher.cs b/src/System.Management.Automation/help/MUIFileSearcher.cs
index d6d3313b68d..dd437fa90c0 100644
--- a/src/System.Management.Automation/help/MUIFileSearcher.cs
+++ b/src/System.Management.Automation/help/MUIFileSearcher.cs
@@ -10,7 +10,7 @@
 
 namespace System.Management.Automation
 {
-    internal class MUIFileSearcher
+    internal sealed class MUIFileSearcher
     {
         /// <summary>
         /// Constructor. It is private so that MUIFileSearcher is used only internal for this class.
@@ -57,6 +57,14 @@ private MUIFileSearcher(string target, Collection<string> searchPaths)
         /// </summary>
         internal SearchMode SearchMode { get; } = SearchMode.Unique;
 
+        private static readonly System.IO.EnumerationOptions _enumerationOptions = new()
+        {
+            IgnoreInaccessible = false,
+            AttributesToSkip = 0,
+            MatchType = MatchType.Win32,
+            MatchCasing = MatchCasing.CaseInsensitive,
+        };
+
         private Collection<string> _result = null;
 
         /// <summary>
@@ -113,52 +121,11 @@ private void SearchForFiles()
             }
         }
 
-        private static string[] GetFiles(string path, string pattern)
-        {
-#if UNIX
-            // On Linux, file names are case sensitive, so we need to add
-            // extra logic to select the files that match the given pattern.
-            var result = new List<string>();
-            string[] files = Directory.GetFiles(path);
-
-            var wildcardPattern = WildcardPattern.ContainsWildcardCharacters(pattern)
-                ? WildcardPattern.Get(pattern, WildcardOptions.IgnoreCase)
-                : null;
-
-            foreach (string filePath in files)
-            {
-                if (filePath.Contains(pattern, StringComparison.OrdinalIgnoreCase))
-                {
-                    result.Add(filePath);
-                    break;
-                }
-
-                if (wildcardPattern != null)
-                {
-                    string fileName = Path.GetFileName(filePath);
-                    if (wildcardPattern.IsMatch(fileName))
-                    {
-                        result.Add(filePath);
-                    }
-                }
-            }
-
-            return result.ToArray();
-#else
-            return Directory.GetFiles(path, pattern);
-#endif
-        }
-
         private void AddFiles(string muiDirectory, string directory, string pattern)
         {
             if (Directory.Exists(muiDirectory))
             {
-                string[] files = GetFiles(muiDirectory, pattern);
-
-                if (files == null)
-                    return;
-
-                foreach (string file in files)
+                foreach (string file in Directory.EnumerateFiles(muiDirectory, pattern, _enumerationOptions))
                 {
                     string path = Path.Combine(muiDirectory, file);
 
diff --git a/src/System.Management.Automation/help/MamlClassHelpInfo.cs b/src/System.Management.Automation/help/MamlClassHelpInfo.cs
index 042ab21e703..579d72c87fe 100644
--- a/src/System.Management.Automation/help/MamlClassHelpInfo.cs
+++ b/src/System.Management.Automation/help/MamlClassHelpInfo.cs
@@ -86,7 +86,7 @@ internal MamlClassHelpInfo Copy()
         internal MamlClassHelpInfo Copy(HelpCategory newCategoryToUse)
         {
             MamlClassHelpInfo result = new MamlClassHelpInfo(_fullHelpObject.Copy(), newCategoryToUse);
-            result.FullHelp.Properties["Category"].Value = newCategoryToUse;
+            result.FullHelp.Properties["Category"].Value = newCategoryToUse.ToString();
             return result;
         }
 
diff --git a/src/System.Management.Automation/help/MamlCommandHelpInfo.cs b/src/System.Management.Automation/help/MamlCommandHelpInfo.cs
index 774ef1fc1c0..8ae7b0a32cd 100644
--- a/src/System.Management.Automation/help/MamlCommandHelpInfo.cs
+++ b/src/System.Management.Automation/help/MamlCommandHelpInfo.cs
@@ -315,7 +315,7 @@ internal MamlCommandHelpInfo MergeProviderSpecificHelp(PSObject cmdletHelp, PSOb
         /// Name of the property for which text needs to be extracted.
         /// </param>
         /// <returns></returns>
-        private string ExtractTextForHelpProperty(PSObject psObject, string propertyName)
+        private static string ExtractTextForHelpProperty(PSObject psObject, string propertyName)
         {
             if (psObject == null)
                 return string.Empty;
@@ -336,14 +336,14 @@ private string ExtractTextForHelpProperty(PSObject psObject, string propertyName
         /// </summary>
         /// <param name="psObject"></param>
         /// <returns></returns>
-        private string ExtractText(PSObject psObject)
+        private static string ExtractText(PSObject psObject)
         {
             if (psObject == null)
             {
                 return string.Empty;
             }
 
-            // I think every cmdlet description should atleast have 400 characters...
+            // I think every cmdlet description should at least have 400 characters...
             // so starting with this assumption..I did an average of all the cmdlet
             // help content available at the time of writing this code and came up
             // with this number.
@@ -441,7 +441,7 @@ internal MamlCommandHelpInfo Copy()
         internal MamlCommandHelpInfo Copy(HelpCategory newCategoryToUse)
         {
             MamlCommandHelpInfo result = new MamlCommandHelpInfo(_fullHelpObject.Copy(), newCategoryToUse);
-            result.FullHelp.Properties["Category"].Value = newCategoryToUse;
+            result.FullHelp.Properties["Category"].Value = newCategoryToUse.ToString();
             return result;
         }
 
diff --git a/src/System.Management.Automation/help/MamlNode.cs b/src/System.Management.Automation/help/MamlNode.cs
index fe4e803a294..ecf565c942b 100644
--- a/src/System.Management.Automation/help/MamlNode.cs
+++ b/src/System.Management.Automation/help/MamlNode.cs
@@ -123,7 +123,7 @@ internal PSObject PSObject
         ///         </atomicXml>
         ///        In this case, an PSObject that wraps string "atomic xml text" will be returned with following properties
         ///             attribute => name
-        ///     3. Composite xml, which is an xmlNode with structured child nodes, but not a special case for Maml formating.
+        ///     3. Composite xml, which is an xmlNode with structured child nodes, but not a special case for Maml formatting.
         ///         <compositeXml attribute="attribute">
         ///             <singleChildNode>
         ///                 single child node text
@@ -209,7 +209,7 @@ private PSObject GetPSObject(XmlNode xmlNode)
             {
                 mshObject = new PSObject(GetInsidePSObject(xmlNode));
                 // Add typeNames to this MSHObject and create views so that
-                // the ouput is readable. This is done only for complex nodes.
+                // the output is readable. This is done only for complex nodes.
                 mshObject.TypeNames.Clear();
 
                 if (xmlNode.Attributes["type"] != null)
@@ -321,7 +321,7 @@ private Hashtable GetInsideProperties(XmlNode xmlNode)
         /// <param name="xmlNode">
         /// Node whose children are verified for maml.
         /// </param>
-        private void RemoveUnsupportedNodes(XmlNode xmlNode)
+        private static void RemoveUnsupportedNodes(XmlNode xmlNode)
         {
             // Start with the first child..
             // We want to modify only children..
@@ -1109,7 +1109,7 @@ private static string GetPreformattedText(string text)
             // It is discouraged to use tab in preformatted text.
 
             string noTabText = text.Replace("\t", "    ");
-            string[] lines = noTabText.Split(Utils.Separators.Newline);
+            string[] lines = noTabText.Split('\n');
             string[] trimedLines = TrimLines(lines);
 
             if (trimedLines == null || trimedLines.Length == 0)
@@ -1212,7 +1212,7 @@ private static int GetIndentation(string line)
             if (IsEmptyLine(line))
                 return 0;
 
-            string leftTrimedLine = line.TrimStart(Utils.Separators.Space);
+            string leftTrimedLine = line.TrimStart(' ');
 
             return line.Length - leftTrimedLine.Length;
         }
diff --git a/src/System.Management.Automation/help/PSClassHelpProvider.cs b/src/System.Management.Automation/help/PSClassHelpProvider.cs
index e4c74c6398a..2d80b2cc863 100644
--- a/src/System.Management.Automation/help/PSClassHelpProvider.cs
+++ b/src/System.Management.Automation/help/PSClassHelpProvider.cs
@@ -279,7 +279,7 @@ private void LoadHelpFile(string helpFile, string helpFileIdentifier, string com
             }
 
             if (e != null)
-                s_tracer.WriteLine("Error occured in PSClassHelpProvider {0}", e.Message);
+                s_tracer.WriteLine("Error occurred in PSClassHelpProvider {0}", e.Message);
 
             if (reportErrors && (e != null))
             {
diff --git a/src/System.Management.Automation/help/ProviderContext.cs b/src/System.Management.Automation/help/ProviderContext.cs
index cb24ece0593..817e2b3f0e6 100644
--- a/src/System.Management.Automation/help/ProviderContext.cs
+++ b/src/System.Management.Automation/help/ProviderContext.cs
@@ -141,7 +141,7 @@ Runspaces.SessionStateProviderEntry sessionStateProvider in
                 }
             }
 
-            // ok we have path and valid provider that supplys content..initialize the provider
+            // ok we have path and valid provider that supplies content..initialize the provider
             // and get the help content for the path.
             cmdletProvider.Start(providerInfo, cmdletProviderContext);
             // There should be exactly one resolved path.
diff --git a/src/System.Management.Automation/help/ProviderHelpInfo.cs b/src/System.Management.Automation/help/ProviderHelpInfo.cs
index e159892a73e..80859a2ddf8 100644
--- a/src/System.Management.Automation/help/ProviderHelpInfo.cs
+++ b/src/System.Management.Automation/help/ProviderHelpInfo.cs
@@ -10,7 +10,7 @@ namespace System.Management.Automation
     /// Class ProviderHelpInfo keeps track of help information to be returned by
     /// command help provider.
     /// </summary>
-    internal class ProviderHelpInfo : HelpInfo
+    internal sealed class ProviderHelpInfo : HelpInfo
     {
         /// <summary>
         /// Constructor for HelpProvider.
@@ -101,7 +101,7 @@ internal string DetailedDescription
                     return string.Empty;
                 }
 
-                // I think every provider description should atleast have 400 characters...
+                // I think every provider description should at least have 400 characters...
                 // so starting with this assumption..I did an average of all the help content
                 // available at the time of writing this code and came up with this number.
                 Text.StringBuilder result = new Text.StringBuilder(400);
@@ -167,15 +167,9 @@ internal override bool MatchPatternInContent(WildcardPattern pattern)
             string synopsis = Synopsis;
             string detailedDescription = DetailedDescription;
 
-            if (synopsis == null)
-            {
-                synopsis = string.Empty;
-            }
+            synopsis ??= string.Empty;
 
-            if (detailedDescription == null)
-            {
-                detailedDescription = string.Empty;
-            }
+            detailedDescription ??= string.Empty;
 
             return pattern.IsMatch(synopsis) || pattern.IsMatch(detailedDescription);
         }
diff --git a/src/System.Management.Automation/help/ProviderHelpProvider.cs b/src/System.Management.Automation/help/ProviderHelpProvider.cs
index b28dcf86398..afc0c71c6c2 100644
--- a/src/System.Management.Automation/help/ProviderHelpProvider.cs
+++ b/src/System.Management.Automation/help/ProviderHelpProvider.cs
@@ -236,14 +236,20 @@ private void LoadHelpFile(ProviderInfo providerInfo)
                                 this.HelpSystem.TraceErrors(helpInfo.Errors);
                                 // Add snapin qualified type name for this command..
                                 // this will enable customizations of the help object.
-                                helpInfo.FullHelp.TypeNames.Insert(0, string.Format(CultureInfo.InvariantCulture,
-                                    "ProviderHelpInfo#{0}#{1}", providerInfo.PSSnapInName, helpInfo.Name));
+                                helpInfo.FullHelp.TypeNames.Insert(
+                                    index: 0,
+                                    string.Create(
+                                        CultureInfo.InvariantCulture,
+                                        $"ProviderHelpInfo#{providerInfo.PSSnapInName}#{helpInfo.Name}"));
 
                                 if (!string.IsNullOrEmpty(providerInfo.PSSnapInName))
                                 {
                                     helpInfo.FullHelp.Properties.Add(new PSNoteProperty("PSSnapIn", providerInfo.PSSnapIn));
-                                    helpInfo.FullHelp.TypeNames.Insert(1, string.Format(CultureInfo.InvariantCulture,
-                                        "ProviderHelpInfo#{0}", providerInfo.PSSnapInName));
+                                    helpInfo.FullHelp.TypeNames.Insert(
+                                        index: 1,
+                                        string.Create(
+                                            CultureInfo.InvariantCulture,
+                                            $"ProviderHelpInfo#{providerInfo.PSSnapInName}"));
                                 }
 
                                 AddCache(providerInfo.PSSnapInName + "\\" + helpInfo.Name, helpInfo);
diff --git a/src/System.Management.Automation/help/SaveHelpCommand.cs b/src/System.Management.Automation/help/SaveHelpCommand.cs
index 94803728c99..5df8f974f5c 100644
--- a/src/System.Management.Automation/help/SaveHelpCommand.cs
+++ b/src/System.Management.Automation/help/SaveHelpCommand.cs
@@ -88,7 +88,7 @@ public string[] LiteralPath
         [Parameter(Position = 1, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true, ParameterSetName = LiteralPathParameterSetName)]
         [Alias("Name")]
         [ValidateNotNull]
-        [ArgumentToModuleTransformationAttribute()]
+        [ArgumentToModuleTransformation]
         [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
         public PSModuleInfo[] Module { get; set; }
 
@@ -260,10 +260,7 @@ internal override bool ProcessModuleWithCulture(UpdatableHelpModuleInfo module,
                 }
                 finally
                 {
-                    if (helpInfoDrive != null)
-                    {
-                        helpInfoDrive.Dispose();
-                    }
+                    helpInfoDrive?.Dispose();
                 }
             }
 
@@ -407,10 +404,7 @@ internal override bool ProcessModuleWithCulture(UpdatableHelpModuleInfo module,
                         }
                         finally
                         {
-                            if (helpContentDrive != null)
-                            {
-                                helpContentDrive.Dispose();
-                            }
+                            helpContentDrive?.Dispose();
                         }
                     }
                 }
diff --git a/src/System.Management.Automation/help/SyntaxHelpInfo.cs b/src/System.Management.Automation/help/SyntaxHelpInfo.cs
index 469ab94a913..261fdd7f849 100644
--- a/src/System.Management.Automation/help/SyntaxHelpInfo.cs
+++ b/src/System.Management.Automation/help/SyntaxHelpInfo.cs
@@ -7,7 +7,7 @@ namespace System.Management.Automation
     /// Class HelpFileHelpInfo keeps track of help information to be returned by
     /// command help provider.
     /// </summary>
-    internal class SyntaxHelpInfo : BaseCommandHelpInfo
+    internal sealed class SyntaxHelpInfo : BaseCommandHelpInfo
     {
         /// <summary>
         /// Constructor for SyntaxHelpInfo.
diff --git a/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs b/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs
index 49d1e67e5d9..687faa68246 100644
--- a/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs
+++ b/src/System.Management.Automation/help/UpdatableHelpCommandBase.cs
@@ -60,7 +60,11 @@ public CultureInfo[] UICulture
 
             set
             {
-                if (value == null) return;
+                if (value == null)
+                {
+                    return;
+                }
+
                 _language = new string[value.Length];
                 for (int index = 0; index < value.Length; index++)
                 {
@@ -74,8 +78,8 @@ public CultureInfo[] UICulture
         /// <summary>
         /// Gets or sets the credential parameter.
         /// </summary>
-        [Parameter()]
-        [Credential()]
+        [Parameter]
+        [Credential]
         public PSCredential Credential
         {
             get { return _credential; }
@@ -166,22 +170,22 @@ private void HandleProgressChanged(object sender, UpdatableHelpProgressEventArgs
         /// <summary>
         /// Static constructor
         ///
-        /// NOTE: FWLinks for core PowerShell modules are needed since they get loaded as snapins in a Remoting Endpoint.
+        /// NOTE: HelpInfoUri for core PowerShell modules are needed since they get loaded as snapins in a Remoting Endpoint.
         /// When we moved to modules in V3, we were not able to make this change as it was a risky change to make at that time.
         /// </summary>
         static UpdatableHelpCommandBase()
         {
             s_metadataCache = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
 
-            // TODO: assign real TechNet addresses
+            // NOTE: The HelpInfoUri must be updated with each release.
 
-            s_metadataCache.Add("Microsoft.PowerShell.Diagnostics", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.PowerShell.Core", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.PowerShell.Utility", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.PowerShell.Host", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.PowerShell.Management", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.PowerShell.Security", "https://aka.ms/powershell71-help");
-            s_metadataCache.Add("Microsoft.WSMan.Management", "https://aka.ms/powershell71-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Diagnostics", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Core", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Utility", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Host", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Management", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.PowerShell.Security", "https://aka.ms/powershell75-help");
+            s_metadataCache.Add("Microsoft.WSMan.Management", "https://aka.ms/powershell75-help");
         }
 
         /// <summary>
@@ -206,9 +210,7 @@ internal UpdatableHelpCommandBase(UpdatableHelpCommandType commandType)
             _exceptions = new Dictionary<string, UpdatableHelpExceptionContext>();
             _helpSystem.OnProgressChanged += HandleProgressChanged;
 
-            Random rand = new Random();
-
-            activityId = rand.Next();
+            activityId = Random.Shared.Next();
         }
 
         #endregion
@@ -443,7 +445,10 @@ internal void Process(IEnumerable<string> moduleNames, IEnumerable<ModuleSpecifi
         /// <param name="modules">Module objects given by the user.</param>
         internal void Process(IEnumerable<PSModuleInfo> modules)
         {
-            if (modules == null || !modules.Any()) { return; }
+            if (modules == null || !modules.Any())
+            {
+                return;
+            }
 
             var helpModules = new Dictionary<Tuple<string, Version>, UpdatableHelpModuleInfo>();
 
@@ -509,6 +514,7 @@ private void ProcessModule(UpdatableHelpModuleInfo module)
             // Win8: 572882 When the system locale is English and the UI is JPN,
             // running "update-help" still downs English help content.
             var cultures = _language ?? _helpSystem.GetCurrentUICulture();
+            UpdatableHelpSystemException implicitCultureNotSupported = null;
 
             foreach (string culture in cultures)
             {
@@ -549,7 +555,8 @@ private void ProcessModule(UpdatableHelpModuleInfo module)
 #endif
                 catch (UpdatableHelpSystemException e)
                 {
-                    if (e.FullyQualifiedErrorId == "HelpCultureNotSupported")
+                    if (e.FullyQualifiedErrorId == "HelpCultureNotSupported"
+                            || e.FullyQualifiedErrorId == "UnableToRetrieveHelpInfoXml")
                     {
                         installed = false;
 
@@ -558,6 +565,12 @@ private void ProcessModule(UpdatableHelpModuleInfo module)
                             // Display the error message only if we are not using the fallback chain
                             ProcessException(module.ModuleName, culture, e);
                         }
+                        else
+                        {
+                            // Hold first exception, it will be displayed if fallback chain fails
+                            WriteVerbose(StringUtil.Format(HelpDisplayStrings.HelpCultureNotSupportedFallback, e.Message));
+                            implicitCultureNotSupported ??= e;
+                        }
                     }
                     else
                     {
@@ -581,13 +594,19 @@ private void ProcessModule(UpdatableHelpModuleInfo module)
                     }
                 }
 
-                // If -Language is not specified, we only install
+                // If -UICulture is not specified, we only install
                 // one culture from the fallback chain
                 if (_language == null && installed)
                 {
-                    break;
+                    return;
                 }
             }
+
+            // If the exception is not null and did not return early, then all of the fallback chain failed
+            if (implicitCultureNotSupported != null)
+            {
+                ProcessException(module.ModuleName, cultures.First(), implicitCultureNotSupported);
+            }
         }
 
         /// <summary>
@@ -652,7 +671,7 @@ internal bool IsUpdateNecessary(UpdatableHelpModuleInfo module, UpdatableHelpInf
             }
 
             // Culture check
-            if (!newHelpInfo.IsCultureSupported(culture))
+            if (!newHelpInfo.IsCultureSupported(culture.Name))
             {
                 throw new UpdatableHelpSystemException("HelpCultureNotSupported",
                     StringUtil.Format(HelpDisplayStrings.HelpCultureNotSupported,
@@ -778,7 +797,7 @@ internal IEnumerable<string> ResolvePath(string path, bool recurse, bool isLiter
         /// </summary>
         /// <param name="path">Path to resolve.</param>
         /// <returns>A list of directories.</returns>
-        private IEnumerable<string> RecursiveResolvePathHelper(string path)
+        private static IEnumerable<string> RecursiveResolvePathHelper(string path)
         {
             if (System.IO.Directory.Exists(path))
             {
@@ -886,6 +905,7 @@ public enum UpdateHelpScope
     {
         /// <summary>
         /// Save the help content to the user directory.
+        /// </summary>
         CurrentUser,
 
         /// <summary>
diff --git a/src/System.Management.Automation/help/UpdatableHelpInfo.cs b/src/System.Management.Automation/help/UpdatableHelpInfo.cs
index 5af3fd57b6d..8170de90654 100644
--- a/src/System.Management.Automation/help/UpdatableHelpInfo.cs
+++ b/src/System.Management.Automation/help/UpdatableHelpInfo.cs
@@ -1,9 +1,11 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Globalization;
+using System.Linq;
 using System.Management.Automation.Internal;
 using System.Text;
 
@@ -37,6 +39,44 @@ internal CultureSpecificUpdatableHelp(CultureInfo culture, Version version)
         /// Supported culture.
         /// </summary>
         internal CultureInfo Culture { get; set; }
+
+        /// <summary>
+        /// Enumerates fallback chain (parents) of the culture, including itself.
+        /// </summary>
+        /// <param name="culture">Culture to enumerate</param>
+        /// <example>
+        /// Examples:
+        /// en-GB => { en-GB, en }
+        /// zh-Hans-CN => { zh-Hans-CN, zh-Hans, zh }.
+        /// </example>
+        /// <returns>An enumerable list of culture names.</returns>
+        internal static IEnumerable<string> GetCultureFallbackChain(CultureInfo culture)
+        {
+            // We use just names instead because comparing two CultureInfo objects
+            // can fail if they are created using different means
+            while (culture != null)
+            {
+                if (string.IsNullOrEmpty(culture.Name))
+                {
+                    yield break;
+                }
+
+                yield return culture.Name;
+
+                culture = culture.Parent;
+            }
+        }
+
+        /// <summary>
+        /// Checks if a culture is supported.
+        /// </summary>
+        /// <param name="cultureName">Name of the culture to check.</param>
+        /// <returns>True if supported, false if not.</returns>
+        internal bool IsCultureSupported(string cultureName)
+        {
+            Debug.Assert(cultureName != null, $"{nameof(cultureName)} may not be null");
+            return GetCultureFallbackChain(Culture).Any(fallback => fallback == cultureName);
+        }
     }
 
     /// <summary>
@@ -99,22 +139,12 @@ internal bool IsNewerVersion(UpdatableHelpInfo helpInfo, CultureInfo culture)
         /// <summary>
         /// Checks if a culture is supported.
         /// </summary>
-        /// <param name="culture">Culture to check.</param>
+        /// <param name="cultureName">Name of the culture to check.</param>
         /// <returns>True if supported, false if not.</returns>
-        internal bool IsCultureSupported(CultureInfo culture)
+        internal bool IsCultureSupported(string cultureName)
         {
-            Debug.Assert(culture != null);
-
-            foreach (CultureSpecificUpdatableHelp updatableHelpItem in UpdatableHelpItems)
-            {
-                if (string.Equals(updatableHelpItem.Culture.Name, culture.Name,
-                    StringComparison.OrdinalIgnoreCase))
-                {
-                    return true;
-                }
-            }
-
-            return false;
+            Debug.Assert(cultureName != null, $"{nameof(cultureName)} may not be null");
+            return UpdatableHelpItems.Any(item => item.IsCultureSupported(cultureName));
         }
 
         /// <summary>
diff --git a/src/System.Management.Automation/help/UpdatableHelpModuleInfo.cs b/src/System.Management.Automation/help/UpdatableHelpModuleInfo.cs
index b46717920f4..ccf0b95f0f6 100644
--- a/src/System.Management.Automation/help/UpdatableHelpModuleInfo.cs
+++ b/src/System.Management.Automation/help/UpdatableHelpModuleInfo.cs
@@ -28,7 +28,6 @@ internal class UpdatableHelpModuleInfo
         internal UpdatableHelpModuleInfo(string name, Guid guid, string path, string uri)
         {
             Debug.Assert(!string.IsNullOrEmpty(name));
-            Debug.Assert(guid != Guid.Empty);
             Debug.Assert(!string.IsNullOrEmpty(path));
             Debug.Assert(!string.IsNullOrEmpty(uri));
 
diff --git a/src/System.Management.Automation/help/UpdatableHelpSystem.cs b/src/System.Management.Automation/help/UpdatableHelpSystem.cs
index 31fe5362d77..14edabf9613 100644
--- a/src/System.Management.Automation/help/UpdatableHelpSystem.cs
+++ b/src/System.Management.Automation/help/UpdatableHelpSystem.cs
@@ -28,7 +28,6 @@ namespace System.Management.Automation.Help
     /// <summary>
     /// Updatable help system exception.
     /// </summary>
-    [Serializable]
     internal class UpdatableHelpSystemException : Exception
     {
         /// <summary>
@@ -294,19 +293,13 @@ internal IEnumerable<string> GetCurrentUICulture()
         {
             CultureInfo culture = CultureInfo.CurrentUICulture;
 
-            while (culture != null)
+            // Allow tests to override system culture
+            if (InternalTestHooks.CurrentUICulture != null)
             {
-                if (string.IsNullOrEmpty(culture.Name))
-                {
-                    yield break;
-                }
-
-                yield return culture.Name;
-
-                culture = culture.Parent;
+                culture = InternalTestHooks.CurrentUICulture;
             }
 
-            yield break;
+            return CultureSpecificUpdatableHelp.GetCultureFallbackChain(culture);
         }
 
         #region Help Metadata Retrieval
@@ -426,6 +419,7 @@ private string ResolveUri(string baseUri, bool verbose)
                         using (HttpClient client = new HttpClient(handler))
                         {
                             client.Timeout = new TimeSpan(0, 0, 30); // Set 30 second timeout
+                            // codeql[cs/ssrf] - This is expected Poweshell behavior and the user assumes trust for the module they download and any URIs it references. The URIs are also not executables or scripts that would be invoked by this method.
                             Task<HttpResponseMessage> responseMessage = client.GetAsync(uri);
                             using (HttpResponseMessage response = responseMessage.Result)
                             {
@@ -555,7 +549,10 @@ internal UpdatableHelpInfo CreateHelpInfo(string xml, string moduleName, Guid mo
             }
             catch (XmlException e)
             {
-                if (ignoreValidationException) { return null; }
+                if (ignoreValidationException)
+                {
+                    return null;
+                }
 
                 throw new UpdatableHelpSystemException(HelpInfoXmlValidationFailure,
                     e.Message, ErrorCategory.InvalidData, null, e);
@@ -591,13 +588,9 @@ internal UpdatableHelpInfo CreateHelpInfo(string xml, string moduleName, Guid mo
 
             if (!string.IsNullOrEmpty(currentCulture))
             {
-                IEnumerable<WildcardPattern> patternList = SessionStateUtilities.CreateWildcardsFromStrings(
-                    globPatterns: new[] { currentCulture },
-                    options: WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant);
-
                 for (int i = 0; i < updatableHelpItem.Length; i++)
                 {
-                    if (SessionStateUtilities.MatchesAnyWildcardPattern(updatableHelpItem[i].Culture.Name, patternList, true))
+                    if (updatableHelpItem[i].IsCultureSupported(currentCulture))
                     {
                         helpInfo.HelpContentUriCollection.Add(new UpdatableHelpUri(moduleName, moduleGuid, updatableHelpItem[i].Culture, uri));
                     }
@@ -791,6 +784,7 @@ private bool DownloadHelpContentHttpClient(string uri, string fileName, Updatabl
                 using (HttpClient client = new HttpClient(handler))
                 {
                     client.Timeout = _defaultTimeout;
+                    // codeql[cs/ssrf] - This is expected Poweshell behavior and the user assumes trust for the module they download and any URIs it references. The URIs are also not executables or scripts that would be invoked by this method.
                     Task<HttpResponseMessage> responseMsg = client.GetAsync(new Uri(uri), _cancelTokenSource.Token);
 
                     // TODO: Should I use a continuation to write the stream to a file?
@@ -1097,14 +1091,14 @@ internal void InstallHelpContent(UpdatableHelpCommandType commandType, Execution
 #if UNIX
         private static bool ExpandArchive(string source, string destination)
         {
-            bool sucessfulDecompression = false;
+            bool successfulDecompression = false;
 
             try
             {
                 using (ZipArchive zipArchive = ZipFile.Open(source, ZipArchiveMode.Read))
                 {
                     zipArchive.ExtractToDirectory(destination);
-                    sucessfulDecompression = true;
+                    successfulDecompression = true;
                 }
             }
             catch (ArgumentException) { }
@@ -1116,7 +1110,7 @@ private static bool ExpandArchive(string source, string destination)
             catch (UnauthorizedAccessException) { }
             catch (ObjectDisposedException) { }
 
-            return sucessfulDecompression;
+            return successfulDecompression;
         }
 #endif
 
@@ -1137,9 +1131,9 @@ private static void UnzipHelpContent(ExecutionContext context, string srcPath, s
             }
 
             string sourceDirectory = Path.GetDirectoryName(srcPath);
-            bool sucessfulDecompression = false;
+            bool successfulDecompression = false;
 #if UNIX
-            sucessfulDecompression = ExpandArchive(Path.Combine(sourceDirectory, Path.GetFileName(srcPath)), destPath);
+            successfulDecompression = ExpandArchive(Path.Combine(sourceDirectory, Path.GetFileName(srcPath)), destPath);
 #else
             // Cabinet API doesn't handle the trailing back slash
             if (!sourceDirectory.EndsWith('\\'))
@@ -1152,9 +1146,9 @@ private static void UnzipHelpContent(ExecutionContext context, string srcPath, s
                 destPath += "\\";
             }
 
-            sucessfulDecompression = CabinetExtractorFactory.GetCabinetExtractor().Extract(Path.GetFileName(srcPath), sourceDirectory, destPath);
+            successfulDecompression = CabinetExtractorFactory.GetCabinetExtractor().Extract(Path.GetFileName(srcPath), sourceDirectory, destPath);
 #endif
-            if (!sucessfulDecompression)
+            if (!successfulDecompression)
             {
                 throw new UpdatableHelpSystemException("UnableToExtract", StringUtil.Format(HelpDisplayStrings.UnzipFailure),
                     ErrorCategory.InvalidOperation, null, null);
diff --git a/src/System.Management.Automation/help/UpdatableHelpUri.cs b/src/System.Management.Automation/help/UpdatableHelpUri.cs
index 8b854e82a5d..82bbb4016fb 100644
--- a/src/System.Management.Automation/help/UpdatableHelpUri.cs
+++ b/src/System.Management.Automation/help/UpdatableHelpUri.cs
@@ -21,7 +21,6 @@ internal class UpdatableHelpUri
         internal UpdatableHelpUri(string moduleName, Guid moduleGuid, CultureInfo culture, string resolvedUri)
         {
             Debug.Assert(!string.IsNullOrEmpty(moduleName));
-            Debug.Assert(moduleGuid != Guid.Empty);
             Debug.Assert(!string.IsNullOrEmpty(resolvedUri));
 
             ModuleName = moduleName;
diff --git a/src/System.Management.Automation/help/UpdateHelpCommand.cs b/src/System.Management.Automation/help/UpdateHelpCommand.cs
index 01b17cbad7e..9df82699a32 100644
--- a/src/System.Management.Automation/help/UpdateHelpCommand.cs
+++ b/src/System.Management.Automation/help/UpdateHelpCommand.cs
@@ -7,6 +7,7 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.IO;
+using System.Linq;
 using System.Management.Automation;
 using System.Management.Automation.Help;
 using System.Management.Automation.Internal;
@@ -181,6 +182,16 @@ protected override void ProcessRecord()
 
                     _isInitialized = true;
                 }
+                
+                // check if there is an UI, if not Throw out terminating error. 
+                var cultures = _language ?? _helpSystem.GetCurrentUICulture();
+                if (!cultures.Any()) 
+                {                    
+                    string cultureString = string.IsNullOrEmpty(CultureInfo.CurrentCulture.Name) ? CultureInfo.CurrentCulture.DisplayName : CultureInfo.CurrentCulture.Name;
+                    string errMsg = StringUtil.Format(HelpDisplayStrings.FailedToUpdateHelpWithLocaleNoUICulture, cultureString);
+                    ErrorRecord error = new ErrorRecord(new InvalidOperationException(errMsg), "FailedToUpdateHelpWithLocaleNoUICulture", ErrorCategory.InvalidOperation, targetObject: null);                    
+                    ThrowTerminatingError(error);
+                }
 
                 base.Process(_module, FullyQualifiedModule);
 
@@ -214,6 +225,14 @@ protected override void ProcessRecord()
         /// <returns>True if the module has been processed, false if not.</returns>
         internal override bool ProcessModuleWithCulture(UpdatableHelpModuleInfo module, string culture)
         {
+            // Simulate culture not found
+            if (InternalTestHooks.ThrowHelpCultureNotSupported)
+            {
+                throw new UpdatableHelpSystemException("HelpCultureNotSupported",
+                    StringUtil.Format(HelpDisplayStrings.HelpCultureNotSupported, culture, "en-US"),
+                    ErrorCategory.InvalidOperation, null, null);
+            }
+
             UpdatableHelpInfo currentHelpInfo = null;
             UpdatableHelpInfo newHelpInfo = null;
             string helpInfoUri = null;
@@ -322,10 +341,7 @@ internal override bool ProcessModuleWithCulture(UpdatableHelpModuleInfo module,
                 }
                 finally
                 {
-                    if (helpInfoDrive != null)
-                    {
-                        helpInfoDrive.Dispose();
-                    }
+                    helpInfoDrive?.Dispose();
                 }
             }
             else
diff --git a/src/System.Management.Automation/logging/LogProvider.cs b/src/System.Management.Automation/logging/LogProvider.cs
index a46f181b262..e02807a38e8 100644
--- a/src/System.Management.Automation/logging/LogProvider.cs
+++ b/src/System.Management.Automation/logging/LogProvider.cs
@@ -102,6 +102,37 @@ internal LogProvider()
         /// <param name="previousValue"></param>
         internal abstract void LogSettingsEvent(LogContext logContext, string variableName, string value, string previousValue);
 
+        /// <summary>
+        /// Provider interface function for logging AmsiUtil State event.
+        /// </summary>
+        /// <param name="state">This the action performed in AmsiUtil class, like init, scan, etc.</param>
+        /// <param name="context">The amsiContext handled - Session pair.</param>
+        internal abstract void LogAmsiUtilStateEvent(string state, string context);
+
+        /// <summary>
+        /// Provider interface function for logging WDAC query event.
+        /// </summary>
+        /// <param name="queryName">Name of the WDAC query.</param>
+        /// <param name="fileName">Name of script file for policy query. Can be null value.</param>
+        /// <param name="querySuccess">Query call succeed code.</param>
+        /// <param name="queryResult">Result code of WDAC query.</param>
+        internal abstract void LogWDACQueryEvent(
+            string queryName,
+            string fileName,
+            int querySuccess,
+            int queryResult);
+
+        /// <summary>
+        /// Provider interface function for logging WDAC audit event.
+        /// </summary>
+        /// <param name="title">Title of WDAC audit event.</param>
+        /// <param name="message">WDAC audit event message.</param>
+        /// <param name="fqid">FullyQualifiedId of WDAC audit event.</param>
+        internal abstract void LogWDACAuditEvent(
+            string title,
+            string message,
+            string fqid);
+
         /// <summary>
         /// True if the log provider needs to use logging variables.
         /// </summary>
@@ -169,9 +200,7 @@ protected static void AppendException(StringBuilder sb, Exception except)
         {
             sb.AppendLine(StringUtil.Format(EtwLoggingStrings.ErrorRecordMessage, except.Message));
 
-            IContainsErrorRecord ier = except as IContainsErrorRecord;
-
-            if (ier != null)
+            if (except is IContainsErrorRecord ier)
             {
                 ErrorRecord er = ier.ErrorRecord;
 
@@ -370,6 +399,43 @@ internal override void LogSettingsEvent(LogContext logContext, string variableNa
         {
         }
 
+        /// <summary>
+        /// Provider interface function for logging provider health event.
+        /// </summary>
+        /// <param name="state">This the action performed in AmsiUtil class, like init, scan, etc.</param>
+        /// <param name="context">The amsiContext handled - Session pair.</param>
+        internal override void LogAmsiUtilStateEvent(string state, string context)
+        {
+        }
+
+        /// <summary>
+        /// Provider interface function for logging WDAC query event.
+        /// </summary>
+        /// <param name="queryName">Name of the WDAC query.</param>
+        /// <param name="fileName">Name of script file for policy query. Can be null value.</param>
+        /// <param name="querySuccess">Query call succeed code.</param>
+        /// <param name="queryResult">Result code of WDAC query.</param>
+        internal override void LogWDACQueryEvent(
+            string queryName,
+            string fileName,
+            int querySuccess,
+            int queryResult)
+        {
+        }
+
+        /// <summary>
+        /// Provider interface function for logging WDAC audit event.
+        /// </summary>
+        /// <param name="title">Title of WDAC audit event.</param>
+        /// <param name="message">WDAC audit event message.</param>
+        /// <param name="fqid">FullyQualifiedId of WDAC audit event.</param>
+        internal override void LogWDACAuditEvent(
+            string title,
+            string message,
+            string fqid)
+        {
+        }
+
         #endregion
     }
 }
diff --git a/src/System.Management.Automation/logging/MshLog.cs b/src/System.Management.Automation/logging/MshLog.cs
index 02a8990bc69..aae65271892 100644
--- a/src/System.Management.Automation/logging/MshLog.cs
+++ b/src/System.Management.Automation/logging/MshLog.cs
@@ -60,13 +60,13 @@ internal static class MshLog
         /// The value of this dictionary is never empty. A value of type DummyProvider means
         /// no logging.
         /// </summary>
-        private static ConcurrentDictionary<string, Collection<LogProvider>> s_logProviders =
+        private static readonly ConcurrentDictionary<string, Collection<LogProvider>> s_logProviders =
             new ConcurrentDictionary<string, Collection<LogProvider>>();
 
         private const string _crimsonLogProviderAssemblyName = "MshCrimsonLog";
         private const string _crimsonLogProviderTypeName = "System.Management.Automation.Logging.CrimsonLogProvider";
 
-        private static Collection<string> s_ignoredCommands = new Collection<string>();
+        private static readonly Collection<string> s_ignoredCommands = new Collection<string>();
 
         /// <summary>
         /// Static constructor.
@@ -134,11 +134,6 @@ private static Collection<LogProvider> CreateLogProvider(string shellId)
 
             try
             {
-#if !CORECLR    // TODO:CORECLR EventLogLogProvider not handled yet
-                LogProvider eventLogLogProvider = new EventLogLogProvider(shellId);
-                providers.Add(eventLogLogProvider);
-#endif
-
 #if UNIX
                 LogProvider sysLogProvider = new PSSysLogProvider();
                 providers.Add(sysLogProvider);
@@ -216,9 +211,11 @@ internal static void LogEngineHealthEvent(ExecutionContext executionContext,
             }
 
             InvocationInfo invocationInfo = null;
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
+            if (exception is IContainsErrorRecord icer && icer.ErrorRecord != null)
+            {
                 invocationInfo = icer.ErrorRecord.InvocationInfo;
+            }
+
             foreach (LogProvider provider in GetLogProvider(executionContext))
             {
                 if (NeedToLogEngineHealthEvent(provider, executionContext))
@@ -418,9 +415,11 @@ Severity severity
             }
 
             InvocationInfo invocationInfo = null;
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
+            if (exception is IContainsErrorRecord icer && icer.ErrorRecord != null)
+            {
                 invocationInfo = icer.ErrorRecord.InvocationInfo;
+            }
+
             foreach (LogProvider provider in GetLogProvider(executionContext))
             {
                 if (NeedToLogCommandHealthEvent(provider, executionContext))
@@ -610,9 +609,11 @@ Severity severity
             }
 
             InvocationInfo invocationInfo = null;
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
+            if (exception is IContainsErrorRecord icer && icer.ErrorRecord != null)
+            {
                 invocationInfo = icer.ErrorRecord.InvocationInfo;
+            }
+
             foreach (LogProvider provider in GetLogProvider(executionContext))
             {
                 if (NeedToLogProviderHealthEvent(provider, executionContext))
@@ -776,7 +777,7 @@ private static LogContext GetLogContext(ExecutionContext executionContext, Invoc
                 logContext.HostId = (string)executionContext.EngineHostInterface.InstanceId.ToString();
             }
 
-            logContext.HostApplication = string.Join(" ", Environment.GetCommandLineArgs());
+            logContext.HostApplication = string.Join(' ', Environment.GetCommandLineArgs());
 
             if (executionContext.CurrentRunspace != null)
             {
@@ -809,9 +810,7 @@ private static LogContext GetLogContext(ExecutionContext executionContext, Invoc
                 logContext.User = Logging.UnknownUserName;
             }
 
-            System.Management.Automation.Remoting.PSSenderInfo psSenderInfo =
-                    executionContext.SessionState.PSVariable.GetValue("PSSenderInfo") as System.Management.Automation.Remoting.PSSenderInfo;
-            if (psSenderInfo != null)
+            if (executionContext.SessionState.PSVariable.GetValue("PSSenderInfo") is System.Management.Automation.Remoting.PSSenderInfo psSenderInfo)
             {
                 logContext.ConnectedUser = psSenderInfo.UserInfo.Identity.Name;
             }
diff --git a/src/System.Management.Automation/logging/eventlog/EventLogLogProvider.cs b/src/System.Management.Automation/logging/eventlog/EventLogLogProvider.cs
deleted file mode 100644
index e6f301a04ac..00000000000
--- a/src/System.Management.Automation/logging/eventlog/EventLogLogProvider.cs
+++ /dev/null
@@ -1,684 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Globalization;
-using System.Resources;
-using System.Text;
-using System.Threading;
-
-namespace System.Management.Automation
-{
-    /// <summary>
-    /// EventLogLogProvider is a class to implement Msh Provider interface using EventLog technology.
-    ///
-    /// EventLogLogProvider will be the provider to use if Monad is running in early windows releases
-    /// from 2000 to 2003.
-    ///
-    /// EventLogLogProvider will be packaged in the same dll as Msh Log Engine since EventLog should
-    /// always be available.
-    /// </summary>
-    internal class EventLogLogProvider : LogProvider
-    {
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <returns></returns>
-        internal EventLogLogProvider(string shellId)
-        {
-            string source = SetupEventSource(shellId);
-
-            _eventLog = new EventLog();
-            _eventLog.Source = source;
-
-            _resourceManager = new ResourceManager("System.Management.Automation.resources.Logging", System.Reflection.Assembly.GetExecutingAssembly());
-        }
-
-        internal string SetupEventSource(string shellId)
-        {
-            string source;
-
-            // In case shellId == null, use the "Default" source.
-            if (string.IsNullOrEmpty(shellId))
-            {
-                source = "Default";
-            }
-            else
-            {
-                int index = shellId.LastIndexOf('.');
-
-                if (index < 0)
-                    source = shellId;
-                else
-                    source = shellId.Substring(index + 1);
-
-                // There may be a situation where ShellId ends with a '.'.
-                // In that case, use the default source.
-                if (string.IsNullOrEmpty(source))
-                    source = "Default";
-            }
-
-            if (EventLog.SourceExists(source))
-            {
-                return source;
-            }
-
-            string message = string.Format(Thread.CurrentThread.CurrentCulture, "Event source '{0}' is not registered", source);
-            throw new InvalidOperationException(message);
-        }
-
-        /// <summary>
-        /// This represent a handle to EventLog.
-        /// </summary>
-        private EventLog _eventLog;
-        private ResourceManager _resourceManager;
-
-        #region Log Provider Api
-
-        private const int EngineHealthCategoryId = 1;
-        private const int CommandHealthCategoryId = 2;
-        private const int ProviderHealthCategoryId = 3;
-        private const int EngineLifecycleCategoryId = 4;
-        private const int CommandLifecycleCategoryId = 5;
-        private const int ProviderLifecycleCategoryId = 6;
-        private const int SettingsCategoryId = 7;
-        private const int PipelineExecutionDetailCategoryId = 8;
-
-        /// <summary>
-        /// Log engine health event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="eventId"></param>
-        /// <param name="exception"></param>
-        /// <param name="additionalInfo"></param>
-        internal override void LogEngineHealthEvent(LogContext logContext, int eventId, Exception exception, Dictionary<string, string> additionalInfo)
-        {
-            Hashtable mapArgs = new Hashtable();
-
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = icer.ErrorRecord.CategoryInfo.Category;
-                mapArgs["ErrorId"] = icer.ErrorRecord.FullyQualifiedErrorId;
-
-                if (icer.ErrorRecord.ErrorDetails != null)
-                {
-                    mapArgs["ErrorMessage"] = icer.ErrorRecord.ErrorDetails.Message;
-                }
-                else
-                {
-                    mapArgs["ErrorMessage"] = exception.Message;
-                }
-            }
-            else
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = string.Empty;
-                mapArgs["ErrorId"] = string.Empty;
-                mapArgs["ErrorMessage"] = exception.Message;
-            }
-
-            FillEventArgs(mapArgs, logContext);
-
-            FillEventArgs(mapArgs, additionalInfo);
-
-            EventInstance entry = new EventInstance(eventId, EngineHealthCategoryId);
-
-            entry.EntryType = GetEventLogEntryType(logContext);
-
-            string detail = GetEventDetail("EngineHealthContext", mapArgs);
-
-            LogEvent(entry, mapArgs["ErrorMessage"], detail);
-        }
-
-        private static EventLogEntryType GetEventLogEntryType(LogContext logContext)
-        {
-            switch (logContext.Severity)
-            {
-                case "Critical":
-                case "Error":
-                    return EventLogEntryType.Error;
-                case "Warning":
-                    return EventLogEntryType.Warning;
-                default:
-                    return EventLogEntryType.Information;
-            }
-        }
-
-        /// <summary>
-        /// Log engine lifecycle event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="newState"></param>
-        /// <param name="previousState"></param>
-        internal override void LogEngineLifecycleEvent(LogContext logContext, EngineState newState, EngineState previousState)
-        {
-            int eventId = GetEngineLifecycleEventId(newState);
-
-            if (eventId == _invalidEventId)
-                return;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["NewEngineState"] = newState.ToString();
-            mapArgs["PreviousEngineState"] = previousState.ToString();
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, EngineLifecycleCategoryId);
-
-            entry.EntryType = EventLogEntryType.Information;
-
-            string detail = GetEventDetail("EngineLifecycleContext", mapArgs);
-
-            LogEvent(entry, newState, previousState, detail);
-        }
-
-        private const int _baseEngineLifecycleEventId = 400;
-        private const int _invalidEventId = -1;
-
-        /// <summary>
-        /// Get engine lifecycle event id based on engine state.
-        /// </summary>
-        /// <param name="engineState"></param>
-        /// <returns></returns>
-        private static int GetEngineLifecycleEventId(EngineState engineState)
-        {
-            switch (engineState)
-            {
-                case EngineState.None:
-                    return _invalidEventId;
-                case EngineState.Available:
-                    return _baseEngineLifecycleEventId;
-                case EngineState.Degraded:
-                    return _baseEngineLifecycleEventId + 1;
-                case EngineState.OutOfService:
-                    return _baseEngineLifecycleEventId + 2;
-                case EngineState.Stopped:
-                    return _baseEngineLifecycleEventId + 3;
-            }
-
-            return _invalidEventId;
-        }
-
-        private const int _commandHealthEventId = 200;
-
-        /// <summary>
-        /// Provider interface function for logging command health event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="exception"></param>
-        internal override void LogCommandHealthEvent(LogContext logContext, Exception exception)
-        {
-            int eventId = _commandHealthEventId;
-
-            Hashtable mapArgs = new Hashtable();
-
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = icer.ErrorRecord.CategoryInfo.Category;
-                mapArgs["ErrorId"] = icer.ErrorRecord.FullyQualifiedErrorId;
-
-                if (icer.ErrorRecord.ErrorDetails != null)
-                {
-                    mapArgs["ErrorMessage"] = icer.ErrorRecord.ErrorDetails.Message;
-                }
-                else
-                {
-                    mapArgs["ErrorMessage"] = exception.Message;
-                }
-            }
-            else
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = string.Empty;
-                mapArgs["ErrorId"] = string.Empty;
-                mapArgs["ErrorMessage"] = exception.Message;
-            }
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, CommandHealthCategoryId);
-
-            entry.EntryType = GetEventLogEntryType(logContext);
-
-            string detail = GetEventDetail("CommandHealthContext", mapArgs);
-
-            LogEvent(entry, mapArgs["ErrorMessage"], detail);
-        }
-
-        /// <summary>
-        /// Log command life cycle event.
-        /// </summary>
-        /// <param name="getLogContext"></param>
-        /// <param name="newState"></param>
-        internal override void LogCommandLifecycleEvent(Func<LogContext> getLogContext, CommandState newState)
-        {
-            LogContext logContext = getLogContext();
-
-            int eventId = GetCommandLifecycleEventId(newState);
-
-            if (eventId == _invalidEventId)
-                return;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["NewCommandState"] = newState.ToString();
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, CommandLifecycleCategoryId);
-
-            entry.EntryType = EventLogEntryType.Information;
-
-            string detail = GetEventDetail("CommandLifecycleContext", mapArgs);
-
-            LogEvent(entry, logContext.CommandName, newState, detail);
-        }
-
-        private const int _baseCommandLifecycleEventId = 500;
-
-        /// <summary>
-        /// Get command lifecycle event id based on command state.
-        /// </summary>
-        /// <param name="commandState"></param>
-        /// <returns></returns>
-        private static int GetCommandLifecycleEventId(CommandState commandState)
-        {
-            switch (commandState)
-            {
-                case CommandState.Started:
-                    return _baseCommandLifecycleEventId;
-                case CommandState.Stopped:
-                    return _baseCommandLifecycleEventId + 1;
-                case CommandState.Terminated:
-                    return _baseCommandLifecycleEventId + 2;
-            }
-
-            return _invalidEventId;
-        }
-
-        private const int _pipelineExecutionDetailEventId = 800;
-
-        /// <summary>
-        /// Log pipeline execution detail event.
-        ///
-        /// This may end of logging more than one event if the detail string is too long to be fit in 64K.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="pipelineExecutionDetail"></param>
-        internal override void LogPipelineExecutionDetailEvent(LogContext logContext, List<string> pipelineExecutionDetail)
-        {
-            List<string> details = GroupMessages(pipelineExecutionDetail);
-
-            for (int i = 0; i < details.Count; i++)
-            {
-                LogPipelineExecutionDetailEvent(logContext, details[i], i + 1, details.Count);
-            }
-        }
-
-        private const int MaxLength = 16000;
-
-        private List<string> GroupMessages(List<string> messages)
-        {
-            List<string> result = new List<string>();
-
-            if (messages == null || messages.Count == 0)
-                return result;
-
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < messages.Count; i++)
-            {
-                if (sb.Length + messages[i].Length < MaxLength)
-                {
-                    sb.AppendLine(messages[i]);
-                    continue;
-                }
-
-                result.Add(sb.ToString());
-                sb = new StringBuilder();
-                sb.AppendLine(messages[i]);
-            }
-
-            result.Add(sb.ToString());
-
-            return result;
-        }
-
-        /// <summary>
-        /// Log one pipeline execution detail event. Detail message is already chopped up so that it will
-        /// fit in 64K.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="pipelineExecutionDetail"></param>
-        /// <param name="detailSequence"></param>
-        /// <param name="detailTotal"></param>
-        private void LogPipelineExecutionDetailEvent(LogContext logContext, string pipelineExecutionDetail, int detailSequence, int detailTotal)
-        {
-            int eventId = _pipelineExecutionDetailEventId;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["PipelineExecutionDetail"] = pipelineExecutionDetail;
-            mapArgs["DetailSequence"] = detailSequence;
-            mapArgs["DetailTotal"] = detailTotal;
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, PipelineExecutionDetailCategoryId);
-
-            entry.EntryType = EventLogEntryType.Information;
-
-            string pipelineInfo = GetEventDetail("PipelineExecutionDetailContext", mapArgs);
-
-            LogEvent(entry, logContext.CommandLine, pipelineInfo, pipelineExecutionDetail);
-        }
-
-        private const int _providerHealthEventId = 300;
-        /// <summary>
-        /// Provider interface function for logging provider health event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="providerName"></param>
-        /// <param name="exception"></param>
-        internal override void LogProviderHealthEvent(LogContext logContext, string providerName, Exception exception)
-        {
-            int eventId = _providerHealthEventId;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["ProviderName"] = providerName;
-
-            IContainsErrorRecord icer = exception as IContainsErrorRecord;
-            if (icer != null && icer.ErrorRecord != null)
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = icer.ErrorRecord.CategoryInfo.Category;
-                mapArgs["ErrorId"] = icer.ErrorRecord.FullyQualifiedErrorId;
-
-                if (icer.ErrorRecord.ErrorDetails != null
-                    && !string.IsNullOrEmpty(icer.ErrorRecord.ErrorDetails.Message))
-                {
-                    mapArgs["ErrorMessage"] = icer.ErrorRecord.ErrorDetails.Message;
-                }
-                else
-                {
-                    mapArgs["ErrorMessage"] = exception.Message;
-                }
-            }
-            else
-            {
-                mapArgs["ExceptionClass"] = exception.GetType().Name;
-                mapArgs["ErrorCategory"] = string.Empty;
-                mapArgs["ErrorId"] = string.Empty;
-                mapArgs["ErrorMessage"] = exception.Message;
-            }
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, ProviderHealthCategoryId);
-
-            entry.EntryType = GetEventLogEntryType(logContext);
-
-            string detail = GetEventDetail("ProviderHealthContext", mapArgs);
-
-            LogEvent(entry, mapArgs["ErrorMessage"], detail);
-        }
-
-        /// <summary>
-        /// Log provider lifecycle event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="providerName"></param>
-        /// <param name="newState"></param>
-        internal override void LogProviderLifecycleEvent(LogContext logContext, string providerName, ProviderState newState)
-        {
-            int eventId = GetProviderLifecycleEventId(newState);
-
-            if (eventId == _invalidEventId)
-                return;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["ProviderName"] = providerName;
-            mapArgs["NewProviderState"] = newState.ToString();
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, ProviderLifecycleCategoryId);
-
-            entry.EntryType = EventLogEntryType.Information;
-
-            string detail = GetEventDetail("ProviderLifecycleContext", mapArgs);
-
-            LogEvent(entry, providerName, newState, detail);
-        }
-
-        private const int _baseProviderLifecycleEventId = 600;
-
-        /// <summary>
-        /// Get provider lifecycle event id based on provider state.
-        /// </summary>
-        /// <param name="providerState"></param>
-        /// <returns></returns>
-        private static int GetProviderLifecycleEventId(ProviderState providerState)
-        {
-            switch (providerState)
-            {
-                case ProviderState.Started:
-                    return _baseProviderLifecycleEventId;
-                case ProviderState.Stopped:
-                    return _baseProviderLifecycleEventId + 1;
-            }
-
-            return _invalidEventId;
-        }
-
-        private const int _settingsEventId = 700;
-
-        /// <summary>
-        /// Log settings event.
-        /// </summary>
-        /// <param name="logContext"></param>
-        /// <param name="variableName"></param>
-        /// <param name="value"></param>
-        /// <param name="previousValue"></param>
-        internal override void LogSettingsEvent(LogContext logContext, string variableName, string value, string previousValue)
-        {
-            int eventId = _settingsEventId;
-
-            Hashtable mapArgs = new Hashtable();
-
-            mapArgs["VariableName"] = variableName;
-            mapArgs["NewValue"] = value;
-            mapArgs["PreviousValue"] = previousValue;
-
-            FillEventArgs(mapArgs, logContext);
-
-            EventInstance entry = new EventInstance(eventId, SettingsCategoryId);
-
-            entry.EntryType = EventLogEntryType.Information;
-
-            string detail = GetEventDetail("SettingsContext", mapArgs);
-
-            LogEvent(entry, variableName, value, previousValue, detail);
-        }
-
-        #endregion Log Provider Api
-
-        #region EventLog helper functions
-
-        /// <summary>
-        /// This is the helper function for logging an event with localizable message
-        /// to event log. It will trace all exception thrown by eventlog.
-        /// </summary>
-        /// <param name="entry"></param>
-        /// <param name="args"></param>
-        private void LogEvent(EventInstance entry, params object[] args)
-        {
-            try
-            {
-                _eventLog.WriteEvent(entry, args);
-            }
-            catch (ArgumentException)
-            {
-                return;
-            }
-            catch (InvalidOperationException)
-            {
-                return;
-            }
-            catch (Win32Exception)
-            {
-                return;
-            }
-        }
-
-        #endregion
-
-        #region Event Arguments
-
-        /// <summary>
-        /// Fill event arguments with logContext info.
-        ///
-        /// In EventLog Api, arguments are passed in as an array of objects.
-        /// </summary>
-        /// <param name="mapArgs">An ArrayList to contain the event arguments.</param>
-        /// <param name="logContext">The log context containing the info to fill in.</param>
-        private static void FillEventArgs(Hashtable mapArgs, LogContext logContext)
-        {
-            mapArgs["Severity"] = logContext.Severity;
-            mapArgs["SequenceNumber"] = logContext.SequenceNumber;
-            mapArgs["HostName"] = logContext.HostName;
-            mapArgs["HostVersion"] = logContext.HostVersion;
-            mapArgs["HostId"] = logContext.HostId;
-            mapArgs["HostApplication"] = logContext.HostApplication;
-            mapArgs["EngineVersion"] = logContext.EngineVersion;
-            mapArgs["RunspaceId"] = logContext.RunspaceId;
-            mapArgs["PipelineId"] = logContext.PipelineId;
-            mapArgs["CommandName"] = logContext.CommandName;
-            mapArgs["CommandType"] = logContext.CommandType;
-            mapArgs["ScriptName"] = logContext.ScriptName;
-            mapArgs["CommandPath"] = logContext.CommandPath;
-            mapArgs["CommandLine"] = logContext.CommandLine;
-            mapArgs["User"] = logContext.User;
-            mapArgs["Time"] = logContext.Time;
-        }
-
-        /// <summary>
-        /// Fill event arguments with additionalInfo stored in a string dictionary.
-        /// </summary>
-        /// <param name="mapArgs">An arraylist to contain the event arguments.</param>
-        /// <param name="additionalInfo">A string dictionary to fill in.</param>
-        private static void FillEventArgs(Hashtable mapArgs, Dictionary<string, string> additionalInfo)
-        {
-            if (additionalInfo == null)
-            {
-                for (int i = 0; i < 3; i++)
-                {
-                    string id = ((int)(i + 1)).ToString("d1", CultureInfo.CurrentCulture);
-
-                    mapArgs["AdditionalInfo_Name" + id] = string.Empty;
-                    mapArgs["AdditionalInfo_Value" + id] = string.Empty;
-                }
-
-                return;
-            }
-
-            string[] keys = new string[additionalInfo.Count];
-            string[] values = new string[additionalInfo.Count];
-
-            additionalInfo.Keys.CopyTo(keys, 0);
-            additionalInfo.Values.CopyTo(values, 0);
-            for (int i = 0; i < 3; i++)
-            {
-                string id = ((int)(i + 1)).ToString("d1", CultureInfo.CurrentCulture);
-
-                if (i < keys.Length)
-                {
-                    mapArgs["AdditionalInfo_Name" + id] = keys[i];
-                    mapArgs["AdditionalInfo_Value" + id] = values[i];
-                }
-                else
-                {
-                    mapArgs["AdditionalInfo_Name" + id] = string.Empty;
-                    mapArgs["AdditionalInfo_Value" + id] = string.Empty;
-                }
-            }
-
-            return;
-        }
-
-        #endregion Event Arguments
-
-        #region Event Message
-
-        private string GetEventDetail(string contextId, Hashtable mapArgs)
-        {
-            return GetMessage(contextId, mapArgs);
-        }
-
-        private string GetMessage(string messageId, Hashtable mapArgs)
-        {
-            if (_resourceManager == null)
-                return string.Empty;
-
-            string messageTemplate = _resourceManager.GetString(messageId);
-
-            if (string.IsNullOrEmpty(messageTemplate))
-                return string.Empty;
-
-            return FillMessageTemplate(messageTemplate, mapArgs);
-        }
-
-        private static string FillMessageTemplate(string messageTemplate, Hashtable mapArgs)
-        {
-            StringBuilder message = new StringBuilder();
-
-            int cursor = 0;
-
-            while (true)
-            {
-                int startIndex = messageTemplate.IndexOf('[', cursor);
-
-                if (startIndex < 0)
-                {
-                    message.Append(messageTemplate.Substring(cursor));
-                    return message.ToString();
-                }
-
-                int endIndex = messageTemplate.IndexOf(']', startIndex + 1);
-
-                if (endIndex < 0)
-                {
-                    message.Append(messageTemplate.Substring(cursor));
-                    return message.ToString();
-                }
-
-                message.Append(messageTemplate.Substring(cursor, startIndex - cursor));
-                cursor = startIndex;
-
-                string placeHolder = messageTemplate.Substring(startIndex + 1, endIndex - startIndex - 1);
-
-                if (mapArgs.Contains(placeHolder))
-                {
-                    message.Append(mapArgs[placeHolder]);
-                    cursor = endIndex + 1;
-                }
-                else
-                {
-                    message.Append("[");
-                    cursor++;
-                }
-            }
-        }
-
-        #endregion Event Message
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/AliasProvider.cs b/src/System.Management.Automation/namespaces/AliasProvider.cs
index 8782a0d9bb5..c51d8e35128 100644
--- a/src/System.Management.Automation/namespaces/AliasProvider.cs
+++ b/src/System.Management.Automation/namespaces/AliasProvider.cs
@@ -194,11 +194,7 @@ internal override void SetSessionStateItem(string name, object value, bool write
                 if (dynamicParametersSpecified)
                 {
                     item = (AliasInfo)GetSessionStateItem(name);
-
-                    if (item != null)
-                    {
-                        item.SetOptions(dynamicParameters.Options, Force);
-                    }
+                    item?.SetOptions(dynamicParameters.Options, Force);
                 }
                 else
                 {
diff --git a/src/System.Management.Automation/namespaces/ContainerProviderBase.cs b/src/System.Management.Automation/namespaces/ContainerProviderBase.cs
index cc3e0ac83e2..2a600097108 100644
--- a/src/System.Management.Automation/namespaces/ContainerProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/ContainerProviderBase.cs
@@ -840,7 +840,7 @@ protected virtual object RenameItemDynamicParameters(string path, string newName
         ///
         /// The <paramref name="newItemValue"/> parameter can be any type of object that the provider can use
         /// to create the item. It is recommended that the provider accept at a minimum strings, and an instance
-        /// of the type of object that would be returned from GetItem() for this path. <see cref="LanguagePrimitives.ConvertTo(System.Object, System.Type)"/>
+        /// of the type of object that would be returned from GetItem() for this path. <see cref="LanguagePrimitives.ConvertTo(object, System.Type)"/>
         /// can be used to convert some types to the desired type.
         ///
         /// The default implementation of this method throws an <see cref="System.Management.Automation.PSNotSupportedException"/>.
diff --git a/src/System.Management.Automation/namespaces/CoreCommandContext.cs b/src/System.Management.Automation/namespaces/CoreCommandContext.cs
index 5446b6b71cb..cf8c43c4b3e 100644
--- a/src/System.Management.Automation/namespaces/CoreCommandContext.cs
+++ b/src/System.Management.Automation/namespaces/CoreCommandContext.cs
@@ -29,7 +29,7 @@ internal sealed class CmdletProviderContext
         /// An instance of the PSTraceSource class used for trace output
         /// using "CmdletProviderContext" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "CmdletProviderContext",
              "The context under which a core command is being run.")]
         private static readonly Dbg.PSTraceSource s_tracer =
@@ -390,13 +390,8 @@ private void CopyFilters(CmdletProviderContext context)
             Filter = context.Filter;
         }
 
-        internal void RemoveStopReferral()
-        {
-            if (_copiedContext != null)
-            {
-                _copiedContext.StopReferrals.Remove(this);
-            }
-        }
+        internal void RemoveStopReferral() => _copiedContext?.StopReferrals.Remove(this);
+
         #endregion Internal properties
 
         #region Public properties
@@ -556,7 +551,7 @@ internal SwitchParameter Force
         /// <param name="target">
         /// Name of the target resource being acted upon
         /// </param>
-        /// <remarks>true iff the action should be performed</remarks>
+        /// <remarks>true if-and-only-if the action should be performed</remarks>
         /// <exception cref="PipelineStoppedException">
         /// The ActionPreference.Stop or ActionPreference.Inquire policy
         /// triggered a terminating error.  The pipeline failure will be
@@ -582,7 +577,7 @@ internal bool ShouldProcess(
         /// Name of the target resource being acted upon
         /// </param>
         /// <param name="action">What action was being performed.</param>
-        /// <remarks>true iff the action should be performed</remarks>
+        /// <remarks>true if-and-only-if the action should be performed</remarks>
         /// <exception cref="PipelineStoppedException">
         /// The ActionPreference.Stop or ActionPreference.Inquire policy
         /// triggered a terminating error.  The pipeline failure will be
@@ -621,7 +616,7 @@ internal bool ShouldProcess(
         /// if the user is prompted whether or not to perform the action.
         /// It may be displayed by some hosts, but not all.
         /// </param>
-        /// <remarks>true iff the action should be performed</remarks>
+        /// <remarks>true if-and-only-if the action should be performed</remarks>
         /// <exception cref="PipelineStoppedException">
         /// The ActionPreference.Stop or ActionPreference.Inquire policy
         /// triggered a terminating error.  The pipeline failure will be
@@ -670,7 +665,7 @@ internal bool ShouldProcess(
         /// <see cref="System.Management.Automation.ShouldProcessReason"/>
         /// are returned.
         /// </param>
-        /// <remarks>true iff the action should be performed</remarks>
+        /// <remarks>true if-and-only-if the action should be performed</remarks>
         /// <exception cref="PipelineStoppedException">
         /// The ActionPreference.Stop or ActionPreference.Inquire policy
         /// triggered a terminating error.  The pipeline failure will be
@@ -774,13 +769,7 @@ internal bool ShouldContinue(
         /// <param name="text">
         /// The string that needs to be written.
         /// </param>
-        internal void WriteVerbose(string text)
-        {
-            if (_command != null)
-            {
-                _command.WriteVerbose(text);
-            }
-        }
+        internal void WriteVerbose(string text) => _command?.WriteVerbose(text);
 
         /// <summary>
         /// Writes the object to the Warning pipe.
@@ -788,21 +777,9 @@ internal void WriteVerbose(string text)
         /// <param name="text">
         /// The string that needs to be written.
         /// </param>
-        internal void WriteWarning(string text)
-        {
-            if (_command != null)
-            {
-                _command.WriteWarning(text);
-            }
-        }
+        internal void WriteWarning(string text) => _command?.WriteWarning(text);
 
-        internal void WriteProgress(ProgressRecord record)
-        {
-            if (_command != null)
-            {
-                _command.WriteProgress(record);
-            }
-        }
+        internal void WriteProgress(ProgressRecord record) => _command?.WriteProgress(record);
 
         /// <summary>
         /// Writes a debug string.
@@ -810,29 +787,11 @@ internal void WriteProgress(ProgressRecord record)
         /// <param name="text">
         /// The String that needs to be written.
         /// </param>
-        internal void WriteDebug(string text)
-        {
-            if (_command != null)
-            {
-                _command.WriteDebug(text);
-            }
-        }
+        internal void WriteDebug(string text) => _command?.WriteDebug(text);
 
-        internal void WriteInformation(InformationRecord record)
-        {
-            if (_command != null)
-            {
-                _command.WriteInformation(record);
-            }
-        }
+        internal void WriteInformation(InformationRecord record) => _command?.WriteInformation(record);
 
-        internal void WriteInformation(object messageData, string[] tags)
-        {
-            if (_command != null)
-            {
-                _command.WriteInformation(messageData, tags);
-            }
-        }
+        internal void WriteInformation(object messageData, string[] tags) => _command?.WriteInformation(messageData, tags);
 
         #endregion User feedback mechanisms
 
@@ -1154,14 +1113,10 @@ internal void StopProcessing()
         {
             Stopping = true;
 
-            if (_providerInstance != null)
-            {
-                // We don't need to catch any of the exceptions here because
-                // we are terminating the pipeline and any exception will
-                // be caught by the engine.
-
-                _providerInstance.StopProcessing();
-            }
+            // We don't need to catch any of the exceptions here because
+            // we are terminating the pipeline and any exception will
+            // be caught by the engine.
+            _providerInstance?.StopProcessing();
 
             // Call the stop referrals if any
 
diff --git a/src/System.Management.Automation/namespaces/DriveProviderBase.cs b/src/System.Management.Automation/namespaces/DriveProviderBase.cs
index 91b47619be7..2fc44e50bdc 100644
--- a/src/System.Management.Automation/namespaces/DriveProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/DriveProviderBase.cs
@@ -9,7 +9,7 @@ namespace System.Management.Automation.Provider
     #region DriveCmdletProvider
 
     /// <summary>
-    /// The base class for Cmdlet providers that can be exposed through MSH drives.
+    /// The base class for Cmdlet providers that can be exposed through PSDrives.
     /// </summary>
     /// <remarks>
     /// Although it is possible to derive from this base class to implement a Cmdlet Provider, in most
diff --git a/src/System.Management.Automation/namespaces/FileSystemContentStream.cs b/src/System.Management.Automation/namespaces/FileSystemContentStream.cs
index f5d299ecfd6..d0f8f08deab 100644
--- a/src/System.Management.Automation/namespaces/FileSystemContentStream.cs
+++ b/src/System.Management.Automation/namespaces/FileSystemContentStream.cs
@@ -35,7 +35,7 @@ internal class FileSystemContentReaderWriter : IContentReader, IContentWriter
         /// An instance of the PSTraceSource class used for trace output
         /// using "FileSystemContentStream" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
             "FileSystemContentStream",
             "The provider content reader and writer for the file system")]
         private static readonly Dbg.PSTraceSource s_tracer =
@@ -413,7 +413,7 @@ public IList Read(long readCount)
                     (e is UnauthorizedAccessException) ||
                     (e is ArgumentNullException))
                 {
-                    // Exception contains specific message about the error occured and so no need for errordetails.
+                    // Exception contains specific message about the error occurred and so no need for errordetails.
                     _provider.WriteError(new ErrorRecord(e, "GetContentReaderIOError", ErrorCategory.ReadError, _path));
                     return null;
                 }
@@ -567,7 +567,7 @@ internal void SeekItemsBackward(int backCount)
                     (e is UnauthorizedAccessException) ||
                     (e is ArgumentNullException))
                 {
-                    // Exception contains specific message about the error occured and so no need for errordetails.
+                    // Exception contains specific message about the error occurred and so no need for errordetails.
                     _provider.WriteError(new ErrorRecord(e, "GetContentReaderIOError", ErrorCategory.ReadError, _path));
                 }
                 else
@@ -709,7 +709,7 @@ private bool ReadDelimited(bool waitChanges, List<object> blocks, bool readBackw
             // We've reached the end of file or end of line.
             if (_currentLineContent.Length > 0)
             {
-                // Add the block read to the ouptut array list, trimming a trailing delimiter, if present.
+                // Add the block read to the output array list, trimming a trailing delimiter, if present.
                 // Note: If -Tail was specified, we get here in the course of 2 distinct passes:
                 //  - Once while reading backward simply to determine the appropriate *start position* for later forward reading, ignoring the content of the blocks read (in reverse).
                 //  - Then again during forward reading, for regular output processing; it is only then that trimming the delimiter is necessary.
@@ -794,7 +794,7 @@ private bool ReadByteEncoded(bool waitChanges, List<object> blocks, bool readBac
                 // the changes
                 if (waitChanges)
                 {
-                    WaitForChanges(_path, _mode, _access, _share, ClrFacade.GetDefaultEncoding());
+                    WaitForChanges(_path, _mode, _access, _share, Encoding.Default);
                     byteRead = _stream.ReadByte();
                 }
             }
@@ -987,9 +987,8 @@ private void WaitForChanges(string filePath, FileMode fileMode, FileAccess fileA
 
             // Seek to the place we last left off.
             _stream.Seek(_fileOffset, SeekOrigin.Begin);
-            if (_reader != null) { _reader.DiscardBufferedData(); }
-
-            if (_backReader != null) { _backReader.DiscardBufferedData(); }
+            _reader?.DiscardBufferedData();
+            _backReader?.DiscardBufferedData();
         }
 
         /// <summary>
@@ -1003,15 +1002,13 @@ private void WaitForChanges(string filePath, FileMode fileMode, FileAccess fileA
         /// </param>
         public void Seek(long offset, SeekOrigin origin)
         {
-            if (_writer != null) { _writer.Flush(); }
+            _writer?.Flush();
 
             _stream.Seek(offset, origin);
 
-            if (_writer != null) { _writer.Flush(); }
-
-            if (_reader != null) { _reader.DiscardBufferedData(); }
-
-            if (_backReader != null) { _backReader.DiscardBufferedData(); }
+            _writer?.Flush();
+            _reader?.DiscardBufferedData();
+            _backReader?.DiscardBufferedData();
         }
 
         /// <summary>
@@ -1135,14 +1132,10 @@ internal void Dispose(bool isDisposing)
         {
             if (isDisposing)
             {
-                if (_stream != null)
-                    _stream.Dispose();
-                if (_reader != null)
-                    _reader.Dispose();
-                if (_backReader != null)
-                    _backReader.Dispose();
-                if (_writer != null)
-                    _writer.Dispose();
+                _stream?.Dispose();
+                _reader?.Dispose();
+                _backReader?.Dispose();
+                _writer?.Dispose();
             }
         }
     }
@@ -1180,39 +1173,9 @@ internal FileStreamBackReader(FileStream fileStream, Encoding encoding)
         private int _byteCount = 0;
         private int _charCount = 0;
         private long _currentPosition = 0;
-        private bool? _singleByteCharSet = null;
-
         private const byte BothTopBitsSet = 0xC0;
         private const byte TopBitUnset = 0x80;
 
-        /// <summary>
-        /// If the given encoding is OEM or Default, check to see if the code page
-        /// is SBCS(single byte character set).
-        /// </summary>
-        /// <returns></returns>
-        private bool IsSingleByteCharacterSet()
-        {
-            if (_singleByteCharSet != null)
-                return (bool)_singleByteCharSet;
-
-            // Porting note: only UTF-8 is supported on Linux, which is not an SBCS
-            if ((_currentEncoding.Equals(_oemEncoding) ||
-                 _currentEncoding.Equals(_defaultAnsiEncoding))
-                && Platform.IsWindows)
-            {
-                NativeMethods.CPINFO cpInfo;
-                if (NativeMethods.GetCPInfo((uint)_currentEncoding.CodePage, out cpInfo) &&
-                    cpInfo.MaxCharSize == 1)
-                {
-                    _singleByteCharSet = true;
-                    return true;
-                }
-            }
-
-            _singleByteCharSet = false;
-            return false;
-        }
-
         /// <summary>
         /// We don't support this method because it is not used by the ReadBackward method in FileStreamContentReaderWriter.
         /// </summary>
@@ -1481,8 +1444,7 @@ private int RefillByteBuff()
             }
             else if (_currentEncoding is UnicodeEncoding ||
                 _currentEncoding is UTF32Encoding ||
-                _currentEncoding is ASCIIEncoding ||
-                IsSingleByteCharacterSet())
+                _currentEncoding.IsSingleByte)
             {
                 // Unicode -- two bytes per character
                 // UTF-32 -- four bytes per character
@@ -1513,36 +1475,6 @@ _currentEncoding is ASCIIEncoding ||
 
             return _byteCount;
         }
-
-        private static class NativeMethods
-        {
-            // Default values
-            private const int MAX_DEFAULTCHAR = 2;
-            private const int MAX_LEADBYTES = 12;
-
-            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-            internal struct CPINFO
-            {
-                [MarshalAs(UnmanagedType.U4)]
-                internal int MaxCharSize;
-
-                [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_DEFAULTCHAR)]
-                public byte[] DefaultChar;
-
-                [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_LEADBYTES)]
-                public byte[] LeadBytes;
-            }
-
-            /// <summary>
-            /// Get information on a named code page.
-            /// </summary>
-            /// <param name="codePage"></param>
-            /// <param name="lpCpInfo"></param>
-            /// <returns></returns>
-            [DllImport(PinvokeDllNames.GetCPInfoDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-            [return: MarshalAs(UnmanagedType.Bool)]
-            internal static extern bool GetCPInfo(uint codePage, out CPINFO lpCpInfo);
-        }
     }
 
     /// <summary>
diff --git a/src/System.Management.Automation/namespaces/FileSystemProvider.cs b/src/System.Management.Automation/namespaces/FileSystemProvider.cs
index 9499bf95289..05c8fff76e0 100644
--- a/src/System.Management.Automation/namespaces/FileSystemProvider.cs
+++ b/src/System.Management.Automation/namespaces/FileSystemProvider.cs
@@ -6,6 +6,7 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
+using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.IO;
@@ -18,6 +19,7 @@
 using System.Security;
 using System.Security.AccessControl;
 using System.Text;
+using System.Threading.Tasks;
 using System.Xml;
 using System.Xml.XPath;
 
@@ -37,13 +39,14 @@ namespace Microsoft.PowerShell.Commands
     [OutputType(typeof(FileSecurity), ProviderCmdlet = ProviderCmdlet.SetAcl)]
     [OutputType(typeof(string), typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.ResolvePath)]
     [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PushLocation)]
+    [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PopLocation)]
     [OutputType(typeof(byte), typeof(string), ProviderCmdlet = ProviderCmdlet.GetContent)]
     [OutputType(typeof(FileInfo), ProviderCmdlet = ProviderCmdlet.GetItem)]
     [OutputType(typeof(FileInfo), typeof(DirectoryInfo), ProviderCmdlet = ProviderCmdlet.GetChildItem)]
     [OutputType(typeof(FileSecurity), typeof(DirectorySecurity), ProviderCmdlet = ProviderCmdlet.GetAcl)]
     [OutputType(typeof(bool), typeof(string), typeof(FileInfo), typeof(DirectoryInfo), ProviderCmdlet = ProviderCmdlet.GetItem)]
     [OutputType(typeof(bool), typeof(string), typeof(DateTime), typeof(System.IO.FileInfo), typeof(System.IO.DirectoryInfo), ProviderCmdlet = ProviderCmdlet.GetItemProperty)]
-    [OutputType(typeof(string), typeof(System.IO.FileInfo), ProviderCmdlet = ProviderCmdlet.NewItem)]
+    [OutputType(typeof(string), typeof(System.IO.FileInfo), typeof(DirectoryInfo), ProviderCmdlet = ProviderCmdlet.NewItem)]
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "This coupling is required")]
     public sealed partial class FileSystemProvider : NavigationCmdletProvider,
                                                      IContentCmdletProvider,
@@ -51,21 +54,15 @@ public sealed partial class FileSystemProvider : NavigationCmdletProvider,
                                                      ISecurityDescriptorCmdletProvider,
                                                      ICmdletProviderSupportsHelp
     {
-#if UNIX
-        // This is the errno returned by the rename() syscall
-        // when an item is attempted to be renamed across filesystem mount boundaries.
-        private const int MOVE_FAILED_ERROR = 18;
-#else
-        // 0x80070005 ACCESS_DENIED is returned when trying to move files across volumes like DFS
-        private const int MOVE_FAILED_ERROR = -2147024891;
-#endif
-
         // 4MB gives the best results without spiking the resources on the remote connection for file transfers between pssessions.
         // NOTE: The script used to copy file data from session (PSCopyFromSessionHelper) has a
         // maximum fragment size value for security.  If FILETRANSFERSIZE changes make sure the
-        // copy script will accomodate the new value.
+        // copy script will accommodate the new value.
         private const int FILETRANSFERSIZE = 4 * 1024 * 1024;
 
+        private const int COPY_FILE_ACTIVITY_ID = 0;
+        private const int REMOVE_FILE_ACTIVITY_ID = 0;
+
         // The name of the key in an exception's Data dictionary when attempting
         // to copy an item onto itself.
         private const string SelfCopyDataKey = "SelfCopy";
@@ -74,7 +71,7 @@ public sealed partial class FileSystemProvider : NavigationCmdletProvider,
         /// An instance of the PSTraceSource class used for trace output
         /// using "FileSystemProvider" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute("FileSystemProvider", "The namespace navigation provider for the file system")]
+        [Dbg.TraceSource("FileSystemProvider", "The namespace navigation provider for the file system")]
         private static readonly Dbg.PSTraceSource s_tracer =
             Dbg.PSTraceSource.GetTracer("FileSystemProvider", "The namespace navigation provider for the file system");
 
@@ -109,7 +106,7 @@ public FileSystemProvider()
         /// <returns>
         /// The path with all / normalized to \
         /// </returns>
-        private static string NormalizePath(string path)
+        internal static string NormalizePath(string path)
         {
             return GetCorrectCasedPath(path.Replace(StringLiterals.AlternatePathSeparator, StringLiterals.DefaultPathSeparator));
         }
@@ -140,20 +137,21 @@ private static string GetCorrectCasedPath(string path)
                     itemsToSkip = 4;
                 }
 
-                foreach (string item in path.Split(StringLiterals.DefaultPathSeparator))
+                var items = path.Split(StringLiterals.DefaultPathSeparator);
+                for (int i = 0; i < items.Length; i++)
                 {
                     if (itemsToSkip-- > 0)
                     {
                         // This handles the UNC server and share and 8.3 short path syntax
-                        exactPath += item + StringLiterals.DefaultPathSeparator;
+                        exactPath += items[i] + StringLiterals.DefaultPathSeparator;
                         continue;
                     }
                     else if (string.IsNullOrEmpty(exactPath))
                     {
                         // This handles the drive letter or / root path start
-                        exactPath = item + StringLiterals.DefaultPathSeparator;
+                        exactPath = items[i] + StringLiterals.DefaultPathSeparator;
                     }
-                    else if (string.IsNullOrEmpty(item))
+                    else if (string.IsNullOrEmpty(items[i]) && i == items.Length - 1)
                     {
                         // This handles the trailing slash case
                         if (!exactPath.EndsWith(StringLiterals.DefaultPathSeparator))
@@ -163,17 +161,17 @@ private static string GetCorrectCasedPath(string path)
 
                         break;
                     }
-                    else if (item.Contains('~'))
+                    else if (items[i].Contains('~'))
                     {
                         // This handles short path names
-                        exactPath += StringLiterals.DefaultPathSeparator + item;
+                        exactPath += StringLiterals.DefaultPathSeparator + items[i];
                     }
                     else
                     {
                         // Use GetFileSystemEntries to get the correct casing of this element
                         try
                         {
-                            var entries = Directory.GetFileSystemEntries(exactPath, item);
+                            var entries = Directory.GetFileSystemEntries(exactPath, items[i]);
                             if (entries.Length > 0)
                             {
                                 exactPath = entries[0];
@@ -478,13 +476,12 @@ protected override ProviderInfo Start(ProviderInfo providerInfo)
 #if !UNIX
             // The placeholder mode management APIs Rtl(Set|Query)(Process|Thread)PlaceholderCompatibilityMode
             // are only supported starting with Windows 10 version 1803 (build 17134)
-            Version minBuildForPlaceHolderAPIs = new Version(10, 0, 17134, 0);
-            if (Environment.OSVersion.Version >= minBuildForPlaceHolderAPIs)
+            if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134, 0))
             {
                 // let's be safe, don't change the PlaceHolderCompatibilityMode if the current one is not what we expect
-                if (NativeMethods.PHCM_DISGUISE_PLACEHOLDER == NativeMethods.RtlQueryProcessPlaceholderCompatibilityMode())
+                if (Interop.Windows.RtlQueryProcessPlaceholderCompatibilityMode() == Interop.Windows.PHCM_DISGUISE_PLACEHOLDER)
                 {
-                    NativeMethods.RtlSetProcessPlaceholderCompatibilityMode(NativeMethods.PHCM_EXPOSE_PLACEHOLDERS);
+                    Interop.Windows.RtlSetProcessPlaceholderCompatibilityMode(Interop.Windows.PHCM_EXPOSE_PLACEHOLDERS);
                 }
             }
 #endif
@@ -536,7 +533,7 @@ protected override PSDriveInfo NewDrive(PSDriveInfo drive)
             {
                 // MapNetworkDrive facilitates to map the newly
                 // created PS Drive to a network share.
-                this.MapNetworkDrive(drive);
+                MapNetworkDrive(drive);
             }
 
             // The drive is valid if the item exists or the
@@ -572,7 +569,7 @@ protected override PSDriveInfo NewDrive(PSDriveInfo drive)
             if (driveIsFixed)
             {
                 // Since the drive is fixed, ensure the root is valid.
-                validDrive = Directory.Exists(drive.Root);
+                validDrive = SafeDoesPathExist(drive.Root);
             }
 
             if (validDrive)
@@ -595,35 +592,18 @@ protected override PSDriveInfo NewDrive(PSDriveInfo drive)
         /// MapNetworkDrive facilitates to map the newly created PS Drive to a network share.
         /// </summary>
         /// <param name="drive">The PSDrive info that would be used to create a new PS drive.</param>
+        [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "Can be static on Unix but not on Windows.")]
+
         private void MapNetworkDrive(PSDriveInfo drive)
         {
+#if UNIX
+            throw new PlatformNotSupportedException();
+#else
             // Porting note: mapped network drives are only supported on Windows
-            if (Platform.IsWindows)
-            {
-                WinMapNetworkDrive(drive);
-            }
-            else
-            {
-                throw new PlatformNotSupportedException();
-            }
-        }
-
-        private static bool _WNetApiAvailable = true;
-
-        private void WinMapNetworkDrive(PSDriveInfo drive)
-        {
             if (drive != null && !string.IsNullOrEmpty(drive.Root))
             {
-                const int CONNECT_UPDATE_PROFILE = 0x00000001;
-                const int CONNECT_NOPERSIST = 0x00000000;
-                const int RESOURCE_GLOBALNET = 0x00000002;
-                const int RESOURCETYPE_ANY = 0x00000000;
-                const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;
-                const int RESOURCEUSAGE_CONNECTABLE = 0x00000001;
-                const int ERROR_NO_NETWORK = 1222;
-
                 // By default the connection is not persisted.
-                int CONNECT_TYPE = CONNECT_NOPERSIST;
+                int connectType = Interop.Windows.CONNECT_NOPERSIST;
 
                 string driveName = null;
                 byte[] passwd = null;
@@ -633,13 +613,12 @@ private void WinMapNetworkDrive(PSDriveInfo drive)
                 {
                     if (IsSupportedDriveForPersistence(drive))
                     {
-                        CONNECT_TYPE = CONNECT_UPDATE_PROFILE;
+                        connectType = Interop.Windows.CONNECT_UPDATE_PROFILE;
                         driveName = drive.Name + ":";
                         drive.DisplayRoot = drive.Root;
                     }
                     else
                     {
-                        // error.
                         ErrorRecord er = new ErrorRecord(new InvalidOperationException(FileSystemProviderStrings.InvalidDriveName), "DriveNameNotSupportedForPersistence", ErrorCategory.InvalidOperation, drive);
                         ThrowTerminatingError(er);
                     }
@@ -655,37 +634,15 @@ private void WinMapNetworkDrive(PSDriveInfo drive)
 
                 try
                 {
-                    NetResource resource = new NetResource();
-                    resource.Comment = null;
-                    resource.DisplayType = RESOURCEDISPLAYTYPE_GENERIC;
-                    resource.LocalName = driveName;
-                    resource.Provider = null;
-                    resource.RemoteName = drive.Root;
-                    resource.Scope = RESOURCE_GLOBALNET;
-                    resource.Type = RESOURCETYPE_ANY;
-                    resource.Usage = RESOURCEUSAGE_CONNECTABLE;
-
-                    int code = ERROR_NO_NETWORK;
-
-                    if (_WNetApiAvailable)
-                    {
-                        try
-                        {
-                            code = NativeMethods.WNetAddConnection2(ref resource, passwd, userName, CONNECT_TYPE);
-                        }
-                        catch (System.DllNotFoundException)
-                        {
-                            _WNetApiAvailable = false;
-                        }
-                    }
+                    int errorCode = Interop.Windows.WNetAddConnection2(driveName, drive.Root, passwd, userName, connectType);
 
-                    if (code != 0)
+                    if (errorCode != Interop.Windows.ERROR_SUCCESS)
                     {
-                        ErrorRecord er = new ErrorRecord(new System.ComponentModel.Win32Exception(code), "CouldNotMapNetworkDrive", ErrorCategory.InvalidOperation, drive);
+                        ErrorRecord er = new ErrorRecord(new System.ComponentModel.Win32Exception(errorCode), "CouldNotMapNetworkDrive", ErrorCategory.InvalidOperation, drive);
                         ThrowTerminatingError(er);
                     }
 
-                    if (CONNECT_TYPE == CONNECT_UPDATE_PROFILE)
+                    if (connectType == Interop.Windows.CONNECT_UPDATE_PROFILE)
                     {
                         // Update the current PSDrive to be a persisted drive.
                         drive.IsNetworkDrive = true;
@@ -700,10 +657,11 @@ private void WinMapNetworkDrive(PSDriveInfo drive)
                     // Clear the password in the memory.
                     if (passwd != null)
                     {
-                        Array.Clear(passwd, 0, passwd.Length - 1);
+                        Array.Clear(passwd);
                     }
                 }
             }
+#endif
         }
 
         /// <summary>
@@ -733,23 +691,14 @@ protected override PSDriveInfo RemoveDrive(PSDriveInfo drive)
 #if UNIX
             return drive;
 #else
-            return WinRemoveDrive(drive);
-#endif
-        }
-
-        private PSDriveInfo WinRemoveDrive(PSDriveInfo drive)
-        {
             if (IsNetworkMappedDrive(drive))
             {
-                const int CONNECT_UPDATE_PROFILE = 0x00000001;
-                const int ERROR_NO_NETWORK = 1222;
-
-                int flags = 0;
+                int flags = Interop.Windows.CONNECT_NOPERSIST;
                 string driveName;
                 if (drive.IsNetworkDrive)
                 {
                     // Here we are removing only persisted network drives.
-                    flags = CONNECT_UPDATE_PROFILE;
+                    flags = Interop.Windows.CONNECT_UPDATE_PROFILE;
                     driveName = drive.Name + ":";
                 }
                 else
@@ -760,28 +709,17 @@ private PSDriveInfo WinRemoveDrive(PSDriveInfo drive)
                 }
 
                 // You need to actually remove the drive.
-                int code = ERROR_NO_NETWORK;
-
-                if (_WNetApiAvailable)
-                {
-                    try
-                    {
-                        code = NativeMethods.WNetCancelConnection2(driveName, flags, true);
-                    }
-                    catch (System.DllNotFoundException)
-                    {
-                        _WNetApiAvailable = false;
-                    }
-                }
+                int errorCode = Interop.Windows.WNetCancelConnection2(driveName, flags, force: true);
 
-                if (code != 0)
+                if (errorCode != Interop.Windows.ERROR_SUCCESS)
                 {
-                    ErrorRecord er = new ErrorRecord(new System.ComponentModel.Win32Exception(code), "CouldRemoveNetworkDrive", ErrorCategory.InvalidOperation, drive);
+                    ErrorRecord er = new ErrorRecord(new System.ComponentModel.Win32Exception(errorCode), "CouldRemoveNetworkDrive", ErrorCategory.InvalidOperation, drive);
                     ThrowTerminatingError(er);
                 }
             }
 
             return drive;
+#endif
         }
 
         /// <summary>
@@ -819,57 +757,19 @@ internal static string GetUNCForNetworkDrive(string driveName)
 #if UNIX
             return driveName;
 #else
-            return WinGetUNCForNetworkDrive(driveName);
-#endif
-        }
-
-        private static string WinGetUNCForNetworkDrive(string driveName)
-        {
-            const int ERROR_NO_NETWORK = 1222;
             string uncPath = null;
             if (!string.IsNullOrEmpty(driveName) && driveName.Length == 1)
             {
-                // By default buffer size is set to 300 which would generally be sufficient in most of the cases.
-                int bufferSize = 300;
-#if DEBUG
-                // In Debug mode buffer size is initially set to 3 and if additional buffer is required, the
-                // required buffer size is allocated and the WNetGetConnection API is executed with the newly
-                // allocated buffer size.
-                bufferSize = 3;
-#endif
+                int errorCode = Interop.Windows.GetUNCForNetworkDrive(driveName[0], out uncPath);
 
-                StringBuilder uncBuffer = new StringBuilder(bufferSize);
-                driveName += ':';
-
-                // Call the windows API
-                int errorCode = ERROR_NO_NETWORK;
-
-                try
-                {
-                    errorCode = NativeMethods.WNetGetConnection(driveName, uncBuffer, ref bufferSize);
-                }
-                catch (System.DllNotFoundException)
-                {
-                    return null;
-                }
-
-                // error code 234 is returned whenever the required buffer size is greater
-                // than the specified buffer size.
-                if (errorCode == 234)
-                {
-                    uncBuffer = new StringBuilder(bufferSize);
-                    errorCode = NativeMethods.WNetGetConnection(driveName, uncBuffer, ref bufferSize);
-                }
-
-                if (errorCode != 0)
+                if (errorCode != Interop.Windows.ERROR_SUCCESS)
                 {
                     throw new System.ComponentModel.Win32Exception(errorCode);
                 }
-
-                uncPath = uncBuffer.ToString();
             }
 
             return uncPath;
+#endif
         }
 
         /// <summary>
@@ -887,9 +787,9 @@ internal static string GetSubstitutedPathForNetworkDosDevice(string driveName)
         {
 #if UNIX
             throw new PlatformNotSupportedException();
+        }
 #else
             return WinGetSubstitutedPathForNetworkDosDevice(driveName);
-#endif
         }
 
         private static string WinGetSubstitutedPathForNetworkDosDevice(string driveName)
@@ -897,76 +797,12 @@ private static string WinGetSubstitutedPathForNetworkDosDevice(string driveName)
             string associatedPath = null;
             if (!string.IsNullOrEmpty(driveName) && driveName.Length == 1)
             {
-                // By default buffer size is set to 300 which would generally be sufficient in most of the cases.
-                int bufferSize = 300;
-                var pathInfo = new StringBuilder(bufferSize);
-                driveName += ':';
-
-                // Call the windows API
-                while (true)
-                {
-                    pathInfo.EnsureCapacity(bufferSize);
-                    int retValue = NativeMethods.QueryDosDevice(driveName, pathInfo, bufferSize);
-                    if (retValue > 0)
-                    {
-                        // If the drive letter is a substed path, the result will be in the format of
-                        //  - "\??\C:\RealPath" for local path
-                        //  - "\??\UNC\RealPath" for network path
-                        associatedPath = pathInfo.ToString();
-                        if (associatedPath.StartsWith("\\??\\", StringComparison.OrdinalIgnoreCase))
-                        {
-                            associatedPath = associatedPath.Remove(0, 4);
-                            if (associatedPath.StartsWith("UNC", StringComparison.OrdinalIgnoreCase))
-                            {
-                                associatedPath = associatedPath.Remove(0, 3);
-                                associatedPath = "\\" + associatedPath;
-                            }
-                            else if (associatedPath.EndsWith(':'))
-                            {
-                                // The substed path is the root path of a drive. For example: subst Y: C:\
-                                associatedPath += Path.DirectorySeparatorChar;
-                            }
-                        }
-                        else
-                        {
-                            // The drive name is not a substed path, then we return the root path of the drive
-                            associatedPath = driveName + "\\";
-                        }
-
-                        break;
-                    }
-
-                    // Windows API call failed
-                    int errorCode = Marshal.GetLastWin32Error();
-                    if (errorCode != 122)
-                    {
-                        // ERROR_INSUFFICIENT_BUFFER = 122
-                        // For an error other than "insufficient buffer", throw it
-                        throw new Win32Exception((int)errorCode);
-                    }
-
-                    // We got the "insufficient buffer" error. In this case we extend
-                    // the buffer size, unless it's unreasonably too large.
-                    if (bufferSize >= 32767)
-                    {
-                        // "The Windows API has many functions that also have Unicode versions to permit
-                        // an extended-length path for a maximum total path length of 32,767 characters"
-                        // See https://msdn.microsoft.com/library/aa365247.aspx#maxpath
-                        string errorMsg = StringUtil.Format(FileSystemProviderStrings.SubstitutePathTooLong, driveName);
-                        throw new InvalidOperationException(errorMsg);
-                    }
-
-                    // Extend the buffer size and try again.
-                    bufferSize *= 10;
-                    if (bufferSize > 32767)
-                    {
-                        bufferSize = 32767;
-                    }
-                }
+                associatedPath = Interop.Windows.GetDosDeviceForNetworkPath(driveName[0]);
             }
 
             return associatedPath;
         }
+#endif
 
         /// <summary>
         /// Get the root path for a network drive or MS-DOS device.
@@ -1072,7 +908,7 @@ protected override Collection<PSDriveInfo> InitializeDefaultDrives()
 
                         if (newDrive.DriveType == DriveType.Fixed)
                         {
-                            if (!newDrive.RootDirectory.Exists)
+                            if (!SafeDoesPathExist(newDrive.RootDirectory.FullName))
                             {
                                 continue;
                             }
@@ -1245,6 +1081,20 @@ protected override bool IsValidPath(string path)
                 }
             }
 
+            // .NET introduced a change where invalid characters are accepted https://learn.microsoft.com/en-us/dotnet/core/compatibility/2.1#path-apis-dont-throw-an-exception-for-invalid-characters
+            // We need to check for invalid characters ourselves.  `Path.GetInvalidFileNameChars()` is a supserset of `Path.GetInvalidPathChars()`
+
+            // Remove drive root first
+            string pathWithoutDriveRoot = path.Substring(Path.GetPathRoot(path).Length);
+
+            foreach (string segment in pathWithoutDriveRoot.Split(Path.DirectorySeparatorChar))
+            {
+                if (PathUtils.ContainsInvalidFileNameChars(segment))
+                {
+                    return false;
+                }
+            }
+
             return true;
         }
 
@@ -1367,7 +1217,7 @@ protected override void GetItem(string path)
             }
             catch (IOException ioError)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 ErrorRecord er = new ErrorRecord(ioError, "GetItemIOError", ErrorCategory.ReadError, path);
                 WriteError(er);
             }
@@ -1377,18 +1227,46 @@ protected override void GetItem(string path)
             }
         }
 
+        private static bool SafeDoesPathExist(string rootDirectory)
+        {
+            if (Directory.Exists(rootDirectory))
+            {
+                return true;
+            }
+
+            try
+            {
+                return (File.GetAttributes(rootDirectory) & FileAttributes.Directory) is not 0;
+            }
+            // In some scenarios (like AppContainers) direct access to the root directory may
+            // be prevented, but more specific paths may be accessible.
+            catch (UnauthorizedAccessException)
+            {
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
         private FileSystemInfo GetFileSystemItem(string path, ref bool isContainer, bool showHidden)
         {
             path = NormalizePath(path);
             FileInfo result = new FileInfo(path);
 
-            // FileInfo.Exists is always false for a directory path, so we check the attribute for existence.
             var attributes = result.Attributes;
-            if ((int)attributes == -1) { /* Path doesn't exist. */ return null; }
-
             bool hidden = attributes.HasFlag(FileAttributes.Hidden);
             isContainer = attributes.HasFlag(FileAttributes.Directory);
 
+            // FileInfo allows for a file path to end in a trailing slash, but the resulting object
+            // is incomplete.  A trailing slash should indicate a directory.  So if the path ends in a
+            // trailing slash and is not a directory, return null
+            if (!isContainer && path.EndsWith(Path.DirectorySeparatorChar))
+            {
+                return null;
+            }
+
             FlagsExpression<FileAttributes> evaluator = null;
             FlagsExpression<FileAttributes> switchEvaluator = null;
             GetChildDynamicParameters fspDynamicParam = DynamicParameters as GetChildDynamicParameters;
@@ -1469,6 +1347,7 @@ protected override void InvokeDefaultAction(string path)
             if (ShouldProcess(resource, action))
             {
                 var invokeProcess = new System.Diagnostics.Process();
+                // codeql[cs/microsoft/command-line-injection-shell-execution] - This is expected Poweshell behavior where user inputted paths are supported for the context of this method. The user assumes trust for the file path they are specifying. If there is concern for remoting, restricted remoting guidelines should be used.
                 invokeProcess.StartInfo.FileName = path;
 #if UNIX
                 bool useShellExecute = false;
@@ -1790,7 +1669,7 @@ private void Dir(
                 foreach (IEnumerable<FileSystemInfo> childList in target)
                 {
                     // On some systems, this is already sorted.  For consistency, always sort again.
-                    IEnumerable<FileSystemInfo> sortedChildList = childList.OrderBy(c => c.Name, StringComparer.CurrentCultureIgnoreCase);
+                    IEnumerable<FileSystemInfo> sortedChildList = childList.OrderBy(static c => c.Name, StringComparer.CurrentCultureIgnoreCase);
 
                     foreach (FileSystemInfo filesystemInfo in sortedChildList)
                     {
@@ -1899,9 +1778,14 @@ private void Dir(
                             }
 
                             bool hidden = false;
+                            bool checkReparsePoint = true;
                             if (!Force)
                             {
                                 hidden = (recursiveDirectory.Attributes & FileAttributes.Hidden) != 0;
+
+                                // We've already taken the expense of initializing the Attributes property here,
+                                // so we can use that to avoid needing to call IsReparsePointLikeSymlink() later.
+                                checkReparsePoint = recursiveDirectory.Attributes.HasFlag(FileAttributes.ReparsePoint);
                             }
 
                             // if "Hidden" is explicitly specified anywhere in the attribute filter, then override
@@ -1915,7 +1799,7 @@ private void Dir(
                                 //  c) it is not a reparse point with a target (not OneDrive or an AppX link).
                                 if (tracker == null)
                                 {
-                                    if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointWithTarget(recursiveDirectory))
+                                    if (checkReparsePoint && InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(recursiveDirectory))
                                     {
                                         continue;
                                     }
@@ -2042,15 +1926,16 @@ string ToModeString(FileSystemInfo fileSystemInfo)
                     }
                 }
 
-                bool isDirectory = fileAttributes.HasFlag(FileAttributes.Directory);
-                ReadOnlySpan<char> mode = stackalloc char[]
-                {
-                    isLink ? 'l' : isDirectory ? 'd' : '-',
+                ReadOnlySpan<char> mode =
+                [
+                    isLink ?
+                        'l' :
+                        fileAttributes.HasFlag(FileAttributes.Directory) ? 'd' : '-',
                     fileAttributes.HasFlag(FileAttributes.Archive) ? 'a' : '-',
                     fileAttributes.HasFlag(FileAttributes.ReadOnly) ? 'r' : '-',
                     fileAttributes.HasFlag(FileAttributes.Hidden) ? 'h' : '-',
                     fileAttributes.HasFlag(FileAttributes.System) ? 's' : '-',
-                };
+                ];
                 return new string(mode);
             }
 
@@ -2066,11 +1951,32 @@ string ToModeString(FileSystemInfo fileSystemInfo)
         /// <returns>Name if a file or directory, Name -> Target if symlink.</returns>
         public static string NameString(PSObject instance)
         {
-            return instance?.BaseObject is FileSystemInfo fileInfo
-                ? InternalSymbolicLinkLinkCodeMethods.IsReparsePointWithTarget(fileInfo)
-                    ? $"{fileInfo.Name} -> {InternalSymbolicLinkLinkCodeMethods.GetTarget(instance)}"
-                    : fileInfo.Name
-                : string.Empty;
+            if (instance?.BaseObject is FileSystemInfo fileInfo)
+            {
+                if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(fileInfo))
+                {
+                    return $"{PSStyle.Instance.FileInfo.SymbolicLink}{fileInfo.Name}{PSStyle.Instance.Reset} -> {fileInfo.LinkTarget}";
+                }
+                else if (fileInfo.Attributes.HasFlag(FileAttributes.Directory))
+                {
+                    return $"{PSStyle.Instance.FileInfo.Directory}{fileInfo.Name}{PSStyle.Instance.Reset}";
+                }
+                else if (PSStyle.Instance.FileInfo.Extension.ContainsKey(fileInfo.Extension))
+                {
+                    return $"{PSStyle.Instance.FileInfo.Extension[fileInfo.Extension]}{fileInfo.Name}{PSStyle.Instance.Reset}";
+                }
+                else if ((Platform.IsWindows && CommandDiscovery.PathExtensions.Contains(fileInfo.Extension.ToLower())) ||
+                    (!Platform.IsWindows && Platform.NonWindowsIsExecutable(fileInfo.FullName)))
+                {
+                    return $"{PSStyle.Instance.FileInfo.Executable}{fileInfo.Name}{PSStyle.Instance.Reset}";
+                }
+                else
+                {
+                    return fileInfo.Name;
+                }
+            }
+
+            return string.Empty;
         }
 
         /// <summary>
@@ -2095,7 +2001,7 @@ public static string LengthString(PSObject instance)
         public static string LastWriteTimeString(PSObject instance)
         {
             return instance?.BaseObject is FileSystemInfo fileInfo
-                ? string.Format(CultureInfo.CurrentCulture, "{0,10:d} {0,8:t}", fileInfo.LastWriteTime)
+                ? string.Create(CultureInfo.CurrentCulture, $"{fileInfo.LastWriteTime,10:d} {fileInfo.LastWriteTime,8:t}")
                 : string.Empty;
         }
 
@@ -2221,7 +2127,7 @@ protected override void RenameItem(
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "RenameItemIOError", ErrorCategory.WriteError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -2240,7 +2146,7 @@ protected override void RenameItem(
         /// <param name="path">
         /// The path of the file or directory to create.
         /// </param>
-        ///<param name="type">
+        /// <param name="type">
         /// Specify "file" to create a file.
         /// Specify "directory" or "container" to create a directory.
         /// </param>
@@ -2333,7 +2239,7 @@ protected override void NewItem(
                 }
                 catch (IOException exception)
                 {
-                    // IOException contains specific message about the error occured and so no need for errordetails.
+                    // IOException contains specific message about the error occurred and so no need for errordetails.
                     WriteError(new ErrorRecord(exception, "NewItemIOError", ErrorCategory.WriteError, path));
                 }
                 catch (UnauthorizedAccessException accessException)
@@ -2376,19 +2282,23 @@ protected override void NewItem(
                         {
                             exists = true;
 
-                            var normalizedTargetPath = strTargetPath;
-                            if (strTargetPath.StartsWith(".\\", StringComparison.OrdinalIgnoreCase) ||
-                                strTargetPath.StartsWith("./", StringComparison.OrdinalIgnoreCase))
-                            {
-                                normalizedTargetPath = Path.Join(SessionState.Internal.CurrentLocation.ProviderPath, strTargetPath.AsSpan(2));
-                            }
+                            // unify directory separators to be consistent with the rest of PowerShell even on non-Windows platforms;
+                            // do this before resolving the target, otherwise e.g. `.\test` would break on Linux, since the combined
+                            // path below would be something like `/path/to/cwd/.\test`
+                            strTargetPath = strTargetPath.Replace(StringLiterals.AlternatePathSeparator, StringLiterals.DefaultPathSeparator);
 
+                            // check if the target is a file or directory
+                            var normalizedTargetPath = Path.Combine(Path.GetDirectoryName(path), strTargetPath);
                             GetFileSystemInfo(normalizedTargetPath, out isDirectory);
-
-                            strTargetPath = strTargetPath.Replace(StringLiterals.AlternatePathSeparator, StringLiterals.DefaultPathSeparator);
                         }
                         else
                         {
+                            // for hardlinks we resolve the target to an absolute path
+                            if (!IsAbsolutePath(strTargetPath))
+                            {
+                                strTargetPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(strTargetPath);
+                            }
+
                             exists = GetFileSystemInfo(strTargetPath, out isDirectory) != null;
                         }
                     }
@@ -2431,6 +2341,13 @@ protected override void NewItem(
 
                     if (Force)
                     {
+                        if (itemType == ItemType.HardLink && string.Equals(path, strTargetPath, StringComparison.OrdinalIgnoreCase))
+                        {
+                            string message = StringUtil.Format(FileSystemProviderStrings.NewItemTargetIsSameAsLink, path);
+                            WriteError(new ErrorRecord(new InvalidOperationException(message), "TargetIsSameAsLink", ErrorCategory.InvalidOperation, path));
+                            return;
+                        }
+
                         try
                         {
                             if (!isSymLinkDirectory && symLinkExists)
@@ -2487,7 +2404,7 @@ protected override void NewItem(
 #if UNIX
                         success = Platform.NonWindowsCreateHardLink(path, strTargetPath);
 #else
-                        success = WinCreateHardLink(path, strTargetPath);
+                        success = Interop.Windows.CreateHardLink(path, strTargetPath, IntPtr.Zero);
 #endif
                     }
 
@@ -2554,6 +2471,13 @@ protected override void NewItem(
 
                     bool exists = false;
 
+                   // junctions require an absolute path
+                    if (!Path.IsPathRooted(strTargetPath))
+                    {
+                        WriteError(new ErrorRecord(new ArgumentException(FileSystemProviderStrings.JunctionAbsolutePath), "NotAbsolutePath", ErrorCategory.InvalidArgument, strTargetPath));
+                        return;
+                    }
+
                     try
                     {
                         exists = GetFileSystemInfo(strTargetPath, out isDirectory) != null;
@@ -2605,40 +2529,35 @@ protected override void NewItem(
                         }
 
                         // Junctions cannot have files
-                        if (DirectoryInfoHasChildItems((DirectoryInfo)pathDirInfo))
+                        if (!Force && DirectoryInfoHasChildItems((DirectoryInfo)pathDirInfo))
                         {
                             string message = StringUtil.Format(FileSystemProviderStrings.DirectoryNotEmpty, path);
                             WriteError(new ErrorRecord(new IOException(message), "DirectoryNotEmpty", ErrorCategory.WriteError, path));
                             return;
                         }
 
-                        if (Force)
+                        try
                         {
-                            try
+                            pathDirInfo.Delete();
+                        }
+                        catch (Exception exception)
+                        {
+                            if ((exception is DirectoryNotFoundException) ||
+                                (exception is UnauthorizedAccessException) ||
+                                (exception is System.Security.SecurityException) ||
+                                (exception is IOException))
                             {
-                                pathDirInfo.Delete();
+                                WriteError(new ErrorRecord(exception, "NewItemDeleteIOError", ErrorCategory.WriteError, path));
                             }
-                            catch (Exception exception)
+                            else
                             {
-                                if ((exception is DirectoryNotFoundException) ||
-                                    (exception is UnauthorizedAccessException) ||
-                                    (exception is System.Security.SecurityException) ||
-                                    (exception is IOException))
-                                {
-                                    WriteError(new ErrorRecord(exception, "NewItemDeleteIOError", ErrorCategory.WriteError, path));
-                                }
-                                else
-                                {
-                                    throw;
-                                }
+                                throw;
                             }
                         }
                     }
-                    else
-                    {
-                        CreateDirectory(path, false);
-                        pathDirInfo = new DirectoryInfo(path);
-                    }
+
+                    CreateDirectory(path, streamOutput: false);
+                    pathDirInfo = new DirectoryInfo(path);
 
                     try
                     {
@@ -2690,26 +2609,21 @@ protected override void NewItem(
             }
         }
 
+#if !UNIX
         private static bool WinCreateSymbolicLink(string path, string strTargetPath, bool isDirectory)
         {
             // The new AllowUnprivilegedCreate is only available on Win10 build 14972 or newer
-            var flags = isDirectory ? NativeMethods.SymbolicLinkFlags.Directory : NativeMethods.SymbolicLinkFlags.File;
+            var flags = isDirectory ? Interop.Windows.SymbolicLinkFlags.Directory : Interop.Windows.SymbolicLinkFlags.File;
 
-            Version minBuildOfDeveloperMode = new Version(10, 0, 14972, 0);
-            if (Environment.OSVersion.Version >= minBuildOfDeveloperMode)
+            if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 14972, 0))
             {
-                flags |= NativeMethods.SymbolicLinkFlags.AllowUnprivilegedCreate;
+                flags |= Interop.Windows.SymbolicLinkFlags.AllowUnprivilegedCreate;
             }
 
-            var created = NativeMethods.CreateSymbolicLink(path, strTargetPath, flags);
+            var created = Interop.Windows.CreateSymbolicLink(path, strTargetPath, flags);
             return created;
         }
-
-        private static bool WinCreateHardLink(string path, string strTargetPath)
-        {
-            bool success = NativeMethods.CreateHardLink(path, strTargetPath, IntPtr.Zero);
-            return success;
-        }
+#endif
 
         private static bool WinCreateJunction(string path, string strTargetPath)
         {
@@ -2776,12 +2690,6 @@ private void CreateDirectory(string path, bool streamOutput)
                 !string.IsNullOrEmpty(path),
                 "The caller should verify path");
 
-            // Get the parent path
-            string parentPath = GetParentPath(path, null);
-
-            // The directory name
-            string childName = GetChildName(path);
-
             ErrorRecord error = null;
             if (!Force && ItemExists(path, out error))
             {
@@ -2811,7 +2719,7 @@ private void CreateDirectory(string path, bool streamOutput)
 
                 if (ShouldProcess(resource, action))
                 {
-                    var result = Directory.CreateDirectory(Path.Combine(parentPath, childName));
+                    var result = Directory.CreateDirectory(path);
 
                     if (streamOutput)
                     {
@@ -2826,10 +2734,17 @@ private void CreateDirectory(string path, bool streamOutput)
             }
             catch (IOException ioException)
             {
-                // Ignore the error if force was specified
+#if UNIX
                 if (!Force)
+#else
+                // Windows error code for invalid characters in file or directory name
+                const int ERROR_INVALID_NAME = unchecked((int)0x8007007B);
+
+                // Do not suppress IOException on Windows if it has the specific HResult for invalid characters in directory name
+                if (ioException.HResult == ERROR_INVALID_NAME || !Force)
+#endif
                 {
-                    // IOException contains specific message about the error occured and so no need for errordetails.
+                    // IOException contains specific message about the error occurred and so no need for errordetails.
                     WriteError(new ErrorRecord(ioException, "CreateDirectoryIOError", ErrorCategory.WriteError, path));
                 }
             }
@@ -2904,7 +2819,7 @@ private bool CreateIntermediateDirectories(string path)
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "CreateIntermediateDirectoriesIOError", ErrorCategory.WriteError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -2983,6 +2898,19 @@ protected override void RemoveItem(string path, bool recurse)
                     return;
                 }
 
+                if (Context != null
+                    && Context.ExecutionContext.SessionState.PSVariable.Get(SpecialVariables.ProgressPreferenceVarPath.UserPath).Value is ActionPreference progressPreference
+                    && progressPreference == ActionPreference.Continue)
+                {
+                    {
+                        Task.Run(() =>
+                        {
+                            GetTotalFiles(path, recurse);
+                        });
+                        _removeStopwatch.Start();
+                    }
+                }
+
 #if UNIX
                 if (iscontainer)
                 {
@@ -3010,7 +2938,10 @@ protected override void RemoveItem(string path, bool recurse)
 
                             foreach (AlternateStreamData stream in AlternateDataStreamUtilities.GetStreams(fsinfo.FullName))
                             {
-                                if (!p.IsMatch(stream.Stream)) { continue; }
+                                if (!p.IsMatch(stream.Stream))
+                                {
+                                    continue;
+                                }
 
                                 foundStream = true;
 
@@ -3043,11 +2974,21 @@ protected override void RemoveItem(string path, bool recurse)
                         RemoveFileInfoItem((FileInfo)fsinfo, Force);
                     }
                 }
+
+                if (Stopping || _removedFiles == _totalFiles)
+                {
+                    _removeStopwatch.Stop();
+                    var progress = new ProgressRecord(REMOVE_FILE_ACTIVITY_ID, " ", " ")
+                    {
+                        RecordType = ProgressRecordType.Completed
+                    };
+                    WriteProgress(progress);
+                }
 #endif
             }
             catch (IOException exception)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(exception, "RemoveItemIOError", ErrorCategory.WriteError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -3107,22 +3048,31 @@ private void RemoveDirectoryInfoItem(DirectoryInfo directory, bool recurse, bool
                 continueRemoval = ShouldProcess(directory.FullName, action);
             }
 
-            if (directory.Attributes.HasFlag(FileAttributes.ReparsePoint))
+            if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(directory))
             {
+                void WriteErrorHelper(Exception exception)
+                {
+                    WriteError(new ErrorRecord(exception, errorId: "DeleteSymbolicLinkFailed", ErrorCategory.WriteError, directory));
+                }
+
                 try
                 {
-                    // TODO:
-                    // Different symlinks seem to vary by behavior.
-                    // In particular, OneDrive symlinks won't remove without recurse,
-                    // but the .NET API here does not allow us to distinguish them.
-                    // We may need to revisit using p/Invokes here to get the right behavior
-                    directory.Delete();
+                    if (InternalTestHooks.OneDriveTestOn)
+                    {
+                        WriteErrorHelper(new IOException());
+                        return;
+                    }
+                    else
+                    {
+                        // Name surrogates should just be detached.
+                        directory.Delete();
+                    }
                 }
                 catch (Exception e)
                 {
                     string error = StringUtil.Format(FileSystemProviderStrings.CannotRemoveItem, directory.FullName, e.Message);
                     var exception = new IOException(error, e);
-                    WriteError(new ErrorRecord(exception, errorId: "DeleteSymbolicLinkFailed", ErrorCategory.WriteError, directory));
+                    WriteErrorHelper(exception);
                 }
 
                 return;
@@ -3168,6 +3118,8 @@ private void RemoveDirectoryInfoItem(DirectoryInfo directory, bool recurse, bool
 
                     if (file != null)
                     {
+                        long fileBytesSize = file.Length;
+
                         if (recurse)
                         {
                             // When recurse is specified we need to confirm each
@@ -3180,6 +3132,25 @@ private void RemoveDirectoryInfoItem(DirectoryInfo directory, bool recurse, bool
                             // subitems without confirming with the user.
                             RemoveFileSystemItem(file, force);
                         }
+
+                        if (_totalFiles > 0)
+                        {
+                            _removedFiles++;
+                            _removedBytes += fileBytesSize;
+                            if (_removeStopwatch.Elapsed.TotalSeconds > ProgressBarDurationThreshold)
+                            {
+                                double speed = _removedBytes / 1024 / 1024 / _removeStopwatch.Elapsed.TotalSeconds;
+                                var progress = new ProgressRecord(
+                                    REMOVE_FILE_ACTIVITY_ID,
+                                    StringUtil.Format(FileSystemProviderStrings.RemovingLocalFileActivity, _removedFiles, _totalFiles),
+                                    StringUtil.Format(FileSystemProviderStrings.RemovingLocalBytesStatus, Utils.DisplayHumanReadableFileSize(_removedBytes), Utils.DisplayHumanReadableFileSize(_totalBytes), speed)
+                                );
+                                var percentComplete = _totalBytes != 0 ? (int)Math.Min(_removedBytes * 100 / _totalBytes, 100) : 100;
+                                progress.PercentComplete = percentComplete;
+                                progress.RecordType = ProgressRecordType.Processing;
+                                WriteProgress(progress);
+                            }
+                        }
                     }
                 }
 
@@ -3430,12 +3401,12 @@ private bool ItemExists(string path, out ErrorRecord error)
 
                     if (itemExistsDynamicParameters.OlderThan.HasValue)
                     {
-                        result = lastWriteTime < itemExistsDynamicParameters.OlderThan.Value;
+                        result &= lastWriteTime < itemExistsDynamicParameters.OlderThan.Value;
                     }
 
                     if (itemExistsDynamicParameters.NewerThan.HasValue)
                     {
-                        result = lastWriteTime > itemExistsDynamicParameters.NewerThan.Value;
+                        result &= lastWriteTime > itemExistsDynamicParameters.NewerThan.Value;
                     }
                 }
             }
@@ -3668,7 +3639,25 @@ protected override void CopyItem(
                 }
                 else // Copy-Item local
                 {
+                    if (Context != null && Context.ExecutionContext.SessionState.PSVariable.Get(SpecialVariables.ProgressPreferenceVarPath.UserPath).Value is ActionPreference progressPreference && progressPreference == ActionPreference.Continue)
+                    {
+                        {
+                            Task.Run(() =>
+                            {
+                                GetTotalFiles(path, recurse);
+                            });
+                            _copyStopwatch.Start();
+                        }
+                    }
+
                     CopyItemLocalOrToSession(path, destinationPath, recurse, Force, null);
+                    if (Stopping || _copiedFiles == _totalFiles)
+                    {
+                        _copyStopwatch.Stop();
+                        var progress = new ProgressRecord(COPY_FILE_ACTIVITY_ID, " ", " ");
+                        progress.RecordType = ProgressRecordType.Completed;
+                        WriteProgress(progress);
+                    }
                 }
             }
 
@@ -3676,27 +3665,68 @@ protected override void CopyItem(
             _excludeMatcher = null;
         }
 
-        private void CopyItemFromRemoteSession(string path, string destinationPath, bool recurse, bool force, PSSession fromSession)
+        private void GetTotalFiles(string path, bool recurse)
         {
-            using (System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create())
-            {
-                ps.Runspace = fromSession.Runspace;
-
-                InitializeFunctionPSCopyFileFromRemoteSession(ps);
+            bool isContainer = IsItemContainer(path);
 
-                try
+            try
+            {
+                if (isContainer)
                 {
-                    // get info on source
-                    ps.AddCommand(CopyFileRemoteUtils.PSCopyFromSessionHelperName);
-                    ps.AddParameter("getPathItems", path);
-
-                    Hashtable op = SafeInvokeCommand.Invoke(ps, this, null);
-                    if (op == null)
+                    var enumOptions = new EnumerationOptions()
                     {
-                        Exception e = new IOException(string.Format(CultureInfo.InvariantCulture, FileSystemProviderStrings.CopyItemRemotelyFailedToReadFile, path));
-                        WriteError(new ErrorRecord(e, "CopyItemRemotelyFailedToReadFile", ErrorCategory.WriteError, path));
-                        return;
-                    }
+                        IgnoreInaccessible = true,
+                        AttributesToSkip = 0,
+                        RecurseSubdirectories = recurse
+                    };
+
+                    var directory = new DirectoryInfo(path);
+                    foreach (var file in directory.EnumerateFiles("*", enumOptions))
+                    {
+                        if (!SessionStateUtilities.MatchesAnyWildcardPattern(file.Name, _excludeMatcher, defaultValue: false))
+                        {
+                            _totalFiles++;
+                            _totalBytes += file.Length;
+                        }
+                    }
+                }
+                else
+                {
+                    var file = new FileInfo(path);
+                    if (!SessionStateUtilities.MatchesAnyWildcardPattern(file.Name, _excludeMatcher, defaultValue: false))
+                    {
+                        _totalFiles++;
+                        _totalBytes += file.Length;
+                    }
+                }
+            }
+            catch
+            {
+                // ignore exception
+            }
+        }
+
+        private void CopyItemFromRemoteSession(string path, string destinationPath, bool recurse, bool force, PSSession fromSession)
+        {
+            using (System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create())
+            {
+                ps.Runspace = fromSession.Runspace;
+
+                InitializeFunctionPSCopyFileFromRemoteSession(ps);
+
+                try
+                {
+                    // get info on source
+                    ps.AddCommand(CopyFileRemoteUtils.PSCopyFromSessionHelperName);
+                    ps.AddParameter("getPathItems", path);
+
+                    Hashtable op = SafeInvokeCommand.Invoke(ps, this, null);
+                    if (op == null)
+                    {
+                        Exception e = new IOException(string.Format(CultureInfo.InvariantCulture, FileSystemProviderStrings.CopyItemRemotelyFailedToReadFile, path));
+                        WriteError(new ErrorRecord(e, "CopyItemRemotelyFailedToReadFile", ErrorCategory.WriteError, path));
+                        return;
+                    }
 
                     bool exists = (bool)(op["Exists"]);
                     if (!exists)
@@ -3887,7 +3917,7 @@ private void CopyDirectoryInfoItem(
                             }
                             catch (IOException ioException)
                             {
-                                // IOException contains specific message about the error occured and so no need for errordetails.
+                                // IOException contains specific message about the error occurred and so no need for errordetails.
                                 WriteError(new ErrorRecord(ioException, "CopyDirectoryInfoItemIOError", ErrorCategory.WriteError, file));
                             }
                             catch (UnauthorizedAccessException accessException)
@@ -3918,7 +3948,7 @@ private void CopyDirectoryInfoItem(
                             }
                             catch (IOException ioException)
                             {
-                                // IOException contains specific message about the error occured and so no need for errordetails.
+                                // IOException contains specific message about the error occurred and so no need for errordetails.
                                 WriteError(new ErrorRecord(ioException, "CopyDirectoryInfoItemIOError", ErrorCategory.WriteError, childDir));
                             }
                             catch (UnauthorizedAccessException accessException)
@@ -3984,6 +4014,25 @@ private void CopyFileInfoItem(FileInfo file, string destinationPath, bool force,
 
                             FileInfo result = new FileInfo(destinationPath);
                             WriteItemObject(result, destinationPath, false);
+
+                            if (_totalFiles > 0)
+                            {
+                                _copiedFiles++;
+                                _copiedBytes += file.Length;
+                                if (_copyStopwatch.Elapsed.TotalSeconds > ProgressBarDurationThreshold)
+                                {
+                                    double speed = (double)(_copiedBytes / 1024 / 1024) / _copyStopwatch.Elapsed.TotalSeconds;
+                                    var progress = new ProgressRecord(
+                                        COPY_FILE_ACTIVITY_ID,
+                                        StringUtil.Format(FileSystemProviderStrings.CopyingLocalFileActivity, _copiedFiles, _totalFiles),
+                                        StringUtil.Format(FileSystemProviderStrings.CopyingLocalBytesStatus, Utils.DisplayHumanReadableFileSize(_copiedBytes), Utils.DisplayHumanReadableFileSize(_totalBytes), speed)
+                                    );
+                                    var percentComplete = _totalBytes != 0 ? (int)Math.Min(_copiedBytes * 100 / _totalBytes, 100) : 100;
+                                    progress.PercentComplete = percentComplete;
+                                    progress.RecordType = ProgressRecordType.Processing;
+                                    WriteProgress(progress);
+                                }
+                            }
                         }
                         else
                         {
@@ -4424,7 +4473,7 @@ private bool PerformCopyFileFromRemoteSession(string sourceFileFullName, FileInf
                         }
                     }
 
-                    // To accomodate empty files
+                    // To accommodate empty files
                     string content = string.Empty;
                     if (op["b64Fragment"] != null)
                     {
@@ -4478,10 +4527,7 @@ private bool PerformCopyFileFromRemoteSession(string sourceFileFullName, FileInf
             }
             finally
             {
-                if (wStream != null)
-                {
-                    wStream.Dispose();
-                }
+                wStream?.Dispose();
 
                 // If copying the file from the remote session failed, then remove it.
                 if (errorWhileCopyRemoteFile && File.Exists(destinationFile.FullName))
@@ -4500,7 +4546,10 @@ private bool PerformCopyFileFromRemoteSession(string sourceFileFullName, FileInf
 
         private void InitializeFunctionsPSCopyFileToRemoteSession(System.Management.Automation.PowerShell ps)
         {
-            if ((ps == null) || !ValidRemoteSessionForScripting(ps.Runspace)) { return; }
+            if ((ps == null) || !ValidRemoteSessionForScripting(ps.Runspace))
+            {
+                return;
+            }
 
             ps.AddScript(CopyFileRemoteUtils.AllCopyToRemoteScripts);
             SafeInvokeCommand.Invoke(ps, this, null, false);
@@ -4508,7 +4557,10 @@ private void InitializeFunctionsPSCopyFileToRemoteSession(System.Management.Auto
 
         private void RemoveFunctionPSCopyFileToRemoteSession(System.Management.Automation.PowerShell ps)
         {
-            if ((ps == null) || !ValidRemoteSessionForScripting(ps.Runspace)) { return; }
+            if ((ps == null) || !ValidRemoteSessionForScripting(ps.Runspace))
+            {
+                return;
+            }
 
             const string remoteScript = @"
                 Microsoft.PowerShell.Management\Remove-Item function:PSCopyToSessionHelper -ea SilentlyContinue -Force
@@ -4761,10 +4813,7 @@ private bool CopyFileStreamToRemoteSession(FileInfo file, string destinationPath
             }
             finally
             {
-                if (fStream != null)
-                {
-                    fStream.Dispose();
-                }
+                fStream?.Dispose();
             }
 
             return success;
@@ -4914,6 +4963,17 @@ private bool PathIsReservedDeviceName(string destinationPath, string errorId)
             return pathIsReservedDeviceName;
         }
 
+        private long _totalFiles;
+        private long _totalBytes;
+        private long _copiedFiles;
+        private long _copiedBytes;
+        private readonly Stopwatch _copyStopwatch = new Stopwatch();
+
+        private long _removedBytes;
+        private long _removedFiles;
+        private readonly Stopwatch _removeStopwatch = new();
+
+        private const double ProgressBarDurationThreshold = 2.0;
         #endregion CopyItem
 
         #endregion ContainerCmdletProvider members
@@ -4945,30 +5005,30 @@ protected override string GetParentPath(string path, string root)
                 // make sure we return two backslashes so it still results in a UNC path
                 parentPath = "\\\\";
             }
+
+            if (!parentPath.EndsWith(StringLiterals.DefaultPathSeparator)
+                && Utils.PathIsDevicePath(parentPath)
+                && parentPath.Length - parentPath.Replace(StringLiterals.DefaultPathSeparatorString, string.Empty).Length == 3)
+            {
+                // Device paths start with either "\\.\" or "\\?\"
+                // When referring to the root, like: "\\.\CDROM0\" then it needs the trailing separator to be valid.
+                parentPath += StringLiterals.DefaultPathSeparator;
+            }
 #endif
+            s_tracer.WriteLine("GetParentPath returning '{0}'", parentPath);
             return parentPath;
         }
 
         // Note: we don't use IO.Path.IsPathRooted as this deals with "invalid" i.e. unnormalized paths
         private static bool IsAbsolutePath(string path)
         {
-            bool result = false;
-
             // check if we're on a single root filesystem and it's an absolute path
             if (LocationGlobber.IsSingleFileSystemAbsolutePath(path))
             {
                 return true;
             }
 
-            // Find the drive separator
-            int index = path.IndexOf(':');
-
-            if (index != -1)
-            {
-                result = true;
-            }
-
-            return result;
+            return path.Contains(':');
         }
 
         /// <summary>
@@ -5075,10 +5135,7 @@ protected override string NormalizeRelativePath(
                 throw PSTraceSource.NewArgumentException(nameof(path));
             }
 
-            if (basePath == null)
-            {
-                basePath = string.Empty;
-            }
+            basePath ??= string.Empty;
 
             s_tracer.WriteLine("basePath = {0}", basePath);
 
@@ -5145,7 +5202,7 @@ protected override string NormalizeRelativePath(
 #if UNIX
                             // We don't use the Directory.EnumerateFiles() for Unix because the path
                             // may contain additional globbing patterns such as '[ab]'
-                            // which Directory.EnumerateFiles() processes, giving undesireable
+                            // which Directory.EnumerateFiles() processes, giving undesirable
                             // results in this context.
                             if (!File.Exists(result) && !Directory.Exists(result))
                             {
@@ -5216,7 +5273,7 @@ protected override string NormalizeRelativePath(
                 }
                 catch (IOException ioError)
                 {
-                    // IOException contains specific message about the error occured and so no need for errordetails.
+                    // IOException contains specific message about the error occurred and so no need for errordetails.
                     WriteError(new ErrorRecord(ioError, "NormalizeRelativePathIOError", ErrorCategory.ReadError, path));
                     break;
                 }
@@ -5267,10 +5324,7 @@ private string NormalizeRelativePathHelper(string path, string basePath)
                 return string.Empty;
             }
 
-            if (basePath == null)
-            {
-                basePath = string.Empty;
-            }
+            basePath ??= string.Empty;
 
             s_tracer.WriteLine("basePath = {0}", basePath);
 
@@ -5813,6 +5867,17 @@ protected override void MoveItem(
                         destination = MakePath(destination, dir.Name);
                     }
 
+                    // Don't allow moving a directory into itself or its sub-directory.
+                    string pathWithoutEndingSeparator = Path.TrimEndingDirectorySeparator(path);
+                    if (destination.StartsWith(pathWithoutEndingSeparator + Path.DirectorySeparatorChar)
+                        || destination.Equals(pathWithoutEndingSeparator, StringComparison.OrdinalIgnoreCase))
+                    {
+                        string error = StringUtil.Format(FileSystemProviderStrings.TargetCannotBeSubdirectoryOfSource, destination);
+                        var e = new IOException(error);
+                        WriteError(new ErrorRecord(e, "MoveItemArgumentError", ErrorCategory.InvalidArgument, destination));
+                        return;
+                    }
+
                     // Get the confirmation text
                     string action = FileSystemProviderStrings.MoveItemActionDirectory;
 
@@ -5860,7 +5925,7 @@ protected override void MoveItem(
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "MoveItemIOError", ErrorCategory.WriteError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -5973,7 +6038,7 @@ private void MoveFileInfoItem(
                                 (exception is ArgumentNullException) ||
                                 (exception is IOException))
                             {
-                                // IOException contains specific message about the error occured and so no need for errordetails.
+                                // IOException contains specific message about the error occurred and so no need for errordetails.
                                 WriteError(new ErrorRecord(ioException, "MoveFileInfoItemIOError", ErrorCategory.WriteError, destfile));
                             }
                             else
@@ -5982,13 +6047,13 @@ private void MoveFileInfoItem(
                     }
                     else
                     {
-                        // IOException contains specific message about the error occured and so no need for errordetails.
+                        // IOException contains specific message about the error occurred and so no need for errordetails.
                         WriteError(new ErrorRecord(ioException, "MoveFileInfoItemIOError", ErrorCategory.WriteError, file));
                     }
                 }
                 else
                 {
-                    // IOException contains specific message about the error occured and so no need for errordetails.
+                    // IOException contains specific message about the error occurred and so no need for errordetails.
                     WriteError(new ErrorRecord(ioException, "MoveFileInfoItemIOError", ErrorCategory.WriteError, file));
                 }
             }
@@ -6059,7 +6124,7 @@ private void MoveDirectoryInfoItem(
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "MoveDirectoryItemIOError", ErrorCategory.WriteError, directory));
             }
         }
@@ -6078,12 +6143,21 @@ private void MoveDirectoryInfoUnchecked(DirectoryInfo directory, string destinat
             {
                 if (InternalTestHooks.ThrowExdevErrorOnMoveDirectory)
                 {
-                    throw new IOException("Invalid cross-device link", hresult: MOVE_FAILED_ERROR);
+                    throw new IOException("Invalid cross-device link");
                 }
 
                 directory.MoveTo(destinationPath);
             }
-            catch (IOException e) when (e.HResult == MOVE_FAILED_ERROR)
+#if UNIX
+            // This is the errno returned by the rename() syscall
+            // when an item is attempted to be renamed across filesystem mount boundaries.
+            // 0x80131620 is returned if the source and destination do not have the same root path
+            catch (IOException e) when (e.HResult == 18 || e.HResult == -2146232800)
+#else
+            // 0x80070005 ACCESS_DENIED is returned when trying to move files across volumes like DFS
+            // 0x80131620 is returned if the source and destination do not have the same root path
+            catch (IOException e) when (e.HResult == -2147024891 || e.HResult == -2146232800)
+#endif
             {
                 // Rather than try to ascertain whether we can rename a directory ahead of time,
                 // it's both faster and more correct to try to rename it and fall back to copy/deleting it
@@ -6189,10 +6263,7 @@ public void GetProperty(string path, Collection<string> providerSpecificPickList
                                     if (member != null)
                                     {
                                         value = member.Value;
-                                        if (result == null)
-                                        {
-                                            result = new PSObject();
-                                        }
+                                        result ??= new PSObject();
 
                                         result.Properties.Add(new PSNoteProperty(property, value));
                                     }
@@ -6221,7 +6292,7 @@ public void GetProperty(string path, Collection<string> providerSpecificPickList
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "GetPropertyIOError", ErrorCategory.ReadError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -6521,7 +6592,7 @@ public void ClearProperty(
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "ClearPropertyIOError", ErrorCategory.WriteError, path));
             }
         }
@@ -6576,7 +6647,7 @@ public IContentReader GetContentReader(string path)
 
             // Defaults for the file read operation
             string delimiter = "\n";
-            Encoding encoding = ClrFacade.GetDefaultEncoding();
+            Encoding encoding = Encoding.Default;
             bool waitForChanges = false;
 
             bool streamTypeSpecified = false;
@@ -6701,7 +6772,7 @@ public IContentReader GetContentReader(string path)
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "GetContentReaderIOError", ErrorCategory.ReadError, path));
             }
             catch (System.Security.SecurityException securityException)
@@ -6758,7 +6829,7 @@ public IContentWriter GetContentWriter(string path)
             // If this is true, then the content will be read as bytes
             bool usingByteEncoding = false;
             bool streamTypeSpecified = false;
-            Encoding encoding = ClrFacade.GetDefaultEncoding();
+            Encoding encoding = Encoding.Default;
             const FileMode filemode = FileMode.OpenOrCreate;
             string streamName = null;
             bool suppressNewline = false;
@@ -6841,7 +6912,7 @@ public IContentWriter GetContentWriter(string path)
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "GetContentWriterIOError", ErrorCategory.WriteError, path));
             }
             catch (System.Security.SecurityException securityException)
@@ -7007,7 +7078,7 @@ public void ClearContent(string path)
             }
             catch (IOException ioException)
             {
-                // IOException contains specific message about the error occured and so no need for errordetails.
+                // IOException contains specific message about the error occurred and so no need for errordetails.
                 WriteError(new ErrorRecord(ioException, "ClearContentIOError", ErrorCategory.WriteError, path));
             }
             catch (UnauthorizedAccessException accessException)
@@ -7111,134 +7182,35 @@ internal static bool PathIsNetworkPath(string path)
 #endif
         }
 
+#if !UNIX
+        /// <summary>
+        /// The API 'PathIsNetworkPath' is not available in CoreSystem.
+        /// This implementation is based on the 'PathIsNetworkPath' API.
+        /// </summary>
+        /// <param name="path">A file system path.</param>
+        /// <returns>True if the path is a network path.</returns>
         internal static bool WinPathIsNetworkPath(string path)
-        {
-            return NativeMethods.PathIsNetworkPath(path); // call the native method
-        }
-
-        private static class NativeMethods
-        {
-            /// <summary>
-            /// WNetAddConnection2 API makes a connection to a network resource
-            /// and can redirect a local device to the network resource.
-            /// This API simulates the "new Use" functionality used to connect to
-            /// network resource.
-            /// </summary>
-            /// <param name="netResource">
-            /// The netResource structure contains information
-            /// about a network resource.</param>
-            /// <param name="password">
-            /// The password used to get connected to network resource.
-            /// </param>
-            /// <param name="username">
-            /// The username used to get connected to network resource.
-            /// </param>
-            /// <param name="flags">
-            /// The flags parameter is used to indicate if the created network
-            /// resource has to be persisted or not.
-            /// </param>
-            /// <returns>If connection is established to the network resource
-            /// then success is returned or else the error code describing the
-            /// type of failure that occured while establishing
-            /// the connection is returned.</returns>
-            [DllImport("mpr.dll", CharSet = CharSet.Unicode)]
-            internal static extern int WNetAddConnection2(ref NetResource netResource, byte[] password, string username, int flags);
-
-            /// <summary>
-            /// WNetCancelConnection2 function cancels an existing network connection.
-            /// </summary>
-            /// <param name="driveName">
-            /// PSDrive Name.
-            /// </param>
-            /// <param name="flags">
-            /// Connection Type.
-            /// </param>
-            /// <param name="force">
-            /// Specifies whether the disconnection should occur if there are open files or jobs
-            /// on the connection. If this parameter is FALSE, the function fails
-            /// if there are open files or jobs.
-            /// </param>
-            /// <returns>If connection is removed then success is returned or
-            /// else the error code describing the type of failure that occured while
-            /// trying to remove the connection is returned.
-            /// </returns>
-            [DllImport("mpr.dll", CharSet = CharSet.Unicode)]
-            internal static extern int WNetCancelConnection2(string driveName, int flags, bool force);
-
-            /// <summary>
-            /// WNetGetConnection function retrieves the name of the network resource associated with a local device.
-            /// </summary>
-            /// <param name="localName">
-            /// Local name of the PSDrive.
-            /// </param>
-            /// <param name="remoteName">
-            /// The remote name to which the PSDrive is getting mapped to.
-            /// </param>
-            /// <param name="remoteNameLength">
-            /// length of the remote name of the created PSDrive.
-            /// </param>
-            /// <returns></returns>
-            [DllImport("mpr.dll", CharSet = CharSet.Unicode)]
-            internal static extern int WNetGetConnection(string localName, StringBuilder remoteName, ref int remoteNameLength);
-
-#if CORECLR // TODO:CORECLR Win32 function 'PathIsNetworkPath' is in an extension API set which is currently not on CSS.
-            /// <summary>
-            /// Searches a path for a drive letter within the range of 'A' to 'Z' and returns the corresponding drive number.
-            /// </summary>
-            /// <param name="path">
-            /// Path of the file being executed
-            /// </param>
-            /// <returns>Returns 0 through 25 (corresponding to 'A' through 'Z') if the path has a drive letter, or -1 otherwise.</returns>
-            [DllImport("api-ms-win-core-shlwapi-legacy-l1-1-0.dll", CharSet = CharSet.Unicode)]
-            internal static extern int PathGetDriveNumber(string path);
-
-            private static bool _WNetApiAvailable = true;
-
-            /// <summary>
-            /// The API 'PathIsNetworkPath' is not available in CoreSystem.
-            /// This implementation is based on the 'PathIsNetworkPath' API.
-            /// </summary>
-            /// <param name="path"></param>
-            /// <returns></returns>
-            internal static bool PathIsNetworkPath(string path)
             {
                 if (string.IsNullOrEmpty(path))
                 {
                     return false;
                 }
 
-                if (Utils.PathIsUnc(path))
+                if (Utils.PathIsUnc(path, networkOnly : true))
                 {
                     return true;
                 }
 
-                if (!_WNetApiAvailable)
-                {
-                    return false;
-                }
-
-                // 0 - 25 corresponding to 'A' - 'Z'
-                int driveId = PathGetDriveNumber(path);
-                if (driveId >= 0 && driveId < 26)
+                if (path.Length > 1 && path[1] == ':' && char.IsAsciiLetter(path[0]))
                 {
-                    string driveName = (char)('A' + driveId) + ":";
-
-                    int bufferSize = 260; // MAX_PATH from EhStorIoctl.h
-                    StringBuilder uncBuffer = new StringBuilder(bufferSize);
-                    int errorCode = -1;
-                    try
-                    {
-                        errorCode = WNetGetConnection(driveName, uncBuffer, ref bufferSize);
-                    }
-                    catch (System.DllNotFoundException)
-                    {
-                        _WNetApiAvailable = false;
-                        return false;
-                    }
+                    // path[0] is ASCII letter, e.g. is in 'A'-'Z' or 'a'-'z'.
+                    int errorCode = Interop.Windows.GetUNCForNetworkDrive(path[0], out string _);
 
                     // From the 'IsNetDrive' API.
                     // 0: success; 1201: connection closed; 31: device error
-                    if (errorCode == 0 || errorCode == 1201 || errorCode == 31)
+                    if (errorCode == Interop.Windows.ERROR_SUCCESS ||
+                        errorCode == Interop.Windows.ERROR_CONNECTION_UNAVAIL ||
+                        errorCode == Interop.Windows.ERROR_GEN_FAILURE)
                     {
                         return true;
                     }
@@ -7246,138 +7218,13 @@ internal static bool PathIsNetworkPath(string path)
 
                 return false;
             }
-#else
-            /// <summary>
-            /// Facilitates to validate if the supplied path exists locally or on the network share.
-            /// </summary>
-            /// <param name="path">
-            /// Path of the file being executed.
-            /// </param>
-            /// <returns>True if the path is a network path or else returns false.</returns>
-            [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
-            [return: MarshalAs(UnmanagedType.Bool)]
-            internal static extern bool PathIsNetworkPath(string path);
-#endif
-
-            /// <summary>
-            /// The function can obtain the current mapping for a particular MS-DOS device name.
-            ///
-            /// If lpDeviceName is non-NULL, the function retrieves information about the particular MS-DOS device specified by lpDeviceName.
-            /// The first null-terminated string stored into the buffer is the current mapping for the device.
-            /// The other null-terminated strings represent undeleted prior mappings for the device.
-            /// </summary>
-            /// <param name="lpDeviceName">
-            /// The particular MS-DOS device name.
-            /// </param>
-            /// <param name="lpTargetPath">
-            /// The buffer to receive the result of the query.
-            /// </param>
-            /// <param name="ucchMax">
-            /// The maximum number of characters that can be stored into the buffer
-            /// </param>
-            /// <returns></returns>
-            [DllImport(PinvokeDllNames.QueryDosDeviceDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-            internal static extern int QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax);
-
-            /// <summary>
-            /// Creates a symbolic link using the native API.
-            /// </summary>
-            /// <param name="name">Path of the symbolic link.</param>
-            /// <param name="destination">Path of the target of the symbolic link.</param>
-            /// <param name="symbolicLinkFlags">Flag values from SymbolicLinkFlags enum.</param>
-            /// <returns>1 on successful creation.</returns>
-            [DllImport(PinvokeDllNames.CreateSymbolicLinkDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-            [return: MarshalAs(UnmanagedType.I1)]
-            internal static extern bool CreateSymbolicLink(string name, string destination, SymbolicLinkFlags symbolicLinkFlags);
-
-            /// <summary>
-            /// Flags used when creating a symbolic link.
-            /// </summary>
-            [Flags]
-            internal enum SymbolicLinkFlags
-            {
-                /// <summary>
-                /// Symbolic link is a file.
-                /// </summary>
-                File = 0,
-
-                /// <summary>
-                /// Symbolic link is a directory.
-                /// </summary>
-                Directory = 1,
-
-                /// <summary>
-                /// Allow creation of symbolic link without elevation.  Requires Developer mode.
-                /// </summary>
-                AllowUnprivilegedCreate = 2,
-            }
-
-            /// <summary>
-            /// Creates a hard link using the native API.
-            /// </summary>
-            /// <param name="name">Name of the hard link.</param>
-            /// <param name="existingFileName">Path to the target of the hard link.</param>
-            /// <param name="SecurityAttributes"></param>
-            /// <returns></returns>
-            [DllImport(PinvokeDllNames.CreateHardLinkDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-            [return: MarshalAs(UnmanagedType.Bool)]
-            internal static extern bool CreateHardLink(string name, string existingFileName, IntPtr SecurityAttributes);
-
-            // OneDrive placeholder support
-#if !UNIX
-            /// <summary>
-            /// Returns the placeholder compatibility mode for the current process.
-            /// </summary>
-            /// <returns>The process's placeholder compatibily mode (PHCM_xxx), or a negative value on error (PCHM_ERROR_xxx).</returns>
-            [DllImport("ntdll.dll")]
-            internal static extern sbyte RtlQueryProcessPlaceholderCompatibilityMode();
-
-            /// <summary>
-            /// Sets the placeholder compatibility mode for the current process.
-            /// </summary>
-            /// <param name="pcm">The placeholder compatibility mode to set.</param>
-            /// <returns>The process's previous placeholder compatibily mode (PHCM_xxx), or a negative value on error (PCHM_ERROR_xxx).</returns>
-            [DllImport("ntdll.dll")]
-            internal static extern sbyte RtlSetProcessPlaceholderCompatibilityMode(sbyte pcm);
-
-            internal const sbyte PHCM_APPLICATION_DEFAULT = 0;
-            internal const sbyte PHCM_DISGUISE_PLACEHOLDER = 1;
-            internal const sbyte PHCM_EXPOSE_PLACEHOLDERS = 2;
-            internal const sbyte PHCM_MAX = 2;
-            internal const sbyte PHCM_ERROR_INVALID_PARAMETER = -1;
-            internal const sbyte PHCM_ERROR_NO_TEB = -2;
 #endif
-        }
-
-        /// <summary>
-        /// Managed equivalent of NETRESOURCE structure of WNet API.
-        /// </summary>
-        [StructLayout(LayoutKind.Sequential)]
-        private struct NetResource
-        {
-            public int Scope;
-            public int Type;
-            public int DisplayType;
-            public int Usage;
-
-            [MarshalAs(UnmanagedType.LPWStr)]
-            public string LocalName;
-
-            [MarshalAs(UnmanagedType.LPWStr)]
-            public string RemoteName;
-
-            [MarshalAs(UnmanagedType.LPWStr)]
-            public string Comment;
-
-            [MarshalAs(UnmanagedType.LPWStr)]
-            public string Provider;
-        }
 
         #region InodeTracker
         /// <summary>
         /// Tracks visited files/directories by caching their device IDs and inodes.
         /// </summary>
-        private class InodeTracker
+        private sealed class InodeTracker
         {
             private readonly HashSet<(UInt64, UInt64)> _visitations;
 
@@ -7526,7 +7373,7 @@ internal sealed class GetChildDynamicParameters
         /// Gets or sets the filter directory flag.
         /// </summary>
         [Parameter]
-        [Alias("ad", "d")]
+        [Alias("ad")]
         public SwitchParameter Directory
         {
             get { return _attributeDirectory; }
@@ -7610,8 +7457,8 @@ internal FileSystemContentDynamicParametersBase(FileSystemProvider provider)
         /// reading data from the file.
         /// </summary>
         [Parameter]
-        [ArgumentToEncodingTransformationAttribute()]
-        [ArgumentEncodingCompletionsAttribute]
+        [ArgumentToEncodingTransformation]
+        [ArgumentEncodingCompletions]
         [ValidateNotNullOrEmpty]
         public Encoding Encoding
         {
@@ -7623,7 +7470,7 @@ public Encoding Encoding
             set
             {
                 // Check for UTF-7 by checking for code page 65000
-                // See: https://docs.microsoft.com/en-us/dotnet/core/compatibility/corefx#utf-7-code-paths-are-obsolete
+                // See: https://learn.microsoft.com/dotnet/core/compatibility/corefx#utf-7-code-paths-are-obsolete
                 if (value != null && value.CodePage == 65000)
                 {
                     _provider.WriteWarning(PathUtilsStrings.Utf7EncodingObsolete);
@@ -7634,7 +7481,7 @@ public Encoding Encoding
             }
         }
 
-        private Encoding _encoding = ClrFacade.GetDefaultEncoding();
+        private Encoding _encoding = Encoding.Default;
 
         /// <summary>
         /// Return file contents as a byte stream or create file from a series of bytes.
@@ -7836,15 +7683,8 @@ public class FileSystemProviderRemoveItemDynamicParameters
     /// <summary>
     /// Class to find the symbolic link target.
     /// </summary>
-    public static class InternalSymbolicLinkLinkCodeMethods
+    public static partial class InternalSymbolicLinkLinkCodeMethods
     {
-        // This size comes from measuring the size of the header of REPARSE_GUID_DATA_BUFFER
-        private const int REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
-
-        // Maximum reparse buffer info size. The max user defined reparse
-        // data is 16KB, plus there's a header.
-        private const int MAX_REPARSE_SIZE = (16 * 1024) + REPARSE_GUID_DATA_BUFFER_HEADER_SIZE;
-
         private const int FSCTL_GET_REPARSE_POINT = 0x000900A8;
 
         private const int FSCTL_SET_REPARSE_POINT = 0x000900A4;
@@ -7859,62 +7699,6 @@ public static class InternalSymbolicLinkLinkCodeMethods
 
         private const string NonInterpretedPathPrefix = @"\??\";
 
-        private const int MAX_PATH = 260;
-
-        [Flags]
-        // dwDesiredAccess of CreateFile
-        internal enum FileDesiredAccess : uint
-        {
-            GenericZero = 0,
-            GenericRead = 0x80000000,
-            GenericWrite = 0x40000000,
-            GenericExecute = 0x20000000,
-            GenericAll = 0x10000000,
-        }
-
-        [Flags]
-        // dwShareMode of CreateFile
-        internal enum FileShareMode : uint
-        {
-            None = 0x00000000,
-            Read = 0x00000001,
-            Write = 0x00000002,
-            Delete = 0x00000004,
-        }
-
-        // dwCreationDisposition of CreateFile
-        internal enum FileCreationDisposition : uint
-        {
-            New = 1,
-            CreateAlways = 2,
-            OpenExisting = 3,
-            OpenAlways = 4,
-            TruncateExisting = 5,
-        }
-
-        [Flags]
-        // dwFlagsAndAttributes
-        internal enum FileAttributes : uint
-        {
-            Readonly = 0x00000001,
-            Hidden = 0x00000002,
-            System = 0x00000004,
-            Archive = 0x00000020,
-            Encrypted = 0x00004000,
-            Write_Through = 0x80000000,
-            Overlapped = 0x40000000,
-            NoBuffering = 0x20000000,
-            RandomAccess = 0x10000000,
-            SequentialScan = 0x08000000,
-            DeleteOnClose = 0x04000000,
-            BackupSemantics = 0x02000000,
-            PosixSemantics = 0x01000000,
-            OpenReparsePoint = 0x00200000,
-            OpenNoRecall = 0x00100000,
-            SessionAware = 0x00800000,
-            Normal = 0x00000080
-        }
-
         [StructLayout(LayoutKind.Sequential)]
         private struct REPARSE_DATA_BUFFER_SYMBOLICLINK
         {
@@ -7946,25 +7730,13 @@ private struct REPARSE_DATA_BUFFER_MOUNTPOINT
             public byte[] PathBuffer;
         }
 
-        [StructLayout(LayoutKind.Sequential)]
-        private struct REPARSE_DATA_BUFFER_APPEXECLINK
-        {
-            public uint ReparseTag;
-            public ushort ReparseDataLength;
-            public ushort Reserved;
-            public uint StringCount;
-
-            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x3FF0)]
-            public byte[] StringList;
-        }
-
         [StructLayout(LayoutKind.Sequential)]
         private struct BY_HANDLE_FILE_INFORMATION
         {
             public uint FileAttributes;
-            public System.Runtime.InteropServices.ComTypes.FILETIME CreationTime;
-            public System.Runtime.InteropServices.ComTypes.FILETIME LastAccessTime;
-            public System.Runtime.InteropServices.ComTypes.FILETIME LastWriteTime;
+            public FILE_TIME CreationTime;
+            public FILE_TIME LastAccessTime;
+            public FILE_TIME LastWriteTime;
             public uint VolumeSerialNumber;
             public uint FileSizeHigh;
             public uint FileSizeLow;
@@ -7973,113 +7745,58 @@ private struct BY_HANDLE_FILE_INFORMATION
             public uint FileIndexLow;
         }
 
-        [StructLayout(LayoutKind.Sequential)]
-        private struct GUID
+        internal struct FILE_TIME
         {
-            public uint Data1;
-            public ushort Data2;
-            public ushort Data3;
-
-            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
-            public char[] Data4;
+            public uint dwLowDateTime;
+            public uint dwHighDateTime;
         }
 
-        [StructLayout(LayoutKind.Sequential)]
-        private struct REPARSE_GUID_DATA_BUFFER
-        {
-            public uint ReparseTag;
-            public ushort ReparseDataLength;
-            public ushort Reserved;
-            public GUID ReparseGuid;
-
-            [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_REPARSE_SIZE)]
-            public char[] DataBuffer;
-        }
-
-        [DllImport(PinvokeDllNames.DeviceIoControlDllName, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
-        private static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
+        [LibraryImport(PinvokeDllNames.DeviceIoControlDllName, StringMarshalling = StringMarshalling.Utf16, SetLastError = true)]
+        [return: MarshalAs(UnmanagedType.Bool)]
+        private static partial bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
             IntPtr InBuffer, int nInBufferSize,
             IntPtr OutBuffer, int nOutBufferSize,
             out int pBytesReturned, IntPtr lpOverlapped);
 
-        [DllImport(PinvokeDllNames.GetFileInformationByHandleDllName, SetLastError = true, CharSet = CharSet.Unicode)]
+        [LibraryImport(PinvokeDllNames.GetFileInformationByHandleDllName)]
         [return: MarshalAs(UnmanagedType.Bool)]
-        private static extern bool GetFileInformationByHandle(
+        private static partial bool GetFileInformationByHandle(
                 IntPtr hFile,
                 out BY_HANDLE_FILE_INFORMATION lpFileInformation);
 
-        [DllImport(PinvokeDllNames.CreateFileDllName, SetLastError = true, CharSet = CharSet.Unicode)]
-        internal static extern IntPtr CreateFile(
-            string lpFileName,
-            FileDesiredAccess dwDesiredAccess,
-            FileShareMode dwShareMode,
-            IntPtr lpSecurityAttributes,
-            FileCreationDisposition dwCreationDisposition,
-            FileAttributes dwFlagsAndAttributes,
-            IntPtr hTemplateFile);
-
-        internal sealed class SafeFindHandle : SafeHandleZeroOrMinusOneIsInvalid
+        /// <summary>
+        /// Gets the target of the specified reparse point.
+        /// </summary>
+        /// <param name="instance">The object of FileInfo or DirectoryInfo type.</param>
+        /// <returns>The target of the reparse point.</returns>
+        [Obsolete("This method is now obsolete. Please use the .NET API 'FileSystemInfo.LinkTarget'", error: true)]
+        public static string GetTarget(PSObject instance)
         {
-            private SafeFindHandle() : base(true) { }
-
-            protected override bool ReleaseHandle()
+            if (instance.BaseObject is FileSystemInfo fileSysInfo)
             {
-                return FindClose(this.handle);
-            }
-
-            [DllImport(PinvokeDllNames.FindCloseDllName)]
-            [return: MarshalAs(UnmanagedType.Bool)]
-            private static extern bool FindClose(IntPtr handle);
-        }
-
-        // SetLastError is false as the use of this API doesn't not require GetLastError() to be called
-        [DllImport(PinvokeDllNames.FindFirstFileDllName, EntryPoint = "FindFirstFileExW", SetLastError = false, CharSet = CharSet.Unicode)]
-        private static extern SafeFindHandle FindFirstFileEx(string lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, ref WIN32_FIND_DATA lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, IntPtr lpSearchFilter, int dwAdditionalFlags);
-
-        internal enum FINDEX_INFO_LEVELS : uint
-        {
-            FindExInfoStandard = 0x0u,
-            FindExInfoBasic = 0x1u,
-            FindExInfoMaxInfoLevel = 0x2u,
-        }
+                if (!fileSysInfo.Exists)
+                {
+                    throw new ArgumentException(
+                        StringUtil.Format(SessionStateStrings.PathNotFound, fileSysInfo.FullName));
+                }
 
-        internal enum FINDEX_SEARCH_OPS : uint
-        {
-            FindExSearchNameMatch = 0x0u,
-            FindExSearchLimitToDirectories = 0x1u,
-            FindExSearchLimitToDevices = 0x2u,
-            FindExSearchMaxSearchOp = 0x3u,
-        }
+                return fileSysInfo.LinkTarget;
+            }
 
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
-        internal unsafe struct WIN32_FIND_DATA
-        {
-            internal uint dwFileAttributes;
-            internal System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
-            internal System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
-            internal System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
-            internal uint nFileSizeHigh;
-            internal uint nFileSizeLow;
-            internal uint dwReserved0;
-            internal uint dwReserved1;
-            internal fixed char cFileName[MAX_PATH];
-            internal fixed char cAlternateFileName[14];
+            return null;
         }
 
         /// <summary>
-        /// Gets the target of the specified reparse point.
+        /// Gets the target for a given file or directory, resolving symbolic links.
         /// </summary>
-        /// <param name="instance">The object of FileInfo or DirectoryInfo type.</param>
-        /// <returns>The target of the reparse point.</returns>
-        public static string GetTarget(PSObject instance)
+        /// <param name="instance">The FileInfo or DirectoryInfo type.</param>
+        /// <returns>The file path the instance points to.</returns>
+        public static string ResolvedTarget(PSObject instance)
         {
             if (instance.BaseObject is FileSystemInfo fileSysInfo)
             {
-#if !UNIX
-                return WinInternalGetTarget(fileSysInfo.FullName);
-#else
-               return UnixInternalGetTarget(fileSysInfo.FullName);
-#endif
+                FileSystemInfo linkTarget = fileSysInfo.ResolveLinkTarget(true);
+                return linkTarget is null ? fileSysInfo.FullName : linkTarget.FullName;
             }
 
             return null;
@@ -8102,45 +7819,24 @@ public static string GetLinkType(PSObject instance)
             return null;
         }
 
-#if UNIX
-        private static string UnixInternalGetTarget(string filePath)
-        {
-            string link = Platform.NonWindowsInternalGetTarget(filePath);
-
-            if (string.IsNullOrEmpty(link))
-            {
-                throw new Win32Exception(Marshal.GetLastWin32Error());
-            }
-
-            return link;
-        }
-#endif
-
         private static string InternalGetLinkType(FileSystemInfo fileInfo)
         {
-            if (Platform.IsWindows)
-            {
-                return WinInternalGetLinkType(fileInfo.FullName);
-            }
-            else
-            {
-                return Platform.NonWindowsInternalGetLinkType(fileInfo);
-            }
+#if UNIX
+            return Platform.NonWindowsInternalGetLinkType(fileInfo);
+#else
+            return WinInternalGetLinkType(fileInfo.FullName);
+#endif
         }
 
+#if !UNIX
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
         private static string WinInternalGetLinkType(string filePath)
         {
-            if (!Platform.IsWindows)
-            {
-                throw new PlatformNotSupportedException();
-            }
-
             // We set accessMode parameter to zero because documentation says:
             // If this parameter is zero, the application can query certain metadata
             // such as file, directory, or device attributes without accessing
             // that file or device, even if GENERIC_READ access would have been denied.
-            using (SafeFileHandle handle = OpenReparsePoint(filePath, FileDesiredAccess.GenericZero))
+            using (SafeFileHandle handle = WinOpenReparsePoint(filePath, (FileAccess)0))
             {
                 int outBufferSize = Marshal.SizeOf<REPARSE_DATA_BUFFER_SYMBOLICLINK>();
 
@@ -8172,7 +7868,7 @@ private static string WinInternalGetLinkType(string filePath)
                     if (!result)
                     {
                         // It's not a reparse point or the file system doesn't support reparse points.
-                        return IsHardLink(ref dangerousHandle) ? "HardLink" : null;
+                        return WinIsHardLink(ref dangerousHandle) ? "HardLink" : null;
                     }
 
                     REPARSE_DATA_BUFFER_SYMBOLICLINK reparseDataBuffer = Marshal.PtrToStructure<REPARSE_DATA_BUFFER_SYMBOLICLINK>(outBuffer);
@@ -8187,10 +7883,6 @@ private static string WinInternalGetLinkType(string filePath)
                             linkType = "Junction";
                             break;
 
-                        case IO_REPARSE_TAG_APPEXECLINK:
-                            linkType = "AppExeCLink";
-                            break;
-
                         default:
                             linkType = null;
                             break;
@@ -8209,13 +7901,28 @@ private static string WinInternalGetLinkType(string filePath)
                 }
             }
         }
+#endif
 
         internal static bool IsHardLink(FileSystemInfo fileInfo)
         {
 #if UNIX
             return Platform.NonWindowsIsHardLink(fileInfo);
 #else
-            return WinIsHardLink(fileInfo);
+            bool isHardLink = false;
+
+            // only check for hard link if the item is not directory
+            if ((fileInfo.Attributes & System.IO.FileAttributes.Directory) != System.IO.FileAttributes.Directory)
+            {
+                SafeFileHandle handle = Interop.Windows.CreateFileWithSafeFileHandle(fileInfo.FullName, FileAccess.Read, FileShare.Read, FileMode.Open, Interop.Windows.FileAttributes.Normal);
+
+                using (handle)
+                {
+                    var dangerousHandle = handle.DangerousGetHandle();
+                    isHardLink = InternalSymbolicLinkLinkCodeMethods.WinIsHardLink(ref dangerousHandle);
+                }
+            }
+
+            return isHardLink;
 #endif
         }
 
@@ -8224,65 +7931,49 @@ internal static bool IsReparsePoint(FileSystemInfo fileInfo)
             return fileInfo.Attributes.HasFlag(System.IO.FileAttributes.ReparsePoint);
         }
 
-        internal static bool IsReparsePointWithTarget(FileSystemInfo fileInfo)
+        internal static bool IsReparsePointLikeSymlink(FileSystemInfo fileInfo)
         {
-            if (!IsReparsePoint(fileInfo))
+#if UNIX
+            // Reparse point on Unix is a symlink.
+            return IsReparsePoint(fileInfo);
+#else
+            if (InternalTestHooks.OneDriveTestOn && fileInfo.Name == InternalTestHooks.OneDriveTestSymlinkName)
             {
-                return false;
+                return !InternalTestHooks.OneDriveTestRecurseOn;
             }
-#if !UNIX
-            // It is a reparse point and we should check some reparse point tags.
-            var data = new WIN32_FIND_DATA();
-            using (var handle = FindFirstFileEx(fileInfo.FullName, FINDEX_INFO_LEVELS.FindExInfoBasic, ref data, FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, 0))
+
+            Interop.Windows.WIN32_FIND_DATA data = default;
+            using (Interop.Windows.SafeFindHandle handle = Interop.Windows.FindFirstFile(fileInfo.FullName, ref data))
             {
-                // The name surrogate bit 0x20000000 is defined in https://docs.microsoft.com/windows/win32/fileio/reparse-point-tags
-                // Name surrogates (0x20000000) are reparse points that point to other named entities local to the filesystem
-                // (like symlinks and mount points).
-                // In the case of OneDrive, they are not name surrogates and would be safe to recurse into.
-                if (!handle.IsInvalid && (data.dwReserved0 & 0x20000000) == 0 && (data.dwReserved0 != IO_REPARSE_TAG_APPEXECLINK))
+                if (handle.IsInvalid)
                 {
-                    return false;
+                    // Our handle could be invalidated by something else touching the filesystem,
+                    // so ensure we deal with that possibility here
+                    int lastError = Marshal.GetLastWin32Error();
+                    throw new Win32Exception(lastError);
                 }
-            }
-#endif
-            return true;
-        }
-
-        internal static bool WinIsHardLink(FileSystemInfo fileInfo)
-        {
-            bool isHardLink = false;
-
-            // only check for hard link if the item is not directory
-            if ((fileInfo.Attributes & System.IO.FileAttributes.Directory) != System.IO.FileAttributes.Directory)
-            {
-                IntPtr nativeHandle = InternalSymbolicLinkLinkCodeMethods.CreateFile(
-                    fileInfo.FullName,
-                    InternalSymbolicLinkLinkCodeMethods.FileDesiredAccess.GenericRead,
-                    InternalSymbolicLinkLinkCodeMethods.FileShareMode.Read,
-                    IntPtr.Zero,
-                    InternalSymbolicLinkLinkCodeMethods.FileCreationDisposition.OpenExisting,
-                    InternalSymbolicLinkLinkCodeMethods.FileAttributes.Normal,
-                    IntPtr.Zero);
 
-                using (SafeFileHandle handle = new SafeFileHandle(nativeHandle, true))
+                // We already have the file attribute information from our Win32 call,
+                // so no need to take the expense of the FileInfo.FileAttributes call
+                const int FILE_ATTRIBUTE_REPARSE_POINT = 0x0400;
+                if ((data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
                 {
-                    bool success = false;
+                    // Not a reparse point.
+                    return false;
+                }
 
-                    try
-                    {
-                        handle.DangerousAddRef(ref success);
-                        IntPtr dangerousHandle = handle.DangerousGetHandle();
-                        isHardLink = InternalSymbolicLinkLinkCodeMethods.IsHardLink(ref dangerousHandle);
-                    }
-                    finally
-                    {
-                        if (success)
-                            handle.DangerousRelease();
-                    }
+                // The name surrogate bit 0x20000000 is defined in https://learn.microsoft.com/windows/win32/fileio/reparse-point-tags
+                // Name surrogates (0x20000000) are reparse points that point to other named entities local to the filesystem
+                // (like symlinks and mount points).
+                // In the case of OneDrive, they are not name surrogates and would be safe to recurse into.
+                if ((data.dwReserved0 & 0x20000000) == 0 && (data.dwReserved0 != IO_REPARSE_TAG_APPEXECLINK))
+                {
+                    return false;
                 }
             }
 
-            return isHardLink;
+            return true;
+#endif
         }
 
         internal static bool IsSameFileSystemItem(string pathOne, string pathTwo)
@@ -8297,13 +7988,10 @@ internal static bool IsSameFileSystemItem(string pathOne, string pathTwo)
 #if !UNIX
         private static bool WinIsSameFileSystemItem(string pathOne, string pathTwo)
         {
-            const FileAccess access = FileAccess.Read;
-            const FileShare share = FileShare.Read;
-            const FileMode creation = FileMode.Open;
-            const FileAttributes attributes = FileAttributes.BackupSemantics | FileAttributes.PosixSemantics;
+            const Interop.Windows.FileAttributes Attributes = Interop.Windows.FileAttributes.BackupSemantics | Interop.Windows.FileAttributes.PosixSemantics;
 
-            using (var sfOne = AlternateDataStreamUtilities.NativeMethods.CreateFile(pathOne, access, share, IntPtr.Zero, creation, (int)attributes, IntPtr.Zero))
-            using (var sfTwo = AlternateDataStreamUtilities.NativeMethods.CreateFile(pathTwo, access, share, IntPtr.Zero, creation, (int)attributes, IntPtr.Zero))
+            using (var sfOne = Interop.Windows.CreateFileWithSafeFileHandle(pathOne, FileAccess.Read, FileShare.Read, FileMode.Open, Attributes))
+            using (var sfTwo = Interop.Windows.CreateFileWithSafeFileHandle(pathTwo, FileAccess.Read, FileShare.Read, FileMode.Open, Attributes))
             {
                 if (!sfOne.IsInvalid && !sfTwo.IsInvalid)
                 {
@@ -8336,12 +8024,9 @@ internal static bool GetInodeData(string path, out System.ValueTuple<UInt64, UIn
 #if !UNIX
         private static bool WinGetInodeData(string path, out System.ValueTuple<UInt64, UInt64> inodeData)
         {
-            const FileAccess access = FileAccess.Read;
-            const FileShare share = FileShare.Read;
-            const FileMode creation = FileMode.Open;
-            const FileAttributes attributes = FileAttributes.BackupSemantics | FileAttributes.PosixSemantics;
+            const Interop.Windows.FileAttributes Attributes = Interop.Windows.FileAttributes.BackupSemantics | Interop.Windows.FileAttributes.PosixSemantics;
 
-            using (var sf = AlternateDataStreamUtilities.NativeMethods.CreateFile(path, access, share, IntPtr.Zero, creation, (int)attributes, IntPtr.Zero))
+            using (var sf = Interop.Windows.CreateFileWithSafeFileHandle(path, FileAccess.Read, FileShare.Read, FileMode.Open, Attributes))
             {
                 if (!sf.IsInvalid)
                 {
@@ -8360,17 +8045,10 @@ private static bool WinGetInodeData(string path, out System.ValueTuple<UInt64, U
             }
 
             inodeData = (0, 0);
+
             return false;
         }
 #endif
-        internal static bool IsHardLink(ref IntPtr handle)
-        {
-#if UNIX
-            return Platform.NonWindowsIsHardLink(ref handle);
-#else
-            return WinIsHardLink(ref handle);
-#endif
-        }
 
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
         internal static bool WinIsHardLink(ref IntPtr handle)
@@ -8380,205 +8058,82 @@ internal static bool WinIsHardLink(ref IntPtr handle)
             return succeeded && (handleInfo.NumberOfLinks > 1);
         }
 
-#if !UNIX
-        internal static string WinInternalGetTarget(string path)
-        {
-            // We set accessMode parameter to zero because documentation says:
-            // If this parameter is zero, the application can query certain metadata
-            // such as file, directory, or device attributes without accessing
-            // that file or device, even if GENERIC_READ access would have been denied.
-            using (SafeFileHandle handle = OpenReparsePoint(path, FileDesiredAccess.GenericZero))
-            {
-                return WinInternalGetTarget(handle);
-            }
-        }
-
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
-        private static string WinInternalGetTarget(SafeFileHandle handle)
+        internal static bool CreateJunction(string path, string target)
         {
-            int outBufferSize = Marshal.SizeOf<REPARSE_DATA_BUFFER_SYMBOLICLINK>();
-
-            IntPtr outBuffer = Marshal.AllocHGlobal(outBufferSize);
-            bool success = false;
+#if UNIX
+            return false;
+#else
+            ArgumentException.ThrowIfNullOrEmpty(path);
+            ArgumentException.ThrowIfNullOrEmpty(target);
 
-            try
+            using (SafeHandle handle = WinOpenReparsePoint(path, FileAccess.Write))
             {
-                int bytesReturned;
+                byte[] mountPointBytes = Encoding.Unicode.GetBytes(NonInterpretedPathPrefix + Path.GetFullPath(target));
 
-                // OACR warning 62001 about using DeviceIOControl has been disabled.
-                // According to MSDN guidance DangerousAddRef() and DangerousRelease() have been used.
-                handle.DangerousAddRef(ref success);
+                var mountPoint = new REPARSE_DATA_BUFFER_MOUNTPOINT();
+                mountPoint.ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
+                mountPoint.ReparseDataLength = (ushort)(mountPointBytes.Length + 12); // Added space for the header and null endo
+                mountPoint.SubstituteNameOffset = 0;
+                mountPoint.SubstituteNameLength = (ushort)mountPointBytes.Length;
+                mountPoint.PrintNameOffset = (ushort)(mountPointBytes.Length + 2); // 2 as unicode null take 2 bytes.
+                mountPoint.PrintNameLength = 0;
+                mountPoint.PathBuffer = new byte[0x3FF0]; // Buffer for max size.
+                Array.Copy(mountPointBytes, mountPoint.PathBuffer, mountPointBytes.Length);
 
-                bool result = DeviceIoControl(
-                    handle.DangerousGetHandle(),
-                    FSCTL_GET_REPARSE_POINT,
-                    InBuffer: IntPtr.Zero,
-                    nInBufferSize: 0,
-                    outBuffer,
-                    outBufferSize,
-                    out bytesReturned,
-                    lpOverlapped: IntPtr.Zero);
+                int nativeBufferSize = Marshal.SizeOf(mountPoint);
+                IntPtr nativeBuffer = Marshal.AllocHGlobal(nativeBufferSize);
+                bool success = false;
 
-                if (!result)
+                try
                 {
-                    // It's not a reparse point or the file system doesn't support reparse points.
-                    return null;
-                }
-
-                string targetDir = null;
+                    Marshal.StructureToPtr(mountPoint, nativeBuffer, false);
 
-                REPARSE_DATA_BUFFER_SYMBOLICLINK reparseDataBuffer = Marshal.PtrToStructure<REPARSE_DATA_BUFFER_SYMBOLICLINK>(outBuffer);
+                    int bytesReturned = 0;
 
-                switch (reparseDataBuffer.ReparseTag)
-                {
-                    case IO_REPARSE_TAG_SYMLINK:
-                        targetDir = Encoding.Unicode.GetString(reparseDataBuffer.PathBuffer, reparseDataBuffer.SubstituteNameOffset, reparseDataBuffer.SubstituteNameLength);
-                        break;
-
-                    case IO_REPARSE_TAG_MOUNT_POINT:
-                        REPARSE_DATA_BUFFER_MOUNTPOINT reparseMountPointDataBuffer = Marshal.PtrToStructure<REPARSE_DATA_BUFFER_MOUNTPOINT>(outBuffer);
-                        targetDir = Encoding.Unicode.GetString(reparseMountPointDataBuffer.PathBuffer, reparseMountPointDataBuffer.SubstituteNameOffset, reparseMountPointDataBuffer.SubstituteNameLength);
-                        break;
+                    // OACR warning 62001 about using DeviceIOControl has been disabled.
+                    // According to MSDN guidance DangerousAddRef() and DangerousRelease() have been used.
+                    handle.DangerousAddRef(ref success);
 
-                    case IO_REPARSE_TAG_APPEXECLINK:
-                        REPARSE_DATA_BUFFER_APPEXECLINK reparseAppExeDataBuffer = Marshal.PtrToStructure<REPARSE_DATA_BUFFER_APPEXECLINK>(outBuffer);
-                        // The target file is at index 2
-                        if (reparseAppExeDataBuffer.StringCount >= 3)
-                        {
-                            string temp = Encoding.Unicode.GetString(reparseAppExeDataBuffer.StringList);
-                            targetDir = temp.Split('\0')[2];
-                        }
-                        break;
+                    bool result = DeviceIoControl(handle.DangerousGetHandle(), FSCTL_SET_REPARSE_POINT, nativeBuffer, mountPointBytes.Length + 20, IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero);
 
-                    default:
-                        return null;
-                }
+                    if (!result)
+                    {
+                        throw new Win32Exception(Marshal.GetLastWin32Error());
+                    }
 
-                if (targetDir != null && targetDir.StartsWith(NonInterpretedPathPrefix, StringComparison.OrdinalIgnoreCase))
-                {
-                    targetDir = targetDir.Substring(NonInterpretedPathPrefix.Length);
+                    return result;
                 }
-
-                return targetDir;
-            }
-            finally
-            {
-                if (success)
+                finally
                 {
-                    handle.DangerousRelease();
-                }
-
-                Marshal.FreeHGlobal(outBuffer);
-            }
-        }
-#endif
-
-        internal static bool CreateJunction(string path, string target)
-        {
-            // this is a purely Windows specific feature, no feature flag
-            // used for that reason
-            if (Platform.IsWindows)
-            {
-                return WinCreateJunction(path, target);
-            }
-            else
-            {
-                return false;
-            }
-        }
+                    Marshal.FreeHGlobal(nativeBuffer);
 
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
-        private static bool WinCreateJunction(string path, string target)
-        {
-            if (!string.IsNullOrEmpty(path))
-            {
-                if (!string.IsNullOrEmpty(target))
-                {
-                    using (SafeHandle handle = OpenReparsePoint(path, FileDesiredAccess.GenericWrite))
+                    if (success)
                     {
-                        byte[] mountPointBytes = Encoding.Unicode.GetBytes(NonInterpretedPathPrefix + Path.GetFullPath(target));
-
-                        REPARSE_DATA_BUFFER_MOUNTPOINT mountPoint = new REPARSE_DATA_BUFFER_MOUNTPOINT();
-                        mountPoint.ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
-                        mountPoint.ReparseDataLength = (ushort)(mountPointBytes.Length + 12); // Added space for the header and null endo
-                        mountPoint.SubstituteNameOffset = 0;
-                        mountPoint.SubstituteNameLength = (ushort)mountPointBytes.Length;
-                        mountPoint.PrintNameOffset = (ushort)(mountPointBytes.Length + 2); // 2 as unicode null take 2 bytes.
-                        mountPoint.PrintNameLength = 0;
-                        mountPoint.PathBuffer = new byte[0x3FF0]; // Buffer for max size.
-                        Array.Copy(mountPointBytes, mountPoint.PathBuffer, mountPointBytes.Length);
-
-                        int nativeBufferSize = Marshal.SizeOf(mountPoint);
-                        IntPtr nativeBuffer = Marshal.AllocHGlobal(nativeBufferSize);
-                        bool success = false;
-
-                        try
-                        {
-                            Marshal.StructureToPtr(mountPoint, nativeBuffer, false);
-
-                            int bytesReturned = 0;
-
-                            // OACR warning 62001 about using DeviceIOControl has been disabled.
-                            // According to MSDN guidance DangerousAddRef() and DangerousRelease() have been used.
-                            handle.DangerousAddRef(ref success);
-
-                            bool result = DeviceIoControl(handle.DangerousGetHandle(), FSCTL_SET_REPARSE_POINT, nativeBuffer, mountPointBytes.Length + 20, IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero);
-
-                            if (!result)
-                            {
-                                throw new Win32Exception(Marshal.GetLastWin32Error());
-                            }
-
-                            return result;
-                        }
-                        finally
-                        {
-                            Marshal.FreeHGlobal(nativeBuffer);
-
-                            if (success)
-                            {
-                                handle.DangerousRelease();
-                            }
-                        }
+                        handle.DangerousRelease();
                     }
                 }
-                else
-                {
-                    throw new ArgumentNullException(nameof(target));
-                }
-            }
-            else
-            {
-                throw new ArgumentNullException(nameof(path));
             }
-        }
-
-        private static SafeFileHandle OpenReparsePoint(string reparsePoint, FileDesiredAccess accessMode)
-        {
-#if UNIX
-            throw new PlatformNotSupportedException();
-#else
-            return WinOpenReparsePoint(reparsePoint, accessMode);
 #endif
         }
 
-        private static SafeFileHandle WinOpenReparsePoint(string reparsePoint, FileDesiredAccess accessMode)
+#if !UNIX
+        private static SafeFileHandle WinOpenReparsePoint(string reparsePoint, FileAccess accessMode)
         {
-            IntPtr nativeHandle = CreateFile(reparsePoint, accessMode,
-                FileShareMode.Read | FileShareMode.Write | FileShareMode.Delete,
-                IntPtr.Zero, FileCreationDisposition.OpenExisting,
-                FileAttributes.BackupSemantics | FileAttributes.OpenReparsePoint,
-                IntPtr.Zero);
+            const Interop.Windows.FileAttributes Attributes = Interop.Windows.FileAttributes.BackupSemantics | Interop.Windows.FileAttributes.OpenReparsePoint;
 
-            int lastError = Marshal.GetLastWin32Error();
+            SafeFileHandle reparsePointHandle = Interop.Windows.CreateFileWithSafeFileHandle(reparsePoint, accessMode, FileShare.ReadWrite | FileShare.Delete, FileMode.Open, Attributes);
 
-            if (lastError != 0)
+            if (reparsePointHandle.IsInvalid)
+            {
+                // Save last error since Dispose() will do another pinvoke.
+                int lastError = Marshal.GetLastPInvokeError();
+                reparsePointHandle.Dispose();
                 throw new Win32Exception(lastError);
-
-            SafeFileHandle reparsePointHandle = new SafeFileHandle(nativeHandle, true);
+            }
 
             return reparsePointHandle;
         }
+#endif
     }
 
     #endregion
@@ -8615,7 +8170,7 @@ public class AlternateStreamData
     /// </summary>
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes",
         Justification = "Needed by both the FileSystem provider and Unblock-File cmdlet.")]
-    public static class AlternateDataStreamUtilities
+    public static partial class AlternateDataStreamUtilities
     {
         /// <summary>
         /// List all of the streams on a file.
@@ -8624,7 +8179,7 @@ public static class AlternateDataStreamUtilities
         /// <returns>The list of streams (and their size) in the file.</returns>
         internal static List<AlternateStreamData> GetStreams(string path)
         {
-            if (path == null) throw new ArgumentNullException(nameof(path));
+            ArgumentNullException.ThrowIfNull(path);
 
             List<AlternateStreamData> alternateStreams = new List<AlternateStreamData>();
 
@@ -8640,7 +8195,10 @@ internal static List<AlternateStreamData> GetStreams(string path)
 
                 // Directories don't normally have alternate streams, so this is not an exceptional state.
                 // If a directory has no alternate data streams, FindFirstStreamW returns ERROR_HANDLE_EOF.
-                if (error == NativeMethods.ERROR_HANDLE_EOF)
+                // If the file system (such as FAT32) does not support alternate streams, then
+                // ERROR_INVALID_PARAMETER is returned by FindFirstStreamW. See documentation:
+                // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirststreamw
+                if (error == NativeMethods.ERROR_HANDLE_EOF || error == NativeMethods.ERROR_INVALID_PARAMETER)
                 {
                     return alternateStreams;
                 }
@@ -8667,8 +8225,7 @@ internal static List<AlternateStreamData> GetStreams(string path)
                     AlternateStreamData data = new AlternateStreamData();
                     data.Stream = findStreamData.Name;
                     data.Length = findStreamData.Length;
-                    data.FileName = path.Replace(data.Stream, string.Empty);
-                    data.FileName = data.FileName.Trim(Utils.Separators.Colon);
+                    data.FileName = path;
 
                     alternateStreams.Add(data);
                     findStreamData = new AlternateStreamNativeData();
@@ -8677,7 +8234,9 @@ internal static List<AlternateStreamData> GetStreams(string path)
 
                 int lastError = Marshal.GetLastWin32Error();
                 if (lastError != NativeMethods.ERROR_HANDLE_EOF)
+                {
                     throw new Win32Exception(lastError);
+                }
             }
             finally { handle.Dispose(); }
 
@@ -8717,15 +8276,9 @@ internal static FileStream CreateFileStream(string path, string streamName, File
         /// <returns>True if the stream was successfully created, otherwise false.</returns>
         internal static bool TryCreateFileStream(string path, string streamName, FileMode mode, FileAccess access, FileShare share, out FileStream stream)
         {
-            if (path == null)
-            {
-                throw new ArgumentNullException(nameof(path));
-            }
+            ArgumentNullException.ThrowIfNull(path);
 
-            if (streamName == null)
-            {
-                throw new ArgumentNullException(nameof(streamName));
-            }
+            ArgumentNullException.ThrowIfNull(streamName);
 
             if (mode == FileMode.Append)
             {
@@ -8752,11 +8305,12 @@ internal static bool TryCreateFileStream(string path, string streamName, FileMod
         /// <param name="streamName">The name of the alternate data stream to delete.</param>
         internal static void DeleteFileStream(string path, string streamName)
         {
-            if (path == null) throw new ArgumentNullException(nameof(path));
-            if (streamName == null) throw new ArgumentNullException(nameof(streamName));
+            ArgumentNullException.ThrowIfNull(path);
+
+            ArgumentNullException.ThrowIfNull(streamName);
 
             string adjustedStreamName = streamName.Trim();
-            if (adjustedStreamName.IndexOf(':') != 0)
+            if (!adjustedStreamName.StartsWith(':'))
             {
                 adjustedStreamName = ":" + adjustedStreamName;
             }
@@ -8780,15 +8334,15 @@ internal static void SetZoneOfOrigin(string path, SecurityZone securityZone)
             // the code above seems cleaner and more robust than the IAttachmentExecute approach
         }
 
-        internal static class NativeMethods
+        internal static partial class NativeMethods
         {
             internal const int ERROR_HANDLE_EOF = 38;
             internal const int ERROR_INVALID_PARAMETER = 87;
 
             internal enum StreamInfoLevels { FindStreamInfoStandard = 0 }
 
-            [DllImport(PinvokeDllNames.CreateFileDllName, CharSet = CharSet.Unicode, SetLastError = true)]
-            internal static extern SafeFileHandle CreateFile(string lpFileName,
+            [LibraryImport(PinvokeDllNames.CreateFileDllName, EntryPoint = "CreateFileW", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)]
+            internal static partial SafeFileHandle CreateFile(string lpFileName,
                 FileAccess dwDesiredAccess, FileShare dwShareMode,
                 IntPtr lpSecurityAttributes, FileMode dwCreationDisposition,
                 int dwFlagsAndAttributes, IntPtr hTemplateFile);
@@ -8809,7 +8363,7 @@ internal static extern bool FindNextStreamW(
                 AlternateStreamNativeData lpFindStreamData);
         }
 
-        internal sealed class SafeFindHandle : SafeHandleZeroOrMinusOneIsInvalid
+        internal sealed partial class SafeFindHandle : SafeHandleZeroOrMinusOneIsInvalid
         {
             private SafeFindHandle() : base(true) { }
 
@@ -8818,9 +8372,9 @@ protected override bool ReleaseHandle()
                 return FindClose(this.handle);
             }
 
-            [DllImport(PinvokeDllNames.FindCloseDllName)]
+            [LibraryImport(PinvokeDllNames.FindCloseDllName)]
             [return: MarshalAs(UnmanagedType.Bool)]
-            private static extern bool FindClose(IntPtr handle);
+            private static partial bool FindClose(IntPtr handle);
         }
 
         /// <summary>
@@ -9211,7 +8765,7 @@ function PSRemoteDestinationPathIsFile
 
         # Return a hash table in the following format:
         #      DirectoryPath is the directory to be created.
-        #      PathExists is a bool to to keep track of whether the directory already exist.
+        #      PathExists is a bool to keep track of whether the directory already exist.
         #
         # 1) If DirectoryPath already exists:
         #     a) If -Force is specified, force create the directory. Set DirectoryPath to the created directory path.
diff --git a/src/System.Management.Automation/namespaces/FileSystemSecurity.cs b/src/System.Management.Automation/namespaces/FileSystemSecurity.cs
index 97ab38158ae..9af94c2d604 100644
--- a/src/System.Management.Automation/namespaces/FileSystemSecurity.cs
+++ b/src/System.Management.Automation/namespaces/FileSystemSecurity.cs
@@ -141,7 +141,7 @@ public void SetSecurityDescriptor(
                 // the solution is to:
                 //
                 //     - First attempt to copy the entire security descriptor as we did in V1.
-                //       This ensures backward compatability for administrator scripts that currently
+                //       This ensures backward compatibility for administrator scripts that currently
                 //       work.
                 //     - If the attempt fails due to a PrivilegeNotHeld exception, try again with
                 //       an estimate of the minimum required subset. This is an estimate, since the
@@ -168,13 +168,15 @@ public void SetSecurityDescriptor(
                 {
                     // Get the security descriptor of the destination path
                     ObjectSecurity existingDescriptor = new FileInfo(path).GetAccessControl();
-                    Type ntAccountType = typeof(System.Security.Principal.NTAccount);
+                    // Use SecurityIdentifier to avoid having the below comparison steps
+                    // fail when dealing with an untranslatable SID in the SD
+                    Type identityType = typeof(System.Security.Principal.SecurityIdentifier);
 
                     AccessControlSections sections = AccessControlSections.All;
 
                     // If they didn't modify any audit information, don't try to set
                     // the audit section.
-                    int auditRuleCount = sd.GetAuditRules(true, true, ntAccountType).Count;
+                    int auditRuleCount = sd.GetAuditRules(true, true, identityType).Count;
                     if ((auditRuleCount == 0) &&
                         (sd.AreAuditRulesProtected == existingDescriptor.AreAccessRulesProtected))
                     {
@@ -182,13 +184,13 @@ public void SetSecurityDescriptor(
                     }
 
                     // If they didn't modify the owner, don't try to set that section.
-                    if (sd.GetOwner(ntAccountType) == existingDescriptor.GetOwner(ntAccountType))
+                    if (sd.GetOwner(identityType) == existingDescriptor.GetOwner(identityType))
                     {
                         sections &= ~AccessControlSections.Owner;
                     }
 
                     // If they didn't modify the group, don't try to set that section.
-                    if (sd.GetGroup(ntAccountType) == existingDescriptor.GetGroup(ntAccountType))
+                    if (sd.GetGroup(identityType) == existingDescriptor.GetGroup(identityType))
                     {
                         sections &= ~AccessControlSections.Group;
                     }
@@ -222,7 +224,7 @@ private void SetSecurityDescriptor(string path, ObjectSecurity sd, AccessControl
 
                 // Transfer it to the new file / directory.
                 // We keep these two code branches so that we can have more
-                // granular information when we ouput the object type via
+                // granular information when we output the object type via
                 // WriteSecurityDescriptorObject.
                 if (Directory.Exists(path))
                 {
diff --git a/src/System.Management.Automation/namespaces/IContentReader.cs b/src/System.Management.Automation/namespaces/IContentReader.cs
index 233d89b9b40..6046fee73ed 100644
--- a/src/System.Management.Automation/namespaces/IContentReader.cs
+++ b/src/System.Management.Automation/namespaces/IContentReader.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.IO;
 
+#nullable enable
 namespace System.Management.Automation.Provider
 {
     #region IContentReader
diff --git a/src/System.Management.Automation/namespaces/IPermissionProvider.cs b/src/System.Management.Automation/namespaces/IPermissionProvider.cs
index 13b41261a19..c4f548e08a7 100644
--- a/src/System.Management.Automation/namespaces/IPermissionProvider.cs
+++ b/src/System.Management.Automation/namespaces/IPermissionProvider.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+#nullable enable
 using System.Security.AccessControl;
 
 namespace System.Management.Automation.Provider
diff --git a/src/System.Management.Automation/namespaces/ItemProviderBase.cs b/src/System.Management.Automation/namespaces/ItemProviderBase.cs
index eff6782f713..e282093de49 100644
--- a/src/System.Management.Automation/namespaces/ItemProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/ItemProviderBase.cs
@@ -8,15 +8,15 @@ namespace System.Management.Automation.Provider
     #region ItemCmdletProvider
 
     /// <summary>
-    /// The base class for Cmdlet providers that expose an item as an MSH path.
+    /// The base class for Cmdlet providers that expose an item as a PowerShell path.
     /// </summary>
     /// <remarks>
     /// The ItemCmdletProvider class is a base class that a provider derives from to
-    /// inherit a set of methods that allows the Monad engine
+    /// inherit a set of methods that allows the PowerShell engine
     /// to provide a core set of commands for getting and setting of data on one or
     /// more items. A provider should derive from this class if they want
     /// to take advantage of the item core commands that are
-    /// already implemented by the Monad engine. This allows users to have common
+    /// already implemented by the engine. This allows users to have common
     /// commands and semantics across multiple providers.
     /// </remarks>
     public abstract class ItemCmdletProvider : DriveCmdletProvider
diff --git a/src/System.Management.Automation/namespaces/LocationGlobber.cs b/src/System.Management.Automation/namespaces/LocationGlobber.cs
index e4ab1f3cfc5..65c28f1586d 100644
--- a/src/System.Management.Automation/namespaces/LocationGlobber.cs
+++ b/src/System.Management.Automation/namespaces/LocationGlobber.cs
@@ -22,7 +22,7 @@ internal sealed class LocationGlobber
         /// An instance of the PSTraceSource class used for trace output
         /// using "LocationGlobber" as the category.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "LocationGlobber",
              "The location globber converts PowerShell paths with glob characters to zero or more paths.")]
         private static readonly Dbg.PSTraceSource s_tracer =
@@ -32,7 +32,7 @@ internal sealed class LocationGlobber
         /// <summary>
         /// User level tracing for path resolution.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "PathResolution",
              "Traces the path resolution algorithm.")]
         private static readonly Dbg.PSTraceSource s_pathResolutionTracer =
@@ -1967,7 +1967,7 @@ CmdletProviderContext context
             string driveRoot = drive.Root.Replace(StringLiterals.AlternatePathSeparator, StringLiterals.DefaultPathSeparator);
             driveRoot = driveRoot.TrimEnd(StringLiterals.DefaultPathSeparator);
 
-            // Keep on lopping off children until the the remaining path
+            // Keep on lopping off children until the remaining path
             // is the drive root.
             while ((!string.IsNullOrEmpty(providerPath)) &&
                 (!providerPath.Equals(driveRoot, StringComparison.OrdinalIgnoreCase)))
@@ -2065,7 +2065,10 @@ internal string GenerateRelativePath(
                 driveRootRelativeWorkingPath = driveRootRelativeWorkingPath.Substring(drive.Root.Length);
             }
 
-            if (escapeCurrentLocation) { driveRootRelativeWorkingPath = WildcardPattern.Escape(driveRootRelativeWorkingPath); }
+            if (escapeCurrentLocation)
+            {
+                driveRootRelativeWorkingPath = WildcardPattern.Escape(driveRootRelativeWorkingPath);
+            }
 
             // These are static strings that we will parse and
             // interpret if they are leading the path. Otherwise
@@ -4536,7 +4539,7 @@ internal static bool IsHomePath(string path)
                 }
             }
 
-            if (path.IndexOf(StringLiterals.HomePath, StringComparison.Ordinal) == 0)
+            if (path.StartsWith(StringLiterals.HomePath, StringComparison.Ordinal))
             {
                 // Support the single "~"
                 if (path.Length == 1)
@@ -4635,7 +4638,7 @@ internal string GetHomeRelativePath(string path)
                     }
                 }
 
-                if (path.IndexOf(StringLiterals.HomePath, StringComparison.Ordinal) == 0)
+                if (path.StartsWith(StringLiterals.HomePath, StringComparison.Ordinal))
                 {
                     // Strip of the ~ and the \ or / if present
 
@@ -4704,7 +4707,7 @@ private static void TraceFilters(CmdletProviderContext context)
                     StringBuilder includeString = new StringBuilder();
                     foreach (string includeFilter in context.Include)
                     {
-                        includeString.AppendFormat("{0} ", includeFilter);
+                        includeString.Append($"{includeFilter} ");
                     }
 
                     s_pathResolutionTracer.WriteLine("Include: {0}", includeString.ToString());
@@ -4716,7 +4719,7 @@ private static void TraceFilters(CmdletProviderContext context)
                     StringBuilder excludeString = new StringBuilder();
                     foreach (string excludeFilter in context.Exclude)
                     {
-                        excludeString.AppendFormat("{0} ", excludeFilter);
+                        excludeString.Append($"{excludeFilter} ");
                     }
 
                     s_pathResolutionTracer.WriteLine("Exclude: {0}", excludeString.ToString());
diff --git a/src/System.Management.Automation/namespaces/NavigationProviderBase.cs b/src/System.Management.Automation/namespaces/NavigationProviderBase.cs
index da8a16869d1..cf656e633a3 100644
--- a/src/System.Management.Automation/namespaces/NavigationProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/NavigationProviderBase.cs
@@ -515,10 +515,7 @@ internal string ContractRelativePath(
                 return string.Empty;
             }
 
-            if (basePath == null)
-            {
-                basePath = string.Empty;
-            }
+            basePath ??= string.Empty;
 
             providerBaseTracer.WriteLine("basePath = {0}", basePath);
 
diff --git a/src/System.Management.Automation/namespaces/PathInfo.cs b/src/System.Management.Automation/namespaces/PathInfo.cs
index f49d478c5e1..0c5483ceffa 100644
--- a/src/System.Management.Automation/namespaces/PathInfo.cs
+++ b/src/System.Management.Automation/namespaces/PathInfo.cs
@@ -79,7 +79,7 @@ public string ProviderPath
         private readonly SessionState _sessionState;
 
         /// <summary>
-        /// Gets the MSH path that this object represents.
+        /// Gets the PowerShell path that this object represents.
         /// </summary>
         public string Path
         {
@@ -94,10 +94,10 @@ public string Path
         private readonly string _path = string.Empty;
 
         /// <summary>
-        /// Gets a string representing the MSH path.
+        /// Gets a string representing the PowerShell path.
         /// </summary>
         /// <returns>
-        /// A string representing the MSH path.
+        /// A string representing the PowerShell path.
         /// </returns>
         public override string ToString()
         {
diff --git a/src/System.Management.Automation/namespaces/ProviderBase.cs b/src/System.Management.Automation/namespaces/ProviderBase.cs
index 4ffc26db093..4345ec9f8ec 100644
--- a/src/System.Management.Automation/namespaces/ProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/ProviderBase.cs
@@ -15,10 +15,12 @@
 
 namespace System.Management.Automation.Provider
 {
+
     /// <summary>
     /// This interface needs to be implemented by providers that want users to see
     /// provider-specific help.
     /// </summary>
+#nullable enable
     public interface ICmdletProviderSupportsHelp
     {
         /// <summary>
@@ -37,7 +39,7 @@ public interface ICmdletProviderSupportsHelp
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Maml", Justification = "Maml is an acronym.")]
         string GetHelpMaml(string helpItemName, string path);
     }
-
+#nullable restore
     #region CmdletProvider
 
     /// <summary>
@@ -74,7 +76,7 @@ public abstract partial class CmdletProvider : IResourceSupplier
         /// An instance of the PSTraceSource class used for trace output
         /// using "CmdletProviderClasses" as the category.
         /// </summary>
-        [TraceSourceAttribute(
+        [TraceSource(
              "CmdletProviderClasses",
              "The namespace provider base classes tracer")]
         internal static readonly PSTraceSource providerBaseTracer = PSTraceSource.GetTracer(
@@ -221,7 +223,7 @@ internal object StartDynamicParameters(CmdletProviderContext cmdletProviderConte
         /// </summary>
         /// <param name="cmdletProviderContext">
         /// The context under which this method is being called.
-        ///</param>
+        /// </param>
         internal void Stop(CmdletProviderContext cmdletProviderContext)
         {
             Context = cmdletProviderContext;
@@ -258,7 +260,7 @@ internal void GetProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -296,7 +298,7 @@ internal object GetPropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -325,7 +327,7 @@ internal void SetProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -363,7 +365,7 @@ internal object SetPropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -395,7 +397,7 @@ internal void ClearProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -433,7 +435,7 @@ internal object ClearPropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IPropertyCmdletProvider propertyProvider))
+            if (this is not IPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -477,7 +479,7 @@ internal void NewProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -522,7 +524,7 @@ internal object NewPropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -554,7 +556,7 @@ internal void RemoveProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -591,7 +593,7 @@ internal object RemovePropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -627,7 +629,7 @@ internal void RenameProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -668,7 +670,7 @@ internal object RenamePropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -708,7 +710,7 @@ internal void CopyProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -753,7 +755,7 @@ internal object CopyPropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -793,7 +795,7 @@ internal void MoveProperty(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -838,7 +840,7 @@ internal object MovePropertyDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IDynamicPropertyCmdletProvider propertyProvider))
+            if (this is not IDynamicPropertyCmdletProvider propertyProvider)
             {
                 return null;
             }
@@ -869,7 +871,7 @@ internal IContentReader GetContentReader(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -902,7 +904,7 @@ internal object GetContentReaderDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 return null;
             }
@@ -929,7 +931,7 @@ internal IContentWriter GetContentWriter(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -962,7 +964,7 @@ internal object GetContentWriterDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 return null;
             }
@@ -986,7 +988,7 @@ internal void ClearContent(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 throw
                     PSTraceSource.NewNotSupportedException(
@@ -1019,7 +1021,7 @@ internal object ClearContentDynamicParameters(
         {
             Context = cmdletProviderContext;
 
-            if (!(this is IContentCmdletProvider contentProvider))
+            if (this is not IContentCmdletProvider contentProvider)
             {
                 return null;
             }
@@ -1350,7 +1352,7 @@ public PSHost Host
         /// </summary>
         public virtual char AltItemSeparator =>
 #if UNIX
-            Utils.Separators.Backslash[0];
+            '\\';
 #else
             Path.AltDirectorySeparatorChar;
 #endif
@@ -1417,6 +1419,7 @@ public virtual string GetResourceString(string baseName, string resourceId)
 
         #region ThrowTerminatingError
         /// <Content contentref="System.Management.Automation.Cmdlet.ThrowTerminatingError" />
+        [System.Diagnostics.CodeAnalysis.DoesNotReturn]
         public void ThrowTerminatingError(ErrorRecord errorRecord)
         {
             using (PSTransactionManager.GetEngineProtectionScope())
@@ -1820,11 +1823,11 @@ private PSObject WrapOutputInPSObject(
 #if UNIX
 
                 // Add a commonstat structure to file system objects
-                if (ExperimentalFeature.IsEnabled("PSUnixFileStat") && ProviderInfo.ImplementingType == typeof(Microsoft.PowerShell.Commands.FileSystemProvider))
+                if (ProviderInfo.ImplementingType == typeof(Microsoft.PowerShell.Commands.FileSystemProvider))
                 {
                     try
                     {
-                        // Use LStat because if you get a link, you want the information about the 
+                        // Use LStat because if you get a link, you want the information about the
                         // link, not the file.
                         var commonStat = Platform.Unix.GetLStat(path);
                         result.AddOrSetProperty("UnixStat", commonStat);
@@ -1981,4 +1984,3 @@ public void WriteError(ErrorRecord errorRecord)
 }
 
 #pragma warning restore 56506
-
diff --git a/src/System.Management.Automation/namespaces/ProviderBaseSecurity.cs b/src/System.Management.Automation/namespaces/ProviderBaseSecurity.cs
index c232b769fb3..7bc738c4e49 100644
--- a/src/System.Management.Automation/namespaces/ProviderBaseSecurity.cs
+++ b/src/System.Management.Automation/namespaces/ProviderBaseSecurity.cs
@@ -7,7 +7,7 @@ namespace System.Management.Automation.Provider
 {
     /// <summary>
     /// Defines the base class for all of the classes the provide implementations for a particular
-    /// data store or item for the MSH core commands.
+    /// data store or item for the PowerShell core commands.
     /// </summary>
     public abstract partial class CmdletProvider
     {
diff --git a/src/System.Management.Automation/namespaces/ProviderDeclarationAttribute.cs b/src/System.Management.Automation/namespaces/ProviderDeclarationAttribute.cs
index d0c7bd018a1..cd38b92c177 100644
--- a/src/System.Management.Automation/namespaces/ProviderDeclarationAttribute.cs
+++ b/src/System.Management.Automation/namespaces/ProviderDeclarationAttribute.cs
@@ -77,55 +77,63 @@ public enum ProviderCapabilities
     {
         /// <summary>
         /// The provider does not add any additional capabilities beyond what the
-        /// Monad engine provides.
+        /// PowerShell engine provides.
         /// </summary>
         None = 0x0,
 
         /// <summary>
+        /// <para>
         /// The provider does the inclusion filtering for those commands that take an Include
-        /// parameter. The Monad engine should not try to do the filtering on behalf of this
+        /// parameter. The PowerShell engine should not try to do the filtering on behalf of this
         /// provider.
-        /// </summary>
-        /// <remarks>
-        /// Note, the provider should make every effort to filter in a way that is consistent
-        /// with the Monad engine. This option is allowed because in many cases the provider
+        /// </para>
+        /// <para>
+        /// The implementer of the provider should make every effort to filter in a way that is consistent
+        /// with the PowerShell engine. This option is allowed because in many cases the provider
         /// can be much more efficient at filtering.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         Include = 0x1,
 
         /// <summary>
+        /// <para>
         /// The provider does the exclusion filtering for those commands that take an Exclude
-        /// parameter. The Monad engine should not try to do the filtering on behalf of this
+        /// parameter. The PowerShell engine should not try to do the filtering on behalf of this
         /// provider.
-        /// </summary>
-        /// <remarks>
-        /// Note, the provider should make every effort to filter in a way that is consistent
-        /// with the Monad engine. This option is allowed because in many cases the provider
+        /// </para>
+        /// <para>
+        /// The implementer of the provider should make every effort to filter in a way that is consistent
+        /// with the PowerShell engine. This option is allowed because in many cases the provider
         /// can be much more efficient at filtering.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         Exclude = 0x2,
 
         /// <summary>
+        /// <para>
         /// The provider can take a provider specific filter string.
-        /// </summary>
-        /// <remarks>
-        /// When this attribute is specified a provider specific filter can be passed from
+        /// </para>
+        /// <para>
+        /// For implementers of providers using this attribute, a provider specific filter can be passed from
         /// the Core Commands to the provider. This filter string is not interpreted in any
-        /// way by the Monad engine.
-        /// </remarks>
+        /// way by the PowerShell engine.
+        /// </para>
+        /// </summary>
         Filter = 0x4,
 
         /// <summary>
-        /// The provider does the wildcard matching for those commands that allow for it. The Monad
+        /// <para>
+        /// The provider does the wildcard matching for those commands that allow for it. The PowerShell
         /// engine should not try to do the wildcard matching on behalf of the provider when this
         /// flag is set.
-        /// </summary>
-        /// <remarks>
-        /// Note, the provider should make every effort to do the wildcard matching in a way that is consistent
-        /// with the Monad engine. This option is allowed because in many cases wildcard matching
+        /// </para>
+        /// <para>
+        /// The implementer of the provider should make every effort to do the wildcard matching in a way that is consistent
+        /// with the PowerShell engine. This option is allowed because in many cases wildcard matching
         /// cannot occur via the path name or because the provider can do the matching in a much more
         /// efficient manner.
-        /// </remarks>
+        /// </para>
+        /// </summary>
         ExpandWildcards = 0x8,
 
         /// <summary>
diff --git a/src/System.Management.Automation/namespaces/RegistryProvider.cs b/src/System.Management.Automation/namespaces/RegistryProvider.cs
index 1898c960620..4e3b84716cd 100644
--- a/src/System.Management.Automation/namespaces/RegistryProvider.cs
+++ b/src/System.Management.Automation/namespaces/RegistryProvider.cs
@@ -28,7 +28,7 @@ namespace Microsoft.PowerShell.Commands
     ///
     /// INSTALLATION:
     ///
-    /// Type the following at an msh prompt:
+    /// Type the following at a PowerShell prompt:
     ///
     /// new-PSProvider -Path "REG.cmdletprovider" -description "My registry navigation provider"
     ///
@@ -61,6 +61,9 @@ namespace Microsoft.PowerShell.Commands
     [OutputType(typeof(RegistryKey), ProviderCmdlet = ProviderCmdlet.GetItem)]
     [OutputType(typeof(RegistryKey), typeof(string), typeof(Int32), typeof(Int64), ProviderCmdlet = ProviderCmdlet.GetItemProperty)]
     [OutputType(typeof(RegistryKey), ProviderCmdlet = ProviderCmdlet.NewItem)]
+    [OutputType(typeof(string), typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.ResolvePath)]
+    [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PushLocation)]
+    [OutputType(typeof(PathInfo), ProviderCmdlet = ProviderCmdlet.PopLocation)]
     public sealed partial class RegistryProvider :
         NavigationCmdletProvider,
         IPropertyCmdletProvider,
@@ -783,7 +786,7 @@ private static string EscapeSpecialChars(string path)
 
             Dbg.Diagnostics.Assert(
                 textEnumerator != null,
-                string.Format(CultureInfo.CurrentCulture, "Cannot get a text enumerator for name {0}", path));
+                string.Create(CultureInfo.CurrentCulture, $"Cannot get a text enumerator for name {path}"));
 
             while (textEnumerator.MoveNext())
             {
@@ -798,7 +801,7 @@ private static string EscapeSpecialChars(string path)
                 // should not be done.
                 if (textElement.Contains(charactersThatNeedEscaping))
                 {
-                    // This text element needs espacing
+                    // This text element needs escaping
                     result.Append('`');
                 }
 
@@ -832,7 +835,7 @@ private static string EscapeChildName(string name)
 
             Dbg.Diagnostics.Assert(
                 textEnumerator != null,
-                string.Format(CultureInfo.CurrentCulture, "Cannot get a text enumerator for name {0}", name));
+                string.Create(CultureInfo.CurrentCulture, $"Cannot get a text enumerator for name {name}"));
 
             while (textEnumerator.MoveNext())
             {
@@ -847,7 +850,7 @@ private static string EscapeChildName(string name)
                 // should not be done.
                 if (textElement.Contains(charactersThatNeedEscaping))
                 {
-                    // This text element needs espacing
+                    // This text element needs escaping
                     result.Append('`');
                 }
 
@@ -1822,8 +1825,19 @@ public void GetProperty(
                     notePropertyName = LocalizedDefaultToken;
                 }
 
-                propertyResults.Properties.Add(new PSNoteProperty(notePropertyName, key.GetValue(valueName)));
-                valueAdded = true;
+                try
+                {
+                    propertyResults.Properties.Add(new PSNoteProperty(notePropertyName, key.GetValue(valueName)));
+                    valueAdded = true;
+                }
+                catch (InvalidCastException invalidCast)
+                {
+                    WriteError(new ErrorRecord(
+                        invalidCast,
+                        invalidCast.GetType().FullName,
+                        ErrorCategory.ReadError,
+                        path));
+                }
             }
 
             key.Close();
@@ -2993,10 +3007,7 @@ private void GetFilteredRegistryKeyProperties(string path,
 
             // If properties were not specified, get all the values
 
-            if (propertyNames == null)
-            {
-                propertyNames = new Collection<string>();
-            }
+            propertyNames ??= new Collection<string>();
 
             if (propertyNames.Count == 0 && getAll)
             {
diff --git a/src/System.Management.Automation/namespaces/RegistryWrapper.cs b/src/System.Management.Automation/namespaces/RegistryWrapper.cs
index 0e8e0558312..ebdbe833839 100644
--- a/src/System.Management.Automation/namespaces/RegistryWrapper.cs
+++ b/src/System.Management.Automation/namespaces/RegistryWrapper.cs
@@ -17,11 +17,13 @@
 
 namespace Microsoft.PowerShell.Commands
 {
+
+#nullable enable
     internal interface IRegistryWrapper
     {
-        void SetValue(string name, object value);
+        void SetValue(string? name, object value);
 
-        void SetValue(string name, object value, RegistryValueKind valueKind);
+        void SetValue(string? name, object value, RegistryValueKind valueKind);
 
         string[] GetValueNames();
 
@@ -29,17 +31,17 @@ internal interface IRegistryWrapper
 
         string[] GetSubKeyNames();
 
-        IRegistryWrapper CreateSubKey(string subkey);
+        IRegistryWrapper? CreateSubKey(string subkey);
 
-        IRegistryWrapper OpenSubKey(string name, bool writable);
+        IRegistryWrapper? OpenSubKey(string name, bool writable);
 
         void DeleteSubKeyTree(string subkey);
 
-        object GetValue(string name);
+        object? GetValue(string? name);
 
-        object GetValue(string name, object defaultValue, RegistryValueOptions options);
+        object? GetValue(string? name, object? defaultValue, RegistryValueOptions options);
 
-        RegistryValueKind GetValueKind(string name);
+        RegistryValueKind GetValueKind(string? name);
 
         object RegistryKey { get; }
 
@@ -53,6 +55,7 @@ internal interface IRegistryWrapper
 
         int SubKeyCount { get; }
     }
+#nullable restore
 
     internal static class RegistryWrapperUtils
     {
diff --git a/src/System.Management.Automation/namespaces/SafeRegistryHandle.cs b/src/System.Management.Automation/namespaces/SafeRegistryHandle.cs
deleted file mode 100644
index 5e76b7cb3f3..00000000000
--- a/src/System.Management.Automation/namespaces/SafeRegistryHandle.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-//
-// NOTE: A vast majority of this code was copied from BCL in
-// Namespace: Microsoft.Win32.SafeHandles
-//
-/*============================================================
-**
-**
-**
-** A wrapper for registry handles
-**
-**
-===========================================================*/
-
-using System;
-using System.Management.Automation;
-using System.Security;
-using System.Runtime.InteropServices;
-using System.Runtime.Versioning;
-using Microsoft.Win32.SafeHandles;
-using System.Runtime.ConstrainedExecution;
-using System.Security.Permissions;
-
-namespace Microsoft.PowerShell.Commands.Internal
-{
-    internal sealed class SafeRegistryHandle : SafeHandleZeroOrMinusOneIsInvalid
-    {
-        // Note: Officially -1 is the recommended invalid handle value for
-        // registry keys, but we'll also get back 0 as an invalid handle from
-        // RegOpenKeyEx.
-
-        internal SafeRegistryHandle() : base(true) { }
-
-        internal SafeRegistryHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
-        {
-            SetHandle(preexistingHandle);
-        }
-
-        [DllImport(PinvokeDllNames.RegCloseKeyDllName),
-         SuppressUnmanagedCodeSecurity,
-         ResourceExposure(ResourceScope.None)]
-        internal static extern int RegCloseKey(IntPtr hKey);
-
-        protected override bool ReleaseHandle()
-        {
-            // Returns a Win32 error code, 0 for success
-            int r = RegCloseKey(handle);
-            return r == 0;
-        }
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/SafeTransactionHandle.cs b/src/System.Management.Automation/namespaces/SafeTransactionHandle.cs
deleted file mode 100644
index 01cef7dce46..00000000000
--- a/src/System.Management.Automation/namespaces/SafeTransactionHandle.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-#pragma warning disable 1634, 1691
-
-namespace Microsoft.PowerShell.Commands.Internal
-{
-    using System;
-    using System.Runtime.InteropServices;
-    using System.Transactions;
-    using Microsoft.Win32.SafeHandles;
-    using System.Management.Automation;
-
-    [Guid("79427A2B-F895-40e0-BE79-B57DC82ED231"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
-    internal interface IKernelTransaction
-    {
-        int GetHandle(out IntPtr pHandle);
-    }
-
-    [System.Security.SuppressUnmanagedCodeSecurity]
-    internal sealed class SafeTransactionHandle : SafeHandleZeroOrMinusOneIsInvalid
-    {
-        private const string resBaseName = "RegistryProviderStrings";
-
-        private SafeTransactionHandle(IntPtr handle)
-            : base(true)
-        {
-            this.handle = handle;
-        }
-
-        internal static SafeTransactionHandle Create()
-        {
-            return SafeTransactionHandle.Create(Transaction.Current);
-        }
-
-        internal static SafeTransactionHandle Create(Transaction managedTransaction)
-        {
-            if (managedTransaction == null)
-            {
-                throw new InvalidOperationException(RegistryProviderStrings.InvalidOperation_NeedTransaction);
-            }
-
-            // MSDTC is not available on WinPE machine.
-            // CommitableTransaction will use DTC APIs under the covers to get KTM transaction manager interface.
-            // KTM is kernel Transaction Manager to handle file, registry etc and MSDTC provides an integration support
-            // with KTM to handle transaction across kernel resources and MSDTC resources like SQL, MSMQ etc.
-            // We need KTMRM service as well. WinPE doesn't have these services installed
-            if (Utils.IsWinPEHost() || PsUtils.IsRunningOnProcessorArchitectureARM())
-            {
-                throw new NotSupportedException(RegistryProviderStrings.NotSupported_KernelTransactions);
-            }
-
-            IDtcTransaction dtcTransaction = TransactionInterop.GetDtcTransaction(managedTransaction);
-            IKernelTransaction ktmInterface = dtcTransaction as IKernelTransaction;
-            if (ktmInterface == null)
-            {
-                throw new NotSupportedException(RegistryProviderStrings.NotSupported_KernelTransactions);
-            }
-
-            IntPtr ktmTxHandle;
-            int hr = ktmInterface.GetHandle(out ktmTxHandle);
-            HandleError(hr);
-
-            return new SafeTransactionHandle(ktmTxHandle);
-        }
-
-        protected override bool ReleaseHandle()
-        {
-            // We don't care about the value of GetLastError.
-#pragma warning suppress 56523
-            return Win32Native.CloseHandle(this.handle);
-        }
-
-        private static void HandleError(int error)
-        {
-            if (error != Win32Native.ERROR_SUCCESS)
-            {
-                throw new System.ComponentModel.Win32Exception(error);
-            }
-        }
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs b/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs
index 3f0f52c942e..e4199291437 100644
--- a/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs
+++ b/src/System.Management.Automation/namespaces/SessionStateProviderBase.cs
@@ -26,7 +26,7 @@ public abstract class SessionStateProviderBase : ContainerCmdletProvider, IConte
         /// <summary>
         /// An instance of the PSTraceSource class used for trace output.
         /// </summary>
-        [Dbg.TraceSourceAttribute(
+        [Dbg.TraceSource(
              "SessionStateProvider",
              "Providers that produce a view of session state data.")]
         private static readonly Dbg.PSTraceSource s_tracer =
diff --git a/src/System.Management.Automation/namespaces/TransactedRegistry.cs b/src/System.Management.Automation/namespaces/TransactedRegistry.cs
deleted file mode 100644
index 56062e6de6c..00000000000
--- a/src/System.Management.Automation/namespaces/TransactedRegistry.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-//
-// NOTE: A vast majority of this code was copied from BCL in
-// ndp\clr\src\BCL\Microsoft\Win32\Registry.cs.
-// Namespace: Microsoft.Win32
-//
-
-using BCLDebug = System.Diagnostics.Debug;
-
-namespace Microsoft.PowerShell.Commands.Internal
-{
-    using System.Runtime.InteropServices;
-    using System.Runtime.Versioning;
-    using System.Diagnostics.CodeAnalysis;
-
-    /**
-     * Registry encapsulation. Contains members representing all top level system
-     * keys.
-     *
-     * @security(checkClassLinking=on)
-     */
-    // This class contains only static members and does not need to be serializable.
-    [ComVisible(true)]
-    // Suppressed because these objects need to be accessed from CmdLets.
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    internal static class TransactedRegistry
-    {
-        private const string resBaseName = "RegistryProviderStrings";
-        /**
-         * Current User Key.
-         *
-         * This key should be used as the root for all user specific settings.
-         */
-        /// <summary>TransactedRegistry.CurrentUser
-        /// <para>This static method returns a TransactedRegistryKey object that represents the base
-        /// key HKEY_CURRENT_USER. Because it is a base key, there is no transaction associated with
-        /// the returned TransactedRegistryKey. This means that values modified using the returned
-        /// TransactedRegistryKey are NOT modified within a transaction.</para>
-        /// <para>However, if the returned TransactedRegistryKey is used to create, open, or delete
-        /// subkeys, there must be a Transaction.Current and the resulting TransactedRegistryKey from those operations ARE associated with
-        /// the transaction.</para>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        // The TransactedRegistryKey's members cannot be changed.
-        [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
-        internal static readonly TransactedRegistryKey CurrentUser = TransactedRegistryKey.GetBaseKey(BaseRegistryKeys.HKEY_CURRENT_USER);
-
-        /**
-         * Local Machine Key.
-         *
-         * This key should be used as the root for all machine specific settings.
-         */
-        /// <summary>TransactedRegistry.LocalMachine
-        /// <para>This static method returns a TransactedRegistryKey object that represents the base
-        /// key HKEY_LOCAL_MACHINE. Because it is a base key, there is no transaction associated with
-        /// the returned TransactedRegistryKey. This means that values modified using the returned
-        /// TransactedRegistryKey are NOT modified within a transaction.</para>
-        /// <para>However, if the returned TransactedRegistryKey is used to create, open, or delete
-        /// subkeys, there must be a Transaction.Current and the resulting TransactedRegistryKey from those operations ARE associated with
-        /// the transaction.</para>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        // The TransactedRegistryKey's members cannot be changed.
-        [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
-        internal static readonly TransactedRegistryKey LocalMachine = TransactedRegistryKey.GetBaseKey(BaseRegistryKeys.HKEY_LOCAL_MACHINE);
-
-        /**
-         * Classes Root Key.
-         *
-         * This is the root key of class information.
-         */
-        /// <summary>TransactedRegistry.ClassesRoot
-        /// <para>This static method returns a TransactedRegistryKey object that represents the base
-        /// key HKEY_CLASSES_ROOT. Because it is a base key, there is no transaction associated with
-        /// the returned TransactedRegistryKey. This means that values modified using the returned
-        /// TransactedRegistryKey are NOT modified within a transaction.</para>
-        /// <para>However, if the returned TransactedRegistryKey is used to create, open, or delete
-        /// subkeys, there must be a Transaction.Current and the resulting TransactedRegistryKey from those operations ARE associated with
-        /// the transaction.</para>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        // The TransactedRegistryKey's members cannot be changed.
-        [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
-        internal static readonly TransactedRegistryKey ClassesRoot = TransactedRegistryKey.GetBaseKey(BaseRegistryKeys.HKEY_CLASSES_ROOT);
-
-        /**
-         * Users Root Key.
-         *
-         * This is the root of users.
-         */
-        /// <summary>TransactedRegistry.Users
-        /// <para>This static method returns a TransactedRegistryKey object that represents the base
-        /// key HKEY_USERS. Because it is a base key, there is no transaction associated with
-        /// the returned TransactedRegistryKey. This means that values modified using the returned
-        /// TransactedRegistryKey are NOT modified within a transaction.</para>
-        /// <para>However, if the returned TransactedRegistryKey is used to create, open, or delete
-        /// subkeys, there must be a Transaction.Current and the resulting TransactedRegistryKey from those operations ARE associated with
-        /// the transaction.</para>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        // The TransactedRegistryKey's members cannot be changed.
-        [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
-        internal static readonly TransactedRegistryKey Users = TransactedRegistryKey.GetBaseKey(BaseRegistryKeys.HKEY_USERS);
-
-        /**
-         * Current Config Root Key.
-         *
-         * This is where current configuration information is stored.
-         */
-        /// <summary>TransactedRegistry.CurrentConfig
-        /// <para>This static method returns a TransactedRegistryKey object that represents the base
-        /// key HKEY_CURRENT_CONFIG. Because it is a base key, there is no transaction associated with
-        /// the returned TransactedRegistryKey. This means that values modified using the returned
-        /// TransactedRegistryKey are NOT modified within a transaction.</para>
-        /// <para>However, if the returned TransactedRegistryKey is used to create, open, or delete
-        /// subkeys, there must be a Transaction.Current and the resulting TransactedRegistryKey from those operations ARE associated with
-        /// the transaction.</para>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        // The TransactedRegistryKey's members cannot be changed.
-        [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
-        internal static readonly TransactedRegistryKey CurrentConfig = TransactedRegistryKey.GetBaseKey(BaseRegistryKeys.HKEY_CURRENT_CONFIG);
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/TransactedRegistryKey.cs b/src/System.Management.Automation/namespaces/TransactedRegistryKey.cs
deleted file mode 100644
index dac6f6c0897..00000000000
--- a/src/System.Management.Automation/namespaces/TransactedRegistryKey.cs
+++ /dev/null
@@ -1,2091 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-//
-// NOTE: A vast majority of this code was copied from BCL in
-// ndp\clr\src\BCL\Microsoft\Win32\RegistryKey.cs.
-// Namespace: Microsoft.Win32
-//
-/*
-  Note on transaction support:
-  Eventually we will want to add support for NT's transactions to our
-  TransactedRegistryKey API's (possibly Whidbey M3?).  When we do this, here's
-  the list of API's we need to make transaction-aware:
-
-  RegCreateKeyEx
-  RegDeleteKey
-  RegDeleteValue
-  RegEnumKeyEx
-  RegEnumValue
-  RegOpenKeyEx
-  RegQueryInfoKey
-  RegQueryValueEx
-  RegSetValueEx
-
-  We can ignore RegConnectRegistry (remote registry access doesn't yet have
-  transaction support) and RegFlushKey.  RegCloseKey doesn't require any
-  additional work.  .
- */
-
-/*
-  Note on ACL support:
-  The key thing to note about ACL's is you set them on a kernel object like a
-  registry key, then the ACL only gets checked when you construct handles to
-  them.  So if you set an ACL to deny read access to yourself, you'll still be
-  able to read with that handle, but not with new handles.
-
-  Another peculiarity is a Terminal Server app compatibility hack.  The OS
-  will second guess your attempt to open a handle sometimes.  If a certain
-  combination of Terminal Server app compat registry keys are set, then the
-  OS will try to reopen your handle with lesser permissions if you couldn't
-  open it in the specified mode.  So on some machines, we will see handles that
-  may not be able to read or write to a registry key.  It's very strange.  But
-  the real test of these handles is attempting to read or set a value in an
-  affected registry key.
-
-  For reference, at least two registry keys must be set to particular values
-  for this behavior:
-  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\RegistryExtensionFlags, the least significant bit must be 1.
-  HKLM\SYSTEM\CurrentControlSet\Control\TerminalServer\TSAppCompat must be 1
-  There might possibly be an interaction with yet a third registry key as well.
-
-*/
-
-using BCLDebug = System.Diagnostics.Debug;
-
-namespace Microsoft.PowerShell.Commands.Internal
-{
-    using System;
-    using System.Collections.Generic;
-    using System.Security;
-    using System.Security.AccessControl;
-    using System.Security.Permissions;
-    using System.Text;
-    using System.IO;
-    using System.Runtime.InteropServices;
-    using Microsoft.Win32;
-    using System.Runtime.Versioning;
-    using System.Globalization;
-    using System.Transactions;
-    using System.Diagnostics.CodeAnalysis;
-
-    // Putting this in a separate internal class to avoid OACR warning DoNotDeclareReadOnlyMutableReferenceTypes.
-    internal sealed class BaseRegistryKeys
-    {
-        // We could use const here, if C# supported ELEMENT_TYPE_I fully.
-        internal static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000));
-        internal static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001));
-        internal static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002));
-        internal static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003));
-        internal static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005));
-    }
-
-    /// <summary>
-    /// Registry encapsulation. To get an instance of a TransactedRegistryKey use the
-    /// Registry class's static members then call OpenSubKey.
-    ///
-    /// @see Registry
-    /// @security(checkDllCalls=off)
-    /// @security(checkClassLinking=on)
-    /// </summary>
-    [ComVisible(true)]
-    // Suppressed because these objects are written to the pipeline so need to be accessible.
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public sealed class TransactedRegistryKey : MarshalByRefObject, IDisposable
-    {
-        private const string resBaseName = "RegistryProviderStrings";
-
-        // Dirty indicates that we have munged data that should be potentially
-        // written to disk.
-        //
-        private const int STATE_DIRTY = 0x0001;
-
-        // SystemKey indicates that this is a "SYSTEMKEY" and shouldn't be "opened"
-        // or "closed".
-        //
-        private const int STATE_SYSTEMKEY = 0x0002;
-
-        // Access
-        //
-        private const int STATE_WRITEACCESS = 0x0004;
-
-        // Names of keys.  This array must be in the same order as the HKEY values listed above.
-        //
-        private static readonly string[] s_hkeyNames = new string[] {
-                "HKEY_CLASSES_ROOT",
-                "HKEY_CURRENT_USER",
-                "HKEY_LOCAL_MACHINE",
-                "HKEY_USERS",
-                "HKEY_PERFORMANCE_DATA",
-                "HKEY_CURRENT_CONFIG",
-                "HKEY_DYN_DATA"
-                };
-
-        // MSDN defines the following limits for registry key names & values:
-        // Key Name: 255 characters
-        // Value name:  Win9x: 255 NT: 16,383 Unicode characters, or 260 ANSI chars
-        // Value: either 1 MB or current available memory, depending on registry format.
-        private const int MaxKeyLength = 255;
-        private const int MaxValueNameLength = 16383;
-        private const int MaxValueDataLength = 1024 * 1024;
-
-        private SafeRegistryHandle _hkey = null;
-        private int _state = 0;
-        private string _keyName;
-        private RegistryKeyPermissionCheck _checkMode;
-        private System.Transactions.Transaction _myTransaction;
-        private SafeTransactionHandle _myTransactionHandle;
-
-        // This is a wrapper around RegOpenKeyTransacted that implements a workaround
-        // to TxF bug number 181242 After calling RegOpenKeyTransacted, it calls RegQueryInfoKey.
-        // If that call fails with ERROR_INVALID_TRANSACTION, we have possibly run into bug 181242. To workaround
-        // this, we open the key without a transaction and then open it again with
-        // a transaction and return THAT hkey.
-
-        // Suppressed because there is no way for arbitrary data to be passed.
-        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
-        private int RegOpenKeyTransactedWrapper(SafeRegistryHandle hKey, string lpSubKey,
-                    int ulOptions, int samDesired, out SafeRegistryHandle hkResult,
-                    SafeTransactionHandle hTransaction, IntPtr pExtendedParameter)
-        {
-            int error = Win32Native.ERROR_SUCCESS;
-            SafeRegistryHandle hKeyToReturn = null;
-
-            error = Win32Native.RegOpenKeyTransacted(_hkey, lpSubKey, ulOptions, samDesired, out hKeyToReturn, hTransaction, pExtendedParameter);
-
-            if (Win32Native.ERROR_SUCCESS == error && !hKeyToReturn.IsInvalid)
-            {
-                // This is a check and workaround for TxR bug 181242. If we try to use the transacted hKey we just opened
-                // for a call to RegQueryInfoKey and get back a ERROR_INVALID_TRANSACTION error, then the key might be a symbolic link and TxR didn't
-                // do the open correctly. The workaround is to open it non-transacted, then open it again transacted without
-                // a subkey string. If we get some error other than ERROR_INVALID_TRANSACTION from RegQueryInfoKey, just ignore it for now.
-                int subkeyCount = 0;
-                int valueCount = 0;
-                error = Win32Native.RegQueryInfoKey(hKeyToReturn,
-                                          null,
-                                          null,
-                                          Win32Native.NULL,
-                                          ref subkeyCount,  // subkeys
-                                          null,
-                                          null,
-                                          ref valueCount,     // values
-                                          null,
-                                          null,
-                                          null,
-                                          null);
-                if (Win32Native.ERROR_INVALID_TRANSACTION == error)
-                {
-                    SafeRegistryHandle nonTxKey = null;
-                    SafeRegistryHandle txKey = null;
-                    error = Win32Native.RegOpenKeyEx(_hkey, lpSubKey, ulOptions, samDesired, out nonTxKey);
-                    // If we got some error on this open, just ignore it and continue on with the handle
-                    // we got on the original RegOpenKeyTransacted.
-                    if (Win32Native.ERROR_SUCCESS == error)
-                    {
-                        // Now do an RegOpenKeyTransacted with the non-transacted key and no "subKey" parameter.
-                        error = Win32Native.RegOpenKeyTransacted(nonTxKey, null, ulOptions, samDesired, out txKey, hTransaction, pExtendedParameter);
-                        if (Win32Native.ERROR_SUCCESS == error)
-                        {
-                            // Let's use this hkey instead.
-                            hKeyToReturn.Dispose();
-                            hKeyToReturn = txKey;
-                        }
-
-                        nonTxKey.Dispose();
-                        nonTxKey = null;
-                    }
-                }
-            }
-
-            hkResult = hKeyToReturn;
-            return error;
-        }
-
-        /**
-         * Creates a TransactedRegistryKey.
-         *
-         * This key is bound to hkey, if writable is <b>false</b> then no write operations
-         * will be allowed. If systemkey is set then the hkey won't be released
-         * when the object is GC'ed.
-         */
-        private TransactedRegistryKey(SafeRegistryHandle hkey, bool writable, bool systemkey,
-                                      System.Transactions.Transaction transaction, SafeTransactionHandle txHandle)
-        {
-            _hkey = hkey;
-            _keyName = string.Empty;
-            if (systemkey)
-            {
-                _state |= STATE_SYSTEMKEY;
-            }
-
-            if (writable)
-            {
-                _state |= STATE_WRITEACCESS;
-            }
-            // We want to take our own clone so we can dispose it when we want and
-            // aren't susceptible to the caller disposing it.
-            if (transaction != null)
-            {
-                _myTransaction = transaction.Clone();
-                _myTransactionHandle = txHandle;
-            }
-            else
-            {
-                _myTransaction = null;
-                _myTransactionHandle = null;
-            }
-        }
-
-        private SafeTransactionHandle GetTransactionHandle()
-        {
-            SafeTransactionHandle safeTransactionHandle = null;
-
-            // If myTransaction is not null and is not the same as Transaction.Current
-            // this is an invalid operation. The transaction within which the RegistryKey object was created
-            // needs to be the same as the transaction being used now.
-            if (_myTransaction != null)
-            {
-                if (!_myTransaction.Equals(Transaction.Current))
-                {
-                    throw new InvalidOperationException(RegistryProviderStrings.InvalidOperation_MustUseSameTransaction);
-                }
-                else
-                {
-                    safeTransactionHandle = _myTransactionHandle;
-                }
-            }
-            else  // we want to use Transaction.Current for the transaction.
-            {
-                safeTransactionHandle = SafeTransactionHandle.Create();
-            }
-
-            return safeTransactionHandle;
-        }
-
-        /// <summary>TransactedRegistryKey.Close
-        /// <para>Closes this key, flushes it to disk if the contents have been modified.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// </summary>
-        public void Close()
-        {
-            Dispose(true);
-        }
-
-        private void Dispose(bool disposing)
-        {
-            if (_hkey != null)
-            {
-                if (!IsSystemKey())
-                {
-                    try
-                    {
-                        _hkey.Dispose();
-                    }
-                    catch (IOException)
-                    {
-                        // we don't really care if the handle is invalid at this point
-                    }
-                    finally
-                    {
-                        _hkey = null;
-                    }
-                }
-            }
-
-            if (_myTransaction != null)
-            {
-                // Dispose the transaction because we cloned it.
-                try
-                {
-                    _myTransaction.Dispose();
-                }
-                catch (TransactionException)
-                {
-                    // ignore.
-                }
-                finally
-                {
-                    _myTransaction = null;
-                }
-            }
-        }
-
-        /// <summary>TransactedRegistryKey.Flush
-        /// <para>Flushes this key. Utilizes Transaction.Current for its transaction.</para>
-        /// </summary>
-        public void Flush()
-        {
-            // Require a transaction. This will throw for "Base" keys because they aren't associated with a transaction.
-            VerifyTransaction();
-            if (_hkey != null)
-            {
-                if (IsDirty())
-                {
-                    int ret = Win32Native.RegFlushKey(_hkey);
-                    if (Win32Native.ERROR_SUCCESS != ret)
-                    {
-                        throw new IOException(Win32Native.GetMessage(ret), ret);
-                    }
-                }
-            }
-        }
-
-        /// <summary>TransactedRegistryKey.Dispose
-        /// <para>Disposes this key. Utilizes Transaction.Current for its transaction.</para>
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-        }
-
-        /// <summary>
-        /// <para>Creates a new subkey, or opens an existing one.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name='subkey'>Name or path to subkey to create or open. Cannot be null or an empty string,
-        /// otherwise an ArgumentException is thrown.</param>
-        /// <returns>A TransactedRegistryKey object for the subkey, which is associated with Transaction.Current.
-        /// returns null if the operation failed.</returns>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey CreateSubKey(string subkey)
-        {
-            return CreateSubKey(subkey, _checkMode);
-        }
-
-        /// <summary>
-        /// <para>Creates a new subkey, or opens an existing one.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name='subkey'>Name or path to subkey to create or open. Cannot be null or an empty string,
-        /// otherwise an ArgumentException is thrown.</param>
-        /// <param name='permissionCheck'>One of the Microsoft.Win32.RegistryKeyPermissionCheck values that
-        /// specifies whether the key is opened for read or read/write access.</param>
-        /// <returns>A TransactedRegistryKey object for the subkey, which is associated with Transaction.Current.
-        /// returns null if the operation failed.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey CreateSubKey(string subkey, RegistryKeyPermissionCheck permissionCheck)
-        {
-            return CreateSubKeyInternal(subkey, permissionCheck, (TransactedRegistrySecurity)null);
-        }
-
-        /// <summary>
-        /// <para>Creates a new subkey, or opens an existing one.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name='subkey'>Name or path to subkey to create or open. Cannot be null or an empty string,
-        /// otherwise an ArgumentException is thrown.</param>
-        /// <param name='permissionCheck'>One of the Microsoft.Win32.RegistryKeyPermissionCheck values that
-        /// specifies whether the key is opened for read or read/write access.</param>
-        /// <param name='registrySecurity'>A TransactedRegistrySecurity object that specifies the access control security for the new key.</param>
-        /// <returns>A TransactedRegistryKey object for the subkey, which is associated with Transaction.Current.
-        /// returns null if the operation failed.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public unsafe TransactedRegistryKey CreateSubKey(string subkey, RegistryKeyPermissionCheck permissionCheck, TransactedRegistrySecurity registrySecurity)
-        {
-            return CreateSubKeyInternal(subkey, permissionCheck, registrySecurity);
-        }
-
-        [ComVisible(false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private unsafe TransactedRegistryKey CreateSubKeyInternal(string subkey, RegistryKeyPermissionCheck permissionCheck, object registrySecurityObj)
-        {
-            ValidateKeyName(subkey);
-            // RegCreateKeyTransacted requires a non-empty key name, so let's deal with that here.
-            if (string.Empty == subkey)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegKeyStrEmpty);
-            }
-
-            ValidateKeyMode(permissionCheck);
-            EnsureWriteable();
-            subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
-
-            // only keys opened under read mode is not writable
-            TransactedRegistryKey existingKey = InternalOpenSubKey(subkey, (permissionCheck != RegistryKeyPermissionCheck.ReadSubTree));
-            if (existingKey != null)
-            { // Key already exits
-                CheckSubKeyWritePermission(subkey);
-                CheckSubTreePermission(subkey, permissionCheck);
-                existingKey._checkMode = permissionCheck;
-                return existingKey;
-            }
-
-            CheckSubKeyCreatePermission(subkey);
-
-            Win32Native.SECURITY_ATTRIBUTES secAttrs = null;
-            TransactedRegistrySecurity registrySecurity = registrySecurityObj as TransactedRegistrySecurity;
-            // For ACL's, get the security descriptor from the RegistrySecurity.
-            if (registrySecurity != null)
-            {
-                secAttrs = new Win32Native.SECURITY_ATTRIBUTES();
-                secAttrs.nLength = (int)Marshal.SizeOf(secAttrs);
-
-                byte[] sd = registrySecurity.GetSecurityDescriptorBinaryForm();
-                // We allocate memory on the stack to improve the speed.
-                // So this part of code can't be refactored into a method.
-                byte* pSecDescriptor = stackalloc byte[sd.Length];
-                Microsoft.PowerShell.Commands.Internal.Buffer.memcpy(sd, 0, pSecDescriptor, 0, sd.Length);
-                secAttrs.pSecurityDescriptor = pSecDescriptor;
-            }
-
-            int disposition = 0;
-
-            // By default, the new key will be writable.
-            SafeRegistryHandle result = null;
-            int ret = 0;
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-
-            ret = Win32Native.RegCreateKeyTransacted(_hkey,
-                subkey,
-                0,
-                null,
-                0,
-                GetRegistryKeyAccess(permissionCheck != RegistryKeyPermissionCheck.ReadSubTree),
-                secAttrs,
-                out result,
-                out disposition,
-                safeTransactionHandle,
-                IntPtr.Zero
-                );
-
-            if (ret == 0 && !result.IsInvalid)
-            {
-                TransactedRegistryKey key = new TransactedRegistryKey(result, (permissionCheck != RegistryKeyPermissionCheck.ReadSubTree), false,
-                                                                      Transaction.Current, safeTransactionHandle);
-                CheckSubTreePermission(subkey, permissionCheck);
-                key._checkMode = permissionCheck;
-
-                if (subkey.Length == 0)
-                    key._keyName = _keyName;
-                else
-                    key._keyName = _keyName + "\\" + subkey;
-                return key;
-            }
-            else if (ret != 0) // syscall failed, ret is an error code.
-                Win32Error(ret, _keyName + "\\" + subkey);  // Access denied?
-
-            BCLDebug.Assert(false, "Unexpected code path in RegistryKey::CreateSubKey");
-            return null;
-        }
-
-        /// <summary>
-        /// <para>Deletes the specified subkey. Will throw an exception if the subkey has
-        /// subkeys. To delete a tree of subkeys use, DeleteSubKeyTree.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name='subkey'>The subkey to delete.</param>
-        /// <exception cref="InvalidOperationException">Thrown if the subkey as child subkeys.</exception>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public void DeleteSubKey(string subkey)
-        {
-            DeleteSubKey(subkey, true);
-        }
-
-        /// <summary>
-        /// <para>Deletes the specified subkey. Will throw an exception if the subkey has
-        /// subkeys. To delete a tree of subkeys use, DeleteSubKeyTree.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name='subkey'>The subkey to delete.</param>
-        /// <param name='throwOnMissingSubKey'>Specify true if an ArgumentException should be thrown if
-        /// the specified subkey does not exist. If false is specified, a missing subkey does not throw
-        /// an exception.</param>
-        /// <exception cref="InvalidOperationException">Thrown if the subkey as child subkeys.</exception>
-        /// <exception cref="ArgumentException">Thrown if true is specified for throwOnMissingSubKey and the
-        /// specified subkey does not exist.</exception>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public void DeleteSubKey(string subkey, bool throwOnMissingSubKey)
-        {
-            ValidateKeyName(subkey);
-            EnsureWriteable();
-            subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
-            CheckSubKeyWritePermission(subkey);
-
-            // Open the key we are deleting and check for children. Be sure to
-            // explicitly call close to avoid keeping an extra HKEY open.
-            //
-            TransactedRegistryKey key = InternalOpenSubKey(subkey, false);
-            if (key != null)
-            {
-                try
-                {
-                    if (key.InternalSubKeyCount() > 0)
-                    {
-                        throw new InvalidOperationException(RegistryProviderStrings.InvalidOperation_RegRemoveSubKey);
-                    }
-                }
-                finally
-                {
-                    key.Close();
-                }
-
-                int ret = 0;
-
-                SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-                ret = Win32Native.RegDeleteKeyTransacted(_hkey, subkey, 0, 0, safeTransactionHandle, IntPtr.Zero);
-
-                if (ret != 0)
-                {
-                    if (ret == Win32Native.ERROR_FILE_NOT_FOUND)
-                    {
-                        if (throwOnMissingSubKey)
-                        {
-                            throw new ArgumentException(RegistryProviderStrings.ArgumentException_RegSubKeyAbsent);
-                        }
-                    }
-                    else
-                        Win32Error(ret, null);
-                }
-            }
-            else
-            { // there is no key which also means there is no subkey
-                if (throwOnMissingSubKey)
-                    throw new ArgumentException(RegistryProviderStrings.ArgumentException_RegSubKeyAbsent);
-            }
-        }
-
-        /// <summary>
-        /// <para>Recursively deletes a subkey and any child subkeys.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="subkey">The subkey to delete.</param>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public void DeleteSubKeyTree(string subkey)
-        {
-            ValidateKeyName(subkey);
-
-            // Security concern: Deleting a hive's "" subkey would delete all
-            // of that hive's contents.  Don't allow "".
-            if ((string.IsNullOrEmpty(subkey) || subkey.Length == 0) && IsSystemKey())
-            {
-                throw new ArgumentException(RegistryProviderStrings.ArgRegKeyDelHive);
-            }
-
-            EnsureWriteable();
-
-            int ret = 0;
-
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-            subkey = FixupName(subkey); // Fixup multiple slashes to a single slash
-            CheckSubTreeWritePermission(subkey);
-
-            TransactedRegistryKey key = InternalOpenSubKey(subkey, true);
-            if (key != null)
-            {
-                try
-                {
-                    if (key.InternalSubKeyCount() > 0)
-                    {
-                        string[] keys = key.InternalGetSubKeyNames();
-
-                        for (int i = 0; i < keys.Length; i++)
-                        {
-                            key.DeleteSubKeyTreeInternal(keys[i]);
-                        }
-                    }
-                }
-                finally
-                {
-                    key.Close();
-                }
-
-                ret = Win32Native.RegDeleteKeyTransacted(_hkey, subkey, 0, 0, safeTransactionHandle, IntPtr.Zero);
-                if (ret != 0) Win32Error(ret, null);
-            }
-            else
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSubKeyAbsent);
-            }
-        }
-
-        // An internal version which does no security checks or argument checking.  Skipping the
-        // security checks should give us a slight perf gain on large trees.
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private void DeleteSubKeyTreeInternal(string subkey)
-        {
-            int ret = 0;
-
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-            TransactedRegistryKey key = InternalOpenSubKey(subkey, true);
-            if (key != null)
-            {
-                try
-                {
-                    if (key.InternalSubKeyCount() > 0)
-                    {
-                        string[] keys = key.InternalGetSubKeyNames();
-
-                        for (int i = 0; i < keys.Length; i++)
-                        {
-                            key.DeleteSubKeyTreeInternal(keys[i]);
-                        }
-                    }
-                }
-                finally
-                {
-                    key.Close();
-                }
-
-                ret = Win32Native.RegDeleteKeyTransacted(_hkey, subkey, 0, 0, safeTransactionHandle, IntPtr.Zero);
-                if (ret != 0) Win32Error(ret, null);
-            }
-            else
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSubKeyAbsent);
-            }
-        }
-
-        /// <summary>
-        /// <para>Deletes the specified value from this key.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name of the value to delete.</param>
-        /// </summary>
-        [ResourceExposure(ResourceScope.None)]
-        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
-        public void DeleteValue(string name)
-        {
-            DeleteValue(name, true);
-        }
-
-        /// <summary>
-        /// <para>Deletes the specified value from this key.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name of the value to delete.</param>
-        /// <param name="throwOnMissingValue">Specify true if an ArgumentException should be thrown if
-        /// the specified value does not exist. If false is specified, a missing value does not throw
-        /// an exception.</param>
-        /// </summary>
-        [ResourceExposure(ResourceScope.None)]
-        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
-        public void DeleteValue(string name, bool throwOnMissingValue)
-        {
-            EnsureWriteable();
-            CheckValueWritePermission(name);
-            // Require a transaction. This will throw for "Base" keys because they aren't associated with a transaction.
-            VerifyTransaction();
-            int errorCode = Win32Native.RegDeleteValue(_hkey, name);
-
-            //
-            // From windows 2003 server, if the name is too long we will get error code ERROR_FILENAME_EXCED_RANGE
-            // This still means the name doesn't exist. We need to be consistent with previous OS.
-            //
-            if (errorCode == Win32Native.ERROR_FILE_NOT_FOUND || errorCode == Win32Native.ERROR_FILENAME_EXCED_RANGE)
-            {
-                if (throwOnMissingValue)
-                {
-                    throw new ArgumentException(RegistryProviderStrings.Arg_RegSubKeyValueAbsent);
-                }
-                else
-                {
-                    errorCode = Win32Native.ERROR_SUCCESS;
-                }
-            }
-
-            if (Win32Native.ERROR_SUCCESS != errorCode)
-            {
-                Win32Error(errorCode, null);
-            }
-        }
-
-        /**
-         * Retrieves a new TransactedRegistryKey that represents the requested key. Valid
-         * values are:
-         *
-         * HKEY_CLASSES_ROOT,
-         * HKEY_CURRENT_USER,
-         * HKEY_LOCAL_MACHINE,
-         * HKEY_USERS,
-         * HKEY_PERFORMANCE_DATA,
-         * HKEY_CURRENT_CONFIG,
-         * HKEY_DYN_DATA.
-         *
-         * @param hKey HKEY_* to open.
-         *
-         * @return the TransactedRegistryKey requested.
-         */
-        internal static TransactedRegistryKey GetBaseKey(IntPtr hKey)
-        {
-            int index = ((int)hKey) & 0x0FFFFFFF;
-            BCLDebug.Assert(index >= 0 && index < s_hkeyNames.Length, "index is out of range!");
-            BCLDebug.Assert((((int)hKey) & 0xFFFFFFF0) == 0x80000000, "Invalid hkey value!");
-
-            SafeRegistryHandle srh = new SafeRegistryHandle(hKey, false);
-
-            // For Base keys, there is no transaction associated with the HKEY.
-            TransactedRegistryKey key = new TransactedRegistryKey(srh, true, true, null, null);
-            key._checkMode = RegistryKeyPermissionCheck.Default;
-            key._keyName = s_hkeyNames[index];
-            return key;
-        }
-
-        /// <summary>
-        /// <para>Retrieves a subkey. If readonly is true, then the subkey is opened with
-        /// read-only access.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name or path of the subkey to open.</param>
-        /// <param name="writable">Set to true of you only need readonly access.</param>
-        /// <returns>The subkey requested or null if the operation failed.</returns>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey OpenSubKey(string name, bool writable)
-        {
-            ValidateKeyName(name);
-            EnsureNotDisposed();
-            name = FixupName(name); // Fixup multiple slashes to a single slash
-
-            CheckOpenSubKeyPermission(name, writable);
-            SafeRegistryHandle result = null;
-            int ret = 0;
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-
-            ret = RegOpenKeyTransactedWrapper(_hkey, name, 0, GetRegistryKeyAccess(writable), out result, safeTransactionHandle, IntPtr.Zero);
-
-            if (ret == 0 && !result.IsInvalid)
-            {
-                TransactedRegistryKey key = new TransactedRegistryKey(result, writable, false, Transaction.Current, safeTransactionHandle);
-                key._checkMode = GetSubKeyPermissionCheck(writable);
-                key._keyName = _keyName + "\\" + name;
-                return key;
-            }
-
-            // Return null if we didn't find the key.
-            if (ret == Win32Native.ERROR_ACCESS_DENIED || ret == Win32Native.ERROR_BAD_IMPERSONATION_LEVEL)
-            {
-                // We need to throw SecurityException here for compatibility reasons,
-                // although UnauthorizedAccessException will make more sense.
-                throw new SecurityException(RegistryProviderStrings.Security_RegistryPermission);
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// <para>Retrieves a subkey.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name or path of the subkey to open.</param>
-        /// <param name="permissionCheck">One of the Microsoft.Win32.RegistryKeyPermissionCheck values that specifies
-        /// whether the key is opened for read or read/write access.</param>
-        /// <returns>The subkey requested or null if the operation failed.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey OpenSubKey(string name, RegistryKeyPermissionCheck permissionCheck)
-        {
-            ValidateKeyMode(permissionCheck);
-            return InternalOpenSubKey(name, permissionCheck, GetRegistryKeyAccess(permissionCheck));
-        }
-
-        /// <summary>
-        /// <para>Retrieves a subkey.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name or path of the subkey to open.</param>
-        /// <param name="permissionCheck">One of the Microsoft.Win32.RegistryKeyPermissionCheck values that specifies
-        /// whether the key is opened for read or read/write access.</param>
-        /// <param name="rights">A bitwise combination of Microsoft.Win32.RegistryRights values that specifies the desired security access.</param>
-        /// <returns>The subkey requested or null if the operation failed.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey OpenSubKey(string name, RegistryKeyPermissionCheck permissionCheck, RegistryRights rights)
-        {
-            return InternalOpenSubKey(name, permissionCheck, (int)rights);
-        }
-
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private TransactedRegistryKey InternalOpenSubKey(string name, RegistryKeyPermissionCheck permissionCheck, int rights)
-        {
-            ValidateKeyName(name);
-            ValidateKeyMode(permissionCheck);
-            ValidateKeyRights(rights);
-            EnsureNotDisposed();
-            name = FixupName(name); // Fixup multiple slashes to a single slash
-
-            CheckOpenSubKeyPermission(name, permissionCheck);
-            SafeRegistryHandle result = null;
-            int ret = 0;
-
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-
-            ret = RegOpenKeyTransactedWrapper(_hkey, name, 0, rights, out result, safeTransactionHandle, IntPtr.Zero);
-
-            if (ret == 0 && !result.IsInvalid)
-            {
-                TransactedRegistryKey key = new TransactedRegistryKey(result, (permissionCheck == RegistryKeyPermissionCheck.ReadWriteSubTree), false,
-                                                                      Transaction.Current, safeTransactionHandle);
-                key._keyName = _keyName + "\\" + name;
-                key._checkMode = permissionCheck;
-                return key;
-            }
-
-            // Return null if we didn't find the key.
-            if (ret == Win32Native.ERROR_ACCESS_DENIED || ret == Win32Native.ERROR_BAD_IMPERSONATION_LEVEL)
-            {
-                // We need to throw SecurityException here for compatibility reason,
-                // although UnauthorizedAccessException will make more sense.
-                throw new SecurityException(RegistryProviderStrings.Security_RegistryPermission);
-            }
-
-            return null;
-        }
-
-        // This required no security checks. This is to get around the Deleting SubKeys which only require
-        // write permission. They call OpenSubKey which required read. Now instead call this function w/o security checks
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        internal TransactedRegistryKey InternalOpenSubKey(string name, bool writable)
-        {
-            ValidateKeyName(name);
-            EnsureNotDisposed();
-
-            int winAccess = GetRegistryKeyAccess(writable);
-            SafeRegistryHandle result = null;
-            int ret = 0;
-            SafeTransactionHandle safeTransactionHandle = GetTransactionHandle();
-
-            ret = RegOpenKeyTransactedWrapper(_hkey, name, 0, winAccess, out result, safeTransactionHandle, IntPtr.Zero);
-
-            if (ret == 0 && !result.IsInvalid)
-            {
-                TransactedRegistryKey key = new TransactedRegistryKey(result, writable, false, Transaction.Current, safeTransactionHandle);
-                key._keyName = _keyName + "\\" + name;
-                return key;
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// <para>Retrieves a subkey for readonly access.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name or path of the subkey to open.</param>
-        /// <returns>The subkey requested or null if the operation failed.</returns>
-        /// </summary>
-        [ResourceExposure(ResourceScope.Machine)]
-        [ResourceConsumption(ResourceScope.Machine)]
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public TransactedRegistryKey OpenSubKey(string name)
-        {
-            return OpenSubKey(name, false);
-        }
-
-        /// <summary>
-        /// <para>Retrieves the count of subkeys.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <returns>The count of subkeys.</returns>
-        /// </summary>
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public int SubKeyCount
-        {
-            get
-            {
-                CheckKeyReadPermission();
-                return InternalSubKeyCount();
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        internal int InternalSubKeyCount()
-        {
-            EnsureNotDisposed();
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-
-            int subkeys = 0;
-            int junk = 0;
-            int ret = Win32Native.RegQueryInfoKey(_hkey,
-                                      null,
-                                      null,
-                                      Win32Native.NULL,
-                                      ref subkeys,  // subkeys
-                                      null,
-                                      null,
-                                      ref junk,     // values
-                                      null,
-                                      null,
-                                      null,
-                                      null);
-
-            if (ret != 0)
-                Win32Error(ret, null);
-            return subkeys;
-        }
-
-        /// <summary>
-        /// <para>Retrieves an array of strings containing all the subkey names.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <returns>A string array containing all the subkey names.</returns>
-        /// </summary>
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        public string[] GetSubKeyNames()
-        {
-            CheckKeyReadPermission();
-            return InternalGetSubKeyNames();
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        internal string[] InternalGetSubKeyNames()
-        {
-            EnsureNotDisposed();
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-            int subkeys = InternalSubKeyCount();
-            string[] names = new string[subkeys];  // Returns 0-length array if empty.
-
-            if (subkeys > 0)
-            {
-                StringBuilder name = new StringBuilder(256);
-                int namelen;
-
-                for (int i = 0; i < subkeys; i++)
-                {
-                    namelen = name.Capacity; // Don't remove this. The API's doesn't work if this is not properly initialised.
-                    int ret = Win32Native.RegEnumKeyEx(_hkey,
-                        i,
-                        name,
-                        out namelen,
-                        null,
-                        null,
-                        null,
-                        null);
-                    if (ret != 0)
-                        Win32Error(ret, null);
-                    names[i] = name.ToString();
-                }
-            }
-
-            return names;
-        }
-
-        /// <summary>
-        /// <para>Retrieves the count of values.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <returns>A count of values.</returns>
-        /// </summary>
-        public int ValueCount
-        {
-            get
-            {
-                CheckKeyReadPermission();
-                return InternalValueCount();
-            }
-        }
-
-        internal int InternalValueCount()
-        {
-            EnsureNotDisposed();
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-            int values = 0;
-            int junk = 0;
-            int ret = Win32Native.RegQueryInfoKey(_hkey,
-                                      null,
-                                      null,
-                                      Win32Native.NULL,
-                                      ref junk,     // subkeys
-                                      null,
-                                      null,
-                                      ref values,   // values
-                                      null,
-                                      null,
-                                      null,
-                                      null);
-            if (ret != 0)
-                Win32Error(ret, null);
-            return values;
-        }
-
-        /// <summary>
-        /// <para>Retrieves an array of strings containing all the value names.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <returns>All the value names.</returns>
-        /// </summary>
-        public string[] GetValueNames()
-        {
-            CheckKeyReadPermission();
-            EnsureNotDisposed();
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-
-            int values = InternalValueCount();
-            string[] names = new string[values];
-
-            if (values > 0)
-            {
-                StringBuilder name = new StringBuilder(256);
-                int namelen;
-                int currentlen;
-                int ret;
-
-                for (int i = 0; i < values; i++)
-                {
-                    currentlen = name.Capacity;
-                    ret = Win32Native.ERROR_MORE_DATA;
-
-                    // loop while we get error_more_data or until we have exceeded
-                    // the max name length.
-                    while (Win32Native.ERROR_MORE_DATA == ret)
-                    {
-                        namelen = currentlen;
-                        ret = Win32Native.RegEnumValue(_hkey,
-                            i,
-                            name,
-                            ref namelen,
-                            Win32Native.NULL,
-                            null,
-                            null,
-                            null);
-
-                        if (ret != 0)
-                        {
-                            if (ret != Win32Native.ERROR_MORE_DATA)
-                                Win32Error(ret, null);
-
-                            // We got ERROR_MORE_DATA. Let's see if we can make the buffer
-                            // bigger.
-                            if (MaxValueNameLength == currentlen)
-                                Win32Error(ret, null);
-
-                            currentlen = currentlen * 2;
-                            if (MaxValueNameLength < currentlen)
-                                currentlen = MaxValueNameLength;
-
-                            // Allocate a new buffer.
-                            name = new StringBuilder(currentlen);
-                        }
-                    }
-
-                    names[i] = name.ToString();
-                }
-            }
-
-            return names;
-        }
-
-        /// <summary>
-        /// <para>Retrieves the specified value. null is returned if the value
-        /// doesn't exist. Utilizes Transaction.Current for its transaction.</para>
-        /// <para>Note that name can be null or "", at which point the
-        /// unnamed or default value of this Registry key is returned, if any.</para>
-        /// <param name="name">Name of value to retrieve.</param>
-        /// <returns>The data associated with the value.</returns>
-        /// </summary>
-        public object GetValue(string name)
-        {
-            CheckValueReadPermission(name);
-            return InternalGetValue(name, null, false, true);
-        }
-
-        /// <summary>
-        /// <para>Retrieves the specified value. null is returned if the value
-        /// doesn't exist. Utilizes Transaction.Current for its transaction.</para>
-        /// <para>Note that name can be null or "", at which point the
-        /// unnamed or default value of this Registry key is returned, if any.</para>
-        /// <param name="name">Name of value to retrieve.</param>
-        /// <param name="defaultValue">Value to return if name doesn't exist.</param>
-        /// <returns>The data associated with the value.</returns>
-        /// </summary>
-        public object GetValue(string name, object defaultValue)
-        {
-            CheckValueReadPermission(name);
-            return InternalGetValue(name, defaultValue, false, true);
-        }
-
-        /// <summary>
-        /// <para>Retrieves the specified value. null is returned if the value
-        /// doesn't exist. Utilizes Transaction.Current for its transaction.</para>
-        /// <para>Note that name can be null or "", at which point the
-        /// unnamed or default value of this Registry key is returned, if any.</para>
-        /// <param name="name">Name of value to retrieve.</param>
-        /// <param name="defaultValue">Value to return if name doesn't exist.</param>
-        /// <param name="options">One of the Microsoft.Win32.RegistryValueOptions values that specifies
-        /// optional processing of the retrieved value.</param>
-        /// <returns>The data associated with the value.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        public object GetValue(string name, object defaultValue, RegistryValueOptions options)
-        {
-            if (options < RegistryValueOptions.None || options > RegistryValueOptions.DoNotExpandEnvironmentNames)
-            {
-                string resourceTemplate = RegistryProviderStrings.Arg_EnumIllegalVal;
-                string resource = string.Format(CultureInfo.CurrentCulture, resourceTemplate, options.ToString());
-                throw new ArgumentException(resource);
-            }
-
-            bool doNotExpand = (options == RegistryValueOptions.DoNotExpandEnvironmentNames);
-            CheckValueReadPermission(name);
-            return InternalGetValue(name, defaultValue, doNotExpand, true);
-        }
-
-        internal object InternalGetValue(string name, object defaultValue, bool doNotExpand, bool checkSecurity)
-        {
-            if (checkSecurity)
-            {
-                // Name can be null!  It's the most common use of RegQueryValueEx
-                EnsureNotDisposed();
-            }
-
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-
-            object data = defaultValue;
-            int type = 0;
-            int datasize = 0;
-
-            int ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, (byte[])null, ref datasize);
-
-            if (ret != 0)
-            {
-                // For stuff like ERROR_FILE_NOT_FOUND, we want to return null (data).
-                // Some OS's returned ERROR_MORE_DATA even in success cases, so we
-                // want to continue on through the function.
-                if (ret != Win32Native.ERROR_MORE_DATA)
-                    return data;
-            }
-
-            switch (type)
-            {
-                case Win32Native.REG_DWORD_BIG_ENDIAN:
-                case Win32Native.REG_BINARY:
-                    {
-                        byte[] blob = new byte[datasize];
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, blob, ref datasize);
-                        data = blob;
-                    }
-
-                    break;
-                case Win32Native.REG_QWORD:
-                    {    // also REG_QWORD_LITTLE_ENDIAN
-                        if (datasize > 8)
-                        {
-                            // prevent an AV in the edge case that datasize is larger than sizeof(long)
-                            goto case Win32Native.REG_BINARY;
-                        }
-
-                        long blob = 0;
-                        BCLDebug.Assert(datasize == 8, "datasize==8");
-                        // Here, datasize must be 8 when calling this
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, ref blob, ref datasize);
-
-                        data = blob;
-                    }
-
-                    break;
-                case Win32Native.REG_DWORD:
-                    {    // also REG_DWORD_LITTLE_ENDIAN
-                        if (datasize > 4)
-                        {
-                            // prevent an AV in the edge case that datasize is larger than sizeof(int)
-                            goto case Win32Native.REG_QWORD;
-                        }
-
-                        int blob = 0;
-                        BCLDebug.Assert(datasize == 4, "datasize==4");
-                        // Here, datasize must be four when calling this
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, ref blob, ref datasize);
-
-                        data = blob;
-                    }
-
-                    break;
-
-                case Win32Native.REG_SZ:
-                    {
-                        StringBuilder blob = new StringBuilder(datasize / 2);
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, blob, ref datasize);
-                        data = blob.ToString();
-                    }
-
-                    break;
-
-                case Win32Native.REG_EXPAND_SZ:
-                    {
-                        StringBuilder blob = new StringBuilder(datasize / 2);
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, blob, ref datasize);
-                        if (doNotExpand)
-                            data = blob.ToString();
-                        else
-                            data = Environment.ExpandEnvironmentVariables(blob.ToString());
-                    }
-
-                    break;
-                case Win32Native.REG_MULTI_SZ:
-                    {
-                        IList<string> strings = new List<string>();
-
-                        char[] blob = new char[datasize / 2];
-                        ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, blob, ref datasize);
-
-                        int cur = 0;
-                        int len = blob.Length;
-
-                        while (ret == 0 && cur < len)
-                        {
-                            int nextNull = cur;
-                            while (nextNull < len && blob[nextNull] != (char)0)
-                            {
-                                nextNull++;
-                            }
-
-                            if (nextNull < len)
-                            {
-                                BCLDebug.Assert(blob[nextNull] == (char)0, "blob[nextNull] should be 0");
-                                if (nextNull - cur > 0)
-                                {
-                                    strings.Add(new string(blob, cur, nextNull - cur));
-                                }
-                                else
-                                {
-                                    // we found an empty string.  But if we're at the end of the data,
-                                    // it's just the extra null terminator.
-                                    if (nextNull != len - 1)
-                                        strings.Add(string.Empty);
-                                }
-                            }
-                            else
-                            {
-                                strings.Add(new string(blob, cur, len - cur));
-                            }
-
-                            cur = nextNull + 1;
-                        }
-
-                        data = new string[strings.Count];
-                        strings.CopyTo((string[])data, 0);
-                        // data = strings.GetAllItems(String.class);
-                    }
-
-                    break;
-                case Win32Native.REG_NONE:
-                case Win32Native.REG_LINK:
-                default:
-                    break;
-            }
-
-            return data;
-        }
-
-        /// <summary>
-        /// <para>Retrieves the registry data type of the value associated with the specified name.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">The value name whose data type is to be retrieved.</param>
-        /// <returns>A RegistryValueKind value representing the registry data type of the value associated with name.</returns>
-        /// </summary>
-        [ComVisible(false)]
-        public RegistryValueKind GetValueKind(string name)
-        {
-            CheckValueReadPermission(name);
-            EnsureNotDisposed();
-
-            int type = 0;
-            int datasize = 0;
-            int ret = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, (byte[])null, ref datasize);
-            if (ret != 0)
-                Win32Error(ret, null);
-
-            if (!Enum.IsDefined(typeof(RegistryValueKind), type))
-                return RegistryValueKind.Unknown;
-            else
-                return (RegistryValueKind)type;
-        }
-
-        /**
-         * Retrieves the current state of the dirty property.
-         *
-         * A key is marked as dirty if any operation has occured that modifies the
-         * contents of the key.
-         *
-         * @return <b>true</b> if the key has been modified.
-         */
-        private bool IsDirty()
-        {
-            return (_state & STATE_DIRTY) != 0;
-        }
-
-        private bool IsSystemKey()
-        {
-            return (_state & STATE_SYSTEMKEY) != 0;
-        }
-
-        private bool IsWritable()
-        {
-            return (_state & STATE_WRITEACCESS) != 0;
-        }
-
-        /// <summary>
-        /// <para>Retrieves the name of the key.</para>
-        /// <returns>The name of the key.</returns>
-        /// </summary>
-        public string Name
-        {
-            get
-            {
-                EnsureNotDisposed();
-                return _keyName;
-            }
-        }
-
-        private void SetDirty()
-        {
-            _state |= STATE_DIRTY;
-        }
-
-        /// <summary>
-        /// <para>Sets the specified value. Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name of value to store data in.</param>
-        /// <param name="value">Data to store.</param>
-        /// </summary>
-        public void SetValue(string name, object value)
-        {
-            SetValue(name, value, RegistryValueKind.Unknown);
-        }
-
-        /// <summary>
-        /// <para>Sets the specified value. Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="name">Name of value to store data in.</param>
-        /// <param name="value">Data to store.</param>
-        /// <param name="valueKind">The registry data type to use when storing the data.</param>
-        /// </summary>
-        [ComVisible(false)]
-        public unsafe void SetValue(string name, object value, RegistryValueKind valueKind)
-        {
-            if (value == null)
-                throw new ArgumentNullException(RegistryProviderStrings.Arg_Value);
-
-            if (name != null && name.Length > MaxValueNameLength)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegValueNameStrLenBug);
-            }
-
-            if (!Enum.IsDefined(typeof(RegistryValueKind), valueKind))
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegBadKeyKind);
-
-            EnsureWriteable();
-
-            // Require a transaction. This will throw for "Base" keys because they aren't associated with a transaction.
-            VerifyTransaction();
-
-            if (ContainsRegistryValue(name))
-            { // Existing key
-                CheckValueWritePermission(name);
-            }
-            else
-            { // Creating a new value
-                CheckValueCreatePermission(name);
-            }
-
-            if (valueKind == RegistryValueKind.Unknown)
-            {
-                // this is to maintain compatibility with the old way of autodetecting the type.
-                // SetValue(string, object) will come through this codepath.
-                valueKind = CalculateValueKind(value);
-            }
-
-            int ret = 0;
-            try
-            {
-                switch (valueKind)
-                {
-                    case RegistryValueKind.ExpandString:
-                    case RegistryValueKind.String:
-                        {
-                            string data = value.ToString();
-                            // divide by 2 to account for unicode.
-                            if (MaxValueDataLength / 2 < data.Length)
-                            {
-                                throw new ArgumentException(RegistryProviderStrings.Arg_ValueDataLenBug);
-                            }
-
-                            ret = Win32Native.RegSetValueEx(_hkey,
-                                name,
-                                0,
-                                valueKind,
-                                data,
-                                data.Length * 2 + 2);
-                            break;
-                        }
-
-                    case RegistryValueKind.MultiString:
-                        {
-                            // Other thread might modify the input array after we calculate the buffer length.
-                            // Make a copy of the input array to be safe.
-                            string[] dataStrings = (string[])(((string[])value).Clone());
-
-                            int sizeInBytes = 0;
-
-                            // First determine the size of the array
-                            //
-                            for (int i = 0; i < dataStrings.Length; i++)
-                            {
-                                if (dataStrings[i] == null)
-                                {
-                                    throw new ArgumentException(RegistryProviderStrings.Arg_RegSetStrArrNull);
-                                }
-
-                                sizeInBytes += (dataStrings[i].Length + 1) * 2;
-                            }
-
-                            sizeInBytes += 2;
-
-                            if (MaxValueDataLength < sizeInBytes)
-                            {
-                                throw new ArgumentException(RegistryProviderStrings.Arg_ValueDataLenBug);
-                            }
-
-                            byte[] basePtr = new byte[sizeInBytes];
-                            fixed (byte* b = basePtr)
-                            {
-                                int totalBytesMoved = 0;
-                                int currentBytesMoved = 0;
-
-                                // Write out the strings...
-                                //
-                                for (int i = 0; i < dataStrings.Length; i++)
-                                {
-                                    currentBytesMoved = System.Text.Encoding.Unicode.GetBytes(dataStrings[i], 0, dataStrings[i].Length, basePtr, totalBytesMoved);
-                                    totalBytesMoved += currentBytesMoved;
-                                    basePtr[totalBytesMoved] = 0;
-                                    basePtr[totalBytesMoved + 1] = 0;
-                                    totalBytesMoved += 2;
-                                }
-
-                                ret = Win32Native.RegSetValueEx(_hkey,
-                                    name,
-                                    0,
-                                    RegistryValueKind.MultiString,
-                                    basePtr,
-                                    sizeInBytes);
-                            }
-
-                            break;
-                        }
-
-                    case RegistryValueKind.Binary:
-                        byte[] dataBytes = (byte[])value;
-                        if (MaxValueDataLength < dataBytes.Length)
-                        {
-                            throw new ArgumentException(RegistryProviderStrings.Arg_ValueDataLenBug);
-                        }
-
-                        ret = Win32Native.RegSetValueEx(_hkey,
-                            name,
-                            0,
-                            RegistryValueKind.Binary,
-                            dataBytes,
-                            dataBytes.Length);
-                        break;
-
-                    case RegistryValueKind.DWord:
-                        {
-                            // We need to use Convert here because we could have a boxed type cannot be
-                            // unboxed and cast at the same time.  I.e. ((int)(object)(short) 5) will fail.
-                            int data = Convert.ToInt32(value, System.Globalization.CultureInfo.InvariantCulture);
-
-                            ret = Win32Native.RegSetValueEx(_hkey,
-                                name,
-                                0,
-                                RegistryValueKind.DWord,
-                                ref data,
-                                4);
-                            break;
-                        }
-
-                    case RegistryValueKind.QWord:
-                        {
-                            long data = Convert.ToInt64(value, System.Globalization.CultureInfo.InvariantCulture);
-
-                            ret = Win32Native.RegSetValueEx(_hkey,
-                                name,
-                                0,
-                                RegistryValueKind.QWord,
-                                ref data,
-                                8);
-                            break;
-                        }
-                }
-            }
-            catch (OverflowException)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSetMismatchedKind);
-            }
-            catch (InvalidOperationException)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSetMismatchedKind);
-            }
-            catch (FormatException)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSetMismatchedKind);
-            }
-            catch (InvalidCastException)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegSetMismatchedKind);
-            }
-
-            if (ret == 0)
-            {
-                SetDirty();
-            }
-            else
-                Win32Error(ret, null);
-        }
-
-        private RegistryValueKind CalculateValueKind(object value)
-        {
-            // This logic matches what used to be in SetValue(string name, object value) in the v1.0 and v1.1 days.
-            // Even though we could add detection for an int64 in here, we want to maintain compatibility with the
-            // old behavior.
-            if (value is Int32)
-                return RegistryValueKind.DWord;
-            else if (value is Array)
-            {
-                if (value is byte[])
-                    return RegistryValueKind.Binary;
-                else if (value is string[])
-                    return RegistryValueKind.MultiString;
-                else
-                {
-                    string resourceTemplate = RegistryProviderStrings.Arg_RegSetBadArrType;
-                    string resource = string.Format(CultureInfo.CurrentCulture, resourceTemplate, value.GetType().Name);
-                    throw new ArgumentException(resource);
-                }
-            }
-            else
-                return RegistryValueKind.String;
-        }
-
-        /**
-         * Retrieves a string representation of this key.
-         *
-         * @return a string representing the key.
-         */
-        /// <summary>
-        /// <para>Retrieves a string representation of this key.</para>
-        /// <returns>A string representing the key.</returns>
-        /// </summary>
-        public override string ToString()
-        {
-            EnsureNotDisposed();
-            return _keyName;
-        }
-
-        /// <summary>
-        /// <para>Returns the access control security for the current registry key.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <returns>A TransactedRegistrySecurity object that describes the access control
-        /// permissions on the registry key represented by the current TransactedRegistryKey.</returns>
-        /// </summary>
-        public TransactedRegistrySecurity GetAccessControl()
-        {
-            return GetAccessControl(AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
-        }
-
-        /// <summary>
-        /// <para>Returns the access control security for the current registry key.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="includeSections">A bitwise combination of AccessControlSections values that specifies the type of security information to get.</param>
-        /// <returns>A TransactedRegistrySecurity object that describes the access control
-        /// permissions on the registry key represented by the current TransactedRegistryKey.</returns>
-        /// </summary>
-        public TransactedRegistrySecurity GetAccessControl(AccessControlSections includeSections)
-        {
-            EnsureNotDisposed();
-            // Don't require a transaction. We don't want to throw for "Base" keys.
-            return new TransactedRegistrySecurity(_hkey, _keyName, includeSections);
-        }
-
-        /// <summary>
-        /// <para>Applies Windows access control security to an existing registry key.
-        /// Utilizes Transaction.Current for its transaction.</para>
-        /// <param name="registrySecurity">A TransactedRegistrySecurity object that specifies the access control security to apply to the current subkey.</param>
-        /// </summary>
-        public void SetAccessControl(TransactedRegistrySecurity registrySecurity)
-        {
-            EnsureWriteable();
-            if (registrySecurity == null)
-                throw new ArgumentNullException("registrySecurity");
-            // Require a transaction. This will throw for "Base" keys because they aren't associated with a transaction.
-            VerifyTransaction();
-
-            registrySecurity.Persist(_hkey, _keyName);
-        }
-
-        /**
-         * After calling GetLastWin32Error(), it clears the last error field,
-         * so you must save the HResult and pass it to this method.  This method
-         * will determine the appropriate exception to throw dependent on your
-         * error, and depending on the error, insert a string into the message
-         * gotten from the ResourceManager.
-         */
-        internal void Win32Error(int errorCode, string str)
-        {
-            switch (errorCode)
-            {
-                case Win32Native.ERROR_ACCESS_DENIED:
-                    if (str != null)
-                    {
-                        string resourceTemplate = RegistryProviderStrings.UnauthorizedAccess_RegistryKeyGeneric_Key;
-                        string resource = string.Format(CultureInfo.CurrentCulture, resourceTemplate, str);
-                        throw new UnauthorizedAccessException(resource);
-                    }
-                    else
-                        throw new UnauthorizedAccessException();
-
-                case Win32Native.ERROR_INVALID_HANDLE:
-                    // **
-                    // * For normal RegistryKey instances we dispose the SafeRegHandle and throw IOException.
-                    // * However, for HKEY_PERFORMANCE_DATA (on a local or remote machine) we avoid disposing the
-                    // * SafeRegHandle and only throw the IOException.  This is to workaround reentrancy issues
-                    // * in PerformanceCounter.NextValue() where the API could throw {NullReference, ObjectDisposed, ArgumentNull}Exception
-                    // * on reentrant calls because of this error code path in RegistryKey
-                    // *
-                    // * Normally we'd make our caller synchronize access to a shared RegistryKey instead of doing something like this,
-                    // * however we shipped PerformanceCounter.NextValue() un-synchronized in v2.0RTM and customers have taken a dependency on
-                    // * this behavior (being able to simultaneously query multiple remote-machine counters on multiple threads, instead of
-                    // * having serialized access).
-                    // *
-                    // * FUTURE: Consider changing PerformanceCounterLib to handle its own Win32 RegistryKey API calls instead of depending
-                    // * on Microsoft.Win32.RegistryKey, so that RegistryKey can be clean of special-cases for HKEY_PERFORMANCE_DATA.
-                    //
-                    _hkey.SetHandleAsInvalid();
-                    _hkey = null;
-                    goto default;
-
-                case Win32Native.ERROR_FILE_NOT_FOUND:
-                    {
-                        string resourceTemplate = RegistryProviderStrings.Arg_RegKeyNotFound;
-                        string resource = string.Format(CultureInfo.CurrentCulture, resourceTemplate, errorCode.ToString(System.Globalization.CultureInfo.InvariantCulture));
-                        throw new IOException(resource);
-                    }
-
-                default:
-                    throw new IOException(Win32Native.GetMessage(errorCode), errorCode);
-            }
-        }
-
-        internal static void Win32ErrorStatic(int errorCode, string str)
-        {
-            switch (errorCode)
-            {
-                case Win32Native.ERROR_ACCESS_DENIED:
-                    if (str != null)
-                    {
-                        string resourceTemplate = RegistryProviderStrings.UnauthorizedAccess_RegistryKeyGeneric_Key;
-                        string resource = string.Format(CultureInfo.CurrentCulture, resourceTemplate, str);
-                        throw new UnauthorizedAccessException(resource);
-                    }
-                    else
-                        throw new UnauthorizedAccessException();
-
-                default:
-                    throw new IOException(Win32Native.GetMessage(errorCode), errorCode);
-            }
-        }
-
-        internal static string FixupName(string name)
-        {
-            BCLDebug.Assert(name != null, "[FixupName]name!=null");
-            if (name.Contains('\\'))
-                return name;
-
-            StringBuilder sb = new StringBuilder(name);
-            FixupPath(sb);
-            int temp = sb.Length - 1;
-            if (sb[temp] == '\\') // Remove trailing slash
-                sb.Length = temp;
-            return sb.ToString();
-        }
-
-        private static void FixupPath(StringBuilder path)
-        {
-            int length = path.Length;
-            bool fixup = false;
-            char markerChar = (char)0xFFFF;
-
-            int i = 1;
-            while (i < length - 1)
-            {
-                if (path[i] == '\\')
-                {
-                    i++;
-                    while (i < length)
-                    {
-                        if (path[i] == '\\')
-                        {
-                            path[i] = markerChar;
-                            i++;
-                            fixup = true;
-                        }
-                        else
-                            break;
-                    }
-                }
-
-                i++;
-            }
-
-            if (fixup)
-            {
-                i = 0;
-                int j = 0;
-                while (i < length)
-                {
-                    if (path[i] == markerChar)
-                    {
-                        i++;
-                        continue;
-                    }
-
-                    path[j] = path[i];
-                    i++;
-                    j++;
-                }
-
-                path.Length += j - i;
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private void CheckOpenSubKeyPermission(string subkeyName, bool subKeyWritable)
-        {
-            // If the parent key is not opened under default mode, we have access already.
-            // If the parent key is opened under default mode, we need to check for permission.
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                CheckSubKeyReadPermission(subkeyName);
-            }
-
-            if (subKeyWritable && (_checkMode == RegistryKeyPermissionCheck.ReadSubTree))
-            {
-                CheckSubTreeReadWritePermission(subkeyName);
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private void CheckOpenSubKeyPermission(string subkeyName, RegistryKeyPermissionCheck subKeyCheck)
-        {
-            if (subKeyCheck == RegistryKeyPermissionCheck.Default)
-            {
-                if (_checkMode == RegistryKeyPermissionCheck.Default)
-                {
-                    CheckSubKeyReadPermission(subkeyName);
-                }
-            }
-
-            CheckSubTreePermission(subkeyName, subKeyCheck);
-        }
-
-        private void CheckSubTreePermission(string subkeyName, RegistryKeyPermissionCheck subKeyCheck)
-        {
-            if (subKeyCheck == RegistryKeyPermissionCheck.ReadSubTree)
-            {
-                if (_checkMode == RegistryKeyPermissionCheck.Default)
-                {
-                    CheckSubTreeReadPermission(subkeyName);
-                }
-            }
-            else if (subKeyCheck == RegistryKeyPermissionCheck.ReadWriteSubTree)
-            {
-                if (_checkMode != RegistryKeyPermissionCheck.ReadWriteSubTree)
-                {
-                    CheckSubTreeReadWritePermission(subkeyName);
-                }
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        // Suppressed because keyName and subkeyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubKeyWritePermission(string subkeyName)
-        {
-            BCLDebug.Assert(_checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating sub key under read-only key!");
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                // If we want to open a subkey of a read-only key as writeable, we need to do the check.
-                new RegistryPermission(RegistryPermissionAccess.Write, _keyName + "\\" + subkeyName + "\\.").Demand();
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        // Suppressed because keyName and subkeyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubKeyReadPermission(string subkeyName)
-        {
-            BCLDebug.Assert(_checkMode == RegistryKeyPermissionCheck.Default, "Should be called from a key opened under default mode only!");
-            new RegistryPermission(RegistryPermissionAccess.Read, _keyName + "\\" + subkeyName + "\\.").Demand();
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        // Suppressed because keyName and subkeyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubKeyCreatePermission(string subkeyName)
-        {
-            BCLDebug.Assert(_checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating sub key under read-only key!");
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                new RegistryPermission(RegistryPermissionAccess.Create, _keyName + "\\" + subkeyName + "\\.").Demand();
-            }
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        // Suppressed because keyName and subkeyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubTreeReadPermission(string subkeyName)
-        {
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                new RegistryPermission(RegistryPermissionAccess.Read, _keyName + "\\" + subkeyName + "\\").Demand();
-            }
-        }
-
-        // Suppressed because keyName and subkeyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubTreeWritePermission(string subkeyName)
-        {
-            BCLDebug.Assert(_checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow writing value to read-only key!");
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                new RegistryPermission(RegistryPermissionAccess.Write, _keyName + "\\" + subkeyName + "\\").Demand();
-            }
-        }
-
-        // Suppressed because keyName and valueName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckSubTreeReadWritePermission(string subkeyName)
-        {
-            // If we want to open a subkey of a read-only key as writeable, we need to do the check.
-            new RegistryPermission(RegistryPermissionAccess.Write | RegistryPermissionAccess.Read,
-                    _keyName + "\\" + subkeyName).Demand();
-        }
-
-        // Suppressed because keyName and valueName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckValueWritePermission(string valueName)
-        {
-            BCLDebug.Assert(_checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow writing value to read-only key!");
-            // skip the security check if the key is opened under write mode
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                new RegistryPermission(RegistryPermissionAccess.Write, _keyName + "\\" + valueName).Demand();
-            }
-        }
-
-        // Suppressed because keyName and valueName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckValueCreatePermission(string valueName)
-        {
-            BCLDebug.Assert(_checkMode != RegistryKeyPermissionCheck.ReadSubTree, "We shouldn't allow creating value under read-only key!");
-            // skip the security check if the key is opened under write mode
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                new RegistryPermission(RegistryPermissionAccess.Create, _keyName + "\\" + valueName).Demand();
-            }
-        }
-
-        // Suppressed because keyName and valueName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckValueReadPermission(string valueName)
-        {
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                // only need to check for default mode (dynamic check)
-                new RegistryPermission(RegistryPermissionAccess.Read, _keyName + "\\" + valueName).Demand();
-            }
-        }
-
-        // Suppressed because keyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        private void CheckKeyReadPermission()
-        {
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                // only need to check for default mode (dynamic check)
-                new RegistryPermission(RegistryPermissionAccess.Read, _keyName + "\\.").Demand();
-            }
-        }
-
-        private bool ContainsRegistryValue(string name)
-        {
-            int type = 0;
-            int datasize = 0;
-            int retval = Win32Native.RegQueryValueEx(_hkey, name, null, ref type, (byte[])null, ref datasize);
-            return retval == 0;
-        }
-
-        private void EnsureNotDisposed()
-        {
-            if (_hkey == null)
-            {
-                throw new ObjectDisposedException(_keyName,
-                                  RegistryProviderStrings.ObjectDisposed_RegKeyClosed);
-            }
-        }
-
-        private void EnsureWriteable()
-        {
-            EnsureNotDisposed();
-            if (!IsWritable())
-            {
-                throw new UnauthorizedAccessException(RegistryProviderStrings.UnauthorizedAccess_RegistryNoWrite);
-            }
-        }
-
-        private static int GetRegistryKeyAccess(bool isWritable)
-        {
-            int winAccess;
-            if (!isWritable)
-            {
-                winAccess = Win32Native.KEY_READ;
-            }
-            else
-            {
-                winAccess = Win32Native.KEY_READ | Win32Native.KEY_WRITE;
-            }
-
-            return winAccess;
-        }
-
-        private static int GetRegistryKeyAccess(RegistryKeyPermissionCheck mode)
-        {
-            int winAccess = 0;
-            switch (mode)
-            {
-                case RegistryKeyPermissionCheck.ReadSubTree:
-                case RegistryKeyPermissionCheck.Default:
-                    winAccess = Win32Native.KEY_READ;
-                    break;
-
-                case RegistryKeyPermissionCheck.ReadWriteSubTree:
-                    winAccess = Win32Native.KEY_READ | Win32Native.KEY_WRITE;
-                    break;
-
-                default:
-                    BCLDebug.Assert(false, "unexpected code path");
-                    break;
-            }
-
-            return winAccess;
-        }
-
-        // Suppressed to be consistent with naming in Microsoft.Win32.RegistryKey
-        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly")]
-        private RegistryKeyPermissionCheck GetSubKeyPermissionCheck(bool subkeyWritable)
-        {
-            if (_checkMode == RegistryKeyPermissionCheck.Default)
-            {
-                return _checkMode;
-            }
-
-            if (subkeyWritable)
-            {
-                return RegistryKeyPermissionCheck.ReadWriteSubTree;
-            }
-            else
-            {
-                return RegistryKeyPermissionCheck.ReadSubTree;
-            }
-        }
-
-        private static void ValidateKeyName(string name)
-        {
-            if (name == null)
-            {
-                throw new ArgumentNullException(RegistryProviderStrings.Arg_Name);
-            }
-
-            int nextSlash = name.IndexOf('\\');
-            int current = 0;
-            while (nextSlash != -1)
-            {
-                if ((nextSlash - current) > MaxKeyLength)
-                    throw new ArgumentException(RegistryProviderStrings.Arg_RegKeyStrLenBug);
-
-                current = nextSlash + 1;
-                nextSlash = name.IndexOf('\\', current);
-            }
-
-            if ((name.Length - current) > MaxKeyLength)
-                throw new ArgumentException(RegistryProviderStrings.Arg_RegKeyStrLenBug);
-        }
-
-        private static void ValidateKeyMode(RegistryKeyPermissionCheck mode)
-        {
-            if (mode < RegistryKeyPermissionCheck.Default || mode > RegistryKeyPermissionCheck.ReadWriteSubTree)
-            {
-                throw new ArgumentException(RegistryProviderStrings.Argument_InvalidRegistryKeyPermissionCheck);
-            }
-        }
-
-        private static void ValidateKeyRights(int rights)
-        {
-            if (0 != (rights & ~((int)RegistryRights.FullControl)))
-            {
-                // We need to throw SecurityException here for compatibility reason,
-                // although UnauthorizedAccessException will make more sense.
-                throw new SecurityException(RegistryProviderStrings.Security_RegistryPermission);
-            }
-        }
-
-        private void VerifyTransaction()
-        {
-            // Require a transaction. This will throw for "Base" keys because they aren't associated with a transaction.
-            if (_myTransaction == null)
-            {
-                throw new InvalidOperationException(RegistryProviderStrings.InvalidOperation_NotAssociatedWithTransaction);
-            }
-
-            if (!_myTransaction.Equals(Transaction.Current))
-            {
-                throw new InvalidOperationException(RegistryProviderStrings.InvalidOperation_MustUseSameTransaction);
-            }
-        }
-        // Win32 constants for error handling
-        private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
-        private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
-        private const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/TransactedRegistrySecurity.cs b/src/System.Management.Automation/namespaces/TransactedRegistrySecurity.cs
deleted file mode 100644
index 46070ea27c8..00000000000
--- a/src/System.Management.Automation/namespaces/TransactedRegistrySecurity.cs
+++ /dev/null
@@ -1,456 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-//
-// NOTE: A vast majority of this code was copied from BCL in
-// ndp\clr\src\BCL\System\Security\AccessControl\RegistrySecurity.cs.
-// Namespace: System.Security.AccessControl
-//
-/*============================================================
-**
-**
-**
-** Purpose: Managed ACL wrapper for registry keys.
-**
-**
-===========================================================*/
-
-using System;
-using System.Security.Permissions;
-using System.Security.Principal;
-using System.Runtime.InteropServices;
-using System.IO;
-using System.Security.AccessControl;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.PowerShell.Commands.Internal
-{
-    /// <summary>
-    /// <para>Represents a set of access rights allowed or denied for a user or group. This class cannot be inherited.</para>
-    /// </summary>
-    // Suppressed because these are needed to manipulate TransactedRegistryKey, which is written to the pipeline.
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public sealed class TransactedRegistryAccessRule : AccessRule
-    {
-        // Constructor for creating access rules for registry objects
-
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to,
-        /// the access rights, and whether the specified access rights are allowed or denied.</para>
-        /// <param name="identity">The user or group the rule applies to. Must be of type SecurityIdentifier or a type such as
-        /// NTAccount that can be converted to type SecurityIdentifier.</param>
-        /// <param name="registryRights">A bitwise combination of Microsoft.Win32.RegistryRights values indicating the rights allowed or denied.</param>
-        /// <param name="type">One of the AccessControlType values indicating whether the rights are allowed or denied.</param>
-        /// </summary>
-        internal TransactedRegistryAccessRule(IdentityReference identity, RegistryRights registryRights, AccessControlType type)
-            : this(identity, (int)registryRights, false, InheritanceFlags.None, PropagationFlags.None, type)
-        {
-        }
-
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to,
-        /// the access rights, and whether the specified access rights are allowed or denied.</para>
-        /// <param name="identity">The name of the user or group the rule applies to.</param>
-        /// <param name="registryRights">A bitwise combination of Microsoft.Win32.RegistryRights values indicating the rights allowed or denied.</param>
-        /// <param name="type">One of the AccessControlType values indicating whether the rights are allowed or denied.</param>
-        /// </summary>
-        internal TransactedRegistryAccessRule(string identity, RegistryRights registryRights, AccessControlType type)
-            : this(new NTAccount(identity), (int)registryRights, false, InheritanceFlags.None, PropagationFlags.None, type)
-        {
-        }
-
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to,
-        /// the access rights, and whether the specified access rights are allowed or denied.</para>
-        /// <param name="identity">The user or group the rule applies to. Must be of type SecurityIdentifier or a type such as
-        /// NTAccount that can be converted to type SecurityIdentifier.</param>
-        /// <param name="registryRights">A bitwise combination of Microsoft.Win32.RegistryRights values indicating the rights allowed or denied.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags flags specifying how access rights are inherited from other objects.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags flags specifying how access rights are propagated to other objects.</param>
-        /// <param name="type">One of the AccessControlType values indicating whether the rights are allowed or denied.</param>
-        /// </summary>
-        public TransactedRegistryAccessRule(IdentityReference identity, RegistryRights registryRights, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
-            : this(identity, (int)registryRights, false, inheritanceFlags, propagationFlags, type)
-        {
-        }
-
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAccessRule class, specifying the user or group the rule applies to,
-        /// the access rights, and whether the specified access rights are allowed or denied.</para>
-        /// <param name="identity">The name of the user or group the rule applies to.</param>
-        /// <param name="registryRights">A bitwise combination of Microsoft.Win32.RegistryRights values indicating the rights allowed or denied.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags flags specifying how access rights are inherited from other objects.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags flags specifying how access rights are propagated to other objects.</param>
-        /// <param name="type">One of the AccessControlType values indicating whether the rights are allowed or denied.</param>
-        /// </summary>
-        internal TransactedRegistryAccessRule(string identity, RegistryRights registryRights, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
-            : this(new NTAccount(identity), (int)registryRights, false, inheritanceFlags, propagationFlags, type)
-        {
-        }
-
-        //
-        // Internal constructor to be called by public constructors
-        // and the access rule factory methods of {File|Folder}Security
-        //
-        internal TransactedRegistryAccessRule(
-            IdentityReference identity,
-            int accessMask,
-            bool isInherited,
-            InheritanceFlags inheritanceFlags,
-            PropagationFlags propagationFlags,
-            AccessControlType type)
-            : base(
-                identity,
-                accessMask,
-                isInherited,
-                inheritanceFlags,
-                propagationFlags,
-                type)
-        {
-        }
-
-        /// <summary>
-        /// <para>Gets the rights allowed or denied by the access rule.</para>
-        /// </summary>
-        public RegistryRights RegistryRights
-        {
-            get { return (RegistryRights)base.AccessMask; }
-        }
-    }
-
-    /// <summary>
-    /// <para>Represents a set of access rights to be audited for a user or group. This class cannot be inherited.</para>
-    /// </summary>
-    // Suppressed because these are needed to manipulate TransactedRegistryKey, which is written to the pipeline.
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public sealed class TransactedRegistryAuditRule : AuditRule
-    {
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAuditRule class, specifying the user or group to audit, the rights to
-        /// audit, whether to take inheritance into account, and whether to audit success, failure, or both.</para>
-        /// <param name="identity">The user or group the rule applies to. Must be of type SecurityIdentifier or a type such as
-        /// NTAccount that can be converted to type SecurityIdentifier.</param>
-        /// <param name="registryRights">A bitwise combination of RegistryRights values specifying the kinds of access to audit.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags values specifying whether the audit rule applies to subkeys of the current key.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags values that affect the way an inherited audit rule is propagated to subkeys of the current key.</param>
-        /// <param name="flags">A bitwise combination of AuditFlags values specifying whether to audit success, failure, or both.</param>
-        /// </summary>
-        internal TransactedRegistryAuditRule(IdentityReference identity, RegistryRights registryRights, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
-            : this(identity, (int)registryRights, false, inheritanceFlags, propagationFlags, flags)
-        {
-        }
-
-        /// <summary>
-        /// <para>Initializes a new instance of the RegistryAuditRule class, specifying the user or group to audit, the rights to
-        /// audit, whether to take inheritance into account, and whether to audit success, failure, or both.</para>
-        /// <param name="identity">The name of the user or group the rule applies to.</param>
-        /// <param name="registryRights">A bitwise combination of RegistryRights values specifying the kinds of access to audit.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags values specifying whether the audit rule applies to subkeys of the current key.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags values that affect the way an inherited audit rule is propagated to subkeys of the current key.</param>
-        /// <param name="flags">A bitwise combination of AuditFlags values specifying whether to audit success, failure, or both.</param>
-        /// </summary>
-        internal TransactedRegistryAuditRule(string identity, RegistryRights registryRights, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
-            : this(new NTAccount(identity), (int)registryRights, false, inheritanceFlags, propagationFlags, flags)
-        {
-        }
-
-        internal TransactedRegistryAuditRule(IdentityReference identity, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
-            : base(identity, accessMask, isInherited, inheritanceFlags, propagationFlags, flags)
-        {
-        }
-
-        /// <summary>
-        /// <para>Gets the access rights affected by the audit rule.</para>
-        /// </summary>
-        public RegistryRights RegistryRights
-        {
-            get { return (RegistryRights)base.AccessMask; }
-        }
-    }
-
-    /// <summary>
-    /// <para>Represents the Windows access control security for a registry key. This class cannot be inherited.
-    /// This class is specifically to be used with TransactedRegistryKey.</para>
-    /// </summary>
-    // Suppressed because these are needed to manipulate TransactedRegistryKey, which is written to the pipeline.
-    [SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
-    public sealed class TransactedRegistrySecurity : NativeObjectSecurity
-    {
-        private const string resBaseName = "RegistryProviderStrings";
-
-        /// <summary>
-        /// <para>Initializes a new instance of the TransactedRegistrySecurity class with default values.</para>
-        /// </summary>
-        public TransactedRegistrySecurity()
-            : base(true, ResourceType.RegistryKey)
-        {
-        }
-
-        /*
-        // The name of registry key must start with a predefined string,
-        // like CLASSES_ROOT, CURRENT_USER, MACHINE, and USERS.  See
-        // MSDN's help for SetNamedSecurityInfo for details.
-        internal TransactedRegistrySecurity(string name, AccessControlSections includeSections)
-            : base(true, ResourceType.RegistryKey, HKeyNameToWindowsName(name), includeSections)
-        {
-            new RegistryPermission(RegistryPermissionAccess.NoAccess, AccessControlActions.View, name).Demand();
-        }
-        */
-
-        // Suppressed because the passed name and hkey won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        internal TransactedRegistrySecurity(SafeRegistryHandle hKey, string name, AccessControlSections includeSections)
-            : base(true, ResourceType.RegistryKey, hKey, includeSections, _HandleErrorCode, null)
-        {
-            new RegistryPermission(RegistryPermissionAccess.NoAccess, AccessControlActions.View, name).Demand();
-        }
-
-        private static Exception _HandleErrorCode(int errorCode, string name, SafeHandle handle, object context)
-        {
-            System.Exception exception = null;
-
-            switch (errorCode)
-            {
-                case Win32Native.ERROR_FILE_NOT_FOUND:
-                    exception = new IOException(RegistryProviderStrings.Arg_RegKeyNotFound);
-                    break;
-
-                case Win32Native.ERROR_INVALID_NAME:
-                    exception = new ArgumentException(RegistryProviderStrings.Arg_RegInvalidKeyName);
-                    break;
-
-                case Win32Native.ERROR_INVALID_HANDLE:
-                    exception = new ArgumentException(RegistryProviderStrings.AccessControl_InvalidHandle);
-                    break;
-
-                default:
-                    break;
-            }
-
-            return exception;
-        }
-
-        /// <summary>
-        /// <para>Creates a new access control rule for the specified user, with the specified access rights, access control, and flags.</para>
-        /// <param name="identityReference">An IdentityReference that identifies the user or group the rule applies to.</param>
-        /// <param name="accessMask">A bitwise combination of RegistryRights values specifying the access rights to allow or deny, cast to an integer.</param>
-        /// <param name="isInherited">A Boolean value specifying whether the rule is inherited.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags values specifying how the rule is inherited by subkeys.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags values that modify the way the rule is inherited by subkeys. Meaningless if the value of inheritanceFlags is InheritanceFlags.None.</param>
-        /// <param name="type">One of the AccessControlType values specifying whether the rights are allowed or denied.</param>
-        /// <returns>A TransactedRegistryAccessRule object representing the specified rights for the specified user.</returns>
-        /// </summary>
-        public override AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
-        {
-            return new TransactedRegistryAccessRule(identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, type);
-        }
-
-        /// <summary>
-        /// <para>Creates a new audit rule, specifying the user the rule applies to, the access rights to audit, the inheritance and propagation of the
-        /// rule, and the outcome that triggers the rule.</para>
-        /// <param name="identityReference">An IdentityReference that identifies the user or group the rule applies to.</param>
-        /// <param name="accessMask">A bitwise combination of RegistryRights values specifying the access rights to audit, cast to an integer.</param>
-        /// <param name="isInherited">A Boolean value specifying whether the rule is inherited.</param>
-        /// <param name="inheritanceFlags">A bitwise combination of InheritanceFlags values specifying how the rule is inherited by subkeys.</param>
-        /// <param name="propagationFlags">A bitwise combination of PropagationFlags values that modify the way the rule is inherited by subkeys. Meaningless if the value of inheritanceFlags is InheritanceFlags.None.</param>
-        /// <param name="flags">A bitwise combination of AuditFlags values specifying whether to audit successful access, failed access, or both.</param>
-        /// <returns>A TransactedRegistryAuditRule object representing the specified audit rule for the specified user, with the specified flags.
-        /// The return type of the method is the base class, AuditRule, but the return value can be cast safely to the derived class.</returns>
-        /// </summary>
-        public override AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
-        {
-            return new TransactedRegistryAuditRule(identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, flags);
-        }
-
-        internal AccessControlSections GetAccessControlSectionsFromChanges()
-        {
-            AccessControlSections persistRules = AccessControlSections.None;
-            if (AccessRulesModified)
-                persistRules = AccessControlSections.Access;
-            if (AuditRulesModified)
-                persistRules |= AccessControlSections.Audit;
-            if (OwnerModified)
-                persistRules |= AccessControlSections.Owner;
-            if (GroupModified)
-                persistRules |= AccessControlSections.Group;
-            return persistRules;
-        }
-
-        // Suppressed because the passed keyName won't change.
-        [SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
-        internal void Persist(SafeRegistryHandle hKey, string keyName)
-        {
-            new RegistryPermission(RegistryPermissionAccess.NoAccess, AccessControlActions.Change, keyName).Demand();
-
-            WriteLock();
-
-            try
-            {
-                AccessControlSections persistRules = GetAccessControlSectionsFromChanges();
-                if (persistRules == AccessControlSections.None)
-                    return;  // Don't need to persist anything.
-
-                base.Persist(hKey, persistRules);
-                OwnerModified = GroupModified = AuditRulesModified = AccessRulesModified = false;
-            }
-            finally
-            {
-                WriteUnlock();
-            }
-        }
-
-        /// <summary>
-        /// <para>Searches for a matching access control with which the new rule can be merged. If none are found, adds the new rule.</para>
-        /// <param name="rule">The access control rule to add.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void AddAccessRule(TransactedRegistryAccessRule rule)
-        {
-            base.AddAccessRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Removes all access control rules with the same user and AccessControlType (allow or deny) as the specified rule, and then adds the specified rule.</para>
-        /// <param name="rule">The TransactedRegistryAccessRule to add. The user and AccessControlType of this rule determine the rules to remove before this rule is added.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void SetAccessRule(TransactedRegistryAccessRule rule)
-        {
-            base.SetAccessRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Removes all access control rules with the same user as the specified rule, regardless of AccessControlType, and then adds the specified rule.</para>
-        /// <param name="rule">The TransactedRegistryAccessRule to add. The user specified by this rule determines the rules to remove before this rule is added.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void ResetAccessRule(TransactedRegistryAccessRule rule)
-        {
-            base.ResetAccessRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for an access control rule with the same user and AccessControlType (allow or deny) as the specified access rule, and with compatible
-        /// inheritance and propagation flags; if such a rule is found, the rights contained in the specified access rule are removed from it.</para>
-        /// <param name="rule">A TransactedRegistryAccessRule that specifies the user and AccessControlType to search for, and a set of inheritance
-        /// and propagation flags that a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public bool RemoveAccessRule(TransactedRegistryAccessRule rule)
-        {
-            return base.RemoveAccessRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for all access control rules with the same user and AccessControlType (allow or deny) as the specified rule and, if found, removes them.</para>
-        /// <param name="rule">A TransactedRegistryAccessRule that specifies the user and AccessControlType to search for. Any rights, inheritance flags, or
-        /// propagation flags specified by this rule are ignored.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void RemoveAccessRuleAll(TransactedRegistryAccessRule rule)
-        {
-            base.RemoveAccessRuleAll(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for an access control rule that exactly matches the specified rule and, if found, removes it.</para>
-        /// <param name="rule">The TransactedRegistryAccessRule to remove.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void RemoveAccessRuleSpecific(TransactedRegistryAccessRule rule)
-        {
-            base.RemoveAccessRuleSpecific(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for an audit rule with which the new rule can be merged. If none are found, adds the new rule.</para>
-        /// <param name="rule">The audit rule to add. The user specified by this rule determines the search.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void AddAuditRule(TransactedRegistryAuditRule rule)
-        {
-            base.AddAuditRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Removes all audit rules with the same user as the specified rule, regardless of the AuditFlags value, and then adds the specified rule.</para>
-        /// <param name="rule">The TransactedRegistryAuditRule to add. The user specified by this rule determines the rules to remove before this rule is added.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void SetAuditRule(TransactedRegistryAuditRule rule)
-        {
-            base.SetAuditRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for an audit control rule with the same user as the specified rule, and with compatible inheritance and propagation flags;
-        /// if a compatible rule is found, the rights contained in the specified rule are removed from it.</para>
-        /// <param name="rule">A TransactedRegistryAuditRule that specifies the user to search for, and a set of inheritance and propagation flags that
-        /// a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public bool RemoveAuditRule(TransactedRegistryAuditRule rule)
-        {
-            return base.RemoveAuditRule(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for all audit rules with the same user as the specified rule and, if found, removes them.</para>
-        /// <param name="rule">A TransactedRegistryAuditRule that specifies the user to search for. Any rights, inheritance
-        /// flags, or propagation flags specified by this rule are ignored.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void RemoveAuditRuleAll(TransactedRegistryAuditRule rule)
-        {
-            base.RemoveAuditRuleAll(rule);
-        }
-
-        /// <summary>
-        /// <para>Searches for an audit rule that exactly matches the specified rule and, if found, removes it.</para>
-        /// <param name="rule">The TransactedRegistryAuditRule to be removed.</param>
-        /// </summary>
-        // Suppressed because we want to ensure TransactedRegistry* objects.
-        [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
-        public void RemoveAuditRuleSpecific(TransactedRegistryAuditRule rule)
-        {
-            base.RemoveAuditRuleSpecific(rule);
-        }
-
-        /// <summary>
-        /// <para>Gets the enumeration type that the TransactedRegistrySecurity class uses to represent access rights.</para>
-        /// <returns>A Type object representing the RegistryRights enumeration.</returns>
-        /// </summary>
-        public override Type AccessRightType
-        {
-            get { return typeof(RegistryRights); }
-        }
-
-        /// <summary>
-        /// <para>Gets the type that the TransactedRegistrySecurity class uses to represent access rules.</para>
-        /// <returns>A Type object representing the TransactedRegistryAccessRule class.</returns>
-        /// </summary>
-        public override Type AccessRuleType
-        {
-            get { return typeof(TransactedRegistryAccessRule); }
-        }
-
-        /// <summary>
-        /// <para>Gets the type that the TransactedRegistrySecurity class uses to represent audit rules.</para>
-        /// <returns>A Type object representing the TransactedRegistryAuditRule class.</returns>
-        /// </summary>
-        public override Type AuditRuleType
-        {
-            get { return typeof(TransactedRegistryAuditRule); }
-        }
-    }
-}
diff --git a/src/System.Management.Automation/namespaces/Win32Native.cs b/src/System.Management.Automation/namespaces/Win32Native.cs
index b9c7d8a7a71..4f2c65c49f5 100644
--- a/src/System.Management.Automation/namespaces/Win32Native.cs
+++ b/src/System.Management.Automation/namespaces/Win32Native.cs
@@ -27,7 +27,7 @@ namespace Microsoft.PowerShell.Commands.Internal
     // Remove the default demands for all N/Direct methods with this
     // global declaration on the class.
     //
-    [SuppressUnmanagedCodeSecurityAttribute()]
+    [SuppressUnmanagedCodeSecurity]
     internal static class Win32Native
     {
         #region Integer Const
@@ -76,14 +76,14 @@ internal enum SID_NAME_USE
 
         #region Struct
 
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+        [StructLayout(LayoutKind.Sequential)]
         internal struct SID_AND_ATTRIBUTES
         {
             internal IntPtr Sid;
             internal uint Attributes;
         }
 
-        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+        [StructLayout(LayoutKind.Sequential)]
         internal struct TOKEN_USER
         {
             internal SID_AND_ATTRIBUTES User;
@@ -106,8 +106,6 @@ internal struct TOKEN_USER
         /// <param name="peUse"></param>
         /// <returns></returns>
         [DllImport(PinvokeDllNames.LookupAccountSidDllName, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
         [return: MarshalAs(UnmanagedType.Bool)]
         private static extern unsafe bool LookupAccountSid(string lpSystemName,
                                                      IntPtr sid,
@@ -139,8 +137,6 @@ internal static unsafe bool LookupAccountSid(string lpSystemName,
         }
 
         [DllImport(PinvokeDllNames.CloseHandleDllName, SetLastError = true)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
         [return: MarshalAs(UnmanagedType.Bool)]
         internal static extern bool CloseHandle(IntPtr handle);
 
@@ -152,8 +148,6 @@ internal static unsafe bool LookupAccountSid(string lpSystemName,
         /// <param name="tokenHandle">Process token.</param>
         /// <returns>The current process token.</returns>
         [DllImport(PinvokeDllNames.OpenProcessTokenDllName, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
         [return: MarshalAs(UnmanagedType.Bool)]
         internal static extern bool OpenProcessToken(IntPtr processHandle, uint desiredAccess, out IntPtr tokenHandle);
 
@@ -168,8 +162,6 @@ internal static unsafe bool LookupAccountSid(string lpSystemName,
         /// <param name="returnLength"></param>
         /// <returns></returns>
         [DllImport(PinvokeDllNames.GetTokenInformationDllName, CharSet = CharSet.Unicode, SetLastError = true, BestFitMapping = false)]
-        [ResourceExposure(ResourceScope.Machine)]
-        [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage")]
         [return: MarshalAs(UnmanagedType.Bool)]
         internal static extern bool GetTokenInformation(IntPtr tokenHandle,
                                                         TOKEN_INFORMATION_CLASS tokenInformationClass,
diff --git a/src/System.Management.Automation/resources/Authenticode.resx b/src/System.Management.Automation/resources/Authenticode.resx
index c196f2b0d65..f9015569644 100644
--- a/src/System.Management.Automation/resources/Authenticode.resx
+++ b/src/System.Management.Automation/resources/Authenticode.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -142,7 +142,7 @@
     <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
   </data>
   <data name="TimeStampUrlRequired" xml:space="preserve">
-    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt;.</value>
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
   </data>
   <data name="InvalidHashAlgorithm" xml:space="preserve">
     <value>Cannot sign code. The hash algorithm is not supported.</value>
diff --git a/src/System.Management.Automation/resources/AuthorizationManagerBase.resx b/src/System.Management.Automation/resources/AuthorizationManagerBase.resx
index 8f9d62fefec..1304e76763e 100644
--- a/src/System.Management.Automation/resources/AuthorizationManagerBase.resx
+++ b/src/System.Management.Automation/resources/AuthorizationManagerBase.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/AutomationExceptions.resx b/src/System.Management.Automation/resources/AutomationExceptions.resx
index 6c4c8fe0d92..9b48e92c0bc 100644
--- a/src/System.Management.Automation/resources/AutomationExceptions.resx
+++ b/src/System.Management.Automation/resources/AutomationExceptions.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -201,4 +201,10 @@
   <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
     <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
   </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/CatalogStrings.resx b/src/System.Management.Automation/resources/CatalogStrings.resx
index 0d8ff0910ae..662b765652b 100644
--- a/src/System.Management.Automation/resources/CatalogStrings.resx
+++ b/src/System.Management.Automation/resources/CatalogStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/CimInstanceTypeAdapterResources.resx b/src/System.Management.Automation/resources/CimInstanceTypeAdapterResources.resx
index 52aede963c4..b286977066f 100644
--- a/src/System.Management.Automation/resources/CimInstanceTypeAdapterResources.resx
+++ b/src/System.Management.Automation/resources/CimInstanceTypeAdapterResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/CmdletizationCoreResources.resx b/src/System.Management.Automation/resources/CmdletizationCoreResources.resx
index a5835e380f5..39755172f09 100644
--- a/src/System.Management.Automation/resources/CmdletizationCoreResources.resx
+++ b/src/System.Management.Automation/resources/CmdletizationCoreResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/CommandBaseStrings.resx b/src/System.Management.Automation/resources/CommandBaseStrings.resx
index 656dc226f22..a5465c5b457 100644
--- a/src/System.Management.Automation/resources/CommandBaseStrings.resx
+++ b/src/System.Management.Automation/resources/CommandBaseStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -156,6 +156,15 @@
   <data name="PauseHelpMessage" xml:space="preserve">
     <value>Pause the current pipeline and return to the command prompt. Type "{0}" to resume the pipeline.</value>
   </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Program "{0}" ended with non-zero exit code: {1} ({2}).</value>
+  </data>
   <data name="ShouldProcessMessage" xml:space="preserve">
     <value>Performing the operation "{0}" on target "{1}".</value>
   </data>
@@ -213,4 +222,22 @@ Reviewed by TArcher on 2010-07-20
   <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
     <value>The {0} is obsolete. {1}</value>
   </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Exec call failed with errorno {0} for command line: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Command '{0}' was not found. The specified command must be an executable.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Script Block Processing Dot-Source Check</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Dot-Source processing for script block '{0}' will fail in Constrained Language mode because its language mode '{1}' does not match the current language mode '{2}'.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Command Searcher</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Command '{0}' in module '{1}' is untrusted and will not be accessible in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/ConsoleInfoErrorStrings.resx b/src/System.Management.Automation/resources/ConsoleInfoErrorStrings.resx
index 201dde0e4ac..79de141ead6 100644
--- a/src/System.Management.Automation/resources/ConsoleInfoErrorStrings.resx
+++ b/src/System.Management.Automation/resources/ConsoleInfoErrorStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,63 +117,9 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="MonadConsoleNotFound" xml:space="preserve">
-    <value>Required element "PSConsoleFile" in {0} is missing or incorrect.</value>
-  </data>
-  <data name="MonadVersionNotFound" xml:space="preserve">
-    <value>Required element "PSVersion" in {0} is missing or incorrect.</value>
-  </data>
-  <data name="BadConsoleVersion" xml:space="preserve">
-    <value>Required element "ConsoleSchemaVersion" in {0} is missing or incorrect.</value>
-  </data>
-  <data name="BadXMLFormat" xml:space="preserve">
-    <value>The console file is not valid. Multiple entries were found for the element PSConsoleFile. Only one entry is supported for this version.</value>
-  </data>
-  <data name="PSSnapInNotFound" xml:space="preserve">
-    <value>The console file is not valid because the element {0} is not valid.</value>
-  </data>
-  <data name="IDNotFound" xml:space="preserve">
-    <value>The console file is not valid because the PowerShell snap-in name is missing.</value>
-  </data>
-  <data name="SaveDefaultError" xml:space="preserve">
-    <value>Attempting to save a console file with no name. Use Export-Console with the Path parameter to save the console file.</value>
-  </data>
-  <data name="BadXMLElementFound" xml:space="preserve">
-    <value>Unknown element {0} found. "{1}" should have "{2}" and "{3}" elements only.</value>
-  </data>
-  <data name="MultipleMshSnapinsElementNotSupported" xml:space="preserve">
-    <value>The console file is not valid. Only one occurrence of the element "{0}" is allowed.</value>
-  </data>
-  <data name="PathNotAbsolute" xml:space="preserve">
-    <value>The path {0} is not an absolute path.</value>
-  </data>
-  <data name="BadConsoleExtension" xml:space="preserve">
-    <value>The console file name extension is not valid. A console file name extension must be psc1.</value>
-  </data>
   <data name="BadMonadVersion" xml:space="preserve">
     <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
   </data>
-  <data name="PSSnapInDoesNotExist" xml:space="preserve">
-    <value>Cannot find any PowerShell snap-in information for {0}.</value>
-  </data>
-  <data name="CannotLoadDefault" xml:space="preserve">
-    <value>This is a system PowerShell snap-in that is loaded by PowerShell.</value>
-  </data>
-  <data name="PSSnapInAlreadyExists" xml:space="preserve">
-    <value>Cannot add PowerShell snap-in {0} because it is already added. Verify the name of the snap-in, and then try again.</value>
-  </data>
-  <data name="CannotRemovePSSnapIn" xml:space="preserve">
-    <value>Cannot remove the PowerShell snap-in {0} because it is not loaded. Verify the name of the snap-in that you want to remove, and then try again.</value>
-  </data>
-  <data name="CannotRemoveDefault" xml:space="preserve">
-    <value>Cannot remove the PowerShell snap-in {0} because it is a system snap-in. Verify the name of the snap-in that you want to remove, and then try again.</value>
-  </data>
-  <data name="PSSnapInReadError" xml:space="preserve">
-    <value>Cannot load the PowerShell snap-in because an error occurred while reading the registry information for the snap-in.</value>
-  </data>
-  <data name="CannotLoadDefaults" xml:space="preserve">
-    <value>An error occurred while attempting to load the system PowerShell snap-ins. Please contact Microsoft Customer Support Services.</value>
-  </data>
   <data name="ConsoleLoadFailure" xml:space="preserve">
     <value>The following errors occurred when loading console {0}: {1}</value>
   </data>
@@ -195,43 +141,13 @@
   <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
     <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
   </data>
-  <data name="CmdletNotAvailable" xml:space="preserve">
-    <value>The cmdlet is not supported by the custom shell.</value>
-  </data>
-  <data name="ConsoleFileReadOnly" xml:space="preserve">
-    <value>Cannot export to this file because file {0} is read-only. Change the read-only attribute of the file to read-write, or export to a different file.</value>
-  </data>
   <data name="FileExistsNoClobber" xml:space="preserve">
     <value>File {0} already exists and {1} was specified.</value>
   </data>
-  <data name="ConsoleFileNameNotResolved" xml:space="preserve">
-    <value>Cannot export to a console because no console is loaded or no name is specified.</value>
-  </data>
-  <data name="FileNameCaptionForExportConsole" xml:space="preserve">
-    <value>Cmdlet {0}</value>
-  </data>
-  <data name="FileNamePromptMessage" xml:space="preserve">
-    <value>Supply values for the following parameters:</value>
-  </data>
-  <data name="PromptForExportConsole" xml:space="preserve">
-    <value>Cannot export a console file because no console file has been specified. Do you want to continue with the export operation?</value>
-  </data>
-  <data name="ConsoleCannotBeConvertedToString" xml:space="preserve">
-    <value>Cannot save the file because the file name format is not valid. Specify a file name using the command: export-console -path.</value>
-  </data>
-  <data name="FileNameNotResolved" xml:space="preserve">
-    <value>Cannot save the specified file. The Save operation was canceled.</value>
-  </data>
-  <data name="ConsoleFileWildCardsNotSupported" xml:space="preserve">
-    <value>Cannot save the console file because wildcard characters were used. Specify a console file without wildcard characters.</value>
-  </data>
-  <data name="ProviderNotSupported" xml:space="preserve">
-    <value>You can only save a file when you are working in a file provider. The current provider '{0}' is not a file provider.</value>
-  </data>
-  <data name="ConsoleVariableCannotBeSet" xml:space="preserve">
-    <value>Cannot set the ConsoleFileName variable to {0}. File {0} was saved.</value>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
   </data>
-  <data name="ExportConsoleCannotDeleteFile" xml:space="preserve">
-    <value>The Save operation failed. Cannot remove the file {0}.</value>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
   </data>
 </root>
diff --git a/src/System.Management.Automation/resources/CoreClrStubResources.resx b/src/System.Management.Automation/resources/CoreClrStubResources.resx
index a533d0ca195..7be2f9081f6 100644
--- a/src/System.Management.Automation/resources/CoreClrStubResources.resx
+++ b/src/System.Management.Automation/resources/CoreClrStubResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/CoreMshSnapinResources.resx b/src/System.Management.Automation/resources/CoreMshSnapinResources.resx
deleted file mode 100644
index 39cb1e1b628..00000000000
--- a/src/System.Management.Automation/resources/CoreMshSnapinResources.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Description" xml:space="preserve">
-    <value>This PowerShell snap-in contains cmdlets used to manage components of PowerShell.</value>
-  </data>
-  <data name="Vendor" xml:space="preserve">
-    <value>Microsoft Corporation</value>
-  </data>
-  <data name="Name" xml:space="preserve">
-    <value>Core PowerShell snap-in</value>
-  </data>
-</root>
diff --git a/src/System.Management.Automation/resources/CredUI.resx b/src/System.Management.Automation/resources/CredUI.resx
index dee868450e9..dbccf9af57f 100644
--- a/src/System.Management.Automation/resources/CredUI.resx
+++ b/src/System.Management.Automation/resources/CredUI.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/Credential.resx b/src/System.Management.Automation/resources/Credential.resx
index 63d780d1404..4f8c9419d13 100644
--- a/src/System.Management.Automation/resources/Credential.resx
+++ b/src/System.Management.Automation/resources/Credential.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/CredentialAttributeStrings.resx b/src/System.Management.Automation/resources/CredentialAttributeStrings.resx
index f496d90c988..06d124d178e 100644
--- a/src/System.Management.Automation/resources/CredentialAttributeStrings.resx
+++ b/src/System.Management.Automation/resources/CredentialAttributeStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/DebuggerStrings.resx b/src/System.Management.Automation/resources/DebuggerStrings.resx
index 466ee067ceb..51181c82c1e 100644
--- a/src/System.Management.Automation/resources/DebuggerStrings.resx
+++ b/src/System.Management.Automation/resources/DebuggerStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/DescriptionsStrings.resx b/src/System.Management.Automation/resources/DescriptionsStrings.resx
index dd8cb10c17e..5f3b0ef45c0 100644
--- a/src/System.Management.Automation/resources/DescriptionsStrings.resx
+++ b/src/System.Management.Automation/resources/DescriptionsStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/DiscoveryExceptions.resx b/src/System.Management.Automation/resources/DiscoveryExceptions.resx
index d3923969e8d..97cb5a61820 100644
--- a/src/System.Management.Automation/resources/DiscoveryExceptions.resx
+++ b/src/System.Management.Automation/resources/DiscoveryExceptions.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -206,6 +206,10 @@ The #requires statement must be in one of the following formats:
   <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
     <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
   </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
   <data name="CouldNotAutoImportModule" xml:space="preserve">
     <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/EnumExpressionEvaluatorStrings.resx b/src/System.Management.Automation/resources/EnumExpressionEvaluatorStrings.resx
index 277277ecd04..a6775fd7fc7 100644
--- a/src/System.Management.Automation/resources/EnumExpressionEvaluatorStrings.resx
+++ b/src/System.Management.Automation/resources/EnumExpressionEvaluatorStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ErrorCategoryStrings.resx b/src/System.Management.Automation/resources/ErrorCategoryStrings.resx
index f03bb8d7d54..93a6d0139de 100644
--- a/src/System.Management.Automation/resources/ErrorCategoryStrings.resx
+++ b/src/System.Management.Automation/resources/ErrorCategoryStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ErrorPackage.resx b/src/System.Management.Automation/resources/ErrorPackage.resx
index 04c0467ba71..b041f03c680 100644
--- a/src/System.Management.Automation/resources/ErrorPackage.resx
+++ b/src/System.Management.Automation/resources/ErrorPackage.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ErrorPackageRemoting.resx b/src/System.Management.Automation/resources/ErrorPackageRemoting.resx
deleted file mode 100644
index add4b52ccf4..00000000000
--- a/src/System.Management.Automation/resources/ErrorPackageRemoting.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
diff --git a/src/System.Management.Automation/resources/EtwLoggingStrings.resx b/src/System.Management.Automation/resources/EtwLoggingStrings.resx
index c6457e7d638..24d6f7c35d6 100644
--- a/src/System.Management.Automation/resources/EtwLoggingStrings.resx
+++ b/src/System.Management.Automation/resources/EtwLoggingStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/EventResource.resx b/src/System.Management.Automation/resources/EventResource.resx
index a4f245cde93..c25df6e48f5 100644
--- a/src/System.Management.Automation/resources/EventResource.resx
+++ b/src/System.Management.Automation/resources/EventResource.resx
@@ -5,8 +5,8 @@
     To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
     then rerun ResxGen.ps1 to produce an updated CS and Resx file.
 -->
-<xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-<xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
 <xsd:element name="root" msdata:IsDataSet="true">
   <xsd:complexType>
     <xsd:choice maxOccurs="unbounded">
@@ -550,7 +550,7 @@ Parameters = {7}</value>
     <value>Test analytic message</value>
 </data>
 <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
-    <value>Connection Paramters are
+    <value>Connection Parameters are
  Connection URI: {0}
  Resource URI: {1}
  User: {2}
@@ -640,7 +640,7 @@ Exception StackTrace: {2}</value>
     <value>Runspace Id: {0} Pipeline Id: {1}. Server is sending data of size {2} to client. DataType: {3} TargetInterface: {4}</value>
 </data>
 <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
-    <value>Request {0}. Creating a server remote session. UserName: {1} Custome Shell Id: {2}</value>
+    <value>Request {0}. Creating a server remote session. UserName: {1} Custom Shell Id: {2}</value>
 </data>
 <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
     <value>Reporting context for request: {0} Context Reported: {0}</value>
@@ -707,16 +707,16 @@ Exception StackTrace: {2}</value>
  	 Type cast inner exception: {3}</value>
 </data>
 <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
-    <value>Serialization depth has been overriden.
+    <value>Serialization depth has been overridden.
  	 Serialized type name: {0}
  	 Original depth: {1}
- 	 Overriden depth: {2}
+ 	 Overridden depth: {2}
  	 Current depth below top level: {3}</value>
 </data>
 <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
-    <value>Serialization mode has been overriden.
+    <value>Serialization mode has been overridden.
  	 Serialized type name: {0}
- 	 Overriden mode: {1}</value>
+ 	 Overridden mode: {1}</value>
 </data>
 <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
     <value>Serialization of a script property has been skipped, because there is no runspace to use for evaluation of the property.
diff --git a/src/System.Management.Automation/resources/EventingResources.resx b/src/System.Management.Automation/resources/EventingResources.resx
index a501972cf60..edbccb5646b 100644
--- a/src/System.Management.Automation/resources/EventingResources.resx
+++ b/src/System.Management.Automation/resources/EventingResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ExperimentalFeatureStrings.resx b/src/System.Management.Automation/resources/ExperimentalFeatureStrings.resx
index 9823f54d51b..eea0cb5c153 100644
--- a/src/System.Management.Automation/resources/ExperimentalFeatureStrings.resx
+++ b/src/System.Management.Automation/resources/ExperimentalFeatureStrings.resx
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <root>
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ExtendedTypeSystem.resx b/src/System.Management.Automation/resources/ExtendedTypeSystem.resx
index 6a697cba888..3ff5b77fab4 100644
--- a/src/System.Management.Automation/resources/ExtendedTypeSystem.resx
+++ b/src/System.Management.Automation/resources/ExtendedTypeSystem.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -156,6 +156,9 @@
   <data name="MethodArgumentCountException" xml:space="preserve">
     <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
   </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
   <data name="MethodAmbiguousException" xml:space="preserve">
     <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
   </data>
@@ -186,6 +189,9 @@
   <data name="InvalidCastException" xml:space="preserve">
     <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
   </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
   <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
     <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
   </data>
@@ -349,7 +355,10 @@
     <value>"{0}" returned a null value.</value>
   </data>
   <data name="PropertyNotFound" xml:space="preserve">
-    <value>The {0} property was not found for the {1} object. The available property is: {2}</value>
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
   </data>
   <data name="ObjectCreationError" xml:space="preserve">
     <value>Cannot create object of type "{0}". {1}</value>
@@ -382,4 +391,16 @@ PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
   <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
     <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
   </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/FileSystemProviderStrings.resx b/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
index 1b4d1159e59..85a893f342d 100644
--- a/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
+++ b/src/System.Management.Automation/resources/FileSystemProviderStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -216,9 +216,6 @@
   <data name="DirectoryExist" xml:space="preserve">
     <value>An item with the specified name {0} already exists.</value>
   </data>
-  <data name="BasePathLengthError" xml:space="preserve">
-    <value>The path length is too short. The character length of a path cannot be less than the character length of the basePath.</value>
-  </data>
   <data name="DelimiterError" xml:space="preserve">
     <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
   </data>
@@ -276,9 +273,6 @@
   <data name="NoFirstLastWaitForRaw" xml:space="preserve">
     <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
   </data>
-  <data name="SubstitutePathTooLong" xml:space="preserve">
-    <value>The substitute path for the DOS device '{0}' is too long. It exceeds the maximum total path length (32,767 characters) that is valid for the Windows API.</value>
-  </data>
   <data name="ItemNotDirectory" xml:space="preserve">
     <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
   </data>
@@ -324,15 +318,9 @@
   <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
     <value>Failed to read remote file '{0}'.</value>
   </data>
-  <data name="CopyItemRemotelyFailedToValidateDestination" xml:space="preserve">
-    <value>Failed to validate remote destination '{0}'.</value>
-  </data>
   <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
     <value>Cannot validate if remote destination {0} is a file.</value>
   </data>
-  <data name="CopyItemRemotelyOperationNotSupported" xml:space="preserve">
-    <value>Remote copy with {0} is not supported.</value>
-  </data>
   <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
     <value>Failed to create directory '{0}' on remote destination.</value>
   </data>
@@ -340,9 +328,30 @@
     <value>Maximum size for drive has been exceeded: {0}.</value>
   </data>
   <data name="SymlinkItemExists" xml:space="preserve">
-    <value>Cannot create symbolic link because the path {0} already exists.</value>
+    <value>Cannot create link because the path already exists: {0}.</value>
   </data>
   <data name="AlreadyListedDirectory" xml:space="preserve">
     <value>Skip already-visited directory {0}.</value>
   </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/FormatAndOutXmlLoadingStrings.resx b/src/System.Management.Automation/resources/FormatAndOutXmlLoadingStrings.resx
index 90e85c19cee..154ad925e58 100644
--- a/src/System.Management.Automation/resources/FormatAndOutXmlLoadingStrings.resx
+++ b/src/System.Management.Automation/resources/FormatAndOutXmlLoadingStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/FormatAndOut_MshParameter.resx b/src/System.Management.Automation/resources/FormatAndOut_MshParameter.resx
index da5015d51dc..09d63693480 100644
--- a/src/System.Management.Automation/resources/FormatAndOut_MshParameter.resx
+++ b/src/System.Management.Automation/resources/FormatAndOut_MshParameter.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/FormatAndOut_format_xxx.resx b/src/System.Management.Automation/resources/FormatAndOut_format_xxx.resx
index 66cfdc8a25f..db5af6913bc 100644
--- a/src/System.Management.Automation/resources/FormatAndOut_format_xxx.resx
+++ b/src/System.Management.Automation/resources/FormatAndOut_format_xxx.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/FormatAndOut_out_xxx.resx b/src/System.Management.Automation/resources/FormatAndOut_out_xxx.resx
index f5b1aa481f4..52ee1e71e2b 100644
--- a/src/System.Management.Automation/resources/FormatAndOut_out_xxx.resx
+++ b/src/System.Management.Automation/resources/FormatAndOut_out_xxx.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/GetErrorText.resx b/src/System.Management.Automation/resources/GetErrorText.resx
index 0fcdaf2ed20..6bc1b3117f9 100644
--- a/src/System.Management.Automation/resources/GetErrorText.resx
+++ b/src/System.Management.Automation/resources/GetErrorText.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/HelpDisplayStrings.resx b/src/System.Management.Automation/resources/HelpDisplayStrings.resx
index 8866eea8d61..5f4b7119ef9 100644
--- a/src/System.Management.Automation/resources/HelpDisplayStrings.resx
+++ b/src/System.Management.Automation/resources/HelpDisplayStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -183,9 +183,6 @@
   <data name="ContentColon" xml:space="preserve">
     <value>Content:</value>
   </data>
-  <data name="OutputColon" xml:space="preserve">
-    <value>Output:</value>
-  </data>
   <data name="ProviderName" xml:space="preserve">
     <value>PROVIDER NAME</value>
   </data>
@@ -267,9 +264,6 @@
   <data name="CmdletsSupported" xml:space="preserve">
     <value>Cmdlets Supported: </value>
   </data>
-  <data name="CmdletsSupportedCaps" xml:space="preserve">
-    <value>CMDLETS SUPPORTED</value>
-  </data>
   <data name="AliasesSection" xml:space="preserve">
     <value>ALIASES</value>
   </data>
@@ -306,6 +300,10 @@
   <data name="HelpCultureNotSupported" xml:space="preserve">
     <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
   </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
   <data name="ModuleBaseMustExist" xml:space="preserve">
     <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
   </data>
@@ -357,9 +355,6 @@
   <data name="UnzipFailure" xml:space="preserve">
     <value>Error extracting Help content.</value>
   </data>
-  <data name="InstallationFailed" xml:space="preserve">
-    <value>Error installing help content.</value>
-  </data>
   <data name="UnableToConnect" xml:space="preserve">
     <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
   </data>
@@ -397,6 +392,9 @@ English-US help content is available and can be saved using: Save-Help -UICultur
     <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
 English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
   </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
   <data name="FalseShort" xml:space="preserve">
     <value>false</value>
   </data>
diff --git a/src/System.Management.Automation/resources/HelpErrors.resx b/src/System.Management.Automation/resources/HelpErrors.resx
index 851e457cf27..db9fa56e697 100644
--- a/src/System.Management.Automation/resources/HelpErrors.resx
+++ b/src/System.Management.Automation/resources/HelpErrors.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -179,7 +179,7 @@
 To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
   </data>
   <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
-    <value>To use the {0}, install Windows PowerShell ISE by using Server Manager, and then restart this application. ({1})</value>
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
   </data>
   <data name="RemotingNotSupportedForFeature" xml:space="preserve">
     <value>{0} does not work in a remote session.</value>
@@ -187,4 +187,7 @@ To update these Help topics, start PowerShell by using the "Run as Administrator
   <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
     <value>ForwardHelpTargetName cannot refer to the function itself.</value>
   </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/HistoryStrings.resx b/src/System.Management.Automation/resources/HistoryStrings.resx
index c20b5bc6855..4f7a4bcc72a 100644
--- a/src/System.Management.Automation/resources/HistoryStrings.resx
+++ b/src/System.Management.Automation/resources/HistoryStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="NoHistoryFound" xml:space="preserve">
-    <value>Cannot locate history.</value>
-  </data>
   <data name="InvalidIdGetHistory" xml:space="preserve">
     <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
   </data>
@@ -147,9 +144,6 @@
   <data name="InvalidCountValue" xml:space="preserve">
     <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
   </data>
-  <data name="ClearHistoryResult" xml:space="preserve">
-    <value>Note: {0} entries were cleared from the session history.</value>
-  </data>
   <data name="ClearHistoryWarning" xml:space="preserve">
     <value>This command will clear all the entries from the session history.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/HostInterfaceExceptionsStrings.resx b/src/System.Management.Automation/resources/HostInterfaceExceptionsStrings.resx
index 4e4de9adaca..0dd66d88a53 100644
--- a/src/System.Management.Automation/resources/HostInterfaceExceptionsStrings.resx
+++ b/src/System.Management.Automation/resources/HostInterfaceExceptionsStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/InternalCommandStrings.resx b/src/System.Management.Automation/resources/InternalCommandStrings.resx
index 4f2705670bc..d368d449d20 100644
--- a/src/System.Management.Automation/resources/InternalCommandStrings.resx
+++ b/src/System.Management.Automation/resources/InternalCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -184,4 +184,10 @@ ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
   <data name="ParallelPipedInputProcessingError" xml:space="preserve">
     <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
   </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/InternalHostStrings.resx b/src/System.Management.Automation/resources/InternalHostStrings.resx
index 861c7609d05..2c0d07096ac 100644
--- a/src/System.Management.Automation/resources/InternalHostStrings.resx
+++ b/src/System.Management.Automation/resources/InternalHostStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="ExitNonExistentNestedPromptError" xml:space="preserve">
-    <value>Cannot exit a nested prompt because no nested prompts exist.</value>
-  </data>
   <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
     <value>EnterNestedPrompt has not been called as many times as ExitNestedPrompt.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/InternalHostUserInterfaceStrings.resx b/src/System.Management.Automation/resources/InternalHostUserInterfaceStrings.resx
index 7a8882643da..b0e26009599 100644
--- a/src/System.Management.Automation/resources/InternalHostUserInterfaceStrings.resx
+++ b/src/System.Management.Automation/resources/InternalHostUserInterfaceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/Logging.resx b/src/System.Management.Automation/resources/Logging.resx
index c91871fe191..ef2390a1c10 100644
--- a/src/System.Management.Automation/resources/Logging.resx
+++ b/src/System.Management.Automation/resources/Logging.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/Metadata.resx b/src/System.Management.Automation/resources/Metadata.resx
index 61aad9f57b5..a9cdca1bc50 100644
--- a/src/System.Management.Automation/resources/Metadata.resx
+++ b/src/System.Management.Automation/resources/Metadata.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -175,7 +175,7 @@
     <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
   </data>
   <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
-    <value>The character length of the {1} argument is too long. Shorten the character length of the argument so it is fewer than or equal to "{0}" characters, and then try the command again.</value>
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
   </data>
   <data name="ValidateSetFailure" xml:space="preserve">
     <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
@@ -210,6 +210,12 @@
   <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
     <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
   </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
   <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
     <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
   </data>
@@ -252,4 +258,10 @@
   <data name="ValidateTrustedDataFailure" xml:space="preserve">
     <value>Cannot process input. The argument "{0}" is not trusted.</value>
   </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/MiniShellErrors.resx b/src/System.Management.Automation/resources/MiniShellErrors.resx
index 152a8f7ad69..d3fa0e20f00 100644
--- a/src/System.Management.Automation/resources/MiniShellErrors.resx
+++ b/src/System.Management.Automation/resources/MiniShellErrors.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/Modules.resx b/src/System.Management.Automation/resources/Modules.resx
index 345811502b6..6319659f1a7 100644
--- a/src/System.Management.Automation/resources/Modules.resx
+++ b/src/System.Management.Automation/resources/Modules.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -231,6 +231,21 @@
   <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
     <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
   </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
   <data name="NoModulesRemoved" xml:space="preserve">
     <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
   </data>
@@ -624,4 +639,49 @@
   <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
     <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
   </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/MshHostRawUserInterfaceStrings.resx b/src/System.Management.Automation/resources/MshHostRawUserInterfaceStrings.resx
index a374f535a98..a2c2a743d1e 100644
--- a/src/System.Management.Automation/resources/MshHostRawUserInterfaceStrings.resx
+++ b/src/System.Management.Automation/resources/MshHostRawUserInterfaceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/MshSignature.resx b/src/System.Management.Automation/resources/MshSignature.resx
index 3285c83d5d1..ca58d166428 100644
--- a/src/System.Management.Automation/resources/MshSignature.resx
+++ b/src/System.Management.Automation/resources/MshSignature.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/MshSnapInCmdletResources.resx b/src/System.Management.Automation/resources/MshSnapInCmdletResources.resx
index 225ef930619..00ff366541c 100644
--- a/src/System.Management.Automation/resources/MshSnapInCmdletResources.resx
+++ b/src/System.Management.Automation/resources/MshSnapInCmdletResources.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/MshSnapinInfo.resx b/src/System.Management.Automation/resources/MshSnapinInfo.resx
index 916a4ea3891..4822e8e7c65 100644
--- a/src/System.Management.Automation/resources/MshSnapinInfo.resx
+++ b/src/System.Management.Automation/resources/MshSnapinInfo.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/NativeCP.resx b/src/System.Management.Automation/resources/NativeCP.resx
index 3d8a596f941..72618d9ce8c 100644
--- a/src/System.Management.Automation/resources/NativeCP.resx
+++ b/src/System.Management.Automation/resources/NativeCP.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PSCommandStrings.resx b/src/System.Management.Automation/resources/PSCommandStrings.resx
index ba273e4ad20..19d64556b63 100644
--- a/src/System.Management.Automation/resources/PSCommandStrings.resx
+++ b/src/System.Management.Automation/resources/PSCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PSConfigurationStrings.resx b/src/System.Management.Automation/resources/PSConfigurationStrings.resx
index a1671d7f9e8..26dff6b06fb 100644
--- a/src/System.Management.Automation/resources/PSConfigurationStrings.resx
+++ b/src/System.Management.Automation/resources/PSConfigurationStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PSDataBufferStrings.resx b/src/System.Management.Automation/resources/PSDataBufferStrings.resx
index 2cfe484db12..0f5b9269f09 100644
--- a/src/System.Management.Automation/resources/PSDataBufferStrings.resx
+++ b/src/System.Management.Automation/resources/PSDataBufferStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PSListModifierStrings.resx b/src/System.Management.Automation/resources/PSListModifierStrings.resx
index f40c61a21a9..c9d82870a7b 100644
--- a/src/System.Management.Automation/resources/PSListModifierStrings.resx
+++ b/src/System.Management.Automation/resources/PSListModifierStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PSStyleStrings.resx b/src/System.Management.Automation/resources/PSStyleStrings.resx
new file mode 100644
index 00000000000..f8917325e88
--- /dev/null
+++ b/src/System.Management.Automation/resources/PSStyleStrings.resx
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
diff --git a/src/System.Management.Automation/resources/ParameterBinderStrings.resx b/src/System.Management.Automation/resources/ParameterBinderStrings.resx
index 8c49becc278..23ee4865ff2 100644
--- a/src/System.Management.Automation/resources/ParameterBinderStrings.resx
+++ b/src/System.Management.Automation/resources/ParameterBinderStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -174,9 +174,6 @@
   <data name="GetDynamicParametersException" xml:space="preserve">
     <value>Cannot retrieve the dynamic parameters for the cmdlet. {6}</value>
   </data>
-  <data name="DynamicParametersCannotCreateParameterSets" xml:space="preserve">
-    <value>Cannot retrieve dynamic parameters for the cmdlet. Dynamic parameter '{1}' specified parameter set '{6}' which was not statically defined for this cmdlet. New parameter sets may not be defined as dynamic parameters, although dynamic parameters may join parameter sets which were statically defined.</value>
-  </data>
   <data name="PromptMessage" xml:space="preserve">
     <value>Supply values for the following parameters:</value>
   </data>
@@ -222,9 +219,6 @@
   <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
     <value>Multiple different default values are defined in $PSDefaultParameterValues for the parameter matching the following name or alias: {0}. These defaults have been ignored.</value>
   </data>
-  <data name="InvalidDefaultParameterHashTable" xml:space="preserve">
-    <value>The automatic variable $PSDefaultParameterValues was ignored because it is not a valid hashtable object. It must be of the type IDictionary.</value>
-  </data>
   <data name="MultipleParametersMatched" xml:space="preserve">
     <value>The following name or alias defined in $PSDefaultParameterValues for this cmdlet resolves to multiple parameters: {0}. The default has been ignored.</value>
   </data>
@@ -252,4 +246,16 @@
   <data name="KeyAlreadyAdded" xml:space="preserve">
     <value>The key '{0}' has already been added to the dictionary.</value>
   </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Method or Property Invocation Not Allowed</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Invocation of Method or Property '{0}' on type '{1}' will not be allowed in Constrained Language mode for untrusted scripts.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Type Creation Not Allowed</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Creation of Type '{0}' will not be allowed during parameter binding in Constrained Language mode for untrusted scripts.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/ParserStrings.resx b/src/System.Management.Automation/resources/ParserStrings.resx
index dd9ce1b8c55..680de71c01e 100644
--- a/src/System.Management.Automation/resources/ParserStrings.resx
+++ b/src/System.Management.Automation/resources/ParserStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,9 +123,6 @@
   <data name="TypeNotFoundWithMessage" xml:space="preserve">
     <value>Unable to find type [{0}]. Details: {1}</value>
   </data>
-  <data name="IncompleteVariableReference" xml:space="preserve">
-    <value>Incomplete variable reference token.</value>
-  </data>
   <data name="IncompleteString" xml:space="preserve">
     <value>Incomplete string token.</value>
   </data>
@@ -141,9 +138,6 @@
   <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
     <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
   </data>
-  <data name="NumberBothLongAndFloatingPoint" xml:space="preserve">
-    <value>A number cannot be both a long and floating point.</value>
-  </data>
   <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
     <value>Cannot use [ref] with other types in a type constraint.</value>
   </data>
@@ -183,14 +177,6 @@
   <data name="InvalidParameter" xml:space="preserve">
     <value>Parameter '{0}' is not valid</value>
   </data>
-  <data name="AmbiguousParameterBaseMessage" xml:space="preserve">
-    <value>Ambiguous parameter '-{0}'
-Possible matches are</value>
-  </data>
-  <data name="AmbiguousParameterExtendMessage" xml:space="preserve">
-    <value>
-    {0} ({1})</value>
-  </data>
   <data name="MissingExpression" xml:space="preserve">
     <value>Missing expression after '{0}' in pipeline element.</value>
   </data>
@@ -227,15 +213,9 @@ Possible matches are</value>
   <data name="EmptyPipeElement" xml:space="preserve">
     <value>An empty pipe element is not allowed.</value>
   </data>
-  <data name="UnknownAssignmentOperator" xml:space="preserve">
-    <value>Unknown assignment operator '{0}'.</value>
-  </data>
   <data name="InvalidLeftHandSide" xml:space="preserve">
     <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
   </data>
-  <data name="NoPropertiesInSplatting" xml:space="preserve">
-    <value>Cannot expand the splatted variable '@{0}'. Splatted variables cannot be used as part of a property or array expression. Assign the result of the expression to a temporary variable then splat the temporary variable instead.</value>
-  </data>
   <data name="AddHashTableToNonHashTable" xml:space="preserve">
     <value>A hash table can only be added to another hash table.</value>
   </data>
@@ -260,9 +240,6 @@ Possible matches are</value>
   <data name="ExpectedValueExpression" xml:space="preserve">
     <value>You must provide a value expression following the '{0}' operator.</value>
   </data>
-  <data name="BadRegularExpression" xml:space="preserve">
-    <value>A regular expression that was provided to '{0}' is not valid: {1}.</value>
-  </data>
   <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
     <value>The '{0}' operator works only on variables or on properties.</value>
   </data>
@@ -275,9 +252,6 @@ Possible matches are</value>
   <data name="MissingPropertyName" xml:space="preserve">
     <value>Missing property name after reference operator.</value>
   </data>
-  <data name="MissingPropertyReference" xml:space="preserve">
-    <value>Property reference or expression is missing or not valid.</value>
-  </data>
   <data name="PropertyNotFound" xml:space="preserve">
     <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
   </data>
@@ -296,8 +270,8 @@ Possible matches are</value>
   <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
     <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
   </data>
-  <data name="ArrayAssignmentFailed" xml:space="preserve">
-    <value>Array assignment to [{0}] failed: {1}.</value>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
   </data>
   <data name="ArraySliceAssignmentFailed" xml:space="preserve">
     <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
@@ -305,18 +279,9 @@ Possible matches are</value>
   <data name="NeedMultidimensionalIndex" xml:space="preserve">
     <value>You cannot index into a {0} dimensional array with index [{1}].</value>
   </data>
-  <data name="KeyTypeMismatch" xml:space="preserve">
-    <value>Unable to assign to a dictionary of type {0} when the key is of type {1}.</value>
-  </data>
-  <data name="NotADictionary" xml:space="preserve">
-    <value>Unable to assign to an index into an object of type {0}.</value>
-  </data>
   <data name="IndexOutOfRange" xml:space="preserve">
     <value>Array assignment failed because index '{0}' was out of range.</value>
   </data>
-  <data name="IndexOperationFailed" xml:space="preserve">
-    <value>Assigning to array element at index [{0}] failed: {1}.</value>
-  </data>
   <data name="MissingExpressionAfterToken" xml:space="preserve">
     <value>Missing expression after '{0}'.</value>
   </data>
@@ -347,15 +312,9 @@ Possible matches are</value>
   <data name="ExpectedExpression" xml:space="preserve">
     <value>An expression was expected after '('.</value>
   </data>
-  <data name="MissingKeyInHashLiteral" xml:space="preserve">
-    <value>Missing key before '=' in hash literal.</value>
-  </data>
   <data name="MissingEqualsInHashLiteral" xml:space="preserve">
     <value>Missing '=' operator after key in hash literal.</value>
   </data>
-  <data name="MissingEqualsInNamedArgument" xml:space="preserve">
-    <value>The "=" operator is missing after a named argument.</value>
-  </data>
   <data name="MissingStatementInHashLiteral" xml:space="preserve">
     <value>Missing statement after '=' in hash literal.</value>
   </data>
@@ -389,9 +348,6 @@ Possible matches are</value>
   <data name="AmbiguousPath" xml:space="preserve">
     <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
   </data>
-  <data name="IncompleteSwitchStatement" xml:space="preserve">
-    <value>The switch statement was incomplete.</value>
-  </data>
   <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
     <value>The {0} '-{1}' parameter is reserved for future use.</value>
   </data>
@@ -410,9 +366,6 @@ Possible matches are</value>
   <data name="PipelineValueRequired" xml:space="preserve">
     <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
   </data>
-  <data name="MissingSwitchValueExpression" xml:space="preserve">
-    <value>Missing expression after '(' in switch statement.</value>
-  </data>
   <data name="MissingSwitchConditionExpression" xml:space="preserve">
     <value>Missing condition in switch statement clause.</value>
   </data>
@@ -457,15 +410,9 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
     <value>Options are not allowed on the -split operator with a predicate.</value>
   </data>
-  <data name="MissingEndMultiLineComment" xml:space="preserve">
-    <value>The terminator '{0}' is missing from the multiline comment.</value>
-  </data>
   <data name="InvalidEndOfLine" xml:space="preserve">
     <value>The token '{0}' is not a valid statement separator in this version.</value>
   </data>
-  <data name="FromKeywordNotAllowed" xml:space="preserve">
-    <value>The 'from' keyword is not supported in this version of the language.</value>
-  </data>
   <data name="ReservedKeywordNotAllowed" xml:space="preserve">
     <value>The '{0}' keyword is not supported in this version of the language.</value>
   </data>
@@ -481,23 +428,17 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="MissingTryStatement" xml:space="preserve">
     <value>Incomplete 'try' statement. A try statement requires a body.</value>
   </data>
-  <data name="InvalidLabelCharacter" xml:space="preserve">
-    <value>The character '{0}' is not valid. Labels can contain only alphanumeric characters, numbers, and underscores ('_').</value>
-  </data>
   <data name="InvalidFunctionParameter" xml:space="preserve">
     <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
   </data>
   <data name="MissingFunctionBody" xml:space="preserve">
     <value>Missing function body in function declaration.</value>
   </data>
-  <data name="BadlyFormedCmdlet" xml:space="preserve">
-    <value>Could not process combined Begin/Process/End clauses with command text. A script or function can either have begin/process/end clauses or command text but not both.</value>
-  </data>
   <data name="DuplicateScriptCommandClause" xml:space="preserve">
     <value>Script command clause '{0}' has already been defined.</value>
   </data>
   <data name="MissingNamedBlocks" xml:space="preserve">
-    <value>unexpected token '{0}', expected 'begin', 'process', 'end', or 'dynamicparam'.</value>
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
   </data>
   <data name="MissingEndCurlyBrace" xml:space="preserve">
     <value>Missing closing '}' in statement block or type definition.</value>
@@ -611,45 +552,18 @@ The correct form is: foreach ($a in $b) {...}</value>
     <value>At {0}:{1} char:{2}
 + {3}</value>
   </data>
-  <data name="TextForCharPositionMessage" xml:space="preserve">
-    <value>At char:{0}</value>
-  </data>
   <data name="TraceScriptLineMessage" xml:space="preserve">
     <value>{0,4}+ {1}</value>
   </data>
-  <data name="TrapOnExceptionMatch" xml:space="preserve">
-    <value>    ! Trap or Catch on matching exception [{0}]</value>
-  </data>
-  <data name="TrapOnSubclassMatch" xml:space="preserve">
-    <value>    ! Trap or Catch on [{0}]; subclass of exception [{1}]</value>
-  </data>
-  <data name="TrapOnGenericException" xml:space="preserve">
-    <value>    ! Trap or Catch generic; caught [{0}]</value>
-  </data>
-  <data name="TraceSetMultipleRemaining" xml:space="preserve">
-    <value>    ! SET-MULTIPLE ${0} assigned remaining {1} values.</value>
-  </data>
-  <data name="TraceSetMultipleIndex" xml:space="preserve">
-    <value>    ! SET-MULTIPLE ${0} = '{1}'.</value>
-  </data>
   <data name="TraceVariableAssignment" xml:space="preserve">
     <value>    ! SET ${0} = '{1}'.</value>
   </data>
-  <data name="TraceEnteringScriptBlock" xml:space="preserve">
-    <value>    ! CALL scriptblock.</value>
-  </data>
-  <data name="TraceEnteringScript" xml:space="preserve">
-    <value>    ! CALL script '{0}'</value>
-  </data>
   <data name="TraceEnteringFunction" xml:space="preserve">
     <value>    ! CALL function '{0}'</value>
   </data>
   <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
     <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
   </data>
-  <data name="TraceParameterizedPropertySet" xml:space="preserve">
-    <value>   ! Setting parameterized property '{0}'</value>
-  </data>
   <data name="TraceMethodCall" xml:space="preserve">
     <value>    ! CALL method '{0}'</value>
   </data>
@@ -662,42 +576,15 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
     <value>Missing ] at end of type token.</value>
   </data>
-  <data name="EndBracketExpectedAtEndOfSubExpression" xml:space="preserve">
-    <value>Missing ) at end of subexpression.</value>
-  </data>
   <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
     <value>Use `{ instead of { in variable names.</value>
   </data>
-  <data name="EndBraceExpectedAtEndOfVariableName" xml:space="preserve">
-    <value>Missing } at end of variable name.</value>
-  </data>
-  <data name="EmptyBracedVariableName" xml:space="preserve">
-    <value>Braced variable name cannot be empty.</value>
-  </data>
   <data name="MissingStatementBlockForDataSection" xml:space="preserve">
     <value>The Data section is missing its statement block.</value>
   </data>
-  <data name="MissingOpenBraceInDataSectionStatement" xml:space="preserve">
-    <value>Missing the opening brace "{" in the Data section.</value>
-  </data>
-  <data name="MissingCloseBraceInDataSectionStatement" xml:space="preserve">
-    <value>Missing closing brace in the data section statement.</value>
-  </data>
-  <data name="InvalidDataSectionBody" xml:space="preserve">
-    <value>The body of the Data section is not valid. The Data section body can be only a convert-* command invocation optionally enclosed by an If statement.</value>
-  </data>
   <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
     <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
   </data>
-  <data name="ExpandableStringsNotSupportedInDataSectionCmdletList" xml:space="preserve">
-    <value>Expandable strings are not allowed in the list of supported commands for the Data section.</value>
-  </data>
-  <data name="InvalidTokenForDataSectionCmdletList" xml:space="preserve">
-    <value>A token that is not valid was found in the list of supported commands for the Data section.</value>
-  </data>
-  <data name="DataSectionNameHasAlreadyBeenUsed" xml:space="preserve">
-    <value>The Data section variable "{0}" has already been used for an existing variable or another Data section.</value>
-  </data>
   <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
     <value>Array references are not allowed in restricted language mode or a Data section.</value>
   </data>
@@ -707,9 +594,6 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
     <value>Redirection is not allowed in restricted language mode or a Data section.</value>
   </data>
-  <data name="OnlyConvertFromCmdletsAreSupportedInDataSection" xml:space="preserve">
-    <value>A command is referenced that is not allowed. Only convertfrom-* commands are supported in restricted language mode or a Data section.</value>
-  </data>
   <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
     <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
   </data>
@@ -782,21 +666,12 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="CustomAttributeTypeNotFound" xml:space="preserve">
     <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
   </data>
-  <data name="CannotFindConstructorForCustomAttribute" xml:space="preserve">
-    <value>Cannot find an appropriate constructor to instantiate the custom attribute object for type '{0}'.</value>
-  </data>
-  <data name="InValidCustomAttributeType" xml:space="preserve">
-    <value>The custom attribute type '{0}' is not derived from System.Attribute.</value>
-  </data>
   <data name="PropertyNotFoundForType" xml:space="preserve">
     <value>Property '{0}' cannot be found for type '{1}'.</value>
   </data>
   <data name="UnexpectedAttribute" xml:space="preserve">
     <value>Unexpected attribute '{0}'.</value>
   </data>
-  <data name="OperatorNotSupportedForType" xml:space="preserve">
-    <value>Operator '{0}' is not supported for type '{1}'.</value>
-  </data>
   <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
     <value>Missing ] at end of attribute or type literal.</value>
   </data>
@@ -893,9 +768,6 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="ErrorStream" xml:space="preserve">
     <value>error stream</value>
   </data>
-  <data name="HostStream" xml:space="preserve">
-    <value>host stream</value>
-  </data>
   <data name="OutputStream" xml:space="preserve">
     <value>output stream</value>
   </data>
@@ -956,12 +828,6 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
     <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
   </data>
-  <data name="ConfigurationNameMissing" xml:space="preserve">
-    <value>The configuration name is missing or '{' was not found for a default definition.</value>
-  </data>
-  <data name="InvalidConfigurationParameter" xml:space="preserve">
-    <value>The parameter {0} is not valid for the configuration statement.</value>
-  </data>
   <data name="InvalidInstanceProperty" xml:space="preserve">
     <value>The member '{0}' is not valid. Valid members are
 '{1}'.</value>
@@ -969,9 +835,6 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="MissingBraceInObjectDefinition" xml:space="preserve">
     <value>Missing '{' in object definition.</value>
   </data>
-  <data name="ParameterNameCanOnlyBeSpecifiedOnce" xml:space="preserve">
-    <value>Parameter {0} can only be specified once for a configuration.</value>
-  </data>
   <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
     <value>A required name or expression was missing.</value>
   </data>
@@ -990,14 +853,6 @@ The correct form is: foreach ($a in $b) {...}</value>
   <data name="MissingConfigurationName" xml:space="preserve">
     <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
   </data>
-  <data name="MissingRequiredResourcesArgument" xml:space="preserve">
-    <value>Missing argument to -Resources. The argument to the -Resource parameter must be a comma-separated list of names or constant strings naming modules to reference for resource type definitions.</value>
-    <comment>-Required Resources should not be localized</comment>
-  </data>
-  <data name="MissingRequiredResourcesArgumentFatalError" xml:space="preserve">
-    <value>Unexpected token '{0}'. The argument to the -Resource parameter must be a comma-separated list of names or constant strings naming modules to reference for resource type definitions.</value>
-    <comment>-Resource parameter should not be localized</comment>
-  </data>
   <data name="ModuleNotFoundDuringParse" xml:space="preserve">
     <value>Could not find the module '{0}'.</value>
   </data>
@@ -1126,6 +981,9 @@ ModuleVersion : Version of module to import. If used, ModuleName must represent
   <data name="ForEachTypeConversionFailed" xml:space="preserve">
     <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
   </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
   <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
     <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
   </data>
@@ -1150,15 +1008,9 @@ ModuleVersion : Version of module to import. If used, ModuleName must represent
   <data name="MissingUsingStatementDirective" xml:space="preserve">
     <value>Missing using directive</value>
   </data>
-  <data name="MissingPropertyNameInClass" xml:space="preserve">
-    <value>Missing property name</value>
-  </data>
   <data name="MissingNamespaceAlias" xml:space="preserve">
     <value>Missing namespace alias</value>
   </data>
-  <data name="MissingTypeAlias" xml:space="preserve">
-    <value>Missing type alias</value>
-  </data>
   <data name="MissingEqualsInUsingAlias" xml:space="preserve">
     <value>Missing '=' operator</value>
   </data>
@@ -1377,6 +1229,9 @@ ModuleVersion : Version of module to import. If used, ModuleName must represent
   <data name="UsingStatementNotSupported" xml:space="preserve">
     <value>This syntax of the 'using' statement is not supported.</value>
   </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
   <data name="InformationStream" xml:space="preserve">
     <value>information stream</value>
   </data>
@@ -1455,33 +1310,9 @@ ModuleVersion : Version of module to import. If used, ModuleName must represent
   <data name="PsDscMissingSchemaStore" xml:space="preserve">
     <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
   </data>
-  <data name="PS7DscSupportDisabled" xml:space="preserve">
-    <value>PS7DscSupport experimental feature is disabled; use Enable-ExperimentalFeature or update powershell.config.json to enable this feature.</value>
-  </data>
   <data name="ParserError" xml:space="preserve">
     <value>{0}</value>
   </data>
-  <data name="ImplicitRemotingPipelineBatchingNotSupported" xml:space="preserve">
-    <value>Command pipeline not supported for implicit remoting batching.</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingNotASimplePipeline" xml:space="preserve">
-    <value>Command is not a simple pipeline and cannot be batched.</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingNotImplicitCommand" xml:space="preserve">
-    <value>The pipeline command '{0}' is not an implicit remoting command or an approved batching command.</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingWrongSession" xml:space="preserve">
-    <value>The pipeline command '{0}' is for a different remote session and cannot be batched.</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingNoPSSession" xml:space="preserve">
-    <value>The implicit remoting PSSession for batching could not be retrieved.</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingException" xml:space="preserve">
-    <value>Exception while checking the command for implicit remoting batching: {0}</value>
-  </data>
-  <data name="ImplicitRemotingPipelineBatchingSuccess" xml:space="preserve">
-    <value>Implicit remoting command pipeline has been batched for execution on remote target.</value>
-  </data>
   <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
     <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
   </data>
@@ -1500,4 +1331,46 @@ ModuleVersion : Version of module to import. If used, ModuleName must represent
   <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
     <value>Background operators can only be used at the end of a pipeline chain.</value>
   </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/PathUtilsStrings.resx b/src/System.Management.Automation/resources/PathUtilsStrings.resx
index 217f2522ac8..2af7f7ec9de 100644
--- a/src/System.Management.Automation/resources/PathUtilsStrings.resx
+++ b/src/System.Management.Automation/resources/PathUtilsStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -138,6 +138,9 @@
   <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
     <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
   </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
   <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
     <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
     <comment>{StrContains="OutputModule"}
diff --git a/src/System.Management.Automation/resources/PipelineStrings.resx b/src/System.Management.Automation/resources/PipelineStrings.resx
index dd44966fc03..8262e72cd95 100644
--- a/src/System.Management.Automation/resources/PipelineStrings.resx
+++ b/src/System.Management.Automation/resources/PipelineStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/PowerShellStrings.resx b/src/System.Management.Automation/resources/PowerShellStrings.resx
index 230ac1b2685..efcf92e6740 100644
--- a/src/System.Management.Automation/resources/PowerShellStrings.resx
+++ b/src/System.Management.Automation/resources/PowerShellStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -132,12 +132,6 @@
   <data name="InvalidRunspaceState" xml:space="preserve">
     <value>Cannot perform operation because the runspace is not in the '{0}' state. Current state of runspace is '{1}'.</value>
   </data>
-  <data name="RemoteRunspacePoolNotOpened" xml:space="preserve">
-    <value>The runspace pool specified is not in an opened state.</value>
-  </data>
-  <data name="OperationNotSupportedForRemoting" xml:space="preserve">
-    <value>This operation is currently not supported in the remoting scenario.</value>
-  </data>
   <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
     <value>Nested PowerShell instances cannot be invoked asynchronously. Use the Invoke method.</value>
   </data>
@@ -159,24 +153,6 @@
   <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
     <value>There is no Runspace available to run commands in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The command you attempted to invoke was: {0}</value>
   </data>
-  <data name="GetJobForCommandNotSupported" xml:space="preserve">
-    <value>GetJobForCommand is not supported when there is more than one command in the PowerShell instance.</value>
-  </data>
-  <data name="GetJobForCommandRequiresACommand" xml:space="preserve">
-    <value>The Command property of a PowerShell object cannot be empty.</value>
-  </data>
-  <data name="JobCannotBeStartedWhenRunning" xml:space="preserve">
-    <value>A job cannot be started when it is already running.</value>
-  </data>
-  <data name="UnblockNotSupported" xml:space="preserve">
-    <value>Support for interactive jobs is not available</value>
-  </data>
-  <data name="JobObjectCanBeUsedOnce" xml:space="preserve">
-    <value>A job object can be used only once.</value>
-  </data>
-  <data name="JobCanBeStartedOnce" xml:space="preserve">
-    <value>A job object cannot be reused.</value>
-  </data>
   <data name="CannotConnect" xml:space="preserve">
     <value>This PowerShell object cannot be connected because it is not associated with a remote runspace or runspace pool.</value>
   </data>
@@ -192,10 +168,6 @@
   <data name="ConnectFailed" xml:space="preserve">
     <value>The connection attempt to the remote command failed.</value>
   </data>
-  <data name="ProxyChildJobControlNotSupported" xml:space="preserve">
-    <value>PSChildJobProxy does not support control methods.</value>
-    <comment>PSChildJobProxy is the name of a class and should not be localized</comment>
-  </data>
   <data name="ExecutionStopping" xml:space="preserve">
     <value>The operation cannot be performed because a command is currently stopping. Wait for the command to complete stopping, and then try the operation again.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/ProgressRecordStrings.resx b/src/System.Management.Automation/resources/ProgressRecordStrings.resx
index f2ac355ab0a..14752a0be59 100644
--- a/src/System.Management.Automation/resources/ProgressRecordStrings.resx
+++ b/src/System.Management.Automation/resources/ProgressRecordStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ProviderBaseSecurity.resx b/src/System.Management.Automation/resources/ProviderBaseSecurity.resx
index f2c066caa4a..f0465e430d6 100644
--- a/src/System.Management.Automation/resources/ProviderBaseSecurity.resx
+++ b/src/System.Management.Automation/resources/ProviderBaseSecurity.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/ProxyCommandStrings.resx b/src/System.Management.Automation/resources/ProxyCommandStrings.resx
index 7c5450f9c50..bc921b07d8b 100644
--- a/src/System.Management.Automation/resources/ProxyCommandStrings.resx
+++ b/src/System.Management.Automation/resources/ProxyCommandStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/RegistryProviderStrings.resx b/src/System.Management.Automation/resources/RegistryProviderStrings.resx
index 046d28b3c10..3bd2e97959b 100644
--- a/src/System.Management.Automation/resources/RegistryProviderStrings.resx
+++ b/src/System.Management.Automation/resources/RegistryProviderStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -132,9 +132,6 @@
   <data name="NewItemAction" xml:space="preserve">
     <value>New Item</value>
   </data>
-  <data name="NewItemResourceTemplateWithType" xml:space="preserve">
-    <value>Item: {0} Type: {1}</value>
-  </data>
   <data name="NewItemResourceTemplate" xml:space="preserve">
     <value>Item: {0}</value>
   </data>
@@ -174,24 +171,6 @@
   <data name="ClearPropertyResourceTemplate" xml:space="preserve">
     <value>Item: {0} Property: {1}</value>
   </data>
-  <data name="SetPropertyValueAtAction" xml:space="preserve">
-    <value>Set Property Value At</value>
-  </data>
-  <data name="SetPropertyValueAtResourceTemplate" xml:space="preserve">
-    <value>Item: {0} Property: {1} At: {2}</value>
-  </data>
-  <data name="AddPropertyValueAtAction" xml:space="preserve">
-    <value>Add Property Value At</value>
-  </data>
-  <data name="AddPropertyValueAtResourceTemplate" xml:space="preserve">
-    <value>Item: {0} Property: {1} At: {2}</value>
-  </data>
-  <data name="RemovePropertyValueAtAction" xml:space="preserve">
-    <value>Remove Property Value At</value>
-  </data>
-  <data name="RemovePropertyValueAtResourceTemplate" xml:space="preserve">
-    <value>Item: {0} Property: {1} At: {2}</value>
-  </data>
   <data name="NewPropertyAction" xml:space="preserve">
     <value>New Property</value>
   </data>
@@ -222,9 +201,6 @@
   <data name="MovePropertyResourceTemplate" xml:space="preserve">
     <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
   </data>
-  <data name="DefaultValueName" xml:space="preserve">
-    <value>(default)</value>
-  </data>
   <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
     <value>The operation was not processed. The location that was provided does not allow this operation.</value>
   </data>
@@ -246,15 +222,6 @@
   <data name="DestinationChildOfSource" xml:space="preserve">
     <value>The operation cannot be performed because the destination path is subordinate to the source path.</value>
   </data>
-  <data name="BadAtParam" xml:space="preserve">
-    <value>The at parameter must be an integer to index a specific property value.</value>
-  </data>
-  <data name="PropertyNotMultivalued" xml:space="preserve">
-    <value>The property is not a multi-valued property. To remove this property, use Remove-ItemProperty.</value>
-  </data>
-  <data name="PropertyNotMultivaluedChange" xml:space="preserve">
-    <value>The property is not a multi-valued property and values cannot be added to it. To change the value use Set-ItemProperty.</value>
-  </data>
   <data name="PropertyAlreadyExists" xml:space="preserve">
     <value>The property already exists.</value>
   </data>
@@ -330,24 +297,12 @@
   <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
     <value>The specified RegistryKeyPermissionCheck value is not valid.</value>
   </data>
-  <data name="ArgumentException_TransactionAbsent" xml:space="preserve">
-    <value>A transaction argument must be specified.</value>
-  </data>
-  <data name="Argument_InvalidSafeHandle" xml:space="preserve">
-    <value>The specified SafeHandle value is not valid.</value>
-  </data>
   <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
     <value>The registry key has subkeys; recursive removals are not supported by this method.</value>
   </data>
-  <data name="InvalidOperation_RemoteNotAllowed" xml:space="preserve">
-    <value>Remote registry operations are not allowed with transactions.</value>
-  </data>
   <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
     <value>Cannot create a KTM handle without a Transaction.Current or specified transaction.</value>
   </data>
-  <data name="InvalidOperation_NoSecurityDescriptor" xml:space="preserve">
-    <value>The object does not contain a security descriptor.</value>
-  </data>
   <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
     <value>The specified transaction or Transaction.Current must match the transaction used to create or open this TransactedRegistryKey.</value>
   </data>
@@ -357,21 +312,6 @@
   <data name="Security_RegistryPermission" xml:space="preserve">
     <value>Requested registry access is not allowed.</value>
   </data>
-  <data name="AccessControl_InvalidOwner" xml:space="preserve">
-    <value>The security identifier is not allowed to be the owner of this object.</value>
-  </data>
-  <data name="AccessControl_InvalidGroup" xml:space="preserve">
-    <value>The security identifier is not allowed to be the primary group of this object.</value>
-  </data>
-  <data name="AccessControl_UnexpectedError" xml:space="preserve">
-    <value>Method failed with unexpected error code {0}.</value>
-  </data>
-  <data name="AccessControl_NoAssociatedSecurity" xml:space="preserve">
-    <value>Unable to perform a security operation on an object that has no associated security. This can happen when trying to get an ACL of an anonymous kernel object.</value>
-  </data>
-  <data name="Transaction_Error" xml:space="preserve">
-    <value>Transaction related error {0} occurred.</value>
-  </data>
   <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
     <value>Access to the registry key '{0}' is denied.</value>
   </data>
@@ -387,15 +327,6 @@
   <data name="NotSupported_KernelTransactions" xml:space="preserve">
     <value>Registry transactions are not supported on this platform.</value>
   </data>
-  <data name="Argument_InvalidPrivilegeName" xml:space="preserve">
-    <value>The specified permission name is not valid.</value>
-  </data>
-  <data name="InvalidOperation_MustBeSameThread" xml:space="preserve">
-    <value>Incorrect thread for enabling or disabling a privilege.</value>
-  </data>
-  <data name="InvalidOperation_MustRevertPrivilege" xml:space="preserve">
-    <value>The permission must be reverted before changing its state again.</value>
-  </data>
   <data name="AccessControl_InvalidHandle" xml:space="preserve">
     <value>The specified handle is not valid.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/RemotingErrorIdStrings.resx b/src/System.Management.Automation/resources/RemotingErrorIdStrings.resx
index b4f9dc40a89..029a7b47b6e 100644
--- a/src/System.Management.Automation/resources/RemotingErrorIdStrings.resx
+++ b/src/System.Management.Automation/resources/RemotingErrorIdStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -123,6 +123,9 @@
   <data name="OutOfMemory" xml:space="preserve">
     <value>Out of process memory.</value>
   </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
   <data name="PipelineIdsDoNotMatch" xml:space="preserve">
     <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
   </data>
@@ -837,8 +840,7 @@ Note that 'Start-Job' is not supported by design in scenarios where PowerShell i
     <value>A {1} job source adapter threw an exception with the following message: {0}</value>
   </data>
   <data name="PSVersionParameterOutOfRange" xml:space="preserve">
-    <value>The value {0} is not valid for the {1} parameter. The available values are 2.0, 3.0, 4.0, 5.0, 5.1.</value>
-    <comment>{StrContains="2.0"} {StrContains="3.0"}</comment>
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
   </data>
   <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
     <value>The Wait and Keep parameters cannot be used together in the same command.</value>
@@ -846,8 +848,8 @@ Note that 'Start-Job' is not supported by design in scenarios where PowerShell i
   <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
     <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
   </data>
-  <data name="PowerShellNotInstalled" xml:space="preserve">
-    <value>PowerShell {0} is not installed. Install PowerShell {0}, and then try again.</value>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
   </data>
   <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
     <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
@@ -1361,7 +1363,7 @@ All WinRM sessions connected to PowerShell session configurations, such as Micro
     <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
   </data>
   <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
-    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell {0} or greater.</value>
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
   </data>
   <data name="ICMInvalidSessionState" xml:space="preserve">
     <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
@@ -1409,7 +1411,7 @@ All WinRM sessions connected to PowerShell session configurations, such as Micro
     <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
   </data>
   <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
-    <value>Cannot enter process {0} because it has not loaded the PowerShell engine.</value>
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
   </data>
   <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
     <value>No process was found with Id: {0}.</value>
@@ -1625,6 +1627,13 @@ All WinRM sessions connected to PowerShell session configurations, such as Micro
   <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
     <value>The SSH client session has ended with error message: {0}</value>
   </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
   <data name="MissingRequiredSSHParameter" xml:space="preserve">
     <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
   </data>
@@ -1696,4 +1705,31 @@ All WinRM sessions connected to PowerShell session configurations, such as Micro
   <data name="WindowsPowerShellNotPresent" xml:space="preserve">
     <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
   </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/RunspaceInit.resx b/src/System.Management.Automation/resources/RunspaceInit.resx
index ac900465d7d..4065ee892ac 100644
--- a/src/System.Management.Automation/resources/RunspaceInit.resx
+++ b/src/System.Management.Automation/resources/RunspaceInit.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -153,6 +153,9 @@
   <data name="OutputEncodingDescription" xml:space="preserve">
     <value>The text encoding used when piping text to a native executable file</value>
   </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
   <data name="PSStyleDescription" xml:space="preserve">
     <value>Configuration controlling how text is rendered.</value>
   </data>
@@ -186,9 +189,15 @@
   <data name="NestedPromptLevelDescription" xml:space="preserve">
     <value>Dictates what type of prompt should be displayed for the current nesting level</value>
   </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
   <data name="WhatIfPreferenceDescription" xml:space="preserve">
     <value>If true, WhatIf is considered to be enabled for all commands.</value>
   </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
   <data name="FormatEnumerationLimitDescription" xml:space="preserve">
     <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
   </data>
diff --git a/src/System.Management.Automation/resources/RunspacePoolStrings.resx b/src/System.Management.Automation/resources/RunspacePoolStrings.resx
index 515bcece698..56c21ec7c63 100644
--- a/src/System.Management.Automation/resources/RunspacePoolStrings.resx
+++ b/src/System.Management.Automation/resources/RunspacePoolStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="RunspacePoolClosed" xml:space="preserve">
-    <value>The runspace pool is closed.</value>
-  </data>
   <data name="MaxPoolLessThan1" xml:space="preserve">
     <value>The maximum pool size cannot be less than 1.</value>
   </data>
@@ -150,9 +147,6 @@
   <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
     <value>This runspace does not support disconnect and connect operations.</value>
   </data>
-  <data name="CannotSetTypeTable" xml:space="preserve">
-    <value>Cannot set the TypeTable data unless the runspace pool is in either the Disconnected or BeforeOpen states.  Current state is {0}.</value>
-  </data>
   <data name="CannotWhileDisconnected" xml:space="preserve">
     <value>Cannot perform the operation because the runspace pool is in the Disconnected state.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/RunspaceStrings.resx b/src/System.Management.Automation/resources/RunspaceStrings.resx
index fa98177bc95..e44f2d7a202 100644
--- a/src/System.Management.Automation/resources/RunspaceStrings.resx
+++ b/src/System.Management.Automation/resources/RunspaceStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -162,9 +162,6 @@
   <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
     <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
   </data>
-  <data name="ParameterNameOrValueNeeded" xml:space="preserve">
-    <value>Parameter name or value must be specified.</value>
-  </data>
   <data name="ChangePropertyAfterOpen" xml:space="preserve">
     <value>This property cannot be changed after the runspace has been opened.</value>
   </data>
@@ -207,9 +204,6 @@
   <data name="CannotConnect" xml:space="preserve">
     <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
   </data>
-  <data name="CmdletNotFoundWhileLoadingModulesOnRunspaceOpen" xml:space="preserve">
-    <value>One or more errors occurred while processing the module '{0}' that is specified in the InitialSessionState object used to create this runspace. For a complete list of errors, see the ErrorRecords property.</value>
-  </data>
   <data name="InvalidMyResultError" xml:space="preserve">
     <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/SecuritySupportStrings.resx b/src/System.Management.Automation/resources/SecuritySupportStrings.resx
index cd8a65a5c90..c8ad9f45ef6 100644
--- a/src/System.Management.Automation/resources/SecuritySupportStrings.resx
+++ b/src/System.Management.Automation/resources/SecuritySupportStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -153,4 +153,16 @@
   <data name="InvalidSessionKey" xml:space="preserve">
     <value>Invalid session key data.</value>
   </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Script file, '{0}', is blocked from running by system policy.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>An unknown script file policy enforcement value was returned: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Script File Read</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Script file '{0}' is not trusted by policy and will run in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/Serialization.resx b/src/System.Management.Automation/resources/Serialization.resx
index ba06ef49e5d..97e7c25bbe9 100644
--- a/src/System.Management.Automation/resources/Serialization.resx
+++ b/src/System.Management.Automation/resources/Serialization.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/SessionStateProviderBaseStrings.resx b/src/System.Management.Automation/resources/SessionStateProviderBaseStrings.resx
index 66a09019c5d..d6065be343c 100644
--- a/src/System.Management.Automation/resources/SessionStateProviderBaseStrings.resx
+++ b/src/System.Management.Automation/resources/SessionStateProviderBaseStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/SessionStateStrings.resx b/src/System.Management.Automation/resources/SessionStateStrings.resx
index 39dd766d749..b106f073d7f 100644
--- a/src/System.Management.Automation/resources/SessionStateStrings.resx
+++ b/src/System.Management.Automation/resources/SessionStateStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -138,9 +138,6 @@
   <data name="ClearItemProviderException" xml:space="preserve">
     <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
-  <data name="ClearItemDynamicParametersProviderException" xml:space="preserve">
-    <value>The dynamic parameters for the ClearItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
-  </data>
   <data name="InvokeDefaultActionProviderException" xml:space="preserve">
     <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
@@ -159,15 +156,9 @@
   <data name="IsItemContainerProviderException" xml:space="preserve">
     <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
-  <data name="IsItemContainerDynamicParametersProviderException" xml:space="preserve">
-    <value>The dynamic parameters for the IsItemContainer cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
-  </data>
   <data name="RemoveItemProviderException" xml:space="preserve">
     <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
-  <data name="RemoveItemDynamicParametersProviderException" xml:space="preserve">
-    <value>The dynamic parameters for the RemoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
-  </data>
   <data name="GetChildrenProviderException" xml:space="preserve">
     <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
@@ -309,15 +300,9 @@
   <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
     <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
   </data>
-  <data name="SecurityDescriptorInterfaceNotSupported" xml:space="preserve">
-    <value>This provider does not support security descriptor related operations.</value>
-  </data>
   <data name="ProviderStartException" xml:space="preserve">
     <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
   </data>
-  <data name="StartDynamicParameterProviderException" xml:space="preserve">
-    <value>Attempting to perform the StartDynamicParameters operation on the '{0}' provider failed for the path '{1}'. {2}</value>
-  </data>
   <data name="InitializeDefaultDrivesException" xml:space="preserve">
     <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
   </data>
@@ -333,9 +318,6 @@
   <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
     <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
   </data>
-  <data name="NormalizeRelativePathLengthLessThanBase" xml:space="preserve">
-    <value>The path '{0}' is shorter than the base path '{1}'.</value>
-  </data>
   <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
     <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
   </data>
@@ -393,27 +375,15 @@
   <data name="AliasIsReadOnly" xml:space="preserve">
     <value>Alias {0} cannot be modified because it is read-only.</value>
   </data>
-  <data name="FilterIsConstant" xml:space="preserve">
-    <value>Filter {0} cannot be modified because it is constant.</value>
-  </data>
-  <data name="FilterIsReadOnly" xml:space="preserve">
-    <value>Filter {0} cannot be modified because it is read-only.</value>
-  </data>
   <data name="FunctionIsConstant" xml:space="preserve">
     <value>Cannot modify function {0} because it is constant.</value>
   </data>
   <data name="FunctionIsReadOnly" xml:space="preserve">
     <value>Cannot modify function {0} because it is read-only.</value>
   </data>
-  <data name="VariableIsConstant" xml:space="preserve">
-    <value>Cannot modify variable {0} because it is a constant.</value>
-  </data>
   <data name="AliasCannotBeMadeConstant" xml:space="preserve">
     <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
   </data>
-  <data name="FilterCannotBeMadeConstant" xml:space="preserve">
-    <value>Existing filter {0} cannot be made constant. Filters can be made constant only at creation time.</value>
-  </data>
   <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
     <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
   </data>
@@ -423,9 +393,6 @@
   <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
     <value>The AllScope option cannot be removed from the alias '{0}'.</value>
   </data>
-  <data name="FilterAllScopeOptionCannotBeRemoved" xml:space="preserve">
-    <value>The AllScope option cannot be removed from the filter '{0}'.</value>
-  </data>
   <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
     <value>The AllScope option cannot be removed from the function '{0}'.</value>
   </data>
@@ -457,7 +424,7 @@
     <value>Cannot find alias because alias '{0}' does not exist.</value>
   </data>
   <data name="PathResolvedToMultiple" xml:space="preserve">
-    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only the set location to a single container at a time.</value>
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
   </data>
   <data name="VariablePathResolvedToMultiple" xml:space="preserve">
     <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
@@ -507,9 +474,6 @@
   <data name="GlobalScopeCannotRemove" xml:space="preserve">
     <value>Global scope cannot be removed.</value>
   </data>
-  <data name="ScopeDepthOverflow" xml:space="preserve">
-    <value>Too many scopes have been created.</value>
-  </data>
   <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
     <value>The scope number '{0}' exceeds the number of active scopes.</value>
   </data>
@@ -627,72 +591,18 @@
   <data name="TempDriveDescription" xml:space="preserve">
     <value>Drive that maps to the temporary directory path for the current user</value>
   </data>
-  <data name="ProviderProviderPathFormatException" xml:space="preserve">
-    <value>The path is not in the correct format. Paths can contain only provider and drive names separated by slashes or backslashes.</value>
-  </data>
-  <data name="ProviderProviderCannotRemoveProvider" xml:space="preserve">
-    <value>Cannot remove provider because removal of providers is not supported.</value>
-  </data>
-  <data name="ProviderProviderCannotCreateProvider" xml:space="preserve">
-    <value>Cannot create provider because creation of new providers is not supported.</value>
-  </data>
-  <data name="ProviderDriveDescription" xml:space="preserve">
-    <value>Drive that contains the list of loaded providers and their drives</value>
-  </data>
-  <data name="NewItemCannotModifyDriveRoot" xml:space="preserve">
-    <value>The root of the drive '{0}' cannot be modified.</value>
-  </data>
-  <data name="NewItemTypeProvider" xml:space="preserve">
-    <value>Cannot create a new provider because type '{0}' is not of type "provider".</value>
-  </data>
-  <data name="NewItemValueMustBeProviderInfo" xml:space="preserve">
-    <value>Cannot set the new item value because the parameter "value" must be of the type ProviderInfo when "type" is specified as "provider".</value>
-  </data>
-  <data name="NewItemTypeDrive" xml:space="preserve">
-    <value>Cannot create a new drive because type '{0}' is not of type "drive".</value>
-  </data>
-  <data name="NewItemValueMustBePSDriveInfo" xml:space="preserve">
-    <value>Cannot set new item value because the parameter "value" must be of type PSDriveInfo when "type" is specified as "drive".</value>
-  </data>
-  <data name="NewItemDriveNameConflict" xml:space="preserve">
-    <value>Cannot create new drive because the name specified in the PSDriveInfo '{0}' does not match the drive name specified in the path '{1}'.</value>
-  </data>
-  <data name="NewItemProviderNameConflict" xml:space="preserve">
-    <value>The provider name specified in the PSDriveInfo '{0}' does not match the provider name specified in the path '{1}'.</value>
-  </data>
-  <data name="RemoveDriveRoot" xml:space="preserve">
-    <value>Cannot remove the drive root in this way. Use "Remove-PSDrive" to remove this drive.</value>
-  </data>
   <data name="NewLinkTargetNotSpecified" xml:space="preserve">
-    <value>Link '{0}' cannot be created because Target was not specified.</value>
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
   </data>
   <data name="DollarNullDescription" xml:space="preserve">
     <value>References to the null variable always return the null value. Assignments have no effect.</value>
   </data>
-  <data name="MaxErrorCountDescription" xml:space="preserve">
-    <value>Maximum number of errors to retain in a session</value>
-  </data>
-  <data name="MaxDriveCountDescription" xml:space="preserve">
-    <value>Maximum number of drives allowed in a session</value>
-  </data>
-  <data name="MaxAliasCountDescription" xml:space="preserve">
-    <value>Maximum number of aliases allowed in a session</value>
-  </data>
-  <data name="MaxFunctionCountDescription" xml:space="preserve">
-    <value>Maximum number of functions allowed in a session</value>
-  </data>
-  <data name="MaxVariableCountDescription" xml:space="preserve">
-    <value>Maximum number of variables allowed in a session</value>
-  </data>
   <data name="MaxHistoryCountDescription" xml:space="preserve">
     <value>Maximum number of history objects to retain in a session</value>
   </data>
   <data name="CannotRenameFunction" xml:space="preserve">
     <value>Cannot rename function because function {0} is read-only or constant.</value>
   </data>
-  <data name="CannotRenameFilter" xml:space="preserve">
-    <value>Cannot rename filter because filter {0} is read-only or constant.</value>
-  </data>
   <data name="CannotRenameAlias" xml:space="preserve">
     <value>Cannot rename alias because alias {0} is read-only or constant.</value>
   </data>
@@ -738,4 +648,10 @@
   <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
     <value>'{0}' parameter cannot be null or empty.</value>
   </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/StringDecoratedStrings.resx b/src/System.Management.Automation/resources/StringDecoratedStrings.resx
new file mode 100644
index 00000000000..fc828f5284e
--- /dev/null
+++ b/src/System.Management.Automation/resources/StringDecoratedStrings.resx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Only 'ANSI' or 'PlainText' is supported for this method.</value>
+  </data>
+</root>
diff --git a/src/System.Management.Automation/resources/SubsystemStrings.resx b/src/System.Management.Automation/resources/SubsystemStrings.resx
index a2819da8682..94f767d0778 100644
--- a/src/System.Management.Automation/resources/SubsystemStrings.resx
+++ b/src/System.Management.Automation/resources/SubsystemStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -135,11 +135,14 @@
   <data name="SubsystemTypeUnknown" xml:space="preserve">
     <value>The specified subsystem type '{0}' is unknown.</value>
   </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
   <data name="SubsystemKindUnknown" xml:space="preserve">
     <value>The specified subsystem kind '{0}' is unknown.</value>
   </data>
-  <data name="ImplementationMismatch" xml:space="preserve">
-    <value>The specified implementation instance implements the subsystem '{0}', which does not match the target subsystem '{1}'.</value>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
   </data>
   <data name="InvalidSubsystemInfo" xml:space="preserve">
     <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
diff --git a/src/System.Management.Automation/resources/SuggestionStrings.resx b/src/System.Management.Automation/resources/SuggestionStrings.resx
index cd44c33e759..b25d11103ae 100644
--- a/src/System.Management.Automation/resources/SuggestionStrings.resx
+++ b/src/System.Management.Automation/resources/SuggestionStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -117,22 +117,13 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="Suggestion_StartTransaction" xml:space="preserve">
-    <value>Once a transaction is started, only commands that get called with the -UseTransaction flag become part of that transaction.</value>
-  </data>
-  <data name="Suggestion_UseTransaction" xml:space="preserve">
-    <value>The Use-Transaction cmdlet is intended for scripting of transaction-enabled .NET objects. Its ScriptBlock should contain nothing else.</value>
-  </data>
   <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
-    <value>The command {0} was not found, but does exist in the current location. PowerShell does not load commands from the current location by default. If you trust this command, instead type: "{1}". See "get-help about_Command_Precedence" for more details.</value>
+    <value>The command "{0}" was not found, but does exist in the current location.
+PowerShell does not load commands from the current location by default (see 'Get-Help about_Command_Precedence').
+
+If you trust this command, run the following command instead:</value>
   </data>
   <data name="Suggestion_CommandNotFound" xml:space="preserve">
-    <value>The most similar commands are: {0}.</value>
-  </data>
-  <data name="RuleMustBeScriptBlock" xml:space="preserve">
-    <value>Rule must be a ScriptBlock for dynamic match types.</value>
-  </data>
-  <data name="InvalidMatchType" xml:space="preserve">
-    <value>MatchType must be 'Command', 'Error', or 'Dynamic'.</value>
+    <value>The most similar commands are:</value>
   </data>
 </root>
diff --git a/src/System.Management.Automation/resources/TabCompletionStrings.resx b/src/System.Management.Automation/resources/TabCompletionStrings.resx
index 33710a77176..5e32821765a 100644
--- a/src/System.Management.Automation/resources/TabCompletionStrings.resx
+++ b/src/System.Management.Automation/resources/TabCompletionStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -329,4 +329,282 @@
   <data name="shrOperatorDescription" xml:space="preserve">
     <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
   </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>  
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
 </root>
diff --git a/src/System.Management.Automation/resources/TransactionStrings.resx b/src/System.Management.Automation/resources/TransactionStrings.resx
index 62558fd797f..9dcefc352f9 100644
--- a/src/System.Management.Automation/resources/TransactionStrings.resx
+++ b/src/System.Management.Automation/resources/TransactionStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/TypesXmlStrings.resx b/src/System.Management.Automation/resources/TypesXmlStrings.resx
index 02c77e45424..25063241cd7 100644
--- a/src/System.Management.Automation/resources/TypesXmlStrings.resx
+++ b/src/System.Management.Automation/resources/TypesXmlStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -126,9 +126,6 @@
   <data name="NotMoreThanOnceOne" xml:space="preserve">
     <value>Node "{0}" must occur only once under "{1}". The parent node, "{1}", will be ignored.</value>
   </data>
-  <data name="NotMoreThanOnceZeroOrOne" xml:space="preserve">
-    <value>Node "{0}" must have a maximum of one occurrence under "{1}". The parent node, "{1}", will be ignored.</value>
-  </data>
   <data name="UnknownNode" xml:space="preserve">
     <value>The node {0} is not allowed. The following nodes are allowed: {1}.</value>
   </data>
@@ -141,18 +138,6 @@
   <data name="NodeNotFoundOnce" xml:space="preserve">
     <value>Node "{0}" was not found. It should occur only once under "{1}". The parent node, "{1}", will be ignored.</value>
   </data>
-  <data name="NodeNotFoundAtLeastOnce" xml:space="preserve">
-    <value>Node "{0}" was not found. It should occur at least once under "{1}". The parent node, "{1}", will be ignored.</value>
-  </data>
-  <data name="ExpectedNodeTypeInstead" xml:space="preserve">
-    <value>Expected XML tag "{0}" instead of node of type "{1}".</value>
-  </data>
-  <data name="UnexpectedNodeType" xml:space="preserve">
-    <value>Node of type "{0}" was not expected.</value>
-  </data>
-  <data name="ExpectedNodeNameInstead" xml:space="preserve">
-    <value>Expected XML tag "{0}" instead of "{1}".</value>
-  </data>
   <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
     <value>The "Type" node must have "Members", "TypeConverters", or "TypeAdapters".</value>
   </data>
@@ -201,9 +186,6 @@
   <data name="IsHiddenNotSupported" xml:space="preserve">
     <value>Node "{0}" should not have "{1}" attribute.</value>
   </data>
-  <data name="IsHiddenValueShouldBeTrueOrFalse" xml:space="preserve">
-    <value>Value should be "true" or "false" instead of "{0}" for "{1}" attribute.</value>
-  </data>
   <data name="FileNotFound" xml:space="preserve">
     <value>{0}, {1}: The file was not found.</value>
   </data>
@@ -261,12 +243,6 @@
   <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
     <value>"{0}" should not have null or an empty string in its property "{1}".</value>
   </data>
-  <data name="DuplicateMembersDefinedInType" xml:space="preserve">
-    <value>More than one member with the name "{0}" is defined in the type file.</value>
-  </data>
-  <data name="DuplicateFileInInitialSessionState" xml:space="preserve">
-    <value>{0}: The file was skipped because it already occurred.</value>
-  </data>
   <data name="TypeNotFound" xml:space="preserve">
     <value>The type "{0}" was not found. The type name value must be the full name of the type. Verify the type name and run the command again.</value>
   </data>
diff --git a/src/System.Management.Automation/resources/VerbDescriptionStrings.resx b/src/System.Management.Automation/resources/VerbDescriptionStrings.resx
index beb07a0afc1..f772ad2e101 100644
--- a/src/System.Management.Automation/resources/VerbDescriptionStrings.resx
+++ b/src/System.Management.Automation/resources/VerbDescriptionStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/WildcardPatternStrings.resx b/src/System.Management.Automation/resources/WildcardPatternStrings.resx
index 2074b571ad9..42b8ee69442 100644
--- a/src/System.Management.Automation/resources/WildcardPatternStrings.resx
+++ b/src/System.Management.Automation/resources/WildcardPatternStrings.resx
@@ -59,8 +59,8 @@
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
diff --git a/src/System.Management.Automation/resources/cs/Authenticode.cs.resx b/src/System.Management.Automation/resources/cs/Authenticode.cs.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Authenticode.cs.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/AuthorizationManagerBase.cs.resx b/src/System.Management.Automation/resources/cs/AuthorizationManagerBase.cs.resx
new file mode 100644
index 00000000000..afc9127c2ed
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/AuthorizationManagerBase.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Selhala kontrola AuthorizationManager.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/AutomationExceptions.cs.resx b/src/System.Management.Automation/resources/cs/AutomationExceptions.cs.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/AutomationExceptions.cs.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CatalogStrings.cs.resx b/src/System.Management.Automation/resources/cs/CatalogStrings.cs.resx
new file mode 100644
index 00000000000..a7dfb6cfd04
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CatalogStrings.cs.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Soubor s definicí katalogu nejde vygenerovat.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Soubor {0} se přidává do katalogu. Relativní cesta souboru v katalogu je {1}.</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Ověření souboru {0} z katalogu se přeskakuje. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>V katalogu se našel soubor {0} s hodnotou hash {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Cesty katalogu obsahují několik souborů se stejnou relativní cestou {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Na disku se našel soubor {0} s hodnotou hash {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Ověření souboru {0} z cesty se přeskakuje.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Nepovedlo se získat popisovač kontextu správce katalogu pro zadaný hashovací algoritmus {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Pro soubor {0} nejde vytvořit hodnotu hash. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Soubor katalogu {0} nejde otevřít.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>Verze katalogu není platná. Podporujeme jen katalog verze {0} a verze {1}.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Soubor s definicí katalogu nejde otevřít.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>V katalogu se našlo několik položek člena souboru {0}.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Název souboru ani cesta pro člena katalogu {0} se nenašly.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Soubor {0} pro výpočet hodnoty hash se nenašel.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Soubor {0} nejde přečíst pro výpočet hodnoty hash.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CimInstanceTypeAdapterResources.cs.resx b/src/System.Management.Automation/resources/cs/CimInstanceTypeAdapterResources.cs.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CimInstanceTypeAdapterResources.cs.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CmdletizationCoreResources.cs.resx b/src/System.Management.Automation/resources/cs/CmdletizationCoreResources.cs.resx
new file mode 100644
index 00000000000..629567f1361
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CmdletizationCoreResources.cs.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Rutiny nad třídou {0}</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>XML definice rutiny pro následující soubor nejde zpracovat: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Atribut ObjectModelWrapper nejde zpracovat. Typ {0} definuje několik sad parametrů. Ověřte, že XML definice rutiny určuje v atributu ObjectModelWrapper platný typ, a zkuste to znovu.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Atribut ObjectModelWrapper nejde zpracovat. Typ {0} je otevřený obecný typ.  Ověřte, že XML definice rutiny určuje v atributu ObjectModelWrapper platný typ, a zkuste to znovu.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Atribut ObjectModelWrapper nejde zpracovat. Typ {0} není odvozený z následující třídy: {1}.  Ověřte, že XML definice rutiny určuje v atributu ObjectModelWrapper platný typ, a zkuste to znovu.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Atribut ObjectModelWrapper nejde zpracovat. Typ {0} definuje parametr rutiny {1} s atributem parametru {2}, který se ignoruje.  Ověřte, že XML definice rutiny určuje v atributu ObjectModelWrapper platný typ, a zkuste to znovu.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Parametr {0} pro rutinu {1} nejde definovat.  Název parametru už je definovaný třídou {2}.  Změňte název parametru v XML definice rutiny a zkuste to znovu.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Parametr {0} pro rutinu {1} nejde definovat. Název parametru už je definovaný v elementu XML {2}. Změňte název parametru v XML definice rutiny a zkuste to znovu.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>Hodnota atributu EnumName neodpovídá platnému identifikátoru jazyka C#: {0}. Ověřte atribut EnumName v XML definice rutiny a zkuste to znovu.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Element &lt;Enum EnumName="{0}" ...&gt; nejde zpracovat.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>Vzdálený počítač vrátil neplatný soubor CDXML. Následující adaptér rutiny není podporovaný pro import modulu CDXML ze vzdáleného počítače: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CommandBaseStrings.cs.resx b/src/System.Management.Automation/resources/cs/CommandBaseStrings.cs.resx
new file mode 100644
index 00000000000..078d56b5f97
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CommandBaseStrings.cs.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Pokračovat v této operaci?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Ano</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Pokračovat jen dalším krokem operace.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>An&amp;o pro všechny</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Pokračovat všemi kroky operace.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Ne</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Přeskočit tuto operaci a pokračovat další operací.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Ne pro vš&amp;echny</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Přeskočit tuto operaci a všechny následující operace.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Zastavit tento příkaz.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Zastavit příkaz</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Pozastavit</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Pozastavit aktuální kanál a vrátit se na příkazový řádek. Kanál obnovíte zadáním {0}.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Program {0} skončil s nenulovým ukončovacím kódem: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Provádí se operace {0} u cíle {1}.</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>Co kdyby: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Opravdu chcete provést tuto akci?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Potvrdit</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>Spuštěný příkaz se zastavil, protože proměnná předvoleb {0} nebo společný parametr mají nastavenou hodnotu Stop: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>Spuštěný příkaz se zastavil, protože proměnná předvoleb {0} nebo společný parametr mají nastavenou hodnotu Stop.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>Spuštěný příkaz se zastavil, protože proměnná předvoleb {0} nebo společný parametr mají nastavenou následující neplatnou hodnotu: {1}.</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>Spuštěný příkaz se zastavil, protože uživatel vybral možnost Zastavit.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>Spuštěný příkaz se zastavil, protože ho uživatel přerušil.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Rutiny odvozené z PSCmdlet nejde vyvolat přímo.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Rutina {0} nepodporuje ve vzdálené relaci parametr {1}.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Celkový počet: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Odhadovaný celkový počet: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Neznámý celkový počet</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>příkaz {0}</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>Objekt {0} je zastaralý. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Volání Exec selhalo s číslem chyby {0} pro příkazový řádek: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Příkaz {0} se nenašel. Zadaný příkaz musí být spustitelný soubor.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Kontrola zpracování bloku skriptu pomocí tečkové notace</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Zpracování bloku skriptu {0} pomocí tečkové notace v režimu omezeného jazyka selže, protože jeho jazykový režim {1} neodpovídá aktuálnímu jazykovému režimu {2}.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Vyhledávač příkazů</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Příkaz {0} v modulu {1} není důvěryhodný a v režimu ConstrainedLanguage nebude přístupný.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ConsoleInfoErrorStrings.cs.resx b/src/System.Management.Automation/resources/cs/ConsoleInfoErrorStrings.cs.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ConsoleInfoErrorStrings.cs.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CoreClrStubResources.cs.resx b/src/System.Management.Automation/resources/cs/CoreClrStubResources.cs.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CoreClrStubResources.cs.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CredUI.cs.resx b/src/System.Management.Automation/resources/cs/CredUI.cs.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CredUI.cs.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/Credential.cs.resx b/src/System.Management.Automation/resources/cs/Credential.cs.resx
new file mode 100644
index 00000000000..75ad22a7587
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Credential.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Přihlašovací údaje nejdou serializovat. Pokud tento příkaz spouští pracovní postup, přihlašovací údaje nejde zachovat, protože proces, ve kterém se pracovní postup spouští, nemá oprávnění k serializaci přihlašovacích údajů.
+
+-- Pokud byl pracovní postup spuštěný v relaci PSSession k místnímu počítači, přidejte k příkazu, který relaci vytvořil, parametr EnableNetworkAccess.
+-- Pokud byl pracovní postup spuštěný v relaci PSSession ke vzdálenému počítači, přidejte k příkazu, který relaci vytvořil, parametr Authentication s hodnotou CredSSP. Nebo se připojte ke konfiguraci relace, která má nastavenou vlastnost RunAsUser.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>Hodnota UserName nemá správný formát.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/CredentialAttributeStrings.cs.resx b/src/System.Management.Automation/resources/cs/CredentialAttributeStrings.cs.resx
new file mode 100644
index 00000000000..25b11f87af4
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/CredentialAttributeStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/DebuggerStrings.cs.resx b/src/System.Management.Automation/resources/cs/DebuggerStrings.cs.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/DebuggerStrings.cs.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/DescriptionsStrings.cs.resx b/src/System.Management.Automation/resources/cs/DescriptionsStrings.cs.resx
new file mode 100644
index 00000000000..c3d57e43c75
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/DescriptionsStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>Vlastnost {0} nemůže být null nebo prázdná.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/DiscoveryExceptions.cs.resx b/src/System.Management.Automation/resources/cs/DiscoveryExceptions.cs.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/DiscoveryExceptions.cs.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/EnumExpressionEvaluatorStrings.cs.resx b/src/System.Management.Automation/resources/cs/EnumExpressionEvaluatorStrings.cs.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/EnumExpressionEvaluatorStrings.cs.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ErrorCategoryStrings.cs.resx b/src/System.Management.Automation/resources/cs/ErrorCategoryStrings.cs.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ErrorCategoryStrings.cs.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ErrorPackage.cs.resx b/src/System.Management.Automation/resources/cs/ErrorPackage.cs.resx
new file mode 100644
index 00000000000..3666d98df4f
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ErrorPackage.cs.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Text chyby je prázdný pro chybu {0}: {1}</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Objekt {0} je hlášen jako chyba.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>Hodnota {0} není pro proměnnou ActionPreference podporována. Zadanou hodnotu lze použít pouze jako hodnotu parametru předvolby a byla nahrazena výchozí hodnotou. Další informace najdete v tématu nápovědy „about_Preference_Variables“.</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>Hodnota ActionPreference {0} je vyhrazena pro budoucí použití a v současné době není podporována. Další informace o proměnných předvoleb najdete v tématu nápovědy „about_Preference_Variables“.</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>Hodnota ActionPreference {0} je vyhrazena pro budoucí použití a v současné době není podporována. Hodnota byla v proměnné {1} nahrazena výchozí hodnotou {2}. Další informace o proměnných předvoleb najdete v tématu nápovědy „about_Preference_Variables“.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/EtwLoggingStrings.cs.resx b/src/System.Management.Automation/resources/cs/EtwLoggingStrings.cs.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/EtwLoggingStrings.cs.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/EventResource.cs.resx b/src/System.Management.Automation/resources/cs/EventResource.cs.resx
new file mode 100644
index 00000000000..e51b96927f1
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/EventResource.cs.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>A message was not found for event id PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Scheduled Job {0} started at {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Scheduled Job {0} completed at {1} with state {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Scheduled Job Exception {0}:
+ Message: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Experimental Feature Initialization: Ignore the experimental feature '{0}' from the config file. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Experimental Feature Initialization: Failed to read the config file.
+ Exception: {0}
+ Message: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Workflow plugin loaded.
+ 	 EndpointName: {0}
+ 	 User: {1}
+ 	 HostingMode: {2}
+ 	 Protocol: {3}
+ 	 Configuration:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Workflow execution started.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Workflow state changed.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Workflow plugin has been requested for a shutdown.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Workflow plugin restarted.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Workflow is resuming.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>A quota limit that was set for the endpoint was exceeded.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Workflow has resumed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Workflow runspace pool was created.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Activity was queued for execution.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Activity execution started.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Workflow is being imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Workflow has been imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Workflow could not be imported from a XAML file because of an error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Workflow validation started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Workflow validation succeeded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Workflow validation failed with error.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Workflow activity validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Workflow activity could not be validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Activity execution failed.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Runspace availability changed.
+ 	 RunspaceId: {0}
+ 	 Availability: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Runspace state changed.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Workflow loaded for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Workflow unloaded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Workflow execution cancelled.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Workflow execution aborted.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Workflow cleanup operation executed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Persisted workflow loaded from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Workflow data was deleted from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Starting remove job.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Job state changed.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Job error.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Job created for workflow (child job).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Parent job created for workflow.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>All required jobs were created for workflow execution.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Child job removed for workflow.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>An error occurred while removing job.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Loading workflow for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Workflow execution finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelling workflow execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Aborting workflow execution.
+ 	 WorkflowId: {0}
+ 	 Reason: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Unloading workflow.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Forced workflow shutdown started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Forced workflow shutdown finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>An error occurred while forcefully shutting down a workflow.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persisting workflow to disk.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Workflow persisted to disk.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Activity execution finished.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Workflow execution error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>A new PowerShell endpoint was registered.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Endpoint configuration modified.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Endpoint configuration unregistered.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Endpoint configuration disabled.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Endpoint configuration enabled.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Out of process runspace started.
+ 	 Command: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Parameter splatting was performed during workflow execution.
+ 	 Parameters: {0}
+ 	 Computers: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Workflow engine started.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Workflow manager instantiated with
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Path: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Computer Name $null or . resolve to LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolving to default scheme http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Remote shell name resolved to default PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creating Scriptblock text ({0} of {1}):
+{2}
+
+ScriptBlock ID: {3}
+Path: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Started invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Completed invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlating activity id's.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Class Name = {0}
+Method Name = {1}
+Workflow GUID = {2}
+Message = {3}
+{4}
+Activity Name = {5}
+Activity GUID = {6}
+Parameters = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating Runspace object
+ 	 Instance Id: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating RunspacePool object
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Opening RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Runspace state changed to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Attempting session creation retry {0} for error code {1} on session Id {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell has started an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell has ended an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>An error has occurred in PowerShell IPC listening thread on process: {0} in AppDomain: {1}.  Error Message: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>PowerShell IPC connect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>PowerShell IPC disconnect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Scheme is {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Test analytic message</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Connection Parameters are
+ Connection URI: {0}
+ Resource URI: {1}
+ User: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Thumb Print: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Received object with Runspace Id: {0} Command Id: {1} Destination: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0}. Establishing a connection using WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0}. Callback received for WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0}. Closing shell using WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0}. Callback received for WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Sending data of size {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Callback received for WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Placing Receive request using WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Received Data of size {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Establishing a command connection using WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Callback received for command connection</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Closing transport for command</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for command close</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Sending signal with code {2} using WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Runspace Id: {0}. Connection is getting redirected to Uri: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Server is sending data of size {2} to client. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Request {0}. Creating a server remote session. UserName: {1} Custom Shell Id: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Reporting context for request: {0} Context Reported: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Reporting operation complete for request: {0}
+ Error Code: {1}
+ Error Message: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Shell Context {0}. Request Id {1}. Creating a commonad session for running a command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Stopping command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Received data from client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Client sent a receive request so that server can send data.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} IsReceiveOperation {2}. Got close operation request.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Loading assembly {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Loading type {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Received remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Sent remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Shutting down winrm service.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Successfully rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Rehydrated object is of type: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Failed to rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Type cast exception: {2}
+ 	 Type cast inner exception: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Serialization depth has been overridden.
+ 	 Serialized type name: {0}
+ 	 Original depth: {1}
+ 	 Overridden depth: {2}
+ 	 Current depth below top level: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Serialization mode has been overridden.
+ 	 Serialized type name: {0}
+ 	 Overridden mode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Serialization of a script property has been skipped, because there is no runspace to use for evaluation of the property.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Getter script: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Serialization of a property has been skipped, because property getter failed.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Exception from property getter: {2}
+ 	 Inner exception from property getter: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Serialization of an enumerable object might not be complete, because object being enumerated threw an exception.
+ 	 Type of object being enumerated: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serialization called object's ToString method which failed.
+ 	 Type of object: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Maximum depth below top level has been reached, forcing object to be serialized as strings.
+ 	 Object type at max depth: {0}
+ 	 Property name at max depth: {1}
+ 	 Depth: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>XmlException has been thrown by the deserializer (most likely indicating incorrect clixml format).
+ 	 Line number: {0} Line position: {1}
+ 	 Exception: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Serialization of specified properties failed, because one of the specified properties was missing.
+ 	 Type of object: {0}
+ 	 Property name: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>PowerShell console is starting up</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>PowerShell console is ready for user input</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Tracing ErrorRecord:
+ Message: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Exception Details:
+ Message : {5}
+ Stack Trace: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exception:
+ Message: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Tracing PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Tracing Job:
+ Id: {0}
+ InstanceId: {1}
+ Name: {2}
+ Location: {3}
+ State: {4}
+ Command: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Trace Information:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Trace Information:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Starting invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Ending invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>END WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob with Guid {0} added to ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob with Guid {0} associated with remote ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>END Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>END Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>BEGIN Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>END Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Persistence store has reached its maximum specified size</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run script file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run a user-selected script from file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the current command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is resuming the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping into debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping over debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping out of debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is setting the breakpoint at line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE has hit a breakpoint on line #: {0} of file {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/EventingResources.cs.resx b/src/System.Management.Automation/resources/cs/EventingResources.cs.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/EventingResources.cs.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ExperimentalFeatureStrings.cs.resx b/src/System.Management.Automation/resources/cs/ExperimentalFeatureStrings.cs.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ExperimentalFeatureStrings.cs.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ExtendedTypeSystem.cs.resx b/src/System.Management.Automation/resources/cs/ExtendedTypeSystem.cs.resx
new file mode 100644
index 00000000000..88ab80ab300
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ExtendedTypeSystem.cs.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Vlastnost "{0}" nebyla nalezena.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} není platná cesta.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/FileSystemProviderStrings.cs.resx b/src/System.Management.Automation/resources/cs/FileSystemProviderStrings.cs.resx
new file mode 100644
index 00000000000..93bd6ce46d9
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/FileSystemProviderStrings.cs.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Kopírování {0} do {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Z: {0} do: {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/FormatAndOutXmlLoadingStrings.cs.resx b/src/System.Management.Automation/resources/cs/FormatAndOutXmlLoadingStrings.cs.resx
new file mode 100644
index 00000000000..e9d98a8937b
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/FormatAndOutXmlLoadingStrings.cs.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Element XML {2} nepovoluje atributy.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Uzel {2} nemůže obsahovat podřízené objekty.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvek {2} není platný.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Je vyžadovaná alespoň jedna výchozí položka {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Může existovat nejvýše jedna výchozí položka {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Název ovládacího prvku nesmí být null ani prázdný.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Zobrazení Out Of Band můžou obsahovat jen CustomControl nebo ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Zobrazení Out Of Band nemůže obsahovat GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Zobrazení nejde načíst.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: {2} není platná hodnota zarovnání.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Očekává se kladné celé číslo.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Definice záhlaví sloupců není platná. Všechna záhlaví se zahodí.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Počet položek řádku = {2} v alternativní sadě #{3} neodpovídá počtu položek výchozího řádku = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Počet položek záhlaví = {2} neodpovídá počtu položek výchozího řádku = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Musí být zadaná alespoň jedna položka zobrazení seznamu.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Položka vlastnosti není platná.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí seznam definic.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Očekává se logická hodnota.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Očekává se nezáporné celé číslo.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Očekává se celé číslo.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí hodnota vnitřního textu.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Seznam tokenů vlastního ovládacího prvku nesmí být prázdný.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvek {2} se nepovedlo načíst.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvek {2} nejde zadat bez výrazu.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvek {2} nejde zadat společně s výrazem.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí formátovací řetězec.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí text bloku skriptu.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí vlastnost.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Blok skriptu {2} není platný.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Řetězec {2} z prostředku {3} v sestavení {4} se nenašel.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prostředek {2} v sestavení {3} se nenašel.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Sestavení {2} se nenašlo.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Uzel musí být typu XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Očekává se výraz.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Bez výrazu nejde použít ovládací prvek ani Label.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Ovládací prvek a Label nejde použít současně.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: SelectionSetName a TypeName nejde použít současně.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Není zadaný typ ani podmínka pro použití zobrazení.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Hodnota {2} není platná.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Existuje duplicitní uzel.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvky {2} a {3} se vzájemně vylučují.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Prvky {2}, {3} a {4} se vzájemně vylučují.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: {2} je neznámý uzel.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: {2} je neznámý atribut.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí atribut {2}.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: Chybí uzel {2}.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: V prvku {2} chybí uzel.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: {2} je prázdný uzel.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Chyba na cestě XPath {0} v souboru {1}: {2} je prázdný atribut.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Chyba v souboru {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Soubor {0} obsahuje příliš mnoho chyb.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Při načítání souboru s daty formátování došlo k chybám: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Globální mezipaměť sestavení) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>Cesta {0} není plně kvalifikovaná. Zadejte plně kvalifikovanou cestu k souboru formátu.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Objekt FormatTable nejde aktualizovat, protože mohl být vytvořený mimo prostředí runspace.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Při načítání objektu FormatTable došlo k chybám. Podrobné chybové zprávy najdete v obsahu vlastnosti Errors.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Chyba v datech formátování {0}: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Počet položek záhlaví = {2} neodpovídá počtu položek výchozího řádku = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Data formátování {2} nejsou platná.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Blok skriptu {2} není platný.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Prvek {2} se nepovedlo načíst.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: TableControl smí obsahovat jen jeden prvek {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Je vyžadovaná alespoň jedna výchozí položka {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Musí být zadaná alespoň jedna položka zobrazení seznamu.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Chyba v datech zobrazení s názvem typu {0} na indexu {1}: Může existovat nejvýše jedna výchozí položka {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Data formátování pro typ {0} obsahují příliš mnoho chyb.</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Sdílenou tabulku formátování nejde aktualizovat více než jednou položkou.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/FormatAndOut_MshParameter.cs.resx b/src/System.Management.Automation/resources/cs/FormatAndOut_MshParameter.cs.resx
new file mode 100644
index 00000000000..143b9a7a56c
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/FormatAndOut_MshParameter.cs.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Hodnotu {0} nejde převést na žádný z následujících typů: {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Hodnota parametru byla null. Očekával se jeden z následujících typů: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>Duplicitní klíč {0} je v konfliktu s klíčem {1}.</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>Klíč {0} má neplatný typ {1}. Očekávají se typy {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>Klíč {0} má neplatný typ {1}. Očekává se typ {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>Klíč {0} je nejednoznačný. Klíče {1} a {2} jsou v konfliktu.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Hodnota klíče nesmí být null.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Typ klíče {0} není platný. Klíč musí být řetězec.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>Klíč {0} nemá žádnou hodnotu.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Chybí povinná položka pro {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>Klíč {0} není platný.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>Hodnota {0} klíče {1} není platná. Platné hodnoty jsou {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>Hodnota {0} klíče {1} musí být větší než 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>Klíč {0} nemůže mít prázdný formátovací řetězec.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>Klíč {0} nemůže mít hodnotu prázdného řetězce.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Hodnota prázdného řetězce není povolená.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>Klíč {0} nemůže v hodnotě {1} obsahovat zástupné znaky.</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>V hodnotě {0} nejsou povolené zástupné znaky.</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>Hodnota EnumerableExpansion není platná.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/FormatAndOut_format_xxx.cs.resx b/src/System.Management.Automation/resources/cs/FormatAndOut_format_xxx.cs.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/FormatAndOut_format_xxx.cs.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/FormatAndOut_out_xxx.cs.resx b/src/System.Management.Automation/resources/cs/FormatAndOut_out_xxx.cs.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/FormatAndOut_out_xxx.cs.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/GetErrorText.cs.resx b/src/System.Management.Automation/resources/cs/GetErrorText.cs.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/GetErrorText.cs.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/HelpDisplayStrings.cs.resx b/src/System.Management.Automation/resources/cs/HelpDisplayStrings.cs.resx
new file mode 100644
index 00000000000..5dff86b74e3
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/HelpDisplayStrings.cs.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NÁZEV</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Příklad</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Odpověď</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Žádné</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx b/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/HelpErrors.cs.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/HistoryStrings.cs.resx b/src/System.Management.Automation/resources/cs/HistoryStrings.cs.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/HistoryStrings.cs.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/HostInterfaceExceptionsStrings.cs.resx b/src/System.Management.Automation/resources/cs/HostInterfaceExceptionsStrings.cs.resx
new file mode 100644
index 00000000000..367553bcad4
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/HostInterfaceExceptionsStrings.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Došlo k chybě typu {0}.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Příkaz s výzvou uživateli selhal, protože hostitelský program nebo typ příkazu nepodporuje interakci s uživatelem. Použijte hostitelský program, který podporuje interakci s uživatelem, například konzolu PowerShellu, a z typů příkazů, které interakci s uživatelem nepodporují, odeberte příkazy související s výzvami.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Příkaz s výzvou uživateli selhal, protože hostitelský program nebo typ příkazu nepodporuje interakci s uživatelem. Hostitel se pokoušel vyžádat potvrzení pomocí následující zprávy: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Metodu nejde vyvolat, protože fond byl zavřený nebo selhal.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/InternalCommandStrings.cs.resx b/src/System.Management.Automation/resources/cs/InternalCommandStrings.cs.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/InternalCommandStrings.cs.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/InternalHostStrings.cs.resx b/src/System.Management.Automation/resources/cs/InternalHostStrings.cs.resx
new file mode 100644
index 00000000000..abd5522d79c
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/InternalHostStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>Metoda EnterNestedPrompt nebyla volána tolikrát, kolikrát byla volána metoda ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/InternalHostUserInterfaceStrings.cs.resx b/src/System.Management.Automation/resources/cs/InternalHostUserInterfaceStrings.cs.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/InternalHostUserInterfaceStrings.cs.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/Logging.cs.resx b/src/System.Management.Automation/resources/cs/Logging.cs.resx
new file mode 100644
index 00000000000..a92e498a54b
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Logging.cs.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    TřídaVýjimky=[ExceptionClass]
+    KategorieChyby=[ErrorCategory]
+    IDChyby=[ErrorId]
+    ChybováZpráva=[ErrorMessage]
+
+    Závažnost=[Severity]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]
+
+DalšíInformace:
+    Název=[AdditionalInfo_Name1];Hodnota=[AdditionalInfo_Value1]
+    Název=[AdditionalInfo_Name2];Hodnota=[AdditionalInfo_Value2]
+    Název=[AdditionalInfo_Name3];Hodnota=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    TřídaVýjimky=[ExceptionClass]
+    KategorieChyby=[ErrorCategory]
+    IDChyby=[ErrorId]
+    ChybováZpráva=[ErrorMessage]
+
+    Závažnost=[Severity]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    NázevPoskytovatele=[ProviderName]
+    TřídaVýjimky=[ExceptionClass]
+    KategorieChyby=[ErrorCategory]
+    IDChyby=[ErrorId]
+    ChybováZpráva=[ErrorMessage]
+
+    Závažnost=[Severity]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NovýStavJádra=[NewEngineState]
+    PředchozíStavJádra=[PreviousEngineState]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NovýStavPříkazu=[NewCommandState]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    NázevPoskytovatele=[ProviderName]
+    NovýStavPoskytovatele=[NewProviderState]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    NázevProměnné=[VariableName]
+    NováHodnota=[NewValue]
+    PředchozíHodnota=[PreviousValue]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevPříkazu=[CommandName]
+    TypPříkazu=[CommandType]
+    NázevSkriptu=[ScriptName]
+    CestaKPříkazu=[CommandPath]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    PořadíPodrobností=[DetailSequence]
+    CelkemPodrobností=[DetailTotal]
+
+    PořadovéČíslo=[SequenceNumber]
+
+    IDUživatele=[User]
+    NázevHostitele=[HostName]
+    VerzeHostitele=[HostVersion]
+    IDHostitele=[HostId]
+    HostitelskáAplikace=[HostApplication]
+    VerzeJádra=[EngineVersion]
+    IDProstředíRunspace=[RunspaceId]
+    IDKanálu=[PipelineId]
+    NázevSkriptu=[ScriptName]
+    PříkazovýŘádek=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>NEZNÁMÉ</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>Experimentální funkce jádra {0} deklarovaná v konfiguračním souboru není v aktuálním PowerShellu zaregistrovaná.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>Experimentální funkce {0} deklarovaná v konfiguračním souboru není platná.
+Název experimentální funkce musí odpovídat následující konvenci: 
+    Název funkce jádra: PS[FeatureName]
+    Název funkce modulu: [ModuleName].[FeatureName]</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/Metadata.cs.resx b/src/System.Management.Automation/resources/cs/Metadata.cs.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Metadata.cs.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/MiniShellErrors.cs.resx b/src/System.Management.Automation/resources/cs/MiniShellErrors.cs.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/MiniShellErrors.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/Modules.cs.resx b/src/System.Management.Automation/resources/cs/Modules.cs.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Modules.cs.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/MshHostRawUserInterfaceStrings.cs.resx b/src/System.Management.Automation/resources/cs/MshHostRawUserInterfaceStrings.cs.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/MshHostRawUserInterfaceStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/MshSignature.cs.resx b/src/System.Management.Automation/resources/cs/MshSignature.cs.resx
new file mode 100644
index 00000000000..c8678bf0687
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/MshSignature.cs.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Podpis byl ověřený.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Soubor {0} není digitálně podepsaný. Tento skript nejde v aktuálním systému spustit. Další informace o spouštění skriptů a nastavení zásad spouštění najdete v tématu about_Execution_Policies na adrese https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Obsah souboru {0} mohla změnit neoprávněná osoba nebo proces, protože hodnota hash souboru neodpovídá hodnotě hash uložené v digitálním podpisu. Skript nejde v zadaném systému spustit. Další informace zobrazíte spuštěním Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Soubor {0} je podepsaný, ale podepisující osoba není v tomto systému důvěryhodná.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Soubor nejde podepsat, protože systém nepodporuje podepisování souborů typu {0}.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Soubor nejde podepsat, protože systém nepodporuje podepisování souborů bez přípony názvu souboru.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>Podpis nejde ověřit, protože není kompatibilní s aktuálním systémem.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>Podpis nejde ověřit, protože není kompatibilní s aktuálním systémem. Hashovací algoritmus není platný.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/MshSnapInCmdletResources.cs.resx b/src/System.Management.Automation/resources/cs/MshSnapInCmdletResources.cs.resx
new file mode 100644
index 00000000000..89cbbc304d3
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/MshSnapInCmdletResources.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Operaci nejde provést. Zadaná rutina není ve vlastním prostředí shellu podporovaná.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Nenašly se žádné moduly snap-in PowerShellu odpovídající vzoru {0}. Zkontrolujte vzor a spusťte příkaz znovu.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Formát zadaného názvu modulu snap-in není platný.  Názvy modulů snap-in PowerShellu můžou obsahovat jen alfanumerické znaky, pomlčky, podtržítka a tečky. Opravte název a potom operaci zopakujte.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Modul snap-in PowerShellu {0} nejde přidat, protože jde o systémový modul PowerShellu. Načtěte modul pomocí Import-Module.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/MshSnapinInfo.cs.resx b/src/System.Management.Automation/resources/cs/MshSnapinInfo.cs.resx
new file mode 100644
index 00000000000..bf9a824782a
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/MshSnapinInfo.cs.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>K informacím registru PowerShellu nejde získat přístup.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>K informacím registru jádra PowerShellu nejde získat přístup.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>K informacím PublicKeyToken nejde získat přístup.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Verze PowerShellu {0} není v tomto počítači k dispozici.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Modul snap-in PowerShellu {0} není v tomto počítači nainstalovaný.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>Povinná hodnota {0} není pro klíč registru {1} zadaná.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>Povinná hodnota {0} nemá správný formát pro klíč registru {1}.  Očekává se formát string.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>Povinná hodnota {0} nemá správný formát pro klíč registru {1}.  Očekává se formát multistring.</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>V registru se nenašly požadované informace nebo chybí soubory klíčů.  Některé rutiny nejdou načíst.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Pro PowerShell verze {0} nejsou zaregistrované žádné moduly snap-in.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Řetězcový prostředek nejde načíst, protože čtečka byla uvolněna.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Hodnota verze {0} není zadaná nebo není správná pro klíč registru {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Pro typ PowerShellu {0} se nenašel žádný atribut [PSVersion]. Přidejte k typu atribut PSVersion pomocí [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/NativeCP.cs.resx b/src/System.Management.Automation/resources/cs/NativeCP.cs.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/NativeCP.cs.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PSCommandStrings.cs.resx b/src/System.Management.Automation/resources/cs/PSCommandStrings.cs.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PSCommandStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PSConfigurationStrings.cs.resx b/src/System.Management.Automation/resources/cs/PSConfigurationStrings.cs.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PSConfigurationStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PSDataBufferStrings.cs.resx b/src/System.Management.Automation/resources/cs/PSDataBufferStrings.cs.resx
new file mode 100644
index 00000000000..0ce597bb9e5
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PSDataBufferStrings.cs.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Zadaný index je menší než nula nebo větší než počet položek ve vyrovnávací paměti. Index musí být v rozsahu {0}–{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Odkaz s hodnotou null nejde převést na hodnotový typ.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Hodnotu typu {0} nejde převést na typ {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Do zavřené vyrovnávací paměti nejde přidávat objekty. Aby operace Add a Insert proběhly úspěšně, musí být vyrovnávací paměť otevřená.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>Vlastnost SerializeInput jde nastavit jen pro typ PSObject kolekce PSDataCollection. Nastavte vlastnost SerializeInput na false nebo změňte typ kolekce na PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PSListModifierStrings.cs.resx b/src/System.Management.Automation/resources/cs/PSListModifierStrings.cs.resx
new file mode 100644
index 00000000000..2edb5f0c8de
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PSListModifierStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Zjistil se následující neznámý modifikátor seznamu: {0}. Platné modifikátory seznamu jsou Add, Remove a Replace.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Aktualizaci nejde použít, protože objekt není podporovaným typem kolekce.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PSStyleStrings.cs.resx b/src/System.Management.Automation/resources/cs/PSStyleStrings.cs.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PSStyleStrings.cs.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ParameterBinderStrings.cs.resx b/src/System.Management.Automation/resources/cs/ParameterBinderStrings.cs.resx
new file mode 100644
index 00000000000..726cdb04f43
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ParameterBinderStrings.cs.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Nenašel se parametr odpovídající názvu parametru {1}.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Nenašel se poziční parametr, který přijímá argument {1}.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Chybí argument parametru {1}. Zadejte parametr typu {2} a zkuste to znovu.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Parametr nejde zpracovat, protože název parametru {1} je nejednoznačný. Mezi možné shody patří:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Hodnotu {6} nejde převést na typ {2} požadovaný parametrem {1}. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Parametr {1} nejde svázat. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Poziční parametry {1} nejdou svázat.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Poziční parametry nejdou svázat, protože nebyly zadané žádné názvy.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Sadu parametrů nelze pomocí zadaných pojmenovaných parametrů rozlišit. Jeden nebo více zadaných parametrů nejde použít společně, případně nebyl zadán dostatečný počet parametrů.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Příkaz nejde zpracovat, protože chybí jeden nebo více povinných parametrů:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Parametr {1} nejde zadat v sadě parametrů {6}.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Parametr nejde svázat, protože parametr {1} je zadaný více než jednou. Chcete-li parametrům, které přijímají více hodnot, předat několik hodnot, použijte syntaxi pole. Například -parameter value1,value2,value3.</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Parametr {1} nejde vyhodnotit, protože jeho argument je zadaný jako blok skriptu a není k dispozici žádný vstup. Blok skriptu nejde vyhodnotit bez vstupu.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Vstup bloku skriptu pro parametr {1} selhal. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Parametr {1} nejde vyhodnotit, protože vstup jeho argumentu nevytvořil žádný výstup.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Vstupní objekt nejde svázat s žádným parametrem příkazu. Příkaz buď nepřijímá vstup z kanálu, nebo vstup a jeho vlastnosti neodpovídají žádnému parametru přijímajícímu vstup z kanálu.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Vstupní objekt nejde svázat, protože neobsahuje informace potřebné ke svázání všech povinných parametrů: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Vstup z kanálu nejde zpracovat, protože se nepovedlo načíst výchozí hodnotu parametru {1}. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Dynamické parametry rutiny nejde načíst. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Zadejte hodnoty následujících parametrů:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>Rutina {0} na pozici {1} v kanálu příkazů</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Transformaci argumentu parametru {1} nejde zpracovat. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Argument parametru {1} nejde ověřit. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Parametr {1} nejde svázat s cílem. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Argument nejde svázat s parametrem {1}, protože má hodnotu null.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Argument nejde svázat s parametrem {1}, protože jde o prázdný řetězec.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Argument nejde svázat s parametrem {1}, protože jde o prázdnou kolekci.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Argument nejde svázat s parametrem {1}, protože jde o prázdné pole.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Nepovedlo se zpracovat příkaz. Parametr {0} je definovaný vícekrát.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Rutinu {0} nejde svázat, protože parametr {1} je typu {2} a metodu Add() nejde určit, nebo existuje několik metod Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Rutinu {0} nejde svázat, protože parametr {1} definovaný za běhu byl přidán do RuntimeDefinedParameterDictionary s klíčem {6}. Klíč musí být stejný jako RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Argument nejde svázat s parametrem {1}, protože hodnoty PSTypeNames argumentu neodpovídají hodnotě PSTypeName požadované parametrem: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>V $PSDefaultParameterValues je pro parametr odpovídající následujícímu názvu nebo aliasu definováno několik různých výchozích hodnot: {0}. Tyto výchozí hodnoty byly ignorovány.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Následující název nebo alias definovaný pro tuto rutinu v $PSDefaultParameterValues odpovídá více parametrům: {0}. Výchozí hodnota byla ignorována.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Tato chyba mohla být způsobená použitím výchozí vazby parametrů. Výchozí vazbu parametrů můžete v $PSDefaultParameterValues zakázat nastavením $PSDefaultParameterValues["Disabled"] na $true a potom to zkusit znovu. Při výskytu chyby byly pro tuto rutinu úspěšně svázány následující výchozí parametry:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Toto selhání mohlo být způsobené použitím výchozí vazby parametrů. Výchozí vazbu parametrů můžete v $PSDefaultParameterValues zakázat nastavením $PSDefaultParameterValues["Disabled"] na $true a potom akci zopakovat. Při výskytu chyby byl pro tuto rutinu úspěšně svázán následující výchozí parametr:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Vazba výchozí hodnoty {0} na parametr {1} selhala: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>Klíč {0} nemá platný formát. Informace o správném formátu najdete v tématu about_Parameters_Default_Values na adrese https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Klíče {0} nemají platný formát. Informace o správném formátu najdete v tématu about_Parameters_Default_Values na adrese https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Parametr {0} je zastaralý. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>Klíč {0} typu {1} není řetězcová hodnota. DefaultParameterDictionary přijímá jen klíče s řetězcovou hodnotou.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>Klíč {0} už byl přidán do slovníku.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Volání metody nebo vlastnosti není povolené</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Volání metody nebo vlastnosti {0} u typu {1} nebude v režimu omezeného jazyka povolené pro nedůvěryhodné skripty.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Vytvoření typu není povolené</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Vytvoření typu {0} nebude při vazbě parametrů v režimu omezeného jazyka povolené pro nedůvěryhodné skripty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ParserStrings.cs.resx b/src/System.Management.Automation/resources/cs/ParserStrings.cs.resx
new file mode 100644
index 00000000000..ad629ff5a40
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ParserStrings.cs.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Nejde načíst sestavení {0}.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PathUtilsStrings.cs.resx b/src/System.Management.Automation/resources/cs/PathUtilsStrings.cs.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PathUtilsStrings.cs.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PipelineStrings.cs.resx b/src/System.Management.Automation/resources/cs/PipelineStrings.cs.resx
new file mode 100644
index 00000000000..4623ca17333
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PipelineStrings.cs.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Instanci rutiny nelze zpracovat, protože ji používá jiný kanál. Obraťte se na služby zákaznické podpory Microsoftu.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Operaci nelze provést, protože je kanál spuštěný. Zastavte kanál a zkuste operaci zopakovat.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>V provádění rutiny nelze pokračovat, protože zásada Stop zabránila spouštění rutin.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Kanál nelze spustit, protože se první rutina v kanálu pokouší číst vstup z výsledků předchozí rutiny. Upravte první rutinu, odeberte první rutinu nebo do kanálu přidejte rutinu, jejíž výstup první rutina vyžaduje, a potom zkuste kanál spustit znovu.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Číslo rutiny nelze zpracovat. Funkce ReadFromCommand musí zadat ID rutiny, která už byla přidána do kanálu. Obraťte se na služby zákaznické podpory Microsoftu.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Výstup funkcí ReadFromCommand a ReadErrorQueue nelze číst, protože jej už čte jiná rutina. Obraťte se na služby zákaznické podpory Microsoftu.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Kanál nelze spustit, protože neobsahuje žádné příkazy. Přidejte do kanálu alespoň jeden příkaz a potom jej spusťte znovu.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Operaci kanálu nelze dokončit, protože ještě nebyla spuštěna. Před voláním metody End() u krokovatelného kanálu je nutné zavolat metodu Begin().</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>Metody WriteObject a WriteError nelze volat mimo přepsané metody BeginProcessing, ProcessRecord a EndProcessing a lze je volat pouze ze stejného vlákna. Ověřte, že rutina tato volání provádí správně, nebo se obraťte na služby zákaznické podpory Microsoftu.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>Po volání ThrowTerminatingError vyvolala rutina výjimku.
+První výjimka byla {0} s trasováním zásobníku {1}.
+Druhá výjimka byla {2} s trasováním zásobníku {3}.</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>Metody WriteObject a WriteError nelze volat po uzavření kanálu. Obraťte se na služby zákaznické podpory Microsoftu.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Při vytváření kanálu došlo k chybě.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Tento kanál nepodporuje sémantiku odpojení a opětovného připojení.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Tento kanál nelze připojit, protože není v odpojeném stavu.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>Objekt prostředí runspace má přidružený vzdálený příkaz s hodnotou null.  Odpojený objekt RemotePipeline nelze vytvořit, protože není zadán žádný vzdálený příkaz.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/PowerShellStrings.cs.resx b/src/System.Management.Automation/resources/cs/PowerShellStrings.cs.resx
new file mode 100644
index 00000000000..f7592f422fc
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/PowerShellStrings.cs.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Stav aktuální instance PowerShellu není pro tuto operaci platný.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Operaci nejde provést, protože příkaz už byl spuštěný. Počkejte na dokončení příkazu nebo ho zastavte a potom operaci zopakujte.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Nejsou zadané žádné příkazy.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>Instance PowerShellu není ve správném stavu pro vytvoření vnořené instance PowerShellu. Vnořené instance PowerShellu se mají vytvářet jen ve spuštěné instanci PowerShellu.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Operaci nejde provést, protože prostředí runspace není ve stavu {0}. Aktuální stav prostředí runspace je {1}.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Vnořené instance PowerShellu nejde vyvolat asynchronně. Použijte metodu Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Objekt {0} nebyl vytvořený voláním {1} v této instanci PowerShellu.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Když je prostředí runspace nastavené na opakované použití vlákna, musí stav apartmentu v nastavení vyvolání odpovídat prostředí runspace.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Když je prostředí runspace nastavené na použití aktuálního vlákna, musí stav apartmentu v nastavení vyvolání odpovídat aktuálnímu vláknu.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>K přidání parametru je nutný příkaz. Před přidáním parametru je potřeba do instance PowerShellu přidat příkaz.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Klíče ve slovníku musí být řetězce.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>V tomto vlákně není k dispozici žádné prostředí Runspace pro spouštění příkazů. Můžete ho zadat ve vlastnosti DefaultRunspace typu System.Management.Automation.Runspaces.Runspace. Pokusili jste se vyvolat tento příkaz: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Tento objekt PowerShellu nejde připojit, protože není přidružený ke vzdálenému prostředí runspace ani fondu runspace.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Spuštěný příkaz byl odpojený, ale na vzdáleném serveru stále běží.  Znovu se připojte, abyste získali stav operace příkazu a výstupní data.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Operaci nejde provést, protože aktuální relace PowerShellu je ve stavu Disconnected.  Připojte tuto relaci PowerShellu a potom počkejte na dokončení příkazu nebo příkaz zastavte.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Operaci nejde provést, protože aktuální relace PowerShellu je ve stavu Disconnected.  Připojte tuto relaci PowerShellu a zkuste to znovu.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Pokus o připojení ke vzdálenému příkazu selhal.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Operaci nejde provést, protože se příkaz právě zastavuje. Počkejte, až se příkaz zastaví, a potom operaci zopakujte.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>V tomto vlákně není k dispozici žádné prostředí Runspace pro spouštění příkazů. Můžete ho zadat ve vlastnosti DefaultRunspace typu System.Management.Automation.Runspaces.Runspace. Aktuální instance PowerShellu neobsahuje žádný příkaz k vyvolání.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Objekt PowerShellu, který používá aktuální prostředí runspace, nejde vytvořit, protože žádné aktuální prostředí runspace není k dispozici.  Aktuální prostředí runspace se možná spouští, například když bylo vytvořené s počátečním stavem relace.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ProgressRecordStrings.cs.resx b/src/System.Management.Automation/resources/cs/ProgressRecordStrings.cs.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ProgressRecordStrings.cs.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ProviderBaseSecurity.cs.resx b/src/System.Management.Automation/resources/cs/ProviderBaseSecurity.cs.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ProviderBaseSecurity.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/ProxyCommandStrings.cs.resx b/src/System.Management.Automation/resources/cs/ProxyCommandStrings.cs.resx
new file mode 100644
index 00000000000..6abc59d7291
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/ProxyCommandStrings.cs.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>Parametr help nebyl rozpoznán jako platný objekt HelpInfo vytvořený příkazem get-help.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>Příkaz proxy nejde vygenerovat, protože CommandMetadata nemá název.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/RegistryProviderStrings.cs.resx b/src/System.Management.Automation/resources/cs/RegistryProviderStrings.cs.resx
new file mode 100644
index 00000000000..93a4b974a2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/RegistryProviderStrings.cs.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Nastavit položku</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Hodnota: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Vymazat položku</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Položka: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Nová položka</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Položka: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Odebrat klíč</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Kopírovat klíč</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Cíl: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Přejmenovat položku</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Nový název: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Přesunout položku</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Cíl: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Nastavit vlastnost</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Vlastnost: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Vymazat vlastnost</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Vlastnost: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Nová vlastnost</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Vlastnost: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Odebrat vlastnost</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Vlastnost: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Přejmenovat vlastnost.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Zdrojová vlastnost: {1} Cílová vlastnost: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Kopírovat vlastnost</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Zdrojová vlastnost: {1} Cílová položka: {2} Cílová vlastnost: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Přesunout vlastnost</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Položka: {0} Zdrojová vlastnost: {1} Cílová položka: {2} Cílová vlastnost: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operace nebyla zpracována. Zadané umístění tuto operaci nepovoluje.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operace není ve zdrojovém umístění povolená.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operace není v cílovém umístění povolená.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Nastavení konfigurace pro místní počítač</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Nastavení softwaru pro aktuálního uživatele</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Klíč v této cestě už existuje.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>Operaci nejde provést, protože cílová cesta je podřízená zdrojové cestě.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>Vlastnost už existuje.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>Vlastnost {0} na cestě {1} neexistuje.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>Klíč registru na zadané cestě neexistuje.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Parametr Type se nepovedlo svázat. Hodnotu {0} se nepovedlo převést na {1}. Možné hodnoty výčtu jsou String, ExpandString, Binary, DWord, MultiString, QWord, Unknown.</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Klíč {0} byl vytvořený, ale nepovedlo se nastavit výchozí hodnotu.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Jednotku se zadaným kořenovým adresářem nejde vytvořit. Kořenová cesta neexistuje.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Položku nejde přejmenovat, protože ve stejném kontejneru už existuje položka s tímto názvem.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Název klíče registru musí začínat platným názvem základního klíče.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>Argument podklíče není platný.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Strom podklíčů nejde odstranit, protože podklíč neexistuje.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Hodnota s tímto názvem neexistuje.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>Hodnota výčtu {0} není platná.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Musí být zadaný argument hodnoty.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Musí být zadaný argument názvu.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>Zadaná hodnota RegistryValueKind není platná.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue nepovoluje String[], které obsahuje řetězcový odkaz s hodnotou null.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Podklíče registru nesmí být delší než 255 znaků.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Musí být zadaný neprázdný název podklíče.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Typ objektu hodnoty neodpovídá zadanému RegistryValueKind nebo objekt nejde správně převést.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue nepodporuje pole typu {0}. Podporují se jen Byte[] a String[].</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>Zadaný klíč registru neexistuje.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>Délka zadaného názvu hodnoty překračuje maximum 16383 znaků.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>Velikost zadaných dat hodnoty překračuje maximum 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>Zadaný podklíč registru neexistuje.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>Zadaná hodnota RegistryKeyPermissionCheck není platná.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>Klíč registru obsahuje podklíče. Tato metoda nepodporuje rekurzivní odebrání.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Popisovač KTM nejde vytvořit bez Transaction.Current nebo zadané transakce.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>Zadaná transakce nebo Transaction.Current musí odpovídat transakci použité k vytvoření nebo otevření objektu TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>Objekt TransactedRegistryKey není přidružený k transakci, protože se vztahuje k předdefinovanému klíči.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>Požadovaný přístup k registru není povolený.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Přístup ke klíči registru {0} byl odepřen.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Do klíče registru nejde zapisovat.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>K zavřenému klíči registru nejde získat přístup.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Neznámá chyba: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Transakce registru nejsou na této platformě podporované.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Zadaný popisovač není platný.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/RemotingErrorIdStrings.cs.resx b/src/System.Management.Automation/resources/cs/RemotingErrorIdStrings.cs.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/RemotingErrorIdStrings.cs.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/RunspaceInit.cs.resx b/src/System.Management.Automation/resources/cs/RunspaceInit.cs.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/RunspaceInit.cs.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/RunspacePoolStrings.cs.resx b/src/System.Management.Automation/resources/cs/RunspacePoolStrings.cs.resx
new file mode 100644
index 00000000000..c0f3e507732
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/RunspacePoolStrings.cs.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>Maximální velikost fondu nemůže být menší než 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>Minimální velikost fondu nemůže být menší než 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>Minimální velikost fondu nemůže být větší než maximální velikost fondu.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Stav fondu prostředí runspace není pro tuto operaci platný.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Operaci nelze provést, protože fond prostředí runspace není ve stavu {0}. Aktuální stav je {1}.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Operaci otevření fondu prostředí runspace nelze provést, protože není ve stavu BeforeOpen. Aktuální stav je {0}.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Objekt {0} nebyl vytvořen voláním {1} pro aktuální instanci RunspacePool.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Prostředí runspace nelze uvolnit do aktuálního fondu, protože do něj nepatří.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Tuto vlastnost nelze po otevření fondu prostředí runspace změnit.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Toto prostředí runspace nepodporuje operace připojení a odpojení.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Operaci nelze provést, protože fond prostředí runspace je ve stavu Odpojeno.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Operace Odpojit není na serveru podporována.  Aby bylo podporováno odpojení vzdáleného fondu prostředí runspace, musí být na serveru spuštěný PowerShell 3.0 nebo novější.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Fond prostředí runspace {0} není nakonfigurován tak, aby poskytoval odpojené objekty PowerShellu pro příkazy spuštěné na vzdáleném serveru.  Použijte statickou metodu GetRunspacePools() třídy RunspacePool k dotazování serveru a vracení objektů fondu prostředí runspace, které jsou nakonfigurovány pro tuto operaci.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Tento fond prostředí runspace nelze připojit, protože odpovídající fond prostředí runspace na straně serveru je připojen k jinému klientovi.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState se na serveru nepodporuje.  Na serveru musí být spuštěný PowerShell 5.0 nebo novější.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/RunspaceStrings.cs.resx b/src/System.Management.Automation/resources/cs/RunspaceStrings.cs.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/RunspaceStrings.cs.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/SecuritySupportStrings.cs.resx b/src/System.Management.Automation/resources/cs/SecuritySupportStrings.cs.resx
new file mode 100644
index 00000000000..130d1dff600
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/SecuritySupportStrings.cs.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Certifikát nelze načíst. Hodnota {0} se musí přeložit na cestu v systému souborů.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Certifikát {0} nelze použít k šifrování. Certifikáty používané k šifrování musí mít nastavené použití klíče šifrování dat nebo šifrování klíče a obsahovat rozšířené použití klíče šifrování dokumentů ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Nelze načíst certifikát. Identifikátor {0} odpovídá více certifikátům. Pokud chcete zašifrovat data pro více příjemců, zadejte do parametru {1} více konkrétních hodnot místo zástupného znaku, který odpovídá více certifikátům.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Certifikát pro šifrování nelze načíst. Nastavení certifikátu {0} nepředstavuje platný certifikát kódovaný pomocí Base64 ani platný certifikát zadaný souborem, adresářem, kryptografickým otiskem nebo názvem subjektu.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>UPOZORNĚNÍ: Certifikát {0} obsahuje privátní klíč. Certifikáty pro protokolování chráněných událostí používané k šifrování by měly obsahovat pouze veřejný klíč.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>CHYBA: Zprávu protokolu událostí {0} nelze chránit: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>CHYBA: Nelze najít nebo použít certifikát: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Klíč relace není k dispozici pro šifrování zabezpečeného řetězce.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Neplatný posun ve vyrovnávací paměti</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Neplatná data veřejného klíče</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Nelze importovat veřejný klíč.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Neplatná data klíče relace</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Spuštění souboru skriptu {0} je blokováno systémovou zásadou.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Byla vrácena neznámá hodnota vynucení zásad souboru skriptu: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Čtení souboru skriptu</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Soubor skriptu {0} není podle zásad důvěryhodný a bude spuštěn v režimu ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/Serialization.cs.resx b/src/System.Management.Automation/resources/cs/Serialization.cs.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/Serialization.cs.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/SessionStateProviderBaseStrings.cs.resx b/src/System.Management.Automation/resources/cs/SessionStateProviderBaseStrings.cs.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/SessionStateProviderBaseStrings.cs.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/SessionStateStrings.cs.resx b/src/System.Management.Automation/resources/cs/SessionStateStrings.cs.resx
new file mode 100644
index 00000000000..67360500c67
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/SessionStateStrings.cs.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Cannot find path '{0}' because it does not exist.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/StringDecoratedStrings.cs.resx b/src/System.Management.Automation/resources/cs/StringDecoratedStrings.cs.resx
new file mode 100644
index 00000000000..94c131b1401
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/StringDecoratedStrings.cs.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Tato metoda podporuje pouze hodnoty ANSI a PlainText.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/SubsystemStrings.cs.resx b/src/System.Management.Automation/resources/cs/SubsystemStrings.cs.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/SubsystemStrings.cs.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/SuggestionStrings.cs.resx b/src/System.Management.Automation/resources/cs/SuggestionStrings.cs.resx
new file mode 100644
index 00000000000..f44a97269e4
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/SuggestionStrings.cs.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>Příkaz {0} se nenašel, ale v aktuálním umístění existuje.
+PowerShell ve výchozím nastavení nenačítá příkazy z aktuálního umístění (viz Get-Help about_Command_Precedence).
+
+Pokud tomuto příkazu důvěřujete, spusťte místo něj následující příkaz:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Nejpodobnější příkazy:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/TabCompletionStrings.cs.resx b/src/System.Management.Automation/resources/cs/TabCompletionStrings.cs.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/TabCompletionStrings.cs.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/TransactionStrings.cs.resx b/src/System.Management.Automation/resources/cs/TransactionStrings.cs.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/TransactionStrings.cs.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/TypesXmlStrings.cs.resx b/src/System.Management.Automation/resources/cs/TypesXmlStrings.cs.resx
new file mode 100644
index 00000000000..707d47ec416
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/TypesXmlStrings.cs.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Chyba: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Chyba v typu {3}: {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Uzel {0} se pod uzlem {1} smí vyskytovat jen jednou. Nadřazený uzel {1} bude ignorován.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Uzel {0} není povolený. Povolené jsou následující uzly: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Uzel {0} by neměl obsahovat vnitřní text.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Uzel {0} by měl obsahovat vnitřní text.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Uzel {0} se nenašel. Pod uzlem {1} se smí vyskytovat jen jednou. Nadřazený uzel {1} bude ignorován.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>Uzel Type musí obsahovat Members, TypeConverters nebo TypeAdapters.</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Instanci převaděče typů pro typ {0} nejde vytvořit kvůli výjimce: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell nemůže vytvořit instanci adaptéru typů pro typ {0} kvůli následující výjimce: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Adaptovaný typ {0} není platný.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>TypeConverter byl ignorován, protože už se vyskytuje.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>TypeAdapter byl ignorován, protože už se vyskytuje.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Typ {0} musí být TypeConverter nebo PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Typ {0} by měl být PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>Člen {0} už existuje.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Následující název členu je rezervovaný: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Výjimka: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty musí obsahovat getter nebo setter.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty musí obsahovat getter nebo setter.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>Místo hodnoty {0} použijte TRUE nebo FALSE.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Uzel {0} by neměl obsahovat atribut {1}.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: Soubor se nenašel.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: Soubor byl přeskočen, protože už byl načtený pomocí {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Klíč registru se nenašel: {0}{1}. Konfigurační soubory se načítají pomocí {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Cesta {0} zadaná v klíči registru {1}{2} se nenašla. Konfigurační soubory se načítají pomocí {3}.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: Soubor byl přeskočen, protože nemá příponu názvu souboru ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: Soubor byl přeskočen kvůli následující výjimce při ověřování: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Člen {0} musí být poznámka.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Poznámku {0}:{1} nejde převést.</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Člen {0} tady nepoužívejte.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>Člen {0} musí být typu {1}.</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>Prvek {0} musí existovat, když {1} má hodnotu {2} a {3} má hodnotu {4}.</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Kvůli předchozí chybě byla ignorována všechna nastavení serializace.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>{0} není standardní člen a bude ignorován.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>Cesta {0} není plně kvalifikovaná. Zadejte plně kvalifikovanou cestu k souboru typu.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>Objekt TypeTable nejde aktualizovat, protože mohl být vytvořený mimo prostředí runspace.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Při načítání objektu TypeTable došlo k chybám. Podrobné chybové zprávy najdete ve vlastnosti Errors.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Chyba v TypeData {0}: {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>Prvek {0} by měl mít ve vlastnosti {1} hodnotu.</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>Prvek {0} nesmí mít ve vlastnosti {1} hodnotu null ani prázdný řetězec.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Typ {0} se nenašel. Hodnota názvu typu musí být úplný název typu. Ověřte název typu a spusťte příkaz znovu.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData musí obsahovat Members, TypeConverters, TypeAdapters nebo StandardMembers.</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Sdílenou tabulku typů nejde aktualizovat více než jednou položkou.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/VerbDescriptionStrings.cs.resx b/src/System.Management.Automation/resources/cs/VerbDescriptionStrings.cs.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/VerbDescriptionStrings.cs.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/cs/WildcardPatternStrings.cs.resx b/src/System.Management.Automation/resources/cs/WildcardPatternStrings.cs.resx
new file mode 100644
index 00000000000..1969709c591
--- /dev/null
+++ b/src/System.Management.Automation/resources/cs/WildcardPatternStrings.cs.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Zadaný vzor se zástupnými znaky není platný: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Authenticode.de.resx b/src/System.Management.Automation/resources/de/Authenticode.de.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Authenticode.de.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/AuthorizationManagerBase.de.resx b/src/System.Management.Automation/resources/de/AuthorizationManagerBase.de.resx
new file mode 100644
index 00000000000..f7623cd74bc
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/AuthorizationManagerBase.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Fehler bei der AuthorizationManager-Überprüfung.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/AutomationExceptions.de.resx b/src/System.Management.Automation/resources/de/AutomationExceptions.de.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/AutomationExceptions.de.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CatalogStrings.de.resx b/src/System.Management.Automation/resources/de/CatalogStrings.de.resx
new file mode 100644
index 00000000000..5d631a47f34
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CatalogStrings.de.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Die Katalogdefinitionsdatei kann nicht generiert werden.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Die Datei „{0}“ wird dem Katalog hinzugefügt. Der relative Pfad der Datei im Katalog ist „{1}“.</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Die Überprüfung der Datei {0} aus dem Katalog wird übersprungen. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Im Katalog wurde eine Datei {0} mit dem Hash von {1}gefunden. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Pfade für Katalog enthält mehrere Dateien mit demselben relativen Pfad {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Die Datei {0} wurde auf dem Datenträger mit dem Hash von {1} gefunden.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Die Überprüfung der Datei {0} aus dem Pfad wird übersprungen.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Für einen angegebenen Hashalgorithmus {0} kann kein Handle für einen Katalogadministratorkontext abgerufen werden.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Der Hash für die Datei {0} kann nicht erstellt werden. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Die Katalogdatei {0} kann nicht geöffnet werden.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>Die Katalogversion ist ungültig. Wir unterstützen nur die Katalogversion {0} und Version {1}.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Die Katalogdefinitionsdatei kann nicht geöffnet werden.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Es wurden mehrere Einträge des Dateimitglieds {0} im Katalog gefunden.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Der Dateiname oder Pfad für das Katalogmitglied {0} wurde nicht gefunden.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Die zu hashende Datei {0} wurde nicht gefunden.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Die Datei {0} kann nicht gelesen werden, um ihren Hash zu berechnen.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CimInstanceTypeAdapterResources.de.resx b/src/System.Management.Automation/resources/de/CimInstanceTypeAdapterResources.de.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CimInstanceTypeAdapterResources.de.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CmdletizationCoreResources.de.resx b/src/System.Management.Automation/resources/de/CmdletizationCoreResources.de.resx
new file mode 100644
index 00000000000..d01b0249919
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CmdletizationCoreResources.de.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Cmdlets über „{0}“-Klasse</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Die Cmdlet Definition XML für die folgende Datei kann nicht verarbeitet werden: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Das ObjectModelWrapper-Attribut kann nicht verarbeitet werden. Der {0} Typ definiert mehrere Parametersätze. Überprüfen Sie, ob die Cmdlet Definition XML einen gültigen Typ im ObjectModelWrapper-Attribut angibt, und wiederholen Sie den Vorgang.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Das ObjectModelWrapper-Attribut kann nicht verarbeitet werden. Der {0} Typ ist ein offener generischer Typ.  Überprüfen Sie, ob die Cmdlet Definition XML einen gültigen Typ im ObjectModelWrapper-Attribut angibt, und wiederholen Sie den Vorgang.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Das ObjectModelWrapper-Attribut kann nicht verarbeitet werden. Der {0} Typ wird nicht von der folgenden Klasse abgeleitet: {1}.  Überprüfen Sie, ob die Cmdlet Definition XML einen gültigen Typ im ObjectModelWrapper-Attribut angibt, und wiederholen Sie den Vorgang.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Das ObjectModelWrapper-Attribut kann nicht verarbeitet werden. Der {0} Typ definiert den {1} cmdlet-Parameter mit einem {2} Attributparameter, der ignoriert wird.  Überprüfen Sie, ob die Cmdlet Definition XML einen gültigen Typ im ObjectModelWrapper-Attribut angibt, und wiederholen Sie den Vorgang.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Der {0} Parameter für das {1} cmdlet kann nicht definiert werden.  Der Parametername ist bereits von der {2} Klasse definiert.  Ändern Sie den Namen des Parameters in Cmdlet Definition XML, und wiederholen Sie den Vorgang.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Der {0} Parameter für das {1} cmdlet kann nicht definiert werden. Der Parametername ist bereits im {2} XML-Element definiert. Ändern Sie den Namen des Parameters in der Cmdlet Definition XML, und versuchen Sie es dann erneut.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>Der Wert des EnumName-Attributs wird nicht in einen gültigen C#-Bezeichner übersetzt: {0}. Überprüfen Sie das EnumName-Attribut in der Cmdlet Definition XML, und versuchen Sie es dann erneut.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Die &lt;Enum EnumName="{0}" ...&gt; Element kann nicht verarbeitet werden.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>Der Remotecomputer hat eine ungültige CDXML-Datei zurückgegeben. Der folgende cmdlet-Adapter wird für den Import eines CDXML-Moduls von einem Remotecomputer nicht unterstützt: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CommandBaseStrings.de.resx b/src/System.Management.Automation/resources/de/CommandBaseStrings.de.resx
new file mode 100644
index 00000000000..f48e5775089
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CommandBaseStrings.de.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Mit diesem Vorgang fortfahren?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Ja</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Fahren Sie nur mit dem nächsten Schritt des Vorgangs fort.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Ja, &amp;alle</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Fahren Sie mit allen Schritten des Vorgangs fort.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Nein</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Überspringen Sie diesen Vorgang, und fahren Sie mit dem nächsten Vorgang fort.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Nein, &amp;keine</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Überspringen Sie diesen Vorgang und alle nachfolgenden Vorgänge.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Beenden Sie diesen Befehl.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>Befehl &amp;anhalten</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Anhalten</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Halten Sie die aktuelle Pipeline an, und kehren Sie zur Eingabeaufforderung zurück. Geben Sie „{0}“ ein, um die Pipeline fortzusetzen.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Das Programm „{0}“ wurde mit einem Exitcode ungleich 0 beendet: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Der Vorgang „{0}“ wird für das Ziel „{1}“ ausgeführt.</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Möchten Sie diese Aktion wirklich ausführen?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Bestätigen</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde beendet, weil die Einstellungsvariable „{0}“ oder der allgemeine Parameter auf „Stopp“ festgelegt ist: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde beendet, da die Einstellungsvariable „{0}“ oder der allgemeine Parameter auf „Stopp“ festgelegt ist.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde beendet, da die Einstellungsvariable „{0}“ oder der allgemeine Parameter auf den folgenden ungültigen Wert festgelegt ist: „{1}“.</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde beendet, da der Benutzer die Option „Stopp“ ausgewählt hat.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde beendet, da der Benutzer den Befehl unterbrochen hat.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Von PSCmdlet abgeleitete Cmdlets können nicht direkt aufgerufen werden.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Das Cmdlet „{0}“ unterstützt den Parameter „{1}“ in einer Remotesitzung nicht.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Gesamtanzahl: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Geschätzte Gesamtanzahl: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Unbekannte Gesamtanzahl</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>Befehl „{0}“</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>Der {0} ist veraltet. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Fehler beim Ausführen des Aufrufs mit errorno {0} für die Befehlszeile: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Der Befehl „{0}“ wurde nicht gefunden. Der angegebene Befehl muss eine ausführbare Datei sein.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Skriptblockverarbeitung Punkt-Quelle-Überprüfung</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Die Dot-Source-Verarbeitung für den Skriptblock „{0}“ schlägt im Modus „Eingeschränkte Sprache“ fehl, da der Sprachmodus „{1}“ nicht mit dem aktuellen Sprachmodus „{2}“ übereinstimmt.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Befehlssuche</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Der Befehl „{0}“ im Modul „{1}“ ist nicht vertrauenswürdig und im ConstrainedLanguage-Modus nicht zugänglich.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ConsoleInfoErrorStrings.de.resx b/src/System.Management.Automation/resources/de/ConsoleInfoErrorStrings.de.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ConsoleInfoErrorStrings.de.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CoreClrStubResources.de.resx b/src/System.Management.Automation/resources/de/CoreClrStubResources.de.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CoreClrStubResources.de.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CredUI.de.resx b/src/System.Management.Automation/resources/de/CredUI.de.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CredUI.de.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Credential.de.resx b/src/System.Management.Automation/resources/de/Credential.de.resx
new file mode 100644
index 00000000000..eac830bb75b
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Credential.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Die Anmeldeinformationen können nicht serialisiert werden. Wenn dieser Befehl einen Workflow startet, können die Anmeldeinformationen nicht beibehalten werden, da der Prozess, in dem der Workflow gestartet wird, nicht über die Berechtigung zum Serialisieren von Anmeldeinformationen verfügt.
+
+– Wenn der Workflow in einer PSSession auf dem lokalen Computer gestartet wurde, fügen Sie dem Befehl, der die Sitzung erstellt hat, den EnableNetworkAccess-Parameter hinzu.
+– Wenn der Workflow in einer PSSession auf einem Remotecomputer gestartet wurde, fügen Sie dem Befehl, der die Sitzung erstellt hat, den Authentication-Parameter mit dem Wert CredSSP hinzu. Oder stellen Sie eine Verbindung mit einer Sitzungskonfiguration her, die über einen RunAsUser-Eigenschaftswert verfügt.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>Der Wert für „UserName“ weist nicht das richtige Format auf.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/CredentialAttributeStrings.de.resx b/src/System.Management.Automation/resources/de/CredentialAttributeStrings.de.resx
new file mode 100644
index 00000000000..f21e9cb19aa
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/CredentialAttributeStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell-Anmeldeinformationsanforderung</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Geben Sie Ihre Anmeldeinformationen ein.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/DebuggerStrings.de.resx b/src/System.Management.Automation/resources/de/DebuggerStrings.de.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/DebuggerStrings.de.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/DescriptionsStrings.de.resx b/src/System.Management.Automation/resources/de/DescriptionsStrings.de.resx
new file mode 100644
index 00000000000..e76a5a450a7
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/DescriptionsStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} darf nicht NULL oder leer sein.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/DiscoveryExceptions.de.resx b/src/System.Management.Automation/resources/de/DiscoveryExceptions.de.resx
new file mode 100644
index 00000000000..8f2975a153d
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/DiscoveryExceptions.de.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>Der Cmdlet-Name „{0}“ kann nicht überprüft werden, da er nicht das richtige Format aufweist. Cmdlet-Namen müssen ein Verb und ein Substantiv enthalten, die durch einen „-“ getrennt sind, z. B. „Get-Process“.</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>Der Parameter „{0}“ wird im Parametersatz „{1}“ mehrmals deklariert.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>Der Alias „{0}“ ist mehrfach deklariert.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Der Parameter konnte nicht deklariert werden. Parameter können nur in Feldern und Eigenschaften deklariert werden.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Das Cmdlet kann nicht verarbeitet werden. Ein Cmdlet-Name muss aus einem durch „-” getrennten Verb- und Substantivpaar bestehen.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>Der Begriff „{0}“ wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
+Prüfen Sie die Schreibweise des Namens bzw. stellen Sie sicher, dass der Pfad korrekt angegeben wurde, und versuchen Sie es erneut.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Das Argument „{0}“ wird nicht als Cmdlet erkannt: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>Das Argument „{0}“ wird nicht als Cmdlet erkannt, da es möglicherweise nicht von der Cmdlet- oder PSCmdlet-Klasse abgeleitet ist: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Der Alias „{0}“ kann nicht aufgelöst werden, da er auf den Begriff „{1}“ verweist, der nicht als Cmdlet, Funktion, ausführbares Programm oder Skriptdatei erkannt wird. Überprüfen Sie den Begriff, und versuchen Sie es erneut.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Der Parameter „{0}“ mit dem Wert „{1}“ kann nicht verarbeitet werden, da er kein Cmdlet ist und nicht vom CommandProcessor verarbeitet werden kann.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>Ein Cmdlet mit dem Namen „{0}“ ist bereits vorhanden. Cmdlets müssen eindeutige Namen haben.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>Ein Cmdlet-Anbieter mit dem Namen „{0}“ ist bereits vorhanden. Cmdlet-Anbieter müssen eindeutige Namen haben.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>Eine Assembly mit dem Namen „{0}“ ist bereits vorhanden. Assemblys müssen eindeutige Namen aufweisen.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>Ein Skript mit dem Namen „{0}“ ist bereits vorhanden. Skripts müssen eindeutige Namen haben.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Die #requires-Anweisung kann nicht verarbeitet werden, da sie nicht das richtige Format aufweist.
+Die #requires-Anweisung muss in einem der folgenden Formate vorliegen:
+ „#requires -shellid &lt;shellID&gt;“
+ „#requires -version &lt;major.minor&gt;“
+ „#requires -psedition &lt;edition&gt;“
+ „#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]“
+ „#requires -modules &lt;ModuleSpecification&gt;“
+ „#requires -runasadministrator“</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da es eine #requires-Anweisung mit der Shell-ID „{1}“ enthält, die mit der aktuellen Shell nicht kompatibel ist. Um dieses Skript auszuführen, müssen Sie die Shell unter „{2}“ verwenden.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da es eine #requires-Anweisung mit der Shell-ID „{1}“ enthält, die mit der aktuellen Shell nicht kompatibel ist.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da es eine #requires-Anweisung für PowerShell „{1}“ enthält. Die vom Skript erforderliche PowerShell-Version stimmt nicht mit der aktuell ausgeführten PowerShell-Version „{2}“ überein.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da es eine #requires-Anweisung für PowerShell-Editionen „{1}“ enthält. Die vom Skript erforderliche PowerShell-Edition stimmt nicht mit der aktuell ausgeführten PowerShell {2}-Edition überein.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da die folgenden Snap-Ins, die in den #requires-Anweisungen des Skripts angegeben sind, fehlen: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>In einer #requires-Anweisung wurde nur eine shellID angegeben. #Requires-Anweisungen müssen ein erforderliches PowerShell-Snap-In angeben, wenn sie in PowerShell ausgeführt werden.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da es eine "#requires"-Anweisung für die Ausführung als Admin enthält. Die aktuelle PowerShell-Sitzung wird nicht als Admin ausgeführt. Starten Sie PowerShell über die Option „Als Admin ausführen“, und versuchen Sie dann erneut, das Skript auszuführen.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>Der Befehl konnte nicht abgerufen werden, da der Parameter ArgumentList nur beim Abrufen eines einzelnen Cmdlets oder Skripts angegeben werden kann.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>Der Parametername „{0}“ ist für die zukünftige Verwendung reserviert.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>Das Skript „{0}“ kann nicht ausgeführt werden, da die folgenden Module, die in den #requires-Anweisungen des Skripts angegeben sind, fehlen: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>Der Befehl „{0}“ wurde im Modul „{1}“ gefunden, aber das Modul konnte nicht geladen werden. Weitere Informationen finden Sie mit „Import-Module {1}“.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>Der Befehl „{0}“ wurde im Modul „{1}“ gefunden, aber das Modul konnte aufgrund des folgenden Fehlers nicht geladen werden: [{2}]
+Weitere Informationen finden Sie mit „Import-Module {1}“.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>Das Modul „{0}“ konnte nicht geladen werden. Weitere Informationen finden Sie mit „Import-Module {0}“.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>Keine übereinstimmenden Befehle enthalten einen Parameter mit dem Namen „{0}“.  Überprüfen Sie die Schreibweise des Parameternamens, und versuchen Sie es dann erneut.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Dieser Befehl kann nicht per Dot-Sourcing aufgerufen werden, da er in einem anderen Sprachmodus definiert wurde. Lassen Sie den Operator „.“ weg, um diesen Befehl aufzurufen, ohne seinen Inhalt zu importieren.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>Die Parameter „ShowCommandInfo“ und „Syntax“ können nicht zusammen angegeben werden.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>Dieser Skriptbefehl ist deaktiviert, wenn die experimentelle Funktion „{0}“ aktiviert ist.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>Dieser Skriptbefehl ist deaktiviert, wenn die experimentelle Funktion „{0}“ deaktiviert ist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/EnumExpressionEvaluatorStrings.de.resx b/src/System.Management.Automation/resources/de/EnumExpressionEvaluatorStrings.de.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/EnumExpressionEvaluatorStrings.de.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ErrorCategoryStrings.de.resx b/src/System.Management.Automation/resources/de/ErrorCategoryStrings.de.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ErrorCategoryStrings.de.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ErrorPackage.de.resx b/src/System.Management.Automation/resources/de/ErrorPackage.de.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ErrorPackage.de.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/EtwLoggingStrings.de.resx b/src/System.Management.Automation/resources/de/EtwLoggingStrings.de.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/EtwLoggingStrings.de.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/EventResource.de.resx b/src/System.Management.Automation/resources/de/EventResource.de.resx
new file mode 100644
index 00000000000..e51b96927f1
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/EventResource.de.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>A message was not found for event id PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Scheduled Job {0} started at {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Scheduled Job {0} completed at {1} with state {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Scheduled Job Exception {0}:
+ Message: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Experimental Feature Initialization: Ignore the experimental feature '{0}' from the config file. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Experimental Feature Initialization: Failed to read the config file.
+ Exception: {0}
+ Message: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Workflow plugin loaded.
+ 	 EndpointName: {0}
+ 	 User: {1}
+ 	 HostingMode: {2}
+ 	 Protocol: {3}
+ 	 Configuration:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Workflow execution started.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Workflow state changed.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Workflow plugin has been requested for a shutdown.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Workflow plugin restarted.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Workflow is resuming.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>A quota limit that was set for the endpoint was exceeded.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Workflow has resumed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Workflow runspace pool was created.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Activity was queued for execution.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Activity execution started.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Workflow is being imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Workflow has been imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Workflow could not be imported from a XAML file because of an error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Workflow validation started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Workflow validation succeeded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Workflow validation failed with error.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Workflow activity validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Workflow activity could not be validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Activity execution failed.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Runspace availability changed.
+ 	 RunspaceId: {0}
+ 	 Availability: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Runspace state changed.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Workflow loaded for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Workflow unloaded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Workflow execution cancelled.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Workflow execution aborted.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Workflow cleanup operation executed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Persisted workflow loaded from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Workflow data was deleted from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Starting remove job.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Job state changed.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Job error.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Job created for workflow (child job).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Parent job created for workflow.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>All required jobs were created for workflow execution.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Child job removed for workflow.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>An error occurred while removing job.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Loading workflow for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Workflow execution finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelling workflow execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Aborting workflow execution.
+ 	 WorkflowId: {0}
+ 	 Reason: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Unloading workflow.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Forced workflow shutdown started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Forced workflow shutdown finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>An error occurred while forcefully shutting down a workflow.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persisting workflow to disk.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Workflow persisted to disk.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Activity execution finished.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Workflow execution error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>A new PowerShell endpoint was registered.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Endpoint configuration modified.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Endpoint configuration unregistered.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Endpoint configuration disabled.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Endpoint configuration enabled.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Out of process runspace started.
+ 	 Command: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Parameter splatting was performed during workflow execution.
+ 	 Parameters: {0}
+ 	 Computers: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Workflow engine started.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Workflow manager instantiated with
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Path: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Computer Name $null or . resolve to LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolving to default scheme http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Remote shell name resolved to default PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creating Scriptblock text ({0} of {1}):
+{2}
+
+ScriptBlock ID: {3}
+Path: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Started invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Completed invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlating activity id's.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Class Name = {0}
+Method Name = {1}
+Workflow GUID = {2}
+Message = {3}
+{4}
+Activity Name = {5}
+Activity GUID = {6}
+Parameters = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating Runspace object
+ 	 Instance Id: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating RunspacePool object
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Opening RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Runspace state changed to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Attempting session creation retry {0} for error code {1} on session Id {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell has started an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell has ended an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>An error has occurred in PowerShell IPC listening thread on process: {0} in AppDomain: {1}.  Error Message: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>PowerShell IPC connect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>PowerShell IPC disconnect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Scheme is {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Test analytic message</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Connection Parameters are
+ Connection URI: {0}
+ Resource URI: {1}
+ User: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Thumb Print: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Received object with Runspace Id: {0} Command Id: {1} Destination: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0}. Establishing a connection using WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0}. Callback received for WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0}. Closing shell using WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0}. Callback received for WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Sending data of size {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Callback received for WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Placing Receive request using WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Received Data of size {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Establishing a command connection using WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Callback received for command connection</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Closing transport for command</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for command close</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Sending signal with code {2} using WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Runspace Id: {0}. Connection is getting redirected to Uri: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Server is sending data of size {2} to client. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Request {0}. Creating a server remote session. UserName: {1} Custom Shell Id: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Reporting context for request: {0} Context Reported: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Reporting operation complete for request: {0}
+ Error Code: {1}
+ Error Message: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Shell Context {0}. Request Id {1}. Creating a commonad session for running a command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Stopping command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Received data from client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Client sent a receive request so that server can send data.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} IsReceiveOperation {2}. Got close operation request.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Loading assembly {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Loading type {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Received remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Sent remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Shutting down winrm service.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Successfully rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Rehydrated object is of type: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Failed to rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Type cast exception: {2}
+ 	 Type cast inner exception: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Serialization depth has been overridden.
+ 	 Serialized type name: {0}
+ 	 Original depth: {1}
+ 	 Overridden depth: {2}
+ 	 Current depth below top level: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Serialization mode has been overridden.
+ 	 Serialized type name: {0}
+ 	 Overridden mode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Serialization of a script property has been skipped, because there is no runspace to use for evaluation of the property.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Getter script: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Serialization of a property has been skipped, because property getter failed.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Exception from property getter: {2}
+ 	 Inner exception from property getter: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Serialization of an enumerable object might not be complete, because object being enumerated threw an exception.
+ 	 Type of object being enumerated: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serialization called object's ToString method which failed.
+ 	 Type of object: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Maximum depth below top level has been reached, forcing object to be serialized as strings.
+ 	 Object type at max depth: {0}
+ 	 Property name at max depth: {1}
+ 	 Depth: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>XmlException has been thrown by the deserializer (most likely indicating incorrect clixml format).
+ 	 Line number: {0} Line position: {1}
+ 	 Exception: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Serialization of specified properties failed, because one of the specified properties was missing.
+ 	 Type of object: {0}
+ 	 Property name: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>PowerShell console is starting up</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>PowerShell console is ready for user input</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Tracing ErrorRecord:
+ Message: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Exception Details:
+ Message : {5}
+ Stack Trace: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exception:
+ Message: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Tracing PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Tracing Job:
+ Id: {0}
+ InstanceId: {1}
+ Name: {2}
+ Location: {3}
+ State: {4}
+ Command: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Trace Information:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Trace Information:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Starting invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Ending invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>END WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob with Guid {0} added to ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob with Guid {0} associated with remote ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>END Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>END Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>BEGIN Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>END Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Persistence store has reached its maximum specified size</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run script file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run a user-selected script from file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the current command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is resuming the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping into debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping over debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping out of debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is setting the breakpoint at line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE has hit a breakpoint on line #: {0} of file {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/EventingResources.de.resx b/src/System.Management.Automation/resources/de/EventingResources.de.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/EventingResources.de.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ExperimentalFeatureStrings.de.resx b/src/System.Management.Automation/resources/de/ExperimentalFeatureStrings.de.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ExperimentalFeatureStrings.de.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ExtendedTypeSystem.de.resx b/src/System.Management.Automation/resources/de/ExtendedTypeSystem.de.resx
new file mode 100644
index 00000000000..8dc22f8b274
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ExtendedTypeSystem.de.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Die {0}-Eigenschaft wurde nicht gefunden.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} ist kein gültiger Pfad.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/FileSystemProviderStrings.de.resx b/src/System.Management.Automation/resources/de/FileSystemProviderStrings.de.resx
new file mode 100644
index 00000000000..490abb2f0cc
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/FileSystemProviderStrings.de.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>'{0}' wird in '{1}' kopiert.</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Von {0} bis {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/FormatAndOutXmlLoadingStrings.de.resx b/src/System.Management.Automation/resources/de/FormatAndOutXmlLoadingStrings.de.resx
new file mode 100644
index 00000000000..b0be1be50f7
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/FormatAndOutXmlLoadingStrings.de.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Das XML-Element {2} lässt keine Attribute zu.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Knoten „{2}“ darf keine untergeordneten Objekte haben.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ungültig.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es muss mindestens ein Standard {2} vorhanden sein.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es darf nicht mehr als ein Standard {2} vorhanden sein.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Steuerelementname darf nicht NULL oder leer sein.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Out-of-Band-Ansichten können nur CustomControl oder ListControl enthalten.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Eine Out-of-Band-Ansicht darf kein GroupBy enthalten.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Ansicht kann nicht geladen werden.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: „{2}“ ist kein gültiger Ausrichtungswert.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es wird eine positive ganze Zahl erwartet.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Definition der Spaltenüberschriften ist ungültig; alle Überschriften werden verworfen.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Anzahl der Zeilenelemente = {2} im alternativen Satz #{3} stimmt nicht mit der Standardanzahl der Zeilenelemente = {4} überein.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Anzahl der Headerelemente = {2} stimmt nicht mit der Standardanzahl der Zeilenelemente = {3} überein.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Mindestens ein Element in der Listenansicht muss angegeben werden.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Eigenschaftseintrag ist ungültig.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Definitionsliste fehlt.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es wird ein boolescher Wert erwartet.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es wird eine nicht negative ganze Zahl erwartet.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Es wird eine ganze Zahl erwartet.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Wert des inneren Texts fehlt.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Tokenliste des benutzerdefinierten Steuerelements darf nicht leer sein.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} konnte nicht geladen werden.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} kann nicht ohne Ausdruck angegeben werden.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} kann nicht mit Ausdruck angegeben werden.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Eine Formatzeichenfolge fehlt.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Skriptblocktext fehlt.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Eine Eigenschaft fehlt.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Skriptblock „{2}“ ist ungültig.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Zeichenfolge {2} aus der Ressource „{3}“ in der Assembly {4} wurde nicht gefunden.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Fehler beim XPath „{0}“ in der Datei {1}: Die Ressource „{2}“ in der Assembly „{3}“ wurde nicht gefunden.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Die Assembly {2} wurde nicht gefunden.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der Knoten muss ein XmlElement sein.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Ein Ausdruck wird erwartet.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Steuerelement oder Label kann nicht ohne Ausdruck verwendet werden.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Steuerelement und Bezeichnung können nicht gleichzeitig vorhanden sein.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: SelectionSetName und TypeName können nicht gleichzeitig angegeben werden.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Für das Anwenden der Ansicht ist kein Typ und keine Bedingung angegeben.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Der {2}-Wert ist ungültig.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Ein doppelter Knoten ist vorhanden.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} und {3} schließen sich gegenseitig aus.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2}, {3} und {4} schließen sich gegenseitig aus.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ein unbekannter Knoten.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ein unbekanntes Attribut.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ein fehlendes Attribut.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: Knoten {2} fehlt.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Fehler beim XPath „{0}“ in der Datei {1}: In „{2}“ fehlt ein Knoten.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ein leerer Knoten.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Fehler bei XPath „{0}“ in Datei {1}: {2} ist ein leeres Attribut.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Fehler in Datei {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Zu viele Fehler in Datei „{0}“.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Beim Laden der Formatdatendatei sind Fehler aufgetreten: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Globaler Assemblycachee) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>Der {0}-Pfad ist nicht vollqualifiziert. Geben Sie einen vollqualifizierten Formatdateipfad an.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Die FormatTable kann nicht aktualisiert werden, da die FormatTable möglicherweise außerhalb des Runspaces erstellt wurde.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Beim Laden der FormatTable sind Fehler aufgetreten. Zeigen Sie den Inhalt der Errors-Eigenschaft an, um detaillierte Fehlermeldungen abzurufen.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Fehler beim Formatieren der Daten „{0}“: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Fehler in den Ansichtsdaten mit dem Typnamen {0} am Index {1}: Die Anzahl der Kopfzeilenelemente = {2} stimmt nicht mit der Standardanzahl der Zeilenelemente = {3} überein.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Die Formatierung der Daten „{2}“ ist ungültig.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Der Skriptblock „{2}“ ist ungültig.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: {2} konnte nicht geladen werden.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Ein TableControl darf nur {2} enthalten.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Es muss mindestens ein Standard {2}vorhanden sein.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Es muss mindestens ein Element in der Listenansicht angegeben werden.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Fehler in Ansichtsdaten mit dem Typnamen „{0}“ bei Index {1}: Es darf nicht mehr als ein Standard {2}vorhanden sein.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Zu viele Fehler in den Formatierungsdaten für Typ „{0}“.</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Eine freigegebene Formattabelle kann nicht mit mehr als einem Eintrag aktualisiert werden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/FormatAndOut_MshParameter.de.resx b/src/System.Management.Automation/resources/de/FormatAndOut_MshParameter.de.resx
new file mode 100644
index 00000000000..efd867e41dc
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/FormatAndOut_MshParameter.de.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>{0} kann nicht in einen der folgenden Typen {1} konver werden.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Der Wert eines Parameters war Null. einer der folgenden Typen wurde erwartet: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>Der duplizierte Schlüssel „{0}“ verursacht einen Konflikt mit „{1}“.</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ weist einen ungültigen Typ {1} auf; erwartete Typen sind {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ weist einen ungültigen Typ „{1}“ auf; erwarteter Typ: {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>Der Schlüssel {0} ist mehrdeutig und {1} und {2} stehen in Konflikt.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Der Wert eines Schlüssels darf nicht Null sein.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Der Schlüsseltyp „{0}“ ist ungültig. Der Schlüssel muss eine Zeichenfolge sein.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ hat keinen Wert.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Ein obligatorischer Eintrag für {0} fehlt.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ ist ungültig.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>Der Wert „{0}“ für den Schlüssel „{1}“ ist ungültig. Gültige Werte sind {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>Der Wert „{0}“ für den Schlüssel „{1}“ muss größer als 0 sein.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>Für den Schlüssel „{0}“ darf keine leere Formatierungszeichenfolge vorhanden sein.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ darf keinen leeren Zeichenfolgenwert aufweisen.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Ein leerer Zeichenfolgenwert ist nicht zulässig.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ darf keine Platzhalterzeichen im Wert „{1}“ enthalten.</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>Die Platzhalterzeichen sind in „{0}“ nicht zulässig.</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>Der EnumerableExpansion-Wert ist ungültig.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/FormatAndOut_format_xxx.de.resx b/src/System.Management.Automation/resources/de/FormatAndOut_format_xxx.de.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/FormatAndOut_format_xxx.de.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/FormatAndOut_out_xxx.de.resx b/src/System.Management.Automation/resources/de/FormatAndOut_out_xxx.de.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/FormatAndOut_out_xxx.de.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/GetErrorText.de.resx b/src/System.Management.Automation/resources/de/GetErrorText.de.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/GetErrorText.de.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/HelpDisplayStrings.de.resx b/src/System.Management.Automation/resources/de/HelpDisplayStrings.de.resx
new file mode 100644
index 00000000000..570244f98ea
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/HelpDisplayStrings.de.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NAME</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Beispiel</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Antwort</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Keine</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/HelpErrors.de.resx b/src/System.Management.Automation/resources/de/HelpErrors.de.resx
new file mode 100644
index 00000000000..2e0b6273476
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/HelpErrors.de.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>„Get-Help“ konnte in dieser Sitzung keine „{0}“ in einer Hilfedatei finden. Geben Sie zum Herunterladen aktualisierter Hilfethemen Folgendes ein: „Update-Help“. Um online Hilfe zu erhalten, suchen Sie in der TechNet-Bibliothek unter https://go.microsoft.com/fwlink/?LinkID=107116 nach dem Hilfethema.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Die Hilfekategorie kann nicht verarbeitet werden, da „{0}“ keine gültige Hilfekategorie ist.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Die Hilfedatei „{0}“ kann nicht geladen werden. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Auf die Hilfedatei „{0}“ kann nicht zugegriffen werden, da der aktuelle Benutzer keine Zugriffsrechte für die Datei besitzt. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>Die Hilfedatei „{0}“ ist kein gültiges XML-Dokument. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>Beim Laden des Hilfeinhalts für „{0}“ aus der Datei „{1}“ ist ein Fehler aufgetreten. Details: {2}. Um aktualisierte Hilfethemen herunterzuladen, führen Sie das Cmdlet „Update-Help“ aus. Um online Hilfe zu erhalten, suchen Sie in der TechNet-Bibliothek unter https://go.microsoft.com/fwlink/?LinkID=107116 nach dem Hilfethema.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>Der Anbieter „{0}“ kann nicht geladen werden. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Die Hilfedatei kann nicht geladen werden. Die folgenden {1}-Fehler sind beim Laden der Hilfedatei „{0}“ aufgetreten.</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>Der Knoten „{0}“ darf „{1}“ nicht als untergeordneten Knoten haben. Knotenpfad: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>Der Knoten „{0}“ darf maximal {2} untergeordnete Knoten vom Typ „{1}“ haben. Knotenpfad: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Der Registrierungsschlüssel „{0}{1}“ wurde nicht gefunden; verwenden Sie „{2}“ zum Laden der Hilfedateien.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>Kein Parameter entspricht den {0}-Kriterien.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>„{0}“ wird von der angeforderten Hilfekategorie nicht unterstützt.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>Die Onlineversion dieses Hilfethemas kann nicht angezeigt werden, da die Internetadresse (URI) des Hilfethemas im Befehlscode oder in der Hilfedatei für den Befehl nicht angegeben ist.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>Der angegebene URI „{0}“ ist ungültig.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Beim Starten eines Browsers zum Anzeigen der Onlinehilfe ist ein Fehler aufgetreten. Zum Öffnen der URI „{0}“ ist kein Programm oder Browser zugeordnet.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>Das im URI „{0}“ angegebene Protokoll wird nicht unterstützt. Es werden nur die Protokolle „{1}“ und „{2}“ unterstützt.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Es wurden mehrere Hilfethemen gefunden. Verwenden Sie nur ein Hilfethema mit der Option „-{0} “.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Von einem Remoterunspace kann keine Hilfe abgerufen werden, da der Runspace nicht geöffnet wurde.  Öffnen Sie den Runspace, indem Sie einen impliziten Remotingbefehl ausführen, und versuchen Sie dann erneut, den Befehl zum Abrufen der Hilfe auszuführen.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Der Zugriff wird verweigert. Der Befehl konnte die Hilfethemen für die PowerShell-Kernmodule oder für Module im Verzeichnis „$pshome\Modules“ nicht aktualisieren.
+Um diese Hilfethemen zu aktualisieren, starten Sie PowerShell mit dem Befehl „Als Admin ausführen“, und führen Sie „Update-Help“ erneut aus.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>Um die „{0}“ zu verwenden, stellen Sie sicher, dass Ihre Anwendung „Microsoft.NET.Sdk.WindowsDesktop“ als Projekt-SDK verwendet und die entsprechende Assembly „Microsoft.PowerShell.GraphicalHost“ verfügbar ist. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>„{0}“ funktioniert in einer Remotesitzung nicht.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>„ForwardHelpTargetName“ kann nicht auf die Funktion selbst verweisen.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>In einer eingeschränkten Sitzung kann keine Hilfe von einem Netzwerkstandort abgerufen werden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/HistoryStrings.de.resx b/src/System.Management.Automation/resources/de/HistoryStrings.de.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/HistoryStrings.de.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/HostInterfaceExceptionsStrings.de.resx b/src/System.Management.Automation/resources/de/HostInterfaceExceptionsStrings.de.resx
new file mode 100644
index 00000000000..a8264688cfc
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/HostInterfaceExceptionsStrings.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Ein Fehler vom Typ „{0}“ ist aufgetreten.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Ein Befehl, der einen Prompt an die Benutzerseite stellte, ist fehlgeschlagen, da das Hostprogramm oder der Befehlstyp keine Benutzerinteraktion unterstützt. Verwenden Sie ein Hostprogramm, das Benutzerinteraktion unterstützt, z. B. die PowerShell-Konsole, und entfernen Sie Befehle mit Eingabeaufforderungen aus Befehlstypen, die keine Benutzerinteraktion unterstützen.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Ein Befehl, der einen Prompt an die Benutzerseite stellte, ist fehlgeschlagen, da das Hostprogramm oder der Befehlstyp keine Benutzerinteraktion unterstützt. Der Host hat versucht, mit der folgenden Meldung eine Bestätigung anzufordern: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Die Methode kann nicht aufgerufen werden, da der Pool geschlossen wurde oder ein Fehler aufgetreten ist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/InternalCommandStrings.de.resx b/src/System.Management.Automation/resources/de/InternalCommandStrings.de.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/InternalCommandStrings.de.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/InternalHostStrings.de.resx b/src/System.Management.Automation/resources/de/InternalHostStrings.de.resx
new file mode 100644
index 00000000000..7614dbf869e
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/InternalHostStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt wurde nicht so oft aufgerufen wie ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/InternalHostUserInterfaceStrings.de.resx b/src/System.Management.Automation/resources/de/InternalHostUserInterfaceStrings.de.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/InternalHostUserInterfaceStrings.de.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Logging.de.resx b/src/System.Management.Automation/resources/de/Logging.de.resx
new file mode 100644
index 00000000000..8cdfb530ad3
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Logging.de.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>UNBEKANNT</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>Das experimentelle Engine-Feature „{0}“, das in der Konfigurationsdatei deklariert ist, ist in der aktuellen PowerShell nicht registriert.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>Das in der Konfigurationsdatei deklarierte experimentelle Feature „{0}“ ist ungültig.
+Der Name eines experimentellen Features sollte der folgenden Konvention entsprechen: 
+    Name des Modulfeatures: „PS[FeatureName]“
+    Name des Modulfeatures: „[Modulname]. [Featurename]“</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Metadata.de.resx b/src/System.Management.Automation/resources/de/Metadata.de.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Metadata.de.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/MiniShellErrors.de.resx b/src/System.Management.Automation/resources/de/MiniShellErrors.de.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/MiniShellErrors.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Modules.de.resx b/src/System.Management.Automation/resources/de/Modules.de.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Modules.de.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/MshHostRawUserInterfaceStrings.de.resx b/src/System.Management.Automation/resources/de/MshHostRawUserInterfaceStrings.de.resx
new file mode 100644
index 00000000000..ec870c37e77
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/MshHostRawUserInterfaceStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>„{0}“ darf nicht größer oder gleich „{1}“ sein.</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>„{0}“ muss eine positive Zahl sein.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>Alle Zeichenfolgen sind NULL oder leer.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/MshSignature.de.resx b/src/System.Management.Automation/resources/de/MshSignature.de.resx
new file mode 100644
index 00000000000..d692b2667e2
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/MshSignature.de.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Signatur überprüft.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Die Datei „{0}“ ist nicht digital signiert. Dieses Skript kann nicht auf dem aktuellen System ausgeführt werden. Weitere Informationen zum Ausführen von Skripts und zum Festlegen der Ausführungsrichtlinie finden Sie in „about_Execution_Policies“ unter https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Der Inhalt der Datei „{0}“ könnte von einer nicht autorisierten Person oder einem nicht autorisierten Prozess geändert worden sein, da der Hash der Datei nicht mit dem in der digitalen Signatur gespeicherten Hash übereinstimmt. Das Skript kann auf dem angegebenen System nicht ausgeführt werden. Führen Sie „Get-Help about_Signing“ aus, um weitere Informationen zu erhalten.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Die Datei „{0}“ ist signiert, aber die signierende Person gilt auf diesem System nicht als vertrauenswürdig.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Die Datei kann nicht signiert werden, da das System keine Signiervorgänge für {0}-Dateien unterstützt.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Die Datei kann nicht signiert werden, da das System keine Signiervorgänge für Dateien ohne Dateinamenerweiterung unterstützt.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>Die Signatur kann nicht überprüft werden, da sie mit dem aktuellen System nicht kompatibel ist.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>Die Signatur kann nicht überprüft werden, da sie mit dem aktuellen System nicht kompatibel ist. Der Hashalgorithmus ist ungültig.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/MshSnapInCmdletResources.de.resx b/src/System.Management.Automation/resources/de/MshSnapInCmdletResources.de.resx
new file mode 100644
index 00000000000..132c8fe3245
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/MshSnapInCmdletResources.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Der Vorgang kann nicht durchgeführt werden. Das angegebene cmdlet wird in einer benutzerdefinierten Shell nicht unterstützt.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Es wurden keine PowerShell-Snap-Ins gefunden, die mit dem Muster „{0}“ übereinstimmen. Überprüfen Sie das Muster, und wiederholen Sie dann den Befehl.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Das Format des angegebenen Snap-In-Namens war ungültig.  PowerShell-Snap-In-Namen dürfen nur alphanumerische Zeichen, Bindestriche, Unterstriche und Punkte enthalten. Korrigieren Sie den Namen, und wiederholen Sie anschließend den Vorgang.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Das PowerShell-Snap-In {0} kann nicht hinzugefügt werden, da es sich um ein PowerShell-Systemmodul handelt. Verwenden Sie Import-Module, um das Modul zu laden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/MshSnapinInfo.de.resx b/src/System.Management.Automation/resources/de/MshSnapinInfo.de.resx
new file mode 100644
index 00000000000..f9e4487edd6
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/MshSnapinInfo.de.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Auf die PowerShell-Registrierungsinformationen kann nicht zugegriffen werden.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Auf die Registrierungsinformationen der PowerShell-Engine kann nicht zugegriffen werden.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Zugriff auf PublicKeyToken-Informationen nicht möglich.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Die PowerShell-Version {0} ist auf diesem Computer nicht verfügbar.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Das PowerShell-Snap-In „{0}“ ist auf diesem Computer nicht installiert.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>Der obligatorische Wert {0} ist für den Registrierungsschlüssel {1} nicht angegeben.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>Der obligatorische Wert {0} weist nicht das richtige Format für den Registrierungsschlüssel {1} auf.  Das erwartete Format ist „string“.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>Der obligatorische Wert {0} weist nicht das richtige Format für den Registrierungsschlüssel {1} auf.  Das erwartete Format ist „multistring“.</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Erforderliche Informationen können in der Registrierung oder fehlenden Schlüsseldateien nicht gefunden werden.  Einige cmdlets können nicht geladen werden.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Für die PowerShell-Version {0} wurden keine Snap-Ins registriert.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Die Zeichenfolgenressource kann nicht abgerufen werden, da der Reader verworfen wurde.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Der Versionswert {0} wurde nicht angegeben oder ist für den Registrierungsschlüssel {1} falsch.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Für den PowerShell-Typ {0} wurde kein [PSVersion]-Attribut gefunden. Fügen Sie dem Typ mithilfe von [PSVersion(PowerShell SnapinBase.PSEngineVersion)] ein PSVersion-Attribut hinzu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/NativeCP.de.resx b/src/System.Management.Automation/resources/de/NativeCP.de.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/NativeCP.de.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PSCommandStrings.de.resx b/src/System.Management.Automation/resources/de/PSCommandStrings.de.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PSCommandStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PSConfigurationStrings.de.resx b/src/System.Management.Automation/resources/de/PSConfigurationStrings.de.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PSConfigurationStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PSDataBufferStrings.de.resx b/src/System.Management.Automation/resources/de/PSDataBufferStrings.de.resx
new file mode 100644
index 00000000000..095f9db6b28
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PSDataBufferStrings.de.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Der angegebene Index ist kleiner als null oder größer als die Anzahl der Elemente im Puffer. Der Index muss im Bereich {0}–{1} liegen.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Ein NULL-Verweis kann nicht in einen Werttyp konvertiert werden.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Der Wert kann nicht vom Typ {0} in den Typ {1} konvertiert werden.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Objekte können nicht zu einem geschlossenen Puffer hinzugefügt werden. Stellen Sie sicher, dass der Puffer geöffnet ist, damit die Vorgänge „Hinzufügen“ und „Einfügen“ erfolgreich ausgeführt werden können.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>Die SerializeInput-Eigenschaft kann nur für den PSObject-Typ von PSDataCollection festgelegt werden. Legen Sie die SerializeInput-Eigenschaft auf FALSE fest, oder ändern Sie den Auflistungstyp in ein PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PSListModifierStrings.de.resx b/src/System.Management.Automation/resources/de/PSListModifierStrings.de.resx
new file mode 100644
index 00000000000..48386e259b2
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PSListModifierStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Der folgende unbekannte Listenmodifizierer wurde erkannt: „{0}“. Gültige Listenmodifizierer sind „Hinzufügen“, „Entfernen“ und „Ersetzen“.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Das Update kann nicht angewendet werden, da das Objekt kein unterstützter Auflistungstyp ist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PSStyleStrings.de.resx b/src/System.Management.Automation/resources/de/PSStyleStrings.de.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PSStyleStrings.de.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ParameterBinderStrings.de.resx b/src/System.Management.Automation/resources/de/ParameterBinderStrings.de.resx
new file mode 100644
index 00000000000..95a3a323953
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ParameterBinderStrings.de.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Es wurde kein Parameter gefunden, der dem Parameternamen „{1}“ entspricht.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Es wurde kein Positionsparameter gefunden, der das Argument „{1}“ akzeptiert.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Für den Parameter „{1}“ fehlt ein Argument. Geben Sie einen Parameter vom Typ „{2}“ an, und versuchen Sie es erneut.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Der Parameter kann nicht verarbeitet werden, da der Parametername „{1}“ mehrdeutig ist. Mögliche Übereinstimmungen sind:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>„{6}“ kann nicht in den Typ „{2}“ konvertiert werden, der für den Parameter „{1}“ erforderlich ist. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Der Parameter „{1}“ kann nicht gebunden werden. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Positionsparameter „{1}“ können nicht gebunden werden.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Positionsparameter können nicht gebunden werden, da keine Namen angegeben wurden.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Der Parametersatz kann mit den angegebenen benannten Parametern nicht aufgelöst werden. Ein oder mehrere angegebene Parameter können nicht zusammen verwendet werden, oder es wurde eine zu geringe Anzahl von Parametern angegeben.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Der Befehl kann nicht verarbeitet werden, da ein oder mehrere erforderliche Parameter fehlen:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Der Parameter „{1}“ kann nicht im Parametersatz „{6}“ angegeben werden.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Der Parameter kann nicht gebunden werden, da der Parameter „{1}“ mehrmals angegeben wurde. Verwenden Sie die Arraysyntax, um Parametern, die mehrere Werte akzeptieren, mehrere Werte zu übergeben. Beispiel: „-parameter value1,value2,value3“.</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Der Parameter „{1}“ kann nicht ausgewertet werden, da sein Argument als Skriptblock angegeben wurde und keine Eingabe vorhanden ist. Ein Skriptblock kann nicht ohne Eingabe ausgewertet werden.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Die Eingabe für den Skriptblock des Parameters „{1}“ ist fehlgeschlagen. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Der Parameter „{1}“ kann nicht ausgewertet werden, da für seine Argumenteingabe keine Ausgabe erzeugt wurde.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Das Eingabeobjekt kann keinem Parameter für den Befehl zugeordnet werden, weil der Befehl keine Pipelineeingabe akzeptiert oder die Eingabe und ihre Eigenschaften mit keinem der Parameter übereinstimmen, die Pipelineeingabe akzeptieren.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Das Eingabeobjekt kann nicht gebunden werden, da die zum Binden aller erforderlichen Parameter nötigen Informationen fehlen: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Die Pipeline kann nicht verarbeitet werden, da der Standardwert des Parameters „{1}“ nicht abgerufen werden kann. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Die dynamischen Parameter für das Cmdlet können nicht abgerufen werden. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Geben Sie Werte für die folgenden Parameter an:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>Cmdlet „{0}“ an der Position in der Befehlspipeline „{1}“</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Die Argumenttransformation für den Parameter „{1}“ kann nicht verarbeitet werden. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Das Argument für den Parameter „{1}“ kann nicht überprüft werden. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Der Parameter „{1}“ kann nicht an das Ziel gebunden werden. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Das Argument kann nicht an den Parameter „{1}“ gebunden werden, da es NULL ist.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Das Argument kann nicht an den Parameter „{1}“ gebunden werden, da es eine leere Zeichenfolge ist.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Das Argument kann nicht an den Parameter „{1}“ gebunden werden, da es eine leere Sammlung ist.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Das Argument kann nicht an den Parameter „{1}“ gebunden werden, da es ein leeres Array ist.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Der Befehl kann nicht verarbeitet werden. Der Parameter „{0}“ ist mehrfach definiert.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Das Cmdlet „{0}“ kann nicht gebunden werden, da der Parameter „{1}“ vom Typ „{2}“ ist und die Add()-Methode nicht ermittelt werden kann oder mehrere Add()-Methoden vorhanden sind. {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Das Cmdlet „{0}“ kann nicht gebunden werden, da der zur Laufzeit definierte Parameter „{1}“ dem RuntimeDefinedParameterDictionary mit dem Schlüssel „{6}“ hinzugefügt wurde. Der Schlüssel muss mit RuntimeDefinedParameter.Name übereinstimmen.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Das Argument kann nicht an den Parameter „{1}“ gebunden werden, da die PSTypeNames des Arguments nicht mit dem für den Parameter erforderlichen PSTypeName übereinstimmen: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>In $PSDefaultParameterValues sind mehrere unterschiedliche Standardwerte für den Parameter definiert, der dem folgenden Namen oder Alias entspricht: {0}. Diese Standardwerte wurden ignoriert.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Der folgende Name oder Alias, der in $PSDefaultParameterValues für dieses Cmdlet definiert ist, wird auf mehrere Parameter aufgelöst: {0}. Der Standardwert wurde ignoriert.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Dieser Fehler kann durch die Anwendung der Standardparameterbindung verursacht worden sein. Sie können die Standardparameterbindung in $PSDefaultParameterValues deaktivieren, indem Sie $PSDefaultParameterValues["Disabled"] auf $true setzen, und es dann erneut versuchen. Die folgenden Standardparameter wurden zum Zeitpunkt des Fehlers erfolgreich für dieses Cmdlet gebunden:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Dieser Fehler kann durch die Anwendung der Standardparameterbindung verursacht worden sein. Sie können die Standardparameterbindung in $PSDefaultParameterValues deaktivieren, indem Sie $PSDefaultParameterValues["Disabled"] auf $true setzen, und es dann erneut versuchen. Der folgende Standardparameter wurde zum Zeitpunkt des Fehlers erfolgreich für dieses Cmdlet gebunden:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Die Bindung des Standardwerts „{0}“ an den Parameter „{1}“ ist fehlgeschlagen: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ hat kein gültiges Format. Informationen zum richtigen Format finden Sie unter about_Parameters_Default_Values unter https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Die Schlüssel „{0}“ haben kein gültiges Format. Informationen zum richtigen Format finden Sie unter about_Parameters_Default_Values unter https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Der Parameter „{0}“ ist veraltet. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ vom Typ „{1}“ ist kein Zeichenfolgenwert. DefaultParameterDictionary akzeptiert nur Schlüssel mit Zeichenfolgenwert.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>Der Schlüssel „{0}“ wurde dem Wörterbuch bereits hinzugefügt.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Methoden- oder Eigenschaftsaufruf nicht zulässig</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Der Aufruf der Methode oder Eigenschaft „{0}“ für Typ „{1}“ ist im Constrained Language-Modus für nicht vertrauenswürdige Skripts nicht zulässig.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Typerstellung nicht zulässig</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Die Erstellung des Typs „{0}“ ist während der Parameterbindung im eingeschränkten Sprachmodus für nicht vertrauenswürdige Skripts nicht zulässig.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ParserStrings.de.resx b/src/System.Management.Automation/resources/de/ParserStrings.de.resx
new file mode 100644
index 00000000000..4d1ed32618c
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ParserStrings.de.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Assembly "{0}" kann nicht geladen werden.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PathUtilsStrings.de.resx b/src/System.Management.Automation/resources/de/PathUtilsStrings.de.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PathUtilsStrings.de.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PipelineStrings.de.resx b/src/System.Management.Automation/resources/de/PipelineStrings.de.resx
new file mode 100644
index 00000000000..916b0300f29
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PipelineStrings.de.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Die cmdlet-Instanz kann nicht verarbeitet werden, da die cmdlet-Instanz von einer anderen Pipeline verwendet wird. Wenden Sie sich an den Microsoft-Kundendienst.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da die Pipeline gestartet wurde. Beenden Sie die Pipeline, und wiederholen Sie den Vorgang.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Die Ausführung des cmdlets kann nicht fortgesetzt werden, da die Ausführung von cmdlets durch die Stopp-Richtlinie verhindert wurde.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Die Pipeline kann nicht ausgeführt werden, da das erste cmdlet in der Pipeline versucht, Eingaben aus den Ergebnissen eines vorherigen cmdlets zu lesen. Ändern Sie entweder das erste cmdlet, entfernen Sie das erste cmdlet, oder fügen Sie der Pipeline das cmdlet hinzu, dessen Ausgabe für das erste cmdlet erforderlich ist, und versuchen Sie dann erneut, die Pipeline auszuführen.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Die cmdlet-Nummer kann nicht verarbeitet werden. Die ReadFromCommand-Funktion muss die ID eines cmdlets angeben, das der Pipeline bereits hinzugefügt wurde. Wenden Sie sich an den Microsoft-Kundendienst.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Die Ausgabe der Funktionen ReadFromCommand und ReadErrorQueue kann nicht gelesen werden, da diese Ausgabe bereits von einem anderen cmdlet gelesen wird. Wenden Sie sich an den Microsoft-Kundendienst.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Die Pipeline kann nicht ausgeführt werden, da keine Befehle vorhanden sind. Fügen Sie der Pipeline mindestens einen Befehl hinzu, und führen Sie ihn dann erneut aus.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Der Pipelinevorgang kann nicht abgeschlossen werden, da er noch nicht gestartet wurde. Sie müssen die Begin()-Methode aufrufen, bevor Sie End() für eine schrittweise Pipeline aufrufen.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>Die WriteObject- und WriteError-Methoden können nicht von außerhalb der Außerkraftsetzungen der BeginProcessing-, ProcessRecord- und EndProcessing-Methoden aufgerufen werden, und sie können nur innerhalb desselben Threads aufgerufen werden. Überprüfen Sie, ob das cmdlet diese Anrufe ordnungsgemäß durchführt, oder wenden Sie sich an den Microsoft-Kundendienst.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>Ein cmdlet hat nach dem Aufrufen von ThrowTerminatingError eine Ausnahme ausgelöst.
+Die erste Ausnahme war „{0}“ mit Stapelüberwachung „{1}“.
+Die zweite Ausnahme war „{2}“ mit Stapelüberwachung „{3}“.</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>Die WriteObject- und WriteError-Methoden können nicht aufgerufen werden, nachdem die Pipeline geschlossen wurde. Wenden Sie sich an den Microsoft-Kundendienst.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Fehler beim Erstellen der Pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Diese Pipeline unterstützt keine Semantik zum Trennen von Verbindungen.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Diese Pipeline kann nicht verbunden werden, da sie sich nicht im getrennten Zustand befindet.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>Dem Runspaceobjekt ist ein NULL-Remotebefehl zugeordnet.  Ein getrenntes RemotePipeline-Objekt kann nicht erstellt werden, da kein Remotebefehl angegeben ist.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/PowerShellStrings.de.resx b/src/System.Management.Automation/resources/de/PowerShellStrings.de.resx
new file mode 100644
index 00000000000..3cf93d82ec6
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/PowerShellStrings.de.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Der Zustand der aktuellen PowerShell-Instanz ist für diesen Vorgang ungültig.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da bereits ein Befehl gestartet wurde. Warten Sie, bis der Befehl abgeschlossen ist, oder beenden Sie ihn, und wiederholen Sie dann den Vorgang.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Es wurden keine Befehle angegeben.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>Die PowerShell-Instanz befindet sich nicht im richtigen Zustand zum Erstellen einer geschachtelten PowerShell-Instanz. Geschachtelte PowerShell-Instanzen dürfen nur in einer ausgeführten PowerShell-Instanz erstellt werden.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da sich der Runspace nicht im Zustand „{0}“ befindet. Der aktuelle Zustand des Runspaces ist „{1}“.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Geschachtelte PowerShell-Instanzen können nicht asynchron aufgerufen werden. Verwenden Sie die Invoke-Methode.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Das {0}-Objekt wurde nicht durch Aufrufen von „{1}“ für diese PowerShell-Instanz erstellt.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Wenn der Runspace für die Wiederverwendung eines Threads festgelegt ist, muss der Apartmentzustand in den Aufrufeinstellungen mit dem Runspace übereinstimmen.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Wenn der Runspace für die Verwendung des aktuellen Threads festgelegt ist, muss der Apartmentzustand in den Aufrufeinstellungen mit dem aktuellen Thread übereinstimmen.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Zum Hinzufügen eines Parameters ist ein Befehl erforderlich. Vor dem Hinzufügen eines Parameters muss der PowerShell-Instanz ein Befehl hinzugefügt werden.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Die Schlüssel im Wörterbuch müssen Zeichenfolgen sein.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Es ist kein Runspace zum Ausführen von Befehlen in diesem Thread verfügbar. Sie können einen in der DefaultRunspace-Eigenschaft des Typs „System.Management.Automation.Runspaces.Runspace“ angeben. Der Befehl, den Sie aufrufen wollten, war: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Für dieses PowerShell-Objekt kann keine Verbindung hergestellt werden, da es keinem Remoterunspace oder Runspacepool zugeordnet ist.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Der ausgeführte Befehl wurde getrennt, wird aber weiterhin auf dem Remoteserver ausgeführt.  Stellen Sie die Verbindung wieder her, um den Status des Befehlsvorgangs und die Ausgabedaten abzurufen.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da sich die aktuelle PowerShell-Sitzung im Zustand „Getrennt“ befindet.  Stellen Sie die Verbindung mit dieser PowerShell-Sitzung her, und warten Sie dann, bis der Befehl abgeschlossen ist, oder beenden Sie den Befehl.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da sich die aktuelle PowerShell-Sitzung im Zustand „Getrennt“ befindet.  Stellen Sie die Verbindung mit dieser PowerShell-Sitzung her, und wiederholen Sie dann den Vorgang.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Fehler beim Herstellen einer Verbindung mit dem Remotebefehl.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da zurzeit ein Befehl angehalten wird. Warten Sie, bis das Anhalten des Befehls abgeschlossen ist, und wiederholen Sie dann den Vorgang.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Es ist kein Runspace zum Ausführen von Befehlen in diesem Thread verfügbar. Sie können einen in der DefaultRunspace-Eigenschaft des Typs „System.Management.Automation.Runspaces.Runspace“ angeben. Die aktuelle PowerShell-Instanz enthält keinen aufzurufenden Befehl.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Es kann kein PowerShell-Objekt erstellt werden, das den aktuellen Runspace verwendet, da kein aktueller Runspace verfügbar ist.  Der aktuelle Runspace wird möglicherweise gestartet, z. B. wenn er mit einem Initial Session State erstellt wird.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ProgressRecordStrings.de.resx b/src/System.Management.Automation/resources/de/ProgressRecordStrings.de.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ProgressRecordStrings.de.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ProviderBaseSecurity.de.resx b/src/System.Management.Automation/resources/de/ProviderBaseSecurity.de.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ProviderBaseSecurity.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/ProxyCommandStrings.de.resx b/src/System.Management.Automation/resources/de/ProxyCommandStrings.de.resx
new file mode 100644
index 00000000000..b319bc64c6d
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/ProxyCommandStrings.de.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>The 'help' parameter is not recognized as a valid HelpInfo object created by the 'get-help' command.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>The proxy command cannot be generated because the CommandMetadata has no name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/RegistryProviderStrings.de.resx b/src/System.Management.Automation/resources/de/RegistryProviderStrings.de.resx
new file mode 100644
index 00000000000..4e64b90a8ad
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/RegistryProviderStrings.de.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Element festlegen</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Wert: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Element löschen</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Neues Element</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Schlüssel entfernen</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Schlüssel kopieren</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Ziel: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Element umbenennen</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Element verschieben</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Ziel: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Eigenschaft festlegen</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Eigenschaft: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Eigenschaft löschen</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Eigenschaft: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Neue Eigenschaft</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Eigenschaft: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Eigenschaft entfernen</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Eigenschaft: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Eigenschaft umbenennen.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Eigenschaft kopieren</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Eigenschaft verschieben</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Der Vorgang wurde nicht verarbeitet. Der angegebene Speicherort lässt diesen Vorgang nicht zu.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Der Vorgang ist am Quellspeicherort nicht zulässig.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Der Vorgang ist am Zielspeicherort nicht zulässig.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Die Konfigurationseinstellungen für den lokalen Computer</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Die Softwareeinstellungen für den aktuellen Benutzer</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Ein Schlüssel in diesem Pfad ist bereits vorhanden.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da der Zielpfad dem Quellpfad untergeordnet ist.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>Die Eigenschaft ist bereits vorhanden.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>Die Eigenschaft {0} existiert nicht im Pfad {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>Der Registrierungsschlüssel am angegebenen Pfad ist nicht vorhanden.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Der Parameter „Typ“ konnte nicht gebunden werden. „{0}“ konnte nicht in „{1}“ konvertiert werden. Die möglichen Enumerationswerte sind „String, ExpandString, Binary, DWord, MultiString, QWord, Unbekannt“.</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Der Schlüssel {0} wurde erstellt, aber ein Standardwert konnte nicht festgelegt werden.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Es kann kein Laufwerk mit dem angegebenen Stamm erstellt werden. Der Stammpfad ist nicht vorhanden.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Das Element kann nicht umbenannt werden, da ein Element mit diesem Namen bereits im selben Container vorhanden ist.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Der Name des Registrierungsschlüssels muss mit einem gültigen Basisschlüsselnamen beginnen.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>Das Unterschlüsselargument ist ungültig.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Eine Unterschlüsselstruktur kann nicht gelöscht werden, da der Unterschlüssel nicht vorhanden ist.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Es ist kein Wert mit diesem Namen vorhanden.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>Der Enumerationswert {0} ist ungültig.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Ein Wertargument muss angegeben werden.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Ein Namensargument muss angegeben werden.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>Der angegebene RegistryValueKind ist ein ungültiger Wert.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>„RegistryKey.SetValue“ lässt keine Zeichenfolge[] zu, die einen NULL-Zeichenfolgenverweis enthält.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Registrierungsunterschlüssel dürfen nicht mehr als 255 Zeichen umfassen.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Ein nicht leerer Unterschlüsselname muss angegeben werden.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Der Typ des Wertobjekts stimmte nicht mit dem angegebenen RegistryValueKind überein, oder das Objekt konnte nicht ordnungsgemäß konvertiert werden.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue unterstützt keine Arrays vom Typ „{0}“. Nur Byte[] und String[] werden unterstützt.</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>Der angegebene Registrierungsschlüssel ist nicht vorhanden.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>Die Länge des angegebenen Wertnamens überschreitet die maximale Länge von 16383 Zeichen.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>Die Größe der angegebenen Wertdaten überschreitet das Maximum von 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>Der angegebene Registrierungsunterschlüssel ist nicht vorhanden.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>Der angegebene RegistryKeyPermissionCheck-Wert ist ungültig.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>Der Registrierungsschlüssel verfügt über Unterschlüssel. Rekursive Entfernungen werden von dieser Methode nicht unterstützt.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Ein KTM-Handle kann nicht ohne Transaction.Current oder eine angegebene Transaktion erstellt werden.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>Die angegebene Transaktion oder Transaction.Current muss mit der Transaktion übereinstimmen, die zum Erstellen oder Öffnen dieses TransactedRegistryKey verwendet wird.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>Das TransactedRegistryKey-Objekt ist keiner Transaktion zugeordnet, da es sich um einen vordefinierten Schlüssel handelt.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>Angeforderter Registrierungszugriff ist nicht zulässig.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Der Zugriff auf den Registrierungsschlüssel „{0}“ wird verweigert.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>In den Registrierungsschlüssel kann nicht geschrieben werden.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Auf einen geschlossenen Registrierungsschlüssel kann nicht zugegriffen werden.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Unbekannter Fehler: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Registrierungstransaktionen werden auf dieser Plattform nicht unterstützt.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Das angegebene Handle ist ungültig.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/RemotingErrorIdStrings.de.resx b/src/System.Management.Automation/resources/de/RemotingErrorIdStrings.de.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/RemotingErrorIdStrings.de.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/RunspaceInit.de.resx b/src/System.Management.Automation/resources/de/RunspaceInit.de.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/RunspaceInit.de.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/RunspacePoolStrings.de.resx b/src/System.Management.Automation/resources/de/RunspacePoolStrings.de.resx
new file mode 100644
index 00000000000..87751d11ee5
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/RunspacePoolStrings.de.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>Die maximale Poolgröße darf nicht kleiner als 1 sein.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>Die mindeste Poolgröße darf nicht kleiner als 1 sein.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>Die minimale Poolgröße darf nicht größer als die maximale Poolgröße sein.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Der Zustand des Runspacepools ist für diesen Vorgang ungültig.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da sich der Runspacepool nicht im Zustand „{0}“ befindet. Der aktuelle Status ist „{1}“.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Der Runspacepool kann nicht geöffnet werden, da er sich nicht im Zustand „BeforeOpen“ befindet. Der aktuelle Status ist „{0}“.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Das {0} Objekt wurde nicht durch Aufrufen von {1} der aktuellen RunspacePool-Instanz erstellt.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Der Runspace kann nicht für den aktuellen Pool freigegeben werden, da der Runspace nicht zum aktuellen Pool gehört.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Diese Eigenschaft kann nicht mehr geändert werden, nachdem der Runspacepool geöffnet wurde.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Dieser Runspace unterstützt keine Trennungs- und Verbindungsvorgänge.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Der Vorgang kann nicht ausgeführt werden, da sich der Runspacepool im Zustand „Getrennt“ befindet.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Der Trennvorgang wird auf dem Server nicht unterstützt.  Auf dem Server muss PowerShell 3.0 oder höher ausgeführt werden, damit die Trennung von Remoterunspacepools unterstützt wird.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Dieser Runspacepool {0} ist nicht für die Bereitstellung getrennter PowerShell-Objekte für Befehle konfiguriert, die auf dem Remoteserver ausgeführt werden.  Verwenden Sie die statische GetRunspacePools()-Methode der RunspacePool-Klasse, um den Server abzufragen und Runspacepoolobjekte zurückzugeben, die dafür konfiguriert sind.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Dieser Runspacepool kann nicht verbunden werden, da der entsprechende serverseitige Runspacepool mit einem anderen Client verbunden ist.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState wird auf dem Server nicht unterstützt.  Auf dem Server muss PowerShell 5.0 oder höher ausgeführt werden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/RunspaceStrings.de.resx b/src/System.Management.Automation/resources/de/RunspaceStrings.de.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/RunspaceStrings.de.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/SecuritySupportStrings.de.resx b/src/System.Management.Automation/resources/de/SecuritySupportStrings.de.resx
new file mode 100644
index 00000000000..fc233244245
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/SecuritySupportStrings.de.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Das Zertifikat kann nicht geladen werden. „{0}“ muss in einen Dateisystempfad aufgelöst werden.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Das Zertifikat „{0}“ kann nicht für die Verschlüsselung verwendet werden. Verschlüsselungszertifikate müssen die Verwendung des Datenverschlüsselungs- oder Schlüsselverschlüsselungsschlüssels enthalten und die erweiterte Schlüsselverwendung der Dokumentverschlüsselung ({1}) enthalten.</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Das Zertifikat kann nicht geladen werden. Der Bezeichner „{0}“ stimmt mit mehreren Zertifikaten überein. Wenn Sie die Verschlüsselung für mehrere Empfänger ausführen möchten, geben Sie dem Parameter „{1}“ mehrere spezifische Werte anstelle eines Platzhalters an, der mit mehreren Zertifikaten übereinstimmt.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Verschlüsselungszertifikat kann nicht geladen werden. Die Zertifikateinstellung „{0}“ stellt weder ein gültiges Base64-codiertes Zertifikat noch ein gültiges Zertifikat nach Datei, Verzeichnis, Fingerabdruck oder Antragstellername dar.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>WARNUNG: Das Zertifikat „{0}“ enthält einen privaten Schlüssel. Zertifikate für die Protokollierung geschützter Ereignisse, die für die Verschlüsselung verwendet werden, dürfen nur den öffentlichen Schlüssel enthalten.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>FEHLER: Die Ereignisprotokollmeldung „{0}“ konnte nicht geschützt werden: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>FEHLER: Zertifikat konnte nicht gefunden oder verwendet werden: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Der Sitzungsschlüssel zum Verschlüsseln der sicheren Zeichenfolge ist nicht verfügbar.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Ungültiger Pufferoffset.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Ungültige öffentliche Schlüssel-Daten.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Der öffentliche Schlüssel kann nicht importiert werden.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Ungültige Sitzungsschlüssel-Daten.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Die Ausführung der Skriptdatei „{0}“ wird durch die Systemrichtlinie blockiert.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Ein unbekannter Wert für die Erzwingung der Skriptdateirichtlinie wurde zurückgegeben: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Skriptdatei lesen</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Die Skriptdatei „{0}“ ist von der Richtlinie nicht vertrauenswürdig und wird im ConstrainedLanguage-Modus ausgeführt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/Serialization.de.resx b/src/System.Management.Automation/resources/de/Serialization.de.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/Serialization.de.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/SessionStateProviderBaseStrings.de.resx b/src/System.Management.Automation/resources/de/SessionStateProviderBaseStrings.de.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/SessionStateProviderBaseStrings.de.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/SessionStateStrings.de.resx b/src/System.Management.Automation/resources/de/SessionStateStrings.de.resx
new file mode 100644
index 00000000000..c6b728e8ac9
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/SessionStateStrings.de.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Der Pfad "{0}" wurde nicht gefunden, da er nicht vorhanden ist.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/StringDecoratedStrings.de.resx b/src/System.Management.Automation/resources/de/StringDecoratedStrings.de.resx
new file mode 100644
index 00000000000..8fbc8290a0e
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/StringDecoratedStrings.de.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Für diese Methode wird nur „ANSI“ oder „PlainText“ unterstützt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/SubsystemStrings.de.resx b/src/System.Management.Automation/resources/de/SubsystemStrings.de.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/SubsystemStrings.de.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/SuggestionStrings.de.resx b/src/System.Management.Automation/resources/de/SuggestionStrings.de.resx
new file mode 100644
index 00000000000..a70330a1b83
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/SuggestionStrings.de.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>Der Befehl „{0}“ wurde nicht gefunden, ist aber am aktuellen Speicherort vorhanden.
+PowerShell lädt standardmäßig keine Befehle vom aktuellen Speicherort (siehe „Get-Help about_Command_Precedence“).
+
+Wenn Sie diesem Befehl vertrauen, führen Sie stattdessen den folgenden Befehl aus:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Die ähnlichsten Befehle sind:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/TabCompletionStrings.de.resx b/src/System.Management.Automation/resources/de/TabCompletionStrings.de.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/TabCompletionStrings.de.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/TransactionStrings.de.resx b/src/System.Management.Automation/resources/de/TransactionStrings.de.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/TransactionStrings.de.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/TypesXmlStrings.de.resx b/src/System.Management.Automation/resources/de/TypesXmlStrings.de.resx
new file mode 100644
index 00000000000..2a91071d618
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/TypesXmlStrings.de.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}): Fehler: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Fehler im Typ „{3}“: {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Der Knoten „{0}“ darf nur einmal unter „{1}“ auftreten. Der übergeordnete Knoten „{1}“ wird ignoriert.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Der Knoten {0} ist nicht zulässig. Die folgenden Knoten sind zulässig: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Der Knoten „{0}“ darf keinen inneren Text enthalten.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Der Knoten „{0}“ sollte einen inneren Text aufweisen.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Der Knoten „{0}“ wurde nicht gefunden. Er sollte nur einmal unter „{1}“ auftreten. Der übergeordnete Knoten „{1}“ wird ignoriert.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>Der Knoten „Typ“ muss „Mitglieder“, „TypeConverters“ oder „TypeAdapters“ aufweisen.</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Aufgrund einer Ausnahme kann keine Instanz des Typkonverters für den Typ {0} erstellt werden: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell kann aufgrund der folgenden Ausnahme keine Instanz des Typadapters für den Typ {0} erstellen: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Der angepasste Typ „{0}“ ist ungültig.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>Der TypeConverter wurde ignoriert, da er bereits auftritt.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>Der TypeAdapter wurde ignoriert, da er bereits auftritt.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Der Typ „{0}“ muss entweder TypeConverter oder PSTypeConverter sein.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Der Typ „{0}“ muss ein PSPropertyAdapter sein.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>Das Mitglied {0} ist bereits vorhanden.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Der folgende Mitgliedsname ist reserviert: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Ausnahme: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty sollte einen Getter oder Setter aufweisen.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>Die CodeProperty sollte einen Getter oder Setter aufweisen.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1}: {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>Der Wert sollte entweder TRUE oder FALSE anstelle von {0}sein.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Der Knoten „{0}“ darf nicht das Attribut „{1}“ aufweisen.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: Die Datei wurde nicht gefunden.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: Die Datei wurde übersprungen, da sie bereits von {2} geladen wurde.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Der Registrierungsschlüssel konnte nicht gefunden werden: {0}{1}. {2} wird zum Laden der Konfigurationsdateien verwendet.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Der im Registrierungsschlüssel angegebene Pfad {0} wurde nicht gefunden: {1}{2}. {3} wird zum Laden der Konfigurationsdateien verwendet.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: Die Datei wurde übersprungen, da sie nicht die Dateinamenerweiterung ps1xml aufweist.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: Die Datei wurde aufgrund der folgenden Validierungsausnahme übersprungen: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Das Mitglied „{0}“ muss eine Notiz sein.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Hinweis „{0}“ kann nicht konvertiert werden:„{1}“</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Verwenden Sie hier nicht das Mitglied „{0}“.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>Das Mitglied „{0}" muss den Typ „{1}“ aufweisen.</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>„{0}“ muss vorhanden sein, wenn „{1}“ „{2}“ und „{3}“ „{4}“ ist.</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Ein vorheriger Fehler hat dazu geführt, dass alle Serialisierungseinstellungen ignoriert wurden.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>„{0}“ ist kein Standardmitglied und wird ignoriert.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>Der {0} Pfad ist nicht vollqualifiziert. Geben Sie einen vollqualifizierten Dateipfad an.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>Die TypeTable kann nicht aktualisiert werden, da die TypeTable möglicherweise außerhalb des Runspaces erstellt wurde.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Fehler beim Laden der TypeTable. Suchen Sie in der Eigenschaft Fehler nach detaillierten Fehlermeldungen.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Fehler in TypeData „{0}“: {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>„{0}“ muss einen Wert für die Eigenschaft „{1}“ aufweisen.</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>„{0}“ darf nicht NULL oder eine leere Zeichenfolge in der Eigenschaft „{1}“ enthalten.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Der Typ „{0}“ wurde nicht gefunden. Der Wert des Typnamens muss der vollständige Name des Typs sein. Überprüfen Sie den Typnamen, und führen Sie den Befehl erneut aus.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData muss über „Mitglieder“, „TypeConverters“, „TypeAdapters“ oder „StandardMembers“ verfügen.</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Eine freigegebene Typtabelle kann nicht mit mehr als einem Eintrag aktualisiert werden.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/VerbDescriptionStrings.de.resx b/src/System.Management.Automation/resources/de/VerbDescriptionStrings.de.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/VerbDescriptionStrings.de.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/de/WildcardPatternStrings.de.resx b/src/System.Management.Automation/resources/de/WildcardPatternStrings.de.resx
new file mode 100644
index 00000000000..0e604875f26
--- /dev/null
+++ b/src/System.Management.Automation/resources/de/WildcardPatternStrings.de.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Das angegebene Platzhalterzeichenmuster ist ungültig: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Authenticode.es.resx b/src/System.Management.Automation/resources/es/Authenticode.es.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Authenticode.es.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/AuthorizationManagerBase.es.resx b/src/System.Management.Automation/resources/es/AuthorizationManagerBase.es.resx
new file mode 100644
index 00000000000..1c75bcdbf33
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/AuthorizationManagerBase.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Error en la comprobación de AuthorizationManager.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/AutomationExceptions.es.resx b/src/System.Management.Automation/resources/es/AutomationExceptions.es.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/AutomationExceptions.es.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CatalogStrings.es.resx b/src/System.Management.Automation/resources/es/CatalogStrings.es.resx
new file mode 100644
index 00000000000..5c5021fb2b9
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CatalogStrings.es.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>No se puede generar el archivo de definición del catálogo.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Agregando el archivo "{0}" al catálogo. La ruta de acceso relativa del archivo en el catálogo es "{1}".</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Omitiendo la validación del archivo {0} del catálogo. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Se encontró el archivo {0} en el catálogo con un hash de {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Las rutas del catálogo contienen varios archivos con la misma ruta relativa {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Se encontró el archivo {0} en el disco con un hash de {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Omitiendo la validación del archivo {0} de la ruta.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>No se puede obtener un controlador para un contexto de administrador de catálogo para un algoritmo hash determinado {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>No se puede crear el hash para el archivo {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>No se puede abrir el archivo de catálogo {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>La versión del catálogo no es válida. Solo se admite la versión del catálogo {0} y la versión {1}.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>No se puede abrir el archivo de definición del catálogo.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Se encontraron varias entradas del miembro de archivo {0} en el catálogo.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>No se puede encontrar el nombre de archivo o la ruta de acceso del miembro del catálogo {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>No se encuentra el archivo {0} para el hash.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>No se puede leer el archivo {0} para calcular su hash.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CimInstanceTypeAdapterResources.es.resx b/src/System.Management.Automation/resources/es/CimInstanceTypeAdapterResources.es.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CimInstanceTypeAdapterResources.es.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CmdletizationCoreResources.es.resx b/src/System.Management.Automation/resources/es/CmdletizationCoreResources.es.resx
new file mode 100644
index 00000000000..798bf54d88c
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CmdletizationCoreResources.es.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Cmdlets de la clase "{0}"</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>No se puede procesar el XML de definición de cmdlet para el siguiente archivo: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>No se puede procesar el atributo ObjectModelWrapper. El tipo {0} define varios conjuntos de parámetros. Compruebe que el XML de definición de cmdlet especifica un tipo válido en el atributo ObjectModelWrapper e inténtelo de nuevo.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>No se puede procesar el atributo ObjectModelWrapper. El tipo {0} es un tipo genérico abierto.  Compruebe que el XML de definición de cmdlet especifica un tipo válido en el atributo ObjectModelWrapper e inténtelo de nuevo.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>No se puede procesar el atributo ObjectModelWrapper. El tipo {0} no hereda de la siguiente clase: {1}.  Compruebe que el XML de definición de cmdlet especifica un tipo válido en el atributo ObjectModelWrapper e inténtelo de nuevo.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>No se puede procesar el atributo ObjectModelWrapper. El tipo {0} define el parámetro de cmdlet {1} con un parámetro de atributo {2} que se omite.  Compruebe que el XML de definición de cmdlet especifica un tipo válido en el atributo ObjectModelWrapper e inténtelo de nuevo.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>No se puede definir el parámetro {0} para el cmdlet {1}.  El nombre del parámetro ya está definido por la clase {2}.  Cambie el nombre del parámetro en el XML de definición de cmdlet e inténtelo de nuevo.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>No se puede definir el parámetro {0} para el cmdlet {1}. El nombre del parámetro ya está definido dentro del elemento XML {2}. Cambie el nombre del parámetro en el XML de definición de cmdlet e inténtelo de nuevo.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>El valor del atributo EnumName no se traduce a un identificador de C# válido: {0}. Compruebe el atributo EnumName en el XML de definición de cmdlet y, a continuación, inténtelo de nuevo.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>No se puede procesar el elemento &lt;Enum EnumName="{0}" ...&gt;.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>El equipo remoto devolvió un archivo CDXML no válido. El siguiente adaptador de cmdlet no es compatible con la importación de un módulo CDXML desde un equipo remoto: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CommandBaseStrings.es.resx b/src/System.Management.Automation/resources/es/CommandBaseStrings.es.resx
new file mode 100644
index 00000000000..2748fc3e9e0
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CommandBaseStrings.es.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>¿Desea continuar con esta operación?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Sí</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Continúe solo con el siguiente paso de la operación.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Sí a &amp;todo</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Continúe con todos los pasos de la operación.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Omitir esta operación y continuar con la siguiente.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>No a &amp;todo</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Omita esta operación y todas las operaciones posteriores.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Detener este comando.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Detener comando</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Suspender</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Ponga en pausa la canalización actual y vuelva al símbolo del sistema. Escriba "{0}" para reanudar la canalización.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>El programa "{0}" finalizó con un código de salida distinto de cero: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Realizando la operación "{0}" en el objetivo "{1}".</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>¿Seguro que quiere realizar esta acción?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Confirmar</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>El comando en ejecución se detuvo porque la variable de preferencia "{0}" o el parámetro común está establecido en Detener: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>El comando en ejecución se detuvo porque la variable de preferencia "{0}" o el parámetro común está establecido en Detener.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>El comando en ejecución se detuvo porque la variable de preferencia "{0}" o el parámetro común está establecido en el siguiente valor que no es válido: "{1}".</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>El comando en ejecución se detuvo porque el usuario seleccionó la opción Detener.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>El comando en ejecución se detuvo porque el usuario lo interrumpió.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Los cmdlets derivados de PSCmdlet no se pueden invocar directamente.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>El cmdlet "{0}" no admite el parámetro "{1}" en una sesión remota.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Número total: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Recuento estimado total: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Recuento total desconocido</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>comando "{0}"</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>El {0} está obsoleto. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>La llamada a Exec falló con errorno {0} para la línea de comandos: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>No se encontró el comando "{0}". El comando especificado debe ser un ejecutable.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Comprobación de operador punto del procesamiento de bloques de script</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>El procesamiento de operador punto para el bloque de script "{0}" fallará en modo de lenguaje restringido porque su modo de lenguaje "{1}" no coincide con el modo de lenguaje actual "{2}".</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Buscador de comandos</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>El comando "{0}" del módulo "{1}" no es de confianza y no estará disponible en el modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ConsoleInfoErrorStrings.es.resx b/src/System.Management.Automation/resources/es/ConsoleInfoErrorStrings.es.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ConsoleInfoErrorStrings.es.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CoreClrStubResources.es.resx b/src/System.Management.Automation/resources/es/CoreClrStubResources.es.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CoreClrStubResources.es.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CredUI.es.resx b/src/System.Management.Automation/resources/es/CredUI.es.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CredUI.es.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Credential.es.resx b/src/System.Management.Automation/resources/es/Credential.es.resx
new file mode 100644
index 00000000000..ad0d3d52c49
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Credential.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>No se puede serializar la credencial. Si este comando inicia un flujo de trabajo, las credenciales no se pueden persistir porque el proceso en el que se inicia el flujo de trabajo no tiene permiso para serializar credenciales.
+
+-- Si el flujo de trabajo se inició en una PSSession del equipo local, agregue el parámetro EnableNetworkAccess al comando que creó la sesión.
+-- Si el flujo de trabajo se inició en una PSSession de un equipo remoto, agregue el parámetro Authentication con un valor de CredSSP al comando que creó la sesión. O bien, conéctese a una configuración de sesión que tenga un valor de propiedad RunAsUser.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>El valor de UserName no tiene el formato correcto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/CredentialAttributeStrings.es.resx b/src/System.Management.Automation/resources/es/CredentialAttributeStrings.es.resx
new file mode 100644
index 00000000000..892056374c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/CredentialAttributeStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>Solicitud de credenciales de PowerShell</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Especifique sus credenciales.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/DebuggerStrings.es.resx b/src/System.Management.Automation/resources/es/DebuggerStrings.es.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/DebuggerStrings.es.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/DescriptionsStrings.es.resx b/src/System.Management.Automation/resources/es/DescriptionsStrings.es.resx
new file mode 100644
index 00000000000..3aa45dfb2ee
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/DescriptionsStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} no puede ser nulo ni estar vacío.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/DiscoveryExceptions.es.resx b/src/System.Management.Automation/resources/es/DiscoveryExceptions.es.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/DiscoveryExceptions.es.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/EnumExpressionEvaluatorStrings.es.resx b/src/System.Management.Automation/resources/es/EnumExpressionEvaluatorStrings.es.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/EnumExpressionEvaluatorStrings.es.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ErrorCategoryStrings.es.resx b/src/System.Management.Automation/resources/es/ErrorCategoryStrings.es.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ErrorCategoryStrings.es.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ErrorPackage.es.resx b/src/System.Management.Automation/resources/es/ErrorPackage.es.resx
new file mode 100644
index 00000000000..01f7557b615
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ErrorPackage.es.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>El texto del error está vacío para el error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>El valor {0} de ActionPreference está reservado para uso futuro y no se admite en este momento. Para obtener más información acerca de las variables de preferencia, vea el tema de ayuda "about_Preference_Variables".</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>El valor {0} de ActionPreference está reservado para uso futuro y no se admite en este momento. Se ha reemplazado en la variable {1} por el valor predeterminado de {2}. Para obtener más información acerca de las variables de preferencia, vea el tema de ayuda "about_Preference_Variables".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/EtwLoggingStrings.es.resx b/src/System.Management.Automation/resources/es/EtwLoggingStrings.es.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/EtwLoggingStrings.es.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/EventResource.es.resx b/src/System.Management.Automation/resources/es/EventResource.es.resx
new file mode 100644
index 00000000000..c497d164fff
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/EventResource.es.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>No se encontró un mensaje para el id. de evento PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>El trabajo {0} programado se inició a las {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Trabajo programado {0} completado a las {1} con el estado {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Excepción {0} de trabajo programado :
+ Mensaje: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Inicialización de características experimentales: omita la característica experimental '{0}' del archivo de configuración. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Inicialización experimental de características: no se pudo leer el archivo de configuración.
+ Excepción: {0}
+ Mensaje: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Complemento de flujo de trabajo cargado.
+ 	 EndpointName: {0}
+ 	 Usuario: {1}
+ 	 HostingMode: {2}
+ 	 Protocolo: {3}
+ 	 Configuración:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Se inició la ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>El estado del flujo de trabajo cambió.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Se ha solicitado un apagado del complemento de flujo de trabajo.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Se reinició el complemento de flujo de trabajo.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>El flujo de trabajo se está reanudando.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Se superó un límite de cuota establecido para el punto de conexión.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>El flujo de trabajo se ha reanudado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Se creó un grupo de espacio de ejecución de flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>La actividad se puso en cola para su ejecución.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Se inició la ejecución de la actividad.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>El flujo de trabajo se está importando desde un archivo XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>El flujo de trabajo se ha importado desde un archivo XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>No se pudo importar el flujo de trabajo desde un archivo XAML debido a un error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Se inició la validación del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>La validación del flujo de trabajo se realizó correctamente.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Error en la validación del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Actividad de flujo de trabajo validada.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>No se pudo validar la actividad de flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Error en la ejecución de la actividad.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>La disponibilidad del espacio de ejecución ha cambiado.
+ 	 RunspaceId: {0}
+ 	 Disponibilidad: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>El estado del espacio de ejecución cambió.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Flujo de trabajo cargado para su ejecución.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Flujo de trabajo descargado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Ejecución del flujo de trabajo cancelada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Se anuló la ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Operación de limpieza de flujo de trabajo ejecutada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Flujo de trabajo persistente cargado desde el disco.
+ 	 WorkflowId: {0}
+ 	 Ruta: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Los datos de flujo de trabajo se eliminaron del disco.
+ 	 WorkflowId: {0}
+ 	 Ruta: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Iniciando el trabajo de eliminación.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>El estado del trabajo ha cambiado.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Error de trabajo.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Trabajo creado para el flujo de trabajo (trabajo secundario).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Trabajo primario creado para el flujo de trabajo.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Se crearon todos los trabajos necesarios para la ejecución del flujo de trabajo.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Trabajo secundario quitado para el flujo de trabajo.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>Error al quitar el trabajo.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Cargando flujo de trabajo para su ejecución.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Finalizó la ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelando la ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Anulando la ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 Motivo: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Descargando flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Se inició el apagado forzado del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Finalizó el cierre forzado del flujo de trabajo.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Error al cerrar forzosamente un flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Conservando el flujo de trabajo en el disco.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>El flujo de trabajo se conserva en el disco.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Finalizó la ejecución de la actividad.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Error de ejecución del flujo de trabajo.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Se registró un nuevo punto de conexión de PowerShell.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Se modificó la configuración del punto de conexión.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Se anule el registro de la configuración del punto de conexión.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Configuración del punto de conexión deshabilitada.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Configuración de punto de conexión habilitada.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Se inició el espacio de ejecución fuera del proceso.
+ 	 Comando: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>La expansión de parámetros se realizó durante la ejecución del flujo de trabajo.
+ 	 Parámetros: {0}
+ 	 Equipos: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Se inició el motor de flujo de trabajo.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Se creó una instancia del administrador de flujo de trabajo con
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Ruta: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Nombre de equipo $null o . resolver en LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolviendo en http de esquema predeterminado</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Nombre de shell remoto resuelto en PowerShellCore predeterminado</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creando texto de bloque de script ({0} de {1}):
+{2}
+
+Id. de bloque de script: {3}
+Ruta: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Se inició la invocación del id. de ScriptBlock: {0}
+Id. de espacio de ejecución: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Invocación completada del id. de ScriptBlock: {0}
+Id. de espacio de ejecución: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Datos de usuario:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlación de identificadores de actividad.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Nombre de clase = {0}
+Nombre del método = {1}
+GUID de flujo de trabajo = {2}
+Mensaje = {3}
+{4}
+Nombre de actividad = {5}
+GUID de actividad = {6}
+Parámetros = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creando objeto Runspace
+ 	 Id. de instancia: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creando objeto RunspacePool
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Abriendo RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modificación del identificador de actividad y correlación</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>El estado del espacio de ejecución cambió a {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Intentando reintentar {0} la creación de la sesión para el código de error {1} en el identificador de sesión {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell ha iniciado un subproceso de escucha de IPC en el proceso: {0} en AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell ha finalizado un subproceso de escucha de IPC en el proceso: {0} en AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>Error en el subproceso de escucha de IPC de PowerShell en el proceso: {0} en AppDomain: {1}.  Mensaje error: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Conexión IPC de PowerShell en el proceso: {0} en AppDomain: {1} para el usuario: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Desconexión de IPC de PowerShell en el proceso: {0} en AppDomain: {1} para el usuario: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Puerto resuelto en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resuelto en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resuelto en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>El esquema es {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Mensaje analítico de prueba</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Los parámetros de conexión son
+ URI de conexión: {0}
+ URI de recurso: {1}
+ Usuario: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Huella digital: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modificación del identificador de actividad y correlación</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Objeto recibido con id. de espacio de ejecución: {0} Id. de comando: {1} Destino: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Se produjo una excepción no controlada en el appdomain.
+Tipo de excepción: {0}
+Mensaje de excepción: {1}
+Excepción StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. WSMan notificó un error con el código de error: {2}.
+ Mensaje de error: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Se produjo una excepción no controlada en el appdomain.
+Tipo de excepción: {0}
+Mensaje de excepción: {1}
+Excepción StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. WSMan notificó un error con el código de error: {2}.
+ Mensaje de error: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Id. de espacio de ejecución {0}. Establecimiento de una conexión mediante WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución {0}. Devolución de llamada recibida para WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0}. Cierre del shell mediante WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0}. Devolución de llamada recibida para WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. Envío de datos de tamaño {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. Devolución de llamada recibida para WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. Colocación de la solicitud receive mediante WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. Datos recibidos de tamaño {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Id. de espacio de ejecución {0} Id. de canalización {1}. Establecimiento de una conexión de comandos mediante WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución {0} Id. de canalización {1}. Devolución de llamada recibida para la conexión de comandos</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización {1}. Cerrando transporte para el comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización {1}. Devolución de llamada recibida para cerrar el comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización {1}. Envío de señal con código {2} mediante WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización {1}. Devolución de llamada recibida para WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0}. La conexión se redirige al URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Id. de espacio de ejecución: {0} Id. de canalización: {1}. El servidor está enviando datos de tamaño {2} al cliente. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Solicitud {0}. Creando una sesión remota de servidor. UserName: {1} Id. de shell personalizado: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Contexto de informe para la solicitud: {0} contexto notificado: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Operación de informes completada para la solicitud: {0}
+ Código de error: {1}
+ Mensaje de error: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Contexto de shell {0}. Id. de solicitud {1}. Crear una sesión de Commonad para ejecutar un comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Contexto de shell {0} Contexto de comando {1} Id. de solicitud {2}. Deteniendo comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Contexto de shell {0} Contexto de comando {1} Id. de solicitud {2}. Datos recibidos del cliente.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Contexto de shell {0} Contexto de comando {1} Id. de solicitud {2}. El cliente envió una solicitud de recepción para que el servidor pueda enviar datos.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Contexto {1} de comando de contexto {0} de shell IsReceiveOperation {2}. Se obtuvo una solicitud de operación de cierre.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Cargando ensamblado {0} para shell personalizado con id. de shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Cargando el tipo {0} para el shell personalizado con el identificador de shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Fragmento de comunicación remota recibido.
+ 	 Id. de objeto: {0}
+ 	 Id. de fragmento: {1}
+ 	 Marca de inicio: {2}
+ 	 Marca de finalización: {3}
+ 	 Longitud de carga: {4}
+ 	 Datos de carga: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Fragmento de comunicación remota enviado.
+ 	 Id. de objeto: {0}
+ 	 Id. de fragmento: {1}
+ 	 Marca de inicio: {2}
+ 	 Marca de finalización: {3}
+ 	 Longitud de carga: {4}
+ 	 Datos de carga: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Cerrando el servicio winrm.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Un objeto se rehidrató correctamente.
+ 	 Nombre del tipo deserializado: {0}
+ 	 Rehidratación mediante conversión al tipo: {1}
+ 	 El objeto rehidratado es de tipo: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>No se pudo rehidratar un objeto.
+ 	 Nombre del tipo deserializado: {0}
+ 	 Rehidratación mediante conversión al tipo: {1}
+ 	 Excepción de conversión de tipos: {2}
+ 	 Excepción interna de conversión de tipos: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Se ha invalidado la profundidad de serialización.
+ 	 Nombre de tipo serializado: {0}
+ 	 Profundidad original: {1}
+ 	 Profundidad invalidada: {2}
+ 	 Profundidad actual por debajo del nivel superior: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Se ha invalidado el modo de serialización.
+ 	 Nombre de tipo serializado: {0}
+ 	 Modo invalidado: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Se ha omitido la serialización de una propiedad de script porque no hay ningún espacio de ejecución que usar para la evaluación de la propiedad.
+ 	 Nombre de la propiedad: {0}
+ 	 Nombre de tipo del propietario de la propiedad: {1}
+ 	 Script de captador: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Se omitió la serialización de una propiedad porque se produjo un error en el captador de propiedad.
+ 	 Nombre de la propiedad: {0}
+ 	 Nombre de tipo del propietario de la propiedad: {1}
+ 	 Excepción del captador de propiedades: {2}
+ 	 Excepción interna del captador de propiedades: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Es posible que la serialización de un objeto enumerable no esté completa, porque el objeto que se está enumerando produjo una excepción.
+ 	 Tipo de objeto que se enumera: {0}
+ 	 Excepción: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>La serialización llamó al método ToString del objeto y se produjo un error.
+ 	 Tipo de objeto: {0}
+ 	 Excepción: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Se ha alcanzado la profundidad máxima por debajo del nivel superior, lo que obliga a serializar el objeto como cadenas.
+ 	 Tipo de objeto en profundidad máxima: {0}
+ 	 Nombre de propiedad en profundidad máxima: {1}
+ 	 Profundidad: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>El deserializador ha iniciado XmlException (lo más probable es que indique un formato clixml incorrecto).
+ 	 Número de línea: {0} posición de línea: {1}
+ 	 Excepción: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Error en la serialización de las propiedades especificadas porque faltaba una de las propiedades especificadas.
+ 	 Tipo de objeto: {0}
+ 	 Nombre de la propiedad: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>Se está iniciando la consola de PowerShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>La consola de PowerShell está lista para la entrada del usuario</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Registro de errores de seguimiento:
+ Mensaje: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Detalles de la excepción:
+ Mensaje : {5}
+ Seguimiento de la pila: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Excepción:
+ Mensaje: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Seguimiento de PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Trabajo de seguimiento:
+ Id: {0}
+ InstanceId: {1}
+ Nombre: {2}
+ Ubicación: {3}
+ Estado: {4}
+ Comando: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Información de seguimiento:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Información de seguimiento:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Iniciando la invocación de la función de flujo de trabajo. GUID de seguimiento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Finalización de la invocación de la función de flujo de trabajo. GUID de seguimiento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>EMPEZAR a crear un nuevo trabajo en ImportWorkflowCommand::StartWorkflowApplication. GUID de seguimiento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>FIN Crear un nuevo trabajo en ImportWorkflowCommand::StartWorkflowApplication. GUID de seguimiento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>FIN Crear un nuevo trabajo en ImportWorkflowCommand::StartWorkflowApplication. GUID {0} de seguimiento : Guid de ContainerParentJob {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>END WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob con GUID {0} agregado a ContainerParentJob con GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob con GUID {0} asociado a ContainerParentJob remoto con GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Ejecución de ContainerParentJob con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>END Ejecución de ContainerParentJob con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>INICIAR ejecución del trabajo de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>END Ejecución del trabajo de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>Controlador de eventos BEGIN StateChanged para el trabajo de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>Controlador de eventos END StateChanged para el trabajo de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>Controlador de eventos BEGIN StateChanged para el trabajo secundario de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>Controlador de eventos END StateChanged para el trabajo secundario de proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>EMPEZAR a ejecutar la recolección de elementos no utilizados</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>FINALIZAR la ejecución de la recolección de elementos no utilizados</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>El almacén de persistencia ha alcanzado su tamaño máximo especificado</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE ha empezado a ejecutar el archivo {0}de script.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE ha empezado a ejecutar un script seleccionado por el usuario desde el archivo {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE está deteniendo el comando actual.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE está reanudando el depurador.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE está deteniendo el depurador.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE está depurando paso a paso.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE está recorriendo paso a paso la depuración.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE está saliendo de la depuración.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE está habilitando todos los puntos de interrupción.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE está deshabilitando todos los puntos de interrupción.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE quita todos los puntos de interrupción.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE está estableciendo el punto de interrupción en la línea #: {0} del archivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE está quitando el punto de interrupción de la línea #: {0} del archivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE está habilitando el punto de interrupción en la línea #: {0} del archivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE está deshabilitando el punto de interrupción en la línea #: {0} del archivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE ha alcanzado un punto de interrupción en la línea #: {0} del archivo {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/EventingResources.es.resx b/src/System.Management.Automation/resources/es/EventingResources.es.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/EventingResources.es.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ExperimentalFeatureStrings.es.resx b/src/System.Management.Automation/resources/es/ExperimentalFeatureStrings.es.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ExperimentalFeatureStrings.es.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ExtendedTypeSystem.es.resx b/src/System.Management.Automation/resources/es/ExtendedTypeSystem.es.resx
new file mode 100644
index 00000000000..04b27b52d92
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ExtendedTypeSystem.es.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>No se encontró la propiedad '{0}'.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} no es una ruta de acceso válida.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/FileSystemProviderStrings.es.resx b/src/System.Management.Automation/resources/es/FileSystemProviderStrings.es.resx
new file mode 100644
index 00000000000..c7cfa089776
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/FileSystemProviderStrings.es.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Copiando {0} en {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>De {0} a {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/FormatAndOutXmlLoadingStrings.es.resx b/src/System.Management.Automation/resources/es/FormatAndOutXmlLoadingStrings.es.resx
new file mode 100644
index 00000000000..9dba497bfd9
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/FormatAndOutXmlLoadingStrings.es.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el elemento XML {2} no permite atributos.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el nodo {2} no puede tener objetos secundarios.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Error en XPath {0} en el archivo {1}: {2} no es válido.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: debe haber al menos un valor predeterminado {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no puede haber más de un valor predeterminado {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el nombre del control no puede ser nulo ni estar vacío.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: las vistas fuera de banda solo pueden tener CustomControl o ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: una vista fuera de banda no puede tener GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se puede cargar la vista.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: "{2}" no es un valor de alineación válido.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se espera un entero positivo.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: la definición del encabezado de columna no es válida; se descartan todos los encabezados.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el recuento de elementos de fila = {2} del conjunto alternativo #{3} no coincide con el recuento predeterminado de elementos de fila = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el recuento de elementos del encabezado = {2} no coincide con el recuento predeterminado de elementos de fila = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se debe especificar al menos un elemento de vista de lista.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: la entrada de propiedad no es válida.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta la lista de definiciones.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se espera un valor booleano.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se espera un entero no negativo.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se espera un entero.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta el valor de texto interno.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Error en XPath {0} en el archivo {1}: la lista de tokens de control personalizado no puede estar vacía.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: error al cargar {2}.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se puede especificar {2} sin una expresión.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se puede especificar {2} con una expresión.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta una cadena de formato.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta el texto del bloque de script.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta una propiedad.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el bloque de script "{2}" no es válido.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se encuentra la cadena {2} del recurso {3} en el ensamblado {4}.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se encuentra el recurso {2} en el ensamblado {3}.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se encuentra el ensamblado {2}.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el nodo debe ser un XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: se espera una expresión.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se puede tener el control o la etiqueta sin una expresión.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se pueden tener el control y la etiqueta al mismo tiempo.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se pueden tener SelectionSetName y TypeName al mismo tiempo.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: no se ha especificado ningún tipo ni condición para aplicar la vista.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: el valor {2} no es válido.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: existe un nodo duplicado.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2} y {3} se excluyen mutuamente.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2}, {3} y {4} se excluyen mutuamente.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Error en XPath {0} en el archivo {1}: {2} es un nodo desconocido.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2} es un atributo desconocido.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2} es un atributo que falta.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Error en XPath {0} en el archivo {1}: falta el nodo {2}.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: falta un nodo de {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2} es un nodo vacío.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Error en XPath {0} del archivo {1}: {2} es un atributo vacío.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Error en el archivo {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Hay demasiados errores en el archivo {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Se han producido errores al cargar el archivo de datos de formato: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Caché global de ensamblados) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>La ruta {0} no está completa. Especifique una ruta de acceso de archivo de formato completa.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>No se puede actualizar FormatTable porque es posible que se haya creado fuera del espacio de ejecución.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Se han producido errores al cargar FormatTable. Consulte el contenido de la propiedad Errors para obtener mensajes de error detallados.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Error al dar formato a los datos "{0}": {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: el recuento de elementos del encabezado = {2} no coincide con el recuento de elementos predeterminado de la fila = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: los datos de formato "{2}" no son válidos.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: el bloque de script "{2}" no es válido.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: {2} no se pudo cargar.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: TableControl solo debe contener una {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: debe haber al menos un valor predeterminado {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: se debe especificar al menos un elemento de vista de lista.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error en los datos de vista con el nombre de tipo {0} en el índice {1}: no puede haber más de un valor predeterminado {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Hay demasiados errores en los datos de formato para el tipo "{0}".</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Una tabla de formato compartida no se puede actualizar con más de una entrada.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/FormatAndOut_MshParameter.es.resx b/src/System.Management.Automation/resources/es/FormatAndOut_MshParameter.es.resx
new file mode 100644
index 00000000000..917b0a743a0
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/FormatAndOut_MshParameter.es.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>No se puede convertir {0} a uno de los siguientes tipos {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>El valor de un parámetro era nulo; se esperaba uno de los siguientes tipos: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>La clave duplicada "{0}" entra en conflicto con "{1}".</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>La clave "{0}" tiene un tipo, {1}, que no es válido; los tipos esperados son {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>La clave "{0}" tiene un tipo, {1}, que no es válido; el tipo esperado es {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>La clave {0} es ambigua; {1} y {2} entran en conflicto.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>El valor de una clave no puede ser nulo.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>El tipo de clave {0} no es válido. La clave debe ser una cadena.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>La clave {0} no tiene ningún valor.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Falta una entrada obligatoria para {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>La clave de {0} no es válida.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>El valor "{0}" para la clave "{1}" no es válido; los valores válidos son {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>El valor "{0}" para la clave "{1}" debe ser mayor que 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>No puede haber una cadena de formato vacía para la clave "{0}".</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>La clave "{0}" no puede tener un valor de cadena vacío.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>No se permite un valor de cadena vacío.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>La clave "{0}" no puede tener caracteres comodín en el valor "{1}".</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>No se permiten caracteres comodín en "{0}".</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>El valor de EnumerableExpansion no es válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/FormatAndOut_format_xxx.es.resx b/src/System.Management.Automation/resources/es/FormatAndOut_format_xxx.es.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/FormatAndOut_format_xxx.es.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/FormatAndOut_out_xxx.es.resx b/src/System.Management.Automation/resources/es/FormatAndOut_out_xxx.es.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/FormatAndOut_out_xxx.es.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/GetErrorText.es.resx b/src/System.Management.Automation/resources/es/GetErrorText.es.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/GetErrorText.es.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/HelpDisplayStrings.es.resx b/src/System.Management.Automation/resources/es/HelpDisplayStrings.es.resx
new file mode 100644
index 00000000000..8b1fc31cea6
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/HelpDisplayStrings.es.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NOMBRE</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Ejemplo</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Respuesta</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Ninguno</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/HelpErrors.es.resx b/src/System.Management.Automation/resources/es/HelpErrors.es.resx
new file mode 100644
index 00000000000..bd2a7f276e8
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/HelpErrors.es.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help no pudo encontrar {0} en un archivo de ayuda de esta sesión. Para descargar temas de Ayuda actualizados, escriba: "Update-Help". Para obtener ayuda en pantalla, busque el tema de ayuda en la biblioteca de TechNet en https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>No se puede procesar la categoría de Ayuda porque "{0}" no es una categoría de Ayuda válida.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>No se puede cargar el archivo de Ayuda "{0}". Detalles: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>No se puede acceder al archivo de Ayuda "{0}" porque el usuario actual no tiene permisos de acceso al archivo. Detalles: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>El archivo de Ayuda "{0}" no es un documento XML válido. Detalles: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>Se produjo un error al cargar el contenido de Ayuda para {0} desde el archivo {1}. Detalles: {2}. Para descargar los temas de Ayuda actualizados, ejecute el cmdlet Update-Help. Para obtener ayuda en pantalla, busque el tema de Ayuda en la biblioteca de TechNet en https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>No se puede cargar el proveedor "{0}". Detalles: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>No se puede cargar el archivo de Ayuda. Se produjeron los siguientes {1} errores al cargar el archivo de Ayuda "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>El nodo "{0}" no puede tener "{1}" como nodo secundario. Ruta del nodo: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>El nodo "{0}" puede tener un máximo de {2} nodos secundarios de tipo "{1}". Ruta del nodo: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>No se encuentra la clave del Registro: "{0}{1}"; se está usando "{2}" para cargar los archivos de Ayuda.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No hay ningún parámetro que coincida con los criterios {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} no es compatible con la categoría de Ayuda solicitada.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>No se puede mostrar la versión en línea de este tema de Ayuda porque la dirección de Internet (URI) del tema de Ayuda no está especificada en el código del comando ni en el archivo de Ayuda del comando.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>El URI {0} especificado no es válido.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Error al iniciar un explorador para mostrar la Ayuda en pantalla. No hay ningún programa ni explorador asociado para abrir el URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>No se admite el protocolo especificado en el URI "{0}". Solo se admiten los protocolos "{1}" y "{2}".</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Se encontraron varios temas de Ayuda. Use solo un tema de Ayuda con la opción -{0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>No se puede obtener Ayuda de un espacio de ejecución remoto porque no se ha abierto.  Abra el espacio de ejecución ejecutando un comando remoto implícito y, después, vuelva a intentar ejecutar el comando para obtener Ayuda.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Acceso denegado. El comando no pudo actualizar los temas de Ayuda de los módulos principales de PowerShell ni de ningún módulo del directorio $pshome\Modules.
+Para actualizar estos temas de Ayuda, inicie PowerShell con el comando "Ejecutar como administrador" e intente ejecutar Update-Help de nuevo.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>Para usar el {0}, asegúrese de que la aplicación usa "Microsoft.NET.Sdk.WindowsDesktop" como SDK del proyecto y de que el ensamblado correspondiente "Microsoft.PowerShell.GraphicalHost" está disponible. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} no funciona en una sesión remota.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName no puede hacer referencia a la propia función.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>No se puede obtener Ayuda de una ubicación de red cuando se está en una sesión restringida.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/HistoryStrings.es.resx b/src/System.Management.Automation/resources/es/HistoryStrings.es.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/HistoryStrings.es.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/HostInterfaceExceptionsStrings.es.resx b/src/System.Management.Automation/resources/es/HostInterfaceExceptionsStrings.es.resx
new file mode 100644
index 00000000000..b6333d4e8f0
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/HostInterfaceExceptionsStrings.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Se ha producido un error de tipo "{0}".</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Un comando que solicita información al usuario falló porque el programa host o el tipo de comando no admite la interacción con el usuario. Pruebe con un programa host que sí admita la interacción con el usuario, como la consola de PowerShell, y quite los comandos relacionados con solicitudes de los tipos de comando que no admiten la interacción con el usuario.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Un comando que solicita información al usuario falló porque el programa host o el tipo de comando no admite la interacción con el usuario. El host intentaba solicitar confirmación con el siguiente mensaje: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>No se puede invocar el método porque el pool se ha cerrado o ha fallado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/InternalCommandStrings.es.resx b/src/System.Management.Automation/resources/es/InternalCommandStrings.es.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/InternalCommandStrings.es.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/InternalHostStrings.es.resx b/src/System.Management.Automation/resources/es/InternalHostStrings.es.resx
new file mode 100644
index 00000000000..860c67ed30c
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/InternalHostStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>No se ha llamado a EnterNestedPrompt tantas veces como a ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/InternalHostUserInterfaceStrings.es.resx b/src/System.Management.Automation/resources/es/InternalHostUserInterfaceStrings.es.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/InternalHostUserInterfaceStrings.es.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Logging.es.resx b/src/System.Management.Automation/resources/es/Logging.es.resx
new file mode 100644
index 00000000000..64728e00c48
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Logging.es.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>DESCONOCIDO</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>La característica experimental del motor "{0}" declarada en el archivo de configuración no está registrada en la versión actual de PowerShell.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>La característica experimental "{0}" declarada en el archivo de configuración no es válida.
+El nombre de una característica experimental debe seguir la convención siguiente: 
+    Nombre de la característica del motor: "PS[FeatureName]"
+    Nombre de la característica del módulo: "[ModuleName].[FeatureName]"</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Metadata.es.resx b/src/System.Management.Automation/resources/es/Metadata.es.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Metadata.es.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/MiniShellErrors.es.resx b/src/System.Management.Automation/resources/es/MiniShellErrors.es.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/MiniShellErrors.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Modules.es.resx b/src/System.Management.Automation/resources/es/Modules.es.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Modules.es.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/MshHostRawUserInterfaceStrings.es.resx b/src/System.Management.Automation/resources/es/MshHostRawUserInterfaceStrings.es.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/MshHostRawUserInterfaceStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/MshSignature.es.resx b/src/System.Management.Automation/resources/es/MshSignature.es.resx
new file mode 100644
index 00000000000..288493acfef
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/MshSignature.es.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Firma verificada.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>El archivo {0} no está firmado digitalmente. No se puede ejecutar este script en el sistema actual. Para obtener más información sobre la ejecución de scripts y la configuración de la directiva de ejecución, consulte about_Execution_Policies en https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Es posible que un usuario o proceso no autorizado haya cambiado el contenido del archivo {0}, porque el hash del archivo no coincide con el hash almacenado en la firma digital. El script no se puede ejecutar en el sistema especificado. Para obtener más información, ejecute Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>El archivo {0} está firmado, pero el signante no es de confianza en este sistema.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>No se puede firmar el archivo porque el sistema no admite operaciones de firma en {0} archivos.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>No se puede firmar el archivo porque el sistema no admite operaciones de firma en archivos que no tienen una extensión de nombre de archivo.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>No se puede verificar la firma porque no es compatible con el sistema actual.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>No se puede verificar la firma porque no es compatible con el sistema actual. El algoritmo hash no es válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/MshSnapInCmdletResources.es.resx b/src/System.Management.Automation/resources/es/MshSnapInCmdletResources.es.resx
new file mode 100644
index 00000000000..c2909d86ecb
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/MshSnapInCmdletResources.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>No se puede realizar la operación. El cmdlet especificado no se admite en un shell personalizado.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>No se encontraron complementos de PowerShell que coincidan con el patrón "{0}". Compruebe el patrón e intente de nuevo el comando.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>El formato del nombre de complemento especificado no es válido.  Los nombres de complemento de PowerShell solo pueden contener caracteres alfanuméricos, guiones, guiones bajos y puntos. Corrija el nombre y vuelva a realizar la operación.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>No se puede agregar el complemento de PowerShell {0} porque es un módulo de PowerShell del sistema. Use Import-Module para cargar el módulo.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/MshSnapinInfo.es.resx b/src/System.Management.Automation/resources/es/MshSnapinInfo.es.resx
new file mode 100644
index 00000000000..074465ee171
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/MshSnapinInfo.es.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>No se puede acceder a la información del registro de PowerShell.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>No se puede acceder a la información del registro del motor de PowerShell.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>No se puede acceder a la información de PublicKeyToken.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>La versión {0} de PowerShell no está disponible en este equipo.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>El complemento de PowerShell "{0}" no está instalado en este equipo.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>No se especificó el valor obligatorio {0} para la clave del registro {1}.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>El valor obligatorio {0} no tiene el formato correcto para la clave del registro {1}.  El formato esperado es "string".</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>El valor obligatorio {0} no tiene el formato correcto para la clave del registro {1}.  El formato esperado es "multistring".</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>No se encuentra la información necesaria en el registro o faltan archivos de clave.  No se pueden cargar algunos cmdlets.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>No se ha registrado ningún complemento para la versión {0} de PowerShell.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>No se puede recuperar el recurso de cadena porque se ha desechado el lector.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>No se ha especificado el valor de versión {0} o es incorrecto para la clave del registro {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>No se encontró ningún atributo [PSVersion] para el tipo de PowerShell {0}. Agregue un atributo PSVersion al tipo mediante [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/NativeCP.es.resx b/src/System.Management.Automation/resources/es/NativeCP.es.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/NativeCP.es.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PSCommandStrings.es.resx b/src/System.Management.Automation/resources/es/PSCommandStrings.es.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PSCommandStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PSConfigurationStrings.es.resx b/src/System.Management.Automation/resources/es/PSConfigurationStrings.es.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PSConfigurationStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PSDataBufferStrings.es.resx b/src/System.Management.Automation/resources/es/PSDataBufferStrings.es.resx
new file mode 100644
index 00000000000..e14c0ac4abb
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PSDataBufferStrings.es.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>El índice especificado es menor que cero o mayor que el número de elementos del búfer. El índice debe estar en el intervalo {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>No se puede convertir una referencia nula en un tipo de valor.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>No se puede convertir el valor del tipo {0} al tipo {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>No se pueden agregar objetos a un búfer cerrado. Asegúrese de que el búfer esté abierto para que las operaciones Add e Insert se realicen correctamente.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>La propiedad SerializeInput solo se puede establecer para el tipo PSObject de PSDataCollection. Establezca la propiedad SerializeInput en false o cambie el tipo de colección a un PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PSListModifierStrings.es.resx b/src/System.Management.Automation/resources/es/PSListModifierStrings.es.resx
new file mode 100644
index 00000000000..d43b067ab07
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PSListModifierStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Se detectó el siguiente modificador de lista desconocido: "{0}". Los modificadores de lista válidos son Agregar, Quitar y Reemplazar.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>No se puede aplicar la actualización porque el objeto no es un tipo de colección compatible.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PSStyleStrings.es.resx b/src/System.Management.Automation/resources/es/PSStyleStrings.es.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PSStyleStrings.es.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ParameterBinderStrings.es.resx b/src/System.Management.Automation/resources/es/ParameterBinderStrings.es.resx
new file mode 100644
index 00000000000..fd86fb11c7b
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ParameterBinderStrings.es.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>No se encuentra un parámetro que coincida con el nombre de parámetro "{1}".</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>No se encuentra ningún parámetro posicional que acepte el argumento "{1}".</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Falta un argumento para el parámetro "{1}". Especifique un parámetro de tipo "{2}" e inténtelo de nuevo.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>No se puede procesar el parámetro porque el nombre del parámetro "{1}" es ambiguo. Las posibles coincidencias incluyen:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>No se puede convertir "{6}" al tipo "{2}" que requiere el parámetro "{1}". {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>No se puede enlazar el parámetro "{1}". {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>No se pueden enlazar los parámetros posicionales "{1}".</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>No se pueden enlazar parámetros posicionales porque no se han proporcionado nombres.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>El conjunto de parámetros no se puede resolver con los parámetros con nombre especificados. Uno o varios parámetros enviados no se pueden usar juntos o se proporcionó un número insuficiente de parámetros.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>No se puede procesar el comando porque faltan uno o varios parámetros obligatorios:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>El parámetro "{1}" no se puede especificar en el conjunto de parámetros "{6}".</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>No se puede enlazar el parámetro porque el parámetro "{1}" se ha especificado más de una vez. Para proporcionar varios valores a parámetros que aceptan varios valores, use la sintaxis de matriz. Por ejemplo, "-parameter value1,value2,value3".</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>No se puede evaluar el parámetro "{1}" porque su argumento está especificado como un bloque de script y no hay entrada. Un bloque de script no se puede evaluar sin entrada.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Error en la entrada del bloque de script para el parámetro "{1}". {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>No se puede evaluar el parámetro "{1}" porque la entrada de su argumento no produjo ninguna salida.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>El objeto de entrada no se puede enlazar a ningún parámetro del comando, bien porque el comando no acepta entrada de canalización o porque la entrada y sus propiedades no coinciden con ninguno de los parámetros que aceptan entrada de canalización.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>No se puede enlazar el objeto de entrada porque no contiene la información necesaria para enlazar todos los parámetros obligatorios: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>No se puede procesar la entrada de la canalización porque no se puede recuperar el valor predeterminado del parámetro "{1}". {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>No se puede recuperar los parámetros dinámicos para el cmdlet. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Proporcione valores para estos parámetros:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>cmdlet {0} en la posición {1} de la canalización de comandos</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>No se puede procesar la transformación del argumento del parámetro "{1}". {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>No se puede validar el argumento en el parámetro "{1}". {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>No se puede enlazar el parámetro "{1}" al destino. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>No se puede enlazar el argumento al parámetro "{1}" porque es null.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>No se puede enlazar el argumento al parámetro "{1}" porque es una cadena vacía.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>No se puede enlazar el argumento al parámetro "{1}" porque es una colección vacía.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>No se puede enlazar el argumento al parámetro "{1}" porque es un matriz vacía.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>No se puede procesar el comando. El parámetro "{0}" se define varias veces.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>No se puede enlazar el cmdlet {0} porque el parámetro "{1}" es de tipo "{2}" y no se puede identificar el método Add() o existen varios métodos Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>No se puede enlazar el cmdlet {0} porque el parámetro definido por el runtime "{1}" se agregó al RuntimeDefinedParameterDictionary con la clave "{6}". La clave debe ser la misma que RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>No se puede enlazar el argumento al parámetro "{1}" porque los PSTypeNames del argumento no coinciden con el PSTypeName que requiere el parámetro: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>En $PSDefaultParameterValues se definen varios valores predeterminados diferentes para el parámetro que coincide con el siguiente nombre o alias: {0}. Estos valores predeterminados se han ignorado.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>El siguiente nombre o alias definido en $PSDefaultParameterValues para este cmdlet se resuelve en varios parámetros: {0}. Se ha ignorado el valor predeterminado.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Es posible que este error se deba a la aplicación del enlace de parámetros predeterminado. Puede deshabilitar el enlace de parámetros predeterminado en $PSDefaultParameterValues estableciendo $PSDefaultParameterValues["Disabled"] en $true y, a continuación, vuelva a intentarlo. Los siguientes parámetros predeterminados se enlazaron correctamente a este cmdlet cuando se produjo el error:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Es posible que este error se deba a la aplicación del enlace de parámetros predeterminado. Puede deshabilitar el enlace de parámetros predeterminado en $PSDefaultParameterValues estableciendo $PSDefaultParameterValues["Disabled"] en $true y volver a intentarlo. El siguiente parámetro predeterminado se enlazó correctamente a este cmdlet cuando se produjo el error:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Error al enlazar el valor predeterminado "{0}" al parámetro "{1}": {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>La clave "{0}" no tiene un formato válido. Para obtener información sobre el formato correcto, consulte about_Parameters_Default_Values en https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Las claves "{0}" no tienen un formato válido. Para obtener información sobre el formato correcto, consulte about_Parameters_Default_Values en https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>El parámetro "{0}" está obsoleto. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>La clave "{0}" de tipo "{1}" no es un valor de cadena. DefaultParameterDictionary solo acepta claves con valores de cadena.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>La clave "{0}" ya se ha agregado al diccionario.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>No se permite invocar una propiedad o un método</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>No se permitirá invocar el Método o la Propiedad "{0}" en el tipo "{1}" en el modo de lenguaje restringido para scripts que no son de confianza.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>No se permite crear tipos</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>No se permitirá la creación del tipo "{0}" durante el enlace de parámetros en el modo de lenguaje restringido para scripts que no son de confianza.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ParserStrings.es.resx b/src/System.Management.Automation/resources/es/ParserStrings.es.resx
new file mode 100644
index 00000000000..9db998aa40a
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ParserStrings.es.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>No se puede cargar el ensamblado '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PathUtilsStrings.es.resx b/src/System.Management.Automation/resources/es/PathUtilsStrings.es.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PathUtilsStrings.es.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PipelineStrings.es.resx b/src/System.Management.Automation/resources/es/PipelineStrings.es.resx
new file mode 100644
index 00000000000..0970b799588
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PipelineStrings.es.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>No se puede procesar la instancia de cmdlet porque otra canalización está usando la instancia del cmdlet. Póngase en contacto con los servicios de atención al cliente de Microsoft.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>No se puede realizar la operación porque se ha iniciado la canalización. Detenga la canalización e intente la operación de nuevo.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>No se puede seguir ejecutando el cmdlet porque la directiva Stop ha impedido la ejecución de cmdlets.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>No se puede ejecutar la canalización porque el primer cmdlet de la canalización intenta leer la entrada a partir de los resultados de un cmdlet anterior. Modifique el primer cmdlet, elimínelo o agregue a la canalización el cmdlet cuya salida necesita el primer cmdlet y, después, vuelva a intentar ejecutar la canalización.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>No se puede procesar el número de cmdlet. La función ReadFromCommand debe especificar el id. de un cmdlet que ya se haya agregado a la canalización. Póngase en contacto con los servicios de atención al cliente de Microsoft.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>No se puede leer la salida de las funciones ReadFromCommand y ReadErrorQueue porque otro cmdlet ya está leyendo esa salida. Póngase en contacto con los servicios de atención al cliente de Microsoft.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>No se puede ejecutar la canalización porque no hay comandos. Agregue al menos un comando a la canalización y vuelva a ejecutarlo.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>No se puede completar la operación de canalización porque aún no se ha iniciado. Debe llamar al método Begin() antes de llamar a End() en una canalización paso a paso.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>Los métodos WriteObject y WriteError no se pueden llamar desde fuera de las invalidaciones de los métodos BeginProcessing, ProcessRecord y EndProcessing, y solo se pueden llamar desde el mismo subproceso. Compruebe que el cmdlet realiza estas llamadas correctamente o póngase en contacto con el servicio de soporte técnico de Microsoft.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>Un cmdlet produjo una excepción después de llamar a ThrowTerminatingError.
+La primera excepción fue "{0}" con el seguimiento de pila "{1}".
+La segunda excepción fue "{2}" con el seguimiento de pila "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>No se pueden llamar a los métodos WriteObject y WriteError después de cerrar la canalización. Póngase en contacto con los servicios de atención al cliente de Microsoft.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Error al crear la canalización.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Esta canalización no admite la semántica de desconexión y conexión.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>No se puede conectar esta canalización porque no está en estado desconectado.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>El objeto de espacio de ejecución tiene asociado un comando remoto nulo.  No se puede crear un objeto RemotePipeline desconectado porque no se ha especificado ningún comando remoto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/PowerShellStrings.es.resx b/src/System.Management.Automation/resources/es/PowerShellStrings.es.resx
new file mode 100644
index 00000000000..52f3e64adea
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/PowerShellStrings.es.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>El estado de la instancia actual de PowerShell no es válido para esta operación.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>No se puede realizar la operación porque ya se inició un comando. Espere a que se complete el comando o deténgalo y, a continuación, vuelva a intentar la operación.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>No se ha especificado ningún comando.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>La instancia de PowerShell no está en el estado correcto para crear una instancia anidada de PowerShell. Las instancias anidadas de PowerShell solo se deben crear en una instancia de PowerShell en ejecución.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>No se puede realizar la operación porque el espacio de ejecución no se encuentra en el estado "{0}". El estado actual del espacio de ejecución es "{1}".</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Las instancias anidadas de PowerShell no se pueden invocar de forma asincrónica. Use el método de Invocar.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>El objeto {0} no se creó mediante la llamada a {1} en esta instancia de PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Cuando el espacio de ejecución está configurado para reutilizar un subproceso, el estado del apartamento en la configuración de invocación debe coincidir con el del espacio de ejecución.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Cuando el espacio de ejecución está configurado para usar el subproceso actual, el estado del apartamento en la configuración de invocación debe coincidir con el del subproceso actual.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Se requiere un comando para agregar un parámetro. Debe agregarse un comando a la instancia de PowerShell antes de agregar un parámetro.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Las claves del diccionario deben ser cadenas.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>No hay ningún espacio de ejecución disponible para ejecutar comandos en este subproceso. Puede proporcionar uno en la propiedad DefaultRunspace del tipo System.Management.Automation.Runspaces.Runspace. El comando que intentó invocar era: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Este objeto de PowerShell no se puede conectar porque no está asociado a un espacio de ejecución remoto ni a un grupo de espacios de ejecución.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>El comando en ejecución se ha desconectado, pero sigue ejecutándose en el servidor remoto.  Vuelva a conectarse para obtener el estado de la operación del comando y los datos de salida.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>No se puede realizar la operación porque la sesión actual de PowerShell está en estado Desconectado.  Conecte esta sesión de PowerShell y, a continuación, espere a que el comando termine o deténgalo.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>No se puede realizar la operación porque la sesión actual de PowerShell está en estado Desconectado.  Conecte esta sesión de PowerShell e inténtelo de nuevo.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Error al intentar conectar con el comando remoto.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>No se puede realizar la operación porque un comando se está deteniendo actualmente. Espere a que termine de detenerse el comando y, a continuación, vuelva a intentar la operación.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>No hay ningún espacio de ejecución disponible para ejecutar comandos en este subproceso. Puede proporcionar uno en la propiedad DefaultRunspace del tipo System.Management.Automation.Runspaces.Runspace. La instancia actual de PowerShell no contiene ningún comando que invocar.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>No se puede crear un objeto de PowerShell que use el espacio de ejecución actual porque no hay ningún espacio de ejecución actual disponible.  Es posible que el espacio de ejecución actual se esté iniciando, como cuando se crea con un estado de sesión inicial.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ProgressRecordStrings.es.resx b/src/System.Management.Automation/resources/es/ProgressRecordStrings.es.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ProgressRecordStrings.es.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ProviderBaseSecurity.es.resx b/src/System.Management.Automation/resources/es/ProviderBaseSecurity.es.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ProviderBaseSecurity.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/ProxyCommandStrings.es.resx b/src/System.Management.Automation/resources/es/ProxyCommandStrings.es.resx
new file mode 100644
index 00000000000..b319bc64c6d
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/ProxyCommandStrings.es.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>The 'help' parameter is not recognized as a valid HelpInfo object created by the 'get-help' command.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>The proxy command cannot be generated because the CommandMetadata has no name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/RegistryProviderStrings.es.resx b/src/System.Management.Automation/resources/es/RegistryProviderStrings.es.resx
new file mode 100644
index 00000000000..918fa0442da
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/RegistryProviderStrings.es.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Establecer elemento</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Valor: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Borrar elemento</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Nuevo elemento</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Quitar clave</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Copiar clave</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Destino: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Cambiar nombre de elemento</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Mover elemento</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Destino: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Establecer propiedad</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Propiedad: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Borrar propiedad</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Propiedad: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Nueva propiedad</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Propiedad: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Quitar propiedad</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} Propiedad: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Cambiar el nombre de la propiedad.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Copiar propiedad</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Mover propiedad</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Elemento: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>No se procesó la operación. La ubicación proporcionada no permite esta operación.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>No se permite la operación en la ubicación de origen.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>No se permite la operación en la ubicación de destino.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Las opciones de configuración del equipo local</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>La configuración de software del usuario actual</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Ya existe una clave con esta ruta de acceso.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>No se puede realizar la operación porque la ruta de destino está subordinada a la ruta de origen.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>La propiedad ya existe.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>La propiedad {0} no existe en la ruta de acceso {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>La clave del Registro de la ruta especificada no existe.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>No se pudo enlazar el parámetro "Type". No se pudo convertir "{0}" en "{1}". Los valores de enumeración posibles son "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown".</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Se ha creado la clave {0}, pero no se pudo establecer un valor predeterminado.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>No se puede crear una unidad con la raíz especificada. La ruta de acceso raíz no existe.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>No se puede cambiar el nombre del elemento porque ya existe un elemento con ese nombre en el mismo contenedor.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>El nombre de la clave del Registro debe empezar por un nombre de clave raíz válido.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>El argumento de subclave no es válido.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>No se puede eliminar el árbol de la subclave porque la subclave no existe.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>No existe ningún valor con ese nombre.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>El valor de enumeración {0} no es válido.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Se debe especificar un argumento de valor.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Se debe especificar un argumento de nombre.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>El valor de RegistryValueKind especificado no es válido.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue no permite un String[] que contenga una referencia Cadena nula.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Las subclaves del Registro no debe superar los 255 caracteres.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Debe especificarse un nombre de subclave que no esté vacío.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>El tipo del objeto de valor no coincide con el RegistryValueKind especificado o el objeto no se pudo convertir correctamente.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue no admite matrices de tipo "{0}". Solo se admiten Byte[] y String[].</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>La clave del Registro especificada no existe.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>La longitud del nombre del valor especificado supera el máximo de 16383 caracteres.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>El tamaño de los datos del valor especificado supera el máximo de 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>La subclave del Registro especificada no existe.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>El valor especificado para RegistryKeyPermissionCheck no es válido.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>La clave del Registro tiene subclaves; este método no admite eliminaciones recursivas.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>No se puede crear un controlador de KTM sin Transaction.Current o una transacción especificada.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>La transacción especificada o Transaction.Current debe coincidir con la transacción usada para crear o abrir este TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>El objeto TransactedRegistryKey no está asociado a una transacción porque corresponde a una clave predefinida.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>No se permite el acceso al Registro solicitado.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Se denegó el acceso a la clave del Registro "{0}".</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>No se puede escribir en la clave del Registro.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>No se puede acceder a una clave del Registro cerrada.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Error desconocido: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Las transacciones del Registro no se admiten en esta plataforma.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>El identificador especificado no es válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/RemotingErrorIdStrings.es.resx b/src/System.Management.Automation/resources/es/RemotingErrorIdStrings.es.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/RemotingErrorIdStrings.es.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/RunspaceInit.es.resx b/src/System.Management.Automation/resources/es/RunspaceInit.es.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/RunspaceInit.es.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/RunspacePoolStrings.es.resx b/src/System.Management.Automation/resources/es/RunspacePoolStrings.es.resx
new file mode 100644
index 00000000000..0bb3a8c54ab
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/RunspacePoolStrings.es.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>El tamaño máximo del grupo no puede ser inferior a 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>El tamaño mínimo del grupo no puede ser inferior a 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>El tamaño mínimo del grupo no puede ser mayor que el tamaño máximo del grupo.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>El estado del grupo de espacios de ejecución no es válido para esta operación.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>No se puede realizar la operación porque el grupo de espacio de ejecución no se encuentra en el estado "{0}". El estado actual es "{1}".</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>No se puede abrir el grupo de espacios de ejecución porque no está en el estado "BeforeOpen". El estado actual es "{0}".</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>El objeto {0} no se creó al llamar a {1} en la instancia actual de RunspacePool.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>No se puede lanzar el espacio de ejecución en el grupo actual porque el espacio de ejecución no pertenece a ese grupo.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Esta propiedad no se puede cambiar después de abrir el grupo de espacios de ejecución.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Este espacio de ejecución no admite operaciones de desconexión y conexión.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>No se puede realizar la operación porque el grupo de espacio de ejecución está en estado Desconectado.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>La operación Desconectar no se admite en el servidor.  El servidor debe ejecutar PowerShell 3.0 o una versión posterior para admitir la desconexión del grupo de espacios de ejecución remoto.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Este grupo de espacios de ejecución {0} no está configurado para proporcionar objetos de PowerShell desconectados para los comandos que se ejecutan en el servidor remoto.  Use el método estático GetRunspacePools() de la clase RunspacePool para consultar el servidor y devolver los objetos de grupo de espacios de ejecución que están configurados para hacerlo.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>No se puede conectar este grupo de espacios de ejecución porque el grupo de espacios de ejecución correspondiente del lado del servidor está conectado a otro cliente.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState no se admite en el servidor.  El servidor debe ejecutar PowerShell 5.0 o una versión posterior.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/RunspaceStrings.es.resx b/src/System.Management.Automation/resources/es/RunspaceStrings.es.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/RunspaceStrings.es.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/SecuritySupportStrings.es.resx b/src/System.Management.Automation/resources/es/SecuritySupportStrings.es.resx
new file mode 100644
index 00000000000..06bf01991d5
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/SecuritySupportStrings.es.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>No se puede cargar el certificado. "{0}" debe resolverse en una ruta de acceso del sistema de archivos.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>El certificado "{0}" no se puede usar para el cifrado. Los certificados de cifrado deben contener el uso de claves de cifrado de datos o cifrado de claves, e incluir el uso mejorado de claves de cifrado de documentos ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>No se puede cargar el certificado. El identificador "{0}" coincide con varios certificados. Para cifrar para varios destinatarios, proporcione varios valores específicos para el parámetro "{1}", en lugar de un comodín que coincida con varios certificados.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>No se puede cargar certificado de cifrado. La configuración de certificado "{0}" no representa un certificado codificado en Base64 válido ni representa un certificado válido mediante archivo, directorio, huella digital o nombre de sujeto.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>ADVERTENCIA: el certificado "{0}" contiene una clave privada. Los certificados de registro de eventos protegido usados para el cifrado solo deben contener la clave pública.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ERROR: no se pudo proteger el mensaje de registro de eventos "{0}": {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ERROR: no se pudo encontrar o usar el certificado: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>La clave de sesión no está disponible para cifrar la cadena segura.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Desplazamiento de búfer no válido.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Datos de clave pública no válidos.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>No se puede importar la clave pública.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Datos de clave de sesión no válidos.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>El archivo de script "{0}" no puede ejecutarse porque lo ha bloqueado la directiva del sistema.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Se devolvió un valor desconocido de aplicación de directiva de archivo de script: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Archivo de script leído</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>La directiva no confía en el archivo de script "{0}" y se ejecutará en modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/Serialization.es.resx b/src/System.Management.Automation/resources/es/Serialization.es.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/Serialization.es.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/SessionStateProviderBaseStrings.es.resx b/src/System.Management.Automation/resources/es/SessionStateProviderBaseStrings.es.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/SessionStateProviderBaseStrings.es.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/SessionStateStrings.es.resx b/src/System.Management.Automation/resources/es/SessionStateStrings.es.resx
new file mode 100644
index 00000000000..47588408980
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/SessionStateStrings.es.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>No se encuentra la ruta de acceso '{0}' porque no existe.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/StringDecoratedStrings.es.resx b/src/System.Management.Automation/resources/es/StringDecoratedStrings.es.resx
new file mode 100644
index 00000000000..2e3d956515f
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/StringDecoratedStrings.es.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Solo se admite ''ANSI'' o ''PlainText'' para este método.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/SubsystemStrings.es.resx b/src/System.Management.Automation/resources/es/SubsystemStrings.es.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/SubsystemStrings.es.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/SuggestionStrings.es.resx b/src/System.Management.Automation/resources/es/SuggestionStrings.es.resx
new file mode 100644
index 00000000000..1c19b64fae9
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/SuggestionStrings.es.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>No se encontró el comando "{0}", pero sí existe en la ubicación actual.
+PowerShell no carga comandos desde la ubicación actual de manera predeterminada (consulte "Get-Help about_Command_Precedence").
+
+Si confía en este comando, ejecute en su lugar el siguiente comando:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Los comandos más similares son:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/TabCompletionStrings.es.resx b/src/System.Management.Automation/resources/es/TabCompletionStrings.es.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/TabCompletionStrings.es.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/TransactionStrings.es.resx b/src/System.Management.Automation/resources/es/TransactionStrings.es.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/TransactionStrings.es.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/TypesXmlStrings.es.resx b/src/System.Management.Automation/resources/es/TypesXmlStrings.es.resx
new file mode 100644
index 00000000000..e65b590474f
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/TypesXmlStrings.es.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Error: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}): error en el tipo "{3}": {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>El nodo "{0}" debe aparecer solo una vez en "{1}". Se ignorará el nodo primario "{1}".</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>No se permite el nodo {0}. Están permitidos los siguientes nodos: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>El nodo "{0}" no debe tener texto interno.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>El nodo "{0}" debe tener texto interno.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>No se encontró el nodo "{0}". Debe producirse solo una vez en "{1}". Se ignorará el nodo primario "{1}".</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>El nodo "Type" debe tener "Members", "TypeConverters" o "TypeAdapters".</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>No se puede crear una instancia del convertidor de tipos para el tipo {0} debido a la excepción: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell no puede crear una instancia del adaptador de tipos para el tipo {0} debido a la siguiente excepción: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>El tipo adaptado "{0}" no es válido.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>Se ignoró TypeConverter porque ya se produce.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>Se ignoró TypeAdapter porque ya se produce.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>El tipo "{0}" debe ser TypeConverter o PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>El tipo "{0}" debe ser un PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>El miembro {0} ya está presente.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>El siguiente nombre de miembro está reservado: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Excepción: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty debe tener un captador o un establecedor.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty debe tener un captador o un establecedor.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>El valor debe ser TRUE o FALSE en lugar de {0}.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>El nodo "{0}" no debe tener el atributo "{1}".</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: no se encontró el archivo.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: se omitió el archivo porque {2} ya lo había cargado.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>No se encuentra la clave del Registro: {0}{1}. Usando {2} para cargar los archivos de configuración.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>No se encuentra la ruta de acceso {0} especificada en la clave del Registro: {1}{2}. Usando {3} para cargar los archivos de configuración.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: se omitió el archivo porque no tiene la extensión de nombre de archivo ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: se omitió el archivo debido a la siguiente excepción de validación: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>El miembro "{0}" debe ser una nota.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>No se puede convertir la nota "{0}": "{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>No use el miembro "{0}" aquí.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>El miembro "{0}" debe tener el tipo "{1}".</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}" debe estar presente cuando "{1}" sea "{2}" y "{3}" sea "{4}".</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Un error anterior provocó que se ignoraran todos los valores de configuración de serialización.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" no es un miembro estándar y se ignorará.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>La ruta {0} no está completa. Especifique una ruta de acceso de archivo de tipo completo.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>No se puede actualizar TypeTable porque es posible que se haya creado fuera del espacio de ejecución.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Se produjeron errores al cargar TypeTable. Consulte la propiedad Errores para obtener mensajes de error detallados.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Error en TypeData "{0}": {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" debe tener un valor para su propiedad "{1}".</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" no debe tener un valor null ni una cadena vacía en la propiedad "{1}".</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>No se encontró el tipo "{0}". El valor del nombre de tipo debe ser el nombre completo del tipo. Compruebe el nombre de tipo y vuelva a ejecutar el comando.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData debe tener "Members", "TypeConverters", "TypeAdapters" o "StandardMembers".</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Una tabla de tipos compartida no se puede actualizar con más de una entrada.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/VerbDescriptionStrings.es.resx b/src/System.Management.Automation/resources/es/VerbDescriptionStrings.es.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/VerbDescriptionStrings.es.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/es/WildcardPatternStrings.es.resx b/src/System.Management.Automation/resources/es/WildcardPatternStrings.es.resx
new file mode 100644
index 00000000000..179e5428fc4
--- /dev/null
+++ b/src/System.Management.Automation/resources/es/WildcardPatternStrings.es.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>El patrón de caracteres comodín especificado no es válido: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Authenticode.fr.resx b/src/System.Management.Automation/resources/fr/Authenticode.fr.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Authenticode.fr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/AuthorizationManagerBase.fr.resx b/src/System.Management.Automation/resources/fr/AuthorizationManagerBase.fr.resx
new file mode 100644
index 00000000000..c32d25c6a32
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/AuthorizationManagerBase.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Échec de la vérification d’AuthorizationManager.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/AutomationExceptions.fr.resx b/src/System.Management.Automation/resources/fr/AutomationExceptions.fr.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/AutomationExceptions.fr.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CatalogStrings.fr.resx b/src/System.Management.Automation/resources/fr/CatalogStrings.fr.resx
new file mode 100644
index 00000000000..c357630e20b
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CatalogStrings.fr.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Nous ne pouvons pas générer le fichier de définition de catalogue.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Ajout du fichier {0} au catalogue. Le chemin relatif du fichier dans le catalogue est {1}.</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>La validation du fichier {0} depuis le catalogue est ignorée. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Fichier {0} trouvé dans le catalogue avec le hachage de {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Les chemins du catalogue contiennent plusieurs fichiers avec le même chemin relatif {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Fichier {0} trouvé sur le disque avec le hachage de {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>La validation du fichier {0} depuis le chemin est ignorée.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Nous ne pouvons pas acquérir un handle vers un contexte d’administration du catalogue pour un algorithme de hachage donné {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Nous ne pouvons pas créer le hachage du fichier {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Nous ne pouvons pas ouvrir le fichier de catalogue {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>La version de catalogue n’est pas valide. Nous prenons uniquement en charge la version {0} et la version {1} du catalogue.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Nous ne pouvons pas ouvrir le fichier de définition de catalogue.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Plusieurs entrées du membre de fichier {0} ont été trouvées dans le catalogue.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver le nom ou le chemin du fichier pour le membre du catalogue {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver le hash de {0}.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Nous ne pouvons pas lire le fichier {0} pour calculer son hachage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CimInstanceTypeAdapterResources.fr.resx b/src/System.Management.Automation/resources/fr/CimInstanceTypeAdapterResources.fr.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CimInstanceTypeAdapterResources.fr.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CmdletizationCoreResources.fr.resx b/src/System.Management.Automation/resources/fr/CmdletizationCoreResources.fr.resx
new file mode 100644
index 00000000000..04d51f592df
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CmdletizationCoreResources.fr.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Cmdlets de la classe « {0} »</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter le fichier XML de définition de l’applet de commande suivant : {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’attribut ObjectModelWrapper. Le type {0} définit plusieurs jeux de paramètres. Vérifiez que le fichier XML de définition de l’applet de commande spécifie un type valide dans l’attribut ObjectModelWrapper, puis réessayez.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’attribut ObjectModelWrapper. Le type {0} est un type générique ouvert.  Vérifiez que le fichier XML de définition de l’applet de commande spécifie un type valide dans l’attribut ObjectModelWrapper, puis réessayez.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’attribut ObjectModelWrapper. Le type {0} n’est pas dérivé de la classe suivante : {1}.  Vérifiez que le fichier XML de définition de l’applet de commande spécifie un type valide dans l’attribut ObjectModelWrapper, puis réessayez.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’attribut ObjectModelWrapper. Le type {0} définit le paramètre d’applet de commande {1} avec un paramètre d’attribut {2} ignoré.  Vérifiez que le fichier XML de définition de l’applet de commande spécifie un type valide dans l’attribut ObjectModelWrapper, puis réessayez.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Nous ne pouvons pas définir le paramètre {0} pour l’applet de commande {1}.  Le nom du paramètre est déjà défini par la classe {2}.  Modifiez le nom du paramètre dans le fichier XML de définition de l’applet de commande, puis réessayez.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Nous ne pouvons pas définir le paramètre {0} pour l’applet de commande {1}. Le nom du paramètre est déjà défini dans l’élément XML {2}. Modifiez le nom du paramètre dans le fichier XML de définition de l’applet de commande, puis réessayez.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>La valeur de l’attribut EnumName ne se convertit pas en identificateur C# valide : {0}. Vérifiez l’attribut EnumName dans le fichier XML de définition de l’applet de commande, puis réessayez.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’élément &lt;Enum EnumName="{0}" ...&gt;.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>L’ordinateur distant a renvoyé un fichier CDXML non valide. L’adaptateur d’applet de commande suivant n’est pas pris en charge pour l’importation d’un module CDXML depuis un ordinateur distant : {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CommandBaseStrings.fr.resx b/src/System.Management.Automation/resources/fr/CommandBaseStrings.fr.resx
new file mode 100644
index 00000000000..cd7b81a21dd
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CommandBaseStrings.fr.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Voulez-vous continuer cette opération ?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Oui</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Continuez en n’exécutant que l’étape suivante de l’opération.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Oui pour &amp;tout</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Continuez avec toutes les étapes de l’opération.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Non</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Ignorez cette opération et passez à l’opération suivante.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Non pou&amp;r tout</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Ignorez cette opération et toutes les opérations suivantes.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Arrêter cette commande.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Interrompre la commande</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Suspendre</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Suspendez le pipeline actuel et revenez à l’invite de commandes. Tapez « {0} » pour reprendre le pipeline.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Le programme « {0} » s’est terminé avec un code de sortie différent de zéro : {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Exécution de l’opération « {0} » sur la cible « {1} ».</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If : {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Voulez-vous vraiment effectuer cette action ?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Confirmer</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>La commande en cours d’exécution s’est arrêtée, car la variable de préférence « {0} » ou le paramètre commun est défini sur Stop : {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>La commande en cours d’exécution s’est arrêtée, car la variable de préférence « {0} » ou le paramètre commun est défini sur Stop.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>La commande en cours d’exécution s’est arrêtée, car la variable de préférence « {0} » ou le paramètre commun est défini sur la valeur suivante qui est non valide : « {1} ».</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>La commande en cours d’exécution s’est arrêtée, car l’utilisateur(-trice) a sélectionné l’option Stop.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>La commande en cours d’exécution s’est arrêtée, car l’utilisateur(-trice) l’a interrompue.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Les applets de commande dérivées de PSCmdlet ne peuvent pas être appelées directement.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>L’applet de commande « {0} » ne prend pas en charge le paramètre « {1} » dans une session à distance.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Nombre total : {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Coût total estimé : {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Nombre total inconnu</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>commande « {0} »</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>Le {0} est obsolète. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Échec de l’appel Exec avec le code d’erreur {0} pour la ligne de commande : {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>La commande « {0} » était introuvable. La commande spécifiée doit être un exécutable.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Vérification du dot-sourcing des blocs de script</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Le traitement Dot-Source du bloc de script « {0} » échouera en mode de langage contraint, car son mode de langage « {1} » ne correspond pas au mode de langage actuel « {2} ».</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Outil de recherche de commandes</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>La commande « {0} » du module « {1} » n’est pas approuvée et ne sera pas accessible en mode ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ConsoleInfoErrorStrings.fr.resx b/src/System.Management.Automation/resources/fr/ConsoleInfoErrorStrings.fr.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ConsoleInfoErrorStrings.fr.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CoreClrStubResources.fr.resx b/src/System.Management.Automation/resources/fr/CoreClrStubResources.fr.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CoreClrStubResources.fr.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CredUI.fr.resx b/src/System.Management.Automation/resources/fr/CredUI.fr.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CredUI.fr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Credential.fr.resx b/src/System.Management.Automation/resources/fr/Credential.fr.resx
new file mode 100644
index 00000000000..c07850c1673
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Credential.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Nous ne pouvons pas sérialiser les informations d’identification. Si cette commande démarre un flux de travail, les informations d’identification ne peuvent pas être conservées, car le processus dans lequel le flux de travail est démarré n’a pas l’autorisation de sérialiser les informations d’identification.
+
+-- Si le flux de travail a été démarré dans une PSSession sur l’ordinateur local, ajoutez le paramètre EnableNetworkAccess à la commande qui a créé la session.
+-- Si le flux de travail a été démarré dans une PSSession vers un ordinateur distant, ajoutez le paramètre Authentication avec la valeur CredSSP à la commande qui a créé la session. Ou connectez-vous à une configuration de session dont la valeur de la propriété RunAsUser est définie.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>La valeur du nom d’utilisateur n’est pas au bon format.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/CredentialAttributeStrings.fr.resx b/src/System.Management.Automation/resources/fr/CredentialAttributeStrings.fr.resx
new file mode 100644
index 00000000000..f05393d9118
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/CredentialAttributeStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>Requête d’informations d’identification PowerShell</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Entrez vos informations d’identification.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/DebuggerStrings.fr.resx b/src/System.Management.Automation/resources/fr/DebuggerStrings.fr.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/DebuggerStrings.fr.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/DescriptionsStrings.fr.resx b/src/System.Management.Automation/resources/fr/DescriptionsStrings.fr.resx
new file mode 100644
index 00000000000..ebb90920ac6
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/DescriptionsStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} ne peut pas être nul ou vide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/DiscoveryExceptions.fr.resx b/src/System.Management.Automation/resources/fr/DiscoveryExceptions.fr.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/DiscoveryExceptions.fr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/EnumExpressionEvaluatorStrings.fr.resx b/src/System.Management.Automation/resources/fr/EnumExpressionEvaluatorStrings.fr.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/EnumExpressionEvaluatorStrings.fr.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ErrorCategoryStrings.fr.resx b/src/System.Management.Automation/resources/fr/ErrorCategoryStrings.fr.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ErrorCategoryStrings.fr.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ErrorPackage.fr.resx b/src/System.Management.Automation/resources/fr/ErrorPackage.fr.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ErrorPackage.fr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/EtwLoggingStrings.fr.resx b/src/System.Management.Automation/resources/fr/EtwLoggingStrings.fr.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/EtwLoggingStrings.fr.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/EventResource.fr.resx b/src/System.Management.Automation/resources/fr/EventResource.fr.resx
new file mode 100644
index 00000000000..b55ea939fab
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/EventResource.fr.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>Aucun message n’a été trouvé pour l’ID d’événement PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>La tâche planifiée {0} a démarré à {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>La tâche planifiée {0} s’est terminée à {1} avec l’état {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Exception de tâche planifiée {0} :
+ Message : {1}
+ StackTrace : {2}
+ InnerException : {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Initialisation de la fonctionnalité expérimentale : ignorez la fonctionnalité expérimentale « {0} » du fichier de configuration. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Initialisation de la fonctionnalité expérimentale : échec de la lecture du fichier de configuration.
+ Exception :{0}
+ Message : {1}
+ StackTrace : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Plug-in de workflow chargé.
+ 	 EndpointName : {0}
+ 	 Utilisateur(-trice) : {1}
+ 	 HostingMode : {2}
+ 	 Protocole : {3}
+ 	 Configuration :
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Démarrage de l’exécution du workflow.
+ 	 WorkflowId : {0}
+ 	 ManagedNodes : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>État du workflow modifié.
+ 	 WorkflowId : {0}
+ 	 NewState : {1}
+ 	 OldState : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>La fermeture du plug-in de workflow a été demandée.
+ 	 EndpointName : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Le plug-in de workflow a redémarré.
+ 	 EndpointName : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Le flux de travail reprend.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Une limite de quota définie pour le point de terminaison a été dépassée.
+ 	 EndpointName : {0}
+ 	 ConfigName : {1}
+ 	 Get allowedValue : {2}
+ 	 ValueInQuestion : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Le workflow a repris.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Le pool d’instances d’exécution de workflow a été créé.
+ 	 WorkflowId : {0}
+ 	 ManagedNode : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>L’activité a été mise en file d’attente pour son exécution.
+ 	 WorkflowId : {0}
+ 	 ActivityName : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Détails de l’exécution de l’activité.
+ 	 ActivityName : {0}
+ 	 Nom du type d’activité : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Le workflow est importé à partir d’un fichier XAML.
+ 	 WorkflowId : {0}
+ 	 XamlFile : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Le workflow a été importé à partir d’un fichier XAML.
+ 	 WorkflowId : {0}
+ 	 XamlFile : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Le workflow n’a pas pu être importé à partir d’un fichier XAML en raison d’une erreur.
+ 	 WorkflowId : {0}
+ 	 ErrorDescription : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>La validation du flux de travail a démarré.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>La validation du flux de travail a réussi.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Échec de la validation du flux de travail avec une erreur.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Activité de workflow validée.
+ 	 WorkflowId : {0}
+ 	 ActivityDisplayName : {1}
+ 	 Nom du type d’activité : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Nous n’avons pas pu valider l’activité de workflow.
+ 	 WorkflowId : {0}
+ 	 ActivityDisplayName : {1}
+ 	 Nom du type d’activité : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>L’exécution de l’activité a échoué.
+ 	 WorkflowId : {0}
+ 	 ActivityName : {1}
+ 	 FailureDescription : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>La disponibilité du runspace a changé.
+ 	 RunspaceId : {0}
+ 	 Disponibilité : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>L’état de l’instance d’exécution a changé.
+ 	 RunspaceId : {0}
+ 	 NewState : {1}
+ 	 OldState : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Flux de travail chargé pour l’exécution.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Flux de travail déchargé.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>L’exécution du workflow a été annulée.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Abandon de l’exécution du workflow.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Opération de nettoyage du workflow exécutée.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Le workflow conservé a été chargé depuis le disque.
+ 	 WorkflowId : {0}
+ 	 Chemin : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Les données du workflow ont été supprimées du disque.
+ 	 WorkflowId : {0}
+ 	 Chemin : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Démarrage de la tâche de suppression.
+ 	 JobId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>État du travail modifié.
+ 	 JobId : {0}
+ 	 WorkflowId : {1}
+ 	 NewState : {2}
+ 	 OldState : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Erreur de travail.
+ 	 JobId : {0}
+ 	 WorkflowId : {1}
+ 	 ErrorDescription : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Tâche créée pour le workflow (tâche enfant).
+ 	 ParentJobId : {0}
+ 	 ChildJobId : {1}
+ 	 ChildWorkflowId : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Tâche parente créée pour le workflow.
+ 	 JobId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Toutes les tâches requises ont été créées pour l’exécution du workflow.
+ 	 JobId : {0}
+ 	 WorkflowId : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Tâche enfant supprimée pour le workflow.
+ 	 ParentJobId : {0}
+ 	 ChildJobId : {1}
+ 	 WorkflowId : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>Une erreur s’est produite lors de la suppression de la tâche.
+ 	 ParentJobId : {0}
+ 	 ChildJobId : {1}
+ 	 WorkflowId : {2}
+ 	 Erreur : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Chargement du flux de travail pour l’exécution.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>L’exécution du workflow est terminée.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Annulation de l’exécution du workflow.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Abandon de l’exécution du workflow.
+ 	 WorkflowId : {0}
+ 	 Raison : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Déchargement du workflow.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>L’arrêt forcé du flux de travail a démarré.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Arrêt forcé du workflow terminé.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Une erreur s’est produite lors de l’arrêt forcé d’un workflow.
+ 	 WorkflowId : {0}
+ 	 ErrorDescription : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persistance du workflow sur le disque.
+ 	 WorkflowId : {0}
+ 	 Chemin de persistance : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Flux de travail enregistré sur le disque.
+ 	 WorkflowId : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>L’exécution de l’activité est terminée.
+ 	 ActivityName : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Erreur d’exécution de flux de travail.
+ 	 WorkflowId : {0}
+ 	 ErrorDescription : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Un nouveau point de terminaison PowerShell a été inscrit.
+ 	 EndpointName : {0}
+ 	 EndpointType : {1}
+ 	 RegisteredBy : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Endpoint Configuration modifié.
+ 	 EndpointName : {0}
+ 	 ModifiedBy : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Configuration du point de terminaison désinscrite.
+ 	 EndpointName : {0}
+ 	 UnregisteredBy : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Endpoint Configuration désactivé.
+ 	 EndpointName : {0}
+ 	 DisabledBy : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Configuration du point de terminaison activée.
+ 	 EndpointName : {0}
+ 	 Activé par : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>L’instance d’exécution hors processus a démarré.
+ 	 Commande : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>La diffusion d’arguments a été effectuée lors de l’exécution du workflow.
+ 	 Paramètres : {0}
+ 	 Ordinateurs : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Le moteur de workflow a démarré.
+ 	 EndpointName : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Gestionnaire de workflow instancié avec
+ 	 CheckpointPath : {0}
+ 	 ConfigProviderId : {1}
+ 	 Nom d’utilisateur : {2}
+ 	 Chemin : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Nom de l’ordinateur $null ou . résolu en hôte local</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Résolution vers le schéma par défaut http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Le nom de l’interpréteur de commandes distant a été résolu sur PowerShellCore par défaut</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Création du texte Scriptblock ({0} sur {1}) :
+{2}
+
+ID Scriptblock : {3}
+Chemin : {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Appel démarré de l’ID ScriptBlock : {0}
+ID d’instance d’exécution : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Appel terminé de l’ID ScriptBlock : {0}
+ID d’instance d’exécution : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Contexte :
+{0}
+
+Données utilisateur :
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Corrélation des ID d’activité.
+ 	 CurrentActivityId : {0}
+ 	 ParentActivityId : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Nom de classe = {0}
+Nom de la méthode = {1}
+GUID de workflow = {2}
+Message = {3}
+{4}
+Nom de l’activité = {5}
+GUID de l’activité = {6}
+Paramètres = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Création d’un objet Runspace
+ 	 ID d’instance : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Création de l’objet RunspacePool
+ 	 InstanceId : {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Ouverture de RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modification de l’ID d’activité et corrélation</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>L’état de l’instance d’exécution a changé en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Nouvelle tentative de création de session {0} pour le code d’erreur {1} sur l’ID de session {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell a démarré un thread d’écoute IPC sur le processus : {0} dans AppDomain : {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell a fini un thread d’écoute IPC sur le processus : {0} dans AppDomain : {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>Une erreur s’est produite dans le thread d’écoute IPC PowerShell du processus : {0} dans AppDomain : {1}.  Message d’erreur : {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Connexion IPC PowerShell sur le processus : {0} dans AppDomain : {1} pour l’utilisateur(-trice) : {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Déconnexion IPC PowerShell sur le processus : {0} dans AppDomain : {1} pour l’utilisateur(-trice) : {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port résolu en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName résolu en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>Nom de l’ordinateur résolu en {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Le schéma est {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Tester le message analytique</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Les paramètres de connexion sont
+ URI de connexion : {0}
+ URI de ressource : {1}
+ Utilisateur(-trice) : {2}
+ Délai d’expiration d’ouverture : {3}
+ Délai d’expiration d’inactivité : {4}
+ Délai d’expiration d’annulation : {5}
+ AuthenticationMechanism L {6}
+ Empreinte numérique : {7}
+ Nombre maximal de redirections d’URI : {8}
+ Taille maximale des données reçues par commande : {0}0
+ Taille maximale de l’objet reçu : {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modification de l’ID d’activité et corrélation</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Objet reçu avec ID de l’instance d’exécution : {0} ID de commande : {1} Destination : {2} Type de données : {3} Interface cible : {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Une exception non gérée s'est produite dans le domaine d’application.
+Type d’exception : {0}
+Message d’exception : {1}
+$PSItem.Exception.StackTrace : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. WSMan a signalé une erreur avec le code d’erreur : {2}.
+ Message d’erreur : {3}
+ StackTrace : {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Une exception non gérée s'est produite dans le domaine d’application.
+Type d’exception : {0}
+Message d’exception : {1}
+$PSItem.Exception.StackTrace : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. WSMan a signalé une erreur avec le code d’erreur : {2}.
+ Message d’erreur : {3}
+ StackTrace : {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>ID d’instance d’exécution {0}. Établissement d’une connexion à l’aide de WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID d’instance d’exécution {0}. Rappel reçu pour WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>ID d’instance d’exécution : {0}. Fermeture du shell à l’aide de WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID d’instance d’exécution : {0}. Rappel reçu pour WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. Envoi de données d’une taille de {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. Rappel reçu pour WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. Envoi d’une requête Receive à l’aide de WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. Données reçues d’une taille de {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>ID de l’instance d’exécution {0} ID de pipeline {1}. Établissement d’une connexion de commande à l’aide de WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID de l’instance d’exécution {0} ID de pipeline {1}. Rappel reçu pour la connexion de commande</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>ID de l’instance d’exécution :{0} ID de pipeline {1}. Fermeture du transport pour la commande</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID de l’instance d’exécution :{0} ID de pipeline {1}. Rappel reçu pour la fermeture de commande</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>ID de l’instance d’exécution :{0} ID de pipeline {1}. Envoi d’un signal avec le code {2} à l’aide de WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>ID de l’instance d’exécution :{0} ID de pipeline {1}. Rappel reçu pour WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>ID d’instance d’exécution : {0}. La connexion est redirigée vers l’URI : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>ID de l’instance d’exécution : {0} ID du Pipeline : {1}. Le serveur envoie des données d’une taille de {2} au client. Type de données : {3} Interface cible : {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Requête {0}. Création d’une session distante côté serveur. Nom d’utilisateur : {1} ID de shell personnalisé : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Signalement du contexte pour la requête : {0} Contexte signalé : {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Rapport de fin d’opération pour la requête : {0}
+ Code d’erreur : {1}
+ Message d’erreur : {2}
+ StackTrace : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Contexte de l’interpréteur de commandes {0}. ID de requête : {1}. Création d’une session commune pour exécuter une commande.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Contexte d’interpréteur de commandes {0} Contexte de commande {1} ID de requête {2}. Arrêt de la commande.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Contexte d’interpréteur de commandes {0} Contexte de commande {1} ID de requête {2}. Données reçues du client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Contexte d’interpréteur de commandes {0} Contexte de commande {1} ID de requête {2}. Le client a envoyé une requête de réception pour que le serveur puisse envoyer des données.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Contexte du shell {0} Contexte de commande {1} IsReceiveOperation {2}. Requête d’opération de fermeture reçue.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Chargement de l’assembly {0} pour l’interpréteur de commandes personnalisé avec l’ID d’environnement {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Chargement du type {0} pour l’interpréteur de commandes personnalisé avec l’ID d’environnement {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Fragment de communication à distance reçu.
+ 	 ID d’objet : {0}
+ 	 ID de fragment : {1}
+ 	 Indicateur de début : {2}
+ 	 Indicateur de fin : {3}
+ 	 Longueur de la charge utile : {4}
+ 	 Données de charge utile : {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Fragment de communication à distance envoyé.
+ 	 ID d’objet : {0}
+ 	 ID de fragment : {1}
+ 	 Indicateur de début : {2}
+ 	 Indicateur de fin : {3}
+ 	 Longueur de la charge utile : {4}
+ 	 Données de charge utile : {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Arrêt du service winrm.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Un objet a été restauré avec succès.
+ 	 Nom du type désérialisé : {0}
+ 	 Type restauré par conversion vers : {1}
+ 	 L’objet restauré est de type : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Échec de la restauration d’un objet.
+ 	 Nom du type désérialisé : {0}
+ 	 Type restauré par conversion vers : {1}
+ 	 Exception de conversion de type : {2}
+ 	 Exception interne de type : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>La profondeur de sérialisation a été remplacée.
+ 	 Nom du type sérialisé : {0}
+ 	 Profondeur d’origine : {1}
+ 	 Profondeur remplacée : {2}
+ 	 Profondeur actuelle sous le niveau supérieur : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Le mode de sérialisation a été remplacé.
+ 	 Nom du type sérialisé : {0}
+ 	 Mode remplacé : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>La sérialisation d’une propriété de script a été ignorée, car il n’y a aucune instance d’exécution à utiliser pour évaluer la propriété.
+ 	 Nom de la propriété : {0}
+ 	 Nom du type du propriétaire de la propriété : {1}
+ 	 Script du getter : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>La sérialisation d’une propriété a été ignorée, car le getter de la propriété a échoué.
+ 	 Nom de la propriété : {0}
+ 	 Nom du type du propriétaire de la propriété : {1}
+ 	 Exception renvoyée par le getter de la propriété : {2}
+ 	 Exception interne renvoyée par le getter de la propriété : {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>La sérialisation d’un objet énumérable peut ne pas être complète, car l’objet en cours d’énumération a levé une exception.
+ 	 Type d’objet en cours d’énumération : {0}
+ 	 Exception : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>La sérialisation a appelé la méthode ToString de l’objet, qui a échoué.
+ 	 Type d'objet : {0}
+ 	 Exception : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>La profondeur maximale sous le niveau supérieur a été atteinte, ce qui force les objets à être sérialisés sous forme de chaînes.
+ 	 Type d’objet à la profondeur maximale : {0}
+ 	 Nom de la propriété à la profondeur maximale : {1}
+ 	 Profondeur : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>Une exception XmlException a été levée par le désérialiseur (ce qui indique probablement un format clixml incorrect).
+ 	 Numéro de ligne : {0} et position de ligne : {1}
+ 	 Exception : {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>La sérialisation des propriétés spécifiées a échoué, car l’une des propriétés spécifiées était manquante.
+ 	 Type d'objet : {0}
+ 	 Nom de la propriété : {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>La console PowerShell est en cours de démarrage</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>La console PowerShell est prête à recevoir une entrée utilisateur</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Suivi de ErrorRecord :
+ Message : {0}
+ CategoryInfo.Category : {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId : {4}
+ Détails de l’exception : 
+ Message : {5}
+ Trace des appels de procédure : {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exception :
+ Message : {0}
+ StackTrace : {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Suivi de PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Tâche de suivi :
+ ID : {0}
+ InstanceId : {1}
+ Nom : {2}
+ Emplacement : {3}
+ État : {4}
+ Commande : {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Informations de trace : 
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Informations de trace : 
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Début de l’appel de la fonction de workflow. Guid de suivi {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Fin de l’appel de la fonction de workflow. Guid de suivi {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Création d’une nouvelle tâche dans ImportWorkflowCommand::StartWorkflowApplication. Guid de suivi {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>END Création d’une nouvelle tâche dans ImportWorkflowCommand::StartWorkflowApplication. Guid de suivi {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>END Création d’une nouvelle tâche dans ImportWorkflowCommand::StartWorkflowApplication. Guid de suivi {0} : Guid de ContainerParentJob {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>DÉBUT Logique de tâche ContainerParentJob {0}Guid</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END Logique de tâche ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN Exécution du flux de travail ContainerParentJob {0}Guid</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>FIN Exécution du flux de travail ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob avec Guid {0} ajouté à ContainerParentJob avec Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob avec le Guid {0} associé au ContainerParentJob distant avec le Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Exécution de ContainerParentJob avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>FIN Exécution de ContainerParentJob avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>BEGIN Exécution de la tâche proxy avec le GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>FIN Exécution de la tâche proxy avec le GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>BEGIN Gestionnaire d’événements de changement d’état pour la tâche proxy avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>END Gestionnaire d’événements de changement d’état pour la tâche proxy avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>BEGIN Gestionnaire d’événements de changement d’état pour la tâche proxy enfant avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>END Gestionnaire d’événements de changement d’état pour la tâche proxy enfant avec Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>BEGIN du garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>Démarrage du garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Le magasin de persistance a atteint sa taille maximale spécifiée</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE a commencé à exécuter le fichier de script {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE a commencé à exécuter un script sélectionné par l’utilisateur à partir du fichier {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE arrête la commande en cours.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE a poursuivi le débogueur.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE arrête le débogueur.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE effectue un débogage pas à pas entrant.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE effectue un pas à pas détaillé sur le débogage.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE se retire du débogage pas à pas.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE active tous les points d’arrêt.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE désactive tous les points d’arrêt.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE supprime tous les points d’arrêt.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE définit le point d’arrêt à la ligne # : {0} du fichier {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE supprime le point d’arrêt à la ligne n° {0} du fichier {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE active le point d’arrêt à la ligne n° {0} du fichier {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE désactive le point d’arrêt à la ligne n° {0} du fichier {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE a atteint un point d’arrêt à la ligne n° {0} du fichier {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/EventingResources.fr.resx b/src/System.Management.Automation/resources/fr/EventingResources.fr.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/EventingResources.fr.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ExperimentalFeatureStrings.fr.resx b/src/System.Management.Automation/resources/fr/ExperimentalFeatureStrings.fr.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ExperimentalFeatureStrings.fr.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ExtendedTypeSystem.fr.resx b/src/System.Management.Automation/resources/fr/ExtendedTypeSystem.fr.resx
new file mode 100644
index 00000000000..8ac60ce4eca
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ExtendedTypeSystem.fr.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>La propriété « {0} » est introuvable.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} est un chemin non valide.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/FileSystemProviderStrings.fr.resx b/src/System.Management.Automation/resources/fr/FileSystemProviderStrings.fr.resx
new file mode 100644
index 00000000000..d08426d6452
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/FileSystemProviderStrings.fr.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Copie de {0} dans {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>De {0} à {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/FormatAndOutXmlLoadingStrings.fr.resx b/src/System.Management.Automation/resources/fr/FormatAndOutXmlLoadingStrings.fr.resx
new file mode 100644
index 00000000000..0f8b95053ac
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/FormatAndOutXmlLoadingStrings.fr.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The XML element {2} does not allow attributes.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Node {2} cannot have child objects.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is not valid.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: There must be at least one default {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: There cannot be more than one default {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The control name cannot be null or empty.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Out Of Band views can only have CustomControl or ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An Out Of Band view cannot have GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The view cannot be loaded.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: "{2}" is not a valid alignment value.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A positive integer is expected.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The column header definition is not valid; all headers are discarded.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The row item count = {2} on alternative set #{3} does not match default row item count = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The header item count = {2} does not match default row item count = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: At least one list view item must be specified.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The property entry is not valid.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The definition list is missing.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A Boolean value is expected.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A non-negative integer is expected.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An integer is expected.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The inner text value is missing.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The custom control token list cannot be empty.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} failed to load.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} cannot be specified without an expression.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} cannot be specified with an expression.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A format string is missing.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Script block text is missing.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A property is missing.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Script block "{2}" is not valid.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The string {2} from resource {3} in assembly {4} is not found.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The resource {2} in assembly {3} is not found.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The assembly {2} is not found.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The node must be an XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An expression is expected.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have control or Label without an expression.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have control and Label at the same time.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have SelectionSetName and TypeName at the same time.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: No type or condition is specified for applying the view.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The {2} value is not valid.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A duplicate node exists.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} and {3} are mutually exclusive.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2}, {3} and {4} are mutually exclusive.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an unknown node.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an unknown attribute.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is a missing attribute.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Node {2} is missing.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A node is missing from {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an empty node.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an empty attribute.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Error in file {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Too many errors in file {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Errors occurred while loading the format data file: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Global Assembly Cache) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>The path {0} is not fully qualified. Specify a fully qualified format file path.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>The FormatTable cannot be updated because the FormatTable might have been created outside of the runspace.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Errors occurred while loading the FormatTable. View the contents of the Errors property to get detailed error messages.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Error in formatting data "{0}": {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: The header item count = {2} does not match the default row item count = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: Formatting data "{2}" is not valid.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: Script block "{2}" is not valid.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: {2} failed to load.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: A TableControl should contain only one {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: There must be at least one default {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: At least one list view item must be specified.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: There cannot be more than one default {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Too many errors in the formatting data for type "{0}".</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>A shared format table cannot be updated with more than one entry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/FormatAndOut_MshParameter.fr.resx b/src/System.Management.Automation/resources/fr/FormatAndOut_MshParameter.fr.resx
new file mode 100644
index 00000000000..f2e8771fc3e
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/FormatAndOut_MshParameter.fr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Impossible de convertir {0} en l’un des types suivants {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>La valeur d’un paramètre était null; l’un des types suivants était attendu : {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>La clé dupliquée « {0} » est en conflit avec « {1} ».</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>La clé « {0} » a un type, {1}, qui n’est pas valide; les types attendus sont {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>La clé « {0} » a un type, {1}, qui n’est pas valide; le type attendu est {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>La clé {0} est ambiguë; {1} et {2} entrent en conflit.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>La valeur d’une clé ne peut pas être null.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Le type de clé « {0} » n’est pas valide. La clé doit être une chaîne.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>La clé {0} n’a pas de valeur.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Une entrée obligatoire pour {0} est manquante.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>La clé API {0} n’est pas valide.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>La valeur « {0} » pour la clé « {1} » n’est pas valide; les valeurs valides sont {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>La valeur « {0} » pour la clé « {1} » doit être supérieure à 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>Nous ne pouvons pas avoir une chaîne de mise en forme vide pour la clé « {0} ».</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>La clé « {0} » ne peut pas avoir une valeur de chaîne vide.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>La valeur de la chaîne ne peut pas être vide.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>La clé « {0} » ne peut pas contenir de caractères génériques dans la valeur « {1} ».</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>Les caractères génériques ne sont pas autorisés dans « {0} ».</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>La valeur EnumerableExpansion n’est pas valide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/FormatAndOut_format_xxx.fr.resx b/src/System.Management.Automation/resources/fr/FormatAndOut_format_xxx.fr.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/FormatAndOut_format_xxx.fr.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/FormatAndOut_out_xxx.fr.resx b/src/System.Management.Automation/resources/fr/FormatAndOut_out_xxx.fr.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/FormatAndOut_out_xxx.fr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/GetErrorText.fr.resx b/src/System.Management.Automation/resources/fr/GetErrorText.fr.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/GetErrorText.fr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/HelpDisplayStrings.fr.resx b/src/System.Management.Automation/resources/fr/HelpDisplayStrings.fr.resx
new file mode 100644
index 00000000000..47ea5adf5c3
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/HelpDisplayStrings.fr.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NOM</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Exemple</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Répondre</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Aucun</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/HelpErrors.fr.resx b/src/System.Management.Automation/resources/fr/HelpErrors.fr.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/HelpErrors.fr.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/HistoryStrings.fr.resx b/src/System.Management.Automation/resources/fr/HistoryStrings.fr.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/HistoryStrings.fr.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/HostInterfaceExceptionsStrings.fr.resx b/src/System.Management.Automation/resources/fr/HostInterfaceExceptionsStrings.fr.resx
new file mode 100644
index 00000000000..8bc9ddb4a20
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/HostInterfaceExceptionsStrings.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>A command that prompts the user failed because the host program or the command type does not support user interaction. Try a host program that supports user interaction, such as the PowerShell Console, and remove prompt-related commands from command types that do not support user interaction.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>A command that prompts the user failed because the host program or the command type does not support user interaction. The host was attempting to request confirmation with the following message: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>The method cannot be invoked because the pool has been closed or has failed.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/InternalCommandStrings.fr.resx b/src/System.Management.Automation/resources/fr/InternalCommandStrings.fr.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/InternalCommandStrings.fr.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/InternalHostStrings.fr.resx b/src/System.Management.Automation/resources/fr/InternalHostStrings.fr.resx
new file mode 100644
index 00000000000..556a1fae61b
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/InternalHostStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt n’a pas été appelé autant de fois que ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/InternalHostUserInterfaceStrings.fr.resx b/src/System.Management.Automation/resources/fr/InternalHostUserInterfaceStrings.fr.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/InternalHostUserInterfaceStrings.fr.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Logging.fr.resx b/src/System.Management.Automation/resources/fr/Logging.fr.resx
new file mode 100644
index 00000000000..5d792b76318
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Logging.fr.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravité =[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo : 
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravité =[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravité =[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>INCONNU</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>La fonctionnalité expérimentale du moteur « {0} » déclarée dans le fichier de configuration n’est pas enregistrée dans la version actuelle de PowerShell.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>La fonctionnalité expérimentale « {0} » déclarée dans le fichier de configuration n’est pas valide.
+Le nom d’une fonctionnalité expérimentale doit suivre la convention ci-dessous : 
+    Nom de la fonctionnalité du moteur : « PS[FeatureName] »
+    Nom de la fonctionnalité du module : « [ModuleName].[FeatureName] »</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Metadata.fr.resx b/src/System.Management.Automation/resources/fr/Metadata.fr.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Metadata.fr.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/MiniShellErrors.fr.resx b/src/System.Management.Automation/resources/fr/MiniShellErrors.fr.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/MiniShellErrors.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Modules.fr.resx b/src/System.Management.Automation/resources/fr/Modules.fr.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Modules.fr.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/MshHostRawUserInterfaceStrings.fr.resx b/src/System.Management.Automation/resources/fr/MshHostRawUserInterfaceStrings.fr.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/MshHostRawUserInterfaceStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/MshSignature.fr.resx b/src/System.Management.Automation/resources/fr/MshSignature.fr.resx
new file mode 100644
index 00000000000..a835c019157
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/MshSignature.fr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Signature vérifiée.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Le fichier {0} n’est pas signé numériquement. Vous ne pouvez pas exécuter ce script sur le système actuel. Pour plus d’informations sur l’exécution des scripts et la définition de la stratégie d’exécution, consultez about_Execution_Policies à l’adresse https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Le contenu du fichier {0} a peut-être été modifié par un utilisateur ou un processus non autorisé, car le hachage du fichier ne correspond pas au hachage stocké dans la signature numérique. Le script ne peut pas s’exécuter sur le système spécifié. Pour plus d’informations, exécutez Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Le fichier {0} est signé, mais le signataire n’est pas approuvé sur ce système.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Nous ne pouvons pas signer le fichier, car le système ne prend pas en charge les opérations de signature sur {0} fichiers.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Nous ne pouvons pas signer le fichier, car le système ne prend pas en charge les opérations de signature sur les fichiers qui n’ont pas d’extension de nom de fichier.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>La signature ne peut pas être vérifiée, car elle est incompatible avec le système actuel.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>La signature ne peut pas être vérifiée, car elle est incompatible avec le système actuel. L’algorithme de hachage n’est pas valide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/MshSnapInCmdletResources.fr.resx b/src/System.Management.Automation/resources/fr/MshSnapInCmdletResources.fr.resx
new file mode 100644
index 00000000000..db1dce9a7c9
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/MshSnapInCmdletResources.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>L’opération ne peut pas être effectuée. L’applet de commande spécifiée n’est pas prise en charge dans un interpréteur de commandes personnalisé.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Aucun composant logiciel enfichable PowerShell correspondant au modèle « {0} » n’a été trouvé. Vérifiez le modèle, puis réessayez la commande.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Le format du nom du composant logiciel enfichable spécifié n’était pas valide.  Les noms des composants logiciels enfichables PowerShell ne peuvent contenir que des caractères alphanumériques, des tirets, des traits de soulignement et des points. Corrigez le nom, puis retentez l'opération.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Nous ne pouvons pas ajouter le composant logiciel enfichable PowerShell {0}, car il s’agit d’un module PowerShell système. Utilisez Import-Module pour charger le module.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/MshSnapinInfo.fr.resx b/src/System.Management.Automation/resources/fr/MshSnapinInfo.fr.resx
new file mode 100644
index 00000000000..9adf5d87b7c
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/MshSnapinInfo.fr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas accéder aux informations du Registre de PowerShell.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas accéder aux informations du Registre du moteur PowerShell.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas accéder aux informations de PublicKeyToken.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>La version {0} de PowerShell n’est pas disponible sur cet ordinateur.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Le composant logiciel enfichable PowerShell « {0} » n’est pas installé sur cet ordinateur.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>La valeur obligatoire {0} n’est pas spécifiée pour la clé de Registre {1}.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>La valeur obligatoire {0} n’est pas au format correct pour la clé de Registre {1}.  Le format attendu est « chaîne ».</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>La valeur obligatoire {0} n’est pas au format correct pour la clé de Registre {1}.  Le format attendu est « multistring ».</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver les informations requises dans le Registre ou certains fichiers de clé sont manquants.  Nous ne pouvons pas charger certaines applets de commande.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Aucun composant logiciel enfichable n’a été inscrit pour la version {0}de PowerShell.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Nous ne pouvons pas extraire la ressource de chaîne car le lecteur a été supprimé.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>La valeur de version {0} n’est pas spécifiée ou est incorrecte pour la clé de Registre {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Aucun attribut [PSVersion] n’a été trouvé pour le type PowerShell {0}. Ajoutez un attribut PSVersion au type à l’aide de [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/NativeCP.fr.resx b/src/System.Management.Automation/resources/fr/NativeCP.fr.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/NativeCP.fr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PSCommandStrings.fr.resx b/src/System.Management.Automation/resources/fr/PSCommandStrings.fr.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PSCommandStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PSConfigurationStrings.fr.resx b/src/System.Management.Automation/resources/fr/PSConfigurationStrings.fr.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PSConfigurationStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PSDataBufferStrings.fr.resx b/src/System.Management.Automation/resources/fr/PSDataBufferStrings.fr.resx
new file mode 100644
index 00000000000..281199e7aff
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PSDataBufferStrings.fr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>L’index spécifié est inférieur à zéro ou supérieur au nombre d’éléments dans le tampon. L’index doit se trouver dans la plage {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Nous ne pouvons pas convertir une référence nulle en type valeur.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Nous ne pouvons pas convertir la valeur du type {0} en type {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Nous ne pouvons pas ajouter de nouveaux objets à un magasin fermé. Vérifiez que le tampon est ouvert pour que les opérations d’ajout et d’insertion réussissent.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>La propriété SerializeInput ne peut être définie que pour le type PSObject de PSDataCollection. Définissez la propriété SerializeInput sur false, ou remplacez le type de collection par PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PSListModifierStrings.fr.resx b/src/System.Management.Automation/resources/fr/PSListModifierStrings.fr.resx
new file mode 100644
index 00000000000..614c76a6386
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PSListModifierStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Le modificateur de liste inconnu suivant a été détecté : « {0} ». Les modificateurs de liste valides sont Add, Remove et Replace.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas appliquer la mise à jour, car l’objet n’est pas un type de collection pris en charge.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PSStyleStrings.fr.resx b/src/System.Management.Automation/resources/fr/PSStyleStrings.fr.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PSStyleStrings.fr.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ParameterBinderStrings.fr.resx b/src/System.Management.Automation/resources/fr/ParameterBinderStrings.fr.resx
new file mode 100644
index 00000000000..8426323ccfa
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ParameterBinderStrings.fr.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver un paramètre qui correspond au nom de paramètre « {1} ».</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver un paramètre positionnel qui accepte l’argument « {1} ».</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Argument manquant pour le paramètre « {1} ». Indiquez un paramètre de type « {2} », puis réessayez.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter le paramètre, car le nom du paramètre « {1} » est ambigu. Correspondances possibles :{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Nous ne pouvons pas convertir « {6} » en type « {2} », requis par le paramètre « {1} ». {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Nous ne pouvons pas lier le paramètre « {1} ». {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Nous ne pouvons pas lier les paramètres positionnels « {1} ».</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Nous ne pouvons pas lier les paramètres positionnels, car aucun nom n’a été fourni.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Impossible de résoudre le jeu de paramètres à l'aide des paramètres nommés indiqués. Un ou plusieurs paramètres fournis ne peuvent pas être utilisés ensemble ou un nombre insuffisant de paramètres a été fourni.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter la commande, car un ou plusieurs paramètres obligatoires sont manquants :{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Le paramètre « {1} » ne peut pas être spécifié dans le jeu de paramètres « {6} ».</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Nous ne pouvons pas lier le paramètre, car le paramètre « {1} » est spécifié plusieurs fois. Pour fournir plusieurs valeurs aux paramètres qui acceptent plusieurs valeurs, utilisez la syntaxe de tableau. Par exemple, « -parameter value1,value2,value3 ».</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Nous ne pouvons pas évaluer le paramètre « {1} », car son argument est spécifié sous forme de bloc de script et qu’il n’y a pas d’entrée. Un bloc de script ne peut pas être évalué sans entrée.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>La saisie dans le bloc de script pour le paramètre « {1} » a échoué. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Nous ne pouvons pas évaluer le paramètre « {1} », car l’entrée de son argument n’a produit aucune sortie.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>L’objet d’entrée ne peut être lié à aucun paramètre de la commande, soit parce que la commande n’accepte pas d’entrée de pipeline, soit parce que l’entrée et ses propriétés ne correspondent à aucun des paramètres qui acceptent l’entrée de Pipeline.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>L’objet d’entrée ne peut pas être lié, car il ne contenait pas les informations nécessaires pour lier tous les paramètres obligatoires : {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’entrée de Pipeline, car la valeur par défaut du paramètre « {1} » ne peut pas être récupérée. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Nous ne pouvons pas récupérer les paramètres dynamiques pour l’applet de commande. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Fournissez des valeurs pour les paramètres suivants :</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>L’applet de commande {0} à la position du pipeline de commande {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter la transformation d’argument sur le paramètre « {1} ». {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Impossible de valider l’argument sur le paramètre « {1} ». {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Nous ne pouvons pas lier le paramètre « {1} » à la cible. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’argument au paramètre « {1} », car il s’agit d’une valeur nulle.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’argument au paramètre « {1} », car il s’agit d’une chaîne vide.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’argument au paramètre « {1} », car il s’agit d’une collection vide.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’argument au paramètre « {1} », car il s’agit d’un tableau vide.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter la commande. Le paramètre « {0} » est défini plusieurs fois.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Impossible de lier l’applet de commande {0}, car le paramètre « {1} » est de type « {2} » et la méthode Add() ne peut pas être identifiée, ou plusieurs méthodes Add() existent. {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’applet de commande {0}, car le paramètre défini à l’exécution « {1} » a été ajouté au RuntimeDefinedParameterDictionary avec la clé « {6} ». La clé doit être identique à RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Nous ne pouvons pas lier l’argument au paramètre « {1} », car les PSTypeNames de l’argument ne correspondent pas au PSTypeName requis par le paramètre : {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>Plusieurs valeurs par défaut différentes sont définies dans $PSDefaultParameterValues pour le paramètre correspondant au nom ou alias suivant : {0}. Ces valeurs par défaut ont été ignorées.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Le nom ou alias suivant défini dans $PSDefaultParameterValues pour cette applet de commande correspond à plusieurs paramètres : {0}. La valeur par défaut a été ignorée.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Cette erreur peut être due à l’application de la liaison de paramètres par défaut. Vous pouvez désactiver cette liaison dans $PSDefaultParameterValues en définissant $PSDefaultParameterValues["Disabled"] sur $true, puis réessayer. Les paramètres par défaut suivants ont été liés avec succès pour cette applet de commande lorsque l’erreur s’est produite :{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Cet échec peut être dû à l’application de la liaison de paramètres par défaut. Vous pouvez désactiver cette liaison dans $PSDefaultParameterValues en définissant $PSDefaultParameterValues["Disabled"] sur $true, puis réessayer. Le paramètre par défaut suivant a été lié avec succès pour cette applet de commande lorsque l’erreur s’est produite :{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>La liaison de la valeur par défaut « {0} » au paramètre « {1} » a échoué : {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>Le format de la clé « {0} » n’est pas valide. Pour plus d’informations sur le format correct, consultez about_Parameters_Default_Values à l’adresse https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Les clés « {0} » n’ont pas de format valide. Pour plus d’informations sur le format correct, consultez about_Parameters_Default_Values à l’adresse https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Le paramètre « {0} » est obsolète. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>La clé « {0} » de type « {1} » n’est pas une valeur de chaîne. DefaultParameterDictionary n’accepte que des clés de type chaîne.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>La clé « {0} » a déjà été ajoutée au dictionnaire.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Appel de méthode ou de propriété non autorisé</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>L’appel d’une méthode ou d’une propriété « {0} » sur le type « {1} » n’est pas autorisé en mode de langage contraint pour les scripts non approuvés.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Création de type non autorisée</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>La création du type « {0} » n’est pas autorisée lors de la liaison de paramètres en mode de langage contraint pour les scripts non approuvés.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ParserStrings.fr.resx b/src/System.Management.Automation/resources/fr/ParserStrings.fr.resx
new file mode 100644
index 00000000000..f4e242eca9a
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ParserStrings.fr.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Impossible de charger l'assembly '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PathUtilsStrings.fr.resx b/src/System.Management.Automation/resources/fr/PathUtilsStrings.fr.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PathUtilsStrings.fr.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PipelineStrings.fr.resx b/src/System.Management.Automation/resources/fr/PipelineStrings.fr.resx
new file mode 100644
index 00000000000..5c6cadb0b25
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PipelineStrings.fr.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Cannot process the cmdlet instance because the cmdlet instance is in use by another pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Cannot perform the operation because the pipeline is started. Stop the pipeline and try the operation again.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Cannot continue to run the cmdlet because running cmdlets has been prevented by the Stop policy.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Cannot run the pipeline because the first cmdlet in the pipeline is trying to read input from the results of a preceding cmdlet. Either modify the first cmdlet, remove the first cmdlet, or add to the pipeline the cmdlet whose output is required by the first cmdlet, and then try running the pipeline again.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Cannot process the cmdlet number. The ReadFromCommand function must specify the Id of a cmdlet that has already been added to the pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Cannot read the output of the ReadFromCommand and ReadErrorQueue functions because another cmdlet is already reading that output. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Cannot run the pipeline because there are no commands. Add at least one command to the pipeline, and then run it again.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Cannot complete the pipeline operation because it has not yet been started. You must call the Begin() method before calling End() on a steppable pipeline.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called from outside the overrides of the BeginProcessing, ProcessRecord, and EndProcessing methods, and they can only be called from within the same thread. Validate that the cmdlet makes these calls correctly, or contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>A cmdlet threw an exception after calling ThrowTerminatingError.
+The first exception was "{0}" with stack trace "{1}".
+The second exception was "{2}" with stack trace "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called after the pipeline has been closed. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>An error occurred while creating the pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>This pipeline does not support disconnect-connect semantics.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Cannot connect this pipeline because it is not in the disconnected state.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>The runspace object has a null remote command associated with it.  A disconnected RemotePipeline object cannot be created because there is no remote command specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/PowerShellStrings.fr.resx b/src/System.Management.Automation/resources/fr/PowerShellStrings.fr.resx
new file mode 100644
index 00000000000..7474d75f0a8
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/PowerShellStrings.fr.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>L’état de l’instance PowerShell actuelle n’est pas valide pour cette opération.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car une commande a déjà été lancée. Attendez que la commande ait fini de s’arrêter, ou arrêtez-la, puis réessayez.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Aucune commande n’est pas spécifiée.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>L’état de l’instance PowerShell n’est pas correct pour créer une instance PowerShell imbriquée. Les instances PowerShell imbriquées ne doivent être créées que dans une instance PowerShell en cours d’exécution.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car les instances d’exécution ne sont pas dans l’état « {0} ». L’état actuel de l’instance d’exécution est « {1} ».</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Les instances PowerShell imbriquées ne peuvent pas être appelées de manière asynchrone. Utilisez la méthode Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>L’objet {0} n’a pas été créé en appelant {1} sur cette instance PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Lorsque l’instance d’exécution est configurée pour réutiliser un thread, l’état de cloisonnement dans les paramètres d’invocation doit correspondre à celui de l’instance d’exécution.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Lorsque l’instance d’exécution est configurée pour utiliser le thread actuel, l’état de cloisonnement dans les paramètres d’appel doit correspondre à celui du thread actuel.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Une commande est requise pour ajouter un paramètre. Vous devez ajouter une commande à l’instance PowerShell avant d’ajouter un paramètre.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Les clés du dictionnaire doivent être des chaînes.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Aucune instance d’exécution n’est disponible pour exécuter des commandes dans ce thread. Vous pouvez en fournir une dans la propriété DefaultRunspace du type System.Management.Automation.Runspaces.Runspace. La commande que vous avez tenté d’appeler était : {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Nous ne pouvons pas connecter cet objet PowerShell, car il n’est pas associé à une instance d’exécution distante ou à un pool d’instances d’exécution.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>La commande en cours d’exécution a été déconnectée, mais elle s’exécute toujours sur le serveur distant.  Reconnectez-vous pour obtenir l’état de l’opération de la commande et les données de sortie.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car la session PowerShell actuelle est à l’état Déconnecté.  Connectez cette session PowerShell, puis attendez que la commande se termine ou arrêtez-la.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car la session PowerShell actuelle est à l’état Déconnecté.  Connectez cette session PowerShell, puis réessayez.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>La tentative de connexion à la commande distante a échoué.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>L’opération ne peut pas être effectuée, car une commande est en cours d’arrêt. Attendez que la commande ait fini de s’arrêter, puis réessayez.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Aucune instance d’exécution n’est disponible pour exécuter des commandes dans ce thread. Vous pouvez en fournir une dans la propriété DefaultRunspace du type System.Management.Automation.Runspaces.Runspace. L’instance PowerShell actuelle ne contient aucune commande à appeler.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Nous ne pouvons pas créer un objet PowerShell qui utilise l’instance d’exécution actuelle, car aucune instance d’exécution n’est disponible.  L’instance d’exécution actuelle est peut-être en cours de démarrage, par exemple lorsqu’elle est créée avec un état de session initial.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ProgressRecordStrings.fr.resx b/src/System.Management.Automation/resources/fr/ProgressRecordStrings.fr.resx
new file mode 100644
index 00000000000..2408a12bd3c
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ProgressRecordStrings.fr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’argument, car {0} ne peut pas être négatif.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Nous ne pouvons pas traiter l’argument, car la valeur de {0} ne peut pas être null ou vide.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Nous ne pouvons pas définir le pourcentage, car {0} ne peut pas être supérieur à 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId ne peut pas être identique à ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ProviderBaseSecurity.fr.resx b/src/System.Management.Automation/resources/fr/ProviderBaseSecurity.fr.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ProviderBaseSecurity.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/ProxyCommandStrings.fr.resx b/src/System.Management.Automation/resources/fr/ProxyCommandStrings.fr.resx
new file mode 100644
index 00000000000..397c3cc9f6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/ProxyCommandStrings.fr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>Le paramètre « help » n’est pas reconnu comme un objet HelpInfo valide créé par la commande « get-help ».</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>Nous ne pouvons pas générer la commande proxy, car CommandMetadata est sans nom.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/RegistryProviderStrings.fr.resx b/src/System.Management.Automation/resources/fr/RegistryProviderStrings.fr.resx
new file mode 100644
index 00000000000..13a2d5cd069
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/RegistryProviderStrings.fr.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Définir l’élément</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Valeur : {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Effacer l’élément</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Élément : {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Nouvel élément</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Élément : {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Supprimer la clé</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Copier la clé</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Destination : {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Renommer un élément</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} NewName : {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Déplacer l'élément</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Destination : {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Définir la propriété</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Propriété : {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Effacer la propriété</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Propriété : {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Nouvelle propriété</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Propriété : {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Supprimer la propriété</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} Propriété : {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Renommer la propriété.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Article : {0} Propriété source : {1} Propriété de destination : {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Copier la propriété</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} SourceProperty : {1} DestinationItem : {2} DestinationProperty : {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Déplacer la propriété</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Élément : {0} SourceProperty : {1} DestinationItem : {2} DestinationProperty : {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>L’opération n’a pas été traitée. L’emplacement fourni n’autorise pas cette opération.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>L’opération n’est pas autorisée à l’emplacement source.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>L’opération n’est pas autorisée à l’emplacement de destination.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Les paramètres de configuration de l’ordinateur local</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Paramètres logiciels de l’utilisateur(-trice) actuel(le)</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Une clé existe déjà dans ce chemin d’accès.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>L’opération ne peut pas être effectuée, car le chemin de destination dépend du chemin source.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>La propriété existe déjà.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>La propriété « {0} » n’existe pas pour le type « {1} ».</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>La clé de Registre à l’emplacement spécifié n’existe pas.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Nous n’avons pas pu lier le paramètre « Type ». Nous n’avons pas pu convertir « {0} » en « {1} ». Les valeurs d’énumération possibles sont « String, ExpandString, Binary, DWord, MultiString, QWord, Unknown ».</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>La clé {0} a été créée, mais une valeur par défaut n’a pas pu être définie.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Nous ne pouvons pas créer un lecteur avec la racine spécifiée. Le chemin racine n’existe pas.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Nous ne pouvons pas renommer l’élément, car un élément portant ce nom existe déjà dans le même conteneur.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Le nom de la clé de Registre doit commencer par un nom de clé racine valide.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>L’argument de sous-clé n’est pas valide.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Nous ne pouvons pas supprimer l’arborescence de sous-clés, car la sous-clé n’existe pas.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Aucune valeur n’existe avec ce nom.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>La valeur d’énumération {0} n’est pas valide.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Une valeur d’argument de nom doit être spécifiée.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Un argument de nom doit être spécifié.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>La valeur RegistryValueKind spécifiée n’est pas valide.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue n’autorise pas un String[] qui contient une référence String null.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>La longueur de l'URL ne doit pas dépasser 255 caractères.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Un nom de sous-clé non vide doit être spécifié.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Le type de l’objet valeur ne correspondait pas au RegistryValueKind spécifié ou l’objet n’a pas pu être correctement converti.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue ne prend pas en charge les tableaux de type « {0} ». Seuls Byte[] et String[] sont pris en charge.</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>La clé de Registre spécifiée n’existe pas.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>La longueur du nom de valeur spécifié dépasse le maximum de 1 6383 caractères.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>La taille des données de valeur spécifiées dépasse le maximum de 1 Mo.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>La sous-clé de Registre spécifiée n’existe pas.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>La valeur RegistryKeyPermissionCheck spécifiée n’est pas valide.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>La clé de Registre comporte des sous-clés; cette méthode ne prend pas en charge les suppressions récursives.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Nous ne pouvons pas créer un handle KTM sans Transaction.Current ou transaction spécifiée.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>La transaction spécifiée ou Transaction.Current doit correspondre à la transaction utilisée pour créer ou ouvrir ce TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>L’objet TransactedRegistryKey n’est pas associé à une transaction, car il s’agit d’une clé prédéfinie.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>L’accès au Registre demandé n’est pas autorisé.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>L’accès à la clé de Registre « {0} » est refusé.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Nous ne pouvons pas écrire dans la clé de Registre.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Nous ne pouvons pas accéder à une clé de Registre fermée.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Erreur inconnue : {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Les transactions de Registre ne sont pas prises en charge sur cette plateforme.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Le handle spécifié n'est pas valide.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/RemotingErrorIdStrings.fr.resx b/src/System.Management.Automation/resources/fr/RemotingErrorIdStrings.fr.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/RemotingErrorIdStrings.fr.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/RunspaceInit.fr.resx b/src/System.Management.Automation/resources/fr/RunspaceInit.fr.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/RunspaceInit.fr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/RunspacePoolStrings.fr.resx b/src/System.Management.Automation/resources/fr/RunspacePoolStrings.fr.resx
new file mode 100644
index 00000000000..54b00712c8b
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/RunspacePoolStrings.fr.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>La taille maximale du pool ne peut pas être inférieure à 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>La taille minimale du pool ne peut pas être inférieure à 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>La taille minimale du pool ne peut pas être supérieure à la taille maximale du pool.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>L’état du pool d’instances d’exécution n’est pas valide pour cette opération.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car le pool d’instances d’exécution n’est pas dans l’état « {0} ». L'état actuel est « {1} ».</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Nous ne pouvons pas ouvrir le pool d’instances d’exécution, car il n’est pas dans l’état « BeforeOpen ». L'état actuel est « {0} ».</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>L’objet {0} n’a pas été créé en appelant {1} sur l’instance RunspacePool actuelle.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Nous ne pouvons pas libérer l’instance d’exécution vers le pool actuel, car l’instance d’exécution n’appartient pas au pool actuel.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Cette propriété ne peut pas être modifiée après l’ouverture du pool d’instances d’exécution.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Cette instance d’exécution ne prend pas en charge les opérations de déconnexion et de connexion.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Nous ne pouvons pas effectuer l’opération, car le pool d’instances d’exécution est dans l’état Déconnecté.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>L’opération de déconnexion n’est pas prise en charge sur le serveur.  Le serveur doit exécuter PowerShell 3.0 ou une version ultérieure pour prendre en charge la déconnexion du pool d’instances d’exécution distantes.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Ce pool d’espaces d’exécution {0} n’est pas configuré pour fournir des objets PowerShell déconnectés pour les commandes exécutées sur le serveur distant.  Utilisez la méthode statique GetRunspacePools() de la classe RunspacePool pour interroger le serveur et renvoyer les objets de pool d’espaces d’exécution configurés à cet effet.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Nous ne pouvons pas vous connecter ce pool d’instances d’exécution, car le pool d’instances d’exécution correspondant côté serveur est connecté à un autre client.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState n’est pas pris en charge sur le serveur.  Le serveur doit exécuter PowerShell 5.0 ou une version ultérieure.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/RunspaceStrings.fr.resx b/src/System.Management.Automation/resources/fr/RunspaceStrings.fr.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/RunspaceStrings.fr.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/SecuritySupportStrings.fr.resx b/src/System.Management.Automation/resources/fr/SecuritySupportStrings.fr.resx
new file mode 100644
index 00000000000..14db43bfa15
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/SecuritySupportStrings.fr.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Cannot load certificate. '{0}' must resolve to a file system path.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Certificate '{0}' cannot be used for encryption. Encryption certificates must contain the Data Encipherment or Key Encipherment key usage, and include the Document Encryption Enhanced Key Usage ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Cannot load certificate. The identifier '{0}' matches multiple certificates. To encrypt to multiple recipients, provide multiple specific values to the '{1}' parameter, rather than a wildcard that matches multiple certificates.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Cannot load encryption certificate. The certificate setting '{0}' does not represent a valid base-64 encoded certificate, nor does it represent a valid certificate by file, directory, thumbprint, or subject name.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>WARNING: The certificate '{0}' contains a private key. Protected Event Logging certificates used for encryption should only contain the public key.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ERROR: Could not protect event log message '{0}': {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ERROR: Could not find or use certificate: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Session key not available to encrypt secure string.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Invalid buffer offset.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Invalid public key data.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Cannot import public key.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Invalid session key data.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Script file, '{0}', is blocked from running by system policy.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>An unknown script file policy enforcement value was returned: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Script File Read</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Script file '{0}' is not trusted by policy and will run in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/Serialization.fr.resx b/src/System.Management.Automation/resources/fr/Serialization.fr.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/Serialization.fr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/SessionStateProviderBaseStrings.fr.resx b/src/System.Management.Automation/resources/fr/SessionStateProviderBaseStrings.fr.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/SessionStateProviderBaseStrings.fr.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/SessionStateStrings.fr.resx b/src/System.Management.Automation/resources/fr/SessionStateStrings.fr.resx
new file mode 100644
index 00000000000..1d543382b68
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/SessionStateStrings.fr.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Impossible de trouver le chemin d'accès « {0} », car il n'existe pas.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/StringDecoratedStrings.fr.resx b/src/System.Management.Automation/resources/fr/StringDecoratedStrings.fr.resx
new file mode 100644
index 00000000000..6aaa4a078f0
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/StringDecoratedStrings.fr.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Seuls « ANSI » et « PlainText » sont pris en charge pour cette méthode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/SubsystemStrings.fr.resx b/src/System.Management.Automation/resources/fr/SubsystemStrings.fr.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/SubsystemStrings.fr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/SuggestionStrings.fr.resx b/src/System.Management.Automation/resources/fr/SuggestionStrings.fr.resx
new file mode 100644
index 00000000000..5ec77ad5b42
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/SuggestionStrings.fr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>La commande « {0} » est introuvable, mais elle existe dans l’emplacement actuel.
+Par défaut, PowerShell ne charge pas les commandes depuis l’emplacement actuel (voir « Get-Help about_Command_Precedence »).
+
+Si vous faites confiance à cette commande, exécutez plutôt la commande suivante :</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Les commandes les plus similaires sont :</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/TabCompletionStrings.fr.resx b/src/System.Management.Automation/resources/fr/TabCompletionStrings.fr.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/TabCompletionStrings.fr.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/TransactionStrings.fr.resx b/src/System.Management.Automation/resources/fr/TransactionStrings.fr.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/TransactionStrings.fr.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/TypesXmlStrings.fr.resx b/src/System.Management.Automation/resources/fr/TypesXmlStrings.fr.resx
new file mode 100644
index 00000000000..b26e799db6f
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/TypesXmlStrings.fr.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Erreur : {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : erreur dans le type « {3} » : {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Le nœud « {0} » ne doit apparaître qu’une seule fois sous « {1} ». Le nœud parent « {1} » sera ignoré.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Le nœud {0} n'est pas autorisé. Les nœuds suivants sont autorisés : {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Le nœud « {0} » ne doit pas contenir un texte interne.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Le nœud « {0} » doit contenir un texte interne.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Le nœud « {0} » est introuvable. Il ne doit apparaître qu’une seule fois sous « {1} ». Le nœud parent « {1} » sera ignoré.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>Le nœud « Type » doit contenir « Members », « TypeConverters » ou « TypeAdapters ».</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Nous ne pouvons pas créer une instance du convertisseur de type pour le type {0} en raison de l’exception suivante : {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell ne peut pas créer une instance de l’adaptateur de type pour le type {0} en raison de l’exception suivante : {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Le type adapté « {0} » n’est pas valide.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>Le TypeConverter a été ignoré, car il existe déjà.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>Le TypeAdapter a été ignoré, car il existe déjà.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Le type « {0} » doit être TypeConverter ou PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Le type « {0} » doit être un PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>Le membre {0} est déjà présent.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Le nom de membre suivant est réservé : {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Exception : {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>Le ScriptProperty doit avoir un accesseur get ou set.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>Le CodeProperty doit avoir un accesseur get ou set.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>La valeur doit être TRUE ou FALSE au lieu de {0}.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Le nœud « {0} » ne doit pas avoir l’attribut « {1} ».</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1} : Le fichier était introuvable.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1} : le fichier a été ignoré, car il avait déjà été chargé par {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Nous ne pouvons pas trouver la clé de Registre : {0}{1}. Utiliser {2} pour charger le fichier de configuration.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Le chemin d’accès {0} spécifié dans la clé de Registre : {1}{2}est introuvable. Utiliser {3} pour charger le fichier de configuration.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1} : le fichier a été ignoré, car il n’a pas l’extension de nom de fichier ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1} : le fichier a été ignoré en raison de l’exception de validation suivante : {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Le membre « {0} » doit être une note.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Nous ne pouvons pas convertir « {0} » : « {1} ».</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>N’utilisez pas le membre « {0} » ici.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>Le membre « {0} » doit avoir le type « {1} ».</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>« {0} » doit être présent lorsque « {1} » est « {2} » et que « {3} » est « {4} ».</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Une erreur précédente a entraîné l’ignorance de tous les paramètres de sérialisation.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>« {0} » n’est pas un membre standard et sera ignoré.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>Le chemin d’accès {0} n’est pas complet. Spécifiez un chemin d’accès complet vers le fichier de type.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>Nous ne pouvons pas mettre à jour le TypeTable, car il a peut-être été créé en dehors de l’espace d’exécution.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Des erreurs se sont produites lors du chargement de TypeTable. Consultez la propriété Erreurs pour obtenir des messages d’erreur détaillés.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Erreur dans TypeData « {0} » : {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>« {0} » doit avoir une valeur pour sa propriété « {1} ».</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>« {0} » ne doit pas avoir de valeur null ni de chaîne vide dans sa propriété « {1} ».</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Le type « {0} » est introuvable. La valeur du nom de type doit correspondre au nom complet du type. Vérifiez le nom du type, puis exécutez de nouveau la commande.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>Le TypeData doit contenir « Members », « TypeConverters », « TypeAdapters » ou « StandardMembers ».</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Une table de types partagée ne peut pas être mise à jour avec plus d’une entrée.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/VerbDescriptionStrings.fr.resx b/src/System.Management.Automation/resources/fr/VerbDescriptionStrings.fr.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/VerbDescriptionStrings.fr.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/fr/WildcardPatternStrings.fr.resx b/src/System.Management.Automation/resources/fr/WildcardPatternStrings.fr.resx
new file mode 100644
index 00000000000..e1da0c72571
--- /dev/null
+++ b/src/System.Management.Automation/resources/fr/WildcardPatternStrings.fr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Le modèle de caractère générique spécifié n’est pas valide : {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Authenticode.it.resx b/src/System.Management.Automation/resources/it/Authenticode.it.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Authenticode.it.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/AuthorizationManagerBase.it.resx b/src/System.Management.Automation/resources/it/AuthorizationManagerBase.it.resx
new file mode 100644
index 00000000000..7ccaa31d5f3
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/AuthorizationManagerBase.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Verifica di AuthorizationManager non riuscita.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/AutomationExceptions.it.resx b/src/System.Management.Automation/resources/it/AutomationExceptions.it.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/AutomationExceptions.it.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CatalogStrings.it.resx b/src/System.Management.Automation/resources/it/CatalogStrings.it.resx
new file mode 100644
index 00000000000..9f7a48c23a8
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CatalogStrings.it.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Impossibile generare il file di definizione del catalogo.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Aggiunta del file "{0}" al catalogo. Il percorso relativo del file nel catalogo è "{1}".</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>La convalida del file {0} del catalogo verrà ignorata. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Trovato file {0} nel catalogo con hash di {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>I percorsi per il catalogo contengono più file con lo stesso percorso relativo {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Trovato file {0} su disco con hash di {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>La convalida del file {0} del percorso verrà ignorata.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Impossibile acquisire un handle per un contesto amministratore del catalogo per un determinato algoritmo hash {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Impossibile creare l'hash per il file {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Impossibile aprire il file di catalogo {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>La versione del catalogo non è valida. Sono supportate solo le versioni {0} e {1} del catalogo.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Impossibile aprire il file di definizione del catalogo.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Sono state trovate più voci del membro del file {0} nel catalogo.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Impossibile trovare il nome file o il percorso per il membro del catalogo {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Impossibile trovare il file {0} per cui eseguire l'hashing.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Impossibile leggere il file {0} per calcolarne l'hash.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CimInstanceTypeAdapterResources.it.resx b/src/System.Management.Automation/resources/it/CimInstanceTypeAdapterResources.it.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CimInstanceTypeAdapterResources.it.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CmdletizationCoreResources.it.resx b/src/System.Management.Automation/resources/it/CmdletizationCoreResources.it.resx
new file mode 100644
index 00000000000..a2ce47f4ea2
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CmdletizationCoreResources.it.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Cmdlets over '{0}' class</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Cannot process Cmdlet Definition XML for the following file: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Cannot process the ObjectModelWrapper attribute. The {0} type defines multiple parameter sets. Verify that the Cmdlet Definition XML specifies a valid type in the ObjectModelWrapper attribute and retry.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Cannot process the ObjectModelWrapper attribute. The {0} type is an open generic type.  Verify that the Cmdlet Definition XML specifies a valid type in the ObjectModelWrapper attribute and retry.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Cannot process the ObjectModelWrapper attribute. The {0} type is not derived from the following class: {1}.  Verify that the Cmdlet Definition XML specifies a valid type in the ObjectModelWrapper attribute and retry.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Cannot process the ObjectModelWrapper attribute. The {0} type defines the {1} cmdlet parameter with a {2} attribute parameter that is ignored.  Verify that the Cmdlet Definition XML specifies a valid type in the ObjectModelWrapper attribute and retry.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Cannot define the {0} parameter for the {1} cmdlet.  The parameter name is already defined by the {2} class.  Change the name of the parameter in Cmdlet Definition XML and retry.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Cannot define the {0} parameter for the {1} cmdlet. The parameter name is already defined within the {2} XML element. Change the name of the parameter in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>The value of the EnumName attribute doesn't translate to a valid C# identifier: {0}. Verify the EnumName attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Cannot process the &lt;Enum EnumName="{0}" ...&gt; element.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>The remote computer returned a CDXML file that is not valid. The following cmdlet adapter is not supported for importing a CDXML module from a remote computer: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CommandBaseStrings.it.resx b/src/System.Management.Automation/resources/it/CommandBaseStrings.it.resx
new file mode 100644
index 00000000000..6ec74de4219
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CommandBaseStrings.it.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Continue with only the next step of the operation.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Continue with all the steps of the operation.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Skip this operation and proceed with the next operation.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Skip this operation and all subsequent operations.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Stop this command.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Halt Command</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type "{0}" to resume the pipeline.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Program "{0}" ended with non-zero exit code: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Performing the operation "{0}" on target "{1}".</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What if: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Are you sure you want to perform this action?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Confirm</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>The running command stopped because the preference variable "{0}" or common parameter is set to Stop: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>The running command stopped because the preference variable "{0}" or common parameter is set to Stop.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>The running command stopped because the preference variable "{0}" or common parameter is set to the following value that is not valid: "{1}".</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>The running command stopped because the user selected the Stop option.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>The running command stopped because the user interrupted the command.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Cmdlets derived from PSCmdlet cannot be invoked directly.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Cmdlet '{0}' does not support parameter '{1}' in a remote session.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Total count: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Estimated total count: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Unknown total count</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>command '{0}'</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>The {0} is obsolete. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Exec call failed with errorno {0} for command line: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Command '{0}' was not found. The specified command must be an executable.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Script Block Processing Dot-Source Check</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Dot-Source processing for script block '{0}' will fail in Constrained Language mode because its language mode '{1}' does not match the current language mode '{2}'.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Command Searcher</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Command '{0}' in module '{1}' is untrusted and will not be accessible in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ConsoleInfoErrorStrings.it.resx b/src/System.Management.Automation/resources/it/ConsoleInfoErrorStrings.it.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ConsoleInfoErrorStrings.it.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CoreClrStubResources.it.resx b/src/System.Management.Automation/resources/it/CoreClrStubResources.it.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CoreClrStubResources.it.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CredUI.it.resx b/src/System.Management.Automation/resources/it/CredUI.it.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CredUI.it.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Credential.it.resx b/src/System.Management.Automation/resources/it/Credential.it.resx
new file mode 100644
index 00000000000..b59b0b122a0
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Credential.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Non è possibile serializzare le credenziali. Se questo comando avvia un flusso di lavoro, le credenziali non possono essere persistite, perché il processo in cui il flusso di lavoro viene avviato non dispone dell'autorizzazione per serializzare le credenziali.
+
+-- Se il flusso di lavoro è stato avviato in una PSSession sul computer locale, aggiungere il parametro EnableNetworkAccess al comando che ha creato la sessione.
+-- Se il flusso di lavoro è stato avviato in una PSSession verso un computer remoto, aggiungi il parametro Autenticazione con valore CredSSP al comando che ha creato la sessione. In alternativa, connettersi a una configurazione di sessione che ha un valore della proprietà RunAsUser.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>Il valore di UserName non è nel formato corretto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/CredentialAttributeStrings.it.resx b/src/System.Management.Automation/resources/it/CredentialAttributeStrings.it.resx
new file mode 100644
index 00000000000..8de0b5b727c
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/CredentialAttributeStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>Richiesta di credenziali di PowerShell</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Immettere le credenziali.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/DebuggerStrings.it.resx b/src/System.Management.Automation/resources/it/DebuggerStrings.it.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/DebuggerStrings.it.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/DescriptionsStrings.it.resx b/src/System.Management.Automation/resources/it/DescriptionsStrings.it.resx
new file mode 100644
index 00000000000..6ebd2bddd52
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/DescriptionsStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} non può essere Null né vuoto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/DiscoveryExceptions.it.resx b/src/System.Management.Automation/resources/it/DiscoveryExceptions.it.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/DiscoveryExceptions.it.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/EnumExpressionEvaluatorStrings.it.resx b/src/System.Management.Automation/resources/it/EnumExpressionEvaluatorStrings.it.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/EnumExpressionEvaluatorStrings.it.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ErrorCategoryStrings.it.resx b/src/System.Management.Automation/resources/it/ErrorCategoryStrings.it.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ErrorCategoryStrings.it.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ErrorPackage.it.resx b/src/System.Management.Automation/resources/it/ErrorPackage.it.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ErrorPackage.it.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/EtwLoggingStrings.it.resx b/src/System.Management.Automation/resources/it/EtwLoggingStrings.it.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/EtwLoggingStrings.it.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/EventResource.it.resx b/src/System.Management.Automation/resources/it/EventResource.it.resx
new file mode 100644
index 00000000000..e0e344dd806
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/EventResource.it.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>Non è stato trovato alcun messaggio per l'ID evento PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Il processo pianificato {0} è stato avviato alle {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Il processo pianificato {0} è stato completato alle {1} con stato {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Eccezione processo pianificato {0}:
+ Messaggio: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Inizializzazione della funzionalità sperimentale: ignora la funzionalità sperimentale '{0}' dal file di configurazione. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Inizializzazione della funzionalità sperimentale: non è stato possibile leggere il file di configurazione.
+ Eccezione: {0}
+ Messaggio: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Plug-in del flusso di lavoro caricato.
+ 	 EndpointName: {0}
+ 	 Utente: {1}
+ 	 HostingMode: {2}
+ 	 Protocollo: {3}
+ 	 Configurazione:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Esecuzione del flusso di lavoro avviata.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Stato del flusso di lavoro modificato.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>È stato richiesto l'arresto del plug-in del flusso di lavoro.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Plug-in del flusso di lavoro riavviato.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Il flusso di lavoro è in ripresa.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>È stato superato un limite di quota impostato per l'endpoint.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Flusso di lavoro ripreso.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Pool di spazi di esecuzione del flusso di lavoro creato.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>L'attività è stata accodata per l'esecuzione.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Esecuzione attività avviata.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>È in corso l'importazione del flusso di lavoro da un file XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Il flusso di lavoro è stato importato da un file XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Non è possibile importare il flusso di lavoro da un file XAML a causa di un errore.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Convalida del flusso di lavoro avviata.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Convalida dell'esportazione eseguita correttamente.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Convalida del flusso di lavoro non riuscita con errore.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Attività del flusso di lavoro convalidata.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Non è possibile convalidare l'attività del flusso di lavoro.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Esecuzione attività non riuscita.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>La disponibilità dello spazio di esecuzione ha subito variazioni.
+ 	 RunspaceId: {0}
+ 	 Disponibilità: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Stato dello spazio di esecuzione modificato.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Flusso di lavoro caricato per l'esecuzione.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Flusso di lavoro scaricato.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Esecuzione del flusso di lavoro annullata.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Esecuzione del flusso di lavoro interrotta.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Operazione di pulizia del flusso di lavoro eseguita.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Flusso di lavoro salvato permanentemente caricato dal disco.
+ 	 WorkflowId: {0}
+ 	 Percorso: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>I dati del flusso di lavoro sono stati eliminati dal disco.
+ 	 WorkflowId: {0}
+ 	 Percorso: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Avvio del processo di rimozione.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Stato del processo modificato.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Errore del processo.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Processo creato per il flusso di lavoro (processo figlio).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Processo padre creato per il flusso di lavoro.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Tutti i processi necessari sono stati creati per l'esecuzione del flusso di lavoro.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Processo figlio rimosso per il flusso di lavoro.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>Si è verificato un errore durante la rimozione del processo.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Errore: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Caricamento del flusso di lavoro per l'esecuzione.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Esecuzione del flusso di lavoro completata.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Annullamento dell'esecuzione del flusso di lavoro.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Interruzione dell'esecuzione del flusso di lavoro.
+ 	 WorkflowId: {0}
+ 	 Motivo: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Scaricamento del flusso.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Arresto forzato del flusso di lavoro avviato.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Arresto forzato del flusso di lavoro completato.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Si è verificato un errore durante l'arresto forzato di un flusso di lavoro.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Salvataggio permanente del flusso di lavoro su disco.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Flusso di lavoro salvato permanentemente su disco.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Esecuzione dell'attività completata.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Errore di esecuzione del flusso di lavoro.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>È stato registrato un nuovo endpoint di PowerShell.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Configurazione endpoint modificata.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Registrazione della configurazione endpoint annullata.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Configurazione dell'endpoint disabilitata.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Configurazione endpoint abilitata.
+ 	 EndpointName: {0}
+ 	 Abilitato da: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Spazio di esecuzione out-of-process avviato.
+ 	 Comando: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Lo splatting dei parametri è stato eseguito durante l'esecuzione del flusso di lavoro.
+ 	 Parametri: {0}
+ 	 Computer: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Motore del flusso di lavoro avviato.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Istanza di Workflow Manager creata con
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 Nome utente: {2}
+ 	 Percorso: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Nome computer $null o . risolto in LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Risoluzione nello schema predefinito http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Il nome della shell remota è stato risolto in PowerShellCore predefinito</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creazione del testo di Scriptblock ({0} di {1}): 
+{2}
+
+ID ScriptBlock: {3}
+Percorso: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Chiamata ID ScriptBlock avviata: {0}
+ID spazio di esecuzione: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Chiamata ID ScriptBlock completata: {0}
+ID spazio di esecuzione: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Contesto:
+{0}
+
+Dati utente:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlazione degli ID attività.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Nome della classe = {0}
+Nome metodo = {1}
+GUID flusso di lavoro = {2}
+Messaggio = {3}
+{4}
+Nome attività = {5}
+GUID attività = {6}
+Parametri = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creazione dell'oggetto Spazio di esecuzione
+ 	 ID istanza: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creazione dell'oggetto RunspacePool
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Apertura di RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifica dell'ID attività e correlazione</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Lo stato dello spazio di esecuzione è stato modificato in {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Tentativo di ripetizione della creazione della sessione {0} per il codice di errore {1} nell'Id sessione {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell ha avviato un thread di ascolto IPC sul processo: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell ha terminato un thread di ascolto IPC sul processo: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>Si è verificato un errore nel thread di ascolto IPC di PowerShell nel processo: {0} in AppDomain: {1}.  Messaggio di errore: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Connessione IPC di PowerShell sul processo: {0} in AppDomain: {1} per l'utente: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Disconnessione IPC di PowerShell nel processo: {0} in AppDomain: {1} per l'utente: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Porta risolta in {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName risolto in {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName risolto in {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Lo schema è {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Messaggio di analisi di test</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>I parametri di connessione sono
+ URI connessione: {0}
+ URI risorsa: {1}
+ Utente: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Stampa identificazione personale: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifica dell'ID attività e correlazione</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Oggetto ricevuto con ID spazio di esecuzione: {0} ID comando: {1} Destinazione: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Si è verificata un'eccezione non gestita nell'appdomain.
+Tipo di eccezione: {0}
+Messaggio eccezione:{1}
+StackTrace eccezione: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. WSMan ha segnalato un errore con codice errore: {2}.
+ Messaggio di errore: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Si è verificata un'eccezione non gestita nell'appdomain.
+Tipo di eccezione: {0}
+Messaggio eccezione:{1}
+StackTrace eccezione: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. WSMan ha segnalato un errore con codice errore: {2}.
+ Messaggio di errore: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>ID spazio di esecuzione {0}. Stabilire una connessione usando WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione {0}. Callback ricevuto per WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0}. Chiusura della shell tramite WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0}. Callback ricevuto per WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. Invio di dati di dimensioni {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. Callback ricevuto per WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. Invio della richiesta di ricezione tramite WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. Ricezione di dati di dimensioni {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Stabilire una connessione del comando tramite WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Callback ricevuto per la connessione del comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Chiusura del trasporto per il comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Callback ricevuto per la chiusura del comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Invio del segnale con codice {2} tramite WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline {1}. Callback ricevuto per WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0}. La connessione viene reindirizzata all'URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>ID spazio di esecuzione: {0} ID pipeline: {1}. Il server sta inviando dati di dimensioni {2} al client. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Richiesta {0}. Creazione di una sessione remota del server. Nome utente: {1} ID shell personalizzata: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Contesto di segnalazione per la richiesta: {0} Contesto segnalato: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Operazione di report completata per la richiesta: {0}
+ Codice errore: {1}
+ Messaggio di errore: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Contesto shell {0}. ID richiesta {1}. Creazione di una sessione comune per l'esecuzione di un comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Contesto shell {0} Contesto comando {1} ID richiesta {2}. Arresto del comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Contesto shell {0} Contesto comando {1} ID richiesta {2}. Dati ricevuti dal client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Contesto shell {0} Contesto comando {1} ID richiesta {2}. Il client ha inviato una richiesta di ricezione in modo che il server possa inviare i dati.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Contesto shell {0}Contesto comando {1} IsReceiveOperation {2}. Ricevuta richiesta di chiusura dell'operazione.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Caricamento dell'assembly {0} per la shell personalizzata con ID shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Caricamento del tipo {0} per la shell personalizzata con ID shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Ricevuto frammento di comunicazione remota.
+ 	 ID oggetto: {0}
+ 	 ID frammento: {1}
+ 	 Flag di inizio: {2}
+ 	 Flag di fine: {3}
+ 	 Lunghezza payload: {4}
+ 	 Dati payload: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Frammento di comunicazione remota inviato.
+ 	 ID oggetto: {0}
+ 	 ID frammento: {1}
+ 	 Flag di inizio: {2}
+ 	 Flag di fine: {3}
+ 	 Lunghezza payload: {4}
+ 	 Dati payload: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Arresto del servizio Gestione remota Windows.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Oggetto riattivato correttamente.
+ 	 Nome del tipo deserializzato: {0}
+ 	 Riattivato eseguendo il cast al tipo: {1}
+ 	 L'oggetto riattivato è di tipo: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Non è possibile reidratare un oggetto.
+ 	 Nome del tipo deserializzato: {0}
+ 	 Riattivato eseguendo il cast al tipo: {1}
+ 	 Eccezione di cast del tipo: {2}
+ 	 Eccezione interna di cast del tipo: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>La profondità di serializzazione è stata sostituita.
+ 	 Nome del tipo serializzato: {0}
+ 	 Profondità originale: {1}
+ 	 Profondità sostituita: {2}
+ 	 Profondità corrente sotto il livello superiore: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>La modalità di serializzazione è stata sostituita.
+ 	 Nome del tipo serializzato: {0}
+ 	 Modalità sostituita: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>La serializzazione di una proprietà script è stata ignorata perché non è disponibile alcun spazio di esecuzione da usare per la valutazione della proprietà.
+ 	 Nome proprietà:{0}
+ 	 Nome del tipo proprietario della proprietà: {1}
+ 	 Script del getter: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>La serializzazione di una proprietà è stata ignorata perché il getter della proprietà non è riuscito.
+ 	 Nome proprietà:{0}
+ 	 Nome del tipo proprietario della proprietà: {1}
+ 	 Eccezione del getter della proprietà: {2}
+ 	 Eccezione interna del getter della proprietà: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>La serializzazione di un oggetto enumerabile potrebbe non essere completa, perché l'oggetto in enumerazione ha generato un'eccezione.
+ 	 Tipo di oggetto in enumerazione: {0}
+ 	 Eccezione: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>La serializzazione ha chiamato il metodo ToString dell'oggetto, ma non è riuscito.
+ 	 Tipo di oggetto: {0}
+ 	 Eccezione: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>È stata raggiunta la profondità massima sotto il livello superiore, quindi l'oggetto verrà serializzato come stringa.
+ 	 Tipo di oggetto alla profondità massima: {0}
+ 	 Nome proprietà alla profondità massima: {1}
+ 	 Profondità: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>XmlException generata dal deserializzatore (molto probabilmente indica un formato clixml non corretto).
+ 	 Numero di riga: {0} Posizione riga: {1}
+ 	 Eccezione: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>La serializzazione delle proprietà specificate non è riuscita perché una delle proprietà specificate non era presente.
+ 	 Tipo di oggetto: {0}
+ 	 Nome proprietà: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>È il corso l'avvio della console di PowerShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>La console di PowerShell è pronta per l'input dell'utente</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Tracciamento ErrorRecord:
+ Messaggio: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Dettagli eccezione: 
+ Messaggio: {5}
+ Analisi dello stack: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Eccezione:
+ Messaggio: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Traccia di PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Processo di traccia:
+ ID: {0}
+ InstanceId: {1}
+ Nome: {2}
+ Posizione: {3}
+ Stato: {4}
+ Comando: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Informazioni di traccia:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Informazioni di traccia:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>INIZIO di ImportWorkflowCommand::StartWorkflowApplication. Avvio della chiamata alla funzione del flusso di lavoro. GUID di rilevamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>FINE ImportWorkflowCommand::StartWorkflowApplication. Terminazione della chiamata della funzione del flusso di lavoro. GUID di rilevamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Creazione di un nuovo processo in ImportWorkflowCommand::StartWorkflowApplication. GUID di rilevamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>FINE della creazione di un nuovo processo in ImportWorkflowCommand::StartWorkflowApplication. GUID di rilevamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>FINE della creazione di un nuovo processo in ImportWorkflowCommand::StartWorkflowApplication. GUID di rilevamento {0} : ContainerParentJob GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>INIZIO JobLogic ContainerParentJob GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>FINE JobLogic ContainerParentJob GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>INIZIO WorkflowExecution ContainerParentJob GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>FINE WorkflowExecution ContainerParentJob GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob con GUID {0} aggiunto a ContainerParentJob con GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob con GUID {0} associato al ContainerParentJob remoto con GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>INIZIO esecuzione di ContainerParentJob con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>FINE esecuzione di ContainerParentJob con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>INIZIO esecuzione del processo proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>FINE esecuzione del processo proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>INIZIO gestore dell'evento StateChanged per il processo proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>FINE gestore dell'evento StateChanged per il processo proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>INIZIO gestore dell'evento StateChanged per il processo figlio proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>FINE gestore dell'evento StateChanged per il processo figlio proxy con GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>INIZIO esecuzione di GC</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>FINE esecuzione di GC</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>L'archivio salvataggi permanenti ha raggiunto le dimensioni massime specificate</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE ha avviato l'esecuzione del file di script {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE ha avviato l'esecuzione di uno script selezionato dall'utente dal file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE sta interrompendo il comando corrente.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE sta riprendendo il debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE sta interrompendo il debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE sta entrando il modalità di debug.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE sta eseguendo lo step-over di debug.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE sta uscendo dal debug.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE sta abilitando tutti i punti di interruzione.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE sta disabilitando tutti i punti di interruzione.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE sta rimuovendo tutti i punti di interruzione.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE sta impostando il punto di interruzione nella riga #: {0} del file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE sta rimuovendo il punto di interruzione nella riga #: {0} del file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE sta abilitando il punto di interruzione alla riga #: {0} del file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE sta disabilitando il punto di interruzione nella riga #: {0} del file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE ha raggiunto un punto di interruzione alla riga #: {0} del file {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/EventingResources.it.resx b/src/System.Management.Automation/resources/it/EventingResources.it.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/EventingResources.it.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ExperimentalFeatureStrings.it.resx b/src/System.Management.Automation/resources/it/ExperimentalFeatureStrings.it.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ExperimentalFeatureStrings.it.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ExtendedTypeSystem.it.resx b/src/System.Management.Automation/resources/it/ExtendedTypeSystem.it.resx
new file mode 100644
index 00000000000..13a02a7ac35
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ExtendedTypeSystem.it.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Impossibile trovare la proprietà "{0}".</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} non è un percorso valido.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/FileSystemProviderStrings.it.resx b/src/System.Management.Automation/resources/it/FileSystemProviderStrings.it.resx
new file mode 100644
index 00000000000..df7d304d68a
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/FileSystemProviderStrings.it.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Copia di {0} in {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Da {0} a {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/FormatAndOutXmlLoadingStrings.it.resx b/src/System.Management.Automation/resources/it/FormatAndOutXmlLoadingStrings.it.resx
new file mode 100644
index 00000000000..cf53cc07c1f
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/FormatAndOutXmlLoadingStrings.it.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: l'elemento XML {2} non consente attributi.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il nodo {2} non può avere oggetti figlio.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} non è valido.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è necessario specificare almeno un valore predefinito {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: non può esserci più di un valore predefinito {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il nome del controllo non può essere null o vuoto.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: le visualizzazioni Out Of Band possono avere solo CustomControl o ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: una visualizzazione Out Of Band non può avere GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: non è possibile caricare la visualizzazione.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: "{2}" non è un valore di allineamento valido.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è previsto un numero intero positivo.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: la definizione dell'intestazione di colonna non è valida; tutte le intestazioni verranno ignorate.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il numero di elementi della riga = {2} nel set alternativo #{3} non corrisponde al numero di elementi della riga predefinita = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il numero di elementi dell'intestazione = {2} non corrisponde al numero di elementi della riga predefinita = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è necessario specificare almeno un elemento della visualizzazione elenco.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: la voce di proprietà non è valida.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca l'elenco delle definizioni.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è previsto un valore booleano.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è previsto un numero intero non negativo.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è previsto un numero intero.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca il valore del testo interno.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: l'elenco dei token del controllo personalizzato non può essere vuoto.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} non è possibile caricare.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} non può essere specificato senza un'espressione.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} non può essere specificato con un'espressione.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca una stringa di formato.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca il testo del blocco di script.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca una proprietà.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il blocco di script "{2}" non è valido.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: la stringa {2} della risorsa {3} nell'assembly {4} non è stata trovata.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: la risorsa {2} nell'assembly {3} non è stata trovata.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: non è possibile trovare l'assembly {2}.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il nodo deve essere un XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: è necessaria un'espressione.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: non è possibile avere un controllo o un'etichetta senza un'espressione.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: controllo ed etichetta non possono essere presenti contemporaneamente.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: SelectionSetName e TypeName non possono essere presenti contemporaneamente.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: non è specificato alcun tipo o condizione per l'applicazione della visualizzazione.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il valore {2} non è valido.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: esiste un nodo duplicato.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} e {3} si escludono a vicenda.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2}, {3} e {4} si escludono a vicenda.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} è un nodo sconosciuto.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} è un attributo sconosciuto.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} è un attributo mancante.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: il nodo {2} è mancante.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: manca un nodo in {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} è un nodo vuoto.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Errore in XPath {0} nel file {1}: {2} è un attributo vuoto.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Errore nel file {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Troppi errori nel file {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Si sono verificati errori durante il caricamento del file di dati di formato: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Global Assembly Cache) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>Il percorso {0} non è completo. Specificare un percorso di file con formato completo.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Non è possibile aggiornare FormatTable perché potrebbe essere stata creata all'esterno dello spazio di esecuzione.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Si sono verificati errori durante il caricamento di FormatTable. Visualizzare il contenuto della proprietà Errors per ottenere messaggi di errore dettagliati.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Errore durante la formattazione dei dati "{0}": {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Errore nei dati della visualizzazione con nome di tipo {0} all'indice {1}: il numero di elementi dell'intestazione = {2} non corrisponde al numero predefinito di elementi della riga = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: i dati di formattazione "{2}" non sono validi.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: il blocco di script "{2}" non è valido.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: caricamento di {2} non riuscito.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: un TableControl deve contenere solo un elemento {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: è necessario specificare almeno un valore predefinito {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: è necessario specificare almeno un elemento della visualizzazione elenco.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Errore nei dati di visualizzazione con nome di tipo {0} all'indice {1}: non può esserci più di un valore predefinito {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Troppi errori nei dati di formattazione per il tipo "{0}".</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Non è possibile aggiornare una tabella di formato condivisa con più di una voce.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/FormatAndOut_MshParameter.it.resx b/src/System.Management.Automation/resources/it/FormatAndOut_MshParameter.it.resx
new file mode 100644
index 00000000000..d62a0b10f13
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/FormatAndOut_MshParameter.it.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Non è possibile convertire {0} in uno dei tipi seguenti {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Il valore di un parametro è Null; è previsto uno dei tipi seguenti: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>La chiave duplicata "{0}" è in conflitto con "{1}".</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>La chiave "{0}" contiene un tipo, {1}, non valido; i tipi previsti sono {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>La chiave "{0}" contiene un tipo, {1}, non valido; il tipo previsto è {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>La chiave {0} è ambigua; {1} e {2} sono in conflitto.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Il valore di una chiave non può essere Null.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Il tipo di chiave {0} non è valido. La chiave deve essere una stringa.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>La chiave {0} non ha alcun valore.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Manca una voce obbligatoria per {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>La chiave {0} non è valida.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>Il valore "{0}" per la chiave "{1}" non è valido; i valori validi sono {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>Il valore "{0}" per la chiave "{1}" deve essere maggiore di 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>La chiave "{0}" non può contenere una stringa di formattazione vuota.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>La chiave "{0}" non può contenere una stringa vuota come valore.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Non è consentito specificare una stringa vuota come valore.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>La chiave "{0}" non può contenere caratteri jolly nel valore "{1}".</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>I caratteri jolly non sono consentiti in "{0}".</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>Il valore di EnumerableExpansion non è valido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/FormatAndOut_format_xxx.it.resx b/src/System.Management.Automation/resources/it/FormatAndOut_format_xxx.it.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/FormatAndOut_format_xxx.it.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/FormatAndOut_out_xxx.it.resx b/src/System.Management.Automation/resources/it/FormatAndOut_out_xxx.it.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/FormatAndOut_out_xxx.it.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/GetErrorText.it.resx b/src/System.Management.Automation/resources/it/GetErrorText.it.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/GetErrorText.it.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/HelpDisplayStrings.it.resx b/src/System.Management.Automation/resources/it/HelpDisplayStrings.it.resx
new file mode 100644
index 00000000000..0ba5ecc3004
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/HelpDisplayStrings.it.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NOME</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Esempio</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Risposta</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Nessuno</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/HelpErrors.it.resx b/src/System.Management.Automation/resources/it/HelpErrors.it.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/HelpErrors.it.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/HistoryStrings.it.resx b/src/System.Management.Automation/resources/it/HistoryStrings.it.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/HistoryStrings.it.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/HostInterfaceExceptionsStrings.it.resx b/src/System.Management.Automation/resources/it/HostInterfaceExceptionsStrings.it.resx
new file mode 100644
index 00000000000..5f0f90e3d4b
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/HostInterfaceExceptionsStrings.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Si è verificato un errore di tipo "{0}".</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Un comando che richiede l'intervento dell'utente ha riscontrato un errore perché il programma host o il tipo di comando non supporta l'interazione dell'utente. Provare con un programma host che supporta l'interazione dell'utente, come la console di PowerShell, e rimuovere i comandi correlati a prompt dai tipi di comandi che non supportano l'interazione dell'utente.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Un comando che richiede l'intervento dell'utente ha riscontrato un errore perché il programma host o il tipo di comando non supporta l'interazione dell'utente. L'host stava tentando di richiedere una conferma con il messaggio seguente: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Il metodo non può essere richiamato perché il pool è stato chiuso o ha riscontrato un errore.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/InternalCommandStrings.it.resx b/src/System.Management.Automation/resources/it/InternalCommandStrings.it.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/InternalCommandStrings.it.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/InternalHostStrings.it.resx b/src/System.Management.Automation/resources/it/InternalHostStrings.it.resx
new file mode 100644
index 00000000000..c28cbc50170
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/InternalHostStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>Il numero di chiamate a EnterNestedPrompt non corrisponde a quello di ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/InternalHostUserInterfaceStrings.it.resx b/src/System.Management.Automation/resources/it/InternalHostUserInterfaceStrings.it.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/InternalHostUserInterfaceStrings.it.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Logging.it.resx b/src/System.Management.Automation/resources/it/Logging.it.resx
new file mode 100644
index 00000000000..7760da41575
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Logging.it.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravità=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravità=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Gravità=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>UNKNOWN</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>La funzionalità sperimentale del motore ''{0}'' dichiarata nel file di configurazione non è registrata nel PowerShell corrente.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>La funzionalità sperimentale ''{0}'' dichiarata nel file di configurazione non è valida.
+Il nome di una funzionalità sperimentale deve seguire la convenzione seguente: 
+    Nome della funzionalità del motore: ''PS[FeatureName]''
+    Nome della funzionalità del modulo: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Metadata.it.resx b/src/System.Management.Automation/resources/it/Metadata.it.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Metadata.it.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/MiniShellErrors.it.resx b/src/System.Management.Automation/resources/it/MiniShellErrors.it.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/MiniShellErrors.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Modules.it.resx b/src/System.Management.Automation/resources/it/Modules.it.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Modules.it.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/MshHostRawUserInterfaceStrings.it.resx b/src/System.Management.Automation/resources/it/MshHostRawUserInterfaceStrings.it.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/MshHostRawUserInterfaceStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/MshSignature.it.resx b/src/System.Management.Automation/resources/it/MshSignature.it.resx
new file mode 100644
index 00000000000..280e291e7ad
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/MshSignature.it.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Firma verificata.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Il file {0} non è firmato digitalmente. Non è possibile eseguire questo script nel sistema corrente. Per altre informazioni sull'esecuzione di script e sull'impostazione dei criteri di esecuzione, vedere about_Execution_Policies all'indirizzo https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Il contenuto del file {0} potrebbe essere stato modificato da un processo o da un utente non autorizzato, poiché l'hash del file non corrisponde all'hash archiviato nella firma digitale. Non è possibile eseguire lo script nel sistema specificato. Per ulteriori informazioni, eseguire Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Il file {0} è firmato, ma il firmatario non è considerato attendibile in questo sistema.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Non è possibile firmare il file perché il sistema non supporta operazioni di firma su file {0}.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Non è possibile firmare il file perché il sistema non supporta operazioni di firma sui file che non hanno un'estensione.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>Non è possibile verificare la firma perché non è compatibile con il sistema corrente.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>Non è possibile verificare la firma perché non è compatibile con il sistema corrente. L'algoritmo hash non è valido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/MshSnapInCmdletResources.it.resx b/src/System.Management.Automation/resources/it/MshSnapInCmdletResources.it.resx
new file mode 100644
index 00000000000..859b9b96624
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/MshSnapInCmdletResources.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione. Il cmdlet specificato non è supportato in una shell personalizzata.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Non è possibile trovare alcun snap-in di PowerShell corrispondente al criterio '{0}'. Controllare il modello, quindi riprovare il comando.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Il formato del nome dello snap-in specificato non è valido.  I nomi degli snap-in di PowerShell possono contenere solo caratteri alfanumerici, trattini, caratteri di sottolineatura e punti. Correggere il nome e riprovare.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Non è possibile aggiungere lo snap-in PowerShell {0} perché si tratta di un modulo Powershell di sistema. Usare Import-Module per caricare il modulo.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/MshSnapinInfo.it.resx b/src/System.Management.Automation/resources/it/MshSnapinInfo.it.resx
new file mode 100644
index 00000000000..ca48c856e09
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/MshSnapinInfo.it.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Unable to access PowerShell registry information.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Unable to access PowerShell Engine registry information.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Unable to access PublicKeyToken information.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Version {0} of PowerShell is not available on this computer.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>The PowerShell snap-in '{0}' is not installed on this computer.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for registry key {1}.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}.  The expected format is 'string.'</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}.  The expected format is 'multistring.'</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Cannot find required information in registry or missing key files.  Cannot load some cmdlets.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>No snap-ins have been registered for PowerShell version {0}.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Cannot retrieve the string resource because the reader has been disposed.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Version value {0} is not specified or is incorrect for registry key {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>No [PSVersion] attribute was found for PowerShell type {0}. Add a PSVersion attribute to the type using [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/NativeCP.it.resx b/src/System.Management.Automation/resources/it/NativeCP.it.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/NativeCP.it.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PSCommandStrings.it.resx b/src/System.Management.Automation/resources/it/PSCommandStrings.it.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PSCommandStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PSConfigurationStrings.it.resx b/src/System.Management.Automation/resources/it/PSConfigurationStrings.it.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PSConfigurationStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PSDataBufferStrings.it.resx b/src/System.Management.Automation/resources/it/PSDataBufferStrings.it.resx
new file mode 100644
index 00000000000..1977f1cb926
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PSDataBufferStrings.it.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>L'indice specificato è minore di zero o maggiore del numero di elementi nel buffer. L'indice deve essere compreso nell'intervallo {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Non è possibile convertire un riferimento null in un tipo di valore.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Non è possibile convertire il valore dal tipo {0} al tipo {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Non è possibile aggiungere oggetti a un buffer chiuso. Assicurarsi che il buffer sia aperto per consentire l'esito positivo delle operazioni di aggiunta e inserimento.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>La proprietà SerializeInput può essere impostata solo per il tipo PSObject di PSDataCollection. Impostare la proprietà SerializeInput su false oppure modificare il tipo di raccolta in PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PSListModifierStrings.it.resx b/src/System.Management.Automation/resources/it/PSListModifierStrings.it.resx
new file mode 100644
index 00000000000..d9ec64e384a
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PSListModifierStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>È stato rilevato il modificatore di elenco sconosciuto seguente: '{0}'. I modificatori di elenco validi sono Add, Remove e Replace.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Non è possibile applicare l'aggiornamento perché l'oggetto non è un tipo di raccolta supportato.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PSStyleStrings.it.resx b/src/System.Management.Automation/resources/it/PSStyleStrings.it.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PSStyleStrings.it.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ParameterBinderStrings.it.resx b/src/System.Management.Automation/resources/it/ParameterBinderStrings.it.resx
new file mode 100644
index 00000000000..57e81453dc9
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ParameterBinderStrings.it.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Non è possibile trovare un parametro corrispondente al nome parametro ''{1}''.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Non è possibile trovare un parametro posizionale che accetti l'argomento ''{1}''.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Argomento mancante per il parametro ''{1}''. Specificare un parametro di tipo ''{2}'' e riprovare.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Non è possibile elaborare il parametro perché il nome del parametro ''{1}'' è ambiguo. Le possibili corrispondenze includono:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Non è possibile convertire ''{6}'' nel tipo ''{2}'' richiesto dal parametro ''{1}''. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Non è possibile associare il parametro ''{1}''. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Non è possibile associare i parametri posizionali ''{1}''.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Non è possibile associare i parametri posizionali perché non è stato indicato alcun nome.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Impossibile impostare il parametro utilizzando i parametri denominati. Uno o più parametri emessi non possono essere usati insieme o è stato specificato un numero insufficiente di parametri.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Non è possibile elaborare il comando a causa di uno o più parametri obbligatori mancanti:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Non è possibile specificare il parametro ''{1}'' nel set di parametri ''{6}''.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Non è possibile associare il parametro perché il parametro ''{1}'' è specificato più di una volta. Per fornire più valori ai parametri che possono accettare più valori, usare la sintassi della matrice. Ad esempio, "-parameter value1,value2,value3".</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Non è possibile valutare il parametro ''{1}'' perché il relativo argomento è specificato come blocco di script e non è presente alcun input. Un blocco di script non può essere valutato senza input.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>L'input al blocco di script per il parametro ''{1}'' non è riuscito. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Non è possibile valutare il parametro ''{1}'' perché l'input dell'argomento non ha prodotto alcun output.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Non è possibile associare l'oggetto di input ad alcun parametro per il comando, perché il comando non accetta input della pipeline oppure l'input e le relative proprietà non corrispondono ad alcun parametro che accetta l'input della pipeline.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Non è possibile associare l'oggetto di input perché non contiene le informazioni necessarie per associare tutti i parametri obbligatori: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Non è possibile elaborare l'input della pipeline perché non è possibile recuperare il valore predefinito del parametro ''{1}''. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Impossibile recuperare i parametri dinamici del cmdlet. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Specificare i valori per i parametri seguenti:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>cmdlet {0} nella posizione della pipeline di comando {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Non è possibile elaborare la trasformazione degli argomenti nel parametro "{1}".{6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Non è possibile convalidare l'argomento per il parametro ''{1}''. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Non è possibile associare il parametro ''{1}'' alla destinazione. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Non è possibile associare l'argomento al parametro ''{1}'' perché è Null.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Non è possibile associare l'argomento al parametro ''{1}'' perché è una stringa vuota.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Non è possibile associare l'argomento al parametro ''{1}'' perché è una raccolta vuota.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Non è possibile associare l'argomento al parametro ''{1}'' perché è una matrice vuota.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Non è possibile elaborare il comando. Il parametro ''{0}'' è definito più volte.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Non è possibile associare il cmdlet {0} perché il parametro ''{1}'' è di tipo ''{2}'' e non è possibile identificare il metodo Add() oppure esistono più metodi Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Non è possibile associare il cmdlet {0} perché il parametro definito in fase di esecuzione ''{1}'' è stato aggiunto a RuntimeDefinedParameterDictionary con la chiave ''{6}''. La chiave deve essere uguale a RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Non è possibile associare l'argomento al parametro ''{1}'' perché i PSTypeNames dell'argomento non corrispondono al PSTypeName richiesto dal parametro: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>In $PSDefaultParameterValues sono definiti più valori predefiniti diversi per il parametro corrispondente al nome o all'alias seguente: {0}. Questi valori predefiniti sono stati ignorati.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Il nome o l'alias seguente definito in $PSDefaultParameterValues per questo cmdlet viene risolto in più parametri: {0}. Il valore predefinito è stato ignorato.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Questo errore potrebbe essere stato causato dall'applicazione dell'associazione predefinita dei parametri. È possibile disabilitare l'associazione predefinita dei parametri in $PSDefaultParameterValues impostando $PSDefaultParameterValues["Disabled"] su $true, quindi riprovare. I seguenti parametri predefiniti sono stati associati correttamente per questo cmdlet quando si è verificato l'errore:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Questo errore potrebbe essere causato dall'applicazione dell'associazione predefinita dei parametri. È possibile disabilitare l'associazione predefinita dei parametri in $PSDefaultParameterValues impostando $PSDefaultParameterValues["Disabled"] su $true, quindi riprovare. Il seguente parametro predefinito è stato associato correttamente per questo cmdlet quando si è verificato l'errore:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>L'associazione del valore predefinito ''{0}'' al parametro ''{1}'' non è riuscita: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>La chiave ''{0}'' non ha un formato valido. Per informazioni sul formato corretto, vedi about_Parameters_Default_Values all'indirizzo https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>I formati delle chiavi ''{0}'' non sono validi. Per informazioni sul formato corretto, vedi about_Parameters_Default_Values all'indirizzo https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Il parametro ''{0}'' è obsoleto. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>La chiave ''{0}'' di tipo ''{1}'' non è un valore stringa. DefaultParameterDictionary accetta solo chiavi con valore stringa.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>La chiave ''{0}'' è già stata aggiunta al dizionario.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Chiamata di metodo o proprietà non consentita</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>La chiamata del metodo o della proprietà ''{0}'' per il tipo ''{1}'' non sarà consentita in modalità Linguaggio vincolato per gli script non attendibili.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Creazione del tipo non consentita</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>La creazione del tipo ''{0}'' non sarà consentita durante l'associazione dei parametri in modalità Linguaggio vincolato per gli script non attendibili.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ParserStrings.it.resx b/src/System.Management.Automation/resources/it/ParserStrings.it.resx
new file mode 100644
index 00000000000..4d7b8badc79
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ParserStrings.it.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Non è possibile caricare l'assembly '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PathUtilsStrings.it.resx b/src/System.Management.Automation/resources/it/PathUtilsStrings.it.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PathUtilsStrings.it.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PipelineStrings.it.resx b/src/System.Management.Automation/resources/it/PipelineStrings.it.resx
new file mode 100644
index 00000000000..c6a19ae74ee
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PipelineStrings.it.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Non è elaborare l'istanza del cmdlet perché è già in uso da un'altra pipeline. Contattare il servizio di supporto clienti Microsoft.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché la pipeline è stata avviata. Arrestare la pipeline e riprovare.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Non è possibile continuare l'esecuzione del cmdlet perché l'esecuzione dei cmdlet è stata impedita dai criteri Stop.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Non è possibile eseguire la pipeline perché il primo cmdlet della pipeline sta tentando di leggere l'input dai risultati di un cmdlet precedente. Modificare il primo cmdlet, rimuoverlo oppure aggiungere alla pipeline il cmdlet il cui output è richiesto dal primo cmdlet, quindi provare a eseguire di nuovo la pipeline.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Non è possibile elaborare il numero del cmdlet. La funzione ReadFromCommand deve specificare l'ID di un cmdlet già aggiunto alla pipeline. Contattare il servizio di supporto clienti Microsoft.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Non è possibile leggere l'output delle funzioni ReadFromCommand e ReadErrorQueue perché un altro cmdlet sta già leggendo tale output. Contattare il servizio di supporto clienti Microsoft.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Non è possibile eseguire la pipeline perché non sono presenti comandi. Aggiungere almeno un comando alla pipeline, quindi eseguirlo di nuovo.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Non è possibile completare l'operazione della pipeline perché non è ancora stata avviata. È necessario chiamare il metodo Begin() prima di chiamare End() su una pipeline di cui è possibile eseguire passaggi.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>I metodi WriteObject e WriteError non possono essere chiamati dall'esterno degli override dei metodi BeginProcessing, ProcessRecord ed EndProcessing e possono essere chiamati solo dallo stesso thread. Verificare che il cmdlet effettui queste chiamate correttamente oppure contattare il servizio di supporto clienti Microsoft.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>Un cmdlet ha generato un'eccezione dopo la chiamata a ThrowTerminatingError.
+La prima eccezione è stata "{0}" con analisi dello stack "{1}".
+La seconda eccezione è stata "{2}" con analisi dello stack "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>I metodi WriteObject e WriteError non possono essere chiamati dopo che la pipeline è stata chiusa. Contattare il servizio di supporto clienti Microsoft.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Si è verificato un errore durante la creazione della pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Questa pipeline non supporta la semantica di disconnessione e riconnessione.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Non è possibile connettere questa pipeline perché non è nello stato disconnesso.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>L'oggetto dello spazio di esecuzione ha un comando remoto Null associato.  Non è possibile creare un oggetto RemotePipeline disconnesso perché non è stato specificato alcun comando remoto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/PowerShellStrings.it.resx b/src/System.Management.Automation/resources/it/PowerShellStrings.it.resx
new file mode 100644
index 00000000000..9e116a6b102
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/PowerShellStrings.it.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Lo stato dell'istanza corrente di PowerShell non è valido per questa operazione.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché un comando è già stato avviato. Attendere il completamento del comando oppure arrestarlo e quindi ripetere l'operazione.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Nessun comando specificato.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>L'istanza di PowerShell non si trova nello stato corretto per creare un'istanza di PowerShell annidata. Le istanze di PowerShell annidate devono essere create solo in un'istanza di PowerShell in esecuzione.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché lo stato dello spazio di esecuzione non è "{0}". Lo stato corrente dello spazio di esecuzione è "{1}".</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Le istanze di PowerShell annidate non possono essere richiamate in modo asincrono. Usare il metodo Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>L'oggetto {0} non è stato creato chiamando {1} in questa istanza di PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Quando lo spazio di esecuzione è impostato per riutilizzare un thread, lo stato dell'apartment nelle impostazioni di chiamata deve corrispondere allo spazio di esecuzione.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Quando lo spazio di esecuzione è impostato per usare il thread corrente, lo stato dell'apartment nelle impostazioni di chiamata deve corrispondere a quello del thread corrente.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Per aggiungere un parametro è necessario un comando. Prima di aggiungere un parametro, è necessario aggiungere un comando all'istanza di PowerShell.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Le chiavi nel dizionario devono essere stringhe.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Nessuno spazio di esecuzione disponibile per eseguire comandi in questo thread. È possibile specificarne uno nella proprietà DefaultRunspace del tipo System.Management.Automation.Runspaces.Runspace. Il comando che si è tentato di richiamare è: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Non è possibile connettere l'oggetto PowerShell perché non è associato a uno spazio di esecuzione remoto o a un pool di spazi di esecuzione.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Il comando in esecuzione è stato disconnesso, ma è ancora in esecuzione sul server remoto.  Riconnettersi per ottenere lo stato dell'operazione del comando e i dati di output.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché la sessione corrente di PowerShell si trova nello stato Disconnesso.  Connettere questa sessione di PowerShell e quindi attendere il completamento del comando oppure arrestarlo.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché la sessione corrente di PowerShell si trova nello stato Disconnesso.  Connettere questa sessione di PowerShell e quindi riprovare.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Il tentativo di connessione al comando remoto non è riuscito.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché è in corso l'arresto di un comando. Attendere il completamento dell'arresto del comando e quindi ripetere l'operazione.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Nessuno spazio di esecuzione disponibile per eseguire comandi in questo thread. È possibile specificarne uno nella proprietà DefaultRunspace del tipo System.Management.Automation.Runspaces.Runspace. L'istanza corrente di PowerShell non contiene alcun comando da richiamare.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Non è possibile creare un oggetto PowerShell che usa lo spazio di esecuzione corrente perché non è disponibile alcuno spazio di esecuzione corrente.  Lo spazio di esecuzione corrente potrebbe essere in fase di avvio, ad esempio quando viene creato con uno stato sessione iniziale.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ProgressRecordStrings.it.resx b/src/System.Management.Automation/resources/it/ProgressRecordStrings.it.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ProgressRecordStrings.it.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ProviderBaseSecurity.it.resx b/src/System.Management.Automation/resources/it/ProviderBaseSecurity.it.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ProviderBaseSecurity.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/ProxyCommandStrings.it.resx b/src/System.Management.Automation/resources/it/ProxyCommandStrings.it.resx
new file mode 100644
index 00000000000..b319bc64c6d
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/ProxyCommandStrings.it.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>The 'help' parameter is not recognized as a valid HelpInfo object created by the 'get-help' command.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>The proxy command cannot be generated because the CommandMetadata has no name.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/RegistryProviderStrings.it.resx b/src/System.Management.Automation/resources/it/RegistryProviderStrings.it.resx
new file mode 100644
index 00000000000..3356648d9e2
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/RegistryProviderStrings.it.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Remove Key</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Copy Key</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Move Item</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Set Property</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Clear Property</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>New Property</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Remove Property</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Rename property.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Copy Property</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Move Property</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>The operation was not processed. The location that was provided does not allow this operation.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>The operation is not allowed on the source location.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>The operation is not allowed on the destination location.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>The configuration settings for the local computer</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>The software settings for the current user</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>A key in this path already exists.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>The operation cannot be performed because the destination path is subordinate to the source path.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>The property already exists.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>Property {0} does not exist at path {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>The registry key at the specified path does not exist.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Could not bind parameter 'Type'. Could not convert "{0}" to "{1}". The possible enumeration values are "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown".</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Key {0} has been created, but a default value could not be set.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Unable to create a drive with the specified root. The root path does not exist.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>The item cannot be renamed because an item with that name already exists in the same container.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Registry key name must start with a valid base key name.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>The subkey argument is not valid.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Cannot delete a subkey tree because the subkey does not exist.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>No value exists with that name.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>The enum value {0} is not valid.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>A value argument must be specified.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>A name argument must be specified.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>The specified RegistryValueKind is a value that is not valid.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue does not allow a String[] that contains a null String reference.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Registry subkeys should not be greater than 255 characters.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>A non-empty subkey name must be specified.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>The type of the value object did not match the specified RegistryValueKind or the object could not be properly converted.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue does not support arrays of type '{0}'. Only Byte[] and String[] are supported.</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>The specified registry key does not exist.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>The length of the specified value name exceeds the maximum of 16383 characters.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>The size of the specified value data exceeds the maximum of 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>The specified registry subkey does not exist.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>The specified RegistryKeyPermissionCheck value is not valid.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>The registry key has subkeys; recursive removals are not supported by this method.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Cannot create a KTM handle without a Transaction.Current or specified transaction.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>The specified transaction or Transaction.Current must match the transaction used to create or open this TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>The TransactedRegistryKey object is not associated with a transaction because it is for a predefined key.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>Requested registry access is not allowed.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Access to the registry key '{0}' is denied.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Cannot write to the registry key.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Cannot access a closed registry key.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Unknown error: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Registry transactions are not supported on this platform.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>The specified handle is not valid.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/RemotingErrorIdStrings.it.resx b/src/System.Management.Automation/resources/it/RemotingErrorIdStrings.it.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/RemotingErrorIdStrings.it.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/RunspaceInit.it.resx b/src/System.Management.Automation/resources/it/RunspaceInit.it.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/RunspaceInit.it.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/RunspacePoolStrings.it.resx b/src/System.Management.Automation/resources/it/RunspacePoolStrings.it.resx
new file mode 100644
index 00000000000..30f7fe69fe4
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/RunspacePoolStrings.it.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>La dimensione massima del pool non può essere inferiore a 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>La dimensione minima del pool non può essere inferiore a 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>La dimensione minima del pool non può essere maggiore della sua dimensione massima.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Lo stato del pool di spazi di esecuzione non è valido per questa operazione.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché lo stato del pool di spazi di esecuzione non è "{0}". Lo stato attuale è "{1}".</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Non è possibile aprire il pool di spazi di esecuzione perché lo stato non è "BeforeOpen". Lo stato attuale è "{0}".</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>L'oggetto {0} non è stato creato chiamando {1} nell'istanza RunspacePool attuale.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Non è possibile rilasciare lo spazio di esecuzione nel pool attuale perché non appartiene al pool attuale.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Non è possibile modificare la proprietà dopo l'apertura del pool di spazi di esecuzione.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Questo spazio di esecuzione non supporta le operazioni di collegamento e scollegamento.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Non è possibile eseguire l'operazione perché lo stato del pool di spazi di esecuzione è Scollegato.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Il server non supporta l'operazione di scollegamento.  Il server deve eseguire PowerShell 3.0 o versioni successive per supportare lo scollegamento del pool di spazi di esecuzione remoti.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Questo pool di spazi di esecuzione {0} non è configurato per fornire oggetti PowerShell scollegati per i comandi in esecuzione nel server remoto.  Usare il metodo statico GetRunspacePools() della classe RunspacePool per eseguire query sul server e restituire gli oggetti del pool di spazi di esecuzione configurati per questa operazione.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Questo pool di spazi di esecuzione non può essere collegato perché il pool di spazi di esecuzione lato server corrispondente è collegato a un altro client.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>Il server non supporta ResetRunspaceState.  Il server deve eseguire PowerShell 5.0 o versioni successive.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/RunspaceStrings.it.resx b/src/System.Management.Automation/resources/it/RunspaceStrings.it.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/RunspaceStrings.it.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/SecuritySupportStrings.it.resx b/src/System.Management.Automation/resources/it/SecuritySupportStrings.it.resx
new file mode 100644
index 00000000000..b0b21af312c
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/SecuritySupportStrings.it.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Non è possibile caricare il certificato. '{0}' deve risolversi in un percorso del file system.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Non è possibile utilizzare il certificato '{0}' per la crittografia. I certificati di Crittografia devono contenere l'utilizzo della chiave Crittografia dati o Crittografia chiave e includere l'Utilizzo chiavi avanzato della crittografia del documento ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Non è possibile caricare il certificato. L'identificatore '{0}' corrisponde a più certificati. Per crittografare per più destinatari, specificare più valori distinti per il parametro '{1}', anziché un carattere jolly che corrisponde a più certificati.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Non è possibile caricare il certificato di crittografia. L'impostazione del certificato '{0}' non rappresenta un certificato valido con codifica Base64, né un certificato valido tramite file, directory, identificazione personale o nome soggetto.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>AVVISO: il certificato '{0}' contiene una chiave privata. I certificati di registrazione eventi protetti usati per la crittografia devono contenere solo la chiave pubblica.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ERRORE: non è possibile proteggere il messaggio del registro eventi '{0}': {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ERRORE: non è possibile trovare o usare il certificato: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>La chiave di sessione non è disponibile per crittografare la stringa sicura.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Offset del buffer non valido.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Dati della chiave pubblica non validi.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Non è possibile importare la chiave pubblica.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Dati della chiave di sessione non validi.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Il file di script '{0}' è bloccato dall'esecuzione dai criteri di sistema.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>È stato restituito un valore sconosciuto per l'applicazione dei criteri del file di script: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Lettura file di script</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Il file di script '{0}' non è considerato attendibile dai criteri e verrà eseguito in modalità ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/Serialization.it.resx b/src/System.Management.Automation/resources/it/Serialization.it.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/Serialization.it.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/SessionStateProviderBaseStrings.it.resx b/src/System.Management.Automation/resources/it/SessionStateProviderBaseStrings.it.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/SessionStateProviderBaseStrings.it.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/SessionStateStrings.it.resx b/src/System.Management.Automation/resources/it/SessionStateStrings.it.resx
new file mode 100644
index 00000000000..fe2cce4e4e4
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/SessionStateStrings.it.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Non è possibile trovare il percorso '{0}' perché non esiste.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/StringDecoratedStrings.it.resx b/src/System.Management.Automation/resources/it/StringDecoratedStrings.it.resx
new file mode 100644
index 00000000000..91cde1e24df
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/StringDecoratedStrings.it.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Questo metodo supporta solo "ANSI" o "PlainText".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/SubsystemStrings.it.resx b/src/System.Management.Automation/resources/it/SubsystemStrings.it.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/SubsystemStrings.it.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/SuggestionStrings.it.resx b/src/System.Management.Automation/resources/it/SuggestionStrings.it.resx
new file mode 100644
index 00000000000..9f898815d77
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/SuggestionStrings.it.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>Il comando "{0}" non è stato trovato, ma esiste nella posizione attuale.
+Per impostazione predefinita, PowerShell non carica i comandi dalla posizione attuale (vedere "Get-Help about_Command_Precedence").
+
+Se questo comando è considerato attendibile, eseguire il comando seguente:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>I comandi più simili sono:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/TabCompletionStrings.it.resx b/src/System.Management.Automation/resources/it/TabCompletionStrings.it.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/TabCompletionStrings.it.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/TransactionStrings.it.resx b/src/System.Management.Automation/resources/it/TransactionStrings.it.resx
new file mode 100644
index 00000000000..8c812d8aa9e
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/TransactionStrings.it.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Non è possibile utilizzare la transazione. Nessuna transazione è attiva.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Non è possibile eseguire il commit della transazione. Nessuna transazione è attiva.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Non è possibile ripristinare la transazione allo stato precedente perché non è attiva alcuna transazione.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Non è possibile ripristinare la transazione allo stato precedente. È già stato eseguito il commit della transazione.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Non è possibile eseguire il commit della transazione. È già stato eseguito il commit della transazione.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Non è possibile eseguire il commit della transazione. La transazione è stata ripristinata allo stato precedente o è scaduta.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Non è possibile ripristinare la transazione allo stato precedente. La transazione è già stata ripristinata allo stato precedente o è scaduta.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Non è possibile impostare la transazione attiva. Nessuna transazione è stata creata.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Non è possibile impostare la transazione attiva. La transazione attiva è stata ripristinata allo stato precedente o è scaduta.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>Per questo cmdlet è necessaria una transazione attiva. La transazione corrente è già stata confermata o ripristinata allo stato precedente.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>Questo cmdlet richiede una transazione. Eseguire di nuovo il comando con il parametro -UseTransaction.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Non è possibile utilizzare la transazione. Nessuna transazione è stata avviata.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Non è possibile utilizzare la transazione. È stato eseguito il commit della transazione.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Non è possibile utilizzare la transazione. La transazione è stata ripristinata allo stato precedente o è scaduta.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Non è possibile utilizzare la transazione. La transazione è scaduta.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>La transazione di base non è stata impostata.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>La transazione di base non è attiva.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>Non è possibile impostare la transazione di base dopo la creazione di altre transazioni.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/TypesXmlStrings.it.resx b/src/System.Management.Automation/resources/it/TypesXmlStrings.it.resx
new file mode 100644
index 00000000000..3f34bb972ae
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/TypesXmlStrings.it.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Errore: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}): errore nel tipo "{3}": {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Il nodo "{0}" deve comparire una sola volta sotto "{1}". Il nodo padre, "{1}", verrà ignorato.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Il nodo {0} non è consentito. I seguenti nodi sono consentiti: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Il nodo "{0}" non deve avere un testo interno.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Il nodo "{0}" deve avere un testo interno.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Il nodo "{0}" non è stato trovato. Deve comparire una sola volta sotto "{1}". Il nodo padre, "{1}", verrà ignorato.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>Il nodo "Type" deve avere "Members", "TypeConverters" o "TypeAdapters".</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Non è possibile creare un'istanza del convertitore di tipi per il tipo {0} a causa dell'eccezione: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell non può creare un'istanza dell'adattatore di tipi per il tipo {0} a causa della seguente eccezione: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Il tipo adattato "{0}" non è valido.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>TypeConverter è stato ignorato perché è già presente.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>TypeAdapter è stato ignorato perché è già presente.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Il tipo "{0}" deve essere TypeConverter o PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Il tipo "{0}" deve essere PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>Il membro {0} è già presente.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Il seguente nome del membro è riservato: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Eccezione: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty deve avere un getter o un setter.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty deve avere un getter o un setter.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1}: {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>Il valore deve essere TRUE o FALSE anziché {0}.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Il nodo "{0}" non deve avere l'attributo "{1}".</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: il file non è stato trovato.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: il file è stato ignorato perché era già stato caricato da {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Non è possibile trovare la chiave del Registro di sistema: {0}{1}. Verrà usato {2} per caricare i file di configurazione.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Non è possibile trovare il percorso {0} specificato nella chiave del Registro di sistema: {1}{2}. Verrà usato {3} per caricare i file di configurazione.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: il file è stato ignorato perché non ha l'estensione ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: il file è stato ignorato a causa della seguente eccezione di convalida: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Il membro "{0}" deve essere una nota.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Non è possibile convertire la nota "{0}": "{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Non usare il membro "{0}" qui.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>Il membro "{0}" deve avere il tipo "{1}".</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}" deve essere presente quando "{1}" è "{2}" e "{3}" è "{4}".</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>A causa di un errore precedente, tutte le impostazioni di serializzazione sono state ignorate.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" non è un membro standard e verrà ignorato.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>Il percorso {0} non è assoluto. Specificare un percorso assoluto del file del tipo.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>TypeTable non può essere aggiornato perché potrebbe essere stato creato al di fuori dello spazio di esecuzione.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Si sono verificati errori durante il caricamento di TypeTable. Esaminare la proprietà Errors per ottenere messaggi di errore dettagliati.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Errore in TypeData "{0}": {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" deve avere un valore per la proprietà "{1}".</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" non deve avere null o una stringa vuota nella proprietà "{1}".</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Il tipo "{0}" non è stato trovato. Il valore del nome del tipo deve essere il nome completo del tipo. Verificare il nome del tipo ed eseguire di nuovo il comando.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData deve avere "Members", "TypeConverters", "TypeAdapters" o "StandardMembers".</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Una tabella dei tipi condivisa non può essere aggiornata con più di una voce.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/VerbDescriptionStrings.it.resx b/src/System.Management.Automation/resources/it/VerbDescriptionStrings.it.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/VerbDescriptionStrings.it.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/it/WildcardPatternStrings.it.resx b/src/System.Management.Automation/resources/it/WildcardPatternStrings.it.resx
new file mode 100644
index 00000000000..106bd4e5aad
--- /dev/null
+++ b/src/System.Management.Automation/resources/it/WildcardPatternStrings.it.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Il criterio di caratteri jolly specificato non è valido: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Authenticode.ja.resx b/src/System.Management.Automation/resources/ja/Authenticode.ja.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Authenticode.ja.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/AuthorizationManagerBase.ja.resx b/src/System.Management.Automation/resources/ja/AuthorizationManagerBase.ja.resx
new file mode 100644
index 00000000000..a40a0e310d4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/AuthorizationManagerBase.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>AuthorizationManager チェックに失敗しました。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/AutomationExceptions.ja.resx b/src/System.Management.Automation/resources/ja/AutomationExceptions.ja.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/AutomationExceptions.ja.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CatalogStrings.ja.resx b/src/System.Management.Automation/resources/ja/CatalogStrings.ja.resx
new file mode 100644
index 00000000000..09f1e9136da
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CatalogStrings.ja.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>カタログ定義ファイルを生成できません。</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>ファイル '{0}' をカタログに追加しています。カタログ内のファイルの相対パスは '{1}' です。</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>カタログからのファイル {0} の検証をスキップしています。</value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>{1} のハッシュを持つファイル {0} がカタログ内に見つかりました。</value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>カタログのパスには、同じ相対パス {0} を持つ複数のファイルが含まれています。</value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>{1} のハッシュを持つファイル {0} がディスクに見つかりました。</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>パスからのファイル {0} の検証をスキップしています。</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>指定されたハッシュ アルゴリズム {0} のカタログ管理者コンテキストへのハンドルを取得できません。</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>ファイル {0} のハッシュを作成できません。</value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>カタログ ファイル {0} を開けません。</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>カタログ バージョンが無効です。カタログのバージョン {0} およびバージョン {1} のみがサポートされています。</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>カタログ定義ファイルを開けません。</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>カタログ内にファイル メンバー {0} の複数のエントリが見つかりました。</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>カタログ メンバー {0} のファイル名またはパスが見つかりません。</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>ハッシュするファイル {0} が見つかりません。</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>ハッシュを計算するファイル {0} を読み取れません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CimInstanceTypeAdapterResources.ja.resx b/src/System.Management.Automation/resources/ja/CimInstanceTypeAdapterResources.ja.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CimInstanceTypeAdapterResources.ja.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CmdletizationCoreResources.ja.resx b/src/System.Management.Automation/resources/ja/CmdletizationCoreResources.ja.resx
new file mode 100644
index 00000000000..4dbb017bce4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CmdletizationCoreResources.ja.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>'{0}' クラスのコマンドレット</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>次のファイルの Cmdlet Definition XML を処理できません: {0}。 {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>ObjectModelWrapper 属性を処理できません。{0} 型は、複数のパラメーター セットを定義します。Cmdlet Definition XML で ObjectModelWrapper 属性に有効な型が指定されていることを確認してから、再試行してください。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>ObjectModelWrapper 属性を処理できません。{0} 型はオープン ジェネリック型です。 Cmdlet Definition XML で ObjectModelWrapper 属性に有効な型が指定されていることを確認してから、再試行してください。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>ObjectModelWrapper 属性を処理できません。{0} 型は次のクラスから派生していません: {1}。 Cmdlet Definition XML で ObjectModelWrapper 属性に有効な型が指定されていることを確認してから、再試行してください。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>ObjectModelWrapper 属性を処理できません。{0} 型では、無視される {2} 属性パラメーターを使用して、{1} コマンドレット パラメーターを定義します。 Cmdlet Definition XML で ObjectModelWrapper 属性に有効な型が指定されていることを確認してから、再試行してください。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>{1} コマンドレットの {0} パラメーターを定義できません。 パラメーター名は、{2} クラスによって既に定義されています。 Cmdlet Definition XML でパラメーター名を変更してから、再試行してください。</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>{1} コマンドレットの {0} パラメーターを定義できません。パラメーター名は、{2} XML 要素内で既に定義されています。Cmdlet Definition XML でパラメーター名を変更してから、再試行してください。</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>EnumName 属性の値を有効な C# 識別子に変換できません: {0}。Cmdlet Definition XML で EnumName 属性を確認してから、再試行してください。</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>その &lt;Enum EnumName="{0}" ...&gt; 要素を処理できません。  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>リモート コンピューターから無効な CDXML ファイルが返されました。次のコマンドレット アダプターは、リモート コンピューターから CDXML モジュールをインポートする場合にはサポートされていません: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CommandBaseStrings.ja.resx b/src/System.Management.Automation/resources/ja/CommandBaseStrings.ja.resx
new file mode 100644
index 00000000000..3b0a6bf9ca3
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CommandBaseStrings.ja.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>この操作を続行しますか?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>はい(&amp;Y)</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>操作の次のステップのみを続行します。</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>すべてはい(&amp;A)</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>操作のすべてのステップを続行します。</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>いいえ(&amp;N)</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>この操作をスキップし、次の操作に進みます。</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>すべていいえ(&amp;L)</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>この操作とそれ以降のすべての操作をスキップします。</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>このコマンドを停止します。</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>コマンドの停止(&amp;H)</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>一時停止(&amp;S)</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>現在のパイプラインを一時停止し、コマンド プロンプトに戻ります。パイプラインを再開するには、"{0}" と入力します。</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>プログラム "{0}" は 0 以外の終了コードで終了しました: {1} ({2})。</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>ターゲット "{1}" に対して操作 "{0}" を実行しています。</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>この操作を実行しますか?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>確認</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>実行中のコマンドは、設定変数 "{0}" または共通パラメーターが Stop に設定されているため停止しました: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>実行中のコマンドは、設定変数 "{0}" または共通パラメーターが Stop に設定されているため停止しました。</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>実行中のコマンドは、設定変数 "{0}" または共通パラメーターが無効な次の値に設定されているため停止しました: "{1}"。</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>ユーザーが [停止] オプションを選択したため、実行中のコマンドが停止しました。</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>ユーザーがコマンドを中断したため、実行中のコマンドが停止しました。</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>PSCmdlet から派生したコマンドレットを直接呼び出すことはできません。 </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>コマンドレット '{0}' は、リモート セッションでパラメーター '{1}' をサポートしていません。</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>総数: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>推定合計数: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>不明な合計数</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>コマンド '{0}'</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>{0} は廃止されています。 {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>コマンド ラインに対する Exec 呼び出しがエラー番号 {0} で失敗しました: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>コマンド '{0}' が見つかりませんでした。指定されたコマンドは実行可能ファイルである必要があります。</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>スクリプト ブロック処理のドット ソース チェック</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>スクリプト ブロック '{0}' のドット ソース処理は、ConstrainedLanguage モードでは失敗します。これは、その言語モード '{1}' が現在の言語モード '{2}' と一致しないためです。</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>コマンド検索機能</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>モジュール '{1}' のコマンド '{0}' は信頼されていないため、ConstrainedLanguage モードではアクセスできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ConsoleInfoErrorStrings.ja.resx b/src/System.Management.Automation/resources/ja/ConsoleInfoErrorStrings.ja.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ConsoleInfoErrorStrings.ja.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CoreClrStubResources.ja.resx b/src/System.Management.Automation/resources/ja/CoreClrStubResources.ja.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CoreClrStubResources.ja.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CredUI.ja.resx b/src/System.Management.Automation/resources/ja/CredUI.ja.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CredUI.ja.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Credential.ja.resx b/src/System.Management.Automation/resources/ja/Credential.ja.resx
new file mode 100644
index 00000000000..98ddd690d2f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Credential.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>資格情報をシリアル化できません。このコマンドがワークフローを開始している場合、ワークフローが開始されるプロセスには資格情報をシリアル化するアクセス許可がないため、資格情報を永続化できません。
+
+-- PSSession でワークフローがローカル コンピューターに対して開始された場合は、セッションを作成したコマンドに EnableNetworkAccess パラメーターを追加します。
+-- PSSession でワークフローがリモート コンピューターに対して開始された場合は、セッションを作成したコマンドに、CredSSP の値を持つ Authentication パラメーターを追加します。または、RunAsUser プロパティ値を持つセッション構成に接続します。</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>UserName の値が正しい形式ではありません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/CredentialAttributeStrings.ja.resx b/src/System.Management.Automation/resources/ja/CredentialAttributeStrings.ja.resx
new file mode 100644
index 00000000000..1606c61bbf7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/CredentialAttributeStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell 資格情報の要求</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>資格情報を入力してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/DebuggerStrings.ja.resx b/src/System.Management.Automation/resources/ja/DebuggerStrings.ja.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/DebuggerStrings.ja.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/DescriptionsStrings.ja.resx b/src/System.Management.Automation/resources/ja/DescriptionsStrings.ja.resx
new file mode 100644
index 00000000000..8a4f4de7f6f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/DescriptionsStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} を null 値または空にすることはできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/DiscoveryExceptions.ja.resx b/src/System.Management.Automation/resources/ja/DiscoveryExceptions.ja.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/DiscoveryExceptions.ja.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/EnumExpressionEvaluatorStrings.ja.resx b/src/System.Management.Automation/resources/ja/EnumExpressionEvaluatorStrings.ja.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/EnumExpressionEvaluatorStrings.ja.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ErrorCategoryStrings.ja.resx b/src/System.Management.Automation/resources/ja/ErrorCategoryStrings.ja.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ErrorCategoryStrings.ja.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ErrorPackage.ja.resx b/src/System.Management.Automation/resources/ja/ErrorPackage.ja.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ErrorPackage.ja.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/EtwLoggingStrings.ja.resx b/src/System.Management.Automation/resources/ja/EtwLoggingStrings.ja.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/EtwLoggingStrings.ja.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/EventResource.ja.resx b/src/System.Management.Automation/resources/ja/EventResource.ja.resx
new file mode 100644
index 00000000000..e51b96927f1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/EventResource.ja.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>A message was not found for event id PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Scheduled Job {0} started at {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Scheduled Job {0} completed at {1} with state {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Scheduled Job Exception {0}:
+ Message: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Experimental Feature Initialization: Ignore the experimental feature '{0}' from the config file. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Experimental Feature Initialization: Failed to read the config file.
+ Exception: {0}
+ Message: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Workflow plugin loaded.
+ 	 EndpointName: {0}
+ 	 User: {1}
+ 	 HostingMode: {2}
+ 	 Protocol: {3}
+ 	 Configuration:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Workflow execution started.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Workflow state changed.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Workflow plugin has been requested for a shutdown.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Workflow plugin restarted.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Workflow is resuming.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>A quota limit that was set for the endpoint was exceeded.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Workflow has resumed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Workflow runspace pool was created.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Activity was queued for execution.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Activity execution started.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Workflow is being imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Workflow has been imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Workflow could not be imported from a XAML file because of an error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Workflow validation started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Workflow validation succeeded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Workflow validation failed with error.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Workflow activity validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Workflow activity could not be validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Activity execution failed.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Runspace availability changed.
+ 	 RunspaceId: {0}
+ 	 Availability: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Runspace state changed.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Workflow loaded for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Workflow unloaded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Workflow execution cancelled.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Workflow execution aborted.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Workflow cleanup operation executed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Persisted workflow loaded from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Workflow data was deleted from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Starting remove job.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Job state changed.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Job error.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Job created for workflow (child job).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Parent job created for workflow.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>All required jobs were created for workflow execution.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Child job removed for workflow.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>An error occurred while removing job.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Loading workflow for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Workflow execution finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelling workflow execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Aborting workflow execution.
+ 	 WorkflowId: {0}
+ 	 Reason: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Unloading workflow.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Forced workflow shutdown started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Forced workflow shutdown finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>An error occurred while forcefully shutting down a workflow.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persisting workflow to disk.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Workflow persisted to disk.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Activity execution finished.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Workflow execution error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>A new PowerShell endpoint was registered.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Endpoint configuration modified.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Endpoint configuration unregistered.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Endpoint configuration disabled.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Endpoint configuration enabled.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Out of process runspace started.
+ 	 Command: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Parameter splatting was performed during workflow execution.
+ 	 Parameters: {0}
+ 	 Computers: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Workflow engine started.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Workflow manager instantiated with
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Path: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Computer Name $null or . resolve to LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolving to default scheme http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Remote shell name resolved to default PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creating Scriptblock text ({0} of {1}):
+{2}
+
+ScriptBlock ID: {3}
+Path: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Started invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Completed invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlating activity id's.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Class Name = {0}
+Method Name = {1}
+Workflow GUID = {2}
+Message = {3}
+{4}
+Activity Name = {5}
+Activity GUID = {6}
+Parameters = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating Runspace object
+ 	 Instance Id: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating RunspacePool object
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Opening RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Runspace state changed to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Attempting session creation retry {0} for error code {1} on session Id {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell has started an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell has ended an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>An error has occurred in PowerShell IPC listening thread on process: {0} in AppDomain: {1}.  Error Message: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>PowerShell IPC connect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>PowerShell IPC disconnect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Scheme is {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Test analytic message</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Connection Parameters are
+ Connection URI: {0}
+ Resource URI: {1}
+ User: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Thumb Print: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Received object with Runspace Id: {0} Command Id: {1} Destination: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0}. Establishing a connection using WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0}. Callback received for WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0}. Closing shell using WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0}. Callback received for WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Sending data of size {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Callback received for WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Placing Receive request using WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Received Data of size {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Establishing a command connection using WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Callback received for command connection</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Closing transport for command</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for command close</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Sending signal with code {2} using WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Runspace Id: {0}. Connection is getting redirected to Uri: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Server is sending data of size {2} to client. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Request {0}. Creating a server remote session. UserName: {1} Custom Shell Id: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Reporting context for request: {0} Context Reported: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Reporting operation complete for request: {0}
+ Error Code: {1}
+ Error Message: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Shell Context {0}. Request Id {1}. Creating a commonad session for running a command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Stopping command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Received data from client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Client sent a receive request so that server can send data.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} IsReceiveOperation {2}. Got close operation request.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Loading assembly {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Loading type {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Received remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Sent remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Shutting down winrm service.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Successfully rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Rehydrated object is of type: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Failed to rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Type cast exception: {2}
+ 	 Type cast inner exception: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Serialization depth has been overridden.
+ 	 Serialized type name: {0}
+ 	 Original depth: {1}
+ 	 Overridden depth: {2}
+ 	 Current depth below top level: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Serialization mode has been overridden.
+ 	 Serialized type name: {0}
+ 	 Overridden mode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Serialization of a script property has been skipped, because there is no runspace to use for evaluation of the property.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Getter script: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Serialization of a property has been skipped, because property getter failed.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Exception from property getter: {2}
+ 	 Inner exception from property getter: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Serialization of an enumerable object might not be complete, because object being enumerated threw an exception.
+ 	 Type of object being enumerated: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serialization called object's ToString method which failed.
+ 	 Type of object: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Maximum depth below top level has been reached, forcing object to be serialized as strings.
+ 	 Object type at max depth: {0}
+ 	 Property name at max depth: {1}
+ 	 Depth: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>XmlException has been thrown by the deserializer (most likely indicating incorrect clixml format).
+ 	 Line number: {0} Line position: {1}
+ 	 Exception: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Serialization of specified properties failed, because one of the specified properties was missing.
+ 	 Type of object: {0}
+ 	 Property name: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>PowerShell console is starting up</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>PowerShell console is ready for user input</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Tracing ErrorRecord:
+ Message: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Exception Details:
+ Message : {5}
+ Stack Trace: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exception:
+ Message: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Tracing PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Tracing Job:
+ Id: {0}
+ InstanceId: {1}
+ Name: {2}
+ Location: {3}
+ State: {4}
+ Command: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Trace Information:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Trace Information:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Starting invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Ending invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>END WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob with Guid {0} added to ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob with Guid {0} associated with remote ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>END Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>END Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>BEGIN Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>END Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Persistence store has reached its maximum specified size</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run script file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run a user-selected script from file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the current command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is resuming the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping into debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping over debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping out of debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is setting the breakpoint at line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE has hit a breakpoint on line #: {0} of file {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/EventingResources.ja.resx b/src/System.Management.Automation/resources/ja/EventingResources.ja.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/EventingResources.ja.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ExperimentalFeatureStrings.ja.resx b/src/System.Management.Automation/resources/ja/ExperimentalFeatureStrings.ja.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ExperimentalFeatureStrings.ja.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ExtendedTypeSystem.ja.resx b/src/System.Management.Automation/resources/ja/ExtendedTypeSystem.ja.resx
new file mode 100644
index 00000000000..3d161dc5cd2
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ExtendedTypeSystem.ja.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>プロパティ "{0}" は見つかりませんでした。</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} は有効なパスではありません。</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/FileSystemProviderStrings.ja.resx b/src/System.Management.Automation/resources/ja/FileSystemProviderStrings.ja.resx
new file mode 100644
index 00000000000..c13b776b50a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/FileSystemProviderStrings.ja.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>{0} を {1} にコピーしています</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>{0} から {1} へ</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/FormatAndOutXmlLoadingStrings.ja.resx b/src/System.Management.Automation/resources/ja/FormatAndOutXmlLoadingStrings.ja.resx
new file mode 100644
index 00000000000..f0e06dc756a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/FormatAndOutXmlLoadingStrings.ja.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: XML 要素 {2} では属性が許可されていません。</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ノード {2} に子オブジェクトを含めることはできません。</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} が無効です。</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 既定の {2} が少なくとも 1 つ必要です。</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 既定の {2} が複数存在することはできません。</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: コントロール名を null 値または空にすることはできません。</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 帯域外ビューには CustomControl または ListControl のみを含めることができます。</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 帯域外ビューに GroupBy を含めることはできません。</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ビューを読み込めません。</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: "{2}" は有効なアラインメント値ではありません。</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 正の整数が必要です。</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 列ヘッダー定義が無効です。すべてのヘッダーが破棄されます。</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 行項目数 = 代替セット # {3} の{2} が、既定の行項目数 = {4} と一致しません。</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ヘッダー項目数 = {2} が既定の行項目数 = {3} と一致しません。</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 少なくとも 1 つのリスト ビュー項目を指定する必要があります。</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: プロパティ エントリが無効です。</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 定義リストがありません。</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ブール値が必要です。</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 負でない整数が必要です。</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 整数が必要です。</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 内部テキスト値がありません。</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: カスタム コントロール トークン リストを空にすることはできません。</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} が読み込めませんでした。</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました。式がないと {2} を指定できません。</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} を式で指定することはできません。</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 書式指定文字列がありません。</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: スクリプト ブロックのテキストがありません。</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: プロパティがありません。</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: スクリプト ブロック "{2}" が無効です。</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: アセンブリ {4} のリソース {3} から文字列 {2} が見つかりません。</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: アセンブリ {3} のリソース {2} が見つかりません。</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: アセンブリ {2} が見つかりません。</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ノードは XmlElement である必要があります。</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 式が必要です。</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 式がないと、コントロールまたはラベルを持つことができません。</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: コントロールとラベルを同時に持つことはできません。</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: SelectionSetName と TypeName を同時に指定することはできません。</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ビューを適用するための型または条件が指定されていません。</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} 値が無効です。</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: 重複するノードが存在します。</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} と {3} は相互に排他的です。</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2}、{3}、{4} は相互に排他的です。</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} は不明なノードです。</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} は不明な属性です。</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} 属性がありません。</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ノード {2} がありません。</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: ノードが {2} に見つかりません。</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} は空のノードです。</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>ファイル {1} の XPath {0} でエラーが発生しました: {2} は空の属性です。</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>ファイル {0} でエラーが発生しました: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>ファイル {0} にエラーが多すぎます。</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>フォーマット データ ファイルの読み込み中にエラーが発生しました: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(グローバル アセンブリ キャッシュ) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}、{1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>パス {0} は完全修飾パスではありません。完全修飾形式のファイル パスを指定します。</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>FormatTable が実行空間の外部に作成されている可能性があるため、FormatTable を更新できません。</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>FormatTable の読み込み中にエラーが発生しました。"Errors" プロパティの内容を表示して、詳細なエラー メッセージを取得します。</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>データ "{0}" の書式設定中にエラーが発生しました: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: ヘッダー項目数 = {2} が既定の行項目数 = {3} と一致しません。</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: データ "{2}" の書式設定が無効です。</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: スクリプト ブロック "{2}" が無効です。</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: {2} が読み込めませんでした。</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名が {0} のビュー データでエラーが発生しました: TableControl に含める {2} は 1 つだけです。</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: 既定の {2} が少なくとも 1 つ必要です。</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名 {0} のビュー データでエラーが発生しました: 少なくとも 1 つのリスト ビュー項目を指定する必要があります。</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>インデックス {1} で型名が {0} のビュー データでエラーが発生しました: 既定の {2} が複数存在することはできません。</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>型 "{0}" の書式設定データにエラーが多すぎます。</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>共有フォーマット テーブルを複数のエントリで更新することはできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/FormatAndOut_MshParameter.ja.resx b/src/System.Management.Automation/resources/ja/FormatAndOut_MshParameter.ja.resx
new file mode 100644
index 00000000000..f6b00af0cde
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/FormatAndOut_MshParameter.ja.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>{0} を次のいずれかの型に変換できません: {1}。</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>パラメーターの値が null でした。次のいずれかの型が必要です: {0}。</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>重複したキー "{0}" が "{1}" と競合しています。</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>"{0}" キーの型 {1} は無効です。想定される型は {2} です。</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>"{0}" キーの型 {1} は無効です。想定される型は {2} です。</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>{0} キーがあいまいです。{1} と {2} が競合しています。</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>キーの値を null にすることはできません。</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>{0} キーの型が無効です。キーは文字列である必要があります。</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>{0} キーに値がありません。</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>{0} の必須エントリがありません。</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>{0} キーが無効です。</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>キー "{1}" の値 "{0}" が無効です。有効な値は {2} です。</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>キー "{1}" の値 "{0}" は 0 より大きくする必要があります。</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>キー "{0}" の書式設定文字列は空にできません。</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>"{0}" キーに空の文字列値を指定することはできません。</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>空の文字列値は使用できません。</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>"{0}" キーの値 "{1}" にワイルドカード文字を含めることはできません。</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>ワイルドカード文字は "{0}" では使用できません。</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>EnumerableExpansion 値は無効です。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/FormatAndOut_format_xxx.ja.resx b/src/System.Management.Automation/resources/ja/FormatAndOut_format_xxx.ja.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/FormatAndOut_format_xxx.ja.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/FormatAndOut_out_xxx.ja.resx b/src/System.Management.Automation/resources/ja/FormatAndOut_out_xxx.ja.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/FormatAndOut_out_xxx.ja.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/GetErrorText.ja.resx b/src/System.Management.Automation/resources/ja/GetErrorText.ja.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/GetErrorText.ja.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/HelpDisplayStrings.ja.resx b/src/System.Management.Automation/resources/ja/HelpDisplayStrings.ja.resx
new file mode 100644
index 00000000000..9428279a61b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/HelpDisplayStrings.ja.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>名前</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>例</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>回答</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>なし</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/HelpErrors.ja.resx b/src/System.Management.Automation/resources/ja/HelpErrors.ja.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/HelpErrors.ja.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/HistoryStrings.ja.resx b/src/System.Management.Automation/resources/ja/HistoryStrings.ja.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/HistoryStrings.ja.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/HostInterfaceExceptionsStrings.ja.resx b/src/System.Management.Automation/resources/ja/HostInterfaceExceptionsStrings.ja.resx
new file mode 100644
index 00000000000..4efbaa312b9
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/HostInterfaceExceptionsStrings.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>"{0}" の種類のエラーが発生しました。</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>ホスト プログラムまたはコマンドの種類がユーザーによる操作をサポートしていないため、ユーザーにプロンプトを表示するコマンドが失敗しました。ユーザーによる操作をサポートするホスト プログラム (PowerShell コンソールなど) を試し、ユーザーによる操作をサポートしていないコマンドの種類からプロンプト関連のコマンドを削除してください。</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>ホスト プログラムまたはコマンドの種類がユーザーによる操作をサポートしていないため、ユーザーにプロンプトを表示するコマンドが失敗しました。ホストは、次のメッセージを使用して確認を要求しようとしました: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>プールが閉じられているか、失敗したため、メソッドを呼び出すことができません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/InternalCommandStrings.ja.resx b/src/System.Management.Automation/resources/ja/InternalCommandStrings.ja.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/InternalCommandStrings.ja.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/InternalHostStrings.ja.resx b/src/System.Management.Automation/resources/ja/InternalHostStrings.ja.resx
new file mode 100644
index 00000000000..a172f1a2b22
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/InternalHostStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt は ExitNestedPrompt ほど頻繁に呼び出されていません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/InternalHostUserInterfaceStrings.ja.resx b/src/System.Management.Automation/resources/ja/InternalHostUserInterfaceStrings.ja.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/InternalHostUserInterfaceStrings.ja.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Logging.ja.resx b/src/System.Management.Automation/resources/ja/Logging.ja.resx
new file mode 100644
index 00000000000..98e3330dfde
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Logging.ja.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>不明</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>構成ファイルで宣言されたエンジンの試験的機能 '{0}' は、現在の PowerShell に登録されていません。</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>構成ファイルで宣言された試験的機能 '{0}' が無効です。
+試験的な機能の名前は、次の規則に従う必要があります: 
+    エンジン機能名: 'PS[FeatureName]'
+    モジュール機能名: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Metadata.ja.resx b/src/System.Management.Automation/resources/ja/Metadata.ja.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Metadata.ja.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/MiniShellErrors.ja.resx b/src/System.Management.Automation/resources/ja/MiniShellErrors.ja.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/MiniShellErrors.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Modules.ja.resx b/src/System.Management.Automation/resources/ja/Modules.ja.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Modules.ja.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/MshHostRawUserInterfaceStrings.ja.resx b/src/System.Management.Automation/resources/ja/MshHostRawUserInterfaceStrings.ja.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/MshHostRawUserInterfaceStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/MshSignature.ja.resx b/src/System.Management.Automation/resources/ja/MshSignature.ja.resx
new file mode 100644
index 00000000000..9942c2b0156
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/MshSignature.ja.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>署名が検証されました。</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>ファイル {0} はデジタル署名されていません。現在のシステムでこのスクリプトを実行することはできません。スクリプトの実行と実行ポリシーの設定の詳細については、https://go.microsoft.com/fwlink/?LinkID=135170 で about_Execution_Policies を参照してください</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>ファイルのハッシュがデジタル署名に格納されているハッシュと一致しないため、ファイル {0} の内容が承認されていないユーザーまたはプロセスによって変更された可能性があります。指定されたシステムではスクリプトを実行できません。詳細については、Get-Help about_Signing を実行してください。</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>ファイル {0} は署名されていますが、署名者はこのシステムで信頼されていません。</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>システムが {0} ファイルに対する署名操作をサポートしていないため、ファイルに署名できません。</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>ファイル名拡張子を持たないファイルに対する署名操作がシステムでサポートされていないため、ファイルに署名できません。</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>現在のシステムと互換性がないため、署名を検証できません。</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>現在のシステムと互換性がないため、署名を検証できません。ハッシュ アルゴリズムが無効です。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/MshSnapInCmdletResources.ja.resx b/src/System.Management.Automation/resources/ja/MshSnapInCmdletResources.ja.resx
new file mode 100644
index 00000000000..4cb01e28b69
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/MshSnapInCmdletResources.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>操作を実行できません。指定されたコマンドレットは、カスタム シェルではサポートされていません。</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>パターン '{0}' に一致する PowerShell スナップインが見つかりませんでした。パターンを確認してから、コマンドを再試行してください。</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>指定されたスナップイン名の形式が無効でした。 PowerShell スナップイン名に使用できるのは、英数字、ダッシュ、アンダースコア、ピリオドのみです。名前を訂正してから、操作を再試行してください。</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>システム PowerShell モジュールであるため、PowerShell スナップイン {0} を追加できません。Import-Module を使用してモジュールを読み込みます。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/MshSnapinInfo.ja.resx b/src/System.Management.Automation/resources/ja/MshSnapinInfo.ja.resx
new file mode 100644
index 00000000000..12b8f3fea83
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/MshSnapinInfo.ja.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>PowerShell のレジストリ情報にアクセスできません。</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>PowerShell エンジンのレジストリ情報にアクセスできません。</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>PublicKeyToken の情報にアクセスできません。</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>PowerShell のバージョン {0} は、このコンピューターでは使用できません。</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>PowerShell スナップイン '{0}' が、このコンピューターにインストールされていません。</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>レジストリ キー {1} に必須の値 {0} が指定されていません。</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>必須の値 {0} は、レジストリ キー {1} に対して正しい形式ではありません。 必要な形式は 'string' です。</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>必須の値 {0} は、レジストリ キー {1} に対して正しい形式ではありません。 必要な形式は 'multistring' です。</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>必要な情報がレジストリに見つからないか、キー ファイルが見つかりません。 一部のコマンドレットを読み込めません。</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>PowerShell バージョン {0} には、登録済みのスナップインがありません。</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>リーダーが破棄されたため、文字列リソースを取得できません。</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>レジストリ キー {1} のバージョン値 {0} が指定されていないか、正しくありません。</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>PowerShell 型 {0} の [PSVersion] 属性が見つかりませんでした。[PSVersion(PowerShell SnapinBase.PSEngineVersion)] を使用して、型に PSVersion 属性を追加してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/NativeCP.ja.resx b/src/System.Management.Automation/resources/ja/NativeCP.ja.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/NativeCP.ja.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PSCommandStrings.ja.resx b/src/System.Management.Automation/resources/ja/PSCommandStrings.ja.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PSCommandStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PSConfigurationStrings.ja.resx b/src/System.Management.Automation/resources/ja/PSConfigurationStrings.ja.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PSConfigurationStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PSDataBufferStrings.ja.resx b/src/System.Management.Automation/resources/ja/PSDataBufferStrings.ja.resx
new file mode 100644
index 00000000000..deb282560d8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PSDataBufferStrings.ja.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>指定されたインデックスが 0 未満か、バッファー内の項目数より大きくなっています。インデックスは {0} - {1} の範囲内である必要があります。</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>null 参照を値の型に変換できません。</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>値を型 {0} から型 {1} に変換できません。</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>閉じられたバッファーにはオブジェクトを追加できません。Add および Insert 操作を正常に実行するには、バッファーが開いていることを確認してください。</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>SerializeInput プロパティは、PSDataCollection の PSObject 型に対してのみ設定できます。SerializeInput プロパティを false に設定するか、コレクションの型を PSObject に変更してください。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PSListModifierStrings.ja.resx b/src/System.Management.Automation/resources/ja/PSListModifierStrings.ja.resx
new file mode 100644
index 00000000000..8bb5b138263
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PSListModifierStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>次の不明なリスト修飾子が検出されました: '{0}'。有効なリスト修飾子は、Add、Remove、Replace です。</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>オブジェクトがサポートされているコレクション型ではないため、更新プログラムを適用できません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PSStyleStrings.ja.resx b/src/System.Management.Automation/resources/ja/PSStyleStrings.ja.resx
new file mode 100644
index 00000000000..3cae3e19f1d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PSStyleStrings.ja.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>The specified string contains printable content when it should only contain ANSI escape sequences: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>The MaxWidth for the Progress rendering must be at least 18 to render correctly.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>When adding or removing extensions, the extension must start with a period.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ParameterBinderStrings.ja.resx b/src/System.Management.Automation/resources/ja/ParameterBinderStrings.ja.resx
new file mode 100644
index 00000000000..453ace6ec2b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ParameterBinderStrings.ja.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>パラメーター名 '{1}' と一致するパラメーターが見つかりません。</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>引数 '{1}' を受け取る位置指定パラメーターが見つかりません。</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>パラメーター '{1}' の引数がありません。型 '{2}' のパラメーターを指定して、もう一度やり直してください。</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>パラメーター名 '{1}' があいまいであるため、パラメーターを処理できません。一致の可能性は次のとおりです:{6}。</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>'{6}' をパラメーター '{1}' で必要な型 '{2}' に変換できません: {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>パラメーター '{1}' をバインドできません。{6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>位置指定パラメーター '{1}' がバインドされます。</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>名前が指定されていないため、位置指定パラメーターをバインドできません。</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>設定されたパラメーターは、指定された名前付きパラメーターを使って解決することができません。発行された 1 つ以上のパラメーターを同時に使用できないか、指定されたパラメーターの数が不足しています。</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>1 つ以上の必須パラメーターが不足しているため、コマンドを処理できません:{1}。</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>パラメーター '{1}' をパラメーター セット '{6}' に指定することはできません。</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>パラメーター '{1}' が複数回指定されているため、パラメーターをバインドできません。複数の値を受け取ることができるパラメーターに複数の値を指定するには、配列構文を使用します。たとえば、"-parameter value1,value2,value3" とします。</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>パラメーター '{1}' を評価できません。引数がスクリプト ブロックとして指定されており、入力がないためです。スクリプト ブロックは、入力がないと評価できません。</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>パラメーター '{1}' のスクリプト ブロックへの入力に失敗しました。{6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>パラメーター '{1}' を評価できません。引数の入力で出力が生成されませんでした。</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>コマンドがパイプライン入力を受け取らないか、入力とそのプロパティがパイプライン入力を受け取るパラメーターと一致しないため、入力オブジェクトをコマンドのパラメーターにバインドできません。</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>すべての必須パラメーターをバインドするために必要な情報が含まれていないため、入力オブジェクトをバインドできません: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>パラメーター '{1}' の既定値を取得できないため、パイプライン入力を処理できません。{6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>コマンドレットの動的パラメーターを取得できません。{6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>次のパラメーターの値を入力します:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>コマンド パイプラインの位置 {1} でのコマンドレット {0}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>パラメーター '{1}' の引数変換を処理できません。{6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>パラメーター '{1}' の引数を検証できません。{6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>パラメーター '{1}' をターゲットにバインドできません。{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>パラメーター '{1}' は null 値であるため、引数をバインドできません。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>パラメーター '{1}' は空の文字列であるため、引数をバインドできません。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>パラメーター '{1}' は空のコレクションであるため、引数をバインドできません。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>パラメーター '{1}' は空の配列であるため、引数をバインドできません。</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>コマンドを処理できません。パラメーター '{0}' は複数回定義されています。</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>パラメーター '{1}' の型が '{2}' で、Add() メソッドを識別できないか、複数の Add() メソッドが存在するため、コマンドレット {0} をバインドできません。{6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>ランタイム定義パラメーター '{1}' がキー '{6}' で RuntimeDefinedParameterDictionary に追加されたため、コマンドレット {0} をバインドできません。キーは RuntimeDefinedParameter.Name と同じである必要があります。</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>引数の PSTypeNames がパラメーター '{1}' で必要な PSTypeName と一致しないため、引数をパラメーター '{6}' にバインドできません。</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>$PSDefaultParameterValues では、次の名前またはエイリアスに一致するパラメーターに対して複数の異なる既定値が定義されています: {0}。これらの既定値は無視されました。</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>このコマンドレットの $PSDefaultParameterValues で定義されている次の名前またはエイリアスは、複数のパラメーターに解決されます: {0}。既定値は無視されました。</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} このエラーは、既定のパラメーター バインドの適用によって発生した可能性があります。$PSDefaultParameterValues で既定のパラメーター バインドを無効にするには、$PSDefaultParameterValues["Disabled"] を$trueに設定してから、もう一度やり直してください。次の既定のパラメーターは、エラーが発生したときにこのコマンドレットに対して正常にバインドされました: {7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} このエラーは、既定のパラメーター バインドの適用によって発生する可能性があります。$PSDefaultParameterValues で既定のパラメーター バインドを無効にするには、$PSDefaultParameterValues["Disabled"] を $true に設定してから再試行してください。次の既定のパラメーターは、エラーが発生したときにこのコマンドレットに対して正常にバインドされました: {7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>パラメーター '{1}' への既定値 '{0}' のバインドに失敗しました: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>キー '{0}' に有効な形式がありません。正しい形式の詳細については、https://go.microsoft.com/fwlink/?LinkId=228266 でabout_Parameters_Default_Values を参照してください。</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>キー '{0}' の形式が無効です。正しい形式の詳細については、https://go.microsoft.com/fwlink/?LinkId=228266 でabout_Parameters_Default_Values を参照してください。</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>パラメーター '{0}' は廃止されました。{1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>型 '{1}' のキー '{0}' は文字列値ではありません。DefaultParameterDictionary は文字列値キーのみを受け入れます。</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>キー '{0}' は既にディクショナリに追加されています。</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>メソッドまたはプロパティの呼び出しは許可されていません</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>型 '{1}' でのメソッドまたはプロパティ '{0}' の呼び出しは、信頼されていないスクリプトの制約言語モードでは許可されません。</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>型の作成は許可されていません</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>型 '{0}' の作成は、信頼されていないスクリプトの制約付き言語モードでのパラメーター バインド中に許可されません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ParserStrings.ja.resx b/src/System.Management.Automation/resources/ja/ParserStrings.ja.resx
new file mode 100644
index 00000000000..b9fa75cdd31
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ParserStrings.ja.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>アセンブリ '{0}' を読み込むことができません。</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PathUtilsStrings.ja.resx b/src/System.Management.Automation/resources/ja/PathUtilsStrings.ja.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PathUtilsStrings.ja.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PipelineStrings.ja.resx b/src/System.Management.Automation/resources/ja/PipelineStrings.ja.resx
new file mode 100644
index 00000000000..42a9f6224ce
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PipelineStrings.ja.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>このコマンドレット インスタンスは、別のパイプラインによって使用されているため、処理できません。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>パイプラインが開始されているため、この操作は実行できません。パイプラインを停止し、操作を再試行してください。</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Stop ポリシーによって実行中のコマンドレットが防止されているため、このコマンドレットの実行を続行できません。</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>このパイプラインは、パイプライン内の最初のコマンドレットが前のコマンドレットの結果から入力を読み取ろうとしているため、実行できません。最初のコマンドレットを変更するか、最初のコマンドレットを削除するか、最初のコマンドレットで出力が必要なコマンドレットをパイプラインに追加してから、パイプラインを再実行してください。</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>コマンドレット番号を処理できません。ReadFromCommand 関数には、パイプラインに既に追加されているコマンドレットの ID を指定する必要があります。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>ReadFromCommand および ReadErrorQueue 関数の出力は、別のコマンドレットがその出力を既に読み取っているため、読み取れません。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>コマンドがないため、このパイプラインを実行できません。このパイプラインに少なくとも 1 つのコマンドを追加してから、もう一度実行してください。</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>パイプライン操作は、まだ開始されていないため、完了できません。ステップ可能なパイプラインで End() を呼び出す前に、Begin() メソッドを呼び出す必要があります。</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>WriteObject および WriteError メソッドは、BeginProcessing、ProcessRecord、EndProcessing メソッドのオーバーライドの外部からは呼び出せません。これらは、同じスレッド内からのみ呼び出すことができます。コマンドレットがこれらの呼び出しを適切に行っていることを確認するか、Microsoft カスタマー サポート サービスにお問い合わせください。</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>ThrowTerminatingError を呼び出した後、コマンドレットによって例外がスローされました。
+最初の例外は、スタック トレース "{1}" を持つ "{0}" でした。
+2 番目の例外は、スタック トレース "{3}" を持つ "{2}" でした。</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>パイプラインが閉じられた後は、WriteObject および WriteError メソッドを呼び出すことはできません。Microsoft カスタマー サポート サービスに連絡してください。</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>パイプラインの作成中にエラーが発生しました。</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>このパイプラインでは、切断接続セマンティクスはサポートされていません。</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>このパイプラインは、切断状態ではないため、接続できません。</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>実行空間オブジェクトには、null リモート コマンドが関連付けられています。 リモート コマンドが指定されていないため、切断された RemotePipeline オブジェクトを作成できません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/PowerShellStrings.ja.resx b/src/System.Management.Automation/resources/ja/PowerShellStrings.ja.resx
new file mode 100644
index 00000000000..3d76aed8f42
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/PowerShellStrings.ja.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>現在の PowerShell インスタンスの状態は、この操作に対して無効です。</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>コマンドは既に開始されているため、操作を実行できません。コマンドが完了するまで待つか、コマンドを停止してから、もう一度操作を実行してください。</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>コマンドが指定されていません。</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>PowerShell インスタンスが、入れ子になった PowerShell インスタンスを作成するための正しい状態ではありません。入れ子になった PowerShell インスタンスは、実行中の PowerShell インスタンスでのみ作成できます。</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>実行空間が '{0}' 状態ではないため、操作を実行できません。実行空間の現在の状態は '{1}' です。</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>入れ子になった PowerShell インスタンスを非同期に呼び出すことはできません。Invoke メソッドを使用してください。</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} は、この PowerShell インスタンスで {1} を呼び出して作成されたオブジェクトではありません。</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>実行空間がスレッドを再利用するように設定されている場合、呼び出し設定のアパートメント状態は実行空間と一致している必要があります。</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>実行空間が現在のスレッドを使用するように設定されている場合、呼び出し設定のアパートメント状態は現在のスレッドの状態と一致している必要があります。</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>パラメーターを追加するには、コマンドが必要です。パラメーターを追加する前に、PowerShell インスタンスにコマンドを追加する必要があります。</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>辞書内のキーは文字列である必要があります。</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>このスレッドには、コマンドを実行できる実行空間がありません。System.Management.Automation.Runspaces.Runspace 型の DefaultRunspace プロパティで指定できます。呼び出そうとしたコマンド: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>この PowerShell オブジェクトはリモート実行空間または実行空間プールに関連付けられていないため、接続できません。</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>実行中のコマンドは切断されていますが、リモート サーバーではまだ実行されています。 コマンドの操作状態と出力データを取得するには、再接続してください。</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>現在の PowerShell セッションが切断状態であるため、この操作を実行できません。 この PowerShell セッションに接続してから、コマンドの完了を待つか、コマンドを停止してください。</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>現在の PowerShell セッションが切断状態であるため、この操作を実行できません。 この PowerShell セッションに接続してから、もう一度お試しください。</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>リモート コマンドへの接続に失敗しました。</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>コマンドが現在停止しているため、この操作を実行できません。コマンドの停止が完了するまで待ってから、もう一度お試しください。</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>このスレッドには、コマンドを実行できる実行空間がありません。System.Management.Automation.Runspaces.Runspace 型の DefaultRunspace プロパティで指定できます。現在の PowerShell インスタンスには、呼び出すコマンドが含まれていません。</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>現在の実行空間を使用する PowerShell オブジェクトは、現在の実行空間が使用できないため作成できません。 現在の実行空間は、Initial Session State を使用して作成された場合など、開始処理中である可能性があります。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ProgressRecordStrings.ja.resx b/src/System.Management.Automation/resources/ja/ProgressRecordStrings.ja.resx
new file mode 100644
index 00000000000..966e0f54ac5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ProgressRecordStrings.ja.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>{0} に負の値を指定できないため、引数を処理できません。</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>{0} の値を null 値または空にできないため、引数を処理できません。</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>{0} を 100 より大きくできないため、パーセントを設定できません。</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId を ActivityId と同じにすることはできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ProviderBaseSecurity.ja.resx b/src/System.Management.Automation/resources/ja/ProviderBaseSecurity.ja.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ProviderBaseSecurity.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/ProxyCommandStrings.ja.resx b/src/System.Management.Automation/resources/ja/ProxyCommandStrings.ja.resx
new file mode 100644
index 00000000000..31e8d961083
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/ProxyCommandStrings.ja.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>'help' パラメーターは、'get-help' コマンドによって作成された有効な HelpInfo オブジェクトとして認識されません。</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>CommandMetadata に名前がないため、プロキシ コマンドを生成できません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/RegistryProviderStrings.ja.resx b/src/System.Management.Automation/resources/ja/RegistryProviderStrings.ja.resx
new file mode 100644
index 00000000000..5cf5d8eba4f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/RegistryProviderStrings.ja.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>項目の設定</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>項目: {0} 値: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>項目のクリア</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>項目: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>新しい項目</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>項目: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>キーの削除</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>項目: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>キーのコピー</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} 宛先: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>項目名の変更</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>項目: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>項目の移動</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>項目: {0} 宛先: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>プロパティの設定</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} プロパティ: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>プロパティをクリア</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} プロパティ: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>新しいプロパティ</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} プロパティ: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>プロパティの削除</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} プロパティ: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>プロパティ名を変更します。</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>プロパティのコピー</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>プロパティの移動</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>項目: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>操作は処理されませんでした。指定された場所では、この操作は許可されていません。</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>ソースの場所に対する操作は許可されていません。</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>この操作は、宛先の場所では許可されていません。</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>ローカル コンピューターの構成設定</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>現在のユーザーのソフトウェア設定</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>このパスには既にキーが存在します。</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>宛先パスがソース パスの下位にあるため、操作を実行できません。</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>プロパティは既に存在します。</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>プロパティ {0} はパス {1} に存在しません。</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>指定されたパスのレジストリ キーが存在しません。</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>パラメーター 'Type' をバインドできませんでした。"{0}" を "{1}" に変換できませんでした。使用可能な列挙値は、"String、ExpandString、Binary、DWord、MultiString、QWord、Unknown" です。</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>キー {0} は作成されましたが、既定値を設定できませんでした。</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>指定されたルートを持つドライブを作成できません。ルート パスが存在しません。</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>同じコンテナーに同じ名前の項目が既に存在するため、項目の名前を変更できません。</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>レジストリ キー名は、有効なベース キー名で始まる必要があります。</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>サブキーの引数が無効です。</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>サブキーが存在しないため、サブキー ツリーを削除できません。</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>その名前の値は存在しません。</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>列挙値 {0} が無効です。</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>値引数を指定する必要があります。</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>名前引数を指定する必要があります。</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>指定された RegistryValueKind は無効な値です。</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue では、null 値の文字列参照を含む String[] は許可されていません。</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>レジストリ サブキーは 255 文字以下にする必要があります。</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>空でないサブキー名を指定する必要があります。</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>値オブジェクトの型が指定された RegistryValueKind と一致しなかったか、オブジェクトを正しく変換できませんでした。</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue では型 '{0}' の配列はサポートされていません。サポートされているのは Byte[] と String[] のみです。</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>指定されたレジストリ キーが存在しません。</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>指定された値の名前の長さが最大 16383 文字を超えています。</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>指定された値データのサイズが最大の 1 MB を超えています。</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>指定されたレジストリ サブキーは存在しません。</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>指定された RegistryKeyPermissionCheck 値が無効です。</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>レジストリ キーにはサブキーがあります。再帰的な削除は、このメソッドではサポートされていません。</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Transaction.Current または指定したトランザクションがないと、KTM ハンドルを作成できません。</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>指定されたトランザクションまたは Transaction.Current は、この TransactedRegistryKey の作成またはオープンに使用されたトランザクションと一致している必要があります。</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>TransactedRegistryKey オブジェクトは、あらかじめ定義されたキー用であるため、トランザクションに関連付けられていません。</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>要求されたレジストリ アクセスは許可されていません。</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>レジストリ キー '{0}' へのアクセスが拒否されました。</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>レジストリ キーに書き込めません。</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>閉じているレジストリ キーにはアクセスできません。</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>不明なエラー: {0}。</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>レジストリ トランザクションは、このプラットフォームではサポートされていません。</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>指定されたハンドルが無効です。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/RemotingErrorIdStrings.ja.resx b/src/System.Management.Automation/resources/ja/RemotingErrorIdStrings.ja.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/RemotingErrorIdStrings.ja.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/RunspaceInit.ja.resx b/src/System.Management.Automation/resources/ja/RunspaceInit.ja.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/RunspaceInit.ja.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/RunspacePoolStrings.ja.resx b/src/System.Management.Automation/resources/ja/RunspacePoolStrings.ja.resx
new file mode 100644
index 00000000000..bf154631f1b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/RunspacePoolStrings.ja.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>プールの最大サイズを 1 未満にすることはできません。</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>最小プール サイズを 1 未満にすることはできません。</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>最小プール サイズを最大プール サイズより大きくすることはできません。</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>この操作では、実行空間プールの状態が無効です。</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>実行空間プールが '{0}' 状態ではないため、操作を実行できません。現在の状態は '{1}' です。</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>実行空間プールは 'BeforeOpen' 状態ではないため、開けません。現在の状態は '{0}' です。</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} オブジェクトは、現在の RunspacePool インスタンスで {1} を呼び出すことによって作成されませんでした。</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>実行空間が現在のプールに属していないため、実行空間を現在のプールに解放できません。</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>このプロパティは、実行空間プールを開いた後は変更できません。</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>この実行空間では、切断操作と接続操作はサポートされていません。</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>実行空間プールが切断状態であるため、操作を実行できません。</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>切断操作はサーバーではサポートされていません。 リモート実行空間プールの切断をサポートするには、サーバーが PowerShell 3.0 以降を実行している必要があります。</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>この実行空間プール {0} は、リモート サーバーで実行されているコマンドに対して切断された PowerShell オブジェクトを提供するように構成されていません。 RunspacePool クラス GetRunspacePools() 静的メソッドを使用して、サーバーにクエリを実行し、これを実行するように構成されている実行空間プール オブジェクトを返します。</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>対応するサーバー側の実行空間プールが別のクライアントに接続されているため、この実行空間プールを接続できません。</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState はサーバーではサポートされていません。 サーバーが PowerShell 5.0 以上を実行している必要があります。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/RunspaceStrings.ja.resx b/src/System.Management.Automation/resources/ja/RunspaceStrings.ja.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/RunspaceStrings.ja.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/SecuritySupportStrings.ja.resx b/src/System.Management.Automation/resources/ja/SecuritySupportStrings.ja.resx
new file mode 100644
index 00000000000..1063fd89b70
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/SecuritySupportStrings.ja.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>証明書を読み込めません。'{0}' はファイル システム パスに解決する必要があります。</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>証明書 '{0}' は暗号化に使用できません。暗号化証明書には、データ暗号化キー使用法またはキー暗号化キー使用法を含め、ドキュメント暗号化拡張キー使用法 ({1}) を含める必要があります。</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>証明書を読み込むことができません。識別子 '{0}' は、複数の証明書と一致します。複数の受信者に暗号化するには、'{1}' パラメーターに、複数の証明書と一致するワイルドカードではなく、複数の特定の値を指定してください。</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>暗号化証明書を読み込めません。証明書設定 '{0}' は、有効な base-64 でエンコードされた証明書を表すものではなく、ファイル、ディレクトリ、拇印、またはサブジェクト名別の有効な証明書を表すものでもありません。</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>警告: 証明書 '{0}' に秘密キーが含まれています。暗号化に使用される保護されたイベント ログ証明書には、公開キーのみを含める必要があります。</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>エラー: イベント ログ メッセージ '{0}' を保護できませんでした: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>エラー: 証明書が見つからないか、使用できませんでした: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>セッション キーは、安全な文字列を暗号化できません。</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>バッファー オフセットが無効です。</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>公開キー データが無効です。</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>公開キーをインポートできません。</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>セッション キー データが無効です。</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>スクリプト ファイル '{0}' は、システム ポリシーによって実行がブロックされています。</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>不明なスクリプト ファイル ポリシーの適用値が返されました: {0}。</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>スクリプト ファイルの読み取り</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>スクリプト ファイル '{0}' は、ポリシーによって信頼されていないため、ConstrainedLanguage モードで実行されます。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/Serialization.ja.resx b/src/System.Management.Automation/resources/ja/Serialization.ja.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/Serialization.ja.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/SessionStateProviderBaseStrings.ja.resx b/src/System.Management.Automation/resources/ja/SessionStateProviderBaseStrings.ja.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/SessionStateProviderBaseStrings.ja.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/SessionStateStrings.ja.resx b/src/System.Management.Automation/resources/ja/SessionStateStrings.ja.resx
new file mode 100644
index 00000000000..28f5b97c834
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/SessionStateStrings.ja.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>パス '{0}' は存在しないため、見つかりません。</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/StringDecoratedStrings.ja.resx b/src/System.Management.Automation/resources/ja/StringDecoratedStrings.ja.resx
new file mode 100644
index 00000000000..eff2c52e695
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/StringDecoratedStrings.ja.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>このメソッドでは、'ANSI' または 'PlainText' のみがサポートされています。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/SubsystemStrings.ja.resx b/src/System.Management.Automation/resources/ja/SubsystemStrings.ja.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/SubsystemStrings.ja.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/SuggestionStrings.ja.resx b/src/System.Management.Automation/resources/ja/SuggestionStrings.ja.resx
new file mode 100644
index 00000000000..70309cdfb53
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/SuggestionStrings.ja.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>コマンド "{0}" は見つかりませんでしたが、現在の場所に存在します。
+PowerShell は既定で、現在の場所からコマンドを読み込みません ('Get-Help about_Command_Precedence' を参照)。
+
+このコマンドを信頼する場合は、代わりに次のコマンドを実行してください:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>最も類似しているコマンドは次のとおりです:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/TabCompletionStrings.ja.resx b/src/System.Management.Automation/resources/ja/TabCompletionStrings.ja.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/TabCompletionStrings.ja.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/TransactionStrings.ja.resx b/src/System.Management.Automation/resources/ja/TransactionStrings.ja.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/TransactionStrings.ja.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/TypesXmlStrings.ja.resx b/src/System.Management.Automation/resources/ja/TypesXmlStrings.ja.resx
new file mode 100644
index 00000000000..a0f8fec1bf8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/TypesXmlStrings.ja.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}、{1}({2}) : エラー: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}、{1}({2}): 型"{3}" でのエラー: {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>ノード "{0}" は、"{1}" の下に 1 回だけ出現する必要があります。親ノード "{1}" は無視されます。</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>ノード {0} は許可されていません。次のノードが許可されています: {1}。</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>ノード "{0}" に内部テキストを含めることはできません。</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>ノード "{0}" には内部テキストが必要です。</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>ノード '{0}' が見つかりませんでした。これは、"{1}" の下で 1 回だけ発生する必要があります。親ノード "{1}" は無視されます。</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>"Type" ノードには、"Members"、"TypeConverters"、または "TypeAdapters" が必要です。</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>例外が原因で、型 {0} の型コンバーターのインスタンスを作成できません: {1}。</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>次の例外が発生したため、PowerShell は型 {0} の型アダプターのインスタンスを作成できません: {1}。</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>適応された型 "{0}" は無効です。</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>TypeConverter は、既に発生しているため、無視されました。</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>TypeAdapter は、既に発生しているため、無視されました。</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>型 "{0}" は TypeConverter または PSTypeConverter のいずれかである必要があります。</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>型 "{0}" は PSPropertyAdapter である必要があります。</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>メンバー {0} は既に存在します。</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>次のメンバー名が予約されています: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>例外: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty には getter または setter が必要です。</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty には、getter または setter が必要です。</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}、{1}: {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>値は、{0} ではなく、TRUE または FALSE である必要があります。</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>ノード "{0}" に "{1}" 属性を指定することはできません。</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}、{1}: ファイルが見つかりませんでした。</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}、{1}: このファイルは、{2} によって既に読み込まれているため、スキップされました。</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>レジストリ キーが見つかりません: {0}{1}。{2} を使用して構成ファイルを読み込んでいます。</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>レジストリ キー内に指定されたパス {0} が見つかりません: {1}{2}。{3} を使用して構成ファイルを読み込んでいます。</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}、{1}: このファイルは、ps1xml ファイル名拡張子がないため、スキップされました。</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}、{1}: 次の検証例外が発生したため、ファイルはスキップされました: {2}。</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>メンバー "{0}" はメモである必要があります。</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>メモ "{0}" を変換できません: "{1}"。</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>ここではメンバー "{0}" を使用しないでください。</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>メンバー "{0}" の型は "{1}" である必要があります。</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{1}" が "{2}" で、"{3}" が "{4}" である場合、"{0}" が存在する必要があります。</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>以前のエラーが原因で、すべてのシリアル化設定が無視されました。</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" は標準メンバーではないため、無視されます。</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>{0} パスは完全修飾パスではありません。完全修飾型のファイル パスを指定してください。</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>TypeTable が実行空間の外部に作成されている可能性があるため、TypeTable を更新できません。</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>TypeTable の読み込み中にエラーが発生しました。Errors プロパティ内を検索して、詳細なエラー メッセージを取得してください。</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>TypeData "{0}" でのエラー: {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" には、そのプロパティ "{1}" の値が必要です。</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" のプロパティ "{1}" に null または空の文字列を含めることはできません。</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>型 "{0}" が見つかりませんでした。型名の値は、型の完全な名前である必要があります。型名を確認して、コマンドをもう一度実行してください。</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData には、"Members"、"TypeConverters"、"TypeAdapters"、または "StandardMembers" が必要です。</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>共有型テーブルを複数のエントリを使用して更新することはできません。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/VerbDescriptionStrings.ja.resx b/src/System.Management.Automation/resources/ja/VerbDescriptionStrings.ja.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/VerbDescriptionStrings.ja.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ja/WildcardPatternStrings.ja.resx b/src/System.Management.Automation/resources/ja/WildcardPatternStrings.ja.resx
new file mode 100644
index 00000000000..0aa26a1f1cc
--- /dev/null
+++ b/src/System.Management.Automation/resources/ja/WildcardPatternStrings.ja.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>指定されたワイルドカード文字パターンが無効です: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Authenticode.ko.resx b/src/System.Management.Automation/resources/ko/Authenticode.ko.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Authenticode.ko.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/AuthorizationManagerBase.ko.resx b/src/System.Management.Automation/resources/ko/AuthorizationManagerBase.ko.resx
new file mode 100644
index 00000000000..e8c8064c436
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/AuthorizationManagerBase.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>AuthorizationManager 확인에 실패했습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/AutomationExceptions.ko.resx b/src/System.Management.Automation/resources/ko/AutomationExceptions.ko.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/AutomationExceptions.ko.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CatalogStrings.ko.resx b/src/System.Management.Automation/resources/ko/CatalogStrings.ko.resx
new file mode 100644
index 00000000000..bfe057ebd51
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CatalogStrings.ko.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>카탈로그 정의 파일을 생성할 수 없습니다.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>파일 '{0}'을(를) 카탈로그에 추가하는 중입니다. 카탈로그에 있는 파일의 상대 경로는 '{1}'입니다.</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>카탈로그에서 파일 {0}의 유효성 검사를 건너뜁니다. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>해시가 {1}인 파일 {0}을(를) 카탈로그에서 찾았습니다. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>카탈로그 경로에 상대 경로가 {0}(으)로 동일한 파일이 여러 개 있습니다. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>해시가 {1}인 파일 {0}을(를) 디스크에서 찾았습니다.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>경로에서 파일 {0}의 유효성 검사를 건너뜁니다.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>지정된 해시 알고리즘 {0}에 대한 카탈로그 관리자 컨텍스트의 핸들을 가져올 수 없습니다.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>파일 {0}의 해시를 만들 수 없습니다. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>카탈로그 파일 {0}을(를) 열 수 없습니다.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>카탈로그 버전이 유효하지 않습니다. 버전 {0} 및 버전 {1} 카탈로그만 지원됩니다.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>카탈로그 정의 파일을 열 수 없습니다.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>카탈로그에서 파일 구성원 {0}의 항목을 여러 개 찾았습니다.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>카탈로그 구성원 {0}의 파일 이름 또는 경로를 찾을 수 없습니다.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>해시할 파일 {0}을(를) 찾을 수 없습니다.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>해시를 계산할 파일 {0}을(를) 읽을 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CimInstanceTypeAdapterResources.ko.resx b/src/System.Management.Automation/resources/ko/CimInstanceTypeAdapterResources.ko.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CimInstanceTypeAdapterResources.ko.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CmdletizationCoreResources.ko.resx b/src/System.Management.Automation/resources/ko/CmdletizationCoreResources.ko.resx
new file mode 100644
index 00000000000..73777d73c68
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CmdletizationCoreResources.ko.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>'{0}' 클래스의 cmdlet</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>다음 파일에 대한 Cmdlet 정의 XML을 처리할 수 없습니다: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>ObjectModelWrapper 특성을 처리할 수 없습니다. {0} 형식은 여러 매개 변수 집합을 정의합니다. Cmdlet 정의 XML에서 ObjectModelWrapper 특성에 유효한 형식을 지정했는지 확인한 다음 다시 시도하세요.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>ObjectModelWrapper 특성을 처리할 수 없습니다. {0} 형식은 열린 제네릭 형식입니다.  Cmdlet 정의 XML에서 ObjectModelWrapper 특성에 유효한 형식을 지정했는지 확인한 다음 다시 시도하세요.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>ObjectModelWrapper 특성을 처리할 수 없습니다. {0} 형식은 다음 클래스에서 파생되지 않았습니다: {1}.  Cmdlet 정의 XML에서 ObjectModelWrapper 특성에 유효한 형식을 지정했는지 확인한 다음 다시 시도하세요.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>ObjectModelWrapper 특성을 처리할 수 없습니다. {0} 형식은 무시되는 {1} 특성 매개 변수가 있는 {2} cmdlet 매개 변수를 정의합니다.  Cmdlet 정의 XML에서 ObjectModelWrapper 특성에 유효한 형식을 지정했는지 확인한 다음 다시 시도하세요.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>{0} 매개 변수를 {1} cmdlet에 정의할 수 없습니다.  매개 변수 이름은 이미 {2} 클래스에서 정의되었습니다.  Cmdlet 정의 XML에서 매개 변수 이름을 변경한 다음 다시 시도하세요.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>{0} 매개 변수를 {1} cmdlet에 정의할 수 없습니다. 매개 변수 이름은 이미 {2} XML 요소 내에 정의되어 있습니다. Cmdlet 정의 XML에서 매개 변수 이름을 변경한 다음 다시 시도하세요.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>EnumName 특성 값이 유효한 C# 식별자로 변환되지 않습니다: {0}. Cmdlet 정의 XML에서 EnumName 특성을 확인한 다음 다시 시도하세요.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>&lt;Enum EnumName="{0}" ...&gt; 요소를 처리할 수 없습니다. {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>원격 컴퓨터에서 잘못된 CDXML 파일을 반환했습니다. 다음 cmdlet 어댑터는 원격 컴퓨터에서 CDXML 모듈을 가져올 때 지원되지 않습니다: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CommandBaseStrings.ko.resx b/src/System.Management.Automation/resources/ko/CommandBaseStrings.ko.resx
new file mode 100644
index 00000000000..6eec2039358
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CommandBaseStrings.ko.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>이 작업을 계속하시겠습니까?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>예(&amp;Y)</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>작업의 다음 단계만 계속하세요.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>모두 예(&amp;A)</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>작업의 모든 단계를 계속하세요.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>아니요(&amp;N)</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>이 작업을 건너뛰고 다음 작업을 진행합니다.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>모두 아니요(&amp;L)</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>이 작업과 이후의 모든 작업을 건너뛰세요.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>이 명령을 중지합니다.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>명령 중지(&amp;H)</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>일시 중단(&amp;S)</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>현재 파이프라인을 일시 중지하고 명령 프롬프트로 돌아갑니다. 파이프라인을 다시 시작하려면 "{0}"을(를) 입력하세요.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>프로그램 "{0}"이(가) 0이 아닌 종료 코드로 종료되었습니다. {1}({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>대상 "{0}"에 "{1}" 작업을 수행하는 중입니다.</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What if: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>이 작업을 수행하시겠습니까?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>확인</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>기본 설정 변수 "{0}" 또는 일반 매개 변수가 Stop: {1}(으)로 설정되어 실행 중인 명령이 중지되었습니다.</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>기본 설정 변수 "{0}" 또는 공통 매개 변수가 Stop으로 설정되어 있으므로 실행 중인 명령이 중지되었습니다.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>기본 설정 변수 "{0}" 또는 공통 매개 변수가 잘못된 값인 "{1}"(으)로 설정되어 있으므로 실행 중인 명령이 중지되었습니다.</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>사용자가 [중지] 옵션을 선택했기 때문에 실행 중인 명령이 중지되었습니다.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>사용자가 명령을 중단했기 때문에 실행 중인 명령이 중지되었습니다.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>PSCmdlet에서 파생된 cmdlet은 직접 호출할 수 없습니다.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>cmdlet '{0}'은(는) 원격 세션에서 '{1}' 매개 변수를 지원하지 않습니다.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>총 개수: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>예상 총 수: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>알 수 없는 총 개수</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>명령 '{0}'</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>'{0}'은(는) 더 이상 사용되지 않습니다. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>명령줄에 대한 errorno {0}(으)로 Exec 호출이 실패했습니다. {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>명령 ‘{0}’을(를) 찾을 수 없습니다. 지정한 명령은 실행 파일이어야 합니다.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>스크립트 블록 처리 Dot-Source 검사</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>스크립트 블록 '{0}'의 Dot-Source 처리는 제한된 언어 모드에서 실패합니다. 언어 모드 '{1}'이(가) 현재 언어 모드 '{2}'과(와) 일치하지 않기 때문입니다.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>명령 검색기</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>'{1}' 모듈의 '{0}' 명령은 신뢰할 수 없으며 ConstrainedLanguage 모드에서 액세스할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ConsoleInfoErrorStrings.ko.resx b/src/System.Management.Automation/resources/ko/ConsoleInfoErrorStrings.ko.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ConsoleInfoErrorStrings.ko.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CoreClrStubResources.ko.resx b/src/System.Management.Automation/resources/ko/CoreClrStubResources.ko.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CoreClrStubResources.ko.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CredUI.ko.resx b/src/System.Management.Automation/resources/ko/CredUI.ko.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CredUI.ko.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Credential.ko.resx b/src/System.Management.Automation/resources/ko/Credential.ko.resx
new file mode 100644
index 00000000000..62173425172
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Credential.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>자격 증명을 직렬화할 수 없습니다. 이 명령으로 워크플로를 시작하는 경우, 워크플로를 시작한 프로세스에 자격 증명을 직렬화할 권한이 없으므로 자격 증명을 유지할 수 없습니다.
+
+-- 워크플로가 로컬 컴퓨터의 PSSession에서 시작된 경우, 세션을 만든 명령에 EnableNetworkAccess 매개 변수를 추가하세요.
+-- 워크플로가 원격 컴퓨터의 PSSession에서 시작된 경우, 세션을 만든 명령에 값이 CredSSP인 Authentication 매개 변수를 추가하세요. 또는 RunAsUser 속성 값이 있는 세션 구성에 연결하세요.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>UserName 값의 형식이 올바르지 않습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/CredentialAttributeStrings.ko.resx b/src/System.Management.Automation/resources/ko/CredentialAttributeStrings.ko.resx
new file mode 100644
index 00000000000..25b11f87af4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/CredentialAttributeStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/DebuggerStrings.ko.resx b/src/System.Management.Automation/resources/ko/DebuggerStrings.ko.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/DebuggerStrings.ko.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/DescriptionsStrings.ko.resx b/src/System.Management.Automation/resources/ko/DescriptionsStrings.ko.resx
new file mode 100644
index 00000000000..79e3e3f3b1c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/DescriptionsStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0}은(는) null이거나 비어 있을 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/DiscoveryExceptions.ko.resx b/src/System.Management.Automation/resources/ko/DiscoveryExceptions.ko.resx
new file mode 100644
index 00000000000..1c1146daf5e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/DiscoveryExceptions.ko.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>cmdlet 이름 "{0}"이(가) 올바른 형식이 아니므로 유효성을 검사할 수 없습니다. Cmdlet 이름에는 "Get-Process"와 같이 "-"로 구분된 동사와 명사가 포함되어야 합니다.</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>"{0}" 매개 변수는 매개 변수 집합 "{1}"에서 여러 번 선언되었습니다.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>"{0}" 별칭은 여러 번 선언됩니다.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>매개 변수를 선언할 수 없습니다. 매개 변수는 필드 및 속성에서만 선언할 수 있습니다.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>cmdlet을 처리할 수 없습니다. cmdlet 이름은 '-'로 구분된 동사와 명사 쌍으로 구성되어야 합니다.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>'{0}' 용어는 cmdlet, 함수, 스크립트 파일 또는 실행 프로그램의 이름으로 인식되지 않습니다.
+이름의 철자를 확인하거나 경로가 포함되어 있으면 경로가 올바른지 확인하고 다시 시도합니다.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>'{0}' 인수는 cmdlet으로 인식되지 않습니다. {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>'{0}' 인수는 cmdlet 또는 PSCmdlet 클래스에서 파생되지 않았기 때문에 cmdlet으로 인식되지 않습니다. {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>별칭 '{0}'은(는) cmdlet, 함수, 실행 프로그램 또는 스크립트 파일로 인식되지 않는 '{1}' 용어를 참조하므로 확인할 수 없습니다. 용어를 확인하고 다시 시도하세요.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>값이 '{0}'인 매개 변수 '{1}'은(는) cmdlet이 아니므로 CommandProcessor에서 처리할 수 없습니다.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>이름이 '{0}'인 cmdlet이 이미 있습니다. Cmdlet에는 고유한 이름이 있어야 합니다.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>이름이 '{0}'인 cmdlet 공급자가 이미 있습니다. Cmdlet 공급자는 고유한 이름이 있어야 합니다.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>이름이 '{0}'인 어셈블리가 이미 있습니다. 어셈블리에는 고유한 이름이 있어야 합니다.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>이름이 '{0}'인 스크립트가 이미 있습니다. 스크립트에는 고유한 이름이 있어야 합니다.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>#requires 문이 올바른 형식이 아니므로 처리할 수 없습니다.
+#requires 문은 다음 형식 중 하나여야 합니다.
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>스크립트 '{0}'에 현재 셸과 호환되지 않는 셸 ID가 {1}인 "#requires" 문이 포함되어 있으므로 스크립트를 실행할 수 없습니다. 이 스크립트를 실행하려면 '{2}'에 있는 셸을 사용해야 합니다.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>스크립트 '{0}'에 현재 셸과 호환되지 않는 셸 ID가 {1}인 "#requires" 문이 포함되어 있으므로 스크립트를 실행할 수 없습니다.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>스크립트 '{0}'에 PowerShell {1}에 대한 "#requires" 문이 포함되어 있으므로 스크립트를 실행할 수 없습니다. 스크립트에 필요한 PowerShell 버전이 현재 실행 중인 PowerShell {2} 버전과 일치하지 않습니다.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>스크립트 '{0}'에 PowerShell 에디션 '{1}'에 대한 "#requires" 문이 포함되어 있으므로 스크립트를 실행할 수 없습니다. 스크립트에 필요한 PowerShell 에디션이 현재 실행 중인 PowerShell {2} 에디션과 일치하지 않습니다.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>스크립트의 "#requires" 문에 지정된 다음 snap-in이 없으므로 스크립트 '{0}'을(를) 실행할 수 없습니다: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>#requires 문에서 shellID만 지정했습니다. #Requires 문은 PowerShell에서 실행할 때 필요한 PowerShell 스냅인을 지정해야 합니다.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>스크립트 '{0}'에는 관리자 권한으로 실행하기 위한 "#requires" 문이 포함되어 있어 실행할 수 없습니다. 현재 PowerShell 세션은 관리자 권한으로 실행되고 있지 않습니다. [관리자 권한으로 실행] 옵션을 사용해 PowerShell을 시작한 다음 스크립트를 다시 실행해 보세요.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0}(버전 {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>ArgumentList 매개 변수는 단일 cmdlet 또는 스크립트를 검색할 때만 지정할 수 있으므로 명령을 검색할 수 없습니다.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>매개 변수 이름 "{0}"은(는) 나중에 사용하도록 예약되어 있습니다.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>스크립트의 "#requires" 문에 지정된 다음 모듈이 없으므로 '{0}' 스크립트를 실행할 수 없습니다. {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>모듈 '{0}'에서 '{1}' 명령을 찾았지만 모듈을 로드할 수 없습니다. 자세한 내용은 'Import-Module {1}'을(를) 실행하세요.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>'{0}' 명령이 '{1}' 모듈에서 발견되었지만 다음 오류로 인해 모듈을 로드할 수 없습니다. [{2}]
+자세한 내용은 'Import-Module {1}'을(를) 실행하세요.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>'{0}' 모듈을 로드할 수 없습니다. 자세한 내용은 'Import-Module {0}'을(를) 실행하세요.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>일치하는 명령에 이름이 '{0}'인 매개 변수가 포함되어 있지 않습니다.  매개 변수 이름의 철자를 확인한 다음 다시 시도하세요.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>이 명령은 다른 언어 모드에서 정의되었으므로 도트 소스로 불러올 수 없습니다. 이 명령의 내용을 가져오지 않고 호출하려면 '.' 연산자를 생략하세요.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>ShowCommandInfo 및 구문 매개 변수는 함께 지정할 수 없습니다.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>실험적 기능 '{0}'이(가) 켜져 있으면 이 스크립트 명령을 사용할 수 없습니다.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>실험적 기능 '{0}'이(가) 꺼져 있으면 이 스크립트 명령을 사용할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/EnumExpressionEvaluatorStrings.ko.resx b/src/System.Management.Automation/resources/ko/EnumExpressionEvaluatorStrings.ko.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/EnumExpressionEvaluatorStrings.ko.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ErrorCategoryStrings.ko.resx b/src/System.Management.Automation/resources/ko/ErrorCategoryStrings.ko.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ErrorCategoryStrings.ko.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ErrorPackage.ko.resx b/src/System.Management.Automation/resources/ko/ErrorPackage.ko.resx
new file mode 100644
index 00000000000..e227f384457
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ErrorPackage.ko.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>오류 "{0}"의 오류 텍스트가 비어 있음 : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>개체 "{0}"이(가) 오류로 보고됩니다.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>ActionPreference 변수에는 값 {0}이(가) 지원되지 않습니다. 제공된 값은 기본 설정 매개 변수의 값으로만 사용해야 하며 기본값으로 대체되었습니다. 자세한 내용은 도움말 항목 "about_Preference_Variables"를 참조하세요.</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>{0} ActionPreference 값은 나중에 사용하도록 예약되어 있으며 현재는 지원되지 않습니다. 기본 설정 변수에 대한 자세한 내용은 도움말 항목 "about_Preference_Variables"를 참조하세요.</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>{0} ActionPreference 값은 나중에 사용하도록 예약되어 있으며 현재는 지원되지 않습니다. {1} 변수에서 기본값인 {2}(으)로 대체되었습니다. 기본 설정 변수에 대한 자세한 내용은 도움말 항목 "about_Preference_Variables"를 참조하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/EtwLoggingStrings.ko.resx b/src/System.Management.Automation/resources/ko/EtwLoggingStrings.ko.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/EtwLoggingStrings.ko.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/EventResource.ko.resx b/src/System.Management.Automation/resources/ko/EventResource.ko.resx
new file mode 100644
index 00000000000..e51b96927f1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/EventResource.ko.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>A message was not found for event id PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Scheduled Job {0} started at {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Scheduled Job {0} completed at {1} with state {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Scheduled Job Exception {0}:
+ Message: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Experimental Feature Initialization: Ignore the experimental feature '{0}' from the config file. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Experimental Feature Initialization: Failed to read the config file.
+ Exception: {0}
+ Message: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Workflow plugin loaded.
+ 	 EndpointName: {0}
+ 	 User: {1}
+ 	 HostingMode: {2}
+ 	 Protocol: {3}
+ 	 Configuration:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Workflow execution started.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Workflow state changed.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Workflow plugin has been requested for a shutdown.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Workflow plugin restarted.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Workflow is resuming.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>A quota limit that was set for the endpoint was exceeded.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Workflow has resumed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Workflow runspace pool was created.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Activity was queued for execution.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Activity execution started.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Workflow is being imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Workflow has been imported from a XAML file.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Workflow could not be imported from a XAML file because of an error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Workflow validation started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Workflow validation succeeded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Workflow validation failed with error.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Workflow activity validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Workflow activity could not be validated.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Activity execution failed.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Runspace availability changed.
+ 	 RunspaceId: {0}
+ 	 Availability: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Runspace state changed.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Workflow loaded for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Workflow unloaded.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Workflow execution cancelled.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Workflow execution aborted.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Workflow cleanup operation executed.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Persisted workflow loaded from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Workflow data was deleted from disk.
+ 	 WorkflowId: {0}
+ 	 Path: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Starting remove job.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Job state changed.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Job error.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Job created for workflow (child job).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Parent job created for workflow.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>All required jobs were created for workflow execution.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Child job removed for workflow.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>An error occurred while removing job.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Loading workflow for execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Workflow execution finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelling workflow execution.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Aborting workflow execution.
+ 	 WorkflowId: {0}
+ 	 Reason: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Unloading workflow.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Forced workflow shutdown started.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Forced workflow shutdown finished.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>An error occurred while forcefully shutting down a workflow.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persisting workflow to disk.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Workflow persisted to disk.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Activity execution finished.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Workflow execution error.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>A new PowerShell endpoint was registered.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Endpoint configuration modified.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Endpoint configuration unregistered.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Endpoint configuration disabled.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Endpoint configuration enabled.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Out of process runspace started.
+ 	 Command: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Parameter splatting was performed during workflow execution.
+ 	 Parameters: {0}
+ 	 Computers: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Workflow engine started.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Workflow manager instantiated with
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Path: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Computer Name $null or . resolve to LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolving to default scheme http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Remote shell name resolved to default PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Creating Scriptblock text ({0} of {1}):
+{2}
+
+ScriptBlock ID: {3}
+Path: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Started invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Completed invocation of ScriptBlock ID: {0}
+Runspace ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Context:
+{0}
+
+User Data:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlating activity id's.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Class Name = {0}
+Method Name = {1}
+Workflow GUID = {2}
+Message = {3}
+{4}
+Activity Name = {5}
+Activity GUID = {6}
+Parameters = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating Runspace object
+ 	 Instance Id: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Creating RunspacePool object
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Opening RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Runspace state changed to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Attempting session creation retry {0} for error code {1} on session Id {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell has started an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell has ended an IPC listening thread on process: {0} in AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>An error has occurred in PowerShell IPC listening thread on process: {0} in AppDomain: {1}.  Error Message: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>PowerShell IPC connect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>PowerShell IPC disconnect on process: {0} in AppDomain: {1} for User: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resolved to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Scheme is {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Test analytic message</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Connection Parameters are
+ Connection URI: {0}
+ Resource URI: {1}
+ User: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Thumb Print: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modifying activity Id and correlating</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Received object with Runspace Id: {0} Command Id: {1} Destination: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>An unhandled exception occurred in the appdomain.
+Exception Type: {0}
+Exception Message: {1}
+Exception StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. WSMan reported an error with error code: {2}.
+ Error message: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0}. Establishing a connection using WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0}. Callback received for WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0}. Closing shell using WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0}. Callback received for WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Sending data of size {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Callback received for WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Placing Receive request using WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Received Data of size {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Establishing a command connection using WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Runspace Id {0} Pipeline Id {1}. Callback received for command connection</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Closing transport for command</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for command close</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Sending signal with code {2} using WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id {1}. Callback received for WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Runspace Id: {0}. Connection is getting redirected to Uri: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Runspace Id: {0} Pipeline Id: {1}. Server is sending data of size {2} to client. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Request {0}. Creating a server remote session. UserName: {1} Custom Shell Id: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Reporting context for request: {0} Context Reported: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Reporting operation complete for request: {0}
+ Error Code: {1}
+ Error Message: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Shell Context {0}. Request Id {1}. Creating a commonad session for running a command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Stopping command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Received data from client.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} Request Id {2}. Client sent a receive request so that server can send data.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Shell Context {0} Command Context {1} IsReceiveOperation {2}. Got close operation request.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Loading assembly {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Loading type {0} for custom shell with shell Id {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Received remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Sent remoting fragment.
+ 	 Object Id: {0}
+ 	 Fragment Id: {1}
+ 	 Start Flag: {2}
+ 	 End Flag: {3}
+ 	 Payload Length: {4}
+ 	 Payload Data: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Shutting down winrm service.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Successfully rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Rehydrated object is of type: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Failed to rehydrated an object.
+ 	 Deserialized type name: {0}
+ 	 Rehydrated by casting to type: {1}
+ 	 Type cast exception: {2}
+ 	 Type cast inner exception: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Serialization depth has been overridden.
+ 	 Serialized type name: {0}
+ 	 Original depth: {1}
+ 	 Overridden depth: {2}
+ 	 Current depth below top level: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Serialization mode has been overridden.
+ 	 Serialized type name: {0}
+ 	 Overridden mode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Serialization of a script property has been skipped, because there is no runspace to use for evaluation of the property.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Getter script: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Serialization of a property has been skipped, because property getter failed.
+ 	 Property name: {0}
+ 	 Property owner's type name: {1}
+ 	 Exception from property getter: {2}
+ 	 Inner exception from property getter: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Serialization of an enumerable object might not be complete, because object being enumerated threw an exception.
+ 	 Type of object being enumerated: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serialization called object's ToString method which failed.
+ 	 Type of object: {0}
+ 	 Exception: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Maximum depth below top level has been reached, forcing object to be serialized as strings.
+ 	 Object type at max depth: {0}
+ 	 Property name at max depth: {1}
+ 	 Depth: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>XmlException has been thrown by the deserializer (most likely indicating incorrect clixml format).
+ 	 Line number: {0} Line position: {1}
+ 	 Exception: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Serialization of specified properties failed, because one of the specified properties was missing.
+ 	 Type of object: {0}
+ 	 Property name: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>PowerShell console is starting up</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>PowerShell console is ready for user input</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Tracing ErrorRecord:
+ Message: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Exception Details:
+ Message : {5}
+ Stack Trace: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exception:
+ Message: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Tracing PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Tracing Job:
+ Id: {0}
+ InstanceId: {1}
+ Name: {2}
+ Location: {3}
+ State: {4}
+ Command: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Trace Information:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Trace Information:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. Starting invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. Ending invocation of workflow function. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>END Creating new job in ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>END JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>BEGIN WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>END WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob with Guid {0} added to ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob with Guid {0} associated with remote ContainerParentJob with Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>END Execution of ContainerParentJob with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>BEGIN Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>END Execution of Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>BEGIN StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>END StateChanged event handler for Proxy Child Job with Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>BEGIN Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>END Running garbage collection</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Persistence store has reached its maximum specified size</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run script file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE has started to run a user-selected script from file {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the current command.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is resuming the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE is stopping the debugger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping into debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping over debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE is stepping out of debugging.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing all breakpoints.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is setting the breakpoint at line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is removing the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is enabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE is disabling the breakpoint on line #: {0} of file {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE has hit a breakpoint on line #: {0} of file {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/EventingResources.ko.resx b/src/System.Management.Automation/resources/ko/EventingResources.ko.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/EventingResources.ko.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ExperimentalFeatureStrings.ko.resx b/src/System.Management.Automation/resources/ko/ExperimentalFeatureStrings.ko.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ExperimentalFeatureStrings.ko.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ExtendedTypeSystem.ko.resx b/src/System.Management.Automation/resources/ko/ExtendedTypeSystem.ko.resx
new file mode 100644
index 00000000000..de2b89c4b95
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ExtendedTypeSystem.ko.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>"{0}" 속성을 찾을 수 없습니다.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0}은(는) 유효한 경로가 아닙니다.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/FileSystemProviderStrings.ko.resx b/src/System.Management.Automation/resources/ko/FileSystemProviderStrings.ko.resx
new file mode 100644
index 00000000000..7249fcce320
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/FileSystemProviderStrings.ko.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>{1}에 {0} 복사</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>{0}에서 {1}(으)로</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/FormatAndOutXmlLoadingStrings.ko.resx b/src/System.Management.Automation/resources/ko/FormatAndOutXmlLoadingStrings.ko.resx
new file mode 100644
index 00000000000..d5a9db1b97f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/FormatAndOutXmlLoadingStrings.ko.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: XML 요소 {2}에는 특성을 사용할 수 없습니다.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 노드 {2}에는 자식 개체가 있을 수 없습니다.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0}에서 오류가 발생했습니다: {2}은(는) 유효하지 않습니다.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 기본값 {2}이(가) 하나 이상 있어야 합니다.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 기본값 {2}이(가) 두 개 이상 있을 수 없습니다.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 컨트롤 이름은 null이거나 비워 둘 수 없습니다.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: Out Of Band 보기는 CustomControl 또는 ListControl만 사용할 수 있습니다.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: Out Of Band 보기에는 GroupBy를 사용할 수 없습니다.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 뷰를 로드할 수 없습니다.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: "{2}"은(는) 올바른 맞춤 값이 아닙니다.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 양의 정수가 필요합니다.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 열 머리글 정의가 올바르지 않습니다. 모든 머리글이 무시됩니다.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 대체 집합 #{3}의 행 항목 수 = {2}이(가) 기본 행 항목 수 = {4}과(와) 일치하지 않습니다.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 헤더 항목 수 = {2}이(가) 기본 행 항목 수 = {3}과(와) 일치하지 않습니다.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 목록 보기 항목은 하나 이상 지정해야 합니다.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 속성 항목이 올바르지 않습니다.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 정의 목록이 없습니다.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 부울 값이 필요합니다.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 음수가 아닌 정수가 필요합니다.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 정수가 필요합니다.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 내부 텍스트 값이 없습니다.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 사용자 지정 컨트롤 토큰 목록은 비워 둘 수 없습니다.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}을(를) 로드하지 못했습니다.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 식 없이 {2}을(를) 지정할 수 없습니다.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 식과 함께 {2}을(를) 지정할 수 없습니다.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 서식 문자열이 없습니다.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 스크립트 블록 텍스트가 없습니다.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 속성이 없습니다.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 스크립트 블록 "{2}"이(가) 올바르지 않습니다.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 어셈블리 {4}의 리소스 {3}에서 문자열 {2}을(를) 찾을 수 없습니다.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 어셈블리 {3}의 리소스 {2}을(를) 찾을 수 없습니다.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 어셈블리 {2}을(를) 찾을 수 없습니다.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 노드는 XmlElement여야 합니다.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 식이 필요합니다.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 식 없이 컨트롤이나 Label을 사용할 수 없습니다.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 컨트롤과 Label을 동시에 사용할 수 없습니다.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: SelectionSetName과 TypeName을 동시에 사용할 수 없습니다.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 뷰를 적용할 형식 또는 조건이 지정되지 않았습니다.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}은(는) 유효하지 않습니다.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: 중복된 노드가 있습니다.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2} 과(와) {3}은(는) 서로 배타적입니다.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}, {3} 및 {4}은(는) 서로 배타적입니다.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0}에서 오류가 발생했습니다: {2}은(는) 알 수 없는 노드입니다.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}은(는) 알 수 없는 특성입니다.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}은(는) 누락된 특성입니다.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0}에서 오류가 발생했습니다. 노드 {2}이(가) 없습니다.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}에 노드가 없습니다.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}은(는) 알 수 없는 노드입니다.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>파일 {1}의 XPath {0} 오류: {2}은(는) 빈 특성입니다.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>파일 {0}에서 오류가 발생했습니다: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>파일 {0}에 오류가 너무 많습니다.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>형식 데이터 파일을 로드하는 동안 오류가 발생했습니다. {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(전역 어셈블리 캐시) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>경로 {0}이(가) 완전히 정규화되지 않았습니다. 완전히 정규화된 형식 파일 경로를 지정하세요.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>FormatTable이 runspace 외부에서 만들어졌을 수 있으므로 FormatTable을 업데이트할 수 없습니다.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>FormatTable을 로드하는 동안 오류가 발생했습니다. 자세한 오류 메시지를 보려면 Errors 속성의 내용을 확인하세요.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>데이터 "{0}"의 서식을 지정하는 동안 오류가 발생했습니다: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>인덱스 {1}의 형식 이름 {0}이(가) 있는 뷰 데이터에서 오류가 발생했습니다. 헤더 항목 수= {2}이(가) 기본 행 항목 수= {3}과(와) 일치하지 않습니다.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: 서식 데이터 "{2}"이(가) 올바르지 않습니다.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: 스크립트 블록 "{2}"이(가) 올바르지 않습니다.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: {2}을(를) 로드하지 못했습니다.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: TableControl에는 {2}이(가) 하나만 포함되어야 합니다.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: 기본값이 하나 이상 있어야 합니다 {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스{1}에 있는 뷰 데이터 오류: 목록 보기 항목을 하나 이상 지정해야 합니다.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>형식 이름 {0}의 인덱스 {1}에 있는 뷰 데이터 오류: 기본값 {2}이(가) 두 개 이상 있을 수 없습니다.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>"{0}" 형식의 서식 데이터에 오류가 너무 많습니다.</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>공유 형식 테이블은 항목을 하나만 사용해 업데이트할 수 있습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/FormatAndOut_MshParameter.ko.resx b/src/System.Management.Automation/resources/ko/FormatAndOut_MshParameter.ko.resx
new file mode 100644
index 00000000000..ce05cc3e57f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/FormatAndOut_MshParameter.ko.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>{0}을(를) 다음 {1} 형식 중 하나로 변환할 수 없습니다.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>매개 변수 값이 null입니다. 다음 형식 중 하나가 필요합니다: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>중복된 키 "{0}"이(가) "{1}"과(와) 충돌합니다.</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>"{0}" 키의 형식이 {1}(으)로 잘못되었습니다. 예상 형식은 {2}입니다.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>"{0}" 키에 잘못된 형식이 {1}이(가) 있습니다. 필요한 형식은 {2}입니다.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>{0} 키가 모호합니다. {1}과(와) {2}이(가) 충돌합니다.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>키 값은 null일 수 없습니다.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>{0} 키 유형이 유효하지 않습니다. 키는 문자열이어야 합니다.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>{0} 키에 값이 없습니다.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>{0}에 필수 항목이 없습니다.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>{0} 키가 잘못되었습니다.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>키 "{0}"의 값 "{1}"이(가) 잘못되었습니다. 유효한 값은 {2}입니다.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>"{1}" 키의 "{0}" 값은 0보다 커야 합니다.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>키 "{0}"에 대해 빈 서식 문자열은 사용할 수 없습니다.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>"{0}" 키에는 빈 문자열 값을 사용할 수 없습니다.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>빈 문자열 값은 허용되지 않습니다.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>"{0}" 키의 값 "{1}"에는 와일드카드 문자를 사용할 수 없습니다.</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>"{0}"에서는 와일드카드 문자를 사용할 수 없습니다.</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>EnumerableExpansion 값이 올바르지 않습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/FormatAndOut_format_xxx.ko.resx b/src/System.Management.Automation/resources/ko/FormatAndOut_format_xxx.ko.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/FormatAndOut_format_xxx.ko.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/FormatAndOut_out_xxx.ko.resx b/src/System.Management.Automation/resources/ko/FormatAndOut_out_xxx.ko.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/FormatAndOut_out_xxx.ko.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/GetErrorText.ko.resx b/src/System.Management.Automation/resources/ko/GetErrorText.ko.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/GetErrorText.ko.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/HelpDisplayStrings.ko.resx b/src/System.Management.Automation/resources/ko/HelpDisplayStrings.ko.resx
new file mode 100644
index 00000000000..83324ef8d23
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/HelpDisplayStrings.ko.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>이름</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>예제</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>답변</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>없음</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/HelpErrors.ko.resx b/src/System.Management.Automation/resources/ko/HelpErrors.ko.resx
new file mode 100644
index 00000000000..3ce13056f98
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/HelpErrors.ko.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help가 이 세션의 도움말 파일에서 {0}을(를) 찾을 수 없습니다. 업데이트된 도움말 항목을 다운로드하려면 "Update-Help"를 입력하세요. 온라인으로 도움말을 보려면 TechNet 라이브러리(https://go.microsoft.com/fwlink/?LinkID=107116)에서 도움말 항목을 검색하세요.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>"{0}"이(가) 올바른 도움말 범주가 아니므로 도움말 범주를 처리할 수 없습니다.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>도움말 파일 "{0}"을(를) 로드할 수 없습니다. 자세한 정보: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>현재 사용자에게 파일에 대한 액세스 권한이 없으므로 도움말 파일 "{0}"에 액세스할 수 없습니다. 자세한 정보: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>도움말 파일 "{0}"이(가) 유효한 XML 문서가 아닙니다. 자세한 정보: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>{0}에 대한 도움말 콘텐츠를 파일 {1}에서 로드하는 동안 오류가 발생했습니다. 자세한 정보: {2}. 업데이트된 도움말 항목을 다운로드하려면 Update-Help cmdlet을 실행하세요. 온라인으로 도움말을 보려면 TechNet 라이브러리(https://go.microsoft.com/fwlink/?LinkID=107116)에서 도움말 항목을 검색하세요.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>공급자 "{0}"을(를) 로드할 수 없습니다. 자세한 정보: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>도움말 파일을 로드할 수 없습니다. 도움말 파일 "{0}"을(를) 로드하는 동안 다음 {1} 오류가 발생했습니다.</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>노드 "{0}"은(는) "{1}"을(를) 자식 노드로 가질 수 없습니다. 노드 경로: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>노드 "{0}"은(는) 유형 "{1}"의 자식 노드를 최대 {2}개까지 가질 수 있습니다. 노드 경로: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>레지스트리 키 "{0}{1}"을(를) 찾을 수 없습니다. "{2}"을(를) 사용하여 도움말 파일을 로드하세요.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>조건 {0}과(와) 일치하는 매개 변수가 없습니다.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0}은(는) 요청된 도움말 범주에서 지원되지 않습니다.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>명령 코드 또는 명령의 도움말 파일에 도움말 항목의 인터넷 주소(URI)가 지정되어 있지 않아 이 도움말 항목의 온라인 버전을 표시할 수 없습니다.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>지정한 URI {0}이(가) 잘못되었습니다.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>온라인 도움말을 표시하기 위해 브라우저를 시작하지 못했습니다. URI {0}을(를) 열 프로그램이나 브라우저가 연결되어 있지 않습니다.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>URI "{0}"에 지정된 프로토콜은 지원되지 않습니다. "{1}" 및 "{2}" 프로토콜만 지원됩니다.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>여러 도움말 항목을 찾았습니다. -{0} 옵션에는 도움말 항목을 하나만 사용하세요.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>연결된 runspace의 도움말을 가져올 수 없습니다. runspace가 열려 있지 않기 때문입니다.  암시적 원격 명령을 실행하여 runspace를 연 다음, 도움말을 다시 가져오세요.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>액세스가 거부되었습니다. 이 명령은 PowerShell Core 모듈이나 $pshome\Modules 디렉터리에 있는 어떤 모듈에 대해서도 도움말 항목을 업데이트할 수 없습니다.
+이 도움말 항목을 업데이트하려면 "관리자 권한으로 실행"을 사용해 PowerShell을 시작한 다음 Update-Help를 다시 실행해 보세요.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>{0}을(를) 사용하려면 애플리케이션에서 'Microsoft.NET.Sdk.WindowsDesktop'을 프로젝트 SDK로 사용하고, 해당 어셈블리 'Microsoft.PowerShell.GraphicalHost'를 사용할 수 있는지 확인하세요. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0}은(는) 원격 세션에서 작동하지 않습니다.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName은 함수 자체를 참조할 수 없습니다.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>제한된 세션에 있을 때 네트워크 위치에서 도움을 받을 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/HistoryStrings.ko.resx b/src/System.Management.Automation/resources/ko/HistoryStrings.ko.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/HistoryStrings.ko.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/HostInterfaceExceptionsStrings.ko.resx b/src/System.Management.Automation/resources/ko/HostInterfaceExceptionsStrings.ko.resx
new file mode 100644
index 00000000000..aa8826ec72c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/HostInterfaceExceptionsStrings.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>"{0}" 형식의 오류가 발생했습니다.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>호스트 프로그램 또는 명령 유형이 사용자 상호 작용을 지원하지 않으므로 사용자에게 메시지를 표시하는 명령이 실패했습니다. PowerShell 콘솔과 같이 사용자 상호 작용을 지원하는 호스트 프로그램을 사용하고, 사용자 상호 작용을 지원하지 않는 명령 유형에서 메시지 표시 관련 명령을 제거하세요.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>호스트 프로그램 또는 명령 유형이 사용자 상호 작용을 지원하지 않으므로 사용자에게 메시지를 표시하는 명령이 실패했습니다. 호스트에서 다음 메시지로 확인을 요청하는 중이었음: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>풀이 닫혔거나 실패했으므로 메서드를 호출할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/InternalCommandStrings.ko.resx b/src/System.Management.Automation/resources/ko/InternalCommandStrings.ko.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/InternalCommandStrings.ko.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/InternalHostStrings.ko.resx b/src/System.Management.Automation/resources/ko/InternalHostStrings.ko.resx
new file mode 100644
index 00000000000..a2edf6dc03b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/InternalHostStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt가 ExitNestedPrompt만큼 자주 호출되지 않았습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/InternalHostUserInterfaceStrings.ko.resx b/src/System.Management.Automation/resources/ko/InternalHostUserInterfaceStrings.ko.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/InternalHostUserInterfaceStrings.ko.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Logging.ko.resx b/src/System.Management.Automation/resources/ko/Logging.ko.resx
new file mode 100644
index 00000000000..21c18d72963
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Logging.ko.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>알 수 없음</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>구성 파일에 선언된 엔진 실험적 기능 '{0}'은(는) 현재 PowerShell에 등록되어 있지 않습니다.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>구성 파일에 선언된 실험적 기능 '{0}'은(는) 유효하지 않습니다.
+실험적 기능 이름은 아래 규칙을 따라야 합니다. 
+    엔진 기능 이름: 'PS[FeatureName]'
+    모듈 기능 이름: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Metadata.ko.resx b/src/System.Management.Automation/resources/ko/Metadata.ko.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Metadata.ko.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/MiniShellErrors.ko.resx b/src/System.Management.Automation/resources/ko/MiniShellErrors.ko.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/MiniShellErrors.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Modules.ko.resx b/src/System.Management.Automation/resources/ko/Modules.ko.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Modules.ko.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/MshHostRawUserInterfaceStrings.ko.resx b/src/System.Management.Automation/resources/ko/MshHostRawUserInterfaceStrings.ko.resx
new file mode 100644
index 00000000000..15734f3a45a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/MshHostRawUserInterfaceStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}"은(는) "{1}"보다 크거나 같을 수 없습니다.</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}"은(는) 양수여야 합니다.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>모든 문자열은 null이거나 비어 있습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/MshSignature.ko.resx b/src/System.Management.Automation/resources/ko/MshSignature.ko.resx
new file mode 100644
index 00000000000..495d32a0701
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/MshSignature.ko.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>서명이 확인되었습니다.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>파일 {0}에는 디지털 서명이 없습니다. 현재 시스템에서 이 스크립트를 실행할 수 없습니다. 스크립트 실행 및 실행 정책 설정에 대한 자세한 내용은 https://go.microsoft.com/fwlink/?LinkID=135170 about_Execution_Policies를 참조하세요.</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>파일 {0}의 내용은 파일의 해시가 디지털 서명에 저장된 해시와 일치하지 않기 때문에 무단 사용자나 프로세스에 의해 변경되었을 수 있습니다. 지정한 시스템에서 스크립트를 실행할 수 없습니다. 자세한 내용은 Get-Help about_Signing을 실행해 보세요.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>파일 {0}은(는) 서명되었지만 이 시스템에서 서명자를 신뢰할 수 없습니다.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>시스템에서 {0} 파일에 대한 서명 작업을 지원하지 않으므로 파일에 서명할 수 없습니다.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>파일 이름 확장명이 없는 파일에서는 서명 작업을 지원하지 않으므로 파일에 서명할 수 없습니다.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>서명이 현재 시스템과 호환되지 않아 확인할 수 없습니다.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>서명이 현재 시스템과 호환되지 않아 확인할 수 없습니다. 해시 알고리즘이 올바르지 않습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/MshSnapInCmdletResources.ko.resx b/src/System.Management.Automation/resources/ko/MshSnapInCmdletResources.ko.resx
new file mode 100644
index 00000000000..67e00a49d60
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/MshSnapInCmdletResources.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>작업을 수행할 수 없습니다. 지정한 cmdlet은 사용자 지정 셸에서 지원되지 않습니다.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>'{0}' 패턴과 일치하는 PowerShell 스냅인을 찾을 수 없습니다. 패턴을 확인한 다음 명령을 다시 시도하세요.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>지정한 스냅인 이름의 형식이 올바르지 않습니다.  PowerShell 스냅인 이름에는 영숫자, 대시, 밑줄, 마침표만 사용할 수 있습니다. 이름을 수정한 다음 작업을 다시 시도하십시오.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>PowerShell 스냅인 {0}은(는) 시스템 PowerShell 모듈이므로 추가할 수 없습니다. 모듈을 로드하려면 Import-Module을 사용하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/MshSnapinInfo.ko.resx b/src/System.Management.Automation/resources/ko/MshSnapinInfo.ko.resx
new file mode 100644
index 00000000000..e10459d4044
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/MshSnapinInfo.ko.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>PowerShell 레지스트리 정보에 액세스할 수 없습니다.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>PowerShell 엔진 레지스트리 정보에 액세스할 수 없습니다.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>PublicKeyToken 정보에 액세스할 수 없습니다.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>이 컴퓨터에서는 PowerShell 버전 {0}을(를) 사용할 수 없습니다.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>이 컴퓨터에는 PowerShell 스냅인 '{0}'이(가) 설치되어 있지 않습니다.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>레지스트리 키 {0}에 대해 필수 값 {1}이(가) 지정되지 않았습니다.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>필수 값 {0}이(가) 레지스트리 키 {1}의 올바른 형식이 아닙니다.  예상 형식은 'string'입니다.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>필수 값 {0}이(가) 레지스트리 키 {1}의 올바른 형식이 아닙니다.  예상 형식은 'multistring'입니다.</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>레지스트리에서 필요한 정보를 찾을 수 없거나 키 파일이 없습니다.  일부 cmdlet을 로드할 수 없습니다.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>PowerShell 버전 {0}에 등록된 스냅인이 없습니다.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>판독기가 삭제되었으므로 문자열 리소스를 검색할 수 없습니다.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>버전 값 {0}이(가) 지정되지 않았거나 레지스트리 키 {1}에 대해 올바르지 않습니다.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>PowerShell 유형 {0}에 대한 [PSVersion] 특성을 찾을 수 없습니다. [PSVersion(PowerShell SnapinBase.PSEngineVersion)]을 사용하여 해당 형식에 PSVersion 특성을 추가하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/NativeCP.ko.resx b/src/System.Management.Automation/resources/ko/NativeCP.ko.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/NativeCP.ko.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PSCommandStrings.ko.resx b/src/System.Management.Automation/resources/ko/PSCommandStrings.ko.resx
new file mode 100644
index 00000000000..ae7dab49535
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PSCommandStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>매개 변수를 추가하려면 명령이 필요합니다. 매개 변수를 추가하기 전에 {0}에 명령을 추가해야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PSConfigurationStrings.ko.resx b/src/System.Management.Automation/resources/ko/PSConfigurationStrings.ko.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PSConfigurationStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PSDataBufferStrings.ko.resx b/src/System.Management.Automation/resources/ko/PSDataBufferStrings.ko.resx
new file mode 100644
index 00000000000..115be4bd93e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PSDataBufferStrings.ko.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>지정한 인덱스가 0보다 작거나 버퍼의 항목 수보다 큽니다. 인덱스가 범위 {0}-{1}에 있어야 합니다.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>null 참조를 값 형식으로 변환할 수 없습니다.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>값을 형식 {0}에서 형식 {1}(으)로 변환할 수 없습니다.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>닫힌 버퍼에는 개체를 추가할 수 없습니다. Add 및 Insert 작업이 성공하려면 버퍼를 열어 두세요.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>SerializeInput 속성은 PSDataCollection의 PSObject 형식에만 설정할 수 있습니다. SerializeInput 속성을 false로 설정하거나 컬렉션 형식을 PSObject로 변경하세요.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PSListModifierStrings.ko.resx b/src/System.Management.Automation/resources/ko/PSListModifierStrings.ko.resx
new file mode 100644
index 00000000000..6d220304681
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PSListModifierStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>알 수 없는 목록 한정자가 검색되었습니다. '{0}'. 올바른 목록 한정자는 Add, Remove, Replace입니다.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>개체가 지원되는 컬렉션 형식이 아니므로 업데이트를 적용할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PSStyleStrings.ko.resx b/src/System.Management.Automation/resources/ko/PSStyleStrings.ko.resx
new file mode 100644
index 00000000000..608632fa194
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PSStyleStrings.ko.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>지정한 문자열에는 인쇄 가능한 콘텐츠가 포함되어 있습니다. ANSI 이스케이프 시퀀스만 포함해야 합니다. {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>진행률 렌더링이 올바르게 표시되려면 MaxWidth는 최소 18이어야 합니다.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>확장명을 추가하거나 제거할 때는 확장명의 시작에 마침표가 있어야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ParameterBinderStrings.ko.resx b/src/System.Management.Automation/resources/ko/ParameterBinderStrings.ko.resx
new file mode 100644
index 00000000000..82e8a51d726
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ParameterBinderStrings.ko.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>매개 변수 이름 '{1}'과(와) 일치하는 매개 변수를 찾을 수 없습니다.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>인수 '{1}'을(를) 받을 수 있는 위치 매개 변수를 찾을 수 없습니다.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>매개 변수 '{1}'에 대한 인수가 없습니다. '{2}' 형식의 매개 변수를 지정한 다음 다시 시도하세요.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>매개 변수 이름 '{1}'이(가) 모호해서 매개 변수를 처리할 수 없습니다. 가능한 일치 항목은 다음과 같습니다.{6}</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>'{6}'을(를) '{1}' 매개 변수에 필요한 형식 '{2}'(으)로 변환할 수 없습니다. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>매개 변수 '{1}'을(를) 바인딩할 수 없습니다. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>위치 매개 변수 '{1}'을(를) 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>이름이 지정되지 않았으므로 위치 매개 변수를 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>매개 변수 집합은 명명된 지정 매개 변수를 사용하여 확인할 수 없습니다. 함께 사용할 수 없는 매개 변수가 있거나 제공된 매개 변수 수가 부족합니다.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>하나 이상의 필수 매개 변수({1})가 없어서 명령을 처리할 수 없습니다.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>매개 변수 집합 '{6}'에는 매개 변수 '{1}'을(를) 지정할 수 없습니다.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>매개 변수 '{1}'이(가) 두 번 이상 지정되었으므로 매개 변수를 바인딩할 수 없습니다. 여러 값을 받을 수 있는 매개 변수에 여러 값을 제공하려면 배열 구문을 사용하세요. 예를 들어 "-parameter value1,value2,value3"입니다.</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>인수가 스크립트 블록으로 지정되어 있고 입력이 없어서 매개 변수 '{1}'을(를) 평가할 수 없습니다. 입력 없이는 스크립트 블록을 평가할 수 없습니다.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>매개 변수 '{1}'의 스크립트 블록에 대한 입력이 실패했습니다. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>인수 입력에서 출력이 생성되지 않아 매개 변수 '{1}'을(를) 평가할 수 없습니다.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>명령이 파이프라인 입력을 받지 않거나 입력과 해당 속성이 파이프라인 입력을 받는 어떤 매개 변수와도 일치하지 않으므로 입력 개체를 명령의 어떤 매개 변수에도 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>입력 개체에 모든 필수 매개 변수를 바인딩하는 데 필요한 정보가 없어서 바인딩할 수 없습니다. {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>매개 변수 '{1}'의 기본값을 검색할 수 없어서 파이프라인 입력을 처리할 수 없습니다. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>cmdlet에 대한 동적 매개 변수를 검색할 수 없습니다. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>다음 매개 변수에 대한 값을 제공하세요.</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>명령 파이프라인 위치 {1}에서 cmdlet {0}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>'{1}' 매개 변수에서 인수 변환을 처리할 수 없습니다. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>매개 변수 '{1}'에 대한 인수의 유효성을 검사할 수 없습니다. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>매개 변수 '{1}'을(를) 대상에 바인딩할 수 없습니다. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>매개 변수 '{1}'이(가) null이어서 인수를 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>매개 변수 '{1}'에 대한 인수가 빈 문자열이어서 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>매개 변수 '{1}'에 대한 인수가 빈 컬렉션이어서 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>매개 변수 '{1}'에 대한 인수가 빈 배열이어서 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>명령을 처리할 수 없습니다. 매개 변수 '{0}'이(가) 여러 번 정의되었습니다.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>매개 변수 '{1}'이(가) '{2}' 형식이고 Add() 메서드를 식별할 수 없거나 Add() 메서드가 여러 개 있어서 cmdlet {0}을(를) 바인딩할 수 없습니다. {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>런타임 정의 매개 변수 '{1}'이(가) 키 '{6}'(으)로 RuntimeDefinedParameterDictionary에 추가되었으므로 cmdlet {0}을(를) 바인딩할 수 없습니다. 키는 RuntimeDefinedParameter.Name과 같아야 합니다.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>인수의 PSTypeNames가 매개 변수 '{6}'에 필요한 PSTypeName과 일치하지 않아서 인수를 매개 변수 '{1}'에 바인딩할 수 없습니다.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>{0} 이름 또는 별칭과 일치하는 매개 변수에 대해 $PSDefaultParameterValues에 여러 기본값이 정의되어 있습니다. 이 기본값은 무시되었습니다.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>이 cmdlet의 $PSDefaultParameterValues에 정의된 다음 이름 또는 별칭이 여러 매개 변수에 해당합니다. {0} 기본값이 무시되었습니다.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} 이 오류는 기본 매개 변수 바인딩을 적용해서 발생했을 수 있습니다. $PSDefaultParameterValues에서 $PSDefaultParameterValues["Disabled"]를 $true로 설정한 다음 다시 시도해 기본 매개 변수 바인딩을 사용하지 않도록 설정할 수 있습니다. 오류가 발생했을 때 이 cmdlet에 성공적으로 바인딩된 기본 매개 변수는 다음과 같습니다.{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} 이 오류는 기본 매개 변수 바인딩을 적용해서 발생했을 수 있습니다. $PSDefaultParameterValues에서 $PSDefaultParameterValues["Disabled"]를 $true로 설정해 기본 매개 변수 바인딩을 사용하지 않도록 설정한 다음 다시 시도하세요. 오류가 발생했을 때 이 cmdlet에 성공적으로 바인딩된 기본 매개 변수는 다음과 같습니다.{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>매개 변수 '{1}'에 기본값 '{0}'을(를) 바인딩하지 못했습니다. {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>키 '{0}'의 형식이 올바르지 않습니다. 올바른 형식에 대한 자세한 내용은 about_Parameters_Default_Values at https://go.microsoft.com/fwlink/?LinkId=228266을 참조하세요.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>키 '{0}'의 형식이 올바르지 않습니다. 올바른 형식에 대한 자세한 내용은 about_Parameters_Default_Values at https://go.microsoft.com/fwlink/?LinkId=228266을 참조하세요.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>매개 변수 '{0}'은(는) 더 이상 사용되지 않습니다. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>'{1}' 형식의 키 '{0}'은(는) 문자열 값이 아닙니다. DefaultParameterDictionary는 문자열 값 키만 허용합니다.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>키 '{0}'은(는) 이미 사전에 추가되어 있습니다.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>메서드 또는 속성 호출은 허용되지 않습니다.</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>신뢰할 수 없는 스크립트에 대한 제한된 언어 모드에서는 '{1}' 형식의 메서드 또는 속성 '{0}' 호출을 허용하지 않습니다.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>형식 만들기가 허용되지 않음</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>신뢰할 수 없는 스크립트에 대한 제한된 언어 모드에서는 매개 변수 바인딩 중에 '{0}' 형식을 만들 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ParserStrings.ko.resx b/src/System.Management.Automation/resources/ko/ParserStrings.ko.resx
new file mode 100644
index 00000000000..5cc21561340
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ParserStrings.ko.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>'{0}' 어셈블리를 로드할 수 없습니다.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PathUtilsStrings.ko.resx b/src/System.Management.Automation/resources/ko/PathUtilsStrings.ko.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PathUtilsStrings.ko.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PipelineStrings.ko.resx b/src/System.Management.Automation/resources/ko/PipelineStrings.ko.resx
new file mode 100644
index 00000000000..ac367d67132
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PipelineStrings.ko.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>다른 파이프라인에서 이미 이 cmdlet instance를 사용하고 있으므로 처리할 수 없습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>파이프라인이 시작된 상태이므로 작업을 수행할 수 없습니다. 파이프라인을 중지한 다음 작업을 다시 시도하세요.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Stop 정책에 의해 cmdlet 실행이 차단되었으므로 cmdlet을 더 이상 실행할 수 없습니다.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>파이프라인의 첫 번째 cmdlet이 앞선 cmdlet의 결과에서 입력을 읽으려고 해서 파이프라인을 실행할 수 없습니다. 첫 번째 cmdlet을 수정하거나, 제거하거나, 첫 번째 cmdlet에 필요한 출력을 제공하는 cmdlet을 파이프라인에 추가한 다음 다시 실행해 보세요.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>cmdlet 번호를 처리할 수 없습니다. ReadFromCommand 함수에는 이미 파이프라인에 추가된 cmdlet의 ID를 지정해야 합니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>다른 cmdlet이 이미 해당 출력을 읽고 있으므로 ReadFromCommand 및 ReadErrorQueue 함수의 출력을 읽을 수 없습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>명령이 없어서 파이프라인을 실행할 수 없습니다. 파이프라인에 명령을 하나 이상 추가한 다음 다시 실행하세요.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>파이프라인 작업이 아직 시작되지 않았으므로 완료할 수 없습니다. 스테퍼블 파이프라인에서 End()를 호출하기 전에 Begin() 메서드를 호출해야 합니다.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>WriteObject 및 WriteError 메서드는 BeginProcessing, ProcessRecord 및 EndProcessing 메서드의 재정의 외부에서 호출할 수 없으며 동일한 스레드 내에서만 호출할 수 있습니다. cmdlet이 이러한 호출을 올바르게 수행하는지 확인하거나 Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>cmdlet이 ThrowTerminatingError를 호출한 후 예외를 throw했습니다.
+첫 번째 예외는 "{0}"이며 스택 추적은 "{1}"입니다.
+두 번째 예외는 "{2}"이며 스택 추적은 "{3}"입니다.</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>파이프라인을 닫은 후에는 WriteObject 및 WriteError 메서드를 호출할 수 없습니다. Microsoft 고객 지원 서비스에 문의하세요.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>파이프라인을 만드는 동안 오류가 발생했습니다.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>이 파이프라인은 연결 끊기 연결 의미 체계를 지원하지 않습니다.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>이 파이프라인은 연결 끊김 상태가 아니므로 연결할 수 없습니다.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>runspace 개체에 연결된 원격 명령이 null입니다.  지정된 원격 명령이 없으므로 연결이 끊긴 RemotePipeline 개체를 만들 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/PowerShellStrings.ko.resx b/src/System.Management.Automation/resources/ko/PowerShellStrings.ko.resx
new file mode 100644
index 00000000000..3be15a3bac7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/PowerShellStrings.ko.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>현재 PowerShell 인스턴스의 상태는 이 작업에 유효하지 않습니다.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>명령이 이미 시작되었으므로 작업을 수행할 수 없습니다. 명령이 완료될 때까지 기다리거나 중지한 다음 다시 시도하세요.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>명령이 지정되지 않았습니다.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>PowerShell 인스턴스가 중첩된 PowerShell 인스턴스를 만들 수 있는 올바른 상태가 아닙니다. 중첩된 PowerShell 인스턴스는 실행 중인 PowerShell 인스턴스에서만 만들 수 있습니다.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>runspace가 '{0}' 상태가 아니므로 작업을 수행할 수 없습니다. runspace의 현재 상태는 '{1}'입니다.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>중첩된 PowerShell 인스턴스는 비동기적으로 호출할 수 없습니다. Invoke 메서드를 사용하세요.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} 개체는 이 PowerShell 인스턴스에서 {1}을(를) 호출하여 만들어지지 않았습니다.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>runspace가 스레드를 다시 사용하도록 설정된 경우 호출 설정의 아파트 상태는 runspace와 일치해야 합니다.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>runspace가 현재 스레드를 사용하도록 설정된 경우 호출 설정의 아파트 상태는 현재 스레드의 아파트 상태와 일치해야 합니다.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>매개 변수를 추가하려면 명령이 필요합니다. 매개 변수를 추가하기 전에 PowerShell 인스턴스에 명령을 추가하세요.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>사전의 키는 문자열이어야 합니다.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>이 스레드에서 명령을 실행할 수 있는 Runspace가 없습니다. System.Management.Automation.Runspaces.Runspace 형식의 DefaultRunspace 속성에서 Runspace를 제공할 수 있습니다. 호출하려는 명령은 다음과 같습니다. {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>이 PowerShell 개체는 원격 runspace 또는 runspace 풀과 연결되어 있지 않으므로 연결할 수 없습니다.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>실행 중인 명령의 연결이 끊겼지만 원격 서버에서는 아직 실행 중입니다.  명령 작업 상태와 출력 데이터를 가져오려면 다시 연결하세요.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>현재 PowerShell 세션이 연결 끊김 상태이므로 작업을 수행할 수 없습니다.  이 PowerShell 세션에 연결한 다음 명령이 완료될 때까지 기다리거나 명령을 중지하세요.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>현재 PowerShell 세션이 연결 끊김 상태이므로 작업을 수행할 수 없습니다.  이 PowerShell 세션에 연결한 후 다시 시도하세요.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>원격 명령에 대한 연결을 시도했지만 실패했습니다.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>명령이 현재 중지 중이므로 작업을 수행할 수 없습니다. 명령이 중지될 때까지 기다린 다음 다시 시도하세요.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>이 스레드에서 명령을 실행할 수 있는 Runspace가 없습니다. System.Management.Automation.Runspaces.Runspace 형식의 DefaultRunspace 속성에서 Runspace를 제공할 수 있습니다. 현재 PowerShell 인스턴스에 호출할 명령이 없습니다.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>현재 사용할 수 있는 runspace가 없으므로 현재 runspace를 사용하는 PowerShell 개체를 만들 수 없습니다.  초기 세션 상태로 만들어진 경우처럼 현재 runspace가 시작 중일 수 있습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ProgressRecordStrings.ko.resx b/src/System.Management.Automation/resources/ko/ProgressRecordStrings.ko.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ProgressRecordStrings.ko.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ProviderBaseSecurity.ko.resx b/src/System.Management.Automation/resources/ko/ProviderBaseSecurity.ko.resx
new file mode 100644
index 00000000000..96ad653bccf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ProviderBaseSecurity.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>ISecurityDescriptorCmdletProvider 인터페이스가 이 공급자에서 지원되지 않으므로 인터페이스를 사용할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/ProxyCommandStrings.ko.resx b/src/System.Management.Automation/resources/ko/ProxyCommandStrings.ko.resx
new file mode 100644
index 00000000000..c5b40b475f0
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/ProxyCommandStrings.ko.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>'help' 매개 변수를 'get-help' 명령으로 만든 올바른 HelpInfo 개체로 인식할 수 없습니다.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>CommandMetadata에 이름이 없으므로 프록시 명령을 생성할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/RegistryProviderStrings.ko.resx b/src/System.Management.Automation/resources/ko/RegistryProviderStrings.ko.resx
new file mode 100644
index 00000000000..37920ec66a8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/RegistryProviderStrings.ko.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>항목 설정</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 값: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>항목 지우기</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>항목: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>새 항목</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>항목: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>키 제거</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>항목: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>키 복사</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 대상: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>항목 이름 바꾸기</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>항목: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>항목 이동</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 대상: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>속성 설정</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 속성: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>속성 지우기</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 속성: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>새 속성</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 속성: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>속성 제거</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} 속성: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>속성 이름을 바꿉니다.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>속성 복사</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>속성 이동</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>항목: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>작업이 완료되지 않았습니다. 제공된 위치에서는 이 작업을 허용하지 않습니다.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>원본 위치에서는 이 작업을 허용하지 않습니다.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>대상 위치에서는 이 작업을 허용하지 않습니다.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>로컬 컴퓨터에 대한 구성 설정</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>현재 사용자에 대한 소프트웨어 설정</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>이 경로에 이미 키가 있습니다.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>대상 경로가 원본 경로의 하위 경로이므로 작업을 수행할 수 없습니다.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>속성이 이미 있습니다.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>{1} 경로에 속성 {0}이(가) 없습니다.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>지정한 경로에 있는 레지스트리 키가 없습니다.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>'Type' 매개 변수를 바인딩할 수 없습니다. "{0}"을(를) "{1}"(으)로 변환할 수 없습니다. 가능한 열거형 값은 "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown"입니다.</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>키 {0}이(가) 만들어졌지만 기본값을 설정할 수 없습니다.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>지정한 루트로 드라이브를 만들 수 없습니다. 루트 경로가 없습니다.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>같은 컨테이너에 같은 이름의 항목이 이미 있으므로 이름을 바꿀 수 없습니다.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>레지스트리 키 이름은 유효한 기본 키 이름으로 시작해야 합니다.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>하위 키 인수가 잘못되었습니다.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>하위 키가 존재하지 않으므로 하위 키 트리를 삭제할 수 없습니다.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>해당 이름의 값이 없습니다.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>열거형 값 {0}이(가) 올바르지 않습니다.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>값 인수를 지정해야 합니다.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>이름 인수를 지정해야 합니다.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>지정한 RegistryValueKind는 유효하지 않은 값입니다.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue는 null 문자열 참조를 포함하는 String[]을 허용하지 않습니다.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>레지스트리 하위 키는 255자 이하여야 합니다.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>비어 있지 않은 하위 키 이름을 지정해야 합니다.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>값 개체의 형식이 지정한 RegistryValueKind와 일치하지 않거나 개체를 올바르게 변환할 수 없습니다.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue는 '{0}' 형식의 배열을 지원하지 않습니다. Byte[]와 String[]만 지원됩니다.</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>지정한 레지스트리 키가 없습니다.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>지정된 값 이름의 길이가 최대 16383자를 초과합니다.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>지정한 값 데이터의 크기가 최대 1MB를 초과합니다.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>지정한 레지스트리 하위 키가 없습니다.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>지정한 RegistryKeyPermissionCheck 값이 올바르지 않습니다.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>레지스트리 키에 하위 키가 있습니다. 이 메서드에서는 재귀적 제거를 지원하지 않습니다.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Transaction.Current 또는 지정한 트랜잭션이 없으면 KTM 핸들을 만들 수 없습니다.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>지정한 트랜잭션 또는 Transaction.Current는 이 TransactedRegistryKey를 만들거나 연 데 사용한 트랜잭션과 일치해야 합니다.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>이 TransactedRegistryKey 개체는 미리 정의된 키이므로 트랜잭션과 연결되어 있지 않습니다.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>요청한 레지스트리 액세스가 허용되지 않습니다.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>레지스트리 키 '{0}'에 대한 액세스가 거부되었습니다.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>레지스트리 키에 쓸 수 없습니다.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>닫힌 레지스트리 키에 액세스할 수 없습니다.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>알 수 없는 오류 {0}이(가) 발생했습니다.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>이 플랫폼에서는 레지스트리 트랜잭션을 지원하지 않습니다.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>지정한 핸들이 잘못되었습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/RemotingErrorIdStrings.ko.resx b/src/System.Management.Automation/resources/ko/RemotingErrorIdStrings.ko.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/RemotingErrorIdStrings.ko.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/RunspaceInit.ko.resx b/src/System.Management.Automation/resources/ko/RunspaceInit.ko.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/RunspaceInit.ko.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/RunspacePoolStrings.ko.resx b/src/System.Management.Automation/resources/ko/RunspacePoolStrings.ko.resx
new file mode 100644
index 00000000000..f03c38dfba4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/RunspacePoolStrings.ko.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>최대 풀 크기는 1보다 작을 수 없습니다.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>최소 풀 크기는 1보다 작을 수 없습니다.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>최소 풀 크기는 최대 풀 크기보다 클 수 없습니다.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>실행 공간 풀의 상태가 이 작업에 유효하지 않습니다.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>실행 공간 풀이 '{0}' 상태가 아니므로 작업을 수행할 수 없습니다. 현재 상태는 '{1}'입니다.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>실행 공간 풀이 'BeforeOpen' 상태가 아니므로 열 수 없습니다. 현재 상태는 '{0}'입니다.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} 개체가 현재 RunspacePool 인스턴스에서 {1}을(를) 호출하여 만들어지지 않았습니다.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>실행 공간이 현재 풀에 속해 있지 않으므로 현재 풀에 실행 공간을 해제할 수 없습니다.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>실행 공간 풀이 열린 후에는 이 속성을 변경할 수 없습니다.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>이 실행 공간은 연결 끊기 및 연결 작업을 지원하지 않습니다.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>실행 공간 풀이 연결 끊김 상태이므로 작업을 수행할 수 없습니다.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>서버에서 연결 끊기 작업이 지원되지 않습니다.  원격 실행 공간 풀 연결 끊기를 지원하려면 서버에서 PowerShell 3.0 이상을 실행해야 합니다.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>이 실행 공간 풀 {0}은(는) 원격 서버에서 실행 중인 명령에 대해 연결이 끊어진 PowerShell 개체를 제공하도록 구성되어 있지 않습니다.  RunspacePool 클래스의 GetRunspacePools() 정적 메서드를 사용하여 서버를 쿼리하고 이렇게 하도록 구성된 실행 공간 풀 개체를 반환하세요.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>해당 서버 쪽 실행 공간 풀이 다른 클라이언트에 연결되어 있으므로 이 실행 공간 풀을 연결할 수 없습니다.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>서버에서 ResetRunspaceState가 지원되지 않습니다.  서버에서 PowerShell 5.0 이상을 실행해야 합니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/RunspaceStrings.ko.resx b/src/System.Management.Automation/resources/ko/RunspaceStrings.ko.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/RunspaceStrings.ko.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/SecuritySupportStrings.ko.resx b/src/System.Management.Automation/resources/ko/SecuritySupportStrings.ko.resx
new file mode 100644
index 00000000000..2061817dd6f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/SecuritySupportStrings.ko.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>인증서를 로드할 수 없습니다. '{0}'은(는) 파일 시스템 경로로 확인되어야 합니다.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>인증서 '{0}'은(는) 암호화에 사용할 수 없습니다. 암호화 인증서에는 데이터 암호화 또는 키 암호화 키 사용이 포함되어야 하며, 문서 암호화 확장된 키 사용({1})도 포함되어야 합니다.</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>인증서를 로드할 수 없습니다. 식별자 '{0}'이(가) 여러 인증서와 일치합니다. 여러 수신자에게 암호화하려면 여러 인증서와 일치하는 와일드카드 대신 '{1}' 매개 변수에 여러 개의 특정 값을 제공하세요.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>암호화 인증서를 로드할 수 없습니다. 인증서 설정 '{0}'은(는) 유효한 base-64 인코딩 인증서를 나타내지 않으며, 파일, 디렉터리, 지문 또는 주체 이름으로 된 유효한 인증서도 나타내지 않습니다.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>경고: 인증서 '{0}'에 개인 키가 포함되어 있습니다. 암호화에 사용되는 보호된 이벤트 로깅 인증서에는 공개 키만 포함되어야 합니다.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>오류: 이벤트 로그 메시지 '{0}'을(를) 보호할 수 없음: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>오류: 인증서를 찾거나 사용할 수 없음: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>보안 문자열을 암호화할 세션 키를 사용할 수 없습니다.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>버퍼 오프셋이 잘못되었습니다.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>공개 키 데이터가 잘못되었습니다.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>공개 키를 가져올 수 없습니다.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>세션 키 데이터가 잘못되었습니다.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>스크립트 파일 '{0}'은(는) 시스템 정책에 의해 실행이 차단되었습니다.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>알 수 없는 스크립트 파일 정책 적용 값이 반환됨: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>스크립트 파일 읽기</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>스크립트 파일 '{0}'은(는) 정책에서 신뢰되지 않으므로 ConstrainedLanguage 모드에서 실행됩니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/Serialization.ko.resx b/src/System.Management.Automation/resources/ko/Serialization.ko.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/Serialization.ko.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/SessionStateProviderBaseStrings.ko.resx b/src/System.Management.Automation/resources/ko/SessionStateProviderBaseStrings.ko.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/SessionStateProviderBaseStrings.ko.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/SessionStateStrings.ko.resx b/src/System.Management.Automation/resources/ko/SessionStateStrings.ko.resx
new file mode 100644
index 00000000000..371333a1391
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/SessionStateStrings.ko.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>경로 '{0}'이(가) 없으므로 찾을 수 없습니다.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/StringDecoratedStrings.ko.resx b/src/System.Management.Automation/resources/ko/StringDecoratedStrings.ko.resx
new file mode 100644
index 00000000000..dfc6501f21a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/StringDecoratedStrings.ko.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>이 메서드에는 'ANSI' 또는 'PlainText'만 지원됩니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/SubsystemStrings.ko.resx b/src/System.Management.Automation/resources/ko/SubsystemStrings.ko.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/SubsystemStrings.ko.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/SuggestionStrings.ko.resx b/src/System.Management.Automation/resources/ko/SuggestionStrings.ko.resx
new file mode 100644
index 00000000000..801524473b3
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/SuggestionStrings.ko.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>명령 "{0}"을(를) 찾을 수 없지만 현재 위치에 있습니다.
+PowerShell은 기본적으로 현재 위치에서 명령을 로드하지 않습니다('Get-Help about_Command_Precedence' 참조).
+
+이 명령을 신뢰하는 경우 대신 다음 명령을 실행하세요:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>가장 유사한 명령은 다음과 같습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/TabCompletionStrings.ko.resx b/src/System.Management.Automation/resources/ko/TabCompletionStrings.ko.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/TabCompletionStrings.ko.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/TransactionStrings.ko.resx b/src/System.Management.Automation/resources/ko/TransactionStrings.ko.resx
new file mode 100644
index 00000000000..5ea91426480
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/TransactionStrings.ko.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>트랜잭션을 사용할 수 없습니다. 활성 트랜잭션이 없습니다.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>트랜잭션을 커밋할 수 없습니다. 활성 트랜잭션이 없습니다.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>활성 트랜잭션이 없으므로 트랜잭션을 롤백할 수 없습니다.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>트랜잭션을 롤백할 수 없습니다. 트랜잭션이 이미 커밋되었습니다.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>트랜잭션을 커밋할 수 없습니다. 트랜잭션이 이미 커밋되었습니다.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>트랜잭션을 커밋할 수 없습니다. 트랜잭션이 롤백되었거나 시간이 초과되었습니다.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>트랜잭션을 롤백할 수 없습니다. 트랜잭션이 이미 롤백되었거나 시간이 초과되었습니다.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>활성 트랜잭션을 설정할 수 없습니다. 트랜잭션이 생성되지 않았습니다.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>활성 트랜잭션을 설정할 수 없습니다. 활성 트랜잭션이 롤백되었거나 시간이 초과되었습니다.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>이 cmdlet에는 활성 트랜잭션이 필요합니다. 현재 트랜잭션은 이미 커밋되었거나 롤백되었습니다.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>이 cmdlet에는 트랜잭션이 필요합니다. -UseTransaction 매개 변수와 함께 명령을 다시 실행하세요.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>트랜잭션을 사용할 수 없습니다. 트랜잭션이 시작되지 않았습니다.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>트랜잭션을 사용할 수 없습니다. 트랜잭션이 커밋되었습니다.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>트랜잭션을 사용할 수 없습니다. 트랜잭션이 롤백되었거나 시간이 초과되었습니다.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>트랜잭션을 사용할 수 없습니다. 트랜잭션 시간이 초과되었습니다.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>기본 트랜잭션이 설정되지 않았습니다.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>기본 트랜잭션이 활성 상태가 아닙니다.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>다른 트랜잭션이 생성된 후에는 기본 트랜잭션을 설정할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/TypesXmlStrings.ko.resx b/src/System.Management.Automation/resources/ko/TypesXmlStrings.ko.resx
new file mode 100644
index 00000000000..8b353b0f873
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/TypesXmlStrings.ko.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : 오류: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : 형식 "{3}" 오류: {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>노드 "{0}"은(는) "{1}"에서 한 번만 발생해야 합니다. 부모 노드 "{1}"은(는) 무시됩니다.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>노드 {0}은(는) 허용되지 않습니다. 다음 노드가 허용됩니다. {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>노드 "{0}"에는 내부 텍스트가 없어야 합니다.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>노드 "{0}"에는 내부 텍스트가 있어야 합니다.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>노드 "{0}"을(를) 찾을 수 없습니다. "{1}" 아래에는 하나만 있어야 합니다. 부모 노드 "{1}"은(는) 무시됩니다.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>"Type" 노드에는 "Members", "TypeConverters" 또는 "TypeAdapters"가 있어야 합니다.</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>예외로 인해 {0} 형식에 대한 형식 변환기의 인스턴스를 만들 수 없습니다. {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell은 다음 예외 때문에 형식 {0}에 대한 형식 어댑터의 인스턴스를 만들 수 없습니다: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>조정된 형식 "{0}"이(가) 잘못되었습니다.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>TypeConverter가 이미 있으므로 무시되었습니다.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>TypeAdapter가 이미 있으므로 무시되었습니다.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>"{0}" 형식은 TypeConverter 또는 PSTypeConverter여야 합니다.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>"{0}" 형식은 PSPropertyAdapter여야 합니다.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>멤버 {0}이(가) 이미 있습니다.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>다음 멤버 이름이 예약되어 있습니다. {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>예외: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty에는 getter 또는 setter가 있어야 합니다.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty에는 getter 또는 setter가 있어야 합니다.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>값은 {0} 대신 TRUE 또는 FALSE여야 합니다.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>노드 "{0}"에는 "{1}" 특성이 없어야 합니다.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: 파일을 찾을 수 없습니다.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: 파일은 이미 {2}에서 로드되었으므로 건너뛰었습니다.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>레지스트리 키 {0}{1}을(를) 찾을 수 없습니다. {2} 사용하여 구성 파일을 로드합니다.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>레지스트리 키에 지정된 경로 {0}을(를) 찾을 수 없습니다: {1}{2}. 구성 파일을 로드하기 위해 {3}을(를) 사용합니다.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: ps1xml 파일 이름 확장명이 없으므로 파일을 건너뛰었습니다.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: 유효성 검사 예외 {2} 때문에 파일을 건너뛰어 졌습니다.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>멤버 "{0}"은(는) 메모여야 합니다.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>메모 "{0}":"{1}"을(를) 변환할 수 없습니다.</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>여기서는 "{0}" 멤버를 사용하지 마세요.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>멤버 "{0}"에는 "{1}" 형식이 있어야 합니다.</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}"은(는) "{1}"이(가) "{2}"이고 "{3}"이(가) "{4}"일 때 있어야 합니다.</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>이전 오류로 인해 모든 직렬화 설정이 무시되었습니다.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}"은(는) 표준 멤버가 아니며 무시됩니다.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>{0} 경로는 정규화되지 않았습니다. 정규화된 형식의 파일 경로를 지정하세요.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>TypeTable은 runspace 외부에서 만들어졌을 수 있으므로 업데이트할 수 없습니다.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>TypeTable을 로드하는 동안 오류가 발생했습니다. 자세한 오류 메시지는 Errors 속성을 확인하세요.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>TypeData "{0}" 오류: {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}"에는 "{1}" 속성에 대한 값이 있어야 합니다.</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}"의 속성 "{1}"에는 null이나 빈 문자열이 있으면 안 됩니다.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>"{0}" 형식을 찾을 수 없습니다. 형식 이름 값은 형식의 전체 이름이어야 합니다. 형식 이름을 확인한 다음 명령을 다시 실행하세요.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData에는 "Members", "TypeConverters", "TypeAdapters" 또는 "StandardMembers"가 있어야 합니다.</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>공유 형식 테이블은 여러 항목으로 업데이트할 수 없습니다.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/VerbDescriptionStrings.ko.resx b/src/System.Management.Automation/resources/ko/VerbDescriptionStrings.ko.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/VerbDescriptionStrings.ko.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ko/WildcardPatternStrings.ko.resx b/src/System.Management.Automation/resources/ko/WildcardPatternStrings.ko.resx
new file mode 100644
index 00000000000..9b8afeb30a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ko/WildcardPatternStrings.ko.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>지정한 와일드카드 문자 패턴이 유효하지 않음: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Authenticode.pl.resx b/src/System.Management.Automation/resources/pl/Authenticode.pl.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Authenticode.pl.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/AuthorizationManagerBase.pl.resx b/src/System.Management.Automation/resources/pl/AuthorizationManagerBase.pl.resx
new file mode 100644
index 00000000000..28ac3f33141
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/AuthorizationManagerBase.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Sprawdzenie elementu AuthorizationManager nie powiodło się.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/AutomationExceptions.pl.resx b/src/System.Management.Automation/resources/pl/AutomationExceptions.pl.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/AutomationExceptions.pl.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CatalogStrings.pl.resx b/src/System.Management.Automation/resources/pl/CatalogStrings.pl.resx
new file mode 100644
index 00000000000..3cbd3e5a4e5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CatalogStrings.pl.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Nie można wygenerować pliku definicji wykazu.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Dodawanie pliku „{0}” do wykazu. Ścieżka względna pliku w wykazie to „{1}”.</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Pomijanie weryfikacji pliku {0} z wykazu. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Znaleziono plik {0} w wykazie o wartości skrótu {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Ścieżki wykazu zawierają wiele plików o tej samej ścieżce względnej {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Znaleziono plik {0} na dysku o wartości skrótu {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Pomijanie weryfikacji pliku {0} ze ścieżki.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Nie można uzyskać dojścia do kontekstu administratora katalogu dla danego algorytmu wyznaczania wartości skrótu {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Nie można utworzyć skrótu dla pliku {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Nie można otworzyć pliku wykazu {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>Wersja wykazu jest nieprawidłowa. Obsługujemy tylko wersję {0} i wersję {1} wykazu.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Nie można otworzyć pliku definicji wykazu.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Znaleziono wiele wpisów elementu członkowskiego pliku {0} w wykazie.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Nie można odnaleźć nazwy pliku lub ścieżki dla elementu członkowskiego wykazu  {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Nie można odnaleźć pliku {0} dla skrótu.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Nie można odczytać pliku {0} w celu obliczenia jego wartości skrótu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CimInstanceTypeAdapterResources.pl.resx b/src/System.Management.Automation/resources/pl/CimInstanceTypeAdapterResources.pl.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CimInstanceTypeAdapterResources.pl.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CmdletizationCoreResources.pl.resx b/src/System.Management.Automation/resources/pl/CmdletizationCoreResources.pl.resx
new file mode 100644
index 00000000000..765cae933dd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CmdletizationCoreResources.pl.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Polecenia cmdlet w ramach klasy „{0}”</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Nie można przetworzyć pliku XML definicji polecenia cmdlet dla następującego pliku: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Nie można przetworzyć atrybutu ObjectModelWrapper. Typ {0} definiuje wiele zestawów parametrów. Sprawdź, czy plik XML definicji polecenia cmdlet określa prawidłowy typ w atrybucie ObjectModelWrapper, i spróbuj ponownie.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Nie można przetworzyć atrybutu ObjectModelWrapper. Typ {0} jest otwartym typem ogólnym.  Sprawdź, czy plik XML definicji polecenia cmdlet określa prawidłowy typ w atrybucie ObjectModelWrapper, i spróbuj ponownie.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Nie można przetworzyć atrybutu ObjectModelWrapper. Typ {0} nie pochodzi od następującej klasy: {1}.  Sprawdź, czy plik XML definicji polecenia cmdlet określa prawidłowy typ w atrybucie ObjectModelWrapper, i spróbuj ponownie.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Nie można przetworzyć atrybutu ObjectModelWrapper. Typ {0} definiuje parametr polecenia cmdlet {1} z parametrem atrybutu {2}, który jest ignorowany.  Sprawdź, czy plik XML definicji polecenia cmdlet określa prawidłowy typ w atrybucie ObjectModelWrapper, i spróbuj ponownie.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Nie można zdefiniować parametru {0} dla polecenia cmdlet {1}.  Nazwa parametru jest już zdefiniowana przez klasę {2}.  Zmień nazwę parametru w pliku XML definicji polecenia cmdlet i ponów próbę.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Nie można zdefiniować parametru {0} dla polecenia cmdlet {1}. Nazwa parametru jest już zdefiniowana w elemencie XML {2}. Zmień nazwę parametru w pliku XML definicji polecenia cmdlet, a następnie spróbuj ponownie.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>Wartość atrybutu EnumName nie przekłada się na prawidłowy identyfikator języka C#: {0}. Sprawdź atrybut EnumName w pliku XML definicji polecenia cmdlet, a następnie spróbuj ponownie.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Nie można przetworzyć elementu &lt;Enum EnumName="{0}" ... &gt;. {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>Komputer zdalny zwrócił nieprawidłowy plik CDXML. Następująca karta polecenia cmdlet nie jest obsługiwana w przypadku importowania modułu CDXML z komputera zdalnego: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CommandBaseStrings.pl.resx b/src/System.Management.Automation/resources/pl/CommandBaseStrings.pl.resx
new file mode 100644
index 00000000000..2c4c6fdb256
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CommandBaseStrings.pl.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Kontynuować tę operację?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Tak</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Kontynuuj, wykonując tylko kolejny krok operacji.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Tak w przypadku &amp;Wszystko</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Kontynuuj, wykonując wszystkie kroki operacji.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Nie</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Pomiń tę operację i kontynuuj, wykonując następną operację.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Nie w przypadku W&amp;szystko</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Pomiń tę operację i wszystkie kolejne operacje.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Zatrzymaj to polecenie.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Zatrzymaj polecenie</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Wstrzymaj</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Wstrzymaj bieżący potok i wróć do wiersza polecenia. Wpisz polecenie „{0}”, aby wznowić potok.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Program „{0}” zakończył działanie z kodem zakończenia innym niż zero: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Wykonywanie operacji „{0}” w lokalizacji docelowej „{1}”.</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Czy na pewno chcesz wykonać tę akcję?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Potwierdź</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>Uruchomione polecenie zostało zatrzymane, ponieważ zmienna preferencji „{0}” lub wspólny parametr jest ustawiony na wartość Zatrzymaj: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>Uruchomione polecenie zostało zatrzymane, ponieważ zmienna preferencji „{0}” lub wspólny parametr jest ustawiony na wartość Zatrzymaj.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>Uruchomione polecenie zostało zatrzymane, ponieważ zmienna preferencji „{0}” lub wspólny parametr jest ustawiony na następującą wartość, która nie jest prawidłowa: „{1}”.</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>Uruchomione polecenie zostało zatrzymane, ponieważ użytkownik wybrał opcję Zatrzymaj.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>Uruchomione polecenie zostało zatrzymane, ponieważ użytkownik przerwał je.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Nie można bezpośrednio wywoływać poleceń cmdlet pochodzących z polecenia PSCmdlet.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Polecenie cmdlet „{0}” nie obsługuje parametru „{1}” w sesji zdalnej.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Łączna liczba: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Szacowany łączny koszt: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Nieznana łączna liczba</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>polecenie „{0}”</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>Element {0} jest przestarzały. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Wywołanie exec nie powiodło się z powodu błędu {0} w przypadku wiersza polecenia: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Nie znaleziono polecenia „{0}”. Określone polecenie musi być plikiem wykonywalnym.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Sprawdzanie dot-source podczas przetwarzania bloku skryptu</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Przetwarzanie dot-source dla bloku skryptu „{0}” zakończy się niepowodzeniem w trybie ograniczonego języka, ponieważ jego tryb języka „{1}” nie jest zgodny z bieżącym trybem języka „{2}”.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Wyszukiwanie poleceń</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Polecenie „{0}” w module „{1}” jest niezaufane i nie będzie dostępne w trybie ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ConsoleInfoErrorStrings.pl.resx b/src/System.Management.Automation/resources/pl/ConsoleInfoErrorStrings.pl.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ConsoleInfoErrorStrings.pl.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CoreClrStubResources.pl.resx b/src/System.Management.Automation/resources/pl/CoreClrStubResources.pl.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CoreClrStubResources.pl.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CredUI.pl.resx b/src/System.Management.Automation/resources/pl/CredUI.pl.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CredUI.pl.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Credential.pl.resx b/src/System.Management.Automation/resources/pl/Credential.pl.resx
new file mode 100644
index 00000000000..fad78f9e971
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Credential.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Nie można serializować poświadczeń. Jeśli to polecenie uruchamia przepływ pracy, nie można utrwalić poświadczeń, ponieważ proces, w którym przepływ pracy jest uruchamiany, nie ma uprawnień do serializacji poświadczeń.
+
+-- Jeśli przepływ pracy został uruchomiony w sesji PSSession na komputerze lokalnym, dodaj parametr EnableNetworkAccess do polecenia, które utworzyło sesję.
+-- Jeśli przepływ pracy został uruchomiony w sesji PSSession na komputerze zdalnym, dodaj parametr Authentication z wartością CredSSP do polecenia, które utworzyło sesję. Możesz też nawiązać połączenie z konfiguracją sesji, która ma wartość właściwości RunAsUser.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>Wartość parametru UserName ma niepoprawny format.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/CredentialAttributeStrings.pl.resx b/src/System.Management.Automation/resources/pl/CredentialAttributeStrings.pl.resx
new file mode 100644
index 00000000000..25b11f87af4
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/CredentialAttributeStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/DebuggerStrings.pl.resx b/src/System.Management.Automation/resources/pl/DebuggerStrings.pl.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/DebuggerStrings.pl.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/DescriptionsStrings.pl.resx b/src/System.Management.Automation/resources/pl/DescriptionsStrings.pl.resx
new file mode 100644
index 00000000000..26437954488
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/DescriptionsStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>Element {0} nie może mieć wartości null ani być pusty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/DiscoveryExceptions.pl.resx b/src/System.Management.Automation/resources/pl/DiscoveryExceptions.pl.resx
new file mode 100644
index 00000000000..b1eec2c4d78
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/DiscoveryExceptions.pl.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>Nie można sprawdzić poprawności nazwy polecenia cmdlet „{0}”, ponieważ ma ona niepoprawny format. Nazwy poleceń cmdlet muszą zawierać czasownik i rzeczownik oddzielony znakiem „-”, na przykład „Get-Process”.</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>Parametr „{0}” jest wielokrotnie zadeklarowany w zestawie parametrów „{1}”.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>Alias „{0}” jest deklarowany wiele razy.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Nie można zadeklarować parametru. Parametry mogą być deklarowane tylko w polach i właściwościach.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Nie można przetworzyć polecenia cmdlet. Nazwa polecenia cmdlet musi składać się z pary czasowników i rzeczowników rozdzielonych znakiem „-”.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>Termin „{0}” nie jest rozpoznawany jako nazwa polecenia cmdlet, funkcji, pliku skryptu lub programu wykonywalnego.
+Sprawdź pisownię nazwy lub sprawdź, czy ścieżka została dołączona, sprawdź, czy ścieżka jest poprawna, i spróbuj ponownie.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument „{0}” nie jest rozpoznawany jako polecenie cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>Argument „{0}” nie jest rozpoznawany jako polecenie cmdlet, prawdopodobnie dlatego, że nie pochodzi od klas cmdlet lub PSCmdlet: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Nie można rozpoznać aliasu „{0}”, ponieważ odwołuje się on do terminu „{1}”, który nie jest rozpoznawany jako polecenie cmdlet, funkcja, program wykonywalny lub plik skryptu. Sprawdź termin i spróbuj ponownie.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Nie można przetworzyć parametru „{0}” o wartości „{1}”, ponieważ nie jest on poleceniem cmdlet i nie może zostać przetworzony przez element CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>Polecenie cmdlet o nazwie „{0}” już istnieje. Polecenia cmdlet muszą mieć unikatowe nazwy.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>Dostawca poleceń cmdlet o nazwie „{0}” już istnieje. Dostawcy poleceń cmdlet muszą mieć unikatowe nazwy.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>Zestaw o nazwie „{0}” już istnieje. Zestawy muszą mieć unikatowe nazwy.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>Skrypt o nazwie „{0}” już istnieje. Skrypty muszą mieć unikatowe nazwy.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Nie można przetworzyć instrukcji #requires, ponieważ ma ona niepoprawny format.
+Instrukcja #requires musi mieć jeden z następujących formatów:
+ „#requires -shellid &lt;shellID&gt;”
+ „#requires -version &lt;major.minor&gt;”
+ „#requires -psedition &lt;edition&gt;”
+ „#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]”
+ „#requires -modules &lt;ModuleSpecification&gt;”
+ „#requires -runasadministrator”</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ zawierał instrukcję „#requires” o identyfikatorze powłoki {1}, która jest niezgodna z bieżącą powłoką. Aby uruchomić ten skrypt, musisz użyć powłoki znajdującej się w lokalizacji „{2}”.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ zawierał instrukcję „#requires” o identyfikatorze powłoki {1}, która jest niezgodna z bieżącą powłoką.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ zawiera on instrukcję „#requires” dla programu PowerShell {1}. Wersja programu PowerShell wymagana przez skrypt jest niezgodna z aktualnie uruchomioną wersją programu PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ zawierał instrukcję „#requires” dla wersji programu PowerShell „{1}”. Wersja programu PowerShell wymagana przez skrypt jest niezgodna z aktualnie uruchomioną wersją programu PowerShell {2}.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ brakuje następujących przystawek określonych przez instrukcje „#requires” skryptu: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ zawiera on instrukcję „#requires” służącą do uruchamiania jako administrator. Bieżąca sesja programu PowerShell nie jest uruchomiona jako administrator. Uruchom program PowerShell przy użyciu opcji Uruchom jako administrator, a następnie spróbuj ponownie uruchomić skrypt.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Wersja {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>Nie można pobrać polecenia, ponieważ parametr ArgumentList można określić tylko podczas pobierania pojedynczego polecenia cmdlet lub skryptu.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>Nazwa parametru „{0}” jest zarezerwowana do użycia w przyszłości.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>Nie można uruchomić skryptu „{0}”, ponieważ brakuje następujących modułów określonych przez instrukcje „#requires” skryptu: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>Znaleziono polecenie „{0}” w module „{1}”, ale nie można załadować modułu. Aby uzyskać więcej informacji, uruchom polecenie „Import-Module {1}”.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>W module „{1}” znaleziono polecenie „{0}”, ale nie można załadować modułu z powodu następującego błędu: [{2}]
+Aby uzyskać więcej informacji, uruchom polecenie „Import-Module {1}”.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>Nie można załadować modułu „{0}”. Aby uzyskać więcej informacji, uruchom polecenie „Import-Module {0}”.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>Żadne pasujące polecenia nie zawierają parametru o nazwie „{0}”.  Sprawdź pisownię nazwy parametru, a następnie spróbuj ponownie.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Nie można wykonać polecenia dot-source, ponieważ zostało ono zdefiniowane w innym trybie języka. Aby wywołać to polecenie bez importowania jego zawartości, pomiń operator „.”.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>Nie można jednocześnie określić parametrów ShowCommandInfo i Syntax.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>To polecenie skryptu jest wyłączone, gdy funkcja eksperymentalna „{0}” została włączona.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>To polecenie skryptu jest wyłączone, gdy funkcja eksperymentalna „{0}” została wyłączona.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/EnumExpressionEvaluatorStrings.pl.resx b/src/System.Management.Automation/resources/pl/EnumExpressionEvaluatorStrings.pl.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/EnumExpressionEvaluatorStrings.pl.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ErrorCategoryStrings.pl.resx b/src/System.Management.Automation/resources/pl/ErrorCategoryStrings.pl.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ErrorCategoryStrings.pl.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ErrorPackage.pl.resx b/src/System.Management.Automation/resources/pl/ErrorPackage.pl.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ErrorPackage.pl.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/EtwLoggingStrings.pl.resx b/src/System.Management.Automation/resources/pl/EtwLoggingStrings.pl.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/EtwLoggingStrings.pl.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/EventResource.pl.resx b/src/System.Management.Automation/resources/pl/EventResource.pl.resx
new file mode 100644
index 00000000000..4cdedecc764
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/EventResource.pl.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>Nie znaleziono komunikatu dla identyfikatora zdarzenia PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Zaplanowane zadanie {0} rozpoczęte o {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Zaplanowane zadanie {0} zakończone o {1} ze stanem {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Wyjątek zaplanowanego zadania {0}:
+ Wiadomość: {1}
+ Ślad stosu: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Inicjowanie funkcji eksperymentalnej: zignoruj funkcję eksperymentalną „{0}” z pliku konfiguracji. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Inicjowanie funkcji eksperymentalnej: nie można odczytać pliku konfiguracji.
+ Wyjątek: {0}
+ Wiadomość: {1}
+ Ślad stosu: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Załadowano wtyczkę przepływu pracy.
+ 	 EndpointName: {0}
+ 	 Użytkownik: {1}
+ 	 HostingMode: {2}
+ 	 Protokół: {3}
+ 	 Konfiguracja:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Rozpoczęto wykonywanie przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Zmieniono stan przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Zażądano zamknięcia wtyczki przepływu pracy.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Wtyczka przepływu pracy została uruchomiona ponownie.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Przepływ pracy jest wznawiany.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Przekroczono limit przydziału ustawiony dla punktu końcowego.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Przepływ pracy został wznowiony.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Utworzono pulę obszarów działania przepływów pracy.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Działanie zostało umieszczone w kolejce do wykonania.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Rozpoczęto wykonywanie aktywności.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Przepływ pracy jest importowany z pliku XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Przepływ pracy został zaimportowany z pliku XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Nie można zaimportować przepływu pracy z pliku XAML z powodu błędu.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Rozpoczęto weryfikację przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Weryfikacja przepływu pracy zakończyła się powodzeniem.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Weryfikacja przepływu pracy zakończyła się niepowodzeniem z powodu błędu.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Działanie przepływu pracy zostało zweryfikowane.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Nie można zweryfikować działania przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Wykonanie aktywności zakończyło się niepowodzeniem.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Zmieniono dostępność obszaru działania.
+ 	 RunspaceId: {0}
+ 	 Dostępność: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Stan obszaru działania zmieniono.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Przepływ pracy został załadowany do wykonania.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Przepływ pracy został zwolniony.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Wykonywanie przepływu pracy zostało anulowane.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Przerwano wykonywanie przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Wykonano czyszczenie przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Załadowano utrwalony przepływ pracy z dysku.
+ 	 WorkflowId: {0}
+ 	 Ścieżka: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Dane przepływu pracy zostały usunięte z dysku.
+ 	 WorkflowId: {0}
+ 	 Ścieżka: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Rozpoczynanie usuwania zadania.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Zmieniono stan zadania.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Błąd zadania.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Utworzono zadanie dla przepływu pracy (zadanie podrzędne).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Utworzono zadanie nadrzędne dla przepływu pracy.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Utworzono wszystkie wymagane zadania na potrzeby wykonywania przepływu pracy.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Usunięto zadanie podrzędne dla przepływu pracy.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>Wystąpił błąd podczas usuwania zadania.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Błąd: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Ładowanie przepływu pracy do wykonania.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Wykonywanie przepływu pracy zostało zakończone.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Anulowanie wykonywania przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Przerywanie wykonywania przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 Przyczyna: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Zwalnianie przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Rozpoczęto wymuszone zamykanie przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Zakończono wymuszone zamykanie przepływu pracy.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Wystąpił błąd podczas wymuszonego zamykania przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Trwały przepływ pracy na dysku.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Przepływ pracy został zapisany na dysku.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Zakończono wykonywanie działania.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Błąd wykonywania przepływu pracy.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Zarejestrowano nowy punkt końcowy programu PowerShell.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Zmodyfikowano konfigurację punktu końcowego.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Wyrejestrowano konfigurację punktu końcowego.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Wyłączono konfigurację punktu końcowego.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Konfiguracja punktu końcowego włączona.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Uruchomiono obszar działania poza procesem.
+ 	 Polecenie: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>Podczas wykonywania przepływu pracy zastosowano metodę splatting dla parametrów.
+ 	 Parametry: {0}
+ 	 Komputery: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Silnik przepływu pracy został uruchomiony.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Wystąpienie menedżera przepływów pracy utworzone przy użyciu
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 Nazwy użytkownika: {2}
+ 	 Ścieżki: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Nazwa komputera $null lub . jest rozpoznawana jako host lokalny</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Rozpoznawanie domyślnego schematu HTTP</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Nazwa zdalnej powłoki została rozpoznana jako domyślny element PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Tworzenie tekstu Scriptblock ({0} z {1}):
+{2}
+
+Identyfikator ScriptBlock: {3}
+Ścieżka: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Rozpoczęto wywołanie obiektu ScriptBlock o identyfikatorze: {0}
+Identyfikator obszaru działania: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Zakończono wywołanie obiektu ScriptBlock o identyfikatorze: {0}
+Identyfikator obszaru działania: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Kontekst:
+{0}
+
+Dane użytkownika:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Korelowanie identyfikatorów aktywności.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Nazwa klasy = {0}
+Nazwa metody = {1}
+Identyfikator GUID przepływu pracy = {2}
+Wiadomość = {3}
+{4}
+Nazwa działania = {5}
+Identyfikator GUID działania = {6}
+Parametry = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Tworzenie obiektu obszaru działania
+ 	 Identyfikator wystąpienia: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Tworzenie obiektu RunspacePool
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Otwieranie elementu RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modyfikowanie identyfikatora aktywności i korelowanie</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Stan obszaru działania zmieniono na {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Trwa próba ponowienia utworzenia sesji {0} o kodzie błędu {1} dla identyfikatora sesji {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>Program PowerShell uruchomił wątek nasłuchiwania IPC dla procesu: {0} w domenie aplikacji: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>Program PowerShell zakończył wątek nasłuchiwania IPC dla procesu: {0} w domenie aplikacji: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>W wątku nasłuchiwania IPC programu PowerShell w procesie: {0} w domenie aplikacji: {1} wystąpił błąd.  Komunikat o błędzie: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Łączenie protokołu IPC programu PowerShell dla procesu: {0} w domenie aplikacji: {1} dla użytkownika: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Rozłączenie protokołu IPC programu PowerShell dla procesu: {0} w domenie aplikacji: {1} dla użytkownika: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Port rozpoznany jako {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>Nazwa aplikacji rozpoznana jako {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>Element ComputerName rozpoznany jako {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Schemat to {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Testuj wiadomość analityczną</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Parametry połączenia to
+ Identyfikator URI połączenia: {0}
+ Identyfikator URI zasobu: {1}
+ Użytkownik: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Odcisk palca: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modyfikowanie identyfikatora aktywności i korelowanie</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Odebrano obiekt o identyfikatorze obszaru roboczego: {0} Identyfikator polecenia: {1} Element docelowy: {2} Typ danych: {3} Interfejs docelowy: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Wystąpił nieobsługiwany wyjątek w domenie aplikacji.
+Typ wyjątku: {0}
+Komunikat o wyjątku: {1}
+Ślad stosu wyjątku: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Usługa WSMan zgłosiła błąd o kodzie: {2}.
+ Komunikat o błędzie: {3}
+ Ślad stosu: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Wystąpił nieobsługiwany wyjątek w domenie aplikacji.
+Typ wyjątku: {0}
+Komunikat o wyjątku: {1}
+Ślad stosu wyjątku: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Usługa WSMan zgłosiła błąd o kodzie: {2}.
+ Komunikat o błędzie: {3}
+ Ślad stosu: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Identyfikator obszaru działania {0}. Nawiązywanie połączenia przy użyciu polecenia WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania {0}. Odebrano wywołanie zwrotne dla polecenia WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0}. Zamykanie powłoki przy użyciu WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0}. Odebrano wywołanie zwrotne dla WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Wysyłanie danych o rozmiarze {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Odebrano wywołanie zwrotne dla polecenia WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Wysyłanie żądania odbioru przy użyciu polecenia WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Odebrano dane o rozmiarze {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Identyfikator obszaru działania {0} identyfikator potoku {1}. Nawiązywanie połączenia polecenia przy użyciu polecenia WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania {0} identyfikator potoku {1}. Odebrano wywołanie zwrotne dla połączenia polecenia</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku {1}. Zamykanie transportu dla polecenia</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku {1}. Odebrano wywołanie zwrotne dla polecenia zamknięcia</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku {1}. Wysyłanie sygnału z kodem {2} przy użyciu WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku {1}. Odebrano wywołanie zwrotne dla polecenia WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0}. Połączenie jest przekierowywane do identyfikatora URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Identyfikator obszaru działania: {0} identyfikator potoku: {1}. Serwer wysyła do klienta dane o rozmiarze {2}. Typ danych: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Żądanie {0}. Tworzenie zdalnej sesji serwera. Nazwa użytkownika: {1} Niestandardowy identyfikator powłoki: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Raportowanie kontekstu dla żądania: {0} Zgłoszony kontekst: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Operacja raportowania zakończona dla żądania: {0}
+ Kod błędu: {1}
+ Komunikat o błędzie: {2}
+ Ślad stosu: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Kontekst powłoki {0}. Identyfikator żądania {1}. Tworzenie wspólnej sesji do uruchamiania polecenia.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Kontekst powłoki {0} Kontekst polecenia {1} Identyfikator żądania {2}. Zatrzymywanie polecenia.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Kontekst powłoki {0} Kontekst polecenia {1} Identyfikator żądania {2}. Odebrano dane od klienta.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Kontekst powłoki {0} Kontekst polecenia {1} Identyfikator żądania {2}. Klient wysłał żądanie odbioru, aby serwer mógł wysłać dane.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Kontekst powłoki {0} Kontekst polecenia {1} IsReceiveOperation {2}. Odebrano żądanie zamknięcia.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Ładowanie zestawu {0} dla niestandardowej powłoki z identyfikatorem powłoki {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Ładowanie typu {0} dla niestandardowej powłoki z identyfikatorem powłoki {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Odebrano fragment komunikacji zdalnej.
+ 	 Identyfikator obiektu: {0}
+ 	 Identyfikator fragmentu: {1}
+ 	 Flaga początkowa: {2}
+ 	 Flaga końcowa: {3}
+ 	 Długość ładunku: {4}
+ 	 Dane ładunku: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Wysłano fragment komunikacji zdalnej.
+ 	 Identyfikator obiektu: {0}
+ 	 Identyfikator fragmentu: {1}
+ 	 Flaga początkowa: {2}
+ 	 Flaga końcowa: {3}
+ 	 Długość ładunku: {4}
+ 	 Dane ładunku: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Zamykanie usługi WinRM.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Pomyślnie przywrócono obiekt.
+ 	 Nazwa typu po deserializacji: {0}
+ 	 Przywrócono przez rzutowanie na typ: {1}
+ 	 Przywrócony obiekt ma typ: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Nie można przywrócić obiektu.
+ 	 Nazwa typu po deserializacji: {0}
+ 	 Przywrócono przez rzutowanie na typ: {1}
+ 	 Wyjątek rzutowania typu: {2}
+ 	 Wewnętrzny wyjątek rzutowania typu: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Głębokość serializacji została zastąpiona.
+ 	 Nazwa typu po serializacji: {0}
+ 	 Oryginalna głębokość: {1}
+ 	 Zastąpiona głębokość: {2}
+ 	 Bieżąca głębokość poniżej najwyższego poziomu: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Tryb serializacji został zastąpiony.
+ 	 Nazwa typu po serializacji: {0}
+ 	 Zastąpiony tryb: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Serializacja właściwości skryptu została pominięta, ponieważ nie ma obszaru roboczego, którego można użyć do oceny właściwości.
+ 	 Nazwa właściwości: {0}
+ 	 Nazwa typu właściciela właściwości: {1}
+ 	 Skrypt metody pobierającej: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Serializacja właściwości została pominięta, ponieważ pobranie właściwości zakończyło się niepowodzeniem.
+ 	 Nazwa właściwości: {0}
+ 	 Nazwa typu właściciela właściwości: {1}
+ 	 Wyjątek z metody pobierającej właściwość: {2}
+ 	 Wyjątek wewnętrzny z metody pobierającej właściwość: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Serializacja obiektu wyliczanego może nie być kompletna, ponieważ obiekt wyliczany zgłosił wyjątek.
+ 	 Typ obiektu wyliczanego: {0}
+ 	 Wyjątek:{1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serializacja wywołała metodę ToString obiektu, która zakończyła się niepowodzeniem.
+ 	 Typ obiektu: {0}
+ 	 Wyjątek:{1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Osiągnięto maksymalną głębokość poniżej najwyższego poziomu, więc obiekt zostanie zapisany w postaci ciągów.
+ 	 Typ obiektu przy maksymalnej głębokości: {0}
+ 	 Nazwa właściwości przy maksymalnej głębokości: {1}
+ 	 Głębokość: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>Deserializator zgłosił wyjątek XmlException (najprawdopodobniej wskazuje to na niepoprawny format clixml).
+ 	 Numer wiersza: {0} Pozycja wiersza: {1}
+ 	 Wyjątek:{2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Serializacja określonych właściwości zakończyła się niepowodzeniem, ponieważ brakuje jednej ze wskazanych właściwości.
+ 	 Typ obiektu: {0}
+ 	 Nazwa właściwości: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>Trwa uruchamianie konsoli programu PowerShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>Konsola programu PowerShell jest gotowa na dane wejściowe użytkownika</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Rekord błędu śledzenia:
+ Wiadomość: {0}
+ CategoryInfo.Kategoria: {1}
+ CategoryInfo.Przyczyna : {2}
+ CategoryInfo.Nazwa docelowa : {3}
+ FullyQualifiedErrorId: {4}
+ Szczegóły wyjątku:
+ Wiadomość : {5}
+ Ślad stosu: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Wyjątek:
+ Wiadomość: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Śledzenie obiektu PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Zadanie śledzenia:
+ Identyfikator: {0}
+ InstanceId: {1}
+ Nazwa: {2}
+ Lokalizacja: {3}
+ Stan: {4}
+ Polecenie: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Informacje śledzenia:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Informacje śledzenia:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>POCZĄTEK ImportWorkflowCommand::StartWorkflowApplication. Rozpoczynanie wywołania funkcji przepływu pracy. Identyfikator GUID śledzenia {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>KONIEC ImportWorkflowCommand::StartWorkflowApplication. Kończenie wywołania funkcji przepływu pracy. Identyfikator GUID śledzenia {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>POCZĄTEK Tworzenie nowego zadania w poleceniu ImportWorkflowCommand::StartWorkflowApplication. Identyfikator GUID śledzenia {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>KONIEC Tworzenie nowego zadania w poleceniu ImportWorkflowCommand::StartWorkflowApplication. Identyfikator GUID śledzenia {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>KONIEC Tworzenie nowego zadania w poleceniu ImportWorkflowCommand::StartWorkflowApplication. Identyfikator GUID śledzenia {0} : identyfikator GUID zadania nadrzędnego ContainerParentJob {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>POCZĄTEK Identyfikator GUID zadania JobLogic ContainerParentJob {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>KONIEC Identyfikator GUID zadania JobLogic ContainerParentJob {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>POCZĄTEK identyfikatora GUID WorkflowExecution ContainerParentJob {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>KONIEC identyfikatora GUID WorkflowExecution ContainerParentJob {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>Zadanie WorkflowJob z identyfikatorem GUID {0} dodane do zadania ContainerParentJob z identyfikatorem GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>Zadanie ProxyJob o identyfikatorze GUID {0} skojarzone ze zdalnym zadaniem nadrzędnym ContainerParentJob o identyfikatorze GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>POCZĄTEK wykonywania zadania ContainerParentJob o identyfikatorze GUID{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>KONIEC wykonywania zadania ContainerParentJob o identyfikatorze GUID{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>POCZĄTEK wykonywania zadania serwera proxy o identyfikatorze GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>KONIEC wykonywania zadania serwera proxy o identyfikatorze GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>POCZĄTEK Obsługa zdarzenia StateChanged dla zadania serwera proxy z identyfikatorem GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>KONIEC Obsługa zdarzenia StateChanged dla zadania serwera proxy z identyfikatorem GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>POCZĄTEK Obsługa zdarzenia StateChanged dla podrzędnego zadania serwera proxy z identyfikatorem GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>KONIEC Obsługa zdarzenia StateChanged dla podrzędnego zadania serwera proxy z identyfikatorem GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>POCZĄTEK Uruchamianie zbierania nieużywanych zasobów</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>KONIEC Uruchamianie zbierania nieużywanych zasobów</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Magazyn stanów trwałych osiągnął maksymalny określony rozmiar</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Program Windows PowerShell ISE rozpoczął uruchamianie pliku skryptu {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Program Windows PowerShell ISE rozpoczął uruchamianie skryptu wybranego przez użytkownika z pliku {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Program Windows PowerShell ISE zatrzymuje bieżące polecenie.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wznawia debuger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Program Windows PowerShell ISE zatrzymuje debuger.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wchodzi w debugowanie.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wychodzi z debugowania.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wychodzi z debugowania.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Program Windows PowerShell ISE włącza wszystkie punkty przerwania.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wyłącza wszystkie punkty przerwania.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Program Windows PowerShell ISE usuwa wszystkie punkty przerwania.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Program Windows PowerShell ISE ustawia punkt przerwania w wierszu #: {0} pliku {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Program Windows PowerShell ISE przenosi punkt przerwania w wierszu #: {0} pliku {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Program Windows PowerShell ISE włącza punkt przerwania w wierszu #: {0} pliku {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Program Windows PowerShell ISE wyłącza punkt przerwania w wierszu #: {0} pliku {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Program Windows PowerShell ISE napotkał punkt przerwania w wierszu #: {0} pliku {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/EventingResources.pl.resx b/src/System.Management.Automation/resources/pl/EventingResources.pl.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/EventingResources.pl.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ExperimentalFeatureStrings.pl.resx b/src/System.Management.Automation/resources/pl/ExperimentalFeatureStrings.pl.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ExperimentalFeatureStrings.pl.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ExtendedTypeSystem.pl.resx b/src/System.Management.Automation/resources/pl/ExtendedTypeSystem.pl.resx
new file mode 100644
index 00000000000..06bb3aa3238
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ExtendedTypeSystem.pl.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Właściwość "{0}" nie została znaleziona.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} nie jest prawidłową ścieżką.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/FileSystemProviderStrings.pl.resx b/src/System.Management.Automation/resources/pl/FileSystemProviderStrings.pl.resx
new file mode 100644
index 00000000000..12e8712a0ea
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/FileSystemProviderStrings.pl.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Kopiowanie {0} do {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Z {0} do {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/FormatAndOutXmlLoadingStrings.pl.resx b/src/System.Management.Automation/resources/pl/FormatAndOutXmlLoadingStrings.pl.resx
new file mode 100644
index 00000000000..d1637700665
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/FormatAndOutXmlLoadingStrings.pl.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: element XML {2} nie zezwala na atrybuty.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: węzeł {2}nie może mieć obiektów podrzędnych.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: {2} jest nieprawidłowy.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: musi istnieć co najmniej jedna wartość domyślna {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: nie może istnieć więcej niż jedna wartość domyślna {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nazwa formantu nie może mieć wartości null ani być pusta.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: widoki poza pasmem mogą mieć tylko kontrolki CustomControl lub ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: widok poza pasmem nie może mieć elementu GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie można załadować widoku.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: „{2}” nie jest prawidłową wartością wyrównania.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: oczekiwano dodatniej liczby całkowitej.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: definicja nagłówka kolumny jest nieprawidłowa; wszystkie nagłówki są odrzucane.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: liczba elementów wiersza = {2} w zestawie alternatywnym #{3} nie jest zgodna z domyślną liczbą elementów wiersza = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: liczba elementów nagłówka = {2} nie jest zgodna z domyślną liczbą elementów wiersza = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: należy określić co najmniej jeden element widoku listy.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: wpis właściwości jest nieprawidłowy.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak listy definicji.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: oczekiwano wartości logicznej.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: oczekiwano nieujemnej liczby całkowitej.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: oczekiwano liczby całkowitej.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak wewnętrznej wartości tekstowej.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: lista niestandardowych tokenów kontrolek nie może być pusta.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie można załadować {2}.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: {2} nie można określić bez wyrażenia.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: {2} nie można określić za pomocą wyrażenia.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak ciągu formatu.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak tekstu bloku skryptu.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak właściwości.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: blok skryptu „{2}” jest nieprawidłowy.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie znaleziono ciągu {2} z zasobu {3} w zestawie {4}.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie znaleziono zasobu {2} w zestawie {3}.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie znaleziono zestawu {2}.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: węzeł musi być elementem XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: oczekiwano wyrażenia.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie można mieć formantu lub etykiety bez wyrażenia.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie można jednocześnie mieć kontrolki i etykiety.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: Nie można jednocześnie mieć elementów SelectionSetName i TypeName.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: nie określono typu ani warunku na potrzeby stosowania widoku.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: wartość {2} jest nieprawidłowa.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: istnieje zduplikowany węzeł.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} i {3} wykluczają się wzajemnie.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}. {2}, {3} i{4} wzajemnie się wykluczają.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} jest nieznanym węzłem.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} jest nieznanym atrybutem.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} jest brakującym atrybutem.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Błąd w ścieżce XPath {0} w pliku {1}: brak węzła {2}.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: brak węzła w {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} jest pustym węzłem.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Błąd w XPath {0} w pliku {1}: {2} jest pustym atrybutem.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Błąd w pliku {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Zbyt wiele błędów w pliku {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Wystąpiły błędy podczas ładowania pliku danych formatu: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Globalna pamięć podręczna zestawów) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>Ścieżka {0} nie jest w pełni kwalifikowana. Określ w pełni kwalifikowaną ścieżkę pliku formatu.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Nie można zaktualizować obiektu FormatTable, ponieważ obiekt FormatTable mógł zostać utworzony poza obszarem runspace.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Wystąpiły błędy podczas ładowania obiektu FormatTable. Wyświetl zawartość właściwości Errors, aby uzyskać szczegółowe komunikaty o błędach.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Błąd podczas formatowania danych „{0}”: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: liczba elementów nagłówka = {2} nie jest zgodna z domyślną liczbą elementów wiersza = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: formatowanie danych „{2}„ jest nieprawidłowe.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: blok skryptu „{2}” jest nieprawidłowy.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: nie można załadować {2}.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: Element TableControl powinien zawierać tylko jeden element {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: musi istnieć co najmniej jedna wartość domyślna {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: należy określić co najmniej jeden element widoku listy.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Błąd podczas wyświetlania danych o nazwie typu {0} w indeksie {1}: nie może istnieć więcej niż jedna wartość domyślna {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Zbyt wiele błędów w danych formatowania dla typu „{0}”.</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Tabeli formatu udostępnionego nie można zaktualizować za pomocą więcej niż jednego wpisu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/FormatAndOut_MshParameter.pl.resx b/src/System.Management.Automation/resources/pl/FormatAndOut_MshParameter.pl.resx
new file mode 100644
index 00000000000..b6609d9b5d5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/FormatAndOut_MshParameter.pl.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Nie można przekonwertować {0} na jeden z następujących typów {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Wartość parametru miała wartość null; oczekiwano jednego z następujących typów: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>Zduplikowany klucz „{0}” powoduje konflikt z „{1}”.</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>Klucz „{0}” ma typ {1}, który jest nieprawidłowy; oczekiwanymi typami są {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>Klucz „{0}” ma typ {1}, który jest nieprawidłowy; oczekiwanym typem jest {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>Klucz {0} jest niejednoznaczny, {1}, i powoduje konflikt z {2}.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Wartość klucza nie może mieć wartości null.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Typ klucza {0} jest nieprawidłowy. Klucz musi być ciągiem.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>Klucz {0} nie ma żadnej wartości.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Brak obowiązkowego wpisu dla {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>Klucz {0} jest nieprawidłowy.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>Wartość „{0}” dla klucza „{1}” jest nieprawidłowa; prawidłowymi wartościami są {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>Wartość „{0}” dla klucza „{1}” powinna być większa niż 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>Nie można mieć pustego ciągu formatowania w przypadku klucza „{0}”.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>Klucz „{0}” nie może mieć pustej wartości ciągu.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Pusta wartość ciągu jest niedozwolona.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>Klucz „{0}” nie może zawierać symboli wieloznacznych w wartości „{1}”.</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>Symbole wieloznaczne są niedozwolone w ciągu „{0}”.</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>Wartość EnumerableExpansion jest nieprawidłowa.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/FormatAndOut_format_xxx.pl.resx b/src/System.Management.Automation/resources/pl/FormatAndOut_format_xxx.pl.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/FormatAndOut_format_xxx.pl.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/FormatAndOut_out_xxx.pl.resx b/src/System.Management.Automation/resources/pl/FormatAndOut_out_xxx.pl.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/FormatAndOut_out_xxx.pl.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/GetErrorText.pl.resx b/src/System.Management.Automation/resources/pl/GetErrorText.pl.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/GetErrorText.pl.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/HelpDisplayStrings.pl.resx b/src/System.Management.Automation/resources/pl/HelpDisplayStrings.pl.resx
new file mode 100644
index 00000000000..71fed6c9162
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/HelpDisplayStrings.pl.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NAZWA</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Przykład</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Odpowiedź</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Brak</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/HelpErrors.pl.resx b/src/System.Management.Automation/resources/pl/HelpErrors.pl.resx
new file mode 100644
index 00000000000..764db714552
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/HelpErrors.pl.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help nie może odnaleźć {0} w pliku Pomocy w tej sesji. Aby pobrać zaktualizowane tematy pomocy, wpisz: „Update-Help”. Aby uzyskać pomoc online, wyszukaj temat pomocy w bibliotece TechNet pod adresem https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Nie można przetworzyć kategorii Pomoc, ponieważ „{0}” nie jest prawidłową kategorią Pomocy.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Nie można załadować pliku Pomocy „{0}”. Szczegóły: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Nie można uzyskać dostępu do pliku Pomocy „{0}”, ponieważ bieżący użytkownik nie ma praw dostępu do pliku. Szczegóły: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>Plik Pomoc „{0}” nie jest prawidłowym dokumentem XML. Szczegóły: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>Wystąpił błąd podczas ładowania zawartości Pomocy dla {0} z pliku {1}. Szczegóły: {2}. Aby pobrać zaktualizowane tematy Pomocy, uruchom polecenie cmdlet Update-Help. Aby uzyskać pomoc online, wyszukaj temat Pomocy w bibliotece TechNet pod adresem https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>Nie można załadować dostawcy „{0}”. Szczegóły: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Nie można załadować pliku Pomocy. Wystąpiły błędy ({1}) podczas ładowania pliku pomocy „{0}”.</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>Węzeł „{0}” nie może mieć węzła „{1}” jako węzła podrzędnego. Ścieżka węzła: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>Węzeł „{0}” może mieć maksymalną liczbę {2} węzłów podrzędnych typu „{1}”. Ścieżka węzła: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Nie można odnaleźć klucza rejestru: „{0}{1}”; do załadowania plików Pomocy jest używany „{2}”.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>Brak parametru spełniającego kryteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} nie jest obsługiwana przez żądaną kategorię Pomoc.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>Nie można wyświetlić wersji online tego tematu Pomocy, ponieważ adres internetowy (URI) tematu Pomocy nie jest określony w kodzie polecenia ani w pliku pomocy polecenia.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>Określony identyfikator URI {0} jest nieprawidłowy.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Uruchomienie przeglądarki w celu wyświetlenia Pomocy online nie powiodło się. Żaden program ani przeglądarka nie są skojarzone z otwieraniem identyfikatora URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>Protokół określony w identyfikatorze URI „{0}” nie jest obsługiwany. Obsługiwane są tylko protokoły „{1}” i „{2}”.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Znaleziono wiele tematów Pomocy. Użyj tylko jednego tematu Pomocy z opcją -{0} .</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Nie można uzyskać Pomocy ze zdalnego obszaru uruchomieniowego, ponieważ obszar uruchomieniowy nie został otwarty.  Otwórz obszar uruchomieniowy, uruchamiając niejawne polecenie komunikacji zdalnej, a następnie spróbuj ponownie uruchomić polecenie, aby uzyskać Pomoc.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Odmowa dostępu. Polecenie nie może zaktualizować tematów Pomocy dla podstawowych modułów programu PowerShell ani żadnych modułów w katalogu $pshome\Modules.
+Aby zaktualizować te tematy Pomocy, uruchom program PowerShell za pomocą polecenia „Uruchom jako administrator”, a następnie spróbuj ponownie uruchomić polecenie Update-Help.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>Aby użyć {0}, upewnij się, że aplikacja używa „Microsoft.NET.Sdk.WindowsDesktop” jako zestawu SDK projektu i odpowiedniego zestawu „Microsoft.PowerShell.GraphicalHost”. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} nie działa w sesji zdalnej.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>Element ForwardHelpTargetName nie może odwoływać się do samej funkcji.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Nie można uzyskać pomocy z lokalizacji sieciowej w sesji z ograniczeniami.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/HistoryStrings.pl.resx b/src/System.Management.Automation/resources/pl/HistoryStrings.pl.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/HistoryStrings.pl.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/HostInterfaceExceptionsStrings.pl.resx b/src/System.Management.Automation/resources/pl/HostInterfaceExceptionsStrings.pl.resx
new file mode 100644
index 00000000000..144907fafc5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/HostInterfaceExceptionsStrings.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Wystąpił błąd typu „{0}”.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Polecenie, które monituje użytkownika, nie powiodło się, ponieważ program hosta lub typ polecenia nie obsługuje interakcji z użytkownikiem. Wypróbuj program hosta, który obsługuje interakcje z użytkownikiem, takie jak konsola programu PowerShell, i usuń polecenia związane z wierszem polecenia z typów poleceń, które nie obsługują interakcji z użytkownikiem.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Polecenie, które monituje użytkownika, nie powiodło się, ponieważ program hosta lub typ polecenia nie obsługuje interakcji z użytkownikiem. Host próbował zażądać potwierdzenia z następującym komunikatem: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Nie można wywołać metody, ponieważ pula została zamknięta lub nie powiodła się.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/InternalCommandStrings.pl.resx b/src/System.Management.Automation/resources/pl/InternalCommandStrings.pl.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/InternalCommandStrings.pl.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/InternalHostStrings.pl.resx b/src/System.Management.Automation/resources/pl/InternalHostStrings.pl.resx
new file mode 100644
index 00000000000..87ea77a02f6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/InternalHostStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt has not been called as many times as ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/InternalHostUserInterfaceStrings.pl.resx b/src/System.Management.Automation/resources/pl/InternalHostUserInterfaceStrings.pl.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/InternalHostUserInterfaceStrings.pl.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Logging.pl.resx b/src/System.Management.Automation/resources/pl/Logging.pl.resx
new file mode 100644
index 00000000000..bdd9b6bf1fc
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Logging.pl.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[Nazwa_hosta]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[Wersja hosta]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[Nazwa_hosta]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>NIEZNANY</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>Funkcja eksperymentalna aparatu „{0}” zadeklarowana w pliku konfiguracji nie jest zarejestrowana w bieżącym programie PowerShell.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>Funkcja eksperymentalna „{0}” zadeklarowana w pliku konfiguracji jest nieprawidłowa.
+Nazwa funkcji eksperymentalnej powinna być zgodna z poniższą konwencją: 
+    Nazwa funkcji aparatu: „PS[FeatureName]”
+    Nazwa funkcji modułu: „[ModuleName]. [FeatureName]”</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Metadata.pl.resx b/src/System.Management.Automation/resources/pl/Metadata.pl.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Metadata.pl.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/MiniShellErrors.pl.resx b/src/System.Management.Automation/resources/pl/MiniShellErrors.pl.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/MiniShellErrors.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Modules.pl.resx b/src/System.Management.Automation/resources/pl/Modules.pl.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Modules.pl.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/MshHostRawUserInterfaceStrings.pl.resx b/src/System.Management.Automation/resources/pl/MshHostRawUserInterfaceStrings.pl.resx
new file mode 100644
index 00000000000..32cbee74d30
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/MshHostRawUserInterfaceStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>Wartość „{0}” musi być większa lub równa „{1}”.</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>Wartość „{0}” musi być liczbą dodatnią.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>Wszystkie ciągi mają wartość null lub są puste.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/MshSignature.pl.resx b/src/System.Management.Automation/resources/pl/MshSignature.pl.resx
new file mode 100644
index 00000000000..ebe4f2a27da
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/MshSignature.pl.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Zweryfikowano podpis.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Plik {0} nie jest podpisany cyfrowo. Nie można uruchomić tego skryptu w bieżącym systemie. Aby uzyskać więcej informacji na temat uruchamiania skryptów i ustawiania zasad wykonywania, zobacz about_Execution_Policies na https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Zawartość pliku {0} mogła zostać zmieniona przez nieautoryzowanego użytkownika lub proces, ponieważ skrót pliku jest niezgodny ze skrótem przechowywanym w podpisie cyfrowym. Nie można uruchomić skryptu w określonym systemie. Aby uzyskać więcej informacji, uruchom polecenie Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Plik {0} jest podpisany, ale podpisywanie nie jest zaufane w tym systemie.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Nie można podpisać pliku, ponieważ system nie obsługuje operacji podpisywania plików ({0}) .</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Nie można podpisać pliku, ponieważ system nie obsługuje operacji podpisywania plików, które nie mają rozszerzenia nazwy pliku.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>Nie można zweryfikować podpisu, ponieważ jest on niezgodny z bieżącym systemem.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>Nie można zweryfikować podpisu, ponieważ jest on niezgodny z bieżącym systemem. Algorytm wyznaczania wartości skrótu jest nieprawidłowy.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/MshSnapInCmdletResources.pl.resx b/src/System.Management.Automation/resources/pl/MshSnapInCmdletResources.pl.resx
new file mode 100644
index 00000000000..a37f64c472d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/MshSnapInCmdletResources.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Nie można wykonać operacji. Określone polecenie cmdlet nie jest obsługiwane w powłoce niestandardowej.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Nie znaleziono żadnych przystawek programu PowerShell pasujących do wzorca „{0}”. Sprawdź wzorzec, a następnie spróbuj ponownie wykonać polecenie.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Format określonej nazwy przystawki był nieprawidłowy.  Nazwy przystawek programu PowerShell mogą zawierać tylko znaki alfanumeryczne, łączniki, podkreślenia i kropki. Sprawdź nazwę, a następnie spróbuj ponownie wykonać operację.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Nie można dodać przystawki {0} programu PowerShell, ponieważ jest to moduł systemowy programu PowerShell. Załaduj moduł za pomocą polecenia Import-Module.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/MshSnapinInfo.pl.resx b/src/System.Management.Automation/resources/pl/MshSnapinInfo.pl.resx
new file mode 100644
index 00000000000..f041fb73380
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/MshSnapinInfo.pl.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Nie można uzyskać dostępu do informacji dotyczących rejestru programu PowerShell.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Nie można uzyskać dostępu do informacji dotyczących rejestru aparatu programu PowerShell.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Nie można uzyskać dostępu do informacji PublicKeyToken.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Wersja {0} programu PowerShell nie jest dostępna na tym komputerze.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Przystawka programu PowerShell „{0}” nie jest zainstalowana na tym komputerze.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>Nie określono wartości obowiązkowej {0} dla klucza rejestru {1}.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>Wartość obowiązkowa {0} ma niepoprawny format dla klucza rejestru {1}.  Oczekiwany format to „string”.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>Wartość obowiązkowa {0} ma niepoprawny format dla klucza rejestru {1}.  Oczekiwany format to „multistring”.</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Nie można odnaleźć wymaganych informacji w rejestrze lub brakujących plików kluczy.  Nie można załadować niektórych poleceń cmdlet.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Nie zarejestrowano żadnych przystawek dla programu PowerShell w wersji {0}.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Nie można pobrać zasobu ciągu, ponieważ czytnik został usunięty.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Wartość wersji {0} nie została określona lub jest niepoprawna dla klucza rejestru {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Nie znaleziono atrybutu [PSVersion] dla typu programu PowerShell {0}. Dodaj atrybut PSVersion do typu przy użyciu [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/NativeCP.pl.resx b/src/System.Management.Automation/resources/pl/NativeCP.pl.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/NativeCP.pl.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PSCommandStrings.pl.resx b/src/System.Management.Automation/resources/pl/PSCommandStrings.pl.resx
new file mode 100644
index 00000000000..4ad99703ca6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PSCommandStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Do dodania parametru jest wymagane polecenie. Przed dodaniem parametru należy dodać polecenie do {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PSConfigurationStrings.pl.resx b/src/System.Management.Automation/resources/pl/PSConfigurationStrings.pl.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PSConfigurationStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PSDataBufferStrings.pl.resx b/src/System.Management.Automation/resources/pl/PSDataBufferStrings.pl.resx
new file mode 100644
index 00000000000..5bf7bcb0ec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PSDataBufferStrings.pl.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Określony indeks jest mniejszy od zera lub większy od liczby elementów w buforze. Indeks powinien znajdować się w zakresie {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Nie można przekonwertować odwołania null na typ wartości.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Nie można przekonwertować wartości z typu {0} na typ {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Nie można dodać obiektów do zamkniętego buforu. Upewnij się, że bufor jest otwarty, aby operacje dodawania i wstawiania mogły się powieść.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>Właściwość SerializeInput można ustawić tylko dla typu PSObject w obiekcie PSDataCollection. Ustaw właściwość SerializeInput na false albo zmień typ kolekcji na PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PSListModifierStrings.pl.resx b/src/System.Management.Automation/resources/pl/PSListModifierStrings.pl.resx
new file mode 100644
index 00000000000..f4b5f9180e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PSListModifierStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Wykryto następujący modyfikator nieznanej listy: „{0}”. Prawidłowe modyfikatory listy to Add, Remove i Replace.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Nie można zastosować aktualizacji, ponieważ obiekt nie jest obsługiwanym typem kolekcji.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PSStyleStrings.pl.resx b/src/System.Management.Automation/resources/pl/PSStyleStrings.pl.resx
new file mode 100644
index 00000000000..4a8d09350fd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PSStyleStrings.pl.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>Określony ciąg zawiera zawartość do wydrukowania, gdy powinien zawierać tylko sekwencje ucieczki ANSI: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>Maksymalna długość renderowania postępu musi wynosić co najmniej 18, aby renderowanie został wykonane poprawnie.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>Podczas dodawania lub usuwania rozszerzeń rozszerzenie musi rozpoczynać się od kropki.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ParameterBinderStrings.pl.resx b/src/System.Management.Automation/resources/pl/ParameterBinderStrings.pl.resx
new file mode 100644
index 00000000000..60bd82659ab
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ParameterBinderStrings.pl.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Nie można znaleźć parametru pasującego do nazwy parametru „{1}”.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Nie można odnaleźć parametru pozycyjnego akceptującego argument „{1}”.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Brak argumentu dla parametru „{1}”. Określ parametr typu „{2}” i spróbuj ponownie.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Nie można przetworzyć parametru, ponieważ nazwa parametru „{1}” jest niejednoznaczna. Możliwe dopasowania to:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Nie można przekonwertować elementu „{6}” na typ „{2}” wymagany przez parametr „{1}”. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Nie można powiązać parametru „{1}”. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Nie można powiązać parametrów pozycyjnych „{1}”.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Nie można powiązać parametrów pozycyjnych, ponieważ nie podano żadnych nazw.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Nie można rozpoznać ustawionego parametru za pomocą podanych nazwanych parametrów. Nie można użyć co najmniej jednego wystawionego parametru razem lub podano niewystarczającą liczbę parametrów.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Nie można przetworzyć polecenia z powodu co najmniej jednego brakującego obowiązkowego parametru:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Nie można określić parametru „{1}” w zestawie parametrów „{6}”.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Nie można powiązać parametru, ponieważ parametr „{1}” został określony więcej niż raz. Aby podać wiele wartości parametrów, które mogą akceptować wiele wartości, użyj składni tablicy. Na przykład „-parameter value1,value2,value3”.</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Nie można obliczyć parametru „{1}”, ponieważ jego argument jest określony jako blok skryptu i nie ma danych wejściowych. Nie można obliczyć bloku skryptu bez danych wejściowych.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Wprowadzanie danych wejściowych do bloku skryptu dla parametru „{1}” nie powiodło się. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Nie można obliczyć parametru „{1}”, ponieważ jego dane wejściowe argumentu nie wygenerowały żadnych danych wyjściowych.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Obiekt wejściowy nie może być powiązany z żadnymi parametrami polecenia, ponieważ polecenie nie pobiera danych wejściowych potoku lub dane wejściowe i jego właściwości nie są zgodne z żadnym z parametrów, które pobierają dane wejściowe potoku.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Nie można powiązać obiektu wejściowego, ponieważ nie zawiera on informacji wymaganych do powiązania wszystkich obowiązkowych parametrów: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Nie można przetworzyć danych wejściowych potoku, ponieważ nie można pobrać wartości domyślnej parametru „{1}”. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Nie można pobrać parametrów dynamicznych dla polecenia cmdlet. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Podaj wartości następujących parametrów:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>polecenie cmdlet {0} na pozycji potoku poleceń {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Nie można przetworzyć przekształcenia argumentu dla parametru „{1}”. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Nie można zweryfikować argumentu dla parametru „{1}”. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Nie można powiązać parametru „{1}” z obiektem docelowym. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Nie można powiązać argumentu z parametrem „{1}”, ponieważ ma on wartość null.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Nie można powiązać argumentu z parametrem „{1}”, ponieważ jest to pusty ciąg.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Nie można powiązać argumentu z parametrem „{1}”, ponieważ jest to pusta kolekcja.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Nie można powiązać argumentu z parametrem „{1}”, ponieważ jest to pusta tablica.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Nie można przetworzyć polecenia. Parametr „{0}” jest zdefiniowany wiele razy.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Nie można powiązać polecenia cmdlet {0}, ponieważ parametr „{1}” jest typu „{2}” i nie można zidentyfikować metody Add() lub istnieje wiele metod Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Nie można powiązać polecenia cmdlet {0}, ponieważ parametr „{1}” zdefiniowany w czasie wykonywania został dodany do elementu RuntimeDefinedParameterDictionary z kluczem „{6}”. Klucz musi być taki sam jak RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Nie można powiązać argumentu z parametrem „{1}”, ponieważ parametry PSTypeNames argumentu nie są zgodne z parametrem PSTypeName wymaganym przez parametr: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>W $PSDefaultParameterValues dla parametru pasującego do następującej nazwy lub aliasu zdefiniowano wiele różnych wartości domyślnych: {0}. Te wartości domyślne zostały zignorowane.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Następująca nazwa lub alias zdefiniowany w $PSDefaultParameterValues dla tego polecenia cmdlet jest rozpoznawany jako wiele parametrów: {0}. Wartość domyślna została zignorowana.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Przyczyną tego błędu może być zastosowanie domyślnego powiązania parametrów. Możesz wyłączyć domyślne powiązanie parametrów w $PSDefaultParameterValues, ustawiając $PSDefaultParameterValues["Wyłączone"] na $true, a następnie próbując ponownie. Następujące parametry domyślne zostały pomyślnie powiązane z tym poleceniem cmdlet w przypadku wystąpienia błędu:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Ten błąd może być spowodowany zastosowaniem domyślnego powiązania parametrów. Możesz wyłączyć domyślne powiązanie parametrów w $PSDefaultParameterValues, ustawiając $PSDefaultParameterValues["Wyłączone"] na $true i ponów próbę. Następujący parametr domyślny został pomyślnie powiązany z tym poleceniem cmdlet w przypadku wystąpienia błędu:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Powiązanie wartości domyślnej „{0}” z parametrem „{1}” nie powiodło się: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>Klucz „{0}” nie ma prawidłowego formatu. Aby uzyskać informacje o poprawnym formacie, zobacz about_Parameters_Default_Values na stronie https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Klucze „{0}” nie mają prawidłowych formatów. Aby uzyskać informacje o poprawnym formacie, zobacz about_Parameters_Default_Values na stronie https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Parametr „{0}” jest przestarzały. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>Klucz „{0}” typu „{1}” nie jest wartością ciągu. Element DefaultParameterDictionary akceptuje tylko klucze wartości ciągu.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>Klucz „{0}” został już dodany do słownika.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Wywołanie metody lub właściwości jest niedozwolone</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Wywołanie metody lub właściwości „{0}” w typie „{1}” nie będzie dozwolone w trybie ograniczonego języka dla niezaufanych skryptów.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Tworzenie typu jest niedozwolone</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Tworzenie typu „{0}” nie będzie dozwolone podczas wiązania parametrów w trybie ograniczonego języka dla niezaufanych skryptów.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ParserStrings.pl.resx b/src/System.Management.Automation/resources/pl/ParserStrings.pl.resx
new file mode 100644
index 00000000000..8f9f9df0625
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ParserStrings.pl.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Nie można załadować zestawu „{0}”.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PathUtilsStrings.pl.resx b/src/System.Management.Automation/resources/pl/PathUtilsStrings.pl.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PathUtilsStrings.pl.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PipelineStrings.pl.resx b/src/System.Management.Automation/resources/pl/PipelineStrings.pl.resx
new file mode 100644
index 00000000000..5c6cadb0b25
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PipelineStrings.pl.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Cannot process the cmdlet instance because the cmdlet instance is in use by another pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Cannot perform the operation because the pipeline is started. Stop the pipeline and try the operation again.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Cannot continue to run the cmdlet because running cmdlets has been prevented by the Stop policy.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Cannot run the pipeline because the first cmdlet in the pipeline is trying to read input from the results of a preceding cmdlet. Either modify the first cmdlet, remove the first cmdlet, or add to the pipeline the cmdlet whose output is required by the first cmdlet, and then try running the pipeline again.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Cannot process the cmdlet number. The ReadFromCommand function must specify the Id of a cmdlet that has already been added to the pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Cannot read the output of the ReadFromCommand and ReadErrorQueue functions because another cmdlet is already reading that output. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Cannot run the pipeline because there are no commands. Add at least one command to the pipeline, and then run it again.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Cannot complete the pipeline operation because it has not yet been started. You must call the Begin() method before calling End() on a steppable pipeline.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called from outside the overrides of the BeginProcessing, ProcessRecord, and EndProcessing methods, and they can only be called from within the same thread. Validate that the cmdlet makes these calls correctly, or contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>A cmdlet threw an exception after calling ThrowTerminatingError.
+The first exception was "{0}" with stack trace "{1}".
+The second exception was "{2}" with stack trace "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called after the pipeline has been closed. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>An error occurred while creating the pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>This pipeline does not support disconnect-connect semantics.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Cannot connect this pipeline because it is not in the disconnected state.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>The runspace object has a null remote command associated with it.  A disconnected RemotePipeline object cannot be created because there is no remote command specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/PowerShellStrings.pl.resx b/src/System.Management.Automation/resources/pl/PowerShellStrings.pl.resx
new file mode 100644
index 00000000000..220ee154505
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/PowerShellStrings.pl.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Stan bieżącego wystąpienia programu PowerShell jest nieprawidłowy dla tej operacji.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ polecenie zostało już uruchomione. Poczekaj na ukończenie polecenia lub zatrzymaj je, a następnie spróbuj ponownie wykonać operację.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Nie określono żadnych poleceń.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>Wystąpienie programu PowerShell nie jest w prawidłowym stanie do utworzenia zagnieżdżonego wystąpienia programu PowerShell. Zagnieżdżone wystąpienia programu PowerShell powinny być tworzone tylko w uruchomionym wystąpieniu programu PowerShell.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ obszar działania nie jest w stanie „{0}”. Bieżący stan obszaru działania to „{1}”.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Nie można asynchronicznie wywoływać zagnieżdżonych wystąpień programu PowerShell. Użyj metody Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Obiekt {0} nie został utworzony przez wywołanie {1} w przypadku tego wystąpienia programu PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Gdy obszar działania jest skonfigurowany do ponownego użycia wątku, stan komórki w ustawieniach wywołania musi być zgodny z obszarem działania.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Gdy obszar działania jest ustawiony do używania bieżącego wątku, stan komórki w ustawieniach wywołania musi być zgodny z bieżącym wątkiem.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Do dodania parametru jest wymagane polecenie. Przed dodaniem parametru należy dodać polecenie do wystąpienia programu PowerShell.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Klucze w słowniku muszą być ciągami.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Brak dostępnego obszaru działania do uruchomienia poleceń w tym wątku. Można podać go we właściwości DefaultRunspace typu System.Management.Automation.Runspaces.Runspace. Polecenie, które próbowano wywołać, to: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Nie można połączyć tego obiektu programu PowerShell, ponieważ nie jest on skojarzony ze zdalnym obszarem działania lub pulą obszarów działania.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Uruchomione polecenie zostało rozłączone, ale nadal działa na serwerze zdalnym.  Połącz się ponownie, aby uzyskać stan operacji polecenia i dane wyjściowe.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ bieżąca sesja programu PowerShell jest w stanie Rozłączono.  Połącz się z tą sesją programu PowerShell, a następnie zaczekaj na zakończenie polecenia lub zatrzymaj je.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ bieżąca sesja programu PowerShell jest w stanie Rozłączono.  Połącz się z tą sesją programu PowerShell, a następnie spróbuj ponownie.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Próba nawiązania połączenia ze zdalnym poleceniem nie powiodła się.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ polecenie jest obecnie zatrzymywane. Poczekaj na zakończenie zatrzymywania polecenia, a następnie spróbuj ponownie wykonać operację.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Brak dostępnego obszaru działania do uruchomienia poleceń w tym wątku. Można podać go we właściwości DefaultRunspace typu System.Management.Automation.Runspaces.Runspace. Bieżące wystąpienie programu PowerShell nie zawiera żadnego polecenia do wywołania.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Nie można utworzyć obiektu programu PowerShell, który używa bieżącego obszaru działania, ponieważ nie ma dostępnego bieżącego obszaru działania.  Bieżący obszar działania może być uruchamiany, na przykład po utworzeniu ze stanem sesji początkowej.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ProgressRecordStrings.pl.resx b/src/System.Management.Automation/resources/pl/ProgressRecordStrings.pl.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ProgressRecordStrings.pl.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ProviderBaseSecurity.pl.resx b/src/System.Management.Automation/resources/pl/ProviderBaseSecurity.pl.resx
new file mode 100644
index 00000000000..5ea4e20f07c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ProviderBaseSecurity.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Nie można użyć interfejsu, ponieważ interfejs ISecurityDescriptorCmdletProvider nie jest obsługiwany przez tego dostawcę.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/ProxyCommandStrings.pl.resx b/src/System.Management.Automation/resources/pl/ProxyCommandStrings.pl.resx
new file mode 100644
index 00000000000..a4366b59720
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/ProxyCommandStrings.pl.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>Parametr „help” nie jest rozpoznawany jako prawidłowy obiekt HelpInfo utworzony przez polecenie „get-help”.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>Nie można wygenerować polecenia serwera proxy, ponieważ element CommandMetadata nie ma nazwy.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/RegistryProviderStrings.pl.resx b/src/System.Management.Automation/resources/pl/RegistryProviderStrings.pl.resx
new file mode 100644
index 00000000000..ecfceb1051a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/RegistryProviderStrings.pl.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Ustaw element</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Wartość: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Wyczyść element</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Nowy element</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Usuń klucz</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Element: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Kopiuj klucz</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Miejsce docelowe: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Zmień nazwę elementu</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Przenieś element</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Miejsce docelowe: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Ustaw właściwość</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Właściwość: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Wyczyść właściwość</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Właściwość: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Nowa właściwość</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Właściwość: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Usuń właściwość</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} Właściwość: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Zmień nazwę właściwości.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Kopiuj właściwość</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Przenieś właściwość</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Element: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operacja nie została przetworzona. Podana lokalizacja nie zezwala na tę operację.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operacja nie jest dozwolona w lokalizacji źródłowej.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Operacja nie jest dozwolona w lokalizacji docelowej.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Ustawienia konfiguracji komputera lokalnego</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Ustawienia oprogramowania dla bieżącego użytkownika</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Klucz w tej ścieżce już istnieje.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ ścieżka docelowa jest podrzędna względem ścieżki źródłowej.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>Właściwość już istnieje.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>Właściwość {0} nie istnieje w ścieżce {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>Klucz rejestru w określonej ścieżce nie istnieje.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Nie można powiązać parametru „Type”. Nie można przekonwertować „{0}” na „{1}”. Możliwe wartości wyliczenia to „String, ExpandString, Binary, DWord, MultiString, QWord, Unknown”.</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Klucz {0} został utworzony, ale nie można ustawić wartości domyślnej.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Nie można utworzyć dysku z określonym katalogiem głównym. Ścieżka katalogu głównego nie istnieje.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Nie można zmienić nazwy elementu, ponieważ element o tej nazwie już istnieje w tym samym kontenerze.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Nazwa klucza rejestru musi zaczynać się od prawidłowej nazwy klucza podstawowego.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>Argument podklucza jest nieprawidłowy.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Nie można usunąć drzewa podklucza, ponieważ podklucz nie istnieje.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Nie istnieje żadna wartość o tej nazwie.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>Wartość wyliczenia {0} jest nieprawidłowa.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Należy określić argument wartości.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Należy określić argument nazwy.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>Określony element RegistryValueKind jest wartością, która jest nieprawidłowa.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>Właściwość RegistryKey.SetValue nie zezwala na element String[], który zawiera odwołanie do ciągu o wartości null.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Podklucze rejestru nie powinny być dłuższe niż 255 znaków.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Należy określić nazwę podklucza, który nie jest pusty.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Typ obiektu wartości jest niezgodny z określonym typem RegistryValueKind lub nie można poprawnie przekonwertować obiektu.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue nie obsługuje tablic typu „{0}”. Obsługiwane są tylko wartości Byte[] i String[].</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>Określony klucz rejestru nie istnieje.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>Długość określonej nazwy wartości przekracza maksymalną liczbę 16383 znaków.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>Rozmiar określonych danych wartości przekracza wartość maksymalną wynoszącą 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>Określony podklucz rejestru nie istnieje.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>Określona wartość RegistryKeyPermissionCheck jest nieprawidłowa.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>Klucz rejestru ma podklucze; operacje usuwania cyklicznego nie są obsługiwane przez tę metodę.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Nie można utworzyć dojścia KTM bez transakcji Transaction.Current lub określonej transakcji.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>Określona transakcja lub transakcja Transaction.Current musi być zgodna z transakcją użytą do utworzenia lub otwarcia tego klucza TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>Obiekt TransactedRegistryKey nie jest skojarzony z transakcją, ponieważ jest przeznaczony dla wstępnie zdefiniowanego klucza.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>Żądany dostęp do rejestru jest niedozwolony.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Odmowa dostępu do klucza rejestru „{0}”.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Nie można zapisać w kluczu rejestru.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Nie można uzyskać dostępu do zamkniętego klucza rejestru.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Nieznany błąd: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Transakcje rejestru nie są obsługiwane na tej platformie.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Określone dojście jest nieprawidłowe.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/RemotingErrorIdStrings.pl.resx b/src/System.Management.Automation/resources/pl/RemotingErrorIdStrings.pl.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/RemotingErrorIdStrings.pl.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/RunspaceInit.pl.resx b/src/System.Management.Automation/resources/pl/RunspaceInit.pl.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/RunspaceInit.pl.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/RunspacePoolStrings.pl.resx b/src/System.Management.Automation/resources/pl/RunspacePoolStrings.pl.resx
new file mode 100644
index 00000000000..2f99d953d42
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/RunspacePoolStrings.pl.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>Maksymalny rozmiar puli nie może być mniejszy niż 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>Minimalny rozmiar puli nie może być mniejszy niż 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>Minimalny rozmiar puli nie może być większy od maksymalnego rozmiaru puli.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Stan puli obszarów działania nie jest prawidłowy dla tej operacji.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ obszar działania nie jest w stanie „{0}”. Bieżący stan to „{1}”.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Nie można otworzyć puli obszarów działania, ponieważ nie jest ona w stanie „'BeforeOpen”. Bieżący stan to „{0}”.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Obiekt {0} nie został utworzony przez wywołanie {1} w bieżącym wystąpieniu RunspacePool.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Nie można zwolnić obszaru działania do bieżącej puli, ponieważ ten obszar działania nie należy do bieżącej puli.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Tej właściwości nie można zmienić po otwarciu puli obszarów działania.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Ten obszar działania nie obsługuje operacji rozłączania i ponownego łączenia.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Nie można wykonać operacji, ponieważ obszar działania nie jest w stanie Disconnected.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Operacja Disconnect nie jest obsługiwana na serwerze.  Serwer musi działać w programie PowerShell 3.0 lub nowszym, aby obsługiwać rozłączanie zdalnej puli obszarów działania.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Ta pula obszarów działania {0} nie jest skonfigurowana do udostępniania odłączonych obiektów programu PowerShell dla poleceń uruchamianych na serwerze zdalnym.  Użyj statycznej metody GetRunspacePools() klasy RunspacePool, aby odpytać serwer i zwrócić obiekty puli obszarów działania skonfigurowane do tego celu.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Nie można połączyć tej puli obszarów działania, ponieważ odpowiadająca jej pula po stronie serwera jest połączona z innym klientem.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState nie jest obsługiwany na serwerze.  Serwer musi działać w programie PowerShell 5.0 lub nowszym.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/RunspaceStrings.pl.resx b/src/System.Management.Automation/resources/pl/RunspaceStrings.pl.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/RunspaceStrings.pl.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/SecuritySupportStrings.pl.resx b/src/System.Management.Automation/resources/pl/SecuritySupportStrings.pl.resx
new file mode 100644
index 00000000000..14db43bfa15
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/SecuritySupportStrings.pl.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Cannot load certificate. '{0}' must resolve to a file system path.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Certificate '{0}' cannot be used for encryption. Encryption certificates must contain the Data Encipherment or Key Encipherment key usage, and include the Document Encryption Enhanced Key Usage ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Cannot load certificate. The identifier '{0}' matches multiple certificates. To encrypt to multiple recipients, provide multiple specific values to the '{1}' parameter, rather than a wildcard that matches multiple certificates.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Cannot load encryption certificate. The certificate setting '{0}' does not represent a valid base-64 encoded certificate, nor does it represent a valid certificate by file, directory, thumbprint, or subject name.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>WARNING: The certificate '{0}' contains a private key. Protected Event Logging certificates used for encryption should only contain the public key.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ERROR: Could not protect event log message '{0}': {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ERROR: Could not find or use certificate: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Session key not available to encrypt secure string.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Invalid buffer offset.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Invalid public key data.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Cannot import public key.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Invalid session key data.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Script file, '{0}', is blocked from running by system policy.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>An unknown script file policy enforcement value was returned: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Script File Read</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Script file '{0}' is not trusted by policy and will run in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/Serialization.pl.resx b/src/System.Management.Automation/resources/pl/Serialization.pl.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/Serialization.pl.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/SessionStateProviderBaseStrings.pl.resx b/src/System.Management.Automation/resources/pl/SessionStateProviderBaseStrings.pl.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/SessionStateProviderBaseStrings.pl.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/SessionStateStrings.pl.resx b/src/System.Management.Automation/resources/pl/SessionStateStrings.pl.resx
new file mode 100644
index 00000000000..67360500c67
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/SessionStateStrings.pl.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Cannot find path '{0}' because it does not exist.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/StringDecoratedStrings.pl.resx b/src/System.Management.Automation/resources/pl/StringDecoratedStrings.pl.resx
new file mode 100644
index 00000000000..f6e8831e7f9
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/StringDecoratedStrings.pl.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Dla tej metody jest obsługiwana tylko wartość „ANSI” lub „PlainText”.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/SubsystemStrings.pl.resx b/src/System.Management.Automation/resources/pl/SubsystemStrings.pl.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/SubsystemStrings.pl.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/SuggestionStrings.pl.resx b/src/System.Management.Automation/resources/pl/SuggestionStrings.pl.resx
new file mode 100644
index 00000000000..afc472ca863
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/SuggestionStrings.pl.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>Nie znaleziono polecenia „{0}”, ale faktycznie istnieje ono w bieżącej lokalizacji.
+Program PowerShell domyślnie nie ładuje poleceń z bieżącej lokalizacji (zobacz „Get-Help about_Command_Precedence”).
+
+Jeśli ufasz temu poleceniu, zamiast niego uruchom następujące polecenie:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Najbardziej podobne polecenia to:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/TabCompletionStrings.pl.resx b/src/System.Management.Automation/resources/pl/TabCompletionStrings.pl.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/TabCompletionStrings.pl.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/TransactionStrings.pl.resx b/src/System.Management.Automation/resources/pl/TransactionStrings.pl.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/TransactionStrings.pl.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/TypesXmlStrings.pl.resx b/src/System.Management.Automation/resources/pl/TypesXmlStrings.pl.resx
new file mode 100644
index 00000000000..ed8776185de
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/TypesXmlStrings.pl.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Error: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Error in type "{3}": {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Node "{0}" must occur only once under "{1}". The parent node, "{1}", will be ignored.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>The node {0} is not allowed. The following nodes are allowed: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Node "{0}" should not have an inner text.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Node "{0}" should have an inner text.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Node "{0}" was not found. It should occur only once under "{1}". The parent node, "{1}", will be ignored.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>The "Type" node must have "Members", "TypeConverters", or "TypeAdapters".</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Cannot create an instance of the type converter for type {0} due to exception: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell cannot create an instance of the type adapter for the type {0} because of the following exception: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>The adapted type "{0}" is not valid.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>The TypeConverter was ignored because it already occurs.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>The TypeAdapter was ignored because it already occurs.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Type "{0}" should be either TypeConverter or PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Type "{0}" should be a PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>The member {0} is already present.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>The following member name is reserved: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Exception: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>The ScriptProperty should have a getter or setter.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>The CodeProperty should have a getter or setter.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>The value should be either TRUE or FALSE instead of {0}.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Node "{0}" should not have "{1}" attribute.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: The file was not found.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: The file was skipped because it was already loaded by {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Cannot find the registry key: {0}{1}. Using {2} to load the configuration files.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Cannot find the path {0} specified in the registry key: {1}{2}. Using {3} to load the configuration files.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: The file was skipped because it does not have the ps1xml file name extension.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: The file was skipped because of the following validation exception: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Member "{0}" must be a note.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Cannot convert note "{0}":"{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Do not use the member "{0}" here.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>Member "{0}" must have type "{1}".</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}" must be present when the "{1}" is "{2}" and "{3}" is "{4}".</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>A previous error caused all serialization settings to be ignored.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" is not a standard member and will be ignored.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>The {0} path is not fully qualified. Specify a fully qualified type file path.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>The TypeTable cannot be updated because the TypeTable might have been created outside of the runspace.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>There were errors loading TypeTable. Look in the Errors property to get detailed error messages.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Error in TypeData "{0}": {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" should have a value for its property "{1}".</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" should not have null or an empty string in its property "{1}".</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>The type "{0}" was not found. The type name value must be the full name of the type. Verify the type name and run the command again.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>The TypeData must have "Members", "TypeConverters", "TypeAdapters" or "StandardMembers".</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>A shared type table cannot be updated with more than one entry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/VerbDescriptionStrings.pl.resx b/src/System.Management.Automation/resources/pl/VerbDescriptionStrings.pl.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/VerbDescriptionStrings.pl.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pl/WildcardPatternStrings.pl.resx b/src/System.Management.Automation/resources/pl/WildcardPatternStrings.pl.resx
new file mode 100644
index 00000000000..21d8e321cf7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pl/WildcardPatternStrings.pl.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Określony wzorzec symboli wieloznacznych jest nieprawidłowy: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Authenticode.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Authenticode.pt-BR.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Authenticode.pt-BR.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/AuthorizationManagerBase.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/AuthorizationManagerBase.pt-BR.resx
new file mode 100644
index 00000000000..079a87f8aa5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/AuthorizationManagerBase.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>A verificação do AuthorizationManager falhou.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/AutomationExceptions.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/AutomationExceptions.pt-BR.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/AutomationExceptions.pt-BR.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CatalogStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CatalogStrings.pt-BR.resx
new file mode 100644
index 00000000000..15c847caa95
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CatalogStrings.pt-BR.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Não foi possível gerar o arquivo de definição de catálogo.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Adicionando o arquivo "{0}" ao catálogo. O caminho relativo do arquivo no catálogo é "{1}".</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Ignorando a validação do arquivo {0} do catálogo. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Arquivo {0} encontrado no catálogo com hash de {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Os caminhos do catálogo contêm vários arquivos com o mesmo caminho relativo {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Arquivo {0} encontrado no disco com hash de {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Ignorando a validação do arquivo {0} no caminho.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Não foi possível obter um identificador para um contexto de administrador do catálogo para um determinado algoritmo de hash {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Não foi possível criar o hash para o arquivo {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Não é possível abrir o arquivo de catálogo {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>A versão do catálogo é inválida. Damos suporte apenas às versões {0} e {1} do catálogo.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Não foi possível abrir o arquivo de definição de catálogo.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Foram encontradas várias entradas do membro do arquivo {0} no catálogo.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Não foi possível localizar o nome do arquivo ou o caminho do membro do catálogo {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Não foi possível encontrar a entrada do arquivo {0} para criar o hash.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Não foi possível ler o arquivo {0} para calcular seu hash.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CimInstanceTypeAdapterResources.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CimInstanceTypeAdapterResources.pt-BR.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CimInstanceTypeAdapterResources.pt-BR.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CmdletizationCoreResources.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CmdletizationCoreResources.pt-BR.resx
new file mode 100644
index 00000000000..5ffa2b2a66c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CmdletizationCoreResources.pt-BR.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Cmdlets da classe "{0}"</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Não é possível processar o XML de definição do cmdlet para o seguinte arquivo: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Não foi possível processar o atributo ObjectModelWrapper. O tipo {0} define vários conjuntos de parâmetros. Verifique se o XML de definição do cmdlet especifica um tipo válido no atributo ObjectModelWrapper e tente novamente.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Não foi possível processar o atributo ObjectModelWrapper. O tipo {0} é um tipo genérico aberto.  Verifique se o XML de definição do cmdlet especifica um tipo válido no atributo ObjectModelWrapper e tente novamente.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Não foi possível processar o atributo ObjectModelWrapper. O tipo {0} não é derivado da seguinte classe: {1}.  Verifique se o XML de definição do cmdlet especifica um tipo válido no atributo ObjectModelWrapper e tente novamente.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Não foi possível processar o atributo ObjectModelWrapper. O tipo {0} define o parâmetro de cmdlet {1} com um parâmetro de atributo {2} que é ignorado.  Verifique se o XML de definição do cmdlet especifica um tipo válido no atributo ObjectModelWrapper e tente novamente.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Não é possível definir o parâmetro {0} para o cmdlet {1}.  O nome do parâmetro já está definido pela classe {2}.  Altere o nome do parâmetro no XML de definição do cmdlet e tente novamente.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Não é possível definir o parâmetro {0} para o cmdlet {1}. O nome do parâmetro já está definido no elemento XML {2}. Altere o nome do parâmetro no XML de definição do cmdlet e depois tente novamente.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>O valor do atributo EnumName não é convertido em um identificador C# válido: {0}. Verifique o atributo EnumName no XML de definição do cmdlet e tente novamente.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Não é possível processar o elemento &lt;Enum EnumName="{0}" ...&gt;.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>O computador remoto retornou um arquivo CDXML inválido. O seguinte adaptador de cmdlet não tem suporte para importar um módulo CDXML de um computador remoto: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CommandBaseStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CommandBaseStrings.pt-BR.resx
new file mode 100644
index 00000000000..4e6380032ec
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CommandBaseStrings.pt-BR.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Continuar com esta operação?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Sim</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Continue apenas com a próxima etapa da operação.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Sim para &amp;Todos</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Continue com todas as etapas da operação.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Não</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Ignore esta operação e prossiga com a próxima operação.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Não para To&amp;dos</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Ignore esta operação e todas as operações subsequentes.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Interrompa este comando.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Suspender comando</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Suspender</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Pause o pipeline atual e volte para o prompt de comando. Digite "{0}" para retomar o pipeline.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>O programa "{0}" terminou com código de saída diferente de zero: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Executando a operação "{0}" no destino "{1}".</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What If: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Tem certeza de que deseja executar esta ação?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Confirmar</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>O comando em execução foi interrompido porque a variável de preferência "{0}" ou o parâmetro comum está definido como Stop: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>O comando em execução foi interrompido porque a variável de preferência "{0}" ou o parâmetro comum está definido como Stop.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>O comando em execução foi interrompido porque a variável de preferência "{0}" ou o parâmetro comum está definido como o seguinte valor que não é válido: "{1}".</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>O comando em execução foi interrompido porque o usuário selecionou a opção Stop.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>O comando em execução foi interrompido porque o usuário o interrompeu.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Cmdlets derivados de PSCmdlet não podem ser invocados diretamente.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>O cmdlet "{0}" não oferece suporte ao parâmetro "{1}" em uma sessão remota.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Contagem total: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Custo total estimado: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Contagem total desconhecida</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>comando "{0}"</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>O {0} está obsoleto. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Falha na chamada de execução com o código de erro {0} para a linha de comando: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>O comando "{0}" não foi encontrado. O comando especificado precisa ser um executável.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Verificação de dot-source do processamento de bloco de script</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>O processamento de dot-source para o bloco de script "{0}" falhará no modo de linguagem restrita porque o modo de linguagem "{1}" não corresponde ao modo de linguagem atual "{2}".</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Pesquisador de comandos</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>O comando "{0}" no módulo "{1}" não é confiável e não estará acessível no modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ConsoleInfoErrorStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ConsoleInfoErrorStrings.pt-BR.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ConsoleInfoErrorStrings.pt-BR.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CoreClrStubResources.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CoreClrStubResources.pt-BR.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CoreClrStubResources.pt-BR.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CredUI.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CredUI.pt-BR.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CredUI.pt-BR.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Credential.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Credential.pt-BR.resx
new file mode 100644
index 00000000000..cdbef481c0d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Credential.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Não é possível serializar a credencial. Se esse comando estiver iniciando um fluxo de trabalho, as credenciais não poderão ser persistidas, pois o processo no qual o fluxo de trabalho é iniciado não tem permissão para serializar credenciais.
+
+-- Se o fluxo de trabalho foi iniciado em uma PSSession para o computador local, adicione o parâmetro EnableNetworkAccess ao comando que criou a sessão.
+-- Se o fluxo de trabalho foi iniciado em uma PSSession para um computador remoto, adicione o parâmetro Authentication com um valor de CredSSP ao comando que criou a sessão. Ou conecte-se a uma configuração de sessão que tenha o valor da propriedade RunAsUser.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>O valor de UserName não está no formato correto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/CredentialAttributeStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/CredentialAttributeStrings.pt-BR.resx
new file mode 100644
index 00000000000..cc363c96ce5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/CredentialAttributeStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>Solicitação de credencial do PowerShell</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Insira suas credenciais.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/DebuggerStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/DebuggerStrings.pt-BR.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/DebuggerStrings.pt-BR.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/DescriptionsStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/DescriptionsStrings.pt-BR.resx
new file mode 100644
index 00000000000..2c1d31b3a6c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/DescriptionsStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} não pode ser nulo ou estar vazio.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/DiscoveryExceptions.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/DiscoveryExceptions.pt-BR.resx
new file mode 100644
index 00000000000..7564cde77b2
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/DiscoveryExceptions.pt-BR.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>O nome do cmdlet "{0}" não pode ser validado porque não está no formato correto. Os nomes de cmdlet devem incluir um verbo e um substantivo separados por um "-", como "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>O parâmetro "{0}" é declarado várias vezes no conjunto de parâmetros "{1}".</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>O alias "{0}" é declarado várias vezes.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Não foi possível declarar o parâmetro. Os parâmetros podem ser declarados somente em campos e propriedades.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Não é possível processar o cmdlet. Um nome de cmdlet deve consistir em um par verbo e substantivo separado por "-".</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>O termo "{0}" não é reconhecido como um nome de um cmdlet, função, arquivo de script ou programa executável.
+Verifique a ortografia do nome ou, se um caminho foi incluído, verifique se o caminho está correto e tente novamente.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>O argumento "{0}" não é reconhecido como um cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>O argumento "{0}" não é reconhecido como um cmdlet, possivelmente porque não deriva das classes cmdlet ou PSCmdlet: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Não é possível resolver o alias "{0}" porque ele se refere ao termo "{1}", que não é reconhecido como um cmdlet, função, programa executável ou arquivo de script. Verifique o termo e tente novamente.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>O parâmetro "{0}" com o valor "{1}" não pode ser processado porque não é um cmdlet e não pode ser processado pelo CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>Já existe um cmdlet chamado "{0}". Os cmdlets devem ter nomes exclusivos.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>Já existe um provedor de cmdlet chamado "{0}". Os provedores de cmdlets devem ter nomes exclusivos.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>Já existe um assembly chamado "{0}". Os assemblies devem ter nomes exclusivos.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>Já existe um script chamado "{0}". Os scripts devem ter nomes exclusivos.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Não é possível processar a instrução #requires porque ela não está no formato correto.
+A instrução #requires deve estar em um dos seguintes formatos:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque continha uma instrução "#requires" com uma ID de shell {1} incompatível com o shell atual. Para executar esse script, você deve usar o shell localizado em "{2}".</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque continha uma instrução "#requires" com uma ID de shell {1} incompatível com o shell atual.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque continha uma instrução "#requires" para o PowerShell {1}. A versão do PowerShell exigida pelo script não corresponde à versão em execução no momento do PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque continha uma instrução "#requires" para as edições do PowerShell "{1}". A edição do PowerShell exigida pelo script não corresponde à edição do PowerShell {2} em execução no momento.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque os seguintes snap-ins especificados pelas instruções "#requires" do script estão ausentes: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque contém uma instrução "#requires" para execução como Administrador. A sessão atual do PowerShell não está sendo executada como Administrador. Inicie o PowerShell usando a opção Executar como Administrador e tente executar o script novamente.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Versão {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>Não foi possível recuperar o comando porque o parâmetro ArgumentList só pode ser especificado ao recuperar um único cmdlet ou script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>O nome do parâmetro "{0}" está reservado para uso futuro.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>O script "{0}" não pode ser executado porque os seguintes módulos especificados pelas instruções "#requires" do script estão ausentes: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>O comando "{0}" foi encontrado no módulo "{1}", mas o módulo não pôde ser carregado. Para obter mais informações, execute "Import-Module {1}".</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>O comando "{0}" foi encontrado no módulo "{1}", mas o módulo não pôde ser carregado devido ao seguinte erro: [{2}]
+Para obter mais informações, execute "Import-Module {1}".</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>Não foi possível carregar o módulo "{0}". Para obter mais informações, execute "Import-Module {0}".</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>Nenhum comando correspondente inclui um parâmetro chamado "{0}".  Verifique a ortografia do nome do parâmetro e tente novamente.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Não é possível usar dot-source neste comando porque ele foi definido em um modo de linguagem diferente. Para invocar esse comando sem importar seu conteúdo, omita o operador ".".</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>Os parâmetros ShowCommandInfo e Syntax não podem ser especificados juntos.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>Esse comando de script é desabilitado quando o recurso experimental "{0}" é ativado.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>Esse comando de script é desabilitado quando o recurso experimental "{0}" foi desativado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/EnumExpressionEvaluatorStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/EnumExpressionEvaluatorStrings.pt-BR.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/EnumExpressionEvaluatorStrings.pt-BR.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ErrorCategoryStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ErrorCategoryStrings.pt-BR.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ErrorCategoryStrings.pt-BR.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ErrorPackage.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ErrorPackage.pt-BR.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ErrorPackage.pt-BR.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/EtwLoggingStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/EtwLoggingStrings.pt-BR.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/EtwLoggingStrings.pt-BR.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/EventResource.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/EventResource.pt-BR.resx
new file mode 100644
index 00000000000..47ef2e8b8e6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/EventResource.pt-BR.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>Não foi encontrada uma mensagem para a ID de evento PowerShell.Core.Instrumentation.man.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Trabalho agendado {0} iniciado às {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Trabalho agendado {0} concluído às {1} com o estado {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Exceção de Trabalho Agendado {0}:
+ Mensagem: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Inicialização de recurso experimental: ignore o recurso experimental '{0}' do arquivo de configuração. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Inicialização de recurso experimental: falha ao ler o arquivo de configuração.
+ Exceção: {0}
+ Mensagem: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Plug-in de fluxo de trabalho carregado.
+ 	 EndpointName: {0}
+ 	 Usuário: {1}
+ 	 HostingMode: {2}
+ 	 Protocolo: {3}
+ 	 Configuração:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Execução do fluxo de trabalho iniciada.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Estado do fluxo de trabalho alterado.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>O plug-in de fluxo de trabalho foi solicitado para um desligamento.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Plug-in de fluxo de trabalho reiniciado.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>O fluxo de trabalho está sendo retomado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Um limite de cota definido para o ponto de extremidade foi excedido.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>O fluxo de trabalho foi retomado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>O pool de runspace de fluxo de trabalho foi criado.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>A atividade foi colocada na fila para execução.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Execução da atividade iniciada.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>O fluxo de trabalho está sendo importado de um arquivo XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>O fluxo de trabalho foi importado de um arquivo XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Não foi possível importar o fluxo de trabalho de um arquivo XAML devido a um erro.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Validação de fluxo de trabalho iniciada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Validação de fluxo de trabalho bem-sucedida.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Falha na validação do fluxo de trabalho com erro.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Atividade de fluxo de trabalho validada.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Não foi possível validar a atividade do fluxo de trabalho.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Falha na execução da atividade.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Disponibilidade do runspace alterada.
+ 	 RunspaceId: {0}
+ 	 Disponibilidade: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Estado do runspace alterado.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Fluxo de trabalho carregado para execução.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Fluxo de trabalho descarregado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Execução do fluxo de trabalho cancelada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Execução de fluxo de trabalho anulada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Operação de limpeza do fluxo de trabalho executada.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Fluxo de trabalho persistente carregado do disco.
+ 	 WorkflowId: {0}
+ 	 Caminho: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Os dados do fluxo de trabalho foram excluídos do disco.
+ 	 WorkflowId: {0}
+ 	 Caminho: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Iniciando a remoção do trabalho.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Estado do trabalho alterado.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Erro de trabalho.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Trabalho criado para o fluxo de trabalho (trabalho filho).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Trabalho pai criado para o fluxo de trabalho.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Todos os trabalhos necessários foram criados para a execução do fluxo de trabalho.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Trabalho filho removido do fluxo de trabalho.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>Ocorreu um erro ao remover o trabalho.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Erro: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Carregando fluxo de trabalho para execução.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Execução do fluxo de trabalho concluída.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Cancelando a execução do fluxo de trabalho.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Anulando a execução do fluxo de trabalho.
+ 	 WorkflowId: {0}
+ 	 Motivo: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Descarregando fluxo de trabalho.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Desligamento forçado do fluxo de trabalho iniciado.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Desligamento forçado do fluxo de trabalho concluído.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Ocorreu um erro ao encerrar forçadamente um fluxo de trabalho.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Persistindo o fluxo de trabalho no disco.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Fluxo de trabalho persistido no disco.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>A execução da atividade foi concluída.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Erro de execução do fluxo de trabalho.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Um novo ponto de extremidade do PowerShell foi registrado.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Configuração do ponto de extremidade modificada.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Configuração do ponto de extremidade não registrada.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Configuração do ponto de extremidade desabilitada.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Configuração do ponto de extremidade habilitada.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Runspace fora do processo iniciado.
+ 	 Comando: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>O nivelamento de parâmetro foi executado durante a execução do fluxo de trabalho.
+ 	 Parâmetros: {0}
+ 	 Computadores: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Mecanismo de fluxo de trabalho iniciado.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Gerenciador de fluxos de trabalho instanciado com
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Caminho: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Nome do Computador $null ou . resolve para LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Resolvendo para o esquema padrão http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Nome do shell remoto resolvido para o PowerShellCore padrão</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Criando texto do ScriptBlock ({0} de {1}):
+{2}
+
+ID do ScriptBlock: {3}
+Caminho: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Invocação iniciada da ID de ScriptBlock: {0}
+ID do runspace: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Invocação concluída da ID de ScriptBlock: {0}
+ID do runspace: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Contexto:
+{0}
+
+Dados do usuário:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Correlacionando IDs de atividade.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Nome da Classe = {0}
+Nome do Método = {1}
+GUID do fluxo de trabalho = {2}
+Mensagem = {3}
+{4}
+Nome da Atividade = {5}
+GUID da Atividade = {6}
+Parâmetros = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Criando objeto Runspace
+ 	 ID da Instância: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Criando objeto RunspacePool
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Abrindo RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modificando a ID da atividade e correlacionando</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Estado do runspace alterado para {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Tentando novamente a criação da sessão {0} para o código de erro {1} na ID da sessão {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>O PowerShell iniciou um thread de escuta de IPC no processo: {0} no AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>O PowerShell encerrou um thread de escuta de IPC no processo: {0} no AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>Ocorreu um erro no thread de escuta de IPC do PowerShell no processo: {0} no AppDomain: {1}.  Mensagem de Erro: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Conexão IPC do PowerShell no processo: {0} no AppDomain: {1} para Usuário: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Desconexão de IPC do PowerShell no processo: {0} no AppDomain: {1} para o usuário: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Porta resolvida para {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName resolvido para {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName resolvido para {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>O esquema é {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Mensagem de teste analítica</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Os Parâmetros da Conexão são
+ URI de conexão: {0}
+ URI do recurso: {1}
+ Usuário: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Impressão Digital: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Modificando a ID da atividade e correlacionando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Objeto recebido com a ID do Runspace: {0} ID do Comando: {1} Destino: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Ocorreu uma exceção sem tratamento no appdomain.
+Tipo de Exceção: {0}
+Mensagem de Exceção: {1}
+StackTrace de Exceção: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. O WSMan relatou um erro com o código de erro: {2}.
+ Mensagem de erro: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Ocorreu uma exceção sem tratamento no appdomain.
+Tipo de Exceção: {0}
+Mensagem de Exceção: {1}
+StackTrace de Exceção: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. O WSMan relatou um erro com o código de erro: {2}.
+ Mensagem de erro: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>ID do runspace {0}. Estabelecendo uma conexão usando WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID do runspace {0}. Retorno de chamada recebido para WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>ID do runspace: {0}. Fechando shell usando WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID do runspace: {0}. Retorno de chamada recebido para WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. Enviando dados com tamanho {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. Retorno de chamada recebido para WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. Fazendo solicitação de recebimento usando WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. Dados recebidos com tamanho {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>ID do Runspace {0} ID do Pipeline {1}. Estabelecendo uma conexão de comando usando WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ID do Runspace {0} ID do Pipeline {1}. Retorno de chamada recebido para conexão de comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline {1}. Fechando o transporte do comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline {1}. Retorno de chamada recebido para fechamento de comando</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline {1}. Enviando sinal com código {2} usando WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline {1}. Retorno de chamada recebido para WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>ID do runspace: {0}. A conexão está sendo redirecionada para a URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>ID do Runspace: {0} ID do Pipeline: {1}. O servidor está enviando dados de tamanho {2} para o cliente. DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Solicitação {0}. Criando uma sessão remota do servidor. UserName: {1} ID do Shell Personalizado: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Contexto de relatório para a solicitação: {0} Contexto relatado: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Relatando a conclusão da operação para a solicitação: {0}
+ Código de Erro: {1}
+ Mensagem de Erro: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Contexto do Shell {0}. ID da solicitação {1}. Criando uma sessão comum para executar um comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Contexto do shell {0} Contexto do comando {1} ID da solicitação {2}. Parando o comando.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Contexto do shell {0} Contexto do comando {1} ID da solicitação {2}. Dados recebidos do cliente.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Contexto do shell {0} Contexto do comando {1} ID da solicitação {2}. O cliente enviou uma solicitação de recebimento para que o servidor possa enviar dados.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Contexto do Shell {0} Contexto do Comando {1} IsReceiveOperation {2}. Foi obtida uma solicitação de operação de fechamento.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Carregando assembly {0} para shell personalizado com ID de shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Carregando tipo {0} para shell personalizado com ID do shell {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Fragmento de comunicação remota recebido.
+ 	 ID do objeto: {0}
+ 	 ID do fragmento: {1}
+ 	 Sinalizador de início: {2}
+ 	 Sinalizador de encerramento: {3}
+ 	 Comprimento da Carga: {4}
+ 	 Dados da Carga: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Fragmento de comunicação remota enviado.
+ 	 ID do objeto: {0}
+ 	 ID do fragmento: {1}
+ 	 Sinalizador de início: {2}
+ 	 Sinalizador de encerramento: {3}
+ 	 Comprimento da Carga: {4}
+ 	 Dados da Carga: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Desligando o serviço winrm.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Um objeto foi reidratado com sucesso.
+ 	 Nome do tipo desserializado: {0}
+ 	 Reidratação por conversão para o tipo: {1}
+ 	 O objeto reidratado é do tipo: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Falha ao reidratar um objeto.
+ 	 Nome do tipo desserializado: {0}
+ 	 Reidratação por conversão para o tipo: {1}
+ 	 Exceção de conversão de tipo: {2}
+ 	 Exceção interna da conversão de tipo: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>A profundidade de serialização foi substituída.
+ 	 Nome do tipo serializado: {0}
+ 	 Profundidade original: {1}
+ 	 Profundidade substituída: {2}
+ 	 Profundidade atual abaixo do nível superior: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>O modo de serialização foi substituído.
+ 	 Nome do tipo serializado: {0}
+ 	 Modo substituído: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>A serialização de uma propriedade de script foi ignorada porque não há nenhum runspace para usar na avaliação da propriedade.
+ 	 Nome da propriedade: {0}
+ 	 Nome do tipo do proprietário da propriedade: {1}
+ 	 Script getter: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>A serialização de uma propriedade foi ignorada porque o getter da propriedade falhou.
+ 	 Nome da propriedade: {0}
+ 	 Nome do tipo do proprietário da propriedade: {1}
+ 	 Exceção do getter da propriedade: {2}
+ 	 Exceção interna do getter da propriedade: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>A serialização de um objeto enumerável pode não estar concluída, pois o objeto que está sendo enumerado gerou uma exceção.
+ 	 Tipo de objeto sendo enumerado: {0}
+ 	 Exceção:{1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>A serialização chamou o método ToString do objeto, que falhou.
+ 	 Tipo de objeto: {0}
+ 	 Exceção:{1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>A profundidade máxima abaixo do nível superior foi atingida, forçando a serialização do objeto como cadeias de caracteres.
+ 	 Tipo de objeto na profundidade máxima: {0}
+ 	 Nome da propriedade na profundidade máxima: {1}
+ 	 Profundidade: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>Uma XmlException foi gerada pelo desserializador (provavelmente indicando formato clixml incorreto).
+ 	 Número da linha: {0} Posição da linha: {1}
+ 	 Exceção:{2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Falha na serialização das propriedades especificadas, pois uma das propriedades especificadas estava ausente.
+ 	 Tipo de objeto: {0}
+ 	 Nome da propriedade: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>O console do PowerShell está sendo iniciado</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>O console do PowerShell está pronto para entrada de usuário</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Rastreando ErrorRecord:
+ Mensagem: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ Detalhes da Exceção:
+ Mensagem: {5}
+ Rastreamento de Pilha: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Exceção:
+ Mensagem: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Rastreando PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Trabalho de Rastreamento:
+ ID: {0}
+ InstanceId: {1}
+ Nome: {2}
+ Localização: {3}
+ Estado: {4}
+ Comando: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Informações de rastreamento:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Informações de rastreamento:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>INICIAR ImportWorkflowCommand::StartWorkflowApplication. Iniciando invocação da função de fluxo de trabalho. Guid de rastreamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>ENCERRAR ImportWorkflowCommand::StartWorkflowApplication. Encerrando invocação da função de fluxo de trabalho. Guid de rastreamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>INICIAR Criando novo trabalho em ImportWorkflowCommand::StartWorkflowApplication. Guid de rastreamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>ENCERRAR Criando novo trabalho em ImportWorkflowCommand::StartWorkflowApplication. Guid de rastreamento {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>ENCERRAR Criando novo trabalho em ImportWorkflowCommand::StartWorkflowApplication. Guid de Acompanhamento {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>INICIAR JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>ENCERRAR JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>INICIAR WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>ENCERRAR WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>WorkflowJob com Guid {0} adicionado a ContainerParentJob com Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob com Guid {0} associado ao ContainerParentJob remoto com Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>INICIAR Execução do ContainerParentJob com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>ENCERRAR Execução do ContainerParentJob com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>INICIAR Execução do trabalho de proxy com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>ENCERRAR Execução de tarefa de proxy com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>INICIAR Manipulador de eventos StateChanged para Proxy Job com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>ENCERRAR Manipulador de eventos StateChanged para Proxy Job com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>INICIAR Manipulador de eventos StateChanged para Proxy Child Job com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>ENCERRAR Manipulador de eventos StateChanged para Proxy Child Job com Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>INICIAR Executando GC</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>ENCERRAR Executando GC</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>O repositório de persistência atingiu o tamanho máximo especificado</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>O Windows PowerShell ISE começou a executar o arquivo de script {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>O ISE do Windows PowerShell começou a executar um script selecionado pelo usuário do arquivo {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está interrompendo o comando atual.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está retomando o depurador.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está interrompendo o depurador.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está entrando na depuração.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está avançando na depuração.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está saindo da depuração.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está habilitando todos os pontos de interrupção.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está desabilitando todos os pontos de interrupção.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está removendo todos os pontos de interrupção.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está definindo o ponto de interrupção na linha nº: {0} do arquivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está removendo o ponto de interrupção na linha nº: {0} do arquivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está habilitando o ponto de interrupção na linha nº: {0} do arquivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>O ISE do Windows PowerShell está desabilitando o ponto de interrupção na linha nº: {0} do arquivo {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>O Windows PowerShell ISE atingiu um ponto de interrupção na linha #: {0} do arquivo {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/EventingResources.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/EventingResources.pt-BR.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/EventingResources.pt-BR.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ExperimentalFeatureStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ExperimentalFeatureStrings.pt-BR.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ExperimentalFeatureStrings.pt-BR.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ExtendedTypeSystem.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ExtendedTypeSystem.pt-BR.resx
new file mode 100644
index 00000000000..8e034fa151b
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ExtendedTypeSystem.pt-BR.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Propriedade "{0}" não encontrada.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} não é um caminho válido.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/FileSystemProviderStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/FileSystemProviderStrings.pt-BR.resx
new file mode 100644
index 00000000000..546d1e0571a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/FileSystemProviderStrings.pt-BR.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Copiando {0} para {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>De {0} para {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/FormatAndOutXmlLoadingStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/FormatAndOutXmlLoadingStrings.pt-BR.resx
new file mode 100644
index 00000000000..aeb0f5e6e56
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/FormatAndOutXmlLoadingStrings.pt-BR.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o elemento XML {2} não permite atributos.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o nó {2} não pode ter objetos filho.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é inválido.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: deve haver pelo menos um {2} padrão.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: não pode haver mais de um {2} padrão.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o nome do controle não pode ser nulo nem vazio.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: modos de exibição fora da banda só podem usar CustomControl ou ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: um modo de exibição fora da banda não pode ter GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: não é possível carregar o modo de exibição.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: "{2}" não é um valor de alinhamento válido.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é esperado um inteiro positivo.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a definição de cabeçalho da coluna não é válida; todos os cabeçalhos serão descartados.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a contagem de itens da linha = {2} no conjunto alternativo #{3} não corresponde à contagem de itens da linha padrão = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a contagem de itens do cabeçalho = {2} não corresponde à contagem de itens da linha padrão = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é preciso especificar pelo menos um item da exibição de lista.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a entrada de propriedade não é válida.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a lista de definições está ausente.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é esperado um valor booleano.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é esperado um inteiro não negativo.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é esperado um inteiro.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o valor do texto interno está ausente.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a lista de tokens de controle personalizado não pode estar vazia.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} falha ao carregar.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} não pode ser especificado sem uma expressão.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} não pode ser especificado com uma expressão.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: uma cadeia de caracteres de formato está ausente.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o texto do bloco de script está ausente.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: uma propriedade está ausente.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o bloco de script "{2}" é inválido.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: a cadeia de caracteres {2} do recurso {3} no assembly {4} não foi encontrada.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o recurso {2} no assembly {3} não foi encontrado.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o assembly {2} não foi encontrado.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o nó deve ser um XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: é esperada uma expressão.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: não é possível ter control ou Label sem uma expressão.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: não é possível ter control e Label ao mesmo tempo.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: não é possível usar SelectionSetName e TypeName ao mesmo tempo.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: nenhum tipo ou condição foi especificado para aplicar o modo de exibição.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o valor {2} é inválido.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: existe um nó duplicado.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} e {3} são mutuamente exclusivos.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2}, {3} e {4} são mutuamente exclusivos.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é um nó desconhecido.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é um atributo desconhecido.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é um atributo ausente.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: o nó {2} está ausente.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: um nó está ausente de {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é um nó vazio.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Erro no XPath {0} no arquivo {1}: {2} é um atributo vazio.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Erro no arquivo {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Há muitos erros no arquivo {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Ocorreram erros ao carregar o arquivo de dados de formato: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Cache de Assembly Global) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>O caminho {0} não é totalmente qualificado. Especifique um caminho de arquivo de formato totalmente qualificado.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Não é possível atualizar a FormatTable porque ela pode ter sido criada fora do runspace.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Ocorreram erros ao carregar a FormatTable. Veja o conteúdo da propriedade Errors para acessar mensagens de erro detalhadas.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de formatação "{0}": {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com o nome de tipo {0} no índice {1}: a contagem de itens do cabeçalho = {2} não corresponde à contagem de itens da linha padrão = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: dados de formatação "{2}" não são válidos.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: o bloco de script "{2}" não é válido.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: {2} falha ao carregar.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: um TableControl deve conter apenas um {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: deve haver pelo menos um padrão {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: você deve especificar pelo menos um item de exibição de lista.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Erro nos dados de exibição com nome de tipo {0} no índice {1}: não pode haver mais de um {2} padrão.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Há muitos erros nos dados de formatação para o tipo "{0}".</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>Uma tabela de formato compartilhada não pode ser atualizada com mais de uma entrada.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/FormatAndOut_MshParameter.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_MshParameter.pt-BR.resx
new file mode 100644
index 00000000000..e5bdf07e411
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_MshParameter.pt-BR.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Não é possível converter {0} em um dos seguintes tipos {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>O valor de um parâmetro era nulo; esperava-se um dos seguintes tipos: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>A chave duplicada "{0}" está em conflito com "{1}".</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>A chave "{0}" tem um tipo, {1}, que não é válido; os tipos esperados são {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>A chave "{0}" tem um tipo, {1}, que não é válido; o tipo esperado é {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>A chave {0} é ambígua; há conflito entre {1} e {2}.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>O valor de uma chave não pode ser nulo.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>O tipo da chave {0} não é válido. A chave deve ser uma cadeia de caracteres.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>A chave {0} não tem valor.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Falta uma entrada obrigatória para {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>A chave {0} não é válida.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>O valor "{0}" da chave "{1}" não é válido; os valores válidos são {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>O valor "{0}" da chave "{1}" deve ser maior que 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>Não é possível ter uma cadeia de caracteres de formatação vazia para a chave "{0}".</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>A chave "{0}" não pode ter um valor de cadeia de caracteres vazio.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Um valor de cadeia de caracteres vazio não é permitido.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>A chave "{0}" não pode ter caracteres curinga no valor "{1}".</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>Caracteres curinga não são permitidos em "{0}".</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>O valor de EnumerableExpansion não é válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/FormatAndOut_format_xxx.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_format_xxx.pt-BR.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_format_xxx.pt-BR.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/FormatAndOut_out_xxx.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_out_xxx.pt-BR.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/FormatAndOut_out_xxx.pt-BR.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/GetErrorText.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/GetErrorText.pt-BR.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/GetErrorText.pt-BR.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/HelpDisplayStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/HelpDisplayStrings.pt-BR.resx
new file mode 100644
index 00000000000..b268bd11258
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/HelpDisplayStrings.pt-BR.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>NOME</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Exemplo</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Resposta</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Nenhum</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/HelpErrors.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/HelpErrors.pt-BR.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/HelpErrors.pt-BR.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/HistoryStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/HistoryStrings.pt-BR.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/HistoryStrings.pt-BR.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/HostInterfaceExceptionsStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/HostInterfaceExceptionsStrings.pt-BR.resx
new file mode 100644
index 00000000000..d2005490ba2
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/HostInterfaceExceptionsStrings.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Ocorreu um erro do tipo "{0}".</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Um comando que solicita interação do usuário falhou porque o programa host ou o tipo de comando não dá suporte à interação do usuário. Experimente um programa host que dê suporte à interação do usuário, como o Console do PowerShell, e remova comandos relacionados a prompts de tipos de comando que não dão suporte à interação do usuário.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Um comando que solicita interação do usuário falhou porque o programa host ou o tipo de comando não dá suporte à interação do usuário. O host estava tentando solicitar confirmação com a seguinte mensagem: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Não é possível invocar o método porque o pool foi fechado ou falhou.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/InternalCommandStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/InternalCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/InternalCommandStrings.pt-BR.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/InternalHostStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/InternalHostStrings.pt-BR.resx
new file mode 100644
index 00000000000..ef50c6411cd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/InternalHostStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt não foi chamado tantas vezes quanto ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/InternalHostUserInterfaceStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/InternalHostUserInterfaceStrings.pt-BR.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/InternalHostUserInterfaceStrings.pt-BR.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Logging.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Logging.pt-BR.resx
new file mode 100644
index 00000000000..384324abe77
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Logging.pt-BR.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>DESCONHECIDO</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>O recurso experimental do mecanismo '{0}' declarado no arquivo de configuração não está registrado no PowerShell atual.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>O recurso experimental '{0}' declarado no arquivo de configuração é inválido.
+O nome de um recurso experimental deve seguir a convenção abaixo: 
+    Nome do Recurso do Mecanismo: 'PS[FeatureName]'
+    Nome do Recurso do Módulo: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Metadata.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Metadata.pt-BR.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Metadata.pt-BR.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/MiniShellErrors.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/MiniShellErrors.pt-BR.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/MiniShellErrors.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Modules.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Modules.pt-BR.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Modules.pt-BR.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/MshHostRawUserInterfaceStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/MshHostRawUserInterfaceStrings.pt-BR.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/MshHostRawUserInterfaceStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/MshSignature.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/MshSignature.pt-BR.resx
new file mode 100644
index 00000000000..201c4f5ff34
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/MshSignature.pt-BR.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Assinatura verificada.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>O arquivo {0} não está assinado digitalmente. Não é possível executar esse script no sistema atual. Para obter mais informações sobre como executar scripts e definir a política de execução, consulte about_Execution_Policies em https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>O conteúdo do arquivo {0} pode ter sido alterado por um usuário ou processo não autorizado, porque o hash do arquivo não corresponde ao hash armazenado na assinatura digital. O script não pode ser executado no sistema especificado. Para obter mais informações, execute Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>O arquivo {0} está assinado, mas o signante não é confiável neste sistema.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Não é possível assinar o arquivo porque o sistema não dá suporte a operações de assinatura em {0} arquivos.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Não é possível assinar o arquivo porque o sistema não dá suporte a operações de assinatura em arquivos que não têm uma extensão de nome de arquivo.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>A assinatura não pode ser verificada porque é incompatível com o sistema atual.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>A assinatura não pode ser verificada porque é incompatível com o sistema atual. O algoritmo de hash não é válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/MshSnapInCmdletResources.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/MshSnapInCmdletResources.pt-BR.resx
new file mode 100644
index 00000000000..476942fa6bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/MshSnapInCmdletResources.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Não é possível executar a operação. O cmdlet especificado não tem suporte em um shell personalizado.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Nenhum snap-in do PowerShell correspondente ao padrão '{0}' foi encontrado. Verifique o padrão e tente o comando novamente.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>O formato do nome de snap-in especificado não era válido.  Os nomes de snap-in do PowerShell só podem conter caracteres alfanuméricos, hifens, sublinhados e pontos. Corrija o nome e tente a operação novamente.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Não é possível adicionar o snap-in do PowerShell {0} porque ele é um módulo do sistema do PowerShell. Use Import-Module para carregar o módulo.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/MshSnapinInfo.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/MshSnapinInfo.pt-BR.resx
new file mode 100644
index 00000000000..c2aada8aac6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/MshSnapinInfo.pt-BR.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Não é possível acessar as informações de registro do PowerShell.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Não é possível acessar as informações de registro do Mecanismo do PowerShell.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Não foi possível acessar as informações de PublicKeyToken.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>A versão {0} do PowerShell não está disponível neste computador.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>O snap-in do PowerShell "{0}" não está instalado neste computador.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>O valor obrigatório {0} não foi especificado para a chave do Registro {1}.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>O valor obrigatório {0} não está no formato correto para a chave do Registro {1}.  O formato esperado é "string".</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>O valor obrigatório {0} não está no formato correto para a chave do Registro {1}.  O formato esperado é "multistring".</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Não é possível localizar as informações necessárias no Registro ou os arquivos de chave estão ausentes.  Não é possível carregar alguns cmdlets.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Nenhum snap-in foi registrado para a versão {0} do PowerShell.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Não é possível recuperar o recurso de cadeia de caracteres porque o leitor foi descartado.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>O valor da versão {0} não foi especificado ou está incorreto para a chave do Registro {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Nenhum atributo [PSVersion] foi encontrado para o tipo do PowerShell {0}. Adicione um atributo PSVersion ao tipo usando [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/NativeCP.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/NativeCP.pt-BR.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/NativeCP.pt-BR.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PSCommandStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PSCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PSCommandStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PSConfigurationStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PSConfigurationStrings.pt-BR.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PSConfigurationStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PSDataBufferStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PSDataBufferStrings.pt-BR.resx
new file mode 100644
index 00000000000..dfd22557a34
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PSDataBufferStrings.pt-BR.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>O índice especificado é menor que zero ou maior que o número de itens no buffer. O índice deve estar no intervalo de {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Não é possível converter uma referência nula em um tipo de valor.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Não é possível converter o valor do tipo {0} para o tipo {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Não é possível adicionar objetos a um buffer fechado. Verifique se o buffer está aberto para que as operações Adicionar e Inserir sejam bem-sucedidas.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>A propriedade SerializeInput só pode ser definida para o tipo PSObject de PSDataCollection. Defina a propriedade SerializeInput como false ou altere o tipo da coleção para um PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PSListModifierStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PSListModifierStrings.pt-BR.resx
new file mode 100644
index 00000000000..fa3b150e430
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PSListModifierStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>O seguinte modificador de lista desconhecido foi detectado: '{0}'. Os modificadores de lista válidos são Adicionar, Remover e Substituir.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Não é possível aplicar a atualização porque o objeto não é um tipo de coleção com suporte.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PSStyleStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PSStyleStrings.pt-BR.resx
new file mode 100644
index 00000000000..df72e8fcb39
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PSStyleStrings.pt-BR.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>A cadeia de caracteres especificada contém conteúdo imprimível quando deveria conter apenas sequências de escape ANSI: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>O valor de MaxWidth para a renderização do Progress deve ser de pelo menos 18 para que seja renderizado corretamente.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>Ao adicionar ou remover extensões, a extensão precisa começar com um ponto.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ParameterBinderStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ParameterBinderStrings.pt-BR.resx
new file mode 100644
index 00000000000..e36d85dc05a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ParameterBinderStrings.pt-BR.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Não foi possível encontrar um parâmetro correspondente ao nome de parâmetro '{1}'.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Não foi possível encontrar um parâmetro posicional que aceite o argumento '{1}'.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Falta um argumento para o parâmetro '{1}'. Especifique um parâmetro do tipo '{2}' e tente novamente.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>O parâmetro não pode ser processado porque o nome do parâmetro '{1}' é ambíguo. As possíveis correspondências incluem:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Não é possível converter '{6}' para o tipo '{2}' exigido pelo parâmetro '{1}'. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>Não é possível associar o parâmetro '{1}'. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Não é possível associar os parâmetros posicionais '{1}'.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Não é possível associar parâmetros posicionais porque nenhum nome foi fornecido.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>O conjunto de parâmetros não pode ser resolvido com o uso dos parâmetros nomeados especificados. Um ou mais parâmetros emitidos não podem ser usados juntos ou um número insuficiente de parâmetros foi fornecido.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Não é possível processar o comando porque um ou mais parâmetros obrigatórios estão ausentes:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>O parâmetro '{1}' não pode ser especificado no conjunto de parâmetros '{6}'.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Não é possível associar o parâmetro porque o parâmetro '{1}' foi especificado mais de uma vez. Para fornecer vários valores a parâmetros que aceitam vários valores, use a sintaxe de matriz. Por exemplo, "-parameter value1,value2,value3".</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Não é possível avaliar o parâmetro '{1}' porque o argumento está especificado como um bloco de script e não há entrada. Um bloco de script não pode ser avaliado sem entrada.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Falha na entrada para o bloco de script do parâmetro '{1}'. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Não é possível avaliar o parâmetro '{1}' porque a entrada do argumento não produziu nenhuma saída.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>O objeto de entrada não pode ser associado a nenhum parâmetro para o comando porque o comando não usa entrada de pipeline ou a entrada e suas propriedades não correspondem a nenhum dos parâmetros que usam entrada de pipeline.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>O objeto de entrada não pode ser associado porque não continha as informações necessárias para associar todos os parâmetros obrigatórios: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>A entrada do pipeline não pode ser processada porque o valor padrão do parâmetro '{1}' não pode ser recuperado. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Não é possível recuperar os parâmetros dinâmicos para o cmdlet. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Forneça valores para os seguintes parâmetros:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>cmdlet {0} na posição do pipeline de comando {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Não é possível processar a transformação do argumento no parâmetro '{1}'. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Não é possível validar o argumento no parâmetro '{1}'. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Não é possível associar o parâmetro '{1}' ao destino. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Não é possível associar o argumento ao parâmetro '{1}' porque ele é nulo.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Não é possível associar o argumento ao parâmetro '{1}' porque ele é uma cadeia de caracteres vazia.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Não é possível associar o argumento ao parâmetro '{1}' porque ele é uma coleção vazia.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Não é possível associar o argumento ao parâmetro '{1}' porque ele é uma matriz vazia.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Não é possível processar o comando. O parâmetro '{0}' foi definido várias vezes.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Não é possível associar o cmdlet {0} porque o parâmetro '{1}' é do tipo '{2}' e o método Add() não pode ser identificado ou existem vários métodos Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Não é possível associar o cmdlet {0} porque o parâmetro definido por runtime '{1}' foi adicionado ao RuntimeDefinedParameterDictionary com a chave '{6}'. A chave deve ser a mesma que RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Não é possível associar o argumento ao parâmetro '{1}', porque os PSTypeNames do argumento não correspondem ao PSTypeName exigido pelo parâmetro: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>Vários valores padrão diferentes estão definidos em $PSDefaultParameterValues para o parâmetro correspondente ao seguinte nome ou alias: {0}. Esses padrões foram ignorados.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>O seguinte nome ou alias definido no $PSDefaultParameterValues para este cmdlet é resolvido para vários parâmetros: {0}. O padrão foi ignorado.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Esse erro pode ter sido causado pela aplicação da associação de parâmetro padrão. Você pode desabilitar a associação de parâmetro padrão $PSDefaultParameterValues configurando $PSDefaultParameterValues["Desabilitado"] como $true e, em seguida, tentando novamente. Os seguintes parâmetros padrão foram associados com sucesso a este cmdlet quando o erro ocorreu:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Essa falha pode ter sido causada pela aplicação da associação de parâmetro padrão. Você pode desabilitar a associação de parâmetro padrão em $PSDefaultParameterValues definindo $PSDefaultParameterValues["Disabled"] como $true e tentar novamente. O seguinte parâmetro padrão foi associado com sucesso a este cmdlet quando o erro ocorreu:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Falha na associação do valor padrão '{0}' ao parâmetro '{1}': {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>A chave '{0}' não tem um formato válido. Para obter informações sobre o formato correto, consulte about_Parameters_Default_Values em https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>As chaves '{0}' não têm formatos válidos. Para obter informações sobre o formato correto, consulte about_Parameters_Default_Values em https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>O parâmetro '{0}' está obsoleto. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>A chave '{0}' do tipo '{1}' não é um valor de cadeia de caracteres. DefaultParameterDictionary só aceita chaves com valores de cadeia de caracteres.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>A chave '{0}' já foi adicionada ao dicionário.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Método ou Invocação de Propriedade Não Permitido</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>A invocação de método ou propriedade '{0}' no tipo '{1}' não será permitida no modo de Linguagem Restrita para scripts não confiáveis.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Criação de Tipo Não Permitida</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>A criação do Tipo '{0}' não será permitida durante a associação de parâmetros no modo de Linguagem Restrita para scripts não confiáveis.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ParserStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ParserStrings.pt-BR.resx
new file mode 100644
index 00000000000..5610de8daea
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ParserStrings.pt-BR.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Não é possível carregar o assembly '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PathUtilsStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PathUtilsStrings.pt-BR.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PathUtilsStrings.pt-BR.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PipelineStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PipelineStrings.pt-BR.resx
new file mode 100644
index 00000000000..ece7c45545e
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PipelineStrings.pt-BR.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Não é possível processar a instância do cmdlet porque ela está sendo usada por outro pipeline. Contate os Serviços de Atendimento ao Cliente da Microsoft.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Não é possível executar a operação porque o pipeline já foi iniciado. Pare o pipeline e tente a operação novamente.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Não é possível continuar executando o cmdlet porque a política Stop impediu a execução de cmdlets.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Não é possível executar o pipeline porque o primeiro cmdlet do pipeline está tentando ler a entrada dos resultados de um cmdlet anterior. Modifique o primeiro cmdlet, remova-o ou adicione ao pipeline o cmdlet cuja saída é necessária para o primeiro cmdlet e tente executar o pipeline novamente.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Não é possível processar o número do cmdlet. A função ReadFromCommand deve especificar a ID de um cmdlet que já tenha sido adicionado ao pipeline. Contate os Serviços de Atendimento ao Cliente da Microsoft.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Não é possível ler a saída das funções ReadFromCommand e ReadErrorQueue porque outro cmdlet já está lendo essa saída. Contate os Serviços de Atendimento ao Cliente da Microsoft.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Não é possível executar o pipeline porque não há comandos. Adicione pelo menos um comando ao pipeline e execute-o novamente.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Não é possível concluir a operação de pipeline porque ela ainda não foi iniciada. Você deve chamar o método Begin() antes de chamar End() em um pipeline em etapas.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>Os métodos WriteObject e WriteError não podem ser chamados de fora das substituições dos métodos BeginProcessing, ProcessRecord e EndProcessing, e só podem ser chamados na mesma thread. Verifique se o cmdlet faz essas chamadas corretamente ou entre em contato com o Atendimento ao cliente da Microsoft.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>Um cmdlet gerou uma exceção depois de chamar ThrowTerminatingError.
+A primeira exceção foi "{0}", com rastreamento de pilha "{1}".
+A segunda exceção foi "{2}", com rastreamento de pilha "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>Os métodos WriteObject e WriteError não podem ser chamados depois que o pipeline foi fechado. Contate os Serviços de Atendimento ao Cliente da Microsoft.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Ocorreu um erro ao criar o pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Este pipeline não dá suporte à semântica de desconexão e reconexão.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Não é possível conectar este pipeline porque ele não está no estado desconectado.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>O objeto runspace tem um comando remoto nulo associado a ele.  Não é possível criar um objeto RemotePipeline desconectado porque não há nenhum comando remoto especificado.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/PowerShellStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/PowerShellStrings.pt-BR.resx
new file mode 100644
index 00000000000..cbd9fd516df
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/PowerShellStrings.pt-BR.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>O estado da instância atual do PowerShell não é válido para esta operação.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>A operação não pode ser executada porque um comando já foi iniciado. Aguarde até que o comando seja concluído ou pare-o e tente a operação novamente.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Nenhum comando foi especificado.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>A instância do PowerShell não está no estado correto para criar uma instância aninhada do PowerShell. Instâncias aninhadas do PowerShell só devem ser criadas em uma instância do PowerShell em execução.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Não é possível executar a operação porque o runspace não está no estado "{0}". O estado atual do runspace é '{1}'.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Instâncias aninhadas do PowerShell não podem ser invocadas de forma assíncrona. Use o método Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>O objeto {0} não foi criado chamando {1} nesta instância do PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Quando o runspace é definido para reutilizar uma thread, o estado do apartment nas configurações de invocação deve corresponder ao runspace.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Quando o runspace é definido para usar a thread atual, o estado do apartment nas configurações de invocação deve corresponder ao da thread atual.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>É necessário um comando para adicionar um parâmetro. Você precisa adicionar um comando à instância do PowerShell antes de adicionar um parâmetro.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>As chaves no dicionário devem ser cadeias de caracteres.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Não há nenhum Runspace disponível para executar comandos nesta thread. Você pode informar um na propriedade DefaultRunspace do tipo System.Management.Automation.Runspaces.Runspace. O comando que você tentou invocar foi: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Este objeto do PowerShell não pode ser conectado porque não está associado a um runspace remoto ou a um pool de runspaces.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>O comando em execução foi desconectado, mas ainda está em execução no servidor remoto.  Reconecte-se para obter o status da operação do comando e os dados de saída.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>A operação não pode ser executada porque a sessão atual do PowerShell está no estado Desconectado.  Conecte esta sessão do PowerShell e depois aguarde a conclusão do comando ou pare o comando.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>A operação não pode ser executada porque a sessão atual do PowerShell está no estado Desconectado.  Conecte esta sessão do PowerShell e tente novamente.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Falha na tentativa de conexão com o comando remoto.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>A operação não pode ser executada porque um comando está sendo interrompido no momento. Aguarde até que a interrupção do comando seja concluída e tente a operação novamente.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Não há nenhum Runspace disponível para executar comandos nesta thread. Você pode informar um na propriedade DefaultRunspace do tipo System.Management.Automation.Runspaces.Runspace. A instância atual do PowerShell não contém nenhum comando para invocar.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Não é possível criar um objeto do PowerShell que use o runspace atual porque não há nenhum runspace atual disponível.  O runspace atual pode estar sendo iniciado, por exemplo, quando ele é criado com um Estado Inicial de Sessão.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ProgressRecordStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ProgressRecordStrings.pt-BR.resx
new file mode 100644
index 00000000000..cc777b84cb2
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ProgressRecordStrings.pt-BR.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Não é possível processar o argumento porque {0} não pode ser um valor negativo.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Não é possível processar o argumento porque o valor de {0} não pode ser nulo nem vazio.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Não é possível definir a porcentagem porque {0} não pode ser maior que 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId não pode ser igual a ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ProviderBaseSecurity.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ProviderBaseSecurity.pt-BR.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ProviderBaseSecurity.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/ProxyCommandStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/ProxyCommandStrings.pt-BR.resx
new file mode 100644
index 00000000000..aa5dbeb125c
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/ProxyCommandStrings.pt-BR.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>O parâmetro 'help' não é reconhecido como um objeto HelpInfo válido criado pelo comando 'get-help'.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>O comando proxy não pode ser gerado porque CommandMetadata não tem nome.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/RegistryProviderStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/RegistryProviderStrings.pt-BR.resx
new file mode 100644
index 00000000000..fa7e97ec32a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/RegistryProviderStrings.pt-BR.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Definir Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Valor: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Limpar Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Novo Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Remover Chave</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Copiar Chave</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destino: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Renomear Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Mover Item</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destino: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Definir Propriedade</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Propriedade: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Limpar Propriedade</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Propriedade: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Nova Propriedade</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Propriedade: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Remover Propriedade</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Propriedade: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Renomear propriedade.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Copiar Propriedade</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Mover Propriedade</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>A operação não foi processada. O local fornecido não permite esta operação.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>A operação não é permitida no local de origem.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>A operação não é permitida no local de destino.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>As configurações de configuração do computador local</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>As configurações de software do usuário atual</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Já existe uma chave neste caminho.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>A operação não pode ser executada porque o caminho de destino é subordinado ao caminho de origem.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>A propriedade já existe.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>A propriedade {0} não existe no caminho {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>A chave do Registro no caminho especificado não existe.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Não foi possível associar o parâmetro "Type". Não foi possível converter "{0}" em "{1}". Os valores de enumeração possíveis são "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown".</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>A chave {0} foi criada, mas não foi possível definir um valor padrão.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Não é possível criar uma unidade com a raiz especificada. O caminho raiz não existe.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>O item não pode ser renomeado porque já existe um item com esse nome no mesmo contêiner.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>O nome da chave do Registro deve começar com um nome de chave base válido.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>O argumento de subchave não é válido.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Não é possível excluir a árvore de uma subchave porque a subchave não existe.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Não existe nenhum valor com esse nome.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>O valor de enumeração {0} não é válido.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>É preciso especificar um argumento de valor.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>É preciso especificar um argumento de nome.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>O RegistryValueKind especificado não é um valor válido.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue não permite um String[] que contenha uma referência nula de String.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>As subchaves do Registro não deve ser maior que 255 caracteres.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>É preciso especificar um nome de subchave não vazio.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>O tipo do objeto de valor não corresponde ao RegistryValueKind especificado ou o objeto não pôde ser convertido corretamente.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue não oferece suporte a matrizes do tipo "{0}". Há suporte apenas para Byte[] e String[].</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>A chave do Registro especificada não existe.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>O comprimento do nome do valor especificado excede o máximo de 16.383 caracteres.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>O tamanho dos dados do valor especificado excede o máximo de 1 MB.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>A subchave do Registro especificada não existe.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>O valor especificado de RegistryKeyPermissionCheck não é válido.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>A chave do Registro tem subchaves; este método não oferece suporte a remoções recursivas.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Não é possível criar um identificador KTM sem um Transaction.Current ou uma transação especificada.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>A transação especificada ou Transaction.Current deve corresponder à transação usada para criar ou abrir esse TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>O objeto TransactedRegistryKey não está associado a uma transação porque se trata de uma chave predefinida.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>O acesso ao Registro solicitado não é permitido.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>O acesso à chave do Registro "{0}" foi negado.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Não é possível gravar na chave do Registro.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Não é possível acessar uma chave do Registro fechada.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Erro desconhecido: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>As transações do registro não têm suporte nesta plataforma.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>O identificador especificado não é válido.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/RemotingErrorIdStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/RemotingErrorIdStrings.pt-BR.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/RemotingErrorIdStrings.pt-BR.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/RunspaceInit.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/RunspaceInit.pt-BR.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/RunspaceInit.pt-BR.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/RunspacePoolStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/RunspacePoolStrings.pt-BR.resx
new file mode 100644
index 00000000000..9dd772ed197
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/RunspacePoolStrings.pt-BR.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>O tamanho máximo do pool não pode ser menor que 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>O tamanho mínimo do pool não pode ser menor que 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>O tamanho mínimo do pool não pode ser maior que o tamanho máximo do pool.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>O estado do pool de runspaces não é válido para esta operação.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Não é possível executar a operação porque o pool de runspaces não está no estado "{0}". O estado atual é "{1}".</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Não é possível abrir o pool de runspaces porque ele não está no estado "BeforeOpen". O estado atual é "{0}".</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>O objeto {0} não foi criado ao chamar {1} na instância atual de RunspacePool.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Não é possível liberar o runspace para o pool atual porque ele não pertence a esse pool.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Essa propriedade não pode ser alterada após a abertura do pool de runspaces.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Este runspace não oferece suporte a operações de desconexão e conexão.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Não é possível executar a operação porque o pool de runspaces está no estado Desconectado.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>A operação de Desconexão não tem suporte no servidor.  O servidor precisa estar executando o PowerShell 3.0 ou superior para oferecer suporte à desconexão do pool de runspaces remoto.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Este pool de runspaces {0} não está configurado para fornecer objetos do PowerShell desconectados para comandos em execução no servidor remoto.  Use o método estático GetRunspacePools() da classe RunspacePool para consultar o servidor e retornar objetos de pool de runspaces configurados para fazer isso.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Este pool de runspaces não pode ser conectado porque o pool de runspaces correspondente no servidor está conectado a outro cliente.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState não tem suporte no servidor.  O servidor precisa estar executando o PowerShell 5.0 ou superior.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/RunspaceStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/RunspaceStrings.pt-BR.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/RunspaceStrings.pt-BR.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/SecuritySupportStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/SecuritySupportStrings.pt-BR.resx
new file mode 100644
index 00000000000..48139f16ae7
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/SecuritySupportStrings.pt-BR.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Não é possível carregar o certificado. "{0}" deve ser resolvido para um caminho do sistema de arquivos.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>O certificado "{0}" não pode ser usado para criptografia. Os certificados de Criptografia devem conter o uso da chave de Criptografia de Dados ou de Criptografia de Chave e incluir o Uso Avançado de Chave de Criptografia de Documento ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Não foi possível carregar o certificado. O identificador "{0}" corresponde a vários certificados. Para criptografar para vários destinatários, forneça vários valores específicos para o parâmetro "{1}", em vez de um curinga que corresponda a vários certificados.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Não é possível carregar o certificado de criptografia. A configuração do certificado "{0}" não representa um certificado válido codificado em base64, nem um certificado válido por arquivo, diretório, impressão digital ou nome de assunto.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>AVISO: o certificado "{0}" contém uma chave privada. Os certificados de Registro em Log de Eventos Protegidos usados para criptografia devem conter apenas a chave pública.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ERRO: não foi possível proteger a mensagem do log de eventos "{0}": {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ERRO: não foi possível localizar ou usar o certificado: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>A chave da sessão não está disponível para criptografar a cadeia de caracteres segura.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Deslocamento de buffer inválido.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Dados inválidos de chave pública.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Não foi possível importar a chave pública.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Dados inválidos de chave da sessão.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>O arquivo de script "{0}" foi bloqueado pela política do sistema e não pode ser executado.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Foi retornado um valor desconhecido para a imposição da política de arquivo de script: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Arquivo de Script Lido</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>O arquivo de script "{0}" não é confiável pela política e será executado no modo ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/Serialization.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/Serialization.pt-BR.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/Serialization.pt-BR.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/SessionStateProviderBaseStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/SessionStateProviderBaseStrings.pt-BR.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/SessionStateProviderBaseStrings.pt-BR.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/SessionStateStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/SessionStateStrings.pt-BR.resx
new file mode 100644
index 00000000000..06c82190adf
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/SessionStateStrings.pt-BR.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Não é possível localizar o caminho '{0}' porque ele não existe.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/StringDecoratedStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/StringDecoratedStrings.pt-BR.resx
new file mode 100644
index 00000000000..0c6fbe5ad4b
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/StringDecoratedStrings.pt-BR.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Somente 'ANSI' ou 'PlainText' são compatíveis com este método.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/SubsystemStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/SubsystemStrings.pt-BR.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/SubsystemStrings.pt-BR.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/SuggestionStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/SuggestionStrings.pt-BR.resx
new file mode 100644
index 00000000000..acee3004475
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/SuggestionStrings.pt-BR.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>O comando "{0}" não foi encontrado, mas existe no local atual.
+O PowerShell não carrega comandos do local atual por padrão (consulte 'Get-Help about_Command_Precedence').
+
+Se você confiar nesse comando, execute o seguinte comando em vez disso:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Os comandos mais parecidos são:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/TabCompletionStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/TabCompletionStrings.pt-BR.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/TabCompletionStrings.pt-BR.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/TransactionStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/TransactionStrings.pt-BR.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/TransactionStrings.pt-BR.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/TypesXmlStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/TypesXmlStrings.pt-BR.resx
new file mode 100644
index 00000000000..ca6e58ef89a
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/TypesXmlStrings.pt-BR.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Erro: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Erro no tipo "{3}": {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>O nó "{0}" deve ocorrer apenas uma vez em "{1}". O nó pai, "{1}", será ignorado.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>O nó {0} não é permitido. Os seguintes nós são permitidos: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>O nó "{0}" não deve ter texto interno.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>O nó "{0}" deve ter texto interno.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>O nó "{0}" não foi encontrado. Ele deve ocorrer apenas uma vez em "{1}". O nó pai, "{1}", será ignorado.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>O nó "Type" deve ter "Members", "TypeConverters" ou "TypeAdapters".</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Não é possível criar uma instância do conversor de tipo para o tipo {0} devido à exceção: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>O PowerShell não pode criar uma instância do adaptador de tipo para o tipo {0} por causa da seguinte exceção: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>O tipo adaptado "{0}" não é válido.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>O TypeConverter foi ignorado porque já ocorre.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>O TypeAdapter foi ignorado porque já ocorre.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>O tipo "{0}" deve ser TypeConverter ou PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>O tipo "{0}" deve ser um PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>O membro {0} já existe.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>O nome de membro a seguir está reservado: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Exceção: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>A ScriptProperty deve ter um getter ou um setter.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>A CodeProperty deve ter um getter ou um setter.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>O valor deve ser TRUE ou FALSE em vez de {0}.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>O nó "{0}" não deve ter o atributo "{1}".</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: o arquivo não foi encontrado.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: o arquivo foi ignorado porque já foi carregado por {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Não é possível encontrar a chave do Registro: {0}{1}. Usando {2} para carregar os arquivos de configuração.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Não é possível encontrar o caminho {0} especificado na chave do Registro: {1}{2}. Usando {3} para carregar os arquivos de configuração.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: o arquivo foi ignorado porque não tem a extensão de nome de arquivo ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: o arquivo foi ignorado devido à seguinte exceção de validação: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>O membro "{0}" deve ser uma nota.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Não foi possível converter a nota "{0}":"{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Não use o membro "{0}" aqui.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>O membro "{0}" deve ter o tipo "{1}".</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}" deve estar presente quando "{1}" for "{2}" e "{3}" for "{4}".</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Um erro anterior fez com que todas as configurações de serialização fossem ignoradas.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" não é um membro padrão e será ignorado.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>O caminho {0} não é totalmente qualificado. Especifique um caminho de arquivo de tipo totalmente qualificado.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>Não é possível atualizar a TypeTable porque ela pode ter sido criada fora do runspace.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>Ocorreram erros ao carregar a TypeTable. Confira a propriedade Errors para acessar mensagens de erro detalhadas.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Erro no TypeData "{0}": {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" deve ter um valor para a propriedade "{1}".</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" não deve ter uma cadeia de caracteres nula ou vazia em sua propriedade "{1}".</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>O tipo "{0}" não foi encontrado. O valor do nome do tipo deve ser o nome completo do tipo. Verifique o nome do tipo e execute o comando novamente.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>O TypeData deve ter "Members", "TypeConverters", "TypeAdapters" ou "StandardMembers".</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Uma tabela de tipo compartilhada não pode ser atualizada com mais de uma entrada.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/VerbDescriptionStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/VerbDescriptionStrings.pt-BR.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/VerbDescriptionStrings.pt-BR.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/pt-BR/WildcardPatternStrings.pt-BR.resx b/src/System.Management.Automation/resources/pt-BR/WildcardPatternStrings.pt-BR.resx
new file mode 100644
index 00000000000..5c54ac9a939
--- /dev/null
+++ b/src/System.Management.Automation/resources/pt-BR/WildcardPatternStrings.pt-BR.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>O padrão de caractere curinga especificado não é válido: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Authenticode.ru.resx b/src/System.Management.Automation/resources/ru/Authenticode.ru.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Authenticode.ru.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/AuthorizationManagerBase.ru.resx b/src/System.Management.Automation/resources/ru/AuthorizationManagerBase.ru.resx
new file mode 100644
index 00000000000..ea6398976eb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/AuthorizationManagerBase.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>Сбой проверки AuthorizationManager.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/AutomationExceptions.ru.resx b/src/System.Management.Automation/resources/ru/AutomationExceptions.ru.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/AutomationExceptions.ru.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CatalogStrings.ru.resx b/src/System.Management.Automation/resources/ru/CatalogStrings.ru.resx
new file mode 100644
index 00000000000..e24ff3a3171
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CatalogStrings.ru.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Не удалось создать файл определения каталога.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>Добавление файла "{0}" в каталог. Относительный путь к файлу в каталоге: "{1}".</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Пропуск проверки файла {0} из каталога. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>В каталоге найден файл {0} с хэшем {1}. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Пути к каталогу содержат несколько файлов с одинаковым относительным путем {0}. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Найден файл {0} на диске с хэшем {1}.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Пропуск проверки файла {0} из пути.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Не удалось получить дескриптор контекста администратора каталога для заданного алгоритма хэширования {0}.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>Не удалось создать хэш для файла {0}. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>Не удалось открыть файл каталога {0}.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>Неверная версия каталога. Мы поддерживаем только версию каталога {0} и версию {1}.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Не удалось открыть файл определения каталога.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Найдено несколько записей элемента файла {0} в каталоге.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>Не удалось найти имя файла или путь для элемента каталога {0}.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Не удалось найти файл {0} в хэш.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Не удалось прочитать файл {0}, чтобы вычислить его хэш.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CimInstanceTypeAdapterResources.ru.resx b/src/System.Management.Automation/resources/ru/CimInstanceTypeAdapterResources.ru.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CimInstanceTypeAdapterResources.ru.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CmdletizationCoreResources.ru.resx b/src/System.Management.Automation/resources/ru/CmdletizationCoreResources.ru.resx
new file mode 100644
index 00000000000..6d5c27a3ae4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CmdletizationCoreResources.ru.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>Командлеты над классом "{0}"</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Не удается обработать XML определения для следующего файла: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>Не удается обработать атрибут ObjectModelWrapper. Тип {0} определяет несколько наборов параметров. Убедитесь, что в XML-файле определения командлета в атрибуте ObjectModelWrapper указан допустимый тип, и повторите попытку.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>Не удается обработать атрибут ObjectModelWrapper. Тип {0} является открытым универсальным типом.  Убедитесь, что в XML-файле определения командлета в атрибуте ObjectModelWrapper указан допустимый тип, и повторите попытку.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>Не удается обработать атрибут ObjectModelWrapper. Тип {0} не является производным от следующего класса: {1}.  Убедитесь, что в XML-файле определения командлета в атрибуте ObjectModelWrapper указан допустимый тип, и повторите попытку.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>Не удается обработать атрибут ObjectModelWrapper. Тип {0} определяет параметр командлета {1} с атрибутивным параметром {2}, который игнорируется.  Убедитесь, что в XML-файле определения командлета в атрибуте ObjectModelWrapper указан допустимый тип, и повторите попытку.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>Не удается определить параметр {0} для командлета {1}.  Имя параметра уже определено классом {2}.  Измените имя параметра в XML-файле определения командлета и повторите попытку.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>Не удается определить параметр {0} для командлета {1}. Имя параметра уже определено в элементе XML {2}. Измените имя параметра в XML-файле определения командлета, а затем попробуйте снова.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>Значение атрибута EnumName не соответствует допустимому идентификатору C#: {0}. Проверьте атрибут EnumName в XML-файле определения командлета, а затем повторите попытку.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>Не удается обработать &lt;Enum EnumName="{0}" ... &gt; элемент.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>Удаленный компьютер вернул недействительный файл CDXML. Следующий адаптер командлетов не поддерживается для импорта модуля CDXML с удаленного компьютера: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CommandBaseStrings.ru.resx b/src/System.Management.Automation/resources/ru/CommandBaseStrings.ru.resx
new file mode 100644
index 00000000000..95efced2386
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CommandBaseStrings.ru.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Продолжить эту операцию?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>Д&amp;а</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>Продолжить выполнять только следующий шаг этой операции.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>Да для &amp;всех</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>Продолжить выполнять все шаги этой операции.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Нет</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Пропустить эту операцию и перейти к следующей.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Нет для всех</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Пропустить эту операцию и все последующие операции.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Остановить эту команду.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Остановить команду</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Приостановить</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Приостановить текущий конвейер и вернуться в командную строку. Введите "{0}", чтобы возобновить работу конвейера.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Программа "{0}" завершилась с ненулевым кодом выхода: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>Выполнение операции "{0}" для целевого объекта "{1}".</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>Что если: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Действительно выполнить это действие?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Подтвердить</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>Выполнение команды остановлено, поскольку для переменной предпочтения "{0}" или для общего параметра задано значение "Stop": {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>Выполнение команды остановлено, поскольку для переменной предпочтения "{0}" или для общего параметра задано значение "Stop".</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>Выполняющаяся команда остановлена, поскольку для переменной предпочтения "{0}" или для общего параметра заданно значение: "{1}". Это недопустимое значение.</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>Выполняющаяся команда остановлена, поскольку пользователь выбрал параметр "Остановить".</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>Выполняющаяся команда остановлена, поскольку пользователь прервал ее работу.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>Нельзя вызвать напрямую командлеты, производные от PSCmdlet.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Командлет "{0}" не поддерживает параметр "{1}" в удаленном сеансе.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Общее количество: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Предполагаемое общее количество: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Неизвестное общее количество</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>команда "{0}"</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>Элемент {0} устарел. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Сбой вызова выполнения с кодом ошибки {0} для командной строки: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>Команда "{0}" не найдена. Указанная команда должна быть исполняемым файлом.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Проверка обработки блока сценария Dot-Source</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Обработка Dot-Source для блока сценария "{0}" завершится сбоем в режиме ограниченного языка, поскольку его режим языка "{1}" не совпадает с текущим режимом языка "{2}".</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Поиск команд</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>Команда "{0}" в модуле "{1}" не является доверенной и будет недоступна в режиме ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ConsoleInfoErrorStrings.ru.resx b/src/System.Management.Automation/resources/ru/ConsoleInfoErrorStrings.ru.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ConsoleInfoErrorStrings.ru.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CoreClrStubResources.ru.resx b/src/System.Management.Automation/resources/ru/CoreClrStubResources.ru.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CoreClrStubResources.ru.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CredUI.ru.resx b/src/System.Management.Automation/resources/ru/CredUI.ru.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CredUI.ru.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Credential.ru.resx b/src/System.Management.Automation/resources/ru/Credential.ru.resx
new file mode 100644
index 00000000000..6f6393d787c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Credential.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Не удается сериализовать учетные данные. Если эта команда запускает рабочий процесс, учетные данные не могут быть сохранены, поскольку процесс, в котором запускается рабочий процесс, не имеет разрешения на сериализацию учетных данных.
+
+— Если рабочий процесс запущен в PSSession на локальном компьютере, добавьте параметр EnableNetworkAccess к команде, создавшей сессию.
+— Если рабочий процесс запущен в PSSession на удаленном компьютере, добавьте параметр Authentication со значением CredSSP к команде, создавшей сессию. Или подключитесь к конфигурации сессии, в которой значение свойства RunAsUser задано.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>Значение поля UserName имеет неправильный формат.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/CredentialAttributeStrings.ru.resx b/src/System.Management.Automation/resources/ru/CredentialAttributeStrings.ru.resx
new file mode 100644
index 00000000000..25b11f87af4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/CredentialAttributeStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/DebuggerStrings.ru.resx b/src/System.Management.Automation/resources/ru/DebuggerStrings.ru.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/DebuggerStrings.ru.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/DescriptionsStrings.ru.resx b/src/System.Management.Automation/resources/ru/DescriptionsStrings.ru.resx
new file mode 100644
index 00000000000..2c0d32236de
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/DescriptionsStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} не может быть пустым или иметь значение NULL.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/DiscoveryExceptions.ru.resx b/src/System.Management.Automation/resources/ru/DiscoveryExceptions.ru.resx
new file mode 100644
index 00000000000..4be4daf108f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/DiscoveryExceptions.ru.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>Имя командлета "{0}" не может быть проверено, поскольку оно имеет неправильный формат. Названия командлетов должны содержать глагол и существительное, разделенные дефисом, например, "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>Параметр "{0}" объявлен в наборе параметров "{1}" несколько раз.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>Псевдоним "{0}" объявлен несколько раз.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Не удалось объявить параметр. Параметры можно объявлять только для полей и свойств.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Не удается обработать командлет. Имя командлета должно состоять из пары глагола и существительного, разделенных дефисом (-).</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>Термин "{0}" не распознается как имя, которое является именем для выполнения, функции, файла сценария или исполняемой программы.
+Проверьте правильность написания имени, а если включен путь, то проверьте правильность пути и повторите попытку.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Аргумент "{0}" не распознается как командлет: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>Аргумент "{0}" не распознается как командлет, возможно, потому что он не является производным от классов Cmdlet или PSCmdlet: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Не удается разрешить псевдоним "{0}", поскольку он относится к термину "{1}", который не распознается как командлет, функция, исполняемая программа или файл сценария. Проверьте термин и повторите попытку.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Параметр "{0}" со значением "{1}" не может быть обработан, поскольку он не является командлетом и не может быть обработан обработчиком команд.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>Командлет с именем "{0}" уже существует. Имена командлетов должны быть уникальными.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>Поставщик с именем "{0}" уже существует. Поставщики командлетов должны иметь уникальные имена.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>Сборка с именем "{0}" уже существует. Имена сборок должны быть уникальными.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>Сценарий с именем "{0}" уже существует. Имена сценариев должны быть уникальными.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Не обеспечить обработку #requires, так как он имеет неправильный формат.
+В #requires должен быть один из следующих форматов:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>Скрипт "{0}" не может быть запущен, поскольку он содержит оператор "#requires" с идентификатором оболочки {1}, несовместимым с текущей оболочкой. Для запуска этого сценария необходимо использовать оболочку, расположенную в "{2}".</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>Скрипт "{0}" не может быть запущен, поскольку он содержит оператор "#requires" с идентификатором оболочки {1}, несовместимым с текущей оболочкой.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>Сценарий "{0}" не может быть запущен, поскольку он содержит оператор "#requires" для PowerShell {1}. Требуемая для выполнения сценария версия PowerShell не соответствует текущей запущенной версии PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>Сценарий "{0}" не может быть запущен, поскольку он содержит оператор "#requires" для версий PowerShell "{1}". Требуемая для выполнения сценария версия PowerShell не соответствует текущей используемой версии PowerShell {2}.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>Сценарий "{0}" не может быть запущен, поскольку отсутствуют следующие подключаемые модули, указанные в операторах "#requires" сценария: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>В операторе #requires указан только идентификатор оболочки. Операторы #Requires должны указывать требуемую оснастку PowerShell при запуске в PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>Сценарий "{0}" не может быть запущен, поскольку содержит оператор "#requires" для запуска от имени администратора. Текущая сессия PowerShell запущена не от имени администратора. Запустите PowerShell, используя параметр "Запуск от имени администратора", а затем попробуйте запустить сценарий еще раз.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (версия {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>Не удалось получить команду, поскольку параметр ArgumentList можно указать только при получении отдельного командлета или сценария.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>Имя параметра "{0}" зарезервировано для дальнейшего использования.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>Сценарий "{0}" не может быть запущен, поскольку отсутствуют следующие модули, указанные в операторах "#requires" сценария: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>Команда "{0}" была найдена в модуле "{1}", но модуль не удалось загрузить. Для получения более подробной информации выполните команду "Import-Module {1}".</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>Команда "{0}" найдена в модуле "{1}", но не удалось загрузить модуль из-за следующей ошибки: [{2}]
+Для получения более подробной информации выполните команду "Import-Module {1}".</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>Не удалось загрузить модуль "{0}". Для получения дополнительных сведений выполните команду "Import-Module {0}".</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>Ни одна из соответствующих команд не содержит параметра с именем "{0}".  Проверьте правильность написания имени параметра и попробуйте снова.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Невозможно выполнить команду с помощью dot-source, поскольку она определена в другом языковом режиме. Чтобы выполнить эту команду без импорта ее содержимого, опустите оператор ".".</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>Параметры ShowCommandInfo и Syntax нельзя указывать одновременно.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>Эта команда скрипта отключена, если включена экспериментальная функция "{0}".</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>Эта команда сценария отключена, если экспериментальная функция "{0}" выключена.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/EnumExpressionEvaluatorStrings.ru.resx b/src/System.Management.Automation/resources/ru/EnumExpressionEvaluatorStrings.ru.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/EnumExpressionEvaluatorStrings.ru.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ErrorCategoryStrings.ru.resx b/src/System.Management.Automation/resources/ru/ErrorCategoryStrings.ru.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ErrorCategoryStrings.ru.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ErrorPackage.ru.resx b/src/System.Management.Automation/resources/ru/ErrorPackage.ru.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ErrorPackage.ru.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/EtwLoggingStrings.ru.resx b/src/System.Management.Automation/resources/ru/EtwLoggingStrings.ru.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/EtwLoggingStrings.ru.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/EventResource.ru.resx b/src/System.Management.Automation/resources/ru/EventResource.ru.resx
new file mode 100644
index 00000000000..689edfefcec
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/EventResource.ru.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>Сообщение для события с идентификатором PowerShell.Core.Instrumentation.man не найдено.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Запланированное задание {0} запущено в {1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Запланированное задание завершено {0} в {1} состоянии {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Исключение запланированного задания {0}:
+ Сообщение: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Инициализация экспериментальных функций: игнорировать экспериментальную функцию "{0}" из файла конфигурации. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Инициализация экспериментальных функций: не удалось прочитать файл конфигурации.
+ Исключение: {0}
+ Сообщение: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>Подключаемый модуль рабочего процесса загружен.
+ 	 EndpointName: {0}
+ 	 Пользователь: {1}
+ 	 HostingMode: {2}
+ 	 Протокол: {3}
+ 	 Конфигурация:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>Начато выполнение рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>Состояние рабочего процесса изменено.
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>Подключаемый модуль рабочего процесса запрашивается для завершения работы.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Подключаемый модуль рабочего процесса перезапущен.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>Рабочий процесс возобновляется.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Превышена квота, установленная для конечной точки.
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>Рабочий процесс возобновлен.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>Создан пул пространства выполнения рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Действие поставлено в очередь на выполнение.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Запущено выполнение действия.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>Рабочий процесс импортируется из файла XAML.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>Рабочий процесс импортирован из XAML-файла.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>Не удалось импортировать рабочий процесс из XAML-файла из-за ошибки.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>Начата проверка рабочего процесса.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>Проверка рабочего процесса выполнена.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>Сбой проверки рабочего процесса из-за ошибки.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>Действие рабочего процесса проверено.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>Не удалось проверить действие рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Сбой выполнения действия.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Изменилась доступность пространства выполнения.
+ 	 RunspaceId: {0}
+ 	 Доступность: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Состояние пространства запуска изменено.
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Рабочий процесс загружен для выполнения.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>Рабочий процесс выгружен.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>Выполнение рабочего процесса отменено.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>Выполнение рабочего процесса прервано.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>Операция очистки рабочего процесса выполнена.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Постоянно хранимый рабочий процесс загружен с диска.
+ 	 WorkflowId: {0}
+ 	 Путь: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>Данные рабочего процесса удалены с диска.
+ 	 WorkflowId: {0}
+ 	 Путь: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>Запуск задания удаления.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>Состояние задания изменено.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>Ошибка задания.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>Создано задание для рабочего процесса (дочернее задание).
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>Родительское задание создано для рабочего процесса.
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>Все необходимые задания созданы для выполнения рабочего процесса.
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>Дочернее задание удалено для рабочего процесса.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>При удалении задания произошла ошибка.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Ошибка: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Загрузка рабочего процесса для выполнения.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>Выполнение рабочего процесса завершено.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>Отмена выполнения рабочего процесса.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>Прерывание выполнения рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 Причина: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>Выгрузка рабочего процесса.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Принудительное завершение рабочего процесса запущено.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Принудительное завершение рабочего процесса завершено.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Произошла ошибка при принудительном закрытии рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>Сохранение рабочего процесса на диск.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>Рабочий процесс сохраняется на диске.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Выполнение действия завершено.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>Ошибка выполнения рабочего процесса.
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Зарегистрирована новая конечная точка PowerShell.
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Изменена конфигурация конечной точки.
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Настройка конечной точки не зарегистрирована.
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Конфигурация конечной точки отключена.
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Конфигурация конечной точки включена.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>Запущено внепроцессное пространство выполнения.
+ 	 Команда: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>В процессе выполнения рабочего процесса применялось автоматическое распределение параметров.
+ 	 Параметры: {0}
+ 	 Компьютеры: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>Обработчик рабочих процессов запущен.
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>Диспетчер рабочего процесса с
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 Имя пользователя: {2}
+ 	 Путь: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Имя компьютера $null или . разрешается в LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Преобразование в схему по умолчанию HTTP</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Имя удаленной оболочки преобразовано в значение по умолчанию PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Создание текста Scriptblock ({0} из {1}):
+{2}
+
+ScriptBlock ID: {3}
+Путь: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>Запущен вызов ИД ScriptBlock: {0}
+Идентификатор пространства выполнения: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Выполнение запроса с идентификатором ScriptBlock выполнено: {0}
+Идентификатор пространства выполнения: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Контекст:
+{0}
+
+Данные пользователя:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Сопоставление идентификаторов действий.
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Имя класса = {0}
+Method Name = {1}
+Workflow GUID = {2}
+Message = {3}
+{4}
+Activity Name = {5}
+GUID действия = {6}
+Parameters = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Создание объекта пространства выполнения
+ 	 ИД экземпляра: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>Создание объекта RunspacePool
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>Открытие пула рабочих пространств</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Изменение идентификатора действия и сопоставление</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Состояние пространства выполнения изменено на {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Попытка повторного создания сеанса для {0} кода ошибки {1} в ИД сеанса {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell запустил поток прослушивания IPC в процессе: {0} в AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell завершил поток прослушивания IPC в процессе: {0} в AppDomain: {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>Произошла ошибка в потоке прослушивания IPC PowerShell в процессе: {0} в AppDomain: {1}.  Сообщение об ошибке: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Подключение PowerShell IPC в процессе: {0} в AppDomain: {1} для пользователя: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Отключение IPC PowerShell в процессе: {0} в AppDomain: {1} для пользователя: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Порт разрешен в {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>Имя приложения разрешено в {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>Имя компьютера разрешено в {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Схема: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Тестирование аналитического сообщения</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Параметры подключения 
+ URI подключения: {0}
+ URI ресурса: {1}
+ Пользователь: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Отпечаток пальца: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Изменение идентификатора действия и сопоставление</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Получен объект с идентификатором пространства выполнения: идентификатор команды {0}: назначение {1}: тип данных {2}: целевой интерфейс {3}: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>В домене приложения произошла необработанное исключение.
+Тип исключения: {0}
+Сообщение об исключении: {1}
+Трассировка стека исключений: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. WSMan сообщил об ошибке с кодом ошибки: {2}.
+ Сообщение об ошибке: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>В домене приложения произошла необработанное исключение.
+Тип исключения: {0}
+Сообщение об исключении: {1}
+Трассировка стека исключений: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. WSMan сообщил об ошибке с кодом ошибки: {2}.
+ Сообщение об ошибке: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>ИД пространства выполнения {0}. Установление подключения с помощью WSMan Create Shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ИД пространства выполнения {0}. Получен ответный вызов для создания оболочки WSMan</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>ИД пространства запуска: {0}. Закрытие оболочки с помощью WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ИД пространства запуска: {0}. Получен ответный вызов для WSManCloseShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. Отправка данных размера {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. Получен ответный вызов для WSManSendShellInputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. Отправка запроса на получение с использованием WSManReceiveShellOutputEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. Получены данные размером {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>ИД конвейера {0} ИД пространства запуска {1}. Установление командного соединения с помощью WSManRunShellCommandEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>ИД конвейера {0} ИД пространства запуска {1}. Получен ответный вызов для подключения к команде</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера {1}. Закрытие транспорта для команды</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера {1}. Получен ответный вызов для закрытия команды</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера {1}. Отправка сигнала с кодом {2} с помощью WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера {1}. Получен ответный вызов для WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>ИД пространства запуска: {0}. Подключение перенаправляется на URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>ИД пространства запуска: {0} ИД конвейера: {1}. Сервер отправляет клиенту данные размером {2}. Тип данных: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>Запрос {0}. Создание удаленного сеанса сервера. Имя пользователя: {1} идентификатор пользовательской оболочки: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>Контекст отчетов для запроса: {0} контекст, о котором сообщается: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>Операция отчетности выполнена для запроса: {0}
+ Код ошибки: {1}
+ Сообщение об ошибке: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Контекст оболочки {0}. Идентификатор запроса {1}. Создание сессии CommonAd для выполнения команды.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>ИД контекстного {0} запроса команды контекста {1} оболочки {2}. Остановка команды.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>ИД контекстного {0} запроса команды контекста {1} оболочки {2}. Получены данные от клиента.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>ИД контекстного {0} запроса команды контекста {1} оболочки {2}. Клиент отправил запрос на получение, чтобы сервер отправлял данные.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Контекст контекстной {0} команды оболочки {1} IsReceiveOperation {2}. Запрос на операцию закрытия.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Загрузка сборки {0} для пользовательской оболочки с идентификатором оболочки {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Тип загрузки {0} для пользовательской оболочки с идентификатором оболочки {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Получен фрагмент удаленного взаимодействия.
+ 	 Идентификатор объекта: {0}
+ 	 Идентификатор фрагмента: {1}
+ 	 Флаг запуска: {2}
+ 	 Флаг завершения: {3}
+ 	 Длина полезных данных: {4}
+ 	 Полезные данные: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Отправлен фрагмент удаленного взаимодействия.
+ 	 Идентификатор объекта: {0}
+ 	 Идентификатор фрагмента: {1}
+ 	 Флаг запуска: {2}
+ 	 Флаг завершения: {3}
+ 	 Длина полезных данных: {4}
+ 	 Полезные данные: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>Завершение работы службы winrm.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Объект восстановлен.
+ 	 Имя десериализованного типа: {0}
+ 	 После перенастройки приведите к типу: {1}
+ 	 Тип объекта восстановлен: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Не удалось восстановить объект.
+ 	 Имя десериализованного типа: {0}
+ 	 После перенастройки приведите к типу: {1}
+ 	 Исключение приведения типа: {2}
+ 	 Внутреннее исключение приведения типов: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Глубина сериализации переопределена.
+ 	 Неправильное имя сериализованного типа: {0}
+ 	 Исходная глубина: {1}
+ 	 Переопределена глубина: {2}
+ 	 Текущая глубина ниже верхнего уровня: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Режим сериализации переопределен.
+ 	 Неправильное имя сериализованного типа: {0}
+ 	 Переопределен режим: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Сериализация свойства скрипта была пропущена, поскольку для его оценки отсутствует пространство выполнения.
+ 	 Имя свойства: {0}
+ 	 Имя типа владельца свойства: {1}
+ 	 Сценарий метода получения: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Сериализация свойства пропущена, так как не удалось получить свойство.
+ 	 Имя свойства: {0}
+ 	 Имя типа владельца свойства: {1}
+ 	 Исключение из свойства метода получения: {2}
+ 	 Внутреннее исключение из свойства метода получения {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Сериализация перечисляемого объекта может быть неполной, поскольку перечисляемый объект вызвал исключение.
+ 	 Тип перечисляемого объекта: {0}
+ 	 Исключение: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>При сериализации был вызван метод ToString объекта, что привело к ошибке.
+ 	 Тип элемента: {0}
+ 	 Исключение: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Достигнута максимальная глубина под верхним уровнем, что вынуждает сериализовать объект в виде строк.
+ 	 Тип объекта на максимальной глубине: {0}
+ 	 Имя свойства на максимальной глубине: {1}
+ 	 Глубина: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>Десериализатор выдал исключение XmlException (скорее всего, указывающее на некорректный формат clixml).
+ 	 Номер строки: {0} положение строки: {1}
+ 	 Исключение: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Сериализация указанных свойств не удалась, поскольку одно из указанных свойств отсутствовало.
+ 	 Тип элемента: {0}
+ 	 Имя свойства: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>Запуск консоли PowerShell</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>Консоль PowerShell готова к вводу данных пользователем</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>Трассировка ErrorRecord:
+ Сообщение: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason: {2}
+ CategoryInfo.TargetName: {3}
+ FullyQualifiedErrorId: {4}
+ Сведения об исключении:
+ Сообщение : {5}
+ Трассировка стека: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Исключение:
+ Сообщение: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>Трассировка PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>Задание трассировки:
+ Идентификатор: {0}
+ InstanceID: {1}
+ Имя: {2}
+ Расположение: {3}
+ Состояние: {4}
+ Команда: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>Сведения о трассировке:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>Сведения о трассировке:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>Начало ImportWorkflowCommand::StartWorkflowApplication. Запуск вызовов функции рабочего процесса. Добавление GUID отслеживания {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>Завершение ImportWorkflowCommand::StartWorkflowApplication. Завершение вызовов функции рабочего процесса. Добавление GUID отслеживания {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>BEGIN Создание нового задания в ImportWorkflowCommand::StartWorkflowApplication. Добавление GUID отслеживания {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>Завершение создания нового задания в ImportWorkflowCommand::StartWorkflowApplication. Добавление GUID отслеживания {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>Завершение создания нового задания в ImportWorkflowCommand::StartWorkflowApplication. Tracking Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>Завершение JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>Начало WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>Завершение WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>В ContainerParentJob с Guid {0} добавлено задание рабочего процесса с GUID {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>ProxyJob с Guid {0} связан с удаленным ContainerParentJob с Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>Начало выполнения ContainerParentJob с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>Завершение выполнения ContainerParentJob с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>Начало выполнения Proxy Job с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>Завершение выполнения Proxy Job с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>Начало обработчика события StateChanged для прокси-задания с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>Завершение обработчика события StateChanged для прокси-задания с GUID {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>Начало обработчика события StateChanged для дочернего задания-прокси с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>Завершение обработчика события StateChanged для дочернего задания-прокси с Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>Начало выполнения сборки мусора</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>Завершение выполнения сборки мусора</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Хранилище сохраняемости достигло максимального заданного размера</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Интегрированная среда сценариев Интегрированная среда сценариев Windows PowerShell ISE запустила файл сценария {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE начала запускать выбранный пользователем сценарий из файла {0}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE останавливает текущую команду.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE возобновляет работу отладчика.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE останавливает отладку.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE переходит в режим отладки.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE пропускает этапы отладки.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE выходит из режима отладки.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE включит все точки останова.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE отключит все точки останова.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE удаляет все точки останова.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE устанавливает точку останова в строке #: {0} файла {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE удаляет точку останова в строке #: {0} файла {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE включит точку останова в строке #: {0} файла {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE отключает точку останова в строке #: {0} файла {1}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Интегрированная среда сценариев Windows PowerShell ISE достигла точки останова в строке #: {0} файла {1}.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/EventingResources.ru.resx b/src/System.Management.Automation/resources/ru/EventingResources.ru.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/EventingResources.ru.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ExperimentalFeatureStrings.ru.resx b/src/System.Management.Automation/resources/ru/ExperimentalFeatureStrings.ru.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ExperimentalFeatureStrings.ru.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ExtendedTypeSystem.ru.resx b/src/System.Management.Automation/resources/ru/ExtendedTypeSystem.ru.resx
new file mode 100644
index 00000000000..6e023e05f1a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ExtendedTypeSystem.ru.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Свойство "{0}" не найдено.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>"{0}" не является допустимым путем.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/FileSystemProviderStrings.ru.resx b/src/System.Management.Automation/resources/ru/FileSystemProviderStrings.ru.resx
new file mode 100644
index 00000000000..9e7ec6675f9
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/FileSystemProviderStrings.ru.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>Копирование {0} в {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Из {0} в {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/FormatAndOutXmlLoadingStrings.ru.resx b/src/System.Management.Automation/resources/ru/FormatAndOutXmlLoadingStrings.ru.resx
new file mode 100644
index 00000000000..ada6251f7ab
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/FormatAndOutXmlLoadingStrings.ru.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: элемент XML {2} не допускает атрибутов.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: узел {2} не может содержать дочерние объекты.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} является допустимым.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: должен быть хотя бы одно значение по умолчанию {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: не может быть больше одного элемента по умолчанию {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: имя элемента управления не может быть пустым или иметь значение NULL.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: представления вне диапазона могут содержать только CustomControl или ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: представление вне диапазона не может содержать GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: не удается загрузить представление.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} не является допустимым значением выравнивания.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: требуется положительное целое число.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: определение заголовка столбца недопустимо; все заголовки будут удалены.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: количество элементов строки = {2} в альтернативном наборе #{3} не соответствует количеству элементов строки по умолчанию = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: количество элементов заголовка = {2} не соответствует количеству элементов строки по умолчанию = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: необходимо указать хотя бы один элемент представления списка.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: запись свойства недопустима.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует список определений.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: требуется логическое значение.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: ожидается неотрицательное целое число.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: требуется целое число.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует внутреннее текстовое значение.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: список токенов пользовательского элемента управления не может быть пустым.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} не удалось загрузить.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} нельзя указывать без выражения.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} нельзя указывать с выражением.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: строка формата отсутствует.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует текст блока сценария.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует свойство.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: блок сценария {2} недопустим.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: строка {2} из ресурса {3} в сборке {4} не найдена.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: ресурс {2} в сборке {3} не найдена.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: сборка {2} не найдена.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: узел должен быть XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: требуется выражение.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: нельзя указывать элемент управления или метку без выражения.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: нельзя одновременно использовать элемент управления и метку.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: SelectionSetName и TypeName нельзя использовать одновременно.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: не указаны тип или условие для применения представления.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: значение {2} не является допустимым.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: существует повторяющийся узел.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} и {3} взаимоисключают друг друга.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2}, {3} и {4} взаимоисключают друг друга.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} — неизвестный узел.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} — неизвестный атрибут.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} — отсутствующий атрибут.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует узел {2}.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: отсутствует узел из {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} — пустой узел.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Ошибка в XPath {0} в файле {1}: {2} — пустой атрибут.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Ошибка в файле {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Слишком много ошибок в файле {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>При загрузке файла данных форматирования произошли ошибки: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(глобальный кэш сборок) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>Путь {0} неполный. Укажите полный путь к файлу форматирования.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>Невозможно обновить FormatTable, так как FormatTable могла быть создана вне пространства выполнения.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>При загрузке FormatTable произошли ошибки. Просмотрите содержимое свойства Errors, чтобы получить подробные сообщения об ошибках.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Ошибка форматирования данных {0}: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: число элементов заголовка = {2} не совпадает с числом элементов строки по умолчанию = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: данные форматирования {2} недопустимы.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: блок сценария {2} недопустим.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: не удалось загрузить {2}.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: TableControl должен содержать только один {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: должен быть указан хотя бы один элемент по умолчанию {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: необходимо указать хотя бы один элемент представления списка.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Ошибка в данных представления с именем типа {0} по индексу {1}: не может быть больше одного элемента по умолчанию {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Слишком много ошибок в данных форматирования для типа {0}.</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>В таблицу общего формата нельзя добавить более одной записи.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/FormatAndOut_MshParameter.ru.resx b/src/System.Management.Automation/resources/ru/FormatAndOut_MshParameter.ru.resx
new file mode 100644
index 00000000000..e656ca72a26
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/FormatAndOut_MshParameter.ru.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>Невозможно преобразовать {0} в один из следующих типов {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Значение параметра равно null; ожидался один из следующих типов: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>Дублирующийся ключ "{0}" конфликтует с "{1}".</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>У ключа "{0}" недопустимый тип {1}. ожидаемые типы: {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>У ключа "{0}" недопустимый тип {1}. Ожидаемые типы: {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>Ключ {0} неоднозначен: {1} и {2} конфликтуют.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Значение ключа не может быть равно null.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>Недопустимый тип ключа {0}. Ключ должен быть строкой.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>У ключа {0} нет значения.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>Отсутствует обязательная запись для {0}.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>Недопустимый ключ {0}.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>Значение "{0}" для ключа "{1}" недопустимо. Допустимые значения: {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>Значение "{0}" для ключа "{1}" должно быть больше 0.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>У ключа "{0}" не может быть пустой строки форматирования.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>У ключа "{0}" не может быть пустого строкового значения.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Пустое строковое значение не разрешено.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>Ключ "{0}" не может содержать подстановочные знаки в значении "{1}".</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>Подстановочные знаки не допускаются в "{0}".</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>Недопустимое значение EnumerableExpansion.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/FormatAndOut_format_xxx.ru.resx b/src/System.Management.Automation/resources/ru/FormatAndOut_format_xxx.ru.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/FormatAndOut_format_xxx.ru.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/FormatAndOut_out_xxx.ru.resx b/src/System.Management.Automation/resources/ru/FormatAndOut_out_xxx.ru.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/FormatAndOut_out_xxx.ru.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/GetErrorText.ru.resx b/src/System.Management.Automation/resources/ru/GetErrorText.ru.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/GetErrorText.ru.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/HelpDisplayStrings.ru.resx b/src/System.Management.Automation/resources/ru/HelpDisplayStrings.ru.resx
new file mode 100644
index 00000000000..c0a4746ad3a
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/HelpDisplayStrings.ru.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>Имя</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Пример</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Ответ</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Нет</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/HelpErrors.ru.resx b/src/System.Management.Automation/resources/ru/HelpErrors.ru.resx
new file mode 100644
index 00000000000..7295cefa5af
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/HelpErrors.ru.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help не удалось найти {0} в файле справки в этом сеансе. Для загрузки обновленных разделов справки введите: "Update-Help". Чтобы получить справку в режиме онлайн, найдите соответствующую тему в библиотеке TechNet по адресу https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Не удается обработать категорию справки, так как "{0}" не является допустимой категорией справки.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Не удается загрузить файл справки "{0}". Подробно: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Не удается получить доступ к файлу справки "{0}", так как текущий пользователь не имеет прав доступа к файлу. Подробно: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>Файл справки "{0}" не является допустимым XML-документом. Подробно: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>Произошла ошибка при загрузке содержимого справки {0} из файла {1}. Подробно: {2}. Для загрузки обновленных разделов справки выполните команду Update-Help. Чтобы получить справку в режиме онлайн, найдите соответствующую тему в библиотеке TechNet по адресу https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>Не удается загрузить поставщик "{0}". Подробно: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Не удается загрузить файл справки. Произошли следующие ошибки {1} при загрузке файла справки "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>Узел "{0}" не может иметь "{1}" в качестве дочернего узла. Путь к узлу: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>Узел "{0}" может иметь не более {2} дочерних узлов типа "{1}". Путь к узлу: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Не удается найти ключ реестра: "{0}{1}"; используется "{2}" для загрузки файлов справки.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>Нет параметров соответствующих условиям {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} не поддерживается запрашиваемой категорией справки.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>Не удается отобразить веб-версию этого раздела справки, так как веб-адрес (URI) раздела справки не указан в коде команды или в файле справки для команды.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>Указан недопустимый URI {0}.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Не удалось запустить браузер для отображения веб-справки. Нет программ или браузеров, связанных с открытием URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>Протокол, указанный в Uri "{0}", не поддерживается. Поддерживаются только протоколы "{1}" и "{2}".</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Найдено несколько разделов справки. Используйте только один раздел справки с параметром -{0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Не удается получить справку из удаленного рабочего пространства, поскольку рабочее пространство не открыто.  Откройте рабочую область, выполнив команду неявного удаленного доступа, а затем попробуйте снова выполнить команду для получения справки.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>В доступе отказано. Команде не удалось обновить разделы справки для основных модулей PowerShell, а также для любых модулей в каталоге $pshome\Modules.
+Чтобы обновить эти разделы справки, запустите PowerShell с помощью команды "Запустить от имени администратора" и попробуйте снова запустить команду Update-Help.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>Для использования {0} убедитесь, что ваше приложение использует"Microsoft.NET.Sdk.WindowsDesktop' в качестве SDK проекта и что соответствующая сборка"Microsoft.PowerShell.GraphicalHost' доступна. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} не работает в удаленном сеансе.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>Функция ForwardHelpTargetName не может ссылаться на саму функцию.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Невозможно получить помощь из сетевого расположения в режиме ограниченного доступа.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/HistoryStrings.ru.resx b/src/System.Management.Automation/resources/ru/HistoryStrings.ru.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/HistoryStrings.ru.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/HostInterfaceExceptionsStrings.ru.resx b/src/System.Management.Automation/resources/ru/HostInterfaceExceptionsStrings.ru.resx
new file mode 100644
index 00000000000..0638f83ccef
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/HostInterfaceExceptionsStrings.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>Произошла ошибка типа "{0}".</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Сбой команды, которая выдает запрос пользователю, так как программа узла или тип команды не поддерживают взаимодействие с пользователем. Попробуйте использовать программу узла, поддерживающую взаимодействие с пользователем, например, консоль PowerShell, и удалите команды, связанные с приглашением командной строки, из тех типов команд, которые не поддерживают взаимодействие с пользователем.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Сбой команды, которая выдает запрос пользователю, так как программа узла или тип команды не поддерживают взаимодействие с пользователем. Узел попытался запросить подтверждение со следующим сообщением: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Метод нельзя вызвать, так как пул закрыт или завершил работу с ошибкой.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/InternalCommandStrings.ru.resx b/src/System.Management.Automation/resources/ru/InternalCommandStrings.ru.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/InternalCommandStrings.ru.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/InternalHostStrings.ru.resx b/src/System.Management.Automation/resources/ru/InternalHostStrings.ru.resx
new file mode 100644
index 00000000000..b12ae39510c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/InternalHostStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>Функция EnterNestedPrompt вызывалась не так часто, как ExitNestedPrompt.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/InternalHostUserInterfaceStrings.ru.resx b/src/System.Management.Automation/resources/ru/InternalHostUserInterfaceStrings.ru.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/InternalHostUserInterfaceStrings.ru.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Logging.ru.resx b/src/System.Management.Automation/resources/ru/Logging.ru.resx
new file mode 100644
index 00000000000..d9407797418
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Logging.ru.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1]; Значение=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2]; Значение=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>НЕИЗВЕСТНО</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>Экспериментальная функция подсистемы "{0}", объявленная в конфигурационном файле, не зарегистрирована в текущей версии PowerShell.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>Экспериментальная функция "{0}", объявленная в файле config, недействительна.
+Имя экспериментальной функции должно следовать приведенной ниже таблице. 
+    Название функции подсистемы: 'PS[FeatureName]'
+    Имя функции модуля: "[ModuleName]. [FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Metadata.ru.resx b/src/System.Management.Automation/resources/ru/Metadata.ru.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Metadata.ru.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/MiniShellErrors.ru.resx b/src/System.Management.Automation/resources/ru/MiniShellErrors.ru.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/MiniShellErrors.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Modules.ru.resx b/src/System.Management.Automation/resources/ru/Modules.ru.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Modules.ru.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/MshHostRawUserInterfaceStrings.ru.resx b/src/System.Management.Automation/resources/ru/MshHostRawUserInterfaceStrings.ru.resx
new file mode 100644
index 00000000000..a691bfd10c2
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/MshHostRawUserInterfaceStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>Значение "{0}" должно быть больше или равно "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>Значение "{0}" должно быть положительным целым числом.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>Все строки являются нулевыми или пустыми.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/MshSignature.ru.resx b/src/System.Management.Automation/resources/ru/MshSignature.ru.resx
new file mode 100644
index 00000000000..c369d55bd9e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/MshSignature.ru.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>Подпись проверена.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>Файл {0} не содержит цифровой подписи. Невозможно выполнить этот сценарий в текущей системе. Для получения дополнительной информации о запуске сценариев и настройке политики выполнения см. раздел about_Execution_Policies по адресу https://go.microsoft.com/fwlink/?LinkID=135170</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Содержимое файла {0} могло быть изменено неавторизованным пользователем или процессом, поскольку хэш файла не совпадает с хэшем, хранящимся в цифровой подписи. Сценарий не может быть запущен в указанной системе. Для получения дополнительных сведений выполните команду Get-Help about_Signing.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>Файл {0} подписан, но подписант не является доверенным в этой системе.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Невозможно подписать файл, поскольку система не поддерживает операции подписи файлов {0}.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Невозможно подписать файл, поскольку система не поддерживает операции подписи файлов, не имеющих расширения имени файла.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>Подпись не может быть проверена, поскольку она несовместима с существующей системой.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>Подпись не может быть проверена, поскольку она несовместима с существующей системой. Алгоритм хэширования недействителен.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/MshSnapInCmdletResources.ru.resx b/src/System.Management.Automation/resources/ru/MshSnapInCmdletResources.ru.resx
new file mode 100644
index 00000000000..18f280ef06c
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/MshSnapInCmdletResources.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>Не удается выполнить операцию. Указанный командлет не поддерживается в пользовательской оболочке.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>Оснастки PowerShell, совпадающие с шаблоном "{0}", не найдены. Проверьте шаблон и попробуйте повторить команду.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Формат указанного имени оснастки не является допустимым.  В именах оснасток PowerShell могут содержаться только буквенно-цифровые символы, дефисы, подчеркивания и точки. Исправьте имя, а затем повторите операцию.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Не удается добавить оснастку PowerShell, {0} так как она является системным модулем PowerShell. Используйте команду Import-Module для загрузки модуля.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/MshSnapinInfo.ru.resx b/src/System.Management.Automation/resources/ru/MshSnapinInfo.ru.resx
new file mode 100644
index 00000000000..b45bd3795ac
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/MshSnapinInfo.ru.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Не удалось получить доступ к сведениям реестра PowerShell.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Не удалось получить доступ к сведениям реестра PowerShell Engine.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>Не удалось получить доступ к сведениям PublicKeyToken.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Версия {0} PowerShell недоступна на этом компьютере.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Оснастка PowerShell "{0}" не установлена на этом компьютере.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>Обязательное значение {0} для ключа реестра {1} не указано.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>Обязательное значение {0} имеет некорректный формат для ключа реестра {1}.  Ожидаемый формат: "string".</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>Обязательное значение {0} имеет некорректный формат для ключа реестра {1}.  Ожидаемый формат: "multistring".</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Не удается найти необходимые сведения в реестре или отсутствуют ключевые файлы.  Не удается загрузить некоторые командлеты.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Для версии PowerShell не зарегистрировано ни одного подключаемого модуля {0}.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Не удается получить строковый ресурс, так как объект чтения освобожден.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Значение версии {0} не указано или неверно для ключа реестра {1}.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Не найден атрибут [PSVersion] для типа PowerShell {0}. Добавьте атрибут PSVersion к типу с помощью [PSVersion(PowerShell SnapinBase.PSEngineVersion)].</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/NativeCP.ru.resx b/src/System.Management.Automation/resources/ru/NativeCP.ru.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/NativeCP.ru.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PSCommandStrings.ru.resx b/src/System.Management.Automation/resources/ru/PSCommandStrings.ru.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PSCommandStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PSConfigurationStrings.ru.resx b/src/System.Management.Automation/resources/ru/PSConfigurationStrings.ru.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PSConfigurationStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PSDataBufferStrings.ru.resx b/src/System.Management.Automation/resources/ru/PSDataBufferStrings.ru.resx
new file mode 100644
index 00000000000..36a592b964b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PSDataBufferStrings.ru.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Указанный индекс меньше нуля или больше количества элементов в буфере. Индекс должен быть в диапазоне {0}-{1}.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Не удается преобразовать ссылку с null в тип значения.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Не удается преобразовать значение из типа {0} в тип {1}.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Нельзя добавлять объекты в закрытый буфер. Убедись, что буфер открыт, чтобы операции "Добавить" и "Вставить" прошли успешно.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>Свойство SerializeInput можно задать только для типа PSObject в PSDataCollection. Установите для свойства SerializeInput значение false или измените тип коллекции на PSObject.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PSListModifierStrings.ru.resx b/src/System.Management.Automation/resources/ru/PSListModifierStrings.ru.resx
new file mode 100644
index 00000000000..85d7c407467
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PSListModifierStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Обнаружен следующий неизвестный модификатор списка: "{0}". Допустимые модификаторы списка: Add, Remove и Replace.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Не удается применить обновление, так как объект не является поддерживаемой коллекцией.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PSStyleStrings.ru.resx b/src/System.Management.Automation/resources/ru/PSStyleStrings.ru.resx
new file mode 100644
index 00000000000..671437be320
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PSStyleStrings.ru.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>Указанная строка содержит печатный контент, тогда как она должна содержать только управляющие последовательности ANSI: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>Для правильной отрисовки MaxWidth для отрисовки хода выполнения должно быть не менее 18.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>При добавлении или удалении расширений, расширение должно начинаться с точки.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ParameterBinderStrings.ru.resx b/src/System.Management.Automation/resources/ru/ParameterBinderStrings.ru.resx
new file mode 100644
index 00000000000..a5f8540b762
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ParameterBinderStrings.ru.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>Не удалось найти параметр, соответствующий имени параметра "{1}".</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>Не удается найти позиционный параметр, принимающий аргумент "{1}".</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Отсутствует аргумент для параметра "{1}". Укажите параметр типа "{2}" и повторите попытку.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>Не удается обработать параметр, так как имя параметра "{1}" неоднозначно. Возможные совпадения:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>Не удается преобразовать "{6}" в тип "{2}", необходимый для параметра "{1}". {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>"Не удается привязать параметр "{1}". {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>Не удается привязать позиционные параметры "{1}".</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>"Не удается привязать позиционные параметры, поскольку имена не предоставлены".</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Не удается разрешить набор параметров с использованием указанных именованных параметров. Один или несколько из указанных параметров не могут использоваться одновременно, или предоставлено недостаточное число параметров.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Не удается обработать команду из-за одного или более отсутствующих обязательных параметров:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>Параметр "{1}" не может быть указан в наборе параметров "{6}".</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>Невозможно привязать параметр, поскольку параметр "{1}" указан более одного раза. Для передачи нескольких значений параметрам, которые могут принимать несколько значений, используйте синтаксис массива. Например, "-parameter value1,value2,value3".</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Не удается вывести параметр "{1}", так как его аргумент указан как блок сценария и входные данные не указаны. Блок сценария не может быть оценен без ввода.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>Сбой ввода в блок сценария для параметра "{1}". {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Не удается вывести параметр "{1}", так как входные данные его аргумента не производят выходных данных.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Входной объект не может быть привязан ни к одному из параметров команды потому, что команда не принимает входные данные из конвейера, или потому, что входные данные и их свойства не соответствуют ни одному из параметров, принимающих входные данные из конвейера.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Не удается привязать входной объект, так как он не содержит сведений, необходимых для привязки всех обязательных параметров: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>Не удается обработать входные данные конвейера, так как не удается получить значение параметра "{1}" по умолчанию. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Не удается получить динамические параметры для этого командлета. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Предоставьте значения для следующих параметров:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>командлет в позиции {0} командного конвейера {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>Невозможно обработать преобразование аргумента для параметра "{1}". {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>Не удается проверить аргумент параметра "{1}". {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>Не удается привязать параметр "{1}" к целевому объекту. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>Не удается привязать аргумент к параметру "{1}", так как он имеет значение null.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Не удается привязать аргумент к параметру "{1}", так как это пустая строка.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Не удается привязать аргумент к параметру "{1}", так как это пустая коллекция.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Не удается привязать аргумент к параметру "{1}", так как он является пустым массивом.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Не удается обработать команду. Параметр "{0}" определен несколько раз.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>Не удается привязать командлет {0}, так как параметр "{1}" имеет тип "{2}" и метод Add() не может быть определен, или существует несколько методов Add(). {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Невозможно привязать командлет {0}, поскольку параметр "{1}", определяемый средой выполнения, добавлен в RuntimeDefinedParameterDictionary с ключом "{6}". Ключ должен совпадать с RuntimeDefinedParameter.Name.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Не удается привязать аргумент к параметру "{1}", так как psTypeNames аргумента не соответствует psTypeName, необходимому для параметра: {6}.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>В $PSDefaultParameterValues параметра, совпадающих со следующим именем или псевдонимом, определено несколько различных значений по умолчанию: {0}. Эти значения по умолчанию проигнорированы.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Следующее имя или псевдоним, определенный в $PSDefaultParameterValues для этого $PSDefaultParameterValues, соединяется с несколькими параметрами: {0}. Значение по умолчанию пропущено.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Эта ошибка могла быть вызвана применением привязки параметра по умолчанию. Вы можете отключить привязку параметров по умолчанию в $PSDefaultParameterValues, $PSDefaultParameterValues["Отключено"], чтобы $true и повторить попытку. Следующие параметры по умолчанию успешно привязаны для этого командлета при ошибке:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Эта ошибка может быть вызвана применением привязки параметра по умолчанию. Вы можете отключить привязку параметров по умолчанию в $PSDefaultParameterValues, $PSDefaultParameterValues ["Отключено"], чтобы $true и повторить попытку. Следующий параметр по умолчанию успешно привязан для этого командлета при ошибке:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>Сбой привязки значения по умолчанию "{0}" к параметру "{1}": {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>Ключ "{0}" имеет не допустимый формат. Сведения о правильном формате см. about_Parameters_Default_Values в https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>Ключи "{0}" имеют недопустимый формат. Сведения о правильном формате см. about_Parameters_Default_Values в https://go.microsoft.com/fwlink/?LinkId=228266.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>Параметр "{0}" устарел. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>Ключ "{0}" типа "{1}" не является строкой. DefaultParameterDictionary принимает только ключи строки значений.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>Ключ "{0}" уже добавлен в словарь.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Вызов метода или свойства не разрешен</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Вызов метода или свойства "{0}" типа "{1}" не будет разрешен в режиме ограниченного языка для ненадежных сценариев.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Создание типа не разрешено</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Создание типа "{0}" не будет разрешено во время привязки параметров в режиме ограниченного языка для недоверенных сценариев.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ParserStrings.ru.resx b/src/System.Management.Automation/resources/ru/ParserStrings.ru.resx
new file mode 100644
index 00000000000..81c06d94102
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ParserStrings.ru.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Не удается загрузить сборку "{0}".</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PathUtilsStrings.ru.resx b/src/System.Management.Automation/resources/ru/PathUtilsStrings.ru.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PathUtilsStrings.ru.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PipelineStrings.ru.resx b/src/System.Management.Automation/resources/ru/PipelineStrings.ru.resx
new file mode 100644
index 00000000000..dcb74b40059
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PipelineStrings.ru.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Невозможно обработать экземпляр командлета, так как он уже используется другим конвейером. Обратитесь в службы поддержки клиентов Майкрософт.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Невозможно выполнить операцию, так как конвейер запущен. Остановите конвейер и повторите операцию.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Невозможно продолжить выполнение командлета, так как политика Stop запрещает запуск командлетов.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Не удается запустить конвейер, так как первый командлет в нем пытается прочитать входные данные из результатов предыдущего командлета. Измените или удалите первый командлет. Либо добавьте в конвейер командлет, выходные данные которого требуются первому командлету, а затем попробуйте запустить конвейер еще раз.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Невозможно обработать номер командлета. Функция ReadFromCommand должна указывать идентификатор командлета, который уже добавлен в конвейер. Обратитесь в службы поддержки клиентов Майкрософт.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Невозможно прочитать выходные данные функций ReadFromCommand и ReadErrorQueue, так как их уже читает другой командлет. Обратитесь в службы поддержки клиентов Майкрософт.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Невозможно запустить конвейер, так как в нем нет команд. Добавьте в конвейер хотя бы одну команду и запустите его снова.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Невозможно завершить операцию конвейера, так как он еще не запущен. Перед вызовом End() для пошагового конвейера необходимо вызвать метод Begin().</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>Методы WriteObject и WriteError нельзя вызывать вне переопределений методов BeginProcessing, ProcessRecord и EndProcessing, и их можно вызывать только из одного потока. Проверьте, что командлет вызывает их правильно, или обратитесь в службы поддержки клиентов Майкрософт.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>После вызова ThrowTerminatingError командлет сгенерировал исключение.
+Первым исключением было "{0}" с трассировкой стека "{1}".
+Вторым исключением было "{2}" с трассировкой стека "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>Методы WriteObject и WriteError нельзя вызывать после закрытия конвейера. Обратитесь в службы поддержки клиентов Майкрософт.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>Произошла ошибка при создании конвейера.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>Этот конвейер не поддерживает семантику отключения и подключения.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Невозможно подключить этот конвейер, так как он не находится в отключенном состоянии.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>С объектом пространства выполнения связана удаленная команда со значением null.  Невозможно создать отключенный объект RemotePipeline, так как удаленная команда не указана.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/PowerShellStrings.ru.resx b/src/System.Management.Automation/resources/ru/PowerShellStrings.ru.resx
new file mode 100644
index 00000000000..e31340dd106
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/PowerShellStrings.ru.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Состояние текущего экземпляра PowerShell недопустимо для этой операции.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Невозможно выполнить эту операцию, поскольку команда уже запущена. Дождитесь полной остановки команды или остановите эту команду, затем снова попробуйте выполнить эту операцию.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Команды не указаны.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>Экземпляр PowerShell находится в неподходящем состоянии для создания вложенного экземпляра PowerShell. Вложенные экземпляры PowerShell следует создавать только в работающем экземпляре PowerShell.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Невозможно выполнить операцию, поскольку пространство выполнения не находится в состоянии "{0}". Текущее состояние пространства выполнения: "{1}".</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>Вложенные экземпляры PowerShell невозможно вызывать асинхронно. Используйте метод Invoke.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Объект {0} не был создан путем вызова {1} в этом экземпляре PowerShell.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Если для пространства выполнения задано повторное использование потока, состояние подразделения в параметрах вызова должно совпадать с пространством выполнения.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Если для пространства выполнения задано использование текущего потока, состояние подразделения в параметрах вызова должно совпадать с текущим потоком.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Для добавления параметра требуется команда. Перед добавлением параметра необходимо добавить команду в экземпляр PowerShell.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Ключи в словаре должны быть строками.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Нет доступного пространства выполнения для выполнения команд в этом потоке. Его можно указать в свойстве DefaultRunspace типа System.Management.Automation.Runspaces.Runspace. Вы попытались вызвать команду: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Невозможно подключить объект PowerShell, поскольку он не связан с удаленным пространством выполнения или с пулом пространств выполнения.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Выполняющаяся команда отключена, но по-прежнему выполняется на удаленном сервере.  Повторно установите подключение, чтобы получить состояние операции команды и выходные данные.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Невозможно выполнить операцию, поскольку текущий сеанс PowerShell находится в отключенном состоянии.  Подключите этот сеанс PowerShell, а затем дождитесь завершения этой команды или остановите ее.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Невозможно выполнить операцию, поскольку текущий сеанс PowerShell находится в отключенном состоянии.  Подключите этот сеанс PowerShell и повторите попытку.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Сбой подключения к удаленной команде.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Невозможно выполнить эту операцию, поскольку команда в настоящее время останавливается. Дождитесь полной остановки команды, затем снова попробуйте выполнить эту операцию.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Нет доступного пространства выполнения для выполнения команд в этом потоке. Его можно указать в свойстве DefaultRunspace типа System.Management.Automation.Runspaces.Runspace. Текущий экземпляр PowerShell не содержит команды для вызова.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Невозможно создать объект PowerShell, использующий текущее пространство выполнения, поскольку текущее пространство выполнения недоступно.  Текущее пространство выполнения может запускаться, например, если оно создается с начальным состоянием сеанса.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ProgressRecordStrings.ru.resx b/src/System.Management.Automation/resources/ru/ProgressRecordStrings.ru.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ProgressRecordStrings.ru.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ProviderBaseSecurity.ru.resx b/src/System.Management.Automation/resources/ru/ProviderBaseSecurity.ru.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ProviderBaseSecurity.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/ProxyCommandStrings.ru.resx b/src/System.Management.Automation/resources/ru/ProxyCommandStrings.ru.resx
new file mode 100644
index 00000000000..05af2c982c6
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/ProxyCommandStrings.ru.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>Параметр "help" не распознан как допустимый объект HelpInfo, созданный командой "get-help".</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>Невозможно сгенерировать прокси-команду, поскольку у параметра CommandMetadata отсутствует имя.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/RegistryProviderStrings.ru.resx b/src/System.Management.Automation/resources/ru/RegistryProviderStrings.ru.resx
new file mode 100644
index 00000000000..0247852ffcb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/RegistryProviderStrings.ru.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Задать элемент</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Значение: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Очистить элемент</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Новый элемент</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Удалить раздел</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Копировать раздел</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Назначение: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Переименовать элемент</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Переместить элемент</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Назначение: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Задать свойство</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Свойство: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Очистить свойство</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Свойство: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Новое свойство</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Свойство: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Удалить свойство</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} Свойство: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Переименовать свойство.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Копировать свойство</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Переместить свойство</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Элемент: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Операция не обработана. Указанное расположение не позволяет выполнить эту операцию.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Операция не разрешена в исходном расположении.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>Операция не разрешена в целевом расположении.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Параметры конфигурации для локального компьютера</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Параметры программного обеспечения для текущего пользователя</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Раздел в этом пути уже существует.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>Операция не может быть выполнена, так как путь назначения является вложенным по отношению к исходному пути.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>Свойство уже существует.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>Свойство {0} не существует в пути {1}.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>Раздел реестра по указанному пути не существует.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>Не удалось привязать параметр Type. Не удалось преобразовать {0} в {1}. Возможные значения перечисления: "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown".</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Раздел {0} создан, но не удалось задать значение по умолчанию.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Не удалось создать диск с указанным корнем. Корневой путь не существует.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Элемент невозможно переименовать, так как элемент с таким именем уже существует в том же контейнере.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Имя раздела реестра должно начинаться с допустимого имени базового раздела.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>Недопустимый аргумент подраздела.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Не удается удалить дерево подразделов, так как подраздел не существует.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Значение с таким именем не существует.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>Недопустимое значение перечисления {0}.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Необходимо указать аргумент значения.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Необходимо указать имя аргумента.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>Указанное значение RegistryValueKind недопустимо.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>Метод RegistryKey.SetValue не поддерживает массив String[], содержащий ссылку null.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Длина подраздела реестра не должна превышать 255 символов.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Необходимо указать непустое имя подраздела.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Тип объекта значения не соответствует указанному RegistryValueKind, или объект не удалось преобразовать.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue не поддерживает массивы типа {0}. Поддерживаются только Byte[] и String[].</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>Указанный раздел реестра не существует.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>Длина указанного значения превышает максимальное значение в 16383 символов.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>Размер указанных данных значения превышает 1 МБ.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>Указанный подраздел реестра не существует.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>Указанное значение RegistryKeyPermissionCheck недопустимо.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>Раздел реестра содержит подразделы. Этот метод не поддерживает рекурсивное удаление.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Невозможно создать дескриптор KTM без Transaction.Current или указанной транзакции.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>Указанная транзакция или Transaction.Current должны соответствовать транзакции, использованной для создания или открытия этого TransactedRegistryKey.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>Объект TransactedRegistryKey не связан с транзакцией, так как он предназначен для предопределенного раздела.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>Запрошенный доступ к реестру не разрешен.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>Доступ к разделу реестра {0} запрещен.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Не удается выполнить запись в раздел реестра.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Не удается получить доступ к закрытому разделу реестра.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Неизвестная ошибка: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Транзакции реестра не поддерживаются на этой платформе.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Указан недопустимый дескриптор.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/RemotingErrorIdStrings.ru.resx b/src/System.Management.Automation/resources/ru/RemotingErrorIdStrings.ru.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/RemotingErrorIdStrings.ru.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/RunspaceInit.ru.resx b/src/System.Management.Automation/resources/ru/RunspaceInit.ru.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/RunspaceInit.ru.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/RunspacePoolStrings.ru.resx b/src/System.Management.Automation/resources/ru/RunspacePoolStrings.ru.resx
new file mode 100644
index 00000000000..23f2d93afaf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/RunspacePoolStrings.ru.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>Максимальный размер пула не может быть меньше 1.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>Минимальный размер пула не может быть меньше 1.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>Минимальный размер пула не может быть больше максимального размера пула.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Состояние пула пространств выполнения недопустимо для этой операции.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Не удается выполнить операцию, так как пул пространств выполнения не находится в состоянии {0}. Текущее состояние: {1}.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Не удается открыть пул пространств выполнения, так как он не находится в состоянии BeforeOpen. Текущее состояние: {0}.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>Объект {0} не был создан путем вызова {1} в текущем экземпляре RunspacePool.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Не удается освободить пространство выполнения в текущий пул, так как это пространство выполнения не принадлежит текущему пулу.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Это свойство нельзя изменить после открытия пула пространства выполнения.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Это пространство выполнения не поддерживает операции отключения и подключения.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Не удается выполнить операцию, так как пул пространств выполнения находится в состоянии «Отключено».</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Операция отключения не поддерживается на сервере.  Для поддержки отключения удаленного пула пространств выполнения сервер должен работать под управлением PowerShell 3.0 или более поздней версии.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Этот пул пространств выполнения {0} не настроен на предоставление отключенных объектов PowerShell для команд, выполняемых на удаленном сервере.  Используйте статический метод GetRunspacePools() класса RunspacePool, чтобы выполнить запрос к серверу и вернуть объекты пулов пространств выполнения, настроенные для этого.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Не удается подключить этот пул пространств выполнения, так как соответствующий пул пространств выполнения на стороне сервера подключен к другому клиенту.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState не поддерживается на сервере.  Сервер должен работать под управлением PowerShell 5.0 или более поздней версии.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/RunspaceStrings.ru.resx b/src/System.Management.Automation/resources/ru/RunspaceStrings.ru.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/RunspaceStrings.ru.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/SecuritySupportStrings.ru.resx b/src/System.Management.Automation/resources/ru/SecuritySupportStrings.ru.resx
new file mode 100644
index 00000000000..f3f4eabd1a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/SecuritySupportStrings.ru.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Не удается загрузить сертификат. {0} должен разрешаться в путь файловой системы.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>Сертификат {0} нельзя использовать для шифрования. Сертификаты шифрования должны содержать атрибуты использования ключа «Шифрование данных» или «Шифрование ключа», а также включать расширенное использование ключа (EKU) «Шифрование документа» ({1}).</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Не удается загрузить сертификат. Идентификатор {0} соответствует нескольким сертификатам. Чтобы зашифровать данные для нескольких получателей, укажите несколько конкретных значений для параметра {1}, а не подстановочный знак, который соответствует нескольким сертификатам.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Не удается загрузить сертификат шифрования. Параметр сертификата {0} не является допустимым сертификатом в кодировке Base-64 и не указывает на допустимый сертификат по файлу, каталогу, отпечатку или имени субъекта.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>ПРЕДУПРЕЖДЕНИЕ. Сертификат {0} содержит закрытый ключ. Защищенные сертификаты ведения журнала событий, используемые для шифрования, должны содержать только открытый ключ.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>ОШИБКА: Не удалось защитить сообщение журнала событий {0}: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>ОШИБКА: не удалось найти или использовать сертификат: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Ключ сеанса недоступен для шифрования защищенной строки.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Недопустимое смещение буфера.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Недопустимые данные открытого ключа.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Не удается импортировать открытый ключ.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Недопустимые данные сеансового ключа.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>Файл сценария {0} заблокирован системной политикой и не будет запущен.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Возвращено неизвестное значение принудительного применения политики для файла сценария: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Чтение файла сценария</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>Файл сценария {0} не является доверенным политикой и будет работать в режиме ConstrainedLanguage.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/Serialization.ru.resx b/src/System.Management.Automation/resources/ru/Serialization.ru.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/Serialization.ru.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/SessionStateProviderBaseStrings.ru.resx b/src/System.Management.Automation/resources/ru/SessionStateProviderBaseStrings.ru.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/SessionStateProviderBaseStrings.ru.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/SessionStateStrings.ru.resx b/src/System.Management.Automation/resources/ru/SessionStateStrings.ru.resx
new file mode 100644
index 00000000000..53a07d31907
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/SessionStateStrings.ru.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>не удается найти путь "{0}", поскольку он не существует.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/StringDecoratedStrings.ru.resx b/src/System.Management.Automation/resources/ru/StringDecoratedStrings.ru.resx
new file mode 100644
index 00000000000..660d45c5122
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/StringDecoratedStrings.ru.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Для этого метода поддерживается только "ANSI" или "PlainText".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/SubsystemStrings.ru.resx b/src/System.Management.Automation/resources/ru/SubsystemStrings.ru.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/SubsystemStrings.ru.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/SuggestionStrings.ru.resx b/src/System.Management.Automation/resources/ru/SuggestionStrings.ru.resx
new file mode 100644
index 00000000000..16f5acc9d6b
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/SuggestionStrings.ru.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>Команда {0} не найдена, но существует в текущем расположении.
+По умолчанию PowerShell не загружает команды из текущего расположения по умолчанию (см. Get-Help about_Command_Precedence).
+
+Если этой команде можно доверять, вместо этого выполните следующую команду:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>Наиболее похожие команды:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/TabCompletionStrings.ru.resx b/src/System.Management.Automation/resources/ru/TabCompletionStrings.ru.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/TabCompletionStrings.ru.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/TransactionStrings.ru.resx b/src/System.Management.Automation/resources/ru/TransactionStrings.ru.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/TransactionStrings.ru.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/TypesXmlStrings.ru.resx b/src/System.Management.Automation/resources/ru/TypesXmlStrings.ru.resx
new file mode 100644
index 00000000000..7321b365cab
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/TypesXmlStrings.ru.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : ошибка: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : ошибка в типе "{3}": {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>Узел "{0}" должен встречаться только один раз в "{1}". Родительский узел "{1}" будет пропущен.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Узел {0} не разрешен. Разрешены следующие узлы: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>Узел "{0}" не должен содержать внутренний текст.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>Узел "{0}" должен содержать внутренний текст.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>Узел "{0}" не найден. Это должно произойти только один раз в разделе "{1}". Родительский узел "{1}" будет пропущен.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>Узел "Type" должен иметь "Members", "TypeConverters" или "TypeAdapters".</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Не удается создать экземпляр конвертера типов для типа из-за {0} исключения: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>PowerShell не удается создать экземпляр адаптер типа {0} для этого типа из-за следующего исключения: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Тип адаптера "{0}" не является допустимым.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>Объект TypeConverter был проигнорирован, поскольку он уже присутствует.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>Объект TypeAdapter был проигнорирован, поскольку он уже присутствует.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>Типом "{0}" должен быть TypeConverter или PSTypeConverter.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>Тип "{0}" должен быть PSPropertyAdapter.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>Участник {0} уже присутствует.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Следующее имя участника зарезервировано: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Исключение: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>ScriptProperty должен иметь метод получения или метод задания.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>У свойства CodeProperty должен быть метод получения или метод задания.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>Вместо {0} значение должно быть ИСТИНА или ЛОЖЬ.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>Узел "{0}" не должен иметь атрибут "{1}".</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: файл не найден.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: файл пропущен, так как он уже загружен {2}.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Не удалось найти раздел реестра: {0}{1}. Используется {2} для загрузки конфигурационных файлов.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Не удается найти путь {0}, указанный в ключе реестра: {1}{2}. Используется {3} для загрузки конфигурационных файлов.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: файл пропущен, так как у него нет расширения ps1xml.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: файл пропущен из-за следующего исключения проверки: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>Элемент "{0}" должен быть заметкой.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>Не удается преобразовать "{0}" в "{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>Не используйте здесь элемент "{0}".</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>У элемента "{0}" должен быть тип "{1}".</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{0}" должно присутствовать, если "{1}" — "{2}", а "{3}" — "{4}".</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Предыдущая ошибка привела к игнорированию всех настроек сериализации.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" не является стандартным элементом и будет проигнорирован.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>Путь {0} не является полным. Укажите путь к файлу полного типа.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>Обновить таблицу типов невозможно, поскольку она могла быть создана вне пространства выполнения.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>При загрузке TypeTable произошли ошибки. Подробные сообщения об ошибках можно найти в свойстве Errors.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>Ошибка в TypeData "{0}": {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}" должно иметь значение для своего свойства "{1}".</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" не должен содержать нулевую или пустую строку в свойстве "{1}".</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Не удалось найти тип "{0}". Значение имени типа должно быть полным именем типа. Проверьте имя типа и запустите команду еще раз.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData должен содержать "Members", "TypeConverters", "TypeAdapters" или "StandardMembers".</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>В таблицу общего типа нельзя добавить более одной записи.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/VerbDescriptionStrings.ru.resx b/src/System.Management.Automation/resources/ru/VerbDescriptionStrings.ru.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/VerbDescriptionStrings.ru.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/ru/WildcardPatternStrings.ru.resx b/src/System.Management.Automation/resources/ru/WildcardPatternStrings.ru.resx
new file mode 100644
index 00000000000..408ddb8ba3e
--- /dev/null
+++ b/src/System.Management.Automation/resources/ru/WildcardPatternStrings.ru.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Указанный шаблон подстановочных знаков недопустим: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Authenticode.tr.resx b/src/System.Management.Automation/resources/tr/Authenticode.tr.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Authenticode.tr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/AuthorizationManagerBase.tr.resx b/src/System.Management.Automation/resources/tr/AuthorizationManagerBase.tr.resx
new file mode 100644
index 00000000000..f721f05b082
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/AuthorizationManagerBase.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>AuthorizationManager kontrolü başarısız oldu.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/AutomationExceptions.tr.resx b/src/System.Management.Automation/resources/tr/AutomationExceptions.tr.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/AutomationExceptions.tr.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CatalogStrings.tr.resx b/src/System.Management.Automation/resources/tr/CatalogStrings.tr.resx
new file mode 100644
index 00000000000..906382d3471
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CatalogStrings.tr.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>Katalog tanım dosyası oluşturulamıyor.</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>"{0}" dosyası kataloğa ekleniyor. Katalogdaki dosyanın göreli yolu: "{1}".</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>Katalogdaki {0} dosyası için doğrulama atlanıyor. </value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>Katalogda karması {1} olan {0} dosyası bulundu. </value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>Katalog yollarında aynı {0} göreli yoluna sahip birden fazla dosya var. </value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>Diskte karması {1} olan {0} dosyası bulundu.</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>Yoldaki {0} dosyası için doğrulama atlanıyor.</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>Belirtilen karma algoritması için katalog yöneticisi {0} bağlamına yönelik tanıtıcı alınamıyor.</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>{0} dosyası için karma oluşturulamıyor. </value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>{0} katalog dosyası açılamıyor.</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>Katalog sürümü geçerli değil. Yalnızca katalog sürüm {0} ve sürüm {1} desteklenir.</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>Katalog tanım dosyası açılamıyor.</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>Katalogda, {0} dosya üyesinin birden çok girdisi bulundu.</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>{0} katalog üyesi için dosya adı veya yol bulunamıyor.</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>Karma için {0} dosyası bulunamıyor.</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>Karma hesaplamak için {0} dosyası okunamıyor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CimInstanceTypeAdapterResources.tr.resx b/src/System.Management.Automation/resources/tr/CimInstanceTypeAdapterResources.tr.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CimInstanceTypeAdapterResources.tr.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CmdletizationCoreResources.tr.resx b/src/System.Management.Automation/resources/tr/CmdletizationCoreResources.tr.resx
new file mode 100644
index 00000000000..a33fc85e3a2
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CmdletizationCoreResources.tr.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>'{0}' sınıfındaki cmdlet'ler</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>Cmdlet Definition XML işlenemiyor: {0}. {1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>ObjectModelWrapper öznitelik işlenemiyor. {0} türü birden çok parametre kümesi tanımlar. Cmdlet Definition XML'sinin ObjectModelWrapper özniteliğinde geçerli bir tür belirttiğini doğrulayın ve yeniden deneyin.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>ObjectModelWrapper öznitelik işlenemiyor. {0}  türü açık bir genel türdür.  Cmdlet Definition XML'sinin ObjectModelWrapper özniteliğinde geçerli bir tür belirttiğini doğrulayın ve yeniden deneyin.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>ObjectModelWrapper özniteliği işlenemiyor. {0} türü aşağıdaki sınıftan türetilmemiş: {1}.  Cmdlet Definition XML’nin ObjectModelWrapper özniteliğinde geçerli bir tür belirttiğini doğrulayın ve yeniden deneyin.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>ObjectModelWrapper öznitelik işlenemiyor. {0}  türü, yok sayılan bir  {1}  özniteliği parametresiyle  {2}  cmdlet parametresini tanımlıyor.  Cmdlet Definition XML'sinin ObjectModelWrapper özniteliğinde geçerli bir tür belirttiğini doğrulayın ve yeniden deneyin.</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>{0} parametresi {1} cmdlet’i için tanımlanamaz.  Parametre adı zaten {2} sınıfı tarafından tanımlanmış.  Cmdlet Definition XML’de parametrenin adını değiştirin ve yeniden deneyin.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>{0} parametresi {1} cmdlet’i için tanımlanamaz. Parametre adı zaten {2} XML öğesi içinde tanımlanmış. Cmdlet Definition XML’de parametrenin adını değiştirin ve ardından yeniden deneyin.</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>EnumName özniteliğinin değeri geçerli bir C# tanımlayıCısına çevrilmiyor: {0}. Cmdlet Definition XML’deki EnumName özniteliğini doğrulayın ve ardından yeniden deneyin.</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>&lt;Enum EnumName="{0}" ...&gt; öğesi işlenemiyor.  {1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>Uzak bilgisayar geçersiz bir CDXML dosyası döndürdü. Aşağıdaki cmdlet bağdaştırıcısı, uzak bilgisayardan bir CDXML modülü içe aktarmak için desteklenmiyor: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CommandBaseStrings.tr.resx b/src/System.Management.Automation/resources/tr/CommandBaseStrings.tr.resx
new file mode 100644
index 00000000000..4e1b9966f8a
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CommandBaseStrings.tr.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>Bu işleme devam edilsin mi?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>&amp;Evet</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>İşlemin yalnızca bir sonraki adımıyla devam edin.</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>&amp;Tümüne Evet</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>İşlemin tüm adımlarıyla devam edin.</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>&amp;Hayır</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>Bu işlemi atlayın ve sonraki işleme devam edin.</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>Tümüne &amp;Hayır</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>Bu işlemi ve sonraki tüm işlemleri atlayın.</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>Bu komutu çalıştırın.</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>&amp;Durdurma Komutu</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>&amp;Askıya Al</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>Geçerli işlem hattını duraklatın ve komut istemine dönün. İşlem hattını sürdürmek için "{0}" yazın.</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>Program "{0}", sıfır olmayan çıkış koduyla sona erdi: {1} ({2}).</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>"{1}" hedefi üzerinde "{0}" işlemi gerçekleştiriliyor.</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What if: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>Bu işlemi gerçekleştirmek istediğinizden emin misiniz?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>Onayla</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>Çalışan komut, tercih değişkeni "{0}" veya ortak parametre Durdur: {1} olarak ayarlandığı için durduruldu.</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>Çalışan komut, tercih değişkeni "{0}" veya ortak parametre Durdur olarak ayarlandığı için durduruldu.</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>Çalışan komut, tercih değişkeni "{0}" veya ortak parametre geçerli olmayan şu değere ayarlandığı için durduruldu: "{1}".</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>Çalışan komut, kullanıcı Durdur seçeneğini belirlediği için durduruldu.</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>Çalışan komut, kullanıcı komutu kestiği için durduruldu.</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>PSCmdlet'ten türetilen cmdlet'ler doğrudan çağrılamaz.  </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Cmdlet '{0}', uzak oturumda '{1}' parametresini desteklemiyor.</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>Toplam sayı: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>Tahmini toplam sayı: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>Toplam sayı bilinmiyor</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>komut '{0}'</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>{0} eski. {1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>Exec çağrısı, şu komut satırı için {0} hata numarasıyla başarısız oldu: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>'{0}' komutu bulunamadı. Belirtilen komut yürütülebilir bir dosya olmalıdır.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>Betik Bloğu İşleme Dot-Source Denetimi</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Betik bloğu '{0}' için Dot-Source işleme, dil modu '{1}' geçerli dil modu '{2}' ile eşleşmediği için Kısıtlı Dil modunda başarısız olur.</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>Komut Arayıcı</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>'{1}' modülündeki '{0}' komutuna güvenilmiyor ve Kısıtlı Dil modunda erişilebilir olmayacak.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ConsoleInfoErrorStrings.tr.resx b/src/System.Management.Automation/resources/tr/ConsoleInfoErrorStrings.tr.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ConsoleInfoErrorStrings.tr.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CoreClrStubResources.tr.resx b/src/System.Management.Automation/resources/tr/CoreClrStubResources.tr.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CoreClrStubResources.tr.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CredUI.tr.resx b/src/System.Management.Automation/resources/tr/CredUI.tr.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CredUI.tr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Credential.tr.resx b/src/System.Management.Automation/resources/tr/Credential.tr.resx
new file mode 100644
index 00000000000..f30b28ff4b5
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Credential.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>Kimlik bilgisi seri hale getirilemiyor. Bu komut bir iş akışı başlatıyorsa, iş akışının başlatıldığı işlemin kimlik bilgilerini seri hale getirme izni olmadığından kimlik bilgileri kalıcı hale getirilemez.
+
+-- İş akışı yerel bilgisayara bir PSSession içinde başlatıldıysa EnableNetworkAccess parametresini oturumu oluşturan komuta ekleyin.
+-- İş akışı uzak bir bilgisayara bir PSSession içinde başlatıldıysa oturumu oluşturan komuta Authentication parametresini CredSSP değeriyle ekleyin. Alternatif olarak RunAsUser özellik değerine sahip bir oturum yapılandırmasına bağlanın.</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>UserName değeri doğru biçimde değil.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/CredentialAttributeStrings.tr.resx b/src/System.Management.Automation/resources/tr/CredentialAttributeStrings.tr.resx
new file mode 100644
index 00000000000..25b11f87af4
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/CredentialAttributeStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell credential request</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/DebuggerStrings.tr.resx b/src/System.Management.Automation/resources/tr/DebuggerStrings.tr.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/DebuggerStrings.tr.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/DescriptionsStrings.tr.resx b/src/System.Management.Automation/resources/tr/DescriptionsStrings.tr.resx
new file mode 100644
index 00000000000..3de18d3c34d
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/DescriptionsStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} null veya boş olamaz.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/DiscoveryExceptions.tr.resx b/src/System.Management.Automation/resources/tr/DiscoveryExceptions.tr.resx
new file mode 100644
index 00000000000..7fd87fb534a
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/DiscoveryExceptions.tr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>The cmdlet name "{0}" cannot be validated because it is not in the correct format. Cmdlet names must include a verb and a noun separated by a "-", such as "Get-Process".</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>The parameter "{0}" is declared in parameter-set "{1}" multiple times.</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>The alias "{0}" is declared multiple times.</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>Parameter could not be declared. Parameters can be declared only on fields and properties.</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>Cannot process the cmdlet. A cmdlet name must consist of a verb and noun pair separated by '-'.</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>The term '{0}' is not recognized as a name of a cmdlet, function, script file, or executable program.
+Check the spelling of the name, or if a path was included, verify that the path is correct and try again.</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>Argument '{0}' is not recognized as a cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>The argument '{0}' is not recognized as a cmdlet, possibly because it does not derive from the Cmdlet or PSCmdlet classes: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>Cannot resolve alias '{0}' because it refers to term '{1}', which is not recognized as a cmdlet, function, executable program, or script file. Verify the term and try again.</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>Parameter '{0}' with value '{1}' cannot be processed because it is not a cmdlet and cannot be processed by the CommandProcessor.</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>A cmdlet named '{0}' already exists. Cmdlets must have unique names.</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>A cmdlet provider named '{0}' already exists. Cmdlet providers must have unique names.</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>An assembly named '{0}' already exists. Assemblies must have unique names.</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>A script named '{0}' already exists. Scripts must have unique names.</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>Cannot process the #requires statement because it is not in the correct format.
+The #requires statement must be in one of the following formats:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell. To run this script you must use the shell located at '{2}'.</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement with a shell ID of {1} that is incompatible with the current shell.</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell {1}. The version of PowerShell that is required by the script does not match the currently running version of PowerShell {2}.</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contained a "#requires" statement for PowerShell editions '{1}'. The edition of PowerShell that is required by the script does not match the currently running PowerShell {2} edition.</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following snap-ins that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>A #requires statement has specified only a shellID. #Requires statements must specify a required PowerShell snap-in when running in PowerShell.</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>The script '{0}' cannot be run because it contains a "#requires" statement for running as Administrator. The current PowerShell session is not running as Administrator. Start PowerShell by using the Run as Administrator option, and then try running the script again.</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (Version {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>The command could not be retrieved because the ArgumentList parameter can be specified only when retrieving a single cmdlet or script.</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>The parameter name "{0}" is reserved for future use.</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>The script '{0}' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: {1}.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded. For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>The '{0}' command was found in the module '{1}', but the module could not be loaded due to the following error: [{2}]
+For more information, run 'Import-Module {1}'.</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>The module '{0}' could not be loaded. For more information, run 'Import-Module {0}'.</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>No matching commands include a parameter named '{0}'.  Check the spelling of the parameter name, and then try again.</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.' operator.</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>The ShowCommandInfo and Syntax parameters cannot be specified together.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned on.</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>This script command is disabled when the experimental feature '{0}' has been turned off.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/EnumExpressionEvaluatorStrings.tr.resx b/src/System.Management.Automation/resources/tr/EnumExpressionEvaluatorStrings.tr.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/EnumExpressionEvaluatorStrings.tr.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ErrorCategoryStrings.tr.resx b/src/System.Management.Automation/resources/tr/ErrorCategoryStrings.tr.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ErrorCategoryStrings.tr.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ErrorPackage.tr.resx b/src/System.Management.Automation/resources/tr/ErrorPackage.tr.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ErrorPackage.tr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/EtwLoggingStrings.tr.resx b/src/System.Management.Automation/resources/tr/EtwLoggingStrings.tr.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/EtwLoggingStrings.tr.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/EventResource.tr.resx b/src/System.Management.Automation/resources/tr/EventResource.tr.resx
new file mode 100644
index 00000000000..28c0cdda26f
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/EventResource.tr.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>PowerShell.Core.Instrumentation.man olay kimliği için bir ileti bulunamadı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>Zamanlanmış İş {0}, {1} tarihinde başlatıldı
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>Zamanlanmış İş {0}, {1} tarihinde {2} durumuyla tamamlandı
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>Zamanlanmış İş Özel Durumu {0}:
+ İleti: {1}
+ Yığın İzleme: {2}
+ İç Özel Durum: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>Deneysel Özellik Başlatma: Yapılandırma dosyasındaki deneysel Özellik '{0}' yoksay. {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>Deneysel Özellik Başlatma: Yapılandırma dosyası okunamadı.
+ Özel durum: {0}
+ İleti: {1}
+ Yığın İzleme: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>İş akışı eklentisi yüklendi.
+ 	 EndpointName: {0}
+ 	 Kullanıcı: {1}
+ 	 Barındırma modu: {2}
+ 	 Protokol: {3}
+ 	 Yapılandırma:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>İş akışı yürütmesi başlatıldı.
+ 	 WorkflowId: {0}
+ 	 YönetilenDüğümler: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>İş akışı durumu değişti.
+ 	 WorkflowId: {0}
+ 	 YeniDurum: {1}
+ 	 EskiDurum: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>İş akışı eklentisinin kapatılması istendi.
+ 	 Uç nokta adı: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>Workflow eklentisi yeniden başlatıldı.
+ 	 Uç nokta adı: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>İş akışı devam ediyor.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>Uç nokta için ayarlanan kota sınırı Aşıldı.
+ 	 EndpointName: {0}
+ 	 Yapılandırma Adı: {1}
+ 	 İzin Verilen Değer: {2}
+ 	 Söz Konusu Değer: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>İş akışı yeniden başlatıldı.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>İş akışı çalışma alanı havuzu oluşturuldu.
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>Etkinlik yürütme için sıraya alındı.
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>Etkinlik yürütmesi başladı.
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>İş akışı bir XAML dosyasından içe aktarılıyor.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>İş akışı bir XAML dosyasından içe aktarıldı.
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>XAML dosyasındaki bir hata nedeniyle iş akışı içe aktarılamadı.
+ 	 WorkflowId: {0}
+ 	 Hata Açıklaması: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>İş akışı doğrulaması başlatıldı.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>İş akışı doğrulaması başarılı oldu.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>İş akışı doğrulaması hatayla başarısız oldu.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>İş akışı etkinliği doğrulandı.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>İş akışı etkinliği doğrulanamadı.
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>Etkinlik yürütmesi başarısız oldu.
+ 	 WorkflowId: {0}
+ 	 EtkinlikAdı: {1}
+ 	 HataAçıklaması: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>Çalışma alanı kullanılabilirliği değişti.
+ 	 Çalışma alanı kimliği: {0}
+ 	 Kullanılabilirlik: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>Çalışma alanı durumu değişti.
+ 	 Çalışma alanı kimliği: {0}
+ 	 YeniDurum: {1}
+ 	 EskiDurum: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>Yürütme için iş akışı yüklendi.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>İş akışı yüklendi.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>İş akışı yürütmesi iptal edildi.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>İş akışı yürütmesi iptal edildi.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>İş akışı temizleme işlemi yürütüldü.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>Diskten kalıcılaştırılmış iş akışı yüklendi.
+ 	 WorkflowId: {0}
+ 	 Yol: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>İş akışı verileri diskten silindi.
+ 	 WorkflowId: {0}
+ 	 Yol: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>İş kaldırılıyor.
+ 	 İş Kimliği: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>İş durumu değişti.
+ 	 İş Kimliği: {0}
+ 	 WorkflowId: {1}
+ 	 YeniDurum: {2}
+ 	 EskiDurum: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>İş hatası.
+ 	 İş Kimliği: {0}
+ 	 WorkflowId: {1}
+ 	 Hata Açıklaması: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>İş akışı için alt iş oluşturuldu.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>İş akışı için üst iş oluşturuldu.
+ 	 İş Kimliği: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>İş akışı yürütmesi için gerekli tüm işler oluşturuldu.
+ 	 İş Kimliği: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>İş akışı için alt iş kaldırıldı.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>İş kaldırılırken bir hata oluştu.
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 Error: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>Yürütme için iş akışı yükleniyor.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>İş akışı yürütmesi tamamlandı.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>İş akışı yürütmesi iptal ediliyor.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>İş akışı yürütmesi sonlandırılıyor.
+ 	 WorkflowId: {0}
+ 	 Neden: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>İş akışı boşaltılıyor.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>Zorunlu iş akışı kapatması başlatıldı.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>Zorlanan iş akışı kapatma tamamlandı.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>Bir iş akışı zorla kapatılırken bir hata oluştu.
+ 	 WorkflowId: {0}
+ 	 Hata Açıklaması: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>İş akışı diske kaydediliyor.
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>İş akışı diske kaydedildi.
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>Etkinlik yürütmesi tamamlandı.
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>İş akışı yürütme hatası.
+ 	 WorkflowId: {0}
+ 	 Hata Açıklaması: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>Yeni bir PowerShell uç noktası kaydedildi.
+ 	 EndpointName: {0}
+ 	 Uç Nokta Türü: {1}
+ 	 Kayıt Yapan: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>Uç nokta yapılandırması değiştirildi.
+ 	 EndpointName: {0}
+ 	 Değiştiren: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>Uç nokta yapılandırması kaydı kaldırıldı.
+ 	 EndpointName: {0}
+ 	 Kaydı kaldıran: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>Uç nokta yapılandırması devre dışı.
+ 	 EndpointName: {0}
+ 	 Devre Dışı Bırakan: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>Uç nokta yapılandırması etkinleştirildi.
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>İşlem dışı çalışma alanı başlatıldı.
+ 	 Komut: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>İş akışı yürütmesi sırasında parametre dağıtımı yapıldı.
+ 	 Parametreler: {0}
+ 	 Bilgisayarlar: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>İş akışı altyapısı başlatıldı.
+ 	 Uç nokta adı: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>İş akışı yöneticisi ile örneklendi
+ 	 Denetim noktası yolu: {0}
+ 	 Yapılandırma sağlayıcı kimliği: {1}
+ 	 Kullanıcı adı: {2}
+ 	 Yol: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>Bilgisayar adı $null veya . LocalHost olarak çözümlensin</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>Varsayılan şemaya http olarak çözümleniyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>Uzak kabuk adı varsayılan PowerShellCore olarak çözümlendi</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>Scriptblock metni oluşturuluyor ({0} / {1}):
+{2}
+
+ScriptBlock kimliği: {3}
+Yol: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>ScriptBlock kimliği: {0} için başlatılan çağrı
+Çalışma alanı kimliği: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>Bitenler ScriptBlock kimliği: {0}
+Çalışma alanı kimliği: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+Bağlam:
+{0}
+
+Kullanıcı Verileri:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>Etkinlik kimliklerini ilişkilendiriliyor.
+ 	 Geçerli Etkinlik Kimliği: {0}
+ 	 Üst Etkinlik Kimliği: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>Sınıf Adı = {0}
+Metot Adı = {1}
+İş akışı GUID'si = {2}
+İleti = {3}
+{4}
+Etkinlik Adı = {5}
+Etkinlik GUID'si = {6}
+Parametreler = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>Çalışma Alanı nesnesi oluşturuluyor
+ 	 Örnek Kimliği: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>RunspacePool nesnesi oluşturuluyor
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>RunspacePool açılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Etkinlik kimliğini değiştiriyor ve ilişkilendiriyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>Çalışma alanı durumu {0} olarak değiştirildi</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>Hata kodu {1} için oturum kimliği {2} üzerinde oturum oluşturma yeniden deneniyor {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>Windows PowerShell, işlem: {0} AppDomain: {1} içinde bir IPC dinleme iş parçacığı başlattı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>Windows PowerShell, işlem: {0} üzerinde AppDomain: {1} içinde IPC dinleme iş parçacığını sonlandırdı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>İşlem: {0} içindeki AppDomain: {1} üzerinde PowerShell IPC dinleme iş parçacığında bir hata oluştu.  Hata İletisi: {2}.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>Windows PowerShell, işlem: {0} üzerinde AppDomain: {1} için Kullanıcı: {2} ile IPC bağlantısı kuruyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>Windows PowerShell, işlem {0} için AppDomain: {1} içindeki Kullanıcı: {2} üzerinde IPC bağlantısını kesiyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>Bağlantı noktası {0} olarak çözümlendi</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName {0} olarak çözümlendi</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>Bilgisayar adı {0} olarak çözüldü</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>Şema {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>Analitik test iletisi</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>Bağlantı parametreleri şunlardır
+ Bağlantı URI'si: {0}
+ Kaynak URI'si: {1}
+ Kullanıcı: {2}
+ Açılma zaman aşımı: {3}
+ Boşta kalma zaman aşımı: {4}
+ İptal zaman aşımı: {5}
+ Kimlik doğrulama mekanizması: {6}
+ Parmak izi: {7}
+ Maksimum URI yeniden yönlendirme sayısı: {8}
+ Maksimum alınan veri boyutu/komut: {0}0
+ Maksimum alınan nesne boyutu: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>Etkinlik kimliğini değiştiriyor ve ilişkilendiriyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>Çalışma Alanı kimliği: {0} Komut kimliği: {1} Hedef: {2} Veri türü: {3} Hedef arabirim: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Uygulamada işlenmeyen bir özel durum oluştu.
+Özel durum türü: {0}
+Özel durum İletisi: {1}
+Özel durum yığın izlemesi: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. WSMan hata koduyla bir hata bildirdi: {2}.
+ Hata iletisi: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>Uygulamada işlenmeyen bir özel durum oluştu.
+Özel durum türü: {0}
+Özel durum İletisi: {1}
+Özel durum yığın izlemesi: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. WSMan hata koduyla bir hata bildirdi: {2}.
+ Hata iletisi: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>Çalışma alanı kimliği {0}. WSMan Create Shell kullanılarak bir bağlantı kuruluyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği {0}. WSMan Create Shell için geri arama alındı</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0}. WSManCloseShell kullanılarak kabuk kapatılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0}. WSManCloseShell için geri arama alındı</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. Boyutu {2} olan veri gönderiliyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. WSManSendShellInputEx için geri arama alındı</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. WSManReceiveShellOutputEx kullanılarak alma isteği gönderiliyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. Boyutu {2} olan Veri alındı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>Çalışma alanı kimliği {0} İşlem Zinciri kimliği {1}. WSManRunShellCommandEx kullanılarak komut bağlantısı kuruluyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği {0} İşlem Zinciri kimliği {1}. Komut bağlantısı için geri arama alındı</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği {1}. Komut için taşıma kapatılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği {1}. Komut kapanması için geri arama getirildi</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği {1}. Kod {2} kullanılarak sinyal gönderiliyor WSManSignalShellEx</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği {1}. WSManSignalShellEx için geri arama alındı</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0}. Bağlantı şu Uri'ye yönlendiriliyor: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>Çalışma alanı kimliği: {0} İşlem Zinciri kimliği: {1}. Sunucu, {2} boyutunda veri gönderiyor istemciye. Veri türü: {3} Hedef arabirim: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>İstek {0}. Bir sunucu uzak oturumu oluşturuluyor. Kullanıcı adı: {1} Özel Kabuk kimliği: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>İstek için raporlama bağlamı: {0} bağlam bildirildi: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>İstek için raporlama işlemi tamamlandı: {0}
+ Hata kodu: {1}
+ Hata İletisi: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Kabuk Bağlamı {0}. İstek Kimliği {1}. Komut çalıştırmak için bir komut oturumu oluşturuluyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Kabuk Bağlamı {0} Komut Bağlamı {1} İstek Kimliği {2}. Komut durduruluyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Kabuk Bağlamı {0} Komut Bağlamı {1} İstek Kimliği {2}. İstemciden veri alındı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Kabuk Bağlamı {0} Komut Bağlamı {1} İstek Kimliği {2}. İstemci, sunucunun veri gönderebilmesi için bir alma isteği gönderdi.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Kabuk Bağlamı {0} Komut Bağlamı {1} IsReceiveOperation {2}. Kapatma işlemi isteği alındı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>Özel kabuk için {0} derlemesi, kabuk kimliği {1} ile yükleniyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>Özel kabuk için {0} derlemesi, kabuk kimliği {1} ile yükleniyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>Uzak ileti parçası alındı.
+ 	 Nesne kimliği: {0}
+ 	 Parça kimliği: {1}
+ 	 Başlangıç bayrağı: {2}
+ 	 Bitiş bayrağı: {3}
+ 	 Yük Süresi: {4}
+ 	 Yük Verisi: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>Uzak ileti parçası gönderildi.
+ 	 Nesne kimliği: {0}
+ 	 Parça kimliği: {1}
+ 	 Başlangıç bayrağı: {2}
+ 	 Bitiş bayrağı: {3}
+ 	 Yük Süresi: {4}
+ 	 Yük Verisi: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>winrm hizmeti kapatılıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>Bir nesne başarıyla yeniden canlandırıldı.
+ 	 Serileştirilmiş tür adı: {0}
+ 	 Tür olarak yeniden oluşturuldu: {1}
+ 	 Yeniden oluşturulan nesnenin türü: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>Bir nesne yeniden oluşturulamadı.
+ 	 Serileştirilmiş tür adı: {0}
+ 	 Tür olarak yeniden oluşturuldu: {1}
+ 	 Tür dönüştürme özel durumu: {2}
+ 	 Tür dönüştürme özel iç durum: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>Serileştirme derinliği geçersiz kılındı.
+ 	 Serileştirilmiş tür adı: {0}
+ 	 Orijinal derinlik: {1}
+ 	 Geçersiz kılınan derinlik: {2}
+ 	 Geçerli düzey üst düzeyin altında: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>Serileştirme modu geçersiz kılındı.
+ 	 Serileştirilmiş tür adı: {0}
+ 	 Geçersiz kılınan mod: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>Bir betik özelliğinin serileştirilmesi atlandı; çünkü özelliğin değerlendirilmesi için kullanılacak bir çalışma alanı yok.
+ 	 Özellik adı: {0}
+ 	 Özellik sahibinin tür adı: {1}
+ 	 Alıcı betik: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>Bir özelliğin serileştirilmesi atlandı, çünkü özellik alıcısı başarısız oldu.
+ 	 Özellik adı: {0}
+ 	 Özellik sahibinin tür adı: {1}
+ 	 Özellik alıcısından özel durum: {2}
+ 	 Özellik alıcısından gelen özel iç durum: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>Bir numaralandırılabilir nesnenin serileştirilmesi tamamlanmamış olabilir; çünkü numaralandırılan nesne bir özel durum oluşturdu.
+ 	 Numaralandırılan nesnenin türü: {0}
+ 	 Özel durum: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>Serileştirme, nesnenin ToString metodunu çağırdı ve bu başarısız oldu.
+ 	 Nesne türü: {0}
+ 	 Özel durum: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>Üst düzeyin altındaki maksimum derinliğe ulaşıldı, nesne dizeler olarak serileştirilmeye zorlanıyor.
+ 	 Maksimum derinlikteki nesne türü: {0}
+ 	 Maksimum derinlikteki özellik adı: {1}
+ 	 Derinlik: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>Seri durumdan çıkarıcı tarafından bir XmlException oluşturuldu (büyük olasılıkla yanlış clixml biçimi gösteriyor).
+ 	 Satır numarası: {0} satır konumu: {1}
+ 	 Özel durum: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>Belirtilen özelliklerin serileştirilmesi başarısız oldu, çünkü belirtilen özelliklerden biri eksikti.
+ 	 Nesne türü: {0}
+ 	 Özellik adı: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>Windows PowerShell konsolu başlatılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>Windows PowerShell konsolu kullanıcı girişi için hazır</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>İzleme Hatası Kaydı:
+ İleti: {0}
+ Kategori Bilgisi.Kategori: {1}
+ Kategori Bilgisi.Neden : {2}
+ Kategori Bilgisi.Hedef Adı : {3}
+ Tam Nitelikli Hata Kimliği: {4}
+ Özel durum Ayrıntıları:
+ İleti : {5}
+ Yığın İzleme: {6}
+ İç Özel Durum {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>Özel durum:
+ İleti: {0}
+ Yığın İzleme: {1}
+ İç Özel Durum : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>PSObject izleme</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>İzleme işi:
+ Kimlik: {0}
+ InstanceId: {1}
+ Ad: {2}
+ Konum: {3}
+ Durum: {4}
+ Komut: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>İzleme Bilgileri:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>İzleme Bilgileri:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>BEGIN ImportWorkflowCommand::StartWorkflowApplication. İş akışı işlevinin çağrılması başlatılıyor. İzleme Guid'si {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>END ImportWorkflowCommand::StartWorkflowApplication. İş akışı işlevinin çağrılması sonlandırılıyor. İzleme Guid'si {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>Yeni iş ImportWorkflowCommand::StartWorkflowApplication içinde oluşturuluyor. İzleme Guid'si {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>ImportWorkflowCommand::StartWorkflowApplication içinde yeni iş oluşturuluyor. İzleme Guid'si {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>ImportWorkflowCommand::StartWorkflowApplication içinde yeni iş oluşturuluyor. İzleme Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>BEGIN JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>Guid {0} ile BEGIN WorkflowExecution ContainerParentJob</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>BİTİŞ WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>Benzersiz Tanıtıcı {0} ile WorkflowJob, Benzersiz Tanıtıcı {1} ile ContainerParentJob’a eklendi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>Guid {0} olan ProxyJob, Guid {1} olan uzak ContainerParentJob ile ilişkilendirildi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>Guid {0} ile BEGIN ContainerParentJob Yürütmesi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>BİTİŞ ContainerParentJob Yürütmesi Guid {0} ile</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>Guid {0} ile Proxy İş Yürütmesi BEGIN</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>BİTİŞ Proxy İşinin yürütülmesi, Guid {0} ile</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>Guid {0} için Proxy İş için BEGIN StateChanged olay işleyicisi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>BİTİŞ Durum Değiştirme olay işleyicisi, Guid {0} için Ara Sunucu İş İşi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>Başlangıç Ara Sunucu Çocuk İş için Benzersiz Tanıtıcı {0} olan olay işleyicisi</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>Guid {0} ile Proxy Child Job için StateChanged olay işleyicisi sonlandırılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>Koşu atık toplama başlatılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>BİTİŞ atık toplama çalıştırılıyor</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>Kalıcılık deposu belirtilen en büyük boyutuna ulaştı</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE, betik dosyası {0} çalıştırmaya başladı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE, dosya {0} içindeki kullanıcı tarafından seçilen bir betiği çalıştırmaya başladı.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE geçerli komutu durduruyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE hata ayıklayıcısını sürdürüyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE hata ayıklayıcısını durduruyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE hata ayıklamaya giriyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE hata ayıklamanın üzerinden geçiyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE hata ayıklamadan çıkıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE tüm kesme noktalarını etkinleştiriyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE tüm kesme noktalarını devre dışı bırakıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE tüm kesme noktalarını kaldırıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE, {0} satırındaki {1} dosyasında kesme noktası ayarlıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE, {1} dosyasında {0} numaralı satırdaki kesme noktasını kaldırıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE, {0} satırındaki {1} dosyasında kesme noktası ayarlıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE, {1} dosyasının {0} numaralı satırındaki kesme noktasını devre dışı bırakıyor.</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE, {0} satırındaki {1} dosyasında bir kesme noktasına isabet etti.</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/EventingResources.tr.resx b/src/System.Management.Automation/resources/tr/EventingResources.tr.resx
new file mode 100644
index 00000000000..ded8d16c1b8
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/EventingResources.tr.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>Cannot register for the specified event. Events that require a return value are not supported.</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>Cannot register for the specified event. An event with the name '{0}' does not exist.</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell cannot subscribe to Windows RT events.</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>Cannot register for the specified event. The event source identifier '{0}' is reserved for the PowerShell engine.</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>This operation is not supported on remote instances.</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>The action is not supported when you are forwarding events.</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>Cannot subscribe to the specified event. A subscriber with the source identifier '{0}' already exists.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ExperimentalFeatureStrings.tr.resx b/src/System.Management.Automation/resources/tr/ExperimentalFeatureStrings.tr.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ExperimentalFeatureStrings.tr.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ExtendedTypeSystem.tr.resx b/src/System.Management.Automation/resources/tr/ExtendedTypeSystem.tr.resx
new file mode 100644
index 00000000000..cbe4feaf5d7
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ExtendedTypeSystem.tr.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>Özellik "{0}" bulunamadı.</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} geçerli bir yol değil.</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/FileSystemProviderStrings.tr.resx b/src/System.Management.Automation/resources/tr/FileSystemProviderStrings.tr.resx
new file mode 100644
index 00000000000..9ff8017bc99
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/FileSystemProviderStrings.tr.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>{0} dosyasını {1} klasörüne kopyalama</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>Başlangıç: {0} Bitiş: {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/FormatAndOutXmlLoadingStrings.tr.resx b/src/System.Management.Automation/resources/tr/FormatAndOutXmlLoadingStrings.tr.resx
new file mode 100644
index 00000000000..0f8b95053ac
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/FormatAndOutXmlLoadingStrings.tr.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The XML element {2} does not allow attributes.</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Node {2} cannot have child objects.</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is not valid.</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: There must be at least one default {2}.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: There cannot be more than one default {2}.</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The control name cannot be null or empty.</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Out Of Band views can only have CustomControl or ListControl.</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An Out Of Band view cannot have GroupBy.</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The view cannot be loaded.</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: "{2}" is not a valid alignment value.</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A positive integer is expected.</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The column header definition is not valid; all headers are discarded.</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The row item count = {2} on alternative set #{3} does not match default row item count = {4}.</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The header item count = {2} does not match default row item count = {3}.</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: At least one list view item must be specified.</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The property entry is not valid.</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The definition list is missing.</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A Boolean value is expected.</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A non-negative integer is expected.</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An integer is expected.</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The inner text value is missing.</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The custom control token list cannot be empty.</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} failed to load.</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} cannot be specified without an expression.</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} cannot be specified with an expression.</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A format string is missing.</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Script block text is missing.</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A property is missing.</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Script block "{2}" is not valid.</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The string {2} from resource {3} in assembly {4} is not found.</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The resource {2} in assembly {3} is not found.</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The assembly {2} is not found.</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The node must be an XmlElement.</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: An expression is expected.</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have control or Label without an expression.</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have control and Label at the same time.</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Cannot have SelectionSetName and TypeName at the same time.</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: No type or condition is specified for applying the view.</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: The {2} value is not valid.</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A duplicate node exists.</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} and {3} are mutually exclusive.</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2}, {3} and {4} are mutually exclusive.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an unknown node.</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an unknown attribute.</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is a missing attribute.</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: Node {2} is missing.</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: A node is missing from {2}.</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an empty node.</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>Error at XPath {0} in file {1}: {2} is an empty attribute.</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>Error in file {0}: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Too many errors in file {0}.</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>Errors occurred while loading the format data file: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(Global Assembly Cache) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}, {1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>The path {0} is not fully qualified. Specify a fully qualified format file path.</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>The FormatTable cannot be updated because the FormatTable might have been created outside of the runspace.</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>Errors occurred while loading the FormatTable. View the contents of the Errors property to get detailed error messages.</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>Error in formatting data "{0}": {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: The header item count = {2} does not match the default row item count = {3}.</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: Formatting data "{2}" is not valid.</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: Script block "{2}" is not valid.</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: {2} failed to load.</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: A TableControl should contain only one {2}.</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: There must be at least one default {2}.</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: At least one list view item must be specified.</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>Error in view data with type name {0} at index {1}: There cannot be more than one default {2}.</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>Too many errors in the formatting data for type "{0}".</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>A shared format table cannot be updated with more than one entry.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/FormatAndOut_MshParameter.tr.resx b/src/System.Management.Automation/resources/tr/FormatAndOut_MshParameter.tr.resx
new file mode 100644
index 00000000000..d15d161d792
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/FormatAndOut_MshParameter.tr.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>{0}, şu türlerden birine dönüştürülemiyor: {1}.</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>Bir parametrenin değeri null idi; şu türlerden biri bekleniyordu: {0}.</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>Yinelenen "{0}" anahtarı "{1}" ile çakışıyor.</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>"{0}" anahtarının türü {1} ve geçerli değil; beklenen türler: {2}.</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>"{0}" anahtarının türü {1} ve geçerli değil; beklenen tür: {2}.</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>{0} anahtarı belirsiz; {1} ve {2} çakışıyor.</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>Bir anahtarın değeri null olamaz.</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>{0} anahtarının türü geçerli değil. Anahtar bir dize olmalıdır.</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>{0} anahtarının değeri yok.</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>{0} için zorunlu bir girdi eksik.</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>{0} anahtarı geçerli değil.</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>"{1}" anahtarı için "{0}" değeri geçerli değil; geçerli değerler: {2}.</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>"{1}" anahtarı için "{0}" değeri 0'dan büyük olmalıdır.</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>"{0}" anahtarı için boş bir biçimlendirme dizesi olamaz.</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>"{0}" anahtarında boş bir dize değeri olamaz.</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>Burada boş dizeye izin verilmiyor.</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>"{0}" anahtarında "{1}" değerinde joker karakterler olamaz.</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>"{0}" için joker karakterlere izin verilmez.</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>EnumerableExpansion değeri geçerli değil.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/FormatAndOut_format_xxx.tr.resx b/src/System.Management.Automation/resources/tr/FormatAndOut_format_xxx.tr.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/FormatAndOut_format_xxx.tr.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/FormatAndOut_out_xxx.tr.resx b/src/System.Management.Automation/resources/tr/FormatAndOut_out_xxx.tr.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/FormatAndOut_out_xxx.tr.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/GetErrorText.tr.resx b/src/System.Management.Automation/resources/tr/GetErrorText.tr.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/GetErrorText.tr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/HelpDisplayStrings.tr.resx b/src/System.Management.Automation/resources/tr/HelpDisplayStrings.tr.resx
new file mode 100644
index 00000000000..1114a4c22e5
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/HelpDisplayStrings.tr.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>AD</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>Örnek</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>Yanıt</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>Yok</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/HelpErrors.tr.resx b/src/System.Management.Automation/resources/tr/HelpErrors.tr.resx
new file mode 100644
index 00000000000..cbc53b2112c
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/HelpErrors.tr.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help could not find {0} in a help file in this session. To download updated help topics type: "Update-Help". To get help online, search for the help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>Cannot process the Help category because "{0}" is not a valid Help category.</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>Cannot load the Help file "{0}". Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>Cannot access the Help file "{0}" because the current user does not have access rights to the file. Details: {1}.</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>The Help file "{0}" is not a valid xml document. Details: {1}.</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>An error occurred while loading Help content for {0} from file {1}. Details: {2}. To download updated Help topics, run the Update-Help cmdlet. To get help online, search for the Help topic in the TechNet library at https://go.microsoft.com/fwlink/?LinkID=107116.</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>The provider "{0}" cannot be loaded. Details: {1}.</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>Cannot load the Help file. The following {1} errors occurred while loading the Help file "{0}".</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>The node "{0}" cannot have "{1}" as a child node. Node Path: {2}.</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>The node "{0}" can have a maximum of {2} child nodes of type "{1}". Node Path: {3}.</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>Cannot find the registry key: "{0}{1}"; using "{2}" to load Help files.</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>No parameter matches criteria {0}.</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>{0} is not supported by the requested Help category.</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help topic is not specified in the command code or in the help file for the command.</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>The specified URI {0} is not valid.</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>Starting a browser to display online Help failed. No program or browser is associated to open the URI {0}.</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>The protocol specified in the Uri "{0}" is not supported. Only "{1}" and "{2}" protocols are supported.</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>Multiple Help topics were found. Use only one Help topic with the -{0} option.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>Cannot get Help from a remote runspace, because the runspace has not been opened.  Open the runspace by running an implicit remoting command, and then try running the command to get Help again.</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>Access is denied. The command could not update Help topics for the PowerShell core modules, or for any modules in the $pshome\Modules directory.
+To update these Help topics, start PowerShell by using the "Run as Administrator" command, and try running Update-Help again.</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>To use the {0}, make sure your application uses 'Microsoft.NET.Sdk.WindowsDesktop' as the project SDK and the corresponding assembly 'Microsoft.PowerShell.GraphicalHost' is available. ({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} does not work in a remote session.</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName cannot refer to the function itself.</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>Cannot get help from a network location when in a restricted session.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/HistoryStrings.tr.resx b/src/System.Management.Automation/resources/tr/HistoryStrings.tr.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/HistoryStrings.tr.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/HostInterfaceExceptionsStrings.tr.resx b/src/System.Management.Automation/resources/tr/HostInterfaceExceptionsStrings.tr.resx
new file mode 100644
index 00000000000..75f24f9f5ab
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/HostInterfaceExceptionsStrings.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>"{0}" türünde bir hata oluştu.</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>Kullanıcıdan giriş isteyen bir komut başarısız oldu çünkü ana bilgisayar programı ya da komut türü kullanıcı etkileşimini desteklemiyor. Windows PowerShell Konsolu gibi kullanıcı etkileşimini destekleyen bir ana bilgisayar programı deneyin ve kullanıcı etkileşimini desteklemeyen komut türlerinden istemle ilgili komutları kaldırın.</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>Kullanıcıdan giriş isteyen bir komut başarısız oldu çünkü ana bilgisayar programı ya da komut türü kullanıcı etkileşimini desteklemiyor. Ana bilgisayar, şu mesajla onay istemeye çalışıyordu: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>Havuz kapatıldığı veya başarısız olduğu için yöntem çağrılamıyor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/InternalCommandStrings.tr.resx b/src/System.Management.Automation/resources/tr/InternalCommandStrings.tr.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/InternalCommandStrings.tr.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/InternalHostStrings.tr.resx b/src/System.Management.Automation/resources/tr/InternalHostStrings.tr.resx
new file mode 100644
index 00000000000..8c140acf4de
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/InternalHostStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt, ExitNestedPrompt kadar çok kez çağrılmadı.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/InternalHostUserInterfaceStrings.tr.resx b/src/System.Management.Automation/resources/tr/InternalHostUserInterfaceStrings.tr.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/InternalHostUserInterfaceStrings.tr.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Logging.tr.resx b/src/System.Management.Automation/resources/tr/Logging.tr.resx
new file mode 100644
index 00000000000..1eaa075d942
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Logging.tr.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>BİLİNMİYOR</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>Yapılandırma dosyasında bildirilen altyapı deneysel '{0}' özelliği geçerli PowerShell'de kayıtlı değil.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>Yapılandırma dosyasında bildirilen deneysel '{0}' özelliği geçersizdir.
+Deneysel özelliğin adı şu kurala uymalıdır: 
+    Altyapı Özellik Adı: 'PS[FeatureName]'
+    Modül Özellik Adı: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Metadata.tr.resx b/src/System.Management.Automation/resources/tr/Metadata.tr.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Metadata.tr.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/MiniShellErrors.tr.resx b/src/System.Management.Automation/resources/tr/MiniShellErrors.tr.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/MiniShellErrors.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Modules.tr.resx b/src/System.Management.Automation/resources/tr/Modules.tr.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Modules.tr.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/MshHostRawUserInterfaceStrings.tr.resx b/src/System.Management.Automation/resources/tr/MshHostRawUserInterfaceStrings.tr.resx
new file mode 100644
index 00000000000..c0fc0d0d6d0
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/MshHostRawUserInterfaceStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" cannot be greater than or equal to "{1}".</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" needs to be a positive number.</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>All strings are null or empty.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/MshSignature.tr.resx b/src/System.Management.Automation/resources/tr/MshSignature.tr.resx
new file mode 100644
index 00000000000..158810e01c9
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/MshSignature.tr.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>İmza doğrulandı.</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>{0} dosyası dijital imzalı değil. Bu betiği geçerli sistemde çalıştıramazsınız. Betikleri çalıştırma ve yürütme ilkesi ayarları hakkında daha fazla bilgi için https://go.microsoft.com/fwlink/?LinkID=135170 adresindeki about_Execution_Policies bölümüne bakın</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>Dosyanın karması dijital imzada depolanan karma ile eşleşmediğinden, {0} dosyasının içeriği yetkisiz bir kullanıcı veya işlem tarafından değiştirilmiş olabilir. Betik belirtilen sistemde çalıştırılamıyor. Daha fazla bilgi için Get-Help about_Signing komutunu çalıştırın.</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>{0} dosyası imzalanmış ancak imzalayana bu sistemde güvenilmiyor.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>Sistem {0} dosyalarında imzalama işlemlerini desteklemediğinden dosya imzalanamıyor.</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>Sistem, dosya adı uzantısı olmayan dosyalarda imzalama işlemlerini desteklemediğinden dosya imzalanamıyor.</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>İmza, geçerli sistemle uyumsuz olduğundan doğrulanamıyor.</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>İmza, geçerli sistemle uyumsuz olduğundan doğrulanamıyor. Karma algoritması geçerli değil.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/MshSnapInCmdletResources.tr.resx b/src/System.Management.Automation/resources/tr/MshSnapInCmdletResources.tr.resx
new file mode 100644
index 00000000000..584577bec88
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/MshSnapInCmdletResources.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>İşlem gerçekleştirilemez. Belirtilen cmdlet, özel bir kabukta desteklenmiyor.</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>‘{0}' desenine uyan Windows PowerShell ek bileşeni bulunamadı. Deseni denetleyin ve ardından komutu yeniden deneyin.</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>Belirtilen ek bileşen adının biçimi geçerli değildi.  Windows PowerShell ek bileşen adları yalnızca alfasayısal karakterler, kısa çizgiler, alt çizgiler ve noktalar içerebilir. Adı düzeltip ardından işlemi yeniden deneyin.</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>Windows PowerShell ek bileşeni {0} bir sistem Windows PowerShell modülü olduğu için eklenemiyor. Modülü yüklemek için Import-Module kullanın.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/MshSnapinInfo.tr.resx b/src/System.Management.Automation/resources/tr/MshSnapinInfo.tr.resx
new file mode 100644
index 00000000000..50da02768ae
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/MshSnapinInfo.tr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>Windows PowerShell kayıt defteri bilgilerine erişilemiyor.</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>Windows PowerShell Altyapısı kayıt defteri bilgilerine erişilemiyor.</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>PublicKeyToken bilgilerine erişilemiyor.</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>Windows PowerShell {0} sürümü bu bilgisayarda kullanılabilir değil.</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>Windows PowerShell ek bileşeni "{0}" bu bilgisayarda yüklü değil.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>{1} kayıt defteri anahtarı için zorunlu değer {0} belirtilmedi.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>{0} zorunlu değeri kayıt defteri anahtarı {1} için doğru biçimde değil.  Beklenen biçim: "string."</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>{0} zorunlu değeri kayıt defteri anahtarı {1} için doğru biçimde değil.  Beklenen biçim "multistring."</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>Gerekli bilgiler kayıt defterinde bulunamıyor veya anahtar dosyaları eksik.  Bazı cmdlet'ler yüklenemiyor.</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>Windows PowerShell sürümü {0} için hiçbir ek bileşen kaydedilmedi.</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>Okuyucu kapatıldığından dize kaynağı alınamıyor.</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>Sürüm değeri {0} belirtilmemiş veya kayıt defteri anahtarı {1} için yanlış.</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>Windows PowerShell türü {0} için [PSVersion] özniteliği bulunamadı. [PSVersion(PowerShell SnapinBase.PSEngineVersion)] kullanarak türe bir PSVersion özniteliği ekleyin.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/NativeCP.tr.resx b/src/System.Management.Automation/resources/tr/NativeCP.tr.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/NativeCP.tr.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PSCommandStrings.tr.resx b/src/System.Management.Automation/resources/tr/PSCommandStrings.tr.resx
new file mode 100644
index 00000000000..ba680dd00a4
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PSCommandStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>A command is required to add a parameter. A command must be added to {0} before adding a parameter.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PSConfigurationStrings.tr.resx b/src/System.Management.Automation/resources/tr/PSConfigurationStrings.tr.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PSConfigurationStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PSDataBufferStrings.tr.resx b/src/System.Management.Automation/resources/tr/PSDataBufferStrings.tr.resx
new file mode 100644
index 00000000000..ad3991dec8d
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PSDataBufferStrings.tr.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Belirtilen dizin sıfırdan küçük ya da arabellekteki öğe sayısından büyük. Dizin {0}-{1} aralığında olmalıdır.</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>Null başvuru bir değer türüne dönüştürülemiyor.</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>Değer, {0} türünden {1} türüne dönüştürülemiyor.</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>Nesneler, kapalı bir arabelleğe eklenemez. Ekle ve Yerleştir işlemlerinin başarılı olması için arabelleğin açık olduğundan emin olun.</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>SerializeInput özelliği yalnızca PSDataCollection öğesinin PSObject türü için ayarlanabilir. SerializeInput özelliğini false olarak ayarlayın veya veri kümesi türünü PSObject olarak değiştirin.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PSListModifierStrings.tr.resx b/src/System.Management.Automation/resources/tr/PSListModifierStrings.tr.resx
new file mode 100644
index 00000000000..baed14ef6ad
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PSListModifierStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>Aşağıdaki bilinmeyen liste değiştiricisi algılandı: '{0}'. Geçerli liste değiştiricileri Ekle, Kaldır ve Değiştir.</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>Nesne, desteklenen bir koleksiyon türü olmadığı için güncelleştirme uygulanamıyor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PSStyleStrings.tr.resx b/src/System.Management.Automation/resources/tr/PSStyleStrings.tr.resx
new file mode 100644
index 00000000000..d01a81e8cb4
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PSStyleStrings.tr.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>Belirtilen dize, yalnızca ANSI kaçış dizileri içermesi gerekirken yazdırılabilir içerik içeriyor: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>Sürüyor işleme için MaxWidth, doğru şekilde işlemek için en az 18 olmalıdır.</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>Uzantılar eklenirken veya kaldırılırken, uzantı bir nokta ile başlamalıdır.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ParameterBinderStrings.tr.resx b/src/System.Management.Automation/resources/tr/ParameterBinderStrings.tr.resx
new file mode 100644
index 00000000000..52e7725a336
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ParameterBinderStrings.tr.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>'{1}' parametre adıyla eşleşen bir parametre bulunamadı.</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>'{1}' bağımsız değişkenini kabul eden bir konumsal parametre bulunamadı.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>'{1}' parametresi için bir bağımsız değişken eksik. '{2}' türünde bir parametre belirtin ve yeniden deneyin.</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>'{1}' parametre adı belirsiz olduğundan parametre işlenemiyor. Olası eşleşmeler şunlardır:{6}.</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>'{6}', '{1}' parametresinin gerektirdiği '{2}' türüne dönüştürülemiyor. {7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>'{1}' parametresi bağlanamıyor. {6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>'{1}' konumsal parametreleri bağlanamıyor.</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>Hiçbir ad verilmediğinden konum parametreleri bağlanamıyor.</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>Parametre kümesi belirtilen adlandırılmış parametreler kullanılarak çözümlenemiyor. Verilen bir veya birden fazla parametre birlikte kullanılamıyor ya da yetersiz sayıda parametre sağlandı.</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>Bir veya birden fazla zorunlu parametre eksik olduğundan komut işlenemiyor:{1}.</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>'{1}' parametresi '{6}' parametre kümesinde belirtilemez.</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>'{1}' parametresi birden çok kez belirtildiğinden parametre bağlanamıyor. Birden çok değer kabul edebilen parametrelere birden çok değer sağlamak için, dizi söz dizimini kullanın. Örneğin, "-parametre değeri1,değer2,değer3".</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>Bağımsız değişkeni bir betik bloğu olarak belirtildiğinden ve giriş olmadığından '{1}' parametresi değerlendirilemiyor. Giriş olmadan betik bloğu değerlendirilemez.</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>'{1}' parametresi için betik bloğu girişi başarısız oldu. {6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>Bağımsız değişken girişi hiçbir çıktı üretmediğinden '{1}' parametresi değerlendirilemiyor.</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>Komut işlem hattı girişi almadığından veya giriş ve özellikleri işlem hattı girişi alan parametrelerin hiçbiriyle eşleşmediğinden, giriş nesnesi komut için hiçbir parametreye bağlanamıyor.</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>Giriş nesnesi, tüm zorunlu parametreleri bağlamak için gereken bilgileri içermediğinden bağlanamıyor: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>'{1}' parametresinin varsayılan değeri alınamadığından işlem hattı girişi işlenemiyor. {6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>Cmdlet için dinamik parametreler alınamıyor. {6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>Şu parametreler için değer girin:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>{0} cmdlet'i komut işlem hattı {1} konumunda</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>'{1}' parametresinde bağımsız değişken dönüşümü işlenemiyor. {6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>'{1}' parametresinde bağımsız değişken doğrulanamıyor. {6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>'{1}' parametresi hedefe bağlanamıyor. {6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>'{1}' parametresi dolu olduğundan bağımsız değişken bağlanamıyor.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>Boş bir dize olduğundan bağımsız değişken '{1}' parametresine bağlanamıyor.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>Boş bir koleksiyon olduğundan bağımsız değişken '{1}' parametresine bağlanamıyor.</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>Boş bir dizi olduğundan bağımsız değişken '{1}' parametresine bağlanamıyor.</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>Komut işlenemiyor. '{0}' parametresi birden çok kez tanımlandı.</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>'{1}' parametresi '{2}' türünde olduğu ve Add() yöntemi belirlenemediği veya birden çok Add() yöntemi mevcut olduğu için {0} cmdlet'i bağlanamıyor. {6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>Çalışma zamanı tanımlı '{0}' parametresi RuntimeDefinedParameterDictionary'ye '{1}' anahtarıyla eklendiğinden {6} cmdlet'i bağlanamıyor. Anahtar RuntimeDefinedParameter.Name ile aynı olmalıdır.</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>Bağımsız değişkenin PSTypeNames değeri, '{6}' parametresinin gerektirdiği PSTypeName ile eşleşmediğinden bağımsız değişken '{1}' parametresine bağlanamıyor.</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>Şu ad veya diğer adla eşleşen parametre için $PSDefaultParameterValues içinde birden çok farklı varsayılan değer tanımlandı: {0}. Bu varsayılan değerler yoksayıldı.</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>Bu cmdlet için $PSDefaultParameterValues içinde tanımlanan şu ad veya diğer ad birden çok parametreye çözümleniyor: {0}. Varsayılan değer yoksayıldı.</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} Varsayılan parametre bağlamalarının uygulanması bu hataya neden olmuş olabilir. $PSDefaultParameterValues["Disabled"] değerini $true olarak ayarlayarak $PSDefaultParameterValues varsayılan parametre bağlamasını devre dışı bırakabilir ve sonra yeniden deneyebilirsiniz. Hata oluştuğunda bu cmdlet için şu varsayılan parametreler başarıyla bağlanmıştı:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} Varsayılan parametre bağlamasının uygulanması bu hataya neden olmuş olabilir. $PSDefaultParameterValues["Disabled"] değerini $true olarak ayarlayarak $PSDefaultParameterValues varsayılan parametre bağlamasını devre dışı bırakabilir ve yeniden deneyebilirsiniz. Hata oluştuğunda bu cmdlet için şu varsayılan parametre başarıyla bağlanmıştı:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>'{0}' varsayılan değeri '{1}' parametresine bağlanamadı: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>'{0}' anahtarının biçimi geçerli değil. Doğru biçim hakkında bilgi için https://go.microsoft.com/fwlink/?LinkId=228266 adresindeki about_Parameters_Default_Values bölümüne bakın.</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>'{0}' anahtarlarının biçimleri geçerli değil. Doğru biçim hakkında bilgi için https://go.microsoft.com/fwlink/?LinkId=228266 adresindeki about_Parameters_Default_Values bölümüne bakın.</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>'{0}' parametresi artık kullanılmıyor. {1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>'{1}' türündeki '{0}' anahtarı bir dize değeri değil. DefaultParameterDictionary yalnızca dize değeri olan anahtarları kabul eder.</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>'{0}' anahtarı zaten sözlüğe eklenmiş.</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>Yöntem veya Özellik Çağrısına İzin Verilmiyor</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>Güvenilmeyen betikler için Kısıtlı Dil modunda, '{1}' türündeki '{0}' Yöntemi veya Özelliğinin çağrılmasına izin verilmez.</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>Tür Oluşturmaya İzin Verilmiyor</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>Güvenilmeyen betikler için Kısıtlı Dil modunda parametre bağlama sırasında '{0}' türünün oluşturulmasına izin verilmez.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ParserStrings.tr.resx b/src/System.Management.Automation/resources/tr/ParserStrings.tr.resx
new file mode 100644
index 00000000000..e6d5c6a7777
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ParserStrings.tr.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>Derleme yüklenemiyor '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PathUtilsStrings.tr.resx b/src/System.Management.Automation/resources/tr/PathUtilsStrings.tr.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PathUtilsStrings.tr.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PipelineStrings.tr.resx b/src/System.Management.Automation/resources/tr/PipelineStrings.tr.resx
new file mode 100644
index 00000000000..5c6cadb0b25
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PipelineStrings.tr.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>Cannot process the cmdlet instance because the cmdlet instance is in use by another pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Cannot perform the operation because the pipeline is started. Stop the pipeline and try the operation again.</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Cannot continue to run the cmdlet because running cmdlets has been prevented by the Stop policy.</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>Cannot run the pipeline because the first cmdlet in the pipeline is trying to read input from the results of a preceding cmdlet. Either modify the first cmdlet, remove the first cmdlet, or add to the pipeline the cmdlet whose output is required by the first cmdlet, and then try running the pipeline again.</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>Cannot process the cmdlet number. The ReadFromCommand function must specify the Id of a cmdlet that has already been added to the pipeline. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>Cannot read the output of the ReadFromCommand and ReadErrorQueue functions because another cmdlet is already reading that output. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>Cannot run the pipeline because there are no commands. Add at least one command to the pipeline, and then run it again.</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>Cannot complete the pipeline operation because it has not yet been started. You must call the Begin() method before calling End() on a steppable pipeline.</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called from outside the overrides of the BeginProcessing, ProcessRecord, and EndProcessing methods, and they can only be called from within the same thread. Validate that the cmdlet makes these calls correctly, or contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>A cmdlet threw an exception after calling ThrowTerminatingError.
+The first exception was "{0}" with stack trace "{1}".
+The second exception was "{2}" with stack trace "{3}".</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>The WriteObject and WriteError methods cannot be called after the pipeline has been closed. Please contact Microsoft Customer Support Services.</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"; value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>An error occurred while creating the pipeline.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>This pipeline does not support disconnect-connect semantics.</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>Cannot connect this pipeline because it is not in the disconnected state.</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>The runspace object has a null remote command associated with it.  A disconnected RemotePipeline object cannot be created because there is no remote command specified.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/PowerShellStrings.tr.resx b/src/System.Management.Automation/resources/tr/PowerShellStrings.tr.resx
new file mode 100644
index 00000000000..d075cb0ef20
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/PowerShellStrings.tr.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>Geçerli PowerShell örneğinin durumu bu işlem için geçerli değil.</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>Bir komut zaten başlatıldığı için işlem gerçekleştirilemiyor. Komutun tamamlanmasını bekleyin veya komutu durdurun ve ardından işlemi yeniden deneyin.</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>Komut belirtilmedi.</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>PowerShell örneği, iç içe geçmiş PowerShell örneği oluşturmak için doğru durumda değil. İç içe geçmiş PowerShell örnekleri yalnızca çalışan bir PowerShell örneğinde oluşturulmalıdır.</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>Çalışma alanı '{0}' durumunda olmadığından işlem gerçekleştirilemiyor. Çalışma alanının geçerli durumu '{1}'.</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>İç içe geçmiş PowerShell örnekleri zaman uyumsuz olarak çağrılamaz. Invoke yöntemini kullanın.</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} nesnesi, bu PowerShell örneğinde {1} çağrılarak oluşturulmadı.</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>Çalışma alanı bir iş parçacığını yeniden kullanacak şekilde ayarlandığında, çağırma ayarlarındaki bölme durumu çalışma alanıyla eşleşmelidir.</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>Çalışma alanı geçerli iş parçacığını kullanacak şekilde ayarlandığında, çağırma ayarlarındaki bölme durumu geçerli iş parçacığın durumuyla eşleşmelidir.</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>Parametre eklemek için bir komut gereklidir. Parametre eklemeden önce PowerShell örneğine bir komut eklenmelidir.</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>Sözlükteki anahtarlar dize olmalıdır.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>Bu iş parçacığında komutları çalıştırmak için kullanılabilir Çalışma Alanı yok. System.Management.Automation.Runspaces.Runspace türünün DefaultRunspace özelliğinde bir tane sağlayabilirsiniz. Çağırmaya çalıştığınız komut: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Bu PowerShell nesnesi, uzak çalışma alanı veya çalışma alanı havuzuyla ilişkili olmadığından bağlanamıyor.</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>Çalışan komutun bağlantısı kesildi ancak uzak sunucuda hala çalışıyor.  Komutun işlem durumunu ve çıkış verilerini almak için yeniden bağlanın.</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>Geçerli PowerShell oturumu Bağlantısı Kesik durumunda olduğundan işlem gerçekleştirilemiyor.  Bu PowerShell oturumunu bağlayın, ardından komutun tamamlanmasını bekleyin veya komutu durdurun.</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>Geçerli PowerShell oturumu Bağlantısı Kesik durumunda olduğundan işlem gerçekleştirilemiyor.  Bu PowerShell oturumunu bağlayın, ardından yeniden deneyin.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Uzak komuta bağlanma denemesi başarısız oldu.</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>Bir komut şu anda durdurulduğu için işlem gerçekleştirilemiyor. Komutun durdurma işlemini tamamlamasını bekleyin, ardından işlemi yeniden deneyin.</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>Bu iş parçacığında komutları çalıştırmak için kullanılabilir Çalışma Alanı yok. System.Management.Automation.Runspaces.Runspace türünün DefaultRunspace özelliğinde bir tane sağlayabilirsiniz. Geçerli PowerShell örneğinde çağrılacak komut yok.</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>Kullanılabilir bir geçerli çalışma alanı olmadığından, geçerli çalışma alanını kullanan bir PowerShell nesnesi oluşturulamıyor.  Geçerli çalışma alanı, bir İlk Oturum Durumu ile oluşturulduğunda olduğu gibi başlatılıyor olabilir.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ProgressRecordStrings.tr.resx b/src/System.Management.Automation/resources/tr/ProgressRecordStrings.tr.resx
new file mode 100644
index 00000000000..9ab52d8868b
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ProgressRecordStrings.tr.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>Cannot process the argument because {0} cannot be a negative value.</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>Cannot process the argument because the value of {0} cannot be null or empty.</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>Cannot set percent because {0} cannot be greater than 100.</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId cannot be the same as the ActivityId.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ProviderBaseSecurity.tr.resx b/src/System.Management.Automation/resources/tr/ProviderBaseSecurity.tr.resx
new file mode 100644
index 00000000000..7af366a8156
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ProviderBaseSecurity.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use the interface because the ISecurityDescriptorCmdletProvider interface is not supported by this provider.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/ProxyCommandStrings.tr.resx b/src/System.Management.Automation/resources/tr/ProxyCommandStrings.tr.resx
new file mode 100644
index 00000000000..5050b1373bb
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/ProxyCommandStrings.tr.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>'help' parametresi, 'get-help' komutunun oluşturduğu geçerli bir HelpInfo nesnesi olarak tanınmıyor.</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>CommandMetadata'nın adı olmadığı içi ara sunucu komutu oluşturulamıyor.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/RegistryProviderStrings.tr.resx b/src/System.Management.Automation/resources/tr/RegistryProviderStrings.tr.resx
new file mode 100644
index 00000000000..64d8ad9a448
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/RegistryProviderStrings.tr.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Öğeyi Ayarla</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Değer: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Öğeyi Temizle</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>Yeni Öğe</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>Anahtarı Kaldır</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>Anahtarı Kopyala</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Hedef: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Öğeyi Yeniden Adlandır</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>Öğeyi Taşı</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Hedef: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>Özelliği Ayarla</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Özellik: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>Özelliği Temizle</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Özellik: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>Yeni Özellik</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Özellik: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>Özelliği Kaldır</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} Özellik: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>Özelliği yeniden adlandırın.</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>Özelliği Kopyala</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>Özelliği Taşı</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Öğe: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>İşlem işlenmedi. Sağlanan konum bu işleme izin vermiyor.</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>İşleme kaynak konumda izin verilmiyor.</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>İşleme hedef konumda izin verilmiyor.</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>Yerel bilgisayarın yapılandırma ayarları</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>Geçerli kullanıcı için yazılım ayarları</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>Bu yolda zaten bir anahtar var.</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>Hedef yol kaynak yola bağlı olduğundan işlem gerçekleştirilemiyor.</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>Özellik zaten var.</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>{0} özelliği {1} yolunda yok.</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>Belirtilen yoldaki kayıt defteri anahtarı yok.</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>'Type' parametresi bağlanamadı. "{0}", "{1}" öğesine dönüştürülemedi. Olası sabit listesi değerleri şunlardır: "String, ExpandString, Binary, DWord, MultiString, QWord, Unknown".</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>Anahtar {0} oluşturuldu ancak varsayılan değer ayarlanamadı.</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>Belirtilen köke sahip bir sürücü oluşturulamıyor. Kök yol yok.</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>Aynı kapsayıcıda bu adla bir öğe zaten bulunduğundan öğe yeniden adlandırılamıyor.</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>Kayıt defteri anahtarı adı geçerli bir temel anahtar adıyla başlamalıdır.</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>Alt anahtar bağımsız değişkeni geçerli değil.</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>Alt anahtar mevcut olmadığından alt anahtar ağacı silinemiyor.</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>Bu ada sahip bir değer yok.</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>{0} sabit listesi değeri geçerli değil.</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>Bir bağımsız değişken belirtilmelidir.</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>Bir ad bağımsız değişkeni belirtilmelidir.</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>Belirtilen RegistryValueKind geçerli bir değer değil.</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue, null dize başvurusu içeren bir String[] öğesine izin vermez.</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>Kayıt defteri alt anahtarları 255 karakterden büyük olmamalıdır.</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>Boş olmayan bir alt anahtar adı belirtilmelidir.</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>Değer nesnesinin türü, belirtilen RegistryValueKind ile eşleşmedi veya nesne düzgün dönüştürülemedi.</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue, '{0}' türündeki dizileri desteklemez. Yalnızca Byte[] ve String[] desteklenir.</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>Belirtilen kayıt defteri anahtarı yok.</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>Belirtilen değer adı uzunluğu 16383 karakterlik üst sınırı aşıyor.</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>Belirtilen değer verilerinin boyutu 1 MB'lık üst sınırı aşıyor.</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>Belirtilen kayıt defteri alt anahtarı yok.</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>Belirtilen RegistryKeyPermissionCheck değeri geçerli değil.</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>Kayıt defteri anahtarının alt anahtarları var; bu yöntem özyinelemeli silmeyi desteklemez.</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>Transaction.Current veya belirtilen işlem olmadan KTM tanıtıcısı oluşturulamaz.</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>Belirtilen işlem veya Transaction.Current, bu TransactedRegistryKey'i oluşturmak veya açmak için kullanılan işle eşleşmelidir.</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>TransactedRegistryKey nesnesi önceden tanımlanmış bir anahtar olduğu için bir işlemle ilişkilendirilmiyor.</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>İstenen kayıt defteri erişimine izin verilmiyor.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>'{0}' kayıt defteri anahtarına erişim reddedildi.</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>Kayıt defteri anahtarına yazılamıyor.</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>Kapalı bir kayıt defteri anahtarına erişilemiyor.</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>Bilinmeyen hata: {0}.</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>Kayıt defteri işlemleri bu platformda desteklenmiyor.</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>Belirtilen tanıtıcı geçerli değil.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/RemotingErrorIdStrings.tr.resx b/src/System.Management.Automation/resources/tr/RemotingErrorIdStrings.tr.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/RemotingErrorIdStrings.tr.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/RunspaceInit.tr.resx b/src/System.Management.Automation/resources/tr/RunspaceInit.tr.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/RunspaceInit.tr.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/RunspacePoolStrings.tr.resx b/src/System.Management.Automation/resources/tr/RunspacePoolStrings.tr.resx
new file mode 100644
index 00000000000..2f5b1a868f8
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/RunspacePoolStrings.tr.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>Maksimum havuz boyutu 1'den küçük olamaz.</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>Minimum havuz boyutu 1'den küçük olamaz.</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>Minimum havuz boyutu maksimum havuz boyutundan büyük olamaz.</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>Çalışma alanı havuzunun durumu bu işlem için geçerli değil.</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>Çalışma alanı havuzu "{0}" durumunda olmadığından işlem gerçekleştirilemiyor. Geçerli durum: "{1}".</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Çalışma alanı havuzu "BeforeOpen" durumunda olmadığından açılamıyor. Geçerli durum: "{0}".</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} nesnesi, geçerli RunspacePool örneğinde {1} çağrılarak oluşturulmadı.</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>Çalışma alanı geçerli havuza ait olmadığından, çalışma alanı geçerli havuza bırakılamıyor.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>Bu özellik, çalışma alanı havuzu açıldıktan sonra değiştirilemez.</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>Bu çalışma alanı bağlantı kesme ve bağlanma işlemlerini desteklemiyor.</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>Çalışma alanı havuzu Bağlantı Kesildi durumunda olduğundan işlem gerçekleştirilemiyor.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>Bağlantıyı Kesme işlemi sunucuda desteklenmiyor.  Uzak çalışma alanı havuzu bağlantı kesme desteği için sunucuda Windows PowerShell 3.0 veya daha yeni bir sürüm çalışıyor olmalıdır.</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>Bu {0} çalışma alanı havuzu, uzak sunucuda çalışan komutlar için bağlantısı kesilmiş Windows PowerShell nesneleri sağlamak üzere yapılandırılmadı.  Sunucuyu sorgulamak ve bu işlem için yapılandırılmış çalışma alanı havuzu nesnelerini döndürmek üzere RunspacePool sınıfının GetRunspacePools() statik yöntemini kullanın.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Karşılık gelen sunucu tarafı çalışma alanı havuzu başka bir istemciye bağlı olduğundan bu çalışma alanı havuzu bağlanamıyor.</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>ResetRunspaceState sunucuda desteklenmiyor.  Sunucuda Windows PowerShell 5.0 veya daha yeni bir sürüm çalışıyor olmalıdır.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/RunspaceStrings.tr.resx b/src/System.Management.Automation/resources/tr/RunspaceStrings.tr.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/RunspaceStrings.tr.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/SecuritySupportStrings.tr.resx b/src/System.Management.Automation/resources/tr/SecuritySupportStrings.tr.resx
new file mode 100644
index 00000000000..22ac9e48b7e
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/SecuritySupportStrings.tr.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>Sertifika yüklenemiyor. '{0}' bir dosya sistemi yoluna çözümlenmelidir.</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>'{0}' sertifikası şifreleme için kullanılamaz. Şifreleme sertifikaları, Veri Şifreleme veya Anahtar Şifreleme anahtar kullanımını ve Belge Şifreleme Gelişmiş Anahtar Kullanımı ({1}) değerini içermelidir.</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>Sertifika yüklenemiyor. '{0}' tanımlayıcısı birden çok sertifikayla eşleşiyor. Birden çok alıcıya şifrelemek için, birden çok sertifikayla eşleşen bir joker karakter yerine '{1}' parametresine birden çok belirli değer sağlayın.</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>Şifreleme sertifikası yüklenemiyor. '{0}' sertifika ayarı, base-64 ile kodlanmış geçerli bir sertifikayı temsil etmiyor ve dosya, dizin, parmak izi veya konu adına göre geçerli bir sertifikayı temsil etmiyor.</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>UYARI: '{0}' sertifikası özel anahtar içeriyor. Şifreleme için kullanılan Korumalı Olay Günlüğü sertifikaları yalnızca ortak anahtarı içermelidir.</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>HATA: Olay günlüğü iletisi '{0}' korunamadı: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>HATA: Sertifika bulunamadı veya kullanılamadı: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>Güvenli dizeyi şifrelemek için oturum anahtarı kullanılamıyor.</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>Geçersiz arabellek uzaklığı.</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>Ortak anahtar verileri geçersiz.</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>Ortak anahtar içeri aktarılamıyor.</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>Oturum anahtarı verileri geçersiz.</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>'{0}' betik dosyasının çalıştırılması sistem ilkesi tarafından engellendi.</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>Bilinmeyen bir betik dosyası ilke zorlaması değeri döndürüldü: {0}.</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>Betik Dosyası Okundu</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>'{0}' betik dosyasına ilke tarafından güvenilmiyor ve ConstrainedLanguage modunda çalışacak.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/Serialization.tr.resx b/src/System.Management.Automation/resources/tr/Serialization.tr.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/Serialization.tr.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/SessionStateProviderBaseStrings.tr.resx b/src/System.Management.Automation/resources/tr/SessionStateProviderBaseStrings.tr.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/SessionStateProviderBaseStrings.tr.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/SessionStateStrings.tr.resx b/src/System.Management.Automation/resources/tr/SessionStateStrings.tr.resx
new file mode 100644
index 00000000000..67360500c67
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/SessionStateStrings.tr.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>Cannot find path '{0}' because it does not exist.</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/StringDecoratedStrings.tr.resx b/src/System.Management.Automation/resources/tr/StringDecoratedStrings.tr.resx
new file mode 100644
index 00000000000..345be9b927d
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/StringDecoratedStrings.tr.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>Bu yöntem için yalnızca 'ANSI' veya 'PlainText' desteklenir.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/SubsystemStrings.tr.resx b/src/System.Management.Automation/resources/tr/SubsystemStrings.tr.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/SubsystemStrings.tr.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/SuggestionStrings.tr.resx b/src/System.Management.Automation/resources/tr/SuggestionStrings.tr.resx
new file mode 100644
index 00000000000..f2300e9af09
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/SuggestionStrings.tr.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>"{0}" komutu bulunamadı ancak geçerli konumda var.
+PowerShell, varsayılan olarak geçerli konumdan komutları yüklemez (bkz. 'Get-Help about_Command_Precedence').
+
+Bu komuta güveniyorsanız, bunun yerine aşağıdaki komutu çalıştırın:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>En benzer komutlar şunlardır:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/TabCompletionStrings.tr.resx b/src/System.Management.Automation/resources/tr/TabCompletionStrings.tr.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/TabCompletionStrings.tr.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/TransactionStrings.tr.resx b/src/System.Management.Automation/resources/tr/TransactionStrings.tr.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/TransactionStrings.tr.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NoTransactionActive" xml:space="preserve">
+    <value>Cannot use transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. No transaction is active.</value>
+  </data>
+  <data name="NoTransactionActiveForRollback" xml:space="preserve">
+    <value>Cannot roll back the transaction, because there is no active transaction.</value>
+  </data>
+  <data name="CommittedTransactionForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="CommittedTransactionForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has already been committed.</value>
+  </data>
+  <data name="TransactionRolledBackForCommit" xml:space="preserve">
+    <value>Cannot commit transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionRolledBackForRollback" xml:space="preserve">
+    <value>Cannot roll back transaction. The transaction has already been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionForActivation" xml:space="preserve">
+    <value>Cannot set active transaction. No transaction has been created.</value>
+  </data>
+  <data name="NoTransactionForActivationBecauseRollback" xml:space="preserve">
+    <value>Cannot set active transaction. The active transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="NoTransactionAvailable" xml:space="preserve">
+    <value>This cmdlet requires an active transaction. The current transaction has already been committed or rolled back.</value>
+  </data>
+  <data name="CmdletRequiresUseTx" xml:space="preserve">
+    <value>This cmdlet requires a transaction. Run the command again with the -UseTransaction parameter.</value>
+  </data>
+  <data name="NoTransactionStarted" xml:space="preserve">
+    <value>Cannot use transaction. No transaction has been started.</value>
+  </data>
+  <data name="NoTransactionStartedFromCommit" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been committed.</value>
+  </data>
+  <data name="NoTransactionStartedFromRollback" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has been rolled back or has timed out.</value>
+  </data>
+  <data name="TransactionTimedOut" xml:space="preserve">
+    <value>Cannot use transaction. The transaction has timed out.</value>
+  </data>
+  <data name="BaseTransactionNotSet" xml:space="preserve">
+    <value>The base transaction has not been set.</value>
+  </data>
+  <data name="BaseTransactionNotActive" xml:space="preserve">
+    <value>The base transaction is not active.</value>
+  </data>
+  <data name="BaseTransactionMustBeFirst" xml:space="preserve">
+    <value>The base transaction cannot be set after other transactions have been created.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/TypesXmlStrings.tr.resx b/src/System.Management.Automation/resources/tr/TypesXmlStrings.tr.resx
new file mode 100644
index 00000000000..1bebd946f88
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/TypesXmlStrings.tr.resx
@@ -0,0 +1,255 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="FileLineError" xml:space="preserve">
+    <value>{0}, {1}({2}) : Hata: {3}</value>
+  </data>
+  <data name="FileLineTypeError" xml:space="preserve">
+    <value>{0}, {1}({2}) : "{3}" türünde hata: {4}</value>
+  </data>
+  <data name="NotMoreThanOnceOne" xml:space="preserve">
+    <value>"{0}" düğümü, "{1}" altında yalnızca bir kez bulunmalıdır. "{1}" üst düğümü yoksayılacak.</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>{0} düğümüne izin verilmiyor. Şu düğümlere izin veriliyor: {1}.</value>
+  </data>
+  <data name="NodeShouldNotHaveInnerText" xml:space="preserve">
+    <value>"{0}" düğümünün bir iç metni olmamalıdır.</value>
+  </data>
+  <data name="NodeShouldHaveInnerText" xml:space="preserve">
+    <value>"{0}" düğümünün bir iç metni olmalıdır.</value>
+  </data>
+  <data name="NodeNotFoundOnce" xml:space="preserve">
+    <value>"{0}" düğümü bulunamadı. "{1}" altında yalnızca bir kez bulunmalıdır. "{1}" üst düğümü yoksayılacak.</value>
+  </data>
+  <data name="TypeNodeShouldHaveMembersOrTypeConverters" xml:space="preserve">
+    <value>"Type" düğümünde "Members", "TypeConverters" veya "TypeAdapters" olmalıdır.</value>
+  </data>
+  <data name="UnableToInstantiateTypeConverter" xml:space="preserve">
+    <value>Şu özel durumu nedeniyle {0} türü için tür dönüştürücüsünün örneği oluşturulamıyor: {1}.</value>
+  </data>
+  <data name="UnableToInstantiateTypeAdapter" xml:space="preserve">
+    <value>Windows PowerShell, şu özel durum nedeniyle {0} türü için tür bağdaştırıcısının bir örneğini oluşturamıyor: {1}.</value>
+  </data>
+  <data name="InvalidAdaptedType" xml:space="preserve">
+    <value>Uyarlanan tür "{0}" geçerli değil.</value>
+  </data>
+  <data name="TypeConverterAlreadyPresent" xml:space="preserve">
+    <value>TypeConverter zaten bulunduğu için yoksayıldı.</value>
+  </data>
+  <data name="TypeAdapterAlreadyPresent" xml:space="preserve">
+    <value>TypeAdapter zaten bulunduğu için yoksayıldı.</value>
+  </data>
+  <data name="TypeIsNotTypeConverter" xml:space="preserve">
+    <value>"{0}" türü, TypeConverter ya da PSTypeConverter olmalıdır.</value>
+  </data>
+  <data name="TypeIsNotTypeAdapter" xml:space="preserve">
+    <value>"{0}" türü bir PSPropertyAdapter olmalıdır.</value>
+  </data>
+  <data name="DuplicateMember" xml:space="preserve">
+    <value>{0} üyesi zaten var.</value>
+  </data>
+  <data name="ReservedNameMember" xml:space="preserve">
+    <value>Şu üye adı ayrılmış: {0}</value>
+  </data>
+  <data name="Exception" xml:space="preserve">
+    <value>Özel durum: {0}</value>
+  </data>
+  <data name="ScriptPropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty bir alıcıya veya ayarlayıcıya sahip olmalıdır.</value>
+  </data>
+  <data name="CodePropertyShouldHaveGetterOrSetter" xml:space="preserve">
+    <value>CodeProperty bir alıcıya veya ayarlayıcıya sahip olmalıdır.</value>
+  </data>
+  <data name="FileError" xml:space="preserve">
+    <value>{0}, {1} : {2}</value>
+  </data>
+  <data name="ValueShouldBeTrueOrFalse" xml:space="preserve">
+    <value>Değer, {0} yerine TRUE ya da FALSE olmalıdır.</value>
+  </data>
+  <data name="IsHiddenNotSupported" xml:space="preserve">
+    <value>"{0}" düğümü "{1}" özniteliğine sahip olmamalıdır.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>{0}, {1}: Dosya bulunamadı.</value>
+  </data>
+  <data name="DuplicateFile" xml:space="preserve">
+    <value>{0}, {1}: Dosya zaten {2} tarafından yüklendiği için atlandı.</value>
+  </data>
+  <data name="CannotFindRegistryKey" xml:space="preserve">
+    <value>Kayıt defteri anahtarı bulunamadı: {0}{1}. Yapılandırma dosyalarını yüklemek için {2} kullanılıyor.</value>
+  </data>
+  <data name="CannotFindRegistryKeyPath" xml:space="preserve">
+    <value>Kayıt defteri anahtarında belirtilen {0} yolu bulunamıyor: {1}{2}. Yapılandırma dosyalarını yüklemek için {3} kullanılıyor.</value>
+  </data>
+  <data name="EntryShouldBeMshXml" xml:space="preserve">
+    <value>{0}, {1}: Dosya, ps1xml dosya adı uzantısına sahip olmadığından atlandı.</value>
+  </data>
+  <data name="ValidationException" xml:space="preserve">
+    <value>{0}, {1}: Dosya şu doğrulama özel durumu nedeniyle atlandı: {2}.</value>
+  </data>
+  <data name="MemberShouldBeNote" xml:space="preserve">
+    <value>"{0}" üyesi bir not olmalıdır.</value>
+  </data>
+  <data name="ErrorConvertingNote" xml:space="preserve">
+    <value>"{0}" notu dönüştürülemiyor: "{1}".</value>
+  </data>
+  <data name="MemberShouldNotBePresent" xml:space="preserve">
+    <value>"{0}" üyesini burada kullanmayın.</value>
+  </data>
+  <data name="MemberShouldHaveType" xml:space="preserve">
+    <value>"{0}" üyesi "{1}" türünde olmalıdır.</value>
+  </data>
+  <data name="MemberMustBePresent" xml:space="preserve">
+    <value>"{1}", "{2}" olduğunda ve "{3}", "{4}" olduğunda "{0}" mevcut olmalıdır.</value>
+  </data>
+  <data name="SerializationSettingsIgnored" xml:space="preserve">
+    <value>Önceki bir hata nedeniyle tüm serileştirme ayarları yoksayıldı.</value>
+  </data>
+  <data name="NotAStandardMember" xml:space="preserve">
+    <value>"{0}" standart bir üye değil ve yoksayılacak.</value>
+  </data>
+  <data name="TypeFileNotRooted" xml:space="preserve">
+    <value>{0} yolu tam değil. Tam bir tür dosyası yolu belirtin.</value>
+  </data>
+  <data name="SharedTypeTableCannotBeUpdated" xml:space="preserve">
+    <value>TypeTable, çalışma alanı dışında oluşturulmuş olabileceği için TypeTable güncelleştirilemiyor.</value>
+  </data>
+  <data name="TypeTableLoadErrors" xml:space="preserve">
+    <value>TypeTable yüklenirken hatalar oluştu. Ayrıntılı hata mesajları için Hatalar özelliğine bakın.</value>
+  </data>
+  <data name="TypeDataTypeError" xml:space="preserve">
+    <value>TypeData "{0}" hatası: {1}</value>
+  </data>
+  <data name="TypeDataShouldHaveValue" xml:space="preserve">
+    <value>"{0}", "{1}" özelliği için bir değere sahip olmalıdır.</value>
+  </data>
+  <data name="TypeDataShouldNotBeNullOrEmpty" xml:space="preserve">
+    <value>"{0}" öğesinin "{1}" özelliğinde null ya da boş bir dize olmamalıdır.</value>
+  </data>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>"{0}" türü bulunamadı. Tür adı değeri, türün tam adı olmalıdır. Tür adını doğrulayın ve komutu yeniden çalıştırın.</value>
+  </data>
+  <data name="TypeDataShouldNotBeEmpty" xml:space="preserve">
+    <value>TypeData öğesinde "Members", "TypeConverters", "TypeAdapters" veya "StandardMembers" olmalıdır.</value>
+  </data>
+  <data name="TypeTableCannotCoExist" xml:space="preserve">
+    <value>Paylaşılan tür tablosu birden fazla girdiyle güncelleştirilemez.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/VerbDescriptionStrings.tr.resx b/src/System.Management.Automation/resources/tr/VerbDescriptionStrings.tr.resx
new file mode 100644
index 00000000000..175483ed225
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/VerbDescriptionStrings.tr.resx
@@ -0,0 +1,420 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Add" xml:space="preserve">
+    <value>Adds a resource to a container, or attaches an item to another item</value>
+  </data>
+  <data name="Approve" xml:space="preserve">
+    <value>Confirms or agrees to the status of a resource or process</value>
+  </data>
+  <data name="Assert" xml:space="preserve">
+    <value>Affirms the state of a resource</value>
+  </data>
+  <data name="Backup" xml:space="preserve">
+    <value>Stores data by replicating it</value>
+  </data>
+  <data name="Block" xml:space="preserve">
+    <value>Restricts access to a resource</value>
+  </data>
+  <data name="Build" xml:space="preserve">
+    <value>Creates an artifact (usually a binary or document) out of some set of input files (usually source code or declarative documents)</value>
+  </data>
+  <data name="Checkpoint" xml:space="preserve">
+    <value>Creates a snapshot of the current state of the data or of its configuration</value>
+  </data>
+  <data name="Clear" xml:space="preserve">
+    <value>Removes all the resources from a container but does not delete the container</value>
+  </data>
+  <data name="Close" xml:space="preserve">
+    <value>Changes the state of a resource to make it inaccessible, unavailable, or unusable</value>
+  </data>
+  <data name="Compare" xml:space="preserve">
+    <value>Evaluates the data from one resource against the data from another resource</value>
+  </data>
+  <data name="Complete" xml:space="preserve">
+    <value>Concludes an operation</value>
+  </data>
+  <data name="Compress" xml:space="preserve">
+    <value>Compacts the data of a resource</value>
+  </data>
+  <data name="Confirm" xml:space="preserve">
+    <value>Acknowledges, verifies, or validates the state of a resource or process</value>
+  </data>
+  <data name="Connect" xml:space="preserve">
+    <value>Creates a link between a source and a destination</value>
+  </data>
+  <data name="Convert" xml:space="preserve">
+    <value>Changes the data from one representation to another when the cmdlet supports bidirectional conversion or when the cmdlet supports conversion between multiple data types</value>
+  </data>
+  <data name="ConvertFrom" xml:space="preserve">
+    <value>Converts one primary type of input (the cmdlet noun indicates the input) to one or more supported output types</value>
+  </data>
+  <data name="ConvertTo" xml:space="preserve">
+    <value>Converts from one or more types of input to a primary output type (the cmdlet noun indicates the output type)</value>
+  </data>
+  <data name="Copy" xml:space="preserve">
+    <value>Copies a resource to another name or to another container</value>
+  </data>
+  <data name="Debug" xml:space="preserve">
+    <value>Examines a resource to diagnose operational problems</value>
+  </data>
+  <data name="Deny" xml:space="preserve">
+    <value>Refuses, objects, blocks, or opposes the state of a resource or process</value>
+  </data>
+  <data name="Deploy" xml:space="preserve">
+    <value>Sends an application, website, or solution to a remote target[s] in such a way that a consumer of that solution can access it after deployment is complete</value>
+  </data>
+  <data name="Disable" xml:space="preserve">
+    <value>Configures a resource to an unavailable or inactive state</value>
+  </data>
+  <data name="Disconnect" xml:space="preserve">
+    <value>Breaks the link between a source and a destination</value>
+  </data>
+  <data name="Dismount" xml:space="preserve">
+    <value>Detaches a named entity from a location</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Modifies existing data by adding or removing content</value>
+  </data>
+  <data name="Enable" xml:space="preserve">
+    <value>Configures a resource to an available or active state</value>
+  </data>
+  <data name="Enter" xml:space="preserve">
+    <value>Specifies an action that allows the user to move into a resource</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Sets the current environment or context to the most recently used context</value>
+  </data>
+  <data name="Expand" xml:space="preserve">
+    <value>Restores the data of a resource that has been compressed to its original state</value>
+  </data>
+  <data name="Export" xml:space="preserve">
+    <value>Encapsulates the primary input into a persistent data store, such as a file, or into an interchange format</value>
+  </data>
+  <data name="Find" xml:space="preserve">
+    <value>Looks for an object in a container that is unknown, implied, optional, or specified</value>
+  </data>
+  <data name="Format" xml:space="preserve">
+    <value>Arranges objects in a specified form or layout</value>
+  </data>
+  <data name="Get" xml:space="preserve">
+    <value>Specifies an action that retrieves a resource</value>
+  </data>
+  <data name="Grant" xml:space="preserve">
+    <value>Allows access to a resource</value>
+  </data>
+  <data name="Group" xml:space="preserve">
+    <value>Arranges or associates one or more resources</value>
+  </data>
+  <data name="Hide" xml:space="preserve">
+    <value>Makes a resource undetectable</value>
+  </data>
+  <data name="Import" xml:space="preserve">
+    <value>Creates a resource from data that is stored in a persistent data store (such as a file) or in an interchange format</value>
+  </data>
+  <data name="Initialize" xml:space="preserve">
+    <value>Prepares a resource for use, and sets it to a default state</value>
+  </data>
+  <data name="Install" xml:space="preserve">
+    <value>Places a resource in a location, and optionally initializes it</value>
+  </data>
+  <data name="Invoke" xml:space="preserve">
+    <value>Performs an action, such as running a command or a method</value>
+  </data>
+  <data name="Join" xml:space="preserve">
+    <value>Combines resources into one resource</value>
+  </data>
+  <data name="Limit" xml:space="preserve">
+    <value>Applies constraints to a resource</value>
+  </data>
+  <data name="Lock" xml:space="preserve">
+    <value>Secures a resource</value>
+  </data>
+  <data name="Measure" xml:space="preserve">
+    <value>Identifies resources that are consumed by a specified operation, or retrieves statistics about a resource</value>
+  </data>
+  <data name="Merge" xml:space="preserve">
+    <value>Creates a single resource from multiple resources</value>
+  </data>
+  <data name="Mount" xml:space="preserve">
+    <value>Attaches a named entity to a location</value>
+  </data>
+  <data name="Move" xml:space="preserve">
+    <value>Moves a resource from one location to another</value>
+  </data>
+  <data name="New" xml:space="preserve">
+    <value>Creates a resource</value>
+  </data>
+  <data name="Open" xml:space="preserve">
+    <value>Changes the state of a resource to make it accessible, available, or usable</value>
+  </data>
+  <data name="Optimize" xml:space="preserve">
+    <value>Increases the effectiveness of a resource</value>
+  </data>
+  <data name="Out" xml:space="preserve">
+    <value>Sends data out of the environment</value>
+  </data>
+  <data name="Ping" xml:space="preserve">
+    <value>Use the Test verb</value>
+  </data>
+  <data name="Pop" xml:space="preserve">
+    <value>Removes an item from the top of a stack</value>
+  </data>
+  <data name="Protect" xml:space="preserve">
+    <value>Safeguards a resource from attack or loss</value>
+  </data>
+  <data name="Publish" xml:space="preserve">
+    <value>Makes a resource available to others</value>
+  </data>
+  <data name="Push" xml:space="preserve">
+    <value>Adds an item to the top of a stack</value>
+  </data>
+  <data name="Read" xml:space="preserve">
+    <value>Acquires information from a source</value>
+  </data>
+  <data name="Receive" xml:space="preserve">
+    <value>Accepts information sent from a source</value>
+  </data>
+  <data name="Redo" xml:space="preserve">
+    <value>Resets a resource to the state that was undone</value>
+  </data>
+  <data name="Register" xml:space="preserve">
+    <value>Creates an entry for a resource in a repository such as a database</value>
+  </data>
+  <data name="Remove" xml:space="preserve">
+    <value>Deletes a resource from a container</value>
+  </data>
+  <data name="Rename" xml:space="preserve">
+    <value>Changes the name of a resource</value>
+  </data>
+  <data name="Repair" xml:space="preserve">
+    <value>Restores a resource to a usable condition</value>
+  </data>
+  <data name="Request" xml:space="preserve">
+    <value>Asks for a resource or asks for permissions</value>
+  </data>
+  <data name="Reset" xml:space="preserve">
+    <value>Sets a resource back to its original state</value>
+  </data>
+  <data name="Resize" xml:space="preserve">
+    <value>Changes the size of a resource</value>
+  </data>
+  <data name="Resolve" xml:space="preserve">
+    <value>Maps a shorthand representation of a resource to a more complete representation</value>
+  </data>
+  <data name="Restart" xml:space="preserve">
+    <value>Stops an operation and then starts it again</value>
+  </data>
+  <data name="Restore" xml:space="preserve">
+    <value>Sets a resource to a predefined state, such as a state set by Checkpoint</value>
+  </data>
+  <data name="Resume" xml:space="preserve">
+    <value>Starts an operation that has been suspended</value>
+  </data>
+  <data name="Revoke" xml:space="preserve">
+    <value>Specifies an action that does not allow access to a resource</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Preserves data to avoid loss</value>
+  </data>
+  <data name="Search" xml:space="preserve">
+    <value>Creates a reference to a resource in a container</value>
+  </data>
+  <data name="Select" xml:space="preserve">
+    <value>Locates a resource in a container</value>
+  </data>
+  <data name="Send" xml:space="preserve">
+    <value>Delivers information to a destination</value>
+  </data>
+  <data name="Set" xml:space="preserve">
+    <value>Replaces data on an existing resource or creates a resource that contains some data</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Makes a resource visible to the user</value>
+  </data>
+  <data name="Sync" xml:space="preserve">
+    <value>Assures that two or more resources are in the same state</value>
+  </data>
+  <data name="Skip" xml:space="preserve">
+    <value>Bypasses one or more resources or points in a sequence</value>
+  </data>
+  <data name="Split" xml:space="preserve">
+    <value>Separates parts of a resource</value>
+  </data>
+  <data name="Start" xml:space="preserve">
+    <value>Initiates an operation</value>
+  </data>
+  <data name="Step" xml:space="preserve">
+    <value>Moves to the next point or resource in a sequence</value>
+  </data>
+  <data name="Stop" xml:space="preserve">
+    <value>Discontinues an activity</value>
+  </data>
+  <data name="Submit" xml:space="preserve">
+    <value>Presents a resource for approval</value>
+  </data>
+  <data name="Suspend" xml:space="preserve">
+    <value>Pauses an activity</value>
+  </data>
+  <data name="Switch" xml:space="preserve">
+    <value>Specifies an action that alternates between two resources, such as to change between two locations, responsibilities, or states</value>
+  </data>
+  <data name="Test" xml:space="preserve">
+    <value>Verifies the operation or consistency of a resource</value>
+  </data>
+  <data name="Trace" xml:space="preserve">
+    <value>Tracks the activities of a resource</value>
+  </data>
+  <data name="Unblock" xml:space="preserve">
+    <value>Removes restrictions to a resource</value>
+  </data>
+  <data name="Undo" xml:space="preserve">
+    <value>Sets a resource to its previous state</value>
+  </data>
+  <data name="Uninstall" xml:space="preserve">
+    <value>Removes a resource from an indicated location</value>
+  </data>
+  <data name="Unlock" xml:space="preserve">
+    <value>Releases a resource that was locked</value>
+  </data>
+  <data name="Unprotect" xml:space="preserve">
+    <value>Removes safeguards from a resource that were added to prevent it from attack or loss</value>
+  </data>
+  <data name="Unpublish" xml:space="preserve">
+    <value>Makes a resource unavailable to others</value>
+  </data>
+  <data name="Unregister" xml:space="preserve">
+    <value>Removes the entry for a resource from a repository</value>
+  </data>
+  <data name="Update" xml:space="preserve">
+    <value>Brings a resource up-to-date to maintain its state, accuracy, conformance, or compliance</value>
+  </data>
+  <data name="Use" xml:space="preserve">
+    <value>Uses or includes a resource to do something</value>
+  </data>
+  <data name="Wait" xml:space="preserve">
+    <value>Pauses an operation until a specified event occurs</value>
+  </data>
+  <data name="Watch" xml:space="preserve">
+    <value>Continually inspects or monitors a resource for changes</value>
+  </data>
+  <data name="Write" xml:space="preserve">
+    <value>Adds information to a target</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/tr/WildcardPatternStrings.tr.resx b/src/System.Management.Automation/resources/tr/WildcardPatternStrings.tr.resx
new file mode 100644
index 00000000000..2f03044837f
--- /dev/null
+++ b/src/System.Management.Automation/resources/tr/WildcardPatternStrings.tr.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPattern" xml:space="preserve">
+    <value>Belirtilen joker karakter desen geçersiz: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Authenticode.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Authenticode.zh-Hans.resx
new file mode 100644
index 00000000000..6b716e2eda2
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Authenticode.zh-Hans.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Reason_DoNotRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted not to run this software now.</value>
+  </data>
+  <data name="Reason_NeverRun" xml:space="preserve">
+    <value>File {0} cannot be loaded because you opted never to run software from this publisher.</value>
+  </data>
+  <data name="Reason_NotTrusted" xml:space="preserve">
+    <value>File {0} is published by {1}. This publisher is explicitly not trusted on your system. The script will not run on the system. For more information, run the command "get-help about_signing".</value>
+  </data>
+  <data name="Reason_RestrictedMode" xml:space="preserve">
+    <value>File {0} cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.</value>
+  </data>
+  <data name="Reason_Unknown" xml:space="preserve">
+    <value>File {0} cannot be loaded. {1}.</value>
+  </data>
+  <data name="Reason_DisallowedBySafer" xml:space="preserve">
+    <value>File {0} cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy.</value>
+  </data>
+  <data name="Reason_FileContentUnavailable" xml:space="preserve">
+    <value>File {0} cannot be loaded because its content could not be read.</value>
+  </data>
+  <data name="CertNotGoodForSigning" xml:space="preserve">
+    <value>Cannot sign code. The specified certificate is not suitable for code signing.</value>
+  </data>
+  <data name="TimeStampUrlRequired" xml:space="preserve">
+    <value>Cannot sign code. The TimeStamp server URL must be fully qualified, and in the format http://&lt;server url&gt; or https://&lt;server url&gt;.</value>
+  </data>
+  <data name="InvalidHashAlgorithm" xml:space="preserve">
+    <value>Cannot sign code. The hash algorithm is not supported.</value>
+  </data>
+  <data name="AuthenticodePromptCaption" xml:space="preserve">
+    <value>Do you want to run software from this untrusted publisher?</value>
+  </data>
+  <data name="AuthenticodePromptText" xml:space="preserve">
+    <value>File {0} is published by {1} and is not trusted on your system. Only run scripts from trusted publishers.</value>
+  </data>
+  <data name="AuthenticodePromptText_UnknownPublisher" xml:space="preserve">
+    <value>Software {0} is published by an unknown publisher. It is recommended that you do not run this software.</value>
+  </data>
+  <data name="RemoteFilePromptCaption" xml:space="preserve">
+    <value>Security warning</value>
+  </data>
+  <data name="RemoteFilePromptText" xml:space="preserve">
+    <value>Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run {0}?</value>
+  </data>
+  <data name="Choice_NeverRun" xml:space="preserve">
+    <value>Ne&amp;ver run</value>
+  </data>
+  <data name="Choice_NeverRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and do not prompt me to run this script in future. Future attempts to run this script will result in a silent failure.</value>
+  </data>
+  <data name="Choice_DoNotRun" xml:space="preserve">
+    <value>&amp;Do not run</value>
+  </data>
+  <data name="Choice_DoNotRun_Help" xml:space="preserve">
+    <value>Do not run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_RunOnce" xml:space="preserve">
+    <value>&amp;Run once</value>
+  </data>
+  <data name="Choice_RunOnce_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and continue to prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_AlwaysRun" xml:space="preserve">
+    <value>&amp;Always run</value>
+  </data>
+  <data name="Choice_AlwaysRun_Help" xml:space="preserve">
+    <value>Run the script from this publisher now, and do not prompt me to run this script in the future.</value>
+  </data>
+  <data name="Choice_Suspend" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="Choice_Suspend_Help" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/AuthorizationManagerBase.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/AuthorizationManagerBase.zh-Hans.resx
new file mode 100644
index 00000000000..16557eb73e4
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/AuthorizationManagerBase.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AuthorizationManagerDefaultFailureReason" xml:space="preserve">
+    <value>AuthorizationManager 检查失败。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/AutomationExceptions.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/AutomationExceptions.zh-Hans.resx
new file mode 100644
index 00000000000..18d6f475628
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/AutomationExceptions.zh-Hans.resx
@@ -0,0 +1,210 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Argument" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is not valid. Change the value of the "{0}" argument and run the operation again.</value>
+  </data>
+  <data name="InvalidScopeIdArgument" xml:space="preserve">
+    <value>Cannot process argument because the value of parameter "{0}" is not valid. Valid values are "Global", "Local", or "Script", or a number relative to the current scope (0 through the number of scopes where 0 is the current scope and 1 is its parent). Change the value of the "{0}" parameter and run the operation again.</value>
+  </data>
+  <data name="ArgumentNull" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is null. Change the value of argument "{0}" to a non-null value.</value>
+  </data>
+  <data name="ArgumentOutOfRange" xml:space="preserve">
+    <value>Cannot process argument because the value of argument "{0}" is out of range. Change argument "{0}" to a value that is within range.</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not valid. Remove operation "{0}", or investigate why it is not valid.</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not implemented.</value>
+  </data>
+  <data name="NotSupported" xml:space="preserve">
+    <value>Cannot perform operation because operation "{0}" is not supported.</value>
+  </data>
+  <data name="ObjectDisposed" xml:space="preserve">
+    <value>Cannot perform operation because object "{0}" has already been disposed.</value>
+  </data>
+  <data name="ScriptBlockInvokeOnOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be invoked because it contains more than one clause. The Invoke() method can only be used on script blocks that contain a single clause.</value>
+  </data>
+  <data name="CanConvertOneClauseOnly" xml:space="preserve">
+    <value>The script block cannot be converted because it contains more than one clause. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertEmptyPipeline" xml:space="preserve">
+    <value>An empty script block cannot be converted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CanOnlyConvertOnePipeline" xml:space="preserve">
+    <value>Only a script block that contains exactly one pipeline or command can be converted. Expressions or control structures are not permitted. Verify that the script block contains exactly one pipeline or command.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithTrap" xml:space="preserve">
+    <value>A script block that contains a top-level trap statement cannot be converted.</value>
+  </data>
+  <data name="CantConvertWithUndeclaredVariables" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock dereferencing variables undeclared in the param(...) block.  Name of undeclared variable: {0}.</value>
+  </data>
+  <data name="CantConvertWithNonConstantExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating non-constant expressions. Non-constant expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithDynamicExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynamic expression: {0}.</value>
+  </data>
+  <data name="CantConvertWithScriptBlocks" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that tries to pass other script blocks inside argument values.</value>
+  </data>
+  <data name="CantConvertWithCommandInvocations" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock which invokes pipelines, commands or functions to evaluate arguments of the main pipeline.</value>
+  </data>
+  <data name="CantConvertWithDotSourcing" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that uses dot sourcing.</value>
+  </data>
+  <data name="CantConvertWithScriptBlockInvocation" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that invokes other script blocks.</value>
+  </data>
+  <data name="CanConvertOneOutputErrorRedir" xml:space="preserve">
+    <value>The script block cannot be converted to a PowerShell object because it contains forbidden redirection operators.</value>
+  </data>
+  <data name="CantConvertScriptBlockWithNoContext" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that does not have an associated operation context.</value>
+  </data>
+  <data name="HaltCommandException" xml:space="preserve">
+    <value>The command was stopped by the user.</value>
+  </data>
+  <data name="DynamicParametersWrongType" xml:space="preserve">
+    <value>Object "{0}" is the wrong type to return from the dynamicparam block. The dynamicparam block must return either $null, or an object with type [System.Management.Automation.RuntimeDefinedParameterDictionary].</value>
+  </data>
+  <data name="CantConvertScriptBlockToOpenGenericType" xml:space="preserve">
+    <value>The script block cannot be converted to an open generic type. Define an appropriate closed generic type, and then retry.</value>
+  </data>
+  <data name="CantConvertPipelineStartsWithExpression" xml:space="preserve">
+    <value>Cannot generate a PowerShell object for a ScriptBlock that starts a pipeline with an expression.</value>
+  </data>
+  <data name="UsingVariableIsUndefined" xml:space="preserve">
+    <value>The value of the using variable '$using:{0}' cannot be retrieved because it has not been set in the local session.</value>
+  </data>
+  <data name="CantGetUsingExpressionValueWithSpecifiedVariableDictionary" xml:space="preserve">
+    <value>Cannot get the value of the Using expression '{0}' in the specified variable dictionary. When creating a PowerShell instance from a script block, the Using expression cannot contain an indexing operation or member-accessing operation.</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogTitle" xml:space="preserve">
+    <value>Compiled Script Block Dot Source</value>
+  </data>
+  <data name="WDACCompiledScriptBlockLogMessage" xml:space="preserve">
+    <value>Script block '{0}' invocation into current scope will be disallowed in Constrained Language mode. Script language mode: {1}, Context language mode: {2}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CatalogStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CatalogStrings.zh-Hans.resx
new file mode 100644
index 00000000000..11254c168a6
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CatalogStrings.zh-Hans.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CatalogDefinitionFileNotGenerated" xml:space="preserve">
+    <value>无法生成目录定义文件。</value>
+  </data>
+  <data name="AddFileToCatalog" xml:space="preserve">
+    <value>正在将文件“{0}”添加到目录。目录中文件的相对路径为“{1}”。</value>
+  </data>
+  <data name="SkipValidationOfCatalogFile" xml:space="preserve">
+    <value>正在跳过验证目录中的文件 {0}。</value>
+  </data>
+  <data name="FoundFileHashInCatalogItem" xml:space="preserve">
+    <value>在目录中找到哈希为 {1} 的文件 {0}。</value>
+  </data>
+  <data name="FoundDuplicateFilesRelativePath" xml:space="preserve">
+    <value>目录的路径包含多个相对路径 {0} 相同的文件。</value>
+  </data>
+  <data name="FoundFileInPath" xml:space="preserve">
+    <value>在磁盘上找到哈希为 {1} 的文件 {0}。</value>
+  </data>
+  <data name="SkipValidationOfPathFile" xml:space="preserve">
+    <value>正在跳过验证路径中的文件 {0}。</value>
+  </data>
+  <data name="UnableToAcquireHashAlgorithmContext" xml:space="preserve">
+    <value>无法获取给定哈希算法 {0} 的目录管理员上下文的句柄。</value>
+  </data>
+  <data name="UnableToCreateFileHash" xml:space="preserve">
+    <value>无法为文件 {0} 创建哈希。</value>
+  </data>
+  <data name="UnableToOpenCatalogFile" xml:space="preserve">
+    <value>无法打开目录文件 {0}。</value>
+  </data>
+  <data name="UnKnownCatalogVersion" xml:space="preserve">
+    <value>目录版本无效。我们仅支持目录版本 {0} 和版本 {1}。</value>
+  </data>
+  <data name="UnableToOpenCatalogDefinitionFile" xml:space="preserve">
+    <value>无法打开目录定义文件。</value>
+  </data>
+  <data name="FoundDuplicateFileMemberInCatalog" xml:space="preserve">
+    <value>在目录中找到文件成员 {0} 的多个条目。</value>
+  </data>
+  <data name="UnableToFindFileNameOrPathForCatalogMember" xml:space="preserve">
+    <value>找不到目录成员 {0} 的文件名或路径。</value>
+  </data>
+  <data name="UnableToFindFileToHash" xml:space="preserve">
+    <value>找不到要进行哈希处理的文件 {0}。</value>
+  </data>
+  <data name="UnableToReadFileToHash" xml:space="preserve">
+    <value>无法读取文件 {0} 以计算其哈希。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CimInstanceTypeAdapterResources.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CimInstanceTypeAdapterResources.zh-Hans.resx
new file mode 100644
index 00000000000..4f3fda63c2e
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CimInstanceTypeAdapterResources.zh-Hans.resx
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BaseObjectNotCimInstance" xml:space="preserve">
+    <value>Cannot convert "{0}" to an object of type "{1}".</value>
+  </data>
+  <data name="ReadOnlyCIMProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+    <comment>{0} gets property name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CmdletizationCoreResources.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CmdletizationCoreResources.zh-Hans.resx
new file mode 100644
index 00000000000..59cc6af640c
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CmdletizationCoreResources.zh-Hans.resx
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ScriptWriter_ModuleDescription" xml:space="preserve">
+    <value>基于“{0}”类的 Cmdlet</value>
+    <comment>{0} is a placeholder for a name of a CIM class.  Example: "ROOT\cimv2\Win32_Process"</comment>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ScriptWriter_DuplicateQueryParameterName" xml:space="preserve">
+    <value>Two cmdlet parameters defined within the {0} element have the same name: {1}.  Resolve the conflict in the Cmdlet Definition XML and retry.</value>
+    <comment>{StrContains="CmdletParameterMetadata"} {StrContains="PSName"}
+{0} is a placeholder for a name of an XML element.  Example: &lt;GetCmdletParameters&gt;
+{1} is a placeholder for a cmdlet parameter name.  Example: Name</comment>
+  </data>
+  <data name="ExportCimCommand_ErrorInCmdletizationXmlFile" xml:space="preserve">
+    <value>无法处理以下文件的 Cmdlet 定义 XML: {0}。{1}</value>
+    <comment>{0} is a placeholder for a file name.
+{1} is an exception message copied from an XmlException or XmlSchemaException</comment>
+  </data>
+  <data name="ScriptWriter_DuplicateParameterSetInStaticCmdlet" xml:space="preserve">
+    <value>The {0} cmdlet defines the {1} parameter set more than once.  Verify that the Cmdlet Definition XML does not have duplicate parameter set names and retry.</value>
+    <comment>{StrContains="CmdletParameterSet"}
+{0} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{1} is a placeholder for a parameter set name.  Example: 'foo'</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperDefinesMultipleParameterSets" xml:space="preserve">
+    <value>无法处理 ObjectModelWrapper 属性。{0} 类型可定义多个参数集。验证 Cmdlet 定义 XML 是否在 ObjectModelWrapper 属性中指定了有效类型，然后重试。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperIsStillGeneric" xml:space="preserve">
+    <value>无法处理 ObjectModelWrapper 属性。{0} 类型为开放泛型类型。 验证 Cmdlet 定义 XML 是否在 ObjectModelWrapper 属性中指定了有效类型，然后重试。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperNotDerivedFromObjectModelWrapper" xml:space="preserve">
+    <value>无法处理 ObjectModelWrapper 属性。{0} 类型不是从以下类派生的: {1}。 验证 Cmdlet 定义 XML 是否在 ObjectModelWrapper 属性中指定了有效类型，然后重试。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a .NET class name. Example: Microsoft.PowerShell.Cmdletization.ObjectModelWrapper</comment>
+  </data>
+  <data name="ScriptWriter_ObjectModelWrapperUsesIgnoredParameterMetadata" xml:space="preserve">
+    <value>无法处理 ObjectModelWrapper 属性。{0} 类型使用被忽略的 {2} 特性参数定义 cmdlet 参数 {1}。 验证 Cmdlet 定义 XML 是否在 ObjectModelWrapper 属性中指定了有效类型，然后重试。</value>
+    <comment>{StrContains="ObjectModelWrapper"}
+{0} is a placeholder for a .NET class name.  Example: System.Net.IPAddress
+{1} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{2} is a placeholder for a name of a property of ParameterAttribute class. Example: ValueFromPipelineByPropertyName </comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithCommonParameters" xml:space="preserve">
+    <value>无法定义 {1} cmdlet 的 {0} 参数。 参数名称已由 {2} 类定义。 在 Cmdlet 定义 XML 中更改参数的名称，然后重试。</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for a .NET class name.  Example: 'Microsoft.PowerShell.Cmdletization.Cim.CimWrapper'</comment>
+  </data>
+  <data name="ScriptWriter_ParameterNameConflictsWithQueryParameters" xml:space="preserve">
+    <value>无法定义 {1} cmdlet 的 {0} 参数。参数名称已在 {2} XML 元素中定义。在 Cmdlet 定义 XML 中更改参数的名称，然后重试。</value>
+    <comment>{0} is a placeholder for a cmdlet parameter name.  Example: 'ProcessId'
+{1} is a placeholder for a cmdlet name. Example: 'Get-Win32Process'
+{2} is a placeholder for an xml element name.  Example: &lt;GetCmdletParameters&gt;</comment>
+  </data>
+  <data name="ScriptWriter_ConcatenationOfDeserializationExceptions" xml:space="preserve">
+    <value>{0} {1}</value>
+    <comment>This is a resource string, to support locales where the order of placeholders might need to be reversed.
+{0} is a placeholder for a top-level exception message (i.e. "There is an error in XML document (2, 2).")
+{1} is a placeholder for a secondary exception message (i.e. "")</comment>
+  </data>
+  <data name="EnumWriter_InvalidEnumName" xml:space="preserve">
+    <value>EnumName 属性的值未转换为有效的 C# 标识符: {0}。验证 Cmdlet 定义 XML 中的 EnumName 属性，然后重试。</value>
+    <comment>{StrContains="EnumName"}</comment>
+  </data>
+  <data name="EnumWriter_InvalidValueName" xml:space="preserve">
+    <value>The value of the Name attribute is not a valid C# identifier: {0}.  Verify the Name attribute in the Cmdlet Definition XML, and then try again.</value>
+    <comment>{StrContains="Enum"} {StrContains="Value"} {StrContains="Name"}</comment>
+  </data>
+  <data name="ScriptWriter_InvalidEnum" xml:space="preserve">
+    <value>无法处理 &lt;Enum EnumName="{0}" ...&gt; 元素。{1}</value>
+    <comment>{StrContains="Enum"} {StrContains="EnumName"}</comment>
+  </data>
+  <data name="ImportModule_UnsupportedCmdletAdapter" xml:space="preserve">
+    <value>远程计算机返回的 CDXML 文件无效。不支持以下 cmdlet 适配器从远程计算机导入 CDXML 模块: {0}</value>
+    <comment>{0} is a placeholder for a fully qualified type name</comment>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CommandBaseStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CommandBaseStrings.zh-Hans.resx
new file mode 100644
index 00000000000..8e2c977e3f8
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CommandBaseStrings.zh-Hans.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ShouldContinuePromptCaption" xml:space="preserve">
+    <value>继续执行此操作?</value>
+  </data>
+  <data name="ContinueOneLabel" xml:space="preserve">
+    <value>是(&amp;Y)</value>
+  </data>
+  <data name="ContinueOneHelpMessage" xml:space="preserve">
+    <value>仅继续执行操作的下一步。</value>
+  </data>
+  <data name="ContinueAllLabel" xml:space="preserve">
+    <value>全是(&amp;A)</value>
+  </data>
+  <data name="ContinueAllHelpMessage" xml:space="preserve">
+    <value>继续执行操作的所有步骤。</value>
+  </data>
+  <data name="SkipOneLabel" xml:space="preserve">
+    <value>否(&amp;N)</value>
+  </data>
+  <data name="SkipOneHelpMessage" xml:space="preserve">
+    <value>跳过此操作并继续执行下一个操作。</value>
+  </data>
+  <data name="SkipAllLabel" xml:space="preserve">
+    <value>全否(&amp;L)</value>
+  </data>
+  <data name="SkipAllHelpMessage" xml:space="preserve">
+    <value>跳过此操作和所有后续操作。</value>
+  </data>
+  <data name="HaltHelpMessage" xml:space="preserve">
+    <value>停止此命令。</value>
+  </data>
+  <data name="HaltLabel" xml:space="preserve">
+    <value>停止命令(&amp;H)</value>
+  </data>
+  <data name="PauseLabel" xml:space="preserve">
+    <value>暂停(&amp;S)</value>
+  </data>
+  <data name="PauseHelpMessage" xml:space="preserve">
+    <value>暂停当前管道并返回到命令提示符。键入“{0}”以恢复管道。</value>
+  </data>
+  <data name="ProgramExitedWithNonZeroCode" xml:space="preserve">
+    <!-- NOTE:
+      This string was added for the native command error action preference integration feature.
+      ParserStrings already declares a ProgramFailedToExecute string,
+      however that is used for ApplicationFailedExceptions thrown when the NativeCommandProcessor fails in an unexpected way.
+      In this case, we have a more specific error for the native command scenario, so the two are not conflated.
+    -->
+    <value>程序“{0}”以非零退出代码结束: {1} ({2})。</value>
+  </data>
+  <data name="ShouldProcessMessage" xml:space="preserve">
+    <value>正在对目标“{1}”执行操作“{0}”。</value>
+  </data>
+  <data name="ShouldProcessWhatIfMessage" xml:space="preserve">
+    <value>What if: {0}</value>
+  </data>
+  <data name="ShouldProcessWarningFallback" xml:space="preserve">
+    <value>是否确实要执行此操作?
+{0}</value>
+  </data>
+  <data name="InquireCaptionDefault" xml:space="preserve">
+    <value>确认</value>
+  </data>
+  <data name="ErrorPreferenceStop" xml:space="preserve">
+    <value>已停止正在运行的命令，因为首选变量“{0}”或通用参数设置为“停止”: {1}</value>
+  </data>
+  <data name="PreferenceStop" xml:space="preserve">
+    <value>已停止正在运行的命令，因为首选变量“{0}”或通用参数设置为“停止”。</value>
+  </data>
+  <data name="PreferenceInvalid" xml:space="preserve">
+    <value>已停止正在运行的命令，因为首选变量“{0}”或通用参数设置以下无效值:“{1}”。</value>
+  </data>
+  <data name="InquireHalt" xml:space="preserve">
+    <value>已停止正在运行的命令，因为用户选择了“停止”选项。</value>
+  </data>
+  <data name="InquireCtrlC" xml:space="preserve">
+    <value>已停止正在运行的命令，因为用户中断了该命令。</value>
+  </data>
+  <data name="CannotInvokePSCmdletsDirectly" xml:space="preserve">
+    <value>无法直接调用派生自 PSCmdlet 的 Cmdlet。 </value>
+  </data>
+  <data name="ParameterNotValidInRemoteRunspace" xml:space="preserve">
+    <value>Cmdlet“{0}”不支持远程会话中的参数“{1}”。</value>
+  </data>
+  <data name="PagingSupportAccurateTotalCountTemplate" xml:space="preserve">
+    <value>总计: {0}</value>
+    <comment>{0} is a placeholder for an integer number.
+
+Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="PagingSupportEstimatedTotalCountTemplate" xml:space="preserve">
+    <value>估计总计数: {0}</value>
+    <comment>{0} is a placeholder for an integer number
+
+Reviewed by TArcher on 2010-07-20
+</comment>
+  </data>
+  <data name="PagingSupportUnknownTotalCountTemplate" xml:space="preserve">
+    <value>总计数未知</value>
+    <comment>Reviewed by TArcher on 2010-07-20</comment>
+  </data>
+  <data name="ObsoleteCommand" xml:space="preserve">
+    <value>命令“{0}”</value>
+  </data>
+  <data name="UseOfDeprecatedCommandWarning" xml:space="preserve">
+    <value>{0} 已过时。{1}</value>
+  </data>
+  <data name="ExecFailed" xml:space="preserve">
+    <value>对以下命令行的执行调用失败，errorno 为 {0}: {1}</value>
+  </data>
+  <data name="NativeCommandNotFound" xml:space="preserve">
+    <value>找不到命令“{0}”。指定的命令必须是可执行的。</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>脚本块处理点源检查</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>脚本块“{0}”的点源处理将会在受约束语言模式下失败，因为其语言模式“{1}”与当前语言模式“{2}”不匹配。</value>
+  </data>
+  <data name="SearcherWDACLogTitle" xml:space="preserve">
+    <value>命令搜索器</value>
+  </data>
+  <data name="SearcherWDACLogMessage" xml:space="preserve">
+    <value>模块“{1}”中的命令“{0}”不受信任，无法在 ConstrainedLanguage 模式下访问。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ConsoleInfoErrorStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ConsoleInfoErrorStrings.zh-Hans.resx
new file mode 100644
index 00000000000..2b7c8007e1e
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ConsoleInfoErrorStrings.zh-Hans.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="BadMonadVersion" xml:space="preserve">
+    <value>Incorrect PowerShell version {0}. PowerShell version {1} is supported on this computer.</value>
+  </data>
+  <data name="ConsoleLoadFailure" xml:space="preserve">
+    <value>The following errors occurred when loading console {0}: {1}</value>
+  </data>
+  <data name="PSSnapInLoadFailure" xml:space="preserve">
+    <value>Cannot load PowerShell snap-in {0} because of the following error: {1}</value>
+  </data>
+  <data name="PSSnapInLoadWarning" xml:space="preserve">
+    <value>PowerShell snap-in "{0}" loaded with the following warnings: {1}</value>
+  </data>
+  <data name="PSSnapInAssemblyNameMismatch" xml:space="preserve">
+    <value>The PowerShell snap-in module {0} does not have the required PowerShell snap-in strong name {1}.</value>
+  </data>
+  <data name="PSSnapInDuplicateCmdlets" xml:space="preserve">
+    <value>The cmdlet '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="PSSnapInDuplicateProviders" xml:space="preserve">
+    <value>PowerShell provider '{0}' should not occur more than once in PowerShell snap-in '{1}'.</value>
+  </data>
+  <data name="AddPSSnapInBadMonadVersion" xml:space="preserve">
+    <value>PowerShell {0} is not supported in the current console. PowerShell {1} is supported in the current console.</value>
+  </data>
+  <data name="FileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="ConfigurationFileDoesNotExist" xml:space="preserve">
+    <value>The provided configuration file '{0}' does not exist.</value>
+  </data>
+  <data name="NotConfigurationFile" xml:space="preserve">
+    <value>The provided configuration file '{0}' must have a .pssc file extension.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CoreClrStubResources.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CoreClrStubResources.zh-Hans.resx
new file mode 100644
index 00000000000..4cd745612c7
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CoreClrStubResources.zh-Hans.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgumentIllegalEnvVarName" xml:space="preserve">
+    <value>Environment variable name cannot contain equal character.</value>
+  </data>
+  <data name="ArgumentLongEnvVarValue" xml:space="preserve">
+    <value>Environment variable name or value is too long.</value>
+  </data>
+  <data name="ArgumentStringFirstCharIsZero" xml:space="preserve">
+    <value>The first char in the string is the null character.</value>
+  </data>
+  <data name="ArgumentStringZeroLength" xml:space="preserve">
+    <value>String cannot be of zero length.</value>
+  </data>
+  <data name="CannotGetComputerName" xml:space="preserve">
+    <value>Computer name could not be obtained.</value>
+  </data>
+  <data name="CannotGetDomainName" xml:space="preserve">
+    <value>Current user's domain name could not be obtained.</value>
+  </data>
+  <data name="UnknownErrorNumber" xml:space="preserve">
+    <value>Unknown error "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CredUI.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CredUI.zh-Hans.resx
new file mode 100644
index 00000000000..0bffbe7ca7d
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CredUI.zh-Hans.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="PromptForCredential_DefaultCaption" xml:space="preserve">
+    <value>PowerShell credential request </value>
+  </data>
+  <data name="PromptForCredential_DefaultMessage" xml:space="preserve">
+    <value>Enter your credentials. </value>
+  </data>
+  <data name="PromptForCredential_DefaultTarget" xml:space="preserve">
+    <value>Enter your credentials.</value>
+  </data>
+  <data name="PromptForCredential_InvalidCaption" xml:space="preserve">
+    <value>The maximum length of the caption is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidMessage" xml:space="preserve">
+    <value>The maximum length of the message is {0} characters.</value>
+  </data>
+  <data name="PromptForCredential_InvalidUserName" xml:space="preserve">
+    <value>The maximum length of the UserName value is {0} characters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Credential.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Credential.zh-Hans.resx
new file mode 100644
index 00000000000..913b5fdfa02
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Credential.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialDisallowed" xml:space="preserve">
+    <value>无法序列化凭据。如果此命令正在启动工作流，则无法保留凭据，因为启动工作流的进程没有序列化凭据的权限。
+
+-- 如果工作流是在本地计算机的 PSSession 中启动的，请将 EnableNetworkAccess 参数添加到创建该会话的命令中。
+-- 如果工作流是在远程计算机的 PSSession 中启动的，请将值为 CredSSP 的身份验证参数添加到创建会话的命令。-- 或者，连接到具有 RunAsUser 属性值的会话配置。</value>
+  </data>
+  <data name="InvalidUserNameFormat" xml:space="preserve">
+    <value>UserName 的值格式不正确。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/CredentialAttributeStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/CredentialAttributeStrings.zh-Hans.resx
new file mode 100644
index 00000000000..3d89c3dd023
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/CredentialAttributeStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CredentialAttribute_Prompt_Caption" xml:space="preserve">
+    <value>PowerShell 凭据请求</value>
+  </data>
+  <data name="CredentialAttribute_Prompt" xml:space="preserve">
+    <value>输入凭据。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/DebuggerStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/DebuggerStrings.zh-Hans.resx
new file mode 100644
index 00000000000..9e5e11060e7
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/DebuggerStrings.zh-Hans.resx
@@ -0,0 +1,264 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="VariableBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '${0}' ({1} access)</value>
+  </data>
+  <data name="VariableScriptBreakpointString" xml:space="preserve">
+    <value>Variable breakpoint on '{0}:${1}' ({2} access)</value>
+  </data>
+  <data name="LineBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="StatementBreakpointString" xml:space="preserve">
+    <value>Line breakpoint on '{0}:{1}, {2}'</value>
+  </data>
+  <data name="CommandBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}'</value>
+  </data>
+  <data name="CommandScriptBreakpointString" xml:space="preserve">
+    <value>Command breakpoint on '{0}:{1}'</value>
+  </data>
+  <data name="WarningBreakpointWillNotBeHit" xml:space="preserve">
+    <value>Breakpoint {0} will not be hit</value>
+  </data>
+  <data name="StepHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Single step (step into functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOverHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step to next statement (step over functions, scripts, etc.)</value>
+  </data>
+  <data name="StepOutHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Step out of the current function, script, etc.</value>
+  </data>
+  <data name="ContinueHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation</value>
+  </data>
+  <data name="StopHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Stop operation and exit the debugger</value>
+  </data>
+  <data name="GetStackTraceHelp" xml:space="preserve">
+    <value> {0}, Get-PSCallStack Display call stack</value>
+  </data>
+  <data name="ListHelp" xml:space="preserve">
+    <value> {0}, {1,-16} List source code for the current script.  </value>
+  </data>
+  <data name="AdditionalListHelp1" xml:space="preserve">
+    <value>                     Use "list" to start from the current line, "list &lt;m&gt;"  </value>
+  </data>
+  <data name="AdditionalListHelp2" xml:space="preserve">
+    <value>                     to start from line &lt;m&gt;, and "list &lt;m&gt; &lt;n&gt;" to list &lt;n&gt; </value>
+  </data>
+  <data name="AdditionalListHelp3" xml:space="preserve">
+    <value>                     lines starting from line &lt;m&gt;</value>
+  </data>
+  <data name="EnterHelp" xml:space="preserve">
+    <value> &lt;enter&gt;             Repeat last command if it was {0}, {1} or {2}</value>
+  </data>
+  <data name="HelpCommandHelp" xml:space="preserve">
+    <value> {0}, {1,-16} displays this help message.</value>
+  </data>
+  <data name="PromptHelp" xml:space="preserve">
+    <value>For instructions about how to customize your debugger prompt, type "help about_prompt".</value>
+  </data>
+  <data name="SessionDoesNotSupportDebugger" xml:space="preserve">
+    <value>
+The current session does not support debugging; operation will continue.
+
+</value>
+  </data>
+  <data name="LocationFormat" xml:space="preserve">
+    <value>{0}: line {1}</value>
+  </data>
+  <data name="NoSourceCode" xml:space="preserve">
+    <value>There is no source code available.</value>
+  </data>
+  <data name="BadStartFormat" xml:space="preserve">
+    <value>The starting line must be a positive integer no greater than {0}</value>
+  </data>
+  <data name="BadCountFormat" xml:space="preserve">
+    <value>The line count must be a positive integer.</value>
+  </data>
+  <data name="NoFile" xml:space="preserve">
+    <value>&lt;No file&gt;</value>
+  </data>
+  <data name="StackTraceFormat" xml:space="preserve">
+    <value>at {0}, {1}: line {2}</value>
+  </data>
+  <data name="CannotProcessDebuggerCommandNotStopped" xml:space="preserve">
+    <value>The debugger cannot process commands unless it is in the Stopped state.</value>
+  </data>
+  <data name="CannotSetDebuggerAction" xml:space="preserve">
+    <value>SetDebugAction is not implemented for the local script debugger.</value>
+  </data>
+  <data name="CannotSetRemoteDebuggerAction" xml:space="preserve">
+    <value>The debugger cannot set a resume action because the debugger in the remote session is not in a Stopped state.</value>
+  </data>
+  <data name="CannotStartJobDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The job cannot be debugged because the debugger is currently busy.</value>
+  </data>
+  <data name="NoDebuggableJobsFound" xml:space="preserve">
+    <value>The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and also be in a running state.</value>
+  </data>
+  <data name="CannotEnableDebuggerSteppingInvalidMode" xml:space="preserve">
+    <value>The debugger cannot be enabled for step mode because the debugger is turned off with debug mode set to None.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerBusy" xml:space="preserve">
+    <value>The Runspace cannot be debugged because the host debugger is currently busy.</value>
+  </data>
+  <data name="RunspaceDebuggingDebuggerIsOff" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace debugger is currently turned off (DebugMode is 'None').</value>
+  </data>
+  <data name="RunspaceDebuggingInvalidRunspaceState" xml:space="preserve">
+    <value>Cannot debug a Runspace that is not in the Opened state. This Runspace state is {0}.</value>
+  </data>
+  <data name="RunspaceDebuggingNoRunspaceDebugger" xml:space="preserve">
+    <value>Cannot debug Runspace. The Runspace {0} has no associated debugger.</value>
+  </data>
+  <data name="RemoteServerDebuggerAlreadyPushed" xml:space="preserve">
+    <value>The debugger is already overridden.</value>
+  </data>
+  <data name="RemoteServerDebuggerCannotPushSelf" xml:space="preserve">
+    <value>Cannot push a debugger object onto itself.</value>
+  </data>
+  <data name="CommandNotSupportedForRemoteUseInServerDebugger" xml:space="preserve">
+    <value>The {0} command is not supported for remote use in the version of PowerShell that is running in the remote runspace.</value>
+  </data>
+  <data name="NestedRunspaceDebuggerPromptProcessName" xml:space="preserve">
+    <value>Process</value>
+  </data>
+  <data name="DetachHelp" xml:space="preserve">
+    <value> {0}, {1,-16} Continue operation and detach the debugger.</value>
+  </data>
+  <data name="InvalidDetachCommand" xml:space="preserve">
+    <value>The debugger detach command is not applicable.  The detach command only applies when debugging jobs and runspaces with the Debug-Job or Debug-Runspace cmdlets.</value>
+  </data>
+  <data name="InvalidRunspaceId" xml:space="preserve">
+    <value>Invalid runspace id: {0}</value>
+  </data>
+  <data name="UnableToGetRunspace" xml:space="preserve">
+    <value>Unable to get Runspace.</value>
+  </data>
+  <data name="BreakpointOrBreakpointListNotSpecified" xml:space="preserve">
+    <value>Breakpoint or BreakpointList must be specified.</value>
+  </data>
+  <data name="BreakpointListContainedANonBreakpoint" xml:space="preserve">
+    <value>The BreakpointList contained an item that was not a breakpoint.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/DescriptionsStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/DescriptionsStrings.zh-Hans.resx
new file mode 100644
index 00000000000..4737ee11e8e
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/DescriptionsStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NullOrEmptyErrorTemplate" xml:space="preserve">
+    <value>{0} 不能为 NULL 或为空。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/DiscoveryExceptions.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/DiscoveryExceptions.zh-Hans.resx
new file mode 100644
index 00000000000..de7a4ea8951
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/DiscoveryExceptions.zh-Hans.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletFormatInvalid" xml:space="preserve">
+    <value>无法验证 cmdlet 名称 "{0}"，因为其格式不正确。cmdlet 名称必须包含一个动词和一个名词，且它们之间用 "-" 分隔，例如 "Get-Process"。</value>
+  </data>
+  <data name="ParameterDeclaredInParameterSetMultipleTimes" xml:space="preserve">
+    <value>在参数集 "{1}" 中多次声明了参数 "{0}"。</value>
+  </data>
+  <data name="AliasDeclaredMultipleTimes" xml:space="preserve">
+    <value>多次声明了别名 "{0}"。</value>
+  </data>
+  <data name="CompiledCommandParameterMemberMustBeFieldOrProperty" xml:space="preserve">
+    <value>无法声明参数。只能在字段和属性上声明参数。</value>
+  </data>
+  <data name="InvalidCmdletNameFormat" xml:space="preserve">
+    <value>无法处理该 cmdlet。cmdlet 名称必须由用 '-' 分隔的动词和名词组成。</value>
+  </data>
+  <data name="CommandNotFoundException" xml:space="preserve">
+    <value>术语 '{0}' 不会被识别为 cmdlet、函数、脚本文件或可执行程序的名称。
+请检查名称的拼写或验证路径是否正确(如果包含路径)，然后重试。</value>
+  </data>
+  <data name="CmdletNotFoundException" xml:space="preserve">
+    <value>自变量 '{0}' 未被识别为 cmdlet: {1}</value>
+  </data>
+  <data name="CmdletDoesNotDeriveFromCmdletType" xml:space="preserve">
+    <value>自变量 '{0}' 未被识别为 cmdlet，这可能是因为它并非派生自 Cmdlet 或 PSCmdlet 类: {1}</value>
+  </data>
+  <data name="AliasNotResolvedException" xml:space="preserve">
+    <value>无法解析别名 '{0}'，因为它引用了术语 '{1}'，而该术语不会被识别为 cmdlet、函数、可执行程序或脚本文件。请验证该术语，然后重试。</value>
+  </data>
+  <data name="CommandNameNotCmdlet" xml:space="preserve">
+    <value>无法处理值为 '{1}' 的参数 '{0}'，因为它不是 cmdlet，无法由 CommandProcessor 处理。</value>
+  </data>
+  <data name="DuplicateCmdletName" xml:space="preserve">
+    <value>名为 '{0}' 的 cmdlet 已存在。Cmdlet 必须具有唯一名称。</value>
+  </data>
+  <data name="DuplicateCmdletProviderName" xml:space="preserve">
+    <value>名为 '{0}' 的 cmdlet 提供程序已存在。cmdlet 提供程序必须具有唯一名称。</value>
+  </data>
+  <data name="DuplicateAssemblyName" xml:space="preserve">
+    <value>名为 '{0}' 的程序集已存在。程序集必须具有唯一名称。</value>
+  </data>
+  <data name="DuplicateScriptName" xml:space="preserve">
+    <value>名为 '{0}' 的脚本已存在。脚本必须具有唯一名称。</value>
+  </data>
+  <data name="ScriptRequiresInvalidFormat" xml:space="preserve">
+    <value>无法处理 #requires 语句，因为其格式不正确。
+#requires 语句必须采用以下格式之一:
+ "#requires -shellid &lt;shellID&gt;"
+ "#requires -version &lt;major.minor&gt;"
+ "#requires -psedition &lt;edition&gt;"
+ "#requires -pssnapin &lt;psSnapInName&gt; [-version &lt;major.minor&gt;]"
+ "#requires -modules &lt;ModuleSpecification&gt;"
+ "#requires -runasadministrator"</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatible" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为它包含 shell ID 为 {1} 且与当前 shell 不兼容的 "#requires" 语句。若要运行此脚本，必须使用位于 '{2}' 的 shell。</value>
+  </data>
+  <data name="RequiresInterpreterNotCompatibleNoPath" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为它包含 shell ID 为 {1} 且与当前 shell 不兼容的 "#requires" 语句。</value>
+  </data>
+  <data name="RequiresPSVersionNotCompatible" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为它包含 PowerShell {1} 的 "#requires" 语句。该脚本所需的 PowerShell 版本与当前运行的 PowerShell 版本 {2} 不匹配。</value>
+  </data>
+  <data name="RequiresPSEditionNotCompatible" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为它包含 PowerShell 版本 '{1}' 的 "#requires" 语句。该脚本所需的 PowerShell 版本与当前运行的 PowerShell {2} 版本不匹配。</value>
+  </data>
+  <data name="RequiresMissingPSSnapIns" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为该脚本的 "#requires" 语句指定了以下缺失管理单元: {1}。</value>
+  </data>
+  <data name="RequiresShellIDInvalidForSingleShell" xml:space="preserve">
+    <value>#requires 语句仅指定了 shellID。在 PowerShell 中运行时，#Requires 语句必须指定所需的 PowerShell 管理单元。</value>
+  </data>
+  <data name="RequiresElevation" xml:space="preserve">
+    <value>脚本 '{0}' 无法运行，因为它包含用于以管理员身份运行的 "#requires" 语句。当前 PowerShell 会话并非以管理员身份运行。请使用“以管理员身份运行”选项启动 PowerShell，然后再次尝试运行该脚本。</value>
+  </data>
+  <data name="PSSnapInNameVersion" xml:space="preserve">
+    <value>{0} (版本 {1})</value>
+  </data>
+  <data name="CommandArgsOnlyForSingleCmdlet" xml:space="preserve">
+    <value>无法检索该命令，因为只有在检索单个 cmdlet 或脚本时才能指定 ArgumentList 参数。</value>
+  </data>
+  <data name="ReservedParameterName" xml:space="preserve">
+    <value>已保留参数名称 "{0}" 以供将来使用。</value>
+  </data>
+  <data name="RequiresMissingModules" xml:space="preserve">
+    <value>无法运行脚本 '{0}'，因为该脚本的 "#requires" 语句指定了以下缺失模块: {1}。</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModule" xml:space="preserve">
+    <value>在模块 '{1}' 中找到了 '{0}' 命令，但无法加载该模块。有关详细信息，请运行 'Import-Module {1}'。</value>
+  </data>
+  <data name="CouldNotAutoImportMatchingModuleWithErrorMessage" xml:space="preserve">
+    <value>在模块 '{1}' 中找到了 '{0}' 命令，但由于以下错误而无法加载该模块: [{2}]
+有关详细信息，请运行 'Import-Module {1}'。</value>
+  </data>
+  <data name="CouldNotAutoImportModule" xml:space="preserve">
+    <value>无法加载模块 '{0}'。有关详细信息，请运行 'Import-Module {0}'。</value>
+  </data>
+  <data name="CommandParameterNotFound" xml:space="preserve">
+    <value>没有匹配的命令包含名为 '{0}' 的参数。 请检查参数名称的拼写，然后重试。</value>
+  </data>
+  <data name="DotSourceNotSupported" xml:space="preserve">
+    <value>无法使用点号加载此命令，因为它是在不同的语言模式下定义的。若要调用此命令而不导入其内容，请省略 '.' 运算符。</value>
+  </data>
+  <data name="GetCommandShowCommandInfoParamError" xml:space="preserve">
+    <value>不能同时指定 ShowCommandInfo 和 Syntax 参数。</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOn" xml:space="preserve">
+    <value>启用实验性功能 '{0}' 时，将禁用此脚本命令。</value>
+  </data>
+  <data name="ScriptDisabledWhenFeatureOff" xml:space="preserve">
+    <value>禁用实验性功能 '{0}' 时，将禁用此脚本命令。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/EnumExpressionEvaluatorStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/EnumExpressionEvaluatorStrings.zh-Hans.resx
new file mode 100644
index 00000000000..8faa9a881bd
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/EnumExpressionEvaluatorStrings.zh-Hans.resx
@@ -0,0 +1,148 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EmptyInputString" xml:space="preserve">
+    <value>The input expression must not be empty. Specify at least one identifier name in each input expression. </value>
+  </data>
+  <data name="EmptyTokenString" xml:space="preserve">
+    <value>Unable to match an empty identifier name to a valid enumerator name. Specify one of the following enumerator names and retry: {0}.</value>
+  </data>
+  <data name="InvalidGenericType" xml:space="preserve">
+    <value>The generic type specified for the expression must represent an enum. Specify a valid enum type. </value>
+  </data>
+  <data name="MultipleEnumNameMatch" xml:space="preserve">
+    <value>The identifier name {0} cannot be processed because it is either too similar or identical to the following enumerator names: {1}. Use a more specific identifier name.</value>
+  </data>
+  <data name="NoEnumNameMatch" xml:space="preserve">
+    <value>Unable to match the identifier name {0} to a valid enumerator name. Specify one of the following enumerator names and try again:
+{1}</value>
+  </data>
+  <data name="NoIdentifierGroupingAllowed" xml:space="preserve">
+    <value>Use of parentheses is not valid in the expression because identifier grouping is not allowed. Try removing the parentheses, or if a subexpression is enclosed, try expanding the expression.</value>
+  </data>
+  <data name="SyntaxErrorBinaryOperatorExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. Only an OR (,) operator or AND (+) operator is expected after an identifier name.</value>
+  </data>
+  <data name="SyntaxErrorIdentifierExpected" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token after a NOT (!) operator. An identifier name is expected after a NOT (!) operator.</value>
+  </data>
+  <data name="SyntaxErrorUnexpectedBinaryOperator" xml:space="preserve">
+    <value>Unable to parse the expression due to an unexpected token. An identifier name or a NOT (!) operator is expected at the start of the expression, or after an OR (,) operator or an AND (+) operator. Also, an expression must not end with an OR (,), AND (+) or NOT (!) operator.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ErrorCategoryStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ErrorCategoryStrings.zh-Hans.resx
new file mode 100644
index 00000000000..41f61a889c5
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ErrorCategoryStrings.zh-Hans.resx
@@ -0,0 +1,219 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CloseError" xml:space="preserve">
+    <value>CloseError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeadlockDetected" xml:space="preserve">
+    <value>Deadlock detected: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="DeviceError" xml:space="preserve">
+    <value>DeviceError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidArgument" xml:space="preserve">
+    <value>InvalidArgument: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidData" xml:space="preserve">
+    <value>InvalidData: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidOperation" xml:space="preserve">
+    <value>InvalidOperation: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidResult" xml:space="preserve">
+    <value>InvalidResult: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidType" xml:space="preserve">
+    <value>InvalidType: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="MetadataError" xml:space="preserve">
+    <value>MetadataError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotImplemented" xml:space="preserve">
+    <value>NotImplemented: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotInstalled" xml:space="preserve">
+    <value>NotInstalled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ObjectNotFound" xml:space="preserve">
+    <value>ObjectNotFound: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OpenError" xml:space="preserve">
+    <value>OpenError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationStopped" xml:space="preserve">
+    <value>OperationStopped: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="OperationTimeout" xml:space="preserve">
+    <value>OperationTimeout: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>ParserError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="PermissionDenied" xml:space="preserve">
+    <value>PermissionDenied: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ReadError" xml:space="preserve">
+    <value>ReadError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceBusy" xml:space="preserve">
+    <value>ResourceBusy: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceExists" xml:space="preserve">
+    <value>ResourceExists: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ResourceUnavailable" xml:space="preserve">
+    <value>ResourceUnavailable: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SyntaxError" xml:space="preserve">
+    <value>SyntaxError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="WriteError" xml:space="preserve">
+    <value>WriteError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="FromStdErr" xml:space="preserve">
+    <value>FromStdErr: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="SecurityError" xml:space="preserve">
+    <value>SecurityError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ProtocolError" xml:space="preserve">
+    <value>ProtocolError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="ConnectionError" xml:space="preserve">
+    <value>ConnectionError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="AuthenticationError" xml:space="preserve">
+    <value>AuthenticationError: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="LimitsExceeded" xml:space="preserve">
+    <value>LimitsExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="QuotaExceeded" xml:space="preserve">
+    <value>QuotaExceeded: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotEnabled" xml:space="preserve">
+    <value>NotEnabled: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="NotSpecified" xml:space="preserve">
+    <value>NotSpecified: ({1}:{2}) [{0}], {3}</value>
+  </data>
+  <data name="InvalidErrorCategory" xml:space="preserve">
+    <value>Unrecognized error category {4}: ({1}:{2}) [{0}], {3}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ErrorPackage.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ErrorPackage.zh-Hans.resx
new file mode 100644
index 00000000000..9a2d6ec069f
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ErrorPackage.zh-Hans.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Ellipsize" xml:space="preserve">
+    <value>{0}…{1}</value>
+  </data>
+  <data name="ErrorDetailsEmptyTemplate" xml:space="preserve">
+    <value>Error text is empty for error "{0}" : "{1}"</value>
+  </data>
+  <data name="RedirectedException" xml:space="preserve">
+    <value>Object "{0}" is reported as an error.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not supported for an ActionPreference variable. The provided value should be used only as a value for a preference parameter, and has been replaced by the default value. For more information, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ActionPreferenceReservedForFutureUseError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+  <data name="ReservedActionPreferenceReplacedError" xml:space="preserve">
+    <value>The {0} ActionPreference value is reserved for future use and is not supported at this time. It has been replaced in your {1} variable by the default value of {2}. For more information about preference variables, see the Help topic, "about_Preference_Variables."</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/EtwLoggingStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/EtwLoggingStrings.zh-Hans.resx
new file mode 100644
index 00000000000..aad2de1af6a
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/EtwLoggingStrings.zh-Hans.resx
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandStateChange" xml:space="preserve">
+    <value>Command {0} is {1}.</value>
+  </data>
+  <data name="EngineStateChange" xml:space="preserve">
+    <value>Engine state changed from {0} to {1}.</value>
+  </data>
+  <data name="ErrorRecordId" xml:space="preserve">
+    <value>Fully Qualified Error ID = {0}</value>
+  </data>
+  <data name="ErrorRecordMessage" xml:space="preserve">
+    <value>Error Message = {0}</value>
+  </data>
+  <data name="ErrorRecordRecommendedAction" xml:space="preserve">
+    <value>Recommended Action = {0}</value>
+  </data>
+  <data name="ExecutionPolicyName" xml:space="preserve">
+    <value>Execution Policy</value>
+  </data>
+  <data name="JobCommand" xml:space="preserve">
+    <value>Job Command = {0}</value>
+  </data>
+  <data name="JobId" xml:space="preserve">
+    <value>Job Id = {0}</value>
+  </data>
+  <data name="JobInstanceId" xml:space="preserve">
+    <value>Job Instance Id = {0}</value>
+  </data>
+  <data name="JobLocation" xml:space="preserve">
+    <value>Job Location = {0}</value>
+  </data>
+  <data name="JobName" xml:space="preserve">
+    <value>Job Name = {0}</value>
+  </data>
+  <data name="JobState" xml:space="preserve">
+    <value>Job State = {0}</value>
+  </data>
+  <data name="LogContextCommandName" xml:space="preserve">
+    <value>        Command Name = </value>
+  </data>
+  <data name="LogContextCommandPath" xml:space="preserve">
+    <value>        Command Path = </value>
+  </data>
+  <data name="LogContextCommandType" xml:space="preserve">
+    <value>        Command Type = </value>
+  </data>
+  <data name="LogContextEngineVersion" xml:space="preserve">
+    <value>        Engine Version = </value>
+  </data>
+  <data name="LogContextHostId" xml:space="preserve">
+    <value>        Host ID = </value>
+  </data>
+  <data name="LogContextHostName" xml:space="preserve">
+    <value>        Host Name = </value>
+  </data>
+  <data name="LogContextHostApplication" xml:space="preserve">
+    <value>        Host Application = </value>
+  </data>
+  <data name="LogContextHostVersion" xml:space="preserve">
+    <value>        Host Version = </value>
+  </data>
+  <data name="LogContextPipelineId" xml:space="preserve">
+    <value>        Pipeline ID = </value>
+  </data>
+  <data name="LogContextRunspaceId" xml:space="preserve">
+    <value>        Runspace ID = </value>
+  </data>
+  <data name="LogContextScriptName" xml:space="preserve">
+    <value>        Script Name = </value>
+  </data>
+  <data name="LogContextSequenceNumber" xml:space="preserve">
+    <value>        Sequence Number = </value>
+  </data>
+  <data name="LogContextSeverity" xml:space="preserve">
+    <value>        Severity = </value>
+  </data>
+  <data name="LogContextShellId" xml:space="preserve">
+    <value>        Shell ID = </value>
+  </data>
+  <data name="LogContextTime" xml:space="preserve">
+    <value>        Time = </value>
+  </data>
+  <data name="LogContextUser" xml:space="preserve">
+    <value>        User = </value>
+  </data>
+  <data name="LogContextConnectedUser" xml:space="preserve">
+    <value>        Connected User = </value>
+  </data>
+  <data name="NullJobName" xml:space="preserve">
+    <value>NULL Job</value>
+  </data>
+  <data name="ProviderNameString" xml:space="preserve">
+    <value>Provider name</value>
+  </data>
+  <data name="ProviderStateChange" xml:space="preserve">
+    <value>Provider {0} changed state to {1}.</value>
+  </data>
+  <data name="ScriptStateChange" xml:space="preserve">
+    <value>Script execution is {0}.</value>
+  </data>
+  <data name="SettingChange" xml:space="preserve">
+    <value>Variable {0} changed from {1} to {2}.</value>
+  </data>
+  <data name="SettingChangeNoPrevious" xml:space="preserve">
+    <value>Variable {0} changed to {1}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/EventResource.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/EventResource.zh-Hans.resx
new file mode 100644
index 00000000000..6cbec7023a5
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/EventResource.zh-Hans.resx
@@ -0,0 +1,924 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    This code was generated by the tools\ResxGen\ResxGen.ps1 run against PowerShell.Core.Instrumentation.man.
+    To add or change logged events and the associated resources, edit PowerShell.Core.Instrumentation.man
+    then rerun ResxGen.ps1 to produce an updated CS and Resx file.
+-->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MissingEventIdMessage" xml:space="preserve">
+    <value>未找到事件 ID PowerShell.Core.Instrumentation.man 的消息。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobStarted" xml:space="preserve">
+    <value>计划作业 {0} 已于 {1}开始
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobCompleted" xml:space="preserve">
+    <value>计划作业 {0} 已于 {1}完成，状态为 {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ScheduledJobException" xml:space="preserve">
+    <value>计划作业异常 {0}:
+ 消息: {1}
+ StackTrace: {2}
+ InnerException: {3}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureInvalidName" xml:space="preserve">
+    <value>实验性功能初始化: 忽略配置文件中的实验性功能 '{0}'。{1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ExperimentalFeatureReadConfigError" xml:space="preserve">
+    <value>实验性功能初始化: 未能读取配置文件。
+ 异常: {0}
+ 消息: {1}
+ StackTrace: {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginStarted" xml:space="preserve">
+    <value>已加载工作流插件。
+ 	 EndpointName: {0}
+ 	 用户: {1}
+ 	 HostingMode: {2}
+ 	 协议: {3}
+ 	 配置:
+ {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionStarted" xml:space="preserve">
+    <value>工作流执行已开始。
+ 	 WorkflowId: {0}
+ 	 ManagedNodes: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowStateChanged" xml:space="preserve">
+    <value>已更改工作流状态。
+ 	 WorkflowId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRequestedToShutdown" xml:space="preserve">
+    <value>已请求关闭工作流插件。
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPluginRestarted" xml:space="preserve">
+    <value>已重启工作流插件。
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResuming" xml:space="preserve">
+    <value>正在恢复工作流。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowQuotaViolationDetected" xml:space="preserve">
+    <value>已超出为终结点设置的配额限制。
+ 	 EndpointName: {0}
+ 	 ConfigName: {1}
+ 	 AllowedValue: {2}
+ 	 ValueInQuestion: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowWorkflowsResumed" xml:space="preserve">
+    <value>工作流已恢复。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspacePoolCreated" xml:space="preserve">
+    <value>已创建工作流运行空间池。
+ 	 WorkflowId: {0}
+ 	 ManagedNode: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionQueued" xml:space="preserve">
+    <value>活动已排队等待执行。
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionStarted" xml:space="preserve">
+    <value>活动执行已开始。
+ 	 ActivityName: {0}
+ 	 ActivityTypeName: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportingFromXaml" xml:space="preserve">
+    <value>正在从 XAML 文件导入工作流。
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportedFromXaml" xml:space="preserve">
+    <value>已从 XAML 文件导入工作流。
+ 	 WorkflowId: {0}
+ 	 XamlFile: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlError" xml:space="preserve">
+    <value>由于出现错误，无法从 XAML 文件导入工作流。
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationStarted" xml:space="preserve">
+    <value>已启动工作流验证。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedSuccessfully" xml:space="preserve">
+    <value>工作流验证成功。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlValidationFinishedWithError" xml:space="preserve">
+    <value>工作流验证失败，出现错误。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidated" xml:space="preserve">
+    <value>已验证工作流活动。
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowImportFromXamlActivityValidationFailed" xml:space="preserve">
+    <value>无法验证工作流活动。
+ 	 WorkflowId: {0}
+ 	 ActivityDisplayName: {1}
+ 	 ActivityTypeName: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFailed" xml:space="preserve">
+    <value>活动执行失败。
+ 	 WorkflowId: {0}
+ 	 ActivityName: {1}
+ 	 FailureDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceAvailabilityChanged" xml:space="preserve">
+    <value>运行空间可用性已更改。
+ 	 RunspaceId: {0}
+ 	 可用性: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowRunspaceStateChanged" xml:space="preserve">
+    <value>已更改运行空间状态。
+ 	 RunspaceId: {0}
+ 	 NewState: {1}
+ 	 OldState: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedForExecution" xml:space="preserve">
+    <value>已加载工作流以供执行。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowUnloaded" xml:space="preserve">
+    <value>已卸载工作流。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCancelled" xml:space="preserve">
+    <value>工作流执行已取消。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowAborted" xml:space="preserve">
+    <value>工作流执行已中止。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowCleanup" xml:space="preserve">
+    <value>已执行工作流清理操作。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowLoadedFromDisk" xml:space="preserve">
+    <value>已从磁盘加载持久化工作流。
+ 	 WorkflowId: {0}
+ 	 路径: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowDeletedFromDisk" xml:space="preserve">
+    <value>已从磁盘中删除工作流数据。
+ 	 WorkflowId: {0}
+ 	 路径: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PRemoveJobStarted" xml:space="preserve">
+    <value>正在开始移除作业。
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobStateChanged" xml:space="preserve">
+    <value>已更改作业状态。
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 NewState: {2}
+ 	 OldState: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobError" xml:space="preserve">
+    <value>作业错误。
+ 	 JobId: {0}
+ 	 WorkflowId: {1}
+ 	 ErrorDescription: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowJobCreated" xml:space="preserve">
+    <value>已为工作流创建作业(子作业)。
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 ChildWorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParentJobCreated" xml:space="preserve">
+    <value>已为工作流创建父作业。
+ 	 JobId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobCreationCompleted" xml:space="preserve">
+    <value>已创建执行工作流所需的所有作业。
+ 	 JobId: {0}
+ 	 WorkflowId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoved" xml:space="preserve">
+    <value>已为工作流移除子作业。
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PJobRemoveError" xml:space="preserve">
+    <value>移除作业时出错。
+ 	 ParentJobId: {0}
+ 	 ChildJobId: {1}
+ 	 WorkflowId: {2}
+ 	 错误: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PLoadingWorkflowForExecution" xml:space="preserve">
+    <value>正在加载工作流以供执行。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionFinished" xml:space="preserve">
+    <value>工作流执行已完成。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PCancellingWorkflowExecution" xml:space="preserve">
+    <value>正在取消工作流执行。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PAbortingWorkflowExecution" xml:space="preserve">
+    <value>正在中止工作流执行。
+ 	 WorkflowId: {0}
+ 	 原因: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PUnloadingWorkflow" xml:space="preserve">
+    <value>正在卸载工作流。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownStarted" xml:space="preserve">
+    <value>强制工作流关闭已开始。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownFinished" xml:space="preserve">
+    <value>强制工作流关闭已完成。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PForcedWorkflowShutdownError" xml:space="preserve">
+    <value>强制关闭工作流时出错。
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPersistingWorkflow" xml:space="preserve">
+    <value>正在将工作流持久保存到磁盘。
+ 	 WorkflowId: {0}
+ 	 PersistPath: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowPersisted" xml:space="preserve">
+    <value>已将工作流持久保存到磁盘。
+ 	 WorkflowId: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowActivityExecutionFinished" xml:space="preserve">
+    <value>活动执行已完成。
+ 	 ActivityName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowExecutionError" xml:space="preserve">
+    <value>工作流执行错误。
+ 	 WorkflowId: {0}
+ 	 ErrorDescription: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointRegistered" xml:space="preserve">
+    <value>已注册新的 PowerShell 终结点。
+ 	 EndpointName: {0}
+ 	 EndpointType: {1}
+ 	 RegisteredBy: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointModified" xml:space="preserve">
+    <value>已修改终结点配置。
+ 	 EndpointName: {0}
+ 	 ModifiedBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointUnregistered" xml:space="preserve">
+    <value>终结点配置已注销。
+ 	 EndpointName: {0}
+ 	 UnregisteredBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointDisabled" xml:space="preserve">
+    <value>已禁用终结点配置。
+ 	 EndpointName: {0}
+ 	 DisabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PEndpointEnabled" xml:space="preserve">
+    <value>已启用终结点配置。
+ 	 EndpointName: {0}
+ 	 EnabledBy: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3POutOfProcessRunspaceStarted" xml:space="preserve">
+    <value>已启动进程外运行空间。
+ 	 命令: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PParameterSplattingWasPerformed" xml:space="preserve">
+    <value>在工作流执行期间执行了参数展开。
+ 	 参数: {0}
+ 	 计算机: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PWorkflowEngineStarted" xml:space="preserve">
+    <value>已启动工作流引擎。
+ 	 EndpointName: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PWORKFLOW_MANAGER_CHECKPOINTPATH" xml:space="preserve">
+    <value>工作流管理器已使用以下值实例化
+ 	 CheckpointPath: {0}
+ 	 ConfigProviderId: {1}
+ 	 UserName: {2}
+ 	 Path: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_HOSTNAMERESOLVE" xml:space="preserve">
+    <value>计算机名称 $null 或 . 解析为 LocalHost</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SCHEMERESOLVE" xml:space="preserve">
+    <value>正在解析为默认方案 http</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_CMDLETS_SHELLRESOLVE" xml:space="preserve">
+    <value>远程 shell 名称已解析为默认 PowerShellCore</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_COMMAND_HEALTH" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ENGINE_HEALTH" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PROVIDER_HEALTH" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PIPELINE_DETAIL" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_CREATE_DETAIL" xml:space="preserve">
+    <value>正在创建脚本块文本({0}/{1}):
+{2}
+
+ScriptBlock ID: {3}
+路径: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_START_DETAIL" xml:space="preserve">
+    <value>已开启对 ScriptBlock ID 的调用: {0}
+运行空间 ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_SCRIPTBLOCK_INVOKE_COMPLETE_DETAIL" xml:space="preserve">
+    <value>已完成对 ScriptBlock ID 的调用: {0}
+运行空间 ID: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_COMMAND_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_PROVIDER_LIFECYCLE" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SETTINGS" xml:space="preserve">
+    <value>{2}
+
+上下文:
+{0}
+
+用户数据:
+{1}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_WriteTransferEvent" xml:space="preserve">
+    <value>正在关联活动 ID。
+ 	 CurrentActivityId: {0}
+ 	 ParentActivityId: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_ENGINE_TRACE" xml:space="preserve">
+    <value>类名 = {0}
+方法名称 = {1}
+工作流 GUID = {2}
+消息 = {3}
+{4}
+活动名称 = {5}
+活动 GUID = {6}
+参数 = {7}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_CONSTRUCTOR" xml:space="preserve">
+    <value>正在创建 Runspace 对象
+ 	 实例 ID: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_CONSTRUCTOR" xml:space="preserve">
+    <value>正在创建 RunspacePool 对象
+ 	 InstanceId {0}
+ 	 MinRunspaces {1}
+ 	 MaxRunspaces {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_OPEN" xml:space="preserve">
+    <value>正在打开 RunspacePool</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>正在修改活动 ID 并建立关联</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_RUNSPACE_STATE_CHANGE" xml:space="preserve">
+    <value>运行空间状态已更改为 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_RUNSPACE_CREATE_RETRY" xml:space="preserve">
+    <value>正在尝试为会话 ID {2} 上的错误代码 {1} 进行第 {0} 次会话创建重试</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_START" xml:space="preserve">
+    <value>PowerShell 已在 AppDomain {1} 中的进程 {0} 上开启 IPC 侦听线程。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_END" xml:space="preserve">
+    <value>PowerShell 已在 AppDomain {1} 中的进程 {0} 上结束 IPC 侦听线程。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_LISTENER_ERROR" xml:space="preserve">
+    <value>在 PowerShell IPC 侦听线程中，AppDomain {1} 中的进程 {0} 上发生错误。 错误消息: {2}。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_CONNECT" xml:space="preserve">
+    <value>PowerShell IPC 在 AppDomain {1} 中的进程 {0} 上为用户 {2} 建立连接。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_REMOTE_NAMEDPIPE_DISCONNECT" xml:space="preserve">
+    <value>PowerShell IPC 在 AppDomain {1} 中的进程 {0} 上为用户 {2} 断开连接。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_PORT" xml:space="preserve">
+    <value>端口已解析为 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_APPNAME" xml:space="preserve">
+    <value>AppName 已解析为 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_COMPUTERNAME" xml:space="preserve">
+    <value>ComputerName 已解析为 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_SCHEME" xml:space="preserve">
+    <value>方案为 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_TEST" xml:space="preserve">
+    <value>测试分析消息</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACE_WSMANCONNECTIONINFO" xml:space="preserve">
+    <value>连接参数包括
+ Connection URI: {0}
+ Resource URI: {1}
+ User: {2}
+ OpenTimeout: {3}
+ IdleTimeout: {4}
+ CancelTimeout: {5}
+ AuthenticationMechanism: {6}
+ Thumb Print: {7}
+ MaxUriRedirectionCount: {8}
+ MaxReceivedDataSizePerCommand: {0}0
+ MaxReceivedObjectSize: {0}1</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RUNSPACEPOOL_TRANSFER" xml:space="preserve">
+    <value>正在修改活动 ID 并建立关联</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RCVDOBJ" xml:space="preserve">
+    <value>已接收的对象，该对象的运行空间 ID: {0} 命令 ID: {1} 目标: {2} DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>appdomain 中发生未经处理的异常。
+异常类型: {0}
+异常消息: {1}
+异常 StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_ERROR" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。WSMan 报告了一个错误，错误代码为: {2}。
+ 错误消息: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_APPDOMAIN_UNHANDLED_EXCEPTION" xml:space="preserve">
+    <value>appdomain 中发生未经处理的异常。
+异常类型: {0}
+异常消息: {1}
+异常 StackTrace: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_TRANSPORT_ERROR" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。WSMan 报告了一个错误，错误代码为: {2}。
+ 错误消息: {3}
+ StackTrace: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CONNECT" xml:space="preserve">
+    <value>运行空间 ID {0}。正在使用 WSMan Create Shell 建立连接</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CONNECT_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID {0}。已收到 WSMan Create Shell 的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE" xml:space="preserve">
+    <value>运行空间 ID: {0}。正在使用 WSManCloseShell 关闭 shell</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SHELL_CLOSE_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID: {0}。已收到 WSManCloseShell 的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。正在发送大小为 {2} 的数据</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SEND_DATA_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。已收到 WSManSendShellInputEx 的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。正在使用 WSManReceiveShellOutputEx 发送接收请求</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_RECEIVE_DATA_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。已接收大小为 {2} 的数据。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT" xml:space="preserve">
+    <value>运行空间 ID {0} 管道 ID {1}。正在使用 WSManRunShellCommandEx 建立命令连接</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CONNECT_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID {0} 管道 ID {1}。已收到命令连接的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID {1}。正在关闭命令的传输</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_CMD_CLOSE_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID {1}。已收到命令关闭的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID {1}。正在使用 WSManSignalShellEx 来通过代码 {2} 发送信号</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SIGNAL_CALLBACK" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID {1}。已收到 WSManSignalShellEx 的回叫</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_URI_REDIRECTION" xml:space="preserve">
+    <value>运行空间 ID: {0}。连接正在重定向到 URI: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_TRANSPORT_SERVER_SEND_DATA" xml:space="preserve">
+    <value>运行空间 ID: {0} 管道 ID: {1}。服务器正在向客户端发送大小为 {2} 的数据。DataType: {3} TargetInterface: {4}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_SERVER_REMOTESESSION" xml:space="preserve">
+    <value>请求 {0}。正在创建服务器远程会话。UserName: {1} 自定义 Shell ID: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_CONTEXT" xml:space="preserve">
+    <value>正在报告请求的上下文: {0} 已报告的上下文: {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_REPORT_OPERATION_COMPLETE" xml:space="preserve">
+    <value>针对请求 {0} 的报告操作已完成
+ 错误代码: {1}
+ 错误消息: {2}
+ StackTrace: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_CREATE_COMMAND_REMOTESESSION" xml:space="preserve">
+    <value>Shell 上下文 {0}。请求 ID {1}。正在创建用于运行命令的命令会话。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_STOP_COMMAND" xml:space="preserve">
+    <value>Shell 上下文 {0} 命令上下文 {1} 请求 ID {2}。停止命令。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVED_DATA" xml:space="preserve">
+    <value>Shell 上下文 {0} 命令上下文 {1} 请求 ID {2}。已收到来自客户端的数据。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_RECEIVE_REQUEST" xml:space="preserve">
+    <value>Shell 上下文 {0} 命令上下文 {1} 请求 ID {2}。客户端发送了接收请求，以便服务器可以发送数据。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERVER_CLOSE_OPERATION" xml:space="preserve">
+    <value>Shell 上下文 {0} 命令上下文 {1} IsReceiveOperation {2}。已收到关闭操作请求。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_ASSEMBLY" xml:space="preserve">
+    <value>正在加载 shell ID 为 {1} 的自定义 shell 的程序集 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_LOAD_PSCUSTOMSHELL_TYPE" xml:space="preserve">
+    <value>正在为 shell ID 为 {1} 的自定义 shell 加载类型 {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_RECEIVED_FRAGMENT" xml:space="preserve">
+    <value>已收到远程处理片段。
+ 	 对象 ID: {0}
+ 	 片段 ID: {1}
+ 	 起始标志: {2}
+ 	 结束标志: {3}
+ 	 有效负载长度: {4}
+ 	 有效负载数据: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SENT_FRAGMENT" xml:space="preserve">
+    <value>已发送远程处理片段。
+ 	 对象 ID: {0}
+ 	 片段 ID: {1}
+ 	 起始标志: {2}
+ 	 结束标志: {3}
+ 	 有效负载长度: {4}
+ 	 有效负载数据: {5}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SHUTTING_DOWN" xml:space="preserve">
+    <value>正在关闭 WinRM 服务。</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_SUCCESS" xml:space="preserve">
+    <value>已成功解除冻结对象。
+ 	 反序列化类型名称: {0}
+ 	 通过强制转换为类型 {1} 解除冻结
+ 	 解除冻结的对象的类型为: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_REHYDRATION_FAILURE" xml:space="preserve">
+    <value>未能解除冻结对象。
+ 	 反序列化类型名称: {0}
+ 	 通过强制转换为类型 {1} 解除冻结
+ 	 类型强制转换异常: {2}
+ 	 类型强制转换内部异常: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_DEPTH_OVERRIDE" xml:space="preserve">
+    <value>已覆盖序列化深度。
+ 	 序列化类型名称: {0}
+ 	 原始深度: {1}
+ 	 覆盖后的深度: {2}
+ 	 顶层以下的当前深度: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MODE_OVERRIDE" xml:space="preserve">
+    <value>已覆盖序列化模式。
+ 	 序列化类型名称: {0}
+ 	 覆盖后的模式: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SCRIPT_PROPERTY_WITHOUT_RUNSPACE" xml:space="preserve">
+    <value>已跳过脚本属性的序列化，因为没有可用于计算属性的运行空间。
+ 	 属性名称: {0}
+ 	 属性所有者的类型名称: {1}
+ 	 Getter 脚本: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_PROPERTY_GETTER_FAILED" xml:space="preserve">
+    <value>已跳过属性序列化，因为属性 getter 失败。
+ 	 属性名称: {0}
+ 	 属性所有者的类型名称: {1}
+ 	 来自属性 getter 的异常: {2}
+ 	 来自属性 getter 的内部异常: {3}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_ENUMERATION_FAILED" xml:space="preserve">
+    <value>可能无法完成可枚举对象的序列化，因为枚举的对象引发了异常。
+ 	 正在枚举的对象的类型: {0}
+ 	 异常: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_TOSTRING_FAILED" xml:space="preserve">
+    <value>序列化调用了对象的 ToString 方法，但该方法失败。
+ 	 对象类型: {0}
+ 	 异常: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_MAX_DEPTH_WHEN_SERIALIZING" xml:space="preserve">
+    <value>已达到顶层以下的最大深度，正在强制将对象序列化为字符串。
+ 	 最大深度处的对象类型: {0}
+ 	 最大深度处的属性名称: {1}
+ 	 深度: {2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_XMLEXCEPTION_WHEN_DESERIALIZING" xml:space="preserve">
+    <value>反序列化程序引发了 XmlException(很可能表明 clixml 格式不正确)。
+ 	 行号: {0} 行位置: {1}
+ 	 异常:{2}</value>
+</data>
+  <data name="PS_PROVIDEReventE_A_SERIALIZER_SPECIFIC_PROPERTY_MISSING" xml:space="preserve">
+    <value>指定属性的序列化失败，因为指定的某个属性缺失。
+ 	 对象类型: {0}
+ 	 属性名称: {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStart" xml:space="preserve">
+    <value>正在启动 PowerShell 控制台</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_PowershellConsoleStartupStop" xml:space="preserve">
+    <value>PowerShell 控制台已准备好接受用户输入</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_DebugMessage" xml:space="preserve">
+    <value>{0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_ErrorRecord" xml:space="preserve">
+    <value>跟踪错误记录:
+ 消息: {0}
+ CategoryInfo.Category: {1}
+ CategoryInfo.Reason : {2}
+ CategoryInfo.TargetName : {3}
+ FullyQualifiedErrorId: {4}
+ 异常详细信息:
+ 消息 : {5}
+ 堆栈跟踪: {6}
+ InnerException {7}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Exception" xml:space="preserve">
+    <value>异常:
+ 消息: {0}
+ StackTrace: {1}
+ InnerException : {2}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_Powershell_PSObject" xml:space="preserve">
+    <value>跟踪 PSObject</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_Powershell_Job" xml:space="preserve">
+    <value>跟踪作业:
+ ID: {0}
+ InstanceId: {1}
+ 名称: {2}
+ 位置: {3}
+ 状态: {4}
+ 命令: {5}
+</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE" xml:space="preserve">
+    <value>跟踪信息:
+ {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_MESSAGE2" xml:space="preserve">
+    <value>跟踪信息:
+ {0} {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginStartWorkflowApplication" xml:space="preserve">
+    <value>开始 ImportWorkflowCommand::StartWorkflowApplication。正在开始工作流函数的调用。跟踪 Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndStartWorkflowApplication" xml:space="preserve">
+    <value>结束 ImportWorkflowCommand::StartWorkflowApplication。正在结束工作流函数的调用。跟踪 Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginCreateNewJob" xml:space="preserve">
+    <value>开始在 ImportWorkflowCommand::StartWorkflowApplication 中创建新作业。跟踪 Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndCreateNewJob" xml:space="preserve">
+    <value>结束在 ImportWorkflowCommand::StartWorkflowApplication 中创建新作业。跟踪 Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PTrackingGuidContainerParentJobCorrelation" xml:space="preserve">
+    <value>结束在 ImportWorkflowCommand::StartWorkflowApplication 中创建新作业。跟踪 Guid {0} : ContainerParentJob Guid {1}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginJobLogic" xml:space="preserve">
+    <value>开始 JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndJobLogic" xml:space="preserve">
+    <value>结束 JobLogic ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginWorkflowExecution" xml:space="preserve">
+    <value>开始 WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndWorkflowExecution" xml:space="preserve">
+    <value>结束 WorkflowExecution ContainerParentJob Guid {0}</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PChildWorkflowJobAddition" xml:space="preserve">
+    <value>已将 Guid 为 {0} 的 WorkflowJob 添加到 Guid 为 {1} 的 ContainerParentJob</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PProxyJobRemoteJobAssociation" xml:space="preserve">
+    <value>Guid 为 {0} 的 ProxyJob 与 Guid 为 {1} 的远程 ContainerParentJob 关联</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginContainerParentJobExecution" xml:space="preserve">
+    <value>开始 Guid 为 {0} 的 ContainerParentJob 执行</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndContainerParentJobExecution" xml:space="preserve">
+    <value>结束 Guid 为 {0} 的 ContainerParentJob 执行</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobExecution" xml:space="preserve">
+    <value>开始 Guid 为 {0} 的代理作业执行</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobExecution" xml:space="preserve">
+    <value>结束 Guid 为 {0} 的代理作业执行</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyJobEventHandler" xml:space="preserve">
+    <value>开始 Guid 为 {0} 的代理作业的 StateChanged 事件处理程序</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyJobEventHandler" xml:space="preserve">
+    <value>结束 Guid 为 {0} 的代理作业的 StateChanged 事件处理程序</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginProxyChildJobEventHandler" xml:space="preserve">
+    <value>开始 Guid 为 {0} 的代理子作业的 StateChanged 事件处理程序</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndProxyChildJobEventHandler" xml:space="preserve">
+    <value>结束 Guid 为 {0} 的代理子作业的 StateChanged 事件处理程序</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PBeginRunGarbageCollection" xml:space="preserve">
+    <value>开始运行垃圾回收</value>
+</data>
+  <data name="PS_PROVIDEReventE_D_M3PEndRunGarbageCollection" xml:space="preserve">
+    <value>结束运行垃圾回收</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_M3PPERSISTENCE_STORE_MAXSIZE_REACHED" xml:space="preserve">
+    <value>持久性存储已达到指定的最大大小</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteScript" xml:space="preserve">
+    <value>Windows PowerShell ISE 已开始运行脚本文件 {0}。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEExecuteSelection" xml:space="preserve">
+    <value>Windows PowerShell ISE 已开始从文件 {0} 运行用户选择的脚本。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopCommand" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在停止当前命令。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEResumeDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在恢复调试程序。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEStopDebugger" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在停止调试程序。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepInto" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在进入调试过程。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOver" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在跳过调试过程。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDebuggerStepOut" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在退出调试过程。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE 将启用所有断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE 将禁用所有断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveAllBreakpoints" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在移除所有断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISESetBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在为文件 {1} 的第 {0} 行设置断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISERemoveBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在为文件 {1} 的第 {0} 行移除断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEEnableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在为文件 {1} 的第 {0} 行启用断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEDisableBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE 正在为文件 {1} 的第 {0} 行禁用断点。</value>
+</data>
+  <data name="PS_PROVIDEReventE_O_ISEHitBreakpoint" xml:space="preserve">
+    <value>Windows PowerShell ISE 已在文件 {1} 的第 {0} 行命中断点。</value>
+</data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/EventingResources.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/EventingResources.zh-Hans.resx
new file mode 100644
index 00000000000..65cc0a24d5d
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/EventingResources.zh-Hans.resx
@@ -0,0 +1,141 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NonVoidDelegateNotSupported" xml:space="preserve">
+    <value>无法注册指定的事件。不支持需要返回值的事件。</value>
+  </data>
+  <data name="CouldNotFindEvent" xml:space="preserve">
+    <value>无法注册指定的事件。名为 '{0}' 的事件不存在。</value>
+  </data>
+  <data name="WinRTEventsNotSupported" xml:space="preserve">
+    <value>PowerShell 无法订阅 Windows RT 事件。</value>
+  </data>
+  <data name="ReservedIdentifier" xml:space="preserve">
+    <value>无法注册指定的事件。已为 PowerShell 引擎保留事件源标识符 '{0}'。</value>
+  </data>
+  <data name="RemoteOperationNotSupported" xml:space="preserve">
+    <value>远程实例不支持此操作。</value>
+  </data>
+  <data name="ActionAndForwardNotSupported" xml:space="preserve">
+    <value>在转发事件时，不支持此操作。</value>
+  </data>
+  <data name="SubscriberExists" xml:space="preserve">
+    <value>无法订阅指定事件。源标识符为 '{0}' 的订阅者已存在。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ExperimentalFeatureStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ExperimentalFeatureStrings.zh-Hans.resx
new file mode 100644
index 00000000000..94c821d545b
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ExperimentalFeatureStrings.zh-Hans.resx
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ExperimentalFeatureNameNotFound" xml:space="preserve">
+    <value>No experimental feature was found that matched the name '{0}'.</value>
+  </data>
+  <data name="ExperimentalFeaturePending" xml:space="preserve">
+    <value>Enabling and disabling experimental features do not take effect until next start of PowerShell.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ExtendedTypeSystem.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ExtendedTypeSystem.zh-Hans.resx
new file mode 100644
index 00000000000..5a75f564db4
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ExtendedTypeSystem.zh-Hans.resx
@@ -0,0 +1,406 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MemberAlreadyPresent" xml:space="preserve">
+    <value>The member "{0}" is already present.</value>
+  </data>
+  <data name="MemberAlreadyPresentFromTypesXml" xml:space="preserve">
+    <value>The member "{0}" is already present from the extended type data file.</value>
+  </data>
+  <data name="MemberNotPresent" xml:space="preserve">
+    <value>The member "{0}" is not present.</value>
+  </data>
+  <data name="ExceptionWhenSetting" xml:space="preserve">
+    <value>Exception setting "{0}": "{1}"</value>
+  </data>
+  <data name="ExceptionWhenGetting" xml:space="preserve">
+    <value>Exception getting "{0}": "{1}"</value>
+  </data>
+  <data name="EnumerationException" xml:space="preserve">
+    <value>The following exception occurred while trying to enumerate the collection: "{0}".</value>
+  </data>
+  <data name="AccessMemberOutsidePSObject" xml:space="preserve">
+    <value>Cannot access member "{0}" outside of a PSObject.</value>
+  </data>
+  <data name="ChangeStaticMember" xml:space="preserve">
+    <value>Cannot change the member created from the type configuration: "{0}".</value>
+  </data>
+  <data name="ReservedMemberName" xml:space="preserve">
+    <value>The member name "{0}" is reserved.</value>
+  </data>
+  <data name="CannotChangeReservedMember" xml:space="preserve">
+    <value>"{0}" cannot be changed.</value>
+  </data>
+  <data name="MethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" with "{1}" argument(s): "{2}"</value>
+  </data>
+  <data name="CopyToInvocationException" xml:space="preserve">
+    <value>An exception was thrown when trying to call "{0}" to extract the contents of an object of type "{1}": "{2}"</value>
+  </data>
+  <data name="MethodArgumentCountException" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodGenericArgumentCountException" xml:space="preserve">
+    <value>Could not find a suitable generic method overload for "{0}" with "{1}" type parameters, and the argument count: "{2}".</value>
+  </data>
+  <data name="MethodAmbiguousException" xml:space="preserve">
+    <value>Multiple ambiguous overloads found for "{0}" and the argument count: "{1}".</value>
+  </data>
+  <data name="MethodArgumentConversionException" xml:space="preserve">
+    <value>Cannot convert argument "{0}", with value: "{1}", for "{2}" to type "{3}": "{4}"</value>
+  </data>
+  <data name="GetWithoutGetterException" xml:space="preserve">
+    <value>Get accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="SetWithoutSetterException" xml:space="preserve">
+    <value>Set accessor for property "{0}" is unavailable.</value>
+  </data>
+  <data name="CodePropertySetterFormat" xml:space="preserve">
+    <value>The setter method should be public, void, static, and have two parameters. The first parameter should be of the type PSObject. A second parameter is required if a getter method is also available, and should have the same type as the return type for the getter method.</value>
+  </data>
+  <data name="CodePropertyGetterFormat" xml:space="preserve">
+    <value>The getter method should be public, not void, static, and have one parameter of the type PSObject.</value>
+  </data>
+  <data name="CodePropertyGetterAndSetterNull" xml:space="preserve">
+    <value>CodeProperty should use a getter or setter method.</value>
+  </data>
+  <data name="CodeMethodMethodFormat" xml:space="preserve">
+    <value>Cannot create a code method because of the method format. The method should be public, static, and have one parameter of type PSObject.</value>
+  </data>
+  <data name="CycleInAlias" xml:space="preserve">
+    <value>The alias with name "{0}" contains a cycle.</value>
+  </data>
+  <data name="InvalidCastException" xml:space="preserve">
+    <value>Cannot convert the "{0}" value of type "{1}" to type "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithoutValue" xml:space="preserve">
+    <value>Cannot convert the value of type "{0}" to type "{1}".</value>
+  </data>
+  <data name="InvalidCastExceptionWithInnerException" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Error: "{2}"</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoFlagAndComma" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because no commas are allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNoValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are "{1}".</value>
+  </data>
+  <data name="InvalidCastFromNull" xml:space="preserve">
+    <value>Cannot convert null to type "{0}".</value>
+  </data>
+  <data name="InvalidCastExceptionNoStringForConversion" xml:space="preserve">
+    <value>Cannot convert value to type "{0}".  Error: "{1}"</value>
+  </data>
+  <data name="InvalidCastCannotRetrieveString" xml:space="preserve">
+    <value>Cannot convert value to type System.String.</value>
+  </data>
+  <data name="ReferenceTypeExpected" xml:space="preserve">
+    <value>Reference type is expected in argument.</value>
+  </data>
+  <data name="NotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" because it is not IComparable.</value>
+  </data>
+  <data name="ComparisonFailure" xml:space="preserve">
+    <value>Could not compare "{0}" to "{1}". Error: "{2}"</value>
+  </data>
+  <data name="NotTheSameTypeOrNotIcomparable" xml:space="preserve">
+    <value>Cannot compare "{0}" to "{1}" because the objects are not the same type or the object "{0}" does not implement "{2}".</value>
+  </data>
+  <data name="InvalidCastExceptionEnumerationMoreThanOneValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}" because at least two matches were found ({2}, {3}) and only one match is allowed for this enumeration.</value>
+  </data>
+  <data name="InvalidCastExceptionForBooleanArgumentValue" xml:space="preserve">
+    <value>Cannot convert value "{0}" to type "{1}". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.</value>
+  </data>
+  <data name="WriteOnlyProperty" xml:space="preserve">
+    <value>Cannot get property value because "{0}" is a write-only property.</value>
+  </data>
+  <data name="ReadOnlyProperty" xml:space="preserve">
+    <value>"{0}" is a ReadOnly property.</value>
+  </data>
+  <data name="XmlNodeSetShouldBeAString" xml:space="preserve">
+    <value>Cannot set "{0}" because only strings can be used as values to set XmlNode properties.</value>
+  </data>
+  <data name="XmlNodeSetRestrictions" xml:space="preserve">
+    <value>Cannot set "{0}" because only unique attributes or unique non-attributed leaf nodes can be set.</value>
+  </data>
+  <data name="CannotAddPropertyOrMethod" xml:space="preserve">
+    <value>A PSProperty or PSMethod object cannot be added to this collection.</value>
+  </data>
+  <data name="TypesXmlError" xml:space="preserve">
+    <value>The following error occurred while loading the extended type data file: {0}</value>
+  </data>
+  <data name="ToStringException" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string: "{0}"</value>
+  </data>
+  <data name="NotAClsCompliantFieldProperty" xml:space="preserve">
+    <value>The field or property: "{0}" for type: "{1}" differs only in letter casing from the field or property: "{2}". The type must be Common Language Specification (CLS) compliant.</value>
+  </data>
+  <data name="ExceptionRetrievingTypeNameHierarchy" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type name hierarchy: "{0}".</value>
+  </data>
+  <data name="ExceptionGettingMember" xml:space="preserve">
+    <value>The following exception occurred while retrieving member "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionGettingMembers" xml:space="preserve">
+    <value>The following exception occurred while retrieving members: "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyType" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for property "{1}" : "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingPropertyAttributes" xml:space="preserve">
+    <value>The following exception occurred while retrieving the attributes for property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingMethodString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for method "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertytype" xml:space="preserve">
+    <value>The following exception occurred while retrieving the type for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyReadState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the read state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyWriteState" xml:space="preserve">
+    <value>The following exception occurred while retrieving the write state for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyDefinitions" xml:space="preserve">
+    <value>The following exception occurred while retrieving the definitions for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="ExceptionRetrievingParameterizedPropertyString" xml:space="preserve">
+    <value>The following exception occurred while retrieving the string representation for parameterized property "{1}": "{0}"</value>
+  </data>
+  <data name="CannotSetValueForMemberType" xml:space="preserve">
+    <value>Cannot set the Value property for PSMemberInfo object of type "{0}".</value>
+  </data>
+  <data name="NonRefArgumentToRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should be a {1}. Use {2}.</value>
+  </data>
+  <data name="RefArgumentToNonRefParameter" xml:space="preserve">
+    <value>Argument: '{0}' should not be a {1}. Do not use {2}.</value>
+  </data>
+  <data name="PropertyNotFoundInTypeDescriptor" xml:space="preserve">
+    <value>找不到属性“{0}”。</value>
+  </data>
+  <data name="InvalidComponent" xml:space="preserve">
+    <value>Cannot get or set the property value. The "{0}" argument should be of type "{1}" or "{2}".</value>
+  </data>
+  <data name="CannotSetNonManagementObject" xml:space="preserve">
+    <value>Cannot set the value for property "{0}" because the object has type "{1}" instead of "{2}".</value>
+  </data>
+  <data name="WMIMethodInvocationException" xml:space="preserve">
+    <value>Exception calling "{0}" : "{1}"</value>
+  </data>
+  <data name="InvalidWMIClassPath" xml:space="preserve">
+    <value>{0} is not a valid class path.</value>
+  </data>
+  <data name="InvalidWMIPath" xml:space="preserve">
+    <value>{0} 不是有效的路径。</value>
+  </data>
+  <data name="PropertyIsSettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" can be changed.</value>
+  </data>
+  <data name="PropertyIsGettableError" xml:space="preserve">
+    <value>The adapter cannot determine whether property "{0}" is gettable.</value>
+  </data>
+  <data name="PropertyGetError" xml:space="preserve">
+    <value>The adapter cannot get the value of property "{0}".</value>
+  </data>
+  <data name="PropertySetError" xml:space="preserve">
+    <value>The adapter cannot set the value of property "{0}".</value>
+  </data>
+  <data name="PropertyTypeError" xml:space="preserve">
+    <value>The adapter cannot get the type of property "{0}".</value>
+  </data>
+  <data name="GetTypeNameHierarchyError" xml:space="preserve">
+    <value>The adapter cannot get the type hierarchy of "{0}".</value>
+  </data>
+  <data name="GetProperties" xml:space="preserve">
+    <value>The adapter cannot get the properties of "{0}".</value>
+  </data>
+  <data name="GetProperty" xml:space="preserve">
+    <value>The adapter cannot get property "{0}" for "{1}".</value>
+  </data>
+  <data name="NullReturnValueError" xml:space="preserve">
+    <value>"{0}" returned a null value.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. The settable properties are: {2}.</value>
+  </data>
+  <data name="NoSettableProperty" xml:space="preserve">
+    <value>The property '{0}' was not found for the '{1}' object. There is no settable property available.</value>
+  </data>
+  <data name="ObjectCreationError" xml:space="preserve">
+    <value>Cannot create object of type "{0}". {1}</value>
+  </data>
+  <data name="CannotInvokeStaticMethodOnUninstantiatedGenericType" xml:space="preserve">
+    <value>Cannot invoke static methods or access static properties on the open generic type {0}.  Specify the type parameters and retry.  For example, instead of [System.Collections.Generic.HashSet``1]::CreateSetComparer() use [System.Collections.Generic.HashSet[int]]::CreateSetComparer().</value>
+    <comment>Error message shown when somebody tries to access a property or invoke a static method on an uninstantiated generic type:
+PS&gt; [System.Collections.Generic.Comparer``1]::get_Default()
+
+{0} is a placeholder for a type name (for example: System.Collections.Generic.Comparer`1)</comment>
+  </data>
+  <data name="ExceptionConstructingAttribute" xml:space="preserve">
+    <value>The following exception occurred while constructing the attribute "{1}": "{0}"</value>
+  </data>
+  <data name="CannotConvertValueToStringArray" xml:space="preserve">
+    <value>The value "{0}" cannot be converted to a string array.</value>
+  </data>
+  <data name="InvalidCastExceptionNonCoreType" xml:space="preserve">
+    <value>Cannot convert value to type "{0}". Only core types are supported in this language mode.</value>
+  </data>
+  <data name="InvalidCastToByRefLikeType" xml:space="preserve">
+    <value>Cannot convert to the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotAccessByRefLikePropertyOrField" xml:space="preserve">
+    <value>Cannot get or set the property or field "{0}" of the ByRef-like type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotCallMethodWithByRefLikeReturnType" xml:space="preserve">
+    <value>Cannot invoke the method "{0}" of the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="CannotInstantiateBoxedByRefLikeType" xml:space="preserve">
+    <value>Cannot create an instance of the ByRef-like type "{0}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="WDACHashTypeLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACHashTypeLogMessage" xml:space="preserve">
+    <value>Type conversion from HashTable to '{0}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACTypeConversionLogTitle" xml:space="preserve">
+    <value>Extended Type System Hashtable Conversion</value>
+  </data>
+  <data name="WDACTypeConversionLogMessage" xml:space="preserve">
+    <value>Type conversion from '{0}' to '{1}' will not be allowed in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/FileSystemProviderStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/FileSystemProviderStrings.zh-Hans.resx
new file mode 100644
index 00000000000..941e1b8bd2f
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/FileSystemProviderStrings.zh-Hans.resx
@@ -0,0 +1,357 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvokeItemAction" xml:space="preserve">
+    <value>Invoke Item</value>
+  </data>
+  <data name="InvokeItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemActionFile" xml:space="preserve">
+    <value>Remove File</value>
+  </data>
+  <data name="RemoveItemActionDirectory" xml:space="preserve">
+    <value>Remove Directory</value>
+  </data>
+  <data name="CopyItemActionFile" xml:space="preserve">
+    <value>Copy File</value>
+  </data>
+  <data name="CopyItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="CopyItemActionDirectory" xml:space="preserve">
+    <value>Copy Directory</value>
+  </data>
+  <data name="RenameItemActionFile" xml:space="preserve">
+    <value>Rename File</value>
+  </data>
+  <data name="RenameItemActionDirectory" xml:space="preserve">
+    <value>Rename Directory</value>
+  </data>
+  <data name="RenameItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="MoveItemActionFile" xml:space="preserve">
+    <value>Move File</value>
+  </data>
+  <data name="MoveItemActionDirectory" xml:space="preserve">
+    <value>Move Directory</value>
+  </data>
+  <data name="MoveItemResourceFileTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="SetPropertyActionFile" xml:space="preserve">
+    <value>Set Property File</value>
+  </data>
+  <data name="SetPropertyActionDirectory" xml:space="preserve">
+    <value>Set Property Directory</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1} Value: {2}</value>
+  </data>
+  <data name="ClearPropertyActionFile" xml:space="preserve">
+    <value>Clear Property File</value>
+  </data>
+  <data name="ClearPropertyActionDirectory" xml:space="preserve">
+    <value>Clear Property Directory</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Property: {1}</value>
+  </data>
+  <data name="NewItemActionFile" xml:space="preserve">
+    <value>Create File</value>
+  </data>
+  <data name="NewItemActionDirectory" xml:space="preserve">
+    <value>Create Directory</value>
+  </data>
+  <data name="NewItemActionTemplate" xml:space="preserve">
+    <value>Destination: {0}</value>
+  </data>
+  <data name="ClearContentActionFile" xml:space="preserve">
+    <value>Clear Content</value>
+  </data>
+  <data name="ClearContentesourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="ItemNotFound" xml:space="preserve">
+    <value>Could not find item {0}.</value>
+  </data>
+  <data name="CannotRemoveItem" xml:space="preserve">
+    <value>Cannot remove item {0}: {1}</value>
+  </data>
+  <data name="CannotRestoreAttributes" xml:space="preserve">
+    <value>Cannot restore attributes on item {0}: {1}</value>
+  </data>
+  <data name="ItemDoesNotExist" xml:space="preserve">
+    <value>An object at the specified path {0} does not exist.</value>
+  </data>
+  <data name="DirectoryNotEmpty" xml:space="preserve">
+    <value>Directory {0} cannot be removed because it is not empty.</value>
+  </data>
+  <data name="UnknownType" xml:space="preserve">
+    <value>The type is not a known type for the file system. Only "file","directory" or "symboliclink" can be specified.</value>
+  </data>
+  <data name="PathOutSideBasePath" xml:space="preserve">
+    <value>Cannot process the path because the specified path refers to an item that is outside the basePath.</value>
+  </data>
+  <data name="DriveRootError" xml:space="preserve">
+    <value>The specified drive root "{0}" either does not exist, or it is not a folder.</value>
+  </data>
+  <data name="DirectoryExist" xml:space="preserve">
+    <value>An item with the specified name {0} already exists.</value>
+  </data>
+  <data name="DelimiterError" xml:space="preserve">
+    <value>A delimiter cannot be specified when reading the stream one byte at a time.</value>
+  </data>
+  <data name="CopyError" xml:space="preserve">
+    <value>Cannot overwrite the item {0} with itself.</value>
+  </data>
+  <data name="RenameError" xml:space="preserve">
+    <value>Cannot rename the specified target, because it represents a path or device name.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property {0} does not exist or was not found.</value>
+  </data>
+  <data name="PermissionError" xml:space="preserve">
+    <value>You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only.</value>
+  </data>
+  <data name="AttributesNotSupported" xml:space="preserve">
+    <value>The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.</value>
+  </data>
+  <data name="CannotClearProperty" xml:space="preserve">
+    <value>The property cannot be cleared because the property is not supported. Only the Attributes property can be cleared.</value>
+  </data>
+  <data name="TargetCannotContainDeviceName" xml:space="preserve">
+    <value>Cannot process path '{0}' because the target represents a reserved device name.</value>
+  </data>
+  <data name="EncodingNotUsed" xml:space="preserve">
+    <value>Encoding not used when '-AsByteStream' specified.</value>
+  </data>
+  <data name="ByteEncodingError" xml:space="preserve">
+    <value>Cannot proceed with byte encoding. When using byte encoding the content must be of type byte.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>Cannot process the file because the file {0} was not found.</value>
+  </data>
+  <data name="DirectoryDisplayGrouping" xml:space="preserve">
+    <value>    Directory: </value>
+  </data>
+  <data name="ReadBackward_Encoding_NotSupport" xml:space="preserve">
+    <value>Cannot detect the encoding of the file. The specified encoding {0} is not supported when the content is read in reverse.</value>
+  </data>
+  <data name="AlternateDataStreamNotFound" xml:space="preserve">
+    <value>Could not open the alternate data stream '{0}' of the file '{1}'.</value>
+  </data>
+  <data name="StreamAction" xml:space="preserve">
+    <value>Stream '{0}' of file '{1}'.</value>
+  </data>
+  <data name="RawAndWaitCannotCoexist" xml:space="preserve">
+    <value>The Raw and Wait parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="InvalidDriveName" xml:space="preserve">
+    <value>To use the Persist switch parameter, the drive name must be supported by the operating system (for example, drive letters A-Z).</value>
+  </data>
+  <data name="PersistNotSupported" xml:space="preserve">
+    <value>When you use the Persist parameter, the root must be a file system location on a remote computer.</value>
+  </data>
+  <data name="NoFirstLastWaitForRaw" xml:space="preserve">
+    <value>The '{0}' and '{1}' parameters cannot be specified in the same command.</value>
+  </data>
+  <data name="ItemNotDirectory" xml:space="preserve">
+    <value>A directory is required for the operation. The item '{0}' is not a directory.</value>
+  </data>
+  <data name="NewItemActionJunction" xml:space="preserve">
+    <value>Create Junction</value>
+  </data>
+  <data name="NewItemActionSymbolicLink" xml:space="preserve">
+    <value>Create Symbolic Link</value>
+  </data>
+  <data name="ElevationRequired" xml:space="preserve">
+    <value>Administrator privilege required for this operation.</value>
+  </data>
+  <data name="NewItemActionHardLink" xml:space="preserve">
+    <value>Create Hard Link</value>
+  </data>
+  <data name="ItemNotFile" xml:space="preserve">
+    <value>A file is required for the operation. The item '{0}' is not a file.</value>
+  </data>
+  <data name="HardLinkNotSupported" xml:space="preserve">
+    <value>Hard links are not supported for the specified path.</value>
+  </data>
+  <data name="SymbolicLinkNotSupported" xml:space="preserve">
+    <value>Symbolic links are not supported for the specified path.</value>
+  </data>
+  <data name="CopyItemRemotelyProgressActivity" xml:space="preserve">
+    <value>正在将 {0} 复制到 {1}</value>
+  </data>
+  <data name="CopyItemRemoteDestinationIsFile" xml:space="preserve">
+    <value>Destination path {0} is a file that already exists on the target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyFailed" xml:space="preserve">
+    <value>Failed to copy file {0} to remote target destination.</value>
+  </data>
+  <data name="CopyItemRemotelyStatusDescription" xml:space="preserve">
+    <value>从 {0} 到 {1}</value>
+  </data>
+  <data name="CopyItemRemotelyDestinationIsFile" xml:space="preserve">
+    <value>Cannot copy a directory '{0}' to file '{0}'</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToGetDirectoryChildItems" xml:space="preserve">
+    <value>Failed to get directory {0} child items.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToReadFile" xml:space="preserve">
+    <value>Failed to read remote file '{0}'.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToValidateIfDestinationIsFile" xml:space="preserve">
+    <value>Cannot validate if remote destination {0} is a file.</value>
+  </data>
+  <data name="CopyItemRemotelyFailedToCreateDirectory" xml:space="preserve">
+    <value>Failed to create directory '{0}' on remote destination.</value>
+  </data>
+  <data name="DriveMaxSizeError" xml:space="preserve">
+    <value>Maximum size for drive has been exceeded: {0}.</value>
+  </data>
+  <data name="SymlinkItemExists" xml:space="preserve">
+    <value>Cannot create link because the path already exists: {0}.</value>
+  </data>
+  <data name="AlreadyListedDirectory" xml:space="preserve">
+    <value>Skip already-visited directory {0}.</value>
+  </data>
+  <data name="TargetCannotBeSubdirectoryOfSource" xml:space="preserve">
+    <value>Destination path cannot be a subdirectory of the source or the source itself: {0}.</value>
+  </data>
+  <data name="NewItemTargetIsSameAsLink" xml:space="preserve">
+    <value>The target and path cannot be the same.</value>
+  </data>
+  <data name="CopyingLocalFileActivity" xml:space="preserve">
+    <value>Copied {0} of {1} files</value>
+  </data>
+  <data name="CopyingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="RemovingLocalFileActivity" xml:space="preserve">
+    <value>Removed {0} of {1} files</value>
+  </data>
+  <data name="RemovingLocalBytesStatus" xml:space="preserve">
+    <value>{0} of {1} ({2:0.0} MB/s)</value>
+  </data>
+  <data name="JunctionAbsolutePath" xml:space="preserve">
+    <value>Creating a junction requires an absolute path for the target.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/FormatAndOutXmlLoadingStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/FormatAndOutXmlLoadingStrings.zh-Hans.resx
new file mode 100644
index 00000000000..27bc822ad4a
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/FormatAndOutXmlLoadingStrings.zh-Hans.resx
@@ -0,0 +1,324 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributesNotAllowed" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: XML 元素 {2} 不允许使用属性。</value>
+  </data>
+  <data name="NoChildrenAllowed" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 节点 {2} 不能具有子对象。</value>
+  </data>
+  <data name="InvalidNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 无效。</value>
+  </data>
+  <data name="NoDefaultShapeEntry" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 必须至少存在一个默认的 {2} 值。</value>
+  </data>
+  <data name="TooManyDefaultShapeEntry" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 不能存在多个默认的 {2} 值。</value>
+  </data>
+  <data name="NullControlName" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 控件名称不能为 null 或为空。</value>
+  </data>
+  <data name="InvalidControlForOutOfBandView" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 带外视图只能具有 CustomControl 或 ListControl。</value>
+  </data>
+  <data name="OutOfBandGroupByConflict" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 带外视图不能具有 GroupBy。</value>
+  </data>
+  <data name="ViewNotLoaded" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 无法加载视图。</value>
+  </data>
+  <data name="InvalidAlignmentValue" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误:“{2}”不是有效的对齐值。</value>
+  </data>
+  <data name="ExpectPositiveInteger" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 应为正整数。</value>
+  </data>
+  <data name="InvalidColumnHeader" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 列标头定义无效；已丢弃所有标头。</value>
+  </data>
+  <data name="IncorrectRowItemCount" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 备用集 #{3} 上的行项计数 = {2} 与默认行项计数 = {4} 不匹配。</value>
+  </data>
+  <data name="IncorrectHeaderItemCount" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 标头项计数 = {2} 与默认行项计数 = {3} 不匹配。</value>
+  </data>
+  <data name="NoListViewItem" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 必须至少指定一个列表视图项。</value>
+  </data>
+  <data name="InvalidPropertyEntry" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 属性条目无效。</value>
+  </data>
+  <data name="NoDefinitionList" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少定义列表。</value>
+  </data>
+  <data name="ExpectBoolean" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 应为布尔值。</value>
+  </data>
+  <data name="ExpectNaturalNumber" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 应为非负整数。</value>
+  </data>
+  <data name="ExpectInteger" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 应为整数。</value>
+  </data>
+  <data name="MissingInnerText" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少内部文本值。</value>
+  </data>
+  <data name="EmptyCustomControlList" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 自定义控件令牌列表不能为空。</value>
+  </data>
+  <data name="LoadTagFailed" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 无法加载 {2}。</value>
+  </data>
+  <data name="NodeWithoutExpression" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 无法在没有表达式的情况下指定 {2}。</value>
+  </data>
+  <data name="NodeWithExpression" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 无法使用表达式指定 {2}。</value>
+  </data>
+  <data name="NoFormatString" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少格式字符串。</value>
+  </data>
+  <data name="NoScriptBlockText" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少脚本块文本。</value>
+  </data>
+  <data name="NoProperty" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少属性。</value>
+  </data>
+  <data name="InvalidScriptBlock" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 脚本块“{2}”无效。</value>
+  </data>
+  <data name="StringResourceNotFound" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 找不到程序集 {4} 中资源 {3} 的字符串 {2}。</value>
+  </data>
+  <data name="ResourceNotFound" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 找不到程序集 {3} 中资源 {2}。</value>
+  </data>
+  <data name="AssemblyNotFound" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 找不到程序集 {2}。</value>
+  </data>
+  <data name="NonXmlElementNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 节点必须是 XmlElement。</value>
+  </data>
+  <data name="ExpectExpression" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 应使用表达式。</value>
+  </data>
+  <data name="ControlLabelWithoutExpression" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 无法在没有表达式的情况下具有控件或标签。</value>
+  </data>
+  <data name="ControlAndLabel" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 不能同时具有控件和标签。</value>
+  </data>
+  <data name="SelectionSetNameAndTypeName" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 不能同时具有 SelectionSetName 和 TypeName。</value>
+  </data>
+  <data name="EmptyAppliesTo" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 未指定任何类型或条件来应用视图。</value>
+  </data>
+  <data name="InvalidNodeValue" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 值无效。</value>
+  </data>
+  <data name="DuplicatedNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 存在重复的节点。</value>
+  </data>
+  <data name="MutuallyExclusiveNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 和 {3} 是互斥的。</value>
+  </data>
+  <data name="ThreeMutuallyExclusiveNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2}、{3} 和 {4} 是互斥的。</value>
+  </data>
+  <data name="UnknownNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 是未知节点。</value>
+  </data>
+  <data name="UnknownAttribute" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 是未知属性。</value>
+  </data>
+  <data name="MissingAttribute" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 是缺失的属性。</value>
+  </data>
+  <data name="MissingNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: 缺少节点 {2}。</value>
+  </data>
+  <data name="MissingNodeFromList" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 中缺少节点。</value>
+  </data>
+  <data name="EmptyNode" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 为空节点。</value>
+  </data>
+  <data name="EmptyAttribute" xml:space="preserve">
+    <value>文件 {1} 中的 XPath {0} 存在错误: {2} 为空属性。</value>
+  </data>
+  <data name="ErrorInFile" xml:space="preserve">
+    <value>文件 {0} 存在错误: {1}</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>文件 {0} 中的错误太多。</value>
+  </data>
+  <data name="FormatLoadingErrors" xml:space="preserve">
+    <value>加载格式数据文件时出错: {0}</value>
+  </data>
+  <data name="AssemblyInGAC" xml:space="preserve">
+    <value>(全局程序集缓存) {0}</value>
+  </data>
+  <data name="MshSnapinQualifiedError" xml:space="preserve">
+    <value>{0}，{1}</value>
+  </data>
+  <data name="FormatFileNotRooted" xml:space="preserve">
+    <value>未完全限定路径 {0}。指定完全限定的格式化文件路径。</value>
+  </data>
+  <data name="SharedFormatTableCannotBeUpdated" xml:space="preserve">
+    <value>无法更新 FormatTable，因为可能已在运行空间外部创建 FormatTable。</value>
+  </data>
+  <data name="FormatTableLoadErrors" xml:space="preserve">
+    <value>加载 FormatTable 时出错。查看 Errors 属性的内容以获取详细的错误消息。</value>
+  </data>
+  <data name="ErrorInFormattingData" xml:space="preserve">
+    <value>设置数据“{0}”的格式时出错: {1}</value>
+  </data>
+  <data name="IncorrectHeaderItemCountInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 处且类型名称为 {0} 的视图数据中存在错误: 标头项计数 = {2} 与默认行项计数 = {3} 不匹配。</value>
+  </data>
+  <data name="InvalidFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据中存在错误: 设置数据“{2}”的格式无效。</value>
+  </data>
+  <data name="InvalidScriptBlockInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: 脚本块“{2}”无效。</value>
+  </data>
+  <data name="LoadTagFailedInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: 无法加载 {2}。</value>
+  </data>
+  <data name="MultipleRowEntriesFoundInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: TableControl 应只包含一个 {2}。</value>
+  </data>
+  <data name="NoDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: 必须至少存在一个默认的 {2}。</value>
+  </data>
+  <data name="NoListViewItemInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: 必须至少指定一个列表视图项。</value>
+  </data>
+  <data name="TooManyDefaultShapeEntryInFormattingData" xml:space="preserve">
+    <value>位于索引 {1} 且类型名称为 {0} 的视图数据存在错误: 不能存在多个默认的 {2}。</value>
+  </data>
+  <data name="TooManyErrorsInFormattingData" xml:space="preserve">
+    <value>类型“{0}”的格式设置数据中错误过多。</value>
+  </data>
+  <data name="FormatTableCannotCoExist" xml:space="preserve">
+    <value>无法使用多个条目更新共享格式表。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_MshParameter.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_MshParameter.zh-Hans.resx
new file mode 100644
index 00000000000..a835a7bf9f1
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_MshParameter.zh-Hans.resx
@@ -0,0 +1,177 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UnknownParameterTypeError" xml:space="preserve">
+    <value>无法将 {0} 转换为以下类型 {1} 之一。</value>
+  </data>
+  <data name="NullParameterTypeError" xml:space="preserve">
+    <value>参数的值为 null；应为以下类型之一: {0}。</value>
+  </data>
+  <data name="DuplicateKeyError" xml:space="preserve">
+    <value>复制的键“{0}”与“{1}”冲突。</value>
+  </data>
+  <data name="IllegalTypeMultiError" xml:space="preserve">
+    <value>“{0}”键具有无效的类型 {1}；预期类型为 {2}。</value>
+  </data>
+  <data name="IllegalTypeSingleError" xml:space="preserve">
+    <value>“{0}”键具有无效的类型 {1}；预期类型为 {2}。</value>
+  </data>
+  <data name="AmbiguousKeyError" xml:space="preserve">
+    <value>{0} 键不明确；{1} 和 {2} 冲突。</value>
+  </data>
+  <data name="DictionaryKeyNullError" xml:space="preserve">
+    <value>键的值不能为 null。</value>
+  </data>
+  <data name="DictionaryKeyNonStringError" xml:space="preserve">
+    <value>{0} 键类型无效。该键必须是字符串。</value>
+  </data>
+  <data name="MissingKeyValueError" xml:space="preserve">
+    <value>{0} 键没有值。</value>
+  </data>
+  <data name="MissingKeyMandatoryEntryError" xml:space="preserve">
+    <value>{0} 缺少必需的条目。</value>
+  </data>
+  <data name="IllegalKeyError" xml:space="preserve">
+    <value>{0} 键无效。</value>
+  </data>
+  <data name="IllegalAlignmentValueError" xml:space="preserve">
+    <value>键“{0}”的值“{1}”无效；有效值为 {2}。</value>
+  </data>
+  <data name="OutOfRangeWidthValueError" xml:space="preserve">
+    <value>键“{1}”的值“{0}”应大于 0。</value>
+  </data>
+  <data name="EmptyFormatStringValueError" xml:space="preserve">
+    <value>键“{0}”的格式字符串不能为空。</value>
+  </data>
+  <data name="MshExEmptyStringHashError" xml:space="preserve">
+    <value>“{0}”键不能具有空字符串值。</value>
+  </data>
+  <data name="MshExEmptyStringError" xml:space="preserve">
+    <value>不允许使用空字符串值。</value>
+  </data>
+  <data name="MshExGlobbingHashError" xml:space="preserve">
+    <value>“{0}”键的值“{1}”中不能包含通配符。</value>
+  </data>
+  <data name="MshExGlobbingStringError" xml:space="preserve">
+    <value>“{0}”不允许使用通配符。</value>
+  </data>
+  <data name="IllegalEnumerableExpansionValue" xml:space="preserve">
+    <value>EnumerableExpansion 值无效。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_format_xxx.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_format_xxx.zh-Hans.resx
new file mode 100644
index 00000000000..612afc99349
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_format_xxx.zh-Hans.resx
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotSpecifyViewAndPropertyError" xml:space="preserve">
+    <value>Cmdlet parameters View and Property are mutually exclusive.</value>
+  </data>
+  <data name="CannotSpecifyAutosizeAndColumnsError" xml:space="preserve">
+    <value>Cmdlet parameters AutoSize and Column are mutually exclusive.</value>
+  </data>
+  <data name="UnknownViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found.</value>
+  </data>
+  <data name="UnknownViewNameErrorSuffix" xml:space="preserve">
+    <value> The view name {0} cannot be found in the {1} formatting.</value>
+    <comment>{0} indicates one of the valid formating types such as Table, List, Wide or Custom.</comment>
+  </data>
+  <data name="NonExistingViewNameError" xml:space="preserve">
+    <value> There are no existing {0} views for {1} objects.</value>
+  </data>
+  <data name="InvalidViewNameError" xml:space="preserve">
+    <value>The view name {0} cannot be found. Specify one of the following {1} views and try again: {2}.</value>
+  </data>
+  <data name="SuggestValidViewNamePrefix" xml:space="preserve">
+    <value> Try using one of these other format cmdlets: </value>
+    <comment>Prefix text to suggest user to use one of the valid view names.</comment>
+  </data>
+  <data name="GroupStartDataIndentedAutoGeneratedLabel" xml:space="preserve">
+    <value>   {0}: </value>
+  </data>
+  <data name="IEnum_Header" xml:space="preserve">
+    <value>The following object supports IEnumerable:</value>
+  </data>
+  <data name="IEnum_NoObjects" xml:space="preserve">
+    <value>The IEnumerable contains no objects.</value>
+  </data>
+  <data name="IEnum_OneObject" xml:space="preserve">
+    <value>The IEnumerable contains the following object:</value>
+  </data>
+  <data name="IEnum_ManyObjects" xml:space="preserve">
+    <value>The IEnumerable contains the following {0} objects:</value>
+  </data>
+  <data name="FOD_ClassIdInvalid" xml:space="preserve">
+    <value>Unknown class Id {0}.</value>
+  </data>
+  <data name="FOD_InvalidPropertyType" xml:space="preserve">
+    <value>The type {0} for property {1} is not valid.</value>
+  </data>
+  <data name="FOD_NullDataMember" xml:space="preserve">
+    <value>The value of the {0} data member cannot be null.</value>
+  </data>
+  <data name="FOD_InvalidClassidProperty" xml:space="preserve">
+    <value>The object type is not recognized.</value>
+  </data>
+  <data name="FOD_InvalidClassid" xml:space="preserve">
+    <value>Failed to create object with class Id {0}.</value>
+  </data>
+  <data name="FOD_RecursiveProperty" xml:space="preserve">
+    <value>The {0} property is recursive.</value>
+  </data>
+  <data name="PSPropertyExpressionError" xml:space="preserve">
+    <value>Failed to evaluate expression "{0}".</value>
+  </data>
+  <data name="FormattingError" xml:space="preserve">
+    <value>Failed to interpret format string "{0}".</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_out_xxx.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_out_xxx.zh-Hans.resx
new file mode 100644
index 00000000000..94f22248141
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/FormatAndOut_out_xxx.zh-Hans.resx
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ConsoleLineOutput_PagingPrompt" xml:space="preserve">
+    <value>&lt;SPACE&gt; next page; &lt;CR&gt; next line; Q quit</value>
+  </data>
+  <data name="OutLineOutput_NullLineOutputParameter" xml:space="preserve">
+    <value>The value of LineOutput should not be null.</value>
+  </data>
+  <data name="OutLineOutput_InvalidLineOutputParameterType" xml:space="preserve">
+    <value>The lineOutput type {0} was not expected; LineOutput expects type {1}.</value>
+  </data>
+  <data name="OutLineOutput_OutOfSequencePacket" xml:space="preserve">
+    <value>The object of type "{0}" is not valid or not in the correct sequence. This is likely caused by a user-specified "{1}" command which is conflicting with the default formatting.</value>
+  </data>
+  <data name="OutFile_FileOpenFailure" xml:space="preserve">
+    <value>Cannot open file "{0}".</value>
+  </data>
+  <data name="OutFile_Action" xml:space="preserve">
+    <value>Output to File</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/GetErrorText.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/GetErrorText.zh-Hans.resx
new file mode 100644
index 00000000000..a4acd582337
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/GetErrorText.zh-Hans.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceBaseNameFailure" xml:space="preserve">
+    <value>Cannot load a resource with base name "{0}".</value>
+  </data>
+  <data name="ResourceIdFailure" xml:space="preserve">
+    <value>Cannot load a resource string with ID "{0}".</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>Running commands is prevented by Stop policy settings.</value>
+  </data>
+  <data name="AssemblyNotRegistered" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}" because an assembly was not registered.</value>
+  </data>
+  <data name="BadTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string format is not valid in template string "{3}".</value>
+  </data>
+  <data name="BlankTemplate" xml:space="preserve">
+    <value>Cannot retrieve the message "{0}" "{1}" "{2}". A template string exists, but its value is empty or blank.</value>
+  </data>
+  <data name="PipelineStoppedException" xml:space="preserve">
+    <value>The pipeline has been stopped.</value>
+  </data>
+  <data name="ScriptCallDepthException" xml:space="preserve">
+    <value>The script failed due to call depth overflow.</value>
+  </data>
+  <data name="PipelineDepthException" xml:space="preserve">
+    <value>The pipeline failed due to call depth overflow.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/HelpDisplayStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/HelpDisplayStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f935574ac9a
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/HelpDisplayStrings.zh-Hans.resx
@@ -0,0 +1,473 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Name" xml:space="preserve">
+    <value>名称</value>
+  </data>
+  <data name="Synopsis" xml:space="preserve">
+    <value>SYNOPSIS</value>
+  </data>
+  <data name="DetailedDescription" xml:space="preserve">
+    <value>DESCRIPTION</value>
+  </data>
+  <data name="Syntax" xml:space="preserve">
+    <value>SYNTAX</value>
+  </data>
+  <data name="Parameters" xml:space="preserve">
+    <value>PARAMETERS</value>
+  </data>
+  <data name="InputType" xml:space="preserve">
+    <value>INPUTS</value>
+  </data>
+  <data name="ReturnType" xml:space="preserve">
+    <value>OUTPUTS</value>
+  </data>
+  <data name="TerminatingErrors" xml:space="preserve">
+    <value>TERMINATING ERRORS</value>
+  </data>
+  <data name="NonHyphenTerminatingErrors" xml:space="preserve">
+    <value>NON-TERMINATING ERRORS</value>
+  </data>
+  <data name="Notes" xml:space="preserve">
+    <value>NOTES</value>
+  </data>
+  <data name="Examples" xml:space="preserve">
+    <value>EXAMPLES</value>
+  </data>
+  <data name="Example" xml:space="preserve">
+    <value>示例</value>
+  </data>
+  <data name="ExampleUpperCase" xml:space="preserve">
+    <value>EXAMPLE</value>
+  </data>
+  <data name="Output" xml:space="preserve">
+    <value>OUTPUT</value>
+  </data>
+  <data name="RelatedLinks" xml:space="preserve">
+    <value>RELATED LINKS</value>
+  </data>
+  <data name="ShortDescription" xml:space="preserve">
+    <value>SHORT DESCRIPTION</value>
+  </data>
+  <data name="TitleColon" xml:space="preserve">
+    <value>Title:</value>
+  </data>
+  <data name="QuestionColon" xml:space="preserve">
+    <value>Question:</value>
+  </data>
+  <data name="Answer" xml:space="preserve">
+    <value>答案</value>
+  </data>
+  <data name="TermColon" xml:space="preserve">
+    <value>Term:</value>
+  </data>
+  <data name="DefinitionColon" xml:space="preserve">
+    <value>Definition:</value>
+  </data>
+  <data name="ContentColon" xml:space="preserve">
+    <value>Content:</value>
+  </data>
+  <data name="ProviderName" xml:space="preserve">
+    <value>PROVIDER NAME</value>
+  </data>
+  <data name="BaseCmdletInformation" xml:space="preserve">
+    <value>    This cmdlet supports the common parameters: Verbose, Debug,
+    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
+    OutBuffer, PipelineVariable, and OutVariable. For more information, see
+    about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). </value>
+  </data>
+  <data name="ParameterRequired" xml:space="preserve">
+    <value>Required?                    </value>
+  </data>
+  <data name="ParameterPosition" xml:space="preserve">
+    <value>Position?                    </value>
+  </data>
+  <data name="TypeColon" xml:space="preserve">
+    <value>Type: </value>
+  </data>
+  <data name="TargetObjectTypeColon" xml:space="preserve">
+    <value>Target Object Type:   </value>
+  </data>
+  <data name="ParameterDefaultValue" xml:space="preserve">
+    <value>Default value                </value>
+  </data>
+  <data name="AcceptsPipelineInput" xml:space="preserve">
+    <value>Accept pipeline input?       </value>
+  </data>
+  <data name="AcceptsWildCardCharacters" xml:space="preserve">
+    <value>Accept wildcard characters?  </value>
+  </data>
+  <data name="Category" xml:space="preserve">
+    <value>(Category: </value>
+  </data>
+  <data name="SuggestedActionColon" xml:space="preserve">
+    <value>Suggested Action: </value>
+  </data>
+  <data name="VerboseHelpInfo" xml:space="preserve">
+    <value>For more information, type: </value>
+  </data>
+  <data name="FullHelpInfo" xml:space="preserve">
+    <value>For technical information, type: </value>
+  </data>
+  <data name="ExampleHelpInfo" xml:space="preserve">
+    <value>To see the examples, type: </value>
+  </data>
+  <data name="RelatedLinksHelpInfo" xml:space="preserve">
+    <value>For online help, type: </value>
+  </data>
+  <data name="CommonParameters" xml:space="preserve">
+    <value>&lt;CommonParameters&gt;</value>
+  </data>
+  <data name="RemarksSection" xml:space="preserve">
+    <value>REMARKS</value>
+  </data>
+  <data name="TrueShort" xml:space="preserve">
+    <value>true</value>
+  </data>
+  <data name="NamedParameter" xml:space="preserve">
+    <value>Named</value>
+  </data>
+  <data name="Drives" xml:space="preserve">
+    <value>DRIVES</value>
+  </data>
+  <data name="Capabilities" xml:space="preserve">
+    <value>CAPABILITIES</value>
+  </data>
+  <data name="Tasks" xml:space="preserve">
+    <value>TASKS</value>
+  </data>
+  <data name="Task" xml:space="preserve">
+    <value>TASK: </value>
+  </data>
+  <data name="Filters" xml:space="preserve">
+    <value>FILTERS</value>
+  </data>
+  <data name="DynamicParameters" xml:space="preserve">
+    <value>DYNAMIC PARAMETERS</value>
+  </data>
+  <data name="CmdletsSupported" xml:space="preserve">
+    <value>Cmdlets Supported: </value>
+  </data>
+  <data name="AliasesSection" xml:space="preserve">
+    <value>ALIASES</value>
+  </data>
+  <data name="GetLatestHelpContent" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
+    -- To view the Help topic for this cmdlet online, type: "Get-Help {0} -Online" or
+       go to {1}.</value>
+  </data>
+  <data name="None" xml:space="preserve">
+    <value>无</value>
+  </data>
+  <data name="ParameterAliases" xml:space="preserve">
+    <value>Aliases                      </value>
+  </data>
+  <data name="ParameterIsDynamic" xml:space="preserve">
+    <value>Dynamic?                     </value>
+  </data>
+  <data name="ParameterSetName" xml:space="preserve">
+    <value>Parameter set name           </value>
+  </data>
+  <data name="UnableToRetrieveHelpInfoXml" xml:space="preserve">
+    <value>Unable to retrieve the HelpInfo XML file for UI culture {0}. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.</value>
+  </data>
+  <data name="PipelineByPropertyName" xml:space="preserve">
+    <value>ByPropertyName</value>
+  </data>
+  <data name="PipelineByValue" xml:space="preserve">
+    <value>ByValue</value>
+  </data>
+  <data name="PipelineFromRemainingArguments" xml:space="preserve">
+    <value>FromRemainingArguments</value>
+  </data>
+  <data name="HelpCultureNotSupported" xml:space="preserve">
+    <value>The specified culture is not supported: {0}. Specify a culture from the following list: {{{1}}}.</value>
+  </data>
+  <data name="HelpCultureNotSupportedFallback" xml:space="preserve">
+    <value>Postponing error and trying fallback cultures, will show as error if none of fallbacks are supported:
+{0}</value>
+  </data>
+  <data name="ModuleBaseMustExist" xml:space="preserve">
+    <value>The ModuleBase directory cannot be found. Verify the directory and try again.</value>
+  </data>
+  <data name="PathMustBeValidContainers" xml:space="preserve">
+    <value>The path {0} is not a valid directory. Make sure the directory exists and retry.</value>
+  </data>
+  <data name="TooManyRedirections" xml:space="preserve">
+    <value>A Help URI cannot contain more than 10 redirections. Specify a valid Help URI.</value>
+  </data>
+  <data name="UpdateProgressActivity" xml:space="preserve">
+    <value>Updating Help</value>
+  </data>
+  <data name="UpdateProgressConnecting" xml:space="preserve">
+    <value>Connecting to Help Content...</value>
+  </data>
+  <data name="UpdateProgressDownloading" xml:space="preserve">
+    <value>Downloading Help Content...</value>
+  </data>
+  <data name="UpdateProgressInstalling" xml:space="preserve">
+    <value>Installing Help content...</value>
+  </data>
+  <data name="UpdateProgressLocating" xml:space="preserve">
+    <value>Locating Help Content...</value>
+  </data>
+  <data name="AllParameterSetsName" xml:space="preserve">
+    <value>(All)</value>
+  </data>
+  <data name="CannotMatchModulePattern" xml:space="preserve">
+    <value>No PowerShell modules were found that match the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="ModuleNotFoundWithFullyQualifiedName" xml:space="preserve">
+    <value>No PowerShell modules were found that match the specified FullyQualifiedModule {0}. Verify the FullyQualifiedModule value and then try the command again.</value>
+  </data>
+  <data name="HelpContentNotFound" xml:space="preserve">
+    <value>Help content cannot be found. Make sure the server is available and the help content location is properly defined in the HelpInfo XML.</value>
+  </data>
+  <data name="HelpInfoUriNotFound" xml:space="preserve">
+    <value>The Update-Help command failed because the specified module does not support updatable help. Use Get-Help -Online or look online for help for the commands in this module.</value>
+  </data>
+  <data name="ModuleNameNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Module.</value>
+  </data>
+  <data name="PathNullOrEmpty" xml:space="preserve">
+    <value>The following parameter must not be null or empty: Path.</value>
+  </data>
+  <data name="UpdateHelpCompleted" xml:space="preserve">
+    <value>Update-Help has completed successfully.</value>
+  </data>
+  <data name="UnzipFailure" xml:space="preserve">
+    <value>Error extracting Help content.</value>
+  </data>
+  <data name="UnableToConnect" xml:space="preserve">
+    <value>Unable to connect to Help content. The server on which Help content is stored might not be available. Verify that the server is available, or wait until the server is back online, and then try the command again.</value>
+  </data>
+  <data name="HelpContentXmlValidationFailure" xml:space="preserve">
+    <value>The Help content at the specified location is not valid. Specify a location that contains valid Help Content.</value>
+  </data>
+  <data name="HelpInfoXmlValidationFailure" xml:space="preserve">
+    <value>The HelpInfo XML is not valid. Specify valid HelpInfo XML.</value>
+  </data>
+  <data name="SaveHelpCompleted" xml:space="preserve">
+    <value>Help content was successfully saved to the following location: {0}</value>
+  </data>
+  <data name="HelpContentXsdNotFound" xml:space="preserve">
+    <value>The Help content XSD file cannot be found in {0}. Verify that the XSD file exists at the specified location, and then retry the command.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModule" xml:space="preserve">
+    <value>Failed to update Help for the module(s) :
+'{0}'
+{1}</value>
+  </data>
+  <data name="SaveProgressActivity" xml:space="preserve">
+    <value>Saving Help</value>
+  </data>
+  <data name="HelpContentContainsInvalidFiles" xml:space="preserve">
+    <value>Help content contains files that are not valid. Only .txt and .xml files are supported.</value>
+  </data>
+  <data name="FailedToSaveHelpForModule" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' : {1}</value>
+  </data>
+  <data name="FailedToSaveHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to save Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be saved using: Save-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpForModuleWithCulture" xml:space="preserve">
+    <value>Failed to update Help for the module(s) '{0}' with UI culture(s) {{{1}}} : {2}.
+English-US help content is available and can be installed using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FailedToUpdateHelpWithLocaleNoUICulture" xml:space="preserve">
+    <value>Your current culture is ({0}), which is not associated with any language, consider changing your system culture or install the English-US help content using: Update-Help -UICulture en-US.</value>
+  </data>
+  <data name="FalseShort" xml:space="preserve">
+    <value>false</value>
+  </data>
+  <data name="CannotSpecifyRecurseWithoutPath" xml:space="preserve">
+    <value>The -Recurse parameter is only available if a source path is specified.</value>
+  </data>
+  <data name="ProviderIsNotFileSystem" xml:space="preserve">
+    <value>The path {0} does not contain a FileSystem provider. Verify that the specified path contains the FileSystem provider, and then retry the command.</value>
+  </data>
+  <data name="SearchingForHelpContent" xml:space="preserve">
+    <value>Searching Help for {0} ...</value>
+  </data>
+  <data name="CannotMatchUICulturePattern" xml:space="preserve">
+    <value>No UI culture was found that matches the following pattern: {0}. Verify the pattern and then try the command again.</value>
+  </data>
+  <data name="UseForceToSaveHelp" xml:space="preserve">
+    <value>Help was not saved for the module {0}, because the Save-Help command was run on this computer within the last 24 hours.
+To save help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="UseForceToUpdateHelp" xml:space="preserve">
+    <value>Help was not updated for the module {0}, because the Update-Help command was run on this computer within the last 24 hours.
+To update help again, add the Force parameter to your command.</value>
+  </data>
+  <data name="NewestContentAlreadyInstalled" xml:space="preserve">
+    <value>The most current Help files are already installed.</value>
+  </data>
+  <data name="SuccessfullyUpdatedHelpContent" xml:space="preserve">
+    <value>{0}: {1}. Culture {2} Version {3}</value>
+  </data>
+  <data name="UpdatedHelpContent" xml:space="preserve">
+    <value>Updated {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUri" xml:space="preserve">
+    <value>The value of the HelpInfoUri key in the module manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri '{0}' does not resolve to a container.</value>
+  </data>
+  <data name="HelpContentMustBeInTargetNamespace" xml:space="preserve">
+    <value>Help content must be in the namespace {0}.</value>
+  </data>
+  <data name="GetLatestHelpContentWithoutHelpUri" xml:space="preserve">
+    <value>Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
+    -- To download and install Help files for the module that includes this cmdlet, use Update-Help.</value>
+  </data>
+  <data name="NewestContentAlreadyDownloaded" xml:space="preserve">
+    <value>The most current Help files are already downloaded.</value>
+  </data>
+  <data name="SavedHelpContent" xml:space="preserve">
+    <value>Saved {0}</value>
+  </data>
+  <data name="InvalidHelpInfoUriFormat" xml:space="preserve">
+    <value>The HelpInfoURI {0} does not start with HTTP.</value>
+  </data>
+  <data name="RootElementMustBeHelpItems" xml:space="preserve">
+    <value>The root level element of the help content must be "helpItems".</value>
+  </data>
+  <data name="SaveProgressActivityForModule" xml:space="preserve">
+    <value>Saving Help for module {0}</value>
+  </data>
+  <data name="UpdateProgressActivityForModule" xml:space="preserve">
+    <value>Updating Help for module {0}</value>
+  </data>
+  <data name="UpdateHelpResolveUriVerbose" xml:space="preserve">
+    <value>Resolving URI: "{0}"</value>
+  </data>
+  <data name="OnlineHelpUri" xml:space="preserve">
+    <value>Help URI: {0}</value>
+  </data>
+  <data name="UpdateHelpShouldProcessActionMessage" xml:space="preserve">
+    <value>{0}, Current Version: {1}, Available Version: {2}, UICulture: {3}</value>
+  </data>
+  <data name="Properties" xml:space="preserve">
+    <value>PROPERTIES</value>
+  </data>
+  <data name="Methods" xml:space="preserve">
+    <value>METHODS</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/HelpErrors.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/HelpErrors.zh-Hans.resx
new file mode 100644
index 00000000000..2c4d4e79a5c
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/HelpErrors.zh-Hans.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpNotFound" xml:space="preserve">
+    <value>Get-Help 无法在此会话的帮助文件中找到 {0}。若要下载更新的帮助主题，请键入: "Update-Help"。若要联机获取帮助，请在 TechNet 库中搜索帮助主题，网址为 https://go.microsoft.com/fwlink/?LinkID=107116。</value>
+  </data>
+  <data name="HelpCategoryInvalid" xml:space="preserve">
+    <value>无法处理该帮助类别，因为 "{0}" 不是有效的帮助类别。</value>
+  </data>
+  <data name="HelpFileLoadFailure" xml:space="preserve">
+    <value>无法加载帮助文件 "{0}"。详细信息: {1}。</value>
+  </data>
+  <data name="HelpFileNotAccessible" xml:space="preserve">
+    <value>无法访问帮助文件 "{0}"，因为当前用户没有该文件的访问权限。详细信息: {1}。</value>
+  </data>
+  <data name="HelpFileNotValid" xml:space="preserve">
+    <value>帮助文件 "{0}" 不是有效的 XML 文档。详细信息: {1}。</value>
+  </data>
+  <data name="LoadHelpFileForTargetFailed" xml:space="preserve">
+    <value>从文件 {1} 加载 {0} 的帮助内容时出错。详细信息: {2}。若要下载更新的帮助主题，请运行 Update-Help cmdlet。若要联机获取帮助，请在 TechNet 库中搜索帮助主题，网址为 https://go.microsoft.com/fwlink/?LinkID=107116。</value>
+  </data>
+  <data name="ProviderLoadError" xml:space="preserve">
+    <value>无法加载提供程序 "{0}"。详细信息: {1}。</value>
+  </data>
+  <data name="HelpLoadError" xml:space="preserve">
+    <value>无法加载帮助文件。加载帮助文件 "{0}" 时出现以下 {1} 错误。</value>
+  </data>
+  <data name="MamlInvalidChildNodeError" xml:space="preserve">
+    <value>节点 "{0}" 不能将 "{1}" 作为子节点。节点路径: {2}。</value>
+  </data>
+  <data name="MamlInvalidChildNodeCountError" xml:space="preserve">
+    <value>节点 "{0}" 最多可以有 {2} 个 "{1}" 类型的子节点。节点路径: {3}。</value>
+  </data>
+  <data name="RegistryPathNotFound" xml:space="preserve">
+    <value>找不到注册表项: "{0}{1}"；将使用 "{2}" 加载帮助文件。</value>
+  </data>
+  <data name="NoParmsFound" xml:space="preserve">
+    <value>没有参数符合条件 {0}。</value>
+  </data>
+  <data name="ParamNotSupported" xml:space="preserve">
+    <value>请求的帮助类别不支持 {0}。</value>
+  </data>
+  <data name="NoURIFound" xml:space="preserve">
+    <value>无法显示此帮助主题的联机版本，因为未在命令代码或该命令的帮助文件中指定此帮助主题的 Internet 地址(URI)。</value>
+  </data>
+  <data name="InvalidURI" xml:space="preserve">
+    <value>指定的 URI {0} 无效。</value>
+  </data>
+  <data name="CannotLaunchURI" xml:space="preserve">
+    <value>启动浏览器以显示联机帮助失败。没有关联的程序或浏览器可用于打开 URI {0}。</value>
+  </data>
+  <data name="ProtocolNotSupported" xml:space="preserve">
+    <value>不支持 URI "{0}" 中指定的协议。仅支持 "{1}" 和 "{2}" 协议。</value>
+  </data>
+  <data name="MultipleOnlineTopicsNotSupported" xml:space="preserve">
+    <value>找到了多个帮助主题。请仅使用一个带有 -{0} 选项的帮助主题。</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailable" xml:space="preserve">
+    <value>无法从远程运行空间获取帮助，因为尚未打开该运行空间。 请通过运行隐式远程处理命令来打开该运行空间，然后再次尝试运行该命令以获取帮助。</value>
+  </data>
+  <data name="UpdatableHelpRequiresElevation" xml:space="preserve">
+    <value>访问被拒绝。此命令无法更新关于 PowerShell 核心模块或 $pshome\Modules 目录中的任何模块的帮助主题。
+若要更新这些帮助主题，请使用“以管理员身份运行”命令启动 PowerShell，然后再次尝试运行 Update-Help。</value>
+  </data>
+  <data name="GraphicalHostAssemblyIsNotFound" xml:space="preserve">
+    <value>若要使用 {0}，请确保你的应用程序使用 'Microsoft.NET.Sdk.WindowsDesktop' 作为项目 SDK，并且相应的程序集 'Microsoft.PowerShell.GraphicalHost' 可用。({1})</value>
+  </data>
+  <data name="RemotingNotSupportedForFeature" xml:space="preserve">
+    <value>{0} 在远程会话中不起作用。</value>
+  </data>
+  <data name="CircularDependencyInHelpForwarding" xml:space="preserve">
+    <value>ForwardHelpTargetName 无法引用函数本身。</value>
+  </data>
+  <data name="NoNetworkCommands" xml:space="preserve">
+    <value>在受限会话中，无法从网络位置获取帮助。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/HistoryStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/HistoryStrings.zh-Hans.resx
new file mode 100644
index 00000000000..7dffccf7a49
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/HistoryStrings.zh-Hans.resx
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidIdGetHistory" xml:space="preserve">
+    <value>The identifier {0} is not a valid value for a History identifier. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="NoHistoryForId" xml:space="preserve">
+    <value>Cannot locate the history for Id {0}.</value>
+  </data>
+  <data name="NoCountWithMultipleIds" xml:space="preserve">
+    <value>The count cannot be combined with multiple Ids.</value>
+  </data>
+  <data name="NoHistoryForCommandline" xml:space="preserve">
+    <value>Cannot locate the history for command line {0}.</value>
+  </data>
+  <data name="NoLastHistoryEntryFound" xml:space="preserve">
+    <value>Cannot locate most recent history.</value>
+  </data>
+  <data name="InvokeHistoryLoopDetected" xml:space="preserve">
+    <value>The Invoke-History cmdlet is called repeatedly, in a loop.</value>
+  </data>
+  <data name="InvokeHistoryMultipleCommandsError" xml:space="preserve">
+    <value>Cannot process multiple history commands. You can only run a single command by using Invoke-History.</value>
+  </data>
+  <data name="AddHistoryInvalidInput" xml:space="preserve">
+    <value>Cannot add history because the input object has a format that is not valid.</value>
+  </data>
+  <data name="InvalidCountValue" xml:space="preserve">
+    <value>The identifier {0} is not valid. Specify a positive number, and then try again.</value>
+  </data>
+  <data name="ClearHistoryWarning" xml:space="preserve">
+    <value>This command will clear all the entries from the session history.</value>
+  </data>
+  <data name="NoCountWithMultipleCmdLine" xml:space="preserve">
+    <value>The count cannot be combined with multiple CommandLine parameters.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/HostInterfaceExceptionsStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/HostInterfaceExceptionsStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ce5e8bd5cb2
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/HostInterfaceExceptionsStrings.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultCtorMessageTemplate" xml:space="preserve">
+    <value>已发生类型为“{0}”的错误。</value>
+  </data>
+  <data name="HostFunctionNotImplemented" xml:space="preserve">
+    <value>提示用户的命令失败，因为主机程序或命令类型不支持用户交互。请尝试使用支持用户交互的主机程序，例如 PowerShell 控制台，并从不支持用户交互的命令类型中删除与提示相关的命令。</value>
+  </data>
+  <data name="HostFunctionPromptNotImplemented" xml:space="preserve">
+    <value>提示用户的命令失败，因为主机程序或命令类型不支持用户交互。主机正在尝试通过以下消息请求确认: {0}</value>
+  </data>
+  <data name="RunspacePoolNotOpened" xml:space="preserve">
+    <value>无法调用该方法，因为池已关闭或已失败。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/InternalCommandStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/InternalCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..377a1f19d70
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/InternalCommandStrings.zh-Hans.resx
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbiguousMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched methods. Possible matches include:{1}.</value>
+  </data>
+  <data name="AmbiguousPropertyOrMethodName" xml:space="preserve">
+    <value>Input name "{0}" is ambiguous. It can be resolved to multiple matched members. Possible matches include:{1}.</value>
+  </data>
+  <data name="ForEachObjectKeyAction" xml:space="preserve">
+    <value>Retrieve the value for key '{0}'</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithArguments" xml:space="preserve">
+    <value>Invoke method '{0}' with arguments: {1}</value>
+  </data>
+  <data name="ForEachObjectMethodActionWithoutArguments" xml:space="preserve">
+    <value>Invoke method '{0}'</value>
+  </data>
+  <data name="ForEachObjectPropertyAction" xml:space="preserve">
+    <value>Retrieve the value for property '{0}'</value>
+  </data>
+  <data name="ForEachObjectTarget" xml:space="preserve">
+    <value>InputObject: {0}</value>
+  </data>
+  <data name="InputObjectIsNull" xml:space="preserve">
+    <value>Cannot operate on a 'null' input object.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Input name "{0}" cannot be resolved to a method.</value>
+  </data>
+  <data name="NoMethodInvocationInRestrictedLanguageMode" xml:space="preserve">
+    <value>Cannot invoke a method in the restricted language mode.</value>
+  </data>
+  <data name="NoShouldProcessForScriptBlockSet" xml:space="preserve">
+    <value>The -WhatIf and -Confirm parameters are not supported for script blocks.</value>
+  </data>
+  <data name="OperationNotAllowedInRestrictedLanguageMode" xml:space="preserve">
+    <value>The '{0}' operation is not allowed in the RestrictedLanguage mode.</value>
+  </data>
+  <data name="OperatorNotSpecified" xml:space="preserve">
+    <value>An operator is required to compare the two specified values. Include a valid operator in the command, and then try the command again. For example, Get-Process | Where-Object -Property Name -eq Idle</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a property.</value>
+  </data>
+  <data name="PropertyOrMethodNotFound" xml:space="preserve">
+    <value>The input name "{0}" cannot be resolved to a member.</value>
+  </data>
+  <data name="ValueNotSpecifiedForWhereObject" xml:space="preserve">
+    <value>The specified operator requires both the -Property and -Value parameters. Provide values for both parameters, and then try the command again.</value>
+  </data>
+  <data name="PSTaskStreamWriterWrongThread" xml:space="preserve">
+    <value>This method cannot be run on the current thread. It can only be called on the cmdlet thread.</value>
+  </data>
+  <data name="ParallelUsingVariableCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel using variable cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelPipedInputObjectCannotBeScriptBlock" xml:space="preserve">
+    <value>A ForEach-Object -Parallel piped input object cannot be a script block. Passed-in script block variables are not supported with ForEach-Object -Parallel, and can result in undefined behavior.</value>
+  </data>
+  <data name="ParallelCannotUseTimeoutWithJob" xml:space="preserve">
+    <value>The 'TimeoutSeconds' parameter cannot be used with the 'AsJob' parameter.</value>
+  </data>
+  <data name="ParallelCommonParametersNotSupported" xml:space="preserve">
+    <value>The following common parameters are not currently supported in the Parallel parameter set:
+ErrorAction, WarningAction, InformationAction, PipelineVariable</value>
+  </data>
+  <data name="ParallelPipedInputProcessingError" xml:space="preserve">
+    <value>An unexpected error has occurred while processing ForEach-Object -Parallel input. This may mean that some of the piped input did not get processed. Error: {0}.</value>
+  </data>
+  <data name="WDACLogTitle" xml:space="preserve">
+    <value>ForEach-Object Cmdlet</value>
+  </data>
+  <data name="WDACLogMessage" xml:space="preserve">
+    <value>Method invocation on type '{0}' will not be allowed when run in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/InternalHostStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/InternalHostStrings.zh-Hans.resx
new file mode 100644
index 00000000000..7fedf51cc33
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/InternalHostStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnterExitNestedPromptOutOfSync" xml:space="preserve">
+    <value>EnterNestedPrompt 的调用次数没有 ExitNestedPrompt 的调用次数多。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/InternalHostUserInterfaceStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/InternalHostUserInterfaceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..19396dacc2c
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/InternalHostUserInterfaceStrings.zh-Hans.resx
@@ -0,0 +1,223 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="WriteDebugLineStoppedError" xml:space="preserve">
+    <value>WriteDebug stopped because the value of the DebugPreference variable was 'Stop'.</value>
+  </data>
+  <data name="UnsupportedPreferenceError" xml:space="preserve">
+    <value>The value {0} is not a supported ActionPreference value.</value>
+  </data>
+  <data name="PromptEmptyDescriptionsError" xml:space="preserve">
+    <value>The "{0}" parameter must contain at least one value.</value>
+  </data>
+  <data name="ShouldContinueYesLabel" xml:space="preserve">
+    <value>&amp;Yes</value>
+  </data>
+  <data name="ShouldContinueYesHelp" xml:space="preserve">
+    <value>Continue.</value>
+  </data>
+  <data name="ShouldContinueYesToAllLabel" xml:space="preserve">
+    <value>Yes to &amp;All</value>
+  </data>
+  <data name="ShouldContinueYesToAllHelp" xml:space="preserve">
+    <value>Continue, and do not ask again whether to continue in this session.</value>
+  </data>
+  <data name="ShouldContinueNoLabel" xml:space="preserve">
+    <value>&amp;No</value>
+  </data>
+  <data name="ShouldContinueNoHelp" xml:space="preserve">
+    <value>End the operation with an error.</value>
+  </data>
+  <data name="ShouldContinueNoToAllLabel" xml:space="preserve">
+    <value>No to A&amp;ll</value>
+  </data>
+  <data name="ShouldContinueNoToAllHelp" xml:space="preserve">
+    <value>End the operation with an error. Do not request to resume operation for this session.</value>
+  </data>
+  <data name="ShouldContinueSuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="ShouldContinueSuspendHelp" xml:space="preserve">
+    <value>Pause the current operation and enter a command prompt. Type "exit" to resume the paused operation.</value>
+  </data>
+  <data name="ShouldContinuePromptMessage" xml:space="preserve">
+    <value>Continue with this operation?</value>
+  </data>
+  <data name="DefaultChoice" xml:space="preserve">
+    <value>(default is "{0}")</value>
+  </data>
+  <data name="DefaultChoicesForMultipleChoices" xml:space="preserve">
+    <value>(default choices are {0})</value>
+  </data>
+  <data name="ChoiceMessage" xml:space="preserve">
+    <value>Choice[{0}]: </value>
+  </data>
+  <data name="EmptyChoicesError" xml:space="preserve">
+    <value>"{0}" should have at least one element.</value>
+  </data>
+  <data name="InvalidDefaultChoiceForMultipleSelection" xml:space="preserve">
+    <value>"{0}" must be a valid index into "{1}". "{2}" is not a valid index.</value>
+  </data>
+  <data name="InvalidChoiceHotKeyError" xml:space="preserve">
+    <value>Cannot process the hot key because a question mark ("?") cannot be used as a hot key.</value>
+  </data>
+  <data name="VerboseFormatString" xml:space="preserve">
+    <value>VERBOSE: {0}</value>
+  </data>
+  <data name="WarningFormatString" xml:space="preserve">
+    <value>WARNING: {0}</value>
+  </data>
+  <data name="DebugFormatString" xml:space="preserve">
+    <value>DEBUG: {0}</value>
+  </data>
+  <data name="HostNotTranscribing" xml:space="preserve">
+    <value>The host is not currently transcribing.</value>
+  </data>
+  <data name="CommandStartTime" xml:space="preserve">
+    <value>Command start time: {0}</value>
+  </data>
+  <data name="TranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+Username: {1}
+RunAs User: {2}
+Configuration Name: {3}
+Machine: {4} ({5})
+Host Application: {6}
+Process ID: {7}
+{8}
+**********************</value>
+  </data>
+  <data name="MinimalTranscriptPrologue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript start
+Start time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="TranscriptEpilogue" xml:space="preserve">
+    <value>**********************
+PowerShell transcript end
+End time: {0:yyyyMMddHHmmss}
+**********************</value>
+  </data>
+  <data name="InvalidTranscriptFilePath" xml:space="preserve">
+    <value>File path {0} resolves to a directory.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Logging.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Logging.zh-Hans.resx
new file mode 100644
index 00000000000..eb4c7086028
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Logging.zh-Hans.resx
@@ -0,0 +1,300 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EngineHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]
+
+AdditionalInfo:
+    Name=[AdditionalInfo_Name1];Value=[AdditionalInfo_Value1]
+    Name=[AdditionalInfo_Name2];Value=[AdditionalInfo_Value2]
+    Name=[AdditionalInfo_Name3];Value=[AdditionalInfo_Value3]</value>
+  </data>
+  <data name="CommandHealthContext" xml:space="preserve">
+    <value>    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderHealthContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    ExceptionClass=[ExceptionClass]
+    ErrorCategory=[ErrorCategory]
+    ErrorId=[ErrorId]
+    ErrorMessage=[ErrorMessage]
+
+    Severity=[Severity]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="EngineLifecycleContext" xml:space="preserve">
+    <value>    NewEngineState=[NewEngineState]
+    PreviousEngineState=[PreviousEngineState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="CommandLifecycleContext" xml:space="preserve">
+    <value>    NewCommandState=[NewCommandState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="ProviderLifecycleContext" xml:space="preserve">
+    <value>    ProviderName=[ProviderName]
+    NewProviderState=[NewProviderState]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="SettingsContext" xml:space="preserve">
+    <value>    VariableName=[VariableName]
+    NewValue=[NewValue]
+    PreviousValue=[PreviousValue]
+
+    SequenceNumber=[SequenceNumber]
+
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    CommandName=[CommandName]
+    CommandType=[CommandType]
+    ScriptName=[ScriptName]
+    CommandPath=[CommandPath]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="PipelineExecutionDetailContext" xml:space="preserve">
+    <value>    DetailSequence=[DetailSequence]
+    DetailTotal=[DetailTotal]
+
+    SequenceNumber=[SequenceNumber]
+
+    UserId=[User]
+    HostName=[HostName]
+    HostVersion=[HostVersion]
+    HostId=[HostId]
+    HostApplication=[HostApplication]
+    EngineVersion=[EngineVersion]
+    RunspaceId=[RunspaceId]
+    PipelineId=[PipelineId]
+    ScriptName=[ScriptName]
+    CommandLine=[CommandLine]</value>
+  </data>
+  <data name="UnknownUserName" xml:space="preserve">
+    <value>未知</value>
+  </data>
+  <data name="EngineExperimentalFeatureNotFound" xml:space="preserve">
+    <value>配置文件中声明的引擎实验性功能 '{0}' 未在当前 PowerShell 中注册。</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>配置文件中声明的实验性功能 '{0}' 无效。
+实验性功能的名称应遵循以下约定: 
+    引擎功能名称: 'PS[FeatureName]'
+    模块功能名称: '[ModuleName].[FeatureName]'</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Metadata.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Metadata.zh-Hans.resx
new file mode 100644
index 00000000000..f3dbca846db
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Metadata.zh-Hans.resx
@@ -0,0 +1,267 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MetadataMemberInitialization" xml:space="preserve">
+    <value>Cannot initialize attributes for "{0}": "{1}"</value>
+  </data>
+  <data name="ValidateRangeElementType" xml:space="preserve">
+    <value>The argument cannot be validated because its type "{0}" is not the same type ({1}) as the maximum and minimum limits of the parameter. Make sure the argument is of type {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangePositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than zero.</value>
+  </data>
+  <data name="ValidateRangeNonNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not greater than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeNegativeFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than zero.</value>
+  </data>
+  <data name="ValidateRangeNonPositiveFailure" xml:space="preserve">
+    <value>The argument "{0}" cannot be validated because its value is not less than or equal to zero.</value>
+  </data>
+  <data name="ValidateRangeMinRangeMaxRangeType" xml:space="preserve">
+    <value>The specified minimum range ({0}) cannot be accepted because it is not the same type as the specified maximum range ({1}). Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeNotIComparable" xml:space="preserve">
+    <value>Cannot accept the MaxRange and MinRange parameter types. Both parameters must be objects that implement an IComparable interface.</value>
+  </data>
+  <data name="ValidateRangeMaxRangeSmallerThanMinRange" xml:space="preserve">
+    <value>The specified maximum range cannot be accepted because it is less than the specified minimum range. Update the ValidateRange attribute for the parameter.</value>
+  </data>
+  <data name="ValidateRangeGreaterThanMaxRangeFailure" xml:space="preserve">
+    <value>The {0} argument is greater than the maximum allowed range of {1}. Supply an argument that is less than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidateRangeSmallerThanMinRangeFailure" xml:space="preserve">
+    <value>The {0} argument is less than the minimum allowed range of {1}. Supply an argument that is greater than or equal to {1} and then try the command again.</value>
+  </data>
+  <data name="ValidatePatternFailure" xml:space="preserve">
+    <value>The argument "{0}" does not match the "{1}" pattern. Supply an argument that matches "{1}" and try the command again.</value>
+  </data>
+  <data name="ValidateCountNotInArray" xml:space="preserve">
+    <value>The ValidateCount attribute cannot be applied to a non-array parameter. Either remove the attribute from the parameter or make the parameter an array parameter.</value>
+  </data>
+  <data name="ValidateCountExactFailure" xml:space="preserve">
+    <value>The parameter requires exactly {0} value(s) - {1} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMinMaxFailure" xml:space="preserve">
+    <value>The parameter requires at least {0} value(s) and no more than {1} value(s) - {2} value(s) were provided.</value>
+  </data>
+  <data name="ValidateCountMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum number of arguments for a parameter is fewer than the specified minimum number of arguments. Update the ValidateCount attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthSmallerThanMinLength" xml:space="preserve">
+    <value>The specified maximum character length of the argument is shorter than the specified minimum argument character length. Update the ValidateLength attribute for the parameter.</value>
+  </data>
+  <data name="ValidateLengthNotString" xml:space="preserve">
+    <value>The ValidateLength attribute cannot be applied to a parameter that is not a string or string[] parameter. Make the parameter a string or string[] parameter.</value>
+  </data>
+  <data name="ValidateLengthMinLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too short. Specify an argument with a length that is greater than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateLengthMaxLengthFailure" xml:space="preserve">
+    <value>The character length ({1}) of the argument is too long. Specify an argument with a length that is shorter than or equal to "{0}", and then try the command again.</value>
+  </data>
+  <data name="ValidateSetFailure" xml:space="preserve">
+    <value>The argument "{0}" does not belong to the set "{1}" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.</value>
+  </data>
+  <data name="ValidateSetGeneratedValidValuesListIsNull" xml:space="preserve">
+    <value>Valid values generator return a null value.</value>
+  </data>
+  <data name="ValidateFailureResult" xml:space="preserve">
+    <value>"{0}" failed on property "{1}" {2}</value>
+  </data>
+  <data name="ParsingTooManyParameterSets" xml:space="preserve">
+    <value>Cannot get or run the command. The maximum number of parameter sets for this command has been exceeded.</value>
+  </data>
+  <data name="ArgumentTransformationArgumentsShouldBeStrings" xml:space="preserve">
+    <value>Cannot process the argument because the argument value is not a string. The values of parameter arguments that have the ArgumentTransformationAttribute specified should be strings.</value>
+  </data>
+  <data name="InvalidValueFailure" xml:space="preserve">
+    <value>The variable cannot be validated because the value {1} is not a valid value for the {0} variable.</value>
+  </data>
+  <data name="InvalidMetadataForCurrentValue" xml:space="preserve">
+    <value>The attribute cannot be added because variable {0} with value {1} would no longer be valid.</value>
+  </data>
+  <data name="ValidateNotNullFailure" xml:space="preserve">
+    <value>The argument is null. Provide a valid value for the argument, and then try running the command again.</value>
+  </data>
+  <data name="ValidateNotNullCollectionFailure" xml:space="preserve">
+    <value>The argument has a null value, or an element of the argument collection contains a null value. Provide a collection that does not contain any null values, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyFailure" xml:space="preserve">
+    <value>The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrEmptyCollectionFailure" xml:space="preserve">
+    <value>The argument is null, empty, or an element of the argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceFailure" xml:space="preserve">
+    <value>The argument is null, empty, or consists of only white-space characters. Provide an argument that contains non white-space characters, and then try the command again.</value>
+  </data>
+  <data name="ValidateNotNullOrWhiteSpaceCollectionFailure" xml:space="preserve">
+    <value>An element of the argument collection is null, empty, or consists of only white-space characters. Supply a collection that does not contain any those values and then try the command again.</value>
+  </data>
+  <data name="ParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>A parameter with the name '{0}' was defined multiple times for the command.</value>
+  </data>
+  <data name="AliasParameterNameAlreadyExistsForCommand" xml:space="preserve">
+    <value>The parameter alias cannot be specified because an alias with the name '{0}' was already defined multiple times for the command.</value>
+  </data>
+  <data name="ParameterNameConflictsWithAlias" xml:space="preserve">
+    <value>The parameter '{0}' cannot be specified because it conflicts with the parameter alias of the same name for parameter '{1}'.</value>
+  </data>
+  <data name="ValidateScriptFailure" xml:space="preserve">
+    <value>The "{1}" validation script for the argument with value "{0}" did not return a result of True. Determine why the validation script failed, and then try the command again.</value>
+  </data>
+  <data name="ValidateVersionFailure" xml:space="preserve">
+    <value>The "{0}" argument does not contain a valid PowerShell version. Supply a valid version number and then try the command again.</value>
+  </data>
+  <data name="ValidateVariableName" xml:space="preserve">
+    <value>Cannot validate argument '{0}' because it is not a valid variable name.</value>
+  </data>
+  <data name="JobDefinitionMustDeriveFromIJobConverter" xml:space="preserve">
+    <value>The job conversion type must derive from IAstToScriptBlockConverter.</value>
+  </data>
+  <data name="ValidateDrivePathArgNotString" xml:space="preserve">
+    <value>The path argument is invalid. Supply a path argument that is a string type.</value>
+  </data>
+  <data name="ValidateDrivePathFailure" xml:space="preserve">
+    <value>The path argument drive {0} does not belong to the set of approved drives: {1}. Supply a path argument with an approved drive.</value>
+  </data>
+  <data name="ValidateDrivePathInvalidChar" xml:space="preserve">
+    <value>The path argument contains invalid characters.</value>
+  </data>
+  <data name="ValidateDrivePathNoRoot" xml:space="preserve">
+    <value>The path argument has no root drive.  Supply a full path argument with a root drive.</value>
+  </data>
+  <data name="ArgumentNullOrEmpty" xml:space="preserve">
+    <value>The argument value for the parameter '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="InvalidEnumArgument" xml:space="preserve">
+    <value>The Enum member '{0}' is not a valid value for the parameter '{1}'. Specify one of the following members and try again: {2}.</value>
+  </data>
+  <data name="ValidateTrustedDataFailure" xml:space="preserve">
+    <value>Cannot process input. The argument "{0}" is not trusted.</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedLogTitle" xml:space="preserve">
+    <value>ValidateTrustedData Attribute Check Failure</value>
+  </data>
+  <data name="WDACParameterArgNotTrustedMessage" xml:space="preserve">
+    <value>The parameter argument '{0}' is not trusted and will fail the ValidateTrustedData parameter attribute check in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/MiniShellErrors.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/MiniShellErrors.zh-Hans.resx
new file mode 100644
index 00000000000..b7d2e849e72
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/MiniShellErrors.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="UpdateNotSupportedForConfigurationCategory" xml:space="preserve">
+    <value>The update is not supported for the runspace configuration category {0}. </value>
+  </data>
+  <data name="UpdateAssemblyErrors" xml:space="preserve">
+    <value>The following errors occurred when updating the assembly list for the runspace: {0}.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Modules.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Modules.zh-Hans.resx
new file mode 100644
index 00000000000..6dca5fd20cf
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Modules.zh-Hans.resx
@@ -0,0 +1,687 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ModuleNotFound" xml:space="preserve">
+    <value>The specified module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="ModuleWithVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with version '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MaximumVersionFormatIncorrect" xml:space="preserve">
+    <value>The specified MaximumVersion '{0}' was incorrect. If you are using '*', MaximumVersion only supports one '*' and should always be placed at the end of MaximumVersion.</value>
+  </data>
+  <data name="MaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MaximumVersion '{1}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionNotFound" xml:space="preserve">
+    <value>The specified module '{0}' with MinimumVersion '{1}' and MaximumVersion '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MinimumVersionAndMaximumVersionInvalidRange" xml:space="preserve">
+    <value>The MinimumVersion '{0}' should not be greater than MaximumVersion '{1}'.</value>
+  </data>
+  <data name="ModuleAssemblyFound" xml:space="preserve">
+    <value>The assembly '{0}' was not loaded because no assembly with that name was found. Verify the assembly name, and then try again.</value>
+  </data>
+  <data name="ManifestMemberNotFound" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed because no valid module was found in any module directory.</value>
+  </data>
+  <data name="CantUseAsCustomObjectWithBinaryModule" xml:space="preserve">
+    <value>No custom object was returned for module '{0}' because the -AsCustomObject parameter can only be used with script modules.</value>
+  </data>
+  <data name="InvalidModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' could not be processed because it is not a valid PowerShell module manifest file. Remove the elements that are not permitted: {1}</value>
+  </data>
+  <data name="EmptyModuleManifest" xml:space="preserve">
+    <value>Processing the module manifest file '{0}' did not result in a valid manifest object. Update the file to contain a valid PowerShell module manifest. A valid manifest can be created using the New-ModuleManifest cmdlet.</value>
+  </data>
+  <data name="InvalidModuleManifestMember" xml:space="preserve">
+    <value>The '{0}' module cannot be imported because its manifest contains one or more members that are not valid. The valid manifest members are ({1}). Remove the members that are not valid ({2}), then try to import the module again.</value>
+  </data>
+  <data name="InvalidModuleSpecificationMember" xml:space="preserve">
+    <value>The hashtable describing a module contains one or more members that are not valid. The valid members are ({0}). Remove the members that are not valid ({1}), then try again.</value>
+  </data>
+  <data name="ModuleTooDeeplyNested" xml:space="preserve">
+    <value>Cannot load the module '{0}' because the module nesting limit has been exceeded. Modules can only be nested to {1} levels. Evaluate and change the order in which you are loading modules to prevent exceeding the nesting limit, and then try running your script again.</value>
+  </data>
+  <data name="ModuleManifestMissingModuleVersion" xml:space="preserve">
+    <value>The member 'ModuleVersion' is not present in the module manifest. This member must exist and be assigned a version number of the form 'n.n.n.n'. Add the missing member to the file '{0}'.</value>
+  </data>
+  <data name="ModuleManifestInvalidValue" xml:space="preserve">
+    <value>The '{0}' member is not valid in the module manifest file '{2}': {1}</value>
+  </data>
+  <data name="ModuleManifestInsufficientModuleVersion" xml:space="preserve">
+    <value>The version '{0}' of module '{1}' does not meet the required minimum version '{2}'. Verify that the version number is supported, and then try loading the module again.</value>
+  </data>
+  <data name="ModuleManifestInsufficientPowerShellVersion" xml:space="preserve">
+    <value>The version of PowerShell on this computer is '{0}'. The module '{1}' requires a minimum PowerShell version of '{2}' to run. Verify that you have the minimum required version of PowerShell installed, and then try again.</value>
+  </data>
+  <data name="ModuleManifestNestedModulesCantGoWithModuleToProcess" xml:space="preserve">
+    <value>The module manifest member 'NestedModules' cannot be used if the 'ModuleToProcess' member is a binary module. Edit the module manifest file at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleManifestInvalidManifestMember" xml:space="preserve">
+    <value>The member '{0}' in the module manifest is not valid: {1}. Verify that a valid value is specified for this field in the '{2}' file.</value>
+  </data>
+  <data name="InvalidModuleManifestPath" xml:space="preserve">
+    <value>The module manifest path '{0}' is not valid. The value of the Path argument must resolve to a single file that has a '.psd1' extension. Change the value of the Path argument to point to a valid psd1 file, and then try again.</value>
+  </data>
+  <data name="InvalidModuleManifestVersion" xml:space="preserve">
+    <value>The ModuleVersion key in module manifest '{0}' specifies module version '{1}' which does not match its version folder name at '{2}'. Change the value of the ModuleVersion key to match the version folder name.</value>
+  </data>
+  <data name="InvalidNestedModuleinModuleManifest" xml:space="preserve">
+    <value>The specified NestedModule entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredAssembliesInModuleManifest" xml:space="preserve">
+    <value>The specified RequiredAssemblies entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidFilePathinModuleManifest" xml:space="preserve">
+    <value>The specified FileList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidRequiredModulesinModuleManifest" xml:space="preserve">
+    <value>The specified RequiredModules entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidModuleListinModuleManifest" xml:space="preserve">
+    <value>The specified ModuleList entry '{0}' in the module manifest '{1}' is invalid. Try again after updating this entry with valid values.</value>
+  </data>
+  <data name="InvalidPowerShellVersionInModuleManifest" xml:space="preserve">
+    <value>The module manifest '{0}' is specified with the CompatiblePSEditions key which is supported only on PowerShell version '5.1' or higher. Update the value of the PowerShellVersion key to '5.1' or higher, and try again.</value>
+  </data>
+  <data name="DuplicateEntriesInCompatiblePSEditions" xml:space="preserve">
+    <value>The specified value '{0}' for CompatiblePSEditions contains duplicate PowerShell Edition names. Try again after removing the duplicate PowerShell Edition names.</value>
+  </data>
+  <data name="ModuleVersionEqualsToVersionFolder" xml:space="preserve">
+    <value>Version specified in ModuleVersion key is equal to version folder name.</value>
+  </data>
+  <data name="SkippingInvalidModuleVersionFolder" xml:space="preserve">
+    <value>Skipping the Version folder {0} under Module {1} as it does not have a valid module manifest file.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleName" xml:space="preserve">
+    <value>The 'ModuleName' member does not exist in the hashtable that describes this module.</value>
+  </data>
+  <data name="RequiredModuleMissingModuleVersion" xml:space="preserve">
+    <value>The 'ModuleVersion', 'MaximumVersion' and 'RequiredVersion' members do not exist in the hashtable that describes this module. One of these three members must exist, and be assigned a version number in the format 'n.n.n.n'.</value>
+  </data>
+  <data name="RequiredModuleNotLoaded" xml:space="preserve">
+    <value>The required module '{1}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongGuid" xml:space="preserve">
+    <value>The required module '{1}' with GUID '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongVersion" xml:space="preserve">
+    <value>The required module '{1}' with version '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MaximumVersion '{2}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotLoadedWrongMinimumVersionAndMaximumVersion" xml:space="preserve">
+    <value>The required module '{1}' with MinimumVersion '{2}' and MaximumVersion '{3}' is not loaded. Load the module or remove the module from 'RequiredModules' in the file '{0}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundRequiredVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with RequiredVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with MaximumVersion '{1}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundModuleAndMaximumVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found with ModuleVersion '{1}' and MaximumVersion '{2}'.</value>
+  </data>
+  <data name="RequiredModuleNotFoundWithoutVersion" xml:space="preserve">
+    <value>The module '{0}' cannot be found.</value>
+  </data>
+  <data name="NoModulesRemoved" xml:space="preserve">
+    <value>No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.</value>
+  </data>
+  <data name="UnableToRemoveModuleMember" xml:space="preserve">
+    <value>The '{0}' member, which was imported from module '{1}', cannot be removed for the following reason: {2}</value>
+  </data>
+  <data name="ModuleIsReadOnly" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is read-only. Add the Force parameter to your command to remove read-only modules.</value>
+  </data>
+  <data name="ModuleIsConstant" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is marked as 'constant.' A module cannot be removed if it is marked 'constant.'</value>
+  </data>
+  <data name="ModuleIsRequired" xml:space="preserve">
+    <value>Unable to remove the module '{0}' because it is required by '{1}'. Add the Force parameter to your command to remove the module.</value>
+  </data>
+  <data name="CanOnlyBeUsedFromWithinAModule" xml:space="preserve">
+    <value>The Export-ModuleMember cmdlet can only be called from inside a module.</value>
+  </data>
+  <data name="InvalidModuleExtension" xml:space="preserve">
+    <value>The extension '{0}' is not a valid module extension. The supported module extensions are '.dll', '.ps1', '.psm1', '.psd1' and '.cdxml'. Correct the extension then try adding the file '{1}' again.</value>
+  </data>
+  <data name="InvalidOperationOnBinaryModule" xml:space="preserve">
+    <value>This operation cannot be performed on a binary module. It can only be performed on a script module.</value>
+  </data>
+  <data name="ScriptsToProcessIncorrectExtension" xml:space="preserve">
+    <value>The file '{0}' is not allowed because it does not have the extension '.ps1'.</value>
+  </data>
+  <data name="DefaultCompanyName" xml:space="preserve">
+    <value>Unknown</value>
+  </data>
+  <data name="DefaultCopyrightMessage" xml:space="preserve">
+    <value>(c) {0}. All rights reserved.</value>
+  </data>
+  <data name="RemovingImportedFunction" xml:space="preserve">
+    <value>Removing the imported "{0}" function.</value>
+  </data>
+  <data name="RemovingImportedAlias" xml:space="preserve">
+    <value>Removing the imported "{0}" alias.</value>
+  </data>
+  <data name="RemovingImportedVariable" xml:space="preserve">
+    <value>Removing the imported "{0}" variable.</value>
+  </data>
+  <data name="LoadingModule" xml:space="preserve">
+    <value>Loading module from path '{0}'.</value>
+  </data>
+  <data name="LoadingFile" xml:space="preserve">
+    <value>Loading '{0}' from path '{1}'.</value>
+  </data>
+  <data name="DottingScriptFile" xml:space="preserve">
+    <value>Dot-sourcing the script file '{0}'.</value>
+  </data>
+  <data name="ImportingFunction" xml:space="preserve">
+    <value>Importing function '{0}'.</value>
+  </data>
+  <data name="ImportingCmdlet" xml:space="preserve">
+    <value>Importing cmdlet '{0}'.</value>
+  </data>
+  <data name="ImportingAlias" xml:space="preserve">
+    <value>Importing alias '{0}'.</value>
+  </data>
+  <data name="ImportingVariable" xml:space="preserve">
+    <value>Importing variable '{0}'.</value>
+  </data>
+  <data name="ExportingCmdlet" xml:space="preserve">
+    <value>Exporting cmdlet '{0}'.</value>
+  </data>
+  <data name="ExportingFunction" xml:space="preserve">
+    <value>Exporting function '{0}'.</value>
+  </data>
+  <data name="ExportingAlias" xml:space="preserve">
+    <value>Exporting alias '{0}'.</value>
+  </data>
+  <data name="ExportingVariable" xml:space="preserve">
+    <value>Exporting variable '{0}'.</value>
+  </data>
+  <data name="ImportingNonStandardVerb" xml:space="preserve">
+    <value>The names of some imported commands from the module '{0}' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerbose" xml:space="preserve">
+    <value>The '{0}' command in the {1}' module was imported, but because its name does not include an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.</value>
+  </data>
+  <data name="ImportingNonStandardVerbVerboseSuggestion" xml:space="preserve">
+    <value>The '{0}' command in the {2}' module was imported, but because its name does not include an approved verb, it might be difficult to find. The suggested alternative verbs are "{1}".</value>
+  </data>
+  <data name="ImportingNonStandardNoun" xml:space="preserve">
+    <value>Some imported command names contain one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="ImportingNonStandardNounVerbose" xml:space="preserve">
+    <value>The command name '{0}' from the module '{1}' contains one or more of the following restricted characters: # , ( ) {{ }} [ ] &amp; - / \ $ ^ ; : " ' &lt; &gt; | ? @ ` * % + = ~</value>
+  </data>
+  <data name="CreatingModuleManifestFile" xml:space="preserve">
+    <value>Creating the "{0}" module manifest file.</value>
+  </data>
+  <data name="ConfirmRemoveModule" xml:space="preserve">
+    <value>{0} (Path: '{1}')</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>The current processor architecture is: {0}. The module '{1}' requires the following architecture: {2}.</value>
+  </data>
+  <data name="InvalidPowerShellHostName" xml:space="preserve">
+    <value>The name of the current PowerShell host is: '{0}'. The module '{1}' requires the following PowerShell host: '{2}'.</value>
+  </data>
+  <data name="InvalidPowerShellHostVersion" xml:space="preserve">
+    <value>The current PowerShell host is: '{0}' (version {1}). The module '{2}' requires a minimum PowerShell host version of '{3}' to run.</value>
+  </data>
+  <data name="ManifestHeaderLine1" xml:space="preserve">
+    <value>Module manifest for module '{0}'</value>
+  </data>
+  <data name="ManifestHeaderLine2" xml:space="preserve">
+    <value>Generated by: {0}</value>
+  </data>
+  <data name="ManifestHeaderLine3" xml:space="preserve">
+    <value>Generated on: {0}</value>
+  </data>
+  <data name="RootModule" xml:space="preserve">
+    <value>Script module or binary module file associated with this manifest.</value>
+  </data>
+  <data name="NestedModules" xml:space="preserve">
+    <value>Modules to import as nested modules of the module specified in RootModule/ModuleToProcess</value>
+  </data>
+  <data name="GUID" xml:space="preserve">
+    <value>ID used to uniquely identify this module</value>
+  </data>
+  <data name="Author" xml:space="preserve">
+    <value>Author of this module</value>
+  </data>
+  <data name="CompanyName" xml:space="preserve">
+    <value>Company or vendor of this module</value>
+  </data>
+  <data name="Copyright" xml:space="preserve">
+    <value>Copyright statement for this module</value>
+  </data>
+  <data name="ModuleVersion" xml:space="preserve">
+    <value>Version number of this module.</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description of the functionality provided by this module</value>
+  </data>
+  <data name="PowerShellVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell engine required by this module</value>
+  </data>
+  <data name="CLRVersion" xml:space="preserve">
+    <value>Minimum version of the common language runtime (CLR) required by this module. {0}</value>
+  </data>
+  <data name="RequiredModules" xml:space="preserve">
+    <value>Modules that must be imported into the global environment prior to importing this module</value>
+  </data>
+  <data name="ScriptsToProcess" xml:space="preserve">
+    <value>Script files (.ps1) that are run in the caller's environment prior to importing this module.</value>
+  </data>
+  <data name="TypesToProcess" xml:space="preserve">
+    <value>Type files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="FormatsToProcess" xml:space="preserve">
+    <value>Format files (.ps1xml) to be loaded when importing this module</value>
+  </data>
+  <data name="RequiredAssemblies" xml:space="preserve">
+    <value>Assemblies that must be loaded prior to importing this module</value>
+  </data>
+  <data name="FileList" xml:space="preserve">
+    <value>List of all files packaged with this module</value>
+  </data>
+  <data name="PrivateData" xml:space="preserve">
+    <value>Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.</value>
+  </data>
+  <data name="Tags" xml:space="preserve">
+    <value>Tags applied to this module. These help with module discovery in online galleries.</value>
+  </data>
+  <data name="ProjectUri" xml:space="preserve">
+    <value>A URL to the main website for this project.</value>
+  </data>
+  <data name="LicenseUri" xml:space="preserve">
+    <value>A URL to the license for this module.</value>
+  </data>
+  <data name="IconUri" xml:space="preserve">
+    <value>A URL to an icon representing this module.</value>
+  </data>
+  <data name="ReleaseNotes" xml:space="preserve">
+    <value>ReleaseNotes of this module</value>
+  </data>
+  <data name="Prerelease" xml:space="preserve">
+    <value>Prerelease string of this module</value>
+  </data>
+  <data name="RequireLicenseAcceptance" xml:space="preserve">
+    <value>Flag to indicate whether the module requires explicit user acceptance for install/update/save</value>
+  </data>
+  <data name="ExternalModuleDependencies" xml:space="preserve">
+    <value>External dependent modules of this module</value>
+  </data>
+  <data name="EndOfManifestHashTable" xml:space="preserve">
+    <value>End of {0} hashtable</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableError" xml:space="preserve">
+    <value>The PrivateData parameter value must be a hash table to create the module manifest with the following parameter values Tags, ProjectUri, LicenseUri, IconUri or ReleaseNotes. Either remove the Tags, ProjectUri, LicenseUri, IconUri, or ReleaseNotes parameter values or wrap the contents of PrivateData in a hashtable.</value>
+  </data>
+  <data name="PrivateDataValueTypeShouldBeHashTableWarning" xml:space="preserve">
+    <value>The PrivateData should be defined as a hashtable, but this module manifest defines it as an object. Please consider wrapping the contents of PrivateData in a hashtable. This will enable you to add the Tags, ProjectUri, LicenseUri, IconUri, and ReleaseNotes properties to the module manifest at a later time.</value>
+  </data>
+  <data name="InvalidParameterValue" xml:space="preserve">
+    <value>The specified value '{0}' is invalid, try again with a valid value.</value>
+  </data>
+  <data name="FunctionsToExport" xml:space="preserve">
+    <value>Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.</value>
+  </data>
+  <data name="AliasesToExport" xml:space="preserve">
+    <value>Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.</value>
+  </data>
+  <data name="CmdletsToExport" xml:space="preserve">
+    <value>Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.</value>
+  </data>
+  <data name="VariablesToExport" xml:space="preserve">
+    <value>Variables to export from this module</value>
+  </data>
+  <data name="DscResourcesToExport" xml:space="preserve">
+    <value>DSC resources to export from this module</value>
+  </data>
+  <data name="CompatiblePSEditions" xml:space="preserve">
+    <value>Supported PSEditions</value>
+  </data>
+  <data name="ProcessorArchitecture" xml:space="preserve">
+    <value>Processor architecture (None, X86, Amd64) required by this module</value>
+  </data>
+  <data name="ModuleList" xml:space="preserve">
+    <value>List of all modules packaged with this module</value>
+  </data>
+  <data name="DotNetFrameworkVersion" xml:space="preserve">
+    <value>Minimum version of Microsoft .NET Framework required by this module. {0}</value>
+  </data>
+  <data name="PowerShellHostName" xml:space="preserve">
+    <value>Name of the PowerShell host required by this module</value>
+  </data>
+  <data name="PowerShellHostVersion" xml:space="preserve">
+    <value>Minimum version of the PowerShell host required by this module</value>
+  </data>
+  <data name="HelpInfoURI" xml:space="preserve">
+    <value>HelpInfo URI of this module</value>
+  </data>
+  <data name="ModuleDriveInUse" xml:space="preserve">
+    <value>Because the {0} module is providing the PSDrive in the current PowerShell session, no modules were removed. Change the current PSDrive provider, and then try removing modules again.</value>
+  </data>
+  <data name="ImportModuleNoClobberForCmdlet" xml:space="preserve">
+    <value>The cmdlet '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForAlias" xml:space="preserve">
+    <value>The alias '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForFunction" xml:space="preserve">
+    <value>The function '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="ImportModuleNoClobberForVariable" xml:space="preserve">
+    <value>The variable '{0}' was not imported because there is a member with the same name in the current scope.</value>
+  </data>
+  <data name="WildCardNotAllowedInModuleToProcessAndInNestedModules" xml:space="preserve">
+    <value>Wildcard characters are not allowed in members 'ModuleToProcess', 'RootModule', or 'NestedModules' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CoreModuleCannotBeRemoved" xml:space="preserve">
+    <value>The module '{0}' is a core module for PowerShell. Add the Force parameter to your command to remove core modules.</value>
+  </data>
+  <data name="ModuleManifestCannotContainBothModuleToProcessAndRootModule" xml:space="preserve">
+    <value>The module manifest cannot contain both the 'ModuleToProcess' and 'RootModule' members. Change the module manifest file to remove one of these members at '{0}', and then try again.</value>
+  </data>
+  <data name="ModuleToProcessFieldDeprecated" xml:space="preserve">
+    <value>The module manifest member 'ModuleToProcess' has been deprecated. Use the 'RootModule' member instead.</value>
+  </data>
+  <data name="DefaultCommandPrefix" xml:space="preserve">
+    <value>Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.</value>
+  </data>
+  <data name="GlobalAndScopeParameterCannotBeSpecifiedTogether" xml:space="preserve">
+    <value>The 'Global' and 'Scope' parameters cannot be specified together. Remove one of these parameters, and then try running the command again.</value>
+  </data>
+  <data name="RequiredModulesCyclicDependency" xml:space="preserve">
+    <value>The required module '{0}' is not loaded. The module '{0}' has a requiredModule '{1}' in its module manifest '{2}' that points to a cyclic dependency.</value>
+  </data>
+  <data name="RequiredModuleNotFound" xml:space="preserve">
+    <value>The required module '{0}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="MixedModuleOverCimSessionWarning" xml:space="preserve">
+    <value>Some commands from module {0} cannot be imported over a CimSession. To get all the commands, verify that the remote server has PowerShell remote management enabled, and then try adding the PSSession parameter to an Import-Module cmdlet.</value>
+  </data>
+  <data name="WinCompatModuleWarning" xml:space="preserve">
+    <value>Module {0} is loaded in Windows PowerShell using {1} remoting session; please note that all input and output of commands from this module will be deserialized objects. If you want to load this module into PowerShell please use 'Import-Module -SkipEditionCheck' syntax.</value>
+  </data>
+  <data name="WinCompatRequredVersionError" xml:space="preserve">
+    <value>Detected Windows PowerShell version {0}. Windows PowerShell 5.1 is required to load modules using Windows PowerShell compatibility feature. Install Windows Management Framework (WMF) 5.1 from https://aka.ms/WMF5Download to enable this feature.</value>
+  </data>
+  <data name="WinCompatModuleInDenyList" xml:space="preserve">
+    <value>Module '{0}' is blocked from loading using Windows PowerShell compatibility feature by a 'WindowsPowerShellCompatibilityModuleDenyList' setting in PowerShell configuration file.</value>
+  </data>
+  <data name="PsModuleOverCimSessionError" xml:space="preserve">
+    <value>The module {0} cannot be imported over a CimSession. Try using the PSSession parameter of the Import-Module cmdlet.</value>
+  </data>
+  <data name="InvalidProcessorArchitectureInManifest" xml:space="preserve">
+    <value>The processor architecture value of {0} is not supported. Run the New-ModuleManifest command again, specifying one of the following supported enumeration values for processor architecture: None, MSIL, X86, Amd64, Arm</value>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyInListAvailableMode" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only list available modules. Add the ListAvailable parameter to your command, and then try again.</value>
+  </data>
+  <data name="ModuleLoadedAsASnapin" xml:space="preserve">
+    <value>The '{0}' module was not imported because the '{0}' snap-in was already imported.</value>
+  </data>
+  <data name="WildCardNotAllowedInRequiredAssemblies" xml:space="preserve">
+    <value>Wildcard characters are not allowed in the member 'RequiredAssemblies' in the module manifest '{0}'.</value>
+  </data>
+  <data name="CmdletizationDoesSupportRexportingNestedModules" xml:space="preserve">
+    <value>The value of the {0} key in {1} is {2} and the module has nested modules. When a CDXML file is the root module, the Import-Module command fails because the commands in nested modules cannot be exported. Move the CDXML file to the NestedModules key and try the command again.</value>
+    <comment>{0} is equal to either ModuleToProcess or RootModule
+{1} is a placeholder for a file path to psd1 file
+{2} is a placeholder for a file path to cdxml file</comment>
+  </data>
+  <data name="RemoteDiscoveryRemotePsrpCommandFailed" xml:space="preserve">
+    <value>Failure from remote command: {0}: {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToGenerateProxyForRemoteModule" xml:space="preserve">
+    <value>Failed to generate proxies for remote module '{0}'. {{0}}</value>
+  </data>
+  <data name="RemoteDiscoveryFailedToProcessRemoteModule" xml:space="preserve">
+    <value>Failed to process the remote module {0}. {1}</value>
+  </data>
+  <data name="RemoteDiscoveryFailureFromDiscoveryProvider" xml:space="preserve">
+    <value>Failed to receive module data from the remote CimSession. {0}</value>
+  </data>
+  <data name="RequiredModuleNotFoundWrongGuidVersion" xml:space="preserve">
+    <value>The required module '{0}' with GUID '{1}' and version '{2}' was not loaded because no valid module file was found in any module directory.</value>
+  </data>
+  <data name="RemoteDiscoveryProviderNotFound" xml:space="preserve">
+    <value>A CIM provider for module discovery was not found on the CIM server. {0}</value>
+    <comment>{0} is a placeholder for a more detailed error message</comment>
+  </data>
+  <data name="CannotDetectNetFrameworkVersion" xml:space="preserve">
+    <value>Cannot verify the Microsoft .NET Framework version {0} because it is not included in the list of permitted versions.</value>
+  </data>
+  <data name="ScriptAnalysisModule" xml:space="preserve">
+    <value>Analyzing {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="ScriptAnalysisPreparing" xml:space="preserve">
+    <value>Preparing modules for first use.</value>
+  </data>
+  <data name="DeterminingAvailableModules" xml:space="preserve">
+    <value>Searching for available modules</value>
+  </data>
+  <data name="SearchingUncShare" xml:space="preserve">
+    <value>Searching UNC share {0}.</value>
+    <comment>{0} should not be localized, is used to contain a file path.</comment>
+  </data>
+  <data name="RemoteDiscoveryWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet against a remote computer can only be done for module names that do not include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleDiscoveryForLoadedModulesWorksOnlyForUnQualifiedNames" xml:space="preserve">
+    <value>Running the Get-Module cmdlet without ListAvailable parameter is not supported for module names that include a path. Name parameter has this element '{0}' which resolves to a path. Update the Name parameter to not have path elements, and then try again.</value>
+  </data>
+  <data name="ModuleNotFoundForGetModule" xml:space="preserve">
+    <value>The specified module '{0}' was not found. Update the Name parameter to point to a valid path, and then try again. </value>
+  </data>
+  <data name="PopulatingRepositorySourceLocation" xml:space="preserve">
+    <value>Populating RepositorySourceLocation property for module {0}.</value>
+  </data>
+  <data name="ManifestMemberNotValid" xml:space="preserve">
+    <value>The module to process '{0}', listed in field '{1}' of module manifest '{2}' was not processed. {3}</value>
+  </data>
+  <data name="PrerequisiteForDesktopEditionOnly" xml:space="preserve">
+    <value>This prerequisite is valid for the PowerShell Desktop edition only.</value>
+  </data>
+  <data name="PSEditionNotSupported" xml:space="preserve">
+    <value>Module '{0}' does not support current PowerShell edition '{1}'. Its supported editions are '{2}'. Use 'Import-Module -SkipEditionCheck' to ignore the compatibility of this module.</value>
+  </data>
+  <data name="ImplicitWinCompatDisabled" xml:space="preserve">
+    <value>Module '{0}' supports PowerShell edition '{1}' and cannot be loaded implicitly using the Windows Compatibility feature because it is disabled in the settings file. Use 'Import-Module -UseWindowsPowerShell' to load this module with Windows PowerShell or 'Import-Module -SkipEditionCheck' to try to load the module with the current PowerShell.</value>
+  </data>
+  <data name="ExperimentalFeatureNameMissingOrEmpty" xml:space="preserve">
+    <value>A non-empty string value should be specified for an experimental feature declared in the module manifest.</value>
+  </data>
+  <data name="InvalidExperimentalFeatureName" xml:space="preserve">
+    <value>One or more invalid experimental feature names found: {0}. A module experimental feature name should follow this convention: 'ModuleName.FeatureName'.</value>
+  </data>
+  <data name="SkipEditionCheckNotSupportedWithoutListAvailable" xml:space="preserve">
+    <value>The -SkipEditionCheck switch parameter cannot be used without the -ListAvailable switch parameter.</value>
+  </data>
+  <data name="ImportPSFileNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Importing *.ps1 files as modules is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MismatchedLanguageModes" xml:space="preserve">
+    <value>An error has occurred while loading script module {0} because it has a different language mode than the module manifest. The manifest language mode is {1} and the module language mode is {2}. Ensure all module files are signed or otherwise part of your application allow list configuration.</value>
+  </data>
+  <data name="CannotUseDotSourceWithWildCardFunctionExport" xml:space="preserve">
+    <value>This module uses the dot-source operator while exporting functions using wildcard characters, and this is disallowed when the system is under application verification enforcement.</value>
+  </data>
+  <data name="CannotExportMembersAccrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot export module members from a module that has a different language mode from the running session.</value>
+  </data>
+  <data name="CannotCreateModuleWithScriptBlock" xml:space="preserve">
+    <value>Cannot create new module while the session is in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="CannotFindCoreCompatibleBuiltInModule" xml:space="preserve">
+    <value>Cannot find the built-in module '{0}' that is compatible with the 'Core' edition. Please make sure the PowerShell built-in modules are available. They usually come with the PowerShell package under the $PSHOME module path, and are required for PowerShell to function properly.</value>
+  </data>
+  <data name="WDACExportModuleCommandLogTitle" xml:space="preserve">
+    <value>Export-ModuleMember Cmdlet</value>
+  </data>
+  <data name="WDACExportModuleCommandLogMessage" xml:space="preserve">
+    <value>Export of module members will fail in Constrained Language mode because module '{0}', has a language mode '{1}' that is different from the current session '{2}'.</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogTitle" xml:space="preserve">
+    <value>Module Implicit Function Export</value>
+  </data>
+  <data name="WDACImplicitFunctionExportLogMessage" xml:space="preserve">
+    <value>Implicit function export for module '{0}' will be denied because it is trusted (runs in Full Language mode) but the session is not trusted (runs in Constrained Language mode). It is best practice to always export module functions individually by full name.</value>
+  </data>
+  <data name="WDACScriptFileImportLogTitle" xml:space="preserve">
+    <value>Importing Script File as Module</value>
+  </data>
+  <data name="WDACScriptFileImportLogMessage" xml:space="preserve">
+    <value>Importing the script file '{0}' as a module will be disallowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="WDACModuleDotSourceLogTitle" xml:space="preserve">
+    <value>Module Contains Dot-Source Operator</value>
+  </data>
+  <data name="WDACModuleDotSourceLogMessage" xml:space="preserve">
+    <value>Module '{0}' import will in fail Constrained Language mode because it exports functions using wildcard characters while also using the dot-source operator.</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogTitle" xml:space="preserve">
+    <value>"Module Exporting Functions</value>
+  </data>
+  <data name="WDACModuleFnExportWithNestedModulesLogMessage" xml:space="preserve">
+    <value>Module '{0}' exports functions using name wildcard characters. Any nested module function names will be removed when running in Constrained Language mode.</value>
+  </data>
+  <data name="WDACNewModuleCommandLogTitle" xml:space="preserve">
+    <value>"New-Module Cmdlet</value>
+  </data>
+  <data name="WDACNewModuleCommandLogMessage" xml:space="preserve">
+    <value>A new module from an untrusted Constrained Language session will be blocked from providing the FullLanguage script block.</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesTitle" xml:space="preserve">
+    <value>"Module Mismatched Language Modes</value>
+  </data>
+  <data name="WDACMismatchedLanguageModesMessage" xml:space="preserve">
+    <value>A dependent module is being loaded that has a different language mode than the parent. This will be disallowed when in Constrained Language mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/MshHostRawUserInterfaceStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/MshHostRawUserInterfaceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c0de2fd84a0
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/MshHostRawUserInterfaceStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="LessThanErrorTemplate" xml:space="preserve">
+    <value>"{0}" 不能大于或等于 "{1}"。</value>
+  </data>
+  <data name="NonPositiveNumberErrorTemplate" xml:space="preserve">
+    <value>"{0}" 必须是一个正数。</value>
+  </data>
+  <data name="AllNullOrEmptyStringsErrorTemplate" xml:space="preserve">
+    <value>所有字符串均为 null 或为空。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/MshSignature.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/MshSignature.zh-Hans.resx
new file mode 100644
index 00000000000..ebc51d7e7af
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/MshSignature.zh-Hans.resx
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MshSignature_Valid" xml:space="preserve">
+    <value>已验证签名。</value>
+  </data>
+  <data name="MshSignature_NotSigned" xml:space="preserve">
+    <value>文件 {0} 未进行数字签名。无法在当前系统上运行此脚本。有关运行脚本和设置执行策略的详细信息，请参阅 https://go.microsoft.com/fwlink/?LinkID=135170 处的 about_Execution_Policies</value>
+  </data>
+  <data name="MshSignature_HashMismatch" xml:space="preserve">
+    <value>文件 {0} 的内容可能已被未经授权的用户或进程更改，因为该文件的哈希与数字签名中存储的哈希不匹配。该脚本无法在指定的系统上运行。有关详细信息，请运行 Get-Help about_Signing。</value>
+  </data>
+  <data name="MshSignature_NotTrusted" xml:space="preserve">
+    <value>文件 {0} 已签名，但此系统不信任签名者。</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat" xml:space="preserve">
+    <value>无法对文件进行签名，因为系统不支持对 {0} 文件执行签名操作。</value>
+  </data>
+  <data name="MshSignature_NotSupportedFileFormat_NoExtension" xml:space="preserve">
+    <value>无法对文件进行签名，因为系统不支持对没有文件扩展名的文件执行签名操作。</value>
+  </data>
+  <data name="MshSignature_Incompatible" xml:space="preserve">
+    <value>无法验证签名，因为它与当前系统不兼容。</value>
+  </data>
+  <data name="MshSignature_Incompatible_HashAlgorithm" xml:space="preserve">
+    <value>无法验证签名，因为它与当前系统不兼容。哈希算法无效。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/MshSnapInCmdletResources.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/MshSnapInCmdletResources.zh-Hans.resx
new file mode 100644
index 00000000000..f5667fd0c09
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/MshSnapInCmdletResources.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CmdletNotAvailable" xml:space="preserve">
+    <value>无法执行操作。自定义 shell 不支持指定的 cmdlet。</value>
+  </data>
+  <data name="NoPSSnapInsFound" xml:space="preserve">
+    <value>找不到与模式“{0}”匹配的 PowerShell 管理单元。检查模式，然后重试该命令。</value>
+  </data>
+  <data name="InvalidPSSnapInName" xml:space="preserve">
+    <value>指定的管理单元名称的格式无效。 PowerShell 管理单元名称只能包含字母数字字符、短划线、下划线和句点。请更正名称，然后重试该操作。</value>
+  </data>
+  <data name="LoadSystemSnapinAsModule" xml:space="preserve">
+    <value>无法添加 PowerShell 管理单元 {0}，因为它是系统 PowerShell 模块。使用 Import-Module 加载模块。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/MshSnapinInfo.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/MshSnapinInfo.zh-Hans.resx
new file mode 100644
index 00000000000..44e7be76ba9
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/MshSnapinInfo.zh-Hans.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MonadRootRegistryAccessFailed" xml:space="preserve">
+    <value>无法访问 PowerShell 注册表信息。</value>
+  </data>
+  <data name="MonadEngineRegistryAccessFailed" xml:space="preserve">
+    <value>无法访问 PowerShell 引擎注册表信息。</value>
+  </data>
+  <data name="PublicKeyTokenAccessFailed" xml:space="preserve">
+    <value>无法访问 PublicKeyToken 信息。</value>
+  </data>
+  <data name="SpecifiedVersionNotFound" xml:space="preserve">
+    <value>PowerShell 的版本 {0} 在此计算机上不可用。</value>
+  </data>
+  <data name="MshSnapinDoesNotExist" xml:space="preserve">
+    <value>此计算机上未安装 PowerShell 管理单元“{0}”。</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>没有指定注册表项 {1} 的必需值 {0}。</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>注册表项 {1} 的必需值 {0} 格式不正确。 格式应为 'string'。</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormatMultiString" xml:space="preserve">
+    <value>注册表项 {1} 的必需值 {0} 格式不正确。 预期格式为 'multistring'。</value>
+  </data>
+  <data name="DefaultMshSnapinNotPresent" xml:space="preserve">
+    <value>在注册表中找不到所需的信息或缺少密钥文件。 无法加载部分 cmdlet。</value>
+  </data>
+  <data name="NoMshSnapinPresentForVersion" xml:space="preserve">
+    <value>尚未为 PowerShell 版本 {0} 注册任何管理单元。</value>
+  </data>
+  <data name="ResourceReaderDisposed" xml:space="preserve">
+    <value>无法检索字符串资源，因为阅读器已被释放。</value>
+  </data>
+  <data name="VersionValueInCorrect" xml:space="preserve">
+    <value>未指定注册表项 {1} 的版本值 {0}，或者该值不正确。</value>
+  </data>
+  <data name="PSVersionAttributeNotExist" xml:space="preserve">
+    <value>找不到 PowerShell 类型 {0} 的 [PSVersion] 属性。使用 [PSVersion(PowerShell SnapinBase.PSEngineVersion)] 将 PSVersion 属性添加到类型。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/NativeCP.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/NativeCP.zh-Hans.resx
new file mode 100644
index 00000000000..0104024c3f5
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/NativeCP.zh-Hans.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IncorrectValueForCommandParameter" xml:space="preserve">
+    <value>ScriptBlock should only be specified as a value of the Command parameter.</value>
+  </data>
+  <data name="NoValueForCommandParameter" xml:space="preserve">
+    <value>No value was specified for the Command parameter.</value>
+  </data>
+  <data name="IncorrectValueForFormatParameter" xml:space="preserve">
+    <value>A value that is not valid ({6}) was specified for the {7} parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForInputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the InputFormat parameter. Valid values are Text and Xml.</value>
+  </data>
+  <data name="NoValueForOutputFormatParameter" xml:space="preserve">
+    <value>No value was specified for the OutputFormat parameter. Valid values are text and XML.</value>
+  </data>
+  <data name="StringValueExpectedForFormatParameter" xml:space="preserve">
+    <value>The {6} parameter requires a string value.</value>
+  </data>
+  <data name="NoValuesSpecifiedForArgs" xml:space="preserve">
+    <value>No value was specified for the Args parameter.</value>
+  </data>
+  <data name="ParameterSpecifiedAlready" xml:space="preserve">
+    <value>The {6} parameter was already specified.</value>
+  </data>
+  <data name="CliXmlError" xml:space="preserve">
+    <value>Cannot process the XML from the '{0}' stream of '{1}': {2}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PSCommandStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PSCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..3360265e171
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PSCommandStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>添加参数需要命令。添加参数之前，必须首先向 {0} 添加命令。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PSConfigurationStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PSConfigurationStrings.zh-Hans.resx
new file mode 100644
index 00000000000..45b469db758
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PSConfigurationStrings.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CanNotConfigurationFile" xml:space="preserve">
+    <value>PowerShell has stopped working because of a security issue: Cannot read the configuration file: {0}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PSDataBufferStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PSDataBufferStrings.zh-Hans.resx
new file mode 100644
index 00000000000..57c14b71662
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PSDataBufferStrings.zh-Hans.resx
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>指定的索引小于零或大于缓冲区中的项数。索引应在以下范围内: {0}-{1}。</value>
+  </data>
+  <data name="ValueNullReference" xml:space="preserve">
+    <value>无法将 null 引用转换为值类型。</value>
+  </data>
+  <data name="CannotConvertToGenericType" xml:space="preserve">
+    <value>无法将值从 {0} 类型转换为 {1} 类型。</value>
+  </data>
+  <data name="WriteToClosedBuffer" xml:space="preserve">
+    <value>无法将对象添加到已关闭的缓冲区。请确保缓冲区处于打开状态，以便成功执行“添加”和“插入”操作。</value>
+  </data>
+  <data name="SerializationNotSupported" xml:space="preserve">
+    <value>只有 PSObject 类型的 PSDataCollection 才能设置 SerializeInput 属性。请将 SerializeInput 属性设为 false，或将集合类型更改为 PSObject。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PSListModifierStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PSListModifierStrings.zh-Hans.resx
new file mode 100644
index 00000000000..59889d4f7aa
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PSListModifierStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ListModifierDisallowedKey" xml:space="preserve">
+    <value>检测到以下未知列表修饰符:“{0}”。有效的列表修饰符为“添加”、“移除”和“替换”。</value>
+  </data>
+  <data name="UpdateFailed" xml:space="preserve">
+    <value>无法应用更新，因为该对象不是受支持的集合类型。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PSStyleStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PSStyleStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c0e158b4817
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PSStyleStrings.zh-Hans.resx
@@ -0,0 +1,70 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TextContainsContent" xml:space="preserve">
+    <value>指定的字符串在仅应包含 ANSI 转义序列的情况下包含了可打印内容: {0}</value>
+  </data>
+  <data name="ProgressWidthTooSmall" xml:space="preserve">
+    <value>进度呈现的 MaxWidth 必须至少为 18 才能正确呈现。</value>
+  </data>
+  <data name="ExtensionNotStartingWithPeriod" xml:space="preserve">
+    <value>添加或移除扩展时，扩展必须以句点开头。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ParameterBinderStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ParameterBinderStrings.zh-Hans.resx
new file mode 100644
index 00000000000..2407ad71e59
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ParameterBinderStrings.zh-Hans.resx
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="NamedParameterNotFound" xml:space="preserve">
+    <value>找不到与参数名称 '{1}' 匹配的参数。</value>
+  </data>
+  <data name="PositionalParameterNotFound" xml:space="preserve">
+    <value>找不到接受自变量 '{1}' 的位置参数。</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>参数 '{1}' 缺少自变量。请指定一个类型为 '{2}' 的参数，然后重试。</value>
+  </data>
+  <data name="AmbiguousParameter" xml:space="preserve">
+    <value>无法处理参数，因为参数名称 '{1}' 存在歧义。可能的匹配项包括:{6}。</value>
+  </data>
+  <data name="CannotConvertArgument" xml:space="preserve">
+    <value>无法将 '{6}' 转换为参数 '{1}' 所需的类型 '{2}'。{7}</value>
+  </data>
+  <data name="CannotConvertArgumentNoMessage" xml:space="preserve">
+    <value>无法绑定参数 '{1}'。{6}</value>
+  </data>
+  <data name="AmbiguousPositionalParameter" xml:space="preserve">
+    <value>无法绑定位置参数 '{1}'。</value>
+  </data>
+  <data name="AmbiguousPositionalParameterNoName" xml:space="preserve">
+    <value>无法绑定位置参数，因为未提供名称。</value>
+  </data>
+  <data name="AmbiguousParameterSet" xml:space="preserve">
+    <value>无法使用指定的命名参数解析参数集。发出的一个或多个参数不能一起使用，或者提供的参数数量不足。</value>
+  </data>
+  <data name="MissingMandatoryParameter" xml:space="preserve">
+    <value>无法处理命令，因为缺少一个或多个必需参数:{1}。</value>
+  </data>
+  <data name="ParameterNotInParameterSet" xml:space="preserve">
+    <value>无法在参数集 '{6}' 中指定参数 '{1}'。</value>
+  </data>
+  <data name="ParameterAlreadyBound" xml:space="preserve">
+    <value>无法绑定参数，因为多次指定了参数 '{1}'。若要向可接受多个值的参数提供多个值，请使用数组语法。例如，"-parameter value1,value2,value3"。</value>
+  </data>
+  <data name="ScriptBlockArgumentNoInput" xml:space="preserve">
+    <value>无法计算参数 '{1}'，因为其自变量被指定为脚本块，并且没有输入。在没有输入的情况下，无法计算脚本块。</value>
+  </data>
+  <data name="ScriptBlockArgumentInvocationFailed" xml:space="preserve">
+    <value>参数 '{1}' 的脚本块输入失败。{6}</value>
+  </data>
+  <data name="ScriptBlockArgumentNoOutput" xml:space="preserve">
+    <value>无法计算参数 '{1}'，因为它的自变量输入未产生任何输出。</value>
+  </data>
+  <data name="InputObjectNotBound" xml:space="preserve">
+    <value>输入对象无法绑定到该命令的任何参数，因为该命令不接受管道输入，或者输入及其属性与任何接受管道输入的参数都不匹配。</value>
+  </data>
+  <data name="InputObjectMissingMandatory" xml:space="preserve">
+    <value>无法绑定该输入对象，因为它不包含绑定所有必需参数所需的信息: {6}</value>
+  </data>
+  <data name="GetDefaultValueFailed" xml:space="preserve">
+    <value>无法处理管道输入，因为无法检索参数 '{1}' 的默认值。{6}</value>
+  </data>
+  <data name="GetDynamicParametersException" xml:space="preserve">
+    <value>无法检索该 cmdlet 的动态参数。{6}</value>
+  </data>
+  <data name="PromptMessage" xml:space="preserve">
+    <value>请提供以下参数的值:</value>
+  </data>
+  <data name="PromptCaption" xml:space="preserve">
+    <value>cmdlet {0} 位于命令管道位置 {1}</value>
+  </data>
+  <data name="ParameterArgumentTransformationError" xml:space="preserve">
+    <value>无法处理参数 '{1}' 上的自变量转换。{6}</value>
+  </data>
+  <data name="ParameterArgumentTransformationErrorMessageOnly" xml:space="preserve">
+    <value>{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationError" xml:space="preserve">
+    <value>无法验证参数 '{1}' 上的自变量。{6}</value>
+  </data>
+  <data name="ParameterBindingFailed" xml:space="preserve">
+    <value>无法将参数 '{1}' 绑定到目标。{6}</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorNullNotAllowed" xml:space="preserve">
+    <value>无法将自变量绑定到参数 '{1}'，因为它为 null。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyStringNotAllowed" xml:space="preserve">
+    <value>无法将自变量绑定到参数 '{1}'，因为它是空字符串。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyCollectionNotAllowed" xml:space="preserve">
+    <value>无法将自变量绑定到参数 '{1}'，因为它是空集合。</value>
+  </data>
+  <data name="ParameterArgumentValidationErrorEmptyArrayNotAllowed" xml:space="preserve">
+    <value>无法将自变量绑定到参数 '{1}'，因为它是空数组。</value>
+  </data>
+  <data name="DuplicateParameterDefinition" xml:space="preserve">
+    <value>无法处理命令。多次定义了参数 '{0}'。</value>
+  </data>
+  <data name="CannotExtractAddMethod" xml:space="preserve">
+    <value>无法绑定 cmdlet {0}，因为参数 '{1}' 的类型为 '{2}'，且无法识别 Add() 方法，或存在多个 Add() 方法。{6}</value>
+  </data>
+  <data name="RuntimeDefinedParameterNameMismatch" xml:space="preserve">
+    <value>无法绑定 cmdlet {0}，因为运行时定义的参数 '{1}' 已使用键 '{6}' 添加到 RuntimeDefinedParameterDictionary。该键必须与 RuntimeDefinedParameter.Name 相同。</value>
+  </data>
+  <data name="MismatchedPSTypeName" xml:space="preserve">
+    <value>无法将自变量绑定到参数 '{1}'，因为该自变量的 PSTypeNames 与参数所需的 PSTypeName 不匹配: {6}。</value>
+  </data>
+  <data name="DifferentValuesAssignedToSingleParameter" xml:space="preserve">
+    <value>在 $PSDefaultParameterValues 中，为匹配以下名称或别名的参数定义了多个不同的默认值: {0}。已忽略这些默认值。</value>
+  </data>
+  <data name="MultipleParametersMatched" xml:space="preserve">
+    <value>在 $PSDefaultParameterValues 中为此 cmdlet 定义的以下名称或别名将解析为多个参数: {0}。已忽略默认值。</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationMultiple" xml:space="preserve">
+    <value>{6} 此错误可能是由于应用默认参数绑定造成的。你可以通过将 $PSDefaultParameterValues["Disabled"] 设置为 $true 来禁用 $PSDefaultParameterValues 中的默认参数绑定，然后重试。发生错误时，已成功为此 cmdlet 绑定以下默认参数:{7}</value>
+  </data>
+  <data name="DefaultBindingErrorElaborationSingle" xml:space="preserve">
+    <value>{6} 此失败可能是由于应用默认参数绑定造成的。你可以通过将 $PSDefaultParameterValues["Disabled"] 设置为 $true 来禁用 $PSDefaultParameterValues 中的默认参数绑定，然后重试。发生错误时，已成功为此 cmdlet 绑定以下默认参数:{7}</value>
+  </data>
+  <data name="FailToBindDefaultParameter" xml:space="preserve">
+    <value>将默认值 '{0}' 绑定到参数 '{1}' 失败: {2}</value>
+  </data>
+  <data name="SingleKeyInBadFormat" xml:space="preserve">
+    <value>键 '{0}' 的格式无效。有关正确格式的信息，请参阅 https://go.microsoft.com/fwlink/?LinkId=228266 处的 about_Parameters_Default_Values。</value>
+  </data>
+  <data name="MultipleKeysInBadFormat" xml:space="preserve">
+    <value>键 '{0}' 的格式无效。有关正确格式的信息，请参阅 https://go.microsoft.com/fwlink/?LinkId=228266 处的 about_Parameters_Default_Values。</value>
+  </data>
+  <data name="UseOfDeprecatedParameterWarning" xml:space="preserve">
+    <value>参数 '{0}' 已过时。{1}</value>
+  </data>
+  <data name="StringValueKeyExpected" xml:space="preserve">
+    <value>类型为 '{1}' 的键 '{0}' 不是字符串值。DefaultParameterDictionary 仅接受字符串值键。</value>
+  </data>
+  <data name="KeyAlreadyAdded" xml:space="preserve">
+    <value>已将键 '{0}' 添加到字典。</value>
+  </data>
+  <data name="WDACBinderInvocationLogTitle" xml:space="preserve">
+    <value>不允许方法或属性调用</value>
+  </data>
+  <data name="WDACBinderInvocationLogMessage" xml:space="preserve">
+    <value>对于不受信任的脚本，在受约束语言模式下，不允许调用类型 '{1}' 上的方法或属性 '{0}'。</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogTitle" xml:space="preserve">
+    <value>不允许创建类型</value>
+  </data>
+  <data name="WDACBinderTypeCreationLogMessage" xml:space="preserve">
+    <value>在受约束语言模式下，不允许在为不受信任的脚本进行参数绑定时创建类型 '{0}'。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ParserStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ParserStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ffa44b7718e
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ParserStrings.zh-Hans.resx
@@ -0,0 +1,1376 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="TypeNotFound" xml:space="preserve">
+    <value>Unable to find type [{0}].</value>
+  </data>
+  <data name="TypeNotFoundWithMessage" xml:space="preserve">
+    <value>Unable to find type [{0}]. Details: {1}</value>
+  </data>
+  <data name="IncompleteString" xml:space="preserve">
+    <value>Incomplete string token.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence is not valid. A valid sequence is `u{ followed by one to six hex digits and a closing '}'.</value>
+  </data>
+  <data name="InvalidUnicodeEscapeSequenceValue" xml:space="preserve">
+    <value>The Unicode escape sequence value is out of range. The maximum value is 0x10FFFF.</value>
+  </data>
+  <data name="MissingUnicodeEscapeSequenceTerminator" xml:space="preserve">
+    <value>The Unicode escape sequence is missing the closing '}'.</value>
+  </data>
+  <data name="TooManyDigitsInUnicodeEscapeSequence" xml:space="preserve">
+    <value>The Unicode escape sequence contains more than the maximum of six hex digits between braces.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeConstraint" xml:space="preserve">
+    <value>Cannot use [ref] with other types in a type constraint.</value>
+  </data>
+  <data name="ReferenceNeedsToBeLastTypeInTypeConversion" xml:space="preserve">
+    <value>[ref] can only be the final type in type conversion sequence.</value>
+  </data>
+  <data name="ReferenceNeedsToBeByItselfInTypeSequence" xml:space="preserve">
+    <value>Cannot have two occurrences of [ref] in a type sequence.</value>
+  </data>
+  <data name="BadNumericConstant" xml:space="preserve">
+    <value>The numeric constant {0} is not valid.</value>
+  </data>
+  <data name="InvalidRegularExpression" xml:space="preserve">
+    <value>The regular expression pattern {0} is not valid.</value>
+  </data>
+  <data name="EmptyVariableReference" xml:space="preserve">
+    <value>An empty ${} variable reference was found. A name is required inside the braces.</value>
+  </data>
+  <data name="InvalidVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="InvokeMethodOnNull" xml:space="preserve">
+    <value>You cannot call a method on a null-valued expression.</value>
+  </data>
+  <data name="MethodNotFound" xml:space="preserve">
+    <value>Method invocation failed because [{0}] does not contain a method named '{1}'.</value>
+  </data>
+  <data name="ParameterizedPropertyAssignmentFailed" xml:space="preserve">
+    <value>Assignment failed because [{0}] does not contain a property '{1}()' that can be set.</value>
+  </data>
+  <data name="UnexpectedToken" xml:space="preserve">
+    <value>Unexpected token '{0}' in expression or statement.</value>
+  </data>
+  <data name="SplattingNotPermitted" xml:space="preserve">
+    <value>The splatting operator '@' cannot be used to reference variables in an expression. '@{0}' can be used only as an argument to a command. To reference variables in an expression use '${0}'.</value>
+  </data>
+  <data name="InvalidParameter" xml:space="preserve">
+    <value>Parameter '{0}' is not valid</value>
+  </data>
+  <data name="MissingExpression" xml:space="preserve">
+    <value>Missing expression after '{0}' in pipeline element.</value>
+  </data>
+  <data name="BadExpression" xml:space="preserve">
+    <value>The expression after '{0}' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.</value>
+  </data>
+  <data name="ParameterRequiresArgument" xml:space="preserve">
+    <value>Parameter {0} requires an argument.</value>
+  </data>
+  <data name="ParameterCannotHaveArgument" xml:space="preserve">
+    <value>Parameter {0} cannot have an argument.</value>
+  </data>
+  <data name="DuplicateFormalParameter" xml:space="preserve">
+    <value>Duplicate parameter ${0} in parameter list.</value>
+  </data>
+  <data name="MissingArgument" xml:space="preserve">
+    <value>Missing argument in parameter list.</value>
+  </data>
+  <data name="SplattingNotPermittedInArgumentList" xml:space="preserve">
+    <value>Splatted variables like '@{0}' cannot be part of a comma-separated list of arguments.</value>
+  </data>
+  <data name="MissingFileSpecification" xml:space="preserve">
+    <value>Missing file specification after redirection operator.</value>
+  </data>
+  <data name="RedirectionNotSupported" xml:space="preserve">
+    <value>The '{0}' operator is reserved for future use.</value>
+  </data>
+  <data name="RedirectionFailed" xml:space="preserve">
+    <value>Redirection to '{0}' failed: {1}</value>
+  </data>
+  <data name="ExpressionsMustBeFirstInPipeline" xml:space="preserve">
+    <value>Expressions are only allowed as the first element of a pipeline.</value>
+  </data>
+  <data name="EmptyPipeElement" xml:space="preserve">
+    <value>An empty pipe element is not allowed.</value>
+  </data>
+  <data name="InvalidLeftHandSide" xml:space="preserve">
+    <value>The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property.</value>
+  </data>
+  <data name="AddHashTableToNonHashTable" xml:space="preserve">
+    <value>A hash table can only be added to another hash table.</value>
+  </data>
+  <data name="IsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-is' must be a type.</value>
+  </data>
+  <data name="AsOperatorRequiresType" xml:space="preserve">
+    <value>The right operand of '-as' must be a type.</value>
+  </data>
+  <data name="FormatError" xml:space="preserve">
+    <value>Error formatting a string: {0}.</value>
+  </data>
+  <data name="BadOperatorArgument" xml:space="preserve">
+    <value>The argument to operator '{0}' is not valid: {1}.</value>
+  </data>
+  <data name="OperatorFailed" xml:space="preserve">
+    <value>The '{0}' operator failed: {1}.</value>
+  </data>
+  <data name="BadReplaceArgument" xml:space="preserve">
+    <value>The {0} operator allows only two elements to follow it, not {1}.</value>
+  </data>
+  <data name="ExpectedValueExpression" xml:space="preserve">
+    <value>You must provide a value expression following the '{0}' operator.</value>
+  </data>
+  <data name="OperatorRequiresVariableOrProperty" xml:space="preserve">
+    <value>The '{0}' operator works only on variables or on properties.</value>
+  </data>
+  <data name="OrderedAttributeOnlyOnHashLiteralNode" xml:space="preserve">
+    <value>The {0} attribute can be specified only on a hash literal node.</value>
+  </data>
+  <data name="MissingArrayIndexExpression" xml:space="preserve">
+    <value>Array index expression is missing or not valid.</value>
+  </data>
+  <data name="MissingPropertyName" xml:space="preserve">
+    <value>Missing property name after reference operator.</value>
+  </data>
+  <data name="PropertyNotFound" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists and can be set.</value>
+  </data>
+  <data name="PropertyNotFoundStrict" xml:space="preserve">
+    <value>The property '{0}' cannot be found on this object. Verify that the property exists.</value>
+  </data>
+  <data name="NullArrayIndex" xml:space="preserve">
+    <value>Index operation failed; the array index evaluated to null.</value>
+  </data>
+  <data name="NullArray" xml:space="preserve">
+    <value>Cannot index into a null array.</value>
+  </data>
+  <data name="CannotIndex" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}".</value>
+  </data>
+  <data name="CannotIndexWithByRefLikeReturnType" xml:space="preserve">
+    <value>Unable to index into an object of type "{0}" with the ByRef-like return type "{1}". ByRef-like types are not supported in PowerShell.</value>
+  </data>
+  <data name="ArrayHasTooManyDimensions" xml:space="preserve">
+    <value>The array has too many dimensions: {0}. The number of dimensions for an array must be less than or equal to 32.</value>
+  </data>
+  <data name="ArraySliceAssignmentFailed" xml:space="preserve">
+    <value>Array assignment to [{0}] failed because assignment to slices is not supported.</value>
+  </data>
+  <data name="NeedMultidimensionalIndex" xml:space="preserve">
+    <value>You cannot index into a {0} dimensional array with index [{1}].</value>
+  </data>
+  <data name="IndexOutOfRange" xml:space="preserve">
+    <value>Array assignment failed because index '{0}' was out of range.</value>
+  </data>
+  <data name="MissingExpressionAfterToken" xml:space="preserve">
+    <value>Missing expression after '{0}'.</value>
+  </data>
+  <data name="IncompleteDollarVariableReference" xml:space="preserve">
+    <value>${{variable}} reference starting is missing the closing '}}'.</value>
+  </data>
+  <data name="IncompleteDollarSubexpressionReference" xml:space="preserve">
+    <value>$(subexpression) is missing the closing ')'.</value>
+  </data>
+  <data name="UnexpectedUnaryOperator" xml:space="preserve">
+    <value>Internal error - unexpected unary operator {0}.</value>
+  </data>
+  <data name="NonExistingVariableReference" xml:space="preserve">
+    <value>[ref] cannot be applied to a variable that does not exist.</value>
+  </data>
+  <data name="VariableIsUndefined" xml:space="preserve">
+    <value>The variable '${0}' cannot be retrieved because it has not been set.</value>
+  </data>
+  <data name="DuplicateKeyInHashLiteral" xml:space="preserve">
+    <value>Duplicate keys '{0}' are not allowed in hash literals.</value>
+  </data>
+  <data name="DuplicateNamedArgument" xml:space="preserve">
+    <value>Duplicate named arguments '{0}' are not allowed.</value>
+  </data>
+  <data name="OperatorRequiresNumber" xml:space="preserve">
+    <value>The '{0}' operator works only on numbers. The operand is a '{1}'.</value>
+  </data>
+  <data name="ExpectedExpression" xml:space="preserve">
+    <value>An expression was expected after '('.</value>
+  </data>
+  <data name="MissingEqualsInHashLiteral" xml:space="preserve">
+    <value>Missing '=' operator after key in hash literal.</value>
+  </data>
+  <data name="MissingStatementInHashLiteral" xml:space="preserve">
+    <value>Missing statement after '=' in hash literal.</value>
+  </data>
+  <data name="MissingExpressionInNamedArgument" xml:space="preserve">
+    <value>Missing statement after '=' in named argument.</value>
+  </data>
+  <data name="MissingPropertyTerminator" xml:space="preserve">
+    <value>Missing ';' or end-of-line in property definition.</value>
+  </data>
+  <data name="MissingExpressionAfterOperator" xml:space="preserve">
+    <value>Missing expression after unary operator '{0}'.</value>
+  </data>
+  <data name="IfStatementMissingCondition" xml:space="preserve">
+    <value>Missing condition in if statement after '{0} ('.</value>
+  </data>
+  <data name="MissingStatementBlock" xml:space="preserve">
+    <value>Missing statement block after {0} ( condition ).</value>
+  </data>
+  <data name="MissingStatementBlockAfterElse" xml:space="preserve">
+    <value>Missing statement block after 'else' keyword.</value>
+  </data>
+  <data name="FileReadError" xml:space="preserve">
+    <value>The file could not be read: {0}.</value>
+  </data>
+  <data name="FileOpenError" xml:space="preserve">
+    <value>The current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="FileNotFound" xml:space="preserve">
+    <value>No files matching '{0}' were found.</value>
+  </data>
+  <data name="AmbiguousPath" xml:space="preserve">
+    <value>The path cannot be processed because it resolved to more than one file; only one file at a time can be processed.</value>
+  </data>
+  <data name="KeywordParameterReservedForFutureUse" xml:space="preserve">
+    <value>The {0} '-{1}' parameter is reserved for future use.</value>
+  </data>
+  <data name="MissingFilenameOption" xml:space="preserve">
+    <value>Cannot process the 'switch' statement because of a missing file name argument to the -file option.</value>
+  </data>
+  <data name="InvalidFilenameOption" xml:space="preserve">
+    <value>The file name argument to -file in the switch statement is not valid.</value>
+  </data>
+  <data name="InvalidSwitchFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the switch statement.</value>
+  </data>
+  <data name="InvalidForeachFlag" xml:space="preserve">
+    <value>The parameter {0} is not valid for the foreach statement.</value>
+  </data>
+  <data name="PipelineValueRequired" xml:space="preserve">
+    <value>A switch statement must have one of the following:  '-file file_name' or '( expression )'.</value>
+  </data>
+  <data name="MissingSwitchConditionExpression" xml:space="preserve">
+    <value>Missing condition in switch statement clause.</value>
+  </data>
+  <data name="MultipleSwitchDefaultClauses" xml:space="preserve">
+    <value>A switch statement can have only one default clause.</value>
+  </data>
+  <data name="MissingSwitchStatementClause" xml:space="preserve">
+    <value>Missing statement block in switch statement clause.</value>
+  </data>
+  <data name="MissingForeachExpression" xml:space="preserve">
+    <value>Missing expression in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingForeachStatement" xml:space="preserve">
+    <value>Missing statement body in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="OnlyOneParameterListAllowed" xml:space="preserve">
+    <value>The param statement cannot be used if arguments were specified in the function declaration.</value>
+  </data>
+  <data name="NotADefinedOperationForType" xml:space="preserve">
+    <value>The operation '[{0}] {1} [{2}]' is not defined.</value>
+  </data>
+  <data name="BadEnumeration" xml:space="preserve">
+    <value>An error occurred while enumerating through a collection: {0}.</value>
+  </data>
+  <data name="COMException" xml:space="preserve">
+    <value>An unhandled COM interop exception occurred: {0}</value>
+  </data>
+  <data name="InvalidComObjectException" xml:space="preserve">
+    <value>A COM object was accessed after it was already released: {0}</value>
+  </data>
+  <data name="ScriptTooComplicated" xml:space="preserve">
+    <value>Processing was stopped because the script is too complex.</value>
+  </data>
+  <data name="ScriptsNotAllowed" xml:space="preserve">
+    <value>The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.</value>
+  </data>
+  <data name="InvalidSplitOptionCombination" xml:space="preserve">
+    <value>The combination of options with the -split operator is not valid.</value>
+  </data>
+  <data name="InvalidSplitOptionWithPredicate" xml:space="preserve">
+    <value>Options are not allowed on the -split operator with a predicate.</value>
+  </data>
+  <data name="InvalidEndOfLine" xml:space="preserve">
+    <value>The token '{0}' is not a valid statement separator in this version.</value>
+  </data>
+  <data name="ReservedKeywordNotAllowed" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="MissingExpressionAfterKeyword" xml:space="preserve">
+    <value>Missing expression after '{0}' in loop.</value>
+  </data>
+  <data name="MissingLoopStatement" xml:space="preserve">
+    <value>Missing statement body in {0} loop.</value>
+  </data>
+  <data name="MissingTrapStatement" xml:space="preserve">
+    <value>The 'trap' statement was incomplete. A trap statement requires a body.</value>
+  </data>
+  <data name="MissingTryStatement" xml:space="preserve">
+    <value>Incomplete 'try' statement. A try statement requires a body.</value>
+  </data>
+  <data name="InvalidFunctionParameter" xml:space="preserve">
+    <value>Parameter declarations are a comma-separated list of variable names with optional initializer expressions.</value>
+  </data>
+  <data name="MissingFunctionBody" xml:space="preserve">
+    <value>Missing function body in function declaration.</value>
+  </data>
+  <data name="DuplicateScriptCommandClause" xml:space="preserve">
+    <value>Script command clause '{0}' has already been defined.</value>
+  </data>
+  <data name="MissingNamedBlocks" xml:space="preserve">
+    <value>unexpected token '{0}', expected 'begin', 'process', 'end', 'clean', or 'dynamicparam'.</value>
+  </data>
+  <data name="MissingEndCurlyBrace" xml:space="preserve">
+    <value>Missing closing '}' in statement block or type definition.</value>
+  </data>
+  <data name="MissingEndParenthesisInMethodCall" xml:space="preserve">
+    <value>Missing ')' in method call.</value>
+  </data>
+  <data name="MissingEndSquareBracket" xml:space="preserve">
+    <value>Missing ']' after array index expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInExpression" xml:space="preserve">
+    <value>Missing closing ')' in expression.</value>
+  </data>
+  <data name="MissingEndParenthesisInSubexpression" xml:space="preserve">
+    <value>Missing closing ')' in subexpression.</value>
+  </data>
+  <data name="MissingOpenParenthesisInIfStatement" xml:space="preserve">
+    <value>Missing '(' after '{0}' in if statement.</value>
+  </data>
+  <data name="MissingEndParenthesisInSwitchStatement" xml:space="preserve">
+    <value>Missing ')' after expression in switch statement.</value>
+  </data>
+  <data name="MissingCurlyBraceInSwitchStatement" xml:space="preserve">
+    <value>Missing '{' in switch statement.</value>
+  </data>
+  <data name="MissingVariableNameAfterForeach" xml:space="preserve">
+    <value>Missing variable name after foreach.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingInInForeach" xml:space="preserve">
+    <value>Missing 'in' after variable in foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingEndParenthesisAfterForeach" xml:space="preserve">
+    <value>Missing closing ')' after expression part of foreach loop.
+The correct form is: foreach ($a in $b) {...}</value>
+  </data>
+  <data name="MissingOpenParenthesisAfterKeyword" xml:space="preserve">
+    <value>Missing opening '(' after keyword '{0}'.</value>
+  </data>
+  <data name="MissingWhileOrUntilInDoWhile" xml:space="preserve">
+    <value>Missing while or until keyword in do loop.</value>
+  </data>
+  <data name="MissingEndParenthesisAfterStatement" xml:space="preserve">
+    <value>Missing closing ')' after expression in '{0}' statement.</value>
+  </data>
+  <data name="MissingNameAfterKeyword" xml:space="preserve">
+    <value>Missing name after {0} keyword.</value>
+  </data>
+  <data name="MissingEndParenthesisInFunctionParameterList" xml:space="preserve">
+    <value>Missing ')' in function parameter list.</value>
+  </data>
+  <data name="BackupParserMessage" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded.</value>
+  </data>
+  <data name="BackupParserMessageWithException" xml:space="preserve">
+    <value>An error '{0}' occurred while processing this script. Text describing this error could not be loaded due to error '{1}'.</value>
+  </data>
+  <data name="ScriptBlockDelegateInvokedFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to run scripts in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to invoke was: {0}</value>
+  </data>
+  <data name="UnrecognizedToken" xml:space="preserve">
+    <value>Unrecognized token in source text.</value>
+  </data>
+  <data name="ExceptionActionPromptCaption" xml:space="preserve">
+    <value>Action to take for this exception:</value>
+  </data>
+  <data name="ContinueLabel" xml:space="preserve">
+    <value>&amp;Continue</value>
+  </data>
+  <data name="ContinueHelpMessage" xml:space="preserve">
+    <value>Report the error then continue with the next script statement.</value>
+  </data>
+  <data name="SilentlyContinueLabel" xml:space="preserve">
+    <value>S&amp;ilently Continue</value>
+  </data>
+  <data name="SilentlyContinueHelpMessage" xml:space="preserve">
+    <value>Do not report this error, just continue with the next script statement.</value>
+  </data>
+  <data name="BreakLabel" xml:space="preserve">
+    <value>&amp;Break</value>
+  </data>
+  <data name="BreakHelpMessage" xml:space="preserve">
+    <value>Do not continue processing, throw the exception instead.</value>
+  </data>
+  <data name="SuspendLabel" xml:space="preserve">
+    <value>&amp;Suspend</value>
+  </data>
+  <data name="SuspendHelpMessage" xml:space="preserve">
+    <value>Pause the current pipeline and return to the command prompt. Type exit to resume operation when you are done.</value>
+  </data>
+  <data name="CantActivateDocumentInPipeline" xml:space="preserve">
+    <value>Cannot run a document in the middle of a pipeline: {0}.</value>
+  </data>
+  <data name="ProgramFailedToExecute" xml:space="preserve">
+    <value>Program '{0}' failed to run: {1}{2}.</value>
+  </data>
+  <data name="CantInvokeInBinaryModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of binary module '{0}'. Specify a non-binary module after the '&amp;' and try the operation again.</value>
+  </data>
+  <data name="CantInvokeInNonImportedModule" xml:space="preserve">
+    <value>Cannot use '&amp;' to invoke in the context of module '{0}' because it is not imported. Import the module '{0}' and try the operation again.</value>
+  </data>
+  <data name="TokenAfterEndOfValidScriptText" xml:space="preserve">
+    <value>Executable script code found in signature block.</value>
+  </data>
+  <data name="TextForWordLine" xml:space="preserve">
+    <value>line</value>
+  </data>
+  <data name="TextForPositionMessage" xml:space="preserve">
+    <value>At {0}:{1} char:{2}
++ {3}</value>
+  </data>
+  <data name="TraceScriptLineMessage" xml:space="preserve">
+    <value>{0,4}+ {1}</value>
+  </data>
+  <data name="TraceVariableAssignment" xml:space="preserve">
+    <value>    ! SET ${0} = '{1}'.</value>
+  </data>
+  <data name="TraceEnteringFunction" xml:space="preserve">
+    <value>    ! CALL function '{0}'</value>
+  </data>
+  <data name="TraceEnteringFunctionDefinedInFile" xml:space="preserve">
+    <value>    ! CALL function '{0}'  (defined in file '{1}')</value>
+  </data>
+  <data name="TraceMethodCall" xml:space="preserve">
+    <value>    ! CALL method '{0}'</value>
+  </data>
+  <data name="TerminatorExpectedAtEndOfString" xml:space="preserve">
+    <value>The string is missing the terminator: {0}.</value>
+  </data>
+  <data name="WhitespaceBeforeHereStringFooter" xml:space="preserve">
+    <value>White space is not allowed before the string terminator.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfType" xml:space="preserve">
+    <value>Missing ] at end of type token.</value>
+  </data>
+  <data name="OpenBraceNeedsToBeBackTickedInVariableName" xml:space="preserve">
+    <value>Use `{ instead of { in variable names.</value>
+  </data>
+  <data name="MissingStatementBlockForDataSection" xml:space="preserve">
+    <value>The Data section is missing its statement block.</value>
+  </data>
+  <data name="InvalidParameterForDataSectionStatement" xml:space="preserve">
+    <value>The "{0}" parameter of the Data section is not valid. The valid Data section parameter is SupportedCommand.</value>
+  </data>
+  <data name="ArrayReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Array references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="AssignmentStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Assignment statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RedirectionNotSupportedInDataSection" xml:space="preserve">
+    <value>Redirection is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DoWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Do and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ExpandableStringNotSupportedInDataSection" xml:space="preserve">
+    <value>Expandable strings are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="OperatorNotSupportedInDataSection" xml:space="preserve">
+    <value>The '{0}' operator is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TrapStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Trap statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TryStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The Try statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FlowControlStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Flow control statements such as Break, Continue, Return, Exit, and Throw are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForeachStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>Foreach statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ForWhileStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>For and While statements are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="FunctionDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Function declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="MethodCallNotSupportedInDataSection" xml:space="preserve">
+    <value>Method calls are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterDeclarationNotSupportedInDataSection" xml:space="preserve">
+    <value>Parameter declarations are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>Property references are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ScriptBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Script block literals are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="SwitchStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The switch statement is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="VariableReferenceNotSupportedInDataSection" xml:space="preserve">
+    <value>A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: {0}.</value>
+  </data>
+  <data name="CmdletNotInAllowedListForDataSection" xml:space="preserve">
+    <value>The command '{0}' is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DataSectionStatementNotSupportedInDataSection" xml:space="preserve">
+    <value>The data statement is not allowed in restricted language mode or another Data section.</value>
+  </data>
+  <data name="MissingValueForSupportedCommandInDataSectionStatement" xml:space="preserve">
+    <value>The SupportedCommand parameter of the Data section is missing a value. Supply a cmdlet or function name to the parameter.</value>
+  </data>
+  <data name="InvalidScriptBlockInDataSection" xml:space="preserve">
+    <value>A Begin statement block, Process statement block, or parameter statement is not allowed in a Data section.</value>
+  </data>
+  <data name="StringMultiplyToolongInDataSection" xml:space="preserve">
+    <value>String multiplication results with more than "{0}" characters are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ArrayMultiplyToolongInDataSection" xml:space="preserve">
+    <value>Array multiplication resulting in more than {0} elements is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="DotSourcingNotSupportedInDataSection" xml:space="preserve">
+    <value>Dot sourcing is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstantOrScriptBlock" xml:space="preserve">
+    <value>Attribute argument must be a constant or a script block.</value>
+  </data>
+  <data name="CustomAttributeTypeNotFound" xml:space="preserve">
+    <value>Cannot find the type for custom attribute '{0}'. Make sure that the assembly that contains this type is loaded.</value>
+  </data>
+  <data name="PropertyNotFoundForType" xml:space="preserve">
+    <value>Property '{0}' cannot be found for type '{1}'.</value>
+  </data>
+  <data name="UnexpectedAttribute" xml:space="preserve">
+    <value>Unexpected attribute '{0}'.</value>
+  </data>
+  <data name="EndSquareBracketExpectedAtEndOfAttribute" xml:space="preserve">
+    <value>Missing ] at end of attribute or type literal.</value>
+  </data>
+  <data name="StrictModeFunctionCallWithParens" xml:space="preserve">
+    <value>The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.</value>
+  </data>
+  <data name="MissingTryStatementBlock" xml:space="preserve">
+    <value>The Try statement is missing its statement block.</value>
+  </data>
+  <data name="MissingCatchOrFinally" xml:space="preserve">
+    <value>The Try statement is missing its Catch or Finally block.</value>
+  </data>
+  <data name="MissingCatchHandlerBlock" xml:space="preserve">
+    <value>The Catch block is missing its statement block.</value>
+  </data>
+  <data name="MissingFinallyStatementBlock" xml:space="preserve">
+    <value>The Finally block is missing its statement block.</value>
+  </data>
+  <data name="ExceptionTypeAlreadyCaught" xml:space="preserve">
+    <value>Exception type {0} is already handled by a previous handler.</value>
+  </data>
+  <data name="EmptyCatchNotLast" xml:space="preserve">
+    <value>Catch block must be the last catch block.</value>
+  </data>
+  <data name="MissingTypeLiteralToken" xml:space="preserve">
+    <value>Missing type literal.</value>
+  </data>
+  <data name="MissingTerminatorMultiLineComment" xml:space="preserve">
+    <value>The terminator '#&gt;' is missing from the multiline comment.</value>
+  </data>
+  <data name="UnexpectedCharactersAfterHereStringHeader" xml:space="preserve">
+    <value>No characters are allowed after a here-string header but before the end of the line.</value>
+  </data>
+  <data name="ErrorCollection" xml:space="preserve">
+    <value>Parser errors were detected.</value>
+  </data>
+  <data name="MissingNamedStatementBlock" xml:space="preserve">
+    <value>Missing statement block after '{0}'.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeParam" xml:space="preserve">
+    <value>Unexpected type [{0}] was found in the parameter statement.</value>
+  </data>
+  <data name="TypeNotAllowedBeforeStatement" xml:space="preserve">
+    <value>Unexpected type [{0}] was found before statement.</value>
+  </data>
+  <data name="InvalidNullKey" xml:space="preserve">
+    <value>A null key is not allowed in a hash literal.</value>
+  </data>
+  <data name="AttributeNotSupportedInDataSection" xml:space="preserve">
+    <value>Attributes are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="TypeNotAllowedInDataSection" xml:space="preserve">
+    <value>The type {0} is not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="PropertyIsReadOnly" xml:space="preserve">
+    <value>'{0}' is a ReadOnly property.</value>
+  </data>
+  <data name="MissingAssemblyNameSpecification" xml:space="preserve">
+    <value>The type name is missing the assembly name specification.</value>
+  </data>
+  <data name="ControlLeavingFinally" xml:space="preserve">
+    <value>Flow of control cannot leave a Finally block.</value>
+  </data>
+  <data name="UnrecoverableParserError" xml:space="preserve">
+    <value>Unrecoverable error in PowerShell.</value>
+  </data>
+  <data name="AstIsReused" xml:space="preserve">
+    <value>An AST cannot be used as the child of more than one AST. To use this AST in another AST, call the Copy() method and use its result.</value>
+  </data>
+  <data name="InvalidUsingExpression" xml:space="preserve">
+    <value>Expression is not allowed in a Using expression.</value>
+  </data>
+  <data name="UsingWithoutInvokeCommand" xml:space="preserve">
+    <value>A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.</value>
+  </data>
+  <data name="InvalidBracedVariableReference" xml:space="preserve">
+    <value>Variable reference is not valid. The variable name is missing.</value>
+  </data>
+  <data name="InvalidVariableReferenceWithDrive" xml:space="preserve">
+    <value>Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.</value>
+  </data>
+  <data name="TooManyErrors" xml:space="preserve">
+    <value>Not all parse errors were reported.  Correct the reported errors and try again.</value>
+  </data>
+  <data name="MissingTypename" xml:space="preserve">
+    <value>Missing type name after '['.</value>
+  </data>
+  <data name="AllStream" xml:space="preserve">
+    <value>* stream</value>
+  </data>
+  <data name="DebugStream" xml:space="preserve">
+    <value>debug stream</value>
+  </data>
+  <data name="ErrorStream" xml:space="preserve">
+    <value>error stream</value>
+  </data>
+  <data name="OutputStream" xml:space="preserve">
+    <value>output stream</value>
+  </data>
+  <data name="StreamAlreadyRedirected" xml:space="preserve">
+    <value>The {0} for this command is already redirected.</value>
+  </data>
+  <data name="VerboseStream" xml:space="preserve">
+    <value>verbose stream</value>
+  </data>
+  <data name="WarningStream" xml:space="preserve">
+    <value>warning stream</value>
+  </data>
+  <data name="MissingStatementAfterKeyword" xml:space="preserve">
+    <value>Missing statement body after keyword '{0}'.</value>
+  </data>
+  <data name="ParallelAndSequenceBlockNotSupportedInDataSection" xml:space="preserve">
+    <value>Parallel and sequence blocks are not allowed in restricted language mode or a Data section.</value>
+  </data>
+  <data name="UnexpectedKeyword" xml:space="preserve">
+    <value>Unexpected keyword '{0}'.</value>
+  </data>
+  <data name="VoidTypeConstraintNotAllowed" xml:space="preserve">
+    <value>[void] cannot be used as a parameter type, or on the left side of an assignment.</value>
+  </data>
+  <data name="CannotInvoke" xml:space="preserve">
+    <value>The method cannot be invoked.</value>
+  </data>
+  <data name="HashtableToObjectConversionNotSupportedInDataSection" xml:space="preserve">
+    <value>Cannot convert hashtable to an object of the following type: {0}. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section.</value>
+  </data>
+  <data name="RequiresArgumentMustBeConstant" xml:space="preserve">
+    <value>Argument must be constant.</value>
+  </data>
+  <data name="RequiresInvalidStringArgument" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid string argument.</value>
+  </data>
+  <data name="RequiresModuleInvalid" xml:space="preserve">
+    <value>The argument for the Module parameter is not valid. {0}</value>
+  </data>
+  <data name="RequiresVersionInvalid" xml:space="preserve">
+    <value>The argument for the Version parameter is not valid. Specify a valid PowerShell version, in the format major.minor version.</value>
+  </data>
+  <data name="RequiresPSEditionInvalid" xml:space="preserve">
+    <value>The argument for the {0} parameter is not valid. Specify a valid PowerShell edition.</value>
+  </data>
+  <data name="RequiresPSEditionValueIsAlreadySpecified" xml:space="preserve">
+    <value>The argument for the {0} parameter contains duplicate values. Do not specify duplicate PowerShell edition values.</value>
+  </data>
+  <data name="WildCardModuleNameError" xml:space="preserve">
+    <value>Wildcard characters are not supported for module names.</value>
+  </data>
+  <data name="InvokeMethodConstrainedLanguage" xml:space="preserve">
+    <value>Cannot invoke method. Method invocation is supported only on core types in this language mode.</value>
+  </data>
+  <data name="PropertySetConstrainedLanguage" xml:space="preserve">
+    <value>Cannot set property. Property setting is supported only on core types in this language mode.</value>
+  </data>
+  <data name="ConfigurationInvalidPropertyName" xml:space="preserve">
+    <value>An attribute name for resource '{0}' was found that is not valid. An attribute name must be a simple string, and cannot contain variables or expressions. Replace '{1}' with a simple string.</value>
+  </data>
+  <data name="InvalidInstanceProperty" xml:space="preserve">
+    <value>The member '{0}' is not valid. Valid members are
+'{1}'.</value>
+  </data>
+  <data name="MissingBraceInObjectDefinition" xml:space="preserve">
+    <value>Missing '{' in object definition.</value>
+  </data>
+  <data name="RequiredNameOrExpressionMissing" xml:space="preserve">
+    <value>A required name or expression was missing.</value>
+  </data>
+  <data name="SchemaFileNotFound" xml:space="preserve">
+    <value>The schema file {0} was not found. Verify that any modules specified in a configuration statement contain a schema.mof file, and then try running the script again.</value>
+  </data>
+  <data name="DataSectionAllowedCommandDisallowed" xml:space="preserve">
+    <value>Cannot define data section. Definition of additional supported commands is not supported in this language mode.</value>
+  </data>
+  <data name="MissingCurlyInConfigurationStatement" xml:space="preserve">
+    <value>Missing '{' in configuration statement.</value>
+  </data>
+  <data name="ExceptionParsingMOFFile" xml:space="preserve">
+    <value>Exception parsing MOF file '{0}':{1}.</value>
+  </data>
+  <data name="MissingConfigurationName" xml:space="preserve">
+    <value>The name for the configuration is missing. Provide the missing name as a simple name, string, or string-valued expression.</value>
+  </data>
+  <data name="ModuleNotFoundDuringParse" xml:space="preserve">
+    <value>Could not find the module '{0}'.</value>
+  </data>
+  <data name="MultipleModuleEntriesFoundDuringParse" xml:space="preserve">
+    <value>Multiple versions of the module '{0}' were found. You can run 'Get-Module -ListAvailable -FullyQualifiedName {0}' to see available versions on the system, and then use the fully qualified name '@{{ModuleName="{0}"; RequiredVersion="Version"}}'.</value>
+  </data>
+  <data name="MissingThrottleLimit" xml:space="preserve">
+    <value>The ThrottleLimit parameter of the foreach statement is missing a value. Supply a throttle limit to the parameter.</value>
+    <comment>'ThrottleLimit' must not be localized.</comment>
+  </data>
+  <data name="ThrottleLimitRequiresParallelFlag" xml:space="preserve">
+    <value>The ThrottleLimit parameter is only supported on foreach statements that use the Parallel parameter.</value>
+    <comment>'ThrottleLimit' and 'Parallel' must not be localized.</comment>
+  </data>
+  <data name="ConfigurationBodyEmpty" xml:space="preserve">
+    <value>The configuration block results were null or empty. Verify that configurations were defined in the block.</value>
+  </data>
+  <data name="UnexpectedNameForType" xml:space="preserve">
+    <value>The '{0}' resource can only be used once per configuration, and therefore cannot have a name. Remove '{1}', and then run the script again.</value>
+  </data>
+  <data name="IncompletePropertyAssignmentBlock" xml:space="preserve">
+    <value>There is an incomplete property assignment block in the instance definition.</value>
+  </data>
+  <data name="MissingEqualsInPropertyAssignmentBlock" xml:space="preserve">
+    <value>Missing '=' operator after key in property assignment.</value>
+  </data>
+  <data name="DuplicatePropertyInInstanceDefinition" xml:space="preserve">
+    <value>Duplicate property assignments are not allowed in an instance definition.</value>
+  </data>
+  <data name="DuplicateCimClassDefinition" xml:space="preserve">
+    <value>A second CIM class definition for '{0}' was found while processing the schema file '{1}'. This class was already defined in the file(s) '{2}'. Remove the redundant definition, and then try again.</value>
+  </data>
+  <data name="DuplicateKeywordDefinition" xml:space="preserve">
+    <value>Resource name '{0}' is already being used by another Resource or Configuration.</value>
+  </data>
+  <data name="ClassNameNotSameAsDefiningFile" xml:space="preserve">
+    <value>The class name '{0}' does not match '{1}', the name of the file in which it is defined. Rename either the file name to match the class name or vice versa</value>
+  </data>
+  <data name="DuplicateResourceIdInNodeStatement" xml:space="preserve">
+    <value>A duplicate resource identifier '{0}' was found while processing the specification for node '{1}'. Change the name of this resource so that it is unique within the node specification.</value>
+  </data>
+  <data name="UnexpectedTokenInDynamicKeyword" xml:space="preserve">
+    <value>There is no whitespace between the name and the scriptblock in dynamic keyword '{0}' body statement.</value>
+  </data>
+  <data name="EmptyFunctionNameInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The key property for an entry in the dictionary of functions to define cannot be empty because the key property is used as the function name. Specify a non-empty string as the value of the key property, and then try the operation again.</value>
+  </data>
+  <data name="GetBadlyFormedRequiredResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the Requires list for resource '{1}' is not valid. A required resource name should be in the format '[&lt;typename&gt;]&lt;name&gt;', with alphanumeric characters, spaces, '_', '-', '.' and '\'.</value>
+    <comment>The capitalized word Requires should not be localized. The words &lt;typename&gt; and &lt;name&gt; should be localized but the &lt;&gt; characters must be preserved.</comment>
+  </data>
+  <data name="GetBadlyFormedExclusiveResourceId" xml:space="preserve">
+    <value>The format of the resource reference '{0}' in the exclusive list for resource '{1}' is not valid. An exclusive resource name should be in the format '&lt;typename&gt;\&lt;name&gt;', with no spaces.</value>
+  </data>
+  <data name="GetPullModeNeedConfigurationSource" xml:space="preserve">
+    <value>The PartialConfiguration '{0}' is set to pull mode which requires a ConfigurationSource property.</value>
+  </data>
+  <data name="NullEntryInVariablesDefinitionList" xml:space="preserve">
+    <value>A null entry was found in the list of variable entries to create in the script block scope. Remove the entry at index {0}, or replace it with a non-null entry, and then try again.</value>
+  </data>
+  <data name="NullFunctionBodyInFunctionDefinitionDictionary" xml:space="preserve">
+    <value>The script block that defines function '{0}' cannot be null or empty. Provide a non-empty script block in the function definition dictionary, and then try the operation again.</value>
+  </data>
+  <data name="ImportDscResourceNeedParams" xml:space="preserve">
+    <value>The syntax of the Import-DscResource dynamic keyword is:
+
+Import-DscResource  [-Name &lt;ResourceName(s)&gt;]  [-ModuleName  &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;].
+
+Name          : Names of one or more resources to import.
+ModuleName    : Module names or ModuleSpecification objects of one or more modules to import.
+ModuleVersion : Version of module to import. If used, ModuleName must represent only one module by name.</value>
+  </data>
+  <data name="ImportDscResourceMultipleModulesNotSupportedWithName" xml:space="preserve">
+    <value>Import-DscResource dynamic keyword supports only one module when Name parameter is specified.</value>
+  </data>
+  <data name="ImportDscResourcePositionalParamsNotSupported" xml:space="preserve">
+    <value>Positional parameters are not supported for the Import-DscResource dynamic keyword. The syntax of Import-DscResource dynamic keyword is: "Import-DscResource  [-Name &lt;ResourceName(s)&gt;] [-ModuleName &lt;ModuleName(s)&gt;] [-ModuleVersion &lt;ModuleVersion&gt;]</value>
+  </data>
+  <data name="DscResourcesNotFoundDuringParsing" xml:space="preserve">
+    <value>Unable to load resource '{0}': Resource not found.</value>
+  </data>
+  <data name="ConfigurationNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Configuration keyword is not allowed in constrainedLanguage mode.</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The configuration name '{0}' is not valid. Standard names may only contain letters (a-z, A-Z), numbers (0-9), period (.), hyphen (-) and underscore (_). The name may not be null or empty, and should start with a letter.</value>
+  </data>
+  <data name="UnsupportedNamedBlockInConfiguration" xml:space="preserve">
+    <value>Configuration only supports the End block in its body. Begin, Process and DynamicParam blocks are not allowed in a configuration.</value>
+  </data>
+  <data name="CimDeserializationError" xml:space="preserve">
+    <value>Cim deserializer threw an error when deserializing file {0}.</value>
+  </data>
+  <data name="InvalidValueForProperty" xml:space="preserve">
+    <value>'{0}' is not a valid value for property '{1}' on class '{2}'. Please change the value to one of the following strings: {3}.</value>
+  </data>
+  <data name="UnsupportedValueForProperty" xml:space="preserve">
+    <value>At least one of the values '{0}' is not supported or valid for property '{1}' on class '{2}'. Please specify only supported values:
+{3}.</value>
+  </data>
+  <data name="MissingValueForMandatoryProperty" xml:space="preserve">
+    <value>Resource '{0}' requires that a value of type '{1}' be provided for property '{2}'.</value>
+  </data>
+  <data name="ValueNotInRange" xml:space="preserve">
+    <value>Property '{0}' of Resource '{1}' has value '{2}' which is not between valid range '{3}' and '{4}'.</value>
+  </data>
+  <data name="CannotLoadPowerShellDataFile" xml:space="preserve">
+    <value>Failed to load the PowerShell data file '{0}' with the following error:
+{1}</value>
+  </data>
+  <data name="CannotResolvePowerShellDataFilePath" xml:space="preserve">
+    <value>Cannot resolve the path '{0}' to a single .psd1 file.</value>
+  </data>
+  <data name="InvalidPowerShellDataFile" xml:space="preserve">
+    <value>The PowerShell data file '{0}' is invalid since it cannot be evaluated into a Hashtable object.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnWinPE" xml:space="preserve">
+    <value>Configuration is not supported on WinPE.</value>
+  </data>
+  <data name="EmptyExpressionRequiresANonDefaultMode" xml:space="preserve">
+    <value>If the expression passed to the Where() operator is null then you must specify a non-Default value for the selection mode argument. Please change the value of the mode argument to a value other than Default and try running your script again.</value>
+  </data>
+  <data name="ForEachBadGenericConversionTypeSpecified" xml:space="preserve">
+    <value>The generic collection type [{0}] passed to ForEach() has too many type arguments. Please change the specified type to be a generic collection with only one type argument then try running your script again.</value>
+  </data>
+  <data name="ForEachTypeConversionFailed" xml:space="preserve">
+    <value>Unable to convert input to the target type [{0}] passed to the ForEach() operator. Please check the specified type and try running your script again.</value>
+  </data>
+  <data name="ForEachNotSupportCleanBlock" xml:space="preserve">
+    <value>Script block with a 'clean' block is not supported by the 'ForEach' method.</value>
+  </data>
+  <data name="NumberToReturnMustBeGreaterThanZero" xml:space="preserve">
+    <value>The 'numberToReturn' value provided to the third argument of the Where() operator must be greater than zero. Please correct the argument's value and try running your script again.</value>
+  </data>
+  <data name="RedirectionStreamCanOnlyMergeToOutputStream" xml:space="preserve">
+    <value>Redirection only allows another stream to be merged with the output stream. Please correct the redirection operation to merge into the output stream then try running your script again.</value>
+  </data>
+  <data name="ForEachNonexistentMemberReference" xml:space="preserve">
+    <value>The ForEach() operator could not find a member '{0}' on the target object. Please verify that the named member exists and then try running your script again.</value>
+  </data>
+  <data name="UnsupportedReservedKeyword" xml:space="preserve">
+    <value>The '{0}' keyword is not supported in this version of the language.</value>
+  </data>
+  <data name="UnsupportedReservedProperty" xml:space="preserve">
+    <value>The '{0}' property is not supported in this version of the language.</value>
+  </data>
+  <data name="DuplicateQualifier" xml:space="preserve">
+    <value>Duplicate '{0}' qualifier</value>
+  </data>
+  <data name="ModifiersCannotBeCombined" xml:space="preserve">
+    <value>Modifier '{0}' cannot be combined with '{1}'</value>
+  </data>
+  <data name="MissingUsingStatementDirective" xml:space="preserve">
+    <value>Missing using directive</value>
+  </data>
+  <data name="MissingNamespaceAlias" xml:space="preserve">
+    <value>Missing namespace alias</value>
+  </data>
+  <data name="MissingEqualsInUsingAlias" xml:space="preserve">
+    <value>Missing '=' operator</value>
+  </data>
+  <data name="MissingUsingItemName" xml:space="preserve">
+    <value>Missing using name</value>
+  </data>
+  <data name="VariableNotLocal" xml:space="preserve">
+    <value>Variable is not assigned in the method.</value>
+  </data>
+  <data name="IncompleteMemberDefinition" xml:space="preserve">
+    <value>Missing a property name or method definition.</value>
+  </data>
+  <data name="MemberAlreadyDefined" xml:space="preserve">
+    <value>The member '{0}' is already defined.</value>
+  </data>
+  <data name="TooManyTypes" xml:space="preserve">
+    <value>Only one type may be specified on class members.</value>
+  </data>
+  <data name="TypeCreationError" xml:space="preserve">
+    <value>Error during creation of type "{0}". Error message:
+{1}</value>
+  </data>
+  <data name="CannotConvertValue" xml:space="preserve">
+    <value>Cannot convert the value to type "{0}".</value>
+  </data>
+  <data name="PropertyNotFoundForAttribute" xml:space="preserve">
+    <value>Property '{0}' cannot be found for attribute '{1}'. Specify one of the following properties: {2}.</value>
+  </data>
+  <data name="AttributeNotAllowedOnDeclaration" xml:space="preserve">
+    <value>Attribute '{0}' is not valid on this declaration. It is valid on '{1}' declarations only.</value>
+  </data>
+  <data name="ParameterAttributeArgumentNeedsToBeConstant" xml:space="preserve">
+    <value>Attribute argument must be a constant.</value>
+  </data>
+  <data name="ResourceNotDefined" xml:space="preserve">
+    <value>Undefined DSC resource '{0}'. Use Import-DSCResource to import the resource.</value>
+  </data>
+  <data name="DynamicKeywordPreParseException" xml:space="preserve">
+    <value>Exception occurred when pre-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="DynamicKeywordPostParseException" xml:space="preserve">
+    <value>Exception occurred when post-parsing dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="WorkflowNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Workflow is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MetaConfigurationUsedInRegularConfig" xml:space="preserve">
+    <value>Meta Configuration resource {0} is not allowed in the regular configuration. Use meta configuration resources in a configuration with [DscLocalConfigurationManager()] attribute.</value>
+  </data>
+  <data name="RegularResourceUsedInMetaConfig" xml:space="preserve">
+    <value>Regular DSC resource {0} is not allowed in the meta configuration. </value>
+  </data>
+  <data name="GetSteppablePipelineFromWrongThread" xml:space="preserve">
+    <value>There is no Runspace available to get and run the SteppablePipeline in this thread. You can provide one in the DefaultRunspace property of the System.Management.Automation.Runspaces.Runspace type. The script block you attempted to get SteppablePipeline from was: {0}</value>
+  </data>
+  <data name="AmbiguousConversion" xml:space="preserve">
+    <value>There are valid conversions from {0} to {1}.</value>
+  </data>
+  <data name="CannotCall" xml:space="preserve">
+    <value>Cannot perform call.</value>
+  </data>
+  <data name="CannotRetrieveTypeInformation" xml:space="preserve">
+    <value>Cannot retrieve type information.</value>
+  </data>
+  <data name="CouldNotGetDispId" xml:space="preserve">
+    <value>Could not get dispatch ID for {0} (error: {1}).</value>
+  </data>
+  <data name="DispBadParamCount" xml:space="preserve">
+    <value>Cannot find an overload for "{0}" and the argument count: "{1}"</value>
+  </data>
+  <data name="DispMemberNotFound" xml:space="preserve">
+    <value>Error while invoking {0}. Could not find member.</value>
+  </data>
+  <data name="DispNoNamedArgs" xml:space="preserve">
+    <value>Error while invoking {0}. Named arguments are not supported.</value>
+  </data>
+  <data name="DispOverflow" xml:space="preserve">
+    <value>Error while invoking {0}. Overflow detected.</value>
+  </data>
+  <data name="DispParamNotOptional" xml:space="preserve">
+    <value>Error while invoking {0}. A required parameter was omitted.</value>
+  </data>
+  <data name="DispTypeMismatch" xml:space="preserve">
+    <value>Exception setting "{0}": Cannot convert the "{1}" value of type "{2}" to type "{3}".</value>
+  </data>
+  <data name="GetIDsOfNamesInvalid" xml:space="preserve">
+    <value>IDispatch::GetIDsOfNames behaved unexpectedly for {0}.</value>
+  </data>
+  <data name="SetComObjectDataFailed" xml:space="preserve">
+    <value>Marshal.SetComObjectData failed.</value>
+  </data>
+  <data name="UnexpectedVarEnum" xml:space="preserve">
+    <value>Unexpected VarEnum {0}.</value>
+  </data>
+  <data name="UnsupportedHandlerType" xml:space="preserve">
+    <value>Attempting to pass an event handler of an unsupported type.</value>
+  </data>
+  <data name="ConfigurationNotSupportedInPowerShellCore" xml:space="preserve">
+    <value>Configuration keyword is not supported in PowerShell 6+.</value>
+  </data>
+  <data name="MethodHasCodePathNotReturn" xml:space="preserve">
+    <value>Not all code path returns value within method.</value>
+  </data>
+  <data name="VoidMethodHasReturn" xml:space="preserve">
+    <value>Invalid return statement within void method.</value>
+  </data>
+  <data name="NonVoidMethodMissingReturnValue" xml:space="preserve">
+    <value>Invalid return statement within non-void method.</value>
+  </data>
+  <data name="MissingTypeBody" xml:space="preserve">
+    <value>Missing '{0}' body in '{0}' declaration.</value>
+  </data>
+  <data name="CycleInEnumInitializers" xml:space="preserve">
+    <value>Cannot define enum because of a cycle in the initialization expressions.</value>
+  </data>
+  <data name="EnumeratorValueOutOfBounds" xml:space="preserve">
+    <value>Enumerator value is either too large or too small for {0}.</value>
+  </data>
+  <data name="EnumeratorValueMustBeConstant" xml:space="preserve">
+    <value>Enumerator value must be a constant value.</value>
+  </data>
+  <data name="DynamicKeywordSemanticCheckException" xml:space="preserve">
+    <value>Exception occurred when performing semantic check for dynamic keyword '{0}' with details '{1}'.</value>
+  </data>
+  <data name="UnsupportedPropertyTypeOfDSCResourceClass" xml:space="preserve">
+    <value>The '{0}' property with type '{1}' of DSC resource class '{2}' is not supported.</value>
+  </data>
+  <data name="MissingMethodParameterList" xml:space="preserve">
+    <value>Missing '(' in class method parameter list.</value>
+  </data>
+  <data name="NamedBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A named block is not allowed in a class method.</value>
+  </data>
+  <data name="ParamBlockNotAllowedInMethod" xml:space="preserve">
+    <value>A param block is not allowed in a class method.</value>
+  </data>
+  <data name="SealedBaseClass" xml:space="preserve">
+    <value>Cannot inherit from sealed class '{0}'.</value>
+  </data>
+  <data name="TypeNameExpected" xml:space="preserve">
+    <value>Type name expected.</value>
+  </data>
+  <data name="InvalidUnderlyingType" xml:space="preserve">
+    <value>'{0}' is not a valid underlying type for enums. Expected a builtin integral type (one of byte, sbyte, short, ushort, int, uint, long or ulong)</value>
+  </data>
+  <data name="InterfaceNameExpected" xml:space="preserve">
+    <value>'{0}': Interface name expected.</value>
+  </data>
+  <data name="BaseClassNoDefaultCtor" xml:space="preserve">
+    <value>Base class '{0}' does not contain a parameterless constructor.</value>
+  </data>
+  <data name="SubtypeArray" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be an array.</value>
+  </data>
+  <data name="SubtypeUnclosedGeneric" xml:space="preserve">
+    <value>Invalid base type '{0}'. Base type cannot be a generic with unspecified parameters.</value>
+  </data>
+  <data name="MissingBaseCtorCall" xml:space="preserve">
+    <value>Missing 'base' after ':' in a base class constructor call.</value>
+  </data>
+  <data name="ConstructorCantHaveReturnType" xml:space="preserve">
+    <value>A constructor cannot specify a return type.</value>
+  </data>
+  <data name="DscResourceMissingDefaultConstructor" xml:space="preserve">
+    <value>The DSC resource '{0}' has no default constructor.</value>
+  </data>
+  <data name="DscResourceMissingGetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Get method that returns [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingKeyProperty" xml:space="preserve">
+    <value>The DSC resource '{0}' must have at least one key property (using the syntax [DscProperty(Key)].)</value>
+  </data>
+  <data name="DscResourceMissingSetMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Set method that returns [void] and accepts no parameters.</value>
+  </data>
+  <data name="DscResourceMissingTestMethod" xml:space="preserve">
+    <value>The DSC resource '{0}' is missing a Test method that returns [bool] and accepts no parameters.</value>
+  </data>
+  <data name="StaticConstructorCantHaveParameters" xml:space="preserve">
+    <value>A static constructor cannot have any parameters.</value>
+  </data>
+  <data name="TypeNotAllowedForProperty" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a property.</value>
+  </data>
+  <data name="TypeNotAllowedForParameter" xml:space="preserve">
+    <value>The type '{0}' is not allowed on a parameter.</value>
+  </data>
+  <data name="NonStaticMemberAccessInStaticMember" xml:space="preserve">
+    <value>Cannot access the non-static member '{0}' in a static method or initializer of a static property.</value>
+  </data>
+  <data name="FailToParseModuleScriptFile" xml:space="preserve">
+    <value>Failed to parse module script file '{0}' with error
+'{1}'.</value>
+  </data>
+  <data name="CantActivateDocumentInPowerShellCore" xml:space="preserve">
+    <value>Cannot run a document in PowerShell: {0}.</value>
+  </data>
+  <data name="MultipleTypeConstraintsOnMethodParam" xml:space="preserve">
+    <value>Multiple type constraints are not allowed on a method parameter.</value>
+  </data>
+  <data name="ScriptContainedMaliciousContent" xml:space="preserve">
+    <value>This script contains malicious content and has been blocked by your antivirus software.</value>
+  </data>
+  <data name="InvalidLocalConfigurationManagerProperty" xml:space="preserve">
+    <value>'{0}' cannot be specified in LocalConfigurationManager resource. Please switch to Settings instead or use only following values: {1}.</value>
+  </data>
+  <data name="PropertyInGenericType" xml:space="preserve">
+    <value>'{0}' is defined in a generic type.</value>
+  </data>
+  <data name="AmbiguousTypeReference" xml:space="preserve">
+    <value>Type name '{0}' is ambiguous, it could be '{1}' or '{2}'.</value>
+  </data>
+  <data name="UsingMustBeAtStartOfScript" xml:space="preserve">
+    <value>A 'using' statement must appear before any other statements in a script.</value>
+  </data>
+  <data name="UsingStatementNotSupported" xml:space="preserve">
+    <value>This syntax of the 'using' statement is not supported.</value>
+  </data>
+  <data name="InvalidNamespaceValue" xml:space="preserve">
+    <value>The specified namespace in the 'using' statement contains invalid characters.</value>
+  </data>
+  <data name="InformationStream" xml:space="preserve">
+    <value>information stream</value>
+  </data>
+  <data name="DscResourceInvalidKeyProperty" xml:space="preserve">
+    <value>Invalid key property. The key property must be of [string], signed/unsigned integer, or Enum types.</value>
+  </data>
+  <data name="DscResourceInvalidGetMethod" xml:space="preserve">
+    <value>Invalid Get method. Get method must return [{0}] and accepts no parameters.</value>
+  </data>
+  <data name="ErrorLoadingAssembly" xml:space="preserve">
+    <value>无法加载程序集“{0}”。</value>
+  </data>
+  <data name="CannotLoadAssemblyFromUncPath" xml:space="preserve">
+    <value>Cannot use assembly with an UNC path: '{0}'.</value>
+  </data>
+  <data name="CannotLoadAssemblyWithUriSchema" xml:space="preserve">
+    <value>Cannot use assembly with uri schema '{0}'.</value>
+  </data>
+  <data name="MissingStatementTerminator" xml:space="preserve">
+    <value>Missing a newline or semicolon.</value>
+  </data>
+  <data name="MissingThis" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="InvalidValueForUsingItemName" xml:space="preserve">
+    <value>'{0}' is not a valid value for using name.</value>
+  </data>
+  <data name="MissingTypeInStaticPropertyAssignment" xml:space="preserve">
+    <value>Cannot assign property, use '{0}{1}'.</value>
+  </data>
+  <data name="DebugModeShouldHaveOneValue" xml:space="preserve">
+    <value>DebugMode should only have one value.</value>
+  </data>
+  <data name="LabelNotFound" xml:space="preserve">
+    <value>Label '{0}' not found inside the method.</value>
+  </data>
+  <data name="ConvertCimPropertyToObjectPropertyFailed" xml:space="preserve">
+    <value>Failed to convert the value of CimProperty {0} to the property value of class {1}.</value>
+  </data>
+  <data name="ExpectArrayTypeOfPropertyInPSClass" xml:space="preserve">
+    <value>Property {0} of PowerShell class {1} is not declared as array type, but defined in its configuration instance as instance array type.</value>
+  </data>
+  <data name="InstantiatePSClassObjectFailed" xml:space="preserve">
+    <value>Failed to create an object of PowerShell class {0}.</value>
+  </data>
+  <data name="InvalidHashtable" xml:space="preserve">
+    <value>The hashtable supplied to the Desired State Configuration resource {0} is not valid. The key or value cannot be null or empty.</value>
+  </data>
+  <data name="InvalidPassword" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="InvalidUserName" xml:space="preserve">
+    <value>The username supplied to the Desired State Configuration resource {0} is not valid. The username cannot be null or empty.</value>
+  </data>
+  <data name="PropertyNotDeclaredInPSClass" xml:space="preserve">
+    <value>Property {0} is not declared in PowerShell class {1}, but defined in its configuration instance.</value>
+  </data>
+  <data name="DisabledRefreshModeNotValidForPartialConfig" xml:space="preserve">
+    <value>PartialConfiguration '{0}' has a Refresh Mode set to Disabled which is not a valid mode for Partial Configurations. Use Pull or Push refresh mode. </value>
+  </data>
+  <data name="CannotCreateTypeConstrainedLanguage" xml:space="preserve">
+    <value>Cannot create type. Only core types are supported in this language mode.</value>
+  </data>
+  <data name="ImportDscResourceInsideNode" xml:space="preserve">
+    <value>Import-DscResource cannot be specified inside of Node context</value>
+  </data>
+  <data name="DefaultAllowedVariablesInDataSection" xml:space="preserve">
+    <value>$PSCulture, $PSUICulture, $true, $false, $null</value>
+  </data>
+  <data name="AssignmentStatementToAutomaticNotSupported" xml:space="preserve">
+    <value>Cannot assign automatic variable '{0}' with type '{1}'</value>
+  </data>
+  <data name="PsDscRunAsCredentialMergeErrorForCompositeResources" xml:space="preserve">
+    <value>Conflict in using PsDscRunAsCredential for Resource {0} because it already specifies PsDscRunAsCredential value. We can only use one PsDscRunAsCredential for the composite resource. </value>
+  </data>
+  <data name="PsDscMissingSchemaStore" xml:space="preserve">
+    <value>Unable to find DSC schema store at "{0}". Please ensure PSDesiredStateConfiguration v3 module is installed.</value>
+  </data>
+  <data name="ParserError" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="ScriptHasAdminBlockedContent" xml:space="preserve">
+    <value>This script contains content that has been flagged as suspicious through a policy setting and has been blocked with error code {0}. Contact your administrator for more information.</value>
+  </data>
+  <data name="CantInvokeCallOperatorAcrossLanguageBoundaries" xml:space="preserve">
+    <value>Cannot use '&amp;' or '.' operators to invoke a module scope command across language boundaries.</value>
+  </data>
+  <data name="ClassesNotAllowedInConstrainedLanguage" xml:space="preserve">
+    <value>Class keyword is not allowed in ConstrainedLanguage mode.</value>
+  </data>
+  <data name="MissingColonInTernaryExpression" xml:space="preserve">
+    <value>Missing ':' in the ternary expression.</value>
+  </data>
+  <data name="EmptyPipelineChainElement" xml:space="preserve">
+    <value>A pipeline chain operator must be followed by a pipeline.</value>
+  </data>
+  <data name="BackgroundOperatorInPipelineChain" xml:space="preserve">
+    <value>Background operators can only be used at the end of a pipeline chain.</value>
+  </data>
+  <data name="InvokingCleanBlockNotSupported" xml:space="preserve">
+    <value>Directly invoking the 'clean' block of a script block is not supported.</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogTitle" xml:space="preserve">
+    <value>Parser Configuration Keyword</value>
+  </data>
+  <data name="WDACParserConfigKeywordLogMessage" xml:space="preserve">
+    <value>The Configuration keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserClassKeywordLogTitle" xml:space="preserve">
+    <value>Parser Class Keyword</value>
+  </data>
+  <data name="WDACParserClassKeywordLogMessage" xml:space="preserve">
+    <value>The Class keyword will not be allowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogTitle" xml:space="preserve">
+    <value>Parser Data Section SupportedCommand</value>
+  </data>
+  <data name="WDACParserDSSupportedCommandLogMessage" xml:space="preserve">
+    <value>The Data Section that includes the SupportedCommand parameter would be disallowed in Constrained Language mode for untrusted script.</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogTitle" xml:space="preserve">
+    <value>Module Scope Call Operator</value>
+  </data>
+  <data name="WDACParserModuleScopeCallOperatorLogMessage" xml:space="preserve">
+    <value>The module scope call operator will be denied in Constrained Language mode.</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogTitle" xml:space="preserve">
+    <value>ForEach Keyword Method Invocation</value>
+  </data>
+  <data name="WDACParserForEachOperatorLogMessage" xml:space="preserve">
+    <value>The ForEach keyword will fail '{0}' iteration item method invocation when run in Constrained Language mode.</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetSteppablePipelineLogMessage" xml:space="preserve">
+    <value>Creating a steppable pipeline from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="ConfigurationNotAllowedOnArm64" xml:space="preserve">
+    <value>Configuration keyword is not supported on ARM64 processors.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PathUtilsStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PathUtilsStrings.zh-Hans.resx
new file mode 100644
index 00000000000..63e8ff4e6a1
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PathUtilsStrings.zh-Hans.resx
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Utf7EncodingObsolete" xml:space="preserve">
+    <value>Encoding 'UTF-7' is obsolete, please use UTF-8.</value>
+  </data>
+  <data name="UtilityFileExistsNoClobber" xml:space="preserve">
+    <value>File {0} already exists and {1} was specified.</value>
+  </data>
+  <data name="OutFile_ReadWriteFileNotFileSystemProvider" xml:space="preserve">
+    <value>Cannot open file because the current provider ({0}) cannot open a file.</value>
+  </data>
+  <data name="OutFile_MultipleFilesNotSupported" xml:space="preserve">
+    <value>Cannot perform operation because the path resolved to more than one file. This command cannot operate on multiple files.</value>
+  </data>
+  <data name="OutFile_DidNotResolveFile" xml:space="preserve">
+    <value>Cannot perform operation because the wildcard path {0} did not resolve to a file.</value>
+  </data>
+  <data name="OutFile_WriteToFileEncodingUnknown" xml:space="preserve">
+    <value>Unknown encoding {0}; valid values are {1}.</value>
+  </data>
+  <data name="ExportPSSession_ErrorDirectoryExists" xml:space="preserve">
+    <value>The directory '{0}' already exists.  Use the -Force parameter if you want to overwrite the directory and files within the directory.</value>
+  </data>
+  <data name="ExportPSSession_ErrorModuleNameOrPath" xml:space="preserve">
+    <value>The user module path does not exist, and hence a module folder cannot be created for the provided module name '{0}'.</value>
+  </data>
+  <data name="ExportPSSession_CannotCreateOutputDirectory" xml:space="preserve">
+    <value>Cannot create the module {0} due to the following: {1}. Use a different argument for the -OutputModule parameter and retry.</value>
+    <comment>{StrContains="OutputModule"}
+{0} is a placeholder for the name of a directory
+{1} is a placeholder for an error message from the inner exception
+
+Reviewed by TArcher on 2010-07-21
+
+Example usage:
+PS C:\&gt; $s = New-PSSession
+PS C:\&gt; Export-PSSession -Session $s -OutputModule gibberish:here
+Export-PSSession : Cannot create the module 'gibberish:here' due to the following: Cannot find drive. A drive with the name 'gibberish' does not exist. Use a different argument for the -OutputModule parameter and try again.
+At line:1 char:1
++ Export-PSSession -Session $s -OutputModule gibberish:here
++ ^
+    + CategoryInfo          : ResourceExists: (gibberish:here:String) [Export-PSSession], ArgumentException
+    + FullyQualifiedErrorId : ExportProxyCommand_CannotCreateOutputDirectory,Microsoft.PowerShell.Commands.ExportPSSessionCommand
+    </comment>
+  </data>
+  <data name="ExportPSSession_ScriptGeneratorVersionMismatch" xml:space="preserve">
+    <value>The module cannot be loaded because it has been generated with an incompatible version of the {0} cmdlet. Generate the module with the {0} cmdlet from the current session, and try loading the module again.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PipelineStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PipelineStrings.zh-Hans.resx
new file mode 100644
index 00000000000..b7f4a97b0b0
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PipelineStrings.zh-Hans.resx
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandProcessorAlreadyUsed" xml:space="preserve">
+    <value>无法处理 cmdlet 实例，因为该 cmdlet 实例正由另一个管道使用。请与 Microsoft 客户支持服务联系。</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>无法执行该操作，因为管道已启动。停止管道，然后重试该操作。</value>
+  </data>
+  <data name="ActionPreferenceStop" xml:space="preserve">
+    <value>无法继续运行 cmdlet，因为停止策略已阻止运行 cmdlet。</value>
+  </data>
+  <data name="FirstCommandCannotHaveInput" xml:space="preserve">
+    <value>无法运行管道，因为管道中的第一个 cmdlet 正在尝试从前面的 cmdlet 结果中读取输入。修改第一个 cmdlet，移除第一个 cmdlet，或将第一个 cmdlet 需要其输出的 cmdlet 添加到管道，然后尝试再次运行管道。</value>
+  </data>
+  <data name="InvalidCommandNumber" xml:space="preserve">
+    <value>无法处理 cmdlet 编号。ReadFromCommand 函数必须指定已添加到管道的 cmdlet 的 ID。请与 Microsoft 客户支持服务联系。</value>
+  </data>
+  <data name="PipeAlreadyTaken" xml:space="preserve">
+    <value>无法读取 ReadFromCommand 和 ReadErrorQueue 函数的输出，因为另一个 cmdlet 已在读取该输出。请与 Microsoft 客户支持服务联系。</value>
+  </data>
+  <data name="PipelineExecuteRequiresAtLeastOneCommand" xml:space="preserve">
+    <value>无法运行管道，因为不存在命令。将至少一个命令添加到管道，然后再次运行它。</value>
+  </data>
+  <data name="PipelineNotStarted" xml:space="preserve">
+    <value>无法完成管道操作，因为它尚未启动。在可分步执行管道上调用 End()之前，必须调用 Begin()方法。</value>
+  </data>
+  <data name="WriteNotPermitted" xml:space="preserve">
+    <value>无法从 BeginProcessing、ProcessRecord 和 EndProcessing 方法的替代项之外调用 WriteObject 和 WriteError 方法，并且只能从同一线程内部调用它们。验证 cmdlet 是否正确进行这些调用，或与 Microsoft 客户支持服务联系。</value>
+  </data>
+  <data name="SecondFailure" xml:space="preserve">
+    <value>cmdlet 在调用 ThrowTerminatingError 后引发了异常。
+第一个异常为“{0}”，堆栈跟踪为“{1}”。
+第二个异常为“{2}”，堆栈跟踪为“{3}”。</value>
+  </data>
+  <data name="WriteToClosedPipeline" xml:space="preserve">
+    <value>关闭管道后，无法调用 WriteObject 和 WriteError 方法。请与 Microsoft 客户支持服务联系。</value>
+  </data>
+  <data name="PipelineExecutionInformation" xml:space="preserve">
+    <value>CommandInvocation({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionNonTerminatingError" xml:space="preserve">
+    <value>NonTerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionTerminatingError" xml:space="preserve">
+    <value>TerminatingError({0}): "{1}"</value>
+  </data>
+  <data name="PipelineExecutionParameterBinding" xml:space="preserve">
+    <value>ParameterBinding({0}): name="{1}"；value="{2}"</value>
+  </data>
+  <data name="CannotCreatePipeline" xml:space="preserve">
+    <value>创建管道时发生错误。</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>此管道不支持断开连接-连接语义。</value>
+  </data>
+  <data name="PipelineNotDisconnected" xml:space="preserve">
+    <value>无法连接此管道，因为它未处于断开连接的状态。</value>
+  </data>
+  <data name="InvalidRemoteCommand" xml:space="preserve">
+    <value>运行空间对象具有与之关联的 null 远程命令。 无法创建断开连接的 RemotePipeline 对象，因为未指定远程命令。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/PowerShellStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/PowerShellStrings.zh-Hans.resx
new file mode 100644
index 00000000000..aee0e5ea389
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/PowerShellStrings.zh-Hans.resx
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidPowerShellStateGeneral" xml:space="preserve">
+    <value>当前 PowerShell 实例的状态对此操作无效。</value>
+  </data>
+  <data name="ExecutionAlreadyStarted" xml:space="preserve">
+    <value>无法执行该操作，因为已启动命令。请等待命令完成，或停止该命令，然后重试该操作。</value>
+  </data>
+  <data name="NoCommandToInvoke" xml:space="preserve">
+    <value>未指定任何命令。</value>
+  </data>
+  <data name="InvalidStateCreateNested" xml:space="preserve">
+    <value>PowerShell 实例未处于正确状态，无法创建嵌套 PowerShell 实例。应仅在正在运行的 PowerShell 实例中创建嵌套 PowerShell 实例。</value>
+  </data>
+  <data name="InvalidRunspaceState" xml:space="preserve">
+    <value>无法执行操作，因为运行空间未处于“{0}”状态。运行空间的当前状态为“{1}”。</value>
+  </data>
+  <data name="NestedPowerShellInvokeAsync" xml:space="preserve">
+    <value>无法异步调用嵌套 PowerShell 实例。使用 Invoke 方法。</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} 对象不是通过在此 PowerShell 实例上调用 {1} 来创建的。</value>
+  </data>
+  <data name="ApartmentStateMismatch" xml:space="preserve">
+    <value>当运行空间设置为重用线程时，调用设置中的单元状态必须与运行空间匹配。</value>
+  </data>
+  <data name="ApartmentStateMismatchCurrentThread" xml:space="preserve">
+    <value>当运行空间设置为使用当前线程时，调用设置中的单元状态必须与当前线程的单元状态匹配。</value>
+  </data>
+  <data name="ParameterRequiresCommand" xml:space="preserve">
+    <value>添加参数需要命令。在添加参数之前，必须将命令添加到 PowerShell 实例。</value>
+  </data>
+  <data name="KeyMustBeString" xml:space="preserve">
+    <value>字典中的键必须是字符串。</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithCommand" xml:space="preserve">
+    <value>没有可在此线程中运行命令的运行空间。可以在 System.Management.Automation.Runspaces.Runspace 类型的 DefaultRunspace 属性中提供一个。尝试调用的命令为: {0}</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>无法连接此 PowerShell 对象，因为它未与远程运行空间或运行空间池关联。</value>
+  </data>
+  <data name="DiscOnSyncCommand" xml:space="preserve">
+    <value>已断开正在运行的命令已断开连接，但仍在远程服务器上运行。 重新连接以获取命令操作状态和输出数据。</value>
+  </data>
+  <data name="ExecutionDisconnected" xml:space="preserve">
+    <value>无法执行此操作，因为当前 PowerShell 会话处于“已断开连接”状态。 连接此 PowerShell 会话，然后等待命令完成或停止该命令。</value>
+  </data>
+  <data name="IsDisconnected" xml:space="preserve">
+    <value>无法执行此操作，因为当前 PowerShell 会话处于“已断开连接”状态。 连接此 PowerShell 会话，然后重试。</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>对远程命令的连接尝试失败。</value>
+  </data>
+  <data name="ExecutionStopping" xml:space="preserve">
+    <value>无法执行该操作，因为命令当前正在停止。等待命令完成停止，然后重试该操作。</value>
+  </data>
+  <data name="CommandInvokedFromWrongThreadWithoutCommand" xml:space="preserve">
+    <value>没有可在此线程中运行命令的运行空间。可以在 System.Management.Automation.Runspaces.Runspace 类型的 DefaultRunspace 属性中提供一个。当前 PowerShell 实例不包含要调用的命令。</value>
+  </data>
+  <data name="NoDefaultRunspaceForPSCreate" xml:space="preserve">
+    <value>无法创建使用当前运行空间的 PowerShell 对象，因为当前没有可用的运行空间。 当前运行空间可能正在启动，例如在初始会话状态下创建它时会出现此情况。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ProgressRecordStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ProgressRecordStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ccc175ee58a
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ProgressRecordStrings.zh-Hans.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ArgMayNotBeNegative" xml:space="preserve">
+    <value>无法处理参数，因为 {0} 不能为负值。</value>
+  </data>
+  <data name="ArgMayNotBeNullOrEmpty" xml:space="preserve">
+    <value>无法处理参数，因为 {0} 的值不能为 null 或为空。</value>
+  </data>
+  <data name="PercentMayNotBeMoreThan100" xml:space="preserve">
+    <value>无法设置百分比，因为 {0} 不能大于 100。</value>
+  </data>
+  <data name="ParentActivityIdCantBeActivityId" xml:space="preserve">
+    <value>ParentActivityId 不能与 ActivityId 相同。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ProviderBaseSecurity.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ProviderBaseSecurity.zh-Hans.resx
new file mode 100644
index 00000000000..766324f75e0
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ProviderBaseSecurity.zh-Hans.resx
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ISecurityDescriptorCmdletProvider_NotSupported" xml:space="preserve">
+    <value>无法使用接口，因为此提供程序不支持 ISecurityDescriptorCmdletProvider 接口。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/ProxyCommandStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/ProxyCommandStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c4d74726f95
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/ProxyCommandStrings.zh-Hans.resx
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="HelpInfoObjectRequired" xml:space="preserve">
+    <value>未将 'help' 参数识别为由 'get-help' 命令创建的有效 HelpInfo 对象。</value>
+  </data>
+  <data name="CommandMetadataMissingCommandName" xml:space="preserve">
+    <value>无法生成代理命令，因为 CommandMetadata 没有名称。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/RegistryProviderStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/RegistryProviderStrings.zh-Hans.resx
new file mode 100644
index 00000000000..63cca6e64ce
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/RegistryProviderStrings.zh-Hans.resx
@@ -0,0 +1,333 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>设置项</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>项: {0} 值: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>清除项</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>项: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>新建项</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>项: {0}</value>
+  </data>
+  <data name="RemoveKeyAction" xml:space="preserve">
+    <value>移除键</value>
+  </data>
+  <data name="RemoveKeyResourceTemplate" xml:space="preserve">
+    <value>项: {0}</value>
+  </data>
+  <data name="CopyKeyAction" xml:space="preserve">
+    <value>复制键</value>
+  </data>
+  <data name="CopyKeyResourceTemplate" xml:space="preserve">
+    <value>项: {0} 目标: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>重命名项</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>项: {0} NewName: {1}</value>
+  </data>
+  <data name="MoveItemAction" xml:space="preserve">
+    <value>移动项</value>
+  </data>
+  <data name="MoveItemResourceTemplate" xml:space="preserve">
+    <value>项: {0} 目标: {1}</value>
+  </data>
+  <data name="SetPropertyAction" xml:space="preserve">
+    <value>设置属性</value>
+  </data>
+  <data name="SetPropertyResourceTemplate" xml:space="preserve">
+    <value>项: {0} 属性: {1}</value>
+  </data>
+  <data name="ClearPropertyAction" xml:space="preserve">
+    <value>清除属性</value>
+  </data>
+  <data name="ClearPropertyResourceTemplate" xml:space="preserve">
+    <value>项: {0} 属性: {1}</value>
+  </data>
+  <data name="NewPropertyAction" xml:space="preserve">
+    <value>新属性</value>
+  </data>
+  <data name="NewPropertyResourceTemplate" xml:space="preserve">
+    <value>项: {0} 属性: {1}</value>
+  </data>
+  <data name="RemovePropertyAction" xml:space="preserve">
+    <value>移除属性</value>
+  </data>
+  <data name="RemovePropertyResourceTemplate" xml:space="preserve">
+    <value>项: {0} 属性: {1}</value>
+  </data>
+  <data name="RenamePropertyAction" xml:space="preserve">
+    <value>重命名属性。</value>
+  </data>
+  <data name="RenamePropertyResourceTemplate" xml:space="preserve">
+    <value>项: {0} SourceProperty: {1} DestinationProperty: {2}</value>
+  </data>
+  <data name="CopyPropertyAction" xml:space="preserve">
+    <value>复制属性</value>
+  </data>
+  <data name="CopyPropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="MovePropertyAction" xml:space="preserve">
+    <value>移动属性</value>
+  </data>
+  <data name="MovePropertyResourceTemplate" xml:space="preserve">
+    <value>Item: {0} SourceProperty: {1} DestinationItem: {2} DestinationProperty: {3}</value>
+  </data>
+  <data name="ContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>未处理该操作。所提供的位置不允许执行此操作。</value>
+  </data>
+  <data name="SourceContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>不允许对源位置执行此操作。</value>
+  </data>
+  <data name="DestinationContainerInvalidOperationTemplate" xml:space="preserve">
+    <value>不允许对目标位置执行该操作。</value>
+  </data>
+  <data name="HKLMDriveDescription" xml:space="preserve">
+    <value>本地计算机的配置设置</value>
+  </data>
+  <data name="HKCUDriveDescription" xml:space="preserve">
+    <value>当前用户的软件设置</value>
+  </data>
+  <data name="KeyAlreadyExists" xml:space="preserve">
+    <value>此路径中的键已存在。</value>
+  </data>
+  <data name="DestinationChildOfSource" xml:space="preserve">
+    <value>无法执行该操作，因为目标路径从属于源路径。</value>
+  </data>
+  <data name="PropertyAlreadyExists" xml:space="preserve">
+    <value>属性已存在。</value>
+  </data>
+  <data name="PropertyNotAtPath" xml:space="preserve">
+    <value>路径 {1} 中不存在属性 {0}。</value>
+  </data>
+  <data name="KeyDoesNotExist" xml:space="preserve">
+    <value>指定路径中的注册表项不存在。</value>
+  </data>
+  <data name="TypeParameterBindingFailure" xml:space="preserve">
+    <value>无法绑定参数 'Type'。无法将“{0}”转换为“{1}”。可能的枚举值为“String、ExpandString、Binary、DWord、MultiString、QWord、Unknown”。</value>
+  </data>
+  <data name="KeyCreatedValueFailed" xml:space="preserve">
+    <value>已创建键 {0}，但无法设置默认值。</value>
+  </data>
+  <data name="NewDriveRootDoesNotExist" xml:space="preserve">
+    <value>无法创建具有指定根的驱动器。根路径不存在。</value>
+  </data>
+  <data name="RenameItemAlreadyExists" xml:space="preserve">
+    <value>无法重命名该项，因为同一容器中已存在具有该名称的项。</value>
+  </data>
+  <data name="Arg_RegInvalidKeyName" xml:space="preserve">
+    <value>注册表项名称必须以有效的基项名称开头。</value>
+  </data>
+  <data name="ArgRegKeyDelHive" xml:space="preserve">
+    <value>子项参数无效。</value>
+  </data>
+  <data name="Arg_RegSubKeyAbsent" xml:space="preserve">
+    <value>无法删除子项树，因为子项不存在。</value>
+  </data>
+  <data name="Arg_RegSubKeyValueAbsent" xml:space="preserve">
+    <value>不存在具有该名称的值。</value>
+  </data>
+  <data name="Arg_EnumIllegalVal" xml:space="preserve">
+    <value>枚举值 {0} 无效。</value>
+  </data>
+  <data name="Arg_Value" xml:space="preserve">
+    <value>必须指定值参数。</value>
+  </data>
+  <data name="Arg_Name" xml:space="preserve">
+    <value>必须指定名称参数。</value>
+  </data>
+  <data name="Arg_RegBadKeyKind" xml:space="preserve">
+    <value>指定的 RegistryValueKind 是无效的值。</value>
+  </data>
+  <data name="Arg_RegSetStrArrNull" xml:space="preserve">
+    <value>RegistryKey.SetValue 不允许使用包含 null 字符串引用的 String[]。</value>
+  </data>
+  <data name="Arg_RegKeyStrLenBug" xml:space="preserve">
+    <value>注册表子项不应超过 255 个字符。</value>
+  </data>
+  <data name="Arg_RegKeyStrEmpty" xml:space="preserve">
+    <value>必须指定非空子项名称。</value>
+  </data>
+  <data name="Arg_RegSetMismatchedKind" xml:space="preserve">
+    <value>值对象的类型与指定的 RegistryValueKind 不匹配，或者无法正确转换该对象。</value>
+  </data>
+  <data name="Arg_RegSetBadArrType" xml:space="preserve">
+    <value>RegistryKey.SetValue 不支持类型为“{0}”的数组。仅支持 Byte[] 和 String[]。</value>
+  </data>
+  <data name="Arg_RegKeyNotFound" xml:space="preserve">
+    <value>指定的注册表项不存在。</value>
+  </data>
+  <data name="Arg_RegValueNameStrLenBug" xml:space="preserve">
+    <value>指定值名称的长度超过了最大 16383 个字符。</value>
+  </data>
+  <data name="Arg_ValueDataLenBug" xml:space="preserve">
+    <value>指定值数据的大小超出了最大值 1 MB。</value>
+  </data>
+  <data name="ArgumentException_RegSubKeyAbsent" xml:space="preserve">
+    <value>指定的注册表子项不存在。</value>
+  </data>
+  <data name="Argument_InvalidRegistryKeyPermissionCheck" xml:space="preserve">
+    <value>指定的 RegistryKeyPermissionCheck 值无效。</value>
+  </data>
+  <data name="InvalidOperation_RegRemoveSubKey" xml:space="preserve">
+    <value>注册表项包含子项；此方法不支持递归移除。</value>
+  </data>
+  <data name="InvalidOperation_NeedTransaction" xml:space="preserve">
+    <value>如果没有 Transaction.Current 或指定的事务，则无法创建 KTM 句柄。</value>
+  </data>
+  <data name="InvalidOperation_MustUseSameTransaction" xml:space="preserve">
+    <value>指定的事务或 Transaction.Current 必须与用于创建或打开此 TransactedRegistryKey 的事务匹配。</value>
+  </data>
+  <data name="InvalidOperation_NotAssociatedWithTransaction" xml:space="preserve">
+    <value>TransactedRegistryKey 对象未与事务关联，因为它用于预定义的键。</value>
+  </data>
+  <data name="Security_RegistryPermission" xml:space="preserve">
+    <value>不允许请求的注册表访问。</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryKeyGeneric_Key" xml:space="preserve">
+    <value>已拒绝访问注册表项“{0}”。</value>
+  </data>
+  <data name="UnauthorizedAccess_RegistryNoWrite" xml:space="preserve">
+    <value>无法写入注册表项。</value>
+  </data>
+  <data name="ObjectDisposed_RegKeyClosed" xml:space="preserve">
+    <value>无法访问已关闭的注册表项。</value>
+  </data>
+  <data name="UnknownError_Num" xml:space="preserve">
+    <value>未知错误: {0}。</value>
+  </data>
+  <data name="NotSupported_KernelTransactions" xml:space="preserve">
+    <value>此平台不支持注册表事务。</value>
+  </data>
+  <data name="AccessControl_InvalidHandle" xml:space="preserve">
+    <value>指定的句柄无效。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/RemotingErrorIdStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/RemotingErrorIdStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f9ba70fb1cb
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/RemotingErrorIdStrings.zh-Hans.resx
@@ -0,0 +1,1735 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="DefaultRemotingExceptionMessage" xml:space="preserve">
+    <value>An error of type "{0}" has occurred.</value>
+  </data>
+  <data name="OutOfMemory" xml:space="preserve">
+    <value>Out of process memory.</value>
+  </data>
+  <data name="UnsupportedOSForRemoteEnumeration" xml:space="preserve">
+    <value>Remote PSSession enumeration with -ComputerName is only supported on Windows and not "{0}".</value>
+  </data>
+  <data name="PipelineIdsDoNotMatch" xml:space="preserve">
+    <value>Pipeline ID "{0}" does not match the InstanceId of the pipeline that is currently running, "{1}".</value>
+  </data>
+  <data name="PipelineNotFoundOnServer" xml:space="preserve">
+    <value>Pipeline Id "{0}" was not found on the server.</value>
+  </data>
+  <data name="PipelineStopped" xml:space="preserve">
+    <value>The remote pipeline has been stopped.</value>
+  </data>
+  <data name="RunspaceAlreadyExists" xml:space="preserve">
+    <value>The session already exists. Trying to create the session again with the same InstanceId {0} is not allowed.</value>
+  </data>
+  <data name="RunspaceIdsDoNotMatch" xml:space="preserve">
+    <value>The specified client session InstanceId "{0}" does not match the existing session's InstanceId "{1}".</value>
+  </data>
+  <data name="RemoteRunspaceOpenFailed" xml:space="preserve">
+    <value>Opening the remote session failed.</value>
+  </data>
+  <data name="RunspaceCannotBeFound" xml:space="preserve">
+    <value>The specified remote session with a client InstanceId of "{0}" cannot be found.</value>
+  </data>
+  <data name="ResponsePromptIdCannotBeFound" xml:space="preserve">
+    <value>Prompt response has a prompt id "{0}" that cannot be found.</value>
+  </data>
+  <data name="RemoteHostCallFailed" xml:space="preserve">
+    <value>Remote host call to "{0}" failed.</value>
+  </data>
+  <data name="RemoteHostMethodNotImplemented" xml:space="preserve">
+    <value>Remote host method {0} is not implemented.</value>
+  </data>
+  <data name="RemoteHostDataEncodingNotSupported" xml:space="preserve">
+    <value>Remote host method data encoding is not supported for type {0}.</value>
+  </data>
+  <data name="RemoteHostDataDecodingNotSupported" xml:space="preserve">
+    <value>Remote host method data decoding is not supported for type {0}.</value>
+  </data>
+  <data name="NestedPipelineNotSupported" xml:space="preserve">
+    <value>Creation of nested pipelines is not supported.</value>
+  </data>
+  <data name="RelativeUriForRunspacePathNotSupported" xml:space="preserve">
+    <value>Relative URIs are not supported in the creation of remote sessions.</value>
+  </data>
+  <data name="RemoteHostDecodingFailed" xml:space="preserve">
+    <value>A failure occurred while decoding data from the remote host. There was an error in the network data.</value>
+  </data>
+  <data name="MustBeAdminToOverrideThreadOptions" xml:space="preserve">
+    <value>Only administrators can override the Thread Options remotely.</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedCaption" xml:space="preserve">
+    <value>PowerShell Credential Request: {0}</value>
+  </data>
+  <data name="RemoteHostPromptForCredentialModifiedMessage" xml:space="preserve">
+    <value>Warning: A script or application on the remote computer {0} is requesting your credentials. Enter your credentials only if you trust the remote computer and the application or script that is requesting them.
+
+{1}</value>
+  </data>
+  <data name="RemoteHostReadLineAsSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is asking to read a line securely. Enter sensitive information, such as your credentials, only if you trust the remote computer and the application or script that is requesting it.</value>
+  </data>
+  <data name="RemoteHostGetBufferContents" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is attempting to read the buffer contents on the PowerShell host. For security reasons, this is not allowed; the call has been suppressed.</value>
+  </data>
+  <data name="RemoteHostPromptSecureStringPrompt" xml:space="preserve">
+    <value>A script or application on the remote computer {0} is sending a prompt request. When you are prompted, enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the application or script that is requesting the data.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemoteHostCall" xml:space="preserve">
+    <value>Received unsupported remote host call: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedAction" xml:space="preserve">
+    <value>Received remoting data with unsupported action: {0}.</value>
+  </data>
+  <data name="ReceivedUnsupportedDataType" xml:space="preserve">
+    <value>Received remoting data with unsupported data type: {0}.</value>
+  </data>
+  <data name="MissingDestination" xml:space="preserve">
+    <value>Remoting data is missing the destination property.</value>
+  </data>
+  <data name="MissingTarget" xml:space="preserve">
+    <value>Remoting data is missing target interface property.</value>
+  </data>
+  <data name="MissingRunspaceId" xml:space="preserve">
+    <value>Remoting data is missing Session InstanceId property.</value>
+  </data>
+  <data name="MissingDataType" xml:space="preserve">
+    <value>Remoting data is missing RemotingDataType property.</value>
+  </data>
+  <data name="MissingCallId" xml:space="preserve">
+    <value>Remoting data is missing CallId property.</value>
+  </data>
+  <data name="MissingMethodName" xml:space="preserve">
+    <value>Remoting data is missing MethodName property.</value>
+  </data>
+  <data name="MissingIsStartFragment" xml:space="preserve">
+    <value>The IsStartFragment flag for the first fragment is not set.</value>
+  </data>
+  <data name="MissingProperty" xml:space="preserve">
+    <value>Remoting data is missing {0} property.</value>
+  </data>
+  <data name="ObjectIdsNotMatching" xml:space="preserve">
+    <value>Unexpected ObjectId received. This can happen if the fragments are not properly constructed by the remote computer, or the data might have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIdCannotBeLessThanZero" xml:space="preserve">
+    <value>ObjectId cannot be less than or equal to 0. This can happen if the fragments are not properly constructed by the remote computer, or the data has been changed by unauthorized users.</value>
+  </data>
+  <data name="FragmentIdsNotInSequence" xml:space="preserve">
+    <value>The FragmentIDs of the same object must be in sequence, incrementally changing by 1. This can happen if the fragments are not properly constructed by the remote computer. The data might also have been corrupted or changed.</value>
+  </data>
+  <data name="ObjectIsTooBig" xml:space="preserve">
+    <value>Remoting data is too large to be reassembled from the fragments. This can happen if the length of the data in a fragment is greater than Int32.Max. It can also occur if the data was changed by unauthorized users.</value>
+  </data>
+  <data name="MissingIsEndFragment" xml:space="preserve">
+    <value>The IsEndFragment flag is not set for the last fragment. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="DeserializedObjectIsNull" xml:space="preserve">
+    <value>Deserialized remoting data is null.</value>
+  </data>
+  <data name="BlobLengthNotInRange" xml:space="preserve">
+    <value>Fragment blob length is out of range: {0}</value>
+  </data>
+  <data name="DecodingErrorForErrorRecord" xml:space="preserve">
+    <value>Error in decoding ErrorRecord.</value>
+  </data>
+  <data name="DecodingErrorForPipelineStateInfo" xml:space="preserve">
+    <value>Error in decoding PipelineStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForRunspaceStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspaceStateInfo.</value>
+  </data>
+  <data name="ReceivedUnsupportedRemotingTargetInterfaceType" xml:space="preserve">
+    <value>Received unsupported RemotingTargetInterface type: {0}</value>
+  </data>
+  <data name="UnknownTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked on an unknown target class: {0}</value>
+  </data>
+  <data name="MissingTargetClass" xml:space="preserve">
+    <value>Remote host method was invoked without specifying a target class.</value>
+  </data>
+  <data name="DecodingErrorForRunspacePoolStateInfo" xml:space="preserve">
+    <value>Error in decoding RunspacePoolStateInfo.</value>
+  </data>
+  <data name="DecodingErrorForMinRunspaces" xml:space="preserve">
+    <value>Error in decoding Minimum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForMaxRunspaces" xml:space="preserve">
+    <value>Error in decoding Maximum runspaces.</value>
+  </data>
+  <data name="DecodingErrorForPowerShellStateInfo" xml:space="preserve">
+    <value>Error in decoding PowerShellStateInfo.</value>
+  </data>
+  <data name="CantCastPropertyToExpectedType" xml:space="preserve">
+    <value>Unexpected type of {0} property (expected {1}, got {2}).</value>
+  </data>
+  <data name="CantCastRemotingDataToPSObject" xml:space="preserve">
+    <value>Unexpected type of remoting data (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastCommandToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command (expected PSObject, got {0}).</value>
+  </data>
+  <data name="CantCastParameterToPSObject" xml:space="preserve">
+    <value>Unexpected type of encoded command parameter (expected PSObject, got {0}).</value>
+  </data>
+  <data name="NotEnoughHeaderForRemoteDataObject" xml:space="preserve">
+    <value>An error occurred while decoding data received from the remote computer. At least {0} bytes of data are required to decode a deserialized object that is received from a remote computer. This can happen if the fragments are not properly constructed by the remote computer, or if the data was corrupted or changed.</value>
+  </data>
+  <data name="RemotingDestinationNotForMe" xml:space="preserve">
+    <value>Received packet not destined for logged-on user: user = {0}, packet destination = {1}.</value>
+  </data>
+  <data name="ClientNegotiationTimeout" xml:space="preserve">
+    <value>The client negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientNegotiationFailed" xml:space="preserve">
+    <value>PowerShell client does not support the {0} {1} negotiated by the server. Make sure the server is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ClientNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the server failed. Make sure the server is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerRequestedToCloseSession" xml:space="preserve">
+    <value>The destination server has sent a request to close the session.</value>
+  </data>
+  <data name="ServerNegotiationFailed" xml:space="preserve">
+    <value>The server that is running PowerShell does not support the {0} {1} negotiated by the client computer. Verify that the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnNegotiation" xml:space="preserve">
+    <value>The server that is running PowerShell does not support connect operations on the {0} {1}  that is negotiated by the client computer. Make sure the client computer is compatible with the build {2} and the protocol version {3} of PowerShell.</value>
+  </data>
+  <data name="ServerConnectFailedOnInputValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the following information is not found or not valid: Client Capability information and Connect RunspacePool information.</value>
+  </data>
+  <data name="ServerConnectFailedOnServerStateValidation" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server has either not been started, or it is shutting down.</value>
+  </data>
+  <data name="ServerConnectFailedOnMismatchedRunspacePoolProperties" xml:space="preserve">
+    <value>The server that is running PowerShell cannot process the connect operation because the server runspace pool properties did not match the client computer specified properties.</value>
+  </data>
+  <data name="ServerNotFoundCapabilityProperties" xml:space="preserve">
+    <value>{0}. Negotiation with the client failed. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="ServerNegotiationTimeout" xml:space="preserve">
+    <value>The server negotiation timer has expired. The negotiation time-out interval is {0} milliseconds.</value>
+  </data>
+  <data name="ClientRequestedToCloseSession" xml:space="preserve">
+    <value>The client computer has sent a request to close the session.</value>
+  </data>
+  <data name="FatalErrorCausingClose" xml:space="preserve">
+    <value>An error has occurred which PowerShell cannot handle. A remote session might have ended.</value>
+  </data>
+  <data name="ClientKeyExchangeFailed" xml:space="preserve">
+    <value>The server did not respond with an encrypted session key within the specified time-out period.</value>
+  </data>
+  <data name="ServerKeyExchangeFailed" xml:space="preserve">
+    <value>The client did not respond with a public key within the specified time-out period.</value>
+  </data>
+  <data name="ConnectFailed" xml:space="preserve">
+    <value>Connection attempt failed.</value>
+  </data>
+  <data name="CloseIsCalled" xml:space="preserve">
+    <value>Attempting to close the session.</value>
+  </data>
+  <data name="ForceClosed" xml:space="preserve">
+    <value>PowerShell cannot close the remote session properly. The session is in an undefined state because it was not opened or connected after being disconnected. PowerShell will try to force the session to close on the local computer, but the session might not be closed on the remote computer. To close a remote session properly, first open it or connect it.</value>
+  </data>
+  <data name="CloseFailed" xml:space="preserve">
+    <value>Could not close the session.</value>
+  </data>
+  <data name="CloseCompleted" xml:space="preserve">
+    <value>The session is closed.</value>
+  </data>
+  <data name="UnsupportedWaitHandleType" xml:space="preserve">
+    <value>The Wait handle type "{0}" is not supported.</value>
+  </data>
+  <data name="ReceivedDataStreamIsNotStdout" xml:space="preserve">
+    <value>Received data has a stream ID index of "{0}". Only a Standard Output stream ID index of "0" is supported.</value>
+  </data>
+  <data name="StdInIsNotOpen" xml:space="preserve">
+    <value>The Standard Input handle is not open.</value>
+  </data>
+  <data name="NativeWriteFileFailed" xml:space="preserve">
+    <value>Native API call to WriteFile failed. Error code is {0}.</value>
+  </data>
+  <data name="NativeReadFileFailed" xml:space="preserve">
+    <value>Native API call to ReadFile failed. Error code is {0}.</value>
+  </data>
+  <data name="InvalidSchemeValue" xml:space="preserve">
+    <value>{0} is not a valid schema value. Valid values are "http" and "https".</value>
+  </data>
+  <data name="ClientReceiveFailed" xml:space="preserve">
+    <value>Client side receive call failed.</value>
+  </data>
+  <data name="ClientSendFailed" xml:space="preserve">
+    <value>Client side send call failed.</value>
+  </data>
+  <data name="CommandHandleIsNull" xml:space="preserve">
+    <value>The command handle returned from the WinRS API WSManRunShellCommand is null.</value>
+  </data>
+  <data name="StdInCannotBeSetToNoWait" xml:space="preserve">
+    <value>The Standard Input handle cannot be set to the 'no wait' state. The system error code is {0}.</value>
+  </data>
+  <data name="PortIsOutOfRange" xml:space="preserve">
+    <value>The port number {0} is not within the range of valid values. The range of valid values is between 1 and 65535.</value>
+  </data>
+  <data name="ServerProcessExited" xml:space="preserve">
+    <value>The server process has exited.</value>
+  </data>
+  <data name="CannotGetStdInHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Input handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdOutHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Output handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="CannotGetStdErrHandle" xml:space="preserve">
+    <value>The call to Windows API GetStdHandle to get the Standard Error handle resulted in an error code: {0}.</value>
+  </data>
+  <data name="ConnectExFailed" xml:space="preserve">
+    <value>Connecting to remote server {0} failed.</value>
+  </data>
+  <data name="ConnectExCallBackError" xml:space="preserve">
+    <value>Connecting to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="CloseExCallBackError" xml:space="preserve">
+    <value>Closing the remote server shell instance failed with the following error message : {0}</value>
+  </data>
+  <data name="SendExFailed" xml:space="preserve">
+    <value>Sending data to remote server {0} failed.</value>
+  </data>
+  <data name="SendExCallBackError" xml:space="preserve">
+    <value>Sending data to remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="ReceiveExFailed" xml:space="preserve">
+    <value>Receiving data from remote server {0} failed.</value>
+  </data>
+  <data name="ReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data from remote server {0} failed with the following error message: {1}</value>
+  </data>
+  <data name="RunShellCommandExFailed" xml:space="preserve">
+    <value>Starting a command on the remote server failed.</value>
+  </data>
+  <data name="RunShellCommandExCallBackError" xml:space="preserve">
+    <value>Starting a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellCommandExCallBackError" xml:space="preserve">
+    <value>Reconnecting to a command on the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="CommandSendExFailed" xml:space="preserve">
+    <value>Sending data to a remote command failed.</value>
+  </data>
+  <data name="CommandSendExCallBackError" xml:space="preserve">
+    <value>Sending data to a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="CommandReceiveExFailed" xml:space="preserve">
+    <value>Receiving data for a remote command failed.</value>
+  </data>
+  <data name="CommandReceiveExCallBackError" xml:space="preserve">
+    <value>Processing data for a remote command failed with the following error message: {0}</value>
+  </data>
+  <data name="GeneralError" xml:space="preserve">
+    <value>Error with error code {0} occurred while calling method {1}.</value>
+  </data>
+  <data name="TroubleShootingHelpTopic" xml:space="preserve">
+    <value>{0} For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="DisconnectShellExFailed" xml:space="preserve">
+    <value>Failed to disconnect from the remote server {0}.</value>
+  </data>
+  <data name="DisconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Disconnecting from the remote server failed with the following error message : {0}</value>
+  </data>
+  <data name="ReconnectShellExFailed" xml:space="preserve">
+    <value>Reconnecting to the remote server failed.</value>
+  </data>
+  <data name="ReconnectShellExCallBackErrr" xml:space="preserve">
+    <value>Reconnecting to the remote server {0} failed with the following error message : {1}</value>
+  </data>
+  <data name="IPCTransportConnectError" xml:space="preserve">
+    <value>Inter-process communication (IPC) transport does not support connect operations.</value>
+  </data>
+  <data name="NonExistentInitialSessionStateProvider" xml:space="preserve">
+    <value>An EndpointConfiguration with Id {0} does not exist on the remote server. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="InitialSessionStateNull" xml:space="preserve">
+    <value>The EndpointConfiguration with the {0} identifier is not in a valid initial session state on the remote computer. Contact your PowerShell administrator, or the owner or creator of the endpoint configuration.</value>
+  </data>
+  <data name="MandatoryValueNotPresent" xml:space="preserve">
+    <value>The mandatory value {0} is not specified for the {1} registry key.</value>
+  </data>
+  <data name="MandatoryValueNotInCorrectFormat" xml:space="preserve">
+    <value>The mandatory value {0} is not in the correct format for registry key {1}. The expected format is 'string'.</value>
+  </data>
+  <data name="StartupScriptNotCorrect" xml:space="preserve">
+    <value>"{0}" must specify a PowerShell script file that ends with extension ".ps1".</value>
+  </data>
+  <data name="DuplicateInitializationParameterFound" xml:space="preserve">
+    <value>The {0} parameter is already specified in the {1} section. Contact your administrator to make sure that {0} is specified only once.</value>
+  </data>
+  <data name="NoAttributesFoundForParamElement" xml:space="preserve">
+    <value>Expected "{0}" and "{1}" attributes in the "{2}" element.</value>
+  </data>
+  <data name="AssemblyLoadAttributesNotFound" xml:space="preserve">
+    <value>"{0}", "{1}" must be specified in the "{2}" section to dynamically load the assembly.</value>
+  </data>
+  <data name="UnableToLoadAssembly" xml:space="preserve">
+    <value>Unable to load the assembly "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="UnableToLoadType" xml:space="preserve">
+    <value>Unable to load the type "{0}" specified in the "{1}" section.</value>
+  </data>
+  <data name="TypeNeedsAssembly" xml:space="preserve">
+    <value>Both "{0}" and "{1}" must be specified in the "{2}" section.</value>
+  </data>
+  <data name="RedirectedURINotWellFormatted" xml:space="preserve">
+    <value>The destination "{0}" requested the connection to be redirected to "{1}". However "{1}" is not a well formatted URI.</value>
+  </data>
+  <data name="URIEndPointNotResolved" xml:space="preserve">
+    <value>{0}Redirect location reported: {1}.</value>
+  </data>
+  <data name="URIRedirectWarningToHost" xml:space="preserve">
+    <value>Your connection has been redirected to the following URI: "{0}"</value>
+  </data>
+  <data name="URIRedirectionReported" xml:space="preserve">
+    <value>{0} To automatically connect to the redirected URI, verify the "{1}" property of the session preference variable "{2}", and use the "{3}" parameter on the cmdlet.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumClient" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote server exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumClient" xml:space="preserve">
+    <value>The total data received from the remote server exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="ReceivedObjectSizeExceededMaximumServer" xml:space="preserve">
+    <value>The current deserialized object size of the data received from the remote client computer exceeded the allowed maximum object size. The current deserialized object size is {0}. The allowed maximum object size is {1}.</value>
+  </data>
+  <data name="ReceivedDataSizeExceededMaximumServer" xml:space="preserve">
+    <value>The total data received from the remote client exceeded the allowed maximum. The allowed maximum is {0}.</value>
+  </data>
+  <data name="StartupScriptThrewTerminatingError" xml:space="preserve">
+    <value>Running startup script threw an error: {0}.</value>
+  </data>
+  <data name="RemoteRunspaceInfoHasDuplicates" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have duplicates.</value>
+  </data>
+  <data name="RemoteRunspaceInfoLimitExceeded" xml:space="preserve">
+    <value>Specified RemoteRunspaceInfo objects have exceeded the maximum allowable limit.</value>
+  </data>
+  <data name="RemoteRunspaceOpenUnknownState" xml:space="preserve">
+    <value>Opening the remote session failed with an unexpected state. State {0}.</value>
+  </data>
+  <data name="UriSpecifiedNotValid" xml:space="preserve">
+    <value>Specified Uri {0} is not valid.</value>
+  </data>
+  <data name="RemoteRunspaceClosed" xml:space="preserve">
+    <value>Remote Session closed for Uri {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedComputer" xml:space="preserve">
+    <value>Remote session is not available for ComputerName {0}.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Remote session is not available for {0}.</value>
+  </data>
+  <data name="StopPSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with the job that has an ID of "{1}".</value>
+  </data>
+  <data name="NewRunspaceAmbiguousAuthentication" xml:space="preserve">
+    <value>A {0} cannot be specified when {1} is specified.</value>
+  </data>
+  <data name="WildCardErrorFilePathParameter" xml:space="preserve">
+    <value>Wildcard characters are not supported for the FilePath parameter. Specify a path without wildcard characters.</value>
+  </data>
+  <data name="FilePathNotFromFileSystemProvider" xml:space="preserve">
+    <value>The path specified as the value of the FilePath parameter is not from the FileSystem provider.</value>
+  </data>
+  <data name="FilePathShouldPS1Extension" xml:space="preserve">
+    <value>The value of the FilePath parameter must be a PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.</value>
+  </data>
+  <data name="InvalidComputerName" xml:space="preserve">
+    <value>One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.</value>
+  </data>
+  <data name="InvalidJobStateGeneral" xml:space="preserve">
+    <value>The state of the current job instance is not valid for this operation.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotFound" xml:space="preserve">
+    <value>The command cannot find the job because the job name {0} was not found. Verify the value of the Name parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the instance identifier {0}. Verify the value of the InstanceId parameter, and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotFound" xml:space="preserve">
+    <value>The command cannot find a job with the job ID {0}. Verify the value of the Id parameter and then try the command again.</value>
+  </data>
+  <data name="JobWithSpecifiedNameNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the name {1} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedSessionIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} because the job is not finished. To remove the job, first stop the job, or use the Force parameter.</value>
+  </data>
+  <data name="JobWithSpecifiedInstanceIdNotCompleted" xml:space="preserve">
+    <value>The command cannot remove the job with the job ID {0} and the instance identifier {1} because the job is not finished. To remove the job, first stop the job or use the Force parameter.</value>
+  </data>
+  <data name="RemovePSJobWhatIfTarget" xml:space="preserve">
+    <value>Remote Command: {0}, associated with a job that has an ID of "{1}".</value>
+  </data>
+  <data name="ComputerNameParamNotSupported" xml:space="preserve">
+    <value>The command cannot retrieve the jobs of the specified computers. The ComputerName parameter can be used only with jobs created by using PowerShell remoting.</value>
+  </data>
+  <data name="RunspaceParamNotSupported" xml:space="preserve">
+    <value>The Session parameter can be used only with PSRemotingJob objects.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedName" xml:space="preserve">
+    <value>The remote session with the name {0}  is not available.</value>
+  </data>
+  <data name="RemoteRunspaceNotAvailableForSpecifiedSessionId" xml:space="preserve">
+    <value>The remote session with the session ID {0} is not available.</value>
+  </data>
+  <data name="ItemNotFoundInRepository" xml:space="preserve">
+    <value>{0} does not contain an item with ID of {1}.</value>
+  </data>
+  <data name="CannotRemoveJob" xml:space="preserve">
+    <value>The command cannot remove the job because it does not exist or because it is a child job. Child jobs can be removed only by removing the parent job.</value>
+  </data>
+  <data name="CSCDoubleParameterOutOfRange" xml:space="preserve">
+    <value>{0} is not a valid value for the parameter {1}. The value must be greater than or equal to 0.</value>
+  </data>
+  <data name="ProxyAmbiguousAuthentication" xml:space="preserve">
+    <value>{0} cannot be specified as a proxy authentication mechanism. Only {1},{2} or {3} are supported for proxy authentication.</value>
+  </data>
+  <data name="ProxyCredentialWithoutAccess" xml:space="preserve">
+    <value>Proxy credentials cannot be specified when using the following proxy access type: {0}. Either specify a different access type, or do not specify proxy credentials.</value>
+  </data>
+  <data name="WrongSessionOptionValue" xml:space="preserve">
+    <value>A {0} value must be specified for session option {1}.</value>
+  </data>
+  <data name="PushedRunspaceMustBeOpen" xml:space="preserve">
+    <value>Session must be open.</value>
+  </data>
+  <data name="HostDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>The host does not support Enter-PSSession and Exit-PSSession.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedRunspaceId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedSessionId" xml:space="preserve">
+    <value>Multiple matches found for session ID {0}.</value>
+  </data>
+  <data name="RemoteRunspaceHasMultipleMatchesForSpecifiedName" xml:space="preserve">
+    <value>Multiple matches found for name {0}.</value>
+  </data>
+  <data name="RemoteRunspaceDoesNotSupportPushRunspace" xml:space="preserve">
+    <value>Enter-PSSession failed because the remote session does not provide required commands.</value>
+  </data>
+  <data name="HostInNestedPrompt" xml:space="preserve">
+    <value>You cannot run Enter-PSSession from a nested prompt.</value>
+  </data>
+  <data name="WsmanMaxRedirectionCountVariableDescription" xml:space="preserve">
+    <value>The maximum number of WS-Man URI redirections to allow while connecting to a remote computer</value>
+  </data>
+  <data name="PSDefaultSessionOptionDescription" xml:space="preserve">
+    <value>Default session options for new remote sessions</value>
+  </data>
+  <data name="PSSessionConfigurationName" xml:space="preserve">
+    <value>Name of the session configuration which will be loaded on the remote computer</value>
+  </data>
+  <data name="PSSessionAppName" xml:space="preserve">
+    <value>AppName where the remote connection will be established</value>
+  </data>
+  <data name="PSSenderInfoDescription" xml:space="preserve">
+    <value>Contains information about the remote user starting the remote session. This variable is available only from a remote session.</value>
+  </data>
+  <data name="CSCmdsTypeNeedsAssembly" xml:space="preserve">
+    <value>Either "{0}" and "{1}" must both be specified, or neither must not be specified.</value>
+  </data>
+  <data name="CSCmdsShellNotFound" xml:space="preserve">
+    <value>Session configuration "{0}" was not found.</value>
+  </data>
+  <data name="CSCmdsShellNotPowerShellBased" xml:space="preserve">
+    <value>Session configuration "{0}" is not a PowerShell-based shell.</value>
+  </data>
+  <data name="CSCmdsPowerShellCoreShellNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a PowerShell-based shell. Please use PowerShell 6+ to modify it.</value>
+  </data>
+  <data name="CSCmdsWindowsPowerShellCoreNotModifiable" xml:space="preserve">
+    <value>Session configuration "{0}" is a Windows PowerShell-based shell. Please use Windows PowerShell to modify it.</value>
+  </data>
+  <data name="CustomShellNotFound" xml:space="preserve">
+    <value>No session configuration matches criteria "{0}".</value>
+  </data>
+  <data name="CSShouldProcessAction" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="CSShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="CSShouldProcessTargetAdminEnable" xml:space="preserve">
+    <value>Name: {0}. This lets administrators remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="NcsCannotDeleteFile" xml:space="preserve">
+    <value>Cannot delete temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotDeleteFileAfterInstall" xml:space="preserve">
+    <value>The new shell was successfully registered, but PowerShell cannot delete the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsCannotWritePluginContent" xml:space="preserve">
+    <value>Cannot write the shell configuration data into the temporary file {0}. Reason for failure: {1}.</value>
+  </data>
+  <data name="NcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to create a new session configuration.</value>
+  </data>
+  <data name="NcsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="RcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to remove a session configuration.</value>
+  </data>
+  <data name="GcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to get PowerShell-based session configurations.</value>
+  </data>
+  <data name="ScsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to update the session configuration properties.</value>
+  </data>
+  <data name="ScsShouldProcessTargetSDDL" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}</value>
+  </data>
+  <data name="EcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to enable the session configuration.</value>
+  </data>
+  <data name="EcsWSManQCCaption" xml:space="preserve">
+    <value>WinRM Quick Configuration</value>
+  </data>
+  <data name="EcsWSManQCQuery" xml:space="preserve">
+    <value>Running command "{0}" to enable remote management of this computer by using the Windows Remote Management (WinRM) service.
+ This includes:
+    1. Starting or restarting (if already started) the WinRM service
+    2. Setting the WinRM service startup type to Automatic
+    3. Creating a listener to accept requests on any IP address
+    4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).
+
+Do you want to continue?</value>
+  </data>
+  <data name="EcsWSManShouldProcessDesc" xml:space="preserve">
+    <value>Performing operation "{0}".</value>
+  </data>
+  <data name="EcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This lets selected users remotely run PowerShell commands on this computer.</value>
+  </data>
+  <data name="DcsScriptMessageV" xml:space="preserve">
+    <value>Running command "{0}" to disable the session configuration.</value>
+  </data>
+  <data name="DcsShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies access to this session configuration for everyone.</value>
+  </data>
+  <data name="DcsWarningMessage" xml:space="preserve">
+    <value>Disabling the session configurations does not undo all the changes made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You might have to manually undo the changes by following these steps:
+    1. Stop and disable the WinRM service.
+    2. Delete the listener that accepts requests on any IP address.
+    3. Disable the firewall exceptions for WS-Management communications.
+    4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts remote access to members of the Administrators group on the computer.</value>
+  </data>
+  <data name="EDcsRequiresElevation" xml:space="preserve">
+    <value>Access is denied. To run this cmdlet, start PowerShell with the "Run as administrator" option.</value>
+  </data>
+  <data name="RestartWSManServiceMessageV" xml:space="preserve">
+    <value>Restarting WinRM service</value>
+  </data>
+  <data name="RestartWSManServiceAction" xml:space="preserve">
+    <value>"Restart-Service"</value>
+  </data>
+  <data name="RestartWSManServiceTarget" xml:space="preserve">
+    <value>Name: {0}</value>
+  </data>
+  <data name="RestartWSManRequiredShowUI" xml:space="preserve">
+    <value>The WinRM service must be restarted before a UI can be displayed for the SecurityDescriptor selection. Restart the WinRM service, and then run the following command: "{0}"</value>
+  </data>
+  <data name="ERemotingCaption" xml:space="preserve">
+    <value>Registering session configuration</value>
+  </data>
+  <data name="ERemotingQuery" xml:space="preserve">
+    <value>The session configuration "{0}" was not found. Running command "{1}" to create the "{0}" session configuration. Running this command restarts the WinRM service.</value>
+  </data>
+  <data name="ShowUIAndSDDLCannotExist" xml:space="preserve">
+    <value>"{0}" and "{1}" parameters cannot be specified together. Specify either "{0}" or  "{1}" parameter.</value>
+  </data>
+  <data name="RestartWinRMMessage" xml:space="preserve">
+    <value>This operation might restart the WinRM service. Do you want to continue?</value>
+  </data>
+  <data name="IPCUnknownNodeType" xml:space="preserve">
+    <value>Cannot process an element with node type "{0}". Only {1} and {2} node types are supported.</value>
+  </data>
+  <data name="IPCInsufficientDataforElement" xml:space="preserve">
+    <value>Not enough data is available to process the {0} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForDataElement" xml:space="preserve">
+    <value>Expected only two attributes with the names "{0}" and "{1}" in the {2} element.</value>
+  </data>
+  <data name="IPCOnlyTextExpectedInDataElement" xml:space="preserve">
+    <value>Node type "{0}" is unknown in the {1} element. Only the "{2}" node type is expected in the {1} element.</value>
+  </data>
+  <data name="IPCWrongAttributeCountForElement" xml:space="preserve">
+    <value>Expected only one attribute with the name "{0}" in the {1} element.</value>
+  </data>
+  <data name="IPCUnknownElementReceived" xml:space="preserve">
+    <value>An unknown element "{0}" was received. This can happen if the remote process closed or ended abnormally.</value>
+  </data>
+  <data name="IPCSupportsOnlyDefaultAuth" xml:space="preserve">
+    <value>The specified authentication mechanism "{0}" is not supported. Only "{1}" is supported for this operation.</value>
+  </data>
+  <data name="IPCPwshExecutableNotFound" xml:space="preserve">
+    <value>The pwsh executable cannot be found at "{0}".
+Note that 'Start-Job' is not supported by design in scenarios where PowerShell is being hosted in other applications. Instead, usage of the 'ThreadJob' module is recommended in such scenarios.</value>
+  </data>
+  <data name="RunAs32NotSupported" xml:space="preserve">
+    <value>Cannot start a 32-bit 'pwsh' process from the 64-bit 'pwsh' installation. Install the 32-bit 'pwsh' if you need to run PowerShell in a 32-bit process.</value>
+  </data>
+  <data name="IPCServerProcessReportedError" xml:space="preserve">
+    <value>The background process reported an error with the following message: {0}.</value>
+  </data>
+  <data name="IPCServerProcessExited" xml:space="preserve">
+    <value>The background process closed or ended abnormally: {0}.</value>
+  </data>
+  <data name="IPCErrorProcessingServerData" xml:space="preserve">
+    <value>There is an error processing data from the background process. Error reported: {0}.</value>
+  </data>
+  <data name="IPCUnknownCommandGuid" xml:space="preserve">
+    <value>Data for an inactive command with the identifier {0} was received. Received data: {1}.</value>
+  </data>
+  <data name="IPCNoSignalForSession" xml:space="preserve">
+    <value>A {0} message to a session is not supported. A {0} message can be sent only to a command.</value>
+  </data>
+  <data name="IPCSignalTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a signal operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCCloseTimedOut" xml:space="preserve">
+    <value>The client did not receive a response for a Close operation in the specified time interval. This can happen when a command is not responding to a Stop message in a timely manner.</value>
+  </data>
+  <data name="IPCExceptionLaunchingProcess" xml:space="preserve">
+    <value>An error occurred while starting the background process. Error reported: {0}.</value>
+  </data>
+  <data name="ThrottlingJobChildAlreadyRunning" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method accepts only child jobs in the NotStarted state.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="NotStarted"}</comment>
+  </data>
+  <data name="ThrottlingJobChildAddedAfterEndOfChildJobs" xml:space="preserve">
+    <value>The ThrottlingJob.AddChildJob method cannot be called after a call to the ThrottlingJob.EndOfChildJobs method.</value>
+    <comment>{StrContains="ThrottlingJob.AddChildJob"}
+{StrContains="ThrottlingJob.EndOfChildJobs"}</comment>
+  </data>
+  <data name="ThrottlingJobStatusMessage" xml:space="preserve">
+    <value>{0}/{1} completed</value>
+    <comment>{0} is a placeholder for a number of completed child jobs
+{1} is a placeholder for a total number of child jobs</comment>
+  </data>
+  <data name="NestedPipelineMissingRunspace" xml:space="preserve">
+    <value>Invoking a nested pipeline requires a valid runspace.</value>
+  </data>
+  <data name="JobSourceAdapterError" xml:space="preserve">
+    <value>A {1} job source adapter threw an exception with the following message: {0}</value>
+  </data>
+  <data name="PSVersionParameterOutOfRange" xml:space="preserve">
+    <value>The value {0} is not valid for the {1} parameter. The only allowed value is 5.1.</value>
+  </data>
+  <data name="BlockCannotBeUsedWithKeep" xml:space="preserve">
+    <value>The Wait and Keep parameters cannot be used together in the same command.</value>
+  </data>
+  <data name="WriteEventsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The WriteEvents parameter cannot be used without the Wait parameter.</value>
+  </data>
+  <data name="PowerShellVersionNotSupported" xml:space="preserve">
+    <value>PowerShell remoting endpoint versioning is not supported on PowerShell 7+.</value>
+  </data>
+  <data name="JobManagerRegistrationConstructorError" xml:space="preserve">
+    <value>The following type cannot be instantiated because its constructor is not public: {0}.</value>
+  </data>
+  <data name="JobSourceAdapterNotFound" xml:space="preserve">
+    <value>The job operation (Create, Get, or Remove) could not be performed because the JobSourceAdapter type specified in the JobDefinition is not registered. Register the JobSourceAdapter type either by using an explicit call, or by calling the Import-Module cmdlet, and then specifying an assembly.</value>
+  </data>
+  <data name="NewJobSpecificationError" xml:space="preserve">
+    <value>The job could not be created because the JobInvocationInfo does not contain a JobDefinition. Start the JobInvocationInfo with a JobDefinition.</value>
+  </data>
+  <data name="InvalidJobStateSpecific" xml:space="preserve">
+    <value>The state of the current job instance is {0}. This state is not valid for the attempted operation. {1}</value>
+  </data>
+  <data name="JobConnectFailed" xml:space="preserve">
+    <value>Unable to connect job "{0}" to the remote server.</value>
+  </data>
+  <data name="RunspaceDisconnectFailed" xml:space="preserve">
+    <value>The Disconnect-PSSession operation failed for runspace Id = {0}.</value>
+  </data>
+  <data name="RunspaceConnectFailed" xml:space="preserve">
+    <value>The connect operation failed for session {0}. The Runspace state is {1} instead of Opened.</value>
+  </data>
+  <data name="RunspaceQueryFailed" xml:space="preserve">
+    <value>The Disconnected PSSession query failed for computer "{0}".</value>
+  </data>
+  <data name="RunspaceCannotBeConnected" xml:space="preserve">
+    <value>Cannot connect PSSession "{0}", either because it is not in the Disconnected state, or it is not available for connection.</value>
+  </data>
+  <data name="RunspaceCannotBeConnectedForVMContainerSession" xml:space="preserve">
+    <value>Session connect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnected" xml:space="preserve">
+    <value>Cannot disconnect PSSession "{0}" because it is not in the Opened state.</value>
+  </data>
+  <data name="RunspaceCannotBeDisconnectedForVMContainerSession" xml:space="preserve">
+    <value>Session disconnect is not supported for PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="RunspaceCannotBeReceivedForVMContainerSession" xml:space="preserve">
+    <value>Receive-PSSession does not support PSSession "{0}" on target "{1}" because the target computer type is "{2}".</value>
+  </data>
+  <data name="JobActionInvalidWithNullChild" xml:space="preserve">
+    <value>The command cannot finish because the ChildJobs property contains a value that is not valid.</value>
+  </data>
+  <data name="JobSuspendNotSupported" xml:space="preserve">
+    <value>Cannot suspend the job that has an ID of {0}. Suspending jobs is not supported for some job types. For more information about support for suspending jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="JobResumeNotSupported" xml:space="preserve">
+    <value>Cannot resume the job that has an ID of {0}. Resuming jobs is not supported for some job types. For more information about support for resuming jobs, see the Help topic for the job type.</value>
+  </data>
+  <data name="AsJobAndDisconnectedError" xml:space="preserve">
+    <value>You cannot use the Invoke-Command cmdlet with both the AsJob and Disconnected parameters in the same command.</value>
+  </data>
+  <data name="QueryForRunspacesFailed" xml:space="preserve">
+    <value>The remote session query failed for {0} with the following error message: {1}</value>
+  </data>
+  <data name="JobIdNotYetAssigned" xml:space="preserve">
+    <value>Attempted to create a job with ID {0}. A job with this ID cannot be created now. Verify that the ID has already been assigned once on this computer.</value>
+  </data>
+  <data name="JobSessionIdLessThanOne" xml:space="preserve">
+    <value>Cannot create a job with an ID of {0}; this is not a valid ID. Provide an integer for the job ID that is greater than 0.</value>
+  </data>
+  <data name="JobIdentifierNull" xml:space="preserve">
+    <value>The JobIdentifier provided must not be null. Please provide a valid JobIdentifier.</value>
+  </data>
+  <data name="JobBlockedSoWaitJobCannotContinue" xml:space="preserve">
+    <value>The Wait-Job cmdlet cannot finish working, because one or more jobs are blocked waiting for user interaction.  Process interactive job output by using the Receive-Job cmdlet, and then try again.</value>
+  </data>
+  <data name="RemoveRunspaceNotConnected" xml:space="preserve">
+    <value>Remote session {0} could not be connected and could not be removed from the server. The client remote session object will be removed from the server, but the state of the remote session on the server is unknown.</value>
+  </data>
+  <data name="RunspaceDisconnectFailedWithReason" xml:space="preserve">
+    <value>Disconnect-PSSession operation failed for runspace Id = {0} for the following reason: {1}</value>
+  </data>
+  <data name="StopJobNotConnected" xml:space="preserve">
+    <value>Job "{0}" could not be connected to the server and so could not be stopped.</value>
+  </data>
+  <data name="SessionIdMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession with an InstanceId value of "{0}".</value>
+  </data>
+  <data name="SessionNameMatchFailed" xml:space="preserve">
+    <value>The command cannot find a PSSession that has the name "{0}".</value>
+  </data>
+  <data name="WinPERemotingNotSupported" xml:space="preserve">
+    <value>PowerShell remoting is not supported in the Windows Preinstallation Environment (WinPE).</value>
+  </data>
+  <data name="WinRMRequiresRestart" xml:space="preserve">
+    <value>Changes made by {0} cannot take effect until the WinRM service is restarted.</value>
+  </data>
+  <data name="WinRMRestartWarning" xml:space="preserve">
+    <value>{0} may need to restart the WinRM service if a configuration using this name has recently been unregistered, certain system data structures may still be cached. In that case, a restart of WinRM may be required.
+All WinRM sessions connected to PowerShell session configurations, such as Microsoft.PowerShell and session configurations that are created with the Register-PSSessionConfiguration cmdlet, are disconnected.</value>
+  </data>
+  <data name="WinRMForceRestartWarning" xml:space="preserve">
+    <value>You are running in a remote session and have selected the Force option which means the WinRM service may restart.If the WinRM service restarts then this remote session will be terminated and you will need to create a new session to continue</value>
+  </data>
+  <data name="JobSourceAdapterCannotSaveNullJob" xml:space="preserve">
+    <value>The job was null when trying to save identifiers. Specify a job to save its identifiers.</value>
+  </data>
+  <data name="NoPowerShellForJob" xml:space="preserve">
+    <value>A running command could not be found for this PSSession.</value>
+  </data>
+  <data name="NetFrameWorkV2NotInstalled" xml:space="preserve">
+    <value>The Microsoft .NET Framework 2.0, which is required for Windows PowerShell 2.0, is not installed. Install the .NET Framework 2.0 and retry.</value>
+  </data>
+  <data name="PipelineFailedWithoutReason" xml:space="preserve">
+    <value>The remote pipeline failed.</value>
+  </data>
+  <data name="PipelineFailedWithReason" xml:space="preserve">
+    <value>The remote pipeline failed for the following reason: {0}</value>
+  </data>
+  <data name="ResumeJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be resumed because the state was not valid for the operation.</value>
+  </data>
+  <data name="RemoteHostNullClientHost" xml:space="preserve">
+    <value>No client computer was specified for the remote runspace that is running a client-side method.</value>
+  </data>
+  <data name="DisableRemotingShouldProcessTarget" xml:space="preserve">
+    <value>Name: {0} SDDL: {1}. This denies remote access to this session configuration.</value>
+  </data>
+  <data name="SetEnabledFalseTarget" xml:space="preserve">
+    <value>Enabled: False. This configures the WS-Management service to deny the connection request.</value>
+  </data>
+  <data name="SetEnabledTrueTarget" xml:space="preserve">
+    <value>Enabled: True. This configures the WS-Management service to accept the connection request.</value>
+  </data>
+  <data name="DISCAliasDefinitionsComment" xml:space="preserve">
+    <value>Aliases to be defined when applied to a session</value>
+  </data>
+  <data name="DISCAssembliesToLoadComment" xml:space="preserve">
+    <value>Assemblies to load when applied to a session</value>
+  </data>
+  <data name="DISCAuthorComment" xml:space="preserve">
+    <value>Author of this document</value>
+  </data>
+  <data name="DISCCLRVersionComment" xml:space="preserve">
+    <value>Version of the CLR to use when applied to a session</value>
+  </data>
+  <data name="DISCCompanyNameComment" xml:space="preserve">
+    <value>Company associated with this document</value>
+  </data>
+  <data name="DISCCopyrightComment" xml:space="preserve">
+    <value>Copyright statement for this document</value>
+  </data>
+  <data name="DISCDescriptionComment" xml:space="preserve">
+    <value>Description of the functionality provided by these settings</value>
+  </data>
+  <data name="DISCEnvironmentVariablesComment" xml:space="preserve">
+    <value>Environment variables to define when applied to a session</value>
+  </data>
+  <data name="DISCExecutionPolicyComment" xml:space="preserve">
+    <value>Execution policy to apply when applied to a session</value>
+  </data>
+  <data name="DISCFormatsToProcessComment" xml:space="preserve">
+    <value>Format files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCFunctionDefinitionsComment" xml:space="preserve">
+    <value>Functions to define when applied to a session</value>
+  </data>
+  <data name="DISCGUIDComment" xml:space="preserve">
+    <value>ID used to uniquely identify this document</value>
+  </data>
+  <data name="DISCInitialSessionStateComment" xml:space="preserve">
+    <value>Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'</value>
+  </data>
+  <data name="DISCTranscriptDirectoryComment" xml:space="preserve">
+    <value>Directory to place session transcripts for this session configuration</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountComment" xml:space="preserve">
+    <value>Whether to run this session configuration as the machine's (virtual) administrator account</value>
+  </data>
+  <data name="DISCLanguageModeComment" xml:space="preserve">
+    <value>Language mode to apply when applied to a session. Can be 'NoLanguage' (recommended), 'RestrictedLanguage', 'ConstrainedLanguage', or 'FullLanguage'</value>
+  </data>
+  <data name="DISCModulesToImportComment" xml:space="preserve">
+    <value>Modules to import when applied to a session</value>
+  </data>
+  <data name="DISCPowerShellVersionComment" xml:space="preserve">
+    <value>Version of the PowerShell engine to use when applied to a session</value>
+  </data>
+  <data name="DISCProcessorArchitectureComment" xml:space="preserve">
+    <value>Processor architecture to use when applied to a session</value>
+  </data>
+  <data name="DISCSchemaVersionComment" xml:space="preserve">
+    <value>Version number of the schema used for this document</value>
+  </data>
+  <data name="DISCScriptsToProcessComment" xml:space="preserve">
+    <value>Scripts to run when applied to a session</value>
+  </data>
+  <data name="DISCTypesToAddComment" xml:space="preserve">
+    <value>Types to add when applied to a session</value>
+  </data>
+  <data name="DISCTypesToProcessComment" xml:space="preserve">
+    <value>Type files (.ps1xml) to load when applied to a session</value>
+  </data>
+  <data name="DISCVariableDefinitionsComment" xml:space="preserve">
+    <value>Variables to define when applied to a session</value>
+  </data>
+  <data name="DISCRoleDefinitionsComment" xml:space="preserve">
+    <value>User roles (security groups), and the role capabilities that should be applied to them when applied to a session</value>
+  </data>
+  <data name="DISCVisibleAliasesComment" xml:space="preserve">
+    <value>Aliases to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleCmdletsComment" xml:space="preserve">
+    <value>Cmdlets to make visible when applied to a session</value>
+  </data>
+  <data name="DISCCommandModificationSyntax" xml:space="preserve">
+    <value>Could not parse visible command definition for '{0}'. The visible command definition must be a hashtable with the keys of 'Name' and 'Parameters'. The value of the 'Parameters' key must be a collection of hashtables with the keys 'Name', and optionally either 'ValidateSet' or 'ValidatePattern'.</value>
+  </data>
+  <data name="DISCVisibleFunctionsComment" xml:space="preserve">
+    <value>Functions to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleProvidersComment" xml:space="preserve">
+    <value>Providers to make visible when applied to a session</value>
+  </data>
+  <data name="DISCVisibleExternalCommandsComment" xml:space="preserve">
+    <value>External commands (scripts and applications) to make visible when applied to a session</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFilePath" xml:space="preserve">
+    <value>PSSession Configuration file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.pssc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFilePath" xml:space="preserve">
+    <value>Role Capability file path '{0}' is not valid. The path argument must resolve to a single file in the file system with a '.psrc' extension. Please fix the path specification and try again.</value>
+  </data>
+  <data name="InvalidRoleEntry" xml:space="preserve">
+    <value>The 'Roles' entry must be a hashtable, but was a {0}.</value>
+  </data>
+  <data name="InvalidRoleValue" xml:space="preserve">
+    <value>Could not convert the value of the '{0}' role entry to a hashtable. The 'Roles' entry must be a hashtable with group names for keys, where the value associated with each key is another hashtable of session configuration properties for that role.</value>
+  </data>
+  <data name="CouldNotFindRoleCapability" xml:space="preserve">
+    <value>Could not find the role capability, '{0}'. The role capability must be a file named '{1}' within a 'RoleCapabilities' directory in a module in the current module path.</value>
+  </data>
+  <data name="InvalidRegisterPSSessionConfigurationModulePath" xml:space="preserve">
+    <value>Cannot find module path to import. The value of the ModulesToImport parameter {0} does not exist or is not a module directory. Correct the value and try the command again.</value>
+  </data>
+  <data name="PSSessionConfigurationFileNotFound" xml:space="preserve">
+    <value>The specified configuration file '{0}' was not loaded because no valid configuration file was found.</value>
+  </data>
+  <data name="RCAutoDisconnected" xml:space="preserve">
+    <value>Computer {0} has been successfully disconnected.</value>
+  </data>
+  <data name="RCAutoDisconnectingWarning" xml:space="preserve">
+    <value>The reconnection attempt to {0} failed. Attempting to disconnect the session...</value>
+  </data>
+  <data name="RCConnectionRetryAttempt" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCInternalError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the attempt to reconnect has failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCNetworkFailureDetected" xml:space="preserve">
+    <value>The network connection to {0} has been interrupted. Attempting to reconnect for up to {1} minutes...</value>
+  </data>
+  <data name="RCReconnectSucceeded" xml:space="preserve">
+    <value>The network connection to {0} has been restored.</value>
+  </data>
+  <data name="AuthenticationMechanismRequiresCredential" xml:space="preserve">
+    <value>{0} authentication requires an explicit user name and password.  Specify the user name and password by using the -Credential parameter and try the command again.</value>
+  </data>
+  <data name="BasicAuthOverHttpNotSupported" xml:space="preserve">
+    <value>Basic authentication is not supported over HTTP on Unix.</value>
+  </data>
+  <data name="StartJobDefinitionNotFound1" xml:space="preserve">
+    <value>Cannot find a scheduled job with name {0}.</value>
+    <comment>{0} is the job definition name</comment>
+  </data>
+  <data name="StartJobManyDefNameMatches" xml:space="preserve">
+    <value>More than one job definition was found with name {0}. Try including the -DefinitionType parameter to Start-Job in order to narrow the search for the job definition to a single job source adapter.</value>
+  </data>
+  <data name="DISCMissingSchemaVersion" xml:space="preserve">
+    <value>The member 'SchemaVersion' is not present in the configuration file. This member must exist and be assigned a version number of the form 'n.n.n.n'. Please add the missing member to the file {0}.</value>
+  </data>
+  <data name="DISCTypeMustBeString" xml:space="preserve">
+    <value>The member '{0}' must be a string. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeStringArray" xml:space="preserve">
+    <value>The member '{0}' must be a string array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtable" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be a hashtable array. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCInvalidKey" xml:space="preserve">
+    <value>The member '{0}' is not a valid key. Please change the member to a valid key in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeValidEnum" xml:space="preserve">
+    <value>The member '{0}' must be a valid enumeration type "{1}". Valid enumeration values are "{2}". Change the member to the correct type in the file {3}.</value>
+  </data>
+  <data name="DISCErrorParsingConfigFile" xml:space="preserve">
+    <value>Error parsing configuration file {0} with the following message: {1}</value>
+  </data>
+  <data name="WriteJobInResultsCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -WriteJobInResults parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="DISCPathsMustBeAbsolute" xml:space="preserve">
+    <value>The member '{0}' is not an absolute path {1}. Change the member to an absolute path in the file {2}.</value>
+  </data>
+  <data name="DISCTypeContainsInvalidKey" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' is not valid. Change the key in the file {2}.</value>
+  </data>
+  <data name="DISCTypeMustContainKey" xml:space="preserve">
+    <value>The member '{0}' must contain the required key '{1}'. Add the require key to the file {2}.</value>
+  </data>
+  <data name="DISCInvalidExtension" xml:space="preserve">
+    <value>The key '{0}' contains an extension {1} that is not valid. Specify an extension from the following list: {{{2}}}.</value>
+  </data>
+  <data name="DISCKeyMustBeScriptBlock" xml:space="preserve">
+    <value>The key '{0}' in the member '{1}' must be a script block. Change the key to the correct type in the file {2}.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFile" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again.</value>
+  </data>
+  <data name="RCProgressActivity" xml:space="preserve">
+    <value>Network connection interrupted</value>
+  </data>
+  <data name="RCProgressStatus" xml:space="preserve">
+    <value>Attempting to reconnect to {0} ...</value>
+  </data>
+  <data name="RCDisconnectedJob" xml:space="preserve">
+    <value>Job {0} has been created for reconnection.</value>
+  </data>
+  <data name="RCDisconnectSession" xml:space="preserve">
+    <value>Session {0} with instance ID {1} on computer {2} has been successfully disconnected.</value>
+  </data>
+  <data name="RCDisconnectSessionCreated" xml:space="preserve">
+    <value>Session {0} with instance ID {1} has been created for reconnection.</value>
+  </data>
+  <data name="SessionNameWithoutInvokeDisconnected" xml:space="preserve">
+    <value>The SessionName parameter can only be used with the Disconnected switch parameter.</value>
+  </data>
+  <data name="SessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect the PSSession.</value>
+  </data>
+  <data name="VMSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target virtual machine.</value>
+  </data>
+  <data name="ContainerSessionConnectFailed" xml:space="preserve">
+    <value>A failure occurred while attempting to connect to the target container.</value>
+  </data>
+  <data name="SessionNotAvailableForConnection" xml:space="preserve">
+    <value>The PSSession is in a disconnected state and is not available for connection.</value>
+  </data>
+  <data name="HyperVModuleNotAvailable" xml:space="preserve">
+    <value>The Hyper-V Module for PowerShell is not available on this machine.</value>
+  </data>
+  <data name="CannotCreateProcessInContainer" xml:space="preserve">
+    <value>Failed to launch PowerShell process ({1}) inside container with id {0} with error: {2}.</value>
+  </data>
+  <data name="ContainersFeatureNotEnabled" xml:space="preserve">
+    <value>The Containers feature may not be enabled on this machine.</value>
+  </data>
+  <data name="CannotTerminateProcessInContainer" xml:space="preserve">
+    <value>Failed to terminate PowerShell process with id {0} inside container with id {1}.</value>
+  </data>
+  <data name="InvalidContainerId" xml:space="preserve">
+    <value>The input ContainerId {0} does not exist, or the corresponding container is not running.</value>
+  </data>
+  <data name="InvalidVMId" xml:space="preserve">
+    <value>The input VMId parameter does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMIdNotSingle" xml:space="preserve">
+    <value>The input VMId {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameNoVM" xml:space="preserve">
+    <value>The input VMName parameter does not resolve to any virtual machine.</value>
+  </data>
+  <data name="InvalidVMNameMultipleVM" xml:space="preserve">
+    <value>The input VMName parameter resolves to multiple virtual machines.</value>
+  </data>
+  <data name="InvalidVMNameNotSingle" xml:space="preserve">
+    <value>The input VMName {0} does not resolve to a single virtual machine.</value>
+  </data>
+  <data name="InvalidVMState" xml:space="preserve">
+    <value>The virtual machine {0} is not in running state.</value>
+  </data>
+  <data name="InvalidCredential" xml:space="preserve">
+    <value>The credential is invalid.</value>
+  </data>
+  <data name="InvalidUsername" xml:space="preserve">
+    <value>The input username cannot be empty.</value>
+  </data>
+  <data name="EnterPSSessionBrokenSession" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Retrieve the remote session using Get-PSSession -ComputerName {1} -InstanceId {2}.</value>
+  </data>
+  <data name="EnterPSSessionDisconnected" xml:space="preserve">
+    <value>Cannot enter session {0} because it is not in the disconnected state or is not available for connection. Reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RCAutoDisconnectingError" xml:space="preserve">
+    <value>Network connectivity to {0} has been lost and the reconnection attempt failed. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketClientConstructorSetSocketOptionFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketClient due to SetSocketOption failure.</value>
+  </data>
+  <data name="RemoteSessionHyperVSocketServerConstructorFailure" xml:space="preserve">
+    <value>Failed to create an instance of RemoteSessionHyperVSocketServer.</value>
+  </data>
+  <data name="StopCommandOnRetry" xml:space="preserve">
+    <value>Reconnection attempt canceled. Please repair the network connection and reconnect using Connect-PSSession or Receive-PSSession.</value>
+  </data>
+  <data name="SuspendJobInvalidJobState" xml:space="preserve">
+    <value>One or more jobs could not be suspended because the state was not valid for the operation.</value>
+  </data>
+  <data name="AutoRemoveCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -AutoRemoveJob parameter cannot be used without the -Wait parameter</value>
+  </data>
+  <data name="InvalidConfigurationName" xml:space="preserve">
+    <value>The WS-Management service cannot process the request. Cannot find the {0} session configuration in the WSMan: drive on the {1} computer. For more information, see the about_Remote_Troubleshooting Help topic.</value>
+  </data>
+  <data name="BadRunspaceTypeForJob" xml:space="preserve">
+    <value>A job could not be created from the {0} specification because the provided runspace is not a local runspace. Try again using a local runspace, or specify a RunspaceMode argument.</value>
+  </data>
+  <data name="CannotDisconnectSessionWithInvalidIdleTimeout" xml:space="preserve">
+    <value>The session {0} cannot be disconnected because the specified idle time-out value {1} (seconds) is either greater than the server maximum allowed {2} (seconds), or less than the minimum allowed {3} (seconds).  Specify an idle time-out value that is within the allowed range, and try again.</value>
+    <comment>{0} is a placeholder for the session name
+{1} is a placeholder for the provided idletimeout value
+{2} is a placeholder for the maximum allowed idletimeout value
+{3} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="InvalidIdleTimeoutOption" xml:space="preserve">
+    <value>The specified IdleTimeout session option {0} (seconds) is not a valid period.  Specify an IdleTimeout value that is greater than or equal to the minimum allowed {1} (seconds).</value>
+    <comment>{0} is a placeholder for the provided idletimeout
+{1} is a placeholder for the minimum allowed idletimeout value</comment>
+  </data>
+  <data name="DISCVisibilityAndAutoLoadingCannotBeBothSpecified" xml:space="preserve">
+    <value>The cmdlet "{0}" or the alias "{1}" cannot be present when "{2}","{3}","{4}" or "{5}" keys are specified in the session configuration file.</value>
+  </data>
+  <data name="InvalidConfigurationXMLAttribute" xml:space="preserve">
+    <value>"The transport option is not valid. Parameter "{0}" can be non-zero only if parameter "{1}" is set to true."</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArray" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements.</value>
+  </data>
+  <data name="DISCTypeMustBeStringOrHashtableArrayInFile" xml:space="preserve">
+    <value>The member '{0}' must be an array consisting of either string or hashtable elements. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotFSProvider" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' refers to a '{2}' provider path.  Change the path parameter to a file system path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path
+{2} is the path provider</comment>
+  </data>
+  <data name="StartJobDefinitionPathInvalidNotSingle" xml:space="preserve">
+    <value>Cannot retrieve the job definition '{0}' because path '{1}' resolves to multiple file paths.  Change the path parameter so that it is a single path.</value>
+    <comment>{0} is job definition name
+{1} is the user provided path</comment>
+  </data>
+  <data name="StartJobDefinitionNotFound2" xml:space="preserve">
+    <value>Cannot find a scheduled job with type {0} and name {1}.</value>
+    <comment>{0} is the job definition type and {1} is the job definition name.</comment>
+  </data>
+  <data name="StartJobWorkingDirectoryNotFound" xml:space="preserve">
+    <value>Cannot find the WorkingDirectory path {0}.</value>
+  </data>
+  <data name="CannotFindSessionForConnect" xml:space="preserve">
+    <value>Cannot connect to session {0}.  The session no longer exists on computer {1}.</value>
+    <comment>{0} is the session name that cannot be found.
+{1} is the computer name where the session was.</comment>
+  </data>
+  <data name="RunspaceConnectFailedWithMessage" xml:space="preserve">
+    <value>The connect operation failed for session {0} with the following error message: {1}</value>
+  </data>
+  <data name="ForceCannotBeUsedWithoutWait" xml:space="preserve">
+    <value>The -Force parameter cannot be used without the -Wait parameter.</value>
+  </data>
+  <data name="JobSuspendedDisconnectedWaitWithForce" xml:space="preserve">
+    <value>One or more jobs are in a suspended or disconnected state, and cannot continue without additional user input.  Specify the -Force parameter to continue to a completed, failed, or stopped state.</value>
+  </data>
+  <data name="RunAsSessionConfigurationSecurityWarning" xml:space="preserve">
+    <value>When RunAs is enabled in a PowerShell session configuration, the Windows security model cannot enforce a security boundary between different user sessions that are created by using this endpoint. Verify that the PowerShell runspace configuration is restricted to only the necessary set of cmdlets and capabilities.</value>
+  </data>
+  <data name="ForceSuspendJob" xml:space="preserve">
+    <value>The job was suspended successfully by adding the Force parameter.</value>
+  </data>
+  <data name="InvalidPSSessionConfigurationFileErrorProcessing" xml:space="preserve">
+    <value>The session configuration file {0} is not valid. Specify a valid session configuration file and try the command again. Error parsing configuration file: {1}.</value>
+  </data>
+  <data name="ErrorParsingTheKeyInPSSessionConfigurationFile" xml:space="preserve">
+    <value>Register-PSSessionConfiguration : The '{0}' key in the {1}. session configuration file contains a value that is not valid. Correct the file and try the command again. </value>
+  </data>
+  <data name="EndpointDoesNotSupportDisconnect" xml:space="preserve">
+    <value>Disconnected sessions are supported only when the remote computer is running PowerShell 3.0 or a later version of PowerShell.</value>
+  </data>
+  <data name="ThrottlingJobFlowControlMemoryWarning" xml:space="preserve">
+    <value>Memory usage of a cmdlet has exceeded a warning level. To avoid this situation, try one of the following: 1) Lower the rate at which CIM operations produce data (for example, by passing a low value to the ThrottleLimit parameter), 2) Increase the rate at which data is consumed by downstream cmdlets, or 3) Use the Invoke-Command cmdlet to run the whole pipeline on the server. The cmdlet that exceeded a warning level of memory usage was started by the following command line: {0}</value>
+  </data>
+  <data name="EnableNetworkAccessWarning" xml:space="preserve">
+    <value>PSSession {0} was created using the EnableNetworkAccess parameter and can only be reconnected from the local computer.</value>
+  </data>
+  <data name="CannotStartJobInconsistentLanguageMode" xml:space="preserve">
+    <value>Cannot start job. The language mode for this session is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotCreateRunspaceInconsistentState" xml:space="preserve">
+    <value>Cannot create runspace. The language mode for this configuration is incompatible with the system-wide language mode.</value>
+  </data>
+  <data name="CannotExitNestedPipeline" xml:space="preserve">
+    <value>Cannot exit a nested pipeline because the pipeline is not in the nested state.</value>
+  </data>
+  <data name="PowerShellInvokerInvalidState" xml:space="preserve">
+    <value>The PowerShell server session is not in a valid state for running nested commands.  No nested commands can be run in this session.</value>
+  </data>
+  <data name="CannotInvokeNestedCommandNestedCommandRunning" xml:space="preserve">
+    <value>Cannot invoke a nested command on the remote session because a nested command is already running.</value>
+  </data>
+  <data name="ServerSideNestedCommandInvokeFailed" xml:space="preserve">
+    <value>The remote session was unable to invoke command {0} with error: {1}.</value>
+  </data>
+  <data name="ReceivePSSessionInDebugMode" xml:space="preserve">
+    <value>The remote session command is currently stopped in the debugger.  Use the Enter-PSSession cmdlet to connect interactively to the remote session and automatically enter into the console debugger.</value>
+  </data>
+  <data name="RemoteDebuggingEndpointVersionError" xml:space="preserve">
+    <value>The remote session to which you are connected does not support remote debugging. You must connect to a remote computer that is running PowerShell 4.0 or greater.</value>
+  </data>
+  <data name="ICMInvalidSessionState" xml:space="preserve">
+    <value>Because the session state for session {0}, {1}, {2} is not equal to Open, you cannot run a command in the session.  The session state is {3}.</value>
+  </data>
+  <data name="ICMNoValidRunspaces" xml:space="preserve">
+    <value>No valid sessions were specified.  Ensure you provide valid sessions that are in the Opened state and are available to run commands.</value>
+  </data>
+  <data name="ICMInvalidSessionAvailability" xml:space="preserve">
+    <value>The session {0}, {1}, {2} is not available to run commands.  The session availability is {3}.</value>
+  </data>
+  <data name="JobActionInvalidWithNoChildJobs" xml:space="preserve">
+    <value>The command cannot run because the ChildJobs property is empty.</value>
+  </data>
+  <data name="CannotDebugJobNoHostDebugger" xml:space="preserve">
+    <value>The job cannot be debugged because there is no PowerShell host debugger available.  Make sure you are running this command in a host that supports debugging.</value>
+  </data>
+  <data name="CannotFindJobWithId" xml:space="preserve">
+    <value>Cannot find job with id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithInstanceId" xml:space="preserve">
+    <value>Cannot find job with Instance Id {0}.</value>
+  </data>
+  <data name="CannotFindJobWithName" xml:space="preserve">
+    <value>Cannot find job with name {0}.</value>
+  </data>
+  <data name="CannotDebugJobNoHostUI" xml:space="preserve">
+    <value>The job cannot be debugged because there is no host UI available.  Make sure you are running this command in a PowerShell host that implements PSHostUserInterface.</value>
+  </data>
+  <data name="CannotDebugJobInvalidDebuggerMode" xml:space="preserve">
+    <value>The job cannot be debugged because the host debugger mode is set to None or Default.  The host debugger mode must be LocalScript and/or RemoteScript.</value>
+  </data>
+  <data name="FoundMultipleJobsWithId" xml:space="preserve">
+    <value>Multiple jobs were found with Id {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="FoundMultipleJobsWithName" xml:space="preserve">
+    <value>Multiple jobs were found with the name {0}.  Debug-Job can debug only one job at a time.</value>
+  </data>
+  <data name="NamedPipeAlreadyListening" xml:space="preserve">
+    <value>The Named Pipe server listener used for process attach is already running.</value>
+  </data>
+  <data name="EnterPSHostProcessCantEnterSameProcess" xml:space="preserve">
+    <value>Enter-PSHostProcess does not support entering the same PowerShell session it is running in.</value>
+  </data>
+  <data name="EnterPSHostProcessMultipleProcessesFoundWithName" xml:space="preserve">
+    <value>Multiple processes were found with this name {0}. Use the process Id to specify a single process to enter.</value>
+  </data>
+  <data name="EnterPSHostProcessNoPowerShell" xml:space="preserve">
+    <value>Cannot enter process with Id '{0}' because it has not loaded the PowerShell engine or the named-pipe listener was disabled.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithId" xml:space="preserve">
+    <value>No process was found with Id: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoProcessFoundWithName" xml:space="preserve">
+    <value>No process was found with Name: {0}.</value>
+  </data>
+  <data name="EnterPSHostProcessNoNamedPipeFound" xml:space="preserve">
+    <value>No named pipe was found with CustomPipeName: {0}.</value>
+  </data>
+  <data name="CustomPipeNameTooLong" xml:space="preserve">
+    <value>Cannot process the command because the pipeName specified is too long. Pipe names on this platform can be up to {0} characters long. Your pipe name '{1}' is {2} characters.</value>
+  </data>
+  <data name="HostDoesNotSupportIASession" xml:space="preserve">
+    <value>The current host does not support the Enter-PSHostProcess cmdlet.</value>
+  </data>
+  <data name="NamedPipeTransportProcessEnded" xml:space="preserve">
+    <value>"The named pipe target process has ended."</value>
+  </data>
+  <data name="HyperVSocketTransportProcessEnded" xml:space="preserve">
+    <value>"The Hyper-V socket target process has ended."</value>
+  </data>
+  <data name="EnterPSHostProcessPrompt" xml:space="preserve">
+    <value>{0}[Process:{1}]: {2}</value>
+  </data>
+  <data name="EnterVMSessionPrompt" xml:space="preserve">
+    <value>{0}[{1}]: {2}</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToProcess" xml:space="preserve">
+    <value>Unable to connect to application domain name {0} of process {1}.  Error: {2}.</value>
+  </data>
+  <data name="EnterPSHostProcessCannotConnectToPipe" xml:space="preserve">
+    <value>Unable to connect to pipe with name {0}.  Error: {1}.</value>
+  </data>
+  <data name="WSManPluginConnectNoNegotiationData" xml:space="preserve">
+    <value>PowerShell plugin cannot process the Connect operation as required negotiation information is either missing or not complete.</value>
+  </data>
+  <data name="WSManPluginConnectOperationFailed" xml:space="preserve">
+    <value>PowerShell plugin failed to process to connect operation.</value>
+  </data>
+  <data name="WSManPluginContextNotFound" xml:space="preserve">
+    <value>The supplied plugin context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidArgSet" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while processing {0} arguments.</value>
+  </data>
+  <data name="WSManPluginInvalidCommandContext" xml:space="preserve">
+    <value>The supplied command context is not valid.</value>
+  </data>
+  <data name="WSManPluginInvalidInputDataType" xml:space="preserve">
+    <value>The supplied input data is not valid. Only input data of type {0} is supported.</value>
+  </data>
+  <data name="WSManPluginInvalidInputStream" xml:space="preserve">
+    <value>The supplied input stream is not valid. Only {0} is supported as input stream.</value>
+  </data>
+  <data name="WSManPluginInvalidOutputStream" xml:space="preserve">
+    <value>The supplied output stream set is not valid. Only {0} is supported as output stream.</value>
+  </data>
+  <data name="WSManPluginInvalidSenderDetails" xml:space="preserve">
+    <value>The supplied WSMAN_SENDER_DETAILS is not valid. Cannot process null WSMAN_SENDER_DETAILS.</value>
+  </data>
+  <data name="WSManPluginInvalidShellContext" xml:space="preserve">
+    <value>The supplied shell context is not valid.</value>
+  </data>
+  <data name="WSManPluginManagedException" xml:space="preserve">
+    <value>{0}</value>
+  </data>
+  <data name="WSManPluginNullInvalidInput" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullInvalidStreamSet" xml:space="preserve">
+    <value>NULL value is not allowed for input stream and output stream sets. {0} and {1} are the supported input and output streams.</value>
+  </data>
+  <data name="WSManPluginNullPluginContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginNullShellContext" xml:space="preserve">
+    <value>NULL value is not allowed for {0} with the plugin method {1}.</value>
+  </data>
+  <data name="WSManPluginOperationClose" xml:space="preserve">
+    <value>PowerShell plugin operation is shutting down. This may happen if the hosting service or application is shutting down.</value>
+  </data>
+  <data name="WSManPluginOptionNotUnderstood" xml:space="preserve">
+    <value>PowerShell plugin does not understand the option {0}. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotFound" xml:space="preserve">
+    <value>An option with name {0} is expected from the client. Make sure the client is compatible with the build {1} and the protocol version {2} of PowerShell.</value>
+  </data>
+  <data name="WSManPluginProtocolVersionNotMatch" xml:space="preserve">
+    <value>&lt;PSProtocolVersionError ServerProtocolVersion="{0}" ServerBuildVersion="{1}"&gt;Powershell plugin does not support the protocol version {2} requested by client.&lt;/PSProtocolVersionError&gt;</value>
+  </data>
+  <data name="WSManPluginReportContextFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error while reporting context to WSMan service.</value>
+  </data>
+  <data name="WSManPluginSessionCreationFailed" xml:space="preserve">
+    <value>Unable to create managed server session.</value>
+  </data>
+  <data name="WSManPluginShutdownRegistrationFailed" xml:space="preserve">
+    <value>Powershell plugin encountered a fatal error registering a wait handle for shutdown notification.</value>
+  </data>
+  <data name="ServerDriverRemoteHostAlreadyPushed" xml:space="preserve">
+    <value>Cannot enter Runspace because a Runspace is already pushed in this session.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNoDebuggerToPush" xml:space="preserve">
+    <value>Cannot enter Runspace because there is no server remote debugger available.</value>
+  </data>
+  <data name="ServerDriverRemoteHostNotRemoteRunspace" xml:space="preserve">
+    <value>Cannot enter Runspace because it is not a remote Runspace.</value>
+  </data>
+  <data name="RemoteTransportError" xml:space="preserve">
+    <value>Remote transport error: {0}</value>
+  </data>
+  <data name="CannotConnectContainerNamedPipe" xml:space="preserve">
+    <value>Unable to open pipe connection for PowerShell in container. Error code: {0}.</value>
+  </data>
+  <data name="CannotCreateNamedPipe" xml:space="preserve">
+    <value>Unable to create PowerShell IPC named pipe. Error code: {0}.</value>
+  </data>
+  <data name="ConnectNamedPipeTimeout" xml:space="preserve">
+    <value>Timeout expired before connection could be made to named pipe.</value>
+  </data>
+  <data name="WSManInitFailed" xml:space="preserve">
+    <value>WSMan Initialization failed with error code: {0}.</value>
+  </data>
+  <data name="NamedPipeServerCannotStart" xml:space="preserve">
+    <value>Unable to start named pipe server while in server mode.</value>
+  </data>
+  <data name="CouldNotResolveRoleDefinitionPrincipal" xml:space="preserve">
+    <value>Could not grant remote access to '{0}': '{1}'. The session configuration has been registered, but this group does not have access. To resolve this error, provide a valid group name and register the session configuration again.</value>
+  </data>
+  <data name="SessionConfigurationMustBeFileBased" xml:space="preserve">
+    <value>Could not get the session capabilities for the session configuration '{0}': this configuration was not registered with a session configuration file (.pssc), such as one created by the New-PSSessionConfigurationFile cmdlet.</value>
+  </data>
+  <data name="CouldNotResolveUsername" xml:space="preserve">
+    <value>Could not resolve username '{0}'. Verify the username and try again.</value>
+  </data>
+  <data name="DISCRunAsVirtualAccountGroupsComment" xml:space="preserve">
+    <value>Groups associated with machine's (virtual) administrator account</value>
+  </data>
+  <data name="CannotCreateConfiguredRunspace" xml:space="preserve">
+    <value>Cannot create or open the configuration session {0}.</value>
+  </data>
+  <data name="DISCEnforceInputParameterValidation" xml:space="preserve">
+    <value>Enforces script input parameter validation. This is automatically enabled when MountUserDrive is specified.</value>
+  </data>
+  <data name="DISCMountUserDriveComment" xml:space="preserve">
+    <value>Creates a 'User' PSDrive in the session for use with Copy-Item when File System provider is not visible.</value>
+  </data>
+  <data name="DISCTypeMustBeBoolean" xml:space="preserve">
+    <value>The member '{0}' must be a boolean. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="DISCTypeMustBeInteger" xml:space="preserve">
+    <value>The member '{0}' must be an integer. Change the member to the correct type in the file {1}.</value>
+  </data>
+  <data name="UserDriveProcessingThrewTerminatingError" xml:space="preserve">
+    <value>Processing the User drive threw an error {0}.</value>
+  </data>
+  <data name="DISCUserDriveMaxSizeComment" xml:space="preserve">
+    <value>Optional maximum size in bytes of user drive created with MountUserDrive parameter. Default maximum size for User drive is 50MB.</value>
+  </data>
+  <data name="UserDriveCannotGetFileSystemProvider" xml:space="preserve">
+    <value>Cannot find the file system provider.</value>
+  </data>
+  <data name="DISCGMSAComment" xml:space="preserve">
+    <value>Group managed service account name under which the configuration will run</value>
+  </data>
+  <data name="InvalidGMSAName" xml:space="preserve">
+    <value>Invalid Group Managed Service account name. Account name must be of the form 'DomainName\UserName'.</value>
+  </data>
+  <data name="DISCRequiredGroupsComment" xml:space="preserve">
+    <value>Group accounts for which membership is required to use the session.</value>
+  </data>
+  <data name="BadSDDLMismatchedParens" xml:space="preserve">
+    <value>Cannot parse sddl string because it contains mismatched parentheses: {0}.</value>
+  </data>
+  <data name="RequiredGroupsHashMultipleKeys" xml:space="preserve">
+    <value>RequiredGroups property hashtable must contain only a single key.</value>
+  </data>
+  <data name="RequiredGroupsNotHashTable" xml:space="preserve">
+    <value>The RequiredGroups property is not in a name/value pair hashtable format.  This must be a hashtable of the form (using PowerShell syntax): RequiredGroups = @{ Or = 'Administrators' }.</value>
+  </data>
+  <data name="UnknownGroupMembershipKey" xml:space="preserve">
+    <value>Unknown key in Required Groups configuration.  Required Groups hashtable can only contain 'And' and 'Or' hash keys for logical membership groupings.</value>
+  </data>
+  <data name="UnknownGroupMembershipValue" xml:space="preserve">
+    <value>Unknown value in Required Groups configuration.  Required Groups hashtable can only contain values that are either group names or another logical hashtable.</value>
+  </data>
+  <data name="RequiredGroupsMalformedACE" xml:space="preserve">
+    <value>Malformed ACE {0}.  Regular ACEs must have exactly 6 sections.</value>
+  </data>
+  <data name="InvalidUserDriveName" xml:space="preserve">
+    <value>Cannot create a session User Drive because the current user name contains invalid file path characters.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKey" xml:space="preserve">
+    <value>Invalid role capability key: {0}. Make sure the role capability name is spelled correctly and is a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleCapabilityKeyType" xml:space="preserve">
+    <value>Invalid role capability key type: {0}. Role capability keys must be strings that identify a valid session configuration property.</value>
+  </data>
+  <data name="InvalidRoleKeyType" xml:space="preserve">
+    <value>Invalid role key type: {0}. Role keys must be strings that identify a security group.</value>
+  </data>
+  <data name="RemotingErrorNoLogonSessionExist" xml:space="preserve">
+    <value> Other Possible Cause:
+  -The domain or computer name was not included with the specified credential, for example: DOMAIN\UserName or COMPUTER\UserName.</value>
+  </data>
+  <data name="CannotStartSSHClient" xml:space="preserve">
+    <value>Failed to start the SSH client process needed for the remoting connection with error: {0}.</value>
+  </data>
+  <data name="KeyFileNotFound" xml:space="preserve">
+    <value>The specified key file {0} was not found.</value>
+  </data>
+  <data name="SSHClientEndWithErrorMessage" xml:space="preserve">
+    <value>The SSH client session has ended with error message: {0}</value>
+  </data>
+  <data name="SSHClientConnectTimeout" xml:space="preserve">
+    <value>SSH connection attempt failed after time out: {0} seconds.</value>
+  </data>
+  <data name="SSHClientConnectProcessTerminated" xml:space="preserve">
+    <value>
+SSH client process terminated before connection could be established.</value>
+  </data>
+  <data name="MissingRequiredSSHParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable is missing the required ComputerName or HostName parameter.</value>
+  </data>
+  <data name="InvalidSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter name or element is null or empty.</value>
+  </data>
+  <data name="UnknownSSHConnectionParameter" xml:space="preserve">
+    <value>The provided SSHConnection hashtable parameter {0} is not supported.</value>
+  </data>
+  <data name="SSHConnectionDuplicateHostName" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a ComputerName and HostName parameter.  Only one can be specified.</value>
+  </data>
+  <data name="SSHConnectionDuplicateKeyPath" xml:space="preserve">
+    <value>The provided SSHConnection hashtable contains both a KeyFilePath and IdentityFilePath parameter.  Only one can be specified.</value>
+  </data>
+  <data name="CouldNotFindRoleCapabilityFile" xml:space="preserve">
+    <value>Could not find the provided role capability file {0}.</value>
+  </data>
+  <data name="InvalidRoleCapabilityFileExtension" xml:space="preserve">
+    <value>The provided role capability file {0} does not have the required .psrc extension.</value>
+  </data>
+  <data name="SSHAbruptlyTerminated" xml:space="preserve">
+    <value>The SSH transport process has abruptly terminated causing this remote session to break.</value>
+  </data>
+  <data name="InvalidProcessorArchitecture" xml:space="preserve">
+    <value>PowerShell 6+ does not support WOW64. The binary must match the architecture of the processor.</value>
+  </data>
+  <data name="WowComponentNotPresent" xml:space="preserve">
+    <value>The "{0}" executable file was not found. Verify that the WOW64 feature is installed.</value>
+  </data>
+  <data name="UnableToInstallPlugin" xml:space="preserve">
+    <value>Unable to install plugin {0} to directory {1}.</value>
+  </data>
+  <data name="PluginDllMissing" xml:space="preserve">
+    <value>The WinRM plugin DLL {0} is missing for PowerShell. Please run Enable-PSRemoting and then retry this command.</value>
+  </data>
+  <data name="WSManClientDllNotAvailable" xml:space="preserve">
+    <value>This parameter set requires WSMan, and no supported WSMan client library was found. WSMan is either not installed or unavailable for this system.</value>
+  </data>
+  <data name="ProcessExitInfo" xml:space="preserve">
+    <value>
+      Exit code: {0}
+      Stdout: '{1}'
+      Stderr: '{2}'
+    </value>
+  </data>
+  <data name="ProcessInfoNotRecoverable" xml:space="preserve">
+    <value>Information about the process could not be read: '{0}'.</value>
+  </data>
+  <data name="CannotGetHostInteropTypes" xml:space="preserve">
+    <value>Host system does not have the correct version of Hyper-V schema.</value>
+  </data>
+  <data name="UnixOnlyHttpsWithoutSkipCACheckNotSupported" xml:space="preserve">
+    <value>HTTPS on Unix does not currently support CA or CN checks. Use the PSSessionOption -SkipCACheck and -SkipCNCheck if you are certain you trust the server you are connecting to and the network in between.</value>
+  </data>
+  <data name="PSCoreRemotingDisableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been disabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.
+</value>
+  </data>
+  <data name="PSCoreRemotingEnableWarning" xml:space="preserve">
+    <value>PowerShell remoting has been enabled only for PowerShell 6+ configurations and does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect all PowerShell remoting configurations.</value>
+  </data>
+  <data name="EnterPSHostProcessCmdletDisabled" xml:space="preserve">
+    <value>Enter-PSHostProcess cmdlet is disabled because an application control policy such as 'AppLocker' or 'Windows Defender Application Control' is in enforcement.</value>
+  </data>
+  <data name="RemoteDebuggerError" xml:space="preserve">
+    <value>Remote debugger exception: {0}, error message: {1}</value>
+  </data>
+  <data name="WindowsPowerShellNotPresent" xml:space="preserve">
+    <value>Unable to create Windows PowerShell process because Windows PowerShell could not be found on this machine.</value>
+  </data>
+  <data name="InvalidPSSessionArgument" xml:space="preserve">
+    <value>The Runspace argument to Create must be a non-null RemoteRunspace object.</value>
+  </data>
+  <data name="DISCInvalidConfigKeyType" xml:space="preserve">
+    <value>The session configuration hash table contains an invalid key type. Keys should be string types.</value>
+  </data>
+  <data name="DISCUnsupportedConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unsupported configuration option: {0}. This is a remoting endpoint configuration option, that does not apply to PowerShell session state.</value>
+  </data>
+  <data name="DISCUnknownConfigName" xml:space="preserve">
+    <value>The session configuration file contains an unknown configuration option: {0}.</value>
+  </data>
+  <data name="WDACGetPowerShellLogTitle" xml:space="preserve">
+    <value>Expression Evaluation May Fail</value>
+  </data>
+  <data name="WDACGetPowerShellLogMessage" xml:space="preserve">
+    <value>Creating a PowerShell object from a script block may require evaluating some expressions within the script block. The expression evaluation will silently fail and return 'null' in Constrained Language mode, unless the expression represents a constant value.</value>
+  </data>
+  <data name="HyperVFailedToGetStateUnknownType" xml:space="preserve">
+    <value>Failed to get Hyper-V VM State. The value was of the type {0} but was expected to be Microsoft.HyperV.PowerShell.VMState or System.String.</value>
+  </data>
+  <data name="HyperVInvalidResponse" xml:space="preserve">
+    <value>Hyper-V {0} sent an invalid {1} response during the connection negotiation.</value>
+  </data>
+  <data name="HyperVNegotiationFailed" xml:space="preserve">
+    <value>Negotiating a secure connection to Hyper-V failed. Make sure the Host and Guest are updated with all relevant Microsoft Updates.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/RunspaceInit.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/RunspaceInit.zh-Hans.resx
new file mode 100644
index 00000000000..acfb5605bb6
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/RunspaceInit.zh-Hans.resx
@@ -0,0 +1,231 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="EnabledExperimentalFeatures" xml:space="preserve">
+    <value>Variable to hold the enabled experimental feature names</value>
+  </data>
+  <data name="PSHOMEDescription" xml:space="preserve">
+    <value>Parent folder of the host application of the current runspace</value>
+  </data>
+  <data name="HOMEDescription" xml:space="preserve">
+    <value>Folder containing the current user's profile</value>
+  </data>
+  <data name="PSHostDescription" xml:space="preserve">
+    <value>A reference to the host of the current runspace</value>
+  </data>
+  <data name="ExecutionContextDescription" xml:space="preserve">
+    <value>The run objects available to cmdlets</value>
+  </data>
+  <data name="PSVersionTableDescription" xml:space="preserve">
+    <value>Version information for current PowerShell session</value>
+  </data>
+  <data name="PIDDescription" xml:space="preserve">
+    <value>Current process ID</value>
+  </data>
+  <data name="DollarHookDescription" xml:space="preserve">
+    <value>Status of last command</value>
+  </data>
+  <data name="PPIDDescription" xml:space="preserve">
+    <value>Parent process ID</value>
+  </data>
+  <data name="MshShellIdDescription" xml:space="preserve">
+    <value>The ShellID identifies the current shell.  This is used by #Requires.</value>
+  </data>
+  <data name="ConsoleDescription" xml:space="preserve">
+    <value>Name of the current console file</value>
+  </data>
+  <data name="OutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when piping text to a native executable file</value>
+  </data>
+  <data name="PSApplicationOutputEncodingDescription" xml:space="preserve">
+    <value>The text encoding used when reading output text from a native executable file</value>
+  </data>
+  <data name="PSStyleDescription" xml:space="preserve">
+    <value>Configuration controlling how text is rendered.</value>
+  </data>
+  <data name="PSEmailServerDescription" xml:space="preserve">
+    <value>Variable to contain the name of the email server. This can be used instead of the HostName parameter in the Send-MailMessage cmdlet.</value>
+  </data>
+  <data name="ConfirmPreferenceDescription" xml:space="preserve">
+    <value>Dictates when confirmation should be requested. Confirmation is requested when the ConfirmImpact of the operation is equal to or greater than $ConfirmPreference. If $ConfirmPreference is None, actions will only be confirmed when Confirm is specified.</value>
+  </data>
+  <data name="DebugPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Debug message is delivered</value>
+  </data>
+  <data name="ErrorActionPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when an error message is delivered</value>
+  </data>
+  <data name="ProgressPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when progress records are delivered</value>
+  </data>
+  <data name="VerbosePreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Verbose message is delivered</value>
+  </data>
+  <data name="WarningPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a Warning message is delivered</value>
+  </data>
+  <data name="InformationPreferenceDescription" xml:space="preserve">
+    <value>Dictates the action taken when a command generates an item in the Information stream</value>
+  </data>
+  <data name="ErrorViewDescription" xml:space="preserve">
+    <value>Dictates the view mode to use when displaying errors</value>
+  </data>
+  <data name="NestedPromptLevelDescription" xml:space="preserve">
+    <value>Dictates what type of prompt should be displayed for the current nesting level</value>
+  </data>
+  <data name="PSNativeCommandUseErrorActionPreferenceDescription" xml:space="preserve">
+    <value>If true, $ErrorActionPreference applies to native executables, so that non-zero exit codes will generate cmdlet-style errors governed by error action settings</value>
+  </data>
+  <data name="WhatIfPreferenceDescription" xml:space="preserve">
+    <value>If true, WhatIf is considered to be enabled for all commands.</value>
+  </data>
+  <data name="NativeCommandArgumentPassingDescription" xml:space="preserve">
+    <value>Dictates how arguments are passed to native executables.</value>
+  </data>
+  <data name="FormatEnumerationLimitDescription" xml:space="preserve">
+    <value>Dictates the limit of enumeration on formatting IEnumerable objects</value>
+  </data>
+  <data name="ReportErrorShowStackTraceDescription" xml:space="preserve">
+    <value>Displays errors with a stack trace</value>
+  </data>
+  <data name="ReportErrorShowInnerExceptionDescription" xml:space="preserve">
+    <value>Displays errors with inner exceptions</value>
+  </data>
+  <data name="ReportErrorShowSourceDescription" xml:space="preserve">
+    <value>Displays errors with their sources</value>
+  </data>
+  <data name="ReportErrorShowExceptionClassDescription" xml:space="preserve">
+    <value>Displays errors with a description of the error class</value>
+  </data>
+  <data name="DollarPSCultureDescription" xml:space="preserve">
+    <value>Culture of the current PowerShell session</value>
+  </data>
+  <data name="DollarPSUICultureDescription" xml:space="preserve">
+    <value>UI culture of the current PowerShell session</value>
+  </data>
+  <data name="PSDefaultParameterValuesDescription" xml:space="preserve">
+    <value>Variable to hold all default &lt;cmdlet:parameter, value&gt; pairs</value>
+  </data>
+  <data name="PauseDefinitionString" xml:space="preserve">
+    <value>Press Enter to continue...</value>
+  </data>
+  <data name="PSEditionDescription" xml:space="preserve">
+    <value>Edition information for the current PowerShell session</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/RunspacePoolStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/RunspacePoolStrings.zh-Hans.resx
new file mode 100644
index 00000000000..63e61c017c3
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/RunspacePoolStrings.zh-Hans.resx
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MaxPoolLessThan1" xml:space="preserve">
+    <value>最大池大小不能小于 1。</value>
+  </data>
+  <data name="MinPoolLessThan1" xml:space="preserve">
+    <value>最小池大小不能小于 1。</value>
+  </data>
+  <data name="MinPoolGreaterThanMaxPool" xml:space="preserve">
+    <value>最小池大小不能大于最大池大小。</value>
+  </data>
+  <data name="InvalidRunspacePoolStateGeneral" xml:space="preserve">
+    <value>运行空间池的状态不适用于此操作。</value>
+  </data>
+  <data name="InvalidRunspacePoolState" xml:space="preserve">
+    <value>无法执行该操作，因为运行空间池未处于“{0}”状态。当前状态为“{1}”。</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>无法打开运行空间池，因为它未处于 'BeforeOpen' 状态。当前状态为“{0}”。</value>
+  </data>
+  <data name="AsyncResultNotOwned" xml:space="preserve">
+    <value>{0} 对象不是通过调用当前 RunspacePool 实例上的 {1} 创建的。</value>
+  </data>
+  <data name="RunspaceNotBelongsToPool" xml:space="preserve">
+    <value>无法将运行空间释放到当前池，因为该运行空间不属于当前池。</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>打开运行空间池后，无法更改此属性。</value>
+  </data>
+  <data name="RunspaceDisconnectConnectNotSupported" xml:space="preserve">
+    <value>此运行空间不支持断开连接和连接操作。</value>
+  </data>
+  <data name="CannotWhileDisconnected" xml:space="preserve">
+    <value>无法执行该操作，因为运行空间池处于已断开连接状态。</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>服务器不支持断开连接操作。 服务器必须运行 PowerShell 3.0 或更高版本，才能支持远程运行空间池断开连接。</value>
+  </data>
+  <data name="CannotReconstructCommands" xml:space="preserve">
+    <value>未配置此运行空间池 {0} 为远程服务器上运行的命令提供断开连接的 PowerShell 对象。 使用 RunspacePool 类的 GetRunspacePools() 静态方法查询服务器，并返回已配置为执行此操作的运行空间池对象。</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>无法连接此运行空间池，因为相应的服务器端运行空间池已连接到另一个客户端。</value>
+  </data>
+  <data name="ResetRunspaceStateNotSupportedOnServer" xml:space="preserve">
+    <value>服务器不支持 ResetRunspaceState。 服务器必须运行 PowerShell 5.0 或更高版本。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/RunspaceStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/RunspaceStrings.zh-Hans.resx
new file mode 100644
index 00000000000..c2274ab7ed1
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/RunspaceStrings.zh-Hans.resx
@@ -0,0 +1,243 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidRunspaceStateGeneral" xml:space="preserve">
+    <value>The runspace state is not valid for this operation.</value>
+  </data>
+  <data name="CannotOpenAgain" xml:space="preserve">
+    <value>Cannot open the runspace because the runspace is not in the BeforeOpen state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotInOpenedState" xml:space="preserve">
+    <value>Cannot perform the operation because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipeline" xml:space="preserve">
+    <value>Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidPipelineStateStateGeneral" xml:space="preserve">
+    <value>The pipeline state is not valid for this operation.</value>
+  </data>
+  <data name="PipelineReInvokeNotAllowed" xml:space="preserve">
+    <value>Cannot invoke pipeline because it has already been invoked.</value>
+  </data>
+  <data name="InvalidValueToResultError" xml:space="preserve">
+    <value>The valid value for the parameter is PipelineResultTypes.Output.</value>
+  </data>
+  <data name="NoCommandInPipeline" xml:space="preserve">
+    <value>The pipeline does not contain a command.</value>
+  </data>
+  <data name="ConcurrentInvokeNotAllowed" xml:space="preserve">
+    <value>The pipeline was not run because a pipeline is already running. Pipelines cannot be run concurrently.</value>
+  </data>
+  <data name="NestedPipelineInvokeAsync" xml:space="preserve">
+    <value>A nested pipeline cannot be invoked asynchronously. Use the Invoke method.</value>
+  </data>
+  <data name="NestedPipelineNoParentPipeline" xml:space="preserve">
+    <value>You should only run a nested pipeline from within a running pipeline.</value>
+  </data>
+  <data name="RunspaceCloseInvalidWhileSessionStateProxy" xml:space="preserve">
+    <value>Runspace cannot be closed while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="NoPipelineWhenSessionStateProxyInProgress" xml:space="preserve">
+    <value>Pipeline cannot be invoked while a SessionStateProxy method call is in progress.</value>
+  </data>
+  <data name="AnotherSessionStateProxyInProgress" xml:space="preserve">
+    <value>A SessionStateProxy method call is in progress. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="NoSessionStateProxyWhenPipelineInProgress" xml:space="preserve">
+    <value>A pipeline is already running. Concurrent SessionStateProxy method calls are not allowed.</value>
+  </data>
+  <data name="ChangePropertyAfterOpen" xml:space="preserve">
+    <value>This property cannot be changed after the runspace has been opened.</value>
+  </data>
+  <data name="ErrorLoadingModulesOnRunspaceOpen" xml:space="preserve">
+    <value>One or more errors occurred processing the module '{0}' specified in the InitialSessionState object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error was: {1}</value>
+  </data>
+  <data name="InvalidThreadOptionsChange" xml:space="preserve">
+    <value>The thread options can only be changed if the apartment state is multithreaded apartment (MTA), the current options are UseNewThread or UseCurrentThread, and the new value is ReuseThread.</value>
+  </data>
+  <data name="UseLocalScopeNotAllowed" xml:space="preserve">
+    <value>{0} cannot be false when language mode is {1} or {2}.</value>
+  </data>
+  <data name="DisconnectNotSupported" xml:space="preserve">
+    <value>You cannot disconnect a local-only runspace.</value>
+  </data>
+  <data name="ConnectNotSupported" xml:space="preserve">
+    <value>The Connect operation is not supported on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotReady" xml:space="preserve">
+    <value>The session is busy. You will be connected to the session as soon as it is available. To cancel the Enter-PSSession command, press Ctrl-C.</value>
+  </data>
+  <data name="NotSupportedOnRestrictedRunspace" xml:space="preserve">
+    <value>The command cannot be completed. Script invocation is not supported in this session configuration. This can occur if the session configuration is in no-language mode.</value>
+  </data>
+  <data name="DisconnectConnectNotSupported" xml:space="preserve">
+    <value>You cannot use Disconnect and Connect operations on local runspaces.</value>
+  </data>
+  <data name="RunspaceNotOpenForPipelineConnect" xml:space="preserve">
+    <value>Cannot connect the pipeline because the runspace is not in the Opened state.  Current state of runspace is '{0}'.</value>
+  </data>
+  <data name="InvalidRunspacePool" xml:space="preserve">
+    <value>Cannot construct a RemoteRunspace. The provided RunspacePool object is not valid.</value>
+  </data>
+  <data name="NoDisconnectedCommand" xml:space="preserve">
+    <value>There is no disconnected command associated with this runspace.</value>
+  </data>
+  <data name="DisconnectNotSupportedOnServer" xml:space="preserve">
+    <value>The disconnection operation is not supported on the remote computer. To support disconnecting, the remote computer must be running Windows PowerShell 3.0 or a later version of Windows PowerShell and using the WSMan transport.</value>
+  </data>
+  <data name="CannotConnect" xml:space="preserve">
+    <value>Cannot connect the PSSession because the session is not in the Disconnected state, or is not available for connection.</value>
+  </data>
+  <data name="InvalidMyResultError" xml:space="preserve">
+    <value>Value for parameter cannot be PipelineResultTypes.None or PipelineResultTypes.Output.</value>
+  </data>
+  <data name="InvalidValueToResult" xml:space="preserve">
+    <value>Valid values for the parameter are PipelineResultTypes.Output or PipelineResultTypes.Null.</value>
+  </data>
+  <data name="DebugRedirectionNotSupported" xml:space="preserve">
+    <value>Debug stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="VerboseRedirectionNotSupported" xml:space="preserve">
+    <value>Verbose stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="WarningRedirectionNotSupported" xml:space="preserve">
+    <value>Warning stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="InformationRedirectionNotSupported" xml:space="preserve">
+    <value>Information stream redirection is not supported on the targeted remote computer.</value>
+  </data>
+  <data name="RunningCmdWithJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script.  Because output is routed to job "{0}", you will not see output in the console.  You can wait for the running command to finish, or cancel the command and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdWithoutJob" xml:space="preserve">
+    <value>You have entered a session that is busy running a command or script and output will be displayed in the console.  You can wait for the running command to finish or cancel it and get an input prompt by pressing Ctrl-C.
+</value>
+  </data>
+  <data name="RunningCmdDebugStop" xml:space="preserve">
+    <value>You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.  Use the PowerShell command line debugger to continue debugging.
+</value>
+  </data>
+  <data name="RunspaceNotLocal" xml:space="preserve">
+    <value>DefaultRunspace must be a LocalRunspace</value>
+  </data>
+  <data name="PrimaryRunspaceAlreadySet" xml:space="preserve">
+    <value>The static PrimaryRunspace property can only be set once, and has already been set.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/SecuritySupportStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/SecuritySupportStrings.zh-Hans.resx
new file mode 100644
index 00000000000..6a7008ed704
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/SecuritySupportStrings.zh-Hans.resx
@@ -0,0 +1,168 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CertificatePathMustBeFileSystemPath" xml:space="preserve">
+    <value>无法加载证书。“{0}”必须解析为文件系统路径。</value>
+  </data>
+  <data name="CertificateCannotBeUsedForEncryption" xml:space="preserve">
+    <value>证书“{0}”无法用于加密。加密证书必须包含数据加密或密钥加密密钥用法，并包括文档加密增强型密钥用法({1})。</value>
+  </data>
+  <data name="IdentifierMustReferenceSingleCertificate" xml:space="preserve">
+    <value>无法加载证书。标识符“{0}”匹配多个证书。要加密发送给多个收件人，请为“{1}”参数提供多个具体值，而不要使用会匹配多个证书的通配符。</value>
+  </data>
+  <data name="NoCertificateFound" xml:space="preserve">
+    <value>无法加载加密证书。证书设置“{0}”不代表有效的 base-64 编码证书，也不代表通过文件、目录、指纹或使用者名称指定的有效证书。</value>
+  </data>
+  <data name="CertificateContainsPrivateKey" xml:space="preserve">
+    <value>警告: 证书“{0}”包含私钥。用于加密的受保护事件日志证书应仅包含公钥。</value>
+  </data>
+  <data name="CouldNotEncryptContent" xml:space="preserve">
+    <value>错误: 无法保护事件日志消息“{0}”: {1}</value>
+  </data>
+  <data name="CouldNotUseCertificate" xml:space="preserve">
+    <value>错误: 找不到或无法使用证书: {0}</value>
+  </data>
+  <data name="CannotEncryptSecureString" xml:space="preserve">
+    <value>会话密钥不可用于加密安全字符串。</value>
+  </data>
+  <data name="InvalidOffset" xml:space="preserve">
+    <value>缓冲区偏移无效。</value>
+  </data>
+  <data name="InvalidPublicKey" xml:space="preserve">
+    <value>公钥数据无效。</value>
+  </data>
+  <data name="CannotImportPublicKey" xml:space="preserve">
+    <value>无法导入公钥。</value>
+  </data>
+  <data name="InvalidSessionKey" xml:space="preserve">
+    <value>会话密钥数据无效。</value>
+  </data>
+  <data name="ScriptFileBlockedBySystemPolicy" xml:space="preserve">
+    <value>脚本文件“{0}”被系统策略阻止运行。</value>
+  </data>
+  <data name="UnknownSystemScriptFileEnforcement" xml:space="preserve">
+    <value>返回了未知的脚本文件策略强制值: {0}。</value>
+  </data>
+  <data name="ExternalScriptWDACLogTitle" xml:space="preserve">
+    <value>脚本文件读取</value>
+  </data>
+  <data name="ExternalScriptWDACLogMessage" xml:space="preserve">
+    <value>脚本文件“{0}”不受策略信任，将在 ConstrainedLanguage 模式下运行。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/Serialization.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/Serialization.zh-Hans.resx
new file mode 100644
index 00000000000..b31323360fb
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/Serialization.zh-Hans.resx
@@ -0,0 +1,195 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AttributeExpected" xml:space="preserve">
+    <value>{0} attribute was expected.</value>
+  </data>
+  <data name="InvalidElementTag" xml:space="preserve">
+    <value>{0} XML tag is not recognized.</value>
+  </data>
+  <data name="InvalidReferenceId" xml:space="preserve">
+    <value>No object found for referenceId {0}</value>
+  </data>
+  <data name="InvalidDictionaryKeyName" xml:space="preserve">
+    <value>Name attribute for dictionary key is incorrectly specified.</value>
+  </data>
+  <data name="InvalidDictionaryValueName" xml:space="preserve">
+    <value>Name attribute for dictionary value is incorrectly specified.</value>
+  </data>
+  <data name="InvalidVersion" xml:space="preserve">
+    <value>Version of PSObject is not valid.</value>
+  </data>
+  <data name="UnexpectedVersion" xml:space="preserve">
+    <value>Version of incoming PSObject is {0}. Expected value is 1.</value>
+  </data>
+  <data name="InvalidTypeHierarchyReferenceId" xml:space="preserve">
+    <value>Cannot process names because no TypeNames were found for referenceId {0}.</value>
+  </data>
+  <data name="DepthOfOneRequired" xml:space="preserve">
+    <value>Value of depth parameter must be greater than or equal to 1.</value>
+  </data>
+  <data name="InvalidNodeType" xml:space="preserve">
+    <value>Current Node type is {0}. Expected type is {1}.</value>
+  </data>
+  <data name="DictionaryKeyNotSpecified" xml:space="preserve">
+    <value>Key for dictionary entry is not specified.</value>
+  </data>
+  <data name="DictionaryValueNotSpecified" xml:space="preserve">
+    <value>Value for dictionary entry is not specified.</value>
+  </data>
+  <data name="ReadCalledAfterDone" xml:space="preserve">
+    <value>There are no more objects to deserialize.</value>
+  </data>
+  <data name="NullAsDictionaryKey" xml:space="preserve">
+    <value>Null is specified as dictionary key.</value>
+  </data>
+  <data name="InvalidPrimitiveType" xml:space="preserve">
+    <value>The contents of the {0} primitive type are not valid.</value>
+  </data>
+  <data name="DeserializationTooDeep" xml:space="preserve">
+    <value>Serialized XML is nested too deeply.</value>
+  </data>
+  <data name="Stopping" xml:space="preserve">
+    <value>Serializer was closed.</value>
+  </data>
+  <data name="DeserializationMemoryQuota" xml:space="preserve">
+    <value>The data in the command exceeded the maximum size that is allowed by the session configuration. The allowed maximum is {0} MB. Change the input, use a different session configuration, or change the "{1}" and "{2}" properties of the session configuration on the remote computer.</value>
+  </data>
+  <data name="DeserializeSecureStringFailed" xml:space="preserve">
+    <value>Deserialization of encrypted secure string failed</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidKey" xml:space="preserve">
+    <value>The key type {0} is not valid. The PSPrimitiveDictionary class accepts only keys of the type System.String.</value>
+  </data>
+  <data name="PrimitiveHashtableInvalidValue" xml:space="preserve">
+    <value>The type of the value {0} is not valid. The PSPrimitiveDictionary class accepts only values of types that are fully serializable over PowerShell remoting. See the Help topic about_Remoting for a list of fully-serializable types.</value>
+  </data>
+  <data name="InvalidKey" xml:space="preserve">
+    <value>Could not decrypt data. The data was not encrypted with this key.</value>
+  </data>
+  <data name="InvalidEncryptedString" xml:space="preserve">
+    <value>The parameter value "{0}" is not a valid encrypted string.</value>
+  </data>
+  <data name="InvalidKeyLength" xml:space="preserve">
+    <value>The specified {0} is not valid. Valid {0} length settings are either 128 bits, 192 bits, or 256 bits.</value>
+  </data>
+  <data name="DeserializeSecureStringNotSupported" xml:space="preserve">
+    <value>Deserialization of SecureString is currently only supported on Windows.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/SessionStateProviderBaseStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/SessionStateProviderBaseStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f42f935cec9
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/SessionStateProviderBaseStrings.zh-Hans.resx
@@ -0,0 +1,156 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="SetItemAction" xml:space="preserve">
+    <value>Set Item</value>
+  </data>
+  <data name="SetItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Value: {1}</value>
+  </data>
+  <data name="ClearItemAction" xml:space="preserve">
+    <value>Clear Item</value>
+  </data>
+  <data name="ClearItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="RemoveItemAction" xml:space="preserve">
+    <value>Remove Item</value>
+  </data>
+  <data name="RemoveItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0}</value>
+  </data>
+  <data name="NewItemAction" xml:space="preserve">
+    <value>New Item</value>
+  </data>
+  <data name="NewItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Type: {1} Value: {2}</value>
+  </data>
+  <data name="CopyItemAction" xml:space="preserve">
+    <value>Copy Item</value>
+  </data>
+  <data name="CopyItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} Destination: {1}</value>
+  </data>
+  <data name="RenameItemAction" xml:space="preserve">
+    <value>Rename Item</value>
+  </data>
+  <data name="RenameItemResourceTemplate" xml:space="preserve">
+    <value>Item: {0} NewName: {1}</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/SessionStateStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/SessionStateStrings.zh-Hans.resx
new file mode 100644
index 00000000000..f6d1e9b8850
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/SessionStateStrings.zh-Hans.resx
@@ -0,0 +1,657 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="InvalidProviderInfo" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was for a different provider than the one passed.</value>
+  </data>
+  <data name="InvalidProviderInfoNull" xml:space="preserve">
+    <value>Cannot process the returned information because the information returned from the provider's Start method was null.</value>
+  </data>
+  <data name="GetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionProviderException" xml:space="preserve">
+    <value>Attempting to perform the InvokeDefaultAction operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="InvokeDefaultActionDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the InvokeDefaultAction operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsProviderException" xml:space="preserve">
+    <value>Attempting to perform the ItemExists operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ItemExistsDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ItemExists operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="IsValidPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsValidPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="IsItemContainerProviderException" xml:space="preserve">
+    <value>Attempting to perform the IsItemContainer operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildItems operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildrenDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildItems operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildNames operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNamesDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetChildNames operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenameItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RenameItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewItem operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="NewItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="HasChildItemsProviderException" xml:space="preserve">
+    <value>Attempting to perform the HasChildItems operation on the '{0}' provider failed for the path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetParentPathProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetParentPath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NormalizeRelativePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the NormalizeRelativePath operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MakePathProviderException" xml:space="preserve">
+    <value>Attempting to perform the MakePath operation operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetChildNameProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetChildName operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveItem operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MoveItemDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveItem operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="GetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the SetProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="NewPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the NewProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RemoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RemovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the RemoveProperty operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the CopyProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="CopyPropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the CopyProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the MoveProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="MovePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the MoveProperty operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyProviderException" xml:space="preserve">
+    <value>Attempting to perform the RenameProperty operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="RenamePropertyDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for RenameProperty cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderProviderException" xml:space="preserve">
+    <value>Content reader cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentReaderDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentReader operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterProviderException" xml:space="preserve">
+    <value>Content writer cannot be retrieved for the '{0}' provider for the path '{1}'. {2}</value>
+  </data>
+  <data name="GetContentWriterDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the GetContentWriter operation cannot be retrieved for the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetContainerContentException" xml:space="preserve">
+    <value>Unable to get content because it is a directory: '{0}'. Please use 'Get-ChildItem' instead.</value>
+  </data>
+  <data name="WriteContainerContentException" xml:space="preserve">
+    <value>Unable to write content because it is a directory: '{0}'.</value>
+  </data>
+  <data name="LocationUndoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate backwards.</value>
+  </data>
+  <data name="LocationRedoStackIsEmpty" xml:space="preserve">
+    <value>There is no location history left to navigate forwards.</value>
+  </data>
+  <data name="BoundedStackIsEmpty" xml:space="preserve">
+    <value>The BoundedStack is empty.</value>
+  </data>
+  <data name="ClearContentProviderException" xml:space="preserve">
+    <value>Attempting to perform the ClearContent operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ClearDirectoryContent" xml:space="preserve">
+    <value>Unable to clear content of '{0}' because it is a directory. Clear-Content is only supported on files.</value>
+  </data>
+  <data name="ClearContentDynamicParametersProviderException" xml:space="preserve">
+    <value>The dynamic parameters for the ClearContent operation cannot be retrieved from the '{0}' provider for path '{1}'. {2}</value>
+  </data>
+  <data name="GetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the GetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="SetSecurityDescriptorProviderException" xml:space="preserve">
+    <value>Attempting to perform the SetSecurityDescriptor operation on the '{0}' provider failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderStartException" xml:space="preserve">
+    <value>Attempting to perform the Start operation on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="InitializeDefaultDrivesException" xml:space="preserve">
+    <value>Attempting to perform the InitializeDefaultDrives operation on the '{0}' provider failed.</value>
+  </data>
+  <data name="NewDriveProviderException" xml:space="preserve">
+    <value>Attempting to perform the NewDrive operation on the '{0}' provider failed for the drive with root '{1}'. {2}</value>
+  </data>
+  <data name="NewDriveDynamicParametersProviderException" xml:space="preserve">
+    <value>Dynamic parameters for NewDrive cannot be retrieved for the '{0}' provider. {1}</value>
+  </data>
+  <data name="RemoveDriveProviderException" xml:space="preserve">
+    <value>The invocation of RemoveDrive on the '{0}' provider failed. {1}</value>
+  </data>
+  <data name="DriveRemovalPreventedByProvider" xml:space="preserve">
+    <value>Drive '{0}' cannot be removed because the provider '{1}' prevented it.</value>
+  </data>
+  <data name="NormalizeRelativePathOutsideBase" xml:space="preserve">
+    <value>The path '{0}' referred to an item that was outside the base '{1}'.</value>
+  </data>
+  <data name="ProviderSeekError" xml:space="preserve">
+    <value>The invocation of Seek on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentCloseError" xml:space="preserve">
+    <value>The invocation of Close on the '{0}' provider's content reader or writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentReadError" xml:space="preserve">
+    <value>The invocation of Read on the '{0}' provider's content reader failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderContentWriteError" xml:space="preserve">
+    <value>The invocation of Write on the '{0}' provider's content writer failed for path '{1}'. {2}</value>
+  </data>
+  <data name="ProviderCannotBeUsedAsVariable" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to get or set data using the variable syntax. {2}</value>
+  </data>
+  <data name="ProviderVariableSyntaxInvalid" xml:space="preserve">
+    <value>The variable syntax cannot be used to get or set data in the provider. {2}</value>
+  </data>
+  <data name="AliasNotWritable" xml:space="preserve">
+    <value>Alias is not writeable because alias {0} is read-only or constant and cannot be written to.</value>
+  </data>
+  <data name="FunctionNotWritable" xml:space="preserve">
+    <value>Cannot write to function {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableNotWritable" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because it is read-only or constant.</value>
+  </data>
+  <data name="VariableIsPrivate" xml:space="preserve">
+    <value>Cannot access the variable '${0}' because it is a private variable.</value>
+  </data>
+  <data name="NamedCommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command '{0}' because it is a private command.</value>
+  </data>
+  <data name="CommandIsPrivate" xml:space="preserve">
+    <value>Cannot access the command because it is a private command.</value>
+  </data>
+  <data name="ResourceIsPrivate" xml:space="preserve">
+    <value>Cannot access the session state resource because it is a private resource. </value>
+  </data>
+  <data name="AliasNotRemovable" xml:space="preserve">
+    <value>Alias was not removed because alias {0} is constant or read-only.</value>
+  </data>
+  <data name="FunctionNotRemovable" xml:space="preserve">
+    <value>Cannot remove function {0} because it is constant.</value>
+  </data>
+  <data name="VariableNotRemovable" xml:space="preserve">
+    <value>Cannot remove variable {0} because it is constant or read-only. If the variable is read-only, try the operation again specifying the Force option.</value>
+  </data>
+  <data name="AliasIsConstant" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is constant.</value>
+  </data>
+  <data name="AliasIsReadOnly" xml:space="preserve">
+    <value>Alias {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="FunctionIsConstant" xml:space="preserve">
+    <value>Cannot modify function {0} because it is constant.</value>
+  </data>
+  <data name="FunctionIsReadOnly" xml:space="preserve">
+    <value>Cannot modify function {0} because it is read-only.</value>
+  </data>
+  <data name="AliasCannotBeMadeConstant" xml:space="preserve">
+    <value>Alias {0} cannot be made constant after it has been created. Aliases can only be made constant at creation time.</value>
+  </data>
+  <data name="FunctionCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing function {0} cannot be made constant. Functions can be made constant only at creation time.</value>
+  </data>
+  <data name="VariableCannotBeMadeConstant" xml:space="preserve">
+    <value>Existing variable {0} cannot be made constant. Variables can be made constant only at creation time.</value>
+  </data>
+  <data name="AliasAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the alias '{0}'.</value>
+  </data>
+  <data name="FunctionAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the function '{0}'.</value>
+  </data>
+  <data name="VariableAllScopeOptionCannotBeRemoved" xml:space="preserve">
+    <value>The AllScope option cannot be removed from the variable '{0}'.</value>
+  </data>
+  <data name="ScopedFunctionMustHaveName" xml:space="preserve">
+    <value>The function definition '{0}' contained a scope qualifier but no function name.</value>
+  </data>
+  <data name="RemoveDrivesBeforeRemovingProvider" xml:space="preserve">
+    <value>Cannot remove provider {0}. All drives associated with provider {0} must be removed before provider {0} can be removed.</value>
+  </data>
+  <data name="DriveNameIllegalCharacters" xml:space="preserve">
+    <value>Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . :</value>
+  </data>
+  <data name="NewDriveProviderFailed" xml:space="preserve">
+    <value>New drive creation failed because the provider does not allow the creation of the new drive.</value>
+  </data>
+  <data name="StackNameResolvedToMultiple" xml:space="preserve">
+    <value>The provided value '{0}' resolved to more than one location stack.</value>
+  </data>
+  <data name="StackNotFound" xml:space="preserve">
+    <value>Cannot find location stack '{0}'. It does not exist or it is not a container.</value>
+  </data>
+  <data name="PathNotFound" xml:space="preserve">
+    <value>找不到路径“{0}”，因为该路径不存在。</value>
+  </data>
+  <data name="AliasNotFound" xml:space="preserve">
+    <value>Cannot find alias because alias '{0}' does not exist.</value>
+  </data>
+  <data name="PathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot set the location because path '{0}' resolved to multiple containers. You can only set the location to a single container at a time.</value>
+  </data>
+  <data name="VariablePathResolvedToMultiple" xml:space="preserve">
+    <value>Cannot process variable because variable path '{0}' resolved to multiple items. You can get or set the variable value only one item at a time.</value>
+  </data>
+  <data name="DriveNotFound" xml:space="preserve">
+    <value>Cannot find drive. A drive with the name '{0}' does not exist.</value>
+  </data>
+  <data name="ProviderNotFound" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'.</value>
+  </data>
+  <data name="ProviderNotFoundBadFormat" xml:space="preserve">
+    <value>Cannot find a provider with the name '{0}'. The name is not in the proper format. A provider name can only be alphanumeric characters, or a PowerShell snap-in name that is followed by a single '\', followed by alphanumeric characters.</value>
+  </data>
+  <data name="ProviderNameAmbiguous" xml:space="preserve">
+    <value>'{0}' resolved to more than one provider name. Possible matches include:{1}.</value>
+  </data>
+  <data name="ProviderNotFoundInAssembly" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider. The provider type name of '{0}' could not be found in the assembly.</value>
+  </data>
+  <data name="ProviderNameNotValid" xml:space="preserve">
+    <value>The specified provider name '{0}' cannot be used because it contains one or more of the following characters that are not valid: \ [ ] ? * :</value>
+  </data>
+  <data name="ProviderCtorException" xml:space="preserve">
+    <value>An error occurred attempting to create an instance of the provider '{0}'. {1} </value>
+  </data>
+  <data name="VariableNotFound" xml:space="preserve">
+    <value>Cannot find a variable with the name '{0}'.</value>
+  </data>
+  <data name="TraceSourceNotFound" xml:space="preserve">
+    <value>Cannot find a trace source with the name '{0}'.</value>
+  </data>
+  <data name="DriveAlreadyExists" xml:space="preserve">
+    <value>A drive with the name '{0}' already exists.</value>
+  </data>
+  <data name="VariableAlreadyExists" xml:space="preserve">
+    <value>A variable with name '{0}' already exists.</value>
+  </data>
+  <data name="AliasAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because an alias with the name '{0}' already exists.</value>
+  </data>
+  <data name="CmdletProviderAlreadyExists" xml:space="preserve">
+    <value>Cannot register the cmdlet provider because a cmdlet provider with the name '{0}' already exists.</value>
+  </data>
+  <data name="MustBeFileSystemPath" xml:space="preserve">
+    <value>The path does not refer to a file system path.</value>
+  </data>
+  <data name="GlobalScopeCannotRemove" xml:space="preserve">
+    <value>Global scope cannot be removed.</value>
+  </data>
+  <data name="ScopeIDExceedsAvailableScopes" xml:space="preserve">
+    <value>The scope number '{0}' exceeds the number of active scopes.</value>
+  </data>
+  <data name="OnlyAbleToComparePSDriveInfo" xml:space="preserve">
+    <value>Cannot compare PSDriveInfo. A PSDriveInfo instance can be compared only to another PSDriveInfo instance.</value>
+  </data>
+  <data name="OutputStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the output.</value>
+  </data>
+  <data name="ErrorStreamingNotEnabled" xml:space="preserve">
+    <value>The cmdlet provider cannot stream the results because no cmdlet was specified through which to stream the error.</value>
+  </data>
+  <data name="HomePathNotSet" xml:space="preserve">
+    <value>Home location for this provider is not set. To set the home location, call "(get-psprovider '{0}').Home = 'path'".</value>
+  </data>
+  <data name="NotProviderQualifiedPath" xml:space="preserve">
+    <value>The path is not in the correct format. Provider paths must contain a provider Id, followed by "::", followed by a provider specific path.</value>
+  </data>
+  <data name="MovePropertyDestinationResolveToSingle" xml:space="preserve">
+    <value>Cannot move the item because the destination path can resolve only to a single path.</value>
+  </data>
+  <data name="MoveItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Cannot move the item because the source and destination paths did not resolve to the same provider.</value>
+  </data>
+  <data name="MoveItemPathMultipleDestinationNotContainer" xml:space="preserve">
+    <value>Cannot move the item because the source path points to one or more items and the destination path is not a container. Validate that the destination path is a container and try again.</value>
+  </data>
+  <data name="MoveItemOneDestination" xml:space="preserve">
+    <value>Cannot move the item because the destination resolved to multiple paths. Specify a destination path that resolves to a single destination and try again.</value>
+  </data>
+  <data name="CopyContainerItemToLeafError" xml:space="preserve">
+    <value>Container cannot be copied onto existing leaf item.</value>
+  </data>
+  <data name="CopyContainerToContainerWithoutRecurseOrContainer" xml:space="preserve">
+    <value>Container cannot be copied to another container. The -Recurse or -Container parameter is not specified.</value>
+  </data>
+  <data name="CopyItemSourceAndDestinationNotSameProvider" xml:space="preserve">
+    <value>Source and destination path did not resolve to the same provider.</value>
+  </data>
+  <data name="RenameMultipleItemError" xml:space="preserve">
+    <value>Cannot rename item because the path resolved to multiple items. Only one item can be renamed at a time.</value>
+  </data>
+  <data name="ProviderImplementationInconsistent" xml:space="preserve">
+    <value>The provider '{0}' cannot be used to resolve the path '{1}' because of an error in the provider.</value>
+  </data>
+  <data name="IContentCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IContentCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="IPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.</value>
+  </data>
+  <data name="IDynamicPropertyCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot use interface. The IDynamicPropertyCmdletProvider interface is not implemented by this provider.</value>
+  </data>
+  <data name="NavigationCmdletProvider_NotSupported" xml:space="preserve">
+    <value>The NavigationCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ContainerCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider methods not processed. The ContainerCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="ItemCmdletProvider_NotSupported" xml:space="preserve">
+    <value>Cannot call methods. The ItemCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="DriveCmdletProvider_NotSupported" xml:space="preserve">
+    <value>DriveCmdletProvider methods are not supported by this provider.</value>
+  </data>
+  <data name="CmdletProvider_NotSupported" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support this operation.</value>
+  </data>
+  <data name="CmdletProvider_NotSupportedRecursionDepth" xml:space="preserve">
+    <value>Provider operation stopped because the provider does not support the 'Depth' parameter.</value>
+  </data>
+  <data name="IContent_Seek_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The content Seek method is not supported by this provider.</value>
+  </data>
+  <data name="IContent_Clear_NotSupported" xml:space="preserve">
+    <value>Cannot perform the ClearContent operation. The ClearContent operation is not supported by this provider.</value>
+  </data>
+  <data name="Credentials_NotSupported" xml:space="preserve">
+    <value>The provider does not support the use of credentials. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="FileSystemProviderCredentials_NotSupported" xml:space="preserve">
+    <value>The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.</value>
+  </data>
+  <data name="Transactions_NotSupported" xml:space="preserve">
+    <value>The provider does not support transactions. Perform the operation again without the -UseTransaction parameter.</value>
+  </data>
+  <data name="Filter_NotSupported" xml:space="preserve">
+    <value>Cannot call method. The provider does not support the use of filters.</value>
+  </data>
+  <data name="NewDriveCredentials_NotSupported" xml:space="preserve">
+    <value>Cannot create drive. The provider does not support the use of credentials.</value>
+  </data>
+  <data name="NewItemAlreadyExists" xml:space="preserve">
+    <value>The item at path '{0}' already exists.</value>
+  </data>
+  <data name="CopyItemDoesntExist" xml:space="preserve">
+    <value>Cannot copy item. Item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="RenameItemDoesntExist" xml:space="preserve">
+    <value>The item at the path '{0}' does not exist.</value>
+  </data>
+  <data name="AliasDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the aliases stored in a session state</value>
+  </data>
+  <data name="EnvironmentDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the environment variables for the process</value>
+  </data>
+  <data name="FunctionDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of the functions stored in a session state</value>
+  </data>
+  <data name="VariableDriveDescription" xml:space="preserve">
+    <value>Drive that contains a view of those variables stored in a session state</value>
+  </data>
+  <data name="TempDriveDescription" xml:space="preserve">
+    <value>Drive that maps to the temporary directory path for the current user</value>
+  </data>
+  <data name="NewLinkTargetNotSpecified" xml:space="preserve">
+    <value>Link '{0}' cannot be created because the target Value was not specified.</value>
+  </data>
+  <data name="DollarNullDescription" xml:space="preserve">
+    <value>References to the null variable always return the null value. Assignments have no effect.</value>
+  </data>
+  <data name="MaxHistoryCountDescription" xml:space="preserve">
+    <value>Maximum number of history objects to retain in a session</value>
+  </data>
+  <data name="CannotRenameFunction" xml:space="preserve">
+    <value>Cannot rename function because function {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameAlias" xml:space="preserve">
+    <value>Cannot rename alias because alias {0} is read-only or constant.</value>
+  </data>
+  <data name="CannotRenameVariable" xml:space="preserve">
+    <value>Cannot rename variable because variable {0} is read-only or constant.</value>
+  </data>
+  <data name="VariableOptionsNotSettable" xml:space="preserve">
+    <value>Cannot set options on the local variable {0}. Use New-Variable to create a variable that allows options to be set.</value>
+  </data>
+  <data name="CmdletIsReadOnly" xml:space="preserve">
+    <value>Cmdlet {0} cannot be modified because it is read-only.</value>
+  </data>
+  <data name="VariableNotRemovableRare" xml:space="preserve">
+    <value>Cannot remove variable {0} because the variable has been optimized and is not removable. Try using the Remove-Variable cmdlet (without any aliases), or dot-sourcing the command that you are using to remove the variable.</value>
+  </data>
+  <data name="VariableNotWritableRare" xml:space="preserve">
+    <value>Cannot overwrite variable {0} because the variable has been optimized. Try using the New-Variable or Set-Variable cmdlet (without any aliases), or dot-source the command that you are using to set the variable.</value>
+  </data>
+  <data name="GetContent_TailAndHeadCannotCoexist" xml:space="preserve">
+    <value>The parameters {0} and {1} cannot be used together. Please specify only one parameter.</value>
+  </data>
+  <data name="GetContent_TailNotSupported" xml:space="preserve">
+    <value>The Tail parameter currently is supported only for the FileSystem provider.</value>
+  </data>
+  <data name="AliasWithCommandNameAlreadyExists" xml:space="preserve">
+    <value>The alias is not allowed, because a command with the name '{0}' and command type '{1}' already exists.</value>
+  </data>
+  <data name="CanNotRun" xml:space="preserve">
+    <value>Cannot run software. Permission is denied.</value>
+  </data>
+  <data name="CopyItemFromSessionToSession" xml:space="preserve">
+    <value>'-{0}' and '-{1}' are mutually exclusive and cannot be specified at the same time.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNotAbsolute" xml:space="preserve">
+    <value>The path '{0}' is not valid. Only absolute paths are supported on remote copy operations.</value>
+  </data>
+  <data name="CopyItemValidateRemotePath" xml:space="preserve">
+    <value>Cannot validate remote path '{0}'.</value>
+  </data>
+  <data name="CopyItemSessionProperties" xml:space="preserve">
+    <value>Cannot perform operation because the session {0} is set to {1}.</value>
+  </data>
+  <data name="CopyItemRemotelyPathIsNullOrEmpty" xml:space="preserve">
+    <value>'{0}' parameter cannot be null or empty.</value>
+  </data>
+  <data name="WDACSessionStateVarLogTitle" xml:space="preserve">
+    <value>Session State Variables</value>
+  </data>
+  <data name="WDACSessionStateVarLogMessage" xml:space="preserve">
+    <value>Changing or creating the variable '{0}' scope to AllScope will be prevented in ConstrainedLanguage mode.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/StringDecoratedStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/StringDecoratedStrings.zh-Hans.resx
new file mode 100644
index 00000000000..4e678a09522
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/StringDecoratedStrings.zh-Hans.resx
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="RequireExplicitRendering" xml:space="preserve">
+    <value>此方法仅支持 "‌ANSI"‌ 或 "‌PlainText"‌。</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/SubsystemStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/SubsystemStrings.zh-Hans.resx
new file mode 100644
index 00000000000..6fbbda319de
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/SubsystemStrings.zh-Hans.resx
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MultipleRegistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow more than one implementation to be registered.</value>
+  </data>
+  <data name="ImplementationAlreadyRegistered" xml:space="preserve">
+    <value>The implementation with Id '{0}' was already registered for the subsystem '{1}'.</value>
+  </data>
+  <data name="UnregistrationNotAllowed" xml:space="preserve">
+    <value>The subsystem '{0}' does not allow the unregistration of an implementation.</value>
+  </data>
+  <data name="NoImplementationRegistered" xml:space="preserve">
+    <value>No implementation was registered for the subsystem '{0}'.</value>
+  </data>
+  <data name="ImplementationNotFound" xml:space="preserve">
+    <value>A registered implementation with the Id '{0}' was not found.</value>
+  </data>
+  <data name="SubsystemTypeUnknown" xml:space="preserve">
+    <value>The specified subsystem type '{0}' is unknown.</value>
+  </data>
+  <data name="MustUseConcreteSubsystemType" xml:space="preserve">
+    <value>You must specify a concrete subsystem type instead of the base interface 'ISubsystem'.</value>
+  </data>
+  <data name="SubsystemKindUnknown" xml:space="preserve">
+    <value>The specified subsystem kind '{0}' is unknown.</value>
+  </data>
+  <data name="ConcreteSubsystemNotImplemented" xml:space="preserve">
+    <value>For the target subsystem kind '{0}', the specified subsystem instance needs to implement the corresponding concrete interface or abstract class '{1}'.</value>
+  </data>
+  <data name="InvalidSubsystemInfo" xml:space="preserve">
+    <value>The declared metadata for subsystem kind '{0}' is invalid. A subsystem that requires cmdlets or functions to be defined cannot allow multiple registrations because that would result in one implementation overwriting the commands defined by another implementation.</value>
+  </data>
+  <data name="EmptyImplementationId" xml:space="preserve">
+    <value>The 'Id' property of an implementation for the subsystem '{0}' cannot be an empty GUID.</value>
+  </data>
+  <data name="NullOrEmptyImplementationName" xml:space="preserve">
+    <value>The 'Name' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+  <data name="NullOrEmptyImplementationDescription" xml:space="preserve">
+    <value>The 'Description' property of an implementation for the subsystem '{0}' cannot be null or an empty string.</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/SuggestionStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/SuggestionStrings.zh-Hans.resx
new file mode 100644
index 00000000000..ae0b24613a6
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/SuggestionStrings.zh-Hans.resx
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Suggestion_CommandExistsInCurrentDirectory" xml:space="preserve">
+    <value>未找到命令“{0}”，但它确实存在于当前位置。
+默认情况下，PowerShell 不会从当前位置加载命令(请参阅 "Get-Help about_Command_Precedence")。
+
+如果你信任此命令，请改为运行以下命令:</value>
+  </data>
+  <data name="Suggestion_CommandNotFound" xml:space="preserve">
+    <value>最相似的命令是:</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/TabCompletionStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/TabCompletionStrings.zh-Hans.resx
new file mode 100644
index 00000000000..30debf0f2bf
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/TabCompletionStrings.zh-Hans.resx
@@ -0,0 +1,610 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CannotDeserializeTabCompletionResult" xml:space="preserve">
+    <value>The tab completion result cannot be properly deserialized because the remote runspace does not contain a TypeTable instance.</value>
+  </data>
+  <data name="NoAccessToProperties" xml:space="preserve">
+    <value>Cannot access properties on a null instance of the type CompletionResult.</value>
+  </data>
+  <data name="bnotOperatorDescription" xml:space="preserve">
+    <value>Bitwise NOT</value>
+  </data>
+  <data name="notOperatorDescription" xml:space="preserve">
+    <value>Logical not. Negates the statement that follows it.</value>
+  </data>
+  <data name="eqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ieqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case insensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="ceqOperatorDescription" xml:space="preserve">
+    <value>Equal to - case sensitive. When the left operand is a collection, returns values from the collection that equal the right operand, otherwise returns TRUE if the left operand equals the right operand.</value>
+  </data>
+  <data name="neOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="ineOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case insensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="cneOperatorDescription" xml:space="preserve">
+    <value>Not equal to - case sensitive. When the left operand is a collection, returns values from the collection that do not equal the right operand, otherwise returns TRUE if the left operand does not equal the right operand.</value>
+  </data>
+  <data name="geOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="igeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="cgeOperatorDescription" xml:space="preserve">
+    <value>Greater than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are greater than or equal to the right operand, otherwise returns TRUE if the left operand is greater than or equal to the right operand.</value>
+  </data>
+  <data name="gtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="igtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case insensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="cgtOperatorDescription" xml:space="preserve">
+    <value>Greater than - case sensitive. When the left operand is a collection, returns values from the collection that are greater than the right operand, otherwise returns TRUE if the left operand is greater than the right operand.</value>
+  </data>
+  <data name="ltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="iltOperatorDescription" xml:space="preserve">
+    <value>Less than - case insensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="cltOperatorDescription" xml:space="preserve">
+    <value>Less than - case sensitive. When the left operand is a collection, returns values from the collection that are less than the right operand, otherwise returns TRUE if the left operand is less than the right operand.</value>
+  </data>
+  <data name="leOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="ileOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case insensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="cleOperatorDescription" xml:space="preserve">
+    <value>Less than or equal to - case sensitive. When the left operand is a collection, returns values from the collection that are less than or equal to the right operand, otherwise returns TRUE if the left operand is less than or equal to the right operand.</value>
+  </data>
+  <data name="likeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="ilikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="clikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotlikeOperatorDescription" xml:space="preserve">
+    <value>Wildcard matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="matchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="imatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="cmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that match the right hand operand, otherwise returns TRUE if the left operand matches the right operand.</value>
+  </data>
+  <data name="notmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="inotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case insensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="cnotmatchOperatorDescription" xml:space="preserve">
+    <value>Regular expression matching operator - case sensitive. When the left operand is a collection, returns values from the collection that do not match the right hand operand, otherwise returns TRUE if the left operand does not match the right operand.</value>
+  </data>
+  <data name="replaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="ireplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case insensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="creplaceOperatorDescription" xml:space="preserve">
+    <value>Replace operator - case sensitive. Changes the left operand. Example: (dir *.ps1).FullName -replace '.ps1$','.ps1.bak'</value>
+  </data>
+  <data name="containsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="icontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="ccontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE only when the test value (right operand) exactly matches at least one of the values in the left operand.</value>
+  </data>
+  <data name="notcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="cnotcontainsOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (right operand) exactly matches none of the values in the left operand.</value>
+  </data>
+  <data name="inOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="iinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="cinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches at least one of the values in the right operand.</value>
+  </data>
+  <data name="notinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="inotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case insensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="cnotinOperatorDescription" xml:space="preserve">
+    <value>Containment operator - case sensitive. Returns TRUE when the test value (left operand) exactly matches none of the values in the right operand.</value>
+  </data>
+  <data name="splitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isplitOperatorDescription" xml:space="preserve">
+    <value>Split - case insensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="csplitOperatorDescription" xml:space="preserve">
+    <value>Split - case sensitive. Split one or more strings into substrings.
+-Split &lt;String&gt;
+
+&lt;String&gt; -Split &lt;Delimiter&gt;[,&lt;Max-substrings&gt;[,"&lt;Options&gt;"]]
+
+&lt;String&gt; -Split {&lt;ScriptBlock&gt;} [,&lt;Max-substrings&gt;]</value>
+  </data>
+  <data name="isnotOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is not an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="isOperatorDescription" xml:space="preserve">
+    <value>Returns TRUE when the left operand is an instance of the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="asOperatorDescription" xml:space="preserve">
+    <value>Converts the left operand to the specified .NET Framework type (right operand).</value>
+  </data>
+  <data name="fOperatorDescription" xml:space="preserve">
+    <value>Formats strings by using the format method of string objects.</value>
+  </data>
+  <data name="andOperatorDescription" xml:space="preserve">
+    <value>Logical and. Returns TRUE when both statements are TRUE.</value>
+  </data>
+  <data name="bandOperatorDescription" xml:space="preserve">
+    <value>Bitwise AND</value>
+  </data>
+  <data name="orOperatorDescription" xml:space="preserve">
+    <value>Logical or. TRUE when either or both statements are TRUE.</value>
+  </data>
+  <data name="borOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (inclusive)</value>
+  </data>
+  <data name="xorOperatorDescription" xml:space="preserve">
+    <value>Logical exclusive or. Returns TRUE when one of the statements is TRUE and the other is FALSE.</value>
+  </data>
+  <data name="bxorOperatorDescription" xml:space="preserve">
+    <value>Bitwise OR (exclusive)</value>
+  </data>
+  <data name="joinOperatorDescription" xml:space="preserve">
+    <value>Join - combine multiple strings into a single string.
+-Join &lt;String[]&gt;
+&lt;String[]&gt; -Join &lt;Delimiter&gt;</value>
+  </data>
+  <data name="shlOperatorDescription" xml:space="preserve">
+    <value>Shift Left bit operator. Inserts zero in right-most bit position.</value>
+  </data>
+  <data name="shrOperatorDescription" xml:space="preserve">
+    <value>Shift Right bit operator. Inserts zero in the left-most bit position. For signed values, sign bit is preserved.</value>
+  </data>
+  <data name="NameHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="LabelHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies the name of the property being created.</value>
+  </data>
+  <data name="ExpressionHashtableKeyDescription" xml:space="preserve">
+    <value>[scriptblock]
+A script block used to calculate the value of the new property.</value>
+  </data>
+  <data name="AlignmentHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Define how the values are displayed in a column.
+Valid values are 'left', 'center', or 'right'.</value>
+  </data>
+  <data name="FormatStringHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Specifies a format string that defines how the value is formatted for output.</value>
+  </data>
+  <data name="WidthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+Specifies the maximum column width in a table when the value is displayed.
+The value must be greater than 0.</value>
+  </data>
+  <data name="DepthHashtableKeyDescription" xml:space="preserve">
+    <value>[int]
+The depth key specifies the depth of expansion per property.</value>
+  </data>
+  <data name="AscendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="DescendingHashtableKeyDescription" xml:space="preserve">
+    <value>[bool]
+Specifies the order of sorting for one or more properties.</value>
+  </data>
+  <data name="LogNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the log names to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="ProviderNameHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies the event log providers to get events from.
+Supports wildcards.</value>
+  </data>
+  <data name="PathHashtableKeyDescription" xml:space="preserve">
+    <value>[String[]]
+Specifies file paths to log files to get events from.
+Valid file formats are: .etl, .evt, and .evtx</value>
+  </data>
+  <data name="KeywordsHashtableKeyDescription" xml:space="preserve">
+    <value>[Long[]]
+Selects events with the specified keyword bitmasks.
+The following are standard keywords:
+4503599627370496: AuditFailure
+9007199254740992: AuditSuccess
+4503599627370496: CorrelationHint
+18014398509481984: CorrelationHint2
+36028797018963968: EventLogClassic
+281474976710656: ResponseTime
+2251799813685248: Sqm
+562949953421312: WdiContext
+1125899906842624: WdiDiagnostic</value>
+  </data>
+  <data name="IDHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified event IDs.</value>
+  </data>
+  <data name="LevelHashtableKeyDescription" xml:space="preserve">
+    <value>[int[]]
+Selects events with the specified log levels.
+The following log levels are valid:
+1: Critical
+2: Error
+3: Warning
+4: Informational
+5: Verbose</value>
+  </data>
+  <data name="StartTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created after the specified date and time.</value>
+  </data>
+  <data name="EndTimeHashtableKeyDescription" xml:space="preserve">
+    <value>[datetime]
+Selects events created before the specified date and time.</value>
+  </data>
+  <data name="UserIDHashtableKeyDescription" xml:space="preserve">
+    <value>[string]
+Selects events generated by the specified user.
+This can either be a string representation of a SID or a domain and username in the format DOMAIN\USERNAME or USERNAME@DOMAIN</value>
+  </data>
+  <data name="DataHashtableKeyDescription" xml:space="preserve">
+    <value>[string[]]
+Selects events with any of the specified values in the EventData section.</value>
+  </data>
+  <data name="SuppressHashFilterHashtableKeyDescription" xml:space="preserve">
+    <value>[hashtable]
+Excludes events that match the values specified in the hashtable.</value>
+  </data>
+  <data name="RequiresModulesParameterDescription" xml:space="preserve">
+    <value>[string] or [hashtable]
+Specifies an array of PowerShell modules that the script requires.
+Each element can either be a string with the module name as value or a hashtable with the following keys:
+Name: Name of the module
+GUID: GUID of the module
+One of the following:
+ModuleVersion: Specifies a minimum acceptable version of the module.
+RequiredVersion: Specifies an exact, required version of the module.
+MaximumVersion: Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresPSEditionParameterDescription" xml:space="preserve">
+    <value>[string]
+Specifies a PowerShell edition that the script requires.
+Valid values are "Core" and "Desktop"</value>
+  </data>
+  <data name="RequiresRunAsAdministratorParameterDescription" xml:space="preserve">
+    <value>[switch]
+Specifies that PowerShell must be running as administrator on Windows.
+This must be the last parameter on the #requires statement line.</value>
+  </data>
+  <data name="RequiresVersionParameterDescription" xml:space="preserve">
+    <value>[version]
+Specifies the minimum version of PowerShell that the script requires.</value>
+  </data>
+  <data name="RequiresPsEditionCoreDescription" xml:space="preserve">
+    <value>Specifies that the script requires PowerShell 7+ to run.</value>
+  </data>
+  <data name="RequiresPsEditionDesktopDescription" xml:space="preserve">
+    <value>Specifies that the script requires Windows PowerShell 5.1 to run.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleNameDescription" xml:space="preserve">
+    <value>[string]
+Required. Specifies the module name.</value>
+  </data>
+  <data name="RequiresModuleSpecGUIDDescription" xml:space="preserve">
+    <value>[string]
+Optional. Specifies the GUID of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecModuleVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies a minimum acceptable version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecRequiredVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies an exact, required version of the module.</value>
+  </data>
+  <data name="RequiresModuleSpecMaximumVersionDescription" xml:space="preserve">
+    <value>[string]
+Specifies the maximum acceptable version of the module.</value>
+  </data>
+  <data name="CommentHelpSYNOPSISKeywordDescription" xml:space="preserve">
+    <value>A brief description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpDESCRIPTIONKeywordDescription" xml:space="preserve">
+    <value>A detailed description of the function or script.
+This keyword can be used only once in each topic.</value>
+  </data>
+  <data name="CommentHelpPARAMETERKeywordDescription" xml:space="preserve">
+    <value>.PARAMETER  &lt;Parameter-Name&gt;
+The description of a parameter.
+Add a .PARAMETER keyword for each parameter in the function or script syntax.</value>
+  </data>
+  <data name="CommentHelpEXAMPLEKeywordDescription" xml:space="preserve">
+    <value>A sample command that uses the function or script, optionally followed by sample output and a description.
+Repeat this keyword for each example.</value>
+  </data>
+  <data name="CommentHelpINPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET types of objects that can be piped to the function or script.
+You can also include a description of the input objects.</value>
+  </data>
+  <data name="CommentHelpOUTPUTSKeywordDescription" xml:space="preserve">
+    <value>The .NET type of the objects that the cmdlet returns.
+You can also include a description of the returned objects.</value>
+  </data>
+  <data name="CommentHelpNOTESKeywordDescription" xml:space="preserve">
+    <value>Additional information about the function or script.</value>
+  </data>
+  <data name="CommentHelpLINKKeywordDescription" xml:space="preserve">
+    <value>The name of a related topic.
+Repeat the .LINK keyword for each related topic.
+The .Link keyword content can also include a URI to an online version of the same help topic.</value>
+  </data>
+  <data name="CommentHelpCOMPONENTKeywordDescription" xml:space="preserve">
+    <value>The name of the technology or feature that the function or script uses, or to which it is related.</value>
+  </data>
+  <data name="CommentHelpROLEKeywordDescription" xml:space="preserve">
+    <value>The name of the user role for the help topic.</value>
+  </data>
+  <data name="CommentHelpFUNCTIONALITYKeywordDescription" xml:space="preserve">
+    <value>The keywords that describe the intended use of the function.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPTARGETNAMEKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPTARGETNAME &lt;Command-Name&gt;
+Redirects to the help topic for the specified command.</value>
+  </data>
+  <data name="CommentHelpFORWARDHELPCATEGORYKeywordDescription" xml:space="preserve">
+    <value>.FORWARDHELPCATEGORY &lt;Category&gt;
+Specifies the help category of the item in .ForwardHelpTargetName</value>
+  </data>
+  <data name="CommentHelpREMOTEHELPRUNSPACEKeywordDescription" xml:space="preserve">
+    <value>.REMOTEHELPRUNSPACE &lt;PSSession-variable&gt;
+Specifies a session that contains the help topic.
+Enter a variable that contains a PSSession object.</value>
+  </data>
+  <data name="CommentHelpEXTERNALHELPKeywordDescription" xml:space="preserve">
+    <value>.EXTERNALHELP &lt;XML Help File&gt;
+The .ExternalHelp keyword is required when a function or script is documented in XML files.</value>
+  </data>
+  <data name="AssemblyKeywordDescription" xml:space="preserve">
+    <value>Specifies the path to a .NET assembly to load.
+
+using assembly &lt;.NET-assembly-path&gt;</value>
+  </data>
+  <data name="ModuleKeywordDescription" xml:space="preserve">
+    <value>Specifies a PowerShell module to load classes from.
+
+using module &lt;ModuleName or Path&gt;
+
+using module &lt;ModuleSpecification hashtable&gt;</value>
+  </data>
+  <data name="NamespaceKeywordDescription" xml:space="preserve">
+    <value>Specifies a .NET namespace to resolve types from or a namespace alias.
+
+using namespace &lt;.NET-namespace&gt;
+
+using namespace &lt;AliasName&gt; = &lt;.NET-namespace&gt;</value>
+  </data>
+  <data name="TypeKeywordDescription" xml:space="preserve">
+    <value>Specifies an alias for a .NET Type.
+
+using type &lt;AliasName&gt; = &lt;.NET-type&gt;</value>
+  </data>
+  <data name="RegistryStringToolTip" xml:space="preserve">
+    <value>A normal string.</value>
+  </data>
+  <data name="RegistryExpandStringToolTip" xml:space="preserve">
+    <value>A string that contains unexpanded references to environment variables that are expanded when the value is retrieved.</value>
+  </data>
+  <data name="RegistryBinaryToolTip" xml:space="preserve">
+    <value>Binary data in any form.</value>
+  </data>
+  <data name="RegistryDWordToolTip" xml:space="preserve">
+    <value>A 32-bit binary number.</value>
+  </data>
+  <data name="RegistryMultiStringToolTip" xml:space="preserve">
+    <value>An array of strings.</value>
+  </data>
+  <data name="RegistryQWordToolTip" xml:space="preserve">
+    <value>A 64-bit binary number.</value>
+  </data>
+  <data name="RegistryUnknownToolTip" xml:space="preserve">
+    <value>An unsupported registry data type.</value>
+  </data>
+  <data name="SeparatorCommaToolTip" xml:space="preserve">
+    <value>',' - Comma</value>
+  </data>
+  <data name="SeparatorCommaSpaceToolTip" xml:space="preserve">
+    <value>', ' - Comma-Space</value>
+  </data>
+  <data name="SeparatorSemiColonToolTip" xml:space="preserve">
+    <value>';' - Semi-Colon</value>
+  </data>
+  <data name="SeparatorSemiColonSpaceToolTip" xml:space="preserve">
+    <value>'; ' - Semi-Colon-Space</value>
+  </data>
+  <data name="SeparatorNewlineToolTip" xml:space="preserve">
+    <value>{0} - Newline</value>
+  </data>
+  <data name="SeparatorDashToolTip" xml:space="preserve">
+    <value>'-' - Dash</value>
+  </data>
+  <data name="SeparatorSpaceToolTip" xml:space="preserve">
+    <value>' ' - Space</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/System.Management.Automation/resources/zh-Hans/TransactionStrings.zh-Hans.resx b/src/System.Management.Automation/resources/zh-Hans/TransactionStrings.zh-Hans.resx
new file mode 100644
index 00000000000..81f7f14a45d
--- /dev/null
+++ b/src/System.Management.Automation/resources/zh-Hans/TransactionStrings.zh-Hans.resx
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contai